Как этот Full GC запускается, когда новое и старое поколение кажется достаточно большим? [Дубликат]

Интересно, что ни один из ответов на этой странице не упоминает два крайних случая, надеюсь, никто не возражает, если я их добавлю:

Случай с краем # 1: одновременный доступ к словарю

Родовые словари в .NET не являются потокобезопасными, а иногда могут бросать NullReference или даже (чаще) a KeyNotFoundException при попытке получить доступ к ключу из двух параллельных потоков. Исключение в этом случае является довольно ошибочным.

Случай с краем # 2: небезопасный код

Если код NullReferenceException задан кодом unsafe, вы можете посмотреть на переменные указателя , и проверьте их на IntPtr.Zero или что-то в этом роде. Это одно и то же («исключение нулевого указателя»), но в небезопасном коде переменные часто переводятся в типы значений / массивы и т. Д., И вы ударяете головой о стену, задаваясь вопросом, как тип значения может исключение.

(Еще одна причина для небезопасного использования небезопасного кода, если вам это нужно)

23
задан user331465 8 July 2011 в 16:43
поделиться

2 ответа

16
ответ дан Peter Lawrey 28 August 2018 в 04:20
поделиться

Я тестирую явный GC на своем mac, он показывает «Full GC (System)» при использовании jdk 1.6, но показывает «Full GC» с jdk 1.7

. Поэтому не полагайтесь на " System "при настройке журнала GC, если вы точно не знаете о рабочей среде и номере версии jdk

1
ответ дан user922965 28 August 2018 в 04:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: