URLClassLoader源码笔记

在搜索加载Jar文件时,满屏都是URLClassLoader,简直是被玩坏了。作为不求甚解的人,都觉得太过不去了,看看源码吧。

  • Classloader基础
  • 关于resource

URLClassLoader的最终基类是ClassLoader。

  • 支持并发的ClassLoader需要在初始化时,调用registerAsParallelCapable()注册自己
  • 对于由ClassLoaderA读入的class中使用的其他class,JVM仍然使用ClassLoaderA.loadClass()解析
  • Collections.newSetFromMap()创建一个以Map为数据存储的Set,Map是<E, Boolean>
  • 一个风骚的方法排布方式
    ClassLoader(Void unused, ClassLoader parent);
    ....
    this(checkCreateClassLoader(), getSystemClassLoader());
  • 不鼓励重载loadClass(),鼓励重载findClass(String)
  • 包名不允许java开头
  • 包中的所有类的certs(目测是签名的公钥之类的东西)需要和本包中第一个被load的class相同
  • resolveClass相当于GCC的link,解析与该类相关的其他符号

URLClassLoader的直接父类是SecureClassLoader,仅仅是做了一个ProtectionPermission的Cache。

再加一下Proxy的大概实现原理:根据所有的interface,动态生成字节码,写到ByteArrayOutputStream中(模拟一个class文件)。对于JVM来讲,Proxy与非Proxy的class是无差别的。

下面是URLClassLoader,没什么特别的。FUCK!!!看了一下午啊!!!啊啊啊!!!结论是,load本地jar包用URLClassLoader就好了,人家已经把文件考虑在内了,啊啊啊!!!

对于Dalvik,文件的ClassLoader是现成的。

你可能感兴趣的:(源码)