Java出現以前,C和C++是當時普遍使用的編程語言。可是C和C++都有一個共同的缺點,那就是隻能在特定的平臺進行編譯。這裏指的平臺是由操做系統(OS)和處理器(CPU)構成的。C和C++源程序所在的特定平臺對其源文件進行編譯、鏈接,生成當前平臺的機器指令(平臺的機器指令能夠被該平臺直接識別和執行),根據當前平臺的機器指令生成可執行文件。那麼,在任何與當前平臺相同的平臺上均可以運行這個可執行文件。但每一個平臺都會造成本身獨特的機器指令,相同的CPU和不一樣的操做系統所造成的平臺的機器指令可能是不一樣的。假如電器的設備更換了,平臺就不能保證程序能正確運行。這個時候可能須要修改源程序,並針對新的平臺從新編譯源程序。而Java最大的優點就是編寫的軟件能在全部的計算機上運行。之因此能作到這一點,是由於Java能夠在計算機的操做系統之上再提供一個Java運行環境(Java Runtime Environment--JRE),該運行環境是由Java虛擬機(Java Virtual Machine--JVM)、類庫以及一些核心文件組成。Java虛擬機的核心是字節碼指令(字節碼指令能夠被Java虛擬機直接識別和執行),字節碼指令不是機器指令,所以它不與特定的平臺相關。而Java針對不一樣平臺提供的Java虛擬機的字節碼指令是相同的,先看看Java程序的運行過程:編程
Java語言提供的編譯器不針對特定的平臺進行編譯,而是針對Java虛擬機編譯成字節碼(稱爲「中間代碼」),字節碼被Java虛擬機(Java解釋器是Java虛擬機的一部分)解釋、運行。Java虛擬機將字節碼翻譯成本地計算機的機器指令,並將機器指令交給平臺運行。編程語言
上圖是本篇博客的整理。爲了更方便清晰的理解,咱們能夠腦補一個劇場:維奇多去了英國留學,憑藉流利的英語和英俊的外表,他認識了不少英國朋友。有一天,他遇到了一個充滿羅曼蒂克風情的法國美女。但很惋惜,他不會法語,她不會英語,因此他們沒法交流。橙汁是一個富二代,雖然他只會中文,可是他有錢,僱傭了一個萬能翻譯官,一塊兒環遊世界美滋滋呀無壓力呀。spa
腦補完劇情,有沒有更好的幫助你理解呢?總之,只要平臺提供了Java運行環境,用Java編寫的軟件就能在其上運行。操作系統
本劇終。翻譯