JVM篇(六)--类加载过程

Java中父类和子类的加载和执行顺序解析 在Java中,父类和子类的加载和执行顺序是先加载父类,然后加载子类。创建子类对象时,先分配内存空间,然后按照父类优先的顺序初始化父类的实例变量和调用父类的构造方法,最后初始化子类的实例变量和调用子类的构造方法。在Java中,当使用继承关系创建父类和子类时,会涉及到父类和子类的加载和执行顺序。下面我将详细解析父类和子类的加载和执行顺序,并提供相应的源代码来说明。在Java中,当我们创建一个子类对象时,首先会加载父类,然后再加载子类。当父类和子类都加载完毕后,就可以创建子类对象了。接下来,会加载子类。 阅读详情

1.类加载执行过程

类加载子系统处于中间位置,它前面是一个字节码文件,有了字节码文件需要类加载子系统进行读取,对.class文件的规格进行检查判断,然后在将常量池也好,字段与发放的描述按照规则加载到JVM内存中存储,类加载子系统就相当于运行时数据区的入口所在

1.1 类加载子系统介绍

 1.类加载子系统负责从文件或者网络加载Class字节流,(类文件不一定都是在此磁盘的,只要符合这个字节流,通过网络或者其他介质都是可以加载的)

  2.类加载子系统会读取字节码中的信息,运行时存储到jvm中

  3.任何Class要被类加载子系统加载,都要符合JVM的规范

1.2 类加载执行过程

类先判断是否被加载过,没有的话去加载类到jvm的内存中存储,在内存中就拥有了字节码的信息,但是还没有生效,因为还没有验证需要进入第二阶段。

链接阶段:又分为验证、准备、解析

验证阶段就是将刚存储的字节码信息按jvm的规范进行校验,比如前4个字节是不是cafe xxxx ,后四个字节是不是版本号等等,验证都是在这个阶段完成的

准备阶段:就是将类的成员变量赋给默认的值,比如 int 类型的就会赋值成0。

解析阶段:比较复杂,就是在字节码中的符号引用转换为内存中的直接引用。

最后阶段初始化:类变量静态代码块赋予真正的变量值

根据这三个类的初始化就完成了,后续就可以进行实际运行,根据初始化的类,程序就可以对对象进行实例化的工作,后面会分别讲解这几个过程

2.类加载阶段

类加载阶段主要的事情是 字节码文件的数据以二进制流的方式被jvm中的类加载器进行读取和加载,在这个过程中做了如下几件事情:

1.类加载器读取字节码二进制流(读文件)

2.解析字节码二进制流的静态数据转换为运行时JVM放法区数据。(方法区时很重要的区域,类、字段、方法,常量信息都在内存运行时存储到方法区中)

3.解析完成以后,生成类的java.lang.Class,类对象会存放到堆中,作为方法区的访问入口。

4.在加载类的过程中,比如会触发父类加载(子类加载,父类也会按照上面1-3依次进行加载处理操作)

一个A.class字节码文件,类加载器会判断运行时数据区是否有A类呢?如果没有的话,类加载器进行读取A类字节码文件,读取的同时也会分析A类,发现A类文件是有继承关系的BaseA,那么类加载器就会先加载BaseA,这里有两个区域,BaseA与A都有对应的方法区存储的数据,以及字节对应对象的实例就是堆区,也就是说A类里的字节码文件的信息是放在方法区,通过A的class实例就可以获得对应类的字段和方法。

一个Class字节码文件被类加载器加载,如果有父类先加载父类,在加载子类,会加载到堆区的对应实例作为入口,可以访问方法区中所对应的字段等等信息

Class何时被创建?

1.new实例化时: A a=new A();

2.反射:Class clza=Class.forName("xx.xx.A");

3.子类加载时父类同时加载

4.JVM启动时,包含main方法的主体会被加载,以及所有对象对的父类都时Object,所以程序启动前必有Object的类

5. 1.7动态类型语言支持

3.类链接(Linking)阶段

链接阶段有三个步骤:

1.验证(verify):确保字节码符合虚拟机要求

2.准备(prepare):为字段赋予初始值

3.解析(resolve):符号引用转为直接引用

2.1 验证阶段

验证阶段的内容基本就是以下图的内容:

验证阶段和加载阶段是交替执行的,读取的二进制流就可以直接验证,这里的验证阶段不是对运行时环境加载内存的操作,只是对二进制操作,是否符合条件

1.文件格式校验:前4个字节是否时CAFEBABE,后面4个字节是否时版本号等等

2.元数据匹配语义分析:是否是正确能被使用的语义

3.字节码校验,数据流与控制流分析:平常接触的类型转换是否有校,返回值缺少,还是到哪里不需要返回值等等

