Chciałbym zapytać o kolejność pól w Javie. Zgodnie z artykułem [0], a konkretniej sekcją 'Object packing' kolejność pól będzie inna niż zadeklarowano w kodzie źródłowym, żeby nie marnować miejsca. Skompilowałem podany przykład i korzystając z programu javap spojrzałem na to co jest w środku (jdk 8u40) i kolejność została niezmieniona
Last modified 2016-05-31; size 465 bytes
MD5 checksum 3782544d5b42c7d920fd371ac77d4dc6
Compiled from "StaticClass.java"
public class cybuch.StaticClass$Button
minor version: 0
major version: 52
flags: ACC_PUBLIC, ACC_SUPER
Constant pool:
#1 = Methodref #3.#22 // java/lang/Object."<init>":()V
#2 = Class #24 // cybuch/StaticClass$Button
#3 = Class #27 // java/lang/Object
#4 = Utf8 shape
#5 = Utf8 C
#6 = Utf8 label
#7 = Utf8 Ljava/lang/String;
#8 = Utf8 xposition
#9 = Utf8 I
#10 = Utf8 yposition
#11 = Utf8 color
#12 = Utf8 joe
#13 = Utf8 mike
#14 = Utf8 Ljava/lang/Object;
#15 = Utf8 armed
#16 = Utf8 <init>
#17 = Utf8 ()V
#18 = Utf8 Code
#19 = Utf8 LineNumberTable
#20 = Utf8 SourceFile
#21 = Utf8 StaticClass.java
#22 = NameAndType #16:#17 // "<init>":()V
#23 = Class #28 // cybuch/StaticClass
#24 = Utf8 cybuch/StaticClass$Button
#25 = Utf8 Button
#26 = Utf8 InnerClasses
#27 = Utf8 java/lang/Object
#28 = Utf8 cybuch/StaticClass
{
char shape;
descriptor: C
flags:
java.lang.String label;
descriptor: Ljava/lang/String;
flags:
int xposition;
descriptor: I
flags:
int yposition;
descriptor: I
flags:
char color;
descriptor: C
flags:
int joe;
descriptor: I
flags:
java.lang.Object mike;
descriptor: Ljava/lang/Object;
flags:
char armed;
descriptor: C
flags:
public cybuch.StaticClass$Button();
descriptor: ()V
flags: ACC_PUBLIC
Code:
stack=1, locals=1, args_size=1
0: aload_0
1: invokespecial #1 // Method java/lang/Object."<init>":()V
4: return
LineNumberTable:
line 19: 0
}
SourceFile: "StaticClass.java"
InnerClasses:
public static #25= #2 of #23; //Button=class cybuch/StaticClass$Button of class cybuch/Stati
cClass
To kiedy zostanie zmieniona kolejność (czy w ogóle i zawsze)? Jak klasa zostanie załadowana do VM (HotSpota)?
[0] http://www.oracle.com/technetwork/java/whitepaper-135217.html