刚开始看java虚拟机有关内容的书籍,没翻几页心理就有个疑问:Java虚拟机在什么时候启动的。只知道 javac java -xx+ 命令的运行,殊不知,java 命令运行的时候就创建了java虚拟机的一个实例。下面是我从网上找的看起来比较不错的回答:
一个运行时的Java虚拟机实例的天职是:负责运行一个java程序。当启动一个Java程序时,一个虚拟机实例也就诞生了。当该程序关闭退出,这个虚拟机实例也就随之消亡。如果同一台计算机上同时运行三个Java程序,将得到三个Java虚拟机实例。每个Java程序都运行于它自己的Java虚拟机实例中。
Java虚拟机实例通过调用某个初始类的main()方法来运行一个Java程序。而这个main()方法必须是共有的(public)、静态的(static)、返回值为void,并且接受一个字符串数组作为参数。任何拥有这样一个main()方法的类都可以作为Java程序运行的起点。
1.我们在IDEA或者eclipse上面启动java程序或者直接cmd启动
2.由于我们的电脑上肯定安装了jdk,jdk里面就有jvm.cfg
3.根据配置寻找jvm.dll,我们安装的jdk上面也有
4.这个时候JVM已经初始化完成,就会加载我们的class文件
5.找到main方法并且运行起来。
每一个程序运行都遵照上面的过程,那么回答你的问题1.在你运行程序的时候启动2.不是在运行main方法的时候,是在运行main方法之前,程序启动
以后3.一个java程序一次只能运行一个main方法,在main方法执行之前会首先创建一个JVM实例,所以是对应的。