14

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

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

4

3 回答 3

5

Java 内存(最高 Java 8)由 3 部分组成:

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

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

关于共享对象的一些细节在这里:什么是共享对象文件?.

于 2011-07-28T08:08:12.220 回答
1

从我目前的分析来看:

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

  • 堆内存
  • 烫发一代
  • 其他内存(包括 JNI、堆栈空间等)

本分析基于以下几点:

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

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

于 2011-07-28T08:47:38.527 回答
0

共享对象内存是经常访问的 java 库类进行内存映射的地方,因此它们的加载速度比从 rt.jar 加载更快。这包括许多常用的类,如、Comparable等。如果请求的类文件在共享对象内存中不可用,则从 rt.jar 请求。它可以被认为是缓存各种java程序中经常使用的类。StringObject

于 2011-09-27T06:03:14.000 回答