`
javazqd110
  • 浏览: 8570 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

java关于Class的生命周期

    博客分类:
  • java
阅读更多

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实例不会被GCJava虚拟机本身会始终引用这些类加载器,而这          些类加载器则会始终引用它们所加载的类的Class象,因此这些Class对象始终是可触及的)

       Bootstrap类加载器;

       Extension类加载器;

       System类加载器。

       自定义的类加载器加载的Class是可以被卸载的(tomatjsp动态修改)

 

 

分享到:
评论

相关推荐

    Java虚拟机和Java程序的生命周期?

    ### Java虚拟机与Java程序的生命周期 #### 一、Java虚拟机(JVM)概述 Java虚拟机(JVM)是一种可以执行Java字节码的虚拟机。它为Java应用程序提供了一个独立于硬件平台的运行环境,使得Java程序可以在任何安装了JVM...

    java对象的 生命周期

    ### Java对象的生命周期详解 Java对象的生命周期是一个关键概念,涉及到对象从创建到销毁的整个过程。理解这一过程对于高效地编写和管理Java程序至关重要。 #### 创建对象的方式 对象的创建是生命周期的起点,...

    Java中类的生命周期

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

    Java中对象的生命周期 ..doc

    ### Java中对象的生命周期 #### 一、对象的生命周期概览 在Java中,对象的生命周期是指从对象被创建到最终被垃圾回收器回收这段时间。理解对象的生命周期对于有效地管理和优化Java应用程序至关重要。 #### 二、...

    java变量的生命周期与作用域

    Java 变量的生命周期与作用域 Java 变量的生命周期是指变量从定义到销毁的整个过程,而作用域是指变量可以被访问的范围。在 Java 中,变量的生命周期和作用域是密切相关的。 变量的生命周期可以分为三个阶段:定义...

    详解java类的生命周期.doc

    Java类的生命周期是指一个`.class`文件从加载到最终卸载的整个过程。这一过程大致可以分为以下几个阶段: 1. **加载(Loading)**: - 加载阶段是类生命周期的起始点。在此阶段,JVM负责读取类的二进制数据,并将...

    Java对象的生命周期[参照].pdf

    Java对象的生命周期是Java编程中一个关键的概念,它涵盖了从对象创建到销毁的全过程,包括内存分配、使用、以及垃圾回收。在这个过程中,理解JVM(Java虚拟机)的角色至关重要,因为它是对象生命周期的主要管理者。 ...

    java编译class文件

    `.class`文件的生成是Java程序生命周期中的关键步骤,它使得Java代码能够在Java虚拟机(JVM)上运行。此外,`jd-gui`是一个实用的工具,它可以反编译`.class`文件,显示源代码,这对于调试和理解已有的二进制Java...

    spring bean的生命周期

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

    Java中类的生命周期.doc

    ### Java中类的生命周期 #### 一、概述 在Java编程语言中,类的生命周期是从类被加载到Java虚拟机(JVM)中开始,经过一系列处理直至类被卸载的过程。这一过程中涉及的关键步骤包括类的加载、连接、初始化等。理解...

    Java对象在JVM中的生命周期详解

    "Java对象在JVM中的生命周期详解" Java对象在JVM中的生命周期是Java编程语言中一个非常重要的概念,它涉及到Java对象的创建、使用、释放和销毁整个过程。在JVM中,Java对象的生命周期可以分为七个阶段:创建阶段、...

    Java 线程的生命周期完整实例分析

    Java 线程的生命周期完整实例分析 Java 线程的生命周期是指线程从创建到销毁的整个过程。Java 中的线程生命周期主要包括以下几个阶段:新建(New)、可运行(Runnable)、运行(Running)、等待(Waiting)、阻塞...

    浅谈Java线程的生命周期——北大青鸟佳音旗舰.docx

    本文将深入探讨Java线程的生命周期,包括创建、启动、结束以及线程的协作和调度。 首先,创建Java线程有两种主要方式:直接实例化`Thread`类或者创建一个新的类去继承`Thread`类并重写`run()`方法。例如,你可以...

    Activity生命周期详解

    ### Activity生命周期详解 #### 概述 Android应用开发中,`Activity`是四大基础组件之一,主要用于构建用户界面。理解`Activity`的生命周期对于管理应用的状态、资源以及响应用户交互至关重要。 #### `Activity`...

    Java 线程的生命周期详细介绍及实例代码

    Java线程的生命周期是每个Java多线程开发者必须了解的重要概念。线程在它的整个生命周期中会经历五个基本状态:新建(New)、就绪(Runnable)、运行(Running)、阻塞(Blocked)和死亡(Dead)。接下来,我们将...

    SERVLET生命周期与JSP生命周期比较

    ### SERVLET生命周期与JSP生命周期比较 #### 一、引言 在现代Web开发中,Servlet和JSP是两种非常重要的技术,它们都属于Java EE平台的一部分,主要用于构建动态Web应用程序。这两种技术各有特点,但又紧密相关,...

    Java线程的生命周期命名与获取代码实现

    本文将详细探讨Java线程的生命周期、调度与控制,并提供相关的代码实现。 **一、线程的生命周期** Java线程的生命周期包括五个基本状态: 1. **新建状态**(New):当使用`new Thread()`创建一个新的线程对象时,...

    Spring bean生命周期demo

    在Spring框架中,Bean的生命周期是指从创建到销毁的整个过程。这个过程包含了初始化、正常使用以及最终的销毁几个阶段。了解并掌握Spring Bean的生命周期对于优化应用性能和资源管理至关重要。接下来,我们将深入...

Global site tag (gtag.js) - Google Analytics