1. 程式人生 > >Java虛擬機詳解01----初識JVM

Java虛擬機詳解01----初識JVM

日誌 可變 lar 反射 開始 rac ibm java語言 lan

主要內容如下:

  • JVM的概念
  • JVM發展歷史
  • JVM種類
  • Java語言規範
  • JVM規範

一、JVM的概念:

JVM:

  Java Virtual Machine,意為Java虛擬機。

虛擬機:

  指通過軟件模擬的具有完整硬件系統功能的、運行在一個完全隔離環境中的完整計算機系統

有哪些虛擬機:

VMWare、Virtual Box:都是使用軟件模擬物理CPU的指令集

JVM:使用軟件模擬Java 字節碼的指令集

二、JVM發展歷史:

1、Java發展史:

  • 1996年:SUN JDK 1.0 Classic VM

    純解釋運行,使用外掛進行JIT

  • 1997年:JDK1.1 發布

    AWT、內部類、JDBC、RMI、反射

  • 1998年:JDK1.2 Solaris Exact VM

    JIT 解釋器混合

    Accurate Memory Management 精確內存管理,數據類型敏感

    提升了GC性能

    註:JDK1.2開始,稱為Java 2,於是有了J2SE J2EE J2ME 的出現,同時加入Swing Collections。

  • 2000年:JDK 1.3,Hotspot 作為默認虛擬機發布

    加入JavaSound

  • 2002年:JDK 1.4【Java真正走向成熟的一個版本】,Classic VM退出歷史舞臺

    加入:Assert 正則表達式 NIO IPV6 日誌API 加密類庫

  • 2004年:JDK 1.5【至關重要的版本】。即 JDK5 、J2SE 5 、Java 5

泛型

註解

枚舉

自動裝箱

可變長參數

Foreach循環

  • 2006年:JDK 1.6發布,JDK6

腳本語言支持

JDBC 4.0

Java編譯器 API

  • 2011年:JDK7發布

延誤項目推出到JDK8

G1(全新的GC收集器)

動態語言增強

64位系統中的壓縮指針

NIO 2.0

  • 2014年:JDK8發布【重要的版本】

Lambda表達式

語法增強 Java類型註解

  • 2016年:計劃發布JDK9

    模塊化

2、重大歷史事件:

  • 使用最為廣泛的JVM為HotSpot

    HotSpot 為Longview Technologies開發,被SUN收購

  • 2006年:Java開源,並建立OpenJDK

    HotSpot 成為Sun JDK和OpenJDK中所帶的虛擬機

  • 2008年:Oracle收購BEA

    得到JRockit VM

  • 2009年4月20日:Oracle公司正式宣布以74億美金的價格收購Sun公司

得到Hotspot

  • Oracle宣布在JDK8時整合JRockit和Hotspot,將這兩款優秀的虛擬機取長補短,最終合二為一。

    在Hotspot基礎上,移植JRockit優秀特性

三、JVM種類:

1、KVM:

SUN發布

IOS Android興起之前,廣泛用於手機系統

2、CDC/CLDC HotSpot:

手機、電子書、PDA等設備上建立統一的Java編程接口

J2ME的重要組成部分

3、JRockit:

  BEA

4、IBM J9 VM:

  IBM內部

5、Apache Harmony:

兼容於JDK 1.5和JDK 1.6的Java程序運行平臺

與Oracle關系惡劣,退出JCP ,Java社區的分裂

OpenJDK出現後,受到挑戰,2011年退役

沒有大規模商用經歷

對Android的發展有積極作用

四、Java語言規範:

Java語言規範主要體現在以下幾點:

  • 語法
  • 變量
  • 類型
  • 文法

五、JVM規範:

JVM主要定義二進制class文件和JVM指令集等。

JVM語言規範主要體現在以下幾點:

  • Class文件類型
  • 運行時數據
  • 幀棧
  • 虛擬機的啟動
  • 虛擬機的指令集

此外,JVM需要對Java Library 提供以下支持:(因為這些東西沒有辦法通過java語言本身來實現)

  • 反射 java.lang.reflect
  • ClassLoader
  • 初始化class和interface
  • 安全相關 java.security
  • 多線程
  • 弱引用

Java虛擬機詳解01----初識JVM