[Java] 객체의 소멸과 가비지 컬렉션

2020. 4. 14. 18:03Programming Languages/Java

※ 공부한 내용을 정리하는 글입니다.

 

   자바에서는 객체를 생성할 수 있지만 소멸시키는 연산자는 없다. 자바는 new 로 할당받은 후 사용하지 않게 된 객체 메모리를 가비지(garbage)라고 부르며, 가비지 컬렉터가 적절한 시점에 자동으로 수집하여 가용 메모리에 반환시킨다.

 

가비지(garbage) : 자바 응용프로그램에서 더 이상 사용하지 않게 된 객체나 배열 메모리이다. 

가비지의 기준 - 참조하는 레퍼런스가 하나도 없는 객체나 배열을 가비지로 판단한다.

 

a = new Person("철수");

b = new Person("영희");

 

b = a;

 

> b가 가리키던 객체는 아무도 참조하지 않게 되어 더 이상 접근할 수 없게 됐다. 이 객체("영희")가 가비지이다.

 

가비지 컬렉션(garabage collection)

   가비지는 더 이상 참조되지 않기 때문에 가비지가 차지하고 있는 메모리 공간은 회수되어야 한다. 가비지가 많아지면 자바 플랫폼이 응용프로그램에게 할당해줄 수 있는 가용 메모리 양이 줄어들게 된다. 이를 위해 가비지가 가지고 있던 메모리 공간을 회수하여 가용 메모리를 늘리는 것을 가비지 컬렉션이라고 한며, 가비지 컬렉션은 자바 플랫폼에 의해 준비된 가비지 컬렉션 스레드에 의해 처리된다. 

   만약 많은 양의 가비지가 생성되어 가비지 컬렉터가 실행되는 경우 응용 프로그램은 잠시 실행을 멈추고 카비지 컬렉션이 끝나기를 기다리게 된다. 유저의 눈에는 프로그램이 중단된 것처럼 보인다. 이런 이유로 자바는 실시간 처리 응용에는 부적합한 것으로 알려져 있다.

 

가비지 컬렉션 강제 요청 - 아래 코드를 입력하면 된다.

System.gc(); 

허나 이 코드를 호출한 즉시 가비지 컬렉터가 동작하는 것은 아니다. 이 문장은 가비지 컬렉션이 필요하다는 요청이다. 가비지 컬렉션은 전적으로 자바 플랫폼이 판단하여 적절한 시점에 작동시킨다.

'Programming Languages > Java' 카테고리의 다른 글

[Java] 상속(extends)  (0) 2020.04.21
[Java] final 키워드  (0) 2020.04.18
[Java] static 키워드  (0) 2020.04.18
[Java] 접근 지정자  (0) 2020.04.18
[Java] 메소드 오버로딩  (0) 2020.04.14