kanqonj
87
2020-06-10 12:10:55
2
169

프로세스 메모리와 JVM메모리에대해서 질문드립니다.


프로세스에서 접근 가능한 메모리를 배우던중 궁금한점이 생겨서 질문드립니다.


프로세스에서 접근 가능한 메모리영역에 [Data, Stack, Heap, Code]영역이 있다고 배웠는데요.

JVM의 RunTimeData Area에서 메모리 구조엔

Static(이영역이 Data영역인거 같습니다..) Heap Stack , pc register, Native Memory영역이 있는데


혹시 이 둘의 메모리가 다른건지 아니면 프로세스 에서 접근 가능한곳에 pc register와 Native Memory는

제외 되는것인지 궁금합니다..아니면 제가 잘못알고있는 부분이 있는건가요..?

도움주시면 감사하겠습니다..

0
  • 답변 2

  • allinux
    1k
    2020-06-10 12:23:27

    두개가 서로 다른 겁니다.

    프로세스에서 접근 가능한 영역이라고 해놓은 것은 메모리 세그먼트를 말하는 것 같군요

    윈도우 기준으로 exe 파일을 pe loader 가 메모리에 올릴때 사용하는 메모리 공간을 말하는데 exe 파일에도 format 이란 것이 있어서 코드영역은 text 세그먼트에 변수들은 data 세그먼트에 저장되는 것을 말합니다.

    jvm 메모리 모델은 이것과는 좀 별개입니다. jvm spec 에 명확히 명시되어 있는진 모르겠지만 오라클 jvm은 heap 만 사용하는 것으로 알고 있습니다.

    jvm 내에서 사용하는 stack 도 프로세스가 사용하는 stack 하고는 다른 겁니다.

    pc register 도 존재하는 이유가 jvm 철학상 cpu에 종속되지 않아야 하므로 실제 cpu의 register 를 대신하는 것을 메모리 공간에 정해둔겁니다.


  • kanqonj
    87
    2020-06-10 12:29:12

    allinux

    답변감가드립니다. 혹시 여기서 지칭하는 '메모리'는 컴퓨터 부품중RAM을 말하는것이 맞나요?

  • 로그인을 하시면 답변을 등록할 수 있습니다.