AFAIK, когда GC делает свою вещь, VM блокирует все запущенные потоки - или, по крайней мере, когда он уплотняет кучу. Это относится к современным реализациям CLR и JVM (производственные версии по состоянию на январь 2010 года)? Пожалуйста, не предоставляйте основные ссылки на GC, поскольку я понимаю рудиментарные работы.
Я предполагаю, что глобальная блокировка выполняется так же, как когда происходит уплотнение, ссылки могут быть недопустимыми в течение периода перемещения, и кажется простым просто заблокировать всю кучу (т.е. косвенно, заблокировав все потоки). Я могу представить себе более надежные механизмы, но KISS часто преобладает.
Если я ошибаюсь, на мой вопрос будет ответить простое объяснение стратегии, используемой для минимизации блокировки. Если мое предположение верно, пожалуйста, предоставьте несколько следующих вопросов:
-
Если это действительно так, то как тяжелые корпоративные двигатели, такие как JBOSS и Glassfish, поддерживают стабильно высокий уровень TPS? Я сделал некоторые поисковые запросы на JBOSS, и я ожидал найти что-то в APACHE, таком как распределитель памяти, подходящий для веб-обработки.
-
Перед лицом архитектур NUMA-esque (возможно, в ближайшем будущем) это звучит как катастрофа, если процессы не являются ЦП, связанными потоком и распределением памяти.