首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Java类生命周期浅析

加载方式比较灵活,总结下来有如下几种: 据类全路径名找到相应class文件,然后class文件中读取文件内容;(常用) jar文件中读取。...class文件中获取,其实这与直接class文件中获取方式本质 ---- 连接(Linking) 验证:进行类合法性校验。...解析:这一阶段任务就是把常量池中符号引用转换为直接引用。 ---- 初始化(Initialization) 类初始化阶段是类加载过程最后一步。...直接引用间接引用等判别条件,是看对该类引用是否会引起类初始化 直接引用已经在类初始化中有过阐述,不再赘述。...该类对应java.lang.Class对象没有任何地方被引用无法在任何地方通过反射访问该类方法。

38600

jvm启动加载类全过程,全网最全一篇,告诉你什么是双亲委派机制

被final修饰static字段不会设置,因为final在编译时候就分配了 ③ 解析(Resolve) 解析阶段目的,是将常量池内符号引用转换为直接引用过程(将常量池内符号引用解析成为实际引用...符号引用就是一组符号来描述所引用目标。符号引用字面量形式明确定义在《Java 虚拟机规范》Class文件格式中。直接引用就是直接指向目标的指针、相对偏移量或一个间接定位到目标的句柄。...解析动作主要针对类、接口、字段、类方法、接口方法、方法类型等。...它用来加载Java核心类库,如:JAVA_HOME/jre/lib/rt.jar、resources.jar、sun.boot.class.path路径下包,用于提供jvm运行所需包。...—双亲委派机制 jvm对class文件采用是按需加载方式,当需要使用该类时,jvm才会将它class文件加载到内存中产生class对象。

1.6K40
您找到你想要的搜索结果了吗?
是的
没有找到

jvm类加载机制,双亲委派机制,看这一篇就够了

被final修饰static字段不会设置,因为final在编译时候就分配了 ③ 解析(Resolve) 解析阶段目的,是将常量池内符号引用转换为直接引用过程(将常量池内符号引用解析成为实际引用...符号引用就是一组符号来描述所引用目标。符号引用字面量形式明确定义在《Java 虚拟机规范》Class文件格式中。直接引用就是直接指向目标的指针、相对偏移量或一个间接定位到目标的句柄。...解析动作主要针对类、接口、字段、类方法、接口方法、方法类型等。...它用来加载Java核心类库,如:JAVA_HOME/jre/lib/rt.jar、resources.jar、sun.boot.class.path路径下包,用于提供jvm运行所需包。...—双亲委派机制 jvm对class文件采用是按需加载方式,当需要使用该类时,jvm才会将它class文件加载到内存中产生class对象。

39730

一文读懂Java虚拟机类加载机制

加载(Loading)类加载是指文件系统或网络中读取字节码文件,并将其转换为Java虚拟机内部使用数据结构,以在运行时内存中生成一个表示此类java.lang.Class对象。...2.3 解析(Resolution)解析阶段是将常量池中符号引用替换为直接引用过程。符号引用指的是引用一个类或接口全限定名、方法名称和描述符等,而直接引用指的是内存中地址值。...Java虚拟机中,类加载器类型启动类加载器(Bootstrap ClassLoader):它是虚拟机一部分,负责加载JDK核心类库,如java.lang包中类。...解析:将符号引用转换为直接引用,以保证程序能正确访问到所需类、字段、方法等。链接:在类加载后,将进行一系列链接操作,包括验证、准备和解析。...解析:将符号引用转换为直接引用,以保证程序能正确访问到所需类、字段、方法等。初始化:在类加载和链接完成后,虚拟机将执行类初始化操作。

301101

类加载过程,双亲委派模型?

加载阶段(Loading) 它是 Java 将字节码数据从不同数据源读取到 JVM 中,并映射为 JVM 认可数据结构(Class 对象),这里数据源可能是各种各样形态,如 jar 文件class...(1)文件格式验证:验证.class文件字节流是否符合class文件格式规范,并且能够被当前版本虚拟机处理。...(4)符号引用验证:它是验证最后一个阶段,发生在虚拟机将符号引用转化为直接引用时候。主要是对类自身以外信息进行校验。目的是确保解析动作能够完成。...符号),这个代号指向你(符号引用) (2)直接引用:直接引用是可以指向目标的指针、相对偏移量或者是一个能直接或间接定位到目标的句柄。...和虚拟机实现内存有关,不同虚拟机直接引用一般不同。 解析动作主要针对类或接口、字段、类方法、接口方法、方法类型、方法句柄和调用点限定符7类符号引用进行。

30110

Java虚拟机

一、概述 虚拟机类加载机制 :Java虚拟机把描述类数据Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用Java类型,这个过程被称作虚拟机类加载机制...(它并没有指明二进制字节流必须得某个 Class文件中获取,确切地说是根本没有指明要从哪里获取、如何获取) 2)将这个字节流所代表 静态存储结构 转化为 方法区 运行时数据结构。...四个阶段: 文件格式验证 : 要验证字节流是否符合Class文件格式规范,并且能被当前版本虚拟机处理 主要目的 是保证输入字节流能正确地解析并存储于方法区之内,格式上符合描述一个Java类型信息要求...要解析一个未被解析字段符号引用, 首先将会对字段表内class_index 项中索引CONSTANT_Class_info符号引用进行解析,也就是 字段所属类或接口符号引用 。...,只有当父加载器反馈自己无法完成这个加载请求(它搜索范围中没有找到所需类)时,子加载器才会尝试自己去完成加载 好处 Java中类随着它类加载器一起具备了一种带有优先级层次关系 保证Java程序稳定运作

