JAVA语言为什么要设计类加载器?

静态加载和动态加载:

        在讲类加载器之前,我们先谈一谈静态加载和动态加载。C++就是一种静态加载语言,也是静态编译语言,而JAVA是一种动态加载语言。

        静态加载语言不需要类加载器,因为它们在编译时将所有的代码和资源链接到最终的可执行文件中,C++编译成的可执行文件包含了完整的类信息,因为C++是一种静态编译语言,编译器会将源代码直接编译成机器码,生成可执行文件时会包含完整的类结构,包括类的内存布局、方法的具体实现等。运行时,操作系统会将该文件的内容加载到内存中,并将控制权转移给程序的入口点,开始执行程序,无需在运行时进行动态加载,这里说到的“所有代码和资源”就包括你项目用得到的类以及用不到的类(或者不常用的类)全部在编译阶段链接进去,这样做的优点就是“快”,运行时不需要再去加载其他类了,就很快;缺点就是会造成资源浪费,因为他直接在项目编译阶段都把用得到的类用不到的类全加载进去了。

        而JAVA是一种动态加载语言,在Java中,编译器将Java源代码编译成字节码文件(.class文件),字节码文件包含了类的结构信息,如类名、方法名、字段等,但不包含完整的类结构以及类的内存布局、方法的具体实现等。类的完整结构只会在程序运行时需要到该类才会由类加载器加载进JVM中。需要注意的是,类加载是按需加载的,也就是说,只有在程序运行时首次使用到某个类时,才会触发类的加载过程。这种延迟加载的机制可以提高应用程序的启动速度和内存占用效率。

        综上所述,字节码文件包含了类的结构信息,但类的加载是在程序运行时进行的。类加载器负责将字节码文件加载到内存中,并生成对应的类对象,这样程序就可以使用这个类了。这就引出为什么JAVA语言要设计类加载器了!

类加载器的分类:

讲完了JAVA语言为什么要设计类加载器之后,我们来谈谈JAVA中的类加载器的类别。

Java的类加载器主要有以下几种:

  1. 启动类加载器(Bootstrap Class Loader):是Java虚拟机自身的一部分,负责加载Java的核心类,如java.lang包下的类。它是由操作系统实现的,通常用本地代码(Native Code)实现。

  2. 扩展类加载器(Extension Class Loader):负责加载Java的扩展类库,如java.ext.dirs系统属性所指定的目录中的类。

  3. 应用程序类加载器(Application Class Loader):也称为系统类加载器,负责加载应用程序的类,即开发者自己编写的类。

除了以上的类加载器,Java还支持自定义的类加载器,用于实现一些特殊的加载需求,如动态加载、远程加载等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值