mirror of
https://github.com/openjdk/jdk.git
synced 2025-08-28 07:14:30 +02:00
8141132: JEP 254: Compact Strings
Adopt a more space-efficient internal representation for strings. Co-authored-by: Brent Christian <brent.christian@oracle.com> Co-authored-by: Vivek Deshpande <vivek.r.deshpande@intel.com> Co-authored-by: Charlie Hunt <charlie.hunt@oracle.com> Co-authored-by: Vladimir Kozlov <vladimir.kozlov@oracle.com> Co-authored-by: Roger Riggs <roger.riggs@oracle.com> Co-authored-by: Xueming Shen <xueming.shen@oracle.com> Co-authored-by: Aleksey Shipilev <aleksey.shipilev@oracle.com> Co-authored-by: Sandhya Viswanathan <sandhya.viswanathan@intel.com> Reviewed-by: alanb, bdelsart, coleenp, iklam, jiangli, jrose, kevinw, naoto, pliden, roland, smarks, twisti
This commit is contained in:
parent
b7dca6971d
commit
4ed5b73f3d
76 changed files with 8755 additions and 1288 deletions
|
@ -104,7 +104,7 @@ import jdk.internal.HotSpotIntrinsicCandidate;
|
|||
* A cache of the last value returned by toString. Cleared
|
||||
* whenever the StringBuffer is modified.
|
||||
*/
|
||||
private transient char[] toStringCache;
|
||||
private transient String toStringCache;
|
||||
|
||||
/** use serialVersionUID from JDK 1.0.2 for interoperability */
|
||||
static final long serialVersionUID = 3388685877147921107L;
|
||||
|
@ -169,15 +169,13 @@ import jdk.internal.HotSpotIntrinsicCandidate;
|
|||
|
||||
@Override
|
||||
public synchronized int capacity() {
|
||||
return value.length;
|
||||
return super.capacity();
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public synchronized void ensureCapacity(int minimumCapacity) {
|
||||
if (minimumCapacity > value.length) {
|
||||
expandCapacity(minimumCapacity);
|
||||
}
|
||||
super.ensureCapacity(minimumCapacity);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -204,9 +202,7 @@ import jdk.internal.HotSpotIntrinsicCandidate;
|
|||
*/
|
||||
@Override
|
||||
public synchronized char charAt(int index) {
|
||||
if ((index < 0) || (index >= count))
|
||||
throw new StringIndexOutOfBoundsException(index);
|
||||
return value[index];
|
||||
return super.charAt(index);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -261,10 +257,8 @@ import jdk.internal.HotSpotIntrinsicCandidate;
|
|||
*/
|
||||
@Override
|
||||
public synchronized void setCharAt(int index, char ch) {
|
||||
if ((index < 0) || (index >= count))
|
||||
throw new StringIndexOutOfBoundsException(index);
|
||||
toStringCache = null;
|
||||
value[index] = ch;
|
||||
super.setCharAt(index, ch);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -680,9 +674,11 @@ import jdk.internal.HotSpotIntrinsicCandidate;
|
|||
@HotSpotIntrinsicCandidate
|
||||
public synchronized String toString() {
|
||||
if (toStringCache == null) {
|
||||
toStringCache = Arrays.copyOfRange(value, 0, count);
|
||||
return toStringCache =
|
||||
isLatin1() ? StringLatin1.newString(value, 0, count)
|
||||
: StringUTF16.newString(value, 0, count);
|
||||
}
|
||||
return new String(toStringCache, true);
|
||||
return new String(toStringCache);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -710,7 +706,13 @@ import jdk.internal.HotSpotIntrinsicCandidate;
|
|||
private synchronized void writeObject(java.io.ObjectOutputStream s)
|
||||
throws java.io.IOException {
|
||||
java.io.ObjectOutputStream.PutField fields = s.putFields();
|
||||
fields.put("value", value);
|
||||
char[] val = new char[capacity()];
|
||||
if (isLatin1()) {
|
||||
StringLatin1.getChars(value, 0, count, val, 0);
|
||||
} else {
|
||||
StringUTF16.getChars(value, 0, count, val, 0);
|
||||
}
|
||||
fields.put("value", val);
|
||||
fields.put("count", count);
|
||||
fields.put("shared", false);
|
||||
s.writeFields();
|
||||
|
@ -723,7 +725,12 @@ import jdk.internal.HotSpotIntrinsicCandidate;
|
|||
private void readObject(java.io.ObjectInputStream s)
|
||||
throws java.io.IOException, ClassNotFoundException {
|
||||
java.io.ObjectInputStream.GetField fields = s.readFields();
|
||||
value = (char[])fields.get("value", null);
|
||||
char[] val = (char[])fields.get("value", null);
|
||||
initBytes(val, 0, val.length);
|
||||
count = fields.get("count", 0);
|
||||
}
|
||||
|
||||
protected synchronized void getBytes(byte dst[], int dstBegin, byte coder) {
|
||||
super.getBytes(dst, dstBegin, coder);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue