Java 事件总线Guava有一个无界队列

Java 事件总线Guava有一个无界队列,java,events,garbage-collection,guava,Java,Events,Garbage Collection,Guava,我害怕使用事件总线,因为我认为它在内部使用无界队列。如果有很多信息都发到了上面。它可能会遇到完全gc 是否存在一个类似的实现,它执行与无界队列相同的操作?事实上,Guava使用了一个无界队列: 基于链接节点的无限线程安全队列 看 /**当前线程要分派的事件队列*/ 本地私人决赛 事件调度= 新ThreadLocal(){ @覆盖受保护的ConcurrentLinkedQueue初始值(){ 返回新的ConcurrentLinkedQueue(); } }; 您可以随时修改代码以使用,例如。您是

我害怕使用事件总线,因为我认为它在内部使用无界队列。如果有很多信息都发到了上面。它可能会遇到完全gc

是否存在一个类似的实现,它执行与无界队列相同的操作?

事实上,Guava使用了一个无界队列:

基于链接节点的无限线程安全队列

/**当前线程要分派的事件队列*/
本地私人决赛
事件调度=
新ThreadLocal(){
@覆盖受保护的ConcurrentLinkedQueue初始值(){
返回新的ConcurrentLinkedQueue();
}
};
您可以随时修改代码以使用,例如。您是否研究过其他类似的解决方案,例如?

事实上,番石榴使用的是无界的:

基于链接节点的无限线程安全队列

/**当前线程要分派的事件队列*/
本地私人决赛
事件调度=
新ThreadLocal(){
@覆盖受保护的ConcurrentLinkedQueue初始值(){
返回新的ConcurrentLinkedQueue();
}
};

您可以随时修改代码以使用,例如。您是否研究过其他类似的解决方案,例如?

我确实同意Arjit的观点,即在某些情况下,无界队列可能被视为不利的。例如,如果我运行的服务使用来自不同来源的消息来处理它们,而我不知道传入消息的速率。它可能会超过我的工作者/消费者的处理速度,我可能希望建立以下契约:如果仍有许多消息等待处理,则向工作者发布新消息将失败或被阻止。这不仅可以防止内存耗尽,还可以保证消息在一定的时间范围内得到处理。此外,如果服务在其极限运行,客户端将收到直接反馈

@阿吉特:你可以在


它与GoogleGuava事件总线非常相似,但提供了更多的功能——有界消息队列就是其中之一。它的速度也非常快,其内部设计允许大量定制和扩展。据我所知,我能够在短时间内满足其他用户的大部分功能请求。也许你可以试一试。

我同意Arjit的观点,在某些情况下,无界队列可能被认为是不利的。例如,如果我运行的服务使用来自不同来源的消息来处理它们,而我不知道传入消息的速率。它可能会超过我的工作者/消费者的处理速度,我可能希望建立以下契约:如果仍有许多消息等待处理,则向工作者发布新消息将失败或被阻止。这不仅可以防止内存耗尽,还可以保证消息在一定的时间范围内得到处理。此外,如果服务在其极限运行,客户端将收到直接反馈

@阿吉特:你可以在


它与GoogleGuava事件总线非常相似,但提供了更多的功能——有界消息队列就是其中之一。它的速度也非常快,其内部设计允许大量定制和扩展。据我所知,我能够在短时间内满足其他用户的大部分功能请求。也许你试试看。我的问题是,你为什么认为这是个问题?我不认为这会导致任何问题,除非你能在现实中真正地证明这个问题。我的问题是,为什么你认为这是一个问题?我不会假设这会导致任何问题,直到你能在实际中证明这个问题。
/** queues of events for the current thread to dispatch */
private final ThreadLocal<ConcurrentLinkedQueue<EventWithHandler>>
    eventsToDispatch =
    new ThreadLocal<ConcurrentLinkedQueue<EventWithHandler>>() {
  @Override protected ConcurrentLinkedQueue<EventWithHandler> initialValue() {
    return new ConcurrentLinkedQueue<EventWithHandler>();
  }
};