JVM详解

来源:互联网 发布:淘宝女童模特施欣怡 编辑:程序博客网 时间:2024/05/20 09:25

类加载器(classloader)==>根类加载器(c++实现),扩展加载器,系统(应用)加载器和自定义加载器

用户自定义加载器:继承自抽象类java.lang.Classloader,来定制自己的加载器

顾名思义,用于加载class字节码文件,作用是把字节码文件装载到内存中(硬盘到内存)。当执行代码的时候会有一个jvm的进程,有一个主线程执行,代码执行完毕后会结束当前的进程。有以下几种情况jvm结束:

1.程序正常结束

2.执行System.exit()方法

3.遇到了error或者exception而终止

4.操作系统出现错误


jvm加载执行的顺序:

类的加载==》连接====》初始化

加载:将类load到内存中。

连接:1.验证=》确保被加载类的正确性

            2.准备=》为类的静态变量分配内存,并初始化为默认值(例:int型默认为0,引用默认的为null)

            3.解析=》把类中的符号引用转化为直接引用

初始化为静态的变量赋予正确的初始值(注意默认值与初始值的区别)


只有是类的主动使用(包括new,继承关系,静态的变量,静态的方法),首次使用才执行初始化工作。

package com.qq.server;public class Test{public static void main(String[] args){Singleton singleton = Singleton.getInstance();System.out.println("a=" + singleton.a);System.out.println("b=" + singleton.b);}}class Singleton{private static Singleton singleton = new Singleton(); //  a=1,b=0public static int a;public static int b = 0;//private static Singleton singleton = new Singleton();   a=1,b=1;public static Singleton getInstance(){return singleton;}private Singleton(){a++;b++;}}

上面的代码执行的顺序即可反映静态语句的执行顺序。

类的主动使用:

1.创建累的实例(new)

2.访问某个类的静态变量(注:该静态变量必须要在当前类中,如果存在继承,则初始化静态变量所在的类)

3.调用类的静态方法

4.反射使用(Class.forName("java.lang.String"))

5.初始化一个类的子类

6.jvm被标明的启动类

原创粉丝点击