Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java多进程和堆大小_Java_Memory_Heap - Fatal编程技术网

Java多进程和堆大小

Java多进程和堆大小,java,memory,heap,Java,Memory,Heap,我们有一个运行许多Jar文件的遗留系统。 每个jar文件都在一个单独的进程中运行。 其中一些jar文件的内存使用量急剧增加。因此,它们的堆限制很高(~128MB),尽管在任何给定时刻,它们中的大多数都不使用该内存 问题是,Java没有释放内存的压力。由于垃圾回收器看不到全局,因此它没有减少堆大小的压力。因此,每个进程都会分配一个约100MB的多余堆(大多数情况下,它们所需的内存少于30MB) 将这种行为乘以许多java实例,您就会遇到一个大问题。除了重新编写所有JAR以在单个JVM中工作之外,还

我们有一个运行许多Jar文件的遗留系统。 每个jar文件都在一个单独的进程中运行。 其中一些jar文件的内存使用量急剧增加。因此,它们的堆限制很高(~128MB),尽管在任何给定时刻,它们中的大多数都不使用该内存

问题是,Java没有释放内存的压力。由于垃圾回收器看不到全局,因此它没有减少堆大小的压力。因此,每个进程都会分配一个约100MB的多余堆(大多数情况下,它们所需的内存少于30MB)


将这种行为乘以许多java实例,您就会遇到一个大问题。除了重新编写所有JAR以在单个JVM中工作之外,还有什么简单的解决方案吗?

JVM有一些控制堆扩展/收缩的选项。对于热点,这是

MaxHeapFreeRatio
:GC后的最大堆空闲百分比,以避免收缩。
MinHeapFreeRatio
:GC后的最小堆空闲百分比,以避免扩展


如果已用内存和可用内存之间的比率超过MaxHeapFreeRatio,JVM将收缩到
-Xms
。如果该比率小于MinHeapFreeRatio,则JVM将扩展。

JVM有一些选项来控制堆的扩展/收缩。对于热点,这是

MaxHeapFreeRatio
:GC后的最大堆空闲百分比,以避免收缩。
MinHeapFreeRatio
:GC后的最小堆空闲百分比,以避免扩展


如果已用内存和可用内存之间的比率超过MaxHeapFreeRatio,JVM将收缩到
-Xms
。如果这个比率小于MinHeapFreeRatio,那么JVM就会扩展。

我从来没有听说过任何琐碎的事情。这基本上就是所有这些应用程序容器的要点,不管它们多么令人讨厌。顺便说一句,你真的遇到过内存问题吗?e、 g.
OutOfMemory
异常?@如果是相反的情况:OP希望将多余的堆从JVM返回到操作系统,因此其他应用程序可能会使用它。@Marko:是的,这是一个非常复杂的服务器,上面运行着一些大型C程序。他们都快没记性了。我从来没听说过任何琐碎的事情。这基本上就是所有这些应用程序容器的要点,不管它们多么令人讨厌。顺便说一句,你真的遇到过内存问题吗?e、 g.
OutOfMemory
异常?@如果是相反的情况:OP希望将多余的堆从JVM返回到操作系统,因此其他应用程序可能会使用它。@Marko:是的,这是一个非常复杂的服务器,上面运行着一些大型C程序。他们是那些内存不足的人。