《Java核心技術36講》閱讀筆記:談談對Java平臺的理解筆記

1. 談談你對Java平臺的理解。java

  Java是一種面向對象的語言,最顯著的特性有兩個方面:程序員

    一個就是一次編譯,處處運行(Write once, run anywhere),可以很是容易的得到跨平臺能力;編輯器

    另外一個就是垃圾收集(GC,Garbage Collection),Java經過GC回收分配內存,大部分狀況下程序員不須要操心內存的分配和回收;工具

 

  什麼是JRE(Java Runtime Environment)/JDK(Java Development Kit)?性能

    JRE:java運行環境,包含了JVM,Java內褲,以及一些模塊;優化

    JDK:JRE的一個超集,提供了更多工具,好比編輯器、各類診斷工具;操作系統

    JVM < JRE < JDK對象

 

2. Java是解釋執行,這句話正確麼?blog

  

  Java是解釋執行,這個說法不太準確。咱們開發java的源代碼,經過Javac編譯成字節碼,而後在運行時經過JVM內嵌的解釋器將字節碼轉換爲最終的機器碼。內存

可是常見的JVM(Oracle JDK 提供的Hotspot JVM),都提供了動態編譯器JIT(Just in Time),JIT可以在運行時將熱點代碼編譯成機器碼,這種狀況下部分熱點代碼就屬於編譯執行,而不是解釋執行。

  如圖Java是分爲編譯器和運行時。java的編譯生成的是字節碼,而不是能夠直接執行的機器碼。Java經過字節碼和JVM這種跨平臺的抽象,屏蔽了操做系統和硬件的細節,這也是「一次編譯,處處執行的基礎」。

  JVM啓動時能夠指定不一樣的參數對運行模式進行選擇,例如:

    -Xmixed:解釋和編譯混合模式;

    -Xint:只進行解釋執行,不對代碼進行編譯,拋棄JIT可能帶來的性能優點;

    -Xcomp:關閉解釋器或者叫作最大優化級別。但這種模式並不必定是最高效的,他會致使JVM啓動變慢,同時有些JIT編譯器優化方式,如分支預測,若是不進行profiling,每每不能進行有效優化。

    AOT(Ahead-of-Time Compilation):直接將字節碼編譯成機器代碼,避免了JIT預熱等各方面的開銷。在Oracle JDK 9 引入了實驗性的AOT特徵,並增長了新的jaotc工具;

相關文章
相關標籤/搜索