什么是HotSpot虚拟机
提起HotSpot VM,相信所有Java程序员都知道,它是Sun JDK和OpenJDK中所带的虚拟机,也是目前使用范围最广的Java虚拟机。 但不一定所有人都知道的是,这个目前看起来“血统纯正”的虚拟机在最初并非由Sun公司开发,而是由一家名为“Longview Technologies”的小公司设计的; 甚至这个虚拟机最初并非是为Java语言而开发的,它来源于Strongtalk VM, 而这款虚拟机中相当多的技术又是来源于一款支持Self语言实现“达到C语言50%以上的执行效率”的目标而设计的虚拟机, Sun公司注意到了这款虚拟机在JIT编译上有许多优秀的理念和实际效果,在1997年收购了Longview Technologies公司,从而获得了HotSpot VM。HotSpot VM既继承了Sun之前两款商用虚拟机的优点(如前面提到的准确式内存管理),也有许多自己新的技术优势, 如它名称中的HotSpot指的就是它的热点代码探测技术(其实两个VM基本上是同时期的独立产品,HotSpot还稍早一些,HotSpot一开始就是准确式GC, 而Exact VM之中也有与HotSpot几乎一样的热点探测。 为了Exact VM和HotSpot VM哪个成为Sun主要支持的VM产品,在Sun公司内部还有过争论,HotSpot打败Exact并不能算技术上的胜利), HotSpot VM的热点代码探测能力可以通过执行计数器找出最具有编译价值的代码,然后通知JIT编译器以方法为单位进行编译。 如果一个方法被频繁调用,或方法中有效循环次数很多,将会分别触发标准编译和OSR(栈上替换)编译动作。 通过编译器与解释器恰当地协同工作,可以在最优化的程序响应时间与最佳执行性能中取得平衡,而且无须等待本地代码输出才能执行程序, 即时编译的时间压力也相对减小,这样有助于引入更多的代码优化技术,输出质量更高的本地代码。在2006年的JavaOne大会上,Sun公司宣布最终会把Java开源,并在随后的一年,陆续将JDK的各个部分(其中当然也包括了HotSpot VM)在GPL协议下公开了源码, 并在此基础上建立了OpenJDK。这样,HotSpot VM便成为了Sun JDK和OpenJDK两个实现极度接近的JDK项目的共同虚拟机。在2008年和2009年,Oracle公司分别收购了BEA公司和Sun公司,这样Oracle就同时拥有了两款优秀的Java虚拟机:JRockit VM和HotSpot VM。 Oracle公司宣布在不久的将来(大约应在发布JDK 8的时候)会完成这两款虚拟机的整合工作,使之优势互补。 整合的方式大致上是在HotSpot的基础上,移植JRockit的优秀特性,譬如使用JRockit的垃圾回收器与MissionControl服务, 使用HotSpot的JIT编译器与混合的运行时系统。
什么是HotSpot虚拟机相关推荐
- Java 14 Hotspot 虚拟机垃圾回收调优指南!
点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | 大鹏123 来源 | www.cnblogs. ...
- JVM-02内存区域与内存溢出异常(中)【hotspot虚拟机对象】
文章目录 思维导图 对象的创建 对象的内存布局 实例数据(Instance Data) 对齐填充(Padding) 对象的访问定位 使用句柄(类似间接指针) 直接指针访问 (HotSpot采用这种方式 ...
- JVM hotspot虚拟机对象探秘
为什么80%的码农都做不了架构师?>>> 本文全部内容均转述自<深入理解Java虚拟机 JVM高级特性与最佳实践(第二版)>2.3节 下载地址:http://pan ...
- HotSpot虚拟机在Java堆中对对象的管理
在大概了解了Java虚拟机中内存的大致分布后,接下来就应该了解虚拟机是如何在内存中管理对象的,毕竟Java是一门面向对象的语言,在Java程序的运行过程中会不断有对象创建出来.为了方便,这里仅仅以Ho ...
- Hotspot虚拟机的对象
创建 Step1:类加载检查 虚拟机遇到一条 new 指令时,首先将去检查这个指令的参数是否能在常量池中定位到这个类的符号引用,并且检查这个符号引用代表的类是否已被加载过.解析和初始化过.如果没有,那 ...
- Java对象创建、分配、布局、访问小析(HotSpot虚拟机)(二)
本文内容总结自周志明先生所编著的<深入理解Java虚拟机-JVM高级特性与最佳实践>此书的经典不必多说.本节内容是对象的内存布局. 在HotSpot虚拟机中,对象在内存中存储的布局可以分为 ...
- JVM成神之路-HotSpot虚拟机-编译原理、JIT、编译优化
Java编译原理 什么是字节码.机器码.本地代码? 字节码是指平常所了解的 .class 文件,Java 代码通过 javac 命令编译成字节码 机器码和本地代码都是指机器可以直接识别运行的代码,也就 ...
- Java HotSpot 虚拟机选项 -X -XX 的含义
1.JDK 7 及以前版本 官方文档对 -X.-XX的说明如下: Options that begin with -X are non-standard (not guaranteed to be s ...
- java 指定垃g1圾收集_【译】Java 14 Hotspot 虚拟机垃圾回收调优指南
本文主要包括以下内容:优化目标与策略(Ergonomics) 垃圾收集器实现(Garbage Collector Implementation) 影响垃圾收集性能的因素总堆(Total Heap) 年 ...
- HotSpot虚拟机GC调优指南
原文:https://docs.oracle.com/javase/9/gctuning/JSGCT.pdf 1简介 从桌面小程序applet到大型服务器上的Web服务,有各种各样的应用程序在使用Ja ...
最新文章
- 新概念机房运维监控三大新理念
- 实现接口Controller定义控制器
- boost::geometry:::detail::overlay::get_clusters用法的测试程序
- java合并整形_Java:合并InputStreams(Java: merging InputStreams)
- Object+C语法快速入门
- lua是编译成c语言再执行嘛,go_lua_c: 使用go编译lua脚本为字节码,通过网络传给c,通过c执行lua脚本。...
- java 登陆实例,2021-03-19 java案例:用户登录
- bzoj4820[SDOI2017]硬币游戏
- 数据表 高水位 mysql_Oracle中的高水位(HWM)
- C# winform小票打印
- java get提交中文乱码_java中form以post、get方式提交数据中文乱码问题总结
- linux网络绑定和网络成祖,圣斗士之家
- InVEST实践与进阶及在生态系统服务供需、固碳、城市热岛、论文写作
- MySQL环境变量的配置(详细教程)
- 最近羊毛小更新 青龙面板 薅羊毛 22/6/6更新
- error ‘for’ loop initial declarations are only allowed in C99 mode的报错原因和两种解决办法
- ubuntu系统录屏recordmydesktop与ogv视频转换MP4
- uni-app云开发的网盘助手微信小程序源码抓取网盘资源引流好助手
- 企业上云的选择及好处
- android 同根动画_[转载]Android anim动画切换效果
热门文章
- 基于opencv-python的车道线检测(高级)
- Unity可用的热更新方案
- Android项目小结——硬解码(MediaCodec实现[MP4]转YUV420各种格式)
- 小人物走路、奔跑的VC++游戏特效,适合刚学习VC++游戏编程的朋友
- @loj - 2478@「九省联考 2018」林克卡特树
- 设计模式七大原则总结
- 编写可变参数函数 c语言,C语言可变参数函数的编写
- docker镜像加速,docker更换为国内镜像
- vue tsx render函数 transition动画不生效
- nextcloud 修改 logo