본문 바로가기
Java/Definition&Grammar

[Java] JVM 구조(architecture)

by 꾸압 2022. 5. 10.

 

<정의>

  - [오라클 피셜] Java 응용 프로그램 실행을 지원하는 소프트웨어의 한 측(aspect)

  - [Javaworld 피셜] Java 프로그램 실행 방법. JVM 설정에 따라 실행하는 프로그램 resource 관리

  - 기술 정의 : 코드를 실행하고, 해당 코드에 대해 런타임 환경을 제공하는 소프트웨어 프로그램 사양(specification)

  - 보통 개발자들이 말하는 JVM은 특정 기기에서 실행 중인 process,
    특히 Java 앱에 대한 resource를 대표하고 통제하는 SERVER 를 지칭 (면접에서 이거 물어보는 듯?)

 


 

<기능>

  - Java 프로그램이 어느 기기, 운영 체제에서도 실행 가능하게 함
    ("한번 작성하면, 어디에서나 실행한다")

  - 프로그램 메모리 관리 최적화
    : Heap과 Stack의 메모리 사용량을 확인하며, 메모리 설정값 조율

  - GC(가비지 컬렉션) process를 통해 메모리 관리. Java 프로그램이 안 쓰는 메모리 제거&청소

  - Java 클래스 파일을 이식성있게 실행하는 가상 머신(Virtual Machine)이지만, 가상 운영체제는 없음
    (런타임 환경 or 프로세스 가상 머신이 알맞음)

 


 

<[Javaworld 피셜] JVM 의 3가지 주요 구성>

  1. 사양 (Specification) : User가 소프트웨어 시스템이 어떻게 동작하는지 읽을 수 있는 설계 문서

  2. 구현 (Implementation) : 라이센스가 부여된 거의 모든 JVM은 오픈JDK와 JVM fork 로 생성

  3. 인스턴스 (Instance) :

    - 스펙이 구현되어 release한 걸 다운로드한 프로그램 == 독립된 하나의 JVM instance (같은 버전 쓰면 같은거임)

    - Almost 개발자들이 말하는 JVM ? 소프트웨어 개발 환경에서 실행되는 하나의 JVM instance
        ex) "야, 네 JVM은 메모리 얼마나 씀?", "스택오버플로우로 내 JVM이 아작났어!!"

 


 

<[Youtube 피셜] JVM 의 3가지 주요 구성>

  1. 클래스 로더(Class Loader)

    - 클래스를 메모리에 로드하고 실행하기 위해 사용 가능케 하는 JVM 일부

    - [개발자 관점] 로딩, 링크, 초기화의 3단계로 구성 == BlackBox

 

  2. 런타임 데이터 영역(Runtime Data Area)

    - 메모리 영역 : JVM이 클래스 파일을 저장&실행 하기 위한 영역

      (1) Method Area : class 변수, method 관련 정보, constant pool, static 변수 등이 저장되는 영역. 모든 thread를 공유.

      (2) Heap Area : 프로그램 실행 중 new 연산에 의해 생성된 object가 저장되는 영역. GC의 target area.

      (3) Stack Area : Method 내에서 사용하는 data( parameter, 지역 변수, frame data, return 값 등 )을 저장하는 영역

      (4) PC Register : 현재 수행 중인 JVM 명령어의 주소 값을 저장해두는 영역

      (5) Native Method Stack : Java 이외의 언어로 작성된 native code를 위한 영역 (C, C++ 등)

 

  3. 실행 엔진 (Execution Engine)

    - 메모리 뿐 아니라, 파일 시스템 엑세스, 네트워크 입출력을 위한 resource 관리 등 운영체제 호환 기능

    - Interpreter

    - JIT 컴파일러
      (1) 중간 코드 생성기
      (2) 코드 최적화 프로그램
      (3) 타겟 코드 생성기
      (4) 프로파일러

    - Garbage Collector

    - 자바 네이티브 메소드 인터페이스

 


 

<참조 1>  https://www.youtube.com/watch?v=QHIWkwxs0AI

<참조 2> https://java.com/ko/download/help/whatis_java.html

<참조 3> https://www.itworld.co.kr/tags/53379/jvm/110837

<참조 4> https://velog.io/@adorno10/Live-Study-1.-JVM%EC%9D%80-%EB%AC%B4%EC%97%87%EC%9D%B4%EB%A9%B0-%EC%9E%90%EB%B0%94-%EC%BD%94%EB%93%9C%EB%8A%94-%EC%96%B4%EB%96%BB%EA%B2%8C-%EC%8B%A4%ED%96%89%EB%90%98%EB%8A%94-%EA%B2%83%EC%9D%B8%EA%B0%80

 

 

'Java > Definition&Grammar' 카테고리의 다른 글

[Java] This 란?  (0) 2022.07.12
[Java] Getter, Setter 쓰는 이유  (0) 2022.06.17
[Java] Interface  (0) 2021.03.24
[Java] 오버로딩 & 오버라이딩  (0) 2021.03.15

댓글