[I trimmed the distribution list] On Jun 3 2012, at 13:44 , Peter Levart wrote:
> On Thursday, May 31, 2012 03:22:35 AM mike.dui...@oracle.com wrote: >> Changeset: 2c773daa825d >> Author: mduigou >> Date: 2012-05-17 10:06 -0700 >> URL: http://hg.openjdk.java.net/jdk8/tl/jdk/rev/2c773daa825d >> >> 6924259: Remove offset and count fields from java.lang.String >> Summary: Removes the use of shared character array buffers by String along >> with the two fields needed to support the use of shared buffers. > > Wow, that's quite a change. Indeed. It was a long time in development. It is a change which is expected to be overall beneficial though and in the general case a positive win. > So .substring() is not O(1) any more? No. Though with object allocation it probably was only ever roughly O(1) anyway. > Doesn't this have impact on the performance of parsers and such that rely on > the performance caracteristics of the .substring() ? It does have an impact. We've seen as much as a couple of percent on some benchmarks. Parsers which use substring for extraction are definitely impacted by this change. > Have you considered then implementing .subSequence() not in terms of just > delegating to .substring() but returning a special CharSequence view over the > chars of the sub-sequence? It does look that String.subSequence() returning a special view rather than a substring would be a good optimization and probably a very good compromise for parser developers. Please create an issue and if you have the time and expertise a patch would speed things along (though unfortunately almost certainly too late for inclusion in 7u6). Mike > Regards, Peter > >> Reviewed-by: alanb, mduigou, forax, briangoetz >> Contributed-by: brian.dohe...@oracle.com >> >> ! src/share/classes/java/lang/Integer.java >> ! src/share/classes/java/lang/Long.java >> ! src/share/classes/java/lang/String.java >> ! src/share/classes/java/lang/StringCoding.java