Java 语言的起源发展与基本概念(JDK,JRE,JVM)

Java语言的起源

源起

Java语言最初是由Sun Microsystems公司(该公司于2009年被Oracle公司收购)开发的一种编程语言。其创造者是詹姆斯·高斯林(James Gosling),他是一位加拿大计算机科学家。其前身名为Oak(橡树),最初的设计目标是用于智能化家电的编程环境,如电视机、电话、闹钟等家用电器的控制和通信。然而,由于这些智能化家电的市场需求并未如预期般高涨,Sun公司决定调整方向,将Oak语言重新开发和改造。

从Oak到Java

随着万维网(WWW)的迅速发展,Sun公司发现了Oak语言在网络应用上的潜力。他们重新开发了Oak语言,并将其改名为Java。Java这个名字来源于太平洋上一个盛产咖啡的岛屿,寓意着这种语言将像咖啡一样受到人们的喜爱和欢迎。

Java的正式发布

1995年,Sun公司正式发布了Java语言。这个被定位于网络应用的程序设计语言迅速吸引了业界的关注。由于其跨平台性、面向对象编程特性、自动垃圾回收机制以及丰富的API库等优点,Java语言迅速成为了软件开发行业中的重要一员。

归属到 Oralce

Java语言不断发展和完善。Sun公司后被Oracle收购, 推出了包括Java SE(标准版)、Java EE(企业版)和Java ME(移动版)在内的完整产品线,为各种应用场景提供了全面的解决方案。此外,Java还在游戏开发、嵌入式系统、桌面应用等领域得到了广泛应用。

Java的运行原理

Java的运行原理主要涉及编译、类加载、字节码执行和垃圾回收等过程。以下是Java代码从编写到运行的详细解释:

一、编写代码

开发者使用文本编辑器或集成开发环境(IDE)编写Java源代码,文件扩展名为".java"。例如,一个简单的Java程序"HelloWorld.java"可能包含以下代码:

复制代码
public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello, World!");
    }
}

二、编译代码

使用Java编译器(javac)将Java源代码编译成字节码。字节码是一种中间表示形式,保存在".class"文件中。编译后的文件为"HelloWorld.class"。

三、类加载

类加载器负责将".class"文件加载到Java虚拟机(JVM)中。Java虚拟机中的类加载器主要有以下几种:

  • Bootstrap Class Loader:加载核心Java类库(如rt.jar)。
  • Extension Class Loader:加载扩展库(如ext目录下的库)。
  • Application Class Loader:加载应用程序的类路径下的类。

加载后的字节码会经过校验器(Bytecode Verifier)的校验,确保字节码的正确性和安全性。校验过程包括:

  • 确保字节码不会违反Java语言规范。
  • 确保方法调用是合法的。
  • 确保类型转换是安全的。

四、字节码执行

JVM的执行引擎负责执行字节码。执行引擎包含解释器和即时编译器(JIT):

  • 解释器(Interpreter):逐行解释执行字节码。解释执行速度较慢,但启动快。
  • 即时编译器(Just-In-Time Compiler, JIT):将热点代码(频繁执行的代码)编译成本地机器码,提高执行速度。

五、垃圾回收

JVM中的垃圾回收器负责自动管理内存。垃圾回收器会在堆(Heap)中查找不再被引用的对象,并释放其占用的内存。垃圾回收算法主要包括:

  • 标记-清除(Mark-Sweep):标记可达对象,然后清除未标记的对象。
  • 复制算法(Copying):将存活的对象复制到新空间,清除旧空间的所有对象。
  • 标记-压缩(Mark-Compact):标记存活对象并压缩,消除碎片。

六、与其他语言交互

Java本地接口(JNI)允许Java与其他编程语言(如C/C++)进行交互。通过JNI,Java程序可以调用本地方法(native methods),实现与底层系统的交互。

