JVM-OOM

作者: GIT提交不上 | 来源:发表于2020-03-13 18:27 被阅读0次

  StackOverflowError(java.lang.StackOverflowError):

/**
 * @author luffy
 **/
public class OOMTest {
    public static void main(String[] args){
        stackOverFlowError();
    }

    public static void stackOverFlowError(){
        stackOverFlowError();
    }
}

  Java heap space(java.lang.OutOfMemoryError: Java heap space):

/**
 * @author luffy
 **/
public class OOMTest {
    //-Xmx10m
    public static void main(String[] args){
        Byte[] bytes = new Byte[100*1024*1024];
    }
}

  GC回收时间过长会抛出OOM,超过98%的时间用来做GC,但回收了不到2%的堆内存。GC overhead limit exceeded(java.lang.OutOfMemoryError: GC overhead limit exceeded)

/**
 * @author luffy
 **/
public class OOMTest {
    //-Xmx10m -Xms10m -XX:+PrintGCDetails -XX:MaxDirectMemorySize=5m
    public static void main(String[] args){
        int i =0;
        List<String> list = new ArrayList<>();

        try {
            while (true){
                list.add(String.valueOf(i++).intern());
            }
        } catch (Throwable e) {
            System.out.println(i);
            e.printStackTrace();
            throw e;
        }
    }
}

  Direct buffer memory(java.lang.OutOfMemoryError: Direct buffer memory):在本地内存,不在GC的回收范围内。(NIO)

/**
 * @author luffy
 **/
public class OOMTest {
    // -XX:MaxDirectMemorySize=5m
    public static void main(String[] args){

    System.out.println(sun.misc.VM.maxDirectMemory()/(1024*1024*1.0)+"G");
    ByteBuffer.allocateDirect(20*1024*1024);

    }
}

  (unable to create new native thread)java.lang.OutOfMemoryError: unable to create new native thread

/**
 * @author luffy
 **/
public class OOMTest {
    //1024个线程
    public static void main(String[] args){

        for (int i=0;;i++){
            new Thread(()->{
                try {
                    TimeUnit.SECONDS.sleep(Integer.MAX_VALUE);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            },String.valueOf(i)).start();
        }

    }
}

  java.lang.OutOfMemoryError: MetaSpace(Java8以后替换永久代)是方法区在HotSpot的实现,不在虚拟机内存内,直接使用本地内存。存放以下信息:

  • 虚拟机加载的类信息
  • 常量池
  • 静态变量
  • 即时编译后的代码

相关文章

  • JVM-OOM

      StackOverflowError(java.lang.StackOverflowError):   Jav...

  • JVM-OOM排查思路

    JVM 内存溢出排查思路: 一般来讲,我们会先用 free 命令先来检查一发内存的各种情况, 堆内内存 JVM 中...

网友评论

      本文标题:JVM-OOM

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