熟悉Java的朋友都知道虛擬機還有編譯器,那麼它們各自主要的功能是什麼?誰比較重要呢?讓咱們來了解一下這兩位美女的故事。java
虛擬機能夠說就是Java,她能讓程序運行起來。程序員
可是編譯器卻能產生文件,畢竟java是直譯語言,若是須要一邊運行一邊解譯純文字是不能運行得快速的,而咱們程序員也不可能直接寫二進制代碼給虛擬機,而須要編譯器幫咱們生成二進制文件。segmentfault
還有就是編譯器會報錯!Java是強類型語言,編譯器不容許變量保存類型的數據,這是很關鍵的類型安全性功能,編譯器會提早抓出問題。數組
但也不是全部問題都抓出來,虛擬機運行中依舊會遇到錯誤類型的數據塞進數組中,而不得不拋出的異常等等安全
而這些相似的問題,在運行中發生,實際上是爲了允許動態綁定的功能,Java能夠在執行期引用連程序員也沒有預期會碰到的類型,因此編譯器保留了一些運用性。編譯器的工做是要確保鐵定不能跑的東西不會過關。對象
虛擬機呢?好像這麼一說就沒什麼用了?其實否則,一些真正的Boss也是要虛擬機來處理的,好比存取權限的安全問題。get
編譯器做爲安全的第一線,能防止人們動不到不能夠碰的程序代碼與其餘類的重要數據。編譯器
而虛擬機也能確保不會有人在執行前修改二進制代碼虛擬機
.......編譯
.......
提及來,好像還有不少不少點能說起,那就等下次再聊吧!
本文已轉載我的技術公衆號:UncleCatMySelf
歡迎留言討論與點贊
上一篇推薦:【Java貓說】Java基本概念二
下一篇推薦:【Java貓說】案例談面向對象