比方说,我的RAM是30 GB,我给了jmx 10 GB和jms 5 GB,并启动了java进程。堆是如何使用这些值进行大小调整的?是否将5GB作为初始堆空间,留出10 GB用于jvm (其余15 GB可用于RAM上的其他进程),还是只分配5 GB,最高可达10 GB (同时其他进程被授权使用25 GB)?这是怎么发生的?
发布于 2013-07-26 18:21:43
JVM有一个堆,它是为所有类实例和数组分配内存的运行时数据区域。它是在JVM启动时创建的。
Java堆分配从最小大小-Xms开始,并增加到Xmx.。
默认情况下,最大堆大小为64 Mb。
对象的堆内存由称为垃圾收集器的自动内存管理系统回收。堆可以是固定大小的,也可以根据垃圾收集器的策略展开和缩小。
因此,我认为后一种说法是正确的。
只分配了5GB (XMS),最高达到10 GB (XMX) (同时其他进程被授权使用25 GB)。
发布于 2013-07-26 18:42:43
在虚拟机初始化时,将为堆保留整个空间。可以使用-Xmx选项指定保留空间的大小。如果-Xms参数的值小于-Xmx参数的值,则并不是所有保留的空间都立即提交给虚拟机。未提交的空间在此图中被标记为“虚拟”。堆的不同部分(永久世代、终身世代和年轻一代)可以根据需要增长到虚拟空间的极限……源- OTN -Tuning垃圾收集
https://stackoverflow.com/questions/17888030
复制相似问题