Direct buffer OutOfMemoryError

简介: Direct buffer OutOfMemoryError

既然Direct memory是物理内存,那么是不是不受限制呢,这个肯定不是的。

我们来一段程序:

public class Jvm1_10 {
    static int _10M=1024*1024*10;
    public static void main(String[] args) {
        List<Buffer>  list=new ArrayList<>();
        int i=0;
        try{
            while (true){
                ByteBuffer byteBuffer=ByteBuffer.allocateDirect(_10M);
                list.add(byteBuffer);
                i++;
            }
        }finally {
            System.out.println(i);
        }
    }
}

执行结果:

364
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 Jvm1_10.main(Jvm1_10.java:19)

这个结果表明程序分配了364次,就内存溢出了,这说明我们程序是有控制的。我们加入代码:

System.out.println("maxDirectMemorym默认大小"+ VM.maxDirectMemory()/1024/1024+"MB");

输出:maxDirectMemorym默认大小3641MB

这个便是我们的默认配置,我们可以通过jvm参数控制这个默认值

-XX:MaxDirectMemorySize=20m

maxDirectMemorym默认大小20MB
2
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 Jvm1_10.main(Jvm1_10.java:20)


目录
相关文章
|
存储 Java 索引
43 # buffer 的应用
43 # buffer 的应用
64 0
|
2月前
|
JavaScript 前端开发 网络协议
Buffer
【10月更文挑战第23天】
31 3
|
4月前
|
Android开发
Out of memory on a 11111-byte allocation
Out of memory on a 11111-byte allocation
30 1
|
Docker 容器
解决Native memory allocation (mmap) failed to map 2060255232 bytes for committing reserved memory.
解决Native memory allocation (mmap) failed to map 2060255232 bytes for committing reserved memory.
1268 0
|
Java Maven Windows
maven内存不足:Unexpected error occurred: Not enough memory to allocate buffers for rehashing Java heap
maven内存不足:Unexpected error occurred: Not enough memory to allocate buffers for rehashing Java heap
143 0
|
存储 缓存 算法
Buffer
Buffer
245 0
Buffer
|
缓存 Linux 存储
Linux内存buffer和cache的区别
在Linux的内存分配机制中,优先使用物理内存,当物理内存还有空闲时(还够用),不会释放其占用内存,就算占用内存的程序已经被关闭了,该程序所占用的内存用来做缓存使用,对于开启过的程序、或是读取刚存取过得数据会比较快。
2607 0