在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/Java/ java8中使用char數(shù)組構(gòu)造String內(nèi)存占用問題。

java8中使用char數(shù)組構(gòu)造String內(nèi)存占用問題。

題目描述

java8保存10000000個(gè)String,查看內(nèi)存占用情況。

題目來源及自己的思路

兩種不同方式構(gòu)造String對(duì)象,內(nèi)存占用相差很大,請(qǐng)問是什么原因,如何解決呢:
1、new String("ABCDEF");占用內(nèi)存240MB
2、char[] chars = {'A', 'B', 'C', 'D', 'E', 'F'}; new String(chars);占用內(nèi)存240MB + 320MB = 560MB

相關(guān)代碼

第一種方式代碼如下:
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;
}

}

clipboard.png

第二種方式代碼如下:
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內(nèi)存
clipboard.png

你期待的結(jié)果是什么?實(shí)際看到的錯(cuò)誤信息又是什么?

請(qǐng)問是什么原因,如何解決掉char數(shù)組占用的320MB內(nèi)存呢,謝謝!

回答
編輯回答
青瓷

原因很簡(jiǎn)單

    public String(char value[]) {
        this.value = Arrays.copyOf(value, value.length);
    }

解決方法是要么不用char數(shù)組要么不用String,因?yàn)檫@里就是有這么一次復(fù)制
不知道題主為啥這么在意內(nèi)存

2017年9月9日 01:09
編輯回答
萌吟

感謝_TNT_的回答,確實(shí)是這樣,第一種方式共用一個(gè)char數(shù)組,第二種方式每個(gè)String對(duì)象是一個(gè)獨(dú)立的char數(shù)組,見下圖

第一種方式:
clipboard.png

第二種方式:
clipboard.png

2017年4月9日 15:42