java ClassLoader的学习

java是一门解释执行的语言,由开发人员编写好的java源文件先编译成字节码文件.class形式,然后由java虚拟机(JVM)解释执 行,.class字节码文件本身是平台无关的,但是jvm却不是,为了实现所谓的一次编译,到处执行,sun提供了各个平台的JVM实现--也就是说 jvm不是跨平台的,编译好的字节码文件被放在不同的操作系统平台上的jvm所解释执行,这个章节主要解释一下JVM装载类的机制

1.ClassLoader是个毛东东?

一个类如果要被JVM所调度执行,必须先把这个类加载到JVM内存里,java.lang下有个很重要的类ClassLoader,这个类主要就是用来把指定名称(指定路径下)的类加载到JVM中

2.ClassLoader的分类

主要分4类,见下图橙色部分

JVM类加载器:这个模式会加载JAVA_HOME/lib下的jar包

扩展类加载器:会加载JAVA_HOME/lib/ext下的jar包

系统类加载器:这个会去加载指定了classpath参数指定的jar文件

用户自定义类加载器:sun提供的ClassLoader是可以被继承的,允许用户自己实现类加载器

类加载器的加载顺序如图所示:

3.类加载顺序

JVM并不是把所有的类一次性全部加载到JVM中的,也不是每次用到一个类的时候都去查找,对于JVM级别的类加载器在启动时就会把默认的 JAVA_HOME/lib里的class文件加载到JVM中,因为这些是系统常用的类,对于其他的第三方类,则采用用到时就去找,找到了就缓存起来的, 下次再用到这个类的时候就可以直接用缓存起来的类对象了,ClassLoader之间也是有父子关系的,没个ClassLoader都有一个父 ClassLoader,在加载类时ClassLoader与其父ClassLoader的查找顺序如下图所示

最新文章

  1. io.js入门(一)—— 初识io.js
  2. CodeChef COUNTARI Arithmetic Progressions(分块 + FFT)
  3. IOS UIImageView的contentMode属性
  4. 转载:全球首个微信小程序(应用号)开发教程!通宵吐血赶稿,每日更新!
  5. 不同浏览器JS获取浏览器高度和宽度
  6. 苹果Mac操作系统下怎么显示隐藏文件
  7. Activity Threa创建Window和View分析
  8. 【索引】XBox360玩机心得
  9. 第二章实例:ArrayAdapter结合ListView列表视图
  10. 读取生产环境go语言的最佳实践展示
  11. [html5] 学习笔记-Canvas标签的使用
  12. Apache+mod_encoding解决URL中文编码问题
  13. kafka原理和实践(一)原理:10分钟入门
  14. SqlServer Partition 分区表
  15. 网络通信 --> Linux 五种IO模型
  16. echarts纵坐标使用科学计数法表示
  17. 【code block】局部代码块+构造代码块+静态代码块
  18. hdu 2955 Robberies (01背包)
  19. ORACLE通过SQL将一行数据转换为多行
  20. 『Python CoolBook』Cython

热门文章

  1. HDU 3999 The order of a Tree 二叉搜索树 BST
  2. 一些xcode5.1创建的工程在xcode6.0下不能编译的问题
  3. sort排序中的坑
  4. MySql索引的优缺点
  5. AjaxForm
  6. 导出Private API
  7. SQL 数据库基础语句
  8. OC8_NSData
  9. (转)使用CruiseControl+SVN+ANT实现持续集成之二
  10. 插件笔记——dataTables使用说明