8182743: Ineffective use of volatile hurts performance of Charset.atBugLevel()
Reviewed-by: clanger, redestad, plevart, coffeys
This commit is contained in:
parent
7b258a7561
commit
43fc1b68a2
@ -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 @@ public abstract class Charset$Coder$ {
|
||||
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$;
|
||||
|
@ -281,19 +281,6 @@ public abstract class Charset
|
||||
|
||||
/* -- 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 @@ public abstract class Charset
|
||||
*/
|
||||
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++) {
|
||||
|
@ -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 @@ import java.nio.charset.*;
|
||||
|
||||
public class EmptyCharsetName {
|
||||
|
||||
static boolean compat;
|
||||
|
||||
static abstract class Test {
|
||||
|
||||
public abstract void go() throws Exception;
|
||||
@ -48,13 +42,6 @@ public class EmptyCharsetName {
|
||||
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 @@ public class EmptyCharsetName {
|
||||
+ 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("");
|
||||
|
@ -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 @@ import java.nio.charset.*;
|
||||
|
||||
public class AverageMax {
|
||||
|
||||
static boolean compat;
|
||||
|
||||
static abstract class Test {
|
||||
|
||||
public abstract void go() throws Exception;
|
||||
@ -46,9 +40,6 @@ public class AverageMax {
|
||||
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 @@ public class AverageMax {
|
||||
+ 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() {
|
||||
|
Loading…
x
Reference in New Issue
Block a user