LinkedBlockingQueue 和原始类型

4
我需要一个LinkedBlockingQueue,但我正在向其中传递原始数据类型。我的添加速率约为4ms或每秒256个数据点。问题在于数据立即开始延迟,但随着时间的推移,JIT使其更加高效,并最终达到实时状态。我试图找出需要减少初始延迟的位置之一是在队列中的每次插入都会自动装箱创建一个Float对象。是否有人使用原始数据类型实现LinkedBlockingQueue?或者在不确定大小且使用原始数据类型时是否有比LinkedBlockingQueue更快的方法?

2
每秒256个数据点似乎非常慢。我怀疑添加/删除队列的时间是否是问题所在 - 更有可能是您生产/消费数据的速率。 - Adamski
你可以复制source code,并将所有通用的E更改为float - ratchet freak
需要的时间大约是1微秒。为了节省这么少的时间,值得付出多少努力呢? - Peter Lawrey
在一台快速的计算机上,大约需要1微秒,我实际上正在将其放在安卓手机上,因此最初大约需要1毫秒,然后最终变成10微秒。 - JPM
为什么要使用阻塞队列?如果使用普通队列,它是否表现更好?据我所知,如果使用原始类型,您的队列将把原始类型装箱到包装器对象中。 - DarthVader
使用LinkedBlockingQueue是因为我正在线程之间传递数据,并希望以FIFO的方式进行。 - JPM
1个回答

1

虽然你的数据并不足够大,不需要更好的数据结构,但Fastutil库正是你所需要的。它提供了快速、低内存占用的集合,并且针对每种Java原始类型都有相应的版本。

虽然它们没有阻塞实现,但你可以扩展它们的类来添加功能。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接