将-Xms和-Xmx设置为相同的值有什么缺点吗? 并且-XX:MaxPermSize和-XX:PermSize为相同的值。
建议here.
如果服务器中有足够的物理内存,建议为两个选项设置更高的值吗?
更新
环境 Solaris 10中的Java 1.6.0_45
java版“1.6.0_45”
Java(TM)SE运行时环境(版本1.6.0_45-b06)
Java HotSpot(TM)64位服务器VM(内置20.45-b01,混合模式)
答案 0 :(得分:5)
设置-xms和-xmx是旧版Java中的一个很好的做法,当自适应大小调整不够好时。在Java> = 7中它工作得非常好,所以不再需要它。如果您需要更多详细信息,请阅读-XX:+UseAdaptiveSizePolicy
标记或参考HotSpot documentation
您必须记住的另一件事是您的服务器上有8GB RAM并不意味着您可以完全将其用于Java。你必须留下一些用于系统缓冲区
在Java< = 1.6中设置XMS = XMS并且在PermGen的情况下是相同的,但是你必须记住正确调整XMX值,因为太多的内存会导致cobra effect
答案 1 :(得分:1)
想象一下两个值不相同的情况。在这种情况下,JVM具有管理堆大小的附加任务。在需要时增加内存,垃圾收集(PermGen不适用于缩小堆的大小。
话虽如此,还有很多其他因素也起着非常重要的作用。例如,应用程序使用内存的方式也决定了堆大小设置的效果。例如,计算密集型独立应用程序将具有完全不同的内存要求,这是典型的客户端 - 服务器电子商务应用程序,它执行大量I / O.
要记住的另一点是底层操作系统。操作系统最终根据请求将内存分配给JVM,这种情况发生的方式因操作系统而异。解决的唯一方法是查看特定 JVM实现的文档。
所以你的问题的答案可能不是那么难和是/否。 Its subjective。
答案 2 :(得分:1)
如果是服务器应用程序,建议使用ms和mx size作为相同的值。 原因是当它试图增加内存时,它将给JVM带来负担。 如果堆大小相同,则很容易估计完整的gc时间。
如果是perm内存,则在服务器预热后。这意味着大部分类已被加载,因此烫发大小不会随意改变。因此,在使用gc log选项测量烫发尺寸后,最好设置Perm的固定尺寸。
在服务器配置中会更稳定。
此外,如果你带来更大的堆大小(通过使用-mx选项)。这需要更多的完整gc时间。在完整的gc时间,JVM正在冻结。所以你需要照顾最大尺寸。
在我看来,如果你有足够的记忆力。最好运行其他JVM实例(使用群集等)