java虚拟机学习笔记_第一部分内存管理机制
1.1数据区域
1.1.1 程序计数器
-为了线程切换后能恢复到正确的执行位置每个线程需要一个独立的程序计数器
1.1.2 java虚拟机栈
-指虚拟机栈中局部变量表部分 包括:基本数据类型、对象引用、returnAddress(指向一条字节码指令地址)
-异常:1)线程请求的栈深度大于虚拟机所允许的深度,抛出StackOverflowError异常
2)如果虚拟机栈可以动态扩展,如果扩展时无法申请到足够的内存,就会抛出OutofMemoryError异常
1.1.3 本地方法栈
-指虚拟机使用到的Native方法
1.1.4 java堆
-存放对象实例
1.1.5 方法区
-包括:类信息、常量、静态变量、即时编译器编译后的代码
1.2HotSpot虚拟机对象
1.2.1对象创建
步骤:new->类检查->分配内存->分配到的内存空间初始化为零->设置对象->init
1.2.2对象的内存布局
1)对象头-包括存储对象自身的运行时数据、类型指针
2)实例数据
3)对齐填充-占位符
1.2.3对象访问定位
1)句柄访问
2)直接指针访问