我正在用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