jvm知识点

一 对象的创建过程

1.loding

程序运行时,java文件程序被编译为class文件后,  将.Class文件加载到内存 此时会触发 JVM双亲委派机制* findInCache -> parent.loadClass -> findClass()

2.Linking 

静态变量赋默认值

1. Verification
1. 验证文件是否符合JVM规定
2. Preparation
1. 静态成员变量赋默认值
3. Resolution
1. 将类、方法、属性等符号引用解析为直接引用 常量池中的各种符号引用解析为指针、偏移量等内存地址的直接引用

3. Initializing

调用类初始化代码 <clinit>,给静态成员变量赋初始值

4.申请对象内存

5.成员变量赋默认值

6.调用构造方法<init>

   1.成员变量顺序赋初始值

   2.执行构造方法语句

二 对象在内存中的存储布局

 

普通对象


1. 对象头:markword 8
2. ClassPointer指针:-XX:+UseCompressedClassPointers 为4字节 不开启为8字节
3. 实例数据
引用类型:-XX:+UseCompressedOops 为4字节 不开启为8字节
Oops Ordinary Object Pointers
4. Padding对齐,8的倍数

数组对象

1. 对象头:markword 8
2. ClassPointer指针同上
3. 数组长度:4字节
4. 数组数据
5. 对齐 8的倍数

 

posted @ 2021-10-07 21:08  三只坚果  阅读(73)  评论(0编辑  收藏  举报