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的主要职责包括:
-
加载:JVM通过类加载器子系统将Java类的字节码从磁盘加载到内存中。这个过程包括验证字节码的合法性,确保它符合Java语言的规范。
-
链接:链接过程将加载的类合并到JVM的运行时环境中。这包括将符号引用转换为直接引用,以便在运行时能够快速地找到和使用这些引用。
-
初始化:在初始化阶段,JVM为类的静态变量分配内存,并执行类中的静态代码块。这是类准备使用的最后一步。
-
执行:一旦类被加载、链接和初始化,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。包括:
- Java运行环境(Java Runtime Environment, JRE),包含基本类库,Java虚拟机,Applet组件等;
- 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
一、定义与范畴
- Jakarta:
- Jakarta是一个Java生态系统中的命名空间,旨在为Java技术和规范提供一个开放、中立的基础。
- 它由Java基金会的一个开放源代码项目组成,提供了一系列的规范和参考实现,例如Jakarta EE、Jakarta Persistence、Jakarta JSON、Jakarta Batch等。
- Java:
- Java是一门面向对象的编程语言,由Sun Microsystems(后被Oracle收购)开发。
- 它具有简单性、面向对象、分布式、健壮性、安全性、平台独立与可移植性、多线程、动态性等特点。
- Java平台包括Java SE(标准版)、Java EE(企业版,现已更名为Jakarta EE)和Java ME(微型版)等多个版本。
二、历史与背景
- Jakarta:
- 随着Java技术和规范的不断发展和演变,Java生态系统也在不断变化。为了跟上这种变化,Jakarta项目应运而生。
- Jakarta项目提供了许多重要的Java技术规范和参考实现,为Java开发人员提供了重要的基础设施和工具。
- Java:
- Java语言自20世纪90年代问世以来,经历了多个版本的更新和升级。
- 它最初是为了解决嵌入式系统上的跨平台问题而设计的,后来逐渐发展成为一种广泛应用于企业级应用开发、Web开发、移动应用开发等领域的编程语言。
三、关键组件与用途
- Jakarta:
- Jakarta EE(原Java EE)是企业级Java应用程序的一个规范和平台,由一系列的API和技术规范组成。
- 它提供了常用的API和技术规范,如Servlet、JPA、JMS、JAX-RS等,帮助Java开发人员构建基于Web的企业级应用程序。
- 除了Jakarta EE之外,Jakarta还涉及到许多其他的项目和规范,如Jakarta Persistence、Jakarta JSON、Jakarta Batch等。
- Java:
- Java语言本身提供了丰富的语法和特性,支持面向对象编程、泛型、异常处理、多线程等概念。
- Java平台提供了JVM(Java虚拟机)、Java类库、开发工具等关键组件,支持Java应用程序的编译、运行和调试。
- Java广泛应用于桌面应用开发、Web应用开发、分布式系统开发、嵌入式系统开发等领域。
四、命名空间与包名
- Jakarta:
- 在Java生态系统中,Jakarta作为命名空间出现,用于区分不同的Java技术和规范。
- 例如,在Apache Tomcat 10.0.x版本中,由于Java EE的迁移,javax被替换成了jakarta。
- Java:
- Java语言使用javax等命名空间来组织类库和API。
- 例如,在Java EE时代,javax.servlet、javax.websocket等包名被广泛应用于企业级应用开发。
五、总结
综上所述,Jakarta和Java在定义与范畴、历史与背景、关键组件与用途以及命名空间与包名等方面存在明显的区别。Jakarta是Java生态系统中的一个重要项目,提供了许多重要的Java技术规范和参考实现;而Java则是一门面向对象的编程语言,具有广泛的应用领域和丰富的生态系统
相关文章:

