`
argel_lj
  • 浏览: 364998 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Java中类与对象的生命周期

阅读更多

类的生命周期

  .java源文件经过编译后会生成相应的字节码文件(.class)。jvm通过解释器翻译字节码文件并在系统中执行。

  而java类的生命周期就是其字节码文件装载、连接、初始化、使用、和卸载的整个过程。

  ● 装载。

  jvm找到需要装载的类,将类的信息装载到jvm的方法区中。然后在堆区实例化一个java.lang.Class对象,作为方法区中的类的信息入口。

  不同的jvm对于类的装载时机并不相同,有些在遇到这个类时就装载这个类(虽然并不知道这个类是否会被用到),另一些则在真正用到一个类的时候才对它进行装载。

  ● 连接阶段。连接阶段一般情况下在一个类加载了一部分之后就开始,与装载阶段交叉进行。连接阶段主要做一些加载后的验证以及初始化的准备工作,分为验证、准备、解析三个子阶段。

  1、验证主要是验证一个被加载的类是否合法,以确保这个类能够被jvm运行。

  2、准备阶段为类中的静态变量分配内存和jvm默认初值(不是程序中设定的初值。对于jvm,基本类型的默认处置为0,而引用类型为null),并为常量分配我们在程序中设定的初值。

  3、解析是指把常量池中的符号引用转换为直接引用,即将所有的类名、接口名、字段名、方法名转换为具体的内存地址。

  ● 如果一个类被直接引用,则会触发类的初始化。被动引用则不会触发类的初始化。

  直接引用的情况有:

  1、创建类的新实例

  2、调用类的静态方法

  3、操作类或接口的静态字段(final字段除外)

  4、调用Java的特定的反射方法

  5、初始化一个类的子类

  6、指定一个类作为Java虚拟机启动时的初始化类

  初始化过程会初始化与类相关的赋值语句和静态语句(即有static关键字修饰的信息),其他语句在实例化对象的时候才会运行。

  初始化按照顺序运行类中的赋值语句和静态语句。如果有父类,则首首先运行父类中的语句。

  以下情况不会引起类的初始化:

  ◇ 定义类数组

 

SampleClass[] samples = new SampleClass[5];

  ◇ 引用类的常量

 

String sampleConstant = SampleClass.SampleConstant;

  ● 使用

  类的使用包括主动引用和被动引用。只有主动引用会实例化类对象。

  ● 卸载

  如果下面的所有情况都成立,类将会被卸载:

  1、类所有的实例都已经被回收。(即堆中不存在该类的任何实例)

  2、加载该类的ClassLoader被回收。

  3、该类对应的java.lang.Class对象没有任何地方被引用,无法在任何地方通过反射访问该类的方法。

  jvm在方法区垃圾回收的时候对类进行卸载,在方法区中清空类信息。

  至此,一个java类的生命周期结束。

  对象的生命周期

  java对象是在jvm的堆区创建的。在创建对象之前,可能会触发类的加载、连接和初始化。

  jvm在类初始化完成后,根据类的信息在堆区实例化类对象,初始化非静态变量和默认构造方法。

  由于java在堆上创建对象,因此编译器对对象的生命周期一无所知。Java提供了垃圾回收器机制,jvm会在空闲时间以不定时的方式动态回收无任何引用的对象占据的内存空间。

分享到:
评论

相关推荐

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

    1. **对象生命周期的开始**: - 当对象被创建时,其生命周期开始。首先需要为对象分配内存空间,在Java堆内存中进行。 - 接着,对象的实例变量会被初始化为其默认值或指定的初始值。 - 对象可以通过多种方式创建...

    Java中类的生命周期

    程序生命周期与Java虚拟机生命周期是一致的。这意味着Java虚拟机进程从创建起的任务就是执行Java程序,直至程序正常退出或异常终止,此时JVM也会随之关闭。 #### 二、类的生命周期 在Java中,类的生命周期是从类被...

    java对象的 生命周期

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

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

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

    Java中类的生命周期.doc

    程序的生命周期与Java虚拟机的生命周期是一致的,因为Java虚拟机的主要任务就是执行Java程序。 #### 三、类的加载、连接与初始化 ##### 3.1 加载 当Java程序需要使用某个类时,JVM必须确保该类已经被加载、连接和...

    java类与对象教学(2)

    在“java类与对象教学(2)”中,我们将深入探讨几个关键知识点:对象重构、`this`关键字、静态变量与静态方法,以及对象的进一步讨论和包的使用。 1. **对象重构**: 重构是改进代码结构的过程,不改变其外部行为,...

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

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

    JVM中对象的生命周期

    在Java虚拟机(JVM)中,对象的生命周期包含了多个阶段,这些阶段共同决定了一个对象从诞生到消亡的过程。以下是这些阶段的详细介绍: **创建阶段(Creation)** 在这个阶段,对象从无到有,主要经历以下几个步骤:...

    Java对象生命周期管理.pdf

    Java对象生命周期管理是Java开发中不可或缺的一个重要环节。在Java编程中,对象的创建、使用和销毁是由垃圾收集器自动管理的。理解这一过程对于优化应用程序性能至关重要,因为不恰当的对象管理可能导致内存泄漏,...

    详解java类的生命周期.doc

    除了上述四个区域外,JVM还包含本地方法栈和程序计数器等其他运行时内存区域,但它们与Java类的生命周期关联不大,因此本文不作详细阐述。 #### Java类的生命周期 Java类的生命周期是指一个`.class`文件从加载到...

    Java调用c++类对象

    注意,由于内存管理在不同语言间可能存在差异,所以必须手动管理C++对象的生命周期,防止内存泄漏。 在完成C++的实现后,我们需要编译这个C++源文件为动态链接库,然后在Java中加载这个库,这样Java就可以通过JNI...

    Java面向对象程序设计课后答案全解

    学习何时、如何以及为什么使用构造器是理解对象生命周期的关键。 6. **抽象类与接口**:抽象类用于定义一个通用的模板,不能被实例化,但可以被其他类继承。接口则提供了完全抽象的方法声明,是实现多继承的一种...

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

    在这个过程中,理解JVM(Java虚拟机)的角色至关重要,因为它是对象生命周期的主要管理者。 首先,让我们了解一下JVM的结构。JVM是Java虚拟机的缩写,它的主要任务是执行符合Java字节码规范的.class文件。JRE(Java...

    Hibernate持久化对象的生命周期

    Hibernate的核心概念之一就是持久化对象的生命周期,这涉及到对象在数据库中的状态及其与Session的关系。 首先,我们来看一下Hibernate中持久化对象的三种基本状态: 1. **瞬时对象(Transient Objects)**: - ...

    对象的生命周期.pdf

    在Java中,对象可以通过多种方式创建,这些创建过程标志着对象生命周期的开始。本章节详细介绍了四种常见的创建对象的方法: 1. **使用`new`语句创建对象**:这是创建Java对象最常见的方法。通过这种方式,我们可以...

    Java 详解垃圾回收与对象生命周期

    Java垃圾回收与对象生命周期是Java程序设计中至关重要的概念,主要涉及到JVM内存管理机制。在Java中,垃圾回收机制负责自动管理堆内存,确保在程序运行过程中有效地使用内存资源,避免内存泄漏。 1. 垃圾回收: - ...

    2022年CORBA对象生命周期之实现和内存管理Java教程.docx

    CORBA 对象生命周期的实现和内存管理是 Java 教程中非常重要的一部分。通过对静态、瞬态和长久 Corba 对象的分类,以及伺服对象池模式的应用,可以实现高效的对象管理和内存管理,提高系统的性能和可靠性。

    08 领域对象的生命周期 87-101.rar

    领域对象的生命周期是指从创建到销毁的过程中,对象经历的各种状态及其变化。这个主题通常与面向对象编程(OOP)和领域驱动设计(DDD)紧密相关。下面我们将深入探讨领域对象的生命周期及其相关知识点。 首先,我们...

Global site tag (gtag.js) - Google Analytics