自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

JVM除了HotSpot,你還知道哪些?

開發(fā) 后端
一個Java虛擬機(JVM)是從未被物理建成硬件假想計算機。JVM 運行編譯成其虛構指令集的程序,該指令集作為稱為字節(jié)碼的中間表示寫入存儲。

你好,我是方向盤(YourBatman),坐穩(wěn)扶好,開始發(fā)車。

Title

Link

所屬專欄

【方向盤】-基本功

源代碼

https://github.com/yourbatman/FXP-java-ee

程序員專用網盤公益上線啦,注冊送1G超小容量,幫你實踐做減法

https://wangpan.yourbatman.cn

Java開發(fā)軟件包(Mac)

https://wangpan.yourbatman.cn/s/rEH0 提取碼:javakit

女媧工程

http://152.136.106.14:8761

版本約定

[JDK 1.0 - 17]

前言

如何理解Java是跨平臺的語言?Java是編譯型語言還是解釋型語言?JDK、JRE、JVM有什么區(qū)別?

這三個常見的問題,都繞不開一個主題詞:JVM。每一個Javaer都知道它,可謂又愛又恨,愛它是因為難,恨它也是因為難。

圖片

本文當然不是要去“深入理解Java虛擬機”,JVM發(fā)展這么多年,已有非常非常多關于它的權威的書籍、文章、視頻,雖然大都是一看就會,一做就廢...

本文非常輕松,問自己這個問題:“JVM除了HotSpot,你還知道哪些?”然后一起來了解了解JVM的發(fā)展及相關產品。

正文

一個Java虛擬機(JVM)是從未被物理建成硬件假想計算機。JVM 運行編譯成其虛構指令集的程序,該指令集作為稱為字節(jié)碼的中間表示寫入存儲。

在運行時,字節(jié)碼必須從虛構的指令集轉換為主機 CPU 的實際指令集。這可以由“口譯員”即時完成?;蛘咦止?jié)碼可以被完全編譯和緩存,以比通過解釋器運行得更快,在一個稱為即時 (JIT) 編譯的過程中。

幾十年來,有許多JVM 的實現。到現在的2022年,大多數都已經消失了。

基礎知識

老規(guī)矩,首先來個基礎知識鋪墊。

什么是JVM

JVM(Java Virtual Machine),即Java虛擬機。它是Java程序的運行平臺,是二進制字節(jié)碼的運行環(huán)境,它有很多發(fā)行的商用版本,其中最著名的當屬Oracle官方發(fā)行的,也是JDK默認的HotSpot。

JVM發(fā)展到今天,早已不是只為Java服務。它已然成為跨語言的平臺。只要是符合規(guī)范的字節(jié)碼文件交給它就可以執(zhí)行,比如Java就是.class字節(jié)碼,其它語言只需要通過各自的編譯器生成遵循JVM規(guī)范的字節(jié)碼文件,同樣可以運行在JVM上。

JVM規(guī)范

Java語言的各個版本對應的虛擬機規(guī)范:Java Language and Virtual Machine Specifications。

JVM是虛擬機,總的來說是一種標準規(guī)范,虛擬機有很多實現版本,是本文將要介紹的內容。

JVM所處的位置

JVM運行在操作系統(tǒng)之上,和硬件并無直接交互。字節(jié)碼文件運行在JVM之上,從而實現了字節(jié)碼跨平臺的效果。從下圖中可以也能得出一種解決問題的思想:沒有加一層解決不了的問題,如果有,那就再加一層。

圖片

跨平臺是如何實現的

這里指的跨平臺指的不是跨操作系統(tǒng),而是交給不同操作系統(tǒng)上的虛擬機幫你執(zhí)行了,屏蔽了底層的適配性。正所謂復雜度不會憑空消失,這里只是JVM幫你解決掉/屏蔽掉了這個復雜度。

一圖勝千言:

圖片

編譯器和解釋器的區(qū)別

  • 解釋器:直接執(zhí)行用編程語言編寫的指令的程序。
  • 編譯器是把源程序的每一條語句都編譯成機器語言,并保存成二進制文件,這樣運行時計算機可以直接以機器語言來運行此程序,速度很快。
  • 編譯器:把源代碼轉換成(翻譯)“低級”語言的程序。
  • 解釋器則是只在執(zhí)行程序時,才一條一條的解釋成機器語言給計算機來執(zhí)行,所以運行速度是不如編譯后的程序運行的快的圖片下面再通過表格對比二者詳細區(qū)別:

編譯器

解釋器

高級指令轉換為機器可理解的指令

無需轉換即可直接執(zhí)行高級代碼

將一個程序作為一個整體進行翻譯

一條一條地翻譯一個程序

生成中間代碼或目標代碼

