frogspawn
蛙卵
期望:
如青蛙产卵一般,密集产出大量卵,供后续使用
目标:
作为内存对象池,预分配预处理
使用场景
低延迟场合下,用以代替分配大量无状态小对象。防止GC导致的延迟波动。
比如:接口序列化/反序列化时
使用方法
受管理对象需实现一个特定接口 Resettable
public class DemoPojo implements Resettable { |
需要实现一个创建器
public class DemoPojoCreator implements ObjectCreator<DemoPojo> { |
构建对象池
ObjectsMemoryPool<DemoPojo> pojoPool |
使用
|
三种可选模式
目前支持三种不同模式:
必定从池中取
ObjectsMemoryPool<DemoPojo> pojoPool
= ObjectsMemoryPoolFactory.newPool(new DemoPojoCreator(), SINGLE_CAPACITY, MUST_FETCH_IN_POOL);取一定次数后返空
ObjectsMemoryPool<DemoPojo> pojoPool
= ObjectsMemoryPoolFactory.newPool(new DemoPojoCreator(), SINGLE_CAPACITY, FETCH_FAIL_AS_NULL);取一定次数后创建新对象
ObjectsMemoryPool<DemoPojo> pojoPool
= ObjectsMemoryPoolFactory.newPool(new DemoPojoCreator(), SINGLE_CAPACITY, FETCH_FAIL_AS_NEW);或
ObjectsMemoryPool<DemoPojo> pojoPool
= ObjectsMemoryPoolFactory.newPool(new DemoPojoCreator(), SINGLE_CAPACITY);
默认方案为最后一种。
可选参数
-Dfrogspawn.fetch.times
,最大循环取次数,默认值:100-Dfrogspawn.max.capacity
,池最大容量,默认值:67108864,即 65536*1024-Dfrogspawn.cache.capacity
, 线程缓存容量, 默认值: 8,最大值: 64。 设置为1
能获得最大性能。
对比测试
见 对比测试