Debian上的Java垃圾回收机制由JVM实现,核心包括分代收集、多种垃圾回收算法及不同回收器,具体如下:
-
内存分区:
- 新生代:新对象先存入Eden区,满后触发Minor GC,存活对象复制到Survivor区(From/To),默认8:1:1比例。
- 老年代:存放长期存活对象,触发Full GC时清理。
-
核心算法:
- 标记-清除:标记不可达对象并清除,产生碎片,用于老年代。
- 复制:新生代用此算法,将存活对象复制到另一区,避免碎片。
- 标记-整理:将存活对象移至一端,清理边界外空间,用于老年代。
-
垃圾回收器:
- Serial(单线程,STW):适合单核小应用。
- Parallel(多线程,高吞吐):适合多核后台计算。
- G1(分区回收,低延迟):JDK9+默认,平衡吞吐和延迟。
- ZGC/Shenandoah:超低延迟(毫秒级),适合大堆内存。
-
调优关键:
- 通过
-Xms/-Xmx设置堆大小,-XX:+UseG1GC等参数选择回收器。
- 监控工具:
jstat、jvisualvm等,关注GC频率和耗时。
具体实现因JVM版本(如HotSpot、OpenJ9)和配置略有差异,需结合应用场景选择合适策略。