在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)或调试功能。
总结

到此这篇关于java技术栈五要素之jdk/jre/jvm/tomcat/jar包的关系的文章就介绍到这了,更多相关jdk/jre/jvm/tomcat/jar包的关系内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论