Java8String内存分析
Java8String内存分析
内存对象分布&结构
根据java虚拟机规范里面的描述:java对象分为三部分:对象头(Object Header), 实例数据(instance data),对齐填充(padding) 。
真实的Sring内存大小
对象实际占用内存查看工具
- 引入依赖
<dependency>
<groupId>org.openjdk.jol</groupId>
<artifactId>jol-core</artifactId>
<version>0.9</version>
</dependency>
- 内存查看Code
package com.arithmetic.jvm;
import org.openjdk.jol.info.ClassLayout;
public class JVMString {
/**
* @param args
*/
public static void main(String[] args) {
System.out.print(ClassLayout.parseClass(String.class).toPrintable());
}
}
-
运行结果
在JDK8下空String默认内存大小24字节大小
内存大小分析
内存占用组成:
- 对象头 12
- char[]数组引用 4
- int 类型 hash数据大小 4
- loss due to the next object alignment 对齐填充 4
注意点: 当前内存大小是在默认开启压缩指针的条件下
参考: