導航:首頁 > 操作系統 > 對android虛擬機的理解

對android虛擬機的理解

發布時間:2022-08-18 19:34:51

㈠ 如何理解虛擬機的概念

虛擬機(Virtual Machine)指通過軟體模擬的具有完整硬體系統功能的、運行在一個完全隔離環境中的完整計算機系統。在計算機科學中的體系結構里指一種特殊的軟體,可以在計算機平台和終端用戶之間創建一種環境,而終端用戶則是基於這個軟體所創建的環境來操作軟體。
根據其運用和與直接機器的相關性分為兩大類:
1、系統虛擬機提供一個可以運行完整操作系統的完整系統平台。
2、程序虛擬機為運行單個計算機程序設計,支持單個進程。
虛擬機的一個本質特點是運行在虛擬機上的軟體被局限在虛擬機提供的資源里——它不能超出虛擬世界。通過虛擬機軟體,可以在一台物理計算機上模擬出二台或多台虛擬的計算機,這些虛擬機完全就像真正的計算機那樣進行工作,例如安裝操作系統、安裝應用程序、訪問網路資源等等。
對於用戶而言,它只是運行在物理計算機上的一個應用程序,但是對於在虛擬機中運行的應用程序而言,它就是一台真正計算機。因此,當在虛擬機中進行軟體評測時,可能系統一樣會崩潰;但是,崩潰的只是虛擬機上的操作系統,而不是物理計算機上的操作系統,並且,使用虛擬機的「Undo」(恢復)功能,可以馬上恢復虛擬機到安裝軟體之前的狀態。

㈡ 關於安卓的java虛擬機是什麼概念!!!百度寫的太專業了!!!求解

啥格式不重要,apk只是個擴展名而已,其實只是個壓縮包。谷歌喜歡的話,叫bpk,cpk都行……android軟體時java語言寫的,但不是運行在sun官方的虛擬機上,而是谷歌自己重新寫的虛擬機dalvik。源代碼編譯成.class文件後,還要轉換成davlik的位元組碼.dex 格式。

㈢ android虛擬機是什麼一點也不懂

桌面 屬性 對話框 桌面自定義桌面 就可以 了。 正確安裝虛擬機了嗎? 系統設置好了嗎?不過貌似xp本身桌面就沒有我的電腦,在開始菜單里。 又或者

㈣ Android手機和虛擬機有什麼關系

虛擬機是虛擬的,配置都不能和真機比,因為真機有獨立的linux內核,而虛擬機是靠內存和硬碟建立內核的

㈤ 怎麼樣理解虛擬機的概念

虛擬機的概念比較寬泛,通常人們接觸到的虛擬機概念有VMware那樣的硬體模擬軟體,也有JVM這樣的介於硬體和編譯程序之間的軟體。這里所指的是後者。
虛擬機是一個抽象的計算機,和實際的計算機一樣,具有一個指令集並使用不同的存儲區域。它負責執行指令,還要管理數據、內存和寄存器。這台虛擬的機器在任何平台上都提供給編譯程序一個的共同的介面。編譯程序只需要面向虛擬機,生成虛擬機能夠理解的代碼,然後由解釋器來將虛擬機代碼轉換為特定系統的機器碼執行。

Java虛擬機

一、什麼是Java虛擬機

Java虛擬機是一個想像中的機器,在實際的計算機上通過軟體模擬來實現。Java虛擬機有自己想像中的硬體,如處理器、堆棧、寄存器等,還具有相應的指令系統。

1.為什麼要使用Java虛擬機

Java語言的一個非常重要的特點就是與平台的無關性。而使用Java虛擬機是實現這一特點的關鍵。一般的高級語言如果要在不同的平台上運行,至少需要編譯成不同的目標代碼。而引入Java語言虛擬機後,Java語言在不同平台上運行時不需要重新編譯。Java語言使用模式Java虛擬機屏蔽了與具體平台相關的信息,使得Java語言編譯程序只需生成在Java虛擬機上運行的目標代碼(位元組碼),就可以在多種平台上不加修改地運行。Java虛擬機在執行位元組碼時,把位元組碼解釋成具體平台上的機器指令執行。

2.誰需要了解Java虛擬機

