jvm实例,tomcat容器,spring容器,在内存中的关系
问题:
1.一个java项目对应一个jvm 吗?
2.tomcat里面加载多个java项目 ,是不是用了一个jvm?
3.java项目中的spring容器,部署到tomcat容器,启动tomcat以后的jvm实例 ,在内存中是怎么一个包含关系?
1、集群环境可能是多个jvm
2、一个java进程就是一个jvm,main方法启动的,而同一个tomcat的多个web应用都在一个jvm里
3、jvm包含tomcat运行环境,tomcat加载了应用上下文,应用上下文加载spring运行环境
4、一个tomcat的各个项目之间是独立的上下文环境,如果通过http访问,也相当于跨jvm,不是引用调用
类加载机制
代码编译的结果从本地机器码转变成字节码,Java虚拟机把描述类的数据从Class文件加载进内存,并对数据进行校验,转换解析和初始化,最终形成可以呗虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。
虚拟机设计团队把类加载阶段中的“通过一个类的全限定名来获取描述此类的二进制字节流”这个动作放到Java虚拟机外部去实现,以便让应用程序自己决定如何去获取所需要的类。实现这动作的代码模块成为“类加载器”。
类加载器
类加载器虽然只用于实现类的加载动作,但它在Java程序中起到的作用却远远不限于类加载阶段。对于任意一个类,都需要由加载他的类加载器和这个类本身一同确立其在Java虚拟机中