JVM发展历程以及各大JVM介绍

2023-11-13

JVM发展历程以及各大JVM介绍

这篇文章中主要我们是要讲述以下HotSpot VM的由来

SUN Classic VM的介绍:

早在1996年Java1.0版本的时候, Sun公司就发布了一款名为Sun Classic Vm的Java虚拟机, 他同时也是世界上第一款商用Java虚拟机, JDK1.4的时候完全被淘汰了

  • 这款虚拟机内部只提供了解释器
    • 所以这也是为什么早期的Java的效率比较低的原因, 但是现在Java在如此庞大的生态环境下已经是一步步的开发,提升, 现在Java程序的执行效率已经是可以和C/C++一较高下了
      • 那么如今Java已经效率上可以和C/C++一较高下了, 是否以后就能取代掉C和C++?
        • 答案是不行的, 这个世界上没有最好的语言, 至于最适合某项工作的语言 , 每一个语言都有自己的长处
  • Sun ClassIc VM中如果要使用JIT编译器, 就需要外挂, 但是一旦使用了JIT编译器之后, JIT就会接管虚拟机的执行系统, 解释器就不再工作, 也就是JIT编译器和解释器在Sun Classic VM上只能同时使用一个, 不能混合使用
    • 如果只使用JIT编译器, 而不使用解释器, 那么程序的执行效率确实是提高了, 但是启动程序时的响应时间会增长, 并且由于JIT编译器编译之后的机器指令是放在方法区的, 所以占用内存也是一定的问题,JIT编译器编译后生成的机器指令的大小会是字节码文件的十倍大小左右, 还是比较占用空间的, 但是现在我们的JVM中的方法区已经可以使用本地内存了, 所以对于这一点空间其实影响也不是很大
      • 一些服务器中安装的JVM是只有JIT的, 因为在服务器中我们需要的是程序的执行效率, 对程序启动速度则是不怎么看重了
  • 现在HotSpot VM内置了Sun Classic Vm

Exact VM(准确式的虚拟机)

这里准确式指定是准确式的内存管理

为了解决Sun Classic VM虚拟机的一些问题, JDK1.2时Sun提供了此虚拟机

  • Exact Memory Management : 准确式的内存管理

    • 虚拟机可以知道内存中的某个位置具体是什么类型.
    准确式内存管理是指虚拟机可以知道内存中的某个位置的数据具体是什么类型. 比如内存中有一个32bit的整数123456, 虚拟机将有能力分辨出他到底是指向了一个123456的内存地址的引用类型, 还是就是一个数值为123456的整数.
    准确分辨出哪些内存是引用类型, 这也是在垃圾收集时准确判断堆中的数据是否还可能被使用的前提, 由于使用了准确式的内存管理, Exact VM可以抛弃掉以前Sun Classic VM基于句柄(Handle)的对象查找方式(原因是垃圾收集之后对象可能会被移动位置, 如果地址为123456的对象要移动到654321, 在没有明确信息表明内存中哪些数据是引用类型数据的前提下, 那么虚拟机肯定是不敢把内存中所有为123456的值改成654321的, 所以要以前使用句柄来保持引用值的稳定), 现在这样每次定位对象都少了一次间接查找的开销, 显著的提升了性能
    
  • 具备了现代高性能虚拟机的雏形

    • 热点探测
    • 编译器与解释器混合工作模式
  • 但是Exact VM只在Solaris平台短暂使用, 其他平台还是Classic VM, 最终很快又被新诞生的HotSpot VM替换

HotSpot VM:

HotSpot历史:

最初由一家名为"Long View Technologies"的小公司设计, 1997年被sun公司收购

  • JDK1.3的时候,HotSpot VM成为默认虚拟机
  • 目前HotSpot VM有绝对的市场地位
    • 不管是现在仍然有人使用的JDK6, 或者是现在大多使用的JDK8, 默认的虚拟机都是HotSpot
    • Sun/Oracle JDK和Open JDK的默认虚拟机都是HotSpot(也就是开源JDK和不开源JDK都是使用的HotSpot作为默认虚拟机)
  • 从服务器, 桌面到移动端, 嵌入式都有应用
  • 名称中的HotSpot指的就是它的热点代码探测技术
    • 通过计数器找到最具编译价值的代码, 触发即时编译或者栈上替换(栈上替换: OSR)
      • 我们目前只需要记住即使编译和栈上替换都是对热点代码进行处理的技术
  • 通过编译器与解释器协同工作, 在最优化的程序响应时间与最佳执行性能中取得平衡

补充:

目前三大主要商用虚拟机:
  1. HotSpot
  2. JRockit
    • 注意: 是JRockit而不是JRocket, 这里Rockit的意思是尽情摇摆的意思, 很多人都以为是Rocket(火箭)
  3. J9

HotSpot历史:

  • 最初是
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JVM发展历程以及各大JVM介绍 的相关文章

