2

可以说,我的 RAM 是 30 GB,我将 jmx 指定为 10 GB,将 jms 指定为 5 GB,并启动了 java 进程。堆实际上是如何使用这些值调整大小/调整大小的?是否将 5GB 作为初始堆空间,并为 jvm 保留 10GB(剩余的 15GB 可用于 RAM 上的其他进程)还是仅分配 5GB 并增加到最大 10GB(同时其他进程是授权使用 25 GB)?这是怎么发生的?

4

2 回答 2

2

JVM 有一个堆,它是运行时数据区,所有类实例和数组的内存都从该堆中分配。它是在 JVM 启动时创建的。

Java 堆分配从最小大小 -Xms 开始并增加到 Xmx。

  • -Xms - 设置 JVM 的最小可用内存

  • -Xmx - 设置 JVM 的最大可用内存。Java 应用程序不能使用比通过此参数定义的更多的堆内存。

默认情况下,最大堆大小为 64 Mb。

对象的堆内存由称为垃圾收集器的自动内存管理系统回收。堆可能是固定大小的,也可能是扩展和收缩的,这取决于垃圾收集器的策略。

所以,我认为后一种说法是正确的。

仅分配 5 GB ( XMS ) 并增加到最大 10 GB ( XMX ) (同时其他进程被授权使用 25 GB)

于 2013-07-26T18:21:43.257 回答
2
  • -Xms 设置初始 Java 堆大小
  • -Xmx 设置最大 Java 堆大小

在虚拟机初始化时,为堆保留了整个空间。可以使用 -Xmx 选项指定保留空间的大小。如果 -Xms 参数的值小于 -Xmx 参数的值,则并非所有保留的空间都会立即提交给虚拟机。在此图中,未提交的空间被标记为“虚拟”。堆的不同部分(永久代、老生代和年轻代)可以根据需要增长到虚拟空间的极限......来源 - OTN -Tuning Garbage Collection

于 2013-07-26T18:42:43.913 回答