品牌网站建设价格天天快递qq代挂主站网站建设

news/2025/10/8 4:54:59/文章来源:
品牌网站建设价格天天快递,qq代挂主站网站建设,wordpress怎么做淘宝客,html水平导航栏怎么做对象池是一种设计模式#xff0c;用于管理和重用对象#xff0c;以提高性能和资源利用率。对象池的概念在许多应用程序中都有广泛应用#xff0c;特别是在需要频繁创建和销毁对象的情况下#xff0c;例如数据库连接、线程、HTTP连接等 对象池通过预先创建一组对象并将它们存…对象池是一种设计模式用于管理和重用对象以提高性能和资源利用率。对象池的概念在许多应用程序中都有广泛应用特别是在需要频繁创建和销毁对象的情况下例如数据库连接、线程、HTTP连接等 对象池通过预先创建一组对象并将它们存储在池中以供需要时获取和使用。当对象不再需要时它们不会被销毁而是被返回到池中以便在后续的请求中重新使用 对象池的优点包括 减少对象创建和销毁的开销提高性能和响应时间最大限度地利用系统资源避免资源的浪费控制对象的数量防止资源耗尽和系统崩溃提供对象的重用机制避免频繁的对象创建和垃圾回收 Apache Commons Pool2 Apache Commons Pool2 是一个广泛使用的Java对象池库被许多开源项目和企业应用程序采用。它提供了通用的对象池化解决方案可用于管理各种类型的对象如数据库连接、线程池、HTTP连接等 Commons Pool 工作原理 核心类 ObjectPool 对象池负责对对象进行生命周期的管理并提供了对对象池中活跃对象和空闲对象统计的功能 对象的提供与归还borrowObject、returnObject创建对象addObject销毁对象invalidateObject池中空闲对象数量、被使用对象数量getNumActive、getNumIdle PooledObjectFactory 对象工厂类负责具体对象的创建、初始化对象状态的销毁和验证 commons-pool2框架本身提供了默认的抽象实现BasePooledObjectFactory业务方在使用的时候只需要继承该类然后实现warp和create方法即可 PooledObject 池化对象是需要放到ObjectPool对象的一个包装类。添加了一些附加的信息比如说状态信息创建时间激活时间等 池对象状态及流程 PooledObjectState 池对象状态枚举 public enum PooledObjectState {//在空闲队列中,还未被使用IDLE,//使用中ALLOCATED,//在空闲队列中,当前正在测试是否满足被驱逐的条件EVICTION,//不在空闲队列中目前正在测试是否可能被驱逐。因为在测试过程中试图借用对象并将其从队列中删除。//回收测试完成后它应该被返回到队列的头部。EVICTION_RETURN_TO_HEAD,//在队列中正在被校验VALIDATION,//不在队列中当前正在验证。该对象在验证时被借用由于配置了testOnBorrow//所以将其从队列中删除并预先分配。一旦验证完成就应该分配它。VALIDATION_PREALLOCATED,//不在队列中当前正在验证。在之前测试是否将该对象从队列中移除时曾尝试借用该对象。//一旦验证完成它应该被返回到队列的头部。VALIDATION_RETURN_TO_HEAD,//无效状态(如驱逐测试或验证)并将/已被销毁INVALID,//判定为无效,将会被设置为废弃ABANDONED,//正在使用完毕,返回池中RETURNING }流程理解 此段原文自 https://www.cnblogs.com/haixiang/p/14783955.html 对象存储 private PooledObjectT create() throws Exception {.....final PooledObjectT p;try {p factory.makeObject();.....allObjects.put(new IdentityWrapper(p.getObject()), p);return p;}我们查看allObjects所有对象都存储于ConcurrentHashMap除了被杀掉的对象 /** All of the objects currently associated with this pool in any state. It* excludes objects that have been destroyed. The size of* {link #allObjects} will always be less than or equal to {link* #_maxActive}. Map keys are pooled objects, values are the PooledObject* wrappers used internally by the pool.*/ private final MapIdentityWrapperT, PooledObjectT allObjects new ConcurrentHashMap();对象取用逻辑 首先根据AbandonedConfig配置判断是否取用对象前执行清理操作再从idleObject中尝试获取对象获取不到就创建新的对象 判断blockWhenExhausted是否设置为true是的话按照设置的borrowMaxWaitMillis属性等待可用对象(这个配置的意思是当对象池的active状态的对象数量已经达到最大值maxinum时是否进行阻塞直到有空闲对象) 有可用对象后调用工厂的factory.activateObject方法激活对象当getTestOnBorrow设置为true时调用factory.validateObject(p)对对象进行校验通过校验后执行下一步调用updateStatsBorrow方法在对象被成功借出后更新一些统计项例如返回对象池的对象个数等 //.... private final LinkedBlockingDequePooledObjectT idleObjects; //.... public T borrowObject(final long borrowMaxWaitMillis) throws Exception {assertOpen();final AbandonedConfig ac this.abandonedConfig;if (ac ! null ac.getRemoveAbandonedOnBorrow() (getNumIdle() 2) (getNumActive() getMaxTotal() - 3) ) {removeAbandoned(ac);}PooledObjectT p null;// Get local copy of current config so it is consistent for entire// method executionfinal boolean blockWhenExhausted getBlockWhenExhausted();boolean create;final long waitTime System.currentTimeMillis();while (p null) {create false;p idleObjects.pollFirst();if (p null) {p create();if (p ! null) {create true;}}if (blockWhenExhausted) {if (p null) {if (borrowMaxWaitMillis 0) {p idleObjects.takeFirst();} else {p idleObjects.pollFirst(borrowMaxWaitMillis,TimeUnit.MILLISECONDS);}}if (p null) {throw new NoSuchElementException(Timeout waiting for idle object);}} else {if (p null) {throw new NoSuchElementException(Pool exhausted);}}if (!p.allocate()) {p null;}if (p ! null) {try {factory.activateObject(p);} catch (final Exception e) {try {destroy(p, DestroyMode.NORMAL);} catch (final Exception e1) {// Ignore - activation failure is more important}p null;if (create) {final NoSuchElementException nsee new NoSuchElementException(Unable to activate object);nsee.initCause(e);throw nsee;}}if (p ! null getTestOnBorrow()) {boolean validate false;Throwable validationThrowable null;try {validate factory.validateObject(p);} catch (final Throwable t) {PoolUtils.checkRethrow(t);validationThrowable t;}if (!validate) {try {destroy(p, DestroyMode.NORMAL);destroyedByBorrowValidationCount.incrementAndGet();} catch (final Exception e) {// Ignore - validation failure is more important}p null;if (create) {final NoSuchElementException nsee new NoSuchElementException(Unable to validate object);nsee.initCause(validationThrowable);throw nsee;}}}}}updateStatsBorrow(p, System.currentTimeMillis() - waitTime);return p.getObject();}对象的激活和钝化 在对象使用完被返回对象池时如果校验失败直接销毁如果校验通过需要先钝化对象passivateObject(PooledObjectT p)再存入空闲队列。至于激活对象的方法activateObject(PooledObjectT p)在上述取用对象时也会先激活再被取出。因此我们可以发现处于空闲和使用中的对象他们除了状态不一致我们也可以通过激活和钝化的方式在他们之间增加新的差异 例如我们要做一个Elasticsearch连接池每个对象就是一个带有ip和端口的连接实例很显然访问es集群是多个不同的ip所以每次访问的ip不一定相同我们则可以在激活操作为对象赋值ip和端口钝化操作中将ip和端口归为默认值或者空这样流程更为标准 对象回收机制 EvictionTimer为回收对象的定时器当且仅当设置了timeBetweenEvictionRunsMillis参数后才会开启定时清理任务 对象状态为evict直接调用destroy进行回收。否则会进行进一步地处理逻辑如下 尝试激活对象如果激活失败则认为对象已经不再存活直接调用destroy进行销毁在激活对象成功的情况下会通过validateObject方法取校验对象状态如果校验失败则说明对象不可用需要进行销毁 // org.apache.commons.pool2.impl.GenericObjectPool#evict if (evict) {destroy(underTest);destroyedByEvictorCount.incrementAndGet(); } else {if (testWhileIdle) {boolean active false;try {factory.activateObject(underTest);active true;} catch (Exception e) {destroy(underTest);destroyedByEvictorCount.incrementAndGet();}if (active) {if (!factory.validateObject(underTest)) {destroy(underTest);destroyedByEvictorCount.incrementAndGet();} else {try {factory.passivateObject(underTest);} catch (Exception e) {destroy(underTest);destroyedByEvictorCount.incrementAndGet();}}}}if (!underTest.endEvictionTest(idleObjects)) {// TODO - May need to add code here once additional// states are used} }常用参数详解 参数类型默认值描述lifobooleantrue当去获取对象池中的空闲实例时是否需要遵循后进先出的原则fairnessbooleanfalse当对象池处于exhausted状态即可用实例为空时大量线程在同时阻塞等待获取可用的实例fairness配置来控制是否启用公平锁算法即先到先得。这一项的前提是blockWhenExhausted配置为truemaxTotalint8对象池中最大使用数量maxIdleint8对象中空闲对象最大数量minIdleint0对象池中空闲对象最小数量maxWaitMillislong-1最大阻塞时间当对象池处于exhausted状态即可用实例为空时大量线程在同时阻塞等待获取可用的实例如果阻塞时间超过了maxWaitMillis将会抛出异常testOnCreatebooleanfalse创建对象前是否校验该新对象的有效性testOnBorrowbooleanfalse取用对象前是否检验对象的有效性testOnReturnbooleanfalse归还对象前是否检验对象的有效性testWhileIdlebooleanfalse当回收器在扫描空闲对象时是否校验对象的有效性numTestsPerEvictionRunint3根据该值x可以推导出一个数值n标识回收过程需要检查多少个空闲对象。如果x0那么nx。如果x0那么n空闲对象数量/x的绝对值向上取整假设空闲对象一共有10个该值配置为-3那么就意味着这次回收需要检查4个空闲对象timeBetweenEvictionRunsMillislong-1回收器线程多久执行一次空闲对象回收softMinEvictableIdleTimeMillislong-1软回收时间阈值一个对象如果空闲时间超过了该值毫秒并且空闲对象的数量已经大于了minIdle时就可以被回收器回收minEvictableIdleTimeMillislong1000L * 60L * 30L硬回收时间阈值一个对象如果空闲时间超过了该值即使空闲对象的数量已经小于minIdle了一样也会被回收器回收 假如在某个高负载的系统里对象频繁被借出、被归还。此时推荐对象池配置为 testOnBorrow、testOnReturn都设置为false提升性能timeBetweenEvictionRunsMillis设置为60000一分钟进行一次空闲对象的回收检查numTestsPerEvictionRun设置为-1检查所有空闲对象minEvictableIdleTimeMillis设置为180000空闲超过3分钟的可以被回收testWhileIdle设置为true不管空闲时间是否超时每个空闲对象都检查下有效性无效的一样被回收 通过异步的回收器来尽可能的保证空闲对象的有效性减少同步调用时有效性检查导致的响应延迟、以及有效性检查对底层带来的访问压力 总结 Apache Commons Pool2是一个用于对象池化的Java库它提供了一种管理和重用对象实例的机制旨在改善应用程序的性能和资源利用率。下面是对Apache Commons Pool2的总结 对象池化Apache Commons Pool2允许您创建和管理一个对象池该对象池中保存着可重用的对象实例。通过将对象保存在池中而不是频繁地创建和销毁对象可以减少系统开销提高性能。对象生命周期管理Pool2提供了生命周期管理功能允许您定义在对象从池中借出和归还时的初始化和清理操作。这确保了从池中借出的对象始终处于一种可用状态。池化策略Pool2支持多种池化策略如通用对象池、软引用对象池和弱引用对象池。您可以根据应用程序的需求选择适合的策略。线程安全Pool2是线程安全的它提供了同步机制来处理多个线程同时访问池的情况确保对象的正确分配和归还。配置灵活Pool2允许您通过配置文件或编程方式来配置对象池的各种属性如最大池大小、最小空闲对象数、池中对象的最大空闲时间等。这使得您可以根据应用程序的需求进行优化和调整。连接池和资源池Pool2不仅适用于对象池还可用于连接池和其他资源的池化管理。这使得它在处理数据库连接、线程池等资源时非常有用。 总的来说Apache Commons Pool2是一个功能强大且灵活的对象池化库可帮助您管理和重用对象实例提高应用程序的性能和资源利用率。无论是在Web应用程序、并发编程还是资源管理方面Pool2都是一个可靠的选择 参考资料 Apache Commons Poolcommons-pool2 池化技术探究对象池apache common pool2原理与实战

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/931107.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

