标签: object-pooling

如何在Java Web应用程序中限制webservice调用

我的要求很容易理解.

我想从我的Java Web应用程序调用Web服务,每分钟限制最多10次Web服务调用.在1分钟后,我可以建立另外10个连接,无论之前的10个webservice调用的状态(已完成或未完成).

有人可以指导我实现这个的方法吗?任何教程或有用的链接?

java throttling tomcat6 object-pooling

7
推荐指数
1
解决办法
9016
查看次数

是否有开源线程安全的C++对象池实现?

我需要创建一个套接字连接池,它将被提供给多个工作线程.是否有一个线程安全的对象池实现,其功能类似于Apache Commons GenericObjectPool

c++ thread-safety object-pooling

6
推荐指数
2
解决办法
3157
查看次数

C或C++中的任何可克隆对象池实现?

这可能看起来很奇怪,但我会尝试将其合理化.我目前广泛使用boost.object_poolshared_ptr一起使用,最近我遇到了一种情况,我需要拍摄当前程序状态的快照,以便进行全尺寸重放/回滚/快进等功能.

所以我不是试图克隆一个对象池在其他地方使用,这显然不会起作用,因为即使我被boost.pool的接口允许这样做(我不是这样),也没有指向块的有效指针在那个新克隆的游泳池里,它只会毫无意义.但我的用例是,如果有重放/回滚需求,我想将其" 粘贴 "回原始池中.

我当然可以手动复制和克隆所有状态,对象和子状态,子对象和子子...然后将它们打包成快照,并希望一切都会正确,但鉴于复杂性,这很容易出错该项目已经有了,并且它要比我直接复制内存慢得多.使用Command模式(或类似物)来实现undo-redo也是不可能的,因为undo-redo机制不是我的意图.

我只是想知道我是否使用顽固的传统C方式从头开始再做项目,而简单的memcpy(snapshot,all_states,size)调用几乎可以完成所有工作.

我还有其他选择吗?是否有任何boost.object_pool实现允许您克隆底层内存区域?在考虑到这种情况的情况下,侵入性地刺激boost.object_pool是一个合理的选择吗?

c++ boost clone pool object-pooling

5
推荐指数
1
解决办法
278
查看次数

Java中具有过期时间的对象池的第三方库

我在一个网络服务服务器上,我有一个内部连接的对象。
初始化这个连接需要很长时间,所以我的想法是使用对象池来重用不同请求之间的连接。

对象连接到每个用户,所以我更喜欢使用用户名作为键和连接作为值。但我不想永远打开连接。也许一段时间后,如果用户不再开始请求,它应该被销毁。

我想过使用apache 对象池,但我没有在那里看到过期(如果我错了,请纠正我)

ehcache 为我提供有关驱逐和到期的通知,但不会在超时结束后触发,仅当再次触及缓存对象时才触发。

有人知道可以为我完成这项工作的库吗?

java object-pooling

5
推荐指数
1
解决办法
2761
查看次数

我应该重用 DatagramPacket 吗?

我正在构建一个基于 UDP 的应用程序,用于接收和发送多个数据包。

我可以为每次发送构建一个新的实例DatagramPacket,或者在应用程序的生命周期中回收一个实例。

  • 重用 a 有什么优点吗DatagramPacket?(例如内存分配)
  • 是否存在任何潜在问题?(例如线程安全)

java udp datagram object-pooling

5
推荐指数
1
解决办法
1608
查看次数

正确使用带有引用类型的ArrayPool <T>

将ArrayPool与引用类型一起使用的正确方法是什么?

我以为它将充满用默认构造函数“更新”的对象。

例如,在下面的代码中,Foobars当您第一次从ArrayPool中租用时,所有的都为null。

2个问题:

  1. 由于返回的对象.Rent最初都是null,因此是否需要先用初始化的对象填充数组池?

  2. 返回租用的物品时,我需要清除每个物品吗?例如,foobar.Name = null; foobar.Place = null等等。

public class Program
{
    public class Foobar {
        public string Name {get;set;}
        public string Place {get;set;}
        public int Index {get;set;}
    }

    public static void Main()
    {
        ArrayPool<Foobar> pool = ArrayPool<Foobar>.Shared;
        var foobars = pool.Rent(5);
        foreach(var foobar in foobars) {
            // prints "true"
            Console.WriteLine($"foobar is null? ans={foobar == null}");
        }       
    }
}
Run Code Online (Sandbox Code Playgroud)

c# object-pooling

5
推荐指数
1
解决办法
150
查看次数

3D无限亚军游戏平台生成给出了例外

情况:我指的是项目的教程,代码中有一个对象池概念.

问题:在我编写生成平台(PlatformManager.cs)脚本之后,我得到一个例外,

InvalidOperationException:由于对象的当前状态,操作无效System.Collections.Generic.Queue`1 [UnityEngine.Transform] .Peek()PlatformManager.Update()(在Assets/Platform/PlatformManager.cs:35)

PlatformManager.cs脚本:

using UnityEngine;
using System.Collections;
using System.Collections.Generic;

public class PlatformManager  : MonoBehaviour {
    public Transform prefab;
    public int numberOfObjects;
    public float recycleOffset;
    public Vector3 startPosition;
    public Vector3 minSize, maxSize,minGap, maxGap;
    public float minY, maxY;
    private Vector3 nextPosition;
    private Queue<Transform> objectQueue;

    void Start () {
        objectQueue = new Queue<Transform>(numberOfObjects);
        for (int i = 0; i < numberOfObjects; i++) {
            objectQueue.Enqueue((Transform)Instantiate(prefab));
        }
        nextPosition = startPosition;
        for (int i = 0; i …
Run Code Online (Sandbox Code Playgroud)

c# infinite-loop unity-game-engine object-pooling

4
推荐指数
1
解决办法
552
查看次数

Java - ThreadLocal 还是并发对象池?

哪种方法更适合访问非线程安全对象

使用ThreadLocal对象:

static final ThreadLocal<NonThreadSafeParser> PARSER_THREAD_LOCAL = new ThreadLocal<NonThreadSafeParser>() {
    @Override
    protected NonThreadSafeParser initialValue() {
        return new NonThreadSafeParser();
    }
};

void parse(String input) {
    PARSER_THREAD_LOCAL.get().parse(input);
}
Run Code Online (Sandbox Code Playgroud)

使用并发对象池

static final ConcurrentObjectPool<NonThreadSafeParser> PARSER_POOL = new ConcurrentObjectPool<>();

void parse(String input) {
    NonThreadSafeParser parser = PARSER_POOL.borrow();
    try {
        parser.parse(input);
    } finally {
        PARSER_POOL.release(parser);
    }
}
Run Code Online (Sandbox Code Playgroud)

或您想提供的其他方法?

重要因素是:

  • 表现
  • 内存使用情况
  • 垃圾收集

一般情况下,有什么优点缺点的每个方法?

它们之间有什么明显的区别吗?

谢谢。

编辑

Kryo使用的并发对象池示例。

java concurrency performance thread-local object-pooling

4
推荐指数
1
解决办法
2442
查看次数

Java - 对象池与新对象实例化的性能

我目前正在尝试为竞赛构建一些代码执行优化,并且正在研究ObjectPool模式以支持对象重用而不是新的对象实例化.

我已经组建了一个小项目(和唯一的测试类)来调查我看到和不理解的一些事情.

我在做什么:

  • 使用new()和Pool.get()操作比较5 000 000次迭代的非常简单对象的创建
  • 玩三个轴,运行和不运行所有测试:
    • 在进行测量之前运行循环一次的"预热"
    • 将新创建的对象分配给局部变量并将其用于某些计算
    • 使用fixed vs random参数作为参数

我得到的结果是: Figures are for new instantiation vs with object pool for 5 000 000 iterations without_warmup_without_new_object_use_with_random_parameters: 417 vs 457 without_warmup_without_new_object_use_with_fixed_parameters: 11 vs 84 without_warmup_with_new_object_use_with_random_parameters: 515 vs 493 without_warmup_with_new_object_use_with_fixed_parameters: 64 vs 90 with_warmup_without_new_object_use_with_random_parameters: 284 vs 419 with_warmup_without_new_object_use_with_fixed_parameters: 8 vs 55 with_warmup_with_new_object_use_with_random_parameters: 410 vs 397 with_warmup_with_new_object_use_with_fixed_parameters: 69 vs 82

我从中注意到了什么:

  • 在实例化新对象而不重用它时,使用固定参数会产生巨大影响.我的猜测是编译器正在进行某种优化并发现没有副作用并且会完全删除对象实例化,但是将perfs与空循环进行比较表明仍然会发生某些事情
  • 使用固定参数对新Object()的速度有显着影响(虽然不太明显),在某些情况下使其比对象池版本更快
  • 对象池在"现实生活"场景中更快(即重用新对象并使用一些随机参数),但在大多数情况下都没有,这也暗示了编译器优化.

我在这里寻找的是理解这些结果,并获得我可以阅读的文档/书籍的指示,以便充分了解在这些情况下幕后发生的事情.

谢谢!

java performance object-pooling

4
推荐指数
1
解决办法
1689
查看次数

Golang 中的池化地图

我很好奇之前是否有人尝试过在 Go 中池化地图?我之前读过有关池化缓冲区的内容,我想知道通过类似的推理,如果必须频繁创建和销毁它们,或者是否有任何原因,先验地认为池化映射可能效率不高,那么池化映射是否有意义。当映射返回到池中时,必须迭代它并删除所有元素,但似乎流行的建议是创建一个新映射,而不是删除已分配的映射中的条目并重用它让我觉得池化地图可能没有那么有益。

hashmap go object-pooling

4
推荐指数
1
解决办法
2943
查看次数