Java

Java Virtual Machine: intro

limwngur 2023. 8. 31. 16:01
728x90
실무적인 지식만 갈구하고 있었는데, 어느 한 사람에게 이런 말을 들었다.
"옆으로 넓은 개발자보다, 세로로 깊숙한 개발 공부를 해"
"여러 가지 기술을 경험해보는 것보다 한 가지 기술을 깊숙하게 파고들어 공부하는 것이 중요해"
그래서 다시 초심으로 돌아와 Java를 공부하고 Java 8의 함수적 프로그래밍과 관련된 것들에 대해 조금 더 집중해보려 한다.

이번 학기에 첫 web 만드는 설계과목도 있으니 거기서 적용하면 좋을 것 같다!(이번 내용은 관계 없다)

 

 

'자바의 정석 3rd Edition' 인용

JVM을 직역하면, '자바를 실행하기 위한 가상 기계'이다. '자바를 실행하기 위한 가상 컴퓨터' 정도로 이해하면 좋을 것 같다.

Virtual Machine은 소프트웨어로 구현된 하드웨어를 뜻하는 넓은 의미의 용어이며, 컴퓨터의 성능이 향상됨에 따라 점점 더 많은 하드웨어들이 소프트웨어화되어 컴퓨터 속으로 들어오고 있다.

다시 말해, Virtual Machine은 Virtual Computer로 생각할 수 있고, Virtual Computer는 실제 컴퓨터(Hardware)가 아니라 Software로 구현된 컴퓨터라는 뜻으로 컴퓨터 속의 컴퓨터이다.

 

Java application vs 일반 application

0. java app

Java 애플리케이션
JVM
OS(Windows)
컴퓨터(Hardware)

1. 일반 app

일반 애플리케이션
OS(Windows)
컴퓨터(HW)

 

위 그림과 같이 Java로 작성된 애플리케이션은 모두 이 가상 컴퓨터인 JVM에서만 실행되기 때문에, Java Application이 실행되기 위해서는 반드시!! JVM이 필요하다.

 

일반 Application 코드는 바로 OS만 거치고 HW로 전달되는데

Java Application 코드는 OS이전에 JVM을 한 번 거친다. 

또한, Java application은 HW에 맞게 완전히 컴파일된 상태가 아니라 실행 시에 해석(interpret)되기 때문에 

Java가 느린 것이다.

요즘에는 바이트 코드(컴파일된 자바코드)를 HW의 기계어로 바로 변환해주는 JIT(Just-In-Time)컴파일러와 향상된 최적화 기술이 적용되어서 속도의 격차를 많이 줄였다.

 

위 그림(표?)에서 볼 수 있듯

일반 app : OS와 바로 맞붙어 => OS에 종속적

Java app: JVM하고만 상호작용 => OS에 독립적 => 다른 OS에서도 프로그램의 변경없이 실행이 가능!!

(단, JVM은 OS에 종속적이기에 실행하고자 하는 OS에서 실행 가능한 JVM이 필요하다.)

 

Java Applicaiton
Windows용 JVM
OS(Windows)
컴퓨터(HW)

 

Java Applicaiton
Macintosh용 JVM
OS(Macintosh)
컴퓨터(HW)

 

Java Applicaiton
Linux용 JVM
OS(Linux)
컴퓨터(HW)

 

이렇게 함으로써 자바의 장점인

"Write once, run anywhere"가 가능한 것이다.

728x90

'Java' 카테고리의 다른 글

정적 팩토리 메서드를 왜 사용할까?  (1) 2024.01.24