HotSpot VM

HotSpot VM 是 Sun JDK 和 OpenJDK 中所带的虚拟机,也是目前使用范围最广的 Java 虚拟机。它在 Java 技术中起着至关重要的作用,其历史可追溯至 1997 年 Sun 公司收购设计它的 “Longview Technologies” 小公司。HotSpot VM 最初并非为 Java 语言开发,而是来源于 Strongtalk VM,而 Strongtalk VM 中的许多技术又源于一款支持 Self 语言实现 “达到 C 语言 50% 以上执行效率” 目标的虚拟机。HotSpot VM 一开始就是准确式 GC,其名称中的 HotSpot 指的是热点代码探测技术。该技术可以通过执行计数器找出最具有编译价值的代码,然后通知 JIT 编译器以方法为单位进行编译。如果一个方法被频繁调用,或方法中有效循环次数很多,将会分别触发标准编译和 OSR(栈上替换)编译动作。

HotSpot VM 的核心代码包括多个模块,如 adlc(平台描述文件编译器)、asm(汇编器接口)、c1(client 编译器)、ci(动态编译器的公共服务)、classfile(类文件的处理)、code(动态生成的代码的管理)、compiler(从 VM 调用动态编译器的接口)、gc_implementation(GC 的实现,包括 concurrentMarkSweep、g1、parallelScavenge、parNew、shared 等)、gc_interface(GC 接口)、interpreter(解释器,包括模板解释器和 C++ 解释器)、libadt(一些抽象数据结构)、memory(内存管理相关)、oops(HotSpot VM 的对象系统的实现)、opto(server 编译器)、precompiled、prims(HotSpot VM 的对外接口,包括部分标准库的 native 部分和 JVMTI 实现)、runtime(运行时支持库,包括线程管理、编译器调度、锁、反射等)、services(主要是用来支持 JMX 之类的管理功能的接口)、shark(基于 LLVM 的 JIT 编译器,官方版未使用)、trace 和 utilities(一些基本的工具类)。

HotSpot VM 采用分代垃圾收集器,基于多数分配对象存活时间短且存活时间久的对象很少引用存活时间短的对象这一观察事实,将堆分为两个物理区空间,即新生代和老年代,并根据各自特点选择不同收集器以提升垃圾回收效率。在 2006 年 JavaOne 大会上,Sun 公司宣布将 Java 开源,并在随后一年将 JDK 各个部分包括 HotSpot VM 在 GPL 协议下公开源码,建立了 OpenJDK。2008 年和 2009 年,Oracle 公司分别收购 BEA 公司和 Sun 公司,拥有了 JRockit VM 和 HotSpot VM 两款优秀虚拟机,并计划在发布 JDK 8 时完成整合工作,在 HotSpot 的基础上移植 JRockit 的优秀特性。

HotSpot VM 的起源

HotSpot VM 最初是由一家名为 “Longview Technologies” 的小公司设计。它的起源可以追溯到对编程语言 Self 的支持,为了实现 “达到 C 语言 50% 以上的执行效率” 这一目标而设计的虚拟机,其中相当多的技术被 HotSpot VM 所继承。Sun 公司注意到了这款虚拟机在 JIT 编译上的优秀理念和实际效果,于 1997 年收购了 Longview Technologies 公司,从而获得了 HotSpot VM。此后,HotSpot VM 在 Java 虚拟机领域逐渐崭露头角,成为目前使用范围最广的 Java 虚拟机。在 2006 年,Sun 公司宣布将 Java 开源,并在此基础上建立了 OpenJDK,HotSpot VM 便成为了 Sun JDK 和 OpenJDK 两个实现极度接近的 JDK 项目的共同虚拟机。2008 年和 2009 年,Oracle 公司分别收购了 BEA 公司和 Sun 公司,进一步推动了 HotSpot VM 的发展和整合。

HotSpot VM 的核心代码模块

