想要最小化常规Sun/Oracle Hotspot JVM上的GC延迟的实时系统的最佳GC和内存配置是什么?

Joh*_*ine 11 java memory optimization garbage-collection

这个问题几乎说明了一切.我们应该使用什么支持JVM GC以及使用什么配置来最小化GC对应用程序的影响?

编辑: Linux Ubuntu 64位:

java version "1.6.0_26"
Java(TM) SE Runtime Environment (build 1.6.0_26-b03)
Java HotSpot(TM) 64-Bit Server VM (build 20.1-b02, mixed mode)
Run Code Online (Sandbox Code Playgroud)

Jav*_*a42 8

从J2SE 5.0开始,默认情况下在服务器级计算机上选择并行收集器,如文档Garbage Collector Ergonomics中所述.此外,并行收集器使用自动调整方法,允许指定所需的行为,而不是生成大小和其他低级调整细节.可以指定的行为是:

最大垃圾收集暂停时间 吞吐量占用空间(即堆大小)使用命令行选项-XX:MaxGCPauseMillis =指定最大暂停时间目标.这被解释为需要暂停毫秒或更短的暂停时间的提示; 默认情况下,没有最大暂停时间目标.如果指定了暂停时间目标,则会调整堆大小和其他与垃圾回收相关的参数,以尝试使垃圾收集暂停时间短于指定值.请注意,这些调整可能会导致垃圾收集器降低应用程序的总吞吐量,并且在某些情况下无法满足所需的暂停时间目标.

摘录自http://www.oracle.com/technetwork/java/javase/gc-tuning-6-140523.html#par_gc.ergonomics

  • 尝试类似于以下 VM 选项的选项:`-server -XX:+UnlockExperimentalVMOptions -XX:+DoEscapeAnalysis -XX:+UseFastAccessorMethods -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:MaxGCPauseMillis=5 -XX:+AggressiveOpts -XX:+UseCompressedStrings -XX:+UseBiasedLocking -XX:+AlwaysPreTouch -XX:ParallelGCThreads=4 -Xms1g -Xmx1g` (2认同)

Ste*_*n C 7

你好几天都在问这个问题.我认为你的问题的根源在于你试图从Java平台中获得实时性能,而这些平台并不是为了提供它而设计的.

如果您想要实时性能(真正意义上的话),您需要一个实现RTSJ实时扩展的Java VM. 此页面列出了一些实现.请注意,要在Java应用程序级别获得实时性能,还需要在具有实时功能的OS平台上运行.


另一方面,如果您只想要低暂停垃圾收集而没有任何强大的实时性能保证,那么Oracle的GC调优文档将解释如何执行此操作.见Chuck Fricano的回答.

但请注意,通过这种方式可以实现的目标是有限制的.特别是,如果您的应用程序过分强调GC,则无法达到暂停时间的目标.调整参数的最佳设置可能是平台/硬件特定的,也取决于应用程序.

没有简单的答案.

当然,没有一种适合所有人的配置可以最大限度地减少延迟.甚至不适用于特定的JVM版本,操作系统和硬件平台.

  • 请注意,在我写完这个答案之后问题标题已经改变了.即便如此,仍然是一个有效的答案,说你不能从常规HotSpot JVM获得保证的实时性能.你可能不喜欢这个事实,但这并不是假的. (2认同)