在学习JVM之前,先分享一则信息:2009 年4月20日,Orace 宣布正式以74 亿美元的价格收购市值曾超过2000 亿美元的Sun公司,传奇的Sun Microsystems 从此落幕成为历史。

一、Java虚拟机的介绍

  首先登场的是,虚拟机的始组:Sun Classic / Exact VM,Sun Classic 被誉为世界上第一款商用Java虚拟机,只能使用纯解释器方式来执行,如果想要使用即时编译器则必须进行外挂,但是如果使用了外挂,那么解释器就不能工作了。

  所以,这个时候的Java语言很慢的印象,就在用户心中树立起来了。

  接下来,上场的是英雄气短的Exact VM,成名之作在于准确式内存管理,简单来说,就是虚拟机知道内存中某一个位置的数据具体是什么类型的。

  随之而来的是,武林盟主:HotSpot VM,是目前使用范围最广的Java虚拟机。就是这么一款吊炸天的虚拟机,是由一家小公司开发的。于是,在1997年,Sun公司,收购了Longview Technologies公司,从而获得了HotSpot虚拟机。名称中的HotSpot指的是:热点代码探测能力。可以通过执行计数器来找出最具有编译价值的代码,之后通知即时编译器以方法为单位进行编译。

  总的来说,只有编译器和解释器恰如其分的协同工作,可以在最优化的程序中,响应时间与最佳执行性能中取得平衡,而且无须等待本地代码的输出才能执行程序。

  江湖之间,并不只有打打杀杀,还有小家碧玉的虚拟机Mobile / Embedded VM,在嵌入式设备上,ME VM不仅面临外部忧患,而且还面临这自家SE Embedded的竞争和侵蚀。当然了,既然有武林盟主,当然还有长老、大师之类的角色。天下第二的BEA JRockit / IBM J9 VM 在历史上也存在着一定的地位。BEA公司的JRockit 可是号称“世界上速度最快的Java虚拟机”,BEA 将自家的JRockit虚拟机着重发展成为专门为服务器硬件和服务端应用场景高度优化的虚拟机,JRockit 内部不包含解释器的实现,全部代码都靠着即时编译器编译后执行。JRockit 的垃圾收集器也是处于Java虚拟机的领先水平。但是,随着BEA 公司被Oracle公司收购,版本永远停留在了R28。

  IBM J9虚拟机的定位,跟HotSpot差不多,在设计上全面考虑服务端、桌面应用,再到嵌入式的多用途虚拟机,J9的职责分离与模块化做的比HotSpot更加的优秀。

  当然了,除了平常运行的商业虚拟机,还有一些软硬件相结合工作的专有虚拟机,往往能够实现更高的执行性能,比如Liquid VM,它直接越过通用的操作系统去直接控制硬件,不需要进行内核态/用户态的切换,可以最大限度地发挥硬件的能力。Azul VM虚拟机提供了巨大内存范围内停顿时间可以控制的垃圾收集器(PGC和C4收集器),但是这个虚拟机是Azul公司在HotSpot虚拟机的基础上,进行大量改进得来的。Azul公司发布了自己的Zing虚拟机,Zing虚拟机的好处实在是太多了,可以让普通用户无须了解垃圾收集等底层调优,享有低延迟、快速预热、易于监控的功能。这可是Zing虚拟机的核心价值与卖点。

  有擂主就肯定有挑战者的存在,这里的挑战者是来自Apache的Harmony与Google  公司的Android Dalvik 虚拟机,但是这两个虚拟机不能被称为Java虚拟机。在虚拟机的海洋中,不仅仅只有商用虚拟机,还有一些设计之初就仅仅抱着研究、验证某种技术和观点。比如:KVM、Java Card VM、Squawk VM、JavaInJava、Maxine VM、Jikes RVM、IKVM.NET等等。   

