[Droid]Android's Class Loaders

来源:互联网 发布:天狮多种vb片怎么样 编辑:程序博客网 时间:2024/05/06 12:24

简单介绍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
原创粉丝点击