正如标题所述,jmap -histo
和jmap -heap
分别为jvm带来了多少开销?
如果内存敏感的Java进程位于OutOfMemory
的边缘(例如,大约96%的堆已满,并且无法通过完整gc清除),是否可能进行其中一个操作将jvm带到OutOfMemory?
答案 0 :(得分:3)
jmap -histo
和jmap -heap
的工作方式不同:jmap -histo
使用动态附加机制,jmap -heap
通过HotSpot Serviceability Agent工作。区别在于here。
因此,jmap -histo
由JVM本身执行,但{J}进程暂停时,jmap -heap
在工具进程中运行。在这两种情况下都不会创建新的Java对象,该工具不会导致OutOfMemoryError
。
在这两种情况下,应用程序线程都会停止:jmap -histo
停止Java线程,jmap -heap
停止整个JVM进程。暂停的持续时间可能相当长,特别是对于大堆。例如。步行4GB堆可能需要几秒钟。