Внедрение JVM GC - по уважительной причине (надеюсь) - PullRequest
0 голосов
/ 12 ноября 2018

Давайте рассмотрим потенциальное состояние гонки, связанное со скоростью сбора мусора.

Исходное состояние:

main => a
a => b
b => c

main объект программных ссылок a , объект a ссылки b , b ссылки c .Теперь мы хотим сделать a эталон c вместо b .

Good:

a => c

As *На 1029 * b больше нет ссылок, это может быть сборщик мусора.

Плохо:

a = null
a => c

Между этими двумя шагами (установка a на нольи перенаправив его на c ), b может стать сборщиком мусора вместе с c .Я сомневаюсь, что такого рода ошибки могут быть обнаружены модульными тестами, поскольку GC, скорее всего, не будет работать достаточно быстро, чтобы столкнуться с проблемами.Одним из способов обнаружения проблемы является принудительное использование GC или, по крайней мере, увеличение его частоты.Есть ли какой-либо параметр командной строки или другой способ сделать это?Если нет, какие другие автоматизированные средства предотвращения подобных ошибок у нас есть?

Ответы [ 2 ]

0 голосов
/ 12 ноября 2018

Если вы устанавливаете ссылку в A для ссылки на C, как это возможно, что C не имеет ссылки уже в вашей программе (локальная переменная или как минимум что-то еще) Получаете ли вы C из ничего?Сборщик мусора даже не учитывает C для сбора мусора.

0 голосов
/ 12 ноября 2018

Вы совершенно не правы.Даже «между этими двумя шагами» есть ссылка на c где-то (подсказка: Google для корней GC).

То, что вы описываете, подразумевает надежный и быстрый сбой для всех Java-серверов, но такой проблемы нет.

...