Java JVM内存结构
2021-11-30 23:48:07 0 举报
堆栈,线程在栈中表示,GC机制
作者其他创作
大纲/内容
操作数栈010
线程1
方法出口
App
向上弹出后进先出
回收阈值
栈
JVM占用内存达到阈值将进行monor GC回收,是否被回收的判断依据是gc roots
Eden
每一次回收都可能会有幸存下来的对象进入下一区域,然后该对象的对象头的age位置+1,并且如果上次幸存下来的对象,这次还幸存,那么将会在s0和s1之间移动,如果对象的age达到15,那么将会移动到老年代
本地方法栈
Java虚拟机
局部变量表
用于存放类的模板信息
S1
Test.class文件
类加载子系统
程序计数器(指向当前线程所执行字节码指令的地址(行号))
类加载子系统(双亲委派机制)
add()栈帧
局部变量表abc
JVM运行时数据区
......
程序计数器
方法区(元空间)
public void add(){ int i=0; int b=1; int c=i+b;}//此时运行到main方法,main方法被压入栈帧public static void main(String[] arge){ //此时创建对象,其中变量存入栈,对象存入堆,并且变量指向对象 App app = new App(); //此时执行到add()方法,add()方法被压入栈帧 add();}
S0
老年代
向下压入先进后出
操作数栈
堆
知识点补充,递归可能会造成栈内存溢出
java Test.class
结构
线程2
内存
main()栈帧
类中的方法
新生代
JVM占用内存
用于存放对象
如果老年代的内存也被占满时,那么将触发full gc,会触发STW(停顿)机制,此时程序将会暂停,并且进行垃圾回收,如果超过超时时间,程序将抛出内存溢出异常(OOM)
收藏
0 条评论
下一页