首页 > Java > java教程 > 正文

Java 生态系统概述

PHPz
发布: 2024-08-21 06:20:32
原创
1000 人浏览过

目录

  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中文网其他相关文章!

来源:dev.to
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!