RFR (S) CR 8014966: Add the proper Javadoc to @Contended

roger riggs roger.riggs at oracle.com
Thu May 30 13:54:38 UTC 2013

Hi David,

I understand that but there may exist some set of contention groups that 
be co-located (share a cache line) without causing additional interference
but the Annotation does not have a mechanism to express that.  Given the
restriction on inheritance of @Contended, it is not even possible to 
express it
for known subclasses or related classes.

Since this is still a science project, it will be interesting to see how 
the investigation
proceeds.  It feels like something that isn't really for the main line 
and should be
co-located (repository wise) with the related implementation work.

$.02, Roger

On 5/30/2013 3:40 AM, David Holmes wrote:
> Roger,
> I think you may be misunderstanding the purpose of the contention 
> groups. They are, as the docs state, for defining a set of fields that 
> need isolation from other sets of fields. They are not for defining 
> set of fields which would benefit from co-location.
> David
> On 30/05/2013 4:48 AM, roger riggs wrote:
>> Hi Aleksey,
>> Thanks for the references.  Currently, you are correct, I don't need it.
>> Has it been considered that highly contended field should not be 
>> allocated
>> in the object itself anyway but in some pool or structure better suited
>> to its access characteristics?  A read-only indirection could provide
>> some ability to allocate contended locks elsewhere where they would
>> not disrupt the allocation mechanism.  For example, in a pool
>> of write-only or write-mostly values for the processor/core/thread.
>> Of course, that has an access cost too.
>> But given the credentials of the discussion authors I expect this has 
>> been
>> well vetted and I have not much to offer.
>> Limiting the scope of @contended groups prevents being able to
>> groups fields from different classes/subclasses together that might
>> reasonably share access patterns.
>> The language related to 'intrinsically worthwhile' deserves a caution
>> label.
>> History is full of premature optimizations.  Since it is mentioned that
>> instrumentation is not available to compute the costs of contention
>> in a particular use case, then only macro level performance of the
>> application
>> would be available to judge the effectiveness of a particular @Contended
>> usage.  But the cost in memory is immediate and measurable.
>> Thanks, Roger
>> On 5/29/2013 2:02 PM, Aleksey Shipilev wrote:
>>> Hi Roger,
>>> On 05/29/2013 09:12 PM, roger riggs wrote:
>>>> I'm not sure I quite understand the purpose or semantics of this
>>>> annotation.
>>> That's the early sign you don't need it! :) I'm actually envious.
>>>> Since it is in sun.misc, it may not be so important and is just an
>>>> implementation artifact but does not have enough of a standalone
>>>> description nor connection to the other elements.
>>> See:
>>>    http://openjdk.java.net/jeps/142
>>> https://blogs.oracle.com/dave/entry/java_contented_annotation_to_help
>>> http://mail.openjdk.java.net/pipermail/hotspot-dev/2012-November/007309.html 
>>> ...for more rationale.
>>>> The description of the annotation is an odd mix of hints about the
>>>> usage of fields and specification of required behavior of an
>>>> implementation.
>>> Hm. If there is the issue with the javadoc, I'm failing to see it; 
>>> maybe
>>> because I am exposed to false sharing enough to immediately understand
>>> what @C is about.
>>> Even though this is an internal API, and we just want to specify @C
>>> barely enough to be useful for those who need it, specific examples 
>>> what
>>> is broken with the docs are welcome.
>>>> I would expect an implementation to be able to ignore the annotation
>>>> or perhaps to improve on the performance by utilizing runtime
>>>> available information.  It is more useful to say what the annotation
>>>> does mean than to say what it does not mean.
>>> Yes, hints are by definition ignorable. Should the runtime be able to
>>> figure out the memory contention issues on its own, we will just "noop"
>>> @C, and be done. But, that Holy Grail is not here.
>>>> Contention groups are a useful semantic but to say that a contention
>>>>   group " must be isolated from all other contention groups." is
>>>> something for the implementation to determine.
>>> I guess the valid concern is the use of "must"? Implementations may
>>> choose to protect the grouped fields on their own if it chooses to 
>>> do so.
>> Yep.
>>> -Aleksey.

More information about the core-libs-dev mailing list