正如标题状态,多少开销不jmap -histo
和jmap -heap
带来一个JVM分别?
如果内存敏感的Java进程处于边缘OutOfMemory
(例如大约96%的堆已满,并且无法由完整的gc清除),那么其中一项操作可能会将jvm带到OutOfMemory吗?
jmap -histo
并且jmap -heap
工作方式不同:jmap -histo
使用动态附加机制,并jmap -heap
通过HotSpot Serviceability Agent工作。区别在这里描述。
因此,jmap -histo
它由JVM本身执行,但是jmap -heap
在JVM进程挂起时在工具进程中运行。在这两种情况下,都不会创建新的Java对象,该工具将不会造成OutOfMemoryError
。
在这两种情况下,应用程序线程都将停止:jmap -histo
停止Java线程,并jmap -heap
停止整个JVM进程。暂停的持续时间可能会相当长,尤其是对于大堆而言。例如,遍历4GB堆可能需要几秒钟。