Android Runtime(ART)是一种虚拟机吗?

5
我想知道ART是否是虚拟机。dex2oat将dalvik字节码编译成本地代码(特定于平台的elf文件)。正如在android开发者文章中提到的那样,它仍然有垃圾回收器。我不明白它是如何工作的,我们有本地编译的elf文件,但它仍在虚拟机环境中运行? 在这种情况下,GC是如何工作的?请给出一个好的参考阅读材料或解释一下这个问题。谢谢。
1个回答

2

GC是管理内存的一种方式。在任何Java虚拟机中,GC是负责内存分配和垃圾回收的实体。当你分配一个对象时,GC会检查可用的内存并在没有空闲空间时收集垃圾。你可以在本地语言(如C或C++)中实现相同的算法。因此,无论你将Java编译为字节码然后字节码调用GC并在JVM内部运行,还是将Java编译为本地代码并将其与GC链接(可能是共享库),都没有关系。Miriad Group(前Esmertec)曾经有一款VM在Java ME中实现了这一点,比ART更早。


但它仍在虚拟机内运行,我的意思是第三方应用程序的每个进程都是虚拟机实例?当我想要分配内存时,我将请求虚拟机负责部分在本地内存空间(在Linux中)分配内存,我是对的吗? - user4408652
是的,总的来说你是正确的。但是当你说“在Linux中分配内存”时,这并没有太多意义。虚拟机仍然有自己的堆,而堆当然是从系统内存中分配的。应用程序或虚拟机不会在系统内存中分配对象,因为垃圾回收不仅进行收集,还进行压缩:对象正在被移动。 - mishmashru

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接