8182743: Ineffective use of volatile hurts performance of Charset.atBugLevel()
authorclanger
Sat, 01 Jul 2017 20:35:28 +0200
changeset 45718 ba97c984166b
parent 45717 83b617bc344a
child 45719 ecd52ede2685
8182743: Ineffective use of volatile hurts performance of Charset.atBugLevel() Reviewed-by: clanger, redestad, plevart, coffeys Contributed-by: ogatak@jp.ibm.com
jdk/src/java.base/share/classes/java/nio/charset/Charset-X-Coder.java.template
jdk/src/java.base/share/classes/java/nio/charset/Charset.java
jdk/test/java/nio/charset/Charset/EmptyCharsetName.java
jdk/test/java/nio/charset/CharsetDecoder/AverageMax.java
--- 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() {