屏幕快照 2020-12-30 上午12.22.24.png请解释下对象的创建的过程
对象在内存中存储布局
观察虚拟机配置
java -XX:+PrintCommandLineFlags -version
普通对象
- 对象头:markword 8
- ClassPointer指针:-XX:+UseCompressedClassPointers 为4字节 不开启为8字节
- 实例数据
- 引用类型:-XX:+UseCompressedOops 为4字节 不开启为8字节
Oops Ordinary Object Pointers
- 引用类型:-XX:+UseCompressedOops 为4字节 不开启为8字节
- Padding对齐,8的倍数
数组对象
- 对象头:markword 8
- ClassPointer指针同上
- 数组长度:4字节
- 数组数据
- 对齐 8的倍数
屏幕快照 2020-12-30 上午1.06.26.png对象头具体包括什么?
对象怎么定位?
•https://blog.csdn.net/clover_lily/article/details/80095580
- 句柄池
-
直接指针
屏幕快照 2020-12-30 上午1.16.45.png
屏幕快照 2020-12-30 上午1.20.36.png对象怎么分配?
Object 0 = new Object()在内存中占用多少字节?(请参考问题2,见上)
import com.mashibing.jvm.agent.ObjectSizeAgent;
public class T03_SizeOfAnObject {
public static void main(String[] args) {
System.out.println(ObjectSizeAgent.sizeOf(new Object())); // 16
System.out.println(ObjectSizeAgent.sizeOf(new int[] {})); // 16
System.out.println(ObjectSizeAgent.sizeOf(new P())); // 32
}
private static class P {
//8 _markword
//4 _oop指针
int id; //4
String name; //4
int age; //4
byte b1; //1
byte b2; //1
Object o; //4
byte b3; //1
}
}
————————————————————
坐标帝都,白天上班族,晚上是知识的分享者
如果读完觉得有收获的话,欢迎点赞加关注
网友评论