2012-01-09 1 views
3

null explicit에 대한 참조 지정은 gc가 그것을 수집하는 데 도움이 될 것이라고 들었습니다.ref가 더 이상 사용되지 않을 때 null을 할당하는 이점이 있습니까?

사실입니까?

개체가 범위를 벗어난 경우 신속하게 gc를 얻을 수 있습니까?

+1

중복 가능 : http://stackoverflow.com/questions/473685/does-it-help-gc-to-null-local-variables-in-java – Kai

+0

도움이 될 수도 있습니다. http://stackoverflow.com/ 질문/850878/do-setting-java-objects-to-null-do-anything-anymore 및 http://stackoverflow.com/questions/680550/explicit-nulling –

답변

6

개체가 범위를 벗어난 경우 신속하게 gc를 얻을 수 있습니까?

일반적으로 대답하기가 불가능합니다. 그러나 참조가 범위를 벗어나면 바로 전에 null으로 설정하면 거의 아무 것도 얻을 수 없습니다.

반면에 참조 변수가 수명이 긴 경우 null으로 설정하면 참조 된 개체가 더 이상 필요하지 않은 경우 유용 할 수 있습니다.

3

일반적으로 JVM은 필요할 때 가비지 수집을 수행하므로 null에 대한 참조를 할당해도 더 빨리 처리 할 수 ​​있습니다.

0

유일한 참조 인 경우 GC는 개체가 사용하고있는 힙의 공간을 확보 할 수 있습니다. 다만, 같은 오브젝트에 다른 참조가있는 경우, 최초의 참조를 null로 설정해도 아무것도 실시하지 않습니다. 두 번째 참조는 개체를 계속 유지하므로 GC는 공간을 확보하지 않습니다.

2

보관하려는 배열 또는 참조가있는 경우 null 가치가 있습니다.

범위를 벗어나지 않는 큰 개체가있는 긴 메서드가있는 경우 큰 개체를 참조하면 null 값을 가질 수 있습니다. 그러나이 상황에서는 개체가 더 이상 필요하지 않아 범위를 벗어나는 지점에서 메서드를 분리하는 것이 좋습니다.

0

일반적으로 참조가 범위를 벗어나려고하면 곧 명시 적으로 null을 지정할 필요가 없습니다. 유일한 명시 적 널링 아니면 내가 의식적으로 사용 참조의 제거는 다음과 같습니다 해당 자원보다 더 긴 수명을 가진 개체와 관련된 자원을 닫기

  1. . 예를 들어, java.sql.Connection 구현에는 일반적으로 연결된 실제 연결 (예 : 소켓)이 있습니다. java.sql.Connection이 닫히면 더 이상 실제 연결을 사용하지 않으므로이 실제 연결을 null로 설정할 수 있습니다. sql.Connection은 사용자가 무기한으로 보유 할 수 있습니다. A의

  2. 처리 상대적으로 큰 '일회용'를 객체 (I은 JDBC 드라이버의 개발자 나처럼 나는이 예제는 자바 개발자 발생하지 않습니다 일반적으로,이 예제를 사용하지만, 비슷한 상황이 존재) 목록 또는 배열 구조. 예 : JavaMail 라이브러리는 메시지를 가져 오는 메소드를 제공합니다. 이것들은 일련의 메시지를 리턴한다. 메시지를 순차적으로 처리 한 다음 더 이상 필요하지 않으면 처리 후에 배열 항목을 null로하면 응용 프로그램의 메모리 사용 공간이 줄어들 수 있습니다 (IMAP을 사용하면 서버에서 정보를로드하여 메시지에 저장할 수 있습니다) 처리로 인해 크기가 커짐).

은 아마 내가 명시 적으로 참조를 null로 몇 가지 다른 경우가 있습니다,하지만하지 가비지 컬렉션 또는 메모리 사용에 대한 우려의 무언가의 가용성을 의미하는 것이입니다.

그러나 언제나 그렇듯이 : 도움이된다고 생각하기 때문에 null이 아닙니다. 코드를 프로파일 링하고 메모리 사용량을 측정하는 등 도움이된다면 null을 사용하십시오. 취미 응용 프로그램이나 대학 과제에서 벗어난 것이라면 신경 쓸 필요가 없습니다.

관련 문제