본문 바로가기
java/개념

객체 소멸과 가비지 컬렉션

by unhyepnhj 2024. 5. 20.

객체 소멸

- new에 의해 할당된 객체 메모리를 자바 가상 기계의 가용 메모리로 되돌려 주는 행위

- 자바 응용프로그램에서 임의로 객체를 소멸시킬 수 없음


가비지(garbage)

- 자바 응용프로그램에서 더 이상 사용되지 않게 된 객체나 배열 메모리

- 가리키는 레퍼런스가 하나도 없는 객체나 배열

- 응용프로그램이 더 이상 접근할 수 없음

a = new Person("이몽룡");
b = new Person("성춘향");
//2개의 Person 객체 생성

b = a;
//레퍼런스 b는 a가 가리키던 객체를 가리킴
//b가 가리키던 처음 객체는 아무도 참조하지 않게 됨(접근 불가) -> 가비지


가비지 컬렉션

- 자바에서 가비지를 자동 회수하여 가용 메모리로 반환하는 과정

- 가비지가 차지하고 있는 메모리 공간은 회수되는 것이 경제적

- 가비지 컬렉션 스레드에 의해 수행

- System 또는 Runtime 객체의 gc() 메소드를 호출하여 개발자가 강제 가비지 컬렉션 가능 

System.gc();

- 호출 즉시 가비지 컬렉터가 작동하는 것은 아님

- 자바 플랫폼이 판단하여 적절한 시점에 작동


예제 4-9 다음 코드에서 언제 가비지가 발생하는지 설명

public class GarbageEx {
	public static void main(String[] args) {
		String a=new String("Good");
		String b=new String("Bad");
		String c=new String("Normal");
		String d, e;
		a=null;
		d=c;
		c=null;
	}
}
더보기

 

(1) a=null; 실행 시 a가 가리키던 객체("Good")는 가비지가 됨

(2) c=null; 이 실행되었지만 그 전에 c가 가리키던 "Normal"을 d가 가리키게 하였으므로 가비지 x

 

'java > 개념' 카테고리의 다른 글

static  (0) 2024.05.20
접근 지정자  (0) 2024.05.20
메소드 활용 - 메소드 오버로딩  (0) 2024.05.20
메소드 활용 - 인자 전달  (0) 2024.05.20
객체 배열  (0) 2024.05.20