2016-10-10 2 views
2

내부 클래스 내에서 메모리 누수라는 개념을 이해하기가 상당히 어렵습니다. 내가 찾은 답의 대부분은 나 자신과 같은 초보자를 혼란스럽게 만드는 자바 맥락에서 나온다. 여기로 리디렉션 유사한 질문에Java의 중첩 클래스에서 메모리 누수를 찾아 수정하는 방법?

대부분의 답변 : When Exactly is it leak safe to use anonymous inner classes?

는 다시, 여기에 대한 대답은 OOP에 상당히 새로운 사람을 통해 얻을 어려웠다.

내 질문 (들) :

  1. 왜 메모리 누수가 내부 클래스 발생합니까?

  2. 내부 클래스를 사용하는 경우
  3. , 가장 일반적인 메모리 이 발생할 수있는 누수 무엇입니까?

  4. 하나가 자주 건너 수있는 메모리 누수에 대한 치료는 무엇인가?

답변

2

이유는 메모리 누수는 내부 클래스 발생합니까?

는 내부 클래스는 외부 클래스에 대한 참조를 유지하고 있기 때문에.

내부 클래스가 실제로 이 필요하지 않은 경우 익명 클래스에 대해서는 일반적이지 않으며 외부 클래스에 도달 할 수없는 참조는 해당 참조로 인해 가비지 콜렉터 블이 아니기 때문에이 필요합니다. 은 "누출"해제되지 않고 해방 할 필요, 즉 메모리만큼 내부 클래스 참조 간주

가 유지된다.

내부 클래스를 사용할 때 발생할 수있는 가장 일반적인 메모리 누수는 무엇입니까? 첫 번째 질문에

참조 대답.

자주 발생하는 메모리 누수에 대한 해결책은 무엇입니까?

익명, 로컬 및 내부 클래스 대신 정적 중첩 클래스를 사용하십시오. 물론 최상위 클래스도 옵션입니다. 내부 클래스의 수명이 외부 클래스의 수명을 초과하면

물론 만 필요하다.

+0

정적 내부 클래스를 사용하는 경우 외부 클래스의 정적이 아닌 필드에 액세스 할 수 없습니다. 그리고 그 외부 클래스 필드는 최종해야합니다. – Shehryar

+0

내부 클래스가 실제로 외부 클래스의 모든 필드를 필요로한다면 실제로 메모리가 필요하기 때문에 메모리 누수가 발생하지 않습니다. – Andreas

관련 문제