字节<br>问题
Object obj = new Object(); <br>这个对象占多少字节?
占用16字节(B)jdk6 以后默认开启 <b>指针压缩</b>(-XX:+/-UseCompressedOops)
开启:MarkWord(8B)+KlassPoint(4B)+数组长度0+实例数据0+对齐填充4B的0
关闭:MarkWord(8B)+KlassPoint(8B)+数组长度0+实例数据0+对齐填充0
Int[] arr = {0,1,2}; <br>这个数组对象占多少字节?
开启是32字节:MarkWord(8B)+KlassPoint(4B)+数组长度4B+实例数据12B+对齐填充4B
关闭是40字节:MarkWord(8B)+KlassPoint(8B)+数组长度4B+<b><font color="#f15a23">头部填充4B</font></b>+实例数据12B+对齐填充4B
依据
HotSpot虚拟机的自动内存管理系统要求对象起始地址必须是8字节的整数倍,换句话说任何对象的大小都必须是8字节的整数倍
一般情况下,对象头中的MarkWord占8字节,KlassPoint开启指针压缩占4字节(默认开启),如果对象为数组,则数组长度占4字节,<br>实例数据根据数据类型做具体判断,如果实例数据是引用类型:开启指针压缩占4字节,不开启占8字节,对齐填充补满8的倍数
对象<br>个数
String str = "silver";<br>在JVM中创建了几个String对象?<br>
创建1个String对象,先在字符串常量池中创建"sliver"对象,然后将该对象的引用赋值给str
String str2 = new String("cool"); 呢?
常量池中如果有"cool"则创建1个String对象,如果没有,则创建2个String对象