官术网_书友最值得收藏!

1.3.1 Java程序的運行機制

在編譯Hello World程序時會生成名叫Hello.class的中間文件,但該文件并非.exe那樣的可執行程序,而是Java特有的字節碼文件。在Windows系統上,通過Java命令可以運行.class文件,把.class文件原封不動地傳到Linux系統上,也能通過Linux的Java命令運行.class文件。這意味著編譯出來的.class文件是跨平臺的,不會因為操作系統的改變而失效。

跨平臺運行是Java編程的一大創舉,它減少了程序移植的工作量,切實提高了程序開發的效率。在Java誕生之前,多數編程語言的程序依賴于編譯時候的操作系統,一旦把程序挪到另一種系統上,那么該程序將無法正常運行。以C++為例,在Windows系統編譯出來的是.exe文件和.dll庫文件,但.exe與.dll文件不能在Linux系統上運行;在Linux系統編譯出來的是.o文件與.so庫文件,但.o與.so文件不能在Windows系統上運行。也就是說,C++做不到跨平臺運行,其代碼在不同系統上的編譯運行情況如圖1-36所示。

那么Java是怎樣實現跨平臺運行的呢?這緣于Java引進了虛擬機的概念。所謂虛擬機,指的是一個虛構出來的計算機,它通過模擬實際計算機的功能來接管程序對系統底層的調用。這相當于在程序與操作系統之間增加了一層媒介,程序只管與媒介溝通,不管與系統的交互,因為底層操作都交給媒介與系統溝通了。好比租房子,房東只需把鑰匙交給中介,接下來找租客、看房子等事項都讓中介去辦。

當然,虛擬機早就有了,只是Java將其發揚光大,為此制定了專門的Java虛擬機規范(Java Virtual Machine,JVM)。引入Java虛擬機之后,Java代碼編譯出來的class文件可以直接傳送到別的系統平臺運行,而無須在這些平臺上重新編譯。Java代碼在不同系統上的編譯運行情況如圖1-37所示。

圖1-36 C++代碼在不同系統上的編譯運行情況

圖1-37 Java代碼在不同系統上的編譯運行情況

任何系統平臺,只要事先安裝了該平臺對應的Java虛擬機,就能讓class文件在它上面運行,從而實現“一次編譯,到處運行”的美好愿景。

主站蜘蛛池模板: 绿春县| 鄂尔多斯市| 当阳市| 金门县| 眉山市| 铜川市| 武宣县| 孝感市| 襄樊市| 文化| 黔西| 马尔康县| 康定县| 且末县| 信宜市| 漠河县| 旬阳县| 缙云县| 元氏县| 苍山县| 五峰| 竹山县| 黄骅市| 清远市| 吴旗县| 乌拉特前旗| 宁德市| 瑞安市| 宜州市| 达日县| 赤峰市| 亳州市| 泸州市| 皮山县| 吴桥县| 库车县| 城市| 黄大仙区| 新河县| 文水县| 盐津县|