HotSpot VM 的核心代码位于 vm 模块下,包括多个子模块。其中,adlc 模块是平台描述文件的编译器;asm 模块是汇编器接口;c1 模块是 client 编译器;ci 模块是动态编译器的公共服务及从动态编译器到 VM 的接口;classfile 模块负责类文件的处理,包括类加载和系统符号表等;code 模块管理动态生成的代码;compiler 模块是从 VM 调用动态编译器的接口;gc_implementation 模块包含了各种 GC 的实现,如 concurrentMarkSweep、g1、parallelScavenge、parNew 等;gc_interface 模块是 GC 接口;interpreter 模块包括解释器,如 “模板解释器” 和 “C++ 解释器”;libadt 模块包含一些抽象数据结构;memory 模块负责内存管理相关事宜;oops 模块是 HotSpot VM 的对象系统的实现;opto 模块是 server 编译器;precompiled 模块、prims 模块主要负责提供外部程序访问 JVM 内部信息的对外接口,包括 JNI、JVM、JVMTI 和 Perf 等;runtime 模块是运行时支持库,涵盖线程管理、编译器调度、锁、反射等;services 模块主要用于支持 JMX 之类的管理功能接口;shark 模块是基于 LLVM 的 JIT 编译器,但官方版未使用;trace 模块和 utilities 模块包含一些基本的工具类。

HotSpot VM 的垃圾收集器

HotSpot VM 拥有多种垃圾收集器,以满足不同的应用场景需求。
在新生代垃圾收集器中,Serial 垃圾收集器是单线程的,采用复制算法,在进行垃圾回收时会暂停其他所有的工作线程,适合所需内存较小的客户端应用。ParNew 垃圾收集器是 Serial 的多线程版本,除了使用多线程进行垃圾回收之外,其他行为和 Serial 收集器相同,主要应用在服务端模式下。Parallel Scavenge 收集器也是用于年轻代的回收器,采用多线程并发回收,可以通过设置参数来控制 GC 的最大停顿时间,以达到吞吐量可控的目标,适合在后台运算没有太多交互的任务。
在老年代垃圾收集器中,Serial Old 是 Serial 垃圾收集器的老年代版本,采用单线程和标记 - 整理算法。Parallel Old 垃圾收集器是 Parallel Scavenge 收集器的老年代版本,使用多线程和 “标记 - 整理” 算法。CMS 收集器是基于标记 - 清除算法的,以追求收集速度为目标,适合追求垃圾收集速度的服务器上,但会牺牲系统的吞吐量。G1 垃圾收集器既可以回收新生代,也可以回收老年代,在 JDK9 中成为 HotSpot VM 默认的垃圾收集器。

HotSpot VM 的开源历程

在 2006 年底,Sun 公司将 JDK 的各个部分(其中包括 HotSpot VM)在 GPL 协议下公开了源码,并在此基础上建立了 OpenJDK。这样,HotSpot VM 便成为了 Sun JDK 和 OpenJDK 两个实现极度接近的 JDK 项目的共同虚拟机。此后,HotSpot VM 的开源项目不断发展和完善,吸引了众多开发者的参与和贡献。

HotSpot VM 与 JRockit VM 的整合

2008 年和 2009 年,Oracle 公司分别收购了 BEA 公司和 Sun 公司,从而同时拥有了 JRockit VM 和 HotSpot VM 两款虚拟机。目前 Oracle 公司在推进这两款虚拟机的整合工作,使之优势互补。JDK8 的 HotSpot VM 已经是以前的 HotSpot VM 与 JRockit VM 的合并版,例如移除 PermGen、Java Flight Recorder、jcmd 等都属于合并项目的一部分。虽然产品里名字还是叫 HotSpot VM,但实际上融合了 JRockit VM 的一些有价值的功能。

HotSpot VM 作为目前使用范围最广的 Java 虚拟机,其起源于一家小公司的设计,后被 Sun 公司收购并不断发展壮大。在开源历程中,它成为了 Sun JDK 和 OpenJDK 的共同虚拟机,吸引了众多开发者的贡献。同时,HotSpot VM 还与 JRockit VM 进行整合,以实现优势互补,为 Java 开发者提供更强大的虚拟机性能和功能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/57184.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

算法笔记day06

