JVM面试题--类加载器

什么是类加载器,类加载器有哪些

类加载子系统,当java源代码编译为class文件之后,由他将字节码装载到运行时数据区

BootStrap ClassLoader

启动类加载器或者叫做引导类加载器,是用c++实现的,嵌套在jvm内部,主要是用来加载java的核心库的

ExtClassLoader

拓展类加载器,主要是加载jdk安装目录下,jre下的lib下的ext,也就是拓展目录,加载其中的jar包,如果用户把自己的文件也放到当前目录下,也会自动使用加载器来加载这些类

AppClassLoader

应用类加载器,负责加载的是环境变量,同时他也是默认的类加载器,一般来说java应用的类都是由它来完成加载的

CustomizeClassLoader

自定义类加载器,加载自定义配置

什么是双亲委派模型?

JVM为什么采用双亲委派机制?

类装载的执行过程?

类从加载到虚拟机中开始,直到卸载为止,它的整个生命周期包括了:加载、验证、准备、解析、初始化、使用和卸载这7个阶段。其中,验证、准备和解析这三个部分统称为连接(linking)

加载

当Person类被加载后,就会存储到运行时数据区的两块区域进行存储,一是方法区,存储的类的信息,比如构造函数,方法,字段等。二是堆,会开辟一片空间来存储class对象,当我们创建具体对象的时候,其实就是基于这个class对象。

每个对象的对象头都会指向这个class对象,但是其中的具体内容,需要去方法区才能获得,这个时候,class对象就能去方法区找到信息,获取数据结构,然后创建对象

验证

准备

在当前阶段,会给默认值赋值,b在当前阶段的值是0,在初始化阶段才会变成10

解析

初始化

使用

卸载

当用户程序代码执行完毕,jvm会销毁创建的class对象,这时候就相当于卸载

总结

相关推荐
星卯教育tony5 小时前
2026年全国青少年信息素养大赛主题应用 数字守艺人 丝路新城 星火征程 智传民韵 c++ python scratch 所有真题免费分享
开发语言·c++
飞翔中文网5 小时前
Java学习笔记之抽象类
java·笔记·学习
z落落5 小时前
C# 继承:父子构造函数 + base 关键字 +五大访问修饰符(同项目+跨项目 全覆盖)
开发语言·c#
海盗12345 小时前
C#中PDF操作-QuestPDF页面设置与布局
java·pdf·c#
day day day ...5 小时前
MyBatis / MyBatis-Plus 动态 SQL 中 OGNL 表达式的常见陷阱与源码分析
java·开发语言·mybatis
basketball6165 小时前
C++ bitset 头文件完全指南
开发语言·c++
Kiling_07045 小时前
Java IO流:字节流实战与性能优化
java·开发语言·php
糯米团子7496 小时前
javascript高频知识点
开发语言·前端·javascript
January12076 小时前
IDEA 快捷键
java·ide·intellij-idea
周杰伦fans6 小时前
C# 异常继承深度解析:从设计原则到 sealed 关键字的奥秘
java·jvm·c#