关于java:JVM笔记-JVM经历了什么

7次阅读

共计 3012 个字符,预计需要花费 8 分钟才能阅读完成。

Sun Classic VM

  • 世界上第一款商用 Java 虚拟机,JDK1.4 曾经淘汰。
  • 外部只有解释器,能够本人外挂 JIT 编译器,然而二者只能应用其一,不能配合工作。
  • hotspot 内置了该虚拟机。

解释器,须要逐行解释执行,效率低下。譬如:如果循环两千次,循环体很大,每次执行都须要解释执行。

JIT 编译器,除了能够间接全副即时编译,还能够统计出那些代码执行频率比拟高,这部分代码就是热点代码,JIT 编译器会将热点代码,提前编译成为机器指令,放在办法区缓存起来,下次执行到的时候,不须要解释执行,而是间接运行机器指令。(此时的 Classic VM 还不具备热点代码探测的性能,只会全副提前编译

即时编译器的执行效率很高,为什么不将它全副提前编译好缓存起来呢?

  • 全副提前编译,首次启动响应速度慢,会有卡顿的感觉,因为编译须要大量工夫。(次要起因)
  • 缓存代码,须要放在办法区,占用内存空间,容易溢出。
  • 翻译成为机器指令,则这部分缓存的 CodeCache 是不可能间接跨平台,因为不同环境的机器指令是不大一样的,只能每次运行前就全副编译。

Exact VM

为解决上一个虚拟机 Classic VM 的问题(解释器和即时编译器只能二选一),JDK 1.2 的时候,提出来的虚拟机。

精确内存治理:Exact Memory Management,虚拟机能够晓得内存中的某一个地位的数据具体是什么类型。

该虚拟机曾经初步具备了当初高性能虚拟机的雏形:

  • 热点代码探测
  • 编译器和解释器混合工作

遗憾的是,Exact VM 只在 Solaris 短暂应用,前面就被 Hotspot 代替了。

HotSpot VM

三大商用虚拟机之一。
由小公司 “Longview Technologies” 设计,该公司 1997 年被 Sun 收买,Sun 2009 年被甲骨文收买。
JDK 1.3 HotSpot 成为默认虚拟机,目前仍是,(JRockitJ9 都没有办法区),Hotspot在服务器,桌面,挪动端,嵌入式等都有利用。

HotSpot 名称起源次要是 热点代码探测技术

  • 通过计数器找到最具备编译价值的代码,触发即时编译和栈上替换。
  • 编译器和解释器协同工作,能够在响应工夫和最佳执行性能中获得均衡。解释器负责是启动工夫,而编译器次要是针对执行效率。

JRockit

三大商用虚拟机之一。
BEA 公司研发的,2008 年,BEA 公司被 Oracle 收买,OracleJDK8 中,在 Hotspot 的根底上,整合了 JRockit 的优良个性。

  • 专一于服务端利用,不太关注启动速度,外部不蕴含解释器实现,全副靠即时编译器编译后执行。
  • 号称世界上最快的虚拟机,执行性能强劲。
  • 针对提早敏感的利用也有解决方案 “JRockit Real Time”

J9

J9是三大商用虚拟机之一, 全称IBM Technology for Java Virtual Machine,简称 IT4J,外部称“J9”

定位和 HotSpot 差不多,号称世界上最快(在本人 IBM 的机器上最快)。

2007 年,IBM 公布了 J9 VM,命名OpenJ9,交给 Eclipse 基金会治理。

KVM 和 CDC/CLDC Hotspot

  • OracleJava ME 产品线上的两款虚拟机:CDC/CLDC Hotspot Implementation VM
  • KVMCLDC-HI 晚期产品
  • 次要是低端的挪动端,简略,轻量,高度可移植

    • 智能控制器,传感器
    • 老人手机,性能机

Azul VM

是与特定的硬件平台绑定,软硬件联合的专用的虚拟机,高性能 Java 虚拟机中的战斗机。

Azul VMAzul System 公司在 Hotspot 根底上进行大量改良,运行在自家专用硬件 Vega 零碎上的 Java 虚拟机。
每一个 Azul VM 能够治理至多数十个 CPU 和数百 GB 的内存,而且能够在 微小内存范畴内实现可控的 GC 工夫 的垃圾收集器。

2010 年后,Azul System 公布了通用平台的 Zing 虚拟机。

BEA Liquid VM

高性能 Java 虚拟机中的战斗机,BEA公司开发,运行在本人的 Hypervisor 零碎上。

Liquid VM 不须要操作系统的反对,能够说自身曾经实现了一个专用的操作系统的必要性能,比方线程调度,文件系统,网络反对等。JRockit进行开发,Liquid VM 研发也进行了。

Apache Harmony

Apache 已经推出过 JDK 1.5, 1.6 兼容的 Java 运行平台 Apache Harmony

IBMIntel 联合开发,然而 OpenJDK 压抑,并且 Sun 拒绝给予 JCP 认证,2011 年服役,其中 Java 类库代码吸纳进入 Android SDK中。

Microsoft VM

微软推出的,在 IE3 中反对 Java Applets,然而 Sun公司 1997年指控微软侵权,后续微软抹去了 Microsoft VM

Taobao JVM

由阿里推出,基于OpenJDK Hotspot Vm,革新,深度定制一款高性能虚拟机。

  • 翻新的 GCIH(GC invisible heap)技术,实现了 off-heap,将生命周期较长的 Java对象从 heap 中挪动到 heap 之外,并且 GC 不能治理 GCIH 外部的 Java 对象,升高了 GC 的回收频率和进步 GC 的回收效率。
  • GCIH 中的对象能够多个 Java 虚拟机过程之间共享。
  • 应用 crc32 指令实现 JVM intrinsic 升高JNI 的调用开销。
  • PMU hardwareJava profiling tool 和诊断帮助性能
  • 针对大数据场景的ZenGC

毛病:硬件重大依赖 Intelcpu,损失兼容性。

Dalvik VM

  • 谷歌开发,利用于 Android 零碎,并且在 Android 2.2 中提供了 JIT。只能称虚拟机,而不是“Java 虚拟机”,没有遵循Java 虚拟机标准。
  • 不能间接执行 Javaclass文件。
  • 基于寄存器架构,而不是栈的架构。
  • 执行的是编译当前的 dex(dalvik Executale) 文件,执行效率比拟高。dex文件能够通过 Class 文件转化而来,应用 Java 语法编写应用程序,能够间接应用大部分Java API
  • Android 5.0 应用提前编译(Ahead of Time Compilation,AOT)的ART VM 替换Dalvik VM

PS:Android文件 .apk 批改文件后缀为 .zip, 解压之后就是很多文件, 当然也包含.dex 文件。

Graal VM

理念:“Run Program Faster Anywhere”

  • Hotspot VM 根底上加强,跨语言全栈虚拟机,能够作为任何语言的运行平台。
  • 反对不同语言混用接口和对象
  • 原理是将这些语言的源代码或者两头格局,通过解释器转化成为一种 Graal VM 承受的两头格局。
  • 在运行时可能进行即时编译优化,取得更优良的执行效率。

最初:具体 JVM 的内存构造,取决于其实现,不同产商或者同一个产商的不同版本,都可能存在肯定的差别。个别咱们说的,是指 Hotspot 虚拟机。

【作者简介】
秦怀,公众号【秦怀杂货店】作者,技术之路不在一时,山高水长,纵使迟缓,驰而不息。集体写作方向:Java 源码解析,JDBC,Mybatis,Spring,redis,分布式,剑指 Offer,LeetCode 等,认真写好每一篇文章,不喜爱题目党,不喜爱花里胡哨,大多写系列文章,不能保障我写的都完全正确,然而我保障所写的均通过实际或者查找材料。脱漏或者谬误之处,还望斧正。

2020 年我写了什么?

开源编程笔记

素日工夫贵重,只能应用早晨以及周末工夫学习写作,关注我,咱们一起成长吧~

正文完
 0