1. 程式人生 > >《深入理解java虛擬機器》讀書筆記1(走近java)

《深入理解java虛擬機器》讀書筆記1(走近java)

1)Java技術體系

java程式語言設計
各種硬體平臺上的java虛擬機器
class檔案格式
java api類庫
第三方java類庫

2)jdk和jre

jdk:用於支援java開發的最小環境,包含java程式語言設計,java虛擬機器,java api類庫。
jre:支援java程式的執行環境,可以把java api中的Java SE api子集和java虛擬機器統稱為jre。

3)業務領域劃分

Java Card:支援java小程式(Applets)執行在小記憶體裝置上(如智慧卡)
Java ME(Micro Edition):支援移動端的平臺,對java api有所精簡
Java SE(Standard Edition):也叫j2SE,面向桌面應用的平臺,完整的java核心api
Java EE(Enterprise Edition):也叫j2ee,支援多層架構的企業應用的java平臺.除了提供Java SE api外,還做了大量擴充和部署支援。
(擴充套件包一般以javax.作為包名,像我在java web開發中就經常遇到,由於歷史原因,一些擴充套件包後來也進入了核心包,所以核心包中也會出現javax.

)

4)java里程
》1991年4月,由James Gosling博士領導的綠色計劃,開發一種能夠用在各種消費性電子產品上的程式架構。這個產品叫做Oak(橡樹),也是java的前身。(居然比我小1歲)

》1995年,網際網路興起,Oak迅速找到最適合自己的方向並改名為java。在SunWorld大會上釋出了Java1.0,第一次提出“Write Once,Run Anywhere”

》1996年1月23日,jdk1.0釋出了,java有了第一個正式版本的執行環境。代表技術有:java虛擬機器,Applet,AWT等(AWT(Abstract Window Toolkit),中文譯為抽象視窗工具包,該包提供了一套與本地圖形介面進行互動的介面,是Java提供的用來建立和設定Java的圖形使用者介面的基本工具。AWT中的圖形函式與作業系統所提供的圖形函式之間有著一一對應的關係,稱之為peers,當利用AWT編寫圖形使用者介面時,實際上是在利用本地作業系統所提供的圖形庫。由於不同 作業系統的圖形庫所提供的樣式和功能是不一樣的,在一個平臺上存在的功能在另一個平臺上則可能不存在。為了實現Java語言所宣稱的“一次編寫,到處執行(write once, run anywhere)”的概念,AWT不得不通過犧牲功能來實現平臺無關性,也即AWT所提供的圖形功能是各種作業系統所提供的圖形功能的交集。)

》1996年4月,10個最主要的作業系統供應商宣告將在產品中嵌入java技術。5月底,Sun在舊金山召開了首屆JavaOne大會。9月,約8.3萬個網頁應用使用了java技術製作。

》1997年2月19日,Sun釋出了jdk1.1。代表技術有:jar檔案格式,jdbc,javaBeans,RMI(遠端方法呼叫(Remote Method Invocation)。能夠讓在某個java虛擬機器上的物件像呼叫本地物件一樣呼叫另一個java 虛擬機器中的物件上的方法。)。同時,語法上做了擴充套件,內部類和反射都是這時候出現的。1.1中途釋出了1.1.0-1.1.8九個版本。

》1998年12月4日,jdk迎來了里程碑式的版本jdk1.2,工程代號(Playground競技場)。這個版本java被拆成了3個方向,j2se,j2ee和j2me。代表技術:EJB,java plug-in,Java IDL,Swing等。並且java虛擬機器中第一次內建了JIT(Just In Time)編譯器,該版本並存的3個虛擬機器(ClassicVM,HotspotVM,ExactVM)除了ClassicVM只能以外掛形式使用JIT,其他兩個都內建了JIT。語言上添加了strictfp關鍵字和Collections集合類。(我們現在用的這麼多的東西產自20年前。)

參考:
EJB https://www.cnblogs.com/andy6/p/6143579.html (通過RMI 技術,J2EE將EJB業務邏輯元件建立為遠端物件,客戶端就可以通過網路呼叫EJB 物件了。)
Java Plug-in http://blog.csdn.net/shenyue_sam/article/details/43849671
java IDL http://blog.csdn.net/dolphin_notswim/article/details/1840297 (JDK1.1給Java開發人員提供了開發100%純Java分散式應用的功能,即遠端方法呼叫Java RMI。而Java2平臺提供的Java IDL可以在分散式應用中使用非Java語言,也就是說,Java2平臺提供的ORB(Object Request Broker)可以和任何遵從CORBA規範的ORB互操作)
Swing Swing是一個以抽象視窗工具包(AWT)為基礎用於開發Java應用程式使用者介面的開發工具包。

》1999年4月27日,HotSpot虛擬機發布,成為了jdk1.3和以後的sun jdk預設虛擬機器。

》2000年5月8日,jdk1.3釋出。主要改進:一些類庫,JNDI作為平臺級服務,使用CORBA IIOP來實現RMI通訊協議,Java 2D API,JavaSound
(JNDI(Java Naming and Directory Interface,Java命名和目錄介面)是SUN公司提供的一種標準的Java命名系統介面,JNDI提供統一的客戶端API,通過不同的訪問提供者介面JNDI服務供應介面(SPI)的實現,由管理者將JNDI API對映為特定的命名服務和目錄系統,使得Java應用程式可以和這些命名服務和目錄服務之間進行互動。)

》2002年2月13日,jdk1.4釋出,一個成熟的版本。今天的很多應用Spring,Hibernate,Struts都可以執行在jdk1.4上。新技術:正則表示式,異常鏈,NIO,日誌類,XML解析器和XSLT轉換器等。同年,微軟的.net framework釋出。(強力的競爭對手出現)

》2004年9月30日,jdk1.5(Tiger)釋出,在語法易用性上做出了改進:自動裝箱,泛型,動態註解,列舉,可變長引數,foreach。虛擬機器層面上改進了java的記憶體模型,api上提供了java.util.concurrent併發包。

》2006年12月11日,jdk1.6釋出。Sun採用了新的命名方式,Java SE 6,java EE 6,java ME 6。改進有:提供動態語言支援,提供編譯api和微型http伺服器api。同時java虛擬機器內部做了大量改進,包括鎖與同步,垃圾收集,類載入等演算法改進。11月13日,Sun宣佈將java開源。

》由於商業競爭和技術競爭,jdk1.7的計劃未能如期進行。2009年4月20日,Oracle宣佈以74億美元收購Sun公司並削減了計劃。2011年7月28日,Oracle公司釋出了java 7 。主要改進包括:
提供新的G1收集器、加強對非Java語言的呼叫、語言級的模組化支援,升級類載入架構等。