閱讀本文大概需要3分鐘。
003:位元組碼是什麼?
在Java中,位元組碼存放於以.class結尾的二進位制檔案。
位元組碼之於Java,類似於組合語言之於C/C++。對於C/C++語言來說,不同的平臺需要不同的編譯器,以應對不同的作業系統和機器指令集;對於Java來說,只需要一個編譯器(javac),編譯形成的位元組碼是一種通用的程式碼,可以執行在任何安裝了JVM的機器上,也就實現了所謂的“一次編寫、到處執行”。
使用位元組碼和虛擬機器的語言不只有Java一種,Java是現在最出名的語言,LISP是更古老的語言(該語言主要用於人工智慧和科學計算);其他使用類似於位元組碼的語言有Icon和Prolog
004:比較下JDK、JVM和JRE的不同
JVM是執行Java應用的虛擬機器,主要模組有:類載入子系統、執行時資料區、即時編譯(JIT)子系統、垃圾收集子系統等;
JRE是Java執行時環境,主要包括Java SE API(基礎類庫和UI類庫)和Java應用的部署套件。
JDK是最大的概念,包括:JVM + JRE + Java語言 + JDK輔助工具(javac、jmap等)
005:C++和Java之間最大的不同是什麼?
Java和C++的設計標的不同:(1)C++最初的設計標的是為了擴充套件C語言的能力,主要的應用場景是系統應用開發,跟C語言相比,C++增加了面向物件能力、異常處理、強大的資源管理能力、泛型程式設計、模板程式設計以及STL庫等能力;(2)Java的設計標的是更加普遍,是純粹的OOP語言、支援併發、更好的可移植性(跨平臺能力),Java利用JVM實現了較高的安全性和可移植性。
我認為,C++和Java最主要的幾個不同可以列舉如下(其他語言特性的不同在此不做討論):
C++ | Java | |
---|---|---|
平臺獨立性 | C++是平臺相關性語言 | Java是平臺無關性語言 |
指標 | C++支援指標變數,因此我們可以將任何變數的地址存放在一個指標變數中 | Java不支援指標變數 |
語言級別 | C++既可以當作是高階語言,也可以當作是機器級別的語言 | Java是純粹的高階語言 |
記憶體管理 | C++需要程式員手動管理記憶體的分配和釋放 | Java在大多數情況下不需要關心記憶體的分配和釋放 |
參考資料
-
bytecode (https://whatis.techtarget.com/definition/bytecode)