“共享对象内存”与“堆内存” - Java

2022-09-04 04:25:34

Java中的“共享对象内存”和“堆内存”有什么区别。它是否像“共享对象内存”是“堆内存”的超集?

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


答案 1

Java 内存(直到 Java 8)由 3 部分组成:

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

所有类实例的内存都是从堆中分配的。类加载器主要使用非堆内存来存储与类相关的数据。

有关共享对象的一些详细信息,请参阅此处:什么是共享对象文件?


答案 2

从我到目前为止的分析来看:

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

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

本分析如果基于以下几点:

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

请添加注释以验证此理解。


推荐