面试官:如何用一段代码证明JVM加载类是懒加载模式

腾讯一面:如何用一段代码证明JVM加载类是懒加载模式? 假如有一天,你要找工作,等到了面试邀请,来到了面试公司,做完了笔试题,迎来了面试官。 阅读详情

面试官提问,如何用一段代码证明JVM加载类是懒加载模式?

假如有一天,你要找工作,等到了面试邀请,来到了面试公司,做完了笔试题,迎来了面试官。

面试官的第一个问题确是:你如何用一段代码证明在JVM加载类是懒加载模式?

image.png

来来来,都坐下,先看看这段代码,思考一下结果。

publicclassSuperClass{

static{

System.out.println( “SuperClass init”);

}

publicstaticintvalue = 10;

}

classSubClassextendsSuperClass{

static{

System.out.println( “SubClass init”);

}

}

classTestClass{

publicstaticvoidmain(String[] args){

System.out.println(SubClass.value);

}

}

上述代码,只会输出:

SuperClass init

10

而不会输出 SubClass init ,对于静态字段,只有直接定义这个字段的类才会被初始化,因此通过其子类来引用父类中定义的静态字段,只会触发父类的初始化,而不会初始化子类。

所以就能证明JVM加载类是懒加载模式, 我们再来看看其他的情况。

publicclassNotInitialization{

publicstaticvoidmain(String[] args){

// SuperClass 引用上面代码的类

SuperClass[] superClasses = newSuperClass[ 10];

}

}

上面这段代码,创建了一个引用类型的数组,请问SuperClass会被初始化么?

“噢,这里都直接new了,肯定会被初始化呀~~”

image.png

答案是不会、不会、不会~~

再来看最后一段代码,想想ConstClass中的stataic静态代码块会被执行么?

publicclassConstClass{

static{

System.out.println( “ConstClass init”);

}

publicstaticfinalString HELLOWORLD = “hello world”;

}

classConstTest{

publicstaticvoidmain(String[] args){

System.out.println(ConstClass.HELLOWORLD);

}

}

运行结果也没有输出“ConstClass init”,这是因为虽然在Java代码中引用了ConstClass中的常量,但是在编译阶段,hello world 已经被存储到NotInitialization类的常量池中去了,所以这里HELLOWORLD常量的引用就指向NotIntialization类的常量池了。

· END ·

【面试】五分钟掌握类加载过程 在面试中经常会遇到这样一道面试题“你知道类加载过程吗?什么是双亲委派”;下面我们就针对这个问题展开,看看类加载过程 阅读详情

相关推荐

征服面试官:Java 虚拟机(JVM)掌握这篇面试题汇总,吊打面试官!

1、简述 JVM 垃圾回收机制 在 JVM 中,有一个垃圾回收线程,它是低优先级的,在正常情况下是不会执行的,只有在虚拟机空闲或者当前堆内存不足时,才会触发执行,扫描那些没有被任何引用的对象,并将它们添加到要回收的集合中,进行回收。 2、JVM 的内存结构 Java 堆(Heap) 是 Java 虚拟机所管理的内存中最大的一块。Java 堆是被所有线程共享的一块内存区域,在虚拟机启动时创建。此内存区域的唯一目的就是存放对象实例,几乎所有的对象实例都在这里分配内存。 方法区(Method Area) 方法

一名互联网时代苟且偷生的 Android码农 742

牛掰!“基础-中级-高级”Java程序员面试集结,看完献出我的膝盖!

Java基础(对象+线程+字符+接口+变量+异常+方法) 面向对象和面向过程的区别? Java 语言有哪些特点? 关于 JVM JDK 和 JRE 最详细通俗的解答 Oracle JDK 和 OpenJDK 的对比 Java 和 C++的区别? 什么是 Java 程序的主类?应用程序和小程序的主类有何不同? Java 应用程序与小程序之间有哪些差别? 字符型常量和字符串常量的区别 构造器 Constructor 是否可被 override? 重载和重写的区别? Java 面向对象编程三

mifffy_java的博客 3118

Gamit10.71添加新的天线类型

添加新的天线类型需要涉及到四个文件:antmod.dat,rcvant.dat,guess_rcvant.dat,hi.dat。 注意:格式要一致!!! 举例说明,我要添加一个JCA229的天线(带JCAD天线罩),对应接收机使用的是南方的South Net-S9。

