JAVA学习之JVM加载class
2012-03-19 21:44
441 查看
1.java中的所有类,必须被装载到JVM中才能运行,这个装载工作是由JVM中的类加载器完成的,类加载器所做的工作实质是就是将类加载到JVM中。
2.java中部高的类大致分为三种:
1)系统类
2)扩展类
3)由程序员自定义的类
3.类装载方式分为两种:
1)隐式装载:程序在运行过程中当遇到通过new()等方式生成对象时,隐式调用类加载器加载对应的类到JVM中;
2)显式装载:通过class.forname()等方法,显式加载需要的类;
4.java类加载器:三层结构
Bootstrap Loader--负责加载系统类
|
--ExtClassLoader--负责加载扩展类
|
--AppClassLoader--负责加载应用类
在这里java采用了委托模型机制,这个机制简单来讲,就是“类装载器有载入类的需求时,会先请示其Parent使用其搜索路径帮忙载入,如果Parent 找不到,那么才由自己依照自己的搜索路径搜索类”。
运行结果:
AppClassLoader
ExtClassLoader
Null
由于Bootstrap Loader是用C++语言写的,依java的观点来看,逻辑上并不存在Bootstrap Loader的类实体,所以在java程序代码里试图打印出其内容时,我们就会看到输出为null。
5.JVM加载class文件的原理机制:
1)装载:查找和导入Class文件
2)链接:检查文件是否正确,给变量分配空间,将符号引用转成直接引用;
3)初始化:对静态变量,静态代码块执行初始化工作;
类装载器ClassLoader是一个抽象类,类装载工作由ClassLoader和其子类负责,会产生三个ClassLoader:根装载器。ExtClassLoader、AppClassLoader;其中,根目录不是ClassLoader的子类,负责装载JRE的核心类库;ExtClassLoader是ClassLoader的子类,负责装载JRE扩展目录ext下得jar类包;AppClassLoader是ExtClassLoader的子类,负责装载classpath路径下得类包。
2.java中部高的类大致分为三种:
1)系统类
2)扩展类
3)由程序员自定义的类
3.类装载方式分为两种:
1)隐式装载:程序在运行过程中当遇到通过new()等方式生成对象时,隐式调用类加载器加载对应的类到JVM中;
2)显式装载:通过class.forname()等方法,显式加载需要的类;
4.java类加载器:三层结构
Bootstrap Loader--负责加载系统类
|
--ExtClassLoader--负责加载扩展类
|
--AppClassLoader--负责加载应用类
在这里java采用了委托模型机制,这个机制简单来讲,就是“类装载器有载入类的需求时,会先请示其Parent使用其搜索路径帮忙载入,如果Parent 找不到,那么才由自己依照自己的搜索路径搜索类”。
Public class Test{ Public static void main(String[] arg){ ClassLoader c = Test.class.getClassLoader(); //获取Test类的类加载器 System.out.println(c); ClassLoader c1 = c.getParent(); //获取c这个类加载器的父类加载器 System.out.println(c1); ClassLoader c2 = c1.getParent();//获取c1这个类加载器的父类加载器 System.out.println(c2); } }
运行结果:
AppClassLoader
ExtClassLoader
Null
由于Bootstrap Loader是用C++语言写的,依java的观点来看,逻辑上并不存在Bootstrap Loader的类实体,所以在java程序代码里试图打印出其内容时,我们就会看到输出为null。
5.JVM加载class文件的原理机制:
1)装载:查找和导入Class文件
2)链接:检查文件是否正确,给变量分配空间,将符号引用转成直接引用;
3)初始化:对静态变量,静态代码块执行初始化工作;
类装载器ClassLoader是一个抽象类,类装载工作由ClassLoader和其子类负责,会产生三个ClassLoader:根装载器。ExtClassLoader、AppClassLoader;其中,根目录不是ClassLoader的子类,负责装载JRE的核心类库;ExtClassLoader是ClassLoader的子类,负责装载JRE扩展目录ext下得jar类包;AppClassLoader是ExtClassLoader的子类,负责装载classpath路径下得类包。
相关文章推荐
- java JVM 加载class的顺序
- java反射并不是什么高深技术,面向对象语言都有这个功能,而且功能也很简单,就是利用jvm动态加载时生成的class对象
- JVM学习序列之一:Java Class文件结构分析
- JVM深入学习-Java代码执行篇二-[装载Class ]
- Java提高篇——JVM加载class文件的原理机制
- Java提高篇——JVM加载class文件的原理机制
- Java - 描述一下JVM加载class文件的原理机制?
- JVM学习序列之一:Java Class文件结构分析
- java学习Class动态加载
- Java原理 JVM加载class文件的原理机制
- Java学习笔记 - JVM加载类纯语言描述
- Java中class是如何加载到JVM中的(Class.forName("name")和ClassLoader.loadClass("name")的区别)
- 【JVM参数】Java启动时,显示class是从哪个Jar中加载的
- Java中的基础----JVM加载class文件的原理
- JVM 深入学习:Java 解析 Class 文件过程解析
- 【java JVM】JVM中类的加载,加载class文件的原理机制
- Java中class是如何加载到JVM中的(Class.forName("name")和ClassLoader.loadClass("name")的区别)
- JAVA面试常备题、JVM加载class文件的原理机制
- Java提高篇——JVM加载class文件的原理机制
- Java学习之类加载全过程_JVM内存分析_反射机制核心原理_常量池理解