본문 바로가기
CS

1. JVM 기초(JRE, JDK, SDK)

by KwonSoonBin 2023. 2. 10.

JVM(Java Virtural Machine)

  • JVM은 자바 가상 머신의 약자를 따서 줄여 부르는 용어
  • 운영체제(OS)와 Java 애플리케이션 사이의 중개자 역할.
  • 바이트 코드를 기계어로 번역
  • OS에 종속받지 않고 CPU가 Java를 인식, 실행할 수 있게 하는 가상 컴퓨터

JVM은 자바 바이트코드를 실행할 수 있는 환경을 제공해주어, 운영체제에(OS) 상관없이 어디에서든 바이트 코드가 해당 운영체제에서 독립적으로  JAVA 애플리케이션을 실행할 수 있게 해준다.

 

 

왜 이런 과정이 필요한가?

Java 소스코드, 즉 원시코드(*.java)는 CPU가 인식을 하지 못하기 때문에 기계어로 컴파일을 해주어야한다.

cpu 제조사 마다 명령어 셋이 다를 수 있기 때문에 'A컴퓨터(인텔)' 에서 잘 작동되던 Java파일이 'B컴퓨터(AMD)' 에서는 동작하지 않을 수 있기 때문이다.

 

(Java compiler 가 .java 파일을 .class 라는 Java bytecode로 변환한다.)

이때 Java는 이 JVM 이라는 가상머신을 거쳐서 OS에 도달하여 JVM이 인식할 수 있는 Java bytecode(*.class)로 변환된다.  (기계어로 바로 컴파일 되는게 아니다. )

또한 변환된 bytecode는 기계어가 아니기 때문에 OS에서 바로 실행되지 않는다. 이 때, JVM이 OS가 bytecode를 이해할 수 있도록 해석해준다. 따라서 Byte Code는 JVM 위에서 OS 상관없이 실행될 수 있는 것이다.

 

1. C , JAVA 컴파일 언어(.java 파일)

2. 컴파일러가 컴파일(파일 실행 전 미리 하는 번역 작업)

3. *.class (바이트 코드) (컴파일러에 의해 번역된 결과물) 

4. JVM이 해당 OS & CPU가 읽을 수 있는 기계어로 변경, 실행 

컴파일 과정

 

JRE(Java Runtime Environment)

(자바 런타임 환경)

JVM을 포함한 + 자바 클래스 라이브러리(Java Class Library) 등으로 구성되어 있다.
컴파일 된 Java 프로그램을 실행하는데 필요한 패키지이다.

자바 프로그램을 실행할 수 있게 하는 도구이다. 

 

JDK(Java Development Kit)

(자바 개발 키트)

  • Java 를 사용하기 위해 필요한 모든 기능을 갖춘 Java용 SDK (Software Development Kit)
  • JRE, JVM를 모두 포함하는 포괄적이 키트
    JRE에 있는 것 뿐만 아니라 컴파일러(javac)와 jdb, javadoc 과 같은 도구도 포함되어 있다.
  • 프로그램을 생성, 실행, 컴파일할 수 있다.
  • Java compiler는 JDK를 설치하면 bin 에 존재하는 javac.exe를 말한다. (즉, JDK에 Java compiler가 포함되어 있다.)

 

SDK(Software Development Kit)

(소프트웨어 개발 키트)
하드웨어 플랫폼, 운영체제 또는 프로그래밍 언어 제작사가 제공하는 툴. 키트의 요소는 제작사마다 다르다.
SDK의 대표적인 예로, JDK 등이 있다.
SDK를 활용하여 애플리케이션을 개발할 수 있다.

다양한 라이브러리와 JVM을 포함

자바로 작성한 S/W가 컴파일, 빌드까지 다 된 다음, 이를 사용할 곳에 주어져 실행될 때(컴파일된 상태=바이트코드), 그 환경요소로서 필요한 것들

 

 

참고

https://doozi0316.tistory.com/entry/1%EC%A3%BC%EC%B0%A8-JVM%EC%9D%80-%EB%AC%B4%EC%97%87%EC%9D%B4%EB%A9%B0-%EC%9E%90%EB%B0%94-%EC%BD%94%EB%93%9C%EB%8A%94-%EC%96%B4%EB%96%BB%EA%B2%8C-%EC%8B%A4%ED%96%89%ED%95%98%EB%8A%94-%EA%B2%83%EC%9D%B8%EA%B0%80

 

'CS' 카테고리의 다른 글

3. JVM 기초 (용어 정리)  (0) 2023.02.11
2. JVM 기초 (구성)  (0) 2023.02.11
8. 기술 외 공통 면접 질문  (0) 2023.01.30
7. 개발 언어(Java 위주)  (1) 2023.01.30
6. 데이터베이스  (1) 2023.01.30

댓글