Java 语言的起源发展与基本概念(JDK,JRE,JVM)
Java语言的起源 源起 Java语言最初是由Sun Microsystems公司(该公司于2009年被Oracle公司收购)开发的一种编程语言。其创造者是詹姆斯高斯林(James Gosling),他是一位加拿大计算机科学家。其前身名为Oak(橡…...

03_变量
变量 var num 10; 变量的重新赋值 var num10; num 20; 变量提升 JavaScript 引擎的工作方式是,先解析代码,获取所有被声明的变量,然后再一行一行地运行。这造成的结果,就是所有的变量的声明语句,都会被提升到代码的…...

[论文阅读-综述]Supervised Speech Separation Based on Deep Learning: An Overview
基于深度学习的监督语音分离:综述 出版:IEEE 核心:使用语音分离将目标语音信号与噪声混合分离的计算 本文用于对该文章的学习,主要是对内容的理解翻译与笔记 1. 语音分离介绍 语音分离的目标:将目标语音与背景干扰分…...

群控系统服务端开发模式-应用开发-邮箱配置功能开发
邮箱配置主要是将管理员数据做归属。具体见下图: 一、创建表 1、语句 CREATE TABLE cluster_control.nc_param_mail (id int(11) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 编号,title varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT…...

【机器学习】——卷积与循环的交响曲:神经网络模型在现代科技中的协奏
🎼个人主页:【Y小夜】 😎作者简介:一位双非学校的大二学生,编程爱好者, 专注于基础和实战分享,欢迎私信咨询! 🎆入门专栏:🎇【MySQL࿰…...

android studio引用so库
在工程中编译好的so库文件将在原始编译工程对应目录下:build/intermediates/cxx/Debug/xxxxxx/obj/ 其目录结构如上所示,包含生成的四个版本,每个文件夹下均包含c/c源码编译成的Android版本的libnavi.so库和提供应用接口的libnavi-lib.so库。…...

2024年信号处理与神经网络应用(SPNNA 2024)
会议官网:www.spnna.org 会议时间:2024年12月13-15日 会议地点:中国武汉...

wxWidgets-ImageView
wxWidgets实现图片浏览、放大缩小、另存为新的图片格式等 #include "wx/wxprec.h"#ifndef WX_PRECOMP#include "wx/wx.h" #endif#include "wx/filename.h" #include "wx/zstream.h"#include "imageviewctrl.h"class MyFrame…...

第1章-JVM和Java体系架构
虚拟机 虚拟机概念 所谓虚拟机(Virtual Machine),就是一台虚拟的计算机。它是一款软件,用来执行一系列虚拟计算机指令。大体上,虚拟机可以分为系统虚拟机和程序虚拟机。 大名鼎鼎的Virtual Box,VMware就属…...

windows 服务器角色
windows 服务器角色 Active Directory Rights Management Services Active Directory RightsManagement Services (AD RS)帮助保护信息,防止未授权使用。AD RMS 将建立用户标识,并为授权用户提供受保护信息的许可证。 ServicesActive Directory 联合身…...

[OpenHarmony5.0][Docker][环境]OpenHarmony5.0 Docker编译环境镜像下载以及使用方式
T. 已测试目录 主机类型主机版本Docker镜像版本结果WSL2Ubuntu22.04Ubuntu20.04PASSWSL2Ubuntu22.04Ubuntu18.04PASS R. 软硬件要求: 编译硬件需求:做多系统测试,磁盘500GB起步(固态)(机械会卡死),内存3…...

C#中判断两个 List<T> 的内容是否相等
ET实现游戏中邮件系统逻辑思路(服务端)_游戏邮件系统设计-CSDN博客 场景:今天遇到一个BUG,在服务器重启的时候(体验服),玩家之前接收的邮件又重新接收了一次,但是两封邮件的ID是不同…...

Linux环境下配置neo4j图数据库
1.下载安装包 openjdk-11.0.1_linux-x64_bin.tar.gz neo4j-community-4.2.19-unix.tar.gz 2.之前配置好的配置文件 neo4j.conf 3.安装 3.1-jdk11的安装(jdk1.8不够用) 解压缩 tar -zxvf openjdk-11.0.1_linux-x64_bin.tar.gz修改系统环境变量 打开pro…...

Windows 11 搭建 Docker 桌面版详细教程
在当今的软件开发与部署领域,Docker 已成为一项极为重要的容器化技术。它能够让开发者轻松地打包应用及其依赖项,实现跨环境的一致性运行,大大提高了开发效率与部署的便捷性。本教程将详细介绍在 Windows 11 操作系统上搭建 Docker 桌面版的具…...

Pytest-Bdd-Playwright 系列教程(13):钩子(hooks)
Pytest-Bdd-Playwright 系列教程(13):钩子(hooks) 前言一、什么是钩子?二、Pytest-Bdd 提供的钩子一览三、钩子用法详解1. pytest_bdd_before_scenario2. pytest_bdd_after_scenario3. pytest_bdd_before_s…...

dns 服务器简单介绍
dns 服务器分类: 根域名服务器顶级域名服务器权威域名服务器本地域名服务器 dns 的查询过程 国内优秀公共域名 腾讯:DNSPod-免费智能DNS解析服务商-电信_网通_教育网,智能DNS-烟台帝思普网络科技有限公司 119.29.29.29 和 182.254.118.118 阿里…...

Neo4j图形数据库-Cypher中常用指令
一、创建与修改 1.1 create 创建图数据库中的节点、关系等元素: CREATE (:Person {name: "Alice", age: 30}) CREATE (p1:Person {name: "Bob"})-[r:KNOWS]->(p2:Person {name: "Charlie"})批量创建元素 CREATE (n1:Node),(n2…...

linux安全管理-防火墙配置
1. 开启系统防火墙 1、检查内容 检查操作系统是否开启防火墙; 2、配置要求 操作系统开启防火墙; 3、配置方法 systemctl status firewalld ##查看系统防火墙运行状态 systemctl start firewalld ##启动防火墙 systemctl restart firewalld ##重启防火墙…...

什么是BIOS
BIOS(Basic Input/Output System,基本输入输出系统)是计算机启动过程中的一个关键组件,主要负责硬件的初始化和系统的引导。以下是关于 BIOS 的一些详细信息: 1. 基本功能 硬件初始化:当计算机启动时&…...

c++视频图像处理
打开视频或摄像头 打开指定视频 /*VideoCapture(const String &filename, apiPreference);filename:读取的视频或者图像序列的名称apiPreference:读取数据时设置的属性*/ VideoCapture video; //定义一个空的视频对象 video.open("H:/BaiduNetdiskDownlo…...

音视频入门基础:MPEG2-TS专题(8)——TS Header中的适配域
注:本文有部分内容引用了维基百科:https://zh.wikipedia.org/wiki/MPEG2-TS 一、引言 当TS Header中的adaptation_field_control属性的值为10或11 时,TS Header包含adaptation field(适配域): 根据《T-RE…...

基于stm32单片机的教室节能系统设计
功能描述 0. STM32F103C8T6单片机为控制核心 1. OLED液晶显示当前年 月 日 时 分 秒 星期 2. 按键可以设置定时时间 3. 按键可以设置用电开关的开启和关闭时间,实现设备的节能 4. 通过红外遥控可以打开关闭空调设备(通过继电器开关闭合模拟&#x…...

mini主机通过内网穿透做成服务器
文章目录 简介1.ubuntu 的ssh server 安装2.ubuntu 的docker 安装3.ubuntu的curl的安装4.ubuntu的frp客户端安装5.ubuntu的docker compose安装6.声明 简介 主要目的 本地设备做成服务器,实现ssh远程登录以及内网穿透设备总成本1千多元(其实部分设备可以…...

智能桥梁安全运行监测系统守护桥梁安全卫士
一、方案背景 桥梁作为交通基础设施中不可或缺的重要组成部分,其安全稳定的运行直接关联到广大人民群众的生命财产安全以及整个社会的稳定与和谐。桥梁不仅是连接两地的通道,更是经济发展和社会进步的重要纽带。为了确保桥梁的安全运行,桥梁安…...

Selenium和Pyppeteer有什么区别?
Selenium和Pyppeteer都是自动化测试工具,它们可以模拟用户在浏览器中的操作,但它们之间存在一些关键的区别: Selenium 跨浏览器支持:Selenium支持多种浏览器,包括Chrome、Firefox、Internet Explorer等,而…...

82从零开始学Java之异常处理机制简介
作者:孙玉昌,昵称【一一哥】,另外【壹壹哥】也是我哦 CSDN博客专家、万粉博主、阿里云专家博主、掘金优质作者 前言 大家可以想一个问题,有没有谁能够做到开发项目时一个错误都不发生?如果谁能够做到这一点,那他可能真的是“天才”!但实际上,任何人都不可能在项目开发…...

Git上传本地项目到远程仓库(gitee/github)
目录 序言一、创建git本地版本库二、连接远程仓库(以gitee为例)三、将项目提交到git(本地)版本库1.由工作区添加到暂存区2.由暂存区添加到版本库 四、将代码由本地仓库上传到 gitee远程仓库1.获取远程库与本地同步2.把当前分支 ma…...

华为仓颉编程环境搭建
1、仓颉介绍 摘自华为官方:仓颉编程语言作为一款面向全场景应用开发的现代编程语言,通过现代语言特性的集成、全方位的编译优化和运行时实现、以及开箱即用的 IDE 工具链支持,为开发者打造友好开发体验和卓越程序性能。 其具体特性表现为&am…...

UE5 Line Trace By Channel(通道线条追踪)节点
在 Unreal Engine 5 (UE5) 中,Line Trace By Channel 是一个常用于进行物理射线检测(raycasting)的节点。它会沿着一条从起点到终点的直线发射一条射线,并检测射线与世界中任何物体的碰撞。这个节点广泛应用于枪械射击、检测物体、…...

DroneCAN 最新开发进展,Andrew在Ardupilot开发者大会2024的演讲
本文是Andrew演讲的中文翻译,你可以直接观看视频了解演讲的全部内容,此演讲视频的中文版本已经发布在Ardupilot社区的Blog板块,你可以在 Arudpilot官网(https://ardupilot.org) 获取该视频: 你也可以直接通过Bilibili链…...