很多内存中的OutOfMemoryexception

对不起的问题名称很抱歉,但我找不到更好的东西。

我有一些代码

long heapFreeSize = Runtime.getRuntime().freeMemory(); URL url = new URL("http://example.com"); URLConnection myUrlConnection = url.openConnection(); GZIPInputStream gZIPInputStream = new GZIPInputStream(myUrlConnection.getInputStream()); StringBuffer decompressedStringBuffer = new StringBuffer(); int bytes_read; int bufferSize; heapFreeSize = Runtime.getRuntime().freeMemory(); while ((bytes_read = gZIPInputStream.read(buffer)) > 0) { String part = new String(buffer, 0 ,bytes_read, "UTF-8"); heapFreeSize = Runtime.getRuntime().freeMemory(); decompressedStringBuffer.append(part); bufferSize = decompressedStringBuffer.length(); heapFreeSize = Runtime.getRuntime().freeMemory(); } 

代码中的URL返回一个gzip文件,我将其解压缩并存储在字符串中以供进一步处理。 我一直在使用一个较小的文件来测试我的逻辑,但当我移动到完整文件时,我得到一个OutOfMemoryexception。 如果我将文件下载到我的电脑并提取它,提取的文本文件大小约为140MB。 使用heapFreeSize我可以看到我的堆有800多MB的可用内存。

我在decompressedStringBuffer.append(part);上得到错误decompressedStringBuffer.append(part); 线。

为什么在仍然有这么多可用内存时出现OutOfMemory错误?