正如标题状态,多少开销不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堆可能需要几秒钟。