我知道java中的一个字符是2字节。但是如果在列表中加载一些字符,它们将花费 87B 来保存一个字符。测试如下:
有一个文件“源”包含 995328 行。每一行都只是一个字符:'a'。(因此在java中保存所有字符将花费近2MB)。
我的源代码中调用了两个 sleep 方法,我使用 top 命令随时检查内存使用情况。
运行第一个 sleep(10000) 方法时的 RSIZE 值为 25M,运行第二个 sleep 方法时为 108M。所以每个字符串(这只是一个“a”)成本:(108MB-25MB)/995328=87B。我不知道为什么一个字符串“a”要花这么多内存!!!谁能告诉我为什么?
public static void main(String[] args) throws Exception{
File file = new File("source");
BufferedReader br = new BufferedReader(new FileReader(file));
String line = null;
List<String> list = new ArrayList<String>();
Thread.sleep(10000);
while((line = br.readLine())!=null){
list.add(line);
}
Thread.sleep(10000);
}