>Java >java지도 시간 >Java 생태계 개요

Java 생태계 개요

PHPz
PHPz원래의
2024-08-21 06:20:321087검색

목차

  1. 소개
  2. JVM(자바 가상 머신)
    • JVM의 아키텍처
      • 클래스 로더
      • JVM 메모리
        • 방법영역
        • 스택 영역
        • 프로그램카운터(PC)등록
        • 네이티브 메소드 스택
      • 실행 엔진
        • 통역
        • JIT(Just-In-Time) 컴파일러
        • 가비지 컬렉터
  3. JRE(자바 런타임 환경)
    • JRE의 주요 구성요소
      • 실행 업무
      • 수업 라이브러리
      • JNI(자바 네이티브 인터페이스)
      • 보안관리자
  4. JDK(자바 개발 키트)
    • JDK의 핵심 기능
      • javac(Java 컴파일러)
      • java(Java 애플리케이션 실행기)
      • jdb(자바 디버거)
      • jar(Java 아카이브 도구)
      • javadoc(Java 문서 생성기)
  5. JVM vs JRE vs JDK: 차이점은 무엇인가요?
  6. JDK, JRE, JVM 계층

소개

Java 생태계는 Java 프로그래밍 언어를 둘러싸고 지원하는 광범위한 도구, 기술, 라이브러리 및 프레임워크 세트입니다. 여기에는 Java 애플리케이션을 개발, 배포 및 관리하는 데 필요한 모든 것이 포함됩니다. JDK, JRE, JVM을 중심으로 진행됩니다

JVM(Java 개발 키트)

JVM은 컴퓨터에서 Java 프로그램 및 Java 바이트코드로 컴파일된 기타 언어를 실행할 수 있게 해주는 번역기처럼 작동합니다. 이는 코드를 컴퓨터 하드웨어가 이해하고 실행할 수 있는 것으로 변환합니다.

JVM의 아키텍처

Java Ecosystem Overview

클래스 로더

  1. 로드 중
    .class 파일을 메모리에 로드합니다. 실행할 클래스 파일(Java 바이트코드)을 찾아 로드하고 연결합니다.

  2. 링크

    • 검증: 바이트코드를 검증합니다.
    • 준비: 정적 변수에 메모리를 할당하고 메모리를 기본값으로 초기화합니다.
    • 해결: 직접 참조에 대한 기호 참조를 해결합니다.
  3. 초기화
    초기화는 JVM이 사용할 클래스나 인터페이스를 준비하는 마지막 단계입니다. 이 단계는 클래스가 메모리에 로드되고 링크된 후에 발생합니다.

JVM 메모리

  1. 방법 영역
    메소드 영역 메소드, 변수, 런타임 상수 풀, 메소드 코드 등 클래스 수준의 데이터를 저장합니다.

    public class Person {
        private String name;
    
        public void setName(String name) {
            this.name = name;
        }
    }
    

    Person 클래스를 정의하면 메소드 영역에는 해당 메소드(setName) 및 필드(name)를 포함하여 Person 클래스의 구조와 메소드 이름 및 상수 값과 같은 참조가 포함된 런타임 상수 풀이 저장됩니다.


  2. 힙은 런타임 메모리 개체가 할당되는 곳입니다. 힙은 모든 스레드에서 공유되며 가비지 수집 프로세스가 발생하는 곳입니다.

    Person p = new Person();
    

    새 Person 객체를 생성하면 힙에 할당됩니다.

  3. 스택 영역
    스택 영역은 지역 변수, 피연산자 스택 및 실행 중인 클래스의 런타임 상수 풀에 대한 참조를 포함하는 프레임을 저장합니다. 각 스레드에는 자체 스택이 있습니다.

    public void someMethod() {
        int a = 10;
        int b = 20;
        int sum = a + b;
    }
    

    someMethod가 호출될 때마다 새 프레임이 스택 영역으로 푸시됩니다. 이 프레임에는 지역 변수(a, b 및 sum), 중간 계산을 위한 피연산자 스택, 런타임 상수 풀의 메서드 클래스에 대한 참조가 포함됩니다.

  4. 프로그램카운터(PC)등록
    PC에는 현재 실행 중인 JVM 명령어의 주소가 포함되어 있습니다. 각 스레드에는 자체 PC 레지스터가 있습니다.

  5. 네이티브 메서드 스택
    Java 스택과 유사하지만 기본 메소드에 사용됩니다.

실행 엔진

  1. 통역
    인터프리터는 Java 바이트코드를 읽고 이를 한 줄씩 실행하여 각 바이트코드 명령어를 CPU에서 실행할 수 있는 일련의 기계 수준 명령어로 변환합니다.

  2. JIT(Just-In-Time) 컴파일러
    성능을 향상시키기 위해 런타임 시 바이트코드를 기본 기계어 코드로 변환합니다.

  3. 가비지 컬렉터
    가비지 컬렉터는 JVM의 메모리를 자동으로 관리하는 역할을 합니다. 더 이상 사용되지 않는 메모리를 식별하고 할당을 취소하여 새로운 객체에 사용할 수 있도록 비워줍니다.

JRE

JRE는 Java 애플리케이션을 실행하는 데 필요한 환경을 제공하는 소프트웨어 패키지입니다. 이는 시스템에서 Java 바이트코드를 실행하도록 설계되어 Java의 "WORA(Write Once, Run Anywhere)" 원칙의 필수 부분입니다.

public class Person {
    private String name;