4.符号引用:能否找到类、方法等信息

2.2 准备阶段

为static值赋值成初始值,不同类型赋予不同的值,图下的表格是不同的值的初始值,什么时候赋值成真正的值呢,那需要在初始化阶段,初始化阶段是类加载最后一个阶段

2.3 解析阶段

链接中的最后一个操作,将符号引用转换为直接引用,也就是上图中说明,

符号引用:静态字面  

直接引用:动态指针关联

对上面的图 A类,它的父类是BaseA类,符号引用就是用字符串字面的表达方式说明A与BaseA的关系,this class:A     superClass:BaseA,以这种方式说明他们的关系。

在程序运行中A与BaseA是一个实例,他们的关系需要动态的指针去关联,当然知道是什么关系是通过字符串字面去转换指针关联的

解析阶段对哪些事物进行解析呢?

  1. 类解析
  2. 字段解析
  3. 方法解析
  4. 接口解析

1.4 类初始化阶段

初始化阶段是对类的初始阶段对clint方法的执行。

 

1.初始化阶段就是对类变量以及静态变量进行初始化的。

2.子类初始化按照正常加载逻辑,子类创建对象当知道有父类的时候会优先加载父类,那么这里也是子类初始化会优先执行父类的初始化

3.没有类变量和静态代码就不会产生clint(初始化)

4.jvm启动可以选择加+TraceClassLoading来查看类加载顺序,帮助学习

5.为了只初始化依次,初始化方法会加同步锁

咱们用代码演示下:

ClassInitSamples是子类,继承Base类

ClassInitSamples有两个静态类变量,还有一个静态代码块,代码块里的代码是对类变量赋值操作。然后main方法new ClassInitSamples类

父类也有一个静态变量和静态代码块,

测试启动子类的main方法发现父类的初始化是需要先执行的。

如果此时你用JCLASSlIb查看字节码文件,能看到有Clint初始方法。当然此时把类变量和静态方法块去掉,你要是用JCLASSlIb就可以查看字节码里没有了clint了。

 

在vm加入此单词,运行就会把加载顺序过程展示出来

后面就不一一测试了,初始化的知识点概括在以下几点:

 

 

JVM类加载过程详解 除了上面三个自带的以外,用户还能制定自己的类加载器,但是所有自定义的类加载器都应该继承自java.lang.ClassLoader。比如热部署、tomcat都会用到自定义类加载器。在java的日常应用程序开发中,类的加载几乎是由上述3种类加载器相互配合执行的,在必要时,我们还可以自定义类加载器,来定制类的加载方式。为什仫要自定义类加载器?1. 隔离加载类2. 修改类加载的方式3. 扩展加载源4. 防止源码泄露用户自定义类加载器实现步骤: 阅读详情

相关推荐

别再用图片水印了!5种你可能不知道的文本隐写术实战

本文介绍了5种高效的文本隐写术,帮助创作者在不影响内容可读性的情况下嵌入版权信息。从零宽度字符到同形字替换,再到标点符号变形和行尾空格编码,这些技术为数字内容提供了轻量级版权保护方案,特别适用于社交媒体和电子合同等场景。

k8l9m0n的博客 225

JVM类的加载机制

1 类的加载机制 类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对象,用来封装类在方法区内的数据结构。类的加载的最终产品是位于堆区中的Class对象,Class对象封装了类在方法区内的数据结构,并且向Java程序员提供了访问方法区内的数据结构的接口。 1.1 类的加载过程 1.2 加载 加载,是整个类加载过程的第一步,如果需要创建类或者接口,就需要现在Java虚拟机方法区创建于虚拟机实现规定相匹配的内部表示。

qq_34125999的博客 1万+

BUPT软件安全实验三

可以看出栈溢出对程序运行的安全性有很大的威胁,如果不对栈进行保护,只要系统中存在栈溢出漏洞,即可令攻击者通过非正当方法获取操作权限。(6)解决思考题,即:在不修改StackOverrun程序源代码的情况下,构造shellcode,通过JMP ESP的方式实现通过记事本打开shellcode.txt(可使用CreateProcessA或WinExec等API)。查看缓冲区信息,可以看到dest指向地址0x0012FAF0,其为数组的存放起始位置,也就是shellcode注入的起始位置。

7xun's space 1966

Java 子类和父类详解

1.在许多加载机制中,加载子类必须先加载父类,加载伴随着初始化<client>,所以子类初始化前会先执行父类的初始化: 结果: 所以当子类初始化的时候父类也会初始化 2.当子类实例化的时候父类不会实例化,但是会执行父类的构造方法 父类构造方法的执行,是为了给变量进行赋值,而不是为了实例化父类。 在字节码中,成员变量进行显示初始化其实是在构造函数中的...

