.java 파일 - ( javac.. javacompiler) ->java bytecode.. .class파일 -> [jvm] ->OS
[runtime data areas] .. jvm이 운영체제 위에서 실행되면서 OS에게 할당받는 메모리 영역
크게 2가지로 나뉘는데 1: 스레드마다 생성되는 부분 // 2:공용으로 사용되는 부분
(stack,heap,method area 이 3가지가 중요한듯)
1: 스레드마다 생성되는 부분 ( 스레드마다 하나씩 존재함)
- pc register : 현재 수행중인 JVM 명령의 주소를 갖는다.
- JVM Stack : 스택 /지역변수, 매개변수등을 저장함.. 맨밑바닥에 main을 깔고 시작
- Native method : 자바외에 언어로 작성된 네이티브 코드를 위한 공간
2: 공용으로 사용되는 부분
- Heap : 인스턴스 객체가 저장되는 공간 가비지 컬렉션 대상. /전역변수,new 키워드를 통해 생성한 객체 등..
-method area(class area, code area, static area라고도 불림) : jvm이 시작될 때 생성됨..... static ,필드, 바이트코드,상수풀 등을 보관함.
---------------------------------------------------------------------------------------------------
*상수풀 heap의 고정영역 (permanent area)에 생성됨. java 종료시까지 유지. String을 리터럴 형태로 저장시 여기에 저장함. 그외에 모든 상수를 저장함.
그리고 method area에 저장되는데 이거를 heap영역에서 저장하는거인듯?
---------------------------------------------------------------------------------------------------
stack영역 ->primitive data type을 저장
heap영역 -> reference data type을 저장
----------------------------------------------------------------------------------------------------