本文首發於公眾號:javaadu 003:位元組碼是什麼? 在Java中,位元組碼存放於以.class結尾的二進位文件。 位元組碼之於Java,類似於彙編語言之於C/C++。對於C/C++語言來說,不同的平臺需要不同的編譯器,以應對不同的操作系統和機器指令集;對於Java來說,只需要一個編譯器(javac ...
本文首發於公眾號:javaadu
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在大多數情況下不需要關心記憶體的分配和釋放 |
參考資料
本號專註於後端技術、JVM問題排查和優化、Java面試題、個人成長和自我管理等主題,為讀者提供一線開發者的工作和成長經驗,期待你能在這裡有所收穫。