我知道你可以在Dalvik的虛擬機中運行幾乎所有的Java,你可以在Java的虛擬機但是這個限制不是很清楚。有沒有人遇到過任何主要的絆腳石?任何主要圖書館遇到麻煩?編譯爲Java字節碼的任何語言(斯卡拉,Jython等等)不能按預期工作?在Sun VM中可以在Dalvik VM(Android的VM)上執行哪些操作?
回答
Dalvik無法處理或處理的方式與標準Java字節碼的處理方式有很多相似之處,儘管其中大部分都非常先進。
最嚴重的例子是運行時字節碼生成和自定義類加載。假設您想創建一些字節碼,然後使用classloader爲您加載它,如果該技巧適用於您的普通機器,那麼除非您更改字節碼生成,否則它將無法在Dalvik上運行。
這可以防止你使用某些依賴注入框架,最着名的例子是谷歌Guice(雖然我相信有人在這方面工作)。另一方面,AspectJ應該像使用字節碼檢測一樣編譯步驟工作(儘管我不知道是否有人試過)。
至於其他jvm語言 - 任何最終編譯爲標準字節碼並且在運行時不使用字節碼檢測的任何東西都可以轉換爲Dalvik,並且應該可以工作。我知道人們在Android上運行Jython,並且它工作正常。
要注意的其他事情是有不只是在時間編譯。這不是嚴格的Dalviks問題(如果您願意,您可以隨時編譯任何字節碼),但Android不支持這一點,並且不太可能這樣做。在標準Java的微基準測試毫無用處的情況下 - 組件在測試中具有不同的運行時特性,而不是大型系統的一部分 - Android手機的微基準測試完全有意義。
如果您看到「Dalvik Virtual Machine internals」Google IO會話,您會發現Dalvik不支持generational GC。
因此,它可能會降低頻繁對象創建和刪除的性能。 Java VM支持分代GC,所以它可以在相同的情況下顯示更好的GC性能。
此外,Dalvik使用trace-granuality JIT而不是方法granityity JIT。
另外一個我猜測可以在這裏添加的事情是Dalvik在使用反射API列出類的字段時顯然不保留字段順序。現在,反射API無論如何都沒有做出任何保證(所以理想情況下你不應該依賴它),但大多數其他虛擬機在那裏做保持順序。
只是添加到對話中,而不是爲了恢復舊線程。我只是在搜索中遇到了這個問題,並且想補充說Jython不能與Dalvik一起使用。簡單地試圖做一個你好世界的例子將產生以下結果:
- 1. 直接在桌面上執行Dalvik VM
- 2. 調試Dalvik VM
- 3. Android,是否可以在任何類型的操作系統上運行Dalvik VM以運行Android應用程序?
- 4. dalvik vm的垃圾收集
- 5. Dalvik VM調用問題
- 6. VirtualBox VM中的VirtualBox VM
- 7. 垃圾收集在Android 4.2 Jelly bean Dalvik VM中如何工作?
- 8. 什麼是Sun VM與IBM VM -Xcheck等效的選項:jni:alwayscopy?
- 9. 是否可以在Android VM中在運行時檢測ABI?
- 10. 執行時間Cloudera VM
- 11. 什麼是Dalvik VM的同步代碼?
- 12. 類初始化問題在Android中加載java.util.logging.LogManager Dalvik VM
- 13. 在Valgrind下的Sun VM中運行JNI應用程序
- 14. SL4/MVVM:在VM
- 15. 在VM啓動
- 16. WPF在VM
- 17. Dalvik VM錯誤:發現異常「Javax.xml.namespace.QName.class」
- 18. Dalvik VM找不到多個方法
- 19. Dalvik VM如何訪問I/O?
- 20. 從VM到Docker - 瞭解哪些容器在哪些主機上運行
- 21. String.getBytes(「UTF-32」)在JVM和Dalvik VM上返回不同的結果
- 22. 哪些VM或GC支持JNI鎖定?
- 23. Android VM堆大小
- 24. 在Android VM上安裝Chrome瀏覽器?
- 25. 有沒有辦法在vm中找到vm的主機名?
- 26. Android Studio中的VM不工作
- 27. 如何在CDH5.1 VM
- 28. Cloudera QuickStarts VM在Ubuntu
- 29. 如何我在VM
- 30. 如何在Oracle VM上運行命令
幾個更新: 有一個特殊版本的Guice將在Android上工作。 http://code.google.com/p/google-guice/downloads/detail?name=guice-2.0-no_aop.jar 谷歌有一個團隊正在開發面向Android的JIT。 http:// groups。google.com/group/android-platform/browse_thread/thread/331d5f5636f5f532 – 2009-12-19 02:25:54