Реализация сборки мусора - PullRequest
6 голосов
/ 01 июня 2010

На каком языке реализован алгоритм сборки мусора для java.i думаю c, пожалуйста подтвердите?

Ответы [ 5 ]

8 голосов
/ 01 июня 2010

Это зависит от 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 ++.

7 голосов
/ 01 июня 2010

JVM может быть реализована на любом языке, но HotSpot от Sun написан на C / C ++ и сборке.

Смотри также

  • Часто задаваемые вопросы о сборке мусора в виртуальной машине HotspotTM JavaTM
  • OpenJDK / Группа HotSpot

    За 10 лет работы над кодовой базой HotSpot работали десятки человек. (Это хорошо и плохо.) Это большое. Существует около 1500 заголовочных и исходных файлов C / C ++, содержащих почти 250 000 строк кода. В дополнение к ожидаемому загрузчику классов, интерпретатору байт-кода и поддержке подпрограмм времени выполнения вы получаете два компилятора времени выполнения от байт-кода до собственных инструкций, 3 (или около того) сборщика мусора и набор высокопроизводительных библиотек времени выполнения для синхронизации и т. Д. 1014 *

3 голосов
/ 01 июня 2010

AFAIK Sun JVM реализована в основном на C ++ и ассемблере, поэтому я предполагаю, что GC реализован на C ++.

2 голосов
/ 01 июня 2010

В качестве примера моей точки зрения, что не все виртуальные машины Java реализованы на C ++, рассмотрим Jikes , что является метакруглым. Он полностью реализован на Java. Минимальный раздел начальной загрузки кода написан на C, но остальная часть ВМ, включая управление памятью (MMTk), полностью написана на Java.

1 голос
/ 01 июня 2010

Если вы хотите увидеть исходный код, загрузите исходный код OpenJDK .Предупреждение: это будет непросто понять, в JVM реализован ряд очень сложных алгоритмов сборки мусора.

...