纸上得来终觉浅,绝知此事要躬行
 --陆游       问渠那得清如许,为有源头活水来  --朱熹

一个类从被加载到内存中开始到卸载出内存为止,它的整个生命周期包括了:加载(loading)、验证(Verification)、准备(Preparetation)、解析(Resolution)、
初始化(Initialization)、使用(Using)、卸载(Uploading)七个阶段。其中验证’准备和解析称为链接。


一、ClassLoader类加载的架构

 1)、Bootstrap Classloader启动类加载器,主要负责java_home/lib下的核心api或者-Xbootstrap选项指定的jar包装入工作。
 2)、Extension ClassLoader扩展类加载器,主要负责java_home/lib/ext下jar包
 3)、App CLassLoader 系统类加载器,主要负责Java -classpath/所指的目录下的类与jar包的装入工作;
 4)、 UserCustom ClassLoader用户自定义类加载器,在程序运行期间,通过Java.lang.Classloader的子类动态加载class

二、类加载的特性
1)、每一个ClassLoader都会维护一个自己的命名空间,同一个命名空间不能出现两个相同的类名
2)、为了实现java安全沙箱模型顶层的类加载器安全机制, java默认采用了 " 双亲委派的加载链 " 结构。

三、类的加载方式有三种:
1)、命令行启动应用时由JVM初始化加载。
2)、通过class.forName()方法动态加载。
3)、通过ClassLoader().loadClass()方法动态加载。
这三种加载方式对静态代码块的执行有影响。
如下例子:
public class MyHello {
    static
    {
        System.out.println("hello word");
    }
}

public class Hello {

    public static void main(String[] args) {
        ClassLoader loader=Hello.class.getClassLoader();
        try {
            //静态代码块不运行
            //loader.loadClass("Test.MyHello");

            //静态代码块运行输出hello world
            //Class.forName("Test.MyHello");

            //静态代码块不运行
            //Class.forName("Test.MyHello", false, loader);

            //静态代码块运行输出hello world
            Class.forName("Test.MyHello", true, loader);

        } catch (ClassNotFoundException e) {
            // TODO 自动生成的 catch             e.printStackTrace();
        }
    }
}

一、ClassLoader类加载的架构

 1)、Bootstrap Classloader启动类加载器,主要负责java_home/lib下的核心api或者-Xbootstrap选项指定的jar包装入工作。
 2)、Extension ClassLoader扩展类加载器,主要负责java_home/lib/ext下jar包
 3)、App CLassLoader 系统类加载器,主要负责Java -classpath/所指的目录下的类与jar包的装入工作;
 4)、 UserCustom ClassLoader用户自定义类加载器,在程序运行期间,通过Java.lang.Classloader的子类动态加载class

