해결된 질문
작성
·
325
·
수정됨
1
보통 메모리 구조라고 하면 코드, 데이터, 힙, 스택 영역으로 알고 있습니다. 근데 실행 프로그램이 자바 코드로 이루어져 있다면 메모리 구조는 메서드, 스택, 힙 영역으로 이루어지는건가요?
메서드 영역에 클래스 즉 코드들이 올라간다 했는데 그러면 CPU가 메서드 영역에 있는 자바 코드들을 하나씩 레지스터로 fetch해서 decode, execution 하는건가요?
CPU가 클래스 코드들을 해석하면서 메서드 호출일 경우 스택 영역에 스택 프레임을 생성하고 인스턴스 생성일 경우 힙 영역에 인스턴스를 생성하는 건가요?
힙 영역에 인스턴스가 생성된다고 했는데 그러면 필드 코드는 여전히 메서드 영역에 존재하지만 인스턴스가 가지고 있는 필드 값들은 힙 영역에 존재하는 건가요?
감사합니다.
답변 1
3
안녕하세요. annjae4676님, 공식 서포터즈 코즈위버입니다.
자바도 동일한 구조를 갖습니다. 다만 자바는 JVM이라고 하는 가상 환경에서 동작한 다는 점을 유의해야 합니다. JVM은 일종의 가상 OS와 같은 역할을 합니다. JVM 위에서 자바 애플리케이션을 실행하면, 이 앱이 마치 Windows 위에서 앱을 실행한것처럼 JVM 내부의 가상 메모리 공간으로 로드되는거죠.
3. 1번에서와 같이 CPU가 직접 자바코드와 소통하지 않습니다. CPU는 JVM과 소통합니다. 자바 앱에 대한 제어는 JVM이 하게 됩니다.
네 클래스와 메서드 등의 코드는 데이터 영역에 존재하며 이를 기반으로 새로운 인스턴스를 힙 영역에 생성합니다. 이렇게 생성한 인스턴스는 다른 객체와 공유하지 않는 필드를 갖게 됩니다. (static 등이 아니라면)
감사합니다.