杰瑞科技汇

Java虚拟机与Tomcat如何协同工作?

  • Java虚拟机 是“发动机”,它是一个通用的、强大的运行环境,负责执行Java字节码(.class文件),它不关心代码具体是用来做什么的,无论是桌面应用、手机App还是Web应用,只要有Java字节码,JVM就能运行它。
  • Tomcat 是“汽车”,它是一个基于JVM构建的、专门用于运行Web应用的软件,它利用JVM这个“发动机”来驱动自己,并提供了运行Web应用所需的各种功能,如接收HTTP请求、处理Servlet、管理会话等。

Java虚拟机

是什么?

JVM是Java虚拟机的缩写,它是一个抽象的、虚拟的计算机,通过在实际的计算机上仿真模拟各种计算机功能来实现,JVM是Java平台无关性的基石。

核心功能

JVM的核心任务是执行Java字节码,它主要包含三个部分:

  • 类加载器:负责加载.class文件(字节码文件)到JVM内存中。
  • 运行时数据区:这是JVM内存管理的核心区域,包括:
    • :存放对象实例和数组,是垃圾收集的主要区域。
    • :每个线程都有一个私有的Java虚拟机栈,存放方法调用的状态(局部变量、操作数栈、方法出口等)。
    • 方法区:存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码缓存等数据。
    • 程序计数器:记录当前线程所执行的字节码行号。
  • 执行引擎:负责执行字节码,它包含:
    • 解释器:逐行解释执行字节码。
    • 即时编译器:将热点代码(频繁执行的代码)编译成与本地平台相关的机器码,并进行优化,大幅提升执行效率。

关键特性

  • 平台无关性:“一次编写,到处运行”(Write Once, Run Anywhere),Java代码被编译成与平台无关的字节码,任何安装了JVM的操作系统都可以运行这些字节码。
  • 自动内存管理:通过垃圾回收器自动管理内存,开发者无需手动分配和释放内存,大大减少了内存泄漏和指针错误的风险。
  • 安全性:JVM通过字节码校验器、安全管理器等机制,确保Java代码不会对本地系统造成破坏。

JVM与Java的关系

  • JDK (Java Development Kit):是Java开发工具包,包含了编译器、调试器、文档工具等,以及JRE
  • JRE (Java Runtime Environment):是Java运行时环境,包含了JVM和Java的核心类库。
  • JVM:是JRE的核心,是实际运行Java代码的环境。

JVM是一个通用的、底层的运行时环境,它不与任何特定类型的应用绑定,它的职责是安全、高效地执行Java字节码。


Tomcat

是什么?

Tomcat是一个开源的、轻量级的Web应用服务器,也常被称为“Servlet容器”或“Web容器”,它由Apache软件基金会维护,是Java Servlet和JavaServer Pages(JSP)技术最流行和最标准的实现。

核心功能

Tomcat的核心功能是处理和响应来自客户端(通常是浏览器)的HTTP请求,它提供了运行Java Web应用所需的标准环境。

  • Web服务器功能:能够接收HTTP请求,并返回HTTP响应,它本身也具备一定的静态资源(如HTML、CSS、图片)处理能力。
  • Servlet容器:这是Tomcat最核心的角色,它负责管理和运行Servlet,Servlet是Java EE中用于处理客户端请求和生成动态响应的规范。
  • JSP容器:支持JSP技术,能够将JSP页面编译成Servlet来执行。
  • 管理功能:提供管理后台(如Manager App),用于部署、启动、停止和监控Web应用。
  • 连接器:通过Connector组件(如传统的BIO Connector、高效的NIO Connector)监听特定端口,接收网络请求。

关键特性

  • 轻量级:与重量级的Web应用服务器(如WebLogic、WebSphere)相比,Tomcat占用更少的系统资源,启动速度更快,非常适合中小型应用和开发测试环境。
  • 开源免费:遵循Apache 2.0许可证,可以免费使用和修改。
  • 遵循标准:完全实现了Java EE中的Servlet、JSP、WebSocket等核心规范。
  • 可扩展:可以通过配置文件、插件等方式进行高度定制和扩展。

