8182743: Ineffective use of volatile hurts performance of Charset.atBugLevel()
Reviewed-by: clanger, redestad, plevart, coffeys
Contributed-by: ogatak@jp.ibm.com
--- a/jdk/src/java.base/share/classes/java/nio/charset/Charset-X-Coder.java.template Fri Jun 30 13:28:25 2017 -0400
+++ b/jdk/src/java.base/share/classes/java/nio/charset/Charset-X-Coder.java.template Sat Jul 01 20:35:28 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -195,12 +195,10 @@
if (max$ItypesPerOtype$ <= 0.0f)
throw new IllegalArgumentException("Non-positive "
+ "max$ItypesPerOtype$");
- if (!Charset.atBugLevel("1.4")) {
- if (average$ItypesPerOtype$ > max$ItypesPerOtype$)
- throw new IllegalArgumentException("average$ItypesPerOtype$"
- + " exceeds "
- + "max$ItypesPerOtype$");
- }
+ if (average$ItypesPerOtype$ > max$ItypesPerOtype$)
+ throw new IllegalArgumentException("average$ItypesPerOtype$"
+ + " exceeds "
+ + "max$ItypesPerOtype$");
this.replacement = replacement;
this.average$ItypesPerOtype$ = average$ItypesPerOtype$;
this.max$ItypesPerOtype$ = max$ItypesPerOtype$;
--- a/jdk/src/java.base/share/classes/java/nio/charset/Charset.java Fri Jun 30 13:28:25 2017 -0400
+++ b/jdk/src/java.base/share/classes/java/nio/charset/Charset.java Sat Jul 01 20:35:28 2017 +0200
@@ -281,19 +281,6 @@
/* -- Static methods -- */
- private static volatile String bugLevel;
-
- static boolean atBugLevel(String bl) { // package-private
- String level = bugLevel;
- if (level == null) {
- if (!VM.isBooted())
- return false;
- bugLevel = level = GetPropertyAction
- .privilegedGetProperty("sun.nio.cs.bugLevel", "");
- }
- return level.equals(bl);
- }
-
/**
* Checks that the given string is a legal charset name. </p>
*
@@ -305,7 +292,7 @@
*/
private static void checkName(String s) {
int n = s.length();
- if (n == 0 && !atBugLevel("1.4")) {
+ if (n == 0) {
throw new IllegalCharsetNameException(s);
}
for (int i = 0; i < n; i++) {
--- a/jdk/test/java/nio/charset/Charset/EmptyCharsetName.java Fri Jun 30 13:28:25 2017 -0400
+++ b/jdk/test/java/nio/charset/Charset/EmptyCharsetName.java Sat Jul 01 20:35:28 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -25,10 +25,6 @@
* @bug 4786884
* @summary Ensure that passing the empty string to Charset methods and
* constructors causes an IllegalArgumentException to be thrown
- *
- * @build EmptyCharsetName
- * @run main EmptyCharsetName
- * @run main/othervm -Dsun.nio.cs.bugLevel=1.4 EmptyCharsetName
*/
import java.io.*;
@@ -38,8 +34,6 @@
public class EmptyCharsetName {
- static boolean compat;
-
static abstract class Test {
public abstract void go() throws Exception;
@@ -48,13 +42,6 @@
try {
go();
} catch (Exception x) {
- if (compat) {
- if (x instanceof UnsupportedCharsetException) {
- System.err.println("Thrown as expected: " + x);
- return;
- }
- throw new Exception("Exception thrown", x);
- }
if (x instanceof IllegalCharsetNameException) {
System.err.println("Thrown as expected: " + x);
return;
@@ -63,18 +50,13 @@
+ x.getClass().getName(),
x);
}
- if (!compat)
- throw new Exception("No exception thrown");
+ throw new Exception("No exception thrown");
}
}
public static void main(String[] args) throws Exception {
- // If sun.nio.cs.bugLevel == 1.4 then we want the 1.4 behavior
- String bl = System.getProperty("sun.nio.cs.bugLevel");
- compat = (bl != null && bl.equals("1.4"));
-
new Test() {
public void go() throws Exception {
Charset.forName("");
--- a/jdk/test/java/nio/charset/CharsetDecoder/AverageMax.java Fri Jun 30 13:28:25 2017 -0400
+++ b/jdk/test/java/nio/charset/CharsetDecoder/AverageMax.java Sat Jul 01 20:35:28 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -24,10 +24,6 @@
/* @test
* @bug 4853350
* @summary Ensure that averages do not exceed maxima
- *
- * @build AverageMax
- * @run main AverageMax
- * @run main/othervm -Dsun.nio.cs.bugLevel=1.4 AverageMax
*/
import java.nio.*;
@@ -36,8 +32,6 @@
public class AverageMax {
- static boolean compat;
-
static abstract class Test {
public abstract void go() throws Exception;
@@ -46,9 +40,6 @@
try {
go();
} catch (Exception x) {
- if (compat) {
- throw new Exception("Exception thrown", x);
- }
if (x instanceof IllegalArgumentException) {
System.err.println("Thrown as expected: " + x);
return;
@@ -57,17 +48,13 @@
+ x.getClass().getName(),
x);
}
- if (!compat)
- throw new Exception("No exception thrown");
+ throw new Exception("No exception thrown");
}
}
public static void main(String[] args) throws Exception {
- // If sun.nio.cs.bugLevel == 1.4 then we want the 1.4 behavior
- String bl = System.getProperty("sun.nio.cs.bugLevel");
- compat = (bl != null && bl.equals("1.4"));
final Charset ascii = Charset.forName("US-ASCII");
new Test() {