题目描述
java8保存10000000个String,查看内存占用情况。
题目来源及自己的思路
两种不同方式构造String对象,内存占用相差很大,请问是什么原因,如何解决呢:
1、new String("ABCDEF");占用内存240MB
2、char[] chars = {'A', 'B', 'C', 'D', 'E', 'F'}; new String(chars);占用内存240MB + 320MB = 560MB
相关代码
第一种方式代码如下:
public static void main(String[] args) throws InterruptedException {
int count = 10000000;
String[] array = new String[count];
for (int i = 0; i < count; i++) {
String e = new String("ABCDEF");
array[i] = e;
}
}
第二种方式代码如下:
public static void main(String[] args) throws InterruptedException {
int count = 10000000;
char[] chars = {'A', 'B', 'C', 'D', 'E', 'F'};
String[] array = new String[count];
for (int i = 0; i < count; i++) {
String e = new String(chars);
array[i] = e;
}
}
多出来了char[]占用的320MB内存
你期待的结果是什么?实际看到的错误信息又是什么?
请问是什么原因,如何解决掉char数组占用的320MB内存呢,谢谢!