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对象,这时候就相当于卸载

总结

相关推荐
你知道“铁甲小宝”吗丶几秒前
【第33章】Spring Cloud之SkyWalking服务链路追踪
java·spring boot·spring·spring cloud·skywalking
虚假程序设计4 分钟前
pythonnet python图像 C# .NET图像 互转
开发语言·人工智能·python·opencv·c#·.net
归寻太乙9 分钟前
C++函数重载完成日期类相关计算
开发语言·c++
尽蝶叙12 分钟前
C++:分苹果【排列组合】
开发语言·c++·算法
coffee_baby13 分钟前
化繁为简:中介者模式如何管理复杂对象交互
java·spring boot·microsoft·交互·中介者模式
ღ᭄ꦿ࿐Never say never꧂16 分钟前
微服务架构中的负载均衡与服务注册中心(Nacos)
java·spring boot·后端·spring cloud·微服务·架构·负载均衡
所待.38318 分钟前
小小扑克牌算法
java·算法
.生产的驴25 分钟前
SpringBoot 消息队列RabbitMQ 消息确认机制确保消息发送成功和失败 生产者确认
java·javascript·spring boot·后端·rabbitmq·负载均衡·java-rabbitmq
.生产的驴26 分钟前
SpringBoot 消息队列RabbitMQ在代码中声明 交换机 与 队列使用注解创建
java·spring boot·分布式·servlet·kafka·rabbitmq·java-rabbitmq
憧憬成为原神糕手37 分钟前
c++_list
开发语言·c++