java 一个String对象占用多少内存

时间:2025-03-27 17:11:41

java 一个String对象占用多少内存

  • 对象头 12 字节或16字节
    • markWord 8字节
    • class对象指针 4字节
    • 如果是数组,数组长度 4字节
  • 内容
    • byte和boolean是1个字节,short和char是2个字节,int和float是4个字节,long和double是8个字节,引用类型是4个字节
  • 对齐 如果对象不是8的倍数就填充到8的倍数

string类的变量

	private final char value[];

    private int hash; // Default to 0

    private static final long serialVersionUID = -6849794470754667710L;
静态变量存储在class对象里面,所以所有实例共享,不算在这个对象内存里

所以一个string对象
对象头 12 字节 + char[]数组的引用 4字节 +int 4字节 +填充4字节 = 24字节

如果计算sting对象加上char [] 对象则内存大小为 40 + 字符数 * 2 + 填充
String 24字节
char[] 对象头 16 + 字符数*2 + 填充

[C 表示数组大小

  

  ((new String("")).toPrintable());
  ((new String("d")).toPrintable());
  ((new String("dshh")).toPrintable());
  ((new String("dshhh")).toPrintable());

@5ef04b5d object externals:
          ADDRESS       SIZE TYPE             PATH                           VALUE
        76b80aac8         16 [C               .value                         []
        76b80aad8    5024864 (something else) (somewhere else)               (something else)
        76bcd5738         24                                 (object)


@d70c109d object externals:
          ADDRESS       SIZE TYPE             PATH                           VALUE
        76ca26fa0         24                                 (object)
        76ca26fb8         24 (something else) (somewhere else)               (something else)
        76ca26fd0         24 [C               .value                         [d]


@50675690d object externals:
          ADDRESS       SIZE TYPE             PATH                           VALUE
        76ca2d190         24                                 (object)
        76ca2d1a8         24 (something else) (somewhere else)               (something else)
        76ca2d1c0         24 [C               .value                         [d, s, h, h]


@3ac42916d object externals:
          ADDRESS       SIZE TYPE             PATH                           VALUE
        76ca33418         32 [C               .value                         [d, s, h, h, h]
        76ca333e8         24                                 (object)
        76ca33400         24 (something else) (somewhere else)               (something else)