ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 자바는 어떻게 운영체제에 상관없이 동작될 수 있을까?
    면접스터디 2025. 8. 12. 22:42

    자바가 운영체제에 상관없이 동작할 수 있는 이유는 JVM(Java Virtual Machine) 덕분입니다.

    자바는 코드(.java)가 바로 운영체제에서 실행되는 것이 아니라, 한 단계의 추상화(.class) 과정을 거치게 됩니다.

     

    자바 소스코드는 컴파일러(javac)에 의해 바이트코드(.class 파일)로 변환됩니다.

    이 바이트코드는 특정 운영체제를 위한 코드가 아니라 가상의 컴퓨터인 JVM이 이해할 수 있는 중간 언어입니다.

    이후 JVM이 각 운영체제에 맞게 이 바이트코드를 읽어 해당 운영체제가 이해할 수있는 기계어로 번역하여 실행합니다.

    간단하게 다음과 같은 2단계를 거칩니다.

    • 1단계: 컴파일
      • javac [소스파일].java 명령어를 통해 바이트코드를 생성합니다.
      • Java 소스코드(.java) → Java Complier → Java 바이트코드(.class)
      • 아 바이트코드는 어떤 운영체제에서도 동작합니다.
    • 2단계: 실행(인터프리터, JIT 컴파일러)
      • java [클래스명] 해당 명령어를 통해 JVM이 운영체제를 자동으로 파악해 해당 운영체제에 맞는 기계어로 변환하여 실행합니다.
      • Java 바이트코드(.class) → JVM → 운영체제
      • 이렇게 되어 동일한 바이트코드를 모든 운영체제에서 실행 할 수 있습니다.

    이러한 JVM의 역할 덕분에 자바는 “Write Once, Run Anywhere” 한번 작성하면 어디서든 실행되는 특징을 가질 수 있습니다.

    JVM은 JRE에 속해있고, JRE는 JDK에 속해있습니다. 이에 대해 좀 더 자세한 설명을 하겠습니다.

    • JDK(Java Development Kit)
      • 자바 개발 도구 키트로 자바 프로그램을 개발하는데 필요한 모든 것을 포함합니다. 예를 들면 JRE나 다음과 같은 것들이 있습니다.
        • 자바 컴파일러(javac): 자바 소스코드를 바이트코드(.class)로 변환하는 도구입니다. 아까 1단계에서 소스코드를 바이트코트로 변환하는게 이친구입니다.
        • 디버거(jdb) : 프로그램 오류를 찾는 데 사용되는 도구입니다.
        • 압축 도구(jar) : 여러 바이트코드(.class 파일) 및 기타 리소스(이미지, 설정파일)를 하나로 묶는 도구 입니다. 하나의 실행파일이 만들어지는 것으로 생각하면 됩니다.
    • JRE(Java Runtime Environment)
      • 자바 실행환경으로, 자바 애플리케이션을 실행하는데 필요한 모든 것들을 포함합니다. 예를 들면 다음과 같은 것들이 있습니다.
        • JVM : 자바 프로그램을 실행하는 가상 머신(VM)
        • 자바 라이브러리(Java API) : 자바 개발자들이 프로그램을 만들 때 사용하는 다양한 클래스 및 라이브러리(java.lang, java.util)의 집합입니다.
      • 자바 프로그램(바이트코드)을 실행만 할 경우에는 JRE만 있으면 충분합니다.
    • JVM(Java Virtual Machine)
      • 자바 가상 머신으로 바이트코드를 운영체제가 이해할 수 있는 기계어로 실시간 변환하여 실행하는 역할을 합니다.
      • JVM은 인터프리터 방식JIT 컴파일러 방식을 모두 사용해서 바이트코드를 실행합니다. 우선 초반에는 인터프리터 방식으로 바이트코드를 한줄 씩 읽어 기계어로 변환하고 실행합니다. 그러다가 실행 빈도가 높은 코드를 발견하면, JIT 컴파일러가 해당 코드블록을 한번에 기계어로 번역하여 캐시에 저장합니다. 이 후 동일한 코드가 호출되면 캐시에 저장된걸 꺼내와서 실행합니다. 그래서 실행속도가 빨라집니다.

    '면접스터디' 카테고리의 다른 글

    실습으로 알아보는 Git 아키텍처  (2) 2025.08.12
    선택자 우선순위  (0) 2024.03.06
    CSS 셀렉터(CSS Selector)  (1) 2024.03.06
    반응형 디자인 vs 적응형 디자인  (2) 2024.03.05
    HTML5 추가요소  (0) 2024.03.03
Designed by Tistory.