关于jvm加载类的实现顺序

JVM中类加载的过程详解 类从被加载到虚拟机内存中开始,到卸载出内存,它的整个生命周期包括:加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Initiallization)、使用(Using)和卸载(Unloading)这7个阶段。其中验证、准备、解析3个部分统称为连接(Linking) 阅读详情

public class CachingEnumResolver {

    private static Map CODE_MAP_CACHE;
    private static CachingEnumResolver SINGLE_ENUM_RESOLVER = new CachingEnumResolver();

    static {
        CODE_MAP_CACHE = new HashMap();
        CODE_MAP_CACHE.put( "0", "北京市" );
    }

    public static CachingEnumResolver getInstance() {
        return SINGLE_ENUM_RESOLVER;
    }

    public void initEnums() {

        if( null == CODE_MAP_CACHE ) {
            System.out.println( "CODE_MAP_CACHE为空,问题在这里开始暴露." );
            CODE_MAP_CACHE = new HashMap();
        }
        CODE_MAP_CACHE.put( "1", "北京市" );
        CODE_MAP_CACHE.put( "2", "云南省" );

    }

    public CachingEnumResolver() {
        initEnums();
    }

    public Map getCache() {
        return Collections.unmodifiableMap( CODE_MAP_CACHE );
    }

    public static void main(String[] ars){
        CachingEnumResolver resolver = CachingEnumResolver.getInstance();
        Map map = resolver.getCache();
        for( Object key : map.keySet() ) {
            System.out.print( key+"------------->" );
            System.out.print( map.get( key ));
        }
    }
}

 

结果:

CODE_MAP_CACHE为空,问题在这里开始暴露.
0------------->北京市

看了一篇文章《神秘的类和对象初始化过程》,又熟悉了一遍关于jvm加载类的实现过程。总结了一下关于类的加载顺序:

开始

1.静态字段
2.静态块

//如果你的调用为new,则继续执行下面的。如果没有new,而是通过静态方法第一次访问该类,则到此处就返回了。
3.字段(非静态块)
4.构造函数


返回

 

父类1-->父类2-->子类1-->子类2-->父类3-->父类4-->子类3-->子类4

(以上说明先类的后对象的.在此基础上先父类,后子类)-->先类先父
根据上面的例子说明一下:上面刚刚初始化静态字段的时候就有new的调用,所以先调用构造函数来执行。完成后执行静态块把原来赋好的值给覆盖掉了,结果才出现那种情况。

 

深入理解JVM(八)——类加载的时机 类的生命周期一个类从加载进内存到卸载出内存为止,一共经历7个阶段: 加载——>验证——>准备——>解析——>初始化——>使用——>卸载其中,类加载包括5个阶段: 加载——>验证——>准备——>解析——>初始化在类加载的过程中,以下3个过程称为连接: 验证——>准备——>解析因此,JVM的类加载过程也可以概括为3个过程: 加载——>连接——>初始化C/C++在运行前需要完成预处理、编译、汇编、 阅读详情

相关推荐

【Cadence软件技巧集萃】从Capture到Allergo——分布演示从原理符号导出到网络表

Cadence软件功能多样、性能强大,但是使用起来颇费步骤,尤其是从原理图到网络表的导入步骤,没有经过上手实践还真不一定一次就能搞定哩。本文笔者用将分步演示:1、在Capture软件上绘制原理图;2、将原理图导出网络表;3、在Allergo软件上更新网络表;希望给予使用Cadence的读者有效的帮助1、本文简述了建立Capture项目的步骤,演示了调用元件符号库的方法,并绘制了电气原理图;2、针对加载元件封装库可能遇到的问题,做了排查步骤建议;

qq_33175704的博客 2534

JVM类加载过程

理解JVM的类加载过程,主要要回答两个问题: 1、类在什么时候被加载。 2、类是怎样被加载的。 一、触发类加载的条件: 类的加载过程主要分为七个阶段:加载、验证、准备、解析、初始化、使用、卸载,加载、验证、准备、初始化、卸载这五个过程顺序是确定的,jvm必须严格按照这个顺序执行,jvm没有规定类加载的时机,但却严格规定了五种情况下必须立即对类进行初始化,加载自然要在此之前。 1、遇到new、getstatic、putstatic、invokestatic这四条指令时,如果类没有被初始化,则首先对类进行初始