無中間代碼

編譯后,將創(chuàng)建一個可執(zhí)行文件

每次執(zhí)行都需要解釋

編譯器種類:本機編譯器,交叉編譯器,源到源編譯器,一遍編譯器,增量編譯器,源編譯器

解釋器種類:字節(jié)碼解釋器,線程代碼解釋器,抽象語法樹解釋器

編譯器語言:Java Scala C/C++ C#

解釋器語言:PHP、Python、Ruby、JS

JVM發(fā)展史

  • 1996年JDK 1.0發(fā)布時,發(fā)布Sun Classic VM。第一款商用虛擬機,純解釋執(zhí)行。
  • 1997年JDK 1.1發(fā)布時,虛擬機沒有做變更。
  • 1998年JDK 1.2發(fā)布時,提供了Exact VM虛擬機,但僅限運行在Solaris平臺。默認虛擬機依舊是Sun Classic VM。
  • Solaris系統(tǒng)是Sun公司研發(fā)的操作系統(tǒng),是UNIX操作系統(tǒng)的衍生版本之一。
  • 2000年JDK 1.3發(fā)布時,默認虛擬機由Sun Classic VM改為大名鼎鼎的Sun HotSopt VM。
  • 此時Sun Classic VM還并未移除,作為備用。
  • 2002年JDK 1.4發(fā)布時,Sun HotSpot VM站穩(wěn)腳跟一直默認都現在,Sun Classic VM徹底退出商用虛擬機舞臺。
  • 2003年,Scala正式發(fā)布,同年Groovy也加入JVM陣營。
  • 2006年JDK 6發(fā)布時的同年,OpenJDK項目簡歷。順理成章,HotSopt VM也成為了OpenJDK默認虛擬機,直到現在。
  • 2008年,Oracle收購BEA,得到了JRockit虛擬機。
  • JRockit專注于服務器端應用,內部不包含解析器實現,號稱是世界上最快的JVM。
  • 2009年,Oracle收購了Sun,獲得Java商標和HotSpot虛擬機商標。
  • 2011年JDK 7發(fā)布時,在JDK1.7u4中,G1垃圾回收期首次路面。
  • 2014年JDK 8發(fā)布,用元空間MetaSpace員工間取代了PermGen永久代。
  • 2017年JDK 9發(fā)布,G1為HotSpot的默認GC,從此CMS成為歷史。
  • 同年,IBM的J9開源, 形成了現在的0pen J9社區(qū)。
  • 2018年Android的Java侵權案判決,Google賠償Oracle計88億美元。
  • 同年,Oracle宣告JavaEE成為歷史名詞,JDBC、JMS、 Servlet贈予Eclipse基金會。
  • 2020、2021、2022。

三大商用虛擬機

在Oracle還沒收購Sun公司之前,JVM虛擬器呈現三足鼎立的局面,各具優(yōu)勢,它們是:

  1. SUN公司的Hotspot:聊到虛擬機時,若沒做特殊說明,指的就是HotSpot。它是官方出品,純正血統(tǒng)。它的特點/優(yōu)勢是:熱點代碼探測技術,通過計數器找到最具有編譯價值的代碼,觸發(fā)即時編譯器(JIT)或棧上替換。
  2. BEA公司的JRockit:專注于服務器端應用,內部不包含解釋器,全部代碼都靠即時編譯器編譯執(zhí)行,號稱世界上最快的Java虛擬機。
  3. IBM公司的J9:市場定位與Hotspot接近,服務端、桌面、嵌入式都有應用,若部署在IBM自己的產品上,號稱是世界上最快的虛擬機。該虛擬機于2017年正式對外發(fā)布,名字為OpenJ9,并交給Eclipse基金會打理。

曾經的三分天下,現在其二已被Oracle收購,不得不感嘆,鈔能力才是最終王者。

Sun Classic VM(始祖)

1996年1月23日,Sun公司發(fā)布JDK1.0,Java語言首次擁有了商用的正式運行環(huán)境,它就是Classic VM。這是第一款商用的虛擬機,是JVM界的始祖。在JDK 1.2及之前,用戶用Classic虛擬機執(zhí)行java-version命令,將會看到類似下 面這行的輸出:

java version “1.2.2 Classic VM (build JDK-1.2.2-001, green threads, sunwjit)

在2002年年發(fā)布的jdk1.4后被完全淘汰,不見其蹤影。

這款虛擬機只能使用純解釋器方式來執(zhí)行Java代碼,如果要使用JIT編譯器(Just In Time 即時編譯器),就必須進行外掛。但是呢,如果外掛了JIT,那么就完全接管了解釋器的工作,那就不能稱作為Classic VM了。

