1.首先是普通的java程序启动
比如:java person.class 或者在IDE开发工具中右键启动
(1)首先启动jvm(jvm是c语言写的或其他),jvm启动后会创建启动类加载器,去加载java程序需要的运行环境(rt.jar等等),加载完运行环境后,再创建 Launcher 启动器,由它去创建扩展类加载器和应用类加载器,并且应用类加载器把扩展类加载器当作父类,扩展类加载指定目录的扩展jar包,应用类加载器加载类路径下的class
(2)应用类加载器加载了类路径下的person.class后,找到其main方法执行
2.tomcat启动
tomcat启动所依赖的jar包,包括 bootstrap.jar、tomcat-juli.jar
(1)由于tomcat的启动是通过脚本来启动的,脚本所做的最重要的是就是在CLASSPATH后追加Bootstrap.jar、Tomcat-juli.jar
(2)解析脚本参数,执行Bootstrap类的main方法,并传入相应的参数
(3)java命令执行Bootstrap类的main方法,传入参数
(4)执行Bootstrap类的main方法,就是相当于执行了tomcat的这个java程序,然后创建tomcat程序中的各种模块组件,构成一个tomcat容器(servlet容器).
3.springboot的启动
(1)springboot采用原始的java程序main方法启动(其实所有java程序启动就是从main方法开始,包括tomcat也一样,只是在tomcat中我们只要写servlet就行)
(2)springboot启动就是,jvm启动创建自己的类加载器,应用类加载器加载类路径下的类,执行到tomcat的代码,创建tomcat容器
总的来说,jvm进程包含着java代码写的程序,jvm进程就是解析java代码给本地系统
jvm启动后变成内存中的一个进程,然后,这个进程创建自己的类加载器去加载不同目录下的类或着jar包,然后运行这些java写的代码
多个jvm进程就是多个java程序启动