JVM类加载过程-Loading

发布于:2024-11-23 ⋅ 阅读:(246) ⋅ 点赞:(0)

一、Class对象的生命周期

 .class文件是如何加载到内存中:.class文件是ClassLoader通过IO将文件读到内存,再通过双亲委派模型进行Loading,经过Linking、Initializing,代码接口调用等一系列操作后,进行GC,组成完整的生命周期;

二、双亲委派模型(Loading的过程):

1、类加载器的层级及说明:

2、类加载器层级代码验证:
  • 查看一个对象使用哪个ClassLoader进行类加载的:
  public static void main(String[] args) {
        // 引导类加载器,打印结果为null
        // 当获取类加载器返回null时,说明当前类的类加载器是Bootstrap类加载器,也就是最顶层的类加载器
        //最顶层的Bootstrap类加载器加载的是JDK核心的类,C++实现的
        System.out.println("Bootstrap ClassLoader Name:" + String.class.getClassLoader());
        //HKSCS的包是在charsets.jar包下:sun.awt.HKSCS
        System.out.println("Bootstrap ClassLoader Name:" + HKSCS.class.getClassLoader());

        //扩展类加载器,jdk路径下C:\Program Files\Java\jdk1.8.0_212\jre\lib\ext的jar包里面的类是由Extension ClassLoader进行加载的
        System.out.println("Extension ClassLoader Name:" + DNSNameService.class.getClassLoader());

        //应用程序类加载器,程序员自己写的类由AppClassLoader进行加载
        System.out.println("App ClassLoader Name:" + UserController.class.getClassLoader());

      //自定义类加载器,继承ClassLoader类,重写loadClass方法
        System.out.println("Custom ClassLoader Name:" + MyClassLoader.class.getClassLoader());


    }
  • 父加载器≠父类(),父加载器和父类(继承关系)不是一个概念

父加载器

(1)当使用子级类加载器去加载时,会在子类加载器的加载缓存中查找该类是否已经被加载过,


网站公告

今日签到

点亮在社区的每一天
去签到