- 1、本文档共12页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Java类加载原理解析
分类: java应用 2010-07-14 14:07 55人阅读 评论(0) 收藏 举报
Java 类加载原理解析 ????????????????????????????????????????
1?????? 基本信息
摘要:
每个 java开发人员对 java.lang.ClassNotFoundExcetpion这个异常肯定都不陌生,这背后就涉及到了 java技术体系中的类加载。 Java的类加载机制是 java技术体系中比较核心的部分,虽然和大部分开发人员直接打交道不多,但是对其背后的机理有一定理解有助于排查程序中出现的类加载失败等技术问题,对理解 java虚拟机的连接模型和 java语言的动态性都有很大帮助。
由于关于 java类加载的内容较多,所以打算分三篇文章简述一下:
第一篇: java类加载原理解析
第二篇:插件环境下类加载原理解析
第三篇:线程上下文类加载器
分类 : 开发技术- J2EE
标签: Java 类加载 类加载器 双亲委派机制 自定义类加载器
作者: 朱兴 ?创建于 2007-6-22 ????????? MSN : zhu_xing@live.cn?
2?????? Java虚拟机类加载器结构简述
2.1??? JVM三种预定义类型类加载器
我们首先看一下 JVM预定义的三种类型类加载器,当一个 JVM 启动的时候, Java 缺省开始使用如下三种类型类装入器:
启动( Bootstrap )类加载器 :引导类装入器是用本地代码实现的类装入器,它负责将 Java_Runtime_Home/lib 下面的类库加载到内存中。由于引导类加载器涉及到虚拟机本地实现细节,开发者无法直接获取到启动类加载器的引用,所以不允许直接通过引用进行操作。
标准扩展( Extension )类加载器 :扩展类加载器是由 Sun 的 ExtClassLoader( sun.misc.Launcher$ExtClassLoader) 实现的。它负责将 Java_Runtime_Home /lib/ext 或者由系统变量 java.ext.dir 指定位置中的类库加载到内存中。开发者可以直接使用标准扩展类加载器。
系统( System )类加载器 :系统类加载器是由 Sun 的 AppClassLoader( sun.misc.Launcher$AppClassLoader)实现的。它负责将系统类路径( CLASSPATH)中指定的类库加载到内存中。开发者可以直接使用系统类加载器。
除了以上列举的三种类加载器,还有一种比较特殊的类型就是线程上下文类加载器 ,这个将在后面单独介绍。
2.2??? 类加载双亲委派机制介绍和分析
?????? 在这里,需要着重说明的是, JVM在加载类时默认采用的是双亲委派 机制。通俗的讲,就是某个特定的类加载器在接到加载类的请求时,首先将加载任务委托给父类加载器,依次递归,如果父类加载器可以完成类加载任务,就成功返回;只有父类加载器无法完成此加载任务时,才自己去加载。关于虚拟机默认的双亲委派机制,我们可以从系统类加载器和标准扩展类加载器为例作简单分析。
????????????????? ???????????????? 图一 ?标准扩展类加载器继承层次图
???????????????????????????图二 ?系统类加载器继承层次图
?????? 通过图一和图二我们可以看出,类加载器均是继承自 java.lang.ClassLoader抽象类。我们下面我们就看简要介绍一下 java.lang.ClassLoader中几个最重要的方法 :
//加载指定名称(包括包名)的二进制类型,供用户调用的接口
public Class? loadClass (String name) throws ClassNotFoundException{//…}
//加载指定名称(包括包名)的二进制类型,同时指定是否解析(但是,这里的 resolve参数不一定真正能达到解析的效果 ~_~),供继承用
protected synchronized Class? loadClass (String name, boolean resolve) throws ClassNotFoundException{//…}
//findClass方法一般被 loadClass方法调用去加载指定名称类,供继承用
protected Class? findClass (String name) throws ClassNotFoundException {//…}
//定义类型,一般在 findClass方法中读取到对应字节码后调用,可以看出不
文档评论(0)