JVM 类的加载(二)- 类的主动加载

类的加载有六种主动方式

  • 创建类的实例
  • 访问某个类或接口的静态变量,或者对该静态变量赋值
  • 调用类的静态方法
  • 反射
  • 初始一个类的子类(相反初始化父类不会初始子类)
  • Java虚拟机启动时被标明为启动类的类

通过下面的例子,验证类的启动方式

class SingletonOne {
    private static SingletonOne singletonOne = new SingletonOne();
    public static int counter1;
    public static int counter2 = 0;
    private SingletonOne() {
        counter1++;
        counter2++;
    }
    public static SingletonOne getSingletonOne() {
        return singletonOne;
    }
}

class SingletonTwo {
    public static int counter1;
    public static int counter2;
    private static SingletonTwo singletonTwo = new SingletonTwo();
    private SingletonTwo() {
        counter1++;
        counter2++;
    }
    public static SingletonTwo getSingletonTwo() {
        return singletonTwo;
    }
}

public class TestClassLoaderOrder {
    public static void main(String[] args) {
        System.out.println("singletonOne count1 = " + SingletonOne.counter1);
        System.out.println("singletonOne count2 = " + SingletonOne.counter2);

        System.out.println("singletonTwo count1 =" + SingletonTwo.counter1);
        System.out.println("singletonTwo count2 =" + SingletonTwo.counter2);
    }
}

以上代码,SingletonOne和SingletonTwo 两个类的代码唯一的区别就是

public static int counter1;

public static int counter2;

private static SingletonTwo singletonTwo = new SingletonTwo();

两段代码的顺序,但是就是不同的顺序产生不同的结果

singletonOne count1 = 1

singletonOne count2 = 0

singletonTwo count1 =1

singletonTwo count2 =1

SingletonTwo 容易理解,下面来探讨一个为什么SingletonOne 里的count2为什么会是“0” 由文章开头所说,访问某个类或接口的静态变量,或者对该静态变量赋值就会对类进行加载,在System.out.println()里面均访问了类的静态变量,所以两个类都会进行加载。 SingletonOne 类在启动时,会经历,加载,连接,初始化的阶段,连接的时候,也分三步,验证,准备,解析,在以前博文有提过https://my.oschina.net/u/1273644/blog/768476 准备的时候,会给静态变量初始化默认值,这时首选counter1和counter2都是给默认值0 此时

counter1 = 0;

counter2 = 0;

紧接着进入类的初始化阶段,第一段代码执行调用了构造方法两个值均相加1

counter1 = 1;

counter2 = 1;

在下面,count1只是声明,不会对值改变,而count2会给此变量重新初始化值为0

counter1 = 1;

counter2 = 0;

最后得出我们想要的结果。

SingletonTwo相同的方式来验证,不做赘述。

转载于:https://my.oschina.net/u/1273644/blog/769779

高温环境下(100℃以上)相机的几种保障方案 高温环境下相机保障措施摘要:针对120℃以上高温环境,相机需采取多重防护:1.散热设计采用金属机身、散热鳍片或风扇;2.关键部件选用耐高温材料(铝合金、特种玻璃);3.电子元件需军规级芯片并做三防处理;4.建议外接电源或耐高温电池。工业相机(如FLIR A655sc、Basler ace)及特种机型(Ximea xiQ)具备高温适应性,普通相机可加装隔热套件配合冷却系统。选择时需关注传感器信噪比和全局快门性能,并设置温度监控保护机制。注意高温会加速设备老化,需定期检测维护。(149字) 阅读详情

相关推荐

ROS2+PYTHON VENV虚拟环境配置方法

ROS2+PYTHON VENV配置方法本篇针对的是python。

下雨夏云的博客 556

2.3java类的主动加载和被动加载

static {System . out . println("Parent的初始化过程");static {System . out . println("Child的初始化过程");} }执行后不会输出任何结果。

独孤东方朔的博客 802

TMS320F28377D的sys/bios双核工程配置详解——从零搭建到RAM优化

本文详细解析了TMS320F28377D双核系统在sys/bios环境下的工程配置与RAM优化策略。从开发环境搭建、SYS/BIOS工程创建到双核CMD文件配置,提供了实战技巧和常见问题解决方案,帮助开发者高效实现电力电子控制系统中的双核协作与性能优化。

weixin_28292761的博客 600

类的加载机制、主动引用、被动引用、什么是类加载器、类加载器的分类、自定义类的加载器

