为java.i实现c语言垃圾收集算法c,请确认?
答案 0 :(得分: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 ++编写的。
答案 1 :(得分:7)
JVM可以用任何语言实现,但Sun的HotSpot是用C / C ++和汇编语言编写的。
到目前为止,10年来,HotSpot代码库已经被数十人所使用。 (这是好事和坏事。)这很重要。有近1500个C / C ++头文件和源文件,包含近250,000行代码。除了预期的类加载器,字节码解释器和支持的运行时例程之外,您还可以获得两个运行时编译器,从字节码到本机指令,3个(左右)垃圾收集器,以及一组用于同步的高性能运行时库等。 / p>
答案 2 :(得分:3)
AFAIK Sun JVM主要是用C ++和汇编程序实现的,所以我猜测GC是用C ++实现的。
答案 3 :(得分:2)
作为我的观点的一个例子,并非所有Java VM都是用C ++实现的,请考虑Jikes,这是元循环。它完全用Java实现。代码的最小引导部分是用C语言编写的,但VM的其余部分 - 包括内存管理(MMTk) - 完全用Java编写。
答案 4 :(得分:1)