Allence的博客 2万+

【Bug—eNSP】华为eNsp路由器设备启动一直是0解决方案!

软件,添加AR设备时启动异常,最开始错误代码是40,最后通过重新安装,又出现了新的问题,启动AR设备一直是0,而且界面卡住。打开控制面板→网络和Internet→网络和共享中心→更改适配器设置,然后再按以下步骤一次操作。重新打开eNsp,然后选择注册设备,注册成功后重新启动一下,这个时候AR设备就可以正常启动啦。打开eNsp→菜单→工具→选项→服务器设置,写入刚刚写的IP地址就可以了。打开VirtualBox,将左侧的文件全部删除(点击删除所有文件)

享你所想 3418

【多模态实验总结】整理了几十篇文章,理清 多模态目标检测 在写论文中需要做哪些实验

此篇文章中将多模态目标检测所做的实验,分成了各个类别,目的是为了对多模态的实验有一个清晰的理解。可以看到,很多表格中放的并不是做了单一的某一个对比,而是将提出的模型,在不同的骨干、数据集上的效果与基线进行对比,使内容更全面。因此这里提到的各种实验,大家在后续改进写论文过程中可以根据自己的论文内容进行整合。对于这里提到的这些文章,大家都可以看看,我只是按照我这里的分类截取了部分实验,这里提到的所有实验在每篇文章中也基本能看到相应的实验。

Limiiiing的博客 3141

java类的加载

类加载器 加载类的时候需要有类加载器 引导类加载器不可以获取 他是祖宗 扩展类加载器是ext目录下的jar包的加载器 他是父类 自己写的类 加载器都是系统类加载器 他是儿子 ClassLoader systemClassLoader = ClassLoader.getSystemClassLoader();//系统加载器 ClassLoader parent = systemClassLoader.getParent();//扩展类加载器 ClassLoader

qq_54494937的博客 158

QT西游回合制源码+java后台管理系统

这是一套回合制游戏源码,很适合学习。

renkai721的专栏 2536

子类继承父类的加载顺序详解

题记:以前总是对不会的东西逃避,但是不会早晚有一天还是会找到你,今天以此笔记做记! 分析两种情况的加载顺序,一种:单独类的加载顺序。二:子类继承父类的加载顺序 一:单独类的加载顺序 静态变量、静态代码块(从上到下的顺序加载) 类的非静态变量,非静态块(从上到下的顺序加载) 构造函数 二:子类继承父类的加载顺序 父类静态变量、父类静态代码块(从上到下的顺序加载) 子类静态变量、子类静态...

养只狗名叫猫 3287

Windows配置L2TP/IPsec连接

Windows 系统的 L2TP/IPsec 功能,通过配置即可构建加密 VPN 通道。

m0_61806534的博客 1668

华为OD机试 - 猴子吃桃 - 二分查找(Java 新系统 100分)

每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天优快云在线答疑。

学Java,找哪吒 3850

JVM类加载过程

1. JVM类加载过程 1.概述 从类的生命周期而言,一个类包括如下阶段: 加载、验证、准备、初始化和卸载这5个阶段的顺序是确定的,类的加载过程必须按照这种顺序进行,而解析阶段则不一定,它在某些情况下可能在初始化阶段后在开始,因为java支持运行时绑定。 2. 类加载时机 加载(loading)阶段,java虚拟机规范中没有...

zhaocuit的博客 10万+

1.14、基于NARX神经网络的磁悬浮建模(matlab)

数据准备:首先,需要准备用于训练和测试的磁悬浮系统的输入和输出数据,包括磁力、电流、位置、速度等信息。数据可以被保存在MATLAB的数据文件中,并加载到工作空间中。使用MATLAB的神经网络工具箱,创建一个NARX神经网络。需要定义网络的层次结构、节点数、激活函数等参数。通常,NARX网络包括自回归层和外部输入层。数据预处理:对加载的数据进行预处理,包括去除噪声、归一化处理等操作,以确保数据质量和网络训练的稳定性。使用MATLAB的训练函数,如trainlm或者trainbr,对NARX神经网络进行训练。

XU157303764的博客 1999

JVM类加载机制详解(一)JVM类加载过程

