hg: jdk8/tl/jdk: 6924259: Remove offset and count fields from java.lang.String
jonathan.gibbons at oracle.com
Thu Jun 14 16:00:29 PDT 2012
For the record, javadoc uses substring very heavily, and might be
impacted by this change.
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).
>> 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 compiler-dev