垃圾回收实现

6
Java中的垃圾回收算法是用哪种语言实现的?我认为是C,请确认。

8
Java是一种编程语言,虚拟机(VM)执行垃圾回收,但Java虚拟机有多个实现。如果您想得到一个好的答案,您需要更具体地说明您所指的是哪一个。 - jasonmp85
5个回答

8
这取决于JVM。通常,垃圾收集器是使用与JVM相同的语言实现的,但并非总是如此。
在Maxine中,JVM和垃圾收集器都是用Java实现的。
在Jikes中,JVM和垃圾收集器都是用Java实现的。
在Rava中,JVM是用Ruby实现的,而垃圾收集器则根本没有被实现:Ruby已经是一种内存管理语言,因此不需要实现单独的垃圾收集器。
在IKVM中,JVM是用C#和CIL实现的,而垃圾收集器也没有被实现:CLI VES已经是一种内存管理环境,因此不需要实现单独的垃圾收集器。
在VisualAge for Java中,Java字节码被翻译成Smalltalk字节码,然后由Smalltalk环境执行。Smalltalk已经是一种内存管理语言,因此不需要实现单独的垃圾收集器。
在VMKit中,VM和垃圾收集器都是用C++编写的。
在HotSpot中,JVM和所有4(或者当前有多少个)垃圾收集器都是用C++编写的。

7

JVM可以用任何语言实现,但Sun的HotSpot是用C/C++和汇编语言编写的。

另请参阅

  • HotspotTM JavaTM虚拟机中垃圾回收的常见问题解答
  • OpenJDK / The HotSpot Group

    HotSpot代码库已经由数十个人在10年左右的时间里共同开发。它很大,包括近1500个C/C++头文件和源文件,总共约有25万行代码。除了预期的类加载器、字节码解释器和支持运行时例程外,您还可以获得两个从字节码到本地指令的运行时编译器、3个(左右)垃圾收集器以及一组高性能的运行时库,用于同步等功能。


3
据我所知,Sun JVM主要是用C++和汇编语言实现的,因此我猜测GC也是用C++实现的。

2
作为我观点的一个例子,不是所有的Java虚拟机都是用C++实现的。例如Jikes,它是元循环的,完全用Java实现。代码的最小引导部分是用C编写的,但是虚拟机的其余部分,包括内存管理(MMTk),全部用Java编写。

1
如果您想查看源代码,请下载OpenJDK源代码。警告:这并不容易理解,JVM中实现了许多非常复杂的垃圾收集算法。

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