JAVA 코드(정확히는 byte code)를 실행하기 위해 JVM 이 구동된다.
JVM 은 운영체제로부터 메모리 자원을 할당받고,
할당받은 그 메모리를 JVM 자신과 JAVA 코드를 실행하는 데 사용한다.
코드를 위해 사용하는 메모리 공간을 크게 세 개로 나눈다.
1. 메소드 영역
- byte code 와 static 변수, 메소드들이 위치한다.
2. 스택 영역
- 메소드 내부에서 생성한 변수들이 스택처럼 이곳에 쌓인다.
- 메소드 실행이 끝났거나, 지역변수가 사라질 때 메모리 상에서 사라진다.
3. 힙 영역
- 인스턴스들이 여기 올라온다.
- 메소드 내에서 인스턴스를 생성한다면, 인스턴스가 힙 영역에 생성되고 해당 인스턴스를 가리키는 객체는 스택 영역에 쌓인다.
- 스택 영역의 두번째 이유로 인스턴스를 가리키는 객체가 사라진다고 해도, 힙 영역 내의 인스턴스는 그대로 존재한다. 다만 코드 내에서 더 이상 해당 인스턴스에 접근이 불가능하게 될 뿐이다.
- 접근이 불가능하게 된 인스턴스들은 JVM 에 의해 수거되고 사라진다. 이 일을 하는 것이 바로 garbage collector 이다.
- 오랜 기간 동안 힙 영역에 남아있는 인스턴스들은 garbage collector 의 손아귀에서 벗어나 좀 더 오랫동안 연명할 수 있는 공간으로 이동한다. 아래 D2 참고.
'눈가락' 카테고리의 다른 글
아키텍쳐 설계 프로세스 ppt (0) | 2020.06.21 |
---|---|
[JAVA] String, StringBuilder, StringBuffer 차이 (0) | 2020.06.20 |
[JAVA] 이차원 배열 정렬하기 (0) | 2020.05.30 |
[JAVA] 최솟값/최댓값 우선순위 큐 자료구조 사용법 (0) | 2020.05.28 |
[IT] 특정 서버에 포트가 열려있는지 접근 확인 방법 (0) | 2020.03.23 |