wap建站模板网站qq访客 原理

与Cookie不同,会话数据存储在服务器上。会话是客户端登录到服务器并注销的时间间隔。需要在此会话中进行的数据存储在服务器上的临时目录中。 与每个客户端的会话分配一个会话ID。会话数据存储在cookie顶部,服务器以加密方式签名。对于这种加密&#xf…

电子商务网站建设是学什么酒泉地网站推广

rk3568 适配以太网——RTL8211 千兆以太网(Gigabit Ethernet)的传输速度为1 Gbps(千兆位每秒),而百兆以太网(Fast Ethernet)的传输速度为100 Mbps(百兆位每秒)。因此,在相同的网络条件下,千兆网可以提供更高的数据传输速率,比百兆网快10倍。千兆网的更高传输速度使…

有一个专门做演讲的网站会讯通2022官方下载

1.备份和还原vSphere Distributed Switch配置 1.1导出 vSphere Distributed Switch 配置 可以将 vSphere Distributed Switch 和分布式端口组配置导出到某一文件。该文件保留有效的网络配置,使这些配置能够传输至其他环境。 步骤: 1) 在 vSphere Web Cli…

佛山网站建设公司88电子商务网站建设运营

文章目录 一、简介二、基本概念三、装饰模式的结构和实现类图解析:装饰器的实现方式继承实现:组合实现:继承和组合对比 四、装饰模式的应用场景五、与其他模式的关系六、总结 一、简介 装饰模式是一种结构型设计模式,它允许动态地…

