该篇博客是 对于我理解JVM 的线索,并未达到供读者观看程度。
下面图片 之前是我画图做的,这次迁移过来,方便自己阅读。
1. GC堆
1. java 虚拟机所管理的内存中最大的一块。
2. java 堆是被所有线程共享的一块内存区域
3. 唯一目的:存放内存实例对象,几乎所有的对象实例都在这里分配。
4. tips:所有的对象分配在堆上面 并不是很绝对。
1. jit 编译器
2. 逃逸分析
3. 栈上分配
4. 标量替换
2.方法区
这个区域的内存回收目标 主要是针对常量池的回收和对类型的卸载。
回收的条件很苛刻。
3.常量池
常量池 并不是只有编译器才能产生,运行器也能将新的常亮放入池中。
常量池 无法申请内存会抛出outofMemoryError 异常
JAVA 虚拟机栈
1. 线程私有
2. 描述的是JAVA方法执行的内存模型
两种异常
线程请求的栈深度大于虚拟机锁运行的深度,将抛 stackOverFlowError
动态扩展 无法申请到足够的内存,outOfMemoryError
创建方法说明:
每个方法从调用直至执行完成的过程,就对应一个栈帧在虚拟机中入栈到出栈过程.
说明:堆栈中的栈 指的是虚拟机栈 或者说是虚拟机中局部变量表部分。
对象引用:
Reference 它不等同于对象本身,可能是一个指向对象起始地址的引用指针