Детерминированный GC в CLR?
Есть ли реализации CLR, которые имеют детерминистическую сборку мусора?
Недетерминированные паузы в MS CLR GC не позволяют.Net быть подходящей средой для разработки в реальном времени.
Метроном GC и BEA JRockit в Java - две детерминированные реализации GC, о которых я знаю.
Но есть ли здесь.Net-эквиваленты?
Спасибо
3 ответа
Невозможно сделать GC детерминированным, ожидая, конечно, от вызова GC.Collect()
ровно каждую секунду, используя таймер;-).
GC, тем не менее, содержит механизм уведомления (начиная с.NET 3.5 SP1), который позволяет вам получать уведомления, когда собирается сбор 2-го поколения. Вы можете прочитать об этом здесь.
GC теперь также содержит несколько режимов задержки, которые позволяют предотвратить любые сборы GC. Конечно, вы должны быть очень осторожны с этим, но это особенно полезно для систем реального времени. Вы можете прочитать больше об этом здесь.
Нет, нет. Исходя из моего опыта,.net не может быть использован для создания систем реального времени по многим причинам, не только для сбора мусора. C или C++ - лучший выбор. Также современные операционные системы не обеспечивают детерминированное планирование, и это касается всех приложений, независимо от языка.
Вы должны будете контролировать GC самостоятельно, чтобы получить предсказуемое поведение в реальном времени, но если вы делаете это, то вы также можете не использовать управляемый язык.
Для систем реального времени вам нужен контроль над всем, что работает. Существуют сторонние модификации Windows XP, которые делают ее в реальном времени (хотя не помню, мягкая она или жесткая в реальном времени).
Совершенно неосуществимый вариант. Посмотрите на ОС Космос - написанную на C# и скомпилированную на ассемблере, я думаю - возможно, с этим можно что-то сделать