Talk:Java class file

message: The structure sections need some work, it is incorrect as is.  The "arrays", such as the constant pool, are not arrays in the typical sense (the entries are not all the same size), instead it is more like a stream.  Thus the formulas calculating it's size are misleading at best; they don't compute the number of bytes used.  Also they don't account for the strange fact that long and double types consume two slots (leaving a phantom unused slot behind) rather than one slot like all other types.  It should also be mentioned that the JVM's UTF-8 string type is not quite standard UTF-8; it is a modified non-standard form.  The C representation is also by no means able to "fully represent" the file structure as stated.  First, one must assume big-endian layout, no padding bytes, and the use of IEEE 754 floating point storage format.  And as mentioned the arrays are nothing like C arrays at all (they contain variable-width members), so that part is pseudo code at best.  Also the structure shown is only the outermost layer; none of the dependent inner types are shown in the code (so it can not be a complete representation). The table is also just visually cluttered, I'm sure it could be cleaned up a lot.  - Dmeranda 05:20, 23 October 2007 (UTC)
replies: text: I've made some attempts at cleaning up the large table and elaborating on some of the details.  I also removed the fake "C structure" section entirely; it was not even close to being correct C code, and was not at all useful to this article. - Dmeranda 21:09, 23 October 2007 (UTC)
thread_title:  Structure section needs a lot of work 

message: The Java Virtual Machine Specification introduces the class file format with a C-like representation rather than a binary table format for a reason. Some find this more readable and easier to comprehend. That is why both are present in this article.
@modi 05:06, 8 November 2007 (UTC)
replies: text: I appreciate trying to make this article more readable, but with this case I disagree.  The reason is apparently because the JVM spec authors don't know C, or didn't care, or because they follow the code with dozens of pages of clarifying text which then go on to explain why the format is actually not like the pseudo-C code they just presented.  This example code is not even remotely close to being correct C code (or even Java code), and trying to present it as such is quite misleading.  Most of the "types" are of undefined variable length (C types are always fixed length).  No padding bytes are ever introduced (as C frequently does).  A definite byte-order is mandated, which C can never indicate.  The things which look like C arrays are stored absolutely nothing like real C arrays.  Even the indicated "length" of the arrays is completely wrong in the constant_pool case due to the double-slot flaw.  In fact, just about everything in the file format is so completely not like C that I wonder what in the world the writers of the specification were thinking.  If a reader can't understand a table of simple file offsets and wants to pretend like they can use a C structure then they can read the spec; that's why it's listed in the references.  This article is not trying to replace the entire quite-lengthy specification, it is only showing a flavor of the format.  Copying large blocks of poorly-authored text verbatim from the referenced document (which shouldn't be done regardless of quality) and taken out of context (from all the clarifying text that follows) provides no extra value here, and only clutters the article and adds about a dozen ways the reader can be easily misled. - Dmeranda 14:08, 8 November 2007 (UTC)
thread_title:  C programming language representation belongs in article 

message: One thing that isn't mentioned in the structure section, and is a
very convenient thing to know in practice, is the assurance from
JVMS chapter 4 that the concrete representations of various data
types in the class file are exactly the representations consumed
and produced by java.io.DataInputStream and java.io.DataOutputStream,
respectively.--128.210.4.213 (talk) 22:47, 3 January 2008 (UTC)
thread_title:  Re structure and representation 

message: The article states, "Other integral types appearing in the high-level language, such as boolean, byte, and short must be represented as an integer constant."
While it's true that if you wanted to include a constant of one of these types into the constant pool, an integer entry 
was needed, a standard compiler will never do so as there are instructions (bipush and sipush) for using small integer values directly without the need for a constant pool entry at all.
Since the Java bytecode makes no difference between these integral types, all int values fitting into the short value range are encoded this way. Only values outside this range or needed for initializing compile-time constants (e.g. static final fields) will end up in the constant pool.  —Preceding unsigned comment added by 77.188.94.56 (talk) 15:56, 22 February 2011 (UTC)
replies: text: Indeed, byte, short, and smaller char constant values used in the code will never appear in the constant pool (and maybe this is worth mentioning in the article). But for other uses of constant pool entries, e.g. the compile-time values of static final variables, these types require an int entry. There is another difference between the general class file format and the byte code instructions: as the article states, there’s no padding in the class file format, but within byte code instructions there is an exception to this rule regarding the two switch instructions as their tables are aligned. 77.12.173.11 (talk)   — Preceding undated comment added 09:40, 16 April 2014 (UTC)
replies: text: without jdk why we cant run the java programm in comand promnt 119.235.54.130 (talk) 09:17, 3 April 2024 (UTC)
thread_title:  boolean, byte, and short in constant pool