System.exit()可以在不终止JVM的情况下返回吗?

时间:2015-11-11 16:41:04

标签: java jvm

在实践中当然不太可能发生,但是: 是否任何原因导致此方法调用不终止JVM?

例如,是否可能在调用OutOfMemoryError之后(或同时)调用System.exit(0)时抛出StackOverflowError或者在调用此方法时发生colorbar,因为堆栈只是溢出在那一刻?

2 个答案:

答案 0 :(得分:8)

  

这个方法调用有没有理由不终止JVM?

From the docs:

  

抛出:

     

SecurityException - 如果存在安全管理器且其checkExit方法不允许以指定状态退出。

答案 1 :(得分:1)

我无法在System.exit()

上产生堆栈溢出
public static void main(String[] args)
{
    try
    {
        main(args);  // recursion
    }
    catch (StackOverflowError e1)
    {
        System.out.println("OK.");
    }

    try
    {
        System.exit(0);
    }
    catch (StackOverflowError e2)
    {
        System.out.println("HA!");
    }
}

发生e1后,println()exit()仍然有效,就像堆栈上仍有一些空间一样。