본문 바로가기
자바

자바의 메모리 구조

by 진믈리 2024. 6. 28.

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