深入理解JVM虚拟机第四篇:一些常用的JVM虚拟机

news2024/9/20 22:54:40

一:Sun Classic VM虚拟机

        早在1996年Java1.0版本的时候,Sun公司发布了一款名为Sun classic VM的Java虚拟机,它同时也是世界上第一款商用Java虚拟机,JDK1.4时完全被淘汰。 现在hotspot内置了此虚拟机。

        这款虚拟机内部只提供解释器,当前主流的虚拟机都会提供解释器+JIT及时编译器。

        如果使用JIT编译器,就需要进行外挂。但是一旦使用了JIT编译器,JIT就会接管虚拟机的执行系统。解释器就不再工作。解释器和编译器不能配合工作。这样做会有什么问题呢?将所有的字节码指令(不仅仅是热点代码)都编译好缓存起来。编译成机器码的时候也是要花时间的,每一行都进行编译会消耗时间,也就会暂停时间过长,导致程序启动的时候会有一段时间卡顿。二者结合起来效率更高。

       以下是JVM虚拟机执行引擎下的解释器与JIT及时编译器的图解:

        只提供解释器不提供及时编译器的话在功能上是没有问题的,都可以将字节码中的指令按照顺序一行一行的解释执行,但是执行效率来讲相对是比较差的。 比如说:循环两万次,那么循环中的两万次代码都会被一遍遍解释执行。(热点代码的概念就是,程序中反复被执行的代码)热点代码被执行下来之后,会被编译成本地指令缓存起来,下次执行就不需要在进行编译了,这是它高效的原因。

二:Exact VM虚拟机

        为了解决上一个虚拟机问题,jdk1.2时,sun提供了此虚拟机。

        Exact Memory Management:准确式内存管理。

        虚拟机可以准确知道内存某一个位置的数据类型具体是什么类型的。具体引用的这个内容是一个具体的数据大小,还是一个对象的地址,在这个虚拟机当中是可以准确知道的。我们知道一些垃圾回收方式会导致对象被整理、地址被改变(标记整理算法、复制算法),这样的虚拟机就可以支持这样的垃圾回收方式。

        也可以叫Non-Conservative/Accurate Memory Management

        虚拟机可以知道内存中某个位置的数据具体是什么类型。

        具备现代高性能虚拟机的雏形:

        热点探测,可以快速识别热点代码

        编译器与解释器混合工作模式,大大提高了程序的运行速度。

        只在Solaris平台短暂使用,其他平台上还是classic vm

        英雄气短,终被Hotspot虚拟机替换

三:HotSpot VM虚拟机

        最初由一家名为“Lonqview Technologies”的小公司设计

        1997年,此公司被Sun收购;2009年,Sun公司被甲骨文收购。

        JDK1.3时,HotSpot VM成为默认虚拟机

        不管是现在仍在广泛使用的JDK6,还是使用比例较多的JDK8中,默认的虚拟机都是HotSpot
Sun/Oracle JDK 和 OpenJDK的默认虚拟机

        因此本系列文章中默认介绍的虚拟机都是HotSpot,相关机制也主要是指HotSpot的GC机制。(比如其他两个商用虚拟机都没有方法区的概念)从服务器、桌面到移动端、嵌入式都有应用。

        名称中的HotSpot指的就是它的热点代码探测技术通过计数器找到最具编译价值代码,触发即时编译或栈上替换通过编译器与解释器协同工作,在最优化的程序响应时间与最佳执行性能中取得平衡        

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

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

相关文章

入门人工智能 ——使用 tensorflow 训练一个新闻分类模型(6)

入门人工智能 ——使用 tensorflow 训练一个新闻分类模型(6) 入门人工智能 ——使用 tensorflow 训练一个新闻分类模型使用 tensorflow 训练一个新闻分类模型1. 安装TensorFlow和所需的依赖项。2. 打开收集的新闻数据集构建模型模型训练模型评估保存模型…

hadoop启动报错:Attempting to operate on hdfs namenode as root

在hadoop安装路径的 /hadoop/sbin路径下: 将start-dfs.sh,stop-dfs.sh两个文件顶部添加以下参数 #!/usr/bin/env bash HDFS_DATANODE_USERroot HADOOP_SECURE_DN_USERhdfs HDFS_NAMENODE_USERroot HDFS_SECONDARYNAMENODE_USERroot还有,star…

基于STM32+华为云IOT设计的智能窗帘控制系统

一、项目背景 随着智能家居技术的不断发展,人们对于家居生活的需求也越来越高。智能窗帘作为智能家居领域的重要组成部分,为用户提供了更便捷、舒适的生活体验。本项目基于STM32主控芯片和华为云物联网平台,设计一款智能窗帘控制系统&#x…

学习记忆——宫殿篇——记忆宫殿——记忆桩——知识讲解

类比 假设这些桩子好比不同的交通工具,每一种交通工具都可以助我们到达目的地,那举现在就根据你的时间以及现实情况,选择最合适自己的交通工具即可,重点在于你要熟悉每种交通工具的用途不区别。桩子也是如此,把所有的桩…

pat多项式求和

idea 权重记得也是浮点数&#xff0c;否则2&#xff0c;5测试点不过 solution #include <stdio.h> int main(){int n ;double x0, ans 0, power 1;scanf("%d%lf", &n, &x0);double a[n1];for(int i 0; i < n; i)scanf("%lf", a i)…

Docker+jenkinsPipeline运行实现python自动化测试(超详细)

