JVM的整体结构及发展历程

JVM

java是跨平台的语言,jvm是跨语言的平台
JVM的整体结构及发展历程_第1张图片
JVM的整体结构及发展历程_第2张图片
java虚拟机就是二进制字节码的运行环境,负责装载字节码到其内部,解释/编译为对应平台上的机器指令执行,每一条Java指令,Java虚拟机规范中都有详细定义,如怎么取操作数,怎么处理操作数,处理结果放在哪里。

特点:

  • 一次编译,到处运行
  • 自动内存管理
  • 自动垃圾回收功能

JVM的位置

JVM的整体结构及发展历程_第3张图片

java代码的执行流程

JVM的整体结构及发展历程_第4张图片

JVM的整体结构

JVM的整体结构及发展历程_第5张图片

JVM的架构模型

java的编译器是基于栈的指令集架构

和基于寄存器架构相比:

指令集小,指令多,可移植性更好,跨平台性,执行性能比寄存器差

JVM的生命周期

虚拟机的启动

java虚拟机的启动是通过引导类加载器创建一个初始类来完成,这个类是由虚拟机的具体实现指定的

虚拟机的执行

  • 程序开始执行时他才运行,程序结束时他就停止
  • 执行一个所谓的java程序 的时候,真正正正在执行的是一个叫做java虚拟机的进程。

虚拟机的退出

  • 程序正常执行结束
  • 程序在执行过程中遇到了异常或错误而异常终止
  • 由于操作系统的出现错误而导致java虚拟机进程终止
  • 某线程调用Runtime或System类的exit,或Runtime类的halt方法,并且Java安全管理器也允许这次exit或halt操作
  • 除此之外,JNI规范描述了用Invocation API来加载或卸载Java虚拟机时,Java虚拟机的退出情况

JVM的发展历程

Sun Classic VM

  • 世界上第一款商用Java虚拟机,JDK1.4时完全被淘汰

  • 只提供了解释器

  • 如果外挂JIT,解释器就不再工作,JIT会接管虚拟机的执行系统

  • 现在hotspot内置了此虚拟机

    解释器:逐行解释字节码,遇见热点代码也会翻来覆去的解释,效率低

    JIT(即时编译器):寻找热点代码,编译成本地机器指令缓存到方法区的CodeCache

    不能一味的使用JIT,把所有字节码都编译成本地机器码需要时间,导致暂停时间就有点长,程序刚开始启动会有卡顿。应该相结合使用

Exact VM

  • jdk1.2出现
  • 虚拟机可以知道内存中某个位置的数据具体是什么类型
  • 热点探测(雏形)
  • 编译器和解释器混合工作(雏形)

Sun的HotSpot VM

  • jdk1.3出现
  • oracle收购
  • 默认虚拟机
  • 热点代码探测技术
    • 通过计数器找到最具编译价值代码,出发即时编译或栈上替换
    • 通过编译器与解释器协同工作,在最优化的程序响应时间(解释器)与最佳执行性能(编译器)取得平衡

BEA的JRockit

  • oracle收购

  • 专注于服务器应用

    • 没有解释器,只有编译器

IBM的J9

  • 三大商用虚拟机之一

你可能感兴趣的:(jvm,java,jvm)