當前位置:首頁 » 編程語言 » 對java虛擬機的理解

對java虛擬機的理解

發布時間: 2022-08-07 19:02:51

『壹』 什麼是java虛擬機

Java虛擬機是一個可以執行Java位元組碼的虛擬機進程。Java源文件被編譯成能被Java虛擬機執行的位元組碼文件。
Java是平台無關的語言是指用Java寫的應用程序不用修改就可在不同的軟硬體平台上運行。平台無關有兩種:源代碼級和目標代碼級。C和C++具有一定程度的源代碼級平台無關,表明用C或C++寫的應用程序不用修改只需重新編譯就可以在不同平台上運行。
Java主要靠Java虛擬機(JVM)在目標碼級實現平台無關性。JVM是一種抽象機器,它附著在具體操作系統之上,本身具有一套虛機器指令,並有自己的棧、寄存器組等。但JVM通常是在軟體上而不是在硬體上實現。(目前,SUN系統公司已經設計實現了Java晶元,主要使用在網路計算機NC上。另外,Java晶元的出現也會使Java更容易嵌入到家用電器中。)JVM是Java平台無關的基礎,在JVM上,有一個Java解釋器用來解釋Java編譯器編譯後的程序。Java編程人員在編寫完軟體後,通過Java編譯器將Java源程序編譯為JVM的位元組代碼。任何一台機器只要配備了Java解釋器,就可以運行這個程序,而不管這種位元組碼是在何種平台上生成的。另外,Java採用的是基於IEEE標準的數據類型。通過JVM保證數據類型的一致性,也確保了Java的平台無關性。

『貳』 java虛擬機的作用

定義:

Java虛擬機(Java Virtual Machine 簡稱JVM)是運行所有Java程序的抽象計算機,是Java語言的運行環境,它是Java 最具吸引力的特性之一。

作用:

使用Java虛擬機是實現Java語言與平台的無關性的關鍵。

『叄』 什麼是java虛擬機,簡述其工作機制

摘要 java虛擬機運行機制如下:Java語言使用模式Java虛擬機屏蔽了與具體平台相關的信息,使得Java語言編譯程序只需生成在Java虛擬機上運行的目標代碼(位元組碼),就可以在多種平台上不加修改地運行。Java虛擬機在執行位元組碼時,把位元組碼解釋成具體平台上的機器指令執行。

『肆』 什麼是JAVA虛擬機

所謂的Java虛擬機最直觀的理解就是Java的執行環境
比方說就像你用軟體要在windows下執行一樣,Java虛擬機就是為運行Java提供了個平台,僅此而已

但手機中的應用就不像在電腦中的那麼容易了,因為手機的環境畢竟比較簡單,要想提供完整的Java支持是需要成本的,而且必須是全部正版,所以價錢是很高的,就像如果你要用某正版軟體的完全版或專家版,要比簡單版貴很多,只不過我們盜版軟體用多了就感覺不出來了而已,還有你說的Java虛擬機應該是在電腦中用的,和手機中的不是一回事
比如說,電腦中執行的是j2ee,j2se,而手機中執行的是j2me一樣,是不一樣的 ,所以即使你在手機中下載了Java虛擬機也是不能運行手機qq的。

『伍』 什麼是Java虛擬機為什麼Java被稱作是「平台無關的編程語言」

Java虛擬機可以理解為一個特殊的「操作系統」,只是它連接的不是硬體,而是一般的操作系統和java程序。
正是因為有這樣一層操作系統與程序之間的連接,Java程序就能在一台機子上編譯後到處都能運行——只要有對應不同系統的Java虛擬機就可以了。因此Java被稱為「平台無關」。

『陸』 java虛擬機是什麼

Java語言寫的代碼是.java文件,它會被特定程序編譯(javac.exe,它會被Eclipse之類的IDE調用)成位元組碼(bytecode),位元組碼不能直接在CPU上運行,需要另一個程序讀取並執行,這個部件就是java虛擬機,它像機器一樣運行編譯好的java位元組碼,就像機器直接執行機器碼一樣……java虛擬機的外部介面在windows下主要是jvm.dll這個文件……

『柒』 Java虛擬機是什麼我網上也看了不少,定義我懂,就是不理解!有哪個高手可以解釋一下

Java虛擬機
就是一個說法,它是Java運行的平台.
Java程序都是由Java虛擬機解析執行的.

跨平台是指java程序可以運行在安裝了Java虛擬機的任何平台上.
windows安裝windows版的Java虛擬機
linux安裝linux版的Java虛擬機

java虛擬機,它沒有內存、CPU的主頻、音效卡、顯卡、硬碟C、D、E盤
只是一個運行平台.

『捌』 JAVA虛擬機是什麼意思

