虛擬機用於在不同操作系統上運行應用程序(Java將代碼編譯爲獨立於操作系統的.class文件,並將其解釋爲字節碼)。由於android應用運行在同一個操作系統(即Android)上,因此它不需要虛擬機(我可能在這裏是錯誤的)。那爲什麼它需要一個Dalvik VM?Android爲什麼需要虛擬機(DVM)?
回答
Android平臺可以在不同的架構上運行 - ARM,MIP和x86。爲了抽象出編譯每個體系結構的二進制文件的需求,虛擬機開始發揮作用。它也爲開發人員提供內存管理。
我們需要有人來編譯和Java類轉換成可以被解釋執行的字節碼。
它類似於JVM ...你有.java文件,它將被java編譯器編譯成.class文件。 .class文件不過是由JVM運行的字節碼。 JVM可以駐留在任何平臺上(windows,linux或unix)。
在android中,文件也被編譯成.dex文件並由DVM運行。只是爲了提供一個想法,安裝應用程序時,Android OS會分配唯一的Linux用戶ID,併爲每個應用程序分配一個DVM。總之,每個應用程序都有自己的Linux進程,DVM和Linux用戶標識。
Java文件被編譯成它消耗相比.class文件存儲器更少.DEX文件。
現在假定10個應用程序有10個獨立的DVM,並且操作系統有10個進程需要處理。
在Android OS調度員或調度負責處理這10個過程....這就是爲什麼我們的Android活動的生命週期。
您需要DVM來維護每個進程(每個應用程序)的運行狀態。
爲什麼機器人需求的虛擬機的基礎上,谷歌的Android設計的API,極大地使用Java接口。 Java本身通常運行在虛擬機上。
JVM本身是一個基於堆棧機器的VM,而Android的虛擬機(稱爲Dalvik)是一個基於寄存器的虛擬機(這是爲了減少代碼生成和更快的速度獲得更好的性能,無論使用Android的任何設備)
虛擬機的目的是通過模擬它能夠抽象硬件。如果你製作一個虛擬機並編譯它以在所有可能的硬件上運行,你就會得到最初使Java變得流行的原因:一次編寫一次可移植性。
你可以寫代碼,而無需改變它,在你的虛擬機可以運行在任何硬件上運行。
Digressing,Android主要是用C(和C++?)構建的,但操縱操作系統的API是通過Java接口的,因此您需要一個虛擬機。
- 1. 什麼需要更多的虛擬機?
- 2. 爲什麼我想模擬的屬性需要虛擬?
- 3. 編寫虛擬化主機需要什麼?
- 4. 爲什麼虛擬表只有在虛擬功能的情況下才需要?
- 5. 爲什麼需要一個虛擬機執行一個java程序。
- 6. MAMP虛擬主機需要www?
- 7. 需要幫助xampp虛擬主機
- 8. 爲什麼創建虛擬表需要OPEN_READWRITE模式?
- 9. 爲什麼我們需要虛擬桌面?
- 10. 爲什麼我們需要抽象類而不是虛擬類?
- 11. 爲什麼我需要C#EF中的ID和虛擬集合?
- 12. 爲什麼我需要虛擬專用服務器(VPS)?
- 13. 爲什麼android需要jvm
- 14. 需要虛擬內存嗎?
- 15. Python - 機械化:爲什麼需要CookieJar?
- 16. 虛擬機啓動時虛擬機的啓動過程是什麼
- 17. Java客戶端虛擬機和服務器虛擬機有什麼區別?
- 18. 在Android Studio中。 Android虛擬設備未啓動。爲什麼?
- 19. 爲什麼我需要在c#類中使用虛擬修飾符?
- 20. 虛擬繼承(鑽石) - 做我爲什麼需要從最派生類
- 21. 爲什麼我們有邏輯內存時需要虛擬內存?
- 22. 安裝Tensorflow的虛擬環境:爲什麼我需要它來達到目的?
- 23. Android模擬器虛擬機加速
- 24. 爲什麼需要
- 25. 爲什麼@Override需要在Java或Android?
- 26. Android/Tensorflow:爲什麼需要測試RandomShuffleQueue?
- 27. 爲什麼JVM是基於堆棧的虛擬機?
- 28. 爲什麼Google Pipeline虛擬機實例無限期掛起?
- 29. 爲什麼我的虛擬機的git狀態會不同?
- 30. 爲什麼微軟提供IE虛擬機的Vagrant版本?