博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
类加载机制
阅读量:3963 次
发布时间:2019-05-24

本文共 988 字,大约阅读时间需要 3 分钟。

一、java的类加载机制

1、在java程序中,类是如何被使用的?

程序执行过程中,如果要使用某个类,前提是该类的字节码也就是.class文件的内容必须要加载至内存中,完成加载的任务由jvm来进行。
在这里插入图片描述

2、类被谁加载?

Java中提供了多种类加载器,不同的类由这些类加载分别进行加载。
类被加载后,无论创建了多少个对象,对象的类的Class对象只有一个。
自定义类的加载器是: AppClassLoader 应用类加载器
扩展类的类加载器: ExtClassLoader 扩展类加载器
引导类加载器: null(BootstrapClassLoader) 引导类加载器,这是jvm中最基础的加载器由c语言写的,所以在java中无法得到它的类型

3、各种类加载器的加载对象

应用类加载器负责加载自定义的类;
扩展类加载器负责加载jre 中 ext 目录下的类
在这里插入图片描述

引导类加载加载器负责加载rt.jar,toos.jar包中的类,这些类是java程序中最基础的类,由jdk提供。

在这里插入图片描述

在这里插入图片描述

4、以上三种加载器之间的关系

System.out.println("Message类的加载器的父亲是:"+Message.class.getClassLoader().getParent());System.out.println("SunEc类的加载器的父亲是:"+SunEC.class.getClassLoader().getParent());

三种类加载器具有层次关系

在这里插入图片描述

5、自定义类加载器

在 java程序中,判断两个对象是否是同一对象的依据,首先要看两个对象是否由同一类加载器加载,如果不是那么两个对象一定不是同一对象。
Java的web应用程序需要应用服务器的支持,tomcat服务器是当前使用最广泛的。有时候需要在同一服务器机器上安装多个web应用程序,在这种环境下,很多javaEE的api以及用户定义的Servlet,jsp等这些如果采用 java的原生加载器加载可能会发生混乱,所以tomcat自身定义了一些自已的加载器来完成对一些特殊类的加载。
6、如何自定义类加载器

Class ClassLoaderjava.lang.Object java.lang.ClassLoader
自定义的类加载器需要继承ClassLoader 这个类来产生,必须要重写findClass的方法。

转载地址:http://azzki.baihongyu.com/

你可能感兴趣的文章
SQL - SQL Server查询近7天的连续日期
查看>>
SQL - SQL Server中如何取年、月、日 -DATEPART函数
查看>>
SQL - SQL Server 一列或多列重复数据的查询,删除
查看>>
NET - .NET Core WebAPI + Vue + Axios 导出Excel / CSV
查看>>
NET - NET Core Quartz.net开源作业调度框架使用详解
查看>>
NET - NET Core quartz.net 时间表达式----- Cron表达式详解
查看>>
NET - .NET Core 之 Abp Audit-Logging
查看>>
NET - .NET Core 之 Abp AuditLog 将不同的Controller实体的审计日志存储到不同的Table
查看>>
NET - .NET Core 之 Azure Key Vault 密钥保管库的使用
查看>>
NET - .NET Core 之 Abp 整合 Quartz
查看>>
Docker - Docker Desktop(WSL2)修改镜像存储位置
查看>>
NET - NET Core使用Log4net的SqlServer AdoNetAppender 报程序集错误
查看>>
NET - NET Core中使用Log4net输出日志到数据库中去
查看>>
NET - NET Core 迁移nuget包缓存到指定位置
查看>>
Spring - SpringBoot 集成 swagger2
查看>>
SQL - 深入理解MySQL索引之B+Tree
查看>>
SQL - 数据库索引原理,及MySQL索引类型
查看>>
Spring - Dubbo的实现原理
查看>>
Spring - Dubbo 扩展点详解
查看>>
Spring - Hystrix原理与实战
查看>>