- 浏览: 123873 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
wind35:
32赞~~~
KDB+ database -
sunnyxiaoxi:
图片看不到
KDB+ database 初步 -
RonQi:
确实很有用的插件
eclipse插件 快速打开文件位置,在命令行打开文件位置 -
zhanshi258:
我们程序员讲究的是严谨,大部分人是讲娱乐
小唠叨 -
li498833284:
因为很多都是屏蔽字
小唠叨
转载自 Ken Wu`s Blog!
让我们一起跟随ClassLoader里的本地方法 findBootstrapClass(), 进入jvm执行启动类加载器加载类的内部实现。
private Class findBootstrapClass0(String name) throws ClassNotFoundException { check(); if (!checkName(name)) throw new ClassNotFoundException(name); return findBootstrapClass(name); } private native Class findBootstrapClass(String name) throws ClassNotFoundException;
// 摘自 j2sesrcshareclassesjavalangClassLoader.c // 表示该函数将被 java class 以jni方式调用 JNIEXPORT jclass JNICALL Java_java_lang_ClassLoader_findBootstrapClass(JNIEnv *env, jobject loader, jstring classname) { char *clname; jclass cls = 0; char buf[128]; if (classname == NULL) { // 类名不能为空 JNU_ThrowClassNotFoundException(env, 0); return 0; } // 将java的string转成unicode字符, 如果unicode字符长度不超过128 // 则不分配内存,直接拿buf缓存来使用 // 否则就malloc一块内存存放, 如果malloc失败, 则返回NULL clname = getUTF(env, classname, buf, sizeof(buf)); if (clname == NULL) { // 类名为空, 说明 JVM 内存分配失败, 抛出邪恶的OOM. JNU_ThrowOutOfMemoryError(env, NULL); return NULL; } // 将 '.' 转换成 '/' VerifyFixClassname(clname); if (!VerifyClassname(clname, JNI_TRUE)) { // 如果指定的类名不合法, 抛出异常 JNU_ThrowClassNotFoundException(env, clname); goto done; } // 让jvm使用启动类加载器加载类, 第四位标志0表示使用启动类加载器, // throwError为JNI_FALSE时抛出 ClassNotFoundException,而JNI_TRUE抛出NoClassDefFoundError cls = JVM_FindClassFromClassLoader(env, clname, JNI_FALSE, 0, JNI_FALSE); done: if (clname != buf) { // 类名的格式有问题,且没有走buf缓存,则释放掉创建的内存, 防止内存泄漏 free(clname); } return cls; }
// 摘自 hotspotsrcsharevmprimsjvm.h /* * jvm.h头文件, 类似java接口的定义。 × 根据给定的classLoader来加载指定类 × × *env JNI运行环境 × *name 类名(路径) × init 是否需要初始化类的内部数据结构 × loader 类加载器标识 × throwError 抛出的异常类型 */ JNIEXPORT jclass JNICALL JVM_FindClassFromClassLoader(JNIEnv *env, const char *name, jboolean init, jobject loader, jboolean throwError);
// 摘自 hotspotsrcsharevmprimsjvm.cpp JVM_ENTRY(jclass, JVM_FindClassFromClassLoader(JNIEnv* env, const char* name, jboolean init, jobject loader,jboolean throwError)) JVMWrapper3("JVM_FindClassFromClassLoader %s throw %s", name, throwError ? "error" : "exception"); // 确保字符串不为NULL且长度不大于 (1 << 16) -1 , 否则抛出异常 if (name == NULL || (int)strlen(name) > symbolOopDesc::max_length()) { if (throwError) { THROW_MSG_0(vmSymbols::java_lang_NoClassDefFoundError(), name); } else { THROW_MSG_0(vmSymbols::java_lang_ClassNotFoundException(), name); } } // 将类名放入一个hashmap, 标记符号用的, 并构造为 symbolHandle // (注意: Handle是一种间接的, 由线程变量分配空间的类,作用是防止GC回收) // CHECK_0是一个宏, 作用是判断是否有没有处理掉的异常, 如果有, 返回0 symbolHandle h_name = oopFactory::new_symbol_handle(name, CHECK_0); // 将classLoader标识转换成JVM内部表示的数据结构, 并构造为 Handle Handle h_loader(THREAD, JNIHandles::resolve(loader)); jclass result = find_class_from_class_loader(env, h_name, init, h_loader, Handle(), throwError, thread); if (TraceClassResolution && result != NULL) { trace_class_resolution(java_lang_Class::as_klassOop(JNIHandles::resolve_non_null(result))); } return result; JVM_END
// 摘自 hotspotsrcsharevmprimsjvm.cpp jclass find_class_from_class_loader(JNIEnv* env, symbolHandle name, jboolean init, Handle loader, Handle protection_domain, jboolean throwError, TRAPS) { // 生成类的内部数据结构, 核心步骤,非常复杂, 后期补充一下这里, 但是对核心逻辑没影响 klassOop klass = SystemDictionary::resolve_or_fail(name, loader, protection_domain, throwError, CHECK_0); // 将类的数据结构, 构造为 KlassHandle KlassHandle klass_handle(THREAD, klass); if (init && klass_handle->oop_is_instance()) { // 初始化类内部的数据结构 klass_handle->initialize(CHECK_0); } // 分配内存, 生成class对象 return (jclass) JNIHandles::make_local(env, klass_handle->java_mirror()); }
发表评论
-
入手Git
2013-09-18 21:57 1003原本项目一直托管在sourceforge上面. http: ... -
以插件的方式把myeclipse安装到eclipse
2013-04-27 16:56 85361, 请注意eclipse版本问题,笔者用的是eclips ... -
从与大牛richard stallman 聊来的感受
2012-04-25 10:03 873老头非常敬业热心, 写邮件给他, 就算没有时间马上回, 也会有 ... -
Jar Class Finder
2012-04-15 22:38 889Jar Class Finder Jar与Class的查找工 ... -
sourceforge 历程
2012-04-14 19:36 0入门 http://newbiedoc.sourceforg ... -
版本控制之MKS integrity 2007
2011-01-06 16:28 0在新项目中用到了版本控制MKS integrity 2007 -
Open-source License
2010-03-04 11:22 1825Open-source License(转载) ... -
Java 多线程与并发编程专题
2009-11-18 15:55 657http://www.ibm.com/developerwor ... -
浅析Context Class Loader
2009-11-19 11:33 1096转载自 薛笛的专栏http://blog.csdn.net/k ... -
JVM调优总结
2009-11-19 15:35 735转载自http://gq913.iteye.com ... -
Ant build.xml 模板
2009-11-23 14:04 980<?xml version="1.0" ... -
用javac编译生成不同版本的源码和目标class
2009-11-24 14:47 875转载请自 Ken Wu`s Blog! 合理使用javac的 ... -
java内存模型详解
2009-11-24 14:50 734转载自 Ken Wu`s Blog! 内存模型 (memo ... -
很详细的Log4j配置
2009-11-25 11:01 681来自: http://www.blogjava.net/zJu ... -
Log4j日志文件的使用
2009-11-25 17:32 870转自 http://blog.csdn.net/edg_edu ... -
另一个好的ant文件收藏
2009-11-26 13:30 888<?xml version="1.0" ... -
提示补全组件:Kissy Suggest
2009-11-26 14:06 988转自 http://www.iteye.com/topic/4 ... -
String in Java
2009-11-26 15:36 756转自 http://hxraid.iteye.com/blog ... -
自定义ClassLoader 简单例子
2009-12-10 16:15 1395转载自 http://www.javaresearch.org ... -
dom4j读写xml文件
2010-01-29 09:34 912首先我们给出一段示例程序: importjava.io.F ...
相关推荐
Bootstrap 网格系统(Grid System)的工作原理 21 媒体查询 21 网格选项 22 响应式的列重置 23 偏移列 25 嵌套列 26 列排序 28 Bootstrap 排版 31 标题 31 引导主体副本 33 强调 34 缩写 35 地址(Address) 36 引用...
2.加载成功,根据$table.bootstrapTable({options})显示表格样式。 感觉还是挺漂亮的哈,OK,下面贴代码解释功能。 开始之前,当然要引用js啦 <link href="~/Content/bootstrap.min.css" rel="stylesheet" /&...
技术上来讲,EvaBootstrap的实现原理就是在TB有侵入性的代码上加入了一些CSS Class命名空间,所以使用时会与TB有细微的差别: 文本排版 对于需要文本排版的元素,需要增加一个class .typo: 在Twitter Bootstrap中...
类加载器和Bootstrap类加载器的类型? 使用瞬态关键字 HashMap是在哪个数据结构上? Java 8消除了permGen内存块,为什么? 与stream()可选是否可以应用? 春天 @Bean可以在类级别使用吗? Spring自动接线的...
博主在工作中再次碰见问题,发现很多网上解决bsSuggest组件实现二级联动都是修改源码才能解决问题,但因为Bootstrap的更新,源码也更新很快,网上都已经是老的解决办法,今天博主就给大家写一篇很蠢但是很实用的解决...
这是它的工作原理: 所有 /admin/* URL 将首先尝试加载名为“be_%SECTION_NAME%”的控制器文件,如果找不到该名称的控制器,则它将回退到正常路由。 所有其他 URL 将首先尝试加载名为“fe_%SECTION_NAME%”的控制器...
在网页中,经常见到进度条效果,如:平分系统、加载状态等,进度条组件使用了css3的transition和animation属性来完成一些特效,这些特效在IE9及IE9以下版本、Firefox的老版本中并不支持,Opera 12 不支持 animation ...
5.5.4 使用Bootstrap 104 5.6 用户注册和登录 107 5.6.1 访问数据库 107 5.6.2 会话支持 110 5.6.3 注册和登入 111 5.6.4 页面权限控制 120 5.7 发表微博 123 5.7.1 微博模型 123 5.7.2 发表微博 ...
5.5.4 使用Bootstrap 104 5.6 用户注册和登录 107 5.6.1 访问数据库 107 5.6.2 会话支持 110 5.6.3 注册和登入 111 5.6.4 页面权限控制 120 5.7 发表微博 123 5.7.1 微博模型 123 5.7.2 ...
为了查看某些组件的工作原理,我不得不深入研究模块文件本身。 我在公共index.html中创建了一个加载动画,以便访问者在等待时有一个加载指示器,它创建了一个不错CSS淡入淡出动画以使index.html消失并在应用程序的...
等待控件在网上搜有好多种,但是都很复杂,不一定用的顺手,再说我的项目是bootstrap的原因,又不敢轻易使用第三方控件,怕不兼容,于是自己动手写了个等待控件,其技术点包括动态加载CSS,javascript的命名空间,...
使用您想要的所有流行语: 企业级高度可扩展UI不可知功能已加载有关完整的文档,演练和示例-快速启动/设置使用内置的原理图: ng add @pebula/ngrid @pebula/ngrid包含辅助软件包/插件(例如: @pebula/ngrid/...
2):在ci如何加载css,js,image等等公共文件,在对应的模块中helper中可以扩展url,我的扩展如下(我是使用bootstrap进行搭建后台):admin/helpers/MY_url_helper.php 3):在layout定义layout视图文件,具体看...
本文使用下列技术:.NETFramework,C#本页内容CLR启动程序(Bootstrap)创建的域系统域(SystemDomain)共享域(SharedDomain)默认域(DefaultDomain)加载器堆(LoaderHeaps)类型原理对象实例方法表基实例大小方法...
Spring+SpringMVC+Mybatis框架集成公共模块,包括公共配置、MybatisGenerator扩展插件、通用BaseService、工具类等。 > zheng-admin 基于bootstrap实现的响应式Material Design风格的通用后台管理系统,`zheng`...
Java面试题40.jQuery中页面加载完毕事件 Java面试题41.jQuery中Ajax和原生js实现Ajax的关系 Java面试题42.简单说一下html5 Java面试题43.简单说一下css3 Java面试题44.bootstrap的是什么 Java面试题45.什么是框架 ...
│ Java面试题40.jQuery中页面加载完毕事件.mp4 │ Java面试题41.jQuery中Ajax和原生js实现Ajax的关系.mp4 │ Java面试题42.简单说一下html5.mp4 │ Java面试题43.简单说一下css3.mp4 │ Java面试题44.bootstrap的是...
Doks删除未使用CSS,预取链接并延迟加载图像。 SEO就绪。 对结构化数据,打开的图形和Twitter卡使用明智的默认设置。 或根据自己的喜好轻松更改SEO设置。 开发工具。 充满信心地编码。 检查样式,脚本和标记是否...
JQuery事件之页面框架和加载后自动执行 JQuery扩展以及自动执行函数的应用 JQuery阻止事件发生 JQuery扩展 作业 第18周 内容概要 JS正则详解 JS正则详解之验证 组件BootStrap、EasyUI、JQueryUI 插件轮播 Django_...
08 类的装饰器的基本原理 09 类的装饰器增强版 10 类的装饰器的应用 11 自定制property 12 自定制property流程分析 13 自定制property实现延迟计算功能 14 property补充 15 元类介绍 16 自定义元类 17 函数复习 18 ...