mirror of
https://github.com/openjdk/jdk.git
synced 2025-08-27 23:04:50 +02:00
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
4 changed files with 10 additions and 56 deletions
|
@ -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.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* 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)
|
if (max$ItypesPerOtype$ <= 0.0f)
|
||||||
throw new IllegalArgumentException("Non-positive "
|
throw new IllegalArgumentException("Non-positive "
|
||||||
+ "max$ItypesPerOtype$");
|
+ "max$ItypesPerOtype$");
|
||||||
if (!Charset.atBugLevel("1.4")) {
|
if (average$ItypesPerOtype$ > max$ItypesPerOtype$)
|
||||||
if (average$ItypesPerOtype$ > max$ItypesPerOtype$)
|
throw new IllegalArgumentException("average$ItypesPerOtype$"
|
||||||
throw new IllegalArgumentException("average$ItypesPerOtype$"
|
+ " exceeds "
|
||||||
+ " exceeds "
|
+ "max$ItypesPerOtype$");
|
||||||
+ "max$ItypesPerOtype$");
|
|
||||||
}
|
|
||||||
this.replacement = replacement;
|
this.replacement = replacement;
|
||||||
this.average$ItypesPerOtype$ = average$ItypesPerOtype$;
|
this.average$ItypesPerOtype$ = average$ItypesPerOtype$;
|
||||||
this.max$ItypesPerOtype$ = max$ItypesPerOtype$;
|
this.max$ItypesPerOtype$ = max$ItypesPerOtype$;
|
||||||
|
|
|
@ -281,19 +281,6 @@ public abstract class Charset
|
||||||
|
|
||||||
/* -- Static methods -- */
|
/* -- 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>
|
* 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) {
|
private static void checkName(String s) {
|
||||||
int n = s.length();
|
int n = s.length();
|
||||||
if (n == 0 && !atBugLevel("1.4")) {
|
if (n == 0) {
|
||||||
throw new IllegalCharsetNameException(s);
|
throw new IllegalCharsetNameException(s);
|
||||||
}
|
}
|
||||||
for (int i = 0; i < n; i++) {
|
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.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -25,10 +25,6 @@
|
||||||
* @bug 4786884
|
* @bug 4786884
|
||||||
* @summary Ensure that passing the empty string to Charset methods and
|
* @summary Ensure that passing the empty string to Charset methods and
|
||||||
* constructors causes an IllegalArgumentException to be thrown
|
* 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.*;
|
import java.io.*;
|
||||||
|
@ -38,8 +34,6 @@ import java.nio.charset.*;
|
||||||
|
|
||||||
public class EmptyCharsetName {
|
public class EmptyCharsetName {
|
||||||
|
|
||||||
static boolean compat;
|
|
||||||
|
|
||||||
static abstract class Test {
|
static abstract class Test {
|
||||||
|
|
||||||
public abstract void go() throws Exception;
|
public abstract void go() throws Exception;
|
||||||
|
@ -48,13 +42,6 @@ public class EmptyCharsetName {
|
||||||
try {
|
try {
|
||||||
go();
|
go();
|
||||||
} catch (Exception x) {
|
} 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) {
|
if (x instanceof IllegalCharsetNameException) {
|
||||||
System.err.println("Thrown as expected: " + x);
|
System.err.println("Thrown as expected: " + x);
|
||||||
return;
|
return;
|
||||||
|
@ -63,18 +50,13 @@ public class EmptyCharsetName {
|
||||||
+ x.getClass().getName(),
|
+ x.getClass().getName(),
|
||||||
x);
|
x);
|
||||||
}
|
}
|
||||||
if (!compat)
|
throw new Exception("No exception thrown");
|
||||||
throw new Exception("No exception thrown");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void main(String[] args) throws Exception {
|
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() {
|
new Test() {
|
||||||
public void go() throws Exception {
|
public void go() throws Exception {
|
||||||
Charset.forName("");
|
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.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -24,10 +24,6 @@
|
||||||
/* @test
|
/* @test
|
||||||
* @bug 4853350
|
* @bug 4853350
|
||||||
* @summary Ensure that averages do not exceed maxima
|
* @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.*;
|
import java.nio.*;
|
||||||
|
@ -36,8 +32,6 @@ import java.nio.charset.*;
|
||||||
|
|
||||||
public class AverageMax {
|
public class AverageMax {
|
||||||
|
|
||||||
static boolean compat;
|
|
||||||
|
|
||||||
static abstract class Test {
|
static abstract class Test {
|
||||||
|
|
||||||
public abstract void go() throws Exception;
|
public abstract void go() throws Exception;
|
||||||
|
@ -46,9 +40,6 @@ public class AverageMax {
|
||||||
try {
|
try {
|
||||||
go();
|
go();
|
||||||
} catch (Exception x) {
|
} catch (Exception x) {
|
||||||
if (compat) {
|
|
||||||
throw new Exception("Exception thrown", x);
|
|
||||||
}
|
|
||||||
if (x instanceof IllegalArgumentException) {
|
if (x instanceof IllegalArgumentException) {
|
||||||
System.err.println("Thrown as expected: " + x);
|
System.err.println("Thrown as expected: " + x);
|
||||||
return;
|
return;
|
||||||
|
@ -57,17 +48,13 @@ public class AverageMax {
|
||||||
+ x.getClass().getName(),
|
+ x.getClass().getName(),
|
||||||
x);
|
x);
|
||||||
}
|
}
|
||||||
if (!compat)
|
throw new Exception("No exception thrown");
|
||||||
throw new Exception("No exception thrown");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void main(String[] args) throws Exception {
|
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");
|
final Charset ascii = Charset.forName("US-ASCII");
|
||||||
|
|
||||||
new Test() {
|
new Test() {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue