Java类加载机制

一.什么是Java类加载

     开发JavaWeb应用,编译器会把写好的源代码(*.java)编译成可执行文件(*.class),程序运行的时候虚拟机(JVM)会将这些可执行文件从磁盘加入内存中,这个过程就是类加载。

    

二.java类加载器

    主要作用就是加载.class文件。

    java中类加载器主要分为两类。

         1.JDK提供的类加载器。

         2.自定义加载器。

    JDK提供的类加载器

        1.bootStrapClassLoader

              启动类加载器,加载JVM自身需要的核心类库,类的加载是通过C语言实现,

              加载目录:<JAVA_HOME>/lib路径下的核心类库或-Xbootclasspath参数指定的路径下的jar包

              Bootstrap启动类加载器只加载包名为java、javax、sun等开头的类

        2.extensionClassLoader

               扩展类加载器,由Java语言实现的,是Launcher的静态内部类,

               加载目录:<JAVA_HOME>/lib/ext目录下或者由系统变量-Djava.ext.dir指定位路径中的类库,开发者可以直接使用标准                   扩展类加载器。

        3.appClassLoader

              系统加载器,它负责加载系统类路径java -classpath-D java.class.path 指定路径下的类库,也就是我们经常用到                的classpath路径。

   

     类加载加载方式:

          1.隐式加载:通过new方式创建的对象会隐式的通过类加载器加载类到JVM中

          2.动态加载:通过class.forName(),显示加载(反射机制)。

      加载时机:

          程序启动时JVM只会把JVM所需的部分类加入内存中,其他类在需要使用的时候才会通过加载器加入内存中,

          节省了内存的开销。

       加载原则:

           1.双亲委派原则

            2.单一加载原则

            3.可见性

        要将一个类加载到JVM中,需要用种类加载器进行加载?

             当类加载器想要将一个类加载到内存中,首先会请求父类加载器加载,如果父类加载器还有父类加载器,就请求顶级父类加载器,进行加载,如果父类加载器们都无法加载的话,才会使用自身加载器进行加载。如果不行就向下传递委托任务,由其子类加载器进行加载。

      好处:避免重复加载。(一个加载器只会加载类一次)  

           

       加载过程

         

             1.加载:查找导入.class文件

             2.链接:

                 1.验证:检查.class文件数据正确性

                 2.准备:给类的静态变量分配使用空间

                 3.解析:将符号引用转成直接引用

              3.初始化:对静态变量,静态代码块进行初始化

 

      自定义加载器:

         1.继承java.lang.ClassLoader

         2.重写父类的findClass方法 (就是找.class文件的位置)

   

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值