AVA의 가장 명백한 장점 중 하나는 메모리 관리 메커니즘입니다. Java의 쓰레기 복구 메커니즘은 단순히 객체 만 만들 필요가 있습니다. 그러나 메모리 누출이 Java 응용 프로그램에서 종종 발생하기 때문에 상황은 상상만큼 간단하지 않습니다.
이 튜토리얼은 메모리 누출, 메모리 누출이있는 이유 및 메모리 누출을 방지하는 방법을 보여줍니다.
메모리 누출이란 무엇입니까?
정의 : 객체가 더 이상 응용 프로그램에 사용되지 않지만 다른 곳에서 인용되기 때문에 쓰레기 재활용을 제거 할 수 없습니다 (이로 인해 많은 메모리가 불합리하여 메모리 오버플로가 발생합니다. 번역).
이 정의를 이해하려면 메모리의 객체 상태를 이해해야합니다. 아래 그림은 사용되지 않은 사람들을 보여 주며 인용되지 않았습니다.
그림에서 참조 객체와 준비되지 않은 객체 (범위)를 볼 수 있습니다. 쓰레기 재활용 메커니즘에 의해 인용 된 물체를 재활용 할 수 없으며, 기준 객체는 쓰레기 회복 메커니즘에 의해 재활용 될 수 없습니다. 물론, 대상은 그것을 인용하는 다른 물체가 없기 때문에 사용되지 않습니다. 그러나 모든 객체가 인용되지는 않습니다. 사용하지 않은 물건은 여전히 다른 곳에서 인용됩니다! 이것이 메모리 누출의 원인입니다.
메모리 누출이 발생하는 이유는 무엇입니까?
메모리 누출이 왜 발생하는지 아래 의이 예를 들어 보겠습니다. 다음 예에서 A 객체는 B 객체를 참조합니다. A의 수명주기 (T1-T4)는 B의 수명주기 (T2-T3)보다 훨씬 길다. B에 더 이상 B에 사용되지 않으면 A는 여전히 B에 대한 참조를 보유한다. 이런 식으로 쓰레기 회복 메커니즘은 메모리에서 B를 제거 할 수 없습니다. 많은 다른 물체가 A와 같으면 메모리에서 재활용 할 수없는 많은 객체가 있기 때문에 메모리 유출을 유발할 수 있습니다.
B는 다른 개체에 대한 많은 수의 참고 자료를 보유 할 수도 있습니다. B가 언급 한이 물체는 재활용되지 않습니다. 이 사용되지 않은 모든 물체는 귀중한 메모리 공간을 소비합니다.
메모리 누출을 방지하는 방법?
다음은 메모리 누출을 방지하는 몇 가지 빠른 기술입니다.
1. 메모리 누출이 종종 발생하는 곳이기 때문에 해시 맵, 어레이리스트 등과 같은 컬렉션 클래스에주의하십시오. 그들이 정적 물체로 선언 될 때, 그들의 수명주기는 응용 프로그램의 수명주기만큼 길다.
2. 입사 모니터 및 콜백에주의하십시오. 클래스가 리스너에 등록되지만 카테고리를 더 이상 사용하지 않으면 모니터링 장치가 취소되지 않고 메모리 누출이 발생할 수 있습니다.
3. "클래스가 자신의 메모리를 관리하는 경우 프로그래머는 메모리 누출에주의를 기울여야합니다. [1].