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

Java加载机制

各个步骤的主要工作如下: 加载:一个规则,就是需要把.java文件如何变成.class文件。...这个规则就是在Java堆中生成一个代表这个java.lang.Class对象,作为方法区访问这些数据的访问入口。 验证:验证字节流是否符合Class文件格式的规范。...答:当某个加载器在接到加载的请求时,会将加载任务委托给父加载器,依次递归,父加载器可以完成加载任务,就成功返回;不能加载则子类加载器自己完成加载。...有3加载器: 启动加载器(Bootstrap ClassLoader) 扩展加载器(Extension ClassLoader) 应用程序加载器(Application ClassLoader...意义:双亲委派避免的重复加载问题,以及避免Java核心的API被篡改,保证了代码安全

66931

Java加载机制

这是我参与「掘金日新计划 · 12 月更文挑战」的第27天,点击查看活动详情 加载机制 JVM的加载机制主要有3种,全盘负责/双亲委派/缓存机制。...缓存机制 缓存机制将会保证所有加载过的Class都会被缓存,当程序中需要使用某个Class时,加载器先从缓存区中搜寻该Class,只有当缓存区中不存在该Class对象时,系统才会读取该类对应的二进制数据...双亲委派 双亲委派机制的优势:采用双亲委派模式的是好处是Java随着它的加载器一起具备了一种带有优先级的层次关系,通过这种层级关可以避免的重复加载,当父亲已经加载了该类时,就没有必要子ClassLoader...其次是考虑到安全因素,java核心api中定义类型不会被随意替换。...假设通过网络传递一个名为java.lang.Integer的,通过双亲委托模式传递到启动加载器,而启动加载器在核心Java API发现这个名字的,发现该类已被加载,并不会重新加载网络传递的过来的

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

    Java加载机制

    把一个Java源文件动态编译并执行加载。 2.2 连接 连接阶段负责把的二进制数据合并到JRE中,其又可分为如下三个阶段: 验证:确保加载到信息符合JVM规范,无安全问题。...加载器及加载机制 java.lang.Object |__java.lang.ClassLoader 加载器负责将class文件读入内存并为之生成对应的java.lang.Class...3.1 加载机制 ?...层级关系 Java加载机制主要有以下三种: 双亲委派模型:如果一个加载器收到了加载的请求,它会先把请求委托给父加载器去完成,依次递归,一直到最顶层的启动加载器;只有在父加载器无法完成的加载工作时...JDK 9中的加载机制有所改变。三个内置的加载器一起协作来加载。 JDK 9中的加载机制有所改变。三个内置的加载器一起协作来加载。 JDK 9中的加载机制有所改变。

    1.1K30

    Java加载机制

    Java的程序要运行需要将编译好的class文件加载到JVM运行时数据区。 ? 在了解的加载机制之前,我们需要了解一下的生命周期。...加载器 Java的加载需要用到加载器。加载器负责装入,搜索网络,jar,zip,文件夹,二进制数据,内存等指定位置的资源。...一个Java程序运行,至少有3个不同的加载器实例,负责加载不同的。...双亲委派模型 Java中的并不会重复加载,同一加载器,同一名,代表的是同一个。而避免重复加载的主要原因在于JVM在加载时默认采用的是双亲委派模型。...由下到上逐级委托,由上到下逐级查找,双亲委派模型保证了Java核心库的类型安全 ? 的卸载 JVM中的不可能一直存在,在满足一定条件的情况下会被卸载掉。

    58510

    Java加载机制

    Java加载机制是指 JVM 把的字节码文件加载到内存,并进行链接和初始化的过程。...加载加载是“加载”(Class Loading)过程的一个阶段,是通过双亲委派机制进行的加载。...验证验证是连接阶段的第一步,这一阶段的目的是为了确保 Class 文件的字节流中包含的信息符合当前虚拟机的要求,并且不会危害虚拟机自身的安全。主要包括以下验证内容:文件格式验证。...对字节码描述的信息进行语义分析,以保证其描述的信息符合 Java 语言规范的要求,这个阶段可能包括的验证点包括:这个是否有父(除了 java.lang.Object 之外,所有的都应当有父);这个的父是否继承了不允许被继承的...在第二阶段对元数据信息中的数据类型做完校验后,这个阶段将对的方法体进行校验分析,保证被校验的方法在运行时不会做出危害虚拟机安全的事件。符号引用验证。

    8610

    Java 机制(3)---- 文件结构

    前言 ​ 在上一篇文章中我们一起来看了一下 Java 虚拟机的加载过程,包括虚拟机加载、验证、准备、解析和初始化 5 个大步骤,同时我们还讨论了 Java 虚拟机加载时采用的双亲委派模型思想。...在这篇文章中我们来一起看一下 class 文件的结构,来进一步加深我们对虚拟机的加载机制机制的理解。本文参考了 《深入理解 Java 虚拟机》一书。...,所以为了安全,虚拟机不允许加载版本号比自己的版本号高的文件。 ​...再论加载 ​ 回想一下我们在上篇文章中讨论的 Java 加载机制,需要经过五大步骤:加载、验证、准备、解析、初始化。...好了,在这篇文章中我们通过一个例子来看了一下文件格式,相信你对 Java 机制有了一个更深的理解。如果博客中有什么不正确的地方,还请多多指点。如果觉得这篇文章对您有帮助,请不要吝啬您的赞。

    64620

    Java 机制(2)---- 加载过程

    "C:\Users\MAIBENBEN\Desktop\blog\Java常用技术\Java 机制(2)----加载过程" Main 命令。...\Desktop\blog\Java常用技术\Java 机制(2)----加载过程"。...验证 步骤用来判断在上一步加载的是否符合当前虚拟机要求,并且不会危害当前虚拟机安全。从语言特性上来说,Java 在编译时就会判断语法的正确性,那为什么虚拟机还要花大功夫来进行验证呢?...双亲委派模型 双亲委派模型是 Java 虚拟机默认的加载机制,也是其推荐的加载机制,其流程如下:当某个加载器要加载某个时,先判断该类有没有被当前加载器加载过,如果加载过,则直接返回对应 Class...好了,这篇文章中我们详细看了一下关于 JVM中加载的机制,下一篇文章我们将一起研究一下 class 文件的格式,届时会再度回顾这篇文章的某些内容。

    65220

    Java加载机制

    上述加载器是逐级继承的 双亲委派机制 某个特定的加载器在接到加载的请求时,首先将加载任务委托交给父加载器,父加载器又将加载任务向上委托,直到最父加载器,如果最父加载器可以完成加载任务,就成功返回...简单来说:双亲委派机制:能被父加载器处理的,不会交给子类加载器去处理的。...双亲委派机制的好处:   保证java核心库的安全性(例如:如果用户自己写了一个java.lang.String就会因为双亲委派机制不能被加载,不会破坏原生的String的加载) 代理模式   ...与双亲委派机制相反,代理模式是先自己尝试加载,如果无法加载则向上传递。...JVM规范、没有安全方面的问题。

    21720

    Java 加载机制详解

    加载机制Java 语言的一大亮点,使得 Java 可以被动态加载到 Java 虚拟机中。 这次我们抛开术语和概念,从例子入手,由浅入深地讲解 Java加载机制。...本文涉及知识点:双亲委托机制、BootstrapClassLoader、ExtClassLoader、AppClassLoader、自定义网络加载器等 文章涉及代码: https://github.com.../wingjay/HelloJava/blob/master/common/src/classloader/HelloClassLoader.java 什么是 Java 加载机制?...首先,最常见的是开发者在应用程序中编写的,这些位于项目目录下; 然后,有 Java 内部自带的核心java.lang、java.math、java.io 等 package 内部的,位于 $...,如果直接复写loadClass(),那还要实现双亲委托机制; 3.

    73040

    Java加载原理机制

    文件,它肯定是符合JVM字节码格式的,但是万一有高手自己写一个class文件,让JVM加载并运行,用于恶意用途,就不妙了,因此这个class文件要先过验证这一关,不符合的话不会让它继续执行的,也是为了安全考虑吧...3.的加载 的加载指的是将的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个这个Java.lang.Class对象,用来封装在方法区的对象。...看下面2图 的加载的最终产品是位于堆区中的Class对象         Class对象封装了在方法区内的数据结构,并且向Java程序员提供了访问方法区内的数据结构的接口 加载的方式有以下几种...中jre/lib/rt.jar里所有的class,由C++实现,不是ClassLoader子类 2)Extension ClassLoader 负责加载java平台中扩展功能的一些jar包,包括$JAVA_HOME...5.委派机制 VM在加载时默认采用的是双亲委派机制

    1.5K100

    java的加载机制

    连接 验证:确保被加载的的正确性 验证是连接阶段的第一步,这一阶段的目的是为了确保Class文件的字节流中包含的信息符合当前虚拟机的要求,并且不会危害虚拟机自身的安全。...,只有在父加载器无法加载该类时才尝试从自己的路径中加载该类 缓存机制,缓存机制将会保证所有加载过的Class都会被缓存,当程序中需要使用某个Class时,加载器先从缓存区寻找该Class,只有缓存区不存在...保证Java程序安全稳定运行 6、自定义加载器 通常情况下,我们都是直接使用系统加载器。...但是,有的时候,我们也需要自定义加载器。比如应用是通过网络来传输 Java的字节码,为保证安全性,这些字节码经过了加密处理,这时系统加载器就无法对其进行加载,这样则需要自定义加载器来实现。...否则,由于双亲委托机制的存在,会直接导致该类由 AppClassLoader加载,而不会通过我们自定义加载器来加载。

    60331

    简述Java加载机制

    加载本质 Java虚拟机把描述的数据从Class文件加载到内存,并对数据进行验证、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是Java虚拟机的加载机制。...,并且不会危害虚拟机自身的安全。...SPI机制与JDBC驱动加载 我们都知道Java的SPI机制是一种JDK内置的服务提供发现机制,比如java.sql.Driver接口,可以由不同的数据库厂商实现此接口,来提供具体数据库的驱动,并且需要按照...Dubbo加载 Dubbo也是基于SPI机制实现的架构,JDK默认的SPI机制加载器ServiceLoader,会在META-INF/services下获取接口的所有实现,虽然也提供了延迟加载,但也基本只能通过遍历全部获取...OSGI加载 OSGI是Java模块化标准,而OSGI实现模块化热部署的关键则是它自定义的加载器机制的实现,每个程序模块(OSGI中称为Bundle)都有一个自己的加载器,当需要更换一个Bundle

    1.9K40

    Java不可变机制

    参考链接: Java 如何创建不可变 不可变(Immutable Class):所谓的不可变是指这个的实例一旦创建完成后,就不能改变其成员变量值。...可变(Mutable Class):相对于不可变,可变创建实例后可以改变其成员变量值,开发中创建的大部分类都属于可变。  不可变的特性对JAVA来说带来怎样的好处? ...1)线程安全:不可变对象是线程安全的,在线程之间可以相互共享,不需要利用特殊机制来保证同步问题,因为对象的值无法改变。...可以降低并发错误的可能性,因为不需要用一些锁机制等保证内存一致性问题也减少了同步开销。  2)易于构造、使用和测试。  不可变的设计原则  如何在Java中写出Immutable的?...5)应该是final的,保证不被继承,如果类可以被继承会破坏的不可变性机制,只要继承覆盖父的方法并且继承可以改变成员变量值,那么一旦子类以父的形式出现时,不能保证当前是否可变。

    94720

    Java加载机制详解

    1.概述 Java加载器负责加载所有的,系统会为所有被载入内存的生成一个java.lang.Class实例。对于同一个,一旦被加载如内存中,就不会被再次加载。...根加载器并不是ClassLoader的子类,它采用C++编写,在Java程序中无法获得。...默认情况下,Java程序使用Application ClassLoader加载一个。...3.加载机制 JVM采用如下三种加载机制: 全盘委托:当一个加载器负责加载某个时,该类所依赖和引用的其他也将由该类加载器负责加载,除非显式指定另一个加载器。...父委托:加载一个时,首先会让其父加载器进行加载,只有在父加载器无法加载该类时才尝试从自己的路径中加载。这一机制可以保证加载的安全性。

    60030

    java的加载机制

    Java堆中生成一个代表这个java.lang.Class对象,作为对方法区中这些数据的访问入口。...2、验证(连接阶段的第一步):确保被加载的的正确性 这一阶段的目的是为了确保Class文件的字节流中包含的信息符合当前虚拟机的要求,并且不会危害虚拟机自身的安全。...虚拟机启动时被标明为启动( JavaTest),直接使用 java.exe命令来运行某个主 6、使用 7、结束生命周期 在如下几种情况下,Java虚拟机将结束生命周期 执行了 System.exit...,主要加载JAVA_HOME/lib/ext目录中的库。...其次是考虑到安全因素,java核心api中定义类型不会被随意替换,假设通过网络传递一个名为java.lang.Integer的,通过双亲委托模式传递到启动加载器,而启动加载器在核心Java API

    39920

    Java加载机制复习

    简介 顾名思义,加载器(class loader)用来加载 Java Java 虚拟机中。...加载器负责读取 Java 字节代码,并转换成 java.lang.Class 的一个实例。每个这样的实例用来表示一个 Java 。...加载器的树状组织结构 Java 中的加载器大致可以分成两,一是系统提供的,另外一则是由 Java 应用开发人员编写的。...系统加载器(system class loader):它根据 Java 应用的路径(CLASSPATH)来加载 Java 。一般来说,Java 应用的都是由它来完成加载的。...其次是考虑到安全因素,Java 核心 API 中定义类型不会被随意替换,假设通过网络传递一个名为 java.lang.Integer 的,通过双亲委托模式传递到启动加载器,而启动加载器在核心 Java

    27020

    Java 加载机制详解

    加载机制Java 语言的一大亮点,使得 Java 可以被动态加载到 Java 虚拟机中。 这次我们抛开术语和概念,从例子入手,由浅入深地讲解 Java加载机制。...本文涉及知识点:双亲委托机制、BootstrapClassLoader、ExtClassLoader、AppClassLoader、自定义网络加载器等 文章涉及代码: https://github.com.../wingjay/HelloJava/blob/master/common/src/classloader/HelloClassLoader.java 什么是 Java 加载机制?...首先,最常见的是开发者在应用程序中编写的,这些位于项目目录下; 然后,有 Java 内部自带的核心java.lang、java.math、java.io 等 package 内部的,位于 $...从源码角度真正理解双亲委托加载机制 上面已经通过一些例子了解了双亲委托的一些特性了,下面来看一下它的实现代码,加深理解。

    51310

    Java 加载机制详解

    我们可以利用加载器,实现的动态加载。 二、的加载机制   在Java中,采用双亲委派机制来实现的加载。那什么是双亲委派机制?...另外两种是 Java 语言自身实现的加载器,包括扩展加载器(ExtClassLoader)和应用加载器(AppClassLoader),扩展加载器负责加载\...比如应用是通过网络来传输 Java 的字节码,为保证安全性,这些字节码经过了加密处理,这时系统加载器就无法对其进行加载,这样则需要自定义加载器来实现。...否则,由于双亲委托机制的存在,会直接导致该类由 AppClassLoader 加载,而不会通过我们自定义加载器来加载。 四、总结   双亲委派机制能很好地解决加载的统一性问题。...但双亲委派机制仅仅是Java 规范所推荐的一种实现方式,它并不是强制性的要求。近年来,很多热部署的技术都已不遵循这一规则,如 OSGi 技术就采用了一种网状的结构,而非双亲委派机制

    24210

    【入坑JAVA安全JAVA反射机制

    0x01 基本概念 Java反射机制是在运行状态时,对于任意一个,都能够获取到这个的所有属性和方法,对于任意一个对象,都能够调用它的任意一个方法和属性(包括私有的方法和属性),这种动态获取的信息以及动态调用对象的方法的功能就称为...java语言的反射机制。...java反射机制给漏洞利用提供了很多便利,我们可以在很多java漏洞的exp中看到它的影子,所以,学习java安全是绕不开它的。...0x02 前面我们知道了反射机制能够做什么,但是java具体是怎么实现这一点的呢?...(最开始接触java安全的时候我就经常会被java的Class类型搞昏) 知道了这几个之后,我们再回到怎么实现 调用一个对象的任意方法这个问题上来,分三步走: 首先获得这个对象对应的Class的实例

    98840

    JAVA加载机制全解析

    class文件 把一个Java源文件动态编译,并执行加载 加载器通常无须等到“首次使用”该类时才加载该类,JVM允许系统预先加载某些 加载器 加载器就是负责加载所有的,将其载入内存中,生成一个...根加载器并不是Java实现的,而且由于程序通常须访问根加载器,因此访问扩展加载器的父加载器时返回NULL JVM加载机制 全盘负责,当一个加载器负责加载某个Class时,该Class所依赖的和引用的其他...Class也将由该类加载器负责载入,除非显示使用另外一个加载器来载入 父委托,先让父加载器试图加载该类,只有在父加载器无法加载该类时才尝试从自己的路径中加载该类 缓存机制,缓存机制将会保证所有加载过的...自定义加载器 import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.lang.reflect.Method...java.exe命令来运行某个主 加载机制加载过程和加载器)

    49730
    领券