shuux666的博客 1289

实战避坑:示波器测量非隔离开关电源的炸机风险与隔离方案

本文详细分析了使用示波器测量非隔离开关电源时的炸机风险,揭示了地线环路导致的短路问题,并对比了四种防炸机解决方案,包括示波器隔离供电、拔掉电源地线、使用差分探头和被测板隔离供电。重点推荐使用隔离变压器方案,确保测量安全与精度,同时提供了实操建议与经验分享,帮助工程师避免常见测量事故。

weixin_29224309的博客 556

深入理解Java虚拟机jvm-类加载步骤

jvm-类加载步骤

小蜗牛的博客 1749

【从零开始玩量化7】easyTrader: 自动化(程序化)交易利器

前面的文章,我们介绍了数据获取工具AKShare, 量化回测工具backtrader等,这一篇,介绍程序化交易工具easyTrader。作者网名食灯鬼,目前项目在Github上的star数已经有6.7k。这可能是目前,开源能找到的,最好用的程序化交易库了。本文介绍了easyTrader的简单用法,这个包还有很多功能,后续再继续写文章探究。

量化投资助手的博客 1万+

避开PSRR仿真三大坑:用Cadence psspxf分析分频器时,这些设置错了白忙活

本文深入探讨了使用Cadence psspxf工具进行分频器PSRR仿真时常见的三大技术陷阱,包括扰动信号参数设置、收敛性优化和后处理信号提取。通过详细的参数推荐和实战技巧,帮助工程师避免仿真误差,提升PSRR分析效率与准确性,特别适用于16分频器等数字-模拟混合电路设计。

weixin_29258297的博客 300

【JVM】类加载的全过程

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

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

Xilinx系列学习(一) BRAM的使用,并用PL读取BRAM数据

Xilinx系列学习(一) BRAM的使用,并用PL读取BRAM数据一,Xilinx BRAM介绍二,BRAM对应的IP核调用和使用1,BRAM对应的IP核介绍2,BMG例化IP核的调用 一,Xilinx BRAM介绍 BRAM 就是Block Memory,是Zynq的PL端的存储RAM单元。可以利用BRAM,在PS和PL之间进行数据的交换。Zynq中还有一类存储器,称为分布式随机访问存储器(D...

weixin_43941525的博客 3万+

用code带你了解jvm的类加载过程

这几天学习jvm一些知识,刚好在牛客网上刷题时遇到一道关于jvm底层编译顺序的题目,看到问题也都是就java代码而言讲的,也没有剖析原理。我趁着所学jvm还热着,赶紧分享一下我的拙见,不然过不了多久估计我也不会了。

爱学习的狗蛋儿 3227

【异常】XXL-job触发调度:address:http://192.168.x.x:x/ code:500 msg:xxl-rpc remoting error(connect timed out)

XXL-JOB调度任务失败分析:调度中心(10.254.234.80)与执行器(192.168.x.x)连接超时,返回500错误。主要原因是网络不通或执行器异常:1.网络不通可能由防火墙或网段隔离导致;2.执行器未启动或端口未监听;3.地址配置错误。解决方案:1.关闭代理使用内网;2.测试网络连通性和端口可用性;3.检查执行器进程状态和端口监听情况;4.核对执行器地址配置;5.必要时配置防火墙规则放行端口。

奶爸的编程之路,也就一周冷个三天 413

NSX-T 4.1部署搭建

NSX-T4.1 部署搭建

weixin_58250887的博客 564

Java类加载器加载类顺序

java ClassLoader的学习 java是一门解释执行的语言,由开发人员编写好的java源文件先编译成字节码文件.class形式,然后由java虚拟机(JVM)解释执行,.class字节码文件本身是平台无关的,但是jvm却不是,为了实现所谓的一次编译,到处执行,sun提供了各个平台的JVM实现--也就是说jvm不是跨平台的,编译好的字节码文件被放在不同的操作系统平台上的jvm所解释...

weixin_30664051的博客 94

SKUA-GOCAD入门教程-第八节 线的创建与编辑7和8

本文介绍了曲线编辑操作的主要功能,包括曲线部分和区域的管理操作。在曲线部分操作方面,详细说明了如何合并、删除、移动和过滤曲线部分,支持精确或带公差的合并方式。在曲线区域操作方面,阐述了保留/删除区域点、移动区域点、保留/删除区域线段等操作。此外还介绍了节点连接功能,包括新增/删除连接、端点连接以及为曲线赋予地质特征的方法。

江洋大葱的博客 390

Java类的加载机制

一.类的生命周期 JVM类加载机制分为五个部分:加载,验证,准备,解析,初始化。 加载: 作用:查找并加载类的二进制数据 步骤: 1)以类的全限定名来获取此类的二进制字节流 2)将字节流所代表的静态数据存储结构转化为方法区的运行时数据结构 3)在堆中生代表此类的java.lang.class对象,作为方法区中类数据的访问入口 验证: 作用:确保加载的类信息复合jvm规范,没有安...

