jol-core依赖版本的不同,下面代码分析的结果样式是不同的,下面再展示不同版本的结果
2、代码分析org.openjdk.jol jol-core0.16
import org.openjdk.jol.info.ClassLayout;
import org.openjdk.jol.info.GraphLayout;
import org.openjdk.jol.vm.VM;
public class test {
public static void main(String[] args) {
String s = "-1111111111111111111111111011011011110110100001001010001011110111";
// String s = "- 11111111【】 11111111【】 11111111【】 10110110【b6】 11110110【f6】 10000100【84】 10100010【a2】 11110111【f7】";
String b1 = "11110111";
System.out.println("s的长度是="+s.length());
System.out.println("=============================");
Person person = new Person();
// int hashCode = person.hashCode();
System.out.println(VM.current().details());
System.out.println("============================");
// String toHexString = Integer.toHexString(person.hashCode()); 136432db
System.out.println("10进制》》System.identityHashCode(person)="+System.identityHashCode(person));
System.out.println("16进制》》System.identityHashCode(person)="+Integer.toHexString(System.identityHashCode(person)));
System.out.println("hashcode转成16进制的string=" +Integer.toHexString(person.hashCode()));
System.out.println("=============================================");
System.out.println(GraphLayout.parseInstance(person).totalSize());
System.out.println("手动触发一次gc");
System.gc();
System.out.println("===========================================");
print(person);
}
static void print(Person p){
System.out.println("-----------------------------------------");
System.err.println(ClassLayout.parseInstance(p).toPrintable());
}
private static class Person {
private Integer age;
private String name;
private String address;
}
}
3、当version是0.16时,结果如下
s的长度是=65 ============================= # Running 64-bit HotSpot VM. # Using compressed oop with 3-bit shift. # Using compressed klass with 3-bit shift. # Objects are 8 bytes aligned. # Field sizes by type: 4, 1, 1, 2, 2, 4, 4, 8, 8 [bytes] # Array element sizes: 4, 1, 1, 2, 2, 4, 4, 8, 8 [bytes] ============================ 10进制》》System.identityHashCode(person)=325333723 16进制》》System.identityHashCode(person)=136432db hashcode转成16进制的string=136432db ============================================= 24 手动触发一次gc =========================================== ----------------------------------------- com.xxx.test$Person object internals: OFF SZ TYPE DEscriptION VALUE 0 8 (object header: mark) 0x000000136432db09 (hash: 0x136432db; age: 1) 8 4 (object header: class) 0xf800c143 12 4 java.lang.Integer Person.age null 16 4 java.lang.String Person.name null 20 4 java.lang.String Person.address null Instance size: 24 bytes Space losses: 0 bytes internal + 0 bytes external = 0 bytes total Process finished with exit code 04、当version是0.09时,结果如下
s的长度是=65
=============================
# Running 64-bit HotSpot VM.
# Using compressed oop with 3-bit shift.
# Using compressed klass with 3-bit shift.
# Objects are 8 bytes aligned.
# Field sizes by type: 4, 1, 1, 2, 2, 4, 4, 8, 8 [bytes]
# Array element sizes: 4, 1, 1, 2, 2, 4, 4, 8, 8 [bytes]
============================
10进制》》System.identityHashCode(person)=325333723
16进制》》System.identityHashCode(person)=136432db
hashcode转成16进制的string=136432db
=============================================
24
手动触发一次gc
===========================================
-----------------------------------------
com.xxx.test$Person object internals:
OFFSET SIZE TYPE DEscriptION VALUE
0 4 (object header) 09 db 32 64 (00001001 11011011 00110010 01100100) (1681054473)
4 4 (object header) 13 00 00 00 (00010011 00000000 00000000 00000000) (19)
8 4 (object header) 43 c1 00 f8 (01000011 11000001 00000000 11111000) (-134168253)
12 4 java.lang.Integer Person.age null
16 4 java.lang.String Person.name null
20 4 java.lang.String Person.address null
Instance size: 24 bytes
Space losses: 0 bytes internal + 0 bytes external = 0 bytes total
Process finished with exit code 0



