年老代过大有什么影响

jvm系列

  • 垃圾回收基础

  • JVM的编译策略

  • GC的三大基础算法

  • GC的三大高级算法

  • GC策略的评价指标

  • JVM信息查看

  • GC通用日志解读

  • jvm的card table数据结构

  • Java类初始化顺序

  • Java对象结构及大小计算

  • Java的类加载机制

  • Java对象分配简要流程

  • 年老代过大有什么影响

  • Survivor空间溢出实例

  • 关于Object=null

  • Java线程与Xss

年老代大部分是活着的对象,那么年老代过大,或者对象过早提升到年老代,导致年老代存活对象过多,那么如果做一次FullGC,寻找活着的对象,那么对于性能可想而知。

如果系统频繁地发生FullGC的话,而这些或者的对象在这么短的时间内被注销的概率很低,那么FullGC的时间越长,就会有越多的请求得不到响应或者响应很慢,它们所持有的内存就无法释放掉,就会有越多的对象进入Old区域,这就会在一个点上产生连锁效应。

old区不想young区有survivor空间专门存放存活的对象,因而,old区域的对象的清除操作需要在自己的空间内扫描遍历,然后将对应的垃圾对象清除掉,这个时间开销自然是比较大的,虽然可以并行,但是并行之中又带来了很多冲突的复杂性,因而FullGC一直都不是我们想看到的。

清除操作会导致内存产生很多碎片,如果碎片很多的话,在大对象分配上面会出现一些麻烦的问题,因而需要整理碎片,如果存活对象过多的话,那么对于内存碎片整理来说,就越麻烦,有时候可能就为了几个字节的碎片而导致几百M内存对象的移动(JVM不会因为因为这里有几个字节的碎片,而寻找一个几个字节大小的对象放在这个位置,它采用的是顺序移动的方式)。

你可能感兴趣的:(jvm)