JVM结构、架构与生命周期总结
【1】JVM结构
不同厂商的JVM产品 :
厂商 | JVM |
---|---|
Oracle-SUN | Hotspot |
Oracle | JRocket |
IBM | J9 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的软件生态没有丝毫变化。
相关文章:
JVM结构、架构与生命周期总结
【1】JVM结构 不同厂商的JVM产品 : 厂商JVMOracle-SUNHotspotOracleJRocketIBMJ9 JVM阿里Taobao JVM HotSpot VM是目前市面上高性能虚拟机的代表作之一。它采用解释器与即时编译器并存的架构。 在今天,Java程序的运行性能早已脱胎换骨,已…...
Flink-StarRocks详解:第四部分StarRocks分区管理,数据压缩(第54天)
文章目录 前言2.3.3 管理分区2.3.3.1 增加分区2.3.3.2 删除分区2.3.3.3 恢复分区2.3.3.4 查看分区 2.3.4 设置分桶2.3.4.1 随机分桶(自 v3.1)2.3.4.2 哈希分桶2.3.4.2.1 优点2.3.4.2.2 如何选择分桶键2.3.4.2.3 注意事项 2.3.4.3 确定分桶数量 2.3.5 最佳…...
为什么有时候银行贷款审核会查大数据信用?
在申请银行贷款时,不少人会疑惑为何银行会深入审查申请人的大数据信用信息。这背后,其实是银行风险控制与精准决策的体现。 首先,大数据信用信用能全面反映申请人的信用状况 它不仅仅局限于传统的征信报告,还涵盖了消费行为、社交…...
LoRa无线通讯,让光伏机器人实现无“线”管理
光伏清洁机器人,作为光伏电站运维的新兴关键设备,已跃升为继组件、支架、光伏逆变器之后的第四大核心组件,正逐步成为光伏电站的标准配置。鉴于光伏电站普遍坐落于偏远无人区或地形复杂之地,光伏清洁机器人必须具备远程操控能力、…...
买流量卡要注意什么,这些冷知识你一定要懂!
买流量卡要注意什么?别总盯着价格看,还有一些隐形的冷知识得了解一下,今天这篇文章就是要告诉你一些流量卡中隐藏的冷知识。 一、首先,那些月租9元、19元的流量卡,大概率都是短期卡,虽然他们的资费便宜&a…...
【嵌入式】STM3212864点阵屏使用SimpleGUI单色屏接口库——(2)精简字库
一 开源库简介与移植 最近一个项目需要用12864屏幕呈现一组较为复杂的菜单界面,本着不重复造轮子的原则找到了SimpleGUI开源库。 开源地址:SimpleGUI: 一个面向单色显示屏的开源GUI接口库。 SimpleGUI是一款针对单色显示屏设计的接口库。相比于传统的GUI…...
《计算机网络》(第8版)第1章 概述 复习笔记
第 1 章 概述 一、计算机网络在信息时代中的作用 计算机网络的两个重要功能: 1 .连通性 指互联网上的用户之间是相互连通的。 2 .共享(资源共享) 资源共享可以是信息共享、软件共享,也可以是硬件共享。此…...
银行数据质量保障体系建设实践
引言 在数字化转型浪潮中,数据中台成为企业实现数据驱动决策的关键支撑。它不仅整合了企业内外部的数据资源,还通过数据共享与复用,提升了运营效率和业务创新能力。然而,随着数据量的激增和数据来源的多样化,如何确保…...
笔记小结:《利用Python进行数据分析》二进制数据格式存储与web交互
提示:此节内容仅作了解即可 目录 二进制数据格式 使用HDF5 读取Microsoft Excel文件 二进制数据格式 实现数据的高效二进制格式存储最简单的办法之一是使用Python内置的pickle序列化。 Python 的 pickle 模块是一个用于序列化和反序列化 Python 对象结构的模块…...
电脑桌面图标变白了?3个方法20秒钟轻松解
电脑桌面图标变白了?3个方法20秒钟轻松解 ⚠️电脑桌面图标变白了,3种方法轻松解决 🚸方法一和方法二属于治标不治本的解决方法,但操作较为简单,在不同情况下有不成功的可能,方法三相对复杂一些,…...
数据治理,管什么?
元数据(Metadata):通俗地说就是描述数据的数据,比如数据的名称、属性、分类、字段信息、大小、标签等等。要做好数据的管理,元数据起到了举足轻重的作用。 参考数据(Reference Data)࿱…...
【前端】JavaScript入门及实战121-125
文章目录 121 滚轮事件122 键盘事件123 键盘移动div124 BOM125 History 121 滚轮事件 <!DOCTYPE html> <html> <head> <title></title> <meta charset "utf-8"> <style type"text/css">#box1 {width: 100px;h…...
pytest测试框架之http协议接口测试
1 接口测试 日常测试中接口测试是一项重要的工作,尤其是http协议的接口测试更加普遍,比如一些常用的测试框架或者工具(robotframework框架,testng框架,postman等)都支持http接口的测试,而这节内容主要介绍…...
FFmpeg源码:av_gcd函数分析
一、引言 公约数,是一个能同时整除几个整数的数。如果一个整数同时是几个整数的约数,称这个整数为它们的“公约数”;公约数中最大的称为最大公约数。对任意的若干个正整数,1总是它们的公约数。 公约数与公倍数相反,就…...
springboot物流寄查系统-计算机毕业设计源码95192
目 录 1 绪论 1.1 研究背景 1.2选题背景 1.3论文结构与章节安排 2 springboot物流寄查系统系统分析 2.1 可行性分析 2.1.1 技术可行性分析 2.1.2 经济可行性分析 2.1.3 法律可行性分析 2.2 系统功能分析 2.2.1 功能性分析 2.2.2 非功能性分析 2.3 系统用例分析 2…...
【秋招笔试】24-07-27-OPPO-秋招笔试题(算法岗)
🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 💻 ACM金牌团队🏅️ | 多次AK大厂笔试 | 编程一对一辅导 ✨ 本系列打算持续跟新 秋招笔试题 👏 感谢大家的订阅➕ 和 喜欢💗 和 手里的小花花🌸 ✨ 笔试合集传送们 -> 🧷春秋招笔试合集 💡 第一题贪心模拟…...
AUTOSAR实战教程 - 模式管理BswM与其他各模块的交互
近日驻厂某OEM,幸得大块的个人时间, 把BswM这一块的内容从ETAS/ISOLAR工具配置到代码实现做了一个全方位的CT. 2024,希望孜孜内卷的汽车人升职加薪! 博主近期写的一首小诗,也一并送给大家,懂的都懂: 在看不到阳光的冬天/ 我染了风寒/ 白天点灯/ 晚上吃药/ 躺在被窝里才敢…...
经典非比较排序—计数排序的Java实现方式
目录 1.具体思路: 2.代码实现: 3.代码分析 4.示例测试: 测试源码: 测试结果: 计数排序,又被称为鸽巢原理,属于桶排序的一种,其本质是通过哈希映射思想,设定计数数组输入以…...
【C++从小白到大牛】栈和队列(优先级队列)
目录 引言: 使用方法篇: stack: queue priority_queue 使用方法: 模拟实现篇: stack: 原码: queue 原码: priority_queue 插入和删除数据的思想: 仿函数实…...
Golang之OpenGL(一)
使用OpenGL实现窗口中绘制三角形(纯色|彩色)、正方形(变色) 一、简单实现窗口绘制三角形二、绘制的多颜色三角形(基于 ‘ 简单实现窗口绘制三角形 ’ )1、在顶点着色器和片段着色器中添加了颜色的输入和输出…...
122. Go反射中与结构体相关的常用方法与应用
文章目录 encoding/jsonreflect 简介reflect.Value 常用方法reflect.Type 常用方法 应用一:使用 reflect 实现 encoding/json序列化反序列化 应用二:使用Tag实现字段级别的访问控制tag 行为自定义案例:结构体字段访问控制 总结 在使用 Go 语言…...
Java入门、进阶、强化、扩展、知识体系完善等知识点学习、性能优化、源码分析专栏分享
场景 作为一名Java开发者,势必经历过从入门到自学、从基础到进阶、从学习到强化的过程。 当经历过几年企业级开发的磨炼,再回头看之前的开发过程、成长阶段发现确实是走了好多的弯路。 作为一名终身学习的信奉者,秉承Java体系需持续学习、…...
Spring-bean销毁
bean销毁(找到销毁的bean) 在bean的声明周期中,存在一个记录bean销毁方法的阶段,以备于spring关闭的时候可以执行bean的销毁方法(单例bean) v1.0 registerDisposableBeanIfNecessary protected void registerDisposableBeanIfNec…...
【4】BlazorUI库
【4】BlazorUI库 一、Blazorise二、Ant Design Blazor三、Radzen Blazo四、Radzen Blazo 一、Blazorise Blazorise Blazorise 是一个广泛使用的 UI 框架,提供了丰富的组件库和多个主题支持,如 Bootstrap、Bulma、Material 和 AntDesign。 二、Ant Desig…...
树与二叉树【下】
目录 三. 哈夫曼树3.1 带权路径长度3.2 哈夫曼树的定义3.3 哈夫曼树的构造3.4 哈夫曼编码(经常考察) 四. 并查集4.1 如何表示“集合”关系?4.2 “并查集”的代码实现4.3 “并查集”的优化4.4 “并查集”的进一步优化 \quad 三. 哈夫曼树 \qua…...
ElementPlus 中el-select自定义指令实现触底加载请求options数据
1) 背景: 老项目翻新时,发现一个下拉框数据非常多,客户呢,希望全部数据一起展示,意思就是全部数据一起返回给前端用于展示。但这会造成明显的卡顿。~~明显的不合理! QAQ!~~ 于是压力给到前端,查询资料,各种…...
基于Selenium实现操作网页及操作windows桌面应用
Selenium操作Web页面 Why? 通常情况下,网络安全相关领域,更多是偏重于协议和通信。但是,如果协议通信过程被加密或者无法了解其协议构成,是无法直接通过协议进行处理。此时,可以考虑模拟UI操作,进而实现相…...
科普文:linux系列之操作系统内存管理简介
概叙 操作系统内存管理是计算机系统中的核心技术之一,页式管理、段式管理和段页式管理各有优缺点。页式管理通过固定大小的页框减少了外部碎片,但可能导致内部碎片;段式管理符合程序逻辑,提供了灵活的内存保护,但可能…...
【已解决】关于MyBatis的collection集合中只能取到一条数据的问题
一、问题 在涉及多表查询的时候,使用collection元素来映射集合属性时,出现了只能查询到一条数据的情况,但用sql语句在数据库中查询会有多条记录。 二、原因 如果两表联查,主表和明细表的主键都是id的话,明细表的多条…...
前端的学习-CSS(弹性布局-flex)
一:什么是弹性布局-Flex flex 是 Flexible Box 的缩写,意为"弹性布局",用来为盒状模型提供最大的灵活性。 语法: .box{display: flex; } .box{display: inline-flex; } 注意,设为 Flex 布局以后࿰…...
点击图片预览 wordpress/郑州seo网站排名
目前智能顾问已掌握大量资产,第一个以人工智能驱动的基金Rebellion曾成功预测了2008年股市崩盘,并在2009年给希腊债券F评级,而当时惠誉的评级仍然为A,通过人工智能,Rebellion比官方降级提前一个月;掌管900亿…...
手机网页游戏排行榜2021前十名/杭州优化公司多少钱
参加过校招的同学,应该对外包有一定的了解了。基本上我们听过的企业都有外包岗,很多同学也在校招的过程中拿到过外包offer。 现在很多大型公司为了节省成本,将一些偏重劳动量,而非技术量的工作,都选择外包给第三方公司来做,这就导致了现在外包公司发展越来越兴。如果接到…...
丹东网站推广/扬州seo优化
6月19日,计算机科学与技术学院安弈棋社通过线上比赛的形式举办了海报设计大赛。此次活动由社团负责人郭然主持举办,社团骨干成员以及在到梦空间报名的所有同学参加。活动伊始,同学们首先进入此次活动的QQ群,安弈棋社的活动负责人在…...
镇江推广公司/四川seo技术培训
创建 Spry 数据集 目录 创建 Spry HTML 数据集 创建 Spry XML 数据集 为数据集选择布局 动态表格布局 主/详细布局 堆积容器布局 带有聚光灯区域的堆积容器布局 不要插入 HTML 编辑数据集 使用设计时输入功能 关于 Spry 数据选择器 …...
wordpress商品列表对比插件/舆情监测系统排名
过滤器 在vue2.x中允许自定义过滤器,可被用于一些常见的文本格式化。过滤器可以用在两个地方:双花括号插值和 v-bind 表达式 (后者从 2.1.0 开始支持)。过滤器应该被添加在 JavaScript 表达式的尾部,由“管道”符号指示: <!-…...
重庆网站建设网站制作/武汉seo楚天
1. 编译单元,一个.cc,或.cpp作为一个编译单元.生成.o 2. 普通数据类型的定义,声明,函数的定义声明(类函数是一样的) extern int x; //变量是声明,并未实际分配地址,未产生实际目标代码void pr…...