类加载器 && 双亲委派机制

重磅!Repo Wiki! RepoWiki是Qoder平台的智能文档生成功能,通过静态代码分析自动提取项目架构、模块依赖和核心逻辑,并持续追踪代码变更保持文档同步。其工作流程分为四个阶段:1)代码扫描与AST解析;2)结构分析与依赖映射;3)文档智能生成;4)增量更新机制。支持多种编程语言,能识别设计模式并推断技术决策,适用于新项目搭建和遗留系统维护。优势在于降低理解成本和提高开发效率,但存在文件数量限制和依赖Git的局限性。典型应用场景包括自动生成架构图、API手册和团队知识沉淀。 阅读详情

类加载结构

在这里插入图片描述

 整体作用:

  1.类加载器子系统负责从文件系统或者网络中加载Class文件,class文件在文件开头有特定的文件标识。

  2.ClassLoader只负责class文件的加载,执行则由Execution Engine决定

  3.加载的类信息存放在方法区的内存空间,除了类信息外,方法区还会存放运行时常量池的信息,可能还包括字符串字面量和数字常量

 

类加载过程

在这里插入图片描述
 

类加载流程图

在这里插入图片描述

 

类加载过程一:Loading

 1.通过一个类的全限定名获取定义此类的二进制字节流

 2.将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构。

 3.在内存中生成一个代表这个类的java.lang.Class对象,作为方法区这个类的各个数据的访问入口。

 

类加载过程二:Linking

 1.验证(Verify)

  目的在于确保Class文件中的字节流包含信息符合房前虚拟机的要求,保证被加载类的正确性 ,不会危害虚拟机自身安全。

  主要包括四种验证:文件格式验证、元数据验证、字节码验证【CA FE BA BE】、符号引用验证。

 
 2.准备(Prepare)

  为类变量分配内存并且设置该类变量的默认初始值【零值】。

 准备阶段不包含引用了final修饰的static。由于final在编译时便分配了,准备阶段会显示初始化。

 准备阶段不会为实例变量分配初始化。因为类变量会被分配在方法区中,而实例变量是随着对象一起分配到Java堆中的。

 
 3.解析(Resovle)

  将常量池内的符号引用转换为直接引用的过程。、

​ 解析操作往往伴随着JVM执行初始化后才执行

  解析动作主要针对类或接口、字段、类方法、接口方法、方法类型等、对应常量池中的CONSTANT_Class_info、CONSTANT_Fledref_info、CONTSTANT_Methodref_info等。

​ 符号引用:一组符号来描述所引用的目标。

​ 直接引用:直接指向目标的指针、相对偏移量或一个间接到目标的句柄。

 

类加载过程三:Initialization

 初始化阶段:执行类构造器<clinti>()的过程

  该方法是javac编译器自动收集类中的所有类变量的赋值动作和静态代码块中的语句合并而来。

  该构造方法指令按语句在源文件中出现的顺序执行。

 虚拟机必须保证一个类()方法在多线程下被同步加锁。

 

类加载器分类

 JVM支持两种类型的类加载器

  引导类加载器(Bootstrap ClassLoader)

  自定义类加载器(User-Defined ClassLoader)

JVM将所有派生于抽象类ClassLoader的类加载器都划分为自定义类加载器

 

类加载器关系图

在这里插入图片描述

 

引导类加载器

 又叫 启动类加载器(Bootstrap ClassLoader)

​

 引导类是由C/C++实现,嵌套在JVM内部

​

 作用:

  加载Java的核心库(Java_HOME/jre/lib/rt.jar、resource.jar或sun.boot.class.path路径的内容),提供JVM自身需要的类。

​

  处于安全考虑,Bootstrap启动类加载器只加载包为java、javax、sun等开头的类。

 

扩展类加载器

 Extension ClassLoader

​

 由Java语言编写,由sun.misc,Launcher$ExtClassLoader实现

​

 派生于ClassLoader类,父类加载器为 启动类加载器

 从java.ext.dirs系统属性所指定的目录中加载类库,或从JDK的安装目录的jre/lib/ext子目录下加载类。如果用户创建的JAR放在此目录下,也会自动拓展类加载器加载。

 

