前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >直接内存满了导致的OOM

直接内存满了导致的OOM

作者头像
逍遥壮士
发布2021-07-29 16:44:09
1.3K0
发布2021-07-29 16:44:09
举报
文章被收录于专栏:技术趋势技术趋势
代码语言:javascript
复制
/**
 * @author: csh
 * @Date: 2021/5/13 18:37
 * @Description:OOM 模拟直接内存溢出
 *
 * Exception in thread "main" java.lang.OutOfMemoryError: Direct buffer memory
 */
public class BufferTest2 {

    private static final int BUFFER =1024 * 1024 * 20;

    public static void main(String[] args) {
        ArrayList<ByteBuffer> list = new ArrayList <>();
        int count = 0;
        try {
            while (true){
                ByteBuffer byteBuffer = ByteBuffer.allocateDirect(BUFFER);
                list.add(byteBuffer);
                Thread.sleep(100);
            }
        }catch (Exception e){
            System.out.println("总共打印");
            e.printStackTrace();
        }
    }
}

结果:

代码语言:javascript
复制
Exception in thread "main" java.lang.OutOfMemoryError: Direct buffer memory
  at java.nio.Bits.reserveMemory(Bits.java:694)
  at java.nio.DirectByteBuffer.<init>(DirectByteBuffer.java:123)
  at java.nio.ByteBuffer.allocateDirect(ByteBuffer.java:311)
  at com.memory.BufferTest2.main(BufferTest2.java:20)

通过查看内存发现,系统的内存呈现递增趋势,然后OOM后快速回落。

可以通过:MaxDirectMemorySize 设置大小。

代码语言:javascript
复制
-Xmx20M -XX:MaxDirectMemorySize=10M

最后

OOM导致的溢出比较容易复现,并且很容易排查,在日常开发过程中要注意,不用的变量或引用要及时回收。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-07-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 技术趋势 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档