JVM

정윤서·2024년 1월 26일
0
post-custom-banner

JVM이란?

JVM은 Java Virtual Machine의 약자로, 자바의 가장머신이다. 이것은 자바 프로그램이 실행되는 환경을 말하는데, 실제 컴퓨터와는 조금 다른 가상의 컴퓨터라고 생각할 수 있다.
JVM이 있기 때문에 자바 프로그램이 다양한 운영체제에서 동일하게 실행될 수 있다.

JVM의 역할

  • 코드 실행 : 자바로 작성된 프로그램을 기계가 이해할 수 있는 언어로 변환해서 실행.
  • 플랫폼 독립성 : 자바코드는 JVM 위에서 실행되기 때문에 어떤 운영체제에서도 동일하게 동작. -> 자바가 "한 번 작성하면 어디서든 실행된다.(Write Once, Run Anywhere)"라고 불리는 이유
  • 메모리 관리 : JVM은 프로그램이 사용하는 메모리 관리를 관리하고, 필요하지 않은 메모리를 자동으로 정리한다 -> 가비지 컬렉션

JVM의 작동 방식

1. 컴파일 단계

  • 자바 프로그램을 쓰고 저장하면 '.java'라는 확장자를 가지게 되는데 컴퓨터는 이 파일을 바로 이해할 수 없다. 그래서 자바 컴파일러라는 도구가 이 파일을 컴퓨터가 이해할 수 있는 '바이트코드'라는 형태로 바꿔준다. 이렇게 변환한 파일은 '.class' 확장자를 가지게 된다.

2. 클래스 로더(Class Loader) 시스템

  • JVM 안에 있는 '클래스 로더'는 필요한 '.class' 파일들을 찾아서 메모리에 올린다. 즉, 프로그램이 실행될 때 필요한 부분들을 불러와서 사용할 준비를 하는 것이다.'

3. 런타임 데이터 영역

  • 프로그램을 실행하는 데 필요한 여러 종류의 데이터를 저장하는 곳.
  • 힙(heap), 스택(stack), 메소드(method) 영역 등이 포함.
  • 크게 힙(Heap)이라는 곳에는 객체들이, 스택(Stack)이라는 곳에는 각 메소드의 정보가 저장됨.

4. 실행 엔진(Execution Engine)

  • 런타임 데이터 영역에서 불러온 바이트코드를 실제로 실행시키는 역할.
  • JIT 컴파일러가 바이트코드를 더 효율적으로 실행할 수 있도록 도와줌.

5. 네이티브 인터페이스(Native Interface)

  • 자바로 작성되지 않은 코드와 자바 코드를 연결해주는 다리같은 역할.
  • C나 C++같은 다른 언어로 작성된 코드를 자바 프로그램 안에서도 사용할 수 있게 해줌.

6. 가비지 컬렉션(Garbage Collection)

  • 프로그램을 실행하면서 더 이상 필요 없어진 메모리(사용하지 않는 객체 등)를 자동으로 찾아서 정리해줌.

"극장"에 비유한 JVM 작동방식

딱딱한 글로만 보고 적어보니 이해가 잘 가지 않아 극장에 비유해보기로 했다.
1. 스크립트 작성(컴파일 단계)
: 극장에서 공연할 연극의 스크립트를 작성한다. 이 스크립트(.java 파일)은 모든 배우들(컴퓨터)이 이해할 수 있는 특별한 형태인 바이트코드(.class 파일)로 변환된다.
연극 스크립트를 특정 언어 → 범용 언어로 번역하는 것과 같음.
2. 배우들의 스크립트 학습(클래스 로더)
: 클래스 로더를 사용하여 바이트코드를 읽고 해석하는 것은 배우들이 스크립트를 읽고 연기를 준비하는 것과 같다. 필요한 스크립트(클래스)만 선택적으로 불러온다.
3. 무대 설정(런타임 데이터 영역)

  • 무대(메모리)를 설정한다. 여기에는 여러 섹션이 있으며 각 섹션은 연극의 다른 요소(변수, 메소드 등)를 담당한다. 예를 들어, '힙'은 무대의 배경과 소품을 나타내고, '스택'은 각 장면에서 배우들이 수행하는 행동을 나타낸다.
    4. 연극 공연(실행 엔진)
  • 공연(프로그램)이 시작된다. 실행 엔진은 연출가로, 바이트코드(스크립트)를 실제 행동(기계어)로 변환하여 공연을 진행한다. JIT컴파일러는 연극이 진행되는 동안 배우들의 연기를 개선하여 공연을 더 원활하게 만들어준다.
    5. 특별 게스트(네이티브 인터페이스)
  • 가끔 특별 게스트(다른 프로그래밍 언어로 작성된 코드)가 공연에 참여. 이들은 네이티브 인터페이스를 통해 연극에 쉽게 통합된다.
    6. 무대 정리(가비지 컬렉션)
  • 공연이 끝난 후, 무대 위에 남은 불필요한 소품(사용되지 않는 메모리)을 정리. 가비지 컬렉터는 무대 관리자로, 더 이상 필요 없는 소품을 치우고 무대를 깔끔하게 유지한다.

JVM의 장점

  • 운영 체제에 구애받지 않고 프로그램 개발 가능
    : 윈도우에서 개발한 자바 프로그램이라도 리눅스나 맥에서도 문제없이 실행 가능
    -> JVM이 자바 프로그램을 특정 플랫폼에 맞게 번역하기 때문에
  • 보안
    : 코드를 실행하기 전 여러가지 검사를 수행해 시스템 보안 강화
    -> 중간에 코드를 검증하고 실행하기 때문에 악의적인 코드가 시스템 자원에 무단으로 접근하는 것을 방지.
  • 성능 최적화
    :'JIT(Just-In-Time)컴파일러'를 사용하여 프로그램의 성능 최적화
    -> 자주 사용되는 코드 식별, 직접 기계어로 변환하여 실행 속도를 빠르게 함.
  • 멀티스레딩
    : 하나의 프로그램이 여러 작업을 동시에 처리 가능.

JVM의 이러한 강점들은 자바 유연한 프로그래밍 언어로 널리 사용되는 이유이다. JVM 덕분에 자바 개발자들이 다양한 환경에서의 호환성, 자동 메모리 관리, 높은 보안, 성능 최적화, 멀티스레딩 지원과 같은 이점을 누릴 수 있다.

post-custom-banner

0개의 댓글