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的倍数