URLClassLoader源码笔记

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

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是现成的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值