JVM执行过程

java -Xmx=256m -Xms=512m -Dname=value com.iss.MainApp

1. 加载JVM,主要是加载动态链接库,windows下jvm.dll,Linux下libjvm.so

2. 设置JVM启动参数,-Xmx=256m -Xms=512m设置堆大小

3. 初始化JVM。

4. 调用类加载器子系统,加载com.iss.MainApp。自定义类,根据类加载器双亲委派链,由系统默认类加载器(Classpath类加载器)进行加载。首先,根据全路径类型转化为文件路径com/iss/MainApp.class,然后读取MainApp.class中的二进制信息、解析、加载,在方法区中形成MainApp类对应的数据结构。这里可能抛出ClassNotFoundException,有两种原因。一是文件路径com/iss/MainApp.class不存在;二是com/iss/MainApp.class文件路径存在,但是MainApp.class文件中存储的不是MainApp类的信息,比如是MainApp1,MainApp2等其他类的信息。这种情况下,会抛出NoClassDefFoundError,然后导致ClassNotFoundException。

5. 在方法区com.iss.MainApp类对应的数据结构中,根据方法描述符及访问标志,查找main方法。这里的描述符,包括了方法的方法名、参数、返回值,也就是public static void main(String[])。如果找不到对应的main方法,会抛出NoSuchMethodError: main异常。

6. 通过本地方法(JNI)执行main方法。  

猜你喜欢

转载自elihe2011.iteye.com/blog/1881795