我想知道如何确定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会分配数组大小的两倍?
由于
答案 0 :(得分:8)
char为16位,不 8.有关详细信息,请参阅here。
char:char数据类型是一个16位Unicode字符。它有 最小值'\ u0000'(或0)和最大值'\ uffff'(或 65,535(含))。
所以你要分配1024 * 1024 * 4 * 2
(2个字节= 16位)。对我来说没问题。
答案 1 :(得分:4)
sizeof(char)
是2个字节,因此400万个元素的char数组取代了8个mibibytes,这似乎是freeMemory
中缺少的确切数量。
答案 2 :(得分:2)
在Java中,字符表示为2字节的unicode。