스택 오버플로우 에러가 일으키는 문제가 뭔가요?


스택오버플로우에러에 대한 정보를 아무리 찾아도 명확한 답이 없어요. 자바 문서를 보면 java.lang.StackOverflowError 에러는 "응용프로그램에서 재귀를 돌때 재귀의 깊이가 너무 깊어져서 스택 오버플로우가 일어났을때 발생한다고 나오는데 여기서 두가지 의문점이있어요.

  1. 재귀 말고 스택오버플로우가 발생하는 다른 경우는 없나요?
  2. 스택오버플로우는 JVM에서 실제로 오버플로우가 된 후에 발생하나요 되기 직전에 발생하나요?

자바에서 스택오버플로우 에러를 발생시켰을때 스택이 힙에 아무것도 안썼다고 생각하면 되나요?

  • 2016년 01월 25일에 작성됨

조회수 610


1 답변


좋아요
0
싫어요
채택취소하기

지금 스택오버플로우를 기본 프로그램에서 아직 할당되지 않은 메모리에 기록하고 다른 메모리에 손상을 주는 버퍼 오버플로우같은 거라고 생각하고 계시는것 같은데. 전혀 그렇지 않습니다.

JVM은 각 쓰레드의 각 스택에게 메모리를 할당해줍니다. 그리고 메소드를 부르려는 시도로 메모리가 꽉찰 경우 JVM은 에러를 발생시킵니다. 그건 크기가 N인 배열의 n번째 인덱스에 쓰려는 시도를 하는것처럼 메모리 손상이 발생할수도있습니다. 그리고 스택은 힙에 쓸수 없습니다.

스택오버플로우 에러는 사용가능한 메모리가 더이상 없다는 뜻입니다.

  • 2016년 01월 25일에 작성됨

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close