Java的类加载机制

7-15 2,287 views

Java包含两种基本的类加载器,分别是启动类加载器和用户自定义类加载器。启动类加载器负责加载核心Java API的class文件,而用户自定义类加载器负责加载其他class文件,如用于安装或下载标准扩展class文件的标准扩展类加载器,在类路径中发现类库class文件的类路径类加载器。
Java中类加载机制采用委派双亲模式。启动类加载器、标准扩展类加载器、类路径类加载器等组成双亲-孩子关系链,如图所示。
在委派双亲模式下,当需要加载一个类时,类加载器首先将加载请求传递给它的双亲加载器,如此直至将加载请求向上传递给启动类加载器。若启动类加载器可以加载,则由其加载,若启动类加载器无法加载,则将加载请求传递给它的孩子加载器,如此直至将加载请求向下传递给可以加载的类加载器并实现加载。
例如:
22
当需要加载java.util.HashMap类时,首先将加载请求向上传递给启动类加载器,由于核心Java API包含java.util.HashMap,因此由启动类加载器完成加载即可。
而当需要加载com.wt.Test类时,首先仍将加载请求向上传递给启动类加载器,由于核心Java API不包含com.wt.Test,因此加载请求又向下传递给标准扩展类加载器,而由于属于标准扩展也不包含com.wt.Test,因此加载请求又向下传递给类路径类加载器。若com.wt.Test在类路径下,则由类路径类加载器完成加载,若com.wt.Test不在类路径下,则再由网络类加载器尝试从网络中实现加载。
采用委派双亲模式实现类加载有利于类安全。例如,对于java.util.HashMap,可以保证由启动类加载器加载,采用核心Java API中的类,而避免由用户自定义类加载器加载时,可能采用被恶意修改的同名类。
参考:《深入Java虚拟机》,Bill Venners 著

基于WebSocket实现微信小程序的消息推送

微信小程序支持通过基于WebSocket进行消息推送,提供了相应的API,例如创建连接示例代码: JavaScript wx.connectSocket({ ...

阅读全文

基于nginx-sticky-module-ng实现会话保持(Sticky Sessions)

对服务进行集群部署,前端进行负载均衡时,需要实现会话保持,对于同一会话的多个请求,通过集群中的一个节点来提供服务。系统的部署结构如图所示,通过Resin...

阅读全文

ActiveMQ基于Zookeeper和LevelDB实现Master/Slave

ActiveMQ的Master/Slave目前支持三种实现方式: 1)Shared File System Master Slave; 2)JDBC Master Slave; 3)Replicated LevelDB Store。 对于第三种方...

阅读全文