G1预防性GC与NUMA感知内存分配
分析G1垃圾回收器的预防性GC(Preventive GC)策略,并启用NUMA感知优化内存分配,提升多插槽服务器的吞吐量。 · 难度:入门 · +10XP
G1预防性GC与NUMA感知内存分配
G1在遇到大对象分配或RSet过厚时会触发预防性GC。本教程讲解如何通过-XX:+G1PreventiveGC和-XX:+UseNUMA调整JVM行为,使用perf和gc日志分析NUMA节点间内存访问延迟,并通过实验调整-XX:G1HeapRegionSize和-XX:ParallelGCThreads压榨多路服务器性能。
// 启用NUMA感知的JVM参数
// -XX:+UseNUMA -XX:+UseNUMAInterleaving
// -XX:+UnlockExperimentalVMOptions -XX:G1PreventiveGC=true
// 程序验证NUMA节点分配
public class NumaDemo {
public static void main(String[] args) {
long[] array = new long[10_000_000];
// G1将尝试在本地NUMA节点分配
for (int i = 0; i < array.length; i++) {
array[i] = Thread.currentThread().getId();
}
}
}