一个tomcat中部署的多个war,相当于几个jvm

请直接去看原文

原文链接:一个tomcat有几个jvm-CSDN博客


前几天向unmi提问,今天他答复了。我觉得答复很清楚,在此记录下。总的来说

1、一个tomcat是一个进程,其中有很多线程(与有多少个app无关)

2、一个tomcat启动一个JVM,其中可以有很多APP

3、一个tomcat中部署的多个app,虽然同处一个JVM里,但是由于无法相互调用,所以也可以认为是分布式的

Question:

博主您好,请教一个问题,麻烦您抽空解答,非常感谢

我想问的是,在一个servlet容器(比如说tomcat)里部署了3个.war,那么启动后会有几个JVM存在呢,是一个JVM,还是3个JVM?

如果是1个jvm的话,那么这3个应用都是跑在一个jvm里,为什么又不能直接互相调用呢?

Answer:

@kyfxbl

一个tomcat只启动一个JVM,也就是说3个应用都是跑在一个JVM里,之所以它们不能互相调用是因为被类加载器隔离开的。

Tomcat 的类加载器层次是:

Bootstrap

|

System

|

Common

/

Webapp1 Webapp2 ...

每个应用的中的类分别是由Webapp1、Webapp2类加载器加载的,所以是相互不可见的。

关于类加载器可以看看http://unmi.cc/tag/classloader

类加载器的规则有三

  1. 一致性规则:类加载器不能多次加载同一个类

  2. 委托规则:在加载一个类之前,类加载器总参考父类加载器

  3. 可见性规则:类只能看到由其类加载器的委托加载的其他类,委托是类的加载器及其所有父类加载器的递归集

相关推荐
小张同学a.1 天前
zabbix企业级监控平台3——服务监控与API实战
linux·运维·mysql·nginx·tomcat·zabbix
xxwl5857 天前
数据库后端接口测试报告
spring boot·mysql·tomcat
次次皮9 天前
Linux 下通过 XShell 手动更新 Tomcat 应用并重启
前端·tomcat·jar
Listen·Rain10 天前
用AI开发出一个AI
java·人工智能·spring boot·tomcat·intellij-idea·mybatis·visual studio
Full Stack Developme11 天前
SpringBoot 内嵌 Tomcat 的启动流程
spring boot·后端·tomcat
Full Stack Developme11 天前
Tomcat 如何处理HTTP请求
java·http·tomcat
Full Stack Developme12 天前
Tomcat 设计原理
java·tomcat
Full Stack Developme12 天前
Tomcat NIO连接器内部如何实现零拷贝 Session管理如何实现集群同步
java·tomcat·nio
BullSmall13 天前
Tomcat 部署 Jenkins → Docker Jenkins 完整迁移方案
docker·tomcat·jenkins
baozhengw14 天前
信创改造-SpringBootJar包改为WAR包部署Tomcat
java·tomcat