JDK 23 |
---|
23 b25Fixed |
Blocks :
|
|
Blocks :
|
|
Relates :
|
|
Relates :
|
SATBMarkQueue::should_enqueue_buffer calls filter() to eliminate entries that don't need to be marked, and returns true if the number of remaining entries is above the threshold specified by G1SATBBufferEnqueueingThresholdPercent. The documentation for G1SATBBufferEnqueueingThresholdPercent says "A value of 0 specifies that mutator threads should not do such filtering." There used to be a comment in should_enqueue_buffer that filtering was necessary even when that option was zero, to guarantee all entries in a completed buffer required marking. However, with the relaxation of constraints on the content of completed SATB buffers in order to accomodate eager reclaim of humongous objects, that guarantee is no longer necessary or even met. Because of that change of requirements, the filtering could now be skipped if G1SATBBufferEnqueueingThresholdPercent == 0, e.g. when enqueuing will always occur. The benefit would be that instead of filtering out uninteresting elements in the mutator thread, it can be left to the filtering that is going to occur anyway in the CMTask thread. The downside would be that the mutator thread queue is completed more often, and the transfer to the completed set has some overhead and may increase contention with other threads manipulating the completed set. The intent of the documented behavior is presumably to permit that tradeoff to be made. We should follow the documentation and enable that choice. Update: [~kbarrett]'s comment below indicates that filtering is required, so the CR has been changed to just update the documentation, removing that remark about that a zero value should disable filtering.
|