'Shared Object Memory' vs 'Heap Memory' - 爪哇



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

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

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

  1. 堆内存。
  2. 非堆内存(PermGen).
  3. 其他内存(JVM自己的结构)。
所有类实例的内存都是从堆中分配的。非堆内存主要由classloader用于存储与类相关的数据。
关于共享对象的一些细节在这里:什么是共享对象文件?

从我目前的分析来看:

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

    堆内存
  • 烫创
  • 其他内存(包括JNI,堆栈空间等)

此分析基于以下内容:

在JDK文档中提到默认选项(是'Shared Object Memory')类似于Solaris的pmap命令。查看pmap命令,它似乎打印了完整的内存信息。

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

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

最新更新