Java 面试之 JVM

本文详细探讨了JVM的结构,包括类加载机制的五个过程:加载、验证、准备、解析、初始化。解释了Java类加载器的工作原理和双亲委派模型。进一步分析了JVM内存分配,涉及堆、方法区、程序计数器和虚拟机栈等。此外,还阐述了JVM的内存分代机制和垃圾回收的概念,包括Minor GC与Full GC的触发条件。
摘要由CSDN通过智能技术生成

JVM结构图

JVM

类加载机制

类加载的五个过程

  • 加载:类加载器获二进制字节流,将静态存储结构转化为方法区的运行时数据结构,并生成此类的Class对象。

  • 验证:验证文件格式、元数据、字节码、符号引用,确保Class的字节流中包含的信息符合当前虚拟机的要求。

  • 准备:为类变量分配内存并设置其初始值,这些变量使用的内存都将在方法区中进行分配。

  • 解析:将常量池内的符号引用替换为直接引用,包括类或接口的解析、字段解析、类方法解析、接口方法解析。

  • 初始化:执行类中定义的Java程序代码(字节码)。

    类的生命周期(7个):加载、验证、准备、解析、初始化、使用、卸载

Java类加载器及如何加载类

  类加载器是实现通过一个类的全限定名来获取描述此类的二进制文件流的代码模块。类的加载是通过双亲委派模型来完成的,双亲委派模型即为下图所示的类加载器之间的层次关系
  双亲委派模型的工作过程是:如果一个类加载器接收到类加载的请求,它会先把这个请求委派给父加载器去完成,只有当父加载器反馈自己无法完成加载请求时,子加载器才会尝试自己去加载。可以得知,所有的加载请求最终都会传送到启动类加载器中

双亲委派模型

使用双亲委派模型组织类加载器之间的关系有一个显而易见的好处:Java类随着它的类加载器一起具备了某种带优先级的层次关系。如果没有使用双亲委派模型,而是由各类加载器自行加载,假如用户自己编写一个Object类放在ClassPath中,那么系统将会出现多个不同的Object类,Java体系中最基础的行为也就无法保证,应用程

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值