JVM 原理分析及调优

    xiaoxiao2021-03-25  100

    New(年轻代)

    1、堆内存

    2、用来存放JVM刚分配的Java对象 3、(a):Eden用来存放JVM刚分配的对象   (b):Survivor1   (c):Survivro2:两个Survivor空间一样大,当Eden中的对象经过垃圾回收没有被回收掉时,会在两个Survivor之间来回Copy, 当满足某个条件,比如Copy次数,就会被Copy到Tenured。显然,Survivor只是增加了对象在年轻代中的逗留时间,增加了被垃圾回收的可能性。 4、当年轻代内存满时,会引发一次普通GC,该GC仅回收年轻代。需要强调的时,年轻代满是指Eden代满,Survivor满不会引发GC Tenured(年老代)1、堆内存  2、年轻代中经过垃圾回收没有回收掉的对象将被Copy到年老代 4、当年老代满时会引发Full GC,Full GC将会同时回收年轻代、年老代 永久代(Perm)1、虚拟机直接分配(XX:PermSize -XX:MaxPermSize 等参数调整其大小) 2、永久代存放Class、Method元信息,其大小跟项目的规模、类、方法的量有关,一般设置为128M就足够,设置原则是预留30%的空间。 4、当永久代满时也会引发Full GC,会导致Class、Method元信息的卸载 内存泄漏及解决方法: 1.系统崩溃前的一些现象: 每次垃圾回收的时间越来越长,由之前的10ms延长到50ms左右,FullGC的时间也有之前的0.5s延长到4、5s FullGC的次数越来越多,最频繁时隔不到1分钟就进行一次FullGC 年老代的内存越来越大并且每次FullGC后年老代没有内存被释放 之后系统会无法响应新的请求,逐渐到达OutOfMemoryError的临界值
    转载请注明原文地址: https://ju.6miu.com/read-19783.html

    最新回复(0)