我很好奇从 MemoryUsage 类查询值时“提交”内存的确切含义是什么。该类将其解释为“已提交代表保证可供 Java 虚拟机使用的内存量(以字节为单位)”。这是否意味着该内存正在被 jvm 进程使用,并且在被 java 进程释放之前不可用于其他进程,或者是否意味着如果 java 进程尝试分配最多该内存量,它就会成功?我意识到这可能是特定于实现的,但我只对热点感兴趣。
提交的大小是实际分配的内存,使用的大小是用于存储实际数据的大小(当使用〜=提交时,是主要GC的时间,并且可能会增加堆)。最大大小是堆可以增长的硬限制 - 如果不够,JVM 会抛出 OutOfMemoryError。
如果内存被提交,那么它肯定可以被使用。此外,JVM 无法提交更多内存(在现代操作系统上)的唯一情况是硬件虚拟内存不足。
所有这些大小仅告诉您堆区域的大小。 JVM 还有其他内存区域(线程堆栈、JIT 缓存等)。堆区域通常是最大的,这大致对应于进程占用空间。
两个注意事项:
- 如果提交的大小不适合物理内存,则部分大小将交换到页面文件。这会导致 GC 期间速度大幅减慢,在这种情况下,您可以通过减小堆大小来提高应用程序性能。
- 某些操作系统允许双重预订内存 - 只要您不尝试使用它,您就可以分配任意数量的内存(忘记了它是哪个操作系统 - 有人填写我)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)