군만두의 IT 공부 일지

[Java] 자바 기초 다지기(JVM과 자바의 구동방식) 본문

개발일지/패스트캠퍼스

[Java] 자바 기초 다지기(JVM과 자바의 구동방식)

mandus 2024. 2. 17. 14:21

 

목차

    📅진행기간: 2024년 2월 5일 ~ 2023년 9월 20일

    ⭐요약


    패스트캠퍼스 백엔드 개발 온라인 필수 강의를 듣고 JVM과 JAVA의 구동 방식에 대해서 정리함. 전공자였어도 자바를 오랜만에 공부하니까 헷갈리는 용어도 있었고, 자바를 왜 쓰는 지 생각하면 좋을 것 같음. 각종 블로그와 수업 내용을 참고해서 작성했음. 백엔드 개발자를 희망하는 사람들에게 있어서 앞으로 면접 대비를 하는 데 도움이 될 것이라고 생각함.

    ⭐JVM이란?


    JVM(Java Virtual Machine)은 가상환경에서 자바를 실행할 수 있도록 하며, 자바 애플리케이션을 클래스 로더를 통해 읽어 들여 자바 API와 함께 실행함.

    1. JVM의 특징

    • JVM은 플랫폼(OS) 독립적인 개발이 가능함.
    • 자동으로 메모리를 관리함.
    • 컴파일된 바이트 코드를 기계가 이해할 수 있는 기계어로 변환함
    • Garbage Collection(가비지 컬렉션)을 수행함.
    • 일반 프로그램에 비해서 상대적으로 실행 속도가 느림.

    자바 프로그램의 클래스 파일은 일반 프로그램과는 다르게 운영체제에서 직접 동작하지 않고 'JVM'에서 동작함. 그래서 자바 프로그램은 한 번 만들면 어느 운영체제에서든 실행할 수 있음. 이것을 플랫폼 독립성, 이식성이 높다고 함. 또한, 운영체제에 맞는 가상 머신을 설치해야 하기 때문에 운영체제에 종속적이라고도 할 수 있음.

    2. JVM의 구성요소

    1) 클래스 로더(Class Loader)

    : JVM 내로 클래스 파일(*.class)를 동적으로 로드하고, 링크를 통해 배치하는 작업을 수행하는 모듈.

     

    2) 실행 엔진(Execution Engine)

    : 클래스 로더를 통해 런타임 데이터 영역에 배치된 바이트 코드를 명령어 단위로 읽어서 실행함.

     

    3) 런타임 데이터 영역(Runtime Data Areas)

    : JVM의 메모리 영역으로 자바 애플리케이션을 실행할 때 사용되는 데이터들을 적재하는 영역임.

     

    4) 가비지 컬렉터(Garbage Collector)

    : 자바의 메모리 관리 방법 중의 하나로, JVM의 Heap 영역에서 동적으로 할당했던 메모리 중 사용하지 않는 메모리 객체(garbage)를 모아 주기적으로 제거하는 프로세스임.

    3. JAVA의 구동 방식

    1. 소스코드를 작성힘. (.java 확장자로 Java 소스 파일 작성)
    2. 컴파일러(javac.exe)가 소스코드를 바이트코드로 변환함. (.class 파일)
    3. 런처(java.exe)로 자바 가상 머신을 구동시킴.
    4. JVM이 바이트코드를 해석하여 운영체제가 이해할 수 있는 기계어로 변환하여 자바 프로그램이 실행됨.

    바이트코드(bytecode)는 JVM이 이해할 수 있는 언어로 변환된 코드임. JVM만 설치되어 있다면 바이트코드는 어떤 운영체제에서라도 실행될 수 있음.(플랫폼 독립적)

    후기


    • JVM에 대해 공부하면서 Java의 가상환경에서의 실행 방식과 플랫폼 독립성의 원리를 이해할 수 있었음.
    • 다양한 프로그래밍 언어가 많지만, Java를 사용하는 이유에 대해서 고민하게 됨. 객체지향 언어라는 것 말고도 플랫폼 독립성, 메모리 관리(가비지 컬렉션), 보안성과 같은 기술적 장점이 존재하여 안전하게 프로그램을 실행하기 위해 사용한다고 생각함.
    • 수업 내용에서는 잠깐 언급되었지만, 면접 준비를 하려면 더 자세히 알 필요가 있다고 생각하여 JVM에 대해서 조사함. 다양한 자료들을 찾아보면서 공부했는데, 대학교 수업에서 배운 내용도 있고 모르는 내용도 많았음. 가비지 컬렉션의 작동 원리와 JIT 컴파일러, ZOT 컴파일러에 대한 내용도 공부해서 다음에 다루면 좋을 것 같음.

    ⭐참고자료


    1) coco3o, "신입 개발자 기술면접 질문 정리 - 자바", 2022.02.18, https://dev-coco.tistory.com/153

    2) 개발새발!, "자바의 구동 원리와 JVM(Java Virtual Machine)", 2022.01.26, https://devpad.tistory.com/56

    3) Inpa Dev, "JVM 내부 구조 & 메모리 영역 총정리", 2022.09.21, https://inpa.tistory.com/entry/JAVA-☕-JVM-내부-구조-메모리-영역-심화편

    4) 코딩팩토리, "[Java] 자바 가상머신 JVM(Java Virtual Machine) 총정리", 2022.03.06, https://coding-factory.tistory.com/827

    5) kernel360, "JVM", 2024.02.02, https://kernel360.github.io/blog/JVM

     

    이 글은 패스트캠퍼스 백엔드 개발 캠프에서 공부한 내용을 작성한 것입니다.

     

    Comments