[Droid]Android's Class Loaders

简单介绍4种在Android上存在的Class Loader的用途和SUN JVM实现的差异。


Bootstrap Class Loader

Android有个环境变量$BOOTCLASSPATH用来指定需要Zygote加载的JAR。

VM内部的Boostrap Class Loader负责根据$BOOTCLASSPATH指定的JAR清单加载启动类。

相比SUN JVM的Bootstrap Class Loader,Android能够加载的JAR和类要多的多,无疑增加了安全风险。不过Dalvik都没有SecurityManager,who care?


BootClassLoader

单例方式存在。

Bootstrap Class Loader存在于VM内部,在用户空间需要有个ClassLoader对象来表示——这就是BootClassLoader的存在价值。


System Class Loader

单例方式存在。

该ClassLoader在Android Runtime上较少使用,个人觉得System Class Loader仅为了便于legacy code的porting。


Application Class Loader

每个Application都有一个对应得Application ClassLoader。多个Applicaton共进程的话,那么进程中会存在多个Application Class Loader。

与我们通常认知不同的是,Application Class Loader的parent不是System Class Loader而是Bootstrap Class Loader。Google如此做应该是为了性能考虑,但这样会使我们在两个Application Class Loader间共享数据变得困难很多。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值