ClassFiles are the ByteCode form of Java. They are platform independant and one of the main reasons for the success of the Java language. They are normally distributed in JarFile, which is a specialisation of a zip(1) file.
The ClassFile is built around a Constant Pool, which is rather like a symbol table in a Fortran library.
A Number of key limitations are introduced into Java systems by the ClassFile format, including:
- The per-class or per-interface constant pool is limited to 65535 entries
- The size of code per non-native, non-abstract method is limited to 65536 bytes
- The greatest number of local variables in the local variables array of a frame created upon invocation of a method is limited to 65535
- The number of fields that may be declared by a class or interface is limited to 65535
- The number of methods that may be declared by a class or interface is limited to 65535
- The number of direct superinterfaces of a class or interface is limited to 65535
These issues are not usually a problem for hand-written code, but CompilerCompilers often generate finite state machines which run into these. The canonical reference for these issues is: http://java.sun.com/docs/books/vmspec/2nd-edition/html/ClassFile.doc.html