Java中的内存分配增加了一倍

时间:2012-10-30 13:59:55

标签: java memory-management

我想知道如何确定java分配的内存。我有一个内存要求有限的程序。当我分配一个具有特定大小的数组时,我注意到JVM分配的内存大小是这个大小的两倍:

例如:在我分配数组之前:

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会分配数组大小的两倍?

由于

3 个答案:

答案 0 :(得分:8)

char为16位, 8.有关详细信息,请参阅here

  

char:char数据类型是一个16位Unicode字符。它有   最小值'\ u0000'(或0)和最大值'\ uffff'(或   65,535(含))。

所以你要分配1024 * 1024 * 4 * 2(2个字节= 16位)。对我来说没问题。

答案 1 :(得分:4)

Java的

sizeof(char)是2个字节,因此400万个元素的char数组取代了8个mibibytes,这似乎是freeMemory中缺少的确切数量。

答案 2 :(得分:2)

在Java中,字符表示为2字节的unicode。