Java虛擬機(Java Virtual Machine,簡稱JVM)是一種假想的計算機。從結構上看,它由抽象的指令集、寄存器組、類文件格式規定、堆棧、內存垃圾收集器和存儲區六個部件組成。指令集採用與平合無關的位元組碼形式,寄存器組中包含程序計數器、堆棧指針、運行環境指針和變數指針,類文件也與平台無關,堆棧用來傳遞參數和返回運行結果,垃圾收集器收集不再使用的內存片段,存儲區則用來存放位元組碼。JVM僅僅規定部件的功能和規格。雖然這些功能和規格是統一的,但是並沒有規定這此部件的具體實現技術,就是說,可以用任何一種技術來實現。

Java中引入了虛擬機的概念,即在機器和編譯程序之間加入了一層抽象的虛擬的機器。這台虛擬的機器在任何平台上都提供給編譯程序一個的共同的介面。編譯程序只需要面向虛擬機,生成虛擬機能夠理解的代碼,然後由解釋器來將虛擬機代碼轉換為特定系統的機器碼執行。在Java中,這種供虛擬機理解的代碼叫做位元組碼(ByteCode),它不面向任何特定的處理器,只面向虛擬機。

每一種平台的解釋器是不同的,但是實現的虛擬機是相同的。Java源程序經過編譯器編譯後變成位元組碼,位元組碼由虛擬機解釋執行,虛擬機將每一條要執行的位元組碼送給解釋器,解釋器將其翻譯成特定機器上的機器碼,然後在特定的機器上運行。

可以說,Java虛擬機是Java語言的基礎。它是Java技術的重要組成部分。Java虛擬機是一個抽象的計算機,和實際的計算機一樣,它具有一個指令集並使用不同的存儲區域。它負責執行指令,還要管理數據、內存和寄存器。Java解釋器負責將位元組代碼翻譯成特定機器的機器代碼。Java是一種簡單的語言。它用到的概念不多,而且多為程序員所熟悉。如果你是一名程序員,掌握Java對你來說是易如反掌的事。即使你沒有學過任何編程語言,學習Java也要比學習C++要容易的多。

『玖』 什麼是Java虛擬機

虛擬機是一種抽象化的計算機,通過在實際的計算機上模擬模擬各種計算機功能來實現的。

Java虛擬機有自己完善的硬體架構,如處理器、堆棧、寄存器等,還具有相應的指令系統。JVM屏蔽了與具體操作系統平台相關的信息,使得Java程序只需生成在Java虛擬機上運行的目標代碼(位元組碼),就可以在多種平台上不加修改地運行。

這種解釋應該算是正確的,但是只描述了虛擬機的外部行為和功能,並沒有針對內部原理做出說明。一般情況下我們不需要知道虛擬機的運行原理,只要專注寫java代碼就可以了,這也正是虛擬機之所以存在的原因--屏蔽底層操作系統平台的不同並且減少基於原生語言開發的復雜性,使java這門語言能夠跨各種平台(只要虛擬機廠商在特定平台上實現了虛擬機),並且簡單易用。這些都是虛擬機的外部特性,但是從這些信息來解釋虛擬機,未免太籠統了,無法讓我們知道內部原理。


從進程的角度解釋JVM


讓我們嘗試從操作系統的層面來理解虛擬機。我們知道,虛擬機是運行在操作系統之中的,那麼什麼東西才能在操作系統中運行呢?當然是進程,因為進程是操作系統中的執行單位。可以這樣理解,當它在運行的時候,它就是一個操作系統中的進程實例,當它沒有在運行時(作為可執行文件存放於文件系統中),可以把它叫做程序。

對命令行比較熟悉的同學,都知道其實一個命令對應一個可執行的二進制文件,當敲下這個命令並且回車後,就會創建一個進程,載入對應的可執行文件到進程的地址空間中,並且執行其中的指令。下面對比C語言和Java語言的HelloWorld程序來說明問題。

首先編寫C語言版的HelloWorld程序。

總結

寫到這里,基本上關於我對java虛擬機的理解就寫完了。這篇文章的主題雖然是深入理解Java虛擬機,但是你可能感覺一點也不「深入」,也只是泛泛而談。我也有這樣的感覺。限於自己水平有限,也只能這樣了,要是想深入理解java虛擬機,強烈建議讀一下三本書:

《深入Java虛擬機》

《深入理解Java虛擬機JVM高級特性與最佳實踐》

《Java虛擬機規范》

