java的类加载器
1.什么是类加载器:
所谓类加载器就是把.class文件加载到jvm的方法区内,变成一个Class对象 。
2.类加载器的作用:
首先说明,类加载器是每一个类在创建的时候都会使用的一个“引路人”,它把.class文件“指引到”jvm的方法区 ,变成一个Class对象,然后进行使用,也可以这么说,类加载器就是jvm的一个左膀右臂或者是“小兵”。
3.类加载的名称:
ClassLoader
4.创建对象的具体过程
ClassLoader把.class文件读入内存的方法区,并且执行静态代码块和静态初始化语句------>执行new,在堆内存中创建一个空白对象-------->调用构造器和子类调用父类构造器--------->执行构造器内的逻辑并且为非静态成员变量赋初值,
5.类加载器的分类:
java虚拟机一共分成三类,每一类都有自己的职能,但是有“范围”和“权力”的大小
从大到小依次是:引导:专门负责加载\jdk1.7.0_80\jre\lib\rt.jar,下的类
扩展类加载器:专门负责扩展的类加载器
系统类加载:专门负责classpath下的类也就是项目下的\bin,这个包括项目下的.class,程序员自己写的类,以及第三方jar
6.如何获得类加载器:
在Class类里有一个getClassLoader()方法,可以获取类加载器。
7.类加载器的委托机制:
当程序员在new一个类的时候系统类加载器就会去加载这个类------>但是此时它并不会马上加载而是先去询问扩展类记载器是否可以加载------->同样扩展类加载器也不会马上加载而是回去询问引导能问加载------->如果引导在rt.jar下找到了相关.class文件,那么就会加载这个文件并返回此对象-------->如果引导没有找到那么就会返回null,通知扩展类加载器去加载----->同样的道理,如果扩展类加载器有次文件,那么加载并返回对象-------->否则返回null----------->此时轮到系统类加载器加载文件,发现有此文件,那么会生成此对象------->如果没有那么就会抛出异常ClassNotFoundException
8.类加载器的委托机制的好处:
有人会问,类加载的委托机制这么复杂,为什么还要用呢?答案就是为了安全,试想一下,如果系统类记载器直接就找到并加载这个类,那么是否一个居心叵测的人写了一个和jdk里面同名的类型比如String ,是不是就会加载这个类型,而不去加载rt.jar下的类型了呢,而此时jvm内很多方法都依赖String类型,是不是也就不能用了呢。所以这种方式可以保证类加载的绝对安全!!!
类内部的对象由那个类加载器加载取决于这个对象所在的类由那个类加载器加载。
Tomcat的类加载器
Tomcat提供了两个类加载器,所以在javaweb项目的时候导入第三方jar的时候,导入到web项目的WEB-INF/lib就可以,
这两个累加器分别是:
* 服务器类加载器:负责加载KaTeX parse error: Undefined control sequence: \lib at position 16: {CATALINA_HOME}\̲l̲i̲b̲下面的类!
…{CONTEXT_HOME}\WEB-INF\lib、${CONTEXT_HOME}\WEB-INF\classes,这两个路径下的类!
总体顺序排序
引导
扩展扩展类加载器
系统类类加载器
服务器类加载器
应用类加载器:
但是这两个类加载器有一个特点,就是不具备委托机制,所以在做javaweb项目的时候一定不要把 KaTeX parse error: Undefined control sequence: \WEB at position 15: {CONTEXT_HOME}\̲W̲E̲B̲-INF\lib下的jar放到{CATALINA_HOME}\lib
相关推荐
深入理解Tomcat类加载器与DevLoader特性
本文还有配套的精品资源,点击获取 简介:Tomcat作为一个流行的Java Web应用容器,其类加载器在运行时负责管理Java类的加载。本简介探讨了Java类加载器的基本概念和双亲委派模型,详细介绍了Tomcat中类加载器的层级结构及其支持Web应用隔离的机制。提到了可能存在的"DevLoader"类加载器,它可能具备热部署功能以提高开发效率。文档还涵盖了通过配置文件对类加...
Java类加载机制与Tomcat类加载器架构
Java类加载机制 类加载器 虚拟机设计团队把类加载阶段中的“通过一个类的全限定名来获取描述此类的二进制字节流”这个动作放到Java虚拟机外部去实现,以便让应用程序自己决定如何去获取所需要的类。实现这个动作的代码模块称为“类加载器”。 类加载器可以说是Java语言的一项创新,也是Java语言流行的重要原因之一,它最初是为了满足Java Applet的需求而开发出来的。虽然目前Java A
ZYNQ程序固化实战:从BOOT.bin生成到QSPI/SD卡双启动模式详解
本文详细解析了ZYNQ 7000系列程序固化的完整流程,重点解决了程序断电丢失问题。通过实战演示,从生成BOOT.bin文件到配置QSPI与SD卡双启动模式,逐步指导开发者实现程序在外部存储中的永久驻留,确保产品脱离调试器独立运行。
Java面试题18-tomcat为什么要使用自定义的类加载器
tomcat为什么要使用自定义的类加载器
跨模态行人重识别实战:Python复现SYSU-MM01官方评估协议
本文详细介绍了如何用Python复现SYSU-MM01数据集的官方评估协议,以解决原Matlab代码在Python生态中不便使用的问题。文章深入解析了数据集的`indoor`与`all`两种评估模式,并提供了完整的Python代码实现,包括特征加载、相似度计算、Rank-k与mAP指标计算等核心步骤,确保评估结果与官方Matlab版本完全一致,助力跨模态行人重识别研究。
SIwave串扰分析保姆级教程:从Allegro文件导入到结果解读,手把手教你排查PCB信号问题
本文提供SIwave串扰分析的详细教程,从Allegro文件导入到结果解读,手把手教你排查PCB信号问题。涵盖环境准备、参数配置、串扰扫描技巧及实战案例,帮助工程师精准定位和解决高速PCB设计中的串扰问题,提升信号完整性分析能力。
java的类加载器和Tomcat的类加载器
java的类加载器 1.什么是类加载器: 所谓类加载器就是把.class文件加载到jvm的方法区内,变成一个Class对象 。 2.类加载器的作用: 首先说明,类加载器是每一个类在创建的时候都会使用的一个“引路人”,它把.class文件“指引到”jvm的方法区 ,变成一个Class对象,然后进行使用,也可以这么说,类加载器就是jvm的一个左膀...
从DDH到FastANI:原核生物分类黄金标准的进化史与技术对比
本文系统梳理了原核生物分类标准从DDH到FastANI的四次技术革命,详细解析了95%相似度阈值的科学依据及应用场景。通过对比DDH、16S rRNA、ANI和FastANI的技术特点与性能指标,为微生物研究者提供基因组分类的实战指南,并展望第三代测序时代的分类新挑战。
tomcat9类加载器
我们都知道,tomcat9加载器结构如下图: BoostrapClassLoader:启动类加载器,它是用本地代码实现的类装载器,负责将 JDK 中 jre/lib 下的 类库 或者 XBootClassPath指定的类库加载到内存中,开发者无法直接获取到该加载器的引用(本地代码实现),所以无法通过引用操作 ExtClassLoader:拓展类加载器,由sun公司sun.misc.Laun...
MTK(基础篇)ROM烧录以及分区的作用
本文介绍了MTK芯片设备的刷机流程及关键分区功能。首先通过MTK烧录工具加载ROM文件(包括引导文件和分区表),重点解析了各分区的核心作用:preloader类似BIOS负责硬件初始化;lk作为二级引导程序加载内核;vbmeta验证系统完整性;boot包含Linux内核;dtbo调整硬件配置;modem管理通信功能;tee保护生物识别数据;system/vendor分别存放系统核心和硬件驱动。特别指出preloader、vbmeta等关键分区损坏会导致设备变砖,而recovery分区是重要的救砖入口。全文简
手把手教你学Simulink——基于全桥 LLC 谐振变换器的双向 DC-DC 建模与仿真
本文详细介绍了基于Simulink的双向全桥LLC谐振变换器建模与仿真方法。内容涵盖:1)LLC谐振变换器背景与双向化挑战;2)系统架构设计及关键数学推导(FHA增益分析、双向控制逻辑);3)Simulink建模步骤(功率级搭建、PWM生成、同步整流实现);4)仿真结果分析(正向/反向工作验证、ZVS特性);5)工程实践建议(增益微调、代码生成与HIL测试)。通过手把手教学,帮助读者掌握950V↔48V双向LLC变换器的完整设计流程,实现高效率能量双向流动的同时保持软开关特性,适用于储能系统、车载充电等应用
Tomcat8源码分析系列-类加载器
类加载器 在分析 tomcat 类加载之前,我们简单的回顾下 java 体系的类加载器 启动类加载器(Bootstrap ClassLoader):加载对象是java的核心类库,把一些的 java 类加载到 jvm 中,它并不是我们熟悉的 ClassLoader,而是 jvm 层面由 C/C++ 实现的类加载器,负责加载 $JAVA_HOME/jre/lib 目录下 jvm 指定的类库,它是...
基于Simulink的智能车辆电子稳定控制(ESC)仿真
本文完成了基于 Simulink 的智能车辆电子稳定控制(ESC),实现了:✅ 构建含轮胎非线性的车辆动力学模型✅ 设计滑模横摆稳定性控制器✅ 实现四轮制动力分配逻辑✅ 验证在双移线低附着场景下的卓越稳定性✅ 为主动安全控制系统开发提供完整范式。
Java类加载器--Tomcat ClassLoader类加载器和WebappClassLoader类加载器
本文Tomcat版本基于apache-tomcat-8.5.12.看一下Tomcat的源码Bootstrap类的initClassLoader方法,代码如下: private void initClassLoaders() { try { // 创建commonLoader // 这里父加载器传递null,但是内部会使用默认的类加载器AppClassL...
Pytorch实现之SRGAN+CBAM的结构设计
在SRGAN的残差连接中加入了CBAM注意力机制,同时设计了四类损失来训练。
Probability and Statistics - 4th edition
Probability and Statistics - 4th edition
JAVA类加载器和tomcat类加载体系
一、JVM规范的类加载器1. BootStrap Loader:加载/jre/lib或者System.getProperty("sun.boot.class.path")、或者-XBootclasspath参数指定的路径下的jar 2. Extended Loader:加载/jre/lib/ext或者System.getProperty("java.ext.dirs")、或者-Djava..ext.
android 蓝牙通讯demo
android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。
java类加载过程(双亲委派模型)和 破坏双亲委派 及 tomcat类加载器
一、java类加载过程(双亲委派模型) 我们先来看一张图片,有助于理解类加载器与类加载过程。 概念 虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接时候用的Java类型。 类的生命周期 类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载、(验证、准备、解析)连接、初始化、使用、卸载。其中验证、准备、解析统称为连接 上图中,加载、验证、准备、初始化和卸载这5个阶段的顺序是确定的,类的加载过程必须严格按照这种顺序开始。 解析阶段
深度学习工具包 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');```[](https://bitdeli.com/free "Bitdeli Badge")
java类加载器和tomcat的类加载
类加载器的代理模式 1、启动类加载器BootstrapClassLoader 2、扩展类加载器Extension ClassLoader 3、系统类加载器App ClassLoader 如果一个类加载器收到了一个类加载请求,它不会自己去尝试加载这个类,而是把这个请求转交给父类加载器去完成。每一个层次的类加载器都是如此。因此所有的类加载请求都应该传递到最顶层的启动类加载器中,只有到父类加载器...
Java类加载器和双亲委派模型及Tomcat/SPI为什么要打破双亲委派
JDK 提供的三层类加载器 Bootstrap ClassLoader 启动类加载器,它在类加载器里处于顶层,任何类的加载都要询问它,它的作用是加载核心类库,比如rt.jar、resources.jar、charsets.jar。 主要用于加载JAVA_HOME/lib目录下的类库,也可以通过-Xbootclasspath 参数指定路径。 这个加载器是C++编写的,随着 JVM 启动,通过代码获取为null。 Extention ClassLoader 扩展类加载器,主要用于加载JAVA_HOME/lib
au加载默认的输入和输出设备失败_Java类加载机制与Tomcat类加载器架构
Java类加载机制类加载器 虚拟机设计团队把类加载阶段中的“通过一个类的全限定名来获取描述此类的二进制字节流”这个动作放到Java虚拟机外部去实现,以便让应用程序自己决定如何去获取所需要的类。实现这个动作的代码模块称为“类加载器”。 类加载器可以说是Java语言的一项创新,也是Java语言流行的重要原因之一,它最初是为了满足Java Applet的需求而开发出来的。虽然目前...
Tomcat源码分析-类加载器
在分析 tomcat 类加载之前,我们简单的回顾下 java 体系的类加载器下图描述了类加载器的关系图,其中自定义类加载器有N多个我们知道有双亲委派机制(准确的说是单亲,因为只有一个parent),这只是 java 建议的规范,我们也可以不遵循这条规则,但是建议遵循该规则。此外,有一点需要注意的是,类加载器不局限于,我们也可以自己实现一个类加载器,只要你加载出来的 Class 符合 jvm 规范即可。
java类随着tomcat启动加载_Java和Tomcat类加载机制
加载类是运行程序的基础,了解Java和Tomcat的类加载机制对更有效地开发、调试Web应用程序有一定的积极作用。本文简单介绍Java和Tomcat的类加载机制,希望对大家有所帮助。•JDK/JRE文件结构在安装JDK后,其典型的目录层次如下所示(JDK 1.6.0):主要的目录和JAR简述如下:•\bin:包含在JDK中的开发工具的可执行文件,一般而言,PATH环境变量应包含该目录。•\lib...
深入剖析Tomcat之Bootstrap类与类加载器机制
Bootstrap类作为Tomcat启动入口,通过main方法完成关键初始化工作:设置路径参数、创建多级类加载器(commonLoader、catalinaLoader、sharedLoader)并加载核心Catalina类。Tomcat采用分层类加载机制,commonLoader加载基础通用类,catalinaLoader加载容器核心类,sharedLoader处理共享资源,实现了类资源的安全隔离与高效管理。这种设计既保证了系统稳定性,又为Web应用提供了灵活的类加载环境。
类加载器和Tomcat类加载器
类加载器和Tomcat类加载器 类加载器 1.启动类加载器(Bootstrap ClassLoader):负责加载 JAVA_HOME\lib 目录中的,或通过-Xbootclasspath 参数指定路径中的,且被虚拟机认可(按文件名识别,如 rt.jar)的类。 2.扩展类加载器(Extension ClassLoader):负责加载 JAVA_HOME\lib\ext 目录中的,或通过 jav...
Java和Tomcat类加载机制
加载类是运行程序的基础,了解Java和Tomcat的类加载机制对更有效地开发、调试Web应用程序有一定的积极作用。本文简单介绍Java和Tomcat的类加载机制,希望对大家有所帮助。 JDK/JRE文件结构在安装JDK后,其典型的目录层次如下所示(JDK 1.6.0): 主要的目录和JAR简述如下:/bin: 包含在JDK
1121



被折叠的 条评论
为什么被折叠?



