가비지 컬렉션 Garbage Collection
가비지 컬렉터가 더이상 사용하지 않는 객체를 제거하는 것을 가비지 컬렉션이라고한다.
가비지 컬렉션의 특징
- 자동 메모리 관리
- 가비지 컬렉션은 프로그래머가 구현할 수 없다.
- 가비지 컬렉션은 객체이지 참조가 아니다.
- 가비지 컬렉션의 대상은 살아있는 스레드가 더이상 참조하지 않는 객체이다.
- 다른 참조 변수가 참조하고 있는 객체는 가비지 컬렉션의 대상이 될 수 없다.
- 객체에 할당된 메모리를 명시적으로 해제할 수 없다.
- 가비지 컬렉터가 객체를 어떤 순서로 정리하는지 알 수 없다.
- 가비지 컬렉터가 언제 수행될지 알 수 없다.
- 가비지 컬렉터는 JVM이 결정하며 우리는 단지 요청만 할 수 있다.
가비지 컬렉션이 되려면
- 참조 변수에 null할당하기
참조변수에 null을 할당하면 이 변수 이전의 값은 더이상 접근 할 수 없다.
그래서 이 객체는 가비지 컬렉션이 된다.
String str = new String("Hi"); str = null;
- 참조 변수에 다른 객체의 참조값을 할당하기
참조 변수에 다른 객체의 참조 변수를 할당하면
참조 변수가 가리키고 있던 객체를 접근할 수 없으므로 가비지 컬렉션이 된다.
String str = new String("Hi"); String str2 = new String("Hi"); str = str2;
가비지 컬렉션 요청하기
어떤 객체가 가비지 컬랙션 대상이 되었다고해서 바로 가비지 컬렉션이 동작하지 않는다.
가비지 컬렉션은 JVM이 스스로 동작시키므로 프로그래머가 강제시킬 수 없다.
다만 아래와 같은 두 가지 방법으로 요청은 할 수 있다.
System.gc();
Runtime.getRuntime().gc();
EX01. 가비지 컬렉션
str2 = str; 을 하는 순간 str2이 가리키고 있던 "Hi"는 혼자 남겨지게 되고,따라서 시간이 지나면 가비지 컬렉터에 의해 메모리에서 사라지게 된다.
public class GC {
public static void main(String[] args) {
String str = new String("Hi");
String str2 = new String("Hi");
str2 = str;
System.gc();
Runtime.getRuntime().gc();
}
}
'BackEnd > Java' 카테고리의 다른 글
[Java] 간단하게 네트워크 사용해보기 (java.net) (0) | 2021.08.03 |
---|---|
[Java] 쓰레드 Thread (0) | 2021.08.01 |
[Java] 자바로 Excel 파일 만들기 (0) | 2021.07.27 |
[Java] 아파치 POI 설치 및 사용법 (0) | 2021.07.26 |
[Java] IO Stream (0) | 2021.07.26 |
댓글