这取决于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++编写的。
JVM可以用任何语言实现,但Sun的HotSpot是用C/C++和汇编语言编写的。 另请参阅 HotspotTM JavaTM虚拟机中垃圾回收的常见问题解答 OpenJDK / The HotSpot Group HotSpot代码库已经由数十个人在10年左右的时间里共同开发。它很大,包括近1500个C/C++头文件和源文件,总共约有25万行代码。除了预期的类加载器、字节码解释器和支持运行时例程外,您还可以获得两个从字节码到本地指令的运行时编译器、3个(左右)垃圾收集器以及一组高性能的运行时库,用于同步等功能。
作为我观点的一个例子,不是所有的Java虚拟机都是用C++实现的。例如Jikes,它是元循环的,完全用Java实现。代码的最小引导部分是用C编写的,但是虚拟机的其余部分,包括内存管理(MMTk),全部用Java编写。