当前位置: 首页 > article >正文

Java 池化技术

Java中的池化技术这是一种通过重用对象来提升性能的重要技术。1. 什么是池化技术池化技术的核心思想是将资源预先创建好放在一个池子里需要时从池中获取用完后归还而不是每次都创建新的。2. 常见的池化技术2.1 线程池import java.util.concurrent.*; public class ThreadPoolExample { public static void main(String[] args) { // 创建固定大小的线程池 ExecutorService executor Executors.newFixedThreadPool(5); // 提交任务 for (int i 0; i 10; i) { executor.submit(() - { System.out.println(Thread.currentThread().getName() 执行任务); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } }); } // 关闭线程池 executor.shutdown(); } // 自定义线程池推荐方式 public static ExecutorService createCustomThreadPool() { return new ThreadPoolExecutor( 5, // 核心线程数 10, // 最大线程数 60L, // 空闲线程存活时间 TimeUnit.SECONDS, // 时间单位 new LinkedBlockingQueue(100), // 任务队列 new ThreadPoolExecutor.CallerRunsPolicy() // 拒绝策略 ); } }2.2 数据库连接池import com.zaxxer.hikari.HikariConfig; import com.zaxxer.hikari.HikariDataSource; import java.sql.*; public class ConnectionPoolExample { private static HikariDataSource dataSource; static { HikariConfig config new HikariConfig(); config.setJdbcUrl(jdbc:mysql://localhost:3306/mydb); config.setUsername(root); config.setPassword(password); config.setMaximumPoolSize(10); config.setMinimumIdle(5); config.setConnectionTimeout(30000); dataSource new HikariDataSource(config); } public static void main(String[] args) { // 使用连接 try (Connection conn dataSource.getConnection(); PreparedStatement stmt conn.prepareStatement(SELECT * FROM users); ResultSet rs stmt.executeQuery()) { while (rs.next()) { System.out.println(rs.getString(username)); } } catch (SQLException e) { e.printStackTrace(); } } }2.3 对象池Apache Commons Poolimport org.apache.commons.pool2.*; import org.apache.commons.pool2.impl.*; // 1. 定义可池化的对象 class ExpensiveObject { private String id; public ExpensiveObject() { System.out.println(创建新对象); this.id String.valueOf(System.currentTimeMillis()); } public void doSomething() { System.out.println(对象 id 执行操作); } } // 2. 创建对象工厂 class ExpensiveObjectFactory extends BasePooledObjectFactoryExpensiveObject { Override public ExpensiveObject create() { return new ExpensiveObject(); } Override public PooledObjectExpensiveObject wrap(ExpensiveObject obj) { return new DefaultPooledObject(obj); } } // 3. 使用对象池 public class ObjectPoolExample { public static void main(String[] args) { GenericObjectPoolExpensiveObject pool new GenericObjectPool(new ExpensiveObjectFactory()); pool.setMaxTotal(5); pool.setMaxIdle(3); pool.setMinIdle(1); try { // 从池中获取对象 ExpensiveObject obj1 pool.borrowObject(); ExpensiveObject obj2 pool.borrowObject(); obj1.doSomething(); obj2.doSomething(); // 归还对象 pool.returnObject(obj1); pool.returnObject(obj2); } catch (Exception e) { e.printStackTrace(); } } }3. 池化技术的优势3.1 性能提升减少创建开销避免频繁创建和销毁对象降低GC压力减少对象创建降低垃圾回收频率提高响应速度对象已经创建好直接使用3.2 资源控制public class ResourceControlExample { // 控制数据库连接数避免耗尽数据库资源 Configuration public class DataSourceConfig { Bean public DataSource dataSource() { HikariConfig config new HikariConfig(); config.setMaximumPoolSize(20); // 最大连接数 config.setMinimumIdle(5); // 最小空闲连接 config.setConnectionTimeout(30000); // 连接超时 return new HikariDataSource(config); } } }4. 自定义简单对象池import java.util.concurrent.*; import java.util.*; public class SimpleObjectPoolT { private final BlockingQueueT pool; private final int maxSize; private final ObjectFactoryT factory; private int createdCount 0; public interface ObjectFactoryT { T create(); } public SimpleObjectPool(int maxSize, ObjectFactoryT factory) { this.maxSize maxSize; this.factory factory; this.pool new LinkedBlockingQueue(maxSize); } public T borrow() throws InterruptedException { T obj pool.poll(); if (obj ! null) { return obj; } // 池为空创建新对象但不超过最大限制 synchronized (this) { if (createdCount maxSize) { createdCount; return factory.create(); } } // 等待归还 return pool.take(); } public void return_(T obj) { if (obj ! null) { pool.offer(obj); } } // 使用示例 public static void main(String[] args) { SimpleObjectPoolStringBuilder pool new SimpleObjectPool( 3, StringBuilder::new ); try { StringBuilder sb pool.borrow(); sb.append(Hello); pool.return_(sb); } catch (InterruptedException e) { e.printStackTrace(); } } }5. 池化配置调优import org.apache.commons.pool2.impl.GenericObjectPoolConfig; public class PoolConfigOptimization { public static GenericObjectPoolConfig? createOptimizedConfig() { GenericObjectPoolConfig? config new GenericObjectPoolConfig(); // 基本配置 config.setMaxTotal(50); // 最大对象数量 config.setMaxIdle(20); // 最大空闲对象 config.setMinIdle(5); // 最小空闲对象 // 行为配置 config.setBlockWhenExhausted(true); // 池耗尽时是否阻塞 config.setMaxWaitMillis(5000); // 最大等待时间 config.setTestOnBorrow(true); // 借用时测试有效性 config.setTestOnReturn(false); // 归还时测试有效性 config.setTestWhileIdle(true); // 空闲时测试有效性 // 维护配置 config.setTimeBetweenEvictionRunsMillis(30000); // 驱逐线程运行间隔 config.setMinEvictableIdleTimeMillis(60000); // 对象最小空闲时间 config.setSoftMinEvictableIdleTimeMillis(30000); // 软最小空闲时间 return config; } }6. 注意事项6.1 内存泄漏防范public class PoolLeakPrevention { // 使用 try-with-resources 自动归还 public void safeUsePool(GenericObjectPoolResource pool) { try (PooledResourceWrapper wrapper new PooledResourceWrapper(pool)) { Resource resource wrapper.getResource(); // 使用资源 } // 自动归还 } // 包装类实现 AutoCloseable static class PooledResourceWrapper implements AutoCloseable { private final GenericObjectPoolResource pool; private final Resource resource; public PooledResourceWrapper(GenericObjectPoolResource pool) throws Exception { this.pool pool; this.resource pool.borrowObject(); } public Resource getResource() { return resource; } Override public void close() { pool.returnObject(resource); } } }6.2 监控和诊断Component public class PoolMonitor { private final HikariDataSource dataSource; public void printPoolStats() { HikariPoolMXBean poolMXBean dataSource.getHikariPoolMXBean(); System.out.println(活跃连接数: poolMXBean.getActiveConnections()); System.out.println(空闲连接数: poolMXBean.getIdleConnections()); System.out.println(总连接数: poolMXBean.getTotalConnections()); System.out.println(等待线程数: poolMXBean.getThreadsAwaitingConnection()); } }总结池化技术是Java性能优化的重要手段主要优点包括提高性能减少对象创建开销资源控制防止资源耗尽响应更快对象立即可用管理方便集中管理对象生命周期选择合适的池化技术和配置参数可以显著提升应用性能和稳定性。

相关文章:

Java 池化技术

Java中的池化技术,这是一种通过重用对象来提升性能的重要技术。1. 什么是池化技术池化技术的核心思想是:将资源预先创建好,放在一个"池子"里,需要时从池中获取,用完后归还,而不是每次都创建新的。…...

视频批量加封面软件|智能截取指定时间帧生成封面,离线可用一键适配多平台

温馨提示:文末有联系方式【核心功能:智能批量封面生成】 本工具专为内容创作者与运营人员设计,可对多个视频文件进行统一化封面处理。 无需逐个打开编辑,只需设定目标时间点(如3秒、5秒或片头黄金帧)&#…...

多平台智能邮件群发工具|Python底层开发|支持变量模板、附件批量发送与失败邮箱自动记录

温馨提示:文末有联系方式产品核心功能概览 本工具是一款专为高效邮件分发设计的智能解决方案,突破单一邮箱限制,全面兼容主流邮件平台(包括但不限于QQ邮箱、163邮箱、Gmail、Outlook、Yahoo等)作为发信源,可…...

Memtest86中文版内存诊断工具|U盘启动DDR2-DDR5全兼容|军工级精准检测蓝屏死机根源

温馨提示:文末有联系方式一、什么是Memtest86中文版内存诊断工具 Memtest86中文版是一款专为硬件工程师、IT运维人员及DIY爱好者打造的高可靠性内存检测解决方案。 它基于国际公认权威内核,完整汉化界面,支持U盘免安装一键启动,无…...

Golang实现企业级AI智能体安全合规自动化检测系统

摘要:随着欧盟AI法案(EU AI Act)2026年3月实施细则正式生效,以及中国《网络安全法》修订版新增AI安全专项条款,企业部署AI智能体面临前所未有的合规压力。本文基于Golang构建企业级AI智能体安全合规自动化检测系统,实现法规条款智能解析、智能体行为实时监控、多维度风险…...

面试官与水货程序员谢飞机的面试奇遇记

面试官与水货程序员谢飞机的面试奇遇记 第一轮:基础入门 面试官:"谢飞机同学你好,请先简单介绍一下自己吧。" 谢飞机:"呃...面试官你好,我叫谢飞机,从事Java开发三年多了,做过一…...

互联网大厂Java面试现场:严肃面试官与搞笑程序员谢飞机的爆笑对决

互联网大厂Java面试现场:面试官与水货程序员谢飞机的爆笑对决人物介绍 面试官:某互联网大厂技术总监,提问风格严谨,喜欢循序渐进引导 谢飞机:三年CRUD经验的水货程序员,简历吹上天,面试全靠编第…...

【语义分割】12个主流算法架构介绍、数据集推荐、总结、挑战和未来发展

背景 语义分割是将图像中的每个像素按其语义类别进行分类,从而实现像素级别的语义理解。其在自动驾驶、医学图像、结构损伤检测等领域有着广泛的应用。 1.主流算法架构 1.1 U-Net 论文地址:https://arxiv.org/abs/1505.04597 U-Net2015年由Ronneberge…...

Python-flask基于安卓的的酒店管理系统 小程序

目录技术栈选择功能模块设计后端实现要点小程序前端开发接口安全与性能测试与部署时间规划注意事项项目技术支持可定制开发之功能创新亮点源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作技术栈选择 后端采用Python Flask框架,轻…...

Python-flask向家租房 房屋租赁微信小程序t9353

目录需求分析技术栈选型数据库设计API接口开发微信小程序集成测试与部署安全与性能优化迭代计划项目技术支持可定制开发之功能创新亮点源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作需求分析 明确房屋租赁微信小程序的核心功能需求&#…...

最新真空泵配备专利吹扫注入系统

普发真空Fab解决方案(Pfeiffer VacuumFab Solutions,隶属于 Busch 集团),已推出 UltiDry 多级罗茨真空泵。这款新泵专为要求严苛的半导体应用而设计,旨在抵御腐蚀性气体、具有侵蚀性的副产物以及大量的粉末负载。其无油…...

【开题答辩全过程】以 基于Springboot的养老服务管理系统的设计与实现为例,包含答辩的问题和答案

个人简介一名14年经验的资深毕设内行人,语言擅长Java、php、微信小程序、Python、Golang、安卓Android等开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。感谢大家的…...

【开题答辩全过程】以 基于微信平台的电子阅读器为例,包含答辩的问题和答案

个人简介一名14年经验的资深毕设内行人,语言擅长Java、php、微信小程序、Python、Golang、安卓Android等开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。感谢大家的…...

好物分享 | gstack:将 Claude Code 从通用助手升级为专属专家团队

在日常软件开发过程中,我们常常陷入一种与 AI 编程助手博弈的困境。当你向通用型 AI 代理提出一个需求时,它往往会字面意义上地执行你的指令,却忽略了背后的产品目标。你让它修复一个 bug,它可能只修复了表面现象而忽略了架构隐患…...

【开题答辩全过程】以 人才培养方案修订管理系统为例,包含答辩的问题和答案

个人简介一名14年经验的资深毕设内行人,语言擅长Java、php、微信小程序、Python、Golang、安卓Android等开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。感谢大家的…...

【开题答辩全过程】以 商城后台管理系统1为例,包含答辩的问题和答案

个人简介 一名14年经验的资深毕设内行人,语言擅长Java、php、微信小程序、Python、Golang、安卓Android等 开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。 感谢大家…...

【问题解决】org.springframework.web.util.NestedServletException Handler dispatch failed;

详细异常信息:org.springframework.web.util.NestedServletException: Handler dispatch failed; nested exception is java.lang.NoClassDefFoundError: javax/xml/bind/DatatypeConverter at org.springframework.web.servlet.DispatcherServlet.doDispatch(Dispa…...

全面打开SEO之门,从零基础到有效提升网站流量的方法

在探索“SEO的从零起步”过程中,了解内容的核心要素十分重要。首先,优质内容是吸引用户和搜索引擎的关键。内容需要具备原创性和实用性,以满足用户需求并提高网站的可信度。此外,关键词的合理使用也是不容忽视的一环,选…...

MySQL 无法支撑亿级订单的多维聚合查询的庖丁解牛

MySQL 无法支撑亿级订单的多维聚合查询,是OLTP(在线事务处理)与 OLAP(在线分析处理)本质错位的典型表现。 试图用 MySQL 做海量数据分析,就像用法拉利去拉煤——不是车不好,而是用途错了。MySQL…...

ERP有效把控产品ROI、库存和毛利的庖丁解牛

ERP 有效把控产品 ROI、库存和毛利,是跨境电商卖家从“粗放式增长”迈向“精细化运营”的分水岭。 这三者构成了电商经营的**“不可能三角”**: 高 ROI 需要精准投放和选品。低库存 需要极致周转,但可能增加断货风险。高毛利 需要高定价或低成…...

智能科学毕业设计最全课题帮助

1 引言 毕业设计是大家学习生涯的最重要的里程碑,它不仅是对四年所学知识的综合运用,更是展示个人技术能力和创新思维的重要过程。选择一个合适的毕业设计题目至关重要,它应该既能体现你的专业能力,又能满足实际应用需求&#xff…...

【开题答辩全过程】以 基于微信小程序地方小吃分享平台设计与实现为例,包含答辩的问题和答案

个人简介一名14年经验的资深毕设内行人,语言擅长Java、php、微信小程序、Python、Golang、安卓Android等开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。感谢大家的…...

【开题答辩全过程】以 山西能源学院电子报销为例,包含答辩的问题和答案

个人简介一名14年经验的资深毕设内行人,语言擅长Java、php、微信小程序、Python、Golang、安卓Android等开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。感谢大家的…...

第7篇:基于传递函数的PI控制器设计

你是否遇到过? 做工控现场调试、机器人底盘闭环控制,或是自动驾驶低速跟车、液位恒温控制时,你是不是总被这类问题卡住:只用单纯的比例调节,温度、电机转速、水箱液位要么死活稳不住目标值,始终留一截稳态偏…...

weixin230疫苗预约小程序ssm(文档+源码)_kaic

第5章 系统实现 进入到这个环节,也就可以及时检查出前面设计的需求是否可靠了。一个设计良好的方案在运用于系统实现中,是会帮助系统编制人员节省时间,并提升开发效率的。所以在系统的编程阶段,也就是系统实现阶段,对于…...

weixin229学生资助在线管理软件开发微信小程序ssm(文档+源码)_kaic

第5章 系统实现系统实现这个章节的内容主要还是展示系统的功能界面设计效果,在实现系统基本功能,比如修改,比如添加,比如删除等管理功能的同时,也显示出系统各个功能的界面实现效果,该部分内容一方面与前面…...

weixin228基于微信小程序的走失人员的报备平台设计ssm(文档+源码)_kaic

第5章 系统实现系统实现这个章节的内容主要还是展示系统的功能界面设计效果,在实现系统基本功能,比如修改,比如添加,比如删除等管理功能的同时,也显示出系统各个功能的界面实现效果,该部分内容一方面与前面…...

【开题答辩全过程】以 基于springboot的学生竞赛管理系统的设计与实现为例,包含答辩的问题和答案

个人简介一名14年经验的资深毕设内行人,语言擅长Java、php、微信小程序、Python、Golang、安卓Android等开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。感谢大家的…...

隧道施工目标检测数据集VOC+YOLO格式3012张19类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件)图片数量(jpg文件个数):3012标注数量(xml文件个数):3012标注数量(txt文件个数):3012标注类别…...

PLL锁相环MATLAB仿真模型:新能源并网相位检测的得力助手

PLL锁相环MATLAB仿真模型。 已调试好,可以直接用。 新能源并网相位检测,控制系统的基础部件。 附理论资料在新能源并网的复杂系统中,相位检测可是极为关键的一环,而PLL锁相环则是这个控制系统的基础部件,如同精密仪器中…...