JavaRush /Java Blog /Random-TL /Isang Gabay sa Pamamahala ng Java Memory (at Pag-save ng ...
pandaFromMinsk
Antas
Минск

Isang Gabay sa Pamamahala ng Java Memory (at Pag-save ng Iyong Code)

Nai-publish sa grupo
Tala ng tagasalin: ang pagnanais na isalin ang tala ay lumitaw nang maaga sa isang umaga ng Hunyo pagkatapos basahin ito nang kalahating tulog sa isang subway na kotse. Target na madla: ang mga taong gumagawa ng kanilang mga unang hakbang sa mundo ng Java at, dahil sa likas na katangian ng kanilang pangunahing teknikal na background o pagnanais, ay sabik na sabik na makuha ang ilalim ng hood ng Java at matutunan ang lahat ng "electrodynamic" na proseso. Sigurado ako na para sa mga nagbabasa nito, ito ang magiging simula ng paglalakbay sa mundo ng pag-configure ng JVM at GC. Makatarungang hangin! Orihinal na artikulo dito Bilang isang developer, gumugugol ka ng hindi mabilang na oras sa paglilinis ng mga bug mula sa isang Java application at pagkuha ng performance kung saan ito dapat. Sa panahon ng pagsubok, mapapansin mo na ang application ay unti-unting tumatakbo nang mas mabagal, at sa huli ito ay ganap na nag-crash o nagpapakita lamang ng mahinang pagganap. Sa kalaunan ay tanggapin na ang mga pagtagas ng memorya ay nangyayari. Ang garbage collector Java ay gumagawa ng makakaya upang harapin ang mga pagtagas na ito. Ngunit napakaraming bagay lamang ang maaaring gawin kapag nahaharap sa mga sitwasyong tulad nito. Kailangan mo ng mga paraan upang matukoy ang mga memory leak na tawag, tukuyin ang mga sanhi, at maunawaan ang papel ng Java garbage collector sa pag-apekto sa pangkalahatang pagganap ng application.

Pangunahing Sintomas ng Java Memory Leaks

Mayroong ilang mga sintomas na nagpapahiwatig na ang isang application ay may mga problema sa memory leak. Ang isang bahagyang pagbaba sa pagganap, sa halip na isang biglaang pagkabigo sa application, ay nagpapahiwatig lamang ng isang memory leak. Ang problema ay maaaring mangyari sa bawat oras sa panahon ng operasyon o kapag ang application ay nagsimulang gumana sa isang malaking halaga ng data o, sa kabaligtaran, sinimulan mong i-scale ang application. Malamang na magpapakita ang application ng out of memory error kapag naubos na ng leak ang lahat ng available na memory resources. Kung i-restart mo ang application at umaasa para sa pinakamahusay, makakatagpo ka ng paulit-ulit na pag-crash hanggang sa maayos ang pagtagas. Sa pangkalahatan, ang mga pagtagas ng memorya ay nangyayari kapag ang mga sanggunian ng bagay ay naipon sa halip na palayain ang memorya. Sinasakop nila ang lahat ng magagamit na memorya at ginagawang imposible para sa application na ma-access ang mga mapagkukunang kailangan nito.

Lumilitaw ang mga error sa configuration habang tumutulo ang memory

Bago ka tumingin sa mga sitwasyon na nagdudulot ng mga problema sa memorya ng Java at magsagawa ng pagsusuri, kailangan mong tiyakin na ang pananaliksik ay hindi nauugnay sa isang ganap na naiibang problema. Ang ilang mga out-of-memory error ay nangyayari dahil sa iba't ibang mga error, tulad ng mga error sa pagsasaayos. Ang application ay maaaring mababa sa heap memory o maaaring sumasalungat sa iba pang mga application sa system. Kung magsisimula kang magsalita tungkol sa mga isyu sa mababang memorya ngunit hindi mo malaman kung ano ang nagiging sanhi ng pagtagas, tingnan ang application. Malalaman mong kailangan mong gumawa ng mga pagbabago sa finalization thread o dagdagan ang dami ng permanenteng generation space, na isang lugar ng JVM memory para sa pag-iimbak ng mga paglalarawan ng mga klase ng Java at ilang karagdagang data.

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

Инструменты мониторинга памяти дают бОльшую видимость использования доступных ресурсов приложением 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 делают ваш процесс разработки намного легче.
Mga komento
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION