从0开始回顾JVM---系列四

简介: 虚拟机执行1、类的生命周期吗?一个类从被加载到虚拟机内存中开始,到从内存中卸载,整个生命周期需要经过七个阶段:加载 、验证、准备、解析、初始化 、使用 和 卸载,其中验证、准备、解析三个部分统称为连接。2、什么是类加载?类加载的过程?类加载: 虚拟机把描述类的数据加载到内存里面,并对数据进行校验、解析和初始化,最终变成可以被虚拟机直接使用的class对象。类加载过程如下:● 加载:1、根据类的全限定类名获取二进制字节流;2、将字节流代表的静态存储结构转为方法区运行时存储数据结构;3、在堆中生成Class对象,作为方法区这个类数据访问入口;● 验证: 检验加载的class文

虚拟机执行

1、类的生命周期吗?


一个类从被加载到虚拟机内存中开始,到从内存中卸载,整个生命周期需要经过七个阶段:加载验证准备解析初始化使用卸载,其中验证、准备、解析三个部分统称为连接。

2、什么是类加载?类加载的过程?


类加载: 虚拟机把描述类的数据加载到内存里面,并对数据进行校验、解析和初始化,最终变成可以被虚拟机直接使用的class对象。

类加载过程如下:

  • 加载:1、根据类的全限定类名获取二进制字节流;2、将字节流代表的静态存储结构转为方法区运行时存储数据结构;3、在堆中生成Class对象,作为方法区这个类数据访问入口;
  • 验证: 检验加载的class文件正确性(修饰符、权限)
  • 准备: 为类的静态变量分配内存并设置类变量初始值;
  • 解析: 将常量池中符号引用转为直接引用(class文件常量池转至方法区运行时常量池)
  • 初始化: 对类的静态变量和静态代码块执行初始化工作

3、什么是类加载器?常见的类加载器有哪些?


类加载器是指:通过一个类的全限定性类名获取该类的二进制字节流叫做类加载器。

类加载器分为以下四种:

  • 启动类加载器:  用来加载java核心类库,无法被java程序直接引用;(JAVA_HOME/lib 如rt.jar)
  • 扩展类加载器用来加载java的扩展库(JAVA_HOME/jre/lib/ext)
  • 系统类加载器加载用户类路径ClassPath下的类
  • 用户自定义加载器由java语言实现,继承自ClassLoader;

4、什么是双亲委派模型?为什么需要双亲委派模型?


当一个类加载器收到一个类加载的请求,它首先不会尝试自己去加载,而是将这个请求委派给父类加载器去加载,只有父类加载器在自己的搜索范围内查找不到此类时,子加载器才会尝试自己去加载该类。

原因:

  • 这是为了防止我们将来使用核心类中相同的包名和类名创建类,此时如果没有双亲委派机制,加载了我们自写的类,可能会对代码有很大影响,如果使用双亲委派机制加载了核心类库中的该类,就不会再加载相同名称的我们自写的类了,确保类加载的安全

那怎么打破双亲委派模型?

  • 自定义类加载器,继承ClassLoader类,重写loadClass方法和findClass方法。
  • 线程上下文类加载器。
  • Tomcat,应用的类加载器优先自行加载应用目录下的 class,并不是先委派给父加载器,加载不了才委派给父加载器。

5、热部署实现原理?


热部署概述:

  • 对于Java应用程序来说,热部署就是在运行时更新Java类文件。也就是不重启服务器的情况下实现java类文件的替换修改等 。

作用

  • 可以不重启应用的情况下,更新应用。举个例子,就像电脑可以在不重启的情况下,更换U盘。  

原理

  • 简单一句话让JVM重新加载新的class文件!

在类加载器中,Java类只能被加载一次,并且无法卸载。因此我们可以考虑直接把类加载器给换了,自定义类加载器,并重写ClassLoader的findClass方法。想要实现热部署可以分以下三个步骤:

  1. 销毁原来的自定义ClassLoader;
  2. 更新class类文件;
  3. 创建新的ClassLoader去加载更新后的class类文件。    

6、Class文件结构?

7、为什么有垃圾收集还会有内存泄漏问题?


对象定义在错误的范围

  • 如果长生命周期的对象持有短生命周期的引用,就很可能会出现内存泄露。

异常处理不当

  • 各种资源的关闭一定要放在finally里面。

