I started out by trying to compile an empty Pascal program. By this I mean a Pascal program with no statements or declarations. It looks like this:
program empty; begin end.
Before I could do this, I had to know exactly how a class file of an empty Java program looks. This is not described in [JVM], because it only describes what kind of fields a class file contains, not what these fields should contain, this can only be found out experimentally by looking at existing class files. This means that I had to find a way to represent the binary class files in such a way that I could read them. Because I could not find a program that showed me all the fields in the file, I decided to write one myself. The program I wrote, I called it jdisco, parses a class file and dumps all the fields in a readable layout on the screen. It does not resolve internal references in the class file, like references to constant_pool[] entries for example, it just writes the class file the way it is.
To find out what the contents of an empty Java class file is, I wrote an empty Java program and compiled it with the Java compiler. This is what an empty Java program looks like:
class Empty { public static void main(String[] args){} }
With the help of jdisco I found out that a class file of an empty program contains the following items:
Each of these items will be discussed in the following sections. After that I will describe what I did with this information.