1.jvm五大分区
1.堆区:对象,数组。oom
2.虚拟机栈:局部变量表、方法退出位置。StackOverflow、oom
3.本地方法栈:native方法变量表。StackOverflow、oom
4.方法区:静态变量、常量、字面量与符号引用、类加载信息。oom
5.程序计数器:指向下个要运行的字节码地址
(其中1、5是每个线程独有)
2.对象创建过程
1.检查指令参数是否能在常量池中定位一个类的符号引用,检查这个引用所代表的类是否已经加载解析初始化过
2.为对象分配内存
3.为分配到的内存空间初始化零值
4.设置对象头
3.对象创建内存分配方式(有垃圾收集器是否具有压缩能力决定)
1.指针碰撞
2.空闲链表
3.本地线程分配缓冲(TLAB):每个线程在堆中预留一片内存
4.对象内存布局
5.对象访问定位
1.jvm栈中的本地变量表(就是局部变量表的不同叫法)中某帧存储reference,指向堆内存。
2.有句柄和直接访问两种方式:句柄存在于堆中,直接有指向方法区的类型指针和指向堆区的对象指针;如果是直接访问,则靠对象中的类型指针访问类。