[Java] JDK 및 Java 동작원리

한호성·2022년 7월 24일
0

글의 목적

기존의 자바로 개발을 진행하고, IDE를 통해 compile 및 빌드를 자동으로 진행하다보니, 자바가 실제로 어떻게 작동하는지에 지식이 부족했다. 다른 자바 관련 프레임워크를 공부할 때도 빠짐 없이 나오는 요소들 중 하나가 JDK이다 보니, JDK에 대해 알아보고 자바가 어떤식으로 프로그램 실행이 되는지에 대해 알아보자

JDK

JDK(Java Development kit)

Java 환경에서 돌아가는 프로그램을 개발하는데 필요한 툴들을 모아놓은 소프트웨어 패키지이다.

위 사진을 보면 자바와 관련된 JVM,JRE,JDK의 관계를 알 수 있다. 머리에 잘 남겨두고 아래의 내용을 진행해보자.( 가장 적은 범위에서부터 넓어지는 순서로 설명해보자.)

Java Complier

자바 소스코드에서 자바 클래스 파일을 생성시켜주는 역할을 한다.
.java(소스코드) -> Java Complier - > .class(바이트 파일) 변경
자바의 경우 바이너리 파일이 아닌 바이트 파일(JVM)이 읽을 수 있는 파일로 변경한다.

컴파일러는 인간이 사용하는 고레벨 언어(source code) 를 기계가 이해할 수 있는 저레벨 (machine code)로 해석해주는 프로그램이다.

*cf) 빌드과정 : (소스코드(.java) -> compling -> 목적파일(.class) -> linking -> 실행파일 (.JAR))

JVM (Java Virtual Machine)

JVM 컴파일러에 의해 변환된 바이트 파일 (*.class)을 읽고 해석하여 프로그램을 실행시킨다.
JVM의 장점으로

  • 운영체제에 구애받지 않는다.
  • 메모리 관리가 용이하다.
JVM 실행과정

1. Class Loader를 통해 class 파일들을 JVM에 올린다.

2. JVM에 있는 .class 파일들을 (Execution Engine 의 interpreter 와 JIT
complier) 를 통해 해석된다.

3. 해석된 바이트 코드는 Runtime Data Areas에 배치되어 실질적인 수행이 이루어진다.

로드 : 클래스 파일을 가져와서 JVM의 메모리에 로드합니다.
검증 : 자바 언어 명세(Java Language Specification) 및 JVM 명세에 명시된 대로 구성되어 있는지 검사합니다.
준비 : 클래스가 필요로 하는 메모리를 할당합니다. (필드, 메서드, 인터페이스 등등)
분석 : 클래스의 상수 풀 내 모든 심볼릭 레퍼런스를 다이렉트 레퍼런스로 변경합니다.
초기화 : 클래스 변수들을 적절한 값으로 초기화합니다. (static 필드)

JRE(Java Runtime Environment)

JRE는 Java 프로그램 및 응용 프로그램을 실행하는데 필요한 런타임 환경입니다.
위 사진에서 볼 수 있듯이, java 프로그램을 성공적으로 실행하기 위해 JVM +라이브러리 CLASS 들을 포함하고 있다.

*cf) JRE은 JDK의 하위 집합이며, Java 컴파일러, 디버거 등과 같은 개발 도구를 포함하지는 않는다. 즉 자바개발이 아니라 실행만을 원하는 경우 JRE만 설치해서 실행시킬 수 있다.

전체과정

Reference

https://ko.myservername.com/java-components-java-platform
https://kingofbackend.tistory.com/123
https://wikidocs.net/257
https://swdevelopment.tistory.com/122

profile
개발자 지망생입니다.

0개의 댓글