浅析大促备战过程中出现的 fullGc,我们能做什么?

发布网友

我来回答

1个回答

热心网友

前言:

背景:JVM(Java Virtual Machine)是Java程序的虚拟机,提供于操作系统的运行环境,使Java程序可以在任何支持JVM的计算机上运行。JVM的内存管理机制中的GC(Garbage Collection)负责加载、验证、解释、执行和垃圾回收Java字节代码,提供内存管理、线程管理和安全控制等服务。

JVM中的GC有两种主要类型:Young GC和Full GC。Young GC针对新生代对象的回收,通常使用复制算法或标记整理算法,因其对象生命周期短而速度快;Full GC针对整个堆内存的回收,用于回收Young GC中未回收的存活对象,速度较慢。

设计Java应用时,应尽量减少Full GC次数,以保证系统性能,方法包括增大新生代内存空间、减少数组长度等。

理解Young GC的诞生过程:复制算法和标记整理算法是两种不同的Young GC回收算法。复制算法将新生代内存分为两部分,新创建的对象存储在一部分,存活对象存储在另一部分,当新生代内存不足时,Young GC发生,将存活对象复制到另一部分。标记整理算法先标记存活对象,然后整理不存活的对象。Young GC本质上是JVM正常的垃圾回收过程。

Full GC是整个堆内存的回收过程,可能导致应用程序暂停。避免Full GC的关键在于合理内存分配,减少不使用的对象,调整堆内存扫描时间。

全垃圾回收(Full GC)是垃圾回收过程,会暂停所有应用程序线程,对整个堆进行回收。过程包括初始标记、并发标记、重新标记、整理和回收。

编写代码时,可通过调整堆内存大小、优化代码、使用较大的新生代、选择适当的垃圾回收算法等方法避免Full GC。

具体实例:避免使用不必要的临时对象、尽早释放对象、重复使用对象、使用对象池、使用弱引用。例如,避免频繁创建和销毁对象,使用弱引用减少GC频率。

测试阶段关注点:定期监测GC日志、优化数据结构减小数据对象生命周期、关注单元测试,通过测试评估内存使用情况。

总结:日常业务代码测试中,对内存的敏感度要高,尽管系统成熟可靠,但在面对大促压力时,提前解决内存隐患可以节省压测工作量。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com