자바는 “Write Once, Run Anywhere (WORA)” 원칙을 강조하며 플랫폼 독립성을 추구한다. 즉, 한 번 작성한 자바 프로그램이 어떤 운영체제에서든 실행될 수 있어야 한다. 그러나 이를 위해서는 운영체제 및 하드웨어와 적절히 통합된 JVM(Java Virtual Machine) 이 필요하다.
운영체제마다 하드웨어 추상화 방식과 시스템 라이브러리가 다르기 때문에, JVM은 각 운영체제에 맞게 별도로 제공된다. 이렇게 함으로써 자바 애플리케이션은 이식성과 호환성을 유지하면서 여러 운영체제에서 실행될 수 있다.
🚀 JVM과 운영체제 및 하드웨어의 관계
자바 프로그램이 실행되려면 JVM(Java Virtual Machine) 이 필요하다. 하지만 운영체제마다 하드웨어와 시스템 라이브러리가 다르므로 아래와 같은 이유로 운영체제별로 다른 JVM이 제공된다.
1. 운영체제별 시스템 라이브러리 차이
• Windows, macOS, Linux 등은 각기 다른 시스템 API와 라이브러리를 사용한다.
• 예를 들어, 파일 시스템, 네트워크 소켓, 메모리 관리 방식이 다르므로 JVM이 이를 적절히 처리할 수 있도록 맞춰야 한다.
2. 하드웨어 아키텍처 차이 (플랫폼 독립적이지만 하드웨어에는 종속됨)
• 자바는 플랫폼 독립성을 추구하지만, 하드웨어 자체로부터는 완전히 독립적이지 않다.
• 이유는 CPU 아키텍처마다 명령어 체계가 다르기 때문에, JVM이 해당 아키텍처에 맞는 코드로 변환해야 한다.
• 대표적인 CPU 아키텍처 예시:
• x86(32비트)
• x86_64(64비트)
• ARM(모바일 및 최신 Mac M1/M2 프로세서)
→ 따라서, 같은 운영체제라도 CPU 아키텍처가 다르면 별도의 JVM이 필요하다.
→ 예를 들어, Intel 기반 Mac(x86_64)과 M1/M2 Mac(ARM64)의 JVM은 서로 다르다.
3. 네이티브 코드 실행 방식 차이
• 자바 애플리케이션은 JVM 위에서 바이트코드(Bytecode) 로 실행된다.
• 하지만 JVM 내부적으로는 운영체제별 네이티브 코드로 변환해야 한다.
• 네이티브 코드는 운영체제와 하드웨어에 따라 다르게 동작하기 때문에 각 환경에 맞는 JVM이 필요하다.
4. 운영체제별 최적화 필요
• Garbage Collector(GC) 는 운영체제의 메모리 관리 방식에 따라 다르게 동작할 수 있다.
• Windows, macOS, Linux에서 I/O 성능 최적화, 멀티스레딩 관리, 시스템 호출 방식이 다르므로 JVM이 이를 고려해야 한다.
'JAVA' 카테고리의 다른 글
[JAVA] @, Annotation(애너테이션) 완벽 가이드 (0) | 2025.02.06 |
---|---|
[JAVA] StringBuilder + 반복문에서 System.out.println()을 쓰면 안 되는 이유 (0) | 2025.02.05 |
[JAVA] Javadoc 완벽 가이드 (0) | 2025.02.03 |
[JAVA] 자바 코딩 규칙(Java Coding Conventions) (0) | 2025.02.03 |
[JAVA] JRE와 JDK의 차이점: 환경변수 설정이 필요한 이유 (0) | 2025.02.03 |