java虚拟机、内存模型
2021-04-07 09:25:58 0 举报
java虚拟机,内存模型
作者其他创作
大纲/内容
栈(线程1)
survivor区
程序计数器
作用:线程切换(每个线程一块内存,指向当前正在执行的字节码的行号)当锁被其他的线程抢去时,会记录当前程序运行到的行号,锁被其他的线程释放后再返回执行时,不需要重头开始运行,只需要记录的行号开始运行
s0
本地方法区(存放native方法)
eden
堆内存(-Xms、-Xmx)年轻代内存(-Xmn)方法区又称元数据(-XX:MetaspaceSize 、-XX:MaxMetaspaceSize)
栈(线程2)
栈(线程栈)(存放局部变量)
java虚拟机
运行时数据区(内存模型)
堆
方法的符号引用转化为直接引用
int a=2;int b=3;
full gc
JVM
javac
在eden区占满后,会触发minor gc,如果还存洗的对象会移到s0区,s0区占满后会移动s1区,在s0、s1之间来回移动,分代年龄加+1,到15后移动老年代区,老年区占满后触发full gc,还是占满98%的空间就会OOM(内存溢出)。如果在触发minor gc后,对于大对象或者survivor区放不下了,会直接移动老年代区
minor gc
常规空间分配占比老年代:2/3的堆空间年轻代:1/3的堆空间eden区:8/10 的年轻代survivor0: 1/10 的年轻代survivor1:1/10的年轻代
堆(存放new对象)
jvm进行gc操作时,其他线程会阻塞,full gc运行时间比minor gc长很多,所以进行调优时,尽量避免频繁full gc
元数据(方法区,常量)
方法区
执行完当前方法回到主方法
int c = a+b
-server -Xms3G -Xmx3G -Xmn2G -Xss1M -XX:MetaspaceSize=512M -XX:MaxMetaspaceSize=512M
*.java
eden(年轻代)
字节码执行引擎
操作数栈(LIFO)
old
*.class
old(老年代)
方法出口
栈帧
s1
类装载器
局部变量
动态链表
0 条评论
回复 删除
下一页