我正在为一个大文件(〜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'是很重要的 - 不知道我们可能会把你完全错误的发送给你。还有一些(相关的)代码会很好.... –