请问在Oracle JDK(或者OpenJDK)中,-XX:+UseNUMA可以配合-XX:+UseConcMarkSweepGC使用吗

简短说:不能。-XX:+UseNUMA不跟-XX:+UseParallelGC / -XX:+UseParallelOldGC使用的话不起任何作用。ParNew是跟CMS搭配使用的并行收集器,但它和ParallelScavenge完全不是一个东西。背景,放俩我以前写的:ParNew 和 PSYoungGen 和 DefNew 是一个东西么?UseNUMA做了什么?(2012-03-14) (SlideShare上不了的话请自备梯子)
■网友
-XX:+UseNUMA 只对ParallelGC的Eden space起作用,对TO_SPACE/FROM_SPACE都不起作用。当用ParallelGC和-XX:+UseNUMA时,JVM会建立per lgroup pool for eden space,然后每个LWP建立的时候都会被分配一个HOME LGROUP ID,当要ALLOCATE OBJECT时候,会到相应的NUMA POOL去ALLOCATE。底层NUMAPOOL的实现(在SOLARIS)是用MADVISE CALL然后给MADV_ACCESS_LWP flag,意思是告诉KERNEL touch这块的LWP会ACCESS 这块MEMORY heavily。 所以像R大说的,-XX:+UseNUMA对CMS没有任何作用,好像听说也不准备对CMS进行NUMA SUPPORT
■网友
补充下,我在Oracle JDK 1.7下测试了,可以在启动参数中加入-XX:+UseNUMA和-XX:+UseConcMarkSweepGC,java进程启动成功,但是不确定能否生效


    推荐阅读