1.概述

转载:Arthas classloader类加载器

2.开篇

Arthas通过classloader 命令将 JVM 中所有的classloader的信息统计出来,并可以展示继承树,urls等。可以让指定的classloader去getResources,打印出所有查找到的resources的url。对于ResourceNotFoundException比较有用。

Arthas的classloader的查找本质也是通过Instrumentation获取所有的加载的class,然后通过class的getClassLoader方法查找对应的ClassLoader对象。

3. classloader查找流程

public class ClassLoaderCommand extends AnnotatedCommand {private void getAllClasses(String hashCode, Instrumentation inst, RowAffect affect, CommandProcess process) {int hashCodeInt = -1;if (hashCode != null) {hashCodeInt = Integer.valueOf(hashCode, 16);}// bootstrapClassSet保存classSortedSet<Class<?>> bootstrapClassSet = new TreeSet<Class<?>>(new Comparator<Class>() {@Overridepublic int compare(Class o1, Class o2) {return o1.getName().compareTo(o2.getName());}});// 通过inst.getAllLoadedClasses获取所有加载的类Class[] allLoadedClasses = inst.getAllLoadedClasses();// classLoaderClassMap保存类加载器和对应的classMap<ClassLoader, SortedSet<Class<?>>> classLoaderClassMap = new HashMap<ClassLoader, SortedSet<Class<?>>>();for (Class clazz : allLoadedClasses) {// 获取类对应的类加载器ClassLoader classLoader = clazz.getClassLoader();// Class loaded by BootstrapClassLoaderif (classLoader == null) {if (hashCode == null) {bootstrapClassSet.add(clazz);}continue;}if (hashCode != null && classLoader.hashCode() != hashCodeInt) {continue;}SortedSet<Class<?>> classSet = classLoaderClassMap.get(classLoader);if (classSet == null) {classSet = new TreeSet<Class<?>>(new Comparator<Class<?>>() {@Overridepublic int compare(Class<?> o1, Class<?> o2) {return o1.getName().compareTo(o2.getName());}});classLoaderClassMap.put(classLoader, classSet);}classSet.add(clazz);}}
}

ClassLoaderCommand通过getAllClasses来获取类加载器classloader。

通过Instrumentation.getAllLoadedClasses获取所有的class,通过class.getClassLoader获取对应的类加载器。

public class ClassLoaderVO {private String name;private String hash;private String parent;private Integer loadedCount;private Integer numberOfInstances;private List<ClassLoaderVO> children;public ClassLoaderVO() {}public void addChild(ClassLoaderVO child){if (this.children == null){this.children = new ArrayList<ClassLoaderVO>();}this.children.add(child);}
}

构造类加载器的树形结构主要是通过ClassLoaderVO对象,每个类加载器的VO对象包含子节点列表的children。

【Arthas】Arthas classloader类加载器相关推荐

  1. 万万没想到,面试中,连 ClassLoader类加载器 也能问出这么多问题.....

    1.类加载过程 类加载时机 「加载」 将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在内存上创建一个java.lang.Class对象用来封装类在方法区内的数据 ...

  2. 异常将上下文初始化事件发送到类的侦听器实例._Java CLassLoader类加载器详解,一点课堂(多岸学院)...

    Java CLassLoader 类加载器(class loader)是 Java™中的一个很重要的概念.类加载器负责加载 Java 类的字节代码到 Java 虚拟机中.本文首先详细介绍了 Java ...

  3. 【Android 逆向】类加载器 ClassLoader ( 类加载器源码简介 | BaseDexClassLoader | DexClassLoader | PathClassLoader )

    文章目录 一.ClassLoader 源码简介 二.BaseDexClassLoader 源码简介 三.DexClassLoader 源码简介 四.PathClassLoader 源码简介 五.InM ...

  4. JVM源码分析--ClassLoader类加载器

    本人原创,转载请注明出处:https://www.cnblogs.com/javallh/p/10224187.html 1.JDK已有类加载器: BootStrap ClassLoader (启动类 ...

  5. ClassLoader类加载器

    类的加载器:将class文件加载到JVM中执行这个文件. Java中将类加载器分成三类: 引导类加载器:     负责加载 JAVA_HOME/jre/lib/rt.jar 扩展类加载器:     负 ...

  6. arthas类和类加载器相关命令:dump、classloader

    学习目标 dump classloader -l -a -c -r -load

  7. 【Android 逆向】类加载器 ClassLoader ( 使用 DexClassLoader 动态加载字节码文件 | 拷贝 DEX 文件到内置存储 | 加载并执行 DEX 字节码文件 )

    文章目录 一.拷贝 Assets 目录下的 classes.dex 字节码文件到内置存储区 二.加载 DEX 文件并执行其中的方法 三.MainActivity 及执行结果 四.博客资源 一.拷贝 A ...

  8. 【Android 逆向】类加载器 ClassLoader ( 启动类加载器 | 扩展类加载器 | 应用类加载器 | 类加载的双亲委托机制 )

    文章目录 一.类加载器 二.类加载的双亲委托机制 一.类加载器 Java 虚拟机 ClassLoader 类加载器 : Bootstrap ClassLoader : 启动类加载器 , 该 加载器由 ...

  9. java.lang包—类加载器ClassLoader类

    注意: 类加载器的知识与JVM内存模型紧密相连,要学好这块的知识,一定要掌握JVM的内存模型. 关于JVM内存模型,推荐阅读:JVM-内存模型JMM 目录 一.什么是ClassLoader? 二.类加 ...

最新文章

  1. 制作最小Linux系统并且让其在新的虚拟机上运行
  2. [转载] 晓说——第21期:“看美国”系列之《日裔步兵团的奋战》
  3. 第30本:《怎样解题》
  4. php 请求转发 重定向,PHP怎么实现页面重定向?(图文+视频)
  5. 百度首页html简单代码_百度站长平台为什么要验证网站及验证方法
  6. 23天的单车旅行,从广州到四川,篇首语
  7. MySQL三大日志及主从复制的原理
  8. 程序员欢呼:微软Bing开始支持搜索源码、可直接运行
  9. Q108:浅析PBRT-V3的代码结构
  10. 程序中的@Override是什么意思?
  11. xps测试数据处理软件,XPS原始数据处理之 Avantage 软件篇
  12. 公用方法:得到汉字的首字母(大写) 方案3
  13. 内存延时cl_内存延迟和内存时序有什么关系?内存速率和时钟周期| Crucial(英睿达)...
  14. colab读取Google Drive
  15. 【pyecharts | 颜色配置】关于pyecharts中自定义颜色问题详解
  16. 【TODO】Java并发:@GuardedBy
  17. 阿里技面之raft如何选主
  18. PowerShell获取货币符号
  19. SLAM学习资源免费分享-转载
  20. 云服务器、虚拟主机、VPS的区别与差异(超详细解说)

热门文章

  1. 厉害了!同事请假参加冬奥会顺手得了铜牌:系知名涂料公司员工
  2. 没有一个产品,竟捞金200亿!2021年最大胆设想,已沦为圈钱工具
  3. 三星Galaxy S22 Ultra真机首曝:颜值与实力并存堪称完美
  4. 李子柒被坑,大厂生气了!字节跳动火速对杭州微念启动撤资
  5. 永辉生活APP卖茅台只收款不发货,永辉超市回应...
  6. 谷歌承诺未来三年将支付10亿美元新闻费用
  7. 小米10至尊纪念版DXO第一 雷军:这是小米打拼三年第二次登顶
  8. 华为一所英国研发中心建设项目获当地批准 计划总投资4亿英镑
  9. 百度世界无烟日搜索大数据:电子烟危害成00后关注焦点
  10. 联想90W快充是假的吗?官方回应:我们不玩文字游戏