当有更多内存可用并通过 -Xmx 使用时,Sun JVM 是否会变慢? (假设:机器有足够的物理内存,因此虚拟内存交换不是问题。)
我问是因为我的生产服务器要进行内存升级。我想将 -Xmx 值提高到一些颓废。这个想法是为了防止由于我自己的编程错误不时发生的任何堆空间耗尽故障。罕见事件,但如果我有一个令人讨厌的 -Xmx 值,比如 2048mb 或更高,我快速发展的 webapp 可以避免它们。该应用程序受到严密监控,因此会注意到 JVM 内存消耗的异常峰值,并修复任何缺陷。
可能的重要细节:
- Java 6(在 64 位模式下运行)
- 4 核至强
- RHEL4 64 位
- Spring , hibernate
- 高磁盘和网络 IO
编辑:我试图避免发布我的 JVM 配置,但显然这让问题变得荒谬可笑。所以,这里我们使用相关的配置参数:
-Xms256m
-Xmx1024m
-XX:+UseConcMarkSweepGC
-XX:+AlwaysActAsServerClassMachine
-XX:MaxGCPauseMillis=1000
-XX:MaxGCMinorPauseMillis=1000
-XX:+PrintGCTimeStamps
-XX:+HeapDumpOnOutOfMemoryError
最佳答案
通过添加更多内存,堆将需要更长的时间才能填满。因此,它将减少垃圾收集的频率。但是,根据对象的生命周期,您可能会发现执行任何一次 GC 所需的时间会增加。
GC 花费多长时间的主要因素是有多少 Activity 对象。因此,如果您几乎所有的对象都在年轻时死亡,并且一旦您建立起来,没有一个从年轻堆中逃脱,您可能不会注意到执行 GC 所需时间的变化。但是,每当您必须循环使用永久堆时,您可能会发现一切都停止了不合理的时间,因为大多数这些对象仍然存在。相应地调整尺寸。
关于java - 当通过 -Xmx 分配更多内存时,Sun JVM 会变慢吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/748940/