\chapter{Overview} This chapter gives an overview of CACAO. It describes the general structure and the partitioning into modules. \section{Introduction} CACAO is partitioned into modules which are usually a .c file or a complete subdirectory. The modules are bound together by the main module (main.c) which parses the command line options, calls the system class loader (loader.c) and invokes the main method of the java class file. The first time a method is invoked the just-in-time compiler (jit) generates machine code for the selected host architecture. During the execution it is possible that native function are called. All native functions have to be linked with all other modules. Therefore, tables and headers have to be generated by the header file generator (headers.c) before the rest of the CACAO system is build. The Boehm-Weiser garbage collector is used for memory management. Figure \ref{cacao_overview} gives an overview of CACAO. \section{Class loader} The class loader loads the Java class files and creates the data structures which are necessary for the compilation and execution of byte code programs. Java class files contain information about all referenced classes. Currently CACAO uses this information to load classes eagerly. All classes which are referenced directly or indirectly by the main class are loaded at program start. \section{Just-in-time compiler} \section{Run time system} \section{Class library}