這個階段的虛擬機即使外掛了JIT編譯器輸出本地代碼,執(zhí)行效率也和傳統(tǒng)的C/C++程序有很大差距,Java語言很慢的形象就是在這個時候開始在用戶心中建立起來的。

Exact VM(牛刀小試)

為了解決Sun Classic VM的慢,1998年在JDK 1.2發(fā)布時,曾在Solaris平臺(Sun基于Unix分支自研的操作系統(tǒng))上發(fā)布過一款名為Exact VM的虛擬機,是現代化高性能虛擬機的雛形,如熱點探測、兩級即時編譯器、編譯器與解釋器混合工作模式等。

這塊虛擬機只在Solaris平臺牛刀小試,并未大規(guī)模使用,后被HotSpot取代。

HotSpot VM(武林盟主)

這是一個目前使用范圍最廣的Java虛擬機,它是Oracle JDK和OpenJDK的默認JVM,是聊天時沒有特殊指定時的缺省JVM。

HotSpot VM正如其名,它的熱點代碼探測能力可以通過執(zhí)行計數器找出最具有編譯價值的代碼,然后通知JIT編譯器以方法為單位進行編譯。這樣子可以做到:如果某方法被頻繁調用,將會觸發(fā)標準編譯和OSR(棧上替換)編譯動作,編譯器和解釋器協(xié)同工作,可以在最優(yōu)化的程序響應時間與最佳執(zhí)行性能中取得平衡,而且無須等待本地代碼輸出才能執(zhí)行程序,即時編譯的時間壓力也相對減小,這樣有助于引入更多的代碼優(yōu)化技術。

如果說綜合表現,HotSpot VM可能最佳的虛擬機,它即可應用在資源相對充裕的Serve端,也可用桌面端,可謂通吃。圖片2008年,Oracle收購BEA,得到了JRockit虛擬機;隨后Oracle又收購了Sun,得到了Java和HotSpot虛擬機。JRockit和HotSpot都遵循JVM規(guī)范抽象只是是側重點不同,Oracle最終決定將二者整合(合并),且名稱仍叫HotSpot。

  • 2011年發(fā)布JDK 7,完成初步整合:方法區(qū)從永久代里分離出來。
  • 之前的JDK版本,常量池在方法區(qū)里,方法區(qū)在永久代里。7版本后分離出來了(但都在堆里)。
  • 2014年發(fā)布JDK 8,基本完成整合:廢棄永久代PermGen?,改用元空間。
  • JRockit沒有永久代,IBM的J9也沒有永久代。

JRockit VM(被Oracle收購)

JRockit層隸屬于BEA公司,美國NASDAQ上市公司,其中間件市場份額一度比IBM 還要高,2008年初被Oracle 收購。

被Oracle后,同HotSpot合并后取名為HotSpot,從此徹底“銷聲匿跡”。

J9 VM(天下第二)

大名鼎鼎的IBM的J9,和JRockit有很多相似的地方。在IBM自己的機器上號稱世界上最快的JVM虛擬機。IBM J9 VM并不是IBM公司唯一的Java虛擬機,不過是目前其主力發(fā)展的Java虛擬機。

與BEA JRockit專注于服務器端應用不同,IBM J9的市場定位與Sun HotSpot比較接近市場定位和HotSpot基本一樣,實力競品。

2017年,IBM發(fā)布了開源版本的J9 VM,命名為OpenJ9,并交給Eclipse基金會管理,所以也稱為Eclipse OpenJ9。

Azul VM(性能中的戰(zhàn)斗機)

Azul VM是與特定硬件平臺綁定、軟硬件配合的專有虛擬機,所以針對HotSpot做了大量改進,性能非常之高。但是:它只能運行在自己的系統(tǒng)以及硬件平臺上。

Zing VM(通用版Azul VM)

Azul VM的性能非常高,但只能運行在特定的平臺上,不能運行在普通的x86平臺。

2010年,Azul System公司方向一轉,開始從硬件轉向軟件,在Azul VM的基礎上自研,研發(fā)出了可以用在通用的Linux/x86-64平臺的Zing VM,主打低延遲、高實時服務器端JDK市場,性能號稱接近于Azul VM。提供著名的“ReadyNow”能力,參考文檔:https://www.azul.com/products/components/readynow。

但是,Zing VM 不開源,是收費的,并且還很貴很貴。要知道Azul是家商業(yè)化的公司,是要掙錢的呀。這不,在油管我就看到了Azul的廣告:

圖片圖片

Liquid VM(JRockit的虛擬化版本)

Liquid VM是JRockit VM 的虛擬化版本,可以在沒有標準操作系統(tǒng)的虛擬機管理程序上運行,允許Java 應用程序直接在虛擬化硬件上運行。

