Java的classloader

柯里薄雾
• 阅读 932

classloder的作用

.class文件-->类装载器-->执行引擎-->本地方法-->操作系统

  • class文件可以来自网络服务器等途径,来源比较有可定制性。比如zip文件,网络,甚至运行时动态生成的class

java类装载的委托模型

自定义装载器-->应用类装载器(用户程序的classpath)-->扩展类装载器-->启动类装载器

  • 总是把类装载请求发给上一层,如果上层没有,再看自己有没有。
  • 类文件和类装载器唯一确定一个类(即类装载器运行时的命名空间)
  • defineClass方法
    传递给这个方法一个合法的字节数组,就可以转化成class对象

类加载

加载-->连接-->初始化

加载:通过类的全限定名找到类的二进制流。方法区生成该类代表的数据结构。内存生成该类的对象,作为方法区各种数据结构的外部接口

连接里有3步

  1. 验证 对格式,元数据,字节码,符号引用进行验证
  2. 准备 将类的静态变量进行内存分配和赋初值
  3. 解析 将类中的符号引用转化为直接引用

初始化
调用类的clinit构造器方法

点赞
收藏
评论区
推荐文章
2021年度最全面JVM虚拟机,类加载过程与类加载器
前言类装载器子系统是JVM中非常重要的部分,是学习JVM绕不开的一关。一般来说,Java类的虚拟机使用Java方式如下:Java源程序(.java文件)在经过Java编译器编译之后就被转换成Java字节代码(.class文件)。类加载器负责读取Java字节代码,并转换成java.lang.Class类的一个实例。每个这样的实例用来表
灯灯灯灯 灯灯灯灯
4年前
图文详解,史上最全【类加载子系统】解说!!
内存结构概述简图详细图英文版中文版注意:方法区只有HotSpot虚拟机有,J9,JRockit都没有如果自己想手写一个Java虚拟机的话,主要考虑哪些结构呢?1.类加载器2.执行引擎类加载器子系统类加载器子系统作用:1.类加载器子系统负责从文件系统或者网络中加载Class文件,class文件在文件开头有特定的文件标识。2.ClassLo
2021年度最全面JVM虚拟机,类加载过程与类加载器
前言类装载器子系统是JVM中非常重要的部分,是学习JVM绕不开的一关。一般来说,Java类的虚拟机使用Java方式如下:Java源程序(.java文件)在经过Java编译器编译之后就被转换成Java字节代码(.class文件)。类加载器负责读取Java字节代码,并转换成java.lang.Class类的一个实例。每个这样的实例用来表
Stella981 Stella981
4年前
ASMSupport教程4.7 生成关系运算符
<p在java中,关系运算符是很常用的,分别是&gt;,,&lt;,&gt;,&lt;,!这六种,我们按照惯例看看我们需要生成的代码:</p<divid"scid:9D7513F9C04C4721824A2B34F0212519:dfec0f1ca2ec4ebabc9b91c161fbfa47"class"wlWri
Stella981 Stella981
4年前
ClassLoader解惑
一、什么是Classloader    一个Java程序要想运行起来,首先需要经过编译生成.class文件,然后创建一个运行环境(jvm)来加载字节码文件到内存运行,而.class文件是怎样被加载中jvm中的就是JavaClassloader所做的事情。    那么.class文件什么时候会被类加载器加载到j
Stella981 Stella981
4年前
JSP运行原理和九大隐式对象
一、JSP的原理:JSP文件会在服务器端的JSP引擎作用下转化为一个Servlet类的Java源代码文件。紧接着,这个Servlet类会在Java编译器的作用下被编译成一个class文件,并装载到jvm解释执行。剩下的就等同于Servlet的处理过程了。由于JSP第一次访问时会翻译成servle
Stella981 Stella981
4年前
JVM中即时编译器JIT与解释器并存
一.学习目标1.了解解释器与编译器的概念与作用。2.知道jvm中三种执行模式。3.了解热点代码。二.解释器模式与编译器模式以及混合模式  字节码文件通过类装载器装载,被分配被分配到JVM的运行时数据区,然后会被执行引擎执行。执行引擎以指令为单位读取Java字节码。它就像一个CPU一样,一条一条地执行机器指令。每个字节码指令
Wesley13 Wesley13
4年前
MongoDB 范围查询
查询价格在2009000  $gt 大于   $lt  小于//查询价格2009000范围的数据db.prodgory.find({"price":{$gt:"200",$lt:"9000"}})查询给定范围数据  $in//给定范围查询db.product1.find({"categor
Stella981 Stella981
4年前
Python 为什么只需一条语句“a,b=b,a”,就能直接交换两个变量?
从接触Python时起,我就觉得Python的元组解包(unpacking)挺有意思,非常简洁好用。最显而易见的例子就是多重赋值,即在一条语句中同时给多个变量赋值:&gt;&gt;&gt;x,y1,2&gt;&gt;&gt;print(x,y)结果:12在此例中,赋值操作符“”号的右
Stella981 Stella981
4年前
Shell脚本应用(if语句的结构)
1、测试:检测表达式是否成立,成立则返回值为0,否则为非0方法:1)test 表达式2)【表达式】2、文件测试:\d:是否为目录\f:是否为文件\e:是否存在\r:是否有读取权限\w:是否有写入权限\x:是否有执行权限3、整数值比较:\eq:等于\ne:不等于\gt:大于\
小万哥 小万哥
1年前
资源描述框架的用途及实际应用解析
RDF(资源描述框架)是一种用于机器理解网络资源的框架,使用XML编写。它通过URI标识资源,用属性描述资源,便于计算机应用程序处理信息。RDF在语义网上促进信息的确切含义和自动处理,使得网络信息可被整合。RDF语句由资源、属性和属性值组成。RDF文档包括&lt;rdf:RDF&gt;根元素和&lt;rdf:Description&gt;元素,后者用about属性标识资源。RDF还支持容器(如&lt;Bag&gt;、&lt;Seq&gt;和&lt;Alt&gt;)来描述集合。RDFS是RDF的扩展,提供描述类和属性的框架,而达布林核心是一组预定义属性,用于描述文档。