    public void setName(String name) {
        this.name = name;
    }
}
Person p = new Person();
public void someMethod() {
    int a = 10;
    int b = 20;
    int sum = a + b;
}
JDK (Java Development Kit)
│
├── JRE (Java Runtime Environment)
│   │
│   ├── JVM (Java Virtual Machine)
│   │   ├── Class Loader
│   │   ├── Bytecode Verifier
│   │   ├── Execution Engine
│   │   │   ├── Interpreter
│   │   │   ├── Just-In-Time (JIT) Compiler
│   │   │   └── Garbage Collector
│   │   └── Runtime Libraries (core libraries like java.lang, java.util, etc.)
│   │
│   └── Java APIs (Core libraries and additional libraries)
│
├── Development Tools (like javac, jdb, jar, javadoc, etc.)
└── Documentation (API docs, guides)
JRE주요구성 요소

  1. 실행작업
    JRE는 JVM을제공하고Java애플리케이션실행을 촉진합니다. 🎝>필요한라이브러리및리소스.JREJVM가모든 것을보장합니다모든플랫폼에서이러한작업을수행해야합니다.생각 JRE는 무거운JVM을포함하는완전한패키지 리프팅및기타구성 요소지원Java응용 프로그램실행

  2. 수업도서관
    JRE에는 표준Java클래스라이브러리세트가 포함되어재사용 가능한코드를 제공합니다. 공통작업 수행예:데이터구조,I/O,네트워킹,동시성 그리고더 많은 것

  3. Java네이티브인터페이스(JNI)
    JNI는Java애플리케이션이네이티브코드작성언어와상호하도록허용합니다. 🎝>C또는C++.이기능은필수통합플랫폼별기능또는 기존네이티브라이브러리 사용

  4. 보안관리자
    보안관리자는Java응용 프로그램에 대해보안정책을제한실행합니다. 파일액세스,네트워크연결그리고 실행잠재적으로안전하지 않은코드

JDK(Java개발키트)

JDK는 개발자가작성하고컴파일하고디버그할 수 있는도구입니다. Java응용 프로그램을 실행JRE의 상위 집합이며추가포함 Java개발을 위한 도구

JDK의 핵심기능

  • javac(Java컴파일러)
    javacJava소스코드(.java파일)를로변환하는 데사용합니다. >바이트코드(.class파일).이바이트코드는그런 다음 JavaVirtual에 의해실행됩니다. 머신(JVM).

  • java(Java애플리케이션런처)
    java명령은Java응용 프로그램을 실행필요한클래스파일로드합니다. 바이트코드를 해석하고애플리케이션을시작합니다.

  • jdb(Java디버거)
    jdb는Java프로그램을 위한명령줄디버거입니다.이를 통해런타임에검사및디버그Java애플리케이션을

  • jar(Java아카이브도구)
    jar도구패키지여러파일을단일아카이브파일로일반적으로 .jar확장자.이JAR파일은Java애플리케이션을 배포하고사용됩니다. 도서관.

  • javadoc(Java문서생성기)
    javadocJava소스코드에서특수/**HTML문서를 생성합니다. >*/댓글알려진문서댓글

JVM vs JVE vs JDK, what's the difference?

Feature/Aspect JVM JRE JDK
Purpose Executes Java bytecode Provides the environment to run Java applications Provides tools to develop, compile, debug, and run Java applications
Includes JVM itself, which includes class loader, bytecode verifier, and execution engine JVM + Core libraries (like java.lang, java.util, etc.), and other runtime components JRE + Development tools (like javac, jdb, jar, etc.), documentation
Components - Class Loader
- Bytecode Verifier
- Execution Engine (Interpreter, JIT)
- JVM
- Core Java libraries
- Java Plug-in
- Java Web Start
- JRE
- Java Compiler (javac)
- JAR Tool (jar)
- Debugger (jdb)
- Documentation Generator (javadoc)
- Other development tools
Main Functionality Executes Java bytecode, enabling platform independence Provides the minimum requirements to run Java applications Allows developers to write, compile, and debug Java code
Who Uses It? End-users running Java applications End-users running Java applications Java developers writing and compiling Java applications
Installation Size Smallest Larger than JVM but smaller than JDK Largest (includes JRE and development tools)
Developer Tools No No Yes (includes compiler, debugger, profiler, etc.)
Required to Run Java Programs Yes Yes No (but needed to create Java programs)
Platform Independence Provides platform independence by abstracting the underlying hardware Yes, because it includes the JVM Yes, it includes everything from JRE
Examples of Usage - Running any Java application (e.g., desktop applications, servers) - Running Java applications in production or end-user environments - Writing and compiling Java code
- Packaging applications
- Debugging
Availability Part of JRE and JDK Standalone or part of JDK Standalone package

JDK, JRE, JVM hierarchy

JDK (Java Development Kit)
│
├── JRE (Java Runtime Environment)
│   │
│   ├── JVM (Java Virtual Machine)
│   │   ├── Class Loader
│   │   ├── Bytecode Verifier
│   │   ├── Execution Engine
│   │   │   ├── Interpreter
│   │   │   ├── Just-In-Time (JIT) Compiler
│   │   │   └── Garbage Collector
│   │   └── Runtime Libraries (core libraries like java.lang, java.util, etc.)
│   │
│   └── Java APIs (Core libraries and additional libraries)
│
├── Development Tools (like javac, jdb, jar, javadoc, etc.)
└── Documentation (API docs, guides)

위 내용은 Java 생태계 개요의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.