산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial programming >> java

JVM 완전 해부: 정의, 아키텍처, 동작 원리

JVM이란 무엇인가?

Java Virtual Machine (JVM)은 Java 애플리케이션을 구동하는 런타임 엔진입니다. 컴파일된 Java 바이트코드를 네이티브 기계 명령어로 변환해 실행하며, JVM을 지원하는 모든 플랫폼에서 동작합니다. JVM은 Java Runtime Environment(JRE)의 핵심 구성 요소입니다. 특정 OS용 기계어로 직접 컴파일하는 언어와 달리, Java 컴파일러는 플랫폼 독립적인 바이트코드를 생성하고 JVM이 이를 런타임에 해석하거나 컴파일합니다.

JVM 동작 방식

Java 소스는 먼저 바이트코드로 컴파일되고, JVM이 이를 해석하거나 JIT(Just-In-Time) 컴파일로 네이티브 코드로 변환합니다. JVM은 메모리 할당, 스레드 스케줄링, 네이티브 라이브러리와의 상호작용도 관리합니다.

JVM 완전 해부: 정의, 아키텍처, 동작 원리

이 튜토리얼에서 배울 내용:

JVM 아키텍처

JVM 설계는 모듈러하며, Java 코드를 로드, 검증, 실행하기 위해 협력하는 여러 서브시스템으로 구성됩니다.

JVM 완전 해부: 정의, 아키텍처, 동작 원리
  1. Class Loader — 클래스 파일 로드 및 링킹(검증, 준비, 해결) 및 초기화 수행.
  2. Method Area — 클래스 구조, 메타데이터, 상수 풀, 메서드 코드 저장.
  3. Heap — 모든 객체, 인스턴스 변수, 배열 보관. 모든 스레드 간 공유.
  4. Java Stack — 각 스레드마다 고유한 스택으로 지역 변수와 부분 결과 저장. 메서드 진입 시 새 프레임 생성, 종료 시 팝.
  5. Program Counter (PC) Register — 각 스레드별 다음 실행할 명령어 주소 보관.
  6. Native Method Stack — 네이티브 코드(C/C++) 호출 저장.
  7. Execution Engine — 바이트코드 실행, 해석 또는 JIT 컴파일러 경유.
  8. Native Method Interface (JNI) — Java 코드가 네이티브 라이브러리 호출 가능하게 함.
  9. Native Libraries — 실행 엔진이 사용하는 플랫폼별 네이티브 코드 모음.

소프트웨어 코드 컴파일 및 실행 과정

프로그램 실행은 일반적으로 다음 단계로 이루어집니다:

  1. 에디터 — 소스 코드 작성.
  2. 컴파일러 — 고수준 코드를 네이티브 기계어 또는 바이트코드로 변환.
  3. 링커 — 오브젝트 파일 결합 및 외부 참조 해결.
  4. 로더 — 최종 실행 파일을 메모리에 적재.
  5. 실행 — OS와 프로세서가 프로그램 실행.

C 코드 컴파일 및 실행

Java 프로세스를 이해하기 위해 간단한 C 프로그램을 먼저 살펴봅시다. 메인 함수가 a1.c에 있고 a2.c의 f1, a3.c의 f2를 호출한다고 가정.

JVM 완전 해부: 정의, 아키텍처, 동작 원리

컴파일러는 각 .c 파일을 기계어를 담은 오브젝트 파일로 변환. 링커가 이 오브젝트 파일들을 단일 .exe 실행 파일로 병합. 프로그램 시작 시 로더가 myapp.exe를 RAM에 매핑하고 OS가 실행을 시작.

JVM 완전 해부: 정의, 아키텍처, 동작 원리

JVM에서 Java 코드 컴파일 및 실행

Java는 비슷하지만 독자적인 워크플로를 따릅니다. 소스 파일 a1.java, a2.java, a3.java가 바이트코드 파일 a1.class, a2.class, a3.class로 컴파일됩니다. 별도 링킹 단계 없이 JVM이 바이트코드를 온디맨드로 로드.

JVM 완전 해부: 정의, 아키텍처, 동작 원리

실행 중 JVM의 클래스 로더가 클래스 파일들을 메모리로 가져오고 보안을 위해 검증하며, 실행 엔진이 바이트코드를 해석하거나 JIT 컴파일로 네이티브 기계 코드로 변환. 이 JIT 단계가 Java를 컴파일 언어이자 해석 언어가 되게 만듭니다.

JVM 완전 해부: 정의, 아키텍처, 동작 원리

참고: JIT 컴파일러는 JVM의 핵심 구성 요소로, 바이트코드를 즉석에서 효율적인 네이티브 명령어로 변환합니다.

왜 Java는 컴파일 언어이자 해석 언어인가?

Java 설계는 컴파일 언어와 해석 언어의 장점을 결합합니다:

왜 Java가 느릴까?

Java의 런타임 오버헤드는 두 가지 주요 원인에서 기인합니다:

  1. 동적 링킹 — 메서드가 컴파일 타임이 아닌 런타임에 해결되어 약간의 룩업 비용 추가.
  2. 런타임 바이트코드 해석 — JIT가 있어도 바이트코드 초기 실행 시 네이티브 코드 생성 전 변환 비용 발생.

현대 JVM 구현은 적극적 최적화, 계층적 컴파일, 하드웨어 특화 튜닝으로 이 오버헤드를 크게 줄였습니다.

요약

java

  1. CNC란? - 현대 제조를 위한 컴퓨터 수치 제어 완벽 이해
  2. Java 10 스레드 로컬 핸드셰이크: 더 빠른 VM 세이프포인트 및 성능 향상
  3. 머신 터닝 이해: 핵심 정밀 가공 공정
  4. 건축 설계(Architecture Design) 이해: 원리, 실무, 영향과 진로
  5. 머신 볼트(Machine Bolt) 완벽 가이드: 종류, 등급, 체결 토크, 설치 요령
  6. 방적기(Spinning Machines) 이해: 섬유에서 실까지 제조 공정
  7. 신선 우유 자판기: 편리하고 저렴하며 친환경적인 선택
  8. 수평 보링 머신 설명: 설계, 작동, 응용
  9. 자동 프레스 머신(Automatic Press Machine)의 작동 원리, 장점 및 응용 분야
  10. 머신 텐딩 완벽 가이드: 이점, 자동화, 적용 분야