Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java堆转储中的统计数据细分是什么_Java_Out Of Memory_Heap Dump - Fatal编程技术网

Java堆转储中的统计数据细分是什么

Java堆转储中的统计数据细分是什么,java,out-of-memory,heap-dump,Java,Out Of Memory,Heap Dump,考虑到这个堆转储 size no. of obj class 515313696 2380602 char[] 75476832 614571 * ConstMethodKlass 57412368 2392182 java.lang.String 44255544 614571 * MethodKlass 33836872 70371 * ConstantPoolKlass 28034704

考虑到这个堆转储

size         no. of obj class
515313696       2380602 char[]
75476832        614571  * ConstMethodKlass
57412368        2392182 java.lang.String
44255544        614571  * MethodKlass
33836872        70371   * ConstantPoolKlass
28034704        70371   * InstanceKlassKlass
26834392        349363  java.lang.Object[]
25853848        256925  java.util.HashMap$Entry[]
24224240        496587  * SymbolKlass
19627024        117963  byte[]
18963232        61583   * ConstantPoolCacheKlass
18373920        120113  int[]
15239352        634973  java.util.HashMap$Entry
11789056        92102   ph.com.my.class.Person
我的应用程序只有一个类,
ph.com.my.class.Person
。类别定义如下:

public class Person {
 private String f_name;
 private String l_name;
}
在堆转储中,
个人大小(11789056)
是否包括两个字符串变量占用的内存?还是将
f_name
l_name
计算在
String
类中,在本例中为大小57412368

更新-添加了后续问题:

让我们假设以下每一个例子:

  • f_名称大小为30
  • l_名称大小为20
  • 人数是75人
  • 如果有10个实例的人,将有

  • 10*(30+20)=500
  • 10*75=750

  • 500是用字符串还是字符[]计算的?随后,750人会被计算吗?

    每个计数和大小都是该对象的大小。如果您使用
    -histo
    而不是
    -histo:live
    ,则这将是所有对象,甚至是未被引用的对象


    注意:每个
    String
    都有一个
    char[]
    ,JVM使用了很多这样的字符串。
    String
    size是对象本身的大小,而不是对象的
    char[]

    堆转储中对象的大小是作为块在堆上分配以容纳该实例的字节数。它从不包含可通过对象访问的整个图形的字节。一般来说,这很容易意味着对象的大小就是整个堆。因此,在您的例子中,它考虑了两个引用,而不是字符串实例本身。还要注意的是,即使是
    字符串
    大小也不能反映所表示字符串的大小——它存储在
    char[]
    中。
    char[]
    实例是在字符串之间共享的,所以故事并没有那么简单