Как сборка мусора выполняется на Java и как она сравнивается с .net?

Мне интересно, каковы различия или одинаковы для обоих.

Ответ 1

Я нашел эту ссылку из моего другого вопроса на SO, который отвечает на немного о различиях сборки мусора в Java и .NET/С#. Для других, кто ищет такую ​​информацию, вот она -

В Java объекты создаются на кучи, используя новое ключевое слово. Наиболее классы в С# создаются в куче используя новое ключевое слово. Также так же, как и JVM управляет уничтожением объекты так же делает CLR через Отметка и сборка мусора Алгоритм

ПРИМЕЧАНИЕ. С# также поддерживает стеки классы, называемые типами значений, которые обсуждается ниже.

Ответ 2

Этот вопрос не подотчетен.

Во-первых, ни одна из соответствующих спецификаций ничего не сообщит о том, как Java или .net должны реализовывать сборку мусора. Таким образом, буквально нет "способа выполнения GC" на Java или в .net.

Во-вторых, детали того, как выполняется GC, различаются между различными поставщиками для Java и .net соответственно, и для любого поставщика GC может измениться с каждой платформой, каждой основной версией, малой версией и даже каждой версией патча. Кроме того, некоторые реализации Java позволяют выбирать между различными сборщиками мусора, используя параметры командной строки.

Наконец, на самом деле не имеет значения, как GC реализован в реализации Java или .NET, при условии, что его можно заставить работать в соответствии с требованиями приложения. И для Java ответ заключается в том, что он может использоваться для большинства видов приложений. (Исключение составляют, как правило, системы/приложения с жесткими требованиями реального времени или очень жесткие ограничения памяти.)

Ответ 3

Я полагаю, что концептуальной разницы нет. Поскольку модели памяти отличаются друг от друга (например, разница волатильности), реализация может различаться.