69500

JVM-类加载子系统

虚拟机》周志明·著 ​ Java虚拟机将描述类数据class字节码文件加载到内存,并且对数据进行校验,转化,解析,初始化工作,最终形成在内存中可以直接使用数据类型。...常量池常量中是否有不被支持类型 Class文件中是否有被添加其他恶意信息。 文件格式验证不止以上,上面所列举只是HotSpot虚拟机源码中摘抄一部分。...直接引用就是直接指向目标的指针、相对偏移量或一个间接定位到目标的句柄 解析动作主要针对类或接口、字段、类方法、接口方法、方法类型等。...而且加载某个类class文件时,java虚拟机采用是双亲委派模式。 ​ 即把请求交由父类处理,它是一种任务委派模式 工作原理 ?...如果一个类型由用户类加载器加载,那么jvm会将这个类加载器一个引用作为类型信息会议部分保存在方法区中。当解析一个类型到另一个类型引用时候,JVM需要保证两个类型加载器是相同

30231

Java虚拟机

一、概述 虚拟机类加载机制 :Java虚拟机把描述类数据Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用Java类型,这个过程被称作虚拟机类加载机制...(它并没有指明二进制字节流必须得某个 Class文件中获取,确切地说是根本没有指明要从哪里获取、如何获取) 2)将这个字节流所代表 静态存储结构 转化为 方法区 运行时数据结构。...四个阶段: 文件格式验证 : 要验证字节流是否符合Class文件格式规范,并且能被当前版本虚拟机处理 主要目的 是保证输入字节流能正确地解析并存储于方法区之内,格式上符合描述一个Java类型信息要求...要解析一个未被解析字段符号引用, 首先将会对字段表内class_index 项中索引CONSTANT_Class_info符号引用进行解析,也就是 字段所属类或接口符号引用 。...,只有当父加载器反馈自己无法完成这个加载请求(它搜索范围中没有找到所需类)时,子加载器才会尝试自己去完成加载 好处 Java中类随着它类加载器一起具备了一种带有优先级层次关系 保证Java程序稳定运作

60620

JVM加载Class文件原理机制探析

无法被Java程序直接引用。...应用程序类加载器(Application ClassLoader):又称为系统类加载器,负责加载应用程序所需类。它是ClassLoader类子类,由Java应用程序开发者创建。...JVM在解析阶段会将类或接口符号引用替换为对应直接引用,以便后续执行阶段能够快速访问到所需数据。...字段符号引用解析:将字段符号引用转换为对应直接引用。例如,将字段名和字段类型转换为内存中具体位置。 方法符号引用解析:将方法符号引用转换为对应直接引用。...加载通过类加载器载入Class文件,连接阶段对Class文件进行各种处理,最终完成初始化阶段静态变量分配内存到静态代码块执行。

18240

【Angular专题】——(2)【译】Angular中ForwardRef

nameService类型为NameService,这样做目的是为了向Angular提供运行时解析依赖所需相关信息。...类型变量是undefined。...小结 这个场景并不会经常出现,一般它只在当我们想要注入在同一个文件中声明类时才会发生,大多数情况下我们在一个文件中只会声明一个类,并且会在文件头部引入其他依赖类,以此来保证不会被class不进行变量提升特性造成困扰...五.补充 以下内容摘录自Angular中文网: 在Typescript里面,类声明顺序很重要,如果一个类尚未定义,就不能引用它。 这通常都没有问题,特别是遵循一个文件一个类规则时候。...但有时候循环引用可能无法避免,当类A引用类B,同时B又引用A时,就会陷入困境:它们中某一个必须先定义。 forwardRef( )建立一个间接引用,供Angular随后解析

