每天学一点:java虚拟机4

虚拟机实现的核心都是他的执行引擎,使用指令集来定义
java虚拟机指令集的每种操作码都有助记符,使用汇编风格,使用javap可以查看class文件中方法的字节码助记符
虽然java虚拟机没有保存任意值的寄存器,但每个方法都有一个局部变量集合。
指令集实际的工作方式就是吧局部变量当做寄存器,用索引来访问,局部变量使用前,必须将它压入操作数栈;
平台无关性是影响指令集设计的最大因素,保证在很多平台体系结构上都很容易实现java虚拟机;
java以栈为中心设计指令集的另一个动机是,编译器一般采用以栈为基础的结构向连接器或优化器传递编译的中间结果;
java以栈为中心的体系结构可以讲运行时进行的优化工作于执行时即时编译或者自适应优化的执行引擎结合起来;
指令集设计的另一个目标是进行字节码验证能力,特别是使用数据分流器进行的一次性验证,java的安全框架需要这种验证能力。
在装载字节码的时候使用数据流分析器进行一次性验证,有助于提高速度。
自适应优化的虚拟机开始的时候对所有代码都是解释执行。
自适应优化计数使程序最终吧原来占80%--90%运行时间的代码变为极度优化的、静态链接的C++本地代码,使用的总内存数并不比全部解释java程序大多少。

猜你喜欢

转载自baoxiaofei.iteye.com/blog/2272204
今日推荐