Java 생태계는 Java 프로그래밍 언어를 둘러싸고 지원하는 광범위한 도구, 기술, 라이브러리 및 프레임워크 세트입니다. 여기에는 Java 애플리케이션을 개발, 배포 및 관리하는 데 필요한 모든 것이 포함됩니다. JDK, JRE, JVM을 중심으로 진행됩니다
JVM은 컴퓨터에서 Java 프로그램 및 Java 바이트코드로 컴파일된 기타 언어를 실행할 수 있게 해주는 번역기처럼 작동합니다. 이는 코드를 컴퓨터 하드웨어가 이해하고 실행할 수 있는 것으로 변환합니다.
로드 중
.class 파일을 메모리에 로드합니다. 실행할 클래스 파일(Java 바이트코드)을 찾아 로드하고 연결합니다.
링크
초기화
초기화는 JVM이 사용할 클래스나 인터페이스를 준비하는 마지막 단계입니다. 이 단계는 클래스가 메모리에 로드되고 링크된 후에 발생합니다.
방법 영역
메소드 영역 메소드, 변수, 런타임 상수 풀, 메소드 코드 등 클래스 수준의 데이터를 저장합니다.
public class Person { private String name; public void setName(String name) { this.name = name; } }
Person 클래스를 정의하면 메소드 영역에는 해당 메소드(setName) 및 필드(name)를 포함하여 Person 클래스의 구조와 메소드 이름 및 상수 값과 같은 참조가 포함된 런타임 상수 풀이 저장됩니다.
힙
힙은 런타임 메모리 개체가 할당되는 곳입니다. 힙은 모든 스레드에서 공유되며 가비지 수집 프로세스가 발생하는 곳입니다.
Person p = new Person();
새 Person 객체를 생성하면 힙에 할당됩니다.
스택 영역
스택 영역은 지역 변수, 피연산자 스택 및 실행 중인 클래스의 런타임 상수 풀에 대한 참조를 포함하는 프레임을 저장합니다. 각 스레드에는 자체 스택이 있습니다.
public void someMethod() { int a = 10; int b = 20; int sum = a + b; }
someMethod가 호출될 때마다 새 프레임이 스택 영역으로 푸시됩니다. 이 프레임에는 지역 변수(a, b 및 sum), 중간 계산을 위한 피연산자 스택, 런타임 상수 풀의 메서드 클래스에 대한 참조가 포함됩니다.
프로그램카운터(PC)등록
PC에는 현재 실행 중인 JVM 명령어의 주소가 포함되어 있습니다. 각 스레드에는 자체 PC 레지스터가 있습니다.
네이티브 메서드 스택
Java 스택과 유사하지만 기본 메소드에 사용됩니다.
통역
인터프리터는 Java 바이트코드를 읽고 이를 한 줄씩 실행하여 각 바이트코드 명령어를 CPU에서 실행할 수 있는 일련의 기계 수준 명령어로 변환합니다.
JIT(Just-In-Time) 컴파일러
성능을 향상시키기 위해 런타임 시 바이트코드를 기본 기계어 코드로 변환합니다.
가비지 컬렉터
가비지 컬렉터는 JVM의 메모리를 자동으로 관리하는 역할을 합니다. 더 이상 사용되지 않는 메모리를 식별하고 할당을 취소하여 새로운 객체에 사용할 수 있도록 비워줍니다.
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주요구성 요소
실행작업
JRE는 JVM을제공하고Java애플리케이션실행을 촉진합니다. 🎝>필요한라이브러리및리소스.JREJVM가모든 것을보장합니다모든플랫폼에서이러한작업을수행해야합니다.생각 JRE는 무거운JVM을포함하는완전한패키지 리프팅및기타구성 요소지원Java응용 프로그램실행
수업도서관
JRE에는 표준Java클래스라이브러리세트가 포함되어재사용 가능한코드를 제공합니다. 공통작업 수행예:데이터구조,I/O,네트워킹,동시성 그리고더 많은 것
Java네이티브인터페이스(JNI)
JNI는Java애플리케이션이네이티브코드작성언어와상호하도록허용합니다. 🎝>C또는C++.이기능은필수통합플랫폼별기능또는 기존네이티브라이브러리 사용
보안관리자
보안관리자는Java응용 프로그램에 대해보안정책을제한실행합니다. 파일액세스,네트워크연결그리고 실행잠재적으로안전하지 않은코드
JDK는 개발자가작성하고컴파일하고디버그할 수 있는도구입니다. Java응용 프로그램을 실행JRE의 상위 집합이며추가포함 Java개발을 위한 도구
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문서를 생성합니다. >*/댓글알려진문서댓글
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 (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 중국어 웹사이트의 기타 관련 기사를 참조하세요!