netty Recycler真的有意义吗? 如何能直观的感受?
netty 重用对象真的有意义吗?new关键字真的这么吃性能吗? Recycler这个类到底有没有意义,如何直观的感受到?
回答:
只要不是构造函数里有大量耗时操作(其实真有这玩意儿的话也不应该放到构造函数里,应该通过工厂模式等设计模式去实现),那 ObjectPool 对运行性能确实没有太大提升,但它的主要目的也不是这个,而是在堆上有大量小对象的场景下提升GC 性能(注意加粗的部分,堆上、大量、小对象,这都是很关键的定语)。
而且 ObjectPool(对象池)这玩意儿也不是 Netty 才有的,Apache 大礼包下是有 commons-pool(即 org.apache.commons.pool
)这个库的。只不过 Netty 为了轻装上阵、减少依赖,所以自己搞了一套。
其他很多语言也有类似的概念,比如 C#/.NET 标准库自带的 Microsoft.Extensions.ObjectPool
;Android 开发中 NDK 带的 androidx.core.util.Pools
;Golang 标准库提供的 sync.pool
;等等等等。
你会发现这些语言都是带 GC 的。而不带 GC 的语言一般标准库里就不会提供这玩意儿,但面向对象的话一般都会有 Object Pool Pattern(对象池设计模式),这也是个比较常见的设计模式,但一般都是会指线程池、数据库连接池这些(OOP 里万物皆对象);但我们在 Java 里谈及对象池,一般不是指这些,而就是指前面我说的。
想看性能评测,网上有很多别人做好的,你可以自行搜索 “Java ObjectPool Benchmark” 关键字来获取相关信息。
以上是 netty Recycler真的有意义吗? 如何能直观的感受? 的全部内容, 来源链接: utcz.com/p/944124.html