单线程应用程序的GC设置

时间:2013-04-09 19:48:38

标签: java memory-management garbage-collection single-threaded

单线程消除了多线程应用程序中涉及的许多复杂问题。

我想知道是否有垃圾收集器配置可以利用单线程应用程序?

现在我在Java Runtime Environment构建中使用 UseConcMarkSweepGC,incrementalMode GC 设置:Java 1.6.0_22-b04

2 个答案:

答案 0 :(得分:1)

如果在单线程机器上启动JVM,它将不会使用多核所需的复杂内存屏障,从而节省了一些CPU周期。

但是JVM本质上是多线程的,即使你只有一个线程,还有其他线程支持JVM。

答案是否,没有针对单线程应用程序优化的GC算法。

答案 1 :(得分:0)

GC策略不依赖于您对应用程序进行编码的方式,而是依赖于您拥有的硬件。

例如,如果您只有一个可用的CPU,那么您不应该启用CMS有两个原因:

  • 它会从您的应用程序中窃取这个唯一的CPU时间,因此您将暂停STW暂停
  • 它意味着并发开销,这意味着您的应用程序将停止更长时间

在这种情况下,您应该启用SerialGC(或ParallelGC,它在单个CPU机器上无关紧要。)

现在,如果您有N个核心可用,但您的应用程序只使用一个,您可以设置-XX:ConcGCThreads=N-1-XX:ParallelGCThreads=N-1(取决于您使用的GC),以便JVM完整硬件的优点。

请注意,在设置任何标志之前,您应该使用-Xloggc:gc.log -XX:+PrintGCDetails启用GC日志,并在每次新配置后检查它是否改善了应用程序响应时间/吞吐量。

来源:http://jvm-options.tech.xebia.fr/