ssausand-sunny / cs-study

면접.. 붙으려면 CS 공부 해야겠지?
0 stars 0 forks source link

JVM 메모리 구조에 대해서 설명해주세요 #16

Open kgh2120 opened 4 months ago

kgh2120 commented 4 months ago

JVM 메모리 구조에 대해서 설명해주세요

예상 꼬리 질문 - Java 어플리케이션에서 jvm 메모리는 각자 독립적일까요?

들어가야 할 키워드 정리

Hunnibs commented 4 months ago
질문 답변

JVM 메모리 구조는 Java 애플리케이션이 실행될 때 필요한 데이터를 저장하는 공간으로 Java Class 파일들을 관리하는 Method Area와 Java 언어 외의 언어들을 저장하는 Native Method Area, CPU 내에서 연산을 처리하기 위한 명령을 수행함에 있어 해당 명령의 주소를 저장하는 역할을 하는 PC Register Area, 마지막으로 처음에 만들어진 객체들을 저장해놓는 공간인 Heap Area와 내부에서 Method 실행 중 임시적으로 변수를 저장할 공간인 Stack Area로 나뉩니다. Multi-thread 기준으로 Method Area와 Heap Area는 공용 저장 공간에 있지만 나머지 Native Method Area와 Stack Area, PC Register Area는 각각 쓰레드 내에서 관리합니다.

꼬리 질문

1. Java 어플리케이션에서 jvm 메모리는 각자 독립적일까요? 독립적이라고 생각합니다. 각각의 메모리 공간은 별도로 할당되어있어 독립적으로 저장되고 있으며 서로 간섭하지 않기 때문입니다.

kjy0349 commented 4 months ago
예상 답안 JVM 메모리 구조는 JVM 8 기준 Stack, Heap, Non-Heap, PC Register, Native Method Stack으로 나누어져 있습니다. 먼저 Stack 영역은, 메소드의 호출 정보와 로컬변수, 피연산자등이 저장됩니다. Heap 영역은 동적으로 할당된 객체들이 주로 위치됩니다. Non-Heap 영역은 JVM 8 이후 Metaspace라는 클래스 메타데이터를 저장하는 영역입니다. PC Register 영역은, 현재 JVM이 실행중인 명령어의 주소를 저장합니다. Native Method 스택은, JAVA로 작성되지않은 메소드들이 저장된 영역입니다. 주로 C, C++로 작성된 코드들이 존재합니다.
예상 꼬리 질문 답안
  1. Java 어플리케이션에서 jvm 메모리는 각자 독립적일까요?
    1. 해당 부분은 영역마다 다릅니다. 메모리 영역중 Stack, Native Method Stack의 경우 각 쓰레드들이 호출하고있는 메서드에 대한 로컬변수, 호출 정보들을 저장해야하기 때문에 각각 독립적이고 나머지 영역(Heap, Non-Heap, PC Register)는 공유하고 있습니다.
Leeminw commented 4 months ago
예상답안

JVM메모리구조는 크게 Method, Heap, Stack, PC Register, Native Method Stack 으로 구성되어 있습니다. 각각에 대해 설명하자면 method영역의 경우 클래스들의 메타데이터가 저장되는 공간입니다. heap영역은 동적으로 할당된 객체들이 저장되는 공간입니다. Stack 영역은 메소드 호출시 사용되는 지역변수, 매개변수 등이 저장되는 공간입니다. PC Register는 현재 실행중인 명령어의 주소를 저장합니다. 마지막으로 Native Method stack 은 Java외의 언어로 작성된 코드들이 저장되는 공간입니다.

예상 꼬리 질문 답안

- heap과 method 영역은 공유되는 메모리이지만, 나머지는 독립적으로 생성됩니다.

kgh2120 commented 4 months ago
예상 답변 JVM의 메모리 구조는 Method, Stack, PC Register, Heap, Native Method Stack 5가지 영역으로 구분됩니다. Method 영역은 클래스의 메타 데이터를 저장하는 공간입니다. Stack은 함수에서 사용하는 지역 변수, 매개 변수를 저장하고, 리턴 위치와 리턴 값을 저장합니다. PC Register는 쓰레드가 현재 실행시키고 있는 위치를 가르키고 Heap은 인스턴스들을 저장합니다. 마지막으로 Native Method Stack은 Java에서 사용하는 Native Method가 이용하는 Stack 영역입니다.
예상 꼬리 질문 답변 - Java 어플리케이션에서 jvm 메모리는 각자 독립적일까요? 하나의 Java Process는 하나의 JVM instance를 갖습니다. 그렇기 때문에, 서로 다른 Java Process는 메모리가 독립적입니다. ![image](https://github.com/ssausand-sunny/cs-study/assets/76154390/c9559878-84a4-4fa6-80f7-7b3c632a299e) https://stackoverflow.com/questions/18394560/when-multiple-java-programs-run-on-the-same-machine https://qna.programmers.co.kr/questions/2034/%EC%9E%90%EB%B0%94%EA%B0%80%EC%83%81%EB%A8%B8%EC%8B%A0%EC%9D%B4-%ED%95%98%EB%82%98%EC%9D%98-%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EC%9D%B8%EA%B0%80%EC%9A%94 https://okky.kr/questions/670043
kgh2120 commented 4 months ago

https://inpa.tistory.com/entry/JAVA-%E2%98%95-JVM-%EB%82%B4%EB%B6%80-%EA%B5%AC%EC%A1%B0-%EB%A9%94%EB%AA%A8%EB%A6%AC-%EC%98%81%EC%97%AD-%EC%8B%AC%ED%99%94%ED%8E%B8#pc_%EB%A0%88%EC%A7%80%EC%8A%A4%ED%84%B0_program_counter_register