Recycler回收对象是否不推荐不用显式调用recyle()方法
来源:10-10 异线程收割对象

鋒Nic
2018-06-18
问题一:根据Recycler对象池异线程获取对象首先通过ThreadLocal方式获取当前线程的Stack,当前Stack有对象直接从Stack弹出DefaultHandle对象,Stack无对象从当前Stack关联的其他线程WeakOrderQueue回收对象机制来说是不是可以不用显式调用recyle()就能回收对象?
问题二:Recycler对象池异线程收割对象和异线程回收对象本质是不是就是差不多的,就是把其他线程里的WeakOrderQueue传输到创建对象的线程的Stack?
问题三:另外ratioMask[控制对象回收频率]这个成员变量没太理解有啥作用,dropHandle()方法就是依赖ratioMask达到1/8对象数量的时候就丢弃对象,这样不就导致回收不到后续的对象了吗?
写回答
1回答
-
你好
问题一:如果不调用recyle(),对象是不会被回收的
问题二:可以这么理解,两个操作可以看作是一个相反的过程
问题三:这个问题可以参考这条commit,大体意思就是说如果某一次性分配了很多对象然后回收了,后续再也没有地方会使用到这么多对象,那么那一次Recycler里面回收的很多对象都白白浪费了,因此,使用这个参数来控制回收的频率,并不是所有的对象都会回收。
012018-06-20
相似问题