JVM , JRE , JDK이 대체 뭐니~~

Today Jeeho Learned·2022년 10월 7일
0

JAVA

목록 보기
3/4

Intro

프로그래밍을 하기위해서 자바를 설치하는 과정에 뭐를 설치해라~~ 이러한 것들이 엄청 많았다. 그냥 실행하기 위한 도구정도로 생각했었는데! 나는 자바를 사용하는 개발자이니까 원리먼저 제대로 이해하고 정리하려고한다.

자바 가상 머신 JVM(JAVA VIRTUAL MACHINE)

과거의 모든 프로그램은 os에 맞게 작성되었다. 같은 프로그램이지만 윈도우, 리눅스, 맥 등 사용하는 운영체제에 따라서 다르게 작성되어야만 했다. 또한 프로그램이 사용하는 메모리도 개발자가 일일이 관리를 해줘야만 했다. 그러던중 JVM이 등장하고, 덕분에 개발자는 앞에 말한 번거로운 작업들을 하지 않아도 되었다.

그래서 JVM의 2가지 기본 기능이 있다.
1. 자바 프로그램은 어떤 운영체제에서도 독립적이다.
2. 가비지 컬렉션을 통해서 메모리를 관리하는 프로세스이다.

쉽게말하면 프로그램이다.

컴퓨터가 0101011과 같은 2진수로 작성된 바이너리 언어만을 알아듣는데, 사람들이 작성하기가 쉽지않다.
그리고 사람들은 이런것으로 코딩하기도 힘들다. 우리가 읽고 작성하는 프로그래밍 언어를 컴퓨터가 알아듣게 하기 위해서 컴파일러(c,java)라는 번역가에 의해서 전달된다.
자바를 컴파일하면 .class라는 바이트코드가 생기는데, 사람이 쓰는 프로그래밍과 컴퓨터가 읽는 기계어의 중간단계로 생각하면 된다.이 바이트 코드를 JVM에 전달해주면 그때그때 기계어로 통역해준다. 부수적으로 나오는 장점은 다양한 Groovy,scala,kotlin같은 언어들도 JVM을 돌리는 언어의 프로그램을 작성할 수 있다!

실행시점에서 그때그때 기계오로 통번역해주는 방식을 JIT(Just In TIME)컴파일이라고 한다.
JVM은 자바로 짜서 컴파일한 소프트웨어를 어떤 컴퓨터에서 실행가능 WORA(Write Once Run Anywhere)

자바 런타임 환경 (JRE, Java Runtime Environment)

JRE는 자바 클래스 라이브러리, JVM , 위의 그림에는 없지만 자바 클래스 로더를 포함하고 있다.
클래스 로더, 클래스 라이브러리를 통해 작성한 자바코드를 라이브러리와 결합한 후에 JVM에 넘겨 실행시켜준다. JRE는 자체로 특별한 기능을 한다기 보다는 JVM이 원활하게 잘 작동할 수 있도록 환경을 맞춰주는 역할이다.

컴파일타임과 런타임은 ?

컴파일은 코드를 다하고 이것을 실행하거나 배포하기 전에 미리 해두는 번역 작업, 이 시점을 컴파일 타임
런타임은 이것을 실행하는 시점을 말한다. 자바로 작성 된 소프트웨어가 컴파일 및 빌드까지 다 된 다음실행이 될때 환경요소로 필요한 것들이다.

Q. 런타임되는 시점은 이미 바이트코드로 번역이 되어있고, JVM이 실행해주면 되는건데 더 필요해?
-> 소프트웨어라는 것은 우리가 자바같은 언어로 작성된 코드만으로 돌아가는 것이 아니기때문이다. 예로 자료구조같은 것이 우리가 작성한 것이아니라, 바이트코드로 컴파일 된 클래스로 제공되기 때문이다.

자바 개발 키트 (JDK, Java Development Kit)

우리가 일반적으로 자바를 공부하기 위해서 설치하는 것이 JDK이다. JDK를 설치하면 JRE를 자동으로 설치할 수 있다. JRE는 JVM을 포함하고 있기에 결국 JDK를 설치하면 다 설치된다.
자바로 개발하지 않는 일반 사용자들은 자바로 만든 프로그램을 실행만 하면 되기때문에 JRE만 설치하면 되는데, 자바로 뭔가 만들어보려면 JDK를 설치해야 한다.

JDK는 JRE에는 없는 자바 컴파일러(javac,java compiler)를 포함하고 있다. 컴파일러란 우리가 작성한 자바 문법을 기계어만 이해하는 컴퓨터가 이해할 수있게 바꿔주는 해석기 같은 존재이다.
실제로 .java 파일을 만들어서 실행(빌드)하면 컴파일을 거쳐 .class라는 파일이 자동으로 생성된다.

참고

https://www.youtube.com/watch?v=VvVruEDCSSY
이해하는데 많은 도움이 되었습니당~ 감사합니다!

profile
기록해야 (살아)남는다 !

0개의 댓글

관련 채용 정보