Tomcat与Java EE的关系

Tomcat是一个Web服务器,但它不是一个完整的Java EE应用服务器,Java EE是一个非常庞大的规范集,包含了许多企业级技术,如EJB(企业JavaBean)、JMS(Java消息服务)、JTA(Java事务API)等。

  • Tomcat:只实现了Java EE规范中的Web层技术(Servlet, JSP, WebSocket),它被称为“Web容器”。
  • 完整的Java EE应用服务器(如WildFly, WebLogic):不仅实现了Web层,还实现了EJB、JMS等业务层和持久层服务,功能更强大,也更复杂。

Tomcat是一个上层的、专门为Java Web应用设计的运行环境,它依赖于JVM来运行,并提供了Web服务、Servlet管理等高级功能。


关系与协作

现在我们来清晰地阐述它们之间的层级关系和协作方式

  1. 依赖关系:Tomcat必须运行在JVM之上,没有JVM,Tomcat无法执行其内部的Java代码(包括Tomcat自身的代码和你部署的Web应用的代码),你可以将Tomcat看作一个“超级Java程序”。

  2. 层级关系

    +-----------------------+  (操作系统,如Linux, Windows)
    |      操作系统         |
    +-----------------------+
    |      JVM (Java虚拟机) |  <-- 核心运行引擎,负责执行字节码
    |   - 垃圾回收器        |
    |   - JIT编译器         |
    |   - 内存管理          |
    +-----------------------+
    |   Tomcat (Web容器)    |  <-- 基于JVM构建,提供Web服务功能
    |   - Servlet引擎       |
    |   - HTTP连接器        |
    |   - JSP引擎           |
    +-----------------------+
    |     你的Web应用       |  <-- 你的业务代码(Servlet, JSP等)
    |   - .class 文件       |
    +-----------------------+
    • 最底层操作系统
    • JVM运行在操作系统之上,为Java程序提供运行时环境。
    • Tomcat是一个Java程序,它在启动时会创建一个JVM实例来运行自己。
    • 你的Web应用(由Servlet、JSP等构成)被部署在Tomcat中,其编译后的.class文件同样由Tomcat所依赖的JVM来加载和执行。
  3. 工作流程示例

    • 用户在浏览器中输入 http://localhost:8080/myapp/index.jsp
    • Tomcat的HTTP连接器(运行在JVM中)接收到这个HTTP请求。
    • Tomcat(作为Web容器)发现请求的是一个JSP文件。
    • Tomcat调用其内置的JSP引擎,将index.jsp编译成一个Servlet的.java文件,然后再编译成.class文件。
    • 这个新生成的.class文件被JVM加载到内存中。
    • JVM执行这个Servlet的字节码,处理业务逻辑(比如查询数据库)。
    • Servlet生成动态的HTML内容。
    • Tomcat将HTML内容封装成HTTP响应,通过连接器发送回用户的浏览器。

总结对比

特性 Java虚拟机 Tomcat
角色定位 通用运行时引擎 Web应用服务器 / Servlet容器
功能范围 底层、通用:执行任何Java字节码,管理内存,保证安全和跨平台。 上层、专用:处理HTTP请求,运行Servlet/JSP,管理Web应用。
依赖关系 独立运行,是Java程序的基础。 完全依赖JVM,必须运行在JVM之上。
解决的问题 如何让Java代码在任何平台上运行?如何管理内存? 如何让Java程序接收和响应Web请求?如何运行Web应用?
类比 汽车的发动机 一辆完整的汽车
与Java EE的关系 提供Java语言运行的基础。 实现了Java EE的Web层规范,不是完整的Java EE服务器。

JVM是舞台,Tomcat是舞台上的演员(之一),而你的Web应用则是演员要表演的剧本,没有舞台,演员无法表演;没有演员,舞台也只是一个空旷的空间,它们各司其职,协同工作,才构成了完整的Java Web应用运行体系。

分享:
扫描分享到社交APP
上一篇
下一篇