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

Java 생태계 개요

PHPz
풀어 주다: 2024-08-21 06:20:32
원래의
1079명이 탐색했습니다.

목차

  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<🎝>애플리케이션<🎝><🎝><🎝>실행<🎝>을 <🎝><🎝>촉진<🎝>합니다. 🎝><🎝>필요한<🎝>라이브러리<🎝>및<🎝>리소스.<🎝>JRE<🎝><🎝><🎝><🎝>JVM<🎝>가<🎝>모든 것을<🎝>보장합니다<🎝 ><🎝>모든<🎝>플랫폼에서<🎝><🎝>이러한<🎝>작업을<🎝><🎝>수행<🎝><🎝><🎝>해야<🎝>합니다.<🎝>생각<🎝><🎝><🎝> 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<🎝>컴파일러)
    javac<🎝><🎝><🎝><🎝><🎝>Java<🎝>소스<🎝>코드<🎝>(.java<🎝>파일)<🎝>를<🎝>로<🎝>변환하는 데<🎝>사용합니다. >바이트코드<🎝>(.class<🎝>파일).<🎝>이<🎝>바이트코드<🎝>는<🎝>그런 다음 <🎝><🎝>Java<🎝>Virtual에 의해<🎝>실행됩니다. <🎝>머신<🎝>(JVM).

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

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

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

  • javadoc<🎝>(Java<🎝>문서<🎝>생성기)
    javadoc<🎝><🎝>Java<🎝>소스<🎝>코드에서<🎝><🎝><🎝>특수<🎝>/**<🎝를 사용하여<🎝>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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:dev.to
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