loosejar原理簡要分析
有了這種功能。開發人員就能夠實現更為靈活的執行時虛擬機監控和 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; }
loosejar原理簡要分析