chapter-1 初識JVM


本章知識點

1.JVM的概念

2.JVM發(fā)展歷史?

3.JVM種類

4.Java語言規(guī)范

5.JVM規(guī)范

初識JVM - JVM概念

JVM是Java Virtual Machine的簡稱,意為Java虛擬機

虛擬機:指通過軟件模擬的具有完整硬件系統(tǒng)功能的,運行在一個完全隔離環(huán)境中的完整的計算機系統(tǒng)。

有哪些虛擬機:VMWare、Visual Box、JVM。

VMWare或者Virtual Box都是使用軟件模擬物理CPU的指令集。

JVM使用軟件模擬Java字節(jié)碼的指令集。

JNI(Java Native Interface):java與其他語言(C/C++)通信的API。

初識JVM? -? Java和JVM的歷史

1996年SUN JDK 1.0 Classic VM:純解釋運行,使用外掛進行JIT(Just In Time),java的口號write once run anywhere。

1997年 JDK 1.1: 發(fā)布AWT,內(nèi)部類,JDBC,RMI,反射。

1998年 JDK 1.2 Solaris Exact VM:JIT解釋器混合;Accurate Memory Management(精確內(nèi)存管理),數(shù)據(jù)類型敏感;提升GC(Gabage?Collection)性能。JDK 1.2 開始稱為Java 2 J2SE J2EE J2ME,加入swing,collection

2000年 JDK 1.3 HotSpot :作為默認虛擬機發(fā)布,加入JavaSound。

2002年 JDK 1.4: Classic VM退出歷史舞臺加入Asset正則表達式,NIO,IPV6日志,加密類庫。

2004年發(fā)布 JDK 1.5 即JDK5、J2SE 5、Java 5:加入泛型,注解,裝箱,枚舉,可變長的參數(shù),F(xiàn)oreach循環(huán),java.util.concurrent并發(fā)包。

2006年 JDK1.6 JDK6:腳本語言支持,JDBC4.0,Java編譯器API

2011年 JDK 7 發(fā)布:延誤項目推出到JDK 8 ,動態(tài)語言增強,64位系統(tǒng)中的壓縮指針,NIO2.0,在java.util.concurrent中加入fork/join是對并發(fā)包的一個補充。

2014年 JDK 8 發(fā)布:Lambda表達式,語法增強,Java類型注解。

2016年 JDK 9 :模塊化。??

初識JVM - Java和JVM的歷史 - 大事件

使用最為廣泛的JVM為HotSpot。

HotSpot為Longview Technologies開發(fā) 被SUN收購。

2006年 Java開源 并建立OpenJDK,對java源碼進行管理:HotSpot 成為Sun JDK和OpenJDK中所帶的虛擬機,名字從之前的J2變?yōu)镴ava SE。

2008 年 Oracle收購BEA:得到JRockit VM。

2010年Oracle 收購 Sun:得到Hotspot。

Oracle宣布在JDK8時整合JRockit和Hotspot,優(yōu)勢互補:在Hotspot基礎(chǔ)上,移植JRockit優(yōu)秀特性。

KVM:由SUN發(fā)布,在IOS Android出來之前,廣泛用于手機系統(tǒng)。

CDC/CLDC HotSpot:用于手機、電子書、PDA等設(shè)備上建立統(tǒng)一的Java編程接口;J2ME的重要組成部分。

JRockit:BEA。

IBM J9 VM:在IBM內(nèi)部使用。

Apache Harmony:兼容于JDK 1.5和JDK 1.6的Java程序運行平臺;與Oracle關(guān)系惡劣 退出JCP ,Java社區(qū)的分裂;OpenJDK出現(xiàn)后,受到挑戰(zhàn) 2011年 退役;沒有大規(guī)模商用經(jīng)歷;對Android的發(fā)展有積極作用。

初識JVM - 規(guī)范

Java語言規(guī)范:語法、變量、類型、方法。

JVM規(guī)范:Class文件類型,運行時數(shù)據(jù),幀棧,虛擬機的啟動,虛擬機的指令集。

初識JVM - Java語言規(guī)范

語法定義:

? ??IfThenStatement:if?(?Expression?)?Statement;

? ??ArgumentList:Argument、ArgumentList。

詞法結(jié)構(gòu):

? ??\u + 4個16進制數(shù)字:表示UTF-16;

? ??行終結(jié)符:CR, or LF, or CR LF;

????空白符:空格 tab \t 換頁 \f 行終結(jié)符;

? ??注釋、標示符、關(guān)鍵字;

? ??Int:0 2 0372 0xDada_Cafe 1996 0x00_FF__00_FF;

