通过JMC工具计算String占用字节数
JDK8中一个String占多少字节?我们通过JMC工具进行计算
打开JMC
实现
import java.util.UUID;
public class Test8 {
public static void main(String[] args) {
System.out.println(UUID.randomUUID().toString());
int size = 10000000;
String[] strs = new String[size];
for (int i = 0; i < size; i++) {
strs[i] = UUID.randomUUID().toString();
}
System.out.println("----");
while (true) {
}
}
}
启动参数
-Djava.rmi.server.hostname=127.0.0.1
-Dcom.sun.management.jmxremote.port=5555
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
占用计算
size 为0
size 为10000000
从java.lang.String 229.18MB可看出,额外开销占用24Byte每个String
目前存入String的字符串是36Byte,char[] 占用840.26MB,其中约每个String 88字节,88 = 36 * 2 + 16
所以从以上可以看出JDK8的一个String 额外开销是40Byte,且需要2倍字符串大小