当通过-Xmx分配更多内存时,Sun JVM是否会变慢?

23 浏览
0 Comments

当通过-Xmx分配更多内存时,Sun JVM是否会变慢?

当可用内存通过-Xmx参数增加和使用时,Sun JVM会减慢吗?(假设:机器有足够的物理内存,因此虚拟内存交换不是问题。)\n我之所以问是因为我的生产服务器将升级内存。我想将-Xmx值增加到一个奢华的值。这样做的目的是为了防止由于我自己的编程错误导致的堆空间耗尽故障。虽然这些事件很少发生,但如果我有一个像2048mb或更高的绝对值,像这样的绝对值,我就可以避免这些问题。该应用程序被严密监控,因此会注意到JVM内存消耗异常的峰值,并修复任何缺陷。\n可能的重要细节:\n- Java 6(以64位模式运行)\n- 4核心Xeon处理器\n- RHEL4 64位\n- Spring,Hibernate\n- 高磁盘和网络IO\n编辑:我试图避免发布我的JVM配置,但显然这使问题变得非常开放。所以,这里有相关的配置参数:\n- Xms256m\n- Xmx1024m\n- XX:+UseConcMarkSweepGC\n- XX:+AlwaysActAsServerClassMachine\n- XX:MaxGCPauseMillis=1000\n- XX:MaxGCMinorPauseMillis=1000\n- XX:+PrintGCTimeStamps\n- XX:+HeapDumpOnOutOfMemoryError

0
0 Comments

在使用-gc选项时,Java虚拟机的内存分配与垃圾回收机制有关。通过增加内存分配(-Xmx选项),通常可以提高垃圾回收环境下的性能,至少在不导致虚拟内存使用/交换时是如此。垃圾回收只追踪引用,而不是内存本身。虚拟机将分配相同数量的(大多是短暂的临时)对象,但垃圾回收器需要更少地被调用-因此垃圾回收的总工作量不会增加,甚至可能减少,因为这也有助于使用弱引用的缓存机制。

此外,根据32位和64位的Java虚拟机版本,可能还存在服务器和客户端虚拟机的区别,值得进一步调查。

感谢提供的信息,但我相信我剩下的配置是正确的。即使配置有缺陷,我也希望将此问题保持在“一切都相等”的范围内。

因此,可以得出结论:通过增加内存分配,并根据垃圾回收机制的工作原理,可以提高Java虚拟机的性能。

0
0 Comments

原因: 当通过-Xmx参数分配更多内存时,Sun JVM的性能可能会变慢。这是因为如果不是在使用CMS垃圾收集器的多核系统上,响应速度会降低,尽管应用程序的吞吐量会提高。这是因为GC的次数会减少,但是每次GC需要处理的工作会增加。好处是,GC会释放更多的内存,因此分配内存的成本会继续变得非常低廉,从而提高了吞吐量。

解决方法:根据上面的情况,如果在单核系统上使用Sun JVM,并且通过-Xmx参数分配更多内存导致性能下降,可以尝试以下解决方法:

- 使用多核系统,特别是使用CMS垃圾收集器的多核系统,以提高响应速度。

- 调整-Xmx参数的值,以找到合适的内存分配大小,以在性能和响应速度之间取得平衡。

- 确保正确使用-Xmx和-Xms参数,以避免混淆和错误配置。

代码示例:

// 设置初始堆大小为1GB
-Xms1g
// 设置最大堆大小为4GB
-Xmx4g

这样的配置可以将初始堆大小设置为1GB,最大堆大小设置为4GB,以平衡应用程序的性能和响应速度。

0
0 Comments

问题的原因:

当通过-Xmx参数分配更多的内存时,Sun JVM不会减慢速度。增加内存会使堆填充所需的时间变长,从而减少垃圾收集的频率。但是,取决于对象的寿命,您可能会发现执行单个垃圾收集所需的时间增加。

解决方法:

垃圾收集所需时间的主要因素是活动对象的数量。因此,如果几乎所有对象都是短寿命的,并且一旦您建立起来,没有对象逃离年轻代堆,您可能不会注意到执行垃圾收集所需时间的变化。然而,当您不得不循环使用老年代堆时,您可能会发现一切都停止了很长时间,因为大多数这些对象仍然存在。因此,您需要根据情况调整堆的大小。

感谢您的帮助。正如您从我编辑后的问题中看到的,我已经设置了GC持续时间的最大限制。虽然我知道可以调整老年代堆等参数,但我还没有这样做,因为我认为这是"过早优化"。但也许这是有意义的...我可以感觉到另一个Stack Overflow问题的出现!

0