JavaRush /Блоги Java /Random-TG /Дастур оид ба идоракунии хотираи Java (ва захира кардани ...
pandaFromMinsk
Сатҳи
Минск

Дастур оид ба идоракунии хотираи Java (ва захира кардани рамзи шумо)

Дар гурӯҳ нашр шудааст
Эзоҳи мутарҷим: хоҳиши тарҷумаи ёддошт субҳи барвақти моҳи июн пас аз хондани он дар нимхоб дар вагони метро пайдо шуд. Шунавандагони мақсаднок: одамоне, ки қадамҳои аввалини худро дар ҷаҳони Java гузошта истодаанд ва аз рӯи табиати заминаи техникӣ ё хоҳиши худ, хеле майл доранд, ки зери капали Java дохил шаванд ва ҳама равандҳои "электродинамикӣ"-ро омӯзанд. Ман боварӣ дорам, ки барои онҳое, ки инро мехонанд, ин нуқтаи ибтидоӣ барои сафар ба ҷаҳони конфигуратсияи JVM ва GC хоҳад буд. Боди одилона! Мақолаи аслӣ дар ин ҷо Ҳамчун як таҳиягар, шумо соатҳои бешуморро барои тоза кардани хатогиҳо аз барномаи Java сарф мекунед ва дар ҷое ки лозим аст, ба даст меоред. Ҳангоми санҷиш, шумо мебинед, ки барнома тадриҷан сусттар кор мекунад ва дар ниҳоят он комилан ба кор медарояд ё кори сустро нишон медиҳад. Дар ниҳоят қабул кунед, ки ихроҷи хотира рух медиҳад. Ҷамъоварии партовҳои Java барои мубориза бо ин ихроҷ тамоми кори аз дасташ меомадаро мекунад. Аммо танҳо он қадар чизҳое ҳастанд, ки ҳангоми дучор шудан бо чунин ҳолатҳо анҷом дода мешаванд. Ба шумо роҳҳои муайян кардани зангҳои ихроҷи хотира, муайян кардани сабабҳо ва фаҳмидани нақши коллектори партовҳои Java дар таъсир расонидан ба кори умумии барнома лозим аст.

Аломатҳои асосии ихроҷи хотираи Java

Якчанд аломатҳое мавҷуданд, ки нишон медиҳанд, ки барнома мушкилоти ихроҷи хотира дорад. Каме кам шудани кор, ба ҷои нокомии ногаҳонии барнома, танҳо аз ихроҷи хотира шаҳодат медиҳад. Мушкилот метавонад ҳар дафъа ҳангоми кор ё танҳо вақте рух диҳад, ки барнома бо миқдори зиёди маълумот кор мекунад ё, баръакс, шумо миқёси барномаро оғоз мекунед. Вақте ки ихроҷ тамоми захираҳои хотираи дастрасро истеъмол кардааст, барнома эҳтимол хатои аз хотираро нишон медиҳад. Агар шумо барномаро бозоғоз кунед ва ба беҳтарин умед бошед, шумо то ислоҳ шудани ихроҷ ба садамаҳои такрорӣ дучор хоҳед шуд. Умуман, ихроҷи хотира вақте рух медиҳад, ки истинодҳои an object ба ҷои озод кардани хотира ҷамъ мешаванд. Онҳо тамоми хотираи дастрасро ишғол мекунанд ва дастрасии барномаро ба захираҳои зарурии худ имконнопазир мегардонанд.

Хатогиҳои конфигуратсия ҳамчун ихроҷи хотира пайдо мешаванд

Перед тем, How заглянете в ситуации вызывающие проблемы с памятью Java и проведете анализ, необходимо убедиться, что исследования не имеют отношения к абсолютно другой задаче. Часть ошибок out-of-memory возникают из-за различных ошибок, например ошибок конфигурации. У applications, возможно, недостаток памяти в куче or оно конфликтует в системе с другими applicationsми. Если начинаете говорить о проблемах нехватки памяти, но не можете определить что вызывает утечку, взгляните на приложение по-другому. Обнаружится, что нужно сделать изменения в потоке финализации or увеличить объем permanent generation пространства, являющегося областью памяти JVM для хранения описания классов Java и некоторых дополнительных данных.

Преимущества инструментов мониторинга памяти

Инструменты мониторинга памяти дают бОльшую видимость использования доступных ресурсов приложением Java. Используя данное ПО, вы делаете шаг для сужения поиска корня проблемы утечки памяти и прочих инцидентов связанных с производительностью. Инструменты идут в нескольких категориях, и вам, возможно, нужно использовать множество приложений, чтобы разобраться How начать правильно обозначать проблему и что пошло не так, даже если вы имеете дело с утечками памяти. Heap dump (дампа кучи) файлы дают необходимые сведения для анализа Java-памяти. В этом случае вам нужно использовать два инструмента: один для генерации дамп-file и другой для подробного анализа. Такое решение дает детализированную информацию о том, что происходит с приложением. Один раз инструмент указывает места возможных проблем и работает над сужением площади, чтобы обнаружить точное место возникновения инцидента. И этот период времени - время самой длинной и портящей настроение части проб и ошибок. Анализатор памяти указывает несколько проблем в codeе, но вы не уверены абсолютно, с Howими проблемами столкнулось ваше приложение. Если всё ещё сталкиваетесь с прежней ошибкой, начните сначала и поработайте над другой возможной ошибкой. Сделайте одно изменение за раз и попытайтесь продублировать ошибку. Нужно будет дать приложению поработать некоторое время, чтобы продублировать условия возникновения ошибки. Если при первом тесте происходит утечка памяти, не забудьте протестировать приложение под нагрузкой. Приложение может работать отлично с небольшим количеством данных, но может снова выбросить прежние ошибки при работе с большим объемом данных. Если еще возникает всё та же самая ошибка, нужно начать сначала и разобрать другую возможную причину. Инструменты мониторинга памяти доказывают свою пользу после того, когда приложение стало fully работающим. Можно удаленно наблюдать за производительностью JVM и проактивным обнаружением сбойных ситуаций перед тем, How разработчик погрузится в проблему и будет собирать исторические данные производительности, чтобы помочь себе в будущем улучшить техники программирования и наблюдать How Java работает под тяжелой нагрузкой. Многие решения включают режимы оповещения "опасность" or другие подобные режимы и разработчик сразу может знать, что происходит не так, How хотелось. Каждый разработчик не хочет, чтобы критическое приложение, будучи в промэксплуатации, падало и являлось причиной потери десятков or сотен тысяч долларов во время простоя applications, поэтому инструменты мониторинга памяти уменьшают время реагирования разработчика. Приложения мониторинга памяти дают начать процесс диагностики мгновенно, instead of того, чтобы попросить вас пойти к заказчику, где никто не скажет Howая именно ошибка случилось or Howой code ошибки выдало приложение. Если часто погружаетесь в проблемы памяти и производительности вашего Java-applications, плотно возьмитесь за процесс тестирования. Обозначьте каждую слабую область в процессе разработки и измените стратегии тестирования. Посоветуйтесь с коллегами и сравните свои подходы тестирования с существующими лучшими практиками. Иногда вам надо пересмотреть маленький фрагмент codeа и далее обеспечить длительное воздействие на все приложение.

Роль Garbage Collector на память Java и утечки памяти

Garbage Collector (cборщик мусора) в Java играет ключевую роль в производительности applications и использования памяти. Он ищет неиспользуемые (мертвые) an objectы и удаляет их. Эти an objectы больше не занимают память, так что ваше приложение продолжает обеспечивать доступность ресурсов. Иногда приложение не дает GC достаточно времени or ресурсов для удаления мертвых an objectов и они накапливаются. Можно столкнуться с такой ситуацией когда идет активное обращение к an objectм, которые, вы полагаете, мертвы. Сборщик мусора не может сделать ничего c этим, т.к. его механизм автоматизированного управления памяти обходит активные an objectы. Обычно сборщик мусора работает автономно, но необходимо настроить его поведение на реагирование тяжелых проблем с памятью. Однако, GC может сам приводить к проблемам производительности.

Области GC

Сборщик мусора для оптимизации сборки разделяет an objectы на разные области. В Young Generation представлены an objectы, которые отмирают быстро. Сборщик мусора часто работает в этой области, с того момента, когда он должен проводить очистку. Объекты оставшиеся живыми по достижению определенного периода переходят в Old Generation. В области Old Generation an objectы остаются долгое время, и они не удаляются сборщиком так часто. Однако, когда сборщик работает в области, приложение проходит проходит через большую операцию, где сборщик смотрит сквозь живые an objectы для очистки мусора. В итоге an objectы applications находятся в конечной области permanent generation. Обычно, эти an objectы включают нужные метаданные JVM. Приложение не генерирует много мусора в Permanent Generation, но нуждается в сборщике для удаления классов когда классы больше не нужны.

Связь между Garbage Collector и временем отклика

Сборщик мусора, независимо от приоритета исполнения потоков applications, останавливает их не дожидаясь завершения. Такое явление называется событием "Stop the World". Область Young Generation сборщика мусора незначительно влияет на производительность, но проблемы заметны, если GC выполняет интенсивную очистку. В конечном итоге вы оказываетесь в ситуации, когда минорная сборка мусора Young Generation постоянно запущена or Old Generation переходит в неконтролируемое состояние. В такой ситуации нужно сбалансировать частоту Young Generation с производительностью, которая требует увеличение размера этой области сборщика. Области Permanent Generation и Old Generation сборщика мусора значительно влияют на производительность applications и использования памяти. Эта операция major очистки мусора проходит сквозь heap, чтобы вытолкнуть отмершие an objectы. Процесс длится дольше чем minor сборка и влияние на производительность может идти дольше. Когда высокая интенсивность очистки и большой размер области Old Generation, производительность всего applications увязывает из-за событий "Stop the world". Оптимизация сборки мусора требует мониторинга How часто программа запущена, влияния на всю производительность и способов настройки параметров applications для уменьшения частоты мониторинга. Возможно нужно будет идентифицировать один и тот же an object, размещенный больше, чем один раз, причем приложению не нужно отгораживаться от размещения or вам надо найти точки сжатия, сдерживающие всю систему. Получение правильного баланса требует уделения близкого внимания ко всему от нагрузки на CPU до циклов вашего сборщика мусора, особенно если Young и Old Generation несбалансированы. Адресация утечек памяти и оптимизация сборки мусора помогает увеличить производительность Java-applications. Вы буквально жонглируете множеством движущихся частей. Но с правильным подходом устранения проблем и инструментами анализа, спроектированных чтобы дать строгую видимость, вы достигнете света в конце туннеля. В противном случае замучаетесь с возникающими неполадками связанных с произодительностью. Тщательное размещение памяти и её мониторинг играют критическую роль в Java-приложении. Необходимо fully взять в свои руки взаимодействие между сборкой мусора, удалением an objectов и производительностью, чтобы оптимизировать приложение и избежать ошибок упирающихся в нехватку памяти. Инструменты мониторинга дают оставаться на высоте, чтобы обнаружить возможные проблемы и обозначить тенденции утorзации памяти так, что вы принимаете проактивный подход к исправлению неисправностей. Утечки памяти часто показывают неэффективность устранения неисправностей обычным путем, особенно если вы сталкиваетесь с неверными значениями параметров конфигурации, но решения вопросов связанных с памятью помогают быстро избежать инцидентов стоящих у вас на пути. Совершенство настройки памяти Java и GC делают ваш процесс разработки намного легче.
Шарҳҳо
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION