JVM - 개요

parkrootseok·2025년 1월 9일

자바

목록 보기
2/19
post-thumbnail

JVM(Java Virtual Machine)이란?

JVM은 운영체제에 의존하지 않고 Java를 수행할 수 있도록 도와주는 가상 컴퓨터 입니다. 이로 인해, Java는 '운영체제에 독릭접'이라는 특징을 가질 수 있습니다.

왜 운영체제에 의존하지 않나요?
Java는 '한 번 코드를 작성하면 어디서든 실행할 수 있다'라는 철학을 기반으로 설계되었습니다. 이를 위해 JVM이라는 개념을 도입하여 운영체제와의 의존성을 제거하고 이식성을 극대화했습니다.

JVM 역할

운영체제에 독립적인 실행 환경 제공

JVM은 Java Bytecode를 실행하는 가상 환경입니다. JVM은 실행중인 Java Bytecode를 JIT 컴파일러를 통해 실행 가능한 기계어로 변환하는 역할을 수행합니다.

Java Bytecode는 뭔가요?
Java Bytecode는 개발자가 작성한 Java Source Code를 JVM이 실행할 수 있는 명령어 집합으로 변환된 파일 입니다. 이때, Java Source Code는 .java 확장자를 가지며 Java Bytecode는 .class를 가집니다.

그런데 왜 기계어로 변환해야 하나요?
CPU는 고수준 언어를 직접 이해할 수 없습니다. 이를 위해, 저수준 언어로 변환해주는 작업이 필요합니다. 이러한 개발자가 작성한 코드를 CPU가 이해할수 있도록 변환하는 작업을 컴파일이라 합니다.

메모리 리소스 관리

JVM은 프로그램 실행 중 메모리를 자동으로 관리합니다. 이때, 핵심적인 역할을 하는 것이 GC(Garbage Collection)입니다. GC는 사용하지 않는 객체를 자동으로 정리하여 메모리 누수를 방지하고, 효율적인 메모리 활용을 가능하게 합니다.

멀티스레드 동시성 지원

JVM은 내장된 매커니즘 동작(스레드 스케줄링, 동기화 관리)을 통해 여러 스레드가 동시에 실행될 수 있도록 관리하며 병렬 처리를 지원합니다. 이를 통해 스레드 간 자원 공유과 데이터 무결성을 보장하며, 효율적인 멀티 스레드 환경을 제공합니다.

예상 질문

JVM은 무엇이고, 왜 필요한가요?

JVM은 Java 언어가 운영체제로 부터 독립적으로 수행할 수 있도록 도와주는 가상 머신입니다. 이때, JVM은 운영체제에 의존적이지 않기 위해 반드시 필요한 개념입니다.

왜, 운영체제랑 독립적으로 유지하려고 했나요?

Java 언어는 '한 번 작성한 코드를 어디서도 실행할 수 있다'라는 철학을 가진 언어입니다. 이를 위해, 어떤 컴퓨터의 운영체제에서도 별도의 작업 없이 프로그램 실행이 가능할 수 있도록 JVM을 활용하여 이식성을 극대화한 것 입니다.

JVM의 역할은 무엇인가요?

JVM은 운영체제 의존성 제거, 메모리 관리, 멀티 스레드에 대한 동시성 지원 등의 역할을 수행하고 있습니다.

JVM의 구성 요소는 무엇이 있나요?

  • 클래스 로더
    • .class 파일에 대한 검증과 필요한 클래스 및 메서드 로딩 후, Method Area에 보관
    • 로딩 -> 링크 -> 초기화 순으로 작동
  • 실행 엔진
    • 바이트 코드를 기계어로 변환해 실행하는 역할
    • 인터프리터와 JIT 컴파일러
  • Runtime Data Area
    • Heap
    • Method Area : 클래스 정보, staic 변수, 상수
    • Stack : 메서드 호출, 지역 변수 (스레드마다 존재)
    • PC Register : 스레드 별 명령어 주소
    • Native Method Stack : 네이티브 코드 실행용 스택
  • JNI
  • GC
profile
동료들의 시간과 노력을 더욱 빛내줄 수 있는 개발자가 되고자 노력합니다.

0개의 댓글