JVM-ClassLoader装载class的流程】的更多相关文章

引言 如有错误,请批评指正. Java是一种动态连接的语言.所谓动态连接,大概可以这么解释. 首先,Java可以大概想象成是编译解释执行的.对于一个*.java的文件,通过javac将会编译成一个*.class文件.而JVM会解释执行*.class文件.但一个软件不可能只有一个class文件,一个项目往往有众多的class文件.这些class存储了足以供JVM执行的字节码,但却只有在连接之后才能执行. 所谓的Java是动态连接的语言,是指class文件并非在编译时连接的,而是在运行时连接的.对于…
jvm classLoader architecture : a.Bootstrap ClassLoader/启动类加载器 主要负责jdk_home/lib目录下的核心         api 或 -Xbootclasspath 选项指定的jar包装入工作. B.Extension ClassLoader/扩展类加载器 主要负责jdk_home/lib/ext目录下的jar包或 -Djava.ext.dirs 指定目录下的jar包装入工作 C.System ClassLoader/系统类加载器…
# 前言 在 JVM 综述里面,我们说,JVM 做了三件事情,Java 程序的内存管理, Java Class 二进制字节流的加载(ClassLoader),Java 程序的执行(执行引擎).我们也说,我们大部分情况下只关注前2个.在前面的文章中,我们已经分析了内存关系相关的,包括运行时数据区,GC 相关.今天我们要讲的就是类加载器. 在 JVM 综述 里,我们已经大致分析了一些概念.而今天的文章将详细的阐述类加载器. 首先,我们要了解类加载器,当然,了解的目的是为了更好的开发,通过对类加载器的…
在JVM中,有三种默认的类加载器,分别为Bootstrap ClassLoader,Extension CLassLoader以及App ClassLoader.其中,Bootstrap Classloader用于加载JAVA的核心类库,Extension Classloader用于加载JAVA的扩展类库,而App ClassLoader则用于装载类路径中的用户自定义的类. 具体的流程如下:   查看图片附件  …
简述众所周知java.exe是java class文件的执行程序,但实际上java.exe程序只是一个执行的外壳,它会装载jvm.dll(windows下,以下皆以windows平台为例,linux下和solaris下其实类似,为:libjvm.so),这个动态连接库才是java虚拟机的实际操作处理所在.本文探究java.exe程序是如何查找和装载jvm.dll动态库,并调用它进行class文件执行处理的. 源代码本文分析之代码,<JavaTM 2 SDK, Standard Edition,…
虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验.转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是Java虚拟机的类加载机制. 1)三个类加载器: bootstrap classloader - 引导(也称为原始)类加载器,它负责加载Java的核心类. extension classloader - 扩展类加载器,它负责加载JRE的扩展目录中JAR的类包. system classloader - 系统(也称为应用)类加载器,加载应用程序的类. bootstr…
1.基本概念 JVM和普通虚拟机: 大家常用的两种虚拟机是VMWare和Visual Box,用来操作cpu指令. JVM是程序自己独立的运行环境,对堆栈.寄存器.字符码指令等操作. Java.JRuby.Groovy等运行在Java虚拟机(JVM)上. JVM与JDK.JRE的关系 Java程序设计语言.Java虚拟机(JVM).Java API类库这三部分统称JDK. Java虚拟机(JVM).Java API类库这两部分统称JRE. 所以,JVM < JRE < JDK. JVM的产品有…
一,有两个术语,一个叫“定义类加载器”,一个叫“初始类加载器”. 比如有如下的类加载器结构: bootstrap   ExtClassloader     AppClassloader     -自定义clsloadr1     -自定义clsloadr2 如果用“自定义clsloadr1”加载java.lang.String类,那么根据双亲委派最终bootstrap会加载此类,那么bootstrap类就叫做该类的“定义类加载器”,而包括bootstrap的所有得到该类class实例的类加载器都…
同样,一个Class对象必须知道自己的超类.超级接口.因此,Class对象会引用自己的超类和超级接口的Class对象.这种引用一定是实例引用.(实际上,超类.超级接口的引用也存储在常量池中,但为了区分依赖类的引用,将它特殊表述一下.) 因此,我暂且得到两条结论. 结论一:持有一个Class对象的引用,则任何该Class对象直接或间接依赖的所有类(如果被加载了),都不可能被卸载.同样,只要有一个类直接或间接依赖某个类,则该类不可能被卸载. 结论二:持有一个Class对象的引用,则该类的所有超类.超…
JVM是什么 概述 JVM是Java Virtual Machine的缩写.它是一种基于计算设备的规范,是一台虚拟机,即虚构的计算机. JVM屏蔽了具体操作系统平台的信息(显然,就像是我们在电脑上开了个虚拟机一样),当然,JVM执行字节码时实际上还是要解释成具体操作平台的机器指令的. 通过JVM,Java实现了平台无关性,Java语言在不同平台运行时不需要重新编译,只需要在该平台上部署JVM就可以了.因而能实现一次编译多处运行.(就像是你的虚拟机也可以在任何安了VMWare的系统上运行) JDK…
-verbose 这是查询GC问题最常用的命令之一,具体参数如: -verbose:class 输出jvm载入类的相关信息,当jvm报告说找不到类或者类冲突时可此进行诊断. -verbose:gc 输出每次GC的相关情况,后面会有更详细的介绍. -verbose:jni 输出native方法调用的相关情况,一般用于诊断jni调用错误信息. JVM中内存区域 以下参考https://www.cnblogs.com/zhguang/ Java系列笔记(3)   第5篇看到了6.重排序和一致性规则,第…
本文来自网络:深入分析Java ClassLoader原理 http://my.oschina.net/zhengjian/blog/133836 一. JVM的ClassLoader过程以及装载原理 ClassLoader就是寻找类或是接口的字节码文件(.class)并通过解析字节码文件来构造类或接口对象的过程.在Java中,类装载器把一个类装入Java虚拟机中,要经过三个步骤来完成:寻找文件.链接和初始化,其中链接又可以分成校验.准备和解析三步,除了解析外,其它步骤是严格按照顺序完成的,各个…
ClassLoader的工作机制 java应用环境中不同的class分别由不同的ClassLoader负责加载. 一个jvm中默认的classloader有Bootstrap ClassLoader.Extension ClassLoader.App ClassLoader,分别各司其职: Bootstrap ClassLoader     负责加载java基础类,主要是 %JRE_HOME/lib/ 目录下的rt.jar.resources.jar.charsets.jar和class等 Ex…
JVM 系列()ClassLoader 在前面一节中,主要介绍了 Class 的装载过程,Class 的装载大体上可以分为加载类.连接类和初始化 3 个阶段.本小节将主要介绍绍 Java 语言中的 ClassLoader,类装载器.它主要工作在 Class 装载的加载阶段从系统外部获得 Class 二进制数据流. 一.ClassLoader ClassLoader 是 Java 的核心组件,所有的 Class 都是由 ClassLoader 进行加载的, ClassLoader 负责通过各种方式…
目录 1.什么是类的加载(类初始化) 2.类的生命周期 3.接口的加载过程 4.解开开篇的面试题 5.理解首次主动使用 6.类加载器 7.关于命名空间 8.JVM类加载机制 9.双亲委派模型 10.ClassLoader源码分析 11.自定义类加载器 12.加载类的三种方式 13.总结 14.特别注意 @ 前言 你是否真的理解java的类加载机制?点进文章的盆友不如先来做一道非常常见的面试题,如果你能做出来,可能你早已掌握并理解了java的类加载机制,若结果出乎你的意料,那就很有必要来了解了解j…
图解classloader加载class的流程及自定义ClassLoader 博客分类: JVM JavaJVM虚拟机EXTSUN /** *  转载请注明作者longdick    http://longdick.iteye.com * */ java应用环境中不同的class分别由不同的ClassLoader负责加载.一个jvm中默认的classloader有Bootstrap ClassLoader.Extension ClassLoader.App ClassLoader,分别各司其职:…
众所周知,java是编译型的语言,写的是java文件,最后运行的是class文件,class文件是运行在JVM之中的,这时候就有一个问题,JVM如何装载class文件的?是通过ClassLoader来进行的,这里做一下笔记,因为发现原作者写的很好<深入分析java web 技术内幕>. ClassLoader的结构分析 ClassLoader是一个抽象类,他有很多子类,JVM默认有几个实现类,当然我们也可以自己继承ClassLoader. 1.defineClass:将byte字节转换为JVM…
JVM启动流程 (1)在java中jvm是通过java或javaw命令启动的,后面跟加载的类名. (2)jvm在启动的时候先根据[当前路径和系统版本寻找jvm的配置文件jvm.cfg]装载配置. (3)然后根据配置文件寻找jvm.dll(JVM的主要实现) (4)找到jvm.dll后,利用jvm.dll初始化JVM---->获得一些jvm Nativej接口(例:JNIEnv:提供大量与jvm交互的操作,比如在查找一个类的时候就需要通过这个类) (5)找到加载的类中的main方法,并运行…
java应用环境中不同的class分别由不同的ClassLoader负责加载.一个jvm中默认的classloader有Bootstrap ClassLoader.Extension ClassLoader.App ClassLoader,分别各司其职: Bootstrap ClassLoader      负责加载java基础类,主要是 %JRE_HOME/lib/ 目录下的rt.jar.resources.jar.charsets.jar和class等 Extension ClassLoad…
这不是一篇描述jvm是什么的文章,也不介绍jvm跨平台的特性,也不是讲述jvm安全特性的文章,更不是讲解jvm指令操作,数据运算的文章,本文重点讲述类型的生命周期. 类型的生命周期涉及到:类的装载.jvm体系结构.垃圾回收机制. 为什么要讲jvm体系结构?因为类的装载和垃圾回收机制都和jvm体系结构息息相关. 那么什么是jvm体系结构呢? 当jvm运行起来的时候,它会向系统申请一片内存区(不同的jvm实现可能不同,有些可以使用虚拟内存),将这块内存分出一部分存储许多东西,例如:程序创建的对象,传…
C++和Java的区别 指针:java中不存在指针的概念,编程者无法直接通过指针来直接访问内存,有利于维护java程序的安全 多重继承:C++支持多重继承,java不支持多重继承,但是允许一个类继承多个接口来实现多重继承的问题 数据类型和类:java是完全面向对象的语言,所有的函数和变量必须是类的一部分,而C++中允许将函数和变量设置为全局,兼具面向过程和面向对象的特点 内存管理:Java中由系统进行自动的内存管理和回收,C++中需要程序员手动释放内存资源.当Java中的一个对象不会再用到的时候…
Part1:Java类加载机制:类加载器,类加载机制,双亲委派模型 1. Java 类加载过程? 类加载过程即是指JVM虚拟机把.class文件中类信息加载进内存,并进行解析生成对应的class对象的过程. 三阶段:加载 - 链接 (验证 - 准备 - 解析) - 初始化 加载.验证.准备和初始化这四个阶段发生的顺序是确定的,而解析阶段则不一定,它在某些情况下可以在初始化阶段之后开始,这是为了支持Java语言的运行时绑定(也成为动态绑定或晚期绑定). 加载阶段:(三件事) 1. 通过类名获取二进…
个人博客网:https://wushaopei.github.io/    (你想要这里多有) 一.JVM体系结构概述 1.JVM 与系统.硬件 ​ JVM是运行在操作系统之上的,它与硬件没有直接的交互 2.JVM 体系结构概览 ​ 3.类装载器ClassLoader 执行原理 负责加载class文件,class文件在文件开头有特定的文件标示,并且ClassLoader只负责class文件的加载,至于它是否可以运行,则由Execution Engine决定 ​ 4.类装载器ClassLoader…
一.Java中的class加载机制有以下三个特性: 1.全盘负责制  “全盘负责”是指当一个ClassLoader装载一个类时,除非显示地使用另一个ClassLoader,则该类所依赖及引用的类也由这个CladdLoader载入. 例如,系统类加载器AppClassLoader加载入口类(含有main方法的类)时,会把main方法所依赖的类及引用的类也载入,依此类推.“全盘负责”机制也可称为当前类加载器负责机制.显然,入口类所依赖的类及引用的类的当前类加载器就是入口类的类加载器. 2.双亲委派制…
[深入JVM内核—原理.诊断与优化]的讲师“葛一鸣”,人称“一哥”,毕业于浙江工业大学,计算机软件与理论专业硕士,是国家认证系统分析师,OCP.2012年出版过<Java程序性能优化>,荣获51CTO读书频道“最受读者喜爱的原创IT技术图书奖”!! 葛老师得到了第1期140名学员的热烈赞扬,现第2期招生中,错过这期,再等半年. 一.为什么要开JVM培训课   1 百度搜大数据开发人才要求信息,发现大部分都需要有 JVM知识2 关于JVM知识的培训,目前线下的有几家,但水平参差.3  Scala…
别说你懂我 你只是在意Java你把我留在家里身和心却始终在她那里难道我只是她的附属品?错,我是我,我是JVM,没有我就没有他! 如果你想懂我或者不管你是否懂我我都在这里等你---[深入JVM内核—原理.诊断与优化]在线培训课第2期.---错过这期,再等半年课程费用是100起,葛一鸣老师博客:www.uucode.net.---报名猛戳:http://www.dataguru.cn/article-5021-1.html---主要包括JVM运行机制.启动流程.内存模型.JVM参数.GC算法.类装载…
转载:http://longdick.iteye.com/blog/442213 java应用环境中不同的class分别由不同的ClassLoader负责加载. 一个jvm中默认的classloader有Bootstrap ClassLoader.Extension ClassLoader.App ClassLoader,分别各司其职: Bootstrap ClassLoader     负责加载java基础类,主要是 %JRE_HOME/lib/ 目录下的rt.jar.resources.ja…
JVM剖析 这篇文章详细解释了Java虚拟机的内部架构.以下这幅图展示了Java虚拟机里面的关键组件(是依据Java SE 7版本的Java虚拟机). 这些组件将在下面的两个章节一一展开.第一章节涵盖了创建每一个线程(Thread)的组件:第二章节涵盖了独立于线程外的组件. 线程(Threads) 1 JVM系统线程 2 单线程 3 程序计数器(PC) 4 栈 5 局部栈(Native Stack) 6 栈约束 7 Frame 8 局部变量数组 9 操作符栈 10 动态链接 线程之间共享(Sha…
类装载器工作机制 类装载器就是寻找类的节码文件并构造出类在JVM内部表示对象的组件.在Java中,类装载器把一个类装入JVM中,要经过以下步骤: [1.]装载:查找和导入Class文件: [2.]链接:执行校验.准备和解析步骤,其中解析步骤是可以选择的: [2.1]校验:检查载入Class文件数据的正确性: [2.2]准备:给类的静态变量分配存储空间: [2.3]解析:将符号引用转成直接引用: [3.]3.初始化:对类的静态变量.静态代码块执行初始化工作. 类装载工作由ClassLoader及其…
/** *  转载请注明作者longdick    http://longdick.iteye.com * */ java应用环境中不同的class分别由不同的ClassLoader负责加载. 一个jvm中默认的classloader有Bootstrap ClassLoader.Extension ClassLoader.App ClassLoader,分别各司其职: Bootstrap ClassLoader  负责加载java基础类,主要是 %JRE_HOME/lib/ 目录下的rt.jar…