JVM上篇:JVM与Java体系结构

JVM笔记

JVM传言

Java不是最强大的语言,但是JVM是最强大的虚拟机

虚拟机分类

  1. 系统虚拟机

    类似VMware,就属于系统虚拟机,它提供了一个可运行完整操作系统的平台

  2. 程序虚拟机

    Java虚拟机,它专门为执行单个计算程序而设计,在JVM中执行的指令称为Java字节码指令

JVM作用

Java虚拟机就是二进制字节码的运行环境,负责装载字节码到其内部,解释/编译为对应平台上的机器执行执行。

JVM的特点

  1. write ones,run Anywhere!
  2. 自动内存管理
  3. 自动垃圾回收功能

JVM的位置

image-20220213110801124

JVM整体的结构(HotSpot虚拟机)

image-20220213113316979

JAVA程序的执行流程

image-20220213113837134

JIT编译器

主要负责将热点代码(即重复运行的代码,把它直接编译为机器指令)

JVM的架构模型

Java编译器输入的指令流基本上上是一种基于的指令集架构。另外一种指令集架构则是基于寄存器的指令集架构。

两种架构的区别:

  1. 基于栈的架构
    • 设计实现简单,适用于资源受限的系统
    • 避开了寄存器分配的难题:使用零地址指令方式分配
    • 指令流中的指令大部分是零地址指令,其执行过程依赖于操作栈,指令集更小,编译器容易实现。
    • 栈是内存的一部分,不需要其他硬件的支持,可移植性好,跨平台性好

栈和寄存器

  • 内存是CPU和硬盘之间的通道
  • 内存如同一个仓库,堆,栈是仓库中开辟的一个规则有序的仓库区,而寄存器就是生产线上的一个容器
  • 堆,栈是属于内存区的一部分,堆,栈是内存中的一种数据结构
  • 而寄存器则是CPU中的一部分。寄存器是CPU的存储器.速度快

JVM的生命周期

  1. 启动

    Java虚拟机的启动是通过引导类加载器(bootstrap class loader)创建一个初始的类(initial class)来完成的。

  2. 虚拟机的执行

    1. 一个运行中的Java虚拟机有一个清晰的任务:执行Java程序
    2. 程序开始JVM开始运行,程序结束,JVM也随之结束
    3. 执行一个所谓的Java程序的时候,真真正正执行的是一个Java虚拟机的进程
  3. 退出

    1. 程序正常退出
    2. 程序在执行过程中遇到异常或错误
    3. 操作系统错误,导致java虚拟机进程终止
    4. 某线程调用System.exit()方法退出

JVM发展历程

java1.0 -> Sun Classic VM

1.1996年java1.0版本,sun公司发布了Sun Classic VM这个虚拟机,它是世界上第一款商用的Java虚拟机,jdk1.4被淘汰。

2.这款虚拟机的内部只提供解释器

3.可以外挂JIT编译器,但是解释器和编译器无法同时工作

4.现在的Hotspot内置了Sun Classic VM虚拟机

​ 解释器和编译器:

​ 1.解释器:逐行解释字节码为机器指令,逐行执行

​ 2.编译器:遇到重复性执行的代码,编译器可将其直接编译为机器指令,并缓存起来,用来重复使用

java1.2 -> Sun Exact VM

1.虚拟机可以知道内存中某个位置的数据具体是什么类型

2.编译器和解释器混合工作模式

3.只在solaris平台被短暂使用,后被hotspot虚拟机替换

java1.3 -> HotSpot VM

1.此虚拟机最初由Longview Technologiew公司设计,1997年被sun收购,2009年sun被orical收购。

2.jdk1.3时,HotSpot称为默认的虚拟机

3.名称中的HotSpot指的就是它的热点代码探测技术,通过计数器找到最具有编译价值的代码,触发即时编译或者栈上替换

4.通过编译器和解释器协同工作,更高效的运行代码

5.每个端都适用

(Oracle)BEA JRockit

1.专注于服务器端的应用,因此JRockit内部不包含解释器的实现,全部代码都考即时编译器编译后执行。

2.大量行业基准测试显示,JRockit JVM是世界上最快的JVM。

3.优势:面向演示敏感型应用的解决方案JRockit Real Time,适合财务,军事

4.MissionControl服务套件,它是一组以极低的开销来监控,管理,和分析生产环境中的应用程序的工具

5.Orcale收购了BEA,整合了两大优秀虚拟机有点,大致在JDK8中完成,整合的方式是在HotSpot的基础上,一直JRockit的优秀特性。

IBM J9

1.全称:IBM Technology for Java Virtual Machine 简称IT4J,内部代号J9

2.市场定位与HotSpot接近,服务端、桌面应用,嵌入式等多用途

3.广泛用于IBM的各种JAVA产品

4.目前,有影响力的三大商用虚拟机之一,也号称是世界上最快的Java虚拟机

5.2017年左右,IBM发布了开源J9 VM,命名为OpenJ9,交给Eclipse基金会管理,也称为Eclipse OpenJ9

KVM和CDC/DLDC HotSpot

1.Orcale在 Java ME产品线上的两款虚拟机

2.市场定位比较尴尬,智能收集被ios和Android二分天下

Azul VM and BEA Liquid VM

1.前面三大虚拟机,使用在通用的硬件平台上

2.Azul VM 和BEA Liquid VM是与特定的硬件平台绑定,软硬件配合使用的,配合起来特别猛

TaobaoJVM

1.由AliJVM 团队发布。 介于openJDK 开发了自己的定制版本AlibabaJDK,简称AJDK

2.是国内发布的第一个优化,深度定制且开源的高性能服务器版Java虚拟机。

3.创新的GCIH(gc invisble heab)技术实现了off-heap,即将生命周期较长的Java对象从heap中移到heap外,并且GC不能管理GCIH内部的Java对象,以此达到降低GC的回收频率和提升GC的回收效率的目的。

4.GCIH 中的对象还能在多个Java虚拟机进程中实现共享

5.使用Crc32 指令实现JVM intrinsic ,降低JNI 的调用开销

6.针对大数据场景的ZenGC

7.已在淘宝,天猫上线

Dalvik VM

1.由谷歌开发,但是只能称为虚拟机,而不能叫JVM,因为他虽然是使用java语言开发,但是不能直接执行Java的class文件。

2.基于寄存器架构,不是基于栈

3.执行的是编译以后的dex文件,执行效率比较高,适用于Android系统。

4.找一个apk文件,后缀改为zip,可以在电脑里直接解压,进去看到代码结构应该均为dex

2018.4 -> Graal VM

1.由Oracle Labs公开了Graal VM。号称 Run Programs Faster Anywhere

2.在HotSpot的基础上增强而成的跨语言全栈虚拟机,可以作为任意语言的运行平台使用,语言包括Java,Scala,Groovy,Kotlin,c,c++,JS,Ruby,Python,R

3.支持不同语言混用对方的接口和对象,支持这些语言使用已经编写好的本地库文件

posted @ 2022-03-08 20:05  范育萍  阅读(37)  评论(0编辑  收藏  举报