当前位置: 首页 > news >正文

JVM结构、架构与生命周期总结

【1】JVM结构

不同厂商的JVM产品 :

厂商JVM
Oracle-SUNHotspot
OracleJRocket
IBMJ9 JVM
阿里Taobao JVM

HotSpot VM是目前市面上高性能虚拟机的代表作之一。它采用解释器与即时编译器并存的架构。

在今天,Java程序的运行性能早已脱胎换骨,已经达到了可以和C/C++程序一较高下的地步。
在这里插入图片描述
执行引擎包含三部分:解释器,及时编译器,垃圾回收器。

【2】java代码执行流程

在这里插入图片描述

【3】JVM架构模型

Java编译器输入的指令流基本上是一种基于栈的指令集架构,另外一种指令集架构则是基于寄存器的指令集架构。具体来说:这两种架构之间的区别:

基于栈式架构的特点

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

基于寄存器架构的特点

  • 典型的应用是x86的二进制指令集:比如传统的PC以及Android的Davlik虚拟机。
  • 指令集架构则完全依赖硬件,可移植性差
  • 性能优秀和执行更高效
    / 花费更少的指令去完成一项操作。

在大部分情况下,基于寄存器架构的指令集往往都以一地址指令、二地址指令和三地址指令为主,而基于栈式架构的指令集却是以零地址指令为主。

同样执行2+3这种逻辑操作,其指令分别如下。

基于栈的计算流程(以Java虚拟机为例):

iconst_2 //常量2入栈
istore_1
iconst_3 // 常量3入栈
istore_2
iload_1
iload_2
iadd //常量2/3出栈,执行相加
istore_0 // 结果5入栈

而基于寄存器的计算流程

mov eax,2 //将eax寄存器的值设为2
add eax,3 //使eax寄存器的值加3

由于跨平台性的设计,Java的指令都是根据栈来设计的。不同平台CPU架构不同,所以不能设计为基于寄存器的。优点是跨平台,指令集小,编译器容易实现,缺点是性能下降,实现同样的功能需要更多的指令。

【4】JVM生命周期

① 虚拟机的启动

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

② 虚拟机的执行

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

③ 虚拟机的退出

有如下的几种情况

  • 程序正常执行结束

  • 程序在执行过程中遇到了异常或错误而异常终止

  • 由于操作系统出现错误而导致Java虚拟机进程终止

  • 某线程调用Runtime类或system类的exit方法,或Runtime类的halt方法,并且Java安全管理器也允许这次exit或halt操作。

  • 除此之外,JNI(Java Native Interface)规范描述了用JNI Invocation API来加载或卸载 Java虚拟机时,Java虚拟机的退出情况。

【5】三大商用JVM

① HotSpot VM

HotSpot历史

  • 最初由一家名为“Longview Technologies”的小公司设计
  • 1997年,此公司被sun收购;2009年,Sun公司被甲骨文收购。
  • JDK1.3时,HotSpot VM成为默认虚拟机

目前Hotspot占有绝对的市场地位,称霸武林。

  • 不管是现在仍在广泛使用的JDK6,还是使用比例较多的JDK8中,默认的虚拟机都是HotSpot
  • Sun/oracle JDK和openJDK的默认虚拟机
  • 因此本课程中默认介绍的虚拟机都是HotSpot,相关机制也主要是指HotSpot的Gc机制。(比如其他两个商用虚机都没有方法区的概念)
  • 从服务器、桌面到移动端、嵌入式都有应用。

名称中的HotSpot指的就是它的热点代码探测技术。

  • 通过计数器找到最具编译价值代码,触发即时编译或栈上替换
  • 通过编译器与解释器协同工作,在最优化的程序响应时间与最佳执行性能中取得平衡

② BEA的JRockit

专注于服务器端应用

  • 它可以不太关注程序启动速度,因此JRockit内部不包含解析器实现,全部代码都靠即时编译器编译后执行。

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

  • 使用JRockit产品,客户已经体验到了显著的性能提高(一些超过了70%)和硬件成本的减少(达50%)。

优势:全面的Java运行时解决方案组合

  • JRockit面向延迟敏感型应用的解决方案JRockit Real Time提供以毫秒或微秒级的JVM响应时间,适合财务、军事指挥、电信网络的需要
  • MissionControl服务套件,它是一组以极低的开销来监控、管理和分析生产环境中的应用程序的工具。

2008年,BEA被oracle收购。

