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

对象池技术的基本原理

    博客分类:
  • java
阅读更多
对象池技术的基本原理
Java对象的生命周期分析

Java对象的生命周期大致包括三个阶段:对象的创建,对象的使用,对象的清除。因此,对象的生命周期长度可用如下的表达式表示:T = T1 +  T2 +T3。其中T1表示对象的创建时间,T2表示对象的使用时间,而T3则表示其清除时间。由此,我们可以看出,只有T2是真正有效的时间,而 T1、T3则是对象本身的开销。下面再看看T1、T3在对象的整个生命周期中所占的比例。

我们知道,Java对象是通过构造函数来创建的,在这一过程中,该构造函数链中的所有构造函数也都会被自动调用。另外,默认情况下,调用类的构造函数 时,Java会把变量初始化成确定的值:所有的对象被设置成null,整数变量(byte、short、int、long)设置成0,float和 double变量设置成0.0,逻辑值设置成false。所以用new关键字来新建一个对象的时间开销是很大的,如表1所示。

表1 一些操作所耗费时间的对照表

运算操作 示例 标准化时间 
本地赋值 i = n 1.0 
实例赋值 this.i = n 1.2 
方法调用 Funct() 5.9 
新建对象 New Object()  980 
新建数组 New int[10]  3100 

从表1可以看出,新建一个对象需要980个单位的时间,是本地赋值时间的980倍,是方法调用时间的166倍,而若新建一个数组所花费的时间就更多了。

对象池技术基本原理的核心有两点:缓存和共享,即对于那些被频繁使用的对象,在使用完后,不立即将它们释 放,而是将它们缓存起来,以供后续的应用程序重复使用,从而减少创建对象和释放对象的次数,进而改善应用程序的性能。事实上,由于对象池技术将对象限制在 一定的数量,也有效地减少了应用程序内存上的开销。
实现一个对象池,一般会涉及到如下的类:

1)对象池工厂(ObjectPoolFactory)类

该类主要用于管理相同类型和设置的对象池(ObjectPool),它一般包含如下两个方法:

·createPool:用于创建特定类型和设置的对象池;

·destroyPool:用于释放指定的对象池;

同时为保证ObjectPoolFactory的单一实例,可以采用Singleton设计模式,见下述getInstance方法的实现:

public static ObjectPoolFactory getInstance() {
if (poolFactory == null) {
poolFactory = new ObjectPoolFactory();
}
return poolFactory;
}

2)参数对象(ParameterObject)类

该类主要用于封装所创建对象池的一些属性参数,如池中可存放对象的数目的最大值(maxCount)、最小值(minCount)等。

3)对象池(ObjectPool)类

用于管理要被池化对象的借出和归还,并通知PoolableObjectFactory完成相应的工作。它一般包含如下两个方法:

·getObject:用于从池中借出对象;
·returnObject:将池化对象返回到池中,并通知所有处于等待状态的线程;

4)池化对象工厂(PoolableObjectFactory)类

该类主要负责管理池化对象的生命周期,就简单来说,一般包括对象的创建及销毁。该类同ObjectPoolFactory一样,也可将其实现为单实例。

具体应该中,对象采用单例模式创建,而对象池采用参数对象池创建.
分享到:
评论

