`
san_yun
  • 浏览: 2652475 次
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

对象的生命周期

    博客分类:
  • java
阅读更多

先来看一段代码:

java 代码
  1. package com.talent.business;   
  2.   
  3. public class ScheduleManager  {   
  4.   
  5.   
  6.     ScheduleManager() {   
  7.         System.out.println("DefaultScheduleManager init");   
  8.     }   
  9.   
  10.   
  11. }   
java 代码
  1. package com.talent.business;   
  2.   
  3. public class ScheduleManagerFactory {   
  4.     private  ScheduleManager dsm = new ScheduleManager();   
  5.   
  6.     private static ScheduleManagerFactory factory = new ScheduleManagerFactory();   
  7.        
  8.     public ScheduleManagerFactory() {   
  9.         System.out.println("ScheduleManagerFactory init");   
  10.     }   
  11.   
  12.     public static ScheduleManager newInstance() {   
  13.         return factory.dsm;   
  14.     }   
  15.        
  16.     public static void main(String[] args) {   
  17.         ScheduleManagerFactory.newInstance();   
  18.         ScheduleManagerFactory.newInstance();   
  19.   
  20.     }   
  21.   
  22. }   
  23.   
  24.   

如果你能准确的说出运行结果,那么你就没有必要看这篇文章了,如果不能,我们来一起好好研究对象的生命周期.

运行的结果:

                 DefaultScheduleManager init

                 ScheduleManagerFactory init

我们来看这两句结果是如何产生的,当我们在main方法里面调用ScheduleManagerFactory .newInstatnce()的时候,JVM 会先装载ScheduleManagerFactory .clas,这个时候实际上叫做类加载过程。

实际在当我们每次用new语句产生一个类的实例的时候,JVM都会先对这个对象所属的类型进行加载,JLS(JAVA语言规范)用Class这个类型表示一个对象所属的类型,比如

java 代码
  1. System.out.println(String.class.getName());  

 这条语句的输出结果将是:java.lang.String;

JVM会进行类加载的时候首先会解析这个类(Class)的字节码时候是安全的,然后会对Class的static成员变量进行初始化。

导致JVM进行类加载有一下这几种情况

1.访问类的静态成员变量或静态成员方法.

2.调用new语句产生类的实例.

3.访问类的子类的静态成员或者实例化子类也会对父类进行加载

 

分享到:
评论

相关推荐

    Hibernate对象的生命周期

    Hibernate对象的生命周期 Hibernate对象的生命周期 Hibernate对象的生命周期

    TAO对象生命周期服务.rar_TAO_TAO COR_corba_lifecycle

    《深入理解TAO对象生命周期服务:基于CORBA的实践解析》 在分布式计算环境中,CORBA(Common Object Request Broker Architecture,公共对象请求代理体系结构)作为一种标准,为跨平台的对象间交互提供了强大的支持...

    Java对象生命周期管理.pdf

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

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

    CORBA 对象生命周期之实现和内存管理 Java 教程 CORBA(Common Object Request Broker Architecture)是一种分布式对象架构,允许不同语言编写的对象之间进行通信。CORBA 对象生命周期是指对象从创建到销毁的整个...

    dotnet 6 使用 DependentHandle 关联对象生命周期.rar

    在.NET 6中,DependentHandle是一个非常重要的概念,它为开发者提供了一种管理对象生命周期的新方式。这个特性尤其适用于需要关联两个对象,确保它们在生命周期中的行为保持一致的情况。在C#编程中,理解并熟练运用...

    hibernate持久化对象生命周期[参照].pdf

    本文将深入探讨Hibernate中的持久化对象生命周期,包括瞬时对象、持久化对象和游离对象的状态转换及其特性。 1. 瞬时对象(Transient Objects) 瞬时对象是指通过`new`操作符创建但尚未与数据库记录关联的Java对象...

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

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

    T21.4_持久化对象生命周期 java 经典教程 经典教材

    T21.4_持久化对象生命周期 java 经典教程 经典教材

    在Delphi中管理对象生命周期

    在Delphi编程环境中,对象生命周期管理是至关重要的,它涉及到对象的创建、使用以及销毁,以确保程序的正确运行和资源的有效利用。Delphi是一种基于Windows的开发工具,使用Win32 API进行底层操作,同时也支持面向...

    C#第八章(对象的生命周期)

    总之,C#中的对象生命周期管理通过CLR和垃圾回收器提供了一套自动化的内存管理机制。通过学习本章内容,开发者将能够理解并掌握如何在C#中创建和管理对象,以及如何通过各种方式正确地处理资源释放问题,以编写出...

    对象的生命周期.pdf

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

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

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

    Spring对象生命周期

    一、spring对象生命周期 首先创建一个UserInfo类,其中包含属性name,无参构造方法,静态与非静态构造方法,get和set方法,init和destroy方法,并且每一个方法都有相应的输出: package club.affengkuang.vo; ...

    第四章示例代码__对象的生命周期链

    3. **对象生命周期管理**:Spring.Net提供了不同的生命周期策略,包括单例(Singleton)、原型(Prototype)以及自定义生命周期策略。单例对象在整个应用生命周期中只有一个实例,而原型对象每次请求都会创建新的...

    C++临时性对象的生命周期详细解析

    以下是临时性对象生命周期的详细解析: 1)一般情况: 临时性对象的销毁发生在完整表达式求值的最后阶段。例如,在以下代码中,`a1 + a2`会生成一个临时对象,用于存储加法运算的结果。这个临时对象在表达式结束...

    谈谈.net对象生命周期(垃圾回收)

    .NET对象生命周期,特别是涉及到垃圾回收(Garbage Collection, GC)的部分,是.NET开发中的关键概念。垃圾回收是一种自动管理内存的技术,它负责监控并回收不再使用的对象所占用的内存,以防止内存泄漏。 在.NET...

    理解C#对象生命周期

    对象是在一个叫做托管堆(managedheap)的内存中分配的,它们会被垃圾回收器(garbage collector)自动销毁。在讲解之前,你必须知道类(class),对象(object),引用(reference),栈(stack)和堆(heap)的意思。一个类...

Global site tag (gtag.js) - Google Analytics