目录 1.添加逗号 2.跳台阶 3.扑克牌顺子 1.添加逗号 添加逗号_牛客题霸_牛客网 算法思路&#xff1a; 按照提议模拟即可&#xff0c;从后向前遍历字符串&#xff0c;遍历三个字符之后&#xff0c;将其插入将这三个字符插入到新的字符串中再加上逗号。 #include <iostrea…

Thymeleaf模板引擎教程(详细总结)

Thymeleaf 是一个服务器端 Java 模板引擎&#xff0c;能够处理 HTML 、 XML 、 CSS 、 JAVASCRIPT 等模板文件。 Thymeleaf 模板可以直接当作静态原型来使用&#xff0c;它主要目标是为开发者的开发工作流程带来优雅的自然 模板&#xff0c;也是 Java 服务器端 HTML5 开…

Docker设置日志滚动

问题描述 Docker 容器中的进程会将打印到控制台(console)的日志保存到容器的目录下&#xff0c;默认的 Docker 配置不带有日志的回滚。会在自己的容器目录下往同一个日志文件中不停写入&#xff0c;最后会导致磁盘空间占满的问题。 解决方案 方案一&#xff1a;全局范围内修…

一文掌握Cephadm部署Ceph存储集群

&#x1f4da; 博客主页&#xff1a; StevenZeng学堂 &#x1f389; 本文专栏: 一文读懂Kubernetes一文读懂Harbor云原生安全实战指南云原生存储实践指南 ❤️ 摘要&#xff1a;随着企业数据量的增长和存储需求的复杂化&#xff0c;Ceph因其高可扩展性和灵活性&#xff0c;能…

网络安全的五大误区,你中招了吗?

在数字化时代&#xff0c;网络安全问题日益突出&#xff0c;许多人在使用网络过程中存在一些误区&#xff0c;导致个人信息泄露、财产损失等问题。本文将为您揭示网络安全的五大误区&#xff0c;帮助您提高安全防范意识。 误区一&#xff1a;使用复杂密码就一定安全 许多人认为…

考研读研生存指南,注意事项

本视频课程&#xff0c;涉及考研读研的方方面面&#xff0c;从考研初试→复试面试→研究生生活→导师相处→论文专利写作混毕业&#xff0c;应有尽有。有了他&#xff0c;你的研究生生涯稳了。 读研考研注意事项&#xff0c;研究生生存指南。_哔哩哔哩_bilibili 一、考研初试注…

临阵磨枪!这份软考中级集成案例分析答题万金油赶紧收藏

在系统集成项目管理工程师案例分析科目的考试中&#xff0c;主要分为“计算题”和“分析题”两大类。 计算题主要围绕着进度管理和成本管理进行出题&#xff0c;比如挣值计算、网络图、关键路径等等&#xff0c;一般占据一道大题。 而分析题呢主要占三道大题&#xff0c;主要…

前端开发 环境变量 process.env.NODE_ENV 是什么

背景&#xff1a; 前端开发过程中&#xff0c;解决Access跨域问题&#xff0c;使用跨域代理&#xff0c;注意这里是指前端的跨域代理&#xff0c;所以这里配置的只适用于开发环境。至于生产环境一般由后端配置跨域代理&#xff0c;一般使用ngnix解决生产环境的跨域代理。 一、…

新款任天堂switch游戏机方案,支持4K60HZ投屏方案,显示器,手柄方案

据传任天堂将推出新的一代的switch掌机&#xff0c;而新款掌机将支持4K60HZ投屏 都2402年了再做1080P确实有点不太象话了 4K60HZ相较于1080P能够提升很多游戏体验&#xff0c;这时不管是HDMI显示器或者是VR眼睛清晰度都会让人舒服很多。 不过新一代的任天堂似乎也在PD协议上…

家政小程序搭建,数字化市场发展下的意义

家政服务行业作为当下社会生活中不可或缺的行业&#xff0c;需求量在逐渐增加&#xff0c;行业发展也趋向多样化。 随着数字化的浪潮&#xff0c;家政行业逐渐向数字化、智能化升级发展&#xff0c;推动行业高质量发展&#xff0c;迎合现代化发展趋势&#xff0c;这一转型为行…