在类加载过程的加载阶段,通过类的完全限定名,获取描述类的二进制流的实现类,被称为“类的加载”。隔离加载类。在某些框架内进行中间件与应用的模块之间进行隔离,吧类加载到不同的环境。修改类加载方式。扩展加载源。比如:从数据库、网络、电视机顶盒进行类加载。防止源码泄露。比如:编译时字节码进行加密,需要通过自定义类加载器对字节码进行解密还原。

LIJINGPO的博客 1122

MicroCap声学仿真介绍(五)-倒相管扬声器系统仿真

实际倒相管的扬声器单体选择、后腔容积、倒相管的直径和长度都是需要精心挑选的,为了便于演示,随意指定了倒相管的长度和直径,现实中还是不能这么随便的。之前介绍了封闭式扬声器的仿真,今天在封闭式扬声器的基础上,再介绍一下倒相管扬声器系统的仿真。

山无忧的博客 1718

实战:利用 Agent Harness 自动化 PPT 制作

本文将带你从零开始,用轻量级Agent编排框架,结合主流大模型(GPT-4o、通义千问、文心一言等),搭建一套全自动化的PPT生成工作流:从用户输入自然语言需求,到需求解析、大纲生成、内容填充、数据匹配、排版美化、导出成品,全程不需要手动操作,最快10分钟就能产出符合要求的PPT。我们不会讲晦涩的Agent理论,所有步骤都有可直接运行的代码示例,哪怕你只有基础的Python语法基础,也能跟着一步步做出能用的自动PPT工具。

AI Agent Harness Engineering 569

JVM-类加载机制

符号引用其实就是字节码文件常量池里面名称标识,比如变量名,方法名等就是符号引用。直接引用就是变量或者方法的地址。在解析的时候其实就是将方法的名称,找到对应的存储地址,并且生成一条指令访问该地址。即数组不通过类加载器进行加载。java的类加载器主要是分成4类:1.启动类加载器:主要加载java核心库里面的类,比如rt.jat,是由c++实现的,如果要把代码交给启动类加载器加载,可以直接使用null便可;2.扩展类加载器:主要加载/lib/ext目录下面的文件;

zhifou123456的博客 899

SAP FICO应付票据平台开发说明书(包括测试样例、程序代码仅作参考,不保证一定可以运行)

SAP FICO应付票据平台开发说明书(包括测试样例、程序代码仅作参考,不保证一定可以运行)

我好像病了的博客 379

JVM (JAVA虚拟机)

JVM (JAVA虚拟机)

qq_41861608的博客 293

YOLOv8魔改系列:将CIoU替换成Wise-IoU,飞速涨点

将YOLOv8中CIoU替换成Wise-IoU,实现飞速涨点

qq_66386046的博客 2679

第38节:cesium 风场效果(含源码+视频)

cesium 风场效果

qq_29384639的博客 2329

小结:JAVA中类的主动加载7个情况

JAVA中,类的加载的确是个问题,其实分为主动加载和被动加载,类只有在下面7个情况下,是 主动加载的: 下面来看个例子: 在这个例子中,只输出:MyParent1 static block hello world 注意:这里MyChild1的静态代码块是没执行输出的,因为这个时候mychild1中没执行...

jackyrongvip的专栏 821

【论文精读】Graph WaveNet-深度时空图模型

Graph WaveNet构建了一个自适应邻接矩阵,它能保留隐藏的空间依赖关系,能够自动从数据中发现未见的图结构。提出了一个有效且高效的框架,可同时捕捉空间和时间依赖关系。其核心思想是将其提出的图卷积与扩张因果卷积相结合,使每个图卷积层都能处理空间依赖关系。在交通数据集上评估了提出的模型,并以较低的计算成本获得了最先进的结果。

打酱油的葫芦娃 1007

JVM类加载过程

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

zhaocuit的博客 10万+

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

JVM类加载器(详解)

JVM类加载器 1.类加载子系统的作用 类加载器子系统负责从文件系统或者网络中加载class文件,class文件在文件开头有特定的文件标识。 2.类加载过程 当程序主动使用某个类时,如果该类还未被加载到内存中,则JVM会通过加载、连接、初始化3个步骤来对该类进行初始化。如果没有意外,JVM将会连续完成3个步骤,所以有时也把这3步骤统称为类加载或类初始化。 类被加载到 JVM 开始,到卸载出内存,整个生命周期如图: 1.加载 通过类名(地址)获取此类的二进制字节流。 将这个字节流所代表的静态存储结构转换

qdzjo的博客 7919

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

JVM中类的加载流程

