311 jvm类加载以及对象回收相关
class加载相关
类生命周期:加载(读取二进制)、验证(class格式规范,语义分析,引用验证、字节码验证)、准备(分配内存)、解析(类,接口,字段,方法等解析)、初始化(静态变量赋值,执行静态代码块)、使用(实例化)、卸载(从jvm中卸载)
类加载器(至少3个):
bootstraploader-核心类库加载器:c实现。
extendionclassloader--扩展类库加载器:jdk扩展包,ext目录包,用户配置的路径
applicationclassloader---应用程序类加载器:class.path路径
jps,jcmd可以看到当前运行的java进程
jcmd pid 可以查看相关的进程配置
类卸载满足的条件: 1、class的所有实例都被gc 2、加载该类的classloader实例被gc
java启动参数 verbose:class 可以观察类的加载和卸载
注意:被加载的类中的静态代码,在第一次使用后才会被加载,loadclass并不会处理
双亲委派模型:下到上委托,上到下查找。
每一级的加载器都优先委托给父加载器进行类的加载,如果父加载器反馈加载不到,加载器才会尝试自行加载。
单纯的classloader不会重复加载同一个class。所以,很多热加载功能的实现思路是,如果检测到类的变化,重新创建一个classloader进行加载。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性