七、Java运行的关键特性

  • 跨平台性:Java字节码是平台无关的,JVM在不同平台上提供相同的字节码执行环境。
  • 内存管理:JVM自动管理内存,使用垃圾回收机制提高内存使用效率。
  • 安全性:字节码校验和沙箱机制增强了Java应用程序的安全性。

综上所述,Java的运行过程是一个从源代码编写、编译成字节码、加载到JVM、执行字节码并自动管理内存的完整流程。Java的跨平台性、内存管理和安全性等特性使得Java程序能够在各种环境中高效、稳定地运行。

JRE,JDK和JVM 概念

  • JRE,Java Runtime Environment,Java运行时,是面向Java程序使用者,是Java的运行环境。
  • JDK,Java Development Kit:Java开发工具包,是面向开发人员使用的,提供了Java的开发环境和运行环境
  • JVM,Java Virtual Machine,Java虚拟机,是Java实现跨平台的最核心部分。

JDK包含JRE,JRE包含JVM。

所有的java程序会变编译成.class的类文件,在JVM上执行,但执行.class类文件时需要调用类库lib,lib存在于JRE中。

什么是JVM

JVM,全称Java虚拟机(Java Virtual Machine),是一个能够运行Java字节码的虚拟计算机。它并不是一种具体的硬件设备,而是一种基于计算机的软件系统,能够模拟硬件环境来执行Java程序。

JVM的主要职责包括:

  1. 加载:JVM通过类加载器子系统将Java类的字节码从磁盘加载到内存中。这个过程包括验证字节码的合法性,确保它符合Java语言的规范。

  2. 链接:链接过程将加载的类合并到JVM的运行时环境中。这包括将符号引用转换为直接引用,以便在运行时能够快速地找到和使用这些引用。

  3. 初始化:在初始化阶段,JVM为类的静态变量分配内存,并执行类中的静态代码块。这是类准备使用的最后一步。

  4. 执行:一旦类被加载、链接和初始化,JVM就可以开始执行其中的方法了。Java字节码是由JVM的解释器或即时编译器(JIT)执行的。解释器逐条解释字节码指令并执行它们,而JIT则会将热点代码(即频繁执行的代码)编译成机器码以提高性能。

除了执行Java程序外,JVM还提供了一系列的核心类库,这些类库提供了丰富的功能,如字符串处理、文件操作、网络通信等。这些类库使得Java程序能够轻松地实现各种复杂的功能。

此外,JVM还负责管理内存,包括为对象分配内存和回收不再使用的内存。垃圾回收机制是JVM的一个重要特性,它自动地管理内存,使得Java程序员无需手动释放内存。

JVM的跨平台性是其另一个重要的特性。由于JVM能够模拟硬件环境来执行Java程序,因此Java程序可以在任何安装了JVM的平台上运行,而无需对源代码进行任何修改。这使得Java程序具有极高的可移植性和兼容性。

Java SE、Java EE 和 Java ME

  • Java SE , Java2 Platform Standard Edition, 面向个人PC桌面应用程序开发。这个版本以前称为J2SE。包括:
  1. Java运行环境(Java Runtime Environment, JRE),包含基本类库,Java虚拟机,Applet组件等;
  2. Java开发工具包(Java Development Kit, JDK),是JRE的扩展集,包含Java编译器和调试器等;
  • JAVA EE, Java2平台企业版(Java2 Platform Enterprise Edition),主要面向复杂的企业级应用,基于JAVA SE。这个版本以前称为J2EE。
    Java EE 指定了一套规范,提供 Web 服务、组件模型、管理和通信 API,可以用来实现企业级的面向服务体系结构(service-oriented architecture,SOA)和 Web 2.0 应用程序。
  • JAVA ME , Java2平台微型版(Java2 Platform Micro Edition),主要是面向移动设备、嵌入式设备等的开发,基于Java SE。这个版本以前称为J2ME。

Java 和 Jakarta

