Java中的“共享对象内存”和“堆内存”有什么区别。是否像“共享对象内存”是“堆内存”的超集?
这个问题的来源是 jmap 的文档。它提供了打印“共享对象内存”和“堆内存”的不同选项。
Java中的“共享对象内存”和“堆内存”有什么区别。是否像“共享对象内存”是“堆内存”的超集?
这个问题的来源是 jmap 的文档。它提供了打印“共享对象内存”和“堆内存”的不同选项。
Java 内存(最高 Java 8)由 3 部分组成:
所有类实例的内存都是从堆中分配的。类加载器主要使用非堆内存来存储与类相关的数据。
关于共享对象的一些细节在这里:什么是共享对象文件?.
从我目前的分析来看:
默认选项将打印所有内存信息,包括:
本分析基于以下几点:
在 JDK 文档中提到默认选项(即“共享对象内存”)类似于 Solaris 的 pmap 命令。查看 pmap 命令,它似乎打印了完整的内存信息。
请添加评论以验证这种理解。
共享对象内存是经常访问的 java 库类进行内存映射的地方,因此它们的加载速度比从 rt.jar 加载更快。这包括许多常用的类,如、Comparable
等。如果请求的类文件在共享对象内存中不可用,则从 rt.jar 请求。它可以被认为是缓存各种java程序中经常使用的类。String
Object