2.java代码执行流程
1.JVM的架构模型
java编译器输入的指令流基本上是基于栈的指令集架构,另外一种指令集架构是则是基于寄存器的指令架构
这两种架构方式之间的区别:
1.基于栈式架构的特点:
>设计和实现更简单,适用于资源受限的情况
>避开了寄存器的分配难题:使用零地址指令方式分配
>指令流中的指令大部分式零地址指令,其执行过程依赖于操作栈,指令集更小,编译器容易实现
>不需要硬件支持,可移植性更好,更好的实现跨平台
2.基于寄存器架构的特点
>典型的应用式X86的二进制指令集,例如传统的pc以及Andriod的Davlik虚拟机
>指令集架构则完全依赖于硬件,可移植性差
>性能优秀和执行更高效
>花费更少的指令去完成一项操作
>在大部分情况下,基于寄存器架构的指令集往往是以一地址指令,二地址指令和三地址指令为主,而基于栈式架构的指令集则是基于零式指令为主
例子:
同样执行2+3的指令操作,其指令分别如下
1.集运栈式架构计算流程(以java虚拟机为例)
iconst_2 //常量2入栈
istore_1
iconst_3 //常量3入栈
istore_2
iload_1
iload_2
iadd //常量2,3出栈,执行相加
istore_5 //结果5入栈
2.基于寄存器架构的计算流程
mov eax,2 //将eax寄存器的值设置1
add eax,3 //将eax寄存器的值+3
总结:
基于栈式架构的优缺点:跨平台性,指令集小,但是指令多,执行性能比寄存器差
2.JVM的生命周期
1.虚拟机启动
java虚拟机的启动是通过引导类加载器(bootstrap class loader)创建一个初始类(initial calss)来完成的,这个类是由虚拟机的具体实现指定的
2.虚拟机的运行
>一个运行的java虚拟机有一个清晰的任务:执行java程序
>程序开始执行时它才执行,程序执行结束它就停止
>执行一个所谓的java程序的时候,真正执行的是一个叫做java虚拟机的进程
3.虚拟机的退出