flyzy博客
分享便宜VPS与网络优惠
搬瓦工

OutOfMemoryError: Java heap space内存溢出加内存无用,何解?

文件是2907M 将近3G的,

上传本地没问题,就是传到B2就报这错了

代码里面是传到本地后,再传到b2

意思就是在本地中转了一下

idea 里面也设置了 启动参数 -Xmx2907m -Xms2907m -XX:NewRatio=4

求大佬指点

    @Override     public CommonRes index(MultipartFile[] zipFile){         String timepath=”dw”;         List list = new   ArrayList();         for (int i = 0; i < zipFile.length; i++) {             try {                 //保存文件               File ret= saveFile(zipFile[i], timepath);                 //拿post过来的文件md5值                 FileInputStream fis = new FileInputStream(ret);                 String md5var = org.apache.commons.codec.digest.DigestUtils.md5Hex(fis);                 fis.close();//关闭流                 String pathvsname=timepath+"/"+ret.getName();                     //传到b2                     this.uploadFile(ret,timepath);                     System.out.println("传到B2,返回内存信息:"+pathvsname);                     //返回路径                     list.add("https://xxx.com/"+ret.getName());                 //uploadFile(dest);             } catch (IOException e) {                 e.getMessage();             }         }复制代码

陕西省网友说:你堆内存和文件一样大,合着其他东西不需要内存是吧

黑龙江省网友说:java已经还给老师

辽宁省网友说:报错的堆栈信息发下

吉林省网友说:java支持分块上传大兄弟

陕西省网友说:怎么弄,b2好像不能分块上传的吧,本地上传没问题

江西省网友说:我把 this.uploadFile(ret,timepath); 注释就没问题

打开this.uploadFile(ret,timepath);
上传小问题 300M 的也没问题,就3G的报错了,

也没什么信息 就一条WARN

贵州省网友说:像大文件都是分片传送的,并不是说送到服务端是一个一个的,
而是在java将文件切块,然后wirte一块以后 flush一次,你可以查查flush作用(
flush() 则要求立即将缓冲区的数据输出到接收方)  然后再发起另一块,最后全部结束close()

江苏省网友说:好的,感谢  我看看分块吧

但是 这代码 传本地却 没问题,

海南省网友说:你用bufferedinputstream把fileinputstream包装下,整个缓冲区

江苏省网友说:正在转换,我试试看 感谢大佬

浙江省网友说:jvm是分区垃圾回收的 你一个文件就把所有占满了 你不炸谁炸

赞(0) 打赏
关注我们
未经允许不得转载:flyzy博客 » OutOfMemoryError: Java heap space内存溢出加内存无用,何解?
分享到: 更多 (0)

这是一种鼓励

支付宝扫一扫打赏

微信扫一扫打赏