默认JVM参数不是运行大型应用程序的最佳选择。来自在真实应用程序上进行调整的人的任何见解都会有所帮助。我们在32位Windows机器上运行应用程序,其中使用客户机JVM by default。我们添加了-server并将NewRatio更改为1:3(更大的年轻一代)。
您尝试过并发现有用的任何其他参数/调整?
[更新]我正在谈论的特定类型的应用程序是很少关闭的服务器应用程序,至少需要-Xmx1024m。还假设已经分析了应用程序。我正在寻找仅 JVM性能的一般指导原则。
答案 0 :(得分:17)
周围有大量的信息。
首先,在调优JVM之前对代码进行概要分析。
其次,仔细阅读JVM documentation;周围有很多“城市传说”。例如,-server标志仅在JVM保持驻留并运行一段时间时才有用; -server“关闭”JIT / HotSpot,并且需要通过相同的路径进行多次传递才能启动。另一方面,-server 减慢 JVM的初始执行,因为设置时间更长。
周围有好几本好书和网站。例如,请参阅http://www.javaperformancetuning.com/
答案 1 :(得分:7)
查看此处(或进行热点调整的Google搜索)http://java.sun.com/javase/technologies/hotspot/gc/gc_tuning_6.html
在尝试调整虚拟机之前,您肯定想要对您的应用进行配置。 NetBeans内置了一个很好的分析器,可以让你看到各种各样的东西。
我曾经有人告诉我,他们的应用程序中断了GC - 我查看了代码,发现他们从未关闭任何数据库查询结果,因此他们保留了大量的字节数组。一旦我们关闭结果,时间从超过20分钟和GB内存到大约2分钟和非常少量的内存。他们能够删除JVM调优参数,事情很愉快。
答案 2 :(得分:1)
回答这个问题的最佳方法是在尽可能接近“生产”环境的情况下对应用程序执行受控测试。使用-server,合理的起始堆大小以及最近JVM的相对智能行为很可能会比通常尝试的绝大多数设置表现得更好或更好。
这种广泛的概括有一个特定的例外:如果您在Web容器中运行,那么您很可能希望增加永久生成设置。
答案 3 :(得分:1)
我建议您在同时启用CPU采样和对象分配监控的情况下分析您的应用程序。您将发现得到的结果非常不同,这有助于调整代码。另外,尝试使用内置的hprof分析器,它也会产生非常不同的结果。
一般来说,您的应用程序分析比JVM算法更有意义。
答案 4 :(得分:1)
在32位Windows机器上的Java,您的选择是有限的。根据我的经验,以下参数设置将影响应用程序性能:
答案 5 :(得分:0)
这将高度依赖于您的应用程序以及JVM的供应商和版本。您需要明确您认为的性能问题。您是否关注代码的某些关键部分?你有没有想过应用程序? JVM是否花费太多时间进行垃圾收集?
我可能会从-verbose:gc JVM选项开始,观察垃圾收集是如何工作的。很多时候,最简单的解决方法是使用-Xmx增加最大堆大小。如果您学习解释-verbose:gc输出,它将告诉您几乎所有关于调整整个JVM的知识。但单独做这件事并不会让错误调整的代码变得更快。大多数JVM调优选项旨在提高垃圾收集器和/或内存大小的性能。
对于分析,我喜欢yourkit.com