java 类加载和初始化的那点秘密

RK3588 InsightFace人脸识别移植及精度测试全解析 本文详细介绍了如何在RK3588平台上移植InsightFace人脸识别模型并进行精度验证。通过PyTorch转ONNX、ONNX转RKNN量化模型的关键步骤,实现了INT8量化模型的部署。测试数据显示,该模型在LFW数据集上达到99.43%的准确率(接近官方99.52%),推理时间仅14.23ms。ROC曲线和相似度分布图表明模型区分能力优秀,AUC超过0.99,满足实际应用需求。文中还详解了量化原理、环境搭建和测试方法,为边缘设备部署人脸识别提供了完整解决方案。 阅读详情
先看看下面的这段代码,这个例子将说明类加载的顺序。也可以直接略过代码,直接看下面的图:
class GrandFather{
GrandFather(){
System.out.println("the GrandFather constructor is initialized");
}
static{
System.out.println("the GrandFather static filed is initialized");
}
}

class Father extends GrandFather{
Father(){
System.out.println("the Father constructor is initialized!");
}
static{
System.out.println("the Father static filed is initialized");
}
}

public class Son extends Father {
public Son(){
System.out.println("the Son constructor is initialized");
}
static{
System.out.println("the Son static filed is  initialized");
}
public static void main(String[] args) {
Son son = new Son();
}
}


为了更直观的说明,将上面的代码转化成下面的图:

将上面的代码运行,得出的结果是:
the GrandFather static filed is initialized
the Father static filed is initialized
the Son static filed id initialized
the GrandFather constructor is initialized
the Father constructor is initialized!
the Son constructor is initialized

怎么样,看了上面的运行结果,心里是不是有点小感觉了已经?下面用文字总结下:
1,在Son上运行java时,第一件事情就是试图访问Son的main方法(一个static方法)。于是加载器开始启动并找出Son类的编译代码(在名为Son.class的文件中)。
2,在对Son类进行加载的过程中,编译器注意到它有个基类(这是又关键字extends知道的),这里为Father,于是继续加载Father类。如果该基类还有其自身的基类,这里有个GrandFather类,于是GrandFather也被加载。如此类推。
3,接下来,根基类中static(包括static方法,变量,域)初始化,然后是下一个导出类,以此类推。这里static初始化的顺序是GrandFather>Father>Son。至于为什么要从根基类开始初始化,不难想到是因为 导出类的static初始化可能依赖于基类成员能否被正确初始化。
4,经过上面几步,必要的类都加载完毕,对象就可以被创建了。
    a,首先,对象中所有的基本类型都会被设为默认值,对象引用被设为NULL(对于这一点,再看看下面给出的例子)
    b,然后,基类的构造器会被调用
    c,最后,构造器的其余部分被调用
public class Test
{
 /**
     * @param args
     */
    private int i=getValue();//第2行
    private int j = 10;
    int getValue(){
        return j;
    }
    public static void main(String[] args) {
        System.out.print(new Test().i);//第9行

    }
}

很显然,这个例子在执行到上面的第4步时,只执行了a,b两步,而第三步 private int j = 10,在i被调用时还没被执行


Linux故障排查和性能优化面试题及参考答案 在 Linux 系统中,负载(Load Average)是衡量系统繁忙程度的一个重要指标,它表示系统在特定时间间隔内运行队列中的平均进程数。负载值反映了系统当前的工作压力,主要包括 CPU 等待运行的进程数量和处于不可中断睡眠状态(通常是等待 I/O 操作完成)的进程数量。负载平均值通常有三个数值,分别代表过去 1 分钟、5 分钟和 15 分钟内的系统平均负载。例如,在使用uptime命令或查看文件时,会看到类似这样的输出,这三个数值依次表示过去 1 分钟、5 分钟和 15 分钟的负载平均值。 阅读详情

相关推荐

YOLOv8 TensorRT C++部署实战详解:从XMake构建到推理流水线

本项目实现了一个基于YOLOv8和TensorRT的高性能火灾烟雾检测系统,具有以下核心特点: 技术架构:采用TensorRT 8.6+进行GPU加速推理,结合CUDA 12.1和OpenCV 4.8+,实现高效计算机视觉处理。系统使用XMake替代CMake构建,配置更简洁高效。

hscing的博客 1065

类的加载和初始化的区别

