概述
既然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 buffer OutOfMemoryError所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复