由于看C++和C代码看得很累,很辛苦。上一章终于解脱到java代码中来了。 第一个getClassLoader发生在main的preload方法中,
public static void main(String argv[]) {
preload();
}
static void preload() { preloadClasses(); preloadResources(); }
private static void preloadClasses() { final VMRuntime runtime = VMRuntime.getRuntime(); InputStream is = ZygoteInit.class.getClassLoader().getResourceAsStream( PRELOADED_CLASSES);
可以看到,直接调用了getClassLoader()这个classLoader是个什么东西呢。
public ClassLoader getClassLoader() { if (this.isPrimitive()) { return null; } ClassLoader loader = getClassLoaderImpl(); if (loader == null) { loader = BootClassLoader.getInstance(); } return loader; }
由于这个类是没有classloader的,因此调用的是BootClassLoader.getInstance().
/** * Provides an explicit representation of the boot class loader. It sits at the * head of the class loader chain and delegates requests to the VM's internal * class loading mechanism. */ class BootClassLoader extends ClassLoader {
现在明白了吧。BootClassLoader原来就是第一个class的ClassLoader。对于Zygote是com.android.internal.os.ZygoteInit,对于其他的,那就是com.android.internal.os.RuntimeInit 的classloader。也就是init.rc中指定的BOOTCLASSPATH指定的classLoader。
现在看另外一个方法也就是RuntimeInit 的加载
const char* envStr = getenv("CLASSPATH"); if (envStr != NULL) { gDvm.classPathStr = strdup(envStr); } else { gDvm.classPathStr = strdup("."); }
handleChildProc
else { cloader = ClassLoader.getSystemClassLoader(); } try { ZygoteInit.invokeStaticMain(cloader, className, mainArgs);
ClassLoader.getSystemClassLoader();这个classLoader与普通的classLoader又有不同。这个是一个PathClassLoader 这个以BootClassLoader作为父Loader。这很明显是一个装饰者模式。
相关推荐
用于验证理解Android中Classloader加载类机制的程序demo,从中可以对比DexClassLoader和PathClassLoader的区别联系。
Java 虚拟机中ClassLoader 相关简介 双亲委托机制 Android 中ClassLoader 简介
自定义classloader的使用
ClassLoader运行机制 自己写的ClassLoader运行机制 自己写的ClassLoader运行机制 自己写的ClassLoader运行机制 自己写的ClassLoader运行机制 自己写的
ClassLoader原理,ClassLoader原理 ClassLoader原理
Java ClassLoader定制实例
这篇文章主要讲类加载器在android中如何动态的加载其他工程类的过程,对于类加载器的知识就跳过了。
破解java加密的ClassLoader.java,在classloader植入破解代码
Classloader
java classloader classpath 张孝祥
理解Java ClassLoader机制
重温java之classloader体系结构(含hotswap) 启动类加载器 扩展类加载器 系统类加载器
JVM内存模型,类加载模式工作机制详细,内存屏障,类从被加载到虚拟机内存中开始,直到卸载出内存为止,它的整个生命周期包括了:加载、验证、准备、解析、...其中,验证、准备和解析这三个部分统称为连接(linking)
classloader 源码,自定义classloader
ClassLoader类加载机制和原理详解
自定义ClassLoader,控制台输入调试。 运行期间 重新载入指定目录的class文件。可实现对于类的功能函数更新。 用到java 反射,@interface 等技术
内容简介: ClassLoader体系结构 类装载器在JVM中并不是唯一的,JVM自带了三个装载器,用户也可以根据自己的需求自定义新的装载器,这些装载器的体系结构可以看作是树状结构,如图1所示:
关于J2EE服务器的ClassLoader的原理,该文档清晰了揭示了jvm装载类的顺序,同时用户可以自定义修改classLoader的配置 通过该文档,可以加深对Java虚拟机的理解