首先Throws(抛出)几个自己学习过程中一直疑惑的问题: 1、什么是类加载?类加载的时机? 2、什么是类初始化?什么时候进行类初始化? 3、什么时候会为变量分配内存? 4、什么时候会为变量赋默认初值?什么时候会为变量赋人为设定的初值? 5、类加载器是什么? 6、如何编写一个自定义的类加载器? 首先,在代码编译后,就会生成JVM(Java虚拟机)能够识别的二进制字节流文件(*

Leeon的博客 6万+

深度学习工具包 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")

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

【JVM】类加载过程浅析

structured Query Language:结构化查询语言 分类: 1) DDL(Data Definition Language)数据定义语言 用来定义数据库对象:数据库,表,列等。关键字:create, drop,alter 等 2) DML(Data Manipulation Language)数据操作语言 用来对数据库中表的数据进行增删改。关键字:insert, delete, update 等 3) DQL(Data Query Language)数据查询语言 用来查询数据库中表的记录(

界王拳十倍 3309

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

【JVM】详解 类加载器与类加载过程

摘要:Java类加载机制采用双亲委派模型,包含启动类、扩展类和应用程序类三种加载器。类加载流程分为加载、连接(验证、准备、解析)和初始化阶段,其中初始化触发条件严格限定。双亲委派机制通过递归请求父类加载器保证安全性和类的唯一性,但存在破坏场景如线程上下文类加载器和OSGi热部署。JDK9引入模块化后,类加载器架构调整为平台类加载器取代扩展类加载器,并采用新的模块归属机制。类加载器与类本身共同确定类的唯一性,不同加载器加载的相同类被视为不同类。

Muyu1uz的博客 1011

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

JVM 类加载过程笔记

JVM类加载过程详解:从字节码到可执行对象 摘要:JVM类加载是将.class文件转换为可执行对象的过程,分为加载、验证、准备、解析和初始化五个核心阶段。加载阶段读取字节码并生成Class对象;验证确保代码安全性;准备分配静态变量内存;解析转换符号引用;初始化执行静态代码块。JVM采用双亲委派模型,通过启动类加载器、扩展类加载器和应用类加载器实现层次化加载。类卸载需满足Class对象和类加载器均无引用条件。该机制保证了Java程序的安全性和灵活性,支持动态扩展和自定义加载逻辑。

笑衬人心的博客 1292

JVM类加载机制—JVM类加载过程

JVM类加载过程分析

weixin_44991038的博客 1540

深入JVM类加载机制

类加载的流程以及双亲委派模型

Floating Cat 2万+

【JVM】类加载的全过程

在Java语言中,每个类或接口都会被编译器编译程一个个class字节码文件。类加载则是将这些class字节码文件的二进制数据读入到内存中,并且对数据进行校验、解析、初始化。最终,每一个类都会在方法区保存一份它的元数据,在堆中创建一个与之对应的Class对象。类的生命周期需要经历7个阶段,分别是加载、验证、准备、解析、初始化、使用、卸载类的加载过程则是前面5个阶段,分别是加载、验证、准备、解析、初始化,其中验证、准备、解析可以归纳为 “连接” 阶段。

沉迷写代码的程序猿的博客 2478

一文读懂JVM类加载机制过程及原理万字详解

一文读懂Java虚拟机—类加载机制过程及原理万字详解

大数据开发、JAVA开发、人工智能AI 4924

【JVM篇】类加载过程详解

类加载过程粗略上来看可以分为三个阶段:加载、连接、初始化。本文对这三个阶段进行了较为详细的讲解。

weixin_64366370的博客 2365

【JVM】JVM类加载过程

如果一个类加载器收到了类加载的请求,它首先不会自己去尝试加载这个类,而是把这个请求委派给父类加载器去完成,每一个层次的类加载器都是如此,因此所有的加载请求最 终都应该传送到最顶层的启动类加载器中,只有当父加载器反馈自己无 法完成这个加载请求(它的搜索范围中没有找到所需的类)时,子加载器才会尝试自己去完成加载启动类加载器:加载 JDK 中 lib 目录中 Java 的核心类库,即$JAVA_HOME/lib目录。扩展类加载器。加载 lib/ext 目录下的类。应用程序类加载器:加载我们写的应用程序。

ZXT的博客 1487

JVM(一) 类加载器、类加载过程、JVM参数设置

每种操作系统的解释器都是不同的,但基于解释器实现的虚拟机是相同的,这也是Java能够跨平台的原因。负责加载class文件,class文件在文件开头有特定的文件标示,并且ClassLoader只负责class文件的加载,至于它是否可以运行,则由Execution Engine决定。通过这种层次模型,可以避免类的重复加载,也可以避免核心类被不同的类加载器加载到内存中造成冲突和混乱,从而保证了Java核心库的安全。,即 将要执行的指令代码),由执行引擎读取下一条指令,是一个非常小的内存空间,几乎可以忽略不记。

m0_56799642的博客 1128
上一篇: JVM入门
下一篇: JVM篇(七)--类加载器
PromisingGirl-Du
博客等级 码龄9年 1143粉丝 225原创
评论 6
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值