jokerconf Joker 2018 (19.10.2018)

Ходячие объекты-мертвецы, или GC всегда прав

img

Расскажем об особенностях работы алгоритмов GC, из-за которых одни объекты могут быть собраны раньше, чем вы планировали, а другие, наоборот, осядут в памяти надолго и превратятся в настоящих зомби. Обсудим, чем такое грозит вашему приложению и как с этим жить.

Комментарий Программного комитета:

Рассказ о внутренностях GC, но не о том, «как», а о том, «когда», что особенно важно пользователям weak references. Речь не о конкретном алгоритме GC, а о требованиях стандарта и о том, как он фактически воплощен.

Автоматическое управление памятью — одна из основных особенностей Java и других managed языков. При этом в спецификации про GC написано очень мало: как именно собирать мусор каждой конкретной реализации JVM, предлагается решать самостоятельно. В результате для сборки мусора существует огромное количество стратегий и степеней свободы. Например, когда именно GC должен приходить за мертвым объектом? Ответ не так очевиден, а любое решение может повлиять на ход исполнения пользовательской программы.

В докладе обсудим, зачем коллектору оставлять мертвые объекты в памяти, как это сказывается на вашем приложении и как выжить во время нашествия ходячих объектов-мертвецов.