java -Xmx200
让java heap大于你要的值

解决方案 »

  1.   

    我的意思是有没有程序解决的办法?
    uc的OutputStream好像关闭了就不能打开,最好不要建立多个连接,救命啊
      

  2.   

    你用的是什么IDE啊
    如果是eclipse的话可以增加它的虚拟内存。做法如下
    先右击eclipse的快捷方式->属性.
    在目标中打入:D:\eclipse\eclipse.exe -Vmargs -Xmx128M
    注意有空格的哦。前面的路径根据你自己的改就可以了。
      

  3.   

    java -Xmx200
    让java heap大于你要的值
      

  4.   

    你可以改进writeZipStream(folder, zos)的算法,不要用递归,如果是非递归的深搜算法要及时释放占用的资源
    Out of Memory是一种可以处理的Error,一般策略是
    try {
       操作
    } catch (OutofMemoryError e) {
       释放一些资源
       retry();
    }
      

  5.   

    劝楼主一句,每一个算法都是有空间需求,因此有的时候不得不使用外部方法来增大内存,想想看就是windows也有最小内存需要xxxMB之类的要求呀。
    而且时间换空间也是有限度的,我从四年级就开始参加北京市和全国算法竞赛,拿到一道题第一件事就是空间估计和时间估计,来决定自己的算法,最开始我们写程序的可用内存空间都按64K来估计,有的题目明显超过需要就必须使用自定义编码等算法来减小,现在没有人强迫我们必须在一定的内存空间内解决,所以可以适当的放松一下,-Xmx就好了:)
      

  6.   

    怎么分开做,要看你的逻辑和需求是怎样的了。
    我同意楼上时间换空间是有限度的,不过-Xmx有时候也不好使,
    出现Out of memory,优化程序还是必要的。
      

  7.   

    to: raimundo() 
    非常感谢你,100多兆只是一个测试,所以 -Xmx 不一定完全符合需求,我想分多次写入ZipStream,可是那个OutputStream关闭后再也大不开了,
      

  8.   

    我试了一下,flush,不行,一直要close才会把数据写到服务端,哎
      

  9.   

    估计问题出在HttpURLConnection,不知道他的OpenOutputSteam的结果是不是BufferedOutputStream,如果可能会是因为在内存中buffer的原因。你在writeZipStream(folder, zos)里包没包Buffered?
      

  10.   

    楼主:
    1、一般不会出现这个错误的,java内存控制很好。
    2、如果出现,一般问题出在我们写的代码中,诸如内存没有释放等等。
    3、想把5000个文件压缩,你一下子全部入流嘛?没有其他中间步骤?(如果有中间步骤,就先检查那部分代码,如果没有中间步骤,就说明不能这样处理,就看看ZipOutputStream类,是否提供了分批入流的方法。
      

  11.   

    to qqbz(qqbz)
    现在没有中间步骤,怎样分批入流
      

  12.   

    这肯定是你读入的流太大,或者是你存放读入的流的buffer太大
      

  13.   

    加缓存啊
    java -ms256m -mx256m  .......
    把256改成接近你文件大小的数。