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

조회수 25149회

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

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

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

1 답변

  • 좋아요

    0

    싫어요
    채택 취소하기

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

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

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

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)