JVM ver01

Ena JJJ·2022년 11월 4일
0

java

목록 보기
4/7

JVM(Java Virtual Machine)

JVM은 자바 프로그램 실행환경을 만들어 주는 소프트웨어이다. 자바 코드를 컴파일하여 .class 바이트 코드로의 전환이 되면 자바 가상 머신 환경에서 실행된다.

JAVA의 가장 큰 특징은 '플랫폼 독립성' 이다.
Java의 좌우명인 'Write Once, Run Anywhere'에 직결된다.

Java언어로 작성된 파일을 컴파일하면 .class파일이 생성된다. 이렇게 생성된 바이트 코드는 각자의 플랫폼에 설치되어 있는 자바 가상 머신(JVM)이 운영체제에 맞는 실행 파일로 바꿔준다. 이를 통해, 하나의 바이트 코드로 JVM이 설치되어 있는 모든 플랫폼에서 작동 가능한 '플랫폼 독립성을 가지고 있다.'

Java는 플랫폼에 종속적이지 않지만 JVM은 플랫폼에 종속적이다.

위와 같이 컴파일된 바이트코드로 어떠한 JVM에서도 동작시킬 수 있어 플랫폼에 의존적이지는 않지만, 리눅스의 JVM과 윈도우의 JVM은 서로 다르다. 자바로 작성된 모든 프로그램은 자바 가상 머신에서만 실행될 수 있으므로, 자바 프로그램을 실행하기 위해서는 반드시 자바 가상 머신이 설치되어 있어야 한다.

바이트 코드를 읽는 방식

JVM은 바이트 코드를 명령어 단위로 읽어 해석하는데, Interpreter 방식과 JIT 컴파일 방식 두 가지 방식을 혼합하여 사용한다. Interpreter방식은 바이트코드를 한 줄씩 해석, 실행하는 초기 방식으로 실행속도가 느리다는 단점이 있다(feat. Python)

이러한 Interpreter해석 방식을 보완하고자 나온 방식이 JIT(Just In Time) 컴파일 방식이다. 바이트 코드를 JIT 컴파일러를 이용해 프로그램을 실제 실행하는 시점에 각 OS에 맞는 Native Code로 변환하여 실행 속도를 개선했지만, 바이트 코드를 Native Code로 변환하는 데에도 비용이 소요되므로, JVM은 모든 코드를 JIT방식으로 컴파일 하지 않고, Interpreter방식을 사용하다가 일정 기준이 넘어가면 JIT컴파일 방식으로 명령어를 실행한다.

JIT(Just In Time)컴파일러는 같은 코드를 매번 해석하지 않고, 실행할 때 컴파일을 하면서 해당 코드를 캐싱하여, 이후에는 바뀐 부분만 컴파일 하며 나머지는 캐싱된 코드를 사용한다. 이러한 방식을 통해 이전의 Interpreter 컴파일 방식보다 10배~20배 성능이 더 좋다.

출처 : https://coding-factory.tistory.com/827

0개의 댓글