Thanks for reviewing Miguel, and yes - that was a small needle and a
big haystack. :)

Miguel Figueiredo wrote:
 Since we are in Java, the default behaviour of the == operator is memory
address comparison. Seems that it's possible to overload operators for any
object, but in the String class the '==' is not overloaded.
 It's strange how the committer let this go through, but he was right on the
performance statement: it's faster to compare 2 string addresses than the
actual content of the strings : )
 I would say it's safe to revert.

It's actually not as bad as missing an '==' overload - in the Slide
class PropertyName, all the String objects are interned in the
constructor.

The Java specification states that two interned strings a and b are
guaranteed to give a==b true when a.equals(b) is true.

So in theory it should work...
See also:
http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html#intern()
and:
http://www.javaworld.com/javaworld/javaqa/2003-12/01-qa-1212-intern.html

My suspicion is that the background thread used for refreshing nodes in
JNDIPrincipalStore (JNDIPrincipalStore$RefreshThread) is the culprit,
and that the above statement for .intern() Strings is no longer true if
running under multithreaded conditions in the JRE?

It would be happy to get some clues as how to prove this, the only thing
I could do in the end was to see that two PropertyName objects with the
same namespace and name but different object references were not
considered equal with "==" comparision.

Anyhow, before someone can explain exactly why it happens I think that
reverting the checkin is OK as long as the measured performance
improvement was not a considerable amount. Also, I think that it is more
safe to first have correct behaviour under all JRE conditions and then
work on improving the PropertyName performance.

Regards,
 Martin


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to