? ??Long:0l 0777L 0x100000000L 2_147_483_648L 0xC0B0L;

? ??Float:1e1f 2.f .3f 0f 3.14f 6.022137e+23f;

? ??Double:1e1 2. .3 0.0 3.14 1e-9d 1e137;

? ??操作:+=??-=??*=??/=??&=??|=??^=??%=??<<=??>>=??>>>=。

類型和變量:

? ??元類型:byte short int long float char boolean double

? ??泛型。

Java內(nèi)存模型,類加載鏈接的過程,public static final abstract的定義,異常,數(shù)組的使用......

初識JVM - JVM規(guī)范

Java語言規(guī)范定義了什么是Java語言。

Java語言和JVM相對獨立:Groovy、Clojure、Scala。

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

Class文件格式。

數(shù)字的內(nèi)部表示和存儲:Byte ?-128 to 127......

returnAddress?數(shù)據(jù)類型定義:指向操作碼的指針,不對應(yīng)Java數(shù)據(jù)類型,不能在運行時修改,F(xiàn)inally實現(xiàn)需要。

定義PC。

堆、棧。

方法區(qū)。

整數(shù)的表達:

? ??原碼:第一位為符號位(0為正數(shù),1為負數(shù));

? ??反碼:符號位不動,原碼取反;

? ??負數(shù)補碼:符號位不動,反碼加1;

? ??正數(shù)補碼:和原碼相同。

VM指令集:

????類型轉(zhuǎn)化(l2i);

? ??出棧入棧操作:aload astore;

? ??運算:iadd isub;

? ??流程控制:ifeq ifne;

? ??函數(shù)調(diào)用:invokevirtual invokeinterface invokespecial invokestatic。

JVM需要對Java Library 提供以下支持:反射 java.lang.reflect,ClassLoader,初始化class和interface,安全相關(guān) java.security,多線程,弱引用。

JVM的編譯:源碼到JVM指令的對應(yīng)格式,Javap,JVM反匯編的格式。

JDK(Java Development Kit)

? ? ? ? Jdk是java程序設(shè)計語言,java虛擬機,java API類庫的統(tǒng)稱,jdk是支持java程序運行,開發(fā)的最小環(huán)境。

JRE(Java Runtime Environment)

????????我們把java api類庫中的java se的子集和java虛擬機稱為jre,jre是支持java程序運行的標準環(huán)境。

JDK和JRE所覆蓋的范圍


java技術(shù)體系分為四個平臺

Java card:支持一些java小程序(applets)運行在小內(nèi)存設(shè)備(智能卡)上面的平臺。

Java ME(micro edition):支持java程序運行在移動終端(手機,PDA)上的平臺,對java api有所精簡,并加入了針對移動終端的支持,之前稱為J2ME,從jdk1.6之后修改。

Java SE(standar edition):支持面向桌面級的應(yīng)用(如windows下的應(yīng)用程序)的平臺,提供Java核心API,之前稱為J2SE。

Java EE(enterprise edition):支持使用多層應(yīng)用構(gòu)架的java平臺,除了提供java se api外,還對其做了大量的擴充,也支持部署,之前稱為J2EE。

Coin項目

????????自2009年1月起,Coin便是Java7(和Java8)中一個開源的子項目,創(chuàng)建coin項目是為了反映java語言中的微小變動,項目的名字是個雙關(guān)語——像硬幣一樣小的變化(small change comes as coins),而“套用一句老話”(to coin a phrase)指的是給Java語言添一個新的表述方式。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 姓名:周君會 學(xué)號:17011210526 轉(zhuǎn)載自: http://www.itdecent.cn/p/...
    lotus兒閱讀 2,125評論 1 9
  • 從今天開始讀《深入理解 Java 虛擬機》一書,并開設(shè)了同名專題 深入理解 Java 虛擬機。計劃在 2 周內(nèi)將全...
    SawyerZh閱讀 10,446評論 17 215
  • 這篇文章是我之前翻閱了不少的書籍以及從網(wǎng)絡(luò)上收集的一些資料的整理,因此不免有一些不準確的地方,同時不同JDK版本的...
    高廣超閱讀 16,054評論 3 83
  • 每天都能看到如此精彩的文章嗎?關(guān)注或加微信13373416716 肉雞生長期只有短短幾十天,特別是出欄前兩周,肉雞...
    3eadf294fac6閱讀 147評論 0 0
  • 2017年9月9日(連續(xù)第208天總結(jié)) 今日目標完成情況: 1:案例 100% 2:抄寫概念5遍 0% 3:...
    我來學(xué)而時習(xí)之閱讀 231評論 0 0

友情鏈接更多精彩內(nèi)容