1

我想知道如何确定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分配数组大小的两倍?

谢谢

4

3 回答 3

8

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

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 个 mibibytes,这似乎是您从freeMemory.

于 2012-10-30T14:02:54.467 回答
2

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

于 2012-10-30T14:03:05.950 回答