六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 23|回复: 0

java 类装载器学习笔记

[复制链接]

升级  2.67%

14

主题

14

主题

14

主题

秀才

Rank: 2

积分
54
 楼主| 发表于 2013-2-4 20:02:00 | 显示全部楼层 |阅读模式
java  类装载器
jvm 主要包含三部分 : 1.类装载器  2.类效验器  3.类解释器

类装载器 :
1.启动类装载器(Bootstrap Loader:C编写的):用特定于本地操作系统的代码来实现,属于java虚拟机的内核,用于jvm启动时装载java基础类
库(即rt.jar文件中的类).
2.标准扩展类(载器(Extended Loader:java编写的):负责装载存放载<JAVA_HOME>/jre/lib/ext目录下的jar包中的类
3.类路径装载器(AppClassLoader:java编写的):负责加载应用程序的启动执行类

当我们的某个类MyClass.class请求加载时,JVM会看 启动类装载器,标准扩展类装载器 这2个加载器有没有加载这个类,如果加载了就放弃当前
的这个类加载器,由于之前没有使用启动类装载器,标准扩展类装载器加载这个类,所有JVM还会用类路径装载器加载.
 
/*测试你所使用的 JVM 的 ClassLoader */ public class LoaderSample{        public static void main(String[] args)  {               Class c;               ClassLoader cl;                             cl = ClassLoader.getSystemClassLoader();               System.out.println(cl);                             while (cl != null)  {                      cl = cl.getParent();                      System.out.println(cl);                      }                 try {                      c = Class.forName(“java.lang.Object”);                      cl = c.getClassLoader();                      System.out.println(“java.lang.Object’s loader is ” + cl);                       c = Class.forName(“LoaderSample”);                      cl = c.getClassLoader();                      System.out.println(“LoaderSample’s loader is ” + cl);               }               catch (Exception e)               {                      e.printStackTrace();               }        }  
输出结果:            
 第一行表示,系统类装载器实例化自类 sun.misc.Launcher$AppClassLoader
 第二行表示,系统类装载器的 parent 实例化自类 sun.misc.Launcher$ExtClassLoader
 第三行表示,系统类装载器 parent 的 parent 为 bootstrap
 第四行表示,核心类 java.lang.Object 是由 bootstrap 装载的
 第五行表示,用户类 LoaderSample 是由系统类装载器装载的
 
-------------------------------------------------------------------------------------------------
相关:
1.对于每一个要使用的类首要的任务就是将类的字节码数据装载进来,载入内存中对应一个 java.lang.Class实例.
2. 面向对象中任何事物都可以用一个类来描述,现在我们用一个类去描述另一个类,这个类就是java.lang.Class,我们由三种方法可以获取这
个对象,1.类名,class 2.对象.getClass() 3.Class,forName(类名)
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表