Éamonn
On 23 February 2012 10:52, Olivier Lagneau
<olivier.lagn...@oracle.com <mailto:olivier.lagn...@oracle.com>> wrote:
Hi Frederic,
Performance and typo comments.
Regarding performance of ObjectName.equals method, which is
certainely
a frequent call on ObjectNames, I think that using inner fields
(Property array for canonical name and domain length) would be
more efficient
than using String.equals() on these potentially very long strings.
Two differents objectNames may often have the same length with
different key/properties values, and may often be different only
on the last property of the canonical name.
The Property array field ca_array (comparing length and property
contents)
and domain length are good candidates to filter out more efficiently
different objectNames, knowing that String.equals will compare every
single char of the two char arrays.
So for performance purpose, I suggest to filter out different
objectNames
by doing inner comparisons in the following order : length of the
two
canonical names, then domain_length, then ca_array size, then its
content,
and lastly if all of this fails to filter out, then use
String.equals.
_canonicalName = (new String(canonical_chars, 0, prop_index));
Typo : useless parentheses.
Thanks,
Olivier.
-- Olivier Lagneau, olivier.lagn...@oracle.com
<mailto:olivier.lagn...@oracle.com>
Oracle, Grenoble Engineering Center - France
Phone : +33 4 76 18 80 09 <tel:%2B33%204%2076%2018%2080%2009> Fax
: +33 4 76 18 80 23 <tel:%2B33%204%2076%2018%2080%2023>
Frederic Parain said on date 2/23/2012 6:01 PM:
No particular reason. But after thinking more about it,
equals() should be a better choice, clearer code, and
the length check in equals() implementation is likely
to help performance of ObjectName's comparisons as
ObjectNames are often long with a common section at the
beginning.
I've updated the webrev:
http://cr.openjdk.java.net/~fparain/6988220/webrev.01/
<http://cr.openjdk.java.net/%7Efparain/6988220/webrev.01/>
Thanks,
Fred
On 2/23/12 4:58 PM, Vitaly Davidovich wrote:
Hi Frederic,
Just curious - why are you checking string equality via
compareTo()
instead of equals()?
Thanks
Sent from my phone
On Feb 23, 2012 10:37 AM, "Frederic Parain"
<frederic.par...@oracle.com
<mailto:frederic.par...@oracle.com>
<mailto:frederic.par...@oracle.com
<mailto:frederic.par...@oracle.com>>> wrote:
This a simple fix to solve CR 6988220:
http://bugs.sun.com/__bugdatabase/view_bug.do?bug___id=6988220
<http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6988220>
The use of String.intern() in the ObjectName class
prevents
the class the scale well when more than 20K
ObjectNames are
managed. The fix simply removes the use of
String.intern(),
and uses regular String instead. The Object.equals()
method
is modified too to make a regular String comparison. The
complexity of this method now depends on the length of
the ObjectName's canonical name, and is not impacted any
more by the number of ObjectName instances being handled.
The Webrev:
http://cr.openjdk.java.net/~__fparain/6988220/webrev.00/
<http://cr.openjdk.java.net/%7E__fparain/6988220/webrev.00/>
<http://cr.openjdk.java.net/~fparain/6988220/webrev.00/
<http://cr.openjdk.java.net/%7Efparain/6988220/webrev.00/>>
I've tested this fix with the jdk_lang and jdk_management
test suites.
Thanks,
Fred
--
Frederic Parain - Oracle
Grenoble Engineering Center - France
Phone: +33 4 76 18 81 17
<tel:%2B33%204%2076%2018%2081%2017>
<tel:%2B33%204%2076%2018%2081%2017>
Email: frederic.par...@oracle.com
<mailto:frederic.par...@oracle.com>
<mailto:frederic.par...@oracle.com
<mailto:frederic.par...@oracle.com>>