首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【Java 虚拟机原理】Java 类中的类加载初始化细节 ( 只使用类中的常量时加载类不会执行到 ‘初始化‘ 阶段 )

文章目录 一、类加载初始化时机 二、常量加载示例 三、数组加载示例 一、类加载初始化时机 ---- 类加载时机 : Java 程序执行时 , 并不是一开始将所有的字节码文件都加载到内存中 , 而是用到时才进行加载...; 如 : 如果是 public final static 修饰的常量值 , 在编译阶段 , 就会将该值放到常量池中 ; 在类加载的过程中 , 只要执行到 加载 -> 连接 ( 验证 , 准备 , 解析...) 阶段 , 就可以完成常量池的初始化 , 即使没有执行 初始化 这个步骤 , 也不影响使用类中的常量值 ; 在 连接 的 准备 阶段 , 为 普通 的 静态变量 进行 默认赋值 , 但是针对 静态常量..., 直接进行 指定赋值 ; 但是 普通的 静态变量 的 指定赋值 , 是在 初始化 阶段 完成的 ; 类 在 " 初始化 " 阶段 , 调用 静态代码块 ; 二、常量加载示例 ---- 类加载时 ,...创建数组时 , 触发的是 Student[] 数组类型的 类加载初始化 , 但是不会触发 Student 类的初始化操作 ; 如果调用数组中的元素时 , 就需要初始化 Student 类 ; Student

3.6K20

小程序在父组件执行子组件方法,可适用于下拉刷新上拉加载之后执行子组件方法

当父组件引用了子组件的时候,会遇到父组件执行子组件的方法,比如下拉刷新上拉加载等事件只有在页面中才能检测到,但是获取数据的方法在子组件,这时就可以执行子组件方法。...思路很简单,类似于vue中给子组件加ref执行子组件方法道理一样,这里是给子组件加一个 属性:  id="子组件名称",比如: 然后在父组件对应的方法中直接...this.selectComponent("#list").getList(); 如果涉及到多次调用该子组件的方法,可以在onReady生命周期中定义一下,比如: onReady:function(...){ this.list = this.selectComponent("#list"); }, 之后在方法中再调用的时候直接用this.list.方法名就可以了。

