最近的 JVM 有很多用于垃圾收集的 XX 参数(请参阅 这里 例如),但是有哪些选项可以使客户端 Swing 应用程序真正性能更好呢?

我应该注意到,在客户端 Java 应用程序中真正让我烦恼的事情之一是 stop-the-world 垃圾收集的巨大延迟。在 Intelli-J IDEA 中,我看到它持续了三分钟或更长时间。

编辑:感谢您的所有回复。只是为了报告回来,我使用 IDEA 的 CMS 垃圾收集器(这是大多数阅读此问题的人都熟悉的应用程序类型的一个很好的通用参考),使用建议的设置 这里. 。我还设置了 -XX:+StringCache 以查看是否会减少内存需求。

一般来说,观察结果是,常规跑步表现并没有下降到你可以注意到的程度。内存减少量为 巨大的 使用字符串缓存选项,但是 CMS 方法并不彻底,最终需要停止世界垃圾收集周期(回到三分钟等待)来清除内存(一次运行 400MB)。

但是,考虑到内存占用量的减少,我也许可以放置较小的最大内存量,这将使停止世界集合的大小保持较小。

IDEA 8.1.4附带JDK 1.6.0_12,所以我还没有测试G1。另外,我的机器只有 2 个核心,因此 G1 方法不会真正得到最大化。是时候向老板寻求更好的机器了;)。

有帮助吗?

解决方案

这个问题没有一个答案,它取决于你的应用程序在做什么以及如何管理它的对象。也许看看垃圾收集如何工作并行和并发垃圾收集器以了解各种选项。

然后,检查 Java SE 6 HotSpot [tm]虚拟机垃圾Collection Tuning 文档,扩展了使用5.0 Java虚拟机文档调整垃圾收集。

如果您希望将垃圾收集暂停时间缩短,则并发收集器可能是正确的方向,因为它同时执行大部分工作(即,在应用程序仍在运行时)。但找到最佳设置需要进行分析(考虑测量GC吞吐量,最大和平均暂停时间,完整GC的频率及其持续时间)。

(编辑:看过OP的评论后,我认为阅读我对JVM堆的建议调整,保持你的手指离开旋钮!来自表演大师Kirk Pepperdine将是一个好主意。)

其他提示

垃圾收集调整不仅仅是一门艺术,更是一门科学,它实际上取决于您的应用程序及其使用情况。如果标准的 stop-the-world 策略让您烦恼,为什么不转换为 CMS(并发标记和扫描)或新的 G1 收集器呢?

最好的方法是更改​​参数并附加分析器来检查应用程序行为。

这是非常自动的,对我们有用:

-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

没有“最佳”选项(如果有,任何人都会使用它,对吧?),但也许有一个对您的情况有帮助的选项。但这里有一些提示:

  • 使用最新的虚拟机。每个版本的 GC 代码都变得更好。
  • 使用客户端jvm.dll(在sinve Java 1.5中可用) jre/bin/client/)。这应该是默认值。
  • 在 Java 中分配和释放对象的成本很低。把它们留在身边是很昂贵的。

如果你想获得更好的性能,那么就可以减少垃圾收集器的工作量。考虑使用对象池而不是不断创建和转储它们,并确保您需要创建的每个对象。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top