一、JVM的生命周期介绍:     


当启动一个java程序时,一个JVM实例就诞生;当这个java程序关闭时,则这个JVM实例就随着消亡。可以理解为,JVM的生命周期就是java程序的执行过程。如果一台机器上同时运行多个java程序,将得到多个JVM实例,每个java程序运行在自己的JVM实例中。


遇到如下几种情况JVM实例会结束生命周期:


1、执行了System.exit()方法;


2、程序顺序执行完毕;


3、执行程序过程中发生异常,导致异常终止;


4、操作系统出现错误,导致JVM进程终止。


.java文件编译的.class文件,需要通过 类加载器(ClassLoader)加载到内存中执行。


    二、java程序的执行过程:


加载 ——> 连接(验证、准备、解析)——> 初始化 ——>执行


javaee怎么运行别人的 如何运行别人的java程序_java程序


 (2.1)加载:类加载的最终产物是在 “堆区”创建Class对象。


1)、将.class的二进制数据读到内存中,放到运行时的“方法区”内;


2)、在“堆区”创建一个java.lang.Class对象,用来封装类在“方法区”的数据结构。


如下图:Class对象封装了方法区中Class的数据结构,并为Java程序提供访问“方法区”内数据结构的接口。


javaee怎么运行别人的 如何运行别人的java程序_JVM_02



    类的验证:


类文件的结构检查、语义检查、字节码验证、二进制兼容性的验证;


    (2.3)类的准备:


JVM为类的静态变量分配内存,并设置默认的初始值。


    类的解析:


JVM将类的二进制数据中的 “符号引用”替换为 “直接引用”,指向“方法区”中的内存位置。


    类的初始化:


JVM为类的静态变量赋值。


类的静态变量的赋值的2种位置:


1)、静态变量声明处;


2)、类的静态代码中;


没有显示赋值的变量,被仍然使用“类的解析”阶段,JVM给的初始值。