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