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개의 댓글

관련 채용 정보