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

时间:2011-07-28 06:55:46

标签: java performance shared-memory jmap pmap

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

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

3 个答案:

答案 0 :(得分:5)

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

  1. 堆内存。
  2. 非堆内存(PermGen)。
  3. 其他内存(JVM自有结构)。
  4. 所有类实例的内存都是从堆中分配的。 非堆内存主要由ClassLoaders用于存储与类相关的数据。

    有关共享对象的一些详细信息,请访问:what is shared objects file?

答案 1 :(得分:1)

从我目前的分析来看:

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

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

如果基于以下情况进行分析:

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

请添加评论以验证此理解。

答案 2 :(得分:0)

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