weixin_41047933的博客 591

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

JVM-类加载机制

类加载的过程包括了验证五个阶段。这五个阶段中,加载,验证,准备,初始化这四个阶段发生的顺序是确定的,而解析阶段则不一定,它在某些情况下可以在初始化阶段之后开始需要注意的是这里的几个阶段是按顺序开始,而不是按顺序进行或完成,因为这些阶段通常都是互相交叉的混合进行的,通常在一个阶段执行的过程中调用或者激活另一个阶段类加载的过程:假如我的方法区中之前已经加载过了这个类,代表第二次new一个对象的时候就不需要再重新加载验证准备解析初始化了,而是直接调用。

2301_79567474的博客 933

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

一个类是怎么被JVM执行的

现有如下代码,那么我们的JVM是怎么执行的呢 public class Test{ public static vodi main(String[] args){ MaYun my=new MaYun(); my.work(); } } public class MaYun{ ...

weixin_30485291的博客 202

Tomcat 启动时类加载顺序

Tomcat启动时classloader加载顺序 Tomcat的class加载的优先顺序一览 1.最先是$JAVA_HOME/jre/lib/ext/下的jar文件。 2.环境变量CLASSPATH中的jar和class文件。 3.$CATALINA_HOME/common/classes下的class文件。 4.$CATALINA_HOME/...

greentiro 485

动手实现自己的 JVM——Go!(ch02)

Go 语言的接口实现是隐式的,这意味着我们不需要显式地声明一个类型实现了某个接口,只要该类型实现了接口中的所有方法,Go 会自动认为它实现了该接口。

dhrmt的博客 1345

Tomcat /jvm类加载机制

Tomcat 的 WebApp ClassLoader 主动打破双亲委派,让classes/优先于lib/,同名类只认第一个找到的,后面的直接丢弃。

weixin_52236586的博客 288

一段有助于理解jvm类加载过程的代码

转自http://yhjhappy234.blog.163.com/blog/static/31632832201152555245584/ 个人觉得这位博主jvm的文章写的很好,推荐学习jvm的朋友可以看看   package com.yhj.jvm.classloader; /** * @Description:单例初始化探究 * @Author YHJ create at 20...

活成自己想要的模样 215

JVM中类的加载流程

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

weixin_43476946的博客 1865

JVM类的加载和类的加载器

在Java的日常应用程序开发中,类的加载几乎是由上述3种类加载器相互配合执行的,在必要时,我们还可以自定义类加载器,来定制类的加载方为什么要自定义类加载器?隔离加载类修改类加载的方式扩展加载源防止源码泄漏1.开发人员可以通过继承抽象类java.lang.classLoader类的方式,实现自己的类加载器,以满足一些特殊的需求。

欢迎每一位朋友不吝赐教,无论是宝贵的建议还是中肯的批评,都将是我前进路上不可或缺的灯塔 1292

JVM类的加载过程

所有的类都会优先加载基类静态成员的初始化优先成员初始化完后,才会执行构造方法静态成员的初始化与静态块的执行,发生在类加载的时候,静态成员的优先级大于静态块类对象的创建以及静态块的访问,都会触发类的加载执行顺序静态成员变量 -> 静态代码块 -> 成员变量 -> 构造方法。

z2698751935的博客 1274

maven打包顺序与jvm类加载顺序

maven打包顺序,jvm类加载顺序,jsr303

qq_27886773的博客 1799

【JVM】类的加载过程详解

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

白晨的博客 1359
上一篇: j2ee笔试题目 servlet笔试题目 jsp 笔试题目 java笔试题目
下一篇: Be Careful With Transient Data
daniel112
博客等级 码龄21年 24粉丝 6原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值