用dw做的网站怎么上线iis7部署网站

声明&#xff1a;以下这函数&#xff0c;使用场景再lambda表达式中使用 std::weak_ptr<websockets_session> weak_self() { return std::weak_ptr<websockets_session>(shared_from_this()); }

网站开发培训深圳网站设计包括哪些内容

背景 性能诊断是软件工程师在日常工作中需要经常面对和解决的问题&#xff0c;在用户体验至上的今天&#xff0c;解决好应用的性能问题能带来非常大的收益。Java 作为最流行的编程语言之一&#xff0c;其应用性能诊断一直受到业界广泛关注。可能造成 Java 应用出现性能问题的因…

北京移动端网站设计二建证书查询官网入口

编写equals()和hashCode()方法需要遵循以下原则&#xff1a; 1. equals()方法&#xff1a; - 使用instanceof关键字检查传入的对象是否为当前类的实例。 - 检查传入的对象是否为null。 - 检查传入的对象的类型是否与当前对象的类型相同。 - 比较对象的属性是否相等&#x…

电子商务网站建设 项目规划书网站优化种类

目录 一.虚拟机准备 二.基础环境配置&#xff08;各个节点都做&#xff09; 1.IP和hosts解析 2.防火墙和selinux 3.安装基本软件 4.配置时间同步 5.禁用swap分区 6.修改内核参数并重载 7.配置ipvs 三.docker环境&#xff08;各个节点都做&#xff09; 1.配置软件源并…

