01 JVM 概述与发展

目录

由于跨平台性的设计, Java的指令都根据栈来设计的. 

JVM的生命周期

启动

执行

退出

JVM发展历程

Sun Classic VM

Exact VM

Hotspot VM

JRockit

J9

TaobaoJVM

Graal VM


  1. 由于跨平台性的设计, Java的指令都根据栈来设计的. 

    1. 不同平台的CPU架构不同, 所以不能设计为基于寄存器的.
      1. 只使用了一个寄存器, 程序计数寄存器PC
    2. 优点是: 跨平台, 指令集小, 指令多
    3. 缺点是: 相比寄存要差一些
  2. JVM的生命周期

    1. 启动

      1. Java虚拟机的启动是通过引导类加载器(bootstrap class loader)创建一个初始类(initial class)来完成的, 这个类是由虚拟机的具体实现指定的
    2. 执行

      1. 程序开始执行时他才执行, 程序结束时他就停止
      2. 执行一个所谓的Java程序时, 真真正正在执行的是以个Java虚拟机的进程
    3. 退出

      1. 指令 jps
        1. 打印当前正在执行中的进程
      2. 程序正常执行结束
      3. 程序出现异常提前结束
      4. 操作系统出现错误
      5. 在程序中调用了Runtime类或System类的exit方法
        1. 运行时数据区(Runtime Data Area)对应的就是Runtime这个类
        2. Runtime是单例的
  3. JVM发展历程

    1. Sun Classic VM

      1. Sun公司的
      2. 第一款商用虚拟机
      3. JDK1.4时被淘汰
      4. 虚拟机内部只提供了解释器
        1. 也可以使用JIT即时编译器, 但是JIT不能和解释器一起使用
    2. Exact VM

      1. Sun公司的
      2. JDK1.2提出
      3. 准确式内存管理
      4. 热点探测
        1. 可以识别出哪些代码是热点代码
      5. 支持编译器解释器混合工作模式
      6. 后被Hotspot取代
    3. Hotspot VM

      1. Sun公司的
      2. 主流商用虚拟机
      3. JDK1.3推出
      4. 名字中的HotSpot指的就是他的热点代码探测技术
        1. 通过程序计数器找到最具编译价值的代码, 出发及时编译或栈上替换
        2. 通过编译器与解释器的协同工作, 在最优化的程序响应时间与最佳执行性能中取得平衡
    4. JRockit

      1. BEA公司的
      2. 主流商用虚拟机
      3. 专注于服务器端的应用
        1. 他可以不关注程序的启动速度, 因此JRockit内部不包含解析器的实现, 全部的代码都靠即时编译器编译后执行
      4. 是世界上最快的JVM
      5. JDK1.8时, Oracle将JRockit的特性整合到HotSpot上面了
    5. J9

      1. IBM公司的
      2. 主流商用虚拟机
      3. 应用于IBM自己的产品时执行的速度是很快的
    6. TaobaoJVM

      1. 基于OpenJDK HotSpot VM深度定制的
      2. 性能更好, 但是仅限于阿里自己的产品, 硬件耦合度高, 严重依赖Intel的CPU
    7. Graal VM

      1. 最有潜力取代HotSpot的虚拟机

你可能感兴趣的:(JVM)