Меня недавно спросили в интервью, знаю ли я о каких-либо алгоритмах сбора мусора.
Я знал, что такое сборка мусора, но я никогда не задумывался об изучении алгоритмов сбора мусора, так как мне, как разработчику, никогда не приходилось беспокоиться об этом, и сборщик мусора выполняет всю тяжелую работу за меня.
Ребята, вы думаете, что разработчики Java должны знать об алгоритмах сборщика мусора? Если да, можете ли вы сказать мне, какие из них я должен посмотреть?
Ответы:
Я думаю, что знание алгоритмов сборки мусора совсем не важно, если вы разрабатываете «стандартное программное обеспечение», а не программные платформы. Вы должны иметь общее представление о том, как работает сборщик мусора, и это все. Если вы не испытываете критических задержек в вашем программном обеспечении, вызванных сборкой мусора, или вам не нужно оптимизировать использование памяти.
Если вы заинтересованы в этих алгоритмах, пожалуйста , просмотреть этот мой: Какие алгоритмы за низкой GC паузы?
источник
Сборка мусора - интересная, нетривиальная проблема информатики.
Знание и понимание алгоритма для него является показателем того, что у вас есть довольно глубокий интерес и понимание этих алгоритмов. Даже если вы не изучали алгоритм GC в Java, меня поразит, если кто-то сможет дать разумное описание того, какие структуры данных и алгоритмы будут использоваться.
С точки зрения программиста на Java, было бы хорошо, если бы разработчик мог описать преимущества и недостатки GC, которые включали бы немного знаний о том, как он реализован. Это указывает на то, что вы заинтересованы в том, как инструменты, которые вы используете, работают, а не просто используют их пассивно. Знание затрат также поможет вам программировать таким образом, чтобы минимизировать затраты.
Я бы не сказал, что это «необходимые знания», чтобы зарабатывать на жизнь разработчиком Java, но это плюс навык, который показывает, что вы способны и готовы пойти немного глубже, чем то, что вам нужно знать, чтобы выполнить сегодняшнюю работу.
источник
use that information
разработать свой код. Это может вызвать проблемы, поскольку GC улучшается, и ваши предположения о том, как GC больше не удерживается, и код становится неоптимальным (а в худшем случае может помешать GC). Полезно знать, но вы должны разрабатывать свой код, используя лучшие практики, а не с конкретной реализацией; компиляторы и сборщик мусора постоянно улучшаются, и в конечном итоге оптимизация макросов просто не будет полезна.String
это реализовано, то вы не будете объединять строку, используя+
цикл.Я вижу две причины, почему нужно знать, как работает сборщик мусора (или любой алгоритм / технология). Вот они:
1. Вы получаете лучшее представление о том, что происходит под написанным вами кодом. Это часто может помочь вам написать более эффективный код, который гарантирует лучшую производительность. В некоторых случаях это может быть жизненно важно. (У меня был неприятный опыт, когда GWT полагался на сборщик мусора в браузере, и у нас была огромная утечка памяти в Chrome. Поэтому нам пришлось посмотреть, что именно вызвало утечку.)
2. Такие алгоритмы всегда (или почти всегда, нет, всегда) доверял умным, опытным, квалифицированным и опытным разработчикам. Поэтому изучение их подхода может быть очень полезным.
Я вижу еще одну причину, по которой вам задавали такой вопрос на собеседовании. Некоторые разработчики (особенно мой бывший коллега) считают, что разработчик недостаточно умён или трудолюбив, если он / она не знает таких вещей. Я не согласен с этим утверждением. Но в любом случае, зная такие вещи, это хороший способ произвести впечатление на интервьюера.
источник
Вы должны знать о сборке мусора поколений и особенностях сборки мусора Java (пространства PermGen, Eden и Tenured). Вы также должны быть знакомы с сборкой мусора в целом (например, почему подсчет ссылок, как правило, плохая идея, и почему лучше использовать метку и разметку). Я также рекомендовал бы ознакомиться с некоторыми альтернативными реализациями (такими как «без пауз» GC в Zul JVM от Azul и проект IBM Metronome в реальном времени ).
источник
У вас должны быть НЕКОТОРЫЕ знания о том, как работает сборка мусора для Java по двум причинам:
Во-первых, если вы не знаете, как это работает, то вы можете случайно принять проектные решения, которые приведут к худшей производительности в вашем реальном приложении. Это становится все менее вероятным с улучшением GC, но если у вас есть выбор алгоритмов в вашем приложении, то знание чего-то о GC означает, что вы можете выбрать один со знанием того, что он собирается делать, вместо того, чтобы узнать, что это вызывает плохое поведение.
Во-вторых, если вы не знаете, как это работает, вы не сможете настроить GC для данного приложения. Большинству Java-программистов никогда не нужно настраивать GC, поскольку параметры по умолчанию работают достаточно хорошо в большинстве случаев. Если вы делаете что-то, что выходит из этого «большую часть времени», то вы можете настроить параметры GC. Делать это без ведома GC - это просто случайное вращение ручек - вы можете извлечь из этого что-то полезное, но, скорее всего, вы просто испортите ситуацию.
Итак, хотя я не ожидал бы, что хороший Java-программист будет знать все о GC под солнцем, я бы ожидал, что этот программист узнает на каком-то уровне, как GC в JVM используют функции и каковы компромиссы для этого. GC алгоритм.
источник
Да, каждый Java-разработчик должен точно знать, что происходит за кулисами виртуальной машины, и это включает в себя работу по сборке мусора.
Уровень знаний, однако, другой вопрос. Я бы не ожидал, что нормальный разработчик объяснит разницу с реальной реализацией (я должен был бы провести некоторое собственное исследование этого вопроса), однако основным принципом того, что делает GC, и какими должны быть плюсы и минусы в отношении управления памятью самостоятельно Чисто.
источник