类的加载机制分为如下三个阶段:加载,连接,初始化。其中连接又分为三个小阶段:验证,准备,解析。

weixin_43476946的博客 1865

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

JVM_类的加载、链接、初始化、卸载、主动使用、被动使用

JVM_类的加载、链接、初始化、卸载、主动使用、被动使用

m0_74969835的博客 1730

JVM15_类的加载、链接、初始化、卸载、主动使用、被动使用

文章目录①. 说说类加载分几步?②. 什么是类的加载(Loading)③. 链接(Linking)④. 初始化(Initialization)②. 类加载器的介绍①. 启动类加载器②. 扩展类加载器(Extension ClassLoader)③. 应用程序类加载器(系统类加载器)④. 用户自定义类加载器(了解)⑤. 双亲委派机制 (掌握)⑥. 沙箱安全机制 (掌握)⑦. 如何判断两个Class对象是否相同⑧. 主动使用和被动使用 ①. 说说类加载分几步? ①. 按照Java虚拟机规范,从class文件

所得皆惊喜 3935

【JVM】类的加载过程详解

类的加载过程包括加载、链接、初始化、使用和卸载五个阶段。加载阶段将类的字节码文件读入内存并构建类模板对象;链接阶段包括验证、准备和解析三个子阶段,确保类的正确性和为静态变量分配内存;初始化阶段执行静态代码块和静态变量赋值;使用阶段通过实例化、调用方法等方式使用类;卸载阶段在类不再被引用且满足条件时,从内存中移除类的元数据和相关对象。整个过程由JVM规范严格定义,确保类的正确加载和使用。

白晨的博客 1359

jvm(二)——类的加载过程

本文对类的整体加载步骤进行说明,包含了什么是类的加载,类加载的步骤,类的生命周期, 类加载实现,双亲委派模式以及自定义类加载器,通过本篇文章可以较为细致的了解类加载的全过程,以及这样加载的原因。 1、什么是类的加载 类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对象,用来封装类在方法区内的数据结构...

节至 3039

JVM系列教程:1、类的加载

JVM深入理解-1、jvm初识jvm介绍hotspot虚拟机详解类加载器功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 jvm介绍 jvm是一个令人望而却步的领域,因为它很博大精深,涉及到的内容与知识点非常之多,虽然java开发者

weixin_43968821的博客 1763

jvm-类的主动使用

所有的java虚拟机实现,必须在每个类或接口被java程序“首次主动使用”时才初始化他们 (这句话翻译一下就是:在jvm中,类和接口被“首次主动使用”时,才进行初始化操作) 类分为主动加载,被动加载,是一个排斥的关系,非此即彼的关系 类的主动加载包括以下几种场景,该类命名为C,其他场景都是被动使用 1,创建类C对象 创建对象是最基本的主动使用,创建对象前,一定将类进行初始化 2,类C的静态变量的获取,赋值操作 对该类的内部静态属性进行操作,操作前要初始化 3,类C的静态方...

oJieSi的专栏 1369

JVM 类的加载过程

Java 虚拟机类的加载过程。

toy2048的博客 724

JVM-4——类的主动被动使用

类的使用 在JVM中表示两个class对象是否为同一个类存在两个必要条件: 类的完整类名必须一致,包括包名 加载这个类的ClassLoader(指ClassLoader实例对象)必须相同 换句话说,在JVM中,即使这两个类对象来源于同一个class文件,被同一个虚拟机所加载,但只要加载他们的ClassLoader实例对象不同,那么这两个类对象也是不相等的。 对类加载器的引用 JVM必须知道一个类型是由启动加载器加载的还是由用户类加载器加载的。如果一个类型是由用户类加载器加载的,那么JVM会将这个类加

phg739436146的博客 440

JVM 类初始化和类加载 详解

加载、验证、准备、初始化和卸载这五个阶段的顺序是确定的,类型的加载过程必须按照这种顺序:它在某些情况下可以在初始化阶段之后再开始(),这是为了支持Java语言的运行时绑定特性(也称为动态绑定或晚期绑定)。​ 这里是按部就班地“开始”,而不是按部就班地“进行” 或按部就班地“完成”,强调这点是因为这些阶段通常都是互相交叉地混合进行的,会在一个阶段执行的过程中调用、激活另一个阶段。

2402_82958989的博客 1296

JVM 类的加载篇

类的加载篇

qiuqiushuibx的博客 925
上一篇: JVM 类的加载(一)- 类的加载流程
下一篇: JVM 类的加载(三)- 编译期常量
chenmin4331
博客等级 码龄11年 0粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值