美文网首页
JVM抛出异常的原因

JVM抛出异常的原因

作者: Change_6556 | 来源:发表于2019-10-25 17:58 被阅读0次

    1.Java堆溢出

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

    单线程环境下栈帧太大 或者虚拟机栈容量太小都会抛出stackoverflow异常

    public class JavaVMStackSOF {
        private int stackLength = 1;
        public  void stackLeak(){
            stackLength++;
            stackLeak();
        }
        public static void main(String[] args) {
            JavaVMStackSOF oom = new JavaVMStackSOF();
            try{
                oom.stackLeak();
            }catch (Throwable e){
                System.out.println("Stack length:" + oom.stackLength);
                throw e;
            }
        }
    }
    

    -Xss 每个堆栈的大小
    JDK5.0以后每个线程堆栈大小为1M,以前每个线程堆栈大小为256K.更具应用的线程所需内存大小进行 调整.在相同物理内存下,减小这个值能生成更多的线程.但是操作系统对一个进程内的线程数还是有限制的,不能无限生成,经验值在3000~5000左右
    一般小的应用, 如果栈不是很深, 应该是128k够用的 大的应用建议使用256k。这个选项对性能影响比较大,需要严格的测试。一般设置这个值就可以了
    调大每个堆栈的大小,可以让这个线程的栈递归的深度更深;在相同物理内存下,减小这个值能生成更多的线程.

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

    4.本机直接内存溢出

    相关文章

      网友评论

          本文标题:JVM抛出异常的原因

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