1.JVM 基本架构
2.区域作用
tips:
*Jdk1.6及之前:有永久代,常量池1.6在方法区
*Jdk1.7:有永久代,但已经逐步“去永久代”,常量池1.7在堆
*Jdk1.8及之后:无永久代,常量池1.8在堆,新增元空间(不属于虚拟机,基于内存)
3.堆内存分代基本结构
新生成的对象首先放到年轻代Eden区,当Eden空间满了,触发Minor GC,存活下来的对象移动到Survivor From区,Survivor From区满后触发执行Minor GC,Survivor From区存活对象移动到Suvivor To区,这样保证了一段时间内总有一个survivor区为空。经过多次(15次)Minor GC仍然存活的对象移动到老年代。
老年代存储长期存活的对象,占满时会触发Major GC=Full GC,GC期间会停止所有线程等待GC完成,所以对响应要求高的应用尽量减少发生Major GC,避免响应超时。
Minor GC : 清理年轻代
Major GC : 清理老年代
Full GC : 清理整个堆空间,包括年轻代和永久代
所有GC都会停止应用所有线程(Stop the World(STW)现象)。
JVM调优本质:减少STW次数。