Java 메모리 영역

NasK!m_311·2022년 8월 5일
0

Java

목록 보기
3/39
post-thumbnail

1. Class Area(=Method Area) [고정 영역]

  1. Method Area , Class Area , Code Area , Static Area 라고 불린다.
  1. 클래스정보 (멤버변수의 이름) ,
    변수정보 (데이터타입, 접근제어자정보) ,
    메소드정보 (메소드 이름, 리턴타입, 피라미터, 접근제어자 정보) , static변수 ,
    final class변수 ,
    Constant pool (상수풀 : 문자상수, 타입, 필드, 객체참조가 저장됨)
    등을 분류해서 저장한다.
  1. JVM이 동작해서 클래스가 로딩될 때 생성된다.

2. Heap Area [동적 영역]

  1. new 키워드로 생성된 객체와 배열이 저장되는 영역.
  1. Method Area에 로드된 클래스만 생성이 가능하다.
  1. GC (Garbage Collection)의 주요 대상이 된다.
    (Stack Area , Class Area도 대상이 된다.)
  1. 효율적인 GC를 위해 메모리 영역이 분리되어 있다.
    (Eden , Survivor1,2 , Old)
  1. 런타임 시 할당된다.

👀 런타임

-> 컴파일타임 이후 프로그램이 실행되는 때
(0나누기 오류 , Null참조 오류 , 메모리 부족 오류)


3. Stack Area [동적 영역]

  1. 지역변수 , 피라미터 , 리턴값 , 연산에 사용되는 임시값 등이 생성되는 영역.
  1. 메소드를 호출 할 때마다 개별적으로 스택이 생성되며, 종료 시 영역에서 해제된다.
  1. 컴파일타임 시 할당된다.

👀 컴파일타임

-> 소스코드가 기계어로 변환되어 실행가능 한 프로그램이 되는 과정.
(Syntax Error , 파일참조 오류 , 타입체크 오류 , 등등)


💡 고정영역과 동적영역

💡 고정영역

	-> 프로그램이 실행되면 실행파일이 메모리에 로드된다.
    -> 실행파일의 용량만큼 메모리를 사용한다.
    -> 실행파일의 크기는 변할 수 없으므로, 이 영역의 크기는 고정 크기를 갖는다.
    
 ------------------------------------------------------------------------------
💡 동적영역 

	-> 프로그래머가 'new' 키워드를 사용해서 객체나 배열을 생성하면 사용된다. (힙영역)
    -> 메소드가 호출되는 동안 사용될 파라미터와 지역변수가 생성된다. (스택영역)
    -> 메소드가 종료되거나 객체가 더 이상 사용되지 않으면, 
    	생성된 변수나 객체는 메모리에서 사라진다. 따라서 이 영역은 유동적인 크기를 갖게 된다.

💡 프로그램이 메모리를 사용하는 순서

1. 최초 실행 시, 고정영역에 실행파일만큼의 메모리를 점유한다.

2. 프로그램이 각종 동작을 수행하는 동안 동적영역을 사용한다.
profile
메리아빠, 먹다가 죽어도 되는 개발자.(살뺴자....)

0개의 댓글