jmap - histo 和堆操作是否会给 jvm 带来开销?
jmap - Does histo & heap operation bring overhead to jvm?
正如标题所说,jmap -histo
和jmap -heap
分别给jvm带来了多少开销?
如果内存敏感 Java 进程处于 OutOfMemory
的边缘(例如,大约 96% 的堆已满,并且无法通过 full gc 清除),是否有可能将jvm带到OutOfMemory的操作之一?
jmap -histo
和 jmap -heap
的工作方式不同:jmap -histo
使用动态附加机制,而 jmap -heap
通过 HotSpot Serviceability Agent 工作。差异描述为 here.
因此,jmap -histo
是由JVM自己执行的,而jmap -heap
是在一个工具进程中运行的,而JVM进程是挂起的。在这两种情况下都不会创建新的 Java 对象,该工具不会导致 OutOfMemoryError
.
在这两种情况下,应用程序线程都停止了:jmap -histo
停止了 Java 个线程,jmap -heap
停止了整个 JVM 进程。暂停的持续时间可能相当长,尤其是对于大型堆。例如。遍历 4GB 堆可能需要几秒钟。
正如标题所说,jmap -histo
和jmap -heap
分别给jvm带来了多少开销?
如果内存敏感 Java 进程处于 OutOfMemory
的边缘(例如,大约 96% 的堆已满,并且无法通过 full gc 清除),是否有可能将jvm带到OutOfMemory的操作之一?
jmap -histo
和 jmap -heap
的工作方式不同:jmap -histo
使用动态附加机制,而 jmap -heap
通过 HotSpot Serviceability Agent 工作。差异描述为 here.
因此,jmap -histo
是由JVM自己执行的,而jmap -heap
是在一个工具进程中运行的,而JVM进程是挂起的。在这两种情况下都不会创建新的 Java 对象,该工具不会导致 OutOfMemoryError
.
在这两种情况下,应用程序线程都停止了:jmap -histo
停止了 Java 个线程,jmap -heap
停止了整个 JVM 进程。暂停的持续时间可能相当长,尤其是对于大型堆。例如。遍历 4GB 堆可能需要几秒钟。