03.01 java虛擬機是用什麼語言編寫的?它的原理誰能通俗的講出來嗎?

手機用戶72769084975


java虛擬機功能就是執行Java字節碼,其編碼實現就是一個死循環,每一次循環就是取字節碼,執行字節碼的過程,所以跟其它程序沒有什麼本質區別。主流的javaVM還是用C語言實現的居多,再以彙編為輔助,用java實現javaVM的情況有,但不多。

下面是一個在智能設備裡用C語言實現虛擬機的片段。

這一段代碼就是對short加法這個字節碼的實現。

而這一段代碼就是取字節碼並執行,是不是覺得JavaVM也不過如此呢。

有不少人會為了優化虛擬機的效率,而選擇用匯編把這些執行頻度很高的代碼重寫一下。

總結就是C實現的多,會結合彙編作為輔助。其它語言也有,但不是主流。


中外古今說說


查閱了一些資料,java虛擬機是使用c和c++編寫的,說到底是c編寫的,因為,c++也是基於c語言發展而來的一種面向對象的編程語言。肯定有人想問c的來源了,c是由彙編語言發展而來的,彙編是對機器語言的改進或者說是封裝。


比如說一個只會說國語的人要去和英國人,日本人,韓國人談生意,但是他們的語言不通,根本沒法交流,這時候最簡單的方法就是找個會國語又會這3國語言的翻譯。你只要給翻譯人員說國語,他就會把你的想法用其他語言說給外國人聽。

java虛擬機和這個翻譯的功能一樣,你只要用一套標準的java語言編寫程序,他就可以解釋給windows,linux,unix,mac等電腦操作系統,來執行你的程序。

水平有限,解釋的不準確之處望包涵,喜歡的可以關注一下小編,您的關注是我前進的最大動力!


小戲遊戲


既然題目是java虛擬機,那首先我們要知道什麼是java虛擬機。只要實現了《java虛擬機規範》中所有要求的軟件,都是java虛擬機。官方文檔中這樣描述java虛擬機:“Java 虛擬機並不侷限於特定的實現技術、主機硬件和操作系統,Java 虛擬機也不侷限於特定的代碼執行方式,它不強求使用解釋器來執行程序,也可以通過把自己的指令集編譯為實際 CPU 的指令來實現,它可以通過微代碼(Microcode)來實現,或者甚至直接實現在 CPU 中。” 因此,不同的jvm產品採用的不同的語言編寫:Oracle HotSpot VM主要使用C++,JRockit則主要用C語言編寫,當然還有使用java語言編寫的jvm:Squawk VM。

JVM的原理,其實和麵向對象中的接口-實現很類似。《java虛擬機規範》就是接口,而各個操作系統上的JVM則是實現,只要實現了接口,就可以運行java程序。


java老菜鳥


走向架構師,你必須瞭解的Java虛擬機高級特性

鏈接: https://pan.baidu.com/s/1hAPo19keNFHb9ycBctkU2A 密碼: iayw

看完了你就知道Java虛擬機了 不要謝我 、

對了


JAVA進階程序員


java中就虛擬機是其它語言開發的,用的是C語言+彙編語言 基於此之上就是JAVA本身了 虛擬機只起到解析作用另外,JAVA並不比C語言慢,說JAVA慢一般是九十年代那時候的JAVA, 而現在 在一段優秀的JAVA程序和C程序執行效率上來比較是沒有多大差距的 並且現在JAVA已經可以像C語言那樣,直接編譯為可執行文件(不用虛擬機,跨平臺為代價)了不知道你看過 卓越編程之道二(運用底層思維編寫高級代碼) 沒有,那裡面詳細的講述了高級語言從編寫到編譯執行的過程,通過目標文件的反彙編對比,發現C,C++,JAVA,dephi等語言在同等質量下的目標文件長度上基本上沒多大區別,一門語言的運行速度快慢,與你編寫代碼過程中是否符合編譯器規則息息相關。 有空你可以去看看這本書。Java底層實現是用C語言寫的,因為做了很多封裝,所以比C語言速度慢?JVM是c寫的,所以對JVM常用的攻擊就是buffer overflow。c語言寫的, java6.0都已經開源了。在windows平臺的JVM實現是用VC寫的,你下載的JDK其實都有一個src.zip,那就是Java的源碼 。原始是用C寫的,如javac命令等,後面的功能是java自身寫的,如api,現在大多都開源了,有興趣可以看看那個項目,叫openjdk,你也可以提供代碼,說不定後續版本會採用。


一筆一筆畫世界


JAVA虛擬機是C++編寫的。


為什麼有JAVA虛擬機?

答:一般的高級語言如果要在不同的平臺上(windows,mac,android,ios等)運行,至少需要編譯成不同的目標代碼,JAVA虛擬機是跨平臺的,不需要重新編譯來適應操作系統平臺。經過JAVA虛擬機編譯過的程序直接就可以跨平臺運行起來了。


JAVA虛擬機借用的是本地(網絡)設備的ROM,RAM,I/O來運行的。

說白了,就是一個屏蔽操作系統的子“操作系統”。


水平有限,供參考!


凌未風


不懂的都來裝懂,你們那麼牛逼怎麼還來頭條裝逼啊?c和c++那麼牛逼怎麼還被java給幹趴下了?

時間,空間兩個維度從來都是相輔相成的,在計算機編程更是如此。

要麼就是空間換時間,要麼就是時間換空間。


愛龍說


C ! C++可能要少一些。但是核心部分一定是C的代碼。所以是C佔多數, 要調用操作系統的一些都東西 操作系統基本都是c搞的。因為只有C和C++才能訪問內存的堆棧等等結構,還有利用指針,IO等技術,通過JVM的底層可以看到,裡面設計到IO流和網絡的部分都是用NATIVE聲明的類和方法,NATIVE是專門調用其他語言而用的一種機制.

java虛擬機是一種抽象化的計算機,通過在實際的計算機上仿真模擬各種計算機功能來實現的。Java虛擬機有自己完善的硬體架構,如處理器、堆棧、寄存器等,還具有相應的指令系統。JVM屏蔽了與具體操作系統平臺相關的信息,使得Java程序只需生成在Java虛擬機上運行的目標代碼(字節碼),就可以在多種平臺上不加修改地運行。


Java進階架構師


各計算機的指令不同,但跳轉,循環,查詢這些基本算法過程是同的。各計算機的程序翻譯成這些相同算法過程的中間宏指令,再放到各計算機中用各自的機器指令去翻譯成能跑的機器指令就是虛擬機。有兩次翻譯指令過程。


分享到:


相關文章: