1.一个Java对象有其自己的生命周期,而对象基于class类同样也有着自己生命周期。
2.java类的完整的生命周期会经历加载、连接、初始化、使用、和卸载五个阶段。
2.1.加载:java类加载器查找Class的二进制文件,把类的信息加载到jvm的方法区中,实例化一 个java.lang.Class对象。
2.2.连接:
a)验证:检查载入的class文件数据合法性,如字节码的格式等,目的就是保证加载的类是能够被jvm 所运行。
b)准备:为类的静态变量分配内存(基本类型为0,引用类型为null),为静态常量赋值目的是确保 变量的初始化。
C)解析:把常量池中的符号引用转换为直接引用(直接引用就是这个方法在方法区中的。内存地址;符 号引用就是一个方法名),解析就是把类、接口、方法、成员变量的符号引用转换成内存地 址,以供调用(就是指针)。
2.3.初始化:执行静态域(声明变量时赋值语句,静态块)。
a).引用分为直接引用和被动引用,只有直接引用,会触发这一阶段。
b).直接引用:new实例化对象;使用类的静态变量(非静态常量),方法;反射执行前三种情况;子 类被初始化;作为程序入口(调用main--调用静态方法的一种)。
c).被动引用:定义类数组;引用类的静态常量;类.class。
d).从上面看出,类的初始化具有惰性行为(只保证初始化要用到的),而主动引用会触发初始化(静 态常量是在链接中的准备阶段已经完成了)。
2.4.使用:这样我们就可以创建对象实例了。
2.5.卸载:Class作为JVM中的一个特殊对象,也会被GC回收卸载(清空方法区中Class的信息和堆区中的 java.lang.Class对象。这时Class的声明周期就结束了)。
a).Class被回收要同时满足以下三个条件:
NoInstance:该类所有的实例都已经被GC;
NoClassLoader:加载该类的ClassLoader实例已经被GC;
NoReference:该类的java.lang.Class对象没有被引用(XXX.class, 静态变量/方法)。
b).由Java虚拟机自带的类加载器所加载的类,在虚拟机的生命周期中,始终不会被卸载(根据第 二条依据,系统ClassLoader实例不会被GC,Java虚拟机本身会始终引用这些类加载器,而这 些类加载器则会始终引用它们所加载的类的Class对象,因此这些Class对象始终是可触及的)
Bootstrap类加载器;
Extension类加载器;
System类加载器。
自定义的类加载器加载的Class是可以被卸载的(如tomat的jsp动态修改)。
相关推荐
Java 变量的生命周期与作用域 Java 变量的生命周期是指变量从定义到销毁的整个过程,而作用域是指变量可以被访问的范围。在 Java 中,变量的生命周期和作用域是密切相关的。 变量的生命周期可以分为三个阶段:定义...
Java对象的生命周期是Java编程中一个关键的概念,它涵盖了从对象创建到销毁的全过程,包括内存分配、使用、以及垃圾回收。在这个过程中,理解JVM(Java虚拟机)的角色至关重要,因为它是对象生命周期的主要管理者。 ...
Java 类的生命周期是指从类加载到卸载的全过程,这个过程包括加载、连接、初始化、使用和卸载五个阶段。下面我们将详细探讨这些阶段。 1. **加载**: 加载是生命周期的第一步,Java 虚拟机(JVM)在这个阶段寻找并...
`.class`文件的生成是Java程序生命周期中的关键步骤,它使得Java代码能够在Java虚拟机(JVM)上运行。此外,`jd-gui`是一个实用的工具,它可以反编译`.class`文件,显示源代码,这对于调试和理解已有的二进制Java...
Spring Bean的生命周期是Spring框架中的核心概念,它涵盖了Bean从创建到销毁的全过程。了解这一过程对于优化应用程序的性能和管理资源至关重要。在Spring中,Bean的生命周期主要分为以下几个阶段: 1. **初始化阶段...
"Java对象在JVM中的生命周期详解" Java对象在JVM中的生命周期是Java编程语言中一个非常重要的概念,它涉及到Java对象的创建、使用、释放和销毁整个过程。在JVM中,Java对象的生命周期可以分为七个阶段:创建阶段、...
Java 线程的生命周期完整实例分析 Java 线程的生命周期是指线程从创建到销毁的整个过程。Java 中的线程生命周期主要包括以下几个阶段:新建(New)、可运行(Runnable)、运行(Running)、等待(Waiting)、阻塞...
本文将深入探讨Java线程的生命周期,包括创建、启动、结束以及线程的协作和调度。 首先,创建Java线程有两种主要方式:直接实例化`Thread`类或者创建一个新的类去继承`Thread`类并重写`run()`方法。例如,你可以...
Java线程的生命周期是每个Java多线程开发者必须了解的重要概念。线程在它的整个生命周期中会经历五个基本状态:新建(New)、就绪(Runnable)、运行(Running)、阻塞(Blocked)和死亡(Dead)。接下来,我们将...
本文将详细探讨Java线程的生命周期、调度与控制,并提供相关的代码实现。 **一、线程的生命周期** Java线程的生命周期包括五个基本状态: 1. **新建状态**(New):当使用`new Thread()`创建一个新的线程对象时,...
在Spring框架中,Bean的生命周期是指从创建到销毁的整个过程。这个过程包含了初始化、正常使用以及最终的销毁几个阶段。了解并掌握Spring Bean的生命周期对于优化应用性能和资源管理至关重要。接下来,我们将深入...
在Spring框架中,Service层是业务逻辑的核心...以上就是关于Spring中Service生命周期的管理和配置,包括XML和注解方式的详细介绍。通过理解和熟练掌握这些知识,开发者能够更好地设计和维护Spring应用中的业务逻辑层。
通过学习这一领域,开发者可以更好地理解Java程序的生命周期,提高问题诊断能力,并能利用字节码技术实现高级编程技巧。而"JVM之用Java解析class文件共10页.pdf.zip"这个压缩包很可能包含了一份详细的教程或论文,...
理解Activity的生命周期和Intent的传值机制对于Android开发者来说至关重要。 Activity的生命周期分为三个主要阶段:启动(Start)、运行(Running)和销毁(Destroy)。在启动过程中,Activity会经历onCreate()、...
总的来说,Servlet是Java Web开发中的基础,理解和掌握Servlet的生命周期对于开发高效、可靠的Web应用至关重要。结合源码分析和适当的工具,如调试器和日志记录,可以更好地理解和优化Servlet的性能。在实际项目中,...
Android Activity 生命周期 Android Activity 生命周期是指 Activity 从创建到销毁的整个过程,该过程中会经历多个状态变化,每个状态变化都会触发相应的回调方法。理解 Activity 生命周期是 Android 开发的基础。 ...
Java 类的生命周期是Java编程中的一个核心概念,它涵盖了类从加载到卸载的整个过程。这个过程可以分为五个主要阶段:加载、验证、准备、解析和初始化。下面将详细探讨这些阶段及其重要性。 **1. 加载(Loading)** ...
Java线程的生命周期详解 Java线程的生命周期是多线程编程中一个非常重要的概念,理解线程的生命周期可以帮助开发者更好地掌握Java多线程编程。下面是Java线程的生命周期的详解: 一、线程的状态 Java线程的生命...
当我们谈论“android生命周期管理:启动一个Activity”,我们关注的是如何启动Activity以及在生命周期中的关键回调函数。 1. 了解生命周期回调函数 Activity的生命周期由一系列的回调方法组成,包括onCreate(), ...
Servlet生命周期是Java Web开发中一个关键的概念,它描述了Servlet从创建到销毁的整个过程,这个过程由Servlet容器(如Tomcat)进行管理。Servlet生命周期主要分为三个阶段:初始化阶段、运行阶段和销毁阶段。 1. ...