【趣学C语言和数据结构100例】

【趣学C语言和数据结构100例】 问题描述 利用递归函数调用方式&#xff0c;将所输入的 5 个字符&#xff0c;以相反顺序打印出来 给定一个不多于 5 位的正整数&#xff0c;要求: 1. 求它是几位数&#xff0c;2. 逆序打印出各位数字 一个 5 位数&#xff0c;判断它是不是回文…

GPU泡沫破灭前夜

GPU泡沫破灭前夜 GPU(图形处理器)是近年来快速发展的领域&#xff0c;因为GPU能够加速计算机图形的处理速度&#xff0c;使得计算机游戏和视频渲染变得更加高效和流畅。然而&#xff0c;GPU泡沫破灭前夜&#xff0c;这种繁荣景象已经变得不太真实。 GPU市场的繁荣始于2010年&…

网站分享丨UU在线工具

在日常的工作、学习和生活中&#xff0c;我们常常会遇到各种各样需要借助工具来解决的问题。今天就给大家介绍一个功能强大、涵盖众多实用工具的在线平台 ——UU 在线工具。 一、丰富多样的工具分类 1.文档处理类&#xff1a; PDF 工具&#xff1a;提供了 PDF 转 Word、PDF 合…

IDEA中文乱码�

这篇文章网上到处都是&#xff0c;但我写作的初衷是为了更好地审视自己的作品&#xff0c;并通过不断的总结与反思来提升自我。 文章目录 前言原因分析解决方案一、设置字体为支持中文的字体二、设置字符编码为 UTF-8三、修改 IDEA 配置文件&#xff0c;让其支持中文编码第一种…

资讯 | 财富通科技政务协同办公管理软件通过麒麟软件适配认证

2024年9月25日&#xff0c;财富通科技研发的政务协同办公管理软件成功通过中国国产操作系统麒麟软件的适配认证。本次认证是继公司区块链产品“基于区块链的企业及人员资质数字证书服务平台”认证以后得第二次认证。这一成就标志着财富通科技在推动国产软件生态建设方面迈出了坚…

Java项目-基于springboot框架的广场舞团系统项目实战(附源码+文档)

作者&#xff1a;计算机学长阿伟 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、ElementUI等&#xff0c;“文末源码”。 开发运行环境 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringBoot、Vue、Mybaits Plus、ELementUI工具&#xff1a;IDEA/…

【无标题】如何使用yolo-v8 实现自定义目标检测

如何使用yolo-v8 实现自定义目标检测 训练数据集准备搭建环境安装anaconda配置python虚拟环境安装yolo-v8以及labelimg图片标注工具 编写配置文件和训练脚本文件编写yaml配置文件(文件名为dataset.yaml)编写模型训练代码&#xff08;文件名称为yolotrain.py&#xff09;运行训练…

Debug-029-el-table实现自动滚动分批请求数据

前情提要 最近做了一个小优化&#xff0c;还是关于展示大屏方面的。大屏中使用el-table展示列表数据&#xff0c;最初的方案是将数据全部返回&#xff0c;确实随着数据变多有性能问题&#xff0c;有时请求时间比较长。这里做的优化就是实现列表的滚动到距离底部一定高度时再次请…

计算机网络基本命令

实验内容&#xff1a; 1. **ipconfig命令** - **用途**&#xff1a;显示和配置TCP/IP网络设置。 - **常用选项**&#xff1a; - ipconfig&#xff1a;显示所有网络适配器的IP地址、子网掩码、默认网关等信息。 - ipconfig /all&#xff1a;显示所有网络适配器…

【网络安全】-vulnhub靶场-noob

1.靶机下载&#xff1a; https://www.vulnhub.com/entry/noob-1,746/ 得到ova文件导入虚拟机&#xff0c;并打开虚拟机设置&#xff0c;将靶机-Noob与攻击机-kali的网络适配器都改成NAT仅主机模式&#xff0c;确保两台虚拟机在同一网段上。 2.靶机-Noob ip 判断 命令&#x…