一、定义与范畴

  1. Jakarta
    • Jakarta是一个Java生态系统中的命名空间,旨在为Java技术和规范提供一个开放、中立的基础。
    • 它由Java基金会的一个开放源代码项目组成,提供了一系列的规范和参考实现,例如Jakarta EE、Jakarta Persistence、Jakarta JSON、Jakarta Batch等。
  2. Java
    • Java是一门面向对象的编程语言,由Sun Microsystems(后被Oracle收购)开发。
    • 它具有简单性、面向对象、分布式、健壮性、安全性、平台独立与可移植性、多线程、动态性等特点。
    • Java平台包括Java SE(标准版)、Java EE(企业版,现已更名为Jakarta EE)和Java ME(微型版)等多个版本。

二、历史与背景

  1. Jakarta
    • 随着Java技术和规范的不断发展和演变,Java生态系统也在不断变化。为了跟上这种变化,Jakarta项目应运而生。
    • Jakarta项目提供了许多重要的Java技术规范和参考实现,为Java开发人员提供了重要的基础设施和工具。
  2. Java
    • Java语言自20世纪90年代问世以来,经历了多个版本的更新和升级。
    • 它最初是为了解决嵌入式系统上的跨平台问题而设计的,后来逐渐发展成为一种广泛应用于企业级应用开发、Web开发、移动应用开发等领域的编程语言。

三、关键组件与用途

  1. Jakarta
    • Jakarta EE(原Java EE)是企业级Java应用程序的一个规范和平台,由一系列的API和技术规范组成。
    • 它提供了常用的API和技术规范,如Servlet、JPA、JMS、JAX-RS等,帮助Java开发人员构建基于Web的企业级应用程序。
    • 除了Jakarta EE之外,Jakarta还涉及到许多其他的项目和规范,如Jakarta Persistence、Jakarta JSON、Jakarta Batch等。
  2. Java
    • Java语言本身提供了丰富的语法和特性,支持面向对象编程、泛型、异常处理、多线程等概念。
    • Java平台提供了JVM(Java虚拟机)、Java类库、开发工具等关键组件,支持Java应用程序的编译、运行和调试。
    • Java广泛应用于桌面应用开发、Web应用开发、分布式系统开发、嵌入式系统开发等领域。

四、命名空间与包名

  1. Jakarta
    • 在Java生态系统中,Jakarta作为命名空间出现,用于区分不同的Java技术和规范。
    • 例如,在Apache Tomcat 10.0.x版本中,由于Java EE的迁移,javax被替换成了jakarta。
  2. Java
    • Java语言使用javax等命名空间来组织类库和API。
    • 例如,在Java EE时代,javax.servlet、javax.websocket等包名被广泛应用于企业级应用开发。

五、总结

综上所述,Jakarta和Java在定义与范畴、历史与背景、关键组件与用途以及命名空间与包名等方面存在明显的区别。Jakarta是Java生态系统中的一个重要项目,提供了许多重要的Java技术规范和参考实现;而Java则是一门面向对象的编程语言,具有广泛的应用领域和丰富的生态系统



相关推荐
Tanecious.1 小时前
机器视觉--python基础语法
开发语言·python
叠叠乐1 小时前
rust Send Sync 以及对象安全和对象不安全
开发语言·安全·rust
战族狼魂1 小时前
CSGO 皮肤交易平台后端 (Spring Boot) 代码结构与示例
java·spring boot·后端
Tttian6222 小时前
Python办公自动化(3)对Excel的操作
开发语言·python·excel
xyliiiiiL2 小时前
ZGC初步了解
java·jvm·算法
杉之3 小时前
常见前端GET请求以及对应的Spring后端接收接口写法
java·前端·后端·spring·vue
hycccccch3 小时前
Canal+RabbitMQ实现MySQL数据增量同步
java·数据库·后端·rabbitmq
独好紫罗兰3 小时前
洛谷题单2-P5713 【深基3.例5】洛谷团队系统-python-流程图重构
开发语言·python·算法
天天向上杰4 小时前
面基JavaEE银行金融业务逻辑层处理金融数据类型BigDecimal
java·bigdecimal
闪电麦坤954 小时前
C#:base 关键字
开发语言·c#