뜌릅
📌 JDK와 JRE의 차이점은 무엇입니까? 본문
https://careerly.co.kr/comments/83898
조서희 / 주니어 자바 개발자를 위한 100가지 질문 1 | 커리어리
"주니어 자바 개발자를 위한 100가지 질문" 1편입니다. 주니어 자바 개발자를 위한 100가지 질문 (2)...
careerly.co.kr
오늘부터 Careerly에 올라왔었던, 질문 100가지를 작성해보기로 하였다.
JVM이란
JVM은 Java Virtual Machine으로 자바 가상 머신의 줄임말입니다. JVM은 자바 어플리케이션을 바이트코드로 변환하고, OS에 상관없이 이식하기 쉽게, 바이트코드를 실행할 수 있게 합니다.
다시 말하면, 이 바이트코드들은 각 운영체제 맞는 실행코드로 변환되는 것이 아닌, .class라는 확장자를 가진 파일로 변환이 됩니다. 변환된 .class 파일은 JVM 위에서 작동이 되는 것이고요. .class파일의 경우 jdk의 javac(컴파일러)에 의해 생성됩니다.
그렇다면 JVM의 구성요소는 어떻게 되어있을까?
Class Loader
JVM내로 .class파일을 로드하고, 링크를 통해 배치하는 작업을 수행하는 모듈이다. Runtime 시점에 클래스를 로딩하게 해 주며 클래스의 인스턴스를 생성하면 클래스 로더를 통해 메모리에 로드하게 된다.
Execution Engine
로드된 클래스의 바이트 코드를 실행하는 런타임 모듈이 바로 실행 엔진이다. 인터프리터 방식과 JIT Compiler 방식을 사용하게 된다. 클래스 로더를 통해 JVM내의 Runtime Data Areas에 배치된 바이트코드는 실행 엔진에 의해 실행된다.
Interpreter
인터프리터는 프로그래밍 언어의 소스코드를 바로 실행하는 프로그램을 말한다. 원시 코드를 기계어로 번역하는 컴파일러와 대비된다. 자바는 인터프리터 방식을 사용하여 자바 바이트코드를 명령어 단위로 읽어서 실행한다.(실제 소스코드가 아닌 컴파일된 바이트코드이다.) 한줄식 실행하므로 수행속도가 느려진다.
Jit Compiler(Just in time compiler)
인터프리터 방식의 단점을 보완하기 위해 JIT 컴파일러가 도입되었다. 기존의 바이트 코드를 컴파일하여 Native Code로 만들어서 사용한다. 좀더 최적화 과정을 거치는 것이다. 하지만 1번만 실행하고 빌드파일을 버릴것이라면 인터프리터 방식이 효율적이다.
Garbage Collector
가비지 컬렉터는 유효하지 않은 메모리인 가비지를 정리해주는 역할을 한다. 즉 Garbage Collection를 담당한다.
RunTime Data Area
JVM이 프로그램을 수행하기 위해 OS로부터 별도로 할당받은 메모리 공간을 말한다. RunTime Data Area는 크게 5가지 영역으로 나눌 수 있다.
1. PC Register (레지스터는 Application이 아닌 OS가 할당하는것, 아마도 가상의 Register일 것이다.)
2. JVM Stack
3. Native Method Stack (자바외의 코드로 작성된 것들.)
4. Method Area
5. Heap
JRE란
아래의 그림과 같이 위의 JVM과 실행하기 위한 일부 개발 도구들을 갖고있는 녀석입니다.
좀더 풀어보자면, JRE는 JAVA RunTime Enviroment로 말 그대로, .class 확장자를 가진 클래스 파일이 작동할 수 있도록 환경을 제공해 줍니다.
JDK란
Java Development Kit로 말 그대로 자바 개발 키트이다. JDK는 자바 애플리케이션을 개발하기 위한 환경을 지원하며, JRE을 포함할 뿐 아니라, 컴파일러(Javac), javadoc, jar등 개발에 유용한 도구들을 포함하고 있다. JDK가 있어야 자바 프로그램을 개발 할 수 있다.
저의 경우는 실제 프로젝트에서는 Corretto-17의 JDK을 사용하고 있습니다.
궁금한점
이런거 알아서 어디에 쓸 수 있는지는 아직 모르겠다. ㅠㅠ 내 실력이 아직 부족하다는 것이겠지....
출처
https://yozm.wishket.com/magazine/detail/1979/
초보 Spring(Java) 개발자를 위한 완전 기초 지식(이론편) | 요즘IT
모든 프로그램에는 시작과 끝이 있습니다. 개발자가 코드를 작성하고 실행하면 JVM에서 프로그램이 실행된 후 종료됩니다. 이때, JVM 상에서 어떤 식으로 동작하며 개발자가 작성한 코드는 어떤
yozm.wishket.com
https://tecoble.techcourse.co.kr/post/2021-07-12-jvm-jre-jdk/
JVM에 관하여 - Part 1, JVM, JRE, JDK
자바로 작성된 코드는 어떻게 돌아가는 걸까? 해당 물음에 답을 찾기 위한 JVM 시리즈 1편, JVM, JRE, JDK에 관한 글입니다. 이번 글에서는 배포 환경 혹은 개발 환경을 세팅하면서 설치를 하였던 JRE
tecoble.techcourse.co.kr
https://code-lab1.tistory.com/92
[JAVA] JVM(Java Virtual Machine)이란?
JVM(Java Virtual Machine)이란? JVM은 Java Virtual Machine, 즉 자바 가상 머신의 약자를 따서 줄여 부르는 용어이다. JVM은 OS와 Java 애플리케이션 사이의 중개자 역할을 한다. JVM은 자바 바이트코드를 실행할
code-lab1.tistory.com
https://code-lab1.tistory.com/253
[JAVA] JRE 와 JDK의 차이? Java 8, 11, 17 에 대하여
JRE, JDK란? 처음 Java를 설치하려고 보니 JRE, JDK 등이 존재하는 것을 확인할 수 있다. 둘의 차이는 무엇일까? 참고) [JAVA] 자바(JAVA)란? 자바의 특징 자바(JAVA)란? 자바는 C언어에 객체 지향적 기능을
code-lab1.tistory.com
'SPRING > 주니어 자바 개발자를 위한 100가지 질문' 카테고리의 다른 글
📌 두 객체가 동일한 hashCode를 가지면 Equals()가 참이어야 합니다, 그렇죠? (Kotlin) (0) | 2023.06.25 |
---|---|
📌 == 와 equals의 차이점은 무엇입니까? (0) | 2023.06.22 |