Java ClassLoader 基础

基本概念:

Java Classloader(类装载器):JRE的一个模块,用于装载Java类到JVM。

JRE加载一个类到JVM需要以下基本步骤:

  1. 装载:查找并导入class文件,如String.class;
  2. 链接:校验、准备、解析,其中解析步骤是可以选择的,由使用目的决定;
  3. 校验:检查载入class文件数据的正确性,因为某些class文件可能是利用工具生成,而非使用Java编译器编译生成;
  4. 准备:给类的静态成员分配存储空间;
  5. 解析:将符号引用转成直接引用;
  6. 初始化:对类的静态成员、静态代码块执行初始化工作。

JRE自带的的三个ClassLoader:

  1. Bootstrap class loader:用于装载<JAVA_HOME>/jre/lib目录下的Java核心类库,该装载器使用本地代码实现,本身不是Java类。
  2. Extensions class loader:用于装载<JAVA_HOME>/jre/lib/ext目录下的类库,或者java.ext.dirs系统属性指定的目录,具体实现类是sun.misc.Launcher$ExtClassLoader。
  3. System class loader:用于装载应用CLASSPATH路径指定的类与资源(如配置文件等),具体实现类是sun.misc.Launcher$AppClassLoader,所以也常称为App class loader。

为什么需要三个class loader?这三个class loader又是如何分工了?这年代靠拼爹,需要任何东西尽管先向爹要,爹没有再自己拼,下图中100万比喻为请求的类,天一为System class loader,天一爸爸为Extensions class loader,天一爷爷为BootStrap class loader,查看保险箱相当于load class,通过这个形象的比喻可以简单的理解class loader代理关系,以及单一职责链模式。JRE提供三个class loader主要是为了分工以及JVM实现的需要。

时间: 2024-10-15 20:41:43

Java ClassLoader 基础的相关文章

Java ClassLoader基础及加载不同依赖 Jar 中的公共类

转载自:最新内容及最清晰格式请见 http://www.trinea.cn/android/java-loader-common-class/ 本文主要介绍 ClassLoader 的基础知识,ClassLoader 如何动态加载 Jar,ClassLoader 隔离问题及如何加载不同 Jar 中的公共类. 本文工程开源地址见:Java Dynamic Load [email protected],Clone 以后直接以 Java Application去运行 java-dynamic-load

Java ClassLoader基础知识

Java中一共有四个类加载器,之所以叫类加载器,是程序要用到某个类的时候,要用类加载器载入内存.    这四个类加载器分别为:Bootstrap ClassLoader.Extension ClassLoader.AppClassLoader和URLClassLoader,他们的作用其实从名字就可以大概推测出来了.其中AppClassLoader在很多地方被叫做System ClassLoader Bootstrap ClassLoader是在JVM开始运行的时候加载java的核心类,是用C++

Java自学基础

1.一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 可以有多个类,但只能有一个public的类,并且public的类名必须与文件名相一致.2.Java有没有goto? java中的保留字,现在没有在java中使用.跳出循环用的3.说说&和&&的区别. &和&&都可以用作逻辑与的运算符,表示逻辑与(and),当运算符两边的表达式的结果都为true时,整个运算结果才为true,否则,只要有一方为false,则结果为f

转 Java Classloader机制解析

转 Java Classloader机制解析 发表于11个月前(2014-05-09 11:36)   阅读(693) | 评论(0) 9人收藏此文章, 我要收藏 赞1 慕课网,程序员升职加薪神器,点击免费学习 目录[-] JDK默认ClassLoader 双亲委托模型 如何自定义ClassLoader 1.loadClass 方法 2.findClass 3.defineClass 不遵循“双亲委托机制”的场景 做Java开发,对于ClassLoader的机制是必须要熟悉的基础知识,本文针对J

java classLoader机制解析

类从被加载到虚拟机内存中开始,到卸装出内存为止,它的整个生命周期包括了:加载,连接(验证,准备,解析),初始化,使用和卸载七个阶段.其中验证.准备和解析三个部分称为连接,也就是说,一个Java类从字节代码到能够在JVM中被使用,需要经过加载.链接和初始化这三个步骤 .我们看一看Java虚拟机的体系结构. Java虚拟机的体系结构如下图所示: Java类加载的全过程,是加载.验证.准备.解析和初始化这五个阶段的过程.而加载阶段是类加载过程的一个阶段.在加载阶段,虚拟机需要完成以下三件事情: 通过一

Java语法基础

Java语法基础 1.  关键字 某些单词对编译器有着特殊的含义,并且不能作为标示符使用,全部是小写字母 Java语言关键字 abstract boolean break byte case catch char class try do default continue double else extends assert final finally float for If implement import instanceof int interface long native new g

理解Java ClassLoader机制(转载)

当JVM(Java虚拟机)启动时,会形成由三个类加载器组成的初始类加载器层次结构: bootstrap classloader                |       extension classloader                |       system classloader bootstrap classloader -引导(也称为原始)类加载器,它负责加载Java的核心类. 在Sun的JVM中,在执行java的命令中使用-Xbootclasspath选项或使用 - D

【Java面向对象基础(三)】面向对象思想

[喵"的Android之路][基础篇(三)][Java面向对象基础]面向对象思想 1 面向对象的WWH 1.1 What--什么是面向对象 首先,要理解“对象”.在Thinking in Java中提到“Everything is an object”,即万物皆对象.这里的“对象”指的是任何实体或者任何可以当作实体看待的“虚幻的事物”.比如现实中的人(男人.女人.老人.小孩而...).动物(大象.狮子.猴子...).桌子.凳子.汽车.ATM机等等,也可以使看不见摸不着的空气(氧气.二氧化碳.氮气

java 集合基础1 学习笔记

集合特点: 1.用于存储对象的容器. 2.集合的长度是可变的. 3.集合中不可以存储基本数据类型值. Collection接口常见方法: 1.添加 boolean add(obj); boolean addAll(Collection coll); 2.删除 boolean remove(obj); boolean removeAll(Collection coll); void clear();//清空集合 3.判断 boolean contains(obj); boolean contain