changeset 15666:e72df94364e3 jdk-9+137

Merge
author ddehaven
date Mon, 19 Sep 2016 10:11:34 -0700
parents e1d133b6bce5 (current diff) 29ecac30ecae (diff)
children cf207e188ae2 4d186e8bbe9a aef4e02825a3
files test/sun/security/pkcs11/nss/lib/windows-amd64/libnspr4.dll test/sun/security/pkcs11/nss/lib/windows-amd64/libnspr4.lib test/sun/security/pkcs11/nss/lib/windows-amd64/libplc4.dll test/sun/security/pkcs11/nss/lib/windows-amd64/libplc4.lib test/sun/security/pkcs11/nss/lib/windows-amd64/libplds4.dll test/sun/security/pkcs11/nss/lib/windows-amd64/libplds4.lib test/sun/security/pkcs11/nss/lib/windows-i586/libnspr4.dll test/sun/security/pkcs11/nss/lib/windows-i586/libnspr4.lib test/sun/security/pkcs11/nss/lib/windows-i586/libplc4.dll test/sun/security/pkcs11/nss/lib/windows-i586/libplc4.lib test/sun/security/pkcs11/nss/lib/windows-i586/libplds4.dll test/sun/security/pkcs11/nss/lib/windows-i586/libplds4.lib test/sun/security/pkcs11/nss/src/nss-3.16_nspr-4.10_src.tar.gz test/sun/security/pkcs11/nss/src/nss-3.16_nspr-4.10_src.tar.gz.sha256
diffstat 296 files changed, 4106 insertions(+), 1611 deletions(-) [+]
line wrap: on
line diff
--- a/.hgtags	Wed Sep 14 15:29:23 2016 -0700
+++ b/.hgtags	Mon Sep 19 10:11:34 2016 -0700
@@ -378,3 +378,4 @@
 3cdae27c90b5e41afe75eab904fda19fac076330 jdk-9+133
 803adcd526d74ae0b64948d1f8260c2dbe514779 jdk-9+134
 021369229cfd0b5feb76834b2ea498f47f43c0f3 jdk-9+135
+54c5931849a33a363e03fdffa141503f5cc4779d jdk-9+136
--- a/make/mapfiles/libattach/mapfile-linux	Wed Sep 14 15:29:23 2016 -0700
+++ b/make/mapfiles/libattach/mapfile-linux	Mon Sep 19 10:11:34 2016 -0700
@@ -30,8 +30,6 @@
 	    Java_sun_tools_attach_VirtualMachineImpl_checkPermissions;
 	    Java_sun_tools_attach_VirtualMachineImpl_close;
 	    Java_sun_tools_attach_VirtualMachineImpl_connect;
-	    Java_sun_tools_attach_VirtualMachineImpl_getLinuxThreadsManager;
-	    Java_sun_tools_attach_VirtualMachineImpl_isLinuxThreads;
 	    Java_sun_tools_attach_VirtualMachineImpl_open;
 	    Java_sun_tools_attach_VirtualMachineImpl_sendQuitTo;
             Java_sun_tools_attach_VirtualMachineImpl_sendQuitToChildrenOf;
--- a/make/mapfiles/libjava/mapfile-vers	Wed Sep 14 15:29:23 2016 -0700
+++ b/make/mapfiles/libjava/mapfile-vers	Mon Sep 19 10:11:34 2016 -0700
@@ -176,6 +176,9 @@
 		Java_java_lang_ProcessHandleImpl_00024Info_info0;
 		Java_java_lang_ProcessImpl_init;
 		Java_java_lang_ProcessImpl_forkAndExec;
+		Java_java_lang_ref_Reference_getAndClearReferencePendingList;
+		Java_java_lang_ref_Reference_hasReferencePendingList;
+		Java_java_lang_ref_Reference_waitForReferencePendingList;
 		Java_java_lang_reflect_Array_get;
 		Java_java_lang_reflect_Array_getBoolean;
 		Java_java_lang_reflect_Array_getByte;
--- a/src/java.base/aix/native/libnet/aix_close.c	Wed Sep 14 15:29:23 2016 -0700
+++ b/src/java.base/aix/native/libnet/aix_close.c	Mon Sep 19 10:11:34 2016 -0700
@@ -410,6 +410,10 @@
     BLOCKING_IO_RETURN_INT( s, recv(s, buf, len, 0) );
 }
 
+int NET_NonBlockingRead(int s, void* buf, size_t len) {
+    BLOCKING_IO_RETURN_INT(s, recv(s, buf, len, MSG_NONBLOCK));
+}
+
 int NET_ReadV(int s, const struct iovec * vector, int count) {
     BLOCKING_IO_RETURN_INT( s, readv(s, vector, count) );
 }
@@ -503,8 +507,8 @@
  * Auto restarts with adjusted timeout if interrupted by
  * signal other than our wakeup signal.
  */
-int NET_Timeout(int s, long timeout) {
-    long prevtime = 0, newtime;
+int NET_Timeout0(int s, long timeout, long currentTime) {
+    long prevtime = currentTime, newtime;
     struct timeval t;
     fdEntry_t *fdEntry = getFdEntry(s);
 
@@ -516,14 +520,6 @@
         return -1;
     }
 
-    /*
-     * Pick up current time as may need to adjust timeout
-     */
-    if (timeout > 0) {
-        gettimeofday(&t, NULL);
-        prevtime = t.tv_sec * 1000  +  t.tv_usec / 1000;
-    }
-
     for(;;) {
         struct pollfd pfd;
         int rv;
--- a/src/java.base/linux/native/libnet/linux_close.c	Wed Sep 14 15:29:23 2016 -0700
+++ b/src/java.base/linux/native/libnet/linux_close.c	Mon Sep 19 10:11:34 2016 -0700
@@ -367,6 +367,10 @@
     BLOCKING_IO_RETURN_INT( s, recv(s, buf, len, 0) );
 }
 
+int NET_NonBlockingRead(int s, void* buf, size_t len) {
+    BLOCKING_IO_RETURN_INT( s, recv(s, buf, len, MSG_DONTWAIT) );
+}
+
 int NET_ReadV(int s, const struct iovec * vector, int count) {
     BLOCKING_IO_RETURN_INT( s, readv(s, vector, count) );
 }
@@ -406,8 +410,8 @@
  * Auto restarts with adjusted timeout if interrupted by
  * signal other than our wakeup signal.
  */
-int NET_Timeout(int s, long timeout) {
-    long prevtime = 0, newtime;
+int NET_Timeout0(int s, long timeout, long currentTime) {
+    long prevtime = currentTime, newtime;
     struct timeval t;
     fdEntry_t *fdEntry = getFdEntry(s);
 
@@ -419,14 +423,6 @@
         return -1;
     }
 
-    /*
-     * Pick up current time as may need to adjust timeout
-     */
-    if (timeout > 0) {
-        gettimeofday(&t, NULL);
-        prevtime = t.tv_sec * 1000  +  t.tv_usec / 1000;
-    }
-
     for(;;) {
         struct pollfd pfd;
         int rv;
--- a/src/java.base/macosx/native/libnet/bsd_close.c	Wed Sep 14 15:29:23 2016 -0700
+++ b/src/java.base/macosx/native/libnet/bsd_close.c	Mon Sep 19 10:11:34 2016 -0700
@@ -371,6 +371,10 @@
     BLOCKING_IO_RETURN_INT( s, recv(s, buf, len, 0) );
 }
 
+int NET_NonBlockingRead(int s, void* buf, size_t len) {
+    BLOCKING_IO_RETURN_INT( s, recv(s, buf, len, MSG_DONTWAIT));
+}
+
 int NET_ReadV(int s, const struct iovec * vector, int count) {
     BLOCKING_IO_RETURN_INT( s, readv(s, vector, count) );
 }
@@ -410,8 +414,8 @@
  * Auto restarts with adjusted timeout if interrupted by
  * signal other than our wakeup signal.
  */
-int NET_Timeout(int s, long timeout) {
-    long prevtime = 0, newtime;
+int NET_Timeout0(int s, long timeout, long currentTime) {
+    long prevtime = currentTime, newtime;
     struct timeval t, *tp = &t;
     fd_set fds;
     fd_set* fdsp = NULL;
@@ -432,9 +436,6 @@
      */
     if (timeout > 0) {
         /* Timed */
-        struct timeval now;
-        gettimeofday(&now, NULL);
-        prevtime = now.tv_sec * 1000  +  now.tv_usec / 1000;
         t.tv_sec = timeout / 1000;
         t.tv_usec = (timeout % 1000) * 1000;
     } else if (timeout < 0) {
--- a/src/java.base/share/classes/java/lang/ref/Reference.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/src/java.base/share/classes/java/lang/ref/Reference.java	Mon Sep 19 10:11:34 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2016, 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
@@ -110,22 +110,6 @@
     private transient Reference<T> discovered;  /* used by VM */
 
 
-    /* Object used to synchronize with the garbage collector.  The collector
-     * must acquire this lock at the beginning of each collection cycle.  It is
-     * therefore critical that any code holding this lock complete as quickly
-     * as possible, allocate no new objects, and avoid calling user code.
-     */
-    private static class Lock { }
-    private static Lock lock = new Lock();
-
-
-    /* List of References waiting to be enqueued.  The collector adds
-     * References to this list, while the Reference-handler thread removes
-     * them.  This list is protected by the above lock object. The
-     * list uses the discovered field to link its elements.
-     */
-    private static Reference<Object> pending = null;
-
     /* High-priority thread to enqueue pending References
      */
     private static class ReferenceHandler extends Thread {
@@ -139,10 +123,9 @@
         }
 
         static {
-            // pre-load and initialize InterruptedException and Cleaner classes
-            // so that we don't get into trouble later in the run loop if there's
-            // memory shortage while loading/initializing them lazily.
-            ensureClassInitialized(InterruptedException.class);
+            // pre-load and initialize Cleaner class so that we don't
+            // get into trouble later in the run loop if there's
+            // memory shortage while loading/initializing it lazily.
             ensureClassInitialized(Cleaner.class);
         }
 
@@ -152,72 +135,80 @@
 
         public void run() {
             while (true) {
-                tryHandlePending(true);
+                processPendingReferences();
             }
         }
     }
 
-    /**
-     * Try handle pending {@link Reference} if there is one.<p>
-     * Return {@code true} as a hint that there might be another
-     * {@link Reference} pending or {@code false} when there are no more pending
-     * {@link Reference}s at the moment and the program can do some other
-     * useful work instead of looping.
-     *
-     * @param waitForNotify if {@code true} and there was no pending
-     *                      {@link Reference}, wait until notified from VM
-     *                      or interrupted; if {@code false}, return immediately
-     *                      when there is no pending {@link Reference}.
-     * @return {@code true} if there was a {@link Reference} pending and it
-     *         was processed, or we waited for notification and either got it
-     *         or thread was interrupted before being notified;
-     *         {@code false} otherwise.
+    /* Atomically get and clear (set to null) the VM's pending list.
+     */
+    private static native Reference<Object> getAndClearReferencePendingList();
+
+    /* Test whether the VM's pending list contains any entries.
+     */
+    private static native boolean hasReferencePendingList();
+
+    /* Wait until the VM's pending list may be non-null.
      */
-    static boolean tryHandlePending(boolean waitForNotify) {
-        Reference<Object> r;
-        Cleaner c;
-        try {
-            synchronized (lock) {
-                if (pending != null) {
-                    r = pending;
-                    // 'instanceof' might throw OutOfMemoryError sometimes
-                    // so do this before un-linking 'r' from the 'pending' chain...
-                    c = r instanceof Cleaner ? (Cleaner) r : null;
-                    // unlink 'r' from 'pending' chain
-                    pending = r.discovered;
-                    r.discovered = null;
-                } else {
-                    // The waiting on the lock may cause an OutOfMemoryError
-                    // because it may try to allocate exception objects.
-                    if (waitForNotify) {
-                        lock.wait();
-                    }
-                    // retry if waited
-                    return waitForNotify;
+    private static native void waitForReferencePendingList();
+
+    private static final Object processPendingLock = new Object();
+    private static boolean processPendingActive = false;
+
+    private static void processPendingReferences() {
+        // Only the singleton reference processing thread calls
+        // waitForReferencePendingList() and getAndClearReferencePendingList().
+        // These are separate operations to avoid a race with other threads
+        // that are calling waitForReferenceProcessing().
+        waitForReferencePendingList();
+        Reference<Object> pendingList;
+        synchronized (processPendingLock) {
+            pendingList = getAndClearReferencePendingList();
+            processPendingActive = true;
+        }
+        while (pendingList != null) {
+            Reference<Object> ref = pendingList;
+            pendingList = ref.discovered;
+            ref.discovered = null;
+
+            if (ref instanceof Cleaner) {
+                ((Cleaner)ref).clean();
+                // Notify any waiters that progress has been made.
+                // This improves latency for nio.Bits waiters, which
+                // are the only important ones.
+                synchronized (processPendingLock) {
+                    processPendingLock.notifyAll();
                 }
+            } else {
+                ReferenceQueue<? super Object> q = ref.queue;
+                if (q != ReferenceQueue.NULL) q.enqueue(ref);
             }
-        } catch (OutOfMemoryError x) {
-            // Give other threads CPU time so they hopefully drop some live references
-            // and GC reclaims some space.
-            // Also prevent CPU intensive spinning in case 'r instanceof Cleaner' above
-            // persistently throws OOME for some time...
-            Thread.yield();
-            // retry
-            return true;
-        } catch (InterruptedException x) {
-            // retry
-            return true;
+        }
+        // Notify any waiters of completion of current round.
+        synchronized (processPendingLock) {
+            processPendingActive = false;
+            processPendingLock.notifyAll();
         }
+    }
 
-        // Fast path for cleaners
-        if (c != null) {
-            c.clean();
-            return true;
+    // Wait for progress in reference processing.
+    //
+    // Returns true after waiting (for notification from the reference
+    // processing thread) if either (1) the VM has any pending
+    // references, or (2) the reference processing thread is
+    // processing references. Otherwise, returns false immediately.
+    private static boolean waitForReferenceProcessing()
+        throws InterruptedException
+    {
+        synchronized (processPendingLock) {
+            if (processPendingActive || hasReferencePendingList()) {
+                // Wait for progress, not necessarily completion.
+                processPendingLock.wait();
+                return true;
+            } else {
+                return false;
+            }
         }
-
-        ReferenceQueue<? super Object> q = r.queue;
-        if (q != ReferenceQueue.NULL) q.enqueue(r);
-        return true;
     }
 
     static {
@@ -236,8 +227,10 @@
         // provide access in SharedSecrets
         SharedSecrets.setJavaLangRefAccess(new JavaLangRefAccess() {
             @Override
-            public boolean tryHandlePendingReference() {
-                return tryHandlePending(false);
+            public boolean waitForReferenceProcessing()
+                throws InterruptedException
+            {
+                return Reference.waitForReferenceProcessing();
             }
         });
     }
--- a/src/java.base/share/classes/java/nio/Bits.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/src/java.base/share/classes/java/nio/Bits.java	Mon Sep 19 10:11:34 2016 -0700
@@ -131,23 +131,38 @@
         }
 
         final JavaLangRefAccess jlra = SharedSecrets.getJavaLangRefAccess();
-
-        // retry while helping enqueue pending Reference objects
-        // which includes executing pending Cleaner(s) which includes
-        // Cleaner(s) that free direct buffer memory
-        while (jlra.tryHandlePendingReference()) {
-            if (tryReserveMemory(size, cap)) {
-                return;
-            }
-        }
-
-        // trigger VM's Reference processing
-        System.gc();
-
-        // a retry loop with exponential back-off delays
-        // (this gives VM some time to do it's job)
         boolean interrupted = false;
         try {
+
+            // Retry allocation until success or there are no more
+            // references (including Cleaners that might free direct
+            // buffer memory) to process and allocation still fails.
+            boolean refprocActive;
+            do {
+                try {
+                    refprocActive = jlra.waitForReferenceProcessing();
+                } catch (InterruptedException e) {
+                    // Defer interrupts and keep trying.
+                    interrupted = true;
+                    refprocActive = true;
+                }
+                if (tryReserveMemory(size, cap)) {
+                    return;
+                }
+            } while (refprocActive);
+
+            // trigger VM's Reference processing
+            System.gc();
+
+            // A retry loop with exponential back-off delays.
+            // Sometimes it would suffice to give up once reference
+            // processing is complete.  But if there are many threads
+            // competing for memory, this gives more opportunities for
+            // any given thread to make progress.  In particular, this
+            // seems to be enough for a stress test like
+            // DirectBufferAllocTest to (usually) succeed, while
+            // without it that test likely fails.  Since failure here
+            // ends in OOME, there's no need to hurry.
             long sleepTime = 1;
             int sleeps = 0;
             while (true) {
@@ -157,14 +172,14 @@
                 if (sleeps >= MAX_SLEEPS) {
                     break;
                 }
-                if (!jlra.tryHandlePendingReference()) {
-                    try {
+                try {
+                    if (!jlra.waitForReferenceProcessing()) {
                         Thread.sleep(sleepTime);
                         sleepTime <<= 1;
                         sleeps++;
-                    } catch (InterruptedException e) {
-                        interrupted = true;
                     }
+                } catch (InterruptedException e) {
+                    interrupted = true;
                 }
             }
 
--- a/src/java.base/share/classes/java/util/ListResourceBundle.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/src/java.base/share/classes/java/util/ListResourceBundle.java	Mon Sep 19 10:11:34 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1996, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1996, 2016, 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
@@ -206,5 +206,5 @@
         lookup = temp;
     }
 
-    private Map<String,Object> lookup = null;
+    private volatile Map<String,Object> lookup = null;
 }
--- a/src/java.base/share/classes/java/util/PropertyResourceBundle.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/src/java.base/share/classes/java/util/PropertyResourceBundle.java	Mon Sep 19 10:11:34 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1996, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1996, 2016, 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
@@ -46,8 +46,6 @@
 import java.nio.charset.MalformedInputException;
 import java.nio.charset.StandardCharsets;
 import java.nio.charset.UnmappableCharacterException;
-import java.security.AccessController;
-import java.util.Locale;
 import sun.security.action.GetPropertyAction;
 import sun.util.PropertyResourceBundleCharset;
 import sun.util.ResourceBundleEnumeration;
@@ -236,5 +234,5 @@
 
     // ==================privates====================
 
-    private Map<String,Object> lookup;
+    private final Map<String,Object> lookup;
 }
--- a/src/java.base/share/classes/java/util/jar/JarFile.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/src/java.base/share/classes/java/util/jar/JarFile.java	Mon Sep 19 10:11:34 2016 -0700
@@ -536,19 +536,6 @@
      * @return an ordered {@code Stream} of entries in this jar file
      * @throws IllegalStateException if the jar file has been closed
      * @since 1.8
-     *
-     * @apiNote  A versioned view of the stream obtained from a {@code JarFile}
-     * configured to process a multi-release jar file can be created with code
-     * similar to the following:
-     * <pre>
-     * {@code
-     *     Stream<JarEntry> versionedStream(JarFile jf) {
-     *         return jf.stream().map(JarEntry::getName)
-     *                  .filter(name -> !name.startsWith("META-INF/versions/"))
-     *                  .map(jf::getJarEntry);
-     *     }
-     * }
-     * </pre>
      */
     public Stream<JarEntry> stream() {
         return StreamSupport.stream(Spliterators.spliterator(
@@ -571,7 +558,7 @@
 
     private ZipEntry getVersionedEntry(ZipEntry ze) {
         ZipEntry vze = null;
-        if (BASE_VERSION_MAJOR < versionMajor && !ze.isDirectory()) {
+        if (BASE_VERSION_MAJOR < versionMajor) {
             String name = ze.getName();
             if (!name.startsWith(META_INF)) {
                 vze = searchForVersionedEntry(versionMajor, name);
--- a/src/java.base/share/classes/jdk/internal/misc/JavaLangRefAccess.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/src/java.base/share/classes/jdk/internal/misc/JavaLangRefAccess.java	Mon Sep 19 10:11:34 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2016, 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
@@ -28,12 +28,12 @@
 public interface JavaLangRefAccess {
 
     /**
-     * Help ReferenceHandler thread process next pending
-     * {@link java.lang.ref.Reference}
+     * Wait for progress in {@link java.lang.ref.Reference}
+     * processing.  If there aren't any pending {@link
+     * java.lang.ref.Reference}s, return immediately.
      *
-     * @return {@code true} if there was a pending reference and it
-     *         was enqueue-ed or {@code false} if there was no
-     *         pending reference
+     * @return {@code true} if there were any pending
+     * {@link java.lang.ref.Reference}s, {@code false} otherwise.
      */
-    boolean tryHandlePendingReference();
+    boolean waitForReferenceProcessing() throws InterruptedException;
 }
--- a/src/java.base/share/classes/jdk/internal/misc/Unsafe.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/src/java.base/share/classes/jdk/internal/misc/Unsafe.java	Mon Sep 19 10:11:34 2016 -0700
@@ -1197,6 +1197,9 @@
         if (hostClass == null || data == null) {
             throw new NullPointerException();
         }
+        if (hostClass.isArray() || hostClass.isPrimitive()) {
+            throw new IllegalArgumentException();
+        }
 
         return defineAnonymousClass0(hostClass, data, cpPatches);
     }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/java.base/share/classes/jdk/internal/util/jar/VersionedStream.java	Mon Sep 19 10:11:34 2016 -0700
@@ -0,0 +1,85 @@
+/*
+ * Copyright (c) 2016, 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
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package jdk.internal.util.jar;
+
+import java.util.Objects;
+import java.util.jar.JarEntry;
+import java.util.jar.JarFile;
+import java.util.stream.Stream;
+
+public class VersionedStream {
+    private static final String META_INF_VERSIONS = "META-INF/versions/";
+
+    /**
+     * Returns a stream of versioned entries, derived from the base names of
+     * all entries in a multi-release {@code JarFile} that are present either in
+     * the base directory or in any versioned directory with a version number
+     * less than or equal to the {@code Runtime.Version::major} that the
+     * {@code JarFile} was opened with.  These versioned entries are aliases
+     * for the real entries -- i.e. the names are base names and the content
+     * may come from a versioned directory entry.  If the {@code jarFile} is not
+     * a multi-release jar, a stream of all entries is returned.
+     *
+     * @param jf the input JarFile
+     * @return stream of entries
+     * @since 9
+     */
+    public static Stream<JarEntry> stream(JarFile jf) {
+        if (jf.isMultiRelease()) {
+            int version = jf.getVersion().major();
+            return jf.stream()
+                    .map(je -> getBaseSuffix(je, version))
+                    .filter(Objects::nonNull)
+                    .distinct()
+                    .map(jf::getJarEntry);
+        }
+        return jf.stream();
+    }
+
+    private static String getBaseSuffix(JarEntry je, int version) {
+        String name = je.getName();
+        if (name.startsWith(META_INF_VERSIONS)) {
+            int len = META_INF_VERSIONS.length();
+            int index = name.indexOf('/', len);
+            if (index == -1 || index == (name.length() - 1)) {
+                // filter out META-INF/versions/* and META-INF/versions/*/
+                return null;
+            }
+            try {
+                if (Integer.parseInt(name, len, index, 10) > version) {
+                    // not an integer
+                    return null;
+                }
+            } catch (NumberFormatException x) {
+                // silently remove malformed entries
+                return null;
+            }
+            // We know name looks like META-INF/versions/*/*
+            return name.substring(index + 1);
+        }
+        return name;
+    }
+}
--- a/src/java.base/share/classes/module-info.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/src/java.base/share/classes/module-info.java	Mon Sep 19 10:11:34 2016 -0700
@@ -143,7 +143,8 @@
     exports jdk.internal.org.objectweb.asm.signature to
         jdk.scripting.nashorn;
     exports jdk.internal.loader to
-        java.instrument;
+        java.instrument,
+        java.logging;
     exports jdk.internal.math to
         java.desktop;
     exports jdk.internal.module to
--- a/src/java.base/share/classes/sun/launcher/resources/launcher.properties	Wed Sep 14 15:29:23 2016 -0700
+++ b/src/java.base/share/classes/sun/launcher/resources/launcher.properties	Mon Sep 19 10:11:34 2016 -0700
@@ -103,34 +103,42 @@
 
 # Translators please note do not translate the options themselves
 java.launcher.X.usage=\
-\    -Xmixed           mixed mode execution (default)\n\
-\    -Xint             interpreted mode execution only\n\
+\    -Xbatch           disable background compilation\n\
 \    -Xbootclasspath/a:<directories and zip/jar files separated by {0}>\n\
 \                      append to end of bootstrap class path\n\
+\    -Xcheck:jni       perform additional checks for JNI functions\n\
+\    -Xcomp            forces compilation of methods on first invocation\n\
+\    -Xdebug           provided for backward compatibility\n\
 \    -Xdiag            show additional diagnostic messages\n\
 \    -Xdiag:resolver   show resolver diagnostic messages\n\
-\    -Xnoclassgc       disable class garbage collection\n\
+\    -Xdisable-@files  disable further argument file expansion\n\
+\    -Xfuture          enable strictest checks, anticipating future default\n\
+\    -Xint             interpreted mode execution only\n\
+\    -Xinternalversion\n\
+\                      displays more detailed JVM version information than the\n\
+\                      -version option\n\
 \    -Xloggc:<file>    log GC status to a file with time stamps\n\
-\    -Xbatch           disable background compilation\n\
+\    -Xmixed           mixed mode execution (default)\n\
+\    -Xmn<size>        sets the initial and maximum size (in bytes) of the heap\n\
+\                      for the young generation (nursery)\n\
 \    -Xms<size>        set initial Java heap size\n\
 \    -Xmx<size>        set maximum Java heap size\n\
-\    -Xss<size>        set java thread stack size\n\
+\    -Xnoclassgc       disable class garbage collection\n\
 \    -Xprof            output cpu profiling data\n\
-\    -Xfuture          enable strictest checks, anticipating future default\n\
 \    -Xrs              reduce use of OS signals by Java/VM (see documentation)\n\
-\    -Xcheck:jni       perform additional checks for JNI functions\n\
+\    -Xshare:auto      use shared class data if possible (default)\n\
 \    -Xshare:off       do not attempt to use shared class data\n\
-\    -Xshare:auto      use shared class data if possible (default)\n\
 \    -Xshare:on        require using shared class data, otherwise fail.\n\
 \    -XshowSettings    show all settings and continue\n\
 \    -XshowSettings:all\n\
 \                      show all settings and continue\n\
-\    -XshowSettings:vm show all vm related settings and continue\n\
+\    -XshowSettings:locale\n\
+\                      show all locale related settings and continue\n\
 \    -XshowSettings:properties\n\
 \                      show all property settings and continue\n\
-\    -XshowSettings:locale\n\
-\                      show all locale related settings and continue\n\
-\    -Xdisable-@files  disable further argument file expansion\n\
+\    -XshowSettings:vm show all vm related settings and continue\n\
+\    -Xss<size>        set java thread stack size\n\
+\    -Xverify          sets the mode of the bytecode verifier\n\
 \    --add-reads <module>=<target-module>(,<target-module>)*\n\
 \                      updates <module> to read <target-module>, regardless\n\
 \                      of module declaration. \n\
--- a/src/java.base/share/classes/sun/net/www/protocol/jar/JarURLConnection.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/src/java.base/share/classes/sun/net/www/protocol/jar/JarURLConnection.java	Mon Sep 19 10:11:34 2016 -0700
@@ -125,7 +125,9 @@
              * to get the jarFile, and set it as our permission.
              */
             if (getUseCaches()) {
+                boolean oldUseCaches = jarFileURLConnection.getUseCaches();
                 jarFileURLConnection = factory.getConnection(jarFile);
+                jarFileURLConnection.setUseCaches(oldUseCaches);
             }
 
             if ((entryName != null)) {
--- a/src/java.base/share/classes/sun/security/provider/certpath/OCSP.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/src/java.base/share/classes/sun/security/provider/certpath/OCSP.java	Mon Sep 19 10:11:34 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2009, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2009, 2016, 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
@@ -125,7 +125,7 @@
                 ("Exception while encoding OCSPRequest", e);
         }
         OCSPResponse ocspResponse = check(Collections.singletonList(certId),
-            responderURI, issuerCert, null, null,
+            responderURI, new OCSPResponse.IssuerInfo(issuerCert), null, null,
             Collections.<Extension>emptyList());
         return (RevocationStatus)ocspResponse.getSingleResponse(certId);
     }
@@ -173,7 +173,8 @@
                 ("Exception while encoding OCSPRequest", e);
         }
         OCSPResponse ocspResponse = check(Collections.singletonList(certId),
-            responderURI, issuerCert, responderCert, date, extensions);
+            responderURI, new OCSPResponse.IssuerInfo(issuerCert),
+            responderCert, date, extensions);
         return (RevocationStatus) ocspResponse.getSingleResponse(certId);
     }
 
@@ -182,7 +183,7 @@
      *
      * @param certIds the CertIds to be checked
      * @param responderURI the URI of the OCSP responder
-     * @param issuerCert the issuer's certificate
+     * @param issuerInfo the issuer's certificate and/or subject and public key
      * @param responderCert the OCSP responder's certificate
      * @param date the time the validity of the OCSP responder's certificate
      *    should be checked against. If null, the current time is used.
@@ -195,8 +196,8 @@
      * @throws CertPathValidatorException if an exception occurs while
      *    encoding the OCSP Request or validating the OCSP Response
      */
-    static OCSPResponse check(List<CertId> certIds, URI responderURI,
-                              X509Certificate issuerCert,
+        static OCSPResponse check(List<CertId> certIds, URI responderURI,
+                              OCSPResponse.IssuerInfo issuerInfo,
                               X509Certificate responderCert, Date date,
                               List<Extension> extensions)
         throws IOException, CertPathValidatorException
@@ -214,7 +215,7 @@
             ocspResponse = new OCSPResponse(response);
 
             // verify the response
-            ocspResponse.verify(certIds, issuerCert, responderCert, date,
+            ocspResponse.verify(certIds, issuerInfo, responderCert, date,
                     nonce);
         } catch (IOException ioe) {
             throw new CertPathValidatorException(
--- a/src/java.base/share/classes/sun/security/provider/certpath/OCSPResponse.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/src/java.base/share/classes/sun/security/provider/certpath/OCSPResponse.java	Mon Sep 19 10:11:34 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2016, 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
@@ -41,6 +41,7 @@
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 import java.util.Set;
 import javax.security.auth.x500.X500Principal;
 
@@ -373,8 +374,8 @@
         }
     }
 
-    void verify(List<CertId> certIds, X509Certificate issuerCert,
-                X509Certificate responderCert, Date date, byte[] nonce)
+    void verify(List<CertId> certIds, IssuerInfo issuerInfo,
+            X509Certificate responderCert, Date date, byte[] nonce)
         throws CertPathValidatorException
     {
         switch (responseStatus) {
@@ -414,7 +415,9 @@
             // Add the Issuing CA cert and/or Trusted Responder cert to the list
             // of certs from the OCSP response
             try {
-                certs.add(X509CertImpl.toImpl(issuerCert));
+                if (issuerInfo.getCertificate() != null) {
+                    certs.add(X509CertImpl.toImpl(issuerInfo.getCertificate()));
+                }
                 if (responderCert != null) {
                     certs.add(X509CertImpl.toImpl(responderCert));
                 }
@@ -464,7 +467,10 @@
         // Check whether the signer cert returned by the responder is trusted
         if (signerCert != null) {
             // Check if the response is signed by the issuing CA
-            if (signerCert.equals(issuerCert)) {
+            if (signerCert.getSubjectX500Principal().equals(
+                    issuerInfo.getName()) &&
+                    signerCert.getPublicKey().equals(
+                            issuerInfo.getPublicKey())) {
                 if (debug != null) {
                     debug.println("OCSP response is signed by the target's " +
                         "Issuing CA");
@@ -481,7 +487,7 @@
 
             // Check if the response is signed by an authorized responder
             } else if (signerCert.getIssuerX500Principal().equals(
-                       issuerCert.getSubjectX500Principal())) {
+                    issuerInfo.getName())) {
 
                 // Check for the OCSPSigning key purpose
                 try {
@@ -502,7 +508,8 @@
                 // Check algorithm constraints specified in security property
                 // "jdk.certpath.disabledAlgorithms".
                 AlgorithmChecker algChecker = new AlgorithmChecker(
-                                    new TrustAnchor(issuerCert, null));
+                        new TrustAnchor(issuerInfo.getName(),
+                                issuerInfo.getPublicKey(), null));
                 algChecker.init(false);
                 algChecker.check(signerCert, Collections.<String>emptySet());
 
@@ -540,7 +547,7 @@
 
                 // verify the signature
                 try {
-                    signerCert.verify(issuerCert.getPublicKey());
+                    signerCert.verify(issuerInfo.getPublicKey());
                     if (debug != null) {
                         debug.println("OCSP response is signed by an " +
                             "Authorized Responder");
@@ -971,4 +978,86 @@
             return sb.toString();
         }
     }
+
+    /**
+     * Helper class that allows consumers to pass in issuer information.  This
+     * will always consist of the issuer's name and public key, but may also
+     * contain a certificate if the originating data is in that form.
+     */
+    static final class IssuerInfo {
+        private final X509Certificate certificate;
+        private final X500Principal name;
+        private final PublicKey pubKey;
+
+        IssuerInfo(X509Certificate issuerCert) {
+            certificate = Objects.requireNonNull(issuerCert,
+                    "Constructor requires non-null certificate");
+            name = certificate.getSubjectX500Principal();
+            pubKey = certificate.getPublicKey();
+        }
+
+        IssuerInfo(X500Principal subjectName, PublicKey key) {
+            certificate = null;
+            name = Objects.requireNonNull(subjectName,
+                    "Constructor requires non-null subject");
+            pubKey = Objects.requireNonNull(key,
+                    "Constructor requires non-null public key");
+        }
+
+        IssuerInfo(TrustAnchor anchor) {
+            certificate = anchor.getTrustedCert();
+            if (certificate != null) {
+                name = certificate.getSubjectX500Principal();
+                pubKey = certificate.getPublicKey();
+            } else {
+                name = anchor.getCA();
+                pubKey = anchor.getCAPublicKey();
+            }
+        }
+
+        /**
+         * Get the certificate in this IssuerInfo if present.
+         *
+         * @return the {@code X509Certificate} used to create this IssuerInfo
+         * object, or {@code null} if a certificate was not used in its
+         * creation.
+         */
+        X509Certificate getCertificate() {
+            return certificate;
+        }
+
+        /**
+         * Get the name of this issuer.
+         *
+         * @return an {@code X500Principal} corresponding to this issuer's
+         * name.  If derived from an issuer's {@code X509Certificate} this
+         * would be equivalent to the certificate subject name.
+         */
+        X500Principal getName() {
+            return name;
+        }
+
+        /**
+         * Get the public key for this issuer.
+         *
+         * @return a {@code PublicKey} for this issuer.
+         */
+        PublicKey getPublicKey() {
+            return pubKey;
+        }
+
+        /**
+         * Create a string representation of this IssuerInfo.
+         *
+         * @return a {@code String} form of this IssuerInfo object.
+         */
+        @Override
+        public String toString() {
+            StringBuilder sb = new StringBuilder();
+            sb.append("Issuer Info:\n");
+            sb.append("Name: ").append(name.toString()).append("\n");
+            sb.append("Public Key:\n").append(pubKey.toString()).append("\n");
+            return sb.toString();
+        }
+    }
 }
--- a/src/java.base/share/classes/sun/security/provider/certpath/RevocationChecker.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/src/java.base/share/classes/sun/security/provider/certpath/RevocationChecker.java	Mon Sep 19 10:11:34 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2016, 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
@@ -61,12 +61,12 @@
     private List<CertStore> certStores;
     private Map<X509Certificate, byte[]> ocspResponses;
     private List<Extension> ocspExtensions;
-    private boolean legacy;
+    private final boolean legacy;
     private LinkedList<CertPathValidatorException> softFailExceptions =
         new LinkedList<>();
 
     // state variables
-    private X509Certificate issuerCert;
+    private OCSPResponse.IssuerInfo issuerInfo;
     private PublicKey prevPubKey;
     private boolean crlSignFlag;
     private int certIndex;
@@ -301,9 +301,9 @@
                 CertPathValidatorException("forward checking not supported");
         }
         if (anchor != null) {
-            issuerCert = anchor.getTrustedCert();
-            prevPubKey = (issuerCert != null) ? issuerCert.getPublicKey()
-                                              : anchor.getCAPublicKey();
+            issuerInfo = new OCSPResponse.IssuerInfo(anchor);
+            prevPubKey = issuerInfo.getPublicKey();
+
         }
         crlSignFlag = true;
         if (params != null && params.certPath() != null) {
@@ -437,7 +437,7 @@
     private void updateState(X509Certificate cert)
         throws CertPathValidatorException
     {
-        issuerCert = cert;
+        issuerInfo = new OCSPResponse.IssuerInfo(cert);
 
         // Make new public key if parameters are missing
         PublicKey pubKey = cert.getPublicKey();
@@ -708,14 +708,8 @@
         OCSPResponse response = null;
         CertId certId = null;
         try {
-            if (issuerCert != null) {
-                certId = new CertId(issuerCert,
-                                    currCert.getSerialNumberObject());
-            } else {
-                // must be an anchor name and key
-                certId = new CertId(anchor.getCA(), anchor.getCAPublicKey(),
-                                    currCert.getSerialNumberObject());
-            }
+            certId = new CertId(issuerInfo.getName(), issuerInfo.getPublicKey(),
+                    currCert.getSerialNumberObject());
 
             // check if there is a cached OCSP response available
             byte[] responseBytes = ocspResponses.get(cert);
@@ -732,8 +726,8 @@
                         nonce = ext.getValue();
                     }
                 }
-                response.verify(Collections.singletonList(certId), issuerCert,
-                                responderCert, params.date(), nonce);
+                response.verify(Collections.singletonList(certId), issuerInfo,
+                        responderCert, params.date(), nonce);
 
             } else {
                 URI responderURI = (this.responderURI != null)
@@ -746,8 +740,8 @@
                 }
 
                 response = OCSP.check(Collections.singletonList(certId),
-                                      responderURI, issuerCert, responderCert,
-                                      null, ocspExtensions);
+                                      responderURI, issuerInfo,
+                                      responderCert, null, ocspExtensions);
             }
         } catch (IOException e) {
             throw new CertPathValidatorException(
--- a/src/java.base/share/native/include/jvm.h	Wed Sep 14 15:29:23 2016 -0700
+++ b/src/java.base/share/native/include/jvm.h	Mon Sep 19 10:11:34 2016 -0700
@@ -282,6 +282,18 @@
 JVM_GetSystemPackages(JNIEnv *env);
 
 /*
+ * java.lang.ref.Reference
+ */
+JNIEXPORT jobject JNICALL
+JVM_GetAndClearReferencePendingList(JNIEnv *env);
+
+JNIEXPORT jboolean JNICALL
+JVM_HasReferencePendingList(JNIEnv *env);
+
+JNIEXPORT void JNICALL
+JVM_WaitForReferencePendingList(JNIEnv *env);
+
+/*
  * java.io.ObjectInputStream
  */
 JNIEXPORT jobject JNICALL
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/java.base/share/native/libjava/Reference.c	Mon Sep 19 10:11:34 2016 -0700
@@ -0,0 +1,45 @@
+/*
+ * Copyright (c) 2016, 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
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+#include "jvm.h"
+#include "java_lang_ref_Reference.h"
+
+JNIEXPORT jobject JNICALL
+Java_java_lang_ref_Reference_getAndClearReferencePendingList(JNIEnv *env, jclass ignore)
+{
+    return JVM_GetAndClearReferencePendingList(env);
+}
+
+JNIEXPORT jboolean JNICALL
+Java_java_lang_ref_Reference_hasReferencePendingList(JNIEnv *env, jclass ignore)
+{
+    return JVM_HasReferencePendingList(env);
+}
+
+JNIEXPORT void JNICALL
+Java_java_lang_ref_Reference_waitForReferencePendingList(JNIEnv *env, jclass ignore)
+{
+    JVM_WaitForReferencePendingList(env);
+}
--- a/src/java.base/share/native/libjli/java.h	Wed Sep 14 15:29:23 2016 -0700
+++ b/src/java.base/share/native/libjli/java.h	Mon Sep 19 10:11:34 2016 -0700
@@ -112,6 +112,9 @@
 jboolean
 GetApplicationHome(char *buf, jint bufsize);
 
+jboolean
+GetApplicationHomeFromDll(char *buf, jint bufsize);
+
 #define GetArch() GetArchPath(CURRENT_DATA_MODEL)
 
 /*
--- a/src/java.base/solaris/native/libnet/solaris_close.c	Wed Sep 14 15:29:23 2016 -0700
+++ b/src/java.base/solaris/native/libnet/solaris_close.c	Mon Sep 19 10:11:34 2016 -0700
@@ -35,7 +35,7 @@
     if (1) {                                          \
         do {                                          \
             _result = _cmd;                           \
-        } while((_result == -1) && (errno == EINTR)); \
+        } while((_result == -1) && (errno == EINTR));      \
         return _result;                               \
     }                                                 \
 } while(0)
@@ -44,6 +44,10 @@
     RESTARTABLE_RETURN_INT(recv(s, buf, len, 0));
 }
 
+int NET_NonBlockingRead(int s, void* buf, size_t len) {
+    RESTARTABLE_RETURN_INT(recv(s, buf, len, MSG_DONTWAIT));
+}
+
 int NET_RecvFrom(int s, void *buf, int len, unsigned int flags,
                  struct sockaddr *from, socklen_t *fromlen) {
     RESTARTABLE_RETURN_INT(recvfrom(s, buf, len, flags, from, fromlen));
@@ -86,19 +90,14 @@
     RESTARTABLE_RETURN_INT(poll(ufds, nfds, timeout));
 }
 
-int NET_Timeout(int s, long timeout) {
+int NET_Timeout0(int s, long timeout, long currentTime) {
     int result;
     struct timeval t;
-    long prevtime, newtime;
+    long prevtime = currentTime, newtime;
     struct pollfd pfd;
     pfd.fd = s;
     pfd.events = POLLIN;
 
-    if (timeout > 0) {
-        gettimeofday(&t, NULL);
-        prevtime = (t.tv_sec * 1000)  +  t.tv_usec / 1000;
-    }
-
     for(;;) {
         result = poll(&pfd, 1, timeout);
         if (result < 0 && errno == EINTR) {
--- a/src/java.base/unix/native/libjava/TimeZone_md.c	Wed Sep 14 15:29:23 2016 -0700
+++ b/src/java.base/unix/native/libjava/TimeZone_md.c	Mon Sep 19 10:11:34 2016 -0700
@@ -128,13 +128,20 @@
     char *dbuf = NULL;
     char *tz = NULL;
     int res;
+    long name_max = 0;
 
     dirp = opendir(dir);
     if (dirp == NULL) {
         return NULL;
     }
 
-    entry = (struct dirent64 *) malloc((size_t) pathconf(dir, _PC_NAME_MAX));
+    name_max = pathconf(dir, _PC_NAME_MAX);
+    // If pathconf did not work, fall back to a mimimum buffer size.
+    if (name_max < 1024) {
+        name_max = 1024;
+    }
+
+    entry = (struct dirent64 *)malloc(offsetof(struct dirent64, d_name) + name_max + 1);
     if (entry == NULL) {
         (void) closedir(dirp);
         return NULL;
--- a/src/java.base/unix/native/libjli/java_md_common.c	Wed Sep 14 15:29:23 2016 -0700
+++ b/src/java.base/unix/native/libjli/java_md_common.c	Mon Sep 19 10:11:34 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2016, 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,8 +25,49 @@
 #include "java.h"
 
 /*
- * If app is "/foo/bin/javac", or "/foo/bin/sparcv9/javac" then put
- * "/foo" into buf.
+ * Find the last occurrence of a string
+ */
+char* findLastPathComponent(char *buffer, const char *comp) {
+    char* t = buffer;
+    char* p = NULL;
+    size_t l = JLI_StrLen(comp);
+    t = JLI_StrStr(t, comp);
+
+    while (t != NULL) {
+        p = t;
+        t += l;
+        t = JLI_StrStr(t, comp);
+    }
+    return p;
+}
+
+/*
+ * Removes the trailing file name and any intermediate platform
+ * directories, if any, and its enclosing directory.
+ * Ex: if a buffer contains "/foo/bin/javac" or "/foo/bin/x64/javac", the
+ * truncated resulting buffer will contain "/foo".
+ */
+jboolean
+TruncatePath(char *buf)
+{
+    // try bin directory, maybe an executable
+    char *p = findLastPathComponent(buf, "/bin/");
+    if (p != NULL) {
+        *p = '\0';
+        return JNI_TRUE;
+    }
+    // try lib directory, maybe a library
+    p = findLastPathComponent(buf, "/lib/");
+    if (p != NULL) {
+        *p = '\0';
+        return JNI_TRUE;
+    }
+    return JNI_FALSE;
+}
+
+/*
+ * Retrieves the path to the JRE home by locating the executable file
+ * of the current process and then truncating the path to the executable
  */
 jboolean
 GetApplicationHome(char *buf, jint bufsize)
@@ -38,26 +79,27 @@
     } else {
         return JNI_FALSE;
     }
+    return TruncatePath(buf);
+}
 
-    if (JLI_StrRChr(buf, '/') == 0) {
-        buf[0] = '\0';
-        return JNI_FALSE;
-    }
-    *(JLI_StrRChr(buf, '/')) = '\0';    /* executable file      */
-    if (JLI_StrLen(buf) < 4 || JLI_StrRChr(buf, '/') == 0) {
-        buf[0] = '\0';
-        return JNI_FALSE;
+/*
+ * Retrieves the path to the JRE home by locating the
+ * shared library and then truncating the path to it.
+ */
+jboolean
+GetApplicationHomeFromDll(char *buf, jint bufsize)
+{
+    /* try to find ourselves instead */
+    Dl_info info;
+    if (dladdr((void*)&GetApplicationHomeFromDll, &info) != 0) {
+        char *path = realpath(info.dli_fname, buf);
+        if (path == buf) {
+            return TruncatePath(buf);
+        }
     }
-    if (JLI_StrCmp("/bin", buf + JLI_StrLen(buf) - 4) != 0)
-        *(JLI_StrRChr(buf, '/')) = '\0';        /* sparcv9 or amd64     */
-    if (JLI_StrLen(buf) < 4 || JLI_StrCmp("/bin", buf + JLI_StrLen(buf) - 4) != 0) {
-        buf[0] = '\0';
-        return JNI_FALSE;
-    }
-    *(JLI_StrRChr(buf, '/')) = '\0';    /* bin                  */
+    return JNI_FALSE;
+}
 
-    return JNI_TRUE;
-}
 /*
  * Return true if the named program exists
  */
--- a/src/java.base/unix/native/libjli/java_md_solinux.c	Wed Sep 14 15:29:23 2016 -0700
+++ b/src/java.base/unix/native/libjli/java_md_solinux.c	Mon Sep 19 10:11:34 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2016, 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
@@ -666,6 +666,7 @@
 GetJREPath(char *path, jint pathsize, const char * arch, jboolean speculative)
 {
     char libjava[MAXPATHLEN];
+    struct stat s;
 
     if (GetApplicationHome(path, pathsize)) {
         /* Is JRE co-located with the application? */
@@ -688,6 +689,14 @@
         }
     }
 
+    if (GetApplicationHomeFromDll(path, pathsize)) {
+        JLI_Snprintf(libjava, sizeof(libjava), "%s/lib/%s/" JAVA_DLL, path, arch);
+        if (stat(libjava, &s) == 0) {
+            JLI_TraceLauncher("JRE path is %s\n", path);
+            return JNI_TRUE;
+        }
+    }
+
     if (!speculative)
       JLI_ReportErrorMessage(JRE_ERROR8 JAVA_DLL);
     return JNI_FALSE;
--- a/src/java.base/unix/native/libnet/SocketInputStream.c	Wed Sep 14 15:29:23 2016 -0700
+++ b/src/java.base/unix/native/libnet/SocketInputStream.c	Mon Sep 19 10:11:34 2016 -0700
@@ -35,7 +35,6 @@
 
 #include "java_net_SocketInputStream.h"
 
-
 /************************************************************************
  * SocketInputStream
  */
@@ -52,6 +51,40 @@
     IO_fd_fdID = NET_GetFileDescriptorID(env);
 }
 
+static int NET_ReadWithTimeout(JNIEnv *env, int fd, char *bufP, int len, long timeout) {
+    int result = 0;
+    long prevtime = NET_GetCurrentTime(), newtime;
+    while (timeout > 0) {
+        result = NET_TimeoutWithCurrentTime(fd, timeout, prevtime);
+        if (result <= 0) {
+            if (result == 0) {
+                JNU_ThrowByName(env, JNU_JAVANETPKG "SocketTimeoutException", "Read timed out");
+            } else if (result == -1) {
+                if (errno == EBADF) {
+                    JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", "Socket closed");
+                } else if (errno == ENOMEM) {
+                    JNU_ThrowOutOfMemoryError(env, "NET_Timeout native heap allocation failed");
+                } else {
+                    JNU_ThrowByNameWithMessageAndLastError
+                            (env, JNU_JAVANETPKG "SocketException", "select/poll failed");
+                }
+            }
+            return -1;
+        }
+        result = NET_NonBlockingRead(fd, bufP, len);
+        if (result == -1 && ((errno == EAGAIN) || (errno == EWOULDBLOCK))) {
+            newtime = NET_GetCurrentTime();
+            timeout -= newtime - prevtime;
+            if (timeout > 0) {
+                prevtime = newtime;
+            }
+        } else {
+            break;
+        }
+    }
+    return result;
+}
+
 /*
  * Class:     java_net_SocketInputStream
  * Method:    socketRead0
@@ -98,32 +131,18 @@
     } else {
         bufP = BUF;
     }
-
     if (timeout) {
-        nread = NET_Timeout(fd, timeout);
-        if (nread <= 0) {
-            if (nread == 0) {
-                JNU_ThrowByName(env, JNU_JAVANETPKG "SocketTimeoutException",
-                            "Read timed out");
-            } else if (nread == -1) {
-                if (errno == EBADF) {
-                     JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", "Socket closed");
-                } else if (errno == ENOMEM) {
-                    JNU_ThrowOutOfMemoryError(env, "NET_Timeout native heap allocation failed");
-                } else {
-                    JNU_ThrowByNameWithMessageAndLastError
-                        (env, JNU_JAVANETPKG "SocketException", "select/poll failed");
-                }
-            }
+        nread = NET_ReadWithTimeout(env, fd, bufP, len, timeout);
+        if ((*env)->ExceptionCheck(env)) {
             if (bufP != BUF) {
                 free(bufP);
             }
-            return -1;
+            return nread;
         }
+    } else {
+        nread = NET_Read(fd, bufP, len);
     }
 
-    nread = NET_Read(fd, bufP, len);
-
     if (nread <= 0) {
         if (nread < 0) {
 
@@ -143,7 +162,6 @@
                      JNU_ThrowByName(env, JNU_JAVAIOPKG "InterruptedIOException",
                            "Operation interrupted");
                      break;
-
                 default:
                     JNU_ThrowByNameWithMessageAndLastError
                         (env, JNU_JAVANETPKG "SocketException", "Read failed");
--- a/src/java.base/unix/native/libnet/net_util_md.c	Wed Sep 14 15:29:23 2016 -0700
+++ b/src/java.base/unix/native/libnet/net_util_md.c	Mon Sep 19 10:11:34 2016 -0700
@@ -33,6 +33,7 @@
 #include <netdb.h>
 #include <stdlib.h>
 #include <dlfcn.h>
+#include <sys/time.h>
 
 #ifndef _ALLBSD_SOURCE
 #include <values.h>
@@ -1669,3 +1670,18 @@
 
     return timeout;
 }
+
+long NET_GetCurrentTime() {
+    struct timeval time;
+    gettimeofday(&time, NULL);
+    return (time.tv_sec * 1000 + time.tv_usec / 1000);
+}
+
+int NET_TimeoutWithCurrentTime(int s, long timeout, long currentTime) {
+    return NET_Timeout0(s, timeout, currentTime);
+}
+
+int NET_Timeout(int s, long timeout) {
+    long currentTime = (timeout > 0) ? NET_GetCurrentTime() : 0;
+    return NET_Timeout0(s, timeout, currentTime);
+}
--- a/src/java.base/unix/native/libnet/net_util_md.h	Wed Sep 14 15:29:23 2016 -0700
+++ b/src/java.base/unix/native/libnet/net_util_md.h	Mon Sep 19 10:11:34 2016 -0700
@@ -35,7 +35,11 @@
 #include <sys/poll.h>
 
 int NET_Timeout(int s, long timeout);
+int NET_Timeout0(int s, long timeout, long currentTime);
 int NET_Read(int s, void* buf, size_t len);
+int NET_NonBlockingRead(int s, void* buf, size_t len);
+int NET_TimeoutWithCurrentTime(int s, long timeout, long currentTime);
+long NET_GetCurrentTime();
 int NET_RecvFrom(int s, void *buf, int len, unsigned int flags,
                  struct sockaddr *from, socklen_t *fromlen);
 int NET_ReadV(int s, const struct iovec * vector, int count);
--- a/src/java.base/windows/native/libjli/java_md.c	Wed Sep 14 15:29:23 2016 -0700
+++ b/src/java.base/windows/native/libjli/java_md.c	Mon Sep 19 10:11:34 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2016, 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
@@ -348,7 +348,6 @@
 
     JLI_ReportErrorMessage(JRE_ERROR8 JAVA_DLL);
     return JNI_FALSE;
-
 }
 
 /*
@@ -423,11 +422,11 @@
     *JLI_StrRChr(buf, '\\') = '\0'; /* remove .exe file name */
     if ((cp = JLI_StrRChr(buf, '\\')) == 0) {
         /* This happens if the application is in a drive root, and
-        * there is no bin directory. */
+         * there is no bin directory. */
         buf[0] = '\0';
         return JNI_FALSE;
     }
-    *cp = '\0';  /* remove the bin\ part */
+    *cp = '\0'; /* remove the bin\ part */
     return JNI_TRUE;
 }
 
@@ -449,16 +448,16 @@
 jboolean
 GetApplicationHomeFromDll(char *buf, jint bufsize)
 {
-    HMODULE hModule;
-    DWORD dwFlags =
-        GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS |
-        GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT;
+    HMODULE module;
+    DWORD flags = GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS |
+                  GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT;
 
-    if (GetModuleHandleEx(dwFlags, (LPCSTR)&GetJREPath, &hModule) == 0) {
-        return JNI_FALSE;
-    };
-    GetModuleFileName(hModule, buf, bufsize);
-    return TruncatePath(buf);
+    if (GetModuleHandleEx(flags, (LPCSTR)&GetJREPath, &module) != 0) {
+        if (GetModuleFileName(module, buf, bufsize) != 0) {
+            return TruncatePath(buf);
+        }
+    }
+    return JNI_FALSE;
 }
 
 /*
--- a/src/java.base/windows/native/libjli/java_md.h	Wed Sep 14 15:29:23 2016 -0700
+++ b/src/java.base/windows/native/libjli/java_md.h	Mon Sep 19 10:11:34 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2016, 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
@@ -54,7 +54,4 @@
 
 int UnsetEnv(char *name);
 
-jboolean
-GetApplicationHomeFromDll(char *buf, jint bufsize);
-
 #endif /* JAVA_MD_H */
--- a/src/java.instrument/share/classes/java/lang/instrument/package.html	Wed Sep 14 15:29:23 2016 -0700
+++ b/src/java.instrument/share/classes/java/lang/instrument/package.html	Mon Sep 19 10:11:34 2016 -0700
@@ -105,6 +105,10 @@
 The agent class will be loaded by the system class loader
 (see {@link java.lang.ClassLoader#getSystemClassLoader ClassLoader.getSystemClassLoader}). This is
 the class loader which typically loads the class containing the application <code>main</code> method.
+The system class loader must support a mechanism to add an agent JAR file to the system class path.
+If it is a custom system class loader then it must define the
+<code>appendToClassPathForInstrumentation</code> method as specified in
+{@link Instrumentation#appendToSystemClassLoaderSearch appendToSystemClassLoaderSearch}.
 The <code>premain</code> methods will be run under the same security and classloader 
 rules as the application <code>main</code> method.
 There are no modeling restrictions on what the agent <code>premain</code> method may do.
@@ -140,7 +144,10 @@
 
   <li><p>The system class loader (
       {@link java.lang.ClassLoader#getSystemClassLoader ClassLoader.getSystemClassLoader}) must
-      support a mechanism to add an agent JAR file to the system class path.</li>
+      support a mechanism to add an agent JAR file to the system class path.
+      If it is a custom system class loader then it must define the
+      <code>appendToClassPathForInstrumentation</code> method as specified in
+      {@link Instrumentation#appendToSystemClassLoaderSearch appendToSystemClassLoaderSearch}.</li>
 </ol>  
 
 <P>
--- a/src/java.instrument/share/native/libinstrument/InvocationAdapter.c	Wed Sep 14 15:29:23 2016 -0700
+++ b/src/java.instrument/share/native/libinstrument/InvocationAdapter.c	Mon Sep 19 10:11:34 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2016, 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
@@ -190,10 +190,8 @@
             return JNI_ERR;
         }
 
-        /*
-         * Add to the jarfile
-         */
-        appendClassPath(agent, jarfile);
+        /* Save the jarfile name */
+        agent->mJarfile = jarfile;
 
         /*
          * The value of the Premain-Class attribute becomes the agent
@@ -241,7 +239,6 @@
         /*
          * Clean-up
          */
-        free(jarfile);
         if (options != NULL) free(options);
         freeAttributes(attributes);
         free(premainClass);
@@ -459,7 +456,23 @@
 
     /* process the premain calls on the all the JPL agents */
     if ( environment != NULL ) {
-        jthrowable outstandingException = preserveThrowable(jnienv);
+        jthrowable outstandingException = NULL;
+        /*
+         * Add the jarfile to the system class path
+         */
+        JPLISAgent * agent = environment->mAgent;
+        if (appendClassPath(agent, agent->mJarfile)) {
+            fprintf(stderr, "Unable to add %s to system class path - "
+                    "the system class loader does not define the "
+                    "appendToClassPathForInstrumentation method or the method failed\n",
+                    agent->mJarfile);
+            free((void *)agent->mJarfile);
+            abortJVM(jnienv, JPLIS_ERRORMESSAGE_CANNOTSTART);
+        }
+        free((void *)agent->mJarfile);
+        agent->mJarfile = NULL;
+
+        outstandingException = preserveThrowable(jnienv);
         success = processJavaStart( environment->mAgent,
                                     jnienv);
         restoreThrowable(jnienv, outstandingException);
@@ -631,32 +644,19 @@
     jvmtierr = (*jvmtienv)->AddToSystemClassLoaderSearch(jvmtienv, jarfile);
     check_phase_ret_1(jvmtierr);
 
-    if (jvmtierr == JVMTI_ERROR_NONE) {
-        return 0;
-    } else {
-        jvmtiPhase phase;
-        jvmtiError err;
-
-        err = (*jvmtienv)->GetPhase(jvmtienv, &phase);
-        /* can be called from any phase */
-        jplis_assert(err == JVMTI_ERROR_NONE);
-
-        if (phase == JVMTI_PHASE_LIVE) {
-            switch (jvmtierr) {
-                case JVMTI_ERROR_CLASS_LOADER_UNSUPPORTED :
-                    fprintf(stderr, "System class loader does not support adding "
-                        "JAR file to system class path during the live phase!\n");
-                        break;
-                default:
-                    fprintf(stderr, "Unexpected error (%d) returned by "
-                        "AddToSystemClassLoaderSearch\n", jvmtierr);
-                    break;
-            }
-            return -1;
-        }
-        jplis_assert(0);
+    switch (jvmtierr) {
+        case JVMTI_ERROR_NONE :
+            return 0;
+        case JVMTI_ERROR_CLASS_LOADER_UNSUPPORTED :
+            fprintf(stderr, "System class loader does not define "
+                "the appendToClassPathForInstrumentation method\n");
+            break;
+        default:
+            fprintf(stderr, "Unexpected error (%d) returned by "
+                "AddToSystemClassLoaderSearch\n", jvmtierr);
+            break;
     }
-    return -2;
+    return -1;
 }
 
 
--- a/src/java.instrument/share/native/libinstrument/JPLISAgent.c	Wed Sep 14 15:29:23 2016 -0700
+++ b/src/java.instrument/share/native/libinstrument/JPLISAgent.c	Mon Sep 19 10:11:34 2016 -0700
@@ -272,6 +272,7 @@
     agent->mNativeMethodPrefixAdded                  = JNI_FALSE;
     agent->mAgentClassName                           = NULL;
     agent->mOptionsString                            = NULL;
+    agent->mJarfile                                  = NULL;
 
     /* make sure we can recover either handle in either direction.
      * the agent has a ref to the jvmti; make it mutual
--- a/src/java.instrument/share/native/libinstrument/JPLISAgent.h	Wed Sep 14 15:29:23 2016 -0700
+++ b/src/java.instrument/share/native/libinstrument/JPLISAgent.h	Mon Sep 19 10:11:34 2016 -0700
@@ -107,6 +107,7 @@
     jboolean                mNativeMethodPrefixAdded;     /* indicates if can_set_native_method_prefix capability has been added */
     char const *            mAgentClassName;        /* agent class name */
     char const *            mOptionsString;         /* -javaagent options string */
+    const char *            mJarfile;               /* agent jar file name */
 };
 
 /*
--- a/src/java.logging/share/classes/java/util/logging/Level.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/src/java.logging/share/classes/java/util/logging/Level.java	Mon Sep 19 10:11:34 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2016, 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,13 +24,22 @@
  */
 
 package java.util.logging;
+import java.lang.ref.Reference;
+import java.lang.ref.ReferenceQueue;
+import java.lang.ref.WeakReference;
 import java.lang.reflect.Module;
+import java.security.AccessController;
+import java.security.PrivilegedAction;
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Locale;
 import java.util.Map;
+import java.util.Optional;
 import java.util.ResourceBundle;
+import java.util.function.Function;
+import jdk.internal.loader.ClassLoaderValue;
 
 /**
  * The Level class defines a set of standard logging levels that
@@ -177,6 +186,10 @@
      */
     public static final Level ALL = new Level("ALL", Integer.MIN_VALUE, defaultBundle);
 
+    private static final Level[] standardLevels = {
+        OFF, SEVERE, WARNING, INFO, CONFIG, FINE, FINER, FINEST, ALL
+    };
+
     /**
      * Create a named Level with a given integer value.
      * <p>
@@ -267,7 +280,8 @@
         // or its defining class loader, if it's unnamed module,
         // of this Level instance that can be a custom Level subclass;
         Module module = this.getClass().getModule();
-        ResourceBundle rb = ResourceBundle.getBundle(resourceBundleName, newLocale, module);
+        ResourceBundle rb = ResourceBundle.getBundle(resourceBundleName,
+                newLocale, module);
 
         final String localizedName = rb.getString(name);
         final boolean isDefaultBundle = defaultBundle.equals(resourceBundleName);
@@ -350,12 +364,12 @@
             throw new NullPointerException();
         }
 
-        KnownLevel level;
+        Optional<Level> level;
 
         // Look for a known Level with the given non-localized name.
-        level = KnownLevel.findByName(name);
-        if (level != null) {
-            return level.mirroredLevel;
+        level = KnownLevel.findByName(name, KnownLevel::mirrored);
+        if (level.isPresent()) {
+            return level.get();
         }
 
         // Now, check if the given name is an integer.  If so,
@@ -363,21 +377,24 @@
         // if necessary create one.
         try {
             int x = Integer.parseInt(name);
-            level = KnownLevel.findByValue(x);
-            if (level == null) {
+            level = KnownLevel.findByValue(x, KnownLevel::mirrored);
+            if (!level.isPresent()) {
                 // add new Level
                 Level levelObject = new Level(name, x);
-                level = KnownLevel.findByValue(x);
+                // There's no need to use a reachability fence here because
+                // KnownLevel keeps a strong reference on the level when
+                // level.getClass() == Level.class.
+                return KnownLevel.findByValue(x, KnownLevel::mirrored).get();
             }
-            return level.mirroredLevel;
         } catch (NumberFormatException ex) {
             // Not an integer.
             // Drop through.
         }
 
-        level = KnownLevel.findByLocalizedLevelName(name);
-        if (level != null) {
-            return level.mirroredLevel;
+        level = KnownLevel.findByLocalizedLevelName(name,
+                KnownLevel::mirrored);
+        if (level.isPresent()) {
+            return level.get();
         }
 
         return null;
@@ -408,15 +425,13 @@
     // Serialization magic to prevent "doppelgangers".
     // This is a performance optimization.
     private Object readResolve() {
-        KnownLevel o = KnownLevel.matches(this);
-        if (o != null) {
-            return o.levelObject;
+        Optional<Level> level = KnownLevel.matches(this);
+        if (level.isPresent()) {
+            return level.get();
         }
-
         // Woops.  Whoever sent us this object knows
         // about a new log level.  Add it to our list.
-        Level level = new Level(this.name, this.value, this.resourceBundleName);
-        return level;
+        return new Level(this.name, this.value, this.resourceBundleName);
     }
 
     /**
@@ -450,12 +465,12 @@
         // Check that name is not null.
         name.length();
 
-        KnownLevel level;
+        Optional<Level> level;
 
         // Look for a known Level with the given non-localized name.
-        level = KnownLevel.findByName(name);
-        if (level != null) {
-            return level.levelObject;
+        level = KnownLevel.findByName(name, KnownLevel::referent);
+        if (level.isPresent()) {
+            return level.get();
         }
 
         // Now, check if the given name is an integer.  If so,
@@ -463,13 +478,16 @@
         // if necessary create one.
         try {
             int x = Integer.parseInt(name);
-            level = KnownLevel.findByValue(x);
-            if (level == null) {
-                // add new Level
-                Level levelObject = new Level(name, x);
-                level = KnownLevel.findByValue(x);
+            level = KnownLevel.findByValue(x, KnownLevel::referent);
+            if (level.isPresent()) {
+                return level.get();
             }
-            return level.levelObject;
+            // add new Level.
+            Level levelObject = new Level(name, x);
+            // There's no need to use a reachability fence here because
+            // KnownLevel keeps a strong reference on the level when
+            // level.getClass() == Level.class.
+            return KnownLevel.findByValue(x, KnownLevel::referent).get();
         } catch (NumberFormatException ex) {
             // Not an integer.
             // Drop through.
@@ -478,9 +496,9 @@
         // Finally, look for a known level with the given localized name,
         // in the current default locale.
         // This is relatively expensive, but not excessively so.
-        level = KnownLevel.findByLocalizedLevelName(name);
-        if (level != null) {
-            return level.levelObject;
+        level = KnownLevel.findByLocalizedLevelName(name, KnownLevel::referent);
+        if (level .isPresent()) {
+            return level.get();
         }
 
         // OK, we've tried everything and failed
@@ -530,22 +548,67 @@
     // If Level.getName, Level.getLocalizedName, Level.getResourceBundleName methods
     // were final, the following KnownLevel implementation can be removed.
     // Future API change should take this into consideration.
-    static final class KnownLevel {
+    static final class KnownLevel extends WeakReference<Level> {
         private static Map<String, List<KnownLevel>> nameToLevels = new HashMap<>();
         private static Map<Integer, List<KnownLevel>> intToLevels = new HashMap<>();
-        final Level levelObject;     // instance of Level class or Level subclass
+        private static final ReferenceQueue<Level> QUEUE = new ReferenceQueue<>();
+
+        // CUSTOM_LEVEL_CLV is used to register custom level instances with
+        // their defining class loader, so that they are garbage collected
+        // if and only if their class loader is no longer strongly
+        // referenced.
+        private static final ClassLoaderValue<List<Level>> CUSTOM_LEVEL_CLV =
+                    new ClassLoaderValue<>();
+
         final Level mirroredLevel;   // mirror of the custom Level
         KnownLevel(Level l) {
-            this.levelObject = l;
+            super(l, QUEUE);
             if (l.getClass() == Level.class) {
                 this.mirroredLevel = l;
             } else {
                 // this mirrored level object is hidden
-                this.mirroredLevel = new Level(l.name, l.value, l.resourceBundleName, false);
+                this.mirroredLevel = new Level(l.name, l.value,
+                        l.resourceBundleName, false);
             }
         }
 
+        Optional<Level> mirrored() {
+            return Optional.of(mirroredLevel);
+        }
+
+        Optional<Level> referent() {
+            return Optional.ofNullable(get());
+        }
+
+        private void remove() {
+            Optional.ofNullable(nameToLevels.get(mirroredLevel.name))
+                    .ifPresent((x) -> x.remove(this));
+            Optional.ofNullable(intToLevels.get(mirroredLevel.value))
+                    .ifPresent((x) -> x.remove(this));
+        }
+
+        // Remove all stale KnownLevel instances
+        static synchronized void purge() {
+            Reference<? extends Level> ref;
+            while ((ref = QUEUE.poll()) != null) {
+                if (ref instanceof KnownLevel) {
+                    ((KnownLevel)ref).remove();
+                }
+            }
+        }
+
+        private static void registerWithClassLoader(Level customLevel) {
+            PrivilegedAction<ClassLoader> pa =
+                  () -> customLevel.getClass().getClassLoader();
+            PrivilegedAction<String> pn =  customLevel.getClass()::getName;
+            final String name = AccessController.doPrivileged(pn);
+            final ClassLoader cl = AccessController.doPrivileged(pa);
+            CUSTOM_LEVEL_CLV.computeIfAbsent(cl, (c, v) -> new ArrayList<>())
+                .add(customLevel);
+        }
+
         static synchronized void add(Level l) {
+            purge();
             // the mirroredLevel object is always added to the list
             // before the custom Level instance
             KnownLevel o = new KnownLevel(l);
@@ -562,24 +625,36 @@
                 intToLevels.put(l.value, list);
             }
             list.add(o);
+
+            // keep the custom level reachable from its class loader
+            // This will ensure that custom level values are not GC'ed
+            // until there class loader is GC'ed.
+            if (o.mirroredLevel != l) {
+                registerWithClassLoader(l);
+            }
+
         }
 
         // Returns a KnownLevel with the given non-localized name.
-        static synchronized KnownLevel findByName(String name) {
-            List<KnownLevel> list = nameToLevels.get(name);
-            if (list != null) {
-                return list.get(0);
-            }
-            return null;
+        static synchronized Optional<Level> findByName(String name,
+                Function<KnownLevel, Optional<Level>> selector) {
+            purge();
+            return nameToLevels.getOrDefault(name, Collections.emptyList())
+                        .stream()
+                        .map(selector)
+                        .flatMap(Optional::stream)
+                        .findFirst();
         }
 
         // Returns a KnownLevel with the given value.
-        static synchronized KnownLevel findByValue(int value) {
-            List<KnownLevel> list = intToLevels.get(value);
-            if (list != null) {
-                return list.get(0);
-            }
-            return null;
+        static synchronized Optional<Level> findByValue(int value,
+                Function<KnownLevel, Optional<Level>> selector) {
+            purge();
+            return intToLevels.getOrDefault(value, Collections.emptyList())
+                        .stream()
+                        .map(selector)
+                        .flatMap(Optional::stream)
+                        .findFirst();
         }
 
         // Returns a KnownLevel with the given localized name matching
@@ -587,32 +662,34 @@
         // from the resourceBundle associated with the Level object).
         // This method does not call Level.getLocalizedName() that may
         // be overridden in a subclass implementation
-        static synchronized KnownLevel findByLocalizedLevelName(String name) {
-            for (List<KnownLevel> levels : nameToLevels.values()) {
-                for (KnownLevel l : levels) {
-                    String lname = l.levelObject.getLocalizedLevelName();
-                    if (name.equals(lname)) {
-                        return l;
-                    }
-                }
-            }
-            return null;
+        static synchronized Optional<Level> findByLocalizedLevelName(String name,
+                Function<KnownLevel, Optional<Level>> selector) {
+            purge();
+            return nameToLevels.values().stream()
+                         .flatMap(List::stream)
+                         .map(selector)
+                         .flatMap(Optional::stream)
+                         .filter(l -> name.equals(l.getLocalizedLevelName()))
+                         .findFirst();
         }
 
-        static synchronized KnownLevel matches(Level l) {
+        static synchronized Optional<Level> matches(Level l) {
+            purge();
             List<KnownLevel> list = nameToLevels.get(l.name);
             if (list != null) {
-                for (KnownLevel level : list) {
-                    Level other = level.mirroredLevel;
+                for (KnownLevel ref : list) {
+                    Level levelObject = ref.get();
+                    if (levelObject == null) continue;
+                    Level other = ref.mirroredLevel;
                     if (l.value == other.value &&
                            (l.resourceBundleName == other.resourceBundleName ||
                                (l.resourceBundleName != null &&
                                 l.resourceBundleName.equals(other.resourceBundleName)))) {
-                        return level;
+                        return Optional.of(levelObject);
                     }
                 }
             }
-            return null;
+            return Optional.empty();
         }
     }
 
--- a/src/java.management/share/classes/com/sun/jmx/interceptor/DefaultMBeanServerInterceptor.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/src/java.management/share/classes/com/sun/jmx/interceptor/DefaultMBeanServerInterceptor.java	Mon Sep 19 10:11:34 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2016, 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
@@ -1707,25 +1707,6 @@
         throw new UnsupportedOperationException("Not supported yet.");
     }
 
-    @SuppressWarnings("deprecation")
-    public ObjectInputStream deserialize(ObjectName name, byte[] data) throws InstanceNotFoundException,
-                                                                              OperationsException {
-        throw new UnsupportedOperationException("Not supported yet.");
-    }
-
-    @SuppressWarnings("deprecation")
-    public ObjectInputStream deserialize(String className, byte[] data) throws OperationsException,
-                                                                               ReflectionException {
-        throw new UnsupportedOperationException("Not supported yet.");
-    }
-
-    @SuppressWarnings("deprecation")
-    public ObjectInputStream deserialize(String className, ObjectName loaderName,
-            byte[] data) throws InstanceNotFoundException, OperationsException,
-                                ReflectionException {
-        throw new UnsupportedOperationException("Not supported yet.");
-    }
-
     public ClassLoaderRepository getClassLoaderRepository() {
         throw new UnsupportedOperationException("Not supported yet.");
     }
--- a/src/java.management/share/classes/com/sun/jmx/interceptor/MBeanServerInterceptor.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/src/java.management/share/classes/com/sun/jmx/interceptor/MBeanServerInterceptor.java	Mon Sep 19 10:11:34 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2008, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 2016, 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
@@ -98,32 +98,6 @@
      * This method should never be called.
      * Usually throws UnsupportedOperationException.
      */
-    @Deprecated
-    public ObjectInputStream deserialize(ObjectName name, byte[] data)
-            throws InstanceNotFoundException, OperationsException;
-
-    /**
-     * This method should never be called.
-     * Usually throws UnsupportedOperationException.
-     */
-    @Deprecated
-    public ObjectInputStream deserialize(String className, byte[] data)
-            throws OperationsException, ReflectionException;
-
-    /**
-     * This method should never be called.
-     * Usually hrows UnsupportedOperationException.
-     */
-    @Deprecated
-    public ObjectInputStream deserialize(String className,
-            ObjectName loaderName, byte[] data)
-            throws InstanceNotFoundException, OperationsException,
-            ReflectionException;
-
-    /**
-     * This method should never be called.
-     * Usually throws UnsupportedOperationException.
-     */
     public ClassLoaderRepository getClassLoaderRepository();
 
 }
--- a/src/java.management/share/classes/javax/management/MBeanServer.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/src/java.management/share/classes/javax/management/MBeanServer.java	Mon Sep 19 10:11:34 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2016, 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
@@ -655,6 +655,8 @@
      * used for the de-serialization.
      * @param data The byte array to be de-sererialized.
      *
+     * @implSpec This method throws {@link UnsupportedOperationException} by default.
+     *
      * @return The de-serialized object stream.
      *
      * @exception InstanceNotFoundException The MBean specified is not
@@ -665,10 +667,11 @@
      * @deprecated Use {@link #getClassLoaderFor getClassLoaderFor} to
      * obtain the appropriate class loader for deserialization.
      */
-    @Deprecated
-    public ObjectInputStream deserialize(ObjectName name, byte[] data)
-            throws InstanceNotFoundException, OperationsException;
-
+    @Deprecated(since="1.5")
+    default public ObjectInputStream deserialize(ObjectName name, byte[] data)
+            throws InstanceNotFoundException, OperationsException {
+        throw new UnsupportedOperationException("Not supported.");
+    }
 
     /**
      * <p>De-serializes a byte array in the context of a given MBean
@@ -682,6 +685,8 @@
      * used for the de-serialization.
      * @param data The byte array to be de-sererialized.
      *
+     * @implSpec This method throws {@link UnsupportedOperationException} by default.
+     *
      * @return  The de-serialized object stream.
      *
      * @exception OperationsException Any of the usual Input/Output
@@ -692,9 +697,11 @@
      * @deprecated Use {@link #getClassLoaderRepository} to obtain the
      * class loader repository and use it to deserialize.
      */
-    @Deprecated
-    public ObjectInputStream deserialize(String className, byte[] data)
-            throws OperationsException, ReflectionException;
+    @Deprecated(since="1.5")
+    default public ObjectInputStream deserialize(String className, byte[] data)
+            throws OperationsException, ReflectionException {
+        throw new UnsupportedOperationException("Not supported.");
+    }
 
 
     /**
@@ -711,6 +718,8 @@
      * loading the specified class.  If null, the MBean Server's class
      * loader will be used.
      *
+     * @implSpec This method throws {@link UnsupportedOperationException} by default.
+     *
      * @return  The de-serialized object stream.
      *
      * @exception InstanceNotFoundException The specified class loader
@@ -723,12 +732,14 @@
      * @deprecated Use {@link #getClassLoader getClassLoader} to obtain
      * the class loader for deserialization.
      */
-    @Deprecated
-    public ObjectInputStream deserialize(String className,
+    @Deprecated(since="1.5")
+    default public ObjectInputStream deserialize(String className,
                                          ObjectName loaderName,
                                          byte[] data)
             throws InstanceNotFoundException, OperationsException,
-                   ReflectionException;
+                   ReflectionException {
+        throw new UnsupportedOperationException("Not supported.");
+    }
 
     /**
      * <p>Return the {@link java.lang.ClassLoader} that was used for
--- a/src/jdk.attach/linux/classes/sun/tools/attach/VirtualMachineImpl.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/src/jdk.attach/linux/classes/sun/tools/attach/VirtualMachineImpl.java	Mon Sep 19 10:11:34 2016 -0700
@@ -308,10 +308,6 @@
 
     //-- native methods
 
-    static native boolean isLinuxThreads();
-
-    static native int getLinuxThreadsManager(int pid) throws IOException;
-
     static native void sendQuitToChildrenOf(int pid) throws IOException;
 
     static native void sendQuitTo(int pid) throws IOException;
--- a/src/jdk.attach/linux/native/libattach/VirtualMachineImpl.c	Wed Sep 14 15:29:23 2016 -0700
+++ b/src/jdk.attach/linux/native/libattach/VirtualMachineImpl.c	Mon Sep 19 10:11:34 2016 -0700
@@ -195,113 +195,6 @@
 }
 
 /*
- * Class:     sun_tools_attach_VirtualMachineImpl
- * Method:    isLinuxThreads
- * Signature: ()V
- */
-JNIEXPORT jboolean JNICALL Java_sun_tools_attach_VirtualMachineImpl_isLinuxThreads
-  (JNIEnv *env, jclass cls)
-{
-# ifndef _CS_GNU_LIBPTHREAD_VERSION
-# define _CS_GNU_LIBPTHREAD_VERSION 3
-# endif
-    size_t n;
-    char* s;
-    jboolean res;
-
-    n = confstr(_CS_GNU_LIBPTHREAD_VERSION, NULL, 0);
-    if (n <= 0) {
-       /* glibc before 2.3.2 only has LinuxThreads */
-       return JNI_TRUE;
-    }
-
-    s = (char *)malloc(n);
-    if (s == NULL) {
-        JNU_ThrowOutOfMemoryError(env, "malloc failed");
-        return JNI_TRUE;
-    }
-    confstr(_CS_GNU_LIBPTHREAD_VERSION, s, n);
-
-    /*
-     * If the LIBPTHREAD version include "NPTL" then we know we
-     * have the new threads library and not LinuxThreads
-     */
-    res = (jboolean)(strstr(s, "NPTL") == NULL);
-    free(s);
-    return res;
-}
-
-/*
- * Structure and callback function used to count the children of
- * a given process, and record the pid of the "manager thread".
- */
-typedef struct {
-    pid_t ppid;
-    int count;
-    pid_t mpid;
-} ChildCountContext;
-
-static void ChildCountCallback(const pid_t pid, void* user_data) {
-    ChildCountContext* context = (ChildCountContext*)user_data;
-    if (getParent(pid) == context->ppid) {
-        context->count++;
-        /*
-         * Remember the pid of the first child. If the final count is
-         * one then this is the pid of the LinuxThreads manager.
-         */
-        if (context->count == 1) {
-            context->mpid = pid;
-        }
-    }
-}
-
-/*
- * Class:     sun_tools_attach_VirtualMachineImpl
- * Method:    getLinuxThreadsManager
- * Signature: (I)I
- */
-JNIEXPORT jint JNICALL Java_sun_tools_attach_VirtualMachineImpl_getLinuxThreadsManager
-  (JNIEnv *env, jclass cls, jint pid)
-{
-    ChildCountContext context;
-
-    /*
-     * Iterate over all processes to find how many children 'pid' has
-     */
-    context.ppid = pid;
-    context.count = 0;
-    context.mpid = (pid_t)0;
-    forEachProcess(ChildCountCallback, (void*)&context);
-
-    /*
-     * If there's no children then this is likely the pid of the primordial
-     * created by the launcher - in that case the LinuxThreads manager is the
-     * parent of this process.
-     */
-    if (context.count == 0) {
-        pid_t parent = getParent(pid);
-        if ((int)parent > 0) {
-            return (jint)parent;
-        }
-    }
-
-    /*
-     * There's one child so this is likely the embedded VM case where the
-     * the primordial thread == LinuxThreads initial thread. The LinuxThreads
-     * manager in that case is the child.
-     */
-    if (context.count == 1) {
-        return (jint)context.mpid;
-    }
-
-    /*
-     * If we get here it's most likely we were given the wrong pid
-     */
-    JNU_ThrowIOException(env, "Unable to get pid of LinuxThreads manager thread");
-    return -1;
-}
-
-/*
  * Structure and callback function used to send a QUIT signal to all
  * children of a given process
  */
--- a/src/jdk.jdi/share/classes/com/sun/tools/jdi/ReferenceTypeImpl.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/src/jdk.jdi/share/classes/com/sun/tools/jdi/ReferenceTypeImpl.java	Mon Sep 19 10:11:34 2016 -0700
@@ -993,32 +993,39 @@
         return minorVersion;
     }
 
-    private void getConstantPoolInfo() {
+    private byte[] getConstantPoolInfo() {
         JDWP.ReferenceType.ConstantPool jdwpCPool;
         if (!vm.canGetConstantPool()) {
             throw new UnsupportedOperationException();
         }
         if (constantPoolInfoGotten) {
-            return;
-        } else {
-            try {
-                jdwpCPool = JDWP.ReferenceType.ConstantPool.process(vm, this);
-            } catch (JDWPException exc) {
-                if (exc.errorCode() == JDWP.Error.ABSENT_INFORMATION) {
-                    constanPoolCount = 0;
-                    constantPoolBytesRef = null;
-                    constantPoolInfoGotten = true;
-                    return;
-                } else {
-                    throw exc.toJDIException();
-                }
+            if (constantPoolBytesRef == null) {
+                return null;
+            }
+            byte[] cpbytes = constantPoolBytesRef.get();
+            if (cpbytes != null) {
+                return cpbytes;
             }
-            byte[] cpbytes;
-            constanPoolCount = jdwpCPool.count;
-            cpbytes = jdwpCPool.bytes;
-            constantPoolBytesRef = new SoftReference<byte[]>(cpbytes);
-            constantPoolInfoGotten = true;
         }
+
+        try {
+            jdwpCPool = JDWP.ReferenceType.ConstantPool.process(vm, this);
+        } catch (JDWPException exc) {
+            if (exc.errorCode() == JDWP.Error.ABSENT_INFORMATION) {
+                constanPoolCount = 0;
+                constantPoolBytesRef = null;
+                constantPoolInfoGotten = true;
+                return null;
+            } else {
+                throw exc.toJDIException();
+            }
+        }
+        byte[] cpbytes;
+        constanPoolCount = jdwpCPool.count;
+        cpbytes = jdwpCPool.bytes;
+        constantPoolBytesRef = new SoftReference<byte[]>(cpbytes);
+        constantPoolInfoGotten = true;
+        return cpbytes;
     }
 
     public int constantPoolCount() {
@@ -1031,13 +1038,13 @@
     }
 
     public byte[] constantPool() {
+        byte[] cpbytes;
         try {
-            getConstantPoolInfo();
+            cpbytes = getConstantPoolInfo();
         } catch (RuntimeException exc) {
             throw exc;
         }
-        if (constantPoolBytesRef != null) {
-            byte[] cpbytes = constantPoolBytesRef.get();
+        if (cpbytes != null) {
             /*
              * Arrays are always modifiable, so it is a little unsafe
              * to return the cached bytecodes directly; instead, we
--- a/src/jdk.jdi/share/classes/module-info.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/src/jdk.jdi/share/classes/module-info.java	Mon Sep 19 10:11:34 2016 -0700
@@ -25,6 +25,7 @@
 
 module jdk.jdi {
     requires jdk.attach;
+    requires jdk.jdwp.agent;
 
     exports com.sun.jdi;
     exports com.sun.jdi.connect;
--- a/src/jdk.jlink/share/classes/jdk/tools/jlink/builder/DefaultImageBuilder.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/src/jdk.jlink/share/classes/jdk/tools/jlink/builder/DefaultImageBuilder.java	Mon Sep 19 10:11:34 2016 -0700
@@ -55,6 +55,7 @@
 import java.util.Optional;
 import java.util.Properties;
 import java.util.Set;
+import java.util.stream.Collectors;
 import jdk.tools.jlink.internal.BasicImageWriter;
 import jdk.tools.jlink.internal.plugins.FileCopierPlugin.SymImageFile;
 import jdk.tools.jlink.internal.ExecutableImage;
@@ -159,7 +160,7 @@
             }
             i++;
         }
-        props.setProperty("MODULES", builder.toString());
+        props.setProperty("MODULES", quote(builder.toString()));
     }
 
     @Override
@@ -188,7 +189,8 @@
 
             storeFiles(modules, release);
 
-            if (Files.getFileStore(root).supportsFileAttributeView(PosixFileAttributeView.class)) {
+            if (root.getFileSystem().supportedFileAttributeViews()
+                    .contains("posix")) {
                 // launchers in the bin directory need execute permission.
                 // On Windows, "bin" also subdirectories containing jvm.dll.
                 if (Files.isDirectory(bin)) {
@@ -217,19 +219,38 @@
         }
     }
 
+    // Parse version string and return a string that includes only version part
+    // leaving "pre", "build" information. See also: java.lang.Runtime.Version.
+    private static String parseVersion(String str) {
+        return Runtime.Version.parse(str).
+            version().
+            stream().
+            map(Object::toString).
+            collect(Collectors.joining("."));
+    }
+
+    private static String quote(String str) {
+        return "\"" + str + "\"";
+    }
+
     private Properties releaseProperties(ResourcePool pool) throws IOException {
         Properties props = new Properties();
         Optional<ResourcePoolModule> javaBase = pool.moduleView().findModule("java.base");
         javaBase.ifPresent(mod -> {
             // fill release information available from transformed "java.base" module!
             ModuleDescriptor desc = mod.descriptor();
-            desc.osName().ifPresent(s -> props.setProperty("OS_NAME", s));
-            desc.osVersion().ifPresent(s -> props.setProperty("OS_VERSION", s));
-            desc.osArch().ifPresent(s -> props.setProperty("OS_ARCH", s));
-            props.setProperty("JAVA_VERSION", System.getProperty("java.version"));
+            desc.osName().ifPresent(s -> {
+                props.setProperty("OS_NAME", quote(s));
+                this.targetOsName = s;
+            });
+            desc.osVersion().ifPresent(s -> props.setProperty("OS_VERSION", quote(s)));
+            desc.osArch().ifPresent(s -> props.setProperty("OS_ARCH", quote(s)));
+            desc.version().ifPresent(s -> props.setProperty("JAVA_VERSION",
+                    quote(parseVersion(s.toString()))));
+            desc.version().ifPresent(s -> props.setProperty("JAVA_FULL_VERSION",
+                    quote(s.toString())));
         });
 
-        this.targetOsName = props.getProperty("OS_NAME");
         if (this.targetOsName == null) {
             throw new PluginException("TargetPlatform attribute is missing for java.base module");
         }
@@ -282,8 +303,8 @@
                         StandardOpenOption.CREATE_NEW)) {
                     writer.write(sb.toString());
                 }
-                if (Files.getFileStore(root.resolve("bin"))
-                        .supportsFileAttributeView(PosixFileAttributeView.class)) {
+                if (root.resolve("bin").getFileSystem()
+                        .supportedFileAttributeViews().contains("posix")) {
                     setExecutable(cmd);
                 }
                 // generate .bat file for Windows
--- a/test/ProblemList.txt	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/ProblemList.txt	Mon Sep 19 10:11:34 2016 -0700
@@ -159,7 +159,6 @@
 
 # jdk_net
 
-
 java/net/MulticastSocket/NoLoopbackPackets.java                 7122846 macosx-all
 java/net/MulticastSocket/SetLoopbackMode.java                   7122846 macosx-all
 
@@ -217,66 +216,6 @@
 
 sun/security/tools/jarsigner/warnings/BadKeyUsageTest.java      8026393 generic-all
 
-sun/security/pkcs11/Cipher/ReinitCipher.java                    8077138,8023434 windows-all
-sun/security/pkcs11/Cipher/TestPKCS5PaddingError.java           8077138,8023434 windows-all
-sun/security/pkcs11/Cipher/TestRSACipher.java                   8077138,8023434 windows-all
-sun/security/pkcs11/Cipher/TestRSACipherWrap.java               8077138,8023434 windows-all
-sun/security/pkcs11/Cipher/TestRawRSACipher.java                8077138,8023434 windows-all
-sun/security/pkcs11/Cipher/TestSymmCiphers.java                 8077138,8023434 windows-all
-sun/security/pkcs11/Cipher/TestSymmCiphersNoPad.java            8077138,8023434 windows-all
-sun/security/pkcs11/KeyAgreement/TestDH.java                    8077138,8023434 windows-all
-sun/security/pkcs11/KeyAgreement/TestInterop.java               8077138,8023434 windows-all
-sun/security/pkcs11/KeyAgreement/TestShort.java                 8077138,8023434 windows-all
-sun/security/pkcs11/KeyAgreement/SupportedDHKeys.java           8077138 windows-all
-sun/security/pkcs11/KeyAgreement/UnsupportedDHKeys.java         8077138 windows-all
-sun/security/pkcs11/KeyGenerator/DESParity.java                 8077138,8023434 windows-all
-sun/security/pkcs11/KeyGenerator/TestKeyGenerator.java          8077138,8023434 windows-all
-sun/security/pkcs11/KeyPairGenerator/TestDH2048.java            8077138,8023434 windows-all
-sun/security/pkcs11/KeyStore/SecretKeysBasic.sh                 8077138,8023434 windows-all
-sun/security/pkcs11/Mac/MacKAT.java                             8077138,8023434 windows-all
-sun/security/pkcs11/Mac/MacSameTest.java                        8077138,8023434 windows-all
-sun/security/pkcs11/Mac/ReinitMac.java                          8077138,8023434 windows-all
-sun/security/pkcs11/MessageDigest/ByteBuffers.java              8077138,8023434 windows-all
-sun/security/pkcs11/MessageDigest/DigestKAT.java                8077138,8023434 windows-all
-sun/security/pkcs11/MessageDigest/ReinitDigest.java             8077138,8023434 windows-all
-sun/security/pkcs11/MessageDigest/TestCloning.java              8077138,8023434 windows-all
-sun/security/pkcs11/Provider/ConfigQuotedString.sh              8077138,8023434 windows-all
-sun/security/pkcs11/Provider/Login.sh                           8077138,8023434 windows-all
-sun/security/pkcs11/SampleTest.java                             8077138,8023434 windows-all
-sun/security/pkcs11/Secmod/AddPrivateKey.java                   8077138,8023434 windows-all
-sun/security/pkcs11/Secmod/AddTrustedCert.java                  8077138,8023434 windows-all
-sun/security/pkcs11/Secmod/Crypto.java                          8077138,8023434 windows-all
-sun/security/pkcs11/Secmod/GetPrivateKey.java                   8077138,8023434 windows-all
-sun/security/pkcs11/Secmod/JksSetPrivateKey.java                8077138,8023434 windows-all
-sun/security/pkcs11/Secmod/LoadKeystore.java                    8077138,8023434 windows-all
-sun/security/pkcs11/SecureRandom/Basic.java                     8077138,8023434 windows-all
-sun/security/pkcs11/SecureRandom/TestDeserialization.java       8077138,8023434 windows-all
-sun/security/pkcs11/Serialize/SerializeProvider.java            8077138,8023434 windows-all
-sun/security/pkcs11/Signature/ByteBuffers.java                  8077138,8023434 windows-all
-sun/security/pkcs11/Signature/ReinitSignature.java              8077138,8023434 windows-all
-sun/security/pkcs11/Signature/TestDSA.java                      8077138,8023434 windows-all
-sun/security/pkcs11/Signature/TestDSAKeyLength.java             8077138,8023434 windows-all
-sun/security/pkcs11/Signature/TestRSAKeyLength.java             8077138,8023434 windows-all
-sun/security/pkcs11/ec/ReadCertificates.java                    8077138,8023434 windows-all
-sun/security/pkcs11/ec/ReadPKCS12.java                          8077138,8023434 windows-all
-sun/security/pkcs11/ec/TestCurves.java                          8077138,8023434 windows-all
-sun/security/pkcs11/ec/TestECDH.java                            8077138,8023434 windows-all
-sun/security/pkcs11/ec/TestECDH2.java                           8077138,8023434 windows-all
-sun/security/pkcs11/ec/TestECDSA.java                           8077138,8023434 windows-all
-sun/security/pkcs11/ec/TestECDSA2.java                          8077138,8023434 windows-all
-sun/security/pkcs11/ec/TestECGenSpec.java                       8077138,8023434 windows-all
-sun/security/pkcs11/rsa/KeyWrap.java                            8077138,8023434 windows-all
-sun/security/pkcs11/rsa/TestCACerts.java                        8077138,8023434 windows-all
-sun/security/pkcs11/rsa/TestKeyFactory.java                     8077138,8023434 windows-all
-sun/security/pkcs11/rsa/TestKeyPairGenerator.java               8077138,8023434 windows-all
-sun/security/pkcs11/rsa/TestSignatures.java                     8077138,8023434 windows-all
-sun/security/pkcs11/sslecc/ClientJSSEServerJSSE.java            8077138,8023434 windows-all
-sun/security/pkcs11/tls/TestKeyMaterial.java                    8077138,8023434 windows-all
-sun/security/pkcs11/tls/TestLeadingZeroesP11.java               8077138,8023434 windows-all
-sun/security/pkcs11/tls/TestMasterSecret.java                   8077138,8023434 windows-all
-sun/security/pkcs11/tls/TestPRF.java                            8077138,8023434 windows-all
-sun/security/pkcs11/tls/TestPremaster.java                      8077138,8023434 windows-all
-
 sun/security/krb5/auto/HttpNegotiateServer.java                 8038079 generic-all
 
 sun/security/ssl/SSLSocketImpl/AsyncSSLSocketClose.java         8161232 macosx-all
@@ -312,8 +251,6 @@
 
 tools/launcher/FXLauncherTest.java                              8068049 linux-all,macosx-all
 
-tools/pack200/Pack200Props.java                                 8155857 generic-all
-
 ############################################################################
 
 # jdk_jdi
@@ -328,9 +265,6 @@
 
 com/sun/jdi/sde/SourceDebugExtensionTest.java                   8158066 windows-all
 
-com/sun/jdi/ClassesByName2Test.java				8160833 generic-all
-com/sun/jdi/RedefineCrossEvent.java				8160833 generic-all
-
 ############################################################################
 
 # jdk_time
@@ -357,9 +291,11 @@
 
 sun/tools/jhsdb/BasicLauncherTest.java                          8160376 macosx-all
 
+sun/tools/jhsdb/HeapDumpTest.java                               8160376 macosx-all
+
 sun/tools/jhsdb/heapconfig/JMapHeapConfigTest.java              8160376 macosx-all
 
-sun/tools/jps/TestJpsJar.java                                   8160923 generic-all
+sun/tools/jps/TestJpsJar.java                                   8165500 generic-all
 
 sun/tools/jps/TestJpsJarRelative.java                           6456333 generic-all
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/com/sun/jdi/ConstantPoolInfoGC.java	Mon Sep 19 10:11:34 2016 -0700
@@ -0,0 +1,104 @@
+/*
+ * Copyright (c) 2016, 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
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ *  @test
+ *  @bug 6822627
+ *  @summary Test that ReferenceType.constantPool does not produce an NPE
+ *
+ *  @author Egor Ushakov
+ *
+ *  @modules jdk.jdi/com.sun.tools.jdi
+ *  @run build TestScaffold VMConnection
+ *  @run compile -g ConstantPoolInfoGC.java
+ *  @run main/othervm ConstantPoolInfoGC
+ */
+
+import com.sun.jdi.ReferenceType;
+import com.sun.tools.jdi.ReferenceTypeImpl;
+
+import java.lang.ref.Reference;
+import java.lang.reflect.Field;
+import java.util.Arrays;
+
+    /********** target program **********/
+
+class ConstantPoolGCTarg {
+    public static void main(String[] args){
+        System.out.println("Anything");
+    }
+}
+
+    /********** test program **********/
+
+public class ConstantPoolInfoGC extends TestScaffold {
+    ReferenceType targetClass;
+
+    ConstantPoolInfoGC(String args[]) {
+        super(args);
+    }
+
+    public static void main(String[] args)      throws Exception {
+        new ConstantPoolInfoGC(args).startTests();
+    }
+
+    /********** test core **********/
+
+    protected void runTests() throws Exception {
+        targetClass = startToMain("ConstantPoolGCTarg").location().declaringType();
+
+        if (vm().canGetConstantPool()) {
+            byte[] cpbytes = targetClass.constantPool();
+
+            // imitate SoftReference cleared
+            Field constantPoolBytesRef = ReferenceTypeImpl.class.getDeclaredField("constantPoolBytesRef");
+            constantPoolBytesRef.setAccessible(true);
+            Reference softRef = (Reference) constantPoolBytesRef.get(targetClass);
+            softRef.clear();
+
+            byte[] cpbytes2 = targetClass.constantPool();
+            if (!Arrays.equals(cpbytes, cpbytes2)) {
+                failure("Consequent constantPool results vary, first was : " + cpbytes + ", now: " + cpbytes2);
+            };
+
+        } else {
+            System.out.println("can get constant pool version not supported");
+        }
+
+
+        /*
+         * resume until end
+         */
+        listenUntilVMDisconnect();
+
+        /*
+         * deal with results of test
+         * if anything has called failure("foo") testFailed will be true
+         */
+        if (!testFailed) {
+            println("ConstantPoolInfoGC: passed");
+        } else {
+            throw new Exception("ConstantPoolInfoGC: failed");
+        }
+    }
+}
--- a/test/java/lang/Class/GetModuleTest.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/java/lang/Class/GetModuleTest.java	Mon Sep 19 10:11:34 2016 -0700
@@ -101,11 +101,8 @@
         return new Object[][] {
 
             { GetModuleTest.class,      null },
-            { GetModuleTest[].class,    null },
             { Object.class,             null },
-            { Object[].class,           null },
             { Component.class,          null },
-            { Component[].class,        null },
 
         };
     }
@@ -117,7 +114,7 @@
     public void testGetModuleOnVMAnonymousClass(Class<?> hostClass, String ignore) {
 
         // choose a class name in the same package as the host class
-        String prefix = packageName(hostClass);
+        String prefix = hostClass.getPackageName();
         if (prefix.length() > 0)
             prefix = prefix.replace('.', '/') + "/";
         String className = prefix + "Anon";
@@ -136,17 +133,6 @@
         assertTrue(anonClass.getModule() == hostClass.getModule());
     }
 
-    private static String packageName(Class<?> c) {
-        if (c.isArray()) {
-            return packageName(c.getComponentType());
-        } else {
-            String name = c.getName();
-            int dot = name.lastIndexOf('.');
-            if (dot == -1) return "";
-            return name.substring(0, dot);
-        }
-    }
-
     private static int constantPoolSize(byte[] classFile) {
         return ((classFile[8] & 0xFF) << 8) | (classFile[9] & 0xFF);
     }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/java/lang/instrument/CustomSystemLoader/Agent.java	Mon Sep 19 10:11:34 2016 -0700
@@ -0,0 +1,55 @@
+/*
+ * Copyright (c) 2016, 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
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import java.io.PrintStream;
+import java.lang.instrument.*;
+import java.lang.reflect.Field;
+
+/**
+  * @test
+  * @bug 8160950
+  * @summary test for custom system class loader
+  *
+  * @run build App Agent CustomLoader
+  * @run shell ../MakeJAR3.sh Agent 'Can-Retransform-Classes: true'
+  * @run main/othervm -javaagent:Agent.jar -Djava.system.class.loader=CustomLoader App
+  */
+
+public class Agent {
+    private static PrintStream err = System.err;
+    private static PrintStream out = System.out;
+    public  static boolean failed = false;
+
+    public static void premain(String agentArgs, Instrumentation instrumentation) {
+        ClassLoader myClassLoader = Agent.class.getClassLoader();
+        out.println("Agent: started; myClassLoader: " + myClassLoader);
+        try {
+            Field fld = myClassLoader.getClass().getField("agentClassLoader");
+            fld.set(myClassLoader.getClass(), myClassLoader);
+        } catch (Exception ex) {
+            failed = true;
+            ex.printStackTrace();
+        }
+        out.println("Agent: finished");
+   }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/java/lang/instrument/CustomSystemLoader/App.java	Mon Sep 19 10:11:34 2016 -0700
@@ -0,0 +1,46 @@
+/*
+ * Copyright (c) 2016, 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
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import java.io.PrintStream;
+
+public class App {
+
+    public static void main(String args[]) throws Exception {
+        (new App()).run(args, System.out);
+    }
+
+    public void run(String args[], PrintStream out) throws Exception {
+        out.println("App: Test started");
+        if (CustomLoader.agentClassLoader != CustomLoader.myself) {
+            System.out.println("App: agentClassLoader:    " + CustomLoader.agentClassLoader);
+            System.out.println("App: CustomLoader.myself: " + CustomLoader.myself);
+            System.out.println("App: myClassLoader:       " + App.class.getClassLoader());
+            throw new Exception("App: Agent's system class loader is not CustomLoader");
+        } else if (Agent.failed) {
+            throw new Exception("App: Agent failed");
+        } else if (CustomLoader.failed) {
+            throw new Exception("App: CustomLoader failed");
+        }
+        out.println("App: Test passed");
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/java/lang/instrument/CustomSystemLoader/CustomLoader.java	Mon Sep 19 10:11:34 2016 -0700
@@ -0,0 +1,81 @@
+/*
+ * Copyright (c) 2016, 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
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import java.io.DataInputStream;
+import java.io.InputStream;
+import java.io.IOException;
+import java.io.PrintStream;
+import java.util.jar.JarFile;
+import java.util.zip.ZipEntry;
+
+public class CustomLoader extends ClassLoader {
+    private static PrintStream out = System.out;
+    public  static ClassLoader myself;
+    public  static ClassLoader agentClassLoader;
+    public  static boolean failed = true;
+
+    public CustomLoader(ClassLoader classLoader) {
+        super(classLoader);
+        myself = this;
+    }
+
+    @Override
+    public Class<?> loadClass(String name) throws ClassNotFoundException {
+        out.println("CustomLoader: loading class: " + name);
+        if (name.equals("Agent")) {
+            Class c = null;
+            try {
+                byte[] buf = locateBytes();
+                c = defineClass(name, buf, 0, buf.length);
+            } catch (IOException ex) {
+                throw new ClassNotFoundException(ex.getMessage());
+            }
+            resolveClass(c);
+            out.println("CustomLoader.loadClass after resolveClass: " + name +
+                        "; Class: " + c + "; ClassLoader: " + c.getClassLoader());
+            return c;
+        }
+        return super.loadClass(name);
+    }
+
+    private byte[] locateBytes() throws IOException {
+        try {
+            JarFile jar = new JarFile("Agent.jar");
+            InputStream is = jar.getInputStream(jar.getEntry("Agent.class"));
+            int len = is.available();
+            byte[] buf = new byte[len];
+            DataInputStream in = new DataInputStream(is);
+            in.readFully(buf);
+            return buf;
+        } catch (IOException ioe) {
+            ioe.printStackTrace();
+            throw new IOException("Test failed due to IOException!");
+        }
+    }
+
+    void appendToClassPathForInstrumentation(String path) {
+        out.println("CustomLoader.appendToClassPathForInstrumentation: " +
+                    this + ", jar: " + path);
+        failed = false;
+    }
+}
--- a/test/java/lang/invoke/VMAnonymousClass.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/java/lang/invoke/VMAnonymousClass.java	Mon Sep 19 10:11:34 2016 -0700
@@ -57,9 +57,9 @@
     @Test public void testJavaLangInvoke()  throws Throwable { test("java/lang/invoke");  }
     @Test public void testProhibitedJavaPkg() throws Throwable {
        try {
-          test("java/prohibited");
-       } catch (SecurityException e) {
-         return;
+           test("java/prohibited");
+       } catch (IllegalArgumentException e) {
+           return;
        }
        throw new RuntimeException("Expected SecurityException");
      }
@@ -72,10 +72,17 @@
         if (pkg.equals("java/prohibited")) {
             VMAnonymousClass sampleclass = new VMAnonymousClass();
             host_class = (Class)sampleclass.getClass();
+        } else if (pkg.equals("java/lang")) {
+          host_class = Object.class;
+        } else if (pkg.equals("java/util")) {
+            host_class = java.util.ArrayList.class;
+        } else if (pkg.equals("jdk/internal/misc")) {
+            host_class = jdk.internal.misc.Signal.class;
+        } else if (pkg.equals("java/lang/invoke")) {
+            host_class = java.lang.invoke.CallSite.class;
         } else {
-            host_class = Object.class;
+            throw new RuntimeException("Unexpected pkg: " + pkg);
         }
-
         // Define VM anonymous class
         Class anonClass = unsafe.defineAnonymousClass(host_class, bytes, null);
 
--- a/test/java/lang/management/ThreadMXBean/Locks.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/java/lang/management/ThreadMXBean/Locks.java	Mon Sep 19 10:11:34 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2016, 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
@@ -26,27 +26,28 @@
  * @bug     4530538
  * @summary Basic unit test of ThreadInfo.getLockName()
  *          and ThreadInfo.getLockOwnerName()
+ * @library /lib/testlibrary
  * @author  Mandy Chung
  * @author  Jaroslav Bachorik
  *
- * @library /lib/testlibrary
  * @modules java.management
  * @build jdk.testlibrary.*
  * @run main/othervm Locks
  */
-
 import java.lang.management.*;
+import java.util.Arrays;
+import java.util.Optional;
 import java.util.concurrent.Phaser;
+import java.util.function.Predicate;
 import jdk.testlibrary.LockFreeLogManager;
 
 public class Locks {
-    private static final Object objA = new Object();
-    private static final Object objB = new Object();
-    private static final Object objC = new Object();
-    private static final ThreadMXBean tm = ManagementFactory.getThreadMXBean();
-    private static final LockFreeLogManager logger = new LockFreeLogManager();
 
-    private static boolean testFailed = false;
+    private static final Object OBJA = new Object();
+    private static final Object OBJB = new Object();
+    private static final EnhancedWaiter OBJC = new EnhancedWaiter();
+    private static final ThreadMXBean TM = ManagementFactory.getThreadMXBean();
+    private static final LockFreeLogManager LOGGER = new LockFreeLogManager();
 
     private static String getLockName(Object lock) {
         if (lock == null) return null;
@@ -56,67 +57,103 @@
     }
 
     private static void assertNoLock(Thread t) {
-        long tid = t.getId();
-        ThreadInfo info = tm.getThreadInfo(tid);
-        String result = info.getLockName();
+        if (t == null) {
+            return;
+        }
+        Optional<ThreadInfo> result = Arrays.asList(
+                TM.getThreadInfo(TM.getAllThreadIds(), true, true)).
+                stream().
+                filter(tInfo -> (tInfo != null && tInfo.getLockOwnerName() != null)
+                        ? tInfo.getLockOwnerName().equals(t.getName()) : false).
+                findAny();
+        if (result.isPresent()) {
+            throw new RuntimeException("Thread " + t.getName() + " is not "
+                    + "supposed to be hold any lock. Currently owning lock : "
+                    + result.get().getLockName());
+        }
+    }
 
-        if (result != null) {
-            throw new RuntimeException("Thread " + t.getName() + " is not supposed to hold any lock. " +
-                                       "Currently owning lock: " + result);
+   /*
+    * Handy debug function to check if error condition is because of test code or not.
+    */
+    private static void printStackTrace(Thread thread) {
+        if (thread == null) {
+            return;
+        }
+        StackTraceElement[] stackTrace = thread.getStackTrace();
+        log("Stack dump : Thread -> " + thread.getName());
+        for (StackTraceElement stackTraceEl : stackTrace) {
+            log("\t" + stackTraceEl.toString());
         }
     }
 
-    private static void checkBlockedObject(Thread t, Object lock, Thread owner,
-                                           Thread.State expectedState) {
+    private static void assertThreadState(Thread t, Thread.State expectedState) {
         long tid = t.getId();
-        ThreadInfo info = tm.getThreadInfo(tid);
-        String result = info.getLockName();
-        String expectedLock = (lock != null ? getLockName(lock) : null);
-        String expectedOwner = (owner != null ? owner.getName() : null);
+        if (expectedState == Thread.State.BLOCKED
+                && TM.getThreadInfo(tid).getThreadState() != Thread.State.BLOCKED) {
+            int retryCount = 0;
+            printStackTrace(t);
+            while (TM.getThreadInfo(tid).getThreadState() != Thread.State.BLOCKED) {
+                if (retryCount++ > 500) {
+                    printStackTrace(t);
+                    throw new RuntimeException("Thread " + t.getName() + " is at "
+                            + TM.getThreadInfo(tid).getThreadState() + " state but is expected to "
+                            + "be in Thread.State = " + expectedState);
+                }
+                goSleep(100);
+            }
+        }
+        if (!TM.getThreadInfo(tid).getThreadState().equals(expectedState)) {
+            printStackTrace(t);
+            throw new RuntimeException("Thread " + t.getName() + " is at "
+                    + TM.getThreadInfo(tid).getThreadState() + " state but is expected to "
+                    + "be in Thread.State = " + expectedState);
+        }
+    }
 
-        if (lock != null) {
-            if (expectedState == Thread.State.BLOCKED) {
-                int retryCount=0;
-                while(info.getThreadState() != Thread.State.BLOCKED) {
-                    if (retryCount++ > 500) {
-                        throw new RuntimeException("Thread " + t.getName() +
-                                " is expected to block on " + expectedLock +
-                                " but got " + result +
-                                " Thread.State = " + info.getThreadState());
-                    }
-                    goSleep(100);
-                    info = tm.getThreadInfo(tid);
-                    result = info.getLockName();
+   /*
+    * Do slow check if thread is blocked on a lock. It is possible that last thread
+    * to come out of Phaser might still be in Phaser call stack (Unsafe.park) and
+    * hence might eventually acquire expected lock.
+    */
+    private static void checkBlockedObject(Thread t, Object lock, Thread owner) {
+        long tid = t.getId();
+        String result = TM.getThreadInfo(tid).getLockName();
+        final String expectedLock = (lock != null ? getLockName(lock) : null);
+        Predicate<String> p = (res) -> ((res != null && !res.equals(expectedLock))
+                || (res == null && expectedLock != null));
+
+        if (p.test(result)) {
+            printStackTrace(t);
+            int retryCount = 0;
+            while (p.test(result)) {
+                if (retryCount++ > 500) {
+                    printStackTrace(t);
+                    throw new RuntimeException("Thread " + t.getName() + " is blocked on "
+                            + expectedLock + " but got " + result);
                 }
-            }
-            if (expectedState == Thread.State.WAITING &&
-                    info.getThreadState() != Thread.State.WAITING) {
-                throw new RuntimeException("Thread " + t.getName() +
-                        " is expected to wait on " + expectedLock +
-                        " but got " + result +
-                        " Thread.State = " + info.getThreadState());
+                goSleep(100);
+                result = TM.getThreadInfo(tid).getLockName();
             }
         }
 
-        if ((result != null && !result.equals(expectedLock)) ||
-                (result == null && expectedLock != null)) {
-            throw new RuntimeException("Thread " + t.getName() + " is blocked on " +
-                    expectedLock + " but got " + result);
-        }
-        result = info.getLockOwnerName();
-        if ((result != null && !result.equals(expectedOwner)) ||
-                (result == null && expectedOwner != null)) {
-            throw new RuntimeException("Owner of " + lock + " should be " +
-                    expectedOwner + " but got " + result);
+        result = TM.getThreadInfo(tid).getLockOwnerName();
+        final String expectedOwner = (owner != null ? owner.getName() : null);
+
+        p = (res) -> ((res != null && !res.equals(expectedOwner))
+                || (res == null && expectedOwner != null));
+        if (p.test(result)) {
+            printStackTrace(t);
+            throw new RuntimeException("Owner of " + lock + " should be "
+                    + expectedOwner + " but got " + result);
         }
     }
 
-    private static void goSleep(long ms) {
+    private static void goSleep(long ms){
         try {
             Thread.sleep(ms);
-        } catch (InterruptedException e) {
-            e.printStackTrace();
-            testFailed = true;
+        } catch (InterruptedException ex) {
+            throw new RuntimeException(ex);
         }
     }
 
@@ -128,14 +165,15 @@
             super("LockAThread");
             this.p = p;
         }
+        @Override
         public void run() {
-            synchronized(objA) {
-                // stop here  for LockBThread to hold objB
-                log("LockAThread about to block on objB");
+            synchronized(OBJA) {
+                // block here while LockBThread holds OBJB
+                log("LockAThread about to block on OBJB");
                 p.arriveAndAwaitAdvance(); // Phase 1 (blocking)
-                synchronized(objB) {
+                synchronized(OBJB) {
                     dummyCounter++;
-                };
+                }
             }
             p.arriveAndAwaitAdvance(); // Phase 2 (blocking)
             log("LockAThread about to exit");
@@ -150,14 +188,15 @@
             super("LockBThread");
             this.p = p;
         }
+        @Override
         public void run() {
-            synchronized(objB) {
-                log("LockBThread about to block on objC");
+            synchronized(OBJB) {
+                log("LockBThread about to block on OBJC");
                 p.arriveAndAwaitAdvance(); // Phase 1 (blocking)
-                // Signal main thread about to block on objC
-                synchronized(objC) {
+                // Signal main thread about to block on OBJC
+                synchronized(OBJC) {
                     dummyCounter++;
-                };
+                }
             }
             p.arriveAndAwaitAdvance(); // Phase 2 (blocking)
             log("LockBThread about to exit");
@@ -166,9 +205,30 @@
         }
     }
 
+   /*
+    * Must be invoked from within a synchronized context
+    */
+    private static class EnhancedWaiter {
+
+        boolean isNotified = false;
+
+        public void doWait() throws InterruptedException {
+            while (!isNotified) {
+                wait();
+            }
+            isNotified = false;
+        }
+
+        public void doNotify() {
+            isNotified = true;
+            notify();
+        }
+    }
+
     private static WaitingThread waiter;
     private static final Object ready = new Object();
     private static CheckerThread checker;
+
     static class WaitingThread extends Thread {
         private final Phaser p;
 
@@ -180,17 +240,16 @@
         }
         @Override
         public void run() {
-            synchronized(objC) {
-                log("WaitingThread about to wait on objC");
+            synchronized(OBJC) {
+                log("WaitingThread about to wait on OBJC");
                 try {
-                    // Signal checker thread, about to wait on objC.
+                    // Signal checker thread, about to wait on OBJC.
                     waiting = false;
                     p.arriveAndAwaitAdvance(); // Phase 1 (waiting)
                     waiting = true;
-                    objC.wait();
+                    OBJC.doWait();
                 } catch (InterruptedException e) {
-                    e.printStackTrace();
-                    testFailed = true;
+                    throw new RuntimeException(e); // Do not continue test
                 }
 
                 // block until CheckerThread finishes checking
@@ -202,19 +261,18 @@
                     dummyCounter++;
                 }
             }
-            synchronized(objC) {
+            synchronized(OBJC) {
                 try {
-                    // signal checker thread, about to wait on objC
+                    // signal checker thread, about to wait on OBJC
                     waiting = false;
                     p.arriveAndAwaitAdvance(); // Phase 3 (waiting)
                     waiting = true;
-                    objC.wait();
+                    OBJC.doWait();
                 } catch (InterruptedException e) {
-                    e.printStackTrace();
-                    testFailed = true;
+                    throw new RuntimeException(e);
                 }
             }
-            log("WaitingThread about to exit waiting on objC 2");
+            log("WaitingThread about to exit waiting on OBJC 2");
         }
 
         public void waitForWaiting() {
@@ -241,85 +299,87 @@
             super("CheckerThread");
         }
 
+        @Override
         public void run() {
-            synchronized (ready) {
-                // wait until WaitingThread about to wait for objC
+            synchronized(ready) {
+                // wait until WaitingThread about to wait for OBJC
                 waiter.waitForWaiting(); // Phase 1 (waiting)
-                checkBlockedObject(waiter, objC, null, Thread.State.WAITING);
+                assertThreadState(waiter, Thread.State.WAITING);
+                checkBlockedObject(waiter, OBJC, null);
 
-                synchronized (objC) {
-                    objC.notify();
+                synchronized(OBJC) {
+                    OBJC.doNotify();
                 }
-
                 // wait for waiter thread to about to enter
                 // synchronized object ready.
                 waiter.waitForBlocked(); // Phase 2 (waiting)
-                checkBlockedObject(waiter, ready, this, Thread.State.BLOCKED);
+                assertThreadState(waiter, Thread.State.BLOCKED);
+                checkBlockedObject(waiter, ready, this);
             }
 
             // wait for signal from waiting thread that it is about
-            // wait for objC.
+            // wait for OBJC.
             waiter.waitForWaiting(); // Phase 3 (waiting)
-            synchronized(objC) {
-                checkBlockedObject(waiter, objC, Thread.currentThread(), Thread.State.WAITING);
-                objC.notify();
+            synchronized(OBJC) {
+                assertThreadState(waiter, Thread.State.WAITING);
+                checkBlockedObject(waiter, OBJC, Thread.currentThread());
+                OBJC.doNotify();
             }
-
         }
     }
 
     public static void main(String args[]) throws Exception {
-        Thread mainThread = Thread.currentThread();
+        try {
+            Thread mainThread = Thread.currentThread();
 
-        // Test uncontested case
-        LockAThread t1;
-        LockBThread t2;
-
-        Phaser p = new Phaser(3);
-        synchronized(objC) {
-            // Make sure the main thread is not holding any lock
-            assertNoLock(mainThread);
+            // Test uncontested case
+            LockAThread t1;
+            LockBThread t2;
 
-            // Test deadlock case
-            // t1 holds lockA and attempts to lock B
-            // t2 holds lockB and attempts to lock C
-
-            t1 = new LockAThread(p);
-            t1.start();
+            Phaser p = new Phaser(3);
+            synchronized(OBJC) {
+                // Make sure the main thread is not holding any lock
+                assertNoLock(mainThread);
 
-            t2 = new LockBThread(p);
-            t2.start();
+                // Test deadlock case
+                // t1 holds lockA and attempts to lock B
+                // t2 holds lockB and attempts to lock C
+                t1 = new LockAThread(p);
+                t1.start();
 
-            p.arriveAndAwaitAdvance(); // Phase 1 (blocking)
-            checkBlockedObject(t2, objC, mainThread, Thread.State.BLOCKED);
-            checkBlockedObject(t1, objB, t2, Thread.State.BLOCKED);
+                t2 = new LockBThread(p);
+                t2.start();
 
-            long[] expectedThreads = new long[3];
-            expectedThreads[0] = t1.getId(); // blocked on lockB
-            expectedThreads[1] = t2.getId(); // owner of lockB blocking on lockC
-            expectedThreads[2] = mainThread.getId(); // owner of lockC
-            findThreadsBlockedOn(objB, expectedThreads);
-        }
-        p.arriveAndAwaitAdvance(); // Phase 2 (blocking)
+                p.arriveAndAwaitAdvance(); // Phase 1 (blocking)
+                assertThreadState(t2, Thread.State.BLOCKED);
+                checkBlockedObject(t2, OBJC, mainThread);
+                assertThreadState(t1, Thread.State.BLOCKED);
+                checkBlockedObject(t1, OBJB, t2);
 
-        p = new Phaser(2);
-        // Test Object.wait() case
-        waiter = new WaitingThread(p);
-        waiter.start();
+                long[] expectedThreads = new long[3];
+                expectedThreads[0] = t1.getId(); // blocked on lockB
+                expectedThreads[1] = t2.getId(); // owner of lockB blocking on lockC
+                expectedThreads[2] = mainThread.getId(); // owner of lockC
+                findThreadsBlockedOn(OBJB, expectedThreads);
+            }
+            p.arriveAndAwaitAdvance(); // Phase 2 (blocking)
 
-        checker = new CheckerThread();
-        checker.start();
+            p = new Phaser(2);
+            // Test Object.wait() case
+            waiter = new WaitingThread(p);
+            waiter.start();
+
+            checker = new CheckerThread();
+            checker.start();
 
-        try {
-            waiter.join();
-            checker.join();
-        } catch (InterruptedException e) {
-            e.printStackTrace();
-            testFailed = true;
-        }
-
-        if (testFailed) {
-            throw new RuntimeException("TEST FAILED.");
+            try {
+                waiter.join();
+                checker.join();
+            } catch (InterruptedException e) {
+                throw new RuntimeException(e);
+            }
+        } finally { // log all the messages to STDOUT
+            System.out.println(LOGGER.toString());
         }
         System.out.println("Test passed.");
     }
@@ -335,9 +395,9 @@
                     throw new RuntimeException("TEST FAILED: " +
                             lock + " expected to have owner");
                 }
-                for (int j = 0; j < infos.length; j++) {
-                    if (infos[j].getThreadId() == threadId) {
-                        ownerInfo = infos[j];
+                for (ThreadInfo info1 : infos) {
+                    if (info1.getThreadId() == threadId) {
+                        ownerInfo = info1;
                         break;
                     }
                 }
@@ -349,11 +409,11 @@
             throws Exception {
         String lock = getLockName(o);
         // Check with ThreadInfo with no stack trace (i.e. no safepoint)
-        ThreadInfo[] infos = tm.getThreadInfo(tm.getAllThreadIds());
+        ThreadInfo[] infos = TM.getThreadInfo(TM.getAllThreadIds());
         doCheck(infos, lock, expectedThreads);
 
         // Check with ThreadInfo with stack trace
-        infos = tm.getThreadInfo(tm.getAllThreadIds(), 1);
+        infos = TM.getThreadInfo(TM.getAllThreadIds(), 1);
         doCheck(infos, lock, expectedThreads);
     }
 
@@ -376,7 +436,7 @@
         long[] threads = new long[10];
         int count = 0;
         threads[count++] = ownerInfo.getThreadId();
-        while (ownerInfo != null && ownerInfo.getThreadState() == Thread.State.BLOCKED) {
+        while (ownerInfo.getThreadState() == Thread.State.BLOCKED) {
             ownerInfo = findOwnerInfo(infos, lock);
             threads[count++] = ownerInfo.getThreadId();
             log(" Owner = %s  id = %d",
@@ -407,6 +467,6 @@
     }
 
     private static void log(String format, Object ... args) {
-        logger.log(format + "%n", args);
+        LOGGER.log(format + "%n", args);
     }
 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/java/security/cert/CertPathValidator/trustAnchor/ValWithAnchorByName.java	Mon Sep 19 10:11:34 2016 -0700
@@ -0,0 +1,292 @@
+/*
+ * Copyright (c) 2004, 2016, 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
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8132926
+ * @summary PKIXParameters built with public key form of TrustAnchor causes
+ *          NPE during cert path building/validation
+ * @run main ValWithAnchorByName
+ */
+
+import java.io.ByteArrayInputStream;
+import java.security.cert.CertificateException;
+import java.security.cert.CertificateFactory;
+import java.security.cert.CertPath;
+import java.security.cert.CertPathValidator;
+import java.security.cert.PKIXParameters;
+import java.security.cert.PKIXRevocationChecker;
+import java.security.cert.TrustAnchor;
+import java.security.cert.X509Certificate;
+import java.util.ArrayList;
+import java.util.Base64;
+import java.util.Collections;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.HashMap;
+
+// To get certpath debugging, add -Djava.security.debug=certpath
+
+public class ValWithAnchorByName {
+
+    // The following certificates and OCSP responses were captured from
+    // a test run that used certificates and responses generated by
+    // sun.security.testlibrary.CertificateBuilder and
+    // sun.security.testlibrary.SimpleOCSPServer.
+
+    // Subject: CN=SSLCertificate, O=SomeCompany
+    // Issuer: CN=Intermediate CA Cert, O=SomeCompany
+    // Validity: Tue Aug 30 14:37:19 PDT 2016 to Wed Aug 30 14:37:19 PDT 2017
+    private static final String EE_CERT =
+        "-----BEGIN CERTIFICATE-----\n" +
+        "MIIDnTCCAoWgAwIBAgICEAAwDQYJKoZIhvcNAQELBQAwNTEUMBIGA1UEChMLU29t\n" +
+        "ZUNvbXBhbnkxHTAbBgNVBAMTFEludGVybWVkaWF0ZSBDQSBDZXJ0MB4XDTE2MDgz\n" +
+        "MDIxMzcxOVoXDTE3MDgzMDIxMzcxOVowLzEUMBIGA1UEChMLU29tZUNvbXBhbnkx\n" +
+        "FzAVBgNVBAMTDlNTTENlcnRpZmljYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A\n" +
+        "MIIBCgKCAQEAjgv8KKE4CO0rbCjRLA1hXjRiSq30jeusCJ8frbRG+QOBgQ3j6jgc\n" +
+        "vk5wG1aTu7R4AFn0/HRDMzP9ZbRlZVIbJUTd8YiaNyZeyWapPnxHWrPCd5e1xopk\n" +
+        "ElieDdEH5FiLGtIrWy56CGA1hfQb1vUVYegyeY+TTtMFVHt0PrmMk4ZRgj/GtVNp\n" +
+        "BQQYIzaYAcrcWMeCn30ZrhaGAL1hsdgmEVV1wsTD4JeNMSwLwMYem7fg8ondGZIR\n" +
+        "kZuGtuSdOHu4Xz+mgDNXTeX/Bp/dQFucxCG+FOOM9Hoz72RY2W8YqgL38RlnwYWp\n" +
+        "nUNxhXWFH6vyINRQVEu3IgahR6HXjxM7LwIDAQABo4G8MIG5MBQGA1UdEQQNMAuC\n" +
+        "CWxvY2FsaG9zdDAyBggrBgEFBQcBAQQmMCQwIgYIKwYBBQUHMAGGFmh0dHA6Ly9s\n" +
+        "b2NhbGhvc3Q6NDIzMzMwHwYDVR0jBBgwFoAUYT525lwHCI4CmuWs8a7poaeKRJ4w\n" +
+        "HQYDVR0OBBYEFCaQnOX4L1ovqyfeKuoay+kI+lXgMA4GA1UdDwEB/wQEAwIFoDAd\n" +
+        "BgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggEB\n" +
+        "AD8dqQIqFasJcL8lm4mPTsBl0JgNiN8tQcXM7VCvcH+yDvEyh9vudDjuhpSORqPq\n" +
+        "f1o/EvJ+gfs269mBnYQujYRvmSd6EAcBntv5zn6amOh03o6PqTY9KaUC/mL9hB84\n" +
+        "Y5/LYioP16sME7egKnlrGUgKh0ZvGzm7c3SYx3Z5YoeFBOkZajc7Jm+cBw/uBQkF\n" +
+        "a9mLEczIvOgkq1wto8vr2ptH1gEuvFRcorN3muvq34bk40G08+AHlP3fCLFpI3FA\n" +
+        "IStJLJZRcO+Ib4sOcKuaBGnuMo/QVOCEMDUs6RgiWtSd93OZKFIUOASVp6YIkcSs\n" +
+        "5/rmc06sICqBjLfPEB68Jjw=\n" +
+        "-----END CERTIFICATE-----";
+
+    // Subject: CN=Intermediate CA Cert, O=SomeCompany
+    // Issuer: CN=Root CA Cert, O=SomeCompany
+    // Validity: Sun Aug 07 14:37:19 PDT 2016 to Tue Aug 07 14:37:19 PDT 2018
+    private static final String INT_CA_CERT =
+        "-----BEGIN CERTIFICATE-----\n" +
+        "MIIDdjCCAl6gAwIBAgIBZDANBgkqhkiG9w0BAQsFADAtMRQwEgYDVQQKEwtTb21l\n" +
+        "Q29tcGFueTEVMBMGA1UEAxMMUm9vdCBDQSBDZXJ0MB4XDTE2MDgwNzIxMzcxOVoX\n" +
+        "DTE4MDgwNzIxMzcxOVowNTEUMBIGA1UEChMLU29tZUNvbXBhbnkxHTAbBgNVBAMT\n" +
+        "FEludGVybWVkaWF0ZSBDQSBDZXJ0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB\n" +
+        "CgKCAQEAnJR5CnE7GKlQjigExSJ6hHu302mc0PcA6TDgsIitPYD/r8RBbBuE51OQ\n" +
+        "7IP7AXmfPUV3/+pO/uxx6mgY5O6XeUl7KadhVPtPcL0BVVevCSOdTMVa3iV4zRpa\n" +
+        "C6Uy2ouUFnafKnDtlbieggyETUoNgVNJYA9L0XNhtSnENoLHC4Pq0v8OsNtsOWFR\n" +
+        "NiMTOA49NNDBw85WgPyFAxjqO4z0J0zxdWq3W4rSMB8xrkulv2Rvj3GcfYJK/ab8\n" +
+        "V1IJ6PMWCpujASY3BzvYPnN7BKuBjbWJPgZdPYfX1cxeG80u0tOuMfWWiNONSMSA\n" +
+        "7m9y304QA0gKqlrFFn9U4hU89kv1IwIDAQABo4GYMIGVMA8GA1UdEwEB/wQFMAMB\n" +
+        "Af8wMgYIKwYBBQUHAQEEJjAkMCIGCCsGAQUFBzABhhZodHRwOi8vbG9jYWxob3N0\n" +
+        "OjM5MTM0MB8GA1UdIwQYMBaAFJNMsejEyJUB9tiWycVczvpiMVQZMB0GA1UdDgQW\n" +
+        "BBRhPnbmXAcIjgKa5azxrumhp4pEnjAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZIhvcN\n" +
+        "AQELBQADggEBAE4nOFdW9OirPnRvxihQXYL9CXLuGQz5tr0XgN8wSY6Un9b6CRiK\n" +
+        "7obgIGimVdhvUC1qdRcwJqgOfJ2/jR5/5Qo0TVp+ww4dHNdUoj73tagJ7jTu0ZMz\n" +
+        "5Zdp0uwd4RD/syvTeVcbPc3m4awtgEvRgzpDMcSeKPZWInlo7fbnowKSAUAfO8de\n" +
+        "0cDkxEBkzPIzGNu256cdLZOqOK9wLJ9mQ0zKgi/2NsldNc2pl/6jkGpA6uL5lJsm\n" +
+        "fo9sDusWNHV1YggqjDQ19hrf40VuuC9GFl/qAW3marMuEzY/NiKVUxty1q1s48SO\n" +
+        "g5LoEPDDkbygOt7ICL3HYG1VufhC1Q2YY9c=\n" +
+        "-----END CERTIFICATE-----";
+
+    // Subject: CN=Root CA Cert, O=SomeCompany
+    // Issuer: CN=Root CA Cert, O=SomeCompany
+    // Validity: Fri Jul 08 14:37:18 PDT 2016 to Fri Jun 28 14:37:18 PDT 2019
+    private static final String ROOT_CA_CERT =
+        "-----BEGIN CERTIFICATE-----\n" +
+        "MIIDODCCAiCgAwIBAgIBATANBgkqhkiG9w0BAQsFADAtMRQwEgYDVQQKEwtTb21l\n" +
+        "Q29tcGFueTEVMBMGA1UEAxMMUm9vdCBDQSBDZXJ0MB4XDTE2MDcwODIxMzcxOFoX\n" +
+        "DTE5MDYyODIxMzcxOFowLTEUMBIGA1UEChMLU29tZUNvbXBhbnkxFTATBgNVBAMT\n" +
+        "DFJvb3QgQ0EgQ2VydDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAIlN\n" +
+        "M3WYEqkU2elXEZrV9QSDbDKwyaLEHafLFciH8Edoag3q/7jEzFJxI7JZ831tdbWQ\n" +
+        "Bm6Hgo+8pvetOFW1BckL8eIjyOONP2CKfFaeMaozsWi1cgxa+rjpU/Rekc+zBqvv\n" +
+        "y4Sr97TwT6nQiLlgjC1nCfR1SVpO51qoDChS7n785rsKEZxw/p+kkVWSZffU7zN9\n" +
+        "c645cPg//L/kjiyeKMkaquGQOYS68gQgy8YZXQv1E3l/8e8Ci1s1DYA5wpCbaBqg\n" +
+        "Tw84Rr4zlUEQBgXzQlRt+mPzeaDpdG1EeGkXrcdkZ+0EMELoOVXOEn6VNsz6vT3I\n" +
+        "KrnvQBSnN06xq/iWwC0CAwEAAaNjMGEwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSME\n" +
+        "GDAWgBSTTLHoxMiVAfbYlsnFXM76YjFUGTAdBgNVHQ4EFgQUk0yx6MTIlQH22JbJ\n" +
+        "xVzO+mIxVBkwDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBCwUAA4IBAQAAi+Nl\n" +
+        "sxP9t2IhiZIHRJGSBZuQlXIjwYIwbq3ZWc/ApZ+0oxtl7DYQi5uRNt8/opcGNCHc\n" +
+        "IY0fG93SbkDubXbxPYBW6D/RUjbz59ZryaP5ym55p1MjHTOqy+AM8g41xNTJikc3\n" +
+        "UUFXXnckeFbawijCsb7vf71owzKuxgBXi9n1rmXXtncKoA/LrUVXoUlKefdgDnsU\n" +
+        "sl3Q29eibE3HSqziMMoAOLm0jjekFGWIgLeTtyRYR1d0dNaUwsHTrQpPjxxUTn1x\n" +
+        "sAPpXKfzPnsYAZeeiaaE75GwbWlHzrNinvxdZQd0zctpfBJfVqD/+lWANlw+rOaK\n" +
+        "J2GyCaJINsyaI/I2\n" +
+        "-----END CERTIFICATE-----";
+
+    // OCSP Response Status: successful (0x0)
+    // Response Type: Basic OCSP Response
+    // Version: 1 (0x0)
+    // Responder Id: CN=Intermediate CA Cert, O=SomeCompany
+    // Produced At: Sep  6 21:37:20 2016 GMT
+    // Responses:
+    // Certificate ID:
+    //    Hash Algorithm: sha1
+    //    Issuer Name Hash: 7ED23D4396152EAB7D0C4AD8C1CA1418AA05DD54
+    //    Issuer Key Hash: 613E76E65C07088E029AE5ACF1AEE9A1A78A449E
+    //    Serial Number: 1000
+    // Cert Status: good
+    // This Update: Sep  6 21:37:20 2016 GMT
+    // Next Update: Sep  6 22:37:19 2016 GMT
+    private static final String EE_OCSP_RESP =
+        "MIIFbAoBAKCCBWUwggVhBgkrBgEFBQcwAQEEggVSMIIFTjCBtaE3MDUxFDASBgNV\n" +
+        "BAoTC1NvbWVDb21wYW55MR0wGwYDVQQDExRJbnRlcm1lZGlhdGUgQ0EgQ2VydBgP\n" +
+        "MjAxNjA5MDYyMTM3MjBaMGUwYzA7MAkGBSsOAwIaBQAEFH7SPUOWFS6rfQxK2MHK\n" +
+        "FBiqBd1UBBRhPnbmXAcIjgKa5azxrumhp4pEngICEACAABgPMjAxNjA5MDYyMTM3\n" +
+        "MjBaoBEYDzIwMTYwOTA2MjIzNzE5WqECMAAwDQYJKoZIhvcNAQELBQADggEBAF13\n" +
+        "cLwxDG8UYPIbzID86vZGOWUuv5c35VnvebMk/ajAUdpItDYshIQVi90Z8BB2TEi/\n" +
+        "wtx1aNkIv7db0uQ0NnRfvME8vG2PWbty36CNAYr/M5UVzUmELH2sGTyf2fKfNIUK\n" +
+        "Iya/NRxCqxLAc34NYH0YyGJ9VcDjbEMNSBAHIqDdBNqKUPnjn454yoivU2oEs294\n" +
+        "cGePMx3QLyPepMwUss8nW74yIF7vxfJ+KFDBGWNuZDRfXScsGIoeM0Vt9B+4fmnV\n" +
+        "nP4Dw6l3IwmQH4ppjg08qTKvyrXcF2dPDWa98Xw6bA5G085Z/b/6/6GpkvKx/q6i\n" +
+        "UqKwF7q5hkDcB+N4/5SgggN+MIIDejCCA3YwggJeoAMCAQICAWQwDQYJKoZIhvcN\n" +
+        "AQELBQAwLTEUMBIGA1UEChMLU29tZUNvbXBhbnkxFTATBgNVBAMTDFJvb3QgQ0Eg\n" +
+        "Q2VydDAeFw0xNjA4MDcyMTM3MTlaFw0xODA4MDcyMTM3MTlaMDUxFDASBgNVBAoT\n" +
+        "C1NvbWVDb21wYW55MR0wGwYDVQQDExRJbnRlcm1lZGlhdGUgQ0EgQ2VydDCCASIw\n" +
+        "DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJyUeQpxOxipUI4oBMUieoR7t9Np\n" +
+        "nND3AOkw4LCIrT2A/6/EQWwbhOdTkOyD+wF5nz1Fd//qTv7scepoGOTul3lJeymn\n" +
+        "YVT7T3C9AVVXrwkjnUzFWt4leM0aWgulMtqLlBZ2nypw7ZW4noIMhE1KDYFTSWAP\n" +
+        "S9FzYbUpxDaCxwuD6tL/DrDbbDlhUTYjEzgOPTTQwcPOVoD8hQMY6juM9CdM8XVq\n" +
+        "t1uK0jAfMa5Lpb9kb49xnH2CSv2m/FdSCejzFgqbowEmNwc72D5zewSrgY21iT4G\n" +
+        "XT2H19XMXhvNLtLTrjH1lojTjUjEgO5vct9OEANICqpaxRZ/VOIVPPZL9SMCAwEA\n" +
+        "AaOBmDCBlTAPBgNVHRMBAf8EBTADAQH/MDIGCCsGAQUFBwEBBCYwJDAiBggrBgEF\n" +
+        "BQcwAYYWaHR0cDovL2xvY2FsaG9zdDozOTEzNDAfBgNVHSMEGDAWgBSTTLHoxMiV\n" +
+        "AfbYlsnFXM76YjFUGTAdBgNVHQ4EFgQUYT525lwHCI4CmuWs8a7poaeKRJ4wDgYD\n" +
+        "VR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBCwUAA4IBAQBOJzhXVvToqz50b8YoUF2C\n" +
+        "/Qly7hkM+ba9F4DfMEmOlJ/W+gkYiu6G4CBoplXYb1AtanUXMCaoDnydv40ef+UK\n" +
+        "NE1afsMOHRzXVKI+97WoCe407tGTM+WXadLsHeEQ/7Mr03lXGz3N5uGsLYBL0YM6\n" +
+        "QzHEnij2ViJ5aO3256MCkgFAHzvHXtHA5MRAZMzyMxjbtuenHS2TqjivcCyfZkNM\n" +
+        "yoIv9jbJXTXNqZf+o5BqQOri+ZSbJn6PbA7rFjR1dWIIKow0NfYa3+NFbrgvRhZf\n" +
+        "6gFt5mqzLhM2PzYilVMbctatbOPEjoOS6BDww5G8oDreyAi9x2BtVbn4QtUNmGPX";
+
+    // OCSP Response Status: successful (0x0)
+    // Response Type: Basic OCSP Response
+    // Version: 1 (0x0)
+    // Responder Id: O = SomeCompany, CN = Root CA Cert
+    // Produced At: Sep  6 21:37:20 2016 GMT
+    // Responses:
+    // Certificate ID:
+    //   Hash Algorithm: sha1
+    //   Issuer Name Hash: C8ED9F4E9AC0052A978257C569E6A7C9C45F5CB5
+    //   Issuer Key Hash: 934CB1E8C4C89501F6D896C9C55CCEFA62315419
+    //   Serial Number: 64
+    // Cert Status: good
+    // This Update: Sep  6 21:37:20 2016 GMT
+    // Next Update: Sep  6 22:37:19 2016 GMT
+    private static final String INT_CA_OCSP_RESP =
+        "MIIFJQoBAKCCBR4wggUaBgkrBgEFBQcwAQEEggULMIIFBzCBrKEvMC0xFDASBgNV\n" +
+        "BAoTC1NvbWVDb21wYW55MRUwEwYDVQQDEwxSb290IENBIENlcnQYDzIwMTYwOTA2\n" +
+        "MjEzNzIwWjBkMGIwOjAJBgUrDgMCGgUABBTI7Z9OmsAFKpeCV8Vp5qfJxF9ctQQU\n" +
+        "k0yx6MTIlQH22JbJxVzO+mIxVBkCAWSAABgPMjAxNjA5MDYyMTM3MjBaoBEYDzIw\n" +
+        "MTYwOTA2MjIzNzE5WqECMAAwDQYJKoZIhvcNAQELBQADggEBAAgs8jpuEejPD8qO\n" +
+        "+xckvqMz/5pItOHaSB0xyPNpIapqjcDkLktJdBVq5XJWernO9DU+P7yr7TDbvo6h\n" +
+        "P5jBZklLz16Z1aRlEyow2jhelVjNl6nxoiij/6LOGK4tLHa8fK7hTB4Ykw22Bxzt\n" +
+        "LcbrU5jgUDhdZkTrs+rWM8nw7mVWIQYQfwzCMDZ5a02MxzhdwggJGRzqMrbhY/Q7\n" +
+        "RRUK3ohSgzHmLjVkvA0KeM/Px7EefzbEbww08fSsLybmBoIEbcckWSHkkXx4cuIR\n" +
+        "T9FiTz4Ms4r8qzPCo61qeklE2I5lfnfieROADV6sfwbul/0U1HqKhHVaxJ8yYw+T\n" +
+        "/FMxrUKgggNAMIIDPDCCAzgwggIgoAMCAQICAQEwDQYJKoZIhvcNAQELBQAwLTEU\n" +
+        "MBIGA1UEChMLU29tZUNvbXBhbnkxFTATBgNVBAMTDFJvb3QgQ0EgQ2VydDAeFw0x\n" +
+        "NjA3MDgyMTM3MThaFw0xOTA2MjgyMTM3MThaMC0xFDASBgNVBAoTC1NvbWVDb21w\n" +
+        "YW55MRUwEwYDVQQDEwxSb290IENBIENlcnQwggEiMA0GCSqGSIb3DQEBAQUAA4IB\n" +
+        "DwAwggEKAoIBAQCJTTN1mBKpFNnpVxGa1fUEg2wysMmixB2nyxXIh/BHaGoN6v+4\n" +
+        "xMxScSOyWfN9bXW1kAZuh4KPvKb3rThVtQXJC/HiI8jjjT9ginxWnjGqM7FotXIM\n" +
+        "Wvq46VP0XpHPswar78uEq/e08E+p0Ii5YIwtZwn0dUlaTudaqAwoUu5+/Oa7ChGc\n" +
+        "cP6fpJFVkmX31O8zfXOuOXD4P/y/5I4snijJGqrhkDmEuvIEIMvGGV0L9RN5f/Hv\n" +
+        "AotbNQ2AOcKQm2gaoE8POEa+M5VBEAYF80JUbfpj83mg6XRtRHhpF63HZGftBDBC\n" +
+        "6DlVzhJ+lTbM+r09yCq570AUpzdOsav4lsAtAgMBAAGjYzBhMA8GA1UdEwEB/wQF\n" +
+        "MAMBAf8wHwYDVR0jBBgwFoAUk0yx6MTIlQH22JbJxVzO+mIxVBkwHQYDVR0OBBYE\n" +
+        "FJNMsejEyJUB9tiWycVczvpiMVQZMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0B\n" +
+        "AQsFAAOCAQEAAIvjZbMT/bdiIYmSB0SRkgWbkJVyI8GCMG6t2VnPwKWftKMbZew2\n" +
+        "EIubkTbfP6KXBjQh3CGNHxvd0m5A7m128T2AVug/0VI28+fWa8mj+cpueadTIx0z\n" +
+        "qsvgDPIONcTUyYpHN1FBV153JHhW2sIowrG+73+9aMMyrsYAV4vZ9a5l17Z3CqAP\n" +
+        "y61FV6FJSnn3YA57FLJd0NvXomxNx0qs4jDKADi5tI43pBRliIC3k7ckWEdXdHTW\n" +
+        "lMLB060KT48cVE59cbAD6Vyn8z57GAGXnommhO+RsG1pR86zYp78XWUHdM3LaXwS\n" +
+        "X1ag//pVgDZcPqzmiidhsgmiSDbMmiPyNg==";
+
+    // Do path validation as if it is always Tue, 06 Sep 2016 22:12:21 GMT
+    // This value is within the lifetimes of all certificates and both OCSP
+    // responses.
+    private static final Date EVAL_DATE = new Date(1473199941000L);
+
+    private static final Base64.Decoder DECODER = Base64.getMimeDecoder();
+
+    public static void main(String[] args) throws Exception {
+        TrustAnchor anchor;
+        CertificateFactory cf = CertificateFactory.getInstance("X.509");
+        X509Certificate rootCert = generateCertificate(cf, ROOT_CA_CERT);
+        X509Certificate eeCert = generateCertificate(cf, EE_CERT);
+        X509Certificate intCaCert = generateCertificate(cf, INT_CA_CERT);
+        List<X509Certificate> certList = new ArrayList<X509Certificate>() {{
+            add(eeCert);
+            add(intCaCert);
+        }};
+
+        System.out.println("==== Certificate Path =====");
+        for (X509Certificate c : certList) {
+            System.out.println(c + "\n");
+        }
+        System.out.println("===========================");
+
+        System.out.println("===== Test 1: TA(X509Certificate) =====");
+        anchor = new TrustAnchor(rootCert, null);
+        runTest(cf, certList, anchor);
+
+        System.out.println("===== Test 2: TA(X500Principal, PublicKey =====");
+        anchor = new TrustAnchor(rootCert.getSubjectX500Principal(),
+                rootCert.getPublicKey(), null);
+        runTest(cf, certList, anchor);
+
+        System.out.println("===== Test 3: TA(String, PublicKey =====");
+        anchor = new TrustAnchor(rootCert.getSubjectX500Principal().getName(),
+                rootCert.getPublicKey(), null);
+        runTest(cf, certList, anchor);
+    }
+
+    private static void runTest(CertificateFactory cf,
+            List<X509Certificate> certList, TrustAnchor anchor)
+            throws Exception {
+        CertPath path = cf.generateCertPath(certList);
+        CertPathValidator validator = CertPathValidator.getInstance("PKIX");
+
+        System.out.println(anchor);
+
+        // Attach the OCSP responses to a PKIXParameters object
+        PKIXRevocationChecker pkrev =
+                (PKIXRevocationChecker)validator.getRevocationChecker();
+        Map<X509Certificate, byte[]> responseMap = new HashMap<>();
+        responseMap.put(certList.get(0), DECODER.decode(EE_OCSP_RESP));
+        responseMap.put(certList.get(1), DECODER.decode(INT_CA_OCSP_RESP));
+        pkrev.setOcspResponses(responseMap);
+        PKIXParameters params =
+                new PKIXParameters(Collections.singleton(anchor));
+        params.addCertPathChecker(pkrev);
+        params.setDate(EVAL_DATE);
+
+        validator.validate(path, params);
+    }
+
+    private static X509Certificate generateCertificate(CertificateFactory cf,
+            String encoded) throws CertificateException {
+        ByteArrayInputStream is = new ByteArrayInputStream(encoded.getBytes());
+        return (X509Certificate)cf.generateCertificate(is);
+    }
+}
--- a/test/java/sql/testng/TEST.properties	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/java/sql/testng/TEST.properties	Mon Sep 19 10:11:34 2016 -0700
@@ -1,3 +1,4 @@
 # JDBC unit tests uses TestNG
 TestNG.dirs = .
+othervm.dirs = test/sql/othervm
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/java/sql/testng/test/sql/othervm/DriverManagerInitTests.java	Mon Sep 19 10:11:34 2016 -0700
@@ -0,0 +1,84 @@
+/*
+ * Copyright (c) 2016, 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
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+package test.sql.othervm;
+
+import java.io.BufferedReader;
+import java.io.CharArrayReader;
+import java.io.CharArrayWriter;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.sql.Driver;
+import java.sql.DriverManager;
+import java.util.Enumeration;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import static org.testng.Assert.*;
+import org.testng.annotations.Test;
+
+public class DriverManagerInitTests {
+
+    /**
+     * Validate that when DriverManager loads the initial JDBC drivers, that the
+     * output from DriverManager.println is available by verifying that the
+     * String "JDBC DriverManager initialized" is found
+     */
+    @Test
+    public void test() {
+
+        CharArrayWriter cw = new CharArrayWriter();
+        PrintWriter pw = new PrintWriter(cw);
+        DriverManager.setLogWriter(pw);
+        Enumeration<Driver> drivers = DriverManager.getDrivers();
+
+        try (BufferedReader reader = new BufferedReader(new CharArrayReader(cw.toCharArray()))) {
+            boolean result
+                    = reader.lines().anyMatch(
+                            line -> line.matches(".*JDBC DriverManager initialized.*"));
+            assertTrue(result);
+
+        } catch (IOException ex) {
+            Logger.getLogger(DriverManagerInitTests.class.getName()).log(Level.SEVERE, null, ex);
+            fail();
+        }
+
+        // Check to verify that we are not initializing a 2nd time
+        cw = new CharArrayWriter();
+        pw = new PrintWriter(cw);
+        DriverManager.setLogWriter(pw);
+        drivers = DriverManager.getDrivers();
+
+        try (BufferedReader reader = new BufferedReader(new CharArrayReader(cw.toCharArray()))) {
+            boolean result
+                    = reader.lines().noneMatch(
+                            line -> line.matches(".*JDBC DriverManager initialized.*"));
+            assertTrue(result);
+
+        } catch (IOException ex) {
+            Logger.getLogger(DriverManagerInitTests.class.getName()).log(Level.SEVERE, null, ex);
+            fail();
+        }
+
+    }
+
+}
--- a/test/java/text/Format/DateFormat/Bug4322313.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/java/text/Format/DateFormat/Bug4322313.java	Mon Sep 19 10:11:34 2016 -0700
@@ -50,110 +50,110 @@
 
         Object[][] valids = {
           /* given ID      offset                format('z'), ('Z')    index */
-            {"GMT+03:04",  new Long(-184 * mpm), "GMT+03:04", "+0304", new Integer(9)},
-            {"GMT+13:42",  new Long(-822 * mpm), "GMT+13:42", "+1342", new Integer(9)},
-            {"GMT+00:00",  new Long(0),          "GMT+00:00", "+0000", new Integer(9)},
-            {"GMT+1:11",   new Long(-71 * mpm),  "GMT+01:11", "+0111", new Integer(8)},
-            {"GMT +13:42", new Long(0),          "GMT",       "+0000", new Integer(3)},
-            {" GMT",       new Long(0),          "GMT",       "+0000", new Integer(4)},
-            {"+0304",      new Long(-184 * mpm), "GMT+03:04", "+0304", new Integer(5)},
-            {"+1342",      new Long(-822 * mpm), "GMT+13:42", "+1342", new Integer(5)},
-            {"+0000",      new Long(0),          "GMT+00:00", "+0000", new Integer(5)},
-            {" +1342",     new Long(-822 * mpm), "GMT+13:42", "+1342", new Integer(6)},
+            {"GMT+03:04",  -184L * mpm, "GMT+03:04", "+0304", 9},
+            {"GMT+13:42",  -822L * mpm, "GMT+13:42", "+1342", 9},
+            {"GMT+00:00",   0L,         "GMT+00:00", "+0000", 9},
+            {"GMT+1:11",   -71L * mpm,  "GMT+01:11", "+0111", 8},
+            {"GMT +13:42",  0L,         "GMT",       "+0000", 3},
+            {" GMT",        0L,         "GMT",       "+0000", 4},
+            {"+0304",      -184L * mpm, "GMT+03:04", "+0304", 5},
+            {"+1342",      -822L * mpm, "GMT+13:42", "+1342", 5},
+            {"+0000",       0L,         "GMT+00:00", "+0000", 5},
+            {" +1342",     -822L * mpm, "GMT+13:42", "+1342", 6},
             /* ISO-LATIN-1 digits */
-            {"GMT+\u0030\u0031:\u0032\u0033", new Long(-83 * mpm), "GMT+01:23", "+0123", new Integer(9)},
+            {"GMT+\u0030\u0031:\u0032\u0033", -83L * mpm, "GMT+01:23", "+0123", 9},
 
            /* In fact, this test case is skipped because TimeZone class can't
             * recognize TimeZone IDs like "+00234" or "-00234".
             */
-            {"+00234",     new Long(-23 * mpm), "GMT+00:23", "+0023", new Integer(5)},
+            {"+00234",     -23L * mpm, "GMT+00:23", "+0023", 5},
 
-            {"GMT-03:04",  new Long(184 * mpm), "GMT-03:04", "-0304", new Integer(9)},
-            {"GMT-13:42",  new Long(822 * mpm), "GMT-13:42", "-1342", new Integer(9)},
-            {"GMT-00:00",  new Long(0),         "GMT+00:00", "+0000", new Integer(9)},
-            {"GMT-1:11",   new Long(71 * mpm),  "GMT-01:11", "-0111", new Integer(8)},
-            {"GMT -13:42", new Long(0),         "GMT",       "+0000", new Integer(3)},
-            {"-0304",      new Long(184 * mpm), "GMT-03:04", "-0304", new Integer(5)},
-            {"-1342",      new Long(822 * mpm), "GMT-13:42", "-1342", new Integer(5)},
-            {" -1342",     new Long(822 * mpm), "GMT-13:42", "-1342", new Integer(6)},
+            {"GMT-03:04",  184L * mpm, "GMT-03:04", "-0304", 9},
+            {"GMT-13:42",  822L * mpm, "GMT-13:42", "-1342", 9},
+            {"GMT-00:00",  0L,         "GMT+00:00", "+0000", 9},
+            {"GMT-1:11",   71L * mpm,  "GMT-01:11", "-0111", 8},
+            {"GMT -13:42", 0L,         "GMT",       "+0000", 3},
+            {"-0304",      184L * mpm, "GMT-03:04", "-0304", 5},
+            {"-1342",      822L * mpm, "GMT-13:42", "-1342", 5},
+            {" -1342",     822L * mpm, "GMT-13:42", "-1342", 6},
             /* ISO-LATIN-1 digits */
-            {"GMT-\u0030\u0031:\u0032\u0033", new Long(83 * mpm), "GMT-01:23", "-0123", new Integer(9)},
+            {"GMT-\u0030\u0031:\u0032\u0033", 83L * mpm, "GMT-01:23", "-0123", 9},
            /* In fact, this test case is skipped because TimeZone class can't
             * recognize TimeZone IDs like "+00234" or "-00234".
             */
-            {"-00234",     new Long(23 * mpm),  "GMT+00:23", "-0023", new Integer(5)},
+            {"-00234",     23L * mpm,  "GMT+00:23", "-0023", 5},
         };
 
         Object[][] invalids = {
           /* given ID       error index   */
-            {"GMT+8",       new Integer(5)},
-            {"GMT+18",      new Integer(6)},
-            {"GMT+208",     new Integer(6)},
-            {"GMT+0304",    new Integer(6)},
-            {"GMT+42195",   new Integer(5)},
-            {"GMT+5:8",     new Integer(7)},
-            {"GMT+23:60",   new Integer(8)},
-            {"GMT+11:1",    new Integer(8)},
-            {"GMT+24:13",   new Integer(5)},
-            {"GMT+421:950", new Integer(5)},
-            {"GMT+0a:0A",   new Integer(5)},
-            {"GMT+ 13:42",  new Integer(4)},
-            {"GMT+13 :42",  new Integer(6)},
-            {"GMT+13: 42",  new Integer(7)},
-            {"GMT+-13:42",  new Integer(4)},
-            {"G M T",       new Integer(0)},
-            {"+8",          new Integer(2)},
-            {"+18",         new Integer(3)},
-            {"+208",        new Integer(4)},
-            {"+2360",       new Integer(4)},
-            {"+2413",       new Integer(2)},
-            {"+42195",      new Integer(2)},
-            {"+0AbC",       new Integer(2)},
-            {"+ 1342",      new Integer(1)},
-            {"+-1342",      new Integer(1)},
-            {"1342",        new Integer(0)},
+            {"GMT+8",       5},
+            {"GMT+18",      6},
+            {"GMT+208",     6},
+            {"GMT+0304",    6},
+            {"GMT+42195",   5},
+            {"GMT+5:8",     7},
+            {"GMT+23:60",   8},
+            {"GMT+11:1",    8},
+            {"GMT+24:13",   5},
+            {"GMT+421:950", 5},
+            {"GMT+0a:0A",   5},
+            {"GMT+ 13:42",  4},
+            {"GMT+13 :42",  6},
+            {"GMT+13: 42",  7},
+            {"GMT+-13:42",  4},
+            {"G M T",       0},
+            {"+8",          2},
+            {"+18",         3},
+            {"+208",        4},
+            {"+2360",       4},
+            {"+2413",       2},
+            {"+42195",      2},
+            {"+0AbC",       2},
+            {"+ 1342",      1},
+            {"+-1342",      1},
+            {"1342",        0},
           /* Arabic-Indic digits */
-            {"GMT+\u0660\u0661:\u0662\u0663", new Integer(4)},
+            {"GMT+\u0660\u0661:\u0662\u0663", 4},
           /* Extended Arabic-Indic digits */
-            {"GMT+\u06f0\u06f1:\u06f2\u06f3", new Integer(4)},
+            {"GMT+\u06f0\u06f1:\u06f2\u06f3", 4},
           /* Devanagari digits */
-            {"GMT+\u0966\u0967:\u0968\u0969", new Integer(4)},
+            {"GMT+\u0966\u0967:\u0968\u0969", 4},
           /* Fullwidth digits */
-            {"GMT+\uFF10\uFF11:\uFF12\uFF13", new Integer(4)},
+            {"GMT+\uFF10\uFF11:\uFF12\uFF13", 4},
 
-            {"GMT-8",       new Integer(5)},
-            {"GMT-18",      new Integer(6)},
-            {"GMT-208",     new Integer(6)},
-            {"GMT-0304",    new Integer(6)},
-            {"GMT-42195",   new Integer(5)},
-            {"GMT-5:8",     new Integer(7)},
-            {"GMT-23:60",   new Integer(8)},
-            {"GMT-11:1",    new Integer(8)},
-            {"GMT-24:13",   new Integer(5)},
-            {"GMT-421:950", new Integer(5)},
-            {"GMT-0a:0A",   new Integer(5)},
-            {"GMT- 13:42",  new Integer(4)},
-            {"GMT-13 :42",  new Integer(6)},
-            {"GMT-13: 42",  new Integer(7)},
-            {"GMT-+13:42",  new Integer(4)},
-            {"-8",          new Integer(2)},
-            {"-18",         new Integer(3)},
-            {"-208",        new Integer(4)},
-            {"-2360",       new Integer(4)},
-            {"-2413",       new Integer(2)},
-            {"-42195",      new Integer(2)},
-            {"-0AbC",       new Integer(2)},
-            {"- 1342",      new Integer(1)},
-            {"--1342",      new Integer(1)},
-            {"-802",        new Integer(2)},
+            {"GMT-8",       5},
+            {"GMT-18",      6},
+            {"GMT-208",     6},
+            {"GMT-0304",    6},
+            {"GMT-42195",   5},
+            {"GMT-5:8",     7},
+            {"GMT-23:60",   8},
+            {"GMT-11:1",    8},
+            {"GMT-24:13",   5},
+            {"GMT-421:950", 5},
+            {"GMT-0a:0A",   5},
+            {"GMT- 13:42",  4},
+            {"GMT-13 :42",  6},
+            {"GMT-13: 42",  7},
+            {"GMT-+13:42",  4},
+            {"-8",          2},
+            {"-18",         3},
+            {"-208",        4},
+            {"-2360",       4},
+            {"-2413",       2},
+            {"-42195",      2},
+            {"-0AbC",       2},
+            {"- 1342",      1},
+            {"--1342",      1},
+            {"-802",        2},
           /* Arabic-Indic digits */
-            {"GMT-\u0660\u0661:\u0662\u0663", new Integer(4)},
+            {"GMT-\u0660\u0661:\u0662\u0663", 4},
           /* Extended Arabic-Indic digits */
-            {"GMT-\u06f0\u06f1:\u06f2\u06f3", new Integer(4)},
+            {"GMT-\u06f0\u06f1:\u06f2\u06f3", 4},
           /* Devanagari digits */
-            {"GMT-\u0966\u0967:\u0968\u0969", new Integer(4)},
+            {"GMT-\u0966\u0967:\u0968\u0969", 4},
           /* Fullwidth digits */
-            {"GMT-\uFF10\uFF11:\uFF12\uFF13", new Integer(4)},
+            {"GMT-\uFF10\uFF11:\uFF12\uFF13", 4},
         };
 
         try {
--- a/test/java/text/Format/DateFormat/Bug4736959.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/java/text/Format/DateFormat/Bug4736959.java	Mon Sep 19 10:11:34 2016 -0700
@@ -30,6 +30,7 @@
 import java.text.*;
 import java.util.*;
 
+@SuppressWarnings("deprecation")
 public class Bug4736959 {
     /**
      * 4736959: JSpinner won't work for AM/PM field
--- a/test/java/text/Format/DateFormat/Bug4823811.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/java/text/Format/DateFormat/Bug4823811.java	Mon Sep 19 10:11:34 2016 -0700
@@ -685,8 +685,8 @@
         testNumberFormatFormatting(nfEG, -456, "456-", "ar_EG");
 
         System.out.println("*** DecimalFormat.parse test in ar_EG");
-        testNumberFormatParsing(nfEG, "123-", new Long(-123), "ar_EG");
-        testNumberFormatParsing(nfEG, "123--", new Long(-123), "ar_EG");
+        testNumberFormatParsing(nfEG, "123-", -123L, "ar_EG");
+        testNumberFormatParsing(nfEG, "123--",-123L, "ar_EG");
         testNumberFormatParsingCheckException(nfEG, "-123", 0, "ar_EG");
 
         System.out.println("*** DecimalFormat.format test in en_US");
@@ -694,8 +694,8 @@
         testNumberFormatFormatting(nfUS, -456, "-456", "en_US");
 
         System.out.println("*** DecimalFormat.parse test in en_US");
-        testNumberFormatParsing(nfUS, "123-", new Long(123), "en_US");
-        testNumberFormatParsing(nfUS, "-123", new Long(-123), "en_US");
+        testNumberFormatParsing(nfUS, "123-", 123L, "en_US");
+        testNumberFormatParsing(nfUS, "-123",-123L, "en_US");
         testNumberFormatParsingCheckException(nfUS, "--123", 0, "en_US");
     }
 
--- a/test/java/text/Format/DateFormat/Bug4845901.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/java/text/Format/DateFormat/Bug4845901.java	Mon Sep 19 10:11:34 2016 -0700
@@ -55,6 +55,7 @@
         }
     }
 
+    @SuppressWarnings("deprecation")
     static void testParse(SimpleDateFormat sdf, String str, int expectedHour) {
         try {
             Date parsedDate = sdf.parse(str);
--- a/test/java/text/Format/DateFormat/Bug6609750.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/java/text/Format/DateFormat/Bug6609750.java	Mon Sep 19 10:11:34 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2009, 2016, 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
@@ -37,6 +37,7 @@
         Locale defaultLocale = Locale.getDefault();
         Locale.setDefault(Locale.US);
 
+        @SuppressWarnings("deprecation")
         Date[] dates = {
             new Date(9-1900,     Calendar.JUNE, 12),
             new Date(99-1900,    Calendar.JUNE, 12),
--- a/test/java/text/Format/DateFormat/Bug6683975.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/java/text/Format/DateFormat/Bug6683975.java	Mon Sep 19 10:11:34 2016 -0700
@@ -66,6 +66,7 @@
             System.err.println("\tth_TH: " + str_th_TH);
         }
 
+        @SuppressWarnings("deprecation")
         Date date = new Date(2008-1900, Calendar.SEPTEMBER, 30, 8, 0, 0);
         str_th = df_th.format(date);
         if (!expected_th[style].equals(str_th)) {
--- a/test/java/text/Format/DateFormat/DateFormatRegression.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/java/text/Format/DateFormat/DateFormatRegression.java	Mon Sep 19 10:11:34 2016 -0700
@@ -41,7 +41,7 @@
     }
 
     public void Test4029195() {
-
+        @SuppressWarnings("deprecation")
         Date today = new Date();
 
         logln("today: " + today);
@@ -74,19 +74,20 @@
     public void Test4052408() {
         DateFormat fmt = DateFormat.getDateTimeInstance(DateFormat.SHORT,
                                                         DateFormat.SHORT, Locale.US);
+        @SuppressWarnings("deprecation")
         Date date = new Date(97, Calendar.MAY, 3, 8, 55);
         String str;
         logln(str = fmt.format(date));
 
         if (!str.equals("5/3/97 8:55 AM"))
             errln("Fail: Test broken; Want 5/3/97 8:55 AM Got " + str);
-        Hashtable expected = new Hashtable();
-        expected.put(new Integer(DateFormat.MONTH_FIELD), "5");
-        expected.put(new Integer(DateFormat.DATE_FIELD), "3");
-        expected.put(new Integer(DateFormat.YEAR_FIELD), "97");
-        expected.put(new Integer(DateFormat.HOUR1_FIELD), "8");
-        expected.put(new Integer(DateFormat.MINUTE_FIELD), "55");
-        expected.put(new Integer(DateFormat.AM_PM_FIELD), "AM");
+        Map<Integer,String> expected = new HashMap<>();
+        expected.put(DateFormat.MONTH_FIELD, "5");
+        expected.put(DateFormat.DATE_FIELD, "3");
+        expected.put(DateFormat.YEAR_FIELD, "97");
+        expected.put(DateFormat.HOUR1_FIELD, "8");
+        expected.put(DateFormat.MINUTE_FIELD, "55");
+        expected.put(DateFormat.AM_PM_FIELD, "AM");
 
         StringBuffer buf = new StringBuffer();
         String fieldNames[] = {
@@ -120,7 +121,7 @@
                              ", \"" + str + "\", " +
                              pos.getBeginIndex() + ", " +
                              pos.getEndIndex());
-            String exp = (String) expected.get(new Integer(i));
+            String exp = expected.get(i);
             if ((exp == null && str.length() == 0) ||
                 str.equals(exp))
                 logln(" ok");
@@ -135,6 +136,7 @@
     /**
      * Verify the function of the [s|g]et2DigitYearStart() API.
      */
+    @SuppressWarnings("deprecation")
     public void Test4056591() {
         try {
             SimpleDateFormat fmt = new SimpleDateFormat("yyMMdd", Locale.US);
@@ -255,6 +257,7 @@
         if (!ok) errln("Fail: Lenient not working");
     }
 
+    @SuppressWarnings("deprecation")
     public void Test4065240() {
         Date curDate;
         DateFormat shortdate, fulldate;
@@ -297,6 +300,7 @@
 
       Currently this bug breaks MessageFormat.toPattern
       */
+    @SuppressWarnings("deprecation")
     public void Test4071441() {
         DateFormat fmtA = DateFormat.getInstance();
         DateFormat fmtB = DateFormat.getInstance();
@@ -488,6 +492,7 @@
     public void Test4101483() {
         SimpleDateFormat sdf = new SimpleDateFormat("z", Locale.US);
         FieldPosition fp = new FieldPosition(DateFormat.TIMEZONE_FIELD);
+        @SuppressWarnings("deprecation")
         Date d= new Date(9234567890L);
         StringBuffer buf = new StringBuffer("");
         logln(sdf.format(d, buf, fp).toString());
@@ -508,6 +513,7 @@
     public void Test4103340() {
         // choose a date that is the FIRST of some month
         // and some arbitrary time
+        @SuppressWarnings("deprecation")
         Date d=new Date(97, 3, 1, 1, 1, 1);
         SimpleDateFormat df=new SimpleDateFormat("MMMM", Locale.US);
 
@@ -538,6 +544,7 @@
         sdf.applyPattern(pattern);
         logln("pattern: \"" + pattern + "\"");
 
+        @SuppressWarnings("deprecation")
         Object[] DATA = {
             "time 10:30", new ParsePosition(10), new Date(70, Calendar.JANUARY, 1, 10, 30),
             "time 10:x", new ParsePosition(0), null,
@@ -698,6 +705,7 @@
         String pattern = "'TO_DATE('''dd'-'MM'-'yyyy HH:mm:ss''' , ''DD-MM-YYYY HH:MI:SS'')'";
         logln("pattern=" + pattern);
         SimpleDateFormat format = new SimpleDateFormat(pattern, Locale.US);
+        @SuppressWarnings("deprecation")
         String result = format.format(new Date(1998-1900, Calendar.JUNE, 30, 13, 30, 0));
         if (!result.equals("TO_DATE('30-06-1998 13:30:00' , 'DD-MM-YYYY HH:MI:SS')")) {
             errln("Fail: result=" + result);
@@ -711,6 +719,7 @@
      * 'z' at end of date format throws index exception in SimpleDateFormat
      * CANNOT REPRODUCE THIS BUG ON 1.2FCS
      */
+    @SuppressWarnings("deprecation")
     public void Test4151706() {
         SimpleDateFormat fmt =
             new SimpleDateFormat("EEEE, dd-MMM-yy HH:mm:ss z", Locale.US);
@@ -755,6 +764,7 @@
      * Confirm that "EST"(GMT-5:00) and "CST"(GMT-6:00) are used in US
      * as "EST" or "CST", not Australian "EST" and "CST".
      */
+    @SuppressWarnings("deprecation")
     public void Test4406615() {
       Locale savedLocale = Locale.getDefault();
       TimeZone savedTimeZone = TimeZone.getDefault();
@@ -823,6 +833,7 @@
          * greater than "99", are treated as literal years.  So "1/2/3456"
          * becomes 3456 AD.  Likewise, "1/2/-3" becomes -3 AD == 2 BC.
          */
+        @SuppressWarnings("deprecation")
         Object[] DATA = {
             "02/29/00",   new Date(2000-1900, Calendar.FEBRUARY, 29),
             "01/23/01",   new Date(2001-1900, Calendar.JANUARY,  23),
@@ -878,6 +889,7 @@
         DateFormat fmt = new SimpleDateFormat(pattern,
                                               DateFormatSymbols.getInstance(Locale.US));
         fmt.getCalendar().setLenient(false);
+        @SuppressWarnings("deprecation")
         Date d = new Date(2000-1900, Calendar.FEBRUARY, 29);
         String s = fmt.format(d);
         logln(d + " x " + pattern + " => " + s);
@@ -957,6 +969,7 @@
         }
     }
 
+    @SuppressWarnings("deprecation")
     public void Test4253490() throws ParseException {
         SimpleDateFormat fmt = new SimpleDateFormat("S", Locale.US);
 
@@ -1026,6 +1039,7 @@
     public void Test4250359() {
         DateFormat df = DateFormat.getTimeInstance(DateFormat.SHORT,
                                                    Locale.US);
+        @SuppressWarnings("deprecation")
         Date d = new Date(1999-1900, Calendar.DECEMBER, 25,
                           1, 2, 3);
         String s = df.format(d);
@@ -1052,6 +1066,7 @@
         // pick up another time zone when L10N is done to that file.
         TimeZone.setDefault(TimeZone.getTimeZone("PST"));
         SimpleDateFormat fmt = new SimpleDateFormat("yy/MM/dd hh:ss zzz", Locale.JAPAN);
+        @SuppressWarnings("deprecation")
         String result = fmt.format(new Date(1999, 0, 1));
         logln("format()=>" + result);
         if (!result.endsWith("PST")) {
--- a/test/java/text/Format/DateFormat/DateFormatRoundTripTest.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/java/text/Format/DateFormat/DateFormatRoundTripTest.java	Mon Sep 19 10:11:34 2016 -0700
@@ -104,7 +104,7 @@
         String pat = null;
         Date date = null;
 
-        Vector newArgs = new Vector();
+        List<String> newArgs = new ArrayList<>();
         for (int i=0; i<args.length; ++i) {
             if (args[i].equals("-locale")
                 && (i+1) < args.length) {
@@ -131,13 +131,13 @@
                 seed = Long.parseLong(args[i+1]);
                 ++i;
             } else {
-                newArgs.addElement(args[i]);
+                newArgs.add(args[i]);
             }
         }
 
         if (newArgs.size() != args.length) {
             args = new String[newArgs.size()];
-            newArgs.copyInto(args);
+            newArgs.addAll(Arrays.asList(args));
         }
 
         new DateFormatRoundTripTest(random, seed, infinite, date, pat, loc).run(args);
@@ -193,6 +193,7 @@
          * Return the Date of this test case; must be called with the default
          * zone set to this TestCase's zone.
          */
+        @SuppressWarnings("deprecation")
         Date getDate() {
             if (_date == null) {
                 // Date constructor will work right iff we are in the target zone
--- a/test/java/text/Format/DateFormat/DateFormatSymbolsCloneTest.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/java/text/Format/DateFormat/DateFormatSymbolsCloneTest.java	Mon Sep 19 10:11:34 2016 -0700
@@ -29,6 +29,7 @@
  */
 import java.text.DateFormatSymbols;
 
+@SuppressWarnings("serial")
 public class DateFormatSymbolsCloneTest extends DateFormatSymbols {
     private int value;
 
--- a/test/java/text/Format/DateFormat/NonGregorianFormatTest.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/java/text/Format/DateFormat/NonGregorianFormatTest.java	Mon Sep 19 10:11:34 2016 -0700
@@ -36,6 +36,7 @@
 public class NonGregorianFormatTest {
     static int errors;
 
+    @SuppressWarnings("deprecation")
     static final Object[][] JAPANESE_EN = {
         { "GGGG yyyy MMMM d", "Showa 1 December 31", new Date(1926-1900, DECEMBER, 31) },
         { "GGGG yyyy MMMM d", "Showa 64 January 6", new Date(1989-1900, JANUARY, 6) },
@@ -58,6 +59,7 @@
         { "Gyy.MM.dd", "H01.01.01" },
     };
 
+    @SuppressWarnings("deprecation")
     static final Object[][] BUDDHIST_EN = {
         { "GGGG yyyy MMMM d", "B.E. 2469 December 31", new Date(1926-1900, DECEMBER, 31) },
         { "GGGG yyyy MMMM d", "B.E. 2532 January 6", new Date(1989-1900, JANUARY, 6) },
@@ -71,6 +73,7 @@
 
     static final String FULL_DATE_FORMAT_JA = "GGGGyyyy'\u5e74'M'\u6708'd'\u65e5'";
 
+    @SuppressWarnings("deprecation")
     static final Object[][] JAPANESE_JA = {
         { FULL_DATE_FORMAT_JA, "\u662d\u548c\u5143\u5e7412\u670831\u65e5", new Date(1926-1900, DECEMBER, 31) },
         { FULL_DATE_FORMAT_JA, "\u662d\u548c64\u5e741\u67086\u65e5", new Date(1989-1900, JANUARY, 6) },
@@ -93,6 +96,7 @@
         { "Gyy.MM.dd", "H01.01.01" },
     };
 
+    @SuppressWarnings("deprecation")
     static final Object[][] BUDDHIST_JA = {
         { FULL_DATE_FORMAT_JA, "\u4ecf\u66a62469\u5e7412\u670831\u65e5", new Date(1926-1900, DECEMBER, 31) },
         { FULL_DATE_FORMAT_JA, "\u4ecf\u66a62532\u5e741\u67086\u65e5", new Date(1989-1900, JANUARY, 6) },
@@ -137,6 +141,7 @@
                             locale == Locale.ENGLISH ? BUDDHIST_EN : BUDDHIST_JA);
     }
 
+    @SuppressWarnings("deprecation")
     private static void testRoundTrip(Locale calendarLocale) {
         DateFormat df = DateFormat.getDateTimeInstance(DateFormat.FULL,
                                                        DateFormat.FULL,
--- a/test/java/text/Format/DateFormat/bug4358730.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/java/text/Format/DateFormat/bug4358730.java	Mon Sep 19 10:11:34 2016 -0700
@@ -60,6 +60,7 @@
             SimpleDateFormat sdf = new SimpleDateFormat();
 
             for (int i = 0; i < datasize; i++) {
+                @SuppressWarnings("deprecation")
                 Date d = new Date(year[i]-1900, 10, 15);
                 for (int j = 0; j < nPatterns; j++) {
                     sdf.applyPattern(patterns[j]);
--- a/test/java/text/Format/MessageFormat/Bug4185816Test.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/java/text/Format/MessageFormat/Bug4185816Test.java	Mon Sep 19 10:11:34 2016 -0700
@@ -98,7 +98,7 @@
             final InputStream is = HexDumpReader.getStreamFromHexDump(fileName + ".txt");
             final ObjectInputStream in = new ObjectInputStream(is);
             final MessageFormat form = (MessageFormat)in.readObject();
-            final Object[] testArgs = {new Long(12373), "MyDisk"};
+            final Object[] testArgs = {12373L, "MyDisk"};
             final String result = form.format(testArgs);
             in.close();
         } catch (Exception e) {
--- a/test/java/text/Format/MessageFormat/LargeMessageFormat.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/java/text/Format/MessageFormat/LargeMessageFormat.java	Mon Sep 19 10:11:34 2016 -0700
@@ -56,18 +56,19 @@
 
     private static void testFormat() {
         // construct large argument array
+        @SuppressWarnings("deprecation")
         Object[] sample = {
-                new Integer(0), // replace with running count below
+                 0, // replace with running count below
                 "hello",
                 new Date(89, 10, 9),
-                new Integer(567890),
-                new Double(1234.50)
+                567890,
+                1234.50
         };
         int samples = sample.length;
         Object[] arguments = new Object[REPEATS * (samples + 1)];
         for (int i = 0; i < REPEATS; i++) {
             System.arraycopy(sample, 0, arguments, i * samples, samples);
-            arguments[i * samples] = new Integer(i);
+            arguments[i * samples] = i;
         }
 
         // construct large template
--- a/test/java/text/Format/MessageFormat/MessageRegression.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/java/text/Format/MessageFormat/MessageRegression.java	Mon Sep 19 10:11:34 2016 -0700
@@ -136,7 +136,7 @@
         try {
             logln("Apply with pattern : " + pattern1);
             messageFormatter.applyPattern(pattern1);
-            Object[] params = {new Integer(7)};
+            Object[] params = {7};
             String tempBuffer = messageFormatter.format(params);
             if (!tempBuffer.equals("Impossible {1} has occurred -- status code is 7 and message is {2}."))
                 errln("Tests arguments < substitution failed. Formatted text=" +
@@ -455,7 +455,7 @@
             errln("argument0: \"" + objs[0] + "\"");
         mf.setLocale(Locale.US);
         mf.applyPattern("{0,number,#.##}, {0,number,#.#}");
-        Object[] oldobjs = {new Double(3.1415)};
+        Object[] oldobjs = {3.1415};
         String result = mf.format( oldobjs );
         logln("pattern: \"" + mf.toPattern() + "\"");
         logln("text for parsing: \"" + result + "\"");
@@ -481,7 +481,7 @@
         ChoiceFormat fileform = new ChoiceFormat(filelimits, filepart);
         form1.setFormat(1, fileform);
         form2.setFormat(0, fileform);
-        Object[] testArgs = {new Long(12373), "MyDisk"};
+        Object[] testArgs = {12373L, "MyDisk"};
         logln(form1.format(testArgs));
         logln(form2.format(testArgs));
     }
@@ -531,7 +531,7 @@
         };
 
         for (int i=0; i<3; i++) {
-            String out = mf.format(new Object[]{new Integer(i)});
+            String out = mf.format(new Object[]{i});
             if (SUFFIX[i] == null) {
                 if (!out.equals(PREFIX[i]))
                     errln("" + i + ": Got \"" + out + "\"; Want \"" + PREFIX[i] + "\"");
@@ -607,8 +607,7 @@
      */
     public void Test4169959() {
         // This works
-        logln(MessageFormat.format( "This will {0}",
-                                    new String[]{"work"} ) );
+        logln(MessageFormat.format( "This will {0}", "work"));
 
         // This fails
         logln(MessageFormat.format( "This will {0}",
--- a/test/java/text/Format/MessageFormat/MessageTest.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/java/text/Format/MessageFormat/MessageTest.java	Mon Sep 19 10:11:34 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2016, 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
@@ -52,7 +52,7 @@
 
    public void TestMSGPatternTest() {
         Object[] testArgs = {
-            new Double (1), new Double(3456),
+             1D, 3456D,
             "Disk", new Date(10000000000L)};
 
         String[] testCases = {
--- a/test/java/text/Format/NumberFormat/BigDecimalCompatibilityTest.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/java/text/Format/NumberFormat/BigDecimalCompatibilityTest.java	Mon Sep 19 10:11:34 2016 -0700
@@ -118,7 +118,7 @@
            bd = bd.divide(new BigDecimal(multiplier));
         }
         catch (ArithmeticException e) {
-           bd = bd.divide(new BigDecimal(multiplier), BigDecimal.ROUND_HALF_EVEN);
+           bd = bd.divide(new BigDecimal(multiplier), RoundingMode.HALF_EVEN);
         }
         check(num, bd, multiplier);
     }
--- a/test/java/text/Format/NumberFormat/BigDecimalFormat.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/java/text/Format/NumberFormat/BigDecimalFormat.java	Mon Sep 19 10:11:34 2016 -0700
@@ -793,7 +793,7 @@
         formatted.setLength(0);
         from = "123456789";
         to   = sep_zero.substring(0, 399) + ",123,456,789";
-        nf.format(new Long(from), formatted, new FieldPosition(0));
+        nf.format(123456789L, formatted, new FieldPosition(0));
         checkFormat(from, formatted, to, ((DecimalFormat)nf).getMultiplier());
 
         /* ------------------------------------------------------------------ */
@@ -810,7 +810,7 @@
         from = "123456789";
         to   = "-" + nonsep_zero.substring(0, 300) + "123456789." +
                nonsep_zero.substring(0, 340);
-        nf.format(new Long(from), formatted, new FieldPosition(0));
+        nf.format(123456789L, formatted, new FieldPosition(0));
         checkFormat(from, formatted, to, ((DecimalFormat)nf).getMultiplier());
 
         /* ------------------------------------------------------------------ */
@@ -827,7 +827,7 @@
         from = Long.toString(Long.MAX_VALUE);
         to   = sep_zero.substring(0, 373) +
                "19,807,040,619,342,712,359,383,728,129";
-        nf.format(new Long(from), formatted, new FieldPosition(0));
+        nf.format(Long.MAX_VALUE, formatted, new FieldPosition(0));
         checkFormat(from, formatted, to, ((DecimalFormat)nf).getMultiplier());
 
         /* ------------------------------------------------------------------ */
@@ -844,7 +844,7 @@
         from = Long.toString(Long.MAX_VALUE);
         to   = "-1.9807040628566084396238503936" +
                nonsep_zero.substring(0, 312) + "E28";
-        nf.format(new Long(from), formatted, new FieldPosition(0));
+        nf.format(Long.MAX_VALUE, formatted, new FieldPosition(0));
         checkFormat(from, formatted, to, ((DecimalFormat)nf).getMultiplier());
 
         /* ------------------------------------------------------------------ */
@@ -862,7 +862,7 @@
         to   = "-19807040619342712361531211776" +
                nonsep_zero.substring(0, 280) + "." +
                nonsep_zero.substring(0, 340) + "E-280";
-        nf.format(new Long(from), formatted, new FieldPosition(0));
+        nf.format(Long.MIN_VALUE, formatted, new FieldPosition(0));
         checkFormat(from, formatted, to, ((DecimalFormat)nf).getMultiplier());
 
         /* ------------------------------------------------------------------ */
@@ -880,7 +880,7 @@
         to   = sep_zero.substring(0, 373) +
                "19,807,040,628,566,084,398,385,987,584." +
                nonsep_zero.substring(0, 340);
-        nf.format(new Long(from), formatted, new FieldPosition(0));
+        nf.format(Long.MIN_VALUE, formatted, new FieldPosition(0));
         checkFormat(from, formatted, to, ((DecimalFormat)nf).getMultiplier());
     }
 
--- a/test/java/text/Format/NumberFormat/BigDecimalParse.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/java/text/Format/NumberFormat/BigDecimalParse.java	Mon Sep 19 10:11:34 2016 -0700
@@ -199,15 +199,15 @@
 
         // From: 1000.000
         // To:   Double.POSITIVE_INFINITY
-        check("1000.000", new Double(Double.POSITIVE_INFINITY));
+        check("1000.000", Double.POSITIVE_INFINITY);
 
         // From: -1000
         // To:   Double.NEGATIVE_INFINITY
-        check("-1000", new Double(Double.NEGATIVE_INFINITY));
+        check("-1000", Double.NEGATIVE_INFINITY);
 
         // From: -0.00
         // To:   Double.NaN
-        check("-0.00", new Double(Double.NaN));
+        check("-0.00", Double.NaN);
     }
 
     /**
@@ -220,31 +220,31 @@
 
         // From: 1000.000
         // To:   Double.POSITIVE_INFINITY
-        check("1000.000", new Double(Double.POSITIVE_INFINITY));
+        check("1000.000", Double.POSITIVE_INFINITY);
 
         // From: -1000.000
         // To:   Double.NEGATIVE_INFINITY
-        check("-1000.000", new Double(Double.NEGATIVE_INFINITY));
+        check("-1000.000", Double.NEGATIVE_INFINITY);
 
         // From: 0.0
         // To:   Double.NaN
-        check("0.0", new Double(Double.NaN));
+        check("0.0", Double.NaN);
 
         // From: -0.0 (Double)
         // To:   Double.NaN
-        check("-0.0", new Double(Double.NaN));
+        check("-0.0", Double.NaN);
 
         // From: Double.NaN
         // To:   Double.NaN
-        check("\ufffd", new Double(Double.NaN));
+        check("\ufffd", Double.NaN);
 
         // From: Double.POSITIVE_INFINITY
         // To:   Double.NaN
-        check("\u221e", new Double(Double.POSITIVE_INFINITY));
+        check("\u221e", Double.POSITIVE_INFINITY);
 
         // From: Double.NEGATIVE_INFINITY
         // To:   Double.NaN
-        check("-\u221e", new Double(Double.NEGATIVE_INFINITY));
+        check("-\u221e", Double.NEGATIVE_INFINITY);
     }
 
     /**
@@ -257,15 +257,15 @@
 
         // From: 1000
         // To:   Double.POSITIVE_INFINITY
-        check("1000", new Double(Double.POSITIVE_INFINITY));
+        check("1000", Double.POSITIVE_INFINITY);
 
         // From: -1000
         // To:   Double.NEGATIVE_INFINITY
-        check("-1000", new Double(Double.NEGATIVE_INFINITY));
+        check("-1000", Double.NEGATIVE_INFINITY);
 
         // From: -000 (Long)
         // To:   Double.NaN
-        check("-000", new Double(Double.NaN));
+        check("-000", Double.NaN);
     }
 
     /**
@@ -350,20 +350,20 @@
             {
                 new BigDecimal("0"), new BigDecimal("0.0"), new BigDecimal("5"),
                 new BigDecimal("5.0"), new BigDecimal("5.1"),
-                new Double(Double.POSITIVE_INFINITY), new Double(Double.NaN),
+                Double.POSITIVE_INFINITY, Double.NaN,
                 new BigDecimal("0"), new BigDecimal("0.0"),
                 new BigDecimal("-5"), new BigDecimal("-5.0"),
                 new BigDecimal("-5.1"),
-                new Double(Double.NEGATIVE_INFINITY), new Double(Double.NaN),
+                Double.NEGATIVE_INFINITY, Double.NaN,
             },
             {
                 new BigDecimal("0"), new BigDecimal("0.0"),
                 new BigDecimal("-5"), new BigDecimal("-5.0"),
                 new BigDecimal("-5.1"),
-                new Double(Double.NEGATIVE_INFINITY), new Double(Double.NaN),
+                Double.NEGATIVE_INFINITY, Double.NaN,
                 new BigDecimal("0"), new BigDecimal("0.0"), new BigDecimal("5"),
                 new BigDecimal("5.0"), new BigDecimal("5.1"),
-                new Double(Double.POSITIVE_INFINITY),
+                Double.POSITIVE_INFINITY,
             },
         };
 
--- a/test/java/text/Format/NumberFormat/Bug4208135.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/java/text/Format/NumberFormat/Bug4208135.java	Mon Sep 19 10:11:34 2016 -0700
@@ -47,12 +47,12 @@
         df.applyPattern("0.#E0");
 
         df.setDecimalSeparatorAlwaysShown(true);
-        checkFormat(new Double(0.0), "0.E0");
-        checkFormat(new Double(10.0), "1.E1");
-        checkFormat(new Double(1000.0), "1.E3");
-        checkFormat(new Long(0), "0.E0");
-        checkFormat(new Long(10), "1.E1");
-        checkFormat(new Long(1000), "1.E3");
+        checkFormat(0.0, "0.E0");
+        checkFormat(10.0, "1.E1");
+        checkFormat(1000.0, "1.E3");
+        checkFormat(0L, "0.E0");
+        checkFormat(10L, "1.E1");
+        checkFormat(1000L, "1.E3");
         checkFormat(new BigDecimal("0.0"), "0.E0");
         checkFormat(new BigDecimal("10.0"), "1.E1");
         checkFormat(new BigDecimal("1000.0"), "1.E3");
@@ -61,12 +61,12 @@
         checkFormat(new BigInteger("1000"), "1.E3");
 
         df.setDecimalSeparatorAlwaysShown(false);
-        checkFormat(new Double(0.0), "0E0");
-        checkFormat(new Double(10.0), "1E1");
-        checkFormat(new Double(1000.0), "1E3");
-        checkFormat(new Long(0), "0E0");
-        checkFormat(new Long(10), "1E1");
-        checkFormat(new Long(1000), "1E3");
+        checkFormat(0.0, "0E0");
+        checkFormat(10.0, "1E1");
+        checkFormat(1000.0, "1E3");
+        checkFormat(0L, "0E0");
+        checkFormat(10L, "1E1");
+        checkFormat(1000L, "1E3");
         checkFormat(new BigDecimal("0.0"), "0E0");
         checkFormat(new BigDecimal("10.0"), "1E1");
         checkFormat(new BigDecimal("1000.0"), "1E3");
@@ -77,12 +77,12 @@
         df.applyPattern("0.###");
 
         df.setDecimalSeparatorAlwaysShown(true);
-        checkFormat(new Double(0.0), "0.");
-        checkFormat(new Double(10.0), "10.");
-        checkFormat(new Double(1000.0), "1000.");
-        checkFormat(new Long(0), "0.");
-        checkFormat(new Long(10), "10.");
-        checkFormat(new Long(1000), "1000.");
+        checkFormat(0.0, "0.");
+        checkFormat(10.0, "10.");
+        checkFormat(1000.0, "1000.");
+        checkFormat(0L, "0.");
+        checkFormat(10L, "10.");
+        checkFormat(1000L, "1000.");
         checkFormat(new BigDecimal("0.0"), "0.");
         checkFormat(new BigDecimal("10.0"), "10.");
         checkFormat(new BigDecimal("1000.0"), "1000.");
@@ -91,12 +91,12 @@
         checkFormat(new BigInteger("1000"), "1000.");
 
         df.setDecimalSeparatorAlwaysShown(false);
-        checkFormat(new Double(0.0), "0");
-        checkFormat(new Double(10.0), "10");
-        checkFormat(new Double(1000.0), "1000");
-        checkFormat(new Long(0), "0");
-        checkFormat(new Long(10), "10");
-        checkFormat(new Long(1000), "1000");
+        checkFormat(0.0, "0");
+        checkFormat(10.0, "10");
+        checkFormat(1000.0, "1000");
+        checkFormat(0L, "0");
+        checkFormat(10L, "10");
+        checkFormat(1000L, "1000");
         checkFormat(new BigDecimal("0.0"), "0");
         checkFormat(new BigDecimal("10.0"), "10");
         checkFormat(new BigDecimal("1000.0"), "1000");
--- a/test/java/text/Format/NumberFormat/Bug4833877.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/java/text/Format/NumberFormat/Bug4833877.java	Mon Sep 19 10:11:34 2016 -0700
@@ -51,20 +51,20 @@
         /*
          * Test for double/Double
          */
-        checkFormat(new Double(252.5252525252525), "1,010.10101010101");
-        checkParse("-1,010.10101010101", new Double(-252.5252525252525));
+        checkFormat(252.5252525252525, "1,010.10101010101");
+        checkParse("-1,010.10101010101", -252.5252525252525);
 
-        checkFormat(new Double(-2222.2222), "-8,888.8888");
-        checkParse("8888.8888", new Double(2222.2222));
+        checkFormat(-2222.2222, "-8,888.8888");
+        checkParse("8888.8888", 2222.2222);
 
         /*
          * Test for long/Long
          */
-        checkFormat(new Long(1000), "4,000");
-        checkParse("-4,000", new Long(-1000));
+        checkFormat(1000L, "4,000");
+        checkParse("-4,000", -1000L);
 
-        checkFormat(new Long(-250), "-1,000");
-        checkParse("1000", new Long(250));
+        checkFormat(-250L, "-1,000");
+        checkParse("1000", 250L);
 
         /* ---------------------------------------------------------------- */
 
@@ -104,20 +104,20 @@
         /*
          * Test for double/Double
          */
-        checkFormat(new Double(252.5252525252525), "-1,010.10101010101");
-        checkParse("-1,010.10101010101", new Double(252.5252525252525));
+        checkFormat(252.5252525252525, "-1,010.10101010101");
+        checkParse("-1,010.10101010101", 252.5252525252525);
 
-        checkFormat(new Double(-2222.2222), "8,888.8888");
-        checkParse("8888.8888", new Double(-2222.2222));
+        checkFormat(-2222.2222, "8,888.8888");
+        checkParse("8888.8888", -2222.2222);
 
         /*
          * Test for long/Long
          */
-        checkFormat(new Long(1000), "-4,000");
-        checkParse("-4,000", new Long(1000));
+        checkFormat(1000L, "-4,000");
+        checkParse("-4,000", 1000L);
 
-        checkFormat(new Long(-250), "1,000");
-        checkParse("1000", new Long(-250));
+        checkFormat(-250L, "1,000");
+        checkParse("1000", -250L);
 
         /* ---------------------------------------------------------------- */
 
@@ -157,30 +157,30 @@
         /*
          * Test for double/Double
          */
-        checkFormat(new Double(3333.3333333), "-9,999.9999999");
-        checkParse("-10,000.00000000000", new Double(3333.3333333333335));// rounding error
+        checkFormat(3333.3333333, "-9,999.9999999");
+        checkParse("-10,000.00000000000", 3333.3333333333335);// rounding error
 
         df.setParseIntegerOnly(true);
-        checkFormat(new Double(-3333.3333333), "9,999.9999999");
-        checkParse("10,000.00000000000", new Long(-3333));
+        checkFormat(-3333.3333333, "9,999.9999999");
+        checkParse("10,000.00000000000", -3333L);
         df.setParseIntegerOnly(false);
-        checkFormat(new Double(-3333.3333333), "9,999.9999999");
-        checkParse("10,000.00000000000", new Double(-3333.3333333333335));// rounding error
+        checkFormat(-3333.3333333, "9,999.9999999");
+        checkParse("10,000.00000000000", -3333.3333333333335);// rounding error
 
         /*
          * Test for long/Long
          */
-        checkFormat(new Long(3333), "-9,999");
+        checkFormat(3333L, "-9,999");
         df.setParseIntegerOnly(true);
-        checkParse("-10,000", new Long(3333));
+        checkParse("-10,000", 3333L);
         df.setParseIntegerOnly(false);
-        checkParse("-10000", new Double(3333.3333333333335));// rounding error
+        checkParse("-10000", 3333.3333333333335);// rounding error
 
-        checkFormat(new Long(-3333), "9,999");
+        checkFormat(-3333L, "9,999");
         df.setParseIntegerOnly(true);
-        checkParse("10,000", new Long(-3333));
+        checkParse("10,000", -3333L);
         df.setParseIntegerOnly(false);
-        checkParse("10000", new Double(-3333.3333333333335));// rounding error
+        checkParse("10000", -3333.3333333333335);// rounding error
 
         /* ---------------------------------------------------------------- */
 
@@ -225,20 +225,20 @@
         /*
          * Test for double/Double
          */
-        checkFormat(new Double(252.5252525252525), "1.01010101010101E3");
-        checkParse("-1.01010101010101E3", new Double(-2.525252525252525E2));
+        checkFormat(252.5252525252525, "1.01010101010101E3");
+        checkParse("-1.01010101010101E3", -2.525252525252525E2);
 
-        checkFormat(new Double(-2222.2222), "-8.8888888E3");
-        checkParse("8888.8888", new Double(2.2222222E3));
+        checkFormat(-2222.2222, "-8.8888888E3");
+        checkParse("8888.8888", 2.2222222E3);
 
         /*
          * Test for long/Long
          */
-        checkFormat(new Long(1000), "4E3");
-        checkParse("-4E3", new Long(-1000));
+        checkFormat(1000L, "4E3");
+        checkParse("-4E3", -1000L);
 
-        checkFormat(new Long(-250), "-1E3");
-        checkParse("1000", new Long(250));
+        checkFormat(-250L, "-1E3");
+        checkParse("1000", 250L);
 
         /* ---------------------------------------------------------------- */
 
@@ -279,20 +279,20 @@
         /*
          * Test for double/Double
          */
-        checkFormat(new Double(252.5252525252525), "-1.01010101010101E3");
-        checkParse("-1.01010101010101E3", new Double(2.525252525252525E2));
+        checkFormat(252.5252525252525, "-1.01010101010101E3");
+        checkParse("-1.01010101010101E3", 2.525252525252525E2);
 
-        checkFormat(new Double(-2222.2222), "8.8888888E3");
-        checkParse("8888.8888", new Double(-2.2222222E3));
+        checkFormat(-2222.2222, "8.8888888E3");
+        checkParse("8888.8888", -2.2222222E3);
 
         /*
          * Test for long/Long
          */
-        checkFormat(new Long(1000), "-4E3");
-        checkParse("-4E3", new Long(1000));
+        checkFormat(1000L, "-4E3");
+        checkParse("-4E3", 1000L);
 
-        checkFormat(new Long(-250), "1E3");
-        checkParse("1000", new Long(-250));
+        checkFormat(-250L, "1E3");
+        checkParse("1000", -250L);
 
         /* ---------------------------------------------------------------- */
 
@@ -333,30 +333,30 @@
         /*
          * Test for double/Double
          */
-        checkFormat(new Double(3333.3333333), "-9.9999999999E3");
-        checkParse("-1.00000000000000E3", new Double(3.33333333333333333E2));
+        checkFormat(3333.3333333, "-9.9999999999E3");
+        checkParse("-1.00000000000000E3", 3.33333333333333333E2);
 
         df.setParseIntegerOnly(true);
-        checkFormat(new Double(-3333.3333333), "9.9999999999E3");
-        checkParse("10.00000000000000E3", new Long(-3));
+        checkFormat(-3333.3333333, "9.9999999999E3");
+        checkParse("10.00000000000000E3",-3L);
         df.setParseIntegerOnly(false);
-        checkFormat(new Double(-3333.3333333), "9.9999999999E3");
-        checkParse("10.00000000000000E3", new Double(-3.33333333333333333E3));
+        checkFormat(-3333.3333333, "9.9999999999E3");
+        checkParse("10.00000000000000E3", -3.33333333333333333E3);
 
         /*
          * Test for long/Long
          */
-        checkFormat(new Long(3333), "-9.999E3");
+        checkFormat(3333L, "-9.999E3");
         df.setParseIntegerOnly(true);
-        checkParse("-1.0E4", new Long(0));
+        checkParse("-1.0E4", 0L);
         df.setParseIntegerOnly(false);
-        checkParse("-1.0E4", new Double(3333.3333333333335));
+        checkParse("-1.0E4", 3333.3333333333335);
 
-        checkFormat(new Long(-3333), "9.999E3");
+        checkFormat(-3333L, "9.999E3");
         df.setParseIntegerOnly(true);
-        checkParse("10.0E4", new Long(-3));
+        checkParse("10.0E4", -3L);
         df.setParseIntegerOnly(false);
-        checkParse("10.0E4", new Double(-33333.3333333333336));
+        checkParse("10.0E4", -33333.3333333333336);
 
         /* ---------------------------------------------------------------- */
 
--- a/test/java/text/Format/NumberFormat/Bug4838107.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/java/text/Format/NumberFormat/Bug4838107.java	Mon Sep 19 10:11:34 2016 -0700
@@ -71,47 +71,47 @@
         dfs = df.getDecimalFormatSymbols();
 
         /* Test with default pattern */
-        test(new Double(1234),    "1,234");
-        test(new Double(0.1234),  "0.123");     // rounded
-        test(new Double(-1234),   "-1,234");
-        test(new Double(-0.1234), "-0.123");    // rounded
+        test(1234D,    "1,234");
+        test(0.1234,  "0.123");     // rounded
+        test(-1234D,   "-1,234");
+        test(-0.1234, "-0.123");    // rounded
 
-        test(new Double(Double.POSITIVE_INFINITY), "\u221e");
-        test(new Double(Double.NEGATIVE_INFINITY), "-\u221e");
-        test(new Double(Double.NaN), "\ufffd"); // without prefix and suffix
-        test(new Double(0.0),  "0");
-        test(new Double(-0.0), "-0");   // with the minus sign
+        test(Double.POSITIVE_INFINITY, "\u221e");
+        test(Double.NEGATIVE_INFINITY, "-\u221e");
+        test(Double.NaN, "\ufffd"); // without prefix and suffix
+        test(0.0,  "0");
+        test(-0.0, "-0");   // with the minus sign
 
         /* Specify a pattern and the minus sign. */
         prepareFormatter("<P>#.###E00<S>", 'm');
-        test(new Double(1234),    "<P>1.234E03<S>");
-        test(new Double(0.1234),  "<P>1.234Em01<S>");
-        test(new Double(-1234),   "m<P>1.234E03<S>");
-        test(new Double(-0.1234), "m<P>1.234Em01<S>");
+        test(1234D,    "<P>1.234E03<S>");
+        test(0.1234,  "<P>1.234Em01<S>");
+        test(-1234D,   "m<P>1.234E03<S>");
+        test(-0.1234, "m<P>1.234Em01<S>");
 
         prepareFormatter("<P>#.###E00<S>;#.###E00", 'm');
-        test(new Double(1234),    "<P>1.234E03<S>");
-        test(new Double(0.1234),  "<P>1.234Em01<S>");
-        test(new Double(-1234),   "1.234E03");
-        test(new Double(-0.1234), "1.234Em01");
+        test(1234D,    "<P>1.234E03<S>");
+        test(0.1234,  "<P>1.234Em01<S>");
+        test(-1234D,   "1.234E03");
+        test(-0.1234, "1.234Em01");
 
         prepareFormatter("#.###E00;<P>#.###E00<S>", 'm');
-        test(new Double(1234),    "1.234E03");
-        test(new Double(0.1234),  "1.234Em01");
-        test(new Double(-1234),   "<P>1.234E03<S>");
-        test(new Double(-0.1234), "<P>1.234Em01<S>");
+        test(1234D,    "1.234E03");
+        test(0.1234,  "1.234Em01");
+        test(-1234D,   "<P>1.234E03<S>");
+        test(-0.1234, "<P>1.234Em01<S>");
 
         prepareFormatter("<P>#.###E00<S>;<p>-#.###E00<s>", 'm');
-        test(new Double(1234),    "<P>1.234E03<S>");
-        test(new Double(0.1234),  "<P>1.234Em01<S>");
-        test(new Double(-1234),   "<p>m1.234E03<s>");
-        test(new Double(-0.1234), "<p>m1.234Em01<s>");
+        test(1234D,    "<P>1.234E03<S>");
+        test(0.1234,  "<P>1.234Em01<S>");
+        test(-1234D,   "<p>m1.234E03<s>");
+        test(-0.1234, "<p>m1.234Em01<s>");
 
-        test(new Double(Double.POSITIVE_INFINITY), "<P>\u221e<S>");
-        test(new Double(Double.NEGATIVE_INFINITY), "<p>m\u221e<s>");
-        test(new Double(Double.NaN), "\ufffd"); // without prefix and suffix
-        test(new Double(0.0),  "<P>0E00<S>");
-        test(new Double(-0.0), "<p>m0E00<s>");  // with the minus sign
+        test(Double.POSITIVE_INFINITY, "<P>\u221e<S>");
+        test(Double.NEGATIVE_INFINITY, "<p>m\u221e<s>");
+        test(Double.NaN, "\ufffd"); // without prefix and suffix
+        test(0.0,  "<P>0E00<S>");
+        test(-0.0, "<p>m0E00<s>");  // with the minus sign
     }
 
     static void test_BigDecimal() {
@@ -151,19 +151,19 @@
         dfs = df.getDecimalFormatSymbols();
 
         /* Test with default pattern */
-        test(new Long(123456789),  "123,456,789");
-        test(new Long(-123456789), "-123,456,789");
+        test(123456789L,  "123,456,789");
+        test(-123456789L, "-123,456,789");
 
-        test(new Long(0), "0");
-        test(new Long(-0), "0");
+        test(0L, "0");
+        test(-0L, "0");
 
         /* Specify a pattern and the minus sign. */
         prepareFormatter("<P>#,###<S>;<p>-#,###<s>", 'm');
-        test(new Long(123456789),  "<P>123,456,789<S>");
-        test(new Long(-123456789), "<p>m123,456,789<s>");
+        test(123456789L,  "<P>123,456,789<S>");
+        test(-123456789L, "<p>m123,456,789<s>");
 
-        test(new Long(0), "<P>0<S>");
-        test(new Long(-0), "<P>0<S>");
+        test(0L, "<P>0<S>");
+        test(-0L, "<P>0<S>");
     }
 
     static void test_BigInteger() {
--- a/test/java/text/Format/NumberFormat/Bug4944439.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/java/text/Format/NumberFormat/Bug4944439.java	Mon Sep 19 10:11:34 2016 -0700
@@ -84,7 +84,7 @@
         }
 
         int index = s.indexOf('.');
-        Long l = new Long(s.substring(0, index));
+        Long l = Long.valueOf(s.substring(0, index));
         if (!l.equals(number)) {
             err = true;
             System.err.println("Failed: DecimalFormat.parse(" + s +
@@ -101,7 +101,7 @@
                 number.getClass().getName());
         }
 
-        Double d = new Double(s);
+        Double d = Double.valueOf(s);
         if (!d.equals(number)) {
             err = true;
             System.err.println("Failed: DecimalFormat.parse(" + s +
--- a/test/java/text/Format/NumberFormat/Bug4990596.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/java/text/Format/NumberFormat/Bug4990596.java	Mon Sep 19 10:11:34 2016 -0700
@@ -35,6 +35,7 @@
         new DecimalFormat().format(new MutableInteger(0));
     }
 
+    @SuppressWarnings("serial")
     public static class MutableInteger extends Number {
         public int value;
 
--- a/test/java/text/Format/NumberFormat/Bug6278616.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/java/text/Format/NumberFormat/Bug6278616.java	Mon Sep 19 10:11:34 2016 -0700
@@ -47,7 +47,7 @@
         NumberFormat nf = NumberFormat.getInstance();
 
         for (int j = 0; j < ints.length; j++) {
-            String s_i = nf.format(new Integer(ints[j]));
+            String s_i = nf.format(ints[j]);
             String s_ai = nf.format(new AtomicInteger(ints[j]));
             if (!s_i.equals(s_ai)) {
                 throw new RuntimeException("format(AtomicInteger " + s_ai +
@@ -57,7 +57,7 @@
         }
 
         for (int j = 0; j < longs.length; j++) {
-            String s_l = nf.format(new Long(longs[j]));
+            String s_l = nf.format(longs[j]);
             String s_al = nf.format(new AtomicLong(longs[j]));
             if (!s_l.equals(s_al)) {
                 throw new RuntimeException("format(AtomicLong " + s_al +
--- a/test/java/text/Format/NumberFormat/NumberRegression.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/java/text/Format/NumberFormat/NumberRegression.java	Mon Sep 19 10:11:34 2016 -0700
@@ -289,7 +289,7 @@
         DecimalFormat df = new DecimalFormat();
         Double d = (Double)df.parse("123.55456", pos=new ParsePosition(0));
         if (!d.toString().equals("123.55456")) {
-            errln("Result -> " + d.doubleValue());
+            errln("Result -> " + d);
         }
         Locale.setDefault(savedLocale);
     }
@@ -395,11 +395,11 @@
         Locale.setDefault(Locale.US);
         DecimalFormat df = new DecimalFormat();
         String str = "0.1234";
-        Double d1 = new Double(str);
+        Double d1 = 0.1234;
         Double d2 = (Double) df.parse(str, new ParsePosition(0));
         logln(d1.toString());
         if (d2.doubleValue() != d1.doubleValue())
-            errln("Bug 4095713 test failed, new double value : " + d2.doubleValue());
+            errln("Bug 4095713 test failed, new double value : " + d2);
         Locale.setDefault(savedLocale);
     }
 
@@ -870,7 +870,7 @@
         DecimalFormat fmt = new DecimalFormat("#,##0.00");
         StringBuffer formatted = new StringBuffer();
         FieldPosition field = new FieldPosition(0);
-        Double num = new Double(1234.5);
+        Double num = 1234.5;
         fmt.format(num, formatted, field);
         if (field.getBeginIndex() != 0 && field.getEndIndex() != 5)
             errln("Format 1234.5 failed. Begin index: " + field.getBeginIndex() + " End index: " + field.getEndIndex());
@@ -1416,7 +1416,7 @@
         DecimalFormat fmt = new DecimalFormat("#",
                 DecimalFormatSymbols.getInstance(Locale.US));
         for (int i=0; i<DATA.length; i+=3) {
-            double in = Double.valueOf(DATA[i]).doubleValue();
+            double in = Double.valueOf(DATA[i]);
             String pat = DATA[i+1];
             String exp = DATA[i+2];
             fmt.applyPattern(pat);
@@ -1622,7 +1622,7 @@
             String str = Long.toString(DATA[i]);
             for (int m = 1; m <= 100; m++) {
                 fmt.setMultiplier(m);
-                long n = ((Number) fmt.parse(str)).longValue();
+                long n = fmt.parse(str).longValue();
                 if (n > 0 != DATA[i] > 0) {
                     errln("\"" + str + "\" parse(x " + fmt.getMultiplier() +
                           ") => " + n);
@@ -1637,15 +1637,15 @@
      */
     public void Test4217661() {
         Object[] DATA = {
-            new Double(0.001), "0",
-            new Double(1.001), "1",
-            new Double(0.006), "0.01",
-            new Double(1.006), "1.01",
+            0.001, "0",
+            1.001, "1",
+            0.006, "0.01",
+            1.006, "1.01",
         };
         NumberFormat fmt = NumberFormat.getInstance(Locale.US);
         fmt.setMaximumFractionDigits(2);
         for (int i=0; i<DATA.length; i+=2) {
-            String s = fmt.format(((Double) DATA[i]).doubleValue());
+            String s = fmt.format((Double) DATA[i]);
             if (!s.equals(DATA[i+1])) {
                 errln("FAIL: Got " + s + ", exp " + DATA[i+1]);
             }
@@ -1804,6 +1804,7 @@
     }
 }
 
+@SuppressWarnings("serial")
 class myformat implements Serializable
 {
     DateFormat _dateFormat = DateFormat.getDateInstance();
@@ -1817,6 +1818,7 @@
     }
 }
 
+@SuppressWarnings("serial")
 class MyNumberFormatTest extends NumberFormat {
     public StringBuffer format(double number, StringBuffer toAppendTo, FieldPosition pos) {
         return new StringBuffer("");
@@ -1825,6 +1827,6 @@
         return new StringBuffer("");
     }
     public Number parse(String text, ParsePosition parsePosition) {
-        return new Integer(0);
+        return 0;
     }
 }
--- a/test/java/text/Format/NumberFormat/NumberRoundTrip.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/java/text/Format/NumberFormat/NumberRoundTrip.java	Mon Sep 19 10:11:34 2016 -0700
@@ -130,11 +130,11 @@
     }
 
     public void doTest(NumberFormat fmt, double value) {
-        doTest(fmt, new Double(value));
+        doTest(fmt, Double.valueOf(value));
     }
 
     public void doTest(NumberFormat fmt, long value) {
-        doTest(fmt, new Long(value));
+        doTest(fmt, Long.valueOf(value));
     }
 
     static double proportionalError(Number a, Number b) {
--- a/test/java/text/Format/NumberFormat/NumberTest.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/java/text/Format/NumberFormat/NumberTest.java	Mon Sep 19 10:11:34 2016 -0700
@@ -403,7 +403,7 @@
         float[] parseExpected = { 0, 0, 12345, -12345 };
 
         for (int i = 0; i < parseInput.length; i++) {
-            float result = ((Number) format.parse(parseInput[i])).floatValue();
+            float result = format.parse(parseInput[i]).floatValue();
             if (result != parseExpected[i]) {
                 errln("FAIL: Expected " + parseExpected[i] + ", got " + result);
             }
--- a/test/java/text/Format/NumberFormat/SerializationLoadTest.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/java/text/Format/NumberFormat/SerializationLoadTest.java	Mon Sep 19 10:11:34 2016 -0700
@@ -62,6 +62,7 @@
     }
 }
 
+@SuppressWarnings("serial")
 class CheckDecimalFormat implements Serializable
 {
     DecimalFormat _decFormat = (DecimalFormat)NumberFormat.getInstance();
@@ -73,6 +74,7 @@
     }
 }
 
+@SuppressWarnings("serial")
 class CheckDecimalFormatSymbols implements Serializable
 {
     DecimalFormatSymbols _decFormatSymbols = new DecimalFormatSymbols();
--- a/test/java/text/Format/NumberFormat/SerializationSaveTest.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/java/text/Format/NumberFormat/SerializationSaveTest.java	Mon Sep 19 10:11:34 2016 -0700
@@ -57,6 +57,7 @@
     }
 }
 
+@SuppressWarnings("serial")
 class CheckDecimalFormat implements Serializable
 {
     DecimalFormat _decFormat = (DecimalFormat)NumberFormat.getInstance();
@@ -68,6 +69,7 @@
     }
 }
 
+@SuppressWarnings("serial")
 class CheckDecimalFormatSymbols implements Serializable
 {
     DecimalFormatSymbols _decFormatSymbols = new DecimalFormatSymbols();
--- a/test/java/text/Format/common/FormatIteratorTest.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/java/text/Format/common/FormatIteratorTest.java	Mon Sep 19 10:11:34 2016 -0700
@@ -37,6 +37,7 @@
 import java.util.*;
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.concurrent.atomic.AtomicLong;
+import java.text.AttributedCharacterIterator.Attribute;
 
 /**
  * FormatTester creates Formats, and tests the resulting FieldPositions
@@ -94,7 +95,6 @@
  * Any lines starting with {@code '#'} are comment lines and ignored.
  */
 public class FormatIteratorTest extends IntlTest {
-    private static HashMap attrs;
     private Format format;
     private Object value;
     private String text;
@@ -143,30 +143,31 @@
                        "dateFormat.props"));
     }
 
+    @SuppressWarnings("unchecked")
     private void _test(File file) {
         try {
-            attrs = new HashMap();
             logln("testing: " + file);
             PParser parser = new PParser();
-            Hashtable contents = parser.parse(new BufferedReader(
+            Map<String,Object> contents = parser.parse(new BufferedReader(
                 new FileReader(file)));
-            Vector test = (Vector)contents.get("tests");
+            List<Object> test = (List)contents.get("tests");
 
             for (int counter = 0; counter < test.size(); counter++) {
                 logln("creating: " + (counter / 2));
 
                 AttributedCharacterIterator iterator =
-                    create((Hashtable)test.get(counter));
+                    create((Map)test.get(counter));
 
                 logln("verifying: " + (counter / 2));
-                verify(iterator, (Hashtable)test.get(++counter));
+                verify(iterator, (Map)test.get(++counter));
             }
         } catch (IOException ioe) {
             errln("Error reading: " + ioe);
         }
     }
 
-    public void verify(AttributedCharacterIterator iterator,Hashtable table) {
+    @SuppressWarnings("unchecked")
+    public void verify(AttributedCharacterIterator iterator,Map<String,Object> table) {
         int length = Integer.parseInt((String)table.get("length"));
 
         // Verify the text
@@ -185,10 +186,10 @@
         for (int counter = 0; counter < length; counter++) {
             iterator.setIndex(counter);
             if (!verifyAttributes(iterator.getAttributes().keySet(),
-                    makeAttributes((Vector)table.get(Integer.
+                    makeAttributes((List)table.get(Integer.
                                                       toString(counter))))) {
                 errln("Attributes don't match at " + counter + " expecting " +
-                      makeAttributes((Vector)table.get(Integer.toString
+                      makeAttributes((List)table.get(Integer.toString
                                                        (counter))) + " got " +
                       iterator.getAttributes().keySet());
             }
@@ -196,10 +197,10 @@
         for (int counter = length - 1; counter >= 0; counter--) {
             iterator.setIndex(counter);
             if (!verifyAttributes(iterator.getAttributes().keySet(),
-                    makeAttributes((Vector)table.get(Integer.
+                    makeAttributes((List)table.get(Integer.
                                                       toString(counter))))) {
                 errln("Attributes don't match at " + counter + " expecting " +
-                      makeAttributes((Vector)table.get(Integer.toString
+                      makeAttributes((List)table.get(Integer.toString
                                                        (counter))) + " got " +
                       iterator.getAttributes().keySet());
             }
@@ -207,31 +208,33 @@
         verifyLimits(iterator, table);
 
         text = escapeIfNecessary((String)table.get("text"));
-        Vector fps = (Vector)table.get("fieldPositions");
+        List<Object> fps = (List)table.get("fieldPositions");
 
         if (fps != null) {
             for (int counter = 0; counter < fps.size(); counter++) {
-                verifyFieldPosition(counter, (Hashtable)fps.get(counter));
+                verifyFieldPosition(counter,(Map)fps.get(counter));
             }
         }
     }
 
+    @SuppressWarnings("unchecked")
     private void verifyLimits(AttributedCharacterIterator iterator,
-                              Hashtable table) {
-        Vector limits = (Vector)table.get("limits");
+                              Map<String,Object> table) {
+        List<Object> limits = (List)table.get("limits");
 
         if (limits != null) {
             for (int counter = 0; counter < limits.size(); counter++) {
-                verifyLimit(iterator, (Hashtable)limits.get(counter));
+                verifyLimit(iterator, (Map)limits.get(counter));
             }
         }
     }
 
     private void verifyLimit(AttributedCharacterIterator iterator,
-                             Hashtable table) {
+                             Map<String,Object> table) {
         int begin = Integer.parseInt((String)table.get("begin"));
         int end = Integer.parseInt((String)table.get("end"));
-        Set attrs = makeAttributes((Vector)table.get("attributes"));
+        @SuppressWarnings("unchecked")
+        Set<Attribute> attrs = makeAttributes((List)table.get("attributes"));
         String begin2S = (String)table.get("begin2");
         int begin2 = (begin2S != null) ? Integer.parseInt(begin2S) : begin;
         String end2S = (String)table.get("end2");
@@ -262,9 +265,9 @@
         }
     }
 
-    private boolean verifyAttributes(Set a, Set b) {
-        boolean aEmpty = (a.size() == 0);
-        boolean bEmpty = (b.size() == 0);
+    private boolean verifyAttributes(Set<Attribute> a, Set<Attribute> b) {
+        boolean aEmpty = a.isEmpty();
+        boolean bEmpty = b.isEmpty();
 
         if (aEmpty && bEmpty) {
             return true;
@@ -284,14 +287,14 @@
         return buffer.toString();
     }
 
-    private void verifyFieldPosition(int index, Hashtable table) {
+    private void verifyFieldPosition(int index, Map<String,Object> table) {
         Object o = table.get("field");
         int begin = Integer.parseInt((String)table.get("begin"));
         int end = Integer.parseInt((String)table.get("end"));
 
         if (o != null) {
             FieldPosition fp = new FieldPosition(((Integer)
-                                          lookupField((String)o)).intValue());
+                                          lookupField((String)o)));
 
             verifyFieldPosition(fp, begin, end, index);
         }
@@ -322,11 +325,11 @@
         }
     }
 
-    public AttributedCharacterIterator create(Hashtable table) {
+    public AttributedCharacterIterator create(Map<String,Object> table) {
         format = (Format)createInstance((String)table.get("class"),
-                                        ((Vector)table.get("args")).toArray());
+                                        ((List)table.get("args")).toArray());
         value = createInstance((String)table.get("valueClass"),
-                               ((Vector)table.get("valueArgs")).toArray());
+                               ((List)table.get("valueArgs")).toArray());
 
         logln("Created format: " + format + " value " + value);
         AttributedCharacterIterator aci = format.
@@ -343,11 +346,12 @@
     private Object createInstance(String className, Object[] args) {
         if (className.equals("java.lang.reflect.Array")) {
             for (int counter = 0; counter < args.length; counter++) {
-                if (args[counter] instanceof Vector) {
-                    Vector v = (Vector)args[counter];
+                if (args[counter] instanceof List) {
+                    @SuppressWarnings("unchecked")
+                    List<Object> v = (List<Object>)args[counter];
 
                     args[counter] = createInstance((String)v.get(0),
-                                               ((Vector)v.get(1)).toArray());
+                                               ((List)v.get(1)).toArray());
                 }
             }
             return args;
@@ -361,9 +365,9 @@
             } else if (className.equals("java.util.concurrent.atomic.AtomicLong")) {
                 return new AtomicLong(Long.valueOf((String)args[0]));
             } else {
-                Class klass = lookupClass(className);
-                Constructor cons = klass.getConstructor(
-                    new Class[] { String.class });
+                Class<?> klass = lookupClass(className);
+                Constructor<?> cons = klass.getConstructor(
+                    new Class<?>[] { String.class });
                 Object value = cons.newInstance(args);
 
                 return value;
@@ -374,20 +378,20 @@
         }
     }
 
-    private Class lookupClass(String name) throws ClassNotFoundException {
+    private  Class<?> lookupClass(String name) throws ClassNotFoundException {
         try {
-            Class klass = Class.forName(name);
+            Class<?> klass = Class.forName(name);
 
             return klass;
         } catch (ClassNotFoundException e1) {}
 
         try {
-            Class klass = Class.forName("java.lang." + name);
+            Class<?> klass = Class.forName("java.lang." + name);
 
             return klass;
         } catch (ClassNotFoundException e1) {}
 
-        Class klass = Class.forName("java.text." + name);
+        Class<?> klass = Class.forName("java.text." + name);
 
         return klass;
     }
@@ -397,7 +401,7 @@
 
         try {
             int dotIndex = name.indexOf('.');
-            Class klass = lookupClass(name.substring(0, dotIndex));
+            Class<?> klass = lookupClass(name.substring(0, dotIndex));
             String fieldName = name.substring(dotIndex + 1);
             Field[] fields = klass.getFields();
 
@@ -429,8 +433,8 @@
         return string;
     }
 
-    public Set makeAttributes(Vector names) {
-        HashSet set = new HashSet(Math.max(1, names.size()));
+    public Set<Attribute> makeAttributes(List<Object> names) {
+        Set<Attribute> set = new HashSet<>(Math.max(1, names.size()));
 
         for (int counter = 0; counter < names.size(); counter++) {
             set.add(makeAttribute((String)names.get(counter)));
--- a/test/java/text/Format/common/PParser.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/java/text/Format/common/PParser.java	Mon Sep 19 10:11:34 2016 -0700
@@ -58,7 +58,7 @@
     public PParser() {
     }
 
-    public Hashtable parse(Reader r) throws IOException {
+    public Map<String,Object> parse(Reader r) throws IOException {
         this.reader = r;
         bufferedToken = false;
         lineNumber = 0;
@@ -91,23 +91,23 @@
     }
 
     protected Object parseArray() throws IOException {
-        Vector       array = new Vector();
-        int          token;
+        List<Object> array = new ArrayList<>();
+        int token;
 
         while ((token = getToken()) != CLOSE_ARRAY) {
             if (token == MORE) {
                 token = getToken();
             }
             if (token != CLOSE_ARRAY) {
-                array.addElement(parseValue(token));
+                array.add(parseValue(token));
             }
         }
         return array;
     }
 
-    protected Hashtable parsePair() throws IOException {
-        Hashtable           ht = new Hashtable(11);
-        int                 token;
+    protected Map<String,Object> parsePair() throws IOException {
+        Map<String,Object> ht = new HashMap<>(11);
+        int token;
 
         while ((token = getToken()) != CLOSE_PAIR) {
             if (token != STRING) {
@@ -133,11 +133,12 @@
     }
 
     protected int getToken() throws IOException {
-        int            token = getToken(false, false);
+        int token = getToken(false, false);
 
         return token;
     }
 
+    @SuppressWarnings("fallthrough")
     protected int getToken(boolean wantsWS, boolean inString)
         throws IOException {
         if (bufferedToken) {
@@ -225,31 +226,26 @@
         throw new RuntimeException(errorString + " at line " + lineNumber + " column " + column);
     }
 
+    @SuppressWarnings("unchecked")
     public static void dump(Object o) {
         if (o instanceof String) {
             System.out.print(o);
-        } else if(o instanceof Vector) {
-            Enumeration     e = ((Vector)o).elements();
-
+        } else if(o instanceof List) {
             dump(" (");
-            while (e.hasMoreElements()) {
-                dump(e.nextElement());
+            ((List)o).forEach((l) -> {
+                dump(l);
                 dump(" -- ");
-            }
+            });
             dump(" )");
         } else {
-            Hashtable       ht = (Hashtable)o;
-            Enumeration     e = ht.keys();
-
+            Map<String,Object> ht = (Map<String,Object>)o;
             dump(" {");
-            while (e.hasMoreElements()) {
-                Object       key = e.nextElement();
-
-                dump(key);
+            ht.keySet().forEach(l -> {
+                dump(l);
                 dump(" = ");
-                dump(ht.get(key));
+                dump(ht.get(l));
                 dump(";");
-            }
+            });
             dump(" }");
         }
     }
@@ -259,9 +255,9 @@
             System.out.println("need filename");
         } else {
             try {
-                FileReader          fr = new FileReader(args[0]);
-                PParser             parser = new PParser();
-                Hashtable           ht = parser.parse(fr);
+                FileReader fr = new FileReader(args[0]);
+                PParser parser = new PParser();
+                Map<String,Object> ht = parser.parse(fr);
 
                 dump(ht);
                 System.out.println();
--- a/test/java/util/logging/Level/CustomLevel.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/java/util/logging/Level/CustomLevel.java	Mon Sep 19 10:11:34 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2016, 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
@@ -22,12 +22,20 @@
  */
 
 import java.io.*;
+import java.lang.ref.Reference;
+import java.lang.ref.ReferenceQueue;
+import java.lang.ref.WeakReference;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.URLClassLoader;
 import java.util.*;
 import java.util.logging.*;
 
 /*
  * @test
- * @bug 8026027
+ * @bug 8026027 6543126
  * @summary Test Level.parse to look up custom levels by name and its
  *          localized name
  *
@@ -41,23 +49,168 @@
 
     private static final List<Level> levels = new ArrayList<>();
     private static final String RB_NAME = "myresource";
+    private static final String OTHERRB_NAME = "myresource2";
+
+    private static class CustomLevelReference extends WeakReference<Level> {
+        final String name;
+        final int value;
+        final String resourceBundleName;
+        public CustomLevelReference(Level level, ReferenceQueue<Level> queue) {
+            super(level, queue);
+            name = level.getName();
+            value = level.intValue();
+            resourceBundleName = level.getResourceBundleName();
+        }
+
+        @Override
+        public String toString() {
+            return "CustomLevelReference(\"" + name + "\", " + value + ", \""
+                    + resourceBundleName + "\")";
+        }
+
+    }
+
     public static void main(String[] args) throws Exception {
         setupCustomLevels();
+        setUpCustomLevelsOtherLoader();
 
         // Level.parse will return the custom Level instance
-        ResourceBundle rb = ResourceBundle.getBundle(RB_NAME);
         for (Level level : levels) {
+            final ResourceBundle rb = getResourceBundle(level);
             String name = level.getName();
-            if (!name.equals("WARNING") && !name.equals("INFO")) {
+            Level l = Level.parse(name);
+            if (!name.equals("WARNING") && !name.equals("INFO")
+                 && !name.equals("SEVERE")) {
                 // custom level whose name doesn't conflict with any standard one
-                checkCustomLevel(Level.parse(name), level);
+                checkCustomLevel(l, level);
+            } else if (l != Level.WARNING && l != Level.INFO && l != Level.SEVERE
+                    || !name.equals(l.getName())) {
+                throw new RuntimeException("Unexpected level " + formatLevel(l));
             }
+            System.out.println("Level.parse found expected level: "
+                            + formatLevel(l));
             String localizedName = rb.getString(level.getName());
-            Level l = Level.parse(localizedName);
+            l = Level.parse(localizedName);
             if (l != level) {
-                throw new RuntimeException("Unexpected level " + l + " " + l.getClass());
+                throw new RuntimeException("Unexpected level " + l + " "
+                    + l.getClass() + " for " + localizedName
+                    + " in " + rb.getBaseBundleName());
+            }
+        }
+
+        final long otherLevelCount = levels.stream()
+            .filter(CustomLevel::isCustomLoader)
+            .count();
+
+        // Now verify that custom level instances are correctly
+        // garbage collected when no longer referenced
+        ReferenceQueue<Level> queue = new ReferenceQueue<>();
+        List<CustomLevelReference> refs = new ArrayList<>();
+        List<CustomLevelReference> customRefs = new ArrayList<>();
+        int otherLevels = 0;
+        while (!levels.isEmpty()) {
+            Level l = levels.stream().findAny().get();
+            boolean isCustomLoader = isCustomLoader(l);
+            if (isCustomLoader) otherLevels++;
+
+            CustomLevelReference ref = new CustomLevelReference(l, queue);
+            if (isCustomLoader) {
+                customRefs.add(ref);
+            } else {
+                refs.add(ref);
+            }
+
+            // remove strong references to l
+            levels.remove(l);
+            l = null;
+
+            // Run gc and wait for garbage collection
+            if (otherLevels == otherLevelCount) {
+                if (customRefs.size() != otherLevelCount) {
+                    throw new RuntimeException("Test bug: customRefs.size() != "
+                             + otherLevelCount);
+                }
+                waitForGC(customRefs, queue);
             }
         }
+        if (otherLevelCount != otherLevels || otherLevelCount == 0) {
+            throw new RuntimeException("Test bug: "
+                + "no or wrong count of levels loaded from custom loader");
+        }
+        if (!customRefs.isEmpty()) {
+            throw new RuntimeException(
+                "Test bug: customRefs.size() should be empty!");
+        }
+        while (!refs.isEmpty()) {
+            final Reference<?> ref = refs.remove(0);
+            if (ref.get() == null) {
+                throw new RuntimeException("Unexpected garbage collection for "
+                           + ref);
+            }
+        }
+    }
+
+    private static void waitForGC(List<CustomLevelReference> customRefs,
+                                  ReferenceQueue<Level> queue)
+         throws InterruptedException
+    {
+        while (!customRefs.isEmpty()) {
+            Reference<? extends Level> ref2;
+            do {
+                System.gc();
+                Thread.sleep(100);
+            } while ((ref2 = queue.poll()) == null);
+
+            // Check garbage collected reference
+            if (!customRefs.contains(ref2)) {
+               throw new RuntimeException("Unexpected reference: " + ref2);
+            }
+            CustomLevelReference ref = customRefs.remove(customRefs.indexOf(ref2));
+            System.out.println(ref2 + " garbage collected");
+            final String name = ref.name;
+            Level l;
+            try {
+                l = Level.parse(name);
+                if (!name.equals("SEVERE")
+                    && !name.equals("INFO")
+                    || !name.equals(l.getName())) {
+                    throw new RuntimeException("Unexpected level "
+                            + formatLevel(l));
+                } else {
+                    if (l == Level.WARNING || l == Level.INFO
+                            || l == Level.SEVERE) {
+                        System.out.println("Level.parse found expected level: "
+                                + formatLevel(l));
+                    } else {
+                        throw new RuntimeException("Unexpected level "
+                            + formatLevel(l));
+                    }
+                }
+            } catch (IllegalArgumentException iae) {
+                if (!name.equals("WARNING")
+                    && !name.equals("INFO")
+                    && !name.equals("SEVERE")) {
+                    System.out.println("Level.parse fired expected exception: "
+                        + iae);
+                } else {
+                    throw iae;
+                }
+            }
+        }
+    }
+
+    private static boolean isCustomLoader(Level level) {
+        final ClassLoader cl = level.getClass().getClassLoader();
+        return cl != null
+             && cl != ClassLoader.getPlatformClassLoader()
+             && cl != ClassLoader.getSystemClassLoader();
+    }
+
+    static ResourceBundle getResourceBundle(Level level) {
+        return isCustomLoader(level)
+            ? ResourceBundle.getBundle(OTHERRB_NAME, Locale.getDefault(),
+                                       level.getClass().getClassLoader())
+            : ResourceBundle.getBundle(RB_NAME);
     }
 
     private static void setupCustomLevels() throws IOException {
@@ -67,22 +220,53 @@
         levels.add(new CustomLevel("WARNING", 1010, RB_NAME));
         levels.add(new CustomLevel("INFO", 1000, RB_NAME));
     }
+
+    static void setUpCustomLevelsOtherLoader()
+         throws MalformedURLException,
+               ClassNotFoundException, NoSuchMethodException,
+               IllegalAccessException, InvocationTargetException
+    {
+        final String classes = System.getProperty("test.classes",
+                                                  "build/classes");
+        final String sources = System.getProperty("test.src",
+                                                  "src");
+        final URL curl = new File(classes).toURI().toURL();
+        final URL surl = new File(sources).toURI().toURL();
+        URLClassLoader loader = new URLClassLoader(new URL[] {curl, surl},
+                                     ClassLoader.getPlatformClassLoader());
+        Class<?> customLevelClass = Class.forName("CustomLevel", false, loader);
+        Method m = customLevelClass.getMethod("setUpCustomLevelsOtherLoader",
+                                              List.class);
+        m.invoke(null, levels);
+    }
+
+    public static void setUpCustomLevelsOtherLoader(List<Level> levels) {
+        levels.add(new CustomLevel("OTHEREMERGENCY", 1091, OTHERRB_NAME));
+        levels.add(new CustomLevel("OTHERALERT", 1061, OTHERRB_NAME));
+        levels.add(new CustomLevel("OTHERCRITICAL", 1031, OTHERRB_NAME));
+        levels.add(new CustomLevel("SEVERE", 1011, OTHERRB_NAME));
+        levels.add(new CustomLevel("INFO", 1000, OTHERRB_NAME));
+    }
+
     static void checkCustomLevel(Level level, Level expected) {
         // Level value must be the same
         if (!level.equals(expected)) {
-            throw new RuntimeException(formatLevel(level) + " != " + formatLevel(expected));
+            throw new RuntimeException(formatLevel(level) + " != "
+                 + formatLevel(expected));
         }
 
         if (!level.getName().equals(expected.getName())) {
-            throw new RuntimeException(formatLevel(level) + " != " + formatLevel(expected));
+            throw new RuntimeException(formatLevel(level) + " != "
+                 + formatLevel(expected));
         }
 
         // Level.parse is expected to return the custom Level
         if (level != expected) {
-            throw new RuntimeException(formatLevel(level) + " != " + formatLevel(expected));
+            throw new RuntimeException(formatLevel(level) + " != "
+                 + formatLevel(expected));
         }
 
-        ResourceBundle rb = ResourceBundle.getBundle(RB_NAME);
+        final ResourceBundle rb = getResourceBundle(level);
         String name = rb.getString(level.getName());
         if (!level.getLocalizedName().equals(name)) {
             // must have the same localized name
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/java/util/logging/Level/myresource2.properties	Mon Sep 19 10:11:34 2016 -0700
@@ -0,0 +1,5 @@
+OTHEREMERGENCY=localized.otheremergency
+OTHERALERT=localized.otheralert
+OTHERCRITICAL=localized.othercritical
+SEVERE=localized.severe
+INFO=localized.info.2
--- a/test/javax/net/ssl/DTLS/CipherSuite.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/javax/net/ssl/DTLS/CipherSuite.java	Mon Sep 19 10:11:34 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2016, 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
@@ -30,6 +30,7 @@
  * @key intermittent
  * @summary Datagram Transport Layer Security (DTLS)
  * @modules java.base/sun.security.util
+ *          jdk.crypto.ec
  * @build DTLSOverDatagram
  * @run main/othervm CipherSuite TLS_RSA_WITH_AES_128_CBC_SHA
  * @run main/othervm CipherSuite TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
--- a/test/javax/net/ssl/DTLS/DTLSBufferOverflowUnderflowTest.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/javax/net/ssl/DTLS/DTLSBufferOverflowUnderflowTest.java	Mon Sep 19 10:11:34 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2016, 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
@@ -27,6 +27,14 @@
  * @summary Testing DTLS buffer overflow and underflow status when dealing with
  *          application data.
  * @library /sun/security/krb5/auto /javax/net/ssl/TLSCommon
+ * @modules java.security.jgss
+ *          jdk.security.auth
+ *          java.base/sun.security.util
+ *          java.security.jgss/sun.security.krb5
+ *          java.security.jgss/sun.security.krb5.internal
+ *          java.security.jgss/sun.security.krb5.internal.ccache
+ *          java.security.jgss/sun.security.krb5.internal.crypto
+ *          java.security.jgss/sun.security.krb5.internal.ktab
  * @run main/othervm -Dtest.security.protocol=DTLS
  *      -Dtest.mode=norm DTLSBufferOverflowUnderflowTest
  * @run main/othervm -Dtest.security.protocol=DTLS
--- a/test/javax/net/ssl/DTLS/DTLSDataExchangeTest.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/javax/net/ssl/DTLS/DTLSDataExchangeTest.java	Mon Sep 19 10:11:34 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2016, 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
@@ -27,6 +27,14 @@
  * @summary Testing DTLS application data exchange using each of the supported
  *          cipher suites.
  * @library /sun/security/krb5/auto /javax/net/ssl/TLSCommon
+ * @modules java.security.jgss
+ *          jdk.security.auth
+ *          java.security.jgss/sun.security.krb5
+ *          java.security.jgss/sun.security.krb5.internal.crypto
+ *          java.security.jgss/sun.security.krb5.internal.ccache
+ *          java.security.jgss/sun.security.krb5.internal
+ *          java.security.jgss/sun.security.krb5.internal.ktab
+ *          java.base/sun.security.util
  * @run main/othervm -Dtest.security.protocol=DTLS
  *      -Dtest.mode=norm DTLSDataExchangeTest
  * @run main/othervm -Dtest.security.protocol=DTLS
--- a/test/javax/net/ssl/DTLS/DTLSEnginesClosureTest.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/javax/net/ssl/DTLS/DTLSEnginesClosureTest.java	Mon Sep 19 10:11:34 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2016, 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
@@ -27,6 +27,14 @@
  * @summary Testing DTLS engines closing using each of the supported
  *          cipher suites.
  * @library /sun/security/krb5/auto /javax/net/ssl/TLSCommon
+ * @modules java.security.jgss
+ *          jdk.security.auth
+ *          java.security.jgss/sun.security.krb5
+ *          java.security.jgss/sun.security.krb5.internal.crypto
+ *          java.security.jgss/sun.security.krb5.internal.ccache
+ *          java.security.jgss/sun.security.krb5.internal
+ *          java.security.jgss/sun.security.krb5.internal.ktab
+ *          java.base/sun.security.util
  * @run main/othervm -Dtest.security.protocol=DTLS
  *      -Dtest.mode=norm DTLSEnginesClosureTest
  * @run main/othervm -Dtest.security.protocol=DTLS
--- a/test/javax/net/ssl/DTLS/DTLSHandshakeTest.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/javax/net/ssl/DTLS/DTLSHandshakeTest.java	Mon Sep 19 10:11:34 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2016, 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
@@ -27,6 +27,14 @@
  * @summary Testing DTLS engines handshake using each of the supported
  *          cipher suites.
  * @library /sun/security/krb5/auto /javax/net/ssl/TLSCommon
+ * @modules java.security.jgss
+ *          jdk.security.auth
+ *          java.security.jgss/sun.security.krb5
+ *          java.security.jgss/sun.security.krb5.internal.crypto
+ *          java.security.jgss/sun.security.krb5.internal.ccache
+ *          java.security.jgss/sun.security.krb5.internal
+ *          java.security.jgss/sun.security.krb5.internal.ktab
+ *          java.base/sun.security.util
  * @run main/othervm -Dtest.security.protocol=DTLS
  *      -Dtest.mode=norm DTLSHandshakeTest
  * @run main/othervm -Dtest.security.protocol=DTLS
--- a/test/javax/net/ssl/DTLS/DTLSHandshakeWithReplicatedPacketsTest.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/javax/net/ssl/DTLS/DTLSHandshakeWithReplicatedPacketsTest.java	Mon Sep 19 10:11:34 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2016, 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
@@ -27,6 +27,14 @@
  * @summary Testing DTLS engines handshake using each of the supported
  *          cipher suites with replicated packets check.
  * @library /sun/security/krb5/auto /javax/net/ssl/TLSCommon
+ * @modules java.security.jgss
+ *          jdk.security.auth
+ *          java.security.jgss/sun.security.krb5
+ *          java.security.jgss/sun.security.krb5.internal.crypto
+ *          java.security.jgss/sun.security.krb5.internal.ccache
+ *          java.security.jgss/sun.security.krb5.internal
+ *          java.security.jgss/sun.security.krb5.internal.ktab
+ *          java.base/sun.security.util
  * @run main/othervm -Dtest.security.protocol=DTLS
  *      -Dtest.mode=norm DTLSHandshakeWithReplicatedPacketsTest
  * @run main/othervm -Dtest.security.protocol=DTLS
--- a/test/javax/net/ssl/DTLS/DTLSIncorrectAppDataTest.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/javax/net/ssl/DTLS/DTLSIncorrectAppDataTest.java	Mon Sep 19 10:11:34 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2016, 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
@@ -27,6 +27,14 @@
  * @summary Testing DTLS incorrect app data packages unwrapping.
  * @key randomness
  * @library /sun/security/krb5/auto /lib/testlibrary /javax/net/ssl/TLSCommon
+ * @modules java.security.jgss
+ *          jdk.security.auth
+ *          java.security.jgss/sun.security.krb5
+ *          java.security.jgss/sun.security.krb5.internal.crypto
+ *          java.security.jgss/sun.security.krb5.internal.ccache
+ *          java.security.jgss/sun.security.krb5.internal
+ *          java.security.jgss/sun.security.krb5.internal.ktab
+ *          java.base/sun.security.util
  * @run main/othervm -Dtest.security.protocol=DTLS
  *      -Dtest.mode=norm DTLSIncorrectAppDataTest
  * @run main/othervm -Dtest.security.protocol=DTLS
--- a/test/javax/net/ssl/DTLS/DTLSMFLNTest.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/javax/net/ssl/DTLS/DTLSMFLNTest.java	Mon Sep 19 10:11:34 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2016, 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
@@ -28,6 +28,14 @@
  *          cipher suites with different maximum fragment length. Testing of
  *          MFLN extension.
  * @library /sun/security/krb5/auto /javax/net/ssl/TLSCommon
+ * @modules java.security.jgss
+ *          jdk.security.auth
+ *          java.security.jgss/sun.security.krb5
+ *          java.security.jgss/sun.security.krb5.internal.crypto
+ *          java.security.jgss/sun.security.krb5.internal.ccache
+ *          java.security.jgss/sun.security.krb5.internal
+ *          java.security.jgss/sun.security.krb5.internal.ktab
+ *          java.base/sun.security.util
  * @run main/othervm -Dtest.security.protocol=DTLS
  *      -Dtest.mode=norm DTLSMFLNTest
  * @run main/othervm -Dtest.security.protocol=DTLS
--- a/test/javax/net/ssl/DTLS/DTLSNotEnabledRC4Test.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/javax/net/ssl/DTLS/DTLSNotEnabledRC4Test.java	Mon Sep 19 10:11:34 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2016, 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
@@ -26,6 +26,13 @@
  * @bug 8043758
  * @summary Testing DTLS engines do not enable RC4 ciphers by default.
  * @library /sun/security/krb5/auto /javax/net/ssl/TLSCommon
+ * @modules java.security.jgss
+ *          java.security.jgss/sun.security.krb5
+ *          java.security.jgss/sun.security.krb5.internal.crypto
+ *          java.security.jgss/sun.security.krb5.internal.ccache
+ *          java.security.jgss/sun.security.krb5.internal
+ *          java.security.jgss/sun.security.krb5.internal.ktab
+ *          java.base/sun.security.util
  * @run main/othervm -Dtest.security.protocol=DTLS DTLSNotEnabledRC4Test
  */
 
--- a/test/javax/net/ssl/DTLS/DTLSRehandshakeTest.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/javax/net/ssl/DTLS/DTLSRehandshakeTest.java	Mon Sep 19 10:11:34 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2016, 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
@@ -27,6 +27,14 @@
  * @summary Testing DTLS engines re-handshaking using each of the supported
  *          cipher suites.
  * @library /sun/security/krb5/auto /javax/net/ssl/TLSCommon
+ * @modules java.security.jgss
+ *          jdk.security.auth
+ *          java.security.jgss/sun.security.krb5
+ *          java.security.jgss/sun.security.krb5.internal.crypto
+ *          java.security.jgss/sun.security.krb5.internal.ccache
+ *          java.security.jgss/sun.security.krb5.internal
+ *          java.security.jgss/sun.security.krb5.internal.ktab
+ *          java.base/sun.security.util
  * @run main/othervm -Dtest.security.protocol=DTLS
  *      -Dtest.mode=norm DTLSRehandshakeTest
  * @run main/othervm -Dtest.security.protocol=DTLS
--- a/test/javax/net/ssl/DTLS/DTLSRehandshakeWithCipherChangeTest.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/javax/net/ssl/DTLS/DTLSRehandshakeWithCipherChangeTest.java	Mon Sep 19 10:11:34 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2016, 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
@@ -28,6 +28,13 @@
  *          is taken randomly from the supporetd ciphers list.
  * @key randomness
  * @library /sun/security/krb5/auto /lib/testlibrary /javax/net/ssl/TLSCommon
+ * @modules java.security.jgss
+ *          java.security.jgss/sun.security.krb5
+ *          java.security.jgss/sun.security.krb5.internal.crypto
+ *          java.security.jgss/sun.security.krb5.internal.ccache
+ *          java.security.jgss/sun.security.krb5.internal
+ *          java.security.jgss/sun.security.krb5.internal.ktab
+ *          java.base/sun.security.util
  * @run main/othervm -Dtest.security.protocol=DTLS
  *      DTLSRehandshakeWithCipherChangeTest
  */
--- a/test/javax/net/ssl/DTLS/DTLSRehandshakeWithDataExTest.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/javax/net/ssl/DTLS/DTLSRehandshakeWithDataExTest.java	Mon Sep 19 10:11:34 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2016, 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
@@ -28,6 +28,14 @@
  *          cipher suites with application data exchange before and after
  *          re-handshake and closing of the engines.
  * @library /sun/security/krb5/auto /javax/net/ssl/TLSCommon
+ * @modules java.security.jgss
+ *          jdk.security.auth
+ *          java.security.jgss/sun.security.krb5
+ *          java.security.jgss/sun.security.krb5.internal.crypto
+ *          java.security.jgss/sun.security.krb5.internal.ccache
+ *          java.security.jgss/sun.security.krb5.internal
+ *          java.security.jgss/sun.security.krb5.internal.ktab
+ *          java.base/sun.security.util
  * @run main/othervm -Dtest.security.protocol=DTLS
  *      -Dtest.mode=norm DTLSRehandshakeWithDataExTest
  * @run main/othervm -Dtest.security.protocol=DTLS
--- a/test/javax/net/ssl/DTLS/DTLSSequenceNumberTest.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/javax/net/ssl/DTLS/DTLSSequenceNumberTest.java	Mon Sep 19 10:11:34 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2016, 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
@@ -28,6 +28,14 @@
  *          data exchange.
  * @key randomness
  * @library /sun/security/krb5/auto /lib/testlibrary /javax/net/ssl/TLSCommon
+ * @modules java.security.jgss
+ *          jdk.security.auth
+ *          java.security.jgss/sun.security.krb5
+ *          java.security.jgss/sun.security.krb5.internal.crypto
+ *          java.security.jgss/sun.security.krb5.internal.ccache
+ *          java.security.jgss/sun.security.krb5.internal
+ *          java.security.jgss/sun.security.krb5.internal.ktab
+ *          java.base/sun.security.util
  * @run main/othervm -Dtest.security.protocol=DTLS
  *      -Dtest.mode=norm DTLSSequenceNumberTest
  * @run main/othervm -Dtest.security.protocol=DTLS
--- a/test/javax/net/ssl/DTLS/DTLSUnsupportedCiphersTest.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/javax/net/ssl/DTLS/DTLSUnsupportedCiphersTest.java	Mon Sep 19 10:11:34 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2016, 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
@@ -27,6 +27,13 @@
  * @summary Testing that try to enable unsupported ciphers
  *          causes IllegalArgumentException.
  * @library /sun/security/krb5/auto /javax/net/ssl/TLSCommon
+ * @modules java.security.jgss
+ *          java.security.jgss/sun.security.krb5
+ *          java.security.jgss/sun.security.krb5.internal.crypto
+ *          java.security.jgss/sun.security.krb5.internal.ccache
+ *          java.security.jgss/sun.security.krb5.internal
+ *          java.security.jgss/sun.security.krb5.internal.ktab
+ *          java.base/sun.security.util
  * @run main/othervm -Dtest.security.protocol=DTLS DTLSUnsupportedCiphersTest
  */
 
--- a/test/javax/net/ssl/DTLSv10/DTLSv10BufferOverflowUnderflowTest.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/javax/net/ssl/DTLSv10/DTLSv10BufferOverflowUnderflowTest.java	Mon Sep 19 10:11:34 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2016, 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
@@ -27,6 +27,14 @@
  * @summary Testing DTLS buffer overflow and underflow status when dealing with
  *          application data.
  * @library /sun/security/krb5/auto /javax/net/ssl/TLSCommon
+ * @modules java.security.jgss
+ *          jdk.security.auth
+ *          java.security.jgss/sun.security.krb5
+ *          java.security.jgss/sun.security.krb5.internal.crypto
+ *          java.security.jgss/sun.security.krb5.internal.ccache
+ *          java.security.jgss/sun.security.krb5.internal
+ *          java.security.jgss/sun.security.krb5.internal.ktab
+ *          java.base/sun.security.util
  * @run main/othervm -Dtest.security.protocol=DTLSv1.0
  *      -Dtest.mode=norm DTLSv10BufferOverflowUnderflowTest
  * @run main/othervm -Dtest.security.protocol=DTLSv1.0
--- a/test/javax/net/ssl/DTLSv10/DTLSv10DataExchangeTest.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/javax/net/ssl/DTLSv10/DTLSv10DataExchangeTest.java	Mon Sep 19 10:11:34 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2016, 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
@@ -27,6 +27,14 @@
  * @summary Testing DTLS application data exchange using each of the supported
  *          cipher suites.
  * @library /sun/security/krb5/auto /javax/net/ssl/TLSCommon
+ * @modules java.security.jgss
+ *          jdk.security.auth
+ *          java.security.jgss/sun.security.krb5
+ *          java.security.jgss/sun.security.krb5.internal.crypto
+ *          java.security.jgss/sun.security.krb5.internal.ccache
+ *          java.security.jgss/sun.security.krb5.internal
+ *          java.security.jgss/sun.security.krb5.internal.ktab
+ *          java.base/sun.security.util
  * @run main/othervm -Dtest.security.protocol=DTLSv1.0
  *      -Dtest.mode=norm DTLSv10DataExchangeTest
  * @run main/othervm -Dtest.security.protocol=DTLSv1.0
--- a/test/javax/net/ssl/DTLSv10/DTLSv10EnginesClosureTest.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/javax/net/ssl/DTLSv10/DTLSv10EnginesClosureTest.java	Mon Sep 19 10:11:34 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2016, 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
@@ -27,6 +27,14 @@
  * @summary Testing DTLS engines closing using each of the supported
  *          cipher suites.
  * @library /sun/security/krb5/auto /javax/net/ssl/TLSCommon
+ * @modules java.security.jgss
+ *          jdk.security.auth
+ *          java.security.jgss/sun.security.krb5
+ *          java.security.jgss/sun.security.krb5.internal.crypto
+ *          java.security.jgss/sun.security.krb5.internal.ccache
+ *          java.security.jgss/sun.security.krb5.internal
+ *          java.security.jgss/sun.security.krb5.internal.ktab
+ *          java.base/sun.security.util
  * @run main/othervm -Dtest.security.protocol=DTLSv1.0
  *      -Dtest.mode=norm DTLSv10EnginesClosureTest
  * @run main/othervm -Dtest.security.protocol=DTLSv1.0
--- a/test/javax/net/ssl/DTLSv10/DTLSv10HandshakeTest.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/javax/net/ssl/DTLSv10/DTLSv10HandshakeTest.java	Mon Sep 19 10:11:34 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2016, 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
@@ -27,6 +27,14 @@
  * @summary Testing DTLS engines handshake using each of the supported
  *          cipher suites.
  * @library /sun/security/krb5/auto /javax/net/ssl/TLSCommon
+ * @modules java.security.jgss
+ *          jdk.security.auth
+ *          java.security.jgss/sun.security.krb5
+ *          java.security.jgss/sun.security.krb5.internal.crypto
+ *          java.security.jgss/sun.security.krb5.internal.ccache
+ *          java.security.jgss/sun.security.krb5.internal
+ *          java.security.jgss/sun.security.krb5.internal.ktab
+ *          java.base/sun.security.util
  * @run main/othervm -Dtest.security.protocol=DTLSv1.0
  *      -Dtest.mode=norm DTLSv10HandshakeTest
  * @run main/othervm -Dtest.security.protocol=DTLSv1.0
--- a/test/javax/net/ssl/DTLSv10/DTLSv10HandshakeWithReplicatedPacketsTest.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/javax/net/ssl/DTLSv10/DTLSv10HandshakeWithReplicatedPacketsTest.java	Mon Sep 19 10:11:34 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2016, 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
@@ -27,6 +27,14 @@
  * @summary Testing DTLS engines handshake using each of the supported
  *          cipher suites with replicated packets check.
  * @library /sun/security/krb5/auto /javax/net/ssl/TLSCommon /javax/net/ssl/DTLS
+ * @modules java.security.jgss
+ *          jdk.security.auth
+ *          java.security.jgss/sun.security.krb5
+ *          java.security.jgss/sun.security.krb5.internal.crypto
+ *          java.security.jgss/sun.security.krb5.internal.ccache
+ *          java.security.jgss/sun.security.krb5.internal
+ *          java.security.jgss/sun.security.krb5.internal.ktab
+ *          java.base/sun.security.util
  * @run main/othervm -Dtest.security.protocol=DTLSv1.0
  *      -Dtest.mode=norm DTLSv10HandshakeWithReplicatedPacketsTest
  * @run main/othervm -Dtest.security.protocol=DTLSv1.0
--- a/test/javax/net/ssl/DTLSv10/DTLSv10IncorrectAppDataTest.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/javax/net/ssl/DTLSv10/DTLSv10IncorrectAppDataTest.java	Mon Sep 19 10:11:34 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2016, 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
@@ -27,6 +27,14 @@
  * @summary Testing DTLS incorrect app data packages unwrapping.
  * @key randomness
  * @library /sun/security/krb5/auto /lib/testlibrary /javax/net/ssl/TLSCommon /javax/net/ssl/DTLS
+ * @modules java.security.jgss
+ *          jdk.security.auth
+ *          java.security.jgss/sun.security.krb5
+ *          java.security.jgss/sun.security.krb5.internal.crypto
+ *          java.security.jgss/sun.security.krb5.internal.ccache
+ *          java.security.jgss/sun.security.krb5.internal
+ *          java.security.jgss/sun.security.krb5.internal.ktab
+ *          java.base/sun.security.util
  * @run main/othervm -Dtest.security.protocol=DTLSv1.0
  *      -Dtest.mode=norm DTLSIncorrectAppDataTest
  * @run main/othervm -Dtest.security.protocol=DTLSv1.0
--- a/test/javax/net/ssl/DTLSv10/DTLSv10MFLNTest.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/javax/net/ssl/DTLSv10/DTLSv10MFLNTest.java	Mon Sep 19 10:11:34 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2016, 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
@@ -28,6 +28,14 @@
  *          cipher suites with different maximum fragment length. Testing of
  *          MFLN extension.
  * @library /sun/security/krb5/auto /javax/net/ssl/TLSCommon
+ * @modules java.security.jgss
+ *          jdk.security.auth
+ *          java.security.jgss/sun.security.krb5
+ *          java.security.jgss/sun.security.krb5.internal.crypto
+ *          java.security.jgss/sun.security.krb5.internal.ccache
+ *          java.security.jgss/sun.security.krb5.internal
+ *          java.security.jgss/sun.security.krb5.internal.ktab
+ *          java.base/sun.security.util
  * @run main/othervm -Dtest.security.protocol=DTLSv1.0
  *      -Dtest.mode=norm DTLSv10MFLNTest
  * @run main/othervm -Dtest.security.protocol=DTLSv1.0
--- a/test/javax/net/ssl/DTLSv10/DTLSv10NotEnabledRC4Test.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/javax/net/ssl/DTLSv10/DTLSv10NotEnabledRC4Test.java	Mon Sep 19 10:11:34 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2016, 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
@@ -26,6 +26,13 @@
  * @bug 8043758
  * @summary Testing DTLS engines do not enable RC4 ciphers by default.
  * @library /sun/security/krb5/auto /javax/net/ssl/TLSCommon
+ * @modules java.security.jgss
+ *          java.security.jgss/sun.security.krb5
+ *          java.security.jgss/sun.security.krb5.internal.crypto
+ *          java.security.jgss/sun.security.krb5.internal.ccache
+ *          java.security.jgss/sun.security.krb5.internal
+ *          java.security.jgss/sun.security.krb5.internal.ktab
+ *          java.base/sun.security.util
  * @run main/othervm -Dtest.security.protocol=DTLSv1.0 DTLSv10NotEnabledRC4Test
  */
 
--- a/test/javax/net/ssl/DTLSv10/DTLSv10RehandshakeTest.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/javax/net/ssl/DTLSv10/DTLSv10RehandshakeTest.java	Mon Sep 19 10:11:34 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2016, 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
@@ -27,6 +27,14 @@
  * @summary Testing DTLS engines re-handshaking using each of the supported
  *          cipher suites.
  * @library /sun/security/krb5/auto /javax/net/ssl/TLSCommon
+ * @modules java.security.jgss
+ *          jdk.security.auth
+ *          java.security.jgss/sun.security.krb5
+ *          java.security.jgss/sun.security.krb5.internal.crypto
+ *          java.security.jgss/sun.security.krb5.internal.ccache
+ *          java.security.jgss/sun.security.krb5.internal
+ *          java.security.jgss/sun.security.krb5.internal.ktab
+ *          java.base/sun.security.util
  * @run main/othervm -Dtest.security.protocol=DTLSv1.0
  *      -Dtest.mode=norm DTLSv10RehandshakeTest
  * @run main/othervm -Dtest.security.protocol=DTLSv1.0
--- a/test/javax/net/ssl/DTLSv10/DTLSv10RehandshakeWithCipherChangeTest.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/javax/net/ssl/DTLSv10/DTLSv10RehandshakeWithCipherChangeTest.java	Mon Sep 19 10:11:34 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2016, 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
@@ -28,6 +28,13 @@
  *          is taken randomly from the supporetd ciphers list.
  * @key randomness
  * @library /sun/security/krb5/auto /lib/testlibrary /javax/net/ssl/TLSCommon
+ * @modules java.security.jgss
+ *          java.security.jgss/sun.security.krb5
+ *          java.security.jgss/sun.security.krb5.internal.crypto
+ *          java.security.jgss/sun.security.krb5.internal.ccache
+ *          java.security.jgss/sun.security.krb5.internal
+ *          java.security.jgss/sun.security.krb5.internal.ktab
+ *          java.base/sun.security.util
  * @run main/othervm -Dtest.security.protocol=DTLSv1.0
  *      DTLSv10RehandshakeWithCipherChangeTest
  */
--- a/test/javax/net/ssl/DTLSv10/DTLSv10RehandshakeWithDataExTest.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/javax/net/ssl/DTLSv10/DTLSv10RehandshakeWithDataExTest.java	Mon Sep 19 10:11:34 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2016, 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
@@ -28,6 +28,14 @@
  *          cipher suites with application data exchange before and after
  *          re-handshake and closing of the engines.
  * @library /sun/security/krb5/auto /javax/net/ssl/TLSCommon
+ * @modules java.security.jgss
+ *          jdk.security.auth
+ *          java.security.jgss/sun.security.krb5
+ *          java.security.jgss/sun.security.krb5.internal.crypto
+ *          java.security.jgss/sun.security.krb5.internal.ccache
+ *          java.security.jgss/sun.security.krb5.internal
+ *          java.security.jgss/sun.security.krb5.internal.ktab
+ *          java.base/sun.security.util
  * @run main/othervm -Dtest.security.protocol=DTLSv1.0
  *      -Dtest.mode=norm DTLSv10RehandshakeWithDataExTest
  * @run main/othervm -Dtest.security.protocol=DTLSv1.0
--- a/test/javax/net/ssl/DTLSv10/DTLSv10SequenceNumberTest.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/javax/net/ssl/DTLSv10/DTLSv10SequenceNumberTest.java	Mon Sep 19 10:11:34 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2016, 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
@@ -28,6 +28,14 @@
  *          data exchange.
  * @key randomness
  * @library /sun/security/krb5/auto /lib/testlibrary /javax/net/ssl/TLSCommon /javax/net/ssl/DTLS
+ * @modules java.security.jgss
+ *          jdk.security.auth
+ *          java.security.jgss/sun.security.krb5
+ *          java.security.jgss/sun.security.krb5.internal.crypto
+ *          java.security.jgss/sun.security.krb5.internal.ccache
+ *          java.security.jgss/sun.security.krb5.internal
+ *          java.security.jgss/sun.security.krb5.internal.ktab
+ *          java.base/sun.security.util
  * @run main/othervm -Dtest.security.protocol=DTLSv1.0
  *      -Dtest.mode=norm DTLSv10SequenceNumberTest
  * @run main/othervm -Dtest.security.protocol=DTLSv1.0
--- a/test/javax/net/ssl/DTLSv10/DTLSv10UnsupportedCiphersTest.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/javax/net/ssl/DTLSv10/DTLSv10UnsupportedCiphersTest.java	Mon Sep 19 10:11:34 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2016, 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
@@ -27,6 +27,13 @@
  * @summary Testing that try to enable unsupported ciphers
  *          causes IllegalArgumentException.
  * @library /sun/security/krb5/auto /javax/net/ssl/TLSCommon
+ * @modules java.security.jgss
+ *          java.security.jgss/sun.security.krb5
+ *          java.security.jgss/sun.security.krb5.internal.crypto
+ *          java.security.jgss/sun.security.krb5.internal.ccache
+ *          java.security.jgss/sun.security.krb5.internal
+ *          java.security.jgss/sun.security.krb5.internal.ktab
+ *          java.base/sun.security.util
  * @run main/othervm -Dtest.security.protocol=DTLSv1.0
  *      DTLSv10UnsupportedCiphersTest
  */
--- a/test/javax/net/ssl/TLS/TLSClientPropertyTest.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/javax/net/ssl/TLS/TLSClientPropertyTest.java	Mon Sep 19 10:11:34 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2016, 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
@@ -21,18 +21,19 @@
  * questions.
  */
 
-import java.security.KeyManagementException;
-import java.security.NoSuchAlgorithmException;
-import java.util.Arrays;
-import java.util.List;
-import javax.net.ssl.SSLContext;
-
 /*
  * @test
  * @bug 8049432 8069038
  * @summary New tests for TLS property jdk.tls.client.protocols
  * @summary javax/net/ssl/TLS/TLSClientPropertyTest.java needs to be
  *     updated for JDK-8061210
+ * @modules java.security.jgss
+ *          java.security.jgss/sun.security.krb5.internal.crypto
+ *          java.security.jgss/sun.security.krb5.internal.ktab
+ *          java.security.jgss/sun.security.krb5
+ *          java.security.jgss/sun.security.krb5.internal.ccache
+ *          java.security.jgss/sun.security.krb5.internal
+ *          java.base/sun.security.util
  * @run main/othervm TLSClientPropertyTest NoProperty
  * @run main/othervm TLSClientPropertyTest SSLv3
  * @run main/othervm TLSClientPropertyTest TLSv1
@@ -41,6 +42,12 @@
  * @run main/othervm TLSClientPropertyTest WrongProperty
  */
 
+import java.security.KeyManagementException;
+import java.security.NoSuchAlgorithmException;
+import java.util.Arrays;
+import java.util.List;
+import javax.net.ssl.SSLContext;
+
 /**
  * Sets the property jdk.tls.client.protocols to one of this protocols:
  * SSLv3,TLSv1,TLSv1.1,TLSv1.2 and TLSV(invalid) or removes this
--- a/test/javax/net/ssl/TLS/TLSDataExchangeTest.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/javax/net/ssl/TLS/TLSDataExchangeTest.java	Mon Sep 19 10:11:34 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2016, 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
@@ -27,6 +27,14 @@
  * @summary Testing TLS application data exchange using each of the supported
  *          cipher suites.
  * @library /sun/security/krb5/auto /javax/net/ssl/TLSCommon
+ * @modules java.security.jgss
+ *          jdk.security.auth
+ *          java.security.jgss/sun.security.krb5.internal.crypto
+ *          java.security.jgss/sun.security.krb5.internal.ktab
+ *          java.security.jgss/sun.security.krb5
+ *          java.security.jgss/sun.security.krb5.internal.ccache
+ *          java.security.jgss/sun.security.krb5.internal
+ *          java.base/sun.security.util
  * @run main/othervm -Dtest.security.protocol=TLS -Dtest.mode=norm TLSDataExchangeTest
  * @run main/othervm -Dtest.security.protocol=TLS -Dtest.mode=norm_sni TLSDataExchangeTest
  * @run main/othervm -Dtest.security.protocol=TLS -Dtest.mode=krb TLSDataExchangeTest
--- a/test/javax/net/ssl/TLS/TLSEnginesClosureTest.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/javax/net/ssl/TLS/TLSEnginesClosureTest.java	Mon Sep 19 10:11:34 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2016, 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
@@ -27,6 +27,14 @@
  * @summary Testing TLS engines closing using each of the supported
  *          cipher suites.
  * @library /sun/security/krb5/auto /javax/net/ssl/TLSCommon
+ * @modules java.security.jgss
+ *          jdk.security.auth
+ *          java.security.jgss/sun.security.krb5.internal.crypto
+ *          java.security.jgss/sun.security.krb5.internal.ktab
+ *          java.security.jgss/sun.security.krb5
+ *          java.security.jgss/sun.security.krb5.internal.ccache
+ *          java.security.jgss/sun.security.krb5.internal
+ *          java.base/sun.security.util
  * @run main/othervm -Dtest.security.protocol=TLS -Dtest.mode=norm TLSEnginesClosureTest
  * @run main/othervm -Dtest.security.protocol=TLS -Dtest.mode=norm_sni TLSEnginesClosureTest
  * @run main/othervm -Dtest.security.protocol=TLS -Dtest.mode=krb TLSEnginesClosureTest
--- a/test/javax/net/ssl/TLS/TLSHandshakeTest.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/javax/net/ssl/TLS/TLSHandshakeTest.java	Mon Sep 19 10:11:34 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2016, 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
@@ -27,6 +27,14 @@
  * @summary Testing TLS engines handshake using each of the supported
  *          cipher suites.
  * @library /sun/security/krb5/auto /javax/net/ssl/TLSCommon
+ * @modules java.security.jgss
+ *          jdk.security.auth
+ *          java.security.jgss/sun.security.krb5.internal.crypto
+ *          java.security.jgss/sun.security.krb5.internal.ktab
+ *          java.security.jgss/sun.security.krb5
+ *          java.security.jgss/sun.security.krb5.internal.ccache
+ *          java.security.jgss/sun.security.krb5.internal
+ *          java.base/sun.security.util
  * @run main/othervm -Dtest.security.protocol=TLS -Dtest.mode=norm TLSHandshakeTest
  * @run main/othervm -Dtest.security.protocol=TLS -Dtest.mode=norm_sni TLSHandshakeTest
  * @run main/othervm -Dtest.security.protocol=TLS -Dtest.mode=krb TLSHandshakeTest
--- a/test/javax/net/ssl/TLS/TLSMFLNTest.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/javax/net/ssl/TLS/TLSMFLNTest.java	Mon Sep 19 10:11:34 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2016, 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
@@ -28,6 +28,14 @@
  *          cipher suites with different maximum fragment length. Testing of
  *          MFLN extension.
  * @library /sun/security/krb5/auto /javax/net/ssl/TLSCommon
+ * @modules java.security.jgss
+ *          jdk.security.auth
+ *          java.security.jgss/sun.security.krb5.internal.crypto
+ *          java.security.jgss/sun.security.krb5.internal.ktab
+ *          java.security.jgss/sun.security.krb5
+ *          java.security.jgss/sun.security.krb5.internal.ccache
+ *          java.security.jgss/sun.security.krb5.internal
+ *          java.base/sun.security.util
  * @run main/othervm -Dtest.security.protocol=TLS -Dtest.mode=norm TLSMFLNTest
  * @run main/othervm -Dtest.security.protocol=TLS -Dtest.mode=norm_sni TLSMFLNTest
  * @run main/othervm -Dtest.security.protocol=TLS -Dtest.mode=krb TLSMFLNTest
--- a/test/javax/net/ssl/TLS/TLSNotEnabledRC4Test.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/javax/net/ssl/TLS/TLSNotEnabledRC4Test.java	Mon Sep 19 10:11:34 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2016, 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
@@ -26,6 +26,13 @@
  * @bug 8085979
  * @summary Testing TLS engines do not enable RC4 ciphers by default.
  * @library /sun/security/krb5/auto /javax/net/ssl/TLSCommon
+ * @modules java.security.jgss
+ *          java.security.jgss/sun.security.krb5.internal.crypto
+ *          java.security.jgss/sun.security.krb5.internal.ktab
+ *          java.security.jgss/sun.security.krb5
+ *          java.security.jgss/sun.security.krb5.internal.ccache
+ *          java.security.jgss/sun.security.krb5.internal
+ *          java.base/sun.security.util
  * @run main/othervm -Dtest.security.protocol=TLS TLSNotEnabledRC4Test
  */
 
--- a/test/javax/net/ssl/TLS/TLSRehandshakeTest.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/javax/net/ssl/TLS/TLSRehandshakeTest.java	Mon Sep 19 10:11:34 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2016, 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
@@ -27,6 +27,14 @@
  * @summary Testing TLS engines re-handshaking using each of the supported
  *          cipher suites.
  * @library /sun/security/krb5/auto /javax/net/ssl/TLSCommon
+ * @modules java.security.jgss
+ *          jdk.security.auth
+ *          java.security.jgss/sun.security.krb5.internal.crypto
+ *          java.security.jgss/sun.security.krb5.internal.ktab
+ *          java.security.jgss/sun.security.krb5
+ *          java.security.jgss/sun.security.krb5.internal.ccache
+ *          java.security.jgss/sun.security.krb5.internal
+ *          java.base/sun.security.util
  * @run main/othervm -Dtest.security.protocol=TLS -Dtest.mode=norm TLSRehandshakeTest
  * @run main/othervm -Dtest.security.protocol=TLS -Dtest.mode=norm_sni TLSRehandshakeTest
  * @run main/othervm -Dtest.security.protocol=TLS -Dtest.mode=krb TLSRehandshakeTest
--- a/test/javax/net/ssl/TLS/TLSRehandshakeWithCipherChangeTest.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/javax/net/ssl/TLS/TLSRehandshakeWithCipherChangeTest.java	Mon Sep 19 10:11:34 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2016, 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
@@ -28,6 +28,13 @@
  *          is taken randomly from the supporetd ciphers list.
  * @key randomness
  * @library /sun/security/krb5/auto /lib/testlibrary /javax/net/ssl/TLSCommon
+ * @modules java.security.jgss
+ *          java.security.jgss/sun.security.krb5.internal.crypto
+ *          java.security.jgss/sun.security.krb5.internal.ktab
+ *          java.security.jgss/sun.security.krb5
+ *          java.security.jgss/sun.security.krb5.internal.ccache
+ *          java.security.jgss/sun.security.krb5.internal
+ *          java.base/sun.security.util
  * @run main/othervm -Dtest.security.protocol=TLS TLSRehandshakeWithCipherChangeTest
  */
 
--- a/test/javax/net/ssl/TLS/TLSRehandshakeWithDataExTest.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/javax/net/ssl/TLS/TLSRehandshakeWithDataExTest.java	Mon Sep 19 10:11:34 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2016, 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
@@ -28,6 +28,14 @@
  *          cipher suites with application data exchange before and after
  *          re-handshake and closing of the engines.
  * @library /sun/security/krb5/auto /javax/net/ssl/TLSCommon
+ * @modules java.security.jgss
+ *          jdk.security.auth
+ *          java.security.jgss/sun.security.krb5.internal.crypto
+ *          java.security.jgss/sun.security.krb5.internal.ktab
+ *          java.security.jgss/sun.security.krb5
+ *          java.security.jgss/sun.security.krb5.internal.ccache
+ *          java.security.jgss/sun.security.krb5.internal
+ *          java.base/sun.security.util
  * @run main/othervm -Dtest.security.protocol=TLS -Dtest.mode=norm TLSRehandshakeWithDataExTest
  * @run main/othervm -Dtest.security.protocol=TLS -Dtest.mode=norm_sni TLSRehandshakeWithDataExTest
  * @run main/othervm -Dtest.security.protocol=TLS -Dtest.mode=krb TLSRehandshakeWithDataExTest
--- a/test/javax/net/ssl/TLS/TLSUnsupportedCiphersTest.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/javax/net/ssl/TLS/TLSUnsupportedCiphersTest.java	Mon Sep 19 10:11:34 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2016, 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
@@ -27,6 +27,13 @@
  * @summary Testing that try to enable unsupported ciphers
  *          causes IllegalArgumentException.
  * @library /sun/security/krb5/auto /javax/net/ssl/TLSCommon
+ * @modules java.security.jgss
+ *          java.security.jgss/sun.security.krb5.internal.crypto
+ *          java.security.jgss/sun.security.krb5.internal.ktab
+ *          java.security.jgss/sun.security.krb5
+ *          java.security.jgss/sun.security.krb5.internal.ccache
+ *          java.security.jgss/sun.security.krb5.internal
+ *          java.base/sun.security.util
  * @run main/othervm -Dtest.security.protocol=TLS TLSUnsupportedCiphersTest
  */
 
--- a/test/javax/net/ssl/TLSv1/TLSDataExchangeTest.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/javax/net/ssl/TLSv1/TLSDataExchangeTest.java	Mon Sep 19 10:11:34 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2016, 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
@@ -27,6 +27,14 @@
  * @summary Testing TLS application data exchange using each of the supported
  *          cipher suites.
  * @library /sun/security/krb5/auto /javax/net/ssl/TLSCommon
+ * @modules java.security.jgss
+ *          jdk.security.auth
+ *          java.security.jgss/sun.security.krb5
+ *          java.security.jgss/sun.security.krb5.internal.crypto
+ *          java.security.jgss/sun.security.krb5.internal.ccache
+ *          java.security.jgss/sun.security.krb5.internal
+ *          java.security.jgss/sun.security.krb5.internal.ktab
+ *          java.base/sun.security.util
  * @run main/othervm -Dtest.security.protocol=TLSv1 -Dtest.mode=norm TLSDataExchangeTest
  * @run main/othervm -Dtest.security.protocol=TLSv1 -Dtest.mode=norm_sni TLSDataExchangeTest
  * @run main/othervm -Dtest.security.protocol=TLSv1 -Dtest.mode=krb TLSDataExchangeTest
--- a/test/javax/net/ssl/TLSv1/TLSEnginesClosureTest.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/javax/net/ssl/TLSv1/TLSEnginesClosureTest.java	Mon Sep 19 10:11:34 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2016, 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
@@ -27,6 +27,14 @@
  * @summary Testing TLS engines closing using each of the supported
  *          cipher suites.
  * @library /sun/security/krb5/auto /javax/net/ssl/TLSCommon
+ * @modules java.security.jgss
+ *          jdk.security.auth
+ *          java.security.jgss/sun.security.krb5
+ *          java.security.jgss/sun.security.krb5.internal.crypto
+ *          java.security.jgss/sun.security.krb5.internal.ccache
+ *          java.security.jgss/sun.security.krb5.internal
+ *          java.security.jgss/sun.security.krb5.internal.ktab
+ *          java.base/sun.security.util
  * @run main/othervm -Dtest.security.protocol=TLSv1 -Dtest.mode=norm TLSEnginesClosureTest
  * @run main/othervm -Dtest.security.protocol=TLSv1 -Dtest.mode=norm_sni TLSEnginesClosureTest
  * @run main/othervm -Dtest.security.protocol=TLSv1 -Dtest.mode=krb TLSEnginesClosureTest
--- a/test/javax/net/ssl/TLSv1/TLSHandshakeTest.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/javax/net/ssl/TLSv1/TLSHandshakeTest.java	Mon Sep 19 10:11:34 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2016, 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
@@ -27,6 +27,14 @@
  * @summary Testing TLS engines handshake using each of the supported
  *          cipher suites.
  * @library /sun/security/krb5/auto /javax/net/ssl/TLSCommon
+ * @modules java.security.jgss
+ *          jdk.security.auth
+ *          java.security.jgss/sun.security.krb5
+ *          java.security.jgss/sun.security.krb5.internal.crypto
+ *          java.security.jgss/sun.security.krb5.internal.ccache
+ *          java.security.jgss/sun.security.krb5.internal
+ *          java.security.jgss/sun.security.krb5.internal.ktab
+ *          java.base/sun.security.util
  * @run main/othervm -Dtest.security.protocol=TLSv1 -Dtest.mode=norm TLSHandshakeTest
  * @run main/othervm -Dtest.security.protocol=TLSv1 -Dtest.mode=norm_sni TLSHandshakeTest
  * @run main/othervm -Dtest.security.protocol=TLSv1 -Dtest.mode=krb TLSHandshakeTest
--- a/test/javax/net/ssl/TLSv1/TLSMFLNTest.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/javax/net/ssl/TLSv1/TLSMFLNTest.java	Mon Sep 19 10:11:34 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2016, 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
@@ -28,6 +28,14 @@
  *          cipher suites with different maximum fragment length. Testing of
  *          MFLN extension.
  * @library /sun/security/krb5/auto /javax/net/ssl/TLSCommon
+ * @modules java.security.jgss
+ *          jdk.security.auth
+ *          java.security.jgss/sun.security.krb5
+ *          java.security.jgss/sun.security.krb5.internal.crypto
+ *          java.security.jgss/sun.security.krb5.internal.ccache
+ *          java.security.jgss/sun.security.krb5.internal
+ *          java.security.jgss/sun.security.krb5.internal.ktab
+ *          java.base/sun.security.util
  * @run main/othervm -Dtest.security.protocol=TLSv1 -Dtest.mode=norm TLSMFLNTest
  * @run main/othervm -Dtest.security.protocol=TLSv1 -Dtest.mode=norm_sni TLSMFLNTest
  * @run main/othervm -Dtest.security.protocol=TLSv1 -Dtest.mode=krb TLSMFLNTest
--- a/test/javax/net/ssl/TLSv1/TLSNotEnabledRC4Test.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/javax/net/ssl/TLSv1/TLSNotEnabledRC4Test.java	Mon Sep 19 10:11:34 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2016, 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
@@ -26,6 +26,13 @@
  * @bug 8085979
  * @summary Testing TLS engines do not enable RC4 ciphers by default.
  * @library /sun/security/krb5/auto /javax/net/ssl/TLSCommon
+ * @modules java.security.jgss
+ *          java.security.jgss/sun.security.krb5
+ *          java.security.jgss/sun.security.krb5.internal.crypto
+ *          java.security.jgss/sun.security.krb5.internal.ccache
+ *          java.security.jgss/sun.security.krb5.internal
+ *          java.security.jgss/sun.security.krb5.internal.ktab
+ *          java.base/sun.security.util
  * @run main/othervm -Dtest.security.protocol=TLSv1 TLSNotEnabledRC4Test
  */
 
--- a/test/javax/net/ssl/TLSv1/TLSRehandshakeTest.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/javax/net/ssl/TLSv1/TLSRehandshakeTest.java	Mon Sep 19 10:11:34 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2016, 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
@@ -27,6 +27,14 @@
  * @summary Testing TLS engines re-handshaking using each of the supported
  *          cipher suites.
  * @library /sun/security/krb5/auto /javax/net/ssl/TLSCommon
+ * @modules java.security.jgss
+ *          jdk.security.auth
+ *          java.security.jgss/sun.security.krb5
+ *          java.security.jgss/sun.security.krb5.internal.crypto
+ *          java.security.jgss/sun.security.krb5.internal.ccache
+ *          java.security.jgss/sun.security.krb5.internal
+ *          java.security.jgss/sun.security.krb5.internal.ktab
+ *          java.base/sun.security.util
  * @run main/othervm -Dtest.security.protocol=TLSv1 -Dtest.mode=norm TLSRehandshakeTest
  * @run main/othervm -Dtest.security.protocol=TLSv1 -Dtest.mode=norm_sni TLSRehandshakeTest
  * @run main/othervm -Dtest.security.protocol=TLSv1 -Dtest.mode=krb TLSRehandshakeTest
--- a/test/javax/net/ssl/TLSv1/TLSRehandshakeWithCipherChangeTest.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/javax/net/ssl/TLSv1/TLSRehandshakeWithCipherChangeTest.java	Mon Sep 19 10:11:34 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2016, 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
@@ -28,6 +28,13 @@
  *          is taken randomly from the supporetd ciphers list.
  * @key randomness
  * @library /sun/security/krb5/auto /lib/testlibrary /javax/net/ssl/TLSCommon
+ * @modules java.security.jgss
+ *          java.security.jgss/sun.security.krb5
+ *          java.security.jgss/sun.security.krb5.internal.crypto
+ *          java.security.jgss/sun.security.krb5.internal.ccache
+ *          java.security.jgss/sun.security.krb5.internal
+ *          java.security.jgss/sun.security.krb5.internal.ktab
+ *          java.base/sun.security.util
  * @run main/othervm -Dtest.security.protocol=TLSv1 TLSRehandshakeWithCipherChangeTest
  */
 
--- a/test/javax/net/ssl/TLSv1/TLSRehandshakeWithDataExTest.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/javax/net/ssl/TLSv1/TLSRehandshakeWithDataExTest.java	Mon Sep 19 10:11:34 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2016, 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
@@ -28,6 +28,14 @@
  *          cipher suites with application data exchange before and after
  *          re-handshake and closing of the engines.
  * @library /sun/security/krb5/auto /javax/net/ssl/TLSCommon
+ * @modules java.security.jgss
+ *          jdk.security.auth
+ *          java.security.jgss/sun.security.krb5
+ *          java.security.jgss/sun.security.krb5.internal.crypto
+ *          java.security.jgss/sun.security.krb5.internal.ccache
+ *          java.security.jgss/sun.security.krb5.internal
+ *          java.security.jgss/sun.security.krb5.internal.ktab
+ *          java.base/sun.security.util
  * @run main/othervm -Dtest.security.protocol=TLSv1 -Dtest.mode=norm TLSRehandshakeWithDataExTest
  * @run main/othervm -Dtest.security.protocol=TLSv1 -Dtest.mode=norm_sni TLSRehandshakeWithDataExTest
  * @run main/othervm -Dtest.security.protocol=TLSv1 -Dtest.mode=krb TLSRehandshakeWithDataExTest
--- a/test/javax/net/ssl/TLSv1/TLSUnsupportedCiphersTest.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/javax/net/ssl/TLSv1/TLSUnsupportedCiphersTest.java	Mon Sep 19 10:11:34 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2016, 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
@@ -27,6 +27,13 @@
  * @summary Testing that try to enable unsupported ciphers
  *          causes IllegalArgumentException.
  * @library /sun/security/krb5/auto /javax/net/ssl/TLSCommon
+ * @modules java.security.jgss
+ *          java.security.jgss/sun.security.krb5
+ *          java.security.jgss/sun.security.krb5.internal.crypto
+ *          java.security.jgss/sun.security.krb5.internal.ccache
+ *          java.security.jgss/sun.security.krb5.internal
+ *          java.security.jgss/sun.security.krb5.internal.ktab
+ *          java.base/sun.security.util
  * @run main/othervm -Dtest.security.protocol=TLSv1 TLSUnsupportedCiphersTest
  */
 
--- a/test/javax/net/ssl/TLSv11/EmptyCertificateAuthorities.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/javax/net/ssl/TLSv11/EmptyCertificateAuthorities.java	Mon Sep 19 10:11:34 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2016, 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
@@ -33,14 +33,33 @@
  * @bug 4873188
  * @summary Support TLS 1.1
  * @run main/othervm EmptyCertificateAuthorities
+ * @modules java.security.jgss
+ *          java.security.jgss/sun.security.krb5
+ *          java.security.jgss/sun.security.krb5.internal.crypto
+ *          java.security.jgss/sun.security.krb5.internal.ccache
+ *          java.security.jgss/sun.security.krb5.internal
+ *          java.security.jgss/sun.security.krb5.internal.ktab
+ *          java.base/sun.security.util
  * @author Xuelei Fan
  */
 
-import java.io.*;
-import java.net.*;
-import java.security.*;
-import java.security.cert.*;
-import javax.net.ssl.*;
+import java.io.FileInputStream;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.security.KeyStore;
+import java.security.Security;
+import java.security.cert.CertificateException;
+import java.security.cert.X509Certificate;
+import javax.net.ssl.KeyManager;
+import javax.net.ssl.KeyManagerFactory;
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.SSLServerSocket;
+import javax.net.ssl.SSLServerSocketFactory;
+import javax.net.ssl.SSLSocket;
+import javax.net.ssl.SSLSocketFactory;
+import javax.net.ssl.TrustManager;
+import javax.net.ssl.TrustManagerFactory;
+import javax.net.ssl.X509TrustManager;
 
 public class EmptyCertificateAuthorities {
 
--- a/test/javax/net/ssl/TLSv11/ExportableBlockCipher.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/javax/net/ssl/TLSv11/ExportableBlockCipher.java	Mon Sep 19 10:11:34 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2016, 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
@@ -33,12 +33,25 @@
  * @bug 4873188
  * @summary Support TLS 1.1
  * @run main/othervm ExportableBlockCipher
+ * @modules java.security.jgss
+ *          java.security.jgss/sun.security.krb5
+ *          java.security.jgss/sun.security.krb5.internal.crypto
+ *          java.security.jgss/sun.security.krb5.internal.ccache
+ *          java.security.jgss/sun.security.krb5.internal
+ *          java.security.jgss/sun.security.krb5.internal.ktab
+ *          java.base/sun.security.util
  * @author Xuelei Fan
  */
 
-import java.io.*;
-import java.net.*;
-import javax.net.ssl.*;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import javax.net.ssl.SSLException;
+import javax.net.ssl.SSLHandshakeException;
+import javax.net.ssl.SSLServerSocket;
+import javax.net.ssl.SSLServerSocketFactory;
+import javax.net.ssl.SSLSocket;
+import javax.net.ssl.SSLSocketFactory;
 
 public class ExportableBlockCipher {
 
--- a/test/javax/net/ssl/TLSv11/ExportableStreamCipher.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/javax/net/ssl/TLSv11/ExportableStreamCipher.java	Mon Sep 19 10:11:34 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2016, 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
@@ -32,13 +32,26 @@
  * @test
  * @bug 4873188
  * @summary Support TLS 1.1
+ * @modules java.security.jgss
+ *          java.security.jgss/sun.security.krb5
+ *          java.security.jgss/sun.security.krb5.internal.crypto
+ *          java.security.jgss/sun.security.krb5.internal.ccache
+ *          java.security.jgss/sun.security.krb5.internal
+ *          java.security.jgss/sun.security.krb5.internal.ktab
+ *          java.base/sun.security.util
  * @run main/othervm ExportableStreamCipher
  * @author Xuelei Fan
  */
 
-import java.io.*;
-import java.net.*;
-import javax.net.ssl.*;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import javax.net.ssl.SSLException;
+import javax.net.ssl.SSLHandshakeException;
+import javax.net.ssl.SSLServerSocket;
+import javax.net.ssl.SSLServerSocketFactory;
+import javax.net.ssl.SSLSocket;
+import javax.net.ssl.SSLSocketFactory;
 
 public class ExportableStreamCipher {
 
--- a/test/javax/net/ssl/TLSv11/GenericBlockCipher.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/javax/net/ssl/TLSv11/GenericBlockCipher.java	Mon Sep 19 10:11:34 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2016, 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
@@ -27,6 +27,13 @@
  * @test
  * @bug 4873188
  * @summary Support TLS 1.1
+ * @modules java.security.jgss
+ *          java.security.jgss/sun.security.krb5
+ *          java.security.jgss/sun.security.krb5.internal.crypto
+ *          java.security.jgss/sun.security.krb5.internal.ccache
+ *          java.security.jgss/sun.security.krb5.internal
+ *          java.security.jgss/sun.security.krb5.internal.ktab
+ *          java.base/sun.security.util
  * @run main/othervm GenericBlockCipher
  *
  *     SunJSSE does not support dynamic system properties, no way to re-use
@@ -35,9 +42,12 @@
  * @author Xuelei Fan
  */
 
-import java.io.*;
-import java.net.*;
-import javax.net.ssl.*;
+import java.io.InputStream;
+import java.io.OutputStream;
+import javax.net.ssl.SSLServerSocket;
+import javax.net.ssl.SSLServerSocketFactory;
+import javax.net.ssl.SSLSocket;
+import javax.net.ssl.SSLSocketFactory;
 
 public class GenericBlockCipher {
 
--- a/test/javax/net/ssl/TLSv11/GenericStreamCipher.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/javax/net/ssl/TLSv11/GenericStreamCipher.java	Mon Sep 19 10:11:34 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2016, 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
@@ -27,6 +27,13 @@
  * @test
  * @bug 4873188
  * @summary Support TLS 1.1
+ * @modules java.security.jgss
+ *          java.security.jgss/sun.security.krb5
+ *          java.security.jgss/sun.security.krb5.internal.crypto
+ *          java.security.jgss/sun.security.krb5.internal.ccache
+ *          java.security.jgss/sun.security.krb5.internal
+ *          java.security.jgss/sun.security.krb5.internal.ktab
+ *          java.base/sun.security.util
  * @run main/othervm GenericStreamCipher
  *
  *     SunJSSE does not support dynamic system properties, no way to re-use
@@ -35,9 +42,13 @@
  * @author Xuelei Fan
  */
 
-import java.io.*;
+import java.io.InputStream;
+import java.io.OutputStream;
 import java.security.Security;
-import javax.net.ssl.*;
+import javax.net.ssl.SSLServerSocket;
+import javax.net.ssl.SSLServerSocketFactory;
+import javax.net.ssl.SSLSocket;
+import javax.net.ssl.SSLSocketFactory;
 
 public class GenericStreamCipher {
 
--- a/test/javax/net/ssl/TLSv11/TLSDataExchangeTest.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/javax/net/ssl/TLSv11/TLSDataExchangeTest.java	Mon Sep 19 10:11:34 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2016, 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
@@ -27,6 +27,14 @@
  * @summary Testing TLS application data exchange using each of the supported
  *          cipher suites.
  * @library /sun/security/krb5/auto /javax/net/ssl/TLSCommon
+ * @modules java.security.jgss
+ *          jdk.security.auth
+ *          java.security.jgss/sun.security.krb5
+ *          java.security.jgss/sun.security.krb5.internal.crypto
+ *          java.security.jgss/sun.security.krb5.internal.ccache
+ *          java.security.jgss/sun.security.krb5.internal
+ *          java.security.jgss/sun.security.krb5.internal.ktab
+ *          java.base/sun.security.util
  * @run main/othervm -Dtest.security.protocol=TLSv1.1 -Dtest.mode=norm TLSDataExchangeTest
  * @run main/othervm -Dtest.security.protocol=TLSv1.1 -Dtest.mode=norm_sni TLSDataExchangeTest
  * @run main/othervm -Dtest.security.protocol=TLSv1.1 -Dtest.mode=krb TLSDataExchangeTest
--- a/test/javax/net/ssl/TLSv11/TLSEnginesClosureTest.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/javax/net/ssl/TLSv11/TLSEnginesClosureTest.java	Mon Sep 19 10:11:34 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2016, 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
@@ -27,6 +27,14 @@
  * @summary Testing TLS engines closing using each of the supported
  *          cipher suites.
  * @library /sun/security/krb5/auto /javax/net/ssl/TLSCommon
+ * @modules java.security.jgss
+ *          jdk.security.auth
+ *          java.security.jgss/sun.security.krb5
+ *          java.security.jgss/sun.security.krb5.internal.crypto
+ *          java.security.jgss/sun.security.krb5.internal.ccache
+ *          java.security.jgss/sun.security.krb5.internal
+ *          java.security.jgss/sun.security.krb5.internal.ktab
+ *          java.base/sun.security.util
  * @run main/othervm -Dtest.security.protocol=TLSv1.1 -Dtest.mode=norm TLSEnginesClosureTest
  * @run main/othervm -Dtest.security.protocol=TLSv1.1 -Dtest.mode=norm_sni TLSEnginesClosureTest
  * @run main/othervm -Dtest.security.protocol=TLSv1.1 -Dtest.mode=krb TLSEnginesClosureTest
--- a/test/javax/net/ssl/TLSv11/TLSHandshakeTest.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/javax/net/ssl/TLSv11/TLSHandshakeTest.java	Mon Sep 19 10:11:34 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2016, 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
@@ -27,6 +27,14 @@
  * @summary Testing TLS engines handshake using each of the supported
  *          cipher suites.
  * @library /sun/security/krb5/auto /javax/net/ssl/TLSCommon
+ * @modules java.security.jgss
+ *          jdk.security.auth
+ *          java.security.jgss/sun.security.krb5
+ *          java.security.jgss/sun.security.krb5.internal.crypto
+ *          java.security.jgss/sun.security.krb5.internal.ccache
+ *          java.security.jgss/sun.security.krb5.internal
+ *          java.security.jgss/sun.security.krb5.internal.ktab
+ *          java.base/sun.security.util
  * @run main/othervm -Dtest.security.protocol=TLSv1.1 -Dtest.mode=norm TLSHandshakeTest
  * @run main/othervm -Dtest.security.protocol=TLSv1.1 -Dtest.mode=norm_sni TLSHandshakeTest
  * @run main/othervm -Dtest.security.protocol=TLSv1.1 -Dtest.mode=krb TLSHandshakeTest
--- a/test/javax/net/ssl/TLSv11/TLSMFLNTest.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/javax/net/ssl/TLSv11/TLSMFLNTest.java	Mon Sep 19 10:11:34 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2016, 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
@@ -28,6 +28,14 @@
  *          cipher suites with different maximum fragment length. Testing of
  *          MFLN extension.
  * @library /sun/security/krb5/auto /javax/net/ssl/TLSCommon
+ * @modules java.security.jgss
+ *          jdk.security.auth
+ *          java.security.jgss/sun.security.krb5
+ *          java.security.jgss/sun.security.krb5.internal.crypto
+ *          java.security.jgss/sun.security.krb5.internal.ccache
+ *          java.security.jgss/sun.security.krb5.internal
+ *          java.security.jgss/sun.security.krb5.internal.ktab
+ *          java.base/sun.security.util
  * @run main/othervm -Dtest.security.protocol=TLSv1.1 -Dtest.mode=norm TLSMFLNTest
  * @run main/othervm -Dtest.security.protocol=TLSv1.1 -Dtest.mode=norm_sni TLSMFLNTest
  * @run main/othervm -Dtest.security.protocol=TLSv1.1 -Dtest.mode=krb TLSMFLNTest
--- a/test/javax/net/ssl/TLSv11/TLSNotEnabledRC4Test.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/javax/net/ssl/TLSv11/TLSNotEnabledRC4Test.java	Mon Sep 19 10:11:34 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2016, 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
@@ -26,6 +26,13 @@
  * @bug 8085979
  * @summary Testing TLS engines do not enable RC4 ciphers by default.
  * @library /sun/security/krb5/auto /javax/net/ssl/TLSCommon
+ * @modules java.security.jgss
+ *          java.security.jgss/sun.security.krb5
+ *          java.security.jgss/sun.security.krb5.internal.crypto
+ *          java.security.jgss/sun.security.krb5.internal.ccache
+ *          java.security.jgss/sun.security.krb5.internal
+ *          java.security.jgss/sun.security.krb5.internal.ktab
+ *          java.base/sun.security.util
  * @run main/othervm -Dtest.security.protocol=TLSv1.1 TLSNotEnabledRC4Test
  */
 
--- a/test/javax/net/ssl/TLSv11/TLSRehandshakeTest.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/javax/net/ssl/TLSv11/TLSRehandshakeTest.java	Mon Sep 19 10:11:34 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2016, 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
@@ -27,6 +27,14 @@
  * @summary Testing TLS engines re-handshaking using each of the supported
  *          cipher suites.
  * @library /sun/security/krb5/auto /javax/net/ssl/TLSCommon
+ * @modules java.security.jgss
+ *          jdk.security.auth
+ *          java.security.jgss/sun.security.krb5
+ *          java.security.jgss/sun.security.krb5.internal.crypto
+ *          java.security.jgss/sun.security.krb5.internal.ccache
+ *          java.security.jgss/sun.security.krb5.internal
+ *          java.security.jgss/sun.security.krb5.internal.ktab
+ *          java.base/sun.security.util
  * @run main/othervm -Dtest.security.protocol=TLSv1.1 -Dtest.mode=norm TLSRehandshakeTest
  * @run main/othervm -Dtest.security.protocol=TLSv1.1 -Dtest.mode=norm_sni TLSRehandshakeTest
  * @run main/othervm -Dtest.security.protocol=TLSv1.1 -Dtest.mode=krb TLSRehandshakeTest
--- a/test/javax/net/ssl/TLSv11/TLSRehandshakeWithCipherChangeTest.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/javax/net/ssl/TLSv11/TLSRehandshakeWithCipherChangeTest.java	Mon Sep 19 10:11:34 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2016, 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
@@ -28,6 +28,13 @@
  *          is taken randomly from the supporetd ciphers list.
  * @key randomness
  * @library /sun/security/krb5/auto /lib/testlibrary /javax/net/ssl/TLSCommon
+ * @modules java.security.jgss
+ *          java.security.jgss/sun.security.krb5
+ *          java.security.jgss/sun.security.krb5.internal.crypto
+ *          java.security.jgss/sun.security.krb5.internal.ccache
+ *          java.security.jgss/sun.security.krb5.internal
+ *          java.security.jgss/sun.security.krb5.internal.ktab
+ *          java.base/sun.security.util
  * @run main/othervm -Dtest.security.protocol=TLSv1.1 TLSRehandshakeWithCipherChangeTest
  */
 
--- a/test/javax/net/ssl/TLSv11/TLSRehandshakeWithDataExTest.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/javax/net/ssl/TLSv11/TLSRehandshakeWithDataExTest.java	Mon Sep 19 10:11:34 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2016, 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
@@ -28,6 +28,14 @@
  *          cipher suites with application data exchange before and after
  *          re-handshake and closing of the engines.
  * @library /sun/security/krb5/auto /javax/net/ssl/TLSCommon
+ * @modules java.security.jgss
+ *          jdk.security.auth
+ *          java.security.jgss/sun.security.krb5
+ *          java.security.jgss/sun.security.krb5.internal.crypto
+ *          java.security.jgss/sun.security.krb5.internal.ccache
+ *          java.security.jgss/sun.security.krb5.internal
+ *          java.security.jgss/sun.security.krb5.internal.ktab
+ *          java.base/sun.security.util
  * @run main/othervm -Dtest.security.protocol=TLSv1.1 -Dtest.mode=norm TLSRehandshakeWithDataExTest
  * @run main/othervm -Dtest.security.protocol=TLSv1.1 -Dtest.mode=norm_sni TLSRehandshakeWithDataExTest
  * @run main/othervm -Dtest.security.protocol=TLSv1.1 -Dtest.mode=krb TLSRehandshakeWithDataExTest
--- a/test/javax/net/ssl/TLSv11/TLSUnsupportedCiphersTest.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/javax/net/ssl/TLSv11/TLSUnsupportedCiphersTest.java	Mon Sep 19 10:11:34 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2016, 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
@@ -27,6 +27,13 @@
  * @summary Testing that try to enable unsupported ciphers
  *          causes IllegalArgumentException.
  * @library /sun/security/krb5/auto /javax/net/ssl/TLSCommon
+ * @modules java.security.jgss
+ *          java.security.jgss/sun.security.krb5
+ *          java.security.jgss/sun.security.krb5.internal.crypto
+ *          java.security.jgss/sun.security.krb5.internal.ccache
+ *          java.security.jgss/sun.security.krb5.internal
+ *          java.security.jgss/sun.security.krb5.internal.ktab
+ *          java.base/sun.security.util
  * @run main/othervm -Dtest.security.protocol=TLSv1.1 TLSUnsupportedCiphersTest
  */
 
--- a/test/javax/net/ssl/ciphersuites/DisabledAlgorithms.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/javax/net/ssl/ciphersuites/DisabledAlgorithms.java	Mon Sep 19 10:11:34 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2016, 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
@@ -21,6 +21,15 @@
  * questions.
  */
 
+/*
+ * @test
+ * @bug 8076221
+ * @summary Check if weak cipher suites are disabled
+ * @modules jdk.crypto.ec
+ * @run main/othervm DisabledAlgorithms default
+ * @run main/othervm DisabledAlgorithms empty
+ */
+
 import java.io.BufferedInputStream;
 import java.io.BufferedOutputStream;
 import java.io.IOException;
@@ -36,13 +45,6 @@
 import javax.net.ssl.SSLSocket;
 import javax.net.ssl.SSLSocketFactory;
 
-/**
- * @test
- * @bug 8076221
- * @summary Check if weak cipher suites are disabled
- * @run main/othervm DisabledAlgorithms default
- * @run main/othervm DisabledAlgorithms empty
- */
 public class DisabledAlgorithms {
 
     private static final String pathToStores = "../etc";
--- a/test/javax/net/ssl/ciphersuites/ECCurvesconstraints.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/javax/net/ssl/ciphersuites/ECCurvesconstraints.java	Mon Sep 19 10:11:34 2016 -0700
@@ -32,24 +32,29 @@
  * @test
  * @bug 8148516
  * @summary Improve the default strength of EC in JDK
+ * @modules jdk.crypyo.ec
  * @run main/othervm ECCurvesconstraints PKIX
  * @run main/othervm ECCurvesconstraints SunX509
  */
 
-import java.net.*;
-import java.util.*;
-import java.io.*;
-import javax.net.ssl.*;
-import java.security.Security;
+import java.io.ByteArrayInputStream;
+import java.io.InputStream;
+import java.io.OutputStream;
 import java.security.KeyStore;
 import java.security.KeyFactory;
 import java.security.cert.Certificate;
-import java.security.cert.X509Certificate;
 import java.security.cert.CertificateFactory;
-import java.security.spec.*;
-import java.security.interfaces.*;
+import java.security.interfaces.ECPrivateKey;
+import java.security.spec.PKCS8EncodedKeySpec;
 import java.util.Base64;
-
+import javax.net.ssl.KeyManagerFactory;
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.SSLHandshakeException;
+import javax.net.ssl.SSLServerSocket;
+import javax.net.ssl.SSLServerSocketFactory;
+import javax.net.ssl.SSLSocket;
+import javax.net.ssl.SSLSocketFactory;
+import javax.net.ssl.TrustManagerFactory;
 
 public class ECCurvesconstraints {
 
--- a/test/javax/script/ExceptionTest.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/javax/script/ExceptionTest.java	Mon Sep 19 10:11:34 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2006, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2006, 2016, 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
@@ -26,10 +26,14 @@
  * @bug 6474943 6705893
  * @summary Test that script engine exception messages are
  * available from ScriptException.
+ * @modules jdk.scripting.nashorn
  */
 
-import java.io.*;
-import javax.script.*;
+import javax.script.Compilable;
+import javax.script.CompiledScript;
+import javax.script.ScriptEngine;
+import javax.script.ScriptEngineManager;
+import javax.script.ScriptException;
 
 public class ExceptionTest {
     private static final String ERROR_MSG = "error from JavaScript";
--- a/test/javax/script/JavaScriptScopeTest.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/javax/script/JavaScriptScopeTest.java	Mon Sep 19 10:11:34 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2008, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2016, 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
@@ -28,9 +28,13 @@
  * get affected by default scope assignments. Also, verify
  * that script globals can be created and accessed from Java
  * as well as JavaScript.
+ * @modules jdk.scripting.nashorn
  */
 
-import javax.script.*;
+import javax.script.Bindings;
+import javax.script.ScriptEngine;
+import javax.script.ScriptEngineManager;
+
 
 public class JavaScriptScopeTest {
 
--- a/test/javax/script/NullUndefinedVarTest.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/javax/script/NullUndefinedVarTest.java	Mon Sep 19 10:11:34 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2008, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2016, 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
@@ -26,9 +26,11 @@
  * @bug 6346732 6705893
  * @summary should be able to assign null and undefined
  * value to JavaScript global variables.
+ * @modules jdk.scripting.nashorn
  */
 
-import javax.script.*;
+import javax.script.ScriptEngine;
+import javax.script.ScriptEngineManager;
 
 public class NullUndefinedVarTest {
 
--- a/test/javax/script/PluggableContextTest.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/javax/script/PluggableContextTest.java	Mon Sep 19 10:11:34 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2006, 2008, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2006, 2016, 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
@@ -26,9 +26,12 @@
  * @bug 6398614 6705893
  * @summary Create a user defined ScriptContext and check
  * that script can access variables from non-standard scopes
+ * @modules jdk.scripting.nashorn
  */
 
-import javax.script.*;
+import javax.script.ScriptContext;
+import javax.script.ScriptEngine;
+import javax.script.ScriptEngineManager;
 
 public class PluggableContextTest {
     public static void main(String[] args) throws Exception {
--- a/test/javax/script/Test1.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/javax/script/Test1.java	Mon Sep 19 10:11:34 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2008, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2016, 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
@@ -26,10 +26,13 @@
  * @bug 6249843 6705893
  * @summary Create JavaScript engine and execute a simple script.
  * Tests script engine discovery mechanism.
+ * @modules jdk.scripting.nashorn
  */
 
-import javax.script.*;
-import java.io.*;
+import java.io.File;
+import java.io.FileReader;
+import javax.script.ScriptEngine;
+import javax.script.ScriptEngineManager;
 
 public class Test1  {
         public static void main(String[] args) throws Exception {
--- a/test/javax/script/Test2.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/javax/script/Test2.java	Mon Sep 19 10:11:34 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2008, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2016, 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,13 @@
  * @test
  * @bug 6249843
  * @summary Test exposing a Java object to script
+ * @modules jdk.scripting.nashorn
  */
 
-import javax.script.*;
-import java.io.*;
+import java.io.File;
+import java.io.FileReader;
+import javax.script.ScriptEngine;
+import javax.script.ScriptEngineManager;
 
 public class Test2 {
         public static class Testobj {
--- a/test/javax/script/Test3.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/javax/script/Test3.java	Mon Sep 19 10:11:34 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2008, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2016, 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,11 +25,17 @@
  * @test
  * @bug 6249843 6705893
  * @summary Test engine and global scopes
+ * @modules jdk.scripting.nashorn
  */
 
-import javax.script.*;
-import java.io.*;
-import java.util.*;
+import java.io.File;
+import java.io.FileReader;
+import java.io.Reader;
+import javax.script.Bindings;
+import javax.script.ScriptContext;
+import javax.script.ScriptEngine;
+import javax.script.ScriptEngineManager;
+import javax.script.SimpleBindings;
 
 public class Test3 {
         public static void main(String[] args) throws Exception {
--- a/test/javax/script/Test4.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/javax/script/Test4.java	Mon Sep 19 10:11:34 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2008, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2016, 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,14 @@
  * @test
  * @bug 6249843 6705893
  * @summary Test script functions implementing Java interface
+ * @modules jdk.scripting.nashorn
  */
 
-import javax.script.*;
-import java.io.*;
+import java.io.File;
+import java.io.FileReader;
+import javax.script.Invocable;
+import javax.script.ScriptEngine;
+import javax.script.ScriptEngineManager;
 
 public class Test4 {
         public static void main(String[] args) throws Exception {
--- a/test/javax/script/Test5.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/javax/script/Test5.java	Mon Sep 19 10:11:34 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2016, 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,18 @@
  * @test
  * @bug 6249843 6705893
  * @summary Tests engine, global scopes and scope hiding.
+ * @modules jdk.scripting.nashorn
  */
 
-import java.io.*;
-import javax.script.*;
+import java.io.File;
+import java.io.FileReader;
+import java.io.Reader;
+import javax.script.Bindings;
+import javax.script.ScriptContext;
+import javax.script.ScriptEngine;
+import javax.script.ScriptEngineManager;
+import javax.script.SimpleBindings;
+import javax.script.SimpleScriptContext;
 
 public class Test5 {
         public static void main(String[] args) throws Exception {
--- a/test/javax/script/Test6.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/javax/script/Test6.java	Mon Sep 19 10:11:34 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2016, 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
@@ -26,10 +26,16 @@
  * @bug 6249843 6705893
  * @summary Test basic script compilation. Value eval'ed from
  * compiled and interpreted scripts should be same.
+ * @modules jdk.scripting.nashorn
  */
 
-import java.io.*;
-import javax.script.*;
+import java.io.File;
+import java.io.FileReader;
+import java.io.Reader;
+import javax.script.Compilable;
+import javax.script.CompiledScript;
+import javax.script.ScriptEngine;
+import javax.script.ScriptEngineManager;
 
 public class Test6 {
         public static void main(String[] args) throws Exception {
--- a/test/javax/script/Test7.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/javax/script/Test7.java	Mon Sep 19 10:11:34 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2008, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2016, 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,14 @@
  * @test
  * @bug 6249843 6705893
  * @summary Tests importPackage and java access in script
+ * @modules jdk.scripting.nashorn
  */
 
-import java.io.*;
-import javax.script.*;
+import java.io.File;
+import java.io.FileReader;
+import java.io.Reader;
+import javax.script.ScriptEngine;
+import javax.script.ScriptEngineManager;
 
 public class Test7 {
         public static void main(String[] args) throws Exception {
--- a/test/javax/script/Test8.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/javax/script/Test8.java	Mon Sep 19 10:11:34 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2008, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2016, 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,14 @@
  * @test
  * @bug 6249843 6705893
  * @summary Test invoking script function or method from Java
+ * @modules jdk.scripting.nashorn
  */
 
-import javax.script.*;
-import java.io.*;
+import java.io.File;
+import java.io.FileReader;
+import javax.script.Invocable;
+import javax.script.ScriptEngine;
+import javax.script.ScriptEngineManager;
 
 public class Test8 {
         public static void main(String[] args) throws Exception {
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/internal/misc/Unsafe/TestBadHostClass.java	Mon Sep 19 10:11:34 2016 -0700
@@ -0,0 +1,111 @@
+/*
+ * Copyright (c) 2016, 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
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8058575
+ * @summary Test that bad host classes cause exceptions to get thrown.
+ * @library /test/lib
+ * @modules java.base/jdk.internal.misc
+ *          java.base/jdk.internal.org.objectweb.asm
+ * @run main TestBadHostClass
+ */
+
+
+import java.lang.*;
+import java.lang.reflect.Field;
+import jdk.internal.misc.Unsafe;
+import jdk.test.lib.unsafe.UnsafeHelper;
+import jdk.internal.org.objectweb.asm.ClassWriter;
+import static jdk.internal.org.objectweb.asm.Opcodes.*;
+
+// Test that bad host classes cause exceptions.
+public class TestBadHostClass {
+
+    private static final Unsafe unsafe = Unsafe.getUnsafe();
+
+    private static String packageName(Class<?> c) {
+        if (c.isArray()) {
+            return packageName(c.getComponentType());
+        } else {
+            String name = c.getName();
+            int dot = name.lastIndexOf('.');
+            if (dot == -1) return "";
+            return name.substring(0, dot);
+        }
+    }
+
+    private static int constantPoolSize(byte[] classFile) {
+        return ((classFile[8] & 0xFF) << 8) | (classFile[9] & 0xFF);
+    }
+
+    static public void badHostClass(Class<?> hostClass) {
+        // choose a class name in the same package as the host class
+        String className;
+        if (hostClass != null) {
+            String prefix = packageName(hostClass);
+            if (prefix.length() > 0)
+                prefix = prefix.replace('.', '/') + "/";
+            className = prefix + "Anon";
+        } else {
+           className = "Anon";
+        }
+
+        // create the class
+        String superName = "java/lang/Object";
+        ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS
+                                         + ClassWriter.COMPUTE_FRAMES);
+        cw.visit(V1_8, ACC_PUBLIC + ACC_FINAL + ACC_SUPER,
+                 className, null, superName, null);
+        byte[] classBytes = cw.toByteArray();
+        int cpPoolSize = constantPoolSize(classBytes);
+        Class<?> anonClass
+            = unsafe.defineAnonymousClass(hostClass, classBytes, new Object[cpPoolSize]);
+    }
+
+    public static void main(String args[]) throws Exception {
+        // host class is an array of java.lang.Objects.
+        try {
+            badHostClass(Object[].class);
+        } catch (IllegalArgumentException ex) {
+        }
+
+        // host class is an array of objects of this class.
+        try {
+            badHostClass(TestBadHostClass[].class);
+        } catch (IllegalArgumentException ex) {
+        }
+
+        // host class is null.
+        try {
+            badHostClass(null);
+        } catch (NullPointerException ex) {
+        }
+
+        // host class is a primitive array class.
+        try {
+            badHostClass(int[].class);
+        } catch (IllegalArgumentException ex) {
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/internal/util/jar/TestVersionedStream.java	Mon Sep 19 10:11:34 2016 -0700
@@ -0,0 +1,214 @@
+/*
+ * Copyright (c) 2016, 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
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8163798
+ * @summary basic tests for multi-release jar versioned streams
+ * @modules jdk.jartool/sun.tools.jar java.base/jdk.internal.util.jar
+ * @run testng TestVersionedStream
+ */
+
+import org.testng.Assert;
+import org.testng.annotations.AfterClass;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.DataProvider;
+import org.testng.annotations.Test;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.UncheckedIOException;
+import java.net.URI;
+import java.nio.file.FileVisitResult;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.nio.file.SimpleFileVisitor;
+import java.nio.file.attribute.BasicFileAttributes;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.jar.JarEntry;
+import java.util.jar.JarFile;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+import java.util.zip.ZipFile;
+
+public class TestVersionedStream {
+    private String userdir;
+
+    @BeforeClass
+    public void initialize() {
+        userdir = System.getProperty("user.dir", ".");
+
+        // These are not real class files even though they end with .class.
+        // They are resource files so jar tool validation won't reject them.
+        // But they are what we want to test, especially q/Bar.class that
+        // could be in a concealed package if this was a modular multi-release
+        // jar.
+        createFiles(
+                "base/p/Foo.class",
+                "base/p/Main.class",
+                "v9/p/Foo.class",
+                "v10/p/Foo.class",
+                "v10/q/Bar.class",
+                "v11/p/Foo.class"
+        );
+
+        jar("cf mmr.jar -C base . --release 9 -C v9 . --release 10 -C v10 . --release 11 -C v11 .");
+
+        System.out.println("Contents of mmr.jar\n=======");
+        jar("tf mmr.jar");
+        System.out.println("=======");
+    }
+
+    @AfterClass
+    public void close() throws IOException {
+        Path root = Paths.get(userdir);
+        Files.walkFileTree(root, new SimpleFileVisitor<>() {
+            @Override
+            public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
+                Files.delete(file);
+                return FileVisitResult.CONTINUE;
+            }
+
+            @Override
+            public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException {
+                if (!dir.equals(root)) {
+                    Files.delete(dir);
+                }
+                return FileVisitResult.CONTINUE;
+            }
+        });
+    }
+
+    @DataProvider
+    public Object[][] data() {
+        List<String> p = List.of(
+                "META-INF/",
+                "META-INF/MANIFEST.MF",
+                "p/",
+                "p/Foo.class",
+                "p/Main.class"
+        );
+        List<String> q = List.of(
+                "META-INF/",
+                "META-INF/MANIFEST.MF",
+                "p/",
+                "p/Foo.class",
+                "p/Main.class",
+                "q/",
+                "q/Bar.class"
+        );
+        Runtime.Version rt = JarFile.runtimeVersion();
+        return new Object[][] {
+                {Runtime.Version.parse("8"), p},
+                {Runtime.Version.parse("9"), p},
+                {Runtime.Version.parse("10"), q},
+                {Runtime.Version.parse("11"), q},
+                {JarFile.baseVersion(), p},
+                {rt, rt.major() > 9 ? q : p}
+        };
+    }
+
+    @Test(dataProvider="data")
+    public void test(Runtime.Version version, List<String> names) throws Exception {
+        try (JarFile jf = new JarFile(new File("mmr.jar"), false, ZipFile.OPEN_READ, version);
+            Stream<JarEntry> jes = jdk.internal.util.jar.VersionedStream.stream(jf))
+        {
+            Assert.assertNotNull(jes);
+
+            List<JarEntry> entries = jes.collect(Collectors.toList());
+
+            // verify the correct order
+            List<String> enames = entries.stream()
+                    .map(je -> je.getName())
+                    .collect(Collectors.toList());
+            Assert.assertEquals(enames, names);
+
+            // verify the contents
+            Map<String,String> contents = new HashMap<>();
+            contents.put("p/Main.class", "base/p/Main.class\n");
+            if (version.major() > 9) {
+                contents.put("q/Bar.class", "v10/q/Bar.class\n");
+            }
+            switch (version.major()) {
+                case 8:
+                    contents.put("p/Foo.class", "base/p/Foo.class\n");
+                    break;
+                case 9:
+                    contents.put("p/Foo.class", "v9/p/Foo.class\n");
+                    break;
+                case 10:
+                    contents.put("p/Foo.class", "v10/p/Foo.class\n");
+                    break;
+                case 11:
+                    contents.put("p/Foo.class", "v11/p/Foo.class\n");
+                    break;
+                default:
+                    Assert.fail("Test out of date, please add more cases");
+            }
+
+            contents.entrySet().stream().forEach(e -> {
+                String name = e.getKey();
+                int i = enames.indexOf(name);
+                Assert.assertTrue(i != -1, name + " not in enames");
+                JarEntry je = entries.get(i);
+                try (InputStream is = jf.getInputStream(je)) {
+                    String s = new String(is.readAllBytes());
+                    Assert.assertTrue(s.endsWith(e.getValue()), s);
+                } catch (IOException x) {
+                    throw new UncheckedIOException(x);
+                }
+            });
+        }
+    }
+
+    private void createFiles(String... files) {
+        ArrayList<String> list = new ArrayList();
+        Arrays.stream(files)
+                .map(f -> "file:///" + userdir + "/" + f)
+                .map(f -> URI.create(f))
+                .filter(u -> u != null)
+                .map(u -> Paths.get(u))
+                .forEach(p -> {
+                    try {
+                        Files.createDirectories(p.getParent());
+                        Files.createFile(p);
+                        list.clear();
+                        list.add(p.toString());
+                        Files.write(p, list);
+                    } catch (IOException x) {
+                        throw new UncheckedIOException(x);
+                    }});
+    }
+
+    private void jar(String args) {
+        new sun.tools.jar.Main(System.out, System.err, "jar")
+                .run(args.split(" +"));
+    }
+
+}
--- a/test/jdk/nio/zipfs/jarfs/JFSTester.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/jdk/nio/zipfs/jarfs/JFSTester.java	Mon Sep 19 10:11:34 2016 -0700
@@ -26,6 +26,7 @@
  * @bug 8164389
  * @summary walk entries in a jdk.nio.zipfs.JarFileSystem
  * @modules jdk.jartool/sun.tools.jar
+ *          jdk.zipfs
  * @run testng JFSTester
  */
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/sun/net/www/protocol/jar/JarURLConnectionUseCaches.java	Mon Sep 19 10:11:34 2016 -0700
@@ -0,0 +1,63 @@
+/*
+ * Copyright (c) 2016, 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
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 6947916
+ * @summary  JarURLConnection does not handle useCaches correctly
+ * @run main/othervm JarURLConnectionUseCaches
+ */
+
+import java.io.*;
+import java.net.JarURLConnection;
+import java.net.URL;
+import java.util.jar.*;
+
+public class JarURLConnectionUseCaches {
+    public static void main( String[] args ) throws IOException {
+        JarOutputStream out = new JarOutputStream(
+                new FileOutputStream("usecache.jar"));
+        out.putNextEntry(new JarEntry("test.txt"));
+        out.write("Test txt file".getBytes());
+        out.closeEntry();
+        out.close();
+
+        URL url = new URL("jar:"
+            + new File(".").toURI().toString()
+            + "/usecache.jar!/test.txt");
+
+        JarURLConnection c1 = (JarURLConnection)url.openConnection();
+        c1.setDefaultUseCaches( false );
+        c1.setUseCaches( true );
+        c1.connect();
+
+        JarURLConnection c2 = (JarURLConnection)url.openConnection();
+        c2.setDefaultUseCaches( false );
+        c2.setUseCaches( true );
+        c2.connect();
+
+        c1.getInputStream().close();
+        c2.getInputStream().read();
+        c2.getInputStream().close();
+    }
+}
--- a/test/sun/security/ec/NSASuiteB/TestSHAwithECDSASignatureOids.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/sun/security/ec/NSASuiteB/TestSHAwithECDSASignatureOids.java	Mon Sep 19 10:11:34 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2016, 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
@@ -31,6 +31,7 @@
  *          OID and algorithm transformation string should match.
  *          Both could be able to be used to generate the algorithm instance.
  * @compile ../../TestSignatureOidHelper.java
+ * @modules jdk.crypto.ec
  * @run main TestSHAwithECDSASignatureOids
  */
 public class TestSHAwithECDSASignatureOids {
--- a/test/sun/security/krb5/IPv6.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/sun/security/krb5/IPv6.java	Mon Sep 19 10:11:34 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2009, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2009, 2016, 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,11 +25,16 @@
  * @test
  * @bug 6877357 6885166
  * @run main/othervm IPv6
+ * @modules jdk.security.auth
  * @summary IPv6 address does not work
  */
 
 import com.sun.security.auth.module.Krb5LoginModule;
-import java.io.*;
+import java.io.BufferedReader;
+import java.io.ByteArrayOutputStream;
+import java.io.FileOutputStream;
+import java.io.PrintStream;
+import java.io.StringReader;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.regex.Matcher;
--- a/test/sun/security/krb5/auto/MaxRetries.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/sun/security/krb5/auto/MaxRetries.java	Mon Sep 19 10:11:34 2016 -0700
@@ -24,7 +24,6 @@
 /*
  * @test
  * @bug 6844193
- * @key intermittent
  * @compile -XDignore.symbol.file MaxRetries.java
  * @run main/othervm/timeout=300 MaxRetries
  * @summary support max_retries in krb5.conf
--- a/test/sun/security/krb5/auto/Unreachable.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/sun/security/krb5/auto/Unreachable.java	Mon Sep 19 10:11:34 2016 -0700
@@ -24,7 +24,6 @@
 /*
  * @test
  * @bug 7162687 8015595
- * @key intermittent
  * @summary enhance KDC server availability detection
  * @compile -XDignore.symbol.file Unreachable.java
  * @run main/othervm Unreachable
--- a/test/sun/security/pkcs11/Cipher/ReinitCipher.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/sun/security/pkcs11/Cipher/ReinitCipher.java	Mon Sep 19 10:11:34 2016 -0700
@@ -21,13 +21,14 @@
  * questions.
  */
 
-/**
+/*
  * @test
  * @bug 4856966
  * @summary
  * @author Andreas Sterbenz
  * @library ..
  * @key randomness
+ * @modules jdk.crypto.pkcs11
  * @run main/othervm ReinitCipher
  * @run main/othervm ReinitCipher sm
  */
--- a/test/sun/security/pkcs11/Cipher/TestPKCS5PaddingError.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/sun/security/pkcs11/Cipher/TestPKCS5PaddingError.java	Mon Sep 19 10:11:34 2016 -0700
@@ -21,12 +21,13 @@
  * questions.
  */
 
-/**
+/*
  * @test
  * @bug 6687725
  * @summary Test internal PKCS5Padding impl with various error conditions.
  * @author Valerie Peng
  * @library ..
+ * @modules jdk.crypto.pkcs11
  * @run main/othervm TestPKCS5PaddingError
  * @run main/othervm TestPKCS5PaddingError sm
  */
--- a/test/sun/security/pkcs11/Cipher/TestRSACipher.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/sun/security/pkcs11/Cipher/TestRSACipher.java	Mon Sep 19 10:11:34 2016 -0700
@@ -21,13 +21,14 @@
  * questions.
  */
 
-/**
+/*
  * @test
  * @bug 4898468 6994008
  * @summary basic test for RSA cipher
  * @author Andreas Sterbenz
  * @library ..
  * @key randomness
+ * @modules jdk.crypto.pkcs11
  * @run main/othervm TestRSACipher
  * @run main/othervm TestRSACipher sm
  */
--- a/test/sun/security/pkcs11/Cipher/TestRSACipherWrap.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/sun/security/pkcs11/Cipher/TestRSACipherWrap.java	Mon Sep 19 10:11:34 2016 -0700
@@ -21,12 +21,13 @@
  * questions.
  */
 
-/**
+/*
  * @test
  * @bug 6572331 6994008
  * @summary basic test for RSA cipher key wrapping functionality
  * @author Valerie Peng
  * @library ..
+ * @modules jdk.crypto.pkcs11
  * @run main/othervm TestRSACipherWrap
  * @run main/othervm TestRSACipherWrap sm
  */
--- a/test/sun/security/pkcs11/Cipher/TestRawRSACipher.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/sun/security/pkcs11/Cipher/TestRawRSACipher.java	Mon Sep 19 10:11:34 2016 -0700
@@ -21,13 +21,14 @@
  * questions.
  */
 
-/**
+/*
  * @test
  * @bug 6994008
  * @summary basic test for RSA/ECB/NoPadding cipher
  * @author Valerie Peng
  * @library ..
  * @key randomness
+ * @modules jdk.crypto.pkcs11
  * @run main/othervm TestRawRSACipher
  * @run main/othervm TestRawRSACipher sm
  */
--- a/test/sun/security/pkcs11/Cipher/TestSymmCiphers.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/sun/security/pkcs11/Cipher/TestSymmCiphers.java	Mon Sep 19 10:11:34 2016 -0700
@@ -21,13 +21,14 @@
  * questions.
  */
 
-/**
+/*
  * @test
  * @bug 4898461 6604496
  * @summary basic test for symmetric ciphers with padding
  * @author Valerie Peng
  * @library ..
  * @key randomness
+ * @modules jdk.crypto.pkcs11
  * @run main/othervm TestSymmCiphers
  * @run main/othervm TestSymmCiphers sm
  */
--- a/test/sun/security/pkcs11/Cipher/TestSymmCiphersNoPad.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/sun/security/pkcs11/Cipher/TestSymmCiphersNoPad.java	Mon Sep 19 10:11:34 2016 -0700
@@ -21,13 +21,14 @@
  * questions.
  */
 
-/**
+/*
  * @test
  * @bug 4898484 6604496 8001284
  * @summary basic test for symmetric ciphers with no padding
  * @author Valerie Peng
  * @library ..
  * @key randomness
+ * @modules jdk.crypto.pkcs11
  * @run main/othervm TestSymmCiphersNoPad
  * @run main/othervm TestSymmCiphersNoPad sm
  */
--- a/test/sun/security/pkcs11/KeyAgreement/SupportedDHKeys.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/sun/security/pkcs11/KeyAgreement/SupportedDHKeys.java	Mon Sep 19 10:11:34 2016 -0700
@@ -21,21 +21,23 @@
  * questions.
  */
 
-/**
+/*
  * @test
  * @bug 8072452
  * @summary Support DHE sizes up to 8192-bits and DSA sizes up to 3072-bits
  * @library ..
+ * @modules jdk.crypto.pkcs11
  * @run main/othervm SupportedDHKeys
  * @run main/othervm SupportedDHKeys sm
  */
 
 import java.math.BigInteger;
-
-import java.security.*;
-import javax.crypto.*;
-import javax.crypto.interfaces.*;
-import javax.crypto.spec.*;
+import java.security.KeyPair;
+import java.security.KeyPairGenerator;
+import java.security.Provider;
+import javax.crypto.interfaces.DHPrivateKey;
+import javax.crypto.interfaces.DHPublicKey;
+import javax.crypto.spec.DHParameterSpec;
 
 public class SupportedDHKeys extends PKCS11Test {
 
--- a/test/sun/security/pkcs11/KeyAgreement/TestDH.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/sun/security/pkcs11/KeyAgreement/TestDH.java	Mon Sep 19 10:11:34 2016 -0700
@@ -21,12 +21,13 @@
  * questions.
  */
 
-/**
+/*
  * @test
  * @bug 4921804 6324825
  * @summary Verify that DH works properly
  * @author Andreas Sterbenz
  * @library ..
+ * @modules jdk.crypto.pkcs11
  * @run main/othervm TestDH
  * @run main/othervm TestDH sm
  */
--- a/test/sun/security/pkcs11/KeyAgreement/TestInterop.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/sun/security/pkcs11/KeyAgreement/TestInterop.java	Mon Sep 19 10:11:34 2016 -0700
@@ -21,11 +21,12 @@
  * questions.
  */
 
-/**
+/*
  * @test
  * @bug 7146728
  * @summary Interop test for DH with secret that has a leading 0x00 byte
  * @library ..
+ * @modules jdk.crypto.pkcs11
  * @run main/othervm TestInterop
  * @run main/othervm TestInterop sm
  */
--- a/test/sun/security/pkcs11/KeyAgreement/TestShort.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/sun/security/pkcs11/KeyAgreement/TestShort.java	Mon Sep 19 10:11:34 2016 -0700
@@ -21,12 +21,13 @@
  * questions.
  */
 
-/**
+/*
  * @test
  * @bug 4942494 7146728
  * @summary KAT test for DH (normal and with secret that has leading a 0x00 byte)
  * @author Andreas Sterbenz
  * @library ..
+ * @modules jdk.crypto.pkcs11
  * @run main/othervm TestShort
  * @run main/othervm TestShort sm
  */
--- a/test/sun/security/pkcs11/KeyAgreement/UnsupportedDHKeys.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/sun/security/pkcs11/KeyAgreement/UnsupportedDHKeys.java	Mon Sep 19 10:11:34 2016 -0700
@@ -21,21 +21,19 @@
  * questions.
  */
 
-/**
+/*
  * @test
  * @bug 8072452
  * @summary Support DHE sizes up to 8192-bits and DSA sizes up to 3072-bits
  * @library ..
+ * @modules jdk.crypto.pkcs11
  * @run main/othervm UnsupportedDHKeys
  * @run main/othervm UnsupportedDHKeys sm
  */
 
-import java.math.BigInteger;
-
-import java.security.*;
-import javax.crypto.*;
-import javax.crypto.interfaces.*;
-import javax.crypto.spec.*;
+import java.security.InvalidParameterException;
+import java.security.KeyPairGenerator;
+import java.security.Provider;
 
 public class UnsupportedDHKeys extends PKCS11Test {
 
--- a/test/sun/security/pkcs11/KeyGenerator/DESParity.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/sun/security/pkcs11/KeyGenerator/DESParity.java	Mon Sep 19 10:11:34 2016 -0700
@@ -21,13 +21,14 @@
  * questions.
  */
 
-/**
+/*
  * @test
  * @bug 4898479
  * @summary Verify that the parity bits are set correctly
  * @author Andreas Sterbenz
  * @library ..
  * @key randomness
+ * @modules jdk.crypto.pkcs11
  * @run main/othervm DESParity
  * @run main/othervm DESParity sm
  */
--- a/test/sun/security/pkcs11/KeyGenerator/TestKeyGenerator.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/sun/security/pkcs11/KeyGenerator/TestKeyGenerator.java	Mon Sep 19 10:11:34 2016 -0700
@@ -21,12 +21,13 @@
  * questions.
  */
 
-/**
+/*
  * @test
  * @bug 4917233 6461727 6490213 6720456
  * @summary test the KeyGenerator
  * @author Andreas Sterbenz
  * @library ..
+ * @modules jdk.crypto.pkcs11
  * @run main/othervm TestKeyGenerator
  * @run main/othervm TestKeyGenerator sm
  */
--- a/test/sun/security/pkcs11/KeyPairGenerator/TestDH2048.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/sun/security/pkcs11/KeyPairGenerator/TestDH2048.java	Mon Sep 19 10:11:34 2016 -0700
@@ -21,12 +21,13 @@
  * questions.
  */
 
-/**
+/*
  * @test
  * @bug 7196382 8072452
  * @summary Ensure that DH key pairs can be generated for 512 - 8192 bits
  * @author Valerie Peng
  * @library ..
+ * @modules jdk.crypto.pkcs11
  * @run main/othervm TestDH2048
  * @run main/othervm TestDH2048 sm
  */
--- a/test/sun/security/pkcs11/Mac/MacKAT.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/sun/security/pkcs11/Mac/MacKAT.java	Mon Sep 19 10:11:34 2016 -0700
@@ -21,6 +21,17 @@
  * questions.
  */
 
+/*
+ * @test
+ * @bug 4846410 6313661 4963723
+ * @summary Basic known-answer-test for Hmac algorithms
+ * @author Andreas Sterbenz
+ * @library ..
+ * @modules jdk.crypto.pkcs11
+ * @run main/othervm MacKAT
+ * @run main/othervm MacKAT sm
+ */
+
 import java.io.UnsupportedEncodingException;
 import java.security.Provider;
 import java.util.Arrays;
@@ -30,15 +41,6 @@
 import javax.crypto.SecretKey;
 import javax.crypto.spec.SecretKeySpec;
 
-/**
- * @test
- * @bug 4846410 6313661 4963723
- * @summary Basic known-answer-test for Hmac algorithms
- * @author Andreas Sterbenz
- * @library ..
- * @run main/othervm MacKAT
- * @run main/othervm MacKAT sm
- */
 public class MacKAT extends PKCS11Test {
 
     private final static byte[] ALONG, BLONG, BKEY, BKEY_20, DDDATA_50,
--- a/test/sun/security/pkcs11/Mac/MacSameTest.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/sun/security/pkcs11/Mac/MacSameTest.java	Mon Sep 19 10:11:34 2016 -0700
@@ -21,6 +21,18 @@
  * questions.
  */
 
+/*
+ * @test
+ * @bug 8048603
+ * @summary Check if doFinal and update operation result in same Mac
+ * @author Yu-Ching Valerie Peng, Bill Situ, Alexander Fomin
+ * @library ..
+ * @modules jdk.crypto.pkcs11
+ * @run main/othervm MacSameTest
+ * @run main/othervm MacSameTest sm
+ * @key randomness
+ */
+
 import java.security.InvalidKeyException;
 import java.security.NoSuchAlgorithmException;
 import java.security.NoSuchProviderException;
@@ -30,16 +42,6 @@
 import javax.crypto.Mac;
 import javax.crypto.spec.SecretKeySpec;
 
-/**
- * @test
- * @bug 8048603
- * @summary Check if doFinal and update operation result in same Mac
- * @author Yu-Ching Valerie Peng, Bill Situ, Alexander Fomin
- * @library ..
- * @run main/othervm MacSameTest
- * @run main/othervm MacSameTest sm
- * @key randomness
- */
 public class MacSameTest extends PKCS11Test {
 
     private static final int MESSAGE_SIZE = 25;
--- a/test/sun/security/pkcs11/Mac/ReinitMac.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/sun/security/pkcs11/Mac/ReinitMac.java	Mon Sep 19 10:11:34 2016 -0700
@@ -21,13 +21,14 @@
  * questions.
  */
 
-/**
+/*
  * @test
  * @bug 4856966
  * @summary
  * @author Andreas Sterbenz
  * @library ..
  * @key randomness
+ * @modules jdk.crypto.pkcs11
  * @run main/othervm ReinitMac
  * @run main/othervm ReinitMac sm
  */
--- a/test/sun/security/pkcs11/MessageDigest/ByteBuffers.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/sun/security/pkcs11/MessageDigest/ByteBuffers.java	Mon Sep 19 10:11:34 2016 -0700
@@ -21,13 +21,14 @@
  * questions.
  */
 
-/**
+/*
  * @test
  * @bug 4856966
  * @summary Test the MessageDigest.update(ByteBuffer) method
  * @author Andreas Sterbenz
  * @library ..
  * @key randomness
+ * @modules jdk.crypto.pkcs11
  * @run main/othervm ByteBuffers
  * @run main/othervm ByteBuffers sm
  */
--- a/test/sun/security/pkcs11/MessageDigest/DigestKAT.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/sun/security/pkcs11/MessageDigest/DigestKAT.java	Mon Sep 19 10:11:34 2016 -0700
@@ -21,12 +21,13 @@
  * questions.
  */
 
-/**
+/*
  * @test
  * @bug 4856966
  * @summary Basic known-answer-test for all our MessageDigest algorithms
  * @author Andreas Sterbenz
  * @library ..
+ * @modules jdk.crypto.pkcs11
  * @run main/othervm DigestKAT
  * @run main/othervm DigestKAT sm
  */
--- a/test/sun/security/pkcs11/MessageDigest/ReinitDigest.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/sun/security/pkcs11/MessageDigest/ReinitDigest.java	Mon Sep 19 10:11:34 2016 -0700
@@ -21,13 +21,14 @@
  * questions.
  */
 
-/**
+/*
  * @test
  * @bug 4856966
  * @summary
  * @author Andreas Sterbenz
  * @library ..
  * @key randomness
+ * @modules jdk.crypto.pkcs11
  * @run main/othervm ReinitDigest
  * @run main/othervm ReinitDigest sm
  */
--- a/test/sun/security/pkcs11/MessageDigest/TestCloning.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/sun/security/pkcs11/MessageDigest/TestCloning.java	Mon Sep 19 10:11:34 2016 -0700
@@ -21,13 +21,14 @@
  * questions.
  */
 
-/**
+/*
  * @test
  * @bug 6414899
  * @summary Ensure the cloning functionality works.
  * @author Valerie Peng
  * @library ..
  * @key randomness
+ * @modules jdk.crypto.pkcs11
  * @run main/othervm TestCloning
  * @run main/othervm TestCloning sm
  */
--- a/test/sun/security/pkcs11/PKCS11Test.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/sun/security/pkcs11/PKCS11Test.java	Mon Sep 19 10:11:34 2016 -0700
@@ -82,8 +82,6 @@
         System.setProperty("closed.base", CLOSED_BASE);
     }
 
-    static String NSPR_PREFIX = "";
-
     // NSS version info
     public static enum ECCState { None, Basic, Extended };
     static double nss_version = -1;
@@ -294,7 +292,6 @@
         String osName = props.getProperty("os.name");
         if (osName.startsWith("Win")) {
             osName = "Windows";
-            NSPR_PREFIX = "lib";
         } else if (osName.equals("Mac OS X")) {
             osName = "MacOSX";
         }
@@ -342,9 +339,9 @@
 
     static boolean loadNSPR(String libdir) throws Exception {
         // load NSS softoken dependencies in advance to avoid resolver issues
-        safeReload(libdir + System.mapLibraryName(NSPR_PREFIX + "nspr4"));
-        safeReload(libdir + System.mapLibraryName(NSPR_PREFIX + "plc4"));
-        safeReload(libdir + System.mapLibraryName(NSPR_PREFIX + "plds4"));
+        safeReload(libdir + System.mapLibraryName("nspr4"));
+        safeReload(libdir + System.mapLibraryName("plc4"));
+        safeReload(libdir + System.mapLibraryName("plds4"));
         safeReload(libdir + System.mapLibraryName("sqlite3"));
         safeReload(libdir + System.mapLibraryName("nssutil3"));
         return true;
--- a/test/sun/security/pkcs11/Provider/Absolute.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/sun/security/pkcs11/Provider/Absolute.java	Mon Sep 19 10:11:34 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2016, 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
@@ -20,13 +20,16 @@
  * or visit www.oracle.com if you need additional information or have any
  * questions.
  */
-/**
+/*
  * @test
  * @bug 7003952 7191662
  * @library ..
+ * @modules jdk.crypto.pkcs11
  * @summary load DLLs and launch executables using fully qualified path
  */
-import java.security.*;
+
+import java.security.InvalidParameterException;
+import java.security.Provider;
 
 public class Absolute {
 
--- a/test/sun/security/pkcs11/SampleTest.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/sun/security/pkcs11/SampleTest.java	Mon Sep 19 10:11:34 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2016, 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
@@ -21,20 +21,16 @@
  * questions.
  */
 
-/**
+/*
  * @test
  * @bug 4000000
  * @summary XXX todo
  * @author Andreas Sterbenz
  * @library ..
+ * @modules jdk.crypto.pkcs11
  */
 
-import java.io.*;
-import java.util.*;
-
-import java.security.*;
-
-import javax.crypto.*;
+import java.security.Provider;
 
 public class SampleTest extends PKCS11Test {
 
--- a/test/sun/security/pkcs11/Secmod/AddPrivateKey.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/sun/security/pkcs11/Secmod/AddPrivateKey.java	Mon Sep 19 10:11:34 2016 -0700
@@ -21,12 +21,13 @@
  * questions.
  */
 
-/**
+/*
  * @test
  * @bug 6414980
  * @summary Test that the PKCS#11 KeyStore handles RSA, DSA, and EC keys
  * @author Andreas Sterbenz
  * @library ..
+ * @modules jdk.crypto.pkcs11
  * @run main/othervm AddPrivateKey
  * @run main/othervm AddPrivateKey sm policy
  */
--- a/test/sun/security/pkcs11/Secmod/AddTrustedCert.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/sun/security/pkcs11/Secmod/AddTrustedCert.java	Mon Sep 19 10:11:34 2016 -0700
@@ -21,12 +21,13 @@
  * questions.
  */
 
-/**
+/*
  * @test
  * @bug 6298106
  * @summary make sure we can add a trusted cert to the NSS KeyStore module
  * @author Andreas Sterbenz
  * @library ..
+ * @modules jdk.crypto.pkcs11
  * @run main/othervm AddTrustedCert
  * @run main/othervm AddTrustedCert sm policy
  */
--- a/test/sun/security/pkcs11/Secmod/Crypto.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/sun/security/pkcs11/Secmod/Crypto.java	Mon Sep 19 10:11:34 2016 -0700
@@ -21,12 +21,13 @@
  * questions.
  */
 
-/**
+/*
  * @test
  * @bug 6329006
  * @summary verify that NSS no-db mode works correctly
  * @author Andreas Sterbenz
  * @library ..
+ * @modules jdk.crypto.pkcs11
  * @run main/othervm Crypto
  * @run main/othervm Crypto sm policy
  */
--- a/test/sun/security/pkcs11/Secmod/GetPrivateKey.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/sun/security/pkcs11/Secmod/GetPrivateKey.java	Mon Sep 19 10:11:34 2016 -0700
@@ -21,13 +21,14 @@
  * questions.
  */
 
-/**
+/*
  * @test
  * @bug 6273877 6322208 6275523
  * @summary make sure we can access the NSS softtoken KeyStore
  *          and use a private key
  * @author Andreas Sterbenz
  * @library ..
+ * @modules jdk.crypto.pkcs11
  * @run main/othervm GetPrivateKey
  * @run main/othervm GetPrivateKey sm policy
  */
--- a/test/sun/security/pkcs11/Secmod/JksSetPrivateKey.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/sun/security/pkcs11/Secmod/JksSetPrivateKey.java	Mon Sep 19 10:11:34 2016 -0700
@@ -21,12 +21,13 @@
  * questions.
  */
 
-/**
+/*
  * @test
  * @bug 6269847
  * @summary store a NSS PKCS11 PrivateKeyEntry to JKS KeyStore throws confusing NPE
  * @author Wang Weijun
  * @library ..
+ * @modules jdk.crypto.pkcs11
  * @run main/othervm JksSetPrivateKey
  * @run main/othervm JksSetPrivateKey sm policy
  */
--- a/test/sun/security/pkcs11/Secmod/LoadKeystore.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/sun/security/pkcs11/Secmod/LoadKeystore.java	Mon Sep 19 10:11:34 2016 -0700
@@ -21,6 +21,16 @@
  * questions.
  */
 
+/*
+ * @test
+ * @bug 8048622 8134232
+ * @summary Checks that PKCS#11 keystore can't be loaded with wrong password
+ * @library ../
+ * @modules jdk.crypto.pkcs11
+ * @run main/othervm LoadKeystore
+ * @run main/othervm LoadKeystore sm policy
+ */
+
 import java.io.File;
 import java.io.IOException;
 import java.security.KeyStore;
@@ -30,14 +40,6 @@
 import java.security.UnrecoverableKeyException;
 import java.util.Collections;
 
-/*
- * @test
- * @bug 8048622 8134232
- * @summary Checks that PKCS#11 keystore can't be loaded with wrong password
- * @library ../
- * @run main/othervm LoadKeystore
- * @run main/othervm LoadKeystore sm policy
- */
 public class LoadKeystore extends SecmodTest {
 
     public static void main(String[] args) throws Exception {
--- a/test/sun/security/pkcs11/Secmod/TrustAnchors.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/sun/security/pkcs11/Secmod/TrustAnchors.java	Mon Sep 19 10:11:34 2016 -0700
@@ -21,12 +21,13 @@
  * questions.
  */
 
-/**
+/*
  * @test
  * @bug 6298106 6275523 6420252 8059627
  * @summary make sure we can access the NSS trust anchor module
  * @author Andreas Sterbenz
  * @library ..
+ * @modules jdk.crypto.pkcs11
  * @run main/othervm TrustAnchors
  * @run main/othervm TrustAnchors sm policy
  */
--- a/test/sun/security/pkcs11/SecureRandom/Basic.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/sun/security/pkcs11/SecureRandom/Basic.java	Mon Sep 19 10:11:34 2016 -0700
@@ -21,13 +21,14 @@
  * questions.
  */
 
-/**
+/*
  * @test
  * @bug 6246411
  * @summary basic test for PKCS#11 SecureRandom
  * @author Andreas Sterbenz
  * @library ..
  * @key randomness
+ * @modules jdk.crypto.pkcs11
  * @run main/othervm Basic
  * @run main/othervm Basic sm
  */
--- a/test/sun/security/pkcs11/SecureRandom/TestDeserialization.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/sun/security/pkcs11/SecureRandom/TestDeserialization.java	Mon Sep 19 10:11:34 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2016, 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
@@ -21,15 +21,22 @@
  * questions.
  */
 
-/**
+/*
  * @test
  * @bug 6837847
  * @summary Ensure a deserialized PKCS#11 SecureRandom is functional.
  * @library ..
+ * @modules jdk.crypto.pkcs11
  */
 
-import java.security.*;
-import java.io.*;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.security.NoSuchAlgorithmException;
+import java.security.Provider;
+import java.security.SecureRandom;
+import java.security.Security;
 
 public class TestDeserialization extends PKCS11Test {
 
--- a/test/sun/security/pkcs11/Serialize/SerializeProvider.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/sun/security/pkcs11/Serialize/SerializeProvider.java	Mon Sep 19 10:11:34 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2016, 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
@@ -21,18 +21,22 @@
  * questions.
  */
 
-/**
+/*
  * @test
  * @bug 4921802
  * @summary Test that the SunPKCS11 provider can be serialized
  * @author Andreas Sterbenz
  * @library ..
+ * @modules jdk.crypto.pkcs11
  */
 
-import java.io.*;
-import java.util.*;
-
-import java.security.*;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.InputStream;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.security.Provider;
+import java.security.Security;
 
 public class SerializeProvider extends PKCS11Test {
 
--- a/test/sun/security/pkcs11/Signature/ByteBuffers.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/sun/security/pkcs11/Signature/ByteBuffers.java	Mon Sep 19 10:11:34 2016 -0700
@@ -21,13 +21,14 @@
  * questions.
  */
 
-/**
+/*
  * @test
  * @bug 4856966
  * @summary Test the Signature.update(ByteBuffer) method
  * @author Andreas Sterbenz
  * @library ..
  * @key randomness
+ * @modules jdk.crypto.pkcs11
  * @run main/othervm ByteBuffers
  * @run main/othervm ByteBuffers sm
  */
--- a/test/sun/security/pkcs11/Signature/ReinitSignature.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/sun/security/pkcs11/Signature/ReinitSignature.java	Mon Sep 19 10:11:34 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2016, 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
@@ -21,13 +21,14 @@
  * questions.
  */
 
-/**
+/*
  * @test
  * @bug 4856966
  * @summary test that reinitializing Signatures works correctly
  * @author Andreas Sterbenz
  * @library ..
  * @key randomness
+ * @modules jdk.crypto.pkcs11
  * @run main ReinitSignature
  * @run main ReinitSignature
  * @run main ReinitSignature
@@ -330,9 +331,13 @@
  * @run main ReinitSignature
  */
 
-import java.util.*;
-
-import java.security.*;
+import java.security.KeyPair;
+import java.security.KeyPairGenerator;
+import java.security.PrivateKey;
+import java.security.Provider;
+import java.security.PublicKey;
+import java.security.Signature;
+import java.util.Random;
 
 public class ReinitSignature extends PKCS11Test {
 
--- a/test/sun/security/pkcs11/Signature/TestDSA.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/sun/security/pkcs11/Signature/TestDSA.java	Mon Sep 19 10:11:34 2016 -0700
@@ -21,13 +21,14 @@
  * questions.
  */
 
-/**
+/*
  * @test
  * @bug 4856966
  * @summary basic test of SHA1withDSA and RawDSA signing/verifying
  * @author Andreas Sterbenz
  * @library ..
  * @key randomness
+ * @modules jdk.crypto.pkcs11
  * @run main/othervm TestDSA
  * @run main/othervm TestDSA sm
  */
--- a/test/sun/security/pkcs11/Signature/TestDSAKeyLength.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/sun/security/pkcs11/Signature/TestDSAKeyLength.java	Mon Sep 19 10:11:34 2016 -0700
@@ -28,6 +28,7 @@
  * with unsupported key sizes
  * @library ..
  * @key randomness
+ * @modules jdk.crypto.pkcs11
  * @run main/othervm TestDSAKeyLength
  * @run main/othervm TestDSAKeyLength sm
  */
--- a/test/sun/security/pkcs11/Signature/TestRSAKeyLength.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/sun/security/pkcs11/Signature/TestRSAKeyLength.java	Mon Sep 19 10:11:34 2016 -0700
@@ -21,12 +21,13 @@
  * questions.
  */
 
-/**
+/*
  * @test %W% %E%
  * @bug 6695485
  * @summary Make sure initSign/initVerify() check RSA key lengths
  * @author Yu-Ching Valerie Peng
  * @library ..
+ * @modules jdk.crypto.pkcs11
  * @run main/othervm TestRSAKeyLength
  * @run main/othervm TestRSAKeyLength sm
  */
--- a/test/sun/security/pkcs11/ec/ReadCertificates.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/sun/security/pkcs11/ec/ReadCertificates.java	Mon Sep 19 10:11:34 2016 -0700
@@ -21,7 +21,7 @@
  * questions.
  */
 
-/**
+/*
  * @test
  * @bug 6405536 6414980 8051972
  * @summary Make sure that we can parse certificates using various named curves
@@ -29,6 +29,7 @@
  * @author Andreas Sterbenz
  * @library ..
  * @library ../../../../java/security/testlibrary
+ * @modules jdk.crypto.pkcs11
  * @run main/othervm ReadCertificates
  * @run main/othervm ReadCertificates sm policy
  */
--- a/test/sun/security/pkcs11/ec/ReadPKCS12.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/sun/security/pkcs11/ec/ReadPKCS12.java	Mon Sep 19 10:11:34 2016 -0700
@@ -21,7 +21,7 @@
  * questions.
  */
 
-/**
+/*
  * @test
  * @bug 6405536
  * @summary Verify that we can parse ECPrivateKeys from PKCS#12 and use them
@@ -29,6 +29,7 @@
  * @library ..
  * @library ../../../../java/security/testlibrary
  * @key randomness
+ * @modules jdk.crypto.pkcs11
  * @run main/othervm ReadPKCS12
  * @run main/othervm ReadPKCS12 sm policy
  */
--- a/test/sun/security/pkcs11/ec/TestECDH.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/sun/security/pkcs11/ec/TestECDH.java	Mon Sep 19 10:11:34 2016 -0700
@@ -21,13 +21,14 @@
  * questions.
  */
 
-/**
+/*
  * @test
  * @bug 6405536
  * @summary Basic known answer test for ECDH
  * @author Andreas Sterbenz
  * @library ..
  * @library ../../../../java/security/testlibrary
+ * @modules jdk.crypto.pkcs11
  * @run main/othervm TestECDH
  * @run main/othervm TestECDH sm policy
  */
--- a/test/sun/security/pkcs11/ec/TestECDH2.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/sun/security/pkcs11/ec/TestECDH2.java	Mon Sep 19 10:11:34 2016 -0700
@@ -21,7 +21,7 @@
  * questions.
  */
 
-/**
+/*
  * @test
  * @bug 6405536
  * @summary basic test of ECDSA signatures for P-256 and P-384 from the
@@ -29,6 +29,7 @@
  * @library ..
  * @library ../../../../java/security/testlibrary
  * @modules java.base/sun.security.util
+ *          jdk.crypto.pkcs11
  * @compile -XDignore.symbol.file TestECDH2.java
  * @run main/othervm TestECDH2
  * @run main/othervm TestECDH2 sm
--- a/test/sun/security/pkcs11/ec/TestECDSA.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/sun/security/pkcs11/ec/TestECDSA.java	Mon Sep 19 10:11:34 2016 -0700
@@ -21,7 +21,7 @@
  * questions.
  */
 
-/**
+/*
  * @test
  * @bug 6405536 8042967
  * @summary basic test of SHA1withECDSA and NONEwithECDSA signing/verifying
@@ -29,6 +29,7 @@
  * @library ..
  * @library ../../../../java/security/testlibrary
  * @key randomness
+ * @modules jdk.crypto.pkcs11
  * @run main/othervm TestECDSA
  * @run main/othervm TestECDSA sm policy
  */
--- a/test/sun/security/pkcs11/ec/TestECDSA2.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/sun/security/pkcs11/ec/TestECDSA2.java	Mon Sep 19 10:11:34 2016 -0700
@@ -21,7 +21,7 @@
  * questions.
  */
 
-/**
+/*
  * @test
  * @bug 6405536
  * @summary basic test of ECDSA signatures for P-256 and P-384 from the
@@ -29,6 +29,7 @@
  * @library ..
  * @library ../../../../java/security/testlibrary
  * @modules java.base/sun.security.util
+ *          jdk.crypto.pkcs11
  * @compile -XDignore.symbol.file TestECDSA2.java
  * @run main/othervm TestECDSA2
  * @run main/othervm TestECDSA2 sm
--- a/test/sun/security/pkcs11/ec/TestECGenSpec.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/sun/security/pkcs11/ec/TestECGenSpec.java	Mon Sep 19 10:11:34 2016 -0700
@@ -21,12 +21,13 @@
  * questions.
  */
 
-/**
+/*
  * @test
  * @bug 6405536
  * @summary Verify that we can use ECGenParameterSpec
  * @author Andreas Sterbenz
  * @library ..
+ * @modules jdk.crypto.pkcs11
  * @run main/othervm TestECGenSpec
  * @run main/othervm TestECGenSpec sm
  */
--- a/test/sun/security/pkcs11/ec/TestKeyFactory.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/sun/security/pkcs11/ec/TestKeyFactory.java	Mon Sep 19 10:11:34 2016 -0700
@@ -21,12 +21,13 @@
  * questions.
  */
 
-/**
+/*
  * @test
  * @bug 6405536
  * @summary Test the P11ECKeyFactory
  * @author Andreas Sterbenz
  * @library ..
+ * @modules jdk.crypto.pkcs11
  * @run main/othervm TestKeyFactory
  * @run main/othervm TestKeyFactory sm
  */
Binary file test/sun/security/pkcs11/nss/lib/windows-amd64/freebl3.chk has changed
Binary file test/sun/security/pkcs11/nss/lib/windows-amd64/freebl3.dll has changed
Binary file test/sun/security/pkcs11/nss/lib/windows-amd64/libnspr4.dll has changed
Binary file test/sun/security/pkcs11/nss/lib/windows-amd64/libnspr4.lib has changed
Binary file test/sun/security/pkcs11/nss/lib/windows-amd64/libplc4.dll has changed
Binary file test/sun/security/pkcs11/nss/lib/windows-amd64/libplc4.lib has changed
Binary file test/sun/security/pkcs11/nss/lib/windows-amd64/libplds4.dll has changed
Binary file test/sun/security/pkcs11/nss/lib/windows-amd64/libplds4.lib has changed
Binary file test/sun/security/pkcs11/nss/lib/windows-amd64/nspr4.dll has changed
Binary file test/sun/security/pkcs11/nss/lib/windows-amd64/nspr4.lib has changed
Binary file test/sun/security/pkcs11/nss/lib/windows-amd64/nss3.dll has changed
Binary file test/sun/security/pkcs11/nss/lib/windows-amd64/nss3.lib has changed
Binary file test/sun/security/pkcs11/nss/lib/windows-amd64/nssckbi.dll has changed
Binary file test/sun/security/pkcs11/nss/lib/windows-amd64/nssdbm3.chk has changed
Binary file test/sun/security/pkcs11/nss/lib/windows-amd64/nssdbm3.dll has changed
Binary file test/sun/security/pkcs11/nss/lib/windows-amd64/nssutil3.dll has changed
Binary file test/sun/security/pkcs11/nss/lib/windows-amd64/nssutil3.lib has changed
Binary file test/sun/security/pkcs11/nss/lib/windows-amd64/plc4.dll has changed
Binary file test/sun/security/pkcs11/nss/lib/windows-amd64/plc4.lib has changed
Binary file test/sun/security/pkcs11/nss/lib/windows-amd64/plds4.dll has changed
Binary file test/sun/security/pkcs11/nss/lib/windows-amd64/plds4.lib has changed
Binary file test/sun/security/pkcs11/nss/lib/windows-amd64/softokn3.chk has changed
Binary file test/sun/security/pkcs11/nss/lib/windows-amd64/softokn3.dll has changed
Binary file test/sun/security/pkcs11/nss/lib/windows-amd64/sqlite3.dll has changed
Binary file test/sun/security/pkcs11/nss/lib/windows-amd64/ssl3.dll has changed
Binary file test/sun/security/pkcs11/nss/lib/windows-amd64/ssl3.lib has changed
Binary file test/sun/security/pkcs11/nss/lib/windows-i586/freebl3.chk has changed
Binary file test/sun/security/pkcs11/nss/lib/windows-i586/freebl3.dll has changed
Binary file test/sun/security/pkcs11/nss/lib/windows-i586/libnspr4.dll has changed
Binary file test/sun/security/pkcs11/nss/lib/windows-i586/libnspr4.lib has changed
Binary file test/sun/security/pkcs11/nss/lib/windows-i586/libplc4.dll has changed
Binary file test/sun/security/pkcs11/nss/lib/windows-i586/libplc4.lib has changed
Binary file test/sun/security/pkcs11/nss/lib/windows-i586/libplds4.dll has changed
Binary file test/sun/security/pkcs11/nss/lib/windows-i586/libplds4.lib has changed
Binary file test/sun/security/pkcs11/nss/lib/windows-i586/nspr4.dll has changed
Binary file test/sun/security/pkcs11/nss/lib/windows-i586/nspr4.lib has changed
Binary file test/sun/security/pkcs11/nss/lib/windows-i586/nss3.dll has changed
Binary file test/sun/security/pkcs11/nss/lib/windows-i586/nss3.lib has changed
Binary file test/sun/security/pkcs11/nss/lib/windows-i586/nssckbi.dll has changed
Binary file test/sun/security/pkcs11/nss/lib/windows-i586/nssdbm3.chk has changed
Binary file test/sun/security/pkcs11/nss/lib/windows-i586/nssdbm3.dll has changed
Binary file test/sun/security/pkcs11/nss/lib/windows-i586/nssutil3.dll has changed
Binary file test/sun/security/pkcs11/nss/lib/windows-i586/nssutil3.lib has changed
Binary file test/sun/security/pkcs11/nss/lib/windows-i586/plc4.dll has changed
Binary file test/sun/security/pkcs11/nss/lib/windows-i586/plc4.lib has changed
Binary file test/sun/security/pkcs11/nss/lib/windows-i586/plds4.dll has changed
Binary file test/sun/security/pkcs11/nss/lib/windows-i586/plds4.lib has changed
Binary file test/sun/security/pkcs11/nss/lib/windows-i586/softokn3.chk has changed
Binary file test/sun/security/pkcs11/nss/lib/windows-i586/softokn3.dll has changed
Binary file test/sun/security/pkcs11/nss/lib/windows-i586/sqlite3.dll has changed
Binary file test/sun/security/pkcs11/nss/lib/windows-i586/ssl3.dll has changed
Binary file test/sun/security/pkcs11/nss/lib/windows-i586/ssl3.lib has changed
Binary file test/sun/security/pkcs11/nss/src/nss-3.16-with-nspr-4.10.4.tar.gz has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/sun/security/pkcs11/nss/src/nss-3.16-with-nspr-4.10.4.tar.gz.sha256	Mon Sep 19 10:11:34 2016 -0700
@@ -0,0 +1,1 @@
+9d23633683ab3cea14519a22a997bc7f5d8d9664b6342df492c194966184ce0d  nss-3.16-with-nspr-4.10.4.tar.gz
Binary file test/sun/security/pkcs11/nss/src/nss-3.16_nspr-4.10_src.tar.gz has changed
--- a/test/sun/security/pkcs11/nss/src/nss-3.16_nspr-4.10_src.tar.gz.sha256	Wed Sep 14 15:29:23 2016 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-d2374795528f9cf36de07bf7c77d8c8414bb5b4da12ee7c78a57ec90d68e3706  nss-3.16_nspr-4.10_src.tar.gz
--- a/test/sun/security/pkcs11/rsa/KeyWrap.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/sun/security/pkcs11/rsa/KeyWrap.java	Mon Sep 19 10:11:34 2016 -0700
@@ -21,13 +21,14 @@
  * questions.
  */
 
-/**
+/*
  * @test
  * @bug 6231216
  * @summary Verify key wrapping (of extractable keys) works for RSA/PKCS1
  * @author Andreas Sterbenz
  * @library ..
  * @key randomness
+ * @modules jdk.crypto.pkcs11
  * @run main/othervm KeyWrap
  * @run main/othervm KeyWrap sm
  */
--- a/test/sun/security/pkcs11/rsa/TestCACerts.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/sun/security/pkcs11/rsa/TestCACerts.java	Mon Sep 19 10:11:34 2016 -0700
@@ -21,13 +21,14 @@
  * questions.
  */
 
-/**
+/*
  * @test
  * @bug 4856966
  * @summary Test the new RSA provider can verify all the RSA certs in the cacerts file
  * @author Andreas Sterbenz
  * @library ..
  * @library ../../../../java/security/testlibrary
+ * @modules jdk.crypto.pkcs11
  * @run main/othervm TestCACerts
  * @run main/othervm TestCACerts sm TestCACerts.policy
  */
--- a/test/sun/security/pkcs11/rsa/TestKeyFactory.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/sun/security/pkcs11/rsa/TestKeyFactory.java	Mon Sep 19 10:11:34 2016 -0700
@@ -21,12 +21,13 @@
  * questions.
  */
 
-/**
+/*
  * @test
  * @bug 4856966
  * @summary Test KeyFactory of the new RSA provider
  * @author Andreas Sterbenz
  * @library ..
+ * @modules jdk.crypto.pkcs11
  * @run main/othervm TestKeyFactory
  * @run main/othervm TestKeyFactory sm rsakeys.ks.policy
  */
--- a/test/sun/security/pkcs11/rsa/TestKeyPairGenerator.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/sun/security/pkcs11/rsa/TestKeyPairGenerator.java	Mon Sep 19 10:11:34 2016 -0700
@@ -21,7 +21,7 @@
  * questions.
  */
 
-/**
+/*
  * @test
  * @bug 4856966
  * @summary Verify that the RSA KeyPairGenerator works (use -Dseed=X to set PRNG seed)
@@ -29,6 +29,7 @@
  * @library ..
  * @library /lib/testlibrary
  * @build jdk.testlibrary.*
+ * @modules jdk.crypto.pkcs11
  * @run main/othervm -Djava.security.debug=sunpkcs11 TestKeyPairGenerator
  * @run main/othervm -Djava.security.debug=sunpkcs11 TestKeyPairGenerator
  *                                                   sm TestKeyPairGenerator.policy
--- a/test/sun/security/pkcs11/rsa/TestSignatures.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/sun/security/pkcs11/rsa/TestSignatures.java	Mon Sep 19 10:11:34 2016 -0700
@@ -21,13 +21,14 @@
  * questions.
  */
 
-/**
+/*
  * @test
  * @bug 4856966
  * @summary Test signing/verifying using all the signature algorithms
  * @author Andreas Sterbenz
  * @library ..
  * @key randomness
+ * @modules jdk.crypto.pkcs11
  * @run main/othervm TestSignatures
  * @run main/othervm TestSignatures sm rsakeys.ks.policy
  */
--- a/test/sun/security/pkcs11/sslecc/ClientJSSEServerJSSE.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/sun/security/pkcs11/sslecc/ClientJSSEServerJSSE.java	Mon Sep 19 10:11:34 2016 -0700
@@ -33,6 +33,7 @@
  * @author Andreas Sterbenz
  * @library ..
  * @library ../../../../java/security/testlibrary
+ * @modules jdk.crypto.pkcs11
  * @run main/othervm -Djdk.tls.namedGroups="secp256r1,sect193r1"
  *      ClientJSSEServerJSSE
  * @run main/othervm -Djdk.tls.namedGroups="secp256r1,sect193r1"
--- a/test/sun/security/pkcs11/tls/TestKeyMaterial.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/sun/security/pkcs11/tls/TestKeyMaterial.java	Mon Sep 19 10:11:34 2016 -0700
@@ -21,13 +21,14 @@
  * questions.
  */
 
-/**
+/*
  * @test
  * @bug 6316539
  * @summary Known-answer-test for TlsKeyMaterial generator
  * @author Andreas Sterbenz
  * @library ..
  * @modules java.base/sun.security.internal.spec
+ *          jdk.crypto.pkcs11
  * @run main/othervm TestKeyMaterial
  * @run main/othervm TestKeyMaterial sm policy
  */
--- a/test/sun/security/pkcs11/tls/TestLeadingZeroesP11.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/sun/security/pkcs11/tls/TestLeadingZeroesP11.java	Mon Sep 19 10:11:34 2016 -0700
@@ -27,6 +27,7 @@
  * @summary Need to strip leading zeros in TlsPremasterSecret of DHKeyAgreement
  * @library ..
  * @author Pasi Eronen
+ * @modules jdk.crypto.pkcs11
  * @run main/othervm TestLeadingZeroesP11
  * @run main/othervm TestLeadingZeroesP11 sm
  */
--- a/test/sun/security/pkcs11/tls/TestMasterSecret.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/sun/security/pkcs11/tls/TestMasterSecret.java	Mon Sep 19 10:11:34 2016 -0700
@@ -21,7 +21,7 @@
  * questions.
  */
 
-/**
+/*
  * @test
  * @bug 6316539
  * @summary Known-answer-test for TlsMasterSecret generator
@@ -29,6 +29,7 @@
  * @library ..
  * @modules java.base/sun.security.internal.interfaces
  *          java.base/sun.security.internal.spec
+ *          jdk.crypto.pkcs11
  * @run main/othervm TestMasterSecret
  * @run main/othervm TestMasterSecret sm TestMasterSecret.policy
  */
--- a/test/sun/security/pkcs11/tls/TestPRF.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/sun/security/pkcs11/tls/TestPRF.java	Mon Sep 19 10:11:34 2016 -0700
@@ -21,13 +21,14 @@
  * questions.
  */
 
-/**
+/*
  * @test
  * @bug 6316539 6345251
  * @summary Basic known-answer-test for TlsPrf
  * @author Andreas Sterbenz
  * @library ..
  * @modules java.base/sun.security.internal.spec
+ *          jdk.crypto.pkcs11
  * @run main/othervm TestPRF
  * @run main/othervm TestPRF sm policy
  */
--- a/test/sun/security/pkcs11/tls/TestPremaster.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/sun/security/pkcs11/tls/TestPremaster.java	Mon Sep 19 10:11:34 2016 -0700
@@ -21,13 +21,14 @@
  * questions.
  */
 
-/**
+/*
  * @test
  * @bug 6316539
  * @summary Basic tests for TlsRsaPremasterSecret generator
  * @author Andreas Sterbenz
  * @library ..
  * @modules java.base/sun.security.internal.spec
+ *          jdk.crypto.pkcs11
  * @run main/othervm TestPremaster
  * @run main/othervm TestPremaster sm policy
  */
--- a/test/sun/security/provider/FileInputStreamPool/FileInputStreamPoolTest.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/sun/security/provider/FileInputStreamPool/FileInputStreamPoolTest.java	Mon Sep 19 10:11:34 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2016, 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
@@ -69,7 +69,7 @@
         // make JVM process References
         System.gc();
         // help ReferenceHandler thread enqueue References
-        while (TestProxy.Reference_tryHandlePending(false)) {}
+        while (TestProxy.Reference_waitForReferenceProcessing()) { }
         // help run Finalizers
         System.runFinalization();
     }
@@ -103,11 +103,11 @@
     /**
      * A proxy for (package)private static methods:
      *   sun.security.provider.FileInputStreamPool.getInputStream
-     *   java.lang.ref.Reference.tryHandlePending
+     *   java.lang.ref.Reference.waitForReferenceProcessing
      */
     static class TestProxy {
         private static final Method getInputStreamMethod;
-        private static final Method tryHandlePendingMethod;
+        private static final Method waitForReferenceProcessingMethod;
 
         static {
             try {
@@ -118,9 +118,9 @@
                         "getInputStream", File.class);
                 getInputStreamMethod.setAccessible(true);
 
-                tryHandlePendingMethod = Reference.class.getDeclaredMethod(
-                    "tryHandlePending", boolean.class);
-                tryHandlePendingMethod.setAccessible(true);
+                waitForReferenceProcessingMethod =
+                    Reference.class.getDeclaredMethod("waitForReferenceProcessing");
+                waitForReferenceProcessingMethod.setAccessible(true);
             } catch (Exception e) {
                 throw new Error(e);
             }
@@ -146,13 +146,14 @@
             }
         }
 
-        static boolean Reference_tryHandlePending(boolean waitForNotify) {
+        static boolean Reference_waitForReferenceProcessing() {
             try {
-                return (boolean) tryHandlePendingMethod
-                    .invoke(null, waitForNotify);
+                return (boolean) waitForReferenceProcessingMethod.invoke(null);
             } catch (InvocationTargetException e) {
                 Throwable te = e.getTargetException();
-                if (te instanceof RuntimeException) {
+                if (te instanceof InterruptedException) {
+                    return true;
+                } else if (te instanceof RuntimeException) {
                     throw (RuntimeException) te;
                 } else if (te instanceof Error) {
                     throw (Error) te;
--- a/test/sun/security/ssl/SSLEngineImpl/SSLEngineBadBufferArrayAccess.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/sun/security/ssl/SSLEngineImpl/SSLEngineBadBufferArrayAccess.java	Mon Sep 19 10:11:34 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2016, 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
@@ -83,6 +83,8 @@
 import java.net.*;
 import java.security.*;
 import java.nio.*;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
 
 public class SSLEngineBadBufferArrayAccess {
 
@@ -103,9 +105,6 @@
     private static boolean debug = false;
     private SSLContext sslc;
     private SSLEngine serverEngine;     // server-side SSLEngine
-    private SSLSocket sslSocket;        // client-side socket
-    private ServerSocket serverSocket;  // server-side Socket, generates the...
-    private Socket socket;              // server-side socket that will read
 
     private final byte[] serverMsg = "Hi there Client, I'm a Server".getBytes();
     private final byte[] clientMsg = "Hello Server, I'm a Client".getBytes();
@@ -137,6 +136,21 @@
             + "/" + trustStoreFile;
 
     /*
+     * Is the server ready to serve?
+     */
+    private static final CountDownLatch serverCondition = new CountDownLatch(1);
+
+    /*
+     * Is the client ready to handshake?
+     */
+    private static final CountDownLatch clientCondition = new CountDownLatch(1);
+
+    /*
+     * What's the server port?  Use any free port by default
+     */
+    private volatile int serverPort = 0;
+
+    /*
      * Main entry point for this test.
      */
     public static void main(String args[]) throws Exception {
@@ -171,8 +185,13 @@
 
         char[] passphrase = "passphrase".toCharArray();
 
-        ks.load(new FileInputStream(keyFilename), passphrase);
-        ts.load(new FileInputStream(trustFilename), passphrase);
+        try (FileInputStream fis = new FileInputStream(keyFilename)) {
+            ks.load(fis, passphrase);
+        }
+
+        try (FileInputStream fis = new FileInputStream(trustFilename)) {
+            ts.load(fis, passphrase);
+        }
 
         KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
         kmf.init(ks, passphrase);
@@ -207,127 +226,177 @@
     private void runTest(boolean direct) throws Exception {
         boolean serverClose = direct;
 
-        serverSocket = new ServerSocket(0);
-        int port = serverSocket.getLocalPort();
-        Thread thread = createClientThread(port, serverClose);
+        ServerSocket serverSocket = new ServerSocket(0);
+        serverPort = serverSocket.getLocalPort();
+
+        // Signal the client, the server is ready to accept connection.
+        serverCondition.countDown();
+
+        Thread clientThread = runClient(serverClose);
+
+        // Try to accept a connection in 30 seconds.
+        Socket socket;
+        try {
+            serverSocket.setSoTimeout(30000);
+            socket = (Socket) serverSocket.accept();
+        } catch (SocketTimeoutException ste) {
+            serverSocket.close();
+
+            // Ignore the test case if no connection within 30 seconds.
+            System.out.println(
+                "No incoming client connection in 30 seconds. " +
+                "Ignore in server side.");
+            return;
+        }
+
+        // handle the connection
+        try {
+            // Is it the expected client connection?
+            //
+            // Naughty test cases or third party routines may try to
+            // connection to this server port unintentionally.  In
+            // order to mitigate the impact of unexpected client
+            // connections and avoid intermittent failure, it should
+            // be checked that the accepted connection is really linked
+            // to the expected client.
+            boolean clientIsReady =
+                    clientCondition.await(30L, TimeUnit.SECONDS);
 
-        socket = serverSocket.accept();
+            if (clientIsReady) {
+                // Run the application in server side.
+                runServerApplication(socket, direct, serverClose);
+            } else {    // Otherwise, ignore
+                // We don't actually care about plain socket connections
+                // for TLS communication testing generally.  Just ignore
+                // the test if the accepted connection is not linked to
+                // the expected client or the client connection timeout
+                // in 30 seconds.
+                System.out.println(
+                        "The client is not the expected one or timeout. " +
+                        "Ignore in server side.");
+            }
+        } catch (Exception e) {
+            System.out.println("Server died ...");
+            e.printStackTrace(System.out);
+            serverException = e;
+        } finally {
+            socket.close();
+            serverSocket.close();
+        }
+
+        clientThread.join();
+
+        if (clientException != null || serverException != null) {
+            throw new RuntimeException("Test failed");
+        }
+    }
+
+    /*
+     * Define the server side application of the test for the specified socket.
+     */
+    void runServerApplication(Socket socket, boolean direct,
+            boolean serverClose) throws Exception {
+
         socket.setSoTimeout(500);
-        serverSocket.close();
 
         createSSLEngine();
         createBuffers(direct);
 
-        try {
-            boolean closed = false;
+        boolean closed = false;
+
+        InputStream is = socket.getInputStream();
+        OutputStream os = socket.getOutputStream();
+
+        SSLEngineResult serverResult;   // results from last operation
+
+        /*
+         * Examining the SSLEngineResults could be much more involved,
+         * and may alter the overall flow of the application.
+         *
+         * For example, if we received a BUFFER_OVERFLOW when trying
+         * to write to the output pipe, we could reallocate a larger
+         * pipe, but instead we wait for the peer to drain it.
+         */
+        byte[] inbound = new byte[8192];
+        byte[] outbound = new byte[8192];
 
-            InputStream is = socket.getInputStream();
-            OutputStream os = socket.getOutputStream();
+        while (!isEngineClosed(serverEngine)) {
+            int len = 0;
+
+            // Inbound data
+            log("================");
 
-            SSLEngineResult serverResult;   // results from last operation
+            // Read from the Client side.
+            try {
+                len = is.read(inbound);
+                if (len == -1) {
+                    throw new Exception("Unexpected EOF");
+                }
+                cTOs.put(inbound, 0, len);
+            } catch (SocketTimeoutException ste) {
+                // swallow.  Nothing yet, probably waiting on us.
+                System.out.println("Warning: " + ste);
+            }
+
+            cTOs.flip();
 
-            /*
-             * Examining the SSLEngineResults could be much more involved,
-             * and may alter the overall flow of the application.
-             *
-             * For example, if we received a BUFFER_OVERFLOW when trying
-             * to write to the output pipe, we could reallocate a larger
-             * pipe, but instead we wait for the peer to drain it.
-             */
-            byte[] inbound = new byte[8192];
-            byte[] outbound = new byte[8192];
+            serverResult = serverEngine.unwrap(cTOs, serverIn);
+            log("server unwrap: ", serverResult);
+            runDelegatedTasks(serverResult, serverEngine);
+            cTOs.compact();
+
+            // Outbound data
+            log("----");
+
+            serverResult = serverEngine.wrap(serverOut, sTOc);
+            log("server wrap: ", serverResult);
+            runDelegatedTasks(serverResult, serverEngine);
+
+            sTOc.flip();
+
+            if ((len = sTOc.remaining()) != 0) {
+                sTOc.get(outbound, 0, len);
+                os.write(outbound, 0, len);
+                // Give the other side a chance to process
+            }
+
+            sTOc.compact();
 
-            while (!isEngineClosed(serverEngine)) {
-                int len = 0;
-
-                // Inbound data
-                log("================");
+            if (!closed && (serverOut.remaining() == 0)) {
+                closed = true;
 
-                // Read from the Client side.
-                try {
-                    len = is.read(inbound);
-                    if (len == -1) {
-                        throw new Exception("Unexpected EOF");
-                    }
-                    cTOs.put(inbound, 0, len);
-                } catch (SocketTimeoutException ste) {
-                    // swallow.  Nothing yet, probably waiting on us.
+                /*
+                 * We'll alternate initiatating the shutdown.
+                 * When the server initiates, it will take one more
+                 * loop, but tests the orderly shutdown.
+                 */
+                if (serverClose) {
+                    serverEngine.closeOutbound();
+                }
+            }
+
+            if (closed && isEngineClosed(serverEngine)) {
+                serverIn.flip();
+
+                /*
+                 * A sanity check to ensure we got what was sent.
+                 */
+                if (serverIn.remaining() != clientMsg.length) {
+                    throw new Exception("Client: Data length error -" +
+                        " IF THIS FAILS, PLEASE REPORT THIS TO THE" +
+                        " SECURITY TEAM.  WE HAVE BEEN UNABLE TO" +
+                        " RELIABLY DUPLICATE.");
                 }
 
-                cTOs.flip();
-
-                serverResult = serverEngine.unwrap(cTOs, serverIn);
-                log("server unwrap: ", serverResult);
-                runDelegatedTasks(serverResult, serverEngine);
-                cTOs.compact();
-
-                // Outbound data
-                log("----");
-
-                serverResult = serverEngine.wrap(serverOut, sTOc);
-                log("server wrap: ", serverResult);
-                runDelegatedTasks(serverResult, serverEngine);
-
-                sTOc.flip();
-
-                if ((len = sTOc.remaining()) != 0) {
-                    sTOc.get(outbound, 0, len);
-                    os.write(outbound, 0, len);
-                    // Give the other side a chance to process
-                }
-
-                sTOc.compact();
-
-                if (!closed && (serverOut.remaining() == 0)) {
-                    closed = true;
-
-                    /*
-                     * We'll alternate initiatating the shutdown.
-                     * When the server initiates, it will take one more
-                     * loop, but tests the orderly shutdown.
-                     */
-                    if (serverClose) {
-                        serverEngine.closeOutbound();
+                for (int i = 0; i < clientMsg.length; i++) {
+                    if (clientMsg[i] != serverIn.get()) {
+                        throw new Exception("Client: Data content error -" +
+                        " IF THIS FAILS, PLEASE REPORT THIS TO THE" +
+                        " SECURITY TEAM.  WE HAVE BEEN UNABLE TO" +
+                        " RELIABLY DUPLICATE.");
                     }
                 }
-
-                if (closed && isEngineClosed(serverEngine)) {
-                    serverIn.flip();
-
-                    /*
-                     * A sanity check to ensure we got what was sent.
-                     */
-                    if (serverIn.remaining() != clientMsg.length) {
-                        throw new Exception("Client: Data length error -" +
-                            " IF THIS FAILS, PLEASE REPORT THIS TO THE" +
-                            " SECURITY TEAM.  WE HAVE BEEN UNABLE TO" +
-                            " RELIABLY DUPLICATE.");
-                    }
-
-                    for (int i = 0; i < clientMsg.length; i++) {
-                        if (clientMsg[i] != serverIn.get()) {
-                            throw new Exception("Client: Data content error -" +
-                            " IF THIS FAILS, PLEASE REPORT THIS TO THE" +
-                            " SECURITY TEAM.  WE HAVE BEEN UNABLE TO" +
-                            " RELIABLY DUPLICATE.");
-                        }
-                    }
-                    serverIn.compact();
-                }
-            }
-            return;
-        } catch (Exception e) {
-            serverException = e;
-        } finally {
-            socket.close();
-
-            // Wait for the client to join up with us.
-            thread.join();
-            if (serverException != null) {
-                throw serverException;
-            }
-            if (clientException != null) {
-                throw clientException;
+                serverIn.compact();
             }
         }
     }
@@ -336,57 +405,114 @@
      * Create a client thread which does simple SSLSocket operations.
      * We'll write and read one data packet.
      */
-    private Thread createClientThread(final int port,
-            final boolean serverClose) throws Exception {
+    private Thread runClient(final boolean serverClose)
+            throws Exception {
 
         Thread t = new Thread("ClientThread") {
 
             @Override
             public void run() {
                 try {
-                    Thread.sleep(1000);  // Give server time to finish setup.
-
-                    sslSocket = (SSLSocket) sslc.getSocketFactory().
-                            createSocket("localhost", port);
-                    OutputStream os = sslSocket.getOutputStream();
-                    InputStream is = sslSocket.getInputStream();
-
-                    // write(byte[]) goes in one shot.
-                    os.write(clientMsg);
-
-                    byte[] inbound = new byte[2048];
-                    int pos = 0;
-
-                    int len;
-done:
-                    while ((len = is.read(inbound, pos, 2048 - pos)) != -1) {
-                        pos += len;
-                        // Let the client do the closing.
-                        if ((pos == serverMsg.length) && !serverClose) {
-                            sslSocket.close();
-                            break done;
-                        }
-                    }
-
-                    if (pos != serverMsg.length) {
-                        throw new Exception("Client:  Data length error");
-                    }
-
-                    for (int i = 0; i < serverMsg.length; i++) {
-                        if (inbound[i] != serverMsg[i]) {
-                            throw new Exception("Client:  Data content error");
-                        }
-                    }
+                    doClientSide(serverClose);
                 } catch (Exception e) {
+                    System.out.println("Client died ...");
+                    e.printStackTrace(System.out);
                     clientException = e;
                 }
             }
         };
+
         t.start();
         return t;
     }
 
     /*
+     * Define the client side of the test.
+     */
+    void doClientSide(boolean serverClose) throws Exception {
+        // Wait for server to get started.
+        //
+        // The server side takes care of the issue if the server cannot
+        // get started in 90 seconds.  The client side would just ignore
+        // the test case if the serer is not ready.
+        boolean serverIsReady =
+                serverCondition.await(90L, TimeUnit.SECONDS);
+        if (!serverIsReady) {
+            System.out.println(
+                    "The server is not ready yet in 90 seconds. " +
+                    "Ignore in client side.");
+            return;
+        }
+
+        SSLSocketFactory sslsf = sslc.getSocketFactory();
+        try (SSLSocket sslSocket = (SSLSocket)sslsf.createSocket()) {
+            try {
+                sslSocket.connect(
+                        new InetSocketAddress("localhost", serverPort), 15000);
+            } catch (IOException ioe) {
+                // The server side may be impacted by naughty test cases or
+                // third party routines, and cannot accept connections.
+                //
+                // Just ignore the test if the connection cannot be
+                // established.
+                System.out.println(
+                        "Cannot make a connection in 15 seconds. " +
+                        "Ignore in client side.");
+                return;
+            }
+
+            // OK, here the client and server get connected.
+
+            // Signal the server, the client is ready to communicate.
+            clientCondition.countDown();
+
+            // There is still a chance in theory that the server thread may
+            // wait client-ready timeout and then quit.  The chance should
+            // be really rare so we don't consider it until it becomes a
+            // real problem.
+
+            // Run the application in client side.
+            runClientApplication(sslSocket, serverClose);
+        }
+    }
+
+    /*
+     * Define the server side application of the test for the specified socket.
+     */
+    void runClientApplication(SSLSocket sslSocket, boolean serverClose)
+            throws Exception {
+
+        OutputStream os = sslSocket.getOutputStream();
+        InputStream is = sslSocket.getInputStream();
+
+        // write(byte[]) goes in one shot.
+        os.write(clientMsg);
+
+        byte[] inbound = new byte[2048];
+        int pos = 0;
+
+        int len;
+        while ((len = is.read(inbound, pos, 2048 - pos)) != -1) {
+            pos += len;
+            // Let the client do the closing.
+            if ((pos == serverMsg.length) && !serverClose) {
+                sslSocket.close();
+                break;
+            }
+        }
+
+        if (pos != serverMsg.length) {
+            throw new Exception("Client:  Data length error");
+        }
+
+        for (int i = 0; i < serverMsg.length; i++) {
+            if (inbound[i] != serverMsg[i]) {
+                throw new Exception("Client:  Data content error");
+            }
+        }
+    }
+
+    /*
      * Using the SSLContext created during object creation,
      * create/configure the SSLEngines we'll use for this test.
      */
--- a/test/sun/security/tools/keytool/DefaultSignatureAlgorithm.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/sun/security/tools/keytool/DefaultSignatureAlgorithm.java	Mon Sep 19 10:11:34 2016 -0700
@@ -26,6 +26,7 @@
  * @bug 8138766
  * @summary New default -sigalg for keytool
  * @modules java.base/sun.security.tools.keytool
+ * @modules jdk.crypto.ec
  * @run main/othervm DefaultSignatureAlgorithm RSA 1024 SHA256withRSA
  * @run main/othervm DefaultSignatureAlgorithm RSA 3072 SHA256withRSA
  * @run main/othervm DefaultSignatureAlgorithm RSA 3073 SHA384withRSA
--- a/test/sun/security/x509/URICertStore/ExtensionsWithLDAP.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/sun/security/x509/URICertStore/ExtensionsWithLDAP.java	Mon Sep 19 10:11:34 2016 -0700
@@ -23,6 +23,15 @@
  * questions.
  */
 
+/*
+ * @test
+ * @bug 8134708
+ * @summary Check if LDAP resources from CRLDP and AIA extensions can be loaded
+ * @run main/othervm ExtensionsWithLDAP CRLDP ldap.host.for.crldp
+ * @modules jdk.security.auth
+ * @run main/othervm ExtensionsWithLDAP AIA ldap.host.for.aia
+ */
+
 import java.io.ByteArrayInputStream;
 import java.io.File;
 import java.io.IOException;
@@ -45,13 +54,6 @@
 import java.util.Set;
 import java.util.function.Consumer;
 
-/*
- * @test
- * @bug 8134708
- * @summary Check if LDAP resources from CRLDP and AIA extensions can be loaded
- * @run main/othervm ExtensionsWithLDAP CRLDP ldap.host.for.crldp
- * @run main/othervm ExtensionsWithLDAP AIA ldap.host.for.aia
- */
 public class ExtensionsWithLDAP {
 
     /*
--- a/test/sun/security/x509/X509CertImpl/V3Certificate.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/sun/security/x509/X509CertImpl/V3Certificate.java	Mon Sep 19 10:11:34 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2016, 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
@@ -21,6 +21,17 @@
  * questions.
  */
 
+/*
+ * @test
+ * @bug 8049237
+ * @modules java.base/sun.security.x509
+ *          java.base/sun.security.util
+ *          jdk.crypto.ec
+ * @summary This test generates V3 certificate with all the supported
+ * extensions. Writes back the generated certificate in to a file and checks for
+ * equality with the original certificate.
+ */
+
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.FileOutputStream;
@@ -28,7 +39,6 @@
 import java.io.InputStream;
 import java.io.OutputStream;
 import java.io.PrintWriter;
-import static java.lang.System.out;
 import java.security.InvalidKeyException;
 import java.security.KeyPair;
 import java.security.KeyPairGenerator;
@@ -50,15 +60,8 @@
 import sun.security.util.ObjectIdentifier;
 import sun.security.x509.*;
 
-/**
- * @test
- * @bug 8049237
- * @modules java.base/sun.security.x509
- *          java.base/sun.security.util
- * @summary This test generates V3 certificate with all the supported
- * extensions. Writes back the generated certificate in to a file and checks for
- * equality with the original certificate.
- */
+import static java.lang.System.out;
+
 public class V3Certificate {
 
     public static final String V3_FILE = "certV3";
--- a/test/sun/tools/jhsdb/BasicLauncherTest.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/sun/tools/jhsdb/BasicLauncherTest.java	Mon Sep 19 10:11:34 2016 -0700
@@ -31,12 +31,10 @@
  * @run main BasicLauncherTest
  */
 
-import static jdk.testlibrary.Asserts.assertTrue;
-
 import java.io.BufferedReader;
 import java.io.IOException;
+import java.io.OutputStream;
 import java.io.InputStreamReader;
-import java.io.File;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Arrays;
@@ -84,15 +82,56 @@
             ProcessBuilder processBuilder = new ProcessBuilder(launcher.getCommand());
             processBuilder.redirectError(ProcessBuilder.Redirect.INHERIT);
             Process toolProcess = processBuilder.start();
-            toolProcess.getOutputStream().write("quit\n".getBytes());
-            toolProcess.getOutputStream().close();
+
+            try (OutputStream out = toolProcess.getOutputStream()) {
+                out.write("universe\n".getBytes());
+                out.write("printmdo -a\n".getBytes());
+                out.write("quit\n".getBytes());
+            }
 
             // By default child process output stream redirected to pipe, so we are reading it in foreground.
-            BufferedReader reader = new BufferedReader(new InputStreamReader(toolProcess.getInputStream()));
+            Exception unexpected = null;
+            try (BufferedReader reader =
+                 new BufferedReader(new InputStreamReader(toolProcess.getInputStream()))) {
+                String line;
+                String unexpectedMsg =
+                   "One or more of 'VirtualCallData', 'CounterData', " +
+                   "'ReceiverTypeData', 'bci', 'MethodData' "  +
+                   "or 'java/lang/Object' not found";
+                boolean knownClassFound = false;
+                boolean knownProfileDataTypeFound = false;
+                boolean knownTokensFound = false;
+
+                while ((line = reader.readLine()) != null) {
+                    line = line.trim();
+                    System.out.println(line);
 
-            String line;
-            while ((line = reader.readLine()) != null) {
-                System.out.println(line.trim());
+                    if (line.contains("unknown subtype of CollectedHeap")) {
+                        unexpected = new RuntimeException("CollectedHeap type should be known.");
+                        break;
+                    }
+                    else if (line.contains("missing reason for ")) {
+                        unexpected = new RuntimeException("missing reason for ");
+                        break;
+                    }
+                    if (line.contains("VirtualCallData")  ||
+                        line.contains("CounterData")      ||
+                        line.contains("ReceiverTypeData")) {
+                        knownProfileDataTypeFound = true;
+                    }
+                    if (line.contains("bci") ||
+                        line.contains("MethodData")) {
+                        knownTokensFound = true;
+                    }
+                    if (line.contains("java/lang/Object")) {
+                        knownClassFound = true;
+                    }
+                }
+                if ((knownClassFound           == false)  ||
+                    (knownTokensFound          == false)  ||
+                    (knownProfileDataTypeFound == false)) {
+                    unexpected = new RuntimeException(unexpectedMsg);
+                }
             }
 
             toolProcess.waitFor();
@@ -100,6 +139,14 @@
             if (toolProcess.exitValue() != 0) {
                 throw new RuntimeException("FAILED CLHSDB terminated with non-zero exit code " + toolProcess.exitValue());
             }
+
+            if (unexpected != null) {
+                throw unexpected;
+            }
+
+            if (unexpected != null) {
+                throw unexpected;
+            }
         } catch (Exception ex) {
             throw new RuntimeException("Test ERROR " + ex, ex);
         } finally {
@@ -183,21 +230,6 @@
                                                        Arrays.asList(toolArgs));
     }
 
-    public static void testHeapDump() throws IOException {
-        File dump = new File("jhsdb.jmap.dump." +
-                             System.currentTimeMillis() + ".hprof");
-        if (dump.exists()) {
-            dump.delete();
-        }
-        dump.deleteOnExit();
-
-        launch("heap written to", null, "jmap",
-               "--binaryheap", "--dumpfile=" + dump.getAbsolutePath());
-
-        assertTrue(dump.exists() && dump.isFile(),
-                   "Could not create dump file " + dump.getAbsolutePath());
-    }
-
     public static void main(String[] args)
         throws IOException {
 
@@ -216,8 +248,6 @@
                "System Properties info not available", "jinfo");
         launch("java.threads", null, "jsnap");
 
-        testHeapDump();
-
         // The test throws RuntimeException on error.
         // IOException is thrown if LingeredApp can't start because of some bad
         // environment condition
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/sun/tools/jhsdb/HeapDumpTest.java	Mon Sep 19 10:11:34 2016 -0700
@@ -0,0 +1,129 @@
+/*
+ * Copyright (c) 2016, 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
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8163346
+ * @summary Test hashing of extended characters in Serviceability Agent.
+ * @library /test/lib
+ * @library /lib/testlibrary
+ * @compile -encoding utf8 HeapDumpTest.java
+ * @run main/timeout=240 HeapDumpTest
+ */
+
+import static jdk.testlibrary.Asserts.assertTrue;
+
+import java.io.IOException;
+import java.io.File;
+import java.util.List;
+import java.util.Arrays;
+import jdk.testlibrary.JDKToolLauncher;
+import jdk.testlibrary.OutputAnalyzer;
+import jdk.testlibrary.ProcessTools;
+import jdk.test.lib.apps.LingeredApp;
+import jdk.testlibrary.Platform;
+
+public class HeapDumpTest {
+
+    private static LingeredAppWithExtendedChars theApp = null;
+
+    /**
+     *
+     * @param vmArgs  - tool arguments to launch jhsdb
+     * @return exit code of tool
+     */
+    public static void launch(String expectedMessage, List<String> toolArgs)
+        throws IOException {
+
+        System.out.println("Starting LingeredApp");
+        try {
+            theApp = new LingeredAppWithExtendedChars();
+            LingeredApp.startApp(Arrays.asList("-Xmx256m"), theApp);
+
+            System.out.println(theApp.\u00CB);
+            System.out.println("Starting " + toolArgs.get(0) + " against " + theApp.getPid());
+            JDKToolLauncher launcher = JDKToolLauncher.createUsingTestJDK("jhsdb");
+
+            for (String cmd : toolArgs) {
+                launcher.addToolArg(cmd);
+            }
+
+            launcher.addToolArg("--pid=" + Long.toString(theApp.getPid()));
+
+            ProcessBuilder processBuilder = new ProcessBuilder(launcher.getCommand());
+            processBuilder.redirectError(ProcessBuilder.Redirect.INHERIT);
+            OutputAnalyzer output = ProcessTools.executeProcess(processBuilder);
+            System.out.println("stdout:");
+            System.out.println(output.getStdout());
+            System.out.println("stderr:");
+            System.out.println(output.getStderr());
+            output.shouldContain(expectedMessage);
+            output.shouldHaveExitValue(0);
+
+        } catch (Exception ex) {
+            throw new RuntimeException("Test ERROR " + ex, ex);
+        } finally {
+            LingeredApp.stopApp(theApp);
+        }
+    }
+
+    public static void launch(String expectedMessage, String... toolArgs)
+        throws IOException {
+
+        launch(expectedMessage, Arrays.asList(toolArgs));
+    }
+
+    public static void testHeapDump() throws IOException {
+        File dump = new File("jhsdb.jmap.heap." +
+                             System.currentTimeMillis() + ".hprof");
+        if (dump.exists()) {
+            dump.delete();
+        }
+
+        launch("heap written to", "jmap",
+               "--binaryheap", "--dumpfile=" + dump.getAbsolutePath());
+
+        assertTrue(dump.exists() && dump.isFile(),
+                   "Could not create dump file " + dump.getAbsolutePath());
+
+        dump.delete();
+    }
+
+    public static void main(String[] args)
+        throws IOException {
+
+        if (!Platform.shouldSAAttach()) {
+            // Silently skip the test if we don't have enough permissions to attach
+            System.err.println("Error! Insufficient permissions to attach - test skipped.");
+            return;
+        }
+
+
+        testHeapDump();
+
+        // The test throws RuntimeException on error.
+        // IOException is thrown if LingeredApp can't start because of some bad
+        // environment condition
+        System.out.println("Test PASSED");
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/sun/tools/jhsdb/LingeredAppWithExtendedChars.java	Mon Sep 19 10:11:34 2016 -0700
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2016, 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
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+import jdk.test.lib.apps.LingeredApp;
+
+public class LingeredAppWithExtendedChars extends LingeredApp {
+
+    public static int \u00CB = 1;
+
+    public static void main(String args[]) {
+        LingeredApp.main(args);
+    }
+ }
--- a/test/sun/tools/jps/TestJpsJar.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/sun/tools/jps/TestJpsJar.java	Mon Sep 19 10:11:34 2016 -0700
@@ -38,7 +38,7 @@
  * @library /lib/testlibrary
  * @modules jdk.jartool/sun.tools.jar
  *          java.management
- * @build jdk.testlibrary.* JpsHelper JpsBase
+ * @build JpsHelper JpsBase
  * @run main/othervm TestJpsJar
  */
 public class TestJpsJar {
--- a/test/tools/jlink/IntegrationTest.java	Wed Sep 14 15:29:23 2016 -0700
+++ b/test/tools/jlink/IntegrationTest.java	Mon Sep 19 10:11:34 2016 -0700
@@ -210,25 +210,29 @@
             props.load(reader);
         }
 
-        if (props.getProperty("JAVA_VERSION") == null) {
-            throw new AssertionError("release file does not contain JAVA_VERSION");
-        }
-
-        if (props.getProperty("OS_NAME") == null) {
-            throw new AssertionError("release file does not contain OS_NAME");
-        }
-
-        if (props.getProperty("OS_ARCH") == null) {
-            throw new AssertionError("release file does not contain OS_ARCH");
-        }
-
-        if (props.getProperty("OS_VERSION") == null) {
-            throw new AssertionError("release file does not contain OS_VERSION");
-        }
+        checkReleaseProperty(props, "JAVA_VERSION");
+        checkReleaseProperty(props, "JAVA_FULL_VERSION");
+        checkReleaseProperty(props, "OS_NAME");
+        checkReleaseProperty(props, "OS_ARCH");
+        checkReleaseProperty(props, "OS_VERSION");
 
         if (!Files.exists(output.resolve("toto.txt"))) {
             throw new AssertionError("Post processing not called");
         }
 
     }
+
+    static void checkReleaseProperty(Properties props, String name) {
+        if (! props.containsKey(name)) {
+            throw new AssertionError("release file does not contain property : " + name);
+        }
+
+        // property value is of min. length 3 and double quoted at the ends.
+        String value = props.getProperty(name);
+        if (value.length() < 3 ||
+            value.charAt(0) != '"' ||
+            value.charAt(value.length() - 1) != '"') {
+            throw new AssertionError("release property " + name + " is not quoted property");
+        }
+    }
 }