jvm的几种终止方式的实现
来源:互联网 发布:java urlencode 编辑:程序博客网 时间:2024/05/17 04:47
在执行java .. shutdown的时候,会调用到ShutDown类中的shutdown方法:在最后一个non-daemon thread停掉之后才会调用到。不是真正的停掉jvm。
/* Invoked by the JNI DestroyJavaVM procedure whenthe last non-daemon * thread has finished. Unlike the exit method, this methoddoes not *actually halt the VM. */ static void shutdown() { synchronized (lock) { switch (state) { case RUNNING: /* Initiate shutdown */ state = HOOKS; break; case HOOKS: /* Stall and then return */ case FINALIZERS: break; } } synchronized (Shutdown.class) { sequence(); }} Sequece方法:执行hook和Finalize,注意,没有halt privatestatic void sequence() { synchronized (lock) { /* Guard against thepossibility of a daemon thread invoking exit * afterDestroyJavaVM initiates the shutdown sequence */====不允许在daemon进程中调用 if (state != HOOKS)return; } runHooks(); =============执行shutdown hooks boolean rfoe; synchronized (lock) { state = FINALIZERS; rfoe =runFinalizersOnExit; } ==============判断是不是要执行Finalize if (rfoe) runAllFinalizers(); }
通过system.exit()方式执行:调用到runtime中的exit(int)方法,根据传入参数判断可能执行到unAllFinalizers,sequence,halt(注意,这里面包含halt的)
static void exit(intstatus) { boolean runMoreFinalizers = false; synchronized (lock) { if (status != 0) runFinalizersOnExit = false; switch (state) { case RUNNING: /* Initiate shutdown */ state = HOOKS; break; caseHOOKS: /* Stall and halt */ break; case FINALIZERS: if (status != 0) { /* Halt immediately on nonzero status */ halt(status); } else { /* Compatibility with old behavior: * Run more finalizers and then halt */ runMoreFinalizers = runFinalizersOnExit; } break; } } if (runMoreFinalizers) { runAllFinalizers();########################## halt(status);################################ } synchronized (Shutdown.class) { /* Synchronize on the class object, causing any other thread * that attempts to initiate shutdown to stall indefinitely */ sequence();################################### halt(status);################################# } }
通过kill执行,也就是相当于调用runtime.halt(int),shutdown.halt(int),二话不说,直接调用native方法halt掉
/* The halt method is synchronized on the halt lock * to avoid corruption of the delete-on-shutdown file list. * It invokes the true native halt method. */ static void halt(int status) { synchronized (haltLock) { halt0(status); }}
- jvm的几种终止方式的实现
- 获取JVM运行状况的几种方式
- 终止正在运行的子线程(一、几种方式的介绍)
- CLR20R3 程序终止的几种解决方案
- 线程终止的方式
- 进程的终止方式
- RabbitMq的几种方式的实现
- AOP的实现的几种方式
- 进程的8种终止方式
- 进程的5种终止方式
- 实现HTTP下载的几种方式
- Singleton模式的几种实现方式
- java实现ftp的几种方式
- 几种实现身份验证的方式
- 实现打印的几种方式
- 几种下拉框的实现方式
- 实现圆角的几种方式
- Tooltip 实现的几种方式
- Update/insert trigger
- 面向对象三大特点心得理解.......
- Tomcat servlet,jsp,javabean eclipse
- 基于RBAC的权限管理系统
- MySQL 使用静态链接库遇到的问题
- jvm的几种终止方式的实现
- 什么是META标签|META标签大全
- c#反射
- 关于Visual C++运行非托管程序缺失DLL文件
- 关于学习的几点-->给自己的建议
- 输入框值检查
- 纪念我渐逝的爱情
- 总结Action传递给jsp的值的接收问题
- ubuntu11.04安装opencv2.2的几种方法的比较