oracle表达了整合两大优秀虚拟机的工作,大致在JDK8中完成。整合的方式是在HotSpot的基础上,移植JRockit的优秀特性。

③ IBM的J9

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

市场定位与HotSpot接近,服务器端、桌面应用、嵌入式等多用途VM广泛用于IBM的各种Java产品。

目前,有影响力的三大商用虚拟机之一,也号称是世界上最快的Java虚拟机(其实只针对于IBM自身的产品)。

2017年左右,IBM发布了开源J9VM,命名为openJ9,交给EClipse基金会管理,也称为Eclipse OpenJ9

【6】未来展望Graal VM

2018年4月,oracle Labs公开了GraalvM,号称 “Run Programs Faster Anywhere”,勃勃野心。与1995年java的”write once,run anywhere"遥相呼应。

GraalVM在HotSpot VM基础上增强而成的跨语言全栈虚拟机,可以作为“任何语言” 的运行平台使用。语言包括:Java、Scala、Groovy、Kotlin;C、C++、Javascript、Ruby、Python、R等。

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

工作原理是将这些语言的源代码或源代码编译后的中间格式,通过解释器转换为能被Graal VM接受的中间表示。Graal VM提供Truffle工具集快速构建面向一种新语言的解释器。在运行时还能进行即时编译优化,获得比原生编译器更优秀的执行效率。

如果说HotSpot有一天真的被取代,Graal vm希望最大。但是Java的软件生态没有丝毫变化。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 探索 Python 的新世界:funcy 库的神奇之旅
  • git push -u origin main 和 git push origin main 的区别
  • 【数据集处理】dicom文件、albumentations库
  • 智能巡检机器人怎么选?
  • 图片转文字如何转换?简单的转换小妙招分享
  • 十七、Intellij IDEA2022.1.1下载、安装、激活
  • 【EI会议征稿】第四届高性能计算与通信工程国际学术会议(HPCCE 2024)
  • React三原理和路由
  • 对比:独立电压源和独立电流源,受控电源与独立电源
  • SQL Server 配置端口:一篇全面的指南
  • 贪心系列专题篇三
  • 【前端 16】使用Ajax发送异步请求
  • 【python】高数计算题难度大?python带你轻松拿下
  • docker部署elasticsearch和Kibana
  • JAVA读取netCdf文件并绘制热力图
  • JavaScript-如何实现克隆(clone)函数
  • SegmentFault for Android 3.0 发布
  • 【跃迁之路】【585天】程序员高效学习方法论探索系列(实验阶段342-2018.09.13)...
  • angular组件开发
  • git 常用命令
  • HTML-表单
  • Java IO学习笔记一
  • JAVA SE 6 GC调优笔记
  • Java多态
  • JDK 6和JDK 7中的substring()方法
  • Mybatis初体验
  • mysql常用命令汇总
  • October CMS - 快速入门 9 Images And Galleries
  • python_bomb----数据类型总结
  • SpringBoot几种定时任务的实现方式
  • 百度地图API标注+时间轴组件
  • 面试总结JavaScript篇
  • 前言-如何学习区块链
  • ​LeetCode解法汇总2696. 删除子串后的字符串最小长度
  • ​MPV,汽车产品里一个特殊品类的进化过程
  • #控制台大学课堂点名问题_课堂随机点名
  • #如何使用 Qt 5.6 在 Android 上启用 NFC
  • $jQuery 重写Alert样式方法
  • $分析了六十多年间100万字的政府工作报告,我看到了这样的变迁
  • (1)Jupyter Notebook 下载及安装
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第5节(封闭类和Final方法)
  • (libusb) usb口自动刷新
  • (笔试题)分解质因式
  • (附源码)ssm基于微信小程序的疫苗管理系统 毕业设计 092354
  • (函数)颠倒字符串顺序(C语言)
  • (接上一篇)前端弄一个变量实现点击次数在前端页面实时更新
  • (免费领源码)python+django+mysql线上兼职平台系统83320-计算机毕业设计项目选题推荐
  • (排序详解之 堆排序)
  • (轉貼) VS2005 快捷键 (初級) (.NET) (Visual Studio)
  • (最新)华为 2024 届秋招-硬件技术工程师-单板硬件开发—机试题—(共12套)(每套四十题)
  • .locked1、locked勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .NET Compact Framework 3.5 支持 WCF 的子集
  • .NET Core 项目指定SDK版本
  • .NET gRPC 和RESTful简单对比
  • .NET企业级应用架构设计系列之技术选型