Java虚拟机(JVM):第一幕:起源,不一定全,但是一定靠谱的更多相关文章

  1. 深入解析java虚拟机-jvm运行机制

    转自oschina 一:JVM基础概念 JVM(Java虚拟机)一种用于计算设备的规范,可用不同的方式(软件或硬件)加以实现.编译虚拟机的指令集与编译微处理器的指令集非常类似.Java虚拟机包括一套字 ...

  2. Java虚拟机(JVM)知多少

    本文大量参考:https://www.cnblogs.com/lfs2640666960/p/9297176.html 概述 JVM是JRE的一部分.它是一个虚构出来的计算机,是通过在实际的计算机上仿 ...

  3. 深入理解java虚拟机JVM(下)

    深入理解java虚拟机JVM(下) 链接:https://pan.baidu.com/s/1c6pZjLeMQqc9t-OXvUM66w 提取码:uwak 复制这段内容后打开百度网盘手机App,操作更 ...

  4. java虚拟机jvm启动后java代码层面发生了什么?

    java虚拟机jvm启动后java代码层面发生了什么? 0000 我想验证的事情 java代码在被编译后可以被jdk提供的java命令进行加载和运行, 在我们的程序被运行起来的时候,都发生了什么事情, ...

  5. Java虚拟机JVM学习07 类的卸载机制

    Java虚拟机JVM学习07 类的卸载机制 类的生命周期 当Sample类被加载.连接和初始化后,它的生命周期就开始了. 当代表Sample类的Class对象不再被引用,即不可触及时,Class对象就 ...

  6. Java虚拟机JVM学习06 自定义类加载器 父委托机制和命名空间的再讨论

    Java虚拟机JVM学习06 自定义类加载器 父委托机制和命名空间的再讨论 创建用户自定义的类加载器 要创建用户自定义的类加载器,只需要扩展java.lang.ClassLoader类,然后覆盖它的f ...

  7. Java虚拟机JVM学习05 类加载器的父委托机制

    Java虚拟机JVM学习05 类加载器的父委托机制 类加载器 类加载器用来把类加载到Java虚拟机中. 类加载器的类型 有两种类型的类加载器: 1.JVM自带的加载器: 根类加载器(Bootstrap ...

  8. Java虚拟机JVM学习04 类的初始化

    Java虚拟机JVM学习04 类的初始化 类的初始化 在初始化阶段,Java虚拟机执行类的初始化语句,为类的静态变量赋予初始值. 在程序中,静态变量的初始化有两种途径: 1.在静态变量的声明处进行初始 ...

  9. Java虚拟机JVM学习03 连接过程:验证、准备、解析

    Java虚拟机JVM学习03 连接过程:验证.准备.解析 类被加载后,就进入连接阶段. 连接就是将已经读入到内存的类的二进制数据合并到虚拟机的运行时环境中去. 连接阶段三个步骤:验证.准备和解析. 类 ...

  10. Java虚拟机JVM学习02 类的加载概述

    Java虚拟机JVM学习02 类的加载概述 类的加载 类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对 ...

随机推荐

  1. kaggle中训练得到的output太大该怎么下载?

    最近在使用Kaggle平台训练自己的模型,但是训练结束之后由于模型过大导致output那里一直在加载(转圈),即使加载出来点击download也没有反应 下面借鉴知乎大佬的方法可以完美解决!通过将其压 ...

  2. Redis理论

    什么是Redis Redis(Remote Dictionary Server)是使用C语言编写的,开源的(BSD许可)高性能非关系型(NoSQL)的键值对数据库. Redis可以存储键和五种不同类型 ...

  3. IRF技术介绍及配置介绍

    IRF技术介绍及配置介绍 IRF(Intelligent Resilient Framework,智能弹性架构)是 H3C 自主研发的软件虚拟化技术. 它的核心思想是将多台设备通过 IRF 物理端口连 ...

  4. Linux-用户管理命令(必须是超级管理员-root)

    useradd   [名字] 创建一个新用户  (home  下创建) useradd -d [路径][名字]   路径中的名字是文件  , 登录用的后面的名字 passwd  [用户名] 设置密码, ...

  5. CF1855B Longest Divisors Interval 题解

    题意: 给定一个数 \(n\),求一个连续区间 \([l,r]\) 使得 \(n\) 是区间内每个数的倍数,最大化这个区间的长度(多组数据). 思路: 逆向思考一波,( 如果一个数 \(x\) 不是 ...

  6. ValueError: Max value is 14 解决方案

    方案一(有时会失效): 将EXCEL文件中的格式全部清除即可.最好是复制,然后只粘贴值. 方案二(指定引擎): data = pd.read_excel(path, engine="open ...

  7. 代码随想录算法训练营第四天|力扣24.两两交换链表节点、力扣19.删除链表的倒数第N个结点、力扣面试02.07链表相交、力扣142.环形链表

    两两交换链表中的节点(力扣24.) dummyhead .next = head; cur = dummyhead; while(cur.next!=null&&cur.next.ne ...

  8. .Net Web API 004 Controller获取对象列表,传入数据以及对象

    1.返回UserEntityList 这个服务接口的目的是分为用户列表,代码如下所示. /// <summary> /// 得到用户列表 /// </summary> /// ...

  9. 【更新】【解决中文文件名乱码】mac一键获取最新datagrid 2017.3注册码到剪贴板

    背景与前版实现请见: 前版原文 需要the unarchiver 解决中文文件名在mac上创建文件异常. 代码调整 IDEA_JIHUOMA_HOME="/tmp/idea-jihuoma& ...

  10. 可不要忽视了TypeScript中函数和类的重要性

    上一篇文章总结了 TypeScript的类型注解,这一篇来聊聊同样重要的函数和类 函数 以下声明了一个函数类型,通过type来定义类型别名,void 表示没有返回值 type fnType = () ...