JVM与Java体系结构

  • 一、Java及JVM虚拟机的简介:
    • Java生态圈:
      • 一个平台:Java虚拟机扮演着举足轻重的作用
      • 一种文化:Java几乎成为了“开源”的代名词
      • 一个社区:Java拥有全时间最多的技术拥护者和开源社区
    • Java是跨平台的语言
      • 字节码文件可以跨平台,不同的系统有不同的JVM
    • JVM跨语言的平台
      • JVM虚拟机的起始是字节码文件。

        JVM与Java体系结构_第1张图片

      • 不同的语言使用自己的编译器,编译出符合JVM规范的字节码文件,就可以在JVM上面运行。
      • 随着Java7的出现,开发者通过JSR-292规范实现了,在JVM上运行非Java语言编写的字节码文件
    • Java不是最强的语言,JVM是最强大的Java虚拟机
  • 二、Java在发展当中的重大事件
    • 2000年,JDK1.3发布,Java Hotspot Virtual Machine正式发布,成为Java的默认虚拟机
    • 2003年,Java平台的Scala正式发布,同年Groovy也加入了Java阵营
    • 2004年,JDK1.5发布,同时改名为JavaSE5.0(这是Java的里程碑式的发展,后面版本的新特性都是在5.0版本上发展的)
  • 三、虚拟机与Java虚拟机
    • 虚拟机:
      • 系统虚拟机
        • 完全对物理虚拟机的仿真(Visual Box、VMware),提供一个可运行完整操作系统的软件平台
      • 程序虚拟机
        • 专门为执行单个计算机程序而设计的(Java虚拟机)
        • 无论是系统虚拟机还是程序虚拟机,在上面运行的软件,都被限制于虚拟机提供的资源中
    • Java虚拟机
      • 执行Java字节码的虚拟计算机,拥有独立的运行机制,运行的Java字节码文件未必是用Java语言编写的
      • JVM平台的各种语言可以共享Java虚拟机带来的跨平台性、垃圾回收机制、可靠的即是编译器
      • Java技术的核心就是Java虚拟机
      • 作用
        • Java虚拟机就是二进制字节码文件的运行环境
      • 特点
        • 一次编译到处运行
        • 自动的内存管理
        • 自动垃圾回收机制
    • JVM的位置
      • JVM与Java体系结构_第2张图片

  • 四、JVM的整体结构
    • 需要熟练的掌握,可以画出图片

      JVM与Java体系结构_第3张图片

      • 多线程共享方法区和堆区
      • 每个线程有独一份的Java栈(虚拟机栈)、本地方法栈、程序计数器
  • 五、JVM的架构模型
    • 栈的指令集架构
      • 特点
        • 设计和实现简单,适用于资源受限的系统
        • 避开了寄存器的分配难题,使用零地址指令方式分配
        • 指令流中的指令大部分是零地址指令、其执行过程依赖于操作栈 ,指令集更小,但是指令多,操作系统更容易实现
        • 不需要硬件支持,可移植性更好,更好实现跨平台
    • 寄存器的指令集架构
      • 特点
        • 典型的指令是二进制的X86的二进制指令集:比如传统的PC以及Android的Davlike虚拟机
        • 指令集架构则完全依赖于硬件,可移植性差
        • 性能优秀和执行更高效
        • 花费更少的指令完成一项操作
        • 在大部分情况下,基于寄存器架构的指令集往往都以一地址指令,二地址指令和三地址指令为主。而基于栈架构的指令集则是以零地址指令为主。
        • 指令少
    • 问:为什么不将架构更换为基于寄存器的架构呢?
      • 基于栈架构的指令集架构更容易实现;在非资源受限的平台也可以使用,没有必要更换。
  • 六、JVM的生命周期
    • 虚拟机的启动
      • Java虚拟机的启动是通过引导类加载器创建一个初始类完成的。这个类是由虚拟机的具体实现指定的
    • 虚拟机的运行
      • 一个运行中的Java虚拟机有一个清晰的任务:执行Java程序
      • 程序开始运行时它才执行,程序结束时它就停止
      • 执行一个所谓的Java程序的时候,真真正正在执行的是一个叫做Java虚拟机的进程
    • 虚拟机的退出
      • 程序正常执行结束
      • 程序在执行过程中遇到了异常或错误而异常终止
      • 由于操作系统出现错误而导致Java虚拟机终止
      • 某线程调用了Runtime类或者System类的exit方法,或Runtime类的halt方法,并且Java安全管理器也允许了这次exit方法或halt方法
      • JNI规范描述了使用JNI Invocation API来加载或卸载Java虚拟机时,Java虚拟机的退出情况
  • 七、JVM发展历程
    • Sun classic VM
      • 世界上第一款商用的Java虚拟机,在JDK1.4之后被淘汰
      • 虚拟机的内部只提供了解释器
      • 如果使用JIT编译器,就需要外挂编译器,解释器与JIT编译器不能协同工作,只能一个工作
        • 如果过使用JIT程序就会将所有的字节码文件转化为机器指令,程序暂停一端时间
    • Exact VM
      • 可以知道内存中某个位置的数据具体是什么类型
      • 热点探测(高频出现的代码)
      • 编译器与解释器混合工作模式
    • Hotspot VM
      • JDK1.3是成为默认的虚拟机
      • 三大商用虚拟机之一
      • Hotspot名字指的就是热点代码探测
      • 通过计数器找到最具编译价值的代码,触发即是编译或栈上替换
      • 通过编译器与解释器协同工作,在最优的程序响应时间与最佳执行性能中找到平衡
    • JRockit
      • 三大商用虚拟机之一
      • 世界上最快的虚拟机
      • 专注于服务器端:不在乎服务的启动速度,因此不包含解释器,全部代码全靠即是编译器执行
      • 优势:全面的Java运行时解决方案组合
    • J9
      • 三大商用虚拟机之一
      • 也号称是最快的虚拟机(在IBM自己的产品中,运行在自己开发的其他产品中)
    • Azul 和 BEA Liquid
      • 与特定硬件平台绑定、软硬件配合的专有虚拟机
      • 高性能虚拟机中的战斗机

你可能感兴趣的:(JVM的学习笔记,jvm,java,开发语言)