1. 자바의 메모리 구조
- 자바로 개발을 하다보면 수많은 코드를 작성하게 된다. 이 수많은 코드들에 메모리 상에서 어떻게 관리되는지 알아보자
메모리 구조 이미지
2. 자바의 절차적 구조적 프로그래밍
2-1 static 영역
- static 영역은 클래스들의 놀이터 이다.
- JVM은 가장 먼저 java.lang 패키지를 메모리의 스태틱 영역에 가져다 놓고 다음으로 개발자가 작성한 모든 클래스와 임포트 패키지 역시 스태틱 영역에 가져다 놓는다.
- 클래스 멤머도 여기에 저장된다. static 키워드가 붙어있는 코드라고 생각하면 되겠다.
- 이 영역에 저장된 내용은 프로그램 시작전에 로드되고 프로그램 종료시에 소멸된다.
2-2 hip 영역
- hip 영역은 객체들의 놀이터 이다.
- 객체가 생성되면 속성의 값을 저장하기 위한 메모리 공간이 힙 영역에 할당된다.
- 객체 멤버 변수는 힙에서 일생을 보낸다.
- 객체 멤버 변수들은 객체와 함께 가비지 컬렉터라고 하는 힙 메모리 회수기에 의해 일생을 마치게 된다.
2-3 stack 영역
- stack 영역은 메서드들의 놀이터 이다.
- JVM은 메서드를 호출할 때마다 메서드의 호출과 관계되는 지역 변수와 매개변수를 스택영역에 저장한다. 조금더 정확히 이야기 하자면 여는 중괄호를 만날때마다 스택 프레임이 하나씩 생긴다. 클래스 정의를 시작하는 여는 중괄호만 빼고 말이다.
- 닫는 중괄호를 만나면 즉 메서드가 종료되면 스택 프레임은 소멸된다.
- 스택 영역은 메모리의 높은 주소에서 낮은 주소의 방향으로 할당된다.
- 외부 스택 프레임에서 내부 스택 프레임의 변수에 접근하는 것은 불가능하나 그 역은 가능하다.
- 하나의 스택프레임은 또 다른 스택프레임에 침범 할 수 없다.
hip 메모리와 stack 메모리가 무한은 아닐것이다. 만약데이터가 메모리를 초과한다면 어떻게 되는지 생각해보자
'자바' 카테고리의 다른 글
java11과 17의 차이 (0) | 2024.09.03 |
---|---|
객체지향 설계 5원칙 (0) | 2024.07.06 |
메모리와 StackOverFlow (0) | 2024.06.28 |
쓰레드의 동기화 (0) | 2024.06.26 |