본문 바로가기
개발일지/WIL

[WIL] 항해99 (9기) - 2주차 회고

by 깸뽀 2022. 10. 2.
728x90

2022.09.29 ~ 2022.10.06

 

1. JVM

JVM은 자바 가상머신(Java Virtual Machine)의 약자이다.

Java는 OS에 종속적이지 않다는 특징을 가지고 있다. OS에 종속받지 않고 실행되기 위해선 OS위에서 Java를 실행시킬 무언가가 필요하다. 그게 바로 JVM이다.

자바 가상 머신으로 자바 바이트코드(.class 파일)를 OS에 특화된 코드로 변환하여 실행한다.

 JVM은 자바 실행 환경 JRE(Java Runtime Environment)에 포함되어 있습니다. 현재 사용하는 컴퓨터의 운영체제에 맞는 자바 실행환경 (JRE)가 설치되어 있다면 자바 가상 머신이 설치되어 있다는 뜻이다.

컴파일 과정
자바 가상 머신으로 자바 바이트코드(.class 파일)를 OS에 특화된 코드로 변환하여 실행한다.

 

 JVM 역할

1. 자바 바이너리코드(.class)를 읽는다

2. 자바 바이너리 코드를 검증한다.

3. 자바 바이너리 코드를 실행한다.

 

 JVM 특징

Java는 어떠한 플랫폼에 영향을 받지 않는다. JVM을 사용하면 하나의 바이트코드(.class)로 모든 플랫폼에서 동작하도록 할 수 있다. Java언으로 작성된 파일(.java)을 컴파일하면 .class 파일이 생성되고 이렇게 생성된 바이트 코드는 각자의 플랫폼에 설치되어 있는 자바 가상머신(JVM)이 운영체제에 맞는 실행 파일로 바꿔준다. 즉 Java는 각자의 플랫폼에 맞게끔 컴파일을 따로따로 해줘야 할 필요가 없다. 하나의 바이트 코드로 JVM이 설치되어 있는 모든 플랫폼에서 동작이 가능하다.

 

 

2. JRE

JRE는 Java Runtime Environment 약자로 자바 런타임 환경이라는 뜻을 갖고 잇다.

JRE는 JVM 이 자바 프로그램을 동작시킬 때 필요한 라이브러리 파일들과 기타 파일들을 가지고 있다. JRE는 JVM의 실행환경을 구현했다고 할 수 있다. JRE는 자바로 "개발(쓰기)은 안되고 실행(읽기)만 된다"라고 생각하면 된다.

출처) https://wikidocs.net/257

 

JRE  작동방법

1) 클래스로더

Java 클래스로더는 Java 프로그램의 실행에 필요한 모든 클래스를 동적으로 로드합니다. Java 클래스는 필요 시에만 메모리에 로드되므로, JRE는 클래스로더를 사용하여 요청 시에 이 프로세스를 자동화합니다.

 

2)바이트코드 검증기

바이트코드 검증기는 인터프리터에 전달되기 전에 Java 코드의 형식과 정확성을 보장합니다. 코드가 시스템 무결성 또는 액세스 권한을 위반하는 경우, 클래스는 손상된 것으로 간주되어 로드되지 않습니다.

 

3) 인터프리터

바이트코드의 로드에 성공한 후, Java 인터프리터는 Java 프로그램이 기본 시스템에서 기본적으로 실행될 수 있도록 해주는 JVM의 인스턴스를 작성합니다.

 

3. JDK

JDK는 자바 개발도구(Java Development Kit)의 약자로, JDK는 JRE + 개발을 위해 필요한 도구(javac, java등)들을 포함한다. JDK안에는 개발 시 필요한 라이브러리들과 javac, javadoc 등의 개발 도구들을 포함되어 있고 개발을 하려면 당연히 실행도 시켜줘야 하기 때문에 JRE (Java Runtime Environment)도 함께 포함되어 있다.

출처) https://choicode.tistory.com/17

JDK 개발 수명 주기

1. 개발자가 java 프로그램을 만들고 저장(build)을 하면 소스코드를 바이트코드로 컴파일을 하게 된다.

2. 컴파일 된 java 프로그램은 JRE가 런타임을 할 수 있도록 도와준다.

3. 실행 된 파일을 ClassLoader를 통해 JVM상으로 올려 놓는다.

 

 


< 느낀점 >

JDK, JRE, JVM을 공부하니 java의 구동원리와 내용을 연결해서 이해할 수 있어서 유익했다.

환경 셋팅할 때 JDK를 설치할때마다 왜 설치하는지, 또 JDK를 설치할때 같이 설치되는 JRE는 무엇인지 궁금했었는데 이렇게 자세하게 공부하면서 정리가 쏙쏙 되었다.

이제부터 Spring에 대해서 본격적으로 공부를 할 텐데 많은 도움이 될 것 같다.

 

 

 

참조

 

 

728x90

댓글