메모리

업데이트:

메모리 구조Permalink
  • JVM
    • Runtime data Aarea(실행 데이터 영역)으로 불리며 여러 영역으로 분리된다.
  • JVM Runtime
    • 프로그램 실행시 JVM은 OS로부터 메모리를 할당
    • 자바 컴파일러(javac)가 자바소스코드(.java)를 자바 바이트 코드(.class)로 컴파일
    • Class Loader를 통해 JVM Runtime data Area로 로딩
    • 로더에 의하여 로딩 된 .class들은 Excution Engine(실행 엔진)을 통해 Interpret(해석)
    • 해석된 바이트 코드는 Runtime Data Area 각 영역에 배치되어 수행
    • 위 과정중에 Excution Engine에 의해 GC의 작동과 쓰레드 동기화가 이루어짐
Runtime Data Area 영역Permalink
  • Method Area
    • JVM에서 읽어온 클래스와 인터페이스 정보가 저장
    • 클래스의 인스턴스가 생성된 후 메소드 실행 시 모든 정보가 저장됨
    • Runtime Constant Pool : 각 클래스, 인터페이스 상수, 메서드 필드와 모든 레퍼런스가 담겨 있음
  • Heap
    • 동적 데이터가 할당되어 저장, GC 동작 대상 오랜 시간 참조가 없는 객체들은 GC를 통해 제거
  • JVM Language Stacks
    • 지역변수, 파라미터, 메소드 정보, 임시 데이터가 저장
    • JVM은 스택 프레임을 Push/Pop하는 연산만 수행
    • printStackTrace()를 통해 Stack trace로 각 스택 프레임을 출력
  • PC Registers
    • 스레드가 시작될떄생성
    • 스레드의 명령어실행을 기록, JVM의 명령어 주소를 가짐
  • Native Method Area
    • 바이트 코드가 아닌 바이너리 코드 실행 영역을 통해 호출되는 C/C++의 코드를 실행하는 영역
  • Exception Engine(실행 엔진)
    • Class Loader에 의해 로드 된 클래스의 바이트 코드를 실행하는 모듈
    • Byte Code -> Binary Code
    • interpreter : 명령어를 하나씩 실행하는 대화형 컴파일
    • JIT(Just-In-Time) : 인터프리터의 느린속도를 보안하기 위한 컴파일러로 정해진 시간 내에 모든 바이트 코드를 컴파일
  • Stack space
    • 정적 메모리 할당이 이루어지는 장소로 힙 영역에 동적 할당된 값들(Object)에 대한 참조를 얻을 수 있다.
    • JVM의 각 스레드는 스택 프레임을 가지며 각 메소드 혹은 변수마다 스택 프레임을 추가하고, 해제시 스택 프레임은 빠지게 된다.
  • Heap space
    • 런타임 시간에 Object와 JRE 클래스에 대한 할당에 사용된다.
    • 객체의 위치를 우리가 알 수 없으며 참조를 Stack에게 반환한다.
GC(Garbage Collection)Permalink
  • stap the world
    • GC를 실행하기 위하여 JVM이 모든 애플리케이션의 실행을 멈추는 것이다.
    • GC를 실행하는 쓰레드 이외에 모든 쓰레드는 멈춘다

태그:

카테고리:

업데이트:

댓글남기기