Детерминированный GC в CLR? - PullRequest
5 голосов
/ 02 июля 2010

Существуют ли реализации CLR с детерминированной сборкой мусора?

Недетерминированные паузы в MS CLR GC не позволяют .Net быть подходящей средой для разработки в реальном времени.

Метроном GC иBEA JRockit в Java - это две детерминированные реализации GC, о которых я знаю.

Но есть ли здесь .Net-эквиваленты?

Спасибо

Ответы [ 3 ]

5 голосов
/ 02 июля 2010

Невозможно сделать детерминистический сборщик мусора, конечно, ожидать вызова GC.Collect() точно каждую секунду с использованием таймера; -).

Однако сборщик мусора содержит механизм уведомления (начиная с .NET 3.5SP1), который позволяет вам получать уведомления о том, когда произойдет сбор второго поколения.Вы можете прочитать об этом здесь .

GC теперь также содержит несколько режимов задержки, которые позволяют предотвратить любые сборы GC.Конечно, вы должны быть очень осторожны с этим, но это особенно полезно для систем реального времени.Подробнее об этом можно прочитать здесь .

2 голосов
/ 02 июля 2010

Нет, таких нет.Исходя из моего опыта, .net не может быть использован для создания систем реального времени по многим причинам, не только для сбора мусора.C или C ++ - лучший выбор.Также современные операционные системы не обеспечивают детерминированное планирование, и это касается всех приложений, независимо от языка.

0 голосов
/ 02 июля 2010

Вы должны будете контролировать GC самостоятельно, чтобы получить предсказуемое поведение в реальном времени, но если вы делаете это, то вы также можете не использовать управляемый язык.

Для систем реального времени вынужен контроль над всем, что работает.Существуют сторонние модификации Windows XP, которые делают ее в режиме реального времени (хотя не помню, мягкая она или жесткая в реальном времени).

Абсолютно неосуществимый вариант.Посмотрите на ОС Космос - написанную на C # и скомпилированную на ассемблере, я думаю - возможно, с этим можно что-то сделать:)

...