3.2K20

JVM-类加载子系统

虚拟机》周志明·著 ​ Java虚拟机将描述类数据class字节码文件加载到内存,并且对数据进行校验,转化,解析,初始化工作,最终形成在内存中可以直接使用数据类型。...常量池常量中是否有不被支持类型 Class文件中是否有被添加其他恶意信息。 文件格式验证不止以上,上面所列举只是HotSpot虚拟机源码中摘抄一部分。...直接引用就是直接指向目标的指针、相对偏移量或一个间接定位到目标的句柄 解析动作主要针对类或接口、字段、类方法、接口方法、方法类型等。...而且加载某个类class文件时,java虚拟机采用是双亲委派模式。 ​ 即把请求交由父类处理,它是一种任务委派模式 工作原理 ?...如果一个类型由用户类加载器加载,那么jvm会将这个类加载器一个引用作为类型信息会议部分保存在方法区中。当解析一个类型到另一个类型引用时候,JVM需要保证两个类型加载器是相同

39210

JVM面试重点:虚拟机类加载机制

类加载时机 ◆ ◆ ◆ ◆ 类被加载到虚拟机内存中开始,到卸载出内存为止,整个生命周期包括:加载、验证、准备、解析、初始化、使用、卸载;其中,验证、准备和解析统称为连接,如下图所示: ?...二、验证 是连接第一步,确保 Class 文件字节流中包含信息符合当前虚拟机要求。 1.文件格式验证:验证字节流是否符合Class文件格式规范,并且能被当前版本虚拟机处理。...以下是基本数据类型零值 ? 四、解析 这个阶段是虚拟机将常量池内符号引用替换为直接引用过程。 1.符号引用:以一组符号来描述所引用目标,符号可以使任何形式字面量。...2.直接引用:可以使直接指向目标的指针、相对偏移量或是一个能间接定位到目标的句柄。...启动类加载器无法被Java程序直接引用

38910

java中排序(自定义数据排序)--使用Collectionssort方法

排序:将一组数据按相应规则 排列 顺序 1.规则:       基本数据类型:日常大小排序。 引用类型: 内置引用类型(String,Integer..),内部已经指定规则,直接使用即可。...日期:根据日期长整型数比较。 自定义引用类型,需要按照业务规则排序。...有两种方式,分别如下所述:     当引用类型内置排序方式无法满足需求时可以自己实现满足既定要求排序,有两种方式: 第一种: 自定义业务排序类:新建一个业务排序类实现java.util.Comparator...* @author Administrator * */ public class GoodsPriceCompare implements java.util.Comparator...Collections.sort(news); System.out.println(news); } } 2.顺序:   升序:从小到大   降序:大到小

4.3K30

一篇文章快速搞懂Java虚拟机栈帧结构

每一个方法调用开始至执行结束整个过程,都对应着一个栈帧在虚拟机栈中入栈到出栈过程。...在已经编译好Class文件中,方法Code属性max_locals数据项中,就确定了该方法所需分配局部变量表最大容量。 ...前6种类型同学们应该都了解,就不必多介绍了,reference类型表示对一个对象实例引用,通过这个引用做到两件事情:根据引用直接或间接地查找到实例在Java堆中数据存放起始地或索引;根据引用直接或间接地查找到在方法区中存储类信息...和局部变量表一样,在已经编译好Class文件中,方法Code属性max_stacks数据项中,就确定了该方法所需分配操作数栈最大深度。...之前Class文件结构全面解析》中介绍过,Class文件常量池中存有大量符号引用,这些符号引用一部分会在类加载阶段或者第一次使用时候就被转化为直接引用(实际运行时内存布局中入口地址),这种转化被称为静态解析

85820

一张图看懂JVM之类装载系统

