面向对象的语言最重要的一个特点就是万物皆对象,每一样东西都可以用一个对象来表示。
然而对象创建是一个很简单的事情,一般只需要一个new关键字就可以搞定,可是当我们使用的对象已经完成使命了,或者我们已经抛弃他了,这个时候如何结束这个对象的生命从而达到释放系统内存的目的呢?很好java给我们提供了垃圾回收器(garbage collector)这个东西,从而java程序员再也不需要像C++程序员为管理和释放对象而烦恼,不过垃圾回收器(简称GC)也有自己的缺点,就是它不会实时的调用自己来回收已经过期的对象,因为他是一个优先级很低的进程来控制的,所以只有当系统内存比较紧张的情况下才会做销毁对象,释放内存的工作,而且他也有个局限性,就是只会释放new出来的对象,对于静态的对象变量或者其他方式创建的对象它是不做处理的,所以Object里有个finalize方法提供给子类来实现,就是为了能在GC销毁对象对做一些清理型的工作,比如关闭流之类的,我们可以在里面写上对象销毁后需要关联的操作。下面我引用thinking in java里面的一段内容来详述java创建对象的两种时期
第一种方式是直接在程序加载时创建对象,,它允许程序员作出选择。为获得最快的运行速度,存储以及存在时间可在编写程序时决定,只需将对象放置在堆栈(有时也叫作自动或定域变量)或者静态存储区域即可。这样便为存储空间的分配和释放提供了一个优先级。某些情况下,这种优先级的控制是非常有价值的。然而,我们同时也牺牲了灵活性,因为在编写程序时,必须知道对象的准确的数量、存在时间、以及类型。如果要解决的是一个较常规的问题,如计算机辅助设计、仓储管理或者空中交通控制,这一方法就显得太局限了。
第二种方式是在程序运行时动态创建对象,java 的GC一般只会管理和销毁这种方式创建的对象。此方式是在一个内存池中动态创建对象,该内存池亦叫“堆”或者“内存堆”。若采用这种方式,除非进入运行期,否则根本不知道到底需要多少个对象,也不知道它们的存在时间有多长,以及准确的类型是什么。这些参数都在程序正式运行时才决定的。若需一个新对象,只需在需要它的时候在内存堆里简单地创建它即可。由于存储空间的管理是运行期间动态进行的,所以在内存堆里分配存储空间的时间比在堆栈里创建的时间长得多(在堆栈里创建存储空间一般只需要一个简单的指令,将堆栈指针向下或向下移动即可)。由于动态创建方法使对象本来就倾向于复杂,所以查找存储空间以及释放它所需的额外开销不会为对象的创建造成明显的影响。除此以外,更大的灵活性对于常规编程问题的解决是至关重要的。
java允许我们决定是在写程序时创建对象,还是在运行期间创建,这种控制方法更加灵活。大家或许认为既然它如此灵活,那么无论如何都应在内存堆里创建对象,而不是在堆栈中创建。但还要考虑另外一个问题,亦即对象的“存在时间”或者“生存时间”(Lifetime)。若在堆栈或者静态存储空间里创建一个对象,编译器会判断对象的持续时间有多长,到时会自动“破坏”或者“清除”它。程序员可用两种方法来破坏一个对象:用程序化的方式决定何时破坏对象,或者利用由运行环境提供的一种“垃圾收集器”特性,自动寻找那些不再使用的对象,并将其清除。当然,垃圾收集器显得方便得多,但要求所有应用程序都必须容忍垃圾收集器的存在,并能默许随垃圾收集带来的额外开销。
分享到:
相关推荐
最后,单例模式是一种特殊的对象创建模式,它保证一个类只有一个实例。单例可以通过私有构造器和静态工厂方法实现,或者使用枚举类型。使用枚举类型实现单例可以确保线程安全且防止反射攻击,是推荐的实现方式: ``...
这个方法接受两个参数:前缀和后缀,返回一个`File`对象表示新创建的临时文件。例如: ```java import java.io.File; import java.io.IOException; public class TempFileExample { public void createTempFile()...
在Java编程语言中,对象的生命周期和销毁是一个关键的概念,它涉及到内存管理和性能优化。下面我们将详细讨论Java中对象的创建、使用以及销毁的过程。 首先,对象的创建通常通过`new`关键字完成,这会在堆内存中...
总结来说,Java对象池是一种优化技术,通过复用对象减少创建和销毁的成本。我们可以借鉴Jakarta Commons Pool的设计思路,实现自己的轻量级对象池,满足特定场景的需求。理解并熟练运用对象池,对于提升Java应用的...
在Java、C++等编程语言中,线程池被广泛应用,用于管理线程的生命周期,避免频繁创建和销毁线程带来的开销。本文将基于提供的"ThreadPool.cpp"和"ThreadPool.h"文件,深入解析线程池的实现原理及其自动管理线程创建...
对象池技术的核心优势在于能够显著降低对象创建与销毁所带来的开销,特别是在高并发场景下,这种技术可以极大地提高系统的响应速度和处理能力。 #### Java对象池的实现原理 Java中的对象池技术通常依赖于几个关键...
Java对象的生命周期是一个关键概念,涉及到对象从创建到销毁的整个过程。理解这一过程对于高效地编写和管理Java程序至关重要。 #### 创建对象的方式 对象的创建是生命周期的起点,通常通过以下几种方式实现: 1. ...
这种方式显著降低了对象创建和销毁所带来的性能开销,同时也减少了内存的使用量。 #### 实现一个对象池的关键类 实现一个完整的对象池需要以下几个关键类: 1. **对象池工厂 (ObjectPoolFactory) 类**: - 负责...
Java对象池是一种优化资源管理的技术,它通过复用已经创建并初始化过的对象,避免了频繁地创建和销毁对象带来的性能开销。在Java中,对象池通常用于数据库连接、线程、Socket等昂贵资源的管理。下面我们将深入探讨...
4. **性能**:栈内存分配和回收比堆内存更快,因此直接定义的对象创建和销毁速度较快。但堆内存可以提供更大的容量。 5. **异常处理**:`new`操作可能会抛出内存不足异常,而直接定义的对象不会面临这个问题(除非...
此外,深入理解对象生命周期有助于我们在编程中更好地控制对象的创建和销毁,防止不必要的资源消耗。 总的来说,Java中的内存管理和对象结构是开发者需要掌握的基础技能,它直接影响着程序的运行效率和稳定性。通过...
如 Java 语言平台中,创建对象主要有两种方式,分别为利用 NEW关键字来创建(这是对象创建的主要方式)与不适利用 NEW 关键字来创建。假如 Java 语言中某些对象不是利用 new 关键字为对象在内存中分配一块存储区域,...
对象池化技术并不是适用于所有情况,只有在对象创建和初始化成本较高的时候才有明显效果。例如,如果对象的初始化涉及网络通信、数据库连接等耗时操作,使用对象池化可以显著减少这些操作的次数。然而,对于创建开销...
在对象的创建阶段,Java对象实体类会根据预设的属性字段和初始值进行初始化。这些属性字段通常定义在类的声明中,并使用关键字进行描述。在实例化一个对象时,Java虚拟机会根据类的定义分配相应的内存空间,并将属性...
* PoolableObjectFactory 用于管理被池化的对象的产生、激活、挂起、校验和销毁; * ObjectPool 用于管理要被池化的对象的借出和归还,并通知 PoolableObjectFactory 完成相应的工作。 总结 Java 对象池化技术可以...
本项目是一个基于Java的对象池管理系统,旨在通过对象池技术减少频繁创建和销毁对象所带来的开销,从而提高系统性能和资源利用率。对象池技术允许在需要时从池中获取已存在的对象,而不是每次都创建新对象,使用完毕...
- 对象的创建、初始化和销毁 - GUI组件的使用和布局管理 - 事件处理和监听器 - 实例代码和解释,帮助理解概念 通过深入学习这个PPT,无论你是初学者还是有一定经验的开发者,都能进一步提升Java编程技能,特别是...
在Java编程中,性能优化是不...总的来说,减少对象创建是Java性能优化的重要策略,但这需要在不影响代码清晰度和抽象层次的前提下进行。设计时应权衡性能和可维护性,合理利用各种工具和技术,确保程序高效且易于理解。