相关推荐

    Java对象池技术的原理及其实现

    本文深入探讨了Java对象池技术的基本原理及其实现方式,旨在帮助读者理解如何利用对象池优化Java应用程序的性能。通过对对象池技术核心概念——缓存与共享的阐述,本文不仅介绍了对象池的基本工作原理,还详细讲解了...

    Java对象池技术的原理

    本文将详细探讨Java对象池技术的基本原理及其具体实现方式。 #### 基本概念 在开始之前,我们先明确几个基本概念: - **对象池**:一种存储和管理对象的容器,这些对象可以被重复使用而不是每次都需要重新创建。 ...

    C#自定义对象池

    对象池的基本工作原理是,当程序需要一个对象时,首先检查对象池中是否有可用的对象,如果有,则从池中取出一个;如果没有,就按照预设的方式创建新的对象。使用完毕后,对象不是立即被销毁,而是返回到对象池中,供...

    Java对象池实现源码

    本篇文章将深入探讨Java对象池的实现原理,以及如何借鉴"Jakarta Commons Pool"组件来设计一个轻量级的对象池。 一、对象池的基本概念 对象池的基本工作流程包括以下几个步骤: 1. 初始化:预创建一定数量的对象并...

    C++对象池源码示例

    对象池的基本思想是预先创建并维护一组对象,而不是每当需要时就动态地创建新对象,然后在不再需要时再销毁它们。这种策略可以显著减少对象生命周期管理的开销,尤其是在对象创建和销毁过程中涉及到大量系统调用或...

    unity子弹对象池详细注释

    通过以上内容,我们可以了解到Unity中子弹对象池的基本实现原理和扩展方式,以及如何通过注释使代码更易理解和维护。实践中,应结合具体项目需求,灵活运用这些知识,以优化游戏性能并降低内存消耗。

    对象池的一个小例子

    ### 对象池技术详解 #### 一、对象池的基本概念 在软件开发中,特别是针对高性能、高并发的应用场景,对象池技术是一种非常实用的设计模式。它主要用于避免频繁创建和销毁对象所带来的性能开销,特别是在对象创建...

    性能优化_对象池

    本文将深入探讨对象池的概念、工作原理以及在实际应用中的优势和注意事项。 对象池的基本思想是预先创建并维护一组对象,而不是每次需要时都动态创建新的对象。当程序需要一个对象时,它可以从池中获取已存在的对象...

    Unity做的对象池小案例

    通过理解并应用对象池技术,开发者能够更有效地管理资源,减少内存压力,提高游戏运行效率。在"StudyDuiXiangChi"这个项目中,你可以进一步研究和实践这些概念,以创建自己的优化工具和解决方案。

    用Dictionary写的对象池

    对象池是一种在软件开发中用于优化资源管理的技术,它的核心思想是预先创建并维护一组对象,以便在需要时快速分配,而不是每次都新建对象。这种方式可以减少频繁创建和销毁对象带来的性能开销,尤其是在处理大量短...

    C#的对象池课件

    1. **对象池的基本原理** - 初始化:对象池在应用程序启动时创建一定数量的对象并保存在池中。 - 分配:当需要对象时,从池中取出一个已经存在的对象,而不是创建新的。 - 归还:使用完毕后,不是立即销毁对象,...

    EasyObjectsPool(一个简单的Unity对象池插件)

    Unity对象池是一种常见的游戏开发技术,其核心目的是通过预先创建并管理一批游戏对象,避免频繁地创建和销毁对象带来的性能开销,进而提升游戏运行效率。EasyObjectsPool就是这样一款专为Unity开发者设计的轻量级...

    数据库连接池的图解原理

    #### 三、数据库连接池的基本原理 为了克服上述问题,引入数据库连接池的概念是非常必要的。连接池的基本思想是在程序启动时预先创建一定数量的数据库连接,并将它们存储在一个容器(通常是内存中的队列)中。当...

    轻量级的对象池

    在软件开发中,对象池是一种优化资源管理的技术,它通过预先创建并维护一组对象,避免频繁地创建和销毁对象,从而提高系统的性能。本文将探讨对象池的设计原理、实现方式以及它在实际应用中的价值。 1. **对象池的...

    用js创建XMLHttpRequest对象池

    首先,理解XMLHttpRequest的基本工作原理至关重要。当一个XHR对象被创建时,它会占用一定的系统资源,包括内存和线程。如果在短时间内频繁创建和销毁这些对象,会增加浏览器的负担,可能导致页面响应变慢。因此,...

    [Unity]对象缓存池PoolManager.rar

    首先,对象缓存池的基本原理是预先创建一组游戏对象,当需要使用这些对象时,而不是每次都在运行时创建新的实例,而是从池中获取已存在的对象并复用。当对象不再需要时,不会立即销毁,而是放回池中待后续使用,这样...

    【ASP.NET编程知识】.NET Core对象池的应用编程篇.docx

    在.NET Core中,对象池是一种优化性能的技术,尤其适用于创建和销毁对象代价高昂的情况。对象池的基本思想是重用已创建的对象,而不是每次都创建新的实例,从而减少内存分配和垃圾回收的压力。这篇文档主要介绍了...

    RabbitMQ客户端连接池的原理及源码

    4. **对象池策略(Pooling Strategy)**:定义了连接的分配和回收规则,例如线程局部连接、公平分配、LRU(Least Recently Used)等策略。 5. **池化连接(Pooled Connection)**:是连接池中的实际对象,它是一个...

    Java数据库连接池的原理与应用.pdf

    Java数据库连接池的原理与应用 在Java开发领域,数据库连接池(Database Connection Pool,简称DBCP)是一种提高数据库访问性能、降低资源消耗的重要技术。它通过预先建立一定数量的数据库连接,存储在一个“池”中...

Global site tag (gtag.js) - Google Analytics