ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [TIL] JVM에 대하여
    TIL(Today I Learned) 2022. 11. 30. 20:55

    *20221130의 회고

     

     

       오늘 오전에 진행된 JVM에 대한 특강 내용을 정리해보려 한다.

     

     

    • 운영체제 : 하드웨어를(하드웨어의 자원을) 관리하는 시스템 소프트 웨어, MS - windows 계열, Linux, Mac OS, Unix 등

     

    • 일반적으로 컴퓨터에서 실행되는 소프트웨어는 운영 체제에 종속적임
      • 윈도우에서 C로 작성된 프로그램은 윈도우에서만 실행됨. Linux환경에서는 실행 불가.
      • 자바는 환경에 상관 없이, 한번 작성된 프로그램은 어디서든지 실행 가능 -> JVM 덕분에

     

    • 자바 코드가 실행되는 과정 
      • 자바 문법으로 작성한 .java 파일 -> 자바 컴파일러 -> .class 파일로 변환(바이트 코드, JVM이 인식할 수 있는 코드) -> JVM -> 바이너리 코드(운영체제가 인식할 수 있는 코드) -> 운영체제 -> 하드웨어

     

    • JDK (Java Development Kit)
      • Java, JavaC(자바컴파일러), JacaDoc, Jar 등이 포함되어 있는 자바 개발 키트
      • JRE를 포함하고 있다.
      • 프로그램을 생성, 실행, 컴파일 할 수 있다.

     

    • JRE (Java Runtime Environment)
      • 자바에서 제공되는 기본 라이브러리들이 있다. (java.util, java.lang ...)
      • JVM을 포함하고 있다.
      • 컴파일된 Java 프로그램을 실행하는데 필요한 패키지

     

    • JVM(Java Virtual Machine : 자바 가상 머신)
      • 소프트웨어로 구성된 에뮬레이터(Emulator : 대리실행기)
      • 운영체제와 자바 프로그램 사이에서 자바 프로그램이 실행될 수 있는 환경 제공
      • 자바 프로그램을 운영체제가 이해할 수 있는 형식으로 변환하여 운영 체제에 전달
      • 따라서 JVM만 있다면, 어디서든 자바 프로그램을 실행할 수 있음 (JVM은 운영체제에 종속적)
      • Write Once, Run Anywhere

     

    출처 : https://cafe.naver.com/jjdev/227

     

    • JVM 구조
      • 클래스 로더 서브시스템
        • .class에서 바이트코드를 읽고 메모리에 저장
        • 클래스를 처음으로 참조할 때, 해당 클래스를 로드하고 링크함
        • 링크를 통해 배치 작업을 수행
        • 런타임 시에 동적으로 클래스를 로드
      • Runtime Data Area
        • JVM의 메모리 영역
        • Method Area, Heap, Stack, PC Registers, Native Internal Threads(Native Method Stack)로 구성됨
        • 힙 영역에는 객체를 저장
        • 스택 영역에는 스레드 마다 런타임 스택을 만들고, 스택 프레임이라 부르는 블록을 쌓음
      • 실행 엔진
        • JIT(Just In Time) 컴파일러 : 인터프리터 방식으로 실행하다가 적절한 시점에서 기계어로 변환, 이후부터는 기계어로 직접 실행 -> 반복되는 코드를 재사용해서 속도를 높임
        • GC(Garbage Collector) : 더이상 참조되지 않는 인스턴스를 찾아 메모리에서 삭제
      • JNI(Java Native Interface)
        • Native Method Libraries와 상호작용하며 실행 엔진에 필요한 것들을 제공해준다.
        • C, C++, 어셈블리로 작성된 함수를 사용할 수 있는 방법 제공
        • 자바에서 기본으로 제공되는 메서드에 native키워드가 붙은 것들
        • 자바 외의 언어로 작성된 네이티브 코드를 위한 메모리 영역

     

       이제 Runtime Data Area인 메모리 영역에서, 다시 영역이 세분화 되는데, 그부분에 대해서는 조금 더 자세히 공부한 후에 정리하도록 해야겠다. 자바에 대해서 좀 더 깊게 알아가는 과정을 거치니 뭔가 자바에 대한 애정이 생기는 것 같다ㅋㅋ... 면접때 이런 부분이 단골질문이라고 하니 내일도 자바심화 수업 열심히 듣고 정리해야 겠다! 내일은 오늘보다 더 집중하기!!! 

Designed by Tistory.