java堆大小的硬限制

java堆大小的硬限制,java,garbage-collection,limit,heap-memory,Java,Garbage Collection,Limit,Heap Memory,所有的Java堆/GC专家都会这样做。 简单而直接的问题:对于可以设置Java堆大小的最大值是否有硬限制 我正在使用的服务器之一是内存实时通信系统,使用该服务器的客户端要求我将内存量增加到192Gb(这不是打字错误:192Gb!)。从技术上讲,这是可能的,因为机器是虚拟的 除上述问题外,我还有其他问题: JVM处理这种大小的能力如何 在设置它时有什么阻碍吗 在处理这样的尺寸时,有什么我应该注意的吗 提前感谢任何愿意帮助的人 他们考虑了虚拟机把内存中的东西交换到磁盘上的含义,代码是用代码来完成

所有的Java堆/GC专家都会这样做。 简单而直接的问题:对于可以设置Java堆大小的最大值是否有硬限制

我正在使用的服务器之一是内存实时通信系统,使用该服务器的客户端要求我将内存量增加到192Gb(这不是打字错误:192Gb!)。从技术上讲,这是可能的,因为机器是虚拟的

除上述问题外,我还有其他问题:

  • JVM处理这种大小的能力如何
  • 在设置它时有什么阻碍吗
  • 在处理这样的尺寸时,有什么我应该注意的吗
提前感谢任何愿意帮助的人

他们考虑了虚拟机把内存中的东西交换到磁盘上的含义,代码是用代码来完成的。有时候,让虚拟机来做同样好的事情,并且没有额外的工作。有时,当他们知道一些关于数据特征的信息,并且他们的优化目标是这样的时候,速度会快得多

2)考虑可能使用多个JVM,无论是合作还是运行,都与操作范围分开。有时,即使在同一个VM上运行4个JVM,并且每个JVM都使用1/4的内存,也会更好。(取决于应用程序的特征。)

3)考虑一个内存管理框架,比如TerraCotta的大内存。在这个领域有竞争对手。例如,VMWare具有弹性内存。它们使用JVM堆外的内存来存储内容,并避免GC问题。或者,它们分配非常大的堆对象,并独立于Java进行管理

4) 如果内存被活动对象占用,并且最终移动到较旧的一代进行垃圾收集,JVM会正常(TM)。GC可能是一个问题。这是一种黑人艺术。在尝试优化GC之前,请确保杀死一只鸡并将羽毛覆盖在虚拟机上。:)哦这里有一些非常有趣的评论:

5) 有时,您设置JVM大小,其他超出您控制范围的因素将阻止JVM增长到如此之大。一定要做一些测试,以确保它确实能够增长到您设置的大小

第五项才是真正的关键。测试。测试。再测试一些。您正处于勘探区域的边缘。

这并不表示存在硬限制

因此,我建议由您的操作系统和可用内存量来管理。 但是,您必须意识到JVM需要足够的内存来存储其他内部结构(如SPEC描述的),如PyMGEN、常量池等。我还建议您在任意增加堆大小之前考虑分析。有可能是您的旧gen空间占用了内存。我会使用VisualGC(现在在中)来观察内存使用情况并查找泄漏(它的代际功能是一个真正的帮助)


我没有回答您的其他问题,但可能无法比其他回答者说得更多。

如果您有一个测试系统,需要一个程序来获取堆大小,我可以帮助您。我很想知道结果。谢谢。你说的“抓取堆大小”是什么意思?我不确定我是否能帮上忙,但在任何情况下,为了让其他人参与进来,你在使用哪个操作系统和哪个JVM?使用它,这样你就知道是否有硬限制。第一个里程碑是启动jvm。我想你需要使用其他的-X设置