Computer >> 컴퓨터 >  >> 프로그램 작성 >> Java

Java의 메모리 누수

<시간/>

Java에서는 가비지 컬렉션(소멸자의 작업)이 가비지 컬렉션을 사용하여 자동으로 수행됩니다. 그러나 코드에 참조가 있는 개체가 있으면 어떻게 될까요? 할당을 해제할 수 없습니다. 즉, 메모리를 지울 수 없습니다. 이러한 상황이 반복되고 생성되거나 참조된 객체는 전혀 사용되지 않으면 쓸모가 없게 됩니다. 이것이 메모리 누수로 알려져 있습니다.

메모리 제한을 초과하면 'OutOfMemoryError'와 같은 오류가 발생하여 프로그램이 종료됩니다. 이것이 Java Garbage 수집기가 자동으로 개체를 삭제할 수 있도록 개체에 대한 모든 참조를 제거하도록 항상 제안되는 이유입니다.

다음은 너무 많은 메모리를 사용하려고 할 때 컴파일러에서 공간이 부족해지는 방법을 보여주는 예입니다. −

import java.util.Vector;
public class Demo{
   public static void main(String[] args){
      Vector my_v1 = new Vector(314567);
      Vector my_v2 = new Vector(784324678);
      System.out.println("This is the last line to be printed");
   }
}

출력

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.base/java.util.Vector.<init>(Vector.java:142)
at java.base/java.util.Vector.<init>(Vector.java:155)
at Demo.main(Demo.java:7)

Demo라는 클래스에는 두 개의 벡터 객체가 너무 큰 공간을 할당하여 생성된 주요 기능이 포함되어 있습니다. 마지막 인쇄 행은 컴파일러가 해당 행에 도달했는지 확인하기 위해 작성되었습니다. 실제로는 그렇지 않습니다. 이러한 벡터가 차지하는 공간이 거대하고 너무 많은 메모리를 할당할 수 없어 오류가 발생하기 때문입니다.