Java技术栈五要素:JDK/JRE/JVM/Tomcat/JAR包的关系详解

在Java生态中,JDK、JRE、JVM、Tomcat、JAR包是开发者和运维人员绕不开的五个核心概念。

🍽️ 1.JDK:编译器+JRE

JDK(Java Development Kit)是Java开发的必备工具包,包含编译器(javac)、运行环境(JRE)及基础类库,为Java程序的开发、编译和运行提供完整支持。

核心组成:

JRE(运行时环境):厨房的基础后厨设备和食材仓库(如刀具、炉灶、调味品)。
开发工具:研发团队的专属工具(如javac编译器、jdb调试器、javadoc文档生成器)。
定位:
开发者需要JDK来编写代码、编译程序、调试和打包。它相当于一个包含研发能力的完整厨房。

关键类比:
JDK = 研发厨房(开发程序+运行程序的基础配置)

🍽️ 2.JRE:运行时环境

JRE(Java Runtime Environment)是Java程序运行所需的环境,包含JVM和核心类库。

核心组成:

JVM(虚拟机):后厨的智能烹饪设备(负责将菜谱转化为实际菜品)。
核心类库:通用食材(如rt.jar中的集合、IO、网络等Java标准库)。
定位:
JRE是运行Java程序的最小环境,适合生产服务器(仅需运行程序,无需开发)。它相当于一个仅有执行和依赖的后厨。

关键类比:
JRE = 基础后厨(含JVM+核心类库,运行程序的基础配置)

🍽️ 3.JVM:虚拟主机

JVM(Java虚拟机)确实可以看作是一台“虚拟主机”。它通过软件模拟了一台完整计算机的功能,包括处理器、内存、寄存器等硬件组件,负责将字节码(.class文件)转化为机器指令并执行。

核心功能:

内存管理:分配堆内存(对象存储)、栈内存(线程执行),并自动回收垃圾(GC)。
执行引擎:通过解释器或即时编译器(JIT)运行字节码。
类加载机制:动态加载JAR包中的类文件(如同根据菜谱从仓库取食材)。
定位:
JVM是Java程序的底层执行环境,所有Java程序(包括Tomcat和JAR包)都必须依赖JVM。它更像是厨房中的智能烹饪设备,负责处理所有菜谱(字节码)的执行。

关键类比:
JVM = 智能烹饪设备(执行菜谱,管理食材)

🍽️ 4.Tomcat:餐厅的服务员与点餐系统

Tomcat是运行在JVM上的Java程序,实现Web容器和Servlet容器,负责接收HTTP请求并调度程序处理。

核心功能:

HTTP服务:监听端口(如8080),解析并接收浏览器的HTTP请求(如同服务员接收点餐)。
Servlet调度:将请求分发给Web应用(如Servlet),管理会话(Session)和线程池。
依赖JVM:Tomcat本身是Java程序,必须运行在JVM之上(依赖JRE或JDK中的JVM)。
定位:
Tomcat是Java Web应用的运行容器,它本身不参与业务逻辑的执行,而是作为中间层调度请求。

关键类比:
Tomcat = 餐厅的服务员与点餐系统(接收请求,调度后厨)

🍽️ 5.JAR包:标准化的菜品/菜谱

JAR包(Java Archive)是Java程序的标准化打包格式,将编译后的类文件、资源文件(如配置、图片)和元数据(MANIFEST.MF)整合为一个文件。

核心类型:

普通JAR:仅包含代码和资源,需Tomcat部署运行。
Spring Boot JAR:内置嵌入式Tomcat(如spring-boot-starter-tomcat),实现“一个JAR启动Web服务”。
定位:
JAR包是Java程序的交付物或模块单元,其运行依赖JVM(通过JRE或JDK),而Tomcat是部署和管理JAR包(或Web应用)的容器。

关键类比:
JAR包 = 标准化的预制菜/菜谱(需后厨设备加工)

📌 关键逻辑链
开发链:开发者使用JDK编写代码(用javac编译为.class),打包为JAR包(用jar命令)。
运行链:服务器安装JRE(或JDK),启动Tomcat(作为Java程序运行在JVM上),部署JAR包(如Web应用),最终由JVM执行字节码。
🛠️ 实际场景:浏览器请求服务器的全过程
以用户通过浏览器访问一个部署在Tomcat上的Web应用为例:
1.顾客点餐:浏览器发送HTTP请求(如GET /api/steak)。
2.服务员接收:Tomcat监听端口,将请求解析为Request对象,并分配线程处理。
3.后厨调度:Tomcat从/webapps目录加载Web应用(JAR包),通过类加载器读取其中的Servlet/JSP。
4.智能设备烹饪:JVM加载JAR包中的字节码,通过JIT编译优化执行,调用Servlet处理请求。
5.上菜:处理结果(如JSON数据)通过Tomcat封装为HTTP响应,返回给浏览器。

⚠️ 常见误区澄清

1.Tomcat是独立于JVM的服务器?
错误!Tomcat本身是Java程序,必须运行在JVM之上。它更像是一个基于JVM的Web服务调度器。

2.JAR包是独立的程序?
JAR包是Java程序的打包形式,但本身不能独立运行。它需要JVM来解析字节码(如同预制菜需要后厨加工)。

3.生产环境需要安装JDK吗?
一般仅需JRE(含JVM),除非需要运行JSP编译(JDK中的javac)或调试功能。

📦 总结

在这里插入图片描述

/Library/Java/JavaVirtualMachines/jdk1.8.0_281.jdk/Contents/Home/bin/java -XX:TieredStopAtLevel=1 -noverify -Dspring.output.ansi.enabled=always -Dfile.encoding=UTF-8 -classpath /Library/Java/JavaVirtualMachines/jdk1.8.0_281.jdk/Contents/Home/jre/lib/charsets.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_281.jdk/Contents/Home/jre/lib/deploy.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_281.jdk/Contents/Home/jre/lib/ext/cldrdata.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_281.jdk/Contents/Home/jre/lib/ext/dnsns.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_281.jdk/Contents/Home/jre/lib/ext/jaccess.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_281.jdk/Contents/Home/jre/lib/ext/jfxrt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_281.jdk/Contents/Home/jre/lib/ext/localedata.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_281.jdk/Contents/Home/jre/lib/ext/nashorn.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_281.jdk/Contents/Home/jre/lib/ext/sunec.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_281.jdk/Contents/Home/jre/lib/ext/sunjce_provider.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_281.jdk/Contents/Home/jre/lib/ext/sunpkcs11.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_281.jdk/Contents/Home/jre/lib/ext/zipfs.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_281.jdk/Contents/Home/jre/lib/javaws.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_281.jdk/Contents/Home/jre/lib/jce.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_281.jdk/Contents/Home/jre/lib/jfr.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_281.jdk/Contents/Home/jre/lib/jfxswt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_281.jdk/Contents/Home/jre/lib/jsse.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_281.jdk/Contents/Home/jre/lib/management-agent.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_281.jdk/Contents/Home/jre/lib/plugin.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_281.jdk/Contents/Home/jre/lib/resources.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_281.jdk/Contents/Home/jre/lib/rt.jar:
08-23
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

守護_99

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值