首页 > 编程知识 正文

java fullgc,rnp进近程序

时间:2023-05-05 01:30:57 阅读:169253 作者:2781

一.内存回收战略和常见概念

可以从以下维度理解典型的垃圾收集策略:

1串并行

串行:单线程执行内存回收任务。 它非常简单,不需要考虑同步等问题,但是很费时间,不适合多cpu。

并行处理:多线程化进行复用工作。 适用于多CPU,效率高。

并发停止世界

stop the world:jvm中的APP线程挂起,只有垃圾回收线程正在进行垃圾回收工作。 不需要考虑简单、不能回收干净等问题。

合并:垃圾回收的同时,APP也在跑步。 保证APP的响应时间。 有时无法完全回收而需要二次回收。

3压缩未压缩副本

压缩:进行垃圾回收后,通过滑动,将生存对象滑动到连续空间,清除碎片,保证剩余空间连续。

未压缩:保留碎片,不压缩。

复制:将存活的对象移动到新空间,并释放所有旧空间。 (需要很大的内存。 )

垃圾回收算法可以从以上几个维度来考虑和设计,最终产生具有不同特性适合不同场景的垃圾回收器。

二. JVM的YGCFGC

YGC :对一堆有趣的蜡烛进行GC。 频率很高。 大多数对象的生存寿命很短,所以用有趣的蜡烛世代回收。 性能下降很少。

FGC :所有堆范围的GC。 当默认堆使用量达到80% (可调)时,将触发FGC。 以我们的生产环境为例,一般很少引起FGC,有时十天或一周一次。

三.何时诱发YGC,何时诱发FGC?

YGC的时机:

edn空间不足

FGC定时:

1.old空间不足

2.perm空间不足

3 .显示调用System.gc (包括RMI等)的时序触发器;

4.YGC时的悲观策略

5.dump live的内存信息的情况(jmapdump : live )。

对YGC的触发时机,很明显eden的空间不足,这将触发YGC

关于FGC的触发时机,old领域不足和perm领域不足这一点通过调用system.gc ()可以明确,在这种情况下,一般会触发GC。

最复杂的是所谓的悲观策略,它所触发的机制是先计算晋升的平均幅度,也就是从幽默的烛代到通过ygc幽默的烛代的平均幅度。 而且,如果旧世代的剩馀空间小于晋升的大小,则触发一次全GC。 sdk认为的战略是,从平均和长期的情况来看,下次晋升的空间不充分的可能性非常高。 与其在那之前呆在fullGC,不如悲观地认为下次一定会诱发fullGC,直接执行fullGC。 并经过实际使用,达到了比较稳定的效果。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。