Back-end Skill/JAVA

면접 스터디 1주차 JVM의 동작과 원리

Sophie소피 2022. 2. 9. 15:25

자바 가상 머신(JVM)이란 무엇인가? 

더보기

자바 가상 머신(JVM, Java Virtual Machine)이란

자바 바이트 코드를 실행시키기 위한 가상의 기계

 

자바 가상 머신의 구성

자바 가상 머신(JVM)은 다음과 같이 구성된다. 

 

1. 자바 인터프리터(interpreter)

더보기

자바 컴파일러에 의해 변환된 자바 바이트 코드를 읽고 해석하는 역할이다.

2. 클래스 로더(class loader)

더보기

자바는 동적으로 클래스를 읽어오므로, 프로그램이 실행 중인 런타임에서야

모든 코드가 자바 가상 머신과 연결되는데 이렇게 동적으로 클래스를 로딩해주는 역할이다.

3. JIT 컴파일러(Just-In-Time compiler)

더보기

JIT 컴파일러(Just-In-Time compiler)란 프로그램이 실행 중인 런타임에

실제 기계어로 변환해 주는 컴파일러를 의미한다.

동적 번역(dynamic translation)이라고도 불리는 이 기법은

프로그램의 실행 속도를 향상시키기 위해 개발되었다.

즉, JIT 컴파일러는 자바 컴파일러가 생성한 자바 바이트 코드를

런타임에 바로 기계어로 변환하는 데 사용함.

4. 가비지 컬렉터(garbage collector)

더보기

자바 가상 머신은 가비지 컬렉터(garbage collector)를 이용하여

더는 사용하지 않는 메모리를 자동으로 회수함

따라서 개발자가 따로 메모리를 관리하지 않아도 되므로,

더욱 손쉽게 프로그래밍을 할 수 있는 장점이 있다. 

 

JVM의 동작 원리 

우리가 읽고 작성할 수 있는 프로그래밍 언어를 컴퓨터가 알아들을 수 있도록

기계어로 바꿔주는 작업을 C나 자바같은 컴파일 언어에서는 컴파일러가 진행해줍니다.

우리가 코딩한 결과가 미리, 기계어나 그에 가까운 언어로

컴파일, 번역이 컴파일러라는 번역가에 의해 되는거죠!

 

 

그럼 JVM이 있는 자바는, 같은 컴파일러 언어인 C등이랑은 어떤 점에서 다른걸까요?

컴퓨터들은 여러분도 알다시피 다 같은 기계어를 쓰는게 아닙니다. 

똑같이 C로 짜서 컴파일한 기계어인데 윈도우에서 돌게 컴파일한거는

맥이나 리눅스같은 운영체제에서는 돌지않죠. 

프로그램이 돌아갈 환경, 컴퓨터마다 거기에 맞는 기계어로 일일이 번역을 해줘야합니다. 

그런 문제를 해결하기 위해 만들어진게 바로 자바의 JVM입니다! 

쉽게 말하자면, 각 종류의 컴퓨터 마다 JVM이라는 전담 통역센터가 있는것입니다.

 

우리가 자바로 코딩을 하고 나서 컴파일을 하면 기계어는 아니고 

바이트 코드라는게 생깁니다.

사람이 쓰는 자바코드에서 컴퓨터가 읽는

기계어로의 중간단계의코드라고 생각하시면 됩니다.

더보기

바이트코드란?

특정 하드웨어가 아닌 가상 컴퓨터 (Virtual Machine)에서 돌아가는 실행 프로그램을 위한 이진 표현법

우리가 자바로 Hello.java를 작성하고 나서  터미널에 javac, 자바 컴파일러이죠. 

javac Hello.java 이 명령을 내리면 같은 위치에 Hello.class가 만들어집니다

여기서 .class 파일이 바로 바이트 코드입니다! 

이 바이트 코드를 실행할 컴퓨터에 깔린 JVM에 갖다주면 

그 컴퓨터가 이 프로그램을 실핼시킬 때 마다

이 JVM이 바이트코드를 그때 그때 기계어로다가 통역을 해줍니다! 

 

