68.类加载机制

JVM和类:

运行java:java带有main方法的类名,启动JVM并加载字节码.

当调用java命令来运行某个java程序时,该命令将会启动一个JVM中的所有线程,变量都处于同一个进程中,共享该JVM的内存区域.

当出现以下情况时,JVM将会退出.

1:程序正常执行结束.

2:使用System.exit(0);

3:出现异常时,没有捕获异常.

4:平台强制结束JVM进程

JVM进程一旦结束,该进程中内存中 的数据将会丢失

当程序主动使用到某各类时,如果该类还未被加载进内存中,则系统会通过加载,连接,初始化三个步骤来对该类进行初始化操作.

1.类的加载:

类加载时指将类的class文件(字节码文件)载入内存中,并为之创建一个java.lang.Class对象,我们 称之为字节码对象.类的加载过程由类加载器完成.类加载器通常由JVM提供,我们称之为系统类加载器.我们也可以继承ClassLoader类来提供自定义类加载器.
不同类加载器可以实现加载本地字节码文件,jar包中的字节码,通过网络加载字节码等.

2.类的连接:

当类被加载进内存之后,系统为之生产一个对应的Class对象,接着把类的二进制数据,合并到JRE中.

  • 验证:检测被加载的类是否有正确的内存结构

  • 准备:负责为类的static变量分配内存,并设置默认值.

  • 解析:把类的二进制数据中的符号引用替换为直接引用

3.类的初始化:

在此阶段.JVM负责对类进行初始化,主要就是static变量进行初始化.

初始化一个类一般包含以下几个步骤:

1.如果该类还未被加载和连接,则程序先加载并连接该类

2.如果该类的直接父类还未被初始化,则先初始化其父类

3.如果类中有初始化语句(静态代码块),则系统一次执行这些初始化语句


符号引用:

符号引用是个字符串,它给出了被引用的内容的名字并且可能会包含一些其他关于这个被引用项的信息--这些信息必须足以唯一的识别一个类,字段,方法.

这样,对于其他类的符号引用必须给出类的全名





你可能感兴趣的:(68.类加载机制)