ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [CS] 기술면접 - JVM 메모리 구조
    CS 2022. 12. 26. 17:33
    728x90

    JVM

    JVM = 자바 가상 머신

    • JAVA 와 OS 사이에서 중개자 역할을 수행하며, JAVA가 OS에 구애 받지 않고 프로그램을 실행할 수 있도록 돕는다.
    • GC를 이용해 메모리 관리도 자동으로 수행하며, 스택 기반으로 작동한다

    자바 프로그램

    먼저, 자바 컴파일러에 의해서 자바 소스 코드는 바이트 코드로 전환된다.

    이러한 바이트 코드를 JVM이 읽어서 여러 OS에서 프로그램을 실핼할 수 있게 해준다


    JVM 메모리 구조

    JVM 메모리 구조는 크게 4가지로 분류할 수 있다.

    JVM 메모리 구조

    1. GC
    2. Execution Engine
    3. Class Loader
    4. Runtime Data Area

    GC

    • 힙 메모리 영역에서 생성된 객체들 중에서 참조되지 않은 객체들을 탐색 후 제거하는 역할을 한다.
    • 이때, GC가 역할을 하는 시간은 언제인지 전확히 알 수 없다.

    Execution Engine

    • JVM내의 Runtime Data Area에 배치된 바이트 코드들을 명령어 단위로 읽어서 실행한다. ( 최초에는 인터프리터 방식 ( 속도가 느렸음 ) → JIT 컴파일러로 속도 보완 )
      • JIT는 바이트 코드를 어셈블러 같은 네이티브 코드로 바꿈으로써 실행이 빠르지만 역시 변환하는데 비용이 발생하였습니다. 이 같은 이유로 JVM은 모든 코드를 JIT 컴파일러 방식으로 실행하지 않고, 인터프리터 방식을 사용하다가 일정한 기준이 넘어가면 JIT 컴파일러 방식으로 실행합니다.

    Class Loader

    • JVM 내로 클래스 파일을 로드하고, 링크를 통해 배치하는 작업을 수행하는 모듈인데, 런타임 시에 동적으로 클래스를 로드한다.
      • "javac" 를 통해서 컴파일 한다 ( JVM으로 이동해서 class Loader로 들어온다 )
      • java에서는 class 코드들은 바이트 코드이다. ( c언어에서는 바로 기계어로 바뀐다 )

    Runtime Data Area

    • JVM의 메모리 영역으로 자바 애플리케이션을 실행할 때 사용되는 데이터들을 적재하는 영역
      • Method area - 모든 쓰레드가 공유하는 메모리 영역 ( 클래스, 인터페이스, 메소드,필드 등의 바이트 코드들을 보관한다 )
      • heap area - 모든 쓰레드가 공유하며, new 키워드로 생성된 객체와 배열이 생성되는 영역이며 메소드 영역에 로드된 클래스만 생성이 가능하고 GC가 참조되지 않는 메모리를 확인해 삭제되는 영역
      • stack area - 메서드 호출 시마다 각각의 스택 프레임(그 메서드만을 위한 공간)이 생성하며, 메서드 수행이 끝나면 프레임별로 삭제
      • PC Register - 쓰레드가 시작될때 생성, 생성될 때마다 생성되는 공간으로 쓰레드 마다 하나씩 존재하며, 쓰레드가 어떤 부분을 무슨 명령으로 실행해야 할지에 대한 기록을 하는 부분으로 현재 수행중인 JVM 명령의 주소를 갖는다
      • Native method stack - java외 언어로 작성된 네이티브 코드를 위한 메모리 영역이다.

     

    참조

    https://steady-coding.tistory.com/305

    'CS' 카테고리의 다른 글

    [CS] 메세지 큐  (0) 2022.12.27
    [CS] GC 알고리즘  (0) 2022.12.26
    [CS] - Computer Architecture  (0) 2022.10.24
    [CS] Computer Architecture  (0) 2022.10.24
    [CS] - Computer Architecture  (0) 2022.10.24
Designed by Tistory.