Одним из наиболее очевидных преимуществ AVA является механизм управления памятью. Вам нужно только просто создавать объекты, механизм восстановления мусора Java отвечает за распределение и освобождение памяти. Однако ситуация не так проста, как предполагалось, потому что утечки памяти часто возникают в приложениях Java.
Этот урок демонстрирует, что такое утечка памяти, почему есть утечка памяти и как предотвратить утечку памяти.
Что такое утечка памяти?
Определение: Если объекты больше не используются в приложениях, а поскольку они цитируются в другом месте, утилизация мусора не может быть удалена (это заставляет много памяти быть необоснованной, что приводит к переполнению памяти. Перевод).
Чтобы понять это определение, мы должны понять состояние объекта в памяти. На рисунке ниже показаны те, кто не используется, и они не цитируются.
На рисунке мы можем увидеть эталонный объект и неподготовленный объект (диапазон). Ни один цитируемый объект не может быть переработан с помощью механизма утилизации мусора, и эталонный объект не может быть переработан с помощью механизма восстановления мусора. Конечно, цель не используется, потому что нет других объектов, цитирующих ее. Однако не все объекты не цитируются. Некоторые неиспользованные объекты все еще цитируются в другом месте! Это причина утечки памяти.
Почему происходит утечка памяти?
Давайте придем к этому примеру ниже, чтобы понять, почему возникает утечка памяти. В следующем примере объект A ссылается на объект B. Жизненный цикл A (T1-T4) намного длиннее, чем жизненный цикл (T2-T3) B. Когда B больше не используется в приложении, A по-прежнему содержит ссылку на B. Таким образом, механизм восстановления мусора не может удалить B из памяти. Это, вероятно, приведет к распространению памяти, потому что, если многие другие объекты похожи на A, будет много объектов, которые не могут быть переработаны в памяти, которые будут потреблять много пространства памяти.
Также возможно, что B содержит большое количество ссылок на другие объекты. Эти объекты, на которые ссылается B, не будут переработаны. Все эти неиспользованные объекты будут потреблять драгоценное пространство памяти.
Как предотвратить утечки памяти?
Ниже приведены некоторые быстрые навыки для предотвращения утечки памяти:
1. Обратите внимание на класс сбора, такой как Hashmap, Arraylist и т. Д., Потому что они часто встречаются утечки памяти. Когда они объявляются как статические объекты, их жизненный цикл такой же длинный цикл применения.
2. Обратите внимание на монитор инцидента и обратный вызов. Если класс зарегистрирован у слушателя, но когда категория больше не используется, устройство мониторинга может не быть отменено, и могут возникнуть утечки памяти.
3. «Если класс управляет своей собственной памятью, программисты должны быть предупреждены о утечке памяти».