关于ObjectPooling的问题[关闭]

问题描述 投票:1回答:3

我目前正在为游戏开发一个简单的UDP服务器。我已经在ThreadPoolExecutor的帮助下实现了多线程。在阅读如何最大限度地提高性能时,我偶然发现了ObjectPooling。经过一些阅读后,我留下了3个问题:

1)服务器程序是否能够利用ObjectPool?

2)应该汇集哪些“对象”,哪些不应该?

3)如何创建一个简单的ObjectPool?

java server pool object-pooling
3个回答
2
投票

以下是您的问题的答案,

1)服务器程序是否能够利用ObjectPool?

是的,任何对象都可以合并。通常,如果对象创建繁重,则使用对象池。

2)应该汇集哪些“对象”,哪些不应该?

任何对象都可以合并。

3)如何创建一个简单的ObjectPool?

您可以使用apache commons池实现简单池。有关更多信息,请参阅https://commons.apache.org/proper/commons-pool/examples.html

编辑:仅供参考,我们使用apache commons池实现了对象池连接到CORBA客户端。连接到CORBA并创建对象需要花费更多时间,因此我们实现了CORBA客户端池。


2
投票

服务器程序是否能够利用ObjectPool?

这不取决于应用程序的类型。对象池的有用性取决于用例。

应该汇集哪些“对象”,哪些不应该?

通常,要创建的昂贵(在内存或CPU术语中)的对象应该合并(仍然是可见的)。避免汇集任何其他类型,因为池本身就可以变得非常昂贵。

如何创建一个简单的ObjectPool?

别。这是一个复杂的主题。 相反,使用像Apache Commons Pool这样的东西。


我会添加自己的

我应该关心对象池吗?

直到你不使用它来对性能进行基准测试。 池化是一种风险模式,尤其是在多线程环境中。池实现应该提供所需的同步,但是,如果该对象保持状态,那么添加自己的同步也不错。


1
投票

1)服务器程序是否能够利用ObjectPool?

不管应用程序的类型如何,它都取决于用例,特别是当程序的性能是内存和CPU敏感时。

2)应该汇集哪些“对象”,哪些不应该?

IMO,哪些场景使某些类对象的池有用:

  • 当系统一次只需要固定或有限类型(状态)的对象时
  • 当你需要对某个类的最大对象施加上限时
  • 当对象创建是内存和/或CPU密集时,对象可以按原样重用,或者用最少的操作
  • 当对象本身是内存密集型和/或高频率使用时

除上述标准外,不得缓存对象或必须是不可变的

3)如何创建一个简单的ObjectPool?

它完全是一个复杂的主题,但实质上你需要构建一个对象创建者(一种工厂),它应该决定是创建新对象还是返回现有状态所需的变化。

© www.soinside.com 2019 - 2024. All rights reserved.