Liquid是BEA公司的產品,2008年后也隸屬于Oracle了,參考文檔:https://docs.oracle.com/cd/E11035_01/wloc10/lvm/index.html。

Taobao VM(國產虛擬機)

Tobao VM,又名阿里JVM。早在2012年,Taobao VM已有一定名氣,那會還有個官網:jvm.taobao.org,現已不能訪問了。阿里巴巴作為國內Java最大應用商,應用集群規(guī)模達十幾萬甚至幾十萬,因此自研JVM很有意義。

Taobao VM的特點:在阿里產品上性能高,硬件嚴重依賴Intel的cpu,損失了兼容性,提高了性能。至于使用了什么技術、什么方式提升了性能,其實咱也不必關心。

為什么現在不見Taobao VM?銷聲匿跡了?是的,因為有了更具產品化的Alibaba Dragonwell這個產品替代了,使用和推廣起來更加方便:待替換,替換成說JDK的那篇文章。

Graal VM

一款號稱Run Programs Faster Anywhere,與1995年Java面世時的口號Write once, Run anywhere遙相呼應。圖片GraalVM是Oracle開源的一款通用虛擬機產品,官方稱之為 Universal GraalVM,是新一代的通用多語言高性能虛擬機。能執(zhí)行各類高性能與互操作性任務,在無需額外開銷的前提下允許用戶構建多語言應用程序。

GraalVM支持大量的語言,包括:

  • 基于JVM的語言(例如Java、Scala、Groovy、Kotlin、Clojure等)。
  • 基于 LLVM 的語言(例如 C、C++等)。
  • 動態(tài)語言(例如 JavaScript、Ruby、Python、R等)。

圖片

如果說HotSpot有一天真的被取代,大概率是Graal VM。但這Java的軟件生態(tài)沒有絲毫變化,也許依舊Oracle一家獨大。

除以上之外,還有很多JVM作品:

  • Microsoft JVM:微軟早在IE3瀏覽器中支持Java Applets并自研了Microsoft JVM,直到1997年遭到Sun公司起訴才放棄,從而windows都安裝的HotSpot。直到2021年5月份,Microsoft基于OpenJDK重新帶來了其產品化的JDK產品,內置其自研的JVM。
  • Apache Harmony:https://harmony.apache.org,Java的世界哪離開得了Apache,曾在JDK 1.5、1.6時期Apache也來參和一腳,這款VM是IBM和Intel聯(lián)合開發(fā)的開源JVM,后遭到Sun公司的抵制不給頒發(fā)JCP認證,無奈2011年黯然退場。
  • Dalvik JVM:谷歌開發(fā),應用于Android系統(tǒng)。它只能稱作虛擬機, 并不能稱為Java虛擬機,因為并未遵循規(guī)范。此VM從Android 5.0時被ART VM替換。
  • Embedded VM:也叫KVM千字節(jié)虛擬機,應用于移動領域。Sun公司進軍嵌入式領域的虛擬機,用于手機、Pad、汽車等領域,這就是“大名鼎鼎”的J2ME。

總結

這么多虛擬機,我們該如何學習?筆者的經驗是,比較深入的了解學習HotSpot足矣。當然,其它虛擬機、發(fā)展史也需要基本的了解,這是茶余飯后的談資,是專業(yè)素養(yǎng)的體現。

最后,再回頭在看看文首提到的三個問題,你有答案了嗎?

責任編輯:姜華 來源: Java方向盤
相關推薦

2024-06-14 07:59:00

2016-01-04 11:03:53

手柄vr輸入設備

2016-09-29 15:49:08

hadoop大數據領域

2019-11-21 14:56:40

特殊文件Linux開發(fā)

2020-06-05 08:37:08

Object.entr開發(fā)Object.from

2023-12-04 08:11:16

Oracle數據庫

2019-07-16 14:59:00

JVM內存區(qū)域

2019-02-28 09:13:21

Linux用法交互模式

2021-09-15 10:17:53

開源基金會Apache 軟件基金開源社區(qū)

2021-04-30 10:10:14

5G5G網絡5G終端

2018-11-21 10:47:46

排序算法TimsortPython

2024-11-15 09:14:23

JDK4NIO函數

2022-07-27 15:30:24

媒體查詢css

2016-07-22 17:55:07

云計算

2024-02-21 07:24:21

微服務單體架構MVC

2022-02-15 20:08:41

JDKJavaWindows

2020-06-03 10:10:15

阿里巴巴互聯(lián)網工具

2023-04-26 10:06:08

RocketMQ屬性Consumer

2021-12-09 08:16:40

JVM參數系統(tǒng)

2020-12-15 15:15:45

大數據Hadoop大數據技術
點贊
收藏

51CTO技術棧公眾號