前言
在编写的Java程序中有时会遇到用 System.exit 来关闭JVM,其中调用 exit 方法时会包含一个状态参数n,即System.exit(n)
。这其实是一个约定值,如果为0则表示正常关闭,而非0则表示非正常关闭。这里我们从JDK源码看下不同状态都是怎么处理的。
System与Runtime
先看System类的exit方法如下,可以看到它是间接调用了Runtime对象的exit方法。
public static void exit(int status) {
Runtime.getRuntime().exit(status);
}
而Runtime的exit方法如下,先使用SecurityManager检查是否有关闭JVM的权限,允许执行则调用Shutdown的exit方法。
public void exit(int status) {
SecurityManager security = System.getSecurityManager();