系统类加载器

 AppClassLoader

​

 java语言编写,由 sun.misc.Launcher$AppClassLoader 实现

 派生于 ClassLoader 类,父类加载器为 启动类加载器

 它负责加载环境变量classpath或系统属性 java.class.path 指定路径下的类库

 该类加载器是程序中的默认类加载器。通常,Java应用的类都是由它来加载。

 通过 ClassLoader#getSystemClassLoader() 可以获取到该类加载器。

​

用户自定义类加载器

 通常,类的加载器都有引导、扩展、系统类加载器相互配合执行。有需要时,可以自定义加载器来定制类的加载方式。

 什么时候可以自定义加载器?

  隔离加载类

  修改类加载的方式

  扩展类加载的方式

 防止源码泄露

 实现步骤:

  通过继承抽象类java.lang.ClassLoader类,实现自己的类加载器来满足特定的需求。

​
​ 在编写自定义类加载器时,若不复杂的需求,可以直接继承URLClassLoader类,便可避免编写findClass()和获取字节码流的方式。使编写更加简洁。

 

​ JDK1.2之前,在自定义类加载器时,需要继承ClassLoader类并重写laodClass()

​ JDK1.2之后,不在建议去覆盖loadClass(),而是把自定义的类加载逻辑写在findClass()中

​
 

双亲委派机制

 Java虚拟机对class文件采用的是按需加载的方式,即需要该类时,才将它的class文件加载到内存生成class对象。

 加载某个类的class文件时,JVM采用双亲委派模式,即将请求交给父类处理。它是一种任务委派模式。

 

工作原理

在这里插入图片描述

 1.如果一个类加载器接收到类加载请求,它并不会马上自己加载,而是将这个请求委托给父类的加载器执行。

 2.如果父类加载器存在自身的父类加载器,则进一步向上委托,不断递归,直至请求交由顶层的启动类加载器

 3.如果父类加载器可以完成类加载任务,便成功返回。父类无法完成该加载任务时,再向子类加载器去尝试加载。

优势

 避免类的重复加载

 保护程序安全,防止核心API被随意篡改。

  eg:自定义类 java.lang.String 将不会影响java中String的正确使用。

 

沙箱安全机制

 保证java核心源代码的保护。

 eg:

  当你自定义String类时,想启动该main()。

  但在加载自定义String类时,会率先使用引导类加载器加载,即rt.jar包中的String.class,会报错:没有main方法。

  这样便保证了java核心类的保护。

 

其他的小问题

 1.JVM中判断两个class对象是否为同一对象的条件?

  - 类的完整类名必须一致。(包名.类名)

  - 加载这个类的CLassLoader实例对象必须相同

即便 两个Class对象来源于用一Class文件,被同一虚拟机所加载。但只要加载它们的ClassLoader实例对象不同,那么这两个class对象也是不相等的。

 

​ 2.类的主动使用和被动使用

 主动使用和被动使用的区别:

  在类加载时,主动使用会被初始化。而被动使用不会。

 

 什么时候为主动使用?

​ 1.创建类的实例

 2.访问某个类或接口的静态变量、或对该静态变量赋值。

 3.调用类的静态方法

 4.反射

 5.初始化一个类的子类

 6.JVM启动时被标名为启动类的类

 7.动态语言支持

 

 什么时候为被动使用?

  除了主动使用的7种情况之外,都属于被动使用。

