次のクラスがよく使用されるテキスト処理ソフトウェアの最適化に取り組んでいます。
class Sentence {
private final char[] textArray;
private final String textString;
public Sentence(String text) {
this.textArray = text.toCharArray();
this.textString = text;
}
public String getString() {
return textString;
}
public char[] getArray() {
return textArray;
}
}
ご覧のとおり、多少の冗長性があります。textString のバッキング配列は常に textArray と同じですが、両方が格納されています。
textArray フィールドを取り除くことで、このクラスのメモリ フットプリントを削減したいと考えています。
問題が 1 つあります。このクラスはコードベース全体で広く使用されているため、getArray() メソッドを取り除くことができません。私の解決策は、textArray フィールドを取り除き、getArray() メソッドがリフレクションを介して代わりに textSting のバッキング配列を返すようにすることです。
結果は次のようになります。
class Sentence {
private final String textString;
public Sentence(String text) {
this.textString = text;
}
public String getString() {
return textString;
}
public char[] getArray() {
return getBackingArrayUsingReflection(textString);
}
}
実行可能な解決策のように思えますが、文字列のバッキング配列が何らかの理由でプライベートであると思われます。このアプローチの潜在的な問題は何ですか?