С теоретической точки зрения сборщики мусора - это не проблема , а решение .Системы реального времени сложны, когда есть динамическое распределение памяти.В частности, обычные функции C malloc()
и free()
не предоставляют гарантий в реальном времени (они обычно бывают быстрыми, но имеют, по крайней мере теоретически, «наихудшие случаи», когда они используют непомерное количество времени).
Так получилось, что можно построить динамический распределитель памяти, который предлагает гарантии в реальном времени, но для этого требуется, чтобы распределитель выполнял некоторые тяжелые действия, в частности, перемещал некоторые объекты в ОЗУ.Перемещение объектов подразумевает корректировку указателей (прозрачно, с точки зрения кода приложения), и на этом этапе распределитель находится всего в одном небольшом шаге от сборщика мусора.
Обычные реализации Java или .NET не предлагаютсборка мусора в режиме реального времени, в смысле гарантированного времени отклика, но их GC все еще сильно оптимизированы и большую часть времени имеют очень короткое время отклика.В нормальных условиях очень короткое среднее время ответа лучше, чем гарантированное время ответа («гарантированный» не означает «быстрый»).
Также обратите внимание, что обычные реализации Java или .NET выполняются в операционных системах, которые не являютсялибо в режиме реального времени (ОС может принять решение о планировании других потоков, либо может агрессивно отправить некоторые данные в файл подкачки и т. д.), и ни одно из них не является базовым оборудованием (например, обычный жесткий диск может делать «паузы перекалибровки» вовремяко времени).Если вы готовы терпеть случайный сбой синхронизации из-за аппаратного обеспечения, то у вас должно быть все в порядке с (тщательно настроенным) сборщиком мусора JVM.Даже для игр.