본문 바로가기
BackEnd/Java

[Java] 가비지 컬렉션 Garbage Collection

by summer_light 2021. 7. 27.

가비지 컬렉션 Garbage Collection

가비지 컬렉터가 더이상 사용하지 않는 객체를 제거하는 것을 가비지 컬렉션이라고한다.

 

 


가비지 컬렉션의 특징

  1. 자동 메모리 관리
  2. 가비지 컬렉션은 프로그래머가 구현할 수 없다.
  3. 가비지 컬렉션은 객체이지 참조가 아니다.
  4. 가비지 컬렉션의 대상은 살아있는 스레드가 더이상 참조하지 않는 객체이다.
  5. 다른 참조 변수가 참조하고 있는 객체는 가비지 컬렉션의 대상이 될 수 없다.
  6. 객체에 할당된 메모리를 명시적으로 해제할 수 없다.
  7. 가비지 컬렉터가 객체를 어떤 순서로 정리하는지 알 수 없다.
  8. 가비지 컬렉터가 언제 수행될지 알 수 없다.
  9. 가비지 컬렉터는 JVM이 결정하며 우리는 단지 요청만 할 수 있다.

 

 

 

가비지 컬렉션이 되려면

  1. 참조 변수에 null할당하기
    참조변수에 null을 할당하면 이 변수 이전의 값은 더이상 접근 할 수 없다.
    그래서 이 객체는 가비지 컬렉션이 된다.
    String str = new String("Hi");
    str = null;​
  2. 참조 변수에 다른 객체의 참조값을 할당하기
    참조 변수에 다른 객체의 참조 변수를 할당하면
    참조 변수가 가리키고 있던 객체를 접근할 수 없으므로 가비지 컬렉션이 된다.
    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

댓글