标签: object-pooling

在Java中找不到现代的Object Pool实现

我正在寻找Java中的对象池的现代实现.我可以看到apache commons one,但说实话,我宁愿使用泛型,以及来自更新版本java的并发内容.

公共泳池真的运作良好吗?代码看起来很漂亮,呃,丑陋.

我需要一些允许自定义活动验证等的东西.

谢谢!

java multithreading object-pooling

37
推荐指数
3
解决办法
1万
查看次数

什么是Java中的对象池?

什么是对象池以及什么是弱对象引用?

我们如何使用Java实现它们?

java object-pooling

29
推荐指数
4
解决办法
4万
查看次数

是否有.NET的通用对象池?

在时间和记忆方面,我有一个构建成本昂贵的类.我想维护这些东西的池,并在同一过程中根据需要将它们分配给多个线程.

是否存在已经过测试和验证的通用对象池?(我不想要COM +汇集.)

.net c# object-pooling

19
推荐指数
4
解决办法
7914
查看次数

如何在Spring中管理对象池?

据我所知,在Spring中,默认情况下所有对象都被视为单例.如果将singleton设置为false,则将在每个请求中提供新对象.

但是如果我想要聚集对象呢?设置范围从最小1到最多10个实例?这有可能使用Spring吗?

java aop spring spring-mvc object-pooling

14
推荐指数
1
解决办法
1万
查看次数

对象池与动态分配

应该何时更喜欢对象池而不是动态分配的对象?

我需要每秒创建和销毁数千个对象.它本身是否足以决定支持对象池?

谢谢.

c++ memory-management object-pooling

13
推荐指数
4
解决办法
9354
查看次数

Android视图对象重用 - 防止旧视图重新出现时显示

编辑:还有一条可能相关的信息:我看到问题的用例是制表切换.也就是说,我在选项卡A上创建视图X,在离开选项卡A时将其删除,然后将其回收到选项卡B.这就是问题发生的时候.这也正是我需要性能提升的时候...

我正在研究我的Android应用程序的性能.我注意到我可以通过重用我们称之为MyLayout的类的View对象来加快速度.(它实际上是一个自定义的FrameLayout子类,但这可能无关紧要.而且,这与ListView无关.)也就是说,当我完成View时,而不是让GC得到它,我把它放入一个游泳池.当同一活动想要另一个MyLayout对象时,我从池中抓取一个,如果可用的话.这确实加快了应用程序的速度.但是我很难清除旧的尺寸信息.结果是当我抓回View时,事情通常很好,但在某些情况下,新视图会在使用新的大小信息布局之前短暂出现.即使我在将View添加回层次结构之前或之后不久设置了新的LayoutParams,也会发生这种情况(我已尝试过两种方式;但都没有帮助).因此,在尺寸达到正确尺寸之前,用户会看到旧尺寸的短暂(可能是100毫秒)闪光.

我想知道是否/如何解决这个问题.下面,通过C#/ Xamarin,我尝试了一些东西,但没有一个有用:

回收时:

//Get myLayoutParams, then:
myLayoutParams.Width = 0;
myLayoutParams.Height = 0;
this.SetMeasuredDimension(0, 0);
this.RequestLayout();
Run Code Online (Sandbox Code Playgroud)

在返回之前或之后 - 在同一个事件循环中,将布局添加到其新父级:

// a model object has already computed the desired x, y, width, and height
// It's taken into account screen size and the like; the Model's sizes
// are definitely what I want.
FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams (model.width, model.height);
layoutParams.LeftMargin = model.x;
layoutParams.TopMargin = model.y; 
this.LayoutParameters = layoutParams;
Run Code Online (Sandbox Code Playgroud)

我也试过把它带回来,但问题仍然存在:

FrameLayout.LayoutParams layoutParams = . . .  // the same LayoutParams …
Run Code Online (Sandbox Code Playgroud)

c# layout android object-pooling android-layout

12
推荐指数
1
解决办法
384
查看次数

这个基本的Java对象池是否有效?

以下基本对象池是否有效?我有一个更复杂的基于相同的想法(即保持信号量和BlockingQueue).我的问题是 - 我需要Semaphore和BlockingQueue吗?我是对的,我不需要做任何同步吗?

import java.util.Collection;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.Semaphore;

public final class Pool<T> {

    private final BlockingQueue<T> objects;
    private final Semaphore permits;

    public Pool(Collection<? extends T> objects) {
        // we have as many permits as objects in our pool:
        this.permits = new Semaphore(objects.size());
        this.objects = new ArrayBlockingQueue<T>(objects.size(), false, objects);
    }

    public T borrow() {
        this.permits.acquireUninterruptibly();
        // we have a permit, so there must be one in there:
        return this.objects.poll();
    }

    public void giveBack(T object) {
        this.objects.add(object);
        this.permits.release();
    } …
Run Code Online (Sandbox Code Playgroud)

java concurrency object-pooling

9
推荐指数
3
解决办法
1万
查看次数

Java中的通用InternPool <T>?

我如何InternPool<T>用Java 编写泛型?它需要一个Internable界面吗?

String在Java中有实习能力; 我想要像BigDecimal和的实习班Account.

java generics object-pooling

9
推荐指数
3
解决办法
1889
查看次数

是否有任何理由不将对象池视为单例?

我不一定意味着使用单例模式实现,而是仅使用和使用一个池实例.我不喜欢只有一个池(或每个池类型一个)的想法.但是,我无法真正想出任何具有可变类型的多个池的优点的具体情况,至少不是单个池可以正常运行的任何地方.

单个池上有多个池有什么优点?

architecture singleton design-patterns object-pooling

8
推荐指数
1
解决办法
2200
查看次数

Generic ObjectPool - 如何返回泛型类?

我正在尝试开发一个ObjectPool,它可以与任何Object一起使用,而不会改变Pool和Object的来源 - 但我找不到任何方法来编写get() -function("Maincode"获取一些Object来自池)因为存在类型不匹配(无法从Object转换为TestObject)

这是我的代码到目前为止:

ObjectPool的:

public Object get() {
        int first = availableObjects.get(0);
        availableObjects.remove(0);
        return objects.get(first);
    }
Run Code Online (Sandbox Code Playgroud)

对象(ArrayList)中,池中有所有对象,availableObjects 只包含所有可用对象的列表.我基本上只是返回第一个可用对象并将其标记为不可用.

Maincode:

    TestObject test = objectPoolS.get();
Run Code Online (Sandbox Code Playgroud)


如何使get()- Method更通用/特定,以便每次使用不同的类而不在主代码上解析时,它都可以在不调整池的情况下工作?


更新:

使用该池的更通用版本,get()方法将如何正确显示?
(任何其他反馈非常感谢!)
更新:工作(固定)下面的MainCode版本

更新2:
我刚刚意识到它不能像这样工作,我需要在池中创建新的对象 - 如果没有为每种对象调整池,这似乎很难做到.
那么我可以以某种方式删除池中所有对象之间的引用吗?(因为我使用baseObject来初始化所有对象,实际上我只有5个对1个对象的引用)
或者有更好的方法来管理它吗?(不强制用户在其代码中创建对象)

完整代码到目前为止:

ObjectPool的

public class ObjectPoolS<T> {

    int numberOfObjects;
    boolean autoExtending;

    T baseObject;
    ArrayList<T> objects;
    ArrayList<Integer> availableObjects;


    public  ObjectPoolS(T baseObject, int capacity, boolean allowAutoExtending) {
        this.numberOfObjects = capacity;
        this.baseObject = baseObject;
        this.autoExtending = allowAutoExtending;

        objects = …
Run Code Online (Sandbox Code Playgroud)

java generics object-pooling

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