Java 类加载机制 ClassLoder的更多相关文章

  1. Java类加载机制及自定义加载器

    转载:https://www.cnblogs.com/gdpuzxs/p/7044963.html Java类加载机制及自定义加载器 一:ClassLoader类加载器,主要的作用是将class文件加 ...

  2. Java 类加载机制

    类的加载: 类的初始化: 类什么时候才被初始化:1)创建类的实例,也就是new一个对象2)访问某个类或接口的静态变量,或者对该静态变量赋值3)调用类的静态方法4)反射(Class.forName(&q ...

  3. Java类加载机制深度分析

    转自:http://my.oschina.net/xianggao/blog/70826 参考:http://www.ibm.com/developerworks/cn/java/j-lo-class ...

  4. 理解Java类加载机制(译文)

    理解java类加载机制 你想写类加载器?或者你遇到了ClassCastException异常,或者你遇到了奇怪的LinkageError状态约束异常.应该仔细看看java类的加载处理了. 什么是类加载 ...

  5. 剑指Offer——知识点储备-故障检测、性能调优与Java类加载机制

    剑指Offer--知识点储备-故障检测.性能调优与Java类加载机制 故障检测.性能调优 用什么工具可以查出内存泄露 (1)MerroyAnalyzer:一个功能丰富的java堆转储文件分析工具,可以 ...

  6. 两道面试题,带你解析Java类加载机制

    文章首发于[博客园-陈树义],点击跳转到原文<两道面试题,带你解析Java类加载机制> 在许多Java面试中,我们经常会看到关于Java类加载机制的考察,例如下面这道题: class Gr ...

  7. 【转】两道面试题,带你解析Java类加载机制(类初始化方法 和 对象初始化方法)

    本文转自 https://www.cnblogs.com/chanshuyi/p/the_java_class_load_mechamism.html 关键语句 我们只知道有一个构造方法,但实际上Ja ...

  8. Java类加载机制的理解

    算上大学,尽管接触Java已经有4年时间并对基本的API算得上熟练应用,但是依旧觉得自己对于Java的特性依然是一知半解.要成为优秀的Java开发人员,需要深入了解Java平台的工作方式,其中类加载机 ...

  9. Java类加载机制与Tomcat类加载器架构

    Java类加载机制 类加载器 虚拟机设计团队把类加载阶段中的“通过一个类的全限定名来获取描述此类的二进制字节流”这个动作放到Java虚拟机外部去实现,以便让应用程序自己决定如何去获取所需要的类.实现这 ...

随机推荐

  1. MyEclipse中查看struts_spring_hibernate源码

    1.spring查看源码 首先下载对应的源码包 如:spring-framework-2.5.6-with-dependencies.zip   打开spring-framework-2.5.6\di ...

  2. proc文件系统探索 之 根目录下的文件[二]

    包括对proc根目录下stat,uptime,swaps三个文件的解析. /proc/stat 文件包含了系统启动后的一些系统统计信息. Cat /proc/stat: cpu 77781 1077 ...

  3. Mac入门——快捷键

    快捷键: 截图 Shift+Command+3  截取全屏幕至桌面 Shift+Command+4  截取部分屏幕至桌面 Shift+Command+4+空格 截取窗口或原件至桌面 Shift+ ...

  4. 利用ScrollView滑动属性实现点击查看更多

    利用ScrollView的滚动实现点击查看更多 效果图 更新内容布局 <ScrollView android:id="@+id/sv_des" android:layout_ ...

  5. Dynamics CRM 站点地图中URL的&号编码问题

    现在大多数人对站点地图的操作都通过工具来执行,但如果你使用原始的编辑XML方式,并且你的SubArea中对应的不是某个Entity而是一串URL时,要注意了你的URL中如果带有与符号即&,那就 ...

  6. 剑指Offer——线程同步volatile与synchronized详解

    (转)Java面试--线程同步volatile与synchronized详解 0. 前言 面试时很可能遇到这样一个问题:使用volatile修饰int型变量i,多个线程同时进行i++操作,这样可以实现 ...

  7. 即时通讯软件openfire+spark+smack

    所以我基本上分为三篇文章来介绍此类软件的开发: 第一篇是关于XMPP 协议是啥,IM 是啥以及一个比较有名的开源实现,该开源实现包括三个部分(Spark.Smack和Openfire): 第二篇讲如何 ...

  8. Retrofit 2.0 超能实践(三),轻松实现文件/多图片上传/Json字符串

    文:http://blog.csdn.net/sk719887916/article/details/51755427 Tamic 简书&csdn同步 通过前两篇姿势的入门 Retrofit ...

  9. TCP连接建立系列 — 客户端接收SYNACK和发送ACK

    主要内容:客户端接收SYNACK.发送ACK,完成连接的建立. 内核版本:3.15.2 我的博客:http://blog.csdn.net/zhangskd 接收入口 tcp_v4_rcv |--&g ...

  10. HashMap方法介绍

    1. Map的遍历方式 (1) for each map.entrySet() Map<String, String> map = new HashMap<String, Strin ...