• 技术文章 >java >java基础

    java内存溢出的四种情况

    小妮浅浅小妮浅浅2021-07-23 09:51:40原创4368

    1、堆溢出,堆是存放实例对象的,但是这样堆区迟早会满。设置了堆区内存,创建就会抛出异常。

    public class HeapOOM {
        static class User {}
        public static void main(String[] args) {
             List<User> list = new ArrayList<User>();
                while (true) {
                    list.add(new User());
             }
        }
    }
    /*Exception in thread "main" java.lang.OutOfMemoryError:
    GC overhead limit exceeded
    at com.fdd.test.HeapOOM.main(HeapOOM.java:11)*/

    2、虚拟机栈和本地方法栈溢出

    如果线程要求的堆栈深度大于虚拟机锁允许的深度,则抛出StackOverflowEror异常。

    如果虚拟机在扩展堆栈时无法申请足够的存储空间,则会出现异常。

    public class StackOutOfMemoryError {
        public static void main(String[] args) {     
             test();
        }
        private static void go() {
            System.out.println("StackOverflowError异常");
            test();
        }
    }
    /*Exception in thread "main" java.lang.StackOverflowError
        at sun.nio.cs.ext.DoubleByte$Encoder.encodeLoop(DoubleByte.java:617)
        at java.nio.charset.CharsetEncoder.encode(CharsetEncoder.java:579)
        at sun.nio.cs.StreamEncoder.implWrite(StreamEncoder.java:271)
        at sun.nio.cs.StreamEncoder.write(StreamEncoder.java:125)
        at java.io.OutputStreamWriter.write(OutputStreamWriter.java:207)
        at java.io.BufferedWriter.flushBuffer(BufferedWriter.java:129)
        at java.io.PrintStream.write(PrintStream.java:526)
        at java.io.PrintStream.print(PrintStream.java:597)
        at java.io.PrintStream.println(PrintStream.java:736)
        at com.fdd.test.StackOutOfMemoryError.go(StackOutOfMemoryError.java:11)
    at com.fdd.test.StackOutOfMemoryError.go(StackOutOfMemoryError.java:13)*/

    3、方法区和运行时常量池溢出

    4、本机直接内存溢出

    DirectMemory容量可通过-XX:MaxDirectMemorySize指定,如不指定,默认与Java堆的值(-Xmx指定)相同。

    以上就是java内存溢出的四种情况,我们对于可能会产生的内存溢出问题进行了分类的归纳,大家想要更深入的了解这部分的问题,可以找一些不同类型的内存溢出实例进行练习。更多Java学习指路:Java基础

    本教程操作环境:windows7系统、java10版,DELL G3电脑。

    专题推荐:java内存溢出
    上一篇:java静态和动态绑定的对比 下一篇:java方法重载的无效探究

    相关文章推荐

    • Java内存交互的规则• java内存结构的组成• java内存模型的组成• Java内存模型的并发处理• Java内存交互如何操作• Java内存屏障是什么• java内存屏障有哪些类型• Java内存分配是什么• java内存泄漏• java内存泄漏的解决方法

    全部评论我要评论

    © 2021 Python学习网 苏ICP备2021003149号-1

  • 取消发布评论
  • 

    Python学习网