全面解析Java类加载器

首先知道我们写的.Java源码文件,经过javac.exe编译后成为了.class文件,.class文件中描述了类的各种信息,最终都需要加载到虚拟机之后才能运行和使用。而虚拟机如何加载这些.class文件?.class文件的信息进入到虚拟机后会发生什么变化?下面我们就来了解一下java类加载的过程:
我们写的类,首先会编译成字节码文件,然后通过Java 中的类加载器负责将我们需要使用的类,加载进内存。而类加载器大致可以分成两类,一类是系统提供的,另外一类则是由 Java 应用开发人员编写的。
当然jvm启动的时候,并不是一次性加载所有的类,而是根据需要动态去加载类,主要分为隐式加载和显示加载。
隐式加载:程序代码中不通过调用ClassLoader来加载需要的类,而是通过JVM类自动加载需要的类到内存中。例如,当我们在类中继承或者引用某个类的时候,JVM在解析当前这个类的时,发现引用的类不在内存中,那么就会自动将这些类加载到内存中。
  显示加载:代码中通过Class.forName(),this.getClass.getClassLoader.LoadClass(),自定义类加载器中的findClass()方法等。

  1. 引导类加载器(bootstrap class loader):

    它用来加载 Java 的核心库(jre/lib/rt.jar),是用原生C/C++代码来实现的,并不继承自java.lang.ClassLoader。加载扩展类和应用程序类加载器,并指定他们的父类加载器,因为不是java编写,所以在java中并无法展现,也获取不到。 但是我们可以通过简单代码来查看它所负责加载类的路径:
    package test;
    public class Test01{
    public static voidmain(String[]args){
    System.out.println(System.getProperty(“sun.boot.class.path”));
    }
    }

打印结果如下:

D:\ develop\Java\jdk1.8.0_20\jre\lib\resources.jar;D:\Program
Files\Java\jdk1.8.0_20\jre\lib\rt.jar;D:\Program
Files\Java\jdk1.8.0_20\jre\lib\sunrsasign.jar;D:\Program
Files\Java\jdk1.8.0_20\jre\lib\jsse.jar;D:\Program
Files\Java\jdk1.8.0_20\jre\lib\jce.jar;D:\Program
Files\Java\jdk1.8.0_20\jre\lib\charsets.jar;D:\Program
Files\Java\jdk1.8.0_20\jre\lib\jfr.jar;D:\Program

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值