ICU-23061 LowercaseTransliterator improve scalability by avoiding monitor contention

Current implementation synchronizes the whole lowercase operation, so it is
always single-threaded

Removing the shared state lets us utilize multiple CPU cores
This commit is contained in:
Steven Schlansker 2025-02-25 10:23:29 -08:00
parent d0e30acc68
commit 12fea708b7

View file

@ -42,8 +42,6 @@ class LowercaseTransliterator extends Transliterator{
private final ULocale locale;
private final UCaseProps csp;
private ReplaceableContextIterator iter;
private StringBuilder result;
private int caseLocale;
/**
@ -54,8 +52,6 @@ class LowercaseTransliterator extends Transliterator{
super(_ID, null);
locale = loc;
csp=UCaseProps.INSTANCE;
iter=new ReplaceableContextIterator();
result = new StringBuilder();
caseLocale = UCaseProps.getCaseLocale(locale);
}
@ -63,7 +59,7 @@ class LowercaseTransliterator extends Transliterator{
* Implements {@link Transliterator#handleTransliterate}.
*/
@Override
protected synchronized void handleTransliterate(Replaceable text,
protected void handleTransliterate(Replaceable text,
Position offsets, boolean isIncremental) {
if(csp==null) {
return;
@ -73,8 +69,10 @@ class LowercaseTransliterator extends Transliterator{
return;
}
ReplaceableContextIterator iter = new ReplaceableContextIterator();
StringBuilder result = new StringBuilder();
iter.setText(text);
result.setLength(0);
int c, delta;
// Walk through original string