응용프로그램이 실행되면, JVM은 시스템으로부터 프로그램을 수행하는데 필요한 메모리를 할당받고 JVM은 이 메모리를 용도에 따라 여러 영역으로 나누어 관리한다.
대표적인 세 영역으로 (method Area, call stack, heap)가 있다.
메서드 영역 (method Area)
프로그램 실행 중 어떤 클래스가 사용되면, JVM은 그 클래스의 클래스 파일을 읽어 분석하고 클래스에 대한 정보를
이 영역에 저장한다. 저장되는 클래스 데이터에는 클래스변수도 저장된다.
힙 (heap)
인스턴스가 생성되는 공간. 프로그램 실행 중 생성되는 인스턴스는 모두 이곳에서 생성된다. 인스턴스변수들도 이 곳에서 저장된다.
호출스택 (call stack 혹 execution stack)
호출스택은 메서드의 작업에 필요한 메모리 공간을 제공한다. 메서드가 호출되면, 호출스택에 호출된 메서드를 위한 메모리가 할당되며, 이 메모리는 메서드가 작업을 수행하는 동안 지역변수, 매개변수들과 연산의 중간결과 등을 저장하는데 사용된다. 그리고 메서드와 내부 영역에서의 작업이 끝나면 메모리 공간은 반환되어 사라진다.
호출스택에는 호출되는 메서드부터 아래에 쌓여 현재 실행 중인 메서드를 찾을 땐 호출스택의 가장 위에 있는 메서드이다.
(가장 처음 메서드가 끝나지도 않았는데 새로운 메서드가 호출되면 호출스택 상 처음 메서드의 위에 쌓이기 때문)
의문.
JVM 자체가 운영체제 위의 하나의 조그만 운영체제의 일부라 생각하는데 JVM이 후속적으로 운영체제에게서 자원을 지원 받을 수 있는가와 호출스택, 힙 등이 운영체제의 메모리 영역 속의 스택, 힙을 사용하는 것인지 아니면
자체적으로 추상적 구현을 통한 것인지 궁금하다. 소스코드나 데이터 영역 또한 JVM 내부에서 관리하는 영역이 있는지도 궁금하다. 한 번 알아봐야겠다.
이 글은 자바의 정석 책을 참고하여 작성하였습니다.
읽어주셔 감사합니다.
틀린 부분이나 부족한 부분이 있다면 알려주세요. 감사합니다.
'언어와 프레임워크 > Java' 카테고리의 다른 글
[JAVA] Intellij JDK 한글 깨짐 (Open JDK18 이전, 이후 나눔) (1) | 2022.07.14 |
---|---|
[JAVA] java 입장에서 call by value와 call by reference의 짧은 고찰. (0) | 2022.06.26 |
[JAVA] 클래스 메서드와 인스턴스 메서드 (0) | 2022.06.25 |
[JAVA] 클래스변수, 인스턴스변수, 지역변수 (0) | 2022.06.25 |
국내 웹시장에선 왜 Java 그리고 Spring이 많이 쓰일까에 대하여. (0) | 2022.05.30 |
댓글