8145680: Remove unnecessary explicit initialization of volatile variables in java.base
Reviewed-by: alanb, chegar, jfranck, shade
--- a/jdk/src/java.base/linux/classes/sun/nio/ch/EPollSelectorImpl.java Wed Jul 05 21:09:59 2017 +0200
+++ b/jdk/src/java.base/linux/classes/sun/nio/ch/EPollSelectorImpl.java Mon Dec 21 20:54:00 2015 +0100
@@ -29,7 +29,6 @@
import java.nio.channels.*;
import java.nio.channels.spi.*;
import java.util.*;
-import sun.misc.*;
/**
* An implementation of Selector for Linux 2.6+ kernels that uses
@@ -50,7 +49,7 @@
private Map<Integer,SelectionKeyImpl> fdToKey;
// True if this Selector has been closed
- private volatile boolean closed = false;
+ private volatile boolean closed;
// Lock for interrupt triggering and clearing
private final Object interruptLock = new Object();
--- a/jdk/src/java.base/share/classes/com/sun/crypto/provider/SunJCE.java Wed Jul 05 21:09:59 2017 +0200
+++ b/jdk/src/java.base/share/classes/com/sun/crypto/provider/SunJCE.java Mon Dec 21 20:54:00 2015 +0100
@@ -93,7 +93,7 @@
// Instance of this provider, so we don't have to call the provider list
// to find ourselves or run the risk of not being in the list.
- private static volatile SunJCE instance = null;
+ private static volatile SunJCE instance;
// lazy initialize SecureRandom to avoid potential recursion if Sun
// provider has not been installed yet
--- a/jdk/src/java.base/share/classes/java/io/PipedInputStream.java Wed Jul 05 21:09:59 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/io/PipedInputStream.java Mon Dec 21 20:54:00 2015 +0100
@@ -48,9 +48,9 @@
* @since 1.0
*/
public class PipedInputStream extends InputStream {
- boolean closedByWriter = false;
- volatile boolean closedByReader = false;
- boolean connected = false;
+ boolean closedByWriter;
+ volatile boolean closedByReader;
+ boolean connected;
/* REMIND: identification of the read and write sides needs to be
more sophisticated. Either using thread groups (but what about
--- a/jdk/src/java.base/share/classes/java/lang/Class.java Wed Jul 05 21:09:59 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/lang/Class.java Mon Dec 21 20:54:00 2015 +0100
@@ -2518,7 +2518,7 @@
// Incremented by the VM on each call to JVM TI RedefineClasses()
// that redefines this class or a superclass.
- private transient volatile int classRedefinedCount = 0;
+ private transient volatile int classRedefinedCount;
// Lazily create and cache ReflectionData
private ReflectionData<T> reflectionData() {
@@ -3331,7 +3331,8 @@
* uncloned, cached, and shared by all callers.
*/
T[] getEnumConstantsShared() {
- if (enumConstants == null) {
+ T[] constants = enumConstants;
+ if (constants == null) {
if (!isEnum()) return null;
try {
final Method values = getMethod("values");
@@ -3344,16 +3345,16 @@
});
@SuppressWarnings("unchecked")
T[] temporaryConstants = (T[])values.invoke(null);
- enumConstants = temporaryConstants;
+ enumConstants = constants = temporaryConstants;
}
// These can happen when users concoct enum-like classes
// that don't comply with the enum spec.
catch (InvocationTargetException | NoSuchMethodException |
IllegalAccessException ex) { return null; }
}
- return enumConstants;
+ return constants;
}
- private transient volatile T[] enumConstants = null;
+ private transient volatile T[] enumConstants;
/**
* Returns a map from simple name to enum constant. This package-private
@@ -3363,19 +3364,21 @@
* created lazily on first use. Typically it won't ever get created.
*/
Map<String, T> enumConstantDirectory() {
- if (enumConstantDirectory == null) {
+ Map<String, T> directory = enumConstantDirectory;
+ if (directory == null) {
T[] universe = getEnumConstantsShared();
if (universe == null)
throw new IllegalArgumentException(
getName() + " is not an enum type");
- Map<String, T> m = new HashMap<>(2 * universe.length);
- for (T constant : universe)
- m.put(((Enum<?>)constant).name(), constant);
- enumConstantDirectory = m;
+ directory = new HashMap<>(2 * universe.length);
+ for (T constant : universe) {
+ directory.put(((Enum<?>)constant).name(), constant);
+ }
+ enumConstantDirectory = directory;
}
- return enumConstantDirectory;
+ return directory;
}
- private transient volatile Map<String, T> enumConstantDirectory = null;
+ private transient volatile Map<String, T> enumConstantDirectory;
/**
* Casts an object to the class or interface represented
--- a/jdk/src/java.base/share/classes/java/lang/System.java Wed Jul 05 21:09:59 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/lang/System.java Mon Dec 21 20:54:00 2015 +0100
@@ -132,7 +132,7 @@
/* The security manager for the system.
*/
- private static volatile SecurityManager security = null;
+ private static volatile SecurityManager security;
/**
* Reassigns the "standard" input stream.
@@ -206,7 +206,7 @@
setErr0(err);
}
- private static volatile Console cons = null;
+ private static volatile Console cons;
/**
* Returns the unique {@link java.io.Console Console} object associated
* with the current Java virtual machine, if any.
@@ -216,12 +216,13 @@
* @since 1.6
*/
public static Console console() {
- if (cons == null) {
+ Console c = cons;
+ if (c == null) {
synchronized (System.class) {
- cons = SharedSecrets.getJavaIOAccess().console();
+ cons = c = SharedSecrets.getJavaIOAccess().console();
}
}
- return cons;
+ return c;
}
/**
--- a/jdk/src/java.base/share/classes/java/lang/Thread.java Wed Jul 05 21:09:59 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/lang/Thread.java Mon Dec 21 20:54:00 2015 +0100
@@ -207,12 +207,10 @@
/* For generating thread ID */
private static long threadSeqNumber;
- /* Java thread status for tools,
- * initialized to indicate thread 'not yet started'
+ /*
+ * Java thread status for tools, default indicates thread 'not yet started'
*/
-
- private volatile int threadStatus = 0;
-
+ private volatile int threadStatus;
private static synchronized long nextThreadID() {
return ++threadSeqNumber;
--- a/jdk/src/java.base/share/classes/java/lang/ref/ReferenceQueue.java Wed Jul 05 21:09:59 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/lang/ref/ReferenceQueue.java Mon Dec 21 20:54:00 2015 +0100
@@ -53,7 +53,7 @@
private static class Lock { };
private Lock lock = new Lock();
- private volatile Reference<? extends T> head = null;
+ private volatile Reference<? extends T> head;
private long queueLength = 0;
boolean enqueue(Reference<? extends T> r) { /* Called only by Reference class */
--- a/jdk/src/java.base/share/classes/java/lang/reflect/Parameter.java Wed Jul 05 21:09:59 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/lang/reflect/Parameter.java Mon Dec 21 20:54:00 2015 +0100
@@ -205,7 +205,7 @@
return tmp;
}
- private transient volatile Type parameterTypeCache = null;
+ private transient volatile Type parameterTypeCache;
/**
* Returns a {@code Class} object that identifies the
@@ -237,7 +237,7 @@
return executable.getAnnotatedParameterTypes()[index];
}
- private transient volatile Class<?> parameterClassCache = null;
+ private transient volatile Class<?> parameterClassCache;
/**
* Returns {@code true} if this parameter is implicitly declared
--- a/jdk/src/java.base/share/classes/java/net/URI.java Wed Jul 05 21:09:59 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/net/URI.java Mon Dec 21 20:54:00 2015 +0100
@@ -33,7 +33,6 @@
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.charset.CharsetDecoder;
-import java.nio.charset.CharsetEncoder;
import java.nio.charset.CoderResult;
import java.nio.charset.CodingErrorAction;
import java.nio.charset.CharacterCodingException;
@@ -495,12 +494,12 @@
private transient volatile String schemeSpecificPart;
private transient volatile int hash; // Zero ==> undefined
- private transient volatile String decodedUserInfo = null;
- private transient volatile String decodedAuthority = null;
- private transient volatile String decodedPath = null;
- private transient volatile String decodedQuery = null;
- private transient volatile String decodedFragment = null;
- private transient volatile String decodedSchemeSpecificPart = null;
+ private transient volatile String decodedUserInfo;
+ private transient volatile String decodedAuthority;
+ private transient volatile String decodedPath;
+ private transient volatile String decodedQuery;
+ private transient volatile String decodedFragment;
+ private transient volatile String decodedSchemeSpecificPart;
/**
* The string form of this URI.
--- a/jdk/src/java.base/share/classes/java/nio/Bits.java Wed Jul 05 21:09:59 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/nio/Bits.java Mon Dec 21 20:54:00 2015 +0100
@@ -25,9 +25,7 @@
package java.nio;
-import java.security.AccessController;
import java.util.concurrent.atomic.AtomicLong;
-import java.util.concurrent.atomic.LongAdder;
import jdk.internal.misc.JavaNioAccess;
import jdk.internal.misc.JavaLangRefAccess;
@@ -603,7 +601,8 @@
private static final AtomicLong reservedMemory = new AtomicLong();
private static final AtomicLong totalCapacity = new AtomicLong();
private static final AtomicLong count = new AtomicLong();
- private static volatile boolean memoryLimitSet = false;
+ private static volatile boolean memoryLimitSet;
+
// max. number of sleeps during try-reserving with exponentially
// increasing delay before throwing OutOfMemoryError:
// 1, 2, 4, 8, 16, 32, 64, 128, 256 (total 511 ms ~ 0.5 s)
--- a/jdk/src/java.base/share/classes/java/nio/channels/SelectionKey.java Wed Jul 05 21:09:59 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/nio/channels/SelectionKey.java Mon Dec 21 20:54:00 2015 +0100
@@ -26,8 +26,6 @@
package java.nio.channels;
import java.util.concurrent.atomic.AtomicReferenceFieldUpdater;
-import java.io.IOException;
-
/**
* A token representing the registration of a {@link SelectableChannel} with a
@@ -363,7 +361,7 @@
// -- Attachments --
- private volatile Object attachment = null;
+ private volatile Object attachment;
private static final AtomicReferenceFieldUpdater<SelectionKey,Object>
attachmentUpdater = AtomicReferenceFieldUpdater.newUpdater(
--- a/jdk/src/java.base/share/classes/java/nio/channels/spi/AbstractInterruptibleChannel.java Wed Jul 05 21:09:59 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/nio/channels/spi/AbstractInterruptibleChannel.java Mon Dec 21 20:54:00 2015 +0100
@@ -29,11 +29,7 @@
package java.nio.channels.spi;
import java.io.IOException;
-import java.lang.reflect.Method;
-import java.lang.reflect.InvocationTargetException;
import java.nio.channels.*;
-import java.security.AccessController;
-import java.security.PrivilegedAction;
import jdk.internal.misc.SharedSecrets;
import sun.nio.ch.Interruptible;
@@ -90,7 +86,7 @@
{
private final Object closeLock = new Object();
- private volatile boolean open = true;
+ private volatile boolean closed;
/**
* Initializes a new instance of this class.
@@ -110,9 +106,9 @@
*/
public final void close() throws IOException {
synchronized (closeLock) {
- if (!open)
+ if (closed)
return;
- open = false;
+ closed = true;
implCloseChannel();
}
}
@@ -136,7 +132,7 @@
protected abstract void implCloseChannel() throws IOException;
public final boolean isOpen() {
- return open;
+ return !closed;
}
@@ -158,9 +154,9 @@
interruptor = new Interruptible() {
public void interrupt(Thread target) {
synchronized (closeLock) {
- if (!open)
+ if (closed)
return;
- open = false;
+ closed = true;
interrupted = target;
try {
AbstractInterruptibleChannel.this.implCloseChannel();
@@ -202,7 +198,7 @@
this.interrupted = null;
throw new ClosedByInterruptException();
}
- if (!completed && !open)
+ if (!completed && closed)
throw new AsynchronousCloseException();
}
--- a/jdk/src/java.base/share/classes/java/nio/charset/Charset.java Wed Jul 05 21:09:59 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/nio/charset/Charset.java Mon Dec 21 20:54:00 2015 +0100
@@ -276,7 +276,7 @@
/* -- Static methods -- */
- private static volatile String bugLevel = null;
+ private static volatile String bugLevel;
static boolean atBugLevel(String bl) { // package-private
String level = bugLevel;
@@ -324,8 +324,8 @@
// Cache of the most-recently-returned charsets,
// along with the names that were used to find them
//
- private static volatile Object[] cache1 = null; // "Level 1" cache
- private static volatile Object[] cache2 = null; // "Level 2" cache
+ private static volatile Object[] cache1; // "Level 1" cache
+ private static volatile Object[] cache2; // "Level 2" cache
private static void cache(String charsetName, Charset cs) {
cache2 = cache1;
--- a/jdk/src/java.base/share/classes/java/security/SecureRandom.java Wed Jul 05 21:09:59 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/security/SecureRandom.java Mon Dec 21 20:54:00 2015 +0100
@@ -124,7 +124,7 @@
private String algorithm;
// Seed Generator
- private static volatile SecureRandom seedGenerator = null;
+ private static volatile SecureRandom seedGenerator;
/**
* Constructs a secure random number generator (RNG) implementing the
@@ -522,10 +522,12 @@
* @see #setSeed
*/
public static byte[] getSeed(int numBytes) {
- if (seedGenerator == null) {
- seedGenerator = new SecureRandom();
+ SecureRandom seedGen = seedGenerator;
+ if (seedGen == null) {
+ seedGen = new SecureRandom();
+ seedGenerator = seedGen;
}
- return seedGenerator.generateSeed(numBytes);
+ return seedGen.generateSeed(numBytes);
}
/**
--- a/jdk/src/java.base/share/classes/java/text/DateFormatSymbols.java Wed Jul 05 21:09:59 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/text/DateFormatSymbols.java Mon Dec 21 20:54:00 2015 +0100
@@ -630,7 +630,9 @@
hashCode = 11 * hashCode + Arrays.hashCode(ampms);
hashCode = 11 * hashCode + Arrays.deepHashCode(getZoneStringsWrapper());
hashCode = 11 * hashCode + Objects.hashCode(localPatternChars);
- cachedHashCode = hashCode;
+ if (hashCode != 0) {
+ cachedHashCode = hashCode;
+ }
}
return hashCode;
@@ -670,12 +672,12 @@
private static final ConcurrentMap<Locale, SoftReference<DateFormatSymbols>> cachedInstances
= new ConcurrentHashMap<>(3);
- private transient int lastZoneIndex = 0;
+ private transient int lastZoneIndex;
/**
* Cached hash code
*/
- transient volatile int cachedHashCode = 0;
+ transient volatile int cachedHashCode;
private void initializeData(Locale desiredLocale) {
locale = desiredLocale;
--- a/jdk/src/java.base/share/classes/java/text/DecimalFormatSymbols.java Wed Jul 05 21:09:59 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/text/DecimalFormatSymbols.java Mon Dec 21 20:54:00 2015 +0100
@@ -42,14 +42,8 @@
import java.io.ObjectInputStream;
import java.io.Serializable;
import java.text.spi.DecimalFormatSymbolsProvider;
-import java.util.ArrayList;
import java.util.Currency;
-import java.util.List;
import java.util.Locale;
-import java.util.MissingResourceException;
-import java.util.ResourceBundle;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentMap;
import sun.util.locale.provider.LocaleProviderAdapter;
import sun.util.locale.provider.LocaleServiceProviderPool;
import sun.util.locale.provider.ResourceBundleBasedAdapter;
@@ -875,7 +869,7 @@
// currency; only the ISO code is serialized.
private transient Currency currency;
- private transient volatile boolean currencyInitialized = false;
+ private transient volatile boolean currencyInitialized;
// Proclaim JDK 1.1 FCS compatibility
static final long serialVersionUID = 5772796243397350300L;
--- a/jdk/src/java.base/share/classes/java/util/Locale.java Wed Jul 05 21:09:59 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/util/Locale.java Mon Dec 21 20:54:00 2015 +0100
@@ -62,7 +62,6 @@
import sun.util.locale.provider.LocaleProviderAdapter;
import sun.util.locale.provider.LocaleResources;
import sun.util.locale.provider.LocaleServiceProviderPool;
-import sun.util.locale.provider.ResourceBundleBasedAdapter;
/**
* A <code>Locale</code> object represents a specific geographical, political,
@@ -2016,11 +2015,11 @@
/**
* Calculated hashcode
*/
- private transient volatile int hashCodeValue = 0;
+ private transient volatile int hashCodeValue;
private static volatile Locale defaultLocale = initDefault();
- private static volatile Locale defaultDisplayLocale = null;
- private static volatile Locale defaultFormatLocale = null;
+ private static volatile Locale defaultDisplayLocale;
+ private static volatile Locale defaultFormatLocale;
private transient volatile String languageTag;
@@ -2207,9 +2206,9 @@
baseLocale.getRegion(), baseLocale.getVariant(), localeExtensions);
}
- private static volatile String[] isoLanguages = null;
+ private static volatile String[] isoLanguages;
- private static volatile String[] isoCountries = null;
+ private static volatile String[] isoCountries;
private static String convertOldISOCodes(String language) {
// we accept both the old and the new ISO codes for the languages whose ISO
@@ -2851,7 +2850,7 @@
private final String range;
private final double weight;
- private volatile int hash = 0;
+ private volatile int hash;
/**
* Constructs a {@code LanguageRange} using the given {@code range}.
@@ -3108,14 +3107,17 @@
*/
@Override
public int hashCode() {
- if (hash == 0) {
- int result = 17;
- result = 37*result + range.hashCode();
+ int h = hash;
+ if (h == 0) {
+ h = 17;
+ h = 37*h + range.hashCode();
long bitsWeight = Double.doubleToLongBits(weight);
- result = 37*result + (int)(bitsWeight ^ (bitsWeight >>> 32));
- hash = result;
+ h = 37*h + (int)(bitsWeight ^ (bitsWeight >>> 32));
+ if (h != 0) {
+ hash = h;
+ }
}
- return hash;
+ return h;
}
/**
--- a/jdk/src/java.base/share/classes/java/util/regex/Pattern.java Wed Jul 05 21:09:59 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/util/regex/Pattern.java Mon Dec 21 20:54:00 2015 +0100
@@ -950,7 +950,7 @@
* Boolean indicating this Pattern is compiled; this is necessary in order
* to lazily compile deserialized Patterns.
*/
- private transient volatile boolean compiled = false;
+ private transient volatile boolean compiled;
/**
* The normalized pattern string.
@@ -1332,7 +1332,6 @@
localCount = 0;
// if length > 0, the Pattern is lazily compiled
- compiled = false;
if (pattern.length() == 0) {
root = new Start(lastAccept);
matchRoot = lastAccept;
@@ -1377,7 +1376,6 @@
* equivalences of the characters.
*/
private void normalize() {
- boolean inCharClass = false;
int lastCodePoint = -1;
// Convert pattern into normalized form
@@ -1551,7 +1549,6 @@
// offset maintains the index in code units.
loop: for(int x=0, offset=0; x<nCodePoints; x++, offset+=len) {
len = countChars(input, offset, 1);
- boolean skip = false;
for(int y=x-1; y>=0; y--) {
if (combClass[y] == combClass[x]) {
continue loop;
@@ -1566,8 +1563,7 @@
temp[index++] = prefix + sre;
}
String[] result = new String[index];
- for (int x=0; x<index; x++)
- result[x] = temp[x];
+ System.arraycopy(temp, 0, result, 0, index);
return result;
}
@@ -1742,9 +1738,11 @@
}
Map<String, Integer> namedGroups() {
- if (namedGroups == null)
- namedGroups = new HashMap<>(2);
- return namedGroups;
+ Map<String, Integer> groups = namedGroups;
+ if (groups == null) {
+ namedGroups = groups = new HashMap<>(2);
+ }
+ return groups;
}
/**
--- a/jdk/src/java.base/share/classes/java/util/zip/ZipFile.java Wed Jul 05 21:09:59 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/util/zip/ZipFile.java Mon Dec 21 20:54:00 2015 +0100
@@ -72,7 +72,7 @@
class ZipFile implements ZipConstants, Closeable {
private final String name; // zip file name
- private volatile boolean closeRequested = false;
+ private volatile boolean closeRequested;
private Source zsrc;
private ZipCoder zc;
@@ -366,7 +366,7 @@
}
private class ZipFileInflaterInputStream extends InflaterInputStream {
- private volatile boolean closeRequested = false;
+ private volatile boolean closeRequested;
private boolean eof = false;
private final ZipFileInputStream zfin;
@@ -653,7 +653,7 @@
* (possibly compressed) zip file entry.
*/
private class ZipFileInputStream extends InputStream {
- private volatile boolean closeRequested = false;
+ private volatile boolean closeRequested;
private long pos; // current position within entry data
protected long rem; // number of remaining bytes within entry
protected long size; // uncompressed size of this entry
--- a/jdk/src/java.base/share/classes/jdk/internal/logger/LazyLoggers.java Wed Jul 05 21:09:59 2017 +0200
+++ b/jdk/src/java.base/share/classes/jdk/internal/logger/LazyLoggers.java Mon Dec 21 20:54:00 2015 +0100
@@ -326,20 +326,22 @@
}
// Do not expose this outside of this package.
- private static volatile LoggerFinder provider = null;
+ private static volatile LoggerFinder provider;
private static LoggerFinder accessLoggerFinder() {
- if (provider == null) {
+ LoggerFinder prov = provider;
+ if (prov == null) {
// no need to lock: it doesn't matter if we call
// getLoggerFinder() twice - since LoggerFinder already caches
// the result.
// This is just an optimization to avoid the cost of calling
// doPrivileged every time.
final SecurityManager sm = System.getSecurityManager();
- provider = sm == null ? LoggerFinder.getLoggerFinder() :
+ prov = sm == null ? LoggerFinder.getLoggerFinder() :
AccessController.doPrivileged(
(PrivilegedAction<LoggerFinder>)LoggerFinder::getLoggerFinder);
+ provider = prov;
}
- return provider;
+ return prov;
}
// Avoid using lambda here as lazy loggers could be created early
--- a/jdk/src/java.base/share/classes/sun/misc/VM.java Wed Jul 05 21:09:59 2017 +0200
+++ b/jdk/src/java.base/share/classes/sun/misc/VM.java Mon Dec 21 20:54:00 2015 +0100
@@ -27,9 +27,6 @@
import static java.lang.Thread.State.*;
import java.util.Properties;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Set;
public class VM {
@@ -288,10 +285,10 @@
}
/* Current count of objects pending for finalization */
- private static volatile int finalRefCount = 0;
+ private static volatile int finalRefCount;
/* Peak count of objects pending for finalization */
- private static volatile int peakFinalRefCount = 0;
+ private static volatile int peakFinalRefCount;
/*
* Gets the number of objects pending for finalization.
--- a/jdk/src/java.base/share/classes/sun/net/www/http/HttpCapture.java Wed Jul 05 21:09:59 2017 +0200
+++ b/jdk/src/java.base/share/classes/sun/net/www/http/HttpCapture.java Mon Dec 21 20:54:00 2015 +0100
@@ -54,12 +54,12 @@
* @author jccollet
*/
public class HttpCapture {
- private File file = null;
+ private File file;
private boolean incoming = true;
- private BufferedWriter out = null;
- private static boolean initialized = false;
- private static volatile ArrayList<Pattern> patterns = null;
- private static volatile ArrayList<String> capFiles = null;
+ private BufferedWriter out;
+ private static boolean initialized;
+ private static volatile ArrayList<Pattern> patterns;
+ private static volatile ArrayList<String> capFiles;
private static synchronized void init() {
initialized = true;
--- a/jdk/src/java.base/share/classes/sun/net/www/http/HttpClient.java Wed Jul 05 21:09:59 2017 +0200
+++ b/jdk/src/java.base/share/classes/sun/net/www/http/HttpClient.java Mon Dec 21 20:54:00 2015 +0100
@@ -98,7 +98,7 @@
// from previous releases.
private static boolean retryPostProp = true;
- volatile boolean keepingAlive = false; /* this is a keep-alive connection */
+ volatile boolean keepingAlive; /* this is a keep-alive connection */
int keepAliveConnections = -1; /* number of keep-alives left */
/**Idle timeout value, in milliseconds. Zero means infinity,
--- a/jdk/src/java.base/share/classes/sun/nio/ch/AsynchronousServerSocketChannelImpl.java Wed Jul 05 21:09:59 2017 +0200
+++ b/jdk/src/java.base/share/classes/sun/nio/ch/AsynchronousServerSocketChannelImpl.java Mon Dec 21 20:54:00 2015 +0100
@@ -51,14 +51,14 @@
protected final FileDescriptor fd;
// the local address to which the channel's socket is bound
- protected volatile InetSocketAddress localAddress = null;
+ protected volatile InetSocketAddress localAddress;
// need this lock to set local address
private final Object stateLock = new Object();
// close support
private ReadWriteLock closeLock = new ReentrantReadWriteLock();
- private volatile boolean open = true;
+ private volatile boolean closed;
// set true when accept operation is cancelled
private volatile boolean acceptKilled;
@@ -73,7 +73,7 @@
@Override
public final boolean isOpen() {
- return open;
+ return !closed;
}
/**
@@ -102,9 +102,9 @@
// synchronize with any threads using file descriptor/handle
closeLock.writeLock().lock();
try {
- if (!open)
+ if (closed)
return; // already closed
- open = false;
+ closed = true;
} finally {
closeLock.writeLock().unlock();
}
--- a/jdk/src/java.base/share/classes/sun/nio/ch/AsynchronousSocketChannelImpl.java Wed Jul 05 21:09:59 2017 +0200
+++ b/jdk/src/java.base/share/classes/sun/nio/ch/AsynchronousSocketChannelImpl.java Mon Dec 21 20:54:00 2015 +0100
@@ -54,8 +54,8 @@
// protects state, localAddress, and remoteAddress
protected final Object stateLock = new Object();
- protected volatile InetSocketAddress localAddress = null;
- protected volatile InetSocketAddress remoteAddress = null;
+ protected volatile InetSocketAddress localAddress;
+ protected volatile InetSocketAddress remoteAddress;
// State, increases monotonically
static final int ST_UNINITIALIZED = -1;
@@ -78,7 +78,7 @@
// close support
private final ReadWriteLock closeLock = new ReentrantReadWriteLock();
- private volatile boolean open = true;
+ private volatile boolean closed;
// set true when exclusive binding is on and SO_REUSEADDR is emulated
private boolean isReuseAddress;
@@ -106,7 +106,7 @@
@Override
public final boolean isOpen() {
- return open;
+ return !closed;
}
/**
@@ -135,9 +135,9 @@
// synchronize with any threads initiating asynchronous operations
closeLock.writeLock().lock();
try {
- if (!open)
+ if (closed)
return; // already closed
- open = false;
+ closed = true;
} finally {
closeLock.writeLock().unlock();
}
--- a/jdk/src/java.base/share/classes/sun/nio/ch/DatagramChannelImpl.java Wed Jul 05 21:09:59 2017 +0200
+++ b/jdk/src/java.base/share/classes/sun/nio/ch/DatagramChannelImpl.java Mon Dec 21 20:54:00 2015 +0100
@@ -58,8 +58,8 @@
private final ProtocolFamily family;
// IDs of native threads doing reads and writes, for signalling
- private volatile long readerThread = 0;
- private volatile long writerThread = 0;
+ private volatile long readerThread;
+ private volatile long writerThread;
// Cached InetAddress and port for unconnected DatagramChannels
// used by receive0
--- a/jdk/src/java.base/share/classes/sun/nio/ch/DatagramSocketAdaptor.java Wed Jul 05 21:09:59 2017 +0200
+++ b/jdk/src/java.base/share/classes/sun/nio/ch/DatagramSocketAdaptor.java Mon Dec 21 20:54:00 2015 +0100
@@ -46,7 +46,7 @@
private final DatagramChannelImpl dc;
// Timeout "option" value for receives
- private volatile int timeout = 0;
+ private volatile int timeout;
// ## super will create a useless impl
private DatagramSocketAdaptor(DatagramChannelImpl dc) throws IOException {
--- a/jdk/src/java.base/share/classes/sun/nio/ch/FileLockImpl.java Wed Jul 05 21:09:59 2017 +0200
+++ b/jdk/src/java.base/share/classes/sun/nio/ch/FileLockImpl.java Mon Dec 21 20:54:00 2015 +0100
@@ -31,7 +31,7 @@
public class FileLockImpl
extends FileLock
{
- private volatile boolean valid = true;
+ private volatile boolean invalid;
FileLockImpl(FileChannel channel, long position, long size, boolean shared)
{
@@ -44,25 +44,25 @@
}
public boolean isValid() {
- return valid;
+ return !invalid;
}
void invalidate() {
assert Thread.holdsLock(this);
- valid = false;
+ invalid = true;
}
public synchronized void release() throws IOException {
Channel ch = acquiredBy();
if (!ch.isOpen())
throw new ClosedChannelException();
- if (valid) {
+ if (isValid()) {
if (ch instanceof FileChannelImpl)
((FileChannelImpl)ch).release(this);
else if (ch instanceof AsynchronousFileChannelImpl)
((AsynchronousFileChannelImpl)ch).release(this);
else throw new AssertionError();
- valid = false;
+ invalidate();
}
}
}
--- a/jdk/src/java.base/share/classes/sun/nio/ch/MembershipKeyImpl.java Wed Jul 05 21:09:59 2017 +0200
+++ b/jdk/src/java.base/share/classes/sun/nio/ch/MembershipKeyImpl.java Mon Dec 21 20:54:00 2015 +0100
@@ -43,8 +43,7 @@
private final NetworkInterface interf;
private final InetAddress source;
- // true when key is valid
- private volatile boolean valid = true;
+ private volatile boolean invalid;
// lock used when creating or accessing blockedSet
private Object stateLock = new Object();
@@ -134,12 +133,12 @@
}
public boolean isValid() {
- return valid;
+ return !invalid;
}
// package-private
void invalidate() {
- valid = false;
+ invalid = true;
}
public void drop() {
--- a/jdk/src/java.base/share/classes/sun/nio/ch/Net.java Wed Jul 05 21:09:59 2017 +0200
+++ b/jdk/src/java.base/share/classes/sun/nio/ch/Net.java Mon Dec 21 20:54:00 2015 +0100
@@ -32,7 +32,6 @@
import java.util.*;
import java.security.AccessController;
import java.security.PrivilegedAction;
-import java.security.PrivilegedExceptionAction;
import sun.net.ExtendedOptionsImpl;
@@ -55,7 +54,7 @@
// -- Miscellaneous utilities --
- private static volatile boolean checkedIPv6 = false;
+ private static volatile boolean checkedIPv6;
private static volatile boolean isIPv6Available;
/**
--- a/jdk/src/java.base/share/classes/sun/nio/ch/ServerSocketAdaptor.java Wed Jul 05 21:09:59 2017 +0200
+++ b/jdk/src/java.base/share/classes/sun/nio/ch/ServerSocketAdaptor.java Mon Dec 21 20:54:00 2015 +0100
@@ -45,7 +45,7 @@
private final ServerSocketChannelImpl ssc;
// Timeout "option" value for accepts
- private volatile int timeout = 0;
+ private volatile int timeout;
public static ServerSocket create(ServerSocketChannelImpl ssc) {
try {
--- a/jdk/src/java.base/share/classes/sun/nio/ch/ServerSocketChannelImpl.java Wed Jul 05 21:09:59 2017 +0200
+++ b/jdk/src/java.base/share/classes/sun/nio/ch/ServerSocketChannelImpl.java Mon Dec 21 20:54:00 2015 +0100
@@ -54,7 +54,7 @@
private int fdVal;
// ID of native thread currently blocked in this channel, for signalling
- private volatile long thread = 0;
+ private volatile long thread;
// Lock held by thread currently blocked in this channel
private final Object lock = new Object();
--- a/jdk/src/java.base/share/classes/sun/nio/ch/SocketAdaptor.java Wed Jul 05 21:09:59 2017 +0200
+++ b/jdk/src/java.base/share/classes/sun/nio/ch/SocketAdaptor.java Mon Dec 21 20:54:00 2015 +0100
@@ -26,13 +26,11 @@
package sun.nio.ch;
import java.io.*;
-import java.lang.ref.*;
import java.net.*;
import java.nio.*;
import java.nio.channels.*;
import java.security.AccessController;
import java.security.PrivilegedExceptionAction;
-import java.util.*;
// Make a socket channel look like a socket.
@@ -55,7 +53,7 @@
private final SocketChannelImpl sc;
// Timeout "option" value for reads
- private volatile int timeout = 0;
+ private volatile int timeout;
private SocketAdaptor(SocketChannelImpl sc) throws SocketException {
super((SocketImpl) null);
--- a/jdk/src/java.base/share/classes/sun/nio/ch/SocketChannelImpl.java Wed Jul 05 21:09:59 2017 +0200
+++ b/jdk/src/java.base/share/classes/sun/nio/ch/SocketChannelImpl.java Mon Dec 21 20:54:00 2015 +0100
@@ -56,8 +56,8 @@
private final int fdVal;
// IDs of native threads doing reads and writes, for signalling
- private volatile long readerThread = 0;
- private volatile long writerThread = 0;
+ private volatile long readerThread;
+ private volatile long writerThread;
// Lock held by current reading or connecting thread
private final Object readLock = new Object();
--- a/jdk/src/java.base/share/classes/sun/nio/ch/Util.java Wed Jul 05 21:09:59 2017 +0200
+++ b/jdk/src/java.base/share/classes/sun/nio/ch/Util.java Mon Dec 21 20:54:00 2015 +0100
@@ -25,13 +25,10 @@
package sun.nio.ch;
-import java.lang.ref.SoftReference;
import java.lang.reflect.*;
-import java.io.IOException;
import java.io.FileDescriptor;
import java.nio.ByteBuffer;
import java.nio.MappedByteBuffer;
-import java.nio.channels.*;
import java.security.AccessController;
import java.security.PrivilegedAction;
import java.util.*;
@@ -295,7 +292,7 @@
return pageSize;
}
- private static volatile Constructor<?> directByteBufferConstructor = null;
+ private static volatile Constructor<?> directByteBufferConstructor;
private static void initDBBConstructor() {
AccessController.doPrivileged(new PrivilegedAction<Void>() {
@@ -340,7 +337,7 @@
return dbb;
}
- private static volatile Constructor<?> directByteBufferRConstructor = null;
+ private static volatile Constructor<?> directByteBufferRConstructor;
private static void initDBBRConstructor() {
AccessController.doPrivileged(new PrivilegedAction<Void>() {
@@ -388,7 +385,7 @@
// -- Bug compatibility --
- private static volatile String bugLevel = null;
+ private static volatile String bugLevel;
static boolean atBugLevel(String bl) { // package-private
if (bugLevel == null) {
--- a/jdk/src/java.base/share/classes/sun/nio/cs/StreamDecoder.java Wed Jul 05 21:09:59 2017 +0200
+++ b/jdk/src/java.base/share/classes/sun/nio/cs/StreamDecoder.java Mon Dec 21 20:54:00 2015 +0100
@@ -39,10 +39,10 @@
private static final int MIN_BYTE_BUFFER_SIZE = 32;
private static final int DEFAULT_BYTE_BUFFER_SIZE = 8192;
- private volatile boolean isOpen = true;
+ private volatile boolean closed;
private void ensureOpen() throws IOException {
- if (!isOpen)
+ if (closed)
throw new IOException("Stream closed");
}
@@ -188,15 +188,15 @@
public void close() throws IOException {
synchronized (lock) {
- if (!isOpen)
+ if (closed)
return;
implClose();
- isOpen = false;
+ closed = true;
}
}
private boolean isOpen() {
- return isOpen;
+ return !closed;
}
--- a/jdk/src/java.base/share/classes/sun/nio/cs/StreamEncoder.java Wed Jul 05 21:09:59 2017 +0200
+++ b/jdk/src/java.base/share/classes/sun/nio/cs/StreamEncoder.java Mon Dec 21 20:54:00 2015 +0100
@@ -38,10 +38,10 @@
private static final int DEFAULT_BYTE_BUFFER_SIZE = 8192;
- private volatile boolean isOpen = true;
+ private volatile boolean closed;
private void ensureOpen() throws IOException {
- if (!isOpen)
+ if (closed)
throw new IOException("Stream closed");
}
@@ -156,15 +156,15 @@
public void close() throws IOException {
synchronized (lock) {
- if (!isOpen)
+ if (closed)
return;
implClose();
- isOpen = false;
+ closed = true;
}
}
private boolean isOpen() {
- return isOpen;
+ return !closed;
}
--- a/jdk/src/java.base/share/classes/sun/reflect/MethodAccessorGenerator.java Wed Jul 05 21:09:59 2017 +0200
+++ b/jdk/src/java.base/share/classes/sun/reflect/MethodAccessorGenerator.java Mon Dec 21 20:54:00 2015 +0100
@@ -44,9 +44,9 @@
// Only used if forSerialization is true
private static final short NUM_SERIALIZATION_CPOOL_ENTRIES = (short) 2;
- private static volatile int methodSymnum = 0;
- private static volatile int constructorSymnum = 0;
- private static volatile int serializationConstructorSymnum = 0;
+ private static volatile int methodSymnum;
+ private static volatile int constructorSymnum;
+ private static volatile int serializationConstructorSymnum;
private Class<?> declaringClass;
private Class<?>[] parameterTypes;
--- a/jdk/src/java.base/share/classes/sun/reflect/annotation/AnnotationInvocationHandler.java Wed Jul 05 21:09:59 2017 +0200
+++ b/jdk/src/java.base/share/classes/sun/reflect/annotation/AnnotationInvocationHandler.java Mon Dec 21 20:54:00 2015 +0100
@@ -299,7 +299,7 @@
}});
}
- private transient volatile Method[] memberMethods = null;
+ private transient volatile Method[] memberMethods;
/**
* Validates that a method is structurally appropriate for an
--- a/jdk/src/java.base/share/classes/sun/security/ssl/SSLSessionImpl.java Wed Jul 05 21:09:59 2017 +0200
+++ b/jdk/src/java.base/share/classes/sun/security/ssl/SSLSessionImpl.java Mon Dec 21 20:54:00 2015 +0100
@@ -130,7 +130,7 @@
* also since counters make shorter debugging IDs than the big ones
* we use in the protocol for uniqueness-over-time.
*/
- private static volatile int counter = 0;
+ private static volatile int counter;
/*
* Use of session caches is globally enabled/disabled.
--- a/jdk/src/java.base/share/classes/sun/security/x509/X509CRLImpl.java Wed Jul 05 21:09:59 2017 +0200
+++ b/jdk/src/java.base/share/classes/sun/security/x509/X509CRLImpl.java Mon Dec 21 20:54:00 2015 +0100
@@ -1290,7 +1290,7 @@
implements Comparable<X509IssuerSerial> {
final X500Principal issuer;
final BigInteger serial;
- volatile int hashcode = 0;
+ volatile int hashcode;
/**
* Create an X509IssuerSerial.
@@ -1358,13 +1358,16 @@
* @return the hash code value
*/
public int hashCode() {
- if (hashcode == 0) {
- int result = 17;
- result = 37*result + issuer.hashCode();
- result = 37*result + serial.hashCode();
- hashcode = result;
+ int h = hashcode;
+ if (h == 0) {
+ h = 17;
+ h = 37*h + issuer.hashCode();
+ h = 37*h + serial.hashCode();
+ if (h != 0) {
+ hashcode = h;
+ }
}
- return hashcode;
+ return h;
}
@Override
--- a/jdk/src/java.base/share/classes/sun/util/calendar/CalendarSystem.java Wed Jul 05 21:09:59 2017 +0200
+++ b/jdk/src/java.base/share/classes/sun/util/calendar/CalendarSystem.java Mon Dec 21 20:54:00 2015 +0100
@@ -25,13 +25,6 @@
package sun.util.calendar;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.security.AccessController;
-import java.security.PrivilegedActionException;
-import java.security.PrivilegedExceptionAction;
-import java.util.Properties;
import java.util.TimeZone;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
@@ -76,7 +69,7 @@
/////////////////////// Calendar Factory Methods /////////////////////////
- private static volatile boolean initialized = false;
+ private static volatile boolean initialized;
// Map of calendar names and calendar class names
private static ConcurrentMap<String, String> names;
--- a/jdk/src/java.base/share/classes/sun/util/locale/BaseLocale.java Wed Jul 05 21:09:59 2017 +0200
+++ b/jdk/src/java.base/share/classes/sun/util/locale/BaseLocale.java Mon Dec 21 20:54:00 2015 +0100
@@ -46,7 +46,7 @@
private final String region;
private final String variant;
- private volatile int hash = 0;
+ private volatile int hash;
// This method must be called only when creating the Locale.* constants.
private BaseLocale(String language, String region) {
@@ -147,7 +147,9 @@
h = 31 * h + script.hashCode();
h = 31 * h + region.hashCode();
h = 31 * h + variant.hashCode();
- hash = h;
+ if (h != 0) {
+ hash = h;
+ }
}
return h;
}
--- a/jdk/src/java.base/share/classes/sun/util/locale/provider/JRELocaleProviderAdapter.java Wed Jul 05 21:09:59 2017 +0200
+++ b/jdk/src/java.base/share/classes/sun/util/locale/provider/JRELocaleProviderAdapter.java Mon Dec 21 20:54:00 2015 +0100
@@ -114,20 +114,20 @@
}
}
- private volatile BreakIteratorProvider breakIteratorProvider = null;
- private volatile CollatorProvider collatorProvider = null;
- private volatile DateFormatProvider dateFormatProvider = null;
- private volatile DateFormatSymbolsProvider dateFormatSymbolsProvider = null;
- private volatile DecimalFormatSymbolsProvider decimalFormatSymbolsProvider = null;
- private volatile NumberFormatProvider numberFormatProvider = null;
+ private volatile BreakIteratorProvider breakIteratorProvider;
+ private volatile CollatorProvider collatorProvider;
+ private volatile DateFormatProvider dateFormatProvider;
+ private volatile DateFormatSymbolsProvider dateFormatSymbolsProvider;
+ private volatile DecimalFormatSymbolsProvider decimalFormatSymbolsProvider;
+ private volatile NumberFormatProvider numberFormatProvider;
- private volatile CurrencyNameProvider currencyNameProvider = null;
- private volatile LocaleNameProvider localeNameProvider = null;
- private volatile TimeZoneNameProvider timeZoneNameProvider = null;
- private volatile CalendarDataProvider calendarDataProvider = null;
- private volatile CalendarNameProvider calendarNameProvider = null;
+ private volatile CurrencyNameProvider currencyNameProvider;
+ private volatile LocaleNameProvider localeNameProvider;
+ private volatile TimeZoneNameProvider timeZoneNameProvider;
+ private volatile CalendarDataProvider calendarDataProvider;
+ private volatile CalendarNameProvider calendarNameProvider;
- private volatile CalendarProvider calendarProvider = null;
+ private volatile CalendarProvider calendarProvider;
/*
* Getter methods for java.text.spi.* providers
--- a/jdk/src/java.base/share/classes/sun/util/locale/provider/LocaleProviderAdapter.java Wed Jul 05 21:09:59 2017 +0200
+++ b/jdk/src/java.base/share/classes/sun/util/locale/provider/LocaleProviderAdapter.java Mon Dec 21 20:54:00 2015 +0100
@@ -107,7 +107,7 @@
* Default fallback adapter type, which should return something meaningful in any case.
* This is either CLDR or FALLBACK.
*/
- static volatile LocaleProviderAdapter.Type defaultLocaleProviderAdapter = null;
+ static volatile LocaleProviderAdapter.Type defaultLocaleProviderAdapter;
/**
* Adapter lookup cache.
--- a/jdk/src/java.base/share/classes/sun/util/resources/OpenListResourceBundle.java Wed Jul 05 21:09:59 2017 +0200
+++ b/jdk/src/java.base/share/classes/sun/util/resources/OpenListResourceBundle.java Mon Dec 21 20:54:00 2015 +0100
@@ -164,6 +164,6 @@
return new HashSet<>();
}
- private volatile Map<String, Object> lookup = null;
+ private volatile Map<String, Object> lookup;
private volatile Set<String> keyset;
}
--- a/jdk/src/java.base/unix/classes/sun/nio/ch/SinkChannelImpl.java Wed Jul 05 21:09:59 2017 +0200
+++ b/jdk/src/java.base/unix/classes/sun/nio/ch/SinkChannelImpl.java Mon Dec 21 20:54:00 2015 +0100
@@ -47,7 +47,7 @@
int fdVal;
// ID of native thread doing write, for signalling
- private volatile long thread = 0;
+ private volatile long thread;
// Lock held by current reading thread
private final Object lock = new Object();
--- a/jdk/src/java.base/unix/classes/sun/nio/ch/SourceChannelImpl.java Wed Jul 05 21:09:59 2017 +0200
+++ b/jdk/src/java.base/unix/classes/sun/nio/ch/SourceChannelImpl.java Mon Dec 21 20:54:00 2015 +0100
@@ -47,7 +47,7 @@
int fdVal;
// ID of native thread doing read, for signalling
- private volatile long thread = 0;
+ private volatile long thread;
// Lock held by current reading thread
private final Object lock = new Object();
--- a/jdk/src/java.base/unix/classes/sun/nio/fs/MimeTypesFileTypeDetector.java Wed Jul 05 21:09:59 2017 +0200
+++ b/jdk/src/java.base/unix/classes/sun/nio/fs/MimeTypesFileTypeDetector.java Mon Dec 21 20:54:00 2015 +0100
@@ -52,7 +52,7 @@
private Map<String,String> mimeTypeMap;
// set to true when file loaded
- private volatile boolean loaded = false;
+ private volatile boolean loaded;
public MimeTypesFileTypeDetector(Path filePath) {
mimeTypesFile = filePath;
--- a/jdk/src/java.base/windows/classes/sun/nio/ch/WindowsSelectorImpl.java Wed Jul 05 21:09:59 2017 +0200
+++ b/jdk/src/java.base/windows/classes/sun/nio/ch/WindowsSelectorImpl.java Mon Dec 21 20:54:00 2015 +0100
@@ -119,7 +119,7 @@
// Lock for interrupt triggering and clearing
private final Object interruptLock = new Object();
- private volatile boolean interruptTriggered = false;
+ private volatile boolean interruptTriggered;
WindowsSelectorImpl(SelectorProvider sp) throws IOException {
super(sp);