做资源网站怎么不封网架加工制造厂家

问题陈述&#xff1a; Fibonacci为1200年代的欧洲数学家&#xff0c;在他的著作中曾经提到&#xff1a;若有一只兔子每个月生一只小兔子&#xff0c;一个月后小兔子也开始生产。起始只有一只兔子&#xff0c;一个月后就有两只兔子&#xff0c;二个月后有三只兔子&#xff0c;三…

个人简介网站html代码深圳社保个人网页

三种情形&#xff1a; 1.执行SP时出错&#xff0c;如连接异常&#xff0c;数据库权限异常 2.SP代码中抛出异常 3.返回值/输出参数的值不符合约定 后两种情形需要在异常发生时记录传入SP的参数值&#xff1b;业务逻辑层需要捕获并重抛&#xff0c;以保证UI层提供给用户友好的错误…

网站建设与管理专业实训室辽宁建设工程信息网招标公呿

1、用定积分奇函数和偶函数的性质 2、用常用的基本不等式推出大小 3、用区间相同的情况下被积函数大的定积分大的定理

无锡那家网络公司做网站好深圳网站建设工作

C语言知识点第1章C语言知识点总结(二) 第八节 字符字符常量定义&#xff1a;一对单引号括起来的一个字符。如‘A’、‘a’、‘9’相应字符对应的ASCII编码值(见附录四)字符常量占用一个字节的存储单元(一个字节占8位)重点&#xff1a;表 C语言中常见的转义字符字符形式意义字符…

