題目是前兩天朋友突然提出的問題,一時間答不上來。
后來仔細查了一下class文件的作用。我想javaer都清楚class文件是作為jvm的可執行文件,與C/C++的機器碼文件不一樣,它是字節碼文件。
字節碼文件的好處:
1、對源代碼文件進行語法檢查、語義分析,這一步驟消耗了大量的時間和資源,所以對jvm來說就要輕松多了。
2、更加抽象,一次編譯到處執行,這是java的宣傳口號。當然字節碼文件是與平臺無關的。(這點是在別資料上看到的,感覺源代碼文件跨平臺也是沒問題的,例如python)
3、字節碼文件可以看作是對源代碼文件的壓縮封裝,占用更少的存儲空間以及更快的傳輸速度。
自己再擴展下問題:考慮大胡子James在設計java時為什么要求在執行之前,先編譯成class文件?如果是我,更傾向于將源文件直接交給jvm執行,省去javac的步驟進而由jvm自己編譯。好處是程序員不用關注編譯路徑是否配置、源代碼文件是否都編譯通過、是否有個別文件的class文件沒有生成、源代碼與class版本是否一致等問題。
當然生成class文件的好處也很多:
1、java在設計初期應是面向瀏覽器/嵌入式開發語言,字節碼文件的好處就體現出來了,由于class是在編譯過程生成的,所以jvm就不需要做的很大,同時java的運行環境也不要求很高,畢竟最耗時/耗系統資源的工作已經在前一步完成。
2、不需要重復編譯,java是面向對象語言,涉及到大量的復用,jar/class的復用比直接復用源代碼省去了編譯時間。
推薦看下深入java虛擬機這書