Java虛擬機是Java語言底層實現的基礎,對Java語言感興趣的人都應對Java虛擬機有個大概的了解。這有助於理解Java語言的一些性質,也有助於使用Java語言。對於要在特定平台上實現Java虛擬機的軟體人員,Java語言的編譯器作者以及要用硬體晶元實現Java虛擬機的人來說,則必須深刻理解Java虛擬機的規范。另外,如果你想擴展Java語言,或是把其它語言編譯成Java語言的位元組碼,你也需要深入地了解Java虛擬機。

3.Java虛擬機支持的數據類型

Java虛擬機支持Java語言的基本數據類型如下:

byte://1位元組有符號整數的補碼
short://2位元組有符號整數的補碼
int://4位元組有符號整數的補碼
long://8位元組有符號整數的補碼
float://4位元組IEEE754單精度浮點數
double://8位元組IEEE754雙精度浮點數
char://2位元組無符號Unicode字元

幾乎所有的Java類型檢查都是在編譯時完成的。上面列出的原始數據類型的數據在Java執行時不需要用硬體標記。操作這些原始數據類型數據的位元組碼(指令)本身就已經指出了操作數的數據類型,例如iadd、ladd、fadd和dadd指令都是把兩個數相加,其操作數類型別是int、long、float和double。虛擬機沒有給boolean(布爾)類型設置單獨的指令。boolean型的數據是由integer指令,包括integer返回來處理的。boolean型的數組則是用byte數組來處理的。虛擬機使用IEEE754格式的浮點數。不支持IEEE格式的較舊的計算機,在運行Java數值計算程序時,可能會非常慢。

虛擬機支持的其它數據類型包括:
object//對一個Javaobject(對象)的4位元組引用
returnAddress//4位元組,用於jsr/ret/jsr-w/ret-w指令
注:Java數組被當作object處理。

虛擬機的規范對於object內部的結構沒有任何特殊的要求。在Sun公司的實現中,對object的引用是一個句柄,其中包含一對指針:一個指針指向該object的方法表,另一個指向該object的數據。用Java虛擬機的位元組碼表示的程序應該遵守類型規定。Java虛擬機的實現應拒絕執行違反了類型規定的位元組碼程序。Java虛擬機由於位元組碼定義的限制似乎只能運行於32位地址空間的機器上。但是可以創建一個Java虛擬機,它自動地把位元組碼轉換成64位的形式。從Java虛擬機支持的數據類型可以看出,Java對數據類型的內部格式進行了嚴格規定,這樣使得各種Java虛擬機的實現對數據的解釋是相同的,從而保證了Java的與平台無關性和可
移植性。

二、Java虛擬機體系結構

Java虛擬機由五個部分組成:一組指令集、一組寄存器、一個棧、一個無用單元收集堆(Garbage-collected-heap)、一個方法區域。這五部分是Java虛擬機的邏輯成份,不依賴任何實現技術或組織方式,但它們的功能必須在真實機器上以某種方式實現。

1.Java指令集

Java虛擬機支持大約248個位元組碼。每個位元組碼執行一種基本的CPU運算,例如,把一個整數加到寄存器,子程序轉移等。Java指令集相當於Java程序的匯編語言。
Java指令集中的指令包含一個單位元組的操作符,用於指定要執行的操作,還有0個或多個操作數,提供操作所需的參數或數據。許多指令沒有操作數,僅由一個單位元組的操作符構成。

虛擬機的內層循環的執行過程如下:

do{
取一個操作符位元組;
根據操作符的值執行一個動作;
}while(程序未結束)

由於指令系統的簡單性,使得虛擬機執行的過程十分簡單,從而有利於提高執行的效率。指令中操作數的數量和大小是由操作符決定的。如果操作數比一個位元組大,那麼它存儲的順序是高位位元組優先。例如,一個16位的參數存放時佔用兩個位元組,其值為:

第一個位元組*256+第二個位元組位元組碼指令流一般只是位元組對齊的。指令tabltch和lookup是例外,在這兩條指令內部要求強制的4位元組邊界對齊。

2.寄存器

Java虛擬機的寄存器用於保存機器的運行狀態,與微處理器中的某些專用寄存器類似。

