美文网首页
直接内存溢出

直接内存溢出

作者: Richard_80ec | 来源:发表于2017-12-13 11:17 被阅读0次

DirectMemory可以通过-XX:MaxDirectMemorySize指定,如果不指定,默认与Java堆的最大值(-Xmx指定)一样。
NIO会使用到直接内存,你可以通过NIO来模拟,在下面的例子中,跳过NIO,直接使用UnSafe来分配直接内存。
代码:

public class DrectMemoryOOM {

    private static final int _1MB = 1024*1024;

    public static void main(String[] args) throws Exception{
        Field unsafeField = Unsafe.class.getDeclaredFields()[0];
        unsafeField.setAccessible(true);
        Unsafe unsafe = (Unsafe)unsafeField.get(null);
        while (true){
            unsafe.allocateMemory(_1MB);
        }
    }
}

虚拟机参数:
-Xmx20M 最大堆内存
-XX:MaxDirectMemorySize=10M 最大直接内存
运行结果:

Exception in thread "main" java.lang.OutOfMemoryError
    at sun.misc.Unsafe.allocateMemory(Native Method)
    at com.example.outofmemoryerror.DrectMemoryOOM.main(DrectMemoryOOM.java:19)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)

DirectMemory导致的内存溢出,一个明显的特征是在Heap Dump文件中不会看见明显的异常,如果发现OOM之后Dump文件很小,而程序中又直接或间接使用了NIO,就需要考虑是不是这方面的原因了。

相关文章

  • 直接内存溢出

    DirectMemory可以通过-XX:MaxDirectMemorySize指定,如果不指定,默认与Java堆的...

  • 直接内存溢出

    直接内存并不是虚拟机运⾏时数据区域的⼀部分,并且不受堆内存的限制,但是受到机器内存⼤⼩的限制。常⻅的⽐如在NIO中...

  • Java内存溢出

    Java内存溢出 堆溢出 大量对象占据了堆空间,而且这些对象是强引用,导致无法回收 直接内存溢出 Java的NIO...

  • 无标题文章

    什么情况下出现本机直接内存溢出?怎么解决? 产生原因 jdk本身很少操作直接内存,而直接内存(DirectMemo...

  • OutOfMemoryError: PermGen space

    tiomcat 报永久代的内存溢出,是因为项目加载了过多的CLASS。内存溢出最直接的解决方案就是加大内存。 ca...

  • JVM、并发编程、函数式编程思维导图分享,简单明了

    一、JVM 1. 运行时数据区域 线程私有 线程共享 2. 溢出 堆溢出 栈溢出 方法区溢出 直接内存溢出 3. ...

  • 【JVM】内存溢出分析

    一 内存溢出概述 都有发生内存溢出异常(OutOfMemoryError,简称OOM)的可能。 内存溢出和内存泄漏...

  • 内存溢出和内存泄漏

    1.内存泄漏 2.内存溢出 -如何避免内存泄漏、内存溢出?

  • JVM 常见内容汇总

    面试题 对象 对象的创建 分配内存 对象头 内存溢出 内存溢出与内存泄漏 内存溢出:系统无法再分配内存空间。 内存...

  • Android性能优化 内存泄漏和内存溢出

    内存泄漏 内存溢出 常见的内存泄露场景 常见的内存溢出场景

网友评论

      本文标题:直接内存溢出

      本文链接:https://www.haomeiwen.com/subject/oskaixtx.html