JAVA虚拟机栈(Java Virtual Machine Stacks)抛出StackOverflowError和OutOfMemoryError的异常的示例

Posted wodediqizhang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA虚拟机栈(Java Virtual Machine Stacks)抛出StackOverflowError和OutOfMemoryError的异常的示例相关的知识,希望对你有一定的参考价值。

        当虚拟机栈空间无法扩展或者在创建线程时无法分配足够的内存时,会抛出 StackOverflowErrorOutOfMemoryError 异常。

以下是两个示例:

1.StackOverflowError

public class StackOverflowExample 
    public static void main(String[] args) 
        stackOverflowMethod();
    
    
    private static void stackOverflowMethod() 
        stackOverflowMethod();
    

        上面的代码在调用 stackOverflowMethod() 时,会不断地进行递归调用,导致栈空间不断压入方法栈帧,最终抛出 StackOverflowError 异常。

2.OutOfMemoryError

public class OutOfMemoryExample 
    public static void main(String[] args) 
        int threadCount = 0;
        while (true) 
            new Thread(() -> 
                try 
                    Thread.sleep(1000000);
                 catch (InterruptedException e) 
                    e.printStackTrace();
                
            ).start();
            threadCount++;
            System.out.println("Thread count: " + threadCount);
        
    

        上面的代码会不断地创建线程,每个线程会休眠一段时间后再退出。如果创建线程的速度过快,而且每个线程休眠时间过长,就会导致栈空间不足,从而抛出 OutOfMemoryError 异常。

以上是关于JAVA虚拟机栈(Java Virtual Machine Stacks)抛出StackOverflowError和OutOfMemoryError的异常的示例的主要内容,如果未能解决你的问题,请参考以下文章

探究Java虚拟机栈

探究Java虚拟机栈

java 虚拟机栈

《JVM系列》 第四章 -- Java虚拟机栈

JAVA虚拟机栈

Day326&327.虚拟机栈 -JVM