1

Javaによって割り当てられたメモリをどのように確認できるのか疑問に思っています。メモリ要件が制限されたプログラムがあります。特定のサイズの配列を割り当てると、JVM がこのサイズの 2 倍のメモリを割り当てることに気付きました。

例: 配列を割り当てる前に:

runtime.totalMemory() 15 MB
runtime.freeMemory(): 14 MB

この行の後: char [] xxx = new char[4 * 1024 * 1024];

runtime.totalMemory() 15 MB
runtime.freeMemory(): 6 MB

そのため、空きメモリの量が 14 MB から 6 MB に減少しました。私のアレイはわずか 4 MB ですが。さまざまな配列で試しましたが、常に同じです。なぜJavaは2倍の配列サイズを割り当てるのですか?

ありがとう

4

3 に答える 3

8

char は8ビットではなく16 ビットです。詳細については、こちらを参照してください。

char: char データ型は、単一の 16 ビット Unicode 文字です。最小値は '\u0000' (または 0) で、最大値は '\uffff' (または 65,535 を含む) です。

したがって、割り当てています1024 * 1024 * 4 * 2(2バイト= 16ビット)。私には大丈夫に見えます。

于 2012-10-30T14:02:39.303 に答える
4

sizeof(char)Java の場合は 2 バイトであるため、400 万要素の char 配列は 8 ミビバイトを置き換えます。これは、 freeMemory.

于 2012-10-30T14:02:54.467 に答える
2

Java では、文字は 2 バイトの Unicode として表されます。

于 2012-10-30T14:03:05.950 に答える