我是靠谱客的博主 有魅力夏天,这篇文章主要介绍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)

最后

以上就是有魅力夏天最近收集整理的关于Direct buffer OutOfMemoryError的全部内容,更多相关Direct内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(53)

评论列表共有 0 条评论

立即
投稿
返回
顶部