Soumettre la recherche
Mettre en ligne
Java类加载器
•
5 j'aime
•
1,002 vues
Fu Cheng
Suivre
关于java 类加载器(class loader)的介绍
Lire moins
Lire la suite
Technologie
Signaler
Partager
Signaler
Partager
1 sur 24
Télécharger maintenant
Télécharger pour lire hors ligne
Recommandé
CH02:從JDK到IDE
CH02:從JDK到IDE
Justin Lin
Java SE 8 技術手冊第 1 章 - Java平台概論
Java SE 8 技術手冊第 1 章 - Java平台概論
Justin Lin
Java SE 7 技術手冊投影片第 01 章 - Java平台概論
Java SE 7 技術手冊投影片第 01 章 - Java平台概論
Justin Lin
CH19:深入模組化
CH19:深入模組化
Justin Lin
Android开发基础
Android开发基础
ykdsg
深入模組化
深入模組化
Justin Lin
CH17:反射與類別載入器
CH17:反射與類別載入器
Justin Lin
Servlet & JSP 教學手冊第二版 - 第 11 章:簡介 JavaMail
Servlet & JSP 教學手冊第二版 - 第 11 章:簡介 JavaMail
Justin Lin
Recommandé
CH02:從JDK到IDE
CH02:從JDK到IDE
Justin Lin
Java SE 8 技術手冊第 1 章 - Java平台概論
Java SE 8 技術手冊第 1 章 - Java平台概論
Justin Lin
Java SE 7 技術手冊投影片第 01 章 - Java平台概論
Java SE 7 技術手冊投影片第 01 章 - Java平台概論
Justin Lin
CH19:深入模組化
CH19:深入模組化
Justin Lin
Android开发基础
Android开发基础
ykdsg
深入模組化
深入模組化
Justin Lin
CH17:反射與類別載入器
CH17:反射與類別載入器
Justin Lin
Servlet & JSP 教學手冊第二版 - 第 11 章:簡介 JavaMail
Servlet & JSP 教學手冊第二版 - 第 11 章:簡介 JavaMail
Justin Lin
Java SE 7 技術手冊投影片第 02 章 - 從JDK到IDE
Java SE 7 技術手冊投影片第 02 章 - 從JDK到IDE
Justin Lin
Servlet & JSP 教學手冊第二版 - 第 12 章:從模式到框架
Servlet & JSP 教學手冊第二版 - 第 12 章:從模式到框架
Justin Lin
Java SE 7 技術手冊試讀 - Java 平台概論
Java SE 7 技術手冊試讀 - Java 平台概論
Justin Lin
北京圣思园深入Java虚拟机 class loader
北京圣思园深入Java虚拟机 class loader
Medivh2011
Class loader
Class loader
Medivh2011
Java平台概論
Java平台概論
Justin Lin
前端自動化工具
前端自動化工具
國昭 張
2. 從 REPL 到 IDE
2. 從 REPL 到 IDE
Justin Lin
CH1:Java平台概論
CH1:Java平台概論
Justin Lin
Entity Framework實戰
Entity Framework實戰
國昭 張
Entity framework + Linq 介紹
Entity framework + Linq 介紹
Alan Tsai
Java SE 7 技術手冊投影片第 14 章 - 整合資料庫
Java SE 7 技術手冊投影片第 14 章 - 整合資料庫
Justin Lin
Redux+react js
Redux+react js
國昭 張
20170830 2nd sre build and deployment scripting
20170830 2nd sre build and deployment scripting
祺元 曾
RESTful
RESTful
PingLun Liao
2012 java two-desktop-appliction-using-j-ruby-with-swt
2012 java two-desktop-appliction-using-j-ruby-with-swt
tka
How to choose web framework
How to choose web framework
Bo-Yi Wu
CH11:執行緒與並行API
CH11:執行緒與並行API
Justin Lin
Servlet & JSP 教學手冊第二版 - 第 7 章:使用 JSTL
Servlet & JSP 教學手冊第二版 - 第 7 章:使用 JSTL
Justin Lin
Maven初级培训
Maven初级培训
ytsolar
Presentcion power point
Presentcion power point
dianabenavides93032713775
Verdadero o falso (2)
Verdadero o falso (2)
pipe8sasan
Contenu connexe
Tendances
Java SE 7 技術手冊投影片第 02 章 - 從JDK到IDE
Java SE 7 技術手冊投影片第 02 章 - 從JDK到IDE
Justin Lin
Servlet & JSP 教學手冊第二版 - 第 12 章:從模式到框架
Servlet & JSP 教學手冊第二版 - 第 12 章:從模式到框架
Justin Lin
Java SE 7 技術手冊試讀 - Java 平台概論
Java SE 7 技術手冊試讀 - Java 平台概論
Justin Lin
北京圣思园深入Java虚拟机 class loader
北京圣思园深入Java虚拟机 class loader
Medivh2011
Class loader
Class loader
Medivh2011
Java平台概論
Java平台概論
Justin Lin
前端自動化工具
前端自動化工具
國昭 張
2. 從 REPL 到 IDE
2. 從 REPL 到 IDE
Justin Lin
CH1:Java平台概論
CH1:Java平台概論
Justin Lin
Entity Framework實戰
Entity Framework實戰
國昭 張
Entity framework + Linq 介紹
Entity framework + Linq 介紹
Alan Tsai
Java SE 7 技術手冊投影片第 14 章 - 整合資料庫
Java SE 7 技術手冊投影片第 14 章 - 整合資料庫
Justin Lin
Redux+react js
Redux+react js
國昭 張
20170830 2nd sre build and deployment scripting
20170830 2nd sre build and deployment scripting
祺元 曾
RESTful
RESTful
PingLun Liao
2012 java two-desktop-appliction-using-j-ruby-with-swt
2012 java two-desktop-appliction-using-j-ruby-with-swt
tka
How to choose web framework
How to choose web framework
Bo-Yi Wu
CH11:執行緒與並行API
CH11:執行緒與並行API
Justin Lin
Servlet & JSP 教學手冊第二版 - 第 7 章:使用 JSTL
Servlet & JSP 教學手冊第二版 - 第 7 章:使用 JSTL
Justin Lin
Maven初级培训
Maven初级培训
ytsolar
Tendances
(20)
Java SE 7 技術手冊投影片第 02 章 - 從JDK到IDE
Java SE 7 技術手冊投影片第 02 章 - 從JDK到IDE
Servlet & JSP 教學手冊第二版 - 第 12 章:從模式到框架
Servlet & JSP 教學手冊第二版 - 第 12 章:從模式到框架
Java SE 7 技術手冊試讀 - Java 平台概論
Java SE 7 技術手冊試讀 - Java 平台概論
北京圣思园深入Java虚拟机 class loader
北京圣思园深入Java虚拟机 class loader
Class loader
Class loader
Java平台概論
Java平台概論
前端自動化工具
前端自動化工具
2. 從 REPL 到 IDE
2. 從 REPL 到 IDE
CH1:Java平台概論
CH1:Java平台概論
Entity Framework實戰
Entity Framework實戰
Entity framework + Linq 介紹
Entity framework + Linq 介紹
Java SE 7 技術手冊投影片第 14 章 - 整合資料庫
Java SE 7 技術手冊投影片第 14 章 - 整合資料庫
Redux+react js
Redux+react js
20170830 2nd sre build and deployment scripting
20170830 2nd sre build and deployment scripting
RESTful
RESTful
2012 java two-desktop-appliction-using-j-ruby-with-swt
2012 java two-desktop-appliction-using-j-ruby-with-swt
How to choose web framework
How to choose web framework
CH11:執行緒與並行API
CH11:執行緒與並行API
Servlet & JSP 教學手冊第二版 - 第 7 章:使用 JSTL
Servlet & JSP 教學手冊第二版 - 第 7 章:使用 JSTL
Maven初级培训
Maven初级培训
En vedette
Presentcion power point
Presentcion power point
dianabenavides93032713775
Verdadero o falso (2)
Verdadero o falso (2)
pipe8sasan
Tutorial Blogger
Tutorial Blogger
sonyalorena
Metodo de gauss
Metodo de gauss
Diego Naranjo
Estructuraatmicai 090418200027-phpapp02
Estructuraatmicai 090418200027-phpapp02
Lucas Crotti
Verdadero o falso (2)
Verdadero o falso (2)
pipe8sasan
Apresentação Dominit 2013
Apresentação Dominit 2013
Dominit - Soluções e Processos em TI
Tecnologia na escola
Tecnologia na escola
Marineide Ribeiro
Despacho organizac3a7c3a3o-ano-letivo-2013 2014
Despacho organizac3a7c3a3o-ano-letivo-2013 2014
mcelpais
Danza del fuego
Danza del fuego
isaemilio
Verdadero o falso
Verdadero o falso
pipe8sasan
Cuando la hierva
Cuando la hierva
azconfort
Prevencao rodoviaria
Prevencao rodoviaria
luisamirandacosta
Argumentación
Argumentación
Marcela Alvera
Ppt tema6
Ppt tema6
ireneunica
Presentación1
Presentación1
danny211
Motivação
Motivação
maisarraffblogspot.com
Project textual sebas
Project textual sebas
loslaboriosos
Por q usar oliveira
Por q usar oliveira
Oliveira
Guia agua
Guia agua
ceramicavg2012
En vedette
(20)
Presentcion power point
Presentcion power point
Verdadero o falso (2)
Verdadero o falso (2)
Tutorial Blogger
Tutorial Blogger
Metodo de gauss
Metodo de gauss
Estructuraatmicai 090418200027-phpapp02
Estructuraatmicai 090418200027-phpapp02
Verdadero o falso (2)
Verdadero o falso (2)
Apresentação Dominit 2013
Apresentação Dominit 2013
Tecnologia na escola
Tecnologia na escola
Despacho organizac3a7c3a3o-ano-letivo-2013 2014
Despacho organizac3a7c3a3o-ano-letivo-2013 2014
Danza del fuego
Danza del fuego
Verdadero o falso
Verdadero o falso
Cuando la hierva
Cuando la hierva
Prevencao rodoviaria
Prevencao rodoviaria
Argumentación
Argumentación
Ppt tema6
Ppt tema6
Presentación1
Presentación1
Motivação
Motivação
Project textual sebas
Project textual sebas
Por q usar oliveira
Por q usar oliveira
Guia agua
Guia agua
Similaire à Java类加载器
Java SE 8 技術手冊第 2 章 - 從JDK到IDE
Java SE 8 技術手冊第 2 章 - 從JDK到IDE
Justin Lin
ClassLoader简析
ClassLoader简析
wavefly
2. java introduction
2. java introduction
netdbncku
Servlet & JSP 教學手冊第二版 - 第 2 章:撰寫與設定 Servlet
Servlet & JSP 教學手冊第二版 - 第 2 章:撰寫與設定 Servlet
Justin Lin
如何在 Java App 中導入 Scala
如何在 Java App 中導入 Scala
javatwo2011
JVM 初探
JVM 初探
zyh
千呼萬喚始出來的 Java SE 7
千呼萬喚始出來的 Java SE 7
Justin Lin
反射與類別載入器
反射與類別載入器
Justin Lin
OPM
OPM
goto100
IKVM.NET 深入敵營的 Java
IKVM.NET 深入敵營的 Java
建興 王
Notes of jcip
Notes of jcip
Dai Jun
Maven技术分享
Maven技术分享
wslfh2005
專案啟動與環境設定
專案啟動與環境設定
Shengyou Fan
Java SE 7 技術手冊投影片第 15 章 - 反射器與類別載入器
Java SE 7 技術手冊投影片第 15 章 - 反射器與類別載入器
Justin Lin
Jdk5
Jdk5
Medivh2011
Ant
Ant
Medivh2011
Maven初级培训
Maven初级培训
Cody Zhang
JVM内容管理和垃圾回收
JVM内容管理和垃圾回收
Tony Deng
Java SE 8 技術手冊第 16 章 - 整合資料庫
Java SE 8 技術手冊第 16 章 - 整合資料庫
Justin Lin
webpack 入門
webpack 入門
Anna Su
Similaire à Java类加载器
(20)
Java SE 8 技術手冊第 2 章 - 從JDK到IDE
Java SE 8 技術手冊第 2 章 - 從JDK到IDE
ClassLoader简析
ClassLoader简析
2. java introduction
2. java introduction
Servlet & JSP 教學手冊第二版 - 第 2 章:撰寫與設定 Servlet
Servlet & JSP 教學手冊第二版 - 第 2 章:撰寫與設定 Servlet
如何在 Java App 中導入 Scala
如何在 Java App 中導入 Scala
JVM 初探
JVM 初探
千呼萬喚始出來的 Java SE 7
千呼萬喚始出來的 Java SE 7
反射與類別載入器
反射與類別載入器
OPM
OPM
IKVM.NET 深入敵營的 Java
IKVM.NET 深入敵營的 Java
Notes of jcip
Notes of jcip
Maven技术分享
Maven技术分享
專案啟動與環境設定
專案啟動與環境設定
Java SE 7 技術手冊投影片第 15 章 - 反射器與類別載入器
Java SE 7 技術手冊投影片第 15 章 - 反射器與類別載入器
Jdk5
Jdk5
Ant
Ant
Maven初级培训
Maven初级培训
JVM内容管理和垃圾回收
JVM内容管理和垃圾回收
Java SE 8 技術手冊第 16 章 - 整合資料庫
Java SE 8 技術手冊第 16 章 - 整合資料庫
webpack 入門
webpack 入門
Plus de Fu Cheng
Introduction to Web Components
Introduction to Web Components
Fu Cheng
The Evolution of Java
The Evolution of Java
Fu Cheng
Java SE 7 New Features and Enhancements
Java SE 7 New Features and Enhancements
Fu Cheng
Advanced guide to develop ajax applications using dojo
Advanced guide to develop ajax applications using dojo
Fu Cheng
Ajax应用开发最佳实践
Ajax应用开发最佳实践
Fu Cheng
Advanced JavaScript
Advanced JavaScript
Fu Cheng
Plus de Fu Cheng
(6)
Introduction to Web Components
Introduction to Web Components
The Evolution of Java
The Evolution of Java
Java SE 7 New Features and Enhancements
Java SE 7 New Features and Enhancements
Advanced guide to develop ajax applications using dojo
Advanced guide to develop ajax applications using dojo
Ajax应用开发最佳实践
Ajax应用开发最佳实践
Advanced JavaScript
Advanced JavaScript
Java类加载器
1.
Java类加载器 (class loader)
作者:Cheng Fu 作者:Cheng
2.
了解类加载器的好处 • 更加深入的了解Java语言的核心特性 • 有助于解决常见的ClassNotFoundException
和ClassDefNotFoundError • 满足特殊的加载类的需求 – 安全,保密 • 在JVM中创造隔离的环境,以及保护代码 • 面试或被面试中可能有用 2
3.
Java类加载器简介 • Java中的类加载器(class loader)用来加载
Java字节代码到Java虚拟机(JVM) • 类加载器的引入被认为是Java语言惟一的重要 创新 • 类加载器从JDK 1.0就存在了,最初是为了满足 Applet的需要 3
4.
类加载器的必要性 • Java语言的口号 –
编写一次,到处运行 – 分发Java字节代码即可 • Java语言规范保证字节代码的兼容性 • 类加载器负责完成加载 编译器 类加载器 Java源代码 Java字节代码 Java虚拟机 (.java) (.class) 4
5.
Java类 • Java中的类通过java.lang.Class来表示 • Java中的类加载器通过java.lang.ClassLoader
来表示 • 类加载器的作用就是从字节代码(byte数组) 中生成出来java.lang.Class的实例 5
6.
树状组织结构(1/2) • 类加载器的分类 –
系统提供 • 引导类加载器(bootstrap) – 加载Java核心库,原生代码实现 • 扩展类加载器(extensions) – 加载Java扩展库,在JVM的指定目录查找 • 系统类加载器(system) – 根据Java应用的类路径(classpath)来加载类 – 加载Java应用 – 开发人员提供 • 通过继承java.lang.ClassLoader类来实现 6
7.
树状组织结构(2/2) • 除了引导类加载器之外,所有的类加载器
都有一个父类加载器 – 通过getParent()方法可以获得父类加载器 • 通过这样的组织方式,系统中的类加载器 形成树状结构 • 对于开发人员编写的类加载器,其父类加 载器是加载这个类加载器的类加载器 – 注意:类加载器本身也是Java类,也是需要被 加载的 7
8.
8
9.
代理模式 • 类加载器在尝试自己去查找并加载某个类
之前,会先代理给其父类加载器 – 父类加载器会进一步代理给其父类加载器 • 只有在父类加载器无法加载的时候,才尝 试自己加载 9
10.
判断类是否相同 • JVM对类是否相同的定义是: –
类的全名相同 – 加载此类的类加载器相同 • 同样的字节代码,被不同的类加载器加载 之后,所得到的类是不同的! 10
11.
代理模式的作用 • 代理模式是为了保护Java核心库的类型安全 • 如果不用代理模式
– 所有的Java应用都至少需要引用java.lang.Object – 如果java.lang.Object由应用自己来加载 • JVM中存在多个版本的java.lang.Object类 • 它们之间是不兼容的! • 通过代理模式,Java核心库总是由引导类加 载器来负责加载 11
12.
初始和定义加载器 • 由于代理模式的存在,启动一个类的加载和最终
完成这个类的加载的,可能并不是同一个类加载 器 – 通过调用loadClass()方法来启动类的加载过程 • 初始加载器(initiating loader) – 通过调用defineClass()方法来完成类的定义 • 定义加载器(defining loader) • 得到java.lang.Class对象 • JVM判断类是否相同的时候使用的是定义加载器 • 一个类的定义加载器是它所引用的其它类的初始 加载器 12
13.
线程上下文类加载器 • 线程上下文类加载器(context class
loader) 是为了解决代理模式的问题而引入的 – java.lang.Thread提供的getContextLoader()和 setContextLoader()方法 • Java提供的服务提供者接口(SPI) – Java核心库提供接口 • JDBC,JCE,JNDI,JAXP,JBI – 由第三方来提供实现 13
14.
JAXP示例 • JAXP的接口定义在javax.xml.parsers包中,
包含在Java核心库中 • Apache Xerces提供了JAXP的实现,出现在类 路径(classpath)上 • SPI接口的代码需要使用加载具体的实现类 代理模式无法解决的问题! 14
15.
使用线程上下文类加载器 • Java应用运行的初始线程的上下文类加载器
正是系统类加载器 • SPI代码中通过线程上下文类加载器就可以 完成加载类路径上具体实现类的工作 15
16.
编写自己的类加载器 • 满足特定的加载类的需求
– 从某个网络位置下载Java字节代码 – 加密/解密 – 数字签名 • 继承自java.lang.ClassLoader类 16
17.
java.lang.ClassLoader 方法
说明 loadClass(String name) 加载名称为name的类,返回java.lang.Class findClass(String name) 查找名称为name的类,返回java.lang.Class findLoadedClass(String name) 查找名称为name的已经被加载过的类,返回 java.lang.Class defineClass(String name, 把字节代码转换成Java类,返回java.lang.Class byte[] b, int off, int len) 自己的类加载器实现一般只需要覆写findClass()即可 代理模式的实现封装在loadClass()方法中 17
18.
Web应用中的类加载器 • Web应用中类加载器与一般Java应用不同 • 在Apache
Tomcat中 – 每个Web应用对应自己的类加载器 – 它会首先尝试加载类,找不到再代理给父类加 载器 – 保证Web应用自己的类的优先级高于容器提供 的类 18
19.
处理Web应用依赖的类 • 每个应用自己使用的jar包,放在WEB-
INF/lib目录下面 • 多个应用共享的jar包,放在Web容器的指 定目录下 19
20.
OSGi • OSGi是Java的动态模块系统 • OSGi中的每个模块(bundle)可以依赖其它
模块或是为其它模块所用 – 导入:通过Import-Package声明 – 导出:通过Export-Package声明 • 每个模块由自己的类加载器 • 加载Java核心库的时候代理给父类加载器 20
21.
模块类加载器的代理模式 • 一个模块的类加载器在加载它所导入的类
的时候,会代理给导出此类的模块对应的 类加载器 代理类加载 模块A 模块B 加载 加载 继承自 类A 类B 21
22.
处理模块依赖的类 • 模块单独使用的jar包,放在模块中,通过
Bundle-Classpath声明 • 多个模块共享的jar包,单独创建一个新的 模块,把其中的Java类声明为导出的,其它 模块声明导入这些Java类 22
23.
隔离与保护 • 不同的类加载器为相同名称的类创建了额
外的名称空间 • 相同名称的类可以并存在JVM中 – 保护代码 – 版本控制 23
24.
参考资料 • Java类加载器(classloader)深入探讨 –
http://www.ibm.com/developerworks/cn/java/j- lo-classloader/index.html • Java语言规范 – http://java.sun.com/docs/books/jls/ • OSGi规范 – http://www.osgi.org/Specifications/HomePage 24
Télécharger maintenant