深入JVM核心之 —— 初識JVM
JVM的概念
jvm是Java Virtual Machine 的簡稱意味Java虛擬機器器,指通過軟體模擬的具有完整硬體系統功能的、執行在一個完全隔離環境中的完整計算機系統
有哪些虛擬機器器
虛擬機器器名稱 實現方式
VMWare 使用軟體模擬物理CPU的指令集
Visual Box 使用軟體模擬物理CPU的指令集
JVM 使用軟體模擬Java 位元組碼的指令集
複製程式碼
JVM的歷史
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效能。從這時開始稱為Java2 J2SE J2EE J2ME得出現加入Swing Collections
2000年 JDK 1.3 Hotspot 作為預設虛擬機器發布 加入JavaSound
2002年 JDK 1.4 Classic VM退出歷史舞臺 Assert正則表示式 NIO IpV6 日誌API 加密類庫
2004年釋出 JDK1.5 即 JDK5 、J2SE 5 、Java 5 泛型、註解、裝箱、列舉、可變長的引數、Foreach迴圈
JDK1.6 JDK6、指令碼語言支援、JDBC 4.0、Java編譯器 API
2011年 JDK7釋出 延誤專案推出到JDK8 、G1、動態語言增強、64位系統中的壓縮指標、NIO 2.0
2014年 JDK8釋出 Lambda表示式、語法增強、Java型別註解
2016年JDK9 模組化
JVM的歷史 - 大事記
使用最為廣泛的JVM為HotSpot
HotSpot 為Longview Technologies開發 被SUN收購
2006年 Java開源 並建立OpenJDK HotSpot,成為Sun JDK和OpenJDK中所帶的虛擬機器器
2008 年 Oracle收購BEA,得到JRockit VM
2010年Oracle 收購 Sun,得到Hotspot
Oracle宣佈在JDK8時整合JRockit和Hotspot,優勢互補 在Hotspot基礎上,移植JRockit優秀特性
初識JVM - 各式JVM
KVM :SUN釋出,IOS Android前,廣泛用於手機系統
CDC/CLDC HotSpot :手機、電子書、PDA等裝置上建立統一的Java程式設計介面 J2ME的重要組成部分
JRockit :BEA
IBM J9 VM : IBM內部
Apache Harmony : 相容於JDK 1.5和JDK 1.6的Java程式執行平臺與Oracle關係惡劣 退出JCP ,Java社群的分裂 OpenJDK出現後,受到挑戰 2011年 退役 沒有大規模商用經歷 對Android的發展有積極作用
初識JVM – 規範
Java語言規範
語法 變數 型別 文法
複製程式碼
JVM規範
Class檔案型別 執行時資料 幀棧 虛擬機器器的啟動 虛擬機器器的指令集
複製程式碼
Java語言規範定義了什麼是Java語言,Java語言和JVM相對獨立,Groovy、Clojure、Scala,這三種都可以執行在JVM上。JVM主要定義二進位制class檔案和JVM指令集等
整數得表達
原碼:第一位為符號位(0為正數,1為負數)
反碼:符號位不動,原碼取反
負數補碼:符號位不動,反碼加1
正數補碼:和原碼相同
列印整數的二進位製表示 int a=-6; for(int i=0;i<32;i++){ int t=(a & 0x80000000>>>i)>>>(31-i); System.out.print(t); }
為什麼要用到補碼呢? 因為在人們的計算概念中零是沒有正負之分的,統一0的處理 統一處理加減法,無需增加減法器操作