java程序员面试金典–面试第一题

谈谈jvm的classloader

jvm classloader

classloader是jvm实现的一部分,只用于实现类的加载动作,但是他的作用远远不限于加载阶段
比如确定一个类的唯一性,需要类本身和类加载器共同确定。相同的类,但加载器不同就不能说两个类相等
比如同样一块泥土。你把放到砖窑里,他就变成了砖,放到瓷器窑就是瓷器。
从java虚拟机角度讲只有两种类加载器。一种bootstrap classloader(启动类加载器)另一种叫其他的类加载器
再细化一点是bootstrap classloader(启动类加载器) extension classloader(扩展类类加载器),appplication classloader
(应用程序类加载器)

a. Bootstrap ClassLoader/启动类加载器

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

 

b. Extension ClassLoader/扩展类加载器

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

 

c. application ClassLoader/系统类加载器

主要负责java -classpath/-Djava.class.path所指的目录下的类与jar包装入工作.    
一般默认的这个类加载器

双亲委派模型

三个类加载器相互协助,存在层次关系。这种关系叫做双亲委派模型

image

如图:工作流程如下,如果收到一个类加载器收到一个类的加载请求。 首先他不会自己做。而是交给自己的父亲类加载器
简直是坑爹啊。如果父类类加载器能加载。就不需要自己加载。只有当父类不能加载才自己加载


虽然这种方式,在人理上很不公平,但是却解决了一个很重要的问题。如果不使用双亲委派模型
,那么创建一个Object的类,放在程序的classpath下,这样系统中将会出现多个不同的object类
简书责编内容来自:简书 (源链) | 更多关于

阅读提示:酷辣虫无法对本内容的真实性提供任何保证,请自行验证并承担相关的风险与后果!
本站遵循[CC BY-NC-SA 4.0]。如您有版权、意见投诉等问题,请通过eMail联系我们处理。
酷辣虫 » 综合编程 » java程序员面试金典–面试第一题

喜欢 (0)or分享给?

专业 x 专注 x 聚合 x 分享 CC BY-NC-SA 4.0

使用声明 | 英豪名录