【jvm】jvm发展历程
目录
- 一、Sun Classic VM
- 二、Exact VM
- 三、HotSpot VM
- 四、JRockit
- 五、J9
- 六、KVM、CDC、CLDC
- 七、Azul VM
- 八、Liquid VM
- 九、Apache Harmony
- 十、Microsoft JVM
- 十一、Taobao JVM
- 十二、Dalvik VM
一、Sun Classic VM
- 1.1996年java1.0版本,sun公司发布了sun classic vm虚拟机
- 2.是世界上第一款商用java虚拟机
- 3.jdk1.4被完全淘汰
- 4.内部只提供解释器
- 5.如果使用JIT编译器,则需要进行外挂。一旦使用了JIT编译器,JIT会接管虚拟机的执行系统。解释器就不再工作。解释器和编译器不能配合工作
- 6.现在hotspot内置了此虚拟机
二、Exact VM
- 1.为了解决Sun Classic VM的问题,jdk1.2时,sun提供了此虚拟机
- 2.exact memory management:准确式内存管理
- 3.也叫Non-Conservative/Accurate Memory Management
- 4.虚拟机可以知道内存中某个位置的数据具体是什么类型
- 5.具备现代高性能虚拟机的雏形
- 6.热点探测
- 7.编译器与解释器混合工作模式
- 8.只在solaris平台短暂使用,其他平台上还是classic vm
- 9.最终被hotspot虚拟机替代
三、HotSpot VM
- 1.最初由一家名为“Longview Technologies”的小公司设计
- 2.1997年被sun收购,2009年,sun被甲骨文收购
- 3.jdk1.3时,hotspot vm成为默认虚拟机
- 4.目前hotspot占有绝对的市场地位
- 5.广泛使用的jdk6和使用比例较多的jdk8,默认的虚拟机都是hotspot
- 6.sun/oracle jdk和open jdk的默认虚拟机
- 7.从服务器、桌面到移动端、嵌入式都有应用
- 8.hotspot的意思就是它的热点探测技术
- 9.通过计数器找到最具编译价值代码,触发即时编译或栈上替换(对象不一定都需要创建在堆空间中,也可以在栈上分配对象)
- 10.通过编译器和解释器协同工作,在最优化的程序响应时间与最佳执行性能中取得平衡
四、JRockit
- 1.EA公司的产品,专注于服务器端应用
- 2.服务器端可以不关注程序启动速度,JRockit内部不包含解释器实现,全部代码都靠及时编译器编译后执行
- 3.大量的行业基准测试显示,JRockit JVM是世界上最快的JVM
- 4.使用JRockit产品,客户已经体验到了显著的性能提高(一些超过了70%)和硬件成本的减少(达50%)
- 5.优势:全面的java运行时解决方案组合,JRockit面向延迟敏感型应用的解决方案JRockit Real Time提供以毫秒或微妙级的JVM响应时间,适合财务、军事指挥、电信网络的需要;MissionControl服务套件,是一组以极低的开销来监控、管理和分析生产环境中的应用程序的工具
- 6.2008年,BEA被Oracle收购
- 7.Oracle表达了整合两大优秀虚拟机的工作,大致在jdk8中完成。整合的方式是在hotspot的基础上,移植JRockit的优秀特性
- 8.高斯林:目前就职于谷歌,研究人工智能和水下机器人
五、J9
- 1.全称:IBM Technology for Java Virtual Machine,简称IT4J,内部代号:J9
- 2.市场定位与Hotspot接近,服务器端、桌面应用、嵌入式等多用途VM
- 3.广泛用于IBM的各种java产品
- 4.目前是最有影响力的三大商用虚拟机之一,也号称是世界上最快的java虚拟机
- 5.2017年左右,IBM发布了开源J9 VM,命名为OpenJ9,交给Eclipse基金会管理,也称为Eclipse OpenJ9
六、KVM、CDC、CLDC
- 1.oracle在java me产品上的两款虚拟机为:CDC/CLDC HotSpot Implementation VM
- 2.KVM(Kilobyte)是CLDC-HI早期产品
- 3.目前移动领域低位尴尬,手机被Android和ios瓜分
- 4.KVM简单、轻量、高度可移植性,面向更低端的设备上还有一定的市场,智能控制器、传感器、老人机、经济欠发达地区的功能手机
- 5.所有虚拟机的原则:一次编译,到处运行
七、Azul VM
- 1.Azul VM和BEA Liquid VM是与特定硬件平台绑定、软硬件配合的专有虚拟机
- 2.Azul VM是Azul System公司在HotSpot基础上进行大量改进,运行于Azul System公司的专有硬件Vega系统上的java虚拟机
- 3.每个Azul VM实例都可以管理至少数十个CPU和数百GB内存的硬件资源,并提供在巨大内存范围内实现可控的GC时间的垃圾收集器、专有硬件优化的线程调度等优秀特性
- 4.2010年,Azul System公司开始从硬件转向软件,发布了自己的Zing JVM,可以在通用x86平台上提供接近于Vega系统的特性
八、Liquid VM
- 1.高性能java虚拟机中的战斗机
- 2.BEA公司开发的,直接运行在自家Hypervisor系统上
- 3.Liquid VM即是现在的JRockit VE(Virtual Edition),Liquid VM不需要操作系统的支持,或者说它本身实现了一个专用操作系统的必要功能,如线程调度、文件系统、网络支持等
- 4.随着JRockit虚拟机终止开发,Liquid VM项目也停止
九、Apache Harmony
- 1.Apache也曾经推出过与JDK1.5和JDK1.6兼容的java运行平台Apache Harmony
- 2.它是IBM和Intel联合开发的开源JVM,受到同样开源的OpenJDK的压制,Sun坚决不让Harmony获得JCP认证,最终于2011年退役,IBM转而参与OpenJDK
- 3.虽然目前并没有Apache Harmony被大规模商用的案例,但它的Java类库代码吸纳进了Android SDK
十、Microsoft JVM
- 1.微软为了在IE3浏览器中支持Java Applets,开发了Microsoft JVM
- 2.只能在window平台下运行。的确是当时Windows下性能最好的java vm
- 3.1997年,sun以侵犯商标、不正当竞争罪名指控微软成功,赔了sun公司很多钱。微软在windowsXP SP3中抹掉了VM。现在windows上安装的jdk都是HotSpot
十一、Taobao JVM
- 1.由AliJVM团队发布。阿里是国内使用java最强大的公司,覆盖云计算、金融、物流、电商等众多领域,需要解决高并发、高可用、分布式的复合问题。有大量的开源产品。
- 2.基于OpenJDK开发了自己的定制版本AlibabaJDK,简称AJDK,是整个阿里Java体系的基石
- 3.基于OpenJDK HotSpot VM发布的国内第一个优化、深度定制且开源的高性能服务器版Java虚拟机
- 4.创新的GCIH(GC invisible heap)技术实现了off-heap,即将生命周期较长的java对象从heap中移到heap之外,并且GC不能管理GCIH内部的java对象,以此达到降低GC的回收频率和提升GC的回收效率的目的
- 5.GCIH中的对象还能够在多个Java虚拟机进程中实现共享
- 6.使用crc32指令实现JVM intrinsic降低JNI的调用开销
- 7.PMU hardware的java profiling tool和诊断协助功能
- 8.针对大数据场景的ZenGC
- 9.taobao vm应用在阿里产品上性能高,硬件严重依赖intel的cpu,损失了兼容性,但提高了性能
- 10.目前已经在淘宝、天猫上线,把Oracle官方的JVM版本全部替换了
十二、Dalvik VM
- 1.骨骼开发的,应用于Android系统,并在Android2.2中提供了JIT,发展迅猛
- 2.Dalvik VM只能称作虚拟机,而不能称作java虚拟机,没有遵循java虚拟机规范
- 3.不能直接执行java的class文件
- 4.基于寄存器架构,不是jvm的栈架构
- 5.执行的是编译以后的dex(Dalvik Executable)文件。执行效率比较高
- 6.执行的dex(Dalvik Executable)文件可以通过class文件转化文件,使用java语言编写应用程序,可以直接使用大部分的java api等
- 7.Android 5.0使用支持提前编译(Ahead Of Time Compilation, AOT)的ART VM替换Dalvik VM
相关文章:
【jvm】jvm发展历程
目录 一、Sun Classic VM二、Exact VM三、HotSpot VM四、JRockit五、J9六、KVM、CDC、CLDC七、Azul VM八、Liquid VM九、Apache Harmony十、Microsoft JVM十一、Taobao JVM十二、Dalvik VM 一、Sun Classic VM 1.1996年java1.0版本,sun公司发布了sun classic vm虚拟…...
Dubbo3.0 Demo
将SpringBoot工程集成Dubbo 1.创建父工程 2.创建子工程consumer,provider 3.初始化工程 4.引入依赖 在provider和consumer中引入dubbo依赖 <dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-spring-boot-starter</a…...
源码分析——ConcurrentHashMap源码+底层数据结构分析
文章目录 1. ConcurrentHashMap 1.71. 存储结构2. 初始化3. put4. 扩容 rehash5. get 2. ConcurrentHashMap 1.81. 存储结构2. 初始化 initTable3. put4. get 3. 总结 1. ConcurrentHashMap 1.7 1. 存储结构 Java 7 中 ConcurrentHashMap 的存储结构如上图,Concurr…...
R语言中的函数25:paste,paste0
文章目录 介绍paste0()实例 paste()实例 介绍 paste0()和paste()函数都可以实现对字符串的连接,paste0是paste的简化版。 paste0() paste (..., sep " ", collapse NULL, recycle0 FALSE)… one or more R objects, to be converted to character …...
(八)穿越多媒体奇境:探索Streamlit的图像、音频与视频魔法
文章目录 1 前言2 st.image:嵌入图像内容2.1 图像展示与描述2.2 调整图像尺寸2.3 使用本地文件或URL 3 st.audio:嵌入音频内容3.1 播放音频文件3.2 生成音频数据播放 4 st.video:嵌入视频内容4.1 播放视频文件4.2 嵌入在线视频 5 结语&#x…...
CAD练习——绘制房子平面图
首先还是需要设置图层、标注、文字等 XL:构造线 用构造线勾勒大致的轮廓: 使用多线命令:ML 绘制墙壁 可以看到有很多交叉点的位置 用多线编辑工具将交叉点处理 有一部分处理不了的,先讲多线分解,然后用修剪打理&…...
spring 面试题
一、Spring面试题 专题部分 1.1、什么是spring? Spring是一个轻量级Java开发框架,最早有Rod Johnson创建,目的是为了解决企业级应用开发的业务逻辑层和其他各层的耦合问题。它是一个分层的JavaSE/JavaEE full-stack(一站式)轻量…...
Springboot项目集成Durid数据源和P6Spy以及dbType not support问题
项目开发阶段,mybatis的SQL打印有占位符,调试起来还是有点麻烦,随想整合P6Spy打印可以直接执行的SQL,方便调试,用的Durid连接池。 Springboot项目集成Durid <dependency><groupId>com.alibaba</group…...
安卓如何卸载应用
卸载系统应用 首先需要打开手机的开发者选项,启动usb调试。 第二步需要在电脑上安装adb命令,喜欢的话还可以将它加入系统path。如果不知道怎么安装,可以从这里下载免安装版本。 第三步将手机与电脑用数据线连接,注意是数据线&a…...
【云原生|Kubernetes】14-DaemonSet资源控制器详解
【云原生|Kubernetes】14-DaemonSet资源控制器详解 文章目录 【云原生|Kubernetes】14-DaemonSet资源控制器详解简介典型用法DaemonSet语法规则Pod模板Pod 选择算符在选定的节点上运行 Pod DaemonSet的 Pods 是如何被调度的污点和容忍度DaemonSet更新和回滚DaemonSet更新策略执…...
基于 Guava Retry 在Spring封装一个重试功能
pom依赖 <dependency><groupId>com.github.rholder</groupId><artifactId>guava-retrying</artifactId><version>2.0.0</version> </dependency> <dependency><groupId>org.springframework.boot</groupId>…...
适用HarmonyOS 3.1版本及以上的应用及服务开发工具 DevEco Studio 3.1.1 Release 安装
文章目录 安装步骤1.下载安装包2.安装成功后,初次运行studio2.1 配置node与ohpm的环境2.2安装sdk2.3等待安装结束 3.创建项目3.1 点击Create Project3.2 选择一个空项目3.3 项目配置3.4 Finish、等待依赖下载完毕3.5 项目创建完成 tip 提示4.配置运行环境4.1 真机运…...
[信号与系统系列] 正弦振幅调制之差拍信号
当将具有不同频率的两个正弦曲线相乘时,可以创建一个有趣的音频效果,称为差拍音符。这种现象听起来像颤音,最好通过选择一个频率非常小的信号与和另一个频率大约1KHz的信号,把二者混合从而听到。一些乐器能够自然产生差拍音符。使…...
vb+SQL航空公司管理系统设计与实现
航空公司管理信息系统 一个正常营运的航空公司需要管理所拥有的飞机、航线的设置、客户的信息等,更重要的还要提供票务管理。面对各种不同种类的信息,需要合理的数据库结构来保存数据信息以及有效的程序结构支持各种数据操作的执行。 本设计讲述如何建立一个航空公司管理信…...
python爬取网页视频
Python是一种功能强大的编程语言,被广泛应用于网络爬虫、数据分析和人工智能等领域。在网络爬虫中,常常需要从网页中获取视频或者录制网页视频。下面将介绍如何使用Python来录制网页视频。 import time from selenium import webdriver # 创建驱动程序 d…...
数据挖掘具体步骤
数据挖掘具体步骤 1、理解业务与数据 2、准备数据 数据清洗: 缺失值处理: 异常值: 数据标准化: 特征选择: 数据采样处理: 3、数据建模 分类问题: 聚类问题: 回归问题 关联分析 集成学习 image B…...
react class与hooks区别
在React中,有两种主要的方式来管理组件的状态和生命周期:Class 组件和 Hooks。 Class 组件: Class 组件是 React 最早引入的方式,它是基于 ES6 class 的语法来创建的。Class 组件包含了生命周期方法,可以用来处理组件…...
Python爬虫思维:异常处理与日志记录
作为一名专业的爬虫代理供应商,我们经常会看见各种各样的爬虫异常情况。网络请求超时、页面结构变化、反爬虫机制拦截等问题时常出现在客户的工作中。 在这篇文章中,我将和大家分享一些关于异常处理与日志记录的思维方法。通过合理的异常处理和有效的日志…...
(十六)大数据实战——安装使用mysql版的hive服务
前言 hive默认使用的是内嵌据库derby,Derby 是一个嵌入式数据库,可以轻松地以库的形式集成到应用程序中。它不需要独立的服务器进程,所有的数据存储在应用程序所在的文件系统中。为了支持hive服务更方便的使用,我们使用mysql数据…...
【信号生成器】从 Excel 数据文件创建 Simulink 信号生成器块研究(Simulink)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...
Admin.Net中的消息通信SignalR解释
定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...
Java如何权衡是使用无序的数组还是有序的数组
在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...
汇编常见指令
汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX(不访问内存)XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...
06 Deep learning神经网络编程基础 激活函数 --吴恩达
深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...
SQL慢可能是触发了ring buffer
简介 最近在进行 postgresql 性能排查的时候,发现 PG 在某一个时间并行执行的 SQL 变得特别慢。最后通过监控监观察到并行发起得时间 buffers_alloc 就急速上升,且低水位伴随在整个慢 SQL,一直是 buferIO 的等待事件,此时也没有其他会话的争抢。SQL 虽然不是高效 SQL ,但…...
系统掌握PyTorch:图解张量、Autograd、DataLoader、nn.Module与实战模型
本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文通过代码驱动的方式,系统讲解PyTorch核心概念和实战技巧,涵盖张量操作、自动微分、数据加载、模型构建和训练全流程&#…...
在RK3588上搭建ROS1环境:创建节点与数据可视化实战指南
在RK3588上搭建ROS1环境:创建节点与数据可视化实战指南 背景介绍完整操作步骤1. 创建Docker容器环境2. 验证GUI显示功能3. 安装ROS Noetic4. 配置环境变量5. 创建ROS节点(小球运动模拟)6. 配置RVIZ默认视图7. 创建启动脚本8. 运行可视化系统效果展示与交互技术解析ROS节点通…...
【实施指南】Android客户端HTTPS双向认证实施指南
🔐 一、所需准备材料 证书文件(6类核心文件) 类型 格式 作用 Android端要求 CA根证书 .crt/.pem 验证服务器/客户端证书合法性 需预置到Android信任库 服务器证书 .crt 服务器身份证明 客户端需持有以验证服务器 客户端证书 .crt 客户端身份…...
UE5 音效系统
一.音效管理 音乐一般都是WAV,创建一个背景音乐类SoudClass,一个音效类SoundClass。所有的音乐都分为这两个类。再创建一个总音乐类,将上述两个作为它的子类。 接着我们创建一个音乐混合类SoundMix,将上述三个类翻入其中,通过它管理每个音乐…...
【Vue】scoped+组件通信+props校验
【scoped作用及原理】 【作用】 默认写在组件中style的样式会全局生效, 因此很容易造成多个组件之间的样式冲突问题 故而可以给组件加上scoped 属性, 令样式只作用于当前组件的标签 作用:防止不同vue组件样式污染 【原理】 给组件加上scoped 属性后…...
