理解池化技术
来源:互联网 发布:巨人网络借壳上市绯闻 编辑:程序博客网 时间:2024/06/10 00:19
- 例子 - 为何要用池
- 策略1一次性使用
- 策略2重复使用
- 策略的选择
- 技术实例
- 对象池
- 对象创建的代价
- 对象池的优势
- 数据库连接池
- 线程池
- 对象池
文章首先通过一个通俗的实例帮助读者理解池化思想,随后说明池化思想在各种技术中的体现。
(欢迎指正)
例子 - 为何要用池?
先举一个简单的使用篮球 例子,我们有多种策略使用篮球,并且使用篮球之后会产生一定的代价,主观上认为我们倾向于将代价最小化。
策略1:(一次性使用)
这是一种比较笨的策略,每次都买一个新的篮球用于使用,使用之后丢掉。于是我们可以得到如下代价公式:
策略2:(重复使用)
在该策略中,认为篮球是可以多次使用的。于是我们可以得到如下公式::
策略的选择
上面列举了两种策略,事实上还有很多其他的策略。
两种策略本身是没有绝对的好坏的,而是视场景而定的。但就现实情况而言(比如,使用次数很多),篮球这个例子中符合如下的规律:
这意味着,复用的总代价 小于 不复用的代价,即复用的策略更适合篮球这个例子。
而策略2反映的就是一种池化的思想,“复用的代价”远远小于“创建的代价”,所以此处通过池化技术增加“复用”、减少“创建”。
PS:有些场景下 “创建的代价”远远小于 “复用的代价”,此时就应该采用策略1的方式了。
技术实例
结合上面提到的主要思想,分别看看在编程中实际用到的一些池技术。
对象池
对象创建的代价
这里我们主要以java为代表,在java中创建对象,主要包括如下几个步骤:
- 根据new 等标识符后面的参数,在常量池查找类的符号引用。
- 如果没找到符号应用(类并未加载),进行类的加载、解析、初始化等。
- 虚拟机根据类,为对象在堆中分配内存,并将分配的内存初始化为0。针对对象头,建立相应的描述结构。(耗时操作:需要查找堆中的空闲区域,修改内存分配状态等)
- 调用对象的初始化方法。(耗时操作:用户的复杂的逻辑验证等操作,如IO、数值计算是否符合规定等等)
对象池的优势
通过对象创建的例子,可看出对象创建是一个复杂的过程,少数的对象的创建并不会影响程序的太多的性能,但是如果达到了数以万计,就应该考虑复用同类对象的分配了。
【通俗理解】只是替换某个已存在对象的状态(填充原对象结构中的变量),复用已存在对象分配的内存(节省了寻找空闲堆区等方面的时间)。
(相当于给内存重新换了身衣服)这里认为,重新创建对象的代价 远远大于 更换已存在对象中相关的状态变量。
数据库连接池
更新中…
线程池
更新中…
阅读全文
0 0
- 理解池化技术
- 容器技术与虚拟化技术理解
- 容器技术与虚拟化技术理解
- 深入理解对象池技术
- 对虚拟化技术的理解
- 对虚拟化技术的理解
- 理解android技术
- 自然语言理解技术
- 深入浅出理解SOA技术
- seo 技术理解
- SAP 技术理解-记录
- Protocol Buffer技术理解
- J2EE技术理解
- traits技术理解
- 面向对象技术理解
- 加密技术 图形理解
- 流水线技术理解
- 深入理解密码技术
- javascript类的创建与实例对象
- javaweb后端实例 service
- ngx_http_realip_module使用详解
- Delphi-日期时间函数
- Android button设置背景色与边框颜色
- 理解池化技术
- matlab存储的矩阵,在C++处理的方法
- JAVA8新特性 -- stream(三)
- 什么是 RPC 框架,web service,wsdl,soap
- 关于存数过程有output参数,SSM框架中获取返回参数的问题
- 重新开始写博客
- 关于Selenuim Webdriver查找可能不存在的页面元素的问题
- js-关于数组的一些事
- ftl页面中判断list长度不成立解决方法