>  기사  >  Java  >  Java에서 StackOverflowError와 OutOfMemoryError의 차이점은 무엇입니까?

Java에서 StackOverflowError와 OutOfMemoryError의 차이점은 무엇입니까?

WBOY
WBOY앞으로
2023-08-27 12:09:061033검색

Java에서 StackOverflowError와 OutOfMemoryError의 차이점은 무엇입니까?

Java 프로그램을 실행할 때마다 운영 체제는 JVM에 일부 메모리를 할당합니다. JVM은 이 메모리를 두 부분으로 나눕니다. 하나는 스택 메모리이고 다른 하나는 힙 메모리입니다. 스택은 메서드를 실행하는 데 사용되고 힙은 객체를 저장하는 데 사용됩니다. 스택이 가득 차면 JVM은 java.lang.StackOverflowError를 발생시키고, 힙이 가득 차면 JVM은 java.lang.OutOfMemoryError를 발생시킵니다.

StackOverflowError

  • 스택은 메서드 실행에 사용됩니다. 각 메소드 호출마다 스택 메모리에 블록이 생성됩니다.
  • 메서드와 관련된 데이터(예: 매개변수, 지역 변수 또는 개체 참조)가 이 블록에 저장됩니다.
  • 메서드 실행이 완료되면 블록은 저장된 데이터와 함께 스택에서 제거됩니다.
  • 메소드를 호출할 때마다 실행을 완료하고 스택 메모리를 떠나야 합니다.
  • 메서드가 스택에 남아 있으면 스택이 가득 차고 JVM에서 java.lang.StackOverflowError가 발생합니다.

OutOfMemoryError

  • Java에서 생성한 개체는 힙 메모리에 저장됩니다. 이러한 개체가 더 이상 필요하지 않으면 메모리에서 삭제해야 합니다.
  • 가비지 수집기는 힙 메모리에서 불필요한 개체를 제거합니다.
  • 객체에 실시간 참조가 있는 경우 가비지 수집기는 이를 삭제하지 않습니다. 실시간 참조가 없는 개체만 삭제됩니다.
  • 메소드를 호출할 때마다 실행을 완료하고 스택 메모리를 떠나야 합니다.
  • 힙 메모리에 새 객체를 위한 공간이 남아 있지 않으면 JVM은 java.lang.OutOfMemoryError를 발생시킵니다.

위 내용은 Java에서 StackOverflowError와 OutOfMemoryError의 차이점은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 tutorialspoint.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제