JVM메모리 영역 정리
JVM메모리 영역
구분 | 내용 | 언제 생성? 언제 소멸 |
Method Area(메소드 영역) |
byte code 리터럴(literal) 상수(final) static |
프로그램 시작될때 생성 (클래스가 로딩될때) 프로그램 종료될때소멸 |
Heap(힙) | 객체(object) 배열… new 로 생성되는 모든것. |
new 생성시 생성. reference 가 끊기면 Garbage Collection 에 의해 자동으로 소멸 |
Stack(스택) |
지역변수 매개변수 (argument) |
블럭안에서 선언될때 생성 블럭이 끝날때 소멸 |
Java의 메모리 영역에 관한 내용이다.
이해하기 쉽게 예를 들어서 표현해보자
int [] score = new int[3]; // 3개의 int배열타입의 변수 score를 선언.
위와 같은 형식으로 저장이 된다.
이래서 Java라는 놈을 객체 지향적인 언어라고 하는게 Heap의 공간에서 스택으로 불러오는 수행들이 많게 되있다.
이렇게 참조하는게 대부분인 언어이다보니 객체지향적 언어라고 표현하는것이고, 이부분에서 많이 쓰는 내용들을 기본적으로 Mathod Area에 보관하고 있기때문에 쓰기 매우 편하고 유용한 언어라고 하는것이다.
그럼 여기서 질문!? java코드를 입력할때 Main클래스 밖에 전역변수로 선언이된 스택틱 함수들은 과연 어디에 저장이 되는것일까???
이런 질문을 같이 수강하는 사람에게 들었다. 정확한 확답은 듣지 못했는데, 내가 이해한 내용으로는 전역변수의 값은 아마 Mathod Area에서 보관하고있지 않을까 싶다....기본적으로 자바를 실행할때 함수를 미리 만들어놓아서 그 함수만 호출하게 되는 경우 그 함수는 Mathod 영역에 있지 아니한가, 그래서 같은 영역에서 선언된 전역변수의 값은 Mathod영역에 저장이 될것으로 보인다.
메모리 영역에서 파일들이 저장되는 공간
위의 표중data 영역은 읽기만 가능하지 쓰기는 불가능한 공간이다.
<출처>https://kali-km.tistory.com/entry/PE%EA%B5%AC%EC%A1%B0%EC%9D%98-%EC%9D%B4%ED%95%B4