私はJavaの文字が2バイトであることを知っています。ただし、リストにいくつかの文字をロードすると、文字を保存するのに87Bのコストがかかります。テストは次のようになります。
995328行を含むファイル「ソース」があります。すべての行は単なる文字です:「a」。(したがって、すべての文字を保存するには、Javaでほぼ2MBのコストがかかります)。
ソースコードで呼び出されるsleepメソッドは2つあり、topコマンドを使用してメモリ使用量をいつでも確認できます。
最初のsleep(10000)メソッドを実行するときのRSIZE値は25Mであり、2番目のsleepメソッドを実行するときのRSIZE値は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);
}