g1垃圾回收算法浪费空间场景

文章讨论了线上环境中,尽管JVM分配了16GB空间,但在处理大文件分块上传时频繁触发Allocationfailure。作者推测10MB对象可能导致Humongous区域占用过多内存,导致剩余空间无法使用。提出将文件块大小调整为8MB以优化内存利用。
摘要由CSDN通过智能技术生成

  线上环境给jvm分配了16g的空间,大概在10g左右触发了Java heap space,频繁的Allocation failure。感觉很奇怪,明明还剩下差不多6g的空间,怎么用不上? 系统主要是对接各oss平台,处理文件上传的。怀疑是不是有单个大文件?检查了一遍发现并没有。
  分析了下代码,对于大文件使用的是分块上传,每个块10M。之前有个bug就是在文件上传过程中,这10M的内存是不能释放的,这个跟当前问题有关但还不是重点。明明还剩这么多空间,为啥不能分配?因为有很多文件上传,所以达到1000个块是很频繁的。
猜想
  一个10MB的对象占用了2个region 构成的Humongous区域 (一个region 8M = 16g/2048),剩下的6MB不能被使用。这也正好解释了,为啥16G 内存,使用10G就报内存不够用了。但是这个比较难验证,问了下chatgpt,说是为了维护整体的内存管理和性能,剩下的空间会被浪费掉。有谁知道结论或者知道怎么验证的,分享下吧。
  如果要优化的话就是把上传文件块大小定义为8M。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值