【问题标题】:Android Runtime(ART) is virtual machine?Android Runtime(ART) 是虚拟机吗?
【发布时间】:2015-01-07 22:21:56
【问题描述】:

不知道ART是不是虚拟机。 dex2oat 将 dalvik 字节码编译成本机(特定于平台)代码,elf 文件。所以正如android开发者文章中提到的,它仍然有垃圾收集器。我不明白它是如何工作的,我们有本地编译的 elf 文件,但它仍然在虚拟机环境中运行?在这种情况下 GC 是如何工作的? 请提供一个很好的参考来阅读这个或请解释这个。 提前致谢。

【问题讨论】:

    标签: android dalvik vm-implementation android-runtime


    【解决方案1】:

    GC 只是一种管理内存的方式。在任何 Java VM 中,GC 都是负责内存分配和垃圾收集的实体。当您分配对象 GC 检查可用内存并在没有可用空间时收集垃圾。您可以用 C 或 C++ 等本地语言实现相同的算法。因此,如果您将 java 编译为字节码,然后字节码调用 GC 并且 GC 在 JVM 内运行,或者您将 java 编译为本机代码并将其与可能是共享库的 GC 链接,都没有关系。 Miriad Group (ex Esmertec) 有一个 VM,它在 ART 之前就已经做到了,但用于 Java ME

    【讨论】:

    • 但它仍然在虚拟机内部运行,我的意思是第三方应用程序的每个进程都是虚拟机实例?而当我要分配内存时,我会要求虚拟机负责部分在本机内存空间(在linux中)分配内存对吗?
    • 是的,总的来说你是对的。但是,当您说“在 linux 中分配内存”时,它并没有多大意义。 VM仍然有自己的堆,当然堆是从系统内存中分配的。应用程序或 VM 不会在系统内存中分配对象,因为 GC 不仅在收集,而且还在压缩:正在移动对象。
    猜你喜欢
    • 2014-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-13
    • 1970-01-01
    • 1970-01-01
    • 2015-02-06
    • 1970-01-01
    相关资源
    最近更新 更多