网站首页 > 技术文章 正文
HotSpot发展历程
提起HotSpot VM,相信所有Java程序员都知道,它是Sun JDK和OpenJDK中所带的虚拟机,也是目前使用范围最广的Java虚拟机。
这个Java界大名鼎鼎的虚拟机最初并非由Sun公司开发,而是由一家名为Longview Technologies的小公司设计的,后来Sun公司注意到了这款虚拟机,在1997年收购了Longview Technologies公司,从而获得了HotSpot VM。
在2006年,Sun公司宣布最终会把Java开源,并在此基础上建立了OpenJDK。这样HotSpot VM便成为了Sun JDK和OpenJDK两个极其接近的JDK项目的共同虚拟机。
HotSpot VM只是Java虚拟机的一种实现,不是世界上唯一的虚拟机。JRocket VM是BEA公司的JVM,一般和J2EE应用服务器Weblogic配合使用。另外J9 VM是IBM的JVM,一般和IBM的J2EE应用服务器Websphere配合使用,2017年,IBM也开源了J9,捐献给了Eclipse基金会,命名为Eclipse OpenJ9。
在2008年和2009年,Oracle公司分别收购了BEA公司和Sun公司,这样Oracle就同时拥有了两款Java虚拟机:JRockit VM和HotSpot VM。 目前Oracle公司在推进这两款虚拟机的整合工作,使之优势互补。
国内平时用得比较多的Java版本一般是OpenJDK,Oracle/Sun JDK里面的HotSpot VM只有非常少量的功能没有在OpenJDK里,且这些部分都不涉及JVM的核心功能。
Hot Spot的内存区域演进
前文《Java面试必考问题:Java堆内存管理机制 》中介绍了HotSpot VM的堆内存结构,提到了HotSpot VM有一个称作“永久代”的内存区域,这个只有HotSpot才有,BEA JRocket和IBM J9都不存在永久代(Permanent Generation)的概念。
HotSpot的永久代主要是为了实现JVM中的方法区(Method Area)的功能,存放类型信息、域信息、方法信息、JIT代码缓存、静态变量以及运行时常量池。JDK1.6及以前的版本,这些数据都是保存在HotSpot VM的永久代。
到了JDK1.7版本,HotSpot VM还有永久代,不过开始逐步去永久代,将字符串常量池、静态变量移除,保存在堆中。
到了JDK1.8及以后,HotSpot VM没有永久代了,取而代之的是元空间(Metaspace)类型信息、字段、方法、常量保存在元空间,字符串常量池、静态变量还是保存在堆里。
永久代被元空间取代的原因主要是:永久代空间大小很难确定,太小容易OOM异常,太大占用太多虚拟机内存。另外永久代调优困难,垃圾回收频率低。元空间并不在虚拟机中,而是使用本地内存,大小仅受本地内存限制。
我会持续更新关于物联网、云原生以及数字科技方面的文章,用简单的语言描述复杂的技术,也会偶尔发表一下对IT产业的看法,欢迎大家关注,谢谢。
猜你喜欢
- 2024-10-31 免费开源虚拟机VirtualBox 7.0.12发布:修复TPM和黑屏问题
- 2024-10-31 Java虚拟机 java虚拟机的工作原理
- 2024-10-31 虚拟机安装Android系统,喜欢折腾的人可以一试
- 2024-10-31 免费开源虚拟机VirtualBox 7.0.6发布
- 2024-10-31 开发必备-虚拟机(OracleVMViratualBox)的安装(附图详解)
- 2024-10-31 7.6 从模板部署虚拟机操作过程 模板和虚拟机的区别
- 2024-10-31 关于oracle virtualbox虚拟机的一些问题跟chatgpt交流的日志
- 2024-10-31 一台电脑如何完成一个局域网的应用设置——用虚拟机
- 2024-10-31 VirtualBox7中安装macOS big sur,在windows10&11上「保姆级教程」
- 2024-10-31 周六的娱乐就是安装一台OracleLinux虚拟机(一)
你 发表评论:
欢迎- 633℃几个Oracle空值处理函数 oracle处理null值的函数
- 626℃Oracle分析函数之Lag和Lead()使用
- 614℃0497-如何将Kerberos的CDH6.1从Oracle JDK 1.8迁移至OpenJDK 1.8
- 608℃Oracle数据库的单、多行函数 oracle执行多个sql语句
- 606℃Oracle 12c PDB迁移(一) oracle迁移到oceanbase
- 599℃【数据统计分析】详解Oracle分组函数之CUBE
- 588℃最佳实践 | 提效 47 倍,制造业生产 Oracle 迁移替换
- 574℃Oracle有哪些常见的函数? oracle中常用的函数
- 最近发表
-
- oracle 19cOCM认证有哪些内容(oracle认证ocm月薪)
- Oracle新出AI课程认证,转型要持续学习
- oracle 表的查询join顺序,可能会影响查询效率
- Oracle DatabaseAmazon Web Services正式可用,Oracle数据库上云更容易了
- Oracle 19.28 RU 升级最佳实践指南
- 汉得信息:发布EBS系统安装启用JWS的高效解决方案
- 如何主导设计一个亿级高并发系统架构-数据存储架构(三)
- Java 后端开发必看!工厂设计模式轻松拿捏
- ORA-00600 「25027」 「x」报错(抱错孩子电视剧 爸爸是武术 另一个爸爸是画家)
- 新项目终于用上了jdk24(jdk新建项目)
- 标签列表
-
- 前端设计模式 (75)
- 前端性能优化 (51)
- 前端模板 (66)
- 前端跨域 (52)
- 前端缓存 (63)
- 前端aes加密 (58)
- 前端脚手架 (56)
- 前端md5加密 (54)
- 前端路由 (61)
- 前端数组 (73)
- 前端js面试题 (50)
- 前端定时器 (59)
- 前端获取当前时间 (50)
- Oracle RAC (76)
- oracle恢复 (77)
- oracle 删除表 (52)
- oracle 用户名 (80)
- oracle 工具 (55)
- oracle 内存 (55)
- oracle 导出表 (62)
- oracle约束 (54)
- oracle 中文 (51)
- oracle链接 (54)
- oracle的函数 (58)
- 前端调试 (52)
本文暂时没有评论,来添加一个吧(●'◡'●)