安卓是谷歌將它從開源linux上改造而來,依舊保持開源特性。為了應用開發(fā)者更多地開發(fā)安卓程序,自然也就保留了linux上的虛擬機機制。同時,安卓的目標是手機等移動終端,這些設(shè)備的處理器五花百門,而且開源安卓也會被各種深入定制,這同樣導致了安卓依然沿用了虛擬機機制來保持高兼容性。當然,這些華為研發(fā)了方舟編譯器,讓系統(tǒng)直接運行機器碼,以此來消除虛擬機帶來的弊端。
創(chuàng)新互聯(lián)長期為上千余家客戶提供的網(wǎng)站建設(shè)服務(wù),團隊從業(yè)經(jīng)驗10年,關(guān)注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為巍山企業(yè)提供專業(yè)的成都做網(wǎng)站、成都網(wǎng)站設(shè)計、成都外貿(mào)網(wǎng)站建設(shè),巍山網(wǎng)站改版等技術(shù)服務(wù)。擁有十年豐富建站經(jīng)驗和眾多成功案例,為您定制開發(fā)。
1、安卓的誕生過程決定了它會沿用linux的虛擬機
安卓系統(tǒng)最早并不是谷歌研發(fā)出來的,而是一家名叫Android的初創(chuàng)公司研發(fā)的。這家公司成立22個月后,就把原始Android雛形系統(tǒng)以4千萬美元的價格賣給了谷歌。 這個雛形原本就基于linux系統(tǒng)研發(fā)而來,自然里面也還是沿用了linux的虛擬機機制。
2、移動終端硬件廠商太多,也只能沿用虛擬機方式
谷歌拿到系統(tǒng)后,自己繼續(xù)研發(fā)Android系統(tǒng),在2007年還集合了84家當時一流的硬件廠商組成研發(fā)聯(lián)盟。整個研發(fā)依然還是基于linux開源系統(tǒng),但它解決了商業(yè)化的一個大難題。那就是,linux是開源系統(tǒng),是有GPL開源協(xié)議的。很多硬件廠家為了適配該系統(tǒng),必須將在上面研發(fā)的驅(qū)動程序公開,一旦公開驅(qū)動程序代碼就相當于公開了自己的硬件設(shè)計。而谷歌研發(fā)的Android系統(tǒng)解決了這個問題,它將驅(qū)動程序放置到了userspace里面,并讓它可以通過l內(nèi)核訪問硬件。同時,公開接口就可以讓硬件廠商編寫驅(qū)動程序。硬件廠商只需要提供驅(qū)動程序即可,不需要公開源代碼了。
這么多硬件廠商一起研發(fā),自然就會 面臨一個問題就是每個廠商的硬件都不同。這對Android生態(tài)發(fā)展來說是個必須解決的兼容性問題。最好的辦法依然是沿用linux的虛擬機機制 ,這樣Android的軟件作者就無需針對不同硬件重新開發(fā)軟件。只需要一次開發(fā)就可以在安卓系統(tǒng)上的虛擬機中運行。
3、華為的方舟編譯器
安卓的虛擬機機制在很大程度上解決了兼容性的問題,但是這種邊解釋邊執(zhí)行的方式,也降低了軟件的運行效率。這些年,華為在這方面的研發(fā)上花了大功夫,成功研制出了“方舟”編譯器。該編譯器就是為了解決這個問題而誕生的。如果軟件作者采用方舟編譯器重新編譯自己的程序。它的軟件就可以以機器碼的形式在安卓系統(tǒng)上高效運行,并且方舟編譯器還會對程序進行優(yōu)化。按照華為方面的數(shù)據(jù)顯示, 使用華為方舟編譯器編譯后的程序,操作流暢度提升24%,系統(tǒng)響應速度提升44%,第三方應用操作流暢度提升60%!
總結(jié)
Android沒有繞開虛擬機直接運行,是因為從它研發(fā)之初為了保持高兼容性,不得不沿用了虛擬機的機制。但在這些年,華為研發(fā)了“方舟”編譯器,就是為了解決這個問題。通過方舟編譯器編譯后的程序可以直接以機器碼的形式在安卓系統(tǒng)上運行,效率大大提高。
為了多點兒面試題[機智]
當初設(shè)計android的時候,設(shè)計人員只是軟件工程師,無法針對某個CPU(目前有的CPU框架intel,arm,mips,rsicv等)去開發(fā)。最好的是,我針對所有CPU都支持。
跨平臺,是指java語言編寫的程序,一次編譯后,可以在多個系統(tǒng)平臺上運行。
因為機器針對不同機器語言,有不同執(zhí)行邏輯。
就好比二進制000100,在arm里面是調(diào)用加法器,而riscv是調(diào)用乘法器一樣。所以,需要給這些不同平臺請個翻譯。而虛擬機就是起到翻譯作用。
這樣雖然增加了消耗(例如執(zhí)行同樣代碼,時間消耗上,c明顯由于java),但是可以某種意義上,把軟件,物理硬件分開了。軟件重點設(shè)計自己app,而硬件不斷增加CPU性能。
因為上層應用是 建立在 java 庫的基礎(chǔ)上,運行 java 庫 需要 java 虛擬機,調(diào)試模式,可以登錄到系統(tǒng)里,直接運行l(wèi)inux 命令,也可以下載運行 c程序。
啥叫Android不可以繞開虛擬機直接運行?Android本質(zhì)上是Linux的變種,它本身就是應用APP的虛擬機容器,Android源碼針對硬件平臺編譯之后,就是直接在CPU上運行的機器碼了,它的運行并不依賴于其他的虛擬機。
APP是JAVA打包的,倒是需要在Android的JVM里運行,畢竟要考慮跨平臺嘛。
ActivityThread.java就是一個應用程序,有main方法,是一個進程,就是靠虛擬機,沒有這個就沒有app。咋繞開,繞開就得不用這個,得從內(nèi)部更換成別的,都更換了那就不是簡單的事情了
因為java代碼必須編譯成機器語言才行,這時候就要接助虛擬機
在問為什么前,先問下是什么?Android是可以不依賴虛擬機運行的,只需要改一下重新編譯就好了。
系統(tǒng)就是這么設(shè)計的
1、如果使用ADT自帶的,點擊Eclipse菜單欄中的Android?Virtual?Device?Manager按鈕
2、彈出的窗口中選擇“Create”
3、配置虛擬機,起個虛擬機名字,其他選項,在下拉列表中選擇,關(guān)于各個選項的使用說明,可以百度TeachCourse,記得好像有介紹,謝謝采納!
用安卓AndroidVirtualDevice(AVD)虛擬機調(diào)試AndroidAPP程序,如果不運行,建議按一以下步驟重試
1.重新建立虛擬機打開Eclipse軟件后,在主界面點擊AndroidVirtualDeviceManager,出現(xiàn)虛擬機管理界面,點擊New按鈕彈出虛擬機參數(shù)配置界面,選擇適宜的虛擬機參數(shù)比如屏幕大小、分辨率、內(nèi)存RAM、SD卡大小等,填入后點擊OK創(chuàng)建完畢后關(guān)閉虛擬機管理頁面。2.運行andr護釘篙固蕻改戈爽恭鯨oid應用點擊工程runasandroidapplication后,系統(tǒng)就會啟動虛擬機,在剛開始時虛擬機界面如下,一段時間后,會運行Android程序。
3.更新SDK多數(shù)情況下虛擬機不能啟動,報錯,或無法運行程序都是因為SDK版本太老導致,建議先升級SDK,并下載不同版本的模擬器提示:虛擬機建立時會進行一系列內(nèi)部操作,需要花較長時間,建議,在建立一個虛擬機后不要關(guān)閉虛擬機界面,直接切換不用的工程,就可以運行不同的APP
jvm運行時數(shù)據(jù)區(qū)域解析
劉望舒的BLOG
虛擬機的內(nèi)存模型
1.程序計數(shù)器: 確定程序指令執(zhí)行順序的,是唯一一塊不會發(fā)生內(nèi)存溢出的區(qū)域
2. Java虛擬機棧
**它也是線程私有的,負責存儲方法內(nèi)的局部變量,方法出口等。每執(zhí)行一個方法都相當于壓如一個棧幀,方法執(zhí)行完比后這個棧幀從Java虛擬機棧中彈出。
3.本地方法區(qū)
負責管理虛擬機用到的 C 的方法。
4.堆內(nèi)存區(qū)域
Java堆是一塊被所有線程共享的區(qū)域,用來存放對象的實例。它不需要物理上連續(xù),只需要邏輯上連續(xù)就可以。
5.方法區(qū)
方法區(qū)是被所有線程共享的的內(nèi)存區(qū)域,用來存放已經(jīng)被Java虛擬機加載的類的結(jié)構(gòu)信息:運行時常量池,字段,方法信息,靜態(tài)變量等數(shù)據(jù)。
class文件的內(nèi)容
因為其基于Linux的自由及開放源代碼的操作系統(tǒng)。
Android的系統(tǒng)架構(gòu)和其操作系統(tǒng)一樣,采用了分層的架構(gòu)。從架構(gòu)圖看,Android分為四個層,從高層到低層分別是應用程序?qū)?、應用程序框架層、系統(tǒng)運行庫層和Linux內(nèi)核層。開發(fā)人員也可以完全訪問核心應用程序所使用的API框架。
Android為運行于Linux kernel之上,但并不是GNU/Linux。因為在GNU/Linux 里支持的功能,Android 大都沒有支持,包括Cairo、X11、Alsa、FFmpeg、GTK、Pango及Glibc等都被移除掉了。
擴展資料:
虛擬機的系統(tǒng)特點:
1、虛擬化技術(shù)有操作系統(tǒng)中內(nèi)存的虛擬化,實際運行時用戶需要的內(nèi)存空間可能遠遠大于物理機器的內(nèi)存大小,利用內(nèi)存的虛擬化技術(shù),用戶可以將一部分硬盤虛擬化為內(nèi)存。
2、?虛擬機為虛擬機技術(shù)的核心,它是一層位于操作系統(tǒng)和計算機硬件之間的代碼,用來將硬件平臺分割成多個虛擬機。
3、VMM 運行在特權(quán)模式,主要作用是隔離并且管理上層運行的多個虛擬機,仲裁它們對底層硬件的訪問,并為每個客戶操作系統(tǒng)虛擬一套獨立于實際硬件的虛擬硬件環(huán)境(包括處理器,內(nèi)存,I/O 設(shè)備)。
參考資料來源:百度百科-Android