Java 编译器输入的指令流基本上是一種基于栈的指令集架构另外一种指令集架构则是基于寄存器的指令集架构。
具体来说这两种架构之间的区别:
- 设计和实现更简单,适鼡于资源受限的系统
- 避开了寄存器的分配难题:使用零地址指令方式分配
- 指令流中的指令大部分是零地址指令其执行过程依赖于操作栈。指令集更小编译器实现更容易
- 不需要硬件支持,可移植性更好更好实现跨平台
- 基于寄存器架构的特点:
- 指令集架构则完全依赖硬件,可移植性差
- 花费更少的指令去完成一项操作
- 在大部分情况下基于寄存器架构的指令集往往都以一地址指令、二地址指令、三地址指令為主,而基于栈式架构的指令集却是以零地址指令为主
由于跨平台的设计Java 的指令都是根据栈来设计的。不同平台的 CPU 架构不同所以不能設计为基于寄存器的。优点是跨平台指令集小,编译器容易实现缺点是性能下降,实现同样的功能需要更多的指令
Java 虚拟机的启动是通过引导类加载器(bootstrap class loader)创建一个初始类(initial class)来完成的,这个类是由虚拟机的具体实现指定的
- 一个运行中的 Java 虚拟机有着一个清晰的任务:執行 Java 程序
- 程序开始执行时它才运行,程序结束的时候它就停止
- 执行一个所谓的 Java 程序的时候真正在执行的是一个叫做 Java 虚拟机的进程
虚拟机嘚退出有如下几种情况:
- 程序在执行过程中遇到了异常或错误而异常终止
- 由于操作系统出现错误而导致 Java 虚拟机进程终止