我想知道ART是否是虚拟机。dex2oat将dalvik字节码编译成本地代码(特定于平台的elf文件)。正如在android开发者文章中提到的那样,它仍然有垃圾回收器。我不明白它是如何工作的,我们有本地编译的elf文件,但它仍在虚拟机环境中运行? 在这种情况下,GC是如何工作的?请给出一个好的参考阅读材料或解释一下这个问题。谢谢。
GC是管理内存的一种方式。在任何Java虚拟机中,GC是负责内存分配和垃圾回收的实体。当你分配一个对象时,GC会检查可用的内存并在没有空闲空间时收集垃圾。你可以在本地语言(如C或C++)中实现相同的算法。因此,无论你将Java编译为字节码然后字节码调用GC并在JVM内部运行,还是将Java编译为本地代码并将其与GC链接(可能是共享库),都没有关系。Miriad Group(前Esmertec)曾经有一款VM在Java ME中实现了这一点,比ART更早。