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

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 表示数组大小

  

  System.out.println(GraphLayout.parseInstance(new String("")).toPrintable());
  System.out.println(GraphLayout.parseInstance(new String("d")).toPrintable());
  System.out.println(GraphLayout.parseInstance(new String("dshh")).toPrintable());
  System.out.println(GraphLayout.parseInstance(new String("dshhh")).toPrintable());

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


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


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


java.lang.String@3ac42916d object externals:
          ADDRESS       SIZE TYPE             PATH                           VALUE
        76ca33418         32 [C               .value                         [d, s, h, h, h]
        76ca333e8         24 java.lang.String                                (object)
        76ca33400         24 (something else) (somewhere else)               (something else)
      
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值