1.0、JVM概览

Java 虚拟机简介

  • Java 虚拟机是一台执行 Java 字节码的虚拟计算机,它拥有独立的运算机制,器运行的Java字节码也未必是Java语言编译而成

  • JVM 平台的各种语言可以共享Java虚拟机带来的跨平台性、优秀的垃圾回收器,以及可靠的及时编译器。

  • Java 技术的核心就是Java虚拟机

功能:

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

特点:

一次编译,到处运行
自动内存管理
自动垃圾回收机制

JVM的位置

截屏2020-06-07上午1.19.35

截屏2020-06-07上午1.20.41

JVM 的整体结构

以HotSpot为例,它采用解释器与及时编译器并存的架构

截屏2020-06-07上午1.22.29

Java 代码执行流程

java程序–(编译)–>字节码文件–(解释执行)–>操作系统(Win,Linux,Mac JVM)

截屏2020-06-07上午1.24.28

JVM 架构模型

Java 编译器输入端指令是基于栈的指令集架构

基于栈架构的特点

  • 设计和实现更简单,适用于资源受限的系统
  • 避开寄存器的地址分配:使用零地址指令的方式
  • 指令流中的指令大部分是零地址指令,执行过程依赖于操作栈,指令集更小,编译容易实现
  • 不需要硬件支持,可移植性好

另一种指令集架构是基于寄存器的指令架构,有以下特点

  • X86的二进制指令集:例如PC 和安卓虚拟机Davlik
  • 指令集架构完全依赖硬件,可移植性查
  • 性能优秀,执行效率高
  • 指令消耗少
  • 指令集以一地址指令、二地址指令和三地址指令为主

JVM 声明周期

启动

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

执行

  • 一个运行中的java虚拟机有着一个清晰的任务:执行Java程序;
  • 程序开始执行的时候他才运行,程序结束时他就停止;
  • 执行一个所谓的Java程序的时候,真真正正在执行的是一个叫做Java虚拟机的进程。

退出

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

各类 JVM 的实现

SUN Classic VM

  • 1996年Java1.0 发布时使用的虚拟机,jdk1.4 时被完全淘汰
  • 现在hotspot 内置了此虚拟机
  • 只提供了解释器
  • 可以外挂JIT 编译器,单兼容性差

Exact VM

  • Exact Memory Management :准确式内存管理,虚拟机可以知道数据的类型
  • 能实现编辑器与解释器混合工作模式

HotSpot VM

  • JDK 1.3 时HotSpot成为默认虚拟机
  • SUN/Oracle JDK 和 Open JDK 用默认虚拟机
  • 从服务器、桌面到嵌入式都有应用
  • HotSpot 指的就是热点代码探测技术
    • 通过计数器找到最具编译价值的代码,处罚及时编译或栈上替换
    • 通过编译器和解释器的协同工作,在最优化的的程序响应和最佳执行性能中取得平衡

JRockit

  • 专注服服务器应用
    • 不关注程序启动,因此内部不包含解析器实现,全部代码都考及时编译器实现
  • 世界上最快的JVM,低延时,提供毫秒级的响应
  • MissionControl 套件,以一组极低消耗的来监控、管理和分析生产环境中的应用程序的工具
  • 2008年 ,BEA被Oracle收购,在JDK1.8 中与HotSpot 初步整合,在HotSpot的基础上移植了JRockit的优秀特性

IBM J9

  • 应用于IBM的各种Java产品,市场定位于HotSpot接近
  • 2017 年,IBM 发布开源了J9 VM ,命名为OpenJ9,由Eclipse 基金管理,也被成为 Eclipse OpenJ9

KVM & CDC/CLDC Hotspot

  • Oracke 在Java ME 产品线上的两款虚拟机为CDC/CLDC HotSpot Implementation VM
  • KVM 是早期CLDC-HI 早期产品
  • KVM 简单,轻量,高度可移植,面向更低端的设备上例如老人机,传感器等

Azul VM & BEA Liquid VM

  • Azul VM 和BEA Liquid Vm 是与特定平台绑定、软硬件配合的专有虚拟机

Apache Harmony

  • 由IBM 和?Intel 联合开发的虚拟机,由Apache推出,与jdk1.5 和jdk1.6 兼容
  • 因Sun的阻挠无法获取JCP,2011年退役
  • Java 类库代码吸纳进了安卓SDK

Microsoft JVM

  • 微软为了在IE3 中支持Java Applets 开发的
  • 只能在window平台下运行
  • 1997年,因侵权在window xp sp3 中移除

TaobaoJVM

  • 基于OpenJDK开发深度定制且开源的AlibabaJDK ,简称AJDK
  • 依赖intel 的cpu 兼容性差但是性能高
  • 已在天猫淘宝上线

Dalvik VM

  • 谷歌开发,基于Android,在2.2中提供了JIT
  • 只能称作虚拟机 不能称为java虚拟机,他没有遵循Java虚拟机规范
  • 基于寄存器架构,效率高,但是跟硬件耦合度比较高
  • 不能直接执行class文件,执行的是dex文件
  • 5.0使用支持提前编译的ART VM替换Dalvik VM

Graal VM

  • Oracle 2018年4月公开,口号 Run Programs Faster Anywhere.最可能替代HotSpot的产品
  • 在HotSpot基础上增强而成的跨语言虚拟机,包括Java、Scala、Groovy、Kotlin、C、C++ 、JS、Ruby、Python 等

常用调优工具

  • JDK命令行
  • Eclipse:Memory Analyzer Tool
  • Jconsole
  • VisualVM
  • Jprofiler
  • Java Flight Recorder
  • GCViewer
  • GC Easy
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值