指令用于将一个短整型大小的常数值(-32768到32767)推送到操作数栈中 。它的操作码为0x11,后面跟着一个16位有符号整数表示要推送的常数值 。
这两个指令常用于编写Java字节码,而不是直接编写Java源代码 。在Java编译器将源代码编译成字节码时,常量值会被推送到操作数栈中,这些指令在这个过程中被使用 。
是Java字节码指令之一,用于将整数常量-1推送到操作数栈中 。
Java虚拟机提供了一组特殊的指令,可以将整数常量-1到5快速地推送到操作数栈中,其中包括、、、、、和 。
的操作码为0x02,表示将整数常量-1推送到操作数栈中 。其他常量指令的操作码和作用也类似 。
这些常量指令可以提高Java字节码的执行效率,因为它们比使用或指令更短,执行速度也更快 。
如果要将浮点数常量推送到操作数栈中,可以使用fconst_0、fconst_1和fconst_2指令,分别用于将浮点数常量0.0、1.0和2.0推送到操作数栈中 。如果要将长整数常量推送到操作数栈中,可以使用lconst_0和lconst_1指令,分别用于将长整数常量0和1推送到操作数栈中 。如果要将双精度浮点数常量推送到操作数栈中,可以使用dconst_0和dconst_1指令,分别用于将双精度浮点数常量0.0和1.0推送到操作数栈中 。如果要将字符串常量推送到操作数栈中,可以使用ldc指令,该指令需要一个常量池索引作为参数,该索引指向一个字符串常量在常量池中的位置 。需要注意的是,每种类型的常量指令都只能用于将特定类型的常量推送到操作数栈中,不能将其他类型的常量使用这些指令推送到操作数栈中 。
8.3、总结
由于跨平台性的设计,Java的指令都是根据栈来设计的 。不同平台CPU架构不同,所以不能设计为基于寄存器的 。优点是跨平台,指令集小,编译器容易实现,缺点是性能下降,实现同样的功能需要更多的指令 。
时至今日,尽管嵌入式平台己经不是Java程序的主流运行平台了(准确来说应该是的宿主环境已经不局限于嵌入式平台了),那么为什么不将
架构更换为基于寄存器的架构呢?
将架构更换为基于寄存器的架构并不一定是最优的选择,因为:1. 兼容性问题:现有的Java程序都是基于栈式架构的虚拟机运行的,如果要将架构更换为基于寄存器的架构,需要重新编写和调整Java程序,这会带来很大的兼容性问题 。2. 硬件成本问题:基于寄存器的架构需要更多的寄存器,这会增加硬件成本 。此外,基于寄存器的架构需要更多的硬件支持,比如更复杂的指令集和更高的性能要求,这也会增加硬件成本 。3. 性能问题:尽管基于寄存器的架构可以提高一些性能指标,但是在某些情况下,栈式架构的虚拟机也可以达到很高的性能水平 。此外,现在的硬件技术和虚拟机优化技术也可以在栈式架构下实现很高的性能 。综上所述,将架构更换为基于寄存器的架构并不一定是最优的选择,而现有的栈式架构的虚拟机已经可以在嵌入式平台上运行得很好了 。
栈:跨平台性、指令集小、指令多;执行性能比寄存器差
9、JVM的生命周期 9.1、虚拟机的启动
Java虚拟机的启动是通过引导类加载器( class )创建一个初始类( class)来完成的,这个类是由虚拟机的具体实现指定的 。
9.2、虚拟机的执行9.3、虚拟机的退出
有如下的几种情况:
10、JVM的发展历程 10.1、SunVM
早在1996年Java1.0版本的时候,Sun公司发布了一款名为 VM的Java虚拟机,它同时也是世界上第一款商用Java虚拟机,JDK1.4时完全被淘汰 。
这款虚拟机内部只提供解释器 。
- 梁文道:这是做读书节目以来,最想给观众介绍的一本书 中国十大禁书剪灯夜话
- 世界级都市排行榜:纽约、洛杉矶领衔,上海、北京崭露头角 世界十大地标建筑
- 世界上最高的两座电视塔,一座在日本,一座在中国,你说哪座好看 世界十大电视塔
- 国内排不上名的大学,被美国制裁后,一举成为世界名校 中国十大名气下降大学
- 行业第一!八马茶业登顶2023中国顾客满意度指数榜首 中国十大茶叶连锁店
- 盘点身价过亿的10位女明星:一个比一个有钱,你知道几个? 中国最富的十大女明星
- 马云被四部门联合约谈 双十一红包每天三次怎么领
- 近期超火的5款免费APP,你都用过哪一款? 免费下载中国之最伴奏
- 忻州长城:四项全国第一、十项全国唯一! 中国之最长城排名
- 它是中国西部第一条商业步行街,街上有这么一座地标,必须瞻仰 中国之最步行街