1

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

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

现在我在 Java 运行时环境构建中使用UseConcMarkSweepGC、incrementalMode GC设置:Java 1.6.0_22-b04

4

2 回答 2

2

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

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

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

于 2013-04-10T07:24:32.913 回答
0

GC 策略不取决于您如何编写应用程序,而是取决于您拥有的硬件。

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

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

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

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

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

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

于 2013-04-14T18:06:39.103 回答