java编译运行原理

来源:互联网 发布:arttemlate渲染数据 编辑:程序博客网 时间:2024/04/30 14:54

①.java文件被javac.exe编译成与体系结构无关的.class字节码文件

②java.exe将.class文件加载到JVM中运行

③将.class文件中类的静态变量和方法信息放入方法区中

④在堆区中创建java.lang.Class对象,该类持有方法区类型信息的引用

⑤为类的静态变量分配内存及初始化,初始化的时机包括:

    (1)创建类的实例,包括new、反射、克隆、反序列化

    (2)调用类定义的静态方法

    (3)访问某个类的或接口定义的静态常量或赋值(final修饰的编译时静态常量例外)

    (4)初始化一个类的子类会先初始化父类,但接口不会

    (5)调用API中的反射方法

⑥在堆区中创建类的实例(实例的引用变量持有堆区实例的引用,如果是静态变量则存放在方法区,如果是局部变量则存放在栈区,如果是实例变量则存放在堆区),为实例分配内存,初始化实例变量为其变量的默认值,如果实例变量在声明时被显示初始化则将初始化值赋值给实例变量,调用构造方法(克隆和反序列化方法没有此步),返回对象引用

⑦当程序不需要某个实例时结束对象的生命周期,JVM的垃圾回收器自动回收内存

0 0