NIUCLOUD是一款SaaS管理后台框架多应用插件+云编译。上千名开发者、服务商正在积极拥抱开发者生态。欢迎开发者们免费入驻。一起助力发展! 广告
### JVM架构模型 Java编译器输入的指令流基本上是一种**基于栈**的指令集架构,另外一种指令集架构则是**基于寄存器**的指令集架构。 这两种架构之间的区别: **基于栈式架构的特点** * 设计和实现更简单,适用于资源受限的系统; * 避开了寄存器的分配难题:使用零地址指令方式分配。 * 指令流中的指令大部分是零地址指令,其执行过程依赖于操作栈。**指令集更小**,编译器容易实现。 * 不需要硬件支持,可移植性更好,更好实现跨平台。 **基于寄存器架构的特点** * 典型的应用是x86的二进制指令集:比如传统的PC以及Android的Davlik虚拟机。 * **指令集架构则完全依赖硬件,可移植性差**。 * **性能优秀和执行更高效**。 * 花费更少的指令去完成一项操作。 * 在大部分情况下,基于寄存器架构的指令集往往都以一地址指令、二地址指令和三地址指令为主,而基于栈式架构的指令集却是以零地址指令为主 **举例1** 同样执行2+3这种逻辑操作,其指令分别如下: 基于栈的计算流程(以Java虚拟机为例): ~~~ 0: iconst_2 // 常量2入栈 1: istore_1 2: iconst_3 // 常量3入栈 3: istore_2 4: iload_1 5: iload_2 6: iadd // 常量2/3出栈,执行相加 7: istore_3 // 结果5入栈 8: return ~~~ 而基于寄存器的计算流程: ~~~ mov eax,2 //将eax寄存器的值设为1 add eax,3 //使eax寄存器的值加3 ~~~ 【知识点】 **由于跨平台性的设计,Java的指令都是根据栈来设计的**。不同平台CPU架构不同,所以不能设计为基于寄存器的。 栈的特点: * 跨平台性 * 指令集小 * 指令多 * 执行性能比寄存器差