怎样让网站做301处理为什么访问外国网站速度慢

本文仅供学习使用&#xff0c;总结很多本现有讲述运动学或动力学书籍后的总结&#xff0c;从矢量的角度进行分析&#xff0c;方法比较传统&#xff0c;但更易理解&#xff0c;并且现有的看似抽象方法&#xff0c;两者本质上并无不同。 2024年底本人学位论文发表后方可摘抄 若有…

白箱算力与AI元人文:一场从“求解”到“创造”的范式革命

白箱算力与AI元人文:一场从“求解”到“创造”的范式革命 我们正站在智能演进的历史断层上。一侧,是算力规模指数级增长的“黑箱”帝国,它以其惊人的效率令我们叹服,却又因其决策的不可知性让我们深感不安;另一侧…

app开发网站建设公司哪家好海阳网站制作

322. 零钱兑换 题目&#xff1a; 给一个不同数额硬币的数组和一个目标金额&#xff0c;硬币可取无限次&#xff0c;求用硬币达到总金额的最小硬币数量。&#xff08;求不同组合数/排列数&#xff0c;但是硬币数量最小&#xff09; 思路&#xff1a; 求硬币数量最小&#x…

重庆企业网站制作外包微信官方微网站吗

页面渲染的全过程输入url后&#xff0c;先拿到html文件&#xff0c;html下载完以后会开始对它进行解析html在解析的过程中&#xff0c;如果文本里有外部资源链接&#xff0c;比如css、js和img时&#xff0c;会立即启用其他线程下载这些静态资源。特殊的是当遇到js文件的时候&am…

正规网站建设的公司香精香料网

1. 独立看门狗IWDG介绍&#xff08;341.45&#xff09; 什么是看门狗&#xff1f; 在由单片机构成的微型计算机系统中&#xff0c;由于单片机的工作常常会受到来自外界电磁场的干扰&#xff0c;造成程序的跑飞&#xff0c;而陷入死循环&#xff0c;程序的正常运行被打断&#…

做IT的需要别人打开网站吗文化传播有限公司注册条件

来记录一下做一个springboot项目以及上传至云服务器上过程新建并发布项目注册域名&#xff1a;域名备案发现的问题&#xff1a;在阿里云上面搞了一台个人服务器&#xff0c;当时是双十一打折买的&#xff0c;229好像。有了服务器当然要干点什么&#xff0c;于是做了个springboo…

商城微网站开发微网站wordpress 换域名 403

互联网给人带来便捷的同时&#xff0c;其公开大量的资源也同样给恶意利用者带了便捷&#xff0c;越来越多公开的恶意程序源码降低了对外攻击、入侵的难度&#xff0c;使得安全问题愈加严重。 阿里云安全团队从今年5月份监测到一BOT家族&#xff0c;其样本改写自互联网公开渠道…