RFR: 8179527: Ineffective use of volatile hurts performance of Charset.atBugLevel()
Kazunori Ogata
OGATAK at jp.ibm.com
Tue Jun 27 05:12:44 UTC 2017
Hi all, please review a change for JDK-8182743.
Bug report: https://bugs.openjdk.java.net/browse/JDK-8182743
Webrev: http://cr.openjdk.java.net/~horii/8179527/webrev.00/
This change removes a "volatile" qualifier of a static variable used by
Charset.atBugLevel() because it does not improve thread-safety of the code
and it hurts performance on PPC (and should be the same in ARM, too).
Removing the "volatile" improved performance by 26% in a POWER8 machine
using following micro benchmark:
------
import java.io.*;
import java.nio.ByteBuffer;
import java.nio.charset.Charset;
import java.util.ArrayList;
class ConvertTest {
static String str;
public static void main(String[] args) {
byte buf[] = { 0x41 };
Charset fromCharset = Charset.forName("iso-8859-1");
long start = System.currentTimeMillis();
for(long i = 0; i < 100000000; i++)
str = new String(buf, 0, 1, fromCharset);
long end = System.currentTimeMillis();
System.out.println("Elapsed: "+(end-start)+" ms");
}
}
------
Regards,
Ogata
More information about the jdk10-dev
mailing list