자바 메모리는 크게 네 가지 영역으로 나눌 수 있다:
가비지 컬렉션(Garbage Collection, GC)은 더 이상 사용되지 않는 객체를 메모리에서 자동으로 해제하는 기능이다. 자바에서는 java.lang.System.gc()
메소드를 통해 가비지 컬렉션을 명시적으로 호출할 수 있지만, JVM이 적절한 시점에 가비지 컬렉션을 수행한다.
가비지 컬렉션을 관찰하기 위한 간단한 예제 코드를 작성해보자.
public class GarbageCollectionDemo {
public static void main(String[] args) {
// 객체 생성
for (int i = 0; i < 100000; i++) {
MyObject obj = new MyObject(i);
}
// 가비지 컬렉션 요청
System.gc();
System.out.println("Garbage Collection requested");
}
}
class MyObject {
private int id;
MyObject(int id) {
this.id = id;
}
@Override
protected void finalize() throws Throwable {
System.out.println("Finalize method called for object: " + id);
}
}
이 예제에서 MyObject 클래스는 finalize 메소드를 오버라이드하여 객체가 가비지 컬렉션될 때 호출된다. System.gc() 메소드를 통해 가비지 컬렉션을 요청하고, 어떤 객체가 수거되는지 관찰할 수 있다
자바의 메모리 관리와 가비지 컬렉션은 메모리 누수를 방지하고 애플리케이션의 성능을 유지하는 데 중요한 역할을 한다. 자바 메모리 구조와 주요 가비지 컬렉터에 대해 이해하고, 가비지 컬렉션이 어떻게 동작하는지 아는 것이 중요하다. 가비지 컬렉션을 명시적으로 호출하는 것은 피하는 것이 좋으며, JVM이 효율적으로 메모리를 관리할 수 있도록 설계하는 것이 중요하다.
이번 TIL에서는 자바의 메모리 구조와 가비지 컬렉션의 기본 개념, 주요 가비지 컬렉터, 그리고 가비지 컬렉션을 관찰할 수 있는 간단한 예제 코드를 살펴보았다. 이러한 지식을 바탕으로 메모리 관리에 대한 이해를 높이고, 더 나은 자바 애플리케이션을 개발할 수 있을 것이다.