《java深度曆險》讀書筆記(一)

來源:互聯網
上載者:User
筆記
最近開始看

王森先生的《java深度曆險》,從我一借到這本書就愛不釋手,書裡的內容非常吸引人。可以說這本書有助於我們對java程式運行過程有更深的理解。所以我將記錄一些書中的重要結論,供大家參考,也作為自己的筆記。


 


 



第一章:

我們的機器裡面至少有兩套jre,一套在%JAVA_HOME%/jre,一套在%HOME%/Program Files/Java/jre1.x.x,那麼當我們在命令列輸入java xxx的時候會按照下面的邏輯來尋找適合的jre來執行程式:

1.       目前的目錄

2.       父目錄下的jre子目錄

3.       查詢註冊表裡面的jre

所以我們在配置環境變數的時候一定要注意。


 


 



第二章:

構造類的時候可以動態地載入記憶體,這樣可以從一定程度上提高效率,所有類的載入都需要有ClassLoader。

顯式的動態載入類有兩種方法:一種是Class.forName(),一種是ClassLoader.loadClass(),它們得到的都是Class對象,也就是相應類的中繼資料,然後調用newInstance()方法就可以構造這個類的對象了。這兩種方法的原理都是有一個ClassLoader來載入類。我們可以直接使用預設的CLassLoader來載入類,也可以實現自己的ClassLoader(URLClassLoader就是一個例子)來載入。

而書中介紹的重點是預設的CLassLoader載入類的原理。JVM有三個ClassLoader,分別是Bootstrap Loader(這個轉載器是C++寫的,直接與JVM打交道),ExtClassLoader,AppClassLoader。預設情況下先請求AppClassLoader來搜尋class檔案,AppClassLoader再向其parent類ExtClassClassLoader請求,ExtClassClassLoader再請求其parent“類”Bootstrap Loader搜尋。如果父裝載器在其搜尋路徑裡找不到class檔案就再由子裝載器搜尋,如果一直到AppClassLoader找不到就會拋出NoClassDefFoundError。這就是ClassLoader Hierarchy,簡而言之就是所有轉載請求一直發送到Bootstrap Loader,然後找不到才由子裝載器裝載。

下面介紹3個轉載器的搜尋路徑:

Bootstrap Loader:System.getProperty(“sun.boot.class.path”);得到,預設是jre/classes。修改的方法是執行程式的時候使用java -Dsun.boot.class.path=yourPath XXX

ExtClassLoader:System.getProperty(“java.ext.dirs”):得到,預設是jre/lib/ext。修改的方法是執行程式的時候使用java -Djava.ext.dirs=yourPath XXX

AppClassLoader:System.getProperty(“java.class.path”);得到,預設就是環境變數中的CLASSPATH。修改方法一個是修改環境變數,一個執行程式的時候使用java –classpath yourPath XXX

瞭解了這些以後我們就可以對類的裝載有一定瞭解,以後放置第三方jar包的時候就能清楚放在什麼目錄最合適。當然書裡也說了JDBC驅動和JNDI的類裝載涉及ContexClassLoader,它是以上原理不一樣的,書裡也沒有介紹。

第三章:

通過一個建立word文檔的例子,介紹了JNI技術。

由於java程式都是在jvm基礎上執行的,所以有很多與作業系統底層聯絡緊密的功能都難以實現。我們就可以用native關鍵字修飾一個本地方法,而這個方法是由其他語言來實現。這樣我們可以調用windows的dll和Unix/Linux的so檔案來和作業系統底層互動。

                                to be continued...


相關文章

Beyond APAC's No.1 Cloud

19.6% IaaS Market Share in Asia Pacific - Gartner IT Service report, 2018

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。