Java虛擬機的寄存器有四種:
pc:Java程序計數器。
optop:指向操作數棧頂端的指針。
frame:指向當前執行方法的執行環境的指針。
vars:指向當前執行方法的局部變數區第一個變數的指針。

Java虛擬機

Java虛擬機是棧式的,它不定義或使用寄存器來傳遞或接受參數,其目的是為了保證指令集的簡潔性和實現時的高效性(特別是對於寄存器數目不多的處理器)。
所有寄存器都是32位的。

3.棧

Java虛擬機的棧有三個區域:局部變數區、運行環境區、操作數區。

(1)局部變數區 每個Java方法使用一個固定大小的局部變數集。它們按照與vars寄存器的字偏移量來定址。局部變數都是32位的。長整數和雙精度浮點數占據了兩個局部變數的空間,卻按照第一個局部變數的索引來定址。(例如,一個具有索引n的局部變數,如果是一個雙精度浮點數,那麼它實際占據了索引n和n+1所代表的存儲空間。)虛擬機規范並不要求在局部變數中的64位的值是64位對齊的。虛擬機提供了把局部變數中的值裝載到操作數棧的指令,也提供了把操作數棧中的值寫入局部變數的指令。

(2)運行環境區 在運行環境中包含的信息用於動態鏈接,正常的方法返回以及異常傳播。

·動態鏈接
運行環境包括對指向當前類和當前方法的解釋器符號表的指針,用於支持方法代碼的動態鏈接。方法的class文件代碼在引用要調用的方法和要訪問的變數時使用符號。動態鏈接把符號形式的方法調用翻譯成實際方法調用,裝載必要的類以解釋還沒有定義的符號,並把變數訪問翻譯成與這些變數運行時的存儲結構相應的偏移地址。動態鏈接方法和變數使得方法中使用的其它類的變化不會影響到本程序的代碼。

·正常的方法返回
如果當前方法正常地結束了,在執行了一條具有正確類型的返回指令時,調用的方法會得到一個返回值。執行環境在正常返回的情況下用於恢復調用者的寄存器,並把調用者的程序計數器增加一個恰當的數值,以跳過已執行過的方法調用指令,然後在調用者的執行環境中繼續執行下去。

·異常和錯誤傳播
異常情況在Java中被稱作Error(錯誤)或Exception(異常),是Throwable類的子類,在程序中的原因是:①動態鏈接錯,如無法找到所需的class文件。②運行時錯,如對一個空指針的引用

·程序使用了throw語句。
當異常發生時,Java虛擬機採取如下措施:
·檢查與當前方法相聯系的catch子句表。每個catch子句包含其有效指令范圍,能夠處理的異常類型,以及處理異常的代碼塊地址。
·與異常相匹配的catch子句應該符合下面的條件:造成異常的指令在其指令范圍之內,發生的異常類型是其能處理的異常類型的子類型。如果找到了匹配的catch子句,那麼系統轉移到指定的異常處理塊處執行;如果沒有找到異常處理塊,重復尋找匹配的catch子句的過程,直到當前方法的所有嵌套的catch子句都被檢查過。
·由於虛擬機從第一個匹配的catch子句處繼續執行,所以catch子句表中的順序是很重要的。因為Java代碼是結構化的,因此總可以把某個方法的所有的異常處理器都按序排列到一個表中,對任意可能的程序計數器的值,都可以用線性的順序找到合適的異常處理塊,以處理在該程序計數器值下發生的異常情況。
·如果找不到匹配的catch子句,那麼當前方法得到一個"未截獲異常"的結果並返回到當前方法的調用者,好像異常剛剛在其調用者中發生一樣。如果在調用者中仍然沒有找到相應的異常處理塊,那麼這種錯誤傳播將被繼續下去。如果錯誤被傳播到最頂層,那麼系統將調用一個預設的異常處理塊。
(3)操作數棧區 機器指令只從操作數棧中取操作數,對它們進行操作,並把結果返回到棧中。選擇棧結構的原因是:在只有少量寄存器或非通用寄存器的機器(如Intel486)上,也能夠高效地模擬虛擬機的行為。操作數棧是32位的。它用於給方法傳遞參數,並從方法接收結果,也用於支持操作的參數,並保存操作的結果。例如,iadd指令將兩個整數相加。相加的兩個整數應該是操作數棧頂的兩個字。這兩個字是由先前的指令壓進堆棧的。這兩個整數將從堆棧彈出、相加,並把結果壓回到操作數棧中。