一、实现思路 在 Linux 服务器安装 docker创建 jenkins 容器jenkins 中创建 pipeline 项目根据自动化项目依赖包构建 python 镜像(构建自动化 python 环境)运行新的 python 容器&#xff0c;执行 jenkins 从仓库中拉下来的自动化项目执行完成之后删除容器 二、环境准备 Linu…

Java基础入门·多线程·线程池ThreadPool篇

前言 特点分析 线程池ThreadPool 销毁线程池 Executor类 ​​​​​​​ ​​​​​​​ ​​​​​​​ Callable接口 线程池使用 ​​​​​​​…

全面详解Maven的配置文件pom.xml(含常用plugin)

系列文章目录 手把手教你maven的安装与配置(windows) 全面详解Maven的配置文件pom.xml&#xff08;含常用plugin&#xff09; 系列文章目录一、什么是pom.xml二、pom.xml的结构三、项目的基本信息1.modules2.parent3.scm4.properties 四、项目的依赖列表1.dependency2.reposit…

【Cocos Creator 3.5实现赛车游戏】10.实现汽车节点的运动逻辑

转载知识星球 | 深度连接铁杆粉丝&#xff0c;运营高品质社群&#xff0c;知识变现的工具 项目地址&#xff1a;赛车小游戏-基于Cocos Creator 3.5版本实现: 课程的源码&#xff0c;基于Cocos Creator 3.5版本实现 上一节的学习后&#xff0c;您已经完成了对汽车节点的控制逻…

数字IC设计之时序分析基础概念汇总

1 时钟Clock 理想的时钟模型是一个占空比为50%且周期固定的方波。时钟是FPGA中同步电路逻辑运行的一个基准。理想的时钟信号如下图: 2 时钟抖动Clock Jitter 理想的时钟信号是完美的方波&#xff0c;但是实际的方波是存在一些时钟抖动的。那么什么是时钟抖动呢?时钟抖动&#…

(2)数据库mongodb 终端 和 vscode创建数据库 数据导入导出

可视化工具&#xff1a; Robo 3T | Free, open-source MongoDB GUI (formerly Robomongo) mongodb安装官网&#xff1a;MongoDB: The Developer Data Platform | MongoDB 文档&#xff1a;安装 MongoDB - MongoDB-CN-Manual (mongoing.com) 配置环境变量&#xff1a; 是为了扩…

【图论】有向图的强连通分量

算法提高课笔记&#xff08;本篇未更新完 还有俩例题&#xff09; 文章目录 理论基础SCC板子 例题受欢迎的牛题意思路代码 学校网络题意思路代码 理论基础 什么是连通分量&#xff1f; 对于一个有向图&#xff0c;分量中任意两点u&#xff0c;v&#xff0c;必然可以从u走到v…

跑步运动耳机哪个牌子好、推荐几款专业跑步耳机

跑步是一项简单的运动&#xff0c;只要交替迈左右腿就能进行。然而&#xff0c;跑步也可能会变得单调乏味。即使是意志坚定、热爱跑步的人&#xff0c;在这漫长的过程中也会感到乏味&#xff0c;更不用说像你我这样的普通跑者了。音乐能够让跑步这项运动变得有趣起来&#xff0…

前端自适应瀑布流布局

JS案例自适应瀑布流 &#x1f31f;效果预览 &#x1f31f;什么是瀑布流 &#x1f31f;制作思路 &#x1f31f;具体实现 页面结构 js代码实现 &#x1f31f;写在最后 &#x1f31f;效果预览 前端自适应瀑布流效果预览 &#x1f31f;什么是瀑布流 瀑布流&#xff0c;又…

prize_p1

文章目录 解题过程代码审计思路问题解决数组绕过preg_match__destruct的触发修改phar文件以及签名phar://支持的后缀 题解方法一&#xff08;数组绕过&#xff09;方法二&#xff08;gzip绕过&#xff09; 解题过程 源代码 <META http-equiv"Content-Type" conte…

3D人体生成名人堂

一、马普所认知系统实验室。 Perceiving Systems - Max Planck Institute for Intelligent SystemsUsing computer vision, computer graphics, and machine learning, we teach computers to see people and understand their behavior in complex 3D scenes. We are located…

《Prometheus 监控实践:从零到英雄》

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f405;&#x1f43e;猫头虎建议程序员必备技术栈一览表&#x1f4d6;&#xff1a; &#x1f6e0;️ 全栈技术 Full Stack: &#x1f4da…

【服务器 | 宝塔】宝塔面板卸载重装教程:清理删除宝塔面板并重新开始

宝塔面板卸载重装怎么操作?我们很多用户可能安装宝塔之后会经常看一下有没有新版本&#xff0c;如果有新版直接右上角 宝塔面板卸载重装怎么操作?我们很多用户可能安装宝塔之后会经常看一下有没有新版本&#xff0c;如果有新版直接右上角”更新”升级一下版本就可以了&#…

1-4 AUTOSAR方法论

总目录——AUTOSAR入门详解AUTOSAR入门详解目录汇总&#xff1a;待续中。。。https://xianfan.blog.csdn.net/article/details/132818463 目录 一、前言 二、方法论 三、单个ECU开发流程 一、前言 汽车生产供应链上有以下角色&#xff1a;OEM、TIER1、TIER2&#xff0c;其主…

提示msvcr120.dll丢失怎样修复呢?全面分析msvcr120.dll解决方法

在计算机使用过程中&#xff0c;可能会遇到 msvcr120.dll 丢失的问题。msvcr120.dll 是 Microsoft Visual C Redistributable 的一部分&#xff0c;是一个动态链接库文件&#xff08;DLL&#xff09;&#xff0c;用于支持运行在 Windows 操作系统上使用了 Microsoft Visual C 2…