本文首發於公衆號:javaadujava
在Java中,字節碼存放於以.class結尾的二進制文件。程序員
字節碼之於Java,相似於彙編語言之於C/C++。對於C/C++語言來講,不一樣的平臺須要不一樣的編譯器,以應對不一樣的操做系統和機器指令集;對於Java來講,只須要一個編譯器(javac),編譯造成的字節碼是一種通用的代碼,能夠運行在任何安裝了JVM的機器上,也就實現了所謂的「一次編寫、處處運行」。面試
使用字節碼和虛擬機的語言不僅有Java一種,Java是如今最出名的語言,LISP是更古老的語言(該語言主要用於人工智能和科學計算);其餘使用相似於字節碼的語言有Icon和Prolog編程
JVM是運行Java應用的虛擬機,主要模塊有:類加載子系統、運行時數據區、即時編譯(JIT)子系統、垃圾收集子系統等;後端
JRE是Java運行時環境,主要包括Java SE API(基礎類庫和UI類庫)和Java應用的部署套件。安全
JDK是最大的概念,包括:JVM + JRE + Java語言 + JDK輔助工具(javac、jmap等)併發
Java和C++的設計目標不一樣:(1)C++最初的設計目標是爲了擴展C語言的能力,主要的應用場景是系統應用開發,跟C語言相比,C++增長了面向對象能力、異常處理、強大的資源管理能力、泛型編程、模板編程以及STL庫等能力;(2)Java的設計目標是更加廣泛,是純粹的OOP語言、支持併發、更好的可移植性(跨平臺能力),Java利用JVM實現了較高的安全性和可移植性。jvm
我認爲,C++和Java最主要的幾個不一樣能夠列舉以下(其餘語言特性的不一樣在此不作討論):
| | C++ | Java |
| --- | --- | --- |
| 平臺獨立性 | C++是平臺相關性語言 | Java是平臺無關性語言 |
| 指針 | C++支持指針變量,所以咱們能夠將任何變量的地址存放在一個指針變量中 | Java不支持指針變量 |
| 語言級別 | C++既能夠看成是高級語言,也能夠看成是機器級別的語言 | Java是純粹的高級語言 |
| 內存管理 | C++須要程序員手動管理內存的分配和釋放 | Java在大多數狀況下不須要關心內存的分配和釋放 |工具
本號專一於後端技術、JVM問題排查和優化、Java面試題、我的成長和自我管理等主題,爲讀者提供一線開發者的工做和成長經驗,期待你能在這裏有所收穫。優化