说到类的加载和类的初始化,想必大家都会很迷茫,总是搞不清楚他俩的区别,下面就来说一说他俩的区别: 类的加载包括类的初始化,类的加载后使用前的最后一个阶段。   类的加载:代表jvm将java文件编译成class文件后,以二进制流的方式存放到运行时数据的方法区中,并在java的堆中创建一个java.lang.Class对象,用来指向存放在方法堆中的数据结构。 这里给大家推荐一篇java类加载...

qq_39429962的博客 1万+

图解链表 —— JAVA中的单链表基本操作

文章目录1. 什么是链表2. 链表的种类3. 创建单链表3.1 创建 Node 类(车厢类)3.2 创建 MySingleList (火车类)4. 单链表的基本操作4.1 增加链表元素4.1.1 在链表头部添加元素4.1.2 在链表任意位置添加元素4.1.3 在链表尾部添加元素4.2 删除链表元素4.2.1 删除第一个节点元素4.2.2 删除任意位置 index 元素4.2.3 删除链表中指定元素的第一个节点4.2.4 删除链表的所有指定元素4.3 查找链表元素4.3.1 判断链表中是否包含元素 data4

AlinaQ05的博客 2501

java类加载和初始化的区别_加载、验证、准备、解析、初始化--Java类加载过程总结分析...

关于Java类加载,主要弄清楚三个问题 :为什么需要类加载什么时候进行类加载怎么进行类加载一、为什么需要类加载我们编写好的程序经过编译之后,会形成Class文件,Class文件描述了类的各种信息,而Java虚拟机想要运行程序,就必须把Class文件加载进入虚拟机内部,才能供其所用。在JVM中,类的各种信息一般都存储在方法区中,所以需要将类信息加载进入方法区,才能在需要类信息时,比如实例化对象时找到...

weixin_30894765的博客 743

ubuntu安装glibc

