Это зависит от JVM. Часто сборщик мусора реализован на том же языке, что и JVM, но это не всегда так.
В Maxine и JVM, и сборщик мусора реализованы на Java.
В Jikes и JVM, и сборщик мусора реализованы на Java.
В Rava JVM реализована на Ruby, а сборщик мусора вообще не реализован : Ruby уже является языком с управлением памятью, нет необходимости реализовывать отдельный сборщик мусора.
В IKVM JVM реализована на C # и CIL, а сборщик мусора вообще не реализован : CLI VES уже является управляемой памятью средой, нет необходимости реализовывать отдельную сборщик мусора.
В VisualAge для Java байт-код Java преобразуется в байт-код Smalltalk, а затем выполняется средой Smalltalk. Smalltalk уже является языком с управлением памятью, поэтому нет необходимости реализовывать отдельный сборщик мусора.
В VMKit и виртуальная машина, и сборщик мусора написаны на C ++.
В HotSpot и JVM, и все 4 (или сколько их сейчас) сборщиков мусора написаны на C ++.