深入理解Java虚拟机——01_JVM初识

7 篇文章 0 订阅

深入理解Java虚拟机系列

01_JVM初识

02_JVM类加载子系统

03_JVM运行时数据区初识

04_深入JVM与垃圾回收机制

JVM简介

1.JVM的位置

在这里插入图片描述

2.一些常见的JVM

在这里插入图片描述

使用JIT(编译器)能提升效率,但是程序刚运行时,因为要翻译成机器指令,加载到缓存会卡顿,暂停一下。

解释器和JIT可以理解为步行和乘公交车。解释器步行上班,JIT乘公交车上班(需要等公交,转车的时候等待,但是速度快)。

两个搭配使用,一会步行一会公交。

  • SUN Classic

    世界上第一款商用Java虚拟机,这款虚拟机只提供解释器,要想使用JIT编译器,需要使用外挂。但是一旦使用JIT,解释器就不再工作。解释器和编译器不能配合工作。

  • Exact VM

    编译器和解释器混合工作模式,后来都是这样

  • HotSpot VM :HotSpot指热点代码探测技术

  • BEA JRockit:(BEA 已被Oracle收购) 专注于服务端应用,世界最快的jvm之一

  • IBM J9

  • Taobao JVM: 目前已经在淘宝、天猫上线,替换了Oracle官方JVM;

  • Graal VM: Oracle 2018年4月公开,口号 Run Programs Faster Anywhere.最可能替代HotSpot的产品

3.Android虚拟机 DVM

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

4.JVM类加载机制

类加载:加载–>链接–>初始化

JVM 类加载机制分为五个部分:加载,验证,准备,解析,初始化

在这里插入图片描述

4.1.java代码执行流程

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

4.2.栈的指令集架构和寄存器的指令集架构

由于跨平台的设计,java的指令都是根据栈来设计的,不同平台CPU架构不同,所以不能设计为基于寄存器的
栈:跨平台性、指令集小、指令多;执行性比寄存器差
寄存器:指令少

4.3.jvm生命周期

4.3.1.启动

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

4.3.2.执行
  • 一个运行中的java虚拟机有着一个清晰的任务:执行Java程序;
  • 程序开始执行的时候他才运行,程序结束时他就停止;
  • 执行一个所谓的Java程序的时候,真真正正在执行的是一个叫做Java虚拟机的进程。
4.3.3.退出
  • 程序正常执行结束
  • 程序异常或错误而异常终止
  • 操作系统错误导致终止
  • 某线程调用Runtime类或System类的exit方法,或Runtime类的halt方法,并且java安全管理器也允许这次exit或halt操作
  • 除此之外,JNI规范描述了用JNI Invocation API来加载或卸载Java虚拟机时,Java虚拟机的退出情况
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值