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

use*_*771 1 java memory-management

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

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

runtime.totalMemory() 15 MB
runtime.freeMemory(): 14 MB
Run Code Online (Sandbox Code Playgroud)

在这一行之后:char [] xxx = new char [4*1024*1024];

runtime.totalMemory() 15 MB
runtime.freeMemory(): 6 MB
Run Code Online (Sandbox Code Playgroud)

因此,可用内存量从14 MB下降到6 MB.即使我的阵列只有4 MB.我尝试过不同的数组,它总是一样的.为什么java分配数组大小的两倍?

谢谢

Bri*_*new 8

char是16位,而不是 8.有关详细信息,请参见此处.

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

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