`
weishiym
  • 浏览: 34473 次
  • 性别: Icon_minigender_1
  • 来自: 广西
社区版块
存档分类
最新评论

类的生命周期

 
阅读更多

 

 

类的生命周期

综述

 

1.    只有当一个类被切实使用到的时候才会被加载到虚拟机中(例如:new, 方法调用, A a = null;不算

2.    若在加载一个类的过程中,有其他类被切实使用到,则会被一同级联加载到JVM中。

3.    当一个类中的某个符号被第一次使用到时,该类才会被初始化;当类被加载时,它并未被初始化。

4.    初始化顺序:

静态函数/变量初始化(Textual Order)

实例成员变量初始化

构造函数

 

加载(Loading)

 

1)类加载器通过类的全限定名来获取定义此类的二进制字节流

2)字节流-> 方法区运行时数据结构

3)在方法区生成java.lang.Class 对象 (作为这个类在方法区的入口)

 

验证 (Verification)

 

确保Class字节流中包含的信息符合当前JVM的要求,且不会危害虚拟机安全

1)文件格式验证 (验证字节流是否符合Class文件格式规范)

2)元数据验证(对元数据进行语义校验,确保符合Java语法)

3)字节码验证(对类的方法体进行校验,确保符合语义和逻辑)

4)符合引用验证(对类中的符号引用进行校验,以确保解析动作可正常执行)

 

准备(Preparation)

 

为类变量的静态字段在方法区分配内存并设置零值的阶段

1.   进行内存分配的对象仅包括类变量的static字段

2.  初始化的为变量的零值,而非默认值

 

解析(Resolution)

 

JVM将常量池内的符号引用替换为直接引用的过程,包括

类/接口、字段、类方法、接口方法、方法类型、方法句柄、调用点限定符

 

初始化(Initialization)

 

执行<clinit>()方法的过程

1.     <clinit>()方法是由类变量的赋值动作和static语句块合并产生的;合并后的顺序即自然语句顺序(Textual Order);static语句块只能访问定义在该语句块之前的变量,定义在其后的变量只能赋值,不能访问。

2.     JVM自动在子类<clinit>()方法执行之前,先执行父类<clinit>()方法

3.    若类中没有静态语句块,也没有对变量的赋值操作,则compiler可以不生成<clinit>()方法

4.    执行接口的<clinit>()方法前不需要先执行父接口的<clinit>()方法,当需要使用到父接口定义的变量时,再行初始化。

5.    接口的实现类在初始化时不会执行父接口<clinit>()方法

6.    JVM保证一个类的<clinit>()方法运行时是线程安全的;但是如果执行<clinit>()的线程退出该方法,其它线程被唤醒后不会再进入<clinit>(),即:一个类加载器下,每个类型只会被初始化一次。

分享到:
评论

相关推荐

    详解java类的生命周期.doc

    - 加载阶段是类生命周期的起始点。在此阶段,JVM负责读取类的二进制数据,并将其转换为运行时数据结构。 - 这个过程中,JVM还会创建一个代表该类的`java.lang.Class`对象,以便于后续操作(如反射)。 2. **连接...

    类(型)的生命周期--装载、连接、初始化、卸载

    类(型)的生命周期--装载、连接、初始化、卸载 帮助你正确理解类的产生与消亡

    Java中类的生命周期

    ### Java中类的生命周期 #### 一、Java虚拟机与程序生命周期 在深入了解Java中类的生命周期之前,我们首先需要了解Java虚拟机(JVM)及其生命周期的概念。 **1. Java虚拟机启动** 当我们通过`java`命令运行一个...

    深入java虚拟机(二)——类的生命周期(上)类的加载和连接1

    这是两个不同阶段的区别,也是理解类生命周期的关键点。 在Java中,类加载器主要有以下几种: - **Bootstrap ClassLoader**:启动类加载器,负责加载JRE核心库。 - **Extension ClassLoader**:扩展类加载器,负责...

    asp.net生命周期

    ASP.NET生命周期是Web应用程序开发中的核心概念,它涵盖了从客户端浏览器发起请求到服务器响应的整个过程。这个生命周期涉及多个阶段,对于理解和优化ASP.NET应用程序的性能至关重要。 首先,当一个HTTP请求到达Web...

    Activity生命周期管理

    通常,这样的工具类会包含一系列静态方法或实例方法,用于注册和解除对生命周期回调的监听,以及在特定的生命周期方法中执行自定义操作。 例如,`ActivityLifeCallbackManager`可能提供以下功能: 1. 注册回调:...

    通过代码实例解析JAVA类生命周期

    Java 类生命周期是指从类加载到内存到卸载出内存的过程,包括加载、验证、准备、初始化和卸载五个阶段。本文将通过一个具体的代码实例来详细解析这些阶段。 首先,让我们分析给定的代码: ```java public class ...

    垃圾分类全生命周期管控系统建设方案.pptx

    垃圾分类全生命周期管控系统

    spring bean的生命周期

    Spring Bean的生命周期是Spring框架中的核心概念,它涵盖了Bean从创建到销毁的全过程。了解这一过程对于优化应用程序的性能和管理资源至关重要。在Spring中,Bean的生命周期主要分为以下几个阶段: 1. **初始化阶段...

    详解java类命周期.doc

    Java 类生命周期详解 Java 类的生命周期是指从类的加载到卸载的整个过程,包括五个主要阶段:加载、连接、初始化、使用和卸载。理解这些阶段对于优化应用程序性能和解决内存管理问题至关重要。 1. **加载(Loading...

    apple程序生命周期

    `UIApplicationDelegate`是关键的代理类,它定义了一系列的方法,用于处理应用程序的各种生命周期事件。例如,`application:didFinishLaunchingWithOptions:`方法在应用程序启动完成后被调用,开发者可以在这个方法...

    生命周期计算

    标题中的“生命周期计算”可能指的是计算人类生命周期的工具或算法,尤其在计划生育和生殖健康领域中,这样的计算可能涉及到预测女性的排卵周期、最佳受孕时间以及预产期等。这种计算对于想要怀孕的夫妻来说是十分...

    生命周期企业生命周期计算Stata代码(李云鹤文献)(附2000-2022年数据和结果)

    企业生命周期 采用销售收入增长率、留存收益率、资本支出率及企业年龄综 合得分划分企业生命周期 ;并根据我国上市企业已经度过初创期的实际情况,在考虑行业 之间存在差异的情况下,把企业生命周期划分为三个阶段...

    Activity生命周期详解

    在这个例子中,我们创建了一个名为`LifeCycleActivity`的`Activity`类,并在每个生命周期回调方法中记录了日志消息。这样可以帮助开发者跟踪`Activity`的生命周期状态变化,并据此调整代码逻辑。 总结来说,理解`...

    产品生命周期概述.pptx

    产品生命周期概述 产品生命周期(Product Life Cycle,简称 PLC)是指产品从进入市场到被淘汰退出市场的全部运动过程。美国学者齐尔·迪安在对300多种工业品市场生命周期的跟踪研究后,发现几乎所有工业品都遵循...

    Android-Android轻松实现生命周期绑定

    在Android应用开发中,管理Activity和Fragment的生命周期是至关重要的,因为这直接影响到应用的性能、内存使用以及用户体验。"Android-Android轻松实现生命周期绑定"的主题着重于如何更有效地处理这些组件的生命周期...

    Java中类的生命周期与java垃圾回收机制

    Java中类的生命周期与java垃圾回收机制

    View的生命周期

    本文将深入探讨“View的生命周期”,并基于一个名为“MyView”的自定义控件实例进行解析。 Android中的View生命周期主要包含以下几个关键阶段: 1. **构造方法**:每个View类实例化时,会调用一个或多个构造函数。...

Global site tag (gtag.js) - Google Analytics