couldn‘t upgrade db schema: insert into ACT_GE_PROPERTY values (‘common.sche[已解决] 启动整合了flowable的项目,初始化时报错。flowable没有自动建表, 原因 测试数据库版本是MySQL5.7。经过查询和尝试,原因是:在这个数据库里面,已经有一个数据库里面有activiti的这些表了,它检索的时候全库检索查到它了,所以flowable不去建表了,但是我们指定的这个schema里卖弄还是空的,所以它报了找不到表。解决方法:mysql的链接上加上参数如下,让本schema成为默认的schema。... 阅读详情

相关推荐

【数据集】waymo motion dataset介绍与数据解析可视化

waymo motion数据集下载,数据描述,数据特征和地图特征,数据解析并完成数据可视化

shuaixio的博客 5180

2、Java 类加载机制(过程)、双亲委派机制

2、Java 类加载机制(多理解) 2.1 类的加载方式 类加载分为动态加载和静态加载。动态加载是从外存储器中加载类,一般类加载机制分析的也是动态加载。而静态加载本质上是从内存中创建类的实例对象,此时类已经被加载到内存中。 一.静态加载 通过new关键字来创建Test的实例对象。 二.动态加载 通过Class.forName()来加载类,然后调用类的newInstance()方法实例化对象。 通过类加载器的loadClass()方法来加载类,然后调用类的newInstance()方法

qq_45912388的博客 1249

数据库迁移策略实战:MySQL到PostgreSQL

数据库迁移是一项复杂且细致的任务,需要充分的准备工作、合适的迁移策略和严格的验证与优化步骤。通过选择合适的迁移工具、进行手动迁移和应用程序适配、以及迁移后的验证与优化,可以确保数据迁移的成功和业务的连续性。希望本文的分享能够为大家在MySQL到PostgreSQL的数据库迁移实战中提供一些有用的参考和启示。

shejizuopin的博客 1732

类加载器-双亲委派机制

双亲委派机制

weixin_40461030的博客 3194

从Axure转Figma?这篇编组、缩放、圆角、评论的对比指南帮你无缝切换

本文为资深Axure设计师提供了向Figma无缝迁移的实战指南。文章深度对比了编组、缩放、圆角、评论等核心操作,重点解析了Figma独特的自动布局、组件系统和实时协作功能,旨在帮助用户快速适应新工具,实现设计思维与工作效率的跃迁。

tomato的博客 850

IPD流程中的RR\OR\IR\PB\SR\AR\CR等名词汇总(基于新的产品包需求架构)

RR:Raw Requirement,原始需求=》IR:Initial Requirement,初始需求=》SR:System Requirement,系统需求=》AR:Allocated Requirement,分配需求=》CR:Process Change Requirement,流程变更需求。

a1809032425的博客 3191

类加载的过程以及双亲委派机制

1.JVM的类加载器机制 (1)全盘负责:当一个类加载器负责加载某个Class时,该Class所依赖和引用其他Class也将由该类加载器负责载入,除非显示使用另一个类加载器载入 (2)双亲委派:先让父类加载器视图加载该Class,只有在父类加载器无法加载该类时才尝试从自己的类路径中加载该类 (3)缓存机制:会保证所有加载过的Class都会被缓存,当程序中需要某个Class时,类加载器先从缓存曲中搜寻该Class,只有当缓存区不存在该Class对象时,系统才会读取该类对应的二进制数据,并将其转换为Class对

Shi_MiaoXuan的博客 390

2.STM32F407ZGT6 学习笔记-移植 FreeRTOS

1. 在工程下建议FreeRTOS文件夹 2. 在FreeRTOS文件夹下建立 src 和 port 文件夹 (src用于存放freertos源码,port文件夹存放内存和接口相关的文件) 3. 复制freertos/source文件夹下所有c文件复制到刚刚建立的freertos/src目录下 4. 复制FreeRTOSv9.0.0\FreeRTOS\Source\portablex下的MemMang和RVDS文件夹复制到刚刚建立的port问价夹下 5. 将FreeRTOSv9.0.0\FreeRTOS

Car12 1233

为什么类加载器要使用双亲委派机制?

为什么类加载器要使用双亲委派机制?

Bevisxia的博客 1616

解锁RK3588:内核模块签名与安全启动配置全攻略

RK3588作为一款高性能嵌入式SoC芯片,其内核模块签名与安全启动配置是保障系统安全的核心机制。本文详细介绍了RK3588的芯片特性,重点阐述了安全启动的硬件信任链原理和内核模块签名的实现方法。通过具体步骤演示了从密钥生成、模块签名到验证加载的完整流程,并深入解析了安全启动配置的硬件连接、软件工具准备、密钥烧录等关键环节。此外,还提出了防御旁路攻击和动态信任链扩展等高级安全策略,为RK3588在工业控制、智能安防等高安全要求场景中的应用提供了全面的安全解决方案。

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 347

2025B卷最新华为OD机试持续收录中 - 真题题库清单,按考点划分(Python / JS / C++ / JAVA / C语言)

2025B卷最新华为OD机试持续收录中 - 真题题库清单,按考点划分(Python / JS / C++ / JAVA / C语言)

算法大师! 3057

类加载器的双亲委派,看这篇就够了

本文阅读时间大约9分钟。在上一篇文章中,我们梳理了:类的生命周期、类加载器的作用、类的加载和卸载的时机等等,这篇文章我们接着前文继续复习类加载器的知识,主要包括:JVM中...

阿杜的世界 936

【雕爷学编程】Arduino智慧农业之温湿度数据上传到云平台

它们可能有错误、不适用或者无法编译。在实施过程中,需要注意传感器的选择和校准、通信和网络稳定性、数据隐私和安全保护、电源管理以及数据分析和决策支持等方面的事项。数据分析和决策支持:上传到云平台的温湿度数据可以提供丰富的信息,但需要合适的数据分析和决策支持工具来帮助农业业主理解和利用这些数据。您可以根据自己的需求和喜好选择适合您的云平台和库,并根据您的具体硬件配置进行适当的修改和调整。将温湿度数据上传到云平台,农业业主可以实时监测粮库内的温湿度情况,及时采取通风、除湿等措施,确保粮食质量和长期储存的稳定性。

雕爷学编程 1275

JVM-类加载器 && 双亲委派机制

原文连接JVM是Java Virtual Machine(Java虚拟机)的缩写,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。由一套字节码指令集、一组寄存器、一个栈、一个垃圾回收堆和一个存储方法域等组成。JVM屏蔽了与操作系统平台相关的信息,使得Java程序只需要生成在Java虚拟机上运行的目标代码(字节码),就可在多种平台上不加修改的运行,这也是Java能够“一次编译,到处运行的”原因。

qq_43259860的博客 1633

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

【从零开始学习JVM | 第四篇】类加载器的分类以及双亲委派机制

类加载器(ClassLoader)是JAVA虚拟机提供给应用程序去实现类和接口字节码数据的技术。类加载器只参与加载过程中字节码获取并加载到内存中这一部分。

fckbb的博客 5840

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Java类加载器和双亲委派机制

类加载是Java如此流行的一个重要因素,是一个Java程序的起点,是万物的起源。 Java类加载的简单介绍 Java中的类加载大体分为四类:启动类加载器(Bootstrap ClassLoader)扩展类加载器(Extension ClassLoader)应用程序类加载器(Application ClassLoader)用户自定义类加载器(User ClassLoader) 启动类加载器: ...

yan245294305的博客 5606

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

JVM —— 类加载器的分类,双亲委派机制

类加载器的分类,双亲委派机制:启动类加载器、扩展类加载器、应用程序类加载器、自定义类加载器;JDK8及之前的版本,JDK9之后的版本;什么是双亲委派模型,双亲委派模型的作用,如何打破双亲委派机制

qq_44700578的博客 1628

Java 类加载器与双亲委派机制

类加载器和双亲委派机制 类加载器种类: 1、引导类加载器: 负责加载支持JVM运行位于JRE lib目录下的核心库,比如 rt.jar、charsets.jar 等 c++ 语言在启动 java 虚拟机的时候,用 c++语言实现的引导类加载器,用来加载 jdk 最重要的核心 jar 包 2、 扩展类加载器: 负责加载支持JVM运行位于JRE 目录下ext扩展目录中的 jar 类包 3、 应用程序类加载器:负责加载ClassPath路径下的类包,主要程序员自己编写的那些类) 4、自定义加载器:负责用户自定

