JVM中会有线程去执行我们写的代码;
比如我们有一个类里面包含了一个main方法,去执行这个main方法的时候,会启动一个jvm进程,他会默认有一个main线程,这个main线程就负责这个main方法的代码,进而创建各种对象;
在tomcat中,类的信息都会加载到jvm里去,spring容器会对我们的类进行实例化成bean,有工作线程会来执行我们的bean实例对象里的方法和代码,进而也会创建其他的各种对象,实现业务逻辑。
JVM的工作流程:
1、我们写的系统中的代码,放在了一个war包里面,则类加载器会从其中加载类的信息放到metaspace区域里面去;
2、Spring容器启动时,扫描我们的代码,通过反射的技术,去创建我们系统需要的bean实例;
3、浏览器发送请求过来时,会被JVM中的线程处理,每个线程都拥有属于自己的一块栈内存,去执行特定对象中的一些方法,如:
public void doRequest(){
MyService myService = new MyService();
myService.doService();
}
对于方法中的局部变量,都会放到线程栈内存中,doRequest方法所属的栈帧里面去,该局部变量myService会去引用堆内存中的MyService实例对象。