8、堆和栈有什么区别?


  1. 申请方式
  • stack: 由系统自动分配。
  • heap: 需要程序员自己申请,并指明大小
  1. 申请效率
  • stack:由系统自动分配,速度较快,但程序员是无法控制的。
  • heap:由 new 分配的内存,一般速度比较慢,而且容易产生内存碎片,不过用起来最方便。
  1. 大小限制
  • stack:栈顶的地址和栈的最大容量是系统预先规定好的。
  • heap:堆的大小受限于计算机系统中有效的虚拟内存,运行期间确定,因此比较灵活。
  1. 存贮内容
  • stack:存贮局部变量表,操作数栈
  • heap:存贮对象实例与数组
相关文章
|
7天前
|
人工智能 JSON 安全
Fastjson远程代码执行漏洞,阿里云AI安全为您保驾护航
阿里云AI安全产品联动防御Fastjson攻击
2041 11
Fastjson远程代码执行漏洞,阿里云AI安全为您保驾护航
|
7天前
|
云安全 人工智能 安全
|
7天前
|
人工智能 自然语言处理 数据挖掘
Qwen3.8-Max-Preview深度全解析:2.4万亿参数旗舰MoE模型+Token Plan限时优惠完整落地指南
2026年7月,全新旗舰级混合专家大模型Qwen3.8-Max-Preview正式开放抢先体验,作为通义千问Qwen3系列规格最高、综合推理能力顶尖的新一代模型,该模型总参数量达到2.4万亿(2.4T),是当前线上可调用的原生多模态旗舰模型,综合推理水准对标海外顶级Fable 5模型,在复杂工程开发、长文档深度分析、多步骤智能体自治、跨境多语言创作、海量数据挖掘五大高难度业务场景实现跨越式性能提升。
900 1
|
7天前
|
人工智能 自然语言处理 数据挖掘
最新版通义千问(Qwen3.8-Max-Preview)功能介绍
2026年,通义千问正式推出全新旗舰级大模型 **Qwen3.8-Max-Preview 预览版**,作为首款突破万亿参数规格的新一代基座模型,该模型总参数量达到**2.4万亿**,采用全新迭代的MoE混合专家架构,综合推理性能、长文本处理、多模态理解、复杂任务规划能力全面超越前代Qwen3.7-Max版本,整体实力跻身全球第一梯队,可对标海外顶级旗舰模型,是当前面向复杂工程开发、多智能体协同、超长文档解析、专业办公自动化场景的最优国产基座模型。
906 0
|
9天前
|
人工智能
Qwen3.8抢先体验!正式版即将发布并开源!
千问Qwen3.8即将开源,参数达2.4T,进化速度以“天”计,实力媲美Fable 5。预览版Qwen3.8-Max已上线阿里Token Plan等平台,限时优惠:日间Credits低至1折,夜间更优,个人/团队版月付仅35元起!
907 39
|
5天前
|
自然语言处理 测试技术 API
通义千问Qwen3.8-Max-Preview全功能解析:2.4万亿参数旗舰模型深度使用指南
在大模型技术持续迭代的当下,通义千问推出的Qwen3.8-Max-Preview作为新一代旗舰预览版模型,凭借2.4万亿参数的超大规模、多模态融合能力与全场景适配特性,成为开发者与企业用户探索AI应用的核心工具。该模型采用稀疏混合专家(MoE)架构,是通义千问首个突破万亿参数的多模态模型,可同时处理文本、图像、视频与文档等多种数据形态,在全栈代码开发、复杂逻辑推理、长文档分析与多智能体协作等场景实现跨越式升级。本文将全面拆解Qwen3.8-Max-Preview的核心功能,详解API调用流程与配置方法,覆盖多场景实战技巧,帮助用户快速掌握这款旗舰模型的使用方法,充分释放其性能潜力。
441 1
|
8天前
|
人工智能 自然语言处理 数据挖掘
Qwen3.8-Max 预览版全解析:2.4 万亿参数旗舰模型,Token Plan 限时优惠指南
Qwen3.8-Max-Preview是通义千问Qwen3系列旗舰MoE大模型,参数达2.4万亿,综合推理能力居行业第一梯队。支持思考/快速双模式,擅长大模型五大高难场景。现于阿里云百炼Token Plan、Qoder及QoderWork上线体验,个人版低至39元/月。在阿里云百炼官网:https://t.aliyun.com/U/fPVHqY 免费领取千万Tokens
667 1
Qwen3.8-Max 预览版全解析:2.4 万亿参数旗舰模型,Token Plan 限时优惠指南