\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}