不兼容VirtualBox虛擬機,微軟不再發布java虛擬機 為什么

操作系統為什么不內置java虛擬機?

不兼容VirtualBox虛擬機,微軟不再發布java虛擬機 為什么


【不兼容VirtualBox虛擬機,微軟不再發布java虛擬機 為什么】誠邀其實這個問題是要明白操作系統是什么 , 操作系統是為了分離硬件于用戶程序 , 操作系統主要用來管理硬件資源 , 系統調度 , 其他的功能只是為了效率上提升 , 內核要增加的一些接口 , 主要為了減少用戶程序跟內核通信造成的效率降低 , java虛擬機 , 是為了執行java程序 , 制作的一種用戶態程序 , 本身不具備操作系統的能力 , 僅僅用來解析java的字節碼 , 并不能直接被硬件識別 , 所以必須要有操作系統轉譯 , 而且java虛擬機目的就是為了讓java程序可以一次編寫 , 多處執行 , 但操作系統是可以脫離java虛擬機存在的 , 所以 , 應該不會考慮將java虛擬機做到操作系統里 。
Java能不能像C語言不通過JVM虛擬機直接編譯成二進制機器碼 , 讓計算機直接運行?
從語言設計的角度看是可以的 , 重新設計一下編譯器就能實現 , 但從工程實踐的角度看是不可行的 。其一 , Java語言最大的特點就是跨平臺可移植 , 一次開發 , 一次編譯 , 多平臺執行 , 這一特性就是靠JVM(Java虛擬機)實現的 , 如果改寫編譯器像C語言一樣直接編譯成了可執行程序 , 就失去了跨平臺特性 。其二 , Java語言設計之初就設計成為了一款嚴重依賴JRE(Java運行時環境)的語言 , 有部分語言設計上的缺陷必須依賴JVM來解決 , 比如GC(垃圾回收) , 我們知道 , Java語言是沒有內存回收能力的 , 因此還得靠JVM , 在工程實踐中 , 如果軟件不能進行內存回收 , 后果將是災難性的 。
其三 , Java語言是面向對象的 , 區別于同是面向對象的C , Java還有一個動態特性 。它允許程序動態地裝入運行過程中所需要的類 , 這是C語言進行面向對象程序設計所無法實現的 。在C程序設計過程中 , 每當在類中增加一個實例變量或一種成員函數后 , 引用該類的所有子類都必須重新編譯 , 否則將導致程序崩潰 。Java從如下幾方面采取措來解決這個問題 。
Java編譯器不是將對實例變量和成員函數的引用編譯為數值引用 , 而是將符號引用信息在字節碼中保存下傳遞給解釋器 , 再由解釋器在完成動態連接類后 , 將符號引用信息轉換為數值偏移量 。這樣 , 一個在存儲器生成的對象不在編譯過程中決定 , 而是延遲到運行時由解釋器確定的 。這樣 , 對類中的變量和方法進行更新時就不至于影響現存的代碼 。
解釋執行字節碼時 , 這種符號信息的查找和轉換過程僅在一個新的名字出現時才進行一次 , 隨后代碼便可以全速執行 。在運行時確定引用的好處是可以使用已被更新的類 , 而不必擔心會影響原有的代碼 。如果程序連接了網絡中另一系統中的某一類 , 該類的所有者也可以自由地對該類進行更新 , 而不會使任何引用該類的程序崩潰 。而這一切同樣依賴JRE 。
方舟編譯器是將java代碼像C靜態編譯 , 那么為什么安卓當時一開始為啥不用C?

推薦閱讀