Penny的博客 2714

Java开发者跳槽必备:必看的100道MySQL数据库经典面试题解析,深入分析

前言 说起来开始进行面试是11月倒数第二周,上午9点,我还在去公司的公交上,突然收到蚂蚁的面试电话,其实算不上真正的面试。面试官只是和我聊了下他们在做的事情(主要是做双十一这里大促的稳定性保障,偏中间件吧),说的很详细,然后和我沟通了下是否有兴趣,我表示有兴趣,后面就收到正式面试的通知,最后没选择去蚂蚁表示抱歉。 当时我自己也准备出去看看机会,顺便看看自己的实力。当时我其实挺纠结的,一方面现在部门也正需要我,还是可以有一番作为的,另一方面觉得近一年来进步缓慢,没有以前飞速进步的成就感了,而且业务和技术偏于稳

clhcowboy的博客 706

华为硬件逻辑岗笔试题(一)

积少成多,集腋成裘,坚持!!! 目录 1. 进制转换 2. 状态机和编码方式 3. 存储器的分类 4. Verilog语法中的操作符 5. 对组合逻辑的认识 6. 对时序逻辑的认识 7. 竞争冒险的认识 8. 基本时序逻辑电路 9. 建立时间和保持时间 10. 同步时序电路 11. 组合逻辑和时序逻辑判断 13. 基本总线的理解 14.加法器 15.FPGA开发工具 1. 进制转换 1、十进制46.25对应的二进制表达式为( )。 A 101110.11...

qq_42235129的博客 1万+

[苹果开发者账号]03 申请APPID、苹果开发者账号 常见问题整理

目录:问题持续更新问题一:提示:抱歉,您暂时不能注册问题二:Apple Developer Support提示:联系我们以继续流程 问题一:提示:抱歉,您暂时不能注册 申请苹果开发者账号,应该先注册AppleID,由于很多都是申请的公司使用的苹果开发者账号。一般操作申请动作的人,可能是新手操作,也可能图方便,有些信息会随便填写。 有些人会把姓名填写为,公司的产品、简称、缩写等等。这是不对的。 还有出生日期也会随便乱填。生日如果填写的不对,会被苹果限制使用一些功能的(苹果给的提示不是太明确)。 当生日填写的

专注于技术开发、项目管理 1万+

面试官提问,如何用一段代码证明JVM加载类是懒加载模式 ?

