JVM 内存溢出

Posted pickknow

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JVM 内存溢出相关的知识,希望对你有一定的参考价值。

1,Java堆溢出

   错误原因: java.lang.OutOfMemoryError: Java heap space 堆内存溢出

  模拟:-Xms1m -Xmx10m -XX:+PrintGCDetails -XX:+HeapDumpOnOutOfMemoryError

  设置堆初始内存1M 最大内存10M ,创建数组Byte[] bytes = new Byte[11 * 1024 * 1024],便会出现java heap space out of memory

  解决方法:调整堆的大小

 

2,虚拟机栈溢出

java.lang.StackOverflowError 栈内存溢出

栈溢出 产生于递归调用,循环遍历是不会的,但是循环方法里面产生递归调用, 也会发生栈溢出。

解决办法:设置线程最大调用深度

-Xss5m 设置最大调用深度

1M 约10000左右的深度,但是-Xss 越大,深度会成指数增长

public class JvmDemo 
     private static int count;
     public static void count()
        try 
             count++;
             count(); 
         catch (Throwable e) 
            System.out.println("最大深度:"+count); //递归调用的的一个深度
            e.printStackTrace();
        
     
     public static void main(String[] args) 
         count();
    

3,Java 内存溢出和内存泄漏区别

Java 内存溢出是指:要求分配的内存超出了系统所能提供的内存,系统无法满足要求,于是内存溢出

内存泄露是指:使用过的内存空间没有被及时的释放,长时间占用内存,最终导致内存空间不足,而产生内存溢出。所以IO流用完要关闭,static 不要用太多,因为不会被释放

以上是关于JVM 内存溢出的主要内容,如果未能解决你的问题,请参考以下文章

JVM之内存泄漏和内存溢出

JVM之内存泄漏和内存溢出

jvm学习一|jvm内存区域以及内存溢出

内存溢出及Jvm监控工具

JVM各种情况内存溢出分析

JVM内存溢出分析:堆内存溢出+虚拟机+方法区——JVM系列