JVM(Java Virtual Machine) 이란?
JVM은 자바 프로그램 실행환경을 만들어 주는 소프트웨어다. 자바 코드(.java)를 컴파일하여 바이트 코드(.class)로 만 변환하면 이 코드는 JVM에서 실행된다. JVM은 자바 실행 환경(JRE; Java Runtime Environment)에 포함되어 있다.
바로 실행 파일(.exe)를 만들지 않고 위와 같은 방식으로 처리할 때 얻을 수 있는 가장 큰 이점은 하나의 바이트 코드(.class)로 모든 플랫폼(윈도우, 리눅스 등)에서 실행할 수 있다는 것이다. 이렇게 동작할 수 있는 이유는 JVM이 생성된 바이트 코드를 실행하는 컴퓨터의 운영체제에 맞는 실행 파일로 변경해주기 때문이다.
Java는 플랫폼에 종속적이지 않지만 JVM은 플랫폼에 종속적이다.
Java는 컴파일된 바이트 코드를 활용하면 어떤 JVM에서도 실행할 수 있기 때문에 플랫폼에 의존적이지 않다. 하지만 JVM은 플랫폼에 의존적이고, 리눅스의 JVM과 윈도우의 JVM은 서로 다르다.
Java의 실행과정
- 사용자가 자바 코드(.java)를 작성하고 자바 컴파일러(javac)에게 컴파일 명령을 내리면 바이트 코드(.class) 파일이 생성된다.
- 바이트 코드(.class)는 클래스 로더를 통해 JVM Runtime Data Area로 로딩되고 로딩된 바이트 코드(.class)를 실행할 컴퓨터에 설치된 JVM에게 전달하면, 해당 컴퓨터가 이 코드를 실행할 때 JVM이 실시간으로 기계어로 해석한다.
JVM과 바이트 코드
JVM은 바이트 코드(.class)를 명령어 단위로 읽어서 해석하는데, Interpreter 방식과 JIT 컴파일 방식을 혼합해 사용한다.
- Interpreter 방식
- Interpreter 방식은 바이트 코드(.class)를 line 별로 해석하고 실행하는 방식이다.
- 초기 방식이며, 속도가 느리다는 단점이 있다.
- JIT (Just In Time) 캄파일 방식
- Interpreter 방식의 느린 속도를 보완하기 위해 나온 컴파일 방식
- 바이트 코드(.class)를 JIT 컴파일러를 이용해 프로그램을 실제 실행하는 시점에 각 운영체제에 맞는 Native Code로 변환하여 실행 속도를 개선하였다.
- 바이트 코드(.class)에서 Native Code로 변환하는데도 시간이 소요되므로, JVM은 모든 코드를 JIT 컴파일러 방식으로 실행하지 않는다.
- JIT 컴파일러는 같은 코드를 매번 해석하지 않고, 처음 실행할 때 컴파일을 하면서 해당 코드를 캐싱한다.
- 이 후, 변경된 부분만 컴파일하고 나머지는 캐싱된 코드를 사용한다.
'Java' 카테고리의 다른 글
[JAVA] JDK, JRE, JVM 총정리 (2) | 2023.04.10 |
---|---|
[JAVA] 문자와 문자열 (4) | 2023.04.03 |
자바 [JAVA] - Interface와 Class (4) | 2023.03.23 |
자바 - 2차원 배열 정렬 (오름차순, 내림차순, 다중 조건) (0) | 2023.03.15 |
자바 - 날짜와 시간 (0) | 2023.02.20 |
댓글