首页 >Java >java教程 >Java 生态系统概述

Java 生态系统概述

PHPz
PHPz原创
2024-08-21 06:20:321054浏览

目录

  1. 简介
  2. JVM(Java 虚拟机)
    • JVM 的架构
      • 类加载器
      • JVM内存
        • 方法区
        • 堆栈区
        • 程序计数器(PC)寄存器
        • 原生方法堆栈
      • 执行引擎
        • 口译员
        • 即时 (JIT) 编译器
        • 垃圾收集器
  3. JRE(Java 运行时环境)
    • JRE 的关键组件
      • 执行任务
      • 类库
      • Java 本机接口 (JNI)
      • 安全经理
  4. JDK(Java 开发工具包)
    • JDK的核心特性
      • javac(Java 编译器)
      • java(Java 应用程序启动器)
      • jdb(Java 调试器)
      • jar(Java 归档工具)
      • javadoc(Java 文档生成器)
  5. JVM、JRE 与 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时,方法区存储Person类的结构,包括它的方法(setName)和字段(name),以及包含方法名称和常量值等引用的运行时常量池。


  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) 编译器
    在运行时将字节码转换为本机机器代码以提高性能。

  3. 垃圾收集器
    垃圾收集器负责自动管理 JVM 中的内存。它识别并释放不再使用的内存,将其释放以用于新对象。

JRE

JRE是一个软件包,提供运行Java应用程序所需的环境。它被设计为在机器上执行 Java 字节码,使其成为 Java 的“一次编写,随处运行”(WORA)原则的重要组成部分。

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虚拟执行 机器(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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn