loosejar原理简要分析

标签: loosejar 原理 分析 | 发表时间:2014-08-22 06:09 | 作者:Derek_BMW
出处:http://blog.csdn.net
 loosejar这个小工具可以动态分析出应用中有每个jar包的实际使用情况,详情请参阅 《通过loosejar清理应用中冗余的jar包》基本原理是利用instrumentation的特性用 Instrumentation,开发者可以构建一个独立于应用程序的代理程序(Agent),用来监测和协助运行在 JVM 上的程序,甚至能够替换和修改某些类的定义。有了这样的功能,开发者就可以实现更为灵活的运行时虚拟机监控和 Java 类操作了。关于instrumentation的详细介绍,可以参阅这篇文章 《Java SE 6 新特性: Instrumentation 新功能》

private Map<ClassLoader, List<String>> createClassLoaderMap()
  {
    //创建一个map,key是classloader,value是由这个classloader所加载的类的名称组成的一个list
    Map<ClassLoader, List<String>> map = new HashMap();
    //instrumentation这个方法可以的得到由所有被classloader加载的类组成的一个数组
    Class<?>[] loadedClasses = this.instrumentation.getAllLoadedClasses();
//格式化打印出上面方法返回数组的长度
    Logger.log(String.format("Found %d classes loaded in the JVM.", new Object[] { Integer.valueOf(loadedClasses.length) }));
    //遍历所有被加载的类
for (Class<?> c : loadedClasses)
    {
      //获取加载当前类的classloader
 ClassLoader cl = c.getClassLoader();
 //如果当前类的加载器不为null,就判断map中是否已经有这个加载器了
      if (cl != null) {
//如果map中已经有了这个classloader,就将当前类的名字添加到与classloader对应的list当中
        if (map.containsKey(cl))
        {
          ((List)map.get(cl)).add(c.getName());
        }
//如果map中没有这个classloader,就创建一个新的list,将当前类的名称放到list中
//然后将classloader和这个list添加到map中
        else
        {
          List<String> classNames = new ArrayList();
          classNames.add(c.getName());
          map.put(cl, classNames);
        }
      }
    }
//格式化打印出map中classloader的数量
    Logger.log(String.format("Found %d various ClassLoader(s) inside the JVM.", new Object[] { Integer.valueOf(map.size()) }));
    //返回map
return map;
  } 


作者:Derek_BMW 发表于2014-8-21 22:09:04 原文链接
阅读:145 评论:0 查看评论

相关 [loosejar 原理 分析] 推荐:

loosejar原理简要分析

- - CSDN博客系统运维推荐文章
 loosejar这个小工具可以动态分析出应用中有每个jar包的实际使用情况,详情请参阅 《通过loosejar清理应用中冗余的jar包》基本原理是利用instrumentation的特性用 Instrumentation,开发者可以构建一个独立于应用程序的代理程序(Agent),用来监测和协助运行在 JVM 上的程序,甚至能够替换和修改某些类的定义.

NumericField&NumericRangeQuery原理分析

- - 搜索引擎技术博客
NumericField和NumericRangeQuery是Lucene. 针对数值型区间查询的优化方案. 和NumbericRanageQuery. 的实现原理之前,对于Lucene范围查询的实现和概念可以参考博文《TermRangeQuery源码解析》一文.       从Lucene 2.9 开始,提供对数字范围的支持,然而欲使用此查询,必须使用NumericField 添加域,使用Lucene原生API:.

[原]CAS原理分析

- -
1、悲观锁:假定会发生并发冲突,屏蔽一切可能违反数据完整性的操作. 悲观锁的实现,往往依靠底层提供的锁机制;悲观锁会导致其它所有需要锁的线程挂起,等待持有锁的线程释放锁. 2、乐观锁:假设不会发生并发冲突,每次不加锁而是假设没有冲突而去完成某项操作,只在提交操作时检查是否违反数据完整性. 如果因为冲突失败就重试,直到成功为止.

JVM原理分析笔记

- - Java - 编程语言 - ITeye博客
1.Javac编译器的作用. 将符合Java语言规范的源代码转化成符合Java虚拟机规范的Java字节码. 2.编译器主要的几个处理阶段. 词法分析、语法分析、语义分析和代码生成,基于访问者模式来遍历语法树的过程. 二.ClassLoader. 将Class加载到JVM中,审查每个类应该由谁加载,将Class字节码重新解析成JVM统一要求的对象格式.

Java ClassLoader原理分析

- - Java - 编程语言 - ITeye博客
一、JDK默认提供的三个ClassLoader. JDK 默认提供了如下几种ClassLoader. Bootstrp加载器是用C++语言写的,它是在Java虚拟机启动后初始化的,它主要负责加载 %JAVA_HOME%/jre/lib, -Xbootclasspath参数指定的路径以及 %JAVA_HOME%/jre/classes中的类.

[转]GeoHash原理分析

- - tenfyguo的技术专栏
机机是个好动又好学的孩子,平日里就喜欢拿着手机地图点点按按来查询一些好玩的东西. 某一天机机到北海公园游玩,肚肚饿了,于是乎打开手机地图,搜索北海公园附近的餐馆,并选了其中一家用餐. 饭饱之后机机开始反思了,地图后台如何根据自己所在位置查询来查询附近餐馆的呢. 苦思冥想了半天,机机想出了个方法:计算所在位置P与北京所有餐馆的距离,然后返回距离<=1000米的餐馆.

程序分析-原理和实践

- 三十不归 - 弯曲评论
今年秋天在UCSB旁听一门Program Analysis的课(课程主页:http://www.cs.ucsb.edu/~benh/cs290/),觉得Ben的课程风格很实在,从头到尾没有口水话,几乎是干货. 回想之前对Program Analysis感兴趣却常常找不到合适的资料,而这个技术其实在很多方面都比较有用,因此想把这门课程记录下来的笔记陆续发出来,如果有朋友感觉有用,就没有白费一番介绍的力气了.

Memcached原理深度分析详解

- - 服务器运维与网站架构|Linux运维|互联网研究
Memcached是danga.com(运营LiveJournal的技术团队)开发的一套分布式内存对象缓存系统,用于在动态系统中减少数据库负载,提升性能. 关于这个东西,相信很多人都用过,本文意在通过对memcached的实现及代码分析,获得对这个出色的开源软件更深入的了解,并可以根据我们的需要对其进行更进一步的优化.

Quartz应用与集群原理分析

- - 美团技术团队
美团CRM系统中每天有大量的后台任务需要调度执行,如构建索引、统计报表、周期同步数据等等,要求任务调度系统具备高可用性、负载均衡特性,可以管理并监控任务的执行流程,以保证任务的正确执行. 美团CRM系统的任务调度模块经历了以下历史方案. 每天晚上运行定时任务,通过SQL脚本+crontab方式执行,例如,.