loosejar原理简要分析
来源:互联网 发布:slack mac 编辑:程序博客网 时间:2024/06/05 03:09
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()) })); //返回mapreturn map; }
3 0
- loosejar原理简要分析
- ConcurrentHashMap 原理简要分析
- 记录1-storm原理架构简要分析
- Lrucache算法的原理简要分析
- ASP.NET 2.0运行原理及其过程简要分析
- ASP.NET 2.0运行原理及其过程简要分析
- 简要分析Ogre渲染队列的实现原理
- ASP.NET 2.0运行原理及其过程简要分析
- ASP.NET 2.0运行原理及其过程简要分析
- 简要分析Ogre渲染队列的实现原理(一)
- ASP.NET 2.0运行原理及其过程简要分析
- 简要分析Ogre渲染队列的实现原理
- 动态人脸识别的简要原理分析
- 简要分析Ogre的渲染队列实现原理
- 简要分析ogre渲染队列的实现原理(一)
- 简要分析OGRE渲染队列的实现原理(二)
- 简要分析Ogre渲染队列的实现原理(一)
- 简要分析Ogre的渲染队列实现原理(二)
- 【最小割】HDU 4971 A simple brute force problem.
- UML基本架构建模--类的辅助信息
- 怎样用PS抠图
- 51Talk-Level 7 Unit 4 L1
- 投资支持90后,因为他们更纯粹
- loosejar原理简要分析
- 树链剖分新认识
- 我对嵌入式底层开发学习的一点看法 .
- 吸血鬼数字(全排列生成)
- &&和|| 在执行语句时的差别
- 接口与注入内存空间
- spring mvc 深入总结
- NDK_SACK Logcat上输出native代码错误
- SurfaceView