'共享对象内存'与'堆内存' - Java

San*_*dal 13 java performance shared-memory jmap pmap

Java中的"共享对象内存"和"堆内存"有什么区别.它是否像'共享对象内存'是'堆内存'的超集?

这个问题的来源是jmap的文档.它为打印'共享对象内存'和'堆内存'提供了不同的选项.

And*_*nko 5

Java内存(最多Java 8)包括3个部分:

  1. 堆内存。
  2. 非堆内存(PermGen)。
  3. 其他内存(JVM自己的结构)。

所有类实例的内存都是从堆中分配的。非堆内存主要由ClassLoader用于存储与类相关的数据。

有关共享库的一些详细信息在这里:什么是共享库文件?


San*_*dal 1

从我目前的分析来看:

默认选项将打印所有内存信息,包括:

  • 堆内存
  • 彼尔姆一代
  • 其他内存(包括JNI、堆栈空间等)

该分析基于以下内容:

在 JDK 文档中提到默认选项(即“共享对象内存”)类似于 Solaris 的 pmap 命令。查看 pmap 命令,它似乎打印了完整的内存信息。

请添加评论以验证这一理解。