设为首页 加入收藏

TOP

Javaclassloader的体系结构
2014-11-04 11:15:11 来源: 作者: 【 】 浏览:38
Tags:Javaclassloader 体系结构

  java classLoader 体系结构(转)


  原文出处:http://blog.chenlb.com/2009/06/java-classloader-architecture.html


  Bootstrap ClassLoader/启动类加载器


  主要负责jdk_home/lib目录下的核心 api 或 -Xbootclasspath 选项指定的jar包装入工作。


  Extension ClassLoader/扩展类加载器


  主要负责jdk_home/lib/ext目录下的jar包或 -Djava.ext.dirs 指定目录下的jar包装入工作。


  System ClassLoader/系统类加载器


  主要负责java -classpath/-Djava.class.path所指的目录下的类与jar包装入工作。


  User Custom ClassLoader/用户自定义类加载器(java.lang.ClassLoader的子类)


  在程序运行期间, 通过java.lang.ClassLoader的子类动态加载class文件, 体现java动态实时类装入特性。


  类加载器的特性:


  每个ClassLoader都维护了一份自己的名称空间, 同一个名称空间里不能出现两个同名的类。


  为了实现java安全沙箱模型顶层的类加载器安全机制, java默认采用了 " 双亲委派的加载链 " 结构。


  类图中, BootstrapClassLoader是一个单独的java类, 其实在这里, 不应该叫他是一个java类。因为,它已经完全不用java实现了。它是在jvm启动时, 就被构造起来的, 负责java平台核心库。


  自定义类加载器加载一个类的步骤


  ClassLoader 类加载逻辑分析, 以下逻辑是除 BootstrapClassLoader 外的类加载器加载流程:


  // 检查类是否已被装载过


  Class c = findLoadedClass(name);


  if (c == null ) {


  // 指定类未被装载过


  try {


  if (parent != null ) {


  // 如果父类加载器不为空, 则委派给父类加载


  c = parent.loadClass(name, false );


  } else {


  // 如果父类加载器为空, 则委派给启动类加载加载


  c = findBootstrapClass0(name);


  }


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Java或web中解决所有路径问题 下一篇开发JAVA编程中字符串分割的两种..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: