[java] 자바 프로그래밍에서 자주 발생하는 메모리 누수 예시는 무엇인가요?
예를 들어, 다음과 같은 코드를 생각해봅시다.
public class MyClass {
private List<Integer> numbers = new ArrayList<>();
public void addNumber(int number) {
numbers.add(number);
}
public List<Integer> getNumbers() {
return numbers;
}
}
이 코드에서 MyClass
의 객체를 생성하고 addNumber()
메소드를 호출하여 숫자를 계속해서 추가할 수 있습니다. 그러나 MyClass
의 객체를 사용하는 동안 숫자를 계속해서 추가하고 레퍼런스를 유지하는 것을 잊어버린다면, MyClass
객체가 더 이상 필요하지 않게 되더라도 해당 객체는 가비지 컬렉션의 대상이 되지 않고 메모리에 계속 남게 됩니다. 이렇게 메모리에 더 이상 필요하지 않은 객체가 계속 쌓이는 것을 메모리 누수라고 합니다.
메모리 누수를 방지하기 위해선, 더 이상 사용되지 않는 객체는 명시적으로 정리해야 합니다. 위의 예시에서는 MyClass
의 객체를 더 이상 사용하지 않게 되면, numbers
레퍼런스를 null로 설정하여 메모리 누수를 방지할 수 있습니다.
public void clearNumbers() {
numbers = null;
}
이렇게 하면 가비지 컬렉션의 대상이 되어 메모리에서 정리됩니다. 메모리 누수는 프로그램 성능에 영향을 미칠 수 있으므로, 자바 프로그래밍에서는 메모리 누수를 최소화하기 위해 주의해야 합니다.