黑马程序员技术交流社区
标题:
ClassLoader如何加载class的?
[打印本页]
作者:
章小东
时间:
2012-8-5 22:11
标题:
ClassLoader如何加载class的?
今天学了类加载器,听的不是很明白,谁来帮我解答下ClassLoader是如何加载Class的。谢谢
作者:
hello world
时间:
2012-8-5 22:22
类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对象,用来封装类在方法区内的数据结构
分析.JPG
(18.01 KB, 下载次数: 25)
下载附件
2012-8-5 22:21 上传
作者:
刘悦
时间:
2012-8-5 22:32
不同的CLASS由不同的ClassLoader负责加载
一个JVM虚拟机里默认的CLASSLOADE有Bootstrap ClassLoader、App ClassLoader、Extension ClassLoader,
需要注意的是,Bootstrap ClassLoader是JVM级别的,是用C++编写,比较特殊,一般咱都看不到,值是NULL。
而Extension ClassLoader、App ClassLoader都是java类。
在启动的时候,JVM先启动Bootstrap ClassLoader,然后再初始化sun.misc.Launcher ,然后由sun.misc.Launcher初始化Extension ClassLoader、App ClassLoader。
在加载一个类时,首先会由Bootstrap ClassLoader先进行寻找,找不到了才再由Extension ClassLoader寻找,最后才是App ClassLoader。
至于再具体的过程,本人就才疏学浅了,只能拜请高人指点了~~~
希望能够帮助到楼主吧,版主也幸苦了~~~
作者:
胡文凡
时间:
2012-8-5 22:40
Java程序(class文件)并不是本地的可执行程序。当运行Java程序时,首先运行JVM(Java虚拟机),然后再把Java class加载到JVM里头运行,负责加载Java class的这部分就叫做Class Loader.
JVM本身包含了一个ClassLoader称为Bootstrap ClassLoader,和JVM一样,BootstrapClassLoader是用本地代码实现的,它负责加载核心JavaClass(即所有java.*开头的类)。另外JVM还会提供两个ClassLoader,它们都是用Java语言编写的,由BootstrapClassLoader加载;其中Extension ClassLoader负责加载扩展的Javaclass(例如所有javax.*开头的类和存放在JRE的ext目录下的类),ApplicationClassLoader负责加载应用程序自身的类。 当运行一个程序的时候,JVM启动,运行bootstrapclassloader,该ClassLoader加载java核心API(ExtClassLoader和AppClassLoader也在此时被加载),然后调用ExtClassLoader加载扩展API,最后AppClassLoader加载CLASSPATH目录下定义的Class,这就是一个程序最基本的加载流程。
作者:
章小东
时间:
2012-8-5 22:57
不好意思。刚速度卡。不小心发了两次,问题已解决
作者:
瞿乐
时间:
2012-8-5 23:02
哈哈,以前我也不懂,学习了~~
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2