一、Java代码的执行流程
简单版:复杂版:
二、JVM架构模型
Java编译器输入的指令流基本上是一种基于栈的指令集架构,另外一种指令集架构则是基于寄存器的指令集架构。
具体来说这两种架构的区别:
基于栈式架构的特点:
1、设计和实现更简单,适用于资源受限的系统
2、避开了寄存器的分配难题,使用零地址指令方式分配
3、指令流中的指令大部分是零地址指令,其执行过程依赖于操作栈,指令集更小,编译器容易实现
4、不需要硬件支持,可移植性更好,更好实现跨平台
基于寄存器架构的特点:
1、典型的应用是x86的二进制指令集,不如传统的PC以及Android的Davlik虚拟机
2、指令集架构则完全依赖硬件,可移植性差
3、性能优秀和执行更高效
4、花费更少的指令去完成一项操作
5、在大部分情况下,基于寄存器架构的指令往往都以一地址指令、二地址指令、三地址指令为主,而基于栈式架构的指令集却是以零地址指令为主
三、JVM的生命周期
虚拟机的启动
Java虚拟机的启动是通过引导类加载器(bootstrap class loader)创建一个初始类(initial class)来完成,这个类是由虚拟机的具体实现指定的。
虚拟机的执行
一个运行中的Java虚拟机有着一个清晰的任务:执行Java程序。
程序开始执行时,它才开始运行,程序结束时它就停止了。
执行一个所谓的Java程序的时候,真真正正在执行的是一个叫做Java虚拟机的进程。
虚拟机的退出
有如下的几种情况:
1、程序正常运行结束
2、程序在执行过程中遇到了异常或错误而异常终止
3、由于操作系统出现错误而导致Java虚拟机的进程终止
4、某线程调用Runtime类或System类的exit方法,或Runtime类的halt方法,并且Java安全管理器也允许这次exit或halt操作