hg: jdk8/tl/jdk: 6924259: Remove offset and count fields from java.lang.String (original) (raw)

Jonathan Gibbons jonathan.gibbons at oracle.com
Thu Jun 14 23:00:29 UTC 2012


For the record, javadoc uses substring very heavily, and might be impacted by this change.

-- Jon

On 06/03/2012 02:35 PM, Mike Duigou wrote:

[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.duigou at 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.doherty at 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



More information about the core-libs-dev mailing list