談談對Java平台的理解筆記


1. 談談你對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是解釋執行,這句話正確么?

  

  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工具;

  

 

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM