精华内容
下载资源
问答
  • tomcat和jvm的关系

    千次阅读 2018-10-11 18:03:26
    1.tomcat和jvm的关系 tomcat是servlet容器(jsp和servlet);tomcat由Java开发,所以必须运行在jvm上; tomcat和tomcat中的应用(即webapps下的war包)是运行在同一个jvm中的,但分工不同; 分析: tomcat的角色是...

    1.tomcat和jvm的关系

    tomcat是servlet容器(jsp和servlet);tomcat由Java开发,所以必须运行在jvm上;  tomcat和tomcat中的应用(即webapps下的war包)是运行在同一个jvm中的,但分工不同;
    

    分析:
    tomcat的角色是“调度员”,而你的应用的角色是“工作者”,tomcat处理一个请求的大致过程如下:

    1. 假设tomcat监听8080端口,当一个http请求从主机的8080端口发送过来时,tomcat最先获知。

    2. tomcat将此请求作为任务加入一个队列中,jvm中有若干工作者线程会从这个队列中获取任务。

    3. 假设工作线程A取到了这个任务,那么线程A通过分析请求的url,检查已加载的web.xml配置,来判断此请求应该交给应用的哪个servlet处理(假设应用是用servlet实现的)

    4. 工作线程A调用对应的servlet的方法(service/get/post等),把请求封装成request对象传给servlet

    5. 此时应用开始干活(实际上干活的还是工作线程,只不过执行的是应用中编写的业务逻辑),解析请求参数,处理业务流程,生成response

    6. 工作线程A把response回送给请求的发送端。

    7. 通常情况下,tomcat启动时候使用的jdk的路径默认为环境变量里配置的JAVA_HOME;
      修改默认jdk:我们都知道启动tomcat可以通过运行bin下的startup.bat,startup.bat会调用catalina.bat文件,而catalina.bat会调用setclasspath.bat文件来获取JAVA_HOME和JRE_HOME这两个环境变量的值,因此若要在tomcat启动时指向特定的JDK,则需在setclasspath.bat文件的开头处加上JAVA_HOME和JRE_HOME。

    8. eclipse自带编译工具,只需用jre即可(java项目只能运行在jvm上/运行类库) jdk开发工具包

    展开全文
  • tomcat和jvm的关系,总结几句话: ▲ 运行一个Java程序(一个main方法),就会产生一个jvm实例,(我猜)此jvm实例的内存大小为默认大小或者如果给jvm设置了大小就按照设置的大小。main方法执行过程中产生的对象、...

    tomcat和jvm的关系,根据自己的理解总结几句话:

    运行一个Java程序(一个main方法),就会产生一个jvm实例,(我猜)此jvm实例的内存大小为默认大小或者如果给jvm设置了大小就按照设置的大小。main方法执行过程中产生的对象、局部变量等就放在这个jvm实例的内存里。main方法执行完毕jvm实例消亡。

    ▲ 普通的Java程序,加载一个class(到jvm内存中),是jvm的系统类加载器干的活。tomcat也是一个Java程序,也有main方法(在org.apache.catalina.startup.Bootstrap类中),所以tomcat的启动也会产生一个jvm实例;只是它比较特殊还是一个web容器,所以它加载一个class(到jvm内存中)是由自己专门的tomcat的类加载器去加载的。

    ▲ servlet是单例,tomcat启动时就会加载web.xml,web.xml被加载时不会生成servlet对象,servlet是在第一次发起请求的时候被实例化的。

    ▲ 每个请求对应开启一个线程,每线程分配1mb内存,开启一个线程需要耗用1mb的jvm内存空间用于作为线程栈之用。 (我猜)用来存此线程对象的引用和request、response等线程内的局部变量。

    原生servlet项目_,一个找servlet的请求过来后,就可以直接找到这个servlet对象,然后调用此对象里的doGet等方法。

    ssh或者ssm框架项目_,则tomcat启动时就通过加载配置文件或者注解把controller、service、dao对象创建了,并放到spring容器(ApplicationContext对象)中,当一个请求过来的时候,就可以直接找到这个controller对象并调用它里面相应的方法,再根据方法里的代码有选择的调service、dao对象里的方法。

    ▲ 一个tomcat包含一个main方法,产生一个jvm实例,所以一个tomcat下的所有项目使用同一个jvm实例。

     

    待总结:

    △ jvm的系统类加载器

    △  tomcat的类加载器

     

    展开全文
  • tomcat和Jvm的关系.txt

    2020-03-28 18:34:03
    JVM(虚拟机),相当于电脑安装系统一样,可以运行应用程序。让tomcat跑起来,就得有jdk,而jdk自带了JVM.
  • tomcat和jvm是什么关系

    千次阅读 2019-07-11 16:54:12
    以下是所有解析 一: Tomcat 是 Java 程序,运行在 JVM 之上,差不多和你的 QQ 运行在你的 Windows 之上一样,启动的时候做了好多好多的工作为了让你的应用能够通过 ...题主,Tomcat和JVM的关系,不用想的太复杂,其...

    以下是所有解析
    一:

    Tomcat 是 Java 程序,运行在 JVM 之上,差不多和你的 QQ 运行在你的 Windows 之上一样,启动的时候做了好多好多的工作为了让你的应用能够通过 HTTP 接收和返回消息。

    二:
    Tomcat是一个Java写的http server,启动时就和所有http server差不多,监听断口,等待连接。

    三:
    题主,Tomcat和JVM的关系,不用想的太复杂,其本质上和你写一个HelloWorld跑在JVM上是一样的。而你感觉到复杂的地方是Tomcat这个Java写的程序,其实现了Servlet和JSP的规范,是一种容器,支持实现了Servlet规范的应用运行。但是这些只是应用的内部逻辑,和程序本质与JVM的关系并没有变。
    而要了解Tomcat在启动的时候都做了什么事情,首先从启动脚本入手,你观察到从Bootstrap类开始启动,而具体细节其实有很多,包含classLoader的创建,配置文件的解析,安全策略的配置使用,Logging的初始化,对于Host的解析,Context的解析等等。

    四:
    以tomcat的catalina.sh脚本为例,Java程序的脚本,最终的逻辑基本上是调用java命令执行Java程序.
    你这么想 tomcat就是一个helloworld程序,当你运行他的时候其实是开启了一个jvm,但是这个helloworld很强大,跑起来以后能处理web请求,就是这样了
    其实,tomcat这个java程序是使用脚本的形式启动,而不是在命令行中java xxx这样
    https://blog.csdn.net/qq_21508059/article/details/82713797

    五:

    1.在安装Java的时候都需要先安装一个JDK,JVM启动参数是控制将代码制作成可运行程序的过程
    2.Tomcat需要运行在JVM上面。 
    3.JVM就是一个进程。 
    4.Tomcat容器中运行的多个web程序见不能相互通信(可以理解为分布式)。 
    5.Tomcat中的多个web程序运行在同一个JVM中。
    
    

    JVM类加载
      JVM类加载采用 父类委托机制,如下图所示:
      在这里插入图片描述
    Tomcat类加载
    tomcat是一个java写的程序,它会根据自己的需求实现java的类加载器classLoader,以满足自己要在哪里加载jar包和需要的其他东西
      在tomcat中类的加载稍有不同,如下图:
      在这里插入图片描述
      当tomcat启动时,会创建几种类加载器:

    1 Bootstrap 引导类加载器

    加载JVM启动所需的类,以及标准扩展类(位于jre/lib/ext下)

    2 System 系统类加载器

    加载tomcat启动的类,比如bootstrap.jar,通常在catalina.bat或者catalina.sh中指定。位于CATALINA_HOME/bin下。
      在这里插入图片描述
      3 Common 通用类加载器

    加载tomcat使用以及应用通用的一些类,位于CATALINA_HOME/lib下,比如servlet-api.jar
      在这里插入图片描述
      4 webapp 应用类加载器

    每个应用在部署后,都会创建一个唯一的类加载器。该类加载器会加载位于 WEB-INF/lib下的jar文件中的class 和 WEB-INF/classes下的class文件。

    当应用需要到某个类时,则会按照下面的顺序进行类加载:

    1 使用bootstrap引导类加载器加载

    2 使用system系统类加载器加载

    3 使用应用类加载器在WEB-INF/classes中加载

    4 使用应用类加载器在WEB-INF/lib中加载

    5 使用common类加载器在CATALINA_HOME/lib中加载

    问题扩展
      通过对上面tomcat类加载机制的理解,就不难明白 为什么java文件放在Eclipse中的src文件夹下会优先jar包中的class?

    这是因为Eclipse中的src文件夹中的文件java以及webContent中的JSP都会在tomcat启动时,被编译成class文件放在 WEB-INF/class 中。

    而Eclipse外部引用的jar包,则相当于放在 WEB-INF/lib 中。

    因此肯定是 java文件或者JSP文件编译出的class优先加载。

    通过这样,我们就可以简单的把java文件放置在src文件夹中,通过对该java文件的修改以及调试,便于学习拥有源码java文件、却没有打包成xxx-source的jar包。

    在idea中,也是先加载src中编译的class文件先的

    以下这张图就很表明tomcat是运行在jvm之上的,因为tomcat的类加载器父类是jvm的应用类加载器

    在这里插入图片描述

    展开全文
  • tomcatjvm的关系

    千次阅读 多人点赞 2018-07-22 19:29:29
    tomcat跑起来,就得有jdk,而jdk自带了JVM,安装完了jdk,把安装jkdbin目录告诉tomca,就可以了。 2,有web服务器不必安装jdk,因为自带了,如weblogic。 3,tomcat web容器,主要有jspservlet有关, ...

    1,JVM(虚拟机),相当于电脑安装系统一样,可以运行应用程序。让tomcat跑起来,就得有jdk,而jdk自带了JVM,安装完了jdk,把安装jkd的bin目录告诉tomca,就可以了。

    2,有的web服务器不必安装jdk,因为自带了,如weblogic。

    3,tomcat web容器,主要和有jsp和servlet有关, 没有tomcat, 通过一定技术是可以运行jsp和serlet,所以说JVM跑着tomcat,而没有JVM tomcat就废物了。

    4,tomcat只是一个web容器,启动的时候,默认是不会去编译java及jsp code的,除非在你web工程的web.xml里配置了一些listener,然后在这些listner里,自己定义了一些关于jsp编译的操作。

     

    前几天向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. 可见性规则:类只能看到由其类加载器的委托加载的其他类,委托是类的加载器及其所有父类加载器的递归集

     

    展开全文
  • JVM和tomcat之间的关系,从下面的几个方向说明:1、JVM,java虚拟机,不同设备运行java应用程序的平台。2、Tomcat,apache免费开源的web应用服务器,通过java语言编写,换句话说:tomcat亦是一个java应用程序。-----...
  • tomcatjvm关系

    千次阅读 2017-07-27 12:16:14
    现象: 一个tomcat可以有多个web应用,当它启动时,会启动一个jvm...其作为Servlet容器,有三种工作模式:独立Servlet容器、进程内Servlet容器进程外Servlet容器。 Tomcat Server处理一个HTTP请求过程:
  • TomCatJvm关系

    千次阅读 2017-10-26 18:00:03
    tomcat跑起来,就得有jdk,而jdk自带了JVM,安装完了jdk,把安装jkdbin目录告诉tomca,就可以了。 2,有web服务器不必安装jdk,因为自带了,如weblogic。 3,tomcat web容器,主要有jspservlet有关, ...
  • TomcatJVM调优

    2019-11-13 09:38:39
    其中持久代主要存放是Java类类信息,与垃圾收集器需要收集Java对象关系不大,而年轻代年老代划分是对垃圾收集影响比较大。 年轻代 所有新生成对象首先都是放在年轻代,年轻代目标是尽可能快速...
  • JDK、JRE、JVMTOMCAT之间的关系

    千次阅读 2018-02-05 11:25:36
    JDK是开发人员开发使用,jre是用来运行java程序,就是...JDK中包含JRE,在JDK安装目录下有一个名为jre目录,里面有两个文件夹binlib,在这里可以认为bin里就是jvm,lib中则是jvm工作所需要类库,而jvm和 l
  • 一、概述从应用角度来看,DockerFile、ImagesContainer分别代表软件三个不同阶段。DockerFile:软件原材料(镜像构建脚本),面向开发Images:软件交付产品,交付标准Container:软件运行状态,设计部署与...
  • jdk和tomcat的关系

    2020-08-27 20:52:15
    关系:jdk可以在tomcat下运行,tomcat是jdk编译工具。 1.什么是jvm 我们从操作系统层面来理解,jvm其实就是操作系统中一个进程。既然是一个进程,那么我们很容易可以通过任务管理器来查看。假设此时我们...
  • 目录:一、基础概念二、进程线程关系(进程线程都是CPU工作时间段的描述)1、进程概念2、线程概念3、进程线程区别(资源管理方式不同)4、进程线程的优缺点5、进程线程的关系三、它们的线程数关系(java应用)1...
  • java.exejavaw都可以粗略说成替代jvm.dll执行class文件 区别: java.exe控制台相关联 javaw.exeGUI程序相关联 2.ide开发工具(以myeclipse为例) 启动myeclipse会启动一个jvm,可以理解成jav...
  • 一、Tomcat和JDK的关系:  1. Tomcat本身不能直接在计算机上运行,需要依赖于硬件基础之上的操作系统和一个java 虚拟机。  2. JAVA程序启动时JVM都会分配一个初始内存和最大内存给这个应用程序。这个初始内存和...
  • (3)是java运行编译,java没有jdk没办法编译运行,java运行必须依赖jdk环境 (4)jdk是java语言编写,用来给java程序调用 2.JRE: (1)jre是用来运行java程序,就是java程序运行环境 3.JVM: (1)jvm是整个java...
  • 一、Tomcat和JDK的关系: 1. Tomcat本身不能直接在计算机上运行,需要依赖于硬件基础之上的操作系统和一个java 虚拟机。 2. JAVA程序启动时JVM都会分配一个初始内存和最大内存给这个应用程序。这个初始内存和最大内...
  • web容器:apache2+tomcat6 jvm:jdk6 linux x64 程序:status2+spring+ibatis 缓存:memcache 服务器:4颗双核cup 8G内存 由于本项目是网站项目只做展示用, 对时时性没要求, 做了几乎所有对象缓存,...
  • 作者简介:笔名seaboat,擅长工程算法、人工智能算法、自然语言处理、计算机视觉、架构、分布式、高并发、大数据搜索引擎等方面技术,大多数编程语言都会使用,但更擅长Java、PythonC++。平时喜欢看书写作、...
  • 目录类加载机制类加载器双亲委派机制类加载器初始化过程扩展类加载器创建扩展类加载器继承关系:应用类加载器创建双亲委派机制双亲委派机制源码加载递归调用图设计双亲委派目的自定义类加载器打破双亲委派...
  • 在目前流行的互联网架构中,对一个应用来说,Tomcat是首,...如果能够掌握Tomcat的原理,那么是非常有用的,比如:如果我们能弄清楚Tomcat和Socket、Tcp之间的关系,我们就能明白Tomcat为什么会出现端口冲突。如果我...
  • 在目前流行的互联网架构中,对一个应用来说,Tomcat是首,SSM是中,...如果能够掌握Tomcat的原理,那么是非常有用的,比如:如果我们能弄清楚Tomcat和Socket、Tcp之间的关系,我们就能明白Tomcat为什么会出现端口冲...
  • tomcat专题二:jdk安装以及tomcat基本安装使用书接tomcat专题一,在这一节将介绍一下java运行环境安装以及tomcat的基本安装使用。可能有人会问安装tomcat跟java运行环境有什么关系?正像专题一介绍那样,...
  • 在目前流行的互联网架构中,对一个应用来说,Tomcat是首,...如果能够掌握Tomcat的原理,那么是非常有用的,比如:如果我们能弄清楚Tomcat和Socket、Tcp之间的关系,我们就能明白Tomcat为什么会出现端口冲突。如果我...
  • 在目前流行的互联网架构中,对一个应用来说,Tomcat是首,...如果能够掌握Tomcat的原理,那么是非常有用的,比如:如果我们能弄清楚Tomcat和Socket、Tcp之间的关系,我们就能明白Tomcat为什么会出现端口冲突。如果我...
  • 在目前流行的互联网架构中,对一个应用来说,Tomcat是首,SSM是中,JVM是尾,我们通常对于SSM是比较了解的,而忽略了...如果我们能弄清楚Tomcat和Socket、Tcp之间的关系,我们就能明白Tomcat为什么会出现端口冲突。 ...
  • 在目前流行的互联网架构中,对一个应用来说,Tomcat是首,...如果能够掌握Tomcat的原理,那么是非常有用的,比如:如果我们能弄清楚Tomcat和Socket、Tcp之间的关系,我们就能明白Tomcat为什么会出现端口冲突。如果我...
  • 如果我们能弄清楚Tomcat和Socket、Tcp之间的关系,我们就能明白Tomcat为什么会出现端口冲突。 如果我们能准确的知道Tomcat中部署一个项目的N种方式,那么就能在工作中更加得心应手。 Tomcat中..

空空如也

空空如也

1 2 3 4 5 ... 7
收藏数 125
精华内容 50
关键字:

tomcat和jvm的关系