类(Class被加载到虚拟机内存中开始,到卸载出内存为止会经历如下生命周期: 其中验证、准备、解析3个部分又统称为连接(Linking)。...例如,常量池常量中是否有不被支持常量类型Class文件中各个部分及文件本身是否有被删除或附加其他信息等等。...如int类型类变量,初始值就是0。 | 解析(Resolution) 在class文件被加载至JVM之前,这个类是无法知道其他类及方法、字段所对应具体地址,甚至不知道自己方法、字段内存地址。...举个例子,对于一个方法调用,编译器会生成一个包含目标方法所在类名字、目标方法名字、接收参数类型以及返回值类型符号引用,来指代所要调用方法。 解析阶段目的就是将这些符号引用解析成为实际引用。...而实际引用就是真正指向内存地址指针、相对偏移量或能间接定位到目标的句柄。解析动作主要针对类或接口、字段、类方法、接口方法、方法类型、方法句柄和调用点限定符这7类符号引用进行。

41010

JAVA系列之类加载机制详解

4、解析 解析阶段是虚拟机将常量池内符号引用替换为直接引用过程,解析动作主要针对类或接口、字段、类方法、接口方法、方法类型、方法句柄和调用点限定符7类符号引用进行。...符号引用就是一组符号来描述目标,可以是任何字面量。 直接引用就是直接指向目标的指针、相对偏移量或一个间接定位到目标的句柄。...*开头类均被Bootstrap ClassLoader加载)。启动类加载器是无法被Java程序直接引用。...自定义类加载器(User ClassLoader),如果有必要,我们还可以加入自定义类加载器。因为JVM自带ClassLoader只是懂得本地文件系统加载标准java class文件。...我们可以在打包时候对class进行加密操作,然后在加载class文件之前通过自定义classloader先进行解密操作,然后再按照标准class文件标准进行加载,这样就完成了class文件正常加载

26140

es6删除对象属性_ES6删除对象中某个元素「建议收藏」

来吧,我们来梳理一下吧 目前HTML5涉及框架大 … 项目报错-无法解析类型 XXXX.xx 必需 .class 文件间接引用了它 这个编译错误有几个原因 1.jdk版本问题...要是报错是某些java包里东西那就可以肯定是jdk版本问题, 比如无法解析类型java.lang.Object,无法解析类型java.lang.Char … Linux学习之lsof命令 lsof...(list open files)是一个列出当前系统打开文件工具.在linux环境下,任何事物都以文件形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件.所以如传输控制协议 … 匿名方法...,Lambda表达式,高阶函数 原文:匿名方法,Lambda表达式,高阶函数 匿名方法 c#2.0引入匿名方法,不必创建单独方法,因此减少了所需编码系统开销....使用委托和方法关联: this … python函数与模块(装饰器,文件处理,迭代器等) os模块 os.system(‘命令’) 利用python调用系统命令,命令可以是以列表或者元组内元素形式*

2.1K20

JVM性能优化专题

JVM加载Class文件原理机制1. 编译阶段,Java源文件被编译成.class文件,包含字节码和元数据。2. 类加载阶段,.class文件由类加载器加载进JVM。...这个Class对象一直存在于JVM中,为后续实例化,反射等提供支持。GC是什么?为什么要有GC?GC是Garbage Collection简称,即垃圾收集。它是Java内存管理一大特点。...这些对象是存活,并作为开始搜索起点。2. GC Roots开始向下搜索,如果一个对象与GC Roots之间有直接或间接引用关系,那么这个对象也是存活。3....调整垃圾收集器及内存参数:可以通过-XX选项设置垃圾收集器类型和内存参数来间接影响GC频率。这是比较可靠方式之一。...但是,我们可以通过调整JVM内存参数或垃圾收集器类型等方式间接地影响垃圾回收频率,在一定程度上主动通知虚拟机进行垃圾回收。

34420

《深入理解java虚拟机》笔记(8)类加载机制

一、类加载机制 类加载器将类.class文件二进制数据读入到内存中,将其放在方法区内,然后在堆区创建一个java.lang.Class对象,用来封装类在方法区内数据结构。...4、解析 解析阶段是虚拟机将常量池内符号引用替换为直接引用过程,解析动作主要针对类或接口、字段、类方法、接口方法、方法类型、方法句柄和调用点限定符7类符号引用进行。...符号引用就是一组符号来描述目标,可以是任何字面量。 直接引用就是直接指向目标的指针、相对偏移量或一个间接定位到目标的句柄。...*开头类均被Bootstrap ClassLoader加载)。启动类加载器是无法被Java程序直接引用。...应用程序是由这三种类加载器互相配合进行加载,如果有必要,我们还可以加入自定义类加载器。因为JVM自带ClassLoader只是懂得本地文件系统加载标准java class文件

20850
领券