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

java类的加载机制

加载阶段完成后,虚拟机外部的二进制字节流就按照虚拟机所需的格式存储在方法区之中,而且在Java堆中也创建一个 java.lang.Class类的对象,这样便可以通过该对象访问方法区中的这些数据。...对于引用数据类型reference来说,如数组引用、对象引用等,如果没有对其进行显式地赋值而直接使用,系统都会为其赋予默认的零值,即null。...我们可以理解为static final常量在编译期就将其结果放入了调用它的类的常量池中 解析:把类中的符号引用转换为直接引用 解析阶段是虚拟机将常量池内的符号引用替换为直接引用的过程,解析动作主要针对类或接口...、字段、类方法、接口方法、方法类型、方法句柄和调用点限定符7类符号引用进行。...并且只有调用了newInstance()方法采用调用构造函数,创建类的对象 。

60931

JVM类加载机制(转)

加载阶段完成后,虚拟机外部的 二进制字节流就按照虚拟机所需的格式存储在方法区之中,而且在Java堆中也创建一个java.lang.Class类的对象,这样便可以通过该对象访问方法区中的这些数据。...我们可以理解为static    final常量在编译期就将其结果放入了调用它的类的常量池中 解析:把类中的符号引用转换为直接引用 解析阶段是虚拟机将常量池内的符号引用替换为直接引用的过程,解析动作主要针对类或接口...、字段、类方法、接口方法、方法类型、方法句柄和调用点限定符7类符号引用进行。...虚拟机将结束生命周期 – 执行了System.exit()方法 – 程序正常执行结束 – 程序在执行过程中遇到了异常或错误而异常终止 – 由于操作系统出现错误而导致Java虚拟机进程终止 3.类加载器...并且只有调用了newInstance()方法采用调用构造函数,创建类的对象 。

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

    Java虚拟机(四):JVM类加载机制

    加载阶段完成后,虚拟机外部的 二进制字节流就按照虚拟机所需的格式存储在方法区之中,而且在Java堆中也创建一个java.lang.Class类的对象,这样便可以通过该对象访问方法区中的这些数据。...· 对于引用数据类型reference来说,如数组引用、对象引用等,如果没有对其进行显式地赋值而直接使用,系统都会为其赋予默认的零值,即null。...、字段、类方法、接口方法、方法类型、方法句柄和调用点限定符7类符号引用进行。...虚拟机将结束生命周期 – 执行了System.exit()方法 – 程序正常执行结束 – 程序在执行过程中遇到了异常或错误而异常终止 – 由于操作系统出现错误而导致Java虚拟机进程终止 3、类加载器...并且只有调用了newInstance()方法采用调用构造函数,创建类的对象 。

    29930

    【java进阶之JVM】java类加载机制

    加载阶段完成后,虚拟机外部的 二进制字节流就按照虚拟机所需的格式存储在方法区之中,而且在Java堆中也创建一个java.lang.Class类的对象,这样便可以通过该对象访问方法区中的这些数据。...· 对于引用数据类型reference来说,如数组引用、对象引用等,如果没有对其进行显式地赋值而直接使用,系统都会为其赋予默认的零值,即null。...、字段、类方法、接口方法、方法类型、方法句柄和调用点限定符7类符号引用进行。...虚拟机将结束生命周期 – 执行了System.exit()方法 – 程序正常执行结束 – 程序在执行过程中遇到了异常或错误而异常终止 – 由于操作系统出现错误而导致Java虚拟机进程终止 3、类加载器...并且只有调用了newInstance()方法采用调用构造函数,创建类的对象 。

    32320

    一文让你读懂Java类加载机制!

    加载阶段完成后,虚拟机外部的二进制字节流就按照虚拟机所需的格式存储在方法区之中,而且在Java堆中也创建一个java.lang.Class类的对象,这样便可以通过该对象访问方法区中的这些数据。...对于引用数据类型reference来说,如数组引用、对象引用等,如果没有对其进行显式地赋值而直接使用,系统都会为其赋予默认的零值,即null。...我们可以理解为static final常量在编译期就将其结果放入了调用它的类的常量池中 解析:把类中的符号引用转换为直接引用 解析阶段是虚拟机将常量池内的符号引用替换为直接引用的过程,解析动作主要针对类或接口...、字段、类方法、接口方法、方法类型、方法句柄和调用点限定符7类符号引用进行。...并且只有调用了newInstance()方法采用调用构造函数,创建类的对象 。

    40550

    jvm系列(一):java类的加载机制

    加载阶段完成后,虚拟机外部的二进制字节流就按照虚拟机所需的格式存储在方法区之中,而且在Java堆中也创建一个 java.lang.Class类的对象,这样便可以通过该对象访问方法区中的这些数据。...对于引用数据类型reference来说,如数组引用、对象引用等,如果没有对其进行显式地赋值而直接使用,系统都会为其赋予默认的零值,即null。...我们可以理解为static final常量在编译期就将其结果放入了调用它的类的常量池中 解析:把类中的符号引用转换为直接引用 解析阶段是虚拟机将常量池内的符号引用替换为直接引用的过程,解析动作主要针对类或接口...、字段、类方法、接口方法、方法类型、方法句柄和调用点限定符7类符号引用进行。...并且只有调用了newInstance()方法采用调用构造函数,创建类的对象 。

    94260

    (十五)ThreadLocal的用法,如何解决内存泄漏

    而强引用是造成Java内存泄漏的主要原因之一,内存空间不足时,Java虚拟机会抛出OutOfMemoryError ,使程序异常终止,但是注意,抛出错误也不会回收这些强引用的对象。...ThreadLocal有通过方法:调用get,set或remove方法时,就会尝试删除key为null的entry,可以释放value对象所占用的内存。...而强引用是造成Java内存泄漏的主要原因之一,内存空间不足时,Java虚拟机会抛出OutOfMemoryError ,使程序异常终止,但是注意,抛出错误也不会回收这些强引用的对象。...ThreadLocal有通过方法:调用get,set或remove方法时,就会尝试删除key为null的entry,可以释放value对象所占用的内存。...ThreadLocal有通过方法:调用get,set或remove方法时,就会尝试删除key为null的entry,可以释放value对象所占用的内存。

    1.3K20

    类加载

    类的加载的最终产品是位于堆区中的Class对象,Class对象封装了类在方法区内的数据结构,并且向Java程序员提供了访问方法区内的数据结构的接口 在加载阶段,虚拟机需要完成以下3件事情: 通过一个类的全限定名来获取定义此类的二进制字节流...解析:虚拟机将常量池中的符号引用替换为直接引用(内存地址)的过程 解析阶段是虚拟机将常量池内的符号引用替换为直接引用的过程,解析动作主要针对类或接口、字段、类方法、接口方法、方法类型、方法句柄和调用点限定符...调用任何现有对象的clone()方法; 通过java.io.ObjectInputStream类的getObject()方法反序列化。...定义对象数组,不会触发该类的初始化 类A引用类B的static final常量不会导致类B初始化 (看上面的ClassInitFinalTest) 通过类名获取Class对象,不会触发类的初始化。...通过ClassLoader默认的loadClass方法,也不会触发初始化动作 结束生命周期 在如下几种情况下,Java虚拟机将结束生命周期 执行了System.exit()方法 程序正常执行结束 程序在执行过程中遇到了异常或错误而异常终止

    49830

    Java中常见的异常类型

    EnumConstantNotPresentException 尝试使用未定义的枚举值。 IllegalArgumentException 用于调用方法的非法参数。...CloneNotSupportedException 尝试克隆不实现Cloneable接口的对象。 IllegalAccessException 对类的访问被拒绝。...java.lang.OutOfMemoryError 内存不足错误。当可用内存不足以让Java虚拟机分配给一个对象时抛出该错误。...当调用Thread类的stop方法时抛出该错误,用于指示线程结束。 java.lang.UnknownError 未知错误。用于指示Java虚拟机发生了未知严重错误的情况。...当应用试图在要求使用对象的地方使用了null时,抛出该异常。譬如:调用null对象的实例方法、访问null对象的属性、计算null对象的长度、使用throw语句抛出null等等。

    2.3K40

    【Java 虚拟机原理】Java 反射原理 ( 反射作用 | 反射用法 )

    ; 上图来自博客 【Java 虚拟机原理】垃圾回收算法 ( Java 虚拟机内存分区 | 垃圾回收机制 | 引用计数器算法 | 引用计数循环引用弊端 ) 一、Java 虚拟机内存分区 章节 ;...Java 反射 就是通过拿到 方法区 中的 Class 对象 , 通过该对象获取并访问 Java 类中的 类 , 字段 , 方法 ; JVM 内存 的 方法区 存放 Student.class 字节码数据...局部变量表 中 ; 该局部变量是一个引用类型变量 , 指向 堆区 中 相应对象的内存地址 ; 在 堆区 对象中 , 每个对象都有一个 对象头 , 对象头中存在一个引用 , 指向 方法区 中该对象的 字节码数据...对 Class 进行操作 ; 运行时 , 类 , 方法 , 字段 等 , 可能都是 未知的 , 只能在运行时通过反射 , 调用相关的 类 / 方法 / 字段 等 ; 如 : 在设计框架时 , 不知道...插件化】Hook 插件化框架 ( 反射工具类 | 反射常用操作整理 ) , 在该博客中 , 封装的反射工具类 , 包含了所有可能使用的场景 ; 如 : 反射 类 , 反射获取方法 并 调用方法 , 反射获取字段

    66210

    【读码JDK】-java.lang包介绍

    ,抛出 ClassFormatError 当Java虚拟机尝试读取类文件并格式化错误或者无法解析类文件时,抛出 ClassLoader 类加载器是一个负责加载类的对象 Java 9之前的类加载器:...当调用发不正确的调用方法时,抛出该异常 IllegalMonitorStateException 抛出此异常表示线程已尝试在对象的监视器上等待,或者在没有指定监视器的情况下通知在对象监视器上等待的其他线程...如果Java虚拟机或ClassLoader实例尝试加载类的定义(作为普通方法调用的一部分或作为使用new表达式创建新实例的new ),则new该类,并且无法找到该类的定义。...NoSuchMethodException 无法找到特定方法时抛出 NullPointerException 当应用程序在以下情况尝试使用null时抛出。 这些包括: 调用null对象的实例方法。...Void Void类是一个不可实例化的占位符类,用于保存对表示Java关键字void的类对象的引用

    1.6K20

    02 Java类的加载机制

    类的加载的最终产品是位于堆区中的Class对象,Class对象封装了类在方法区内的数据结构,并向程序员提供了访问方法区内的数据结构的接口。...加载 查找并加载类的二进制数据,加载是类加载过程中的第一个阶段,在加载阶段,虚拟机需要完成以下三件事情: 通过一个类的全限定名来获取其定义的二进制字节流。...加载阶段完成后,虚拟机外部的二进制字节流就按照虚拟机所需的格式存储在方法区之中,而且在Java堆中也创建一个java.lang.Class类的对象,这样便可以通过该对象访问方法区中的这些数据。...解析 解析:把类中的符号引用转换为直接引用 解析阶段是虚拟机将常量池内的符号引用替换为直接引用的过程,解析动作主要针对类或接口、字段、类方法、接口方法、方法类型、方法句柄和调用点限定符 7类符号引用进行...并且只有调用了newInstance() 方法采用调用构造函数,创建类的对象。

    64770

    java的类加载

    方法是由编译器自动收集类中的变量赋值操作,静态语句块中的语句 合并而成的 虚拟机会保证 子方法执行之前它的父类方法已经执行完毕 如果一个类中没有对静态变量赋值...定义对象数组,不会触发该类的初始化 常量在编译期间会存入调用类的常量池中,本质上并没有直接引用定义常量的类,不会触 发定义常量所在的类 通过类名获取 Class 对象,不会触发类的初始化。...new一个对象的时候 访问类的静态变量(注意上面的,如果是访问父类的静态字段,不会触发子类的初始化) 访问类的静态方法 反射 Class.forName 初始化一个类的子类(会先初始化父类) 虚拟机启动时...,定义了main方法的那个类 类加载器 虚拟机设计团队把加载动作放到 JVM 外部实现,以便让应用程序决定如何获取所需的类,JVM 提 供了 3 种类加载器: 启动类加载器(Bootstrap ClassLoader...; //利用反射实例化对象,和调用TwoNum类里面的twoNum方法 Object o = aClass.newInstance(); Method add

    85520

    JVM活学活用——类加载机制

    对于引用数据类型reference来说,如数组引用、对象引用等,如果没有对其进行显式地赋值而直接使用,系统都会为其赋予默认的零值,即null。...解析——把类中的符号引用转换为直接引用   解析阶段是虚拟机将常量池内的符号引用替换为直接引用的过程,解析动作主要针对类或接口、字段、类方法、接口方法、方法类型、方法句柄和调用点限定符7类符号引用进行。...类的主动使用包括以下六种:   创建类的实例,也就是new的方式   访问某个类或接口的静态变量,或者对该静态变量赋值   调用类的静态方法   反射(如Class.forName(“com.Test”...结束生命周期   在如下几种情况下,Java虚拟机将结束生命周期   – 执行了System.exit()方法   – 程序正常执行结束   – 程序在执行过程中遇到了异常或错误而异常终止   – 由于操作系统出现错误而导致...并且只有调用了newInstance()方法采用调用构造函数,创建类的对象 。

    1K80

    NullPointerException : Attempt to invoke a method on a null object reference 完美解决方法

    今天的主题是大家在Java开发中经常遇到的经典错误:NullPointerException(简称NPE)。这个错误通常发生在尝试对null对象调用方法时,它不仅困扰新手,也会让经验丰富的开发者头疼。...关键词:NullPointerException、Java错误、null对象引用问题修复。...null对象上调用方法或访问其字段时,Java虚拟机(JVM)将会抛出这个异常。...导致NullPointerException的常见原因 2.1 对未初始化的对象调用方法 在对象尚未被初始化或赋值之前,试图调用其方法是导致NPE的最常见原因。...表格总结 错误原因 解决方案 调用未初始化的对象方法 在调用前检查是否为null 遍历空数组或集合 在循环前确认集合不为空 操作返回null的函数结果 使用Optional类包装可能为null的返回值

    18510

    Uncaught TypeError: Cannot read property setAttribute of null

    错误可能的原因这个错误通常出现在你试图为一个null对象设置属性时。上述错误消息指出,你调用了一个名为'setAttribute'的方法,但该方法不能被null对象调用。...尝试在一个null对象上调用'setAttribute'方法会导致错误。...== null) { element.setAttribute('name', 'value');} 这样可以避免在null对象上调用方法的错误。...JavaScript在DOM加载之前尝试获取按钮、输入框或内容区域的引用。 通过确保HTML中存在正确的元素并在DOM加载后获取引用,我们可以避免这个错误的发生。...结论"Uncaught TypeError: Cannot read property 'setAttribute' of null"错误通常意味着你试图在null对象上调用方法。

    52250

    一文带你读懂JVM类加载机制

    类加载的最终产品是位于堆区中的Class对象,Class对象封装了类在方法区内的数据结构,并且向Java程序员提供了访问方法区内的数据结构的接口....在加载阶段, 虚拟机需要完成以下三件事情: 通过一个类的全限定名来获取其定义的二进制字节流 将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构 在Java堆中生成一个代表这个类的java.lang.Class...属性将 a 赋值为 100 解析 解析阶段是指虚拟机将常量池中的符号引用替换为直接引用的过程,undefined 主要针对类或接口、字段、类方法、接口方法、方法类型、方法句柄和调用点限定符7类符号引用进行...,或者对该静态变量赋值 调用类的静态方法 反射(如Class.forName(“com.test.Test”)) 初始化某个类的子类,则其父类也会被初始化 Java虚拟机启动时被标明为启动类的类(Java...常量在编译期间会存入调用类的常量池中,本质上并没有直接引用定义常量的类,不会触发定义常量所在的类 通过类名获取 Class 对象,不会触发类的初始化 通过 Class.forName 加载指定类时,如果指定参数

    69720

    深入理解Java类加载器(ClassLoader)

    验证阶段是非常重要的,但不是必须的,他对程序运行期间没有任何影响,如果所引用的类经过反复验证,那么可以考虑采用-Xverifynone参数来关闭大部分的类验证措施,来缩短虚拟机加载类的时间。...2.4 解析 当通过准备阶段之后,就进入了解析阶段,解析阶段是虚拟机将常量池内的符号引用替换为直接引用的过程,解析动作主要针对类或接口,字段,类方法,接口方法,方法类型,方法句柄和调用点限定符7类符号引用进行...2.8 结束生命周期 在如下几种情况下,Java虚拟机将结束生命周期 执行了System.exit()方法。 程序正常执行结束。 程序在执行过程中遇到异常或者错误而异常终止。...ClassLoader的loadClass()方法获取class对象。...> c) 使用该方法可以使类的Class对象创建完成的同时也被解析。前面我们说链接阶段主要使对字节码进行验证,为类变量分配内存并设置初始值,同时将字节码的文件中符号引用转为直接引用。

    36510

    JVM集合之类加载子系统

    虚拟机必须保证一个类的()方法在多线程下被同步加锁。 样例: ? 字节码阅读器插件 ? 在未定义前进行调用会导致“非法前向引用”错误 ?...主动使用 创建类的实例 访问某个类或接口的静态变量,或者对该静态变量赋值 调用类的静态方法 反射 初始化一个类的子类 Java虚拟机启动被标明为启动类的类 JDK 7 开始提供的动态语言支持:java.lang.invoke.MethodHandle...如果已载入,那么返回java.lang.Class对象;否则返回null。如果强行装载某个已存在的类,那么则抛出链接错误。 ClassLoader getParent():获取类装载器的父装载器。...双亲委派机制 Java虚拟机对class文件采用的是按需加载的方式,也就是说当需要使用该类时才会将它的class文件加载到内存生成class对象。...对类加载器的引用 JVM必须知道一个类是由启动类加载器还是用户类加载器加载的,如果一个类是由用户类加载器加载的,那么jvm会将这个类加载器的一个引用作为类信息的一部分保存到方法区中,当解析一个类到另一个类的引用的时候

    34520

    Spring是如何解决循环依赖的?

    ,需先实例化构造器的参数,而由于循环引用这个参数无法提前实例化,故只能抛出错误。...(中间省略了其他代码),上面也主要有两个步骤 第一个步骤的getSingleton()方法的作用是尝试从缓存中获取目标对象,如果没有获取到,则尝试获取半成品的目标对象;如果第一个步骤没有获取到目标对象的实例...---- 这里其实就是主干逻辑,在整个过程中会调用三次doGetBean()方法 第一次调用的时候会尝试获取A对象实例,此时走的是第一个getSingleton()方法,由于没有已经创建的A对象的成品或半成品...,因而这里得到的是null 然后就会调用第二个getSingleton()方法,创建A对象的实例,然后递归的调用doGetBean()方法,尝试获取B对象的实例以注入到A对象中 此时由于Spring容器中也没有...B对象的成品或半成品,因而还是会走到第二个getSingleton()方法,在该方法中创建B对象的实例 创建完成之后,尝试获取其所依赖的A的实例作为其属性,因而还是会递归的调用doGetBean()方法

    28330
    领券