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进行加载。

 

posted on   李某人的窥视  阅读(128)  评论(0编辑  收藏  举报

编辑推荐:
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
阅读排行:
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性

导航

< 2025年2月 >
26 27 28 29 30 31 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 1
2 3 4 5 6 7 8

统计

点击右上角即可分享
微信分享提示