작성
·
489
·
수정됨
1
안녕하세요~
프로세스는 OS로부터 stack, heap, data, code영역으로 나눠진 메모리를 할당 받는다고 하셨는데요.
자바를 배울 땐 자바 프로세스가 실행될 때 JVM에 의해 다음과 같이 5개의 메모리 영역으로 나뉘어져서 관리한다고 배웠었습니다 (Method area / Heap / Stack / PC Registers / Native Stack)
명칭도 조금씩 다른부분도 있고 영역개수도 상이 한데 OS로부터 할당받은 4종류의 메모리의 영역과 JVM이 관리하는 5종류의 메모리의 영역이 서로 어떻게 매칭되는건지 궁금합니다~
예를들어 프로세스의 Stack영역은 JVM의 Stack영역과 동일하다던가..
아니면 프로세스의 Heap영역안에 JVM의 5종류의 메모리영역이 나눠져서 할당된다던가..
그것도 아니면 JVM은 일반 프로세스와는 다르게 JVM에 의해 다른 메모리영역을 할당받는다던가..
서칭 해보는데 단순히 JVM의 메모리구조에 대해서만 설명이 되어있고 이게 프로세스의 메모리영역과 어떻게 매칭되는건지에 대한 내용은 찾지 못해서 질문드립니다~
답변 1
0
안녕하세요 ㅎㅎ
일단은 제가 예시로 든 것은 C언어로 만들어진 프로세스의 예인데요.
자바로 만들어진 것과는 다음과 같은 차이가 있습니다.
메모리 구역의 구조: Java는 메소드 영역 등 추가적인 메모리 영역을 갖는 반면, C는 코드, 데이터, 힙, 스택 구조를 따릅니다.
가상 머신 환경: Java는 JVM 내에서 실행되며, JVM이 메모리 관리를 담당합니다. 반면, C 프로그램은 운영체제가 직접적으로 메모리를 할당합니다.
프로세스의 Stack영역은 JVM의 Stack영역과 동일하다던가..
>> 아뇨. 이게 아니라 운영체제 위에 JVM이 띄어져있고 그 JVM 위에서 메모리 영역이 따로 생기는 거라 매핑되지는 않습니다.
앞의 그림처럼 이렇게 OS 위에 한계층이 더있고 그 위에서 JVM이 메모리를 관리하는 것이죠.
또 질문 있으시면 언제든지 질문 부탁드립니다.
좋은 수강평과 별점 5점은 제게 큰 힘이 됩니다. :)
감사합니다.
강사 큰돌 올림.