① 安卓虛擬機和java虛擬機有什麼不同
安卓虛擬機即dalvik和java虛擬機的區別如下:
1.java虛擬機基於棧。 基於棧的機器必須使用指令來載入和操作棧上數據,所需指令更多更多 。而dalvik虛擬機是基於寄存器的:java虛擬機運行的是java位元組碼。(java類會被編譯成一個或多個位元組碼.class文件,打包到.jar文件中,java虛擬機從相應的.class文件和.jar文件中獲取相應的位元組碼)
2.Dalvik和Java之間的另外一大區別就是運行環境——Dalvik經過優化,允許在有限的內存中同時運行多個虛擬機的實例
② 安卓虛擬機干什麼用的
用來編程使用的 意思就是安卓應用 就是通過編程做出來 那麼做出來怎麼看效果呢 通過安卓虛擬機看效果 就是相當於手機了 謝謝採納
③ 安卓和linux是什麼關系安卓能運行Linux軟體為什麼說安卓是虛擬機環境虛擬機有什麼特點優
安卓一開始是使用的linux系統內核。linux操作系統內核,套上殼,加一些應用軟體,就是操作系統了。linux系統是用C語言寫的,被廣泛地移植到各種機器上。
虛擬機,就是一個虛擬的計算機硬體系統,有虛擬的CPU、指令集。運行時,將虛擬指令翻譯成實體機器指令執行。JAVA語言就是運行的在虛擬機上的。使用虛擬機的好處,就是二進制代碼可以在任何實體機器上運行,真正跨平台;缺點是翻譯執行,效率比較低。
linux系統可以安裝在任何計算機、手機上面,移植比較簡單。但是應用軟體有限。
④ 為什麼說安卓是虛擬機
因為其基於Linux的自由及開放源代碼的操作系統。
android的系統架構和其操作系統一樣,採用了分層的架構。從架構圖看,Android分為四個層,從高層到低層分別是應用程序層、應用程序框架層、系統運行庫層和Linux內核層。開發人員也可以完全訪問核心應用程序所使用的API框架。
Android為運行於Linux kernel之上,但並不是GNU/Linux。因為在GNU/Linux 里支持的功能,Android 大都沒有支持,包括Cairo、X11、Alsa、FFmpeg、GTK、Pango及Glibc等都被移除掉了。
(4)android的虛擬機是什麼擴展閱讀:
虛擬機的系統特點:
1、虛擬化技術有操作系統中內存的虛擬化,實際運行時用戶需要的內存空間可能遠遠大於物理機器的內存大小,利用內存的虛擬化技術,用戶可以將一部分硬碟虛擬化為內存。
2、虛擬機為虛擬機技術的核心,它是一層位於操作系統和計算機硬體之間的代碼,用來將硬體平台分割成多個虛擬機。
3、VMM 運行在特權模式,主要作用是隔離並且管理上層運行的多個虛擬機,仲裁它們對底層硬體的訪問,並為每個客戶操作系統虛擬一套獨立於實際硬體的虛擬硬體環境(包括處理器,內存,I/O 設備)。
⑤ 什麼是手機虛擬機
手機虛擬機一般說的是java虛擬機,因為手機上的程序都是用java編寫的,而java程序都是在java虛擬機里運行的。java虛擬機只是一個平台而已,提供一種運行環境。
⑥ 安卓模擬器是干什麼的
安卓模擬器能玩手機游戲,能模擬安卓系統,有的用來測試編程啥的,有的用來玩游戲。
用「柚子游戲」哦~~
你是玩什麼游戲的呢?
市面上最熱門的手機游戲都可以玩。
比如
奇跡暖暖、部落沖突、夢幻西遊、盜夢英雄
⑦ 安卓art虛擬機在什麼位置
一、概述
我們知道Android的程序雖然也是使用Java/Kotlin語言編碼,並生成.class位元組碼,但並不能直接運行在JVM上,而是運行在自己的VM上。而Android程序之所以不能在JVM上運行的根本原因是.class位元組碼文件並不是Android的最終可執行文件(執行效率問題),而是一個過渡產物,最終會生成dex文件在Android VM上執行。
1.1 Android虛擬機分類:
Android VM大體分為兩種: Dalvik 虛擬機和 ART虛擬機。
Dilvik 虛擬機:Android 5.0 版本之前。
ART虛擬機:Android 5.0 版本全面使用。
1.2 虛擬機的演變及優化:
Android 1.0,使用Dalvik作為Android虛擬機運行環境,此時的虛擬機是一個解釋執行器。
Android 2.2,Android 虛擬機中加入了JIT編譯器(Just-In-Time Compiler)。
Android 4.4,全新的ART虛擬機運行環境誕生,此時ART和Dalvik是共存的,用戶可以在兩者之間進行選擇。
Android 5.0,ART全面取代了Dalvik成為了Android虛擬機運行環境,並使用AOT預編譯技術在安裝Apk時全量預編譯 。
Android 7.0,ART虛擬機採用 JIT/AOT混合編譯模式。
二、Dalvik
Dalvik是Google公司自己設計用於Android平台的虛擬機,它是Android平台的重要組成部分,支持dex格式(Dalvik Executable)的Java應用程序的運行。dex格式是專門為Dalvik設計的一種壓縮格式,適合內存和處理器速度有限的系統。Google對其進行了特定的優化,經過優化的Dalvik,具有高效、簡潔、節省資源的特點,同時還允許在有限的內存中同時運行多個虛擬機的實例,並且每一個Dalvik 應用作為一個獨立的Linux進程執行。獨立的進程可以防止在虛擬機崩潰的時候所有程序都被關閉。
2.1 Dalvik和JVM的區別
Dalvik 基於寄存器,而 JVM 基於棧。
指令數量:基於寄存器的操作指令,會增加操作數的大小(劣勢),但是會大大減少操作指令的數量(優勢)
操作效率:基於寄存器(CPU上)的指令操作速度比基於操作數棧(主存)的速度快。
移植性:基於寄存器執行效率好,但是可移植性差,難跨平台。
Dalvik虛擬機有共享機制,不同應用之間在運行時可以共享相同的類,擁有更高的效率。
2.2 JIT(Just-In-Time Compile)
Android 2.2之前,Dalvik虛擬機是通過解釋器 (解釋器逐條讀入位元組碼 -> 逐條翻譯成機器碼 -> 執行機器碼)來執行程序的,效率低。針對這個問題,引進了JIT(即時編譯器)技術。它是一種優化手段。
JIT技術:將解釋過的機器碼緩存起來,下次再執行時到這個方法的時候,則直接從緩存裡面取出機器碼來執行。減少了讀取位元組碼和翻譯位元組碼的操作。以此來提高效率。JIT技術的引入使得Dalvik的性能提升了3~6倍。
注意: 並不是所有執行過的代碼對應的機器碼都會被緩存起來。而是只有被認定為熱點代碼(Hot Spot Code) 的代碼才會。這里所指的熱點代碼主要有兩類,包括:
被多次調用的方法
被多次執行的循環體(雖然只是循環體被多次執行,但仍是將整個方法的機器碼緩存起來)。
缺點: JIT技術的缺點:
每次重新啟動引用都需要重新編譯。
運行時比較耗電。
三、ART 虛擬機
ART虛擬機在Android 5.0開始替換Dalvik虛擬機,其處理應用程序執行的方式不同於Dalvik虛擬機,它不使用JIT而是使用了AOT(Ahead-Of-Time),也就是提前編譯技術。並對垃圾收集器也進行了改進和優化。
預先編譯機制(AOT)可提高應用的性能。同時ART 還具有比 Dalvik 更嚴格的安裝時驗證。
3.1 AOT(Ahead-Of-Time)預先編譯技術
AOT(提前編譯技術): 簡單來說就是提前將位元組碼轉換成本地機器碼,然後存儲在本地磁碟上,運行時可以直接執行,避免了Dalvik時期的應用運行時再來解釋位元組碼。運行時效率大大提高。
在Android 7.0 之前,Android系統安裝Apk時,會進行一次全量預編譯,將位元組碼預先編譯成本地機器碼,生成 oat文件,並存儲在本地磁碟上。這樣在App每次運行時就不需要重新編譯,可以直接使用編譯好本地機器碼,運行效率大大提升。但是這也使得安裝應用的時間大大增加,於是在Android7.0及之後,又重新引進了JIT技術,形成JIT/AOT混合編譯模式。
混合編譯的特點:
應用在安裝的時候,不進行AOT預編譯。
應用運行時直接通過解釋器翻譯位元組碼為機器碼然後執行。(在應用運行期間使用了JIT技術)並同時記錄熱點代碼信息到profile文件中。
手機進入空閑或充電狀態的時候,系統會掃描APP目錄下的profile文件,並通過AOT對熱點代碼進行編譯。
下一次啟動時,會根據profile文件來運行已編譯好的機器碼,避免在運行時對已經轉換為機器碼的方法又進行了JIT編譯。
應用運行期間會持續對熱點代碼進行記錄,以方便在空閑或充電時進行AOT,以此循環。
使用JIT編譯器來對AOT編譯器進行補充,降低了Apk安裝的時間,提升了運行時性能,節省了存儲空間,加快應用運行速度。
小結:
Android 7.0以前,採用AOT全量預編譯,Apk安裝時預編譯dex生成對應的機器碼文件。但預編譯量大導致Apk安裝時間長。
Android 7.0及之後,採用JIT/AOT混合編譯模式,根據對應的profile在空閑時進行AOT預編譯。
參考: 實現 ART 即時 (JIT) 編譯器
3.2 Dalvik與ART虛擬機的區別
Dalvik每次都要編譯再運行,Art只會安裝時啟動編譯(7.0之前全量預編譯)。
Art佔用空間比Dalvik大(原生代碼佔用的存儲空間更大),就是用「空間換時間」。
Art減少編譯,減少了CPU使用頻率,使用明顯改善電池續航。
Art應用啟動更快、運行更快、體驗更流暢、觸感反饋更及時。
3.3 Interpreter解釋器、JIT、AOT的在ART上的使用
解釋器: 逐條讀入位元組碼 -> 逐條翻譯成機器碼 -> 執行機器碼,重復執行同一代碼時需要重新翻譯執行。
JIT編譯器: 對運行時的熱點代碼(熱點代碼)進行編譯,且緩存在內存中,當下次繼續執行時,直接從內存中獲取,減少重復編譯。
AOT編譯器: 在運行前將位元組碼轉換為機器碼,在運行時直接運行轉換後的機器碼。
在這里插入圖片描述
3.4 垃圾回收方面的優化
Android虛擬機(Dalvik && ART)學習
四、Android中的幾種文件
4.1 Apk文件
APK 文件其實是 zip 格式,在Window平台上可以直接將後綴格式改為zip進行解壓。解壓後的目錄如下圖所示:
在這里插入圖片描述
文件名 說明
META-INF/ 信息描述,簽名等用途。編譯生成一個apk包時,會對所有要打包的文件做一個校驗計算,並把計算結果放在META-INF目錄下。而在Android手機上安裝apk包時,應用管理器會按照同樣的演算法對包里的文件做校驗,如果校驗結果與META-INF下的內容不一致,系統就不會安裝這個apk。這就保證了apk包里的文件不能被隨意替換
res/ 存放資源文件
libs/ 存放的是 ndk 編出來的 so 庫
AndroidManifest.xml 程序全局清單文件
classes.dex dalvik 位元組碼
resources.ars 編譯後的二進制資源文件,主要是對應的索引
assets/ 保留工程中assets目錄,其他工程下的、jar包中的assets也會合並到該assets目錄下。
4.2 dex文件
dex 文件是可被Dalvik虛擬機識別並執行的文件, Dalvik 會執行 .dex 文件中的 dalvik 位元組碼,但一般Dalvik在執行dex優化後的文件(即odex文件)。
dex文件特點:
dex文件是Android系統中的一種文件,是一種特殊的數據格式,和Apk、jar等格式文件類似。
文件更加緊湊:dex文件是能夠被DVM識別,載入並執行的文件格式。相比於Jar文件,dex會把所有包含的信息整合在一起,減少冗餘信息,從而降低了載入文件時的I/O耗時,提高類的查找速度。
dex文件包含應用程序的全部操作指令和運行時數據。
相對於PC上的JVM能運行 .class文件,Android上的Dalvik虛擬機能運行 .dex 文件。
.dex文件和 .class文件的格式對照:
在這里插入圖片描述
dex 文件結構:
在這里插入圖片描述
4.3 引起dex文件65535問題的原因
當Android系統啟動一個Apk時,會通過 dexopt 工具對dex進行優化。dexopt 的執行過程是在第一次載入dex文件的時候執行的。這個過程會生成一個odex文件,即Optimised Dex (執行odex的效率會比直接執行Dex文件的效率要高很多)。但早期Android系統中, dexopt 有一個問題(即65535問題)。dexopt會把每一個類的方法id檢索起來,存在一個鏈表結構裡面。但是這個鏈表的長度是用一個 short類型(2^16=65536)來保存的,導致了方法id的數目不能夠超過65536個。
4.4 odex文件 (Optimized DEX)
背景: 對Android dex文件進行優化來說,需要注意的一點是dex文件的結構是緊湊的,但是我們還是要想方設法進行運行速度的提高,因此我們仍然需要對dex文件進一步優化。
odex文件的使用場景:
安裝階段: Apk在安裝時,系統會進行驗證和優化,目的是為了校驗代碼合法性及優化代碼執行速度。當驗證和優化後,系統會從Apk中提取dex文件進行優化,並將優化後的產物(odex文件)保存到 data/dalvik-cache 目錄下。
運行階段: 當運行Apk的時候,會直接載入odex文件,避免重復驗證和優化,加快了Apk的響應時間。
odex 文件的生成過程:
Android 5.0之前:Dalvik虛擬機
Dalvik虛擬機會在執行dex文件前對dex文件做優化,生成可執行文件odex,保存到 data/dalvik-cache 目錄,最後把Apk文件中的dex文件刪除。
注意: 此時生成的odex文件後綴依然是dex ,它是一個dex文件,裡面仍然是位元組碼,而不是本地機器碼。
Android5.0 <= Version < Android 8.0 (Android O):ART虛擬機
Android5.0之後使用ART虛擬機,ART虛擬機使用AOT預編譯生成oat文件。oat文件是ART虛擬機運行的文件,是ELF格式二進制文件。oat文件包含dex和編譯的本地機器指令,因此比Android5.0之前的odex文件更大。
oat文件生成過程:
App在首次安裝的時候,dex2oat 工具默認會把 dex文件翻譯成本地機器指令,生成ELF格式的OAT文件,並將其放在了 /data/dalvik-cache 或 /data/app/packagename/ 目錄下,此時oat文件後綴格式為odex。
ART載入oat文件後不需要經過處理就可以直接運行,它在編譯時就從位元組碼裝換成機器碼了,因此運行速度更快。
Dalvik虛擬機執行程序dex文件前,系統會對dex文件做優化,生成可執行文件odex,保存到 data/dalvik-cache 目錄,最後把apk文件中的dex文件刪除。 (注意:此時生成的odex文件後綴依然是dex ,它是一個dex文件,裡面仍然還是位元組碼,而不是本地機器碼。)
注意: Android5.0及之後版本生成的 oat文件後綴還是odex,但是已經不是android5.0 及之前版本的文件格式,而是ELF格式封裝的本地機器碼。可以認為oat在dex上加了一層殼,可以從oat里提取出dex。
Android O及之後(>=Android 8.0):ART虛擬機
Android 8.0及之後版本,dex2oat會直接生成兩個oat文件 (即vdex文件 和 odex文件)。其中 odex 文件是從vdex 文件中提取了部分模塊生成的一個新的可執行二進制碼文件,odex 從vdex 中提取後,vdex 的大小就減少了。
文件生成過程:
App在首次安裝的時候,odex 文件就會生成在 /system/app/<packagename>/oat/ 下。
在系統運行過程中,虛擬機將其 從/system/app 下 到 /data/davilk-cache/ 下。
odex + vdex = Apk 的全部源碼 (vdex 並不是獨立於odex 的,文件 odex + vdex 才代表一個Apk )。
odex 的優點和缺點:
優點:
啟動快: 省去了系統第一次啟動應用時從Apk文件中讀取dex文件,並對dex文件做優化的過程。和
對RAM的佔用(Apk文件中的dex如果不刪除,同一個應用就會存在兩個dex文件:apk中和 data/dalvik-cache 目錄下)。
安全性:防止第三方用戶反編譯系統的軟體(odex文件是跟隨系統環境變化的,改變環境會無法運行;而apk文件中又不包含dex文件,無法獨立運行)
劣勢:
優化後的odex文件大小通常是原dex文件的1~4倍 (空間換時間)。
4.5 vdex文件
vdex文件是 Android O (Android 8.0) 新增的格式包,其目的是為了降低dex2oat時間。
dex2oat的觸發場景:
當系統OTA (系統升級) 後,用戶自己安裝的應用是不會發生任何變化的,但 framework 代碼已經發生了變化,因此就需要重新對這些應用也做dex2oat。如果沒有vdex文件,則需要重新校驗Apk里dex文件合法性;如果存在vdex文件,就可以省略校驗的過程,節省一部分時間。
當App的 JIT Profile 信息變化時,background dexopt會在後台重新做dex2oat,因為有了vdex,這個時候也可以直接跳過dex文件的校驗流程。
dex 文件直接轉化的可執行二進制碼文件:
App在首次安裝的時候,vdex文件就會生成在 /system/app/<packagename>/oat/下。
在系統運行過程中,虛擬機將其從 /system/app 下 到 /data/davilk-cache/ 下。
4.6 art文件
art文件是由虛擬機執行odex文件後,記錄虛擬機執行Apk啟動的常用函數地址信息後生成出來的文件(記錄函數地址信息方便定址),目的 是用於加快應用啟動速度。通常會在data/dalvik-cache/ 目錄中保存常用的jar包的相關地址記錄。
第一次開機不會生成在 /system/app/<packagename>/oat/ 下,以後也不會。
odex 文件在運行時,虛擬機會計算函數調用頻率,進行函數地址的修改。
最後在 /data/davilk-cache/ 由虛擬機生成 art文件(art文件生成)。
生成 art文件後,/system/app 下的odex 和 vdex 會無效,即使你刪除,apk也會正常運行。
push 一個新的apk file 覆蓋之前 /system/app 下Apk file ,會觸發 PMS 掃描時下發 force_dex 的flag ,強行生成新的vdex 文件 ,覆蓋之前的vdex 文件,由於某種機制,這個新vdex 文件會到 /data/dalvik-cache/ 下,於是 art 文件也變化了。
4.7 oat文件
ART虛擬機運行的是oat文件,oat文件是一種Android私有ELF文件格式,oat文件包含有從dex文件翻譯而來的本地機器指令,還包含有原來的dex文件內容(如下圖所示),因此oat文件比odex文件更大。APK在安裝的過程中,會通過dex2oat工具生成一個OAT文件(文件後綴還是odex)。對於apk來說,oat文件實際上就是對odex文件的包裝,即oat=odex。
注意: Android5.0 及之後的版本,oat文件的後綴還是odex,但是已經不是android5.0 之前的文件格式,而是ELF格式封裝的本地機器碼。可以認為oat在dex上加了一層殼,可以從oat里提取出dex。
⑧ 安卓虛擬機的介紹
這款軟體是google官方出品,以方便開發者使用安卓環境,方便開發。可以讓你在PC端(耐皮讓電腦上)安裝運行模擬Android系統。並可以在電腦端進行幾乎任何手機上可以進行的操作,甚至還握團可以像手機一樣連接電腦,被手機助手檢測到,可以模擬所有官方版本的安卓系統,並且有多款皮膚和屏幕樣式可供選擇。但由於windows電腦需要跨平台,所以模擬出來的效果和虛擬機性能可沒有arm機器跑起來的好。昌局