只是为了澄清我在这里间接回答的观点:
在主要运行应用程序的多CPU /多核机器上使用的最佳GC是ConcurrentMarkSweeper(又名-XX:+ UseConcMarkSweepGC)?
此外,还有一种名为G1的东西,任何想法何时可用于Java6?
编辑: 我正在使用Sun Java VM,1.6.0_16-b01。 我有实时(尽可能接近Java实时)应用程序,并且自然希望GC扫描尽可能短。有足够的CPU功率(ConcMarkSweep似乎需要)。
感谢。
答案 0 :(得分:8)
这取决于应用程序对GC暂停的容差类型。 ConcurrentMarkSweep最适合减少GC暂停的大小,从而减少延迟,而Parellel GC将以更长的GC暂停为代价实现最佳吞吐量。
G1目前是一项实验性功能。我认为在Java7发布之前它通常不可用。
我建议你看一下这个页面: http://java.sun.com/javase/technologies/hotspot/gc/gc_tuning_6.html
它包含有关GC算法和行为的大量信息。 有一节提供了为您的应用选择最佳GC的建议: http://java.sun.com/javase/technologies/hotspot/gc/gc_tuning_6.html#available_collectors.selecting
答案 1 :(得分:-1)
我们使用-server -Xss4096k -Xms12G -Xmx12G -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -verbose:gc -Xmaxf1 -XX:+UseCompressedOops -XX:+DisableExplicitGC -XX:+AggressiveOpts -XX:+ScavengeBeforeFullGC -XX:CMSFullGCsBeforeCompaction=10 -XX:CMSInitiatingOccupancyFraction=80 -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+CMSIncrementalMode -XX:+CMSIncrementalPacing -XX:+CMSParallelRemarkEnabled -XX:GCTimeRatio=19 -XX:+UseAdaptiveSizePolicy -XX:MaxGCPauseMillis=500 -XX:+PrintGCTaskTimeStamps -XX:+PrintGCApplicationStoppedTime -XX:+PrintHeapAtGC -XX:+PrintTenuringDistribution -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCApplicationConcurrentTime -XX:+PrintTenuringDistribution -Xloggc:gc.log
像魅力一样工作。另请参阅What are the best garbage collection settings for client side?