参考文档: jvm内幕-java虚拟机详解:http://www.importnew.com/17770.html 常量池:https://www.jianshu.com/p/c7f47de2ee80 字节码执行引擎:http://www.cnblogs.com/deman/p/5489895.html 一.JVM结构(jdk1.7) 可以看出,JVM主要由类加载器子系统.运行时数据区(内存空间).执行引擎以及与本地方法接口等组成.其中运行时数据区又由方法区.堆.Java栈.PC寄存器.本地方法…
Tomcat也有自己的类加载器,比如Servlet,这些类加载器就改变了双亲委托模型的默认机制 (该主题有待深入)…
开发十年,就只剩下这套架构体系了! >>>   在上一篇博文中,我们知道了如何获得二进制的字节流,并根据获得的字节流去装载一个类.同时也了解到类加载器的存在,每个加载器对应着不同的加载目录,相互配合着,从而使整个加载过程稳定而安全.    那么他们是如何配合的呢?如果我自己写一个类,名字叫做String可以吗?    首先我们来看一张图:     图中除了最底下的那个加载器是我们没有讲到的,其余的都有说到过.其实底下那个就是我们自己实现的类加载器,用于自定义加载class.    在虚拟…
启动类加载器可以抢在标准扩展类加载器之前去装载类,而标准扩展类装载器可以抢在类路径加载器之前去加载那个类,类路径装载器又可以抢在自定义类装载器之前去加载类.所以Java虚拟机先从最可信的Java核心API查找类型,这是为了防止不可信的类扮演被信任的类. 加载顺序:启动类加载器  标准扩展类加载器  类路径加载器 自定义类装载器 假设网络中有一个名为java.lang.Integer的类,他是黑客在为了混进java.lang包所起的名字,实际上里面还有恶意代码,但是这种伎俩在双亲模式加载体系结构下…
虽然前面把class文件的产生到加载使用流程说了一遍,但是还是想具体看看classLoader的双亲委托具体是如何运行的,有什么利弊. 还有想看看不同类加载器的不同命名空间带来那些好处和实际有那些应用?并且想对ClassLoader加载类这个过程进行更加底层的了解,通过阅读源代码和自定义类加载器方式实践. 双亲委托机制? 还是先看看JVM中的类加载器层次结构如下: Bootstrap classLoader /\ /||\ Extenssion ClassLoader /\ /||\ Appli…
一.类加载器 ClassLoader 能根据需要将 class 文件加载到 JVM 中,它使用双亲委托模型,在加载类的时候会判断如果类未被自己加载过,就优先让父加载器加载.另外在使用 instanceof 关键字.equals()方法.isAssignableFrom()方法.isInstance()方法时,就要判断是不是由同一个类加载器加载. 1 类加载器的种类 1.1 启动类加载器(Bootstrap ClassLoader) 负责加载JDK中的核心类库,即 %JRE_HOME%/lib 目…
From: https://blog.csdn.net/luanlouis/article/details/40043991 Step 1.根据JVM内存配置要求,为JVM申请特定大小的内存空间 ? 使用java.exe 启动JVM JVM启动时按照其配置要求,申请一块内存,并根据JVM规范和实现将内存划分为几个区域. 所有的类的定义信息都会被加载到方法区. https://blog.csdn.net/xiangzhihong8/article/details/65657914 配置JVM装载环…
ClassLoader类加载器 Java 中的类加载器大致可以分成两类: 一类是系统提供的: 引导类加载器(Bootstrap classloader):它用来加载 Java 的核心库(如rt.jar),是用原生代码而不是java来实现的,并不继承自java.lang.ClassLoader,除此之外基本上所有的类加载器都是java.lang.ClassLoader类的一个实例. 扩展类加载器(Extension classloader):它用来加载 Java 的扩展库.Java 虚拟机的实现会…
虚拟机把类加载阶段中“通过一个类的全限定名来获取描述此类的二进制字节流”这个动作放到虚拟机外部去实现,以便让程序自己决定如何去获取所需要的类.实现这个动作的代码模块称为“类加载器”. 类与类加载器 任意一个类,都需要由加载它的类加载器和这个类本身共同确定其在Java 虚拟机中的唯一性,每一个类加载器,都拥有一个独立的类名称空间.这句话可以表达的更通俗一些:比较两个类是否相等,只有在这两个类是同一个类加载器加载的前提下才意义. 这里的“相等”,包括代表类的 Class 对象的equals() 方法…
类的生命周期 加载->验证->准备->解析->初始化->使用->卸载 类加载过程 类加载包括以上的前五个过程:加载,验证,准备,解析,初始化 加载 1.主要完成三个工作 通过类的完全限定名称来定位定义该类的二进制字节流 将二进制字节流中的静态数据结构转化成方法区中的动态数据结构 在堆中生成一个代表该类的Class对象,指向方法区的数据结构,作为访问方法区的入口 2.获取二进制字节流文件的途径 从 ZIP 包读取,成为 JAR.EAR.WAR 格式的基础. 从网络中获取,…