专栏名称: 芋道源码
纯 Java 源码分享公众号,目前有「Dubbo」「SpringCloud」「Java 并发」「RocketMQ」「Sharding-JDBC」「MyCAT」「Elastic-Job」「SkyWalking」「Spring」等等
目录
相关文章推荐
Java编程精选  ·  Controller层代码这么写,简洁又优雅! ·  18 小时前  
Java编程精选  ·  字节员工自曝:在强调一遍OD ... ·  昨天  
Java编程精选  ·  雷军删文,热搜第一! ·  2 天前  
芋道源码  ·  再见了SpringBoot,后端AI已成气候! ·  2 天前  
51好读  ›  专栏  ›  芋道源码

用好对象池,性能提升10倍!

芋道源码  · 公众号  · Java  · 2025-05-22 09:29

正文

请到「今天看啥」查看全文


工作机制

对象池模式的工作原理是创建一个预初始化对象池,可以根据需要借用和归还这些对象。不是每次需要时都创建一个新对象,而是在池中搜索可以重用的可用对象。如果对象可用,则将其从池中移除并返回给请求对象,否则,将创建一个新对象并将其添加到池中。

基于 Spring Boot + MyBatis Plus + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能

  • 项目地址:https://github.com/YunaiV/ruoyi-vue-pro
  • 视频教程:https://doc.iocoder.cn/video/

代码实现对象池

我这边通过使用 Apache Common Pool 来实现对象的池化技术。

1、引入依赖

<dependency>
    <groupId>org.apache.commonsgroupId>
    <artifactId>commons-pool2artifactId>
    <version>2.9.0version>
dependency>

2、需要池化的对象示例

public class Foo {

    private final String username;

    public Foo(String username) {
        this.username = username;
    }

    public String getUsername() {
        return username;
    }
}

3、构建对象创建工厂 可以直接实现 org.apache.commons.pool2.PooledObjectFactory 接口实现创建、销毁、钝化、取消等接口,也可以使用他的抽象类,实现创建和包装方法即可。

public class FooPoolObjectFactory extends BasePooledObjectFactory<Foo{

    @Override
    public Foo create() throws Exception {
        return new Foo(String.valueOf(RandomUtils.randomInt(010)));
    }

    @Override
    public PooledObject wrap(Foo obj) {
        return new DefaultPooledObject<>(obj);
    }
}

4、实现驱逐策略。我们有必要定期对对象的"健康状态"进行检查,剔除掉"不能用"的对象,并填充新的对象给"对象池"。一般数据库链接对象,要定期进行心跳,确保连接可用,如果连接断开,需要销毁对象,并重新创建新的对象。 common-pool 中,我们可以实现驱逐策略,对对象进行定期检查。关注公z号:码猿技术专栏,回复关键词:1111 获取阿里内部性能调优手册

public class FooEvictionPolicy implements EvictionPolicy<Foo{

    @Override
    public boolean evict(EvictionConfig config, PooledObject underTest, int idleCount) {
        // todo  定期检查对象某些功能是否可用
        return true;
    }
}

5、构建&配置对象池







请到「今天看啥」查看全文