不负年华 1352

【实战JVM】打破双亲委派机制之线程上下文类加载器

线程上下文类加载器 利用上下文类加载器加载类,比如JDBC和JNDI等。 我们来看下JDBC的案例: 1、JDBC中使用了DriverManager来管理项目中引入的不同数据库的驱动,比如mysql驱动、oracle驱动。

鱼干的博客 2628

【JVM】Java类加载器 和 双亲委派机制

当一个类加载器需要去加载类时,会 首先委派给其父类加载器进行加载,如果父类加载器无法加载,才由该类加载器自己去加载但是如果只为了定义自定义加载器,建议重写findClass方法,这样不会破坏双亲委派机制。@Override// 核心类库还是交给双亲委派机制进行加载// 通过类的全限定名,找到字节码文件,并转为byte数组 不写了// 类的加载就是由defineClass这个底层方法实现的。

qq_43325216的博客 1223

【JVM】双亲委派机制&类加载器

BootstrapClassLoader(启动类加载器):最顶层的加载类,由 C++实现,通常表示为 null,并且没有父级,主要用来加载 JDK 内部的核心类库( %JAVA_HOME%/lib目录下的 rt.jar 、resources.jar 、charsets.jar等 jar 包和类)以及被 -Xbootclasspath参数指定的路径下的所有类。ExtensionClassLoader(扩展类加载器)