假如有一天,你要找工作,等到了面试邀请,来到了面试公司,做完了笔试题,迎来了面试官。 面试官的第一个问题确是:你如何用一段代码证明在JVM加载类是懒加载模式? 来来来,都坐下,先看看这段代码,思考一下结果。 /** * Created by IntelliJ IDEA. * * @author IT 贱男 * description: * date: 2020/8/25 15:23 */ public class SuperClass { static {

贱男 1128

STorM BGC V1.31硬件+SimpleBGC固件:从零搭建三轴云台开发环境(Keil+JLink避坑指南)

本文详细介绍了如何从零搭建STorM BGC V1.31硬件+SimpleBGC固件的三轴云台开发环境,涵盖硬件连接、Keil+JLink开发工具配置、固件编译与烧录等关键步骤,并提供了常见问题的解决方案和调试技巧,帮助开发者快速上手三轴云台开发。

weixin_28693683的博客 381

面试官:如何用一段代码证明 JVM 加载类是懒加载模式

本文通过一段简洁代码,深入解析JVM类加载的“懒加载”机制。以静态代码块为探针,验证声明引用、创建数组、访问编译期常量等操作不会触发类初始化,而new对象、调用静态方法、反射等“主动使用”才会触发加载与初始化。结合JVM规范,阐明“加载”与“初始化”分阶段、按需执行的本质,并通过-XX:+TraceClassLoading和自定义类加载器进一步证明加载也是懒的。最终总结出:类的初始化仅在五类主动使用场景下发生,真正实现“用到时才初始化”,为面试中应对类加载问题提供清晰、可验证的逻辑框架。

油墨香^-^的博客 347

【Unity动画系统】详解Root Motion动画在Unity中的应用(一)

什么时候勾选Bake into pose,当不希望动画带动游戏对象旋转时。在旋转的动画中一般是不用勾选的,因为就需要用它来带动我们的角色对象旋转。但在比如前进、后退、待机等动画来说,我们就可以勾选这里,以避免因动画文件本身的瑕疵而给我们带来的旋转。loop match:代表了这个动画在角度上的吻合度。如果这个动画在播放中转角过大,那么就会显示红色,告诉我们如果勾选bake into pose,则会带来不好的效果。

weixin_60154963的博客 6805

数据科学常见模型总结(二)-倾向性得分匹配模型

PSM的核心思想是从未受干预的用户群体中,找到和干预对象一模一样的用户,这样就可以把因果效应归因到干预上。

wudelong0112的专栏 4899

深入浅出!如何用一段代码证明JVM加载类是懒加载模式

前言 为什么互联网资讯这么发达,但是没有出现技术人才井喷? 为什么会出现应届生薪资倒挂多年老员工的现象? 这个世界有太多的现象都可以用**“二八定律”**来解释。 20%拿着高工资,80%每天挣扎在增删改查边缘。 职场一分钱一分货 人家拿高薪,不是全靠运气 工作年限越久,不代表越值钱 一年经验用了五年,无法改变 因为经历不等于经验 加班“重灾区”的互联网行业以996闻名,每天超过11小时的工作时长每年位居各行业之首。 工作内容重复,加班导致学习时间不够,无法跟上技术更新脚本。 如何花最少时间学习最多知识,迫

m0_57286622的博客 99

ADS实战指南:负载牵引(Loadpull)在射频功放设计中的关键应用

本文深入解析了负载牵引(Loadpull)技术在射频功率放大器设计中的核心作用与实战方法。通过生动的比喻和详细的ADS软件操作指南,阐述了如何通过系统扫描负载阻抗,在史密斯圆图上绘制等功率线与等效率线,从而精准找到最优阻抗点,以平衡输出功率与效率,是应对5G等现代通信系统严苛要求的必备技能。

weixin_29198045的博客 604

深入浅出!如何用一段代码证明JVM加载类是懒加载模式?看看这篇文章吧!

前言 我的一个朋友,开发四年了,没跳过槽,四年时间也不过是从最开始的10K涨到了15K,经常和我吐槽工资低。去年8月份左右开始了他“骑驴找马”的行动,从各种地方找学习资料、刷面试题。值得庆幸的是,他出去找工作时疫情还不严重,异常顺利的面进了蚂蚁,薪资更是翻了几倍。现在让我好生羡慕,于是找他要了他刷了至少七遍以上的面试题,特地分享给大家学习: 这里就不过过多赘述了,直接进入正文! 垃圾回收算法 垃圾回收算法的实现设计到大量的程序细节,并且每一个平台的虚拟机操作内存的方式都有不同,所以不需要去了解算法的具体实现

m0_57541165的博客 86

端到端自动驾驶:特斯拉FSD Beta技术拆解

端到端自动驾驶:特斯拉FSD Beta技术拆解 ,人工智能,计算机视觉,大模型,AI,这篇文章围绕特斯拉FSD Beta的端到端自动驾驶技术展开,先介绍端到端自动驾驶的定义、与传统方案的区别及FSD Beta的特点,再阐述其硬件基础、技术架构,解析关键技术,还涉及训练数据与标注、安全与冗余设计、实际应用场景与挑战以及技术迭代与更新等内容,展现了该技术的多方面情况。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 18万+

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

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

【JVM系列】面试官:知道JVM垃圾回收机制吗?

面试官:知道JVM垃圾回收机制吗? 我:知道,首先说一下垃圾回收算法,因为其中的一个分代收集,所以让堆又分为年轻代和老年代。

weixin_54707168的博客 384

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

JVM面试核心考点:内存模型、类加载与垃圾回收全解析

Java虚拟机(JVM)是Java跨平台能力的基石,理解其内存模型与运行机制,是开发者排查线上故障、优化系统性能的前提。本文以面试高频问题为线索,系统梳理了JVM运行时数据区的划分与对象创建回收流程,深入剖析了类加载机制与双亲委派模型的设计思想,并横向对比了CMS、G1等垃圾收集器的原理与适用场景。同时结合jps、jstat、jstack等工具,给出了OOM、死锁、CPU飙升等典型问题的排查思路,帮助读者构建从基础概念到工程实践的完整知识体系,从容应对面试官的层层追问。

weixin_30613727的博客 268

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

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

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

JVM整体架构图文详解:从类加载到GC的完整内存流转路径

Java开发者要真正掌握JVM,关键不在于背诵孤立参数,而在于建立整体架构视图。JVM由类加载子系统、运行时数据区、执行引擎与垃圾回收器四大模块协同工作:字节码先经过加载、验证、准备、解析、初始化进入内存,随后对象在堆与虚拟机栈之间流转,执行引擎通过解释器与JIT编译器将字节码翻译为机器码,GC则基于可达性分析回收无用对象。理解这条主线后,诸如内存溢出、Full GC频繁、栈溢出等问题都能快速定位到对应区域。本文沿真实代码执行路径,串联双亲委派、分代回收、逃逸分析等核心概念,帮助后端工程师与面试者把零散知识

weixin_34008933的博客 360

类与对象到底差在哪?从JVM内存到运行机制彻底拆解

在Java开发中,类与对象是最基础也最容易被忽视的概念。许多开发者能背出“类是模板,对象是实例”,却说不清类加载时.class文件如何变成Class对象,new关键字在堆内存中做了什么,以及静态成员、实例成员各自依附于何处。理解类与对象的本质,需要从编译期类型蓝图、运行期Class对象、对象在堆中的内存分配及GC回收机制入手。由此还能延伸出对象判空、Optional安全操作、动态代理动态生成类等高频工程场景。掌握这些底层原理,不仅能避开“表达式必须包含类类型”这类经典报错,也能真正理解引用传递与对象生命周期

weixin_34209851的博客 119

Java工程师能力评估指南:从HashMap到JVM,面试官视角的实战自查清单

Java工程师的招聘与成长离不开系统化能力评估。很多开发者能熟练使用框架,却在HashMap扩容、线程池参数、JVM内存模型等核心知识点上暴露出“背诵多、实践少”的问题。技术评估的本质是从基础概念出发,层层追问到原理与工程实践,通过场景题和项目深挖检验真实代码能力与线上排查经验。无论是面试官设计考核路径,还是求职者进行自查提升,都应该围绕集合源码、并发编程、JVM调优、环境配置等关键维度展开。本文结合真实面试案例,梳理了一套从初级到资深的分层能力模型与完整评估流程,帮助读者识别技术短板,建立可持续成长的学习

weixin_30219613的博客 305

JVM内存模型、垃圾回收与类加载机制全解析

Java虚拟机(JVM)是Java程序运行的基石,其核心在于内存管理与执行引擎。内存模型定义了程序运行时的数据存储区域,包括线程私有的程序计数器、虚拟机栈和线程共享的堆、方法区等。垃圾回收机制则基于可达性分析算法,自动回收不再使用的对象内存,其中分代收集理论将堆划分为新生代和老年代,并衍生出Serial、CMS、G1等多种收集器以适应不同场景。类加载子系统负责将字节码文件加载到内存,并通过双亲委派模型确保类的唯一性与安全性。理解JVM内存结构、垃圾回收原理及类加载过程,对于诊断Full GC、内存泄漏等线上

weixin_34310369的博客 419

面试官:讲一下Jvm中如何判断对象的生死?

但凡问到 JVM(Java 虚拟机)通常有 99% 的概率一定会问,在 JVM 中如何判断一个对象的生死状态?判断对象的生死状态的算法有以下几个:1、引用计数器算法引用计算器判断对象是否存活的算法是这样的:给每一个对象设置一个引用计数器,每当有一个地方引用这个对象的时候,计数器就加1,与之相反,每当引用失效的时候就减1。优点:实现简单、性能高。缺点:增减处理频繁消耗cpu计算、计数器占用很多位浪费...

十指波课堂的博客 192
上一篇: 想要玩转JVM?就跟着IT职业领路人来学习!三天带你玩转JVM性能调优实战!
下一篇: 关于JVM和JDK
MIC_java01
博客等级 码龄4年 2粉丝 34原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值