On Tue, 8 Apr 2025 18:39:30 GMT, kabutz <d...@openjdk.org> wrote:

> In the JavaDoc of LinkedBlockingDeque, it states: "Linked nodes are 
> dynamically created upon each insertion unless this would bring the deque 
> above capacity." However, in the current implementation, nodes are always 
> created, even if the deque is full. This is because count is non-volatile, 
> and we only check inside the linkFirst/Last() methods whether the queue is 
> full. At this point we have already locked and have created the Node. 
> Instead, the count could be volatile, and we could check before locking.
> 
> In the current version, calling offer() on a full LinkedBlockingDeque creates 
> unnecessary objects and contention. Similarly for poll() and peek(), we could 
> exit prior to locking by checking the count field.
> 
> Our suggestion is to make count volatile, and then exiting early from poll() 
> and offer()

These changes have been included in https://github.com/openjdk/jdk/pull/24925

-------------

PR Comment: https://git.openjdk.org/jdk/pull/24521#issuecomment-2876408149

Reply via email to