每個原始數據類型都有專門的指令對它們進行必須的操作。每個操作數在棧中需要一個存儲位置,除了long和double型,它們需要兩個位置。操作數只能被適用於其類型的操作符所操作。例如,壓入兩個int類型的數,如果把它們當作是一個long類型的數則是非法的。在Sun的虛擬機實現中,這個限制由位元組碼驗證器強制實行。但是,有少數操作(操作符pe和swap),用於對運行時數據區進行操作時是不考慮類型的。

4.無用單元收集堆

Java的堆是一個運行時數據區,類的實例(對象)從中分配空間。Java語言具有無用單元收集能力:它不給程序員顯式釋放對象的能力。Java不規定具體使用的無用單元收集演算法,可以根據系統的需求使用各種各樣的演算法。

5.方法區

方法區與傳統語言中的編譯後代碼或是Unix進程中的正文段類似。它保存方法代碼(編譯後的java代碼)和符號表。在當前的Java實現中,方法代碼不包括在無用單元收集堆中,但計劃在將來的版本中實現。每個類文件包含了一個Java類或一個Java界面的編譯後的代碼。可以說類文件是Java語言的執行代碼文件。為了保證類文件的平台無關性,Java虛擬機規范中對類文件的格式也作了詳細的說明。其具體細節請參考Sun公司的Java虛擬機規范。

㈥ android程序員面試,應該注意哪些

談談UI中, Padding和Margin有什麼區別? widget相對位置的完成在antivity的哪個生命周期階段實現。 請解釋下在單線程模型中Message、Handler、Message Queue、Looper之間的關系。 AIDL的全稱是什麼?如何工作?能處理哪些類型的數據? 請解釋下Android程序運行時許可權與文件系統許可權的區別。 系統上安裝了多種瀏覽器,能否指定某瀏覽器訪問指定頁面? 對多線程的運用和理解,及多線程之間handle的傳值。 對android虛擬機的理解,包括內存管理機制垃圾回收機制。 Framework工作方式及原理,Activity是如何生成一個view的,機制是什麼。 android本身的一些限制,比如apk包大小限制,讀取大文件時的時間限。 如何載入的音樂信息,如何改善其效率。 ListView如何提高其效率? 啟動應用後,改變系統語言,應用的語言會改變么? 啟動一個程序,可以主界面點擊圖標進入,也可以從一個程序中跳轉過去,二者有什麼區別? Android程序與Java程序的區別? Android中Task任務棧的分配。 在Android中,怎麼節省內存的使用,怎麼主動回收內存? 不同工程中的方法是否可以相互調用? 在Android中是如何實現判斷區分通話記錄中的電話狀態,去電,來電、未接來電? dvm的進程和Linux的進程, 應用程序的進程是否為同一個概念 sim卡的EF 文件有何作用 如何判斷是否有SD卡? 嵌入式操作系統內存管理有哪幾種, 各有何特性。 什麼是嵌入式實時操作系統, Android 操作系統屬於實時操作系統嗎? 一條最長的簡訊息約佔多少byte? Linux中跨進程通信的幾種方式 。 談談對Android NDK的理解。 談談Android的優點和不足之處。 Android系統中GC什麼情況下會出現內存泄露呢? Android UI中的View如何刷新。 簡單描述下Android 數字簽名。 什麼是ANR 如何避免它? android中的動畫有哪幾類,它們的特點和區別是什麼? handler機制的原理。 android中線程與線程,進程與進程之間如何通信。 說說mvc模式的原理,它在android中的運用。 android中有哪幾種解析xml的類,官方推薦哪種?以及它們的原理和區別。 DDMS與TraceView的區別? res目錄有默認幾項resource。 android的哪個版本是一次重大的升級?兩個Activity之間跳轉時必然會執行的是哪幾個方法。 橫豎屏切換時候Activity的生命周期。 如何將一個Activity設置成窗口的樣式。 你後台的Activity被系統 回收怎麼辦? 如何退出Activity?如何安全退出已調用多個Activity的Application? 如果後台的Activity由於某原因被系統回收了,如何在被系統回收之前保存當前狀態? 兩個Activity之間怎麼傳遞數據? 怎麼讓在啟動一個Activity是就啟動一個service? 同一個程序,但不同的Activity是否可以放在不同的Task任務棧中? Activity怎麼和service綁定,怎麼在activity中啟動自己對應的service? 什麼是Service以及描述下它的生命周期。 Service有哪些啟動方法,有什麼區別,怎樣停用Service? 不用service,B頁面為音樂播放,從A跳轉到B,再返回,如何使音樂繼續播放? 什麼是IntentService?有何優點? 什麼時候使用Service? 請描述一下Intent 和 Intent Filter。 Intent傳遞數據時,可以傳遞哪些類型數據? 說說Activity,Intent,Service是什麼關系 。 請描述一下Broadcast Receiver。 在manifest和代碼中如何注冊和使 用 broadcast receiver 。 請介紹下ContentProvider是如何實現數據共享的。 請介紹下Android的數據存儲方式。 SharedPreferences:用來存儲”key-value paires“格式的數據,它是一個輕量級的鍵值存儲機制,只可以存儲基本數據類型。 文件存儲:通過FileInputStream和FileOutputStream對文件進行操作。在Android中,文件是一個應用程序私有的,一個應用無法讀寫其他應用程序的文件。

