Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.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_Garbage Collection_Heap - Fatal编程技术网

Java 堆大小非常大,但使用的内存很小

Java 堆大小非常大,但使用的内存很小,java,memory,garbage-collection,heap,Java,Memory,Garbage Collection,Heap,我在应用程序中看到了非常大的堆大小,但使用的内存非常小: 堆大小:10 GB+, 已用内存:500 MB 这是怎么解释的?为什么堆大小没有减小。 我的java内存参数如下: -Xms8448m -Xmx12544m -XX:PermSize=192m -XX:MaxPermSize=256m -XX:+UseConMarkSweepGC -XX:CMSInitiatingOccupancyFraction=60 请大家指教,为什么会有这种奇怪的行为。我可以在图中看到已用内存被垃圾收集,但是堆内

我在应用程序中看到了非常大的堆大小,但使用的内存非常小:

堆大小:10 GB+, 已用内存:500 MB

这是怎么解释的?为什么堆大小没有减小。

我的java内存参数如下:

-Xms8448m -Xmx12544m -XX:PermSize=192m -XX:MaxPermSize=256m -XX:+UseConMarkSweepGC -XX:CMSInitiatingOccupancyFraction=60


请大家指教,为什么会有这种奇怪的行为。我可以在图中看到已用内存被垃圾收集,但是堆内存有什么问题???

您的参数中的初始堆大小

-Xms8448m
超过8GB。此外,

-Xmx12544m

允许JVM将其扩展到12GB以上,如果内存可用并且认为这是保持的最佳堆大小,JVM可能会这样做,并且永远不会释放它。规范中没有任何内容表明JVM应该尽量保持堆大小较小。

您的参数中的初始堆大小

-Xms8448m
超过8GB。此外,

-Xmx12544m

允许JVM将其扩展到12GB以上,如果内存可用并且认为这是保持的最佳堆大小,JVM可能会这样做,并且永远不会释放它。规范中没有任何内容表明JVM应该尽量保持堆大小较小。

删除上面的-Xms8448m。它指定初始堆大小。如果删除此选项,它将按预期工作。

删除上面的-Xms8448m。它指定初始堆大小。如果删除此选项,它将按预期工作。

您正在使用-Xms8448m将初始堆大小指定为~8.5GB。由于系统限制,一些java实现不支持实际收缩堆。对于较小的初始堆,请减小此值。

您正在使用-Xms8448m将初始堆大小指定为~8.5GB。由于系统限制,一些java实现不支持实际收缩堆。为较小的初始堆减小此值。

JVM在启动时将最大堆大小保留为虚拟内存。这个内存中有多少是主内存取决于使用了多少

当您设置最小内存时,它并不保证它被使用,但它只会在这一点上对限制内存使用进行最小的尝试

但是为什么堆大小几乎是12GB


这就是您设置的。

JVM在启动时将最大堆大小保留为虚拟内存。这个内存中有多少是主内存取决于使用了多少

当您设置最小内存时,它并不保证它被使用,但它只会在这一点上对限制内存使用进行最小的尝试

但是为什么堆大小几乎是12GB


这就是您设置的。HotSpot JVM中的堆大小永远不会下降。虽然有些GC算法可以把内存还给操作系统。但在以后的情况下,JConsole不会显示JConsole中内存的减少。如果您看到为堆保留的地址空间范围,您应该使用OS进程内存监控来查看JVM是否实际释放内存

可以将未使用的内存返回给操作系统的算法有

串行采集器-XX:+UseSerialGC G1-XX:+UseG1GC
热点JVM中的堆大小永远不会下降。虽然有些GC算法可以把内存还给操作系统。但在以后的情况下,JConsole不会显示JConsole中内存的减少。如果您看到为堆保留的地址空间范围,您应该使用OS进程内存监控来查看JVM是否实际释放内存

可以将未使用的内存返回给操作系统的算法有

串行采集器-XX:+UseSerialGC G1-XX:+UseG1GC
是的,我明白。。但是为什么堆大小几乎是12GB?我不知道。。。为什么?实际上,现在堆大小等于最大堆大小。@Jasper:它是java,而且它正在增长,因为它可以。如果您希望它使用更少的堆空间,请减小它的最大堆大小及其初始堆大小。是的,我理解。。但是为什么堆大小几乎是12GB?我不知道。。。为什么?实际上,现在堆大小等于最大堆大小。@Jasper:它是java,而且它正在增长,因为它可以。如果希望它使用更少的堆空间,请减小它的最大堆大小及其初始堆大小。