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)
从J2SE 5.0开始,默认情况下在服务器级计算机上选择并行收集器,如文档Garbage Collector Ergonomics中所述.此外,并行收集器使用自动调整方法,允许指定所需的行为,而不是生成大小和其他低级调整细节.可以指定的行为是:
最大垃圾收集暂停时间 吞吐量占用空间(即堆大小)使用命令行选项-XX:MaxGCPauseMillis =指定最大暂停时间目标.这被解释为需要暂停毫秒或更短的暂停时间的提示; 默认情况下,没有最大暂停时间目标.如果指定了暂停时间目标,则会调整堆大小和其他与垃圾回收相关的参数,以尝试使垃圾收集暂停时间短于指定值.请注意,这些调整可能会导致垃圾收集器降低应用程序的总吞吐量,并且在某些情况下无法满足所需的暂停时间目标.
摘录自http://www.oracle.com/technetwork/java/javase/gc-tuning-6-140523.html#par_gc.ergonomics
你好几天都在问这个问题.我认为你的问题的根源在于你试图从Java平台中获得实时性能,而这些平台并不是为了提供它而设计的.
如果您想要实时性能(真正意义上的话),您需要一个实现RTSJ实时扩展的Java VM. 此页面列出了一些实现.请注意,要在Java应用程序级别获得实时性能,还需要在具有实时功能的OS平台上运行.
另一方面,如果您只想要低暂停垃圾收集而没有任何强大的实时性能保证,那么Oracle的GC调优文档将解释如何执行此操作.见Chuck Fricano的回答.
但请注意,通过这种方式可以实现的目标是有限制的.特别是,如果您的应用程序过分强调GC,则无法达到暂停时间的目标.调整参数的最佳设置可能是平台/硬件特定的,也取决于应用程序.
没有简单的答案.
当然,没有一种适合所有人的配置可以最大限度地减少延迟.甚至不适用于特定的JVM版本,操作系统和硬件平台.
| 归档时间: |
|
| 查看次数: |
12910 次 |
| 最近记录: |