VSCode 在ubuntu下调试无法打开libc-start.c raise.c等1. 安装glibc2. launch.json中添加路径映射3. 调试 1. 安装glibc apt install glibc-source cd /usr/src/glibc/ sudo tar -xvf glibc-[VERSION].tar.xz 2. launch.json中添加路径映射 "sourceFileMap": { "/build/glibc-S7xCS9": "/usr/src/glib

wq_0708的博客 3万+

fpga进阶--时序约束

1、基础概念 1.1 建立(setup)/保持(hold)时间 上述的锁存沿会将数据保存下来,但是必须要满足一定的条件: 建立时间Tsu:在时钟有效沿之前,数据必须保持稳定的最小时间; 保持时间Th:在时钟有效沿之后,数据必须保持稳定的最小时间; 1.2 亚稳态(Metastability) 亚稳态是由于违背了触发器的建立和保持时间而产生的,设计中任何一个触发器都有特定的建立和保持时间,在时钟上升沿前后的这段时间窗口内,数据输入信号必须保持稳定。如果信号在这段时间内发生了变化,那么输...

HHH的博客 2443

java类加载和初始化的区别_java类加载与初始化

第一段:class A{public A(){this.list();}public void list(){System.out.println("in a list..");}}class B extends A{private final static B instance = new B(); //这里会调用list,是在还没构造结束的时候就调用了,但这里不会错public static...

weixin_30341571的博客 496

如何使用MCP2518FD外部CAN FD控制器实现速速CAN通信

1、SPI时序MCP2518FD外部CAN FD控制器具有小尺寸和SPI接口,可实现轻松连接。可将CAN FD通道轻松添加到缺少CAN FD外设或没有所需CAN FD通道的微控制器上。MCP2518FD支持经典格式 (CAN 2.0B) 和CAN灵活数据速率 (CAN FD) 格式中的CAN帧格式,符合ISO11898-1:2015标准。框图:本文实验板MCU:CAN FD控制器:MCP2518FDCAN FD收发器:ATA6560开发环境:想了解开发板更详细信息,请点击。

qq_57798018的博客 1万+

继承习题

第三题 package xin_learn; import org.omg.Messaging.SyncScopeHelper; class grandfather { public grandfather() { System.out.println("爷爷"); } } class father...

Vicky9897的博客 367

【Dify】36氪新闻热榜智能自动化采集与AI处理

本文介绍如何利用Dify等自动化工具实现36氪新闻热榜的智能采集与处理。通过HTTP请求节点获取数据,JSON解析节点结构化处理,AI处理节点生成智能摘要,最终格式化输出结果。工作流程包含数据获取、解析、AI摘要、文本整理和内容输出五个环节,支持批量化、定制化的新闻处理需求。该方案适用于行业监测、内容创作、舆情管理等场景,显著提升信息获取效率,实现"所需即得"的自动化新闻服务。系统采用OpenAI GPT和Dify API作为核心模型,无需复杂人工干预即可完成全流程处理。

Mr数据杨 597

利用AWVS进行反制

awvs 10.5下载 http://www.32r.com/soft/12986.html

渗透之路,攻防之间皆学问 6652

java类加载和初始化的区别_Java 类加载 初始化过程

类的加载过程1首先执行类中的静态代码块2初始化静态变量3最后new一个对象注意:如果一个类中有静态代码块和非静态代码块在加载时首先执行静态代码块有多个时则按照放置顺序执行new对象实例时则会首先执行非静态代码块有多个时则按照顺序执行加载类和实例的区别加载类:只是为类的静态成员分配内存并初始化对象为nullint0char0booleanfalsenew对象则为非静态成员分配内存packageCla...

weixin_39728320的博客 436

【车载以太网测试从入门到精通】系列文章目录汇总

物理层测试、数据链路层测试、以太网交换机测试、网络层测试、传输层测试、以太网TCP/IP协议自动化测试、以太网网络管理测试、以太网网络管理自动化测试、鲁棒性测试、SOME/IP测试、SOMEI/IP服务接口自动化测试、DoIP诊断测试、DoIP诊断自动化测试、DoIP BootLoader刷写、以太网网关路由测试、以太网网关路由自动化测试、AVB测试。

测试领域技术分享 3154

Java 类加载与初始化

//来自于: Daniel·广 类加载器 在了解Java的机制之前,需要先了解类在JVM(Java虚拟机)中是如何加载的,这对后面理解java其它机制将有重要作用。 每个类编译后产生一个Class对象,存储在.class文件中,JVM使用类加载器(Class Loader)来加载类的字节码文件(.class),类加载器实质上是一条类加载器链,一般的,我们只会用到一个原生的类加载器,它...

007liuchao007 125

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

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

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

11《Java 类加载机制:从动态加载到热修复的底层秘密》

Java 类加载机制在运行期完成类的加载、连接与初始化,牺牲部分性能换灵活性,支持热修复、插件化等。其生命周期含 7 阶段,初始化有 5 种强制触发场景,动态性是热修复等技术的底层基础。

qq_62682600的博客 1416

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

JVM 的类加载机制,里面藏有多少秘密

来源 |多选参数作者 |程序锅头图 | 下载于东方IC类加载机制类是在运行期间第一次使用时动态加载的,而不是一次性加载所有类。因为如果一次性加载,那么会占用很多的内存。类的生命周期包括以...

优快云业界要闻 409

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Java 类加载顺序:从混沌到有序的奇幻旅程

看完这篇博客,你是不是觉得 Java 类加载顺序没那么高深莫测了?从静态到实例化,从父类到子类,JVM 就像个一丝不苟的导演,把每个环节安排得明明白白。带着这张“加载顺序地图”,下次写代码时就不会迷路啦!有什么疑问?留言告诉我,咱们一起聊聊~

小知识吖 1374

Java内存管理-掌握虚拟机类加载机制(四)

勿在流沙筑高台,出来混迟早要还的。 做一个积极的人 编码、改bug、提升自己 我有一个乐园,面向编程,春暖花开! 上一篇介绍了整个JVM运行时的区域,以及简单对比了JDK7和JDK8中JVM运行时区域的一些变化,也顺便总结了哪些区域会发生异常(内存溢出)问题。前一篇的话还是非常重要,请大家务必要多多阅读学习和掌握,因为这些基础的知识点会关联后续的一系列问题内容,如果前面没有先有一定的基础知识储...

阿飞云漫步 1082

浅谈 JVM 类加载机制

开篇 本文是对过往笔记的一些整理,如有不对,欢迎指导。 Java 代码如何跑起来的 我们平时写的代码都是以 .java 为后缀结尾的文件。而我们部署应用时,要么是打成 jar 包, 通过 java -jar的命令运行;要么打成 war 包, 直接丢到 tomcat 等 web 容器中,然后启动 web 容器。这样我们的 Java 应用就算是跑起来了。 那么从打包-> 运行这中间到底发生了什...

nimo10050的博客 260

Java开发不可不知的秘密:类加载器实现机制

插件系统:在开发插件系统时,需要能够动态加载和卸载插件。这通常要求每个插件在自己的命名空间中运行,以避免与其他插件或主应用程序的类冲突。热部署:在不重启应用的情况下更新代码。隔离环境:隔离不同组件或模块以避免类冲突。从非标准源加载类:如数据库、网络、加密文件等。安全考虑:加载加密的类文件并进行解密。在自定义类加载器中覆盖loadClass方法,以实现自己的类加载逻辑:java体验AI代码助手代码解读复制代码。

Maisu的博客 96

详述Java中JVM那些不为认知的秘密

JVM的原理最主要的就是上述内容,当然虽然是最主要的但是也只是冰山一角。如果真的想要了解可以去看看OpenJDK的源码,或者可以看看《深入理解Java虚拟机》这本书。制作不易,望各位大佬赏个脸,给个三连吧!!!!

HarryQUQ的博客 1385

HoRain云--Java静态块:类加载时的秘密武器

摘要:Java静态块(Static Block)使用static{...}语法,在类加载时自动执行一次,用于静态成员的初始化。其核心特性包括:类首次使用时触发执行、多个静态块按序执行、仅能访问静态成员。典型应用场景包括复杂静态变量初始化(如配置文件加载)、全局资源预加载(如JDBC驱动注册)和饿汉式单例实现。注意事项建议保持静态块逻辑简洁、避免异常,并与实例初始化块区分。示例展示了静态块对静态变量的修改能力。静态块是Java类初始化的重要机制,合理使用可提升代码效率和可维护性。(149字)

sinat_57153473的博客 664

重新开始学习编程系列Day05——JVM概述和类加载子系统

文章目录一、前言二、虚拟机的概念三、JVM整体概述1、JVM整体架构2、java代码的执行流程3、JVM生命周期4、JVM发展历程四、类加载子系统1、概述2、类的加载过程3、类加载器4、双亲委派机制5、沙箱安全机制 一、前言 我记得当年学java的时候,就很好奇,为什么我在IDEA上写一些代码(其实就是一堆我们人能知道的英文单词的组合加一些运算符),为什么就可以在windows上运行后执行我们的指令,而且还可以打成jar包去linux系统跑起来,为什么一份代码可以在不同平台运行呢?类是如何加载的?对象如何创

一个成长中的程序员,期待用技术的眼光生活 411

类加载器一篇足以

文章目录前言一、类加载器相关概念1.Classloader的作用2.类加载的分类3.类加载器的必要性4.命名空间①.何为类的唯一性②.命名空间③.有关命名空间的例子例子1:不同类加载器加载的同一个class文件会产生两个Class对象例子2:打破双亲委派的情况下,MyClassloader可以加载系统类加载器已经加载过的类例子3:即便打破双亲委派机制,同一个类加载器也不能加载同一个类两次5.类加载机制的基本特征二、类加载器分类(java8)1.引导类加载器2.扩展类加载器3.系统类加载器4.数组的类加载..

yangxiaofei_java的博客 1247

Java性能优化的秘密武器:AppCDS如何解决类加载瓶颈?

快速提升Java启动性能,解决类加载瓶颈。通过Java 10 应用类数据共享(AppCDS),在多JVM场景下共享预加载类数据,显著减少启动时间和内存占用。适用于微服务、容器化部署等高频启动环境,优化效果明显,值得收藏。

BytePulse的博客 621

Java虚拟机 -- 类加载模块

Java平台无关性是如何实现的? 一次加载,到处执行,其实并不是Java语言实现了跨平台的特性,而是在任何的平台上都有JVM虚拟机,Java通过javac在编译时将.java文件生成字节码并存入到.class文件中,有了class文件才有了跨平台的基础,这样JVM才能解析,将字节码生成特定平台上的机器码 Java源码首先被编译成字节码,再有不同平台的JVM进行解析,Java语言在不同的平台上运...

【Dyson】的博客 280
上一篇: 菜鸟进阶必杀技(Ⅱ)——java基础知识自测篇
下一篇: java实现的几个常用排序算法
v-AUGUST-v
博客等级 码龄17年 117粉丝 27原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值