当前位置:  开发笔记 > 编程语言 > 正文

java中已提交内存的确切状态

如何解决《java中已提交内存的确切状态》经验,为你挑选了1个好方法。

我很好奇从"MemoryUsage"类中查询值时"已提交"内存的确切含义.该类将其解释为"已提交表示保证可供Java虚拟机使用的内存量(以字节为单位)." 这是否意味着内存正在被jvm进程使用,并且在java进程释放之前不可用于其他进程,或者它是否意味着如果java进程尝试分配高达该内存量,则该进程将成功?我意识到这可能是特定于实现的,但我只对hotspot感兴趣.



1> ddimitrov..:

提交的大小是实际分配的内存,使用的大小是用于存储实际数据的大小(使用时〜=已提交主要GC的时间并可能增加堆).最大大小是堆可以增长的硬限制 - 如果它不够,则JVM会抛出OutOfMemoryError.

如果提交了内存,那么肯定可以使用它.此外,JVM无法提交更多内存(在现代操作系统上)的唯一情况是硬件是否超出虚拟内存.

所有这些大小只告诉您堆区域的大小.JVM还有其他内存区域(线程堆栈,JIT缓存等).堆区域通常最大,这大致对应于进程占用空间.

两个笔记:

如果提交的大小不适合物理内存,则部分内容将被交换到页面文件.这会导致GC期间大幅减速,在这种情况下,您将通过减小堆大小来提高应用程序性能.

一些操作系统允许双重预订内存 - 你可以根据自己的需要进行分配,只要你不尝试使用它(忘了它是哪个操作系统 - 有人填写我的内容)


至少Linux可以做到这个双重预订; 它被称为"过度使用".http://opsmonkey.blogspot.com/2007/01/linux-memory-overcommit.html
推荐阅读
无名有名我无名_593
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有