有没有人有使用Java中12 GB或更高的大堆的经验?
当更多内存可用并通过-Xmx使用时,Sun JVM是否会变慢?(假设:机器有足够的物理内存,因此虚拟内存交换不是问题.)
我问,因为我的生产服务器将接收内存升级.我想把-Xmx值提升到颓废的东西.我们的想法是防止由于我自己不时发生的编程错误导致的任何堆空间耗尽失败.罕见的事件,但如果我有一个淫秽的-Xmx值,如2048mb或更高,我可以通过快速发展的webapp避免它们.应用程序受到严密监控,因此会注意到JVM内存消耗的异常峰值并修复任何缺陷.
可能的重要细节:
编辑:我试图避免发布我的JVM的配置,但显然这使得这个问题荒谬开放.所以,这里我们使用相关的配置参数:
-Xms256m
-Xmx1024m
-XX:+UseConcMarkSweepGC
-XX:+AlwaysActAsServerClassMachine
-XX:MaxGCPauseMillis=1000
-XX:MaxGCMinorPauseMillis=1000
-XX:+PrintGCTimeStamps
-XX:+HeapDumpOnOutOfMemoryError
Run Code Online (Sandbox Code Playgroud) 我们正在DEV环境中加载测试Java 1.6应用程序.JVM堆分配为2Gb,-Xms2048m -Xmx2048m.在负载测试下,应用程序运行流畅,从不使用超过1.25Gb的堆,垃圾收集完全正常.
在我们的UAT环境中,我们使用相同的参数运行负载测试,唯一的区别是JVM,它分配了4Gb,-Xms4096m -Xmx4096m,否则,硬件与DEV完全相同.但是在负载测试期间,性能非常糟糕,应用程序几乎吞噬了整个堆,并且垃圾收集运行猖獗.
我们一遍又一遍地进行这些测试,消除了可能影响性能的所有可能症状,但结果是一样的.在什么情况下会是这种情况?