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;
} 原文:http://blog.csdn.net/exceptional_derek/article/details/38737949