随机推荐

  • 以http协议实现onvif协议并完成对IPC摄像头的监控

    文章目录 目录 文章目录 前言 1实现http连接 2 获取设备编码参数 3 设置摄像头相关参数 总结 前言 因为工作上的原因 需要接入IPC摄像头 实现监控功能 因而开始了对于IPC摄像头的学习之路 因为要做到通用 所以目光直接锁定了on
  • python爬虫增加多线程获取数据

    Python爬虫应用领域广泛 并且在数据爬取领域处于霸主位置 并且拥有很多性能好的框架 像Scrapy Request BeautifuSoap urlib等框架可以实现爬行自如的功能 只要有能爬取的数据 Python爬虫均可实现 数据信息
  • 国产数据库产品清单

    01 提到国产数据库 圈儿内的朋友多数会说出国产数据库 四大家族 达梦 金仓 南大 神通 那么除了这四家 你还是否还了解其他的国产数据库产品 随着国内信息技术的快速发展 以及近几年去 O 的强势浪潮 在国内各数据库厂商的不断努力下 国产数据
  • 区块链实验室(14) - 编译FISCO-BCOS

    FISCO BCOS是一种区块链平台 与Hyperledger和Ethereum有些不同 详见FISCO BCOS 区块链 编译FISCO BCOS源码的目的是修改或者新增其中功能模块 进行对比实验 验证新想法 新创意的效果 编译的步骤很简
  • SQLi-Labs 学习笔记(Less 41-50)

    点击打开链接 Less 41 基于错误的POST型单引号字符型注入 先打开网页查看 Welcome Dhakkan 与之前讲的Less 40的区别 plain view plain copy sql SELECT FROM users WH
  • WPF性能优化经验总结

    原文地址 WPF性能优化经验总结 痴鸟 博客园 WPF性能优化一 Rendering Tier 1 根据硬件配置的不同 WPF采用不同的Rendering Tier做渲染 下列情况请特别注意 因为在这些情况下 即使是处于Rendering
  • 服务器添加网卡

    原因 因为网络原因服务器需要添加网卡 1 确定主板卡槽 是否可以添加网卡 2 命令ip a 查看现有网卡 3 命令 cd etc sysconfig network scripts 查看文件列表 enpls0 网卡对应文件ifcfg enp
  • 建模杂谈系列215 ADBS Update V3

    说明 本来在完成这次量化实验之前不想再改版 但想想至少还有3个ADBS要在本次中完成 算下来改所花的时间还是少于因为不改而做的额外配置 所以还是改 本次升级要解决几个问题 1 Redis Var的配置化管理 2 Worker 的命令行配置
  • 达芬奇17新功能及安装教程

    说起视频剪辑处理软件 除了知名的pr备受大家喜爱 但DaVinci Resolve也不甘示弱 又名达芬奇 这是一款集剪辑 调色 专业音频后期制作于一身的电脑视频处理软件 不仅拥有简洁明了 美观新颖的主界面 还直接划分了编辑 修剪 时间线 片
  • Mysql存储引擎

    目录 一 前言 二 存储引擎 1 InnoDB存储引擎 1 1 简介 1 2 优势 1 3 使用方法 1 4 性能 2 MyISAM存储引擎 2 1 优势 2 2 使用方法 2 3 性能 3 MEMORY存储引擎 4 MyISAM 三 比较
  • 用pip在pycharm里安装mysql_即使正确安装了pip和MySQL连接器,我也无法在Pycharm上连接到MySQL...

    我已经正确地安装了mysql连接器 命令提示符甚至显示安装成功 但是由于某些原因Pycharm在安装连接器时显示了错误 在 编码器从这里开始Collecting mysqlconnector Using cached https files
  • centos7安装弱口令破解工具hydra

    1 下载压缩包 wget https github com vanhauser thc thc hydra archive master zip 2 安装gcc和解压命令 yum y install gcc libssh devel ope
  • Linux环境部署:开启电脑虚拟化

    学习目标 开启电脑虚拟化 查看笔记本是否支持虚拟化 进入BIOS 开启VT 开启电脑虚拟化 查看笔记本是否支持虚拟化 进入BIOS 参考以下按键 开机时按住对应的键进入BIOS 组装机以主板分 华硕按F8 Intel按F12 其他品牌按ES
  • 【生信算法】利用HMM纠正测序错误(Viterbi算法的python实现)

    利用HMM纠正测序错误 Viterbi算法的python实现 问题背景 对两个纯系个体M和Z的二倍体后代进行约 0 05x的低覆盖度测序 以期获得后代个体的基因型 即后代中哪些片段分别来源于M和Z 已知 后代中基因型为MM MZ 杂合 和Z
  • 阿里云新建linux mysql中中文乱码的解决方案

    首先不得不说 我被阿里云给搞死了 起初我以为不是mysql的问题 因为每张表我都指定他的编码格式为utf 8 但结果是整个数据库的编码格式都是lanti1 就是你可以输入指令show variables like char 来查看你数据库的
  • 编写一个程序,对于给定字符串中出现的全部字符(含中文字符)频率进行分析,采用降序方式输出

    txt input 请输入一段文本 输入 txt txt lower 全部小写 count 定义一个字典 for word in txt count word count get word 0 1 计算字典键值的值 items list c
  • Access denied for user ‘‘@‘localhost‘(using password: NO)

    Access denied for user localhost using password NO 问题描述 Access denied for user localhost using password NO 用户 localhost
  • 字节校招面试题分享,别人已经开始面试了,你不会还没有准备吧?

    字节面试题分享 了解校招 还有前端校招面试题分享 不容错过 字节跳动 校招 一面 TCP UDP是什么 区别 应用 什么是字节流 什么是数据报 TCP为啥可靠 超时重传 累计确认的过程 HTTP跟TCP的联系 http通信过程 http头部
  • boost 里面有状态机了_c – 如何使用boost :: statechart在固定数量的线程上复用许多异步状态机?...

    假设我有许多使用boost statechart定义的异步状态机 用于运行多个异步状态机的明确记录的机制是将一个或多个异步状态机固定到线程 但是 出于我的目的 我需要运行许多很多异步状态机 每个线程一个不会 此外 任何给定状态机完成的工作量
  • JVM发展历程以及各大JVM介绍

    JVM发展历程以及各大JVM介绍 这篇文章中主要我们是要讲述以下HotSpot VM的由来 SUN Classic VM的介绍 早在1996年Java1 0版本的时候 Sun公司就发布了一款名为Sun Classic Vm的Java虚拟机