站点图标 谷姐靓号网

OutOfMemoryError: Java heap space内存溢出加内存无用,何解?-朕的大清完了?

Rate this post

文件是2907M 将近3G的,

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

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

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

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

求大佬指点

    @Override
    public CommonRes index(MultipartFile[] zipFile){
    String timepath="dw";
    List<String> list = new ArrayList<String>();
    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();
    }
    }

热议
推荐楼 上药三品 昨天10:27

你堆内存和文件一样大,合着其他东西不需要内存是吧

3楼 Eric.c 昨天10:27

java已经还给老师

4楼 darius 昨天10:28

报错的堆栈信息发下

5楼 CMBCHINA 昨天10:32

java支持分块上传大兄弟

6楼 朕的大清完了? 昨天10:37

java支持分块上传大兄弟

怎么弄,b2好像不能分块上传的吧,本地上传没问题

7楼 朕的大清完了? 昨天10:42

报错的堆栈信息发下

我把 this.uploadFile(ret,timepath); 注释就没问题

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

也没什么信息 就一条WARN

8楼 CMBCHINA 昨天10:43

怎么弄,b2好像不能分块上传的吧,本地上传没问题

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

9楼 朕的大清完了? 昨天10:54

像大文件都是分片传送的,并不是说送到服务端是一个一个的,
而是在java将文件切块,然后wirte一块以后 f ...

好的,感谢我看看分块吧

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

10楼 darius 昨天11:04

你用bufferedinputstream把fileinputstream包装下,整个缓冲区

12楼 dc66 昨天11:59

jvm是分区垃圾回收的 你一个文件就把所有占满了 你不炸谁炸

main

    try {
    System.out.println("到333");
    byte[] bytes = readFile3(f);//传入文件
    System.out.println("到444");
    B2UploadFileRequest request = B2UploadFileRequest.builder(bucket, B2Utils.generateFolderPath(patharr) + f.getName(), "", B2ByteArrayContentSource.build(bytes)).build();
    System.out.println("到555");
    client.uploadSmallFile(request);
    } catch (B2Exception e) {
    e.printStackTrace();
    }

14楼 darius 昨天19:10

仔细看了下 代码 ,发现有分块发送的,

readFile3方法第9行下加下out.flush();10行下加下out.flush(); out也没关

然后我才去找了个 readFile3的,原来这个应该没问题吧

原来这个 也是报那错误

刚才把 byte[] b = new byte[4096];改成4096了

-Xmx4096m -Xms4096m -XX:NewRatio=4 也改这么多了,还是报

Java heap space

out 要返回的 关闭了 能返回吗

16楼 朕的大清完了? 半小时前

算是搞定了,nnd 搞1天,

最终还是到github抄别人的

申明:本文内容由网友收集分享,仅供学习参考使用。如文中内容侵犯到您的利益,请在文章下方留言,本站会第一时间进行处理。

退出移动版