ClassLoader(摘录)】的更多相关文章

Java虚拟机类加载过程是把Class类文件加载到内存,并对Class文件中的数据进行校验.转换解析和初始化,最终形成可以被虚拟机直接使用的java类型的过程. 在加载阶段,java虚拟机需要完成以下3件事: a.通过一个类的全限定名来获取定义此类的二进制字节流. b.将定义类的二进制字节流所代表的静态存储结构转换为方法区的运行时数据结构. c.在java堆中生成一个代表该类的java.lang.Class对象,作为方法区数据的访问入口. Java虚拟机的类加载是通过类加载器实现的, Java中…
一.体系结构(自上向下) 1.Bootstrap ClassLoader(BootStrapClassLoader) --- 启动类加载器或者叫引导类加载器,加载jdk核心的APIs,这些APIs一般位于jdk_home/lib下:它是一个本地接口,所以不能从java代码中得到它的信息.例如, log(java.lang.String.class.getClassLoader())得到的是null. 2.Extension ClassLoader(Launcher$ExtClassLoader)…
听上去很高端,其实一般自定义类加载器不需要用户去实现解析的过程,只要负责实现获取类对应的.class字节流部分就ok了,摘录深入理解Java虚拟机的一段话 虚拟机设计团队把类加载阶段中的“通过一个类的全限定名来获取描述此类的二进制字节流”这个动作放到Java虚拟机外部去实现,以便让应用程序自己决定如何去获取所需要的类.实现这个动作的代码模块称为“类加载器” 实现类加载器需要继承ClassLoader这个抽象类,用户只要实现其中的findClass方法即可.在该类的javadoc中给出了这样一个示…
详细的原理就不多说了,网上一大把, 但是, 看了很多很多, 即使看了jdk 源码, 说了罗里吧嗦, 还是不很明白: 到底如何正确自定义ClassLoader, 需要注意什么 ExtClassLoader 是什么鬼 自定义ClassLoader具体是如何加载 类的.. 直接上代码: import java.io.ByteArrayOutputStream; import java.io.FileInputStream; import java.io.FileNotFoundException; i…
Atitti 载入类的几种方法    Class.forName ClassLoader.loadClass  直接new 1.1. 载入类的几种方法    Class.forName ClassLoader.loadClass  直接new 1 1.2. 获得ClassLoader的几种方法可以通过如下3种方法得到ClassLoader 2 1.3. 1和2和3究竟有什么区别呢?分别用于什么情况呢? 2 1.4. jvm有严格的规定(五种情况):2 1.5. 对象实例化4种方式: 3 1.1.…
注:文章内容都是摘录性文字,自己阅读的一些笔记,方便日后查看. MVC MVC(Model-View-Controller),M 是指业务模型,V 是指用户界面,C 则是控制器,使用 MVC 的目的是将 M 和 V 的实现代码分离,从而使同一个程序可以使用不同的表现形式. 交互方式(所有通信都是单向的): View 传送指令到 Controller Controller 完成业务逻辑后,要求 Model 改变状态 Model 将新的数据发送到 View,用户得到反馈 更详细的说明: 模型(Mod…
类加载器概述: java类的加载是由虚拟机来完成的,虚拟机把描述类的Class文件加载到内存,并对数据进行校验,解析和初始化,最终形成能被java虚拟机直接使用的java类型,这就是虚拟机的类加载机制.JVM中用来完成上述功能的具体实现就是类加载器.类加载器读取.class字节码文件将其转换成java.lang.Class类的一个实例.每个实例用来表示一个java类.通过该实例的newInstance()方法可以创建出一个该类的对象. 类的生命周期: 类从加载到虚拟机内存到被从内存中释放,经历的…
Class类 首先,Class类里可以记载所有类的属性.方法等信息.这个也就是运行时类别标记,它记录了所有的对象(比如int,MyClass,void,数组等等)对应的类信息. Class对象 JVM对于每个所使用的对象,都会有相应的Class对象与之对应,要么这种类型的Class对象已经创建好了,要么就是要新创建一个Class对象. ClassLoader类 ClassLoader类负责的是加载一个类.也就是说,给定这个类相关的名字,定位到或者产生这个类相关的定义信息.ClassLoader对…
转载自:http://www.codeceo.com/article/java-classloader.html 一.什么是ClassLoader? 大家都知道,当我们写好一个Java程序之后,不是管是CS还是BS应用,都是由若干个.class文件组织而成的一个完整的Java应用程序,当程序在运行时,即会调用该程序的一个入口函数来调用系统的相关功能,而这些功能都被封装在不同的class文件当中,所以经常要从这个class文件中要调用另外一个class文件中的方法,如果另外一个文件不存在的,则会引…
定义 同其他服务器应用一样,tomcat安装了各种classloader(classes that implement java.lang.ClassLoader) Bootstrap | System | Common / \ Catalina Shared / \ Webapp1 Webapp2 ... / / Jasper1 Jasper2 Bootstrap: contains the basic runtime classes provided by the Java Virtual…
一.首先,查看Class类中的forName方法,可以发现有如下三个方法,但是我们通常用的是只有一个参数的方法. 简单介绍一下这三个方法: 第一个方法Class.forName("xxx")等同于第二个方法Class.forName("xxx",true,this.getClass().getClassLoader()),第二个布尔类型的参数表示装载该类的时候,是否初始化该类,即是否调用类中的static静态块函数及初始化静态成员变量: 第三个方法forName0是…
描述 Java.lang.Class.forName(String name, boolean initialize, ClassLoader loader) 方法返回与给定字符串名的类或接口的Class对象,使用给定的类加载器. 指定的类加载器加载的类或接口.如果该参数加载器loader 为空,通过引导类加载器加载类.当类被初始化的初始化initialize参数为true,如果它没有被初始化. 声明 以下是java.lang.Class.forName()方法的声明 public static…
一.什么是空指针? 空指针 是一个特殊的指针值. 空指针 是指可以确保没有向任何一个对象的指针.通常使用宏定义 NULL 来表示空指针常量值. 空指针 确保它和任何非空指针进行比较都不会相等,因此经常作为函数发生异常时的返回值使用.另外,对于第 5 章的链表来说,也经常在数据的末尾放上一个空指针来提示:“请注意,后面已经没有元素了哦.” 在如今的操作系统下,应用程序一旦试图通过空指针引用对象,就会马上招致一个异常并且当前应用程序会被操作系统强制终止.因此,如果每次都使用 NULL 来初始化指针变…
在开发一些小程序的时候,也许我们并不在意作用域的必要性.可是,当你书写几万行,甚至几十万行的代码的时候,没有作用域肯定是不能忍受的. C 语言有如下 3 种作用域. 1.全局变量 在函数之外声明的变量,默认地会成为全局变量.全局变量在任何地方都是可见的.当程序被分割为多个源代码文件进行编译时,声明为全局变量的变量也是可以从其他源代码文件中引用的. 2.文件内部的静态变量 就算对于像全局变量那样被定义在函数外面的变量,一旦添加了 static,作用域就只限定在当前所在的源代码文件中.通过 stat…
一.数组 和 指针 的微妙关系 数组 是指将固定个数.相同类型的变量排列起来的对象. 正如之前说明的那样,给指针加 N,指针前进“当前指针指向的变量类型的长度 X N”. 因此,给指向数组的某个元素的指针加 N 后,指针会指向 N 个之后的元素. #include <stdio.h> int main(void) { int array[5]; int *p; int i; /* 给数组 array 的各元素设定值 */ for (i = 0; i < 5; i++) { array[i…
一.指向函数的指针 函数名可以在表达式中被解读成“指向函数的指针”,因此,正如代码清单 2-2 的实验那样,写成 func 就可以取得指向函数的指针. “指向函数的指针”本质上也是指针(地址),所以可以将它赋给指针型变量. 比如有下面的函数原型: int func(double d); 保存指向此函数的指针的变量的声明如下: int (*func_p)(double); 然后写成下面这样,就可以通过 func_p 调用 func, int (*func_p)(double); // 声明 fun…
一.函数的形参的声明 C 语言可以像下面这样声明函数的形参: void func(int a[]) {     // ... } 对于这种写法,无论怎么看都好像要向函数的参数传递数组. 可是,在 C 中是不能够将数组作为函数的参数进行传递的.无论如何,在这种情况下,你只能传递指向数组初始元素的指针. 在声明函数形参时,作为类型分类的数组,可以被解读成指针. void func(int a[]) { } 可以被自动地解读为 void func(int *a) { } 此时,就算你定义了数组的元素的…
一.混乱的声明——如何自然地理解 C 的声明? 通常,C 的声明 int hoge; 这样,使用“类型 变量名;”的形式进行书写. 可是,像“指向 int 的指针”类型的变量,却要像下面这样进行声明: int *hoge_p; 似乎这里声明了一个名为 *hoge_p 的变量,而实际上,这里声明的变量是 hoge_p,hoge_p 的类型是“指向 int 的指针”. 因为这种声明方式不太好理解,所以有人提出将 * 靠近类型这一侧进行书写,如下: int* hoge_p; 的确,这种书写方式符号“类…
一.什么是ClassLoader? 大家都知道,当我们写好一个Java程序之后,不是管是CS还是BS应用,都是由若干个.class文件组织而成的一个完整的Java应用程序,当程序在运行时,即会调用该程序的一个入口函数来调用系统的相关功能,而这些功能都被封装在不同的class文件当中,所以经常要从这个class文件中要调用另外一个class文件中的方法,如果另外一个文件不存在的,则会引发系统异常.而程序在启动的时候,并不会一次性加载程序所要用的所有class文件,而是根据程序的需要,通过Java的…
首先介绍下ClassLoader: ClassLoader顾名思义就是类加载器,负责将Class加载到JVM中,事实上ClassLoader除了能将Class加载到JVM中之外,还有一个重要的作用就是审查每个类应该有谁加载,ClassLoader是一个父优先的等级加载机制.ClassLoader除了上述两个作用外还有一个任务就是将Class字节码重新解析成JVM统一要求的对象格式-----------由此本文可以划分成三点 ClassLoader类结构分析 1. ClassLoader常用的方法…
lassLoader主要对类的请求提供服务,当JVM需要某类时,它根据名称向ClassLoader要求这个类,然后由ClassLoader返回这个类的class对象. ClassLoader负责载入系统的所有资源(Class,文件,图片,来自网络的字节流等),通过ClassLoader从而将资源载入JVM 中.每个class都有一个引用,指向自己的ClassLoader. 1. 获得ClassLoader的几种方法 可以通过如下3种方法得到ClassLoader : this.getClass.…
前言: 因为工作需要,所以开始主攻前台JS方面的技术.在以前的工作中,使用过这门脚本语言.但是都是比较凌乱的,用到什么学什么,只是为了实现业务,而去使用. 不会考虑到代码优化,封装对象等.今次特意借了这本<javascript 高级程序设计> ,在每个晚上抽出一个小时来看这本纸质书,系统的学习这门语言. 本文中摘录的都是一些在阅读中,感觉比较重要的信息.如果文中出现差错,欢迎园友拍砖. 摘录: 数据类型   undefined  使用var声明 但未对其初始化   Null null值    …
java是一种类型安全的语言,它有四类称为安全沙箱机制的安全机制来保证语言的安全性,这四类安全沙箱分别是: 类加载体系 .class文件检验器 内置于Java虚拟机(及语言)的安全特性 安全管理器及Java API 本篇博客主要介绍“类加载体系”的基本原理:如需了解其它几类安全机制可以通过上面的博客链接进入查看. 简介 “类加载体系”及ClassLoader双亲委派机制.java程序中的 .java文件编译完会生成 .class文件,而 .class文件就是通过被称为类加载器的ClassLoad…
一.Java中的class加载机制有以下三个特性: 1.全盘负责制  “全盘负责”是指当一个ClassLoader装载一个类时,除非显示地使用另一个ClassLoader,则该类所依赖及引用的类也由这个CladdLoader载入. 例如,系统类加载器AppClassLoader加载入口类(含有main方法的类)时,会把main方法所依赖的类及引用的类也载入,依此类推.“全盘负责”机制也可称为当前类加载器负责机制.显然,入口类所依赖的类及引用的类的当前类加载器就是入口类的类加载器. 2.双亲委派制…
一.dd命令的解释 dd:用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换. 注意:指定数字的地方若以下列字符结尾,则乘以相应的数字:b=512:c=1:k=1024:w=2 参数注释: 1. if=文件名:输入文件名,缺省为标准输入.即指定源文件.< if=input file > 2. of=文件名:输出文件名,缺省为标准输出.即指定目的文件.< of=output file > 3. ibs=bytes:一次读入bytes个字节,即指定一个块大小为bytes个字节.…
本文为在公司内部TD上写的一篇小文, 主要讲解java中classLoader基础知识, 现在拿来这里分享一下. 一.问题 请在Eclipse中新建如下类,并运行它: 1 package java.lang; 2 3 public class Long { 4 public static void main(String[] args) { 5 System.out.println("Hi, i am here"); 6 } 7 } 你能猜到它的运行如果吗? 不错,就是如下这个样子!…
Java中取资源时,经常用到Class.getResource和ClassLoader.getResource,这里来看看他们在取资源文件时候的路径问题. Class.getResource(String path) path不以'/'开头时,默认是从此类所在的包下取资源: path 以'/'开头时,则是从ClassPath根下获取: 什么意思呢?看下面这段代码的输出结果就明白了: package testpackage; public class TestMain { public stati…
一.java提供了三种ClassLoader对Class进行加载: 1.BootStrap ClassLoader:称为启动类加载器,是Java类加载层次中最顶层的类加载器,负责加载JDK中的核心类库,如:rt.jar.resources.jar.charsets.jar等,可通过如下程序获得该类加载器从哪些地方加载了相关的jar或class文件: URL[] urls = sun.misc.Launcher.getBootstrapClassPath().getURLs(); for (int…
Tomcat是一个经典的web server,学习tomcat的源码对于我们是有很大的帮助的.前一段时间了解了tomcat的工作的大致流程,对我的新工作有了很大的帮助.刚学习了ClassLoader(学习classloader的初衷源于公司产品的一个bug),也将我对classloaderp写成了一篇博客.为了对ClassLoader有更多的理解,现在就来看看Tomcat 6 的ClassLoader设计. 之前通过对tomcat的启动过程.tomcat处理request的过程进行简单的了解,了…
JVM是如何知道java.lang包中的类的?JVM又是如何知道我们应用中的类的?我们的应用中明明是有某个类, 但是JVM却抛出ClassNotFoundException,这是为什么?XxxImpl类已经实现了接口Xxx,但是却抛出XxxImpl does not extend from Xxx,这是为什么?使用类型转换时,可能会抛出 aa.bb.cc.XXX can not cast to aa.bb.cc,这又是为什么?等等诸多看似诡异情况,其实都是因为ClassLoader. 了解反射的…