Страницы

Поиск по вопросам

среда, 27 ноября 2019 г.

Зачем java-программисту знать как работает сборщик мусора и как устроен байт-код?

#java #jvm #сборщик_мусора #байткод


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


Ответы

Ответ 1



У сборщика мусора есть разные стратегии и реализации: Serial GC, Parallel GC, CMS GC, G1. Каждый из них обладает набором своих параметров, регулируя которые можно добиться тонкой настройки JVM под конкретное приложение (в зависимости от задач можно увеличить пропускную способность, уменьшить STW-задержки, уменьшить потребляемые ресурсы, грамотно выделить объемы памяти под молодое/старое поколения и т.п.). Естественно знать эти нюансы не обязательно и можно просто пользоваться стандартными настройками JVM... До тех пор пока ваше приложение не начинает пожирать всю доступную оперативную память или появляются задержки в его работе. Вот тогда-то эти знания и пригодятся. На мой взгляд, хороший программист тем и отличается, что он обладает широким кругозором и знает как работает тот инструмент, которым он пользуется.

Ответ 2



На практике когда вы используете sun.misc.Unsafe или сталкиваетесь с SoftReference, WeakReference, PhantomReference, или ваша система тормозит ввиду большого количества объектов и соответственно, частых вызовов GC, неплохо понимать как вся эта кухня работает изнутри. Тогда вы сможете решить возникшие проблемы несколько быстрее. Байт код вещь ещё более низкоуровневая, опять же, нужно понимать как работают определенные структуры кода, какой низкоуровневый код могут сгенерировать. Сразу вспомнился забавный синтетический пример: https://habrahabr.ru/post/245333/ Любой разработчик, который понимает что происходит на более низком уровне, будет писать более эффективный код. Начиная от элементарного, что спрашивается и освещается везде и всеми, вроде принципов работы коллекций, заканчивая работой с памятью на самом низком уровне процессорного кэша. А сборщик мусора - не тот инструмент, который всё сделает за вас, это лишь ваш небольшой помощник.

Ответ 3



Знания как работает сборщик мусора и как устроен байт-код, а также как устроена JVM в целом дают возможность кодить более эффективно. Особенно это важно на проектах где необходимо выжать максимум из JVM, так как ресурсы могут быть ограничены.

Комментариев нет:

Отправить комментарий