Java面试必问:类加载过程与类加载器

简介: Java面试必问:类加载过程与类加载器

一、类加载过程



先说一下类的生命周期吧


加载、验证、准备、解析、初始化、使用、卸载


类的加载过程也发生在类的生命周期中,其实就是他的前五步:


1、加载

查找加载类的二进制数据(Class文件)

其中,在方法区中存放类的信息;在堆中存放Class文件对应的类实例


2、验证

确保加载的类信息是正确的


3、准备

为类的静态变量进行初始化,分配空间并赋予初始值


4、解析

是将符号引用转换为直接引用


5、初始化

JVM对类进行初始化,对静态变量赋予正确的值


面试中说清楚每一步是干嘛的基本上就行了。


二、类加载器



我们首先随便创建一个类,看一下当前类的类加载器是什么

@Test
    public void test(){
        ClassLoader classLoader = this.getClass().getClassLoader();
        System.out.println(classLoader);
    }

5f53d1be0bdd46a2807768ec6ae5077d.png


再看看他的上级

@Test
    public void test(){
        ClassLoader classLoader = this.getClass().getClassLoader();
        System.out.println(classLoader);
        System.out.println(classLoader.getParent());
    }


9190a2e1aec34efa87637d6ff7af729c.png


再往上看:

System.out.println(classLoader.getParent().getParent());


4b63fc072609466b9ab4898145276630.png


显示为null,是没有了吗?并不是的。其实最高的加载器叫做BootStrapClassLoader,是用C语言写的,所以打印不出来。


那么我们就可以总结一下这些加载器了,由上到下:


1、 BootStrapClassLoader        加载的其实是所有类路径为 java.* 的类


2、ExtClassLoader                    加载的其实是所有类路径为 javax.* 的类


3、AppClassLoader                   加载用户自定义的类


4、用户自定义类加载器


参考:Java面试必知必会.Java虚拟机.02.类加载机制_哔哩哔哩_bilibili


相关文章
|
6天前
|
安全 Java 数据建模
Java记录类:简化数据载体的新选择
Java记录类:简化数据载体的新选择
161 101
|
6天前
|
安全 Java 开发者
Java记录类:简化数据载体的新方式
Java记录类:简化数据载体的新方式
161 100
|
1月前
|
安全 IDE Java
Java记录类型(Record):简化数据载体类
Java记录类型(Record):简化数据载体类
292 120
|
1月前
|
缓存 安全 Java
Java反射机制:动态操作类与对象
Java反射机制是运行时动态操作类与对象的强大工具,支持获取类信息、动态创建实例、调用方法、访问字段等。它在框架开发、依赖注入、动态代理等方面有广泛应用,但也存在性能开销和安全风险。本文详解反射核心API、实战案例及性能优化策略,助你掌握Java动态编程精髓。
|
1月前
|
存储 安全 Java
Java集合框架(一):List接口及其实现类剖析
本文深入解析Java中List集合的实现原理,涵盖ArrayList的动态数组机制、LinkedList的链表结构、Vector与Stack的线程安全性及其不推荐使用的原因,对比了不同实现的性能与适用场景,帮助开发者根据实际需求选择合适的List实现。
|
2月前
|
Java API
深入解析Java API中Object类的功能
了解和合理运用 Object类的这些方法,对于编写可靠和高效的Java应用程序至关重要。它们构成了Java对象行为的基础,影响着对象的创建、识别、表达和并发控制。
63 0
|
存储 Java
【IO面试题 四】、介绍一下Java的序列化与反序列化
Java的序列化与反序列化允许对象通过实现Serializable接口转换成字节序列并存储或传输,之后可以通过ObjectInputStream和ObjectOutputStream的方法将这些字节序列恢复成对象。
|
10月前
|
存储 算法 Java
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?
本文详解自旋锁的概念、优缺点、使用场景及Java实现。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?
|
10月前
|
存储 缓存 算法
面试官:单核 CPU 支持 Java 多线程吗?为什么?被问懵了!
本文介绍了多线程环境下的几个关键概念,包括时间片、超线程、上下文切换及其影响因素,以及线程调度的两种方式——抢占式调度和协同式调度。文章还讨论了减少上下文切换次数以提高多线程程序效率的方法,如无锁并发编程、使用CAS算法等,并提出了合理的线程数量配置策略,以平衡CPU利用率和线程切换开销。
面试官:单核 CPU 支持 Java 多线程吗?为什么?被问懵了!