시작이 반

[JAVA] Java는 OS에 독립적! 본문

Programming/Java

[JAVA] Java는 OS에 독립적!

G_Gi 2023. 1. 26. 23:08
SMALL

JVM기반의 언어를 사용하다가 (Java, Kotlin) 보면 OS에 독립적이라는 말이 나온다. 옛날에는 JVM위에서 동작하기 때문에 OS에 독립적이구나 하고 넘어갔는데

최근에 왜 OS에 독립적인지 정확히 알고싶어 졌다.

 

자바의 런타임 과정은 아래와 같다.

  1. JDK를 통해 바이트코드 생성 ( .java -> .class )
  2. 바이트코드를 JRE에 전달 ( .class )
  3. JRE를 통해 바이트코드를 JAVA 명령어로 실행
  4. 이를 JVM이 실행

여기서 

JVM이 내부에서 특정 OS에 맞게 자바 언어를 인터프리터나 JIT를 통해 기계어로 변환시켜준다. 때문에 어떤 OS를 사용하든간에 JVM이 JAVA가 실행되는 것을 보장한다.

 

옜날에는 Java언어는 다른 언어에 비해서 느리다는 말이 나왔었는데 이는 위에 런타임과정에서 java코드를 바이트 코드로 변환하는 과정이 있기 때문이었다. 이후 인터프리터를 통해 기계어로 변환이 되는데 이 때문에 느리다는 말이 나왔고 이를 해결하기 위해 JVM에서는 인터프리터와 JIT를 같이 사용하고 있다. (코틀린도 똑같나?)

 

 

JIT란?

https://dkswnkk.tistory.com/416

바이트 코드를 인터프리터를 통해 매번 기계어로 번역을 하게되면 비효율 적이게 된다.

때문에, JIT컴파일러가 소스 코드 전체를 확인한 후 중복된 부분을 미리 기계어로 번역시켜 저장을 한다.

이후 인터프리터로 번역을 하면서 중복된 부분을 만나게 되면 저장소에서 꺼내와 기계어로 변환시켜주는 방식이다.

 

정리하자면,

JVM이 Java언어를 각 OS에 맞는 기계어로 변환시켜주기 때문에 OS에 독립적이며,

JVM은 인터프리터와 JIT를 사용하여 기계어로 변환시켜준다.

LIST

'Programming > Java' 카테고리의 다른 글

[Java] JVM GC란  (0) 2023.01.25
[Java] 2중 for문 한번에 탈출하기  (0) 2021.11.01
[Java] 코테 준비 ( 알아야할 것들)  (2) 2021.08.13
[Java] SOLID  (1) 2021.05.10
[Java] Lombok  (0) 2021.01.25