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

Mike Duigou 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).

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