zoukankan      html  css  js  c++  java
  • 执行引擎子系统——JVM之五

    一、JVM通过执行引擎来完成字节码的执行,在执行过程中JVM采用的是自己的一套指令系统,每个线程在创建后,都会产生一个程序计数器(pc)和栈(Stack)。

    pc:存放了下一条将要执行的指令;

    Stack:存放Stack Frame(栈帧),最上面的表示为当前正在执行的方法。每个方法的执行都会产生Stack Frame,Stack Frame中存放了传递给方法的参数、方法内的局部变量以及操作数栈;

    局部变量表:存放参数、局部变量;

    操作数栈:存放指令运算的中间结果;

    指令负责从操作数栈中弹出参与运算的操作数,指令执行完毕后再将计算结果压回到操作数栈;

    当方法执行完毕后则从Stack中弹出,继续其他方法的执行。

    在执行方法时JVM提供了invokestatic、invokevirtual、invokeinterface和invokespecial四种指令来执行

    (1)invokestatic:调用类的static方法

    (2) invokevirtual: 调用对象实例的方法

    (3) invokeinterface:将属性定义为接口来进行调用

    (4) invokespecial: JVM对于初始化对象(Java构造器的方法为:<init>)以及调用对象实例中的私有方法时。

    二、执行技术

    主要的执行技术有:解释,即时编译,自适应优化、芯片级直接执行

    (1)解释:属于第一代JVM;

    (2)即时编译:JIT属于第二代JVM;

    (3)自适应优化:(目前Sun的HotspotJVM采用这种技术)则吸取第一代JVM和第二代JVM的经验,采用两者结合的方式。开始对所有的 代码都采取解释执行的方式,并监视代码执行情况,然后对那些经常调用的方法启动一个后台线程,将其编译为本地代码,并进行仔细优化。若方法不再频繁使用, 则取消编译过的代码,仍对其进行解释执行;

    (4)芯片级直接执行:内嵌在芯片上,用本地方法执行Java字节码。

    想深入了解JVM内存分配,请结合 http://hllvm.group.iteye.com/group/wiki/3053-JVM 这篇文章

  • 相关阅读:
    梯度消失和梯度爆炸
    BN的作用与使用过程
    百面机器学习笔记(二)
    正则表达式
    CSS Sprite
    事件绑定
    拖拽
    oncontextmenu
    鼠标跟随
    鼠标事件
  • 原文地址:https://www.cnblogs.com/muffe/p/3541645.html
Copyright © 2011-2022 走看看