1.1K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【STM32H7教程】第28章 STM32H7时间关键代码在ITCM执行的超简单方法

    mod=viewthread&tid=86980 第28章 STM32H7时间关键代码在ITCM执行的超简单方法 本章教程为大家分享一种时间关键代码在ITCM执行的简单方法,同时中断向量表和变量放...很多时候我们希望将需要实时性的程序和变量分别放在ITCM和DTCM里面执行,本章就是解决这个问题。 实现方法比较简单,基于MDK的Option选项设置下即可,无需操作分散加载。...使用分散加载的好处是灵活,在设置复杂工程的内存映射方面比较方便。...28.3 实验例程说明(MDK) 配套例子: V7-007_时间关键代码在ITCM执行的超简单方法 实验目的: 学习时间关键代码在ITCM执行的超简单方法,同时中断向量表和变量放DTCM。...上电后串口打印的信息: 波特率 115200,数据位 8,奇偶校验位无,停止位 1 程序设计: 系统栈大小分配: RAM空间用的DTCM: 硬件外设初始化 硬件外设的初始化是在 bsp.c 文件实现

    1.6K40

    JVM类加载过程科普

    校验的过程叫做 验证 验证 目的在于确保 Class 文件的字节流中包含信息符合当前虚拟机的要求,保证被加载类的正确性,不危害虚拟机自身的安全。...初始化 在连接阶段完成之后,就开始正式执行 main 方法了,由于 main 方法是 public static 的,所以 JVM 会判断 Test 类是否已经初始化了,如果没有则对其进行初始化 一般在下面这...6 中情况下会进行初始化 遇到 new、getstatic、putstatic或 invokestatic 时,如果未初始化则先初始化( 1. new 2.读取或设置一个类的静态字段 (被 final...调用一个类的静态方法 ) 使用 java.lang.reflect 包的方法对类进行反射调用时,如果未初始化则先初始化 当初始化类时,如果其父类未初始化则先触发其父类初始化 当虚拟机启动时,用户需要指定一个要执行的主类...,需要先初始化 当有 默认方法 接口的实现类发生了初始化,则该接口要在其初始化之前初始化 而我们的 main 方法满足 1 条 invokestatic 初始化过程中会对所有的类变量进行赋值操作,会执行静态代码块

    76690

    JVM加载过程科普

    校验的过程叫做 验证 验证 目的在于确保 Class 文件的字节流中包含信息符合当前虚拟机的要求,保证被加载类的正确性,不危害虚拟机自身的安全。...初始化 在连接阶段完成之后,就开始正式执行 main 方法了,由于 main 方法是 public static 的,所以 JVM 会判断 Test 类是否已经初始化了,如果没有则对其进行初始化 一般在下面这...6 中情况下会进行初始化 遇到 new、getstatic、putstatic或 invokestatic 时,如果未初始化则先初始化( 1. new 2.读取或设置一个类的静态字段 (被 final...调用一个类的静态方法 ) 使用 java.lang.reflect 包的方法对类进行反射调用时,如果未初始化则先初始化 当初始化类时,如果其父类未初始化则先触发其父类初始化 当虚拟机启动时,用户需要指定一个要执行的主类...会执行静态代码块,此时我们 b 就等于 7 了 使用 至此为止,才真正的开始执行 main 方法。

    74120

    探究Spring Boot中@PostConstruct注解的使用场景

    @PostConstruct注解用于标记在依赖注入完成后需要执行的方法。这个方法在对象创建并完成依赖注入后自动调用,但在任何类显示调用之前执行。这为开发者提供了一个在对象完全初始化后执行逻辑的钩子。...资源初始化在应用启动时,你可能需要加载或初始化一些资源,比如读取配置文件、建立数据库连接、或者预加载数据到缓存中。@PostConstruct提供了一个理想的地点来执行这些操作。...验证依赖注入有时候,你希望确保依赖注入正确完成。虽然Spring通常会在依赖注入失败时抛出异常,但在某些复杂场景下,你可能想额外验证注入的对象。...触发预加载操作在Web应用中,预加载某些数据或执行特定操作来加快首次请求响应时间是一个常见需求。...执行顺序:如果在同一个Bean中有多个@PostConstruct注解的方法,这些方法的执行顺序不能保证。官方建议只在一个类中使用一个@PostConstruct方法。

    1.8K21

    一文搞懂 java -jar 发生了什么

    类初始化的几种情况: 遇到 new、getstatic、putstatic或 invokestatic 时,如果未初始化则先初始化( 1. new 2.读取或设置一个类的静态字段 (被 final 修饰...调用一个类的静态方法 ) 使用 java.lang.reflect 包的方法对类进行反射调用时,如果未初始化则先初始化 当初始化类时,如果其父类未初始化则先触发其父类初始化 当虚拟机启动时,用户需要指定一个要执行的主类...第一个被执行的 一定是 java.lang.Object ),并且 JVM 会保证一个类的 () 线程安全,被正确的加锁同步,并且有且仅会有一个线程去执行 () ( 同一个类加载器下,一个类型只会被加载一次...指令调用的方法,都可以在类加载的解析阶段转化为直接引用 ( 静态方法、私有方法、实例构造器、父类方法( super. )、被final 修饰的方法),对应的方法称为非虚方法,其他的都是虚方法 ( 在运行期间根据实际类型确定方法执行版本...虚方法主要揭示了 java 多态的一些特征,像多态、方法重写。 main 方法执行 我们都知道方法是在栈中执行的,方法的执行过程其实就是不断的出栈入栈的过程 ? ?

    1.4K40

    Java一分钟之-Hibernate:ORM框架实践

    然而,在实际应用中,开发者可能会遇到一些常见问题和易错点。本文将深入浅出地介绍这些问题及其解决方案,并提供代码示例。 1. 配置问题 错误:SessionFactory未初始化 确保正确配置了`hibernate.cfg.xml`文件,并在代码中正确加载。...Session管理 错误:事务边界不明确 使用Session的beginTransaction()和commit()方法来管理事务。...同时,避免在事务外修改持久化对象。 错误:查询结果未转换为实体 使用list()或uniqueResult()获取查询结果,然后转换为实体类。...懒加载与立即加载 注意:懒加载陷阱 当在事务外访问懒加载属性时,会抛出LazyInitializationException。确保在需要时正确处理关联数据。

    24210

    高效开发与设计:提效Spring应用的运行效率和生产力

    01 引言 在今年的敏捷团队建设中,我通过Suite执行器实现了一键自动化单元测试。Juint除了Suite执行器还有哪些执行器呢?由此我的Runner探索之旅开始了! ‍...线上的业务 jar 包基本上普遍比较庞大,动不动一个 jar 包几百 M,启动时间在10分钟级,拖慢了在故障时快速扩容响应、以及本地开发调试的效率。...•启动加速-异步初始化方法:异步初始化方法是一种启动加速的技术,通过将一些初始化任务异步执行,可以减少启动时间并提高应用程序的响应性。这可以通过使用线程池、异步框架或异步注解等方式来实现。...04 总结:优化关键点和方法 理解,首先 MCube 会依据模板缓存状态判断是否需要网络获取最新模板,当获取到模板后进行模板加载,加载阶段会将产物转换为视图树的结构,转换完成后将通过表达式引擎解析表达式并取得正确的值...•拆分大型组件:定位加载时间较长的组件,可以考虑将其拆分成多个组件,并在启动时只加载需要的部分。这样可以减少启动时的加载时间和资源消耗。

    28110

    华为高级Java面试真题

    在Java中安全地发布对象是确保对象在多线程环境中被正确初始化并且能够被其他线程安全地访问的过程。...通过静态初始化函数: 使用静态初始化函数(static initializer)在静态变量初始化时创建对象,这样可以确保对象在类加载时被正确初始化。...选择合适的发布方式可以避免由于对象未正确发布而导致的线程安全问题。 描述Java中的安全点(Safepoint)和安全区域(Safe Region),以及它们在JVM中的作用。...在安全点上,所有线程都会被暂停,这样可以确保在进行垃圾回收等需要全局一致性的操作时,不会有线程在执行代码,从而保证了操作的一致性和准确性。...初始化(Initialization):在初始化阶段,类加载器执行类的初始化代码,包括对静态变量赋值和执行静态代码块等操作。 双亲委派模型: 在Java中,类加载器之间通常按照双亲委派模型进行组织。

    14710

    【Java】已解决:javax.xml.bind.JAXBException: JAXB

    这种情况多见于以下场景: 在Java项目中使用JAXB来处理XML数据。 项目环境或JDK版本升级后,之前正常工作的代码突然出现了此异常。 使用了不兼容的JAXB实现,或者JAXB库未正确引入。...类路径错误:使用JAXBContext.newInstance()时,传入的类没有在类路径中正确加载,或类加载器未能找到合适的类。...} 错误分析: 在Java 9及更高版本中,JAXB未默认包含,运行此代码可能会抛出JAXBException,提示无法初始化JAXBContext。...保持类路径的完整性:在使用JAXBContext.newInstance()时,确保传入的类在类路径中可访问,且类加载器能够正确加载相关类。...代码审查与测试:在进行代码审查时,确保所有的类都正确配置了JAXB注解,并进行充分的单元测试,确保JAXB能够正确解析和生成XML。

    99410

    Java 后台开发面试题分享一

    float f=3.4; 是否正确? 不正确。 在 java 中,这里的 3.4 默认是双精度数。...在编译过程中,正确检验泛型结果后,会将泛型的相关信息擦除,并且在对象进入和离开方法的边界处添加类型检查和类型转换的方法。也就是说,泛型信息不会进入到运行时阶段。 ---- 类的加载过程?...1、首先加载要创建对象的父类,然后加载要创建对象的类。 2、在类及其父类被加载的同时会将静态成员进行加载;主要包括静态成员变量的初始化,静态代码块的执行;在加载时按代码的先后顺序进行。...3、需要的类加载完成后,开始创建对象;首先会加载类以及其父类的非静态的成员,主要包括非静态成员变量的初始化,非静态代码块(构造块)的执行;在加载时按代码的先后顺序进行。...4、最后执行构造器(构造方法体);构造器执行完毕,对象生成。 ---- Java 开发运行过程?

    68810

    JVM类加载机制

    符号引用于直接引用的区别:符号引用可以理解为一个字符串,是静态的,也就是在程序未执行之前对类,方法等的表示。等程序执行的时候,会在内存中将符号引用转换为直接引用,真正的执行方法,完成类之间的调用。...发生时间不可预料,有可能和初始化阶段互相交换位置。 初始化 为类的静态变量赋予正确的初始值 当虚拟机启动时,用户需要指定一个要执行的主类(包含main()方法的那个类),虚拟机会先初始化这个主类。...当父类无法加载这个请求(在自己的搜索范围类无法找到所需的类),就会让子类自己去加载。 双亲委派模型的好处: 双亲委派模型的本质目的是为了避免类的重复加载,用代码类比的话,是为了实现代码复用。...【举个例子】每个类都有一个共同的父类Object,每个类在被加载时都会先去加载Object类,按照双亲委派模型的思路,所有的类都会优先被启动类加载器加载,那么也就是说只需要加载一次Object,当其他类需要...Object时,直接返回已经加载过的Object.class。

    33430

    深入浅出JVM(三)之HotSpot虚拟机类加载机制

    解析->初始化验证,准备,解析合起来又称为连接所以也可以是加载->连接->初始化注意这里的顺序是一般的开始顺序,并不一定是执行完某个阶段结束后才开始执行下一个阶段,也可以是执行到某个阶段的中途就开始执行下一个阶段还有种特殊情况就是解析可能在初始化之后...,但是因为hotSpot在JDK7时将字符串常量,静态变量挪出永久代(放在堆中)实际上它应该在堆中默认初始化类变量一般的默认初始化都是初始化该类型的零值| 类型 | 零值 || ---...(成功或异常)类和接口的解析当我们要访问一个未解析过的类时把要解析的类的符号引用 交给当前所在类的类加载器 去加载 这个要解析的类解析前要进行符号引用验证,如果当前所在类没有权限访问这个要解析的类,抛出异常...,不会去执行它父类接口的类构造器,直到用到父接口中定义的变量被使用时才执行JVM会保证执行在多线程环境下被正确的加锁和同步(也就是只会有一个线程去执行其他线程会阻塞等待,...包中方法对类型进行反射父类未初始化要先初始化父类 (不适用于接口)虚拟机启动时,先初始化main方法所在的类某类实现的接口中有默认方法(JDK8新加入的),要先对接口进行初始化JDK7新加入的动态语言支持

    26521

    Java虚拟机基础——3类加载机制

    5、虚拟机会保证一个类的()方法在多线程环境中被正确地加锁和同步,如果多个线程同时去初始化一个类,那么只会有一个线程去执行这个类的()方法,其线程都需要阻塞等待,直到活动线程执行...(比如构造方法就是静态方法),如果类未初始化,则需要先初始化。...2、当通过反射机制对类进行调用时,如果类未初始化,则需要先初始化。 3、当初始化一个类时,如果其父类未初始化,先初始化父类。...如果有,就直接使用;如果没有就把相关的.class加载到方法区。 1.2、在.class加载到方法区时,会分为两个部分加载:先加载非静态内容,再加载静态内容。...、所有非静态变量默认初始化完成之后,调用构造函数 2.6、在构造函数入栈时,分为两部分:先执行构造函数中的隐式三式,再执行构造函数中书写的代码 2.6.1、隐式三步 2.6.1、执行super语句

    56850

    超过90%的Android开发都回答不全的性能优化面试题

    问题分析 RecyclerView卡顿通常由以下原因导致: 频繁创建/销毁ViewHolder onBindViewHolder执行耗时操作 图片加载未优化 嵌套滑动冲突 优化方案与代码示例 1....// 错误示例:匿名Runnable持有Activity引用 object : Runnable { override fun run() { // 直接访问Activity方法导致泄漏...优化阶段分析 冷启动耗时主要分布在: Application初始化:第三方库初始化 首帧渲染:主题背景绘制、布局复杂度 优化代码实践 1....主线程耗时操作迁移到协程 // 错误示例:在主线程执行数据库查询 fun loadData() { val data = database.query() // 阻塞主线程 updateUI...return Result.success() } } // 配置周期性任务(每6小时,仅在充电+网络连接时执行) val constraints = Constraints.Builder

    10310

    2017年高频率的互联网校园招聘面试题

    虚拟机栈、本地方法栈这都是局部变量,某个方法执行完,某些局部使用的对象可以被回收。...准备 正式为类变量分配内存并设置类变量初始值的阶段, 初始化为各数据类型的零值 解析 把常量值内的符号引用替换为直接引用的过程 初始化 执行类构造器()方法 使用 根据相应的业务逻辑代码使用该类...初始化阶段,web容器通过调用init()方法来初始化Servlet实例,在Servlet的整个生命周期类,init()方法只被调用一次 客户请求到来时,容器会开始一个新线程,并调用servlet的 service...但当A执行完毕时,线程B进入synchronized锁定代码,它并不知道实例已经创建,将继续创建新的实例,导致产生多个单例对象。 也可以用内部类的方式创建 ?...笔试编程题 线程 VS 进程 关于线程和进程,不正确的描述是__。(选 D 栈是线程私有, 保存其运行状态和局部变量 ) A. 进程的隔离性要好于线程 B. 线程在资源消耗上通常要比进程轻量 C.

    1.1K20

    MIPS架构深入理解4-Cache机制

    每当我们在不同地址空间进行上下文切换时,都需要重新初始化整个Cache。在过去的许多年,对于小容量的Cache,这都是常见的处理方式。...当初始化Cache的时候,这是最好的方法。如果Cache被奇偶保护,还需要填充正确的校验位。参见下面的Fill命令。...1 Index Load Tag 读取Cache行的Tag,数据加载到TagLo/TagHi寄存器。几乎不用 2 Index Store Tag 设置tag。初始化时必须每行都执行该操作。...这是常用失效Cache方法。 5 Fill 填充Cache行的数据位。奇偶保护时使用。 6 Hit writeback 强制回写内存。 7 Fetch and Lock 正常的加载Cache操作。...CPU大概有50%-65%的时间在等待Cache重填。 而系统等待Cache重填的时间取决于两个因素: 平均指令的Cache未命中率: Cache未命中数除以执行的指令数。

    2.6K31

    JVM体系结构详解

    在运行时而不是编译时首次引用类时初始化类文件。 1.1 加载 类将由该组件加载。引导类加载器、扩展类加载器和应用程序类加载器是有助于实现这一目标的三个类加载器。...应用程序类加载器 –负责加载应用程序级类路径、所述环境变量的路径等。 上述类加载器在加载类文件时将遵循委托层次结构算法。...解析 – 所有符号内存引用将被来自方法区域的原始引用所替换。 1.3 初始化 这是类加载的最后阶段;在这里,所有静态变量都将被赋初始值,并且静态块也会被执行。 2....执行引擎将在转换字节码时使用解释器的帮助,但是当它发现重复的代码时,它使用JIT编译器,JIT编译整个字节码并将其更改为本机代码。此本机代码将直接用于重复的方法调用,从而提高系统的性能。...垃圾收集器:收集和删除未引用的对象。可以通过调用 System.gc()触发垃圾收集,但不能保证执行。JVM的垃圾收集收集创建的对象。

    52720
    领券