2012-06-05 3 views
2

내가 개체 A이있는 경우,? 그럼 A이 완료 될 때까지 B은 메모리에 남아 있습니까? 또는 B이 GC로 여전히 제거 되었습니까?쓰레기 수집 및 콜백

B에서 "결과"개체 또는 코드를 반환하는 대신 콜백을 사용하는 것이 좋습니다.

요약하면 호출 객체에 콜백을 사용하는 대신 결과 객체를 "반환"하는 것이 현명한 설계 (및 메모리 사용)입니까?

PS : 당신이 DAO 객체가있을 때 당신이 등록됩니다

답변

1

참고 문헌입니다. 당신이 저장/보관하지 않는 한 (주위에 강력한 참조 (즉, 적절한 등록 취소, 객체가 더 이상 사용되지 않는 참조 삭제 등), 객체가 제대로 처리 될 때 걱정할 필요가 없습니다. GC.

+0

고맙습니다. 끝나면 참조를 지우도록하겠습니다. – wired00

1

어떤 도움을 :)

건배를 통해 내 질문을 얻을 수 AsycnTask, 자사의 인위적인 상황을 언급하지 않는 특정의 예를 무시하십시오 각 콜백에 대한 클래스.

콜백을 취소하고 클래스의 B 클래스 참조를 제거하십시오.

다음과 같이 (여기서 "b"는 클래스 B의 객체입니다).

b.removeListener(this); 
b = null; 

이는 참조가 더 이상 클래스 B에 존재하지 않는 및 GC가 메모리에서 그것을 삭제됩니다 JVM을 말할 것이다.

0

콜백을 사용하면 메모리 사용 문제가 발생할 것으로 생각됩니다. 그렇지 않다면 나는 이미 혼란 스럽다. 코드를 제공하면 아이디어를 더 쉽게 이해할 수 있습니다.

IBM이 제목의 메모리 문제 또는 메모리 누수에 대해 지금까지 읽은 최고의 설명서는 http://www.ibm.com/developerworks/library/j-leaks/입니다.

배열이나 목록 등의 객체를 얻는다면 가능하면 할 수있을 때 그리고 그것을 가능한 빨리 인용 할 수 있습니다. 나는 일반적으로 결과 객체에 투표 할 것입니다.