Java 中已提交内存的确切状态
2022-09-04 07:43:42
我很好奇当从MemoryUsage类中查询值时,“提交”内存的确切含义是什么。该类将其解释为“提交表示保证可供Java虚拟机使用的内存量(以字节为单位)。这是否意味着内存正由 jvm 进程使用,并且在 java 进程释放内存之前不可用于其他进程,还是意味着如果 java 进程尝试分配到该内存量,它将成功?我意识到这可能是特定于实现的,但我只对热点感兴趣。
我很好奇当从MemoryUsage类中查询值时,“提交”内存的确切含义是什么。该类将其解释为“提交表示保证可供Java虚拟机使用的内存量(以字节为单位)。这是否意味着内存正由 jvm 进程使用,并且在 java 进程释放内存之前不可用于其他进程,还是意味着如果 java 进程尝试分配到该内存量,它将成功?我意识到这可能是特定于实现的,但我只对热点感兴趣。
提交的大小是实际分配的内存,使用的大小是用于存储实际数据的大小(当使用~=提交时,是时候进行主要GC并可能增加堆了)。最大大小是堆可以增长到的硬限制 - 如果还不够,JVM 会抛出 OutOfMemoryError。
如果提交了内存,那么它绝对可以使用。此外,JVM无法提交更多内存的唯一情况(在现代操作系统上)是硬件虚拟内存不足的情况。
所有这些大小仅告诉您堆区域的大小。JVM 还有其他内存区域(线程堆栈、JIT 缓存等)。堆区域通常最大,这大致对应于进程占用空间。
两点注意事项:
“这是否意味着内存正由 jvm 进程使用,而不能用于其他进程”,这是正确的一个。因此,它小于(或等于)操作系统认为由JVM进程占用的内存量。
http://java.sun.com/j2se/1.5.0/docs/guide/management/jconsole.html(抱歉没有锚点可以链接到)。