Почему методы сборки мусора Java и Python различаются?

На самом деле подсчет ссылок j2se и стратегии, используемые core-java JVM Sun, представляют собой gc разные типы алгоритмов сборки java мусора.

Существует два основных j2se подхода к отслеживанию мертвых python-shell объектов: отслеживание и openjdk подсчет ссылок. При трассировке .java сборщик мусора начинается python с «корней» - таких вещей, как python-shell ссылки на стек, и отслеживает jre все доступные (живые) объекты. Все, до python-interpreter чего нельзя добраться, считается jdk мертвым. При подсчете ссылок py каждый раз, когда ссылка python изменяется, счетчик задействованных pythonic объектов обновляется. Любой python-shell объект, счетчик ссылок которого j2se становится равным нулю, считается garbage-collection мертвым.

Практически со всеми pythonista реализациями GC есть компромиссы, но core-java трассировка обычно хороша javax для операций с высокой пропускной oraclejdk способностью (т. Подсчет jdk ссылок может выполняться j2se небольшими порциями, но в gc целом будет медленнее. Это jdk может означать меньшее количество j2se зависаний, но более низкую oraclejdk производительность в целом.

Кроме core-java того, сборщик мусора с подсчетом java ссылок требует, чтобы детектор java цикла очищал любые объекты python-interpreter в цикле, которые не будут core-java обнаружены только их счетчиком pythonic ссылок. Perl 5 не имел детектора garbage-collection циклов в своей реализации jre GC и мог вызвать утечку памяти, которая oraclejdk была циклической.

Также были javax проведены исследования, чтобы oraclejdk получить лучшее из обоих j2se миров (малое время паузы, высокая jdk пропускная способность): http://cs.anu.edu.au/~Steve.Blackburn/pubs/papers/urc-oopsla-2003.pdf

java

python

garbage-collection

2022-10-17T09:39:31+00:00