我正在用java编写一个程序,它必须利用一个大的散列表,散列表可以越大越好(这是一个国际象棋程序:P)。基本上,作为我的散列表的一部分,我有一个“long []”数组,“short []”数组和两个“byte []”数组。所有这些都应该是相同的大小。但是,当我将表格大小设置为一千万时,它崩溃并显示“java堆内存不足”。这对我来说没有意义。以下是我的看法:在Java中使用太多的Ram
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的应用程序,它显示了我有多少内存可用,运行该程序时它的容量是2Gb左右。另外,我设置了像-Xmx1024m这样的java选项,所以java应该可以使用多达一个内存。那为什么它不让我分配114Mb?
您可以使用内存分析器查看究竟发生了什么。 – NPE
你可以尝试较小的尺寸?排除它可能是一些很棒的递归。 –
你能想出一个你认为占用太多空间的最小自包含的例子,并将它与你正在使用的确切'java'命令行一起发布吗? – NPE