Blue_Pepsi_Cola的博客 1479

JVM—类加载器、双亲委派机制

本文介绍了JVM中类加载器与双亲委派机制的相关内容。

向上的咸鱼blueblue的博客 1065

类加载器和双亲委派机制

类加载器(ClassLoader)是Java虚拟机提供给应用程序去实现获取类和接口字节码数据的技术,类加载器只参与加载过程中的字节码获取并加载到内存这一部分。类加载器会通过二进制流的方式获取到字节码文件的内容,接下来将获取到的数据交给Java虚拟机,虚拟机会在方法区和堆上生成对应的对象保存字节码信息。一个Tomcat程序中是可以运行多个Web应用的,如果这两个应用中出现了相同限定名的类,比如Servlet类,Tomcat要保证这两个类都能加载并且它们应该是不同的类。

埃泽漫笔 1388

类加载器与双亲委派机制

在Java虚拟机(JVM)中,类加载器(Class Loader)是负责将字节码文件加载到内存中并转换为类对象的组件。类加载器的主要任务是将 .class 文件加载到 JVM 中,以便程序能够使用这些类。JVM中的类加载器机制是Java平台的关键部分,它实现了Java的动态类加载特性。

Bileton的博客 1019

JVM专栏-类加载器和双亲委派机制

当我们编写好的Java文件编译打包会生成一个Jar包或者War包,而类加载器负责将Jar包或者War包中的class文件加载到JVM虚拟机中,当然JVM把类加载到内存中然后再到方法调用是需要经过很多步骤的,我们一步一步去了解一下Class文件背后运行的原理。负责加载支撑JVM运行的位于JRE的lib目录下的核心类库,比如rt.jar等负责加载支撑JVM运行的位于JRE的lib目录下的ext扩展目录中的Jar类包负责加载ClassPath路径下的类包,主要就是加载我们自己写的那些类。

sc35262的博客 947

类加载器以及如何打破双亲委派机制

java里有如下几种类加载器: 引导类加载器:负责加载支撑JVM运行的位于JRE的lib目录下的核心类库,如:rt.jar、charsets.jar等等 扩展类加载器:负责加载支持JVM运行的位于jre目录下的ext扩展目录中的jar包 应用程序类加载器:负责加载classpath路径下的类包,主要就是加载开发人员编写的程序代码类 自定义加载器:负责加载自定义类路径下的类文件 双亲委派机制 类加载机制的委派层级结构如下: 其实这个加载过程就包含一个双亲委派机制。这个委派机制的大..

专属_Smile 6806
上一篇: JVM的学习
下一篇: 运行时数据区之PC寄存器
code_Floyed
博客等级 码龄7年 3粉丝 56原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值