㈦ 虛擬機是什麼,有什麼好處

虛擬機(Virtual Machine)指通過軟體模擬的具有完整硬體系統功能的、運行在一個完全隔離環境中的完整計算機系統。

虛擬系統通過生成現有操作系統的全新虛擬鏡像,它具有真實windows系統完全一樣的功能,進入虛擬系統後,所有操作都是在這個全新的獨立的虛擬系統裡面進行,可以獨立安裝運行軟體,保存數據,擁有自己的獨立桌面,不會對真正的系統產生任何影響 ,而且具有能夠在現有系統與虛擬鏡像之間靈活切換的一類操作系統。




(7)對android虛擬機的理解擴展閱讀:

虛擬機技術最早由 IBM 於上世紀六七十年代提出,被定義為硬體設備的軟體模擬實現,通常的使用模式是分時共享昂貴的大型機。 虛擬機監視器(Virtual Machine Monitor,VMM)是虛擬機技術的核心,它是一層位於操作系統和計算機硬體之間的代碼,用來將硬體平台分割成多個虛擬機。

VMM 運行在特權模式,主要作用是隔離並且管理上層運行的多個虛擬機,仲裁它們對底層硬體的訪問,並為每個客戶操作系統虛擬一套獨立於實際硬體的虛擬硬體環境(包括處理器,內存,I/O 設備)。VMM 採用某種調度演算法在各個虛擬機之間共享 CPU,如採用時間片輪轉調度演算法

㈧ 請你談談對虛擬機的理解,以及在生活中能用虛擬機做啥

虛擬機其實就是在你計算和存儲資源有限情況下的一種解決方案。在一台計算資源中虛擬出多台等價的計算資源來解決問題。
虛擬機的應用很廣泛,比如搭建偽分布式集群,做一些對本機有損害性的程序研究等等。

閱讀全文

與對android虛擬機的理解相關的資料

熱點內容
電影愛情來得不準時塞爾維亞 瀏覽:748
有關監獄的恐怖片 瀏覽:242
穿越僵屍世界收女系統 瀏覽:899
java關鍵字保留字 瀏覽:244
linux系統運維下載 瀏覽:48
同程的簡便演算法 瀏覽:649
linux命令行管理主機 瀏覽:300
騰訊雲20元的伺服器 瀏覽:215
plsql編程入門 瀏覽:12
《fog》txt下載 瀏覽:494
怎樣用氣泡紙解壓 瀏覽:120
香港李時珍的經典電影 瀏覽:319
母親和房子電影 瀏覽:141
收盡天下女明星的超級主播 瀏覽:469
程序員的ios游戲 瀏覽:719
可以在線看 瀏覽:56
十三武士迅雷 瀏覽:809
網站好看,網站不用下載 瀏覽:153
優聊app怎麼上不去了賬號不存在 瀏覽:465
楚天的小說主角 瀏覽:86