自定义类加载器继承ClassLoader类,使用自定义类加载器是通过loadClass方法实现。
protected synchronized Class loadClass(String name, boolean resolve) throws ClassNotFoundException { // 查找类是否已经加载
Class c = findLoadedClass(name);
if (c == null) {
try { if (parent != null) { //存在父类,先委托父类进行加载
c = parent.loadClass(name, false);
} else { /*没有父类,则委托引导类加载器,委托机制是出于安全考虑,详细可见《深入java虚拟机第二版》,这个loadClass方法没有用到final修饰符,也就是用户可以重载它,不需要用这个委托机制?*/
c = findBootstrapClass0(name);
}
} catch (ClassNotFoundException e) { // findClass自定义加载器会重写这个方法
c = findClass(name);
}
if (resolve) { //对类进行解析
resolveClass(c);
}
return c;
}
上面的finaLoadedClass方法会调用到share/vm/prims/jvm.cpp的JVM_FindLoadedClass方法,
JVM_FindLoadedClass(JNIEnv *env, jobject loader, jstring name)) {
.......
klassOop k = SystemDictionary::find_instance_or_array_klass(klass_name, h_loader, Handle(), CHECK_NULL);
}
上面会调用到
klassOop SystemDictionary::find(symbolHandle class_name, Handle class_loader, Handle protection_domain, TRAPS) {
unsigned int d_hash = dictionary()->compute_hash(class_name, class_loader);
int d_index = dictionary()->hash_to_index(d_hash);
{
No_Safepoint_Verifier nosafepoint;
return dictionary()->find(d_index, d_hash, class_name, class_loader,protection_domain, THREAD);/*这个方法根据类名、类加载器及访问权限来查找这个类是否已经加载,同一个类如果是两个类加载器加载,在虚拟机里面会存在两个对象。*/
}
}
分享到:
相关推荐
自定义Java类加载器demo,自定义了一个classLoader,重写了loadClass 和findClass,注意 loadClass打破了双亲委派机制,所有的类都要在自定义的class文件中找到,而findClass遵循了双亲委派机制
通过DexClassLoader类加载器来解析优化前面的dex文件 通过DexClassLoader的loadClass函数来载入类 通过获得到的类的newInstance函数来生成需要的对象 开始使用获取到的动态类对象~\(≧▽≦)/~啦啦啦
DynamicNativeAgent DynamicNativeAgent可以使用本机库重新定义Java类(无需类加载器或Instrumentation)用法AgentFactory . loadNative(); // Load the native in the JVMNativeAgent agent = AgentFactory . ...
应用启动页自定义跳转计时器View Demo: CircleTextProgressbar.java: package com.demo.startpageskiptimerdemo.widget; import android.content.Context; import android.content.res.ColorStateList; import ...
项目控制器、模型、视图、类库等各种文件夹完全自定义,都不是必需的,用到什么就建立什么文件夹,彻底摆脱一堆无用的一大堆文件夹的困扰。 类库懒加载 类库采用懒加载模式,只在需要时才包含类库,而不是一次全部...
特点简单的API 使用自定义Java类加载器进行沙箱测试使用Maven构建插件2.用法2.1创建插件创建实现ljpf.Plugin接口的Plugin类。 public class CustomPlugin implements Plugin { @Override public void load () { ... ...
│ 高并发编程第二阶段49讲、自定义类加载器ClassLoader顺便问候了一下世界.mp4 │ 高并发编程第二阶段50讲、ClassLoader父委托机制详细介绍.mp4 │ 高并发编程第二阶段51讲、加密解密类加载实战演示.mp4 │ 高...
│ 高并发编程第二阶段49讲、自定义类加载器ClassLoader顺便问候了一下世界.mp4 │ 高并发编程第二阶段50讲、ClassLoader父委托机制详细介绍.mp4 │ 高并发编程第二阶段51讲、加密解密类加载实战演示.mp4 │ 高...
29 3.2.2 Class.forName()加载类的实例 30 3.2.3 loadClass获得类的实例 31 3.3 操作类的字段 31 3.3.1 获取对象的属性 31 3.4 操作类的方法 34 3.4.1 运行时调用对象的方法 34 3.4.2 无参构造函数 36 3.4.3 带参...
ASP.NET单文件页模型在创建并生成时,开发人员编写的类将编译成程序集,并将该程序集加载到应用程序域,并对该页的类进行实例化后输出到浏览器。可以说,.aspx页面的代码也即将会生成一个类,并包含内部逻辑。在...
XMLLoader.as ---------------------- 加载xml的类 xmlToArray.as ---------------------- xml转换Array util: ArrayUtil.as ---------------------- 数组辅助功能 setFrameout.as ---------------------- ...
3.12.3. 使用过滤器自定义扫描 3.12.4. 自动检测组件的命名 3.12.5. 为自动检测的组件提供一个作用域 3.12.6. 用注解提供限定符元数据 3.13. 注册一个LoadTimeWeaver 4. 资源 4.1. 简介 4.2. Resource接口 ...
图片和头像提速:文章列表和头像都使用了lazyload做按需异步加载,你会发现访问速度上提升一大截 2种可选框架:支持3栏和2栏 13种可选颜色风格:基本上小清新的颜色都有了 3种列表模式:多图展示、单图展示、无图展示 7...
3.12.3. 使用过滤器自定义扫描 3.12.4. 自动检测组件的命名 3.12.5. 为自动检测的组件提供一个作用域 3.12.6. 用注解提供限定符元数据 3.13. 注册一个LoadTimeWeaver 4. 资源 4.1. 简介 4.2. Resource接口 ...
{maccms:load label.html} 载入自定义页面内容 {maccms:getlink label.html} 获取自定义页面的链接 {maccms:siteaid} 当前所在系统模版id 视频首页 10 视频地图页 11 视频分类,筛选页 12 视频专题首页 13 ...
TfileDAOHibernate通过扩展Spring提供的Hibernate支持类HibernateDaoSupport而建立,HibernateDaoSupport封装了HibernateTemplate,而HibernateTemplate封装了Hibernate所提供几乎所有的的数据操作方法,如execute...
图片和头像提速:文章列表和头像都使用了lazyload做按需异步加载,你会发现访问速度上提升一大截 2种可选框架:支持3栏和2栏 13种可选颜色风格:基本上小清新的颜色都有了 3种列表模式:多图展示、单图展示、无图展示 7...
13.8. 自定义Feed和条目类 14. Zend_Filter 14.1. 简介 14.1.1. 什么是过滤器(filter)? 14.1.2. 过滤器的基本用法 14.1.3. 使用静态 get() 方法 14.2. 标准过滤器类 14.2.1. Alnum 14.2.2. Alpha 14.2.3. ...
关于能自定义格式的、支持多语言的、支持多数据库的代码生成器的想法 发布Oracle存储过程包c#代码生成工具(CodeRobot) New Folder XCodeFactory3.0完全攻略--序 XCodeFactory3.0完全攻略--基本思想 XCodeFactory...
$compiler_class [编译类变量] $request_vars_order [变量顺序变量] $request_use_auto_globals [自动全局变量] $compile_id [编译id变量] $use_sub_dirs [子目录变量] $default_modifiers [默认修正器变量] $...