Hello,
in June I sent a letter regarding clean-ups of unnecessary explicit
initialization of volatile variables [1].
Original mail caused some discussion regarding whether clean-up is safe as of
JMM.
It turned out that Aleksey Shipilev tried to find conter-example against
removal of explicit initialization of volatile variables
in concurrency-interest [2] and didn't find any.
Also Doug Lea mentions in the same discussion [3]
> But your account is a more careful version of reasoning
we've done before to conclude that there is never any reason to explicitly
initialize fields to 0/0.0/false/null.
The original message of mine was then forwarded to security-dev list as
affected code related to security-libs [4]
and Sean Mullan issued JDK-8251548 as sub-issue of JDK-6736490 which already
includes similar clean-up done for
java.base.
There is also a plenty of possible volatile clean-ups (I've included them into
a separate patch here), so I have two questions:
1) Could anyone sponsor the changes related to JDK-8251548 (patch is attached
to [1])?
2) Should we create one more sub-issue in JDK-6736490 to handle the rest of
changes (attached to this mail) or handle them
module by module?
Patch is attached, tier1 and tier2 are ok
1. https://mail.openjdk.java.net/pipermail/core-libs-dev/2020-June/067341.html
2. http://cs.oswego.edu/pipermail/concurrency-interest/2015-December/014767.html
3. http://cs.oswego.edu/pipermail/concurrency-interest/2015-December/014770.html
4. https://mail.openjdk.java.net/pipermail/security-dev/2020-August/022289.html
diff --git a/src/java.desktop/share/classes/com/sun/imageio/plugins/tiff/TIFFIFD.java b/src/java.desktop/share/classes/com/sun/imageio/plugins/tiff/TIFFIFD.java
--- a/src/java.desktop/share/classes/com/sun/imageio/plugins/tiff/TIFFIFD.java
+++ b/src/java.desktop/share/classes/com/sun/imageio/plugins/tiff/TIFFIFD.java
@@ -53,7 +53,7 @@
// A set of tag numbers corresponding to tags essential to decoding
// the image and metadata required to interpret its samples.
//
- private static volatile Set<Integer> essentialTags = null;
+ private static volatile Set<Integer> essentialTags;
private static void initializeEssentialTags() {
Set<Integer> tags = essentialTags;
diff --git a/src/java.desktop/share/classes/com/sun/media/sound/SoftAudioPusher.java b/src/java.desktop/share/classes/com/sun/media/sound/SoftAudioPusher.java
--- a/src/java.desktop/share/classes/com/sun/media/sound/SoftAudioPusher.java
+++ b/src/java.desktop/share/classes/com/sun/media/sound/SoftAudioPusher.java
@@ -37,7 +37,7 @@
*/
public final class SoftAudioPusher implements Runnable {
- private volatile boolean active = false;
+ private volatile boolean active;
private SourceDataLine sourceDataLine = null;
private Thread audiothread;
private final AudioInputStream ais;
diff --git a/src/java.desktop/share/classes/com/sun/media/sound/SoftSynthesizer.java b/src/java.desktop/share/classes/com/sun/media/sound/SoftSynthesizer.java
--- a/src/java.desktop/share/classes/com/sun/media/sound/SoftSynthesizer.java
+++ b/src/java.desktop/share/classes/com/sun/media/sound/SoftSynthesizer.java
@@ -76,7 +76,7 @@
public SoftAudioPusher pusher = null;
public AudioInputStream jitter_stream = null;
public SourceDataLine sourceDataLine = null;
- public volatile long silent_samples = 0;
+ public volatile long silent_samples;
private int framesize = 0;
private final WeakReference<AudioInputStream> weak_stream_link;
private final AudioFloatConverter converter;
diff --git a/src/java.desktop/share/classes/java/awt/Component.java b/src/java.desktop/share/classes/java/awt/Component.java
--- a/src/java.desktop/share/classes/java/awt/Component.java
+++ b/src/java.desktop/share/classes/java/awt/Component.java
@@ -394,7 +394,7 @@
* @see #validate
* @see #invalidate
*/
- private volatile boolean valid = false;
+ private volatile boolean valid;
/**
* The {@code DropTarget} associated with this component.
@@ -9317,7 +9317,7 @@
* to add/remove ComponentListener and FocusListener to track
* target Component's state.
*/
- private transient volatile int propertyListenersCount = 0;
+ private transient volatile int propertyListenersCount;
/**
* A component listener to track show/hide/resize events
diff --git a/src/java.desktop/share/classes/java/awt/Container.java b/src/java.desktop/share/classes/java/awt/Container.java
--- a/src/java.desktop/share/classes/java/awt/Container.java
+++ b/src/java.desktop/share/classes/java/awt/Container.java
@@ -3845,7 +3845,7 @@
* Number of PropertyChangeListener objects registered. It's used
* to add/remove ContainerListener to track target Container's state.
*/
- private transient volatile int propertyListenersCount = 0;
+ private transient volatile int propertyListenersCount;
/**
* The handler to fire {@code PropertyChange}
diff --git a/src/java.desktop/share/classes/java/awt/Dialog.java b/src/java.desktop/share/classes/java/awt/Dialog.java
--- a/src/java.desktop/share/classes/java/awt/Dialog.java
+++ b/src/java.desktop/share/classes/java/awt/Dialog.java
@@ -291,7 +291,7 @@
* @see #hideAndDisposeHandler()
* @see #shouldBlock()
*/
- transient volatile boolean isInHide = false;
+ transient volatile boolean isInHide;
/*
* Indicates that this dialog is being disposed. This flag is set to true at
@@ -302,7 +302,7 @@
* @see #hideAndDisposeHandler()
* @see #doDispose()
*/
- transient volatile boolean isInDispose = false;
+ transient volatile boolean isInDispose;
private static final String base = "dialog";
private static int nameCounter = 0;
diff --git a/src/java.desktop/share/classes/java/awt/Window.java b/src/java.desktop/share/classes/java/awt/Window.java
--- a/src/java.desktop/share/classes/java/awt/Window.java
+++ b/src/java.desktop/share/classes/java/awt/Window.java
@@ -398,8 +398,8 @@
* These fields are initialized in the native peer code
* or via AWTAccessor's WindowAccessor.
*/
- private transient volatile int securityWarningWidth = 0;
- private transient volatile int securityWarningHeight = 0;
+ private transient volatile int securityWarningWidth;
+ private transient volatile int securityWarningHeight;
static {
/* ensure that the necessary native libraries are loaded */
diff --git a/src/java.desktop/share/classes/java/awt/event/InvocationEvent.java b/src/java.desktop/share/classes/java/awt/event/InvocationEvent.java
--- a/src/java.desktop/share/classes/java/awt/event/InvocationEvent.java
+++ b/src/java.desktop/share/classes/java/awt/event/InvocationEvent.java
@@ -115,7 +115,7 @@
* @see #isDispatched
* @since 1.7
*/
- private volatile boolean dispatched = false;
+ private volatile boolean dispatched;
/**
* Set to true if dispatch() catches Throwable and stores it in the
diff --git a/src/java.desktop/share/classes/java/awt/font/NumericShaper.java b/src/java.desktop/share/classes/java/awt/font/NumericShaper.java
--- a/src/java.desktop/share/classes/java/awt/font/NumericShaper.java
+++ b/src/java.desktop/share/classes/java/awt/font/NumericShaper.java
@@ -1358,7 +1358,7 @@
// use a binary search with a cache
- private transient volatile int stCache = 0;
+ private transient volatile int stCache;
private boolean isStrongDirectional(char c) {
int cachedIndex = stCache;
diff --git a/src/java.desktop/share/classes/javax/swing/JComponent.java b/src/java.desktop/share/classes/javax/swing/JComponent.java
--- a/src/java.desktop/share/classes/javax/swing/JComponent.java
+++ b/src/java.desktop/share/classes/javax/swing/JComponent.java
@@ -3695,7 +3695,7 @@
* to add/remove ContainerListener and FocusListener to track
* target JComponent's state
*/
- private transient volatile int propertyListenersCount = 0;
+ private transient volatile int propertyListenersCount;
/**
* This field duplicates the function of the accessibleAWTFocusHandler field
diff --git a/src/java.desktop/share/classes/sun/awt/AppContext.java b/src/java.desktop/share/classes/sun/awt/AppContext.java
--- a/src/java.desktop/share/classes/sun/awt/AppContext.java
+++ b/src/java.desktop/share/classes/sun/awt/AppContext.java
@@ -161,7 +161,7 @@
contained in another AppContext. It is implicitly created for
standalone apps only (i.e. not applets)
*/
- private static volatile AppContext mainAppContext = null;
+ private static volatile AppContext mainAppContext;
private static class GetAppContextLock {};
private static final Object getAppContextLock = new GetAppContextLock();
diff --git a/src/java.desktop/share/classes/sun/awt/datatransfer/SunClipboard.java b/src/java.desktop/share/classes/sun/awt/datatransfer/SunClipboard.java
--- a/src/java.desktop/share/classes/sun/awt/datatransfer/SunClipboard.java
+++ b/src/java.desktop/share/classes/sun/awt/datatransfer/SunClipboard.java
@@ -71,7 +71,7 @@
* A number of {@code FlavorListener}s currently registered
* on this clipboard across all {@code AppContext}s.
*/
- private volatile int numberOfFlavorListeners = 0;
+ private volatile int numberOfFlavorListeners;
/**
* A set of {@code DataFlavor}s that is available on this clipboard. It is
diff --git a/src/java.desktop/share/classes/sun/awt/dnd/SunDragSourceContextPeer.java b/src/java.desktop/share/classes/sun/awt/dnd/SunDragSourceContextPeer.java
--- a/src/java.desktop/share/classes/sun/awt/dnd/SunDragSourceContextPeer.java
+++ b/src/java.desktop/share/classes/sun/awt/dnd/SunDragSourceContextPeer.java
@@ -74,7 +74,7 @@
private DragSourceContext dragSourceContext;
private int sourceActions;
- private static volatile boolean dragDropInProgress = false;
+ private static volatile boolean dragDropInProgress;
private static boolean discardingMouseEvents = false;
/*
diff --git a/src/java.desktop/share/classes/sun/java2d/Disposer.java b/src/java.desktop/share/classes/sun/java2d/Disposer.java
--- a/src/java.desktop/share/classes/sun/java2d/Disposer.java
+++ b/src/java.desktop/share/classes/sun/java2d/Disposer.java
@@ -183,7 +183,7 @@
/*
* Set to indicate the queue is presently being polled.
*/
- public static volatile boolean pollingQueue = false;
+ public static volatile boolean pollingQueue;
/*
* The pollRemove() method is called back from a dispose method
diff --git a/src/java.desktop/share/classes/sun/java2d/marlin/RendererStats.java b/src/java.desktop/share/classes/sun/java2d/marlin/RendererStats.java
--- a/src/java.desktop/share/classes/sun/java2d/marlin/RendererStats.java
+++ b/src/java.desktop/share/classes/sun/java2d/marlin/RendererStats.java
@@ -334,7 +334,7 @@
static final class RendererStatsHolder {
// singleton
- private static volatile RendererStatsHolder SINGLETON = null;
+ private static volatile RendererStatsHolder SINGLETON;
static synchronized RendererStatsHolder getInstance() {
if (SINGLETON == null) {
diff --git a/src/java.logging/share/classes/java/util/logging/LogManager.java b/src/java.logging/share/classes/java/util/logging/LogManager.java
--- a/src/java.logging/share/classes/java/util/logging/LogManager.java
+++ b/src/java.logging/share/classes/java/util/logging/LogManager.java
@@ -336,7 +336,7 @@
*
*/
private boolean initializedCalled = false;
- private volatile boolean initializationDone = false;
+ private volatile boolean initializationDone;
final void ensureLogManagerInitialized() {
final LogManager owner = this;
if (initializationDone || owner != manager) {
diff --git a/src/java.logging/share/classes/sun/net/www/protocol/http/logging/HttpLogFormatter.java b/src/java.logging/share/classes/sun/net/www/protocol/http/logging/HttpLogFormatter.java
--- a/src/java.logging/share/classes/sun/net/www/protocol/http/logging/HttpLogFormatter.java
+++ b/src/java.logging/share/classes/sun/net/www/protocol/http/logging/HttpLogFormatter.java
@@ -36,9 +36,9 @@
*/
public class HttpLogFormatter extends java.util.logging.SimpleFormatter {
// Pattern for MessageHeader data. Mostly pairs within curly brackets
- private static volatile Pattern pattern = null;
+ private static volatile Pattern pattern;
// Pattern for Cookies
- private static volatile Pattern cpattern = null;
+ private static volatile Pattern cpattern;
public HttpLogFormatter() {
if (pattern == null) {
diff --git a/src/java.management.rmi/share/classes/javax/management/remote/rmi/RMIConnector.java b/src/java.management.rmi/share/classes/javax/management/remote/rmi/RMIConnector.java
--- a/src/java.management.rmi/share/classes/javax/management/remote/rmi/RMIConnector.java
+++ b/src/java.management.rmi/share/classes/javax/management/remote/rmi/RMIConnector.java
@@ -2294,7 +2294,7 @@
* A static WeakReference to an {@link org.omg.CORBA.ORB ORB} to
* connect unconnected stubs.
**/
- private static volatile WeakReference<Object> orb = null;
+ private static volatile WeakReference<Object> orb;
// TRACES & DEBUG
//---------------
diff --git a/src/java.management/share/classes/com/sun/jmx/mbeanserver/JmxMBeanServer.java b/src/java.management/share/classes/com/sun/jmx/mbeanserver/JmxMBeanServer.java
--- a/src/java.management/share/classes/com/sun/jmx/mbeanserver/JmxMBeanServer.java
+++ b/src/java.management/share/classes/com/sun/jmx/mbeanserver/JmxMBeanServer.java
@@ -105,7 +105,7 @@
private final MBeanServer outerShell;
- private volatile MBeanServer mbsInterceptor = null;
+ private volatile MBeanServer mbsInterceptor;
/** The MBeanServerDelegate object representing the MBean Server */
private final MBeanServerDelegate mBeanServerDelegateObject;
diff --git a/src/java.management/share/classes/com/sun/jmx/mbeanserver/Repository.java b/src/java.management/share/classes/com/sun/jmx/mbeanserver/Repository.java
--- a/src/java.management/share/classes/com/sun/jmx/mbeanserver/Repository.java
+++ b/src/java.management/share/classes/com/sun/jmx/mbeanserver/Repository.java
@@ -86,7 +86,7 @@
/**
* Number of elements contained in the Repository
*/
- private volatile int nbElements = 0;
+ private volatile int nbElements;
/**
* Domain name of the server the repository is attached to.
diff --git a/src/java.management/share/classes/com/sun/jmx/remote/internal/ClientNotifForwarder.java b/src/java.management/share/classes/com/sun/jmx/remote/internal/ClientNotifForwarder.java
--- a/src/java.management/share/classes/com/sun/jmx/remote/internal/ClientNotifForwarder.java
+++ b/src/java.management/share/classes/com/sun/jmx/remote/internal/ClientNotifForwarder.java
@@ -417,7 +417,7 @@
private class NotifFetcher implements Runnable {
- private volatile boolean alreadyLogged = false;
+ private volatile boolean alreadyLogged;
private void logOnce(String msg, SecurityException x) {
if (alreadyLogged) return;
diff --git a/src/java.management/share/classes/javax/management/timer/Timer.java b/src/java.management/share/classes/javax/management/timer/Timer.java
--- a/src/java.management/share/classes/javax/management/timer/Timer.java
+++ b/src/java.management/share/classes/javax/management/timer/Timer.java
@@ -162,7 +162,7 @@
* The notification counter ID.
* Used to keep the max key value inserted into the timer table.
*/
- volatile private int counterID = 0;
+ volatile private int counterID;
private java.util.Timer timer;
diff --git a/src/java.naming/share/classes/com/sun/jndi/ldap/Connection.java b/src/java.naming/share/classes/com/sun/jndi/ldap/Connection.java
--- a/src/java.naming/share/classes/com/sun/jndi/ldap/Connection.java
+++ b/src/java.naming/share/classes/com/sun/jndi/ldap/Connection.java
@@ -156,7 +156,7 @@
// Accessed only within sync methods
private LdapRequest pendingRequests = null;
- volatile IOException closureReason = null;
+ volatile IOException closureReason;
volatile boolean useable = true; // is Connection still useable
int readTimeout;
diff --git a/src/java.net.http/share/classes/jdk/internal/net/http/MultiExchange.java b/src/java.net.http/share/classes/jdk/internal/net/http/MultiExchange.java
--- a/src/java.net.http/share/classes/jdk/internal/net/http/MultiExchange.java
+++ b/src/java.net.http/share/classes/jdk/internal/net/http/MultiExchange.java
@@ -86,7 +86,7 @@
Exchange<T> previous;
volatile Throwable retryCause;
volatile boolean expiredOnce;
- volatile HttpResponse<T> response = null;
+ volatile HttpResponse<T> response;
// Maximum number of times a request will be retried/redirected
// for any reason
@@ -109,7 +109,7 @@
*/
volatile AuthenticationFilter.AuthInfo serverauth, proxyauth;
// RedirectHandler
- volatile int numberOfRedirects = 0;
+ volatile int numberOfRedirects;
// This class is used to keep track of the connection timeout
// across retries, when a ConnectException causes a retry.
diff --git a/src/java.net.http/share/classes/jdk/internal/net/http/ResponseContent.java b/src/java.net.http/share/classes/jdk/internal/net/http/ResponseContent.java
--- a/src/java.net.http/share/classes/jdk/internal/net/http/ResponseContent.java
+++ b/src/java.net.http/share/classes/jdk/internal/net/http/ResponseContent.java
@@ -133,12 +133,12 @@
final String dbgTag = ResponseContent.this.dbgTag + "/ChunkedBodyParser";
volatile Throwable closedExceptionally;
- volatile int partialChunklen = 0; // partially read chunk len
+ volatile int partialChunklen; // partially read chunk len
volatile int chunklen = -1; // number of bytes in chunk
volatile int bytesremaining; // number of bytes in chunk left to be read incl CRLF
- volatile boolean cr = false; // tryReadChunkLength has found CR
- volatile int chunkext = 0; // number of bytes already read in the chunk extension
- volatile int digits = 0; // number of chunkLength bytes already read
+ volatile boolean cr; // tryReadChunkLength has found CR
+ volatile int chunkext; // number of bytes already read in the chunk extension
+ volatile int digits; // number of chunkLength bytes already read
volatile int bytesToConsume; // number of bytes that still need to be consumed before proceeding
volatile ChunkState state = ChunkState.READING_LENGTH; // current state
volatile AbstractSubscription sub;
@@ -459,7 +459,7 @@
final String dbgTag = ResponseContent.this.dbgTag + "/UnknownLengthBodyParser";
volatile Throwable closedExceptionally;
volatile AbstractSubscription sub;
- volatile int breceived = 0;
+ volatile int breceived;
UnknownLengthBodyParser(Consumer<Throwable> onComplete) {
this.onComplete = onComplete;
diff --git a/src/java.rmi/share/classes/sun/rmi/server/Activation.java b/src/java.rmi/share/classes/sun/rmi/server/Activation.java
--- a/src/java.rmi/share/classes/sun/rmi/server/Activation.java
+++ b/src/java.rmi/share/classes/sun/rmi/server/Activation.java
@@ -194,11 +194,11 @@
private transient ActivationSystem systemStub;
private transient ActivationMonitor monitor;
private transient Registry registry;
- private transient volatile boolean shuttingDown = false;
+ private transient volatile boolean shuttingDown;
private transient volatile Object startupLock;
private transient Thread shutdownHook;
- private static ResourceBundle resources = null;
+ private static ResourceBundle resources;
/**
* Create an uninitialized instance of Activation that can be
@@ -1507,8 +1507,8 @@
/** descriptor for object */
ActivationDesc desc;
/** the stub (if active) */
- volatile transient MarshalledObject<? extends Remote> stub = null;
- volatile transient boolean removed = false;
+ volatile transient MarshalledObject<? extends Remote> stub;
+ volatile transient boolean removed;
ObjectEntry(ActivationDesc desc) {
this.desc = desc;
diff --git a/src/java.rmi/share/classes/sun/rmi/transport/Target.java b/src/java.rmi/share/classes/sun/rmi/transport/Target.java
--- a/src/java.rmi/share/classes/sun/rmi/transport/Target.java
+++ b/src/java.rmi/share/classes/sun/rmi/transport/Target.java
@@ -70,7 +70,7 @@
* the transport through which this target was exported and
* through which remote calls will be allowed
*/
- private volatile Transport exportedTransport = null;
+ private volatile Transport exportedTransport;
/** number to identify next callback thread created here */
private static int nextThreadNum = 0;
diff --git a/src/java.security.jgss/share/classes/javax/security/auth/kerberos/KeyImpl.java b/src/java.security.jgss/share/classes/javax/security/auth/kerberos/KeyImpl.java
--- a/src/java.security.jgss/share/classes/javax/security/auth/kerberos/KeyImpl.java
+++ b/src/java.security.jgss/share/classes/javax/security/auth/kerberos/KeyImpl.java
@@ -53,7 +53,7 @@
private transient byte[] keyBytes;
private transient int keyType;
- private transient volatile boolean destroyed = false;
+ private transient volatile boolean destroyed;
/**
diff --git a/src/java.security.jgss/share/classes/sun/security/krb5/internal/HostAddress.java b/src/java.security.jgss/share/classes/sun/security/krb5/internal/HostAddress.java
--- a/src/java.security.jgss/share/classes/sun/security/krb5/internal/HostAddress.java
+++ b/src/java.security.jgss/share/classes/sun/security/krb5/internal/HostAddress.java
@@ -64,7 +64,7 @@
private static InetAddress localInetAddress; //caches local inet address
private static final boolean DEBUG = sun.security.krb5.internal.Krb5.DEBUG;
- private volatile int hashCode = 0;
+ private volatile int hashCode;
private HostAddress(int dummy) {}
diff --git a/src/java.security.jgss/share/classes/sun/security/krb5/internal/HostAddresses.java b/src/java.security.jgss/share/classes/sun/security/krb5/internal/HostAddresses.java
--- a/src/java.security.jgss/share/classes/sun/security/krb5/internal/HostAddresses.java
+++ b/src/java.security.jgss/share/classes/sun/security/krb5/internal/HostAddresses.java
@@ -66,7 +66,7 @@
public class HostAddresses implements Cloneable {
private static boolean DEBUG = sun.security.krb5.internal.Krb5.DEBUG;
private HostAddress[] addresses = null;
- private volatile int hashCode = 0;
+ private volatile int hashCode;
// Warning: called by nativeccache.c
public HostAddresses(HostAddress[] new_addresses) throws IOException {
diff --git a/src/java.sql/share/classes/java/sql/DriverManager.java b/src/java.sql/share/classes/java/sql/DriverManager.java
--- a/src/java.sql/share/classes/java/sql/DriverManager.java
+++ b/src/java.sql/share/classes/java/sql/DriverManager.java
@@ -84,9 +84,9 @@
// List of registered JDBC drivers
private final static CopyOnWriteArrayList<DriverInfo> registeredDrivers = new CopyOnWriteArrayList<>();
- private static volatile int loginTimeout = 0;
- private static volatile java.io.PrintWriter logWriter = null;
- private static volatile java.io.PrintStream logStream = null;
+ private static volatile int loginTimeout;
+ private static volatile java.io.PrintWriter logWriter;
+ private static volatile java.io.PrintStream logStream;
// Used in println() to synchronize logWriter
private final static Object logSync = new Object();
// Used in ensureDriversInitialized() to synchronize driversInitialized
diff --git a/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/xpath/regex/Token.java b/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/xpath/regex/Token.java
--- a/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/xpath/regex/Token.java
+++ b/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/xpath/regex/Token.java
@@ -592,8 +592,8 @@
}
// ------------------------------------------------------
- private static volatile Map<String, Token> categories = null;
- private static volatile Map<String, Token> categories2 = null;
+ private static volatile Map<String, Token> categories;
+ private static volatile Map<String, Token> categories2;
private static final Object lock = new Object();
private static final String[] categoryNames = {
"Cn", "Lu", "Ll", "Lt", "Lm", "Lo", "Mn", "Me", "Mc", "Nd",
diff --git a/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/xs/XSComplexTypeDecl.java b/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/xs/XSComplexTypeDecl.java
--- a/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/xs/XSComplexTypeDecl.java
+++ b/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/xs/XSComplexTypeDecl.java
@@ -75,10 +75,10 @@
XSParticleDecl fParticle = null;
// if there is a particle, the content model corresponding to that particle
- volatile XSCMValidator fCMValidator = null;
+ volatile XSCMValidator fCMValidator;
// the content model that's sufficient for computing UPA
- volatile XSCMValidator fUPACMValidator = null;
+ volatile XSCMValidator fUPACMValidator;
// list of annotations affiliated with this type
XSObjectListImpl fAnnotations = null;
diff --git a/src/java.xml/share/classes/com/sun/org/apache/xml/internal/utils/SafeThread.java b/src/java.xml/share/classes/com/sun/org/apache/xml/internal/utils/SafeThread.java
--- a/src/java.xml/share/classes/com/sun/org/apache/xml/internal/utils/SafeThread.java
+++ b/src/java.xml/share/classes/com/sun/org/apache/xml/internal/utils/SafeThread.java
@@ -31,7 +31,7 @@
* once.
*/
public class SafeThread extends Thread {
- private volatile boolean ran = false;
+ private volatile boolean ran;
private static final AtomicInteger threadNumber = new AtomicInteger(1);
private static String threadName() {
diff --git a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/utilities/WorkerThread.java b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/utilities/WorkerThread.java
--- a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/utilities/WorkerThread.java
+++ b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/utilities/WorkerThread.java
@@ -28,7 +28,7 @@
tasks in the form of Runnables. */
public class WorkerThread {
- private volatile boolean done = false;
+ private volatile boolean done;
private MessageQueueBackend mqb;
private MessageQueue mq;
diff --git a/src/jdk.httpserver/share/classes/sun/net/httpserver/ServerImpl.java b/src/jdk.httpserver/share/classes/sun/net/httpserver/ServerImpl.java
--- a/src/jdk.httpserver/share/classes/sun/net/httpserver/ServerImpl.java
+++ b/src/jdk.httpserver/share/classes/sun/net/httpserver/ServerImpl.java
@@ -63,12 +63,12 @@
private Set<HttpConnection> rspConnections;
private List<Event> events;
private Object lolock = new Object();
- private volatile boolean finished = false;
- private volatile boolean terminating = false;
+ private volatile boolean finished;
+ private volatile boolean terminating;
private boolean bound = false;
private boolean started = false;
private volatile long time; /* current time */
- private volatile long subticks = 0;
+ private volatile long subticks;
private volatile long ticks; /* number of clock ticks since server started */
private HttpServer wrapper;