[Java] JDK? JRE? JVM?이란...

SaGo_MunGcci·2022년 7월 24일
0

Java

목록 보기
7/10
post-thumbnail
  • 너무 정리가 잘되어 있어 이것으로 공부함.
  • 자바를 공부하면서 헷갈리는 용어를 발견해 정리하고 넘어가고자 합니다.

설명에 앞서 Java의 철학은 다음과 같습니다.(Java의 원칙)
-한 번 쓰고 모든 곳에서 실행한다 (Write Once, Run Anywhere => WORA)
세 용어의 관계는 다음과 같다.
JDK가 JRE, JVM 모두를 포함하고 있습니다. JRE는 다시 JVM을 포함하고 있습니다. (JDK ⊃ JRE ⊃ JVM)

1.자바 가상 머신 (JVM, Java Virtual Machine)

JVM은 2가지 기본 기능이 있습니다.

  1. 자바 프로그램이 어느 기기, 어느 운영체제 상에서도 실행될 수 있게 만들어 줍니다. => WORA

  2. 자바 프로그램의 메모리를 효율적으로 관리 & 최적화해 줍니다.
    과거의 모든 프로그램은 운영체제에 맞게 작성되었습니다. 같은 프로그램이지만 윈도우, 리눅스, 맥 등 사용하는 운영체제에 따라 다르게 작성되어야만 했습니다. 게다가 프로그램이 사용하는 메모리도 개발자가 일일이 관리해줘야만 했습니다. 그러던 중 JVM이 등장합니다. JVM 덕분에 개발자는 앞서 말한 귀찮은 작업들을 하지 않아도 되게 됩니다.

※ 가비지 컬렉션(Garbage Collection)
JVM이 메모리를 관리하는 프로세스를 지칭하는 용어입니다. 자바 프로그램 상에서 사용하지 않은 메모리를 지속적으로 찾아 제거함으로써 효율적인 메모리 관리를 가능케 합니다.

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

JRE는 자바 클래스 라이브러리(Java class libraries), 자바 가상 머신(JVM) 그리고 위 그림에는 나오지 않았지만 자바 클래스 로더(Java class loader)를 포함하고 있습니다.
클래스 로더, 클래스 라이브러리를 통해 작성한 자바 코드를 라이브러리와 결합한 후 JVM에 넘겨 실행시킵니다. JRE는 그 자체로 특별한 기능을 한다기보다는 JVM이 원활하게 잘 작동할 수 있도록 환경을 맞춰주는 역할을 합니다.​

※자바 8의 메모리 관리
자바 메모리는 힙, 스택, 메타 스페이스로 구성되어 있습니다.
· 힙 - 자바가 변수 내용을 저장하는 장소
· 스택 - 자바가 함수 실행 및 변수 참조를 저장하는 장소
· 메타 스페이스(과거 펌젠) - 자바가 클래스 정의와 같이 프로그램에서 변화하지 않는 정보를 저장하는 장소

자바 8 이후 프로그램의 메타 수요에 따라 자바가 자동으로 메타 스페이스의 크기를 늘려준다고 합니다.
지금으로선 무슨 말인지 잘 모르겠지만 어쨌든 이래서 자바 8이 널리 사용되는 것 같습니다.​

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

  • 이미지 출처 : 생활코딩

  • 2번째 이미지<자바 동작방식(run이 interpreter이다)>

우리가 일반적으로 자바를 공부하기 위해 설치하는 게 바로 이 JDK입니다. JDK를 설치하면 JRE가 자동으로 설치됩니다. JDK는 JRE를 포함하고 있고, JRE는 JVM을 포함하고 있습니다. 따라서 JDK를 설치하면 JRE, JVM이 자동으로 다 설치됩니다. 자바로 개발을 하지 않는 일반 사용자들은 자바로 만든 프로그램을 실행만 하면 되기 때문에 JRE만 설치해도 됩니다. 그러나 자바로 뭔가를 만들어보고 싶은 사람은 JDK를 설치해야 합니다. JDK에는 JRE에는 없는 "자바 컴파일러(javac, java compiler)"를 포함하고 있습니다. 컴파일러란 우리가 작성한 자바 문법을 컴퓨터가 이해할 수 있게 바꿔주는 해석기 같은 존재입니다. 실제로 .java 파일을 만들어서 실행(빌드)하면 컴파일 작업을 거쳐 .class 라는 파일이 자동으로 생성됩니다. 아래 강의를 보시면 더 잘 이해하실 수 있습니다.

profile
이리저리 생각만 많은 사고뭉치입니다.

0개의 댓글