Java採用字節碼的好處

Java採用字節碼的好處

1. 簡要認識虛擬機的概念

什麼是虛擬機? 虛擬機有啥作用?

那麼,虛擬機到底是什麼? 最早出現在計算機世界中時,VM 的定義是真實計算機的副本。

但VM實際上有不同的種類 :

第一種是 System VM ,系統虛擬機(也稱爲完全虛擬化虛擬機),它可以替代硬件機器。我們可以在上面運行未經修改的操作系統,如 Linux 或 Windows 。 VirtualBox 和 VMware Server 就屬於這類虛擬機,也是大家比較熟悉的。

第二種是 Process VM,進程虛擬機 ,它爲運行單個計算機程序設計,這意味它支持單個進程。 用Java編寫的程序可以通過對Java運行環境(JRE)軟件發命令獲得服務,獲取期望的結果。透過提供這種服務,JRE起到了虛擬機的作用。程序不必爲特定的操作系統或硬件編寫。

在這裏插入圖片描述

從這可以看出進程虛擬機與操作系統的無關性,從而實現瞭解釋型語言(Java)的平臺無關係

2. 認識解釋型語言和編譯型語言

編譯型語言

需要通過編譯器,將源代碼編譯成機器碼之後才能執行的語言。一般是通過編譯和鏈接兩個步驟,編譯是將我們的程序編譯成機器碼,鏈接是程序和依賴庫等串聯起來。

優點:編譯器一般會有預編譯的過程對代碼進行了優化,因爲編譯只做了一次,運行時不會在編譯,所以編譯型語言效率高。

缺點:編譯之後如果想要修改某一個功能,就需要整個模塊重新編譯。編譯的時候根據對應的運行環境生成不同的機器碼。不同的操作系統之間,可能會有問題。需要根據環境的不同,生成不同的可執行文件。

代表語言:C、C++、Pascal、Object-C以及最近很火的蘋果新語言swift,GO

解釋型語言

解釋型語言不需要編譯,相比編譯型語言省了道工序,解釋型語言在運行程序的時候才逐行進行翻譯。字節碼也是解釋型的一部分。

優點:有良好的平臺兼容性,只要安裝了虛擬機,就可以。容易維護,方便快速部署,不用停機維護。

缺點:每次運行的時候都要解釋一遍,性能上不如編譯型語言。

代表語言:JavaScript、Python、Erlang、PHP、Perl、Ruby

3. 編譯與解釋共存

Java程序到源代碼一般會有以下三步

在這裏插入圖片描述

從.class文件到二進制機器碼這一步,JVM類加載器首先加載字節碼文件,然後通過解釋器逐行解釋執行,這種方式的執行速度相對比較慢,而且有些方法和代碼塊是經常被調用的,所以之後會引進JIT編譯器,而JIT屬於運行時編譯,當JIT編譯器完成第一次編譯後,其會將字節碼對應的機器碼保存下來,而我們知道機器碼的運行效率肯定是高於Java解釋器的,這也解釋了我們經常說的Java是編譯與解釋共存的語言

4. Java採用字節碼的好處

採用字節碼的最大好處是:可以實現一次編譯到處運行,也就是java的與平臺無關性

Java 語言通過字節碼的方式,在一定程度上解決了傳統解釋型語言執行效率低的問題,同時又保留了解釋型語言可移植的特點。所以 Java 程序運行時比較高效,而且,由於字節碼並不專對一種特定的機器,因此,Java程序無須重新編譯便可在多種不同的計算機上運行。