我正在用java编写一个程序,它必须使用一个大的哈希表,哈希表越大越好(这是一个国际象棋程序:P)。基本上,作为我的哈希表的一部分,我有一个“long[]”数组、一个“short[]”数组和两个“byte[]”数组。所有这些都应该是相同的大小。但是,当我将表大小设置为一千万时,它崩溃并显示“java heap out of memory”。这对我来说毫无意义。这是我的看法:
1 Long + 1 Short + 2 Bytes = 12 bytes
x 10,000,000 = 120,000,000 bytes
/ 1024 = 117187.5 kB
/ 1024 = 114.4 Mb
现在,114 Mb 的 RAM 对我来说似乎并不算多。我的 CPU 在我的 Mac 上总共有 4Gb 的 RAM,我有一个名为 FreeMemory 的应用程序,它显示了我有多少可用的 RAM,并且在运行这个程序时它大约是 2Gb。此外,我设置了 java 首选项,如 -Xmx1024m,因此 java 应该能够使用最多内存。那么为什么不让我只分配 114Mb 呢?