首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏指点的专栏

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

    "C:\Users\MAIBENBEN\Desktop\blog\Java常用技术\Java 机制2)----加载过程" Main 命令。 (2)----加载过程"。 双亲委派模型 双亲委派模型是 Java 虚拟机默认的加载机制,也是其推荐的加载机制,其流程如下:当某个加载器要加载某个时,先判断该类有没有被当前加载加载过,如果加载过,则直接返回对应 Class , c1 == c2: " + c1 + ", " + c2.toString() + ", " + (c1 == c2)); } catch (ClassNotFoundException 好了,这篇文章中我们详细看了一下关于 JVM中加载机制,下一篇文章我们将一起研究一下 class 文件的格式,届时会再度回顾这篇文章的某些内容。

    81620发布于 2019-06-14
  • 来自专栏余林丰

    虚拟机加载机制2)——加载

    《深入理解Java虚拟机》一书中将加载过程放到了加载器前面一节,但在这里我想先讲“加载器”。在上一篇加载时机中我们用大量篇幅来讲解了加载过程中的5个步骤的最后一步——初始化。 在这一节中,我们实际是在讲解加载过程5个步骤的第一步——加载。 我们再次回顾加载过程的5个步骤: image.png 加载过程的“加载”步骤是通过加载器(ClassLoader)来实现的。 1 package day_14_classloader; 2 3 import java.io.IOException; 4 import java.io.InputStream; 5 从传统固定思维来看,应该是处在最低层的自定义加载器进行加载,当发现不能加载时将请求传递加载传递给上一层加载器——应用程序加载器,以此类推,直到到达最顶层的启动加载器。 1 /** 2 * 3 * 此方法和书中的方法略有不同,书中方法为protected synchronized Class<?

    91360发布于 2018-01-09
  • 来自专栏老铁丁D

    加载机制

    加载机制 加载过程总的来说分为7个过程:加载,验证,准备,解析,初始化,使用,卸载,其中的验证,准备,解析又称为连接阶段 java虚拟机规范并没有规定什么时候要进行加载阶段,但是规定了什么时候必须进行初始化阶段 1,遇到new指令的时候,或调用静态方法,又或者访问的静态属性(被final修饰的字段除外,已经被放在常量池里面) 2,初始化子类的时候,发现父还未初始化必须先初始化父。 123 说明通过子类引用父的静态字段,不会导致子类初始化 例子2 /** * * 常量在编译阶段会存入调用的常量池中,本质上并没有直接引用到定义常量的,因此不会触发定义常量的的初始化。 字段B的值将会是2而不是1 static class Parent{ public static int A=1; static{ A=2; } } static class Sub extends >\lib\ext目录中的加载到虚拟机内存中 应用程序加载器:它负责加载用户路径(ClassPath)上所指定的库 双亲委派机制 加载器之间如下图的这种层次关系,称为加载器的双亲委派模型。

    65620编辑于 2022-08-12
  • 来自专栏Apache IoTDB

    加载机制

    加载具体机制可以参考: Java加载机制: https://zhuanlan.zhihu.com/p/25228545 JVM 基础 - Java 加载机制: https://www.pdai.tech /md/java/jvm/java-jvm-classload.html 2 加载机制 2.1 双亲委派机制 双亲委派机制是指如果一个加载器收到了加载的请求,它首先不会自己去尝试加载这个,而是把请求委托给父加载器去完成 启动加载器是无法被 Java 程序直接引用的。 2. 2.2 全盘负责机制 当一个加载器负责加载某个 Class 时,该 Class 所依赖的和引用的其他 Class 也将由该类加载器负责载入,除非显式使用另外一个加载器来载入。 结合加载机制中的全盘负责机制,我们知道这个匿名是由加载依赖它的 org.apache.iotdb.MySum 的加载器来加载的,我们把这个加载器记为 A。

    82710编辑于 2023-03-21
  • 来自专栏only theone 的记录

    加载机制

    1.访问的编译期静态常量时,不会触发的初始化行为。的初始化行为是指在加载之后(也就是的Class对象被创建之后),为的静态成员变量分配存储空间。 2.编译期静态常量会在编译阶段被存储到NonInitialization的常量池中,在以后对编译期静态常量的引用都实际上被替换为对NonInitializaion对自身常量池的引用,所以访问的编译期静态常量并不会触发的初始化行为 3.初始化一个之前,会先初始化该类的父

    44210发布于 2019-11-21
  • 来自专栏Panda诚

    加载机制

    加载机制 Java虚拟机把描述的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这个过程被称作虚拟机的加载机制加载阶段既可以使用Java虚拟机里内置的加载器来完成,也可以由用户自定义的加载器去完成,开发人员通过定义自己的加载器去控制字节流的获取方式(重写一个加载器的findClass()或loadClass 验证阶段对于虚拟机的加载机制来说,是一个非常重要的、但却不是必须要执行的阶段,因为验证阶段只有通过或者不通过的差别,只要通过了验证,其后就对程序运行期没有任何影响了。 由于父的()方法先执行,也就意味着父中定义的静态语句块要优先于子类的变量赋值操作,字段B的值将会是2而不是1。 static class Parent { public static int A = 1; static { A = 2; } } static class Sub extends Parent

    90620发布于 2020-09-01
  • 来自专栏晏霖

    加载机制

    点击上方“晏霖”,选择“置顶或者星标” 曾经有人关注了我 后来他有了女朋友 1.6加载机制 1.6.1概述 学习本章前我们要对文件结构有一个简单的认识,而学习文件结构没有任何难度,更多的是参考《 JDK1.8后,如果接口定义了默认方法,接口的实现发生了初始化,那么接口要在其前被初始化。 n 加载加载阶段要完成三件事: 1. 通过的全限定名获取的二进制文件流。 2. n 验证 验证是连接的第一步,这个阶段主要是校验class文件的字节流包是否符合《Java虚拟机规范》所规定的,是虚拟机自身保护的机制2,因此,最后输出的是x=2,y=1。 代码清单1-2 加载机制源码 //ValueUtility.java static { SharedSecrets.setJavaCorbaAccess(new JavaCorbaAccess

    55220发布于 2020-11-24
  • 来自专栏全栈程序员必看

    JVM 加载机制_加载机制的作用和过程

    事实上,虚拟机把描述的数据从Class文件加载到内存,并对数据进行校验,转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型的过程就是虚拟机的加载机制。 对于jvm加载机制,我们主要关注两个问题: 加载时机?(初始化的五种情况) 加载过程? 2.加载时机 这里的“加载”只是加载过程的一个阶段,代表这“加载”的这一过程的开始,jvm并没有强制性约束在什么时候开始加载过程。 一般我们说加载,指的是整个加载过程。 2.验证 验证是连接阶段的第一步,目的是为了确保Class文件的字节流中包含的信息符合当前虚拟机的要求,并且不会危害虚拟机自身的安全。 2.构造器中的赋值操作 对于静态块中的赋值操作,我们需要注意:静态语句块只能访问到定义在静态语句块之前的变量,定义在它之后的变量,在前面的静态语句块可以赋值,但是不能访问。

    78020编辑于 2022-09-23
  • 来自专栏用户5325874的专栏

    加载机制总结

    加载机制 虚拟机把描述的数据从class文件加载到内存,并且进行校验、解析、初始化。最终形成可以直接使用的Class对象,这就是加载机制。 当用户在自己的代码中,需要某些额外的时,再通过加载机制加载到JVM中,并且存放一段时间,便于频繁使用。 根据加载机制,当被加载引用了另外一个的时候,需要使用第一个加载器进行加载。 (只有ClassLoader被卸载了,对应的才能被卸载) WebappClassLoader的加载逻辑 tomcat的加载机制是违反了双亲委托模型的,各个web应用自己的加载器(WebAppClassLoader from=singlemessage [Tomcat加载机制

    69420发布于 2020-01-16
  • 来自专栏JAVA基础知识

    Java加载机制

    Java加载机制是指 JVM 把的字节码文件加载到内存,并进行链接和初始化的过程。 加载加载是“加载”(Class Loading)过程的一个阶段,是通过双亲委派机制进行加载。 对于任意一个,都需要由加载它的加载器和这个本身一同确立其在Java虚拟机中的唯一性,每一个加载器,都拥有一个独立的名称空间。加载器可分为启动加载器、扩展加载器和应用加载器。 它负责加载用户路径(ClassPath)上所指定的库,开发者可以直接使用这个加载器,如果应用程序中没有自定义过自己的加载器,一般情况下这个就是程序中默认的加载器。 加载模型双亲委派模型如果一个加载器收到了加载的请求,它首先不会自己去尝试加载这个,而是把这个请求委派给父加载器去完成,每一个层次的加载器都是如此,因此所有的加载请求最终都应该传送到顶层的启动加载器中

    47110编辑于 2024-10-14
  • 来自专栏学习

    【JVM】加载机制

    加载机制 加载指的是,Java 进程运行的时候,需要把 .class 文件从硬盘读取到内存,并进行一些列的校验解析的过程(程序要想执行,就得进入内存) .class 文件==>对象 硬盘==>内存 加载过程 加载的过程,其实是在 Java 官方文档中给出的说明 加载:找到. class 文件,并且读文件内容 验证:校验 .class 文件的格式是否符合 JVM 规范要求 准备:给对象分配内存 (此时内存空间全是 0 的==>的静态成员也就是全 0 的值) 解析:针对中的字符串常量进行处理 把对象的各个属性进行赋值填充==>触发对父加载,初始化静态成员,执行静态代码块 加载大体的过程可以分为五 个步骤(也有资料上说是三个,这个情况就是把 2,3,4 合并成一个了) 1. 加载 把硬盘上的 .class 文件找到,打开文件,读取到文件内容(认为读到的是二进制的数据) 找文件这里还有点幺蛾子(后面再说) 2.

    22510编辑于 2024-10-15
  • 来自专栏木木玲

    加载机制”详解

    概述 虚拟机的加载机制:虚拟机把描述的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型。 同时,通过“-XX:+TraceClassLoading”打印被加载加载信息,发现MyParent2没有被加载!! 通常可以通过如下方式获取的二进制字节流:   [1] 从本地系统中直接加载   [2] 从网络中获取,这种场景最典型的应用就是Applet。    关于“非数组”的加载: 相对于加载过程的其他阶段,一个非数组加载阶段(准确地说,是加载阶段中获取的二进制字节流的动作)是开发人员可控性最强的,因为加载阶段既可以使用系统提供的引导加载器来完成 ② 元数据验证; ③ 字节码验证; ④ 符号引用验证 对于虚拟机的加载机制来说,验证阶段是一个非常重要的、但不是一定必要(因为对程序运行期没有影响)的阶段。

    1.2K10发布于 2018-06-27
  • 来自专栏Java架构师必看

    JVM 加载机制

    其中加载的过程包括了加载、验证、准备、解析、初始化五个阶段。 加载: 查找并加载的二进制数据 加载加载过程的第一个阶段,在加载阶段,虚拟机需要完成以下三件事情: 【1】通过一个的全限定名来获取其定义的二进制字节流。 加载器并不需要等到某个被“首次主动使用”时再加载它,JVM规范允许加载器在预料某个将要被使用时就预先加载它,如果在预先加载的过程中遇到了.class文件缺失或存在错误,加载器必须在程序首次主动使用该类时才报告错误 加载 .class文件的方式: 【1】从本地系统中直接加载; 【2】通过网络下载 .class文件; 【3】从zip,jar等归档文件中加载 .class文件; 【4】从专有数据库中提取 .class 在 Java中对变量进行初始值设定有两种方式: 【1】声明变量时指定初始值; 【2】使用静态代码块为变量指定初始值; JVM初始化步骤: 【1】假如这个还没有被加载和连接,则程序先加载并连接该类

    78720发布于 2021-05-14
  • 来自专栏酒楼

    JVM加载机制

    JVM加载机制 java虚拟机把描述的数据从Class文件加载到内存,并对数据进行校验,转换解析和初始化,最终形成可以被虚拟机直接使用的java类型,这就是虚拟机的加载机制加载的最终产品是位于堆区中的Class对象,Class对象封装了在方法区内的数据结构,并且向Java程序员提供了访问方法区内的数据结构的接口。 (2加载.class文件的方式 ​ 1.从本地系统中直接加载2.通过网络下载.class文件 ​ 3.从zip,jar等归档文件中加载.class文件 ​ 4.从专有数据库中提取.class (2)元数据的验证 对的元数据信息进行语义校验(其实就是对中的各数据类型进行语法校验),保证不存在不符合Java语法规范的元数据信息。 5.初始化(Initialization) 对的静态变量,静态代码块执行初始化操作 步骤: 1.加入这个还没有被加载和连接,则程序先加载并连接该类 2.加入该类的直接父还没有被初始化,则先初始化其直接父

    43310编辑于 2023-12-30
  • 来自专栏Python程序员杂谈

    java加载加载机制

    在沙箱组件中包括装载器结构,加载器体系结构也是java沙箱的第一道防线,因为程序都是通过加载器才能够加载到JVM中的。   加载器有三方面的作用: 1. 它防止了恶意代码去干涉善意代码 2. 其中一个大家所熟悉的词就是“双亲委派机制”,所谓“双亲委派机制”,就是某个特定的加载器在接到加载的请求时,首先将加载任务委托给父加载器,依次递归,如果父加载器可以完成加载任务,就成功返回;只有父加载器无法完成此加载任务时  扩展加载器(extensions class loader):它用来加载 Java 的扩展库。Java 虚拟机的实现会提供一个扩展库目录。该类加载器在此目录里面查找并加载 Java 。  系统加载器(system class loader):它根据 Java 应用的路径(CLASSPATH)来加载 Java 。一般来说,Java 应用的都是由它来完成加载的。 关于java加载机制推荐大家看这篇文章《深入探讨 Java 加载器》,IBM文档,写的很详细。

    1.4K10发布于 2019-02-28
  • Java加载机制

    加载的时候,是采用的双亲委派机制,即把请求交给父处理的一种任务委派模式。工作原理(1)如果一个加载器接收到了加载的请求,它自己不会先去加载,会把这个请求委托给父加载器去执行。 (2)如果父还存在父加载器,则继续向上委托,一直委托到启动加载器:Bootstrap ClassLoader(3)如果父加载器可以完成加载任务,就返回成功结果,如果父加载失败,就由子类自己去尝试加载 下面给大家列举一下,破坏双亲委派机制最常见的场景。3.1 JNDIJNDI是Java中的标准服务,它的代码由启动加载器去加载。 有了线程上下文加载器,JNDI服务就可以使用它去加载所需要的SPI代码,也就是父加载器请求子类加载器去完成加载的动作,这样就打破了双亲委派机制。 那么,Tomcat加载机制是怎么样的?CommonClassLoader:是Tomcat最基本的加载器,它加载可以被Tomcat容器和Web应用访问。

    51500编辑于 2024-11-27
  • 来自专栏Leetcode名企之路

    jvm加载机制

    加载机制:虚拟机把描述的数据从class文件加载,并对数据进行校验、转换解析、初始化,最终形成可以被虚拟机直接使用的java类型。 加载过程 其中加载的过程包括了加载、验证、准备、解析、初始化五个阶段。 加载 1、通过一个的全限定名来获取其定义的二进制字节流。 2、将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构。 = 0; var2 < var1; ++var2) { MetaIndex.registerDirectory(var0[var2]); 双亲委派模型 如果一个加载器收到了加载的请求,它首先不会自己去尝试加载这个,而是把请求委托给父加载器去完成,依次向上,因此,所有的加载请求最终都应该被传递到顶层的启动加载器中,只有当父加载器在它的搜索范围中没有找到所需的

    66230发布于 2018-11-29
  • 来自专栏宇宙之_一粟

    Java加载机制

    1、描述加载过程及各个步骤的主要工作? 答: 加载过程可以大体分为三个大的阶段:加载、连接、初始化。其中,连接阶段又可以细分为:验证、准备、解析这三个阶段。 准备:给变量分配内存,并且设置变量初始值。 解析:将常量池的符号引用替换为直接引用的过程 初始化:根据程序去初始化变量和其他资源。 ? 2、简述加载器的双亲委派原则及双亲委派的意义? 答:当某个加载器在接到加载的请求时,会将加载任务委托给父加载器,依次递归,父加载器可以完成加载任务,就成功返回;不能加载则子类加载器自己完成加载。 有3加载器: 启动加载器(Bootstrap ClassLoader) 扩展加载器(Extension ClassLoader) 应用程序加载器(Application ClassLoader ) 但用户还可以自定义加载器。

    79631发布于 2020-10-26
  • 来自专栏鳄鱼儿的技术分享

    Java加载机制

    这是我参与「掘金日新计划 · 12 月更文挑战」的第27天,点击查看活动详情 加载机制 JVM的加载机制主要有3种,全盘负责/双亲委派/缓存机制。 双亲委派 所谓的双亲委派,则是先让父加载器试图加载该Class,只有在父加载器无法加载该类时才尝试从自己的路径中加载该类。 通俗的讲,就是某个特定的加载器在接到加载的请求时,首先将加载任务委托给父加载器,依次递归,如果父加载器可以完成加载任务,就成功返回;只有父加载器无法完成此加载任务时,才自己去加载。 缓存机制 缓存机制将会保证所有加载过的Class都会被缓存,当程序中需要使用某个Class时,加载器先从缓存区中搜寻该Class,只有当缓存区中不存在该Class对象时,系统才会读取该类对应的二进制数据 双亲委派 双亲委派机制的优势:采用双亲委派模式的是好处是Java随着它的加载器一起具备了一种带有优先级的层次关系,通过这种层级关可以避免的重复加载,当父亲已经加载了该类时,就没有必要子ClassLoader

    25310编辑于 2024-05-21
  • 来自专栏开发笔记

    JVM加载机制

    加载过程 加载 连接 验证 准备 解析 初始化 加载 获取的二进制字节流加载到内存(比如从Zip包,网络,反射中读取) 将字节码的静态数据结构转换成运行时数据结构 在内存中生成一个代表这个的java.lang.Class (JVM的自我保护机制) 正常运行Java程序可以通过.java编译成class文件,然后交由JVM执行。编译器虽然本身可以检测Java的安全问题。 加载器 启动(Bootstrap)加载器 启动加载器主要加载的是JVM自身需要的,它负责将 /lib路径下的核心库或-Xbootclasspath参数指定的路径下的jar包加载到内存中 这个加载使用 双亲委派模型的流程: 当一个加载器收到加载的请求,首先会把请求委派给父加载器去加载,因此最终的请求都会发给启动加载器(Bootstrap ClassLoader)。 【举个例子】每个都有一个共同的父Object,每个在被加载时都会先去加载Object,按照双亲委派模型的思路,所有的都会优先被启动加载加载,那么也就是说只需要加载一次Object,当其他需要

    46330发布于 2019-09-24
领券