问题标签 [objectpool]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
12 回答
14179 浏览

java - 如何使 Java 应用程序的内存高效?

您如何优化具有大量(数百万)长寿命对象的应用程序的堆大小使用?(大缓存,从数据库加载大量记录)

  • 使用正确的数据类型
    • 避免使用 java.lang.String 来表示其他数据类型
  • 避免重复的对象
    • 如果预先知道值,则使用枚举
    • 使用对象池
    • String.intern() (好主意?)
  • 仅加载/保留您需要的对象

我正在寻找一般编程或 Java 特定的答案。没有时髦的编译器开关。

编辑:

优化可以在堆中出现数百万次的 POJO 的内存表示。

用例

  • 在内存中加载一个巨大的 csv 文件(转换为 POJO)
  • 使用休眠从数据库中检索数百万条记录

答案简历:

  • 使用享元模式
  • 写入时复制
  • 与加载具有 3 个属性的 10M 对象相比,拥有 3 个大小为 10M 的数组(或其他数据结构)是否更有效?(操作数据可能会很痛苦,但如果你真的内存不足......)
0 投票
1 回答
128 浏览

java - 在 JAR 加载时填充对象池

我有一个核心 JAR,它提供了一些功能,因此也用于许多其他应用程序 - 桌面应用程序、Web 应用程序等。现在这个核心 JAR 维护一个对象池,其中包含创建计算成本高的对象。对象池具有固定大小,因此我一次创建所有对象并填充池。我想要做的是,每当加载使用我的 JAR 的应用程序时,都会在应用程序不知道此类池的详细信息的情况下创建对象池。而且即使应用程序加载时间会因为池的数量而受到影响,但是一旦应用程序超过了这个阶段,以后在创建这样的重对象时就不应该再对性能造成任何影响。

有没有办法做到这一点?

0 投票
3 回答
5892 浏览

c++ - C++ 无锁模板化 ObjectPool

它们存在吗?

*添加以澄清:

是否有任何可用的库实现无锁(它是线程安全的,并且可能实现自旋锁或其他轻量级同步)ObjectPoolhttp://en.wikipedia.org/wiki/Object_pool_pattern使用模板用 C++ 语言编写

0 投票
3 回答
13881 浏览

.net - BlockingCollection(T) 性能

在我的公司有一段时间,我们使用了一种本地ObjectPool<T>实现,它提供了对其内容的阻止访问。它非常简单: a Queue<T>, anobject锁定,以及在AutoResetEvent添加项目时向“借用”线程发出信号。

类的肉真的是这两种方法:

我们一直在使用这个和其他一些集合类,而不是提供的那些,System.Collections.Concurrent因为我们使用的是 .NET 3.5,而不是 4.0。但最近我们发现,由于我们使用的是Reactive Extensions,实际上我们确实可用的Concurrent命名空间(在 System.Threading.dll 中)。

自然地,我认为既然BlockingCollection<T>Concurrent命名空间中的核心类之一,它可能会提供比我或我的队友写的任何东西更好的性能。

所以我尝试编写一个非常简单的新实现:

令我惊讶的是,根据一些简单的测试(从多个线程借/返回池几千次),我们最初的实现在性能方面明显优于BlockingCollection<T>。它们似乎都可以正常工作;只是我们最初的实现似乎要快得多。

我的问题:

  1. 为什么会这样?可能是因为BlockingCollection<T>提供了更大的灵活性(我知道它通过包装一个 来工作IProducerConsumerCollection<T>),这必然会带来性能开销?
  2. 这只是对BlockingCollection<T>课程的完全错误的使用吗?
  3. 如果这是对 的适当使用BlockingCollection<T>,我只是没有正确使用吗?例如,Take/Add方法是否过于简单化,是否有更好的方法来获得相同的功能?

除非有人对第三个问题有一些见解,否则看起来我们现在将坚持我们最初的实现。

0 投票
1 回答
275 浏览

c# - 对象池和 CSLA 框架

我有一个遵循 CSLA 框架中基本方法的应用程序。具体来说,对象知道如何维护它们的状态以及如何创建、更新、删除自己。汽车类显示了这个想法。

该应用程序创建和销毁超过 100 万个对象,并且由于正在进行的垃圾收集量,对象创建的数量正在影响性能。还有很多这些对象是完全暂时的,用于简单地将数据传递到存储库。

我已经阅读了似乎可能适合我需要的享元模式。而且我还阅读了有关对象池和相关代码的信息。

我遇到的问题是使用池创建一百万个 Car 对象,或者结合Object 的原则将 Flyweight 的数据外部化,应该维护它自己的数据和数据访问

关于如何做到这一点的任何想法?

0 投票
2 回答
949 浏览

java - 是否有任何泛型版本的 apache 通用对象池?

在使用apache common pool时,它可以为我提供一个很好的 Java 对象池实现。但是他们的KeyedPoolableObjectFactory接口不是类型安全的。Java中是否有任何对象池库可以为我们提供泛型接口来创建类型安全的对象池?

0 投票
2 回答
145 浏览

design-patterns - 如何防止使用对象池进行构建

我想为我的库使用对象池设计模式,这样用户就不能创建超过预定义数量的对象。
如何强制用户使用 Pool 类来获取实例,而不是资源的构造函数?

我不能将资源构造函数声明为私有,因为这样池类也无法创建实例......

谢谢

0 投票
3 回答
5256 浏览

design-patterns - 享元与对象池模式:每种模式何时有用?

据我所知,对象池是一种创建模式,享元是一种结构模式,但实际上我看不出两者之间有太大区别。有人可以向我解释其中的区别以及每种方法在实现中何时有用吗?

0 投票
3 回答
641 浏览

c# - 对象池:抽象超类还是泛型?

在我的项目中,我想将对象池用于不同类型的对象——具有相似的行为,但池大小不同。

我应该为池和接口创建通用类以应用于创建的对象,还是应该创建具有通用逻辑的抽象池类,然后为我想要使用它的所有不同类创建特定的子类?

0 投票
0 回答
142 浏览

asp.net - 如何在 ASP.Net 中维护对象池?

我的 ASP.Net 应用程序需要调用一个特殊的 DLL,它需要在第一次初始化和加载大量数据。加载所有内容后,可以通过单个函数调用它。

“加载”过程花费了很长时间,所以我必须在 ASP.Net 应用程序启动时加载所有内容,以便在客户端请求快速到达时进行“验证”。有几个 FPScanner 对象包含不同的模板......你能告诉我如何实现这个吗?谢谢。