이 바이트코드를 쓴다는 것에서 나오는 부수적으로 나오는 장점!

자바 뿐만아니라, Groovy나 Scala, Clojure,

그리고 안드로이드를 만들 떄 접하는 Kotlin같은 언어들도 

 다 JVM이 전용 바이트 코드로 컴파일이 됩니다!

그 언어들로도 JVM을 돌리는 기계에서의 프로그램을 짤 수 있는것이다!

 

JVM처럼 실행 시점에 그때그때 기계어로 '통번역'을 해주는 방식을 

Just In Time 컴파일, 줄여서 JIT컴파일이라고 합니다. 

 

세줄 요약하면 

자바를 컴파일해서 점 클래스 바이트 코드!

JVM에 넘겨주면 기계어로 번역된다네~ JIT 컴파일러 1

JVM은 자바로 짜서 컴파일한 소프트웨어들이 JVM에 깔린 어떤 종류의 컴퓨터에서든 돌 수있게해주는 것!

 

"한 번만 작성하면, 어디서든 동작한다. (Write Once, Run Anywhere.)" 이 W-O-R-A 가 자바의 원칙! 

어딜 가든간에 현급 뽑으려면 ATM 찾듯이 

어느 컴퓨터에서든 바이트코드를 돌리려면 JVM찾으면 되는 것입니다! 

 

JRE? JRE는 Java Runtime Environment

여기서 런타임은 아까 컴파일 타임과 대조되는 말인데요

컴파일이란건 아까 얘기한 그 번역작업 

즉 코딩 다 하고 이걸 실행하거나 배포하기 전에

'미리' 해두는 작업의 시점을 컴파일 타임이라고 합니다.

 

런타임은 반대로 이걸 run, 실행시키는 시점을 말합니다. 

자바로 짠 소프트웨어가 컴파일 및 빌드까지 다 된 다음 

이를 사용할 곳에 주어져서 실행이 될 때 

그 환경 요소들로서 필요한 것들입니다.  

 

소프트웨어라는게, 딱 우리가 자바나 그런 언어로 작성한 코드로만 돌아갈 수 있는게 아닙니다. 

예를 들어서 우리가 자바의 자료구조 기능들인 List나 Map, Set 같은 걸 사용할 수 있는 이유는 

우리가 그런 기능들을 일일이 다  구현했기 떄문이 아니라

그 것들이 바이트 코드로 컴파일 된 클래스로 제공이 되기 때문입니다.

 

 

JDK Java Development Kit

JRE에서 제공하는 실행 환경과 자바 개발에 필요한 여러 가지 명령어와 컴파일러를 포함한다. 

 

예전에는 JRE를 따로 설치하고 그랬던 시절이 있었다고 합니다. 

자바11은 개발자가 배포하는 자바 프로그램에  JRE랑 JVM 요소들까지 끼워넣어사 

사용자는 그냥 그 프로그램만 받아서 쓰도록 미는것이다

 

그리고 자바 돌리는 서버 같은 경우 그냥 아예 JDK를 설치해서 어차피 용량 크지 않으니까. 

그렇게 사용을 하는 것이죠. 

 

참고한 것들 

https://velog.io/@minheum/%EC%9E%90%EB%B0%94-%EC%8A%A4%ED%84%B0%EB%94%94-1%EC%A3%BC%EC%B0%A8-JVM

 

자바 스터디 - 1주차 (JVM, java, JDK, JRE, 바이트코드)

goal 자바 소스 파일(.java)을 JVM으로 실행하는 과정 이해하기 about JVM이란 무엇인가 컴파일 하는 방법 실행하는 방법 바이트코드란 무엇인가 JIT 컴파일러란 무엇이며 어떻게 동작하는지 JVM 구성

velog.io

 

 

http://www.tcpschool.com/java/java_intro_programming

 

코딩교육 티씨피스쿨

4차산업혁명, 코딩교육, 소프트웨어교육, 코딩기초, SW코딩, 기초코딩부터 자바 파이썬 등

tcpschool.com

 

https://www.youtube.com/watch?v=VvVruEDCSSY 

 

#면접 #자바개발자 #자바 #JVM #Java #프로그래밍 #스터디