其實我也讀過這幾本書,但是它們對虛擬機的解釋也是基於一個外部模型,而沒有深入剖析虛擬機內部的實現原理。虛擬機是一個大而復雜的東西,實現虛擬機的人都是大牛級別的,如果不是參與過虛擬機的實現,應該很少有人能把它參透。本專欄後面的一些文章也參考了這三本書, 雖然講解Java語法的書不計其數, 但是深入講解虛擬機的書, 目前為止我就見過這三本,並且網上的資料也不是很多。

最後做一個總結:

1 虛擬機並不神秘,在操作系統的角度看來,它只是一個普通進程。

2 這個叫做虛擬機的進程比較特殊,它能夠載入我們編寫的class文件。如果把JVM比作一個人,那麼class文件就是我們吃的食物。

3 載入class文件的是一個叫做類載入器的子系統。就好比我們的嘴巴,把食物吃到肚子里。

4 虛擬機中的執行引擎用來執行class文件中的位元組碼指令。就好比我們的腸胃,對吃進去的食物進行消化。

5 虛擬機在執行過程中,要分配內存創建對象。當這些對象過時無用了,必須要自動清理這些無用的對象。清理對象回收內存的任務由垃圾收集器負責。就好比人吃進去的食物,在消化之後,必須把廢物排出體外,騰出空間可以在下次餓的時候吃飯並消化食物。

(9)對java虛擬機的理解擴展閱讀:

關於JAVA虛擬機的參數說明如下:

1、運行class文件

執行帶main方法的class文件,Java虛擬機[3]命令參數行為:

java <CLASS文件名>

注意:CLASS文件名不要帶文件後綴.class

例如:

java Test

如果執行的class文件是帶包的,即在類文件中使用了:

package <;包名>

那應該在包的基路徑下執行,Java虛擬機命令行參數:

java <;包名>.CLASS文件名

例如:

PackageTest.java中,其包名為:com.ee2ee.test,對應的語句為:

package com.ee2ee.test;

PackageTest.java及編譯後的class文件PackageTest.class的存放目錄如下:

classes

|__com

|__ee2ee

|__test

|__PackageTest.java

|__PackageTest.class

要運行PackageTest.class,應在classes目錄下執行:

java com.ee2ee.test.PackageTest

2、運行jar文件中的class

原理和運行class文件一樣,只需加上參數-cp <jar文件名>;即可。

例如:執行test.jar中的類com.ee2ee.test.PackageTest,命令行如下:

java -cp test.jar com.ee2ee.test.PackageTest

3、顯示JDK版本信息

當一台機器上有多個jdk版本時,需要知道當前使用的是那個版本的jdk,使用參數-version即可知道其版本,命令行為:

java -version

4、增加虛擬機可以使用的最大內存

Java虛擬機可使用的最大內存是有限制的,預設值通常為64MB或128MB。

如果一個應用程序為了提高性能而把數據載入內存中而佔用較大的內存,比如超過了默認的最大值128MB,需要加大java虛擬機可使用的最大內存,否則會出現Out of Memory的異常。啟動java時,需要使用如下兩個參數:

-Xms java虛擬機初始化時使用的內存大小

-Xmx java虛擬機可以使用的最大內存

以上兩個命令行參數中設置的size,可以帶單位,例如:256m表示256MB

舉例說明:

java -Xms128m -Xmx256m ...

表示Java虛擬機初始化時使用的內存為128MB,可使用的最大內存為256MB。

對於tomcat,可以修改其腳本catalina. sh(Unix平台)或catalina.bat(Windows平台),設置變數JAVA_OPTS即可,例如:

JAVA_OPTS='-Xms128m -Xmx256m'



『拾』 java虛擬機是什麼意思

java虛擬機
就是SUN公司開發的一個
平台
,用執行JAVA最終
代碼
的,它是在
操作系統
上建立的虛擬CPU,用來解釋JAVA最終代碼使其能在當前機器的CPU上執行。如果是個正常的網頁沒什麼問題可以下,要是惡意的就沒准了。

熱點內容
db2plsql 發布:2025-01-22 08:19:10 瀏覽:778
豬豬俠腳本沒反應 發布:2025-01-22 08:08:37 瀏覽:811
賽博朋克跟永劫無間哪個配置高 發布:2025-01-22 08:07:07 瀏覽:534
請盡快上傳 發布:2025-01-22 08:06:22 瀏覽:188
河北編程培訓 發布:2025-01-22 08:01:42 瀏覽:591
a星演算法視頻 發布:2025-01-22 07:55:01 瀏覽:878
快手安卓怎麼直播 發布:2025-01-22 07:54:58 瀏覽:937
買伺服器搭建vpn 發布:2025-01-22 07:53:21 瀏覽:808
路由器忘記密碼如何解 發布:2025-01-22 07:38:47 瀏覽:154
5分鍾視頻編譯 發布:2025-01-22 07:36:33 瀏覽:772