我正在爲一個大文件(〜30GB)實現一個外部排序,所以在我將這些塊寫入磁盤之後,我創建了chunks
次BufferedReader(new OutputStreamWriter(new FileOutputStream(outputPath), "UTF-8"), maxBufferSize)
是maxBufferSize = Runtime.getRuntime().freeMemory()/chunks
。但是我得到一個OutOfMemory
異常。JVM內存不足
我想垃圾回收器沒有足夠的時間來清理內存(當我停止調試器,它不會拋出異常),但在這種情況下,爲什麼Runtime.getRuntime().freeMemory()
給出了這樣的結果?
是否可以顯式調用垃圾回收或唯一的選項是睡眠一段時間?
可能重複的[我們可以明確調用垃圾收集器嗎?](http://stackoverflow.com/questions/15632734/can-we-call-the-garbage-collector-explicitly) –
還要注意,freeMemory()告訴您堆中可用空間的總量,但不能保證有一個大的連續塊(事實上,通常情況並非如此)。 –
知道你會得到什麼樣的'OutOfMemoryError'是很重要的 - 不知道我們可能會把你完全錯誤的發送給你。還有一些(相關的)代碼會很好.... –