您的位置:首页 > 运维架构 > Tomcat

jvm实例,tomcat容器,spring容器,在内存中的关系

2015-11-11 10:41 591 查看


jvm实例,tomcat容器,spring容器,在内存中的关系5

1.一个java项目对应一个jvm 吗? 

2.tomcat里面加载多个java项目 ,是不是用了一个jvm? 

3.java项目中的spring容器,部署到tomcat容器,启动tomcat以后的jvm实例 ,在内存中是怎么一个包含关系? 

如果说 一个程序启动一个jvm实例,一个项目能保证在一个jvm里面吗 

另外 如果一个tomcat加载n各项目 他们之间彼此调用(比如通过http访问),是不是跨jvm? 

谢谢

问题补充:

csslisi 写道

1、集群环境可能是多个jvm 

2、一个java进程就是一个jvm,main方法启动的,同一个tomcat的多个web应用都在一个jvm里 

3、jvm包含tomcat运行环境,tomcat加载了应用上下文,应用上下文加载spring运行环境 

4、一个tomcat的各个项目之间是独立的上下文环境,如果通过http访问,也相当于跨jvm,不是引用调用

csslisi 写道

1、集群环境可能是多个jvm 

2、一个java进程就是一个jvm,main方法启动的,同一个tomcat的多个web应用都在一个jvm里 

3、jvm包含tomcat运行环境,tomcat加载了应用上下文,应用上下文加载spring运行环境 

4、一个tomcat的各个项目之间是独立的上下文环境,如果通过http访问,也相当于跨jvm,不是引用调用

谢谢你的回复 

我想问下既然多个应用在一个tomcat下的话,tomcat又在一个jvm里面 

是不是说 启动tomcat里面的每个项目只是用了线程? 

这里面的项目之间的通信是进程间通信 还是属于线程间通信呢? 

如果跨jvm肯定是进程间通信了吧 但你讲道 这些项目在同一个jvm里面 能在解释下吗

问题补充:

csslisi 写道

应用跟线程没什么关系,线程是个计算执行的概念,而应用上下文占用的是内存。你如果打印线程名称,就能看到应用线程是动态分配的,线程1可以在应用1出现,也可以在应用2出现。其实Tomcat是JVM的main进程启动的一个Socket服务,同时会加载应用的上下文环境、初始化执行线程池 

项目之间的调用看你用什么方式,如果通过http访问,就相当于跨jvm;项目虽然都在一个虚拟机里,但属于不同的类加载器环境,除非定义SystemClassloader级别的静态变量,没想到有其他办法能引用调用,呵呵。 

tomcat线程之间不可以相互调用,除非是自定义的多线程。

谢谢你的回复 

最后再多问一句啊 

两个项目部署在一个tomcat里面和两个项目分别部署在两个tomcat里面 两种情况 

这两个项目之间的数据传输(比如通过httpClient访问),都是跨jvm,是不是两种情况的效率完全一样呢? 

Spring企业应用 
2011年12月26日 10:51



wangkaick 

0 0 0


添加评论



关注(0)



2个答案按时间排序按投票排序

00


采纳的答案

应用跟线程没什么关系,线程是个计算执行的概念,而应用上下文占用的是内存。你如果打印线程名称,就能看到应用线程是动态分配的,线程1可以在应用1出现,也可以在应用2出现。其实Tomcat是JVM的main进程启动的一个Socket服务,同时会加载应用的上下文环境、初始化执行线程池 

项目之间的调用看你用什么方式,如果通过http访问,就相当于跨jvm;项目虽然都在一个虚拟机里,但属于不同的类加载器环境,除非定义SystemClassloader级别的静态变量,没想到有其他办法能引用调用,呵呵。 

tomcat线程之间不可以相互调用,除非是自定义的多线程。

2011年12月26日 22:11



csslisi 
43 
0 0 0


添加评论

00

1、集群环境可能是多个jvm 

2、一个java进程就是一个jvm,main方法启动的,同一个tomcat的多个web应用都在一个jvm里 

3、jvm包含tomcat运行环境,tomcat加载了应用上下文,应用上下文加载spring运行环境 

4、一个tomcat的各个项目之间是独立的上下文环境,如果通过http访问,也相当于跨jvm,不是引用调用
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: