Exchanger如何支持无GC的Java?

时间:2013-08-21 14:02:24

标签: java concurrency garbage-collection java.util.concurrent

在阅读java的并发api时,我开始了解Exchanger类。

来自Java文档,

"A synchronization point at which threads can pair and swap elements within pairs. Each thread presents some object on entry to the exchange method, matches with a partner thread, and receives its partner's object on return. An Exchanger may be viewed as a bidirectional form of a SynchronousQueue. Exchangers may be useful in applications such as genetic algorithms and pipeline designs.

我探索并找到以下链接The Exchanger & GC-less Java

它说,

  

“Exchanger类对于在两者之间来回传递数据非常有用   两个线程。例如生产者/消费者。它具有自然的特性   回收用于传递工作和支持的数据结构   无GC以低效的方式分享工作。“

它如何支持 "GC-less sharing of work"

2 个答案:

答案 0 :(得分:1)

从字面上看,它不受支持,它只是设计了你正确使用它的方式。正如您所说,好处将是无GC共享工作。实际上,它只是一种避免垃圾创建的编程技术,如临时对象,交换对象等。exchange方法将始终返回您正在交换的对象。因此,无需运行GC,因为您可以重复使用旧对象进行下一次交换。在其他情况下,如果您不重用返回的对象,则它仍然不能GC-less

答案 1 :(得分:0)

LinkedBlockingQueueArrayBlockingQueue不同,Exchanger不会创建用于保存对象的节点或数组。您必须创建交换机。缺点是,它只能容纳一个对象。