码迷,mamicode.com
首页 > 编程语言 > 详细

JAVA类加载机制

时间:2018-12-06 00:09:49      阅读:194      评论:0      收藏:0      [点我收藏+]

标签:bubuko   不同的   完成   创建   bsp   exit   过程   分配   依次   

一 JVM和类:

运行Java: java 或空格带有main方法的类名

目的:启动JVM,并加载字节码. 

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

当出现以下情况是,JVM会退出:

1):程序正常执行结束.

2):使用System.exit(0)方法;

3):出现异常时,没有捕获异常(程序终止).

4):平台强制结束JVM进程.

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

一旦某一份字节码被加载进JVM,就永驻内存,除非JVM退出。

二 类加载机制

技术分享图片

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

1):类的加载:

类加载时指将类的class文件(字节码文件)载入内存中,并为之创建一个java.lang.Class对象,我们称之为字节码对象.

类的加载过程由类加载器(ClassLoader)完成,类加载器通常有JVM提供,我们称之为系统类加载器,我们也可以继承ClassLoader类来提供自定义类加载器.

不同的类加载器可以实现加载本地字节码文件,jar包中的字节码,通过网络加载字节码等.

2):类的连接:

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

1>:验证:检测被加载的类是否有正确的内部结构.

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

3>:解析:把类的二进制数据中的符号引用替换为直接引用(深入分析JVM).

3):类的初始化:

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

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

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

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

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

技术分享图片

 

JAVA类加载机制

标签:bubuko   不同的   完成   创建   bsp   exit   过程   分配   依次   

原文地址:https://www.cnblogs.com/chjjava/p/10074154.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!