JVM, JRE, JDK,제이 팍 let's go

김수환·2023년 9월 30일
0

JVM(Java Virtual Machine)

자바로 작성된 프로그램을 실행하기 위한 가상 머신

JVM의 특징

플랫폼 중립성:

JVM은 어떤 운영 체제나 하드웨어에서도 동일한 바이트코드를 실행할 수 있도록 한ㄷ.

바이트코드 실행:

자바 컴파일러(Java Compiler)는 소스 코드를 바이트코드로 컴파일 한다.
(.java -> .class)

JVM은 이 바이트코드를 실행하여 프로그램을 동작시킨다.
자바는 컴파일 한 번으로 여러 플랫폼에서 실행할 수 있다.

메모리 관리:

JVM은 가비지 컬렉션 (Garbage Collection)과 같은 기능을 이용해 더 이상 사용하지 않는 객체를 자동으로 정리하고 메모리 누수를 방지함으로써 자동으로 메모리 관리를 해준다.

성능 최적화:

바이트코드를 실행하는 동안 JIT(Just In Time) 컴파일러에 의해 다양한 최적화 기술을 사용하여 런타임 성능을 향상 시킬 수 있다.

멀티 스레드 지원:

JVM은 쓰레드 풀, 라이브러리(concurrent, Thread), 동기화 등을 통해 멀티 스레드를 지원한다.

WORA (Write Once, Run Anywhere)

C/C++ 의 컴파일 과정

jvm을 통한 Java의 컴파일 과정

서로 다른 운영체제라도 JVM만 설치되어 있다면, 같은 자바 프로그램이 아무런 추가 조치 없이 동작할 수 있다. 따라서 개발자가 한 번만 프로그램을 작성하면, 모든 운영체제에서 사용할 수 있다.


JRE (Java Runtime Environment)

Java 애플리케이션을 실행하기 위한 환경을 제공하는 소프트웨어
Java 애플리케이션을 실행하는 데 필요한 런타임 환경을 제공

JRE는 JDK를 사용하여 작성된 Java 코드를 JVM에서 이를 실행하는 데 필요한 필수 라이브러리와 결합한 후 결과 프로그램을 실행하는 JVM의 인스턴스를 작성한다. JVM은 다수의 운영체제에 사용 가능하며, JRE를 사용하여 작성된 프로그램이 이 모두에서 실행된다.

JRE의 동작 방식

JRE는 JDK와 상호작용하며 사실상 모든 운영체제에서 Java 기반 애플리케이션의 완벽한 실행을 가능하게 하는 지속 가능한 런타임 환경을 구축한다.

클래스로더

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

바이트코드 검증기

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

인터프리터

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

JRE의 구성요소

JVM(Java Virtual Machine):

JVM은 JRE에 포함되어 있다. JVM은 Java 바이트 코드를 기계어 코드로 번역하고, 메모리 관리 및 스레드 관리와 같은 런타임 환경을 제공한다.

Java 클래스 라이브러리

JRE는 Java 애플리케이션에서 사용할 수 있는 표준 Java 클래스 라이브러리를 제공한다.
문자열 처리, 파일 입출력, 네트워킹, 자료 구조 및 다양한 클래스가 포함되어있다. 개발자는 다양한 클래스를 활용하여 애플리케이션을 개발한다.

  • 콜렉션 프레임워크: 애플리케이션 데이터의 저장과 처리를 개선하도록 설계된 인터페이스의 콜렉션으로 구성된 통합 아키텍처

  • 동시성 유틸리티: 멀티 스레딩 유틸리티의 강력한 프레임워크 패키지

  • 환경 설정 API: 동일 시스템에서 다수의 사용자가 자체 애플리케이션 환경 설정 그룹을 정의할 수 있도록 해주는 경량 크로스 플랫폼 지속적 API

  • 로깅: 추가 분석을 위한 로그 보고서(예: 보안 장애, 구성 오류 및 성능 문제)를 생성

  • JAR(Java Archive): 다수의 파일을 JAR 형식으로 번들링하여 파일 크기를 줄일 수 있도록 해주는 플랫폼 독립형 파일 형식.

리소스 및 환경 설정:

JRE는 애플리케이션을 실행하기 위한 환경 설정을 관리한다. 클래스 경로, 시스템 프로퍼티, 환경 변수 및 기타 실행 환경 관련 정보가 포함된다.

JDBC(Java Database Connectivity) API:

원격 관계형 데이터베이스, 플랫 파일 및 스프레드시트에 대한 액세스를 통해 애플리케이션을 작성할 수 있는 개발자용 툴을 제공한다.


JDK(Java Development Kit)

Java 프로그래밍을 위한 개발 환경을 제공하는 소프트웨어 패키지
JDK는 Java 언어로 애플리케이션을 개발, 컴파일하고 실행하기 위한 도구와 라이브러리를 포함하고 있다.

자바 컴파일러:

JDK에는 Java 코드를 바이트 코드로 변환하는 자바 컴파일러가 포함되어 있다.

JRE(Java Runtime Environment):

JDK에는 JRE(Java Runtime Environment)가 포함되어 있다. 따라서 Java 애플리케이션을 개발하는 동안 동일한 환경에서 애플리케이션을 실행하고 테스트할 수 있다.

자바 API 라이브러리:

JDK는 Java 애플리케이션 개발을 위한 표준 API 라이브러리를 제공한다. 이 라이브러리에는 파일 입출력, 네트워킹, 자료 구조, GUI 개발을 위한라이브러리 등 다양한 기능이 포함되어 있다.

개발 도구:

JDK에는 통합 개발 환경 (IDE)에서 사용할 수 있는 디버거, 프로파일러, JavaDoc (문서 생성 도구), 암호화 도구, 테스트 도구 등 Java 개발을 위한 다양한 도구가 포함되어 있다.

실행 파일 생성:

JDK를 사용하여 Java 소스 코드를 컴파일하면 실행 가능한 Java 애플리케이션 또는 JAR 파일을 생성할 수 있다. 이 파일을 다른 사용자에게 배포하거나 실행할 수 있다.


포함관계

profile
hello human

0개의 댓글