hg: jdk8/tl/jdk: 6924259: Remove offset and count fields from java.lang.String
mike.duigou at oracle.com
Sun Jun 3 21:35:52 UTC 2012
[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).
> 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