changeset 10253:74fd977a8b57 jdk8u40-b12-aarch64

Merge to jdk8u40-b12
author aph
date Tue, 04 Nov 2014 17:20:19 +0000
parents ce07e31b483a (current diff) fb8db1363920 (diff)
children 709f57316870
files .hgtags make/Setup.gmk make/Tools.gmk make/data/jdwp/jdwp.spec make/lib/CoreLibraries.gmk src/macosx/classes/sun/lwawt/macosx/CPlatformWindow.java src/macosx/classes/sun/lwawt/macosx/LWCToolkit.java src/share/back/util.c src/share/classes/com/sun/jarsigner/package.html src/share/classes/com/sun/jdi/ClassType.java src/share/classes/com/sun/jdi/InterfaceType.java src/share/classes/com/sun/jdi/Method.java src/share/classes/com/sun/jdi/ObjectReference.java src/share/classes/com/sun/swing/internal/plaf/basic/resources/basic_ja.properties src/share/classes/com/sun/swing/internal/plaf/basic/resources/basic_ko.properties src/share/classes/com/sun/swing/internal/plaf/basic/resources/basic_zh_CN.properties src/share/classes/com/sun/swing/internal/plaf/basic/resources/basic_zh_TW.properties src/share/classes/java/awt/Container.java src/share/classes/java/lang/Class.java src/share/classes/java/lang/invoke/InvokerBytecodeGenerator.java src/share/classes/java/lang/invoke/MethodType.java src/share/classes/java/net/DatagramSocket.java src/share/classes/java/net/URLClassLoader.java src/share/classes/java/security/KeyPairGenerator.java src/share/classes/java/security/KeyStore.java src/share/classes/java/security/MessageDigest.java src/share/classes/java/security/SecureRandom.java src/share/classes/java/security/Signature.java src/share/classes/java/security/cert/CertificateRevokedException.java src/share/classes/java/text/DigitList.java src/share/classes/java/util/ResourceBundle.java src/share/classes/java/util/concurrent/ForkJoinPool.java src/share/classes/java/util/concurrent/ForkJoinTask.java src/share/classes/java/util/logging/Logger.java src/share/classes/javax/swing/plaf/basic/BasicTabbedPaneUI.java src/share/classes/javax/swing/text/html/HTMLDocument.java src/share/classes/sun/awt/datatransfer/DataTransferer.java src/share/classes/sun/invoke/util/VerifyAccess.java src/share/classes/sun/net/www/protocol/http/HttpURLConnection.java src/share/classes/sun/security/jgss/krb5/Krb5Context.java src/share/classes/sun/security/jgss/spnego/SpNegoContext.java src/share/classes/sun/security/ssl/ClientHandshaker.java src/share/classes/sun/security/ssl/Handshaker.java src/share/classes/sun/security/tools/keytool/Resources.java src/share/javavm/export/jvm.h src/share/native/java/lang/Class.c src/share/native/java/util/zip/zip_util.c src/solaris/classes/sun/awt/X11/XToolkit.java src/solaris/classes/sun/print/CUPSPrinter.java src/solaris/classes/sun/print/IPPPrintService.java src/windows/native/sun/java2d/windows/GDIRenderer.cpp src/windows/native/sun/windows/awt_Component.cpp src/windows/native/sun/windows/awt_TextArea.cpp src/windows/native/sun/windows/awt_TextComponent.cpp src/windows/native/sun/windows/awt_TextField.cpp test/java/security/cert/CertificateFactory/invalidEncodedCerts/invalidcert.pem test/sun/text/resources/LocaleData test/sun/text/resources/LocaleDataTest.java
diffstat 181 files changed, 20016 insertions(+), 19372 deletions(-) [+]
line wrap: on
line diff
--- a/.hgtags	Fri Oct 10 15:52:52 2014 +0100
+++ b/.hgtags	Tue Nov 04 17:20:19 2014 +0000
@@ -321,6 +321,28 @@
 dfb9f24d56b51e5a2ca26e77fc69a2464d51a4d3 jdk8u20-b24
 dfb9f24d56b51e5a2ca26e77fc69a2464d51a4d3 jdk8u20-b25
 dd229c5f57bff4e75a70908294a13072b9a48385 jdk8u20-b26
+abca9f6f1a10e9f91b2538bbe7870f54f550d986 jdk8u25-b00
+7d0627679c9fdeaaaa9fe15c7cc11af0763621ec jdk8u25-b01
+b0277ec994b751ebb761814675352506cd56bcd6 jdk8u25-b02
+5606d84f30bab5ed4bc5776572edd469fb013e13 jdk8u25-b03
+40630cd55da8a2db7980249dc31af285965cb5e9 jdk8u25-b04
+75b48287a1b3fc5757ac473f72c8918c7f345ffc jdk8u25-b05
+5b80b4b22b4ca0b630c7f1cec3605da7694168e2 jdk8u25-b06
+0e0a35b0bf0ff5852026c50038d5c2ecb26c075c jdk8u25-b07
+d7d221f56fd17b96bab4440448641a844f9e92cd jdk8u25-b08
+0c6cf43c5bcf0917d07a1bc94adb7a091f18f32c jdk8u25-b09
+1317d94e95861a47fee8258903b652af70a3493c jdk8u25-b10
+2104dfd9a4c2b519cdca019aec938db539bf4f3f jdk8u25-b11
+eaaa9a04b9fdcfa4a830b811ed209eb2c45a4a6b jdk8u25-b12
+c3a855402b923d3ba819b05292a971953fc8ed0b jdk8u25-b13
+2a6df63ca0f0f59bb730638b05c72d77a23f93c8 jdk8u25-b14
+412d9ade90401d098f3662bd688ab393008423bd jdk8u25-b15
+f07bc5dab84c67f5d1dccbab318ee1c5485c852d jdk8u25-b16
+0000000000000000000000000000000000000000 jdk8u25-b16
+0000000000000000000000000000000000000000 jdk8u25-b16
+d067890f970f3a712f870f6311d20f3359b6eaf0 jdk8u25-b16
+67b22a82345bfa1ae1492679bdf3c4d54f4eacde jdk8u25-b17
+a4e88eaf15ea0569f3275a807a976fe0e04a086c jdk8u25-b18
 e6ed015afbbf3459ba3297e270b4f3170e989c80 jdk8u40-b00
 6e223d48080ef40f4ec11ecbcd19b4a20813b9eb jdk8u40-b01
 d19e04dfb95b8085c17e142df42477cccad1c8d1 jdk8u40-b02
@@ -330,3 +352,6 @@
 25788892a6723c0742a24050cc25ab103d9804de jdk8u40-b06
 07f0e22b5c238dd7b89fedbed35f02ac6b392c96 jdk8u40-b07
 0f0d70abca09b4ddb0981204ad5a427d4ce935e9 jdk8u40-b08
+064adeb65ce82f9ff3cc7898e59d19eb64743c63 jdk8u40-b09
+c3a4729c70fa29d79ad77e0643ad7715ebbc96b5 jdk8u40-b10
+693da296b395139f2fe6d7131eb0b0d85f6015f6 jdk8u40-b11
--- a/make/Setup.gmk	Fri Oct 10 15:52:52 2014 +0100
+++ b/make/Setup.gmk	Tue Nov 04 17:20:19 2014 +0000
@@ -1,5 +1,5 @@
 #
-# Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2011, 2014, 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
@@ -38,7 +38,7 @@
 # boot jdk to generate tools that need to be run with the boot jdk.
 # Thus we force the target bytecode to the previous JDK version.
 $(eval $(call SetupJavaCompiler,GENERATE_OLDBYTECODE, \
-    JVM := $(JAVA), \
+    JVM := $(JAVA_SMALL), \
     JAVAC := $(NEW_JAVAC), \
     FLAGS := $(BOOT_JDK_SOURCETARGET) -bootclasspath $(BOOT_RTJAR) $(DISABLE_WARNINGS), \
     SERVER_DIR := $(SJAVAC_SERVER_DIR), \
@@ -60,7 +60,7 @@
 # I.e. the rt.jar, but since rt.jar has not yet been generated
 # (it will be in "make images") therefore we use classes instead.
 $(eval $(call SetupJavaCompiler,GENERATE_USINGJDKBYTECODE, \
-    JVM := $(JAVA), \
+    JVM := $(JAVA_SMALL), \
     JAVAC := $(NEW_JAVAC), \
     FLAGS := -bootclasspath $(JDK_OUTPUTDIR)/classes $(DISABLE_WARNINGS), \
     SERVER_DIR := $(SJAVAC_SERVER_DIR), \
--- a/make/Tools.gmk	Fri Oct 10 15:52:52 2014 +0100
+++ b/make/Tools.gmk	Tue Nov 04 17:20:19 2014 +0000
@@ -1,5 +1,5 @@
 #
-# Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2011, 2014, 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,85 +54,85 @@
 BUILD_TOOLS += $(JDK_OUTPUTDIR)/btclasses/build/tools/deps/refs.allowed
 
 # Add a checksum ("jsum") to the end of a text file. Prevents trivial tampering with class lists.
-TOOL_ADDJSUM = $(JAVA) -cp $(JDK_OUTPUTDIR)/btclasses \
+TOOL_ADDJSUM = $(JAVA_SMALL) -cp $(JDK_OUTPUTDIR)/btclasses \
     build.tools.addjsum.AddJsum
 
 # The buildmetaindex tool creates a meta-index to make core class loaders lazier.
-TOOL_BUILDMETAINDEX = $(JAVA) -cp $(JDK_OUTPUTDIR)/btclasses \
+TOOL_BUILDMETAINDEX = $(JAVA_SMALL) -cp $(JDK_OUTPUTDIR)/btclasses \
     build.tools.buildmetaindex.BuildMetaIndex
 
-TOOL_COMPILEFONTCONFIG = $(JAVA) -cp $(JDK_OUTPUTDIR)/btclasses \
+TOOL_COMPILEFONTCONFIG = $(JAVA_SMALL) -cp $(JDK_OUTPUTDIR)/btclasses \
     build.tools.compilefontconfig.CompileFontConfig
 
-TOOL_COMPILEPROPERTIES = $(JAVA) -cp $(JDK_OUTPUTDIR)/btclasses \
+TOOL_COMPILEPROPERTIES = $(JAVA_SMALL) -cp $(JDK_OUTPUTDIR)/btclasses \
     build.tools.compileproperties.CompileProperties
 
-TOOL_STRIPPROPERTIES = $(JAVA) -cp $(JDK_OUTPUTDIR)/btclasses \
+TOOL_STRIPPROPERTIES = $(JAVA_SMALL) -cp $(JDK_OUTPUTDIR)/btclasses \
     build.tools.stripproperties.StripProperties
 
-TOOL_JARREORDER = $(JAVA) -cp $(JDK_OUTPUTDIR)/btclasses \
+TOOL_JARREORDER = $(JAVA_SMALL) -cp $(JDK_OUTPUTDIR)/btclasses \
     build.tools.jarreorder.JarReorder
 
-TOOL_GENERATECHARACTER = $(JAVA) -cp $(JDK_OUTPUTDIR)/btclasses \
+TOOL_GENERATECHARACTER = $(JAVA_SMALL) -cp $(JDK_OUTPUTDIR)/btclasses \
     build.tools.generatecharacter.GenerateCharacter
 
-TOOL_CHARACTERNAME = $(JAVA) -cp $(JDK_OUTPUTDIR)/btclasses \
+TOOL_CHARACTERNAME = $(JAVA_SMALL) -cp $(JDK_OUTPUTDIR)/btclasses \
     build.tools.generatecharacter.CharacterName
 
-TOOL_DTDBUILDER = $(JAVA) -Ddtd_home=$(JDK_TOPDIR)/make/data/dtdbuilder \
+TOOL_DTDBUILDER = $(JAVA_SMALL) -Ddtd_home=$(JDK_TOPDIR)/make/data/dtdbuilder \
     -Djava.awt.headless=true \
     -cp $(JDK_OUTPUTDIR)/btclasses build.tools.dtdbuilder.DTDBuilder
 
-TOOL_GENERATEBREAKITERATORDATA = $(JAVA) \
+TOOL_GENERATEBREAKITERATORDATA = $(JAVA_SMALL) \
     -cp $(JDK_OUTPUTDIR)/btclasses \
     build.tools.generatebreakiteratordata.GenerateBreakIteratorData
 
-TOOL_GENERATECURRENCYDATA = $(JAVA) -cp $(JDK_OUTPUTDIR)/btclasses \
+TOOL_GENERATECURRENCYDATA = $(JAVA_SMALL) -cp $(JDK_OUTPUTDIR)/btclasses \
     build.tools.generatecurrencydata.GenerateCurrencyData
 
-TOOL_HASHER = $(JAVA) -cp $(JDK_OUTPUTDIR)/btclasses \
+TOOL_HASHER = $(JAVA_SMALL) -cp $(JDK_OUTPUTDIR)/btclasses \
     build.tools.hasher.Hasher
 
-TOOL_TZDB = $(JAVA) -cp $(JDK_OUTPUTDIR)/btclasses \
+TOOL_TZDB = $(JAVA_SMALL) -cp $(JDK_OUTPUTDIR)/btclasses \
     build.tools.tzdb.TzdbZoneRulesCompiler
 
 
 # TODO: There are references to the jdwpgen.jar in jdk/make/netbeans/jdwpgen/build.xml
 # and nbproject/project.properties in the same dir. Needs to be looked at.
-TOOL_JDWPGEN = $(JAVA) -cp $(JDK_OUTPUTDIR)/btclasses build.tools.jdwpgen.Main
+TOOL_JDWPGEN = $(JAVA_SMALL) -cp $(JDK_OUTPUTDIR)/btclasses build.tools.jdwpgen.Main
 
 # TODO: Lots of files in jdk/make/tools/CharsetMapping dir
-TOOL_CHARSETMAPPING = $(JAVA) -cp $(JDK_OUTPUTDIR)/btclasses \
+TOOL_CHARSETMAPPING = $(JAVA_SMALL) -cp $(JDK_OUTPUTDIR)/btclasses \
     build.tools.charsetmapping.Main
 
-TOOL_SPP = $(JAVA) -cp $(JDK_OUTPUTDIR)/btclasses build.tools.spp.Spp
+TOOL_SPP = $(JAVA_SMALL) -cp $(JDK_OUTPUTDIR)/btclasses build.tools.spp.Spp
 
 # Nimbus is used somewhere in the swing build.
-TOOL_GENERATENIMBUS = $(JAVA) -cp $(JDK_OUTPUTDIR)/btclasses \
+TOOL_GENERATENIMBUS = $(JAVA_SMALL) -cp $(JDK_OUTPUTDIR)/btclasses \
     build.tools.generatenimbus.Generator
 
-TOOL_WRAPPERGENERATOR = $(JAVA) -cp $(JDK_OUTPUTDIR)/btclasses \
+TOOL_WRAPPERGENERATOR = $(JAVA_SMALL) -cp $(JDK_OUTPUTDIR)/btclasses \
     WrapperGenerator
 
-TOOL_AWT_TOBIN = $(JAVA) -Djava.awt.headless=true -cp $(JDK_OUTPUTDIR)/btclasses \
+TOOL_AWT_TOBIN = $(JAVA_SMALL) -Djava.awt.headless=true -cp $(JDK_OUTPUTDIR)/btclasses \
     build.tools.icondata.awt.ToBin
 
-TOOL_OSX_TOBIN = $(JAVA) -Djava.awt.headless=true -cp $(JDK_OUTPUTDIR)/btclasses \
+TOOL_OSX_TOBIN = $(JAVA_SMALL) -Djava.awt.headless=true -cp $(JDK_OUTPUTDIR)/btclasses \
     build.tools.icondata.osxapp.ToBin
 
-TOOL_CLDRCONVERTER = $(JAVA) -cp $(JDK_OUTPUTDIR)/btclasses \
+TOOL_CLDRCONVERTER = $(JAVA_SMALL) -cp $(JDK_OUTPUTDIR)/btclasses \
     build.tools.cldrconverter.CLDRConverter
 
-TOOL_REMOVEMETHODS = $(JAVA) -Xbootclasspath/p:$(LANGTOOLS_OUTPUTDIR)/dist/bootstrap/lib/javac.jar \
+TOOL_REMOVEMETHODS = $(JAVA_SMALL) -Xbootclasspath/p:$(LANGTOOLS_OUTPUTDIR)/dist/bootstrap/lib/javac.jar \
     -cp $(JDK_OUTPUTDIR)/btclasses:$(JDK_OUTPUTDIR) \
     build.tools.classfile.RemoveMethods
 
-TOOL_CHECKDEPS = $(JAVA) -Xbootclasspath/p:$(LANGTOOLS_OUTPUTDIR)/dist/bootstrap/lib/javac.jar \
+TOOL_CHECKDEPS = $(JAVA_SMALL) -Xbootclasspath/p:$(LANGTOOLS_OUTPUTDIR)/dist/bootstrap/lib/javac.jar \
     -cp $(JDK_OUTPUTDIR)/btclasses:$(JDK_OUTPUTDIR) \
     build.tools.deps.CheckDeps
 
-TOOL_ADDTORESTRICTEDPKGS=$(JAVA) -cp $(JDK_OUTPUTDIR)/btclasses \
- 	build.tools.addtorestrictedpkgs.AddToRestrictedPkgs
+TOOL_ADDTORESTRICTEDPKGS=$(JAVA_SMALL) -cp $(JDK_OUTPUTDIR)/btclasses \
+    build.tools.addtorestrictedpkgs.AddToRestrictedPkgs
 
 ##########################################################################################
 
--- a/make/data/jdwp/jdwp.spec	Fri Oct 10 15:52:52 2014 +0100
+++ b/make/data/jdwp/jdwp.spec	Tue Nov 04 17:20:19 2014 +0000
@@ -1147,7 +1147,8 @@
         (ErrorSet
             (Error INVALID_CLASS     "clazz is not the ID of a class.")
             (Error INVALID_OBJECT    "clazz is not a known ID.")
-            (Error INVALID_METHODID  "methodID is not the ID of a method.")
+            (Error INVALID_METHODID  "methodID is not the ID of a static method in "
+                                     "this class type or one of its superclasses.")
             (Error INVALID_THREAD)
             (Error THREAD_NOT_SUSPENDED)
             (Error VM_DEAD)
@@ -1250,6 +1251,83 @@
     )
 )
 (CommandSet InterfaceType=5
+    (Command InvokeMethod=1
+        "Invokes a static method. "
+        "The method must not be a static initializer. "
+        "The method must be a member of the interface type. "
+        "<p>Since JDWP version 1.8 "
+        "<p>"
+        "The method invocation will occur in the specified thread. "
+        "Method invocation can occur only if the specified thread "
+        "has been suspended by an event. "
+        "Method invocation is not supported "
+        "when the target VM has been suspended by the front-end. "
+        "<p>"
+        "The specified method is invoked with the arguments in the specified "
+        "argument list. "
+        "The method invocation is synchronous; the reply packet is not "
+        "sent until the invoked method returns in the target VM. "
+        "The return value (possibly the void value) is "
+        "included in the reply packet. "
+        "If the invoked method throws an exception, the "
+        "exception object ID is set in the reply packet; otherwise, the "
+        "exception object ID is null. "
+        "<p>"
+        "For primitive arguments, the argument value's type must match the "
+        "argument's type exactly. For object arguments, there must exist a "
+        "widening reference conversion from the argument value's type to the "
+        "argument's type and the argument's type must be loaded. "
+        "<p>"
+        "By default, all threads in the target VM are resumed while "
+        "the method is being invoked if they were previously "
+        "suspended by an event or by a command. "
+        "This is done to prevent the deadlocks "
+        "that will occur if any of the threads own monitors "
+        "that will be needed by the invoked method. It is possible that "
+        "breakpoints or other events might occur during the invocation. "
+        "Note, however, that this implicit resume acts exactly like "
+        "the ThreadReference resume command, so if the thread's suspend "
+        "count is greater than 1, it will remain in a suspended state "
+        "during the invocation. By default, when the invocation completes, "
+        "all threads in the target VM are suspended, regardless their state "
+        "before the invocation. "
+        "<p>"
+        "The resumption of other threads during the invoke can be prevented "
+        "by specifying the INVOKE_SINGLE_THREADED "
+        "bit flag in the <code>options</code> field; however, "
+        "there is no protection against or recovery from the deadlocks "
+        "described above, so this option should be used with great caution. "
+        "Only the specified thread will be resumed (as described for all "
+        "threads above). Upon completion of a single threaded invoke, the invoking thread "
+        "will be suspended once again. Note that any threads started during "
+        "the single threaded invocation will not be suspended when the "
+        "invocation completes. "
+        "<p>"
+        "If the target VM is disconnected during the invoke (for example, through "
+        "the VirtualMachine dispose command) the method invocation continues. "
+        (Out
+            (interfaceType clazz "The interface type ID.")
+            (threadObject thread "The thread in which to invoke.")
+            (method methodID "The method to invoke.")
+            (Repeat arguments
+                (value arg "The argument value.")
+            )
+            (int options "Invocation <a href=\"#JDWP_InvokeOptions\">options</a>")
+        )
+        (Reply
+            (value returnValue "The returned value.")
+            (tagged-object exception "The thrown exception.")
+        )
+        (ErrorSet
+            (Error INVALID_CLASS     "clazz is not the ID of an interface.")
+            (Error INVALID_OBJECT    "clazz is not a known ID.")
+            (Error INVALID_METHODID  "methodID is not the ID of a static method in this "
+                                     "interface type or is the ID of a static initializer.")
+            (Error INVALID_THREAD)
+            (Error THREAD_NOT_SUSPENDED)
+            (Error VM_DEAD)
+        )
+    )
 )
 (CommandSet Method=6
     (Command LineTable=1
@@ -1543,7 +1621,7 @@
         "<p>"
         "By default, all threads in the target VM are resumed while "
         "the method is being invoked if they were previously "
-        "suspended by an event or by command. "
+        "suspended by an event or by a command. "
         "This is done to prevent the deadlocks "
         "that will occur if any of the threads own monitors "
         "that will be needed by the invoked method. It is possible that "
@@ -1586,7 +1664,9 @@
             (Error INVALID_OBJECT)
             (Error INVALID_CLASS     "clazz is not the ID of a reference "
                                      "type.")
-            (Error INVALID_METHODID  "methodID is not the ID of a method.")
+            (Error INVALID_METHODID  "methodID is not the ID of an instance method "
+                                     "in this object's type or one of its superclasses, "
+                                     "superinterfaces, or implemented interfaces.")
             (Error INVALID_THREAD)
             (Error THREAD_NOT_SUSPENDED)
             (Error VM_DEAD)
--- a/make/lib/CoreLibraries.gmk	Fri Oct 10 15:52:52 2014 +0100
+++ b/make/lib/CoreLibraries.gmk	Tue Nov 04 17:20:19 2014 +0000
@@ -264,7 +264,7 @@
         $(call SET_SHARED_LIBRARY_ORIGIN) \
         $(EXPORT_ZIP_FUNCS), \
     LDFLAGS_windows := -export:ZIP_Open -export:ZIP_Close -export:ZIP_FindEntry \
-        -export:ZIP_ReadEntry -export:ZIP_GetNextEntry jvm.lib \
+        -export:ZIP_ReadEntry -export:ZIP_GetNextEntry -export:ZIP_CRC32 jvm.lib \
         $(WIN_JAVA_LIB), \
     LDFLAGS_SUFFIX_linux := -ljvm -ljava $(LIBZ), \
     LDFLAGS_SUFFIX_solaris := -ljvm -ljava $(LIBZ) -lc, \
--- a/make/mapfiles/libnet/mapfile-vers	Fri Oct 10 15:52:52 2014 +0100
+++ b/make/mapfiles/libnet/mapfile-vers	Tue Nov 04 17:20:19 2014 +0000
@@ -28,6 +28,8 @@
 SUNWprivate_1.1 {
 	global:
 		JNI_OnLoad;
+		Java_java_net_AbstractPlainDatagramSocketImpl_init;
+		Java_java_net_AbstractPlainDatagramSocketImpl_dataAvailable;
 		Java_java_net_PlainSocketImpl_socketListen;
 		Java_java_net_PlainDatagramSocketImpl_getTTL;
 		Java_java_net_PlainDatagramSocketImpl_init;
--- a/src/bsd/doc/man/java.1	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/bsd/doc/man/java.1	Tue Nov 04 17:20:19 2014 +0000
@@ -1,3461 +1,2198 @@
 '\" t
-.\" Copyright (c) 1994, 2014, 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.
-.\"
-.\" Title: java
-.\" Language: English
-.\" Date: 08 August 2014
-.\" SectDesc: Basic Tools
-.\" Software: JDK 8
-.\" Arch: generic
-.\" Part Number: E38207-03
+.\"  Copyright (c) 1994, 2015, 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.
+.\"
+.\"     Arch: generic
+.\"     Software: JDK 8
+.\"     Date: 03 March 2015
+.\"     SectDesc: Basic Tools
+.\"     Title: java.1
 .\"
 .if n .pl 99999
-.TH "java" "1" "08 August 2014" "JDK 8" "Basic Tools"
-.\" -----------------------------------------------------------------
-.\" * Define some portability stuff
-.\" -----------------------------------------------------------------
-.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-.\" http://bugs.debian.org/507673
-.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
-.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-.ie \n(.g .ds Aq \(aq
-.el       .ds Aq '
-.\" -----------------------------------------------------------------
-.\" * set default formatting
-.\" -----------------------------------------------------------------
-.\" disable hyphenation
-.nh
-.\" disable justification (adjust text to left margin only)
-.ad l
-.\" -----------------------------------------------------------------
-.\" * MAIN CONTENT STARTS HERE *
-.\" -----------------------------------------------------------------
-.SH "NAME"
+.TH java 1 "03 March 2015" "JDK 8" "Basic Tools"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el       .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+
+.SH NAME    
 java \- Launches a Java application\&.
-.SH "SYNOPSIS"
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
+.SH SYNOPSIS    
+.sp     
+.nf     
+
 \fBjava\fR [\fIoptions\fR] \fIclassname\fR [\fIargs\fR]
-.fi
-.if n \{\
-.RE
-.\}
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
+.fi     
+.nf     
+
 \fBjava\fR [\fIoptions\fR] \fB\-jar\fR \fIfilename\fR [\fIargs\fR]
-.fi
-.if n \{\
-.RE
-.\}
-.PP
+.fi     
+.sp     
+.TP     
 \fIoptions\fR
-.RS 4
-Command\-line options separated by spaces\&. See Options\&.
-.RE
-.PP
+Command-line options separated by spaces\&. See Options\&.
+.TP     
 \fIclassname\fR
-.RS 4
 The name of the class to be launched\&.
-.RE
-.PP
+.TP     
 \fIfilename\fR
-.RS 4
-The name of the Java Archive (JAR) file to be called\&. Used only with the
-\fB\-jar\fR
-option\&.
-.RE
-.PP
+The name of the Java Archive (JAR) file to be called\&. Used only with the \f3-jar\fR option\&.
+.TP     
 \fIargs\fR
-.RS 4
-The arguments passed to the
-\fBmain()\fR
-method separated by spaces\&.
-.RE
-.SH "DESCRIPTION"
+The arguments passed to the \f3main()\fR method separated by spaces\&.
+.SH DESCRIPTION    
+The \f3java\fR command starts a Java application\&. It does this by starting the Java Runtime Environment (JRE), loading the specified class, and calling that class\&'s \f3main()\fR method\&. The method must be declared \fIpublic\fR and \fIstatic\fR, it must not return any value, and it must accept a \f3String\fR array as a parameter\&. The method declaration has the following form:
+.sp     
+.nf     
+\f3public static void main(String[] args)\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+The \f3java\fR command can be used to launch a JavaFX application by loading a class that either has a \f3main()\fR method or that extends \f3javafx\&.application\&.Application\fR\&. In the latter case, the launcher constructs an instance of the \f3Application\fR class, calls its \f3init()\fR method, and then calls the \f3start(javafx\&.stage\&.Stage)\fR method\&.
 .PP
-The
-\fBjava\fR
-command starts a Java application\&. It does this by starting the Java Runtime Environment (JRE), loading the specified class, and calling that class\*(Aqs
-\fBmain()\fR
-method\&. The method must be declared
-\fIpublic\fR
-and
-\fIstatic\fR, it must not return any value, and it must accept a
-\fBString\fR
-array as a parameter\&. The method declaration has the following form:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBpublic static void main(String[] args)\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.PP
-The
-\fBjava\fR
-command can be used to launch a JavaFX application by loading a class that either has a
-\fBmain()\fR
-method or that extends
-\fBjavafx\&.application\&.Application\fR\&. In the latter case, the launcher constructs an instance of the
-\fBApplication\fR
-class, calls its
-\fBinit()\fR
-method, and then calls the
-\fBstart(javafx\&.stage\&.Stage)\fR
-method\&.
-.PP
-By default, the first argument that is not an option of the
-\fBjava\fR
-command is the fully qualified name of the class to be called\&. If the
-\fB\-jar\fR
-option is specified, its argument is the name of the JAR file containing class and resource files for the application\&. The startup class must be indicated by the
-\fBMain\-Class\fR
-manifest header in its source code\&.
+By default, the first argument that is not an option of the \f3java\fR command is the fully qualified name of the class to be called\&. If the \f3-jar\fR option is specified, its argument is the name of the JAR file containing class and resource files for the application\&. The startup class must be indicated by the \f3Main-Class\fR manifest header in its source code\&.
 .PP
 The JRE searches for the startup class (and other classes used by the application) in three sets of locations: the bootstrap class path, the installed extensions, and the user\(cqs class path\&.
 .PP
-Arguments after the class file name or the JAR file name are passed to the
-\fBmain()\fR
-method\&.
-.SH "OPTIONS"
-.PP
-The
-\fBjava\fR
-command supports a wide range of options that can be divided into the following categories:
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
+Arguments after the class file name or the JAR file name are passed to the \f3main()\fR method\&.
+.SH OPTIONS    
+The \f3java\fR command supports a wide range of options that can be divided into the following categories:
+.TP 0.2i    
+\(bu
 Standard Options
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-Non\-Standard Options
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
+.TP 0.2i    
+\(bu
+Non-Standard Options
+.TP 0.2i    
+\(bu
 Advanced Runtime Options
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
+.TP 0.2i    
+\(bu
 Advanced JIT Compiler Options
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
+.TP 0.2i    
+\(bu
 Advanced Serviceability Options
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
+.TP 0.2i    
+\(bu
 Advanced Garbage Collection Options
-.RE
 .PP
 Standard options are guaranteed to be supported by all implementations of the Java Virtual Machine (JVM)\&. They are used for common actions, such as checking the version of the JRE, setting the class path, enabling verbose output, and so on\&.
 .PP
-Non\-standard options are general purpose options that are specific to the Java HotSpot Virtual Machine, so they are not guaranteed to be supported by all JVM implementations, and are subject to change\&. These options start with
-\fB\-X\fR\&.
+Non-standard options are general purpose options that are specific to the Java HotSpot Virtual Machine, so they are not guaranteed to be supported by all JVM implementations, and are subject to change\&. These options start with \f3-X\fR\&.
 .PP
-Advanced options are not recommended for casual use\&. These are developer options used for tuning specific areas of the Java HotSpot Virtual Machine operation that often have specific system requirements and may require privileged access to system configuration parameters\&. They are also not guaranteed to be supported by all JVM implementations, and are subject to change\&. Advanced options start with
-\fB\-XX\fR\&.
+Advanced options are not recommended for casual use\&. These are developer options used for tuning specific areas of the Java HotSpot Virtual Machine operation that often have specific system requirements and may require privileged access to system configuration parameters\&. They are also not guaranteed to be supported by all JVM implementations, and are subject to change\&. Advanced options start with \f3-XX\fR\&.
 .PP
 To keep track of the options that were deprecated or removed in the latest release, there is a section named Deprecated and Removed Options at the end of the document\&.
 .PP
-Boolean options are used to either enable a feature that is disabled by default or disable a feature that is enabled by default\&. Such options do not require a parameter\&. Boolean
-\fB\-XX\fR
-options are enabled using the plus sign (\fB\-XX:+\fR\fIOptionName\fR) and disabled using the minus sign (\fB\-XX:\-\fR\fIOptionName\fR)\&.
-.PP
-For options that require an argument, the argument may be separated from the option name by a space, a colon (:), or an equal sign (=), or the argument may directly follow the option (the exact syntax differs for each option)\&. If you are expected to specify the size in bytes, you can use no suffix, or use the suffix
-\fBk\fR
-or
-\fBK\fR
-for kilobytes (KB),
-\fBm\fR
-or
-\fBM\fR
-for megabytes (MB),
-\fBg\fR
-or
-\fBG\fR
-for gigabytes (GB)\&. For example, to set the size to 8 GB, you can specify either
-\fB8g\fR,
-\fB8192m\fR,
-\fB8388608k\fR, or
-\fB8589934592\fR
-as the argument\&. If you are expected to specify the percentage, use a number from 0 to 1 (for example, specify
-\fB0\&.25\fR
-for 25%)\&.
-.SS "Standard Options"
-.PP
-These are the most commonly used options that are supported by all implementations of the JVM\&.
-.PP
-\-agentlib:\fIlibname\fR[=\fIoptions\fR]
-.RS 4
-Loads the specified native agent library\&. After the library name, a comma\-separated list of options specific to the library can be used\&.
-.sp
-If the option
-\fB\-agentlib:foo\fR
-is specified, then the JVM attempts to load the library named
-\fBlibfoo\&.so\fR
-in the location specified by the
-\fBLD_LIBRARY_PATH\fR
-system variable (on OS X this variable is
-\fBDYLD_LIBRARY_PATH\fR)\&.
-.sp
-The following example shows how to load the heap profiling tool (HPROF) library and get sample CPU information every 20 ms, with a stack depth of 3:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-agentlib:hprof=cpu=samples,interval=20,depth=3\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-The following example shows how to load the Java Debug Wire Protocol (JDWP) library and listen for the socket connection on port 8000, suspending the JVM before the main class loads:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-agentlib:jdwp=transport=dt_socket,server=y,address=8000\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-For more information about the native agent libraries, refer to the following:
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-The
-\fBjava\&.lang\&.instrument\fR
-package description at http://docs\&.oracle\&.com/javase/8/docs/api/java/lang/instrument/package\-summary\&.html
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-Agent Command Line Options in the JVM Tools Interface guide at http://docs\&.oracle\&.com/javase/8/docs/platform/jvmti/jvmti\&.html#starting
-.RE
-.RE
-.PP
-\-agentpath:\fIpathname\fR[=\fIoptions\fR]
-.RS 4
-Loads the native agent library specified by the absolute path name\&. This option is equivalent to
-\fB\-agentlib\fR
-but uses the full path and file name of the library\&.
-.RE
-.PP
-\-client
-.RS 4
-Selects the Java HotSpot Client VM\&. The 64\-bit version of the Java SE Development Kit (JDK) currently ignores this option and instead uses the Server JVM\&.
-.sp
-For default JVM selection, see Server\-Class Machine Detection at
-
-http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/vm/server\-class\&.html
-.RE
-.PP
-\-D\fIproperty\fR=\fIvalue\fR
-.RS 4
-Sets a system property value\&. The
-\fIproperty\fR
-variable is a string with no spaces that represents the name of the property\&. The
-\fIvalue\fR
-variable is a string that represents the value of the property\&. If
-\fIvalue\fR
-is a string with spaces, then enclose it in quotation marks (for example
-\fB\-Dfoo="foo bar"\fR)\&.
-.RE
-.PP
-\-d32
-.RS 4
-Runs the application in a 32\-bit environment\&. If a 32\-bit environment is not installed or is not supported, then an error will be reported\&. By default, the application is run in a 32\-bit environment unless a 64\-bit system is used\&.
-.RE
-.PP
-\-d64
-.RS 4
-Runs the application in a 64\-bit environment\&. If a 64\-bit environment is not installed or is not supported, then an error will be reported\&. By default, the application is run in a 32\-bit environment unless a 64\-bit system is used\&.
-.sp
-Currently only the Java HotSpot Server VM supports 64\-bit operation, and the
-\fB\-server\fR
-option is implicit with the use of
-\fB\-d64\fR\&. The
-\fB\-client\fR
-option is ignored with the use of
-\fB\-d64\fR\&. This is subject to change in a future release\&.
-.RE
-.PP
-\-disableassertions[:[\fIpackagename\fR]\&.\&.\&.|:\fIclassname\fR]
-.br
-\-da[:[\fIpackagename\fR]\&.\&.\&.|:\fIclassname\fR]
-.RS 4
-Disables assertions\&. By default, assertions are disabled in all packages and classes\&.
-.sp
-With no arguments,
-\fB\-disableassertions\fR
-(\fB\-da\fR) disables assertions in all packages and classes\&. With the
-\fIpackagename\fR
-argument ending in
-\fB\&.\&.\&.\fR, the switch disables assertions in the specified package and any subpackages\&. If the argument is simply
-\fB\&.\&.\&.\fR, then the switch disables assertions in the unnamed package in the current working directory\&. With the
-\fIclassname\fR
-argument, the switch disables assertions in the specified class\&.
-.sp
-The
-\fB\-disableassertions\fR
-(\fB\-da\fR) option applies to all class loaders and to system classes (which do not have a class loader)\&. There is one exception to this rule: if the option is provided with no arguments, then it does not apply to system classes\&. This makes it easy to disable assertions in all classes except for system classes\&. The
-\fB\-disablesystemassertions\fR
-option enables you to disable assertions in all system classes\&.
-.sp
-To explicitly enable assertions in specific packages or classes, use the
-\fB\-enableassertions\fR
-(\fB\-ea\fR) option\&. Both options can be used at the same time\&. For example, to run the
-\fBMyClass\fR
-application with assertions enabled in package
-\fBcom\&.wombat\&.fruitbat\fR
-(and any subpackages) but disabled in class
-\fBcom\&.wombat\&.fruitbat\&.Brickbat\fR, use the following command:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBjava \-ea:com\&.wombat\&.fruitbat\&.\&.\&. \-da:com\&.wombat\&.fruitbat\&.Brickbat MyClass\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
-\-disablesystemassertions
-.br
-\-dsa
-.RS 4
-Disables assertions in all system classes\&.
-.RE
-.PP
-\-enableassertions[:[\fIpackagename\fR]\&.\&.\&.|:\fIclassname\fR]
-.br
-\-ea[:[\fIpackagename\fR]\&.\&.\&.|:\fIclassname\fR]
-.RS 4
-Enables assertions\&. By default, assertions are disabled in all packages and classes\&.
-.sp
-With no arguments,
-\fB\-enableassertions\fR
-(\fB\-ea\fR) enables assertions in all packages and classes\&. With the
-\fIpackagename\fR
-argument ending in
-\fB\&.\&.\&.\fR, the switch enables assertions in the specified package and any subpackages\&. If the argument is simply
-\fB\&.\&.\&.\fR, then the switch enables assertions in the unnamed package in the current working directory\&. With the
-\fIclassname\fR
-argument, the switch enables assertions in the specified class\&.
-.sp
-The
-\fB\-enableassertions\fR
-(\fB\-ea\fR) option applies to all class loaders and to system classes (which do not have a class loader)\&. There is one exception to this rule: if the option is provided with no arguments, then it does not apply to system classes\&. This makes it easy to enable assertions in all classes except for system classes\&. The
-\fB\-enablesystemassertions\fR
-option provides a separate switch to enable assertions in all system classes\&.
-.sp
-To explicitly disable assertions in specific packages or classes, use the
-\fB\-disableassertions\fR
-(\fB\-da\fR) option\&. If a single command contains multiple instances of these switches, then they are processed in order before loading any classes\&. For example, to run the
-\fBMyClass\fR
-application with assertions enabled only in package
-\fBcom\&.wombat\&.fruitbat\fR
-(and any subpackages) but disabled in class
-\fBcom\&.wombat\&.fruitbat\&.Brickbat\fR, use the following command:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBjava \-ea:com\&.wombat\&.fruitbat\&.\&.\&. \-da:com\&.wombat\&.fruitbat\&.Brickbat MyClass\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
-\-enablesystemassertions
-.br
-\-esa
-.RS 4
-Enables assertions in all system classes\&.
-.RE
-.PP
-\-help
-.br
-\-?
-.RS 4
-Displays usage information for the
-\fBjava\fR
-command without actually running the JVM\&.
-.RE
-.PP
-\-jar \fIfilename\fR
-.RS 4
-Executes a program encapsulated in a JAR file\&. The
-\fIfilename\fR
-argument is the name of a JAR file with a manifest that contains a line in the form
-\fBMain\-Class:\fR\fIclassname\fR
-that defines the class with the
-\fBpublic static void main(String[] args)\fR
-method that serves as your application\*(Aqs starting point\&.
-.sp
-When you use the
-\fB\-jar\fR
-option, the specified JAR file is the source of all user classes, and other class path settings are ignored\&.
-.sp
-For more information about JAR files, see the following resources:
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-jar(1)
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-The Java Archive (JAR) Files guide at http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/jar/index\&.html
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-Lesson: Packaging Programs in JAR Files at
-
-http://docs\&.oracle\&.com/javase/tutorial/deployment/jar/index\&.html
-.RE
-.RE
-.PP
-\-javaagent:\fIjarpath\fR[=\fIoptions\fR]
-.RS 4
-Loads the specified Java programming language agent\&. For more information about instrumenting Java applications, see the
-\fBjava\&.lang\&.instrument\fR
-package description in the Java API documentation at http://docs\&.oracle\&.com/javase/8/docs/api/java/lang/instrument/package\-summary\&.html
-.RE
-.PP
-\-jre\-restrict\-search
-.RS 4
-Includes user\-private JREs in the version search\&.
-.RE
-.PP
-\-no\-jre\-restrict\-search
-.RS 4
-Excludes user\-private JREs from the version search\&.
-.RE
-.PP
-\-server
-.RS 4
-Selects the Java HotSpot Server VM\&. The 64\-bit version of the JDK supports only the Server VM, so in that case the option is implicit\&.
-.sp
-For default JVM selection, see Server\-Class Machine Detection at
-
-http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/vm/server\-class\&.html
-.RE
-.PP
-\-showversion
-.RS 4
-Displays version information and continues execution of the application\&. This option is equivalent to the
-\fB\-version\fR
-option except that the latter instructs the JVM to exit after displaying version information\&.
-.RE
-.PP
-\-splash:\fIimgname\fR
-.RS 4
-Shows the splash screen with the image specified by
-\fIimgname\fR\&. For example, to show the
-\fBsplash\&.gif\fR
-file from the
-\fBimages\fR
-directory when starting your application, use the following option:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-splash:images/splash\&.gif\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
-\-verbose:class
-.RS 4
-Displays information about each loaded class\&.
-.RE
-.PP
-\-verbose:gc
-.RS 4
-Displays information about each garbage collection (GC) event\&.
-.RE
-.PP
-\-verbose:jni
-.RS 4
-Displays information about the use of native methods and other Java Native Interface (JNI) activity\&.
-.RE
-.PP
-\-version
-.RS 4
-Displays version information and then exits\&. This option is equivalent to the
-\fB\-showversion\fR
-option except that the latter does not instruct the JVM to exit after displaying version information\&.
-.RE
-.PP
-\-version:\fIrelease\fR
-.RS 4
-Specifies the release version to be used for running the application\&. If the version of the
-\fBjava\fR
-command called does not meet this specification and an appropriate implementation is found on the system, then the appropriate implementation will be used\&.
-.sp
-The
-\fIrelease\fR
-argument specifies either the exact version string, or a list of version strings and ranges separated by spaces\&. A
-\fIversion string\fR
-is the developer designation of the version number in the following form:
-\fB1\&.\fR\fIx\fR\fB\&.0_\fR\fIu\fR
-(where
-\fIx\fR
-is the major version number, and
-\fIu\fR
-is the update version number)\&. A
-\fIversion range\fR
-is made up of a version string followed by a plus sign (\fB+\fR) to designate this version or later, or a part of a version string followed by an asterisk (\fB*\fR) to designate any version string with a matching prefix\&. Version strings and ranges can be combined using a space for a logical
-\fIOR\fR
-combination, or an ampersand (\fB&\fR) for a logical
-\fIAND\fR
-combination of two version strings/ranges\&. For example, if running the class or JAR file requires either JRE 6u13 (1\&.6\&.0_13), or any JRE 6 starting from 6u10 (1\&.6\&.0_10), specify the following:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-version:"1\&.6\&.0_13 1\&.6* & 1\&.6\&.0_10+"\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-Quotation marks are necessary only if there are spaces in the
-\fIrelease\fR
-parameter\&.
-.sp
-For JAR files, the preference is to specify version requirements in the JAR file manifest rather than on the command line\&.
-.RE
-.SS "Non\-Standard Options"
-.PP
-These options are general purpose options that are specific to the Java HotSpot Virtual Machine\&.
-.PP
-\-X
-.RS 4
-Displays help for all available
-\fB\-X\fR
-options\&.
-.RE
-.PP
-\-Xbatch
-.RS 4
-Disables background compilation\&. By default, the JVM compiles the method as a background task, running the method in interpreter mode until the background compilation is finished\&. The
-\fB\-Xbatch\fR
-flag disables background compilation so that compilation of all methods proceeds as a foreground task until completed\&.
-.sp
-This option is equivalent to
-\fB\-XX:\-BackgroundCompilation\fR\&.
-.RE
-.PP
-\-Xbootclasspath:\fIpath\fR
-.RS 4
-Specifies a list of directories, JAR files, and ZIP archives separated by colons (:) to search for boot class files\&. These are used in place of the boot class files included in the JDK\&.
-.sp
-Do not deploy applications that use this option to override a class in
-\fBrt\&.jar\fR, because this violates the JRE binary code license\&.
-.RE
-.PP
-\-Xbootclasspath/a:\fIpath\fR
-.RS 4
-Specifies a list of directories, JAR files, and ZIP archives separated by colons (:) to append to the end of the default bootstrap class path\&.
-.sp
-Do not deploy applications that use this option to override a class in
-\fBrt\&.jar\fR, because this violates the JRE binary code license\&.
-.RE
-.PP
-\-Xbootclasspath/p:\fIpath\fR
-.RS 4
-Specifies a list of directories, JAR files, and ZIP archives separated by colons (:) to prepend to the front of the default bootstrap class path\&.
-.sp
-Do not deploy applications that use this option to override a class in
-\fBrt\&.jar\fR, because this violates the JRE binary code license\&.
-.RE
-.PP
-\-Xcheck:jni
-.RS 4
-Performs additional checks for Java Native Interface (JNI) functions\&. Specifically, it validates the parameters passed to the JNI function and the runtime environment data before processing the JNI request\&. Any invalid data encountered indicates a problem in the native code, and the JVM will terminate with an irrecoverable error in such cases\&. Expect a performance degradation when this option is used\&.
-.RE
-.PP
-\-Xcomp
-.RS 4
-Forces compilation of methods on first invocation\&. By default, the Client VM (\fB\-client\fR) performs 1,000 interpreted method invocations and the Server VM (\fB\-server\fR) performs 10,000 interpreted method invocations to gather information for efficient compilation\&. Specifying the
-\fB\-Xcomp\fR
-option disables interpreted method invocations to increase compilation performance at the expense of efficiency\&.
-.sp
-You can also change the number of interpreted method invocations before compilation using the
-\fB\-XX:CompileThreshold\fR
-option\&.
-.RE
-.PP
-\-Xdebug
-.RS 4
-Does nothing\&. Provided for backward compatibility\&.
-.RE
-.PP
-\-Xdiag
-.RS 4
-Shows additional diagnostic messages\&.
-.RE
-.PP
-\-Xfuture
-.RS 4
-Enables strict class\-file format checks that enforce close conformance to the class\-file format specification\&. Developers are encouraged to use this flag when developing new code because the stricter checks will become the default in future releases\&.
-.RE
-.PP
-\-Xint
-.RS 4
-Runs the application in interpreted\-only mode\&. Compilation to native code is disabled, and all bytecode is executed by the interpreter\&. The performance benefits offered by the just in time (JIT) compiler are not present in this mode\&.
-.RE
-.PP
-\-Xinternalversion
-.RS 4
-Displays more detailed JVM version information than the
-\fB\-version\fR
-option, and then exits\&.
-.RE
-.PP
-\-Xloggc:\fIfilename\fR
-.RS 4
-Sets the file to which verbose GC events information should be redirected for logging\&. The information written to this file is similar to the output of
-\fB\-verbose:gc\fR
-with the time elapsed since the first GC event preceding each logged event\&. The
-\fB\-Xloggc\fR
-option overrides
-\fB\-verbose:gc\fR
-if both are given with the same
-\fBjava\fR
-command\&.
-.sp
-Example:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-Xloggc:garbage\-collection\&.log\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
-\-Xmaxjitcodesize=\fIsize\fR
-.RS 4
-Specifies the maximum code cache size (in bytes) for JIT\-compiled code\&. Append the letter
-\fBk\fR
-or
-\fBK\fR
-to indicate kilobytes,
-\fBm\fR
-or
-\fBM\fR
-to indicate megabytes,
-\fBg\fR
-or
-\fBG\fR
-to indicate gigabytes\&. By default, the value is set to 48 MB:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-Xmaxjitcodesize=48m\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-This option is equivalent to
-\fB\-XX:ReservedCodeCacheSize\fR\&.
-.RE
-.PP
-\-Xmixed
-.RS 4
-Executes all bytecode by the interpreter except for hot methods, which are compiled to native code\&.
-.RE
-.PP
-\-Xmn\fIsize\fR
-.RS 4
-Sets the initial and maximum size (in bytes) of the heap for the young generation (nursery)\&. Append the letter
-\fBk\fR
-or
-\fBK\fR
-to indicate kilobytes,
-\fBm\fR
-or
-\fBM\fR
-to indicate megabytes,
-\fBg\fR
-or
-\fBG\fR
-to indicate gigabytes\&.
-.sp
-The young generation region of the heap is used for new objects\&. GC is performed in this region more often than in other regions\&. If the size for the young generation is too small, then a lot of minor garbage collections will be performed\&. If the size is too large, then only full garbage collections will be performed, which can take a long time to complete\&. Oracle recommends that you keep the size for the young generation between a half and a quarter of the overall heap size\&.
-.sp
-The following examples show how to set the initial and maximum size of young generation to 256 MB using various units:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-Xmn256m\fR
-\fB\-Xmn262144k\fR
-\fB\-Xmn268435456\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-Instead of the
-\fB\-Xmn\fR
-option to set both the initial and maximum size of the heap for the young generation, you can use
-\fB\-XX:NewSize\fR
-to set the initial size and
-\fB\-XX:MaxNewSize\fR
-to set the maximum size\&.
-.RE
-.PP
-\-Xms\fIsize\fR
-.RS 4
-Sets the initial size (in bytes) of the heap\&. This value must be a multiple of 1024 and greater than 1 MB\&. Append the letter
-\fBk\fR
-or
-\fBK\fR
-to indicate kilobytes,
-\fBm\fR
-or
-\fBM\fR
-to indicate megabytes,
-\fBg\fR
-or
-\fBG\fR
-to indicate gigabytes\&.
-.sp
-The following examples show how to set the size of allocated memory to 6 MB using various units:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-Xms6291456\fR
-\fB\-Xms6144k\fR
-\fB\-Xms6m\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-If you do not set this option, then the initial size will be set as the sum of the sizes allocated for the old generation and the young generation\&. The initial size of the heap for the young generation can be set using the
-\fB\-Xmn\fR
-option or the
-\fB\-XX:NewSize\fR
-option\&.
-.RE
-.PP
-\-Xmx\fIsize\fR
-.RS 4
-Specifies the maximum size (in bytes) of the memory allocation pool in bytes\&. This value must be a multiple of 1024 and greater than 2 MB\&. Append the letter
-\fBk\fR
-or
-\fBK\fR
-to indicate kilobytes,
-\fBm\fR
-or
-\fBM\fR
-to indicate megabytes,
-\fBg\fR
-or
-\fBG\fR
-to indicate gigabytes\&. The default value is chosen at runtime based on system configuration\&. For server deployments,
-\fB\-Xms\fR
-and
-\fB\-Xmx\fR
-are often set to the same value\&. For more information, see Garbage Collector Ergonomics at http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/vm/gc\-ergonomics\&.html
-.sp
-The following examples show how to set the maximum allowed size of allocated memory to 80 MB using various units:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-Xmx83886080\fR
-\fB\-Xmx81920k\fR
-\fB\-Xmx80m\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-The
-\fB\-Xmx\fR
-option is equivalent to
-\fB\-XX:MaxHeapSize\fR\&.
-.RE
-.PP
-\-Xnoclassgc
-.RS 4
-Disables garbage collection (GC) of classes\&. This can save some GC time, which shortens interruptions during the application run\&.
-.sp
-When you specify
-\fB\-Xnoclassgc\fR
-at startup, the class objects in the application will be left untouched during GC and will always be considered live\&. This can result in more memory being permanently occupied which, if not used carefully, will throw an out of memory exception\&.
-.RE
-.PP
-\-Xprof
-.RS 4
-Profiles the running program and sends profiling data to standard output\&. This option is provided as a utility that is useful in program development and is not intended to be used in production systems\&.
-.RE
-.PP
-\-Xrs
-.RS 4
-Reduces the use of operating system signals by the JVM\&.
-.sp
-Shutdown hooks enable orderly shutdown of a Java application by running user cleanup code (such as closing database connections) at shutdown, even if the JVM terminates abruptly\&.
-.sp
-The JVM catches signals to implement shutdown hooks for unexpected termination\&. The JVM uses
-\fBSIGHUP\fR,
-\fBSIGINT\fR, and
-\fBSIGTERM\fR
-to initiate the running of shutdown hooks\&.
-.sp
-The JVM uses a similar mechanism to implement the feature of dumping thread stacks for debugging purposes\&. The JVM uses
-\fBSIGQUIT\fR
-to perform thread dumps\&.
-.sp
-Applications embedding the JVM frequently need to trap signals such as
-\fBSIGINT\fR
-or
-\fBSIGTERM\fR, which can lead to interference with the JVM signal handlers\&. The
-\fB\-Xrs\fR
-option is available to address this issue\&. When
-\fB\-Xrs\fR
-is used, the signal masks for
-\fBSIGINT\fR,
-\fBSIGTERM\fR,
-\fBSIGHUP\fR, and
-\fBSIGQUIT\fR
-are not changed by the JVM, and signal handlers for these signals are not installed\&.
-.sp
-There are two consequences of specifying
-\fB\-Xrs\fR:
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-\fBSIGQUIT\fR
-thread dumps are not available\&.
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-User code is responsible for causing shutdown hooks to run, for example, by calling
-\fBSystem\&.exit()\fR
-when the JVM is to be terminated\&.
-.RE
-.RE
-.PP
-\-Xshare:\fImode\fR
-.RS 4
-Sets the class data sharing mode\&. Possible
-\fImode\fR
-arguments for this option include the following:
-.PP
-auto
-.RS 4
-Use shared class data if possible\&. This is the default value for Java HotSpot 32\-Bit Client VM\&.
-.RE
-.PP
-on
-.RS 4
-Require the use of class data sharing\&. Print an error message and exit if class data sharing cannot be used\&.
-.RE
-.PP
-off
-.RS 4
-Do not use shared class data\&. This is the default value for Java HotSpot 32\-Bit Server VM, Java HotSpot 64\-Bit Client VM, and Java HotSpot 64\-Bit Server VM\&.
-.RE
+Boolean options are used to either enable a feature that is disabled by default or disable a feature that is enabled by default\&. Such options do not require a parameter\&. Boolean \f3-XX\fR options are enabled using the plus sign (\f3-XX:+\fR\fIOptionName\fR) and disabled using the minus sign (\f3-XX:-\fR\fIOptionName\fR)\&.
 .PP
-dump
-.RS 4
-Manually generate the class data sharing archive\&.
-.RE
-.RE
-.PP
-\-XshowSettings:\fIcategory\fR
-.RS 4
-Shows settings and continues\&. Possible
-\fIcategory\fR
-arguments for this option include the following:
-.PP
-all
-.RS 4
-Shows all categories of settings\&. This is the default value\&.
-.RE
-.PP
-locale
-.RS 4
-Shows settings related to locale\&.
-.RE
-.PP
-properties
-.RS 4
-Shows settings related to system properties\&.
-.RE
-.PP
-vm
-.RS 4
-Shows the settings of the JVM\&.
-.RE
-.RE
-.PP
-\-Xss\fIsize\fR
-.RS 4
-Sets the thread stack size (in bytes)\&. Append the letter
-\fBk\fR
-or
-\fBK\fR
-to indicate KB,
-\fBm\fR
-or
-\fBM\fR
-to indicate MB,
-\fBg\fR
-or
-\fBG\fR
-to indicate GB\&. The default value depends on the platform:
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-Linux/ARM (32\-bit): 320 KB
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-Linux/i386 (32\-bit): 320 KB
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-Linux/x64 (64\-bit): 1024 KB
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-OS X (64\-bit): 1024 KB
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-Oracle Solaris/i386 (32\-bit): 320 KB
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-Oracle Solaris/x64 (64\-bit): 1024 KB
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-Windows: depends on virtual memory
-.RE
-.sp
-The following examples set the thread stack size to 1024 KB in different units:
-.sp
-.if n \{\
-.RS 4
-.\}
+For options that require an argument, the argument may be separated from the option name by a space, a colon (:), or an equal sign (=), or the argument may directly follow the option (the exact syntax differs for each option)\&. If you are expected to specify the size in bytes, you can use no suffix, or use the suffix \f3k\fR or \f3K\fR for kilobytes (KB), \f3m\fR or \f3M\fR for megabytes (MB), \f3g\fR or \f3G\fR for gigabytes (GB)\&. For example, to set the size to 8 GB, you can specify either \f38g\fR, \f38192m\fR, \f38388608k\fR, or \f38589934592\fR as the argument\&. If you are expected to specify the percentage, use a number from 0 to 1 (for example, specify \f30\&.25\fR for 25%)\&.
+.SS STANDARD\ OPTIONS    
+These are the most commonly used options that are supported by all implementations of the JVM\&.
+.TP
+-agentlib:\fIlibname\fR[=\fIoptions\fR]
+.br
+Loads the specified native agent library\&. After the library name, a comma-separated list of options specific to the library can be used\&.
+
+If the option \f3-agentlib:foo\fR is specified, then the JVM attempts to load the library named \f3libfoo\&.so\fR in the location specified by the \f3LD_LIBRARY_PATH\fR system variable (on OS X this variable is \f3DYLD_LIBRARY_PATH\fR)\&.
+
+The following example shows how to load the heap profiling tool (HPROF) library and get sample CPU information every 20 ms, with a stack depth of 3:
+.sp     
+.nf     
+\f3\-agentlib:hprof=cpu=samples,interval=20,depth=3\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+The following example shows how to load the Java Debug Wire Protocol (JDWP) library and listen for the socket connection on port 8000, suspending the JVM before the main class loads:
+.sp     
+.nf     
+\f3\-agentlib:jdwp=transport=dt_socket,server=y,address=8000\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+For more information about the native agent libraries, refer to the following:
+.RS     
+.TP 0.2i    
+\(bu
+The \f3java\&.lang\&.instrument\fR package description at http://docs\&.oracle\&.com/javase/8/docs/api/java/lang/instrument/package-summary\&.html
+.TP 0.2i    
+\(bu
+Agent Command Line Options in the JVM Tools Interface guide at http://docs\&.oracle\&.com/javase/8/docs/platform/jvmti/jvmti\&.html#starting
+.RE     
+
+.TP
+-agentpath:\fIpathname\fR[=\fIoptions\fR]
+.br
+Loads the native agent library specified by the absolute path name\&. This option is equivalent to \f3-agentlib\fR but uses the full path and file name of the library\&.
+.TP
+-client
+.br
+Selects the Java HotSpot Client VM\&. The 64-bit version of the Java SE Development Kit (JDK) currently ignores this option and instead uses the Server JVM\&.
+
+For default JVM selection, see Server-Class Machine Detection at http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/vm/server-class\&.html
+.TP
+-D\fIproperty\fR=\fIvalue\fR
+.br
+Sets a system property value\&. The \fIproperty\fR variable is a string with no spaces that represents the name of the property\&. The \fIvalue\fR variable is a string that represents the value of the property\&. If \fIvalue\fR is a string with spaces, then enclose it in quotation marks (for example \f3-Dfoo="foo bar"\fR)\&.
+.TP
+-d32
+.br
+Runs the application in a 32-bit environment\&. If a 32-bit environment is not installed or is not supported, then an error will be reported\&. By default, the application is run in a 32-bit environment unless a 64-bit system is used\&.
+.TP
+-d64
+.br
+Runs the application in a 64-bit environment\&. If a 64-bit environment is not installed or is not supported, then an error will be reported\&. By default, the application is run in a 32-bit environment unless a 64-bit system is used\&.
+
+Currently only the Java HotSpot Server VM supports 64-bit operation, and the \f3-server\fR option is implicit with the use of \f3-d64\fR\&. The \f3-client\fR option is ignored with the use of \f3-d64\fR\&. This is subject to change in a future release\&.
+.TP
 .nf
-\fB\-Xss1m\fR
-\fB\-Xss1024k\fR
-\fB\-Xss1048576\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-This option is equivalent to
-\fB\-XX:ThreadStackSize\fR\&.
-.RE
-.PP
-\-Xusealtsigs
-.RS 4
-Use alternative signals instead of
-\fBSIGUSR1\fR
-and
-\fBSIGUSR2\fR
-for JVM internal signals\&. This option is equivalent to
-\fB\-XX:+UseAltSigs\fR\&.
-.RE
-.PP
-\-Xverify:\fImode\fR
-.RS 4
-Sets the mode of the bytecode verifier\&. Bytecode verification helps to troubleshoot some problems, but it also adds overhead to the running application\&. Possible
-\fImode\fR
-arguments for this option include the following:
-.PP
-none
-.RS 4
-Do not verify the bytecode\&. This reduces startup time and also reduces the protection provided by Java\&.
-.RE
-.PP
-remote
-.RS 4
-Verify only those classes that are loaded remotely over the network\&. This is the default behavior if you do not specify the
-\fB\-Xverify\fR
-option\&.
-.RE
-.PP
-all
-.RS 4
-Verify all classes\&.
-.RE
-.RE
-.SS "Advanced Runtime Options"
-.PP
-These options control the runtime behavior of the Java HotSpot VM\&.
-.PP
-\-XX:+DisableAttachMechanism
-.RS 4
-Enables the option that disables the mechanism that lets tools attach to the JVM\&. By default, this option is disabled, meaning that the attach mechanism is enabled and you can use tools such as
-\fBjcmd\fR,
-\fBjstack\fR,
-\fBjmap\fR, and
-\fBjinfo\fR\&.
-.RE
-.PP
-\-XX:ErrorFile=\fIfilename\fR
-.RS 4
-Specifies the path and file name to which error data is written when an irrecoverable error occurs\&. By default, this file is created in the current working directory and named
-\fBhs_err_pid\fR\fIpid\fR\fB\&.log\fR
-where
-\fIpid\fR
-is the identifier of the process that caused the error\&. The following example shows how to set the default log file (note that the identifier of the process is specified as
-\fB%p\fR):
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:ErrorFile=\&./hs_err_pid%p\&.log\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-The following example shows how to set the error log to
-\fB/var/log/java/java_error\&.log\fR:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:ErrorFile=/var/log/java/java_error\&.log\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-If the file cannot be created in the specified directory (due to insufficient space, permission problem, or another issue), then the file is created in the temporary directory for the operating system\&. The temporary directory is
-\fB/tmp\fR\&.
-.RE
-.PP
-\-XX:+FailOverToOldVerifier
-.RS 4
-Enables automatic failover to the old verifier when the new type checker fails\&. By default, this option is disabled and it is ignored (that is, treated as disabled) for classes with a recent bytecode version\&. You can enable it for classes with older versions of the bytecode\&.
-.RE
-.PP
-\-XX:LargePageSizeInBytes=\fIsize\fR
-.RS 4
-Sets the maximum size (in bytes) for large pages used for Java heap\&. The
-\fIsize\fR
-argument must be a power of 2 (2, 4, 8, 16, \&.\&.\&.)\&. Append the letter
-\fBk\fR
-or
-\fBK\fR
-to indicate kilobytes,
-\fBm\fR
-or
-\fBM\fR
-to indicate megabytes,
-\fBg\fR
-or
-\fBG\fR
-to indicate gigabytes\&. By default, the size is set to 0, meaning that the JVM chooses the size for large pages automatically\&.
-.sp
-The following example illustrates how to set the large page size to 4 megabytes (MB):
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:LargePageSizeInBytes=4m\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
-\-XX:MaxDirectMemorySize=\fIsize\fR
-.RS 4
-Sets the maximum total size (in bytes) of the New I/O (the
-\fBjava\&.nio\fR
-package) direct\-buffer allocations\&. Append the letter
-\fBk\fR
-or
-\fBK\fR
-to indicate kilobytes,
-\fBm\fR
-or
-\fBM\fR
-to indicate megabytes,
-\fBg\fR
-or
-\fBG\fR
-to indicate gigabytes\&. By default, the size is set to 0, meaning that the JVM chooses the size for NIO direct\-buffer allocations automatically\&.
-.sp
-The following examples illustrate how to set the NIO size to 1024 KB in different units:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:MaxDirectMemorySize=1m\fR
-\fB\-XX:MaxDirectMemorySize=1024k\fR
-\fB\-XX:MaxDirectMemorySize=1048576\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
-\-XX:NativeMemoryTracking=\fImode\fR
-.RS 4
-Specifies the mode for tracking JVM native memory usage\&. Possible
-\fImode\fR
-arguments for this option include the following:
-.PP
-off
-.RS 4
-Do not track JVM native memory usage\&. This is the default behavior if you do not specify the
-\fB\-XX:NativeMemoryTracking\fR
-option\&.
-.RE
-.PP
-summary
-.RS 4
-Only track memory usage by JVM subsystems, such as Java heap, class, code, and thread\&.
-.RE
-.PP
-detail
-.RS 4
-In addition to tracking memory usage by JVM subsystems, track memory usage by individual
-\fBCallSite\fR, individual virtual memory region and its committed regions\&.
-.RE
-.RE
-.PP
-\-XX:OnError=\fIstring\fR
-.RS 4
-Sets a custom command or a series of semicolon\-separated commands to run when an irrecoverable error occurs\&. If the string contains spaces, then it must be enclosed in quotation marks\&.
-.sp
-The following example shows how the
-\fB\-XX:OnError\fR
-option can be used to run the
-\fBgcore\fR
-command to create the core image, and the debugger is started to attach to the process in case of an irrecoverable error (the
-\fB%p\fR
-designates the current process):
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:OnError="gcore %p;dbx \- %p"\fR
- 
+-disableassertions[:[\fIpackagename\fR]\&.\&.\&.|:\fIclassname\fR], -da[:[\fIpackagename\fR]\&.\&.\&.|:\fIclassname\fR]
+.br
 .fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
-\-XX:OnOutOfMemoryError=\fIstring\fR
-.RS 4
-Sets a custom command or a series of semicolon\-separated commands to run when an
-\fBOutOfMemoryError\fR
-exception is first thrown\&. If the string contains spaces, then it must be enclosed in quotation marks\&. For an example of a command string, see the description of the
-\fB\-XX:OnError\fR
-option\&.
-.RE
-.PP
-\-XX:+PrintCommandLineFlags
-.RS 4
-Enables printing of ergonomically selected JVM flags that appeared on the command line\&. It can be useful to know the ergonomic values set by the JVM, such as the heap space size and the selected garbage collector\&. By default, this option is disabled and flags are not printed\&.
-.RE
-.PP
-\-XX:+PrintNMTStatistics
-.RS 4
-Enables printing of collected native memory tracking data at JVM exit when native memory tracking is enabled (see
-\fB\-XX:NativeMemoryTracking\fR)\&. By default, this option is disabled and native memory tracking data is not printed\&.
-.RE
-.PP
-\-XX:+RelaxAccessControlCheck
-.RS 4
-Decreases the amount of access control checks in the verifier\&. By default, this option is disabled, and it is ignored (that is, treated as disabled) for classes with a recent bytecode version\&. You can enable it for classes with older versions of the bytecode\&.
-.RE
-.PP
-\-XX:+ShowMessageBoxOnError
-.RS 4
-Enables displaying of a dialog box when the JVM experiences an irrecoverable error\&. This prevents the JVM from exiting and keeps the process active so that you can attach a debugger to it to investigate the cause of the error\&. By default, this option is disabled\&.
-.RE
-.PP
-\-XX:ThreadStackSize=\fIsize\fR
-.RS 4
-Sets the thread stack size (in bytes)\&. Append the letter
-\fBk\fR
-or
-\fBK\fR
-to indicate kilobytes,
-\fBm\fR
-or
-\fBM\fR
-to indicate megabytes,
-\fBg\fR
-or
-\fBG\fR
-to indicate gigabytes\&. The default value depends on the platform:
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-Linux/ARM (32\-bit): 320 KB
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-Linux/i386 (32\-bit): 320 KB
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-Linux/x64 (64\-bit): 1024 KB
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-OS X (64\-bit): 1024 KB
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-Oracle Solaris/i386 (32\-bit): 320 KB
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-Oracle Solaris/x64 (64\-bit): 1024 KB
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-Windows: depends on virtual memory
-.RE
-.sp
-The following examples show how to set the thread stack size to 1024 KB in different units:
-.sp
-.if n \{\
-.RS 4
-.\}
+Disables assertions\&. By default, assertions are disabled in all packages and classes\&.
+
+With no arguments, \f3-disableassertions\fR (\f3-da\fR) disables assertions in all packages and classes\&. With the \fIpackagename\fR argument ending in \f3\&.\&.\&.\fR, the switch disables assertions in the specified package and any subpackages\&. If the argument is simply \f3\&.\&.\&.\fR, then the switch disables assertions in the unnamed package in the current working directory\&. With the \fIclassname\fR argument\f3\fR, the switch disables assertions in the specified class\&.
+
+The \f3-disableassertions\fR (\f3-da\fR) option applies to all class loaders and to system classes (which do not have a class loader)\&. There is one exception to this rule: if the option is provided with no arguments, then it does not apply to system classes\&. This makes it easy to disable assertions in all classes except for system classes\&. The \f3-disablesystemassertions\fR option enables you to disable assertions in all system classes\&.
+
+To explicitly enable assertions in specific packages or classes, use the \f3-enableassertions\fR (\f3-ea\fR) option\&. Both options can be used at the same time\&. For example, to run the \f3MyClass\fR application with assertions enabled in package \f3com\&.wombat\&.fruitbat\fR (and any subpackages) but disabled in class \f3com\&.wombat\&.fruitbat\&.Brickbat\fR, use the following command:
+.sp     
+.nf     
+\f3java \-ea:com\&.wombat\&.fruitbat\&.\&.\&. \-da:com\&.wombat\&.fruitbat\&.Brickbat MyClass\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP
+-disablesystemassertions, -dsa
+.br
+Disables assertions in all system classes\&.
+.TP
 .nf
-\fB\-XX:ThreadStackSize=1m\fR
-\fB\-XX:ThreadStackSize=1024k\fR
-\fB\-XX:ThreadStackSize=1048576\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-This option is equivalent to
-\fB\-Xss\fR\&.
-.RE
-.PP
-\-XX:+TraceClassLoading
-.RS 4
-Enables tracing of classes as they are loaded\&. By default, this option is disabled and classes are not traced\&.
-.RE
-.PP
-\-XX:+TraceClassLoadingPreorder
-.RS 4
-Enables tracing of all loaded classes in the order in which they are referenced\&. By default, this option is disabled and classes are not traced\&.
-.RE
-.PP
-\-XX:+TraceClassResolution
-.RS 4
-Enables tracing of constant pool resolutions\&. By default, this option is disabled and constant pool resolutions are not traced\&.
-.RE
-.PP
-\-XX:+TraceClassUnloading
-.RS 4
-Enables tracing of classes as they are unloaded\&. By default, this option is disabled and classes are not traced\&.
-.RE
-.PP
-\-XX:+TraceLoaderConstraints
-.RS 4
-Enables tracing of the loader constraints recording\&. By default, this option is disabled and loader constraints recording is not traced\&.
-.RE
-.PP
-\-XX:+UseAltSigs
-.RS 4
-Enables the use of alternative signals instead of
-\fBSIGUSR1\fR
-and
-\fBSIGUSR2\fR
-for JVM internal signals\&. By default, this option is disabled and alternative signals are not used\&. This option is equivalent to
-\fB\-Xusealtsigs\fR\&.
-.RE
-.PP
-\-XX:\-UseBiasedLocking
-.RS 4
-Disables the use of biased locking\&. Some applications with significant amounts of uncontended synchronization may attain significant speedups with this flag enabled, whereas applications with certain patterns of locking may see slowdowns\&. For more information about the biased locking technique, see the example in Java Tuning White Paper at http://www\&.oracle\&.com/technetwork/java/tuning\-139912\&.html#section4\&.2\&.5
-.sp
-By default, this option is enabled\&.
-.RE
-.PP
-\-XX:\-UseCompressedOops
-.RS 4
-Disables the use of compressed pointers\&. By default, this option is enabled, and compressed pointers are used when Java heap sizes are less than 32 GB\&. When this option is enabled, object references are represented as 32\-bit offsets instead of 64\-bit pointers, which typically increases performance when running the application with Java heap sizes less than 32 GB\&. This option works only for 64\-bit JVMs\&.
-.RE
-.PP
-\-XX:\-UseLargePages
-.RS 4
-Disables the use of large page memory\&. This option is enabled by default\&.
-.sp
-For more information, see Java Support for Large Memory Pages at http://www\&.oracle\&.com/technetwork/java/javase/tech/largememory\-jsp\-137182\&.html
-.RE
-.PP
-\-XX:+UseMembar
-.RS 4
-Enables issuing of membars on thread state transitions\&. This option is disabled by default on all platforms except ARM servers, where it is enabled\&. (It is recommended that you do not disable this option on ARM servers\&.)
-.RE
-.PP
-\-XX:+UsePerfData
-.RS 4
-Enables the
-\fBperfdata\fR
-feature\&. This option is enabled by default to allow JVM monitoring and performance testing\&. Disabling it suppresses the creation of the
-\fBhsperfdata_userid\fR
-directories\&. To disable the
-\fBperfdata\fR
-feature, specify
-\fB\-XX:\-UsePerfData\fR\&.
-.RE
-.PP
-\-XX:+AllowUserSignalHandlers
-.RS 4
-Enables installation of signal handlers by the application\&. By default, this option is disabled and the application is not allowed to install signal handlers\&.
-.RE
-.SS "Advanced JIT Compiler Options"
-.PP
-These options control the dynamic just\-in\-time (JIT) compilation performed by the Java HotSpot VM\&.
-.PP
-\-XX:+AggressiveOpts
-.RS 4
-Enables the use of aggressive performance optimization features, which are expected to become default in upcoming releases\&. By default, this option is disabled and experimental performance features are not used\&.
-.RE
-.PP
-\-XX:AllocateInstancePrefetchLines=\fIlines\fR
-.RS 4
-Sets the number of lines to prefetch ahead of the instance allocation pointer\&. By default, the number of lines to prefetch is set to 1:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:AllocateInstancePrefetchLines=1\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-Only the Java HotSpot Server VM supports this option\&.
-.RE
-.PP
-\-XX:AllocatePrefetchDistance=\fIsize\fR
-.RS 4
-Sets the size (in bytes) of the prefetch distance for object allocation\&. Memory about to be written with the value of new objects is prefetched up to this distance starting from the address of the last allocated object\&. Each Java thread has its own allocation point\&.
-.sp
-Negative values denote that prefetch distance is chosen based on the platform\&. Positive values are bytes to prefetch\&. Append the letter
-\fBk\fR
-or
-\fBK\fR
-to indicate kilobytes,
-\fBm\fR
-or
-\fBM\fR
-to indicate megabytes,
-\fBg\fR
-or
-\fBG\fR
-to indicate gigabytes\&. The default value is set to \-1\&.
-.sp
-The following example shows how to set the prefetch distance to 1024 bytes:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:AllocatePrefetchDistance=1024\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-Only the Java HotSpot Server VM supports this option\&.
-.RE
-.PP
-\-XX:AllocatePrefetchInstr=\fIinstruction\fR
-.RS 4
-Sets the prefetch instruction to prefetch ahead of the allocation pointer\&. Only the Java HotSpot Server VM supports this option\&. Possible values are from 0 to 3\&. The actual instructions behind the values depend on the platform\&. By default, the prefetch instruction is set to 0:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:AllocatePrefetchInstr=0\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-Only the Java HotSpot Server VM supports this option\&.
-.RE
-.PP
-\-XX:AllocatePrefetchLines=\fIlines\fR
-.RS 4
-Sets the number of cache lines to load after the last object allocation by using the prefetch instructions generated in compiled code\&. The default value is 1 if the last allocated object was an instance, and 3 if it was an array\&.
-.sp
-The following example shows how to set the number of loaded cache lines to 5:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:AllocatePrefetchLines=5\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-Only the Java HotSpot Server VM supports this option\&.
-.RE
-.PP
-\-XX:AllocatePrefetchStepSize=\fIsize\fR
-.RS 4
-Sets the step size (in bytes) for sequential prefetch instructions\&. Append the letter
-\fBk\fR
-or
-\fBK\fR
-to indicate kilobytes,
-\fBm\fR
-or
-\fBM\fR
-to indicate megabytes,
-\fBg\fR
-or
-\fBG\fR
-to indicate gigabytes\&. By default, the step size is set to 16 bytes:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:AllocatePrefetchStepSize=16\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-Only the Java HotSpot Server VM supports this option\&.
-.RE
-.PP
-\-XX:AllocatePrefetchStyle=\fIstyle\fR
-.RS 4
-Sets the generated code style for prefetch instructions\&. The
-\fIstyle\fR
-argument is an integer from 0 to 3:
-.PP
-0
-.RS 4
-Do not generate prefetch instructions\&.
-.RE
-.PP
-1
-.RS 4
-Execute prefetch instructions after each allocation\&. This is the default parameter\&.
-.RE
-.PP
-2
-.RS 4
-Use the thread\-local allocation block (TLAB) watermark pointer to determine when prefetch instructions are executed\&.
-.RE
-.PP
-3
-.RS 4
-Use BIS instruction on SPARC for allocation prefetch\&.
-.RE
-.sp
-Only the Java HotSpot Server VM supports this option\&.
-.RE
-.PP
-\-XX:+BackgroundCompilation
-.RS 4
-Enables background compilation\&. This option is enabled by default\&. To disable background compilation, specify
-\fB\-XX:\-BackgroundCompilation\fR
-(this is equivalent to specifying
-\fB\-Xbatch\fR)\&.
-.RE
-.PP
-\-XX:CICompilerCount=\fIthreads\fR
-.RS 4
-Sets the number of compiler threads to use for compilation\&. By default, the number of threads is set to 2 for the server JVM, to 1 for the client JVM, and it scales to the number of cores if tiered compilation is used\&. The following example shows how to set the number of threads to 2:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:CICompilerCount=2\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
-\-XX:CodeCacheMinimumFreeSpace=\fIsize\fR
-.RS 4
-Sets the minimum free space (in bytes) required for compilation\&. Append the letter
-\fBk\fR
-or
-\fBK\fR
-to indicate kilobytes,
-\fBm\fR
-or
-\fBM\fR
-to indicate megabytes,
-\fBg\fR
-or
-\fBG\fR
-to indicate gigabytes\&. When less than the minimum free space remains, compiling stops\&. By default, this option is set to 500 KB\&. The following example shows how to set the minimum free space to 1024 MB:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:CodeCacheMinimumFreeSpace=1024m\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
-\-XX:CompileCommand=\fIcommand\fR,\fImethod\fR[,\fIoption\fR]
-.RS 4
-Specifies a command to perform on a method\&. For example, to exclude the
-\fBindexOf()\fR
-method of the
-\fBString\fR
-class from being compiled, use the following:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:CompileCommand=exclude,java/lang/String\&.indexOf\fR
- 
+-enableassertions[:[\fIpackagename\fR]\&.\&.\&.|:\fIclassname\fR], -ea[:[\fIpackagename\fR]\&.\&.\&.|:\fIclassname\fR]
+.br
 .fi
-.if n \{\
-.RE
-.\}
-Note that the full class name is specified, including all packages and subpackages separated by a slash (\fB/\fR)\&. For easier cut and paste operations, it is also possible to use the method name format produced by the
-\fB\-XX:+PrintCompilation\fR
-and
-\fB\-XX:+LogCompilation\fR
-options:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:CompileCommand=exclude,java\&.lang\&.String::indexOf\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-If the method is specified without the signature, the command will be applied to all methods with the specified name\&. However, you can also specify the signature of the method in the class file format\&. In this case, you should enclose the arguments in quotation marks, because otherwise the shell treats the semicolon as command end\&. For example, if you want to exclude only the
-\fBindexOf(String)\fR
-method of the
-\fBString\fR
-class from being compiled, use the following:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:CompileCommand="exclude,java/lang/String\&.indexOf,(Ljava/lang/String;)I"\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-You can also use the asterisk (*) as a wildcard for class and method names\&. For example, to exclude all
-\fBindexOf()\fR
-methods in all classes from being compiled, use the following:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:CompileCommand=exclude,*\&.indexOf\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-The commas and periods are aliases for spaces, making it easier to pass compiler commands through a shell\&. You can pass arguments to
-\fB\-XX:CompileCommand\fR
-using spaces as separators by enclosing the argument in quotation marks:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:CompileCommand="exclude java/lang/String indexOf"\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-Note that after parsing the commands passed on the command line using the
-\fB\-XX:CompileCommand\fR
-options, the JIT compiler then reads commands from the
-\fB\&.hotspot_compiler\fR
-file\&. You can add commands to this file or specify a different file using the
-\fB\-XX:CompileCommandFile\fR
-option\&.
-.sp
-To add several commands, either specify the
-\fB\-XX:CompileCommand\fR
-option multiple times, or separate each argument with the newline separator (\fB\en\fR)\&. The following commands are available:
-.PP
+Enables assertions\&. By default, assertions are disabled in all packages and classes\&.
+
+With no arguments, \f3-enableassertions\fR (\f3-ea\fR) enables assertions in all packages and classes\&. With the \fIpackagename\fR argument ending in \f3\&.\&.\&.\fR, the switch enables assertions in the specified package and any subpackages\&. If the argument is simply \f3\&.\&.\&.\fR, then the switch enables assertions in the unnamed package in the current working directory\&. With the \fIclassname\fR argument\f3\fR, the switch enables assertions in the specified class\&.
+
+The \f3-enableassertions\fR (\f3-ea\fR) option applies to all class loaders and to system classes (which do not have a class loader)\&. There is one exception to this rule: if the option is provided with no arguments, then it does not apply to system classes\&. This makes it easy to enable assertions in all classes except for system classes\&. The \f3-enablesystemassertions\fR option provides a separate switch to enable assertions in all system classes\&.
+
+To explicitly disable assertions in specific packages or classes, use the \f3-disableassertions\fR (\f3-da\fR) option\&. If a single command contains multiple instances of these switches, then they are processed in order before loading any classes\&. For example, to run the \f3MyClass\fR application with assertions enabled only in package \f3com\&.wombat\&.fruitbat\fR (and any subpackages) but disabled in class \f3com\&.wombat\&.fruitbat\&.Brickbat\fR, use the following command:
+.sp     
+.nf     
+\f3java \-ea:com\&.wombat\&.fruitbat\&.\&.\&. \-da:com\&.wombat\&.fruitbat\&.Brickbat MyClass\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP
+-enablesystemassertions, -esa
+.br
+Enables assertions in all system classes\&.
+.TP
+-help, -?
+.br
+Displays usage information for the \f3java\fR command without actually running the JVM\&.
+.TP
+-jar \fIfilename\fR
+.br
+Executes a program encapsulated in a JAR file\&. The \fIfilename\fR argument is the name of a JAR file with a manifest that contains a line in the form \f3Main-Class:\fR\fIclassname\fR that defines the class with the \f3public static void main(String[] args)\fR method that serves as your application\&'s starting point\&.
+
+When you use the \f3-jar\fR option, the specified JAR file is the source of all user classes, and other class path settings are ignored\&.
+
+For more information about JAR files, see the following resources:
+.RS     
+.TP 0.2i    
+\(bu
+jar(1)
+.TP 0.2i    
+\(bu
+The Java Archive (JAR) Files guide at http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/jar/index\&.html
+.TP 0.2i    
+\(bu
+Lesson: Packaging Programs in JAR Files at http://docs\&.oracle\&.com/javase/tutorial/deployment/jar/index\&.html
+.RE     
+
+.TP
+-javaagent:\fIjarpath\fR[=\fIoptions\fR]
+.br
+Loads the specified Java programming language agent\&. For more information about instrumenting Java applications, see the \f3java\&.lang\&.instrument\fR package description in the Java API documentation at http://docs\&.oracle\&.com/javase/8/docs/api/java/lang/instrument/package-summary\&.html
+.TP
+-jre-restrict-search
+.br
+Includes user-private JREs in the version search\&.
+.TP
+-no-jre-restrict-search
+.br
+Excludes user-private JREs from the version search\&.
+.TP
+-server
+.br
+Selects the Java HotSpot Server VM\&. The 64-bit version of the JDK supports only the Server VM, so in that case the option is implicit\&.
+
+For default JVM selection, see Server-Class Machine Detection at http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/vm/server-class\&.html
+.TP
+-showversion
+.br
+Displays version information and continues execution of the application\&. This option is equivalent to the \f3-version\fR option except that the latter instructs the JVM to exit after displaying version information\&.
+.TP
+-splash:\fIimgname\fR
+.br
+Shows the splash screen with the image specified by \fIimgname\fR\&. For example, to show the \f3splash\&.gif\fR file from the \f3images\fR directory when starting your application, use the following option:
+.sp     
+.nf     
+\f3\-splash:images/splash\&.gif\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP
+-verbose:class
+.br
+Displays information about each loaded class\&.
+.TP
+-verbose:gc
+.br
+Displays information about each garbage collection (GC) event\&.
+.TP
+-verbose:jni
+.br
+Displays information about the use of native methods and other Java Native Interface (JNI) activity\&.
+.TP
+-version
+.br
+Displays version information and then exits\&. This option is equivalent to the \f3-showversion\fR option except that the latter does not instruct the JVM to exit after displaying version information\&.
+.TP
+-version:\fIrelease\fR
+.br
+Specifies the release version to be used for running the application\&. If the version of the \f3java\fR command called does not meet this specification and an appropriate implementation is found on the system, then the appropriate implementation will be used\&.
+
+The \fIrelease\fR argument specifies either the exact version string, or a list of version strings and ranges separated by spaces\&. A \fIversion string\fR is the developer designation of the version number in the following form: \f31\&.\fR\fIx\fR\f3\&.0_\fR\fIu\fR (where \fIx\fR is the major version number, and \fIu\fR is the update version number)\&. A \fIversion range\fR is made up of a version string followed by a plus sign (\f3+\fR) to designate this version or later, or a part of a version string followed by an asterisk (\f3*\fR) to designate any version string with a matching prefix\&. Version strings and ranges can be combined using a space for a logical \fIOR\fR combination, or an ampersand (\f3&\fR) for a logical \fIAND\fR combination of two version strings/ranges\&. For example, if running the class or JAR file requires either JRE 6u13 (1\&.6\&.0_13), or any JRE 6 starting from 6u10 (1\&.6\&.0_10), specify the following:
+.sp     
+.nf     
+\f3\-version:"1\&.6\&.0_13 1\&.6* & 1\&.6\&.0_10+"\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+Quotation marks are necessary only if there are spaces in the \fIrelease\fR parameter\&.
+
+For JAR files, the preference is to specify version requirements in the JAR file manifest rather than on the command line\&.
+.SS NON-STANDARD\ OPTIONS    
+These options are general purpose options that are specific to the Java HotSpot Virtual Machine\&.
+.TP
+-X
+.br
+Displays help for all available \f3-X\fR options\&.
+.TP
+-Xbatch
+.br
+Disables background compilation\&. By default, the JVM compiles the method as a background task, running the method in interpreter mode until the background compilation is finished\&. The \f3-Xbatch\fR flag disables background compilation so that compilation of all methods proceeds as a foreground task until completed\&.
+
+This option is equivalent to \f3-XX:-BackgroundCompilation\fR\&.
+.TP
+-Xbootclasspath:\fIpath\fR
+.br
+Specifies a list of directories, JAR files, and ZIP archives separated by colons (:) to search for boot class files\&. These are used in place of the boot class files included in the JDK\&.
+
+\fI\fRDo not deploy applications that use this option to override a class in \f3rt\&.jar\fR, because this violates the JRE binary code license\&.
+.TP
+-Xbootclasspath/a:\fIpath\fR
+.br
+Specifies a list of directories, JAR files, and ZIP archives separated by colons (:) to append to the end of the default bootstrap class path\&.
+
+Do not deploy applications that use this option to override a class in \f3rt\&.jar\fR, because this violates the JRE binary code license\&.
+.TP
+-Xbootclasspath/p:\fIpath\fR
+.br
+Specifies a list of directories, JAR files, and ZIP archives separated by colons (:) to prepend to the front of the default bootstrap class path\&.
+
+Do not deploy applications that use this option to override a class in \f3rt\&.jar\fR, because this violates the JRE binary code license\&.
+.TP
+-Xcheck:jni
+.br
+Performs additional checks for Java Native Interface (JNI) functions\&. Specifically, it validates the parameters passed to the JNI function and the runtime environment data before processing the JNI request\&. Any invalid data encountered indicates a problem in the native code, and the JVM will terminate with an irrecoverable error in such cases\&. Expect a performance degradation when this option is used\&.
+.TP
+-Xcomp
+.br
+Forces compilation of methods on first invocation\&. By default, the Client VM (\f3-client\fR) performs 1,000 interpreted method invocations and the Server VM (\f3-server\fR) performs 10,000 interpreted method invocations to gather information for efficient compilation\&. Specifying the \f3-Xcomp\fR option disables interpreted method invocations to increase compilation performance at the expense of efficiency\&.
+
+You can also change the number of interpreted method invocations before compilation using the \f3-XX:CompileThreshold\fR option\&.
+.TP
+-Xdebug
+.br
+Does nothing\&. Provided for backward compatibility\&.
+.TP
+-Xdiag
+.br
+Shows additional diagnostic messages\&.
+.TP
+-Xfuture
+.br
+Enables strict class-file format checks that enforce close conformance to the class-file format specification\&. Developers are encouraged to use this flag when developing new code because the stricter checks will become the default in future releases\&.
+.TP
+-Xint
+.br
+Runs the application in interpreted-only mode\&. Compilation to native code is disabled, and all bytecode is executed by the interpreter\&. The performance benefits offered by the just in time (JIT) compiler are not present in this mode\&.
+.TP
+-Xinternalversion
+.br
+Displays more detailed JVM version information than the \f3-version\fR option, and then exits\&.
+.TP
+-Xloggc:\fIfilename\fR
+.br
+Sets the file to which verbose GC events information should be redirected for logging\&. The information written to this file is similar to the output of \f3-verbose:gc\fR with the time elapsed since the first GC event preceding each logged event\&. The \f3-Xloggc\fR option overrides \f3-verbose:gc\fR if both are given with the same \f3java\fR command\&.
+
+Example:
+.sp     
+.nf     
+\f3\-Xloggc:garbage\-collection\&.log\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP
+-Xmaxjitcodesize=\fIsize\fR
+.br
+Specifies the maximum code cache size (in bytes) for JIT-compiled code\&. Append the letter \f3k\fR or \f3K\fR to indicate kilobytes, \f3m\fR or \f3M\fR to indicate megabytes, \f3g\fR or \f3G\fR to indicate gigabytes\&. By default, the value is set to 48 MB:
+.sp     
+.nf     
+\f3\-Xmaxjitcodesize=48m\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+This option is equivalent to \f3-XX:ReservedCodeCacheSize\fR\&.
+.TP
+-Xmixed
+.br
+Executes all bytecode by the interpreter except for hot methods, which are compiled to native code\&.
+.TP
+-Xmn\fIsize\fR
+.br
+Sets the initial and maximum size (in bytes) of the heap for the young generation (nursery)\&. Append the letter \f3k\fR or \f3K\fR to indicate kilobytes, \f3m\fR or \f3M\fR to indicate megabytes, \f3g\fR or \f3G\fR to indicate gigabytes\&.
+
+The young generation region of the heap is used for new objects\&. GC is performed in this region more often than in other regions\&. If the size for the young generation is too small, then a lot of minor garbage collections will be performed\&. If the size is too large, then only full garbage collections will be performed, which can take a long time to complete\&. Oracle recommends that you keep the size for the young generation between a half and a quarter of the overall heap size\&.
+
+The following examples show how to set the initial and maximum size of young generation to 256 MB using various units:
+.sp     
+.nf     
+\f3\-Xmn256m\fP
+.fi     
+.nf     
+\f3\-Xmn262144k\fP
+.fi     
+.nf     
+\f3\-Xmn268435456\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+Instead of the \f3-Xmn\fR option to set both the initial and maximum size of the heap for the young generation, you can use \f3-XX:NewSize\fR to set the initial size and \f3-XX:MaxNewSize\fR to set the maximum size\&.
+.TP
+-Xms\fIsize\fR
+.br
+Sets the initial size (in bytes) of the heap\&. This value must be a multiple of 1024 and greater than 1 MB\&. Append the letter \f3k\fR or \f3K\fR to indicate kilobytes, \f3m\fR or \f3M\fR to indicate megabytes, \f3g\fR or \f3G\fR to indicate gigabytes\&.
+
+The following examples show how to set the size of allocated memory to 6 MB using various units:
+.sp     
+.nf     
+\f3\-Xms6291456\fP
+.fi     
+.nf     
+\f3\-Xms6144k\fP
+.fi     
+.nf     
+\f3\-Xms6m\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+If you do not set this option, then the initial size will be set as the sum of the sizes allocated for the old generation and the young generation\&. The initial size of the heap for the young generation can be set using the \f3-Xmn\fR option or the \f3-XX:NewSize\fR option\&.
+.TP
+-Xmx\fIsize\fR
+.br
+Specifies the maximum size (in bytes) of the memory allocation pool in bytes\&. This value must be a multiple of 1024 and greater than 2 MB\&. Append the letter \f3k\fR or \f3K\fR to indicate kilobytes, \f3m\fR or \f3M\fR to indicate megabytes, \f3g\fR or \f3G\fR to indicate gigabytes\&. The default value is chosen at runtime based on system configuration\&. For server deployments, \f3-Xms\fR and \f3-Xmx\fR are often set to the same value\&. See the section "Ergonomics" in \fIJava SE HotSpot Virtual Machine Garbage Collection Tuning Guide\fR at http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/vm/gctuning/index\&.html\&.
+
+The following examples show how to set the maximum allowed size of allocated memory to 80 MB using various units:
+.sp     
+.nf     
+\f3\-Xmx83886080\fP
+.fi     
+.nf     
+\f3\-Xmx81920k\fP
+.fi     
+.nf     
+\f3\-Xmx80m\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+The \f3-Xmx\fR option is equivalent to \f3-XX:MaxHeapSize\fR\&.
+.TP
+-Xnoclassgc
+.br
+Disables garbage collection (GC) of classes\&. This can save some GC time, which shortens interruptions during the application run\&.
+
+When you specify \f3-Xnoclassgc\fR at startup, the class objects in the application will be left untouched during GC and will always be considered live\&. This can result in more memory being permanently occupied which, if not used carefully, will throw an out of memory exception\&.
+.TP
+-Xprof
+.br
+Profiles the running program and sends profiling data to standard output\&. This option is provided as a utility that is useful in program development and is not intended to be used in production systems\&.
+.TP
+-Xrs
+.br
+Reduces the use of operating system signals by the JVM\&.
+
+Shutdown hooks enable orderly shutdown of a Java application by running user cleanup code (such as closing database connections) at shutdown, even if the JVM terminates abruptly\&.
+
+The JVM catches signals to implement shutdown hooks for unexpected termination\&. The JVM uses \f3SIGHUP\fR, \f3SIGINT\fR, and \f3SIGTERM\fR to initiate the running of shutdown hooks\&.
+
+The JVM uses a similar mechanism to implement the feature of dumping thread stacks for debugging purposes\&. The JVM uses \f3SIGQUIT\fR to perform thread dumps\&.
+
+Applications embedding the JVM frequently need to trap signals such as \f3SIGINT\fR or \f3SIGTERM\fR, which can lead to interference with the JVM signal handlers\&. The \f3-Xrs\fR option is available to address this issue\&. When \f3-Xrs\fR is used, the signal masks for \f3SIGINT\fR, \f3SIGTERM\fR, \f3SIGHUP\fR, and \f3SIGQUIT\fR are not changed by the JVM, and signal handlers for these signals are not installed\&.
+
+There are two consequences of specifying \f3-Xrs\fR:
+.RS     
+.TP 0.2i    
+\(bu
+\f3SIGQUIT\fR thread dumps are not available\&.
+.TP 0.2i    
+\(bu
+User code is responsible for causing shutdown hooks to run, for example, by calling \f3System\&.exit()\fR when the JVM is to be terminated\&.
+.RE     
+
+.TP
+-Xshare:\fImode\fR
+.br
+Sets the class data sharing mode\&. Possible \fImode\fR arguments for this option include the following:
+.RS     
+.TP     
+auto
+Use shared class data if possible\&. This is the default value for Java HotSpot 32-Bit Client VM\&.
+.TP     
+on
+Require the use of class data sharing\&. Print an error message and exit if class data sharing cannot be used\&.
+.TP     
+off
+Do not use shared class data\&. This is the default value for Java HotSpot 32-Bit Server VM, Java HotSpot 64-Bit Client VM, and Java HotSpot 64-Bit Server VM\&.
+.TP     
+dump
+Manually generate the class data sharing archive\&.
+.RE     
+
+.TP
+-XshowSettings:\fIcategory\fR
+.br
+Shows settings and continues\&. Possible \fIcategory\fR arguments for this option include the following:
+.RS     
+.TP     
+all
+Shows all categories of settings\&. This is the default value\&.
+.TP     
+locale
+Shows settings related to locale\&.
+.TP     
+properties
+Shows settings related to system properties\&.
+.TP     
+vm
+Shows the settings of the JVM\&.
+.RE     
+
+.TP
+-Xss\fIsize\fR
+.br
+Sets the thread stack size (in bytes)\&. Append the letter \f3k\fR or \f3K\fR to indicate KB, \f3m\fR or \f3M\fR to indicate MB, \f3g\fR or \f3G\fR to indicate GB\&. The default value depends on the platform:
+.RS     
+.TP 0.2i    
+\(bu
+Linux/ARM (32-bit): 320 KB
+.TP 0.2i    
+\(bu
+Linux/i386 (32-bit): 320 KB
+.TP 0.2i    
+\(bu
+Linux/x64 (64-bit): 1024 KB
+.TP 0.2i    
+\(bu
+OS X (64-bit): 1024 KB
+.TP 0.2i    
+\(bu
+Oracle Solaris/i386 (32-bit): 320 KB
+.TP 0.2i    
+\(bu
+Oracle Solaris/x64 (64-bit): 1024 KB
+.TP 0.2i    
+\(bu
+Windows: depends on virtual memory
+.RE     
+
+
+The following examples set the thread stack size to 1024 KB in different units:
+.sp     
+.nf     
+\f3\-Xss1m\fP
+.fi     
+.nf     
+\f3\-Xss1024k\fP
+.fi     
+.nf     
+\f3\-Xss1048576\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+This option is equivalent to \f3-XX:ThreadStackSize\fR\&.
+.TP
+-Xusealtsigs
+.br
+Use alternative signals instead of \f3SIGUSR1\fR and \f3SIGUSR2\fR for JVM internal signals\&. This option is equivalent to \f3-XX:+UseAltSigs\fR\&.
+.TP
+-Xverify:\fImode\fR
+.br
+Sets the mode of the bytecode verifier\&. Bytecode verification helps to troubleshoot some problems, but it also adds overhead to the running application\&. Possible \fImode\fR arguments for this option include the following:
+.RS     
+.TP     
+none
+Do not verify the bytecode\&. This reduces startup time and also reduces the protection provided by Java\&.
+.TP     
+remote
+Verify those classes that are not loaded by the bootstrap class loader\&. This is the default behavior if you do not specify the \f3-Xverify\fR option\&.
+.TP     
+all
+Verify all classes\&.
+.RE     
+
+.SS ADVANCED\ RUNTIME\ OPTIONS    
+These options control the runtime behavior of the Java HotSpot VM\&.
+.TP
+-XX:+DisableAttachMechanism
+.br
+Enables the option that disables the mechanism that lets tools attach to the JVM\&. By default, this option is disabled, meaning that the attach mechanism is enabled and you can use tools such as \f3jcmd\fR, \f3jstack\fR, \f3jmap\fR, and \f3jinfo\fR\&.
+.TP
+-XX:ErrorFile=\fIfilename\fR
+.br
+Specifies the path and file name to which error data is written when an irrecoverable error occurs\&. By default, this file is created in the current working directory and named \f3hs_err_pid\fR\fIpid\fR\f3\&.log\fR where \fIpid\fR is the identifier of the process that caused the error\&. The following example shows how to set the default log file (note that the identifier of the process is specified as \f3%p\fR):
+.sp     
+.nf     
+\f3\-XX:ErrorFile=\&./hs_err_pid%p\&.log\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+The following example shows how to set the error log to \f3/var/log/java/java_error\&.log\fR:
+.sp     
+.nf     
+\f3\-XX:ErrorFile=/var/log/java/java_error\&.log\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+If the file cannot be created in the specified directory (due to insufficient space, permission problem, or another issue), then the file is created in the temporary directory for the operating system\&. The temporary directory is \f3/tmp\fR\&.
+.TP
+-XX:+FailOverToOldVerifier
+.br
+Enables automatic failover to the old verifier when the new type checker fails\&. By default, this option is disabled and it is ignored (that is, treated as disabled) for classes with a recent bytecode version\&. You can enable it for classes with older versions of the bytecode\&.
+.TP
+-XX:LargePageSizeInBytes=\fIsize\fR
+.br
+On Solaris, sets the maximum size (in bytes) for large pages used for Java heap\&. The \fIsize\fR argument must be a power of 2 (2, 4, 8, 16, \&.\&.\&.)\&. Append the letter \f3k\fR or \f3K\fR to indicate kilobytes, \f3m\fR or \f3M\fR to indicate megabytes, \f3g\fR or \f3G\fR to indicate gigabytes\&. By default, the size is set to 0, meaning that the JVM chooses the size for large pages automatically\&.
+
+The following example illustrates how to set the large page size to 4 megabytes (MB):
+.sp     
+.nf     
+\f3\-XX:LargePageSizeInBytes=4m\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP
+-XX:MaxDirectMemorySize=\fIsize\fR
+.br
+Sets the maximum total size (in bytes) of the New I/O (the \f3java\&.nio\fR package) direct-buffer allocations\&. Append the letter \f3k\fR or \f3K\fR to indicate kilobytes, \f3m\fR or \f3M\fR to indicate megabytes, \f3g\fR or \f3G\fR to indicate gigabytes\&. By default, the size is set to 0, meaning that the JVM chooses the size for NIO direct-buffer allocations automatically\&.
+
+The following examples illustrate how to set the NIO size to 1024 KB in different units:
+.sp     
+.nf     
+\f3\-XX:MaxDirectMemorySize=1m\fP
+.fi     
+.nf     
+\f3\-XX:MaxDirectMemorySize=1024k\fP
+.fi     
+.nf     
+\f3\-XX:MaxDirectMemorySize=1048576\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP
+-XX:NativeMemoryTracking=\fImode\fR
+.br
+Specifies the mode for tracking JVM native memory usage\&. Possible \fImode\fR arguments for this option include the following:
+.RS     
+.TP     
+off
+Do not track JVM native memory usage\&. This is the default behavior if you do not specify the \f3-XX:NativeMemoryTracking\fR option\&.
+.TP     
+summary
+Only track memory usage by JVM subsystems, such as Java heap, class, code, and thread\&.
+.TP     
+detail
+In addition to tracking memory usage by JVM subsystems, track memory usage by individual \f3CallSite\fR, individual virtual memory region and its committed regions\&.
+.RE     
+
+.TP
+-XX:ObjectAlignmentInBytes=\fIalignment\fR
+.br
+Sets the memory alignment of Java objects (in bytes)\&. By default, the value is set to 8 bytes\&. The specified value should be a power of two, and must be within the range of 8 and 256 (inclusive)\&. This option makes it possible to use compressed pointers with large Java heap sizes\&.
+
+The heap size limit in bytes is calculated as:
+
+\f34GB * ObjectAlignmentInBytes\fR
+
+Note: As the alignment value increases, the unused space between objects will also increase\&. As a result, you may not realize any benefits from using compressed pointers with large Java heap sizes\&.
+.TP
+-XX:OnError=\fIstring\fR
+.br
+Sets a custom command or a series of semicolon-separated commands to run when an irrecoverable error occurs\&. If the string contains spaces, then it must be enclosed in quotation marks\&.
+
+\fI\fRThe following example shows how the \f3-XX:OnError\fR option can be used to run the \f3gcore\fR command to create the core image, and the debugger is started to attach to the process in case of an irrecoverable error (the \f3%p\fR designates the current process):
+.sp     
+.nf     
+\f3\-XX:OnError="gcore %p;dbx \- %p"\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP
+-XX:OnOutOfMemoryError=\fIstring\fR
+.br
+Sets a custom command or a series of semicolon-separated commands to run when an \f3OutOfMemoryError\fR exception is first thrown\&. If the string contains spaces, then it must be enclosed in quotation marks\&. For an example of a command string, see the description of the \f3-XX:OnError\fR option\&.
+.TP
+-XX:+PerfDataSaveToFile
+.br
+If enabled, saves jstat(1) binary data when the Java application exits\&. This binary data is saved in a file named \f3hsperfdata_\fR\fI<pid>\fR, where \fI<pid>\fR is the process identifier of the Java application you ran\&. Use \f3jstat\fR to display the performance data contained in this file as follows:
+.sp     
+.nf     
+\f3jstat \-class file:///\fI<path>\fR/hsperfdata_\fI<pid>\fR\fP
+.fi     
+.nf     
+\f3jstat \-gc file:///\fI<path>\fR/hsperfdata_\fI<pid>\fR\fP
+.fi     
+.sp     
+
+.TP
+-XX:+PrintCommandLineFlags
+.br
+Enables printing of ergonomically selected JVM flags that appeared on the command line\&. It can be useful to know the ergonomic values set by the JVM, such as the heap space size and the selected garbage collector\&. By default, this option is disabled and flags are not printed\&.
+.TP
+-XX:+PrintNMTStatistics
+.br
+Enables printing of collected native memory tracking data at JVM exit when native memory tracking is enabled (see \f3-XX:NativeMemoryTracking\fR)\&. By default, this option is disabled and native memory tracking data is not printed\&.
+.TP
+-XX:+RelaxAccessControlCheck
+.br
+Decreases the amount of access control checks in the verifier\&. By default, this option is disabled, and it is ignored (that is, treated as disabled) for classes with a recent bytecode version\&. You can enable it for classes with older versions of the bytecode\&.
+.TP
+-XX:+ShowMessageBoxOnError
+.br
+Enables displaying of a dialog box when the JVM experiences an irrecoverable error\&. This prevents the JVM from exiting and keeps the process active so that you can attach a debugger to it to investigate the cause of the error\&. By default, this option is disabled\&.
+.TP
+-XX:ThreadStackSize=\fIsize\fR
+.br
+Sets the thread stack size (in bytes)\&. Append the letter \f3k\fR or \f3K\fR to indicate kilobytes, \f3m\fR or \f3M\fR to indicate megabytes, \f3g\fR or \f3G\fR to indicate gigabytes\&. The default value depends on the platform:
+.RS     
+.TP 0.2i    
+\(bu
+Linux/ARM (32-bit): 320 KB
+.TP 0.2i    
+\(bu
+Linux/i386 (32-bit): 320 KB
+.TP 0.2i    
+\(bu
+Linux/x64 (64-bit): 1024 KB
+.TP 0.2i    
+\(bu
+OS X (64-bit): 1024 KB
+.TP 0.2i    
+\(bu
+Oracle Solaris/i386 (32-bit): 320 KB
+.TP 0.2i    
+\(bu
+Oracle Solaris/x64 (64-bit): 1024 KB
+.TP 0.2i    
+\(bu
+Windows: depends on virtual memory
+.RE     
+
+
+The following examples show how to set the thread stack size to 1024 KB in different units:
+.sp     
+.nf     
+\f3\-XX:ThreadStackSize=1m\fP
+.fi     
+.nf     
+\f3\-XX:ThreadStackSize=1024k\fP
+.fi     
+.nf     
+\f3\-XX:ThreadStackSize=1048576\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+This option is equivalent to \f3-Xss\fR\&.
+.TP
+-XX:+TraceClassLoading
+.br
+Enables tracing of classes as they are loaded\&. By default, this option is disabled and classes are not traced\&.
+.TP
+-XX:+TraceClassLoadingPreorder
+.br
+Enables tracing of all loaded classes in the order in which they are referenced\&. By default, this option is disabled and classes are not traced\&.
+.TP
+-XX:+TraceClassResolution
+.br
+Enables tracing of constant pool resolutions\&. By default, this option is disabled and constant pool resolutions are not traced\&.
+.TP
+-XX:+TraceClassUnloading
+.br
+Enables tracing of classes as they are unloaded\&. By default, this option is disabled and classes are not traced\&.
+.TP
+-XX:+TraceLoaderConstraints
+.br
+Enables tracing of the loader constraints recording\&. By default, this option is disabled and loader constraints recording is not traced\&.
+.TP
+-XX:+UseAltSigs
+.br
+Enables the use of alternative signals instead of \f3SIGUSR1\fR and \f3SIGUSR2\fR for JVM internal signals\&. By default, this option is disabled and alternative signals are not used\&. This option is equivalent to \f3-Xusealtsigs\fR\&.
+.TP
+-XX:-UseBiasedLocking
+.br
+Disables the use of biased locking\&. Some applications with significant amounts of uncontended synchronization may attain significant speedups with this flag enabled, whereas applications with certain patterns of locking may see slowdowns\&. For more information about the biased locking technique, see the example in Java Tuning White Paper at http://www\&.oracle\&.com/technetwork/java/tuning-139912\&.html#section4\&.2\&.5
+
+By default, this option is enabled\&.
+.TP
+-XX:-UseCompressedOops
+.br
+Disables the use of compressed pointers\&. By default, this option is enabled, and compressed pointers are used when Java heap sizes are less than 32 GB\&. When this option is enabled, object references are represented as 32-bit offsets instead of 64-bit pointers, which typically increases performance when running the application with Java heap sizes less than 32 GB\&. This option works only for 64-bit JVMs\&.
+
+It is also possible to use compressed pointers when Java heap sizes are greater than 32GB\&. See the \f3-XX:ObjectAlignmentInBytes\fR option\&.
+.TP
+-XX:+UseHugeTLBFS
+.br
+This option for Linux is the equivalent of specifying \f3-XX:+UseLargePages\fR\&. This option is disabled by default\&. This option pre-allocates all large pages up-front, when memory is reserved; consequently the JVM cannot dynamically grow or shrink large pages memory areas; see \f3-XX:UseTransparentHugePages\fR if you want this behavior\&.
+
+For more information, see Large Pages\&.
+.TP
+-XX:+UseLargePages
+.br
+Enables the use of large page memory\&. By default, this option is disabled and large page memory is not used\&.
+
+For more information, see Large Pages\&.
+.TP
+-XX:+UseMembar
+.br
+Enables issuing of membars on thread state transitions\&. This option is disabled by default on all platforms except ARM servers, where it is enabled\&. (It is recommended that you do not disable this option on ARM servers\&.)
+.TP
+-XX:+UsePerfData
+.br
+Enables the \f3perfdata\fR feature\&. This option is enabled by default to allow JVM monitoring and performance testing\&. Disabling it suppresses the creation of the \f3hsperfdata_userid\fR directories\&. To disable the \f3perfdata\fR feature, specify \f3-XX:-UsePerfData\fR\&.
+.TP
+-XX:+UseTransparentHugePages
+.br
+On Linux, enables the use of large pages that can dynamically grow or shrink\&. This option is disabled by default\&. You may encounter performance problems with transparent huge pages as the OS moves other pages around to create huge pages; this option is made available for experimentation\&.
+
+For more information, see Large Pages\&.
+.TP
+-XX:+AllowUserSignalHandlers
+.br
+Enables installation of signal handlers by the application\&. By default, this option is disabled and the application is not allowed to install signal handlers\&.
+.SS ADVANCED\ JIT\ COMPILER\ OPTIONS    
+These options control the dynamic just-in-time (JIT) compilation performed by the Java HotSpot VM\&.
+.TP
+-XX:+AggressiveOpts
+.br
+Enables the use of aggressive performance optimization features, which are expected to become default in upcoming releases\&. By default, this option is disabled and experimental performance features are not used\&.
+.TP
+-XX:AllocateInstancePrefetchLines=\fIlines\fR
+.br
+Sets the number of lines to prefetch ahead of the instance allocation pointer\&. By default, the number of lines to prefetch is set to 1:
+.sp     
+.nf     
+\f3\-XX:AllocateInstancePrefetchLines=1\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+Only the Java HotSpot Server VM supports this option\&.
+.TP
+-XX:AllocatePrefetchDistance=\fIsize\fR
+.br
+Sets the size (in bytes) of the prefetch distance for object allocation\&. Memory about to be written with the value of new objects is prefetched up to this distance starting from the address of the last allocated object\&. Each Java thread has its own allocation point\&.
+
+Negative values denote that prefetch distance is chosen based on the platform\&. Positive values are bytes to prefetch\&. Append the letter \f3k\fR or \f3K\fR to indicate kilobytes, \f3m\fR or \f3M\fR to indicate megabytes, \f3g\fR or \f3G\fR to indicate gigabytes\&. The default value is set to -1\&.
+
+The following example shows how to set the prefetch distance to 1024 bytes:
+.sp     
+.nf     
+\f3\-XX:AllocatePrefetchDistance=1024\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+Only the Java HotSpot Server VM supports this option\&.
+.TP
+-XX:AllocatePrefetchInstr=\fIinstruction\fR
+.br
+Sets the prefetch instruction to prefetch ahead of the allocation pointer\&. Only the Java HotSpot Server VM supports this option\&. Possible values are from 0 to 3\&. The actual instructions behind the values depend on the platform\&. By default, the prefetch instruction is set to 0:
+.sp     
+.nf     
+\f3\-XX:AllocatePrefetchInstr=0\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+Only the Java HotSpot Server VM supports this option\&.
+.TP
+-XX:AllocatePrefetchLines=\fIlines\fR
+.br
+Sets the number of cache lines to load after the last object allocation by using the prefetch instructions generated in compiled code\&. The default value is 1 if the last allocated object was an instance, and 3 if it was an array\&.
+
+The following example shows how to set the number of loaded cache lines to 5:
+.sp     
+.nf     
+\f3\-XX:AllocatePrefetchLines=5\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+Only the Java HotSpot Server VM supports this option\&.
+.TP
+-XX:AllocatePrefetchStepSize=\fIsize\fR
+.br
+Sets the step size (in bytes) for sequential prefetch instructions\&. Append the letter \f3k\fR or \f3K\fR to indicate kilobytes, \f3m\fR or \f3M\fR to indicate megabytes, \f3g\fR or \f3G\fR to indicate gigabytes\&. By default, the step size is set to 16 bytes:
+.sp     
+.nf     
+\f3\-XX:AllocatePrefetchStepSize=16\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+Only the Java HotSpot Server VM supports this option\&.
+.TP
+-XX:AllocatePrefetchStyle=\fIstyle\fR
+.br
+Sets the generated code style for prefetch instructions\&. The \fIstyle\fR argument is an integer from 0 to 3:
+.RS     
+.TP     
+0
+Do not generate prefetch instructions\&.
+.TP     
+1
+Execute prefetch instructions after each allocation\&. This is the default parameter\&.
+.TP     
+2
+Use the thread-local allocation block (TLAB) watermark pointer to determine when prefetch instructions are executed\&.
+.TP     
+3
+Use BIS instruction on SPARC for allocation prefetch\&.
+.RE     
+
+
+Only the Java HotSpot Server VM supports this option\&.
+.TP
+-XX:+BackgroundCompilation
+.br
+Enables background compilation\&. This option is enabled by default\&. To disable background compilation, specify \f3-XX:-BackgroundCompilation\fR (this is equivalent to specifying \f3-Xbatch\fR)\&.
+.TP
+-XX:CICompilerCount=\fIthreads\fR
+.br
+Sets the number of compiler threads to use for compilation\&. By default, the number of threads is set to 2 for the server JVM, to 1 for the client JVM, and it scales to the number of cores if tiered compilation is used\&. The following example shows how to set the number of threads to 2:
+.sp     
+.nf     
+\f3\-XX:CICompilerCount=2\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP
+-XX:CodeCacheMinimumFreeSpace=\fIsize\fR
+.br
+Sets the minimum free space (in bytes) required for compilation\&. Append the letter \f3k\fR or \f3K\fR to indicate kilobytes, \f3m\fR or \f3M\fR to indicate megabytes, \f3g\fR or \f3G\fR to indicate gigabytes\&. When less than the minimum free space remains, compiling stops\&. By default, this option is set to 500 KB\&. The following example shows how to set the minimum free space to 1024 MB:
+.sp     
+.nf     
+\f3\-XX:CodeCacheMinimumFreeSpace=1024m\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP
+-XX:CompileCommand=\fIcommand\fR,\fImethod\fR[,\fIoption\fR]
+.br
+Specifies a command to perform on a method\&. For example, to exclude the \f3indexOf()\fR method of the \f3String\fR class from being compiled, use the following:
+.sp     
+.nf     
+\f3\-XX:CompileCommand=exclude,java/lang/String\&.indexOf\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+Note that the full class name is specified, including all packages and subpackages separated by a slash (\f3/\fR)\&. For easier cut and paste operations, it is also possible to use the method name format produced by the \f3-XX:+PrintCompilation\fR and \f3-XX:+LogCompilation\fR options:
+.sp     
+.nf     
+\f3\-XX:CompileCommand=exclude,java\&.lang\&.String::indexOf\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+If the method is specified without the signature, the command will be applied to all methods with the specified name\&. However, you can also specify the signature of the method in the class file format\&. In this case, you should enclose the arguments in quotation marks, because otherwise the shell treats the semicolon as command end\&. For example, if you want to exclude only the \f3indexOf(String)\fR method of the \f3String\fR class from being compiled, use the following:
+.sp     
+.nf     
+\f3\-XX:CompileCommand="exclude,java/lang/String\&.indexOf,(Ljava/lang/String;)I"\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+You can also use the asterisk (*) as a wildcard for class and method names\&. For example, to exclude all \f3indexOf()\fR methods in all classes from being compiled, use the following:
+.sp     
+.nf     
+\f3\-XX:CompileCommand=exclude,*\&.indexOf\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+The commas and periods are aliases for spaces, making it easier to pass compiler commands through a shell\&. You can pass arguments to \f3-XX:CompileCommand\fR using spaces as separators by enclosing the argument in quotation marks:
+.sp     
+.nf     
+\f3\-XX:CompileCommand="exclude java/lang/String indexOf"\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+Note that after parsing the commands passed on the command line using the \f3-XX:CompileCommand\fR options, the JIT compiler then reads commands from the \f3\&.hotspot_compiler\fR file\&. You can add commands to this file or specify a different file using the \f3-XX:CompileCommandFile\fR option\&.
+
+To add several commands, either specify the \f3-XX:CompileCommand\fR option multiple times, or separate each argument with the newline separator (\f3\en\fR)\&. The following commands are available:
+.RS     
+.TP     
 break
-.RS 4
 Set a breakpoint when debugging the JVM to stop at the beginning of compilation of the specified method\&.
-.RE
-.PP
+.TP     
 compileonly
-.RS 4
-Exclude all methods from compilation except for the specified method\&. As an alternative, you can use the
-\fB\-XX:CompileOnly\fR
-option, which allows to specify several methods\&.
-.RE
-.PP
+Exclude all methods from compilation except for the specified method\&. As an alternative, you can use the \f3-XX:CompileOnly\fR option, which allows to specify several methods\&.
+.TP     
 dontinline
-.RS 4
 Prevent inlining of the specified method\&.
-.RE
-.PP
+.TP     
 exclude
-.RS 4
 Exclude the specified method from compilation\&.
-.RE
-.PP
+.TP     
 help
-.RS 4
-Print a help message for the
-\fB\-XX:CompileCommand\fR
-option\&.
-.RE
-.PP
+Print a help message for the \f3-XX:CompileCommand\fR option\&.
+.TP     
 inline
-.RS 4
 Attempt to inline the specified method\&.
-.RE
-.PP
+.TP     
 log
-.RS 4
-Exclude compilation logging (with the
-\fB\-XX:+LogCompilation\fR
-option) for all methods except for the specified method\&. By default, logging is performed for all compiled methods\&.
-.RE
-.PP
+Exclude compilation logging (with the \f3-XX:+LogCompilation\fR option) for all methods except for the specified method\&. By default, logging is performed for all compiled methods\&.
+.TP     
 option
-.RS 4
-This command can be used to pass a JIT compilation option to the specified method in place of the last argument (\fIoption\fR)\&. The compilation option is set at the end, after the method name\&. For example, to enable the
-\fBBlockLayoutByFrequency\fR
-option for the
-\fBappend()\fR
-method of the
-\fBStringBuffer\fR
-class, use the following:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:CompileCommand=option,java/lang/StringBuffer\&.append,BlockLayoutByFrequency\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
+This command can be used to pass a JIT compilation option to the specified method in place of the last argument (\fIoption\fR)\&. The compilation option is set at the end, after the method name\&. For example, to enable the \f3BlockLayoutByFrequency\fR option for the \f3append()\fR method of the \f3StringBuffer\fR class, use the following:
+.sp     
+.nf     
+\f3\-XX:CompileCommand=option,java/lang/StringBuffer\&.append,BlockLayoutByFrequency\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
 You can specify multiple compilation options, separated by commas or spaces\&.
-.RE
-.PP
+.TP     
 print
-.RS 4
 Print generated assembler code after compilation of the specified method\&.
-.RE
-.PP
+.TP     
 quiet
-.RS 4
-Do not print the compile commands\&. By default, the commands that you specify with the \-\fBXX:CompileCommand\fR
-option are printed; for example, if you exclude from compilation the
-\fBindexOf()\fR
-method of the
-\fBString\fR
-class, then the following will be printed to standard output:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBCompilerOracle: exclude java/lang/String\&.indexOf\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-You can suppress this by specifying the
-\fB\-XX:CompileCommand=quiet\fR
-option before other
-\fB\-XX:CompileCommand\fR
-options\&.
-.RE
-.RE
-.PP
-\-XX:CompileCommandFile=\fIfilename\fR
-.RS 4
-Sets the file from which JIT compiler commands are read\&. By default, the
-\fB\&.hotspot_compiler\fR
-file is used to store commands performed by the JIT compiler\&.
-.sp
-Each line in the command file represents a command, a class name, and a method name for which the command is used\&. For example, this line prints assembly code for the
-\fBtoString()\fR
-method of the
-\fBString\fR
-class:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBprint java/lang/String toString\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-For more information about specifying the commands for the JIT compiler to perform on methods, see the
-\fB\-XX:CompileCommand\fR
-option\&.
-.RE
-.PP
-\-XX:CompileOnly=\fImethods\fR
-.RS 4
-Sets the list of methods (separated by commas) to which compilation should be restricted\&. Only the specified methods will be compiled\&. Specify each method with the full class name (including the packages and subpackages)\&. For example, to compile only the
-\fBlength()\fR
-method of the
-\fBString\fR
-class and the
-\fBsize()\fR
-method of the
-\fBList\fR
-class, use the following:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:CompileOnly=java/lang/String\&.length,java/util/List\&.size\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-Note that the full class name is specified, including all packages and subpackages separated by a slash (\fB/\fR)\&. For easier cut and paste operations, it is also possible to use the method name format produced by the
-\fB\-XX:+PrintCompilation\fR
-and
-\fB\-XX:+LogCompilation\fR
-options:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:CompileOnly=java\&.lang\&.String::length,java\&.util\&.List::size\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
+Do not print the compile commands\&. By default, the commands that you specify with the -\f3XX:CompileCommand\fR option are printed; for example, if you exclude from compilation the \f3indexOf()\fR method of the \f3String\fR class, then the following will be printed to standard output:
+.sp     
+.nf     
+\f3CompilerOracle: exclude java/lang/String\&.indexOf\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+You can suppress this by specifying the \f3-XX:CompileCommand=quiet\fR option before other \f3-XX:CompileCommand\fR options\&.
+.RE     
+
+.TP
+-XX:CompileCommandFile=\fIfilename\fR
+.br
+Sets the file from which JIT compiler commands are read\&. By default, the \f3\&.hotspot_compiler\fR file is used to store commands performed by the JIT compiler\&.
+
+Each line in the command file represents a command, a class name, and a method name for which the command is used\&. For example, this line prints assembly code for the \f3toString()\fR method of the \f3String\fR class:
+.sp     
+.nf     
+\f3print java/lang/String toString\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+For more information about specifying the commands for the JIT compiler to perform on methods, see the \f3-XX:CompileCommand\fR option\&.
+.TP
+-XX:CompileOnly=\fImethods\fR
+.br
+Sets the list of methods (separated by commas) to which compilation should be restricted\&. Only the specified methods will be compiled\&. Specify each method with the full class name (including the packages and subpackages)\&. For example, to compile only the \f3length()\fR method of the \f3String\fR class and the \f3size()\fR method of the \f3List\fR class, use the following:
+.sp     
+.nf     
+\f3\-XX:CompileOnly=java/lang/String\&.length,java/util/List\&.size\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+Note that the full class name is specified, including all packages and subpackages separated by a slash (\f3/\fR)\&. For easier cut and paste operations, it is also possible to use the method name format produced by the \f3-XX:+PrintCompilation\fR and \f3-XX:+LogCompilation\fR options:
+.sp     
+.nf     
+\f3\-XX:CompileOnly=java\&.lang\&.String::length,java\&.util\&.List::size\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
 Although wildcards are not supported, you can specify only the class or package name to compile all methods in that class or package, as well as specify just the method to compile methods with this name in any class:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:CompileOnly=java/lang/String\fR
-\fB\-XX:CompileOnly=java/lang\fR
-\fB\-XX:CompileOnly=\&.length\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
-\-XX:CompileThreshold=\fIinvocations\fR
-.RS 4
-Sets the number of interpreted method invocations before compilation\&. By default, in the server JVM, the JIT compiler performs 10,000 interpreted method invocations to gather information for efficient compilation\&. For the client JVM, the default setting is 1,500 invocations\&. The following example shows how to set the number of interpreted method invocations to 5,000:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:CompileThreshold=5000\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-You can completely disable interpretation of Java methods before compilation by specifying the
-\fB\-Xcomp\fR
-option\&.
-.RE
-.PP
-\-XX:+DoEscapeAnalysis
-.RS 4
-Enables the use of escape analysis\&. This option is enabled by default\&. To disable the use of escape analysis, specify
-\fB\-XX:\-DoEscapeAnalysis\fR\&. Only the Java HotSpot Server VM supports this option\&.
-.RE
-.PP
-\-XX:InitialCodeCacheSize=\fIsize\fR
-.RS 4
-Sets the initial code cache size (in bytes)\&. Append the letter
-\fBk\fR
-or
-\fBK\fR
-to indicate kilobytes,
-\fBm\fR
-or
-\fBM\fR
-to indicate megabytes,
-\fBg\fR
-or
-\fBG\fR
-to indicate gigabytes\&. The default value is set to 500 KB\&. The following example shows how to set the initial code cache size to 32 KB:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:InitialCodeCacheSize=32k\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
-\-XX:+Inline
-.RS 4
-Enables method inlining\&. This option is enabled by default to increase performance\&. To disable method inlining, specify
-\fB\-XX:\-Inline\fR\&.
-.RE
-.PP
-\-XX:InlineSmallCode=\fIsize\fR
-.RS 4
-Sets the maximum code size (in bytes) for compiled methods that should be inlined\&. Append the letter
-\fBk\fR
-or
-\fBK\fR
-to indicate kilobytes,
-\fBm\fR
-or
-\fBM\fR
-to indicate megabytes,
-\fBg\fR
-or
-\fBG\fR
-to indicate gigabytes\&. Only compiled methods with the size smaller than the specified size will be inlined\&. By default, the maximum code size is set to 1000 bytes:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:InlineSmallCode=1000\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
-\-XX:+LogCompilation
-.RS 4
-Enables logging of compilation activity to a file named
-\fBhotspot\&.log\fR
-in the current working directory\&. You can specify a different log file path and name using the
-\fB\-XX:LogFile\fR
-option\&.
-.sp
-By default, this option is disabled and compilation activity is not logged\&. The
-\fB\-XX:+LogCompilation\fR
-option has to be used together with the
-\fB\-XX:UnlockDiagnosticVMOptions\fR
-option that unlocks diagnostic JVM options\&.
-.sp
-You can enable verbose diagnostic output with a message printed to the console every time a method is compiled by using the
-\fB\-XX:+PrintCompilation\fR
-option\&.
-.RE
-.PP
-\-XX:MaxInlineSize=\fIsize\fR
-.RS 4
-Sets the maximum bytecode size (in bytes) of a method to be inlined\&. Append the letter
-\fBk\fR
-or
-\fBK\fR
-to indicate kilobytes,
-\fBm\fR
-or
-\fBM\fR
-to indicate megabytes,
-\fBg\fR
-or
-\fBG\fR
-to indicate gigabytes\&. By default, the maximum bytecode size is set to 35 bytes:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:MaxInlineSize=35\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
-\-XX:MaxNodeLimit=\fInodes\fR
-.RS 4
+.sp     
+.nf     
+\f3\-XX:CompileOnly=java/lang/String\fP
+.fi     
+.nf     
+\f3\-XX:CompileOnly=java/lang\fP
+.fi     
+.nf     
+\f3\-XX:CompileOnly=\&.length\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP
+-XX:CompileThreshold=\fIinvocations\fR
+.br
+Sets the number of interpreted method invocations before compilation\&. By default, in the server JVM, the JIT compiler performs 10,000 interpreted method invocations to gather information for efficient compilation\&. For the client JVM, the default setting is 1,500 invocations\&. This option is ignored when tiered compilation is enabled; see the option \f3-XX:+TieredCompilation\fR\&. The following example shows how to set the number of interpreted method invocations to 5,000:
+.sp     
+.nf     
+\f3\-XX:CompileThreshold=5000\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+You can completely disable interpretation of Java methods before compilation by specifying the \f3-Xcomp\fR option\&.
+.TP
+-XX:+DoEscapeAnalysis
+.br
+Enables the use of escape analysis\&. This option is enabled by default\&. To disable the use of escape analysis, specify \f3-XX:-DoEscapeAnalysis\fR\&. Only the Java HotSpot Server VM supports this option\&.
+.TP
+-XX:InitialCodeCacheSize=\fIsize\fR
+.br
+Sets the initial code cache size (in bytes)\&. Append the letter \f3k\fR or \f3K\fR to indicate kilobytes, \f3m\fR or \f3M\fR to indicate megabytes, \f3g\fR or \f3G\fR to indicate gigabytes\&. The default value is set to 500 KB\&. The initial code cache size should be not less than the system\&'s minimal memory page size\&. The following example shows how to set the initial code cache size to 32 KB:
+.sp     
+.nf     
+\f3\-XX:InitialCodeCacheSize=32k\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP
+-XX:+Inline
+.br
+Enables method inlining\&. This option is enabled by default to increase performance\&. To disable method inlining, specify \f3-XX:-Inline\fR\&.
+.TP
+-XX:InlineSmallCode=\fIsize\fR
+.br
+Sets the maximum code size (in bytes) for compiled methods that should be inlined\&. Append the letter \f3k\fR or \f3K\fR to indicate kilobytes, \f3m\fR or \f3M\fR to indicate megabytes, \f3g\fR or \f3G\fR to indicate gigabytes\&. Only compiled methods with the size smaller than the specified size will be inlined\&. By default, the maximum code size is set to 1000 bytes:
+.sp     
+.nf     
+\f3\-XX:InlineSmallCode=1000\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP
+-XX:+LogCompilation
+.br
+Enables logging of compilation activity to a file named \f3hotspot\&.log\fR in the current working directory\&. You can specify a different log file path and name using the \f3-XX:LogFile\fR option\&.
+
+By default, this option is disabled and compilation activity is not logged\&. The \f3-XX:+LogCompilation\fR option has to be used together with the \f3-XX:UnlockDiagnosticVMOptions\fR option that unlocks diagnostic JVM options\&.
+
+You can enable verbose diagnostic output with a message printed to the console every time a method is compiled by using the \f3-XX:+PrintCompilation\fR option\&.
+.TP
+-XX:MaxInlineSize=\fIsize\fR
+.br
+Sets the maximum bytecode size (in bytes) of a method to be inlined\&. Append the letter \f3k\fR or \f3K\fR to indicate kilobytes, \f3m\fR or \f3M\fR to indicate megabytes, \f3g\fR or \f3G\fR to indicate gigabytes\&. By default, the maximum bytecode size is set to 35 bytes:
+.sp     
+.nf     
+\f3\-XX:MaxInlineSize=35\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP
+-XX:MaxNodeLimit=\fInodes\fR
+.br
 Sets the maximum number of nodes to be used during single method compilation\&. By default, the maximum number of nodes is set to 65,000:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:MaxNodeLimit=65000\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
-\-XX:MaxTrivialSize=\fIsize\fR
-.RS 4
-Sets the maximum bytecode size (in bytes) of a trivial method to be inlined\&. Append the letter
-\fBk\fR
-or
-\fBK\fR
-to indicate kilobytes,
-\fBm\fR
-or
-\fBM\fR
-to indicate megabytes,
-\fBg\fR
-or
-\fBG\fR
-to indicate gigabytes\&. By default, the maximum bytecode size of a trivial method is set to 6 bytes:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:MaxTrivialSize=6\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
-\-XX:+OptimizeStringConcat
-.RS 4
-Enables the optimization of
-\fBString\fR
-concatenation operations\&. This option is enabled by default\&. To disable the optimization of
-\fBString\fR
-concatenation operations, specify
-\fB\-XX:\-OptimizeStringConcat\fR\&. Only the Java HotSpot Server VM supports this option\&.
-.RE
-.PP
-\-XX:+PrintAssembly
-.RS 4
-Enables printing of assembly code for bytecoded and native methods by using the external
-\fBdisassembler\&.so\fR
-library\&. This enables you to see the generated code, which may help you to diagnose performance issues\&.
-.sp
-By default, this option is disabled and assembly code is not printed\&. The
-\fB\-XX:+PrintAssembly\fR
-option has to be used together with the
-\fB\-XX:UnlockDiagnosticVMOptions\fR
-option that unlocks diagnostic JVM options\&.
-.RE
-.PP
-\-XX:+PrintCompilation
-.RS 4
+.sp     
+.nf     
+\f3\-XX:MaxNodeLimit=65000\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP
+-XX:MaxTrivialSize=\fIsize\fR
+.br
+Sets the maximum bytecode size (in bytes) of a trivial method to be inlined\&. Append the letter \f3k\fR or \f3K\fR to indicate kilobytes, \f3m\fR or \f3M\fR to indicate megabytes, \f3g\fR or \f3G\fR to indicate gigabytes\&. By default, the maximum bytecode size of a trivial method is set to 6 bytes:
+.sp     
+.nf     
+\f3\-XX:MaxTrivialSize=6\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP
+-XX:+OptimizeStringConcat
+.br
+Enables the optimization of \f3String\fR concatenation operations\&. This option is enabled by default\&. To disable the optimization of \f3String\fR concatenation operations, specify \f3-XX:-OptimizeStringConcat\fR\&. Only the Java HotSpot Server VM supports this option\&.
+.TP
+-XX:+PrintAssembly
+.br
+Enables printing of assembly code for bytecoded and native methods by using the external \f3disassembler\&.so\fR library\&. This enables you to see the generated code, which may help you to diagnose performance issues\&.
+
+By default, this option is disabled and assembly code is not printed\&. The \f3-XX:+PrintAssembly\fR option has to be used together with the \f3-XX:UnlockDiagnosticVMOptions\fR option that unlocks diagnostic JVM options\&.
+.TP
+-XX:+PrintCompilation
+.br
 Enables verbose diagnostic output from the JVM by printing a message to the console every time a method is compiled\&. This enables you to see which methods actually get compiled\&. By default, this option is disabled and diagnostic output is not printed\&.
-.sp
-You can also log compilation activity to a file by using the
-\fB\-XX:+LogCompilation\fR
-option\&.
-.RE
-.PP
-\-XX:+PrintInlining
-.RS 4
+
+You can also log compilation activity to a file by using the \f3-XX:+LogCompilation\fR option\&.
+.TP
+-XX:+PrintInlining
+.br
 Enables printing of inlining decisions\&. This enables you to see which methods are getting inlined\&.
-.sp
-By default, this option is disabled and inlining information is not printed\&. The
-\fB\-XX:+PrintInlining\fR
-option has to be used together with the
-\fB\-XX:+UnlockDiagnosticVMOptions\fR
-option that unlocks diagnostic JVM options\&.
-.RE
-.PP
-\-XX:ReservedCodeCacheSize=\fIsize\fR
-.RS 4
-Sets the maximum code cache size (in bytes) for JIT\-compiled code\&. Append the letter
-\fBk\fR
-or
-\fBK\fR
-to indicate kilobytes,
-\fBm\fR
-or
-\fBM\fR
-to indicate megabytes,
-\fBg\fR
-or
-\fBG\fR
-to indicate gigabytes\&. This option is equivalent to
-\fB\-Xmaxjitcodesize\fR\&.
-.RE
-.PP
-\-XX:+TieredCompilation
-.RS 4
+
+By default, this option is disabled and inlining information is not printed\&. The \f3-XX:+PrintInlining\fR option has to be used together with the \f3-XX:+UnlockDiagnosticVMOptions\fR option that unlocks diagnostic JVM options\&.
+.TP
+-XX:ReservedCodeCacheSize=\fIsize\fR
+.br
+Sets the maximum code cache size (in bytes) for JIT-compiled code\&. Append the letter \f3k\fR or \f3K\fR to indicate kilobytes, \f3m\fR or \f3M\fR to indicate megabytes, \f3g\fR or \f3G\fR to indicate gigabytes\&. This option has a limit of 2 GB; otherwise, an error is generated\&. The maximum code cache size should not be less than the initial code cache size; see the option \f3-XX:InitialCodeCacheSize\fR\&. This option is equivalent to \f3-Xmaxjitcodesize\fR\&.
+.TP
+-XX:RTMAbortRatio=\fIabort_ratio\fR
+.br
+The RTM abort ratio is specified as a percentage (%) of all executed RTM transactions\&. If a number of aborted transactions becomes greater than this ratio, then the compiled code will be deoptimized\&. This ratio is used when the \f3-XX:+UseRTMDeopt\fR option is enabled\&. The default value of this option is 50\&. This means that the compiled code will be deoptimized if 50% of all transactions are aborted\&.
+.TP
+-XX:RTMRetryCount=\fInumber_of_retries\fR
+.br
+RTM locking code will be retried, when it is aborted or busy, the number of times specified by this option before falling back to the normal locking mechanism\&. The default value for this option is 5\&. The \f3-XX:UseRTMLocking\fR option must be enabled\&.
+.TP
+-XX:+TieredCompilation
+.br
 Enables the use of tiered compilation\&. By default, this option is enabled\&. Only the Java HotSpot Server VM supports this option\&.
-.RE
-.PP
-\-XX:+UseAES
-.RS 4
-Enables hardware\-based AES intrinsics for Intel, AMD, and SPARC hardware\&. Intel Westmere (2010 and newer), AMD Bulldozer (2011 and newer), and SPARC (T4 and newer) are the supported hardware\&. UseAES is used in conjunction with UseAESIntrinsics\&.
-.RE
-.PP
-\-XX:+UseAESIntrinsics
-.RS 4
-UseAES and UseAESIntrinsics flags are enabled by default and are supported only for Java HotSpot Server VM 32\-bit and 64\-bit\&. To disable hardware\-based AES intrinsics, specify
-\fB\-XX:\-UseAES \-XX:\-UseAESIntrinsics\fR\&. For example, to enable hardware AES, use the following flags:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:+UseAES \-XX:+UseAESIntrinsics\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-To support UseAES and UseAESIntrinsics flags for 32\-bit and 64\-bit use
-\fB\-server\fR
-option to choose Java HotSpot Server VM\&. These flags are not supported on Client VM\&.
-.RE
-.PP
-\-XX:+UseCodeCacheFlushing
-.RS 4
-Enables flushing of the code cache before shutting down the compiler\&. This option is enabled by default\&. To disable flushing of the code cache before shutting down the compiler, specify
-\fB\-XX:\-UseCodeCacheFlushing\fR\&.
-.RE
-.PP
-\-XX:+UseCondCardMark
-.RS 4
+.TP
+-XX:+UseAES
+.br
+Enables hardware-based AES intrinsics for Intel, AMD, and SPARC hardware\&. Intel Westmere (2010 and newer), AMD Bulldozer (2011 and newer), and SPARC (T4 and newer) are the supported hardware\&. UseAES is used in conjunction with UseAESIntrinsics\&.
+.TP
+-XX:+UseAESIntrinsics
+.br
+UseAES and UseAESIntrinsics flags are enabled by default and are supported only for Java HotSpot Server VM 32-bit and 64-bit\&. To disable hardware-based AES intrinsics, specify \f3-XX:-UseAES -XX:-UseAESIntrinsics\fR\&. For example, to enable hardware AES, use the following flags:
+.sp     
+.nf     
+\f3\-XX:+UseAES \-XX:+UseAESIntrinsics\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+To support UseAES and UseAESIntrinsics flags for 32-bit and 64-bit use \f3-server\fR option to choose Java HotSpot Server VM\&. These flags are not supported on Client VM\&.
+.TP
+-XX:+UseCodeCacheFlushing
+.br
+Enables flushing of the code cache before shutting down the compiler\&. This option is enabled by default\&. To disable flushing of the code cache before shutting down the compiler, specify \f3-XX:-UseCodeCacheFlushing\fR\&.
+.TP
+-XX:+UseCondCardMark
+.br
 Enables checking of whether the card is already marked before updating the card table\&. This option is disabled by default and should only be used on machines with multiple sockets, where it will increase performance of Java applications that rely heavily on concurrent operations\&. Only the Java HotSpot Server VM supports this option\&.
-.RE
-.PP
-\-XX:+UseSuperWord
-.RS 4
-Enables the transformation of scalar operations into superword operations\&. This option is enabled by default\&. To disable the transformation of scalar operations into superword operations, specify
-\fB\-XX:\-UseSuperWord\fR\&. Only the Java HotSpot Server VM supports this option\&.
-.RE
-.SS "Experimental JIT Compiler Options"
-.PP
-The options related to the Restricted Transactional Memory (RTM) locking feature in this section are experimental and are not officially supported in Java SE 8u20; you must enable the
-\fB\-XX:+UnlockExperimentalVMOptions\fR
-option to use them\&. These options are only available for the Java HotSpot Server VM on x86 CPUs that support Transactional Synchronization Extensions (TSX)\&.
-.PP
-\-XX:RTMAbortRatio=\fIabort_ratio\fR
-.RS 4
-The RTM abort ratio is specified as a percentage (%) of all executed RTM transactions\&. If a number of aborted transactions becomes greater than this ratio, then the compiled code will be deoptimized\&. This ratio is used when the
-\fB\-XX:+UseRTMDeopt\fR
-option is enabled\&. The default value of this option is 50\&. This means that the compiled code will be deoptimized if 50% of all transactions are aborted\&.
-.RE
-.PP
-\-XX:RTMRetryCount=\fInumber_of_retries\fR
-.RS 4
-RTM locking code will be retried, when it is aborted or busy, the number of times specified by this option before falling back to the normal locking mechanism\&. The default value for this option is 5\&. The
-\fB\-XX:UseRTMLocking\fR
-option must be enabled\&.
-.RE
-.PP
-\-XX:+UseRTMDeopt
-.RS 4
-Auto\-tunes RTM locking depending on the abort ratio\&. This ratio is specified by
-\fB\-XX:RTMAbortRatio\fR
-option\&. If the number of aborted transactions exceeds the abort ratio, then the method containing the lock will be deoptimized and recompiled with all locks as normal locks\&. This option is disabled by default\&. The
-\fB\-XX:UseRTMLocking\fR
-option must be enabled\&.
-.RE
-.PP
-\-XX:+UseRTMLocking
-.RS 4
-Generate Restricted Transactional Memory (RTM) locking code for all inflated locks, with the normal locking mechanism as the fallback handler\&. This option is disabled by default\&.
-.sp
-RTM is part of Intel\*(Aqs Transactional Synchronization Extensions (TSX), which is an x86 instruction set extension and facilitates the creation of multithreaded applications\&. RTM introduces the new instructions
-\fBXBEGIN\fR,
-\fBXABORT\fR,
-\fBXEND\fR, and
-\fBXTEST\fR\&. The
-\fBXBEGIN\fR
-and
-\fBXEND\fR
-instructions enclose a set of instructions to run as a transaction\&. If no conflict is found when running the transaction, the memory and register modifications are committed together at the
-\fBXEND\fR
-instruction\&. The
-\fBXABORT\fR
-instruction can be used to explicitly abort a transaction and the
-\fBXEND\fR
-instruction to check if a set of instructions are being run in a transaction\&.
-.sp
-A lock on a transaction is inflated when another thread tries to access the same transaction, thereby blocking the thread that did not originally request access to the transaction\&. RTM requires that a fallback set of operations be specified in case a transaction aborts or fails\&. An RTM lock is a lock that has been delegated to the TSX\*(Aqs system\&.
-.sp
-RTM improves performance for highly contended locks with low conflict in a critical region (which is code that must not be accessed by more than one thread concurrently)\&. RTM also improves the performance of coarse\-grain locking, which typically does not perform well in multithreaded applications\&. (Coarse\-grain locking is the strategy of holding locks for long periods to minimize the overhead of taking and releasing locks, while fine\-grained locking is the strategy of trying to achieve maximum parallelism by locking only when necessary and unlocking as soon as possible\&.) Also, for lightly contended locks that are used by different threads, RTM can reduce false cache line sharing, also known as cache line ping\-pong\&. This occurs when multiple threads from different processors are accessing different resources, but the resources share the same cache line\&. As a result, the processors repeatedly invalidate the cache lines of other processors, which forces them to read from main memory instead of their cache\&.
-.RE
-.SS "Advanced Serviceability Options"
-.PP
+.TP
+-XX:+UseRTMDeopt
+.br
+Auto-tunes RTM locking depending on the abort ratio\&. This ratio is specified by \f3-XX:RTMAbortRatio\fR option\&. If the number of aborted transactions exceeds the abort ratio, then the method containing the lock will be deoptimized and recompiled with all locks as normal locks\&. This option is disabled by default\&. The \f3-XX:+UseRTMLocking\fR option must be enabled\&.
+.TP
+-XX:+UseRTMLocking
+.br
+Generate Restricted Transactional Memory (RTM) locking code for all inflated locks, with the normal locking mechanism as the fallback handler\&. This option is disabled by default\&. Options related to RTM are only available for the Java HotSpot Server VM on x86 CPUs that support Transactional Synchronization Extensions (TSX)\&.
+
+RTM is part of Intel\&'s TSX, which is an x86 instruction set extension and facilitates the creation of multithreaded applications\&. RTM introduces the new instructions \f3XBEGIN\fR, \f3XABORT\fR, \f3XEND\fR, and \f3XTEST\fR\&. The \f3XBEGIN\fR and \f3XEND\fR instructions enclose a set of instructions to run as a transaction\&. If no conflict is found when running the transaction, the memory and register modifications are committed together at the \f3XEND\fR instruction\&. The \f3XABORT\fR instruction can be used to explicitly abort a transaction and the \f3XEND\fR instruction to check if a set of instructions are being run in a transaction\&.
+
+A lock on a transaction is inflated when another thread tries to access the same transaction, thereby blocking the thread that did not originally request access to the transaction\&. RTM requires that a fallback set of operations be specified in case a transaction aborts or fails\&. An RTM lock is a lock that has been delegated to the TSX\&'s system\&.
+
+RTM improves performance for highly contended locks with low conflict in a critical region (which is code that must not be accessed by more than one thread concurrently)\&. RTM also improves the performance of coarse-grain locking, which typically does not perform well in multithreaded applications\&. (Coarse-grain locking is the strategy of holding locks for long periods to minimize the overhead of taking and releasing locks, while fine-grained locking is the strategy of trying to achieve maximum parallelism by locking only when necessary and unlocking as soon as possible\&.) Also, for lightly contended locks that are used by different threads, RTM can reduce false cache line sharing, also known as cache line ping-pong\&. This occurs when multiple threads from different processors are accessing different resources, but the resources share the same cache line\&. As a result, the processors repeatedly invalidate the cache lines of other processors, which forces them to read from main memory instead of their cache\&.
+.TP
+-XX:+UseSHA
+.br
+Enables hardware-based intrinsics for SHA crypto hash functions for SPARC hardware\&. \f3UseSHA\fR is used in conjunction with the \f3UseSHA1Intrinsics\fR, \f3UseSHA256Intrinsics\fR, and \f3UseSHA512Intrinsics\fR options\&.
+
+The \f3UseSHA\fR and \f3UseSHA*Intrinsics\fR flags are enabled by default, and are supported only for Java HotSpot Server VM 64-bit on SPARC T4 and newer\&.
+
+This feature is only applicable when using the \f3sun\&.security\&.provider\&.Sun\fR provider for SHA operations\&.
+
+To disable all hardware-based SHA intrinsics, specify \f3-XX:-UseSHA\fR\&. To disable only a particular SHA intrinsic, use the appropriate corresponding option\&. For example: \f3-XX:-UseSHA256Intrinsics\fR\&.
+.TP
+-XX:+UseSHA1Intrinsics
+.br
+Enables intrinsics for SHA-1 crypto hash function\&.
+.TP
+-XX:+UseSHA256Intrinsics
+.br
+Enables intrinsics for SHA-224 and SHA-256 crypto hash functions\&.
+.TP
+-XX:+UseSHA512Intrinsics
+.br
+Enables intrinsics for SHA-384 and SHA-512 crypto hash functions\&.
+.TP
+-XX:+UseSuperWord
+.br
+Enables the transformation of scalar operations into superword operations\&. This option is enabled by default\&. To disable the transformation of scalar operations into superword operations, specify \f3-XX:-UseSuperWord\fR\&. Only the Java HotSpot Server VM supports this option\&.
+.SS ADVANCED\ SERVICEABILITY\ OPTIONS    
 These options provide the ability to gather system information and perform extensive debugging\&.
-.PP
-\-XX:+ExtendedDTraceProbes
-.RS 4
-Enables additional
-\fBdtrace\fR
-tool probes that impact the performance\&. By default, this option is disabled and
-\fBdtrace\fR
-performs only standard probes\&.
-.RE
-.PP
-\-XX:+HeapDumpOnOutOfMemory
-.RS 4
-Enables the dumping of the Java heap to a file in the current directory by using the heap profiler (HPROF) when a
-\fBjava\&.lang\&.OutOfMemoryError\fR
-exception is thrown\&. You can explicitly set the heap dump file path and name using the
-\fB\-XX:HeapDumpPath\fR
-option\&. By default, this option is disabled and the heap is not dumped when an
-\fBOutOfMemoryError\fR
-exception is thrown\&.
-.RE
-.PP
-\-XX:HeapDumpPath=\fIpath\fR
-.RS 4
-Sets the path and file name for writing the heap dump provided by the heap profiler (HPROF) when the
-\fB\-XX:+HeapDumpOnOutOfMemoryError\fR
-option is set\&. By default, the file is created in the current working directory, and it is named
-\fBjava_pid\fR\fIpid\fR\fB\&.hprof\fR
-where
-\fIpid\fR
-is the identifier of the process that caused the error\&. The following example shows how to set the default file explicitly (\fB%p\fR
-represents the current process identificator):
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:HeapDumpPath=\&./java_pid%p\&.hprof\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-The following example shows how to set the heap dump file to
-\fB/var/log/java/java_heapdump\&.hprof\fR:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:HeapDumpPath=/var/log/java/java_heapdump\&.hprof\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
-\-XX:LogFile=\fIpath\fR
-.RS 4
-Sets the path and file name where log data is written\&. By default, the file is created in the current working directory, and it is named
-\fBhotspot\&.log\fR\&.
-.sp
-The following example shows how to set the log file to
-\fB/var/log/java/hotspot\&.log\fR:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:LogFile=/var/log/java/hotspot\&.log\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
-\-XX:+PrintClassHistogram
-.RS 4
-Enables printing of a class instance histogram after a
-\fBControl+C\fR
-event (\fBSIGTERM\fR)\&. By default, this option is disabled\&.
-.sp
-Setting this option is equivalent to running the
-\fBjmap \-histo\fR
-command, or the
-\fBjcmd \fR\fIpid\fR\fB GC\&.class_histogram\fR
-command, where
-\fIpid\fR
-is the current Java process identifier\&.
-.RE
-.PP
-\-XX:+PrintConcurrentLocks
-.RS 4
-Enables printing of j locks after a event\&. By default, this option is disabled\&.
-.sp
-Enables printing of j\fBava\&.util\&.concurrent\fR
-locks after a
-\fBControl+C\fR
-event (\fBSIGTERM\fR)\&. By default, this option is disabled\&.
-.sp
-Setting this option is equivalent to running the
-\fBjstack \-l\fR
-command or the
-\fBjcmd \fR\fIpid\fR\fB Thread\&.print \-l\fR
-command, where
-\fIpid\fR
-is the current Java process identifier\&.
-.RE
-.PP
-\-XX:+UnlockDiagnosticVMOptions
-.RS 4
+.TP
+-XX:+ExtendedDTraceProbes
+.br
+Enables additional \f3dtrace\fR tool probes that impact the performance\&. By default, this option is disabled and \f3dtrace\fR performs only standard probes\&.
+.TP
+-XX:+HeapDumpOnOutOfMemory
+.br
+Enables the dumping of the Java heap to a file in the current directory by using the heap profiler (HPROF) when a \f3java\&.lang\&.OutOfMemoryError\fR exception is thrown\&. You can explicitly set the heap dump file path and name using the \f3-XX:HeapDumpPath\fR option\&. By default, this option is disabled and the heap is not dumped when an \f3OutOfMemoryError\fR exception is thrown\&.
+.TP
+-XX:HeapDumpPath=\fIpath\fR
+.br
+Sets the path and file name for writing the heap dump provided by the heap profiler (HPROF) when the \f3-XX:+HeapDumpOnOutOfMemoryError\fR option is set\&. By default, the file is created in the current working directory, and it is named \f3java_pid\fR\fIpid\fR\f3\&.hprof\fR where \fIpid\fR is the identifier of the process that caused the error\&. The following example shows how to set the default file explicitly (\f3%p\fR represents the current process identificator):
+.sp     
+.nf     
+\f3\-XX:HeapDumpPath=\&./java_pid%p\&.hprof\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+\fI\fRThe following example shows how to set the heap dump file to \f3/var/log/java/java_heapdump\&.hprof\fR:
+.sp     
+.nf     
+\f3\-XX:HeapDumpPath=/var/log/java/java_heapdump\&.hprof\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP
+-XX:LogFile=\fIpath\fR
+.br
+Sets the path and file name where log data is written\&. By default, the file is created in the current working directory, and it is named \f3hotspot\&.log\fR\&.
+
+\fI\fRThe following example shows how to set the log file to \f3/var/log/java/hotspot\&.log\fR:
+.sp     
+.nf     
+\f3\-XX:LogFile=/var/log/java/hotspot\&.log\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP
+-XX:+PrintClassHistogram
+.br
+\fI\fREnables printing of a class instance histogram after a \f3Control+C\fR event (\f3SIGTERM\fR)\&. By default, this option is disabled\&.
+
+Setting this option is equivalent to running the \f3jmap -histo\fR command, or the \f3jcmd\fR\fIpid\fR\f3GC\&.class_histogram\fR command, where \fIpid\fR is the current Java process identifier\&.
+.TP     
+-XX:+PrintConcurrentLocks
+
+
+Enables printing of \f3java\&.util\&.concurrent\fR locks after a \f3Control+C\fR event (\f3SIGTERM\fR)\&. By default, this option is disabled\&.
+
+Setting this option is equivalent to running the \f3jstack -l\fR command or the \f3jcmd\fR\fIpid\fR\f3Thread\&.print -l\fR command, where \fIpid\fR is the current Java process identifier\&.
+.TP
+-XX:+UnlockDiagnosticVMOptions
+.br
 Unlocks the options intended for diagnosing the JVM\&. By default, this option is disabled and diagnostic options are not available\&.
-.RE
-.SS "Advanced Garbage Collection Options"
-.PP
+.SS ADVANCED\ GARBAGE\ COLLECTION\ OPTIONS    
 These options control how garbage collection (GC) is performed by the Java HotSpot VM\&.
-.PP
-\-XX:+AggressiveHeap
-.RS 4
-Enables Java heap optimization\&. This sets various parameters to be optimal for long\-running jobs with intensive memory allocation, based on the configuration of the computer (RAM and CPU)\&. By default, the option is disabled and the heap is not optimized\&.
-.RE
-.PP
-\-XX:+AlwaysPreTouch
-.RS 4
-Enables touching of every page on the Java heap during JVM initialization\&. This gets all pages into the memory before entering the
-\fBmain()\fR
-method\&. The option can be used in testing to simulate a long\-running system with all virtual memory mapped to physical memory\&. By default, this option is disabled and all pages are committed as JVM heap space fills\&.
-.RE
-.PP
-\-XX:+CMSClassUnloadingEnabled
-.RS 4
-Enables class unloading when using the concurrent mark\-sweep (CMS) garbage collector\&. This option is enabled by default\&. To disable class unloading for the CMS garbage collector, specify
-\fB\-XX:\-CMSClassUnloadingEnabled\fR\&.
-.RE
-.PP
-\-XX:CMSExpAvgFactor=\fIpercent\fR
-.RS 4
+.TP
+-XX:+AggressiveHeap
+.br
+Enables Java heap optimization\&. This sets various parameters to be optimal for long-running jobs with intensive memory allocation, based on the configuration of the computer (RAM and CPU)\&. By default, the option is disabled and the heap is not optimized\&.
+.TP
+-XX:+AlwaysPreTouch
+.br
+Enables touching of every page on the Java heap during JVM initialization\&. This gets all pages into the memory before entering the \f3main()\fR method\&. The option can be used in testing to simulate a long-running system with all virtual memory mapped to physical memory\&. By default, this option is disabled and all pages are committed as JVM heap space fills\&.
+.TP
+-XX:+CMSClassUnloadingEnabled
+.br
+Enables class unloading when using the concurrent mark-sweep (CMS) garbage collector\&. This option is enabled by default\&. To disable class unloading for the CMS garbage collector, specify \f3-XX:-CMSClassUnloadingEnabled\fR\&.
+.TP
+-XX:CMSExpAvgFactor=\fIpercent\fR
+.br
 Sets the percentage of time (0 to 100) used to weight the current sample when computing exponential averages for the concurrent collection statistics\&. By default, the exponential averages factor is set to 25%\&. The following example shows how to set the factor to 15%:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:CMSExpAvgFactor=15\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
-\-XX:CMSInitiatingOccupancyFraction=\fIpercent\fR
-.RS 4
-Sets the percentage of the old generation occupancy (0 to 100) at which to start a CMS collection cycle\&. The default value is set to \-1\&. Any negative value (including the default) implies that
-\fB\-XX:CMSTriggerRatio\fR
-is used to define the value of the initiating occupancy fraction\&.
-.sp
+.sp     
+.nf     
+\f3\-XX:CMSExpAvgFactor=15\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP
+-XX:CMSInitiatingOccupancyFraction=\fIpercent\fR
+.br
+Sets the percentage of the old generation occupancy (0 to 100) at which to start a CMS collection cycle\&. The default value is set to -1\&. Any negative value (including the default) implies that \f3-XX:CMSTriggerRatio\fR is used to define the value of the initiating occupancy fraction\&.
+
 The following example shows how to set the occupancy fraction to 20%:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:CMSInitiatingOccupancyFraction=20\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
-\-XX:+CMSScavengeBeforeRemark
-.RS 4
+.sp     
+.nf     
+\f3\-XX:CMSInitiatingOccupancyFraction=20\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP
+-XX:+CMSScavengeBeforeRemark
+.br
 Enables scavenging attempts before the CMS remark step\&. By default, this option is disabled\&.
-.RE
-.PP
-\-XX:CMSTriggerRatio=\fIpercent\fR
-.RS 4
-Sets the percentage (0 to 100) of the value specified by
-\fB\-XX:MinHeapFreeRatio\fR
-that is allocated before a CMS collection cycle commences\&. The default value is set to 80%\&.
-.sp
+.TP
+-XX:CMSTriggerRatio=\fIpercent\fR
+.br
+Sets the percentage (0 to 100) of the value specified by \f3-XX:MinHeapFreeRatio\fR that is allocated before a CMS collection cycle commences\&. The default value is set to 80%\&.
+
 The following example shows how to set the occupancy fraction to 75%:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:CMSTriggerRatio=75\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
-\-XX:ConcGCThreads=\fIthreads\fR
-.RS 4
+.sp     
+.nf     
+\f3\-XX:CMSTriggerRatio=75\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP
+-XX:ConcGCThreads=\fIthreads\fR
+.br
 Sets the number of threads used for concurrent GC\&. The default value depends on the number of CPUs available to the JVM\&.
-.sp
+
 For example, to set the number of threads for concurrent GC to 2, specify the following option:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:ConcGCThreads=2\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
-\-XX:+DisableExplicitGC
-.RS 4
-Enables the option that disables processing of calls to
-\fBSystem\&.gc()\fR\&. This option is disabled by default, meaning that calls to
-\fBSystem\&.gc()\fR
-are processed\&. If processing of calls to
-\fBSystem\&.gc()\fR
-is disabled, the JVM still performs GC when necessary\&.
-.RE
-.PP
-\-XX:+ExplicitGCInvokesConcurrent
-.RS 4
-Enables invoking of concurrent GC by using the
-\fBSystem\&.gc()\fR
-request\&. This option is disabled by default and can be enabled only together with the
-\fB\-XX:+UseConcMarkSweepGC\fR
-option\&.
-.RE
-.PP
-\-XX:+ExplicitGCInvokesConcurrentAndUnloadsClasses
-.RS 4
-Enables invoking of concurrent GC by using the
-\fBSystem\&.gc()\fR
-request and unloading of classes during the concurrent GC cycle\&. This option is disabled by default and can be enabled only together with the
-\fB\-XX:+UseConcMarkSweepGC\fR
-option\&.
-.RE
-.PP
-\-XX:G1HeapRegionSize=\fIsize\fR
-.RS 4
-Sets the size of the regions into which the Java heap is subdivided when using the garbage\-first (G1) collector\&. The value can be between 1 MB and 32 MB\&. The default region size is determined ergonomically based on the heap size\&.
-.sp
+.sp     
+.nf     
+\f3\-XX:ConcGCThreads=2\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP
+-XX:+DisableExplicitGC
+.br
+Enables the option that disables processing of calls to \f3System\&.gc()\fR\&. This option is disabled by default, meaning that calls to \f3System\&.gc()\fR are processed\&. If processing of calls to \f3System\&.gc()\fR is disabled, the JVM still performs GC when necessary\&.
+.TP
+-XX:+ExplicitGCInvokesConcurrent
+.br
+Enables invoking of concurrent GC by using the \f3System\&.gc()\fR request\&. This option is disabled by default and can be enabled only together with the \f3-XX:+UseConcMarkSweepGC\fR option\&.
+.TP
+-XX:+ExplicitGCInvokesConcurrentAndUnloadsClasses
+.br
+Enables invoking of concurrent GC by using the \f3System\&.gc()\fR request and unloading of classes during the concurrent GC cycle\&. This option is disabled by default and can be enabled only together with the \f3-XX:+UseConcMarkSweepGC\fR option\&.
+.TP
+-XX:G1HeapRegionSize=\fIsize\fR
+.br
+Sets the size of the regions into which the Java heap is subdivided when using the garbage-first (G1) collector\&. The value can be between 1 MB and 32 MB\&. The default region size is determined ergonomically based on the heap size\&.
+
 The following example shows how to set the size of the subdivisions to 16 MB:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:G1HeapRegionSize=16m\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
-\-XX:+G1PrintHeapRegions
-.RS 4
+.sp     
+.nf     
+\f3\-XX:G1HeapRegionSize=16m\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP
+-XX:+G1PrintHeapRegions
+.br
 Enables the printing of information about which regions are allocated and which are reclaimed by the G1 collector\&. By default, this option is disabled\&.
-.RE
-.PP
-\-XX:G1ReservePercent=\fIpercent\fR
-.RS 4
+.TP
+-XX:G1ReservePercent=\fIpercent\fR
+.br
 Sets the percentage of the heap (0 to 50) that is reserved as a false ceiling to reduce the possibility of promotion failure for the G1 collector\&. By default, this option is set to 10%\&.
-.sp
+
 The following example shows how to set the reserved heap to 20%:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:G1ReservePercent=20\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
-\-XX:InitialHeapSize=\fIsize\fR
-.RS 4
-Sets the initial size (in bytes) of the memory allocation pool\&. This value must be either 0, or a multiple of 1024 and greater than 1 MB\&. Append the letter
-\fBk\fR
-or
-\fBK\fR
-to indicate kilobytes,
-\fBm\fR
-or
-\fBM\fR
-to indicate megabytes,
-\fBg\fR
-or
-\fBG\fR
-to indicate gigabytes\&. The default value is chosen at runtime based on system configuration\&. For more information, see Garbage Collector Ergonomics at http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/vm/gc\-ergonomics\&.html
-.sp
+.sp     
+.nf     
+\f3\-XX:G1ReservePercent=20\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP
+-XX:InitialHeapSize=\fIsize\fR
+.br
+Sets the initial size (in bytes) of the memory allocation pool\&. This value must be either 0, or a multiple of 1024 and greater than 1 MB\&. Append the letter \f3k\fR or \f3K\fR to indicate kilobytes, \f3m\fR or \f3M\fR to indicate megabytes, \f3g\fR or \f3G\fR to indicate gigabytes\&. The default value is chosen at runtime based on system configuration\&. See the section "Ergonomics" in \fIJava SE HotSpot Virtual Machine Garbage Collection Tuning Guide\fR at http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/vm/gctuning/index\&.html\&.
+
 The following examples show how to set the size of allocated memory to 6 MB using various units:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:InitialHeapSize=6291456\fR
-\fB\-XX:InitialHeapSize=6144k\fR
-\fB\-XX:InitialHeapSize=6m\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-If you set this option to 0, then the initial size will be set as the sum of the sizes allocated for the old generation and the young generation\&. The size of the heap for the young generation can be set using the
-\fB\-XX:NewSize\fR
-option\&.
-.RE
-.PP
-\-XX:InitialSurvivorRatio=\fIratio\fR
-.RS 4
-Sets the initial survivor space ratio used by the throughput garbage collector (which is enabled by the
-\fB\-XX:+UseParallelGC\fR
-and/or \-\fBXX:+UseParallelOldGC\fR
-options)\&. Adaptive sizing is enabled by default with the throughput garbage collector by using the
-\fB\-XX:+UseParallelGC\fR
-and
-\fB\-XX:+UseParallelOldGC\fR
-options, and survivor space is resized according to the application behavior, starting with the initial value\&. If adaptive sizing is disabled (using the
-\fB\-XX:\-UseAdaptiveSizePolicy\fR
-option), then the
-\fB\-XX:SurvivorRatio\fR
-option should be used to set the size of the survivor space for the entire execution of the application\&.
-.sp
+.sp     
+.nf     
+\f3\-XX:InitialHeapSize=6291456\fP
+.fi     
+.nf     
+\f3\-XX:InitialHeapSize=6144k\fP
+.fi     
+.nf     
+\f3\-XX:InitialHeapSize=6m\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+If you set this option to 0, then the initial size will be set as the sum of the sizes allocated for the old generation and the young generation\&. The size of the heap for the young generation can be set using the \f3-XX:NewSize\fR option\&.
+.TP
+-XX:InitialSurvivorRatio=\fIratio\fR
+.br
+Sets the initial survivor space ratio used by the throughput garbage collector (which is enabled by the \f3-XX:+UseParallelGC\fR and/or -\f3XX:+UseParallelOldGC\fR options)\&. Adaptive sizing is enabled by default with the throughput garbage collector by using the \f3-XX:+UseParallelGC\fR and \f3-XX:+UseParallelOldGC\fR options, and survivor space is resized according to the application behavior, starting with the initial value\&. If adaptive sizing is disabled (using the \f3-XX:-UseAdaptiveSizePolicy\fR option), then the \f3-XX:SurvivorRatio\fR option should be used to set the size of the survivor space for the entire execution of the application\&.
+
 The following formula can be used to calculate the initial size of survivor space (S) based on the size of the young generation (Y), and the initial survivor space ratio (R):
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBS=Y/(R+2)\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
+.sp     
+.nf     
+\f3S=Y/(R+2)\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
 The 2 in the equation denotes two survivor spaces\&. The larger the value specified as the initial survivor space ratio, the smaller the initial survivor space size\&.
-.sp
+
 By default, the initial survivor space ratio is set to 8\&. If the default value for the young generation space size is used (2 MB), the initial size of the survivor space will be 0\&.2 MB\&.
-.sp
+
 The following example shows how to set the initial survivor space ratio to 4:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:InitialSurvivorRatio=4\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
-\-XX:InitiatingHeapOccupancyPercent=\fIpercent\fR
-.RS 4
+.sp     
+.nf     
+\f3\-XX:InitialSurvivorRatio=4\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP
+-XX:InitiatingHeapOccupancyPercent=\fIpercent\fR
+.br
 Sets the percentage of the heap occupancy (0 to 100) at which to start a concurrent GC cycle\&. It is used by garbage collectors that trigger a concurrent GC cycle based on the occupancy of the entire heap, not just one of the generations (for example, the G1 garbage collector)\&.
-.sp
+
 By default, the initiating value is set to 45%\&. A value of 0 implies nonstop GC cycles\&. The following example shows how to set the initiating heap occupancy to 75%:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:InitiatingHeapOccupancyPercent=75\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
-\-XX:MaxGCPauseMillis=\fItime\fR
-.RS 4
+.sp     
+.nf     
+\f3\-XX:InitiatingHeapOccupancyPercent=75\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP
+-XX:MaxGCPauseMillis=\fItime\fR
+.br
 Sets a target for the maximum GC pause time (in milliseconds)\&. This is a soft goal, and the JVM will make its best effort to achieve it\&. By default, there is no maximum pause time value\&.
-.sp
+
 The following example shows how to set the maximum target pause time to 500 ms:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:MaxGCPauseMillis=500\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
-\-XX:MaxHeapSize=\fIsize\fR
-.RS 4
-Sets the maximum size (in byes) of the memory allocation pool\&. This value must be a multiple of 1024 and greater than 2 MB\&. Append the letter
-\fBk\fR
-or
-\fBK\fR
-to indicate kilobytes,
-\fBm\fR
-or
-\fBM\fR
-to indicate megabytes,
-\fBg\fR
-or
-\fBG\fR
-to indicate gigabytes\&. The default value is chosen at runtime based on system configuration\&. For server deployments,
-\fB\-XX:InitialHeapSize\fR
-and
-\fB\-XX:MaxHeapSize\fR
-are often set to the same value\&. For more information, see Garbage Collector Ergonomics at http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/vm/gc\-ergonomics\&.html
-.sp
+.sp     
+.nf     
+\f3\-XX:MaxGCPauseMillis=500\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP
+-XX:MaxHeapSize=\fIsize\fR
+.br
+Sets the maximum size (in byes) of the memory allocation pool\&. This value must be a multiple of 1024 and greater than 2 MB\&. Append the letter \f3k\fR or \f3K\fR to indicate kilobytes, \f3m\fR or \f3M\fR to indicate megabytes, \f3g\fR or \f3G\fR to indicate gigabytes\&. The default value is chosen at runtime based on system configuration\&. For server deployments, \f3-XX:InitialHeapSize\fR and \f3-XX:MaxHeapSize\fR are often set to the same value\&. See the section "Ergonomics" in \fIJava SE HotSpot Virtual Machine Garbage Collection Tuning Guide\fR at http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/vm/gctuning/index\&.html\&.
+
 The following examples show how to set the maximum allowed size of allocated memory to 80 MB using various units:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:MaxHeapSize=83886080\fR
-\fB\-XX:MaxHeapSize=81920k\fR
-\fB\-XX:MaxHeapSize=80m\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
+.sp     
+.nf     
+\f3\-XX:MaxHeapSize=83886080\fP
+.fi     
+.nf     
+\f3\-XX:MaxHeapSize=81920k\fP
+.fi     
+.nf     
+\f3\-XX:MaxHeapSize=80m\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
 On Oracle Solaris 7 and Oracle Solaris 8 SPARC platforms, the upper limit for this value is approximately 4,000 MB minus overhead amounts\&. On Oracle Solaris 2\&.6 and x86 platforms, the upper limit is approximately 2,000 MB minus overhead amounts\&. On Linux platforms, the upper limit is approximately 2,000 MB minus overhead amounts\&.
-.sp
-The
-\fB\-XX:MaxHeapSize\fR
-option is equivalent to
-\fB\-Xmx\fR\&.
-.RE
-.PP
-\-XX:MaxHeapFreeRatio=\fIpercent\fR
-.RS 4
+
+The \f3-XX:MaxHeapSize\fR option is equivalent to \f3-Xmx\fR\&.
+.TP
+-XX:MaxHeapFreeRatio=\fIpercent\fR
+.br
 Sets the maximum allowed percentage of free heap space (0 to 100) after a GC event\&. If free heap space expands above this value, then the heap will be shrunk\&. By default, this value is set to 70%\&.
-.sp
+
 The following example shows how to set the maximum free heap ratio to 75%:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:MaxHeapFreeRatio=75\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
-\-XX:MaxMetaspaceSize=\fIsize\fR
-.RS 4
+.sp     
+.nf     
+\f3\-XX:MaxHeapFreeRatio=75\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP
+-XX:MaxMetaspaceSize=\fIsize\fR
+.br
 Sets the maximum amount of native memory that can be allocated for class metadata\&. By default, the size is not limited\&. The amount of metadata for an application depends on the application itself, other running applications, and the amount of memory available on the system\&.
-.sp
+
 The following example shows how to set the maximum class metadata size to 256 MB:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:MaxMetaspaceSize=256m\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
-\-XX:MaxNewSize=\fIsize\fR
-.RS 4
+.sp     
+.nf     
+\f3\-XX:MaxMetaspaceSize=256m\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP
+-XX:MaxNewSize=\fIsize\fR
+.br
 Sets the maximum size (in bytes) of the heap for the young generation (nursery)\&. The default value is set ergonomically\&.
-.RE
-.PP
-\-XX:MaxTenuringThreshold=\fIthreshold\fR
-.RS 4
+.TP
+-XX:MaxTenuringThreshold=\fIthreshold\fR
+.br
 Sets the maximum tenuring threshold for use in adaptive GC sizing\&. The largest value is 15\&. The default value is 15 for the parallel (throughput) collector, and 6 for the CMS collector\&.
-.sp
+
 The following example shows how to set the maximum tenuring threshold to 10:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:MaxTenuringThreshold=10\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
-\-XX:MetaspaceSize=\fIsize\fR
-.RS 4
+.sp     
+.nf     
+\f3\-XX:MaxTenuringThreshold=10\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP
+-XX:MetaspaceSize=\fIsize\fR
+.br
 Sets the size of the allocated class metadata space that will trigger a garbage collection the first time it is exceeded\&. This threshold for a garbage collection is increased or decreased depending on the amount of metadata used\&. The default size depends on the platform\&.
-.RE
-.PP
-\-XX:MinHeapFreeRatio=\fIpercent\fR
-.RS 4
+.TP
+-XX:MinHeapFreeRatio=\fIpercent\fR
+.br
 Sets the minimum allowed percentage of free heap space (0 to 100) after a GC event\&. If free heap space falls below this value, then the heap will be expanded\&. By default, this value is set to 40%\&.
-.sp
+
 The following example shows how to set the minimum free heap ratio to 25%:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:MinHeapFreeRatio=25\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
-\-XX:NewRatio=\fIratio\fR
-.RS 4
+.sp     
+.nf     
+\f3\-XX:MinHeapFreeRatio=25\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP
+-XX:NewRatio=\fIratio\fR
+.br
 Sets the ratio between young and old generation sizes\&. By default, this option is set to 2\&. The following example shows how to set the young/old ratio to 1:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:NewRatio=1\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
-\-XX:NewSize=\fIsize\fR
-.RS 4
-Sets the initial size (in bytes) of the heap for the young generation (nursery)\&. Append the letter
-\fBk\fR
-or
-\fBK\fR
-to indicate kilobytes,
-\fBm\fR
-or
-\fBM\fR
-to indicate megabytes,
-\fBg\fR
-or
-\fBG\fR
-to indicate gigabytes\&.
-.sp
+.sp     
+.nf     
+\f3\-XX:NewRatio=1\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP
+-XX:NewSize=\fIsize\fR
+.br
+Sets the initial size (in bytes) of the heap for the young generation (nursery)\&. Append the letter \f3k\fR or \f3K\fR to indicate kilobytes, \f3m\fR or \f3M\fR to indicate megabytes, \f3g\fR or \f3G\fR to indicate gigabytes\&.
+
 The young generation region of the heap is used for new objects\&. GC is performed in this region more often than in other regions\&. If the size for the young generation is too low, then a large number of minor GCs will be performed\&. If the size is too high, then only full GCs will be performed, which can take a long time to complete\&. Oracle recommends that you keep the size for the young generation between a half and a quarter of the overall heap size\&.
-.sp
+
 The following examples show how to set the initial size of young generation to 256 MB using various units:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:NewSize=256m\fR
-\fB\-XX:NewSize=262144k\fR
-\fB\-XX:NewSize=268435456\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-The
-\fB\-XX:NewSize\fR
-option is equivalent to
-\fB\-Xmn\fR\&.
-.RE
-.PP
-\-XX:ParallelGCThreads=\fIthreads\fR
-.RS 4
+.sp     
+.nf     
+\f3\-XX:NewSize=256m\fP
+.fi     
+.nf     
+\f3\-XX:NewSize=262144k\fP
+.fi     
+.nf     
+\f3\-XX:NewSize=268435456\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+The \f3-XX:NewSize\fR option is equivalent to \f3-Xmn\fR\&.
+.TP
+-XX:ParallelGCThreads=\fIthreads\fR
+.br
 Sets the number of threads used for parallel garbage collection in the young and old generations\&. The default value depends on the number of CPUs available to the JVM\&.
-.sp
+
 For example, to set the number of threads for parallel GC to 2, specify the following option:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:ParallelGCThreads=2\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
-\-XX:+ParallelRefProcEnabled
-.RS 4
+.sp     
+.nf     
+\f3\-XX:ParallelGCThreads=2\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP
+-XX:+ParallelRefProcEnabled
+.br
 Enables parallel reference processing\&. By default, this option is disabled\&.
-.RE
-.PP
-\-XX:+PrintAdaptiveSizePolicy
-.RS 4
+.TP
+-XX:+PrintAdaptiveSizePolicy
+.br
 Enables printing of information about adaptive generation sizing\&. By default, this option is disabled\&.
-.RE
-.PP
-\-XX:+PrintGC
-.RS 4
+.TP
+-XX:+PrintGC
+.br
 Enables printing of messages at every GC\&. By default, this option is disabled\&.
-.RE
-.PP
-\-XX:+PrintGCApplicationConcurrentTime
-.RS 4
+.TP
+-XX:+PrintGCApplicationConcurrentTime
+.br
 Enables printing of how much time elapsed since the last pause (for example, a GC pause)\&. By default, this option is disabled\&.
-.RE
-.PP
-\-XX:+PrintGCApplicationStoppedTime
-.RS 4
+.TP
+-XX:+PrintGCApplicationStoppedTime
+.br
 Enables printing of how much time the pause (for example, a GC pause) lasted\&. By default, this option is disabled\&.
-.RE
-.PP
-\-XX:+PrintGCDateStamps
-.RS 4
+.TP
+-XX:+PrintGCDateStamps
+.br
 Enables printing of a date stamp at every GC\&. By default, this option is disabled\&.
-.RE
-.PP
-\-XX:+PrintGCDetails
-.RS 4
+.TP
+-XX:+PrintGCDetails
+.br
 Enables printing of detailed messages at every GC\&. By default, this option is disabled\&.
-.RE
-.PP
-\-XX:+PrintGCTaskTimeStamps
-.RS 4
+.TP
+-XX:+PrintGCTaskTimeStamps
+.br
 Enables printing of time stamps for every individual GC worker thread task\&. By default, this option is disabled\&.
-.RE
-.PP
-\-XX:+PrintGCTimeStamps
-.RS 4
+.TP
+-XX:+PrintGCTimeStamps
+.br
 Enables printing of time stamps at every GC\&. By default, this option is disabled\&.
-.RE
-.PP
-\-XX:+PrintStringDeduplicationStatistics
-.RS 4
-Prints detailed deduplication statistics\&. By default, this option is disabled\&. See the
-\fB\-XX:+UseStringDeduplication\fR
-option\&.
-.RE
-.PP
-\-XX:+PrintTenuringDistribution
-.RS 4
+.TP
+-XX:+PrintStringDeduplicationStatistics
+.br
+Prints detailed deduplication statistics\&. By default, this option is disabled\&. See the \f3-XX:+UseStringDeduplication\fR option\&.
+.TP
+-XX:+PrintTenuringDistribution
+.br
 Enables printing of tenuring age information\&. The following is an example of the output:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBDesired survivor size 48286924 bytes, new threshold 10 (max 10)\fR
-\fB\- age 1: 28992024 bytes, 28992024 total\fR
-\fB\- age 2: 1366864 bytes, 30358888 total\fR
-\fB\- age 3: 1425912 bytes, 31784800 total\fR
-\fB\&.\&.\&.\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
+.sp     
+.nf     
+\f3Desired survivor size 48286924 bytes, new threshold 10 (max 10)\fP
+.fi     
+.nf     
+\f3\- age 1: 28992024 bytes, 28992024 total\fP
+.fi     
+.nf     
+\f3\- age 2: 1366864 bytes, 30358888 total\fP
+.fi     
+.nf     
+\f3\- age 3: 1425912 bytes, 31784800 total\fP
+.fi     
+.nf     
+\f3\&.\&.\&.\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
 Age 1 objects are the youngest survivors (they were created after the previous scavenge, survived the latest scavenge, and moved from eden to survivor space)\&. Age 2 objects have survived two scavenges (during the second scavenge they were copied from one survivor space to the next)\&. And so on\&.
-.sp
+
 In the preceding example, 28 992 024 bytes survived one scavenge and were copied from eden to survivor space, 1 366 864 bytes are occupied by age 2 objects, etc\&. The third value in each row is the cumulative size of objects of age n or less\&.
-.sp
+
 By default, this option is disabled\&.
-.RE
-.PP
-\-XX:+ScavengeBeforeFullGC
-.RS 4
-Enables GC of the young generation before each full GC\&. This option is enabled by default\&. Oracle recommends that you
-\fIdo not\fR
-disable it, because scavenging the young generation before a full GC can reduce the number of objects reachable from the old generation space into the young generation space\&. To disable GC of the young generation before each full GC, specify
-\fB\-XX:\-ScavengeBeforeFullGC\fR\&.
-.RE
-.PP
-\-XX:SoftRefLRUPolicyMSPerMB=\fItime\fR
-.RS 4
-Sets the amount of time (in milliseconds) a softly reachable object is kept active on the heap after the last time it was referenced\&. The default value is one second of lifetime per free megabyte in the heap\&. The
-\fB\-XX:SoftRefLRUPolicyMSPerMB\fR
-option accepts integer values representing milliseconds per one megabyte of the current heap size (for Java HotSpot Client VM) or the maximum possible heap size (for Java HotSpot Server VM)\&. This difference means that the Client VM tends to flush soft references rather than grow the heap, whereas the Server VM tends to grow the heap rather than flush soft references\&. In the latter case, the value of the
-\fB\-Xmx\fR
-option has a significant effect on how quickly soft references are garbage collected\&.
-.sp
+.TP
+-XX:+ScavengeBeforeFullGC
+.br
+Enables GC of the young generation before each full GC\&. This option is enabled by default\&. Oracle recommends that you \fIdo not\fR disable it, because scavenging the young generation before a full GC can reduce the number of objects reachable from the old generation space into the young generation space\&. To disable GC of the young generation before each full GC, specify \f3-XX:-ScavengeBeforeFullGC\fR\&.
+.TP
+-XX:SoftRefLRUPolicyMSPerMB=\fItime\fR
+.br
+Sets the amount of time (in milliseconds) a softly reachable object is kept active on the heap after the last time it was referenced\&. The default value is one second of lifetime per free megabyte in the heap\&. The \f3-XX:SoftRefLRUPolicyMSPerMB\fR option accepts integer values representing milliseconds per one megabyte of the current heap size (for Java HotSpot Client VM) or the maximum possible heap size (for Java HotSpot Server VM)\&. This difference means that the Client VM tends to flush soft references rather than grow the heap, whereas the Server VM tends to grow the heap rather than flush soft references\&. In the latter case, the value of the \f3-Xmx\fR option has a significant effect on how quickly soft references are garbage collected\&.
+
 The following example shows how to set the value to 2\&.5 seconds:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:SoftRefLRUPolicyMSPerMB=2500\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
-\-XX:StringDeduplicationAgeThreshold=\fIthreshold\fR
-.RS 4
-\fBString\fR
-objects reaching the specified age are considered candidates for deduplication\&. An object\*(Aqs age is a measure of how many times it has survived garbage collection\&. This is sometimes referred to as tenuring; see the
-\fB\-XX:+PrintTenuringDistribution\fR
-option\&. Note that
-\fBString\fR
-objects that are promoted to an old heap region before this age has been reached are always considered candidates for deduplication\&. The default value for this option is
-\fB3\fR\&. See the
-\fB\-XX:+UseStringDeduplication\fR
-option\&.
-.RE
-.PP
-\-XX:SurvivorRatio=\fIratio\fR
-.RS 4
+.sp     
+.nf     
+\f3\-XX:SoftRefLRUPolicyMSPerMB=2500\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP
+-XX:StringDeduplicationAgeThreshold=\fIthreshold\fR
+.br
+\f3String\fR objects reaching the specified age are considered candidates for deduplication\&. An object\&'s age is a measure of how many times it has survived garbage collection\&. This is sometimes referred to as tenuring; see the \f3-XX:+PrintTenuringDistribution\fR option\&. Note that \f3String\fR objects that are promoted to an old heap region before this age has been reached are always considered candidates for deduplication\&. The default value for this option is \f33\fR\&. See the \f3-XX:+UseStringDeduplication\fR option\&.
+.TP
+-XX:SurvivorRatio=\fIratio\fR
+.br
 Sets the ratio between eden space size and survivor space size\&. By default, this option is set to 8\&. The following example shows how to set the eden/survivor space ratio to 4:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:SurvivorRatio=4\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
-\-XX:TargetSurvivorRatio=\fIpercent\fR
-.RS 4
+.sp     
+.nf     
+\f3\-XX:SurvivorRatio=4\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP
+-XX:TargetSurvivorRatio=\fIpercent\fR
+.br
 Sets the desired percentage of survivor space (0 to 100) used after young garbage collection\&. By default, this option is set to 50%\&.
-.sp
+
 The following example shows how to set the target survivor space ratio to 30%:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:TargetSurvivorRatio=30\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
-\-XX:TLABSize=\fIsize\fR
-.RS 4
-Sets the initial size (in bytes) of a thread\-local allocation buffer (TLAB)\&. Append the letter
-\fBk\fR
-or
-\fBK\fR
-to indicate kilobytes,
-\fBm\fR
-or
-\fBM\fR
-to indicate megabytes,
-\fBg\fR
-or
-\fBG\fR
-to indicate gigabytes\&. If this option is set to 0, then the JVM chooses the initial size automatically\&.
-.sp
+.sp     
+.nf     
+\f3\-XX:TargetSurvivorRatio=30\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP
+-XX:TLABSize=\fIsize\fR
+.br
+Sets the initial size (in bytes) of a thread-local allocation buffer (TLAB)\&. Append the letter \f3k\fR or \f3K\fR to indicate kilobytes, \f3m\fR or \f3M\fR to indicate megabytes, \f3g\fR or \f3G\fR to indicate gigabytes\&. If this option is set to 0, then the JVM chooses the initial size automatically\&.
+
 The following example shows how to set the initial TLAB size to 512 KB:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:TLABSize=512k\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
-\-XX:+UseAdaptiveSizePolicy
-.RS 4
-Enables the use of adaptive generation sizing\&. This option is enabled by default\&. To disable adaptive generation sizing, specify
-\fB\-XX:\-UseAdaptiveSizePolicy\fR
-and set the size of the memory allocation pool explicitly (see the
-\fB\-XX:SurvivorRatio\fR
-option)\&.
-.RE
-.PP
-\-XX:+UseCMSInitiatingOccupancyOnly
-.RS 4
+.sp     
+.nf     
+\f3\-XX:TLABSize=512k\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP
+-XX:+UseAdaptiveSizePolicy
+.br
+Enables the use of adaptive generation sizing\&. This option is enabled by default\&. To disable adaptive generation sizing, specify \f3-XX:-UseAdaptiveSizePolicy\fR and set the size of the memory allocation pool explicitly (see the \f3-XX:SurvivorRatio\fR option)\&.
+.TP
+-XX:+UseCMSInitiatingOccupancyOnly
+.br
 Enables the use of the occupancy value as the only criterion for initiating the CMS collector\&. By default, this option is disabled and other criteria may be used\&.
-.RE
-.PP
-\-XX:+UseConcMarkSweepGC
-.RS 4
-Enables the use of the CMS garbage collector for the old generation\&. Oracle recommends that you use the CMS garbage collector when application latency requirements cannot be met by the throughput (\fB\-XX:+UseParallelGC\fR) garbage collector\&. The G1 garbage collector (\fB\-XX:+UseG1GC\fR) is another alternative\&.
-.sp
-By default, this option is disabled and the collector is chosen automatically based on the configuration of the machine and type of the JVM\&. When this option is enabled, the
-\fB\-XX:+UseParNewGC\fR
-option is automatically set and you should not disable it, because the following combination of options has been deprecated in JDK 8:
-\fB\-XX:+UseConcMarkSweepGC \-XX:\-UseParNewGC\fR\&.
-.RE
-.PP
-\-XX:+UseG1GC
-.RS 4
-Enables the use of the garbage\-first (G1) garbage collector\&. It is a server\-style garbage collector, targeted for multiprocessor machines with a large amount of RAM\&. It meets GC pause time goals with high probability, while maintaining good throughput\&. The G1 collector is recommended for applications requiring large heaps (sizes of around 6 GB or larger) with limited GC latency requirements (stable and predictable pause time below 0\&.5 seconds)\&.
-.sp
+.TP
+-XX:+UseConcMarkSweepGC
+.br
+Enables the use of the CMS garbage collector for the old generation\&. Oracle recommends that you use the CMS garbage collector when application latency requirements cannot be met by the throughput (\f3-XX:+UseParallelGC\fR) garbage collector\&. The G1 garbage collector (\f3-XX:+UseG1GC\fR) is another alternative\&.
+
+By default, this option is disabled and the collector is chosen automatically based on the configuration of the machine and type of the JVM\&. When this option is enabled, the \f3-XX:+UseParNewGC\fR option is automatically set and you should not disable it, because the following combination of options has been deprecated in JDK 8: \f3-XX:+UseConcMarkSweepGC -XX:-UseParNewGC\fR\&.
+.TP
+-XX:+UseG1GC
+.br
+Enables the use of the garbage-first (G1) garbage collector\&. It is a server-style garbage collector, targeted for multiprocessor machines with a large amount of RAM\&. It meets GC pause time goals with high probability, while maintaining good throughput\&. The G1 collector is recommended for applications requiring large heaps (sizes of around 6 GB or larger) with limited GC latency requirements (stable and predictable pause time below 0\&.5 seconds)\&.
+
 By default, this option is disabled and the collector is chosen automatically based on the configuration of the machine and type of the JVM\&.
-.RE
-.PP
-\-XX:+UseGCOverheadLimit
-.RS 4
-Enables the use of a policy that limits the proportion of time spent by the JVM on GC before an
-\fBOutOfMemoryError\fR
-exception is thrown\&. This option is enabled, by default and the parallel GC will throw an
-\fBOutOfMemoryError\fR
-if more than 98% of the total time is spent on garbage collection and less than 2% of the heap is recovered\&. When the heap is small, this feature can be used to prevent applications from running for long periods of time with little or no progress\&. To disable this option, specify
-\fB\-XX:\-UseGCOverheadLimit\fR\&.
-.RE
-.PP
-\-XX:+UseNUMA
-.RS 4
-Enables performance optimization of an application on a machine with nonuniform memory architecture (NUMA) by increasing the application\*(Aqs use of lower latency memory\&. By default, this option is disabled and no optimization for NUMA is made\&. The option is only available when the parallel garbage collector is used (\fB\-XX:+UseParallelGC\fR)\&.
-.RE
-.PP
-\-XX:+UseParallelGC
-.RS 4
+.TP
+-XX:+UseGCOverheadLimit
+.br
+Enables the use of a policy that limits the proportion of time spent by the JVM on GC before an \f3OutOfMemoryError\fR exception is thrown\&. This option is enabled, by default and the parallel GC will throw an \f3OutOfMemoryError\fR if more than 98% of the total time is spent on garbage collection and less than 2% of the heap is recovered\&. When the heap is small, this feature can be used to prevent applications from running for long periods of time with little or no progress\&. To disable this option, specify \f3-XX:-UseGCOverheadLimit\fR\&.
+.TP
+-XX:+UseNUMA
+.br
+Enables performance optimization of an application on a machine with nonuniform memory architecture (NUMA) by increasing the application\&'s use of lower latency memory\&. By default, this option is disabled and no optimization for NUMA is made\&. The option is only available when the parallel garbage collector is used (\f3-XX:+UseParallelGC\fR)\&.
+.TP
+-XX:+UseParallelGC
+.br
 Enables the use of the parallel scavenge garbage collector (also known as the throughput collector) to improve the performance of your application by leveraging multiple processors\&.
-.sp
-By default, this option is disabled and the collector is chosen automatically based on the configuration of the machine and type of the JVM\&. If it is enabled, then the
-\fB\-XX:+UseParallelOldGC\fR
-option is automatically enabled, unless you explicitly disable it\&.
-.RE
-.PP
-\-XX:+UseParallelOldGC
-.RS 4
-Enables the use of the parallel garbage collector for full GCs\&. By default, this option is disabled\&. Enabling it automatically enables the
-\fB\-XX:+UseParallelGC\fR
-option\&.
-.RE
-.PP
-\-XX:+UseParNewGC
-.RS 4
-Enables the use of parallel threads for collection in the young generation\&. By default, this option is disabled\&. It is automatically enabled when you set the
-\fB\-XX:+UseConcMarkSweepGC\fR
-option\&. Using the
-\fB\-XX:+UseParNewGC\fR
-option without the
-\fB\-XX:+UseConcMarkSweepGC\fR
-option was deprecated in JDK 8\&.
-.RE
-.PP
-\-XX:+UseSerialGC
-.RS 4
+
+By default, this option is disabled and the collector is chosen automatically based on the configuration of the machine and type of the JVM\&. If it is enabled, then the \f3-XX:+UseParallelOldGC\fR option is automatically enabled, unless you explicitly disable it\&.
+.TP
+-XX:+UseParallelOldGC
+.br
+Enables the use of the parallel garbage collector for full GCs\&. By default, this option is disabled\&. Enabling it automatically enables the \f3-XX:+UseParallelGC\fR option\&.
+.TP
+-XX:+UseParNewGC
+.br
+Enables the use of parallel threads for collection in the young generation\&. By default, this option is disabled\&. It is automatically enabled when you set the \f3-XX:+UseConcMarkSweepGC\fR option\&. Using the \f3-XX:+UseParNewGC\fR option without the \f3-XX:+UseConcMarkSweepGC\fR option was deprecated in JDK 8\&.
+.TP
+-XX:+UseSerialGC
+.br
 Enables the use of the serial garbage collector\&. This is generally the best choice for small and simple applications that do not require any special functionality from garbage collection\&. By default, this option is disabled and the collector is chosen automatically based on the configuration of the machine and type of the JVM\&.
-.RE
-.PP
-\-XX:+UseStringDeduplication
-.RS 4
-Enables string deduplication\&. By default, this option is disabled\&. To use this option, you must enable the garbage\-first (G1) garbage collector\&. See the
-\fB\-XX:+UseG1GC\fR
-option\&.
-.sp
-\fIString deduplication\fR
-reduces the memory footprint of
-\fBString\fR
-objects on the Java heap by taking advantage of the fact that many
-\fBString\fR
-objects are identical\&. Instead of each
-\fBString\fR
-object pointing to its own character array, identical
-\fBString\fR
-objects can point to and share the same character array\&.
-.RE
-.PP
-\-XX:+UseTLAB
-.RS 4
-Enables the use of thread\-local allocation blocks (TLABs) in the young generation space\&. This option is enabled by default\&. To disable the use of TLABs, specify
-\fB\-XX:\-UseTLAB\fR\&.
-.RE
-.SS "Deprecated and Removed Options"
-.PP
+.TP
+-XX:+UseSHM
+.br
+On Linux, enables the JVM to use shared memory to setup large pages\&.
+
+For more information, see Large Pages\&.
+.TP
+-XX:+UseStringDeduplication
+.br
+Enables string deduplication\&. By default, this option is disabled\&. To use this option, you must enable the garbage-first (G1) garbage collector\&. See the \f3-XX:+UseG1GC\fR option\&.
+
+\fIString deduplication\fR reduces the memory footprint of \f3String\fR objects on the Java heap by taking advantage of the fact that many \f3String\fR objects are identical\&. Instead of each \f3String\fR object pointing to its own character array, identical \f3String\fR objects can point to and share the same character array\&.
+.TP
+-XX:+UseTLAB
+.br
+Enables the use of thread-local allocation blocks (TLABs) in the young generation space\&. This option is enabled by default\&. To disable the use of TLABs, specify \f3-XX:-UseTLAB\fR\&.
+.SS DEPRECATED\ AND\ REMOVED\ OPTIONS    
 These options were included in the previous release, but have since been considered unnecessary\&.
-.PP
-\-Xincgc
-.RS 4
+.TP
+-Xincgc
+.br
 Enables incremental garbage collection\&. This option was deprecated in JDK 8 with no replacement\&.
-.RE
-.PP
-\-Xrun\fIlibname\fR
-.RS 4
-Loads the specified debugging/profiling library\&. This option was superseded by the
-\fB\-agentlib\fR
-option\&.
-.RE
-.PP
-\-XX:CMSIncrementalDutyCycle=\fIpercent\fR
-.RS 4
-Sets the percentage of time (0 to 100) between minor collections that the concurrent collector is allowed to run\&. This option was deprecated in JDK 8 with no replacement, following the deprecation of the
-\fB\-XX:+CMSIncrementalMode\fR
-option\&.
-.RE
-.PP
-\-XX:CMSIncrementalDutyCycleMin=\fIpercent\fR
-.RS 4
-Sets the percentage of time (0 to 100) between minor collections that is the lower bound for the duty cycle when
-\fB\-XX:+CMSIncrementalPacing\fR
-is enabled\&. This option was deprecated in JDK 8 with no replacement, following the deprecation of the
-\fB\-XX:+CMSIncrementalMode\fR
-option\&.
-.RE
-.PP
-\-XX:+CMSIncrementalMode
-.RS 4
-Enables the incremental mode for the CMS collector\&. This option was deprecated in JDK 8 with no replacement, along with other options that start with
-\fBCMSIncremental\fR\&.
-.RE
-.PP
-\-XX:CMSIncrementalOffset=\fIpercent\fR
-.RS 4
-Sets the percentage of time (0 to 100) by which the incremental mode duty cycle is shifted to the right within the period between minor collections\&. This option was deprecated in JDK 8 with no replacement, following the deprecation of the
-\fB\-XX:+CMSIncrementalMode\fR
-option\&.
-.RE
-.PP
-\-XX:+CMSIncrementalPacing
-.RS 4
-Enables automatic adjustment of the incremental mode duty cycle based on statistics collected while the JVM is running\&. This option was deprecated in JDK 8 with no replacement, following the deprecation of the
-\fB\-XX:+CMSIncrementalMode\fR
-option\&.
-.RE
-.PP
-\-XX:CMSIncrementalSafetyFactor=\fIpercent\fR
-.RS 4
-Sets the percentage of time (0 to 100) used to add conservatism when computing the duty cycle\&. This option was deprecated in JDK 8 with no replacement, following the deprecation of the
-\fB\-XX:+CMSIncrementalMode\fR
-option\&.
-.RE
-.PP
-\-XX:CMSInitiatingPermOccupancyFraction=\fIpercent\fR
-.RS 4
+.TP
+-Xrun\fIlibname\fR
+.br
+Loads the specified debugging/profiling library\&. This option was superseded by the \f3-agentlib\fR option\&.
+.TP
+-XX:CMSIncrementalDutyCycle=\fIpercent\fR
+.br
+Sets the percentage of time (0 to 100) between minor collections that the concurrent collector is allowed to run\&. This option was deprecated in JDK 8 with no replacement, following the deprecation of the \f3-XX:+CMSIncrementalMode\fR option\&.
+.TP
+-XX:CMSIncrementalDutyCycleMin=\fIpercent\fR
+.br
+Sets the percentage of time (0 to 100) between minor collections that is the lower bound for the duty cycle when \f3-XX:+CMSIncrementalPacing\fR is enabled\&. This option was deprecated in JDK 8 with no replacement, following the deprecation of the \f3-XX:+CMSIncrementalMode\fR option\&.
+.TP
+-XX:+CMSIncrementalMode
+.br
+Enables the incremental mode for the CMS collector\&. This option was deprecated in JDK 8 with no replacement, along with other options that start with \f3CMSIncremental\fR\&.
+.TP
+-XX:CMSIncrementalOffset=\fIpercent\fR
+.br
+Sets the percentage of time (0 to 100) by which the incremental mode duty cycle is shifted to the right within the period between minor collections\&. This option was deprecated in JDK 8 with no replacement, following the deprecation of the \f3-XX:+CMSIncrementalMode\fR option\&.
+.TP
+-XX:+CMSIncrementalPacing
+.br
+Enables automatic adjustment of the incremental mode duty cycle based on statistics collected while the JVM is running\&. This option was deprecated in JDK 8 with no replacement, following the deprecation of the \f3-XX:+CMSIncrementalMode\fR option\&.
+.TP
+-XX:CMSIncrementalSafetyFactor=\fIpercent\fR
+.br
+Sets the percentage of time (0 to 100) used to add conservatism when computing the duty cycle\&. This option was deprecated in JDK 8 with no replacement, following the deprecation of the \f3-XX:+CMSIncrementalMode\fR option\&.
+.TP
+-XX:CMSInitiatingPermOccupancyFraction=\fIpercent\fR
+.br
 Sets the percentage of the permanent generation occupancy (0 to 100) at which to start a GC\&. This option was deprecated in JDK 8 with no replacement\&.
-.RE
-.PP
-\-XX:MaxPermSize=\fIsize\fR
-.RS 4
-Sets the maximum permanent generation space size (in bytes)\&. This option was deprecated in JDK 8, and superseded by the
-\fB\-XX:MaxMetaspaceSize\fR
-option\&.
-.RE
-.PP
-\-XX:PermSize=\fIsize\fR
-.RS 4
-Sets the space (in bytes) allocated to the permanent generation that triggers a garbage collection if it is exceeded\&. This option was deprecated un JDK 8, and superseded by the
-\fB\-XX:MetaspaceSize\fR
-option\&.
-.RE
-.PP
-\-XX:+UseSplitVerifier
-.RS 4
+.TP
+-XX:MaxPermSize=\fIsize\fR
+.br
+Sets the maximum permanent generation space size (in bytes)\&. This option was deprecated in JDK 8, and superseded by the \f3-XX:MaxMetaspaceSize\fR option\&.
+.TP
+-XX:PermSize=\fIsize\fR
+.br
+Sets the space (in bytes) allocated to the permanent generation that triggers a garbage collection if it is exceeded\&. This option was deprecated un JDK 8, and superseded by the \f3-XX:MetaspaceSize\fR option\&.
+.TP
+-XX:+UseSplitVerifier
+.br
 Enables splitting of the verification process\&. By default, this option was enabled in the previous releases, and verification was split into two phases: type referencing (performed by the compiler) and type checking (performed by the JVM runtime)\&. This option was deprecated in JDK 8, and verification is now split by default without a way to disable it\&.
-.RE
-.PP
-\-XX:+UseStringCache
-.RS 4
+.TP
+-XX:+UseStringCache
+.br
 Enables caching of commonly allocated strings\&. This option was removed from JDK 8 with no replacement\&.
-.RE
-.SH "PERFORMANCE TUNING EXAMPLES"
-.PP
+.SH PERFORMANCE\ TUNING\ EXAMPLES    
 The following examples show how to use experimental tuning flags to either optimize throughput or to provide lower response time\&.
 .PP
-\fBExample 1\fR
-.br
-Tuning for Higher Throughput
-.RS 4
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBjava \-d64 \-server \-XX:+AggressiveOpts \-XX:+UseLargePages \-Xmn10g  \-Xms26g \-Xmx26g\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
+\f3Example 1 Tuning for Higher Throughput\fR
+.sp     
+.nf     
+\f3java \-d64 \-server \-XX:+AggressiveOpts \-XX:+UseLargePages \-Xmn10g  \-Xms26g \-Xmx26g\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+\f3Example 2 Tuning for Lower Response Time\fR
+.sp     
+.nf     
+\f3java \-d64 \-XX:+UseG1GC \-Xms26g Xmx26g \-XX:MaxGCPauseMillis=500 \-XX:+PrintGCTimeStamp\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+.SH LARGE\ PAGES    
+Also known as huge pages, large pages are memory pages that are significantly larger than the standard memory page size (which varies depending on the processor and operating system)\&. Large pages optimize processor Translation-Lookaside Buffers\&.
 .PP
-\fBExample 2\fR
-.br
-Tuning for Lower Response Time
-.RS 4
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBjava \-d64 \-XX:+UseG1GC \-Xms26g Xmx26g \-XX:MaxGCPauseMillis=500 \-XX:+PrintGCTimeStamp\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.SH "EXIT STATUS"
+A Translation-Lookaside Buffer (TLB) is a page translation cache that holds the most-recently used virtual-to-physical address translations\&. TLB is a scarce system resource\&. A TLB miss can be costly as the processor must then read from the hierarchical page table, which may require multiple memory accesses\&. By using a larger memory page size, a single TLB entry can represent a larger memory range\&. There will be less pressure on TLB, and memory-intensive applications may have better performance\&.
+.PP
+However, large pages page memory can negatively affect system performance\&. For example, when a large mount of memory is pinned by an application, it may create a shortage of regular memory and cause excessive paging in other applications and slow down the entire system\&. Also, a system that has been up for a long time could produce excessive fragmentation, which could make it impossible to reserve enough large page memory\&. When this happens, either the OS or JVM reverts to using regular pages\&.
+.SS LARGE\ PAGES\ SUPPORT    
+Solaris and Linux support large pages\&.
+.PP
+Solaris 9 and later include Multiple Page Size Support (MPSS); no additional configuration is necessary\&. See http://www\&.oracle\&.com/technetwork/server-storage/solaris10/overview/solaris9-features-scalability-135663\&.html\&.
 .PP
-The following exit values are typically returned by the launcher when the launcher is called with the wrong arguments, serious errors, or exceptions thrown by the JVM\&. However, a Java application may choose to return any value by using the API call
-\fBSystem\&.exit(exitValue)\fR\&. The values are:
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-\fB0\fR: Successful completion
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-\fB>0\fR: An error occurred
-.RE
-.SH "SEE ALSO"
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
+The 2\&.6 kernel supports large pages\&. Some vendors have backported the code to their 2\&.4-based releases\&. To check if your system can support large page memory, try the following:
+.sp     
+.nf     
+\f3# cat /proc/meminfo | grep Huge\fP
+.fi     
+.nf     
+\f3HugePages_Total: 0\fP
+.fi     
+.nf     
+\f3HugePages_Free: 0\fP
+.fi     
+.nf     
+\f3Hugepagesize: 2048 kB\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+If the output shows the three "Huge" variables, then your system can support large page memory but it needs to be configured\&. If the command prints nothing, then your system does not support large pages\&. To configure the system to use large page memory, login as \f3root\fR, and then follow these steps:
+.TP 0.4i    
+1\&.
+If you are using the option \f3-XX:+UseSHM\fR (instead of \f3-XX:+UseHugeTLBFS\fR), then increase the \f3SHMMAX\fR value\&. It must be larger than the Java heap size\&. On a system with 4 GB of physical RAM (or less), the following will make all the memory sharable:
+.sp     
+.nf     
+\f3# echo 4294967295 > /proc/sys/kernel/shmmax\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP 0.4i    
+2\&.
+If you are using the option \f3-XX:+UseSHM\fR or \f3-XX:+UseHugeTLBFS\fR, then specify the number of large pages\&. In the following example, 3 GB of a 4 GB system are reserved for large pages (assuming a large page size of 2048kB, then 3 GB = 3 * 1024 MB = 3072 MB = 3072 * 1024 kB = 3145728 kB and 3145728 kB / 2048 kB = 1536):
+.sp     
+.nf     
+\f3# echo 1536 > /proc/sys/vm/nr_hugepages\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.PP
+Note
+.PP
+Note that the values contained in \f3/proc\fR will reset after you reboot your system, so may want to set them in an initialization script (for example, \f3rc\&.local\fR or \f3sysctl\&.conf\fR)\&.
+.PP
+If you configure (or resize) the OS kernel parameters \f3/proc/sys/kernel/shmmax\fR or \f3/proc/sys/vm/nr_hugepages\fR, Java processes may allocate large pages for areas in addition to the Java heap\&. These steps can allocate large pages for the following areas:
+.PP
+Java heap
+.PP
+Permanent generation
+.PP
+Code cache
+.PP
+The marking bitmap data structure for the parallel GC
+.PP
+Consequently, if you configure the \f3nr_hugepages\fR parameter to the size of the Java heap, then the JVM can fail in allocating the permanent generation and code cache areas on large pages because these areas are quite large in size\&.
+.SH EXIT\ STATUS    
+The following exit values are typically returned by the launcher when the launcher is called with the wrong arguments, serious errors, or exceptions thrown by the JVM\&. However, a Java application may choose to return any value by using the API call \f3System\&.exit(exitValue)\fR\&. The values are:
+.TP 0.2i    
+\(bu
+\f30\fR: Successful completion
+.TP 0.2i    
+\(bu
+\f3>0\fR: An error occurred
+.SH SEE\ ALSO    
+.TP 0.2i    
+\(bu
 javac(1)
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
+.TP 0.2i    
+\(bu
 jdb(1)
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
+.TP 0.2i    
+\(bu
 javah(1)
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
+.TP 0.2i    
+\(bu
 jar(1)
-.RE
-.br
-'pl 8.5i
-'bp
+.TP 0.2i    
+\(bu
+jstat(1)
+.RE
+.br
+'pl 8.5i
+'bp
--- a/src/bsd/doc/man/javac.1	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/bsd/doc/man/javac.1	Tue Nov 04 17:20:19 2014 +0000
@@ -1,2116 +1,1370 @@
 '\" t
-.\" Copyright (c) 1994, 2014, 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.
-.\"
-.\" Title: javac
-.\" Language: English
-.\" Date: 8 August 2014
-.\" SectDesc: Basic Tools
-.\" Software: JDK 8
-.\" Arch: generic
-.\" Part Number: E38207-03
+.\"  Copyright (c) 1994, 2015, 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.
+.\"
+.\"     Arch: generic
+.\"     Software: JDK 8
+.\"     Date: 03 March 2015
+.\"     SectDesc: Basic Tools
+.\"     Title: javac.1
 .\"
 .if n .pl 99999
-.TH "javac" "1" "8 August 2014" "JDK 8" "Basic Tools"
-.\" -----------------------------------------------------------------
-.\" * Define some portability stuff
-.\" -----------------------------------------------------------------
-.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-.\" http://bugs.debian.org/507673
-.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
-.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-.ie \n(.g .ds Aq \(aq
-.el       .ds Aq '
-.\" -----------------------------------------------------------------
-.\" * set default formatting
-.\" -----------------------------------------------------------------
-.\" disable hyphenation
-.nh
-.\" disable justification (adjust text to left margin only)
-.ad l
-.\" -----------------------------------------------------------------
-.\" * MAIN CONTENT STARTS HERE *
-.\" -----------------------------------------------------------------
-.SH "NAME"
+.TH javac 1 "03 March 2015" "JDK 8" "Basic Tools"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el       .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+
+.SH NAME    
 javac \- Reads Java class and interface definitions and compiles them into bytecode and class files\&.
-.SH "SYNOPSIS"
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
+.SH SYNOPSIS    
+.sp     
+.nf     
+
 \fBjavac\fR [ \fIoptions\fR ] [ \fIsourcefiles\fR ] [ \fIclasses\fR] [ \fI@argfiles\fR ]
-.fi
-.if n \{\
-.RE
-.\}
-.PP
+.fi     
+.sp     
 Arguments can be in any order:
-.PP
+.TP     
 \fIoptions\fR
-.RS 4
-Command\-line options\&. See Options\&.
-.RE
-.PP
+Command-line options\&. See Options\&.
+.TP     
 \fIsourcefiles\fR
-.RS 4
-One or more source files to be compiled (such as
-\fBMyClass\&.java\fR)\&.
-.RE
-.PP
+One or more source files to be compiled (such as \f3MyClass\&.java\fR)\&.
+.TP     
 \fIclasses\fR
-.RS 4
-One or more classes to be processed for annotations (such as
-\fBMyPackage\&.MyClass\fR)\&.
-.RE
-.PP
+One or more classes to be processed for annotations (such as \f3MyPackage\&.MyClass\fR)\&.
+.TP     
 \fI@argfiles\fR
-.RS 4
-One or more files that list options and source files\&. The
-\fB\-J\fR
-options are not allowed in these files\&. See Command\-Line Argument Files\&.
-.RE
-.SH "DESCRIPTION"
+One or more files that list options and source files\&. The \f3-J\fR options are not allowed in these files\&. See Command-Line Argument Files\&.
+.SH DESCRIPTION    
+The \f3javac\fR command reads class and interface definitions, written in the Java programming language, and compiles them into bytecode class files\&. The \f3javac\fR command can also process annotations in Java source files and classes\&.
 .PP
-The
-\fBjavac\fR
-command reads class and interface definitions, written in the Java programming language, and compiles them into bytecode class files\&. The
-\fBjavac\fR
-command can also process annotations in Java source files and classes\&.
-.PP
-There are two ways to pass source code file names to
-\fBjavac\fR\&.
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
+There are two ways to pass source code file names to \f3javac\fR\&.
+.TP 0.2i    
+\(bu
 For a small number of source files, list the file names on the command line\&.
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-For a large number of source files, list the file names in a file that is separated by blanks or line breaks\&. Use the list file name preceded by an at sign (@) with the
-\fBjavac\fR
-command\&.
-.RE
-.PP
-Source code file names must have \&.java suffixes, class file names must have \&.class suffixes, and both source and class files must have root names that identify the class\&. For example, a class called
-\fBMyClass\fR
-would be written in a source file called
-\fBMyClass\&.java\fR
-and compiled into a bytecode class file called
-\fBMyClass\&.class\fR\&.
-.PP
-Inner class definitions produce additional class files\&. These class files have names that combine the inner and outer class names, such as
-\fBMyClass$MyInnerClass\&.class\fR\&.
-.PP
-Arrange source files in a directory tree that reflects their package tree\&. For example, if all of your source files are in
-\fB/workspace\fR, then put the source code for
-\fBcom\&.mysoft\&.mypack\&.MyClass\fR
-in
-\fB/workspace/com/mysoft/mypack/MyClass\&.java\fR\&.
-.PP
-By default, the compiler puts each class file in the same directory as its source file\&. You can specify a separate destination directory with the
-\fB\-d\fR
-option\&.
-.SH "OPTIONS"
+.TP 0.2i    
+\(bu
+For a large number of source files, list the file names in a file that is separated by blanks or line breaks\&. Use the list file name preceded by an at sign (@) with the \f3javac\fR command\&.
 .PP
-The compiler has a set of standard options that are supported on the current development environment\&. An additional set of nonstandard options are specific to the current virtual machine and compiler implementations and are subject to change in the future\&. Nonstandard options begin with the
-\fB\-X\fR
-option\&.
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-See also Cross\-Compilation Options
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-See also Nonstandard Options
-.RE
-.SS "Standard Options"
+Source code file names must have \&.java suffixes, class file names must have \&.class suffixes, and both source and class files must have root names that identify the class\&. For example, a class called \f3MyClass\fR would be written in a source file called \f3MyClass\&.java\fR and compiled into a bytecode class file called \f3MyClass\&.class\fR\&.
 .PP
-\-A\fIkey\fR[\fI=value\fR]
-.RS 4
-Specifies options to pass to annotation processors\&. These options are not interpreted by
-\fBjavac\fR
-directly, but are made available for use by individual processors\&. The
-\fBkey\fR
-value should be one or more identifiers separated by a dot (\&.)\&.
-.RE
+Inner class definitions produce additional class files\&. These class files have names that combine the inner and outer class names, such as \f3MyClass$MyInnerClass\&.class\fR\&.
 .PP
-\-cp \fIpath\fR or \-classpath \fIpath\fR
-.RS 4
-Specifies where to find user class files, and (optionally) annotation processors and source files\&. This class path overrides the user class path in the
-\fBCLASSPATH\fR
-environment variable\&. If neither
-\fBCLASSPATH\fR,
-\fB\-cp\fR
-nor
-\fB\-classpath\fR
-is specified, then the user
-\fIclass path\fR
-is the current directory\&. See Setting the Class Path \&.
-.sp
-If the
-\fB\-sourcepath\fR
-option is not specified, then the user class path is also searched for source files\&.
-.sp
-If the
-\fB\-processorpath\fR
-option is not specified, then the class path is also searched for annotation processors\&.
-.RE
-.PP
-\-Djava\&.ext\&.dirs=\fIdirectories\fR
-.RS 4
-Overrides the location of installed extensions\&.
-.RE
-.PP
-\-Djava\&.endorsed\&.dirs=\fIdirectories\fR
-.RS 4
-Overrides the location of the endorsed standards path\&.
-.RE
+Arrange source files in a directory tree that reflects their package tree\&. For example, if all of your source files are in \f3/workspace\fR, then put the source code for \f3com\&.mysoft\&.mypack\&.MyClass\fR in \f3/workspace/com/mysoft/mypack/MyClass\&.java\fR\&.
 .PP
-\-d \fIdirectory\fR
-.RS 4
-Sets the destination directory for class files\&. The directory must already exist because
-\fBjavac\fR
-does not create it\&. If a class is part of a package, then
-\fBjavac\fR
-puts the class file in a subdirectory that reflects the package name and creates directories as needed\&.
-.sp
-If you specify
-\fB\-d\fR
-\fB/home/myclasses\fR
-and the class is called
-\fBcom\&.mypackage\&.MyClass\fR, then the class file is
-\fB/home/myclasses/com/mypackage/MyClass\&.class\fR\&.
-.sp
-If the
-\fI\-d\fR
-option is not specified, then
-\fBjavac\fR
-puts each class file in the same directory as the source file from which it was generated\&.
-.sp
-\fBNote:\fR
-The directory specified by the
-\fI\-d\fR
-option is not automatically added to your user class path\&.
-.RE
-.PP
-\-deprecation
-.RS 4
-Shows a description of each use or override of a deprecated member or class\&. Without the
-\fB\-deprecation\fR
-option,
-\fBjavac\fR
-shows a summary of the source files that use or override deprecated members or classes\&. The
-\fB\-deprecation\fR
-option is shorthand for
-\fB\-Xlint:deprecation\fR\&.
-.RE
-.PP
-\-encoding \fIencoding\fR
-.RS 4
-Sets the source file encoding name, such as EUC\-JP and UTF\-8\&. If the
-\fB\-encoding\fR
-option is not specified, then the platform default converter is used\&.
-.RE
-.PP
-\-endorseddirs \fIdirectories\fR
-.RS 4
+By default, the compiler puts each class file in the same directory as its source file\&. You can specify a separate destination directory with the \f3-d\fR option\&.
+.SH OPTIONS    
+The compiler has a set of standard options that are supported on the current development environment\&. An additional set of nonstandard options are specific to the current virtual machine and compiler implementations and are subject to change in the future\&. Nonstandard options begin with the \f3-X\fR option\&.
+.TP 0.2i    
+\(bu
+See also Cross-Compilation Options
+.TP 0.2i    
+\(bu
+See also Nonstandard Options
+.SS STANDARD\ OPTIONS    
+.TP
+-A\fIkey\fR[\fI=value\fR]
+.br
+Specifies options to pass to annotation processors\&. These options are not interpreted by \f3javac\fR directly, but are made available for use by individual processors\&. The \f3key\fR value should be one or more identifiers separated by a dot (\&.)\&.
+.TP
+-cp \fIpath\fR or -classpath \fIpath\fR
+.br
+Specifies where to find user class files, and (optionally) annotation processors and source files\&. This class path overrides the user class path in the \f3CLASSPATH\fR environment variable\&. If neither \f3CLASSPATH\fR, \f3-cp\fR nor \f3-classpath\fR is specified, then the user \fIclass path\fR is the current directory\&. See Setting the Class Path\&.
+
+If the \f3-sourcepath\fR option is not specified, then the user class path is also searched for source files\&.
+
+If the \f3-processorpath\fR option is not specified, then the class path is also searched for annotation processors\&.
+.TP
+-Djava\&.ext\&.dirs=\fIdirectories\fR
+.br
+Overrides the location of installed extensions\&.
+.TP
+-Djava\&.endorsed\&.dirs=\fIdirectories\fR
+.br
 Overrides the location of the endorsed standards path\&.
-.RE
-.PP
-\-extdirs \fIdirectories\fR
-.RS 4
-Overrides the location of the
-\fBext\fR
-directory\&. The directories variable is a colon\-separated list of directories\&. Each JAR file in the specified directories is searched for class files\&. All JAR files found become part of the class path\&.
-.sp
-If you are cross\-compiling (compiling classes against bootstrap and extension classes of a different Java platform implementation), then this option specifies the directories that contain the extension classes\&. See Cross\-Compilation Options for more information\&.
-.RE
-.PP
-\-g
-.RS 4
+.TP
+-d \fIdirectory\fR
+.br
+Sets the destination directory for class files\&. The directory must already exist because \f3javac\fR does not create it\&. If a class is part of a package, then \f3javac\fR puts the class file in a subdirectory that reflects the package name and creates directories as needed\&.
+
+If you specify \f3-d\fR\f3/home/myclasses\fR and the class is called \f3com\&.mypackage\&.MyClass\fR, then the class file is \f3/home/myclasses/com/mypackage/MyClass\&.class\fR\&.
+
+If the \fI-d\fR option is not specified, then \f3javac\fR puts each class file in the same directory as the source file from which it was generated\&.
+
+\fINote:\fR The directory specified by the \fI-d\fR option is not automatically added to your user class path\&.
+.TP
+-deprecation
+.br
+Shows a description of each use or override of a deprecated member or class\&. Without the \f3-deprecation\fR option, \f3javac\fR shows a summary of the source files that use or override deprecated members or classes\&. The \f3-deprecation\fR option is shorthand for \f3-Xlint:deprecation\fR\&.
+.TP
+-encoding \fIencoding\fR
+.br
+Sets the source file encoding name, such as EUC-JP and UTF-8\&. If the \f3-encoding\fR option is not specified, then the platform default converter is used\&.
+.TP
+-endorseddirs \fIdirectories\fR
+.br
+Overrides the location of the endorsed standards path\&.
+.TP
+-extdirs \fIdirectories\fR
+.br
+Overrides the location of the \f3ext\fR directory\&. The directories variable is a colon-separated list of directories\&. Each JAR file in the specified directories is searched for class files\&. All JAR files found become part of the class path\&.
+
+If you are cross-compiling (compiling classes against bootstrap and extension classes of a different Java platform implementation), then this option specifies the directories that contain the extension classes\&. See Cross-Compilation Options for more information\&.
+.TP
+-g
+.br
 Generates all debugging information, including local variables\&. By default, only line number and source file information is generated\&.
-.RE
-.PP
-\-g:none
-.RS 4
+.TP
+-g:none
+.br
 Does not generate any debugging information\&.
-.RE
-.PP
-\-g:[\fIkeyword list\fR]
-.RS 4
+.TP
+-g:[\fIkeyword list\fR]
+.br
 Generates only some kinds of debugging information, specified by a comma separated list of keywords\&. Valid keywords are:
-.PP
+.RS     
+.TP     
 source
-.RS 4
 Source file debugging information\&.
-.RE
-.PP
+.TP     
 lines
-.RS 4
 Line number debugging information\&.
-.RE
-.PP
+.TP     
 vars
-.RS 4
 Local variable debugging information\&.
-.RE
-.RE
-.PP
-\-help
-.RS 4
+.RE     
+
+.TP
+-help
+.br
 Prints a synopsis of standard options\&.
-.RE
-.PP
-\-implicit:[\fIclass, none\fR]
-.RS 4
-Controls the generation of class files for implicitly loaded source files\&. To automatically generate class files, use
-\fB\-implicit:class\fR\&. To suppress class file generation, use
-\fB\-implicit:none\fR\&. If this option is not specified, then the default is to automatically generate class files\&. In this case, the compiler issues a warning if any such class files are generated when also doing annotation processing\&. The warning is not issued when the
-\fB\-implicit\fR
-option is set explicitly\&. See Searching for Types\&.
-.RE
-.PP
-\-J\fIoption\fR
-.RS 4
-Passes
-\fBoption\fR
-to the Java Virtual Machine (JVM), where option is one of the options described on the reference page for the Java launcher\&. For example,
-\fB\-J\-Xms48m\fR
-sets the startup memory to 48 MB\&. See
-java(1)\&.
-.sp
-\fBNote:\fR
-The
-\fICLASSPATH\fR,
-\fB\-classpath\fR,
-\fB\-bootclasspath\fR, and
-\fB\-extdirs\fR
-options do not specify the classes used to run
-\fBjavac\fR\&. Trying to customize the compiler implementation with these options and variables is risky and often does not accomplish what you want\&. If you must customize the complier implementation, then use the
-\fB\-J\fR
-option to pass options through to the underlying Java launcher\&.
-.RE
-.PP
-\-nowarn
-.RS 4
-Disables warning messages\&. This option operates the same as the
-\fB\-Xlint:none\fR
-option\&.
-.RE
-.PP
-\-parameters
-.RS 4
-Stores formal parameter names of constructors and methods in the generated class file so that the method
-\fBjava\&.lang\&.reflect\&.Executable\&.getParameters\fR
-from the Reflection API can retrieve them\&.
-.RE
-.PP
-\-proc: [\fInone\fR, \fIonly\fR]
-.RS 4
-Controls whether annotation processing and compilation are done\&.
-\fB\-proc:none\fR
-means that compilation takes place without annotation processing\&.
-\fB\-proc:only\fR
-means that only annotation processing is done, without any subsequent compilation\&.
-.RE
-.PP
-\-processor \fIclass1\fR [,\fIclass2\fR,\fIclass3\fR\&.\&.\&.]
-.RS 4
+.TP
+-implicit:[\fIclass, none\fR]
+.br
+Controls the generation of class files for implicitly loaded source files\&. To automatically generate class files, use \f3-implicit:class\fR\&. To suppress class file generation, use \f3-implicit:none\fR\&. If this option is not specified, then the default is to automatically generate class files\&. In this case, the compiler issues a warning if any such class files are generated when also doing annotation processing\&. The warning is not issued when the \f3-implicit\fR option is set explicitly\&. See Searching for Types\&.
+.TP
+-J\fIoption\fR
+.br
+Passes \f3option\fR to the Java Virtual Machine (JVM), where option is one of the options described on the reference page for the Java launcher\&. For example, \f3-J-Xms48m\fR sets the startup memory to 48 MB\&. See java(1)\&.
+
+\fINote:\fR The \fICLASSPATH\fR, \f3-classpath\fR, \f3-bootclasspath\fR, and \f3-extdirs\fR options do not specify the classes used to run \f3javac\fR\&. Trying to customize the compiler implementation with these options and variables is risky and often does not accomplish what you want\&. If you must customize the complier implementation, then use the \f3-J\fR option to pass options through to the underlying \f3\fRJava launcher\&.
+.TP
+-nowarn
+.br
+Disables warning messages\&. This option operates the same as the \f3-Xlint:none\fR option\&.
+.TP
+-parameters
+.br
+Stores formal parameter names of constructors and methods in the generated class file so that the method \f3java\&.lang\&.reflect\&.Executable\&.getParameters\fR from the Reflection API can retrieve them\&.
+.TP
+-proc: [\fInone\fR, \fIonly\fR]
+.br
+Controls whether annotation processing and compilation are done\&. \f3-proc:none\fR means that compilation takes place without annotation processing\&. \f3-proc:only\fR means that only annotation processing is done, without any subsequent compilation\&.
+.TP
+-processor \fIclass1\fR [,\fIclass2\fR,\fIclass3\fR\&.\&.\&.]
+.br
 Names of the annotation processors to run\&. This bypasses the default discovery process\&.
-.RE
-.PP
-\-processorpath \fIpath\fR
-.RS 4
+.TP
+-processorpath \fIpath\fR
+.br
 Specifies where to find annotation processors\&. If this option is not used, then the class path is searched for processors\&.
-.RE
-.PP
-\-s \fIdir\fR
-.RS 4
-Specifies the directory where to place the generated source files\&. The directory must already exist because
-\fBjavac\fR
-does not create it\&. If a class is part of a package, then the compiler puts the source file in a subdirectory that reflects the package name and creates directories as needed\&.
-.sp
-If you specify
-\fB\-s /home/mysrc\fR
-and the class is called
-\fBcom\&.mypackage\&.MyClass\fR, then the source file is put in
-\fB/home/mysrc/com/mypackage/MyClass\&.java\fR\&.
-.RE
-.PP
-\-source \fIrelease\fR
-.RS 4
-Specifies the version of source code accepted\&. The following values for
-\fBrelease\fR
-are allowed:
-.PP
+.TP
+-s \fIdir\fR
+.br
+Specifies the directory where to place the generated source files\&. The directory must already exist because \f3javac\fR does not create it\&. If a class is part of a package, then the compiler puts the source file in a subdirectory that reflects the package name and creates directories as needed\&.
+
+If you specify \f3-s /home/mysrc\fR and the class is called \f3com\&.mypackage\&.MyClass\fR, then the source file is put in \f3/home/mysrc/com/mypackage/MyClass\&.java\fR\&.
+.TP
+-source \fIrelease\fR
+.br
+Specifies the version of source code accepted\&. The following values for \f3release\fR are allowed:
+.RS     
+.TP     
 1\&.3
-.RS 4
 The compiler does not support assertions, generics, or other language features introduced after Java SE 1\&.3\&.
-.RE
-.PP
+.TP     
 1\&.4
-.RS 4
 The compiler accepts code containing assertions, which were introduced in Java SE 1\&.4\&.
-.RE
-.PP
+.TP     
 1\&.5
-.RS 4
 The compiler accepts code containing generics and other language features introduced in Java SE 5\&.
-.RE
-.PP
+.TP     
 5
-.RS 4
 Synonym for 1\&.5\&.
-.RE
-.PP
+.TP     
 1\&.6
-.RS 4
 No language changes were introduced in Java SE 6\&. However, encoding errors in source files are now reported as errors instead of warnings as in earlier releases of Java Platform, Standard Edition\&.
-.RE
-.PP
+.TP     
 6
-.RS 4
 Synonym for 1\&.6\&.
-.RE
-.PP
+.TP     
 1\&.7
-.RS 4
 The compiler accepts code with features introduced in Java SE 7\&.
-.RE
-.PP
+.TP     
 7
-.RS 4
 Synonym for 1\&.7\&.
-.RE
-.PP
+.TP     
 1\&.8
-.RS 4
 This is the default value\&. The compiler accepts code with features introduced in Java SE 8\&.
-.RE
-.PP
+.TP     
 8
-.RS 4
 Synonym for 1\&.8\&.
-.RE
-.RE
-.PP
-\-sourcepath \fIsourcepath\fR
-.RS 4
+.RE     
+
+.TP
+-sourcepath \fIsourcepath\fR
+.br
 Specifies the source code path to search for class or interface definitions\&. As with the user class path, source path entries are separated by colons (:) on Oracle Solaris and semicolons on Windows and can be directories, JAR archives, or ZIP archives\&. If packages are used, then the local path name within the directory or archive must reflect the package name\&.
-.sp
-\fBNote:\fR
-Classes found through the class path might be recompiled when their source files are also found\&. See Searching for Types\&.
-.RE
-.PP
-\-verbose
-.RS 4
+
+\fINote:\fR Classes found through the class path might be recompiled when their source files are also found\&. See Searching for Types\&.
+.TP
+-verbose
+.br
 Uses verbose output, which includes information about each class loaded and each source file compiled\&.
-.RE
-.PP
-\-version
-.RS 4
+.TP
+-version
+.br
 Prints release information\&.
-.RE
-.PP
-\-werror
-.RS 4
+.TP
+-werror
+.br
 Terminates compilation when warnings occur\&.
-.RE
-.PP
-\-X
-.RS 4
+.TP
+-X
+.br
 Displays information about nonstandard options and exits\&.
-.RE
-.SS "Cross\-Compilation Options"
-.PP
-By default, classes are compiled against the bootstrap and extension classes of the platform that
-\fBjavac\fR
-shipped with\&. But
-\fBjavac\fR
-also supports cross\-compiling, where classes are compiled against a bootstrap and extension classes of a different Java platform implementation\&. It is important to use the
-\fB\-bootclasspath\fR
-and
-\fB\-extdirs\fR
-options when cross\-compiling\&.
-.PP
-\-target \fIversion\fR
-.RS 4
+.SS CROSS-COMPILATION\ OPTIONS    
+By default, classes are compiled against the bootstrap and extension classes of the platform that \f3javac\fR shipped with\&. But \f3javac\fR also supports cross-compiling, where classes are compiled against a bootstrap and extension classes of a different Java platform implementation\&. It is important to use the \f3-bootclasspath\fR and \f3-extdirs\fR options when cross-compiling\&.
+.TP
+-target \fIversion\fR
+.br
 Generates class files that target a specified release of the virtual machine\&. Class files will run on the specified target and on later releases, but not on earlier releases of the JVM\&. Valid targets are 1\&.1, 1\&.2, 1\&.3, 1\&.4, 1\&.5 (also 5), 1\&.6 (also 6), 1\&.7 (also 7), and 1\&.8 (also 8)\&.
-.sp
-The default for the
-\fB\-target\fR
-option depends on the value of the
-\fB\-source\fR
-option:
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-If the
-\fB\-source\fR
-option is not specified, then the value of the
-\fB\-target\fR
-option is 1\&.8
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-If the
-\fB\-source\fR
-option is 1\&.2, then the value of the
-\fB\-target\fR
-option is 1\&.4
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-If the
-\fB\-source\fR
-option is 1\&.3, then the value of the
-\fB\-target\fR
-option is 1\&.4
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-If the
-\fB\-source\fR
-option is 1\&.5, then the value of the
-\fB\-target\fR
-option is 1\&.8
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-If the
-\fB\-source\fR
-option is 1\&.6, then the value of the
-\fB\-target\fR
-is option 1\&.8
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-If the
-\fB\-source\fR
-option is 1\&.7, then the value of the
-\fB\-target\fR
-is option 1\&.8
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-For all other values of the
-\fB\-source\fR
-option, the value of the
-\fB\-target\fR
-option is the value of the
-\fB\-source\fR
-option\&.
-.RE
-.RE
+
+The default for the \f3-target\fR option depends on the value of the \f3-source\fR option:
+.RS     
+.TP 0.2i    
+\(bu
+If the \f3-source\fR option is not specified, then the value of the \f3-target\fR option is 1\&.8
+.TP 0.2i    
+\(bu
+If the \f3-source\fR option is 1\&.2, then the value of the \f3-target\fR option is 1\&.4
+.TP 0.2i    
+\(bu
+If the \f3-source\fR option is 1\&.3, then the value of the \f3-target\fR option is 1\&.4
+.TP 0.2i    
+\(bu
+If the \f3-source\fR option is 1\&.5, then the value of the \f3-target\fR option is 1\&.8
+.TP 0.2i    
+\(bu
+If the \f3-source\fR option is 1\&.6, then the value of the \f3-target\fR is option 1\&.8
+.TP 0.2i    
+\(bu
+If the \f3-source\fR option is 1\&.7, then the value of the \f3-target\fR is option 1\&.8
+.TP 0.2i    
+\(bu
+For all other values of the \f3-source\fR option, the value of the \f3-target\fR option is the value of the \f3-source\fR option\&.
+.RE     
+
+.TP
+-bootclasspath \fIbootclasspath\fR
+.br
+Cross-compiles against the specified set of boot classes\&. As with the user class path, boot class path entries are separated by colons (:) and can be directories, JAR archives, or ZIP archives\&.
+.SS COMPACT\ PROFILE\ OPTION    
+Beginning with JDK 8, the \f3javac\fR compiler supports compact profiles\&. With compact profiles, applications that do not require the entire Java platform can be deployed and run with a smaller footprint\&. The compact profiles feature could be used to shorten the download time for applications from app stores\&. This feature makes for more compact deployment of Java applications that bundle the JRE\&. This feature is also useful in small devices\&.
 .PP
-\-bootclasspath \fIbootclasspath\fR
-.RS 4
-Cross\-compiles against the specified set of boot classes\&. As with the user class path, boot class path entries are separated by colons (:) and can be directories, JAR archives, or ZIP archives\&.
-.RE
-.SS "Compact Profile Option"
-.PP
-Beginning with JDK 8, the
-\fBjavac\fR
-compiler supports compact profiles\&. With compact profiles, applications that do not require the entire Java platform can be deployed and run with a smaller footprint\&. The compact profiles feature could be used to shorten the download time for applications from app stores\&. This feature makes for more compact deployment of Java applications that bundle the JRE\&. This feature is also useful in small devices\&.
-.PP
-The supported profile values are
-\fBcompact1\fR,
-\fBcompact2\fR, and
-\fBcompact3\fR\&. These are additive layers\&. Each higher\-numbered compact profile contains all of the APIs in profiles with smaller number names\&.
-.PP
-\-profile
-.RS 4
+The supported profile values are \f3compact1\fR, \f3compact2\fR, and \f3compact3\fR\&. These are additive layers\&. Each higher-numbered compact profile contains all of the APIs in profiles with smaller number names\&.
+.TP
+-profile
+.br
 When using compact profiles, this option specifies the profile name when compiling\&. For example:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBjavac \-profile compact1 Hello\&.java\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
+.sp     
+.nf     
+\f3javac \-profile compact1 Hello\&.java\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
 javac does not compile source code that uses any Java SE APIs that is not in the specified profile\&. Here is an example of the error message that results from attempting to compile such source code:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBcd jdk1\&.8\&.0/bin\fR
-\fB\&./javac \-profile compact1 Paint\&.java\fR
-\fBPaint\&.java:5: error: Applet is not available in profile \*(Aqcompact1\*(Aq\fR
-\fBimport java\&.applet\&.Applet;\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-In this example, you can correct the error by modifying the source to not use the
-\fBApplet\fR
-class\&. You could also correct the error by compiling without the \-profile option\&. Then the compilation would be run against the full set of Java SE APIs\&. (None of the compact profiles include the
-\fBApplet\fR
-class\&.)
-.sp
-An alternative way to compile with compact profiles is to use the
-\fB\-bootclasspath\fR
-option to specify a path to an
-\fBrt\&.jar\fR
-file that specifies a profile\*(Aqs image\&. Using the
-\fB\-profile\fR
-option instead does not require a profile image to be present on the system at compile time\&. This is useful when cross\-compiling\&.
-.RE
-.SS "Nonstandard Options"
-.PP
-\-Xbootclasspath/p:\fIpath\fR
-.RS 4
+.sp     
+.nf     
+\f3cd jdk1\&.8\&.0/bin\fP
+.fi     
+.nf     
+\f3\&./javac \-profile compact1 Paint\&.java\fP
+.fi     
+.nf     
+\f3Paint\&.java:5: error: Applet is not available in profile \&'compact1\&'\fP
+.fi     
+.nf     
+\f3import java\&.applet\&.Applet;\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+In this example, you can correct the error by modifying the source to not use the \f3Applet\fR class\&. You could also correct the error by compiling without the -profile option\&. Then the compilation would be run against the full set of Java SE APIs\&. (None of the compact profiles include the \f3Applet\fR class\&.)
+
+An alternative way to compile with compact profiles is to use the \f3-bootclasspath\fR option to specify a path to an \f3rt\&.jar\fR file that specifies a profile\&'s image\&. Using the \f3-profile\fR option instead does not require a profile image to be present on the system at compile time\&. This is useful when cross-compiling\&.
+.SS NONSTANDARD\ OPTIONS    
+.TP
+-Xbootclasspath/p:\fIpath\fR
+.br
 Adds a suffix to the bootstrap class path\&.
-.RE
-.PP
-\-Xbootclasspath/a:\fIpath\fR
-.RS 4
+.TP
+-Xbootclasspath/a:\fIpath\fR
+.br
 Adds a prefix to the bootstrap class path\&.
-.RE
-.PP
-\-Xbootclasspath/:\fIpath\fR
-.RS 4
+.TP
+-Xbootclasspath/:\fIpath\fR
+.br
 Overrides the location of the bootstrap class files\&.
-.RE
-.PP
-\-Xdoclint:[\-]\fIgroup\fR [\fI/access\fR]
-.RS 4
-Enables or disables specific groups of checks, where
-\fIgroup\fR
-is one of the following values:
-\fBaccessibility\fR,
-\fBsyntax\fR,
-\fBreference\fR,
-\fBhtml\fR
-or
-\fBmissing\fR\&. For more information about these groups of checks see the
-\fB\-Xdoclint\fR
-option of the
-\fBjavadoc\fR
-command\&. The
-\fB\-Xdoclint\fR
-option is disabled by default in the
-\fBjavac\fR
-command\&.
-.sp
-The variable
-\fIaccess\fR
-specifies the minimum visibility level of classes and members that the
-\fB\-Xdoclint\fR
-option checks\&. It can have one of the following values (in order of most to least visible) :
-\fBpublic\fR,
-\fBprotected\fR,
-\fBpackage\fR
-and
-\fBprivate\fR\&. For example, the following option checks classes and members (with all groups of checks) that have the access level protected and higher (which includes protected, package and public):
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-Xdoclint:all/protected\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
+.TP
+-Xdoclint:[-]\fIgroup\fR [\fI/access\fR]
+.br
+Enables or disables specific groups of checks, where \fIgroup\fR is one of the following values: \f3accessibility\fR, \f3syntax\fR, \f3reference\fR, \f3html\fR or \f3missing\fR\&. For more information about these groups of checks see the \f3-Xdoclint\fR option of the \f3javadoc\fR command\&. The \f3-Xdoclint\fR option is disabled by default in the \f3javac\fR command\&.
+
+The variable \fIaccess\fR specifies the minimum visibility level of classes and members that the \f3-Xdoclint\fR option checks\&. It can have one of the following values (in order of most to least visible) : \f3public\fR, \f3protected\fR, \f3package\fR and \f3private\fR\&. For example, the following option checks classes and members (with all groups of checks) that have the access level protected and higher (which includes protected, package and public):
+.sp     
+.nf     
+\f3\-Xdoclint:all/protected\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
 The following option enables all groups of checks for all access levels, except it will not check for HTML errors for classes and members that have access level package and higher (which includes package and public):
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-Xdoclint:all,\-html/package\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
-\-Xdoclint:none
-.RS 4
+.sp     
+.nf     
+\f3\-Xdoclint:all,\-html/package\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP
+-Xdoclint:none
+.br
 Disables all groups of checks\&.
-.RE
-.PP
-\-Xdoclint:all[\fI/access\fR]
-.RS 4
+.TP
+-Xdoclint:all[\fI/access\fR]
+.br
 Enables all groups of checks\&.
-.RE
-.PP
-\-Xlint
-.RS 4
-Enables all recommended warnings\&. In this release, enabling all available warnings is recommended\&.
-.RE
-.PP
-\-Xlint:all
-.RS 4
-Enables all recommended warnings\&. In this release, enabling all available warnings is recommended\&.
-.RE
-.PP
-\-Xlint:none
-.RS 4
+.TP
+-Xlint
+.br
+\fI\fREnables all recommended warnings\&. In this release, enabling all available warnings is recommended\&.
+.TP
+-Xlint:all
+.br
+\fI\fREnables all recommended warnings\&. In this release, enabling all available warnings is recommended\&.
+.TP
+-Xlint:none
+.br
 Disables all warnings\&.
-.RE
-.PP
-\-Xlint:\fIname\fR
-.RS 4
-Disables warning name\&. See Enable or Disable Warnings with the \-Xlint Option for a list of warnings you can disable with this option\&.
-.RE
-.PP
-\-Xlint:\fI\-name\fR
-.RS 4
-Disables warning name\&. See Enable or Disable Warnings with the \-Xlint Option with the
-\fB\-Xlint\fR
-option to get a list of warnings that you can disable with this option\&.
-.RE
-.PP
-\-Xmaxerrs \fInumber\fR
-.RS 4
+.TP
+-Xlint:\fIname\fR
+.br
+Disables warning name\&. See Enable or Disable Warnings with the -Xlint Option for a list of warnings you can disable with this option\&.
+.TP
+-Xlint:\fI-name\fR
+.br
+Disables warning name\&. See Enable or Disable Warnings with the -Xlint Option with the \f3-Xlint\fR option to get a list of warnings that you can disable with this option\&.
+.TP
+-Xmaxerrs \fInumber\fR
+.br
 Sets the maximum number of errors to print\&.
-.RE
-.PP
-\-Xmaxwarns \fInumber\fR
-.RS 4
+.TP
+-Xmaxwarns \fInumber\fR
+.br
 Sets the maximum number of warnings to print\&.
-.RE
-.PP
-\-Xstdout \fIfilename\fR
-.RS 4
-Sends compiler messages to the named file\&. By default, compiler messages go to
-\fBSystem\&.err\fR\&.
-.RE
-.PP
-\-Xprefer:[\fInewer,source\fR]
-.RS 4
-Specifies which file to read when both a source file and class file are found for a type\&. (See Searching for Types)\&. If the
-\fB\-Xprefer:newer\fR
-option is used, then it reads the newer of the source or class file for a type (default)\&. If the
-\fB\-Xprefer:source\fR
-option is used, then it reads the source file\&. Use \-\fBXprefer:source\fR
-when you want to be sure that any annotation processors can access annotations declared with a retention policy of
-\fBSOURCE\fR\&.
-.RE
-.PP
-\-Xpkginfo:[\fIalways\fR,\fIlegacy\fR,\fInonempty\fR]
-.RS 4
-Control whether javac generates
-\fBpackage\-info\&.class\fR
-files from package\-info\&.java files\&. Possible mode arguments for this option include the following\&.
-.PP
+.TP
+-Xstdout \fIfilename\fR
+.br
+Sends compiler messages to the named file\&. By default, compiler messages go to \f3System\&.err\fR\&.
+.TP
+-Xprefer:[\fInewer,source\fR]
+.br
+Specifies which file to read when both a source file and class file are found for a type\&. (See Searching for Types)\&. If the \f3-Xprefer:newer\fR option is used, then it reads the newer of the source or class file for a type (default)\&. If the \f3-Xprefer:source\fR option is used, then it reads the source file\&. Use -\f3Xprefer:source\fR when you want to be sure that any annotation processors can access annotations declared with a retention policy of \f3SOURCE\fR\&.
+.TP
+-Xpkginfo:[\fIalways\fR,\fIlegacy\fR,\fInonempty\fR]
+.br
+Control whether javac generates \f3package-info\&.class\fR files from package-info\&.java files\&. Possible mode arguments for this option include the following\&.
+.RS     
+.TP     
 always
-.RS 4
-Always generate a
-\fBpackage\-info\&.class\fR
-file for every
-\fBpackage\-info\&.java\fR
-file\&. This option may be useful if you use a build system such as Ant, which checks that each
-\fB\&.java\fR
-file has a corresponding
-\fB\&.class\fR
-file\&.
-.RE
-.PP
+Always generate a \f3package-info\&.class\fR file for every \f3package-info\&.java\fR file\&. This option may be useful if you use a build system such as Ant, which checks that each \f3\&.java\fR file has a corresponding \f3\&.class\fR file\&.
+.TP     
 legacy
-.RS 4
-Generate a
-\fBpackage\-info\&.class\fR
-file only if package\-info\&.java contains annotations\&. Don\*(Aqt generate a
-\fBpackage\-info\&.class\fR
-file if package\-info\&.java only contains comments\&.
-.sp
-\fBNote:\fR
-A
-\fBpackage\-info\&.class\fR
-file might be generated but be empty if all the annotations in the package\-info\&.java file have
-\fBRetentionPolicy\&.SOURCE\fR\&.
-.RE
-.PP
+Generate a \f3package-info\&.class\fR file only if package-info\&.java contains annotations\&. Don\&'t generate a \f3package-info\&.class\fR file if package-info\&.java only contains comments\&.
+
+\fINote:\fR A \f3package-info\&.class\fR file might be generated but be empty if all the annotations in the package-info\&.java file have \f3RetentionPolicy\&.SOURCE\fR\&.
+.TP     
 nonempty
-.RS 4
-Generate a
-\fBpackage\-info\&.class\fR
-file only if package\-info\&.java contains annotations with
-\fBRetentionPolicy\&.CLASS\fR
-or
-\fBRetentionPolicy\&.RUNTIME\fR\&.
-.RE
-.RE
-.PP
-\-Xprint
-.RS 4
+Generate a \f3package-info\&.class\fR file only if package-info\&.java contains annotations with \f3RetentionPolicy\&.CLASS\fR or \f3RetentionPolicy\&.RUNTIME\fR\&.
+.RE     
+
+.TP
+-Xprint
+.br
 Prints a textual representation of specified types for debugging purposes\&. Perform neither annotation processing nor compilation\&. The format of the output could change\&.
-.RE
-.PP
-\-XprintProcessorInfo
-.RS 4
+.TP
+-XprintProcessorInfo
+.br
 Prints information about which annotations a processor is asked to process\&.
-.RE
-.PP
-\-XprintRounds
-.RS 4
+.TP
+-XprintRounds
+.br
 Prints information about initial and subsequent annotation processing rounds\&.
-.RE
-.SH "ENABLE OR DISABLE WARNINGS WITH THE -XLINT OPTION"
-.PP
-Enable warning
-\fIname\fR
-with the
-\fB\-Xlint:name\fR
-option, where
-\fBname\fR
-is one of the following warning names\&. Note that you can disable a warning with the
-\fB\-Xlint:\-name:\fR
-option\&.
-.PP
+.SH ENABLE\ OR\ DISABLE\ WARNINGS\ WITH\ THE\ -XLINT\ OPTION    
+Enable warning \fIname\fR with the \f3-Xlint:name\fR option, where \f3name\fR is one of the following warning names\&. Note that you can disable a warning with the \f3-Xlint:-name:\fR option\&.
+.TP     
 cast
-.RS 4
 Warns about unnecessary and redundant casts, for example:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBString s = (String) "Hello!"\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
+.sp     
+.nf     
+\f3String s = (String) "Hello!"\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP     
 classfile
-.RS 4
 Warns about issues related to class file contents\&.
-.RE
-.PP
+.TP     
 deprecation
-.RS 4
 Warns about the use of deprecated items, for example:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBjava\&.util\&.Date myDate = new java\&.util\&.Date();\fR
-\fBint currentDay = myDate\&.getDay();\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-The method
-\fBjava\&.util\&.Date\&.getDay\fR
-has been deprecated since JDK 1\&.1
-.RE
-.PP
-dep\-ann
-.RS 4
-Warns about items that are documented with an
-\fB@deprecated\fR
-Javadoc comment, but do not have a
-\fB@Deprecated\fR
-annotation, for example:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB/**\fR
-\fB  * @deprecated As of Java SE 7, replaced by {@link #newMethod()}\fR
-\fB  */\fR
-\fBpublic static void deprecatedMethood() { }\fR
-\fBpublic static void newMethod() { }\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
+.sp     
+.nf     
+\f3java\&.util\&.Date myDate = new java\&.util\&.Date();\fP
+.fi     
+.nf     
+\f3int currentDay = myDate\&.getDay();\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+The method \f3java\&.util\&.Date\&.getDay\fR has been deprecated since JDK 1\&.1
+.TP     
+dep-ann
+Warns about items that are documented with an \f3@deprecated\fR Javadoc comment, but do not have a \f3@Deprecated\fR annotation, for example:
+.sp     
+.nf     
+\f3/**\fP
+.fi     
+.nf     
+\f3  * @deprecated As of Java SE 7, replaced by {@link #newMethod()}\fP
+.fi     
+.nf     
+\f3  */\fP
+.fi     
+.nf     
+\f3public static void deprecatedMethood() { }\fP
+.fi     
+.nf     
+\f3public static void newMethod() { }\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP     
 divzero
-.RS 4
 Warns about division by the constant integer 0, for example:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBint divideByZero = 42 / 0;\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
+.sp     
+.nf     
+\f3int divideByZero = 42 / 0;\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP     
 empty
-.RS 4
-Warns about empty statements after
-\fBif \fRstatements, for example:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBclass E {\fR
-\fB    void m() {\fR
-\fB         if (true) ;\fR
-\fB    }\fR
-\fB}\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
+Warns about empty statements after \f3if\fRstatements, for example:
+.sp     
+.nf     
+\f3class E {\fP
+.fi     
+.nf     
+\f3    void m() {\fP
+.fi     
+.nf     
+\f3         if (true) ;\fP
+.fi     
+.nf     
+\f3    }\fP
+.fi     
+.nf     
+\f3}\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP     
 fallthrough
-.RS 4
-Checks the switch blocks for fall\-through cases and provides a warning message for any that are found\&. Fall\-through cases are cases in a switch block, other than the last case in the block, whose code does not include a break statement, allowing code execution to fall through from that case to the next case\&. For example, the code following the case 1 label in this switch block does not end with a break statement:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBswitch (x) {\fR
-\fBcase 1:\fR
-\fB  System\&.out\&.println("1");\fR
-\fB  // No break statement here\&.\fR
-\fBcase 2:\fR
-\fB  System\&.out\&.println("2");\fR
-\fB}\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-If the
-\fB\-Xlint:fallthrough\fR
-option was used when compiling this code, then the compiler emits a warning about possible fall\-through into case, with the line number of the case in question\&.
-.RE
-.PP
+Checks the switch blocks for fall-through cases and provides a warning message for any that are found\&. Fall-through cases are cases in a switch block, other than the last case in the block, whose code does not include a break statement, allowing code execution to fall through from that case to the next case\&. For example, the code following the case 1 label in this switch block does not end with a break statement:
+.sp     
+.nf     
+\f3switch (x) {\fP
+.fi     
+.nf     
+\f3case 1:\fP
+.fi     
+.nf     
+\f3  System\&.out\&.println("1");\fP
+.fi     
+.nf     
+\f3  // No break statement here\&.\fP
+.fi     
+.nf     
+\f3case 2:\fP
+.fi     
+.nf     
+\f3  System\&.out\&.println("2");\fP
+.fi     
+.nf     
+\f3}\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+If the \f3-Xlint:fallthrough\fR option was used when compiling this code, then the compiler emits a warning about possible fall-through into case, with the line number of the case in question\&.
+.TP     
 finally
-.RS 4
-Warns about
-\fBfinally\fR
-clauses that cannot complete normally, for example:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBpublic static int m() {\fR
-\fB  try {\fR
-\fB     throw new NullPointerException();\fR
-\fB  }  catch (NullPointerException(); {\fR
-\fB     System\&.err\&.println("Caught NullPointerException\&.");\fR
-\fB     return 1;\fR
-\fB   } finally {\fR
-\fB     return 0;\fR
-\fB   }\fR
-\fB  }\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-The compiler generates a warning for the
-\fBfinally\fR
-block in this example\&. When the
-\fBint\fR
-method is called, it returns a value of 0\&. A
-\fBfinally\fR
-block executes when the
-\fBtry\fR
-block exits\&. In this example, when control is transferred to the
-\fBcatch\fR
-block, the
-\fBint\fR
-method exits\&. However, the
-\fBfinally\fR
-block must execute, so it is executed, even though control was transferred outside the method\&.
-.RE
-.PP
+Warns about \f3finally\fR clauses that cannot complete normally, for example:
+.sp     
+.nf     
+\f3public static int m() {\fP
+.fi     
+.nf     
+\f3  try {\fP
+.fi     
+.nf     
+\f3     throw new NullPointerException();\fP
+.fi     
+.nf     
+\f3  }  catch (NullPointerException(); {\fP
+.fi     
+.nf     
+\f3     System\&.err\&.println("Caught NullPointerException\&.");\fP
+.fi     
+.nf     
+\f3     return 1;\fP
+.fi     
+.nf     
+\f3   } finally {\fP
+.fi     
+.nf     
+\f3     return 0;\fP
+.fi     
+.nf     
+\f3   }\fP
+.fi     
+.nf     
+\f3  }\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+The compiler generates a warning for the \f3finally\fR block in this example\&. When the \f3int\fR method is called, it returns a value of 0\&. A \f3finally\fR block executes when the \f3try\fR block exits\&. In this example, when control is transferred to the \f3catch\fR block, the \f3int\fR method exits\&. However, the \f3finally\fR block must execute, so it is executed, even though control was transferred outside the method\&.
+.TP     
 options
-.RS 4
-Warns about issues that related to the use of command\-line options\&. See Cross\-Compilation Options\&.
-.RE
-.PP
+Warns about issues that related to the use of command-line options\&. See Cross-Compilation Options\&.
+.TP     
 overrides
-.RS 4
 Warns about issues regarding method overrides\&. For example, consider the following two classes:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBpublic class ClassWithVarargsMethod {\fR
-\fB  void varargsMethod(String\&.\&.\&. s) { }\fR
-\fB}\fR
- 
-\fBpublic class ClassWithOverridingMethod extends ClassWithVarargsMethod {\fR
-\fB   @Override\fR
-\fB   void varargsMethod(String[] s) { }\fR
-\fB}\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
+.sp     
+.nf     
+\f3public class ClassWithVarargsMethod {\fP
+.fi     
+.nf     
+\f3  void varargsMethod(String\&.\&.\&. s) { }\fP
+.fi     
+.nf     
+\f3}\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.nf     
+\f3public class ClassWithOverridingMethod extends ClassWithVarargsMethod {\fP
+.fi     
+.nf     
+\f3   @Override\fP
+.fi     
+.nf     
+\f3   void varargsMethod(String[] s) { }\fP
+.fi     
+.nf     
+\f3}\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
 The compiler generates a warning similar to the following:\&.
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBwarning: [override] varargsMethod(String[]) in ClassWithOverridingMethod \fR
-\fBoverrides varargsMethod(String\&.\&.\&.) in ClassWithVarargsMethod; overriding\fR
-\fBmethod is missing \*(Aq\&.\&.\&.\*(Aq\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-When the compiler encounters a
-\fBvarargs\fR
-method, it translates the
-\fBvarargs\fR
-formal parameter into an array\&. In the method
-\fBClassWithVarargsMethod\&.varargsMethod\fR, the compiler translates the
-\fBvarargs\fR
-formal parameter
-\fBString\&.\&.\&. s\fR
-to the formal parameter
-\fBString[] s\fR, an array, which matches the formal parameter of the method
-\fBClassWithOverridingMethod\&.varargsMethod\fR\&. Consequently, this example compiles\&.
-.RE
-.PP
+.sp     
+.nf     
+\f3warning: [override] varargsMethod(String[]) in ClassWithOverridingMethod \fP
+.fi     
+.nf     
+\f3overrides varargsMethod(String\&.\&.\&.) in ClassWithVarargsMethod; overriding\fP
+.fi     
+.nf     
+\f3method is missing \&'\&.\&.\&.\&'\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+When the compiler encounters a \f3varargs\fR method, it translates the \f3varargs\fR formal parameter into an array\&. In the method \f3ClassWithVarargsMethod\&.varargsMethod\fR, the compiler translates the \f3varargs\fR formal parameter \f3String\&.\&.\&. s\fR to the formal parameter \f3String[] s\fR, an array, which matches the formal parameter of the method \f3ClassWithOverridingMethod\&.varargsMethod\fR\&. Consequently, this example compiles\&.
+.TP     
 path
-.RS 4
-Warns about invalid path elements and nonexistent path directories on the command line (with regard to the class path, the source path, and other paths)\&. Such warnings cannot be suppressed with the
-\fB@SuppressWarnings\fR
-annotation, for example:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBjavac \-Xlint:path \-classpath /nonexistentpath Example\&.java\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
+Warns about invalid path elements and nonexistent path directories on the command line (with regard to the class path, the source path, and other paths)\&. Such warnings cannot be suppressed with the \f3@SuppressWarnings\fR annotation, for example:
+.sp     
+.nf     
+\f3javac \-Xlint:path \-classpath /nonexistentpath Example\&.java\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP     
 processing
-.RS 4
 Warn about issues regarding annotation processing\&. The compiler generates this warning when you have a class that has an annotation, and you use an annotation processor that cannot handle that type of exception\&. For example, the following is a simple annotation processor:
-.sp
-\fBSource file AnnocProc\&.java\fR:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBimport java\&.util\&.*;\fR
-\fBimport javax\&.annotation\&.processing\&.*;\fR
-\fBimport javax\&.lang\&.model\&.*;\fR
-\fBimport\&.javaz\&.lang\&.model\&.element\&.*;\fR
- 
-\fB@SupportedAnnotationTypes("NotAnno")\fR
-\fBpublic class AnnoProc extends AbstractProcessor {\fR
-\fB  public boolean process(Set<? extends TypeElement> elems, RoundEnvironment renv){\fR
-\fB     return true;\fR
-\fB  }\fR
- 
-\fB  public SourceVersion getSupportedSourceVersion() {\fR
-\fB     return SourceVersion\&.latest();\fR
-\fB   }\fR
-\fB}\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-\fBSource file AnnosWithoutProcessors\&.java\fR:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB@interface Anno { }\fR
-\fB \fR
-\fB@Anno\fR
-\fBclass AnnosWithoutProcessors { }\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-The following commands compile the annotation processor
-\fBAnnoProc\fR, then run this annotation processor against the source file
-\fBAnnosWithoutProcessors\&.java\fR:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBjavac AnnoProc\&.java\fR
-\fBjavac \-cp \&. \-Xlint:processing \-processor AnnoProc \-proc:only AnnosWithoutProcessors\&.java\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-When the compiler runs the annotation processor against the source file
-\fBAnnosWithoutProcessors\&.java\fR, it generates the following warning:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBwarning: [processing] No processor claimed any of these annotations: Anno\fR
-\fB \fR
-.fi
-.if n \{\
-.RE
-.\}
-To resolve this issue, you can rename the annotation defined and used in the class
-\fBAnnosWithoutProcessors\fR
-from
-\fBAnno\fR
-to
-\fBNotAnno\fR\&.
-.RE
-.PP
+
+\fISource file AnnocProc\&.java\fR:
+.sp     
+.nf     
+\f3import java\&.util\&.*;\fP
+.fi     
+.nf     
+\f3import javax\&.annotation\&.processing\&.*;\fP
+.fi     
+.nf     
+\f3import javax\&.lang\&.model\&.*;\fP
+.fi     
+.nf     
+\f3import\&.javaz\&.lang\&.model\&.element\&.*;\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.nf     
+\f3@SupportedAnnotationTypes("NotAnno")\fP
+.fi     
+.nf     
+\f3public class AnnoProc extends AbstractProcessor {\fP
+.fi     
+.nf     
+\f3  public boolean process(Set<? extends TypeElement> elems, RoundEnvironment renv){\fP
+.fi     
+.nf     
+\f3     return true;\fP
+.fi     
+.nf     
+\f3  }\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.nf     
+\f3  public SourceVersion getSupportedSourceVersion() {\fP
+.fi     
+.nf     
+\f3     return SourceVersion\&.latest();\fP
+.fi     
+.nf     
+\f3   }\fP
+.fi     
+.nf     
+\f3}\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+\fISource file AnnosWithoutProcessors\&.java\fR:
+.sp     
+.nf     
+\f3@interface Anno { }\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.nf     
+\f3@Anno\fP
+.fi     
+.nf     
+\f3class AnnosWithoutProcessors { }\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+The following commands compile the annotation processor \f3AnnoProc\fR, then run this annotation processor against the source file \f3AnnosWithoutProcessors\&.java\fR:
+.sp     
+.nf     
+\f3javac AnnoProc\&.java\fP
+.fi     
+.nf     
+\f3javac \-cp \&. \-Xlint:processing \-processor AnnoProc \-proc:only AnnosWithoutProcessors\&.java\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+When the compiler runs the annotation processor against the source file \f3AnnosWithoutProcessors\&.java\fR, it generates the following warning:
+.sp     
+.nf     
+\f3warning: [processing] No processor claimed any of these annotations: Anno\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+To resolve this issue, you can rename the annotation defined and used in the class \f3AnnosWithoutProcessors\fR from \f3Anno\fR to \f3NotAnno\fR\&.
+.TP     
 rawtypes
-.RS 4
-Warns about unchecked operations on raw types\&. The following statement generates a
-\fBrawtypes\fR
-warning:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBvoid countElements(List l) { \&.\&.\&. }\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-The following example does not generate a
-\fBrawtypes\fR
-warning
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBvoid countElements(List<?> l) { \&.\&.\&. }\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-\fBList\fR
-is a raw type\&. However,
-\fBList<?>\fR
-is an unbounded wildcard parameterized type\&. Because
-\fBList\fR
-is a parameterized interface, always specify its type argument\&. In this example, the
-\fBList\fR
-formal argument is specified with an unbounded wildcard (\fB?\fR) as its formal type parameter, which means that the
-\fBcountElements\fR
-method can accept any instantiation of the
-\fBList\fR
-interface\&.
-.RE
-.PP
+Warns about unchecked operations on raw types\&. The following statement generates a \f3rawtypes\fR warning:
+.sp     
+.nf     
+\f3void countElements(List l) { \&.\&.\&. }\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+The following example does not generate a \f3rawtypes\fR warning
+.sp     
+.nf     
+\f3void countElements(List<?> l) { \&.\&.\&. }\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+\f3List\fR is a raw type\&. However, \f3List<?>\fR is an unbounded wildcard parameterized type\&. Because \f3List\fR is a parameterized interface, always specify its type argument\&. In this example, the \f3List\fR formal argument is specified with an unbounded wildcard (\f3?\fR) as its formal type parameter, which means that the \f3countElements\fR method can accept any instantiation of the \f3List\fR interface\&.
+.TP     
 Serial
-.RS 4
-Warns about missing
-\fBserialVersionUID\fR
-definitions on serializable classes, for example:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBpublic class PersistentTime implements Serializable\fR
-\fB{\fR
-\fB  private Date time;\fR
-\fB \fR
-\fB   public PersistentTime() {\fR
-\fB     time = Calendar\&.getInstance()\&.getTime();\fR
-\fB   }\fR
-\fB \fR
-\fB   public Date getTime() {\fR
-\fB     return time;\fR
-\fB   }\fR
-\fB}\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-The compiler generates the following warning:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBwarning: [serial] serializable class PersistentTime has no definition of\fR
-\fBserialVersionUID\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-If a serializable class does not explicitly declare a field named
-\fBserialVersionUID\fR, then the serialization runtime environment calculates a default
-\fBserialVersionUID\fR
-value for that class based on various aspects of the class, as described in the Java Object Serialization Specification\&. However, it is strongly recommended that all serializable classes explicitly declare
-\fBserialVersionUID\fR
-values because the default process of computing
-\fBserialVersionUID\fR
-vales is highly sensitive to class details that can vary depending on compiler implementations, and as a result, might cause an unexpected
-\fBInvalidClassExceptions\fR
-during deserialization\&. To guarantee a consistent
-\fBserialVersionUID\fR
-value across different Java compiler implementations, a serializable class must declare an explicit
-\fBserialVersionUID\fR
-value\&.
-.RE
-.PP
-static
-.RS 4
-Warns about issues relating to the use of statics, for example:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBclass XLintStatic {\fR
-\fB    static void m1() { }\fR
-\fB    void m2() { this\&.m1(); }\fR
-\fB}\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
+Warns about missing \f3serialVersionUID\fR definitions on serializable classes, for example:
+.sp     
+.nf     
+\f3public class PersistentTime implements Serializable\fP
+.fi     
+.nf     
+\f3{\fP
+.fi     
+.nf     
+\f3  private Date time;\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.nf     
+\f3   public PersistentTime() {\fP
+.fi     
+.nf     
+\f3     time = Calendar\&.getInstance()\&.getTime();\fP
+.fi     
+.nf     
+\f3   }\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.nf     
+\f3   public Date getTime() {\fP
+.fi     
+.nf     
+\f3     return time;\fP
+.fi     
+.nf     
+\f3   }\fP
+.fi     
+.nf     
+\f3}\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
 The compiler generates the following warning:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBwarning: [static] static method should be qualified by type name, \fR
-\fBXLintStatic, instead of by an expression\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-To resolve this issue, you can call the
-\fBstatic\fR
-method
-\fBm1\fR
-as follows:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBXLintStatic\&.m1();\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-Alternately, you can remove the
-\fBstatic\fR
-keyword from the declaration of the method
-\fBm1\fR\&.
-.RE
-.PP
+.sp     
+.nf     
+\f3warning: [serial] serializable class PersistentTime has no definition of\fP
+.fi     
+.nf     
+\f3serialVersionUID\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+If a serializable class does not explicitly declare a field named \f3serialVersionUID\fR, then the serialization runtime environment calculates a default \f3serialVersionUID\fR value for that class based on various aspects of the class, as described in the Java Object Serialization Specification\&. However, it is strongly recommended that all serializable classes explicitly declare \f3serialVersionUID\fR values because the default process of computing \f3serialVersionUID\fR vales is highly sensitive to class details that can vary depending on compiler implementations, and as a result, might cause an unexpected \f3InvalidClassExceptions\fR during deserialization\&. To guarantee a consistent \f3serialVersionUID\fR value across different Java compiler implementations, a serializable class must declare an explicit \f3serialVersionUID\fR value\&.
+.TP     
+static
+Warns about issues relating to the use of statics, for example:
+.sp     
+.nf     
+\f3class XLintStatic {\fP
+.fi     
+.nf     
+\f3    static void m1() { }\fP
+.fi     
+.nf     
+\f3    void m2() { this\&.m1(); }\fP
+.fi     
+.nf     
+\f3}\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+The compiler generates the following warning:
+.sp     
+.nf     
+\f3warning: [static] static method should be qualified by type name, \fP
+.fi     
+.nf     
+\f3XLintStatic, instead of by an expression\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+To resolve this issue, you can call the \f3static\fR method \f3m1\fR as follows:
+.sp     
+.nf     
+\f3XLintStatic\&.m1();\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+Alternately, you can remove the \f3static\fR keyword from the declaration of the method \f3m1\fR\&.
+.TP     
 try
-.RS 4
-Warns about issues relating to use of
-\fBtry\fR
-blocks, including try\-with\-resources statements\&. For example, a warning is generated for the following statement because the resource
-\fBac\fR
-declared in the
-\fBtry\fR
-block is not used:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBtry ( AutoCloseable ac = getResource() ) {    // do nothing}\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
+Warns about issues relating to use of \f3try\fR blocks, including try-with-resources statements\&. For example, a warning is generated for the following statement because the resource \f3ac\fR declared in the \f3try\fR block is not used:
+.sp     
+.nf     
+\f3try ( AutoCloseable ac = getResource() ) {    // do nothing}\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP     
 unchecked
-.RS 4
 Gives more detail for unchecked conversion warnings that are mandated by the Java Language Specification, for example:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBList l = new ArrayList<Number>();\fR
-\fBList<String> ls = l;       // unchecked warning\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-During type erasure, the types
-\fBArrayList<Number>\fR
-and
-\fBList<String>\fR
-become
-\fBArrayList\fR
-and
-\fBList\fR, respectively\&.
-.sp
-The
-\fBls\fR
-command has the parameterized type
-\fBList<String>\fR\&. When the
-\fBList\fR
-referenced by
-\fBl\fR
-is assigned to
-\fBls\fR, the compiler generates an unchecked warning\&. At compile time, the compiler and JVM cannot determine whether
-\fBl\fR
-refers to a
-\fBList<String>\fR
-type\&. In this case,
-\fBl\fR
-does not refer to a
-\fBList<String>\fR
-type\&. As a result, heap pollution occurs\&.
-.sp
-A heap pollution situation occurs when the
-\fBList\fR
-object
-\fBl\fR, whose static type is
-\fBList<Number>\fR, is assigned to another
-\fBList\fR
-object,
-\fBls\fR, that has a different static type,
-\fBList<String>\fR\&. However, the compiler still allows this assignment\&. It must allow this assignment to preserve backward compatibility with releases of Java SE that do not support generics\&. Because of type erasure,
-\fBList<Number>\fR
-and
-\fBList<String>\fR
-both become
-\fBList\fR\&. Consequently, the compiler allows the assignment of the object
-\fBl\fR\fB,\fR
-which has a raw type of
-\fBList\fR, to the object
-\fBls\fR\&.
-.RE
-.PP
+.sp     
+.nf     
+\f3List l = new ArrayList<Number>();\fP
+.fi     
+.nf     
+\f3List<String> ls = l;       // unchecked warning\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+During type erasure, the types \f3ArrayList<Number>\fR and \f3List<String>\fR become \f3ArrayList\fR and \f3List\fR, respectively\&.
+
+The \f3ls\fR command has the parameterized type \f3List<String>\fR\&. When the \f3List\fR referenced by \f3l\fR is assigned to \f3ls\fR, the compiler generates an unchecked warning\&. At compile time, the compiler and JVM cannot determine whether \f3l\fR refers to a \f3List<String>\fR type\&. In this case, \f3l\fR does not refer to a \f3List<String>\fR type\&. As a result, heap pollution occurs\&.
+
+A heap pollution situation occurs when the \f3List\fR object \f3l\fR, whose static type is \f3List<Number>\fR, is assigned to another \f3List\fR object, \f3ls\fR, that has a different static type, \f3List<String>\fR\&. However, the compiler still allows this assignment\&. It must allow this assignment to preserve backward compatibility with releases of Java SE that do not support generics\&. Because of type erasure, \f3List<Number>\fR and \f3List<String>\fR both become \f3List\fR\&. Consequently, the compiler allows the assignment of the object \f3l\fR\f3,\fR which has a raw type of \f3List\fR, to the object \f3ls\fR\&.
+.TP     
 varargs
-.RS 4
-Warns about unsafe usages of variable arguments (\fBvarargs\fR) methods, in particular, those that contain non\-reifiable arguments, for example:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBpublic class ArrayBuilder {\fR
-\fB  public static <T> void addToList (List<T> listArg, T\&.\&.\&. elements) {\fR
-\fB    for (T x : elements) {\fR
-\fB      listArg\&.add(x);\fR
-\fB    }\fR
-\fB  }\fR
-\fB}\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-\fBNote:\fR
-A non\-reifiable type is a type whose type information is not fully available at runtime\&.
-.sp
-The compiler generates the following warning for the definition of the method
-\fBArrayBuilder\&.addToList\fR
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBwarning: [varargs] Possible heap pollution from parameterized vararg type T\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-When the compiler encounters a varargs method, it translates the
-\fBvarargs\fR
-formal parameter into an array\&. However, the Java programming language does not permit the creation of arrays of parameterized types\&. In the method
-\fBArrayBuilder\&.addToList\fR, the compiler translates the
-\fBvarargs\fR
-formal parameter
-\fBT\&.\&.\&.\fR
-elements to the formal parameter
-\fBT[]\fR
-elements, an array\&. However, because of type erasure, the compiler converts the
-\fBvarargs\fR
-formal parameter to
-\fBObject[]\fR
-elements\&. Consequently, there is a possibility of heap pollution\&.
-.RE
-.SH "COMMAND-LINE ARGUMENT FILES"
+Warns about unsafe usages of variable arguments (\f3varargs\fR) methods, in particular, those that contain non-reifiable arguments, for example:
+.sp     
+.nf     
+\f3public class ArrayBuilder {\fP
+.fi     
+.nf     
+\f3  public static <T> void addToList (List<T> listArg, T\&.\&.\&. elements) {\fP
+.fi     
+.nf     
+\f3    for (T x : elements) {\fP
+.fi     
+.nf     
+\f3      listArg\&.add(x);\fP
+.fi     
+.nf     
+\f3    }\fP
+.fi     
+.nf     
+\f3  }\fP
+.fi     
+.nf     
+\f3}\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+\fINote:\fR A non-reifiable type is a type whose type information is not fully available at runtime\&.
+
+The compiler generates the following warning for the definition of the method \f3ArrayBuilder\&.addToList\fR
+.sp     
+.nf     
+\f3warning: [varargs] Possible heap pollution from parameterized vararg type T\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+When the compiler encounters a varargs method, it translates the \f3varargs\fR formal parameter into an array\&. However, the Java programming language does not permit the creation of arrays of parameterized types\&. In the method \f3ArrayBuilder\&.addToList\fR, the compiler translates the \f3varargs\fR formal parameter \f3T\&.\&.\&.\fR elements to the formal parameter \f3T[]\fR elements, an array\&. However, because of type erasure, the compiler converts the \f3varargs\fR formal parameter to \f3Object[]\fR elements\&. Consequently, there is a possibility of heap pollution\&.
+.SH COMMAND-LINE\ ARGUMENT\ FILES    
+To shorten or simplify the \f3javac\fR command, you can specify one or more files that contain arguments to the \f3javac\fR command (except \f3-J\fR options)\&. This enables you to create \f3javac\fR commands of any length on any operating system\&.
 .PP
-To shorten or simplify the
-\fBjavac\fR
-command, you can specify one or more files that contain arguments to the
-\fBjavac\fR
-command (except
-\fB\-J\fR
-options)\&. This enables you to create
-\fBjavac\fR
-commands of any length on any operating system\&.
+An argument file can include \f3javac\fR options and source file names in any combination\&. The arguments within a file can be separated by spaces or new line characters\&. If a file name contains embedded spaces, then put the whole file name in double quotation marks\&.
+.PP
+File Names within an argument file are relative to the current directory, not the location of the argument file\&. Wild cards (*) are not allowed in these lists (such as for specifying \f3*\&.java\fR)\&. Use of the at sign (@) to recursively interpret files is not supported\&. The \f3-J\fR options are not supported because they are passed to the launcher, which does not support argument files\&.
 .PP
-An argument file can include
-\fBjavac\fR
-options and source file names in any combination\&. The arguments within a file can be separated by spaces or new line characters\&. If a file name contains embedded spaces, then put the whole file name in double quotation marks\&.
+When executing the \f3javac\fR command, pass in the path and name of each argument file with the at sign (@) leading character\&. When the \f3javac\fR command encounters an argument beginning with the at sign (@), it expands the contents of that file into the argument list\&.
 .PP
-File Names within an argument file are relative to the current directory, not the location of the argument file\&. Wild cards (*) are not allowed in these lists (such as for specifying
-\fB*\&.java\fR)\&. Use of the at sign (@) to recursively interpret files is not supported\&. The
-\fB\-J\fR
-options are not supported because they are passed to the launcher, which does not support argument files\&.
-.PP
-When executing the
-\fBjavac\fR
-command, pass in the path and name of each argument file with the at sign (@) leading character\&. When the
-\fBjavac\fR
-command encounters an argument beginning with the at sign (@), it expands the contents of that file into the argument list\&.
+\f3Example 1 Single Argument File\fR
 .PP
-\fBExample 1\fR
-.br
-Single Argument File
-.RS 4
-You could use a single argument file named
-\fBargfile\fR
-to hold all
-\fBjavac\fR
-arguments:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBjavac @argfile\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
+You could use a single argument file named \f3argfile\fR to hold all \f3javac\fR arguments:
+.sp     
+.nf     
+\f3javac @argfile\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
 This argument file could contain the contents of both files shown in Example 2
-.RE
+.PP
+\f3Example 2 Two Argument Files\fR
 .PP
-\fBExample 2\fR
-.br
-Two Argument Files
-.RS 4
-You can create two argument files: one for the
-\fBjavac\fR
-options and the other for the source file names\&. Note that the following lists have no line\-continuation characters\&.
-.sp
+You can create two argument files: one for the \f3javac\fR options and the other for the source file names\&. Note that the following lists have no line-continuation characters\&.
+.PP
 Create a file named options that contains the following:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-d classes\fR
-.fi
-.if n \{\
-.RE
-.\}
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-g\fR
-.fi
-.if n \{\
-.RE
-.\}
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-sourcepath /java/pubs/ws/1\&.3/src/share/classes\fR
-.fi
-.if n \{\
-.RE
-.\}
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
- 
-.fi
-.if n \{\
-.RE
-.\}
+.sp     
+.nf     
+\f3\-d classes\fP
+.fi     
+.nf     
+\f3\-g\fP
+.fi     
+.nf     
+\f3\-sourcepath /java/pubs/ws/1\&.3/src/share/classes\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
 Create a file named classes that contains the following:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBMyClass1\&.java\fR
-\fBMyClass2\&.java\fR
-\fBMyClass3\&.java\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-Then, run the
-\fBjavac\fR
-command as follows:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBjavac @options @classes\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
+.sp     
+.nf     
+\f3MyClass1\&.java\fP
+.fi     
+.nf     
+\f3MyClass2\&.java\fP
+.fi     
+.nf     
+\f3MyClass3\&.java\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+Then, run the \f3javac\fR command as follows:
+.sp     
+.nf     
+\f3javac @options @classes\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+\f3Example 3 Argument Files with Paths\fR
 .PP
-\fBExample 3\fR
-.br
-Argument Files with Paths
-.RS 4
-The argument files can have paths, but any file names inside the files are relative to the current working directory (not
-\fBpath1\fR
-or
-\fBpath2\fR):
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBjavac @path1/options @path2/classes\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.SH "ANNOTATION PROCESSING"
+The argument files can have paths, but any file names inside the files are relative to the current working directory (not \f3path1\fR or \f3path2\fR):
+.sp     
+.nf     
+\f3javac @path1/options @path2/classes\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+.SH ANNOTATION\ PROCESSING    
+The \f3javac\fR command provides direct support for annotation processing, superseding the need for the separate annotation processing command, \f3apt\fR\&.
 .PP
-The
-\fBjavac\fR
-command provides direct support for annotation processing, superseding the need for the separate annotation processing command,
-\fBapt\fR\&.
-.PP
-The API for annotation processors is defined in the
-\fBjavax\&.annotation\&.processing\fR
-and j\fBavax\&.lang\&.model\fR
-packages and subpackages\&.
-.SS "How Annotation Processing Works"
-.PP
-Unless annotation processing is disabled with the
-\fB\-proc:none\fR
-option, the compiler searches for any annotation processors that are available\&. The search path can be specified with the
-\fB\-processorpath\fR
-option\&. If no path is specified, then the user class path is used\&. Processors are located by means of service provider\-configuration files named
-\fBMETA\-INF/services/javax\&.annotation\&.processing\fR\&.Processor on the search path\&. Such files should contain the names of any annotation processors to be used, listed one per line\&. Alternatively, processors can be specified explicitly, using the
-\fB\-processor\fR
-option\&.
+The API for annotation processors is defined in the \f3javax\&.annotation\&.processing\fR and j\f3avax\&.lang\&.model\fR packages and subpackages\&.
+.SS HOW\ ANNOTATION\ PROCESSING\ WORKS    
+Unless annotation processing is disabled with the \f3-proc:none\fR option, the compiler searches for any annotation processors that are available\&. The search path can be specified with the \f3-processorpath\fR option\&. If no path is specified, then the user class path is used\&. Processors are located by means of service provider-configuration files named \f3META-INF/services/javax\&.annotation\&.processing\fR\&.Processor on the search path\&. Such files should contain the names of any annotation processors to be used, listed one per line\&. Alternatively, processors can be specified explicitly, using the \f3-processor\fR option\&.
 .PP
 After scanning the source files and classes on the command line to determine what annotations are present, the compiler queries the processors to determine what annotations they process\&. When a match is found, the processor is called\&. A processor can claim the annotations it processes, in which case no further attempt is made to find any processors for those annotations\&. After all of the annotations are claimed, the compiler does not search for additional processors\&.
 .PP
 If any processors generate new source files, then another round of annotation processing occurs: Any newly generated source files are scanned, and the annotations processed as before\&. Any processors called on previous rounds are also called on all subsequent rounds\&. This continues until no new source files are generated\&.
 .PP
-After a round occurs where no new source files are generated, the annotation processors are called one last time, to give them a chance to complete any remaining work\&. Finally, unless the
-\fB\-proc:only\fR
-option is used, the compiler compiles the original and all generated source files\&.
-.SS "Implicitly Loaded Source Files"
-.PP
-To compile a set of source files, the compiler might need to implicitly load additional source files\&. See Searching for Types\&. Such files are currently not subject to annotation processing\&. By default, the compiler gives a warning when annotation processing occurred and any implicitly loaded source files are compiled\&. The
-\fB\-implicit\fR
-option provides a way to suppress the warning\&.
-.SH "SEARCHING FOR TYPES"
-.PP
+After a round occurs where no new source files are generated, the annotation processors are called one last time, to give them a chance to complete any remaining work\&. Finally, unless the \f3-proc:only\fR option is used, the compiler compiles the original and all generated source files\&.
+.SS IMPLICITLY\ LOADED\ SOURCE\ FILES    
+To compile a set of source files, the compiler might need to implicitly load additional source files\&. See Searching for Types\&. Such files are currently not subject to annotation processing\&. By default, the compiler gives a warning when annotation processing occurred and any implicitly loaded source files are compiled\&. The \f3-implicit\fR option provides a way to suppress the warning\&.
+.SH SEARCHING\ FOR\ TYPES    
 To compile a source file, the compiler often needs information about a type, but the type definition is not in the source files specified on the command line\&. The compiler needs type information for every class or interface used, extended, or implemented in the source file\&. This includes classes and interfaces not explicitly mentioned in the source file, but that provide information through inheritance\&.
 .PP
-For example, when you create a subclass
-\fBjava\&.applet\&.Applet\fR, you are also using the ancestor classes of
-\fBApplet\fR:
-\fBjava\&.awt\&.Panel\fR,
-\fBjava\&.awt\&.Container\fR,
-\fBjava\&.awt\&.Component\fR, and
-\fBjava\&.lang\&.Object\fR\&.
+For example, when you create a subclass \f3java\&.applet\&.Applet\fR, you are also using the ancestor classes of \f3Applet\fR: \f3java\&.awt\&.Panel\fR, \f3java\&.awt\&.Container\fR, \f3java\&.awt\&.Component\fR, and \f3java\&.lang\&.Object\fR\&.
+.PP
+When the compiler needs type information, it searches for a source file or class file that defines the type\&. The compiler searches for class files first in the bootstrap and extension classes, then in the user class path (which by default is the current directory)\&. The user class path is defined by setting the \f3CLASSPATH\fR environment variable or by using the \f3-classpath\fR option\&.
+.PP
+If you set the \f3-sourcepath\fR option, then the compiler searches the indicated path for source files\&. Otherwise, the compiler searches the user class path for both class files and source files\&.
 .PP
-When the compiler needs type information, it searches for a source file or class file that defines the type\&. The compiler searches for class files first in the bootstrap and extension classes, then in the user class path (which by default is the current directory)\&. The user class path is defined by setting the
-\fBCLASSPATH\fR
-environment variable or by using the
-\fB\-classpath\fR
-option\&.
+You can specify different bootstrap or extension classes with the \f3-bootclasspath\fR and the \f3-extdirs\fR options\&. See Cross-Compilation Options\&.
 .PP
-If you set the
-\fB\-sourcepath\fR
-option, then the compiler searches the indicated path for source files\&. Otherwise, the compiler searches the user class path for both class files and source files\&.
+A successful type search may produce a class file, a source file, or both\&. If both are found, then you can use the \f3-Xprefer\fR option to instruct the compiler which to use\&. If \f3newer\fR is specified, then the compiler uses the newer of the two files\&. If \f3source\fR is specified, the compiler uses the source file\&. The default is \f3newer\fR\&.
 .PP
-You can specify different bootstrap or extension classes with the
-\fB\-bootclasspath\fR
-and the
-\fB\-extdirs\fR
-options\&. See Cross\-Compilation Options\&.
+If a type search finds a source file for a required type, either by itself, or as a result of the setting for the \f3-Xprefer\fR option, then the compiler reads the source file to get the information it needs\&. By default the compiler also compiles the source file\&. You can use the \f3-implicit\fR option to specify the behavior\&. If \f3none\fR is specified, then no class files are generated for the source file\&. If \f3class\fR is specified, then class files are generated for the source file\&.
 .PP
-A successful type search may produce a class file, a source file, or both\&. If both are found, then you can use the
-\fB\-Xprefer\fR
-option to instruct the compiler which to use\&. If
-\fBnewer\fR
-is specified, then the compiler uses the newer of the two files\&. If
-\fBsource\fR
-is specified, the compiler uses the source file\&. The default is
-\fBnewer\fR\&.
-.PP
-If a type search finds a source file for a required type, either by itself, or as a result of the setting for the
-\fB\-Xprefer\fR
-option, then the compiler reads the source file to get the information it needs\&. By default the compiler also compiles the source file\&. You can use the
-\fB\-implicit\fR
-option to specify the behavior\&. If
-\fBnone\fR
-is specified, then no class files are generated for the source file\&. If
-\fBclass\fR
-is specified, then class files are generated for the source file\&.
-.PP
-The compiler might not discover the need for some type information until after annotation processing completes\&. When the type information is found in a source file and no
-\fB\-implicit\fR
-option is specified, the compiler gives a warning that the file is being compiled without being subject to annotation processing\&. To disable the warning, either specify the file on the command line (so that it will be subject to annotation processing) or use the
-\fB\-implicit\fR
-option to specify whether or not class files should be generated for such source files\&.
-.SH "PROGRAMMATIC INTERFACE"
+The compiler might not discover the need for some type information until after annotation processing completes\&. When the type information is found in a source file and no \f3-implicit\fR option is specified, the compiler gives a warning that the file is being compiled without being subject to annotation processing\&. To disable the warning, either specify the file on the command line (so that it will be subject to annotation processing) or use the \f3-implicit\fR option to specify whether or not class files should be generated for such source files\&.
+.SH PROGRAMMATIC\ INTERFACE    
+The \f3javac\fR command supports the new Java Compiler API defined by the classes and interfaces in the \f3javax\&.tools\fR package\&.
+.SS EXAMPLE    
+To compile as though providing command-line arguments, use the following syntax:
+.sp     
+.nf     
+\f3JavaCompiler javac = ToolProvider\&.getSystemJavaCompiler();\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+The example writes diagnostics to the standard output stream and returns the exit code that \f3javac\fR would give when called from the command line\&.
 .PP
-The
-\fBjavac\fR
-command supports the new Java Compiler API defined by the classes and interfaces in the
-\fBjavax\&.tools\fR
-package\&.
-.SS "Example"
-.PP
-To compile as though providing command\-line arguments, use the following syntax:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBJavaCompiler javac = ToolProvider\&.getSystemJavaCompiler();\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.PP
-The example writes diagnostics to the standard output stream and returns the exit code that
-\fBjavac\fR
-would give when called from the command line\&.
+You can use other methods in the \f3javax\&.tools\&.JavaCompiler\fR interface to handle diagnostics, control where files are read from and written to, and more\&.
+.SS OLD\ INTERFACE    
+\fINote:\fR This API is retained for backward compatibility only\&. All new code should use the newer Java Compiler API\&.
 .PP
-You can use other methods in the
-\fBjavax\&.tools\&.JavaCompiler\fR
-interface to handle diagnostics, control where files are read from and written to, and more\&.
-.SS "Old Interface"
-.PP
-\fBNote:\fR
-This API is retained for backward compatibility only\&. All new code should use the newer Java Compiler API\&.
+The \f3com\&.sun\&.tools\&.javac\&.Main\fR class provides two static methods to call the compiler from a program:
+.sp     
+.nf     
+\f3public static int compile(String[] args);\fP
+.fi     
+.nf     
+\f3public static int compile(String[] args, PrintWriter out);\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+The \f3args\fR parameter represents any of the command-line arguments that would typically be passed to the compiler\&.
 .PP
-The
-\fBcom\&.sun\&.tools\&.javac\&.Main\fR
-class provides two static methods to call the compiler from a program:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBpublic static int compile(String[] args);\fR
-\fBpublic static int compile(String[] args, PrintWriter out);\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
+The \f3out\fR parameter indicates where the compiler diagnostic output is directed\&.
+.PP
+The \f3return\fR value is equivalent to the \f3exit\fR value from \f3javac\fR\&.
 .PP
-The
-\fBargs\fR
-parameter represents any of the command\-line arguments that would typically be passed to the compiler\&.
+\fINote:\fR All other classes and methods found in a package with names that start with \f3com\&.sun\&.tools\&.javac\fR (subpackages of \f3com\&.sun\&.tools\&.javac\fR) are strictly internal and subject to change at any time\&.
+.SH EXAMPLES    
+\f3Example 1 Compile a Simple Program\fR
 .PP
-The
-\fBout\fR
-parameter indicates where the compiler diagnostic output is directed\&.
+This example shows how to compile the \f3Hello\&.java\fR source file in the greetings directory\&. The class defined in \f3Hello\&.java\fR is called \f3greetings\&.Hello\fR\&. The greetings directory is the package directory both for the source file and the class file and is underneath the current directory\&. This makes it possible to use the default user class path\&. It also makes it unnecessary to specify a separate destination directory with the \f3-d\fR option\&.
 .PP
-The
-\fBreturn\fR
-value is equivalent to the
-\fBexit\fR
-value from
-\fBjavac\fR\&.
-.PP
-\fBNote:\fR
-All other classes and methods found in a package with names that start with
-\fBcom\&.sun\&.tools\&.javac\fR
-(subpackages of
-\fBcom\&.sun\&.tools\&.javac\fR) are strictly internal and subject to change at any time\&.
-.SH "EXAMPLES"
-.PP
-\fBExample 1\fR
-.br
-Compile a Simple Program
-.RS 4
-This example shows how to compile the
-\fBHello\&.java\fR
-source file in the greetings directory\&. The class defined in
-\fBHello\&.java\fR
-is called
-\fBgreetings\&.Hello\fR\&. The greetings directory is the package directory both for the source file and the class file and is underneath the current directory\&. This makes it possible to use the default user class path\&. It also makes it unnecessary to specify a separate destination directory with the
-\fB\-d\fR
-option\&.
-.sp
-The source code in
-\fBHello\&.java\fR:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBpackage greetings;\fR
-\fB \fR
-\fBpublic class Hello {\fR
-\fB    public static void main(String[] args) {\fR
-\fB        for (int i=0; i < args\&.length; i++) {\fR
-\fB            System\&.out\&.println("Hello " + args[i]);\fR
-\fB        }\fR
-\fB    }\fR
-\fB}\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
+The source code in \f3Hello\&.java\fR:
+.sp     
+.nf     
+\f3package greetings;\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.nf     
+\f3public class Hello {\fP
+.fi     
+.nf     
+\f3    public static void main(String[] args) {\fP
+.fi     
+.nf     
+\f3        for (int i=0; i < args\&.length; i++) {\fP
+.fi     
+.nf     
+\f3            System\&.out\&.println("Hello " + args[i]);\fP
+.fi     
+.nf     
+\f3        }\fP
+.fi     
+.nf     
+\f3    }\fP
+.fi     
+.nf     
+\f3}\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
 Compile greetings\&.Hello:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBjavac greetings/Hello\&.java\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-Run
-\fBgreetings\&.Hello\fR:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBjava greetings\&.Hello World Universe Everyone\fR
-\fBHello World\fR
-\fBHello Universe\fR
-\fBHello Everyone\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
+.sp     
+.nf     
+\f3javac greetings/Hello\&.java\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+Run \f3greetings\&.Hello\fR:
+.sp     
+.nf     
+\f3java greetings\&.Hello World Universe Everyone\fP
+.fi     
+.nf     
+\f3Hello World\fP
+.fi     
+.nf     
+\f3Hello Universe\fP
+.fi     
+.nf     
+\f3Hello Everyone\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+\f3Example 2 Compile Multiple Source Files\fR
 .PP
-\fBExample 2\fR
-.br
-Compile Multiple Source Files
-.RS 4
-This example compiles the
-\fBAloha\&.java\fR,
-\fBGutenTag\&.java\fR,
-\fBHello\&.java\fR, and
-\fBHi\&.java\fR
-source files in the
-\fBgreetings\fR
-package\&.
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB% javac greetings/*\&.java\fR
-\fB% ls greetings\fR
-\fBAloha\&.class         GutenTag\&.class      Hello\&.class         Hi\&.class\fR
-\fBAloha\&.java          GutenTag\&.java       Hello\&.java          Hi\&.java\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
+This example compiles the \f3Aloha\&.java\fR, \f3GutenTag\&.java\fR, \f3Hello\&.java\fR, and \f3Hi\&.java\fR source files in the \f3greetings\fR package\&.
+.sp     
+.nf     
+\f3% javac greetings/*\&.java\fP
+.fi     
+.nf     
+\f3% ls greetings\fP
+.fi     
+.nf     
+\f3Aloha\&.class         GutenTag\&.class      Hello\&.class         Hi\&.class\fP
+.fi     
+.nf     
+\f3Aloha\&.java          GutenTag\&.java       Hello\&.java          Hi\&.java\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+\f3Example 3 Specify a User Class Path\fR
 .PP
-\fBExample 3\fR
-.br
-Specify a User Class Path
-.RS 4
 After changing one of the source files in the previous example, recompile it:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBpwd\fR
-\fB/examples\fR
-\fBjavac greetings/Hi\&.java\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-Because
-\fBgreetings\&.Hi\fR
-refers to other classes in the
-\fBgreetings\fR
-package, the compiler needs to find these other classes\&. The previous example works because the default user class path is the directory that contains the package directory\&. If you want to recompile this file without concern for which directory you are in, then add the examples directory to the user class path by setting
-\fBCLASSPATH\fR\&. This example uses the
-\fB\-classpath\fR
-option\&.
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBjavac \-classpath /examples /examples/greetings/Hi\&.java\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-If you change
-\fBgreetings\&.Hi\fR
-to use a banner utility, then that utility also needs to be accessible through the user class path\&.
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBjavac \-classpath /examples:/lib/Banners\&.jar \e\fR
-\fB            /examples/greetings/Hi\&.java\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-To execute a class in the
-\fBgreetings\fR
-package, the program needs access to the
-\fBgreetings\fR
-package, and to the classes that the
-\fBgreetings\fR
-classes use\&.
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBjava \-classpath /examples:/lib/Banners\&.jar greetings\&.Hi\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
+.sp     
+.nf     
+\f3pwd\fP
+.fi     
+.nf     
+\f3/examples\fP
+.fi     
+.nf     
+\f3javac greetings/Hi\&.java\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+Because \f3greetings\&.Hi\fR refers to other classes in the \f3greetings\fR package, the compiler needs to find these other classes\&. The previous example works because the default user class path is the directory that contains the package directory\&. If you want to recompile this file without concern for which directory you are in, then add the examples directory to the user class path by setting \f3CLASSPATH\fR\&. This example uses the \f3-classpath\fR option\&.
+.sp     
+.nf     
+\f3javac \-classpath /examples /examples/greetings/Hi\&.java\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+If you change \f3greetings\&.Hi\fR to use a banner utility, then that utility also needs to be accessible through the user class path\&.
+.sp     
+.nf     
+\f3javac \-classpath /examples:/lib/Banners\&.jar \e\fP
+.fi     
+.nf     
+\f3            /examples/greetings/Hi\&.java\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+To execute a class in the \f3greetings\fR package, the program needs access to the \f3greetings\fR package, and to the classes that the \f3greetings\fR classes use\&.
+.sp     
+.nf     
+\f3java \-classpath /examples:/lib/Banners\&.jar greetings\&.Hi\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+\f3Example 4 Separate Source Files and Class Files\fR
 .PP
-\fBExample 4\fR
-.br
-Separate Source Files and Class Files
-.RS 4
-The following example uses
-\fBjavac\fR
-to compile code that runs on JVM 1\&.7\&.
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBjavac \-source 1\&.7 \-target 1\&.7 \-bootclasspath jdk1\&.7\&.0/lib/rt\&.jar \e \fR
-\fB\-extdirs "" OldCode\&.java\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-The
-\fB\-source 1\&.7\fR
-option specifies that release 1\&.7 (or 7) of the Java programming language be used to compile
-\fBOldCode\&.java\fR\&. The option
-\fB\-target 1\&.7\fR
-option ensures that the generated class files are compatible with JVM 1\&.7\&. Note that in most cases, the value of the
-\fB\-target\fR
-option is the value of the
-\fB\-source\fR
-option; in this example, you can omit the
-\fB\-target\fR
-option\&.
-.sp
-You must specify the
-\fB\-bootclasspath\fR
-option to specify the correct version of the bootstrap classes (the
-\fBrt\&.jar\fR
-library)\&. If not, then the compiler generates a warning:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBjavac \-source 1\&.7 OldCode\&.java\fR
-\fBwarning: [options] bootstrap class path not set in conjunction with \fR
-\fB\-source 1\&.7\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
+The following example uses \f3javac\fR to compile code that runs on JVM 1\&.7\&.
+.sp     
+.nf     
+\f3javac \-source 1\&.7 \-target 1\&.7 \-bootclasspath jdk1\&.7\&.0/lib/rt\&.jar \e \fP
+.fi     
+.nf     
+\f3\-extdirs "" OldCode\&.java\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+The \f3-source 1\&.7\fR option specifies that release 1\&.7 (or 7) of the Java programming language be used to compile \f3OldCode\&.java\fR\&. The option \f3-target 1\&.7\fR option ensures that the generated class files are compatible with JVM 1\&.7\&. Note that in most cases, the value of the \f3-target\fR option is the value of the \f3-source\fR option; in this example, you can omit the \f3-target\fR option\&.
+.PP
+You must specify the \f3-bootclasspath\fR option to specify the correct version of the bootstrap classes (the \f3rt\&.jar\fR library)\&. If not, then the compiler generates a warning:
+.sp     
+.nf     
+\f3javac \-source 1\&.7 OldCode\&.java\fP
+.fi     
+.nf     
+\f3warning: [options] bootstrap class path not set in conjunction with \fP
+.fi     
+.nf     
+\f3\-source 1\&.7\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
 If you do not specify the correct version of bootstrap classes, then the compiler uses the old language rules (in this example, it uses version 1\&.7 of the Java programming language) combined with the new bootstrap classes, which can result in class files that do not work on the older platform (in this case, Java SE 7) because reference to nonexistent methods can get included\&.
-.RE
+.PP
+\f3Example 5 Cross Compile\fR
 .PP
-\fBExample 5\fR
-.br
-Cross Compile
-.RS 4
-This example uses
-\fBjavac\fR
-to compile code that runs on JVM 1\&.7\&.
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBjavac \-source 1\&.7 \-target 1\&.7 \-bootclasspath jdk1\&.7\&.0/lib/rt\&.jar \e\fR
-\fB            \-extdirs "" OldCode\&.java\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-The\fB \-source 1\&.7\fR
-option specifies that release 1\&.7 (or 7) of the Java programming language to be used to compile OldCode\&.java\&. The
-\fB\-target 1\&.7\fR
-option ensures that the generated class files are compatible with JVM 1\&.7\&. In most cases, the value of the
-\fB\-target\fR
-is the value of
-\fB\-source\fR\&. In this example, the
-\fB\-target\fR
-option is omitted\&.
-.sp
-You must specify the
-\fB\-bootclasspath\fR
-option to specify the correct version of the bootstrap classes (the
-\fBrt\&.jar\fR
-library)\&. If not, then the compiler generates a warning:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBjavac \-source 1\&.7 OldCode\&.java\fR
-\fBwarning: [options] bootstrap class path not set in conjunction with \-source 1\&.7\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
+This example uses \f3javac\fR to compile code that runs on JVM 1\&.7\&.
+.sp     
+.nf     
+\f3javac \-source 1\&.7 \-target 1\&.7 \-bootclasspath jdk1\&.7\&.0/lib/rt\&.jar \e\fP
+.fi     
+.nf     
+\f3            \-extdirs "" OldCode\&.java\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+The\f3-source 1\&.7\fR option specifies that release 1\&.7 (or 7) of the Java programming language to be used to compile OldCode\&.java\&. The \f3-target 1\&.7\fR option ensures that the generated class files are compatible with JVM 1\&.7\&.
+.PP
+You must specify the \f3-bootclasspath\fR option to specify the correct version of the bootstrap classes (the \f3rt\&.jar\fR library)\&. If not, then the compiler generates a warning:
+.sp     
+.nf     
+\f3javac \-source 1\&.7 OldCode\&.java\fP
+.fi     
+.nf     
+\f3warning: [options] bootstrap class path not set in conjunction with \-source 1\&.7\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
 If you do not specify the correct version of bootstrap classes, then the compiler uses the old language rules combined with the new bootstrap classes\&. This combination can result in class files that do not work on the older platform (in this case, Java SE 7) because reference to nonexistent methods can get included\&. In this example, the compiler uses release 1\&.7 of the Java programming language\&.
-.RE
-.SH "SEE ALSO"
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
+.SH SEE\ ALSO    
+.TP 0.2i    
+\(bu
 java(1)
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
+.TP 0.2i    
+\(bu
 jdb(1)
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
+.TP 0.2i    
+\(bu
 javah(1)
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
+.TP 0.2i    
+\(bu
 javadoc(1)
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
+.TP 0.2i    
+\(bu
 jar(1)
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
+.TP 0.2i    
+\(bu
 jdb(1)
-.RE
-.br
-'pl 8.5i
-'bp
+.RE
+.br
+'pl 8.5i
+'bp
--- a/src/bsd/doc/man/javadoc.1	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/bsd/doc/man/javadoc.1	Tue Nov 04 17:20:19 2014 +0000
@@ -1,5 +1,5 @@
 '\" t
-.\"  Copyright (c) 1994, 2013, Oracle and/or its affiliates. All rights reserved.
+.\"  Copyright (c) 1994, 2015, Oracle and/or its affiliates. All rights reserved.
 .\"
 .\" DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 .\"
@@ -23,12 +23,12 @@
 .\"
 .\"     Arch: generic
 .\"     Software: JDK 8
-.\"     Date: 10 May 2011
+.\"     Date: 03 March 2015
 .\"     SectDesc: Basic Tools
 .\"     Title: javadoc.1
 .\"
 .if n .pl 99999
-.TH javadoc 1 "10 May 2011" "JDK 8" "Basic Tools"
+.TH javadoc 1 "03 March 2015" "JDK 8" "Basic Tools"
 .\" -----------------------------------------------------------------
 .\" * Define some portability stuff
 .\" -----------------------------------------------------------------
@@ -209,7 +209,7 @@
 \f3package java\&.lang\&.applet;\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 
@@ -251,7 +251,7 @@
 \f3initialize, start, and stop the applet\&. \fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .nf     
 \f3@since 1\&.0 \fP
@@ -266,7 +266,7 @@
 \f3</HTML>\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 The \f3package\&.html\fR file is a typical HTML file and does not include a package declaration\&. The content of the package comment file is written in HTML with one exception\&. The documentation comment should not include the comment separators \f3/**\fR and \f3*/\fR or leading asterisks\&. When writing the comment, make the first sentence a summary about the package, and do not put a title or any other text between the \f3<body>\fR tag and the first sentence\&. You can include package tags\&. All block tags must appear after the main description\&. If you add an \f3@see\fR tag in a package comment file, then it must have a fully qualified name\&.
@@ -334,7 +334,7 @@
 \f3 */\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 .SS TEST\ AND\ TEMPLATE\ FILES    
@@ -350,7 +350,7 @@
 \f3com/package1/test\-files/\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 If your test files contain documentation comments, then you can set up a separate run of the \f3javadoc\fR command to produce test file documentation by passing in their test source file names with wild cards, such as \f3com/package1/test-files/*\&.java\fR\&.
@@ -560,7 +560,7 @@
 \f3implements Serializable\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 The declaration for the \f3Boolean\&.valueOf\fR method is:
@@ -569,7 +569,7 @@
 \f3public static Boolean valueOf(String s)\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 The \f3javadoc\fR command can include the modifiers \f3public\fR, \f3protected\fR, \f3private\fR, \f3abstract\fR, \f3final\fR, \f3static\fR, \f3transient\fR, and \f3volatile\fR, but not \f3synchronized\fR or \f3native\fR\&. The \f3synchronized\fR and \f3native\fR modifiers are considered implementation detail and not part of the API specification\&.
@@ -593,7 +593,7 @@
 \f3 */\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 To save space you can put a comment on one line:
@@ -602,7 +602,7 @@
 \f3/** This comment takes up only one line\&. */\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 
@@ -623,19 +623,19 @@
 \f3 */\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .nf     
 \f3import com\&.example;   // MISTAKE \- Important not to put import statement here\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .nf     
 \f3public class Whatever{ }\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 
@@ -657,7 +657,7 @@
 \f3 */\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 
@@ -676,7 +676,7 @@
 \f3 */\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 
@@ -700,7 +700,7 @@
 \f3 */\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 
@@ -730,7 +730,7 @@
 \f3public int x, y;      // Avoid this \fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 The \f3javadoc\fR command generates the following documentation from the previous code:
@@ -739,7 +739,7 @@
 \f3public int x\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 The horizontal and vertical distances of point (x, y)\&.
@@ -748,7 +748,7 @@
 \f3public int y\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 The horizontal and vertical distances of point (x, y)\&.
@@ -872,7 +872,7 @@
 \f3 */\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 
@@ -899,11 +899,10 @@
 .TP 0.2i    
 \(bu
 In the text arguments of the \f3@return\fR, \f3@param,\fR and \f3@throws\fR tags of a method\&. In this case, the tag text is copied from the corresponding tag up the hierarchy\&.
-.RE
-.RS
+.RE     
+
+
 See Method Comment Inheritance for a description of how comments are found in the inheritance hierarchy\&. Note that if this tag is missing, then the comment is or is not automatically inherited according to rules described in that section\&.
-
-.RE
 .TP     
 {@link \fIpackage\&.class#member label\fR}
 Introduced in JDK 1\&.2
@@ -920,7 +919,7 @@
 \f3Use the {@link #getComponentAt(int, int) getComponentAt} method\&.\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 
@@ -931,7 +930,7 @@
 \f3Use the <a href="Component\&.html#getComponentAt(int, int)">getComponentAt</a> method\&.\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 
@@ -942,7 +941,7 @@
 \f3Use the getComponentAt method\&.\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 
@@ -982,7 +981,7 @@
 \f3}\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 
@@ -1014,7 +1013,7 @@
 \f3}\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 
@@ -1071,7 +1070,7 @@
 \f3 */\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 
@@ -1091,7 +1090,7 @@
 \f3</dl>\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 
@@ -1128,7 +1127,7 @@
 \f3@see #constructor(Type argname, Type argname,\&.\&.\&.) \fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .nf     
 \f3\fIReferencing another class in the current or imported packages\fR\fP
@@ -1155,7 +1154,7 @@
 \f3@see Class \fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .nf     
 \f3\fIReferencing an element in another package (fully qualified)\fR\fP
@@ -1185,7 +1184,7 @@
 \f3@see package\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 \f3\fRNotes about the previous listing:
@@ -1215,7 +1214,7 @@
 Any enclosing classes and interfaces searching the closest first\&.
 .TP 0.4i    
 3\&.
-Any superclasses and superonterfaces, searching the closest first\&.
+Any superclasses and superinterfaces, searching the closest first\&.
 .TP 0.4i    
 4\&.
 The current package\&.
@@ -1307,7 +1306,7 @@
 \f3@see "The Java Programming Language"    //  "The Java Programming Language" \fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 \fINote:\fR You can extend the \f3@se\fR\f3e\fR tag to link to classes not being documented with the \f3-link\fR option\&.
@@ -1317,7 +1316,7 @@
 
 Used in the documentation comment for a default serializable field\&. See Documenting Serializable Fields and Data for a Class at http://docs\&.oracle\&.com/javase/8/docs/platform/serialization/spec/serial-arch\&.html#5251
 
-See also Oracle\(cqs Criteria for Including Classes in the Serialilzed Form Specification at http://www\&.oracle\&.com/technetwork/java/javase/documentation/serialized-criteria-137781\&.html
+See also Oracle\(cqs Criteria for Including Classes in the Serialized Form Specification at http://www\&.oracle\&.com/technetwork/java/javase/documentation/serialized-criteria-137781\&.html
 
 An optional \f3field-description\fR should explain the meaning of the field and list the acceptable values\&. When needed, the description can span multiple lines\&. The standard doclet adds this information to the serialized form page\&. See Cross-Reference Pages\&.
 
@@ -1331,13 +1330,12 @@
 .TP 0.2i    
 \(bu
 A private or package-private class that implements \f3Serializable\fR is excluded unless that class (or its package) is marked with the \f3@serial include\fR tag\&.
-.RE
-.RS
+.RE     
+
+
 For example, the \f3javax\&.swing\fR package is marked with the \f3@serial\fR\f3exclude\fR tag in package\&.html or package-info\&.java\&. The public class \f3java\&.security\&.BasicPermission\fR is marked with the \f3@serial exclude\fR tag\&. The package-private class \f3java\&.util\&.PropertyPermissionCollection\fR is marked with the \f3@serial include\fR tag\&.
 
 The \f3@serial\fR tag at the class level overrides the \f3@serial\fR tag at the package level\&.
-
-.RE
 .TP     
 @serialData \fIdata-description\fR
 Introduced in JDK 1\&.2
@@ -1387,7 +1385,7 @@
 \f3public static final String SCRIPT_START = "<script>"\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 
@@ -1407,7 +1405,7 @@
 \f3public String evalScript(String script) {}\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 
@@ -1494,7 +1492,7 @@
 \f3}\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 .SS FIELD\ TAGS    
@@ -1523,7 +1521,7 @@
 \f3    int x = 1263732;\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 .SS CONSTRUCTOR\ AND\ METHOD\ TAGS    
@@ -1578,7 +1576,7 @@
 \f3    }\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 .SH OPTIONS    
@@ -1592,7 +1590,7 @@
 .PP
 The options are:
 .PP
--1\&.1 || -author || -bootclasspath classpathlist || -bottom text || -breakiterator || -charset name || -classpath classpathlist || -d directory || -docencoding name || -docfilesubdirs || -doclet class || -docletpath classpathlist || -doctitle title || -encoding || -exclude packagename1:packagename2:\&.\&.\&. || -excludedocfilessubdir name1:name2 || -extdirs dirist || -footer footer || -group groupheading packagepattern:packagepattern || -header header || -help || -helpfile path\efilename || -Jflag || -keywords || -link extdocURL || -linkoffline extdocURL packagelistLoc || -linksource || -locale language_country_variant || -nocomment || -nodeprecated || -nodeprecatedlist || -nohelp || -noindex || -nonavbar || -noqualifier all | packagename1:packagename2\&.\&.\&. || -nosince || -notimestamp || -notree || -overview path/filename || -package || -private || -protected || -public || -quiet || -serialwarn || -source release || -sourcepath sourcepathlist || -sourcetab tablength || -splitindex || -stylesheet path/filename || -subpackages package1:package2:\&.\&.\&. || -tag tagname:Xaoptcmf:"taghead" || -taglet class || -tagletpath tagletpathlist || -title title || -top || -use || -verbose || -version || -windowtitle title
+-1\&.1 || -author || -bootclasspath classpathlist || -bottom text || -breakiterator || -charset name || -classpath classpathlist || -d directory || -docencoding name || -docfilesubdirs || -doclet class || -docletpath classpathlist || -doctitle title || -encoding || -exclude packagename1:packagename2:\&.\&.\&. || -excludedocfilessubdir name1:name2 || -extdirs dirist || -footer footer || -group groupheading packagepattern:packagepattern || -header header || -help || -helpfile path\efilename || -Jflag || -javafx ||-keywords || -link extdocURL || -linkoffline extdocURL packagelistLoc || -linksource || -locale language_country_variant || -nocomment || -nodeprecated || -nodeprecatedlist || -nohelp || -noindex || -nonavbar || -noqualifier all | packagename1:packagename2\&.\&.\&. || -nosince || -notimestamp || -notree || -overview path/filename || -package || -private || -protected || -public || -quiet || -serialwarn || -source release || -sourcepath sourcepathlist || -sourcetab tablength || -splitindex || -stylesheet path/filename || -subpackages package1:package2:\&.\&.\&. || -tag tagname:Xaoptcmf:"taghead" || -taglet class || -tagletpath tagletpathlist || -title title || -top || -use || -verbose || -version || -windowtitle title
 .PP
 The following options are the core Javadoc options that are available to all doclets\&. The standard doclet provides the rest of the doclets: \f3-bootclasspath\fR, \f3-breakiterator\fR, \f3-classpath\fR, \f3-doclet\fR, \f3-docletpath\fR, \f3-encoding\fR, -\f3exclude\fR, \f3-extdirs\fR, \f3-help\fR, \f3-locale\fR, \f3-\fR\f3overview\fR, \f3-package\fR, \f3-private\fR, \f3-protected\fR, \f3-public\fR, \f3-quiet\fR, \f3-source\fR, \f3-sourcepath\fR, \f3-subpackages\fR, and \f3-verbose\fR\&.
 .SS JAVADOC\ OPTIONS    
@@ -1635,12 +1633,11 @@
 .TP 0.2i    
 \(bu
 \f3-Xdoclint all,\fR\fI-group\fR : enable all except \fIgroup\fR checks
-.RE
-.RS
+.RE     
+
+
 The variable \fIgroup\fR has one of the following values:
 .RS     
-
-.RE
 .TP 0.2i    
 \(bu
 \f3accessibility\fR : Checks for the issues to be detected by an accessibility checker (for example, no caption or summary attributes specified in a \f3<table>\fR tag)\&.
@@ -1656,8 +1653,9 @@
 .TP 0.2i    
 \(bu
 \f3syntax\fR : Checks for low level issues like unescaped angle brackets (\f3<\fR and \f3>\fR) and ampersands (\f3&\fR) and invalid Javadoc tags\&.
-.RE
-.RS
+.RE     
+
+
 You can specify the \f3-Xdoclint\fR option multiple times to enable the option to check errors and warnings in multiple categories\&. Alternatively, you can specify multiple error and warning categories by using the preceding options\&. For example, use either of the following commands to check for the HTML, syntax, and accessibility issues in the file \fIfilename\fR\&.
 .sp     
 .nf     
@@ -1667,7 +1665,7 @@
 \f3javadoc \-Xdoclint:html,syntax,accessibility \fIfilename\fR\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 
@@ -1675,8 +1673,6 @@
 \fINote:\fR The \f3javadoc\fR command does not guarantee the completeness of these checks\&. In particular, it is not a full HTML compliance checker\&. The goal of the -\f3Xdoclint\fR option is to enable the \f3javadoc\fR command to report majority of common errors\&.
 
 The \f3javadoc\fR command does not attempt to fix invalid input, it just reports it\&.
-
-.RE
 .TP
 -public
 .br
@@ -1740,7 +1736,7 @@
 \f3javadoc \-sourcepath /home/user/src/ com\&.mypackage\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 
@@ -1755,7 +1751,7 @@
 \f3javadoc \-sourcepath /home/user1/src:/home/user2/src com\&.mypackage\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 
@@ -1766,13 +1762,13 @@
 
 If you omit \f3-sourcepath\fR, then the \f3javadoc\fR command uses \f3-classpath\fR to find the source files and class files (for backward compatibility)\&. If you want to search for source and class files in separate paths, then use both \f3-sourcepath\fR and \f3-classpath\fR\&.
 
-For example, if you want to document \f3com\&.mypackage\fR, whose source files reside in the directory /home/user/src/com/mypackage, and if this package relies on a library in /home/user/libthen you would use the following command:
+For example, if you want to document \f3com\&.mypackage\fR, whose source files reside in the directory /home/user/src/com/mypackage, and if this package relies on a library in /home/user/lib, then you would use the following command:
 .sp     
 .nf     
 \f3javadoc \-sourcepath /home/user/lib \-classpath /home/user/src com\&.mypackage\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 
@@ -1795,7 +1791,7 @@
 \f3javadoc \-d docs \-sourcepath /home/user/src  \-subpackages java:javax\&.swing \fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 
@@ -1813,7 +1809,7 @@
 \f3    java\&.net:java\&.lang\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 
@@ -1846,11 +1842,10 @@
 .TP 0.2i    
 \(bu
 Breakiterator sentence-break algorithm\&. Stops at a period, question mark, or exclamation point followed by a space when the next word starts with a capital letter\&. This is meant to handle most abbreviations (such as "The serial no\&. is valid", but will not handle "Mr\&. Smith")\&. The \f3-breakiterator\fR option does not stop at HTML tags or sentences that begin with numbers or symbols\&. The algorithm stops at the last period in \&.\&./filename, even when embedded in an HTML tag\&.
-.RE
-.RS
+.RE     
+
+
 In Java SE 1\&.5 the \f3-breakiterator\fR option warning messages are removed, and the default sentence-break algorithm is unchanged\&. If you have not modified your source code to eliminate the \f3-breakiterator\fR option warnings in Java SE 1\&.4\&.x, then you do not have to do anything\&. The warnings go away starting with Java SE 1\&.5\&.0\&.
-
-.RE
 .TP
 -locale \fIlanguage_country_variant\fR
 .br
@@ -1885,7 +1880,21 @@
 \f3Java HotSpot(TM) 64\-Bit Server VM (build 23\&.5\-b02, mixed mode)\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
+.fi     
+.sp     
+
+.TP
+-javafx
+.br
+Generates HTML documentation using the JavaFX extensions to the standard doclet\&. The generated documentation includes a Property Summary section in addition to the other summary sections generated by the standard Java doclet\&. The listed properties are linked to the sections for the getter and setter methods of each property\&.
+
+If there are no documentation comments written explicitly for getter and setter methods, the documentation comments from the property method are automatically copied to the generated documentation for these methods\&. This option also adds a new \f3@defaultValue\fR tag that allows documenting the default value for a property\&.
+
+Example:
+.sp     
+.nf     
+\f3javadoc \-javafx MyClass\&.java \-d testdir\fP
 .fi     
 .sp     
 
@@ -1957,7 +1966,7 @@
 \f3\-link <directory>/<directory>/\&.\&.\&./<name>\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 
@@ -1982,7 +1991,7 @@
 \f3javadoc \-link http://docs\&.oracle\&.com/javase/8/docs/api/ com\&.mypackage\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 The command generates documentation for the package \f3com\&.mypackage\fR with links to the Java SE packages\&. The generated documentation contains links to the \f3Object\fR class, for example, in the class \f3trees\fR\&. Other options, such as the \f3-sourcepath\fR and \f3-d\fR options, are not shown\&.
@@ -2044,7 +2053,7 @@
 \f3and so on \&.\&.\&.\&.\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 When \f3javadoc\fR is run without the \f3-link\fR option and encounters a name that belongs to an externally referenced class, it prints the name with no link\&. However, when the \f3-link\fR option is used, the \f3javadoc\fR command searches the package-list file at the specified \fIextdocURL\fR location for that package name\&. When it finds the package name, it prefixes the name with \fIextdocURL\fR\&.
@@ -2094,7 +2103,7 @@
 \f3javadoc \-linkoffline http://docs\&.oracle\&.com/javase/8/docs/api/ \&.  com\&.mypackage \fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 
@@ -2118,7 +2127,7 @@
 \f3packagelistLoc2 \&.\&.\&.\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 
@@ -2133,7 +2142,7 @@
 \f3javadoc \-d update \-linkoffline \&. html com\&.mypackage\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 When the \f3javadoc\fR command completes, copy these generated class pages in update/com/package (not the overview or index) to the original files in html/com/package\&.
@@ -2150,7 +2159,7 @@
 \f3public class Button extends Component implements Accessible\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 
@@ -2161,7 +2170,7 @@
 \f3public String getLabel()\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 
@@ -2176,8 +2185,9 @@
 .TP 0.2i    
 \(bu
 The \f3packagepattern\fR value can be any package name at the start of any package name followed by an asterisk (*)\&. The asterisk is the only wildcard allowed and means match any characters\&. Multiple patterns can be included in a group by separating them with colons (:)\&. If you use an asterisk in a pattern or pattern list, then the pattern list must be inside quotation marks, such as \f3"java\&.lang*:java\&.util"\fR\&.
-.RE
-.RS
+.RE     
+
+
 When you do not supply a \f3-group\fR option, all packages are placed in one group with the heading \fIPackages\fR and appropriate subheadings\&. If the subheadings do not include all documented packages (all groups), then the remaining packages appear in a separate group with the subheading Other Packages\&.
 
 For example, the following \f3javadoc\fR command separates the three documented packages into \fICore\fR, \fIExtension\fR, and \fIOther Packages\fR\&. The trailing dot (\&.) does not appear in \f3java\&.lang*\fR\&. Including the dot, such as \f3java\&.lang\&.*\fR omits the\f3java\&.lang\fR package\&.
@@ -2192,7 +2202,7 @@
 \f3        java\&.lang java\&.lang\&.reflect java\&.util javax\&.servlet java\&.new\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 
@@ -2212,8 +2222,6 @@
 \fIOther Packages\fR
 
 \f3java\&.new\fR
-
-.RE
 .TP
 -nodeprecated
 .br
@@ -2251,7 +2259,7 @@
 \f3javadoc \-helpfile /home/user/myhelp\&.html java\&.awt\&.\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 
@@ -2264,7 +2272,7 @@
 \f3javadoc \-stylesheet file /home/user/mystylesheet\&.css com\&.mypackage\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 
@@ -2283,7 +2291,7 @@
 \f3<META http\-equiv="Content\-Type" content="text/html; charset=ISO\-8859\-1">\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 
@@ -2296,7 +2304,7 @@
 .br
 Specifies the encoding of the generated HTML files\&. The name should be a preferred MIME name as specified in the IANA Registry, Character Sets at http://www\&.iana\&.org/assignments/character-sets
 
-If you omit the \f3-docencoding\fR option but use the \f3-encoding\fR option, then the encoding of the generated HTML files is determined by the \f3-encoding\fR option, for example: \f3javadoc -docencoding"iso-8859-1" mypackage\fR\&. See also the \f3-encoding\fR and \f3-docencoding name\fR options\&.
+If you omit the \f3-docencoding\fR option but use the \f3-encoding\fR option, then the encoding of the generated HTML files is determined by the \f3-encoding\fR option, for example: \f3javadoc -docencoding "iso-8859-1" mypackage\fR\&. See also the \f3-encoding\fR and \f3-docencoding name\fR options\&.
 .TP
 -keywords
 .br
@@ -2315,7 +2323,7 @@
 \f3<META NAME="keywords" CONTENT="charAt()">\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 
@@ -2360,7 +2368,7 @@
 \f3 */\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 
@@ -2390,7 +2398,7 @@
 \f3\-tag example:X\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 
@@ -2433,7 +2441,7 @@
 \f3\-tag see\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 
@@ -2523,7 +2531,7 @@
 \f3\-sourcepath /java/pubs/ws/1\&.7\&.0/src/share/classes\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 Create a file named packages that contains:
@@ -2538,7 +2546,7 @@
 \f3com\&.mypackage3\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 Run the \f3javadoc\fR command as follows:
@@ -2547,7 +2555,7 @@
 \f3javadoc @options @packages\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 \f3Example 3 Argument Files with Paths\fR
@@ -2558,7 +2566,7 @@
 \f3javadoc @path1/options @path2/packages\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 \f3Example 4 Option Arguments\fR
@@ -2581,7 +2589,7 @@
 \f3    Other names may be trademarks of their respective owners\&.</font>\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 Run the \f3javadoc\fR command as follows:\f3javadoc -bottom @bottom @packages\fR\&.
@@ -2616,7 +2624,7 @@
 \f3javadoc \-d /home/html \-sourcepath /home/src \-subpackages java \-exclude\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 \f3Example 2 Change to Root and Run Explicit Packages\fR
@@ -2630,7 +2638,7 @@
 \f3javadoc \-d /home/html java\&.awt java\&.awt\&.event\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 To also traverse down other package trees, append their names to the \f3-subpackages\fR argument, such as j\f3ava:javax:org\&.xml\&.sax\fR\&.
@@ -2643,7 +2651,7 @@
 \f3javadoc \-d /home/html \-sourcepath /home/src java\&.awt java\&.awt\&.event\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 \f3Example 4 Run from Any Directory on Explicit Packages in Multiple Trees\fR
@@ -2654,7 +2662,7 @@
 \f3javadoc \-d /home/html \-sourcepath /home/src1:/home/src2 java\&.awt java\&.awt\&.event\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 The result is that all cases generate HTML-formatted documentation for the \f3public\fR and \f3protected\fR classes and interfaces in packages j\f3ava\&.awt\fR and \f3java\&.awt\&.even\fRt and save the HTML files in the specified destination directory\&. Because two or more packages are being generated, the document has three HTML frames: one for the list of packages, another for the list of classes, and the third for the main class pages\&.
@@ -2676,7 +2684,7 @@
 \f3javadoc \-d /home/html Button\&.java Canvas\&.java Graphics*\&.java\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 \f3Example 2 Change to the Root Directory of the Package\fR
@@ -2690,7 +2698,7 @@
 \f3javadoc \-d /home/html java/awt/Button\&.java java/applet/Applet\&.java\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 \f3Example 3 Document Files from Any Directory\fR
@@ -2704,7 +2712,7 @@
 \f3/home/src/java/awt/Graphics*\&.java\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 
@@ -2720,7 +2728,7 @@
 \f3/home/src/java/applet/Applet\&.java\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 .SS REAL-WORLD\ EXAMPLES    
@@ -2784,7 +2792,7 @@
 \f3@packages\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 
@@ -2802,7 +2810,7 @@
 \f3import javax\&.tools\&.ToolProvider;\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .nf     
 \f3public class JavaAccessSample{\fP
@@ -2838,7 +2846,7 @@
 \f3 }\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 The first three arguments of the \f3run\fR method specify input, standard output, and standard error streams\&. \f3Null\fR is the default value for \f3System\&.in\fR, \f3System\&.out\fR, and \f3System\&.err\fR, respectively\&.
@@ -2891,7 +2899,7 @@
 \f3        java\&.applet\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .nf     
 \f3WINDOWTITLE = \&'Java\(tm SE 7 API Specification\&'\fP
@@ -2927,7 +2935,7 @@
 \f3SRCDIR = \&'/java/jdk/1\&.7\&.0/src/share/classes\&'\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 .SS NOTES    
--- a/src/bsd/doc/man/jjs.1	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/bsd/doc/man/jjs.1	Tue Nov 04 17:20:19 2014 +0000
@@ -1,5 +1,5 @@
 '\" t
-.\"  Copyright (c) 1994, 2013, Oracle and/or its affiliates. All rights reserved.
+.\"  Copyright (c) 1994, 2015, Oracle and/or its affiliates. All rights reserved.
 .\"
 .\" DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 .\"
@@ -23,12 +23,12 @@
 .\"
 .\"     Arch: generic
 .\"     Software: JDK 8
-.\"     Date: 21 November 2013
+.\"     Date: 03 March 2015
 .\"     SectDesc: Basic Tools
 .\"     Title: jjs.1
 .\"
 .if n .pl 99999
-.TH jjs 1 "21 November 2013" "JDK 8" "Basic Tools"
+.TH jjs 1 "03 March 2015" "JDK 8" "Basic Tools"
 .\" -----------------------------------------------------------------
 .\" * Define some portability stuff
 .\" -----------------------------------------------------------------
@@ -82,7 +82,7 @@
 \f3\-css=1k\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 
@@ -91,7 +91,7 @@
 .br
 Compiles the script without running it\&.
 .TP
--cp \fIpath\fR , --classpath \fIpath\fR
+-cp \fIpath\fR , -classpath \fIpath\fR
 .br
 Specifies the path to the supporting class files To set multiple paths, the option can be repeated, or you can separate each path with a colon (:)\&.
 .TP
@@ -112,7 +112,7 @@
 \f3jjs>\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 
@@ -133,7 +133,7 @@
 .TP
 -doe, --dump-on-error
 .br
-Provides a full stack trace when an arror occurs\&. By default, only a brief error message is printed\&.
+Provides a full stack trace when an error occurs\&. By default, only a brief error message is printed\&.
 .TP
 --early-lvalue-error
 .br
@@ -180,13 +180,17 @@
 \f3jjs>\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 
 
 This option can be repeated to pass multiple \f3java\fR command options\&.
 .TP
+--language=[es5]
+.br
+Specifies the ECMAScript language version\&. The default version is ES5\&.
+.TP
 --lazy-compilation
 .br
 Enables lazy code generation strategies (that is, the entire script is not compiled at once)\&. This option is experimental\&.
@@ -202,12 +206,13 @@
 .nf     
 \f3\-\-log=fields:finest,codegen:info\fP
 .fi     
-.nf     
-\f3\fR
-.fi     
 .sp     
 
 .TP
+--optimistic-types=[true|false]
+.br
+Enables or disables optimistic type assumptions with deoptimizing recompilation\&. Running with optimistic types will yield higher final speed, but may increase warmup time\&.
+.TP
 --package=\fIname\fR
 .br
 Specifies the package to which generated class files are added\&.
@@ -302,7 +307,7 @@
 \f3jjs script\&.js\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 \f3Example 2 Running Nashorn in Interactive Mode\fR
@@ -323,7 +328,7 @@
 \f3>>\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 \f3Example 3 Passing Arguments to Nashorn\fR
@@ -341,7 +346,7 @@
 \f3jjs>\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 .SH SEE\ ALSO    
--- a/src/bsd/doc/man/jstat.1	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/bsd/doc/man/jstat.1	Tue Nov 04 17:20:19 2014 +0000
@@ -1,5 +1,5 @@
 '\" t
-.\"  Copyright (c) 2004, 2013, Oracle and/or its affiliates. All rights reserved.
+.\"  Copyright (c) 2004, 2015, Oracle and/or its affiliates. All rights reserved.
 .\"
 .\" DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 .\"
@@ -23,12 +23,12 @@
 .\"
 .\"     Arch: generic
 .\"     Software: JDK 8
-.\"     Date: 10 May 2011
+.\"     Date: 03 March 2015
 .\"     SectDesc: Monitoring Tools
 .\"     Title: jstat.1
 .\"
 .if n .pl 99999
-.TH jstat 1 "10 May 2011" "JDK 8" "Monitoring Tools"
+.TH jstat 1 "03 March 2015" "JDK 8" "Monitoring Tools"
 .\" -----------------------------------------------------------------
 .\" * Define some portability stuff
 .\" -----------------------------------------------------------------
@@ -101,7 +101,7 @@
 The communications protocol\&. If the \fIprotocol\fR value is omitted and a host name is not specified, then the default protocol is a platform-specific optimized local protocol\&. If the \fIprotocol\fR value is omitted and a host name is specified, then the default protocol is \f3rmi\fR\&.
 .TP     
 \fIlvmid\fR
-The local virtual machine identifier for the target JVM\&. The \f3lvmid\fR is a platform-specific value that uniquely identifies a JVM on a system\&. The \f3lvmid\fR is the only required component of a virtual machine identifier\&. The \f3lvmid\fR is typically, but not necessarily, the operating system\&'s process identifier for the target JVM process\&. You can use the \f3jps\fR command to determine the \f3lvmid\fR\&. Also, you can determine the \f3lvmid\fR on UNIX platforms with the \f3ps\fR command, and on Windows with the Windows Task Manager\&.
+The local virtual machine identifier for the target JVM\&. The \f3lvmid\fR is a platform-specific value that uniquely identifies a JVM on a system\&. The \f3lvmid\fR is the only required component of a virtual machine identifier\&. The \f3lvmid\fR is typically, but not necessarily, the operating system\&'s process identifier for the target JVM process\&. You can use the \f3jps\fR command to determine the \f3lvmid\fR\&. Also, you can determine the \f3lvmid\fR on Solaris, Linux, and OS X platforms with the \f3ps\fR command, and on Windows with the Windows Task Manager\&.
 .TP     
 \fIhostname\fR
 A hostname or IP address that indicates the target host\&. If the \fIhostname\fR value is omitted, then the target host is the local host\&.
@@ -154,7 +154,7 @@
 
 \f3gcnewcapacity\fR: Displays statistics about the sizes of the new generations and its corresponding spaces\&.
 
-\f3gcold\fR: Displays statistics about the behavior of the old generation and Metaspace Statistics\&.
+\f3gcold\fR: Displays statistics about the behavior of the old generation and metaspace statistics\&.
 
 \f3gcoldcapacity\fR: Displays statistics about the sizes of the old generation\&.
 
@@ -170,7 +170,7 @@
 .TP
 -t
 .br
-Display sa timestamp column as the first column of output\&. The time stamp is the time since the start time of the target JVM\&.
+Displays a timestamp column as the first column of output\&. The time stamp is the time since the start time of the target JVM\&.
 .TP
 -J\fIjavaOption\fR
 .br
@@ -184,7 +184,7 @@
 
 \f3Loaded\fR: Number of classes loaded\&.
 
-\f3Bytes\fR: Number of KBs loaded\&.
+\f3Bytes\fR: Number of kBs loaded\&.
 
 \f3Unloaded\fR: Number of classes unloaded\&.
 
@@ -212,25 +212,29 @@
 .br
 Garbage-collected heap statistics\&.
 
-\f3S0C\fR: Current survivor space 0 capacity (KB)\&.
+\f3S0C\fR: Current survivor space 0 capacity (kB)\&.
 
-\f3S1C\fR: Current survivor space 1 capacity (KB)\&.
+\f3S1C\fR: Current survivor space 1 capacity (kB)\&.
+
+\f3S0U\fR: Survivor space 0 utilization (kB)\&.
 
-\f3S0U\fR: Survivor space 0 utilization (KB)\&.
+\f3S1U\fR: Survivor space 1 utilization (kB)\&.
 
-\f3S1U\fR: Survivor space 1 utilization (KB)\&.
+\f3EC\fR: Current eden space capacity (kB)\&.
 
-\f3EC\fR: Current eden space capacity (KB)\&.
+\f3EU\fR: Eden space utilization (kB)\&.
 
-\f3EU\fR: Eden space utilization (KB)\&.
+\f3OC\fR: Current old space capacity (kB)\&.
 
-\f3OC\fR: Current old space capacity (KB)\&.
+\f3OU\fR: Old space utilization (kB)\&.
+
+\f3MC\fR: Metaspace capacity (kB)\&.
 
-\f3OU\fR: Old space utilization (KB)\&.
+\f3MU\fR: Metacspace utilization (kB)\&.
 
-\f3MC\fR: Metaspace capacity (KB)\&.
+\f3CCSC\fR: Compressed class space capacity (kB)\&.
 
-\f3MU\fR: Metacspace utilization (KB)\&.
+\f3CCSU\fR: Compressed class space used (kB)\&.
 
 \f3YGC\fR: Number of young generation garbage collection events\&.
 
@@ -246,67 +250,71 @@
 .br
 Memory pool generation and space capacities\&.
 
-\f3NGCMN\fR: Minimum new generation capacity (KB)\&.
+\f3NGCMN\fR: Minimum new generation capacity (kB)\&.
+
+\f3NGCMX\fR: Maximum new generation capacity (kB)\&.
 
-\f3NGCMX\fR: Maximum new generation capacity (KB)\&.
+\f3NGC\fR: Current new generation capacity (kB)\&.
 
-\f3NGC\fR: Current new generation capacity (KB)\&.
+\f3S0C\fR: Current survivor space 0 capacity (kB)\&.
 
-\f3S0C\fR: Current survivor space 0 capacity (KB)\&.
+\f3S1C\fR: Current survivor space 1 capacity (kB)\&.
 
-\f3S1C\fR: Current survivor space 1 capacity (KB)\&.
+\f3EC\fR: Current eden space capacity (kB)\&.
 
-\f3EC\fR: Current eden space capacity (KB)\&.
+\f3OGCMN\fR: Minimum old generation capacity (kB)\&.
 
-\f3OGCMN\fR: Minimum old generation capacity (KB)\&.
+\f3OGCMX\fR: Maximum old generation capacity (kB)\&.
+
+\f3OGC\fR: Current old generation capacity (kB)\&.
 
-\f3OGCMX\fR: Maximum old generation capacity (KB)\&.
+\f3OC\fR: Current old space capacity (kB)\&.
 
-\f3OGC\fR: Current old generation capacity (KB)\&.
+\f3MCMN\fR: Minimum metaspace capacity (kB)\&.
 
-\f3OC\fR: Current old space capacity (KB)\&.
+\f3MCMX\fR: Maximum metaspace capacity (kB)\&.
 
-\f3MCMN\fR: Minimum metaspace capacity (KB)\&.
+\f3MC\fR: Metaspace capacity (kB)\&.
 
-\f3MCMX\fR: Maximum metaspace capacity (KB)\&.
+\f3CCSMN\fR: Compressed class space minimum capacity (kB)\&.
 
-\f3MC\fR: Metaspace capacity (KB)\&.
+\f3CCSMX\fR: Compressed class space maximum capacity (kB)\&.
 
-\f3YGC\fR: Number of Young generation GC Events\&.
+\f3CCSC\fR: Compressed class space capacity (kB)\&.
 
-\f3FGC\fR: Number of Full GC Events\&.
+\f3YGC\fR: Number of young generation GC events\&.
+
+\f3FGC\fR: Number of full GC events\&.
 .TP
 -gccause \fIoption\fR
 .br
 This option displays the same summary of garbage collection statistics as the \f3-gcutil\fR option, but includes the causes of the last garbage collection event and (when applicable) the current garbage collection event\&. In addition to the columns listed for \f3-gcutil\fR, this option adds the following columns\&.
 
-Garbage collection statistics, including garbage collection Events\&.
+\f3LGCC\fR: Cause of last garbage collection
 
-\f3LGCC\fR: Cause of last garbage collection\&.
-
-\f3GCC\fR: Cause of current garbage collection\&.
+\f3GCC\fR: Cause of current garbage collection
 .TP
 -gcnew \fIoption\fR
 .br
 New generation statistics\&.
 
-\f3S0C\fR: Current survivor space 0 capacity (KB)\&.
+\f3S0C\fR: Current survivor space 0 capacity (kB)\&.
 
-\f3S1C\fR: Current survivor space 1 capacity (KB)\&.
+\f3S1C\fR: Current survivor space 1 capacity (kB)\&.
 
-\f3S0U\fR: Survivor space 0 utilization (KB)\&.
+\f3S0U\fR: Survivor space 0 utilization (kB)\&.
 
-\f3S1U\fR: Survivor space 1 utilization (KB)\&.
+\f3S1U\fR: Survivor space 1 utilization (kB)\&.
 
 \f3TT\fR: Tenuring threshold\&.
 
 \f3MTT\fR: Maximum tenuring threshold\&.
 
-\f3DSS\fR: Desired survivor size (KB)\&.
+\f3DSS\fR: Desired survivor size (kB)\&.
 
-\f3EC\fR: Current eden space capacity (KB)\&.
+\f3EC\fR: Current eden space capacity (kB)\&.
 
-\f3EU\fR: Eden space utilization (KB)\&.
+\f3EU\fR: Eden space utilization (kB)\&.
 
 \f3YGC\fR: Number of young generation GC events\&.
 
@@ -316,39 +324,43 @@
 .br
 New generation space size statistics\&.
 
-NGCMN: Minimum new generation capacity (KB)\&.
+\f3NGCMN\fR: Minimum new generation capacity (kB)\&.
 
-\f3NGCMX\fR: Maximum new generation capacity (KB)\&.
+\f3NGCMX\fR: Maximum new generation capacity (kB)\&.
 
-\f3NGC\fR: Current new generation capacity (KB)\&.
+\f3NGC\fR: Current new generation capacity (kB)\&.
 
-\f3S0CMX\fR: Maximum survivor space 0 capacity (KB)\&.
+\f3S0CMX\fR: Maximum survivor space 0 capacity (kB)\&.
 
-\f3S0C\fR: Current survivor space 0 capacity (KB)\&.
+\f3S0C\fR: Current survivor space 0 capacity (kB)\&.
 
-\f3S1CMX\fR: Maximum survivor space 1 capacity (KB)\&.
+\f3S1CMX\fR: Maximum survivor space 1 capacity (kB)\&.
 
-\f3S1C\fR: Current survivor space 1 capacity (KB)\&.
+\f3S1C\fR: Current survivor space 1 capacity (kB)\&.
 
-\f3ECMX\fR: Maximum eden space capacity (KB)\&.
+\f3ECMX\fR: Maximum eden space capacity (kB)\&.
 
-\f3EC\fR: Current eden space capacity (KB)\&.
+\f3EC\fR: Current eden space capacity (kB)\&.
 
 \f3YGC\fR: Number of young generation GC events\&.
 
-\f3FGC\fR: Number of Full GC Events\&.
+\f3FGC\fR: Number of full GC events\&.
 .TP
 -gcold \fIoption\fR
 .br
-old and permanent generation statistics\&.
+Old and permanent generation statistics\&.
 
-\f3MC\fR: Metaspace capacity (KB)\&.
+\f3MC\fR: Metaspace capacity (kB)\&.
+
+\f3MU\fR: Metaspace utilization (kB)\&.
 
-\f3MU\fR: Metaspace utilization (KB)\&.
+\f3CCSC\fR: Compressed class space capacity (kB)\&.
+
+\f3CCSU\fR: Compressed class space used (kB)\&.
 
-\f3OC\fR: Current old space capacity (KB)\&.
+\f3OC\fR: Current old space capacity (kB)\&.
 
-\f3OU\fR: old space utilization (KB)\&.
+\f3OU\fR: Old space utilization (kB)\&.
 
 \f3YGC\fR: Number of young generation GC events\&.
 
@@ -362,13 +374,13 @@
 .br
 Old generation statistics\&.
 
-\f3OGCMN\fR: Minimum old generation capacity (KB)\&.
+\f3OGCMN\fR: Minimum old generation capacity (kB)\&.
 
-\f3OGCMX\fR: Maximum old generation capacity (KB)\&.
+\f3OGCMX\fR: Maximum old generation capacity (kB)\&.
 
-\f3OGC\fR: Current old generation capacity (KB)\&.
+\f3OGC\fR: Current old generation capacity (kB)\&.
 
-\f3OC\fR: Current old space capacity (KB)\&.
+\f3OC\fR: Current old space capacity (kB)\&.
 
 \f3YGC\fR: Number of young generation GC events\&.
 
@@ -382,11 +394,15 @@
 .br
 Permanent generation statistics\&.
 
-\f3MCMN\fR: Minimum metaspace capacity (KB)\&.
+\f3MCMN\fR: Minimum metaspace capacity (kB)\&.
+
+\f3MCMX\fR: Maximum metaspace capacity (kB)\&.
 
-\f3MCMX\fR: Maximum metaspace capacity (KB)\&.
+\f3MC\fR: Metaspace capacity (kB)\&.
 
-\f3MC\fR: Metaspace capacity (KB)\&.
+\f3CCSMN\fR: Compressed class space minimum capacity (kB)\&.
+
+\f3CCSMX\fR: Compressed class space maximum capacity (kB)\&.
 
 \f3YGC\fR: Number of young generation GC events\&.
 
@@ -410,6 +426,8 @@
 
 \f3M\fR: Metaspace utilization as a percentage of the space\&'s current capacity\&.
 
+\f3CCS\fR: Compressed class space utilization as a percentage\&.
+
 \f3YGC\fR: Number of young generation GC events\&.
 
 \f3YGCT\fR: Young generation garbage collection time\&.
@@ -430,47 +448,44 @@
 
 \f3Type\fR: Compilation type of the most recently compiled method\&.
 
-\f3Method\fR: Class name and method name identifying the most recently compiled method\&. Class name uses slash (/) instead of dot (\&.) as a name space separator\&. Method name is the method within the specified class\&. The format for these two fields is consistent with the HotSpot \f3-XX:+PrintComplation\fR option\&.
+\f3Method\fR: Class name and method name identifying the most recently compiled method\&. Class name uses slash (/) instead of dot (\&.) as a name space separator\&. Method name is the method within the specified class\&. The format for these two fields is consistent with the HotSpot \f3-XX:+PrintCompilation\fR option\&.
 .SH EXAMPLES    
 This section presents some examples of monitoring a local JVM with an \fIlvmid\fR of 21891\&.
 .SS THE\ GCUTIL\ OPTION    
 This example attaches to lvmid 21891 and takes 7 samples at 250 millisecond intervals and displays the output as specified by the -\f3gcutil\fR option\&.
 .PP
-The output of this example shows that a young generation collection occurred between the third and fourth sample\&. The collection took 0\&.001 seconds and promoted objects from the eden space (E) to the old space (O), resulting in an increase of old space utilization from 9\&.49% to 9\&.51%\&. Before the collection, the survivor space was 12\&.44% utilized, but after this collection it is only 7\&.74% utilized\&.
+The output of this example shows that a young generation collection occurred between the third and fourth sample\&. The collection took 0\&.078 seconds and promoted objects from the eden space (E) to the old space (O), resulting in an increase of old space utilization from 66\&.80% to 68\&.19%\&. Before the collection, the survivor space was 97\&.02% utilized, but after this collection it is 91\&.03% utilized\&.
 .sp     
 .nf     
 \f3jstat \-gcutil 21891 250 7\fP
 .fi     
 .nf     
-\f3  S0     S1     E      O      M       YGC    YGCT    FGC    FGCT     GCT\fP
+\f3  S0     S1     E      O      M     CCS    YGC     YGCT    FGC    FGCT     GCT   \fP
 .fi     
 .nf     
-\f30\&.00  99\&.74  13\&.49   7\&.86  95\&.82      3    0\&.124     0    0\&.000    0\&.124\fP
+\f3  0\&.00  97\&.02  70\&.31  66\&.80  95\&.52  89\&.14      7    0\&.300     0    0\&.000    0\&.300\fP
 .fi     
 .nf     
-\f30\&.00  99\&.74  13\&.49   7\&.86  95\&.82      3    0\&.124     0    0\&.000    0\&.124\fP
-.fi     
-.nf     
-\f30\&.00  99\&.74  13\&.49   7\&.86  95\&.82      3    0\&.124     0    0\&.000    0\&.124\fP
+\f3  0\&.00  97\&.02  86\&.23  66\&.80  95\&.52  89\&.14      7    0\&.300     0    0\&.000    0\&.300\fP
 .fi     
 .nf     
-\f30\&.00  99\&.74  13\&.49   7\&.86  95\&.82      3    0\&.124     0    0\&.000    0\&.124\fP
+\f3  0\&.00  97\&.02  96\&.53  66\&.80  95\&.52  89\&.14      7    0\&.300     0    0\&.000    0\&.300\fP
 .fi     
 .nf     
-\f30\&.00  99\&.74  13\&.80   7\&.86  95\&.82      3    0\&.124     0    0\&.000    0\&.124\fP
+\f3 91\&.03   0\&.00   1\&.98  68\&.19  95\&.89  91\&.24      8    0\&.378     0    0\&.000    0\&.378\fP
 .fi     
 .nf     
-\f30\&.00  99\&.74  13\&.80   7\&.86  95\&.82      3    0\&.124     0    0\&.000    0\&.124\fP
+\f3 91\&.03   0\&.00  15\&.82  68\&.19  95\&.89  91\&.24      8    0\&.378     0    0\&.000    0\&.378\fP
 .fi     
 .nf     
-\f30\&.00  99\&.74  13\&.80   7\&.86  95\&.82      3    0\&.124     0    0\&.000    0\&.124\fP
+\f3 91\&.03   0\&.00  17\&.80  68\&.19  95\&.89  91\&.24      8    0\&.378     0    0\&.000    0\&.378\fP
 .fi     
 .nf     
-\f3\fP
+\f3 91\&.03   0\&.00  17\&.80  68\&.19  95\&.89  91\&.24      8    0\&.378     0    0\&.000    0\&.378\fP
 .fi     
 .sp     
 .SS REPEAT\ THE\ COLUMN\ HEADER\ STRING    
-This example attaches to lvmid 21891 and takes samples at 250 millisecond intervals and displays the output as specified by \f3-gcutil\fR option\&. In addition, it uses the \f3-h3\fR option to output the column header after every 3 lines of data\&.
+This example attaches to lvmid 21891 and takes samples at 250 millisecond intervals and displays the output as specified by \f3-gcnew\fR option\&. In addition, it uses the \f3-h3\fR option to output the column header after every 3 lines of data\&.
 .PP
 In addition to showing the repeating header string, this example shows that between the second and third samples, a young GC occurred\&. Its duration was 0\&.001 seconds\&. The collection found enough active data that the survivor space 0 utilization (S0U) would have exceeded the desired survivor Size (DSS)\&. As a result, objects were promoted to the old generation (not visible in this output), and the tenuring threshold (TT) was lowered from 31 to 2\&.
 .PP
@@ -516,7 +531,7 @@
 .SS INCLUDE\ A\ TIME\ STAMP\ FOR\ EACH\ SAMPLE    
 This example attaches to lvmid 21891 and takes 3 samples at 250 millisecond intervals\&. The \f3-t\fR option is used to generate a time stamp for each sample in the first column\&.
 .PP
-The Timestamp column reports the elapsed time in seconds since the start of the target JVM\&. In addition, the \f3-gcoldcapacity\fR output shows the old generation capacity (OGC) and the old space capacity (OC) increasing as the heap expands to meet allocation or promotion demands\&. The old generation capacity (OGC) has grown to from 11,696 KB to 13820 KB after the eighty-first full garbage collection (FGC)\&. The maximum capacity of the generation (and space) is 60,544 KB (OGCMX), so it still has room to expand\&.
+The Timestamp column reports the elapsed time in seconds since the start of the target JVM\&. In addition, the \f3-gcoldcapacity\fR output shows the old generation capacity (OGC) and the old space capacity (OC) increasing as the heap expands to meet allocation or promotion demands\&. The old generation capacity (OGC) has grown from 11,696 kB to 13,820 kB after the eighty-first full garbage collection (FGC)\&. The maximum capacity of the generation (and space) is 60,544 kB (OGCMX), so it still has room to expand\&.
 .sp     
 .nf     
 \f3Timestamp      OGCMN    OGCMX     OGC       OC       YGC   FGC    FGCT    GCT\fP
@@ -537,7 +552,7 @@
 .SS MONITOR\ INSTRUMENTATION\ FOR\ A\ REMOTE\ JVM    
 This example attaches to lvmid 40496 on the system named remote\&.domain using the \f3-gcutil\fR option, with samples taken every second indefinitely\&.
 .PP
-The lvmid is combined with the name of the remote host to construct a \fIvmid\fR of \f340496@remote\&.domain\fR\&. This vmid results in the use of the \f3rmi\fR protocol to communicate to the default \f3jstatd\fR server on the remote host\&. The \f3jstatd\fR server is located using the rmiregistry on \f3remote\&.domain\fR that is bound to the default rmiregistry port (port 1099)\&.
+The lvmid is combined with the name of the remote host to construct a \fIvmid\fR of \f340496@remote\&.domain\fR\&. This vmid results in the use of the \f3rmi\fR protocol to communicate to the default \f3jstatd\fR server on the remote host\&. The \f3jstatd\fR server is located using the \f3rmiregistry\fR command on \f3remote\&.domain\fR that is bound to the default port of the \f3rmiregistry\fR command (port 1099)\&.
 .sp     
 .nf     
 \f3jstat \-gcutil 40496@remote\&.domain 1000\fP
--- a/src/bsd/doc/man/keytool.1	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/bsd/doc/man/keytool.1	Tue Nov 04 17:20:19 2014 +0000
@@ -1,5 +1,5 @@
 '\" t
-.\"  Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved.
+.\"  Copyright (c) 1998, 2015, Oracle and/or its affiliates. All rights reserved.
 .\"
 .\" DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 .\"
@@ -23,12 +23,12 @@
 .\"
 .\"     Arch: generic
 .\"     Software: JDK 8
-.\"     Date: 6 August 2013
+.\"     Date: 03 March 2015
 .\"     SectDesc: Security Tools
 .\"     Title: keytool.1
 .\"
 .if n .pl 99999
-.TH keytool 1 "6 August 2013" "JDK 8" "Security Tools"
+.TH keytool 1 "03 March 2015" "JDK 8" "Security Tools"
 .\" -----------------------------------------------------------------
 .\" * Define some portability stuff
 .\" -----------------------------------------------------------------
@@ -185,10 +185,16 @@
 .TP 0.2i    
 \(bu
 Items in italics (option values) represent the actual values that must be supplied\&. For example, here is the format of the \f3-printcert\fR command:
+.sp     
+.nf     
+\f3keytool \-printcert {\-file \fIcert_file\fR} {\-v}\fP
+.fi     
+.sp     
 
-\f3keytool -printcert {-file cert_file} {-v}\fR
+
 
-When you specify a \f3-printcert\fR command, replace \f3cert_file\fR with the actual file name, as follows: \f3keytool -printcert -file VScert\&.cer\fR
+
+When you specify a \f3-printcert\fR command, replace \fIcert_file\fR with the actual file name, as follows: \f3keytool -printcert -file VScert\&.cer\fR
 .TP 0.2i    
 \(bu
 Option values must be put in quotation marks when they contain a blank (space)\&.
@@ -385,10 +391,39 @@
 .PP
 \fINote:\fR Users should be aware that some combinations of extensions (and other certificate fields) may not conform to the Internet standard\&. See Certificate Conformance Warning\&.
 .SH COMMANDS    
-.TP
+.TP     
 -gencert
-.br
-\f3{-rfc} {-infile infile} {-outfile outfile} {-alias alias} {-sigalg sigalg} {-dname dname} {-startdate startdate {-ext ext}* {-validity valDays} [-keypass keypass] {-keystore keystore} [-storepass storepass] {-storetype storetype} {-providername provider_name} {-providerClass provider_class_name {-providerArg provider_arg}} {-v} {-protected} {-Jjavaoption}\fR
+.sp     
+.nf     
+\f3{\-rfc} {\-infile \fIinfile\fR} {\-outfile \fIoutfile\fR} {\-alias \fIalias\fR} {\-sigalg \fIsigalg\fR}\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3{\-dname \fIdname\fR} {\-startdate \fIstartdate\fR {\-ext \fIext\fR}* {\-validity \fIvalDays\fR}\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3[\-keypass \fIkeypass\fR] {\-keystore \fIkeystore\fR} [\-storepass \fIstorepass\fR]\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3{\-storetype \fIstoretype\fR} {\-providername \fIprovider_name\fR}\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3{\-providerClass \fIprovider_class_name\fR {\-providerArg \fIprovider_arg\fR}}\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3{\-v} {\-protected} {\-Jjavaoption}\fP
+.fi     
+.sp     
+
 
 Generates a certificate as a response to a certificate request file (which can be created by the \f3keytool\fR\f3-certreq\fR command)\&. The command reads the request from \fIinfile\fR (if omitted, from the standard input), signs it using alias\&'s private key, and outputs the X\&.509 certificate into \fIoutfile\fR (if omitted, to the standard output)\&. When\f3-rfc\fR is specified, the output format is Base64-encoded PEM; otherwise, a binary DER is created\&.
 
@@ -459,10 +494,39 @@
 .fi     
 .sp     
 
-.TP
+.TP     
 -genkeypair
-.br
-\f3{-alias alias} {-keyalg keyalg} {-keysize keysize} {-sigalg sigalg} [-dname dname] [-keypass keypass] {-startdate value} {-ext ext}* {-validity valDays} {-storetype storetype} {-keystore keystore} [-storepass storepass] {-providerClass provider_class_name {-providerArg provider_arg}} {-v} {-protected} {-Jjavaoption}\fR
+.sp     
+.nf     
+\f3{\-alias \fIalias\fR} {\-keyalg \fIkeyalg\fR} {\-keysize \fIkeysize\fR} {\-sigalg \fIsigalg\fR}\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3[\-dname \fIdname\fR] [\-keypass \fIkeypass\fR] {\-startdate \fIvalue\fR} {\-ext \fIext\fR}*\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3{\-validity \fIvalDays\fR} {\-storetype \fIstoretype\fR} {\-keystore \fIkeystore\fR}\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3[\-storepass \fIstorepass\fR]\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3{\-providerClass \fIprovider_class_name\fR {\-providerArg \fIprovider_arg\fR}}\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3{\-v} {\-protected} {\-Jjavaoption}\fP
+.fi     
+.sp     
+
 
 Generates a key pair (a public key and associated private key)\&. Wraps the public key into an X\&.509 v3 self-signed certificate, which is stored as a single-element certificate chain\&. This certificate chain and the private key are stored in a new keystore entry identified by alias\&.
 
@@ -510,18 +574,61 @@
 The value of \f3valDays\fR specifies the number of days (starting at the date specified by \f3-startdate\fR, or the current date when \f3-startdate\fR is not specified) for which the certificate should be considered valid\&.
 
 This command was named \f3-genkey\fR in earlier releases\&. The old name is still supported in this release\&. The new name, \f3-genkeypair\fR, is preferred going forward\&.
-.TP
+.TP     
 -genseckey
-.br
-\f3-genseckey {-alias alias} {-keyalg keyalg} {-keysize keysize} [-keypass keypass] {-storetype storetype} {-keystore keystore} [-storepass storepass] {-providerClass provider_class_name {-providerArg provider_arg}} {-v} {-protected} {-Jjavaoption}\fR
+.sp     
+.nf     
+\f3{\-alias \fIalias\fR} {\-keyalg \fIkeyalg\fR} {\-keysize \fIkeysize\fR} [\-keypass \fIkeypass\fR]\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3{\-storetype \fIstoretype\fR} {\-keystore \fIkeystore\fR} [\-storepass \fIstorepass\fR]\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3{\-providerClass \fIprovider_class_name\fR {\-providerArg \fIprovider_arg\fR}} {\-v}\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3{\-protected} {\-Jjavaoption}\fP
+.fi     
+.sp     
+
 
 Generates a secret key and stores it in a new \f3KeyStore\&.SecretKeyEntry\fR identified by \f3alias\fR\&.
 
 The value of \f3keyalg\fR specifies the algorithm to be used to generate the secret key, and the value of \f3keysize\fR specifies the size of the key to be generated\&. The \f3keypass\fR value is a password that protects the secret key\&. If no password is provided, then the user is prompted for it\&. If you press the Return key at the prompt, then the key password is set to the same password that is used for the \f3keystore\fR\&. The \f3keypass\fR value must be at least 6 characters\&.
-.TP
+.TP     
 -importcert
-.br
-\f3-importcert {-alias alias} {-file cert_file} [-keypass keypass] {-noprompt} {-trustcacerts} {-storetype storetype} {-keystore keystore} [-storepass storepass] {-providerName provider_name} {-providerClass provider_class_name {-providerArg provider_arg}} {-v} {-protected} {-Jjavaoption}\fR
+.sp     
+.nf     
+\f3{\-alias \fIalias\fR} {\-file \fIcert_file\fR} [\-keypass \fIkeypass\fR] {\-noprompt} {\-trustcacerts}\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3{\-storetype \fIstoretype\fR} {\-keystore \fIkeystore\fR} [\-storepass \fIstorepass\fR]\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3{\-providerName \fIprovider_name\fR}\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3{\-providerClass \fIprovider_class_name\fR {\-providerArg \fIprovider_arg\fR}}\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3{\-v} {\-protected} {\-Jjavaoption}\fP
+.fi     
+.sp     
+
 
 Reads the certificate or certificate chain (where the latter is supplied in a PKCS#7 formatted reply or a sequence of X\&.509 certificates) from the file \f3cert_file\fR, and stores it in the \f3keystore\fR entry identified by \f3alias\fR\&. If no file is specified, then the certificate or certificate chain is read from \f3stdin\fR\&.
 
@@ -530,16 +637,74 @@
 You import a certificate for two reasons: To add it to the list of trusted certificates, and to import a certificate reply received from a certificate authority (CA) as the result of submitting a Certificate Signing Request to that CA (see the \f3-certreq\fR option in Commands)\&.
 
 Which type of import is intended is indicated by the value of the \f3-alias\fR option\&. If the alias does not point to a key entry, then the \f3keytool\fR command assumes you are adding a trusted certificate entry\&. In this case, the alias should not already exist in the keystore\&. If the alias does already exist, then the \f3keytool\fR command outputs an error because there is already a trusted certificate for that alias, and does not import the certificate\&. If the alias points to a key entry, then the \f3keytool\fR command assumes you are importing a certificate reply\&.
-.TP
+.TP     
 -importpassword
-.br
-\f3{-alias alias} [-keypass keypass] {-storetype storetype} {-keystore keystore} [-storepass storepass] {-providerClass provider_class_name {-providerArg provider_arg}} {-v} {-protected} {-Jjavaoption}\fR
+.sp     
+.nf     
+\f3{\-alias \fIalias\fR} [\-keypass \fIkeypass\fR] {\-storetype \fIstoretype\fR} {\-keystore \fIkeystore\fR}\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3[\-storepass \fIstorepass\fR]\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3{\-providerClass \fIprovider_class_name\fR {\-providerArg \fIprovider_arg\fR}}\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3{\-v} {\-protected} {\-Jjavaoption}\fP
+.fi     
+.sp     
+
 
 Imports a passphrase and stores it in a new \f3KeyStore\&.SecretKeyEntry\fR identified by \f3alias\fR\&. The passphrase may be supplied via the standard input stream; otherwise the user is prompted for it\&. \f3keypass\fR is a password used to protect the imported passphrase\&. If no password is provided, the user is prompted for it\&. If you press the Return key at the prompt, the key password is set to the same password as that used for the \f3keystore\fR\&. \f3keypass\fR must be at least 6 characters long\&.
-.TP
+.TP     
 -importkeystore
-.br
-\f3{-srcstoretype srcstoretype} {-deststoretype deststoretype} [-srcstorepass srcstorepass] [-deststorepass deststorepass] {-srcprotected} {-destprotected} {-srcalias srcalias {-destalias destalias} [-srckeypass srckeypass] } [-destkeypass destkeypass] {-noprompt} {-srcProviderName src_provider_name} {-destProviderName dest_provider_name} {-providerClass provider_class_name {-providerArg provider_arg}} {-v} {-protected} {-Jjavaoption}\fR
+.sp     
+.nf     
+\f3{\-srcstoretype \fIsrcstoretype\fR} {\-deststoretype \fIdeststoretype\fR}\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3[\-srcstorepass \fIsrcstorepass\fR] [\-deststorepass \fIdeststorepass\fR] {\-srcprotected}\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3{\-destprotected} \fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3{\-srcalias \fIsrcalias\fR {\-destalias \fIdestalias\fR} [\-srckeypass \fIsrckeypass\fR]} \fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3[\-destkeypass \fIdestkeypass\fR] {\-noprompt}\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3{\-srcProviderName \fIsrc_provider_name\fR} {\-destProviderName \fIdest_provider_name\fR}\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3{\-providerClass \fIprovider_class_name\fR {\-providerArg \fIprovider_arg\fR}} {\-v}\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3{\-protected} {\-Jjavaoption}\fP
+.fi     
+.sp     
+
 
 Imports a single entry or all entries from a source keystore to a destination keystore\&.
 
@@ -550,16 +715,44 @@
 If the destination alias already exists in the destination keystore, then the user is prompted to either overwrite the entry or to create a new entry under a different alias name\&.
 
 If the \f3-noprompt\fR option is provided, then the user is not prompted for a new destination alias\&. Existing entries are overwritten with the destination alias name\&. Entries that cannot be imported are skipped and a warning is displayed\&.
-.TP
+.TP     
 -printcertreq
-.br
-\f3{-file file}\fR
+.sp     
+.nf     
+\f3{\-file \fIfile\fR}\fP
+.fi     
+.sp     
+
 
 Prints the content of a PKCS #10 format certificate request, which can be generated by the \f3keytool\fR\f3-certreq\fR command\&. The command reads the request from file\&. If there is no file, then the request is read from the standard input\&.
-.TP
+.TP     
 -certreq
-.br
-\f3{-alias alias} {-dname dname} {-sigalg sigalg} {-file certreq_file} [-keypass keypass] {-storetype storetype} {-keystore keystore} [-storepass storepass] {-providerName provider_name} {-providerClass provider_class_name {-providerArg provider_arg}} {-v} {-protected} {-Jjavaoption}\fR
+.sp     
+.nf     
+\f3{\-alias \fIalias\fR} {\-dname \fIdname\fR} {\-sigalg \fIsigalg\fR} {\-file \fIcertreq_file\fR}\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3[\-keypass \fIkeypass\fR] {\-storetype \fIstoretype\fR} {\-keystore \fIkeystore\fR}\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3[\-storepass \fIstorepass\fR] {\-providerName \fIprovider_name\fR}\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3{\-providerClass \fIprovider_class_name\fR {\-providerArg \fIprovider_arg\fR}}\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3{\-v} {\-protected} {\-Jjavaoption}\fP
+.fi     
+.sp     
+
 
 Generates a Certificate Signing Request (CSR) using the PKCS #10 format\&.
 
@@ -572,10 +765,29 @@
 The CSR is stored in the file certreq_file\&. If no file is specified, then the CSR is output to \f3stdout\fR\&.
 
 Use the \f3importcert\fR command to import the response from the CA\&.
-.TP
+.TP     
 -exportcert
-.br
-\f3{-alias alias} {-file cert_file} {-storetype storetype} {-keystore keystore} [-storepass storepass] {-providerName provider_name} {-providerClass provider_class_name {-providerArg provider_arg}} {-rfc} {-v} {-protected} {-Jjavaoption}\fR
+.sp     
+.nf     
+\f3{\-alias \fIalias\fR} {\-file \fIcert_file\fR} {\-storetype \fIstoretype\fR} {\-keystore \fIkeystore\fR}\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3[\-storepass \fIstorepass\fR] {\-providerName \fIprovider_name\fR}\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3{\-providerClass \fIprovider_class_name\fR {\-providerArg \fIprovider_arg\fR}}\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3{\-rfc} {\-v} {\-protected} {\-Jjavaoption}\fP
+.fi     
+.sp     
+
 
 Reads from the keystore the certificate associated with \fIalias\fR and stores it in the cert_file file\&. When no file is specified, the certificate is output to \f3stdout\fR\&.
 
@@ -584,20 +796,48 @@
 If \f3alias\fR refers to a trusted certificate, then that certificate is output\&. Otherwise, \f3alias\fR refers to a key entry with an associated certificate chain\&. In that case, the first certificate in the chain is returned\&. This certificate authenticates the public key of the entity addressed by \f3alias\fR\&.
 
 This command was named \f3-export\fR in earlier releases\&. The old name is still supported in this release\&. The new name, \f3-exportcert\fR, is preferred going forward\&.
-.TP
+.TP     
 -list
-.br
-\f3{-alias alias} {-storetype storetype} {-keystore keystore} [-storepass storepass] {-providerName provider_name} {-providerClass provider_class_name {-providerArg provider_arg}} {-v | -rfc} {-protected} {-Jjavaoption}\fR
+.sp     
+.nf     
+\f3{\-alias \fIalias\fR} {\-storetype \fIstoretype\fR} {\-keystore \fIkeystore\fR} [\-storepass \fIstorepass\fR]\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3{\-providerName \fIprovider_name\fR}\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3{\-providerClass \fIprovider_class_name\fR {\-providerArg \fIprovider_arg\fR}}\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3{\-v | \-rfc} {\-protected} {\-Jjavaoption}\fP
+.fi     
+.sp     
+
 
 Prints to \f3stdout\fR the contents of the keystore entry identified by \f3alias\fR\&. If no \f3alias\fR is specified, then the contents of the entire keystore are printed\&.
 
 This command by default prints the SHA1 fingerprint of a certificate\&. If the \f3-v\fR option is specified, then the certificate is printed in human-readable format, with additional information such as the owner, issuer, serial number, and any extensions\&. If the \f3-rfc\fR option is specified, then the certificate contents are printed using the printable encoding format, as defined by the Internet RFC 1421 Certificate Encoding Standard\&.
 
 You cannot specify both \f3-v\fR and \f3-rfc\fR\&.
-.TP
+.TP     
 -printcert
-.br
-\f3{-file cert_file | -sslserver host[:port]} {-jarfile JAR_file {-rfc} {-v} {-Jjavaoption}\fR
+.sp     
+.nf     
+\f3{\-file \fIcert_file\fR | \-sslserver \fIhost\fR[:\fIport\fR]} {\-jarfile \fIJAR_file\fR {\-rfc} {\-v}\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3{\-Jjavaoption}\fP
+.fi     
+.sp     
+
 
 Reads the certificate from the file cert_file, the SSL server located at host:port, or the signed JAR file \f3JAR_file\fR (with the \f3-jarfile\fR option and prints its contents in a human-readable format\&. When no port is specified, the standard HTTPS port 443 is assumed\&. Note that \f3-sslserver\fR and -file options cannot be provided at the same time\&. Otherwise, an error is reported\&. If neither option is specified, then the certificate is read from \f3stdin\fR\&.
 
@@ -608,40 +848,120 @@
 If the SSL server is behind a firewall, then the \f3-J-Dhttps\&.proxyHost=proxyhost\fR and \f3-J-Dhttps\&.proxyPort=proxyport\fR options can be specified on the command line for proxy tunneling\&. See Java Secure Socket Extension (JSSE) Reference Guide at http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/security/jsse/JSSERefGuide\&.html
 
 \fINote:\fR This option can be used independently of a keystore\&.
-.TP
+.TP     
 -printcrl
-.br
-\f3-file crl_ {-v}\fR
+.sp     
+.nf     
+\f3\-file \fIcrl_\fR {\-v}\fP
+.fi     
+.sp     
+
 
 Reads the Certificate Revocation List (CRL) from the file \f3crl_\fR\&. A CRL is a list of digital certificates that were revoked by the CA that issued them\&. The CA generates the \f3crl_\fR file\&.
 
 \fINote:\fR This option can be used independently of a keystore\&.
-.TP
+.TP     
 -storepasswd
-.br
-\f3[-new new_storepass] {-storetype storetype} {-keystore keystore} [-storepass storepass] {-providerName provider_name} {-providerClass provider_class_name {-providerArg provider_arg}} {-v} {-Jjavaoption}\fR
+.sp     
+.nf     
+\f3[\-new \fInew_storepass\fR] {\-storetype \fIstoretype\fR} {\-keystore \fIkeystore\fR}\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3[\-storepass \fIstorepass\fR] {\-providerName \fIprovider_name\fR}\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3{\-providerClass \fIprovider_class_name\fR {\-providerArg \fIprovider_arg\fR}}\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3{\-v} {\-Jjavaoption}\fP
+.fi     
+.sp     
+
 
 Changes the password used to protect the integrity of the keystore contents\&. The new password is \f3new_storepass\fR, which must be at least 6 characters\&.
-.TP
+.TP     
 -keypasswd
-.br
-\f3{-alias alias} [-keypass old_keypass] [-new new_keypass] {-storetype storetype} {-keystore keystore} [-storepass storepass] {-providerName provider_name} {-providerClass provider_class_name {-providerArg provider_arg}} {-v} {-Jjavaoption}\fR
+.sp     
+.nf     
+\f3{\-alias \fIalias\fR} [\-keypass \fIold_keypass\fR] [\-new \fInew_keypass\fR] {\-storetype \fIstoretype\fR}\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3{\-keystore \fIkeystore\fR} [\-storepass \fIstorepass\fR] {\-providerName \fIprovider_name\fR}\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3{\-providerClass \fIprovider_class_name\fR {\-providerArg \fIprovider_arg\fR}} {\-v}\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3{\-Jjavaoption}\fP
+.fi     
+.sp     
+
 
 Changes the password under which the private/secret key identified by \f3alias\fR is protected, from \f3old_keypass\fR to \f3new_keypass\fR, which must be at least 6 characters\&.
 
 If the \f3-keypass\fR option is not provided at the command line, and the key password is different from the keystore password, then the user is prompted for it\&.
 
 If the \f3-new\fR option is not provided at the command line, then the user is prompted for it
-.TP
+.TP     
 -delete
-.br
-\f3[-alias alias] {-storetype storetype} {-keystore keystore} [-storepass storepass] {-providerName provider_name} {-providerClass provider_class_name {-providerArg provider_arg}} {-v} {-protected} {-Jjavaoption}\fR
+.sp     
+.nf     
+\f3[\-alias \fIalias\fR] {\-storetype \fIstoretype\fR} {\-keystore \fIkeystore\fR} [\-storepass \fIstorepass\fR]\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3{\-providerName \fIprovider_name\fR}  \fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3{\-providerClass \fIprovider_class_name\fR {\-providerArg \fIprovider_arg\fR}}\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3{\-v} {\-protected} {\-Jjavaoption}\fP
+.fi     
+.sp     
+
 
 Deletes from the keystore the entry identified by \f3alias\fR\&. The user is prompted for the alias, when no alias is provided at the command line\&.
-.TP
+.TP     
 -changealias
-.br
-\f3{-alias alias} [-destalias destalias] [-keypass keypass] {-storetype storetype} {-keystore keystore} [-storepass storepass] {-providerName provider_name} {-providerClass provider_class_name {-providerArg provider_arg}} {-v} {-protected} {-Jjavaoption}\fR
+.sp     
+.nf     
+\f3{\-alias \fIalias\fR} [\-destalias \fIdestalias\fR] [\-keypass \fIkeypass\fR] {\-storetype \fIstoretype\fR}\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3{\-keystore \fIkeystore\fR} [\-storepass \fIstorepass\fR] {\-providerName \fIprovider_name\fR}\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3{\-providerClass \fIprovider_class_name\fR {\-providerArg \fIprovider_arg\fR}} {\-v}\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3{\-protected} {\-Jjavaoption}\fP
+.fi     
+.sp     
+
 
 Move an existing keystore entry from the specified \f3alias\fR to a new alias, \f3destalias\fR\&. If no destination alias is provided, then the command prompts for one\&. If the original entry is protected with an entry password, then the password can be supplied with the \f3-keypass\fR option\&. If no key password is provided, then the \f3storepass\fR (if provided) is attempted first\&. If the attempt fails, then the user is prompted for a password\&.
 .TP
--- a/src/bsd/doc/man/policytool.1	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/bsd/doc/man/policytool.1	Tue Nov 04 17:20:19 2014 +0000
@@ -1,5 +1,5 @@
 '\" t
-.\"  Copyright (c) 2001, 2013, Oracle and/or its affiliates. All rights reserved.
+.\"  Copyright (c) 2001, 2015, Oracle and/or its affiliates. All rights reserved.
 .\"
 .\" DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 .\"
@@ -23,12 +23,12 @@
 .\"
 .\"     Arch: generic
 .\"     Software: JDK 8
-.\"     Date: 21 November 2013
+.\"     Date: 03 March 2015
 .\"     SectDesc: Security Tools
 .\"     Title: policytool.1
 .\"
 .if n .pl 99999
-.TH policytool 1 "21 November 2013" "JDK 8" "Security Tools"
+.TH policytool 1 "03 March 2015" "JDK 8" "Security Tools"
 .\" -----------------------------------------------------------------
 .\" * Define some portability stuff
 .\" -----------------------------------------------------------------
@@ -80,7 +80,7 @@
 Run the \f3policytool\fR command and load the specified file:
 .sp     
 .nf     
-\f3policytool\-file mypolicyfile\fP
+\f3policytool \-file \fImypolicyfile\fR\fP
 .fi     
 .nf     
 \f3\fP
--- a/src/linux/doc/man/java.1	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/linux/doc/man/java.1	Tue Nov 04 17:20:19 2014 +0000
@@ -1,3461 +1,2198 @@
 '\" t
-.\" Copyright (c) 1994, 2014, 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.
-.\"
-.\" Title: java
-.\" Language: English
-.\" Date: 08 August 2014
-.\" SectDesc: Basic Tools
-.\" Software: JDK 8
-.\" Arch: generic
-.\" Part Number: E38207-03
+.\"  Copyright (c) 1994, 2015, 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.
+.\"
+.\"     Arch: generic
+.\"     Software: JDK 8
+.\"     Date: 03 March 2015
+.\"     SectDesc: Basic Tools
+.\"     Title: java.1
 .\"
 .if n .pl 99999
-.TH "java" "1" "08 August 2014" "JDK 8" "Basic Tools"
-.\" -----------------------------------------------------------------
-.\" * Define some portability stuff
-.\" -----------------------------------------------------------------
-.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-.\" http://bugs.debian.org/507673
-.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
-.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-.ie \n(.g .ds Aq \(aq
-.el       .ds Aq '
-.\" -----------------------------------------------------------------
-.\" * set default formatting
-.\" -----------------------------------------------------------------
-.\" disable hyphenation
-.nh
-.\" disable justification (adjust text to left margin only)
-.ad l
-.\" -----------------------------------------------------------------
-.\" * MAIN CONTENT STARTS HERE *
-.\" -----------------------------------------------------------------
-.SH "NAME"
+.TH java 1 "03 March 2015" "JDK 8" "Basic Tools"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el       .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+
+.SH NAME    
 java \- Launches a Java application\&.
-.SH "SYNOPSIS"
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
+.SH SYNOPSIS    
+.sp     
+.nf     
+
 \fBjava\fR [\fIoptions\fR] \fIclassname\fR [\fIargs\fR]
-.fi
-.if n \{\
-.RE
-.\}
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
+.fi     
+.nf     
+
 \fBjava\fR [\fIoptions\fR] \fB\-jar\fR \fIfilename\fR [\fIargs\fR]
-.fi
-.if n \{\
-.RE
-.\}
-.PP
+.fi     
+.sp     
+.TP     
 \fIoptions\fR
-.RS 4
-Command\-line options separated by spaces\&. See Options\&.
-.RE
-.PP
+Command-line options separated by spaces\&. See Options\&.
+.TP     
 \fIclassname\fR
-.RS 4
 The name of the class to be launched\&.
-.RE
-.PP
+.TP     
 \fIfilename\fR
-.RS 4
-The name of the Java Archive (JAR) file to be called\&. Used only with the
-\fB\-jar\fR
-option\&.
-.RE
-.PP
+The name of the Java Archive (JAR) file to be called\&. Used only with the \f3-jar\fR option\&.
+.TP     
 \fIargs\fR
-.RS 4
-The arguments passed to the
-\fBmain()\fR
-method separated by spaces\&.
-.RE
-.SH "DESCRIPTION"
+The arguments passed to the \f3main()\fR method separated by spaces\&.
+.SH DESCRIPTION    
+The \f3java\fR command starts a Java application\&. It does this by starting the Java Runtime Environment (JRE), loading the specified class, and calling that class\&'s \f3main()\fR method\&. The method must be declared \fIpublic\fR and \fIstatic\fR, it must not return any value, and it must accept a \f3String\fR array as a parameter\&. The method declaration has the following form:
+.sp     
+.nf     
+\f3public static void main(String[] args)\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+The \f3java\fR command can be used to launch a JavaFX application by loading a class that either has a \f3main()\fR method or that extends \f3javafx\&.application\&.Application\fR\&. In the latter case, the launcher constructs an instance of the \f3Application\fR class, calls its \f3init()\fR method, and then calls the \f3start(javafx\&.stage\&.Stage)\fR method\&.
 .PP
-The
-\fBjava\fR
-command starts a Java application\&. It does this by starting the Java Runtime Environment (JRE), loading the specified class, and calling that class\*(Aqs
-\fBmain()\fR
-method\&. The method must be declared
-\fIpublic\fR
-and
-\fIstatic\fR, it must not return any value, and it must accept a
-\fBString\fR
-array as a parameter\&. The method declaration has the following form:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBpublic static void main(String[] args)\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.PP
-The
-\fBjava\fR
-command can be used to launch a JavaFX application by loading a class that either has a
-\fBmain()\fR
-method or that extends
-\fBjavafx\&.application\&.Application\fR\&. In the latter case, the launcher constructs an instance of the
-\fBApplication\fR
-class, calls its
-\fBinit()\fR
-method, and then calls the
-\fBstart(javafx\&.stage\&.Stage)\fR
-method\&.
-.PP
-By default, the first argument that is not an option of the
-\fBjava\fR
-command is the fully qualified name of the class to be called\&. If the
-\fB\-jar\fR
-option is specified, its argument is the name of the JAR file containing class and resource files for the application\&. The startup class must be indicated by the
-\fBMain\-Class\fR
-manifest header in its source code\&.
+By default, the first argument that is not an option of the \f3java\fR command is the fully qualified name of the class to be called\&. If the \f3-jar\fR option is specified, its argument is the name of the JAR file containing class and resource files for the application\&. The startup class must be indicated by the \f3Main-Class\fR manifest header in its source code\&.
 .PP
 The JRE searches for the startup class (and other classes used by the application) in three sets of locations: the bootstrap class path, the installed extensions, and the user\(cqs class path\&.
 .PP
-Arguments after the class file name or the JAR file name are passed to the
-\fBmain()\fR
-method\&.
-.SH "OPTIONS"
-.PP
-The
-\fBjava\fR
-command supports a wide range of options that can be divided into the following categories:
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
+Arguments after the class file name or the JAR file name are passed to the \f3main()\fR method\&.
+.SH OPTIONS    
+The \f3java\fR command supports a wide range of options that can be divided into the following categories:
+.TP 0.2i    
+\(bu
 Standard Options
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-Non\-Standard Options
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
+.TP 0.2i    
+\(bu
+Non-Standard Options
+.TP 0.2i    
+\(bu
 Advanced Runtime Options
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
+.TP 0.2i    
+\(bu
 Advanced JIT Compiler Options
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
+.TP 0.2i    
+\(bu
 Advanced Serviceability Options
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
+.TP 0.2i    
+\(bu
 Advanced Garbage Collection Options
-.RE
 .PP
 Standard options are guaranteed to be supported by all implementations of the Java Virtual Machine (JVM)\&. They are used for common actions, such as checking the version of the JRE, setting the class path, enabling verbose output, and so on\&.
 .PP
-Non\-standard options are general purpose options that are specific to the Java HotSpot Virtual Machine, so they are not guaranteed to be supported by all JVM implementations, and are subject to change\&. These options start with
-\fB\-X\fR\&.
+Non-standard options are general purpose options that are specific to the Java HotSpot Virtual Machine, so they are not guaranteed to be supported by all JVM implementations, and are subject to change\&. These options start with \f3-X\fR\&.
 .PP
-Advanced options are not recommended for casual use\&. These are developer options used for tuning specific areas of the Java HotSpot Virtual Machine operation that often have specific system requirements and may require privileged access to system configuration parameters\&. They are also not guaranteed to be supported by all JVM implementations, and are subject to change\&. Advanced options start with
-\fB\-XX\fR\&.
+Advanced options are not recommended for casual use\&. These are developer options used for tuning specific areas of the Java HotSpot Virtual Machine operation that often have specific system requirements and may require privileged access to system configuration parameters\&. They are also not guaranteed to be supported by all JVM implementations, and are subject to change\&. Advanced options start with \f3-XX\fR\&.
 .PP
 To keep track of the options that were deprecated or removed in the latest release, there is a section named Deprecated and Removed Options at the end of the document\&.
 .PP
-Boolean options are used to either enable a feature that is disabled by default or disable a feature that is enabled by default\&. Such options do not require a parameter\&. Boolean
-\fB\-XX\fR
-options are enabled using the plus sign (\fB\-XX:+\fR\fIOptionName\fR) and disabled using the minus sign (\fB\-XX:\-\fR\fIOptionName\fR)\&.
-.PP
-For options that require an argument, the argument may be separated from the option name by a space, a colon (:), or an equal sign (=), or the argument may directly follow the option (the exact syntax differs for each option)\&. If you are expected to specify the size in bytes, you can use no suffix, or use the suffix
-\fBk\fR
-or
-\fBK\fR
-for kilobytes (KB),
-\fBm\fR
-or
-\fBM\fR
-for megabytes (MB),
-\fBg\fR
-or
-\fBG\fR
-for gigabytes (GB)\&. For example, to set the size to 8 GB, you can specify either
-\fB8g\fR,
-\fB8192m\fR,
-\fB8388608k\fR, or
-\fB8589934592\fR
-as the argument\&. If you are expected to specify the percentage, use a number from 0 to 1 (for example, specify
-\fB0\&.25\fR
-for 25%)\&.
-.SS "Standard Options"
-.PP
-These are the most commonly used options that are supported by all implementations of the JVM\&.
-.PP
-\-agentlib:\fIlibname\fR[=\fIoptions\fR]
-.RS 4
-Loads the specified native agent library\&. After the library name, a comma\-separated list of options specific to the library can be used\&.
-.sp
-If the option
-\fB\-agentlib:foo\fR
-is specified, then the JVM attempts to load the library named
-\fBlibfoo\&.so\fR
-in the location specified by the
-\fBLD_LIBRARY_PATH\fR
-system variable (on OS X this variable is
-\fBDYLD_LIBRARY_PATH\fR)\&.
-.sp
-The following example shows how to load the heap profiling tool (HPROF) library and get sample CPU information every 20 ms, with a stack depth of 3:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-agentlib:hprof=cpu=samples,interval=20,depth=3\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-The following example shows how to load the Java Debug Wire Protocol (JDWP) library and listen for the socket connection on port 8000, suspending the JVM before the main class loads:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-agentlib:jdwp=transport=dt_socket,server=y,address=8000\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-For more information about the native agent libraries, refer to the following:
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-The
-\fBjava\&.lang\&.instrument\fR
-package description at http://docs\&.oracle\&.com/javase/8/docs/api/java/lang/instrument/package\-summary\&.html
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-Agent Command Line Options in the JVM Tools Interface guide at http://docs\&.oracle\&.com/javase/8/docs/platform/jvmti/jvmti\&.html#starting
-.RE
-.RE
-.PP
-\-agentpath:\fIpathname\fR[=\fIoptions\fR]
-.RS 4
-Loads the native agent library specified by the absolute path name\&. This option is equivalent to
-\fB\-agentlib\fR
-but uses the full path and file name of the library\&.
-.RE
-.PP
-\-client
-.RS 4
-Selects the Java HotSpot Client VM\&. The 64\-bit version of the Java SE Development Kit (JDK) currently ignores this option and instead uses the Server JVM\&.
-.sp
-For default JVM selection, see Server\-Class Machine Detection at
-
-http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/vm/server\-class\&.html
-.RE
-.PP
-\-D\fIproperty\fR=\fIvalue\fR
-.RS 4
-Sets a system property value\&. The
-\fIproperty\fR
-variable is a string with no spaces that represents the name of the property\&. The
-\fIvalue\fR
-variable is a string that represents the value of the property\&. If
-\fIvalue\fR
-is a string with spaces, then enclose it in quotation marks (for example
-\fB\-Dfoo="foo bar"\fR)\&.
-.RE
-.PP
-\-d32
-.RS 4
-Runs the application in a 32\-bit environment\&. If a 32\-bit environment is not installed or is not supported, then an error will be reported\&. By default, the application is run in a 32\-bit environment unless a 64\-bit system is used\&.
-.RE
-.PP
-\-d64
-.RS 4
-Runs the application in a 64\-bit environment\&. If a 64\-bit environment is not installed or is not supported, then an error will be reported\&. By default, the application is run in a 32\-bit environment unless a 64\-bit system is used\&.
-.sp
-Currently only the Java HotSpot Server VM supports 64\-bit operation, and the
-\fB\-server\fR
-option is implicit with the use of
-\fB\-d64\fR\&. The
-\fB\-client\fR
-option is ignored with the use of
-\fB\-d64\fR\&. This is subject to change in a future release\&.
-.RE
-.PP
-\-disableassertions[:[\fIpackagename\fR]\&.\&.\&.|:\fIclassname\fR]
-.br
-\-da[:[\fIpackagename\fR]\&.\&.\&.|:\fIclassname\fR]
-.RS 4
-Disables assertions\&. By default, assertions are disabled in all packages and classes\&.
-.sp
-With no arguments,
-\fB\-disableassertions\fR
-(\fB\-da\fR) disables assertions in all packages and classes\&. With the
-\fIpackagename\fR
-argument ending in
-\fB\&.\&.\&.\fR, the switch disables assertions in the specified package and any subpackages\&. If the argument is simply
-\fB\&.\&.\&.\fR, then the switch disables assertions in the unnamed package in the current working directory\&. With the
-\fIclassname\fR
-argument, the switch disables assertions in the specified class\&.
-.sp
-The
-\fB\-disableassertions\fR
-(\fB\-da\fR) option applies to all class loaders and to system classes (which do not have a class loader)\&. There is one exception to this rule: if the option is provided with no arguments, then it does not apply to system classes\&. This makes it easy to disable assertions in all classes except for system classes\&. The
-\fB\-disablesystemassertions\fR
-option enables you to disable assertions in all system classes\&.
-.sp
-To explicitly enable assertions in specific packages or classes, use the
-\fB\-enableassertions\fR
-(\fB\-ea\fR) option\&. Both options can be used at the same time\&. For example, to run the
-\fBMyClass\fR
-application with assertions enabled in package
-\fBcom\&.wombat\&.fruitbat\fR
-(and any subpackages) but disabled in class
-\fBcom\&.wombat\&.fruitbat\&.Brickbat\fR, use the following command:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBjava \-ea:com\&.wombat\&.fruitbat\&.\&.\&. \-da:com\&.wombat\&.fruitbat\&.Brickbat MyClass\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
-\-disablesystemassertions
-.br
-\-dsa
-.RS 4
-Disables assertions in all system classes\&.
-.RE
-.PP
-\-enableassertions[:[\fIpackagename\fR]\&.\&.\&.|:\fIclassname\fR]
-.br
-\-ea[:[\fIpackagename\fR]\&.\&.\&.|:\fIclassname\fR]
-.RS 4
-Enables assertions\&. By default, assertions are disabled in all packages and classes\&.
-.sp
-With no arguments,
-\fB\-enableassertions\fR
-(\fB\-ea\fR) enables assertions in all packages and classes\&. With the
-\fIpackagename\fR
-argument ending in
-\fB\&.\&.\&.\fR, the switch enables assertions in the specified package and any subpackages\&. If the argument is simply
-\fB\&.\&.\&.\fR, then the switch enables assertions in the unnamed package in the current working directory\&. With the
-\fIclassname\fR
-argument, the switch enables assertions in the specified class\&.
-.sp
-The
-\fB\-enableassertions\fR
-(\fB\-ea\fR) option applies to all class loaders and to system classes (which do not have a class loader)\&. There is one exception to this rule: if the option is provided with no arguments, then it does not apply to system classes\&. This makes it easy to enable assertions in all classes except for system classes\&. The
-\fB\-enablesystemassertions\fR
-option provides a separate switch to enable assertions in all system classes\&.
-.sp
-To explicitly disable assertions in specific packages or classes, use the
-\fB\-disableassertions\fR
-(\fB\-da\fR) option\&. If a single command contains multiple instances of these switches, then they are processed in order before loading any classes\&. For example, to run the
-\fBMyClass\fR
-application with assertions enabled only in package
-\fBcom\&.wombat\&.fruitbat\fR
-(and any subpackages) but disabled in class
-\fBcom\&.wombat\&.fruitbat\&.Brickbat\fR, use the following command:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBjava \-ea:com\&.wombat\&.fruitbat\&.\&.\&. \-da:com\&.wombat\&.fruitbat\&.Brickbat MyClass\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
-\-enablesystemassertions
-.br
-\-esa
-.RS 4
-Enables assertions in all system classes\&.
-.RE
-.PP
-\-help
-.br
-\-?
-.RS 4
-Displays usage information for the
-\fBjava\fR
-command without actually running the JVM\&.
-.RE
-.PP
-\-jar \fIfilename\fR
-.RS 4
-Executes a program encapsulated in a JAR file\&. The
-\fIfilename\fR
-argument is the name of a JAR file with a manifest that contains a line in the form
-\fBMain\-Class:\fR\fIclassname\fR
-that defines the class with the
-\fBpublic static void main(String[] args)\fR
-method that serves as your application\*(Aqs starting point\&.
-.sp
-When you use the
-\fB\-jar\fR
-option, the specified JAR file is the source of all user classes, and other class path settings are ignored\&.
-.sp
-For more information about JAR files, see the following resources:
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-jar(1)
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-The Java Archive (JAR) Files guide at http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/jar/index\&.html
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-Lesson: Packaging Programs in JAR Files at
-
-http://docs\&.oracle\&.com/javase/tutorial/deployment/jar/index\&.html
-.RE
-.RE
-.PP
-\-javaagent:\fIjarpath\fR[=\fIoptions\fR]
-.RS 4
-Loads the specified Java programming language agent\&. For more information about instrumenting Java applications, see the
-\fBjava\&.lang\&.instrument\fR
-package description in the Java API documentation at http://docs\&.oracle\&.com/javase/8/docs/api/java/lang/instrument/package\-summary\&.html
-.RE
-.PP
-\-jre\-restrict\-search
-.RS 4
-Includes user\-private JREs in the version search\&.
-.RE
-.PP
-\-no\-jre\-restrict\-search
-.RS 4
-Excludes user\-private JREs from the version search\&.
-.RE
-.PP
-\-server
-.RS 4
-Selects the Java HotSpot Server VM\&. The 64\-bit version of the JDK supports only the Server VM, so in that case the option is implicit\&.
-.sp
-For default JVM selection, see Server\-Class Machine Detection at
-
-http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/vm/server\-class\&.html
-.RE
-.PP
-\-showversion
-.RS 4
-Displays version information and continues execution of the application\&. This option is equivalent to the
-\fB\-version\fR
-option except that the latter instructs the JVM to exit after displaying version information\&.
-.RE
-.PP
-\-splash:\fIimgname\fR
-.RS 4
-Shows the splash screen with the image specified by
-\fIimgname\fR\&. For example, to show the
-\fBsplash\&.gif\fR
-file from the
-\fBimages\fR
-directory when starting your application, use the following option:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-splash:images/splash\&.gif\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
-\-verbose:class
-.RS 4
-Displays information about each loaded class\&.
-.RE
-.PP
-\-verbose:gc
-.RS 4
-Displays information about each garbage collection (GC) event\&.
-.RE
-.PP
-\-verbose:jni
-.RS 4
-Displays information about the use of native methods and other Java Native Interface (JNI) activity\&.
-.RE
-.PP
-\-version
-.RS 4
-Displays version information and then exits\&. This option is equivalent to the
-\fB\-showversion\fR
-option except that the latter does not instruct the JVM to exit after displaying version information\&.
-.RE
-.PP
-\-version:\fIrelease\fR
-.RS 4
-Specifies the release version to be used for running the application\&. If the version of the
-\fBjava\fR
-command called does not meet this specification and an appropriate implementation is found on the system, then the appropriate implementation will be used\&.
-.sp
-The
-\fIrelease\fR
-argument specifies either the exact version string, or a list of version strings and ranges separated by spaces\&. A
-\fIversion string\fR
-is the developer designation of the version number in the following form:
-\fB1\&.\fR\fIx\fR\fB\&.0_\fR\fIu\fR
-(where
-\fIx\fR
-is the major version number, and
-\fIu\fR
-is the update version number)\&. A
-\fIversion range\fR
-is made up of a version string followed by a plus sign (\fB+\fR) to designate this version or later, or a part of a version string followed by an asterisk (\fB*\fR) to designate any version string with a matching prefix\&. Version strings and ranges can be combined using a space for a logical
-\fIOR\fR
-combination, or an ampersand (\fB&\fR) for a logical
-\fIAND\fR
-combination of two version strings/ranges\&. For example, if running the class or JAR file requires either JRE 6u13 (1\&.6\&.0_13), or any JRE 6 starting from 6u10 (1\&.6\&.0_10), specify the following:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-version:"1\&.6\&.0_13 1\&.6* & 1\&.6\&.0_10+"\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-Quotation marks are necessary only if there are spaces in the
-\fIrelease\fR
-parameter\&.
-.sp
-For JAR files, the preference is to specify version requirements in the JAR file manifest rather than on the command line\&.
-.RE
-.SS "Non\-Standard Options"
-.PP
-These options are general purpose options that are specific to the Java HotSpot Virtual Machine\&.
-.PP
-\-X
-.RS 4
-Displays help for all available
-\fB\-X\fR
-options\&.
-.RE
-.PP
-\-Xbatch
-.RS 4
-Disables background compilation\&. By default, the JVM compiles the method as a background task, running the method in interpreter mode until the background compilation is finished\&. The
-\fB\-Xbatch\fR
-flag disables background compilation so that compilation of all methods proceeds as a foreground task until completed\&.
-.sp
-This option is equivalent to
-\fB\-XX:\-BackgroundCompilation\fR\&.
-.RE
-.PP
-\-Xbootclasspath:\fIpath\fR
-.RS 4
-Specifies a list of directories, JAR files, and ZIP archives separated by colons (:) to search for boot class files\&. These are used in place of the boot class files included in the JDK\&.
-.sp
-Do not deploy applications that use this option to override a class in
-\fBrt\&.jar\fR, because this violates the JRE binary code license\&.
-.RE
-.PP
-\-Xbootclasspath/a:\fIpath\fR
-.RS 4
-Specifies a list of directories, JAR files, and ZIP archives separated by colons (:) to append to the end of the default bootstrap class path\&.
-.sp
-Do not deploy applications that use this option to override a class in
-\fBrt\&.jar\fR, because this violates the JRE binary code license\&.
-.RE
-.PP
-\-Xbootclasspath/p:\fIpath\fR
-.RS 4
-Specifies a list of directories, JAR files, and ZIP archives separated by colons (:) to prepend to the front of the default bootstrap class path\&.
-.sp
-Do not deploy applications that use this option to override a class in
-\fBrt\&.jar\fR, because this violates the JRE binary code license\&.
-.RE
-.PP
-\-Xcheck:jni
-.RS 4
-Performs additional checks for Java Native Interface (JNI) functions\&. Specifically, it validates the parameters passed to the JNI function and the runtime environment data before processing the JNI request\&. Any invalid data encountered indicates a problem in the native code, and the JVM will terminate with an irrecoverable error in such cases\&. Expect a performance degradation when this option is used\&.
-.RE
-.PP
-\-Xcomp
-.RS 4
-Forces compilation of methods on first invocation\&. By default, the Client VM (\fB\-client\fR) performs 1,000 interpreted method invocations and the Server VM (\fB\-server\fR) performs 10,000 interpreted method invocations to gather information for efficient compilation\&. Specifying the
-\fB\-Xcomp\fR
-option disables interpreted method invocations to increase compilation performance at the expense of efficiency\&.
-.sp
-You can also change the number of interpreted method invocations before compilation using the
-\fB\-XX:CompileThreshold\fR
-option\&.
-.RE
-.PP
-\-Xdebug
-.RS 4
-Does nothing\&. Provided for backward compatibility\&.
-.RE
-.PP
-\-Xdiag
-.RS 4
-Shows additional diagnostic messages\&.
-.RE
-.PP
-\-Xfuture
-.RS 4
-Enables strict class\-file format checks that enforce close conformance to the class\-file format specification\&. Developers are encouraged to use this flag when developing new code because the stricter checks will become the default in future releases\&.
-.RE
-.PP
-\-Xint
-.RS 4
-Runs the application in interpreted\-only mode\&. Compilation to native code is disabled, and all bytecode is executed by the interpreter\&. The performance benefits offered by the just in time (JIT) compiler are not present in this mode\&.
-.RE
-.PP
-\-Xinternalversion
-.RS 4
-Displays more detailed JVM version information than the
-\fB\-version\fR
-option, and then exits\&.
-.RE
-.PP
-\-Xloggc:\fIfilename\fR
-.RS 4
-Sets the file to which verbose GC events information should be redirected for logging\&. The information written to this file is similar to the output of
-\fB\-verbose:gc\fR
-with the time elapsed since the first GC event preceding each logged event\&. The
-\fB\-Xloggc\fR
-option overrides
-\fB\-verbose:gc\fR
-if both are given with the same
-\fBjava\fR
-command\&.
-.sp
-Example:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-Xloggc:garbage\-collection\&.log\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
-\-Xmaxjitcodesize=\fIsize\fR
-.RS 4
-Specifies the maximum code cache size (in bytes) for JIT\-compiled code\&. Append the letter
-\fBk\fR
-or
-\fBK\fR
-to indicate kilobytes,
-\fBm\fR
-or
-\fBM\fR
-to indicate megabytes,
-\fBg\fR
-or
-\fBG\fR
-to indicate gigabytes\&. By default, the value is set to 48 MB:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-Xmaxjitcodesize=48m\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-This option is equivalent to
-\fB\-XX:ReservedCodeCacheSize\fR\&.
-.RE
-.PP
-\-Xmixed
-.RS 4
-Executes all bytecode by the interpreter except for hot methods, which are compiled to native code\&.
-.RE
-.PP
-\-Xmn\fIsize\fR
-.RS 4
-Sets the initial and maximum size (in bytes) of the heap for the young generation (nursery)\&. Append the letter
-\fBk\fR
-or
-\fBK\fR
-to indicate kilobytes,
-\fBm\fR
-or
-\fBM\fR
-to indicate megabytes,
-\fBg\fR
-or
-\fBG\fR
-to indicate gigabytes\&.
-.sp
-The young generation region of the heap is used for new objects\&. GC is performed in this region more often than in other regions\&. If the size for the young generation is too small, then a lot of minor garbage collections will be performed\&. If the size is too large, then only full garbage collections will be performed, which can take a long time to complete\&. Oracle recommends that you keep the size for the young generation between a half and a quarter of the overall heap size\&.
-.sp
-The following examples show how to set the initial and maximum size of young generation to 256 MB using various units:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-Xmn256m\fR
-\fB\-Xmn262144k\fR
-\fB\-Xmn268435456\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-Instead of the
-\fB\-Xmn\fR
-option to set both the initial and maximum size of the heap for the young generation, you can use
-\fB\-XX:NewSize\fR
-to set the initial size and
-\fB\-XX:MaxNewSize\fR
-to set the maximum size\&.
-.RE
-.PP
-\-Xms\fIsize\fR
-.RS 4
-Sets the initial size (in bytes) of the heap\&. This value must be a multiple of 1024 and greater than 1 MB\&. Append the letter
-\fBk\fR
-or
-\fBK\fR
-to indicate kilobytes,
-\fBm\fR
-or
-\fBM\fR
-to indicate megabytes,
-\fBg\fR
-or
-\fBG\fR
-to indicate gigabytes\&.
-.sp
-The following examples show how to set the size of allocated memory to 6 MB using various units:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-Xms6291456\fR
-\fB\-Xms6144k\fR
-\fB\-Xms6m\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-If you do not set this option, then the initial size will be set as the sum of the sizes allocated for the old generation and the young generation\&. The initial size of the heap for the young generation can be set using the
-\fB\-Xmn\fR
-option or the
-\fB\-XX:NewSize\fR
-option\&.
-.RE
-.PP
-\-Xmx\fIsize\fR
-.RS 4
-Specifies the maximum size (in bytes) of the memory allocation pool in bytes\&. This value must be a multiple of 1024 and greater than 2 MB\&. Append the letter
-\fBk\fR
-or
-\fBK\fR
-to indicate kilobytes,
-\fBm\fR
-or
-\fBM\fR
-to indicate megabytes,
-\fBg\fR
-or
-\fBG\fR
-to indicate gigabytes\&. The default value is chosen at runtime based on system configuration\&. For server deployments,
-\fB\-Xms\fR
-and
-\fB\-Xmx\fR
-are often set to the same value\&. For more information, see Garbage Collector Ergonomics at http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/vm/gc\-ergonomics\&.html
-.sp
-The following examples show how to set the maximum allowed size of allocated memory to 80 MB using various units:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-Xmx83886080\fR
-\fB\-Xmx81920k\fR
-\fB\-Xmx80m\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-The
-\fB\-Xmx\fR
-option is equivalent to
-\fB\-XX:MaxHeapSize\fR\&.
-.RE
-.PP
-\-Xnoclassgc
-.RS 4
-Disables garbage collection (GC) of classes\&. This can save some GC time, which shortens interruptions during the application run\&.
-.sp
-When you specify
-\fB\-Xnoclassgc\fR
-at startup, the class objects in the application will be left untouched during GC and will always be considered live\&. This can result in more memory being permanently occupied which, if not used carefully, will throw an out of memory exception\&.
-.RE
-.PP
-\-Xprof
-.RS 4
-Profiles the running program and sends profiling data to standard output\&. This option is provided as a utility that is useful in program development and is not intended to be used in production systems\&.
-.RE
-.PP
-\-Xrs
-.RS 4
-Reduces the use of operating system signals by the JVM\&.
-.sp
-Shutdown hooks enable orderly shutdown of a Java application by running user cleanup code (such as closing database connections) at shutdown, even if the JVM terminates abruptly\&.
-.sp
-The JVM catches signals to implement shutdown hooks for unexpected termination\&. The JVM uses
-\fBSIGHUP\fR,
-\fBSIGINT\fR, and
-\fBSIGTERM\fR
-to initiate the running of shutdown hooks\&.
-.sp
-The JVM uses a similar mechanism to implement the feature of dumping thread stacks for debugging purposes\&. The JVM uses
-\fBSIGQUIT\fR
-to perform thread dumps\&.
-.sp
-Applications embedding the JVM frequently need to trap signals such as
-\fBSIGINT\fR
-or
-\fBSIGTERM\fR, which can lead to interference with the JVM signal handlers\&. The
-\fB\-Xrs\fR
-option is available to address this issue\&. When
-\fB\-Xrs\fR
-is used, the signal masks for
-\fBSIGINT\fR,
-\fBSIGTERM\fR,
-\fBSIGHUP\fR, and
-\fBSIGQUIT\fR
-are not changed by the JVM, and signal handlers for these signals are not installed\&.
-.sp
-There are two consequences of specifying
-\fB\-Xrs\fR:
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-\fBSIGQUIT\fR
-thread dumps are not available\&.
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-User code is responsible for causing shutdown hooks to run, for example, by calling
-\fBSystem\&.exit()\fR
-when the JVM is to be terminated\&.
-.RE
-.RE
-.PP
-\-Xshare:\fImode\fR
-.RS 4
-Sets the class data sharing mode\&. Possible
-\fImode\fR
-arguments for this option include the following:
-.PP
-auto
-.RS 4
-Use shared class data if possible\&. This is the default value for Java HotSpot 32\-Bit Client VM\&.
-.RE
-.PP
-on
-.RS 4
-Require the use of class data sharing\&. Print an error message and exit if class data sharing cannot be used\&.
-.RE
-.PP
-off
-.RS 4
-Do not use shared class data\&. This is the default value for Java HotSpot 32\-Bit Server VM, Java HotSpot 64\-Bit Client VM, and Java HotSpot 64\-Bit Server VM\&.
-.RE
+Boolean options are used to either enable a feature that is disabled by default or disable a feature that is enabled by default\&. Such options do not require a parameter\&. Boolean \f3-XX\fR options are enabled using the plus sign (\f3-XX:+\fR\fIOptionName\fR) and disabled using the minus sign (\f3-XX:-\fR\fIOptionName\fR)\&.
 .PP
-dump
-.RS 4
-Manually generate the class data sharing archive\&.
-.RE
-.RE
-.PP
-\-XshowSettings:\fIcategory\fR
-.RS 4
-Shows settings and continues\&. Possible
-\fIcategory\fR
-arguments for this option include the following:
-.PP
-all
-.RS 4
-Shows all categories of settings\&. This is the default value\&.
-.RE
-.PP
-locale
-.RS 4
-Shows settings related to locale\&.
-.RE
-.PP
-properties
-.RS 4
-Shows settings related to system properties\&.
-.RE
-.PP
-vm
-.RS 4
-Shows the settings of the JVM\&.
-.RE
-.RE
-.PP
-\-Xss\fIsize\fR
-.RS 4
-Sets the thread stack size (in bytes)\&. Append the letter
-\fBk\fR
-or
-\fBK\fR
-to indicate KB,
-\fBm\fR
-or
-\fBM\fR
-to indicate MB,
-\fBg\fR
-or
-\fBG\fR
-to indicate GB\&. The default value depends on the platform:
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-Linux/ARM (32\-bit): 320 KB
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-Linux/i386 (32\-bit): 320 KB
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-Linux/x64 (64\-bit): 1024 KB
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-OS X (64\-bit): 1024 KB
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-Oracle Solaris/i386 (32\-bit): 320 KB
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-Oracle Solaris/x64 (64\-bit): 1024 KB
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-Windows: depends on virtual memory
-.RE
-.sp
-The following examples set the thread stack size to 1024 KB in different units:
-.sp
-.if n \{\
-.RS 4
-.\}
+For options that require an argument, the argument may be separated from the option name by a space, a colon (:), or an equal sign (=), or the argument may directly follow the option (the exact syntax differs for each option)\&. If you are expected to specify the size in bytes, you can use no suffix, or use the suffix \f3k\fR or \f3K\fR for kilobytes (KB), \f3m\fR or \f3M\fR for megabytes (MB), \f3g\fR or \f3G\fR for gigabytes (GB)\&. For example, to set the size to 8 GB, you can specify either \f38g\fR, \f38192m\fR, \f38388608k\fR, or \f38589934592\fR as the argument\&. If you are expected to specify the percentage, use a number from 0 to 1 (for example, specify \f30\&.25\fR for 25%)\&.
+.SS STANDARD\ OPTIONS    
+These are the most commonly used options that are supported by all implementations of the JVM\&.
+.TP
+-agentlib:\fIlibname\fR[=\fIoptions\fR]
+.br
+Loads the specified native agent library\&. After the library name, a comma-separated list of options specific to the library can be used\&.
+
+If the option \f3-agentlib:foo\fR is specified, then the JVM attempts to load the library named \f3libfoo\&.so\fR in the location specified by the \f3LD_LIBRARY_PATH\fR system variable (on OS X this variable is \f3DYLD_LIBRARY_PATH\fR)\&.
+
+The following example shows how to load the heap profiling tool (HPROF) library and get sample CPU information every 20 ms, with a stack depth of 3:
+.sp     
+.nf     
+\f3\-agentlib:hprof=cpu=samples,interval=20,depth=3\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+The following example shows how to load the Java Debug Wire Protocol (JDWP) library and listen for the socket connection on port 8000, suspending the JVM before the main class loads:
+.sp     
+.nf     
+\f3\-agentlib:jdwp=transport=dt_socket,server=y,address=8000\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+For more information about the native agent libraries, refer to the following:
+.RS     
+.TP 0.2i    
+\(bu
+The \f3java\&.lang\&.instrument\fR package description at http://docs\&.oracle\&.com/javase/8/docs/api/java/lang/instrument/package-summary\&.html
+.TP 0.2i    
+\(bu
+Agent Command Line Options in the JVM Tools Interface guide at http://docs\&.oracle\&.com/javase/8/docs/platform/jvmti/jvmti\&.html#starting
+.RE     
+
+.TP
+-agentpath:\fIpathname\fR[=\fIoptions\fR]
+.br
+Loads the native agent library specified by the absolute path name\&. This option is equivalent to \f3-agentlib\fR but uses the full path and file name of the library\&.
+.TP
+-client
+.br
+Selects the Java HotSpot Client VM\&. The 64-bit version of the Java SE Development Kit (JDK) currently ignores this option and instead uses the Server JVM\&.
+
+For default JVM selection, see Server-Class Machine Detection at http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/vm/server-class\&.html
+.TP
+-D\fIproperty\fR=\fIvalue\fR
+.br
+Sets a system property value\&. The \fIproperty\fR variable is a string with no spaces that represents the name of the property\&. The \fIvalue\fR variable is a string that represents the value of the property\&. If \fIvalue\fR is a string with spaces, then enclose it in quotation marks (for example \f3-Dfoo="foo bar"\fR)\&.
+.TP
+-d32
+.br
+Runs the application in a 32-bit environment\&. If a 32-bit environment is not installed or is not supported, then an error will be reported\&. By default, the application is run in a 32-bit environment unless a 64-bit system is used\&.
+.TP
+-d64
+.br
+Runs the application in a 64-bit environment\&. If a 64-bit environment is not installed or is not supported, then an error will be reported\&. By default, the application is run in a 32-bit environment unless a 64-bit system is used\&.
+
+Currently only the Java HotSpot Server VM supports 64-bit operation, and the \f3-server\fR option is implicit with the use of \f3-d64\fR\&. The \f3-client\fR option is ignored with the use of \f3-d64\fR\&. This is subject to change in a future release\&.
+.TP
 .nf
-\fB\-Xss1m\fR
-\fB\-Xss1024k\fR
-\fB\-Xss1048576\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-This option is equivalent to
-\fB\-XX:ThreadStackSize\fR\&.
-.RE
-.PP
-\-Xusealtsigs
-.RS 4
-Use alternative signals instead of
-\fBSIGUSR1\fR
-and
-\fBSIGUSR2\fR
-for JVM internal signals\&. This option is equivalent to
-\fB\-XX:+UseAltSigs\fR\&.
-.RE
-.PP
-\-Xverify:\fImode\fR
-.RS 4
-Sets the mode of the bytecode verifier\&. Bytecode verification helps to troubleshoot some problems, but it also adds overhead to the running application\&. Possible
-\fImode\fR
-arguments for this option include the following:
-.PP
-none
-.RS 4
-Do not verify the bytecode\&. This reduces startup time and also reduces the protection provided by Java\&.
-.RE
-.PP
-remote
-.RS 4
-Verify only those classes that are loaded remotely over the network\&. This is the default behavior if you do not specify the
-\fB\-Xverify\fR
-option\&.
-.RE
-.PP
-all
-.RS 4
-Verify all classes\&.
-.RE
-.RE
-.SS "Advanced Runtime Options"
-.PP
-These options control the runtime behavior of the Java HotSpot VM\&.
-.PP
-\-XX:+DisableAttachMechanism
-.RS 4
-Enables the option that disables the mechanism that lets tools attach to the JVM\&. By default, this option is disabled, meaning that the attach mechanism is enabled and you can use tools such as
-\fBjcmd\fR,
-\fBjstack\fR,
-\fBjmap\fR, and
-\fBjinfo\fR\&.
-.RE
-.PP
-\-XX:ErrorFile=\fIfilename\fR
-.RS 4
-Specifies the path and file name to which error data is written when an irrecoverable error occurs\&. By default, this file is created in the current working directory and named
-\fBhs_err_pid\fR\fIpid\fR\fB\&.log\fR
-where
-\fIpid\fR
-is the identifier of the process that caused the error\&. The following example shows how to set the default log file (note that the identifier of the process is specified as
-\fB%p\fR):
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:ErrorFile=\&./hs_err_pid%p\&.log\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-The following example shows how to set the error log to
-\fB/var/log/java/java_error\&.log\fR:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:ErrorFile=/var/log/java/java_error\&.log\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-If the file cannot be created in the specified directory (due to insufficient space, permission problem, or another issue), then the file is created in the temporary directory for the operating system\&. The temporary directory is
-\fB/tmp\fR\&.
-.RE
-.PP
-\-XX:+FailOverToOldVerifier
-.RS 4
-Enables automatic failover to the old verifier when the new type checker fails\&. By default, this option is disabled and it is ignored (that is, treated as disabled) for classes with a recent bytecode version\&. You can enable it for classes with older versions of the bytecode\&.
-.RE
-.PP
-\-XX:LargePageSizeInBytes=\fIsize\fR
-.RS 4
-Sets the maximum size (in bytes) for large pages used for Java heap\&. The
-\fIsize\fR
-argument must be a power of 2 (2, 4, 8, 16, \&.\&.\&.)\&. Append the letter
-\fBk\fR
-or
-\fBK\fR
-to indicate kilobytes,
-\fBm\fR
-or
-\fBM\fR
-to indicate megabytes,
-\fBg\fR
-or
-\fBG\fR
-to indicate gigabytes\&. By default, the size is set to 0, meaning that the JVM chooses the size for large pages automatically\&.
-.sp
-The following example illustrates how to set the large page size to 4 megabytes (MB):
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:LargePageSizeInBytes=4m\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
-\-XX:MaxDirectMemorySize=\fIsize\fR
-.RS 4
-Sets the maximum total size (in bytes) of the New I/O (the
-\fBjava\&.nio\fR
-package) direct\-buffer allocations\&. Append the letter
-\fBk\fR
-or
-\fBK\fR
-to indicate kilobytes,
-\fBm\fR
-or
-\fBM\fR
-to indicate megabytes,
-\fBg\fR
-or
-\fBG\fR
-to indicate gigabytes\&. By default, the size is set to 0, meaning that the JVM chooses the size for NIO direct\-buffer allocations automatically\&.
-.sp
-The following examples illustrate how to set the NIO size to 1024 KB in different units:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:MaxDirectMemorySize=1m\fR
-\fB\-XX:MaxDirectMemorySize=1024k\fR
-\fB\-XX:MaxDirectMemorySize=1048576\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
-\-XX:NativeMemoryTracking=\fImode\fR
-.RS 4
-Specifies the mode for tracking JVM native memory usage\&. Possible
-\fImode\fR
-arguments for this option include the following:
-.PP
-off
-.RS 4
-Do not track JVM native memory usage\&. This is the default behavior if you do not specify the
-\fB\-XX:NativeMemoryTracking\fR
-option\&.
-.RE
-.PP
-summary
-.RS 4
-Only track memory usage by JVM subsystems, such as Java heap, class, code, and thread\&.
-.RE
-.PP
-detail
-.RS 4
-In addition to tracking memory usage by JVM subsystems, track memory usage by individual
-\fBCallSite\fR, individual virtual memory region and its committed regions\&.
-.RE
-.RE
-.PP
-\-XX:OnError=\fIstring\fR
-.RS 4
-Sets a custom command or a series of semicolon\-separated commands to run when an irrecoverable error occurs\&. If the string contains spaces, then it must be enclosed in quotation marks\&.
-.sp
-The following example shows how the
-\fB\-XX:OnError\fR
-option can be used to run the
-\fBgcore\fR
-command to create the core image, and the debugger is started to attach to the process in case of an irrecoverable error (the
-\fB%p\fR
-designates the current process):
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:OnError="gcore %p;dbx \- %p"\fR
- 
+-disableassertions[:[\fIpackagename\fR]\&.\&.\&.|:\fIclassname\fR], -da[:[\fIpackagename\fR]\&.\&.\&.|:\fIclassname\fR]
+.br
 .fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
-\-XX:OnOutOfMemoryError=\fIstring\fR
-.RS 4
-Sets a custom command or a series of semicolon\-separated commands to run when an
-\fBOutOfMemoryError\fR
-exception is first thrown\&. If the string contains spaces, then it must be enclosed in quotation marks\&. For an example of a command string, see the description of the
-\fB\-XX:OnError\fR
-option\&.
-.RE
-.PP
-\-XX:+PrintCommandLineFlags
-.RS 4
-Enables printing of ergonomically selected JVM flags that appeared on the command line\&. It can be useful to know the ergonomic values set by the JVM, such as the heap space size and the selected garbage collector\&. By default, this option is disabled and flags are not printed\&.
-.RE
-.PP
-\-XX:+PrintNMTStatistics
-.RS 4
-Enables printing of collected native memory tracking data at JVM exit when native memory tracking is enabled (see
-\fB\-XX:NativeMemoryTracking\fR)\&. By default, this option is disabled and native memory tracking data is not printed\&.
-.RE
-.PP
-\-XX:+RelaxAccessControlCheck
-.RS 4
-Decreases the amount of access control checks in the verifier\&. By default, this option is disabled, and it is ignored (that is, treated as disabled) for classes with a recent bytecode version\&. You can enable it for classes with older versions of the bytecode\&.
-.RE
-.PP
-\-XX:+ShowMessageBoxOnError
-.RS 4
-Enables displaying of a dialog box when the JVM experiences an irrecoverable error\&. This prevents the JVM from exiting and keeps the process active so that you can attach a debugger to it to investigate the cause of the error\&. By default, this option is disabled\&.
-.RE
-.PP
-\-XX:ThreadStackSize=\fIsize\fR
-.RS 4
-Sets the thread stack size (in bytes)\&. Append the letter
-\fBk\fR
-or
-\fBK\fR
-to indicate kilobytes,
-\fBm\fR
-or
-\fBM\fR
-to indicate megabytes,
-\fBg\fR
-or
-\fBG\fR
-to indicate gigabytes\&. The default value depends on the platform:
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-Linux/ARM (32\-bit): 320 KB
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-Linux/i386 (32\-bit): 320 KB
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-Linux/x64 (64\-bit): 1024 KB
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-OS X (64\-bit): 1024 KB
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-Oracle Solaris/i386 (32\-bit): 320 KB
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-Oracle Solaris/x64 (64\-bit): 1024 KB
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-Windows: depends on virtual memory
-.RE
-.sp
-The following examples show how to set the thread stack size to 1024 KB in different units:
-.sp
-.if n \{\
-.RS 4
-.\}
+Disables assertions\&. By default, assertions are disabled in all packages and classes\&.
+
+With no arguments, \f3-disableassertions\fR (\f3-da\fR) disables assertions in all packages and classes\&. With the \fIpackagename\fR argument ending in \f3\&.\&.\&.\fR, the switch disables assertions in the specified package and any subpackages\&. If the argument is simply \f3\&.\&.\&.\fR, then the switch disables assertions in the unnamed package in the current working directory\&. With the \fIclassname\fR argument\f3\fR, the switch disables assertions in the specified class\&.
+
+The \f3-disableassertions\fR (\f3-da\fR) option applies to all class loaders and to system classes (which do not have a class loader)\&. There is one exception to this rule: if the option is provided with no arguments, then it does not apply to system classes\&. This makes it easy to disable assertions in all classes except for system classes\&. The \f3-disablesystemassertions\fR option enables you to disable assertions in all system classes\&.
+
+To explicitly enable assertions in specific packages or classes, use the \f3-enableassertions\fR (\f3-ea\fR) option\&. Both options can be used at the same time\&. For example, to run the \f3MyClass\fR application with assertions enabled in package \f3com\&.wombat\&.fruitbat\fR (and any subpackages) but disabled in class \f3com\&.wombat\&.fruitbat\&.Brickbat\fR, use the following command:
+.sp     
+.nf     
+\f3java \-ea:com\&.wombat\&.fruitbat\&.\&.\&. \-da:com\&.wombat\&.fruitbat\&.Brickbat MyClass\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP
+-disablesystemassertions, -dsa
+.br
+Disables assertions in all system classes\&.
+.TP
 .nf
-\fB\-XX:ThreadStackSize=1m\fR
-\fB\-XX:ThreadStackSize=1024k\fR
-\fB\-XX:ThreadStackSize=1048576\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-This option is equivalent to
-\fB\-Xss\fR\&.
-.RE
-.PP
-\-XX:+TraceClassLoading
-.RS 4
-Enables tracing of classes as they are loaded\&. By default, this option is disabled and classes are not traced\&.
-.RE
-.PP
-\-XX:+TraceClassLoadingPreorder
-.RS 4
-Enables tracing of all loaded classes in the order in which they are referenced\&. By default, this option is disabled and classes are not traced\&.
-.RE
-.PP
-\-XX:+TraceClassResolution
-.RS 4
-Enables tracing of constant pool resolutions\&. By default, this option is disabled and constant pool resolutions are not traced\&.
-.RE
-.PP
-\-XX:+TraceClassUnloading
-.RS 4
-Enables tracing of classes as they are unloaded\&. By default, this option is disabled and classes are not traced\&.
-.RE
-.PP
-\-XX:+TraceLoaderConstraints
-.RS 4
-Enables tracing of the loader constraints recording\&. By default, this option is disabled and loader constraints recording is not traced\&.
-.RE
-.PP
-\-XX:+UseAltSigs
-.RS 4
-Enables the use of alternative signals instead of
-\fBSIGUSR1\fR
-and
-\fBSIGUSR2\fR
-for JVM internal signals\&. By default, this option is disabled and alternative signals are not used\&. This option is equivalent to
-\fB\-Xusealtsigs\fR\&.
-.RE
-.PP
-\-XX:\-UseBiasedLocking
-.RS 4
-Disables the use of biased locking\&. Some applications with significant amounts of uncontended synchronization may attain significant speedups with this flag enabled, whereas applications with certain patterns of locking may see slowdowns\&. For more information about the biased locking technique, see the example in Java Tuning White Paper at http://www\&.oracle\&.com/technetwork/java/tuning\-139912\&.html#section4\&.2\&.5
-.sp
-By default, this option is enabled\&.
-.RE
-.PP
-\-XX:\-UseCompressedOops
-.RS 4
-Disables the use of compressed pointers\&. By default, this option is enabled, and compressed pointers are used when Java heap sizes are less than 32 GB\&. When this option is enabled, object references are represented as 32\-bit offsets instead of 64\-bit pointers, which typically increases performance when running the application with Java heap sizes less than 32 GB\&. This option works only for 64\-bit JVMs\&.
-.RE
-.PP
-\-XX:\-UseLargePages
-.RS 4
-Disables the use of large page memory\&. This option is enabled by default\&.
-.sp
-For more information, see Java Support for Large Memory Pages at http://www\&.oracle\&.com/technetwork/java/javase/tech/largememory\-jsp\-137182\&.html
-.RE
-.PP
-\-XX:+UseMembar
-.RS 4
-Enables issuing of membars on thread state transitions\&. This option is disabled by default on all platforms except ARM servers, where it is enabled\&. (It is recommended that you do not disable this option on ARM servers\&.)
-.RE
-.PP
-\-XX:+UsePerfData
-.RS 4
-Enables the
-\fBperfdata\fR
-feature\&. This option is enabled by default to allow JVM monitoring and performance testing\&. Disabling it suppresses the creation of the
-\fBhsperfdata_userid\fR
-directories\&. To disable the
-\fBperfdata\fR
-feature, specify
-\fB\-XX:\-UsePerfData\fR\&.
-.RE
-.PP
-\-XX:+AllowUserSignalHandlers
-.RS 4
-Enables installation of signal handlers by the application\&. By default, this option is disabled and the application is not allowed to install signal handlers\&.
-.RE
-.SS "Advanced JIT Compiler Options"
-.PP
-These options control the dynamic just\-in\-time (JIT) compilation performed by the Java HotSpot VM\&.
-.PP
-\-XX:+AggressiveOpts
-.RS 4
-Enables the use of aggressive performance optimization features, which are expected to become default in upcoming releases\&. By default, this option is disabled and experimental performance features are not used\&.
-.RE
-.PP
-\-XX:AllocateInstancePrefetchLines=\fIlines\fR
-.RS 4
-Sets the number of lines to prefetch ahead of the instance allocation pointer\&. By default, the number of lines to prefetch is set to 1:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:AllocateInstancePrefetchLines=1\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-Only the Java HotSpot Server VM supports this option\&.
-.RE
-.PP
-\-XX:AllocatePrefetchDistance=\fIsize\fR
-.RS 4
-Sets the size (in bytes) of the prefetch distance for object allocation\&. Memory about to be written with the value of new objects is prefetched up to this distance starting from the address of the last allocated object\&. Each Java thread has its own allocation point\&.
-.sp
-Negative values denote that prefetch distance is chosen based on the platform\&. Positive values are bytes to prefetch\&. Append the letter
-\fBk\fR
-or
-\fBK\fR
-to indicate kilobytes,
-\fBm\fR
-or
-\fBM\fR
-to indicate megabytes,
-\fBg\fR
-or
-\fBG\fR
-to indicate gigabytes\&. The default value is set to \-1\&.
-.sp
-The following example shows how to set the prefetch distance to 1024 bytes:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:AllocatePrefetchDistance=1024\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-Only the Java HotSpot Server VM supports this option\&.
-.RE
-.PP
-\-XX:AllocatePrefetchInstr=\fIinstruction\fR
-.RS 4
-Sets the prefetch instruction to prefetch ahead of the allocation pointer\&. Only the Java HotSpot Server VM supports this option\&. Possible values are from 0 to 3\&. The actual instructions behind the values depend on the platform\&. By default, the prefetch instruction is set to 0:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:AllocatePrefetchInstr=0\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-Only the Java HotSpot Server VM supports this option\&.
-.RE
-.PP
-\-XX:AllocatePrefetchLines=\fIlines\fR
-.RS 4
-Sets the number of cache lines to load after the last object allocation by using the prefetch instructions generated in compiled code\&. The default value is 1 if the last allocated object was an instance, and 3 if it was an array\&.
-.sp
-The following example shows how to set the number of loaded cache lines to 5:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:AllocatePrefetchLines=5\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-Only the Java HotSpot Server VM supports this option\&.
-.RE
-.PP
-\-XX:AllocatePrefetchStepSize=\fIsize\fR
-.RS 4
-Sets the step size (in bytes) for sequential prefetch instructions\&. Append the letter
-\fBk\fR
-or
-\fBK\fR
-to indicate kilobytes,
-\fBm\fR
-or
-\fBM\fR
-to indicate megabytes,
-\fBg\fR
-or
-\fBG\fR
-to indicate gigabytes\&. By default, the step size is set to 16 bytes:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:AllocatePrefetchStepSize=16\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-Only the Java HotSpot Server VM supports this option\&.
-.RE
-.PP
-\-XX:AllocatePrefetchStyle=\fIstyle\fR
-.RS 4
-Sets the generated code style for prefetch instructions\&. The
-\fIstyle\fR
-argument is an integer from 0 to 3:
-.PP
-0
-.RS 4
-Do not generate prefetch instructions\&.
-.RE
-.PP
-1
-.RS 4
-Execute prefetch instructions after each allocation\&. This is the default parameter\&.
-.RE
-.PP
-2
-.RS 4
-Use the thread\-local allocation block (TLAB) watermark pointer to determine when prefetch instructions are executed\&.
-.RE
-.PP
-3
-.RS 4
-Use BIS instruction on SPARC for allocation prefetch\&.
-.RE
-.sp
-Only the Java HotSpot Server VM supports this option\&.
-.RE
-.PP
-\-XX:+BackgroundCompilation
-.RS 4
-Enables background compilation\&. This option is enabled by default\&. To disable background compilation, specify
-\fB\-XX:\-BackgroundCompilation\fR
-(this is equivalent to specifying
-\fB\-Xbatch\fR)\&.
-.RE
-.PP
-\-XX:CICompilerCount=\fIthreads\fR
-.RS 4
-Sets the number of compiler threads to use for compilation\&. By default, the number of threads is set to 2 for the server JVM, to 1 for the client JVM, and it scales to the number of cores if tiered compilation is used\&. The following example shows how to set the number of threads to 2:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:CICompilerCount=2\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
-\-XX:CodeCacheMinimumFreeSpace=\fIsize\fR
-.RS 4
-Sets the minimum free space (in bytes) required for compilation\&. Append the letter
-\fBk\fR
-or
-\fBK\fR
-to indicate kilobytes,
-\fBm\fR
-or
-\fBM\fR
-to indicate megabytes,
-\fBg\fR
-or
-\fBG\fR
-to indicate gigabytes\&. When less than the minimum free space remains, compiling stops\&. By default, this option is set to 500 KB\&. The following example shows how to set the minimum free space to 1024 MB:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:CodeCacheMinimumFreeSpace=1024m\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
-\-XX:CompileCommand=\fIcommand\fR,\fImethod\fR[,\fIoption\fR]
-.RS 4
-Specifies a command to perform on a method\&. For example, to exclude the
-\fBindexOf()\fR
-method of the
-\fBString\fR
-class from being compiled, use the following:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:CompileCommand=exclude,java/lang/String\&.indexOf\fR
- 
+-enableassertions[:[\fIpackagename\fR]\&.\&.\&.|:\fIclassname\fR], -ea[:[\fIpackagename\fR]\&.\&.\&.|:\fIclassname\fR]
+.br
 .fi
-.if n \{\
-.RE
-.\}
-Note that the full class name is specified, including all packages and subpackages separated by a slash (\fB/\fR)\&. For easier cut and paste operations, it is also possible to use the method name format produced by the
-\fB\-XX:+PrintCompilation\fR
-and
-\fB\-XX:+LogCompilation\fR
-options:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:CompileCommand=exclude,java\&.lang\&.String::indexOf\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-If the method is specified without the signature, the command will be applied to all methods with the specified name\&. However, you can also specify the signature of the method in the class file format\&. In this case, you should enclose the arguments in quotation marks, because otherwise the shell treats the semicolon as command end\&. For example, if you want to exclude only the
-\fBindexOf(String)\fR
-method of the
-\fBString\fR
-class from being compiled, use the following:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:CompileCommand="exclude,java/lang/String\&.indexOf,(Ljava/lang/String;)I"\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-You can also use the asterisk (*) as a wildcard for class and method names\&. For example, to exclude all
-\fBindexOf()\fR
-methods in all classes from being compiled, use the following:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:CompileCommand=exclude,*\&.indexOf\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-The commas and periods are aliases for spaces, making it easier to pass compiler commands through a shell\&. You can pass arguments to
-\fB\-XX:CompileCommand\fR
-using spaces as separators by enclosing the argument in quotation marks:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:CompileCommand="exclude java/lang/String indexOf"\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-Note that after parsing the commands passed on the command line using the
-\fB\-XX:CompileCommand\fR
-options, the JIT compiler then reads commands from the
-\fB\&.hotspot_compiler\fR
-file\&. You can add commands to this file or specify a different file using the
-\fB\-XX:CompileCommandFile\fR
-option\&.
-.sp
-To add several commands, either specify the
-\fB\-XX:CompileCommand\fR
-option multiple times, or separate each argument with the newline separator (\fB\en\fR)\&. The following commands are available:
-.PP
+Enables assertions\&. By default, assertions are disabled in all packages and classes\&.
+
+With no arguments, \f3-enableassertions\fR (\f3-ea\fR) enables assertions in all packages and classes\&. With the \fIpackagename\fR argument ending in \f3\&.\&.\&.\fR, the switch enables assertions in the specified package and any subpackages\&. If the argument is simply \f3\&.\&.\&.\fR, then the switch enables assertions in the unnamed package in the current working directory\&. With the \fIclassname\fR argument\f3\fR, the switch enables assertions in the specified class\&.
+
+The \f3-enableassertions\fR (\f3-ea\fR) option applies to all class loaders and to system classes (which do not have a class loader)\&. There is one exception to this rule: if the option is provided with no arguments, then it does not apply to system classes\&. This makes it easy to enable assertions in all classes except for system classes\&. The \f3-enablesystemassertions\fR option provides a separate switch to enable assertions in all system classes\&.
+
+To explicitly disable assertions in specific packages or classes, use the \f3-disableassertions\fR (\f3-da\fR) option\&. If a single command contains multiple instances of these switches, then they are processed in order before loading any classes\&. For example, to run the \f3MyClass\fR application with assertions enabled only in package \f3com\&.wombat\&.fruitbat\fR (and any subpackages) but disabled in class \f3com\&.wombat\&.fruitbat\&.Brickbat\fR, use the following command:
+.sp     
+.nf     
+\f3java \-ea:com\&.wombat\&.fruitbat\&.\&.\&. \-da:com\&.wombat\&.fruitbat\&.Brickbat MyClass\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP
+-enablesystemassertions, -esa
+.br
+Enables assertions in all system classes\&.
+.TP
+-help, -?
+.br
+Displays usage information for the \f3java\fR command without actually running the JVM\&.
+.TP
+-jar \fIfilename\fR
+.br
+Executes a program encapsulated in a JAR file\&. The \fIfilename\fR argument is the name of a JAR file with a manifest that contains a line in the form \f3Main-Class:\fR\fIclassname\fR that defines the class with the \f3public static void main(String[] args)\fR method that serves as your application\&'s starting point\&.
+
+When you use the \f3-jar\fR option, the specified JAR file is the source of all user classes, and other class path settings are ignored\&.
+
+For more information about JAR files, see the following resources:
+.RS     
+.TP 0.2i    
+\(bu
+jar(1)
+.TP 0.2i    
+\(bu
+The Java Archive (JAR) Files guide at http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/jar/index\&.html
+.TP 0.2i    
+\(bu
+Lesson: Packaging Programs in JAR Files at http://docs\&.oracle\&.com/javase/tutorial/deployment/jar/index\&.html
+.RE     
+
+.TP
+-javaagent:\fIjarpath\fR[=\fIoptions\fR]
+.br
+Loads the specified Java programming language agent\&. For more information about instrumenting Java applications, see the \f3java\&.lang\&.instrument\fR package description in the Java API documentation at http://docs\&.oracle\&.com/javase/8/docs/api/java/lang/instrument/package-summary\&.html
+.TP
+-jre-restrict-search
+.br
+Includes user-private JREs in the version search\&.
+.TP
+-no-jre-restrict-search
+.br
+Excludes user-private JREs from the version search\&.
+.TP
+-server
+.br
+Selects the Java HotSpot Server VM\&. The 64-bit version of the JDK supports only the Server VM, so in that case the option is implicit\&.
+
+For default JVM selection, see Server-Class Machine Detection at http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/vm/server-class\&.html
+.TP
+-showversion
+.br
+Displays version information and continues execution of the application\&. This option is equivalent to the \f3-version\fR option except that the latter instructs the JVM to exit after displaying version information\&.
+.TP
+-splash:\fIimgname\fR
+.br
+Shows the splash screen with the image specified by \fIimgname\fR\&. For example, to show the \f3splash\&.gif\fR file from the \f3images\fR directory when starting your application, use the following option:
+.sp     
+.nf     
+\f3\-splash:images/splash\&.gif\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP
+-verbose:class
+.br
+Displays information about each loaded class\&.
+.TP
+-verbose:gc
+.br
+Displays information about each garbage collection (GC) event\&.
+.TP
+-verbose:jni
+.br
+Displays information about the use of native methods and other Java Native Interface (JNI) activity\&.
+.TP
+-version
+.br
+Displays version information and then exits\&. This option is equivalent to the \f3-showversion\fR option except that the latter does not instruct the JVM to exit after displaying version information\&.
+.TP
+-version:\fIrelease\fR
+.br
+Specifies the release version to be used for running the application\&. If the version of the \f3java\fR command called does not meet this specification and an appropriate implementation is found on the system, then the appropriate implementation will be used\&.
+
+The \fIrelease\fR argument specifies either the exact version string, or a list of version strings and ranges separated by spaces\&. A \fIversion string\fR is the developer designation of the version number in the following form: \f31\&.\fR\fIx\fR\f3\&.0_\fR\fIu\fR (where \fIx\fR is the major version number, and \fIu\fR is the update version number)\&. A \fIversion range\fR is made up of a version string followed by a plus sign (\f3+\fR) to designate this version or later, or a part of a version string followed by an asterisk (\f3*\fR) to designate any version string with a matching prefix\&. Version strings and ranges can be combined using a space for a logical \fIOR\fR combination, or an ampersand (\f3&\fR) for a logical \fIAND\fR combination of two version strings/ranges\&. For example, if running the class or JAR file requires either JRE 6u13 (1\&.6\&.0_13), or any JRE 6 starting from 6u10 (1\&.6\&.0_10), specify the following:
+.sp     
+.nf     
+\f3\-version:"1\&.6\&.0_13 1\&.6* & 1\&.6\&.0_10+"\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+Quotation marks are necessary only if there are spaces in the \fIrelease\fR parameter\&.
+
+For JAR files, the preference is to specify version requirements in the JAR file manifest rather than on the command line\&.
+.SS NON-STANDARD\ OPTIONS    
+These options are general purpose options that are specific to the Java HotSpot Virtual Machine\&.
+.TP
+-X
+.br
+Displays help for all available \f3-X\fR options\&.
+.TP
+-Xbatch
+.br
+Disables background compilation\&. By default, the JVM compiles the method as a background task, running the method in interpreter mode until the background compilation is finished\&. The \f3-Xbatch\fR flag disables background compilation so that compilation of all methods proceeds as a foreground task until completed\&.
+
+This option is equivalent to \f3-XX:-BackgroundCompilation\fR\&.
+.TP
+-Xbootclasspath:\fIpath\fR
+.br
+Specifies a list of directories, JAR files, and ZIP archives separated by colons (:) to search for boot class files\&. These are used in place of the boot class files included in the JDK\&.
+
+\fI\fRDo not deploy applications that use this option to override a class in \f3rt\&.jar\fR, because this violates the JRE binary code license\&.
+.TP
+-Xbootclasspath/a:\fIpath\fR
+.br
+Specifies a list of directories, JAR files, and ZIP archives separated by colons (:) to append to the end of the default bootstrap class path\&.
+
+Do not deploy applications that use this option to override a class in \f3rt\&.jar\fR, because this violates the JRE binary code license\&.
+.TP
+-Xbootclasspath/p:\fIpath\fR
+.br
+Specifies a list of directories, JAR files, and ZIP archives separated by colons (:) to prepend to the front of the default bootstrap class path\&.
+
+Do not deploy applications that use this option to override a class in \f3rt\&.jar\fR, because this violates the JRE binary code license\&.
+.TP
+-Xcheck:jni
+.br
+Performs additional checks for Java Native Interface (JNI) functions\&. Specifically, it validates the parameters passed to the JNI function and the runtime environment data before processing the JNI request\&. Any invalid data encountered indicates a problem in the native code, and the JVM will terminate with an irrecoverable error in such cases\&. Expect a performance degradation when this option is used\&.
+.TP
+-Xcomp
+.br
+Forces compilation of methods on first invocation\&. By default, the Client VM (\f3-client\fR) performs 1,000 interpreted method invocations and the Server VM (\f3-server\fR) performs 10,000 interpreted method invocations to gather information for efficient compilation\&. Specifying the \f3-Xcomp\fR option disables interpreted method invocations to increase compilation performance at the expense of efficiency\&.
+
+You can also change the number of interpreted method invocations before compilation using the \f3-XX:CompileThreshold\fR option\&.
+.TP
+-Xdebug
+.br
+Does nothing\&. Provided for backward compatibility\&.
+.TP
+-Xdiag
+.br
+Shows additional diagnostic messages\&.
+.TP
+-Xfuture
+.br
+Enables strict class-file format checks that enforce close conformance to the class-file format specification\&. Developers are encouraged to use this flag when developing new code because the stricter checks will become the default in future releases\&.
+.TP
+-Xint
+.br
+Runs the application in interpreted-only mode\&. Compilation to native code is disabled, and all bytecode is executed by the interpreter\&. The performance benefits offered by the just in time (JIT) compiler are not present in this mode\&.
+.TP
+-Xinternalversion
+.br
+Displays more detailed JVM version information than the \f3-version\fR option, and then exits\&.
+.TP
+-Xloggc:\fIfilename\fR
+.br
+Sets the file to which verbose GC events information should be redirected for logging\&. The information written to this file is similar to the output of \f3-verbose:gc\fR with the time elapsed since the first GC event preceding each logged event\&. The \f3-Xloggc\fR option overrides \f3-verbose:gc\fR if both are given with the same \f3java\fR command\&.
+
+Example:
+.sp     
+.nf     
+\f3\-Xloggc:garbage\-collection\&.log\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP
+-Xmaxjitcodesize=\fIsize\fR
+.br
+Specifies the maximum code cache size (in bytes) for JIT-compiled code\&. Append the letter \f3k\fR or \f3K\fR to indicate kilobytes, \f3m\fR or \f3M\fR to indicate megabytes, \f3g\fR or \f3G\fR to indicate gigabytes\&. By default, the value is set to 48 MB:
+.sp     
+.nf     
+\f3\-Xmaxjitcodesize=48m\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+This option is equivalent to \f3-XX:ReservedCodeCacheSize\fR\&.
+.TP
+-Xmixed
+.br
+Executes all bytecode by the interpreter except for hot methods, which are compiled to native code\&.
+.TP
+-Xmn\fIsize\fR
+.br
+Sets the initial and maximum size (in bytes) of the heap for the young generation (nursery)\&. Append the letter \f3k\fR or \f3K\fR to indicate kilobytes, \f3m\fR or \f3M\fR to indicate megabytes, \f3g\fR or \f3G\fR to indicate gigabytes\&.
+
+The young generation region of the heap is used for new objects\&. GC is performed in this region more often than in other regions\&. If the size for the young generation is too small, then a lot of minor garbage collections will be performed\&. If the size is too large, then only full garbage collections will be performed, which can take a long time to complete\&. Oracle recommends that you keep the size for the young generation between a half and a quarter of the overall heap size\&.
+
+The following examples show how to set the initial and maximum size of young generation to 256 MB using various units:
+.sp     
+.nf     
+\f3\-Xmn256m\fP
+.fi     
+.nf     
+\f3\-Xmn262144k\fP
+.fi     
+.nf     
+\f3\-Xmn268435456\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+Instead of the \f3-Xmn\fR option to set both the initial and maximum size of the heap for the young generation, you can use \f3-XX:NewSize\fR to set the initial size and \f3-XX:MaxNewSize\fR to set the maximum size\&.
+.TP
+-Xms\fIsize\fR
+.br
+Sets the initial size (in bytes) of the heap\&. This value must be a multiple of 1024 and greater than 1 MB\&. Append the letter \f3k\fR or \f3K\fR to indicate kilobytes, \f3m\fR or \f3M\fR to indicate megabytes, \f3g\fR or \f3G\fR to indicate gigabytes\&.
+
+The following examples show how to set the size of allocated memory to 6 MB using various units:
+.sp     
+.nf     
+\f3\-Xms6291456\fP
+.fi     
+.nf     
+\f3\-Xms6144k\fP
+.fi     
+.nf     
+\f3\-Xms6m\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+If you do not set this option, then the initial size will be set as the sum of the sizes allocated for the old generation and the young generation\&. The initial size of the heap for the young generation can be set using the \f3-Xmn\fR option or the \f3-XX:NewSize\fR option\&.
+.TP
+-Xmx\fIsize\fR
+.br
+Specifies the maximum size (in bytes) of the memory allocation pool in bytes\&. This value must be a multiple of 1024 and greater than 2 MB\&. Append the letter \f3k\fR or \f3K\fR to indicate kilobytes, \f3m\fR or \f3M\fR to indicate megabytes, \f3g\fR or \f3G\fR to indicate gigabytes\&. The default value is chosen at runtime based on system configuration\&. For server deployments, \f3-Xms\fR and \f3-Xmx\fR are often set to the same value\&. See the section "Ergonomics" in \fIJava SE HotSpot Virtual Machine Garbage Collection Tuning Guide\fR at http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/vm/gctuning/index\&.html\&.
+
+The following examples show how to set the maximum allowed size of allocated memory to 80 MB using various units:
+.sp     
+.nf     
+\f3\-Xmx83886080\fP
+.fi     
+.nf     
+\f3\-Xmx81920k\fP
+.fi     
+.nf     
+\f3\-Xmx80m\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+The \f3-Xmx\fR option is equivalent to \f3-XX:MaxHeapSize\fR\&.
+.TP
+-Xnoclassgc
+.br
+Disables garbage collection (GC) of classes\&. This can save some GC time, which shortens interruptions during the application run\&.
+
+When you specify \f3-Xnoclassgc\fR at startup, the class objects in the application will be left untouched during GC and will always be considered live\&. This can result in more memory being permanently occupied which, if not used carefully, will throw an out of memory exception\&.
+.TP
+-Xprof
+.br
+Profiles the running program and sends profiling data to standard output\&. This option is provided as a utility that is useful in program development and is not intended to be used in production systems\&.
+.TP
+-Xrs
+.br
+Reduces the use of operating system signals by the JVM\&.
+
+Shutdown hooks enable orderly shutdown of a Java application by running user cleanup code (such as closing database connections) at shutdown, even if the JVM terminates abruptly\&.
+
+The JVM catches signals to implement shutdown hooks for unexpected termination\&. The JVM uses \f3SIGHUP\fR, \f3SIGINT\fR, and \f3SIGTERM\fR to initiate the running of shutdown hooks\&.
+
+The JVM uses a similar mechanism to implement the feature of dumping thread stacks for debugging purposes\&. The JVM uses \f3SIGQUIT\fR to perform thread dumps\&.
+
+Applications embedding the JVM frequently need to trap signals such as \f3SIGINT\fR or \f3SIGTERM\fR, which can lead to interference with the JVM signal handlers\&. The \f3-Xrs\fR option is available to address this issue\&. When \f3-Xrs\fR is used, the signal masks for \f3SIGINT\fR, \f3SIGTERM\fR, \f3SIGHUP\fR, and \f3SIGQUIT\fR are not changed by the JVM, and signal handlers for these signals are not installed\&.
+
+There are two consequences of specifying \f3-Xrs\fR:
+.RS     
+.TP 0.2i    
+\(bu
+\f3SIGQUIT\fR thread dumps are not available\&.
+.TP 0.2i    
+\(bu
+User code is responsible for causing shutdown hooks to run, for example, by calling \f3System\&.exit()\fR when the JVM is to be terminated\&.
+.RE     
+
+.TP
+-Xshare:\fImode\fR
+.br
+Sets the class data sharing mode\&. Possible \fImode\fR arguments for this option include the following:
+.RS     
+.TP     
+auto
+Use shared class data if possible\&. This is the default value for Java HotSpot 32-Bit Client VM\&.
+.TP     
+on
+Require the use of class data sharing\&. Print an error message and exit if class data sharing cannot be used\&.
+.TP     
+off
+Do not use shared class data\&. This is the default value for Java HotSpot 32-Bit Server VM, Java HotSpot 64-Bit Client VM, and Java HotSpot 64-Bit Server VM\&.
+.TP     
+dump
+Manually generate the class data sharing archive\&.
+.RE     
+
+.TP
+-XshowSettings:\fIcategory\fR
+.br
+Shows settings and continues\&. Possible \fIcategory\fR arguments for this option include the following:
+.RS     
+.TP     
+all
+Shows all categories of settings\&. This is the default value\&.
+.TP     
+locale
+Shows settings related to locale\&.
+.TP     
+properties
+Shows settings related to system properties\&.
+.TP     
+vm
+Shows the settings of the JVM\&.
+.RE     
+
+.TP
+-Xss\fIsize\fR
+.br
+Sets the thread stack size (in bytes)\&. Append the letter \f3k\fR or \f3K\fR to indicate KB, \f3m\fR or \f3M\fR to indicate MB, \f3g\fR or \f3G\fR to indicate GB\&. The default value depends on the platform:
+.RS     
+.TP 0.2i    
+\(bu
+Linux/ARM (32-bit): 320 KB
+.TP 0.2i    
+\(bu
+Linux/i386 (32-bit): 320 KB
+.TP 0.2i    
+\(bu
+Linux/x64 (64-bit): 1024 KB
+.TP 0.2i    
+\(bu
+OS X (64-bit): 1024 KB
+.TP 0.2i    
+\(bu
+Oracle Solaris/i386 (32-bit): 320 KB
+.TP 0.2i    
+\(bu
+Oracle Solaris/x64 (64-bit): 1024 KB
+.TP 0.2i    
+\(bu
+Windows: depends on virtual memory
+.RE     
+
+
+The following examples set the thread stack size to 1024 KB in different units:
+.sp     
+.nf     
+\f3\-Xss1m\fP
+.fi     
+.nf     
+\f3\-Xss1024k\fP
+.fi     
+.nf     
+\f3\-Xss1048576\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+This option is equivalent to \f3-XX:ThreadStackSize\fR\&.
+.TP
+-Xusealtsigs
+.br
+Use alternative signals instead of \f3SIGUSR1\fR and \f3SIGUSR2\fR for JVM internal signals\&. This option is equivalent to \f3-XX:+UseAltSigs\fR\&.
+.TP
+-Xverify:\fImode\fR
+.br
+Sets the mode of the bytecode verifier\&. Bytecode verification helps to troubleshoot some problems, but it also adds overhead to the running application\&. Possible \fImode\fR arguments for this option include the following:
+.RS     
+.TP     
+none
+Do not verify the bytecode\&. This reduces startup time and also reduces the protection provided by Java\&.
+.TP     
+remote
+Verify those classes that are not loaded by the bootstrap class loader\&. This is the default behavior if you do not specify the \f3-Xverify\fR option\&.
+.TP     
+all
+Verify all classes\&.
+.RE     
+
+.SS ADVANCED\ RUNTIME\ OPTIONS    
+These options control the runtime behavior of the Java HotSpot VM\&.
+.TP
+-XX:+DisableAttachMechanism
+.br
+Enables the option that disables the mechanism that lets tools attach to the JVM\&. By default, this option is disabled, meaning that the attach mechanism is enabled and you can use tools such as \f3jcmd\fR, \f3jstack\fR, \f3jmap\fR, and \f3jinfo\fR\&.
+.TP
+-XX:ErrorFile=\fIfilename\fR
+.br
+Specifies the path and file name to which error data is written when an irrecoverable error occurs\&. By default, this file is created in the current working directory and named \f3hs_err_pid\fR\fIpid\fR\f3\&.log\fR where \fIpid\fR is the identifier of the process that caused the error\&. The following example shows how to set the default log file (note that the identifier of the process is specified as \f3%p\fR):
+.sp     
+.nf     
+\f3\-XX:ErrorFile=\&./hs_err_pid%p\&.log\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+The following example shows how to set the error log to \f3/var/log/java/java_error\&.log\fR:
+.sp     
+.nf     
+\f3\-XX:ErrorFile=/var/log/java/java_error\&.log\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+If the file cannot be created in the specified directory (due to insufficient space, permission problem, or another issue), then the file is created in the temporary directory for the operating system\&. The temporary directory is \f3/tmp\fR\&.
+.TP
+-XX:+FailOverToOldVerifier
+.br
+Enables automatic failover to the old verifier when the new type checker fails\&. By default, this option is disabled and it is ignored (that is, treated as disabled) for classes with a recent bytecode version\&. You can enable it for classes with older versions of the bytecode\&.
+.TP
+-XX:LargePageSizeInBytes=\fIsize\fR
+.br
+On Solaris, sets the maximum size (in bytes) for large pages used for Java heap\&. The \fIsize\fR argument must be a power of 2 (2, 4, 8, 16, \&.\&.\&.)\&. Append the letter \f3k\fR or \f3K\fR to indicate kilobytes, \f3m\fR or \f3M\fR to indicate megabytes, \f3g\fR or \f3G\fR to indicate gigabytes\&. By default, the size is set to 0, meaning that the JVM chooses the size for large pages automatically\&.
+
+The following example illustrates how to set the large page size to 4 megabytes (MB):
+.sp     
+.nf     
+\f3\-XX:LargePageSizeInBytes=4m\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP
+-XX:MaxDirectMemorySize=\fIsize\fR
+.br
+Sets the maximum total size (in bytes) of the New I/O (the \f3java\&.nio\fR package) direct-buffer allocations\&. Append the letter \f3k\fR or \f3K\fR to indicate kilobytes, \f3m\fR or \f3M\fR to indicate megabytes, \f3g\fR or \f3G\fR to indicate gigabytes\&. By default, the size is set to 0, meaning that the JVM chooses the size for NIO direct-buffer allocations automatically\&.
+
+The following examples illustrate how to set the NIO size to 1024 KB in different units:
+.sp     
+.nf     
+\f3\-XX:MaxDirectMemorySize=1m\fP
+.fi     
+.nf     
+\f3\-XX:MaxDirectMemorySize=1024k\fP
+.fi     
+.nf     
+\f3\-XX:MaxDirectMemorySize=1048576\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP
+-XX:NativeMemoryTracking=\fImode\fR
+.br
+Specifies the mode for tracking JVM native memory usage\&. Possible \fImode\fR arguments for this option include the following:
+.RS     
+.TP     
+off
+Do not track JVM native memory usage\&. This is the default behavior if you do not specify the \f3-XX:NativeMemoryTracking\fR option\&.
+.TP     
+summary
+Only track memory usage by JVM subsystems, such as Java heap, class, code, and thread\&.
+.TP     
+detail
+In addition to tracking memory usage by JVM subsystems, track memory usage by individual \f3CallSite\fR, individual virtual memory region and its committed regions\&.
+.RE     
+
+.TP
+-XX:ObjectAlignmentInBytes=\fIalignment\fR
+.br
+Sets the memory alignment of Java objects (in bytes)\&. By default, the value is set to 8 bytes\&. The specified value should be a power of two, and must be within the range of 8 and 256 (inclusive)\&. This option makes it possible to use compressed pointers with large Java heap sizes\&.
+
+The heap size limit in bytes is calculated as:
+
+\f34GB * ObjectAlignmentInBytes\fR
+
+Note: As the alignment value increases, the unused space between objects will also increase\&. As a result, you may not realize any benefits from using compressed pointers with large Java heap sizes\&.
+.TP
+-XX:OnError=\fIstring\fR
+.br
+Sets a custom command or a series of semicolon-separated commands to run when an irrecoverable error occurs\&. If the string contains spaces, then it must be enclosed in quotation marks\&.
+
+\fI\fRThe following example shows how the \f3-XX:OnError\fR option can be used to run the \f3gcore\fR command to create the core image, and the debugger is started to attach to the process in case of an irrecoverable error (the \f3%p\fR designates the current process):
+.sp     
+.nf     
+\f3\-XX:OnError="gcore %p;dbx \- %p"\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP
+-XX:OnOutOfMemoryError=\fIstring\fR
+.br
+Sets a custom command or a series of semicolon-separated commands to run when an \f3OutOfMemoryError\fR exception is first thrown\&. If the string contains spaces, then it must be enclosed in quotation marks\&. For an example of a command string, see the description of the \f3-XX:OnError\fR option\&.
+.TP
+-XX:+PerfDataSaveToFile
+.br
+If enabled, saves jstat(1) binary data when the Java application exits\&. This binary data is saved in a file named \f3hsperfdata_\fR\fI<pid>\fR, where \fI<pid>\fR is the process identifier of the Java application you ran\&. Use \f3jstat\fR to display the performance data contained in this file as follows:
+.sp     
+.nf     
+\f3jstat \-class file:///\fI<path>\fR/hsperfdata_\fI<pid>\fR\fP
+.fi     
+.nf     
+\f3jstat \-gc file:///\fI<path>\fR/hsperfdata_\fI<pid>\fR\fP
+.fi     
+.sp     
+
+.TP
+-XX:+PrintCommandLineFlags
+.br
+Enables printing of ergonomically selected JVM flags that appeared on the command line\&. It can be useful to know the ergonomic values set by the JVM, such as the heap space size and the selected garbage collector\&. By default, this option is disabled and flags are not printed\&.
+.TP
+-XX:+PrintNMTStatistics
+.br
+Enables printing of collected native memory tracking data at JVM exit when native memory tracking is enabled (see \f3-XX:NativeMemoryTracking\fR)\&. By default, this option is disabled and native memory tracking data is not printed\&.
+.TP
+-XX:+RelaxAccessControlCheck
+.br
+Decreases the amount of access control checks in the verifier\&. By default, this option is disabled, and it is ignored (that is, treated as disabled) for classes with a recent bytecode version\&. You can enable it for classes with older versions of the bytecode\&.
+.TP
+-XX:+ShowMessageBoxOnError
+.br
+Enables displaying of a dialog box when the JVM experiences an irrecoverable error\&. This prevents the JVM from exiting and keeps the process active so that you can attach a debugger to it to investigate the cause of the error\&. By default, this option is disabled\&.
+.TP
+-XX:ThreadStackSize=\fIsize\fR
+.br
+Sets the thread stack size (in bytes)\&. Append the letter \f3k\fR or \f3K\fR to indicate kilobytes, \f3m\fR or \f3M\fR to indicate megabytes, \f3g\fR or \f3G\fR to indicate gigabytes\&. The default value depends on the platform:
+.RS     
+.TP 0.2i    
+\(bu
+Linux/ARM (32-bit): 320 KB
+.TP 0.2i    
+\(bu
+Linux/i386 (32-bit): 320 KB
+.TP 0.2i    
+\(bu
+Linux/x64 (64-bit): 1024 KB
+.TP 0.2i    
+\(bu
+OS X (64-bit): 1024 KB
+.TP 0.2i    
+\(bu
+Oracle Solaris/i386 (32-bit): 320 KB
+.TP 0.2i    
+\(bu
+Oracle Solaris/x64 (64-bit): 1024 KB
+.TP 0.2i    
+\(bu
+Windows: depends on virtual memory
+.RE     
+
+
+The following examples show how to set the thread stack size to 1024 KB in different units:
+.sp     
+.nf     
+\f3\-XX:ThreadStackSize=1m\fP
+.fi     
+.nf     
+\f3\-XX:ThreadStackSize=1024k\fP
+.fi     
+.nf     
+\f3\-XX:ThreadStackSize=1048576\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+This option is equivalent to \f3-Xss\fR\&.
+.TP
+-XX:+TraceClassLoading
+.br
+Enables tracing of classes as they are loaded\&. By default, this option is disabled and classes are not traced\&.
+.TP
+-XX:+TraceClassLoadingPreorder
+.br
+Enables tracing of all loaded classes in the order in which they are referenced\&. By default, this option is disabled and classes are not traced\&.
+.TP
+-XX:+TraceClassResolution
+.br
+Enables tracing of constant pool resolutions\&. By default, this option is disabled and constant pool resolutions are not traced\&.
+.TP
+-XX:+TraceClassUnloading
+.br
+Enables tracing of classes as they are unloaded\&. By default, this option is disabled and classes are not traced\&.
+.TP
+-XX:+TraceLoaderConstraints
+.br
+Enables tracing of the loader constraints recording\&. By default, this option is disabled and loader constraints recording is not traced\&.
+.TP
+-XX:+UseAltSigs
+.br
+Enables the use of alternative signals instead of \f3SIGUSR1\fR and \f3SIGUSR2\fR for JVM internal signals\&. By default, this option is disabled and alternative signals are not used\&. This option is equivalent to \f3-Xusealtsigs\fR\&.
+.TP
+-XX:-UseBiasedLocking
+.br
+Disables the use of biased locking\&. Some applications with significant amounts of uncontended synchronization may attain significant speedups with this flag enabled, whereas applications with certain patterns of locking may see slowdowns\&. For more information about the biased locking technique, see the example in Java Tuning White Paper at http://www\&.oracle\&.com/technetwork/java/tuning-139912\&.html#section4\&.2\&.5
+
+By default, this option is enabled\&.
+.TP
+-XX:-UseCompressedOops
+.br
+Disables the use of compressed pointers\&. By default, this option is enabled, and compressed pointers are used when Java heap sizes are less than 32 GB\&. When this option is enabled, object references are represented as 32-bit offsets instead of 64-bit pointers, which typically increases performance when running the application with Java heap sizes less than 32 GB\&. This option works only for 64-bit JVMs\&.
+
+It is also possible to use compressed pointers when Java heap sizes are greater than 32GB\&. See the \f3-XX:ObjectAlignmentInBytes\fR option\&.
+.TP
+-XX:+UseHugeTLBFS
+.br
+This option for Linux is the equivalent of specifying \f3-XX:+UseLargePages\fR\&. This option is disabled by default\&. This option pre-allocates all large pages up-front, when memory is reserved; consequently the JVM cannot dynamically grow or shrink large pages memory areas; see \f3-XX:UseTransparentHugePages\fR if you want this behavior\&.
+
+For more information, see Large Pages\&.
+.TP
+-XX:+UseLargePages
+.br
+Enables the use of large page memory\&. By default, this option is disabled and large page memory is not used\&.
+
+For more information, see Large Pages\&.
+.TP
+-XX:+UseMembar
+.br
+Enables issuing of membars on thread state transitions\&. This option is disabled by default on all platforms except ARM servers, where it is enabled\&. (It is recommended that you do not disable this option on ARM servers\&.)
+.TP
+-XX:+UsePerfData
+.br
+Enables the \f3perfdata\fR feature\&. This option is enabled by default to allow JVM monitoring and performance testing\&. Disabling it suppresses the creation of the \f3hsperfdata_userid\fR directories\&. To disable the \f3perfdata\fR feature, specify \f3-XX:-UsePerfData\fR\&.
+.TP
+-XX:+UseTransparentHugePages
+.br
+On Linux, enables the use of large pages that can dynamically grow or shrink\&. This option is disabled by default\&. You may encounter performance problems with transparent huge pages as the OS moves other pages around to create huge pages; this option is made available for experimentation\&.
+
+For more information, see Large Pages\&.
+.TP
+-XX:+AllowUserSignalHandlers
+.br
+Enables installation of signal handlers by the application\&. By default, this option is disabled and the application is not allowed to install signal handlers\&.
+.SS ADVANCED\ JIT\ COMPILER\ OPTIONS    
+These options control the dynamic just-in-time (JIT) compilation performed by the Java HotSpot VM\&.
+.TP
+-XX:+AggressiveOpts
+.br
+Enables the use of aggressive performance optimization features, which are expected to become default in upcoming releases\&. By default, this option is disabled and experimental performance features are not used\&.
+.TP
+-XX:AllocateInstancePrefetchLines=\fIlines\fR
+.br
+Sets the number of lines to prefetch ahead of the instance allocation pointer\&. By default, the number of lines to prefetch is set to 1:
+.sp     
+.nf     
+\f3\-XX:AllocateInstancePrefetchLines=1\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+Only the Java HotSpot Server VM supports this option\&.
+.TP
+-XX:AllocatePrefetchDistance=\fIsize\fR
+.br
+Sets the size (in bytes) of the prefetch distance for object allocation\&. Memory about to be written with the value of new objects is prefetched up to this distance starting from the address of the last allocated object\&. Each Java thread has its own allocation point\&.
+
+Negative values denote that prefetch distance is chosen based on the platform\&. Positive values are bytes to prefetch\&. Append the letter \f3k\fR or \f3K\fR to indicate kilobytes, \f3m\fR or \f3M\fR to indicate megabytes, \f3g\fR or \f3G\fR to indicate gigabytes\&. The default value is set to -1\&.
+
+The following example shows how to set the prefetch distance to 1024 bytes:
+.sp     
+.nf     
+\f3\-XX:AllocatePrefetchDistance=1024\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+Only the Java HotSpot Server VM supports this option\&.
+.TP
+-XX:AllocatePrefetchInstr=\fIinstruction\fR
+.br
+Sets the prefetch instruction to prefetch ahead of the allocation pointer\&. Only the Java HotSpot Server VM supports this option\&. Possible values are from 0 to 3\&. The actual instructions behind the values depend on the platform\&. By default, the prefetch instruction is set to 0:
+.sp     
+.nf     
+\f3\-XX:AllocatePrefetchInstr=0\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+Only the Java HotSpot Server VM supports this option\&.
+.TP
+-XX:AllocatePrefetchLines=\fIlines\fR
+.br
+Sets the number of cache lines to load after the last object allocation by using the prefetch instructions generated in compiled code\&. The default value is 1 if the last allocated object was an instance, and 3 if it was an array\&.
+
+The following example shows how to set the number of loaded cache lines to 5:
+.sp     
+.nf     
+\f3\-XX:AllocatePrefetchLines=5\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+Only the Java HotSpot Server VM supports this option\&.
+.TP
+-XX:AllocatePrefetchStepSize=\fIsize\fR
+.br
+Sets the step size (in bytes) for sequential prefetch instructions\&. Append the letter \f3k\fR or \f3K\fR to indicate kilobytes, \f3m\fR or \f3M\fR to indicate megabytes, \f3g\fR or \f3G\fR to indicate gigabytes\&. By default, the step size is set to 16 bytes:
+.sp     
+.nf     
+\f3\-XX:AllocatePrefetchStepSize=16\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+Only the Java HotSpot Server VM supports this option\&.
+.TP
+-XX:AllocatePrefetchStyle=\fIstyle\fR
+.br
+Sets the generated code style for prefetch instructions\&. The \fIstyle\fR argument is an integer from 0 to 3:
+.RS     
+.TP     
+0
+Do not generate prefetch instructions\&.
+.TP     
+1
+Execute prefetch instructions after each allocation\&. This is the default parameter\&.
+.TP     
+2
+Use the thread-local allocation block (TLAB) watermark pointer to determine when prefetch instructions are executed\&.
+.TP     
+3
+Use BIS instruction on SPARC for allocation prefetch\&.
+.RE     
+
+
+Only the Java HotSpot Server VM supports this option\&.
+.TP
+-XX:+BackgroundCompilation
+.br
+Enables background compilation\&. This option is enabled by default\&. To disable background compilation, specify \f3-XX:-BackgroundCompilation\fR (this is equivalent to specifying \f3-Xbatch\fR)\&.
+.TP
+-XX:CICompilerCount=\fIthreads\fR
+.br
+Sets the number of compiler threads to use for compilation\&. By default, the number of threads is set to 2 for the server JVM, to 1 for the client JVM, and it scales to the number of cores if tiered compilation is used\&. The following example shows how to set the number of threads to 2:
+.sp     
+.nf     
+\f3\-XX:CICompilerCount=2\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP
+-XX:CodeCacheMinimumFreeSpace=\fIsize\fR
+.br
+Sets the minimum free space (in bytes) required for compilation\&. Append the letter \f3k\fR or \f3K\fR to indicate kilobytes, \f3m\fR or \f3M\fR to indicate megabytes, \f3g\fR or \f3G\fR to indicate gigabytes\&. When less than the minimum free space remains, compiling stops\&. By default, this option is set to 500 KB\&. The following example shows how to set the minimum free space to 1024 MB:
+.sp     
+.nf     
+\f3\-XX:CodeCacheMinimumFreeSpace=1024m\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP
+-XX:CompileCommand=\fIcommand\fR,\fImethod\fR[,\fIoption\fR]
+.br
+Specifies a command to perform on a method\&. For example, to exclude the \f3indexOf()\fR method of the \f3String\fR class from being compiled, use the following:
+.sp     
+.nf     
+\f3\-XX:CompileCommand=exclude,java/lang/String\&.indexOf\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+Note that the full class name is specified, including all packages and subpackages separated by a slash (\f3/\fR)\&. For easier cut and paste operations, it is also possible to use the method name format produced by the \f3-XX:+PrintCompilation\fR and \f3-XX:+LogCompilation\fR options:
+.sp     
+.nf     
+\f3\-XX:CompileCommand=exclude,java\&.lang\&.String::indexOf\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+If the method is specified without the signature, the command will be applied to all methods with the specified name\&. However, you can also specify the signature of the method in the class file format\&. In this case, you should enclose the arguments in quotation marks, because otherwise the shell treats the semicolon as command end\&. For example, if you want to exclude only the \f3indexOf(String)\fR method of the \f3String\fR class from being compiled, use the following:
+.sp     
+.nf     
+\f3\-XX:CompileCommand="exclude,java/lang/String\&.indexOf,(Ljava/lang/String;)I"\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+You can also use the asterisk (*) as a wildcard for class and method names\&. For example, to exclude all \f3indexOf()\fR methods in all classes from being compiled, use the following:
+.sp     
+.nf     
+\f3\-XX:CompileCommand=exclude,*\&.indexOf\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+The commas and periods are aliases for spaces, making it easier to pass compiler commands through a shell\&. You can pass arguments to \f3-XX:CompileCommand\fR using spaces as separators by enclosing the argument in quotation marks:
+.sp     
+.nf     
+\f3\-XX:CompileCommand="exclude java/lang/String indexOf"\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+Note that after parsing the commands passed on the command line using the \f3-XX:CompileCommand\fR options, the JIT compiler then reads commands from the \f3\&.hotspot_compiler\fR file\&. You can add commands to this file or specify a different file using the \f3-XX:CompileCommandFile\fR option\&.
+
+To add several commands, either specify the \f3-XX:CompileCommand\fR option multiple times, or separate each argument with the newline separator (\f3\en\fR)\&. The following commands are available:
+.RS     
+.TP     
 break
-.RS 4
 Set a breakpoint when debugging the JVM to stop at the beginning of compilation of the specified method\&.
-.RE
-.PP
+.TP     
 compileonly
-.RS 4
-Exclude all methods from compilation except for the specified method\&. As an alternative, you can use the
-\fB\-XX:CompileOnly\fR
-option, which allows to specify several methods\&.
-.RE
-.PP
+Exclude all methods from compilation except for the specified method\&. As an alternative, you can use the \f3-XX:CompileOnly\fR option, which allows to specify several methods\&.
+.TP     
 dontinline
-.RS 4
 Prevent inlining of the specified method\&.
-.RE
-.PP
+.TP     
 exclude
-.RS 4
 Exclude the specified method from compilation\&.
-.RE
-.PP
+.TP     
 help
-.RS 4
-Print a help message for the
-\fB\-XX:CompileCommand\fR
-option\&.
-.RE
-.PP
+Print a help message for the \f3-XX:CompileCommand\fR option\&.
+.TP     
 inline
-.RS 4
 Attempt to inline the specified method\&.
-.RE
-.PP
+.TP     
 log
-.RS 4
-Exclude compilation logging (with the
-\fB\-XX:+LogCompilation\fR
-option) for all methods except for the specified method\&. By default, logging is performed for all compiled methods\&.
-.RE
-.PP
+Exclude compilation logging (with the \f3-XX:+LogCompilation\fR option) for all methods except for the specified method\&. By default, logging is performed for all compiled methods\&.
+.TP     
 option
-.RS 4
-This command can be used to pass a JIT compilation option to the specified method in place of the last argument (\fIoption\fR)\&. The compilation option is set at the end, after the method name\&. For example, to enable the
-\fBBlockLayoutByFrequency\fR
-option for the
-\fBappend()\fR
-method of the
-\fBStringBuffer\fR
-class, use the following:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:CompileCommand=option,java/lang/StringBuffer\&.append,BlockLayoutByFrequency\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
+This command can be used to pass a JIT compilation option to the specified method in place of the last argument (\fIoption\fR)\&. The compilation option is set at the end, after the method name\&. For example, to enable the \f3BlockLayoutByFrequency\fR option for the \f3append()\fR method of the \f3StringBuffer\fR class, use the following:
+.sp     
+.nf     
+\f3\-XX:CompileCommand=option,java/lang/StringBuffer\&.append,BlockLayoutByFrequency\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
 You can specify multiple compilation options, separated by commas or spaces\&.
-.RE
-.PP
+.TP     
 print
-.RS 4
 Print generated assembler code after compilation of the specified method\&.
-.RE
-.PP
+.TP     
 quiet
-.RS 4
-Do not print the compile commands\&. By default, the commands that you specify with the \-\fBXX:CompileCommand\fR
-option are printed; for example, if you exclude from compilation the
-\fBindexOf()\fR
-method of the
-\fBString\fR
-class, then the following will be printed to standard output:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBCompilerOracle: exclude java/lang/String\&.indexOf\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-You can suppress this by specifying the
-\fB\-XX:CompileCommand=quiet\fR
-option before other
-\fB\-XX:CompileCommand\fR
-options\&.
-.RE
-.RE
-.PP
-\-XX:CompileCommandFile=\fIfilename\fR
-.RS 4
-Sets the file from which JIT compiler commands are read\&. By default, the
-\fB\&.hotspot_compiler\fR
-file is used to store commands performed by the JIT compiler\&.
-.sp
-Each line in the command file represents a command, a class name, and a method name for which the command is used\&. For example, this line prints assembly code for the
-\fBtoString()\fR
-method of the
-\fBString\fR
-class:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBprint java/lang/String toString\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-For more information about specifying the commands for the JIT compiler to perform on methods, see the
-\fB\-XX:CompileCommand\fR
-option\&.
-.RE
-.PP
-\-XX:CompileOnly=\fImethods\fR
-.RS 4
-Sets the list of methods (separated by commas) to which compilation should be restricted\&. Only the specified methods will be compiled\&. Specify each method with the full class name (including the packages and subpackages)\&. For example, to compile only the
-\fBlength()\fR
-method of the
-\fBString\fR
-class and the
-\fBsize()\fR
-method of the
-\fBList\fR
-class, use the following:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:CompileOnly=java/lang/String\&.length,java/util/List\&.size\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-Note that the full class name is specified, including all packages and subpackages separated by a slash (\fB/\fR)\&. For easier cut and paste operations, it is also possible to use the method name format produced by the
-\fB\-XX:+PrintCompilation\fR
-and
-\fB\-XX:+LogCompilation\fR
-options:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:CompileOnly=java\&.lang\&.String::length,java\&.util\&.List::size\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
+Do not print the compile commands\&. By default, the commands that you specify with the -\f3XX:CompileCommand\fR option are printed; for example, if you exclude from compilation the \f3indexOf()\fR method of the \f3String\fR class, then the following will be printed to standard output:
+.sp     
+.nf     
+\f3CompilerOracle: exclude java/lang/String\&.indexOf\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+You can suppress this by specifying the \f3-XX:CompileCommand=quiet\fR option before other \f3-XX:CompileCommand\fR options\&.
+.RE     
+
+.TP
+-XX:CompileCommandFile=\fIfilename\fR
+.br
+Sets the file from which JIT compiler commands are read\&. By default, the \f3\&.hotspot_compiler\fR file is used to store commands performed by the JIT compiler\&.
+
+Each line in the command file represents a command, a class name, and a method name for which the command is used\&. For example, this line prints assembly code for the \f3toString()\fR method of the \f3String\fR class:
+.sp     
+.nf     
+\f3print java/lang/String toString\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+For more information about specifying the commands for the JIT compiler to perform on methods, see the \f3-XX:CompileCommand\fR option\&.
+.TP
+-XX:CompileOnly=\fImethods\fR
+.br
+Sets the list of methods (separated by commas) to which compilation should be restricted\&. Only the specified methods will be compiled\&. Specify each method with the full class name (including the packages and subpackages)\&. For example, to compile only the \f3length()\fR method of the \f3String\fR class and the \f3size()\fR method of the \f3List\fR class, use the following:
+.sp     
+.nf     
+\f3\-XX:CompileOnly=java/lang/String\&.length,java/util/List\&.size\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+Note that the full class name is specified, including all packages and subpackages separated by a slash (\f3/\fR)\&. For easier cut and paste operations, it is also possible to use the method name format produced by the \f3-XX:+PrintCompilation\fR and \f3-XX:+LogCompilation\fR options:
+.sp     
+.nf     
+\f3\-XX:CompileOnly=java\&.lang\&.String::length,java\&.util\&.List::size\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
 Although wildcards are not supported, you can specify only the class or package name to compile all methods in that class or package, as well as specify just the method to compile methods with this name in any class:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:CompileOnly=java/lang/String\fR
-\fB\-XX:CompileOnly=java/lang\fR
-\fB\-XX:CompileOnly=\&.length\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
-\-XX:CompileThreshold=\fIinvocations\fR
-.RS 4
-Sets the number of interpreted method invocations before compilation\&. By default, in the server JVM, the JIT compiler performs 10,000 interpreted method invocations to gather information for efficient compilation\&. For the client JVM, the default setting is 1,500 invocations\&. The following example shows how to set the number of interpreted method invocations to 5,000:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:CompileThreshold=5000\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-You can completely disable interpretation of Java methods before compilation by specifying the
-\fB\-Xcomp\fR
-option\&.
-.RE
-.PP
-\-XX:+DoEscapeAnalysis
-.RS 4
-Enables the use of escape analysis\&. This option is enabled by default\&. To disable the use of escape analysis, specify
-\fB\-XX:\-DoEscapeAnalysis\fR\&. Only the Java HotSpot Server VM supports this option\&.
-.RE
-.PP
-\-XX:InitialCodeCacheSize=\fIsize\fR
-.RS 4
-Sets the initial code cache size (in bytes)\&. Append the letter
-\fBk\fR
-or
-\fBK\fR
-to indicate kilobytes,
-\fBm\fR
-or
-\fBM\fR
-to indicate megabytes,
-\fBg\fR
-or
-\fBG\fR
-to indicate gigabytes\&. The default value is set to 500 KB\&. The following example shows how to set the initial code cache size to 32 KB:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:InitialCodeCacheSize=32k\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
-\-XX:+Inline
-.RS 4
-Enables method inlining\&. This option is enabled by default to increase performance\&. To disable method inlining, specify
-\fB\-XX:\-Inline\fR\&.
-.RE
-.PP
-\-XX:InlineSmallCode=\fIsize\fR
-.RS 4
-Sets the maximum code size (in bytes) for compiled methods that should be inlined\&. Append the letter
-\fBk\fR
-or
-\fBK\fR
-to indicate kilobytes,
-\fBm\fR
-or
-\fBM\fR
-to indicate megabytes,
-\fBg\fR
-or
-\fBG\fR
-to indicate gigabytes\&. Only compiled methods with the size smaller than the specified size will be inlined\&. By default, the maximum code size is set to 1000 bytes:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:InlineSmallCode=1000\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
-\-XX:+LogCompilation
-.RS 4
-Enables logging of compilation activity to a file named
-\fBhotspot\&.log\fR
-in the current working directory\&. You can specify a different log file path and name using the
-\fB\-XX:LogFile\fR
-option\&.
-.sp
-By default, this option is disabled and compilation activity is not logged\&. The
-\fB\-XX:+LogCompilation\fR
-option has to be used together with the
-\fB\-XX:UnlockDiagnosticVMOptions\fR
-option that unlocks diagnostic JVM options\&.
-.sp
-You can enable verbose diagnostic output with a message printed to the console every time a method is compiled by using the
-\fB\-XX:+PrintCompilation\fR
-option\&.
-.RE
-.PP
-\-XX:MaxInlineSize=\fIsize\fR
-.RS 4
-Sets the maximum bytecode size (in bytes) of a method to be inlined\&. Append the letter
-\fBk\fR
-or
-\fBK\fR
-to indicate kilobytes,
-\fBm\fR
-or
-\fBM\fR
-to indicate megabytes,
-\fBg\fR
-or
-\fBG\fR
-to indicate gigabytes\&. By default, the maximum bytecode size is set to 35 bytes:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:MaxInlineSize=35\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
-\-XX:MaxNodeLimit=\fInodes\fR
-.RS 4
+.sp     
+.nf     
+\f3\-XX:CompileOnly=java/lang/String\fP
+.fi     
+.nf     
+\f3\-XX:CompileOnly=java/lang\fP
+.fi     
+.nf     
+\f3\-XX:CompileOnly=\&.length\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP
+-XX:CompileThreshold=\fIinvocations\fR
+.br
+Sets the number of interpreted method invocations before compilation\&. By default, in the server JVM, the JIT compiler performs 10,000 interpreted method invocations to gather information for efficient compilation\&. For the client JVM, the default setting is 1,500 invocations\&. This option is ignored when tiered compilation is enabled; see the option \f3-XX:+TieredCompilation\fR\&. The following example shows how to set the number of interpreted method invocations to 5,000:
+.sp     
+.nf     
+\f3\-XX:CompileThreshold=5000\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+You can completely disable interpretation of Java methods before compilation by specifying the \f3-Xcomp\fR option\&.
+.TP
+-XX:+DoEscapeAnalysis
+.br
+Enables the use of escape analysis\&. This option is enabled by default\&. To disable the use of escape analysis, specify \f3-XX:-DoEscapeAnalysis\fR\&. Only the Java HotSpot Server VM supports this option\&.
+.TP
+-XX:InitialCodeCacheSize=\fIsize\fR
+.br
+Sets the initial code cache size (in bytes)\&. Append the letter \f3k\fR or \f3K\fR to indicate kilobytes, \f3m\fR or \f3M\fR to indicate megabytes, \f3g\fR or \f3G\fR to indicate gigabytes\&. The default value is set to 500 KB\&. The initial code cache size should be not less than the system\&'s minimal memory page size\&. The following example shows how to set the initial code cache size to 32 KB:
+.sp     
+.nf     
+\f3\-XX:InitialCodeCacheSize=32k\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP
+-XX:+Inline
+.br
+Enables method inlining\&. This option is enabled by default to increase performance\&. To disable method inlining, specify \f3-XX:-Inline\fR\&.
+.TP
+-XX:InlineSmallCode=\fIsize\fR
+.br
+Sets the maximum code size (in bytes) for compiled methods that should be inlined\&. Append the letter \f3k\fR or \f3K\fR to indicate kilobytes, \f3m\fR or \f3M\fR to indicate megabytes, \f3g\fR or \f3G\fR to indicate gigabytes\&. Only compiled methods with the size smaller than the specified size will be inlined\&. By default, the maximum code size is set to 1000 bytes:
+.sp     
+.nf     
+\f3\-XX:InlineSmallCode=1000\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP
+-XX:+LogCompilation
+.br
+Enables logging of compilation activity to a file named \f3hotspot\&.log\fR in the current working directory\&. You can specify a different log file path and name using the \f3-XX:LogFile\fR option\&.
+
+By default, this option is disabled and compilation activity is not logged\&. The \f3-XX:+LogCompilation\fR option has to be used together with the \f3-XX:UnlockDiagnosticVMOptions\fR option that unlocks diagnostic JVM options\&.
+
+You can enable verbose diagnostic output with a message printed to the console every time a method is compiled by using the \f3-XX:+PrintCompilation\fR option\&.
+.TP
+-XX:MaxInlineSize=\fIsize\fR
+.br
+Sets the maximum bytecode size (in bytes) of a method to be inlined\&. Append the letter \f3k\fR or \f3K\fR to indicate kilobytes, \f3m\fR or \f3M\fR to indicate megabytes, \f3g\fR or \f3G\fR to indicate gigabytes\&. By default, the maximum bytecode size is set to 35 bytes:
+.sp     
+.nf     
+\f3\-XX:MaxInlineSize=35\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP
+-XX:MaxNodeLimit=\fInodes\fR
+.br
 Sets the maximum number of nodes to be used during single method compilation\&. By default, the maximum number of nodes is set to 65,000:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:MaxNodeLimit=65000\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
-\-XX:MaxTrivialSize=\fIsize\fR
-.RS 4
-Sets the maximum bytecode size (in bytes) of a trivial method to be inlined\&. Append the letter
-\fBk\fR
-or
-\fBK\fR
-to indicate kilobytes,
-\fBm\fR
-or
-\fBM\fR
-to indicate megabytes,
-\fBg\fR
-or
-\fBG\fR
-to indicate gigabytes\&. By default, the maximum bytecode size of a trivial method is set to 6 bytes:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:MaxTrivialSize=6\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
-\-XX:+OptimizeStringConcat
-.RS 4
-Enables the optimization of
-\fBString\fR
-concatenation operations\&. This option is enabled by default\&. To disable the optimization of
-\fBString\fR
-concatenation operations, specify
-\fB\-XX:\-OptimizeStringConcat\fR\&. Only the Java HotSpot Server VM supports this option\&.
-.RE
-.PP
-\-XX:+PrintAssembly
-.RS 4
-Enables printing of assembly code for bytecoded and native methods by using the external
-\fBdisassembler\&.so\fR
-library\&. This enables you to see the generated code, which may help you to diagnose performance issues\&.
-.sp
-By default, this option is disabled and assembly code is not printed\&. The
-\fB\-XX:+PrintAssembly\fR
-option has to be used together with the
-\fB\-XX:UnlockDiagnosticVMOptions\fR
-option that unlocks diagnostic JVM options\&.
-.RE
-.PP
-\-XX:+PrintCompilation
-.RS 4
+.sp     
+.nf     
+\f3\-XX:MaxNodeLimit=65000\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP
+-XX:MaxTrivialSize=\fIsize\fR
+.br
+Sets the maximum bytecode size (in bytes) of a trivial method to be inlined\&. Append the letter \f3k\fR or \f3K\fR to indicate kilobytes, \f3m\fR or \f3M\fR to indicate megabytes, \f3g\fR or \f3G\fR to indicate gigabytes\&. By default, the maximum bytecode size of a trivial method is set to 6 bytes:
+.sp     
+.nf     
+\f3\-XX:MaxTrivialSize=6\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP
+-XX:+OptimizeStringConcat
+.br
+Enables the optimization of \f3String\fR concatenation operations\&. This option is enabled by default\&. To disable the optimization of \f3String\fR concatenation operations, specify \f3-XX:-OptimizeStringConcat\fR\&. Only the Java HotSpot Server VM supports this option\&.
+.TP
+-XX:+PrintAssembly
+.br
+Enables printing of assembly code for bytecoded and native methods by using the external \f3disassembler\&.so\fR library\&. This enables you to see the generated code, which may help you to diagnose performance issues\&.
+
+By default, this option is disabled and assembly code is not printed\&. The \f3-XX:+PrintAssembly\fR option has to be used together with the \f3-XX:UnlockDiagnosticVMOptions\fR option that unlocks diagnostic JVM options\&.
+.TP
+-XX:+PrintCompilation
+.br
 Enables verbose diagnostic output from the JVM by printing a message to the console every time a method is compiled\&. This enables you to see which methods actually get compiled\&. By default, this option is disabled and diagnostic output is not printed\&.
-.sp
-You can also log compilation activity to a file by using the
-\fB\-XX:+LogCompilation\fR
-option\&.
-.RE
-.PP
-\-XX:+PrintInlining
-.RS 4
+
+You can also log compilation activity to a file by using the \f3-XX:+LogCompilation\fR option\&.
+.TP
+-XX:+PrintInlining
+.br
 Enables printing of inlining decisions\&. This enables you to see which methods are getting inlined\&.
-.sp
-By default, this option is disabled and inlining information is not printed\&. The
-\fB\-XX:+PrintInlining\fR
-option has to be used together with the
-\fB\-XX:+UnlockDiagnosticVMOptions\fR
-option that unlocks diagnostic JVM options\&.
-.RE
-.PP
-\-XX:ReservedCodeCacheSize=\fIsize\fR
-.RS 4
-Sets the maximum code cache size (in bytes) for JIT\-compiled code\&. Append the letter
-\fBk\fR
-or
-\fBK\fR
-to indicate kilobytes,
-\fBm\fR
-or
-\fBM\fR
-to indicate megabytes,
-\fBg\fR
-or
-\fBG\fR
-to indicate gigabytes\&. This option is equivalent to
-\fB\-Xmaxjitcodesize\fR\&.
-.RE
-.PP
-\-XX:+TieredCompilation
-.RS 4
+
+By default, this option is disabled and inlining information is not printed\&. The \f3-XX:+PrintInlining\fR option has to be used together with the \f3-XX:+UnlockDiagnosticVMOptions\fR option that unlocks diagnostic JVM options\&.
+.TP
+-XX:ReservedCodeCacheSize=\fIsize\fR
+.br
+Sets the maximum code cache size (in bytes) for JIT-compiled code\&. Append the letter \f3k\fR or \f3K\fR to indicate kilobytes, \f3m\fR or \f3M\fR to indicate megabytes, \f3g\fR or \f3G\fR to indicate gigabytes\&. This option has a limit of 2 GB; otherwise, an error is generated\&. The maximum code cache size should not be less than the initial code cache size; see the option \f3-XX:InitialCodeCacheSize\fR\&. This option is equivalent to \f3-Xmaxjitcodesize\fR\&.
+.TP
+-XX:RTMAbortRatio=\fIabort_ratio\fR
+.br
+The RTM abort ratio is specified as a percentage (%) of all executed RTM transactions\&. If a number of aborted transactions becomes greater than this ratio, then the compiled code will be deoptimized\&. This ratio is used when the \f3-XX:+UseRTMDeopt\fR option is enabled\&. The default value of this option is 50\&. This means that the compiled code will be deoptimized if 50% of all transactions are aborted\&.
+.TP
+-XX:RTMRetryCount=\fInumber_of_retries\fR
+.br
+RTM locking code will be retried, when it is aborted or busy, the number of times specified by this option before falling back to the normal locking mechanism\&. The default value for this option is 5\&. The \f3-XX:UseRTMLocking\fR option must be enabled\&.
+.TP
+-XX:+TieredCompilation
+.br
 Enables the use of tiered compilation\&. By default, this option is enabled\&. Only the Java HotSpot Server VM supports this option\&.
-.RE
-.PP
-\-XX:+UseAES
-.RS 4
-Enables hardware\-based AES intrinsics for Intel, AMD, and SPARC hardware\&. Intel Westmere (2010 and newer), AMD Bulldozer (2011 and newer), and SPARC (T4 and newer) are the supported hardware\&. UseAES is used in conjunction with UseAESIntrinsics\&.
-.RE
-.PP
-\-XX:+UseAESIntrinsics
-.RS 4
-UseAES and UseAESIntrinsics flags are enabled by default and are supported only for Java HotSpot Server VM 32\-bit and 64\-bit\&. To disable hardware\-based AES intrinsics, specify
-\fB\-XX:\-UseAES \-XX:\-UseAESIntrinsics\fR\&. For example, to enable hardware AES, use the following flags:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:+UseAES \-XX:+UseAESIntrinsics\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-To support UseAES and UseAESIntrinsics flags for 32\-bit and 64\-bit use
-\fB\-server\fR
-option to choose Java HotSpot Server VM\&. These flags are not supported on Client VM\&.
-.RE
-.PP
-\-XX:+UseCodeCacheFlushing
-.RS 4
-Enables flushing of the code cache before shutting down the compiler\&. This option is enabled by default\&. To disable flushing of the code cache before shutting down the compiler, specify
-\fB\-XX:\-UseCodeCacheFlushing\fR\&.
-.RE
-.PP
-\-XX:+UseCondCardMark
-.RS 4
+.TP
+-XX:+UseAES
+.br
+Enables hardware-based AES intrinsics for Intel, AMD, and SPARC hardware\&. Intel Westmere (2010 and newer), AMD Bulldozer (2011 and newer), and SPARC (T4 and newer) are the supported hardware\&. UseAES is used in conjunction with UseAESIntrinsics\&.
+.TP
+-XX:+UseAESIntrinsics
+.br
+UseAES and UseAESIntrinsics flags are enabled by default and are supported only for Java HotSpot Server VM 32-bit and 64-bit\&. To disable hardware-based AES intrinsics, specify \f3-XX:-UseAES -XX:-UseAESIntrinsics\fR\&. For example, to enable hardware AES, use the following flags:
+.sp     
+.nf     
+\f3\-XX:+UseAES \-XX:+UseAESIntrinsics\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+To support UseAES and UseAESIntrinsics flags for 32-bit and 64-bit use \f3-server\fR option to choose Java HotSpot Server VM\&. These flags are not supported on Client VM\&.
+.TP
+-XX:+UseCodeCacheFlushing
+.br
+Enables flushing of the code cache before shutting down the compiler\&. This option is enabled by default\&. To disable flushing of the code cache before shutting down the compiler, specify \f3-XX:-UseCodeCacheFlushing\fR\&.
+.TP
+-XX:+UseCondCardMark
+.br
 Enables checking of whether the card is already marked before updating the card table\&. This option is disabled by default and should only be used on machines with multiple sockets, where it will increase performance of Java applications that rely heavily on concurrent operations\&. Only the Java HotSpot Server VM supports this option\&.
-.RE
-.PP
-\-XX:+UseSuperWord
-.RS 4
-Enables the transformation of scalar operations into superword operations\&. This option is enabled by default\&. To disable the transformation of scalar operations into superword operations, specify
-\fB\-XX:\-UseSuperWord\fR\&. Only the Java HotSpot Server VM supports this option\&.
-.RE
-.SS "Experimental JIT Compiler Options"
-.PP
-The options related to the Restricted Transactional Memory (RTM) locking feature in this section are experimental and are not officially supported in Java SE 8u20; you must enable the
-\fB\-XX:+UnlockExperimentalVMOptions\fR
-option to use them\&. These options are only available for the Java HotSpot Server VM on x86 CPUs that support Transactional Synchronization Extensions (TSX)\&.
-.PP
-\-XX:RTMAbortRatio=\fIabort_ratio\fR
-.RS 4
-The RTM abort ratio is specified as a percentage (%) of all executed RTM transactions\&. If a number of aborted transactions becomes greater than this ratio, then the compiled code will be deoptimized\&. This ratio is used when the
-\fB\-XX:+UseRTMDeopt\fR
-option is enabled\&. The default value of this option is 50\&. This means that the compiled code will be deoptimized if 50% of all transactions are aborted\&.
-.RE
-.PP
-\-XX:RTMRetryCount=\fInumber_of_retries\fR
-.RS 4
-RTM locking code will be retried, when it is aborted or busy, the number of times specified by this option before falling back to the normal locking mechanism\&. The default value for this option is 5\&. The
-\fB\-XX:UseRTMLocking\fR
-option must be enabled\&.
-.RE
-.PP
-\-XX:+UseRTMDeopt
-.RS 4
-Auto\-tunes RTM locking depending on the abort ratio\&. This ratio is specified by
-\fB\-XX:RTMAbortRatio\fR
-option\&. If the number of aborted transactions exceeds the abort ratio, then the method containing the lock will be deoptimized and recompiled with all locks as normal locks\&. This option is disabled by default\&. The
-\fB\-XX:UseRTMLocking\fR
-option must be enabled\&.
-.RE
-.PP
-\-XX:+UseRTMLocking
-.RS 4
-Generate Restricted Transactional Memory (RTM) locking code for all inflated locks, with the normal locking mechanism as the fallback handler\&. This option is disabled by default\&.
-.sp
-RTM is part of Intel\*(Aqs Transactional Synchronization Extensions (TSX), which is an x86 instruction set extension and facilitates the creation of multithreaded applications\&. RTM introduces the new instructions
-\fBXBEGIN\fR,
-\fBXABORT\fR,
-\fBXEND\fR, and
-\fBXTEST\fR\&. The
-\fBXBEGIN\fR
-and
-\fBXEND\fR
-instructions enclose a set of instructions to run as a transaction\&. If no conflict is found when running the transaction, the memory and register modifications are committed together at the
-\fBXEND\fR
-instruction\&. The
-\fBXABORT\fR
-instruction can be used to explicitly abort a transaction and the
-\fBXEND\fR
-instruction to check if a set of instructions are being run in a transaction\&.
-.sp
-A lock on a transaction is inflated when another thread tries to access the same transaction, thereby blocking the thread that did not originally request access to the transaction\&. RTM requires that a fallback set of operations be specified in case a transaction aborts or fails\&. An RTM lock is a lock that has been delegated to the TSX\*(Aqs system\&.
-.sp
-RTM improves performance for highly contended locks with low conflict in a critical region (which is code that must not be accessed by more than one thread concurrently)\&. RTM also improves the performance of coarse\-grain locking, which typically does not perform well in multithreaded applications\&. (Coarse\-grain locking is the strategy of holding locks for long periods to minimize the overhead of taking and releasing locks, while fine\-grained locking is the strategy of trying to achieve maximum parallelism by locking only when necessary and unlocking as soon as possible\&.) Also, for lightly contended locks that are used by different threads, RTM can reduce false cache line sharing, also known as cache line ping\-pong\&. This occurs when multiple threads from different processors are accessing different resources, but the resources share the same cache line\&. As a result, the processors repeatedly invalidate the cache lines of other processors, which forces them to read from main memory instead of their cache\&.
-.RE
-.SS "Advanced Serviceability Options"
-.PP
+.TP
+-XX:+UseRTMDeopt
+.br
+Auto-tunes RTM locking depending on the abort ratio\&. This ratio is specified by \f3-XX:RTMAbortRatio\fR option\&. If the number of aborted transactions exceeds the abort ratio, then the method containing the lock will be deoptimized and recompiled with all locks as normal locks\&. This option is disabled by default\&. The \f3-XX:+UseRTMLocking\fR option must be enabled\&.
+.TP
+-XX:+UseRTMLocking
+.br
+Generate Restricted Transactional Memory (RTM) locking code for all inflated locks, with the normal locking mechanism as the fallback handler\&. This option is disabled by default\&. Options related to RTM are only available for the Java HotSpot Server VM on x86 CPUs that support Transactional Synchronization Extensions (TSX)\&.
+
+RTM is part of Intel\&'s TSX, which is an x86 instruction set extension and facilitates the creation of multithreaded applications\&. RTM introduces the new instructions \f3XBEGIN\fR, \f3XABORT\fR, \f3XEND\fR, and \f3XTEST\fR\&. The \f3XBEGIN\fR and \f3XEND\fR instructions enclose a set of instructions to run as a transaction\&. If no conflict is found when running the transaction, the memory and register modifications are committed together at the \f3XEND\fR instruction\&. The \f3XABORT\fR instruction can be used to explicitly abort a transaction and the \f3XEND\fR instruction to check if a set of instructions are being run in a transaction\&.
+
+A lock on a transaction is inflated when another thread tries to access the same transaction, thereby blocking the thread that did not originally request access to the transaction\&. RTM requires that a fallback set of operations be specified in case a transaction aborts or fails\&. An RTM lock is a lock that has been delegated to the TSX\&'s system\&.
+
+RTM improves performance for highly contended locks with low conflict in a critical region (which is code that must not be accessed by more than one thread concurrently)\&. RTM also improves the performance of coarse-grain locking, which typically does not perform well in multithreaded applications\&. (Coarse-grain locking is the strategy of holding locks for long periods to minimize the overhead of taking and releasing locks, while fine-grained locking is the strategy of trying to achieve maximum parallelism by locking only when necessary and unlocking as soon as possible\&.) Also, for lightly contended locks that are used by different threads, RTM can reduce false cache line sharing, also known as cache line ping-pong\&. This occurs when multiple threads from different processors are accessing different resources, but the resources share the same cache line\&. As a result, the processors repeatedly invalidate the cache lines of other processors, which forces them to read from main memory instead of their cache\&.
+.TP
+-XX:+UseSHA
+.br
+Enables hardware-based intrinsics for SHA crypto hash functions for SPARC hardware\&. \f3UseSHA\fR is used in conjunction with the \f3UseSHA1Intrinsics\fR, \f3UseSHA256Intrinsics\fR, and \f3UseSHA512Intrinsics\fR options\&.
+
+The \f3UseSHA\fR and \f3UseSHA*Intrinsics\fR flags are enabled by default, and are supported only for Java HotSpot Server VM 64-bit on SPARC T4 and newer\&.
+
+This feature is only applicable when using the \f3sun\&.security\&.provider\&.Sun\fR provider for SHA operations\&.
+
+To disable all hardware-based SHA intrinsics, specify \f3-XX:-UseSHA\fR\&. To disable only a particular SHA intrinsic, use the appropriate corresponding option\&. For example: \f3-XX:-UseSHA256Intrinsics\fR\&.
+.TP
+-XX:+UseSHA1Intrinsics
+.br
+Enables intrinsics for SHA-1 crypto hash function\&.
+.TP
+-XX:+UseSHA256Intrinsics
+.br
+Enables intrinsics for SHA-224 and SHA-256 crypto hash functions\&.
+.TP
+-XX:+UseSHA512Intrinsics
+.br
+Enables intrinsics for SHA-384 and SHA-512 crypto hash functions\&.
+.TP
+-XX:+UseSuperWord
+.br
+Enables the transformation of scalar operations into superword operations\&. This option is enabled by default\&. To disable the transformation of scalar operations into superword operations, specify \f3-XX:-UseSuperWord\fR\&. Only the Java HotSpot Server VM supports this option\&.
+.SS ADVANCED\ SERVICEABILITY\ OPTIONS    
 These options provide the ability to gather system information and perform extensive debugging\&.
-.PP
-\-XX:+ExtendedDTraceProbes
-.RS 4
-Enables additional
-\fBdtrace\fR
-tool probes that impact the performance\&. By default, this option is disabled and
-\fBdtrace\fR
-performs only standard probes\&.
-.RE
-.PP
-\-XX:+HeapDumpOnOutOfMemory
-.RS 4
-Enables the dumping of the Java heap to a file in the current directory by using the heap profiler (HPROF) when a
-\fBjava\&.lang\&.OutOfMemoryError\fR
-exception is thrown\&. You can explicitly set the heap dump file path and name using the
-\fB\-XX:HeapDumpPath\fR
-option\&. By default, this option is disabled and the heap is not dumped when an
-\fBOutOfMemoryError\fR
-exception is thrown\&.
-.RE
-.PP
-\-XX:HeapDumpPath=\fIpath\fR
-.RS 4
-Sets the path and file name for writing the heap dump provided by the heap profiler (HPROF) when the
-\fB\-XX:+HeapDumpOnOutOfMemoryError\fR
-option is set\&. By default, the file is created in the current working directory, and it is named
-\fBjava_pid\fR\fIpid\fR\fB\&.hprof\fR
-where
-\fIpid\fR
-is the identifier of the process that caused the error\&. The following example shows how to set the default file explicitly (\fB%p\fR
-represents the current process identificator):
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:HeapDumpPath=\&./java_pid%p\&.hprof\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-The following example shows how to set the heap dump file to
-\fB/var/log/java/java_heapdump\&.hprof\fR:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:HeapDumpPath=/var/log/java/java_heapdump\&.hprof\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
-\-XX:LogFile=\fIpath\fR
-.RS 4
-Sets the path and file name where log data is written\&. By default, the file is created in the current working directory, and it is named
-\fBhotspot\&.log\fR\&.
-.sp
-The following example shows how to set the log file to
-\fB/var/log/java/hotspot\&.log\fR:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:LogFile=/var/log/java/hotspot\&.log\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
-\-XX:+PrintClassHistogram
-.RS 4
-Enables printing of a class instance histogram after a
-\fBControl+C\fR
-event (\fBSIGTERM\fR)\&. By default, this option is disabled\&.
-.sp
-Setting this option is equivalent to running the
-\fBjmap \-histo\fR
-command, or the
-\fBjcmd \fR\fIpid\fR\fB GC\&.class_histogram\fR
-command, where
-\fIpid\fR
-is the current Java process identifier\&.
-.RE
-.PP
-\-XX:+PrintConcurrentLocks
-.RS 4
-Enables printing of j locks after a event\&. By default, this option is disabled\&.
-.sp
-Enables printing of j\fBava\&.util\&.concurrent\fR
-locks after a
-\fBControl+C\fR
-event (\fBSIGTERM\fR)\&. By default, this option is disabled\&.
-.sp
-Setting this option is equivalent to running the
-\fBjstack \-l\fR
-command or the
-\fBjcmd \fR\fIpid\fR\fB Thread\&.print \-l\fR
-command, where
-\fIpid\fR
-is the current Java process identifier\&.
-.RE
-.PP
-\-XX:+UnlockDiagnosticVMOptions
-.RS 4
+.TP
+-XX:+ExtendedDTraceProbes
+.br
+Enables additional \f3dtrace\fR tool probes that impact the performance\&. By default, this option is disabled and \f3dtrace\fR performs only standard probes\&.
+.TP
+-XX:+HeapDumpOnOutOfMemory
+.br
+Enables the dumping of the Java heap to a file in the current directory by using the heap profiler (HPROF) when a \f3java\&.lang\&.OutOfMemoryError\fR exception is thrown\&. You can explicitly set the heap dump file path and name using the \f3-XX:HeapDumpPath\fR option\&. By default, this option is disabled and the heap is not dumped when an \f3OutOfMemoryError\fR exception is thrown\&.
+.TP
+-XX:HeapDumpPath=\fIpath\fR
+.br
+Sets the path and file name for writing the heap dump provided by the heap profiler (HPROF) when the \f3-XX:+HeapDumpOnOutOfMemoryError\fR option is set\&. By default, the file is created in the current working directory, and it is named \f3java_pid\fR\fIpid\fR\f3\&.hprof\fR where \fIpid\fR is the identifier of the process that caused the error\&. The following example shows how to set the default file explicitly (\f3%p\fR represents the current process identificator):
+.sp     
+.nf     
+\f3\-XX:HeapDumpPath=\&./java_pid%p\&.hprof\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+\fI\fRThe following example shows how to set the heap dump file to \f3/var/log/java/java_heapdump\&.hprof\fR:
+.sp     
+.nf     
+\f3\-XX:HeapDumpPath=/var/log/java/java_heapdump\&.hprof\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP
+-XX:LogFile=\fIpath\fR
+.br
+Sets the path and file name where log data is written\&. By default, the file is created in the current working directory, and it is named \f3hotspot\&.log\fR\&.
+
+\fI\fRThe following example shows how to set the log file to \f3/var/log/java/hotspot\&.log\fR:
+.sp     
+.nf     
+\f3\-XX:LogFile=/var/log/java/hotspot\&.log\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP
+-XX:+PrintClassHistogram
+.br
+\fI\fREnables printing of a class instance histogram after a \f3Control+C\fR event (\f3SIGTERM\fR)\&. By default, this option is disabled\&.
+
+Setting this option is equivalent to running the \f3jmap -histo\fR command, or the \f3jcmd\fR\fIpid\fR\f3GC\&.class_histogram\fR command, where \fIpid\fR is the current Java process identifier\&.
+.TP     
+-XX:+PrintConcurrentLocks
+
+
+Enables printing of \f3java\&.util\&.concurrent\fR locks after a \f3Control+C\fR event (\f3SIGTERM\fR)\&. By default, this option is disabled\&.
+
+Setting this option is equivalent to running the \f3jstack -l\fR command or the \f3jcmd\fR\fIpid\fR\f3Thread\&.print -l\fR command, where \fIpid\fR is the current Java process identifier\&.
+.TP
+-XX:+UnlockDiagnosticVMOptions
+.br
 Unlocks the options intended for diagnosing the JVM\&. By default, this option is disabled and diagnostic options are not available\&.
-.RE
-.SS "Advanced Garbage Collection Options"
-.PP
+.SS ADVANCED\ GARBAGE\ COLLECTION\ OPTIONS    
 These options control how garbage collection (GC) is performed by the Java HotSpot VM\&.
-.PP
-\-XX:+AggressiveHeap
-.RS 4
-Enables Java heap optimization\&. This sets various parameters to be optimal for long\-running jobs with intensive memory allocation, based on the configuration of the computer (RAM and CPU)\&. By default, the option is disabled and the heap is not optimized\&.
-.RE
-.PP
-\-XX:+AlwaysPreTouch
-.RS 4
-Enables touching of every page on the Java heap during JVM initialization\&. This gets all pages into the memory before entering the
-\fBmain()\fR
-method\&. The option can be used in testing to simulate a long\-running system with all virtual memory mapped to physical memory\&. By default, this option is disabled and all pages are committed as JVM heap space fills\&.
-.RE
-.PP
-\-XX:+CMSClassUnloadingEnabled
-.RS 4
-Enables class unloading when using the concurrent mark\-sweep (CMS) garbage collector\&. This option is enabled by default\&. To disable class unloading for the CMS garbage collector, specify
-\fB\-XX:\-CMSClassUnloadingEnabled\fR\&.
-.RE
-.PP
-\-XX:CMSExpAvgFactor=\fIpercent\fR
-.RS 4
+.TP
+-XX:+AggressiveHeap
+.br
+Enables Java heap optimization\&. This sets various parameters to be optimal for long-running jobs with intensive memory allocation, based on the configuration of the computer (RAM and CPU)\&. By default, the option is disabled and the heap is not optimized\&.
+.TP
+-XX:+AlwaysPreTouch
+.br
+Enables touching of every page on the Java heap during JVM initialization\&. This gets all pages into the memory before entering the \f3main()\fR method\&. The option can be used in testing to simulate a long-running system with all virtual memory mapped to physical memory\&. By default, this option is disabled and all pages are committed as JVM heap space fills\&.
+.TP
+-XX:+CMSClassUnloadingEnabled
+.br
+Enables class unloading when using the concurrent mark-sweep (CMS) garbage collector\&. This option is enabled by default\&. To disable class unloading for the CMS garbage collector, specify \f3-XX:-CMSClassUnloadingEnabled\fR\&.
+.TP
+-XX:CMSExpAvgFactor=\fIpercent\fR
+.br
 Sets the percentage of time (0 to 100) used to weight the current sample when computing exponential averages for the concurrent collection statistics\&. By default, the exponential averages factor is set to 25%\&. The following example shows how to set the factor to 15%:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:CMSExpAvgFactor=15\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
-\-XX:CMSInitiatingOccupancyFraction=\fIpercent\fR
-.RS 4
-Sets the percentage of the old generation occupancy (0 to 100) at which to start a CMS collection cycle\&. The default value is set to \-1\&. Any negative value (including the default) implies that
-\fB\-XX:CMSTriggerRatio\fR
-is used to define the value of the initiating occupancy fraction\&.
-.sp
+.sp     
+.nf     
+\f3\-XX:CMSExpAvgFactor=15\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP
+-XX:CMSInitiatingOccupancyFraction=\fIpercent\fR
+.br
+Sets the percentage of the old generation occupancy (0 to 100) at which to start a CMS collection cycle\&. The default value is set to -1\&. Any negative value (including the default) implies that \f3-XX:CMSTriggerRatio\fR is used to define the value of the initiating occupancy fraction\&.
+
 The following example shows how to set the occupancy fraction to 20%:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:CMSInitiatingOccupancyFraction=20\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
-\-XX:+CMSScavengeBeforeRemark
-.RS 4
+.sp     
+.nf     
+\f3\-XX:CMSInitiatingOccupancyFraction=20\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP
+-XX:+CMSScavengeBeforeRemark
+.br
 Enables scavenging attempts before the CMS remark step\&. By default, this option is disabled\&.
-.RE
-.PP
-\-XX:CMSTriggerRatio=\fIpercent\fR
-.RS 4
-Sets the percentage (0 to 100) of the value specified by
-\fB\-XX:MinHeapFreeRatio\fR
-that is allocated before a CMS collection cycle commences\&. The default value is set to 80%\&.
-.sp
+.TP
+-XX:CMSTriggerRatio=\fIpercent\fR
+.br
+Sets the percentage (0 to 100) of the value specified by \f3-XX:MinHeapFreeRatio\fR that is allocated before a CMS collection cycle commences\&. The default value is set to 80%\&.
+
 The following example shows how to set the occupancy fraction to 75%:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:CMSTriggerRatio=75\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
-\-XX:ConcGCThreads=\fIthreads\fR
-.RS 4
+.sp     
+.nf     
+\f3\-XX:CMSTriggerRatio=75\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP
+-XX:ConcGCThreads=\fIthreads\fR
+.br
 Sets the number of threads used for concurrent GC\&. The default value depends on the number of CPUs available to the JVM\&.
-.sp
+
 For example, to set the number of threads for concurrent GC to 2, specify the following option:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:ConcGCThreads=2\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
-\-XX:+DisableExplicitGC
-.RS 4
-Enables the option that disables processing of calls to
-\fBSystem\&.gc()\fR\&. This option is disabled by default, meaning that calls to
-\fBSystem\&.gc()\fR
-are processed\&. If processing of calls to
-\fBSystem\&.gc()\fR
-is disabled, the JVM still performs GC when necessary\&.
-.RE
-.PP
-\-XX:+ExplicitGCInvokesConcurrent
-.RS 4
-Enables invoking of concurrent GC by using the
-\fBSystem\&.gc()\fR
-request\&. This option is disabled by default and can be enabled only together with the
-\fB\-XX:+UseConcMarkSweepGC\fR
-option\&.
-.RE
-.PP
-\-XX:+ExplicitGCInvokesConcurrentAndUnloadsClasses
-.RS 4
-Enables invoking of concurrent GC by using the
-\fBSystem\&.gc()\fR
-request and unloading of classes during the concurrent GC cycle\&. This option is disabled by default and can be enabled only together with the
-\fB\-XX:+UseConcMarkSweepGC\fR
-option\&.
-.RE
-.PP
-\-XX:G1HeapRegionSize=\fIsize\fR
-.RS 4
-Sets the size of the regions into which the Java heap is subdivided when using the garbage\-first (G1) collector\&. The value can be between 1 MB and 32 MB\&. The default region size is determined ergonomically based on the heap size\&.
-.sp
+.sp     
+.nf     
+\f3\-XX:ConcGCThreads=2\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP
+-XX:+DisableExplicitGC
+.br
+Enables the option that disables processing of calls to \f3System\&.gc()\fR\&. This option is disabled by default, meaning that calls to \f3System\&.gc()\fR are processed\&. If processing of calls to \f3System\&.gc()\fR is disabled, the JVM still performs GC when necessary\&.
+.TP
+-XX:+ExplicitGCInvokesConcurrent
+.br
+Enables invoking of concurrent GC by using the \f3System\&.gc()\fR request\&. This option is disabled by default and can be enabled only together with the \f3-XX:+UseConcMarkSweepGC\fR option\&.
+.TP
+-XX:+ExplicitGCInvokesConcurrentAndUnloadsClasses
+.br
+Enables invoking of concurrent GC by using the \f3System\&.gc()\fR request and unloading of classes during the concurrent GC cycle\&. This option is disabled by default and can be enabled only together with the \f3-XX:+UseConcMarkSweepGC\fR option\&.
+.TP
+-XX:G1HeapRegionSize=\fIsize\fR
+.br
+Sets the size of the regions into which the Java heap is subdivided when using the garbage-first (G1) collector\&. The value can be between 1 MB and 32 MB\&. The default region size is determined ergonomically based on the heap size\&.
+
 The following example shows how to set the size of the subdivisions to 16 MB:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:G1HeapRegionSize=16m\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
-\-XX:+G1PrintHeapRegions
-.RS 4
+.sp     
+.nf     
+\f3\-XX:G1HeapRegionSize=16m\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP
+-XX:+G1PrintHeapRegions
+.br
 Enables the printing of information about which regions are allocated and which are reclaimed by the G1 collector\&. By default, this option is disabled\&.
-.RE
-.PP
-\-XX:G1ReservePercent=\fIpercent\fR
-.RS 4
+.TP
+-XX:G1ReservePercent=\fIpercent\fR
+.br
 Sets the percentage of the heap (0 to 50) that is reserved as a false ceiling to reduce the possibility of promotion failure for the G1 collector\&. By default, this option is set to 10%\&.
-.sp
+
 The following example shows how to set the reserved heap to 20%:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:G1ReservePercent=20\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
-\-XX:InitialHeapSize=\fIsize\fR
-.RS 4
-Sets the initial size (in bytes) of the memory allocation pool\&. This value must be either 0, or a multiple of 1024 and greater than 1 MB\&. Append the letter
-\fBk\fR
-or
-\fBK\fR
-to indicate kilobytes,
-\fBm\fR
-or
-\fBM\fR
-to indicate megabytes,
-\fBg\fR
-or
-\fBG\fR
-to indicate gigabytes\&. The default value is chosen at runtime based on system configuration\&. For more information, see Garbage Collector Ergonomics at http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/vm/gc\-ergonomics\&.html
-.sp
+.sp     
+.nf     
+\f3\-XX:G1ReservePercent=20\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP
+-XX:InitialHeapSize=\fIsize\fR
+.br
+Sets the initial size (in bytes) of the memory allocation pool\&. This value must be either 0, or a multiple of 1024 and greater than 1 MB\&. Append the letter \f3k\fR or \f3K\fR to indicate kilobytes, \f3m\fR or \f3M\fR to indicate megabytes, \f3g\fR or \f3G\fR to indicate gigabytes\&. The default value is chosen at runtime based on system configuration\&. See the section "Ergonomics" in \fIJava SE HotSpot Virtual Machine Garbage Collection Tuning Guide\fR at http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/vm/gctuning/index\&.html\&.
+
 The following examples show how to set the size of allocated memory to 6 MB using various units:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:InitialHeapSize=6291456\fR
-\fB\-XX:InitialHeapSize=6144k\fR
-\fB\-XX:InitialHeapSize=6m\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-If you set this option to 0, then the initial size will be set as the sum of the sizes allocated for the old generation and the young generation\&. The size of the heap for the young generation can be set using the
-\fB\-XX:NewSize\fR
-option\&.
-.RE
-.PP
-\-XX:InitialSurvivorRatio=\fIratio\fR
-.RS 4
-Sets the initial survivor space ratio used by the throughput garbage collector (which is enabled by the
-\fB\-XX:+UseParallelGC\fR
-and/or \-\fBXX:+UseParallelOldGC\fR
-options)\&. Adaptive sizing is enabled by default with the throughput garbage collector by using the
-\fB\-XX:+UseParallelGC\fR
-and
-\fB\-XX:+UseParallelOldGC\fR
-options, and survivor space is resized according to the application behavior, starting with the initial value\&. If adaptive sizing is disabled (using the
-\fB\-XX:\-UseAdaptiveSizePolicy\fR
-option), then the
-\fB\-XX:SurvivorRatio\fR
-option should be used to set the size of the survivor space for the entire execution of the application\&.
-.sp
+.sp     
+.nf     
+\f3\-XX:InitialHeapSize=6291456\fP
+.fi     
+.nf     
+\f3\-XX:InitialHeapSize=6144k\fP
+.fi     
+.nf     
+\f3\-XX:InitialHeapSize=6m\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+If you set this option to 0, then the initial size will be set as the sum of the sizes allocated for the old generation and the young generation\&. The size of the heap for the young generation can be set using the \f3-XX:NewSize\fR option\&.
+.TP
+-XX:InitialSurvivorRatio=\fIratio\fR
+.br
+Sets the initial survivor space ratio used by the throughput garbage collector (which is enabled by the \f3-XX:+UseParallelGC\fR and/or -\f3XX:+UseParallelOldGC\fR options)\&. Adaptive sizing is enabled by default with the throughput garbage collector by using the \f3-XX:+UseParallelGC\fR and \f3-XX:+UseParallelOldGC\fR options, and survivor space is resized according to the application behavior, starting with the initial value\&. If adaptive sizing is disabled (using the \f3-XX:-UseAdaptiveSizePolicy\fR option), then the \f3-XX:SurvivorRatio\fR option should be used to set the size of the survivor space for the entire execution of the application\&.
+
 The following formula can be used to calculate the initial size of survivor space (S) based on the size of the young generation (Y), and the initial survivor space ratio (R):
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBS=Y/(R+2)\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
+.sp     
+.nf     
+\f3S=Y/(R+2)\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
 The 2 in the equation denotes two survivor spaces\&. The larger the value specified as the initial survivor space ratio, the smaller the initial survivor space size\&.
-.sp
+
 By default, the initial survivor space ratio is set to 8\&. If the default value for the young generation space size is used (2 MB), the initial size of the survivor space will be 0\&.2 MB\&.
-.sp
+
 The following example shows how to set the initial survivor space ratio to 4:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:InitialSurvivorRatio=4\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
-\-XX:InitiatingHeapOccupancyPercent=\fIpercent\fR
-.RS 4
+.sp     
+.nf     
+\f3\-XX:InitialSurvivorRatio=4\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP
+-XX:InitiatingHeapOccupancyPercent=\fIpercent\fR
+.br
 Sets the percentage of the heap occupancy (0 to 100) at which to start a concurrent GC cycle\&. It is used by garbage collectors that trigger a concurrent GC cycle based on the occupancy of the entire heap, not just one of the generations (for example, the G1 garbage collector)\&.
-.sp
+
 By default, the initiating value is set to 45%\&. A value of 0 implies nonstop GC cycles\&. The following example shows how to set the initiating heap occupancy to 75%:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:InitiatingHeapOccupancyPercent=75\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
-\-XX:MaxGCPauseMillis=\fItime\fR
-.RS 4
+.sp     
+.nf     
+\f3\-XX:InitiatingHeapOccupancyPercent=75\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP
+-XX:MaxGCPauseMillis=\fItime\fR
+.br
 Sets a target for the maximum GC pause time (in milliseconds)\&. This is a soft goal, and the JVM will make its best effort to achieve it\&. By default, there is no maximum pause time value\&.
-.sp
+
 The following example shows how to set the maximum target pause time to 500 ms:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:MaxGCPauseMillis=500\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
-\-XX:MaxHeapSize=\fIsize\fR
-.RS 4
-Sets the maximum size (in byes) of the memory allocation pool\&. This value must be a multiple of 1024 and greater than 2 MB\&. Append the letter
-\fBk\fR
-or
-\fBK\fR
-to indicate kilobytes,
-\fBm\fR
-or
-\fBM\fR
-to indicate megabytes,
-\fBg\fR
-or
-\fBG\fR
-to indicate gigabytes\&. The default value is chosen at runtime based on system configuration\&. For server deployments,
-\fB\-XX:InitialHeapSize\fR
-and
-\fB\-XX:MaxHeapSize\fR
-are often set to the same value\&. For more information, see Garbage Collector Ergonomics at http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/vm/gc\-ergonomics\&.html
-.sp
+.sp     
+.nf     
+\f3\-XX:MaxGCPauseMillis=500\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP
+-XX:MaxHeapSize=\fIsize\fR
+.br
+Sets the maximum size (in byes) of the memory allocation pool\&. This value must be a multiple of 1024 and greater than 2 MB\&. Append the letter \f3k\fR or \f3K\fR to indicate kilobytes, \f3m\fR or \f3M\fR to indicate megabytes, \f3g\fR or \f3G\fR to indicate gigabytes\&. The default value is chosen at runtime based on system configuration\&. For server deployments, \f3-XX:InitialHeapSize\fR and \f3-XX:MaxHeapSize\fR are often set to the same value\&. See the section "Ergonomics" in \fIJava SE HotSpot Virtual Machine Garbage Collection Tuning Guide\fR at http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/vm/gctuning/index\&.html\&.
+
 The following examples show how to set the maximum allowed size of allocated memory to 80 MB using various units:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:MaxHeapSize=83886080\fR
-\fB\-XX:MaxHeapSize=81920k\fR
-\fB\-XX:MaxHeapSize=80m\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
+.sp     
+.nf     
+\f3\-XX:MaxHeapSize=83886080\fP
+.fi     
+.nf     
+\f3\-XX:MaxHeapSize=81920k\fP
+.fi     
+.nf     
+\f3\-XX:MaxHeapSize=80m\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
 On Oracle Solaris 7 and Oracle Solaris 8 SPARC platforms, the upper limit for this value is approximately 4,000 MB minus overhead amounts\&. On Oracle Solaris 2\&.6 and x86 platforms, the upper limit is approximately 2,000 MB minus overhead amounts\&. On Linux platforms, the upper limit is approximately 2,000 MB minus overhead amounts\&.
-.sp
-The
-\fB\-XX:MaxHeapSize\fR
-option is equivalent to
-\fB\-Xmx\fR\&.
-.RE
-.PP
-\-XX:MaxHeapFreeRatio=\fIpercent\fR
-.RS 4
+
+The \f3-XX:MaxHeapSize\fR option is equivalent to \f3-Xmx\fR\&.
+.TP
+-XX:MaxHeapFreeRatio=\fIpercent\fR
+.br
 Sets the maximum allowed percentage of free heap space (0 to 100) after a GC event\&. If free heap space expands above this value, then the heap will be shrunk\&. By default, this value is set to 70%\&.
-.sp
+
 The following example shows how to set the maximum free heap ratio to 75%:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:MaxHeapFreeRatio=75\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
-\-XX:MaxMetaspaceSize=\fIsize\fR
-.RS 4
+.sp     
+.nf     
+\f3\-XX:MaxHeapFreeRatio=75\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP
+-XX:MaxMetaspaceSize=\fIsize\fR
+.br
 Sets the maximum amount of native memory that can be allocated for class metadata\&. By default, the size is not limited\&. The amount of metadata for an application depends on the application itself, other running applications, and the amount of memory available on the system\&.
-.sp
+
 The following example shows how to set the maximum class metadata size to 256 MB:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:MaxMetaspaceSize=256m\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
-\-XX:MaxNewSize=\fIsize\fR
-.RS 4
+.sp     
+.nf     
+\f3\-XX:MaxMetaspaceSize=256m\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP
+-XX:MaxNewSize=\fIsize\fR
+.br
 Sets the maximum size (in bytes) of the heap for the young generation (nursery)\&. The default value is set ergonomically\&.
-.RE
-.PP
-\-XX:MaxTenuringThreshold=\fIthreshold\fR
-.RS 4
+.TP
+-XX:MaxTenuringThreshold=\fIthreshold\fR
+.br
 Sets the maximum tenuring threshold for use in adaptive GC sizing\&. The largest value is 15\&. The default value is 15 for the parallel (throughput) collector, and 6 for the CMS collector\&.
-.sp
+
 The following example shows how to set the maximum tenuring threshold to 10:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:MaxTenuringThreshold=10\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
-\-XX:MetaspaceSize=\fIsize\fR
-.RS 4
+.sp     
+.nf     
+\f3\-XX:MaxTenuringThreshold=10\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP
+-XX:MetaspaceSize=\fIsize\fR
+.br
 Sets the size of the allocated class metadata space that will trigger a garbage collection the first time it is exceeded\&. This threshold for a garbage collection is increased or decreased depending on the amount of metadata used\&. The default size depends on the platform\&.
-.RE
-.PP
-\-XX:MinHeapFreeRatio=\fIpercent\fR
-.RS 4
+.TP
+-XX:MinHeapFreeRatio=\fIpercent\fR
+.br
 Sets the minimum allowed percentage of free heap space (0 to 100) after a GC event\&. If free heap space falls below this value, then the heap will be expanded\&. By default, this value is set to 40%\&.
-.sp
+
 The following example shows how to set the minimum free heap ratio to 25%:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:MinHeapFreeRatio=25\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
-\-XX:NewRatio=\fIratio\fR
-.RS 4
+.sp     
+.nf     
+\f3\-XX:MinHeapFreeRatio=25\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP
+-XX:NewRatio=\fIratio\fR
+.br
 Sets the ratio between young and old generation sizes\&. By default, this option is set to 2\&. The following example shows how to set the young/old ratio to 1:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:NewRatio=1\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
-\-XX:NewSize=\fIsize\fR
-.RS 4
-Sets the initial size (in bytes) of the heap for the young generation (nursery)\&. Append the letter
-\fBk\fR
-or
-\fBK\fR
-to indicate kilobytes,
-\fBm\fR
-or
-\fBM\fR
-to indicate megabytes,
-\fBg\fR
-or
-\fBG\fR
-to indicate gigabytes\&.
-.sp
+.sp     
+.nf     
+\f3\-XX:NewRatio=1\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP
+-XX:NewSize=\fIsize\fR
+.br
+Sets the initial size (in bytes) of the heap for the young generation (nursery)\&. Append the letter \f3k\fR or \f3K\fR to indicate kilobytes, \f3m\fR or \f3M\fR to indicate megabytes, \f3g\fR or \f3G\fR to indicate gigabytes\&.
+
 The young generation region of the heap is used for new objects\&. GC is performed in this region more often than in other regions\&. If the size for the young generation is too low, then a large number of minor GCs will be performed\&. If the size is too high, then only full GCs will be performed, which can take a long time to complete\&. Oracle recommends that you keep the size for the young generation between a half and a quarter of the overall heap size\&.
-.sp
+
 The following examples show how to set the initial size of young generation to 256 MB using various units:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:NewSize=256m\fR
-\fB\-XX:NewSize=262144k\fR
-\fB\-XX:NewSize=268435456\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-The
-\fB\-XX:NewSize\fR
-option is equivalent to
-\fB\-Xmn\fR\&.
-.RE
-.PP
-\-XX:ParallelGCThreads=\fIthreads\fR
-.RS 4
+.sp     
+.nf     
+\f3\-XX:NewSize=256m\fP
+.fi     
+.nf     
+\f3\-XX:NewSize=262144k\fP
+.fi     
+.nf     
+\f3\-XX:NewSize=268435456\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+The \f3-XX:NewSize\fR option is equivalent to \f3-Xmn\fR\&.
+.TP
+-XX:ParallelGCThreads=\fIthreads\fR
+.br
 Sets the number of threads used for parallel garbage collection in the young and old generations\&. The default value depends on the number of CPUs available to the JVM\&.
-.sp
+
 For example, to set the number of threads for parallel GC to 2, specify the following option:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:ParallelGCThreads=2\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
-\-XX:+ParallelRefProcEnabled
-.RS 4
+.sp     
+.nf     
+\f3\-XX:ParallelGCThreads=2\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP
+-XX:+ParallelRefProcEnabled
+.br
 Enables parallel reference processing\&. By default, this option is disabled\&.
-.RE
-.PP
-\-XX:+PrintAdaptiveSizePolicy
-.RS 4
+.TP
+-XX:+PrintAdaptiveSizePolicy
+.br
 Enables printing of information about adaptive generation sizing\&. By default, this option is disabled\&.
-.RE
-.PP
-\-XX:+PrintGC
-.RS 4
+.TP
+-XX:+PrintGC
+.br
 Enables printing of messages at every GC\&. By default, this option is disabled\&.
-.RE
-.PP
-\-XX:+PrintGCApplicationConcurrentTime
-.RS 4
+.TP
+-XX:+PrintGCApplicationConcurrentTime
+.br
 Enables printing of how much time elapsed since the last pause (for example, a GC pause)\&. By default, this option is disabled\&.
-.RE
-.PP
-\-XX:+PrintGCApplicationStoppedTime
-.RS 4
+.TP
+-XX:+PrintGCApplicationStoppedTime
+.br
 Enables printing of how much time the pause (for example, a GC pause) lasted\&. By default, this option is disabled\&.
-.RE
-.PP
-\-XX:+PrintGCDateStamps
-.RS 4
+.TP
+-XX:+PrintGCDateStamps
+.br
 Enables printing of a date stamp at every GC\&. By default, this option is disabled\&.
-.RE
-.PP
-\-XX:+PrintGCDetails
-.RS 4
+.TP
+-XX:+PrintGCDetails
+.br
 Enables printing of detailed messages at every GC\&. By default, this option is disabled\&.
-.RE
-.PP
-\-XX:+PrintGCTaskTimeStamps
-.RS 4
+.TP
+-XX:+PrintGCTaskTimeStamps
+.br
 Enables printing of time stamps for every individual GC worker thread task\&. By default, this option is disabled\&.
-.RE
-.PP
-\-XX:+PrintGCTimeStamps
-.RS 4
+.TP
+-XX:+PrintGCTimeStamps
+.br
 Enables printing of time stamps at every GC\&. By default, this option is disabled\&.
-.RE
-.PP
-\-XX:+PrintStringDeduplicationStatistics
-.RS 4
-Prints detailed deduplication statistics\&. By default, this option is disabled\&. See the
-\fB\-XX:+UseStringDeduplication\fR
-option\&.
-.RE
-.PP
-\-XX:+PrintTenuringDistribution
-.RS 4
+.TP
+-XX:+PrintStringDeduplicationStatistics
+.br
+Prints detailed deduplication statistics\&. By default, this option is disabled\&. See the \f3-XX:+UseStringDeduplication\fR option\&.
+.TP
+-XX:+PrintTenuringDistribution
+.br
 Enables printing of tenuring age information\&. The following is an example of the output:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBDesired survivor size 48286924 bytes, new threshold 10 (max 10)\fR
-\fB\- age 1: 28992024 bytes, 28992024 total\fR
-\fB\- age 2: 1366864 bytes, 30358888 total\fR
-\fB\- age 3: 1425912 bytes, 31784800 total\fR
-\fB\&.\&.\&.\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
+.sp     
+.nf     
+\f3Desired survivor size 48286924 bytes, new threshold 10 (max 10)\fP
+.fi     
+.nf     
+\f3\- age 1: 28992024 bytes, 28992024 total\fP
+.fi     
+.nf     
+\f3\- age 2: 1366864 bytes, 30358888 total\fP
+.fi     
+.nf     
+\f3\- age 3: 1425912 bytes, 31784800 total\fP
+.fi     
+.nf     
+\f3\&.\&.\&.\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
 Age 1 objects are the youngest survivors (they were created after the previous scavenge, survived the latest scavenge, and moved from eden to survivor space)\&. Age 2 objects have survived two scavenges (during the second scavenge they were copied from one survivor space to the next)\&. And so on\&.
-.sp
+
 In the preceding example, 28 992 024 bytes survived one scavenge and were copied from eden to survivor space, 1 366 864 bytes are occupied by age 2 objects, etc\&. The third value in each row is the cumulative size of objects of age n or less\&.
-.sp
+
 By default, this option is disabled\&.
-.RE
-.PP
-\-XX:+ScavengeBeforeFullGC
-.RS 4
-Enables GC of the young generation before each full GC\&. This option is enabled by default\&. Oracle recommends that you
-\fIdo not\fR
-disable it, because scavenging the young generation before a full GC can reduce the number of objects reachable from the old generation space into the young generation space\&. To disable GC of the young generation before each full GC, specify
-\fB\-XX:\-ScavengeBeforeFullGC\fR\&.
-.RE
-.PP
-\-XX:SoftRefLRUPolicyMSPerMB=\fItime\fR
-.RS 4
-Sets the amount of time (in milliseconds) a softly reachable object is kept active on the heap after the last time it was referenced\&. The default value is one second of lifetime per free megabyte in the heap\&. The
-\fB\-XX:SoftRefLRUPolicyMSPerMB\fR
-option accepts integer values representing milliseconds per one megabyte of the current heap size (for Java HotSpot Client VM) or the maximum possible heap size (for Java HotSpot Server VM)\&. This difference means that the Client VM tends to flush soft references rather than grow the heap, whereas the Server VM tends to grow the heap rather than flush soft references\&. In the latter case, the value of the
-\fB\-Xmx\fR
-option has a significant effect on how quickly soft references are garbage collected\&.
-.sp
+.TP
+-XX:+ScavengeBeforeFullGC
+.br
+Enables GC of the young generation before each full GC\&. This option is enabled by default\&. Oracle recommends that you \fIdo not\fR disable it, because scavenging the young generation before a full GC can reduce the number of objects reachable from the old generation space into the young generation space\&. To disable GC of the young generation before each full GC, specify \f3-XX:-ScavengeBeforeFullGC\fR\&.
+.TP
+-XX:SoftRefLRUPolicyMSPerMB=\fItime\fR
+.br
+Sets the amount of time (in milliseconds) a softly reachable object is kept active on the heap after the last time it was referenced\&. The default value is one second of lifetime per free megabyte in the heap\&. The \f3-XX:SoftRefLRUPolicyMSPerMB\fR option accepts integer values representing milliseconds per one megabyte of the current heap size (for Java HotSpot Client VM) or the maximum possible heap size (for Java HotSpot Server VM)\&. This difference means that the Client VM tends to flush soft references rather than grow the heap, whereas the Server VM tends to grow the heap rather than flush soft references\&. In the latter case, the value of the \f3-Xmx\fR option has a significant effect on how quickly soft references are garbage collected\&.
+
 The following example shows how to set the value to 2\&.5 seconds:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:SoftRefLRUPolicyMSPerMB=2500\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
-\-XX:StringDeduplicationAgeThreshold=\fIthreshold\fR
-.RS 4
-\fBString\fR
-objects reaching the specified age are considered candidates for deduplication\&. An object\*(Aqs age is a measure of how many times it has survived garbage collection\&. This is sometimes referred to as tenuring; see the
-\fB\-XX:+PrintTenuringDistribution\fR
-option\&. Note that
-\fBString\fR
-objects that are promoted to an old heap region before this age has been reached are always considered candidates for deduplication\&. The default value for this option is
-\fB3\fR\&. See the
-\fB\-XX:+UseStringDeduplication\fR
-option\&.
-.RE
-.PP
-\-XX:SurvivorRatio=\fIratio\fR
-.RS 4
+.sp     
+.nf     
+\f3\-XX:SoftRefLRUPolicyMSPerMB=2500\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP
+-XX:StringDeduplicationAgeThreshold=\fIthreshold\fR
+.br
+\f3String\fR objects reaching the specified age are considered candidates for deduplication\&. An object\&'s age is a measure of how many times it has survived garbage collection\&. This is sometimes referred to as tenuring; see the \f3-XX:+PrintTenuringDistribution\fR option\&. Note that \f3String\fR objects that are promoted to an old heap region before this age has been reached are always considered candidates for deduplication\&. The default value for this option is \f33\fR\&. See the \f3-XX:+UseStringDeduplication\fR option\&.
+.TP
+-XX:SurvivorRatio=\fIratio\fR
+.br
 Sets the ratio between eden space size and survivor space size\&. By default, this option is set to 8\&. The following example shows how to set the eden/survivor space ratio to 4:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:SurvivorRatio=4\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
-\-XX:TargetSurvivorRatio=\fIpercent\fR
-.RS 4
+.sp     
+.nf     
+\f3\-XX:SurvivorRatio=4\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP
+-XX:TargetSurvivorRatio=\fIpercent\fR
+.br
 Sets the desired percentage of survivor space (0 to 100) used after young garbage collection\&. By default, this option is set to 50%\&.
-.sp
+
 The following example shows how to set the target survivor space ratio to 30%:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:TargetSurvivorRatio=30\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
-\-XX:TLABSize=\fIsize\fR
-.RS 4
-Sets the initial size (in bytes) of a thread\-local allocation buffer (TLAB)\&. Append the letter
-\fBk\fR
-or
-\fBK\fR
-to indicate kilobytes,
-\fBm\fR
-or
-\fBM\fR
-to indicate megabytes,
-\fBg\fR
-or
-\fBG\fR
-to indicate gigabytes\&. If this option is set to 0, then the JVM chooses the initial size automatically\&.
-.sp
+.sp     
+.nf     
+\f3\-XX:TargetSurvivorRatio=30\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP
+-XX:TLABSize=\fIsize\fR
+.br
+Sets the initial size (in bytes) of a thread-local allocation buffer (TLAB)\&. Append the letter \f3k\fR or \f3K\fR to indicate kilobytes, \f3m\fR or \f3M\fR to indicate megabytes, \f3g\fR or \f3G\fR to indicate gigabytes\&. If this option is set to 0, then the JVM chooses the initial size automatically\&.
+
 The following example shows how to set the initial TLAB size to 512 KB:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:TLABSize=512k\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
-\-XX:+UseAdaptiveSizePolicy
-.RS 4
-Enables the use of adaptive generation sizing\&. This option is enabled by default\&. To disable adaptive generation sizing, specify
-\fB\-XX:\-UseAdaptiveSizePolicy\fR
-and set the size of the memory allocation pool explicitly (see the
-\fB\-XX:SurvivorRatio\fR
-option)\&.
-.RE
-.PP
-\-XX:+UseCMSInitiatingOccupancyOnly
-.RS 4
+.sp     
+.nf     
+\f3\-XX:TLABSize=512k\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP
+-XX:+UseAdaptiveSizePolicy
+.br
+Enables the use of adaptive generation sizing\&. This option is enabled by default\&. To disable adaptive generation sizing, specify \f3-XX:-UseAdaptiveSizePolicy\fR and set the size of the memory allocation pool explicitly (see the \f3-XX:SurvivorRatio\fR option)\&.
+.TP
+-XX:+UseCMSInitiatingOccupancyOnly
+.br
 Enables the use of the occupancy value as the only criterion for initiating the CMS collector\&. By default, this option is disabled and other criteria may be used\&.
-.RE
-.PP
-\-XX:+UseConcMarkSweepGC
-.RS 4
-Enables the use of the CMS garbage collector for the old generation\&. Oracle recommends that you use the CMS garbage collector when application latency requirements cannot be met by the throughput (\fB\-XX:+UseParallelGC\fR) garbage collector\&. The G1 garbage collector (\fB\-XX:+UseG1GC\fR) is another alternative\&.
-.sp
-By default, this option is disabled and the collector is chosen automatically based on the configuration of the machine and type of the JVM\&. When this option is enabled, the
-\fB\-XX:+UseParNewGC\fR
-option is automatically set and you should not disable it, because the following combination of options has been deprecated in JDK 8:
-\fB\-XX:+UseConcMarkSweepGC \-XX:\-UseParNewGC\fR\&.
-.RE
-.PP
-\-XX:+UseG1GC
-.RS 4
-Enables the use of the garbage\-first (G1) garbage collector\&. It is a server\-style garbage collector, targeted for multiprocessor machines with a large amount of RAM\&. It meets GC pause time goals with high probability, while maintaining good throughput\&. The G1 collector is recommended for applications requiring large heaps (sizes of around 6 GB or larger) with limited GC latency requirements (stable and predictable pause time below 0\&.5 seconds)\&.
-.sp
+.TP
+-XX:+UseConcMarkSweepGC
+.br
+Enables the use of the CMS garbage collector for the old generation\&. Oracle recommends that you use the CMS garbage collector when application latency requirements cannot be met by the throughput (\f3-XX:+UseParallelGC\fR) garbage collector\&. The G1 garbage collector (\f3-XX:+UseG1GC\fR) is another alternative\&.
+
+By default, this option is disabled and the collector is chosen automatically based on the configuration of the machine and type of the JVM\&. When this option is enabled, the \f3-XX:+UseParNewGC\fR option is automatically set and you should not disable it, because the following combination of options has been deprecated in JDK 8: \f3-XX:+UseConcMarkSweepGC -XX:-UseParNewGC\fR\&.
+.TP
+-XX:+UseG1GC
+.br
+Enables the use of the garbage-first (G1) garbage collector\&. It is a server-style garbage collector, targeted for multiprocessor machines with a large amount of RAM\&. It meets GC pause time goals with high probability, while maintaining good throughput\&. The G1 collector is recommended for applications requiring large heaps (sizes of around 6 GB or larger) with limited GC latency requirements (stable and predictable pause time below 0\&.5 seconds)\&.
+
 By default, this option is disabled and the collector is chosen automatically based on the configuration of the machine and type of the JVM\&.
-.RE
-.PP
-\-XX:+UseGCOverheadLimit
-.RS 4
-Enables the use of a policy that limits the proportion of time spent by the JVM on GC before an
-\fBOutOfMemoryError\fR
-exception is thrown\&. This option is enabled, by default and the parallel GC will throw an
-\fBOutOfMemoryError\fR
-if more than 98% of the total time is spent on garbage collection and less than 2% of the heap is recovered\&. When the heap is small, this feature can be used to prevent applications from running for long periods of time with little or no progress\&. To disable this option, specify
-\fB\-XX:\-UseGCOverheadLimit\fR\&.
-.RE
-.PP
-\-XX:+UseNUMA
-.RS 4
-Enables performance optimization of an application on a machine with nonuniform memory architecture (NUMA) by increasing the application\*(Aqs use of lower latency memory\&. By default, this option is disabled and no optimization for NUMA is made\&. The option is only available when the parallel garbage collector is used (\fB\-XX:+UseParallelGC\fR)\&.
-.RE
-.PP
-\-XX:+UseParallelGC
-.RS 4
+.TP
+-XX:+UseGCOverheadLimit
+.br
+Enables the use of a policy that limits the proportion of time spent by the JVM on GC before an \f3OutOfMemoryError\fR exception is thrown\&. This option is enabled, by default and the parallel GC will throw an \f3OutOfMemoryError\fR if more than 98% of the total time is spent on garbage collection and less than 2% of the heap is recovered\&. When the heap is small, this feature can be used to prevent applications from running for long periods of time with little or no progress\&. To disable this option, specify \f3-XX:-UseGCOverheadLimit\fR\&.
+.TP
+-XX:+UseNUMA
+.br
+Enables performance optimization of an application on a machine with nonuniform memory architecture (NUMA) by increasing the application\&'s use of lower latency memory\&. By default, this option is disabled and no optimization for NUMA is made\&. The option is only available when the parallel garbage collector is used (\f3-XX:+UseParallelGC\fR)\&.
+.TP
+-XX:+UseParallelGC
+.br
 Enables the use of the parallel scavenge garbage collector (also known as the throughput collector) to improve the performance of your application by leveraging multiple processors\&.
-.sp
-By default, this option is disabled and the collector is chosen automatically based on the configuration of the machine and type of the JVM\&. If it is enabled, then the
-\fB\-XX:+UseParallelOldGC\fR
-option is automatically enabled, unless you explicitly disable it\&.
-.RE
-.PP
-\-XX:+UseParallelOldGC
-.RS 4
-Enables the use of the parallel garbage collector for full GCs\&. By default, this option is disabled\&. Enabling it automatically enables the
-\fB\-XX:+UseParallelGC\fR
-option\&.
-.RE
-.PP
-\-XX:+UseParNewGC
-.RS 4
-Enables the use of parallel threads for collection in the young generation\&. By default, this option is disabled\&. It is automatically enabled when you set the
-\fB\-XX:+UseConcMarkSweepGC\fR
-option\&. Using the
-\fB\-XX:+UseParNewGC\fR
-option without the
-\fB\-XX:+UseConcMarkSweepGC\fR
-option was deprecated in JDK 8\&.
-.RE
-.PP
-\-XX:+UseSerialGC
-.RS 4
+
+By default, this option is disabled and the collector is chosen automatically based on the configuration of the machine and type of the JVM\&. If it is enabled, then the \f3-XX:+UseParallelOldGC\fR option is automatically enabled, unless you explicitly disable it\&.
+.TP
+-XX:+UseParallelOldGC
+.br
+Enables the use of the parallel garbage collector for full GCs\&. By default, this option is disabled\&. Enabling it automatically enables the \f3-XX:+UseParallelGC\fR option\&.
+.TP
+-XX:+UseParNewGC
+.br
+Enables the use of parallel threads for collection in the young generation\&. By default, this option is disabled\&. It is automatically enabled when you set the \f3-XX:+UseConcMarkSweepGC\fR option\&. Using the \f3-XX:+UseParNewGC\fR option without the \f3-XX:+UseConcMarkSweepGC\fR option was deprecated in JDK 8\&.
+.TP
+-XX:+UseSerialGC
+.br
 Enables the use of the serial garbage collector\&. This is generally the best choice for small and simple applications that do not require any special functionality from garbage collection\&. By default, this option is disabled and the collector is chosen automatically based on the configuration of the machine and type of the JVM\&.
-.RE
-.PP
-\-XX:+UseStringDeduplication
-.RS 4
-Enables string deduplication\&. By default, this option is disabled\&. To use this option, you must enable the garbage\-first (G1) garbage collector\&. See the
-\fB\-XX:+UseG1GC\fR
-option\&.
-.sp
-\fIString deduplication\fR
-reduces the memory footprint of
-\fBString\fR
-objects on the Java heap by taking advantage of the fact that many
-\fBString\fR
-objects are identical\&. Instead of each
-\fBString\fR
-object pointing to its own character array, identical
-\fBString\fR
-objects can point to and share the same character array\&.
-.RE
-.PP
-\-XX:+UseTLAB
-.RS 4
-Enables the use of thread\-local allocation blocks (TLABs) in the young generation space\&. This option is enabled by default\&. To disable the use of TLABs, specify
-\fB\-XX:\-UseTLAB\fR\&.
-.RE
-.SS "Deprecated and Removed Options"
-.PP
+.TP
+-XX:+UseSHM
+.br
+On Linux, enables the JVM to use shared memory to setup large pages\&.
+
+For more information, see Large Pages\&.
+.TP
+-XX:+UseStringDeduplication
+.br
+Enables string deduplication\&. By default, this option is disabled\&. To use this option, you must enable the garbage-first (G1) garbage collector\&. See the \f3-XX:+UseG1GC\fR option\&.
+
+\fIString deduplication\fR reduces the memory footprint of \f3String\fR objects on the Java heap by taking advantage of the fact that many \f3String\fR objects are identical\&. Instead of each \f3String\fR object pointing to its own character array, identical \f3String\fR objects can point to and share the same character array\&.
+.TP
+-XX:+UseTLAB
+.br
+Enables the use of thread-local allocation blocks (TLABs) in the young generation space\&. This option is enabled by default\&. To disable the use of TLABs, specify \f3-XX:-UseTLAB\fR\&.
+.SS DEPRECATED\ AND\ REMOVED\ OPTIONS    
 These options were included in the previous release, but have since been considered unnecessary\&.
-.PP
-\-Xincgc
-.RS 4
+.TP
+-Xincgc
+.br
 Enables incremental garbage collection\&. This option was deprecated in JDK 8 with no replacement\&.
-.RE
-.PP
-\-Xrun\fIlibname\fR
-.RS 4
-Loads the specified debugging/profiling library\&. This option was superseded by the
-\fB\-agentlib\fR
-option\&.
-.RE
-.PP
-\-XX:CMSIncrementalDutyCycle=\fIpercent\fR
-.RS 4
-Sets the percentage of time (0 to 100) between minor collections that the concurrent collector is allowed to run\&. This option was deprecated in JDK 8 with no replacement, following the deprecation of the
-\fB\-XX:+CMSIncrementalMode\fR
-option\&.
-.RE
-.PP
-\-XX:CMSIncrementalDutyCycleMin=\fIpercent\fR
-.RS 4
-Sets the percentage of time (0 to 100) between minor collections that is the lower bound for the duty cycle when
-\fB\-XX:+CMSIncrementalPacing\fR
-is enabled\&. This option was deprecated in JDK 8 with no replacement, following the deprecation of the
-\fB\-XX:+CMSIncrementalMode\fR
-option\&.
-.RE
-.PP
-\-XX:+CMSIncrementalMode
-.RS 4
-Enables the incremental mode for the CMS collector\&. This option was deprecated in JDK 8 with no replacement, along with other options that start with
-\fBCMSIncremental\fR\&.
-.RE
-.PP
-\-XX:CMSIncrementalOffset=\fIpercent\fR
-.RS 4
-Sets the percentage of time (0 to 100) by which the incremental mode duty cycle is shifted to the right within the period between minor collections\&. This option was deprecated in JDK 8 with no replacement, following the deprecation of the
-\fB\-XX:+CMSIncrementalMode\fR
-option\&.
-.RE
-.PP
-\-XX:+CMSIncrementalPacing
-.RS 4
-Enables automatic adjustment of the incremental mode duty cycle based on statistics collected while the JVM is running\&. This option was deprecated in JDK 8 with no replacement, following the deprecation of the
-\fB\-XX:+CMSIncrementalMode\fR
-option\&.
-.RE
-.PP
-\-XX:CMSIncrementalSafetyFactor=\fIpercent\fR
-.RS 4
-Sets the percentage of time (0 to 100) used to add conservatism when computing the duty cycle\&. This option was deprecated in JDK 8 with no replacement, following the deprecation of the
-\fB\-XX:+CMSIncrementalMode\fR
-option\&.
-.RE
-.PP
-\-XX:CMSInitiatingPermOccupancyFraction=\fIpercent\fR
-.RS 4
+.TP
+-Xrun\fIlibname\fR
+.br
+Loads the specified debugging/profiling library\&. This option was superseded by the \f3-agentlib\fR option\&.
+.TP
+-XX:CMSIncrementalDutyCycle=\fIpercent\fR
+.br
+Sets the percentage of time (0 to 100) between minor collections that the concurrent collector is allowed to run\&. This option was deprecated in JDK 8 with no replacement, following the deprecation of the \f3-XX:+CMSIncrementalMode\fR option\&.
+.TP
+-XX:CMSIncrementalDutyCycleMin=\fIpercent\fR
+.br
+Sets the percentage of time (0 to 100) between minor collections that is the lower bound for the duty cycle when \f3-XX:+CMSIncrementalPacing\fR is enabled\&. This option was deprecated in JDK 8 with no replacement, following the deprecation of the \f3-XX:+CMSIncrementalMode\fR option\&.
+.TP
+-XX:+CMSIncrementalMode
+.br
+Enables the incremental mode for the CMS collector\&. This option was deprecated in JDK 8 with no replacement, along with other options that start with \f3CMSIncremental\fR\&.
+.TP
+-XX:CMSIncrementalOffset=\fIpercent\fR
+.br
+Sets the percentage of time (0 to 100) by which the incremental mode duty cycle is shifted to the right within the period between minor collections\&. This option was deprecated in JDK 8 with no replacement, following the deprecation of the \f3-XX:+CMSIncrementalMode\fR option\&.
+.TP
+-XX:+CMSIncrementalPacing
+.br
+Enables automatic adjustment of the incremental mode duty cycle based on statistics collected while the JVM is running\&. This option was deprecated in JDK 8 with no replacement, following the deprecation of the \f3-XX:+CMSIncrementalMode\fR option\&.
+.TP
+-XX:CMSIncrementalSafetyFactor=\fIpercent\fR
+.br
+Sets the percentage of time (0 to 100) used to add conservatism when computing the duty cycle\&. This option was deprecated in JDK 8 with no replacement, following the deprecation of the \f3-XX:+CMSIncrementalMode\fR option\&.
+.TP
+-XX:CMSInitiatingPermOccupancyFraction=\fIpercent\fR
+.br
 Sets the percentage of the permanent generation occupancy (0 to 100) at which to start a GC\&. This option was deprecated in JDK 8 with no replacement\&.
-.RE
-.PP
-\-XX:MaxPermSize=\fIsize\fR
-.RS 4
-Sets the maximum permanent generation space size (in bytes)\&. This option was deprecated in JDK 8, and superseded by the
-\fB\-XX:MaxMetaspaceSize\fR
-option\&.
-.RE
-.PP
-\-XX:PermSize=\fIsize\fR
-.RS 4
-Sets the space (in bytes) allocated to the permanent generation that triggers a garbage collection if it is exceeded\&. This option was deprecated un JDK 8, and superseded by the
-\fB\-XX:MetaspaceSize\fR
-option\&.
-.RE
-.PP
-\-XX:+UseSplitVerifier
-.RS 4
+.TP
+-XX:MaxPermSize=\fIsize\fR
+.br
+Sets the maximum permanent generation space size (in bytes)\&. This option was deprecated in JDK 8, and superseded by the \f3-XX:MaxMetaspaceSize\fR option\&.
+.TP
+-XX:PermSize=\fIsize\fR
+.br
+Sets the space (in bytes) allocated to the permanent generation that triggers a garbage collection if it is exceeded\&. This option was deprecated un JDK 8, and superseded by the \f3-XX:MetaspaceSize\fR option\&.
+.TP
+-XX:+UseSplitVerifier
+.br
 Enables splitting of the verification process\&. By default, this option was enabled in the previous releases, and verification was split into two phases: type referencing (performed by the compiler) and type checking (performed by the JVM runtime)\&. This option was deprecated in JDK 8, and verification is now split by default without a way to disable it\&.
-.RE
-.PP
-\-XX:+UseStringCache
-.RS 4
+.TP
+-XX:+UseStringCache
+.br
 Enables caching of commonly allocated strings\&. This option was removed from JDK 8 with no replacement\&.
-.RE
-.SH "PERFORMANCE TUNING EXAMPLES"
-.PP
+.SH PERFORMANCE\ TUNING\ EXAMPLES    
 The following examples show how to use experimental tuning flags to either optimize throughput or to provide lower response time\&.
 .PP
-\fBExample 1\fR
-.br
-Tuning for Higher Throughput
-.RS 4
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBjava \-d64 \-server \-XX:+AggressiveOpts \-XX:+UseLargePages \-Xmn10g  \-Xms26g \-Xmx26g\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
+\f3Example 1 Tuning for Higher Throughput\fR
+.sp     
+.nf     
+\f3java \-d64 \-server \-XX:+AggressiveOpts \-XX:+UseLargePages \-Xmn10g  \-Xms26g \-Xmx26g\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+\f3Example 2 Tuning for Lower Response Time\fR
+.sp     
+.nf     
+\f3java \-d64 \-XX:+UseG1GC \-Xms26g Xmx26g \-XX:MaxGCPauseMillis=500 \-XX:+PrintGCTimeStamp\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+.SH LARGE\ PAGES    
+Also known as huge pages, large pages are memory pages that are significantly larger than the standard memory page size (which varies depending on the processor and operating system)\&. Large pages optimize processor Translation-Lookaside Buffers\&.
 .PP
-\fBExample 2\fR
-.br
-Tuning for Lower Response Time
-.RS 4
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBjava \-d64 \-XX:+UseG1GC \-Xms26g Xmx26g \-XX:MaxGCPauseMillis=500 \-XX:+PrintGCTimeStamp\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.SH "EXIT STATUS"
+A Translation-Lookaside Buffer (TLB) is a page translation cache that holds the most-recently used virtual-to-physical address translations\&. TLB is a scarce system resource\&. A TLB miss can be costly as the processor must then read from the hierarchical page table, which may require multiple memory accesses\&. By using a larger memory page size, a single TLB entry can represent a larger memory range\&. There will be less pressure on TLB, and memory-intensive applications may have better performance\&.
+.PP
+However, large pages page memory can negatively affect system performance\&. For example, when a large mount of memory is pinned by an application, it may create a shortage of regular memory and cause excessive paging in other applications and slow down the entire system\&. Also, a system that has been up for a long time could produce excessive fragmentation, which could make it impossible to reserve enough large page memory\&. When this happens, either the OS or JVM reverts to using regular pages\&.
+.SS LARGE\ PAGES\ SUPPORT    
+Solaris and Linux support large pages\&.
+.PP
+Solaris 9 and later include Multiple Page Size Support (MPSS); no additional configuration is necessary\&. See http://www\&.oracle\&.com/technetwork/server-storage/solaris10/overview/solaris9-features-scalability-135663\&.html\&.
 .PP
-The following exit values are typically returned by the launcher when the launcher is called with the wrong arguments, serious errors, or exceptions thrown by the JVM\&. However, a Java application may choose to return any value by using the API call
-\fBSystem\&.exit(exitValue)\fR\&. The values are:
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-\fB0\fR: Successful completion
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-\fB>0\fR: An error occurred
-.RE
-.SH "SEE ALSO"
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
+The 2\&.6 kernel supports large pages\&. Some vendors have backported the code to their 2\&.4-based releases\&. To check if your system can support large page memory, try the following:
+.sp     
+.nf     
+\f3# cat /proc/meminfo | grep Huge\fP
+.fi     
+.nf     
+\f3HugePages_Total: 0\fP
+.fi     
+.nf     
+\f3HugePages_Free: 0\fP
+.fi     
+.nf     
+\f3Hugepagesize: 2048 kB\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+If the output shows the three "Huge" variables, then your system can support large page memory but it needs to be configured\&. If the command prints nothing, then your system does not support large pages\&. To configure the system to use large page memory, login as \f3root\fR, and then follow these steps:
+.TP 0.4i    
+1\&.
+If you are using the option \f3-XX:+UseSHM\fR (instead of \f3-XX:+UseHugeTLBFS\fR), then increase the \f3SHMMAX\fR value\&. It must be larger than the Java heap size\&. On a system with 4 GB of physical RAM (or less), the following will make all the memory sharable:
+.sp     
+.nf     
+\f3# echo 4294967295 > /proc/sys/kernel/shmmax\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP 0.4i    
+2\&.
+If you are using the option \f3-XX:+UseSHM\fR or \f3-XX:+UseHugeTLBFS\fR, then specify the number of large pages\&. In the following example, 3 GB of a 4 GB system are reserved for large pages (assuming a large page size of 2048kB, then 3 GB = 3 * 1024 MB = 3072 MB = 3072 * 1024 kB = 3145728 kB and 3145728 kB / 2048 kB = 1536):
+.sp     
+.nf     
+\f3# echo 1536 > /proc/sys/vm/nr_hugepages\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.PP
+Note
+.PP
+Note that the values contained in \f3/proc\fR will reset after you reboot your system, so may want to set them in an initialization script (for example, \f3rc\&.local\fR or \f3sysctl\&.conf\fR)\&.
+.PP
+If you configure (or resize) the OS kernel parameters \f3/proc/sys/kernel/shmmax\fR or \f3/proc/sys/vm/nr_hugepages\fR, Java processes may allocate large pages for areas in addition to the Java heap\&. These steps can allocate large pages for the following areas:
+.PP
+Java heap
+.PP
+Permanent generation
+.PP
+Code cache
+.PP
+The marking bitmap data structure for the parallel GC
+.PP
+Consequently, if you configure the \f3nr_hugepages\fR parameter to the size of the Java heap, then the JVM can fail in allocating the permanent generation and code cache areas on large pages because these areas are quite large in size\&.
+.SH EXIT\ STATUS    
+The following exit values are typically returned by the launcher when the launcher is called with the wrong arguments, serious errors, or exceptions thrown by the JVM\&. However, a Java application may choose to return any value by using the API call \f3System\&.exit(exitValue)\fR\&. The values are:
+.TP 0.2i    
+\(bu
+\f30\fR: Successful completion
+.TP 0.2i    
+\(bu
+\f3>0\fR: An error occurred
+.SH SEE\ ALSO    
+.TP 0.2i    
+\(bu
 javac(1)
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
+.TP 0.2i    
+\(bu
 jdb(1)
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
+.TP 0.2i    
+\(bu
 javah(1)
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
+.TP 0.2i    
+\(bu
 jar(1)
-.RE
-.br
-'pl 8.5i
-'bp
+.TP 0.2i    
+\(bu
+jstat(1)
+.RE
+.br
+'pl 8.5i
+'bp
--- a/src/linux/doc/man/javac.1	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/linux/doc/man/javac.1	Tue Nov 04 17:20:19 2014 +0000
@@ -1,2116 +1,1370 @@
 '\" t
-.\" Copyright (c) 1994, 2014, 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.
-.\"
-.\" Title: javac
-.\" Language: English
-.\" Date: 8 August 2014
-.\" SectDesc: Basic Tools
-.\" Software: JDK 8
-.\" Arch: generic
-.\" Part Number: E38207-03
+.\"  Copyright (c) 1994, 2015, 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.
+.\"
+.\"     Arch: generic
+.\"     Software: JDK 8
+.\"     Date: 03 March 2015
+.\"     SectDesc: Basic Tools
+.\"     Title: javac.1
 .\"
 .if n .pl 99999
-.TH "javac" "1" "8 August 2014" "JDK 8" "Basic Tools"
-.\" -----------------------------------------------------------------
-.\" * Define some portability stuff
-.\" -----------------------------------------------------------------
-.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-.\" http://bugs.debian.org/507673
-.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
-.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-.ie \n(.g .ds Aq \(aq
-.el       .ds Aq '
-.\" -----------------------------------------------------------------
-.\" * set default formatting
-.\" -----------------------------------------------------------------
-.\" disable hyphenation
-.nh
-.\" disable justification (adjust text to left margin only)
-.ad l
-.\" -----------------------------------------------------------------
-.\" * MAIN CONTENT STARTS HERE *
-.\" -----------------------------------------------------------------
-.SH "NAME"
+.TH javac 1 "03 March 2015" "JDK 8" "Basic Tools"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el       .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+
+.SH NAME    
 javac \- Reads Java class and interface definitions and compiles them into bytecode and class files\&.
-.SH "SYNOPSIS"
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
+.SH SYNOPSIS    
+.sp     
+.nf     
+
 \fBjavac\fR [ \fIoptions\fR ] [ \fIsourcefiles\fR ] [ \fIclasses\fR] [ \fI@argfiles\fR ]
-.fi
-.if n \{\
-.RE
-.\}
-.PP
+.fi     
+.sp     
 Arguments can be in any order:
-.PP
+.TP     
 \fIoptions\fR
-.RS 4
-Command\-line options\&. See Options\&.
-.RE
-.PP
+Command-line options\&. See Options\&.
+.TP     
 \fIsourcefiles\fR
-.RS 4
-One or more source files to be compiled (such as
-\fBMyClass\&.java\fR)\&.
-.RE
-.PP
+One or more source files to be compiled (such as \f3MyClass\&.java\fR)\&.
+.TP     
 \fIclasses\fR
-.RS 4
-One or more classes to be processed for annotations (such as
-\fBMyPackage\&.MyClass\fR)\&.
-.RE
-.PP
+One or more classes to be processed for annotations (such as \f3MyPackage\&.MyClass\fR)\&.
+.TP     
 \fI@argfiles\fR
-.RS 4
-One or more files that list options and source files\&. The
-\fB\-J\fR
-options are not allowed in these files\&. See Command\-Line Argument Files\&.
-.RE
-.SH "DESCRIPTION"
+One or more files that list options and source files\&. The \f3-J\fR options are not allowed in these files\&. See Command-Line Argument Files\&.
+.SH DESCRIPTION    
+The \f3javac\fR command reads class and interface definitions, written in the Java programming language, and compiles them into bytecode class files\&. The \f3javac\fR command can also process annotations in Java source files and classes\&.
 .PP
-The
-\fBjavac\fR
-command reads class and interface definitions, written in the Java programming language, and compiles them into bytecode class files\&. The
-\fBjavac\fR
-command can also process annotations in Java source files and classes\&.
-.PP
-There are two ways to pass source code file names to
-\fBjavac\fR\&.
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
+There are two ways to pass source code file names to \f3javac\fR\&.
+.TP 0.2i    
+\(bu
 For a small number of source files, list the file names on the command line\&.
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-For a large number of source files, list the file names in a file that is separated by blanks or line breaks\&. Use the list file name preceded by an at sign (@) with the
-\fBjavac\fR
-command\&.
-.RE
-.PP
-Source code file names must have \&.java suffixes, class file names must have \&.class suffixes, and both source and class files must have root names that identify the class\&. For example, a class called
-\fBMyClass\fR
-would be written in a source file called
-\fBMyClass\&.java\fR
-and compiled into a bytecode class file called
-\fBMyClass\&.class\fR\&.
-.PP
-Inner class definitions produce additional class files\&. These class files have names that combine the inner and outer class names, such as
-\fBMyClass$MyInnerClass\&.class\fR\&.
-.PP
-Arrange source files in a directory tree that reflects their package tree\&. For example, if all of your source files are in
-\fB/workspace\fR, then put the source code for
-\fBcom\&.mysoft\&.mypack\&.MyClass\fR
-in
-\fB/workspace/com/mysoft/mypack/MyClass\&.java\fR\&.
-.PP
-By default, the compiler puts each class file in the same directory as its source file\&. You can specify a separate destination directory with the
-\fB\-d\fR
-option\&.
-.SH "OPTIONS"
+.TP 0.2i    
+\(bu
+For a large number of source files, list the file names in a file that is separated by blanks or line breaks\&. Use the list file name preceded by an at sign (@) with the \f3javac\fR command\&.
 .PP
-The compiler has a set of standard options that are supported on the current development environment\&. An additional set of nonstandard options are specific to the current virtual machine and compiler implementations and are subject to change in the future\&. Nonstandard options begin with the
-\fB\-X\fR
-option\&.
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-See also Cross\-Compilation Options
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-See also Nonstandard Options
-.RE
-.SS "Standard Options"
+Source code file names must have \&.java suffixes, class file names must have \&.class suffixes, and both source and class files must have root names that identify the class\&. For example, a class called \f3MyClass\fR would be written in a source file called \f3MyClass\&.java\fR and compiled into a bytecode class file called \f3MyClass\&.class\fR\&.
 .PP
-\-A\fIkey\fR[\fI=value\fR]
-.RS 4
-Specifies options to pass to annotation processors\&. These options are not interpreted by
-\fBjavac\fR
-directly, but are made available for use by individual processors\&. The
-\fBkey\fR
-value should be one or more identifiers separated by a dot (\&.)\&.
-.RE
+Inner class definitions produce additional class files\&. These class files have names that combine the inner and outer class names, such as \f3MyClass$MyInnerClass\&.class\fR\&.
 .PP
-\-cp \fIpath\fR or \-classpath \fIpath\fR
-.RS 4
-Specifies where to find user class files, and (optionally) annotation processors and source files\&. This class path overrides the user class path in the
-\fBCLASSPATH\fR
-environment variable\&. If neither
-\fBCLASSPATH\fR,
-\fB\-cp\fR
-nor
-\fB\-classpath\fR
-is specified, then the user
-\fIclass path\fR
-is the current directory\&. See Setting the Class Path \&.
-.sp
-If the
-\fB\-sourcepath\fR
-option is not specified, then the user class path is also searched for source files\&.
-.sp
-If the
-\fB\-processorpath\fR
-option is not specified, then the class path is also searched for annotation processors\&.
-.RE
-.PP
-\-Djava\&.ext\&.dirs=\fIdirectories\fR
-.RS 4
-Overrides the location of installed extensions\&.
-.RE
-.PP
-\-Djava\&.endorsed\&.dirs=\fIdirectories\fR
-.RS 4
-Overrides the location of the endorsed standards path\&.
-.RE
+Arrange source files in a directory tree that reflects their package tree\&. For example, if all of your source files are in \f3/workspace\fR, then put the source code for \f3com\&.mysoft\&.mypack\&.MyClass\fR in \f3/workspace/com/mysoft/mypack/MyClass\&.java\fR\&.
 .PP
-\-d \fIdirectory\fR
-.RS 4
-Sets the destination directory for class files\&. The directory must already exist because
-\fBjavac\fR
-does not create it\&. If a class is part of a package, then
-\fBjavac\fR
-puts the class file in a subdirectory that reflects the package name and creates directories as needed\&.
-.sp
-If you specify
-\fB\-d\fR
-\fB/home/myclasses\fR
-and the class is called
-\fBcom\&.mypackage\&.MyClass\fR, then the class file is
-\fB/home/myclasses/com/mypackage/MyClass\&.class\fR\&.
-.sp
-If the
-\fI\-d\fR
-option is not specified, then
-\fBjavac\fR
-puts each class file in the same directory as the source file from which it was generated\&.
-.sp
-\fBNote:\fR
-The directory specified by the
-\fI\-d\fR
-option is not automatically added to your user class path\&.
-.RE
-.PP
-\-deprecation
-.RS 4
-Shows a description of each use or override of a deprecated member or class\&. Without the
-\fB\-deprecation\fR
-option,
-\fBjavac\fR
-shows a summary of the source files that use or override deprecated members or classes\&. The
-\fB\-deprecation\fR
-option is shorthand for
-\fB\-Xlint:deprecation\fR\&.
-.RE
-.PP
-\-encoding \fIencoding\fR
-.RS 4
-Sets the source file encoding name, such as EUC\-JP and UTF\-8\&. If the
-\fB\-encoding\fR
-option is not specified, then the platform default converter is used\&.
-.RE
-.PP
-\-endorseddirs \fIdirectories\fR
-.RS 4
+By default, the compiler puts each class file in the same directory as its source file\&. You can specify a separate destination directory with the \f3-d\fR option\&.
+.SH OPTIONS    
+The compiler has a set of standard options that are supported on the current development environment\&. An additional set of nonstandard options are specific to the current virtual machine and compiler implementations and are subject to change in the future\&. Nonstandard options begin with the \f3-X\fR option\&.
+.TP 0.2i    
+\(bu
+See also Cross-Compilation Options
+.TP 0.2i    
+\(bu
+See also Nonstandard Options
+.SS STANDARD\ OPTIONS    
+.TP
+-A\fIkey\fR[\fI=value\fR]
+.br
+Specifies options to pass to annotation processors\&. These options are not interpreted by \f3javac\fR directly, but are made available for use by individual processors\&. The \f3key\fR value should be one or more identifiers separated by a dot (\&.)\&.
+.TP
+-cp \fIpath\fR or -classpath \fIpath\fR
+.br
+Specifies where to find user class files, and (optionally) annotation processors and source files\&. This class path overrides the user class path in the \f3CLASSPATH\fR environment variable\&. If neither \f3CLASSPATH\fR, \f3-cp\fR nor \f3-classpath\fR is specified, then the user \fIclass path\fR is the current directory\&. See Setting the Class Path\&.
+
+If the \f3-sourcepath\fR option is not specified, then the user class path is also searched for source files\&.
+
+If the \f3-processorpath\fR option is not specified, then the class path is also searched for annotation processors\&.
+.TP
+-Djava\&.ext\&.dirs=\fIdirectories\fR
+.br
+Overrides the location of installed extensions\&.
+.TP
+-Djava\&.endorsed\&.dirs=\fIdirectories\fR
+.br
 Overrides the location of the endorsed standards path\&.
-.RE
-.PP
-\-extdirs \fIdirectories\fR
-.RS 4
-Overrides the location of the
-\fBext\fR
-directory\&. The directories variable is a colon\-separated list of directories\&. Each JAR file in the specified directories is searched for class files\&. All JAR files found become part of the class path\&.
-.sp
-If you are cross\-compiling (compiling classes against bootstrap and extension classes of a different Java platform implementation), then this option specifies the directories that contain the extension classes\&. See Cross\-Compilation Options for more information\&.
-.RE
-.PP
-\-g
-.RS 4
+.TP
+-d \fIdirectory\fR
+.br
+Sets the destination directory for class files\&. The directory must already exist because \f3javac\fR does not create it\&. If a class is part of a package, then \f3javac\fR puts the class file in a subdirectory that reflects the package name and creates directories as needed\&.
+
+If you specify \f3-d\fR\f3/home/myclasses\fR and the class is called \f3com\&.mypackage\&.MyClass\fR, then the class file is \f3/home/myclasses/com/mypackage/MyClass\&.class\fR\&.
+
+If the \fI-d\fR option is not specified, then \f3javac\fR puts each class file in the same directory as the source file from which it was generated\&.
+
+\fINote:\fR The directory specified by the \fI-d\fR option is not automatically added to your user class path\&.
+.TP
+-deprecation
+.br
+Shows a description of each use or override of a deprecated member or class\&. Without the \f3-deprecation\fR option, \f3javac\fR shows a summary of the source files that use or override deprecated members or classes\&. The \f3-deprecation\fR option is shorthand for \f3-Xlint:deprecation\fR\&.
+.TP
+-encoding \fIencoding\fR
+.br
+Sets the source file encoding name, such as EUC-JP and UTF-8\&. If the \f3-encoding\fR option is not specified, then the platform default converter is used\&.
+.TP
+-endorseddirs \fIdirectories\fR
+.br
+Overrides the location of the endorsed standards path\&.
+.TP
+-extdirs \fIdirectories\fR
+.br
+Overrides the location of the \f3ext\fR directory\&. The directories variable is a colon-separated list of directories\&. Each JAR file in the specified directories is searched for class files\&. All JAR files found become part of the class path\&.
+
+If you are cross-compiling (compiling classes against bootstrap and extension classes of a different Java platform implementation), then this option specifies the directories that contain the extension classes\&. See Cross-Compilation Options for more information\&.
+.TP
+-g
+.br
 Generates all debugging information, including local variables\&. By default, only line number and source file information is generated\&.
-.RE
-.PP
-\-g:none
-.RS 4
+.TP
+-g:none
+.br
 Does not generate any debugging information\&.
-.RE
-.PP
-\-g:[\fIkeyword list\fR]
-.RS 4
+.TP
+-g:[\fIkeyword list\fR]
+.br
 Generates only some kinds of debugging information, specified by a comma separated list of keywords\&. Valid keywords are:
-.PP
+.RS     
+.TP     
 source
-.RS 4
 Source file debugging information\&.
-.RE
-.PP
+.TP     
 lines
-.RS 4
 Line number debugging information\&.
-.RE
-.PP
+.TP     
 vars
-.RS 4
 Local variable debugging information\&.
-.RE
-.RE
-.PP
-\-help
-.RS 4
+.RE     
+
+.TP
+-help
+.br
 Prints a synopsis of standard options\&.
-.RE
-.PP
-\-implicit:[\fIclass, none\fR]
-.RS 4
-Controls the generation of class files for implicitly loaded source files\&. To automatically generate class files, use
-\fB\-implicit:class\fR\&. To suppress class file generation, use
-\fB\-implicit:none\fR\&. If this option is not specified, then the default is to automatically generate class files\&. In this case, the compiler issues a warning if any such class files are generated when also doing annotation processing\&. The warning is not issued when the
-\fB\-implicit\fR
-option is set explicitly\&. See Searching for Types\&.
-.RE
-.PP
-\-J\fIoption\fR
-.RS 4
-Passes
-\fBoption\fR
-to the Java Virtual Machine (JVM), where option is one of the options described on the reference page for the Java launcher\&. For example,
-\fB\-J\-Xms48m\fR
-sets the startup memory to 48 MB\&. See
-java(1)\&.
-.sp
-\fBNote:\fR
-The
-\fICLASSPATH\fR,
-\fB\-classpath\fR,
-\fB\-bootclasspath\fR, and
-\fB\-extdirs\fR
-options do not specify the classes used to run
-\fBjavac\fR\&. Trying to customize the compiler implementation with these options and variables is risky and often does not accomplish what you want\&. If you must customize the complier implementation, then use the
-\fB\-J\fR
-option to pass options through to the underlying Java launcher\&.
-.RE
-.PP
-\-nowarn
-.RS 4
-Disables warning messages\&. This option operates the same as the
-\fB\-Xlint:none\fR
-option\&.
-.RE
-.PP
-\-parameters
-.RS 4
-Stores formal parameter names of constructors and methods in the generated class file so that the method
-\fBjava\&.lang\&.reflect\&.Executable\&.getParameters\fR
-from the Reflection API can retrieve them\&.
-.RE
-.PP
-\-proc: [\fInone\fR, \fIonly\fR]
-.RS 4
-Controls whether annotation processing and compilation are done\&.
-\fB\-proc:none\fR
-means that compilation takes place without annotation processing\&.
-\fB\-proc:only\fR
-means that only annotation processing is done, without any subsequent compilation\&.
-.RE
-.PP
-\-processor \fIclass1\fR [,\fIclass2\fR,\fIclass3\fR\&.\&.\&.]
-.RS 4
+.TP
+-implicit:[\fIclass, none\fR]
+.br
+Controls the generation of class files for implicitly loaded source files\&. To automatically generate class files, use \f3-implicit:class\fR\&. To suppress class file generation, use \f3-implicit:none\fR\&. If this option is not specified, then the default is to automatically generate class files\&. In this case, the compiler issues a warning if any such class files are generated when also doing annotation processing\&. The warning is not issued when the \f3-implicit\fR option is set explicitly\&. See Searching for Types\&.
+.TP
+-J\fIoption\fR
+.br
+Passes \f3option\fR to the Java Virtual Machine (JVM), where option is one of the options described on the reference page for the Java launcher\&. For example, \f3-J-Xms48m\fR sets the startup memory to 48 MB\&. See java(1)\&.
+
+\fINote:\fR The \fICLASSPATH\fR, \f3-classpath\fR, \f3-bootclasspath\fR, and \f3-extdirs\fR options do not specify the classes used to run \f3javac\fR\&. Trying to customize the compiler implementation with these options and variables is risky and often does not accomplish what you want\&. If you must customize the complier implementation, then use the \f3-J\fR option to pass options through to the underlying \f3\fRJava launcher\&.
+.TP
+-nowarn
+.br
+Disables warning messages\&. This option operates the same as the \f3-Xlint:none\fR option\&.
+.TP
+-parameters
+.br
+Stores formal parameter names of constructors and methods in the generated class file so that the method \f3java\&.lang\&.reflect\&.Executable\&.getParameters\fR from the Reflection API can retrieve them\&.
+.TP
+-proc: [\fInone\fR, \fIonly\fR]
+.br
+Controls whether annotation processing and compilation are done\&. \f3-proc:none\fR means that compilation takes place without annotation processing\&. \f3-proc:only\fR means that only annotation processing is done, without any subsequent compilation\&.
+.TP
+-processor \fIclass1\fR [,\fIclass2\fR,\fIclass3\fR\&.\&.\&.]
+.br
 Names of the annotation processors to run\&. This bypasses the default discovery process\&.
-.RE
-.PP
-\-processorpath \fIpath\fR
-.RS 4
+.TP
+-processorpath \fIpath\fR
+.br
 Specifies where to find annotation processors\&. If this option is not used, then the class path is searched for processors\&.
-.RE
-.PP
-\-s \fIdir\fR
-.RS 4
-Specifies the directory where to place the generated source files\&. The directory must already exist because
-\fBjavac\fR
-does not create it\&. If a class is part of a package, then the compiler puts the source file in a subdirectory that reflects the package name and creates directories as needed\&.
-.sp
-If you specify
-\fB\-s /home/mysrc\fR
-and the class is called
-\fBcom\&.mypackage\&.MyClass\fR, then the source file is put in
-\fB/home/mysrc/com/mypackage/MyClass\&.java\fR\&.
-.RE
-.PP
-\-source \fIrelease\fR
-.RS 4
-Specifies the version of source code accepted\&. The following values for
-\fBrelease\fR
-are allowed:
-.PP
+.TP
+-s \fIdir\fR
+.br
+Specifies the directory where to place the generated source files\&. The directory must already exist because \f3javac\fR does not create it\&. If a class is part of a package, then the compiler puts the source file in a subdirectory that reflects the package name and creates directories as needed\&.
+
+If you specify \f3-s /home/mysrc\fR and the class is called \f3com\&.mypackage\&.MyClass\fR, then the source file is put in \f3/home/mysrc/com/mypackage/MyClass\&.java\fR\&.
+.TP
+-source \fIrelease\fR
+.br
+Specifies the version of source code accepted\&. The following values for \f3release\fR are allowed:
+.RS     
+.TP     
 1\&.3
-.RS 4
 The compiler does not support assertions, generics, or other language features introduced after Java SE 1\&.3\&.
-.RE
-.PP
+.TP     
 1\&.4
-.RS 4
 The compiler accepts code containing assertions, which were introduced in Java SE 1\&.4\&.
-.RE
-.PP
+.TP     
 1\&.5
-.RS 4
 The compiler accepts code containing generics and other language features introduced in Java SE 5\&.
-.RE
-.PP
+.TP     
 5
-.RS 4
 Synonym for 1\&.5\&.
-.RE
-.PP
+.TP     
 1\&.6
-.RS 4
 No language changes were introduced in Java SE 6\&. However, encoding errors in source files are now reported as errors instead of warnings as in earlier releases of Java Platform, Standard Edition\&.
-.RE
-.PP
+.TP     
 6
-.RS 4
 Synonym for 1\&.6\&.
-.RE
-.PP
+.TP     
 1\&.7
-.RS 4
 The compiler accepts code with features introduced in Java SE 7\&.
-.RE
-.PP
+.TP     
 7
-.RS 4
 Synonym for 1\&.7\&.
-.RE
-.PP
+.TP     
 1\&.8
-.RS 4
 This is the default value\&. The compiler accepts code with features introduced in Java SE 8\&.
-.RE
-.PP
+.TP     
 8
-.RS 4
 Synonym for 1\&.8\&.
-.RE
-.RE
-.PP
-\-sourcepath \fIsourcepath\fR
-.RS 4
+.RE     
+
+.TP
+-sourcepath \fIsourcepath\fR
+.br
 Specifies the source code path to search for class or interface definitions\&. As with the user class path, source path entries are separated by colons (:) on Oracle Solaris and semicolons on Windows and can be directories, JAR archives, or ZIP archives\&. If packages are used, then the local path name within the directory or archive must reflect the package name\&.
-.sp
-\fBNote:\fR
-Classes found through the class path might be recompiled when their source files are also found\&. See Searching for Types\&.
-.RE
-.PP
-\-verbose
-.RS 4
+
+\fINote:\fR Classes found through the class path might be recompiled when their source files are also found\&. See Searching for Types\&.
+.TP
+-verbose
+.br
 Uses verbose output, which includes information about each class loaded and each source file compiled\&.
-.RE
-.PP
-\-version
-.RS 4
+.TP
+-version
+.br
 Prints release information\&.
-.RE
-.PP
-\-werror
-.RS 4
+.TP
+-werror
+.br
 Terminates compilation when warnings occur\&.
-.RE
-.PP
-\-X
-.RS 4
+.TP
+-X
+.br
 Displays information about nonstandard options and exits\&.
-.RE
-.SS "Cross\-Compilation Options"
-.PP
-By default, classes are compiled against the bootstrap and extension classes of the platform that
-\fBjavac\fR
-shipped with\&. But
-\fBjavac\fR
-also supports cross\-compiling, where classes are compiled against a bootstrap and extension classes of a different Java platform implementation\&. It is important to use the
-\fB\-bootclasspath\fR
-and
-\fB\-extdirs\fR
-options when cross\-compiling\&.
-.PP
-\-target \fIversion\fR
-.RS 4
+.SS CROSS-COMPILATION\ OPTIONS    
+By default, classes are compiled against the bootstrap and extension classes of the platform that \f3javac\fR shipped with\&. But \f3javac\fR also supports cross-compiling, where classes are compiled against a bootstrap and extension classes of a different Java platform implementation\&. It is important to use the \f3-bootclasspath\fR and \f3-extdirs\fR options when cross-compiling\&.
+.TP
+-target \fIversion\fR
+.br
 Generates class files that target a specified release of the virtual machine\&. Class files will run on the specified target and on later releases, but not on earlier releases of the JVM\&. Valid targets are 1\&.1, 1\&.2, 1\&.3, 1\&.4, 1\&.5 (also 5), 1\&.6 (also 6), 1\&.7 (also 7), and 1\&.8 (also 8)\&.
-.sp
-The default for the
-\fB\-target\fR
-option depends on the value of the
-\fB\-source\fR
-option:
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-If the
-\fB\-source\fR
-option is not specified, then the value of the
-\fB\-target\fR
-option is 1\&.8
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-If the
-\fB\-source\fR
-option is 1\&.2, then the value of the
-\fB\-target\fR
-option is 1\&.4
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-If the
-\fB\-source\fR
-option is 1\&.3, then the value of the
-\fB\-target\fR
-option is 1\&.4
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-If the
-\fB\-source\fR
-option is 1\&.5, then the value of the
-\fB\-target\fR
-option is 1\&.8
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-If the
-\fB\-source\fR
-option is 1\&.6, then the value of the
-\fB\-target\fR
-is option 1\&.8
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-If the
-\fB\-source\fR
-option is 1\&.7, then the value of the
-\fB\-target\fR
-is option 1\&.8
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-For all other values of the
-\fB\-source\fR
-option, the value of the
-\fB\-target\fR
-option is the value of the
-\fB\-source\fR
-option\&.
-.RE
-.RE
+
+The default for the \f3-target\fR option depends on the value of the \f3-source\fR option:
+.RS     
+.TP 0.2i    
+\(bu
+If the \f3-source\fR option is not specified, then the value of the \f3-target\fR option is 1\&.8
+.TP 0.2i    
+\(bu
+If the \f3-source\fR option is 1\&.2, then the value of the \f3-target\fR option is 1\&.4
+.TP 0.2i    
+\(bu
+If the \f3-source\fR option is 1\&.3, then the value of the \f3-target\fR option is 1\&.4
+.TP 0.2i    
+\(bu
+If the \f3-source\fR option is 1\&.5, then the value of the \f3-target\fR option is 1\&.8
+.TP 0.2i    
+\(bu
+If the \f3-source\fR option is 1\&.6, then the value of the \f3-target\fR is option 1\&.8
+.TP 0.2i    
+\(bu
+If the \f3-source\fR option is 1\&.7, then the value of the \f3-target\fR is option 1\&.8
+.TP 0.2i    
+\(bu
+For all other values of the \f3-source\fR option, the value of the \f3-target\fR option is the value of the \f3-source\fR option\&.
+.RE     
+
+.TP
+-bootclasspath \fIbootclasspath\fR
+.br
+Cross-compiles against the specified set of boot classes\&. As with the user class path, boot class path entries are separated by colons (:) and can be directories, JAR archives, or ZIP archives\&.
+.SS COMPACT\ PROFILE\ OPTION    
+Beginning with JDK 8, the \f3javac\fR compiler supports compact profiles\&. With compact profiles, applications that do not require the entire Java platform can be deployed and run with a smaller footprint\&. The compact profiles feature could be used to shorten the download time for applications from app stores\&. This feature makes for more compact deployment of Java applications that bundle the JRE\&. This feature is also useful in small devices\&.
 .PP
-\-bootclasspath \fIbootclasspath\fR
-.RS 4
-Cross\-compiles against the specified set of boot classes\&. As with the user class path, boot class path entries are separated by colons (:) and can be directories, JAR archives, or ZIP archives\&.
-.RE
-.SS "Compact Profile Option"
-.PP
-Beginning with JDK 8, the
-\fBjavac\fR
-compiler supports compact profiles\&. With compact profiles, applications that do not require the entire Java platform can be deployed and run with a smaller footprint\&. The compact profiles feature could be used to shorten the download time for applications from app stores\&. This feature makes for more compact deployment of Java applications that bundle the JRE\&. This feature is also useful in small devices\&.
-.PP
-The supported profile values are
-\fBcompact1\fR,
-\fBcompact2\fR, and
-\fBcompact3\fR\&. These are additive layers\&. Each higher\-numbered compact profile contains all of the APIs in profiles with smaller number names\&.
-.PP
-\-profile
-.RS 4
+The supported profile values are \f3compact1\fR, \f3compact2\fR, and \f3compact3\fR\&. These are additive layers\&. Each higher-numbered compact profile contains all of the APIs in profiles with smaller number names\&.
+.TP
+-profile
+.br
 When using compact profiles, this option specifies the profile name when compiling\&. For example:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBjavac \-profile compact1 Hello\&.java\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
+.sp     
+.nf     
+\f3javac \-profile compact1 Hello\&.java\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
 javac does not compile source code that uses any Java SE APIs that is not in the specified profile\&. Here is an example of the error message that results from attempting to compile such source code:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBcd jdk1\&.8\&.0/bin\fR
-\fB\&./javac \-profile compact1 Paint\&.java\fR
-\fBPaint\&.java:5: error: Applet is not available in profile \*(Aqcompact1\*(Aq\fR
-\fBimport java\&.applet\&.Applet;\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-In this example, you can correct the error by modifying the source to not use the
-\fBApplet\fR
-class\&. You could also correct the error by compiling without the \-profile option\&. Then the compilation would be run against the full set of Java SE APIs\&. (None of the compact profiles include the
-\fBApplet\fR
-class\&.)
-.sp
-An alternative way to compile with compact profiles is to use the
-\fB\-bootclasspath\fR
-option to specify a path to an
-\fBrt\&.jar\fR
-file that specifies a profile\*(Aqs image\&. Using the
-\fB\-profile\fR
-option instead does not require a profile image to be present on the system at compile time\&. This is useful when cross\-compiling\&.
-.RE
-.SS "Nonstandard Options"
-.PP
-\-Xbootclasspath/p:\fIpath\fR
-.RS 4
+.sp     
+.nf     
+\f3cd jdk1\&.8\&.0/bin\fP
+.fi     
+.nf     
+\f3\&./javac \-profile compact1 Paint\&.java\fP
+.fi     
+.nf     
+\f3Paint\&.java:5: error: Applet is not available in profile \&'compact1\&'\fP
+.fi     
+.nf     
+\f3import java\&.applet\&.Applet;\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+In this example, you can correct the error by modifying the source to not use the \f3Applet\fR class\&. You could also correct the error by compiling without the -profile option\&. Then the compilation would be run against the full set of Java SE APIs\&. (None of the compact profiles include the \f3Applet\fR class\&.)
+
+An alternative way to compile with compact profiles is to use the \f3-bootclasspath\fR option to specify a path to an \f3rt\&.jar\fR file that specifies a profile\&'s image\&. Using the \f3-profile\fR option instead does not require a profile image to be present on the system at compile time\&. This is useful when cross-compiling\&.
+.SS NONSTANDARD\ OPTIONS    
+.TP
+-Xbootclasspath/p:\fIpath\fR
+.br
 Adds a suffix to the bootstrap class path\&.
-.RE
-.PP
-\-Xbootclasspath/a:\fIpath\fR
-.RS 4
+.TP
+-Xbootclasspath/a:\fIpath\fR
+.br
 Adds a prefix to the bootstrap class path\&.
-.RE
-.PP
-\-Xbootclasspath/:\fIpath\fR
-.RS 4
+.TP
+-Xbootclasspath/:\fIpath\fR
+.br
 Overrides the location of the bootstrap class files\&.
-.RE
-.PP
-\-Xdoclint:[\-]\fIgroup\fR [\fI/access\fR]
-.RS 4
-Enables or disables specific groups of checks, where
-\fIgroup\fR
-is one of the following values:
-\fBaccessibility\fR,
-\fBsyntax\fR,
-\fBreference\fR,
-\fBhtml\fR
-or
-\fBmissing\fR\&. For more information about these groups of checks see the
-\fB\-Xdoclint\fR
-option of the
-\fBjavadoc\fR
-command\&. The
-\fB\-Xdoclint\fR
-option is disabled by default in the
-\fBjavac\fR
-command\&.
-.sp
-The variable
-\fIaccess\fR
-specifies the minimum visibility level of classes and members that the
-\fB\-Xdoclint\fR
-option checks\&. It can have one of the following values (in order of most to least visible) :
-\fBpublic\fR,
-\fBprotected\fR,
-\fBpackage\fR
-and
-\fBprivate\fR\&. For example, the following option checks classes and members (with all groups of checks) that have the access level protected and higher (which includes protected, package and public):
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-Xdoclint:all/protected\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
+.TP
+-Xdoclint:[-]\fIgroup\fR [\fI/access\fR]
+.br
+Enables or disables specific groups of checks, where \fIgroup\fR is one of the following values: \f3accessibility\fR, \f3syntax\fR, \f3reference\fR, \f3html\fR or \f3missing\fR\&. For more information about these groups of checks see the \f3-Xdoclint\fR option of the \f3javadoc\fR command\&. The \f3-Xdoclint\fR option is disabled by default in the \f3javac\fR command\&.
+
+The variable \fIaccess\fR specifies the minimum visibility level of classes and members that the \f3-Xdoclint\fR option checks\&. It can have one of the following values (in order of most to least visible) : \f3public\fR, \f3protected\fR, \f3package\fR and \f3private\fR\&. For example, the following option checks classes and members (with all groups of checks) that have the access level protected and higher (which includes protected, package and public):
+.sp     
+.nf     
+\f3\-Xdoclint:all/protected\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
 The following option enables all groups of checks for all access levels, except it will not check for HTML errors for classes and members that have access level package and higher (which includes package and public):
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-Xdoclint:all,\-html/package\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
-\-Xdoclint:none
-.RS 4
+.sp     
+.nf     
+\f3\-Xdoclint:all,\-html/package\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP
+-Xdoclint:none
+.br
 Disables all groups of checks\&.
-.RE
-.PP
-\-Xdoclint:all[\fI/access\fR]
-.RS 4
+.TP
+-Xdoclint:all[\fI/access\fR]
+.br
 Enables all groups of checks\&.
-.RE
-.PP
-\-Xlint
-.RS 4
-Enables all recommended warnings\&. In this release, enabling all available warnings is recommended\&.
-.RE
-.PP
-\-Xlint:all
-.RS 4
-Enables all recommended warnings\&. In this release, enabling all available warnings is recommended\&.
-.RE
-.PP
-\-Xlint:none
-.RS 4
+.TP
+-Xlint
+.br
+\fI\fREnables all recommended warnings\&. In this release, enabling all available warnings is recommended\&.
+.TP
+-Xlint:all
+.br
+\fI\fREnables all recommended warnings\&. In this release, enabling all available warnings is recommended\&.
+.TP
+-Xlint:none
+.br
 Disables all warnings\&.
-.RE
-.PP
-\-Xlint:\fIname\fR
-.RS 4
-Disables warning name\&. See Enable or Disable Warnings with the \-Xlint Option for a list of warnings you can disable with this option\&.
-.RE
-.PP
-\-Xlint:\fI\-name\fR
-.RS 4
-Disables warning name\&. See Enable or Disable Warnings with the \-Xlint Option with the
-\fB\-Xlint\fR
-option to get a list of warnings that you can disable with this option\&.
-.RE
-.PP
-\-Xmaxerrs \fInumber\fR
-.RS 4
+.TP
+-Xlint:\fIname\fR
+.br
+Disables warning name\&. See Enable or Disable Warnings with the -Xlint Option for a list of warnings you can disable with this option\&.
+.TP
+-Xlint:\fI-name\fR
+.br
+Disables warning name\&. See Enable or Disable Warnings with the -Xlint Option with the \f3-Xlint\fR option to get a list of warnings that you can disable with this option\&.
+.TP
+-Xmaxerrs \fInumber\fR
+.br
 Sets the maximum number of errors to print\&.
-.RE
-.PP
-\-Xmaxwarns \fInumber\fR
-.RS 4
+.TP
+-Xmaxwarns \fInumber\fR
+.br
 Sets the maximum number of warnings to print\&.
-.RE
-.PP
-\-Xstdout \fIfilename\fR
-.RS 4
-Sends compiler messages to the named file\&. By default, compiler messages go to
-\fBSystem\&.err\fR\&.
-.RE
-.PP
-\-Xprefer:[\fInewer,source\fR]
-.RS 4
-Specifies which file to read when both a source file and class file are found for a type\&. (See Searching for Types)\&. If the
-\fB\-Xprefer:newer\fR
-option is used, then it reads the newer of the source or class file for a type (default)\&. If the
-\fB\-Xprefer:source\fR
-option is used, then it reads the source file\&. Use \-\fBXprefer:source\fR
-when you want to be sure that any annotation processors can access annotations declared with a retention policy of
-\fBSOURCE\fR\&.
-.RE
-.PP
-\-Xpkginfo:[\fIalways\fR,\fIlegacy\fR,\fInonempty\fR]
-.RS 4
-Control whether javac generates
-\fBpackage\-info\&.class\fR
-files from package\-info\&.java files\&. Possible mode arguments for this option include the following\&.
-.PP
+.TP
+-Xstdout \fIfilename\fR
+.br
+Sends compiler messages to the named file\&. By default, compiler messages go to \f3System\&.err\fR\&.
+.TP
+-Xprefer:[\fInewer,source\fR]
+.br
+Specifies which file to read when both a source file and class file are found for a type\&. (See Searching for Types)\&. If the \f3-Xprefer:newer\fR option is used, then it reads the newer of the source or class file for a type (default)\&. If the \f3-Xprefer:source\fR option is used, then it reads the source file\&. Use -\f3Xprefer:source\fR when you want to be sure that any annotation processors can access annotations declared with a retention policy of \f3SOURCE\fR\&.
+.TP
+-Xpkginfo:[\fIalways\fR,\fIlegacy\fR,\fInonempty\fR]
+.br
+Control whether javac generates \f3package-info\&.class\fR files from package-info\&.java files\&. Possible mode arguments for this option include the following\&.
+.RS     
+.TP     
 always
-.RS 4
-Always generate a
-\fBpackage\-info\&.class\fR
-file for every
-\fBpackage\-info\&.java\fR
-file\&. This option may be useful if you use a build system such as Ant, which checks that each
-\fB\&.java\fR
-file has a corresponding
-\fB\&.class\fR
-file\&.
-.RE
-.PP
+Always generate a \f3package-info\&.class\fR file for every \f3package-info\&.java\fR file\&. This option may be useful if you use a build system such as Ant, which checks that each \f3\&.java\fR file has a corresponding \f3\&.class\fR file\&.
+.TP     
 legacy
-.RS 4
-Generate a
-\fBpackage\-info\&.class\fR
-file only if package\-info\&.java contains annotations\&. Don\*(Aqt generate a
-\fBpackage\-info\&.class\fR
-file if package\-info\&.java only contains comments\&.
-.sp
-\fBNote:\fR
-A
-\fBpackage\-info\&.class\fR
-file might be generated but be empty if all the annotations in the package\-info\&.java file have
-\fBRetentionPolicy\&.SOURCE\fR\&.
-.RE
-.PP
+Generate a \f3package-info\&.class\fR file only if package-info\&.java contains annotations\&. Don\&'t generate a \f3package-info\&.class\fR file if package-info\&.java only contains comments\&.
+
+\fINote:\fR A \f3package-info\&.class\fR file might be generated but be empty if all the annotations in the package-info\&.java file have \f3RetentionPolicy\&.SOURCE\fR\&.
+.TP     
 nonempty
-.RS 4
-Generate a
-\fBpackage\-info\&.class\fR
-file only if package\-info\&.java contains annotations with
-\fBRetentionPolicy\&.CLASS\fR
-or
-\fBRetentionPolicy\&.RUNTIME\fR\&.
-.RE
-.RE
-.PP
-\-Xprint
-.RS 4
+Generate a \f3package-info\&.class\fR file only if package-info\&.java contains annotations with \f3RetentionPolicy\&.CLASS\fR or \f3RetentionPolicy\&.RUNTIME\fR\&.
+.RE     
+
+.TP
+-Xprint
+.br
 Prints a textual representation of specified types for debugging purposes\&. Perform neither annotation processing nor compilation\&. The format of the output could change\&.
-.RE
-.PP
-\-XprintProcessorInfo
-.RS 4
+.TP
+-XprintProcessorInfo
+.br
 Prints information about which annotations a processor is asked to process\&.
-.RE
-.PP
-\-XprintRounds
-.RS 4
+.TP
+-XprintRounds
+.br
 Prints information about initial and subsequent annotation processing rounds\&.
-.RE
-.SH "ENABLE OR DISABLE WARNINGS WITH THE -XLINT OPTION"
-.PP
-Enable warning
-\fIname\fR
-with the
-\fB\-Xlint:name\fR
-option, where
-\fBname\fR
-is one of the following warning names\&. Note that you can disable a warning with the
-\fB\-Xlint:\-name:\fR
-option\&.
-.PP
+.SH ENABLE\ OR\ DISABLE\ WARNINGS\ WITH\ THE\ -XLINT\ OPTION    
+Enable warning \fIname\fR with the \f3-Xlint:name\fR option, where \f3name\fR is one of the following warning names\&. Note that you can disable a warning with the \f3-Xlint:-name:\fR option\&.
+.TP     
 cast
-.RS 4
 Warns about unnecessary and redundant casts, for example:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBString s = (String) "Hello!"\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
+.sp     
+.nf     
+\f3String s = (String) "Hello!"\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP     
 classfile
-.RS 4
 Warns about issues related to class file contents\&.
-.RE
-.PP
+.TP     
 deprecation
-.RS 4
 Warns about the use of deprecated items, for example:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBjava\&.util\&.Date myDate = new java\&.util\&.Date();\fR
-\fBint currentDay = myDate\&.getDay();\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-The method
-\fBjava\&.util\&.Date\&.getDay\fR
-has been deprecated since JDK 1\&.1
-.RE
-.PP
-dep\-ann
-.RS 4
-Warns about items that are documented with an
-\fB@deprecated\fR
-Javadoc comment, but do not have a
-\fB@Deprecated\fR
-annotation, for example:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB/**\fR
-\fB  * @deprecated As of Java SE 7, replaced by {@link #newMethod()}\fR
-\fB  */\fR
-\fBpublic static void deprecatedMethood() { }\fR
-\fBpublic static void newMethod() { }\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
+.sp     
+.nf     
+\f3java\&.util\&.Date myDate = new java\&.util\&.Date();\fP
+.fi     
+.nf     
+\f3int currentDay = myDate\&.getDay();\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+The method \f3java\&.util\&.Date\&.getDay\fR has been deprecated since JDK 1\&.1
+.TP     
+dep-ann
+Warns about items that are documented with an \f3@deprecated\fR Javadoc comment, but do not have a \f3@Deprecated\fR annotation, for example:
+.sp     
+.nf     
+\f3/**\fP
+.fi     
+.nf     
+\f3  * @deprecated As of Java SE 7, replaced by {@link #newMethod()}\fP
+.fi     
+.nf     
+\f3  */\fP
+.fi     
+.nf     
+\f3public static void deprecatedMethood() { }\fP
+.fi     
+.nf     
+\f3public static void newMethod() { }\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP     
 divzero
-.RS 4
 Warns about division by the constant integer 0, for example:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBint divideByZero = 42 / 0;\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
+.sp     
+.nf     
+\f3int divideByZero = 42 / 0;\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP     
 empty
-.RS 4
-Warns about empty statements after
-\fBif \fRstatements, for example:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBclass E {\fR
-\fB    void m() {\fR
-\fB         if (true) ;\fR
-\fB    }\fR
-\fB}\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
+Warns about empty statements after \f3if\fRstatements, for example:
+.sp     
+.nf     
+\f3class E {\fP
+.fi     
+.nf     
+\f3    void m() {\fP
+.fi     
+.nf     
+\f3         if (true) ;\fP
+.fi     
+.nf     
+\f3    }\fP
+.fi     
+.nf     
+\f3}\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP     
 fallthrough
-.RS 4
-Checks the switch blocks for fall\-through cases and provides a warning message for any that are found\&. Fall\-through cases are cases in a switch block, other than the last case in the block, whose code does not include a break statement, allowing code execution to fall through from that case to the next case\&. For example, the code following the case 1 label in this switch block does not end with a break statement:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBswitch (x) {\fR
-\fBcase 1:\fR
-\fB  System\&.out\&.println("1");\fR
-\fB  // No break statement here\&.\fR
-\fBcase 2:\fR
-\fB  System\&.out\&.println("2");\fR
-\fB}\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-If the
-\fB\-Xlint:fallthrough\fR
-option was used when compiling this code, then the compiler emits a warning about possible fall\-through into case, with the line number of the case in question\&.
-.RE
-.PP
+Checks the switch blocks for fall-through cases and provides a warning message for any that are found\&. Fall-through cases are cases in a switch block, other than the last case in the block, whose code does not include a break statement, allowing code execution to fall through from that case to the next case\&. For example, the code following the case 1 label in this switch block does not end with a break statement:
+.sp     
+.nf     
+\f3switch (x) {\fP
+.fi     
+.nf     
+\f3case 1:\fP
+.fi     
+.nf     
+\f3  System\&.out\&.println("1");\fP
+.fi     
+.nf     
+\f3  // No break statement here\&.\fP
+.fi     
+.nf     
+\f3case 2:\fP
+.fi     
+.nf     
+\f3  System\&.out\&.println("2");\fP
+.fi     
+.nf     
+\f3}\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+If the \f3-Xlint:fallthrough\fR option was used when compiling this code, then the compiler emits a warning about possible fall-through into case, with the line number of the case in question\&.
+.TP     
 finally
-.RS 4
-Warns about
-\fBfinally\fR
-clauses that cannot complete normally, for example:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBpublic static int m() {\fR
-\fB  try {\fR
-\fB     throw new NullPointerException();\fR
-\fB  }  catch (NullPointerException(); {\fR
-\fB     System\&.err\&.println("Caught NullPointerException\&.");\fR
-\fB     return 1;\fR
-\fB   } finally {\fR
-\fB     return 0;\fR
-\fB   }\fR
-\fB  }\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-The compiler generates a warning for the
-\fBfinally\fR
-block in this example\&. When the
-\fBint\fR
-method is called, it returns a value of 0\&. A
-\fBfinally\fR
-block executes when the
-\fBtry\fR
-block exits\&. In this example, when control is transferred to the
-\fBcatch\fR
-block, the
-\fBint\fR
-method exits\&. However, the
-\fBfinally\fR
-block must execute, so it is executed, even though control was transferred outside the method\&.
-.RE
-.PP
+Warns about \f3finally\fR clauses that cannot complete normally, for example:
+.sp     
+.nf     
+\f3public static int m() {\fP
+.fi     
+.nf     
+\f3  try {\fP
+.fi     
+.nf     
+\f3     throw new NullPointerException();\fP
+.fi     
+.nf     
+\f3  }  catch (NullPointerException(); {\fP
+.fi     
+.nf     
+\f3     System\&.err\&.println("Caught NullPointerException\&.");\fP
+.fi     
+.nf     
+\f3     return 1;\fP
+.fi     
+.nf     
+\f3   } finally {\fP
+.fi     
+.nf     
+\f3     return 0;\fP
+.fi     
+.nf     
+\f3   }\fP
+.fi     
+.nf     
+\f3  }\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+The compiler generates a warning for the \f3finally\fR block in this example\&. When the \f3int\fR method is called, it returns a value of 0\&. A \f3finally\fR block executes when the \f3try\fR block exits\&. In this example, when control is transferred to the \f3catch\fR block, the \f3int\fR method exits\&. However, the \f3finally\fR block must execute, so it is executed, even though control was transferred outside the method\&.
+.TP     
 options
-.RS 4
-Warns about issues that related to the use of command\-line options\&. See Cross\-Compilation Options\&.
-.RE
-.PP
+Warns about issues that related to the use of command-line options\&. See Cross-Compilation Options\&.
+.TP     
 overrides
-.RS 4
 Warns about issues regarding method overrides\&. For example, consider the following two classes:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBpublic class ClassWithVarargsMethod {\fR
-\fB  void varargsMethod(String\&.\&.\&. s) { }\fR
-\fB}\fR
- 
-\fBpublic class ClassWithOverridingMethod extends ClassWithVarargsMethod {\fR
-\fB   @Override\fR
-\fB   void varargsMethod(String[] s) { }\fR
-\fB}\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
+.sp     
+.nf     
+\f3public class ClassWithVarargsMethod {\fP
+.fi     
+.nf     
+\f3  void varargsMethod(String\&.\&.\&. s) { }\fP
+.fi     
+.nf     
+\f3}\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.nf     
+\f3public class ClassWithOverridingMethod extends ClassWithVarargsMethod {\fP
+.fi     
+.nf     
+\f3   @Override\fP
+.fi     
+.nf     
+\f3   void varargsMethod(String[] s) { }\fP
+.fi     
+.nf     
+\f3}\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
 The compiler generates a warning similar to the following:\&.
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBwarning: [override] varargsMethod(String[]) in ClassWithOverridingMethod \fR
-\fBoverrides varargsMethod(String\&.\&.\&.) in ClassWithVarargsMethod; overriding\fR
-\fBmethod is missing \*(Aq\&.\&.\&.\*(Aq\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-When the compiler encounters a
-\fBvarargs\fR
-method, it translates the
-\fBvarargs\fR
-formal parameter into an array\&. In the method
-\fBClassWithVarargsMethod\&.varargsMethod\fR, the compiler translates the
-\fBvarargs\fR
-formal parameter
-\fBString\&.\&.\&. s\fR
-to the formal parameter
-\fBString[] s\fR, an array, which matches the formal parameter of the method
-\fBClassWithOverridingMethod\&.varargsMethod\fR\&. Consequently, this example compiles\&.
-.RE
-.PP
+.sp     
+.nf     
+\f3warning: [override] varargsMethod(String[]) in ClassWithOverridingMethod \fP
+.fi     
+.nf     
+\f3overrides varargsMethod(String\&.\&.\&.) in ClassWithVarargsMethod; overriding\fP
+.fi     
+.nf     
+\f3method is missing \&'\&.\&.\&.\&'\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+When the compiler encounters a \f3varargs\fR method, it translates the \f3varargs\fR formal parameter into an array\&. In the method \f3ClassWithVarargsMethod\&.varargsMethod\fR, the compiler translates the \f3varargs\fR formal parameter \f3String\&.\&.\&. s\fR to the formal parameter \f3String[] s\fR, an array, which matches the formal parameter of the method \f3ClassWithOverridingMethod\&.varargsMethod\fR\&. Consequently, this example compiles\&.
+.TP     
 path
-.RS 4
-Warns about invalid path elements and nonexistent path directories on the command line (with regard to the class path, the source path, and other paths)\&. Such warnings cannot be suppressed with the
-\fB@SuppressWarnings\fR
-annotation, for example:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBjavac \-Xlint:path \-classpath /nonexistentpath Example\&.java\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
+Warns about invalid path elements and nonexistent path directories on the command line (with regard to the class path, the source path, and other paths)\&. Such warnings cannot be suppressed with the \f3@SuppressWarnings\fR annotation, for example:
+.sp     
+.nf     
+\f3javac \-Xlint:path \-classpath /nonexistentpath Example\&.java\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP     
 processing
-.RS 4
 Warn about issues regarding annotation processing\&. The compiler generates this warning when you have a class that has an annotation, and you use an annotation processor that cannot handle that type of exception\&. For example, the following is a simple annotation processor:
-.sp
-\fBSource file AnnocProc\&.java\fR:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBimport java\&.util\&.*;\fR
-\fBimport javax\&.annotation\&.processing\&.*;\fR
-\fBimport javax\&.lang\&.model\&.*;\fR
-\fBimport\&.javaz\&.lang\&.model\&.element\&.*;\fR
- 
-\fB@SupportedAnnotationTypes("NotAnno")\fR
-\fBpublic class AnnoProc extends AbstractProcessor {\fR
-\fB  public boolean process(Set<? extends TypeElement> elems, RoundEnvironment renv){\fR
-\fB     return true;\fR
-\fB  }\fR
- 
-\fB  public SourceVersion getSupportedSourceVersion() {\fR
-\fB     return SourceVersion\&.latest();\fR
-\fB   }\fR
-\fB}\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-\fBSource file AnnosWithoutProcessors\&.java\fR:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB@interface Anno { }\fR
-\fB \fR
-\fB@Anno\fR
-\fBclass AnnosWithoutProcessors { }\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-The following commands compile the annotation processor
-\fBAnnoProc\fR, then run this annotation processor against the source file
-\fBAnnosWithoutProcessors\&.java\fR:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBjavac AnnoProc\&.java\fR
-\fBjavac \-cp \&. \-Xlint:processing \-processor AnnoProc \-proc:only AnnosWithoutProcessors\&.java\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-When the compiler runs the annotation processor against the source file
-\fBAnnosWithoutProcessors\&.java\fR, it generates the following warning:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBwarning: [processing] No processor claimed any of these annotations: Anno\fR
-\fB \fR
-.fi
-.if n \{\
-.RE
-.\}
-To resolve this issue, you can rename the annotation defined and used in the class
-\fBAnnosWithoutProcessors\fR
-from
-\fBAnno\fR
-to
-\fBNotAnno\fR\&.
-.RE
-.PP
+
+\fISource file AnnocProc\&.java\fR:
+.sp     
+.nf     
+\f3import java\&.util\&.*;\fP
+.fi     
+.nf     
+\f3import javax\&.annotation\&.processing\&.*;\fP
+.fi     
+.nf     
+\f3import javax\&.lang\&.model\&.*;\fP
+.fi     
+.nf     
+\f3import\&.javaz\&.lang\&.model\&.element\&.*;\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.nf     
+\f3@SupportedAnnotationTypes("NotAnno")\fP
+.fi     
+.nf     
+\f3public class AnnoProc extends AbstractProcessor {\fP
+.fi     
+.nf     
+\f3  public boolean process(Set<? extends TypeElement> elems, RoundEnvironment renv){\fP
+.fi     
+.nf     
+\f3     return true;\fP
+.fi     
+.nf     
+\f3  }\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.nf     
+\f3  public SourceVersion getSupportedSourceVersion() {\fP
+.fi     
+.nf     
+\f3     return SourceVersion\&.latest();\fP
+.fi     
+.nf     
+\f3   }\fP
+.fi     
+.nf     
+\f3}\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+\fISource file AnnosWithoutProcessors\&.java\fR:
+.sp     
+.nf     
+\f3@interface Anno { }\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.nf     
+\f3@Anno\fP
+.fi     
+.nf     
+\f3class AnnosWithoutProcessors { }\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+The following commands compile the annotation processor \f3AnnoProc\fR, then run this annotation processor against the source file \f3AnnosWithoutProcessors\&.java\fR:
+.sp     
+.nf     
+\f3javac AnnoProc\&.java\fP
+.fi     
+.nf     
+\f3javac \-cp \&. \-Xlint:processing \-processor AnnoProc \-proc:only AnnosWithoutProcessors\&.java\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+When the compiler runs the annotation processor against the source file \f3AnnosWithoutProcessors\&.java\fR, it generates the following warning:
+.sp     
+.nf     
+\f3warning: [processing] No processor claimed any of these annotations: Anno\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+To resolve this issue, you can rename the annotation defined and used in the class \f3AnnosWithoutProcessors\fR from \f3Anno\fR to \f3NotAnno\fR\&.
+.TP     
 rawtypes
-.RS 4
-Warns about unchecked operations on raw types\&. The following statement generates a
-\fBrawtypes\fR
-warning:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBvoid countElements(List l) { \&.\&.\&. }\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-The following example does not generate a
-\fBrawtypes\fR
-warning
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBvoid countElements(List<?> l) { \&.\&.\&. }\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-\fBList\fR
-is a raw type\&. However,
-\fBList<?>\fR
-is an unbounded wildcard parameterized type\&. Because
-\fBList\fR
-is a parameterized interface, always specify its type argument\&. In this example, the
-\fBList\fR
-formal argument is specified with an unbounded wildcard (\fB?\fR) as its formal type parameter, which means that the
-\fBcountElements\fR
-method can accept any instantiation of the
-\fBList\fR
-interface\&.
-.RE
-.PP
+Warns about unchecked operations on raw types\&. The following statement generates a \f3rawtypes\fR warning:
+.sp     
+.nf     
+\f3void countElements(List l) { \&.\&.\&. }\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+The following example does not generate a \f3rawtypes\fR warning
+.sp     
+.nf     
+\f3void countElements(List<?> l) { \&.\&.\&. }\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+\f3List\fR is a raw type\&. However, \f3List<?>\fR is an unbounded wildcard parameterized type\&. Because \f3List\fR is a parameterized interface, always specify its type argument\&. In this example, the \f3List\fR formal argument is specified with an unbounded wildcard (\f3?\fR) as its formal type parameter, which means that the \f3countElements\fR method can accept any instantiation of the \f3List\fR interface\&.
+.TP     
 Serial
-.RS 4
-Warns about missing
-\fBserialVersionUID\fR
-definitions on serializable classes, for example:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBpublic class PersistentTime implements Serializable\fR
-\fB{\fR
-\fB  private Date time;\fR
-\fB \fR
-\fB   public PersistentTime() {\fR
-\fB     time = Calendar\&.getInstance()\&.getTime();\fR
-\fB   }\fR
-\fB \fR
-\fB   public Date getTime() {\fR
-\fB     return time;\fR
-\fB   }\fR
-\fB}\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-The compiler generates the following warning:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBwarning: [serial] serializable class PersistentTime has no definition of\fR
-\fBserialVersionUID\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-If a serializable class does not explicitly declare a field named
-\fBserialVersionUID\fR, then the serialization runtime environment calculates a default
-\fBserialVersionUID\fR
-value for that class based on various aspects of the class, as described in the Java Object Serialization Specification\&. However, it is strongly recommended that all serializable classes explicitly declare
-\fBserialVersionUID\fR
-values because the default process of computing
-\fBserialVersionUID\fR
-vales is highly sensitive to class details that can vary depending on compiler implementations, and as a result, might cause an unexpected
-\fBInvalidClassExceptions\fR
-during deserialization\&. To guarantee a consistent
-\fBserialVersionUID\fR
-value across different Java compiler implementations, a serializable class must declare an explicit
-\fBserialVersionUID\fR
-value\&.
-.RE
-.PP
-static
-.RS 4
-Warns about issues relating to the use of statics, for example:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBclass XLintStatic {\fR
-\fB    static void m1() { }\fR
-\fB    void m2() { this\&.m1(); }\fR
-\fB}\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
+Warns about missing \f3serialVersionUID\fR definitions on serializable classes, for example:
+.sp     
+.nf     
+\f3public class PersistentTime implements Serializable\fP
+.fi     
+.nf     
+\f3{\fP
+.fi     
+.nf     
+\f3  private Date time;\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.nf     
+\f3   public PersistentTime() {\fP
+.fi     
+.nf     
+\f3     time = Calendar\&.getInstance()\&.getTime();\fP
+.fi     
+.nf     
+\f3   }\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.nf     
+\f3   public Date getTime() {\fP
+.fi     
+.nf     
+\f3     return time;\fP
+.fi     
+.nf     
+\f3   }\fP
+.fi     
+.nf     
+\f3}\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
 The compiler generates the following warning:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBwarning: [static] static method should be qualified by type name, \fR
-\fBXLintStatic, instead of by an expression\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-To resolve this issue, you can call the
-\fBstatic\fR
-method
-\fBm1\fR
-as follows:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBXLintStatic\&.m1();\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-Alternately, you can remove the
-\fBstatic\fR
-keyword from the declaration of the method
-\fBm1\fR\&.
-.RE
-.PP
+.sp     
+.nf     
+\f3warning: [serial] serializable class PersistentTime has no definition of\fP
+.fi     
+.nf     
+\f3serialVersionUID\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+If a serializable class does not explicitly declare a field named \f3serialVersionUID\fR, then the serialization runtime environment calculates a default \f3serialVersionUID\fR value for that class based on various aspects of the class, as described in the Java Object Serialization Specification\&. However, it is strongly recommended that all serializable classes explicitly declare \f3serialVersionUID\fR values because the default process of computing \f3serialVersionUID\fR vales is highly sensitive to class details that can vary depending on compiler implementations, and as a result, might cause an unexpected \f3InvalidClassExceptions\fR during deserialization\&. To guarantee a consistent \f3serialVersionUID\fR value across different Java compiler implementations, a serializable class must declare an explicit \f3serialVersionUID\fR value\&.
+.TP     
+static
+Warns about issues relating to the use of statics, for example:
+.sp     
+.nf     
+\f3class XLintStatic {\fP
+.fi     
+.nf     
+\f3    static void m1() { }\fP
+.fi     
+.nf     
+\f3    void m2() { this\&.m1(); }\fP
+.fi     
+.nf     
+\f3}\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+The compiler generates the following warning:
+.sp     
+.nf     
+\f3warning: [static] static method should be qualified by type name, \fP
+.fi     
+.nf     
+\f3XLintStatic, instead of by an expression\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+To resolve this issue, you can call the \f3static\fR method \f3m1\fR as follows:
+.sp     
+.nf     
+\f3XLintStatic\&.m1();\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+Alternately, you can remove the \f3static\fR keyword from the declaration of the method \f3m1\fR\&.
+.TP     
 try
-.RS 4
-Warns about issues relating to use of
-\fBtry\fR
-blocks, including try\-with\-resources statements\&. For example, a warning is generated for the following statement because the resource
-\fBac\fR
-declared in the
-\fBtry\fR
-block is not used:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBtry ( AutoCloseable ac = getResource() ) {    // do nothing}\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
+Warns about issues relating to use of \f3try\fR blocks, including try-with-resources statements\&. For example, a warning is generated for the following statement because the resource \f3ac\fR declared in the \f3try\fR block is not used:
+.sp     
+.nf     
+\f3try ( AutoCloseable ac = getResource() ) {    // do nothing}\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP     
 unchecked
-.RS 4
 Gives more detail for unchecked conversion warnings that are mandated by the Java Language Specification, for example:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBList l = new ArrayList<Number>();\fR
-\fBList<String> ls = l;       // unchecked warning\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-During type erasure, the types
-\fBArrayList<Number>\fR
-and
-\fBList<String>\fR
-become
-\fBArrayList\fR
-and
-\fBList\fR, respectively\&.
-.sp
-The
-\fBls\fR
-command has the parameterized type
-\fBList<String>\fR\&. When the
-\fBList\fR
-referenced by
-\fBl\fR
-is assigned to
-\fBls\fR, the compiler generates an unchecked warning\&. At compile time, the compiler and JVM cannot determine whether
-\fBl\fR
-refers to a
-\fBList<String>\fR
-type\&. In this case,
-\fBl\fR
-does not refer to a
-\fBList<String>\fR
-type\&. As a result, heap pollution occurs\&.
-.sp
-A heap pollution situation occurs when the
-\fBList\fR
-object
-\fBl\fR, whose static type is
-\fBList<Number>\fR, is assigned to another
-\fBList\fR
-object,
-\fBls\fR, that has a different static type,
-\fBList<String>\fR\&. However, the compiler still allows this assignment\&. It must allow this assignment to preserve backward compatibility with releases of Java SE that do not support generics\&. Because of type erasure,
-\fBList<Number>\fR
-and
-\fBList<String>\fR
-both become
-\fBList\fR\&. Consequently, the compiler allows the assignment of the object
-\fBl\fR\fB,\fR
-which has a raw type of
-\fBList\fR, to the object
-\fBls\fR\&.
-.RE
-.PP
+.sp     
+.nf     
+\f3List l = new ArrayList<Number>();\fP
+.fi     
+.nf     
+\f3List<String> ls = l;       // unchecked warning\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+During type erasure, the types \f3ArrayList<Number>\fR and \f3List<String>\fR become \f3ArrayList\fR and \f3List\fR, respectively\&.
+
+The \f3ls\fR command has the parameterized type \f3List<String>\fR\&. When the \f3List\fR referenced by \f3l\fR is assigned to \f3ls\fR, the compiler generates an unchecked warning\&. At compile time, the compiler and JVM cannot determine whether \f3l\fR refers to a \f3List<String>\fR type\&. In this case, \f3l\fR does not refer to a \f3List<String>\fR type\&. As a result, heap pollution occurs\&.
+
+A heap pollution situation occurs when the \f3List\fR object \f3l\fR, whose static type is \f3List<Number>\fR, is assigned to another \f3List\fR object, \f3ls\fR, that has a different static type, \f3List<String>\fR\&. However, the compiler still allows this assignment\&. It must allow this assignment to preserve backward compatibility with releases of Java SE that do not support generics\&. Because of type erasure, \f3List<Number>\fR and \f3List<String>\fR both become \f3List\fR\&. Consequently, the compiler allows the assignment of the object \f3l\fR\f3,\fR which has a raw type of \f3List\fR, to the object \f3ls\fR\&.
+.TP     
 varargs
-.RS 4
-Warns about unsafe usages of variable arguments (\fBvarargs\fR) methods, in particular, those that contain non\-reifiable arguments, for example:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBpublic class ArrayBuilder {\fR
-\fB  public static <T> void addToList (List<T> listArg, T\&.\&.\&. elements) {\fR
-\fB    for (T x : elements) {\fR
-\fB      listArg\&.add(x);\fR
-\fB    }\fR
-\fB  }\fR
-\fB}\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-\fBNote:\fR
-A non\-reifiable type is a type whose type information is not fully available at runtime\&.
-.sp
-The compiler generates the following warning for the definition of the method
-\fBArrayBuilder\&.addToList\fR
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBwarning: [varargs] Possible heap pollution from parameterized vararg type T\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-When the compiler encounters a varargs method, it translates the
-\fBvarargs\fR
-formal parameter into an array\&. However, the Java programming language does not permit the creation of arrays of parameterized types\&. In the method
-\fBArrayBuilder\&.addToList\fR, the compiler translates the
-\fBvarargs\fR
-formal parameter
-\fBT\&.\&.\&.\fR
-elements to the formal parameter
-\fBT[]\fR
-elements, an array\&. However, because of type erasure, the compiler converts the
-\fBvarargs\fR
-formal parameter to
-\fBObject[]\fR
-elements\&. Consequently, there is a possibility of heap pollution\&.
-.RE
-.SH "COMMAND-LINE ARGUMENT FILES"
+Warns about unsafe usages of variable arguments (\f3varargs\fR) methods, in particular, those that contain non-reifiable arguments, for example:
+.sp     
+.nf     
+\f3public class ArrayBuilder {\fP
+.fi     
+.nf     
+\f3  public static <T> void addToList (List<T> listArg, T\&.\&.\&. elements) {\fP
+.fi     
+.nf     
+\f3    for (T x : elements) {\fP
+.fi     
+.nf     
+\f3      listArg\&.add(x);\fP
+.fi     
+.nf     
+\f3    }\fP
+.fi     
+.nf     
+\f3  }\fP
+.fi     
+.nf     
+\f3}\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+\fINote:\fR A non-reifiable type is a type whose type information is not fully available at runtime\&.
+
+The compiler generates the following warning for the definition of the method \f3ArrayBuilder\&.addToList\fR
+.sp     
+.nf     
+\f3warning: [varargs] Possible heap pollution from parameterized vararg type T\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+When the compiler encounters a varargs method, it translates the \f3varargs\fR formal parameter into an array\&. However, the Java programming language does not permit the creation of arrays of parameterized types\&. In the method \f3ArrayBuilder\&.addToList\fR, the compiler translates the \f3varargs\fR formal parameter \f3T\&.\&.\&.\fR elements to the formal parameter \f3T[]\fR elements, an array\&. However, because of type erasure, the compiler converts the \f3varargs\fR formal parameter to \f3Object[]\fR elements\&. Consequently, there is a possibility of heap pollution\&.
+.SH COMMAND-LINE\ ARGUMENT\ FILES    
+To shorten or simplify the \f3javac\fR command, you can specify one or more files that contain arguments to the \f3javac\fR command (except \f3-J\fR options)\&. This enables you to create \f3javac\fR commands of any length on any operating system\&.
 .PP
-To shorten or simplify the
-\fBjavac\fR
-command, you can specify one or more files that contain arguments to the
-\fBjavac\fR
-command (except
-\fB\-J\fR
-options)\&. This enables you to create
-\fBjavac\fR
-commands of any length on any operating system\&.
+An argument file can include \f3javac\fR options and source file names in any combination\&. The arguments within a file can be separated by spaces or new line characters\&. If a file name contains embedded spaces, then put the whole file name in double quotation marks\&.
+.PP
+File Names within an argument file are relative to the current directory, not the location of the argument file\&. Wild cards (*) are not allowed in these lists (such as for specifying \f3*\&.java\fR)\&. Use of the at sign (@) to recursively interpret files is not supported\&. The \f3-J\fR options are not supported because they are passed to the launcher, which does not support argument files\&.
 .PP
-An argument file can include
-\fBjavac\fR
-options and source file names in any combination\&. The arguments within a file can be separated by spaces or new line characters\&. If a file name contains embedded spaces, then put the whole file name in double quotation marks\&.
+When executing the \f3javac\fR command, pass in the path and name of each argument file with the at sign (@) leading character\&. When the \f3javac\fR command encounters an argument beginning with the at sign (@), it expands the contents of that file into the argument list\&.
 .PP
-File Names within an argument file are relative to the current directory, not the location of the argument file\&. Wild cards (*) are not allowed in these lists (such as for specifying
-\fB*\&.java\fR)\&. Use of the at sign (@) to recursively interpret files is not supported\&. The
-\fB\-J\fR
-options are not supported because they are passed to the launcher, which does not support argument files\&.
-.PP
-When executing the
-\fBjavac\fR
-command, pass in the path and name of each argument file with the at sign (@) leading character\&. When the
-\fBjavac\fR
-command encounters an argument beginning with the at sign (@), it expands the contents of that file into the argument list\&.
+\f3Example 1 Single Argument File\fR
 .PP
-\fBExample 1\fR
-.br
-Single Argument File
-.RS 4
-You could use a single argument file named
-\fBargfile\fR
-to hold all
-\fBjavac\fR
-arguments:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBjavac @argfile\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
+You could use a single argument file named \f3argfile\fR to hold all \f3javac\fR arguments:
+.sp     
+.nf     
+\f3javac @argfile\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
 This argument file could contain the contents of both files shown in Example 2
-.RE
+.PP
+\f3Example 2 Two Argument Files\fR
 .PP
-\fBExample 2\fR
-.br
-Two Argument Files
-.RS 4
-You can create two argument files: one for the
-\fBjavac\fR
-options and the other for the source file names\&. Note that the following lists have no line\-continuation characters\&.
-.sp
+You can create two argument files: one for the \f3javac\fR options and the other for the source file names\&. Note that the following lists have no line-continuation characters\&.
+.PP
 Create a file named options that contains the following:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-d classes\fR
-.fi
-.if n \{\
-.RE
-.\}
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-g\fR
-.fi
-.if n \{\
-.RE
-.\}
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-sourcepath /java/pubs/ws/1\&.3/src/share/classes\fR
-.fi
-.if n \{\
-.RE
-.\}
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
- 
-.fi
-.if n \{\
-.RE
-.\}
+.sp     
+.nf     
+\f3\-d classes\fP
+.fi     
+.nf     
+\f3\-g\fP
+.fi     
+.nf     
+\f3\-sourcepath /java/pubs/ws/1\&.3/src/share/classes\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
 Create a file named classes that contains the following:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBMyClass1\&.java\fR
-\fBMyClass2\&.java\fR
-\fBMyClass3\&.java\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-Then, run the
-\fBjavac\fR
-command as follows:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBjavac @options @classes\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
+.sp     
+.nf     
+\f3MyClass1\&.java\fP
+.fi     
+.nf     
+\f3MyClass2\&.java\fP
+.fi     
+.nf     
+\f3MyClass3\&.java\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+Then, run the \f3javac\fR command as follows:
+.sp     
+.nf     
+\f3javac @options @classes\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+\f3Example 3 Argument Files with Paths\fR
 .PP
-\fBExample 3\fR
-.br
-Argument Files with Paths
-.RS 4
-The argument files can have paths, but any file names inside the files are relative to the current working directory (not
-\fBpath1\fR
-or
-\fBpath2\fR):
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBjavac @path1/options @path2/classes\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.SH "ANNOTATION PROCESSING"
+The argument files can have paths, but any file names inside the files are relative to the current working directory (not \f3path1\fR or \f3path2\fR):
+.sp     
+.nf     
+\f3javac @path1/options @path2/classes\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+.SH ANNOTATION\ PROCESSING    
+The \f3javac\fR command provides direct support for annotation processing, superseding the need for the separate annotation processing command, \f3apt\fR\&.
 .PP
-The
-\fBjavac\fR
-command provides direct support for annotation processing, superseding the need for the separate annotation processing command,
-\fBapt\fR\&.
-.PP
-The API for annotation processors is defined in the
-\fBjavax\&.annotation\&.processing\fR
-and j\fBavax\&.lang\&.model\fR
-packages and subpackages\&.
-.SS "How Annotation Processing Works"
-.PP
-Unless annotation processing is disabled with the
-\fB\-proc:none\fR
-option, the compiler searches for any annotation processors that are available\&. The search path can be specified with the
-\fB\-processorpath\fR
-option\&. If no path is specified, then the user class path is used\&. Processors are located by means of service provider\-configuration files named
-\fBMETA\-INF/services/javax\&.annotation\&.processing\fR\&.Processor on the search path\&. Such files should contain the names of any annotation processors to be used, listed one per line\&. Alternatively, processors can be specified explicitly, using the
-\fB\-processor\fR
-option\&.
+The API for annotation processors is defined in the \f3javax\&.annotation\&.processing\fR and j\f3avax\&.lang\&.model\fR packages and subpackages\&.
+.SS HOW\ ANNOTATION\ PROCESSING\ WORKS    
+Unless annotation processing is disabled with the \f3-proc:none\fR option, the compiler searches for any annotation processors that are available\&. The search path can be specified with the \f3-processorpath\fR option\&. If no path is specified, then the user class path is used\&. Processors are located by means of service provider-configuration files named \f3META-INF/services/javax\&.annotation\&.processing\fR\&.Processor on the search path\&. Such files should contain the names of any annotation processors to be used, listed one per line\&. Alternatively, processors can be specified explicitly, using the \f3-processor\fR option\&.
 .PP
 After scanning the source files and classes on the command line to determine what annotations are present, the compiler queries the processors to determine what annotations they process\&. When a match is found, the processor is called\&. A processor can claim the annotations it processes, in which case no further attempt is made to find any processors for those annotations\&. After all of the annotations are claimed, the compiler does not search for additional processors\&.
 .PP
 If any processors generate new source files, then another round of annotation processing occurs: Any newly generated source files are scanned, and the annotations processed as before\&. Any processors called on previous rounds are also called on all subsequent rounds\&. This continues until no new source files are generated\&.
 .PP
-After a round occurs where no new source files are generated, the annotation processors are called one last time, to give them a chance to complete any remaining work\&. Finally, unless the
-\fB\-proc:only\fR
-option is used, the compiler compiles the original and all generated source files\&.
-.SS "Implicitly Loaded Source Files"
-.PP
-To compile a set of source files, the compiler might need to implicitly load additional source files\&. See Searching for Types\&. Such files are currently not subject to annotation processing\&. By default, the compiler gives a warning when annotation processing occurred and any implicitly loaded source files are compiled\&. The
-\fB\-implicit\fR
-option provides a way to suppress the warning\&.
-.SH "SEARCHING FOR TYPES"
-.PP
+After a round occurs where no new source files are generated, the annotation processors are called one last time, to give them a chance to complete any remaining work\&. Finally, unless the \f3-proc:only\fR option is used, the compiler compiles the original and all generated source files\&.
+.SS IMPLICITLY\ LOADED\ SOURCE\ FILES    
+To compile a set of source files, the compiler might need to implicitly load additional source files\&. See Searching for Types\&. Such files are currently not subject to annotation processing\&. By default, the compiler gives a warning when annotation processing occurred and any implicitly loaded source files are compiled\&. The \f3-implicit\fR option provides a way to suppress the warning\&.
+.SH SEARCHING\ FOR\ TYPES    
 To compile a source file, the compiler often needs information about a type, but the type definition is not in the source files specified on the command line\&. The compiler needs type information for every class or interface used, extended, or implemented in the source file\&. This includes classes and interfaces not explicitly mentioned in the source file, but that provide information through inheritance\&.
 .PP
-For example, when you create a subclass
-\fBjava\&.applet\&.Applet\fR, you are also using the ancestor classes of
-\fBApplet\fR:
-\fBjava\&.awt\&.Panel\fR,
-\fBjava\&.awt\&.Container\fR,
-\fBjava\&.awt\&.Component\fR, and
-\fBjava\&.lang\&.Object\fR\&.
+For example, when you create a subclass \f3java\&.applet\&.Applet\fR, you are also using the ancestor classes of \f3Applet\fR: \f3java\&.awt\&.Panel\fR, \f3java\&.awt\&.Container\fR, \f3java\&.awt\&.Component\fR, and \f3java\&.lang\&.Object\fR\&.
+.PP
+When the compiler needs type information, it searches for a source file or class file that defines the type\&. The compiler searches for class files first in the bootstrap and extension classes, then in the user class path (which by default is the current directory)\&. The user class path is defined by setting the \f3CLASSPATH\fR environment variable or by using the \f3-classpath\fR option\&.
+.PP
+If you set the \f3-sourcepath\fR option, then the compiler searches the indicated path for source files\&. Otherwise, the compiler searches the user class path for both class files and source files\&.
 .PP
-When the compiler needs type information, it searches for a source file or class file that defines the type\&. The compiler searches for class files first in the bootstrap and extension classes, then in the user class path (which by default is the current directory)\&. The user class path is defined by setting the
-\fBCLASSPATH\fR
-environment variable or by using the
-\fB\-classpath\fR
-option\&.
+You can specify different bootstrap or extension classes with the \f3-bootclasspath\fR and the \f3-extdirs\fR options\&. See Cross-Compilation Options\&.
 .PP
-If you set the
-\fB\-sourcepath\fR
-option, then the compiler searches the indicated path for source files\&. Otherwise, the compiler searches the user class path for both class files and source files\&.
+A successful type search may produce a class file, a source file, or both\&. If both are found, then you can use the \f3-Xprefer\fR option to instruct the compiler which to use\&. If \f3newer\fR is specified, then the compiler uses the newer of the two files\&. If \f3source\fR is specified, the compiler uses the source file\&. The default is \f3newer\fR\&.
 .PP
-You can specify different bootstrap or extension classes with the
-\fB\-bootclasspath\fR
-and the
-\fB\-extdirs\fR
-options\&. See Cross\-Compilation Options\&.
+If a type search finds a source file for a required type, either by itself, or as a result of the setting for the \f3-Xprefer\fR option, then the compiler reads the source file to get the information it needs\&. By default the compiler also compiles the source file\&. You can use the \f3-implicit\fR option to specify the behavior\&. If \f3none\fR is specified, then no class files are generated for the source file\&. If \f3class\fR is specified, then class files are generated for the source file\&.
 .PP
-A successful type search may produce a class file, a source file, or both\&. If both are found, then you can use the
-\fB\-Xprefer\fR
-option to instruct the compiler which to use\&. If
-\fBnewer\fR
-is specified, then the compiler uses the newer of the two files\&. If
-\fBsource\fR
-is specified, the compiler uses the source file\&. The default is
-\fBnewer\fR\&.
-.PP
-If a type search finds a source file for a required type, either by itself, or as a result of the setting for the
-\fB\-Xprefer\fR
-option, then the compiler reads the source file to get the information it needs\&. By default the compiler also compiles the source file\&. You can use the
-\fB\-implicit\fR
-option to specify the behavior\&. If
-\fBnone\fR
-is specified, then no class files are generated for the source file\&. If
-\fBclass\fR
-is specified, then class files are generated for the source file\&.
-.PP
-The compiler might not discover the need for some type information until after annotation processing completes\&. When the type information is found in a source file and no
-\fB\-implicit\fR
-option is specified, the compiler gives a warning that the file is being compiled without being subject to annotation processing\&. To disable the warning, either specify the file on the command line (so that it will be subject to annotation processing) or use the
-\fB\-implicit\fR
-option to specify whether or not class files should be generated for such source files\&.
-.SH "PROGRAMMATIC INTERFACE"
+The compiler might not discover the need for some type information until after annotation processing completes\&. When the type information is found in a source file and no \f3-implicit\fR option is specified, the compiler gives a warning that the file is being compiled without being subject to annotation processing\&. To disable the warning, either specify the file on the command line (so that it will be subject to annotation processing) or use the \f3-implicit\fR option to specify whether or not class files should be generated for such source files\&.
+.SH PROGRAMMATIC\ INTERFACE    
+The \f3javac\fR command supports the new Java Compiler API defined by the classes and interfaces in the \f3javax\&.tools\fR package\&.
+.SS EXAMPLE    
+To compile as though providing command-line arguments, use the following syntax:
+.sp     
+.nf     
+\f3JavaCompiler javac = ToolProvider\&.getSystemJavaCompiler();\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+The example writes diagnostics to the standard output stream and returns the exit code that \f3javac\fR would give when called from the command line\&.
 .PP
-The
-\fBjavac\fR
-command supports the new Java Compiler API defined by the classes and interfaces in the
-\fBjavax\&.tools\fR
-package\&.
-.SS "Example"
-.PP
-To compile as though providing command\-line arguments, use the following syntax:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBJavaCompiler javac = ToolProvider\&.getSystemJavaCompiler();\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.PP
-The example writes diagnostics to the standard output stream and returns the exit code that
-\fBjavac\fR
-would give when called from the command line\&.
+You can use other methods in the \f3javax\&.tools\&.JavaCompiler\fR interface to handle diagnostics, control where files are read from and written to, and more\&.
+.SS OLD\ INTERFACE    
+\fINote:\fR This API is retained for backward compatibility only\&. All new code should use the newer Java Compiler API\&.
 .PP
-You can use other methods in the
-\fBjavax\&.tools\&.JavaCompiler\fR
-interface to handle diagnostics, control where files are read from and written to, and more\&.
-.SS "Old Interface"
-.PP
-\fBNote:\fR
-This API is retained for backward compatibility only\&. All new code should use the newer Java Compiler API\&.
+The \f3com\&.sun\&.tools\&.javac\&.Main\fR class provides two static methods to call the compiler from a program:
+.sp     
+.nf     
+\f3public static int compile(String[] args);\fP
+.fi     
+.nf     
+\f3public static int compile(String[] args, PrintWriter out);\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+The \f3args\fR parameter represents any of the command-line arguments that would typically be passed to the compiler\&.
 .PP
-The
-\fBcom\&.sun\&.tools\&.javac\&.Main\fR
-class provides two static methods to call the compiler from a program:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBpublic static int compile(String[] args);\fR
-\fBpublic static int compile(String[] args, PrintWriter out);\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
+The \f3out\fR parameter indicates where the compiler diagnostic output is directed\&.
+.PP
+The \f3return\fR value is equivalent to the \f3exit\fR value from \f3javac\fR\&.
 .PP
-The
-\fBargs\fR
-parameter represents any of the command\-line arguments that would typically be passed to the compiler\&.
+\fINote:\fR All other classes and methods found in a package with names that start with \f3com\&.sun\&.tools\&.javac\fR (subpackages of \f3com\&.sun\&.tools\&.javac\fR) are strictly internal and subject to change at any time\&.
+.SH EXAMPLES    
+\f3Example 1 Compile a Simple Program\fR
 .PP
-The
-\fBout\fR
-parameter indicates where the compiler diagnostic output is directed\&.
+This example shows how to compile the \f3Hello\&.java\fR source file in the greetings directory\&. The class defined in \f3Hello\&.java\fR is called \f3greetings\&.Hello\fR\&. The greetings directory is the package directory both for the source file and the class file and is underneath the current directory\&. This makes it possible to use the default user class path\&. It also makes it unnecessary to specify a separate destination directory with the \f3-d\fR option\&.
 .PP
-The
-\fBreturn\fR
-value is equivalent to the
-\fBexit\fR
-value from
-\fBjavac\fR\&.
-.PP
-\fBNote:\fR
-All other classes and methods found in a package with names that start with
-\fBcom\&.sun\&.tools\&.javac\fR
-(subpackages of
-\fBcom\&.sun\&.tools\&.javac\fR) are strictly internal and subject to change at any time\&.
-.SH "EXAMPLES"
-.PP
-\fBExample 1\fR
-.br
-Compile a Simple Program
-.RS 4
-This example shows how to compile the
-\fBHello\&.java\fR
-source file in the greetings directory\&. The class defined in
-\fBHello\&.java\fR
-is called
-\fBgreetings\&.Hello\fR\&. The greetings directory is the package directory both for the source file and the class file and is underneath the current directory\&. This makes it possible to use the default user class path\&. It also makes it unnecessary to specify a separate destination directory with the
-\fB\-d\fR
-option\&.
-.sp
-The source code in
-\fBHello\&.java\fR:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBpackage greetings;\fR
-\fB \fR
-\fBpublic class Hello {\fR
-\fB    public static void main(String[] args) {\fR
-\fB        for (int i=0; i < args\&.length; i++) {\fR
-\fB            System\&.out\&.println("Hello " + args[i]);\fR
-\fB        }\fR
-\fB    }\fR
-\fB}\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
+The source code in \f3Hello\&.java\fR:
+.sp     
+.nf     
+\f3package greetings;\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.nf     
+\f3public class Hello {\fP
+.fi     
+.nf     
+\f3    public static void main(String[] args) {\fP
+.fi     
+.nf     
+\f3        for (int i=0; i < args\&.length; i++) {\fP
+.fi     
+.nf     
+\f3            System\&.out\&.println("Hello " + args[i]);\fP
+.fi     
+.nf     
+\f3        }\fP
+.fi     
+.nf     
+\f3    }\fP
+.fi     
+.nf     
+\f3}\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
 Compile greetings\&.Hello:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBjavac greetings/Hello\&.java\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-Run
-\fBgreetings\&.Hello\fR:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBjava greetings\&.Hello World Universe Everyone\fR
-\fBHello World\fR
-\fBHello Universe\fR
-\fBHello Everyone\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
+.sp     
+.nf     
+\f3javac greetings/Hello\&.java\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+Run \f3greetings\&.Hello\fR:
+.sp     
+.nf     
+\f3java greetings\&.Hello World Universe Everyone\fP
+.fi     
+.nf     
+\f3Hello World\fP
+.fi     
+.nf     
+\f3Hello Universe\fP
+.fi     
+.nf     
+\f3Hello Everyone\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+\f3Example 2 Compile Multiple Source Files\fR
 .PP
-\fBExample 2\fR
-.br
-Compile Multiple Source Files
-.RS 4
-This example compiles the
-\fBAloha\&.java\fR,
-\fBGutenTag\&.java\fR,
-\fBHello\&.java\fR, and
-\fBHi\&.java\fR
-source files in the
-\fBgreetings\fR
-package\&.
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB% javac greetings/*\&.java\fR
-\fB% ls greetings\fR
-\fBAloha\&.class         GutenTag\&.class      Hello\&.class         Hi\&.class\fR
-\fBAloha\&.java          GutenTag\&.java       Hello\&.java          Hi\&.java\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
+This example compiles the \f3Aloha\&.java\fR, \f3GutenTag\&.java\fR, \f3Hello\&.java\fR, and \f3Hi\&.java\fR source files in the \f3greetings\fR package\&.
+.sp     
+.nf     
+\f3% javac greetings/*\&.java\fP
+.fi     
+.nf     
+\f3% ls greetings\fP
+.fi     
+.nf     
+\f3Aloha\&.class         GutenTag\&.class      Hello\&.class         Hi\&.class\fP
+.fi     
+.nf     
+\f3Aloha\&.java          GutenTag\&.java       Hello\&.java          Hi\&.java\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+\f3Example 3 Specify a User Class Path\fR
 .PP
-\fBExample 3\fR
-.br
-Specify a User Class Path
-.RS 4
 After changing one of the source files in the previous example, recompile it:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBpwd\fR
-\fB/examples\fR
-\fBjavac greetings/Hi\&.java\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-Because
-\fBgreetings\&.Hi\fR
-refers to other classes in the
-\fBgreetings\fR
-package, the compiler needs to find these other classes\&. The previous example works because the default user class path is the directory that contains the package directory\&. If you want to recompile this file without concern for which directory you are in, then add the examples directory to the user class path by setting
-\fBCLASSPATH\fR\&. This example uses the
-\fB\-classpath\fR
-option\&.
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBjavac \-classpath /examples /examples/greetings/Hi\&.java\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-If you change
-\fBgreetings\&.Hi\fR
-to use a banner utility, then that utility also needs to be accessible through the user class path\&.
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBjavac \-classpath /examples:/lib/Banners\&.jar \e\fR
-\fB            /examples/greetings/Hi\&.java\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-To execute a class in the
-\fBgreetings\fR
-package, the program needs access to the
-\fBgreetings\fR
-package, and to the classes that the
-\fBgreetings\fR
-classes use\&.
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBjava \-classpath /examples:/lib/Banners\&.jar greetings\&.Hi\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
+.sp     
+.nf     
+\f3pwd\fP
+.fi     
+.nf     
+\f3/examples\fP
+.fi     
+.nf     
+\f3javac greetings/Hi\&.java\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+Because \f3greetings\&.Hi\fR refers to other classes in the \f3greetings\fR package, the compiler needs to find these other classes\&. The previous example works because the default user class path is the directory that contains the package directory\&. If you want to recompile this file without concern for which directory you are in, then add the examples directory to the user class path by setting \f3CLASSPATH\fR\&. This example uses the \f3-classpath\fR option\&.
+.sp     
+.nf     
+\f3javac \-classpath /examples /examples/greetings/Hi\&.java\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+If you change \f3greetings\&.Hi\fR to use a banner utility, then that utility also needs to be accessible through the user class path\&.
+.sp     
+.nf     
+\f3javac \-classpath /examples:/lib/Banners\&.jar \e\fP
+.fi     
+.nf     
+\f3            /examples/greetings/Hi\&.java\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+To execute a class in the \f3greetings\fR package, the program needs access to the \f3greetings\fR package, and to the classes that the \f3greetings\fR classes use\&.
+.sp     
+.nf     
+\f3java \-classpath /examples:/lib/Banners\&.jar greetings\&.Hi\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+\f3Example 4 Separate Source Files and Class Files\fR
 .PP
-\fBExample 4\fR
-.br
-Separate Source Files and Class Files
-.RS 4
-The following example uses
-\fBjavac\fR
-to compile code that runs on JVM 1\&.7\&.
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBjavac \-source 1\&.7 \-target 1\&.7 \-bootclasspath jdk1\&.7\&.0/lib/rt\&.jar \e \fR
-\fB\-extdirs "" OldCode\&.java\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-The
-\fB\-source 1\&.7\fR
-option specifies that release 1\&.7 (or 7) of the Java programming language be used to compile
-\fBOldCode\&.java\fR\&. The option
-\fB\-target 1\&.7\fR
-option ensures that the generated class files are compatible with JVM 1\&.7\&. Note that in most cases, the value of the
-\fB\-target\fR
-option is the value of the
-\fB\-source\fR
-option; in this example, you can omit the
-\fB\-target\fR
-option\&.
-.sp
-You must specify the
-\fB\-bootclasspath\fR
-option to specify the correct version of the bootstrap classes (the
-\fBrt\&.jar\fR
-library)\&. If not, then the compiler generates a warning:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBjavac \-source 1\&.7 OldCode\&.java\fR
-\fBwarning: [options] bootstrap class path not set in conjunction with \fR
-\fB\-source 1\&.7\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
+The following example uses \f3javac\fR to compile code that runs on JVM 1\&.7\&.
+.sp     
+.nf     
+\f3javac \-source 1\&.7 \-target 1\&.7 \-bootclasspath jdk1\&.7\&.0/lib/rt\&.jar \e \fP
+.fi     
+.nf     
+\f3\-extdirs "" OldCode\&.java\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+The \f3-source 1\&.7\fR option specifies that release 1\&.7 (or 7) of the Java programming language be used to compile \f3OldCode\&.java\fR\&. The option \f3-target 1\&.7\fR option ensures that the generated class files are compatible with JVM 1\&.7\&. Note that in most cases, the value of the \f3-target\fR option is the value of the \f3-source\fR option; in this example, you can omit the \f3-target\fR option\&.
+.PP
+You must specify the \f3-bootclasspath\fR option to specify the correct version of the bootstrap classes (the \f3rt\&.jar\fR library)\&. If not, then the compiler generates a warning:
+.sp     
+.nf     
+\f3javac \-source 1\&.7 OldCode\&.java\fP
+.fi     
+.nf     
+\f3warning: [options] bootstrap class path not set in conjunction with \fP
+.fi     
+.nf     
+\f3\-source 1\&.7\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
 If you do not specify the correct version of bootstrap classes, then the compiler uses the old language rules (in this example, it uses version 1\&.7 of the Java programming language) combined with the new bootstrap classes, which can result in class files that do not work on the older platform (in this case, Java SE 7) because reference to nonexistent methods can get included\&.
-.RE
+.PP
+\f3Example 5 Cross Compile\fR
 .PP
-\fBExample 5\fR
-.br
-Cross Compile
-.RS 4
-This example uses
-\fBjavac\fR
-to compile code that runs on JVM 1\&.7\&.
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBjavac \-source 1\&.7 \-target 1\&.7 \-bootclasspath jdk1\&.7\&.0/lib/rt\&.jar \e\fR
-\fB            \-extdirs "" OldCode\&.java\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-The\fB \-source 1\&.7\fR
-option specifies that release 1\&.7 (or 7) of the Java programming language to be used to compile OldCode\&.java\&. The
-\fB\-target 1\&.7\fR
-option ensures that the generated class files are compatible with JVM 1\&.7\&. In most cases, the value of the
-\fB\-target\fR
-is the value of
-\fB\-source\fR\&. In this example, the
-\fB\-target\fR
-option is omitted\&.
-.sp
-You must specify the
-\fB\-bootclasspath\fR
-option to specify the correct version of the bootstrap classes (the
-\fBrt\&.jar\fR
-library)\&. If not, then the compiler generates a warning:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBjavac \-source 1\&.7 OldCode\&.java\fR
-\fBwarning: [options] bootstrap class path not set in conjunction with \-source 1\&.7\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
+This example uses \f3javac\fR to compile code that runs on JVM 1\&.7\&.
+.sp     
+.nf     
+\f3javac \-source 1\&.7 \-target 1\&.7 \-bootclasspath jdk1\&.7\&.0/lib/rt\&.jar \e\fP
+.fi     
+.nf     
+\f3            \-extdirs "" OldCode\&.java\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+The\f3-source 1\&.7\fR option specifies that release 1\&.7 (or 7) of the Java programming language to be used to compile OldCode\&.java\&. The \f3-target 1\&.7\fR option ensures that the generated class files are compatible with JVM 1\&.7\&.
+.PP
+You must specify the \f3-bootclasspath\fR option to specify the correct version of the bootstrap classes (the \f3rt\&.jar\fR library)\&. If not, then the compiler generates a warning:
+.sp     
+.nf     
+\f3javac \-source 1\&.7 OldCode\&.java\fP
+.fi     
+.nf     
+\f3warning: [options] bootstrap class path not set in conjunction with \-source 1\&.7\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
 If you do not specify the correct version of bootstrap classes, then the compiler uses the old language rules combined with the new bootstrap classes\&. This combination can result in class files that do not work on the older platform (in this case, Java SE 7) because reference to nonexistent methods can get included\&. In this example, the compiler uses release 1\&.7 of the Java programming language\&.
-.RE
-.SH "SEE ALSO"
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
+.SH SEE\ ALSO    
+.TP 0.2i    
+\(bu
 java(1)
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
+.TP 0.2i    
+\(bu
 jdb(1)
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
+.TP 0.2i    
+\(bu
 javah(1)
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
+.TP 0.2i    
+\(bu
 javadoc(1)
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
+.TP 0.2i    
+\(bu
 jar(1)
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
+.TP 0.2i    
+\(bu
 jdb(1)
-.RE
-.br
-'pl 8.5i
-'bp
+.RE
+.br
+'pl 8.5i
+'bp
--- a/src/linux/doc/man/javadoc.1	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/linux/doc/man/javadoc.1	Tue Nov 04 17:20:19 2014 +0000
@@ -1,5 +1,5 @@
 '\" t
-.\"  Copyright (c) 1994, 2013, Oracle and/or its affiliates. All rights reserved.
+.\"  Copyright (c) 1994, 2015, Oracle and/or its affiliates. All rights reserved.
 .\"
 .\" DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 .\"
@@ -23,12 +23,12 @@
 .\"
 .\"     Arch: generic
 .\"     Software: JDK 8
-.\"     Date: 10 May 2011
+.\"     Date: 03 March 2015
 .\"     SectDesc: Basic Tools
 .\"     Title: javadoc.1
 .\"
 .if n .pl 99999
-.TH javadoc 1 "10 May 2011" "JDK 8" "Basic Tools"
+.TH javadoc 1 "03 March 2015" "JDK 8" "Basic Tools"
 .\" -----------------------------------------------------------------
 .\" * Define some portability stuff
 .\" -----------------------------------------------------------------
@@ -209,7 +209,7 @@
 \f3package java\&.lang\&.applet;\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 
@@ -251,7 +251,7 @@
 \f3initialize, start, and stop the applet\&. \fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .nf     
 \f3@since 1\&.0 \fP
@@ -266,7 +266,7 @@
 \f3</HTML>\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 The \f3package\&.html\fR file is a typical HTML file and does not include a package declaration\&. The content of the package comment file is written in HTML with one exception\&. The documentation comment should not include the comment separators \f3/**\fR and \f3*/\fR or leading asterisks\&. When writing the comment, make the first sentence a summary about the package, and do not put a title or any other text between the \f3<body>\fR tag and the first sentence\&. You can include package tags\&. All block tags must appear after the main description\&. If you add an \f3@see\fR tag in a package comment file, then it must have a fully qualified name\&.
@@ -334,7 +334,7 @@
 \f3 */\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 .SS TEST\ AND\ TEMPLATE\ FILES    
@@ -350,7 +350,7 @@
 \f3com/package1/test\-files/\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 If your test files contain documentation comments, then you can set up a separate run of the \f3javadoc\fR command to produce test file documentation by passing in their test source file names with wild cards, such as \f3com/package1/test-files/*\&.java\fR\&.
@@ -560,7 +560,7 @@
 \f3implements Serializable\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 The declaration for the \f3Boolean\&.valueOf\fR method is:
@@ -569,7 +569,7 @@
 \f3public static Boolean valueOf(String s)\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 The \f3javadoc\fR command can include the modifiers \f3public\fR, \f3protected\fR, \f3private\fR, \f3abstract\fR, \f3final\fR, \f3static\fR, \f3transient\fR, and \f3volatile\fR, but not \f3synchronized\fR or \f3native\fR\&. The \f3synchronized\fR and \f3native\fR modifiers are considered implementation detail and not part of the API specification\&.
@@ -593,7 +593,7 @@
 \f3 */\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 To save space you can put a comment on one line:
@@ -602,7 +602,7 @@
 \f3/** This comment takes up only one line\&. */\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 
@@ -623,19 +623,19 @@
 \f3 */\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .nf     
 \f3import com\&.example;   // MISTAKE \- Important not to put import statement here\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .nf     
 \f3public class Whatever{ }\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 
@@ -657,7 +657,7 @@
 \f3 */\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 
@@ -676,7 +676,7 @@
 \f3 */\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 
@@ -700,7 +700,7 @@
 \f3 */\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 
@@ -730,7 +730,7 @@
 \f3public int x, y;      // Avoid this \fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 The \f3javadoc\fR command generates the following documentation from the previous code:
@@ -739,7 +739,7 @@
 \f3public int x\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 The horizontal and vertical distances of point (x, y)\&.
@@ -748,7 +748,7 @@
 \f3public int y\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 The horizontal and vertical distances of point (x, y)\&.
@@ -872,7 +872,7 @@
 \f3 */\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 
@@ -899,11 +899,10 @@
 .TP 0.2i    
 \(bu
 In the text arguments of the \f3@return\fR, \f3@param,\fR and \f3@throws\fR tags of a method\&. In this case, the tag text is copied from the corresponding tag up the hierarchy\&.
-.RE
-.RS
+.RE     
+
+
 See Method Comment Inheritance for a description of how comments are found in the inheritance hierarchy\&. Note that if this tag is missing, then the comment is or is not automatically inherited according to rules described in that section\&.
-
-.RE
 .TP     
 {@link \fIpackage\&.class#member label\fR}
 Introduced in JDK 1\&.2
@@ -920,7 +919,7 @@
 \f3Use the {@link #getComponentAt(int, int) getComponentAt} method\&.\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 
@@ -931,7 +930,7 @@
 \f3Use the <a href="Component\&.html#getComponentAt(int, int)">getComponentAt</a> method\&.\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 
@@ -942,7 +941,7 @@
 \f3Use the getComponentAt method\&.\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 
@@ -982,7 +981,7 @@
 \f3}\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 
@@ -1014,7 +1013,7 @@
 \f3}\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 
@@ -1071,7 +1070,7 @@
 \f3 */\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 
@@ -1091,7 +1090,7 @@
 \f3</dl>\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 
@@ -1128,7 +1127,7 @@
 \f3@see #constructor(Type argname, Type argname,\&.\&.\&.) \fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .nf     
 \f3\fIReferencing another class in the current or imported packages\fR\fP
@@ -1155,7 +1154,7 @@
 \f3@see Class \fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .nf     
 \f3\fIReferencing an element in another package (fully qualified)\fR\fP
@@ -1185,7 +1184,7 @@
 \f3@see package\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 \f3\fRNotes about the previous listing:
@@ -1215,7 +1214,7 @@
 Any enclosing classes and interfaces searching the closest first\&.
 .TP 0.4i    
 3\&.
-Any superclasses and superonterfaces, searching the closest first\&.
+Any superclasses and superinterfaces, searching the closest first\&.
 .TP 0.4i    
 4\&.
 The current package\&.
@@ -1307,7 +1306,7 @@
 \f3@see "The Java Programming Language"    //  "The Java Programming Language" \fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 \fINote:\fR You can extend the \f3@se\fR\f3e\fR tag to link to classes not being documented with the \f3-link\fR option\&.
@@ -1317,7 +1316,7 @@
 
 Used in the documentation comment for a default serializable field\&. See Documenting Serializable Fields and Data for a Class at http://docs\&.oracle\&.com/javase/8/docs/platform/serialization/spec/serial-arch\&.html#5251
 
-See also Oracle\(cqs Criteria for Including Classes in the Serialilzed Form Specification at http://www\&.oracle\&.com/technetwork/java/javase/documentation/serialized-criteria-137781\&.html
+See also Oracle\(cqs Criteria for Including Classes in the Serialized Form Specification at http://www\&.oracle\&.com/technetwork/java/javase/documentation/serialized-criteria-137781\&.html
 
 An optional \f3field-description\fR should explain the meaning of the field and list the acceptable values\&. When needed, the description can span multiple lines\&. The standard doclet adds this information to the serialized form page\&. See Cross-Reference Pages\&.
 
@@ -1331,13 +1330,12 @@
 .TP 0.2i    
 \(bu
 A private or package-private class that implements \f3Serializable\fR is excluded unless that class (or its package) is marked with the \f3@serial include\fR tag\&.
-.RE
-.RS
+.RE     
+
+
 For example, the \f3javax\&.swing\fR package is marked with the \f3@serial\fR\f3exclude\fR tag in package\&.html or package-info\&.java\&. The public class \f3java\&.security\&.BasicPermission\fR is marked with the \f3@serial exclude\fR tag\&. The package-private class \f3java\&.util\&.PropertyPermissionCollection\fR is marked with the \f3@serial include\fR tag\&.
 
 The \f3@serial\fR tag at the class level overrides the \f3@serial\fR tag at the package level\&.
-
-.RE
 .TP     
 @serialData \fIdata-description\fR
 Introduced in JDK 1\&.2
@@ -1387,7 +1385,7 @@
 \f3public static final String SCRIPT_START = "<script>"\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 
@@ -1407,7 +1405,7 @@
 \f3public String evalScript(String script) {}\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 
@@ -1494,7 +1492,7 @@
 \f3}\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 .SS FIELD\ TAGS    
@@ -1523,7 +1521,7 @@
 \f3    int x = 1263732;\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 .SS CONSTRUCTOR\ AND\ METHOD\ TAGS    
@@ -1578,7 +1576,7 @@
 \f3    }\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 .SH OPTIONS    
@@ -1592,7 +1590,7 @@
 .PP
 The options are:
 .PP
--1\&.1 || -author || -bootclasspath classpathlist || -bottom text || -breakiterator || -charset name || -classpath classpathlist || -d directory || -docencoding name || -docfilesubdirs || -doclet class || -docletpath classpathlist || -doctitle title || -encoding || -exclude packagename1:packagename2:\&.\&.\&. || -excludedocfilessubdir name1:name2 || -extdirs dirist || -footer footer || -group groupheading packagepattern:packagepattern || -header header || -help || -helpfile path\efilename || -Jflag || -keywords || -link extdocURL || -linkoffline extdocURL packagelistLoc || -linksource || -locale language_country_variant || -nocomment || -nodeprecated || -nodeprecatedlist || -nohelp || -noindex || -nonavbar || -noqualifier all | packagename1:packagename2\&.\&.\&. || -nosince || -notimestamp || -notree || -overview path/filename || -package || -private || -protected || -public || -quiet || -serialwarn || -source release || -sourcepath sourcepathlist || -sourcetab tablength || -splitindex || -stylesheet path/filename || -subpackages package1:package2:\&.\&.\&. || -tag tagname:Xaoptcmf:"taghead" || -taglet class || -tagletpath tagletpathlist || -title title || -top || -use || -verbose || -version || -windowtitle title
+-1\&.1 || -author || -bootclasspath classpathlist || -bottom text || -breakiterator || -charset name || -classpath classpathlist || -d directory || -docencoding name || -docfilesubdirs || -doclet class || -docletpath classpathlist || -doctitle title || -encoding || -exclude packagename1:packagename2:\&.\&.\&. || -excludedocfilessubdir name1:name2 || -extdirs dirist || -footer footer || -group groupheading packagepattern:packagepattern || -header header || -help || -helpfile path\efilename || -Jflag || -javafx ||-keywords || -link extdocURL || -linkoffline extdocURL packagelistLoc || -linksource || -locale language_country_variant || -nocomment || -nodeprecated || -nodeprecatedlist || -nohelp || -noindex || -nonavbar || -noqualifier all | packagename1:packagename2\&.\&.\&. || -nosince || -notimestamp || -notree || -overview path/filename || -package || -private || -protected || -public || -quiet || -serialwarn || -source release || -sourcepath sourcepathlist || -sourcetab tablength || -splitindex || -stylesheet path/filename || -subpackages package1:package2:\&.\&.\&. || -tag tagname:Xaoptcmf:"taghead" || -taglet class || -tagletpath tagletpathlist || -title title || -top || -use || -verbose || -version || -windowtitle title
 .PP
 The following options are the core Javadoc options that are available to all doclets\&. The standard doclet provides the rest of the doclets: \f3-bootclasspath\fR, \f3-breakiterator\fR, \f3-classpath\fR, \f3-doclet\fR, \f3-docletpath\fR, \f3-encoding\fR, -\f3exclude\fR, \f3-extdirs\fR, \f3-help\fR, \f3-locale\fR, \f3-\fR\f3overview\fR, \f3-package\fR, \f3-private\fR, \f3-protected\fR, \f3-public\fR, \f3-quiet\fR, \f3-source\fR, \f3-sourcepath\fR, \f3-subpackages\fR, and \f3-verbose\fR\&.
 .SS JAVADOC\ OPTIONS    
@@ -1635,12 +1633,11 @@
 .TP 0.2i    
 \(bu
 \f3-Xdoclint all,\fR\fI-group\fR : enable all except \fIgroup\fR checks
-.RE
-.RS
+.RE     
+
+
 The variable \fIgroup\fR has one of the following values:
 .RS     
-
-.RE
 .TP 0.2i    
 \(bu
 \f3accessibility\fR : Checks for the issues to be detected by an accessibility checker (for example, no caption or summary attributes specified in a \f3<table>\fR tag)\&.
@@ -1656,8 +1653,9 @@
 .TP 0.2i    
 \(bu
 \f3syntax\fR : Checks for low level issues like unescaped angle brackets (\f3<\fR and \f3>\fR) and ampersands (\f3&\fR) and invalid Javadoc tags\&.
-.RE
-.RS
+.RE     
+
+
 You can specify the \f3-Xdoclint\fR option multiple times to enable the option to check errors and warnings in multiple categories\&. Alternatively, you can specify multiple error and warning categories by using the preceding options\&. For example, use either of the following commands to check for the HTML, syntax, and accessibility issues in the file \fIfilename\fR\&.
 .sp     
 .nf     
@@ -1667,7 +1665,7 @@
 \f3javadoc \-Xdoclint:html,syntax,accessibility \fIfilename\fR\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 
@@ -1675,8 +1673,6 @@
 \fINote:\fR The \f3javadoc\fR command does not guarantee the completeness of these checks\&. In particular, it is not a full HTML compliance checker\&. The goal of the -\f3Xdoclint\fR option is to enable the \f3javadoc\fR command to report majority of common errors\&.
 
 The \f3javadoc\fR command does not attempt to fix invalid input, it just reports it\&.
-
-.RE
 .TP
 -public
 .br
@@ -1740,7 +1736,7 @@
 \f3javadoc \-sourcepath /home/user/src/ com\&.mypackage\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 
@@ -1755,7 +1751,7 @@
 \f3javadoc \-sourcepath /home/user1/src:/home/user2/src com\&.mypackage\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 
@@ -1766,13 +1762,13 @@
 
 If you omit \f3-sourcepath\fR, then the \f3javadoc\fR command uses \f3-classpath\fR to find the source files and class files (for backward compatibility)\&. If you want to search for source and class files in separate paths, then use both \f3-sourcepath\fR and \f3-classpath\fR\&.
 
-For example, if you want to document \f3com\&.mypackage\fR, whose source files reside in the directory /home/user/src/com/mypackage, and if this package relies on a library in /home/user/libthen you would use the following command:
+For example, if you want to document \f3com\&.mypackage\fR, whose source files reside in the directory /home/user/src/com/mypackage, and if this package relies on a library in /home/user/lib, then you would use the following command:
 .sp     
 .nf     
 \f3javadoc \-sourcepath /home/user/lib \-classpath /home/user/src com\&.mypackage\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 
@@ -1795,7 +1791,7 @@
 \f3javadoc \-d docs \-sourcepath /home/user/src  \-subpackages java:javax\&.swing \fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 
@@ -1813,7 +1809,7 @@
 \f3    java\&.net:java\&.lang\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 
@@ -1846,11 +1842,10 @@
 .TP 0.2i    
 \(bu
 Breakiterator sentence-break algorithm\&. Stops at a period, question mark, or exclamation point followed by a space when the next word starts with a capital letter\&. This is meant to handle most abbreviations (such as "The serial no\&. is valid", but will not handle "Mr\&. Smith")\&. The \f3-breakiterator\fR option does not stop at HTML tags or sentences that begin with numbers or symbols\&. The algorithm stops at the last period in \&.\&./filename, even when embedded in an HTML tag\&.
-.RE
-.RS
+.RE     
+
+
 In Java SE 1\&.5 the \f3-breakiterator\fR option warning messages are removed, and the default sentence-break algorithm is unchanged\&. If you have not modified your source code to eliminate the \f3-breakiterator\fR option warnings in Java SE 1\&.4\&.x, then you do not have to do anything\&. The warnings go away starting with Java SE 1\&.5\&.0\&.
-
-.RE
 .TP
 -locale \fIlanguage_country_variant\fR
 .br
@@ -1885,7 +1880,21 @@
 \f3Java HotSpot(TM) 64\-Bit Server VM (build 23\&.5\-b02, mixed mode)\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
+.fi     
+.sp     
+
+.TP
+-javafx
+.br
+Generates HTML documentation using the JavaFX extensions to the standard doclet\&. The generated documentation includes a Property Summary section in addition to the other summary sections generated by the standard Java doclet\&. The listed properties are linked to the sections for the getter and setter methods of each property\&.
+
+If there are no documentation comments written explicitly for getter and setter methods, the documentation comments from the property method are automatically copied to the generated documentation for these methods\&. This option also adds a new \f3@defaultValue\fR tag that allows documenting the default value for a property\&.
+
+Example:
+.sp     
+.nf     
+\f3javadoc \-javafx MyClass\&.java \-d testdir\fP
 .fi     
 .sp     
 
@@ -1957,7 +1966,7 @@
 \f3\-link <directory>/<directory>/\&.\&.\&./<name>\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 
@@ -1982,7 +1991,7 @@
 \f3javadoc \-link http://docs\&.oracle\&.com/javase/8/docs/api/ com\&.mypackage\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 The command generates documentation for the package \f3com\&.mypackage\fR with links to the Java SE packages\&. The generated documentation contains links to the \f3Object\fR class, for example, in the class \f3trees\fR\&. Other options, such as the \f3-sourcepath\fR and \f3-d\fR options, are not shown\&.
@@ -2044,7 +2053,7 @@
 \f3and so on \&.\&.\&.\&.\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 When \f3javadoc\fR is run without the \f3-link\fR option and encounters a name that belongs to an externally referenced class, it prints the name with no link\&. However, when the \f3-link\fR option is used, the \f3javadoc\fR command searches the package-list file at the specified \fIextdocURL\fR location for that package name\&. When it finds the package name, it prefixes the name with \fIextdocURL\fR\&.
@@ -2094,7 +2103,7 @@
 \f3javadoc \-linkoffline http://docs\&.oracle\&.com/javase/8/docs/api/ \&.  com\&.mypackage \fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 
@@ -2118,7 +2127,7 @@
 \f3packagelistLoc2 \&.\&.\&.\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 
@@ -2133,7 +2142,7 @@
 \f3javadoc \-d update \-linkoffline \&. html com\&.mypackage\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 When the \f3javadoc\fR command completes, copy these generated class pages in update/com/package (not the overview or index) to the original files in html/com/package\&.
@@ -2150,7 +2159,7 @@
 \f3public class Button extends Component implements Accessible\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 
@@ -2161,7 +2170,7 @@
 \f3public String getLabel()\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 
@@ -2176,8 +2185,9 @@
 .TP 0.2i    
 \(bu
 The \f3packagepattern\fR value can be any package name at the start of any package name followed by an asterisk (*)\&. The asterisk is the only wildcard allowed and means match any characters\&. Multiple patterns can be included in a group by separating them with colons (:)\&. If you use an asterisk in a pattern or pattern list, then the pattern list must be inside quotation marks, such as \f3"java\&.lang*:java\&.util"\fR\&.
-.RE
-.RS
+.RE     
+
+
 When you do not supply a \f3-group\fR option, all packages are placed in one group with the heading \fIPackages\fR and appropriate subheadings\&. If the subheadings do not include all documented packages (all groups), then the remaining packages appear in a separate group with the subheading Other Packages\&.
 
 For example, the following \f3javadoc\fR command separates the three documented packages into \fICore\fR, \fIExtension\fR, and \fIOther Packages\fR\&. The trailing dot (\&.) does not appear in \f3java\&.lang*\fR\&. Including the dot, such as \f3java\&.lang\&.*\fR omits the\f3java\&.lang\fR package\&.
@@ -2192,7 +2202,7 @@
 \f3        java\&.lang java\&.lang\&.reflect java\&.util javax\&.servlet java\&.new\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 
@@ -2212,8 +2222,6 @@
 \fIOther Packages\fR
 
 \f3java\&.new\fR
-
-.RE
 .TP
 -nodeprecated
 .br
@@ -2251,7 +2259,7 @@
 \f3javadoc \-helpfile /home/user/myhelp\&.html java\&.awt\&.\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 
@@ -2264,7 +2272,7 @@
 \f3javadoc \-stylesheet file /home/user/mystylesheet\&.css com\&.mypackage\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 
@@ -2283,7 +2291,7 @@
 \f3<META http\-equiv="Content\-Type" content="text/html; charset=ISO\-8859\-1">\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 
@@ -2296,7 +2304,7 @@
 .br
 Specifies the encoding of the generated HTML files\&. The name should be a preferred MIME name as specified in the IANA Registry, Character Sets at http://www\&.iana\&.org/assignments/character-sets
 
-If you omit the \f3-docencoding\fR option but use the \f3-encoding\fR option, then the encoding of the generated HTML files is determined by the \f3-encoding\fR option, for example: \f3javadoc -docencoding"iso-8859-1" mypackage\fR\&. See also the \f3-encoding\fR and \f3-docencoding name\fR options\&.
+If you omit the \f3-docencoding\fR option but use the \f3-encoding\fR option, then the encoding of the generated HTML files is determined by the \f3-encoding\fR option, for example: \f3javadoc -docencoding "iso-8859-1" mypackage\fR\&. See also the \f3-encoding\fR and \f3-docencoding name\fR options\&.
 .TP
 -keywords
 .br
@@ -2315,7 +2323,7 @@
 \f3<META NAME="keywords" CONTENT="charAt()">\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 
@@ -2360,7 +2368,7 @@
 \f3 */\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 
@@ -2390,7 +2398,7 @@
 \f3\-tag example:X\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 
@@ -2433,7 +2441,7 @@
 \f3\-tag see\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 
@@ -2523,7 +2531,7 @@
 \f3\-sourcepath /java/pubs/ws/1\&.7\&.0/src/share/classes\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 Create a file named packages that contains:
@@ -2538,7 +2546,7 @@
 \f3com\&.mypackage3\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 Run the \f3javadoc\fR command as follows:
@@ -2547,7 +2555,7 @@
 \f3javadoc @options @packages\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 \f3Example 3 Argument Files with Paths\fR
@@ -2558,7 +2566,7 @@
 \f3javadoc @path1/options @path2/packages\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 \f3Example 4 Option Arguments\fR
@@ -2581,7 +2589,7 @@
 \f3    Other names may be trademarks of their respective owners\&.</font>\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 Run the \f3javadoc\fR command as follows:\f3javadoc -bottom @bottom @packages\fR\&.
@@ -2616,7 +2624,7 @@
 \f3javadoc \-d /home/html \-sourcepath /home/src \-subpackages java \-exclude\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 \f3Example 2 Change to Root and Run Explicit Packages\fR
@@ -2630,7 +2638,7 @@
 \f3javadoc \-d /home/html java\&.awt java\&.awt\&.event\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 To also traverse down other package trees, append their names to the \f3-subpackages\fR argument, such as j\f3ava:javax:org\&.xml\&.sax\fR\&.
@@ -2643,7 +2651,7 @@
 \f3javadoc \-d /home/html \-sourcepath /home/src java\&.awt java\&.awt\&.event\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 \f3Example 4 Run from Any Directory on Explicit Packages in Multiple Trees\fR
@@ -2654,7 +2662,7 @@
 \f3javadoc \-d /home/html \-sourcepath /home/src1:/home/src2 java\&.awt java\&.awt\&.event\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 The result is that all cases generate HTML-formatted documentation for the \f3public\fR and \f3protected\fR classes and interfaces in packages j\f3ava\&.awt\fR and \f3java\&.awt\&.even\fRt and save the HTML files in the specified destination directory\&. Because two or more packages are being generated, the document has three HTML frames: one for the list of packages, another for the list of classes, and the third for the main class pages\&.
@@ -2676,7 +2684,7 @@
 \f3javadoc \-d /home/html Button\&.java Canvas\&.java Graphics*\&.java\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 \f3Example 2 Change to the Root Directory of the Package\fR
@@ -2690,7 +2698,7 @@
 \f3javadoc \-d /home/html java/awt/Button\&.java java/applet/Applet\&.java\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 \f3Example 3 Document Files from Any Directory\fR
@@ -2704,7 +2712,7 @@
 \f3/home/src/java/awt/Graphics*\&.java\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 
@@ -2720,7 +2728,7 @@
 \f3/home/src/java/applet/Applet\&.java\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 .SS REAL-WORLD\ EXAMPLES    
@@ -2784,7 +2792,7 @@
 \f3@packages\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 
@@ -2802,7 +2810,7 @@
 \f3import javax\&.tools\&.ToolProvider;\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .nf     
 \f3public class JavaAccessSample{\fP
@@ -2838,7 +2846,7 @@
 \f3 }\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 The first three arguments of the \f3run\fR method specify input, standard output, and standard error streams\&. \f3Null\fR is the default value for \f3System\&.in\fR, \f3System\&.out\fR, and \f3System\&.err\fR, respectively\&.
@@ -2891,7 +2899,7 @@
 \f3        java\&.applet\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .nf     
 \f3WINDOWTITLE = \&'Java\(tm SE 7 API Specification\&'\fP
@@ -2927,7 +2935,7 @@
 \f3SRCDIR = \&'/java/jdk/1\&.7\&.0/src/share/classes\&'\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 .SS NOTES    
--- a/src/linux/doc/man/jjs.1	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/linux/doc/man/jjs.1	Tue Nov 04 17:20:19 2014 +0000
@@ -1,5 +1,5 @@
 '\" t
-.\"  Copyright (c) 1994, 2013, Oracle and/or its affiliates. All rights reserved.
+.\"  Copyright (c) 1994, 2015, Oracle and/or its affiliates. All rights reserved.
 .\"
 .\" DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 .\"
@@ -23,12 +23,12 @@
 .\"
 .\"     Arch: generic
 .\"     Software: JDK 8
-.\"     Date: 21 November 2013
+.\"     Date: 03 March 2015
 .\"     SectDesc: Basic Tools
 .\"     Title: jjs.1
 .\"
 .if n .pl 99999
-.TH jjs 1 "21 November 2013" "JDK 8" "Basic Tools"
+.TH jjs 1 "03 March 2015" "JDK 8" "Basic Tools"
 .\" -----------------------------------------------------------------
 .\" * Define some portability stuff
 .\" -----------------------------------------------------------------
@@ -82,7 +82,7 @@
 \f3\-css=1k\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 
@@ -91,7 +91,7 @@
 .br
 Compiles the script without running it\&.
 .TP
--cp \fIpath\fR , --classpath \fIpath\fR
+-cp \fIpath\fR , -classpath \fIpath\fR
 .br
 Specifies the path to the supporting class files To set multiple paths, the option can be repeated, or you can separate each path with a colon (:)\&.
 .TP
@@ -112,7 +112,7 @@
 \f3jjs>\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 
@@ -133,7 +133,7 @@
 .TP
 -doe, --dump-on-error
 .br
-Provides a full stack trace when an arror occurs\&. By default, only a brief error message is printed\&.
+Provides a full stack trace when an error occurs\&. By default, only a brief error message is printed\&.
 .TP
 --early-lvalue-error
 .br
@@ -180,13 +180,17 @@
 \f3jjs>\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 
 
 This option can be repeated to pass multiple \f3java\fR command options\&.
 .TP
+--language=[es5]
+.br
+Specifies the ECMAScript language version\&. The default version is ES5\&.
+.TP
 --lazy-compilation
 .br
 Enables lazy code generation strategies (that is, the entire script is not compiled at once)\&. This option is experimental\&.
@@ -202,12 +206,13 @@
 .nf     
 \f3\-\-log=fields:finest,codegen:info\fP
 .fi     
-.nf     
-\f3\fR
-.fi     
 .sp     
 
 .TP
+--optimistic-types=[true|false]
+.br
+Enables or disables optimistic type assumptions with deoptimizing recompilation\&. Running with optimistic types will yield higher final speed, but may increase warmup time\&.
+.TP
 --package=\fIname\fR
 .br
 Specifies the package to which generated class files are added\&.
@@ -302,7 +307,7 @@
 \f3jjs script\&.js\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 \f3Example 2 Running Nashorn in Interactive Mode\fR
@@ -323,7 +328,7 @@
 \f3>>\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 \f3Example 3 Passing Arguments to Nashorn\fR
@@ -341,7 +346,7 @@
 \f3jjs>\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 .SH SEE\ ALSO    
--- a/src/linux/doc/man/jstat.1	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/linux/doc/man/jstat.1	Tue Nov 04 17:20:19 2014 +0000
@@ -1,5 +1,5 @@
 '\" t
-.\"  Copyright (c) 2004, 2013, Oracle and/or its affiliates. All rights reserved.
+.\"  Copyright (c) 2004, 2015, Oracle and/or its affiliates. All rights reserved.
 .\"
 .\" DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 .\"
@@ -23,12 +23,12 @@
 .\"
 .\"     Arch: generic
 .\"     Software: JDK 8
-.\"     Date: 10 May 2011
+.\"     Date: 03 March 2015
 .\"     SectDesc: Monitoring Tools
 .\"     Title: jstat.1
 .\"
 .if n .pl 99999
-.TH jstat 1 "10 May 2011" "JDK 8" "Monitoring Tools"
+.TH jstat 1 "03 March 2015" "JDK 8" "Monitoring Tools"
 .\" -----------------------------------------------------------------
 .\" * Define some portability stuff
 .\" -----------------------------------------------------------------
@@ -101,7 +101,7 @@
 The communications protocol\&. If the \fIprotocol\fR value is omitted and a host name is not specified, then the default protocol is a platform-specific optimized local protocol\&. If the \fIprotocol\fR value is omitted and a host name is specified, then the default protocol is \f3rmi\fR\&.
 .TP     
 \fIlvmid\fR
-The local virtual machine identifier for the target JVM\&. The \f3lvmid\fR is a platform-specific value that uniquely identifies a JVM on a system\&. The \f3lvmid\fR is the only required component of a virtual machine identifier\&. The \f3lvmid\fR is typically, but not necessarily, the operating system\&'s process identifier for the target JVM process\&. You can use the \f3jps\fR command to determine the \f3lvmid\fR\&. Also, you can determine the \f3lvmid\fR on UNIX platforms with the \f3ps\fR command, and on Windows with the Windows Task Manager\&.
+The local virtual machine identifier for the target JVM\&. The \f3lvmid\fR is a platform-specific value that uniquely identifies a JVM on a system\&. The \f3lvmid\fR is the only required component of a virtual machine identifier\&. The \f3lvmid\fR is typically, but not necessarily, the operating system\&'s process identifier for the target JVM process\&. You can use the \f3jps\fR command to determine the \f3lvmid\fR\&. Also, you can determine the \f3lvmid\fR on Solaris, Linux, and OS X platforms with the \f3ps\fR command, and on Windows with the Windows Task Manager\&.
 .TP     
 \fIhostname\fR
 A hostname or IP address that indicates the target host\&. If the \fIhostname\fR value is omitted, then the target host is the local host\&.
@@ -154,7 +154,7 @@
 
 \f3gcnewcapacity\fR: Displays statistics about the sizes of the new generations and its corresponding spaces\&.
 
-\f3gcold\fR: Displays statistics about the behavior of the old generation and Metaspace Statistics\&.
+\f3gcold\fR: Displays statistics about the behavior of the old generation and metaspace statistics\&.
 
 \f3gcoldcapacity\fR: Displays statistics about the sizes of the old generation\&.
 
@@ -170,7 +170,7 @@
 .TP
 -t
 .br
-Display sa timestamp column as the first column of output\&. The time stamp is the time since the start time of the target JVM\&.
+Displays a timestamp column as the first column of output\&. The time stamp is the time since the start time of the target JVM\&.
 .TP
 -J\fIjavaOption\fR
 .br
@@ -184,7 +184,7 @@
 
 \f3Loaded\fR: Number of classes loaded\&.
 
-\f3Bytes\fR: Number of KBs loaded\&.
+\f3Bytes\fR: Number of kBs loaded\&.
 
 \f3Unloaded\fR: Number of classes unloaded\&.
 
@@ -212,25 +212,29 @@
 .br
 Garbage-collected heap statistics\&.
 
-\f3S0C\fR: Current survivor space 0 capacity (KB)\&.
+\f3S0C\fR: Current survivor space 0 capacity (kB)\&.
 
-\f3S1C\fR: Current survivor space 1 capacity (KB)\&.
+\f3S1C\fR: Current survivor space 1 capacity (kB)\&.
+
+\f3S0U\fR: Survivor space 0 utilization (kB)\&.
 
-\f3S0U\fR: Survivor space 0 utilization (KB)\&.
+\f3S1U\fR: Survivor space 1 utilization (kB)\&.
 
-\f3S1U\fR: Survivor space 1 utilization (KB)\&.
+\f3EC\fR: Current eden space capacity (kB)\&.
 
-\f3EC\fR: Current eden space capacity (KB)\&.
+\f3EU\fR: Eden space utilization (kB)\&.
 
-\f3EU\fR: Eden space utilization (KB)\&.
+\f3OC\fR: Current old space capacity (kB)\&.
 
-\f3OC\fR: Current old space capacity (KB)\&.
+\f3OU\fR: Old space utilization (kB)\&.
+
+\f3MC\fR: Metaspace capacity (kB)\&.
 
-\f3OU\fR: Old space utilization (KB)\&.
+\f3MU\fR: Metacspace utilization (kB)\&.
 
-\f3MC\fR: Metaspace capacity (KB)\&.
+\f3CCSC\fR: Compressed class space capacity (kB)\&.
 
-\f3MU\fR: Metacspace utilization (KB)\&.
+\f3CCSU\fR: Compressed class space used (kB)\&.
 
 \f3YGC\fR: Number of young generation garbage collection events\&.
 
@@ -246,67 +250,71 @@
 .br
 Memory pool generation and space capacities\&.
 
-\f3NGCMN\fR: Minimum new generation capacity (KB)\&.
+\f3NGCMN\fR: Minimum new generation capacity (kB)\&.
+
+\f3NGCMX\fR: Maximum new generation capacity (kB)\&.
 
-\f3NGCMX\fR: Maximum new generation capacity (KB)\&.
+\f3NGC\fR: Current new generation capacity (kB)\&.
 
-\f3NGC\fR: Current new generation capacity (KB)\&.
+\f3S0C\fR: Current survivor space 0 capacity (kB)\&.
 
-\f3S0C\fR: Current survivor space 0 capacity (KB)\&.
+\f3S1C\fR: Current survivor space 1 capacity (kB)\&.
 
-\f3S1C\fR: Current survivor space 1 capacity (KB)\&.
+\f3EC\fR: Current eden space capacity (kB)\&.
 
-\f3EC\fR: Current eden space capacity (KB)\&.
+\f3OGCMN\fR: Minimum old generation capacity (kB)\&.
 
-\f3OGCMN\fR: Minimum old generation capacity (KB)\&.
+\f3OGCMX\fR: Maximum old generation capacity (kB)\&.
+
+\f3OGC\fR: Current old generation capacity (kB)\&.
 
-\f3OGCMX\fR: Maximum old generation capacity (KB)\&.
+\f3OC\fR: Current old space capacity (kB)\&.
 
-\f3OGC\fR: Current old generation capacity (KB)\&.
+\f3MCMN\fR: Minimum metaspace capacity (kB)\&.
 
-\f3OC\fR: Current old space capacity (KB)\&.
+\f3MCMX\fR: Maximum metaspace capacity (kB)\&.
 
-\f3MCMN\fR: Minimum metaspace capacity (KB)\&.
+\f3MC\fR: Metaspace capacity (kB)\&.
 
-\f3MCMX\fR: Maximum metaspace capacity (KB)\&.
+\f3CCSMN\fR: Compressed class space minimum capacity (kB)\&.
 
-\f3MC\fR: Metaspace capacity (KB)\&.
+\f3CCSMX\fR: Compressed class space maximum capacity (kB)\&.
 
-\f3YGC\fR: Number of Young generation GC Events\&.
+\f3CCSC\fR: Compressed class space capacity (kB)\&.
 
-\f3FGC\fR: Number of Full GC Events\&.
+\f3YGC\fR: Number of young generation GC events\&.
+
+\f3FGC\fR: Number of full GC events\&.
 .TP
 -gccause \fIoption\fR
 .br
 This option displays the same summary of garbage collection statistics as the \f3-gcutil\fR option, but includes the causes of the last garbage collection event and (when applicable) the current garbage collection event\&. In addition to the columns listed for \f3-gcutil\fR, this option adds the following columns\&.
 
-Garbage collection statistics, including garbage collection Events\&.
+\f3LGCC\fR: Cause of last garbage collection
 
-\f3LGCC\fR: Cause of last garbage collection\&.
-
-\f3GCC\fR: Cause of current garbage collection\&.
+\f3GCC\fR: Cause of current garbage collection
 .TP
 -gcnew \fIoption\fR
 .br
 New generation statistics\&.
 
-\f3S0C\fR: Current survivor space 0 capacity (KB)\&.
+\f3S0C\fR: Current survivor space 0 capacity (kB)\&.
 
-\f3S1C\fR: Current survivor space 1 capacity (KB)\&.
+\f3S1C\fR: Current survivor space 1 capacity (kB)\&.
 
-\f3S0U\fR: Survivor space 0 utilization (KB)\&.
+\f3S0U\fR: Survivor space 0 utilization (kB)\&.
 
-\f3S1U\fR: Survivor space 1 utilization (KB)\&.
+\f3S1U\fR: Survivor space 1 utilization (kB)\&.
 
 \f3TT\fR: Tenuring threshold\&.
 
 \f3MTT\fR: Maximum tenuring threshold\&.
 
-\f3DSS\fR: Desired survivor size (KB)\&.
+\f3DSS\fR: Desired survivor size (kB)\&.
 
-\f3EC\fR: Current eden space capacity (KB)\&.
+\f3EC\fR: Current eden space capacity (kB)\&.
 
-\f3EU\fR: Eden space utilization (KB)\&.
+\f3EU\fR: Eden space utilization (kB)\&.
 
 \f3YGC\fR: Number of young generation GC events\&.
 
@@ -316,39 +324,43 @@
 .br
 New generation space size statistics\&.
 
-NGCMN: Minimum new generation capacity (KB)\&.
+\f3NGCMN\fR: Minimum new generation capacity (kB)\&.
 
-\f3NGCMX\fR: Maximum new generation capacity (KB)\&.
+\f3NGCMX\fR: Maximum new generation capacity (kB)\&.
 
-\f3NGC\fR: Current new generation capacity (KB)\&.
+\f3NGC\fR: Current new generation capacity (kB)\&.
 
-\f3S0CMX\fR: Maximum survivor space 0 capacity (KB)\&.
+\f3S0CMX\fR: Maximum survivor space 0 capacity (kB)\&.
 
-\f3S0C\fR: Current survivor space 0 capacity (KB)\&.
+\f3S0C\fR: Current survivor space 0 capacity (kB)\&.
 
-\f3S1CMX\fR: Maximum survivor space 1 capacity (KB)\&.
+\f3S1CMX\fR: Maximum survivor space 1 capacity (kB)\&.
 
-\f3S1C\fR: Current survivor space 1 capacity (KB)\&.
+\f3S1C\fR: Current survivor space 1 capacity (kB)\&.
 
-\f3ECMX\fR: Maximum eden space capacity (KB)\&.
+\f3ECMX\fR: Maximum eden space capacity (kB)\&.
 
-\f3EC\fR: Current eden space capacity (KB)\&.
+\f3EC\fR: Current eden space capacity (kB)\&.
 
 \f3YGC\fR: Number of young generation GC events\&.
 
-\f3FGC\fR: Number of Full GC Events\&.
+\f3FGC\fR: Number of full GC events\&.
 .TP
 -gcold \fIoption\fR
 .br
-old and permanent generation statistics\&.
+Old and permanent generation statistics\&.
 
-\f3MC\fR: Metaspace capacity (KB)\&.
+\f3MC\fR: Metaspace capacity (kB)\&.
+
+\f3MU\fR: Metaspace utilization (kB)\&.
 
-\f3MU\fR: Metaspace utilization (KB)\&.
+\f3CCSC\fR: Compressed class space capacity (kB)\&.
+
+\f3CCSU\fR: Compressed class space used (kB)\&.
 
-\f3OC\fR: Current old space capacity (KB)\&.
+\f3OC\fR: Current old space capacity (kB)\&.
 
-\f3OU\fR: old space utilization (KB)\&.
+\f3OU\fR: Old space utilization (kB)\&.
 
 \f3YGC\fR: Number of young generation GC events\&.
 
@@ -362,13 +374,13 @@
 .br
 Old generation statistics\&.
 
-\f3OGCMN\fR: Minimum old generation capacity (KB)\&.
+\f3OGCMN\fR: Minimum old generation capacity (kB)\&.
 
-\f3OGCMX\fR: Maximum old generation capacity (KB)\&.
+\f3OGCMX\fR: Maximum old generation capacity (kB)\&.
 
-\f3OGC\fR: Current old generation capacity (KB)\&.
+\f3OGC\fR: Current old generation capacity (kB)\&.
 
-\f3OC\fR: Current old space capacity (KB)\&.
+\f3OC\fR: Current old space capacity (kB)\&.
 
 \f3YGC\fR: Number of young generation GC events\&.
 
@@ -382,11 +394,15 @@
 .br
 Permanent generation statistics\&.
 
-\f3MCMN\fR: Minimum metaspace capacity (KB)\&.
+\f3MCMN\fR: Minimum metaspace capacity (kB)\&.
+
+\f3MCMX\fR: Maximum metaspace capacity (kB)\&.
 
-\f3MCMX\fR: Maximum metaspace capacity (KB)\&.
+\f3MC\fR: Metaspace capacity (kB)\&.
 
-\f3MC\fR: Metaspace capacity (KB)\&.
+\f3CCSMN\fR: Compressed class space minimum capacity (kB)\&.
+
+\f3CCSMX\fR: Compressed class space maximum capacity (kB)\&.
 
 \f3YGC\fR: Number of young generation GC events\&.
 
@@ -410,6 +426,8 @@
 
 \f3M\fR: Metaspace utilization as a percentage of the space\&'s current capacity\&.
 
+\f3CCS\fR: Compressed class space utilization as a percentage\&.
+
 \f3YGC\fR: Number of young generation GC events\&.
 
 \f3YGCT\fR: Young generation garbage collection time\&.
@@ -430,47 +448,44 @@
 
 \f3Type\fR: Compilation type of the most recently compiled method\&.
 
-\f3Method\fR: Class name and method name identifying the most recently compiled method\&. Class name uses slash (/) instead of dot (\&.) as a name space separator\&. Method name is the method within the specified class\&. The format for these two fields is consistent with the HotSpot \f3-XX:+PrintComplation\fR option\&.
+\f3Method\fR: Class name and method name identifying the most recently compiled method\&. Class name uses slash (/) instead of dot (\&.) as a name space separator\&. Method name is the method within the specified class\&. The format for these two fields is consistent with the HotSpot \f3-XX:+PrintCompilation\fR option\&.
 .SH EXAMPLES    
 This section presents some examples of monitoring a local JVM with an \fIlvmid\fR of 21891\&.
 .SS THE\ GCUTIL\ OPTION    
 This example attaches to lvmid 21891 and takes 7 samples at 250 millisecond intervals and displays the output as specified by the -\f3gcutil\fR option\&.
 .PP
-The output of this example shows that a young generation collection occurred between the third and fourth sample\&. The collection took 0\&.001 seconds and promoted objects from the eden space (E) to the old space (O), resulting in an increase of old space utilization from 9\&.49% to 9\&.51%\&. Before the collection, the survivor space was 12\&.44% utilized, but after this collection it is only 7\&.74% utilized\&.
+The output of this example shows that a young generation collection occurred between the third and fourth sample\&. The collection took 0\&.078 seconds and promoted objects from the eden space (E) to the old space (O), resulting in an increase of old space utilization from 66\&.80% to 68\&.19%\&. Before the collection, the survivor space was 97\&.02% utilized, but after this collection it is 91\&.03% utilized\&.
 .sp     
 .nf     
 \f3jstat \-gcutil 21891 250 7\fP
 .fi     
 .nf     
-\f3  S0     S1     E      O      M       YGC    YGCT    FGC    FGCT     GCT\fP
+\f3  S0     S1     E      O      M     CCS    YGC     YGCT    FGC    FGCT     GCT   \fP
 .fi     
 .nf     
-\f30\&.00  99\&.74  13\&.49   7\&.86  95\&.82      3    0\&.124     0    0\&.000    0\&.124\fP
+\f3  0\&.00  97\&.02  70\&.31  66\&.80  95\&.52  89\&.14      7    0\&.300     0    0\&.000    0\&.300\fP
 .fi     
 .nf     
-\f30\&.00  99\&.74  13\&.49   7\&.86  95\&.82      3    0\&.124     0    0\&.000    0\&.124\fP
-.fi     
-.nf     
-\f30\&.00  99\&.74  13\&.49   7\&.86  95\&.82      3    0\&.124     0    0\&.000    0\&.124\fP
+\f3  0\&.00  97\&.02  86\&.23  66\&.80  95\&.52  89\&.14      7    0\&.300     0    0\&.000    0\&.300\fP
 .fi     
 .nf     
-\f30\&.00  99\&.74  13\&.49   7\&.86  95\&.82      3    0\&.124     0    0\&.000    0\&.124\fP
+\f3  0\&.00  97\&.02  96\&.53  66\&.80  95\&.52  89\&.14      7    0\&.300     0    0\&.000    0\&.300\fP
 .fi     
 .nf     
-\f30\&.00  99\&.74  13\&.80   7\&.86  95\&.82      3    0\&.124     0    0\&.000    0\&.124\fP
+\f3 91\&.03   0\&.00   1\&.98  68\&.19  95\&.89  91\&.24      8    0\&.378     0    0\&.000    0\&.378\fP
 .fi     
 .nf     
-\f30\&.00  99\&.74  13\&.80   7\&.86  95\&.82      3    0\&.124     0    0\&.000    0\&.124\fP
+\f3 91\&.03   0\&.00  15\&.82  68\&.19  95\&.89  91\&.24      8    0\&.378     0    0\&.000    0\&.378\fP
 .fi     
 .nf     
-\f30\&.00  99\&.74  13\&.80   7\&.86  95\&.82      3    0\&.124     0    0\&.000    0\&.124\fP
+\f3 91\&.03   0\&.00  17\&.80  68\&.19  95\&.89  91\&.24      8    0\&.378     0    0\&.000    0\&.378\fP
 .fi     
 .nf     
-\f3\fP
+\f3 91\&.03   0\&.00  17\&.80  68\&.19  95\&.89  91\&.24      8    0\&.378     0    0\&.000    0\&.378\fP
 .fi     
 .sp     
 .SS REPEAT\ THE\ COLUMN\ HEADER\ STRING    
-This example attaches to lvmid 21891 and takes samples at 250 millisecond intervals and displays the output as specified by \f3-gcutil\fR option\&. In addition, it uses the \f3-h3\fR option to output the column header after every 3 lines of data\&.
+This example attaches to lvmid 21891 and takes samples at 250 millisecond intervals and displays the output as specified by \f3-gcnew\fR option\&. In addition, it uses the \f3-h3\fR option to output the column header after every 3 lines of data\&.
 .PP
 In addition to showing the repeating header string, this example shows that between the second and third samples, a young GC occurred\&. Its duration was 0\&.001 seconds\&. The collection found enough active data that the survivor space 0 utilization (S0U) would have exceeded the desired survivor Size (DSS)\&. As a result, objects were promoted to the old generation (not visible in this output), and the tenuring threshold (TT) was lowered from 31 to 2\&.
 .PP
@@ -516,7 +531,7 @@
 .SS INCLUDE\ A\ TIME\ STAMP\ FOR\ EACH\ SAMPLE    
 This example attaches to lvmid 21891 and takes 3 samples at 250 millisecond intervals\&. The \f3-t\fR option is used to generate a time stamp for each sample in the first column\&.
 .PP
-The Timestamp column reports the elapsed time in seconds since the start of the target JVM\&. In addition, the \f3-gcoldcapacity\fR output shows the old generation capacity (OGC) and the old space capacity (OC) increasing as the heap expands to meet allocation or promotion demands\&. The old generation capacity (OGC) has grown to from 11,696 KB to 13820 KB after the eighty-first full garbage collection (FGC)\&. The maximum capacity of the generation (and space) is 60,544 KB (OGCMX), so it still has room to expand\&.
+The Timestamp column reports the elapsed time in seconds since the start of the target JVM\&. In addition, the \f3-gcoldcapacity\fR output shows the old generation capacity (OGC) and the old space capacity (OC) increasing as the heap expands to meet allocation or promotion demands\&. The old generation capacity (OGC) has grown from 11,696 kB to 13,820 kB after the eighty-first full garbage collection (FGC)\&. The maximum capacity of the generation (and space) is 60,544 kB (OGCMX), so it still has room to expand\&.
 .sp     
 .nf     
 \f3Timestamp      OGCMN    OGCMX     OGC       OC       YGC   FGC    FGCT    GCT\fP
@@ -537,7 +552,7 @@
 .SS MONITOR\ INSTRUMENTATION\ FOR\ A\ REMOTE\ JVM    
 This example attaches to lvmid 40496 on the system named remote\&.domain using the \f3-gcutil\fR option, with samples taken every second indefinitely\&.
 .PP
-The lvmid is combined with the name of the remote host to construct a \fIvmid\fR of \f340496@remote\&.domain\fR\&. This vmid results in the use of the \f3rmi\fR protocol to communicate to the default \f3jstatd\fR server on the remote host\&. The \f3jstatd\fR server is located using the rmiregistry on \f3remote\&.domain\fR that is bound to the default rmiregistry port (port 1099)\&.
+The lvmid is combined with the name of the remote host to construct a \fIvmid\fR of \f340496@remote\&.domain\fR\&. This vmid results in the use of the \f3rmi\fR protocol to communicate to the default \f3jstatd\fR server on the remote host\&. The \f3jstatd\fR server is located using the \f3rmiregistry\fR command on \f3remote\&.domain\fR that is bound to the default port of the \f3rmiregistry\fR command (port 1099)\&.
 .sp     
 .nf     
 \f3jstat \-gcutil 40496@remote\&.domain 1000\fP
--- a/src/linux/doc/man/keytool.1	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/linux/doc/man/keytool.1	Tue Nov 04 17:20:19 2014 +0000
@@ -1,5 +1,5 @@
 '\" t
-.\"  Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved.
+.\"  Copyright (c) 1998, 2015, Oracle and/or its affiliates. All rights reserved.
 .\"
 .\" DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 .\"
@@ -23,12 +23,12 @@
 .\"
 .\"     Arch: generic
 .\"     Software: JDK 8
-.\"     Date: 6 August 2013
+.\"     Date: 03 March 2015
 .\"     SectDesc: Security Tools
 .\"     Title: keytool.1
 .\"
 .if n .pl 99999
-.TH keytool 1 "6 August 2013" "JDK 8" "Security Tools"
+.TH keytool 1 "03 March 2015" "JDK 8" "Security Tools"
 .\" -----------------------------------------------------------------
 .\" * Define some portability stuff
 .\" -----------------------------------------------------------------
@@ -185,10 +185,16 @@
 .TP 0.2i    
 \(bu
 Items in italics (option values) represent the actual values that must be supplied\&. For example, here is the format of the \f3-printcert\fR command:
+.sp     
+.nf     
+\f3keytool \-printcert {\-file \fIcert_file\fR} {\-v}\fP
+.fi     
+.sp     
 
-\f3keytool -printcert {-file cert_file} {-v}\fR
+
 
-When you specify a \f3-printcert\fR command, replace \f3cert_file\fR with the actual file name, as follows: \f3keytool -printcert -file VScert\&.cer\fR
+
+When you specify a \f3-printcert\fR command, replace \fIcert_file\fR with the actual file name, as follows: \f3keytool -printcert -file VScert\&.cer\fR
 .TP 0.2i    
 \(bu
 Option values must be put in quotation marks when they contain a blank (space)\&.
@@ -385,10 +391,39 @@
 .PP
 \fINote:\fR Users should be aware that some combinations of extensions (and other certificate fields) may not conform to the Internet standard\&. See Certificate Conformance Warning\&.
 .SH COMMANDS    
-.TP
+.TP     
 -gencert
-.br
-\f3{-rfc} {-infile infile} {-outfile outfile} {-alias alias} {-sigalg sigalg} {-dname dname} {-startdate startdate {-ext ext}* {-validity valDays} [-keypass keypass] {-keystore keystore} [-storepass storepass] {-storetype storetype} {-providername provider_name} {-providerClass provider_class_name {-providerArg provider_arg}} {-v} {-protected} {-Jjavaoption}\fR
+.sp     
+.nf     
+\f3{\-rfc} {\-infile \fIinfile\fR} {\-outfile \fIoutfile\fR} {\-alias \fIalias\fR} {\-sigalg \fIsigalg\fR}\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3{\-dname \fIdname\fR} {\-startdate \fIstartdate\fR {\-ext \fIext\fR}* {\-validity \fIvalDays\fR}\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3[\-keypass \fIkeypass\fR] {\-keystore \fIkeystore\fR} [\-storepass \fIstorepass\fR]\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3{\-storetype \fIstoretype\fR} {\-providername \fIprovider_name\fR}\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3{\-providerClass \fIprovider_class_name\fR {\-providerArg \fIprovider_arg\fR}}\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3{\-v} {\-protected} {\-Jjavaoption}\fP
+.fi     
+.sp     
+
 
 Generates a certificate as a response to a certificate request file (which can be created by the \f3keytool\fR\f3-certreq\fR command)\&. The command reads the request from \fIinfile\fR (if omitted, from the standard input), signs it using alias\&'s private key, and outputs the X\&.509 certificate into \fIoutfile\fR (if omitted, to the standard output)\&. When\f3-rfc\fR is specified, the output format is Base64-encoded PEM; otherwise, a binary DER is created\&.
 
@@ -459,10 +494,39 @@
 .fi     
 .sp     
 
-.TP
+.TP     
 -genkeypair
-.br
-\f3{-alias alias} {-keyalg keyalg} {-keysize keysize} {-sigalg sigalg} [-dname dname] [-keypass keypass] {-startdate value} {-ext ext}* {-validity valDays} {-storetype storetype} {-keystore keystore} [-storepass storepass] {-providerClass provider_class_name {-providerArg provider_arg}} {-v} {-protected} {-Jjavaoption}\fR
+.sp     
+.nf     
+\f3{\-alias \fIalias\fR} {\-keyalg \fIkeyalg\fR} {\-keysize \fIkeysize\fR} {\-sigalg \fIsigalg\fR}\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3[\-dname \fIdname\fR] [\-keypass \fIkeypass\fR] {\-startdate \fIvalue\fR} {\-ext \fIext\fR}*\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3{\-validity \fIvalDays\fR} {\-storetype \fIstoretype\fR} {\-keystore \fIkeystore\fR}\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3[\-storepass \fIstorepass\fR]\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3{\-providerClass \fIprovider_class_name\fR {\-providerArg \fIprovider_arg\fR}}\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3{\-v} {\-protected} {\-Jjavaoption}\fP
+.fi     
+.sp     
+
 
 Generates a key pair (a public key and associated private key)\&. Wraps the public key into an X\&.509 v3 self-signed certificate, which is stored as a single-element certificate chain\&. This certificate chain and the private key are stored in a new keystore entry identified by alias\&.
 
@@ -510,18 +574,61 @@
 The value of \f3valDays\fR specifies the number of days (starting at the date specified by \f3-startdate\fR, or the current date when \f3-startdate\fR is not specified) for which the certificate should be considered valid\&.
 
 This command was named \f3-genkey\fR in earlier releases\&. The old name is still supported in this release\&. The new name, \f3-genkeypair\fR, is preferred going forward\&.
-.TP
+.TP     
 -genseckey
-.br
-\f3-genseckey {-alias alias} {-keyalg keyalg} {-keysize keysize} [-keypass keypass] {-storetype storetype} {-keystore keystore} [-storepass storepass] {-providerClass provider_class_name {-providerArg provider_arg}} {-v} {-protected} {-Jjavaoption}\fR
+.sp     
+.nf     
+\f3{\-alias \fIalias\fR} {\-keyalg \fIkeyalg\fR} {\-keysize \fIkeysize\fR} [\-keypass \fIkeypass\fR]\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3{\-storetype \fIstoretype\fR} {\-keystore \fIkeystore\fR} [\-storepass \fIstorepass\fR]\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3{\-providerClass \fIprovider_class_name\fR {\-providerArg \fIprovider_arg\fR}} {\-v}\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3{\-protected} {\-Jjavaoption}\fP
+.fi     
+.sp     
+
 
 Generates a secret key and stores it in a new \f3KeyStore\&.SecretKeyEntry\fR identified by \f3alias\fR\&.
 
 The value of \f3keyalg\fR specifies the algorithm to be used to generate the secret key, and the value of \f3keysize\fR specifies the size of the key to be generated\&. The \f3keypass\fR value is a password that protects the secret key\&. If no password is provided, then the user is prompted for it\&. If you press the Return key at the prompt, then the key password is set to the same password that is used for the \f3keystore\fR\&. The \f3keypass\fR value must be at least 6 characters\&.
-.TP
+.TP     
 -importcert
-.br
-\f3-importcert {-alias alias} {-file cert_file} [-keypass keypass] {-noprompt} {-trustcacerts} {-storetype storetype} {-keystore keystore} [-storepass storepass] {-providerName provider_name} {-providerClass provider_class_name {-providerArg provider_arg}} {-v} {-protected} {-Jjavaoption}\fR
+.sp     
+.nf     
+\f3{\-alias \fIalias\fR} {\-file \fIcert_file\fR} [\-keypass \fIkeypass\fR] {\-noprompt} {\-trustcacerts}\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3{\-storetype \fIstoretype\fR} {\-keystore \fIkeystore\fR} [\-storepass \fIstorepass\fR]\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3{\-providerName \fIprovider_name\fR}\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3{\-providerClass \fIprovider_class_name\fR {\-providerArg \fIprovider_arg\fR}}\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3{\-v} {\-protected} {\-Jjavaoption}\fP
+.fi     
+.sp     
+
 
 Reads the certificate or certificate chain (where the latter is supplied in a PKCS#7 formatted reply or a sequence of X\&.509 certificates) from the file \f3cert_file\fR, and stores it in the \f3keystore\fR entry identified by \f3alias\fR\&. If no file is specified, then the certificate or certificate chain is read from \f3stdin\fR\&.
 
@@ -530,16 +637,74 @@
 You import a certificate for two reasons: To add it to the list of trusted certificates, and to import a certificate reply received from a certificate authority (CA) as the result of submitting a Certificate Signing Request to that CA (see the \f3-certreq\fR option in Commands)\&.
 
 Which type of import is intended is indicated by the value of the \f3-alias\fR option\&. If the alias does not point to a key entry, then the \f3keytool\fR command assumes you are adding a trusted certificate entry\&. In this case, the alias should not already exist in the keystore\&. If the alias does already exist, then the \f3keytool\fR command outputs an error because there is already a trusted certificate for that alias, and does not import the certificate\&. If the alias points to a key entry, then the \f3keytool\fR command assumes you are importing a certificate reply\&.
-.TP
+.TP     
 -importpassword
-.br
-\f3{-alias alias} [-keypass keypass] {-storetype storetype} {-keystore keystore} [-storepass storepass] {-providerClass provider_class_name {-providerArg provider_arg}} {-v} {-protected} {-Jjavaoption}\fR
+.sp     
+.nf     
+\f3{\-alias \fIalias\fR} [\-keypass \fIkeypass\fR] {\-storetype \fIstoretype\fR} {\-keystore \fIkeystore\fR}\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3[\-storepass \fIstorepass\fR]\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3{\-providerClass \fIprovider_class_name\fR {\-providerArg \fIprovider_arg\fR}}\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3{\-v} {\-protected} {\-Jjavaoption}\fP
+.fi     
+.sp     
+
 
 Imports a passphrase and stores it in a new \f3KeyStore\&.SecretKeyEntry\fR identified by \f3alias\fR\&. The passphrase may be supplied via the standard input stream; otherwise the user is prompted for it\&. \f3keypass\fR is a password used to protect the imported passphrase\&. If no password is provided, the user is prompted for it\&. If you press the Return key at the prompt, the key password is set to the same password as that used for the \f3keystore\fR\&. \f3keypass\fR must be at least 6 characters long\&.
-.TP
+.TP     
 -importkeystore
-.br
-\f3{-srcstoretype srcstoretype} {-deststoretype deststoretype} [-srcstorepass srcstorepass] [-deststorepass deststorepass] {-srcprotected} {-destprotected} {-srcalias srcalias {-destalias destalias} [-srckeypass srckeypass] } [-destkeypass destkeypass] {-noprompt} {-srcProviderName src_provider_name} {-destProviderName dest_provider_name} {-providerClass provider_class_name {-providerArg provider_arg}} {-v} {-protected} {-Jjavaoption}\fR
+.sp     
+.nf     
+\f3{\-srcstoretype \fIsrcstoretype\fR} {\-deststoretype \fIdeststoretype\fR}\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3[\-srcstorepass \fIsrcstorepass\fR] [\-deststorepass \fIdeststorepass\fR] {\-srcprotected}\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3{\-destprotected} \fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3{\-srcalias \fIsrcalias\fR {\-destalias \fIdestalias\fR} [\-srckeypass \fIsrckeypass\fR]} \fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3[\-destkeypass \fIdestkeypass\fR] {\-noprompt}\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3{\-srcProviderName \fIsrc_provider_name\fR} {\-destProviderName \fIdest_provider_name\fR}\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3{\-providerClass \fIprovider_class_name\fR {\-providerArg \fIprovider_arg\fR}} {\-v}\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3{\-protected} {\-Jjavaoption}\fP
+.fi     
+.sp     
+
 
 Imports a single entry or all entries from a source keystore to a destination keystore\&.
 
@@ -550,16 +715,44 @@
 If the destination alias already exists in the destination keystore, then the user is prompted to either overwrite the entry or to create a new entry under a different alias name\&.
 
 If the \f3-noprompt\fR option is provided, then the user is not prompted for a new destination alias\&. Existing entries are overwritten with the destination alias name\&. Entries that cannot be imported are skipped and a warning is displayed\&.
-.TP
+.TP     
 -printcertreq
-.br
-\f3{-file file}\fR
+.sp     
+.nf     
+\f3{\-file \fIfile\fR}\fP
+.fi     
+.sp     
+
 
 Prints the content of a PKCS #10 format certificate request, which can be generated by the \f3keytool\fR\f3-certreq\fR command\&. The command reads the request from file\&. If there is no file, then the request is read from the standard input\&.
-.TP
+.TP     
 -certreq
-.br
-\f3{-alias alias} {-dname dname} {-sigalg sigalg} {-file certreq_file} [-keypass keypass] {-storetype storetype} {-keystore keystore} [-storepass storepass] {-providerName provider_name} {-providerClass provider_class_name {-providerArg provider_arg}} {-v} {-protected} {-Jjavaoption}\fR
+.sp     
+.nf     
+\f3{\-alias \fIalias\fR} {\-dname \fIdname\fR} {\-sigalg \fIsigalg\fR} {\-file \fIcertreq_file\fR}\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3[\-keypass \fIkeypass\fR] {\-storetype \fIstoretype\fR} {\-keystore \fIkeystore\fR}\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3[\-storepass \fIstorepass\fR] {\-providerName \fIprovider_name\fR}\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3{\-providerClass \fIprovider_class_name\fR {\-providerArg \fIprovider_arg\fR}}\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3{\-v} {\-protected} {\-Jjavaoption}\fP
+.fi     
+.sp     
+
 
 Generates a Certificate Signing Request (CSR) using the PKCS #10 format\&.
 
@@ -572,10 +765,29 @@
 The CSR is stored in the file certreq_file\&. If no file is specified, then the CSR is output to \f3stdout\fR\&.
 
 Use the \f3importcert\fR command to import the response from the CA\&.
-.TP
+.TP     
 -exportcert
-.br
-\f3{-alias alias} {-file cert_file} {-storetype storetype} {-keystore keystore} [-storepass storepass] {-providerName provider_name} {-providerClass provider_class_name {-providerArg provider_arg}} {-rfc} {-v} {-protected} {-Jjavaoption}\fR
+.sp     
+.nf     
+\f3{\-alias \fIalias\fR} {\-file \fIcert_file\fR} {\-storetype \fIstoretype\fR} {\-keystore \fIkeystore\fR}\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3[\-storepass \fIstorepass\fR] {\-providerName \fIprovider_name\fR}\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3{\-providerClass \fIprovider_class_name\fR {\-providerArg \fIprovider_arg\fR}}\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3{\-rfc} {\-v} {\-protected} {\-Jjavaoption}\fP
+.fi     
+.sp     
+
 
 Reads from the keystore the certificate associated with \fIalias\fR and stores it in the cert_file file\&. When no file is specified, the certificate is output to \f3stdout\fR\&.
 
@@ -584,20 +796,48 @@
 If \f3alias\fR refers to a trusted certificate, then that certificate is output\&. Otherwise, \f3alias\fR refers to a key entry with an associated certificate chain\&. In that case, the first certificate in the chain is returned\&. This certificate authenticates the public key of the entity addressed by \f3alias\fR\&.
 
 This command was named \f3-export\fR in earlier releases\&. The old name is still supported in this release\&. The new name, \f3-exportcert\fR, is preferred going forward\&.
-.TP
+.TP     
 -list
-.br
-\f3{-alias alias} {-storetype storetype} {-keystore keystore} [-storepass storepass] {-providerName provider_name} {-providerClass provider_class_name {-providerArg provider_arg}} {-v | -rfc} {-protected} {-Jjavaoption}\fR
+.sp     
+.nf     
+\f3{\-alias \fIalias\fR} {\-storetype \fIstoretype\fR} {\-keystore \fIkeystore\fR} [\-storepass \fIstorepass\fR]\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3{\-providerName \fIprovider_name\fR}\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3{\-providerClass \fIprovider_class_name\fR {\-providerArg \fIprovider_arg\fR}}\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3{\-v | \-rfc} {\-protected} {\-Jjavaoption}\fP
+.fi     
+.sp     
+
 
 Prints to \f3stdout\fR the contents of the keystore entry identified by \f3alias\fR\&. If no \f3alias\fR is specified, then the contents of the entire keystore are printed\&.
 
 This command by default prints the SHA1 fingerprint of a certificate\&. If the \f3-v\fR option is specified, then the certificate is printed in human-readable format, with additional information such as the owner, issuer, serial number, and any extensions\&. If the \f3-rfc\fR option is specified, then the certificate contents are printed using the printable encoding format, as defined by the Internet RFC 1421 Certificate Encoding Standard\&.
 
 You cannot specify both \f3-v\fR and \f3-rfc\fR\&.
-.TP
+.TP     
 -printcert
-.br
-\f3{-file cert_file | -sslserver host[:port]} {-jarfile JAR_file {-rfc} {-v} {-Jjavaoption}\fR
+.sp     
+.nf     
+\f3{\-file \fIcert_file\fR | \-sslserver \fIhost\fR[:\fIport\fR]} {\-jarfile \fIJAR_file\fR {\-rfc} {\-v}\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3{\-Jjavaoption}\fP
+.fi     
+.sp     
+
 
 Reads the certificate from the file cert_file, the SSL server located at host:port, or the signed JAR file \f3JAR_file\fR (with the \f3-jarfile\fR option and prints its contents in a human-readable format\&. When no port is specified, the standard HTTPS port 443 is assumed\&. Note that \f3-sslserver\fR and -file options cannot be provided at the same time\&. Otherwise, an error is reported\&. If neither option is specified, then the certificate is read from \f3stdin\fR\&.
 
@@ -608,40 +848,120 @@
 If the SSL server is behind a firewall, then the \f3-J-Dhttps\&.proxyHost=proxyhost\fR and \f3-J-Dhttps\&.proxyPort=proxyport\fR options can be specified on the command line for proxy tunneling\&. See Java Secure Socket Extension (JSSE) Reference Guide at http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/security/jsse/JSSERefGuide\&.html
 
 \fINote:\fR This option can be used independently of a keystore\&.
-.TP
+.TP     
 -printcrl
-.br
-\f3-file crl_ {-v}\fR
+.sp     
+.nf     
+\f3\-file \fIcrl_\fR {\-v}\fP
+.fi     
+.sp     
+
 
 Reads the Certificate Revocation List (CRL) from the file \f3crl_\fR\&. A CRL is a list of digital certificates that were revoked by the CA that issued them\&. The CA generates the \f3crl_\fR file\&.
 
 \fINote:\fR This option can be used independently of a keystore\&.
-.TP
+.TP     
 -storepasswd
-.br
-\f3[-new new_storepass] {-storetype storetype} {-keystore keystore} [-storepass storepass] {-providerName provider_name} {-providerClass provider_class_name {-providerArg provider_arg}} {-v} {-Jjavaoption}\fR
+.sp     
+.nf     
+\f3[\-new \fInew_storepass\fR] {\-storetype \fIstoretype\fR} {\-keystore \fIkeystore\fR}\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3[\-storepass \fIstorepass\fR] {\-providerName \fIprovider_name\fR}\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3{\-providerClass \fIprovider_class_name\fR {\-providerArg \fIprovider_arg\fR}}\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3{\-v} {\-Jjavaoption}\fP
+.fi     
+.sp     
+
 
 Changes the password used to protect the integrity of the keystore contents\&. The new password is \f3new_storepass\fR, which must be at least 6 characters\&.
-.TP
+.TP     
 -keypasswd
-.br
-\f3{-alias alias} [-keypass old_keypass] [-new new_keypass] {-storetype storetype} {-keystore keystore} [-storepass storepass] {-providerName provider_name} {-providerClass provider_class_name {-providerArg provider_arg}} {-v} {-Jjavaoption}\fR
+.sp     
+.nf     
+\f3{\-alias \fIalias\fR} [\-keypass \fIold_keypass\fR] [\-new \fInew_keypass\fR] {\-storetype \fIstoretype\fR}\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3{\-keystore \fIkeystore\fR} [\-storepass \fIstorepass\fR] {\-providerName \fIprovider_name\fR}\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3{\-providerClass \fIprovider_class_name\fR {\-providerArg \fIprovider_arg\fR}} {\-v}\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3{\-Jjavaoption}\fP
+.fi     
+.sp     
+
 
 Changes the password under which the private/secret key identified by \f3alias\fR is protected, from \f3old_keypass\fR to \f3new_keypass\fR, which must be at least 6 characters\&.
 
 If the \f3-keypass\fR option is not provided at the command line, and the key password is different from the keystore password, then the user is prompted for it\&.
 
 If the \f3-new\fR option is not provided at the command line, then the user is prompted for it
-.TP
+.TP     
 -delete
-.br
-\f3[-alias alias] {-storetype storetype} {-keystore keystore} [-storepass storepass] {-providerName provider_name} {-providerClass provider_class_name {-providerArg provider_arg}} {-v} {-protected} {-Jjavaoption}\fR
+.sp     
+.nf     
+\f3[\-alias \fIalias\fR] {\-storetype \fIstoretype\fR} {\-keystore \fIkeystore\fR} [\-storepass \fIstorepass\fR]\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3{\-providerName \fIprovider_name\fR}  \fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3{\-providerClass \fIprovider_class_name\fR {\-providerArg \fIprovider_arg\fR}}\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3{\-v} {\-protected} {\-Jjavaoption}\fP
+.fi     
+.sp     
+
 
 Deletes from the keystore the entry identified by \f3alias\fR\&. The user is prompted for the alias, when no alias is provided at the command line\&.
-.TP
+.TP     
 -changealias
-.br
-\f3{-alias alias} [-destalias destalias] [-keypass keypass] {-storetype storetype} {-keystore keystore} [-storepass storepass] {-providerName provider_name} {-providerClass provider_class_name {-providerArg provider_arg}} {-v} {-protected} {-Jjavaoption}\fR
+.sp     
+.nf     
+\f3{\-alias \fIalias\fR} [\-destalias \fIdestalias\fR] [\-keypass \fIkeypass\fR] {\-storetype \fIstoretype\fR}\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3{\-keystore \fIkeystore\fR} [\-storepass \fIstorepass\fR] {\-providerName \fIprovider_name\fR}\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3{\-providerClass \fIprovider_class_name\fR {\-providerArg \fIprovider_arg\fR}} {\-v}\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3{\-protected} {\-Jjavaoption}\fP
+.fi     
+.sp     
+
 
 Move an existing keystore entry from the specified \f3alias\fR to a new alias, \f3destalias\fR\&. If no destination alias is provided, then the command prompts for one\&. If the original entry is protected with an entry password, then the password can be supplied with the \f3-keypass\fR option\&. If no key password is provided, then the \f3storepass\fR (if provided) is attempted first\&. If the attempt fails, then the user is prompted for a password\&.
 .TP
--- a/src/linux/doc/man/policytool.1	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/linux/doc/man/policytool.1	Tue Nov 04 17:20:19 2014 +0000
@@ -1,5 +1,5 @@
 '\" t
-.\"  Copyright (c) 2001, 2013, Oracle and/or its affiliates. All rights reserved.
+.\"  Copyright (c) 2001, 2015, Oracle and/or its affiliates. All rights reserved.
 .\"
 .\" DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 .\"
@@ -23,12 +23,12 @@
 .\"
 .\"     Arch: generic
 .\"     Software: JDK 8
-.\"     Date: 21 November 2013
+.\"     Date: 03 March 2015
 .\"     SectDesc: Security Tools
 .\"     Title: policytool.1
 .\"
 .if n .pl 99999
-.TH policytool 1 "21 November 2013" "JDK 8" "Security Tools"
+.TH policytool 1 "03 March 2015" "JDK 8" "Security Tools"
 .\" -----------------------------------------------------------------
 .\" * Define some portability stuff
 .\" -----------------------------------------------------------------
@@ -80,7 +80,7 @@
 Run the \f3policytool\fR command and load the specified file:
 .sp     
 .nf     
-\f3policytool\-file mypolicyfile\fP
+\f3policytool \-file \fImypolicyfile\fR\fP
 .fi     
 .nf     
 \f3\fP
--- a/src/macosx/classes/sun/lwawt/macosx/CPlatformWindow.java	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/macosx/classes/sun/lwawt/macosx/CPlatformWindow.java	Tue Nov 04 17:20:19 2014 +0000
@@ -674,6 +674,13 @@
     @Override  // PlatformWindow
     public void toFront() {
         final long nsWindowPtr = getNSWindowPtr();
+        LWCToolkit lwcToolkit = (LWCToolkit) Toolkit.getDefaultToolkit();
+        Window w = DefaultKeyboardFocusManager.getCurrentKeyboardFocusManager().getActiveWindow();
+        if( w != null
+                && ((LWWindowPeer)w.getPeer()).getPeerType() == LWWindowPeer.PeerType.EMBEDDED_FRAME
+                && !lwcToolkit.isApplicationActive()) {
+            lwcToolkit.activateApplicationIgnoringOtherApps();
+        }
         updateFocusabilityForAutoRequestFocus(false);
         nativePushNSWindowToFront(nsWindowPtr);
         updateFocusabilityForAutoRequestFocus(true);
--- a/src/macosx/classes/sun/lwawt/macosx/LWCToolkit.java	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/macosx/classes/sun/lwawt/macosx/LWCToolkit.java	Tue Nov 04 17:20:19 2014 +0000
@@ -801,6 +801,11 @@
      */
     public static native boolean isEmbedded();
 
+    /*
+     * Activates application ignoring other apps.
+     */
+    public native void activateApplicationIgnoringOtherApps();
+
     /************************
      * Native methods section
      ************************/
--- a/src/macosx/native/sun/awt/LWCToolkit.m	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/macosx/native/sun/awt/LWCToolkit.m	Tue Nov 04 17:20:19 2014 +0000
@@ -413,6 +413,23 @@
     return active;
 }
 
+/*
+ * Class:     sun_lwawt_macosx_LWCToolkit
+ * Method:    activateApplicationIgnoringOtherApps
+ * Signature: ()V
+ */
+JNIEXPORT void JNICALL Java_sun_lwawt_macosx_LWCToolkit_activateApplicationIgnoringOtherApps
+(JNIEnv *env, jclass clazz)
+{
+    JNF_COCOA_ENTER(env);
+    [ThreadUtilities performOnMainThreadWaiting:NO block:^(){
+        if(![NSApp isActive]){
+            [NSApp activateIgnoringOtherApps:YES];
+        }
+    }];
+    JNF_COCOA_EXIT(env);
+}
+
 
 /*
  * Class:     sun_awt_SunToolkit
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/share/back/InterfaceTypeImpl.c	Tue Nov 04 17:20:19 2014 +0000
@@ -0,0 +1,39 @@
+/*
+ * Copyright (c) 1998, 2005, 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 "util.h"
+#include "InterfaceTypeImpl.h"
+#include "inStream.h"
+#include "outStream.h"
+
+static jboolean
+invokeStatic(PacketInputStream *in, PacketOutputStream *out)
+{
+    return sharedInvoke(in, out);
+}
+
+void *InterfaceType_Cmds[] = { (void *)0x1
+    , (void *)invokeStatic
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/share/back/InterfaceTypeImpl.h	Tue Nov 04 17:20:19 2014 +0000
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 1998, 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.
+ */
+extern void *InterfaceType_Cmds[];
--- a/src/share/back/VirtualMachineImpl.c	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/share/back/VirtualMachineImpl.c	Tue Nov 04 17:20:19 2014 +0000
@@ -36,7 +36,7 @@
 
 static char *versionName = "Java Debug Wire Protocol (Reference Implementation)";
 static int majorVersion = 1;  /* JDWP major version */
-static int minorVersion = 6;  /* JDWP minor version */
+static int minorVersion = 8;  /* JDWP minor version */
 
 static jboolean
 version(PacketInputStream *in, PacketOutputStream *out)
--- a/src/share/back/debugDispatch.c	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/share/back/debugDispatch.c	Tue Nov 04 17:20:19 2014 +0000
@@ -29,6 +29,7 @@
 #include "VirtualMachineImpl.h"
 #include "ReferenceTypeImpl.h"
 #include "ClassTypeImpl.h"
+#include "InterfaceTypeImpl.h"
 #include "ArrayTypeImpl.h"
 #include "FieldImpl.h"
 #include "MethodImpl.h"
@@ -67,6 +68,7 @@
     l1Array[JDWP_COMMAND_SET(VirtualMachine)] = (void *)VirtualMachine_Cmds;
     l1Array[JDWP_COMMAND_SET(ReferenceType)] = (void *)ReferenceType_Cmds;
     l1Array[JDWP_COMMAND_SET(ClassType)] = (void *)ClassType_Cmds;
+    l1Array[JDWP_COMMAND_SET(InterfaceType)] = (void *)InterfaceType_Cmds;
     l1Array[JDWP_COMMAND_SET(ArrayType)] = (void *)ArrayType_Cmds;
 
     l1Array[JDWP_COMMAND_SET(Field)] = (void *)Field_Cmds;
--- a/src/share/back/util.c	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/share/back/util.c	Tue Nov 04 17:20:19 2014 +0000
@@ -591,6 +591,8 @@
         invokeType = INVOKE_CONSTRUCTOR;
     } else if (inStream_command(in) == JDWP_COMMAND(ClassType, InvokeMethod)) {
         invokeType = INVOKE_STATIC;
+    } else if (inStream_command(in) == JDWP_COMMAND(InterfaceType, InvokeMethod)) {
+        invokeType = INVOKE_STATIC;
     } else if (inStream_command(in) == JDWP_COMMAND(ObjectReference, InvokeMethod)) {
         invokeType = INVOKE_INSTANCE;
     } else {
--- a/src/share/classes/com/sun/jarsigner/ContentSigner.java	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/share/classes/com/sun/jarsigner/ContentSigner.java	Tue Nov 04 17:20:19 2014 +0000
@@ -37,6 +37,7 @@
  * @author Vincent Ryan
  */
 
+@jdk.Exported
 public abstract class ContentSigner {
 
     /**
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/share/classes/com/sun/jarsigner/package-info.java	Tue Nov 04 17:20:19 2014 +0000
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2014, 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.
+ */
+/**
+ * This package comprises the interfaces and classes used to define the
+ * signing mechanism used by the <tt>jarsigner</tt> tool.
+ * <p>
+ * Clients may override the default signing mechanism of the <tt>jarsigner</tt>
+ * tool by supplying an alternative implementation of
+ * {@link com.sun.jarsigner.ContentSigner}.
+ */
+
+@jdk.Exported
+package com.sun.jarsigner;
--- a/src/share/classes/com/sun/jarsigner/package.html	Fri Oct 10 15:52:52 2014 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,38 +0,0 @@
-<html>
-<!--
- 
-Copyright (c) 2003, 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.
--->
-  <head>
-    <title>Jarsigner Signing Mechanism Package</title>
-  </head>   
-  <body>
-This package comprises the interfaces and classes used to define the
-signing mechanism used by the <tt>jarsigner</tt> tool.
-<p>
-Clients may override the default signing mechanism of the <tt>jarsigner</tt>
-tool by supplying an alternative implementation of 
-{@link com.sun.jarsigner.ContentSigner}.
-  </body>
-</html>
--- a/src/share/classes/com/sun/java/util/jar/pack/DriverResource_ja.java	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/share/classes/com/sun/java/util/jar/pack/DriverResource_ja.java	Tue Nov 04 17:20:19 2014 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2014, 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
@@ -84,7 +84,7 @@
                 "  -V\u3001--version                   \u30D7\u30ED\u30B0\u30E9\u30E0\u306E\u30D0\u30FC\u30B8\u30E7\u30F3\u3092\u51FA\u529B\u3057\u307E\u3059",
                 "  -J{X}                           \u30AA\u30D7\u30B7\u30E7\u30F3X\u3092\u57FA\u790E\u3068\u306A\u308BJava VM\u306B\u6E21\u3057\u307E\u3059",
                 "",
-                "\u6CE8\u610F:",
+                "\u6CE8:",
                 "  -P\u3001-C\u3001-F\u3001-M\u304A\u3088\u3073-D\u30AA\u30D7\u30B7\u30E7\u30F3\u306F\u7D2F\u7A4D\u3055\u308C\u307E\u3059\u3002",
                 "  \u5C5E\u6027\u5B9A\u7FA9\u306E\u4F8B:  -C SourceFile=RUH .",
                 "  Config.\u30D5\u30A1\u30A4\u30EB\u30FB\u30D7\u30ED\u30D1\u30C6\u30A3\u306F\u3001Pack200 API\u306B\u3088\u3063\u3066\u5B9A\u7FA9\u3055\u308C\u307E\u3059\u3002",
--- a/src/share/classes/com/sun/jdi/ClassType.java	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/share/classes/com/sun/jdi/ClassType.java	Tue Nov 04 17:20:19 2014 +0000
@@ -103,7 +103,7 @@
      * <p>
      * Object values must be assignment compatible with the field type
      * (This implies that the field type must be loaded through the
-     * enclosing class's class loader). Primitive values must be
+     * enclosing class' class loader). Primitive values must be
      * either assignment compatible with the field type or must be
      * convertible to the field type without loss of information.
      * See JLS section 5.2 for more information on assignment
@@ -153,7 +153,7 @@
      * <p>
      * Object arguments must be assignment compatible with the argument type
      * (This implies that the argument type must be loaded through the
-     * enclosing class's class loader). Primitive arguments must be
+     * enclosing class' class loader). Primitive arguments must be
      * either assignment compatible with the argument type or must be
      * convertible to the argument type without loss of information.
      * If the method being called accepts a variable number of arguments,
@@ -216,7 +216,7 @@
      * @return a {@link Value} mirror of the invoked method's return value.
      * @throws java.lang.IllegalArgumentException if the method is not
      * a member of this class or a superclass, if the size of the argument list
-     * does not match the number of declared arguemnts for the method, or
+     * does not match the number of declared arguments for the method, or
      * if the method is an initializer, constructor or static intializer.
      * @throws {@link InvalidTypeException} if any argument in the
      * argument list is not assignable to the corresponding method argument
@@ -230,7 +230,7 @@
      * @throws InvalidTypeException If the arguments do not meet this requirement --
      *         Object arguments must be assignment compatible with the argument
      *         type.  This implies that the argument type must be
-     *         loaded through the enclosing class's class loader.
+     *         loaded through the enclosing class' class loader.
      *         Primitive arguments must be either assignment compatible with the
      *         argument type or must be convertible to the argument type without loss
      *         of information. See JLS section 5.2 for more information on assignment
@@ -267,7 +267,7 @@
      * <p>
      * Object arguments must be assignment compatible with the argument type
      * (This implies that the argument type must be loaded through the
-     * enclosing class's class loader). Primitive arguments must be
+     * enclosing class' class loader). Primitive arguments must be
      * either assignment compatible with the argument type or must be
      * convertible to the argument type without loss of information.
      * If the method being called accepts a variable number of arguments,
@@ -335,7 +335,7 @@
      * @throws InvalidTypeException If the arguments do not meet this requirement --
      *         Object arguments must be assignment compatible with the argument
      *         type.  This implies that the argument type must be
-     *         loaded through the enclosing class's class loader.
+     *         loaded through the enclosing class' class loader.
      *         Primitive arguments must be either assignment compatible with the
      *         argument type or must be convertible to the argument type without loss
      *         of information. See JLS section 5.2 for more information on assignment
--- a/src/share/classes/com/sun/jdi/InterfaceType.java	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/share/classes/com/sun/jdi/InterfaceType.java	Tue Nov 04 17:20:19 2014 +0000
@@ -79,4 +79,123 @@
      * If none exist, returns a zero length List.
      */
     List<ClassType> implementors();
+
+    /**
+     * Invokes the specified static {@link Method} in the
+     * target VM. The
+     * specified method must be defined in this interface.
+     * The method must be a static method
+     * but not a static initializer.
+     * <p>
+     * The method invocation will occur in the specified thread.
+     * Method invocation can occur only if the specified thread
+     * has been suspended by an event which occurred in that thread.
+     * Method invocation is not supported
+     * when the target VM has been suspended through
+     * {@link VirtualMachine#suspend} or when the specified thread
+     * is suspended through {@link ThreadReference#suspend}.
+     * <p>
+     * The specified method is invoked with the arguments in the specified
+     * argument list.  The method invocation is synchronous; this method
+     * does not return until the invoked method returns in the target VM.
+     * If the invoked method throws an exception, this method will throw
+     * an {@link InvocationException} which contains a mirror to the exception
+     * object thrown.
+     * <p>
+     * Object arguments must be assignment compatible with the argument type
+     * (This implies that the argument type must be loaded through the
+     * enclosing class' class loader). Primitive arguments must be
+     * either assignment compatible with the argument type or must be
+     * convertible to the argument type without loss of information.
+     * If the method being called accepts a variable number of arguments,
+     * then the last argument type is an array of some component type.
+     * The argument in the matching position can be omitted, or can be null,
+     * an array of the same component type, or an argument of the
+     * component type followed by any number of other arguments of the same
+     * type. If the argument is omitted, then a 0 length array of the
+     * component type is passed.  The component type can be a primitive type.
+     * Autoboxing is not supported.
+     *
+     * See Section 5.2 of
+     * <cite>The Java&trade; Language Specification</cite>
+     * for more information on assignment compatibility.
+     * <p>
+     * By default, all threads in the target VM are resumed while
+     * the method is being invoked if they were previously
+     * suspended by an event or by {@link VirtualMachine#suspend} or
+     * {@link ThreadReference#suspend}. This is done to prevent the deadlocks
+     * that will occur if any of the threads own monitors
+     * that will be needed by the invoked method.
+     * Note, however, that this implicit resume acts exactly like
+     * {@link ThreadReference#resume}, so if the thread's suspend
+     * count is greater than 1, it will remain in a suspended state
+     * during the invocation and thus a deadlock could still occur.
+     * By default, when the invocation completes,
+     * all threads in the target VM are suspended, regardless their state
+     * before the invocation.
+     * It is possible that
+     * breakpoints or other events might occur during the invocation.
+     * This can cause deadlocks as described above. It can also cause a deadlock
+     * if invokeMethod is called from the client's event handler thread.  In this
+     * case, this thread will be waiting for the invokeMethod to complete and
+     * won't read the EventSet that comes in for the new event.  If this
+     * new EventSet is SUSPEND_ALL, then a deadlock will occur because no
+     * one will resume the EventSet.  To avoid this, all EventRequests should
+     * be disabled before doing the invokeMethod, or the invokeMethod should
+     * not be done from the client's event handler thread.
+     * <p>
+     * The resumption of other threads during the invocation can be prevented
+     * by specifying the {@link #INVOKE_SINGLE_THREADED}
+     * bit flag in the <code>options</code> argument; however,
+     * there is no protection against or recovery from the deadlocks
+     * described above, so this option should be used with great caution.
+     * Only the specified thread will be resumed (as described for all
+     * threads above). Upon completion of a single threaded invoke, the invoking thread
+     * will be suspended once again. Note that any threads started during
+     * the single threaded invocation will not be suspended when the
+     * invocation completes.
+     * <p>
+     * If the target VM is disconnected during the invoke (for example, through
+     * {@link VirtualMachine#dispose}) the method invocation continues.
+     *
+     * @param thread the thread in which to invoke.
+     * @param method the {@link Method} to invoke.
+     * @param arguments the list of {@link Value} arguments bound to the
+     * invoked method. Values from the list are assigned to arguments
+     * in the order they appear in the method signature.
+     * @param options the integer bit flag options.
+     * @return a {@link Value} mirror of the invoked method's return value.
+     * @throws java.lang.IllegalArgumentException if the method is not
+     * a member of this interface, if the size of the argument list
+     * does not match the number of declared arguments for the method, or
+     * if the method is not static or is a static initializer.
+     * @throws {@link InvalidTypeException} if any argument in the
+     * argument list is not assignable to the corresponding method argument
+     * type.
+     * @throws ClassNotLoadedException if any argument type has not yet been loaded
+     * through the appropriate class loader.
+     * @throws IncompatibleThreadStateException if the specified thread has not
+     * been suspended by an event.
+     * @throws InvocationException if the method invocation resulted in
+     * an exception in the target VM.
+     * @throws InvalidTypeException If the arguments do not meet this requirement --
+     *         Object arguments must be assignment compatible with the argument
+     *         type.  This implies that the argument type must be
+     *         loaded through the enclosing class' class loader.
+     *         Primitive arguments must be either assignment compatible with the
+     *         argument type or must be convertible to the argument type without loss
+     *         of information. See JLS section 5.2 for more information on assignment
+     *         compatibility.
+     * @throws VMCannotBeModifiedException if the VirtualMachine is read-only - see {@link VirtualMachine#canBeModified()}.
+     *
+     * @since 1.8
+     */
+    default Value invokeMethod(ThreadReference thread, Method method,
+                       List<? extends Value> arguments, int options)
+            throws InvalidTypeException,
+            ClassNotLoadedException,
+            IncompatibleThreadStateException,
+            InvocationException {
+        throw new UnsupportedOperationException();
+    }
 }
--- a/src/share/classes/com/sun/jdi/Method.java	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/share/classes/com/sun/jdi/Method.java	Tue Nov 04 17:20:19 2014 +0000
@@ -138,6 +138,18 @@
     boolean isAbstract();
 
     /**
+     * Determine if this method is a default method
+     *
+     * @return <code>true</code> if the method is declared default;
+     * false otherwise
+     *
+     * @since 1.8
+     */
+    default boolean isDefault() {
+        throw new UnsupportedOperationException();
+    }
+
+    /**
      * Determine if this method is synchronized.
      *
      * @return <code>true</code> if the method is declared synchronized;
--- a/src/share/classes/com/sun/jdi/ObjectReference.java	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/share/classes/com/sun/jdi/ObjectReference.java	Tue Nov 04 17:20:19 2014 +0000
@@ -194,10 +194,10 @@
      * {@link #INVOKE_NONVIRTUAL} bit flag in the <code>options</code>
      * argument. If this flag is set, the specified method is invoked
      * whether or not it is overridden for this object's runtime type.
-     * The method, in this case, must not belong to an interface and
-     * must not be abstract. This option is useful for performing method
-     * invocations like those done with the <code>super</code> keyword in
-     * the Java programming language.
+     * The method, in this case, must have an implementation, either in a class
+     * or an interface. This option is useful for performing method invocations
+     * like those done with the <code>super</code> keyword in the Java programming
+     * language.
      * <p>
      * By default, all threads in the target VM are resumed while
      * the method is being invoked if they were previously
@@ -246,10 +246,10 @@
      * @return a {@link Value} mirror of the invoked method's return value.
      * @throws java.lang.IllegalArgumentException if the method is not
      * a member of this object's class, if the size of the argument list
-     * does not match the number of declared arguemnts for the method,
+     * does not match the number of declared arguments for the method,
      * if the method is a constructor or static intializer, or
      * if {@link #INVOKE_NONVIRTUAL} is specified and the method is
-     * either abstract or an interface member.
+     * either abstract or a non-default interface member.
      * @throws {@link InvalidTypeException} if any argument in the
      * argument list is not assignable to the corresponding method argument
      * type.
--- a/src/share/classes/com/sun/org/apache/xml/internal/security/Init.java	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/share/classes/com/sun/org/apache/xml/internal/security/Init.java	Tue Nov 04 17:20:19 2014 +0000
@@ -25,6 +25,8 @@
 import java.io.InputStream;
 import java.security.AccessController;
 import java.security.PrivilegedAction;
+import java.security.PrivilegedActionException;
+import java.security.PrivilegedExceptionAction;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -35,6 +37,7 @@
 import com.sun.org.apache.xml.internal.security.algorithms.JCEMapper;
 import com.sun.org.apache.xml.internal.security.algorithms.SignatureAlgorithm;
 import com.sun.org.apache.xml.internal.security.c14n.Canonicalizer;
+import com.sun.org.apache.xml.internal.security.exceptions.XMLSecurityException;
 import com.sun.org.apache.xml.internal.security.keys.keyresolver.KeyResolver;
 import com.sun.org.apache.xml.internal.security.transforms.Transform;
 import com.sun.org.apache.xml.internal.security.utils.ElementProxy;
@@ -118,43 +121,50 @@
             log.log(java.util.logging.Level.FINE, "Registering default algorithms");
         }
         try {
-            //
-            // Bind the default prefixes
-            //
-            ElementProxy.registerDefaultPrefixes();
+            AccessController.doPrivileged(new PrivilegedExceptionAction<Void>(){
+                @Override public Void run() throws XMLSecurityException {
+                    //
+                    // Bind the default prefixes
+                    //
+                    ElementProxy.registerDefaultPrefixes();
 
-            //
-            // Set the default Transforms
-            //
-            Transform.registerDefaultAlgorithms();
+                    //
+                    // Set the default Transforms
+                    //
+                    Transform.registerDefaultAlgorithms();
 
-            //
-            // Set the default signature algorithms
-            //
-            SignatureAlgorithm.registerDefaultAlgorithms();
+                    //
+                    // Set the default signature algorithms
+                    //
+                    SignatureAlgorithm.registerDefaultAlgorithms();
+
+                    //
+                    // Set the default JCE algorithms
+                    //
+                    JCEMapper.registerDefaultAlgorithms();
 
-            //
-            // Set the default JCE algorithms
-            //
-            JCEMapper.registerDefaultAlgorithms();
+                    //
+                    // Set the default c14n algorithms
+                    //
+                    Canonicalizer.registerDefaultAlgorithms();
 
-            //
-            // Set the default c14n algorithms
-            //
-            Canonicalizer.registerDefaultAlgorithms();
+                    //
+                    // Register the default resolvers
+                    //
+                    ResourceResolver.registerDefaultResolvers();
 
-            //
-            // Register the default resolvers
-            //
-            ResourceResolver.registerDefaultResolvers();
+                    //
+                    // Register the default key resolvers
+                    //
+                    KeyResolver.registerDefaultResolvers();
 
-            //
-            // Register the default key resolvers
-            //
-            KeyResolver.registerDefaultResolvers();
-        } catch (Exception ex) {
-            log.log(java.util.logging.Level.SEVERE, ex.getMessage(), ex);
-            ex.printStackTrace();
+                    return null;
+                }
+           });
+        } catch (PrivilegedActionException ex) {
+            XMLSecurityException xse = (XMLSecurityException)ex.getException();
+            log.log(java.util.logging.Level.SEVERE, xse.getMessage(), xse);
+            xse.printStackTrace();
         }
     }
 
--- a/src/share/classes/com/sun/org/apache/xml/internal/security/algorithms/JCEMapper.java	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/share/classes/com/sun/org/apache/xml/internal/security/algorithms/JCEMapper.java	Tue Nov 04 17:20:19 2014 +0000
@@ -27,6 +27,7 @@
 
 import com.sun.org.apache.xml.internal.security.encryption.XMLCipher;
 import com.sun.org.apache.xml.internal.security.signature.XMLSignature;
+import com.sun.org.apache.xml.internal.security.utils.JavaUtils;
 import org.w3c.dom.Element;
 
 
@@ -49,8 +50,11 @@
      *
      * @param id
      * @param algorithm
+     * @throws SecurityException if a security manager is installed and the
+     *    caller does not have permission to register the JCE algorithm
      */
     public static void register(String id, Algorithm algorithm) {
+        JavaUtils.checkRegisterPermission();
         algorithmsMap.put(id, algorithm);
     }
 
@@ -292,8 +296,11 @@
     /**
      * Sets the default Provider for obtaining the security algorithms
      * @param provider the default providerId.
+     * @throws SecurityException if a security manager is installed and the
+     *    caller does not have permission to set the JCE provider
      */
     public static void setProviderId(String provider) {
+        JavaUtils.checkRegisterPermission();
         providerName = provider;
     }
 
--- a/src/share/classes/com/sun/org/apache/xml/internal/security/algorithms/SignatureAlgorithm.java	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/share/classes/com/sun/org/apache/xml/internal/security/algorithms/SignatureAlgorithm.java	Tue Nov 04 17:20:19 2014 +0000
@@ -37,6 +37,7 @@
 import com.sun.org.apache.xml.internal.security.signature.XMLSignature;
 import com.sun.org.apache.xml.internal.security.signature.XMLSignatureException;
 import com.sun.org.apache.xml.internal.security.utils.Constants;
+import com.sun.org.apache.xml.internal.security.utils.JavaUtils;
 import org.w3c.dom.Attr;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
@@ -314,18 +315,21 @@
     }
 
     /**
-     * Registers implementing class of the Transform algorithm with algorithmURI
+     * Registers implementing class of the SignatureAlgorithm with algorithmURI
      *
-     * @param algorithmURI algorithmURI URI representation of <code>Transform algorithm</code>.
+     * @param algorithmURI algorithmURI URI representation of <code>SignatureAlgorithm</code>.
      * @param implementingClass <code>implementingClass</code> the implementing class of
      * {@link SignatureAlgorithmSpi}
      * @throws AlgorithmAlreadyRegisteredException if specified algorithmURI is already registered
      * @throws XMLSignatureException
+     * @throws SecurityException if a security manager is installed and the
+     *    caller does not have permission to register the signature algorithm
      */
     @SuppressWarnings("unchecked")
     public static void register(String algorithmURI, String implementingClass)
        throws AlgorithmAlreadyRegisteredException, ClassNotFoundException,
            XMLSignatureException {
+        JavaUtils.checkRegisterPermission();
         if (log.isLoggable(java.util.logging.Level.FINE)) {
             log.log(java.util.logging.Level.FINE, "Try to register " + algorithmURI + " " + implementingClass);
         }
@@ -352,15 +356,18 @@
     /**
      * Registers implementing class of the Transform algorithm with algorithmURI
      *
-     * @param algorithmURI algorithmURI URI representation of <code>Transform algorithm</code>.
+     * @param algorithmURI algorithmURI URI representation of <code>SignatureAlgorithm</code>.
      * @param implementingClass <code>implementingClass</code> the implementing class of
      * {@link SignatureAlgorithmSpi}
      * @throws AlgorithmAlreadyRegisteredException if specified algorithmURI is already registered
      * @throws XMLSignatureException
+     * @throws SecurityException if a security manager is installed and the
+     *    caller does not have permission to register the signature algorithm
      */
     public static void register(String algorithmURI, Class<? extends SignatureAlgorithmSpi> implementingClass)
        throws AlgorithmAlreadyRegisteredException, ClassNotFoundException,
            XMLSignatureException {
+        JavaUtils.checkRegisterPermission();
         if (log.isLoggable(java.util.logging.Level.FINE)) {
             log.log(java.util.logging.Level.FINE, "Try to register " + algorithmURI + " " + implementingClass);
         }
--- a/src/share/classes/com/sun/org/apache/xml/internal/security/c14n/Canonicalizer.java	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/share/classes/com/sun/org/apache/xml/internal/security/c14n/Canonicalizer.java	Tue Nov 04 17:20:19 2014 +0000
@@ -41,6 +41,7 @@
 import com.sun.org.apache.xml.internal.security.c14n.implementations.Canonicalizer20010315WithComments;
 import com.sun.org.apache.xml.internal.security.c14n.implementations.CanonicalizerPhysical;
 import com.sun.org.apache.xml.internal.security.exceptions.AlgorithmAlreadyRegisteredException;
+import com.sun.org.apache.xml.internal.security.utils.JavaUtils;
 import org.w3c.dom.Document;
 import org.w3c.dom.Node;
 import org.w3c.dom.NodeList;
@@ -142,10 +143,13 @@
      * @param algorithmURI
      * @param implementingClass
      * @throws AlgorithmAlreadyRegisteredException
+     * @throws SecurityException if a security manager is installed and the
+     *    caller does not have permission to register the canonicalizer
      */
     @SuppressWarnings("unchecked")
     public static void register(String algorithmURI, String implementingClass)
         throws AlgorithmAlreadyRegisteredException, ClassNotFoundException {
+        JavaUtils.checkRegisterPermission();
         // check whether URI is already registered
         Class<? extends CanonicalizerSpi> registeredClass =
             canonicalizerHash.get(algorithmURI);
@@ -166,9 +170,12 @@
      * @param algorithmURI
      * @param implementingClass
      * @throws AlgorithmAlreadyRegisteredException
+     * @throws SecurityException if a security manager is installed and the
+     *    caller does not have permission to register the canonicalizer
      */
-    public static void register(String algorithmURI, Class<CanonicalizerSpi> implementingClass)
+    public static void register(String algorithmURI, Class<? extends CanonicalizerSpi> implementingClass)
         throws AlgorithmAlreadyRegisteredException, ClassNotFoundException {
+        JavaUtils.checkRegisterPermission();
         // check whether URI is already registered
         Class<? extends CanonicalizerSpi> registeredClass = canonicalizerHash.get(algorithmURI);
 
--- a/src/share/classes/com/sun/org/apache/xml/internal/security/keys/keyresolver/KeyResolver.java	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/share/classes/com/sun/org/apache/xml/internal/security/keys/keyresolver/KeyResolver.java	Tue Nov 04 17:20:19 2014 +0000
@@ -42,6 +42,7 @@
 import com.sun.org.apache.xml.internal.security.keys.keyresolver.implementations.X509SKIResolver;
 import com.sun.org.apache.xml.internal.security.keys.keyresolver.implementations.X509SubjectNameResolver;
 import com.sun.org.apache.xml.internal.security.keys.storage.StorageResolver;
+import com.sun.org.apache.xml.internal.security.utils.JavaUtils;
 import org.w3c.dom.Element;
 import org.w3c.dom.Node;
 
@@ -175,9 +176,12 @@
      * @throws InstantiationException
      * @throws IllegalAccessException
      * @throws ClassNotFoundException
+     * @throws SecurityException if a security manager is installed and the
+     *    caller does not have permission to register the key resolver
      */
     public static void register(String className, boolean globalResolver)
         throws ClassNotFoundException, IllegalAccessException, InstantiationException {
+        JavaUtils.checkRegisterPermission();
         KeyResolverSpi keyResolverSpi =
             (KeyResolverSpi) Class.forName(className).newInstance();
         keyResolverSpi.setGlobalResolver(globalResolver);
@@ -195,8 +199,11 @@
      *
      * @param className
      * @param globalResolver Whether the KeyResolverSpi is a global resolver or not
+     * @throws SecurityException if a security manager is installed and the
+     *    caller does not have permission to register the key resolver
      */
     public static void registerAtStart(String className, boolean globalResolver) {
+        JavaUtils.checkRegisterPermission();
         KeyResolverSpi keyResolverSpi = null;
         Exception ex = null;
         try {
@@ -228,11 +235,14 @@
      *
      * @param keyResolverSpi a KeyResolverSpi instance to register
      * @param start whether to register the KeyResolverSpi at the start of the list or not
+     * @throws SecurityException if a security manager is installed and the
+     *    caller does not have permission to register the key resolver
      */
     public static void register(
         KeyResolverSpi keyResolverSpi,
         boolean start
     ) {
+        JavaUtils.checkRegisterPermission();
         KeyResolver resolver = new KeyResolver(keyResolverSpi);
         if (start) {
             resolverVector.add(0, resolver);
@@ -254,9 +264,12 @@
      * @throws InstantiationException
      * @throws IllegalAccessException
      * @throws ClassNotFoundException
+     * @throws SecurityException if a security manager is installed and the
+     *    caller does not have permission to register the key resolver
      */
     public static void registerClassNames(List<String> classNames)
         throws ClassNotFoundException, IllegalAccessException, InstantiationException {
+        JavaUtils.checkRegisterPermission();
         List<KeyResolver> keyResolverList = new ArrayList<KeyResolver>(classNames.size());
         for (String className : classNames) {
             KeyResolverSpi keyResolverSpi =
--- a/src/share/classes/com/sun/org/apache/xml/internal/security/transforms/Transform.java	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/share/classes/com/sun/org/apache/xml/internal/security/transforms/Transform.java	Tue Nov 04 17:20:19 2014 +0000
@@ -46,6 +46,7 @@
 import com.sun.org.apache.xml.internal.security.transforms.implementations.TransformXSLT;
 import com.sun.org.apache.xml.internal.security.utils.Constants;
 import com.sun.org.apache.xml.internal.security.utils.HelperNodeList;
+import com.sun.org.apache.xml.internal.security.utils.JavaUtils;
 import com.sun.org.apache.xml.internal.security.utils.SignatureElementProxy;
 import com.sun.org.apache.xml.internal.security.utils.XMLUtils;
 import org.w3c.dom.Document;
@@ -181,11 +182,14 @@
      * class of {@link TransformSpi}
      * @throws AlgorithmAlreadyRegisteredException if specified algorithmURI
      * is already registered
+     * @throws SecurityException if a security manager is installed and the
+     *    caller does not have permission to register the transform
      */
     @SuppressWarnings("unchecked")
     public static void register(String algorithmURI, String implementingClass)
         throws AlgorithmAlreadyRegisteredException, ClassNotFoundException,
             InvalidTransformException {
+        JavaUtils.checkRegisterPermission();
         // are we already registered?
         Class<? extends TransformSpi> transformSpi = transformSpiHash.get(algorithmURI);
         if (transformSpi != null) {
@@ -206,9 +210,12 @@
      * class of {@link TransformSpi}
      * @throws AlgorithmAlreadyRegisteredException if specified algorithmURI
      * is already registered
+     * @throws SecurityException if a security manager is installed and the
+     *    caller does not have permission to register the transform
      */
     public static void register(String algorithmURI, Class<? extends TransformSpi> implementingClass)
         throws AlgorithmAlreadyRegisteredException {
+        JavaUtils.checkRegisterPermission();
         // are we already registered?
         Class<? extends TransformSpi> transformSpi = transformSpiHash.get(algorithmURI);
         if (transformSpi != null) {
--- a/src/share/classes/com/sun/org/apache/xml/internal/security/utils/ElementProxy.java	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/share/classes/com/sun/org/apache/xml/internal/security/utils/ElementProxy.java	Tue Nov 04 17:20:19 2014 +0000
@@ -468,9 +468,12 @@
      * @param namespace
      * @param prefix
      * @throws XMLSecurityException
+     * @throws SecurityException if a security manager is installed and the
+     *    caller does not have permission to set the default prefix
      */
     public static void setDefaultPrefix(String namespace, String prefix)
         throws XMLSecurityException {
+        JavaUtils.checkRegisterPermission();
         if (prefixMappings.containsValue(prefix)) {
             String storedPrefix = prefixMappings.get(namespace);
             if (!storedPrefix.equals(prefix)) {
--- a/src/share/classes/com/sun/org/apache/xml/internal/security/utils/JavaUtils.java	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/share/classes/com/sun/org/apache/xml/internal/security/utils/JavaUtils.java	Tue Nov 04 17:20:19 2014 +0000
@@ -28,6 +28,7 @@
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
+import java.security.SecurityPermission;
 
 /**
  * A collection of different, general-purpose methods for JAVA-specific things
@@ -39,6 +40,10 @@
     private static java.util.logging.Logger log =
         java.util.logging.Logger.getLogger(JavaUtils.class.getName());
 
+    private static final SecurityPermission REGISTER_PERMISSION =
+        new SecurityPermission(
+            "com.sun.org.apache.xml.internal.security.register");
+
     private JavaUtils() {
         // we don't allow instantiation
     }
@@ -145,4 +150,21 @@
 
         return retBytes;
     }
+
+    /**
+     * Throws a {@code SecurityException} if a security manager is installed
+     * and the caller is not allowed to register an implementation of an
+     * algorithm, transform, or other security sensitive XML Signature function.
+     *
+     * @throws SecurityException if a security manager is installed and the
+     *    caller has not been granted the
+     *    {@literal "com.sun.org.apache.xml.internal.security.register"}
+     *    {@code SecurityPermission}
+     */
+    public static void checkRegisterPermission() {
+        SecurityManager sm = System.getSecurityManager();
+        if (sm != null) {
+            sm.checkPermission(REGISTER_PERMISSION);
+        }
+    }
 }
--- a/src/share/classes/com/sun/org/apache/xml/internal/security/utils/XMLUtils.java	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/share/classes/com/sun/org/apache/xml/internal/security/utils/XMLUtils.java	Tue Nov 04 17:20:19 2014 +0000
@@ -80,32 +80,44 @@
     /**
      * Set the prefix for the digital signature namespace
      * @param prefix the new prefix for the digital signature namespace
+     * @throws SecurityException if a security manager is installed and the
+     *    caller does not have permission to set the prefix
      */
     public static void setDsPrefix(String prefix) {
+        JavaUtils.checkRegisterPermission();
         dsPrefix = prefix;
     }
 
     /**
      * Set the prefix for the digital signature 1.1 namespace
      * @param prefix the new prefix for the digital signature 1.1 namespace
+     * @throws SecurityException if a security manager is installed and the
+     *    caller does not have permission to set the prefix
      */
     public static void setDs11Prefix(String prefix) {
+        JavaUtils.checkRegisterPermission();
         ds11Prefix = prefix;
     }
 
     /**
      * Set the prefix for the encryption namespace
      * @param prefix the new prefix for the encryption namespace
+     * @throws SecurityException if a security manager is installed and the
+     *    caller does not have permission to set the prefix
      */
     public static void setXencPrefix(String prefix) {
+        JavaUtils.checkRegisterPermission();
         xencPrefix = prefix;
     }
 
     /**
      * Set the prefix for the encryption namespace 1.1
      * @param prefix the new prefix for the encryption namespace 1.1
+     * @throws SecurityException if a security manager is installed and the
+     *    caller does not have permission to set the prefix
      */
     public static void setXenc11Prefix(String prefix) {
+        JavaUtils.checkRegisterPermission();
         xenc11Prefix = prefix;
     }
 
--- a/src/share/classes/com/sun/org/apache/xml/internal/security/utils/resolver/ResourceResolver.java	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/share/classes/com/sun/org/apache/xml/internal/security/utils/resolver/ResourceResolver.java	Tue Nov 04 17:20:19 2014 +0000
@@ -27,6 +27,7 @@
 import java.util.Map;
 
 import com.sun.org.apache.xml.internal.security.signature.XMLSignatureInput;
+import com.sun.org.apache.xml.internal.security.utils.JavaUtils;
 import com.sun.org.apache.xml.internal.security.utils.resolver.implementations.ResolverDirectHTTP;
 import com.sun.org.apache.xml.internal.security.utils.resolver.implementations.ResolverFragment;
 import com.sun.org.apache.xml.internal.security.utils.resolver.implementations.ResolverLocalFilesystem;
@@ -199,9 +200,12 @@
      * the class cannot be registered.
      *
      * @param className the name of the ResourceResolverSpi class to be registered
+     * @throws SecurityException if a security manager is installed and the
+     *    caller does not have permission to register a resource resolver
      */
     @SuppressWarnings("unchecked")
     public static void register(String className) {
+        JavaUtils.checkRegisterPermission();
         try {
             Class<ResourceResolverSpi> resourceResolverClass =
                 (Class<ResourceResolverSpi>) Class.forName(className);
@@ -216,9 +220,12 @@
      * list. This method logs a warning if the class cannot be registered.
      *
      * @param className the name of the ResourceResolverSpi class to be registered
+     * @throws SecurityException if a security manager is installed and the
+     *    caller does not have permission to register a resource resolver
      */
     @SuppressWarnings("unchecked")
     public static void registerAtStart(String className) {
+        JavaUtils.checkRegisterPermission();
         try {
             Class<ResourceResolverSpi> resourceResolverClass =
                 (Class<ResourceResolverSpi>) Class.forName(className);
@@ -233,8 +240,11 @@
      * cannot be registered.
      * @param className
      * @param start
+     * @throws SecurityException if a security manager is installed and the
+     *    caller does not have permission to register a resource resolver
      */
     public static void register(Class<? extends ResourceResolverSpi> className, boolean start) {
+        JavaUtils.checkRegisterPermission();
         try {
             ResourceResolverSpi resourceResolverSpi = className.newInstance();
             register(resourceResolverSpi, start);
@@ -250,8 +260,11 @@
      * cannot be registered.
      * @param resourceResolverSpi
      * @param start
+     * @throws SecurityException if a security manager is installed and the
+     *    caller does not have permission to register a resource resolver
      */
     public static void register(ResourceResolverSpi resourceResolverSpi, boolean start) {
+        JavaUtils.checkRegisterPermission();
         synchronized(resolverList) {
             if (start) {
                 resolverList.add(0, new ResourceResolver(resourceResolverSpi));
--- a/src/share/classes/com/sun/swing/internal/plaf/basic/resources/basic_ja.properties	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/share/classes/com/sun/swing/internal/plaf/basic/resources/basic_ja.properties	Tue Nov 04 17:20:19 2014 +0000
@@ -42,13 +42,13 @@
 FileChooser.renameErrorFileExists.textAndMnemonic={0}\u306E\u540D\u524D\u3092\u5909\u66F4\u3067\u304D\u307E\u305B\u3093: \u6307\u5B9A\u3057\u305F\u540D\u524D\u306E\u30D5\u30A1\u30A4\u30EB\u306F\u3059\u3067\u306B\u5B58\u5728\u3057\u307E\u3059\u3002\u5225\u306E\u30D5\u30A1\u30A4\u30EB\u540D\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002 
 FileChooser.acceptAllFileFilter.textAndMnemonic=\u3059\u3079\u3066\u306E\u30D5\u30A1\u30A4\u30EB
 FileChooser.cancelButton.textAndMnemonic=\u53D6\u6D88
-FileChooser.saveButton.textAndMnemonic=\u4FDD\u5B58
-FileChooser.openButton.textAndMnemonic=\u958B\u304F
+FileChooser.saveButton.textAndMnemonic=\u4FDD\u5B58(&S)
+FileChooser.openButton.textAndMnemonic=\u958B\u304F(&O)
 FileChooser.saveDialogTitle.textAndMnemonic=\u4FDD\u5B58
 FileChooser.openDialogTitle.textAndMnemonic=\u958B\u304F
 FileChooser.updateButton.textAndMnemonic=\u66F4\u65B0(&U)
 FileChooser.helpButton.textAndMnemonic=\u30D8\u30EB\u30D7(&H)
-FileChooser.directoryOpenButton.textAndMnemonic=\u958B\u304F
+FileChooser.directoryOpenButton.textAndMnemonic=\u958B\u304F(&O)
 
 # File Size Units
 FileChooser.fileSizeKiloBytes={0} KB
--- a/src/share/classes/com/sun/swing/internal/plaf/basic/resources/basic_ko.properties	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/share/classes/com/sun/swing/internal/plaf/basic/resources/basic_ko.properties	Tue Nov 04 17:20:19 2014 +0000
@@ -42,13 +42,13 @@
 FileChooser.renameErrorFileExists.textAndMnemonic={0}\uC758 \uC774\uB984\uC744 \uBC14\uAFC0 \uC218 \uC5C6\uC74C: \uC9C0\uC815\uD55C \uC774\uB984\uC744 \uC0AC\uC6A9\uD558\uB294 \uD30C\uC77C\uC774 \uC874\uC7AC\uD569\uB2C8\uB2E4. \uB2E4\uB978 \uD30C\uC77C \uC774\uB984\uC744 \uC9C0\uC815\uD558\uC2ED\uC2DC\uC624.
 FileChooser.acceptAllFileFilter.textAndMnemonic=\uBAA8\uB4E0 \uD30C\uC77C
 FileChooser.cancelButton.textAndMnemonic=\uCDE8\uC18C
-FileChooser.saveButton.textAndMnemonic=\uC800\uC7A5
-FileChooser.openButton.textAndMnemonic=\uC5F4\uAE30
+FileChooser.saveButton.textAndMnemonic=\uC800\uC7A5(&S)
+FileChooser.openButton.textAndMnemonic=\uC5F4\uAE30(&O)
 FileChooser.saveDialogTitle.textAndMnemonic=\uC800\uC7A5
 FileChooser.openDialogTitle.textAndMnemonic=\uC5F4\uAE30
 FileChooser.updateButton.textAndMnemonic=\uC5C5\uB370\uC774\uD2B8(&U)
 FileChooser.helpButton.textAndMnemonic=\uB3C4\uC6C0\uB9D0(&H)
-FileChooser.directoryOpenButton.textAndMnemonic=\uC5F4\uAE30
+FileChooser.directoryOpenButton.textAndMnemonic=\uC5F4\uAE30(&O)
 
 # File Size Units
 FileChooser.fileSizeKiloBytes={0} KB
--- a/src/share/classes/com/sun/swing/internal/plaf/basic/resources/basic_zh_CN.properties	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/share/classes/com/sun/swing/internal/plaf/basic/resources/basic_zh_CN.properties	Tue Nov 04 17:20:19 2014 +0000
@@ -42,13 +42,13 @@
 FileChooser.renameErrorFileExists.textAndMnemonic=\u65E0\u6CD5\u91CD\u547D\u540D{0}: \u5DF2\u5B58\u5728\u5177\u6709\u6240\u6307\u5B9A\u540D\u79F0\u7684\u6587\u4EF6\u3002\u8BF7\u6307\u5B9A\u5176\u4ED6\u6587\u4EF6\u540D\u3002
 FileChooser.acceptAllFileFilter.textAndMnemonic=\u6240\u6709\u6587\u4EF6
 FileChooser.cancelButton.textAndMnemonic=\u53D6\u6D88
-FileChooser.saveButton.textAndMnemonic=\u4FDD\u5B58
-FileChooser.openButton.textAndMnemonic=\u6253\u5F00
+FileChooser.saveButton.textAndMnemonic=\u4FDD\u5B58(&S)
+FileChooser.openButton.textAndMnemonic=\u6253\u5F00(&O)
 FileChooser.saveDialogTitle.textAndMnemonic=\u4FDD\u5B58
 FileChooser.openDialogTitle.textAndMnemonic=\u6253\u5F00
 FileChooser.updateButton.textAndMnemonic=\u66F4\u65B0(&U)
 FileChooser.helpButton.textAndMnemonic=\u5E2E\u52A9(&H)
-FileChooser.directoryOpenButton.textAndMnemonic=\u6253\u5F00
+FileChooser.directoryOpenButton.textAndMnemonic=\u6253\u5F00(&O)
 
 # File Size Units
 FileChooser.fileSizeKiloBytes={0} KB
--- a/src/share/classes/com/sun/swing/internal/plaf/basic/resources/basic_zh_TW.properties	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/share/classes/com/sun/swing/internal/plaf/basic/resources/basic_zh_TW.properties	Tue Nov 04 17:20:19 2014 +0000
@@ -42,13 +42,13 @@
 FileChooser.renameErrorFileExists.textAndMnemonic=\u7121\u6CD5\u91CD\u65B0\u547D\u540D {0}: \u5DF2\u7D93\u5B58\u5728\u60A8\u6240\u6307\u5B9A\u540D\u7A31\u7684\u6A94\u6848\u3002\u8ACB\u6307\u5B9A\u4E0D\u540C\u7684\u540D\u7A31\u3002
 FileChooser.acceptAllFileFilter.textAndMnemonic=\u6240\u6709\u6A94\u6848
 FileChooser.cancelButton.textAndMnemonic=\u53D6\u6D88
-FileChooser.saveButton.textAndMnemonic=\u5132\u5B58
-FileChooser.openButton.textAndMnemonic=\u958B\u555F
+FileChooser.saveButton.textAndMnemonic=\u5132\u5B58(&S)
+FileChooser.openButton.textAndMnemonic=\u958B\u555F(&O)
 FileChooser.saveDialogTitle.textAndMnemonic=\u5132\u5B58
 FileChooser.openDialogTitle.textAndMnemonic=\u958B\u555F
 FileChooser.updateButton.textAndMnemonic=\u66F4\u65B0(&U)
 FileChooser.helpButton.textAndMnemonic=\u8AAA\u660E(&H)
-FileChooser.directoryOpenButton.textAndMnemonic=\u958B\u555F
+FileChooser.directoryOpenButton.textAndMnemonic=\u958B\u555F(&O)
 
 # File Size Units
 FileChooser.fileSizeKiloBytes={0} KB
--- a/src/share/classes/com/sun/tools/example/debug/expr/LValue.java	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/share/classes/com/sun/tools/example/debug/expr/LValue.java	Tue Nov 04 17:20:19 2014 +0000
@@ -559,6 +559,9 @@
             } else if (refType instanceof ClassType) {
                 ClassType clazz = (ClassType)refType;
                 return jdiValue = clazz.invokeMethod(thread, matchingMethod, methodArguments, 0);
+            } else if (refType instanceof InterfaceType) {
+                InterfaceType iface = (InterfaceType)refType;
+                return jdiValue = iface.invokeMethod(thread, matchingMethod, methodArguments, 0);
             } else {
                 throw new InvalidTypeException("Cannot invoke static method on " +
                                          refType.name());
--- a/src/share/classes/com/sun/tools/jdi/ArrayTypeImpl.java	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/share/classes/com/sun/tools/jdi/ArrayTypeImpl.java	Tue Nov 04 17:20:19 2014 +0000
@@ -31,6 +31,7 @@
 import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.Map;
+import java.util.Set;
 
 public class ArrayTypeImpl extends ReferenceTypeImpl
     implements ArrayType
@@ -61,7 +62,8 @@
         return findType(componentSignature());
     }
 
-    void addVisibleMethods(Map<String, Method> map) {
+    @Override
+    void addVisibleMethods(Map<String, Method> map, Set<InterfaceType> seenInterfaces) {
         // arrays don't have methods
     }
 
--- a/src/share/classes/com/sun/tools/jdi/ClassTypeImpl.java	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/share/classes/com/sun/tools/jdi/ClassTypeImpl.java	Tue Nov 04 17:20:19 2014 +0000
@@ -29,9 +29,27 @@
 
 import java.util.*;
 
-public class ClassTypeImpl extends ReferenceTypeImpl
+final public class ClassTypeImpl extends InvokableTypeImpl
     implements ClassType
 {
+    private static class IResult implements InvocationResult {
+        final private JDWP.ClassType.InvokeMethod rslt;
+
+        public IResult(JDWP.ClassType.InvokeMethod rslt) {
+            this.rslt = rslt;
+        }
+
+        @Override
+        public ObjectReferenceImpl getException() {
+            return rslt.exception;
+        }
+
+        @Override
+        public ValueImpl getResult() {
+            return rslt.returnValue;
+        }
+    }
+
     private boolean cachedSuperclass = false;
     private ClassType superclass = null;
     private int lastLine = -1;
@@ -65,6 +83,7 @@
         return superclass;
     }
 
+    @Override
     public List<InterfaceType> interfaces()  {
         if (interfaces == null) {
             interfaces = getInterfaces();
@@ -72,26 +91,9 @@
         return interfaces;
     }
 
-    void addInterfaces(List<InterfaceType> list) {
-        List<InterfaceType> immediate = interfaces();
-        list.addAll(interfaces());
-
-        Iterator<InterfaceType> iter = immediate.iterator();
-        while (iter.hasNext()) {
-            InterfaceTypeImpl interfaze = (InterfaceTypeImpl)iter.next();
-            interfaze.addSuperinterfaces(list);
-        }
-
-        ClassTypeImpl superclass = (ClassTypeImpl)superclass();
-        if (superclass != null) {
-            superclass.addInterfaces(list);
-        }
-    }
-
-    public List<InterfaceType> allInterfaces()  {
-        List<InterfaceType> all = new ArrayList<InterfaceType>();
-        addInterfaces(all);
-        return all;
+    @Override
+    public List<InterfaceType> allInterfaces() {
+        return getAllInterfaces();
     }
 
     public List<ClassType> subclasses() {
@@ -159,28 +161,6 @@
         }
     }
 
-    PacketStream sendInvokeCommand(final ThreadReferenceImpl thread,
-                                   final MethodImpl method,
-                                   final ValueImpl[] args,
-                                   final int options) {
-        CommandSender sender =
-            new CommandSender() {
-                public PacketStream send() {
-                    return JDWP.ClassType.InvokeMethod.enqueueCommand(
-                                          vm, ClassTypeImpl.this, thread,
-                                          method.ref(), args, options);
-                }
-        };
-
-        PacketStream stream;
-        if ((options & INVOKE_SINGLE_THREADED) != 0) {
-            stream = thread.sendResumingCommand(sender);
-        } else {
-            stream = vm.sendResumingCommand(sender);
-        }
-        return stream;
-    }
-
     PacketStream sendNewInstanceCommand(final ThreadReferenceImpl thread,
                                    final MethodImpl method,
                                    final ValueImpl[] args,
@@ -203,52 +183,6 @@
         return stream;
     }
 
-    public Value invokeMethod(ThreadReference threadIntf, Method methodIntf,
-                              List<? extends Value> origArguments, int options)
-                                   throws InvalidTypeException,
-                                          ClassNotLoadedException,
-                                          IncompatibleThreadStateException,
-                                          InvocationException {
-        validateMirror(threadIntf);
-        validateMirror(methodIntf);
-        validateMirrorsOrNulls(origArguments);
-
-        MethodImpl method = (MethodImpl)methodIntf;
-        ThreadReferenceImpl thread = (ThreadReferenceImpl)threadIntf;
-
-        validateMethodInvocation(method);
-
-        List<? extends Value> arguments = method.validateAndPrepareArgumentsForInvoke(origArguments);
-
-        ValueImpl[] args = arguments.toArray(new ValueImpl[0]);
-        JDWP.ClassType.InvokeMethod ret;
-        try {
-            PacketStream stream =
-                sendInvokeCommand(thread, method, args, options);
-            ret = JDWP.ClassType.InvokeMethod.waitForReply(vm, stream);
-        } catch (JDWPException exc) {
-            if (exc.errorCode() == JDWP.Error.INVALID_THREAD) {
-                throw new IncompatibleThreadStateException();
-            } else {
-                throw exc.toJDIException();
-            }
-        }
-
-        /*
-         * There is an implict VM-wide suspend at the conclusion
-         * of a normal (non-single-threaded) method invoke
-         */
-        if ((options & INVOKE_SINGLE_THREADED) == 0) {
-            vm.notifySuspend();
-        }
-
-        if (ret.exception != null) {
-            throw new InvocationException(ret.exception);
-        } else {
-            return ret.returnValue;
-        }
-    }
-
     public ObjectReference newInstance(ThreadReference threadIntf,
                                        Method methodIntf,
                                        List<? extends Value> origArguments,
@@ -311,58 +245,6 @@
        return method;
    }
 
-   public List<Method> allMethods() {
-        ArrayList<Method> list = new ArrayList<Method>(methods());
-
-        ClassType clazz = superclass();
-        while (clazz != null) {
-            list.addAll(clazz.methods());
-            clazz = clazz.superclass();
-        }
-
-        /*
-         * Avoid duplicate checking on each method by iterating through
-         * duplicate-free allInterfaces() rather than recursing
-         */
-        for (InterfaceType interfaze : allInterfaces()) {
-            list.addAll(interfaze.methods());
-        }
-
-        return list;
-    }
-
-    List<ReferenceType> inheritedTypes() {
-        List<ReferenceType> inherited = new ArrayList<ReferenceType>();
-        if (superclass() != null) {
-            inherited.add(0, (ReferenceType)superclass()); /* insert at front */
-        }
-        for (ReferenceType rt : interfaces()) {
-            inherited.add(rt);
-        }
-        return inherited;
-    }
-
-    void validateMethodInvocation(Method method)
-                                   throws InvalidTypeException,
-                                          InvocationException {
-        /*
-         * Method must be in this class or a superclass.
-         */
-        ReferenceTypeImpl declType = (ReferenceTypeImpl)method.declaringType();
-        if (!declType.isAssignableFrom(this)) {
-            throw new IllegalArgumentException("Invalid method");
-        }
-
-        /*
-         * Method must be a static and not a static initializer
-         */
-        if (!method.isStatic()) {
-            throw new IllegalArgumentException("Cannot invoke instance method on a class type");
-        } else if (method.isStaticInitializer()) {
-            throw new IllegalArgumentException("Cannot invoke static initializer");
-        }
-    }
-
     void validateConstructorInvocation(Method method)
                                    throws InvalidTypeException,
                                           InvocationException {
@@ -382,47 +264,33 @@
         }
     }
 
-    void addVisibleMethods(Map<String, Method> methodMap) {
-        /*
-         * Add methods from
-         * parent types first, so that the methods in this class will
-         * overwrite them in the hash table
-         */
-
-        Iterator<InterfaceType> iter = interfaces().iterator();
-        while (iter.hasNext()) {
-            InterfaceTypeImpl interfaze = (InterfaceTypeImpl)iter.next();
-            interfaze.addVisibleMethods(methodMap);
-        }
-
-        ClassTypeImpl clazz = (ClassTypeImpl)superclass();
-        if (clazz != null) {
-            clazz.addVisibleMethods(methodMap);
-        }
-
-        addToMethodMap(methodMap, methods());
-    }
-
-    boolean isAssignableTo(ReferenceType type) {
-        ClassTypeImpl superclazz = (ClassTypeImpl)superclass();
-        if (this.equals(type)) {
-            return true;
-        } else if ((superclazz != null) && superclazz.isAssignableTo(type)) {
-            return true;
-        } else {
-            List<InterfaceType> interfaces = interfaces();
-            Iterator<InterfaceType> iter = interfaces.iterator();
-            while (iter.hasNext()) {
-                InterfaceTypeImpl interfaze = (InterfaceTypeImpl)iter.next();
-                if (interfaze.isAssignableTo(type)) {
-                    return true;
-                }
-            }
-            return false;
-        }
-    }
 
     public String toString() {
        return "class " + name() + " (" + loaderString() + ")";
     }
+
+    @Override
+    CommandSender getInvokeMethodSender(ThreadReferenceImpl thread,
+                                        MethodImpl method,
+                                        ValueImpl[] args,
+                                        int options) {
+        return () ->
+            JDWP.ClassType.InvokeMethod.enqueueCommand(vm,
+                                                       ClassTypeImpl.this,
+                                                       thread,
+                                                       method.ref(),
+                                                       args,
+                                                       options);
+    }
+
+    @Override
+    InvocationResult waitForReply(PacketStream stream) throws JDWPException {
+        return new IResult(JDWP.ClassType.InvokeMethod.waitForReply(vm, stream));
+    }
+
+    @Override
+    boolean canInvoke(Method method) {
+        // Method must be in this class or a superclass.
+        return ((ReferenceTypeImpl)method.declaringType()).isAssignableFrom(this);
+    }
 }
--- a/src/share/classes/com/sun/tools/jdi/InterfaceTypeImpl.java	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/share/classes/com/sun/tools/jdi/InterfaceTypeImpl.java	Tue Nov 04 17:20:19 2014 +0000
@@ -29,13 +29,31 @@
 
 import java.util.List;
 import java.util.ArrayList;
-import java.util.Map;
-import java.util.Iterator;
 import java.util.Collections;
+import java.util.Set;
 import java.lang.ref.SoftReference;
 
-public class InterfaceTypeImpl extends ReferenceTypeImpl
-                               implements InterfaceType {
+final public class InterfaceTypeImpl extends InvokableTypeImpl
+                                     implements InterfaceType {
+
+    private static class IResult implements InvocationResult {
+        final private JDWP.InterfaceType.InvokeMethod rslt;
+
+        public IResult(JDWP.InterfaceType.InvokeMethod rslt) {
+            this.rslt = rslt;
+        }
+
+        @Override
+        public ObjectReferenceImpl getException() {
+            return rslt.exception;
+        }
+
+        @Override
+        public ValueImpl getResult() {
+            return rslt.returnValue;
+        }
+
+    }
 
     private SoftReference<List<InterfaceType>> superinterfacesRef = null;
 
@@ -80,98 +98,6 @@
         return implementors;
     }
 
-    void addVisibleMethods(Map<String, Method> methodMap) {
-        /*
-         * Add methods from
-         * parent types first, so that the methods in this class will
-         * overwrite them in the hash table
-         */
-
-        for (InterfaceType interfaze : superinterfaces()) {
-            ((InterfaceTypeImpl)interfaze).addVisibleMethods(methodMap);
-        }
-
-        addToMethodMap(methodMap, methods());
-    }
-
-    public List<Method> allMethods() {
-        ArrayList<Method> list = new ArrayList<Method>(methods());
-
-        /*
-         * It's more efficient if don't do this
-         * recursively.
-         */
-        for (InterfaceType interfaze : allSuperinterfaces()) {
-            list.addAll(interfaze.methods());
-        }
-
-        return list;
-    }
-
-    List<InterfaceType> allSuperinterfaces() {
-        ArrayList<InterfaceType> list = new ArrayList<InterfaceType>();
-        addSuperinterfaces(list);
-        return list;
-    }
-
-    void addSuperinterfaces(List<InterfaceType> list) {
-        /*
-         * This code is a little strange because it
-         * builds the list with a more suitable order than the
-         * depth-first approach a normal recursive solution would
-         * take. Instead, all direct superinterfaces precede all
-         * indirect ones.
-         */
-
-        /*
-         * Get a list of direct superinterfaces that's not already in the
-         * list being built.
-         */
-        List<InterfaceType> immediate = new ArrayList<InterfaceType>(superinterfaces());
-        Iterator<InterfaceType> iter = immediate.iterator();
-        while (iter.hasNext()) {
-            InterfaceType interfaze = iter.next();
-            if (list.contains(interfaze)) {
-                iter.remove();
-            }
-        }
-
-        /*
-         * Add all new direct superinterfaces
-         */
-        list.addAll(immediate);
-
-        /*
-         * Recurse for all new direct superinterfaces.
-         */
-        iter = immediate.iterator();
-        while (iter.hasNext()) {
-            InterfaceTypeImpl interfaze = (InterfaceTypeImpl)iter.next();
-            interfaze.addSuperinterfaces(list);
-        }
-    }
-
-    boolean isAssignableTo(ReferenceType type) {
-
-        // Exact match?
-        if (this.equals(type)) {
-            return true;
-        } else {
-            // Try superinterfaces.
-            for (InterfaceType interfaze : superinterfaces()) {
-                if (((InterfaceTypeImpl)interfaze).isAssignableTo(type)) {
-                    return true;
-                }
-            }
-
-            return false;
-        }
-    }
-
-    List<InterfaceType> inheritedTypes() {
-        return superinterfaces();
-    }
-
     public boolean isInitialized() {
         return isPrepared();
     }
@@ -179,4 +105,39 @@
     public String toString() {
        return "interface " + name() + " (" + loaderString() + ")";
     }
-}
+
+    @Override
+    InvocationResult waitForReply(PacketStream stream) throws JDWPException {
+        return new IResult(JDWP.InterfaceType.InvokeMethod.waitForReply(vm, stream));
+    }
+
+    @Override
+    CommandSender getInvokeMethodSender(final ThreadReferenceImpl thread,
+                                        final MethodImpl method,
+                                        final ValueImpl[] args,
+                                        final int options) {
+        return () ->
+            JDWP.InterfaceType.InvokeMethod.enqueueCommand(vm,
+                                                           InterfaceTypeImpl.this,
+                                                           thread,
+                                                           method.ref(),
+                                                           args,
+                                                           options);
+    }
+
+    @Override
+    ClassType superclass() {
+        return null;
+    }
+
+    @Override
+    List<InterfaceType> interfaces() {
+        return superinterfaces();
+    }
+
+    @Override
+    boolean canInvoke(Method method) {
+        // method must be directly in this interface
+        return this.equals(method.declaringType());
+    }
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/share/classes/com/sun/tools/jdi/InvokableTypeImpl.java	Tue Nov 04 17:20:19 2014 +0000
@@ -0,0 +1,305 @@
+/*
+ * Copyright (c) 2014, 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 com.sun.tools.jdi;
+
+import com.sun.jdi.ClassNotLoadedException;
+import com.sun.jdi.ClassType;
+import com.sun.jdi.IncompatibleThreadStateException;
+import com.sun.jdi.InterfaceType;
+import com.sun.jdi.InvalidTypeException;
+import com.sun.jdi.InvocationException;
+import com.sun.jdi.Method;
+import com.sun.jdi.ReferenceType;
+import com.sun.jdi.ThreadReference;
+import com.sun.jdi.Value;
+import com.sun.jdi.VirtualMachine;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * A supertype for ReferenceTypes allowing method invocations
+ */
+abstract class InvokableTypeImpl extends ReferenceTypeImpl {
+    /**
+     * The invocation result wrapper
+     * It is necessary because both ClassType and InterfaceType
+     * use their own type to represent the invocation result
+     */
+    static interface InvocationResult {
+        ObjectReferenceImpl getException();
+        ValueImpl getResult();
+    }
+
+    InvokableTypeImpl(VirtualMachine aVm, long aRef) {
+        super(aVm, aRef);
+    }
+
+    /**
+     * Method invocation support.
+     * Shared by ClassType and InterfaceType
+     * @param threadIntf the thread in which to invoke.
+     * @param methodIntf method the {@link Method} to invoke.
+     * @param origArguments the list of {@link Value} arguments bound to the
+     * invoked method. Values from the list are assigned to arguments
+     * in the order they appear in the method signature.
+     * @param options the integer bit flag options.
+     * @return a {@link Value} mirror of the invoked method's return value.
+     * @throws java.lang.IllegalArgumentException if the method is not
+     * a member of this type, if the size of the argument list
+     * does not match the number of declared arguments for the method, or
+     * if the method is not static or is a static initializer.
+     * @throws {@link InvalidTypeException} if any argument in the
+     * argument list is not assignable to the corresponding method argument
+     * type.
+     * @throws ClassNotLoadedException if any argument type has not yet been loaded
+     * through the appropriate class loader.
+     * @throws IncompatibleThreadStateException if the specified thread has not
+     * been suspended by an event.
+     * @throws InvocationException if the method invocation resulted in
+     * an exception in the target VM.
+     * @throws InvalidTypeException If the arguments do not meet this requirement --
+     *         Object arguments must be assignment compatible with the argument
+     *         type.  This implies that the argument type must be
+     *         loaded through the enclosing class's class loader.
+     *         Primitive arguments must be either assignment compatible with the
+     *         argument type or must be convertible to the argument type without loss
+     *         of information. See JLS section 5.2 for more information on assignment
+     *         compatibility.
+     * @throws VMCannotBeModifiedException if the VirtualMachine is read-only - see {@link VirtualMachine#canBeModified()}.
+     */
+    final public Value invokeMethod(ThreadReference threadIntf, Method methodIntf,
+                                    List<? extends Value> origArguments, int options)
+                                        throws InvalidTypeException,
+                                               ClassNotLoadedException,
+                                               IncompatibleThreadStateException,
+                                               InvocationException {
+        validateMirror(threadIntf);
+        validateMirror(methodIntf);
+        validateMirrorsOrNulls(origArguments);
+        MethodImpl method = (MethodImpl) methodIntf;
+        ThreadReferenceImpl thread = (ThreadReferenceImpl) threadIntf;
+        validateMethodInvocation(method);
+        List<? extends Value> arguments = method.validateAndPrepareArgumentsForInvoke(origArguments);
+        ValueImpl[] args = arguments.toArray(new ValueImpl[0]);
+        InvocationResult ret;
+        try {
+            PacketStream stream = sendInvokeCommand(thread, method, args, options);
+            ret = waitForReply(stream);
+        } catch (JDWPException exc) {
+            if (exc.errorCode() == JDWP.Error.INVALID_THREAD) {
+                throw new IncompatibleThreadStateException();
+            } else {
+                throw exc.toJDIException();
+            }
+        }
+        /*
+         * There is an implict VM-wide suspend at the conclusion
+         * of a normal (non-single-threaded) method invoke
+         */
+        if ((options & ClassType.INVOKE_SINGLE_THREADED) == 0) {
+            vm.notifySuspend();
+        }
+        if (ret.getException() != null) {
+            throw new InvocationException(ret.getException());
+        } else {
+            return ret.getResult();
+        }
+    }
+
+    @Override
+    boolean isAssignableTo(ReferenceType type) {
+        ClassTypeImpl superclazz = (ClassTypeImpl) superclass();
+        if (this.equals(type)) {
+            return true;
+        } else if ((superclazz != null) && superclazz.isAssignableTo(type)) {
+            return true;
+        } else {
+            List<InterfaceType> interfaces = interfaces();
+            Iterator<InterfaceType> iter = interfaces.iterator();
+            while (iter.hasNext()) {
+                InterfaceTypeImpl interfaze = (InterfaceTypeImpl) iter.next();
+                if (interfaze.isAssignableTo(type)) {
+                    return true;
+                }
+            }
+            return false;
+        }
+    }
+
+    @Override
+    final void addVisibleMethods(Map<String, Method> methodMap, Set<InterfaceType> seenInterfaces) {
+        /*
+         * Add methods from
+         * parent types first, so that the methods in this class will
+         * overwrite them in the hash table
+         */
+        Iterator<InterfaceType> iter = interfaces().iterator();
+        while (iter.hasNext()) {
+            InterfaceTypeImpl interfaze = (InterfaceTypeImpl) iter.next();
+            if (!seenInterfaces.contains(interfaze)) {
+                interfaze.addVisibleMethods(methodMap, seenInterfaces);
+                seenInterfaces.add(interfaze);
+            }
+        }
+        ClassTypeImpl clazz = (ClassTypeImpl) superclass();
+        if (clazz != null) {
+            clazz.addVisibleMethods(methodMap, seenInterfaces);
+        }
+        addToMethodMap(methodMap, methods());
+    }
+
+    final void addInterfaces(List<InterfaceType> list) {
+        List<InterfaceType> immediate = interfaces();
+        list.addAll(interfaces());
+        Iterator<InterfaceType> iter = immediate.iterator();
+        while (iter.hasNext()) {
+            InterfaceTypeImpl interfaze = (InterfaceTypeImpl) iter.next();
+            interfaze.addInterfaces(list);
+        }
+        ClassTypeImpl superclass = (ClassTypeImpl) superclass();
+        if (superclass != null) {
+            superclass.addInterfaces(list);
+        }
+    }
+
+    /**
+     * Returns all the implemented interfaces recursively
+     * @return A list of all the implemented interfaces (recursively)
+     */
+    final List<InterfaceType> getAllInterfaces() {
+        List<InterfaceType> all = new ArrayList<>();
+        addInterfaces(all);
+        return all;
+    }
+
+    /**
+     * Shared implementation of {@linkplain ClassType#allMethods()} and
+     * {@linkplain InterfaceType#allMethods()}
+     * @return A list of all methods (recursively)
+     */
+    public final List<Method> allMethods() {
+        ArrayList<Method> list = new ArrayList<>(methods());
+        ClassType clazz = superclass();
+        while (clazz != null) {
+            list.addAll(clazz.methods());
+            clazz = clazz.superclass();
+        }
+        /*
+         * Avoid duplicate checking on each method by iterating through
+         * duplicate-free allInterfaces() rather than recursing
+         */
+        for (InterfaceType interfaze : getAllInterfaces()) {
+            list.addAll(interfaze.methods());
+        }
+        return list;
+    }
+
+    @Override
+    final List<ReferenceType> inheritedTypes() {
+        List<ReferenceType> inherited = new ArrayList<>();
+        if (superclass() != null) {
+            inherited.add(0, superclass()); /* insert at front */
+        }
+        for (ReferenceType rt : interfaces()) {
+            inherited.add(rt);
+        }
+        return inherited;
+    }
+
+    private PacketStream sendInvokeCommand(final ThreadReferenceImpl thread,
+                                           final MethodImpl method,
+                                           final ValueImpl[] args,
+                                           final int options) {
+        CommandSender sender = getInvokeMethodSender(thread, method, args, options);
+        PacketStream stream;
+        if ((options & ClassType.INVOKE_SINGLE_THREADED) != 0) {
+            stream = thread.sendResumingCommand(sender);
+        } else {
+            stream = vm.sendResumingCommand(sender);
+        }
+        return stream;
+    }
+
+    private void validateMethodInvocation(Method method)
+                                            throws InvalidTypeException,
+                                                   InvocationException {
+        if (!canInvoke(method)) {
+            throw new IllegalArgumentException("Invalid method");
+        }
+        /*
+         * Method must be a static and not a static initializer
+         */
+        if (!method.isStatic()) {
+            throw new IllegalArgumentException("Cannot invoke instance method on a class/interface type");
+        } else if (method.isStaticInitializer()) {
+            throw new IllegalArgumentException("Cannot invoke static initializer");
+        }
+    }
+
+    /**
+     * A subclass will provide specific {@linkplain CommandSender}
+     * @param thread the current invocation thread
+     * @param method the method to invoke
+     * @param args the arguments to pass to the method
+     * @param options the integer bit flag options
+     * @return the specific {@literal CommandSender} instance
+     */
+    abstract CommandSender getInvokeMethodSender(ThreadReferenceImpl thread,
+                                                 MethodImpl method,
+                                                 ValueImpl[] args,
+                                                 int options);
+
+    /**
+     * Waits for the reply to the last sent command
+     * @param stream the stream to listen for the reply on
+     * @return the {@linkplain InvocationResult} instance
+     * @throws JDWPException when something goes wrong in JDWP
+     */
+    abstract InvocationResult waitForReply(PacketStream stream) throws JDWPException;
+
+    /**
+     * Get the {@linkplain ReferenceType} superclass
+     * @return the superclass or null
+     */
+    abstract ClassType superclass();
+
+    /**
+     * Get the implemented/extended interfaces
+     * @return the list of implemented/extended interfaces
+     */
+    abstract List<InterfaceType> interfaces();
+
+    /**
+     * Checks the provided method whether it can be invoked
+     * @param method the method to check
+     * @return {@code TRUE} if the implementation knows how to invoke the method,
+     *         {@code FALSE} otherwise
+     */
+    abstract boolean canInvoke(Method method);
+}
--- a/src/share/classes/com/sun/tools/jdi/MethodImpl.java	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/share/classes/com/sun/tools/jdi/MethodImpl.java	Tue Nov 04 17:20:19 2014 +0000
@@ -187,6 +187,13 @@
         return isModifierSet(VMModifiers.ABSTRACT);
     }
 
+    public boolean isDefault() {
+        return !isModifierSet(VMModifiers.ABSTRACT) &&
+               !isModifierSet(VMModifiers.STATIC) &&
+               !isModifierSet(VMModifiers.PRIVATE) &&
+               declaringType() instanceof InterfaceType;
+    }
+
     public boolean isSynchronized() {
         return isModifierSet(VMModifiers.SYNCHRONIZED);
     }
--- a/src/share/classes/com/sun/tools/jdi/ObjectReferenceImpl.java	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/share/classes/com/sun/tools/jdi/ObjectReferenceImpl.java	Tue Nov 04 17:20:19 2014 +0000
@@ -277,7 +277,6 @@
     void validateMethodInvocation(Method method, int options)
                                          throws InvalidTypeException,
                                          InvocationException {
-
         /*
          * Method must be in this object's class, a superclass, or
          * implemented interface
@@ -287,6 +286,19 @@
             throw new IllegalArgumentException("Invalid method");
         }
 
+        if (declType instanceof ClassTypeImpl) {
+            validateClassMethodInvocation(method, options);
+        } else if (declType instanceof InterfaceTypeImpl) {
+            validateIfaceMethodInvocation(method, options);
+        } else {
+            throw new InvalidTypeException();
+        }
+    }
+
+    void validateClassMethodInvocation(Method method, int options)
+                                         throws InvalidTypeException,
+                                         InvocationException {
+
         ClassTypeImpl clazz = invokableReferenceType(method);
 
         /*
@@ -300,9 +312,7 @@
          * For nonvirtual invokes, method must have a body
          */
         if ((options & INVOKE_NONVIRTUAL) != 0) {
-            if (method.declaringType() instanceof InterfaceType) {
-                throw new IllegalArgumentException("Interface method");
-            } else if (method.isAbstract()) {
+            if (method.isAbstract()) {
                 throw new IllegalArgumentException("Abstract method");
             }
         }
@@ -324,7 +334,7 @@
              */
             Method invoker = clazz.concreteMethodByName(method.name(),
                                                         method.signature());
-            //  isAssignableFrom check above guarantees non-null
+            //  invoker is supposed to be non-null under normal circumstances
             invokedClass = (ClassTypeImpl)invoker.declaringType();
         }
         /* The above code is left over from previous versions.
@@ -332,6 +342,17 @@
          */
     }
 
+    void validateIfaceMethodInvocation(Method method, int options)
+                                         throws InvalidTypeException,
+                                         InvocationException {
+        /*
+         * Only default methods allowed for nonvirtual invokes
+         */
+        if (!method.isDefault()) {
+            throw new IllegalArgumentException("Not a default method");
+        }
+    }
+
     PacketStream sendInvokeCommand(final ThreadReferenceImpl thread,
                                    final ClassTypeImpl refType,
                                    final MethodImpl method,
@@ -370,7 +391,10 @@
         ThreadReferenceImpl thread = (ThreadReferenceImpl)threadIntf;
 
         if (method.isStatic()) {
-            if (referenceType() instanceof ClassType) {
+            if (referenceType() instanceof InterfaceType) {
+                InterfaceType type = (InterfaceType)referenceType();
+                return type.invokeMethod(thread, method, origArguments, options);
+            } else if (referenceType() instanceof ClassType) {
                 ClassType type = (ClassType)referenceType();
                 return type.invokeMethod(thread, method, origArguments, options);
             } else {
--- a/src/share/classes/com/sun/tools/jdi/ReferenceTypeImpl.java	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/share/classes/com/sun/tools/jdi/ReferenceTypeImpl.java	Tue Nov 04 17:20:19 2014 +0000
@@ -511,7 +511,7 @@
             methodMap.put(method.name().concat(method.signature()), method);
         }
 
-    abstract void addVisibleMethods(Map<String, Method> methodMap);
+    abstract void addVisibleMethods(Map<String, Method> methodMap, Set<InterfaceType> seenInterfaces);
 
     public List<Method> visibleMethods() {
         /*
@@ -520,7 +520,7 @@
          * concatenation of name and signature.
          */
         Map<String, Method> map = new HashMap<String, Method>();
-        addVisibleMethods(map);
+        addVisibleMethods(map, new HashSet<InterfaceType>());
 
         /*
          * ... but the hash map destroys order. Methods should be
--- a/src/share/classes/com/sun/tools/jdi/VirtualMachineManagerImpl.java	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/share/classes/com/sun/tools/jdi/VirtualMachineManagerImpl.java	Tue Nov 04 17:20:19 2014 +0000
@@ -48,7 +48,7 @@
     private ResourceBundle messages = null;
     private int vmSequenceNumber = 0;
     private static final int majorVersion = 1;
-    private static final int minorVersion = 6;
+    private static final int minorVersion = 8;
 
     private static final Object lock = new Object();
     private static VirtualMachineManagerImpl vmm;
--- a/src/share/classes/java/awt/Container.java	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/share/classes/java/awt/Container.java	Tue Nov 04 17:20:19 2014 +0000
@@ -3687,7 +3687,7 @@
     private void writeObject(ObjectOutputStream s) throws IOException {
         ObjectOutputStream.PutField f = s.putFields();
         f.put("ncomponents", component.size());
-        f.put("component", getComponentsSync());
+        f.put("component", component.toArray(EMPTY_ARRAY));
         f.put("layoutMgr", layoutMgr);
         f.put("dispatcher", dispatcher);
         f.put("maxSize", maxSize);
--- a/src/share/classes/java/lang/Class.java	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/share/classes/java/lang/Class.java	Tue Nov 04 17:20:19 2014 +0000
@@ -260,8 +260,8 @@
     @CallerSensitive
     public static Class<?> forName(String className)
                 throws ClassNotFoundException {
-        return forName0(className, true,
-                        ClassLoader.getClassLoader(Reflection.getCallerClass()));
+        Class<?> caller = Reflection.getCallerClass();
+        return forName0(className, true, ClassLoader.getClassLoader(caller), caller);
     }
 
 
@@ -331,22 +331,27 @@
                                    ClassLoader loader)
         throws ClassNotFoundException
     {
-        if (sun.misc.VM.isSystemDomainLoader(loader)) {
-            SecurityManager sm = System.getSecurityManager();
-            if (sm != null) {
-                ClassLoader ccl = ClassLoader.getClassLoader(Reflection.getCallerClass());
+        Class<?> caller = null;
+        SecurityManager sm = System.getSecurityManager();
+        if (sm != null) {
+            // Reflective call to get caller class is only needed if a security manager
+            // is present.  Avoid the overhead of making this call otherwise.
+            caller = Reflection.getCallerClass();
+            if (sun.misc.VM.isSystemDomainLoader(loader)) {
+                ClassLoader ccl = ClassLoader.getClassLoader(caller);
                 if (!sun.misc.VM.isSystemDomainLoader(ccl)) {
                     sm.checkPermission(
                         SecurityConstants.GET_CLASSLOADER_PERMISSION);
                 }
             }
         }
-        return forName0(name, initialize, loader);
+        return forName0(name, initialize, loader, caller);
     }
 
-    /** Called after security checks have been made. */
+    /** Called after security check for system loader access checks have been made. */
     private static native Class<?> forName0(String name, boolean initialize,
-                                            ClassLoader loader)
+                                            ClassLoader loader,
+                                            Class<?> caller)
         throws ClassNotFoundException;
 
     /**
--- a/src/share/classes/java/lang/invoke/InvokerBytecodeGenerator.java	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/share/classes/java/lang/invoke/InvokerBytecodeGenerator.java	Tue Nov 04 17:20:19 2014 +0000
@@ -62,7 +62,7 @@
     private static final String CLL_SIG = "(L" + CLS + ";L" + OBJ + ";)L" + OBJ + ";";
 
     /** Name of its super class*/
-    private static final String superName = LF;
+    private static final String superName = OBJ;
 
     /** Name of new class */
     private final String className;
@@ -97,7 +97,7 @@
         if (DUMP_CLASS_FILES) {
             className = makeDumpableClassName(className);
         }
-        this.className  = superName + "$" + className;
+        this.className  = LF + "$" + className;
         this.sourceFile = "LambdaForm$" + className;
         this.lambdaForm = lambdaForm;
         this.invokerName = invokerName;
--- a/src/share/classes/java/lang/invoke/MethodType.java	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/share/classes/java/lang/invoke/MethodType.java	Tue Nov 04 17:20:19 2014 +0000
@@ -726,7 +726,7 @@
      * @return the parameter types (as an immutable list)
      */
     public List<Class<?>> parameterList() {
-        return Collections.unmodifiableList(Arrays.asList(ptypes));
+        return Collections.unmodifiableList(Arrays.asList(ptypes.clone()));
     }
 
     /*non-public*/ Class<?> lastParameterType() {
--- a/src/share/classes/java/net/AbstractPlainDatagramSocketImpl.java	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/share/classes/java/net/AbstractPlainDatagramSocketImpl.java	Tue Nov 04 17:20:19 2014 +0000
@@ -68,6 +68,7 @@
                     return null;
                 }
             });
+        init();
     }
 
     /**
@@ -362,4 +363,7 @@
     protected boolean nativeConnectDisabled() {
         return connectDisabled;
     }
+
+    native int dataAvailable();
+    private static native void init();
 }
--- a/src/share/classes/java/net/DatagramSocket.java	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/share/classes/java/net/DatagramSocket.java	Tue Nov 04 17:20:19 2014 +0000
@@ -83,6 +83,17 @@
      */
     boolean oldImpl = false;
 
+    /**
+     * Set when a socket is ST_CONNECTED until we are certain
+     * that any packets which might have been received prior
+     * to calling connect() but not read by the application
+     * have been read. During this time we check the source
+     * address of all packets received to be sure they are from
+     * the connected destination. Other packets are read but
+     * silently dropped.
+     */
+    private boolean explicitFilter = false;
+    private int bytesLeftToFilter;
     /*
      * Connection state:
      * ST_NOT_CONNECTED = socket not connected
@@ -142,6 +153,15 @@
 
                 // socket is now connected by the impl
                 connectState = ST_CONNECTED;
+                // Do we need to filter some packets?
+                int avail = getImpl().dataAvailable();
+                if (avail == -1) {
+                    throw new SocketException();
+                }
+                explicitFilter = avail > 0;
+                if (explicitFilter) {
+                    bytesLeftToFilter = getReceiveBufferSize();
+                }
             } catch (SocketException se) {
 
                 // connection will be emulated by DatagramSocket
@@ -490,6 +510,7 @@
             connectedAddress = null;
             connectedPort = -1;
             connectState = ST_NOT_CONNECTED;
+            explicitFilter = false;
         }
     }
 
@@ -748,10 +769,13 @@
                     } // end of while
                 }
             }
-            if (connectState == ST_CONNECTED_NO_IMPL) {
+            DatagramPacket tmp = null;
+            if ((connectState == ST_CONNECTED_NO_IMPL) || explicitFilter) {
                 // We have to do the filtering the old fashioned way since
                 // the native impl doesn't support connect or the connect
-                // via the impl failed.
+                // via the impl failed, or .. "explicitFilter" may be set when
+                // a socket is connected via the impl, for a period of time
+                // when packets from other sources might be queued on socket.
                 boolean stop = false;
                 while (!stop) {
                     InetAddress peekAddress = null;
@@ -770,8 +794,14 @@
                     if ((!connectedAddress.equals(peekAddress)) ||
                         (connectedPort != peekPort)) {
                         // throw the packet away and silently continue
-                        DatagramPacket tmp = new DatagramPacket(new byte[1], 1);
+                        tmp = new DatagramPacket(
+                                                new byte[1024], 1024);
                         getImpl().receive(tmp);
+                        if (explicitFilter) {
+                            if (checkFiltering(tmp)) {
+                                stop = true;
+                            }
+                        }
                     } else {
                         stop = true;
                     }
@@ -780,9 +810,22 @@
             // If the security check succeeds, or the datagram is
             // connected then receive the packet
             getImpl().receive(p);
+            if (explicitFilter && tmp == null) {
+                // packet was not filtered, account for it here
+                checkFiltering(p);
+            }
         }
     }
 
+    private boolean checkFiltering(DatagramPacket p) throws SocketException {
+        bytesLeftToFilter -= p.getLength();
+        if (bytesLeftToFilter <= 0 || getImpl().dataAvailable() <= 0) {
+            explicitFilter = false;
+            return true;
+        }
+        return false;
+    }
+
     /**
      * Gets the local address to which the socket is bound.
      *
--- a/src/share/classes/java/net/DatagramSocketImpl.java	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/share/classes/java/net/DatagramSocketImpl.java	Tue Nov 04 17:20:19 2014 +0000
@@ -47,6 +47,12 @@
      */
     protected FileDescriptor fd;
 
+    int dataAvailable() {
+        // default impl returns zero, which disables the calling
+        // functionality
+        return 0;
+    }
+
     /**
      * The DatagramSocket or MulticastSocket
      * that owns this impl
--- a/src/share/classes/java/net/URLClassLoader.java	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/share/classes/java/net/URLClassLoader.java	Tue Nov 04 17:20:19 2014 +0000
@@ -354,10 +354,11 @@
      * @exception NullPointerException if {@code name} is {@code null}.
      */
     protected Class<?> findClass(final String name)
-         throws ClassNotFoundException
+        throws ClassNotFoundException
     {
+        final Class<?> result;
         try {
-            return AccessController.doPrivileged(
+            result = AccessController.doPrivileged(
                 new PrivilegedExceptionAction<Class<?>>() {
                     public Class<?> run() throws ClassNotFoundException {
                         String path = name.replace('.', '/').concat(".class");
@@ -369,13 +370,17 @@
                                 throw new ClassNotFoundException(name, e);
                             }
                         } else {
-                            throw new ClassNotFoundException(name);
+                            return null;
                         }
                     }
                 }, acc);
         } catch (java.security.PrivilegedActionException pae) {
             throw (ClassNotFoundException) pae.getException();
         }
+        if (result == null) {
+            throw new ClassNotFoundException(name);
+        }
+        return result;
     }
 
     /*
--- a/src/share/classes/java/security/KeyPairGenerator.java	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/share/classes/java/security/KeyPairGenerator.java	Tue Nov 04 17:20:19 2014 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2014, 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,6 +33,7 @@
 
 import sun.security.jca.*;
 import sun.security.jca.GetInstance.Instance;
+import sun.security.util.Debug;
 
 /**
  * The KeyPairGenerator class is used to generate pairs of
@@ -126,6 +127,11 @@
 
 public abstract class KeyPairGenerator extends KeyPairGeneratorSpi {
 
+    private static final Debug pdebug =
+                        Debug.getInstance("provider", "Provider");
+    private static final boolean skipDebug =
+        Debug.isOn("engine=") && !Debug.isOn("keypairgenerator");
+
     private final String algorithm;
 
     // The provider
@@ -167,6 +173,12 @@
             kpg = new Delegate(spi, algorithm);
         }
         kpg.provider = instance.provider;
+
+        if (!skipDebug && pdebug != null) {
+            pdebug.println("KeyPairGenerator." + algorithm +
+                " algorithm from: " + kpg.provider.getName());
+        }
+
         return kpg;
     }
 
@@ -557,6 +569,11 @@
             provider = instance.provider;
             this.serviceIterator = serviceIterator;
             initType = I_NONE;
+
+            if (!skipDebug && pdebug != null) {
+                pdebug.println("KeyPairGenerator." + algorithm +
+                    " algorithm from: " + provider.getName());
+            }
         }
 
         /**
--- a/src/share/classes/java/security/KeyStore.java	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/share/classes/java/security/KeyStore.java	Tue Nov 04 17:20:19 2014 +0000
@@ -37,6 +37,8 @@
 import javax.security.auth.DestroyFailedException;
 import javax.security.auth.callback.*;
 
+import sun.security.util.Debug;
+
 /**
  * This class represents a storage facility for cryptographic
  * keys and certificates.
@@ -177,6 +179,11 @@
 
 public class KeyStore {
 
+    private static final Debug pdebug =
+                        Debug.getInstance("provider", "Provider");
+    private static final boolean skipDebug =
+        Debug.isOn("engine=") && !Debug.isOn("keystore");
+
     /*
      * Constant to lookup in the Security properties file to determine
      * the default keystore type.
@@ -801,6 +808,11 @@
         this.keyStoreSpi = keyStoreSpi;
         this.provider = provider;
         this.type = type;
+
+        if (!skipDebug && pdebug != null) {
+            pdebug.println("KeyStore." + type.toUpperCase() + " type from: " +
+                this.provider.getName());
+        }
     }
 
     /**
--- a/src/share/classes/java/security/MessageDigest.java	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/share/classes/java/security/MessageDigest.java	Tue Nov 04 17:20:19 2014 +0000
@@ -35,6 +35,8 @@
 
 import java.nio.ByteBuffer;
 
+import sun.security.util.Debug;
+
 /**
  * This MessageDigest class provides applications the functionality of a
  * message digest algorithm, such as SHA-1 or SHA-256.
@@ -103,6 +105,11 @@
 
 public abstract class MessageDigest extends MessageDigestSpi {
 
+    private static final Debug pdebug =
+                        Debug.getInstance("provider", "Provider");
+    private static final boolean skipDebug =
+        Debug.isOn("engine=") && !Debug.isOn("messagedigest");
+
     private String algorithm;
 
     // The state of this digest
@@ -156,18 +163,23 @@
     public static MessageDigest getInstance(String algorithm)
     throws NoSuchAlgorithmException {
         try {
+            MessageDigest md;
             Object[] objs = Security.getImpl(algorithm, "MessageDigest",
                                              (String)null);
             if (objs[0] instanceof MessageDigest) {
-                MessageDigest md = (MessageDigest)objs[0];
-                md.provider = (Provider)objs[1];
-                return md;
+                md = (MessageDigest)objs[0];
             } else {
-                MessageDigest delegate =
-                    new Delegate((MessageDigestSpi)objs[0], algorithm);
-                delegate.provider = (Provider)objs[1];
-                return delegate;
+                md = new Delegate((MessageDigestSpi)objs[0], algorithm);
             }
+            md.provider = (Provider)objs[1];
+
+            if (!skipDebug && pdebug != null) {
+                pdebug.println("MessageDigest." + algorithm +
+                    " algorithm from: " + md.provider.getName());
+            }
+
+            return md;
+
         } catch(NoSuchProviderException e) {
             throw new NoSuchAlgorithmException(algorithm + " not found");
         }
--- a/src/share/classes/java/security/SecureRandom.java	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/share/classes/java/security/SecureRandom.java	Tue Nov 04 17:20:19 2014 +0000
@@ -32,6 +32,7 @@
 
 import sun.security.jca.*;
 import sun.security.jca.GetInstance.Instance;
+import sun.security.util.Debug;
 
 /**
  * This class provides a cryptographically strong random number
@@ -92,6 +93,11 @@
 
 public class SecureRandom extends java.util.Random {
 
+    private static final Debug pdebug =
+                        Debug.getInstance("provider", "Provider");
+    private static final boolean skipDebug =
+        Debug.isOn("engine=") && !Debug.isOn("securerandom");
+
     /**
      * The provider.
      *
@@ -234,6 +240,11 @@
         this.secureRandomSpi = secureRandomSpi;
         this.provider = provider;
         this.algorithm = algorithm;
+
+        if (!skipDebug && pdebug != null) {
+            pdebug.println("SecureRandom." + algorithm +
+                " algorithm from: " + this.provider.getName());
+        }
     }
 
     /**
--- a/src/share/classes/java/security/Signature.java	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/share/classes/java/security/Signature.java	Tue Nov 04 17:20:19 2014 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1996, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1996, 2014, 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
@@ -121,6 +121,11 @@
     private static final Debug debug =
                         Debug.getInstance("jca", "Signature");
 
+    private static final Debug pdebug =
+                        Debug.getInstance("provider", "Provider");
+    private static final boolean skipDebug =
+        Debug.isOn("engine=") && !Debug.isOn("signature");
+
     /*
      * The algorithm for this signature object.
      * This value is used to map an OID to the particular algorithm.
@@ -451,6 +456,11 @@
             throws InvalidKeyException {
         engineInitVerify(publicKey);
         state = VERIFY;
+
+        if (!skipDebug && pdebug != null) {
+            pdebug.println("Signature." + algorithm +
+                " verification algorithm from: " + this.provider.getName());
+        }
     }
 
     /**
@@ -495,6 +505,11 @@
         PublicKey publicKey = certificate.getPublicKey();
         engineInitVerify(publicKey);
         state = VERIFY;
+
+        if (!skipDebug && pdebug != null) {
+            pdebug.println("Signature." + algorithm +
+                " verification algorithm from: " + this.provider.getName());
+        }
     }
 
     /**
@@ -511,6 +526,11 @@
             throws InvalidKeyException {
         engineInitSign(privateKey);
         state = SIGN;
+
+        if (!skipDebug && pdebug != null) {
+            pdebug.println("Signature." + algorithm +
+                " signing algorithm from: " + this.provider.getName());
+        }
     }
 
     /**
@@ -529,6 +549,11 @@
             throws InvalidKeyException {
         engineInitSign(privateKey, random);
         state = SIGN;
+
+        if (!skipDebug && pdebug != null) {
+            pdebug.println("Signature." + algorithm +
+                " signing algorithm from: " + this.provider.getName());
+        }
     }
 
     /**
@@ -590,6 +615,9 @@
         if (outbuf == null) {
             throw new IllegalArgumentException("No output buffer given");
         }
+        if (offset < 0 || len < 0) {
+            throw new IllegalArgumentException("offset or len is less than 0");
+        }
         if (outbuf.length - offset < len) {
             throw new IllegalArgumentException
                 ("Output buffer too small for specified offset and length");
@@ -658,9 +686,16 @@
     public final boolean verify(byte[] signature, int offset, int length)
         throws SignatureException {
         if (state == VERIFY) {
-            if ((signature == null) || (offset < 0) || (length < 0) ||
-                (length > signature.length - offset)) {
-                throw new IllegalArgumentException("Bad arguments");
+            if (signature == null) {
+                throw new IllegalArgumentException("signature is null");
+            }
+            if (offset < 0 || length < 0) {
+                throw new IllegalArgumentException
+                    ("offset or length is less than 0");
+            }
+            if (signature.length - offset < length) {
+                throw new IllegalArgumentException
+                    ("signature too small for specified offset and length");
             }
 
             return engineVerify(signature, offset, length);
@@ -713,6 +748,16 @@
     public final void update(byte[] data, int off, int len)
             throws SignatureException {
         if (state == SIGN || state == VERIFY) {
+            if (data == null) {
+                throw new IllegalArgumentException("data is null");
+            }
+            if (off < 0 || len < 0) {
+                throw new IllegalArgumentException("off or len is less than 0");
+            }
+            if (data.length - off < len) {
+                throw new IllegalArgumentException
+                    ("data too small for specified offset and length");
+            }
             engineUpdate(data, off, len);
         } else {
             throw new SignatureException("object not initialized for "
--- a/src/share/classes/java/security/cert/CertificateRevokedException.java	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/share/classes/java/security/cert/CertificateRevokedException.java	Tue Nov 04 17:20:19 2014 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2014, 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
@@ -94,7 +94,10 @@
         this.revocationDate = new Date(revocationDate.getTime());
         this.reason = reason;
         this.authority = authority;
-        this.extensions = new HashMap<String, Extension>(extensions);
+        // make sure Map only contains correct types
+        this.extensions = Collections.checkedMap(new HashMap<>(),
+                                                 String.class, Extension.class);
+        this.extensions.putAll(extensions);
     }
 
     /**
@@ -172,7 +175,8 @@
     public String getMessage() {
         return "Certificate has been revoked, reason: "
                + reason + ", revocation date: " + revocationDate
-               + ", authority: " + authority + ", extensions: " + extensions;
+               + ", authority: " + authority + ", extension OIDs: "
+               + extensions.keySet();
     }
 
     /**
--- a/src/share/classes/java/text/DigitList.java	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/share/classes/java/text/DigitList.java	Tue Nov 04 17:20:19 2014 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1996, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1996, 2014, 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
@@ -290,25 +290,26 @@
 
         FloatingDecimal.BinaryToASCIIConverter fdConverter  = FloatingDecimal.getBinaryToASCIIConverter(source);
         boolean hasBeenRoundedUp = fdConverter.digitsRoundedUp();
-        boolean allDecimalDigits = fdConverter.decimalDigitsExact();
+        boolean valueExactAsDecimal = fdConverter.decimalDigitsExact();
         assert !fdConverter.isExceptional();
         String digitsString = fdConverter.toJavaFormatString();
 
         set(isNegative, digitsString,
-            hasBeenRoundedUp, allDecimalDigits,
+            hasBeenRoundedUp, valueExactAsDecimal,
             maximumDigits, fixedPoint);
     }
 
     /**
      * Generate a representation of the form DDDDD, DDDDD.DDDDD, or
      * DDDDDE+/-DDDDD.
-     * @param roundedUp Boolean value indicating if the s digits were rounded-up.
-     * @param allDecimalDigits Boolean value indicating if the digits in s are
-     * an exact decimal representation of the double that was passed.
+     * @param roundedUp whether or not rounding up has already happened.
+     * @param valueExactAsDecimal whether or not collected digits provide
+     * an exact decimal representation of the value.
      */
     private void set(boolean isNegative, String s,
-                     boolean roundedUp, boolean allDecimalDigits,
+                     boolean roundedUp, boolean valueExactAsDecimal,
                      int maximumDigits, boolean fixedPoint) {
+
         this.isNegative = isNegative;
         int len = s.length();
         char[] source = getDataChars(len);
@@ -361,7 +362,7 @@
             } else if (-decimalAt == maximumDigits) {
                 // If we round 0.0009 to 3 fractional digits, then we have to
                 // create a new one digit in the least significant location.
-                if (shouldRoundUp(0, roundedUp, allDecimalDigits)) {
+                if (shouldRoundUp(0, roundedUp, valueExactAsDecimal)) {
                     count = 1;
                     ++decimalAt;
                     digits[0] = '1';
@@ -381,25 +382,26 @@
         // Eliminate digits beyond maximum digits to be displayed.
         // Round up if appropriate.
         round(fixedPoint ? (maximumDigits + decimalAt) : maximumDigits,
-              roundedUp, allDecimalDigits);
-    }
+              roundedUp, valueExactAsDecimal);
+
+     }
 
     /**
      * Round the representation to the given number of digits.
      * @param maximumDigits The maximum number of digits to be shown.
-     * @param alreadyRounded Boolean indicating if rounding up already happened.
-     * @param allDecimalDigits Boolean indicating if the digits provide an exact
-     * representation of the value.
+     * @param alreadyRounded whether or not rounding up has already happened.
+     * @param valueExactAsDecimal whether or not collected digits provide
+     * an exact decimal representation of the value.
      *
      * Upon return, count will be less than or equal to maximumDigits.
      */
     private final void round(int maximumDigits,
                              boolean alreadyRounded,
-                             boolean allDecimalDigits) {
+                             boolean valueExactAsDecimal) {
         // Eliminate digits beyond maximum digits to be displayed.
         // Round up if appropriate.
         if (maximumDigits >= 0 && maximumDigits < count) {
-            if (shouldRoundUp(maximumDigits, alreadyRounded, allDecimalDigits)) {
+            if (shouldRoundUp(maximumDigits, alreadyRounded, valueExactAsDecimal)) {
                 // Rounding up involved incrementing digits from LSD to MSD.
                 // In most cases this is simple, but in a worst case situation
                 // (9999..99) we have to adjust the decimalAt value.
@@ -440,6 +442,9 @@
      * <code>count-1</code>.  If 0, then all digits are rounded away, and
      * this method returns true if a one should be generated (e.g., formatting
      * 0.09 with "#.#").
+     * @param alreadyRounded whether or not rounding up has already happened.
+     * @param valueExactAsDecimal whether or not collected digits provide
+     * an exact decimal representation of the value.
      * @exception ArithmeticException if rounding is needed with rounding
      *            mode being set to RoundingMode.UNNECESSARY
      * @return true if digit <code>maximumDigits-1</code> should be
@@ -447,7 +452,7 @@
      */
     private boolean shouldRoundUp(int maximumDigits,
                                   boolean alreadyRounded,
-                                  boolean allDecimalDigits) {
+                                  boolean valueExactAsDecimal) {
         if (maximumDigits < count) {
             /*
              * To avoid erroneous double-rounding or truncation when converting
@@ -460,7 +465,7 @@
              *   account what FloatingDecimal has done in the binary to decimal
              *   conversion.
              *
-             *   Considering the tie cases, FloatingDecimal may round-up the
+             *   Considering the tie cases, FloatingDecimal may round up the
              *   value (returning decimal digits equal to tie when it is below),
              *   or "truncate" the value to the tie while value is above it,
              *   or provide the exact decimal digits when the binary value can be
@@ -490,7 +495,7 @@
              *
              * - For other numbers that are always converted to exact digits
              *   (like BigInteger, Long, ...), the passed alreadyRounded boolean
-             *   have to be  set to false, and allDecimalDigits has to be set to
+             *   have to be  set to false, and valueExactAsDecimal has to be set to
              *   true in the upper DigitList call stack, providing the right state
              *   for those situations..
              */
@@ -520,42 +525,31 @@
                 }
                 break;
             case HALF_UP:
-                if (digits[maximumDigits] >= '5') {
-                    // We should not round up if the rounding digits position is
-                    // exactly the last index and if digits were already rounded.
-                    if ((maximumDigits == (count - 1)) &&
-                        (alreadyRounded))
-                        return false;
-
-                    // Value was exactly at or was above tie. We must round up.
-                    return true;
-                }
-                break;
             case HALF_DOWN:
                 if (digits[maximumDigits] > '5') {
+                    // Value is above tie ==> must round up
                     return true;
-                } else if (digits[maximumDigits] == '5' ) {
-                    if (maximumDigits == (count - 1)) {
-                        // The rounding position is exactly the last index.
-                        if (allDecimalDigits || alreadyRounded)
-                            /* FloatingDecimal rounded up (value was below tie),
-                             * or provided the exact list of digits (value was
-                             * an exact tie). We should not round up, following
-                             * the HALF_DOWN rounding rule.
-                             */
-                            return false;
-                        else
-                            // Value was above the tie, we must round up.
-                            return true;
-                    }
-
-                    // We must round up if it gives a non null digit after '5'.
-                    for (int i=maximumDigits+1; i<count; ++i) {
-                        if (digits[i] != '0') {
-                            return true;
+                } else if (digits[maximumDigits] == '5') {
+                    // Digit at rounding position is a '5'. Tie cases.
+                    if (maximumDigits != (count - 1)) {
+                        // There are remaining digits. Above tie => must round up
+                        return true;
+                    } else {
+                        // Digit at rounding position is the last one !
+                        if (valueExactAsDecimal) {
+                            // Exact binary representation. On the tie.
+                            // Apply rounding given by roundingMode.
+                            return roundingMode == RoundingMode.HALF_UP;
+                        } else {
+                            // Not an exact binary representation.
+                            // Digit sequence either rounded up or truncated.
+                            // Round up only if it was truncated.
+                            return !alreadyRounded;
                         }
                     }
                 }
+                // Digit at rounding position is < '5' ==> no round up.
+                // Just let do the default, which is no round up (thus break).
                 break;
             case HALF_EVEN:
                 // Implement IEEE half-even rounding
@@ -569,7 +563,7 @@
                             // then we should not round up again.
                             return false;
 
-                        if (!allDecimalDigits)
+                        if (!valueExactAsDecimal)
                             // Otherwise if the digits don't represent exact value,
                             // value was above tie and FloatingDecimal truncated
                             // digits to tie. We must round up.
--- a/src/share/classes/java/util/ResourceBundle.java	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/share/classes/java/util/ResourceBundle.java	Tue Nov 04 17:20:19 2014 +0000
@@ -2650,7 +2650,10 @@
                 } catch (ClassNotFoundException e) {
                 }
             } else if (format.equals("java.properties")) {
-                final String resourceName = toResourceName(bundleName, "properties");
+                final String resourceName = toResourceName0(bundleName, "properties");
+                if (resourceName == null) {
+                    return bundle;
+                }
                 final ClassLoader classLoader = loader;
                 final boolean reloadFlag = reload;
                 InputStream stream = null;
@@ -2804,7 +2807,10 @@
             }
             boolean result = false;
             try {
-                String resourceName = toResourceName(toBundleName(baseName, locale), format);
+                String resourceName = toResourceName0(toBundleName(baseName, locale), format);
+                if (resourceName == null) {
+                    return result;
+                }
                 URL url = loader.getResource(resourceName);
                 if (url != null) {
                     long lastModified = 0;
@@ -2938,6 +2944,15 @@
             sb.append(bundleName.replace('.', '/')).append('.').append(suffix);
             return sb.toString();
         }
+
+        private String toResourceName0(String bundleName, String suffix) {
+            // application protocol check
+            if (bundleName.contains("://")) {
+                return null;
+            } else {
+                return toResourceName(bundleName, suffix);
+            }
+        }
     }
 
     private static class SingleFormatControl extends Control {
--- a/src/share/classes/java/util/concurrent/ForkJoinPool.java	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/share/classes/java/util/concurrent/ForkJoinPool.java	Tue Nov 04 17:20:19 2014 +0000
@@ -49,6 +49,7 @@
 import java.util.concurrent.RunnableFuture;
 import java.util.concurrent.ThreadLocalRandom;
 import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicLong;
 import java.security.AccessControlContext;
 import java.security.ProtectionDomain;
 import java.security.Permissions;
@@ -80,9 +81,9 @@
  *
  * <p>For applications that require separate or custom pools, a {@code
  * ForkJoinPool} may be constructed with a given target parallelism
- * level; by default, equal to the number of available processors. The
- * pool attempts to maintain enough active (or available) threads by
- * dynamically adding, suspending, or resuming internal worker
+ * level; by default, equal to the number of available processors.
+ * The pool attempts to maintain enough active (or available) threads
+ * by dynamically adding, suspending, or resuming internal worker
  * threads, even if some tasks are stalled waiting to join others.
  * However, no such adjustments are guaranteed in the face of blocked
  * I/O or other unmanaged synchronization. The nested {@link
@@ -178,7 +179,14 @@
      * that may be stolen by other workers.  Preference rules give
      * first priority to processing tasks from their own queues (LIFO
      * or FIFO, depending on mode), then to randomized FIFO steals of
-     * tasks in other queues.
+     * tasks in other queues.  This framework began as vehicle for
+     * supporting tree-structured parallelism using work-stealing.
+     * Over time, its scalability advantages led to extensions and
+     * changes to better support more diverse usage contexts.  Because
+     * most internal methods and nested classes are interrelated,
+     * their main rationale and descriptions are presented here;
+     * individual methods and nested classes contain only brief
+     * comments about details.
      *
      * WorkQueues
      * ==========
@@ -198,201 +206,318 @@
      * (http://research.sun.com/scalable/pubs/index.html) and
      * "Idempotent work stealing" by Michael, Saraswat, and Vechev,
      * PPoPP 2009 (http://portal.acm.org/citation.cfm?id=1504186).
-     * See also "Correct and Efficient Work-Stealing for Weak Memory
-     * Models" by Le, Pop, Cohen, and Nardelli, PPoPP 2013
-     * (http://www.di.ens.fr/~zappa/readings/ppopp13.pdf) for an
-     * analysis of memory ordering (atomic, volatile etc) issues.  The
-     * main differences ultimately stem from GC requirements that we
-     * null out taken slots as soon as we can, to maintain as small a
-     * footprint as possible even in programs generating huge numbers
-     * of tasks. To accomplish this, we shift the CAS arbitrating pop
-     * vs poll (steal) from being on the indices ("base" and "top") to
-     * the slots themselves.  So, both a successful pop and poll
-     * mainly entail a CAS of a slot from non-null to null.  Because
-     * we rely on CASes of references, we do not need tag bits on base
-     * or top.  They are simple ints as used in any circular
+     * The main differences ultimately stem from GC requirements that
+     * we null out taken slots as soon as we can, to maintain as small
+     * a footprint as possible even in programs generating huge
+     * numbers of tasks. To accomplish this, we shift the CAS
+     * arbitrating pop vs poll (steal) from being on the indices
+     * ("base" and "top") to the slots themselves.
+     *
+     * Adding tasks then takes the form of a classic array push(task):
+     *    q.array[q.top] = task; ++q.top;
+     *
+     * (The actual code needs to null-check and size-check the array,
+     * properly fence the accesses, and possibly signal waiting
+     * workers to start scanning -- see below.)  Both a successful pop
+     * and poll mainly entail a CAS of a slot from non-null to null.
+     *
+     * The pop operation (always performed by owner) is:
+     *   if ((base != top) and
+     *        (the task at top slot is not null) and
+     *        (CAS slot to null))
+     *           decrement top and return task;
+     *
+     * And the poll operation (usually by a stealer) is
+     *    if ((base != top) and
+     *        (the task at base slot is not null) and
+     *        (base has not changed) and
+     *        (CAS slot to null))
+     *           increment base and return task;
+     *
+     * Because we rely on CASes of references, we do not need tag bits
+     * on base or top.  They are simple ints as used in any circular
      * array-based queue (see for example ArrayDeque).  Updates to the
-     * indices must still be ordered in a way that guarantees that top
-     * == base means the queue is empty, but otherwise may err on the
-     * side of possibly making the queue appear nonempty when a push,
-     * pop, or poll have not fully committed. Note that this means
-     * that the poll operation, considered individually, is not
-     * wait-free. One thief cannot successfully continue until another
-     * in-progress one (or, if previously empty, a push) completes.
-     * However, in the aggregate, we ensure at least probabilistic
+     * indices guarantee that top == base means the queue is empty,
+     * but otherwise may err on the side of possibly making the queue
+     * appear nonempty when a push, pop, or poll have not fully
+     * committed. (Method isEmpty() checks the case of a partially
+     * completed removal of the last element.)  Because of this, the
+     * poll operation, considered individually, is not wait-free. One
+     * thief cannot successfully continue until another in-progress
+     * one (or, if previously empty, a push) completes.  However, in
+     * the aggregate, we ensure at least probabilistic
      * non-blockingness.  If an attempted steal fails, a thief always
      * chooses a different random victim target to try next. So, in
      * order for one thief to progress, it suffices for any
      * in-progress poll or new push on any empty queue to
      * complete. (This is why we normally use method pollAt and its
      * variants that try once at the apparent base index, else
-     * consider alternative actions, rather than method poll.)
+     * consider alternative actions, rather than method poll, which
+     * retries.)
      *
-     * This approach also enables support of a user mode in which local
-     * task processing is in FIFO, not LIFO order, simply by using
-     * poll rather than pop.  This can be useful in message-passing
-     * frameworks in which tasks are never joined.  However neither
-     * mode considers affinities, loads, cache localities, etc, so
-     * rarely provide the best possible performance on a given
-     * machine, but portably provide good throughput by averaging over
-     * these factors.  (Further, even if we did try to use such
-     * information, we do not usually have a basis for exploiting it.
-     * For example, some sets of tasks profit from cache affinities,
-     * but others are harmed by cache pollution effects.)
+     * This approach also enables support of a user mode in which
+     * local task processing is in FIFO, not LIFO order, simply by
+     * using poll rather than pop.  This can be useful in
+     * message-passing frameworks in which tasks are never joined.
+     * However neither mode considers affinities, loads, cache
+     * localities, etc, so rarely provide the best possible
+     * performance on a given machine, but portably provide good
+     * throughput by averaging over these factors.  Further, even if
+     * we did try to use such information, we do not usually have a
+     * basis for exploiting it.  For example, some sets of tasks
+     * profit from cache affinities, but others are harmed by cache
+     * pollution effects. Additionally, even though it requires
+     * scanning, long-term throughput is often best using random
+     * selection rather than directed selection policies, so cheap
+     * randomization of sufficient quality is used whenever
+     * applicable.  Various Marsaglia XorShifts (some with different
+     * shift constants) are inlined at use points.
      *
      * WorkQueues are also used in a similar way for tasks submitted
      * to the pool. We cannot mix these tasks in the same queues used
-     * for work-stealing (this would contaminate lifo/fifo
-     * processing). Instead, we randomly associate submission queues
+     * by workers. Instead, we randomly associate submission queues
      * with submitting threads, using a form of hashing.  The
      * ThreadLocalRandom probe value serves as a hash code for
      * choosing existing queues, and may be randomly repositioned upon
      * contention with other submitters.  In essence, submitters act
      * like workers except that they are restricted to executing local
      * tasks that they submitted (or in the case of CountedCompleters,
-     * others with the same root task).  However, because most
-     * shared/external queue operations are more expensive than
-     * internal, and because, at steady state, external submitters
-     * will compete for CPU with workers, ForkJoinTask.join and
-     * related methods disable them from repeatedly helping to process
-     * tasks if all workers are active.  Insertion of tasks in shared
+     * others with the same root task).  Insertion of tasks in shared
      * mode requires a lock (mainly to protect in the case of
-     * resizing) but we use only a simple spinlock (using bits in
-     * field qlock), because submitters encountering a busy queue move
-     * on to try or create other queues -- they block only when
-     * creating and registering new queues.
+     * resizing) but we use only a simple spinlock (using field
+     * qlock), because submitters encountering a busy queue move on to
+     * try or create other queues -- they block only when creating and
+     * registering new queues. Additionally, "qlock" saturates to an
+     * unlockable value (-1) at shutdown. Unlocking still can be and
+     * is performed by cheaper ordered writes of "qlock" in successful
+     * cases, but uses CAS in unsuccessful cases.
      *
      * Management
      * ==========
      *
      * The main throughput advantages of work-stealing stem from
      * decentralized control -- workers mostly take tasks from
-     * themselves or each other. We cannot negate this in the
-     * implementation of other management responsibilities. The main
-     * tactic for avoiding bottlenecks is packing nearly all
-     * essentially atomic control state into two volatile variables
-     * that are by far most often read (not written) as status and
-     * consistency checks.
+     * themselves or each other, at rates that can exceed a billion
+     * per second.  The pool itself creates, activates (enables
+     * scanning for and running tasks), deactivates, blocks, and
+     * terminates threads, all with minimal central information.
+     * There are only a few properties that we can globally track or
+     * maintain, so we pack them into a small number of variables,
+     * often maintaining atomicity without blocking or locking.
+     * Nearly all essentially atomic control state is held in two
+     * volatile variables that are by far most often read (not
+     * written) as status and consistency checks. (Also, field
+     * "config" holds unchanging configuration state.)
      *
-     * Field "ctl" contains 64 bits holding all the information needed
-     * to atomically decide to add, inactivate, enqueue (on an event
+     * Field "ctl" contains 64 bits holding information needed to
+     * atomically decide to add, inactivate, enqueue (on an event
      * queue), dequeue, and/or re-activate workers.  To enable this
      * packing, we restrict maximum parallelism to (1<<15)-1 (which is
      * far in excess of normal operating range) to allow ids, counts,
      * and their negations (used for thresholding) to fit into 16bit
-     * fields.
+     * subfields.
      *
-     * Field "plock" is a form of sequence lock with a saturating
-     * shutdown bit (similarly for per-queue "qlocks"), mainly
-     * protecting updates to the workQueues array, as well as to
-     * enable shutdown.  When used as a lock, it is normally only very
-     * briefly held, so is nearly always available after at most a
-     * brief spin, but we use a monitor-based backup strategy to
-     * block when needed.
+     * Field "runState" holds lockable state bits (STARTED, STOP, etc)
+     * also protecting updates to the workQueues array.  When used as
+     * a lock, it is normally held only for a few instructions (the
+     * only exceptions are one-time array initialization and uncommon
+     * resizing), so is nearly always available after at most a brief
+     * spin. But to be extra-cautious, after spinning, method
+     * awaitRunStateLock (called only if an initial CAS fails), uses a
+     * wait/notify mechanics on a builtin monitor to block when
+     * (rarely) needed. This would be a terrible idea for a highly
+     * contended lock, but most pools run without the lock ever
+     * contending after the spin limit, so this works fine as a more
+     * conservative alternative. Because we don't otherwise have an
+     * internal Object to use as a monitor, the "stealCounter" (an
+     * AtomicLong) is used when available (it too must be lazily
+     * initialized; see externalSubmit).
+     *
+     * Usages of "runState" vs "ctl" interact in only one case:
+     * deciding to add a worker thread (see tryAddWorker), in which
+     * case the ctl CAS is performed while the lock is held.
      *
      * Recording WorkQueues.  WorkQueues are recorded in the
-     * "workQueues" array that is created upon first use and expanded
-     * if necessary.  Updates to the array while recording new workers
-     * and unrecording terminated ones are protected from each other
-     * by a lock but the array is otherwise concurrently readable, and
-     * accessed directly.  To simplify index-based operations, the
-     * array size is always a power of two, and all readers must
-     * tolerate null slots. Worker queues are at odd indices. Shared
-     * (submission) queues are at even indices, up to a maximum of 64
-     * slots, to limit growth even if array needs to expand to add
-     * more workers. Grouping them together in this way simplifies and
-     * speeds up task scanning.
+     * "workQueues" array. The array is created upon first use (see
+     * externalSubmit) and expanded if necessary.  Updates to the
+     * array while recording new workers and unrecording terminated
+     * ones are protected from each other by the runState lock, but
+     * the array is otherwise concurrently readable, and accessed
+     * directly. We also ensure that reads of the array reference
+     * itself never become too stale. To simplify index-based
+     * operations, the array size is always a power of two, and all
+     * readers must tolerate null slots. Worker queues are at odd
+     * indices. Shared (submission) queues are at even indices, up to
+     * a maximum of 64 slots, to limit growth even if array needs to
+     * expand to add more workers. Grouping them together in this way
+     * simplifies and speeds up task scanning.
      *
      * All worker thread creation is on-demand, triggered by task
      * submissions, replacement of terminated workers, and/or
      * compensation for blocked workers. However, all other support
      * code is set up to work with other policies.  To ensure that we
-     * do not hold on to worker references that would prevent GC, ALL
+     * do not hold on to worker references that would prevent GC, All
      * accesses to workQueues are via indices into the workQueues
      * array (which is one source of some of the messy code
      * constructions here). In essence, the workQueues array serves as
-     * a weak reference mechanism. Thus for example the wait queue
-     * field of ctl stores indices, not references.  Access to the
-     * workQueues in associated methods (for example signalWork) must
-     * both index-check and null-check the IDs. All such accesses
-     * ignore bad IDs by returning out early from what they are doing,
-     * since this can only be associated with termination, in which
-     * case it is OK to give up.  All uses of the workQueues array
-     * also check that it is non-null (even if previously
-     * non-null). This allows nulling during termination, which is
-     * currently not necessary, but remains an option for
-     * resource-revocation-based shutdown schemes. It also helps
-     * reduce JIT issuance of uncommon-trap code, which tends to
-     * unnecessarily complicate control flow in some methods.
+     * a weak reference mechanism. Thus for example the stack top
+     * subfield of ctl stores indices, not references.
+     *
+     * Queuing Idle Workers. Unlike HPC work-stealing frameworks, we
+     * cannot let workers spin indefinitely scanning for tasks when
+     * none can be found immediately, and we cannot start/resume
+     * workers unless there appear to be tasks available.  On the
+     * other hand, we must quickly prod them into action when new
+     * tasks are submitted or generated. In many usages, ramp-up time
+     * to activate workers is the main limiting factor in overall
+     * performance, which is compounded at program start-up by JIT
+     * compilation and allocation. So we streamline this as much as
+     * possible.
+     *
+     * The "ctl" field atomically maintains active and total worker
+     * counts as well as a queue to place waiting threads so they can
+     * be located for signalling. Active counts also play the role of
+     * quiescence indicators, so are decremented when workers believe
+     * that there are no more tasks to execute. The "queue" is
+     * actually a form of Treiber stack.  A stack is ideal for
+     * activating threads in most-recently used order. This improves
+     * performance and locality, outweighing the disadvantages of
+     * being prone to contention and inability to release a worker
+     * unless it is topmost on stack.  We park/unpark workers after
+     * pushing on the idle worker stack (represented by the lower
+     * 32bit subfield of ctl) when they cannot find work.  The top
+     * stack state holds the value of the "scanState" field of the
+     * worker: its index and status, plus a version counter that, in
+     * addition to the count subfields (also serving as version
+     * stamps) provide protection against Treiber stack ABA effects.
+     *
+     * Field scanState is used by both workers and the pool to manage
+     * and track whether a worker is INACTIVE (possibly blocked
+     * waiting for a signal), or SCANNING for tasks (when neither hold
+     * it is busy running tasks).  When a worker is inactivated, its
+     * scanState field is set, and is prevented from executing tasks,
+     * even though it must scan once for them to avoid queuing
+     * races. Note that scanState updates lag queue CAS releases so
+     * usage requires care. When queued, the lower 16 bits of
+     * scanState must hold its pool index. So we place the index there
+     * upon initialization (see registerWorker) and otherwise keep it
+     * there or restore it when necessary.
      *
-     * Event Queuing. Unlike HPC work-stealing frameworks, we cannot
-     * let workers spin indefinitely scanning for tasks when none can
-     * be found immediately, and we cannot start/resume workers unless
-     * there appear to be tasks available.  On the other hand, we must
-     * quickly prod them into action when new tasks are submitted or
-     * generated. In many usages, ramp-up time to activate workers is
-     * the main limiting factor in overall performance (this is
-     * compounded at program start-up by JIT compilation and
-     * allocation). So we try to streamline this as much as possible.
-     * We park/unpark workers after placing in an event wait queue
-     * when they cannot find work. This "queue" is actually a simple
-     * Treiber stack, headed by the "id" field of ctl, plus a 15bit
-     * counter value (that reflects the number of times a worker has
-     * been inactivated) to avoid ABA effects (we need only as many
-     * version numbers as worker threads). Successors are held in
-     * field WorkQueue.nextWait.  Queuing deals with several intrinsic
-     * races, mainly that a task-producing thread can miss seeing (and
-     * signalling) another thread that gave up looking for work but
-     * has not yet entered the wait queue. We solve this by requiring
-     * a full sweep of all workers (via repeated calls to method
-     * scan()) both before and after a newly waiting worker is added
-     * to the wait queue.  Because enqueued workers may actually be
-     * rescanning rather than waiting, we set and clear the "parker"
+     * Memory ordering.  See "Correct and Efficient Work-Stealing for
+     * Weak Memory Models" by Le, Pop, Cohen, and Nardelli, PPoPP 2013
+     * (http://www.di.ens.fr/~zappa/readings/ppopp13.pdf) for an
+     * analysis of memory ordering requirements in work-stealing
+     * algorithms similar to the one used here.  We usually need
+     * stronger than minimal ordering because we must sometimes signal
+     * workers, requiring Dekker-like full-fences to avoid lost
+     * signals.  Arranging for enough ordering without expensive
+     * over-fencing requires tradeoffs among the supported means of
+     * expressing access constraints. The most central operations,
+     * taking from queues and updating ctl state, require full-fence
+     * CAS.  Array slots are read using the emulation of volatiles
+     * provided by Unsafe.  Access from other threads to WorkQueue
+     * base, top, and array requires a volatile load of the first of
+     * any of these read.  We use the convention of declaring the
+     * "base" index volatile, and always read it before other fields.
+     * The owner thread must ensure ordered updates, so writes use
+     * ordered intrinsics unless they can piggyback on those for other
+     * writes.  Similar conventions and rationales hold for other
+     * WorkQueue fields (such as "currentSteal") that are only written
+     * by owners but observed by others.
+     *
+     * Creating workers. To create a worker, we pre-increment total
+     * count (serving as a reservation), and attempt to construct a
+     * ForkJoinWorkerThread via its factory. Upon construction, the
+     * new thread invokes registerWorker, where it constructs a
+     * WorkQueue and is assigned an index in the workQueues array
+     * (expanding the array if necessary). The thread is then
+     * started. Upon any exception across these steps, or null return
+     * from factory, deregisterWorker adjusts counts and records
+     * accordingly.  If a null return, the pool continues running with
+     * fewer than the target number workers. If exceptional, the
+     * exception is propagated, generally to some external caller.
+     * Worker index assignment avoids the bias in scanning that would
+     * occur if entries were sequentially packed starting at the front
+     * of the workQueues array. We treat the array as a simple
+     * power-of-two hash table, expanding as needed. The seedIndex
+     * increment ensures no collisions until a resize is needed or a
+     * worker is deregistered and replaced, and thereafter keeps
+     * probability of collision low. We cannot use
+     * ThreadLocalRandom.getProbe() for similar purposes here because
+     * the thread has not started yet, but do so for creating
+     * submission queues for existing external threads.
+     *
+     * Deactivation and waiting. Queuing encounters several intrinsic
+     * races; most notably that a task-producing thread can miss
+     * seeing (and signalling) another thread that gave up looking for
+     * work but has not yet entered the wait queue.  When a worker
+     * cannot find a task to steal, it deactivates and enqueues. Very
+     * often, the lack of tasks is transient due to GC or OS
+     * scheduling. To reduce false-alarm deactivation, scanners
+     * compute checksums of queue states during sweeps.  (The
+     * stability checks used here and elsewhere are probabilistic
+     * variants of snapshot techniques -- see Herlihy & Shavit.)
+     * Workers give up and try to deactivate only after the sum is
+     * stable across scans. Further, to avoid missed signals, they
+     * repeat this scanning process after successful enqueuing until
+     * again stable.  In this state, the worker cannot take/run a task
+     * it sees until it is released from the queue, so the worker
+     * itself eventually tries to release itself or any successor (see
+     * tryRelease).  Otherwise, upon an empty scan, a deactivated
+     * worker uses an adaptive local spin construction (see awaitWork)
+     * before blocking (via park). Note the unusual conventions about
+     * Thread.interrupts surrounding parking and other blocking:
+     * Because interrupts are used solely to alert threads to check
+     * termination, which is checked anyway upon blocking, we clear
+     * status (using Thread.interrupted) before any call to park, so
+     * that park does not immediately return due to status being set
+     * via some other unrelated call to interrupt in user code.
+     *
+     * Signalling and activation.  Workers are created or activated
+     * only when there appears to be at least one task they might be
+     * able to find and execute.  Upon push (either by a worker or an
+     * external submission) to a previously (possibly) empty queue,
+     * workers are signalled if idle, or created if fewer exist than
+     * the given parallelism level.  These primary signals are
+     * buttressed by others whenever other threads remove a task from
+     * a queue and notice that there are other tasks there as well.
+     * On most platforms, signalling (unpark) overhead time is
+     * noticeably long, and the time between signalling a thread and
+     * it actually making progress can be very noticeably long, so it
+     * is worth offloading these delays from critical paths as much as
+     * possible. Also, because inactive workers are often rescanning
+     * or spinning rather than blocking, we set and clear the "parker"
      * field of WorkQueues to reduce unnecessary calls to unpark.
      * (This requires a secondary recheck to avoid missed signals.)
-     * Note the unusual conventions about Thread.interrupts
-     * surrounding parking and other blocking: Because interrupts are
-     * used solely to alert threads to check termination, which is
-     * checked anyway upon blocking, we clear status (using
-     * Thread.interrupted) before any call to park, so that park does
-     * not immediately return due to status being set via some other
-     * unrelated call to interrupt in user code.
-     *
-     * Signalling.  We create or wake up workers only when there
-     * appears to be at least one task they might be able to find and
-     * execute.  When a submission is added or another worker adds a
-     * task to a queue that has fewer than two tasks, they signal
-     * waiting workers (or trigger creation of new ones if fewer than
-     * the given parallelism level -- signalWork).  These primary
-     * signals are buttressed by others whenever other threads remove
-     * a task from a queue and notice that there are other tasks there
-     * as well.  So in general, pools will be over-signalled. On most
-     * platforms, signalling (unpark) overhead time is noticeably
-     * long, and the time between signalling a thread and it actually
-     * making progress can be very noticeably long, so it is worth
-     * offloading these delays from critical paths as much as
-     * possible. Additionally, workers spin-down gradually, by staying
-     * alive so long as they see the ctl state changing.  Similar
-     * stability-sensing techniques are also used before blocking in
-     * awaitJoin and helpComplete.
      *
      * Trimming workers. To release resources after periods of lack of
      * use, a worker starting to wait when the pool is quiescent will
-     * time out and terminate if the pool has remained quiescent for a
-     * given period -- a short period if there are more threads than
-     * parallelism, longer as the number of threads decreases. This
-     * will slowly propagate, eventually terminating all workers after
-     * periods of non-use.
+     * time out and terminate (see awaitWork) if the pool has remained
+     * quiescent for period IDLE_TIMEOUT, increasing the period as the
+     * number of threads decreases, eventually removing all workers.
+     * Also, when more than two spare threads exist, excess threads
+     * are immediately terminated at the next quiescent point.
+     * (Padding by two avoids hysteresis.)
      *
-     * Shutdown and Termination. A call to shutdownNow atomically sets
-     * a plock bit and then (non-atomically) sets each worker's
-     * qlock status, cancels all unprocessed tasks, and wakes up
-     * all waiting workers.  Detecting whether termination should
-     * commence after a non-abrupt shutdown() call requires more work
-     * and bookkeeping. We need consensus about quiescence (i.e., that
-     * there is no more work). The active count provides a primary
-     * indication but non-abrupt shutdown still requires a rechecking
-     * scan for any workers that are inactive but not queued.
+     * Shutdown and Termination. A call to shutdownNow invokes
+     * tryTerminate to atomically set a runState bit. The calling
+     * thread, as well as every other worker thereafter terminating,
+     * helps terminate others by setting their (qlock) status,
+     * cancelling their unprocessed tasks, and waking them up, doing
+     * so repeatedly until stable (but with a loop bounded by the
+     * number of workers).  Calls to non-abrupt shutdown() preface
+     * this by checking whether termination should commence. This
+     * relies primarily on the active count bits of "ctl" maintaining
+     * consensus -- tryTerminate is called from awaitWork whenever
+     * quiescent. However, external submitters do not take part in
+     * this consensus.  So, tryTerminate sweeps through queues (until
+     * stable) to ensure lack of in-flight submissions and workers
+     * about to process them before triggering the "STOP" phase of
+     * termination. (Note: there is an intrinsic conflict if
+     * helpQuiescePool is called when shutdown is enabled. Both wait
+     * for quiescence, but tryTerminate is biased to not trigger until
+     * helpQuiescePool completes.)
+     *
      *
      * Joining Tasks
      * =============
@@ -403,9 +528,9 @@
      * just let them block (as in Thread.join).  We also cannot just
      * reassign the joiner's run-time stack with another and replace
      * it later, which would be a form of "continuation", that even if
-     * possible is not necessarily a good idea since we sometimes need
-     * both an unblocked task and its continuation to progress.
-     * Instead we combine two tactics:
+     * possible is not necessarily a good idea since we may need both
+     * an unblocked task and its continuation to progress.  Instead we
+     * combine two tactics:
      *
      *   Helping: Arranging for the joiner to execute some task that it
      *      would be running if the steal had not occurred.
@@ -425,16 +550,16 @@
      * The ManagedBlocker extension API can't use helping so relies
      * only on compensation in method awaitBlocker.
      *
-     * The algorithm in tryHelpStealer entails a form of "linear"
-     * helping: Each worker records (in field currentSteal) the most
-     * recent task it stole from some other worker. Plus, it records
-     * (in field currentJoin) the task it is currently actively
-     * joining. Method tryHelpStealer uses these markers to try to
-     * find a worker to help (i.e., steal back a task from and execute
-     * it) that could hasten completion of the actively joined task.
-     * In essence, the joiner executes a task that would be on its own
-     * local deque had the to-be-joined task not been stolen. This may
-     * be seen as a conservative variant of the approach in Wagner &
+     * The algorithm in helpStealer entails a form of "linear
+     * helping".  Each worker records (in field currentSteal) the most
+     * recent task it stole from some other worker (or a submission).
+     * It also records (in field currentJoin) the task it is currently
+     * actively joining. Method helpStealer uses these markers to try
+     * to find a worker to help (i.e., steal back a task from and
+     * execute it) that could hasten completion of the actively joined
+     * task.  Thus, the joiner executes a task that would be on its
+     * own local deque had the to-be-joined task not been stolen. This
+     * is a conservative variant of the approach described in Wagner &
      * Calder "Leapfrogging: a portable technique for implementing
      * efficient futures" SIGPLAN Notices, 1993
      * (http://portal.acm.org/citation.cfm?id=155354). It differs in
@@ -452,37 +577,40 @@
      * which means that we miss links in the chain during long-lived
      * tasks, GC stalls etc (which is OK since blocking in such cases
      * is usually a good idea).  (4) We bound the number of attempts
-     * to find work (see MAX_HELP) and fall back to suspending the
+     * to find work using checksums and fall back to suspending the
      * worker and if necessary replacing it with another.
      *
-     * Helping actions for CountedCompleters are much simpler: Method
-     * helpComplete can take and execute any task with the same root
-     * as the task being waited on. However, this still entails some
-     * traversal of completer chains, so is less efficient than using
-     * CountedCompleters without explicit joins.
+     * Helping actions for CountedCompleters do not require tracking
+     * currentJoins: Method helpComplete takes and executes any task
+     * with the same root as the task being waited on (preferring
+     * local pops to non-local polls). However, this still entails
+     * some traversal of completer chains, so is less efficient than
+     * using CountedCompleters without explicit joins.
      *
-     * It is impossible to keep exactly the target parallelism number
-     * of threads running at any given time.  Determining the
-     * existence of conservatively safe helping targets, the
-     * availability of already-created spares, and the apparent need
-     * to create new spares are all racy, so we rely on multiple
-     * retries of each.  Compensation in the apparent absence of
-     * helping opportunities is challenging to control on JVMs, where
-     * GC and other activities can stall progress of tasks that in
-     * turn stall out many other dependent tasks, without us being
-     * able to determine whether they will ever require compensation.
-     * Even though work-stealing otherwise encounters little
-     * degradation in the presence of more threads than cores,
-     * aggressively adding new threads in such cases entails risk of
-     * unwanted positive feedback control loops in which more threads
-     * cause more dependent stalls (as well as delayed progress of
-     * unblocked threads to the point that we know they are available)
-     * leading to more situations requiring more threads, and so
-     * on. This aspect of control can be seen as an (analytically
-     * intractable) game with an opponent that may choose the worst
-     * (for us) active thread to stall at any time.  We take several
-     * precautions to bound losses (and thus bound gains), mainly in
-     * methods tryCompensate and awaitJoin.
+     * Compensation does not aim to keep exactly the target
+     * parallelism number of unblocked threads running at any given
+     * time. Some previous versions of this class employed immediate
+     * compensations for any blocked join. However, in practice, the
+     * vast majority of blockages are transient byproducts of GC and
+     * other JVM or OS activities that are made worse by replacement.
+     * Currently, compensation is attempted only after validating that
+     * all purportedly active threads are processing tasks by checking
+     * field WorkQueue.scanState, which eliminates most false
+     * positives.  Also, compensation is bypassed (tolerating fewer
+     * threads) in the most common case in which it is rarely
+     * beneficial: when a worker with an empty queue (thus no
+     * continuation tasks) blocks on a join and there still remain
+     * enough threads to ensure liveness.
+     *
+     * The compensation mechanism may be bounded.  Bounds for the
+     * commonPool (see commonMaxSpares) better enable JVMs to cope
+     * with programming errors and abuse before running out of
+     * resources to do so. In other cases, users may supply factories
+     * that limit thread construction. The effects of bounding in this
+     * pool (like all others) is imprecise.  Total worker counts are
+     * decremented when threads deregister, not when they exit and
+     * resources are reclaimed by the JVM and OS. So the number of
+     * simultaneously live threads may transiently exceed bounds.
      *
      * Common Pool
      * ===========
@@ -492,34 +620,52 @@
      * never be used, we minimize initial construction overhead and
      * footprint to the setup of about a dozen fields, with no nested
      * allocation. Most bootstrapping occurs within method
-     * fullExternalPush during the first submission to the pool.
+     * externalSubmit during the first submission to the pool.
      *
      * When external threads submit to the common pool, they can
-     * perform subtask processing (see externalHelpJoin and related
-     * methods).  This caller-helps policy makes it sensible to set
-     * common pool parallelism level to one (or more) less than the
-     * total number of available cores, or even zero for pure
-     * caller-runs.  We do not need to record whether external
-     * submissions are to the common pool -- if not, externalHelpJoin
-     * returns quickly (at the most helping to signal some common pool
-     * workers). These submitters would otherwise be blocked waiting
-     * for completion, so the extra effort (with liberally sprinkled
-     * task status checks) in inapplicable cases amounts to an odd
-     * form of limited spin-wait before blocking in ForkJoinTask.join.
+     * perform subtask processing (see externalHelpComplete and
+     * related methods) upon joins.  This caller-helps policy makes it
+     * sensible to set common pool parallelism level to one (or more)
+     * less than the total number of available cores, or even zero for
+     * pure caller-runs.  We do not need to record whether external
+     * submissions are to the common pool -- if not, external help
+     * methods return quickly. These submitters would otherwise be
+     * blocked waiting for completion, so the extra effort (with
+     * liberally sprinkled task status checks) in inapplicable cases
+     * amounts to an odd form of limited spin-wait before blocking in
+     * ForkJoinTask.join.
      *
      * As a more appropriate default in managed environments, unless
      * overridden by system properties, we use workers of subclass
      * InnocuousForkJoinWorkerThread when there is a SecurityManager
      * present. These workers have no permissions set, do not belong
      * to any user-defined ThreadGroup, and erase all ThreadLocals
-     * after executing any top-level task (see WorkQueue.runTask). The
-     * associated mechanics (mainly in ForkJoinWorkerThread) may be
-     * JVM-dependent and must access particular Thread class fields to
-     * achieve this effect.
+     * after executing any top-level task (see WorkQueue.runTask).
+     * The associated mechanics (mainly in ForkJoinWorkerThread) may
+     * be JVM-dependent and must access particular Thread class fields
+     * to achieve this effect.
      *
      * Style notes
      * ===========
      *
+     * Memory ordering relies mainly on Unsafe intrinsics that carry
+     * the further responsibility of explicitly performing null- and
+     * bounds- checks otherwise carried out implicitly by JVMs.  This
+     * can be awkward and ugly, but also reflects the need to control
+     * outcomes across the unusual cases that arise in very racy code
+     * with very few invariants. So these explicit checks would exist
+     * in some form anyway.  All fields are read into locals before
+     * use, and null-checked if they are references.  This is usually
+     * done in a "C"-like style of listing declarations at the heads
+     * of methods or blocks, and using inline assignments on first
+     * encounter.  Array bounds-checks are usually performed by
+     * masking with array.length-1, which relies on the invariant that
+     * these arrays are created with positive lengths, which is itself
+     * paranoically checked. Nearly all explicit checks lead to
+     * bypass/return, not exception throws, because they may
+     * legitimately arise due to cancellation/revocation during
+     * shutdown.
+     *
      * There is a lot of representation-level coupling among classes
      * ForkJoinPool, ForkJoinWorkerThread, and ForkJoinTask.  The
      * fields of WorkQueue maintain data structures managed by
@@ -527,22 +673,13 @@
      * trying to reduce this, since any associated future changes in
      * representations will need to be accompanied by algorithmic
      * changes anyway. Several methods intrinsically sprawl because
-     * they must accumulate sets of consistent reads of volatiles held
-     * in local variables.  Methods signalWork() and scan() are the
-     * main bottlenecks, so are especially heavily
-     * micro-optimized/mangled.  There are lots of inline assignments
-     * (of form "while ((local = field) != 0)") which are usually the
-     * simplest way to ensure the required read orderings (which are
-     * sometimes critical). This leads to a "C"-like style of listing
-     * declarations of these locals at the heads of methods or blocks.
-     * There are several occurrences of the unusual "do {} while
-     * (!cas...)"  which is the simplest way to force an update of a
-     * CAS'ed variable. There are also other coding oddities (including
-     * several unnecessary-looking hoisted null checks) that help
-     * some methods perform reasonably even when interpreted (not
-     * compiled).
+     * they must accumulate sets of consistent reads of fields held in
+     * local variables.  There are also other coding oddities
+     * (including several unnecessary-looking hoisted null checks)
+     * that help some methods perform reasonably even when interpreted
+     * (not compiled).
      *
-     * The order of declarations in this file is:
+     * The order of declarations in this file is (with a few exceptions):
      * (1) Static utility functions
      * (2) Nested (static) classes
      * (3) Static fields
@@ -609,56 +746,37 @@
         public final boolean exec() { return true; }
     }
 
+    // Constants shared across ForkJoinPool and WorkQueue
+
+    // Bounds
+    static final int SMASK        = 0xffff;        // short bits == max index
+    static final int MAX_CAP      = 0x7fff;        // max #workers - 1
+    static final int EVENMASK     = 0xfffe;        // even short bits
+    static final int SQMASK       = 0x007e;        // max 64 (even) slots
+
+    // Masks and units for WorkQueue.scanState and ctl sp subfield
+    static final int SCANNING     = 1;             // false when running tasks
+    static final int INACTIVE     = 1 << 31;       // must be negative
+    static final int SS_SEQ       = 1 << 16;       // version count
+
+    // Mode bits for ForkJoinPool.config and WorkQueue.config
+    static final int MODE_MASK    = 0xffff << 16;  // top half of int
+    static final int LIFO_QUEUE   = 0;
+    static final int FIFO_QUEUE   = 1 << 16;
+    static final int SHARED_QUEUE = 1 << 31;       // must be negative
+
     /**
      * Queues supporting work-stealing as well as external task
-     * submission. See above for main rationale and algorithms.
-     * Implementation relies heavily on "Unsafe" intrinsics
-     * and selective use of "volatile":
-     *
-     * Field "base" is the index (mod array.length) of the least valid
-     * queue slot, which is always the next position to steal (poll)
-     * from if nonempty. Reads and writes require volatile orderings
-     * but not CAS, because updates are only performed after slot
-     * CASes.
-     *
-     * Field "top" is the index (mod array.length) of the next queue
-     * slot to push to or pop from. It is written only by owner thread
-     * for push, or under lock for external/shared push, and accessed
-     * by other threads only after reading (volatile) base.  Both top
-     * and base are allowed to wrap around on overflow, but (top -
-     * base) (or more commonly -(base - top) to force volatile read of
-     * base before top) still estimates size. The lock ("qlock") is
-     * forced to -1 on termination, causing all further lock attempts
-     * to fail. (Note: we don't need CAS for termination state because
-     * upon pool shutdown, all shared-queues will stop being used
-     * anyway.)  Nearly all lock bodies are set up so that exceptions
-     * within lock bodies are "impossible" (modulo JVM errors that
-     * would cause failure anyway.)
-     *
-     * The array slots are read and written using the emulation of
-     * volatiles/atomics provided by Unsafe. Insertions must in
-     * general use putOrderedObject as a form of releasing store to
-     * ensure that all writes to the task object are ordered before
-     * its publication in the queue.  All removals entail a CAS to
-     * null.  The array is always a power of two. To ensure safety of
-     * Unsafe array operations, all accesses perform explicit null
-     * checks and implicit bounds checks via power-of-two masking.
-     *
-     * In addition to basic queuing support, this class contains
-     * fields described elsewhere to control execution. It turns out
-     * to work better memory-layout-wise to include them in this class
-     * rather than a separate class.
-     *
+     * submission. See above for descriptions and algorithms.
      * Performance on most platforms is very sensitive to placement of
      * instances of both WorkQueues and their arrays -- we absolutely
      * do not want multiple WorkQueue instances or multiple queue
-     * arrays sharing cache lines. (It would be best for queue objects
-     * and their arrays to share, but there is nothing available to
-     * help arrange that). The @Contended annotation alerts JVMs to
-     * try to keep instances apart.
+     * arrays sharing cache lines. The @Contended annotation alerts
+     * JVMs to try to keep instances apart.
      */
     @sun.misc.Contended
     static final class WorkQueue {
+
         /**
          * Capacity of work-stealing queue array upon initialization.
          * Must be a power of two; at least 4, but should be larger to
@@ -679,13 +797,13 @@
          */
         static final int MAXIMUM_QUEUE_CAPACITY = 1 << 26; // 64M
 
-        volatile int eventCount;   // encoded inactivation count; < 0 if inactive
-        int nextWait;              // encoded record of next event waiter
+        // Instance fields
+        volatile int scanState;    // versioned, <0: inactive; odd:scanning
+        int stackPred;             // pool stack (ctl) predecessor
         int nsteals;               // number of steals
-        int hint;                  // steal index hint
-        short poolIndex;           // index of this queue in pool
-        final short mode;          // 0: lifo, > 0: fifo, < 0: shared
-        volatile int qlock;        // 1: locked, -1: terminate; else 0
+        int hint;                  // randomization and stealer index hint
+        int config;                // pool index and mode
+        volatile int qlock;        // 1: locked, < 0: terminate; else 0
         volatile int base;         // index of next slot for poll
         int top;                   // index of next slot for push
         ForkJoinTask<?>[] array;   // the elements (initially unallocated)
@@ -693,19 +811,23 @@
         final ForkJoinWorkerThread owner; // owning thread or null if shared
         volatile Thread parker;    // == owner during call to park; else null
         volatile ForkJoinTask<?> currentJoin;  // task being joined in awaitJoin
-        ForkJoinTask<?> currentSteal; // current non-local task being executed
+        volatile ForkJoinTask<?> currentSteal; // mainly used by helpStealer
 
-        WorkQueue(ForkJoinPool pool, ForkJoinWorkerThread owner, int mode,
-                  int seed) {
+        WorkQueue(ForkJoinPool pool, ForkJoinWorkerThread owner) {
             this.pool = pool;
             this.owner = owner;
-            this.mode = (short)mode;
-            this.hint = seed; // store initial seed for runWorker
             // Place indices in the center of array (that is not yet allocated)
             base = top = INITIAL_QUEUE_CAPACITY >>> 1;
         }
 
         /**
+         * Returns an exportable index (used by ForkJoinWorkerThread).
+         */
+        final int getPoolIndex() {
+            return (config & 0xffff) >>> 1; // ignore odd/even tag bit
+        }
+
+        /**
          * Returns the approximate number of tasks in the queue.
          */
         final int queueSize() {
@@ -719,12 +841,10 @@
          * near-empty queue has at least one unclaimed task.
          */
         final boolean isEmpty() {
-            ForkJoinTask<?>[] a; int m, s;
-            int n = base - (s = top);
-            return (n >= 0 ||
-                    (n == -1 &&
-                     ((a = array) == null ||
-                      (m = a.length - 1) < 0 ||
+            ForkJoinTask<?>[] a; int n, m, s;
+            return ((n = base - (s = top)) >= 0 ||
+                    (n == -1 &&           // possibly one task
+                     ((a = array) == null || (m = a.length - 1) < 0 ||
                       U.getObject
                       (a, (long)((m & (s - 1)) << ASHIFT) + ABASE) == null)));
         }
@@ -738,12 +858,15 @@
          */
         final void push(ForkJoinTask<?> task) {
             ForkJoinTask<?>[] a; ForkJoinPool p;
-            int s = top, n;
+            int b = base, s = top, n;
             if ((a = array) != null) {    // ignore if queue removed
-                int m = a.length - 1;
+                int m = a.length - 1;     // fenced write for task visibility
                 U.putOrderedObject(a, ((m & s) << ASHIFT) + ABASE, task);
-                if ((n = (top = s + 1) - base) <= 2)
-                    (p = pool).signalWork(p.workQueues, this);
+                U.putOrderedInt(this, QTOP, s + 1);
+                if ((n = s - b) <= 1) {
+                    if ((p = pool) != null)
+                        p.signalWork(p.workQueues, this);
+                }
                 else if (n >= m)
                     growArray();
             }
@@ -764,7 +887,7 @@
             if (oldA != null && (oldMask = oldA.length - 1) >= 0 &&
                 (t = top) - (b = base) > 0) {
                 int mask = size - 1;
-                do {
+                do { // emulate poll from old array, push to new array
                     ForkJoinTask<?> x;
                     int oldj = ((b & oldMask) << ASHIFT) + ABASE;
                     int j    = ((b &    mask) << ASHIFT) + ABASE;
@@ -789,7 +912,7 @@
                     if ((t = (ForkJoinTask<?>)U.getObject(a, j)) == null)
                         break;
                     if (U.compareAndSwapObject(a, j, t, null)) {
-                        top = s;
+                        U.putOrderedInt(this, QTOP, s);
                         return t;
                     }
                 }
@@ -800,7 +923,7 @@
         /**
          * Takes a task in FIFO order if b is base of queue and a task
          * can be claimed without contention. Specialized versions
-         * appear in ForkJoinPool methods scan and tryHelpStealer.
+         * appear in ForkJoinPool methods scan and helpStealer.
          */
         final ForkJoinTask<?> pollAt(int b) {
             ForkJoinTask<?> t; ForkJoinTask<?>[] a;
@@ -808,7 +931,7 @@
                 int j = (((a.length - 1) & b) << ASHIFT) + ABASE;
                 if ((t = (ForkJoinTask<?>)U.getObjectVolatile(a, j)) != null &&
                     base == b && U.compareAndSwapObject(a, j, t, null)) {
-                    U.putOrderedInt(this, QBASE, b + 1);
+                    base = b + 1;
                     return t;
                 }
             }
@@ -823,16 +946,15 @@
             while ((b = base) - top < 0 && (a = array) != null) {
                 int j = (((a.length - 1) & b) << ASHIFT) + ABASE;
                 t = (ForkJoinTask<?>)U.getObjectVolatile(a, j);
-                if (t != null) {
-                    if (U.compareAndSwapObject(a, j, t, null)) {
-                        U.putOrderedInt(this, QBASE, b + 1);
-                        return t;
+                if (base == b) {
+                    if (t != null) {
+                        if (U.compareAndSwapObject(a, j, t, null)) {
+                            base = b + 1;
+                            return t;
+                        }
                     }
-                }
-                else if (base == b) {
-                    if (b + 1 == top)
+                    else if (b + 1 == top) // now empty
                         break;
-                    Thread.yield(); // wait for lagging update (very rare)
                 }
             }
             return null;
@@ -842,7 +964,7 @@
          * Takes next task, if one exists, in order specified by mode.
          */
         final ForkJoinTask<?> nextLocalTask() {
-            return mode == 0 ? pop() : poll();
+            return (config & FIFO_QUEUE) == 0 ? pop() : poll();
         }
 
         /**
@@ -852,7 +974,7 @@
             ForkJoinTask<?>[] a = array; int m;
             if (a == null || (m = a.length - 1) < 0)
                 return null;
-            int i = mode == 0 ? top - 1 : base;
+            int i = (config & FIFO_QUEUE) == 0 ? top - 1 : base;
             int j = ((i & m) << ASHIFT) + ABASE;
             return (ForkJoinTask<?>)U.getObjectVolatile(a, j);
         }
@@ -860,13 +982,13 @@
         /**
          * Pops the given task only if it is at the current top.
          * (A shared version is available only via FJP.tryExternalUnpush)
-         */
+        */
         final boolean tryUnpush(ForkJoinTask<?> t) {
             ForkJoinTask<?>[] a; int s;
             if ((a = array) != null && (s = top) != base &&
                 U.compareAndSwapObject
                 (a, (((a.length - 1) & --s) << ASHIFT) + ABASE, t, null)) {
-                top = s;
+                U.putOrderedInt(this, QTOP, s);
                 return true;
             }
             return false;
@@ -876,9 +998,16 @@
          * Removes and cancels all known tasks, ignoring any exceptions.
          */
         final void cancelAll() {
-            ForkJoinTask.cancelIgnoringExceptions(currentJoin);
-            ForkJoinTask.cancelIgnoringExceptions(currentSteal);
-            for (ForkJoinTask<?> t; (t = poll()) != null; )
+            ForkJoinTask<?> t;
+            if ((t = currentJoin) != null) {
+                currentJoin = null;
+                ForkJoinTask.cancelIgnoringExceptions(t);
+            }
+            if ((t = currentSteal) != null) {
+                currentSteal = null;
+                ForkJoinTask.cancelIgnoringExceptions(t);
+            }
+            while ((t = poll()) != null)
                 ForkJoinTask.cancelIgnoringExceptions(t);
         }
 
@@ -893,167 +1022,186 @@
         }
 
         /**
-         * Executes a top-level task and any local tasks remaining
-         * after execution.
+         * Removes and executes all local tasks. If LIFO, invokes
+         * pollAndExecAll. Otherwise implements a specialized pop loop
+         * to exec until empty.
+         */
+        final void execLocalTasks() {
+            int b = base, m, s;
+            ForkJoinTask<?>[] a = array;
+            if (b - (s = top - 1) <= 0 && a != null &&
+                (m = a.length - 1) >= 0) {
+                if ((config & FIFO_QUEUE) == 0) {
+                    for (ForkJoinTask<?> t;;) {
+                        if ((t = (ForkJoinTask<?>)U.getAndSetObject
+                             (a, ((m & s) << ASHIFT) + ABASE, null)) == null)
+                            break;
+                        U.putOrderedInt(this, QTOP, s);
+                        t.doExec();
+                        if (base - (s = top - 1) > 0)
+                            break;
+                    }
+                }
+                else
+                    pollAndExecAll();
+            }
+        }
+
+        /**
+         * Executes the given task and any remaining local tasks.
          */
         final void runTask(ForkJoinTask<?> task) {
-            if ((currentSteal = task) != null) {
-                ForkJoinWorkerThread thread;
-                task.doExec();
-                ForkJoinTask<?>[] a = array;
-                int md = mode;
-                ++nsteals;
-                currentSteal = null;
-                if (md != 0)
-                    pollAndExecAll();
-                else if (a != null) {
-                    int s, m = a.length - 1;
-                    ForkJoinTask<?> t;
-                    while ((s = top - 1) - base >= 0 &&
-                           (t = (ForkJoinTask<?>)U.getAndSetObject
-                            (a, ((m & s) << ASHIFT) + ABASE, null)) != null) {
-                        top = s;
-                        t.doExec();
-                    }
-                }
-                if ((thread = owner) != null) // no need to do in finally clause
+            if (task != null) {
+                scanState &= ~SCANNING; // mark as busy
+                (currentSteal = task).doExec();
+                U.putOrderedObject(this, QCURRENTSTEAL, null); // release for GC
+                execLocalTasks();
+                ForkJoinWorkerThread thread = owner;
+                if (++nsteals < 0)      // collect on overflow
+                    transferStealCount(pool);
+                scanState |= SCANNING;
+                if (thread != null)
                     thread.afterTopLevelExec();
             }
         }
 
         /**
+         * Adds steal count to pool stealCounter if it exists, and resets.
+         */
+        final void transferStealCount(ForkJoinPool p) {
+            AtomicLong sc;
+            if (p != null && (sc = p.stealCounter) != null) {
+                int s = nsteals;
+                nsteals = 0;            // if negative, correct for overflow
+                sc.getAndAdd((long)(s < 0 ? Integer.MAX_VALUE : s));
+            }
+        }
+
+        /**
          * If present, removes from queue and executes the given task,
-         * or any other cancelled task. Returns (true) on any CAS
-         * or consistency check failure so caller can retry.
+         * or any other cancelled task. Used only by awaitJoin.
          *
-         * @return false if no progress can be made, else true
+         * @return true if queue empty and task not known to be done
          */
         final boolean tryRemoveAndExec(ForkJoinTask<?> task) {
-            boolean stat;
             ForkJoinTask<?>[] a; int m, s, b, n;
-            if (task != null && (a = array) != null && (m = a.length - 1) >= 0 &&
-                (n = (s = top) - (b = base)) > 0) {
-                boolean removed = false, empty = true;
-                stat = true;
-                for (ForkJoinTask<?> t;;) {           // traverse from s to b
-                    long j = ((--s & m) << ASHIFT) + ABASE;
-                    t = (ForkJoinTask<?>)U.getObject(a, j);
-                    if (t == null)                    // inconsistent length
-                        break;
-                    else if (t == task) {
-                        if (s + 1 == top) {           // pop
-                            if (!U.compareAndSwapObject(a, j, task, null))
-                                break;
-                            top = s;
-                            removed = true;
+            if ((a = array) != null && (m = a.length - 1) >= 0 &&
+                task != null) {
+                while ((n = (s = top) - (b = base)) > 0) {
+                    for (ForkJoinTask<?> t;;) {      // traverse from s to b
+                        long j = ((--s & m) << ASHIFT) + ABASE;
+                        if ((t = (ForkJoinTask<?>)U.getObject(a, j)) == null)
+                            return s + 1 == top;     // shorter than expected
+                        else if (t == task) {
+                            boolean removed = false;
+                            if (s + 1 == top) {      // pop
+                                if (U.compareAndSwapObject(a, j, task, null)) {
+                                    U.putOrderedInt(this, QTOP, s);
+                                    removed = true;
+                                }
+                            }
+                            else if (base == b)      // replace with proxy
+                                removed = U.compareAndSwapObject(
+                                    a, j, task, new EmptyTask());
+                            if (removed)
+                                task.doExec();
+                            break;
                         }
-                        else if (base == b)           // replace with proxy
-                            removed = U.compareAndSwapObject(a, j, task,
-                                                             new EmptyTask());
-                        break;
-                    }
-                    else if (t.status >= 0)
-                        empty = false;
-                    else if (s + 1 == top) {          // pop and throw away
-                        if (U.compareAndSwapObject(a, j, t, null))
-                            top = s;
-                        break;
+                        else if (t.status < 0 && s + 1 == top) {
+                            if (U.compareAndSwapObject(a, j, t, null))
+                                U.putOrderedInt(this, QTOP, s);
+                            break;                  // was cancelled
+                        }
+                        if (--n == 0)
+                            return false;
                     }
-                    if (--n == 0) {
-                        if (!empty && base == b)
-                            stat = false;
-                        break;
-                    }
+                    if (task.status < 0)
+                        return false;
                 }
-                if (removed)
-                    task.doExec();
             }
-            else
-                stat = false;
-            return stat;
+            return true;
         }
 
         /**
-         * Tries to poll for and execute the given task or any other
-         * task in its CountedCompleter computation.
+         * Pops task if in the same CC computation as the given task,
+         * in either shared or owned mode. Used only by helpComplete.
          */
-        final boolean pollAndExecCC(CountedCompleter<?> root) {
-            ForkJoinTask<?>[] a; int b; Object o; CountedCompleter<?> t, r;
-            if ((b = base) - top < 0 && (a = array) != null) {
-                long j = (((a.length - 1) & b) << ASHIFT) + ABASE;
-                if ((o = U.getObjectVolatile(a, j)) == null)
-                    return true; // retry
-                if (o instanceof CountedCompleter) {
-                    for (t = (CountedCompleter<?>)o, r = t;;) {
-                        if (r == root) {
-                            if (base == b &&
-                                U.compareAndSwapObject(a, j, t, null)) {
-                                U.putOrderedInt(this, QBASE, b + 1);
-                                t.doExec();
-                            }
-                            return true;
-                        }
-                        else if ((r = r.completer) == null)
-                            break; // not part of root computation
-                    }
-                }
-            }
-            return false;
-        }
-
-        /**
-         * Tries to pop and execute the given task or any other task
-         * in its CountedCompleter computation.
-         */
-        final boolean externalPopAndExecCC(CountedCompleter<?> root) {
-            ForkJoinTask<?>[] a; int s; Object o; CountedCompleter<?> t, r;
+        final CountedCompleter<?> popCC(CountedCompleter<?> task, int mode) {
+            int s; ForkJoinTask<?>[] a; Object o;
             if (base - (s = top) < 0 && (a = array) != null) {
                 long j = (((a.length - 1) & (s - 1)) << ASHIFT) + ABASE;
-                if ((o = U.getObject(a, j)) instanceof CountedCompleter) {
-                    for (t = (CountedCompleter<?>)o, r = t;;) {
-                        if (r == root) {
-                            if (U.compareAndSwapInt(this, QLOCK, 0, 1)) {
-                                if (top == s && array == a &&
-                                    U.compareAndSwapObject(a, j, t, null)) {
-                                    top = s - 1;
-                                    qlock = 0;
-                                    t.doExec();
+                if ((o = U.getObjectVolatile(a, j)) != null &&
+                    (o instanceof CountedCompleter)) {
+                    CountedCompleter<?> t = (CountedCompleter<?>)o;
+                    for (CountedCompleter<?> r = t;;) {
+                        if (r == task) {
+                            if (mode < 0) { // must lock
+                                if (U.compareAndSwapInt(this, QLOCK, 0, 1)) {
+                                    if (top == s && array == a &&
+                                        U.compareAndSwapObject(a, j, t, null)) {
+                                        U.putOrderedInt(this, QTOP, s - 1);
+                                        U.putOrderedInt(this, QLOCK, 0);
+                                        return t;
+                                    }
+                                    U.compareAndSwapInt(this, QLOCK, 1, 0);
                                 }
-                                else
-                                    qlock = 0;
                             }
-                            return true;
+                            else if (U.compareAndSwapObject(a, j, t, null)) {
+                                U.putOrderedInt(this, QTOP, s - 1);
+                                return t;
+                            }
+                            break;
                         }
-                        else if ((r = r.completer) == null)
+                        else if ((r = r.completer) == null) // try parent
                             break;
                     }
                 }
             }
-            return false;
+            return null;
         }
 
         /**
-         * Internal version
+         * Steals and runs a task in the same CC computation as the
+         * given task if one exists and can be taken without
+         * contention. Otherwise returns a checksum/control value for
+         * use by method helpComplete.
+         *
+         * @return 1 if successful, 2 if retryable (lost to another
+         * stealer), -1 if non-empty but no matching task found, else
+         * the base index, forced negative.
          */
-        final boolean internalPopAndExecCC(CountedCompleter<?> root) {
-            ForkJoinTask<?>[] a; int s; Object o; CountedCompleter<?> t, r;
-            if (base - (s = top) < 0 && (a = array) != null) {
-                long j = (((a.length - 1) & (s - 1)) << ASHIFT) + ABASE;
-                if ((o = U.getObject(a, j)) instanceof CountedCompleter) {
-                    for (t = (CountedCompleter<?>)o, r = t;;) {
-                        if (r == root) {
-                            if (U.compareAndSwapObject(a, j, t, null)) {
-                                top = s - 1;
+        final int pollAndExecCC(CountedCompleter<?> task) {
+            int b, h; ForkJoinTask<?>[] a; Object o;
+            if ((b = base) - top >= 0 || (a = array) == null)
+                h = b | Integer.MIN_VALUE;  // to sense movement on re-poll
+            else {
+                long j = (((a.length - 1) & b) << ASHIFT) + ABASE;
+                if ((o = U.getObjectVolatile(a, j)) == null)
+                    h = 2;                  // retryable
+                else if (!(o instanceof CountedCompleter))
+                    h = -1;                 // unmatchable
+                else {
+                    CountedCompleter<?> t = (CountedCompleter<?>)o;
+                    for (CountedCompleter<?> r = t;;) {
+                        if (r == task) {
+                            if (base == b &&
+                                U.compareAndSwapObject(a, j, t, null)) {
+                                base = b + 1;
                                 t.doExec();
+                                h = 1;      // success
                             }
-                            return true;
+                            else
+                                h = 2;      // lost CAS
+                            break;
                         }
-                        else if ((r = r.completer) == null)
+                        else if ((r = r.completer) == null) {
+                            h = -1;         // unmatched
                             break;
+                        }
                     }
                 }
             }
-            return false;
+            return h;
         }
 
         /**
@@ -1061,28 +1209,31 @@
          */
         final boolean isApparentlyUnblocked() {
             Thread wt; Thread.State s;
-            return (eventCount >= 0 &&
+            return (scanState >= 0 &&
                     (wt = owner) != null &&
                     (s = wt.getState()) != Thread.State.BLOCKED &&
                     s != Thread.State.WAITING &&
                     s != Thread.State.TIMED_WAITING);
         }
 
-        // Unsafe mechanics
+        // Unsafe mechanics. Note that some are (and must be) the same as in FJP
         private static final sun.misc.Unsafe U;
-        private static final long QBASE;
+        private static final int  ABASE;
+        private static final int  ASHIFT;
+        private static final long QTOP;
         private static final long QLOCK;
-        private static final int ABASE;
-        private static final int ASHIFT;
+        private static final long QCURRENTSTEAL;
         static {
             try {
                 U = sun.misc.Unsafe.getUnsafe();
-                Class<?> k = WorkQueue.class;
+                Class<?> wk = WorkQueue.class;
                 Class<?> ak = ForkJoinTask[].class;
-                QBASE = U.objectFieldOffset
-                    (k.getDeclaredField("base"));
+                QTOP = U.objectFieldOffset
+                    (wk.getDeclaredField("top"));
                 QLOCK = U.objectFieldOffset
-                    (k.getDeclaredField("qlock"));
+                    (wk.getDeclaredField("qlock"));
+                QCURRENTSTEAL = U.objectFieldOffset
+                    (wk.getDeclaredField("currentSteal"));
                 ABASE = U.arrayBaseOffset(ak);
                 int scale = U.arrayIndexScale(ak);
                 if ((scale & (scale - 1)) != 0)
@@ -1126,6 +1277,11 @@
     static final int commonParallelism;
 
     /**
+     * Limit on spare thread construction in tryCompensate.
+     */
+    private static int commonMaxSpares;
+
+    /**
      * Sequence number for creating workerNamePrefix.
      */
     private static int poolNumberSequence;
@@ -1138,7 +1294,7 @@
         return ++poolNumberSequence;
     }
 
-    // static constants
+    // static configuration constants
 
     /**
      * Initial timeout value (in nanoseconds) for the thread
@@ -1148,27 +1304,32 @@
      * aggressive shrinkage during most transient stalls (long GCs
      * etc).
      */
-    private static final long IDLE_TIMEOUT      = 2000L * 1000L * 1000L; // 2sec
-
-    /**
-     * Timeout value when there are more threads than parallelism level
-     */
-    private static final long FAST_IDLE_TIMEOUT =  200L * 1000L * 1000L;
+    private static final long IDLE_TIMEOUT = 2000L * 1000L * 1000L; // 2sec
 
     /**
      * Tolerance for idle timeouts, to cope with timer undershoots
      */
-    private static final long TIMEOUT_SLOP = 2000000L;
+    private static final long TIMEOUT_SLOP = 20L * 1000L * 1000L;  // 20ms
 
     /**
-     * The maximum stolen->joining link depth allowed in method
-     * tryHelpStealer.  Must be a power of two.  Depths for legitimate
-     * chains are unbounded, but we use a fixed constant to avoid
-     * (otherwise unchecked) cycles and to bound staleness of
-     * traversal parameters at the expense of sometimes blocking when
-     * we could be helping.
+     * The initial value for commonMaxSpares during static
+     * initialization. The value is far in excess of normal
+     * requirements, but also far short of MAX_CAP and typical
+     * OS thread limits, so allows JVMs to catch misuse/abuse
+     * before running out of resources needed to do so.
      */
-    private static final int MAX_HELP = 64;
+    private static final int DEFAULT_COMMON_MAX_SPARES = 256;
+
+    /**
+     * Number of times to spin-wait before blocking. The spins (in
+     * awaitRunStateLock and awaitWork) currently use randomized
+     * spins. If/when MWAIT-like intrinsics becomes available, they
+     * may allow quieter spinning. The value of SPINS must be a power
+     * of two, at least 4. The current value causes spinning for a
+     * small fraction of typical context-switch times, well worthwhile
+     * given the typical likelihoods that blocking is not necessary.
+     */
+    private static final int SPINS  = 1 << 11;
 
     /**
      * Increment for seed generators. See class ThreadLocal for
@@ -1177,209 +1338,212 @@
     private static final int SEED_INCREMENT = 0x9e3779b9;
 
     /*
-     * Bits and masks for control variables
-     *
-     * Field ctl is a long packed with:
-     * AC: Number of active running workers minus target parallelism (16 bits)
-     * TC: Number of total workers minus target parallelism (16 bits)
-     * ST: true if pool is terminating (1 bit)
-     * EC: the wait count of top waiting thread (15 bits)
-     * ID: poolIndex of top of Treiber stack of waiters (16 bits)
+     * Bits and masks for field ctl, packed with 4 16 bit subfields:
+     * AC: Number of active running workers minus target parallelism
+     * TC: Number of total workers minus target parallelism
+     * SS: version count and status of top waiting thread
+     * ID: poolIndex of top of Treiber stack of waiters
      *
-     * When convenient, we can extract the upper 32 bits of counts and
-     * the lower 32 bits of queue state, u = (int)(ctl >>> 32) and e =
-     * (int)ctl.  The ec field is never accessed alone, but always
-     * together with id and st. The offsets of counts by the target
-     * parallelism and the positionings of fields makes it possible to
-     * perform the most common checks via sign tests of fields: When
-     * ac is negative, there are not enough active workers, when tc is
-     * negative, there are not enough total workers, and when e is
-     * negative, the pool is terminating.  To deal with these possibly
-     * negative fields, we use casts in and out of "short" and/or
-     * signed shifts to maintain signedness.
+     * When convenient, we can extract the lower 32 stack top bits
+     * (including version bits) as sp=(int)ctl.  The offsets of counts
+     * by the target parallelism and the positionings of fields makes
+     * it possible to perform the most common checks via sign tests of
+     * fields: When ac is negative, there are not enough active
+     * workers, when tc is negative, there are not enough total
+     * workers.  When sp is non-zero, there are waiting workers.  To
+     * deal with possibly negative fields, we use casts in and out of
+     * "short" and/or signed shifts to maintain signedness.
      *
-     * When a thread is queued (inactivated), its eventCount field is
-     * set negative, which is the only way to tell if a worker is
-     * prevented from executing tasks, even though it must continue to
-     * scan for them to avoid queuing races. Note however that
-     * eventCount updates lag releases so usage requires care.
-     *
-     * Field plock is an int packed with:
-     * SHUTDOWN: true if shutdown is enabled (1 bit)
-     * SEQ:  a sequence lock, with PL_LOCK bit set if locked (30 bits)
-     * SIGNAL: set when threads may be waiting on the lock (1 bit)
-     *
-     * The sequence number enables simple consistency checks:
-     * Staleness of read-only operations on the workQueues array can
-     * be checked by comparing plock before vs after the reads.
+     * Because it occupies uppermost bits, we can add one active count
+     * using getAndAddLong of AC_UNIT, rather than CAS, when returning
+     * from a blocked join.  Other updates entail multiple subfields
+     * and masking, requiring CAS.
      */
 
-    // bit positions/shifts for fields
-    private static final int  AC_SHIFT   = 48;
-    private static final int  TC_SHIFT   = 32;
-    private static final int  ST_SHIFT   = 31;
-    private static final int  EC_SHIFT   = 16;
+    // Lower and upper word masks
+    private static final long SP_MASK    = 0xffffffffL;
+    private static final long UC_MASK    = ~SP_MASK;
 
-    // bounds
-    private static final int  SMASK      = 0xffff;  // short bits
-    private static final int  MAX_CAP    = 0x7fff;  // max #workers - 1
-    private static final int  EVENMASK   = 0xfffe;  // even short bits
-    private static final int  SQMASK     = 0x007e;  // max 64 (even) slots
-    private static final int  SHORT_SIGN = 1 << 15;
-    private static final int  INT_SIGN   = 1 << 31;
-
-    // masks
-    private static final long STOP_BIT   = 0x0001L << ST_SHIFT;
-    private static final long AC_MASK    = ((long)SMASK) << AC_SHIFT;
-    private static final long TC_MASK    = ((long)SMASK) << TC_SHIFT;
-
-    // units for incrementing and decrementing
-    private static final long TC_UNIT    = 1L << TC_SHIFT;
-    private static final long AC_UNIT    = 1L << AC_SHIFT;
+    // Active counts
+    private static final int  AC_SHIFT   = 48;
+    private static final long AC_UNIT    = 0x0001L << AC_SHIFT;
+    private static final long AC_MASK    = 0xffffL << AC_SHIFT;
 
-    // masks and units for dealing with u = (int)(ctl >>> 32)
-    private static final int  UAC_SHIFT  = AC_SHIFT - 32;
-    private static final int  UTC_SHIFT  = TC_SHIFT - 32;
-    private static final int  UAC_MASK   = SMASK << UAC_SHIFT;
-    private static final int  UTC_MASK   = SMASK << UTC_SHIFT;
-    private static final int  UAC_UNIT   = 1 << UAC_SHIFT;
-    private static final int  UTC_UNIT   = 1 << UTC_SHIFT;
+    // Total counts
+    private static final int  TC_SHIFT   = 32;
+    private static final long TC_UNIT    = 0x0001L << TC_SHIFT;
+    private static final long TC_MASK    = 0xffffL << TC_SHIFT;
+    private static final long ADD_WORKER = 0x0001L << (TC_SHIFT + 15); // sign
 
-    // masks and units for dealing with e = (int)ctl
-    private static final int E_MASK      = 0x7fffffff; // no STOP_BIT
-    private static final int E_SEQ       = 1 << EC_SHIFT;
-
-    // plock bits
-    private static final int SHUTDOWN    = 1 << 31;
-    private static final int PL_LOCK     = 2;
-    private static final int PL_SIGNAL   = 1;
-    private static final int PL_SPINS    = 1 << 8;
-
-    // access mode for WorkQueue
-    static final int LIFO_QUEUE          =  0;
-    static final int FIFO_QUEUE          =  1;
-    static final int SHARED_QUEUE        = -1;
+    // runState bits: SHUTDOWN must be negative, others arbitrary powers of two
+    private static final int  RSLOCK     = 1;
+    private static final int  RSIGNAL    = 1 << 1;
+    private static final int  STARTED    = 1 << 2;
+    private static final int  STOP       = 1 << 29;
+    private static final int  TERMINATED = 1 << 30;
+    private static final int  SHUTDOWN   = 1 << 31;
 
     // Instance fields
-    volatile long stealCount;                  // collects worker counts
-    volatile long ctl;                         // main pool control
-    volatile int plock;                        // shutdown status and seqLock
-    volatile int indexSeed;                    // worker/submitter index seed
-    final short parallelism;                   // parallelism level
-    final short mode;                          // LIFO/FIFO
-    WorkQueue[] workQueues;                    // main registry
+    volatile long ctl;                   // main pool control
+    volatile int runState;               // lockable status
+    final int config;                    // parallelism, mode
+    int indexSeed;                       // to generate worker index
+    volatile WorkQueue[] workQueues;     // main registry
     final ForkJoinWorkerThreadFactory factory;
-    final UncaughtExceptionHandler ueh;        // per-worker UEH
-    final String workerNamePrefix;             // to create worker name string
+    final UncaughtExceptionHandler ueh;  // per-worker UEH
+    final String workerNamePrefix;       // to create worker name string
+    volatile AtomicLong stealCounter;    // also used as sync monitor
+
+    /**
+     * Acquires the runState lock; returns current (locked) runState.
+     */
+    private int lockRunState() {
+        int rs;
+        return ((((rs = runState) & RSLOCK) != 0 ||
+                 !U.compareAndSwapInt(this, RUNSTATE, rs, rs |= RSLOCK)) ?
+                awaitRunStateLock() : rs);
+    }
 
     /**
-     * Acquires the plock lock to protect worker array and related
-     * updates. This method is called only if an initial CAS on plock
-     * fails. This acts as a spinlock for normal cases, but falls back
-     * to builtin monitor to block when (rarely) needed. This would be
-     * a terrible idea for a highly contended lock, but works fine as
-     * a more conservative alternative to a pure spinlock.
+     * Spins and/or blocks until runstate lock is available.  See
+     * above for explanation.
      */
-    private int acquirePlock() {
-        int spins = PL_SPINS, ps, nps;
-        for (;;) {
-            if (((ps = plock) & PL_LOCK) == 0 &&
-                U.compareAndSwapInt(this, PLOCK, ps, nps = ps + PL_LOCK))
-                return nps;
-            else if (spins >= 0) {
-                if (ThreadLocalRandom.nextSecondarySeed() >= 0)
+    private int awaitRunStateLock() {
+        Object lock;
+        boolean wasInterrupted = false;
+        for (int spins = SPINS, r = 0, rs, ns;;) {
+            if (((rs = runState) & RSLOCK) == 0) {
+                if (U.compareAndSwapInt(this, RUNSTATE, rs, ns = rs | RSLOCK)) {
+                    if (wasInterrupted) {
+                        try {
+                            Thread.currentThread().interrupt();
+                        } catch (SecurityException ignore) {
+                        }
+                    }
+                    return ns;
+                }
+            }
+            else if (r == 0)
+                r = ThreadLocalRandom.nextSecondarySeed();
+            else if (spins > 0) {
+                r ^= r << 6; r ^= r >>> 21; r ^= r << 7; // xorshift
+                if (r >= 0)
                     --spins;
             }
-            else if (U.compareAndSwapInt(this, PLOCK, ps, ps | PL_SIGNAL)) {
-                synchronized (this) {
-                    if ((plock & PL_SIGNAL) != 0) {
+            else if ((rs & STARTED) == 0 || (lock = stealCounter) == null)
+                Thread.yield();   // initialization race
+            else if (U.compareAndSwapInt(this, RUNSTATE, rs, rs | RSIGNAL)) {
+                synchronized (lock) {
+                    if ((runState & RSIGNAL) != 0) {
                         try {
-                            wait();
+                            lock.wait();
                         } catch (InterruptedException ie) {
-                            try {
-                                Thread.currentThread().interrupt();
-                            } catch (SecurityException ignore) {
-                            }
+                            if (!(Thread.currentThread() instanceof
+                                  ForkJoinWorkerThread))
+                                wasInterrupted = true;
                         }
                     }
                     else
-                        notifyAll();
+                        lock.notifyAll();
                 }
             }
         }
     }
 
     /**
-     * Unlocks and signals any thread waiting for plock. Called only
-     * when CAS of seq value for unlock fails.
+     * Unlocks and sets runState to newRunState.
+     *
+     * @param oldRunState a value returned from lockRunState
+     * @param newRunState the next value (must have lock bit clear).
      */
-    private void releasePlock(int ps) {
-        plock = ps;
-        synchronized (this) { notifyAll(); }
+    private void unlockRunState(int oldRunState, int newRunState) {
+        if (!U.compareAndSwapInt(this, RUNSTATE, oldRunState, newRunState)) {
+            Object lock = stealCounter;
+            runState = newRunState;              // clears RSIGNAL bit
+            if (lock != null)
+                synchronized (lock) { lock.notifyAll(); }
+        }
+    }
+
+    // Creating, registering and deregistering workers
+
+    /**
+     * Tries to construct and start one worker. Assumes that total
+     * count has already been incremented as a reservation.  Invokes
+     * deregisterWorker on any failure.
+     *
+     * @return true if successful
+     */
+    private boolean createWorker() {
+        ForkJoinWorkerThreadFactory fac = factory;
+        Throwable ex = null;
+        ForkJoinWorkerThread wt = null;
+        try {
+            if (fac != null && (wt = fac.newThread(this)) != null) {
+                wt.start();
+                return true;
+            }
+        } catch (Throwable rex) {
+            ex = rex;
+        }
+        deregisterWorker(wt, ex);
+        return false;
     }
 
     /**
-     * Tries to create and start one worker if fewer than target
-     * parallelism level exist. Adjusts counts etc on failure.
+     * Tries to add one worker, incrementing ctl counts before doing
+     * so, relying on createWorker to back out on failure.
+     *
+     * @param c incoming ctl value, with total count negative and no
+     * idle workers.  On CAS failure, c is refreshed and retried if
+     * this holds (otherwise, a new worker is not needed).
      */
-    private void tryAddWorker() {
-        long c; int u, e;
-        while ((u = (int)((c = ctl) >>> 32)) < 0 &&
-               (u & SHORT_SIGN) != 0 && (e = (int)c) >= 0) {
-            long nc = ((long)(((u + UTC_UNIT) & UTC_MASK) |
-                              ((u + UAC_UNIT) & UAC_MASK)) << 32) | (long)e;
-            if (U.compareAndSwapLong(this, CTL, c, nc)) {
-                ForkJoinWorkerThreadFactory fac;
-                Throwable ex = null;
-                ForkJoinWorkerThread wt = null;
-                try {
-                    if ((fac = factory) != null &&
-                        (wt = fac.newThread(this)) != null) {
-                        wt.start();
-                        break;
-                    }
-                } catch (Throwable rex) {
-                    ex = rex;
+    private void tryAddWorker(long c) {
+        boolean add = false;
+        do {
+            long nc = ((AC_MASK & (c + AC_UNIT)) |
+                       (TC_MASK & (c + TC_UNIT)));
+            if (ctl == c) {
+                int rs, stop;                 // check if terminating
+                if ((stop = (rs = lockRunState()) & STOP) == 0)
+                    add = U.compareAndSwapLong(this, CTL, c, nc);
+                unlockRunState(rs, rs & ~RSLOCK);
+                if (stop != 0)
+                    break;
+                if (add) {
+                    createWorker();
+                    break;
                 }
-                deregisterWorker(wt, ex);
-                break;
             }
-        }
+        } while (((c = ctl) & ADD_WORKER) != 0L && (int)c == 0);
     }
 
-    //  Registering and deregistering workers
-
     /**
-     * Callback from ForkJoinWorkerThread to establish and record its
-     * WorkQueue. To avoid scanning bias due to packing entries in
-     * front of the workQueues array, we treat the array as a simple
-     * power-of-two hash table using per-thread seed as hash,
-     * expanding as needed.
+     * Callback from ForkJoinWorkerThread constructor to establish and
+     * record its WorkQueue.
      *
      * @param wt the worker thread
      * @return the worker's queue
      */
     final WorkQueue registerWorker(ForkJoinWorkerThread wt) {
-        UncaughtExceptionHandler handler; WorkQueue[] ws; int s, ps;
-        wt.setDaemon(true);
+        UncaughtExceptionHandler handler;
+        wt.setDaemon(true);                           // configure thread
         if ((handler = ueh) != null)
             wt.setUncaughtExceptionHandler(handler);
-        do {} while (!U.compareAndSwapInt(this, INDEXSEED, s = indexSeed,
-                                          s += SEED_INCREMENT) ||
-                     s == 0); // skip 0
-        WorkQueue w = new WorkQueue(this, wt, mode, s);
-        if (((ps = plock) & PL_LOCK) != 0 ||
-            !U.compareAndSwapInt(this, PLOCK, ps, ps += PL_LOCK))
-            ps = acquirePlock();
-        int nps = (ps & SHUTDOWN) | ((ps + PL_LOCK) & ~SHUTDOWN);
+        WorkQueue w = new WorkQueue(this, wt);
+        int i = 0;                                    // assign a pool index
+        int mode = config & MODE_MASK;
+        int rs = lockRunState();
         try {
-            if ((ws = workQueues) != null) {    // skip if shutting down
-                int n = ws.length, m = n - 1;
-                int r = (s << 1) | 1;           // use odd-numbered indices
-                if (ws[r &= m] != null) {       // collision
-                    int probes = 0;             // step by approx half size
+            WorkQueue[] ws; int n;                    // skip if no array
+            if ((ws = workQueues) != null && (n = ws.length) > 0) {
+                int s = indexSeed += SEED_INCREMENT;  // unlikely to collide
+                int m = n - 1;
+                i = ((s << 1) | 1) & m;               // odd-numbered indices
+                if (ws[i] != null) {                  // collision
+                    int probes = 0;                   // step by approx half n
                     int step = (n <= 4) ? 2 : ((n >>> 1) & EVENMASK) + 2;
-                    while (ws[r = (r + step) & m] != null) {
+                    while (ws[i = (i + step) & m] != null) {
                         if (++probes >= n) {
                             workQueues = ws = Arrays.copyOf(ws, n <<= 1);
                             m = n - 1;
@@ -1387,15 +1551,15 @@
                         }
                     }
                 }
-                w.poolIndex = (short)r;
-                w.eventCount = r; // volatile write orders
-                ws[r] = w;
+                w.hint = s;                           // use as random seed
+                w.config = i | mode;
+                w.scanState = i;                      // publication fence
+                ws[i] = w;
             }
         } finally {
-            if (!U.compareAndSwapInt(this, PLOCK, ps, nps))
-                releasePlock(nps);
+            unlockRunState(rs, rs & ~RSLOCK);
         }
-        wt.setName(workerNamePrefix.concat(Integer.toString(w.poolIndex >>> 1)));
+        wt.setName(workerNamePrefix.concat(Integer.toString(i >>> 1)));
         return w;
     }
 
@@ -1411,384 +1575,322 @@
     final void deregisterWorker(ForkJoinWorkerThread wt, Throwable ex) {
         WorkQueue w = null;
         if (wt != null && (w = wt.workQueue) != null) {
-            int ps;
-            w.qlock = -1;                // ensure set
-            U.getAndAddLong(this, STEALCOUNT, w.nsteals); // collect steals
-            if (((ps = plock) & PL_LOCK) != 0 ||
-                !U.compareAndSwapInt(this, PLOCK, ps, ps += PL_LOCK))
-                ps = acquirePlock();
-            int nps = (ps & SHUTDOWN) | ((ps + PL_LOCK) & ~SHUTDOWN);
-            try {
-                int idx = w.poolIndex;
-                WorkQueue[] ws = workQueues;
-                if (ws != null && idx >= 0 && idx < ws.length && ws[idx] == w)
-                    ws[idx] = null;
-            } finally {
-                if (!U.compareAndSwapInt(this, PLOCK, ps, nps))
-                    releasePlock(nps);
-            }
+            WorkQueue[] ws;                           // remove index from array
+            int idx = w.config & SMASK;
+            int rs = lockRunState();
+            if ((ws = workQueues) != null && ws.length > idx && ws[idx] == w)
+                ws[idx] = null;
+            unlockRunState(rs, rs & ~RSLOCK);
         }
-
-        long c;                          // adjust ctl counts
+        long c;                                       // decrement counts
         do {} while (!U.compareAndSwapLong
-                     (this, CTL, c = ctl, (((c - AC_UNIT) & AC_MASK) |
-                                           ((c - TC_UNIT) & TC_MASK) |
-                                           (c & ~(AC_MASK|TC_MASK)))));
-
-        if (!tryTerminate(false, false) && w != null && w.array != null) {
-            w.cancelAll();               // cancel remaining tasks
-            WorkQueue[] ws; WorkQueue v; Thread p; int u, i, e;
-            while ((u = (int)((c = ctl) >>> 32)) < 0 && (e = (int)c) >= 0) {
-                if (e > 0) {             // activate or create replacement
-                    if ((ws = workQueues) == null ||
-                        (i = e & SMASK) >= ws.length ||
-                        (v = ws[i]) == null)
-                        break;
-                    long nc = (((long)(v.nextWait & E_MASK)) |
-                               ((long)(u + UAC_UNIT) << 32));
-                    if (v.eventCount != (e | INT_SIGN))
-                        break;
-                    if (U.compareAndSwapLong(this, CTL, c, nc)) {
-                        v.eventCount = (e + E_SEQ) & E_MASK;
-                        if ((p = v.parker) != null)
-                            U.unpark(p);
-                        break;
-                    }
-                }
-                else {
-                    if ((short)u < 0)
-                        tryAddWorker();
+                     (this, CTL, c = ctl, ((AC_MASK & (c - AC_UNIT)) |
+                                           (TC_MASK & (c - TC_UNIT)) |
+                                           (SP_MASK & c))));
+        if (w != null) {
+            w.qlock = -1;                             // ensure set
+            w.transferStealCount(this);
+            w.cancelAll();                            // cancel remaining tasks
+        }
+        for (;;) {                                    // possibly replace
+            WorkQueue[] ws; int m, sp;
+            if (tryTerminate(false, false) || w == null || w.array == null ||
+                (runState & STOP) != 0 || (ws = workQueues) == null ||
+                (m = ws.length - 1) < 0)              // already terminating
+                break;
+            if ((sp = (int)(c = ctl)) != 0) {         // wake up replacement
+                if (tryRelease(c, ws[sp & m], AC_UNIT))
                     break;
-                }
             }
+            else if (ex != null && (c & ADD_WORKER) != 0L) {
+                tryAddWorker(c);                      // create replacement
+                break;
+            }
+            else                                      // don't need replacement
+                break;
         }
-        if (ex == null)                     // help clean refs on way out
+        if (ex == null)                               // help clean on way out
             ForkJoinTask.helpExpungeStaleExceptions();
-        else                                // rethrow
+        else                                          // rethrow
             ForkJoinTask.rethrow(ex);
     }
 
-    // Submissions
-
-    /**
-     * Unless shutting down, adds the given task to a submission queue
-     * at submitter's current queue index (modulo submission
-     * range). Only the most common path is directly handled in this
-     * method. All others are relayed to fullExternalPush.
-     *
-     * @param task the task. Caller must ensure non-null.
-     */
-    final void externalPush(ForkJoinTask<?> task) {
-        WorkQueue q; int m, s, n, am; ForkJoinTask<?>[] a;
-        int r = ThreadLocalRandom.getProbe();
-        int ps = plock;
-        WorkQueue[] ws = workQueues;
-        if (ps > 0 && ws != null && (m = (ws.length - 1)) >= 0 &&
-            (q = ws[m & r & SQMASK]) != null && r != 0 &&
-            U.compareAndSwapInt(q, QLOCK, 0, 1)) { // lock
-            if ((a = q.array) != null &&
-                (am = a.length - 1) > (n = (s = q.top) - q.base)) {
-                int j = ((am & s) << ASHIFT) + ABASE;
-                U.putOrderedObject(a, j, task);
-                q.top = s + 1;                     // push on to deque
-                q.qlock = 0;
-                if (n <= 1)
-                    signalWork(ws, q);
-                return;
-            }
-            q.qlock = 0;
-        }
-        fullExternalPush(task);
-    }
-
-    /**
-     * Full version of externalPush. This method is called, among
-     * other times, upon the first submission of the first task to the
-     * pool, so must perform secondary initialization.  It also
-     * detects first submission by an external thread by looking up
-     * its ThreadLocal, and creates a new shared queue if the one at
-     * index if empty or contended. The plock lock body must be
-     * exception-free (so no try/finally) so we optimistically
-     * allocate new queues outside the lock and throw them away if
-     * (very rarely) not needed.
-     *
-     * Secondary initialization occurs when plock is zero, to create
-     * workQueue array and set plock to a valid value.  This lock body
-     * must also be exception-free. Because the plock seq value can
-     * eventually wrap around zero, this method harmlessly fails to
-     * reinitialize if workQueues exists, while still advancing plock.
-     */
-    private void fullExternalPush(ForkJoinTask<?> task) {
-        int r;
-        if ((r = ThreadLocalRandom.getProbe()) == 0) {
-            ThreadLocalRandom.localInit();
-            r = ThreadLocalRandom.getProbe();
-        }
-        for (;;) {
-            WorkQueue[] ws; WorkQueue q; int ps, m, k;
-            boolean move = false;
-            if ((ps = plock) < 0)
-                throw new RejectedExecutionException();
-            else if (ps == 0 || (ws = workQueues) == null ||
-                     (m = ws.length - 1) < 0) { // initialize workQueues
-                int p = parallelism;            // find power of two table size
-                int n = (p > 1) ? p - 1 : 1;    // ensure at least 2 slots
-                n |= n >>> 1; n |= n >>> 2;  n |= n >>> 4;
-                n |= n >>> 8; n |= n >>> 16; n = (n + 1) << 1;
-                WorkQueue[] nws = ((ws = workQueues) == null || ws.length == 0 ?
-                                   new WorkQueue[n] : null);
-                if (((ps = plock) & PL_LOCK) != 0 ||
-                    !U.compareAndSwapInt(this, PLOCK, ps, ps += PL_LOCK))
-                    ps = acquirePlock();
-                if (((ws = workQueues) == null || ws.length == 0) && nws != null)
-                    workQueues = nws;
-                int nps = (ps & SHUTDOWN) | ((ps + PL_LOCK) & ~SHUTDOWN);
-                if (!U.compareAndSwapInt(this, PLOCK, ps, nps))
-                    releasePlock(nps);
-            }
-            else if ((q = ws[k = r & m & SQMASK]) != null) {
-                if (q.qlock == 0 && U.compareAndSwapInt(q, QLOCK, 0, 1)) {
-                    ForkJoinTask<?>[] a = q.array;
-                    int s = q.top;
-                    boolean submitted = false;
-                    try {                      // locked version of push
-                        if ((a != null && a.length > s + 1 - q.base) ||
-                            (a = q.growArray()) != null) {   // must presize
-                            int j = (((a.length - 1) & s) << ASHIFT) + ABASE;
-                            U.putOrderedObject(a, j, task);
-                            q.top = s + 1;
-                            submitted = true;
-                        }
-                    } finally {
-                        q.qlock = 0;  // unlock
-                    }
-                    if (submitted) {
-                        signalWork(ws, q);
-                        return;
-                    }
-                }
-                move = true; // move on failure
-            }
-            else if (((ps = plock) & PL_LOCK) == 0) { // create new queue
-                q = new WorkQueue(this, null, SHARED_QUEUE, r);
-                q.poolIndex = (short)k;
-                if (((ps = plock) & PL_LOCK) != 0 ||
-                    !U.compareAndSwapInt(this, PLOCK, ps, ps += PL_LOCK))
-                    ps = acquirePlock();
-                if ((ws = workQueues) != null && k < ws.length && ws[k] == null)
-                    ws[k] = q;
-                int nps = (ps & SHUTDOWN) | ((ps + PL_LOCK) & ~SHUTDOWN);
-                if (!U.compareAndSwapInt(this, PLOCK, ps, nps))
-                    releasePlock(nps);
-            }
-            else
-                move = true; // move if busy
-            if (move)
-                r = ThreadLocalRandom.advanceProbe(r);
-        }
-    }
-
-    // Maintaining ctl counts
-
-    /**
-     * Increments active count; mainly called upon return from blocking.
-     */
-    final void incrementActiveCount() {
-        long c;
-        do {} while (!U.compareAndSwapLong
-                     (this, CTL, c = ctl, ((c & ~AC_MASK) |
-                                           ((c & AC_MASK) + AC_UNIT))));
-    }
+    // Signalling
 
     /**
      * Tries to create or activate a worker if too few are active.
      *
      * @param ws the worker array to use to find signallees
-     * @param q if non-null, the queue holding tasks to be processed
+     * @param q a WorkQueue --if non-null, don't retry if now empty
      */
     final void signalWork(WorkQueue[] ws, WorkQueue q) {
-        for (;;) {
-            long c; int e, u, i; WorkQueue w; Thread p;
-            if ((u = (int)((c = ctl) >>> 32)) >= 0)
-                break;
-            if ((e = (int)c) <= 0) {
-                if ((short)u < 0)
-                    tryAddWorker();
+        long c; int sp, i; WorkQueue v; Thread p;
+        while ((c = ctl) < 0L) {                       // too few active
+            if ((sp = (int)c) == 0) {                  // no idle workers
+                if ((c & ADD_WORKER) != 0L)            // too few workers
+                    tryAddWorker(c);
                 break;
             }
-            if (ws == null || ws.length <= (i = e & SMASK) ||
-                (w = ws[i]) == null)
+            if (ws == null)                            // unstarted/terminated
+                break;
+            if (ws.length <= (i = sp & SMASK))         // terminated
+                break;
+            if ((v = ws[i]) == null)                   // terminating
                 break;
-            long nc = (((long)(w.nextWait & E_MASK)) |
-                       ((long)(u + UAC_UNIT)) << 32);
-            int ne = (e + E_SEQ) & E_MASK;
-            if (w.eventCount == (e | INT_SIGN) &&
-                U.compareAndSwapLong(this, CTL, c, nc)) {
-                w.eventCount = ne;
-                if ((p = w.parker) != null)
+            int vs = (sp + SS_SEQ) & ~INACTIVE;        // next scanState
+            int d = sp - v.scanState;                  // screen CAS
+            long nc = (UC_MASK & (c + AC_UNIT)) | (SP_MASK & v.stackPred);
+            if (d == 0 && U.compareAndSwapLong(this, CTL, c, nc)) {
+                v.scanState = vs;                      // activate v
+                if ((p = v.parker) != null)
                     U.unpark(p);
                 break;
             }
-            if (q != null && q.base >= q.top)
+            if (q != null && q.base == q.top)          // no more work
                 break;
         }
     }
 
+    /**
+     * Signals and releases worker v if it is top of idle worker
+     * stack.  This performs a one-shot version of signalWork only if
+     * there is (apparently) at least one idle worker.
+     *
+     * @param c incoming ctl value
+     * @param v if non-null, a worker
+     * @param inc the increment to active count (zero when compensating)
+     * @return true if successful
+     */
+    private boolean tryRelease(long c, WorkQueue v, long inc) {
+        int sp = (int)c, vs = (sp + SS_SEQ) & ~INACTIVE; Thread p;
+        if (v != null && v.scanState == sp) {          // v is at top of stack
+            long nc = (UC_MASK & (c + inc)) | (SP_MASK & v.stackPred);
+            if (U.compareAndSwapLong(this, CTL, c, nc)) {
+                v.scanState = vs;
+                if ((p = v.parker) != null)
+                    U.unpark(p);
+                return true;
+            }
+        }
+        return false;
+    }
+
     // Scanning for tasks
 
     /**
      * Top-level runloop for workers, called by ForkJoinWorkerThread.run.
      */
     final void runWorker(WorkQueue w) {
-        w.growArray(); // allocate queue
-        for (int r = w.hint; scan(w, r) == 0; ) {
+        w.growArray();                   // allocate queue
+        int seed = w.hint;               // initially holds randomization hint
+        int r = (seed == 0) ? 1 : seed;  // avoid 0 for xorShift
+        for (ForkJoinTask<?> t;;) {
+            if ((t = scan(w, r)) != null)
+                w.runTask(t);
+            else if (!awaitWork(w, r))
+                break;
             r ^= r << 13; r ^= r >>> 17; r ^= r << 5; // xorshift
         }
     }
 
     /**
-     * Scans for and, if found, runs one task, else possibly
-     * inactivates the worker. This method operates on single reads of
-     * volatile state and is designed to be re-invoked continuously,
-     * in part because it returns upon detecting inconsistencies,
-     * contention, or state changes that indicate possible success on
-     * re-invocation.
-     *
-     * The scan searches for tasks across queues starting at a random
-     * index, checking each at least twice.  The scan terminates upon
-     * either finding a non-empty queue, or completing the sweep. If
-     * the worker is not inactivated, it takes and runs a task from
-     * this queue. Otherwise, if not activated, it tries to activate
-     * itself or some other worker by signalling. On failure to find a
-     * task, returns (for retry) if pool state may have changed during
-     * an empty scan, or tries to inactivate if active, else possibly
-     * blocks or terminates via method awaitWork.
+     * Scans for and tries to steal a top-level task. Scans start at a
+     * random location, randomly moving on apparent contention,
+     * otherwise continuing linearly until reaching two consecutive
+     * empty passes over all queues with the same checksum (summing
+     * each base index of each queue, that moves on each steal), at
+     * which point the worker tries to inactivate and then re-scans,
+     * attempting to re-activate (itself or some other worker) if
+     * finding a task; otherwise returning null to await work.  Scans
+     * otherwise touch as little memory as possible, to reduce
+     * disruption on other scanning threads.
      *
      * @param w the worker (via its WorkQueue)
      * @param r a random seed
-     * @return worker qlock status if would have waited, else 0
+     * @return a task, or null if none found
      */
-    private final int scan(WorkQueue w, int r) {
+    private ForkJoinTask<?> scan(WorkQueue w, int r) {
         WorkQueue[] ws; int m;
-        long c = ctl;                            // for consistency check
-        if ((ws = workQueues) != null && (m = ws.length - 1) >= 0 && w != null) {
-            for (int j = m + m + 1, ec = w.eventCount;;) {
-                WorkQueue q; int b, e; ForkJoinTask<?>[] a; ForkJoinTask<?> t;
-                if ((q = ws[(r - j) & m]) != null &&
-                    (b = q.base) - q.top < 0 && (a = q.array) != null) {
-                    long i = (((a.length - 1) & b) << ASHIFT) + ABASE;
-                    if ((t = ((ForkJoinTask<?>)
-                              U.getObjectVolatile(a, i))) != null) {
-                        if (ec < 0)
-                            helpRelease(c, ws, w, q, b);
-                        else if (q.base == b &&
-                                 U.compareAndSwapObject(a, i, t, null)) {
-                            U.putOrderedInt(q, QBASE, b + 1);
-                            if ((b + 1) - q.top < 0)
-                                signalWork(ws, q);
-                            w.runTask(t);
+        if ((ws = workQueues) != null && (m = ws.length - 1) > 0 && w != null) {
+            int ss = w.scanState;                     // initially non-negative
+            for (int origin = r & m, k = origin, oldSum = 0, checkSum = 0;;) {
+                WorkQueue q; ForkJoinTask<?>[] a; ForkJoinTask<?> t;
+                int b, n; long c;
+                if ((q = ws[k]) != null) {
+                    if ((n = (b = q.base) - q.top) < 0 &&
+                        (a = q.array) != null) {      // non-empty
+                        long i = (((a.length - 1) & b) << ASHIFT) + ABASE;
+                        if ((t = ((ForkJoinTask<?>)
+                                  U.getObjectVolatile(a, i))) != null &&
+                            q.base == b) {
+                            if (ss >= 0) {
+                                if (U.compareAndSwapObject(a, i, t, null)) {
+                                    q.base = b + 1;
+                                    if (n < -1)       // signal others
+                                        signalWork(ws, q);
+                                    return t;
+                                }
+                            }
+                            else if (oldSum == 0 &&   // try to activate
+                                     w.scanState < 0)
+                                tryRelease(c = ctl, ws[m & (int)c], AC_UNIT);
                         }
+                        if (ss < 0)                   // refresh
+                            ss = w.scanState;
+                        r ^= r << 1; r ^= r >>> 3; r ^= r << 10;
+                        origin = k = r & m;           // move and rescan
+                        oldSum = checkSum = 0;
+                        continue;
                     }
-                    break;
+                    checkSum += b;
                 }
-                else if (--j < 0) {
-                    if ((ec | (e = (int)c)) < 0) // inactive or terminating
-                        return awaitWork(w, c, ec);
-                    else if (ctl == c) {         // try to inactivate and enqueue
-                        long nc = (long)ec | ((c - AC_UNIT) & (AC_MASK|TC_MASK));
-                        w.nextWait = e;
-                        w.eventCount = ec | INT_SIGN;
-                        if (!U.compareAndSwapLong(this, CTL, c, nc))
-                            w.eventCount = ec;   // back out
+                if ((k = (k + 1) & m) == origin) {    // continue until stable
+                    if ((ss >= 0 || (ss == (ss = w.scanState))) &&
+                        oldSum == (oldSum = checkSum)) {
+                        if (ss < 0 || w.qlock < 0)    // already inactive
+                            break;
+                        int ns = ss | INACTIVE;       // try to inactivate
+                        long nc = ((SP_MASK & ns) |
+                                   (UC_MASK & ((c = ctl) - AC_UNIT)));
+                        w.stackPred = (int)c;         // hold prev stack top
+                        U.putInt(w, QSCANSTATE, ns);
+                        if (U.compareAndSwapLong(this, CTL, c, nc))
+                            ss = ns;
+                        else
+                            w.scanState = ss;         // back out
                     }
-                    break;
+                    checkSum = 0;
                 }
             }
         }
-        return 0;
+        return null;
     }
 
     /**
-     * A continuation of scan(), possibly blocking or terminating
-     * worker w. Returns without blocking if pool state has apparently
-     * changed since last invocation.  Also, if inactivating w has
-     * caused the pool to become quiescent, checks for pool
+     * Possibly blocks worker w waiting for a task to steal, or
+     * returns false if the worker should terminate.  If inactivating
+     * w has caused the pool to become quiescent, checks for pool
      * termination, and, so long as this is not the only worker, waits
-     * for event for up to a given duration.  On timeout, if ctl has
-     * not changed, terminates the worker, which will in turn wake up
+     * for up to a given duration.  On timeout, if ctl has not
+     * changed, terminates the worker, which will in turn wake up
      * another worker to possibly repeat this process.
      *
      * @param w the calling worker
-     * @param c the ctl value on entry to scan
-     * @param ec the worker's eventCount on entry to scan
+     * @param r a random seed (for spins)
+     * @return false if the worker should terminate
      */
-    private final int awaitWork(WorkQueue w, long c, int ec) {
-        int stat, ns; long parkTime, deadline;
-        if ((stat = w.qlock) >= 0 && w.eventCount == ec && ctl == c &&
-            !Thread.interrupted()) {
-            int e = (int)c;
-            int u = (int)(c >>> 32);
-            int d = (u >> UAC_SHIFT) + parallelism; // active count
-
-            if (e < 0 || (d <= 0 && tryTerminate(false, false)))
-                stat = w.qlock = -1;          // pool is terminating
-            else if ((ns = w.nsteals) != 0) { // collect steals and retry
-                w.nsteals = 0;
-                U.getAndAddLong(this, STEALCOUNT, (long)ns);
+    private boolean awaitWork(WorkQueue w, int r) {
+        if (w == null || w.qlock < 0)                 // w is terminating
+            return false;
+        for (int pred = w.stackPred, spins = SPINS, ss;;) {
+            if ((ss = w.scanState) >= 0)
+                break;
+            else if (spins > 0) {
+                r ^= r << 6; r ^= r >>> 21; r ^= r << 7;
+                if (r >= 0 && --spins == 0) {         // randomize spins
+                    WorkQueue v; WorkQueue[] ws; int s, j; AtomicLong sc;
+                    if (pred != 0 && (ws = workQueues) != null &&
+                        (j = pred & SMASK) < ws.length &&
+                        (v = ws[j]) != null &&        // see if pred parking
+                        (v.parker == null || v.scanState >= 0))
+                        spins = SPINS;                // continue spinning
+                }
             }
-            else {
-                long pc = ((d > 0 || ec != (e | INT_SIGN)) ? 0L :
-                           ((long)(w.nextWait & E_MASK)) | // ctl to restore
-                           ((long)(u + UAC_UNIT)) << 32);
-                if (pc != 0L) {               // timed wait if last waiter
-                    int dc = -(short)(c >>> TC_SHIFT);
-                    parkTime = (dc < 0 ? FAST_IDLE_TIMEOUT:
-                                (dc + 1) * IDLE_TIMEOUT);
+            else if (w.qlock < 0)                     // recheck after spins
+                return false;
+            else if (!Thread.interrupted()) {
+                long c, prevctl, parkTime, deadline;
+                int ac = (int)((c = ctl) >> AC_SHIFT) + (config & SMASK);
+                if ((ac <= 0 && tryTerminate(false, false)) ||
+                    (runState & STOP) != 0)           // pool terminating
+                    return false;
+                if (ac <= 0 && ss == (int)c) {        // is last waiter
+                    prevctl = (UC_MASK & (c + AC_UNIT)) | (SP_MASK & pred);
+                    int t = (short)(c >>> TC_SHIFT);  // shrink excess spares
+                    if (t > 2 && U.compareAndSwapLong(this, CTL, c, prevctl))
+                        return false;                 // else use timed wait
+                    parkTime = IDLE_TIMEOUT * ((t >= 0) ? 1 : 1 - t);
                     deadline = System.nanoTime() + parkTime - TIMEOUT_SLOP;
                 }
                 else
-                    parkTime = deadline = 0L;
-                if (w.eventCount == ec && ctl == c) {
-                    Thread wt = Thread.currentThread();
-                    U.putObject(wt, PARKBLOCKER, this);
-                    w.parker = wt;            // emulate LockSupport.park
-                    if (w.eventCount == ec && ctl == c)
-                        U.park(false, parkTime);  // must recheck before park
-                    w.parker = null;
-                    U.putObject(wt, PARKBLOCKER, null);
-                    if (parkTime != 0L && ctl == c &&
-                        deadline - System.nanoTime() <= 0L &&
-                        U.compareAndSwapLong(this, CTL, c, pc))
-                        stat = w.qlock = -1;  // shrink pool
+                    prevctl = parkTime = deadline = 0L;
+                Thread wt = Thread.currentThread();
+                U.putObject(wt, PARKBLOCKER, this);   // emulate LockSupport
+                w.parker = wt;
+                if (w.scanState < 0 && ctl == c)      // recheck before park
+                    U.park(false, parkTime);
+                U.putOrderedObject(w, QPARKER, null);
+                U.putObject(wt, PARKBLOCKER, null);
+                if (w.scanState >= 0)
+                    break;
+                if (parkTime != 0L && ctl == c &&
+                    deadline - System.nanoTime() <= 0L &&
+                    U.compareAndSwapLong(this, CTL, c, prevctl))
+                    return false;                     // shrink pool
+            }
+        }
+        return true;
+    }
+
+    // Joining tasks
+
+    /**
+     * Tries to steal and run tasks within the target's computation.
+     * Uses a variant of the top-level algorithm, restricted to tasks
+     * with the given task as ancestor: It prefers taking and running
+     * eligible tasks popped from the worker's own queue (via
+     * popCC). Otherwise it scans others, randomly moving on
+     * contention or execution, deciding to give up based on a
+     * checksum (via return codes frob pollAndExecCC). The maxTasks
+     * argument supports external usages; internal calls use zero,
+     * allowing unbounded steps (external calls trap non-positive
+     * values).
+     *
+     * @param w caller
+     * @param maxTasks if non-zero, the maximum number of other tasks to run
+     * @return task status on exit
+     */
+    final int helpComplete(WorkQueue w, CountedCompleter<?> task,
+                           int maxTasks) {
+        WorkQueue[] ws; int s = 0, m;
+        if ((ws = workQueues) != null && (m = ws.length - 1) >= 0 &&
+            task != null && w != null) {
+            int mode = w.config;                 // for popCC
+            int r = w.hint ^ w.top;              // arbitrary seed for origin
+            int origin = r & m;                  // first queue to scan
+            int h = 1;                           // 1:ran, >1:contended, <0:hash
+            for (int k = origin, oldSum = 0, checkSum = 0;;) {
+                CountedCompleter<?> p; WorkQueue q;
+                if ((s = task.status) < 0)
+                    break;
+                if (h == 1 && (p = w.popCC(task, mode)) != null) {
+                    p.doExec();                  // run local task
+                    if (maxTasks != 0 && --maxTasks == 0)
+                        break;
+                    origin = k;                  // reset
+                    oldSum = checkSum = 0;
+                }
+                else {                           // poll other queues
+                    if ((q = ws[k]) == null)
+                        h = 0;
+                    else if ((h = q.pollAndExecCC(task)) < 0)
+                        checkSum += h;
+                    if (h > 0) {
+                        if (h == 1 && maxTasks != 0 && --maxTasks == 0)
+                            break;
+                        r ^= r << 13; r ^= r >>> 17; r ^= r << 5; // xorshift
+                        origin = k = r & m;      // move and restart
+                        oldSum = checkSum = 0;
+                    }
+                    else if ((k = (k + 1) & m) == origin) {
+                        if (oldSum == (oldSum = checkSum))
+                            break;
+                        checkSum = 0;
+                    }
                 }
             }
         }
-        return stat;
-    }
-
-    /**
-     * Possibly releases (signals) a worker. Called only from scan()
-     * when a worker with apparently inactive status finds a non-empty
-     * queue. This requires revalidating all of the associated state
-     * from caller.
-     */
-    private final void helpRelease(long c, WorkQueue[] ws, WorkQueue w,
-                                   WorkQueue q, int b) {
-        WorkQueue v; int e, i; Thread p;
-        if (w != null && w.eventCount < 0 && (e = (int)c) > 0 &&
-            ws != null && ws.length > (i = e & SMASK) &&
-            (v = ws[i]) != null && ctl == c) {
-            long nc = (((long)(v.nextWait & E_MASK)) |
-                       ((long)((int)(c >>> 32) + UAC_UNIT)) << 32);
-            int ne = (e + E_SEQ) & E_MASK;
-            if (q != null && q.base == b && w.eventCount < 0 &&
-                v.eventCount == (e | INT_SIGN) &&
-                U.compareAndSwapLong(this, CTL, c, nc)) {
-                v.eventCount = ne;
-                if ((p = v.parker) != null)
-                    U.unpark(p);
-            }
-        }
+        return s;
     }
 
     /**
@@ -1799,268 +1901,167 @@
      * execute tasks from. The first call to this method upon a
      * waiting join will often entail scanning/search, (which is OK
      * because the joiner has nothing better to do), but this method
-     * leaves hints in workers to speed up subsequent calls. The
-     * implementation is very branchy to cope with potential
-     * inconsistencies or loops encountering chains that are stale,
-     * unknown, or so long that they are likely cyclic.
+     * leaves hints in workers to speed up subsequent calls.
      *
-     * @param joiner the joining worker
+     * @param w caller
      * @param task the task to join
-     * @return 0 if no progress can be made, negative if task
-     * known complete, else positive
      */
-    private int tryHelpStealer(WorkQueue joiner, ForkJoinTask<?> task) {
-        int stat = 0, steps = 0;                    // bound to avoid cycles
-        if (task != null && joiner != null &&
-            joiner.base - joiner.top >= 0) {        // hoist checks
-            restart: for (;;) {
-                ForkJoinTask<?> subtask = task;     // current target
-                for (WorkQueue j = joiner, v;;) {   // v is stealer of subtask
-                    WorkQueue[] ws; int m, s, h;
-                    if ((s = task.status) < 0) {
-                        stat = s;
-                        break restart;
-                    }
-                    if ((ws = workQueues) == null || (m = ws.length - 1) <= 0)
-                        break restart;              // shutting down
-                    if ((v = ws[h = (j.hint | 1) & m]) == null ||
-                        v.currentSteal != subtask) {
-                        for (int origin = h;;) {    // find stealer
-                            if (((h = (h + 2) & m) & 15) == 1 &&
-                                (subtask.status < 0 || j.currentJoin != subtask))
-                                continue restart;   // occasional staleness check
-                            if ((v = ws[h]) != null &&
-                                v.currentSteal == subtask) {
-                                j.hint = h;        // save hint
+    private void helpStealer(WorkQueue w, ForkJoinTask<?> task) {
+        WorkQueue[] ws = workQueues;
+        int oldSum = 0, checkSum, m;
+        if (ws != null && (m = ws.length - 1) >= 0 && w != null &&
+            task != null) {
+            do {                                       // restart point
+                checkSum = 0;                          // for stability check
+                ForkJoinTask<?> subtask;
+                WorkQueue j = w, v;                    // v is subtask stealer
+                descent: for (subtask = task; subtask.status >= 0; ) {
+                    for (int h = j.hint | 1, k = 0, i; ; k += 2) {
+                        if (k > m)                     // can't find stealer
+                            break descent;
+                        if ((v = ws[i = (h + k) & m]) != null) {
+                            if (v.currentSteal == subtask) {
+                                j.hint = i;
                                 break;
                             }
-                            if (h == origin)
-                                break restart;      // cannot find stealer
+                            checkSum += v.base;
                         }
                     }
-                    for (;;) { // help stealer or descend to its stealer
+                    for (;;) {                         // help v or descend
                         ForkJoinTask<?>[] a; int b;
-                        if (subtask.status < 0)     // surround probes with
-                            continue restart;       //   consistency checks
-                        if ((b = v.base) - v.top < 0 && (a = v.array) != null) {
-                            int i = (((a.length - 1) & b) << ASHIFT) + ABASE;
-                            ForkJoinTask<?> t =
-                                (ForkJoinTask<?>)U.getObjectVolatile(a, i);
-                            if (subtask.status < 0 || j.currentJoin != subtask ||
-                                v.currentSteal != subtask)
-                                continue restart;   // stale
-                            stat = 1;               // apparent progress
-                            if (v.base == b) {
-                                if (t == null)
-                                    break restart;
-                                if (U.compareAndSwapObject(a, i, t, null)) {
-                                    U.putOrderedInt(v, QBASE, b + 1);
-                                    ForkJoinTask<?> ps = joiner.currentSteal;
-                                    int jt = joiner.top;
-                                    do {
-                                        joiner.currentSteal = t;
-                                        t.doExec(); // clear local tasks too
-                                    } while (task.status >= 0 &&
-                                             joiner.top != jt &&
-                                             (t = joiner.pop()) != null);
-                                    joiner.currentSteal = ps;
-                                    break restart;
-                                }
-                            }
+                        checkSum += (b = v.base);
+                        ForkJoinTask<?> next = v.currentJoin;
+                        if (subtask.status < 0 || j.currentJoin != subtask ||
+                            v.currentSteal != subtask) // stale
+                            break descent;
+                        if (b - v.top >= 0 || (a = v.array) == null) {
+                            if ((subtask = next) == null)
+                                break descent;
+                            j = v;
+                            break;
                         }
-                        else {                      // empty -- try to descend
-                            ForkJoinTask<?> next = v.currentJoin;
-                            if (subtask.status < 0 || j.currentJoin != subtask ||
-                                v.currentSteal != subtask)
-                                continue restart;   // stale
-                            else if (next == null || ++steps == MAX_HELP)
-                                break restart;      // dead-end or maybe cyclic
-                            else {
-                                subtask = next;
-                                j = v;
-                                break;
+                        int i = (((a.length - 1) & b) << ASHIFT) + ABASE;
+                        ForkJoinTask<?> t = ((ForkJoinTask<?>)
+                                             U.getObjectVolatile(a, i));
+                        if (v.base == b) {
+                            if (t == null)             // stale
+                                break descent;
+                            if (U.compareAndSwapObject(a, i, t, null)) {
+                                v.base = b + 1;
+                                ForkJoinTask<?> ps = w.currentSteal;
+                                int top = w.top;
+                                do {
+                                    U.putOrderedObject(w, QCURRENTSTEAL, t);
+                                    t.doExec();        // clear local tasks too
+                                } while (task.status >= 0 &&
+                                         w.top != top &&
+                                         (t = w.pop()) != null);
+                                U.putOrderedObject(w, QCURRENTSTEAL, ps);
+                                if (w.base != w.top)
+                                    return;            // can't further help
                             }
                         }
                     }
                 }
-            }
+            } while (task.status >= 0 && oldSum != (oldSum = checkSum));
         }
-        return stat;
-    }
-
-    /**
-     * Analog of tryHelpStealer for CountedCompleters. Tries to steal
-     * and run tasks within the target's computation.
-     *
-     * @param task the task to join
-     * @param maxTasks the maximum number of other tasks to run
-     */
-    final int helpComplete(WorkQueue joiner, CountedCompleter<?> task,
-                           int maxTasks) {
-        WorkQueue[] ws; int m;
-        int s = 0;
-        if ((ws = workQueues) != null && (m = ws.length - 1) >= 0 &&
-            joiner != null && task != null) {
-            int j = joiner.poolIndex;
-            int scans = m + m + 1;
-            long c = 0L;              // for stability check
-            for (int k = scans; ; j += 2) {
-                WorkQueue q;
-                if ((s = task.status) < 0)
-                    break;
-                else if (joiner.internalPopAndExecCC(task)) {
-                    if (--maxTasks <= 0) {
-                        s = task.status;
-                        break;
-                    }
-                    k = scans;
-                }
-                else if ((s = task.status) < 0)
-                    break;
-                else if ((q = ws[j & m]) != null && q.pollAndExecCC(task)) {
-                    if (--maxTasks <= 0) {
-                        s = task.status;
-                        break;
-                    }
-                    k = scans;
-                }
-                else if (--k < 0) {
-                    if (c == (c = ctl))
-                        break;
-                    k = scans;
-                }
-            }
-        }
-        return s;
     }
 
     /**
      * Tries to decrement active count (sometimes implicitly) and
      * possibly release or create a compensating worker in preparation
-     * for blocking. Fails on contention or termination. Otherwise,
-     * adds a new thread if no idle workers are available and pool
-     * may become starved.
+     * for blocking. Returns false (retryable by caller), on
+     * contention, detected staleness, instability, or termination.
      *
-     * @param c the assumed ctl value
+     * @param w caller
      */
-    final boolean tryCompensate(long c) {
-        WorkQueue[] ws = workQueues;
-        int pc = parallelism, e = (int)c, m, tc;
-        if (ws != null && (m = ws.length - 1) >= 0 && e >= 0 && ctl == c) {
-            WorkQueue w = ws[e & m];
-            if (e != 0 && w != null) {
-                Thread p;
-                long nc = ((long)(w.nextWait & E_MASK) |
-                           (c & (AC_MASK|TC_MASK)));
-                int ne = (e + E_SEQ) & E_MASK;
-                if (w.eventCount == (e | INT_SIGN) &&
-                    U.compareAndSwapLong(this, CTL, c, nc)) {
-                    w.eventCount = ne;
-                    if ((p = w.parker) != null)
-                        U.unpark(p);
-                    return true;   // replace with idle worker
+    private boolean tryCompensate(WorkQueue w) {
+        boolean canBlock;
+        WorkQueue[] ws; long c; int m, pc, sp;
+        if (w == null || w.qlock < 0 ||           // caller terminating
+            (ws = workQueues) == null || (m = ws.length - 1) <= 0 ||
+            (pc = config & SMASK) == 0)           // parallelism disabled
+            canBlock = false;
+        else if ((sp = (int)(c = ctl)) != 0)      // release idle worker
+            canBlock = tryRelease(c, ws[sp & m], 0L);
+        else {
+            int ac = (int)(c >> AC_SHIFT) + pc;
+            int tc = (short)(c >> TC_SHIFT) + pc;
+            int nbusy = 0;                        // validate saturation
+            for (int i = 0; i <= m; ++i) {        // two passes of odd indices
+                WorkQueue v;
+                if ((v = ws[((i << 1) | 1) & m]) != null) {
+                    if ((v.scanState & SCANNING) != 0)
+                        break;
+                    ++nbusy;
                 }
             }
-            else if ((tc = (short)(c >>> TC_SHIFT)) >= 0 &&
-                     (int)(c >> AC_SHIFT) + pc > 1) {
-                long nc = ((c - AC_UNIT) & AC_MASK) | (c & ~AC_MASK);
-                if (U.compareAndSwapLong(this, CTL, c, nc))
-                    return true;   // no compensation
+            if (nbusy != (tc << 1) || ctl != c)
+                canBlock = false;                 // unstable or stale
+            else if (tc >= pc && ac > 1 && w.isEmpty()) {
+                long nc = ((AC_MASK & (c - AC_UNIT)) |
+                           (~AC_MASK & c));       // uncompensated
+                canBlock = U.compareAndSwapLong(this, CTL, c, nc);
             }
-            else if (tc + pc < MAX_CAP) {
-                long nc = ((c + TC_UNIT) & TC_MASK) | (c & ~TC_MASK);
-                if (U.compareAndSwapLong(this, CTL, c, nc)) {
-                    ForkJoinWorkerThreadFactory fac;
-                    Throwable ex = null;
-                    ForkJoinWorkerThread wt = null;
-                    try {
-                        if ((fac = factory) != null &&
-                            (wt = fac.newThread(this)) != null) {
-                            wt.start();
-                            return true;
-                        }
-                    } catch (Throwable rex) {
-                        ex = rex;
-                    }
-                    deregisterWorker(wt, ex); // clean up and return false
-                }
+            else if (tc >= MAX_CAP ||
+                     (this == common && tc >= pc + commonMaxSpares))
+                throw new RejectedExecutionException(
+                    "Thread limit exceeded replacing blocked worker");
+            else {                                // similar to tryAddWorker
+                boolean add = false; int rs;      // CAS within lock
+                long nc = ((AC_MASK & c) |
+                           (TC_MASK & (c + TC_UNIT)));
+                if (((rs = lockRunState()) & STOP) == 0)
+                    add = U.compareAndSwapLong(this, CTL, c, nc);
+                unlockRunState(rs, rs & ~RSLOCK);
+                canBlock = add && createWorker(); // throws on exception
             }
         }
-        return false;
+        return canBlock;
     }
 
     /**
-     * Helps and/or blocks until the given task is done.
+     * Helps and/or blocks until the given task is done or timeout.
      *
-     * @param joiner the joining worker
+     * @param w caller
      * @param task the task
+     * @param deadline for timed waits, if nonzero
      * @return task status on exit
      */
-    final int awaitJoin(WorkQueue joiner, ForkJoinTask<?> task) {
+    final int awaitJoin(WorkQueue w, ForkJoinTask<?> task, long deadline) {
         int s = 0;
-        if (task != null && (s = task.status) >= 0 && joiner != null) {
-            ForkJoinTask<?> prevJoin = joiner.currentJoin;
-            joiner.currentJoin = task;
-            do {} while (joiner.tryRemoveAndExec(task) && // process local tasks
-                         (s = task.status) >= 0);
-            if (s >= 0 && (task instanceof CountedCompleter))
-                s = helpComplete(joiner, (CountedCompleter<?>)task, Integer.MAX_VALUE);
-            long cc = 0;        // for stability checks
-            while (s >= 0 && (s = task.status) >= 0) {
-                if ((s = tryHelpStealer(joiner, task)) == 0 &&
-                    (s = task.status) >= 0) {
-                    if (!tryCompensate(cc))
-                        cc = ctl;
-                    else {
-                        if (task.trySetSignal() && (s = task.status) >= 0) {
-                            synchronized (task) {
-                                if (task.status >= 0) {
-                                    try {                // see ForkJoinTask
-                                        task.wait();     //  for explanation
-                                    } catch (InterruptedException ie) {
-                                    }
-                                }
-                                else
-                                    task.notifyAll();
-                            }
-                        }
-                        long c; // reactivate
-                        do {} while (!U.compareAndSwapLong
-                                     (this, CTL, c = ctl,
-                                      ((c & ~AC_MASK) |
-                                       ((c & AC_MASK) + AC_UNIT))));
-                    }
+        if (task != null && w != null) {
+            ForkJoinTask<?> prevJoin = w.currentJoin;
+            U.putOrderedObject(w, QCURRENTJOIN, task);
+            CountedCompleter<?> cc = (task instanceof CountedCompleter) ?
+                (CountedCompleter<?>)task : null;
+            for (;;) {
+                if ((s = task.status) < 0)
+                    break;
+                if (cc != null)
+                    helpComplete(w, cc, 0);
+                else if (w.base == w.top || w.tryRemoveAndExec(task))
+                    helpStealer(w, task);
+                if ((s = task.status) < 0)
+                    break;
+                long ms, ns;
+                if (deadline == 0L)
+                    ms = 0L;
+                else if ((ns = deadline - System.nanoTime()) <= 0L)
+                    break;
+                else if ((ms = TimeUnit.NANOSECONDS.toMillis(ns)) <= 0L)
+                    ms = 1L;
+                if (tryCompensate(w)) {
+                    task.internalWait(ms);
+                    U.getAndAddLong(this, CTL, AC_UNIT);
                 }
             }
-            joiner.currentJoin = prevJoin;
+            U.putOrderedObject(w, QCURRENTJOIN, prevJoin);
         }
         return s;
     }
 
-    /**
-     * Stripped-down variant of awaitJoin used by timed joins. Tries
-     * to help join only while there is continuous progress. (Caller
-     * will then enter a timed wait.)
-     *
-     * @param joiner the joining worker
-     * @param task the task
-     */
-    final void helpJoinOnce(WorkQueue joiner, ForkJoinTask<?> task) {
-        int s;
-        if (joiner != null && task != null && (s = task.status) >= 0) {
-            ForkJoinTask<?> prevJoin = joiner.currentJoin;
-            joiner.currentJoin = task;
-            do {} while (joiner.tryRemoveAndExec(task) && // process local tasks
-                         (s = task.status) >= 0);
-            if (s >= 0) {
-                if (task instanceof CountedCompleter)
-                    helpComplete(joiner, (CountedCompleter<?>)task, Integer.MAX_VALUE);
-                do {} while (task.status >= 0 &&
-                             tryHelpStealer(joiner, task) > 0);
-            }
-            joiner.currentJoin = prevJoin;
-        }
-    }
+    // Specialized scanning
 
     /**
      * Returns a (probably) non-empty steal queue, if one is found
@@ -2068,19 +2069,24 @@
      * caller if, by the time it tries to use the queue, it is empty.
      */
     private WorkQueue findNonEmptyStealQueue() {
+        WorkQueue[] ws; int m;  // one-shot version of scan loop
         int r = ThreadLocalRandom.nextSecondarySeed();
-        for (;;) {
-            int ps = plock, m; WorkQueue[] ws; WorkQueue q;
-            if ((ws = workQueues) != null && (m = ws.length - 1) >= 0) {
-                for (int j = (m + 1) << 2; j >= 0; --j) {
-                    if ((q = ws[(((r - j) << 1) | 1) & m]) != null &&
-                        q.base - q.top < 0)
+        if ((ws = workQueues) != null && (m = ws.length - 1) >= 0) {
+            for (int origin = r & m, k = origin, oldSum = 0, checkSum = 0;;) {
+                WorkQueue q; int b;
+                if ((q = ws[k]) != null) {
+                    if ((b = q.base) - q.top < 0)
                         return q;
+                    checkSum += b;
+                }
+                if ((k = (k + 1) & m) == origin) {
+                    if (oldSum == (oldSum = checkSum))
+                        break;
+                    checkSum = 0;
                 }
             }
-            if (plock == ps)
-                return null;
         }
+        return null;
     }
 
     /**
@@ -2090,35 +2096,34 @@
      * find tasks either.
      */
     final void helpQuiescePool(WorkQueue w) {
-        ForkJoinTask<?> ps = w.currentSteal;
+        ForkJoinTask<?> ps = w.currentSteal; // save context
         for (boolean active = true;;) {
             long c; WorkQueue q; ForkJoinTask<?> t; int b;
-            while ((t = w.nextLocalTask()) != null)
-                t.doExec();
+            w.execLocalTasks();     // run locals before each scan
             if ((q = findNonEmptyStealQueue()) != null) {
                 if (!active) {      // re-establish active count
                     active = true;
-                    do {} while (!U.compareAndSwapLong
-                                 (this, CTL, c = ctl,
-                                  ((c & ~AC_MASK) |
-                                   ((c & AC_MASK) + AC_UNIT))));
+                    U.getAndAddLong(this, CTL, AC_UNIT);
                 }
-                if ((b = q.base) - q.top < 0 && (t = q.pollAt(b)) != null)
-                    w.runTask(t);
+                if ((b = q.base) - q.top < 0 && (t = q.pollAt(b)) != null) {
+                    U.putOrderedObject(w, QCURRENTSTEAL, t);
+                    t.doExec();
+                    if (++w.nsteals < 0)
+                        w.transferStealCount(this);
+                }
             }
             else if (active) {      // decrement active count without queuing
-                long nc = ((c = ctl) & ~AC_MASK) | ((c & AC_MASK) - AC_UNIT);
-                if ((int)(nc >> AC_SHIFT) + parallelism == 0)
+                long nc = (AC_MASK & ((c = ctl) - AC_UNIT)) | (~AC_MASK & c);
+                if ((int)(nc >> AC_SHIFT) + (config & SMASK) <= 0)
                     break;          // bypass decrement-then-increment
                 if (U.compareAndSwapLong(this, CTL, c, nc))
                     active = false;
             }
-            else if ((int)((c = ctl) >> AC_SHIFT) + parallelism <= 0 &&
-                     U.compareAndSwapLong
-                     (this, CTL, c, ((c & ~AC_MASK) |
-                                     ((c & AC_MASK) + AC_UNIT))))
+            else if ((int)((c = ctl) >> AC_SHIFT) + (config & SMASK) <= 0 &&
+                     U.compareAndSwapLong(this, CTL, c, c + AC_UNIT))
                 break;
         }
+        U.putOrderedObject(w, QCURRENTSTEAL, ps);
     }
 
     /**
@@ -2141,7 +2146,7 @@
     /**
      * Returns a cheap heuristic guide for task partitioning when
      * programmers, frameworks, tools, or languages have little or no
-     * idea about task granularity.  In essence by offering this
+     * idea about task granularity.  In essence, by offering this
      * method, we ask users only about tradeoffs in overhead vs
      * expected throughput and its variance, rather than how finely to
      * partition tasks.
@@ -2179,15 +2184,12 @@
      * many of these by further considering the number of "idle"
      * threads, that are known to have zero queued tasks, so
      * compensate by a factor of (#idle/#active) threads.
-     *
-     * Note: The approximation of #busy workers as #active workers is
-     * not very good under current signalling scheme, and should be
-     * improved.
      */
     static int getSurplusQueuedTaskCount() {
         Thread t; ForkJoinWorkerThread wt; ForkJoinPool pool; WorkQueue q;
         if (((t = Thread.currentThread()) instanceof ForkJoinWorkerThread)) {
-            int p = (pool = (wt = (ForkJoinWorkerThread)t).pool).parallelism;
+            int p = (pool = (wt = (ForkJoinWorkerThread)t).pool).
+                config & SMASK;
             int n = (q = wt.workQueue).top - q.base;
             int a = (int)(pool.ctl >> AC_SHIFT) + p;
             return n - (a > (p >>>= 1) ? 0 :
@@ -2202,13 +2204,7 @@
     //  Termination
 
     /**
-     * Possibly initiates and/or completes termination.  The caller
-     * triggering termination runs three passes through workQueues:
-     * (0) Setting termination status, followed by wakeups of queued
-     * workers; (1) cancelling all tasks; (2) interrupting lagging
-     * threads (likely in external tasks, but possibly also blocked in
-     * joins).  Each pass repeats previous steps because of potential
-     * lagging thread creation.
+     * Possibly initiates and/or completes termination.
      *
      * @param now if true, unconditionally terminate, else only
      * if no work and no active workers
@@ -2216,166 +2212,256 @@
      * @return true if now terminating or terminated
      */
     private boolean tryTerminate(boolean now, boolean enable) {
-        int ps;
-        if (this == common)                        // cannot shut down
+        int rs;
+        if (this == common)                       // cannot shut down
             return false;
-        if ((ps = plock) >= 0) {                   // enable by setting plock
+        if ((rs = runState) >= 0) {
             if (!enable)
                 return false;
-            if ((ps & PL_LOCK) != 0 ||
-                !U.compareAndSwapInt(this, PLOCK, ps, ps += PL_LOCK))
-                ps = acquirePlock();
-            int nps = ((ps + PL_LOCK) & ~SHUTDOWN) | SHUTDOWN;
-            if (!U.compareAndSwapInt(this, PLOCK, ps, nps))
-                releasePlock(nps);
+            rs = lockRunState();                  // enter SHUTDOWN phase
+            unlockRunState(rs, (rs & ~RSLOCK) | SHUTDOWN);
         }
-        for (long c;;) {
-            if (((c = ctl) & STOP_BIT) != 0) {     // already terminating
-                if ((short)(c >>> TC_SHIFT) + parallelism <= 0) {
-                    synchronized (this) {
-                        notifyAll();               // signal when 0 workers
-                    }
-                }
-                return true;
-            }
-            if (!now) {                            // check if idle & no tasks
-                WorkQueue[] ws; WorkQueue w;
-                if ((int)(c >> AC_SHIFT) + parallelism > 0)
-                    return false;
-                if ((ws = workQueues) != null) {
-                    for (int i = 0; i < ws.length; ++i) {
-                        if ((w = ws[i]) != null &&
-                            (!w.isEmpty() ||
-                             ((i & 1) != 0 && w.eventCount >= 0))) {
-                            signalWork(ws, w);
-                            return false;
+
+        if ((rs & STOP) == 0) {
+            if (!now) {                           // check quiescence
+                for (long oldSum = 0L;;) {        // repeat until stable
+                    WorkQueue[] ws; WorkQueue w; int m, b; long c;
+                    long checkSum = ctl;
+                    if ((int)(checkSum >> AC_SHIFT) + (config & SMASK) > 0)
+                        return false;             // still active workers
+                    if ((ws = workQueues) == null || (m = ws.length - 1) <= 0)
+                        break;                    // check queues
+                    for (int i = 0; i <= m; ++i) {
+                        if ((w = ws[i]) != null) {
+                            if ((b = w.base) != w.top || w.scanState >= 0 ||
+                                w.currentSteal != null) {
+                                tryRelease(c = ctl, ws[m & (int)c], AC_UNIT);
+                                return false;     // arrange for recheck
+                            }
+                            checkSum += b;
+                            if ((i & 1) == 0)
+                                w.qlock = -1;     // try to disable external
                         }
                     }
+                    if (oldSum == (oldSum = checkSum))
+                        break;
                 }
             }
-            if (U.compareAndSwapLong(this, CTL, c, c | STOP_BIT)) {
-                for (int pass = 0; pass < 3; ++pass) {
-                    WorkQueue[] ws; WorkQueue w; Thread wt;
-                    if ((ws = workQueues) != null) {
-                        int n = ws.length;
-                        for (int i = 0; i < n; ++i) {
-                            if ((w = ws[i]) != null) {
-                                w.qlock = -1;
-                                if (pass > 0) {
-                                    w.cancelAll();
-                                    if (pass > 1 && (wt = w.owner) != null) {
-                                        if (!wt.isInterrupted()) {
-                                            try {
-                                                wt.interrupt();
-                                            } catch (Throwable ignore) {
-                                            }
-                                        }
-                                        U.unpark(wt);
-                                    }
+            if ((runState & STOP) == 0) {
+                rs = lockRunState();              // enter STOP phase
+                unlockRunState(rs, (rs & ~RSLOCK) | STOP);
+            }
+        }
+
+        int pass = 0;                             // 3 passes to help terminate
+        for (long oldSum = 0L;;) {                // or until done or stable
+            WorkQueue[] ws; WorkQueue w; ForkJoinWorkerThread wt; int m;
+            long checkSum = ctl;
+            if ((short)(checkSum >>> TC_SHIFT) + (config & SMASK) <= 0 ||
+                (ws = workQueues) == null || (m = ws.length - 1) <= 0) {
+                if ((runState & TERMINATED) == 0) {
+                    rs = lockRunState();          // done
+                    unlockRunState(rs, (rs & ~RSLOCK) | TERMINATED);
+                    synchronized (this) { notifyAll(); } // for awaitTermination
+                }
+                break;
+            }
+            for (int i = 0; i <= m; ++i) {
+                if ((w = ws[i]) != null) {
+                    checkSum += w.base;
+                    w.qlock = -1;                 // try to disable
+                    if (pass > 0) {
+                        w.cancelAll();            // clear queue
+                        if (pass > 1 && (wt = w.owner) != null) {
+                            if (!wt.isInterrupted()) {
+                                try {             // unblock join
+                                    wt.interrupt();
+                                } catch (Throwable ignore) {
                                 }
                             }
-                        }
-                        // Wake up workers parked on event queue
-                        int i, e; long cc; Thread p;
-                        while ((e = (int)(cc = ctl) & E_MASK) != 0 &&
-                               (i = e & SMASK) < n && i >= 0 &&
-                               (w = ws[i]) != null) {
-                            long nc = ((long)(w.nextWait & E_MASK) |
-                                       ((cc + AC_UNIT) & AC_MASK) |
-                                       (cc & (TC_MASK|STOP_BIT)));
-                            if (w.eventCount == (e | INT_SIGN) &&
-                                U.compareAndSwapLong(this, CTL, cc, nc)) {
-                                w.eventCount = (e + E_SEQ) & E_MASK;
-                                w.qlock = -1;
-                                if ((p = w.parker) != null)
-                                    U.unpark(p);
-                            }
+                            if (w.scanState < 0)
+                                U.unpark(wt);     // wake up
                         }
                     }
                 }
             }
+            if (checkSum != oldSum) {             // unstable
+                oldSum = checkSum;
+                pass = 0;
+            }
+            else if (pass > 3 && pass > m)        // can't further help
+                break;
+            else if (++pass > 1) {                // try to dequeue
+                long c; int j = 0, sp;            // bound attempts
+                while (j++ <= m && (sp = (int)(c = ctl)) != 0)
+                    tryRelease(c, ws[sp & m], AC_UNIT);
+            }
         }
+        return true;
     }
 
-    // external operations on common pool
+    // External operations
 
     /**
-     * Returns common pool queue for a thread that has submitted at
-     * least one task.
+     * Full version of externalPush, handling uncommon cases, as well
+     * as performing secondary initialization upon the first
+     * submission of the first task to the pool.  It also detects
+     * first submission by an external thread and creates a new shared
+     * queue if the one at index if empty or contended.
+     *
+     * @param task the task. Caller must ensure non-null.
      */
-    static WorkQueue commonSubmitterQueue() {
-        ForkJoinPool p; WorkQueue[] ws; int m, z;
-        return ((z = ThreadLocalRandom.getProbe()) != 0 &&
-                (p = common) != null &&
-                (ws = p.workQueues) != null &&
-                (m = ws.length - 1) >= 0) ?
-            ws[m & z & SQMASK] : null;
+    private void externalSubmit(ForkJoinTask<?> task) {
+        int r;                                    // initialize caller's probe
+        if ((r = ThreadLocalRandom.getProbe()) == 0) {
+            ThreadLocalRandom.localInit();
+            r = ThreadLocalRandom.getProbe();
+        }
+        for (;;) {
+            WorkQueue[] ws; WorkQueue q; int rs, m, k;
+            boolean move = false;
+            if ((rs = runState) < 0) {
+                tryTerminate(false, false);     // help terminate
+                throw new RejectedExecutionException();
+            }
+            else if ((rs & STARTED) == 0 ||     // initialize
+                     ((ws = workQueues) == null || (m = ws.length - 1) < 0)) {
+                int ns = 0;
+                rs = lockRunState();
+                try {
+                    if ((rs & STARTED) == 0) {
+                        U.compareAndSwapObject(this, STEALCOUNTER, null,
+                                               new AtomicLong());
+                        // create workQueues array with size a power of two
+                        int p = config & SMASK; // ensure at least 2 slots
+                        int n = (p > 1) ? p - 1 : 1;
+                        n |= n >>> 1; n |= n >>> 2;  n |= n >>> 4;
+                        n |= n >>> 8; n |= n >>> 16; n = (n + 1) << 1;
+                        workQueues = new WorkQueue[n];
+                        ns = STARTED;
+                    }
+                } finally {
+                    unlockRunState(rs, (rs & ~RSLOCK) | ns);
+                }
+            }
+            else if ((q = ws[k = r & m & SQMASK]) != null) {
+                if (q.qlock == 0 && U.compareAndSwapInt(q, QLOCK, 0, 1)) {
+                    ForkJoinTask<?>[] a = q.array;
+                    int s = q.top;
+                    boolean submitted = false; // initial submission or resizing
+                    try {                      // locked version of push
+                        if ((a != null && a.length > s + 1 - q.base) ||
+                            (a = q.growArray()) != null) {
+                            int j = (((a.length - 1) & s) << ASHIFT) + ABASE;
+                            U.putOrderedObject(a, j, task);
+                            U.putOrderedInt(q, QTOP, s + 1);
+                            submitted = true;
+                        }
+                    } finally {
+                        U.compareAndSwapInt(q, QLOCK, 1, 0);
+                    }
+                    if (submitted) {
+                        signalWork(ws, q);
+                        return;
+                    }
+                }
+                move = true;                   // move on failure
+            }
+            else if (((rs = runState) & RSLOCK) == 0) { // create new queue
+                q = new WorkQueue(this, null);
+                q.hint = r;
+                q.config = k | SHARED_QUEUE;
+                q.scanState = INACTIVE;
+                rs = lockRunState();           // publish index
+                if (rs > 0 &&  (ws = workQueues) != null &&
+                    k < ws.length && ws[k] == null)
+                    ws[k] = q;                 // else terminated
+                unlockRunState(rs, rs & ~RSLOCK);
+            }
+            else
+                move = true;                   // move if busy
+            if (move)
+                r = ThreadLocalRandom.advanceProbe(r);
+        }
     }
 
     /**
-     * Tries to pop the given task from submitter's queue in common pool.
+     * Tries to add the given task to a submission queue at
+     * submitter's current queue. Only the (vastly) most common path
+     * is directly handled in this method, while screening for need
+     * for externalSubmit.
+     *
+     * @param task the task. Caller must ensure non-null.
      */
-    final boolean tryExternalUnpush(ForkJoinTask<?> task) {
-        WorkQueue joiner; ForkJoinTask<?>[] a; int m, s;
-        WorkQueue[] ws = workQueues;
-        int z = ThreadLocalRandom.getProbe();
-        boolean popped = false;
-        if (ws != null && (m = ws.length - 1) >= 0 &&
-            (joiner = ws[z & m & SQMASK]) != null &&
-            joiner.base != (s = joiner.top) &&
-            (a = joiner.array) != null) {
-            long j = (((a.length - 1) & (s - 1)) << ASHIFT) + ABASE;
-            if (U.getObject(a, j) == task &&
-                U.compareAndSwapInt(joiner, QLOCK, 0, 1)) {
-                if (joiner.top == s && joiner.array == a &&
-                    U.compareAndSwapObject(a, j, task, null)) {
-                    joiner.top = s - 1;
-                    popped = true;
-                }
-                joiner.qlock = 0;
+    final void externalPush(ForkJoinTask<?> task) {
+        WorkQueue[] ws; WorkQueue q; int m;
+        int r = ThreadLocalRandom.getProbe();
+        int rs = runState;
+        if ((ws = workQueues) != null && (m = (ws.length - 1)) >= 0 &&
+            (q = ws[m & r & SQMASK]) != null && r != 0 && rs > 0 &&
+            U.compareAndSwapInt(q, QLOCK, 0, 1)) {
+            ForkJoinTask<?>[] a; int am, n, s;
+            if ((a = q.array) != null &&
+                (am = a.length - 1) > (n = (s = q.top) - q.base)) {
+                int j = ((am & s) << ASHIFT) + ABASE;
+                U.putOrderedObject(a, j, task);
+                U.putOrderedInt(q, QTOP, s + 1);
+                U.putOrderedInt(q, QLOCK, 0);
+                if (n <= 1)
+                    signalWork(ws, q);
+                return;
             }
+            U.compareAndSwapInt(q, QLOCK, 1, 0);
         }
-        return popped;
+        externalSubmit(task);
     }
 
-    final int externalHelpComplete(CountedCompleter<?> task, int maxTasks) {
-        WorkQueue joiner; int m;
-        WorkQueue[] ws = workQueues;
-        int j = ThreadLocalRandom.getProbe();
-        int s = 0;
-        if (ws != null && (m = ws.length - 1) >= 0 &&
-            (joiner = ws[j & m & SQMASK]) != null && task != null) {
-            int scans = m + m + 1;
-            long c = 0L;             // for stability check
-            j |= 1;                  // poll odd queues
-            for (int k = scans; ; j += 2) {
-                WorkQueue q;
-                if ((s = task.status) < 0)
-                    break;
-                else if (joiner.externalPopAndExecCC(task)) {
-                    if (--maxTasks <= 0) {
-                        s = task.status;
-                        break;
-                    }
-                    k = scans;
+    /**
+     * Returns common pool queue for an external thread.
+     */
+    static WorkQueue commonSubmitterQueue() {
+        ForkJoinPool p = common;
+        int r = ThreadLocalRandom.getProbe();
+        WorkQueue[] ws; int m;
+        return (p != null && (ws = p.workQueues) != null &&
+                (m = ws.length - 1) >= 0) ?
+            ws[m & r & SQMASK] : null;
+    }
+
+    /**
+     * Performs tryUnpush for an external submitter: Finds queue,
+     * locks if apparently non-empty, validates upon locking, and
+     * adjusts top. Each check can fail but rarely does.
+     */
+    final boolean tryExternalUnpush(ForkJoinTask<?> task) {
+        WorkQueue[] ws; WorkQueue w; ForkJoinTask<?>[] a; int m, s;
+        int r = ThreadLocalRandom.getProbe();
+        if ((ws = workQueues) != null && (m = ws.length - 1) >= 0 &&
+            (w = ws[m & r & SQMASK]) != null &&
+            (a = w.array) != null && (s = w.top) != w.base) {
+            long j = (((a.length - 1) & (s - 1)) << ASHIFT) + ABASE;
+            if (U.compareAndSwapInt(w, QLOCK, 0, 1)) {
+                if (w.top == s && w.array == a &&
+                    U.getObject(a, j) == task &&
+                    U.compareAndSwapObject(a, j, task, null)) {
+                    U.putOrderedInt(w, QTOP, s - 1);
+                    U.putOrderedInt(w, QLOCK, 0);
+                    return true;
                 }
-                else if ((s = task.status) < 0)
-                    break;
-                else if ((q = ws[j & m]) != null && q.pollAndExecCC(task)) {
-                    if (--maxTasks <= 0) {
-                        s = task.status;
-                        break;
-                    }
-                    k = scans;
-                }
-                else if (--k < 0) {
-                    if (c == (c = ctl))
-                        break;
-                    k = scans;
-                }
+                U.compareAndSwapInt(w, QLOCK, 1, 0);
             }
         }
-        return s;
+        return false;
+    }
+
+    /**
+     * Performs helpComplete for an external submitter.
+     */
+    final int externalHelpComplete(CountedCompleter<?> task, int maxTasks) {
+        WorkQueue[] ws; int n;
+        int r = ThreadLocalRandom.getProbe();
+        return ((ws = workQueues) == null || (n = ws.length) == 0) ? 0 :
+            helpComplete(ws[(n - 1) & r & SQMASK], task, maxTasks);
     }
 
     // Exported methods
@@ -2447,7 +2533,7 @@
         this(checkParallelism(parallelism),
              checkFactory(factory),
              handler,
-             (asyncMode ? FIFO_QUEUE : LIFO_QUEUE),
+             asyncMode ? FIFO_QUEUE : LIFO_QUEUE,
              "ForkJoinPool-" + nextPoolId() + "-worker-");
         checkPermission();
     }
@@ -2478,8 +2564,7 @@
         this.workerNamePrefix = workerNamePrefix;
         this.factory = factory;
         this.ueh = handler;
-        this.mode = (short)mode;
-        this.parallelism = (short)parallelism;
+        this.config = (parallelism & SMASK) | mode;
         long np = (long)(-parallelism); // offset ctl counts
         this.ctl = ((np << AC_SHIFT) & AC_MASK) | ((np << TC_SHIFT) & TC_MASK);
     }
@@ -2624,7 +2709,7 @@
         // In previous versions of this class, this method constructed
         // a task to run ForkJoinTask.invokeAll, but now external
         // invocation of multiple tasks is at least as efficient.
-        ArrayList<Future<T>> futures = new ArrayList<Future<T>>(tasks.size());
+        ArrayList<Future<T>> futures = new ArrayList<>(tasks.size());
 
         boolean done = false;
         try {
@@ -2670,7 +2755,7 @@
      */
     public int getParallelism() {
         int par;
-        return ((par = parallelism) > 0) ? par : 1;
+        return ((par = config & SMASK) > 0) ? par : 1;
     }
 
     /**
@@ -2692,7 +2777,7 @@
      * @return the number of worker threads
      */
     public int getPoolSize() {
-        return parallelism + (short)(ctl >>> TC_SHIFT);
+        return (config & SMASK) + (short)(ctl >>> TC_SHIFT);
     }
 
     /**
@@ -2702,7 +2787,7 @@
      * @return {@code true} if this pool uses async mode
      */
     public boolean getAsyncMode() {
-        return mode == FIFO_QUEUE;
+        return (config & FIFO_QUEUE) != 0;
     }
 
     /**
@@ -2733,7 +2818,7 @@
      * @return the number of active threads
      */
     public int getActiveThreadCount() {
-        int r = parallelism + (int)(ctl >> AC_SHIFT);
+        int r = (config & SMASK) + (int)(ctl >> AC_SHIFT);
         return (r <= 0) ? 0 : r; // suppress momentarily negative values
     }
 
@@ -2749,7 +2834,7 @@
      * @return {@code true} if all threads are currently idle
      */
     public boolean isQuiescent() {
-        return parallelism + (int)(ctl >> AC_SHIFT) <= 0;
+        return (config & SMASK) + (int)(ctl >> AC_SHIFT) <= 0;
     }
 
     /**
@@ -2764,7 +2849,8 @@
      * @return the number of steals
      */
     public long getStealCount() {
-        long count = stealCount;
+        AtomicLong sc = stealCounter;
+        long count = (sc == null) ? 0L : sc.get();
         WorkQueue[] ws; WorkQueue w;
         if ((ws = workQueues) != null) {
             for (int i = 1; i < ws.length; i += 2) {
@@ -2894,7 +2980,8 @@
     public String toString() {
         // Use a single pass through workQueues to collect counts
         long qt = 0L, qs = 0L; int rc = 0;
-        long st = stealCount;
+        AtomicLong sc = stealCounter;
+        long st = (sc == null) ? 0L : sc.get();
         long c = ctl;
         WorkQueue[] ws; WorkQueue w;
         if ((ws = workQueues) != null) {
@@ -2912,16 +2999,16 @@
                 }
             }
         }
-        int pc = parallelism;
+        int pc = (config & SMASK);
         int tc = pc + (short)(c >>> TC_SHIFT);
         int ac = pc + (int)(c >> AC_SHIFT);
         if (ac < 0) // ignore transient negative
             ac = 0;
-        String level;
-        if ((c & STOP_BIT) != 0)
-            level = (tc == 0) ? "Terminated" : "Terminating";
-        else
-            level = plock < 0 ? "Shutting down" : "Running";
+        int rs = runState;
+        String level = ((rs & TERMINATED) != 0 ? "Terminated" :
+                        (rs & STOP)       != 0 ? "Terminating" :
+                        (rs & SHUTDOWN)   != 0 ? "Shutting down" :
+                        "Running");
         return super.toString() +
             "[" + level +
             ", parallelism = " + pc +
@@ -2983,9 +3070,7 @@
      * @return {@code true} if all tasks have completed following shut down
      */
     public boolean isTerminated() {
-        long c = ctl;
-        return ((c & STOP_BIT) != 0L &&
-                (short)(c >>> TC_SHIFT) + parallelism <= 0);
+        return (runState & TERMINATED) != 0;
     }
 
     /**
@@ -3002,9 +3087,8 @@
      * @return {@code true} if terminating but not yet terminated
      */
     public boolean isTerminating() {
-        long c = ctl;
-        return ((c & STOP_BIT) != 0L &&
-                (short)(c >>> TC_SHIFT) + parallelism > 0);
+        int rs = runState;
+        return (rs & STOP) != 0 && (rs & TERMINATED) == 0;
     }
 
     /**
@@ -3013,7 +3097,7 @@
      * @return {@code true} if this pool has been shut down
      */
     public boolean isShutdown() {
-        return plock < 0;
+        return (runState & SHUTDOWN) != 0;
     }
 
     /**
@@ -3090,8 +3174,9 @@
             }
             found = false;
             for (int j = (m + 1) << 2; j >= 0; --j) {
-                ForkJoinTask<?> t; WorkQueue q; int b;
-                if ((q = ws[r++ & m]) != null && (b = q.base) - q.top < 0) {
+                ForkJoinTask<?> t; WorkQueue q; int b, k;
+                if ((k = r++ & m) <= m && k >= 0 && (q = ws[k]) != null &&
+                    (b = q.base) - q.top < 0) {
                     found = true;
                     if ((t = q.pollAt(b)) != null)
                         t.doExec();
@@ -3115,8 +3200,8 @@
      * in {@link ForkJoinPool}s.
      *
      * <p>A {@code ManagedBlocker} provides two methods.  Method
-     * {@code isReleasable} must return {@code true} if blocking is
-     * not necessary. Method {@code block} blocks the current thread
+     * {@link #isReleasable} must return {@code true} if blocking is
+     * not necessary. Method {@link #block} blocks the current thread
      * if necessary (perhaps internally invoking {@code isReleasable}
      * before actually blocking). These actions are performed by any
      * thread invoking {@link ForkJoinPool#managedBlock(ManagedBlocker)}.
@@ -3185,37 +3270,46 @@
     }
 
     /**
-     * Blocks in accord with the given blocker.  If the current thread
-     * is a {@link ForkJoinWorkerThread}, this method possibly
-     * arranges for a spare thread to be activated if necessary to
-     * ensure sufficient parallelism while the current thread is blocked.
+     * Runs the given possibly blocking task.  When {@linkplain
+     * ForkJoinTask#inForkJoinPool() running in a ForkJoinPool}, this
+     * method possibly arranges for a spare thread to be activated if
+     * necessary to ensure sufficient parallelism while the current
+     * thread is blocked in {@link ManagedBlocker#block blocker.block()}.
      *
-     * <p>If the caller is not a {@link ForkJoinTask}, this method is
+     * <p>This method repeatedly calls {@code blocker.isReleasable()} and
+     * {@code blocker.block()} until either method returns {@code true}.
+     * Every call to {@code blocker.block()} is preceded by a call to
+     * {@code blocker.isReleasable()} that returned {@code false}.
+     *
+     * <p>If not running in a ForkJoinPool, this method is
      * behaviorally equivalent to
      *  <pre> {@code
      * while (!blocker.isReleasable())
      *   if (blocker.block())
-     *     return;
-     * }</pre>
+     *     break;}</pre>
      *
-     * If the caller is a {@code ForkJoinTask}, then the pool may
-     * first be expanded to ensure parallelism, and later adjusted.
+     * If running in a ForkJoinPool, the pool may first be expanded to
+     * ensure sufficient parallelism available during the call to
+     * {@code blocker.block()}.
      *
-     * @param blocker the blocker
-     * @throws InterruptedException if blocker.block did so
+     * @param blocker the blocker task
+     * @throws InterruptedException if {@code blocker.block()} did so
      */
     public static void managedBlock(ManagedBlocker blocker)
         throws InterruptedException {
+        ForkJoinPool p;
+        ForkJoinWorkerThread wt;
         Thread t = Thread.currentThread();
-        if (t instanceof ForkJoinWorkerThread) {
-            ForkJoinPool p = ((ForkJoinWorkerThread)t).pool;
+        if ((t instanceof ForkJoinWorkerThread) &&
+            (p = (wt = (ForkJoinWorkerThread)t).pool) != null) {
+            WorkQueue w = wt.workQueue;
             while (!blocker.isReleasable()) {
-                if (p.tryCompensate(p.ctl)) {
+                if (p.tryCompensate(w)) {
                     try {
                         do {} while (!blocker.isReleasable() &&
                                      !blocker.block());
                     } finally {
-                        p.incrementActiveCount();
+                        U.getAndAddLong(p, CTL, AC_UNIT);
                     }
                     break;
                 }
@@ -3241,15 +3335,18 @@
 
     // Unsafe mechanics
     private static final sun.misc.Unsafe U;
+    private static final int  ABASE;
+    private static final int  ASHIFT;
     private static final long CTL;
+    private static final long RUNSTATE;
+    private static final long STEALCOUNTER;
     private static final long PARKBLOCKER;
-    private static final int ABASE;
-    private static final int ASHIFT;
-    private static final long STEALCOUNT;
-    private static final long PLOCK;
-    private static final long INDEXSEED;
-    private static final long QBASE;
+    private static final long QTOP;
     private static final long QLOCK;
+    private static final long QSCANSTATE;
+    private static final long QPARKER;
+    private static final long QCURRENTSTEAL;
+    private static final long QCURRENTJOIN;
 
     static {
         // initialize field offsets for CAS etc
@@ -3258,20 +3355,26 @@
             Class<?> k = ForkJoinPool.class;
             CTL = U.objectFieldOffset
                 (k.getDeclaredField("ctl"));
-            STEALCOUNT = U.objectFieldOffset
-                (k.getDeclaredField("stealCount"));
-            PLOCK = U.objectFieldOffset
-                (k.getDeclaredField("plock"));
-            INDEXSEED = U.objectFieldOffset
-                (k.getDeclaredField("indexSeed"));
+            RUNSTATE = U.objectFieldOffset
+                (k.getDeclaredField("runState"));
+            STEALCOUNTER = U.objectFieldOffset
+                (k.getDeclaredField("stealCounter"));
             Class<?> tk = Thread.class;
             PARKBLOCKER = U.objectFieldOffset
                 (tk.getDeclaredField("parkBlocker"));
             Class<?> wk = WorkQueue.class;
-            QBASE = U.objectFieldOffset
-                (wk.getDeclaredField("base"));
+            QTOP = U.objectFieldOffset
+                (wk.getDeclaredField("top"));
             QLOCK = U.objectFieldOffset
                 (wk.getDeclaredField("qlock"));
+            QSCANSTATE = U.objectFieldOffset
+                (wk.getDeclaredField("scanState"));
+            QPARKER = U.objectFieldOffset
+                (wk.getDeclaredField("parker"));
+            QCURRENTSTEAL = U.objectFieldOffset
+                (wk.getDeclaredField("currentSteal"));
+            QCURRENTJOIN = U.objectFieldOffset
+                (wk.getDeclaredField("currentJoin"));
             Class<?> ak = ForkJoinTask[].class;
             ABASE = U.arrayBaseOffset(ak);
             int scale = U.arrayIndexScale(ak);
@@ -3282,6 +3385,7 @@
             throw new Error(e);
         }
 
+        commonMaxSpares = DEFAULT_COMMON_MAX_SPARES;
         defaultForkJoinWorkerThreadFactory =
             new DefaultForkJoinWorkerThreadFactory();
         modifyThreadPermission = new RuntimePermission("modifyThread");
@@ -3289,7 +3393,7 @@
         common = java.security.AccessController.doPrivileged
             (new java.security.PrivilegedAction<ForkJoinPool>() {
                 public ForkJoinPool run() { return makeCommonPool(); }});
-        int par = common.parallelism; // report 1 even if threads disabled
+        int par = common.config & SMASK; // report 1 even if threads disabled
         commonParallelism = par > 0 ? par : 1;
     }
 
--- a/src/share/classes/java/util/concurrent/ForkJoinTask.java	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/share/classes/java/util/concurrent/ForkJoinTask.java	Tue Nov 04 17:20:19 2014 +0000
@@ -297,15 +297,22 @@
     }
 
     /**
-     * Tries to set SIGNAL status unless already completed. Used by
-     * ForkJoinPool. Other variants are directly incorporated into
-     * externalAwaitDone etc.
+     * If not done, sets SIGNAL status and performs Object.wait(timeout).
+     * This task may or may not be done on exit. Ignores interrupts.
      *
-     * @return true if successful
+     * @param timeout using Object.wait conventions.
      */
-    final boolean trySetSignal() {
-        int s = status;
-        return s >= 0 && U.compareAndSwapInt(this, STATUS, s, s | SIGNAL);
+    final void internalWait(long timeout) {
+        int s;
+        if ((s = status) >= 0 && // force completer to issue notify
+            U.compareAndSwapInt(this, STATUS, s, s | SIGNAL)) {
+            synchronized (this) {
+                if (status >= 0)
+                    try { wait(timeout); } catch (InterruptedException ie) { }
+                else
+                    notifyAll();
+            }
+        }
     }
 
     /**
@@ -313,35 +320,29 @@
      * @return status upon completion
      */
     private int externalAwaitDone() {
-        int s;
-        ForkJoinPool cp = ForkJoinPool.common;
-        if ((s = status) >= 0) {
-            if (cp != null) {
-                if (this instanceof CountedCompleter)
-                    s = cp.externalHelpComplete((CountedCompleter<?>)this, Integer.MAX_VALUE);
-                else if (cp.tryExternalUnpush(this))
-                    s = doExec();
-            }
-            if (s >= 0 && (s = status) >= 0) {
-                boolean interrupted = false;
-                do {
-                    if (U.compareAndSwapInt(this, STATUS, s, s | SIGNAL)) {
-                        synchronized (this) {
-                            if (status >= 0) {
-                                try {
-                                    wait();
-                                } catch (InterruptedException ie) {
-                                    interrupted = true;
-                                }
+        int s = ((this instanceof CountedCompleter) ? // try helping
+                 ForkJoinPool.common.externalHelpComplete(
+                     (CountedCompleter<?>)this, 0) :
+                 ForkJoinPool.common.tryExternalUnpush(this) ? doExec() : 0);
+        if (s >= 0 && (s = status) >= 0) {
+            boolean interrupted = false;
+            do {
+                if (U.compareAndSwapInt(this, STATUS, s, s | SIGNAL)) {
+                    synchronized (this) {
+                        if (status >= 0) {
+                            try {
+                                wait(0L);
+                            } catch (InterruptedException ie) {
+                                interrupted = true;
                             }
-                            else
-                                notifyAll();
                         }
+                        else
+                            notifyAll();
                     }
-                } while ((s = status) >= 0);
-                if (interrupted)
-                    Thread.currentThread().interrupt();
-            }
+                }
+            } while ((s = status) >= 0);
+            if (interrupted)
+                Thread.currentThread().interrupt();
         }
         return s;
     }
@@ -351,22 +352,22 @@
      */
     private int externalInterruptibleAwaitDone() throws InterruptedException {
         int s;
-        ForkJoinPool cp = ForkJoinPool.common;
         if (Thread.interrupted())
             throw new InterruptedException();
-        if ((s = status) >= 0 && cp != null) {
-            if (this instanceof CountedCompleter)
-                cp.externalHelpComplete((CountedCompleter<?>)this, Integer.MAX_VALUE);
-            else if (cp.tryExternalUnpush(this))
-                doExec();
-        }
-        while ((s = status) >= 0) {
-            if (U.compareAndSwapInt(this, STATUS, s, s | SIGNAL)) {
-                synchronized (this) {
-                    if (status >= 0)
-                        wait();
-                    else
-                        notifyAll();
+        if ((s = status) >= 0 &&
+            (s = ((this instanceof CountedCompleter) ?
+                  ForkJoinPool.common.externalHelpComplete(
+                      (CountedCompleter<?>)this, 0) :
+                  ForkJoinPool.common.tryExternalUnpush(this) ? doExec() :
+                  0)) >= 0) {
+            while ((s = status) >= 0) {
+                if (U.compareAndSwapInt(this, STATUS, s, s | SIGNAL)) {
+                    synchronized (this) {
+                        if (status >= 0)
+                            wait(0L);
+                        else
+                            notifyAll();
+                    }
                 }
             }
         }
@@ -386,7 +387,7 @@
             ((t = Thread.currentThread()) instanceof ForkJoinWorkerThread) ?
             (w = (wt = (ForkJoinWorkerThread)t).workQueue).
             tryUnpush(this) && (s = doExec()) < 0 ? s :
-            wt.pool.awaitJoin(w, this) :
+            wt.pool.awaitJoin(w, this, 0L) :
             externalAwaitDone();
     }
 
@@ -399,7 +400,8 @@
         int s; Thread t; ForkJoinWorkerThread wt;
         return (s = doExec()) < 0 ? s :
             ((t = Thread.currentThread()) instanceof ForkJoinWorkerThread) ?
-            (wt = (ForkJoinWorkerThread)t).pool.awaitJoin(wt.workQueue, this) :
+            (wt = (ForkJoinWorkerThread)t).pool.
+            awaitJoin(wt.workQueue, this, 0L) :
             externalAwaitDone();
     }
 
@@ -577,7 +579,7 @@
         Throwable ex;
         if (e == null || (ex = e.ex) == null)
             return null;
-        if (false && e.thrower != Thread.currentThread().getId()) {
+        if (e.thrower != Thread.currentThread().getId()) {
             Class<? extends Throwable> ec = ex.getClass();
             try {
                 Constructor<?> noArgCtor = null;
@@ -587,13 +589,17 @@
                     Class<?>[] ps = c.getParameterTypes();
                     if (ps.length == 0)
                         noArgCtor = c;
-                    else if (ps.length == 1 && ps[0] == Throwable.class)
-                        return (Throwable)(c.newInstance(ex));
+                    else if (ps.length == 1 && ps[0] == Throwable.class) {
+                        Throwable wx = (Throwable)c.newInstance(ex);
+                        return (wx == null) ? ex : wx;
+                    }
                 }
                 if (noArgCtor != null) {
                     Throwable wx = (Throwable)(noArgCtor.newInstance());
-                    wx.initCause(ex);
-                    return wx;
+                    if (wx != null) {
+                        wx.initCause(ex);
+                        return wx;
+                    }
                 }
             } catch (Exception ignore) {
             }
@@ -1017,67 +1023,40 @@
      */
     public final V get(long timeout, TimeUnit unit)
         throws InterruptedException, ExecutionException, TimeoutException {
+        int s;
+        long nanos = unit.toNanos(timeout);
         if (Thread.interrupted())
             throw new InterruptedException();
-        // Messy in part because we measure in nanosecs, but wait in millisecs
-        int s; long ms;
-        long ns = unit.toNanos(timeout);
-        ForkJoinPool cp;
-        if ((s = status) >= 0 && ns > 0L) {
-            long deadline = System.nanoTime() + ns;
-            ForkJoinPool p = null;
-            ForkJoinPool.WorkQueue w = null;
+        if ((s = status) >= 0 && nanos > 0L) {
+            long d = System.nanoTime() + nanos;
+            long deadline = (d == 0L) ? 1L : d; // avoid 0
             Thread t = Thread.currentThread();
             if (t instanceof ForkJoinWorkerThread) {
                 ForkJoinWorkerThread wt = (ForkJoinWorkerThread)t;
-                p = wt.pool;
-                w = wt.workQueue;
-                p.helpJoinOnce(w, this); // no retries on failure
-            }
-            else if ((cp = ForkJoinPool.common) != null) {
-                if (this instanceof CountedCompleter)
-                    cp.externalHelpComplete((CountedCompleter<?>)this, Integer.MAX_VALUE);
-                else if (cp.tryExternalUnpush(this))
-                    doExec();
+                s = wt.pool.awaitJoin(wt.workQueue, this, deadline);
             }
-            boolean canBlock = false;
-            boolean interrupted = false;
-            try {
-                while ((s = status) >= 0) {
-                    if (w != null && w.qlock < 0)
-                        cancelIgnoringExceptions(this);
-                    else if (!canBlock) {
-                        if (p == null || p.tryCompensate(p.ctl))
-                            canBlock = true;
-                    }
-                    else {
-                        if ((ms = TimeUnit.NANOSECONDS.toMillis(ns)) > 0L &&
-                            U.compareAndSwapInt(this, STATUS, s, s | SIGNAL)) {
-                            synchronized (this) {
-                                if (status >= 0) {
-                                    try {
-                                        wait(ms);
-                                    } catch (InterruptedException ie) {
-                                        if (p == null)
-                                            interrupted = true;
-                                    }
-                                }
-                                else
-                                    notifyAll();
-                            }
+            else if ((s = ((this instanceof CountedCompleter) ?
+                           ForkJoinPool.common.externalHelpComplete(
+                               (CountedCompleter<?>)this, 0) :
+                           ForkJoinPool.common.tryExternalUnpush(this) ?
+                           doExec() : 0)) >= 0) {
+                long ns, ms; // measure in nanosecs, but wait in millisecs
+                while ((s = status) >= 0 &&
+                       (ns = deadline - System.nanoTime()) > 0L) {
+                    if ((ms = TimeUnit.NANOSECONDS.toMillis(ns)) > 0L &&
+                        U.compareAndSwapInt(this, STATUS, s, s | SIGNAL)) {
+                        synchronized (this) {
+                            if (status >= 0)
+                                wait(ms); // OK to throw InterruptedException
+                            else
+                                notifyAll();
                         }
-                        if ((s = status) < 0 || interrupted ||
-                            (ns = deadline - System.nanoTime()) <= 0L)
-                            break;
                     }
                 }
-            } finally {
-                if (p != null && canBlock)
-                    p.incrementActiveCount();
             }
-            if (interrupted)
-                throw new InterruptedException();
         }
+        if (s >= 0)
+            s = status;
         if ((s &= DONE_MASK) != NORMAL) {
             Throwable ex;
             if (s == CANCELLED)
--- a/src/share/classes/java/util/concurrent/ForkJoinWorkerThread.java	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/share/classes/java/util/concurrent/ForkJoinWorkerThread.java	Tue Nov 04 17:20:19 2014 +0000
@@ -66,7 +66,7 @@
      * owning thread.
      *
      * Support for (non-public) subclass InnocuousForkJoinWorkerThread
-     * requires that we break quite a lot of encapulation (via Unsafe)
+     * requires that we break quite a lot of encapsulation (via Unsafe)
      * both here and in the subclass to access and set Thread fields.
      */
 
@@ -118,7 +118,7 @@
      * @return the index number
      */
     public int getPoolIndex() {
-        return workQueue.poolIndex >>> 1; // ignore odd/even tag bit
+        return workQueue.getPoolIndex();
     }
 
     /**
@@ -171,7 +171,7 @@
     }
 
     /**
-     * Erases ThreadLocals by nulling out Thread maps
+     * Erases ThreadLocals by nulling out Thread maps.
      */
     final void eraseThreadLocals() {
         U.putObject(this, THREADLOCALS, null);
@@ -246,8 +246,8 @@
 
         /**
          * Returns a new group with the system ThreadGroup (the
-         * topmost, parentless group) as parent.  Uses Unsafe to
-         * traverse Thread group and ThreadGroup parent fields.
+         * topmost, parent-less group) as parent.  Uses Unsafe to
+         * traverse Thread.group and ThreadGroup.parent fields.
          */
         private static ThreadGroup createThreadGroup() {
             try {
@@ -274,4 +274,3 @@
     }
 
 }
-
--- a/src/share/classes/java/util/logging/FileHandler.java	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/share/classes/java/util/logging/FileHandler.java	Tue Nov 04 17:20:19 2014 +0000
@@ -402,6 +402,14 @@
         openFiles();
     }
 
+    private  boolean isParentWritable(Path path) {
+        Path parent = path.getParent();
+        if (parent == null) {
+            parent = path.toAbsolutePath().getParent();
+        }
+        return parent != null && Files.isWritable(parent);
+    }
+
     /**
      * Open the set of output files, based on the configured
      * instance variables.
@@ -458,7 +466,7 @@
                         // Note that this is a situation that may happen,
                         // but not too frequently.
                         if (Files.isRegularFile(lockFilePath, LinkOption.NOFOLLOW_LINKS)
-                            && Files.isWritable(lockFilePath.getParent())) {
+                            && isParentWritable(lockFilePath)) {
                             try {
                                 channel = FileChannel.open(lockFilePath,
                                     WRITE, APPEND);
--- a/src/share/classes/java/util/logging/LogRecord.java	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/share/classes/java/util/logging/LogRecord.java	Tue Nov 04 17:20:19 2014 +0000
@@ -513,7 +513,13 @@
         // If necessary, try to regenerate the resource bundle.
         if (resourceBundleName != null) {
             try {
-                resourceBundle = ResourceBundle.getBundle(resourceBundleName);
+                // use system class loader to ensure the ResourceBundle
+                // instance is a different instance than null loader uses
+                final ResourceBundle bundle =
+                        ResourceBundle.getBundle(resourceBundleName,
+                                Locale.getDefault(),
+                                ClassLoader.getSystemClassLoader());
+                resourceBundle = bundle;
             } catch (MissingResourceException ex) {
                 // This is not a good place to throw an exception,
                 // so we simply leave the resourceBundle null.
--- a/src/share/classes/java/util/logging/Logger.java	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/share/classes/java/util/logging/Logger.java	Tue Nov 04 17:20:19 2014 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2014, 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
@@ -1934,6 +1934,9 @@
         }
 
         setCallersClassLoaderRef(callersClass);
+        if (isSystemLogger && getCallersClassLoader() != null) {
+            checkPermission();
+        }
         if (findResourceBundle(name, true) == null) {
             // We've failed to find an expected ResourceBundle.
             // unset the caller's ClassLoader since we were unable to find the
@@ -2168,11 +2171,13 @@
                 return trb;
             }
             final String rbName = isSystemLogger
-                ? trb.resourceBundleName
+                // ancestor of a system logger is expected to be a system logger.
+                // ignore resource bundle name if it's not.
+                ? (target.isSystemLogger ? trb.resourceBundleName : null)
                 : target.getResourceBundleName();
             if (rbName != null) {
                 return LoggerBundle.get(rbName,
-                            findResourceBundle(rbName, true));
+                        findResourceBundle(rbName, true));
             }
             target = isSystemLogger ? target.parent : target.getParent();
         }
--- a/src/share/classes/javax/crypto/Cipher.java	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/share/classes/javax/crypto/Cipher.java	Tue Nov 04 17:20:19 2014 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2014, 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
@@ -167,6 +167,11 @@
     private static final Debug debug =
                         Debug.getInstance("jca", "Cipher");
 
+    private static final Debug pdebug =
+                        Debug.getInstance("provider", "Provider");
+    private static final boolean skipDebug =
+        Debug.isOn("engine=") && !Debug.isOn("cipher");
+
     /**
      * Constant used to initialize cipher to encryption mode.
      */
@@ -1110,6 +1115,21 @@
         }
     }
 
+    private static String getOpmodeString(int opmode) {
+        switch (opmode) {
+            case ENCRYPT_MODE:
+                return "encryption";
+            case DECRYPT_MODE:
+                return "decryption";
+            case WRAP_MODE:
+                return "key wrapping";
+            case UNWRAP_MODE:
+                return "key unwrapping";
+            default:
+                return "";
+        }
+    }
+
     /**
      * Initializes this cipher with a key.
      *
@@ -1235,6 +1255,12 @@
 
         initialized = true;
         this.opmode = opmode;
+
+        if (!skipDebug && pdebug != null) {
+            pdebug.println("Cipher." + transformation + " " +
+                getOpmodeString(opmode) + " algorithm from: " +
+                this.provider.getName());
+        }
     }
 
     /**
@@ -1372,6 +1398,12 @@
 
         initialized = true;
         this.opmode = opmode;
+
+        if (!skipDebug && pdebug != null) {
+            pdebug.println("Cipher." + transformation + " " +
+                getOpmodeString(opmode) + " algorithm from: " +
+                this.provider.getName());
+        }
     }
 
     /**
@@ -1509,6 +1541,12 @@
 
         initialized = true;
         this.opmode = opmode;
+
+        if (!skipDebug && pdebug != null) {
+            pdebug.println("Cipher." + transformation + " " +
+                getOpmodeString(opmode) + " algorithm from: " +
+                this.provider.getName());
+        }
     }
 
     /**
@@ -1693,6 +1731,12 @@
 
         initialized = true;
         this.opmode = opmode;
+
+        if (!skipDebug && pdebug != null) {
+            pdebug.println("Cipher." + transformation + " " +
+                getOpmodeString(opmode) + " algorithm from: " +
+                this.provider.getName());
+        }
     }
 
     /**
--- a/src/share/classes/javax/crypto/CipherInputStream.java	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/share/classes/javax/crypto/CipherInputStream.java	Tue Nov 04 17:20:19 2014 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2014, 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
@@ -88,6 +88,8 @@
     private int ofinish = 0;
     // stream status
     private boolean closed = false;
+    // The stream has been read from.  False if the stream has never been read.
+    private boolean read = false;
 
     /**
      * private convenience function.
@@ -103,13 +105,15 @@
     private int getMoreData() throws IOException {
         if (done) return -1;
         int readin = input.read(ibuffer);
+        read = true;
         if (readin == -1) {
             done = true;
             try {
                 obuffer = cipher.doFinal();
+            } catch (IllegalBlockSizeException | BadPaddingException e) {
+                obuffer = null;
+                throw new IOException(e);
             }
-            catch (IllegalBlockSizeException e) {obuffer = null;}
-            catch (BadPaddingException e) {obuffer = null;}
             if (obuffer == null)
                 return -1;
             else {
@@ -120,7 +124,10 @@
         }
         try {
             obuffer = cipher.update(ibuffer, 0, readin);
-        } catch (IllegalStateException e) {obuffer = null;};
+        } catch (IllegalStateException e) {
+            obuffer = null;
+            throw e;
+        }
         ostart = 0;
         if (obuffer == null)
             ofinish = 0;
@@ -308,6 +315,11 @@
             }
         }
         catch (BadPaddingException | IllegalBlockSizeException ex) {
+            /* If no data has been read from the stream to be en/decrypted,
+               we supress any exceptions, and close quietly. */
+            if (read) {
+                throw new IOException(ex);
+            }
         }
         ostart = 0;
         ofinish = 0;
--- a/src/share/classes/javax/crypto/KeyAgreement.java	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/share/classes/javax/crypto/KeyAgreement.java	Tue Nov 04 17:20:19 2014 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2014, 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
@@ -78,6 +78,11 @@
     private static final Debug debug =
                         Debug.getInstance("jca", "KeyAgreement");
 
+    private static final Debug pdebug =
+                        Debug.getInstance("provider", "Provider");
+    private static final boolean skipDebug =
+        Debug.isOn("engine=") && !Debug.isOn("keyagreement");
+
     // The provider
     private Provider provider;
 
@@ -468,6 +473,11 @@
                 throw new InvalidKeyException(e);
             }
         }
+
+        if (!skipDebug && pdebug != null) {
+            pdebug.println("KeyAgreement." + algorithm + " algorithm from: " +
+                this.provider.getName());
+        }
     }
 
     /**
@@ -524,6 +534,11 @@
         } else {
             chooseProvider(I_PARAMS, key, params, random);
         }
+
+        if (!skipDebug && pdebug != null) {
+            pdebug.println("KeyAgreement." + algorithm + " algorithm from: " +
+                this.provider.getName());
+        }
     }
 
     /**
--- a/src/share/classes/javax/crypto/KeyGenerator.java	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/share/classes/javax/crypto/KeyGenerator.java	Tue Nov 04 17:20:19 2014 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2014, 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,6 +33,7 @@
 
 import sun.security.jca.*;
 import sun.security.jca.GetInstance.Instance;
+import sun.security.util.Debug;
 
 /**
  * This class provides the functionality of a secret (symmetric) key generator.
@@ -108,6 +109,11 @@
 
 public class KeyGenerator {
 
+    private static final Debug pdebug =
+                        Debug.getInstance("provider", "Provider");
+    private static final boolean skipDebug =
+        Debug.isOn("engine=") && !Debug.isOn("keygenerator");
+
     // see java.security.KeyPairGenerator for failover notes
 
     private final static int I_NONE   = 1;
@@ -145,6 +151,11 @@
         this.spi = keyGenSpi;
         this.provider = provider;
         this.algorithm = algorithm;
+
+        if (!skipDebug && pdebug != null) {
+            pdebug.println("KeyGenerator." + algorithm + " algorithm from: " +
+                this.provider.getName());
+        }
     }
 
     private KeyGenerator(String algorithm) throws NoSuchAlgorithmException {
@@ -158,6 +169,11 @@
             throw new NoSuchAlgorithmException
                 (algorithm + " KeyGenerator not available");
         }
+
+        if (!skipDebug && pdebug != null) {
+            pdebug.println("KeyGenerator." + algorithm + " algorithm from: " +
+                this.provider.getName());
+        }
     }
 
     /**
--- a/src/share/classes/javax/crypto/Mac.java	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/share/classes/javax/crypto/Mac.java	Tue Nov 04 17:20:19 2014 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2014, 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
@@ -77,6 +77,11 @@
     private static final Debug debug =
                         Debug.getInstance("jca", "Mac");
 
+    private static final Debug pdebug =
+                        Debug.getInstance("provider", "Provider");
+    private static final boolean skipDebug =
+        Debug.isOn("engine=") && !Debug.isOn("mac");
+
     // The provider
     private Provider provider;
 
@@ -413,6 +418,11 @@
             throw new InvalidKeyException("init() failed", e);
         }
         initialized = true;
+
+        if (!skipDebug && pdebug != null) {
+            pdebug.println("Mac." + algorithm + " algorithm from: " +
+                this.provider.getName());
+        }
     }
 
     /**
@@ -435,6 +445,11 @@
             chooseProvider(key, params);
         }
         initialized = true;
+
+        if (!skipDebug && pdebug != null) {
+            pdebug.println("Mac." + algorithm + " algorithm from: " +
+                this.provider.getName());
+        }
     }
 
     /**
--- a/src/share/classes/javax/swing/plaf/basic/BasicRadioButtonUI.java	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/share/classes/javax/swing/plaf/basic/BasicRadioButtonUI.java	Tue Nov 04 17:20:19 2014 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2008, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2014, 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,7 +33,8 @@
 import javax.swing.text.View;
 import sun.swing.SwingUtilities2;
 import sun.awt.AppContext;
-
+import java.util.Enumeration;
+import java.util.HashSet;
 
 /**
  * RadioButtonUI implementation for BasicRadioButtonUI
@@ -44,15 +45,27 @@
 {
     private static final Object BASIC_RADIO_BUTTON_UI_KEY = new Object();
 
+    /**
+     * The icon.
+     */
     protected Icon icon;
 
     private boolean defaults_initialized = false;
 
     private final static String propertyPrefix = "RadioButton" + ".";
 
+    private KeyListener keyListener = null;
+
     // ********************************
     //        Create PLAF
     // ********************************
+
+    /**
+     * Returns an instance of {@code BasicRadioButtonUI}.
+     *
+     * @param b a component
+     * @return an instance of {@code BasicRadioButtonUI}
+     */
     public static ComponentUI createUI(JComponent b) {
         AppContext appContext = AppContext.getAppContext();
         BasicRadioButtonUI radioButtonUI =
@@ -64,6 +77,7 @@
         return radioButtonUI;
     }
 
+    @Override
     protected String getPropertyPrefix() {
         return propertyPrefix;
     }
@@ -71,7 +85,8 @@
     // ********************************
     //        Install PLAF
     // ********************************
-    protected void installDefaults(AbstractButton b){
+    @Override
+    protected void installDefaults(AbstractButton b) {
         super.installDefaults(b);
         if(!defaults_initialized) {
             icon = UIManager.getIcon(getPropertyPrefix() + "icon");
@@ -82,15 +97,80 @@
     // ********************************
     //        Uninstall PLAF
     // ********************************
-    protected void uninstallDefaults(AbstractButton b){
+    @Override
+    protected void uninstallDefaults(AbstractButton b) {
         super.uninstallDefaults(b);
         defaults_initialized = false;
     }
 
+    /**
+     * Returns the default icon.
+     *
+     * @return the default icon
+     */
     public Icon getDefaultIcon() {
         return icon;
     }
 
+    // ********************************
+    //        Install Listeners
+    // ********************************
+    @Override
+    protected void installListeners(AbstractButton button) {
+        super.installListeners(button);
+
+        // Only for JRadioButton
+        if (!(button instanceof JRadioButton))
+            return;
+
+        keyListener = createKeyListener();
+        button.addKeyListener(keyListener);
+
+        // Need to get traversal key event
+        button.setFocusTraversalKeysEnabled(false);
+
+        // Map actions to the arrow keys
+        button.getActionMap().put("Previous", new SelectPreviousBtn());
+        button.getActionMap().put("Next", new SelectNextBtn());
+
+        button.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).
+            put(KeyStroke.getKeyStroke("UP"), "Previous");
+        button.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).
+            put(KeyStroke.getKeyStroke("DOWN"), "Next");
+        button.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).
+            put(KeyStroke.getKeyStroke("LEFT"), "Previous");
+        button.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).
+            put(KeyStroke.getKeyStroke("RIGHT"), "Next");
+    }
+
+    // ********************************
+    //        UnInstall Listeners
+    // ********************************
+    @Override
+    protected void uninstallListeners(AbstractButton button) {
+        super.uninstallListeners(button);
+
+        // Only for JRadioButton
+        if (!(button instanceof JRadioButton))
+            return;
+
+        // Unmap actions from the arrow keys
+        button.getActionMap().remove("Previous");
+        button.getActionMap().remove("Next");
+        button.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT)
+                    .remove(KeyStroke.getKeyStroke("UP"));
+        button.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT)
+                    .remove(KeyStroke.getKeyStroke("DOWN"));
+        button.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT)
+                    .remove(KeyStroke.getKeyStroke("LEFT"));
+        button.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT)
+                    .remove(KeyStroke.getKeyStroke("RIGHT"));
+
+        if (keyListener != null) {
+            button.removeKeyListener(keyListener);
+            keyListener = null;
+        }
+    }
 
     /* These Dimensions/Rectangles are allocated once for all
      * RadioButtonUI.paint() calls.  Re-using rectangles
@@ -106,6 +186,7 @@
     /**
      * paint the radio button
      */
+    @Override
     public synchronized void paint(Graphics g, JComponent c) {
         AbstractButton b = (AbstractButton) c;
         ButtonModel model = b.getModel();
@@ -195,7 +276,14 @@
         }
     }
 
-    protected void paintFocus(Graphics g, Rectangle textRect, Dimension size){
+    /**
+     * Paints focused radio button.
+     *
+     * @param g an instance of {@code Graphics}
+     * @param textRect bounds
+     * @param size the size of radio button
+     */
+    protected void paintFocus(Graphics g, Rectangle textRect, Dimension size) {
     }
 
 
@@ -213,6 +301,7 @@
     /**
      * The preferred size of the radio button
      */
+    @Override
     public Dimension getPreferredSize(JComponent c) {
         if(c.getComponentCount() > 0) {
             return null;
@@ -258,4 +347,262 @@
         height += prefInsets.top + prefInsets.bottom;
         return new Dimension(width, height);
     }
+
+    /////////////////////////// Private functions ////////////////////////
+    /**
+     * Creates the key listener to handle tab navigation in JRadioButton Group.
+     */
+    private KeyListener createKeyListener() {
+         if (keyListener == null) {
+            keyListener = new KeyHandler();
+        }
+        return keyListener;
+    }
+
+
+    private boolean isValidRadioButtonObj(Object obj) {
+        return ((obj instanceof JRadioButton) &&
+                    ((JRadioButton) obj).isVisible() &&
+                    ((JRadioButton) obj).isEnabled());
+    }
+
+    /**
+     * Select radio button based on "Previous" or "Next" operation
+     *
+     * @param event, the event object.
+     * @param next, indicate if it's next one
+     */
+    private void selectRadioButton(ActionEvent event, boolean next) {
+        // Get the source of the event.
+        Object eventSrc = event.getSource();
+
+        // Check whether the source is JRadioButton, it so, whether it is visible
+        if (!isValidRadioButtonObj(eventSrc))
+            return;
+
+        ButtonGroupInfo btnGroupInfo = new ButtonGroupInfo((JRadioButton)eventSrc);
+        btnGroupInfo.selectNewButton(next);
+    }
+
+    /////////////////////////// Inner Classes ////////////////////////
+    @SuppressWarnings("serial")
+    private class SelectPreviousBtn extends AbstractAction {
+        public SelectPreviousBtn() {
+            super("Previous");
+        }
+
+        public void actionPerformed(ActionEvent e) {
+           BasicRadioButtonUI.this.selectRadioButton(e, false);
+        }
+    }
+
+    @SuppressWarnings("serial")
+    private class SelectNextBtn extends AbstractAction{
+        public SelectNextBtn() {
+            super("Next");
+        }
+
+        public void actionPerformed(ActionEvent e) {
+            BasicRadioButtonUI.this.selectRadioButton(e, true);
+        }
+    }
+
+    /**
+     * ButtonGroupInfo, used to get related info in button group
+     * for given radio button
+     */
+    private class ButtonGroupInfo {
+
+        JRadioButton activeBtn = null;
+
+        JRadioButton firstBtn = null;
+        JRadioButton lastBtn = null;
+
+        JRadioButton previousBtn = null;
+        JRadioButton nextBtn = null;
+
+        HashSet<JRadioButton> btnsInGroup = null;
+
+        boolean srcFound = false;
+        public ButtonGroupInfo(JRadioButton btn) {
+            activeBtn = btn;
+            btnsInGroup = new HashSet<JRadioButton>();
+        }
+
+        // Check if given object is in the button group
+        boolean containsInGroup(Object obj){
+           return btnsInGroup.contains(obj);
+        }
+
+        // Check if the next object to gain focus belongs
+        // to the button group or not
+        Component getFocusTransferBaseComponent(boolean next){
+            Component focusBaseComp = activeBtn;
+            Window container = SwingUtilities.getWindowAncestor(activeBtn);
+            if (container != null) {
+                FocusTraversalPolicy policy = container.getFocusTraversalPolicy();
+                Component comp = next ? policy.getComponentAfter(container, activeBtn)
+                                      : policy.getComponentBefore(container, activeBtn);
+
+                // If next component in the button group, use last/first button as base focus
+                // otherwise, use the activeBtn as the base focus
+                if (containsInGroup(comp)) {
+                    focusBaseComp = next ? lastBtn : firstBtn;
+                }
+            }
+
+            return focusBaseComp;
+        }
+
+        boolean getButtonGroupInfo() {
+            if (activeBtn == null)
+                return false;
+
+            btnsInGroup.clear();
+
+            // Get the button model from the source.
+            ButtonModel model = activeBtn.getModel();
+            if (!(model instanceof DefaultButtonModel))
+                return false;
+
+            // If the button model is DefaultButtonModel, and use it, otherwise return.
+            DefaultButtonModel bm = (DefaultButtonModel) model;
+
+            // get the ButtonGroup of the button from the button model
+            ButtonGroup group = bm.getGroup();
+            if (group == null)
+                return false;
+
+            // Get all the buttons in the group
+            Enumeration<AbstractButton> e = group.getElements();
+            if (e == null)
+                return false;
+
+            while (e.hasMoreElements()) {
+                AbstractButton curElement = e.nextElement();
+                if (!isValidRadioButtonObj(curElement))
+                    continue;
+
+                btnsInGroup.add((JRadioButton) curElement);
+
+                // If firstBtn is not set yet, curElement is that first button
+                if (null == firstBtn)
+                    firstBtn = (JRadioButton) curElement;
+
+                if (activeBtn == curElement)
+                    srcFound = true;
+                else if (!srcFound) {
+                    // The source has not been yet found and the current element
+                    // is the last previousBtn
+                    previousBtn = (JRadioButton) curElement;
+                } else if (nextBtn == null) {
+                    // The source has been found and the current element
+                    // is the next valid button of the list
+                    nextBtn = (JRadioButton) curElement;
+                }
+
+                // Set new last "valid" JRadioButton of the list
+                lastBtn = (JRadioButton) curElement;
+            }
+
+            return true;
+        }
+
+        /**
+          * Find the new radio button that focus needs to be
+          * moved to in the group, select the button
+          *
+          * @param next, indicate if it's arrow up/left or down/right
+          */
+        void selectNewButton(boolean next) {
+            if (!getButtonGroupInfo())
+                return;
+
+            if (srcFound) {
+                JRadioButton newSelectedBtn = null;
+                if (next) {
+                    // Select Next button. Cycle to the first button if the source
+                    // button is the last of the group.
+                    newSelectedBtn = (null == nextBtn) ? firstBtn : nextBtn;
+                } else {
+                    // Select previous button. Cycle to the last button if the source
+                    // button is the first button of the group.
+                    newSelectedBtn = (null == previousBtn) ? lastBtn : previousBtn;
+                }
+                if (newSelectedBtn != null &&
+                    (newSelectedBtn != activeBtn)) {
+                    newSelectedBtn.requestFocusInWindow();
+                    newSelectedBtn.setSelected(true);
+                }
+            }
+        }
+
+        /**
+          * Find the button group the passed in JRadioButton belongs to, and
+          * move focus to next component of the last button in the group
+          * or previous component of first button
+          *
+          * @param next, indicate if jump to next component or previous
+          */
+        void jumpToNextComponent(boolean next) {
+            if (!getButtonGroupInfo()){
+                // In case the button does not belong to any group, it needs
+                // to be treated as a component
+                if (activeBtn != null){
+                    lastBtn = activeBtn;
+                    firstBtn = activeBtn;
+                }
+                else
+                    return;
+            }
+
+            // Update the component we will use as base to transfer
+            // focus from
+            JComponent compTransferFocusFrom = activeBtn;
+
+            // If next component in the parent window is not in
+            // the button group, current active button will be
+            // base, otherwise, the base will be first or last
+            // button in the button group
+            Component focusBase = getFocusTransferBaseComponent(next);
+            if (focusBase != null){
+                if (next) {
+                    KeyboardFocusManager.
+                        getCurrentKeyboardFocusManager().focusNextComponent(focusBase);
+                } else {
+                    KeyboardFocusManager.
+                        getCurrentKeyboardFocusManager().focusPreviousComponent(focusBase);
+                }
+            }
+        }
+    }
+
+    /**
+     * Radiobutton KeyListener
+     */
+    private class KeyHandler implements KeyListener {
+
+        // This listener checks if the key event is a KeyEvent.VK_TAB
+        // or shift + KeyEvent.VK_TAB event on a radio button, consume the event
+        // if so and move the focus to next/previous component
+        public void keyPressed(KeyEvent e) {
+            if (e.getKeyCode() == KeyEvent.VK_TAB) {
+                 // Get the source of the event.
+                Object eventSrc = e.getSource();
+
+                // Check whether the source is a visible and enabled JRadioButton
+                if (isValidRadioButtonObj(eventSrc)) {
+                    e.consume();
+                    ButtonGroupInfo btnGroupInfo = new ButtonGroupInfo((JRadioButton)eventSrc);
+                    btnGroupInfo.jumpToNextComponent(!e.isShiftDown());
+                }
+            }
+        }
+
+        public void keyReleased(KeyEvent e) {
+        }
+
+        public void keyTyped(KeyEvent e) {
+        }
+    }
 }
--- a/src/share/classes/javax/swing/plaf/basic/BasicTabbedPaneUI.java	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/share/classes/javax/swing/plaf/basic/BasicTabbedPaneUI.java	Tue Nov 04 17:20:19 2014 +0000
@@ -3239,6 +3239,7 @@
                 }
             }
             tabScroller.tabPanel.setPreferredSize(new Dimension(totalWidth, totalHeight));
+            tabScroller.tabPanel.invalidate();
         }
     }
 
@@ -3606,6 +3607,7 @@
             setFocusIndex(tabPane.getSelectedIndex(), false);
 
             if (scrollableTabLayoutEnabled()) {
+                ensureCurrentLayout();
                 int index = tabPane.getSelectedIndex();
                 if (index < rects.length && index != -1) {
                     tabScroller.tabPanel.scrollRectToVisible(
--- a/src/share/classes/javax/swing/text/html/HTMLDocument.java	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/share/classes/javax/swing/text/html/HTMLDocument.java	Tue Nov 04 17:20:19 2014 +0000
@@ -1376,8 +1376,13 @@
             Element parent = elem.getParentElement();
 
             if (parent != null) {
+                // If we are going to insert the string into the body
+                // section, it is necessary to set the corrsponding flag.
+                if (HTML.Tag.BODY.name.equals(parent.getName())) {
+                    insertInBody = true;
+                }
                 int offset = elem.getEndOffset();
-                if (offset > getLength()) {
+                if (offset > (getLength() + 1)) {
                     offset--;
                 }
                 else if (elem.isLeaf() && getText(offset - 1, 1).
@@ -1385,6 +1390,10 @@
                     offset--;
                 }
                 insertHTML(parent, offset, htmlText, false);
+                // Cleanup the flag, if any.
+                if (insertInBody) {
+                    insertInBody = false;
+                }
             }
         }
     }
@@ -1823,6 +1832,11 @@
     private static char[] NEWLINE;
 
     /**
+     * Indicates that direct insertion to body section takes place.
+     */
+    private boolean insertInBody = false;
+
+    /**
      * I18N property key.
      *
      * @see AbstractDocument#I18NProperty
@@ -2571,7 +2585,9 @@
                     // Assume content should be added.
                     foundInsertTag(false);
                     foundInsertTag = true;
-                    inParagraph = impliedP = true;
+                    // If content is added directly to the body, it should
+                    // be wrapped by p-implied.
+                    inParagraph = impliedP = !insertInBody;
                 }
                 if (data.length >= 1) {
                     addContent(data, 0, data.length);
--- a/src/share/classes/sun/awt/datatransfer/DataTransferer.java	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/share/classes/sun/awt/datatransfer/DataTransferer.java	Tue Nov 04 17:20:19 2014 +0000
@@ -2895,6 +2895,14 @@
                     return comp;
                 }
 
+                if (flavor1.isFlavorTextType()) {
+                    return 1;
+                }
+
+                if (flavor2.isFlavorTextType()) {
+                    return -1;
+                }
+
                 // Next, look for application/x-java-* types. Prefer unknown
                 // MIME types because if the user provides his own data flavor,
                 // it will likely be the most descriptive one.
--- a/src/share/classes/sun/awt/image/BytePackedRaster.java	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/share/classes/sun/awt/image/BytePackedRaster.java	Tue Nov 04 17:20:19 2014 +0000
@@ -1408,10 +1408,10 @@
             }
         }
 
-        int lastbit = (dataBitOffset
-                       + (height-1) * scanlineStride * 8
-                       + (width-1) * pixelBitStride
-                       + pixelBitStride - 1);
+        long lastbit = (long) dataBitOffset
+                       + (long) (height - 1) * (long) scanlineStride * 8
+                       + (long) (width - 1) * (long) pixelBitStride
+                       + (long) pixelBitStride - 1;
         if (lastbit < 0 || lastbit / 8 >= data.length) {
             throw new RasterFormatException("raster dimensions overflow " +
                                             "array bounds");
--- a/src/share/classes/sun/invoke/util/VerifyAccess.java	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/share/classes/sun/invoke/util/VerifyAccess.java	Tue Nov 04 17:20:19 2014 +0000
@@ -102,19 +102,24 @@
         case PUBLIC:
             return true;  // already checked above
         case PROTECTED:
+            assert !defc.isInterface(); // protected members aren't allowed in interfaces
             if ((allowedModes & PROTECTED_OR_PACKAGE_ALLOWED) != 0 &&
                 isSamePackage(defc, lookupClass))
                 return true;
             if ((allowedModes & PROTECTED) == 0)
                 return false;
+            // Protected members are accessible by subclasses, which does not include interfaces.
+            // Interfaces are types, not classes. They should not have access to
+            // protected members in j.l.Object, even though it is their superclass.
             if ((mods & STATIC) != 0 &&
                 !isRelatedClass(refc, lookupClass))
                 return false;
             if ((allowedModes & PROTECTED) != 0 &&
-                isSuperClass(defc, lookupClass))
+                isSubClass(lookupClass, defc))
                 return true;
             return false;
         case PACKAGE_ONLY:  // That is, zero.  Unmarked member is package-only access.
+            assert !defc.isInterface(); // package-private members aren't allowed in interfaces
             return ((allowedModes & PACKAGE_ALLOWED) != 0 &&
                     isSamePackage(defc, lookupClass));
         case PRIVATE:
@@ -129,12 +134,13 @@
 
     static boolean isRelatedClass(Class<?> refc, Class<?> lookupClass) {
         return (refc == lookupClass ||
-                refc.isAssignableFrom(lookupClass) ||
-                lookupClass.isAssignableFrom(refc));
+                isSubClass(refc, lookupClass) ||
+                isSubClass(lookupClass, refc));
     }
 
-    static boolean isSuperClass(Class<?> defc, Class<?> lookupClass) {
-        return defc.isAssignableFrom(lookupClass);
+    static boolean isSubClass(Class<?> lookupClass, Class<?> defc) {
+        return defc.isAssignableFrom(lookupClass) &&
+               !lookupClass.isInterface(); // interfaces are types, not classes.
     }
 
     static int getClassModifiers(Class<?> c) {
--- a/src/share/classes/sun/net/www/protocol/http/HttpURLConnection.java	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/share/classes/sun/net/www/protocol/http/HttpURLConnection.java	Tue Nov 04 17:20:19 2014 +0000
@@ -1045,7 +1045,7 @@
             try {
                 URI uri = ParseUtil.toURI(url);
                 if (uri != null) {
-                    cachedResponse = cacheHandler.get(uri, getRequestMethod(), requests.getHeaders(EXCLUDE_HEADERS));
+                    cachedResponse = cacheHandler.get(uri, getRequestMethod(), getUserSetHeaders().getHeaders());
                     if ("https".equalsIgnoreCase(uri.getScheme())
                         && !(cachedResponse instanceof SecureCacheResponse)) {
                         cachedResponse = null;
--- a/src/share/classes/sun/nio/ch/DatagramChannelImpl.java	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/share/classes/sun/nio/ch/DatagramChannelImpl.java	Tue Nov 04 17:20:19 2014 +0000
@@ -740,6 +740,26 @@
 
                     // set or refresh local address
                     localAddress = Net.localAddress(fd);
+
+                    // flush any packets already received.
+                    boolean blocking = false;
+                    synchronized (blockingLock()) {
+                        try {
+                            blocking = isBlocking();
+                            // remainder of each packet thrown away
+                            ByteBuffer tmpBuf = ByteBuffer.allocate(1);
+                            if (blocking) {
+                                configureBlocking(false);
+                            }
+                            do {
+                                tmpBuf.clear();
+                            } while (receive(tmpBuf) != null);
+                        } finally {
+                            if (blocking) {
+                                configureBlocking(true);
+                            }
+                        }
+                    }
                 }
             }
         }
--- a/src/share/classes/sun/reflect/annotation/AnnotationInvocationHandler.java	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/share/classes/sun/reflect/annotation/AnnotationInvocationHandler.java	Tue Nov 04 17:20:19 2014 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2014, 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
@@ -29,7 +29,6 @@
 import java.lang.reflect.*;
 import java.io.Serializable;
 import java.util.*;
-import java.lang.annotation.*;
 import java.security.AccessController;
 import java.security.PrivilegedAction;
 
@@ -45,6 +44,11 @@
     private final Map<String, Object> memberValues;
 
     AnnotationInvocationHandler(Class<? extends Annotation> type, Map<String, Object> memberValues) {
+        Class<?>[] superInterfaces = type.getInterfaces();
+        if (!type.isAnnotation() ||
+            superInterfaces.length != 1 ||
+            superInterfaces[0] != java.lang.annotation.Annotation.class)
+            throw new AnnotationFormatError("Attempt to create proxy for a non-annotation type.");
         this.type = type;
         this.memberValues = memberValues;
     }
@@ -57,13 +61,17 @@
         if (member.equals("equals") && paramTypes.length == 1 &&
             paramTypes[0] == Object.class)
             return equalsImpl(args[0]);
-        assert paramTypes.length == 0;
-        if (member.equals("toString"))
+        if (paramTypes.length != 0)
+            throw new AssertionError("Too many parameters for an annotation method");
+
+        switch(member) {
+        case "toString":
             return toStringImpl();
-        if (member.equals("hashCode"))
+        case "hashCode":
             return hashCodeImpl();
-        if (member.equals("annotationType"))
+        case "annotationType":
             return type;
+        }
 
         // Handle annotation member accessors
         Object result = memberValues.get(member);
@@ -129,7 +137,7 @@
      * Implementation of dynamicProxy.toString()
      */
     private String toStringImpl() {
-        StringBuffer result = new StringBuffer(128);
+        StringBuilder result = new StringBuilder(128);
         result.append('@');
         result.append(type.getName());
         result.append('(');
@@ -277,6 +285,7 @@
                 new PrivilegedAction<Method[]>() {
                     public Method[] run() {
                         final Method[] mm = type.getDeclaredMethods();
+                        validateAnnotationMethods(mm);
                         AccessibleObject.setAccessible(mm, true);
                         return mm;
                     }
@@ -287,6 +296,94 @@
     private transient volatile Method[] memberMethods = null;
 
     /**
+     * Validates that a method is structurally appropriate for an
+     * annotation type. As of Java SE 8, annotation types cannot
+     * contain static methods and the declared methods of an
+     * annotation type must take zero arguments and there are
+     * restrictions on the return type.
+     */
+    private void validateAnnotationMethods(Method[] memberMethods) {
+        /*
+         * Specification citations below are from JLS
+         * 9.6.1. Annotation Type Elements
+         */
+        boolean valid = true;
+        for(Method method : memberMethods) {
+            /*
+             * "By virtue of the AnnotationTypeElementDeclaration
+             * production, a method declaration in an annotation type
+             * declaration cannot have formal parameters, type
+             * parameters, or a throws clause.
+             *
+             * "By virtue of the AnnotationTypeElementModifier
+             * production, a method declaration in an annotation type
+             * declaration cannot be default or static."
+             */
+            if (method.getModifiers() != (Modifier.PUBLIC | Modifier.ABSTRACT) ||
+                method.isDefault() ||
+                method.getParameterCount() != 0 ||
+                method.getExceptionTypes().length != 0) {
+                valid = false;
+                break;
+            }
+
+            /*
+             * "It is a compile-time error if the return type of a
+             * method declared in an annotation type is not one of the
+             * following: a primitive type, String, Class, any
+             * parameterized invocation of Class, an enum type
+             * (section 8.9), an annotation type, or an array type
+             * (chapter 10) whose element type is one of the preceding
+             * types."
+             */
+            Class<?> returnType = method.getReturnType();
+            if (returnType.isArray()) {
+                returnType = returnType.getComponentType();
+                if (returnType.isArray()) { // Only single dimensional arrays
+                    valid = false;
+                    break;
+                }
+            }
+
+            if (!((returnType.isPrimitive() && returnType != void.class) ||
+                  returnType == java.lang.String.class ||
+                  returnType == java.lang.Class.class ||
+                  returnType.isEnum() ||
+                  returnType.isAnnotation())) {
+                valid = false;
+                break;
+            }
+
+            /*
+             * "It is a compile-time error if any method declared in an
+             * annotation type has a signature that is
+             * override-equivalent to that of any public or protected
+             * method declared in class Object or in the interface
+             * java.lang.annotation.Annotation."
+             *
+             * The methods in Object or Annotation meeting the other
+             * criteria (no arguments, contrained return type, etc.)
+             * above are:
+             *
+             * String toString()
+             * int hashCode()
+             * Class<? extends Annotation> annotationType()
+             */
+            String methodName = method.getName();
+            if ((methodName.equals("toString") && returnType == java.lang.String.class) ||
+                (methodName.equals("hashCode") && returnType == int.class) ||
+                (methodName.equals("annotationType") && returnType == java.lang.Class.class)) {
+                valid = false;
+                break;
+            }
+        }
+        if (valid)
+            return;
+        else
+            throw new AnnotationFormatError("Malformed method on an annotation type");
+    }
+
+    /**
      * Implementation of dynamicProxy.hashCode()
      */
     private int hashCodeImpl() {
@@ -330,7 +427,6 @@
         throws java.io.IOException, ClassNotFoundException {
         s.defaultReadObject();
 
-
         // Check to make sure that types have not evolved incompatibly
 
         AnnotationType annotationType = null;
@@ -343,7 +439,6 @@
 
         Map<String, Class<?>> memberTypes = annotationType.memberTypes();
 
-
         // If there are annotation members without values, that
         // situation is handled by the invoke method.
         for (Map.Entry<String, Object> memberValue : memberValues.entrySet()) {
--- a/src/share/classes/sun/security/jgss/krb5/Krb5Context.java	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/share/classes/sun/security/jgss/krb5/Krb5Context.java	Tue Nov 04 17:20:19 2014 +0000
@@ -241,8 +241,11 @@
      * establishment.
      */
     public final void requestCredDeleg(boolean value) throws GSSException {
-        if (state == STATE_NEW && isInitiator())
-            credDelegState  = value;
+        if (state == STATE_NEW && isInitiator()) {
+            if (myCred == null || !(myCred instanceof Krb5ProxyCredential)) {
+                credDelegState  = value;
+            }
+        }
     }
 
     /**
--- a/src/share/classes/sun/security/jgss/spnego/SpNegoContext.java	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/share/classes/sun/security/jgss/spnego/SpNegoContext.java	Tue Nov 04 17:20:19 2014 +0000
@@ -523,13 +523,6 @@
                     valid = false;
                 }
 
-                // get the mechanism token
-                byte[] mechToken = initToken.getMechToken();
-                if (mechToken == null) {
-                    throw new GSSException(GSSException.FAILURE, -1,
-                            "mechToken is missing");
-                }
-
                 /*
                  * Select the best match between the list of mechs
                  * that the initiator requested and the list that
@@ -545,7 +538,19 @@
                 internal_mech = mech_wanted;
 
                 // get the token for mechanism
-                byte[] accept_token = GSS_acceptSecContext(mechToken);
+                byte[] accept_token;
+
+                if (mechList[0].equals(mech_wanted)) {
+                    // get the mechanism token
+                    byte[] mechToken = initToken.getMechToken();
+                    if (mechToken == null) {
+                        throw new GSSException(GSSException.FAILURE, -1,
+                                "mechToken is missing");
+                    }
+                    accept_token = GSS_acceptSecContext(mechToken);
+                } else {
+                    accept_token = null;
+                }
 
                 // verify MIC
                 if (!GSSUtil.useMSInterop() && valid) {
@@ -594,9 +599,27 @@
                 retVal = targToken.getEncoded();
 
             } else if (state == STATE_IN_PROCESS) {
+                // read data
+                byte[] token = new byte[is.available()];
+                SpNegoToken.readFully(is, token);
+                if (DEBUG) {
+                    System.out.println("SpNegoContext.acceptSecContext: " +
+                            "receiving token = " +
+                            SpNegoToken.getHexBytes(token));
+                }
+
+                // read the SPNEGO token
+                // token will be validated when parsing
+                NegTokenTarg inputToken = new NegTokenTarg(token);
+
+                if (DEBUG) {
+                    System.out.println("SpNegoContext.acceptSecContext: " +
+                            "received token of type = " +
+                            SpNegoToken.getTokenName(inputToken.getType()));
+                }
+
                 // read the token
-                byte[] client_token = new byte[is.available()];
-                SpNegoToken.readFully(is, client_token);
+                byte[] client_token = inputToken.getResponseToken();
                 byte[] accept_token = GSS_acceptSecContext(client_token);
                 if (accept_token == null) {
                     valid = false;
@@ -1055,7 +1078,7 @@
      * This is only valid on the acceptor side of the context.
      * @return GSSCredentialSpi object for the delegated credential
      * @exception GSSException
-     * @see GSSContext#getDelegCredState
+     * @see GSSContext#getCredDelegState
      */
     public final GSSCredentialSpi getDelegCred() throws GSSException {
         if (state != STATE_IN_PROCESS && state != STATE_DONE)
--- a/src/share/classes/sun/security/provider/X509Factory.java	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/share/classes/sun/security/provider/X509Factory.java	Tue Nov 04 17:20:19 2014 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2014, 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
@@ -80,6 +80,7 @@
      *
      * @exception CertificateException on parsing errors.
      */
+    @Override
     public Certificate engineGenerateCertificate(InputStream is)
         throws CertificateException
     {
@@ -103,8 +104,8 @@
                 throw new IOException("Empty input");
             }
         } catch (IOException ioe) {
-            throw (CertificateException)new CertificateException
-            ("Could not parse certificate: " + ioe.toString()).initCause(ioe);
+            throw new CertificateException("Could not parse certificate: " +
+                    ioe.toString(), ioe);
         }
     }
 
@@ -140,6 +141,12 @@
      * It is useful for certificates that cannot be created via
      * generateCertificate() and for converting other X509Certificate
      * implementations to an X509CertImpl.
+     *
+     * @param c The source X509Certificate
+     * @return An X509CertImpl object that is either a cached certificate or a
+     *      newly built X509CertImpl from the provided X509Certificate
+     * @throws CertificateException if failures occur while obtaining the DER
+     *      encoding for certificate data.
      */
     public static synchronized X509CertImpl intern(X509Certificate c)
             throws CertificateException {
@@ -170,6 +177,12 @@
     /**
      * Return an interned X509CRLImpl for the given certificate.
      * For more information, see intern(X509Certificate).
+     *
+     * @param c The source X509CRL
+     * @return An X509CRLImpl object that is either a cached CRL or a
+     *      newly built X509CRLImpl from the provided X509CRL
+     * @throws CRLException if failures occur while obtaining the DER
+     *      encoding for CRL data.
      */
     public static synchronized X509CRLImpl intern(X509CRL c)
             throws CRLException {
@@ -229,6 +242,7 @@
      * @exception CertificateException if an exception occurs while decoding
      * @since 1.4
      */
+    @Override
     public CertPath engineGenerateCertPath(InputStream inStream)
         throws CertificateException
     {
@@ -260,6 +274,7 @@
      *   the encoding requested is not supported
      * @since 1.4
      */
+    @Override
     public CertPath engineGenerateCertPath(InputStream inStream,
         String encoding) throws CertificateException
     {
@@ -292,6 +307,7 @@
      * @exception CertificateException if an exception occurs
      * @since 1.4
      */
+    @Override
     public CertPath
         engineGenerateCertPath(List<? extends Certificate> certificates)
         throws CertificateException
@@ -311,6 +327,7 @@
      *         <code>CertPath</code> encodings (as <code>String</code>s)
      * @since 1.4
      */
+    @Override
     public Iterator<String> engineGetCertPathEncodings() {
         return(X509CertPath.getEncodingsStatic());
     }
@@ -326,6 +343,7 @@
      *
      * @exception CertificateException on parsing errors.
      */
+    @Override
     public Collection<? extends java.security.cert.Certificate>
             engineGenerateCertificates(InputStream is)
             throws CertificateException {
@@ -351,6 +369,7 @@
      *
      * @exception CRLException on parsing errors.
      */
+    @Override
     public CRL engineGenerateCRL(InputStream is)
         throws CRLException
     {
@@ -388,6 +407,7 @@
      *
      * @exception CRLException on parsing errors.
      */
+    @Override
     public Collection<? extends java.security.cert.CRL> engineGenerateCRLs(
             InputStream is) throws CRLException
     {
@@ -410,11 +430,30 @@
         parseX509orPKCS7Cert(InputStream is)
         throws CertificateException, IOException
     {
+        int peekByte;
+        byte[] data;
+        PushbackInputStream pbis = new PushbackInputStream(is);
         Collection<X509CertImpl> coll = new ArrayList<>();
-        byte[] data = readOneBlock(is);
+
+        // Test the InputStream for end-of-stream.  If the stream's
+        // initial state is already at end-of-stream then return
+        // an empty collection.  Otherwise, push the byte back into the
+        // stream and let readOneBlock look for the first certificate.
+        peekByte = pbis.read();
+        if (peekByte == -1) {
+            return new ArrayList<>(0);
+        } else {
+            pbis.unread(peekByte);
+            data = readOneBlock(pbis);
+        }
+
+        // If we end up with a null value after reading the first block
+        // then we know the end-of-stream has been reached and no certificate
+        // data has been found.
         if (data == null) {
-            return new ArrayList<>(0);
+            throw new CertificateException("No certificate data found");
         }
+
         try {
             PKCS7 pkcs7 = new PKCS7(data);
             X509Certificate[] certs = pkcs7.getCertificates();
@@ -422,13 +461,13 @@
             if (certs != null) {
                 return Arrays.asList(certs);
             } else {
-                // no crls provided
+                // no certificates provided
                 return new ArrayList<>(0);
             }
         } catch (ParsingException e) {
             while (data != null) {
                 coll.add(new X509CertImpl(data));
-                data = readOneBlock(is);
+                data = readOneBlock(pbis);
             }
         }
         return coll;
@@ -443,11 +482,30 @@
         parseX509orPKCS7CRL(InputStream is)
         throws CRLException, IOException
     {
+        int peekByte;
+        byte[] data;
+        PushbackInputStream pbis = new PushbackInputStream(is);
         Collection<X509CRLImpl> coll = new ArrayList<>();
-        byte[] data = readOneBlock(is);
+
+        // Test the InputStream for end-of-stream.  If the stream's
+        // initial state is already at end-of-stream then return
+        // an empty collection.  Otherwise, push the byte back into the
+        // stream and let readOneBlock look for the first CRL.
+        peekByte = pbis.read();
+        if (peekByte == -1) {
+            return new ArrayList<>(0);
+        } else {
+            pbis.unread(peekByte);
+            data = readOneBlock(pbis);
+        }
+
+        // If we end up with a null value after reading the first block
+        // then we know the end-of-stream has been reached and no CRL
+        // data has been found.
         if (data == null) {
-            return new ArrayList<>(0);
+            throw new CRLException("No CRL data found");
         }
+
         try {
             PKCS7 pkcs7 = new PKCS7(data);
             X509CRL[] crls = pkcs7.getCRLs();
@@ -461,7 +519,7 @@
         } catch (ParsingException e) {
             while (data != null) {
                 coll.add(new X509CRLImpl(data));
-                data = readOneBlock(is);
+                data = readOneBlock(pbis);
             }
         }
         return coll;
@@ -519,7 +577,7 @@
 
             // Step 2: Read the rest of header, determine the line end
             int end;
-            StringBuffer header = new StringBuffer("-----");
+            StringBuilder header = new StringBuilder("-----");
             while (true) {
                 int next = is.read();
                 if (next == -1) {
@@ -562,7 +620,7 @@
             }
 
             // Step 4: Consume the footer
-            StringBuffer footer = new StringBuffer("-");
+            StringBuilder footer = new StringBuilder("-");
             while (true) {
                 int next = is.read();
                 // Add next == '\n' for maximum safety, in case endline
@@ -623,7 +681,7 @@
 
         int n = is.read();
         if (n == -1) {
-            throw new IOException("BER/DER length info ansent");
+            throw new IOException("BER/DER length info absent");
         }
         bout.write(n);
 
--- a/src/share/classes/sun/security/ssl/CipherSuite.java	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/share/classes/sun/security/ssl/CipherSuite.java	Tue Nov 04 17:20:19 2014 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 2014, 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
@@ -968,7 +968,7 @@
          * 1. Prefer Suite B compliant cipher suites, see RFC6460 (To be
          *    changed later, see below).
          * 2. Prefer the stronger bulk cipher, in the order of AES_256(GCM),
-         *    AES_128(GCM), AES_256, AES_128, RC-4, 3DES-EDE.
+         *    AES_128(GCM), AES_256, AES_128, 3DES-EDE, RC-4.
          * 3. Prefer the stronger MAC algorithm, in the order of SHA384,
          *    SHA256, SHA, MD5.
          * 4. Prefer the better performance of key exchange and digital
@@ -1055,18 +1055,6 @@
         add("TLS_DHE_DSS_WITH_AES_128_CBC_SHA",
             0x0032, --p, K_DHE_DSS,     B_AES_128, T);
 
-        // RC-4
-        add("TLS_ECDHE_ECDSA_WITH_RC4_128_SHA",
-            0xC007, --p, K_ECDHE_ECDSA, B_RC4_128, N);
-        add("TLS_ECDHE_RSA_WITH_RC4_128_SHA",
-            0xC011, --p, K_ECDHE_RSA,   B_RC4_128, N);
-        add("SSL_RSA_WITH_RC4_128_SHA",
-            0x0005, --p, K_RSA,         B_RC4_128, N);
-        add("TLS_ECDH_ECDSA_WITH_RC4_128_SHA",
-            0xC002, --p, K_ECDH_ECDSA,  B_RC4_128, N);
-        add("TLS_ECDH_RSA_WITH_RC4_128_SHA",
-            0xC00C, --p, K_ECDH_RSA,    B_RC4_128, N);
-
         // Cipher suites in GCM mode, see RFC 5288/5289.
         //
         // We may increase the priority of cipher suites in GCM mode when
@@ -1127,6 +1115,17 @@
         add("SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA",
             0x0013, --p, K_DHE_DSS,     B_3DES,    N);
 
+        // RC-4
+        add("TLS_ECDHE_ECDSA_WITH_RC4_128_SHA",
+            0xC007, --p, K_ECDHE_ECDSA, B_RC4_128, N);
+        add("TLS_ECDHE_RSA_WITH_RC4_128_SHA",
+            0xC011, --p, K_ECDHE_RSA,   B_RC4_128, N);
+        add("SSL_RSA_WITH_RC4_128_SHA",
+            0x0005, --p, K_RSA,         B_RC4_128, N);
+        add("TLS_ECDH_ECDSA_WITH_RC4_128_SHA",
+            0xC002, --p, K_ECDH_ECDSA,  B_RC4_128, N);
+        add("TLS_ECDH_RSA_WITH_RC4_128_SHA",
+            0xC00C, --p, K_ECDH_RSA,    B_RC4_128, N);
         add("SSL_RSA_WITH_RC4_128_MD5",
             0x0004, --p, K_RSA,         B_RC4_128, N);
 
@@ -1146,7 +1145,7 @@
          * 2. If a cipher suite has been obsoleted, we put it at the end of
          *    the list.
          * 3. Prefer the stronger bulk cipher, in the order of AES_256,
-         *    AES_128, RC-4, 3DES-EDE, DES, RC4_40, DES40, NULL.
+         *    AES_128, 3DES-EDE, RC-4, DES, DES40, RC4_40, NULL.
          * 4. Prefer the stronger MAC algorithm, in the order of SHA384,
          *    SHA256, SHA, MD5.
          * 5. Prefer the better performance of key exchange and digital
@@ -1174,15 +1173,40 @@
         add("TLS_DH_anon_WITH_AES_128_CBC_SHA",
             0x0034, --p, K_DH_ANON,     B_AES_128, N);
 
+        add("TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA",
+            0xC017, --p, K_ECDH_ANON,   B_3DES,    N);
+        add("SSL_DH_anon_WITH_3DES_EDE_CBC_SHA",
+            0x001b, --p, K_DH_ANON,     B_3DES,    N);
+
         add("TLS_ECDH_anon_WITH_RC4_128_SHA",
             0xC016, --p, K_ECDH_ANON,   B_RC4_128, N);
         add("SSL_DH_anon_WITH_RC4_128_MD5",
             0x0018, --p, K_DH_ANON,     B_RC4_128, N);
 
-        add("TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA",
-            0xC017, --p, K_ECDH_ANON,   B_3DES,    N);
-        add("SSL_DH_anon_WITH_3DES_EDE_CBC_SHA",
-            0x001b, --p, K_DH_ANON,     B_3DES,    N);
+        // weak cipher suites obsoleted in TLS 1.2
+        add("SSL_RSA_WITH_DES_CBC_SHA",
+            0x0009, --p, K_RSA,         B_DES,     N, tls12);
+        add("SSL_DHE_RSA_WITH_DES_CBC_SHA",
+            0x0015, --p, K_DHE_RSA,     B_DES,     N, tls12);
+        add("SSL_DHE_DSS_WITH_DES_CBC_SHA",
+            0x0012, --p, K_DHE_DSS,     B_DES,     N, tls12);
+        add("SSL_DH_anon_WITH_DES_CBC_SHA",
+            0x001a, --p, K_DH_ANON,     B_DES,     N, tls12);
+
+        // weak cipher suites obsoleted in TLS 1.1
+        add("SSL_RSA_EXPORT_WITH_DES40_CBC_SHA",
+            0x0008, --p, K_RSA_EXPORT,  B_DES_40,  N, tls11);
+        add("SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA",
+            0x0014, --p, K_DHE_RSA,     B_DES_40,  N, tls11);
+        add("SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA",
+            0x0011, --p, K_DHE_DSS,     B_DES_40,  N, tls11);
+        add("SSL_DH_anon_EXPORT_WITH_DES40_CBC_SHA",
+            0x0019, --p, K_DH_ANON,     B_DES_40,  N, tls11);
+
+        add("SSL_RSA_EXPORT_WITH_RC4_40_MD5",
+            0x0003, --p, K_RSA_EXPORT,  B_RC4_40,  N, tls11);
+        add("SSL_DH_anon_EXPORT_WITH_RC4_40_MD5",
+            0x0017, --p, K_DH_ANON,     B_RC4_40,  N, tls11);
 
         add("TLS_RSA_WITH_NULL_SHA256",
             0x003b, --p, K_RSA,         B_NULL,    N, max, tls12, P_SHA256);
@@ -1201,52 +1225,27 @@
         add("SSL_RSA_WITH_NULL_MD5",
             0x0001, --p, K_RSA,         B_NULL,    N);
 
-        // weak cipher suites obsoleted in TLS 1.2
-        add("SSL_RSA_WITH_DES_CBC_SHA",
-            0x0009, --p, K_RSA,         B_DES,     N, tls12);
-        add("SSL_DHE_RSA_WITH_DES_CBC_SHA",
-            0x0015, --p, K_DHE_RSA,     B_DES,     N, tls12);
-        add("SSL_DHE_DSS_WITH_DES_CBC_SHA",
-            0x0012, --p, K_DHE_DSS,     B_DES,     N, tls12);
-        add("SSL_DH_anon_WITH_DES_CBC_SHA",
-            0x001a, --p, K_DH_ANON,     B_DES,     N, tls12);
-
-        // weak cipher suites obsoleted in TLS 1.1
-        add("SSL_RSA_EXPORT_WITH_RC4_40_MD5",
-            0x0003, --p, K_RSA_EXPORT,  B_RC4_40,  N, tls11);
-        add("SSL_DH_anon_EXPORT_WITH_RC4_40_MD5",
-            0x0017, --p, K_DH_ANON,     B_RC4_40,  N, tls11);
-
-        add("SSL_RSA_EXPORT_WITH_DES40_CBC_SHA",
-            0x0008, --p, K_RSA_EXPORT,  B_DES_40,  N, tls11);
-        add("SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA",
-            0x0014, --p, K_DHE_RSA,     B_DES_40,  N, tls11);
-        add("SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA",
-            0x0011, --p, K_DHE_DSS,     B_DES_40,  N, tls11);
-        add("SSL_DH_anon_EXPORT_WITH_DES40_CBC_SHA",
-            0x0019, --p, K_DH_ANON,     B_DES_40,  N, tls11);
-
         // Supported Kerberos ciphersuites from RFC2712
+        add("TLS_KRB5_WITH_3DES_EDE_CBC_SHA",
+            0x001f, --p, K_KRB5,        B_3DES,    N);
+        add("TLS_KRB5_WITH_3DES_EDE_CBC_MD5",
+            0x0023, --p, K_KRB5,        B_3DES,    N);
         add("TLS_KRB5_WITH_RC4_128_SHA",
             0x0020, --p, K_KRB5,        B_RC4_128, N);
         add("TLS_KRB5_WITH_RC4_128_MD5",
             0x0024, --p, K_KRB5,        B_RC4_128, N);
-        add("TLS_KRB5_WITH_3DES_EDE_CBC_SHA",
-            0x001f, --p, K_KRB5,        B_3DES,    N);
-        add("TLS_KRB5_WITH_3DES_EDE_CBC_MD5",
-            0x0023, --p, K_KRB5,        B_3DES,    N);
         add("TLS_KRB5_WITH_DES_CBC_SHA",
             0x001e, --p, K_KRB5,        B_DES,     N, tls12);
         add("TLS_KRB5_WITH_DES_CBC_MD5",
             0x0022, --p, K_KRB5,        B_DES,     N, tls12);
+        add("TLS_KRB5_EXPORT_WITH_DES_CBC_40_SHA",
+            0x0026, --p, K_KRB5_EXPORT, B_DES_40,  N, tls11);
+        add("TLS_KRB5_EXPORT_WITH_DES_CBC_40_MD5",
+            0x0029, --p, K_KRB5_EXPORT, B_DES_40,  N, tls11);
         add("TLS_KRB5_EXPORT_WITH_RC4_40_SHA",
             0x0028, --p, K_KRB5_EXPORT, B_RC4_40,  N, tls11);
         add("TLS_KRB5_EXPORT_WITH_RC4_40_MD5",
             0x002b, --p, K_KRB5_EXPORT, B_RC4_40,  N, tls11);
-        add("TLS_KRB5_EXPORT_WITH_DES_CBC_40_SHA",
-            0x0026, --p, K_KRB5_EXPORT, B_DES_40,  N, tls11);
-        add("TLS_KRB5_EXPORT_WITH_DES_CBC_40_MD5",
-            0x0029, --p, K_KRB5_EXPORT, B_DES_40,  N, tls11);
 
         /*
          * Other values from the TLS Cipher Suite Registry, as of August 2010.
--- a/src/share/classes/sun/security/ssl/ClientHandshaker.java	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/share/classes/sun/security/ssl/ClientHandshaker.java	Tue Nov 04 17:20:19 2014 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1996, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1996, 2014, 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
@@ -36,6 +36,8 @@
 
 import java.security.cert.X509Certificate;
 import java.security.cert.CertificateException;
+import java.security.cert.CertificateParsingException;
+import javax.security.auth.x500.X500Principal;
 
 import javax.crypto.SecretKey;
 import javax.crypto.spec.SecretKeySpec;
@@ -89,12 +91,66 @@
     private final static boolean enableSNIExtension =
             Debug.getBooleanProperty("jsse.enableSNIExtension", true);
 
+    /*
+     * Allow unsafe server certificate change?
+     *
+     * Server certificate change during SSL/TLS renegotiation may be considered
+     * unsafe, as described in the Triple Handshake attacks:
+     *
+     *     https://secure-resumption.com/tlsauth.pdf
+     *
+     * Endpoint identification (See
+     * SSLParameters.getEndpointIdentificationAlgorithm()) is a pretty nice
+     * guarantee that the server certificate change in renegotiation is legal.
+     * However, endpoing identification is only enabled for HTTPS and LDAP
+     * over SSL/TLS by default.  It is not enough to protect SSL/TLS
+     * connections other than HTTPS and LDAP.
+     *
+     * The renegotiation indication extension (See RFC 5764) is a pretty
+     * strong guarantee that the endpoints on both client and server sides
+     * are identical on the same connection.  However, the Triple Handshake
+     * attacks can bypass this guarantee if there is a session-resumption
+     * handshake between the initial full handshake and the renegotiation
+     * full handshake.
+     *
+     * Server certificate change may be unsafe and should be restricted if
+     * endpoint identification is not enabled and the previous handshake is
+     * a session-resumption abbreviated initial handshake, unless the
+     * identities represented by both certificates can be regraded as the
+     * same (See isIdentityEquivalent()).
+     *
+     * Considering the compatibility impact and the actual requirements to
+     * support server certificate change in practice, the system property,
+     * jdk.tls.allowUnsafeServerCertChange, is used to define whether unsafe
+     * server certificate change in renegotiation is allowed or not.  The
+     * default value of the system property is "false".  To mitigate the
+     * compactibility impact, applications may want to set the system
+     * property to "true" at their own risk.
+     *
+     * If the value of the system property is "false", server certificate
+     * change in renegotiation after a session-resumption abbreviated initial
+     * handshake is restricted (See isIdentityEquivalent()).
+     *
+     * If the system property is set to "true" explicitly, the restriction on
+     * server certificate change in renegotiation is disabled.
+     */
+    private final static boolean allowUnsafeServerCertChange =
+        Debug.getBooleanProperty("jdk.tls.allowUnsafeServerCertChange", false);
+
     private List<SNIServerName> requestedServerNames =
             Collections.<SNIServerName>emptyList();
 
     private boolean serverNamesAccepted = false;
 
     /*
+     * the reserved server certificate chain in previous handshaking
+     *
+     * The server certificate chain is only reserved if the previous
+     * handshake is a session-resumption abbreviated initial handshake.
+     */
+    private X509Certificate[] reservedServerCerts = null;
+
+    /*
      * Constructors
      */
     ClientHandshaker(SSLSocketImpl socket, SSLContextImpl context,
@@ -555,14 +611,19 @@
                 // we wanted to resume, but the server refused
                 session = null;
                 if (!enableNewSession) {
-                    throw new SSLException
-                        ("New session creation is disabled");
+                    throw new SSLException("New session creation is disabled");
                 }
             }
         }
 
         if (resumingSession && session != null) {
             setHandshakeSessionSE(session);
+            // Reserve the handshake state if this is a session-resumption
+            // abbreviated initial handshake.
+            if (isInitialHandshake) {
+                session.setAsSessionResumption(true);
+            }
+
             return;
         }
 
@@ -1064,6 +1125,13 @@
         }
 
         /*
+         * Reset the handshake state if this is not an initial handshake.
+         */
+        if (!isInitialHandshake) {
+            session.setAsSessionResumption(false);
+        }
+
+        /*
          * OK, it verified.  If we're doing the fast handshake, add that
          * "Finished" message to the hash of handshake messages, then send
          * our own change_cipher_spec and Finished message for the server
@@ -1161,8 +1229,23 @@
                 System.out.println("%% No cached client session");
             }
         }
-        if ((session != null) && (session.isRejoinable() == false)) {
-            session = null;
+        if (session != null) {
+            // If unsafe server certificate change is not allowed, reserve
+            // current server certificates if the previous handshake is a
+            // session-resumption abbreviated initial handshake.
+            if (!allowUnsafeServerCertChange && session.isSessionResumption()) {
+                try {
+                    // If existing, peer certificate chain cannot be null.
+                    reservedServerCerts =
+                        (X509Certificate[])session.getPeerCertificates();
+                } catch (SSLPeerUnverifiedException puve) {
+                    // Maybe not certificate-based, ignore the exception.
+                }
+            }
+
+            if (!session.isRejoinable()) {
+                session = null;
+            }
         }
 
         if (session != null) {
@@ -1331,9 +1414,28 @@
         }
         X509Certificate[] peerCerts = mesg.getCertificateChain();
         if (peerCerts.length == 0) {
-            fatalSE(Alerts.alert_bad_certificate,
-                "empty certificate chain");
+            fatalSE(Alerts.alert_bad_certificate, "empty certificate chain");
         }
+
+        // Allow server certificate change in client side during renegotiation
+        // after a session-resumption abbreviated initial handshake?
+        //
+        // DO NOT need to check allowUnsafeServerCertChange here. We only
+        // reserve server certificates when allowUnsafeServerCertChange is
+        // flase.
+        if (reservedServerCerts != null) {
+            // It is not necessary to check the certificate update if endpoint
+            // identification is enabled.
+            String identityAlg = getEndpointIdentificationAlgorithmSE();
+            if ((identityAlg == null || identityAlg.length() == 0) &&
+                !isIdentityEquivalent(peerCerts[0], reservedServerCerts[0])) {
+
+                fatalSE(Alerts.alert_bad_certificate,
+                        "server certificate change is restricted " +
+                        "during renegotiation");
+            }
+        }
+
         // ask the trust manager to verify the chain
         X509TrustManager tm = sslContext.getX509TrustManager();
         try {
@@ -1370,4 +1472,81 @@
         }
         session.setPeerCertificates(peerCerts);
     }
+
+    /*
+     * Whether the certificates can represent the same identity?
+     *
+     * The certificates can be used to represent the same identity:
+     *     1. If the subject alternative names of IP address are present in
+     *        both certificates, they should be identical; otherwise,
+     *     2. if the subject alternative names of DNS name are present in
+     *        both certificates, they should be identical; otherwise,
+     *     3. if the subject fields are present in both certificates, the
+     *        certificate subjects and issuers should be identical.
+     */
+    private static boolean isIdentityEquivalent(X509Certificate thisCert,
+            X509Certificate prevCert) {
+        if (thisCert.equals(prevCert)) {
+            return true;
+        }
+
+        // check the iPAddress field in subjectAltName extension
+        Object thisIPAddress = getSubjectAltName(thisCert, 7);  // 7: iPAddress
+        Object prevIPAddress = getSubjectAltName(prevCert, 7);
+        if (thisIPAddress != null && prevIPAddress!= null) {
+            // only allow the exactly match
+            return Objects.equals(thisIPAddress, prevIPAddress);
+        }
+
+        // check the dNSName field in subjectAltName extension
+        Object thisDNSName = getSubjectAltName(thisCert, 2);    // 2: dNSName
+        Object prevDNSName = getSubjectAltName(prevCert, 2);
+        if (thisDNSName != null && prevDNSName!= null) {
+            // only allow the exactly match
+            return Objects.equals(thisDNSName, prevDNSName);
+        }
+
+        // check the certificate subject and issuer
+        X500Principal thisSubject = thisCert.getSubjectX500Principal();
+        X500Principal prevSubject = prevCert.getSubjectX500Principal();
+        X500Principal thisIssuer = thisCert.getIssuerX500Principal();
+        X500Principal prevIssuer = prevCert.getIssuerX500Principal();
+        if (!thisSubject.getName().isEmpty() &&
+                !prevSubject.getName().isEmpty() &&
+                thisSubject.equals(prevSubject) &&
+                thisIssuer.equals(prevIssuer)) {
+            return true;
+        }
+
+        return false;
+    }
+
+    /*
+     * Returns the subject alternative name of the specified type in the
+     * subjectAltNames extension of a certificate.
+     */
+    private static Object getSubjectAltName(X509Certificate cert, int type) {
+        Collection<List<?>> subjectAltNames;
+
+        try {
+            subjectAltNames = cert.getSubjectAlternativeNames();
+        } catch (CertificateParsingException cpe) {
+            if (debug != null && Debug.isOn("handshake")) {
+                System.out.println(
+                        "Attempt to obtain subjectAltNames extension failed!");
+            }
+            return null;
+        }
+
+        if (subjectAltNames != null) {
+            for (List<?> subjectAltName : subjectAltNames) {
+                int subjectAltNameType = (Integer)subjectAltName.get(0);
+                if (subjectAltNameType == type) {
+                    return subjectAltName.get(1);
+                }
+            }
+        }
+
+        return null;
+    }
 }
--- a/src/share/classes/sun/security/ssl/Handshaker.java	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/share/classes/sun/security/ssl/Handshaker.java	Tue Nov 04 17:20:19 2014 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1996, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1996, 2014, 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
@@ -359,6 +359,17 @@
         }
     }
 
+    String getEndpointIdentificationAlgorithmSE() {
+        SSLParameters paras;
+        if (conn != null) {
+            paras = conn.getSSLParameters();
+        } else {
+            paras = engine.getSSLParameters();
+        }
+
+        return paras.getEndpointIdentificationAlgorithm();
+    }
+
     private void setVersionSE(ProtocolVersion protocolVersion) {
         if (conn != null) {
             conn.setVersion(protocolVersion);
--- a/src/share/classes/sun/security/ssl/SSLSessionImpl.java	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/share/classes/sun/security/ssl/SSLSessionImpl.java	Tue Nov 04 17:20:19 2014 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1996, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1996, 2014, 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
@@ -115,6 +115,14 @@
     private Principal localPrincipal;
 
     /*
+     * Is the session currently re-established with a session-resumption
+     * abbreviated initial handshake?
+     *
+     * Note that currently we only set this variable in client side.
+     */
+    private boolean isSessionResumption = false;
+
+    /*
      * We count session creations, eventually for statistical data but
      * also since counters make shorter debugging IDs than the big ones
      * we use in the protocol for uniqueness-over-time.
@@ -325,6 +333,22 @@
     }
 
     /**
+     * Return true if the session is currently re-established with a
+     * session-resumption abbreviated initial handshake.
+     */
+    boolean isSessionResumption() {
+        return isSessionResumption;
+    }
+
+    /**
+     * Resets whether the session is re-established with a session-resumption
+     * abbreviated initial handshake.
+     */
+    void setAsSessionResumption(boolean flag) {
+        isSessionResumption = flag;
+    }
+
+    /**
      * Returns the name of the cipher suite in use on this session
      */
     @Override
--- a/src/share/classes/sun/security/tools/keytool/Resources.java	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/share/classes/sun/security/tools/keytool/Resources.java	Tue Nov 04 17:20:19 2014 +0000
@@ -336,7 +336,7 @@
         {"New.prompt.", "New {0}: "},
         {"Passwords.must.differ", "Passwords must differ"},
         {"Re.enter.new.prompt.", "Re-enter new {0}: "},
-        {"Re.enter.passpword.", "Re-enter password: "},
+        {"Re.enter.password.", "Re-enter password: "},
         {"Re.enter.new.password.", "Re-enter new password: "},
         {"They.don.t.match.Try.again", "They don't match. Try again"},
         {"Enter.prompt.alias.name.", "Enter {0} alias name:  "},
--- a/src/share/classes/sun/security/tools/keytool/Resources_de.java	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/share/classes/sun/security/tools/keytool/Resources_de.java	Tue Nov 04 17:20:19 2014 +0000
@@ -336,7 +336,7 @@
         {"New.prompt.", "Neues {0}: "},
         {"Passwords.must.differ", "Kennw\u00F6rter m\u00FCssen sich unterscheiden"},
         {"Re.enter.new.prompt.", "Neues {0} erneut eingeben: "},
-        {"Re.enter.passpword.", "Geben Sie das Kennwort erneut ein: "},
+        {"Re.enter.password.", "Geben Sie das Kennwort erneut ein: "},
         {"Re.enter.new.password.", "Neues Kennwort erneut eingeben: "},
         {"They.don.t.match.Try.again", "Keine \u00DCbereinstimmung. Wiederholen Sie den Vorgang"},
         {"Enter.prompt.alias.name.", "{0}-Aliasnamen eingeben:  "},
--- a/src/share/classes/sun/security/tools/keytool/Resources_es.java	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/share/classes/sun/security/tools/keytool/Resources_es.java	Tue Nov 04 17:20:19 2014 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2014, 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
@@ -336,7 +336,7 @@
         {"New.prompt.", "Nuevo {0}: "},
         {"Passwords.must.differ", "Las contrase\u00F1as deben ser distintas"},
         {"Re.enter.new.prompt.", "Vuelva a escribir el nuevo {0}: "},
-        {"Re.enter.passpword.", "Vuelva a introducir la contrase\u00F1a: "},
+        {"Re.enter.password.", "Vuelva a introducir la contrase\u00F1a: "},
         {"Re.enter.new.password.", "Volver a escribir la contrase\u00F1a nueva: "},
         {"They.don.t.match.Try.again", "No coinciden. Int\u00E9ntelo de nuevo"},
         {"Enter.prompt.alias.name.", "Escriba el nombre de alias de {0}:  "},
--- a/src/share/classes/sun/security/tools/keytool/Resources_fr.java	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/share/classes/sun/security/tools/keytool/Resources_fr.java	Tue Nov 04 17:20:19 2014 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2014, 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
@@ -336,7 +336,7 @@
         {"New.prompt.", "Nouveau {0} : "},
         {"Passwords.must.differ", "Les mots de passe doivent diff\u00E9rer"},
         {"Re.enter.new.prompt.", "Indiquez encore le nouveau {0} : "},
-        {"Re.enter.passpword.", "R\u00E9p\u00E9tez le mot de passe : "},
+        {"Re.enter.password.", "R\u00E9p\u00E9tez le mot de passe : "},
         {"Re.enter.new.password.", "Ressaisissez le nouveau mot de passe : "},
         {"They.don.t.match.Try.again", "Ils sont diff\u00E9rents. R\u00E9essayez."},
         {"Enter.prompt.alias.name.", "Indiquez le nom d''alias {0} :  "},
--- a/src/share/classes/sun/security/tools/keytool/Resources_it.java	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/share/classes/sun/security/tools/keytool/Resources_it.java	Tue Nov 04 17:20:19 2014 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2014, 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
@@ -336,7 +336,7 @@
         {"New.prompt.", "Nuova {0}: "},
         {"Passwords.must.differ", "Le password non devono coincidere"},
         {"Re.enter.new.prompt.", "Reimmettere un nuovo valore per {0}: "},
-        {"Re.enter.passpword.", "Reimmettere la password: "},
+        {"Re.enter.password.", "Reimmettere la password: "},
         {"Re.enter.new.password.", "Immettere nuovamente la nuova password: "},
         {"They.don.t.match.Try.again", "Non corrispondono. Riprovare."},
         {"Enter.prompt.alias.name.", "Immettere nome alias {0}:  "},
--- a/src/share/classes/sun/security/tools/keytool/Resources_ja.java	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/share/classes/sun/security/tools/keytool/Resources_ja.java	Tue Nov 04 17:20:19 2014 +0000
@@ -248,7 +248,7 @@
                  "\u65E2\u5B58\u306E\u30A8\u30F3\u30C8\u30EA\u306E\u5225\u540D{0}\u304C\u5B58\u5728\u3057\u3066\u3044\u307E\u3059\u3002\u4E0A\u66F8\u304D\u3057\u307E\u3059\u304B\u3002[\u3044\u3044\u3048]:  "},
         {"Too.many.failures.try.later", "\u969C\u5BB3\u304C\u591A\u3059\u304E\u307E\u3059 - \u5F8C\u3067\u5B9F\u884C\u3057\u3066\u304F\u3060\u3055\u3044"},
         {"Certification.request.stored.in.file.filename.",
-                "\u8A3C\u660E\u66F8\u30EA\u30AF\u30A8\u30B9\u30C8\u304C\u30D5\u30A1\u30A4\u30EB<{0}>\u306B\u4FDD\u5B58\u3055\u308C\u307E\u3057\u305F"},
+                "\u8A8D\u8A3C\u30EA\u30AF\u30A8\u30B9\u30C8\u304C\u30D5\u30A1\u30A4\u30EB<{0}>\u306B\u4FDD\u5B58\u3055\u308C\u307E\u3057\u305F"},
         {"Submit.this.to.your.CA", "\u3053\u308C\u3092CA\u306B\u63D0\u51FA\u3057\u3066\u304F\u3060\u3055\u3044"},
         {"if.alias.not.specified.destalias.and.srckeypass.must.not.be.specified",
             "\u5225\u540D\u3092\u6307\u5B9A\u3057\u306A\u3044\u5834\u5408\u3001\u51FA\u529B\u5148\u30AD\u30FC\u30B9\u30C8\u30A2\u306E\u5225\u540D\u304A\u3088\u3073\u30BD\u30FC\u30B9\u30FB\u30AD\u30FC\u30B9\u30C8\u30A2\u306E\u30D1\u30B9\u30EF\u30FC\u30C9\u306F\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093"},
@@ -336,7 +336,7 @@
         {"New.prompt.", "\u65B0\u898F{0}: "},
         {"Passwords.must.differ", "\u30D1\u30B9\u30EF\u30FC\u30C9\u306F\u7570\u306A\u3063\u3066\u3044\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059"},
         {"Re.enter.new.prompt.", "\u65B0\u898F{0}\u3092\u518D\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044: "},
-        {"Re.enter.passpword.", "\u30D1\u30B9\u30EF\u30FC\u30C9\u3092\u518D\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044: "},
+        {"Re.enter.password.", "\u30D1\u30B9\u30EF\u30FC\u30C9\u3092\u518D\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044: "},
         {"Re.enter.new.password.", "\u65B0\u898F\u30D1\u30B9\u30EF\u30FC\u30C9\u3092\u518D\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044: "},
         {"They.don.t.match.Try.again", "\u4E00\u81F4\u3057\u307E\u305B\u3093\u3002\u3082\u3046\u4E00\u5EA6\u5B9F\u884C\u3057\u3066\u304F\u3060\u3055\u3044"},
         {"Enter.prompt.alias.name.", "{0}\u306E\u5225\u540D\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044:  "},
--- a/src/share/classes/sun/security/tools/keytool/Resources_ko.java	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/share/classes/sun/security/tools/keytool/Resources_ko.java	Tue Nov 04 17:20:19 2014 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2014, 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
@@ -336,7 +336,7 @@
         {"New.prompt.", "\uC0C8 {0}: "},
         {"Passwords.must.differ", "\uBE44\uBC00\uBC88\uD638\uB294 \uB2EC\uB77C\uC57C \uD569\uB2C8\uB2E4."},
         {"Re.enter.new.prompt.", "\uC0C8 {0} \uB2E4\uC2DC \uC785\uB825: "},
-        {"Re.enter.passpword.", "\uBE44\uBC00\uBC88\uD638  \uB2E4\uC2DC \uC785\uB825: "},
+        {"Re.enter.password.", "\uBE44\uBC00\uBC88\uD638  \uB2E4\uC2DC \uC785\uB825: "},
         {"Re.enter.new.password.", "\uC0C8 \uBE44\uBC00\uBC88\uD638 \uB2E4\uC2DC \uC785\uB825: "},
         {"They.don.t.match.Try.again", "\uC77C\uCE58\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4. \uB2E4\uC2DC \uC2DC\uB3C4\uD558\uC2ED\uC2DC\uC624."},
         {"Enter.prompt.alias.name.", "{0} \uBCC4\uCE6D \uC774\uB984 \uC785\uB825:  "},
--- a/src/share/classes/sun/security/tools/keytool/Resources_pt_BR.java	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/share/classes/sun/security/tools/keytool/Resources_pt_BR.java	Tue Nov 04 17:20:19 2014 +0000
@@ -336,7 +336,7 @@
         {"New.prompt.", "Nova {0}: "},
         {"Passwords.must.differ", "As senhas devem ser diferentes"},
         {"Re.enter.new.prompt.", "Informe novamente a nova {0}: "},
-        {"Re.enter.passpword.", "Redigite a senha: "},
+        {"Re.enter.password.", "Redigite a senha: "},
         {"Re.enter.new.password.", "Informe novamente a nova senha: "},
         {"They.don.t.match.Try.again", "Elas n\u00E3o correspondem. Tente novamente"},
         {"Enter.prompt.alias.name.", "Informe o nome do alias {0}:  "},
--- a/src/share/classes/sun/security/tools/keytool/Resources_sv.java	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/share/classes/sun/security/tools/keytool/Resources_sv.java	Tue Nov 04 17:20:19 2014 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2014, 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
@@ -336,7 +336,7 @@
         {"New.prompt.", "Nytt {0}: "},
         {"Passwords.must.differ", "L\u00F6senorden m\u00E5ste vara olika"},
         {"Re.enter.new.prompt.", "Ange nytt {0} igen: "},
-        {"Re.enter.passpword.", "Ange l\u00F6senord igen: "},
+        {"Re.enter.password.", "Ange l\u00F6senord igen: "},
         {"Re.enter.new.password.", "Ange det nya l\u00F6senordet igen: "},
         {"They.don.t.match.Try.again", "De matchar inte. F\u00F6rs\u00F6k igen"},
         {"Enter.prompt.alias.name.", "Ange aliasnamn f\u00F6r {0}:  "},
--- a/src/share/classes/sun/security/tools/keytool/Resources_zh_CN.java	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/share/classes/sun/security/tools/keytool/Resources_zh_CN.java	Tue Nov 04 17:20:19 2014 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2014, 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
@@ -336,7 +336,7 @@
         {"New.prompt.", "\u65B0{0}: "},
         {"Passwords.must.differ", "\u53E3\u4EE4\u4E0D\u80FD\u76F8\u540C"},
         {"Re.enter.new.prompt.", "\u91CD\u65B0\u8F93\u5165\u65B0{0}: "},
-        {"Re.enter.passpword.", "\u518D\u6B21\u8F93\u5165\u53E3\u4EE4: "},
+        {"Re.enter.password.", "\u518D\u6B21\u8F93\u5165\u53E3\u4EE4: "},
         {"Re.enter.new.password.", "\u518D\u6B21\u8F93\u5165\u65B0\u53E3\u4EE4: "},
         {"They.don.t.match.Try.again", "\u5B83\u4EEC\u4E0D\u5339\u914D\u3002\u8BF7\u91CD\u8BD5"},
         {"Enter.prompt.alias.name.", "\u8F93\u5165{0}\u522B\u540D:  "},
--- a/src/share/classes/sun/security/tools/keytool/Resources_zh_TW.java	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/share/classes/sun/security/tools/keytool/Resources_zh_TW.java	Tue Nov 04 17:20:19 2014 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2014, 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
@@ -336,7 +336,7 @@
         {"New.prompt.", "\u65B0 {0}: "},
         {"Passwords.must.differ", "\u5FC5\u9808\u662F\u4E0D\u540C\u7684\u5BC6\u78BC"},
         {"Re.enter.new.prompt.", "\u91CD\u65B0\u8F38\u5165\u65B0 {0}: "},
-        {"Re.enter.passpword.", "\u91CD\u65B0\u8F38\u5165\u5BC6\u78BC:"},
+        {"Re.enter.password.", "\u91CD\u65B0\u8F38\u5165\u5BC6\u78BC:"},
         {"Re.enter.new.password.", "\u91CD\u65B0\u8F38\u5165\u65B0\u5BC6\u78BC: "},
         {"They.don.t.match.Try.again", "\u5B83\u5011\u4E0D\u76F8\u7B26\u3002\u8ACB\u91CD\u8A66"},
         {"Enter.prompt.alias.name.", "\u8F38\u5165 {0} \u5225\u540D\u540D\u7A31:  "},
--- a/src/share/classes/sun/security/util/Debug.java	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/share/classes/sun/security/util/Debug.java	Tue Nov 04 17:20:19 2014 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2014, 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
@@ -104,7 +104,15 @@
         System.err.println("codebase=<URL>");
         System.err.println("              only dump output if specified codebase");
         System.err.println("              is being checked");
-
+        System.err.println();
+        System.err.println("The following can be used with provider:");
+        System.err.println();
+        System.err.println("engine=<engines>");
+        System.err.println("              only dump output for the specified list");
+        System.err.println("              of JCA engines. Supported values:");
+        System.err.println("              Cipher, KeyAgreement, KeyGenerator,");
+        System.err.println("              KeyPairGenerator, KeyStore, Mac,");
+        System.err.println("              MessageDigest, SecureRandom, Signature.");
         System.err.println();
         System.err.println("Note: Separate multiple options with a comma");
         System.exit(0);
--- a/src/share/classes/sun/text/resources/FormatData.java	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/share/classes/sun/text/resources/FormatData.java	Tue Nov 04 17:20:19 2014 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1996, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1996, 2014, 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
@@ -154,18 +154,18 @@
             },
             { "MonthNarrows",
                 new String[] {
-                    "J",
-                    "F",
-                    "M",
-                    "A",
-                    "M",
-                    "J",
-                    "J",
-                    "A",
-                    "S",
-                    "O",
-                    "N",
-                    "D",
+                    "1",
+                    "2",
+                    "3",
+                    "4",
+                    "5",
+                    "6",
+                    "7",
+                    "8",
+                    "9",
+                    "10",
+                    "11",
+                    "12",
                     "",
                 }
             },
--- a/src/share/classes/sun/text/resources/en/FormatData_en.java	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/share/classes/sun/text/resources/en/FormatData_en.java	Tue Nov 04 17:20:19 2014 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2014, 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
@@ -53,6 +53,23 @@
         // define this method as follows:
         //    return new Object[][] { };
         return new Object[][] {
+            { "MonthNarrows",
+                new String[] {
+                    "J",
+                    "F",
+                    "M",
+                    "A",
+                    "M",
+                    "J",
+                    "J",
+                    "A",
+                    "S",
+                    "O",
+                    "N",
+                    "D",
+                    "",
+                }
+            },
             { "NumberPatterns",
                 new String[] {
                     "#,##0.###;-#,##0.###", // decimal pattern
--- a/src/share/classes/sun/tools/jconsole/resources/messages_ja.properties	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/share/classes/sun/tools/jconsole/resources/messages_ja.properties	Tue Nov 04 17:20:19 2014 +0000
@@ -103,7 +103,7 @@
 HELP_ABOUT_DIALOG_JAVA_VERSION=Java VM\u30D0\u30FC\u30B8\u30E7\u30F3:<br>{0}
 HELP_ABOUT_DIALOG_MASTHEAD_ACCESSIBLE_NAME=\u30DE\u30B9\u30C8\u30D8\u30C3\u30C9\u56F3\u5F62
 HELP_ABOUT_DIALOG_MASTHEAD_TITLE=JConsole\u306B\u3064\u3044\u3066
-HELP_ABOUT_DIALOG_TITLE=JConsole: \u8A73\u7D30
+HELP_ABOUT_DIALOG_TITLE=JConsole: \u60C5\u5831
 HELP_ABOUT_DIALOG_USER_GUIDE_LINK_URL=http://docs.oracle.com/javase/{0}/docs/technotes/guides/management/jconsole.html
 HELP_MENU_ABOUT_TITLE=JConsole\u306B\u3064\u3044\u3066(&A)
 HELP_MENU_USER_GUIDE_TITLE=\u30AA\u30F3\u30E9\u30A4\u30F3\u30FB\u30E6\u30FC\u30B6\u30FC\u30FB\u30AC\u30A4\u30C9(&U)
--- a/src/share/classes/sun/util/locale/BaseLocale.java	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/share/classes/sun/util/locale/BaseLocale.java	Tue Nov 04 17:20:19 2014 +0000
@@ -31,6 +31,7 @@
  */
 
 package sun.util.locale;
+import java.lang.ref.SoftReference;
 
 
 public final class BaseLocale {
@@ -163,11 +164,11 @@
         return h;
     }
 
-    private static final class Key implements Comparable<Key> {
-        private final String lang;
-        private final String scrt;
-        private final String regn;
-        private final String vart;
+    private static final class Key {
+        private final SoftReference<String> lang;
+        private final SoftReference<String> scrt;
+        private final SoftReference<String> regn;
+        private final SoftReference<String> vart;
         private final boolean normalized;
         private final int hash;
 
@@ -179,10 +180,10 @@
             assert language.intern() == language
                    && region.intern() == region;
 
-            lang = language;
-            scrt = "";
-            regn = region;
-            vart = "";
+            lang = new SoftReference(language);
+            scrt = new SoftReference("");
+            regn = new SoftReference(region);
+            vart = new SoftReference("");
             this.normalized = true;
 
             int h = language.hashCode();
@@ -203,40 +204,40 @@
                     String variant, boolean normalized) {
             int h = 0;
             if (language != null) {
-                lang = language;
+                lang = new SoftReference(language);
                 int len = language.length();
                 for (int i = 0; i < len; i++) {
                     h = 31*h + LocaleUtils.toLower(language.charAt(i));
                 }
             } else {
-                lang = "";
+                lang = new SoftReference("");
             }
             if (script != null) {
-                scrt = script;
+                scrt = new SoftReference(script);
                 int len = script.length();
                 for (int i = 0; i < len; i++) {
                     h = 31*h + LocaleUtils.toLower(script.charAt(i));
                 }
             } else {
-                scrt = "";
+                scrt = new SoftReference("");
             }
             if (region != null) {
-                regn = region;
+                regn = new SoftReference(region);
                 int len = region.length();
                 for (int i = 0; i < len; i++) {
                     h = 31*h + LocaleUtils.toLower(region.charAt(i));
                 }
             } else {
-                regn = "";
+                regn = new SoftReference("");
             }
             if (variant != null) {
-                vart = variant;
+                vart = new SoftReference(variant);
                 int len = variant.length();
                 for (int i = 0; i < len; i++) {
                     h = 31*h + variant.charAt(i);
                 }
             } else {
-                vart = "";
+                vart = new SoftReference("");
             }
             hash = h;
             this.normalized = normalized;
@@ -244,28 +245,31 @@
 
         @Override
         public boolean equals(Object obj) {
-            return (this == obj) ||
-                    (obj instanceof Key)
-                    && this.hash == ((Key)obj).hash
-                    && LocaleUtils.caseIgnoreMatch(((Key)obj).lang, this.lang)
-                    && LocaleUtils.caseIgnoreMatch(((Key)obj).scrt, this.scrt)
-                    && LocaleUtils.caseIgnoreMatch(((Key)obj).regn, this.regn)
-                    && ((Key)obj).vart.equals(vart); // variant is case sensitive in JDK!
+            if (this == obj) {
+                return true;
         }
 
-        @Override
-        public int compareTo(Key other) {
-            int res = LocaleUtils.caseIgnoreCompare(this.lang, other.lang);
-            if (res == 0) {
-                res = LocaleUtils.caseIgnoreCompare(this.scrt, other.scrt);
-                if (res == 0) {
-                    res = LocaleUtils.caseIgnoreCompare(this.regn, other.regn);
-                    if (res == 0) {
-                        res = this.vart.compareTo(other.vart);
+            if (obj instanceof Key && this.hash == ((Key)obj).hash) {
+                String tl = this.lang.get();
+                String ol = ((Key)obj).lang.get();
+                if (tl != null && ol != null &&
+                    LocaleUtils.caseIgnoreMatch(ol, tl)) {
+                    String ts = this.scrt.get();
+                    String os = ((Key)obj).scrt.get();
+                    if (ts != null && os != null &&
+                        LocaleUtils.caseIgnoreMatch(os, ts)) {
+                        String tr = this.regn.get();
+                        String or = ((Key)obj).regn.get();
+                        if (tr != null && or != null &&
+                            LocaleUtils.caseIgnoreMatch(or, tr)) {
+                            String tv = this.vart.get();
+                            String ov = ((Key)obj).vart.get();
+                            return (ov != null && ov.equals(tv));
                     }
                 }
             }
-            return res;
+            }
+            return false;
         }
 
         @Override
@@ -278,10 +282,10 @@
                 return key;
             }
 
-            String lang = LocaleUtils.toLowerString(key.lang).intern();
-            String scrt = LocaleUtils.toTitleString(key.scrt).intern();
-            String regn = LocaleUtils.toUpperString(key.regn).intern();
-            String vart = key.vart.intern(); // preserve upper/lower cases
+            String lang = LocaleUtils.toLowerString(key.lang.get()).intern();
+            String scrt = LocaleUtils.toTitleString(key.scrt.get()).intern();
+            String regn = LocaleUtils.toUpperString(key.regn.get()).intern();
+            String vart = key.vart.get().intern(); // preserve upper/lower cases
 
             return new Key(lang, scrt, regn, vart, true);
         }
@@ -294,12 +298,18 @@
 
         @Override
         protected Key normalizeKey(Key key) {
+            assert key.lang.get() != null &&
+                   key.scrt.get() != null &&
+                   key.regn.get() != null &&
+                   key.vart.get() != null;
+
             return Key.normalize(key);
         }
 
         @Override
         protected BaseLocale createObject(Key key) {
-            return new BaseLocale(key.lang, key.scrt, key.regn, key.vart);
+            return new BaseLocale(key.lang.get(), key.scrt.get(),
+                                  key.regn.get(), key.vart.get());
         }
     }
 }
--- a/src/share/classes/sun/util/locale/LocaleObjectCache.java	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/share/classes/sun/util/locale/LocaleObjectCache.java	Tue Nov 04 17:20:19 2014 +0000
@@ -57,8 +57,10 @@
             value = entry.get();
         }
         if (value == null) {
+            V newVal = createObject(key);
+            // make sure key is normalized *after* the object creation
+            // so that newVal is assured to be created from a valid key.
             key = normalizeKey(key);
-            V newVal = createObject(key);
             if (key == null || newVal == null) {
                 // subclass must return non-null key/value object
                 return null;
--- a/src/share/javavm/export/jvm.h	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/share/javavm/export/jvm.h	Tue Nov 04 17:20:19 2014 +0000
@@ -386,6 +386,19 @@
 JVM_FindClassFromBootLoader(JNIEnv *env, const char *name);
 
 /*
+ * Find a class from a given class loader.  Throws ClassNotFoundException.
+ *  name:   name of class
+ *  init:   whether initialization is done
+ *  loader: class loader to look up the class. This may not be the same as the caller's
+ *          class loader.
+ *  caller: initiating class. The initiating class may be null when a security
+ *          manager is not installed.
+ */
+JNIEXPORT jclass JNICALL
+JVM_FindClassFromCaller(JNIEnv *env, const char *name, jboolean init,
+                        jobject loader, jclass caller);
+
+/*
  * Find a class from a given class loader. Throw ClassNotFoundException
  * or NoClassDefFoundError depending on the value of the last
  * argument.
--- a/src/share/native/java/lang/Class.c	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/share/native/java/lang/Class.c	Tue Nov 04 17:20:19 2014 +0000
@@ -94,7 +94,7 @@
 
 JNIEXPORT jclass JNICALL
 Java_java_lang_Class_forName0(JNIEnv *env, jclass this, jstring classname,
-                              jboolean initialize, jobject loader)
+                              jboolean initialize, jobject loader, jclass caller)
 {
     char *clname;
     jclass cls = 0;
@@ -132,8 +132,7 @@
         goto done;
     }
 
-    cls = JVM_FindClassFromClassLoader(env, clname, initialize,
-                                       loader, JNI_FALSE);
+    cls = JVM_FindClassFromCaller(env, clname, initialize, loader, caller);
 
  done:
     if (clname != buf) {
--- a/src/share/native/java/util/zip/CRC32.c	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/share/native/java/util/zip/CRC32.c	Tue Nov 04 17:20:19 2014 +0000
@@ -54,7 +54,8 @@
     return crc;
 }
 
-JNIEXPORT jint ZIP_CRC32(jint crc, const jbyte *buf, jint len)
+JNIEXPORT jint JNICALL
+ZIP_CRC32(jint crc, const jbyte *buf, jint len)
 {
     return crc32(crc, (Bytef*)buf, len);
 }
--- a/src/share/native/java/util/zip/ZipFile.c	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/share/native/java/util/zip/ZipFile.c	Tue Nov 04 17:20:19 2014 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2014, 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
@@ -172,11 +172,7 @@
     }
     (*env)->GetByteArrayRegion(env, name, 0, ulen, (jbyte *)path);
     path[ulen] = '\0';
-    if (addSlash == JNI_FALSE) {
-        ze = ZIP_GetEntry(zip, path, 0);
-    } else {
-        ze = ZIP_GetEntry(zip, path, (jint)ulen);
-    }
+    ze = ZIP_GetEntry2(zip, path, (jint)ulen, addSlash);
     if (path != buf) {
         free(path);
     }
@@ -269,7 +265,7 @@
     switch (type) {
     case java_util_zip_ZipFile_JZENTRY_NAME:
         if (ze->name != 0) {
-            len = (int)strlen(ze->name);
+            len = (int)ze->nlen;
             if (len == 0 || (jba = (*env)->NewByteArray(env, len)) == NULL)
                 break;
             (*env)->SetByteArrayRegion(env, jba, 0, len, (jbyte *)ze->name);
--- a/src/share/native/java/util/zip/zip_util.c	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/share/native/java/util/zip/zip_util.c	Tue Nov 04 17:20:19 2014 +0000
@@ -1021,6 +1021,7 @@
     if ((ze->name = malloc(nlen + 1)) == NULL) goto Catch;
     memcpy(ze->name, cen + CENHDR, nlen);
     ze->name[nlen] = '\0';
+    ze->nlen = nlen;
     if (elen > 0) {
         char *extra = cen + CENHDR + nlen;
 
@@ -1118,7 +1119,34 @@
 jzentry *
 ZIP_GetEntry(jzfile *zip, char *name, jint ulen)
 {
-    unsigned int hsh = hash(name);
+    if (ulen == 0) {
+        return ZIP_GetEntry2(zip, name, strlen(name), JNI_FALSE);
+    }
+    return ZIP_GetEntry2(zip, name, ulen, JNI_TRUE);
+}
+
+jboolean equals(char* name1, int len1, char* name2, int len2) {
+    if (len1 != len2) {
+        return JNI_FALSE;
+    }
+    while (len1-- > 0) {
+        if (*name1++ != *name2++) {
+            return JNI_FALSE;
+        }
+    }
+    return JNI_TRUE;
+}
+
+/*
+ * Returns the zip entry corresponding to the specified name, or
+ * NULL if not found.
+ * This method supports embedded null character in "name", use ulen
+ * for the length of "name".
+ */
+jzentry *
+ZIP_GetEntry2(jzfile *zip, char *name, jint ulen, jboolean addSlash)
+{
+    unsigned int hsh = hashN(name, ulen);
     jint idx;
     jzentry *ze = 0;
 
@@ -1139,7 +1167,7 @@
 
         /* Check the cached entry first */
         ze = zip->cache;
-        if (ze && strcmp(ze->name,name) == 0) {
+        if (ze && equals(ze->name, ze->nlen, name, ulen)) {
             /* Cache hit!  Remove and return the cached entry. */
             zip->cache = 0;
             ZIP_Unlock(zip);
@@ -1165,7 +1193,7 @@
                  * we keep searching.
                  */
                 ze = newEntry(zip, zc, ACCESS_RANDOM);
-                if (ze && strcmp(ze->name, name)==0) {
+                if (ze && equals(ze->name, ze->nlen, name, ulen)) {
                     break;
                 }
                 if (ze != 0) {
@@ -1184,8 +1212,8 @@
             break;
         }
 
-        /* If no real length was passed in, we are done */
-        if (ulen == 0) {
+        /* If no need to try appending slash, we are done */
+        if (!addSlash) {
             break;
         }
 
@@ -1195,11 +1223,11 @@
         }
 
         /* Add slash and try once more */
-        name[ulen] = '/';
-        name[ulen+1] = '\0';
+        name[ulen++] = '/';
+        name[ulen] = '\0';
         hsh = hash_append(hsh, '/');
         idx = zip->table[hsh % zip->tablelen];
-        ulen = 0;
+        addSlash = JNI_FALSE;
     }
 
 Finally:
--- a/src/share/native/java/util/zip/zip_util.h	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/share/native/java/util/zip/zip_util.h	Tue Nov 04 17:20:19 2014 +0000
@@ -154,6 +154,7 @@
  * - If pos <= 0 then it is the position of entry LOC header.
  *   If pos > 0 then it is the position of entry data.
  *   pos should not be accessed directly, but only by ZIP_GetEntryDataOffset.
+ * - entry name may include embedded null character, use nlen for length
  */
 
 typedef struct jzentry {  /* Zip file entry */
@@ -166,6 +167,7 @@
     jbyte *extra;         /* optional extra data */
     jlong pos;            /* position of LOC header or entry data */
     jint flag;            /* general purpose flag */
+    jint nlen;            /* length of the entry name */
 } jzentry;
 
 /*
@@ -269,5 +271,5 @@
 jint ZIP_Read(jzfile *zip, jzentry *entry, jlong pos, void *buf, jint len);
 void ZIP_FreeEntry(jzfile *zip, jzentry *ze);
 jlong ZIP_GetEntryDataOffset(jzfile *zip, jzentry *entry);
-
+jzentry * ZIP_GetEntry2(jzfile *zip, char *name, jint ulen, jboolean addSlash);
 #endif /* !_ZIP_H_ */
--- a/src/share/native/sun/font/layout/ContextualSubstSubtables.cpp	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/share/native/sun/font/layout/ContextualSubstSubtables.cpp	Tue Nov 04 17:20:19 2014 +0000
@@ -243,12 +243,22 @@
         le_uint16 srSetCount = SWAPW(subRuleSetCount);
 
         if (coverageIndex < srSetCount) {
+            LEReferenceToArrayOf<Offset> subRuleSetTableOffsetArrayRef(base, success,
+                    &subRuleSetTableOffsetArray[coverageIndex], 1);
+            if (LE_FAILURE(success)) {
+                return 0;
+            }
             Offset subRuleSetTableOffset = SWAPW(subRuleSetTableOffsetArray[coverageIndex]);
             LEReferenceTo<SubRuleSetTable>
                  subRuleSetTable(base, success, (const SubRuleSetTable *) ((char *) this + subRuleSetTableOffset));
             le_uint16 subRuleCount = SWAPW(subRuleSetTable->subRuleCount);
             le_int32 position = glyphIterator->getCurrStreamPosition();
 
+            LEReferenceToArrayOf<Offset> subRuleTableOffsetArrayRef(base, success,
+                    subRuleSetTable->subRuleTableOffsetArray, subRuleCount);
+            if (LE_FAILURE(success)) {
+                return 0;
+            }
             for (le_uint16 subRule = 0; subRule < subRuleCount; subRule += 1) {
                 Offset subRuleTableOffset =
                     SWAPW(subRuleSetTable->subRuleTableOffsetArray[subRule]);
@@ -301,13 +311,22 @@
                                                                 glyphIterator->getCurrGlyphID(),
                                                                 success);
 
-        if (setClass < scSetCount && subClassSetTableOffsetArray[setClass] != 0) {
+        if (setClass < scSetCount) {
+            LEReferenceToArrayOf<Offset>
+                 subClassSetTableOffsetArrayRef(base, success, subClassSetTableOffsetArray, setClass);
+            if (LE_FAILURE(success)) { return 0; }
+            if (subClassSetTableOffsetArray[setClass] != 0) {
+
             Offset subClassSetTableOffset = SWAPW(subClassSetTableOffsetArray[setClass]);
             LEReferenceTo<SubClassSetTable>
                  subClassSetTable(base, success, (const SubClassSetTable *) ((char *) this + subClassSetTableOffset));
             le_uint16 subClassRuleCount = SWAPW(subClassSetTable->subClassRuleCount);
             le_int32 position = glyphIterator->getCurrStreamPosition();
-
+                LEReferenceToArrayOf<Offset>
+                    subClassRuleTableOffsetArrayRef(base, success, subClassSetTable->subClassRuleTableOffsetArray, subClassRuleCount);
+                if (LE_FAILURE(success)) {
+                    return 0;
+                }
             for (le_uint16 scRule = 0; scRule < subClassRuleCount; scRule += 1) {
                 Offset subClassRuleTableOffset =
                     SWAPW(subClassSetTable->subClassRuleTableOffsetArray[scRule]);
@@ -331,6 +350,7 @@
                 glyphIterator->setCurrStreamPosition(position);
             }
         }
+        }
 
         // XXX If we get here, the table is mal-formed...
     }
@@ -442,13 +462,22 @@
         le_uint16 srSetCount = SWAPW(chainSubRuleSetCount);
 
         if (coverageIndex < srSetCount) {
+            LEReferenceToArrayOf<Offset>
+                chainSubRuleSetTableOffsetArrayRef(base, success, chainSubRuleSetTableOffsetArray, coverageIndex);
+            if (LE_FAILURE(success)) {
+                return 0;
+            }
             Offset chainSubRuleSetTableOffset = SWAPW(chainSubRuleSetTableOffsetArray[coverageIndex]);
             LEReferenceTo<ChainSubRuleSetTable>
                  chainSubRuleSetTable(base, success, (const ChainSubRuleSetTable *) ((char *) this + chainSubRuleSetTableOffset));
             le_uint16 chainSubRuleCount = SWAPW(chainSubRuleSetTable->chainSubRuleCount);
             le_int32 position = glyphIterator->getCurrStreamPosition();
             GlyphIterator tempIterator(*glyphIterator, emptyFeatureList);
-
+            LEReferenceToArrayOf<Offset>
+                chainSubRuleTableOffsetArrayRef(base, success, chainSubRuleSetTable->chainSubRuleTableOffsetArray, chainSubRuleCount);
+            if (LE_FAILURE(success)) {
+                return 0;
+            }
             for (le_uint16 subRule = 0; subRule < chainSubRuleCount; subRule += 1) {
                 Offset chainSubRuleTableOffset =
                     SWAPW(chainSubRuleSetTable->chainSubRuleTableOffsetArray[subRule]);
@@ -530,6 +559,11 @@
         le_int32 setClass = inputClassDefinitionTable->getGlyphClass(inputClassDefinitionTable,
                                                                      glyphIterator->getCurrGlyphID(),
                                                                      success);
+        LEReferenceToArrayOf<Offset>
+            chainSubClassSetTableOffsetArrayRef(base, success, chainSubClassSetTableOffsetArray, setClass);
+        if (LE_FAILURE(success)) {
+            return 0;
+        }
 
         if (setClass < scSetCount && chainSubClassSetTableOffsetArray[setClass] != 0) {
             Offset chainSubClassSetTableOffset = SWAPW(chainSubClassSetTableOffsetArray[setClass]);
@@ -538,7 +572,11 @@
             le_uint16 chainSubClassRuleCount = SWAPW(chainSubClassSetTable->chainSubClassRuleCount);
             le_int32 position = glyphIterator->getCurrStreamPosition();
             GlyphIterator tempIterator(*glyphIterator, emptyFeatureList);
-
+            LEReferenceToArrayOf<Offset>
+                chainSubClassRuleTableOffsetArrayRef(base, success, chainSubClassSetTable->chainSubClassRuleTableOffsetArray, chainSubClassRuleCount);
+            if (LE_FAILURE(success)) {
+                return 0;
+            }
             for (le_uint16 scRule = 0; scRule < chainSubClassRuleCount; scRule += 1) {
                 Offset chainSubClassRuleTableOffset =
                     SWAPW(chainSubClassSetTable->chainSubClassRuleTableOffsetArray[scRule]);
@@ -603,12 +641,14 @@
     }
 
     le_uint16 backtrkGlyphCount = SWAPW(backtrackGlyphCount);
+    LEReferenceToArrayOf<Offset> backtrackGlyphArrayRef(base, success, backtrackCoverageTableOffsetArray, backtrkGlyphCount);
+    if (LE_FAILURE(success)) {
+        return 0;
+    }
     le_uint16 inputGlyphCount = (le_uint16) SWAPW(backtrackCoverageTableOffsetArray[backtrkGlyphCount]);
     LEReferenceToArrayOf<Offset>   inputCoverageTableOffsetArray(base, success, &backtrackCoverageTableOffsetArray[backtrkGlyphCount + 1], inputGlyphCount+2); // offset
     if (LE_FAILURE(success)) { return 0; }
     const le_uint16 lookaheadGlyphCount = (le_uint16) SWAPW(inputCoverageTableOffsetArray[inputGlyphCount]);
-
-    if( LE_FAILURE(success)) { return 0; }
     LEReferenceToArrayOf<Offset>   lookaheadCoverageTableOffsetArray(base, success, inputCoverageTableOffsetArray.getAlias(inputGlyphCount + 1, success), lookaheadGlyphCount+2);
 
     if( LE_FAILURE(success) ) { return 0; }
--- a/src/share/native/sun/security/ec/ECC_JNI.cpp	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/share/native/sun/security/ec/ECC_JNI.cpp	Tue Nov 04 17:20:19 2014 +0000
@@ -41,7 +41,9 @@
 void ThrowException(JNIEnv *env, const char *exceptionName)
 {
     jclass exceptionClazz = env->FindClass(exceptionName);
-    env->ThrowNew(exceptionClazz, NULL);
+    if (exceptionClazz != NULL) {
+        env->ThrowNew(exceptionClazz, NULL);
+    }
 }
 
 /*
@@ -80,7 +82,6 @@
     return jEncodedBytes;
 }
 
-
 /*
  * Class:     sun_security_ec_ECKeyPairGenerator
  * Method:    generateECKeyPair
@@ -103,6 +104,9 @@
     params_item.len = env->GetArrayLength(encodedParams);
     params_item.data =
         (unsigned char *) env->GetByteArrayElements(encodedParams, 0);
+    if (params_item.data == NULL) {
+        goto cleanup;
+    }
 
     // Fill a new ECParams using the supplied OID
     if (EC_DecodeParams(&params_item, &ecparams, 0) != SECSuccess) {
@@ -170,6 +174,7 @@
             SECITEM_FreeItem(&privKey->publicValue, B_FALSE);
             free(privKey);
         }
+
         if (pSeedBuffer) {
             delete [] pSeedBuffer;
         }
@@ -206,6 +211,7 @@
     digest_item.len = jDigestLength;
 
     ECPrivateKey privKey;
+    privKey.privateValue.data = NULL;
 
     // Initialize the ECParams struct
     ECParams *ecparams = NULL;
@@ -213,6 +219,9 @@
     params_item.len = env->GetArrayLength(encodedParams);
     params_item.data =
         (unsigned char *) env->GetByteArrayElements(encodedParams, 0);
+    if (params_item.data == NULL) {
+        goto cleanup;
+    }
 
     // Fill a new ECParams using the supplied OID
     if (EC_DecodeParams(&params_item, &ecparams, 0) != SECSuccess) {
@@ -226,6 +235,9 @@
     privKey.privateValue.len = env->GetArrayLength(privateKey);
     privKey.privateValue.data =
         (unsigned char *) env->GetByteArrayElements(privateKey, 0);
+    if (privKey.privateValue.data == NULL) {
+        goto cleanup;
+    }
 
     // Prepare a buffer for the signature (twice the key length)
     pSignedDigestBuffer = new jbyte[ecparams->order.len * 2];
@@ -245,6 +257,9 @@
 
     // Create new byte array
     temp = env->NewByteArray(signature_item.len);
+    if (temp == NULL) {
+        goto cleanup;
+    }
 
     // Copy data from native buffer
     env->SetByteArrayRegion(temp, 0, signature_item.len, pSignedDigestBuffer);
@@ -317,6 +332,9 @@
     params_item.len = env->GetArrayLength(encodedParams);
     params_item.data =
         (unsigned char *) env->GetByteArrayElements(encodedParams, 0);
+    if (params_item.data == NULL) {
+        goto cleanup;
+    }
 
     // Fill a new ECParams using the supplied OID
     if (EC_DecodeParams(&params_item, &ecparams, 0) != SECSuccess) {
@@ -369,25 +387,37 @@
   (JNIEnv *env, jclass clazz, jbyteArray privateKey, jbyteArray publicKey, jbyteArray encodedParams)
 {
     jbyteArray jSecret = NULL;
+    ECParams *ecparams = NULL;
+    SECItem privateValue_item;
+    privateValue_item.data = NULL;
+    SECItem publicValue_item;
+    publicValue_item.data = NULL;
+    SECKEYECParams params_item;
+    params_item.data = NULL;
 
     // Extract private key value
-    SECItem privateValue_item;
     privateValue_item.len = env->GetArrayLength(privateKey);
     privateValue_item.data =
             (unsigned char *) env->GetByteArrayElements(privateKey, 0);
+    if (privateValue_item.data == NULL) {
+        goto cleanup;
+    }
 
     // Extract public key value
-    SECItem publicValue_item;
     publicValue_item.len = env->GetArrayLength(publicKey);
     publicValue_item.data =
         (unsigned char *) env->GetByteArrayElements(publicKey, 0);
+    if (publicValue_item.data == NULL) {
+        goto cleanup;
+    }
 
     // Initialize the ECParams struct
-    ECParams *ecparams = NULL;
-    SECKEYECParams params_item;
     params_item.len = env->GetArrayLength(encodedParams);
     params_item.data =
         (unsigned char *) env->GetByteArrayElements(encodedParams, 0);
+    if (params_item.data == NULL) {
+        goto cleanup;
+    }
 
     // Fill a new ECParams using the supplied OID
     if (EC_DecodeParams(&params_item, &ecparams, 0) != SECSuccess) {
@@ -409,6 +439,9 @@
 
     // Create new byte array
     jSecret = env->NewByteArray(secret_item.len);
+    if (jSecret == NULL) {
+        goto cleanup;
+    }
 
     // Copy bytes from the SECItem buffer to a Java byte array
     env->SetByteArrayRegion(jSecret, 0, secret_item.len,
--- a/src/solaris/classes/sun/awt/X11/XRootWindow.java	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/solaris/classes/sun/awt/X11/XRootWindow.java	Tue Nov 04 17:20:19 2014 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2005, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2014, 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,7 +46,8 @@
     }
 
     private XRootWindow() {
-        super(new XCreateWindowParams(new Object[] {DELAYED, Boolean.TRUE}));
+        super(new XCreateWindowParams(new Object[] { DELAYED, Boolean.TRUE,
+                                                     EVENT_MASK, XConstants.StructureNotifyMask }));
     }
 
     public void postInit(XCreateWindowParams params){
--- a/src/solaris/classes/sun/awt/X11/XToolkit.java	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/solaris/classes/sun/awt/X11/XToolkit.java	Tue Nov 04 17:20:19 2014 +0000
@@ -2354,9 +2354,7 @@
 
     private static XEventDispatcher oops_waiter;
     private static boolean oops_updated;
-    private static boolean oops_failed;
-    private XAtom oops;
-    private static final long WORKAROUND_SLEEP = 100;
+    private static boolean oops_move;
 
     /**
      * @inheritDoc
@@ -2367,52 +2365,33 @@
         if (oops_waiter == null) {
             oops_waiter = new XEventDispatcher() {
                     public void dispatchEvent(XEvent e) {
-                        if (e.get_type() == XConstants.SelectionNotify) {
-                            XSelectionEvent pe = e.get_xselection();
-                            if (pe.get_property() == oops.getAtom()) {
-                                oops_updated = true;
-                                awtLockNotifyAll();
-                            } else if (pe.get_selection() == XAtom.get("WM_S0").getAtom() &&
-                                       pe.get_target() == XAtom.get("VERSION").getAtom() &&
-                                       pe.get_property() == 0 &&
-                                       XlibWrapper.XGetSelectionOwner(getDisplay(), XAtom.get("WM_S0").getAtom()) == 0)
-                            {
-                                // WM forgot to acquire selection  or there is no WM
-                                oops_failed = true;
-                                awtLockNotifyAll();
-                            }
-
+                        if (e.get_type() == XConstants.ConfigureNotify) {
+                            // OOPS ConfigureNotify event catched
+                            oops_updated = true;
+                            awtLockNotifyAll();
                         }
                     }
                 };
         }
 
-        if (oops == null) {
-            oops = XAtom.get("OOPS");
-        }
-
         awtLock();
         try {
             addEventDispatcher(win.getWindow(), oops_waiter);
 
             oops_updated = false;
-            oops_failed = false;
-            // Wait for selection notify for oops on win
             long event_number = getEventNumber();
-            XAtom atom = XAtom.get("WM_S0");
-            if (eventLog.isLoggable(PlatformLogger.Level.FINER)) {
-                eventLog.finer("WM_S0 selection owner {0}", XlibWrapper.XGetSelectionOwner(getDisplay(), atom.getAtom()));
-            }
-            XlibWrapper.XConvertSelection(getDisplay(), atom.getAtom(),
-                                          XAtom.get("VERSION").getAtom(), oops.getAtom(),
-                                          win.getWindow(), XConstants.CurrentTime);
+            // Generate OOPS ConfigureNotify event
+            XlibWrapper.XMoveWindow(getDisplay(), win.getWindow(), oops_move ? 0 : 1, 0);
+            // Change win position each time to avoid system optimization
+            oops_move = !oops_move;
             XSync();
 
-            eventLog.finer("Requested OOPS");
+            eventLog.finer("Generated OOPS ConfigureNotify event");
 
             long start = System.currentTimeMillis();
-            while (!oops_updated && !oops_failed) {
+            while (!oops_updated) {
                 try {
+                    // Wait for OOPS ConfigureNotify event
                     awtLockWait(timeout);
                 } catch (InterruptedException e) {
                     throw new RuntimeException(e);
@@ -2423,20 +2402,8 @@
                     throw new OperationTimedOut(Long.toString(System.currentTimeMillis() - start));
                 }
             }
-            if (oops_failed && getEventNumber() - event_number == 1) {
-                // If selection update failed we can simply wait some time
-                // hoping some events will arrive
-                awtUnlock();
-                eventLog.finest("Emergency sleep");
-                try {
-                    Thread.sleep(WORKAROUND_SLEEP);
-                } catch (InterruptedException ie) {
-                    throw new RuntimeException(ie);
-                } finally {
-                    awtLock();
-                }
-            }
-            return getEventNumber() - event_number > 2;
+            // Don't take into account OOPS ConfigureNotify event
+            return getEventNumber() - event_number > 1;
         } finally {
             removeEventDispatcher(win.getWindow(), oops_waiter);
             eventLog.finer("Exiting syncNativeQueue");
--- a/src/solaris/classes/sun/print/CUPSPrinter.java	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/solaris/classes/sun/print/CUPSPrinter.java	Tue Nov 04 17:20:19 2014 +0000
@@ -126,7 +126,7 @@
     /**
      * Returns array of MediaSizeNames derived from PPD.
      */
-    public MediaSizeName[] getMediaSizeNames() {
+    MediaSizeName[] getMediaSizeNames() {
         initMedia();
         return cupsMediaSNames;
     }
@@ -135,7 +135,7 @@
     /**
      * Returns array of Custom MediaSizeNames derived from PPD.
      */
-    public CustomMediaSizeName[] getCustomMediaSizeNames() {
+    CustomMediaSizeName[] getCustomMediaSizeNames() {
         initMedia();
         return cupsCustomMediaSNames;
     }
@@ -147,7 +147,7 @@
     /**
      * Returns array of MediaPrintableArea derived from PPD.
      */
-    public MediaPrintableArea[] getMediaPrintableArea() {
+    MediaPrintableArea[] getMediaPrintableArea() {
         initMedia();
         return cupsMediaPrintables;
     }
@@ -155,7 +155,7 @@
     /**
      * Returns array of MediaTrays derived from PPD.
      */
-    public MediaTray[] getMediaTrays() {
+    MediaTray[] getMediaTrays() {
         initMedia();
         return cupsMediaTrays;
     }
--- a/src/solaris/classes/sun/print/IPPPrintService.java	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/solaris/classes/sun/print/IPPPrintService.java	Tue Nov 04 17:20:19 2014 +0000
@@ -994,7 +994,9 @@
 
     public synchronized Class[] getSupportedAttributeCategories() {
         if (supportedCats != null) {
-            return supportedCats;
+            Class<?> [] copyCats = new Class<?>[supportedCats.length];
+            System.arraycopy(supportedCats, 0, copyCats, 0, copyCats.length);
+            return copyCats;
         }
 
         initAttributes();
@@ -1051,7 +1053,9 @@
         }
         supportedCats = new Class[catList.size()];
         catList.toArray(supportedCats);
-        return supportedCats;
+        Class<?>[] copyCats = new Class<?>[supportedCats.length];
+        System.arraycopy(supportedCats, 0, copyCats, 0, copyCats.length);
+        return copyCats;
     }
 
 
--- a/src/solaris/doc/sun/man/man1/java.1	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/solaris/doc/sun/man/man1/java.1	Tue Nov 04 17:20:19 2014 +0000
@@ -1,3461 +1,2198 @@
 '\" t
-.\" Copyright (c) 1994, 2014, 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.
-.\"
-.\" Title: java
-.\" Language: English
-.\" Date: 08 August 2014
-.\" SectDesc: Basic Tools
-.\" Software: JDK 8
-.\" Arch: generic
-.\" Part Number: E38207-03
+.\"  Copyright (c) 1994, 2015, 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.
+.\"
+.\"     Arch: generic
+.\"     Software: JDK 8
+.\"     Date: 03 March 2015
+.\"     SectDesc: Basic Tools
+.\"     Title: java.1
 .\"
 .if n .pl 99999
-.TH "java" "1" "08 August 2014" "JDK 8" "Basic Tools"
-.\" -----------------------------------------------------------------
-.\" * Define some portability stuff
-.\" -----------------------------------------------------------------
-.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-.\" http://bugs.debian.org/507673
-.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
-.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-.ie \n(.g .ds Aq \(aq
-.el       .ds Aq '
-.\" -----------------------------------------------------------------
-.\" * set default formatting
-.\" -----------------------------------------------------------------
-.\" disable hyphenation
-.nh
-.\" disable justification (adjust text to left margin only)
-.ad l
-.\" -----------------------------------------------------------------
-.\" * MAIN CONTENT STARTS HERE *
-.\" -----------------------------------------------------------------
-.SH "NAME"
+.TH java 1 "03 March 2015" "JDK 8" "Basic Tools"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el       .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+
+.SH NAME    
 java \- Launches a Java application\&.
-.SH "SYNOPSIS"
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
+.SH SYNOPSIS    
+.sp     
+.nf     
+
 \fBjava\fR [\fIoptions\fR] \fIclassname\fR [\fIargs\fR]
-.fi
-.if n \{\
-.RE
-.\}
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
+.fi     
+.nf     
+
 \fBjava\fR [\fIoptions\fR] \fB\-jar\fR \fIfilename\fR [\fIargs\fR]
-.fi
-.if n \{\
-.RE
-.\}
-.PP
+.fi     
+.sp     
+.TP     
 \fIoptions\fR
-.RS 4
-Command\-line options separated by spaces\&. See Options\&.
-.RE
-.PP
+Command-line options separated by spaces\&. See Options\&.
+.TP     
 \fIclassname\fR
-.RS 4
 The name of the class to be launched\&.
-.RE
-.PP
+.TP     
 \fIfilename\fR
-.RS 4
-The name of the Java Archive (JAR) file to be called\&. Used only with the
-\fB\-jar\fR
-option\&.
-.RE
-.PP
+The name of the Java Archive (JAR) file to be called\&. Used only with the \f3-jar\fR option\&.
+.TP     
 \fIargs\fR
-.RS 4
-The arguments passed to the
-\fBmain()\fR
-method separated by spaces\&.
-.RE
-.SH "DESCRIPTION"
+The arguments passed to the \f3main()\fR method separated by spaces\&.
+.SH DESCRIPTION    
+The \f3java\fR command starts a Java application\&. It does this by starting the Java Runtime Environment (JRE), loading the specified class, and calling that class\&'s \f3main()\fR method\&. The method must be declared \fIpublic\fR and \fIstatic\fR, it must not return any value, and it must accept a \f3String\fR array as a parameter\&. The method declaration has the following form:
+.sp     
+.nf     
+\f3public static void main(String[] args)\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+The \f3java\fR command can be used to launch a JavaFX application by loading a class that either has a \f3main()\fR method or that extends \f3javafx\&.application\&.Application\fR\&. In the latter case, the launcher constructs an instance of the \f3Application\fR class, calls its \f3init()\fR method, and then calls the \f3start(javafx\&.stage\&.Stage)\fR method\&.
 .PP
-The
-\fBjava\fR
-command starts a Java application\&. It does this by starting the Java Runtime Environment (JRE), loading the specified class, and calling that class\*(Aqs
-\fBmain()\fR
-method\&. The method must be declared
-\fIpublic\fR
-and
-\fIstatic\fR, it must not return any value, and it must accept a
-\fBString\fR
-array as a parameter\&. The method declaration has the following form:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBpublic static void main(String[] args)\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.PP
-The
-\fBjava\fR
-command can be used to launch a JavaFX application by loading a class that either has a
-\fBmain()\fR
-method or that extends
-\fBjavafx\&.application\&.Application\fR\&. In the latter case, the launcher constructs an instance of the
-\fBApplication\fR
-class, calls its
-\fBinit()\fR
-method, and then calls the
-\fBstart(javafx\&.stage\&.Stage)\fR
-method\&.
-.PP
-By default, the first argument that is not an option of the
-\fBjava\fR
-command is the fully qualified name of the class to be called\&. If the
-\fB\-jar\fR
-option is specified, its argument is the name of the JAR file containing class and resource files for the application\&. The startup class must be indicated by the
-\fBMain\-Class\fR
-manifest header in its source code\&.
+By default, the first argument that is not an option of the \f3java\fR command is the fully qualified name of the class to be called\&. If the \f3-jar\fR option is specified, its argument is the name of the JAR file containing class and resource files for the application\&. The startup class must be indicated by the \f3Main-Class\fR manifest header in its source code\&.
 .PP
 The JRE searches for the startup class (and other classes used by the application) in three sets of locations: the bootstrap class path, the installed extensions, and the user\(cqs class path\&.
 .PP
-Arguments after the class file name or the JAR file name are passed to the
-\fBmain()\fR
-method\&.
-.SH "OPTIONS"
-.PP
-The
-\fBjava\fR
-command supports a wide range of options that can be divided into the following categories:
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
+Arguments after the class file name or the JAR file name are passed to the \f3main()\fR method\&.
+.SH OPTIONS    
+The \f3java\fR command supports a wide range of options that can be divided into the following categories:
+.TP 0.2i    
+\(bu
 Standard Options
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-Non\-Standard Options
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
+.TP 0.2i    
+\(bu
+Non-Standard Options
+.TP 0.2i    
+\(bu
 Advanced Runtime Options
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
+.TP 0.2i    
+\(bu
 Advanced JIT Compiler Options
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
+.TP 0.2i    
+\(bu
 Advanced Serviceability Options
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
+.TP 0.2i    
+\(bu
 Advanced Garbage Collection Options
-.RE
 .PP
 Standard options are guaranteed to be supported by all implementations of the Java Virtual Machine (JVM)\&. They are used for common actions, such as checking the version of the JRE, setting the class path, enabling verbose output, and so on\&.
 .PP
-Non\-standard options are general purpose options that are specific to the Java HotSpot Virtual Machine, so they are not guaranteed to be supported by all JVM implementations, and are subject to change\&. These options start with
-\fB\-X\fR\&.
+Non-standard options are general purpose options that are specific to the Java HotSpot Virtual Machine, so they are not guaranteed to be supported by all JVM implementations, and are subject to change\&. These options start with \f3-X\fR\&.
 .PP
-Advanced options are not recommended for casual use\&. These are developer options used for tuning specific areas of the Java HotSpot Virtual Machine operation that often have specific system requirements and may require privileged access to system configuration parameters\&. They are also not guaranteed to be supported by all JVM implementations, and are subject to change\&. Advanced options start with
-\fB\-XX\fR\&.
+Advanced options are not recommended for casual use\&. These are developer options used for tuning specific areas of the Java HotSpot Virtual Machine operation that often have specific system requirements and may require privileged access to system configuration parameters\&. They are also not guaranteed to be supported by all JVM implementations, and are subject to change\&. Advanced options start with \f3-XX\fR\&.
 .PP
 To keep track of the options that were deprecated or removed in the latest release, there is a section named Deprecated and Removed Options at the end of the document\&.
 .PP
-Boolean options are used to either enable a feature that is disabled by default or disable a feature that is enabled by default\&. Such options do not require a parameter\&. Boolean
-\fB\-XX\fR
-options are enabled using the plus sign (\fB\-XX:+\fR\fIOptionName\fR) and disabled using the minus sign (\fB\-XX:\-\fR\fIOptionName\fR)\&.
-.PP
-For options that require an argument, the argument may be separated from the option name by a space, a colon (:), or an equal sign (=), or the argument may directly follow the option (the exact syntax differs for each option)\&. If you are expected to specify the size in bytes, you can use no suffix, or use the suffix
-\fBk\fR
-or
-\fBK\fR
-for kilobytes (KB),
-\fBm\fR
-or
-\fBM\fR
-for megabytes (MB),
-\fBg\fR
-or
-\fBG\fR
-for gigabytes (GB)\&. For example, to set the size to 8 GB, you can specify either
-\fB8g\fR,
-\fB8192m\fR,
-\fB8388608k\fR, or
-\fB8589934592\fR
-as the argument\&. If you are expected to specify the percentage, use a number from 0 to 1 (for example, specify
-\fB0\&.25\fR
-for 25%)\&.
-.SS "Standard Options"
-.PP
-These are the most commonly used options that are supported by all implementations of the JVM\&.
-.PP
-\-agentlib:\fIlibname\fR[=\fIoptions\fR]
-.RS 4
-Loads the specified native agent library\&. After the library name, a comma\-separated list of options specific to the library can be used\&.
-.sp
-If the option
-\fB\-agentlib:foo\fR
-is specified, then the JVM attempts to load the library named
-\fBlibfoo\&.so\fR
-in the location specified by the
-\fBLD_LIBRARY_PATH\fR
-system variable (on OS X this variable is
-\fBDYLD_LIBRARY_PATH\fR)\&.
-.sp
-The following example shows how to load the heap profiling tool (HPROF) library and get sample CPU information every 20 ms, with a stack depth of 3:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-agentlib:hprof=cpu=samples,interval=20,depth=3\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-The following example shows how to load the Java Debug Wire Protocol (JDWP) library and listen for the socket connection on port 8000, suspending the JVM before the main class loads:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-agentlib:jdwp=transport=dt_socket,server=y,address=8000\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-For more information about the native agent libraries, refer to the following:
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-The
-\fBjava\&.lang\&.instrument\fR
-package description at http://docs\&.oracle\&.com/javase/8/docs/api/java/lang/instrument/package\-summary\&.html
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-Agent Command Line Options in the JVM Tools Interface guide at http://docs\&.oracle\&.com/javase/8/docs/platform/jvmti/jvmti\&.html#starting
-.RE
-.RE
-.PP
-\-agentpath:\fIpathname\fR[=\fIoptions\fR]
-.RS 4
-Loads the native agent library specified by the absolute path name\&. This option is equivalent to
-\fB\-agentlib\fR
-but uses the full path and file name of the library\&.
-.RE
-.PP
-\-client
-.RS 4
-Selects the Java HotSpot Client VM\&. The 64\-bit version of the Java SE Development Kit (JDK) currently ignores this option and instead uses the Server JVM\&.
-.sp
-For default JVM selection, see Server\-Class Machine Detection at
-
-http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/vm/server\-class\&.html
-.RE
-.PP
-\-D\fIproperty\fR=\fIvalue\fR
-.RS 4
-Sets a system property value\&. The
-\fIproperty\fR
-variable is a string with no spaces that represents the name of the property\&. The
-\fIvalue\fR
-variable is a string that represents the value of the property\&. If
-\fIvalue\fR
-is a string with spaces, then enclose it in quotation marks (for example
-\fB\-Dfoo="foo bar"\fR)\&.
-.RE
-.PP
-\-d32
-.RS 4
-Runs the application in a 32\-bit environment\&. If a 32\-bit environment is not installed or is not supported, then an error will be reported\&. By default, the application is run in a 32\-bit environment unless a 64\-bit system is used\&.
-.RE
-.PP
-\-d64
-.RS 4
-Runs the application in a 64\-bit environment\&. If a 64\-bit environment is not installed or is not supported, then an error will be reported\&. By default, the application is run in a 32\-bit environment unless a 64\-bit system is used\&.
-.sp
-Currently only the Java HotSpot Server VM supports 64\-bit operation, and the
-\fB\-server\fR
-option is implicit with the use of
-\fB\-d64\fR\&. The
-\fB\-client\fR
-option is ignored with the use of
-\fB\-d64\fR\&. This is subject to change in a future release\&.
-.RE
-.PP
-\-disableassertions[:[\fIpackagename\fR]\&.\&.\&.|:\fIclassname\fR]
-.br
-\-da[:[\fIpackagename\fR]\&.\&.\&.|:\fIclassname\fR]
-.RS 4
-Disables assertions\&. By default, assertions are disabled in all packages and classes\&.
-.sp
-With no arguments,
-\fB\-disableassertions\fR
-(\fB\-da\fR) disables assertions in all packages and classes\&. With the
-\fIpackagename\fR
-argument ending in
-\fB\&.\&.\&.\fR, the switch disables assertions in the specified package and any subpackages\&. If the argument is simply
-\fB\&.\&.\&.\fR, then the switch disables assertions in the unnamed package in the current working directory\&. With the
-\fIclassname\fR
-argument, the switch disables assertions in the specified class\&.
-.sp
-The
-\fB\-disableassertions\fR
-(\fB\-da\fR) option applies to all class loaders and to system classes (which do not have a class loader)\&. There is one exception to this rule: if the option is provided with no arguments, then it does not apply to system classes\&. This makes it easy to disable assertions in all classes except for system classes\&. The
-\fB\-disablesystemassertions\fR
-option enables you to disable assertions in all system classes\&.
-.sp
-To explicitly enable assertions in specific packages or classes, use the
-\fB\-enableassertions\fR
-(\fB\-ea\fR) option\&. Both options can be used at the same time\&. For example, to run the
-\fBMyClass\fR
-application with assertions enabled in package
-\fBcom\&.wombat\&.fruitbat\fR
-(and any subpackages) but disabled in class
-\fBcom\&.wombat\&.fruitbat\&.Brickbat\fR, use the following command:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBjava \-ea:com\&.wombat\&.fruitbat\&.\&.\&. \-da:com\&.wombat\&.fruitbat\&.Brickbat MyClass\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
-\-disablesystemassertions
-.br
-\-dsa
-.RS 4
-Disables assertions in all system classes\&.
-.RE
-.PP
-\-enableassertions[:[\fIpackagename\fR]\&.\&.\&.|:\fIclassname\fR]
-.br
-\-ea[:[\fIpackagename\fR]\&.\&.\&.|:\fIclassname\fR]
-.RS 4
-Enables assertions\&. By default, assertions are disabled in all packages and classes\&.
-.sp
-With no arguments,
-\fB\-enableassertions\fR
-(\fB\-ea\fR) enables assertions in all packages and classes\&. With the
-\fIpackagename\fR
-argument ending in
-\fB\&.\&.\&.\fR, the switch enables assertions in the specified package and any subpackages\&. If the argument is simply
-\fB\&.\&.\&.\fR, then the switch enables assertions in the unnamed package in the current working directory\&. With the
-\fIclassname\fR
-argument, the switch enables assertions in the specified class\&.
-.sp
-The
-\fB\-enableassertions\fR
-(\fB\-ea\fR) option applies to all class loaders and to system classes (which do not have a class loader)\&. There is one exception to this rule: if the option is provided with no arguments, then it does not apply to system classes\&. This makes it easy to enable assertions in all classes except for system classes\&. The
-\fB\-enablesystemassertions\fR
-option provides a separate switch to enable assertions in all system classes\&.
-.sp
-To explicitly disable assertions in specific packages or classes, use the
-\fB\-disableassertions\fR
-(\fB\-da\fR) option\&. If a single command contains multiple instances of these switches, then they are processed in order before loading any classes\&. For example, to run the
-\fBMyClass\fR
-application with assertions enabled only in package
-\fBcom\&.wombat\&.fruitbat\fR
-(and any subpackages) but disabled in class
-\fBcom\&.wombat\&.fruitbat\&.Brickbat\fR, use the following command:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBjava \-ea:com\&.wombat\&.fruitbat\&.\&.\&. \-da:com\&.wombat\&.fruitbat\&.Brickbat MyClass\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
-\-enablesystemassertions
-.br
-\-esa
-.RS 4
-Enables assertions in all system classes\&.
-.RE
-.PP
-\-help
-.br
-\-?
-.RS 4
-Displays usage information for the
-\fBjava\fR
-command without actually running the JVM\&.
-.RE
-.PP
-\-jar \fIfilename\fR
-.RS 4
-Executes a program encapsulated in a JAR file\&. The
-\fIfilename\fR
-argument is the name of a JAR file with a manifest that contains a line in the form
-\fBMain\-Class:\fR\fIclassname\fR
-that defines the class with the
-\fBpublic static void main(String[] args)\fR
-method that serves as your application\*(Aqs starting point\&.
-.sp
-When you use the
-\fB\-jar\fR
-option, the specified JAR file is the source of all user classes, and other class path settings are ignored\&.
-.sp
-For more information about JAR files, see the following resources:
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-jar(1)
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-The Java Archive (JAR) Files guide at http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/jar/index\&.html
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-Lesson: Packaging Programs in JAR Files at
-
-http://docs\&.oracle\&.com/javase/tutorial/deployment/jar/index\&.html
-.RE
-.RE
-.PP
-\-javaagent:\fIjarpath\fR[=\fIoptions\fR]
-.RS 4
-Loads the specified Java programming language agent\&. For more information about instrumenting Java applications, see the
-\fBjava\&.lang\&.instrument\fR
-package description in the Java API documentation at http://docs\&.oracle\&.com/javase/8/docs/api/java/lang/instrument/package\-summary\&.html
-.RE
-.PP
-\-jre\-restrict\-search
-.RS 4
-Includes user\-private JREs in the version search\&.
-.RE
-.PP
-\-no\-jre\-restrict\-search
-.RS 4
-Excludes user\-private JREs from the version search\&.
-.RE
-.PP
-\-server
-.RS 4
-Selects the Java HotSpot Server VM\&. The 64\-bit version of the JDK supports only the Server VM, so in that case the option is implicit\&.
-.sp
-For default JVM selection, see Server\-Class Machine Detection at
-
-http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/vm/server\-class\&.html
-.RE
-.PP
-\-showversion
-.RS 4
-Displays version information and continues execution of the application\&. This option is equivalent to the
-\fB\-version\fR
-option except that the latter instructs the JVM to exit after displaying version information\&.
-.RE
-.PP
-\-splash:\fIimgname\fR
-.RS 4
-Shows the splash screen with the image specified by
-\fIimgname\fR\&. For example, to show the
-\fBsplash\&.gif\fR
-file from the
-\fBimages\fR
-directory when starting your application, use the following option:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-splash:images/splash\&.gif\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
-\-verbose:class
-.RS 4
-Displays information about each loaded class\&.
-.RE
-.PP
-\-verbose:gc
-.RS 4
-Displays information about each garbage collection (GC) event\&.
-.RE
-.PP
-\-verbose:jni
-.RS 4
-Displays information about the use of native methods and other Java Native Interface (JNI) activity\&.
-.RE
-.PP
-\-version
-.RS 4
-Displays version information and then exits\&. This option is equivalent to the
-\fB\-showversion\fR
-option except that the latter does not instruct the JVM to exit after displaying version information\&.
-.RE
-.PP
-\-version:\fIrelease\fR
-.RS 4
-Specifies the release version to be used for running the application\&. If the version of the
-\fBjava\fR
-command called does not meet this specification and an appropriate implementation is found on the system, then the appropriate implementation will be used\&.
-.sp
-The
-\fIrelease\fR
-argument specifies either the exact version string, or a list of version strings and ranges separated by spaces\&. A
-\fIversion string\fR
-is the developer designation of the version number in the following form:
-\fB1\&.\fR\fIx\fR\fB\&.0_\fR\fIu\fR
-(where
-\fIx\fR
-is the major version number, and
-\fIu\fR
-is the update version number)\&. A
-\fIversion range\fR
-is made up of a version string followed by a plus sign (\fB+\fR) to designate this version or later, or a part of a version string followed by an asterisk (\fB*\fR) to designate any version string with a matching prefix\&. Version strings and ranges can be combined using a space for a logical
-\fIOR\fR
-combination, or an ampersand (\fB&\fR) for a logical
-\fIAND\fR
-combination of two version strings/ranges\&. For example, if running the class or JAR file requires either JRE 6u13 (1\&.6\&.0_13), or any JRE 6 starting from 6u10 (1\&.6\&.0_10), specify the following:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-version:"1\&.6\&.0_13 1\&.6* & 1\&.6\&.0_10+"\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-Quotation marks are necessary only if there are spaces in the
-\fIrelease\fR
-parameter\&.
-.sp
-For JAR files, the preference is to specify version requirements in the JAR file manifest rather than on the command line\&.
-.RE
-.SS "Non\-Standard Options"
-.PP
-These options are general purpose options that are specific to the Java HotSpot Virtual Machine\&.
-.PP
-\-X
-.RS 4
-Displays help for all available
-\fB\-X\fR
-options\&.
-.RE
-.PP
-\-Xbatch
-.RS 4
-Disables background compilation\&. By default, the JVM compiles the method as a background task, running the method in interpreter mode until the background compilation is finished\&. The
-\fB\-Xbatch\fR
-flag disables background compilation so that compilation of all methods proceeds as a foreground task until completed\&.
-.sp
-This option is equivalent to
-\fB\-XX:\-BackgroundCompilation\fR\&.
-.RE
-.PP
-\-Xbootclasspath:\fIpath\fR
-.RS 4
-Specifies a list of directories, JAR files, and ZIP archives separated by colons (:) to search for boot class files\&. These are used in place of the boot class files included in the JDK\&.
-.sp
-Do not deploy applications that use this option to override a class in
-\fBrt\&.jar\fR, because this violates the JRE binary code license\&.
-.RE
-.PP
-\-Xbootclasspath/a:\fIpath\fR
-.RS 4
-Specifies a list of directories, JAR files, and ZIP archives separated by colons (:) to append to the end of the default bootstrap class path\&.
-.sp
-Do not deploy applications that use this option to override a class in
-\fBrt\&.jar\fR, because this violates the JRE binary code license\&.
-.RE
-.PP
-\-Xbootclasspath/p:\fIpath\fR
-.RS 4
-Specifies a list of directories, JAR files, and ZIP archives separated by colons (:) to prepend to the front of the default bootstrap class path\&.
-.sp
-Do not deploy applications that use this option to override a class in
-\fBrt\&.jar\fR, because this violates the JRE binary code license\&.
-.RE
-.PP
-\-Xcheck:jni
-.RS 4
-Performs additional checks for Java Native Interface (JNI) functions\&. Specifically, it validates the parameters passed to the JNI function and the runtime environment data before processing the JNI request\&. Any invalid data encountered indicates a problem in the native code, and the JVM will terminate with an irrecoverable error in such cases\&. Expect a performance degradation when this option is used\&.
-.RE
-.PP
-\-Xcomp
-.RS 4
-Forces compilation of methods on first invocation\&. By default, the Client VM (\fB\-client\fR) performs 1,000 interpreted method invocations and the Server VM (\fB\-server\fR) performs 10,000 interpreted method invocations to gather information for efficient compilation\&. Specifying the
-\fB\-Xcomp\fR
-option disables interpreted method invocations to increase compilation performance at the expense of efficiency\&.
-.sp
-You can also change the number of interpreted method invocations before compilation using the
-\fB\-XX:CompileThreshold\fR
-option\&.
-.RE
-.PP
-\-Xdebug
-.RS 4
-Does nothing\&. Provided for backward compatibility\&.
-.RE
-.PP
-\-Xdiag
-.RS 4
-Shows additional diagnostic messages\&.
-.RE
-.PP
-\-Xfuture
-.RS 4
-Enables strict class\-file format checks that enforce close conformance to the class\-file format specification\&. Developers are encouraged to use this flag when developing new code because the stricter checks will become the default in future releases\&.
-.RE
-.PP
-\-Xint
-.RS 4
-Runs the application in interpreted\-only mode\&. Compilation to native code is disabled, and all bytecode is executed by the interpreter\&. The performance benefits offered by the just in time (JIT) compiler are not present in this mode\&.
-.RE
-.PP
-\-Xinternalversion
-.RS 4
-Displays more detailed JVM version information than the
-\fB\-version\fR
-option, and then exits\&.
-.RE
-.PP
-\-Xloggc:\fIfilename\fR
-.RS 4
-Sets the file to which verbose GC events information should be redirected for logging\&. The information written to this file is similar to the output of
-\fB\-verbose:gc\fR
-with the time elapsed since the first GC event preceding each logged event\&. The
-\fB\-Xloggc\fR
-option overrides
-\fB\-verbose:gc\fR
-if both are given with the same
-\fBjava\fR
-command\&.
-.sp
-Example:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-Xloggc:garbage\-collection\&.log\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
-\-Xmaxjitcodesize=\fIsize\fR
-.RS 4
-Specifies the maximum code cache size (in bytes) for JIT\-compiled code\&. Append the letter
-\fBk\fR
-or
-\fBK\fR
-to indicate kilobytes,
-\fBm\fR
-or
-\fBM\fR
-to indicate megabytes,
-\fBg\fR
-or
-\fBG\fR
-to indicate gigabytes\&. By default, the value is set to 48 MB:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-Xmaxjitcodesize=48m\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-This option is equivalent to
-\fB\-XX:ReservedCodeCacheSize\fR\&.
-.RE
-.PP
-\-Xmixed
-.RS 4
-Executes all bytecode by the interpreter except for hot methods, which are compiled to native code\&.
-.RE
-.PP
-\-Xmn\fIsize\fR
-.RS 4
-Sets the initial and maximum size (in bytes) of the heap for the young generation (nursery)\&. Append the letter
-\fBk\fR
-or
-\fBK\fR
-to indicate kilobytes,
-\fBm\fR
-or
-\fBM\fR
-to indicate megabytes,
-\fBg\fR
-or
-\fBG\fR
-to indicate gigabytes\&.
-.sp
-The young generation region of the heap is used for new objects\&. GC is performed in this region more often than in other regions\&. If the size for the young generation is too small, then a lot of minor garbage collections will be performed\&. If the size is too large, then only full garbage collections will be performed, which can take a long time to complete\&. Oracle recommends that you keep the size for the young generation between a half and a quarter of the overall heap size\&.
-.sp
-The following examples show how to set the initial and maximum size of young generation to 256 MB using various units:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-Xmn256m\fR
-\fB\-Xmn262144k\fR
-\fB\-Xmn268435456\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-Instead of the
-\fB\-Xmn\fR
-option to set both the initial and maximum size of the heap for the young generation, you can use
-\fB\-XX:NewSize\fR
-to set the initial size and
-\fB\-XX:MaxNewSize\fR
-to set the maximum size\&.
-.RE
-.PP
-\-Xms\fIsize\fR
-.RS 4
-Sets the initial size (in bytes) of the heap\&. This value must be a multiple of 1024 and greater than 1 MB\&. Append the letter
-\fBk\fR
-or
-\fBK\fR
-to indicate kilobytes,
-\fBm\fR
-or
-\fBM\fR
-to indicate megabytes,
-\fBg\fR
-or
-\fBG\fR
-to indicate gigabytes\&.
-.sp
-The following examples show how to set the size of allocated memory to 6 MB using various units:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-Xms6291456\fR
-\fB\-Xms6144k\fR
-\fB\-Xms6m\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-If you do not set this option, then the initial size will be set as the sum of the sizes allocated for the old generation and the young generation\&. The initial size of the heap for the young generation can be set using the
-\fB\-Xmn\fR
-option or the
-\fB\-XX:NewSize\fR
-option\&.
-.RE
-.PP
-\-Xmx\fIsize\fR
-.RS 4
-Specifies the maximum size (in bytes) of the memory allocation pool in bytes\&. This value must be a multiple of 1024 and greater than 2 MB\&. Append the letter
-\fBk\fR
-or
-\fBK\fR
-to indicate kilobytes,
-\fBm\fR
-or
-\fBM\fR
-to indicate megabytes,
-\fBg\fR
-or
-\fBG\fR
-to indicate gigabytes\&. The default value is chosen at runtime based on system configuration\&. For server deployments,
-\fB\-Xms\fR
-and
-\fB\-Xmx\fR
-are often set to the same value\&. For more information, see Garbage Collector Ergonomics at http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/vm/gc\-ergonomics\&.html
-.sp
-The following examples show how to set the maximum allowed size of allocated memory to 80 MB using various units:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-Xmx83886080\fR
-\fB\-Xmx81920k\fR
-\fB\-Xmx80m\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-The
-\fB\-Xmx\fR
-option is equivalent to
-\fB\-XX:MaxHeapSize\fR\&.
-.RE
-.PP
-\-Xnoclassgc
-.RS 4
-Disables garbage collection (GC) of classes\&. This can save some GC time, which shortens interruptions during the application run\&.
-.sp
-When you specify
-\fB\-Xnoclassgc\fR
-at startup, the class objects in the application will be left untouched during GC and will always be considered live\&. This can result in more memory being permanently occupied which, if not used carefully, will throw an out of memory exception\&.
-.RE
-.PP
-\-Xprof
-.RS 4
-Profiles the running program and sends profiling data to standard output\&. This option is provided as a utility that is useful in program development and is not intended to be used in production systems\&.
-.RE
-.PP
-\-Xrs
-.RS 4
-Reduces the use of operating system signals by the JVM\&.
-.sp
-Shutdown hooks enable orderly shutdown of a Java application by running user cleanup code (such as closing database connections) at shutdown, even if the JVM terminates abruptly\&.
-.sp
-The JVM catches signals to implement shutdown hooks for unexpected termination\&. The JVM uses
-\fBSIGHUP\fR,
-\fBSIGINT\fR, and
-\fBSIGTERM\fR
-to initiate the running of shutdown hooks\&.
-.sp
-The JVM uses a similar mechanism to implement the feature of dumping thread stacks for debugging purposes\&. The JVM uses
-\fBSIGQUIT\fR
-to perform thread dumps\&.
-.sp
-Applications embedding the JVM frequently need to trap signals such as
-\fBSIGINT\fR
-or
-\fBSIGTERM\fR, which can lead to interference with the JVM signal handlers\&. The
-\fB\-Xrs\fR
-option is available to address this issue\&. When
-\fB\-Xrs\fR
-is used, the signal masks for
-\fBSIGINT\fR,
-\fBSIGTERM\fR,
-\fBSIGHUP\fR, and
-\fBSIGQUIT\fR
-are not changed by the JVM, and signal handlers for these signals are not installed\&.
-.sp
-There are two consequences of specifying
-\fB\-Xrs\fR:
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-\fBSIGQUIT\fR
-thread dumps are not available\&.
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-User code is responsible for causing shutdown hooks to run, for example, by calling
-\fBSystem\&.exit()\fR
-when the JVM is to be terminated\&.
-.RE
-.RE
-.PP
-\-Xshare:\fImode\fR
-.RS 4
-Sets the class data sharing mode\&. Possible
-\fImode\fR
-arguments for this option include the following:
-.PP
-auto
-.RS 4
-Use shared class data if possible\&. This is the default value for Java HotSpot 32\-Bit Client VM\&.
-.RE
-.PP
-on
-.RS 4
-Require the use of class data sharing\&. Print an error message and exit if class data sharing cannot be used\&.
-.RE
-.PP
-off
-.RS 4
-Do not use shared class data\&. This is the default value for Java HotSpot 32\-Bit Server VM, Java HotSpot 64\-Bit Client VM, and Java HotSpot 64\-Bit Server VM\&.
-.RE
+Boolean options are used to either enable a feature that is disabled by default or disable a feature that is enabled by default\&. Such options do not require a parameter\&. Boolean \f3-XX\fR options are enabled using the plus sign (\f3-XX:+\fR\fIOptionName\fR) and disabled using the minus sign (\f3-XX:-\fR\fIOptionName\fR)\&.
 .PP
-dump
-.RS 4
-Manually generate the class data sharing archive\&.
-.RE
-.RE
-.PP
-\-XshowSettings:\fIcategory\fR
-.RS 4
-Shows settings and continues\&. Possible
-\fIcategory\fR
-arguments for this option include the following:
-.PP
-all
-.RS 4
-Shows all categories of settings\&. This is the default value\&.
-.RE
-.PP
-locale
-.RS 4
-Shows settings related to locale\&.
-.RE
-.PP
-properties
-.RS 4
-Shows settings related to system properties\&.
-.RE
-.PP
-vm
-.RS 4
-Shows the settings of the JVM\&.
-.RE
-.RE
-.PP
-\-Xss\fIsize\fR
-.RS 4
-Sets the thread stack size (in bytes)\&. Append the letter
-\fBk\fR
-or
-\fBK\fR
-to indicate KB,
-\fBm\fR
-or
-\fBM\fR
-to indicate MB,
-\fBg\fR
-or
-\fBG\fR
-to indicate GB\&. The default value depends on the platform:
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-Linux/ARM (32\-bit): 320 KB
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-Linux/i386 (32\-bit): 320 KB
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-Linux/x64 (64\-bit): 1024 KB
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-OS X (64\-bit): 1024 KB
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-Oracle Solaris/i386 (32\-bit): 320 KB
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-Oracle Solaris/x64 (64\-bit): 1024 KB
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-Windows: depends on virtual memory
-.RE
-.sp
-The following examples set the thread stack size to 1024 KB in different units:
-.sp
-.if n \{\
-.RS 4
-.\}
+For options that require an argument, the argument may be separated from the option name by a space, a colon (:), or an equal sign (=), or the argument may directly follow the option (the exact syntax differs for each option)\&. If you are expected to specify the size in bytes, you can use no suffix, or use the suffix \f3k\fR or \f3K\fR for kilobytes (KB), \f3m\fR or \f3M\fR for megabytes (MB), \f3g\fR or \f3G\fR for gigabytes (GB)\&. For example, to set the size to 8 GB, you can specify either \f38g\fR, \f38192m\fR, \f38388608k\fR, or \f38589934592\fR as the argument\&. If you are expected to specify the percentage, use a number from 0 to 1 (for example, specify \f30\&.25\fR for 25%)\&.
+.SS STANDARD\ OPTIONS    
+These are the most commonly used options that are supported by all implementations of the JVM\&.
+.TP
+-agentlib:\fIlibname\fR[=\fIoptions\fR]
+.br
+Loads the specified native agent library\&. After the library name, a comma-separated list of options specific to the library can be used\&.
+
+If the option \f3-agentlib:foo\fR is specified, then the JVM attempts to load the library named \f3libfoo\&.so\fR in the location specified by the \f3LD_LIBRARY_PATH\fR system variable (on OS X this variable is \f3DYLD_LIBRARY_PATH\fR)\&.
+
+The following example shows how to load the heap profiling tool (HPROF) library and get sample CPU information every 20 ms, with a stack depth of 3:
+.sp     
+.nf     
+\f3\-agentlib:hprof=cpu=samples,interval=20,depth=3\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+The following example shows how to load the Java Debug Wire Protocol (JDWP) library and listen for the socket connection on port 8000, suspending the JVM before the main class loads:
+.sp     
+.nf     
+\f3\-agentlib:jdwp=transport=dt_socket,server=y,address=8000\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+For more information about the native agent libraries, refer to the following:
+.RS     
+.TP 0.2i    
+\(bu
+The \f3java\&.lang\&.instrument\fR package description at http://docs\&.oracle\&.com/javase/8/docs/api/java/lang/instrument/package-summary\&.html
+.TP 0.2i    
+\(bu
+Agent Command Line Options in the JVM Tools Interface guide at http://docs\&.oracle\&.com/javase/8/docs/platform/jvmti/jvmti\&.html#starting
+.RE     
+
+.TP
+-agentpath:\fIpathname\fR[=\fIoptions\fR]
+.br
+Loads the native agent library specified by the absolute path name\&. This option is equivalent to \f3-agentlib\fR but uses the full path and file name of the library\&.
+.TP
+-client
+.br
+Selects the Java HotSpot Client VM\&. The 64-bit version of the Java SE Development Kit (JDK) currently ignores this option and instead uses the Server JVM\&.
+
+For default JVM selection, see Server-Class Machine Detection at http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/vm/server-class\&.html
+.TP
+-D\fIproperty\fR=\fIvalue\fR
+.br
+Sets a system property value\&. The \fIproperty\fR variable is a string with no spaces that represents the name of the property\&. The \fIvalue\fR variable is a string that represents the value of the property\&. If \fIvalue\fR is a string with spaces, then enclose it in quotation marks (for example \f3-Dfoo="foo bar"\fR)\&.
+.TP
+-d32
+.br
+Runs the application in a 32-bit environment\&. If a 32-bit environment is not installed or is not supported, then an error will be reported\&. By default, the application is run in a 32-bit environment unless a 64-bit system is used\&.
+.TP
+-d64
+.br
+Runs the application in a 64-bit environment\&. If a 64-bit environment is not installed or is not supported, then an error will be reported\&. By default, the application is run in a 32-bit environment unless a 64-bit system is used\&.
+
+Currently only the Java HotSpot Server VM supports 64-bit operation, and the \f3-server\fR option is implicit with the use of \f3-d64\fR\&. The \f3-client\fR option is ignored with the use of \f3-d64\fR\&. This is subject to change in a future release\&.
+.TP
 .nf
-\fB\-Xss1m\fR
-\fB\-Xss1024k\fR
-\fB\-Xss1048576\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-This option is equivalent to
-\fB\-XX:ThreadStackSize\fR\&.
-.RE
-.PP
-\-Xusealtsigs
-.RS 4
-Use alternative signals instead of
-\fBSIGUSR1\fR
-and
-\fBSIGUSR2\fR
-for JVM internal signals\&. This option is equivalent to
-\fB\-XX:+UseAltSigs\fR\&.
-.RE
-.PP
-\-Xverify:\fImode\fR
-.RS 4
-Sets the mode of the bytecode verifier\&. Bytecode verification helps to troubleshoot some problems, but it also adds overhead to the running application\&. Possible
-\fImode\fR
-arguments for this option include the following:
-.PP
-none
-.RS 4
-Do not verify the bytecode\&. This reduces startup time and also reduces the protection provided by Java\&.
-.RE
-.PP
-remote
-.RS 4
-Verify only those classes that are loaded remotely over the network\&. This is the default behavior if you do not specify the
-\fB\-Xverify\fR
-option\&.
-.RE
-.PP
-all
-.RS 4
-Verify all classes\&.
-.RE
-.RE
-.SS "Advanced Runtime Options"
-.PP
-These options control the runtime behavior of the Java HotSpot VM\&.
-.PP
-\-XX:+DisableAttachMechanism
-.RS 4
-Enables the option that disables the mechanism that lets tools attach to the JVM\&. By default, this option is disabled, meaning that the attach mechanism is enabled and you can use tools such as
-\fBjcmd\fR,
-\fBjstack\fR,
-\fBjmap\fR, and
-\fBjinfo\fR\&.
-.RE
-.PP
-\-XX:ErrorFile=\fIfilename\fR
-.RS 4
-Specifies the path and file name to which error data is written when an irrecoverable error occurs\&. By default, this file is created in the current working directory and named
-\fBhs_err_pid\fR\fIpid\fR\fB\&.log\fR
-where
-\fIpid\fR
-is the identifier of the process that caused the error\&. The following example shows how to set the default log file (note that the identifier of the process is specified as
-\fB%p\fR):
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:ErrorFile=\&./hs_err_pid%p\&.log\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-The following example shows how to set the error log to
-\fB/var/log/java/java_error\&.log\fR:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:ErrorFile=/var/log/java/java_error\&.log\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-If the file cannot be created in the specified directory (due to insufficient space, permission problem, or another issue), then the file is created in the temporary directory for the operating system\&. The temporary directory is
-\fB/tmp\fR\&.
-.RE
-.PP
-\-XX:+FailOverToOldVerifier
-.RS 4
-Enables automatic failover to the old verifier when the new type checker fails\&. By default, this option is disabled and it is ignored (that is, treated as disabled) for classes with a recent bytecode version\&. You can enable it for classes with older versions of the bytecode\&.
-.RE
-.PP
-\-XX:LargePageSizeInBytes=\fIsize\fR
-.RS 4
-Sets the maximum size (in bytes) for large pages used for Java heap\&. The
-\fIsize\fR
-argument must be a power of 2 (2, 4, 8, 16, \&.\&.\&.)\&. Append the letter
-\fBk\fR
-or
-\fBK\fR
-to indicate kilobytes,
-\fBm\fR
-or
-\fBM\fR
-to indicate megabytes,
-\fBg\fR
-or
-\fBG\fR
-to indicate gigabytes\&. By default, the size is set to 0, meaning that the JVM chooses the size for large pages automatically\&.
-.sp
-The following example illustrates how to set the large page size to 4 megabytes (MB):
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:LargePageSizeInBytes=4m\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
-\-XX:MaxDirectMemorySize=\fIsize\fR
-.RS 4
-Sets the maximum total size (in bytes) of the New I/O (the
-\fBjava\&.nio\fR
-package) direct\-buffer allocations\&. Append the letter
-\fBk\fR
-or
-\fBK\fR
-to indicate kilobytes,
-\fBm\fR
-or
-\fBM\fR
-to indicate megabytes,
-\fBg\fR
-or
-\fBG\fR
-to indicate gigabytes\&. By default, the size is set to 0, meaning that the JVM chooses the size for NIO direct\-buffer allocations automatically\&.
-.sp
-The following examples illustrate how to set the NIO size to 1024 KB in different units:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:MaxDirectMemorySize=1m\fR
-\fB\-XX:MaxDirectMemorySize=1024k\fR
-\fB\-XX:MaxDirectMemorySize=1048576\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
-\-XX:NativeMemoryTracking=\fImode\fR
-.RS 4
-Specifies the mode for tracking JVM native memory usage\&. Possible
-\fImode\fR
-arguments for this option include the following:
-.PP
-off
-.RS 4
-Do not track JVM native memory usage\&. This is the default behavior if you do not specify the
-\fB\-XX:NativeMemoryTracking\fR
-option\&.
-.RE
-.PP
-summary
-.RS 4
-Only track memory usage by JVM subsystems, such as Java heap, class, code, and thread\&.
-.RE
-.PP
-detail
-.RS 4
-In addition to tracking memory usage by JVM subsystems, track memory usage by individual
-\fBCallSite\fR, individual virtual memory region and its committed regions\&.
-.RE
-.RE
-.PP
-\-XX:OnError=\fIstring\fR
-.RS 4
-Sets a custom command or a series of semicolon\-separated commands to run when an irrecoverable error occurs\&. If the string contains spaces, then it must be enclosed in quotation marks\&.
-.sp
-The following example shows how the
-\fB\-XX:OnError\fR
-option can be used to run the
-\fBgcore\fR
-command to create the core image, and the debugger is started to attach to the process in case of an irrecoverable error (the
-\fB%p\fR
-designates the current process):
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:OnError="gcore %p;dbx \- %p"\fR
- 
+-disableassertions[:[\fIpackagename\fR]\&.\&.\&.|:\fIclassname\fR], -da[:[\fIpackagename\fR]\&.\&.\&.|:\fIclassname\fR]
+.br
 .fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
-\-XX:OnOutOfMemoryError=\fIstring\fR
-.RS 4
-Sets a custom command or a series of semicolon\-separated commands to run when an
-\fBOutOfMemoryError\fR
-exception is first thrown\&. If the string contains spaces, then it must be enclosed in quotation marks\&. For an example of a command string, see the description of the
-\fB\-XX:OnError\fR
-option\&.
-.RE
-.PP
-\-XX:+PrintCommandLineFlags
-.RS 4
-Enables printing of ergonomically selected JVM flags that appeared on the command line\&. It can be useful to know the ergonomic values set by the JVM, such as the heap space size and the selected garbage collector\&. By default, this option is disabled and flags are not printed\&.
-.RE
-.PP
-\-XX:+PrintNMTStatistics
-.RS 4
-Enables printing of collected native memory tracking data at JVM exit when native memory tracking is enabled (see
-\fB\-XX:NativeMemoryTracking\fR)\&. By default, this option is disabled and native memory tracking data is not printed\&.
-.RE
-.PP
-\-XX:+RelaxAccessControlCheck
-.RS 4
-Decreases the amount of access control checks in the verifier\&. By default, this option is disabled, and it is ignored (that is, treated as disabled) for classes with a recent bytecode version\&. You can enable it for classes with older versions of the bytecode\&.
-.RE
-.PP
-\-XX:+ShowMessageBoxOnError
-.RS 4
-Enables displaying of a dialog box when the JVM experiences an irrecoverable error\&. This prevents the JVM from exiting and keeps the process active so that you can attach a debugger to it to investigate the cause of the error\&. By default, this option is disabled\&.
-.RE
-.PP
-\-XX:ThreadStackSize=\fIsize\fR
-.RS 4
-Sets the thread stack size (in bytes)\&. Append the letter
-\fBk\fR
-or
-\fBK\fR
-to indicate kilobytes,
-\fBm\fR
-or
-\fBM\fR
-to indicate megabytes,
-\fBg\fR
-or
-\fBG\fR
-to indicate gigabytes\&. The default value depends on the platform:
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-Linux/ARM (32\-bit): 320 KB
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-Linux/i386 (32\-bit): 320 KB
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-Linux/x64 (64\-bit): 1024 KB
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-OS X (64\-bit): 1024 KB
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-Oracle Solaris/i386 (32\-bit): 320 KB
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-Oracle Solaris/x64 (64\-bit): 1024 KB
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-Windows: depends on virtual memory
-.RE
-.sp
-The following examples show how to set the thread stack size to 1024 KB in different units:
-.sp
-.if n \{\
-.RS 4
-.\}
+Disables assertions\&. By default, assertions are disabled in all packages and classes\&.
+
+With no arguments, \f3-disableassertions\fR (\f3-da\fR) disables assertions in all packages and classes\&. With the \fIpackagename\fR argument ending in \f3\&.\&.\&.\fR, the switch disables assertions in the specified package and any subpackages\&. If the argument is simply \f3\&.\&.\&.\fR, then the switch disables assertions in the unnamed package in the current working directory\&. With the \fIclassname\fR argument\f3\fR, the switch disables assertions in the specified class\&.
+
+The \f3-disableassertions\fR (\f3-da\fR) option applies to all class loaders and to system classes (which do not have a class loader)\&. There is one exception to this rule: if the option is provided with no arguments, then it does not apply to system classes\&. This makes it easy to disable assertions in all classes except for system classes\&. The \f3-disablesystemassertions\fR option enables you to disable assertions in all system classes\&.
+
+To explicitly enable assertions in specific packages or classes, use the \f3-enableassertions\fR (\f3-ea\fR) option\&. Both options can be used at the same time\&. For example, to run the \f3MyClass\fR application with assertions enabled in package \f3com\&.wombat\&.fruitbat\fR (and any subpackages) but disabled in class \f3com\&.wombat\&.fruitbat\&.Brickbat\fR, use the following command:
+.sp     
+.nf     
+\f3java \-ea:com\&.wombat\&.fruitbat\&.\&.\&. \-da:com\&.wombat\&.fruitbat\&.Brickbat MyClass\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP
+-disablesystemassertions, -dsa
+.br
+Disables assertions in all system classes\&.
+.TP
 .nf
-\fB\-XX:ThreadStackSize=1m\fR
-\fB\-XX:ThreadStackSize=1024k\fR
-\fB\-XX:ThreadStackSize=1048576\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-This option is equivalent to
-\fB\-Xss\fR\&.
-.RE
-.PP
-\-XX:+TraceClassLoading
-.RS 4
-Enables tracing of classes as they are loaded\&. By default, this option is disabled and classes are not traced\&.
-.RE
-.PP
-\-XX:+TraceClassLoadingPreorder
-.RS 4
-Enables tracing of all loaded classes in the order in which they are referenced\&. By default, this option is disabled and classes are not traced\&.
-.RE
-.PP
-\-XX:+TraceClassResolution
-.RS 4
-Enables tracing of constant pool resolutions\&. By default, this option is disabled and constant pool resolutions are not traced\&.
-.RE
-.PP
-\-XX:+TraceClassUnloading
-.RS 4
-Enables tracing of classes as they are unloaded\&. By default, this option is disabled and classes are not traced\&.
-.RE
-.PP
-\-XX:+TraceLoaderConstraints
-.RS 4
-Enables tracing of the loader constraints recording\&. By default, this option is disabled and loader constraints recording is not traced\&.
-.RE
-.PP
-\-XX:+UseAltSigs
-.RS 4
-Enables the use of alternative signals instead of
-\fBSIGUSR1\fR
-and
-\fBSIGUSR2\fR
-for JVM internal signals\&. By default, this option is disabled and alternative signals are not used\&. This option is equivalent to
-\fB\-Xusealtsigs\fR\&.
-.RE
-.PP
-\-XX:\-UseBiasedLocking
-.RS 4
-Disables the use of biased locking\&. Some applications with significant amounts of uncontended synchronization may attain significant speedups with this flag enabled, whereas applications with certain patterns of locking may see slowdowns\&. For more information about the biased locking technique, see the example in Java Tuning White Paper at http://www\&.oracle\&.com/technetwork/java/tuning\-139912\&.html#section4\&.2\&.5
-.sp
-By default, this option is enabled\&.
-.RE
-.PP
-\-XX:\-UseCompressedOops
-.RS 4
-Disables the use of compressed pointers\&. By default, this option is enabled, and compressed pointers are used when Java heap sizes are less than 32 GB\&. When this option is enabled, object references are represented as 32\-bit offsets instead of 64\-bit pointers, which typically increases performance when running the application with Java heap sizes less than 32 GB\&. This option works only for 64\-bit JVMs\&.
-.RE
-.PP
-\-XX:\-UseLargePages
-.RS 4
-Disables the use of large page memory\&. This option is enabled by default\&.
-.sp
-For more information, see Java Support for Large Memory Pages at http://www\&.oracle\&.com/technetwork/java/javase/tech/largememory\-jsp\-137182\&.html
-.RE
-.PP
-\-XX:+UseMembar
-.RS 4
-Enables issuing of membars on thread state transitions\&. This option is disabled by default on all platforms except ARM servers, where it is enabled\&. (It is recommended that you do not disable this option on ARM servers\&.)
-.RE
-.PP
-\-XX:+UsePerfData
-.RS 4
-Enables the
-\fBperfdata\fR
-feature\&. This option is enabled by default to allow JVM monitoring and performance testing\&. Disabling it suppresses the creation of the
-\fBhsperfdata_userid\fR
-directories\&. To disable the
-\fBperfdata\fR
-feature, specify
-\fB\-XX:\-UsePerfData\fR\&.
-.RE
-.PP
-\-XX:+AllowUserSignalHandlers
-.RS 4
-Enables installation of signal handlers by the application\&. By default, this option is disabled and the application is not allowed to install signal handlers\&.
-.RE
-.SS "Advanced JIT Compiler Options"
-.PP
-These options control the dynamic just\-in\-time (JIT) compilation performed by the Java HotSpot VM\&.
-.PP
-\-XX:+AggressiveOpts
-.RS 4
-Enables the use of aggressive performance optimization features, which are expected to become default in upcoming releases\&. By default, this option is disabled and experimental performance features are not used\&.
-.RE
-.PP
-\-XX:AllocateInstancePrefetchLines=\fIlines\fR
-.RS 4
-Sets the number of lines to prefetch ahead of the instance allocation pointer\&. By default, the number of lines to prefetch is set to 1:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:AllocateInstancePrefetchLines=1\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-Only the Java HotSpot Server VM supports this option\&.
-.RE
-.PP
-\-XX:AllocatePrefetchDistance=\fIsize\fR
-.RS 4
-Sets the size (in bytes) of the prefetch distance for object allocation\&. Memory about to be written with the value of new objects is prefetched up to this distance starting from the address of the last allocated object\&. Each Java thread has its own allocation point\&.
-.sp
-Negative values denote that prefetch distance is chosen based on the platform\&. Positive values are bytes to prefetch\&. Append the letter
-\fBk\fR
-or
-\fBK\fR
-to indicate kilobytes,
-\fBm\fR
-or
-\fBM\fR
-to indicate megabytes,
-\fBg\fR
-or
-\fBG\fR
-to indicate gigabytes\&. The default value is set to \-1\&.
-.sp
-The following example shows how to set the prefetch distance to 1024 bytes:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:AllocatePrefetchDistance=1024\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-Only the Java HotSpot Server VM supports this option\&.
-.RE
-.PP
-\-XX:AllocatePrefetchInstr=\fIinstruction\fR
-.RS 4
-Sets the prefetch instruction to prefetch ahead of the allocation pointer\&. Only the Java HotSpot Server VM supports this option\&. Possible values are from 0 to 3\&. The actual instructions behind the values depend on the platform\&. By default, the prefetch instruction is set to 0:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:AllocatePrefetchInstr=0\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-Only the Java HotSpot Server VM supports this option\&.
-.RE
-.PP
-\-XX:AllocatePrefetchLines=\fIlines\fR
-.RS 4
-Sets the number of cache lines to load after the last object allocation by using the prefetch instructions generated in compiled code\&. The default value is 1 if the last allocated object was an instance, and 3 if it was an array\&.
-.sp
-The following example shows how to set the number of loaded cache lines to 5:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:AllocatePrefetchLines=5\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-Only the Java HotSpot Server VM supports this option\&.
-.RE
-.PP
-\-XX:AllocatePrefetchStepSize=\fIsize\fR
-.RS 4
-Sets the step size (in bytes) for sequential prefetch instructions\&. Append the letter
-\fBk\fR
-or
-\fBK\fR
-to indicate kilobytes,
-\fBm\fR
-or
-\fBM\fR
-to indicate megabytes,
-\fBg\fR
-or
-\fBG\fR
-to indicate gigabytes\&. By default, the step size is set to 16 bytes:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:AllocatePrefetchStepSize=16\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-Only the Java HotSpot Server VM supports this option\&.
-.RE
-.PP
-\-XX:AllocatePrefetchStyle=\fIstyle\fR
-.RS 4
-Sets the generated code style for prefetch instructions\&. The
-\fIstyle\fR
-argument is an integer from 0 to 3:
-.PP
-0
-.RS 4
-Do not generate prefetch instructions\&.
-.RE
-.PP
-1
-.RS 4
-Execute prefetch instructions after each allocation\&. This is the default parameter\&.
-.RE
-.PP
-2
-.RS 4
-Use the thread\-local allocation block (TLAB) watermark pointer to determine when prefetch instructions are executed\&.
-.RE
-.PP
-3
-.RS 4
-Use BIS instruction on SPARC for allocation prefetch\&.
-.RE
-.sp
-Only the Java HotSpot Server VM supports this option\&.
-.RE
-.PP
-\-XX:+BackgroundCompilation
-.RS 4
-Enables background compilation\&. This option is enabled by default\&. To disable background compilation, specify
-\fB\-XX:\-BackgroundCompilation\fR
-(this is equivalent to specifying
-\fB\-Xbatch\fR)\&.
-.RE
-.PP
-\-XX:CICompilerCount=\fIthreads\fR
-.RS 4
-Sets the number of compiler threads to use for compilation\&. By default, the number of threads is set to 2 for the server JVM, to 1 for the client JVM, and it scales to the number of cores if tiered compilation is used\&. The following example shows how to set the number of threads to 2:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:CICompilerCount=2\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
-\-XX:CodeCacheMinimumFreeSpace=\fIsize\fR
-.RS 4
-Sets the minimum free space (in bytes) required for compilation\&. Append the letter
-\fBk\fR
-or
-\fBK\fR
-to indicate kilobytes,
-\fBm\fR
-or
-\fBM\fR
-to indicate megabytes,
-\fBg\fR
-or
-\fBG\fR
-to indicate gigabytes\&. When less than the minimum free space remains, compiling stops\&. By default, this option is set to 500 KB\&. The following example shows how to set the minimum free space to 1024 MB:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:CodeCacheMinimumFreeSpace=1024m\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
-\-XX:CompileCommand=\fIcommand\fR,\fImethod\fR[,\fIoption\fR]
-.RS 4
-Specifies a command to perform on a method\&. For example, to exclude the
-\fBindexOf()\fR
-method of the
-\fBString\fR
-class from being compiled, use the following:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:CompileCommand=exclude,java/lang/String\&.indexOf\fR
- 
+-enableassertions[:[\fIpackagename\fR]\&.\&.\&.|:\fIclassname\fR], -ea[:[\fIpackagename\fR]\&.\&.\&.|:\fIclassname\fR]
+.br
 .fi
-.if n \{\
-.RE
-.\}
-Note that the full class name is specified, including all packages and subpackages separated by a slash (\fB/\fR)\&. For easier cut and paste operations, it is also possible to use the method name format produced by the
-\fB\-XX:+PrintCompilation\fR
-and
-\fB\-XX:+LogCompilation\fR
-options:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:CompileCommand=exclude,java\&.lang\&.String::indexOf\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-If the method is specified without the signature, the command will be applied to all methods with the specified name\&. However, you can also specify the signature of the method in the class file format\&. In this case, you should enclose the arguments in quotation marks, because otherwise the shell treats the semicolon as command end\&. For example, if you want to exclude only the
-\fBindexOf(String)\fR
-method of the
-\fBString\fR
-class from being compiled, use the following:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:CompileCommand="exclude,java/lang/String\&.indexOf,(Ljava/lang/String;)I"\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-You can also use the asterisk (*) as a wildcard for class and method names\&. For example, to exclude all
-\fBindexOf()\fR
-methods in all classes from being compiled, use the following:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:CompileCommand=exclude,*\&.indexOf\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-The commas and periods are aliases for spaces, making it easier to pass compiler commands through a shell\&. You can pass arguments to
-\fB\-XX:CompileCommand\fR
-using spaces as separators by enclosing the argument in quotation marks:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:CompileCommand="exclude java/lang/String indexOf"\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-Note that after parsing the commands passed on the command line using the
-\fB\-XX:CompileCommand\fR
-options, the JIT compiler then reads commands from the
-\fB\&.hotspot_compiler\fR
-file\&. You can add commands to this file or specify a different file using the
-\fB\-XX:CompileCommandFile\fR
-option\&.
-.sp
-To add several commands, either specify the
-\fB\-XX:CompileCommand\fR
-option multiple times, or separate each argument with the newline separator (\fB\en\fR)\&. The following commands are available:
-.PP
+Enables assertions\&. By default, assertions are disabled in all packages and classes\&.
+
+With no arguments, \f3-enableassertions\fR (\f3-ea\fR) enables assertions in all packages and classes\&. With the \fIpackagename\fR argument ending in \f3\&.\&.\&.\fR, the switch enables assertions in the specified package and any subpackages\&. If the argument is simply \f3\&.\&.\&.\fR, then the switch enables assertions in the unnamed package in the current working directory\&. With the \fIclassname\fR argument\f3\fR, the switch enables assertions in the specified class\&.
+
+The \f3-enableassertions\fR (\f3-ea\fR) option applies to all class loaders and to system classes (which do not have a class loader)\&. There is one exception to this rule: if the option is provided with no arguments, then it does not apply to system classes\&. This makes it easy to enable assertions in all classes except for system classes\&. The \f3-enablesystemassertions\fR option provides a separate switch to enable assertions in all system classes\&.
+
+To explicitly disable assertions in specific packages or classes, use the \f3-disableassertions\fR (\f3-da\fR) option\&. If a single command contains multiple instances of these switches, then they are processed in order before loading any classes\&. For example, to run the \f3MyClass\fR application with assertions enabled only in package \f3com\&.wombat\&.fruitbat\fR (and any subpackages) but disabled in class \f3com\&.wombat\&.fruitbat\&.Brickbat\fR, use the following command:
+.sp     
+.nf     
+\f3java \-ea:com\&.wombat\&.fruitbat\&.\&.\&. \-da:com\&.wombat\&.fruitbat\&.Brickbat MyClass\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP
+-enablesystemassertions, -esa
+.br
+Enables assertions in all system classes\&.
+.TP
+-help, -?
+.br
+Displays usage information for the \f3java\fR command without actually running the JVM\&.
+.TP
+-jar \fIfilename\fR
+.br
+Executes a program encapsulated in a JAR file\&. The \fIfilename\fR argument is the name of a JAR file with a manifest that contains a line in the form \f3Main-Class:\fR\fIclassname\fR that defines the class with the \f3public static void main(String[] args)\fR method that serves as your application\&'s starting point\&.
+
+When you use the \f3-jar\fR option, the specified JAR file is the source of all user classes, and other class path settings are ignored\&.
+
+For more information about JAR files, see the following resources:
+.RS     
+.TP 0.2i    
+\(bu
+jar(1)
+.TP 0.2i    
+\(bu
+The Java Archive (JAR) Files guide at http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/jar/index\&.html
+.TP 0.2i    
+\(bu
+Lesson: Packaging Programs in JAR Files at http://docs\&.oracle\&.com/javase/tutorial/deployment/jar/index\&.html
+.RE     
+
+.TP
+-javaagent:\fIjarpath\fR[=\fIoptions\fR]
+.br
+Loads the specified Java programming language agent\&. For more information about instrumenting Java applications, see the \f3java\&.lang\&.instrument\fR package description in the Java API documentation at http://docs\&.oracle\&.com/javase/8/docs/api/java/lang/instrument/package-summary\&.html
+.TP
+-jre-restrict-search
+.br
+Includes user-private JREs in the version search\&.
+.TP
+-no-jre-restrict-search
+.br
+Excludes user-private JREs from the version search\&.
+.TP
+-server
+.br
+Selects the Java HotSpot Server VM\&. The 64-bit version of the JDK supports only the Server VM, so in that case the option is implicit\&.
+
+For default JVM selection, see Server-Class Machine Detection at http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/vm/server-class\&.html
+.TP
+-showversion
+.br
+Displays version information and continues execution of the application\&. This option is equivalent to the \f3-version\fR option except that the latter instructs the JVM to exit after displaying version information\&.
+.TP
+-splash:\fIimgname\fR
+.br
+Shows the splash screen with the image specified by \fIimgname\fR\&. For example, to show the \f3splash\&.gif\fR file from the \f3images\fR directory when starting your application, use the following option:
+.sp     
+.nf     
+\f3\-splash:images/splash\&.gif\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP
+-verbose:class
+.br
+Displays information about each loaded class\&.
+.TP
+-verbose:gc
+.br
+Displays information about each garbage collection (GC) event\&.
+.TP
+-verbose:jni
+.br
+Displays information about the use of native methods and other Java Native Interface (JNI) activity\&.
+.TP
+-version
+.br
+Displays version information and then exits\&. This option is equivalent to the \f3-showversion\fR option except that the latter does not instruct the JVM to exit after displaying version information\&.
+.TP
+-version:\fIrelease\fR
+.br
+Specifies the release version to be used for running the application\&. If the version of the \f3java\fR command called does not meet this specification and an appropriate implementation is found on the system, then the appropriate implementation will be used\&.
+
+The \fIrelease\fR argument specifies either the exact version string, or a list of version strings and ranges separated by spaces\&. A \fIversion string\fR is the developer designation of the version number in the following form: \f31\&.\fR\fIx\fR\f3\&.0_\fR\fIu\fR (where \fIx\fR is the major version number, and \fIu\fR is the update version number)\&. A \fIversion range\fR is made up of a version string followed by a plus sign (\f3+\fR) to designate this version or later, or a part of a version string followed by an asterisk (\f3*\fR) to designate any version string with a matching prefix\&. Version strings and ranges can be combined using a space for a logical \fIOR\fR combination, or an ampersand (\f3&\fR) for a logical \fIAND\fR combination of two version strings/ranges\&. For example, if running the class or JAR file requires either JRE 6u13 (1\&.6\&.0_13), or any JRE 6 starting from 6u10 (1\&.6\&.0_10), specify the following:
+.sp     
+.nf     
+\f3\-version:"1\&.6\&.0_13 1\&.6* & 1\&.6\&.0_10+"\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+Quotation marks are necessary only if there are spaces in the \fIrelease\fR parameter\&.
+
+For JAR files, the preference is to specify version requirements in the JAR file manifest rather than on the command line\&.
+.SS NON-STANDARD\ OPTIONS    
+These options are general purpose options that are specific to the Java HotSpot Virtual Machine\&.
+.TP
+-X
+.br
+Displays help for all available \f3-X\fR options\&.
+.TP
+-Xbatch
+.br
+Disables background compilation\&. By default, the JVM compiles the method as a background task, running the method in interpreter mode until the background compilation is finished\&. The \f3-Xbatch\fR flag disables background compilation so that compilation of all methods proceeds as a foreground task until completed\&.
+
+This option is equivalent to \f3-XX:-BackgroundCompilation\fR\&.
+.TP
+-Xbootclasspath:\fIpath\fR
+.br
+Specifies a list of directories, JAR files, and ZIP archives separated by colons (:) to search for boot class files\&. These are used in place of the boot class files included in the JDK\&.
+
+\fI\fRDo not deploy applications that use this option to override a class in \f3rt\&.jar\fR, because this violates the JRE binary code license\&.
+.TP
+-Xbootclasspath/a:\fIpath\fR
+.br
+Specifies a list of directories, JAR files, and ZIP archives separated by colons (:) to append to the end of the default bootstrap class path\&.
+
+Do not deploy applications that use this option to override a class in \f3rt\&.jar\fR, because this violates the JRE binary code license\&.
+.TP
+-Xbootclasspath/p:\fIpath\fR
+.br
+Specifies a list of directories, JAR files, and ZIP archives separated by colons (:) to prepend to the front of the default bootstrap class path\&.
+
+Do not deploy applications that use this option to override a class in \f3rt\&.jar\fR, because this violates the JRE binary code license\&.
+.TP
+-Xcheck:jni
+.br
+Performs additional checks for Java Native Interface (JNI) functions\&. Specifically, it validates the parameters passed to the JNI function and the runtime environment data before processing the JNI request\&. Any invalid data encountered indicates a problem in the native code, and the JVM will terminate with an irrecoverable error in such cases\&. Expect a performance degradation when this option is used\&.
+.TP
+-Xcomp
+.br
+Forces compilation of methods on first invocation\&. By default, the Client VM (\f3-client\fR) performs 1,000 interpreted method invocations and the Server VM (\f3-server\fR) performs 10,000 interpreted method invocations to gather information for efficient compilation\&. Specifying the \f3-Xcomp\fR option disables interpreted method invocations to increase compilation performance at the expense of efficiency\&.
+
+You can also change the number of interpreted method invocations before compilation using the \f3-XX:CompileThreshold\fR option\&.
+.TP
+-Xdebug
+.br
+Does nothing\&. Provided for backward compatibility\&.
+.TP
+-Xdiag
+.br
+Shows additional diagnostic messages\&.
+.TP
+-Xfuture
+.br
+Enables strict class-file format checks that enforce close conformance to the class-file format specification\&. Developers are encouraged to use this flag when developing new code because the stricter checks will become the default in future releases\&.
+.TP
+-Xint
+.br
+Runs the application in interpreted-only mode\&. Compilation to native code is disabled, and all bytecode is executed by the interpreter\&. The performance benefits offered by the just in time (JIT) compiler are not present in this mode\&.
+.TP
+-Xinternalversion
+.br
+Displays more detailed JVM version information than the \f3-version\fR option, and then exits\&.
+.TP
+-Xloggc:\fIfilename\fR
+.br
+Sets the file to which verbose GC events information should be redirected for logging\&. The information written to this file is similar to the output of \f3-verbose:gc\fR with the time elapsed since the first GC event preceding each logged event\&. The \f3-Xloggc\fR option overrides \f3-verbose:gc\fR if both are given with the same \f3java\fR command\&.
+
+Example:
+.sp     
+.nf     
+\f3\-Xloggc:garbage\-collection\&.log\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP
+-Xmaxjitcodesize=\fIsize\fR
+.br
+Specifies the maximum code cache size (in bytes) for JIT-compiled code\&. Append the letter \f3k\fR or \f3K\fR to indicate kilobytes, \f3m\fR or \f3M\fR to indicate megabytes, \f3g\fR or \f3G\fR to indicate gigabytes\&. By default, the value is set to 48 MB:
+.sp     
+.nf     
+\f3\-Xmaxjitcodesize=48m\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+This option is equivalent to \f3-XX:ReservedCodeCacheSize\fR\&.
+.TP
+-Xmixed
+.br
+Executes all bytecode by the interpreter except for hot methods, which are compiled to native code\&.
+.TP
+-Xmn\fIsize\fR
+.br
+Sets the initial and maximum size (in bytes) of the heap for the young generation (nursery)\&. Append the letter \f3k\fR or \f3K\fR to indicate kilobytes, \f3m\fR or \f3M\fR to indicate megabytes, \f3g\fR or \f3G\fR to indicate gigabytes\&.
+
+The young generation region of the heap is used for new objects\&. GC is performed in this region more often than in other regions\&. If the size for the young generation is too small, then a lot of minor garbage collections will be performed\&. If the size is too large, then only full garbage collections will be performed, which can take a long time to complete\&. Oracle recommends that you keep the size for the young generation between a half and a quarter of the overall heap size\&.
+
+The following examples show how to set the initial and maximum size of young generation to 256 MB using various units:
+.sp     
+.nf     
+\f3\-Xmn256m\fP
+.fi     
+.nf     
+\f3\-Xmn262144k\fP
+.fi     
+.nf     
+\f3\-Xmn268435456\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+Instead of the \f3-Xmn\fR option to set both the initial and maximum size of the heap for the young generation, you can use \f3-XX:NewSize\fR to set the initial size and \f3-XX:MaxNewSize\fR to set the maximum size\&.
+.TP
+-Xms\fIsize\fR
+.br
+Sets the initial size (in bytes) of the heap\&. This value must be a multiple of 1024 and greater than 1 MB\&. Append the letter \f3k\fR or \f3K\fR to indicate kilobytes, \f3m\fR or \f3M\fR to indicate megabytes, \f3g\fR or \f3G\fR to indicate gigabytes\&.
+
+The following examples show how to set the size of allocated memory to 6 MB using various units:
+.sp     
+.nf     
+\f3\-Xms6291456\fP
+.fi     
+.nf     
+\f3\-Xms6144k\fP
+.fi     
+.nf     
+\f3\-Xms6m\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+If you do not set this option, then the initial size will be set as the sum of the sizes allocated for the old generation and the young generation\&. The initial size of the heap for the young generation can be set using the \f3-Xmn\fR option or the \f3-XX:NewSize\fR option\&.
+.TP
+-Xmx\fIsize\fR
+.br
+Specifies the maximum size (in bytes) of the memory allocation pool in bytes\&. This value must be a multiple of 1024 and greater than 2 MB\&. Append the letter \f3k\fR or \f3K\fR to indicate kilobytes, \f3m\fR or \f3M\fR to indicate megabytes, \f3g\fR or \f3G\fR to indicate gigabytes\&. The default value is chosen at runtime based on system configuration\&. For server deployments, \f3-Xms\fR and \f3-Xmx\fR are often set to the same value\&. See the section "Ergonomics" in \fIJava SE HotSpot Virtual Machine Garbage Collection Tuning Guide\fR at http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/vm/gctuning/index\&.html\&.
+
+The following examples show how to set the maximum allowed size of allocated memory to 80 MB using various units:
+.sp     
+.nf     
+\f3\-Xmx83886080\fP
+.fi     
+.nf     
+\f3\-Xmx81920k\fP
+.fi     
+.nf     
+\f3\-Xmx80m\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+The \f3-Xmx\fR option is equivalent to \f3-XX:MaxHeapSize\fR\&.
+.TP
+-Xnoclassgc
+.br
+Disables garbage collection (GC) of classes\&. This can save some GC time, which shortens interruptions during the application run\&.
+
+When you specify \f3-Xnoclassgc\fR at startup, the class objects in the application will be left untouched during GC and will always be considered live\&. This can result in more memory being permanently occupied which, if not used carefully, will throw an out of memory exception\&.
+.TP
+-Xprof
+.br
+Profiles the running program and sends profiling data to standard output\&. This option is provided as a utility that is useful in program development and is not intended to be used in production systems\&.
+.TP
+-Xrs
+.br
+Reduces the use of operating system signals by the JVM\&.
+
+Shutdown hooks enable orderly shutdown of a Java application by running user cleanup code (such as closing database connections) at shutdown, even if the JVM terminates abruptly\&.
+
+The JVM catches signals to implement shutdown hooks for unexpected termination\&. The JVM uses \f3SIGHUP\fR, \f3SIGINT\fR, and \f3SIGTERM\fR to initiate the running of shutdown hooks\&.
+
+The JVM uses a similar mechanism to implement the feature of dumping thread stacks for debugging purposes\&. The JVM uses \f3SIGQUIT\fR to perform thread dumps\&.
+
+Applications embedding the JVM frequently need to trap signals such as \f3SIGINT\fR or \f3SIGTERM\fR, which can lead to interference with the JVM signal handlers\&. The \f3-Xrs\fR option is available to address this issue\&. When \f3-Xrs\fR is used, the signal masks for \f3SIGINT\fR, \f3SIGTERM\fR, \f3SIGHUP\fR, and \f3SIGQUIT\fR are not changed by the JVM, and signal handlers for these signals are not installed\&.
+
+There are two consequences of specifying \f3-Xrs\fR:
+.RS     
+.TP 0.2i    
+\(bu
+\f3SIGQUIT\fR thread dumps are not available\&.
+.TP 0.2i    
+\(bu
+User code is responsible for causing shutdown hooks to run, for example, by calling \f3System\&.exit()\fR when the JVM is to be terminated\&.
+.RE     
+
+.TP
+-Xshare:\fImode\fR
+.br
+Sets the class data sharing mode\&. Possible \fImode\fR arguments for this option include the following:
+.RS     
+.TP     
+auto
+Use shared class data if possible\&. This is the default value for Java HotSpot 32-Bit Client VM\&.
+.TP     
+on
+Require the use of class data sharing\&. Print an error message and exit if class data sharing cannot be used\&.
+.TP     
+off
+Do not use shared class data\&. This is the default value for Java HotSpot 32-Bit Server VM, Java HotSpot 64-Bit Client VM, and Java HotSpot 64-Bit Server VM\&.
+.TP     
+dump
+Manually generate the class data sharing archive\&.
+.RE     
+
+.TP
+-XshowSettings:\fIcategory\fR
+.br
+Shows settings and continues\&. Possible \fIcategory\fR arguments for this option include the following:
+.RS     
+.TP     
+all
+Shows all categories of settings\&. This is the default value\&.
+.TP     
+locale
+Shows settings related to locale\&.
+.TP     
+properties
+Shows settings related to system properties\&.
+.TP     
+vm
+Shows the settings of the JVM\&.
+.RE     
+
+.TP
+-Xss\fIsize\fR
+.br
+Sets the thread stack size (in bytes)\&. Append the letter \f3k\fR or \f3K\fR to indicate KB, \f3m\fR or \f3M\fR to indicate MB, \f3g\fR or \f3G\fR to indicate GB\&. The default value depends on the platform:
+.RS     
+.TP 0.2i    
+\(bu
+Linux/ARM (32-bit): 320 KB
+.TP 0.2i    
+\(bu
+Linux/i386 (32-bit): 320 KB
+.TP 0.2i    
+\(bu
+Linux/x64 (64-bit): 1024 KB
+.TP 0.2i    
+\(bu
+OS X (64-bit): 1024 KB
+.TP 0.2i    
+\(bu
+Oracle Solaris/i386 (32-bit): 320 KB
+.TP 0.2i    
+\(bu
+Oracle Solaris/x64 (64-bit): 1024 KB
+.TP 0.2i    
+\(bu
+Windows: depends on virtual memory
+.RE     
+
+
+The following examples set the thread stack size to 1024 KB in different units:
+.sp     
+.nf     
+\f3\-Xss1m\fP
+.fi     
+.nf     
+\f3\-Xss1024k\fP
+.fi     
+.nf     
+\f3\-Xss1048576\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+This option is equivalent to \f3-XX:ThreadStackSize\fR\&.
+.TP
+-Xusealtsigs
+.br
+Use alternative signals instead of \f3SIGUSR1\fR and \f3SIGUSR2\fR for JVM internal signals\&. This option is equivalent to \f3-XX:+UseAltSigs\fR\&.
+.TP
+-Xverify:\fImode\fR
+.br
+Sets the mode of the bytecode verifier\&. Bytecode verification helps to troubleshoot some problems, but it also adds overhead to the running application\&. Possible \fImode\fR arguments for this option include the following:
+.RS     
+.TP     
+none
+Do not verify the bytecode\&. This reduces startup time and also reduces the protection provided by Java\&.
+.TP     
+remote
+Verify those classes that are not loaded by the bootstrap class loader\&. This is the default behavior if you do not specify the \f3-Xverify\fR option\&.
+.TP     
+all
+Verify all classes\&.
+.RE     
+
+.SS ADVANCED\ RUNTIME\ OPTIONS    
+These options control the runtime behavior of the Java HotSpot VM\&.
+.TP
+-XX:+DisableAttachMechanism
+.br
+Enables the option that disables the mechanism that lets tools attach to the JVM\&. By default, this option is disabled, meaning that the attach mechanism is enabled and you can use tools such as \f3jcmd\fR, \f3jstack\fR, \f3jmap\fR, and \f3jinfo\fR\&.
+.TP
+-XX:ErrorFile=\fIfilename\fR
+.br
+Specifies the path and file name to which error data is written when an irrecoverable error occurs\&. By default, this file is created in the current working directory and named \f3hs_err_pid\fR\fIpid\fR\f3\&.log\fR where \fIpid\fR is the identifier of the process that caused the error\&. The following example shows how to set the default log file (note that the identifier of the process is specified as \f3%p\fR):
+.sp     
+.nf     
+\f3\-XX:ErrorFile=\&./hs_err_pid%p\&.log\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+The following example shows how to set the error log to \f3/var/log/java/java_error\&.log\fR:
+.sp     
+.nf     
+\f3\-XX:ErrorFile=/var/log/java/java_error\&.log\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+If the file cannot be created in the specified directory (due to insufficient space, permission problem, or another issue), then the file is created in the temporary directory for the operating system\&. The temporary directory is \f3/tmp\fR\&.
+.TP
+-XX:+FailOverToOldVerifier
+.br
+Enables automatic failover to the old verifier when the new type checker fails\&. By default, this option is disabled and it is ignored (that is, treated as disabled) for classes with a recent bytecode version\&. You can enable it for classes with older versions of the bytecode\&.
+.TP
+-XX:LargePageSizeInBytes=\fIsize\fR
+.br
+On Solaris, sets the maximum size (in bytes) for large pages used for Java heap\&. The \fIsize\fR argument must be a power of 2 (2, 4, 8, 16, \&.\&.\&.)\&. Append the letter \f3k\fR or \f3K\fR to indicate kilobytes, \f3m\fR or \f3M\fR to indicate megabytes, \f3g\fR or \f3G\fR to indicate gigabytes\&. By default, the size is set to 0, meaning that the JVM chooses the size for large pages automatically\&.
+
+The following example illustrates how to set the large page size to 4 megabytes (MB):
+.sp     
+.nf     
+\f3\-XX:LargePageSizeInBytes=4m\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP
+-XX:MaxDirectMemorySize=\fIsize\fR
+.br
+Sets the maximum total size (in bytes) of the New I/O (the \f3java\&.nio\fR package) direct-buffer allocations\&. Append the letter \f3k\fR or \f3K\fR to indicate kilobytes, \f3m\fR or \f3M\fR to indicate megabytes, \f3g\fR or \f3G\fR to indicate gigabytes\&. By default, the size is set to 0, meaning that the JVM chooses the size for NIO direct-buffer allocations automatically\&.
+
+The following examples illustrate how to set the NIO size to 1024 KB in different units:
+.sp     
+.nf     
+\f3\-XX:MaxDirectMemorySize=1m\fP
+.fi     
+.nf     
+\f3\-XX:MaxDirectMemorySize=1024k\fP
+.fi     
+.nf     
+\f3\-XX:MaxDirectMemorySize=1048576\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP
+-XX:NativeMemoryTracking=\fImode\fR
+.br
+Specifies the mode for tracking JVM native memory usage\&. Possible \fImode\fR arguments for this option include the following:
+.RS     
+.TP     
+off
+Do not track JVM native memory usage\&. This is the default behavior if you do not specify the \f3-XX:NativeMemoryTracking\fR option\&.
+.TP     
+summary
+Only track memory usage by JVM subsystems, such as Java heap, class, code, and thread\&.
+.TP     
+detail
+In addition to tracking memory usage by JVM subsystems, track memory usage by individual \f3CallSite\fR, individual virtual memory region and its committed regions\&.
+.RE     
+
+.TP
+-XX:ObjectAlignmentInBytes=\fIalignment\fR
+.br
+Sets the memory alignment of Java objects (in bytes)\&. By default, the value is set to 8 bytes\&. The specified value should be a power of two, and must be within the range of 8 and 256 (inclusive)\&. This option makes it possible to use compressed pointers with large Java heap sizes\&.
+
+The heap size limit in bytes is calculated as:
+
+\f34GB * ObjectAlignmentInBytes\fR
+
+Note: As the alignment value increases, the unused space between objects will also increase\&. As a result, you may not realize any benefits from using compressed pointers with large Java heap sizes\&.
+.TP
+-XX:OnError=\fIstring\fR
+.br
+Sets a custom command or a series of semicolon-separated commands to run when an irrecoverable error occurs\&. If the string contains spaces, then it must be enclosed in quotation marks\&.
+
+\fI\fRThe following example shows how the \f3-XX:OnError\fR option can be used to run the \f3gcore\fR command to create the core image, and the debugger is started to attach to the process in case of an irrecoverable error (the \f3%p\fR designates the current process):
+.sp     
+.nf     
+\f3\-XX:OnError="gcore %p;dbx \- %p"\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP
+-XX:OnOutOfMemoryError=\fIstring\fR
+.br
+Sets a custom command or a series of semicolon-separated commands to run when an \f3OutOfMemoryError\fR exception is first thrown\&. If the string contains spaces, then it must be enclosed in quotation marks\&. For an example of a command string, see the description of the \f3-XX:OnError\fR option\&.
+.TP
+-XX:+PerfDataSaveToFile
+.br
+If enabled, saves jstat(1) binary data when the Java application exits\&. This binary data is saved in a file named \f3hsperfdata_\fR\fI<pid>\fR, where \fI<pid>\fR is the process identifier of the Java application you ran\&. Use \f3jstat\fR to display the performance data contained in this file as follows:
+.sp     
+.nf     
+\f3jstat \-class file:///\fI<path>\fR/hsperfdata_\fI<pid>\fR\fP
+.fi     
+.nf     
+\f3jstat \-gc file:///\fI<path>\fR/hsperfdata_\fI<pid>\fR\fP
+.fi     
+.sp     
+
+.TP
+-XX:+PrintCommandLineFlags
+.br
+Enables printing of ergonomically selected JVM flags that appeared on the command line\&. It can be useful to know the ergonomic values set by the JVM, such as the heap space size and the selected garbage collector\&. By default, this option is disabled and flags are not printed\&.
+.TP
+-XX:+PrintNMTStatistics
+.br
+Enables printing of collected native memory tracking data at JVM exit when native memory tracking is enabled (see \f3-XX:NativeMemoryTracking\fR)\&. By default, this option is disabled and native memory tracking data is not printed\&.
+.TP
+-XX:+RelaxAccessControlCheck
+.br
+Decreases the amount of access control checks in the verifier\&. By default, this option is disabled, and it is ignored (that is, treated as disabled) for classes with a recent bytecode version\&. You can enable it for classes with older versions of the bytecode\&.
+.TP
+-XX:+ShowMessageBoxOnError
+.br
+Enables displaying of a dialog box when the JVM experiences an irrecoverable error\&. This prevents the JVM from exiting and keeps the process active so that you can attach a debugger to it to investigate the cause of the error\&. By default, this option is disabled\&.
+.TP
+-XX:ThreadStackSize=\fIsize\fR
+.br
+Sets the thread stack size (in bytes)\&. Append the letter \f3k\fR or \f3K\fR to indicate kilobytes, \f3m\fR or \f3M\fR to indicate megabytes, \f3g\fR or \f3G\fR to indicate gigabytes\&. The default value depends on the platform:
+.RS     
+.TP 0.2i    
+\(bu
+Linux/ARM (32-bit): 320 KB
+.TP 0.2i    
+\(bu
+Linux/i386 (32-bit): 320 KB
+.TP 0.2i    
+\(bu
+Linux/x64 (64-bit): 1024 KB
+.TP 0.2i    
+\(bu
+OS X (64-bit): 1024 KB
+.TP 0.2i    
+\(bu
+Oracle Solaris/i386 (32-bit): 320 KB
+.TP 0.2i    
+\(bu
+Oracle Solaris/x64 (64-bit): 1024 KB
+.TP 0.2i    
+\(bu
+Windows: depends on virtual memory
+.RE     
+
+
+The following examples show how to set the thread stack size to 1024 KB in different units:
+.sp     
+.nf     
+\f3\-XX:ThreadStackSize=1m\fP
+.fi     
+.nf     
+\f3\-XX:ThreadStackSize=1024k\fP
+.fi     
+.nf     
+\f3\-XX:ThreadStackSize=1048576\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+This option is equivalent to \f3-Xss\fR\&.
+.TP
+-XX:+TraceClassLoading
+.br
+Enables tracing of classes as they are loaded\&. By default, this option is disabled and classes are not traced\&.
+.TP
+-XX:+TraceClassLoadingPreorder
+.br
+Enables tracing of all loaded classes in the order in which they are referenced\&. By default, this option is disabled and classes are not traced\&.
+.TP
+-XX:+TraceClassResolution
+.br
+Enables tracing of constant pool resolutions\&. By default, this option is disabled and constant pool resolutions are not traced\&.
+.TP
+-XX:+TraceClassUnloading
+.br
+Enables tracing of classes as they are unloaded\&. By default, this option is disabled and classes are not traced\&.
+.TP
+-XX:+TraceLoaderConstraints
+.br
+Enables tracing of the loader constraints recording\&. By default, this option is disabled and loader constraints recording is not traced\&.
+.TP
+-XX:+UseAltSigs
+.br
+Enables the use of alternative signals instead of \f3SIGUSR1\fR and \f3SIGUSR2\fR for JVM internal signals\&. By default, this option is disabled and alternative signals are not used\&. This option is equivalent to \f3-Xusealtsigs\fR\&.
+.TP
+-XX:-UseBiasedLocking
+.br
+Disables the use of biased locking\&. Some applications with significant amounts of uncontended synchronization may attain significant speedups with this flag enabled, whereas applications with certain patterns of locking may see slowdowns\&. For more information about the biased locking technique, see the example in Java Tuning White Paper at http://www\&.oracle\&.com/technetwork/java/tuning-139912\&.html#section4\&.2\&.5
+
+By default, this option is enabled\&.
+.TP
+-XX:-UseCompressedOops
+.br
+Disables the use of compressed pointers\&. By default, this option is enabled, and compressed pointers are used when Java heap sizes are less than 32 GB\&. When this option is enabled, object references are represented as 32-bit offsets instead of 64-bit pointers, which typically increases performance when running the application with Java heap sizes less than 32 GB\&. This option works only for 64-bit JVMs\&.
+
+It is also possible to use compressed pointers when Java heap sizes are greater than 32GB\&. See the \f3-XX:ObjectAlignmentInBytes\fR option\&.
+.TP
+-XX:+UseHugeTLBFS
+.br
+This option for Linux is the equivalent of specifying \f3-XX:+UseLargePages\fR\&. This option is disabled by default\&. This option pre-allocates all large pages up-front, when memory is reserved; consequently the JVM cannot dynamically grow or shrink large pages memory areas; see \f3-XX:UseTransparentHugePages\fR if you want this behavior\&.
+
+For more information, see Large Pages\&.
+.TP
+-XX:+UseLargePages
+.br
+Enables the use of large page memory\&. By default, this option is disabled and large page memory is not used\&.
+
+For more information, see Large Pages\&.
+.TP
+-XX:+UseMembar
+.br
+Enables issuing of membars on thread state transitions\&. This option is disabled by default on all platforms except ARM servers, where it is enabled\&. (It is recommended that you do not disable this option on ARM servers\&.)
+.TP
+-XX:+UsePerfData
+.br
+Enables the \f3perfdata\fR feature\&. This option is enabled by default to allow JVM monitoring and performance testing\&. Disabling it suppresses the creation of the \f3hsperfdata_userid\fR directories\&. To disable the \f3perfdata\fR feature, specify \f3-XX:-UsePerfData\fR\&.
+.TP
+-XX:+UseTransparentHugePages
+.br
+On Linux, enables the use of large pages that can dynamically grow or shrink\&. This option is disabled by default\&. You may encounter performance problems with transparent huge pages as the OS moves other pages around to create huge pages; this option is made available for experimentation\&.
+
+For more information, see Large Pages\&.
+.TP
+-XX:+AllowUserSignalHandlers
+.br
+Enables installation of signal handlers by the application\&. By default, this option is disabled and the application is not allowed to install signal handlers\&.
+.SS ADVANCED\ JIT\ COMPILER\ OPTIONS    
+These options control the dynamic just-in-time (JIT) compilation performed by the Java HotSpot VM\&.
+.TP
+-XX:+AggressiveOpts
+.br
+Enables the use of aggressive performance optimization features, which are expected to become default in upcoming releases\&. By default, this option is disabled and experimental performance features are not used\&.
+.TP
+-XX:AllocateInstancePrefetchLines=\fIlines\fR
+.br
+Sets the number of lines to prefetch ahead of the instance allocation pointer\&. By default, the number of lines to prefetch is set to 1:
+.sp     
+.nf     
+\f3\-XX:AllocateInstancePrefetchLines=1\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+Only the Java HotSpot Server VM supports this option\&.
+.TP
+-XX:AllocatePrefetchDistance=\fIsize\fR
+.br
+Sets the size (in bytes) of the prefetch distance for object allocation\&. Memory about to be written with the value of new objects is prefetched up to this distance starting from the address of the last allocated object\&. Each Java thread has its own allocation point\&.
+
+Negative values denote that prefetch distance is chosen based on the platform\&. Positive values are bytes to prefetch\&. Append the letter \f3k\fR or \f3K\fR to indicate kilobytes, \f3m\fR or \f3M\fR to indicate megabytes, \f3g\fR or \f3G\fR to indicate gigabytes\&. The default value is set to -1\&.
+
+The following example shows how to set the prefetch distance to 1024 bytes:
+.sp     
+.nf     
+\f3\-XX:AllocatePrefetchDistance=1024\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+Only the Java HotSpot Server VM supports this option\&.
+.TP
+-XX:AllocatePrefetchInstr=\fIinstruction\fR
+.br
+Sets the prefetch instruction to prefetch ahead of the allocation pointer\&. Only the Java HotSpot Server VM supports this option\&. Possible values are from 0 to 3\&. The actual instructions behind the values depend on the platform\&. By default, the prefetch instruction is set to 0:
+.sp     
+.nf     
+\f3\-XX:AllocatePrefetchInstr=0\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+Only the Java HotSpot Server VM supports this option\&.
+.TP
+-XX:AllocatePrefetchLines=\fIlines\fR
+.br
+Sets the number of cache lines to load after the last object allocation by using the prefetch instructions generated in compiled code\&. The default value is 1 if the last allocated object was an instance, and 3 if it was an array\&.
+
+The following example shows how to set the number of loaded cache lines to 5:
+.sp     
+.nf     
+\f3\-XX:AllocatePrefetchLines=5\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+Only the Java HotSpot Server VM supports this option\&.
+.TP
+-XX:AllocatePrefetchStepSize=\fIsize\fR
+.br
+Sets the step size (in bytes) for sequential prefetch instructions\&. Append the letter \f3k\fR or \f3K\fR to indicate kilobytes, \f3m\fR or \f3M\fR to indicate megabytes, \f3g\fR or \f3G\fR to indicate gigabytes\&. By default, the step size is set to 16 bytes:
+.sp     
+.nf     
+\f3\-XX:AllocatePrefetchStepSize=16\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+Only the Java HotSpot Server VM supports this option\&.
+.TP
+-XX:AllocatePrefetchStyle=\fIstyle\fR
+.br
+Sets the generated code style for prefetch instructions\&. The \fIstyle\fR argument is an integer from 0 to 3:
+.RS     
+.TP     
+0
+Do not generate prefetch instructions\&.
+.TP     
+1
+Execute prefetch instructions after each allocation\&. This is the default parameter\&.
+.TP     
+2
+Use the thread-local allocation block (TLAB) watermark pointer to determine when prefetch instructions are executed\&.
+.TP     
+3
+Use BIS instruction on SPARC for allocation prefetch\&.
+.RE     
+
+
+Only the Java HotSpot Server VM supports this option\&.
+.TP
+-XX:+BackgroundCompilation
+.br
+Enables background compilation\&. This option is enabled by default\&. To disable background compilation, specify \f3-XX:-BackgroundCompilation\fR (this is equivalent to specifying \f3-Xbatch\fR)\&.
+.TP
+-XX:CICompilerCount=\fIthreads\fR
+.br
+Sets the number of compiler threads to use for compilation\&. By default, the number of threads is set to 2 for the server JVM, to 1 for the client JVM, and it scales to the number of cores if tiered compilation is used\&. The following example shows how to set the number of threads to 2:
+.sp     
+.nf     
+\f3\-XX:CICompilerCount=2\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP
+-XX:CodeCacheMinimumFreeSpace=\fIsize\fR
+.br
+Sets the minimum free space (in bytes) required for compilation\&. Append the letter \f3k\fR or \f3K\fR to indicate kilobytes, \f3m\fR or \f3M\fR to indicate megabytes, \f3g\fR or \f3G\fR to indicate gigabytes\&. When less than the minimum free space remains, compiling stops\&. By default, this option is set to 500 KB\&. The following example shows how to set the minimum free space to 1024 MB:
+.sp     
+.nf     
+\f3\-XX:CodeCacheMinimumFreeSpace=1024m\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP
+-XX:CompileCommand=\fIcommand\fR,\fImethod\fR[,\fIoption\fR]
+.br
+Specifies a command to perform on a method\&. For example, to exclude the \f3indexOf()\fR method of the \f3String\fR class from being compiled, use the following:
+.sp     
+.nf     
+\f3\-XX:CompileCommand=exclude,java/lang/String\&.indexOf\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+Note that the full class name is specified, including all packages and subpackages separated by a slash (\f3/\fR)\&. For easier cut and paste operations, it is also possible to use the method name format produced by the \f3-XX:+PrintCompilation\fR and \f3-XX:+LogCompilation\fR options:
+.sp     
+.nf     
+\f3\-XX:CompileCommand=exclude,java\&.lang\&.String::indexOf\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+If the method is specified without the signature, the command will be applied to all methods with the specified name\&. However, you can also specify the signature of the method in the class file format\&. In this case, you should enclose the arguments in quotation marks, because otherwise the shell treats the semicolon as command end\&. For example, if you want to exclude only the \f3indexOf(String)\fR method of the \f3String\fR class from being compiled, use the following:
+.sp     
+.nf     
+\f3\-XX:CompileCommand="exclude,java/lang/String\&.indexOf,(Ljava/lang/String;)I"\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+You can also use the asterisk (*) as a wildcard for class and method names\&. For example, to exclude all \f3indexOf()\fR methods in all classes from being compiled, use the following:
+.sp     
+.nf     
+\f3\-XX:CompileCommand=exclude,*\&.indexOf\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+The commas and periods are aliases for spaces, making it easier to pass compiler commands through a shell\&. You can pass arguments to \f3-XX:CompileCommand\fR using spaces as separators by enclosing the argument in quotation marks:
+.sp     
+.nf     
+\f3\-XX:CompileCommand="exclude java/lang/String indexOf"\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+Note that after parsing the commands passed on the command line using the \f3-XX:CompileCommand\fR options, the JIT compiler then reads commands from the \f3\&.hotspot_compiler\fR file\&. You can add commands to this file or specify a different file using the \f3-XX:CompileCommandFile\fR option\&.
+
+To add several commands, either specify the \f3-XX:CompileCommand\fR option multiple times, or separate each argument with the newline separator (\f3\en\fR)\&. The following commands are available:
+.RS     
+.TP     
 break
-.RS 4
 Set a breakpoint when debugging the JVM to stop at the beginning of compilation of the specified method\&.
-.RE
-.PP
+.TP     
 compileonly
-.RS 4
-Exclude all methods from compilation except for the specified method\&. As an alternative, you can use the
-\fB\-XX:CompileOnly\fR
-option, which allows to specify several methods\&.
-.RE
-.PP
+Exclude all methods from compilation except for the specified method\&. As an alternative, you can use the \f3-XX:CompileOnly\fR option, which allows to specify several methods\&.
+.TP     
 dontinline
-.RS 4
 Prevent inlining of the specified method\&.
-.RE
-.PP
+.TP     
 exclude
-.RS 4
 Exclude the specified method from compilation\&.
-.RE
-.PP
+.TP     
 help
-.RS 4
-Print a help message for the
-\fB\-XX:CompileCommand\fR
-option\&.
-.RE
-.PP
+Print a help message for the \f3-XX:CompileCommand\fR option\&.
+.TP     
 inline
-.RS 4
 Attempt to inline the specified method\&.
-.RE
-.PP
+.TP     
 log
-.RS 4
-Exclude compilation logging (with the
-\fB\-XX:+LogCompilation\fR
-option) for all methods except for the specified method\&. By default, logging is performed for all compiled methods\&.
-.RE
-.PP
+Exclude compilation logging (with the \f3-XX:+LogCompilation\fR option) for all methods except for the specified method\&. By default, logging is performed for all compiled methods\&.
+.TP     
 option
-.RS 4
-This command can be used to pass a JIT compilation option to the specified method in place of the last argument (\fIoption\fR)\&. The compilation option is set at the end, after the method name\&. For example, to enable the
-\fBBlockLayoutByFrequency\fR
-option for the
-\fBappend()\fR
-method of the
-\fBStringBuffer\fR
-class, use the following:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:CompileCommand=option,java/lang/StringBuffer\&.append,BlockLayoutByFrequency\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
+This command can be used to pass a JIT compilation option to the specified method in place of the last argument (\fIoption\fR)\&. The compilation option is set at the end, after the method name\&. For example, to enable the \f3BlockLayoutByFrequency\fR option for the \f3append()\fR method of the \f3StringBuffer\fR class, use the following:
+.sp     
+.nf     
+\f3\-XX:CompileCommand=option,java/lang/StringBuffer\&.append,BlockLayoutByFrequency\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
 You can specify multiple compilation options, separated by commas or spaces\&.
-.RE
-.PP
+.TP     
 print
-.RS 4
 Print generated assembler code after compilation of the specified method\&.
-.RE
-.PP
+.TP     
 quiet
-.RS 4
-Do not print the compile commands\&. By default, the commands that you specify with the \-\fBXX:CompileCommand\fR
-option are printed; for example, if you exclude from compilation the
-\fBindexOf()\fR
-method of the
-\fBString\fR
-class, then the following will be printed to standard output:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBCompilerOracle: exclude java/lang/String\&.indexOf\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-You can suppress this by specifying the
-\fB\-XX:CompileCommand=quiet\fR
-option before other
-\fB\-XX:CompileCommand\fR
-options\&.
-.RE
-.RE
-.PP
-\-XX:CompileCommandFile=\fIfilename\fR
-.RS 4
-Sets the file from which JIT compiler commands are read\&. By default, the
-\fB\&.hotspot_compiler\fR
-file is used to store commands performed by the JIT compiler\&.
-.sp
-Each line in the command file represents a command, a class name, and a method name for which the command is used\&. For example, this line prints assembly code for the
-\fBtoString()\fR
-method of the
-\fBString\fR
-class:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBprint java/lang/String toString\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-For more information about specifying the commands for the JIT compiler to perform on methods, see the
-\fB\-XX:CompileCommand\fR
-option\&.
-.RE
-.PP
-\-XX:CompileOnly=\fImethods\fR
-.RS 4
-Sets the list of methods (separated by commas) to which compilation should be restricted\&. Only the specified methods will be compiled\&. Specify each method with the full class name (including the packages and subpackages)\&. For example, to compile only the
-\fBlength()\fR
-method of the
-\fBString\fR
-class and the
-\fBsize()\fR
-method of the
-\fBList\fR
-class, use the following:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:CompileOnly=java/lang/String\&.length,java/util/List\&.size\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-Note that the full class name is specified, including all packages and subpackages separated by a slash (\fB/\fR)\&. For easier cut and paste operations, it is also possible to use the method name format produced by the
-\fB\-XX:+PrintCompilation\fR
-and
-\fB\-XX:+LogCompilation\fR
-options:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:CompileOnly=java\&.lang\&.String::length,java\&.util\&.List::size\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
+Do not print the compile commands\&. By default, the commands that you specify with the -\f3XX:CompileCommand\fR option are printed; for example, if you exclude from compilation the \f3indexOf()\fR method of the \f3String\fR class, then the following will be printed to standard output:
+.sp     
+.nf     
+\f3CompilerOracle: exclude java/lang/String\&.indexOf\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+You can suppress this by specifying the \f3-XX:CompileCommand=quiet\fR option before other \f3-XX:CompileCommand\fR options\&.
+.RE     
+
+.TP
+-XX:CompileCommandFile=\fIfilename\fR
+.br
+Sets the file from which JIT compiler commands are read\&. By default, the \f3\&.hotspot_compiler\fR file is used to store commands performed by the JIT compiler\&.
+
+Each line in the command file represents a command, a class name, and a method name for which the command is used\&. For example, this line prints assembly code for the \f3toString()\fR method of the \f3String\fR class:
+.sp     
+.nf     
+\f3print java/lang/String toString\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+For more information about specifying the commands for the JIT compiler to perform on methods, see the \f3-XX:CompileCommand\fR option\&.
+.TP
+-XX:CompileOnly=\fImethods\fR
+.br
+Sets the list of methods (separated by commas) to which compilation should be restricted\&. Only the specified methods will be compiled\&. Specify each method with the full class name (including the packages and subpackages)\&. For example, to compile only the \f3length()\fR method of the \f3String\fR class and the \f3size()\fR method of the \f3List\fR class, use the following:
+.sp     
+.nf     
+\f3\-XX:CompileOnly=java/lang/String\&.length,java/util/List\&.size\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+Note that the full class name is specified, including all packages and subpackages separated by a slash (\f3/\fR)\&. For easier cut and paste operations, it is also possible to use the method name format produced by the \f3-XX:+PrintCompilation\fR and \f3-XX:+LogCompilation\fR options:
+.sp     
+.nf     
+\f3\-XX:CompileOnly=java\&.lang\&.String::length,java\&.util\&.List::size\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
 Although wildcards are not supported, you can specify only the class or package name to compile all methods in that class or package, as well as specify just the method to compile methods with this name in any class:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:CompileOnly=java/lang/String\fR
-\fB\-XX:CompileOnly=java/lang\fR
-\fB\-XX:CompileOnly=\&.length\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
-\-XX:CompileThreshold=\fIinvocations\fR
-.RS 4
-Sets the number of interpreted method invocations before compilation\&. By default, in the server JVM, the JIT compiler performs 10,000 interpreted method invocations to gather information for efficient compilation\&. For the client JVM, the default setting is 1,500 invocations\&. The following example shows how to set the number of interpreted method invocations to 5,000:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:CompileThreshold=5000\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-You can completely disable interpretation of Java methods before compilation by specifying the
-\fB\-Xcomp\fR
-option\&.
-.RE
-.PP
-\-XX:+DoEscapeAnalysis
-.RS 4
-Enables the use of escape analysis\&. This option is enabled by default\&. To disable the use of escape analysis, specify
-\fB\-XX:\-DoEscapeAnalysis\fR\&. Only the Java HotSpot Server VM supports this option\&.
-.RE
-.PP
-\-XX:InitialCodeCacheSize=\fIsize\fR
-.RS 4
-Sets the initial code cache size (in bytes)\&. Append the letter
-\fBk\fR
-or
-\fBK\fR
-to indicate kilobytes,
-\fBm\fR
-or
-\fBM\fR
-to indicate megabytes,
-\fBg\fR
-or
-\fBG\fR
-to indicate gigabytes\&. The default value is set to 500 KB\&. The following example shows how to set the initial code cache size to 32 KB:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:InitialCodeCacheSize=32k\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
-\-XX:+Inline
-.RS 4
-Enables method inlining\&. This option is enabled by default to increase performance\&. To disable method inlining, specify
-\fB\-XX:\-Inline\fR\&.
-.RE
-.PP
-\-XX:InlineSmallCode=\fIsize\fR
-.RS 4
-Sets the maximum code size (in bytes) for compiled methods that should be inlined\&. Append the letter
-\fBk\fR
-or
-\fBK\fR
-to indicate kilobytes,
-\fBm\fR
-or
-\fBM\fR
-to indicate megabytes,
-\fBg\fR
-or
-\fBG\fR
-to indicate gigabytes\&. Only compiled methods with the size smaller than the specified size will be inlined\&. By default, the maximum code size is set to 1000 bytes:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:InlineSmallCode=1000\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
-\-XX:+LogCompilation
-.RS 4
-Enables logging of compilation activity to a file named
-\fBhotspot\&.log\fR
-in the current working directory\&. You can specify a different log file path and name using the
-\fB\-XX:LogFile\fR
-option\&.
-.sp
-By default, this option is disabled and compilation activity is not logged\&. The
-\fB\-XX:+LogCompilation\fR
-option has to be used together with the
-\fB\-XX:UnlockDiagnosticVMOptions\fR
-option that unlocks diagnostic JVM options\&.
-.sp
-You can enable verbose diagnostic output with a message printed to the console every time a method is compiled by using the
-\fB\-XX:+PrintCompilation\fR
-option\&.
-.RE
-.PP
-\-XX:MaxInlineSize=\fIsize\fR
-.RS 4
-Sets the maximum bytecode size (in bytes) of a method to be inlined\&. Append the letter
-\fBk\fR
-or
-\fBK\fR
-to indicate kilobytes,
-\fBm\fR
-or
-\fBM\fR
-to indicate megabytes,
-\fBg\fR
-or
-\fBG\fR
-to indicate gigabytes\&. By default, the maximum bytecode size is set to 35 bytes:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:MaxInlineSize=35\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
-\-XX:MaxNodeLimit=\fInodes\fR
-.RS 4
+.sp     
+.nf     
+\f3\-XX:CompileOnly=java/lang/String\fP
+.fi     
+.nf     
+\f3\-XX:CompileOnly=java/lang\fP
+.fi     
+.nf     
+\f3\-XX:CompileOnly=\&.length\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP
+-XX:CompileThreshold=\fIinvocations\fR
+.br
+Sets the number of interpreted method invocations before compilation\&. By default, in the server JVM, the JIT compiler performs 10,000 interpreted method invocations to gather information for efficient compilation\&. For the client JVM, the default setting is 1,500 invocations\&. This option is ignored when tiered compilation is enabled; see the option \f3-XX:+TieredCompilation\fR\&. The following example shows how to set the number of interpreted method invocations to 5,000:
+.sp     
+.nf     
+\f3\-XX:CompileThreshold=5000\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+You can completely disable interpretation of Java methods before compilation by specifying the \f3-Xcomp\fR option\&.
+.TP
+-XX:+DoEscapeAnalysis
+.br
+Enables the use of escape analysis\&. This option is enabled by default\&. To disable the use of escape analysis, specify \f3-XX:-DoEscapeAnalysis\fR\&. Only the Java HotSpot Server VM supports this option\&.
+.TP
+-XX:InitialCodeCacheSize=\fIsize\fR
+.br
+Sets the initial code cache size (in bytes)\&. Append the letter \f3k\fR or \f3K\fR to indicate kilobytes, \f3m\fR or \f3M\fR to indicate megabytes, \f3g\fR or \f3G\fR to indicate gigabytes\&. The default value is set to 500 KB\&. The initial code cache size should be not less than the system\&'s minimal memory page size\&. The following example shows how to set the initial code cache size to 32 KB:
+.sp     
+.nf     
+\f3\-XX:InitialCodeCacheSize=32k\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP
+-XX:+Inline
+.br
+Enables method inlining\&. This option is enabled by default to increase performance\&. To disable method inlining, specify \f3-XX:-Inline\fR\&.
+.TP
+-XX:InlineSmallCode=\fIsize\fR
+.br
+Sets the maximum code size (in bytes) for compiled methods that should be inlined\&. Append the letter \f3k\fR or \f3K\fR to indicate kilobytes, \f3m\fR or \f3M\fR to indicate megabytes, \f3g\fR or \f3G\fR to indicate gigabytes\&. Only compiled methods with the size smaller than the specified size will be inlined\&. By default, the maximum code size is set to 1000 bytes:
+.sp     
+.nf     
+\f3\-XX:InlineSmallCode=1000\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP
+-XX:+LogCompilation
+.br
+Enables logging of compilation activity to a file named \f3hotspot\&.log\fR in the current working directory\&. You can specify a different log file path and name using the \f3-XX:LogFile\fR option\&.
+
+By default, this option is disabled and compilation activity is not logged\&. The \f3-XX:+LogCompilation\fR option has to be used together with the \f3-XX:UnlockDiagnosticVMOptions\fR option that unlocks diagnostic JVM options\&.
+
+You can enable verbose diagnostic output with a message printed to the console every time a method is compiled by using the \f3-XX:+PrintCompilation\fR option\&.
+.TP
+-XX:MaxInlineSize=\fIsize\fR
+.br
+Sets the maximum bytecode size (in bytes) of a method to be inlined\&. Append the letter \f3k\fR or \f3K\fR to indicate kilobytes, \f3m\fR or \f3M\fR to indicate megabytes, \f3g\fR or \f3G\fR to indicate gigabytes\&. By default, the maximum bytecode size is set to 35 bytes:
+.sp     
+.nf     
+\f3\-XX:MaxInlineSize=35\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP
+-XX:MaxNodeLimit=\fInodes\fR
+.br
 Sets the maximum number of nodes to be used during single method compilation\&. By default, the maximum number of nodes is set to 65,000:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:MaxNodeLimit=65000\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
-\-XX:MaxTrivialSize=\fIsize\fR
-.RS 4
-Sets the maximum bytecode size (in bytes) of a trivial method to be inlined\&. Append the letter
-\fBk\fR
-or
-\fBK\fR
-to indicate kilobytes,
-\fBm\fR
-or
-\fBM\fR
-to indicate megabytes,
-\fBg\fR
-or
-\fBG\fR
-to indicate gigabytes\&. By default, the maximum bytecode size of a trivial method is set to 6 bytes:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:MaxTrivialSize=6\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
-\-XX:+OptimizeStringConcat
-.RS 4
-Enables the optimization of
-\fBString\fR
-concatenation operations\&. This option is enabled by default\&. To disable the optimization of
-\fBString\fR
-concatenation operations, specify
-\fB\-XX:\-OptimizeStringConcat\fR\&. Only the Java HotSpot Server VM supports this option\&.
-.RE
-.PP
-\-XX:+PrintAssembly
-.RS 4
-Enables printing of assembly code for bytecoded and native methods by using the external
-\fBdisassembler\&.so\fR
-library\&. This enables you to see the generated code, which may help you to diagnose performance issues\&.
-.sp
-By default, this option is disabled and assembly code is not printed\&. The
-\fB\-XX:+PrintAssembly\fR
-option has to be used together with the
-\fB\-XX:UnlockDiagnosticVMOptions\fR
-option that unlocks diagnostic JVM options\&.
-.RE
-.PP
-\-XX:+PrintCompilation
-.RS 4
+.sp     
+.nf     
+\f3\-XX:MaxNodeLimit=65000\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP
+-XX:MaxTrivialSize=\fIsize\fR
+.br
+Sets the maximum bytecode size (in bytes) of a trivial method to be inlined\&. Append the letter \f3k\fR or \f3K\fR to indicate kilobytes, \f3m\fR or \f3M\fR to indicate megabytes, \f3g\fR or \f3G\fR to indicate gigabytes\&. By default, the maximum bytecode size of a trivial method is set to 6 bytes:
+.sp     
+.nf     
+\f3\-XX:MaxTrivialSize=6\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP
+-XX:+OptimizeStringConcat
+.br
+Enables the optimization of \f3String\fR concatenation operations\&. This option is enabled by default\&. To disable the optimization of \f3String\fR concatenation operations, specify \f3-XX:-OptimizeStringConcat\fR\&. Only the Java HotSpot Server VM supports this option\&.
+.TP
+-XX:+PrintAssembly
+.br
+Enables printing of assembly code for bytecoded and native methods by using the external \f3disassembler\&.so\fR library\&. This enables you to see the generated code, which may help you to diagnose performance issues\&.
+
+By default, this option is disabled and assembly code is not printed\&. The \f3-XX:+PrintAssembly\fR option has to be used together with the \f3-XX:UnlockDiagnosticVMOptions\fR option that unlocks diagnostic JVM options\&.
+.TP
+-XX:+PrintCompilation
+.br
 Enables verbose diagnostic output from the JVM by printing a message to the console every time a method is compiled\&. This enables you to see which methods actually get compiled\&. By default, this option is disabled and diagnostic output is not printed\&.
-.sp
-You can also log compilation activity to a file by using the
-\fB\-XX:+LogCompilation\fR
-option\&.
-.RE
-.PP
-\-XX:+PrintInlining
-.RS 4
+
+You can also log compilation activity to a file by using the \f3-XX:+LogCompilation\fR option\&.
+.TP
+-XX:+PrintInlining
+.br
 Enables printing of inlining decisions\&. This enables you to see which methods are getting inlined\&.
-.sp
-By default, this option is disabled and inlining information is not printed\&. The
-\fB\-XX:+PrintInlining\fR
-option has to be used together with the
-\fB\-XX:+UnlockDiagnosticVMOptions\fR
-option that unlocks diagnostic JVM options\&.
-.RE
-.PP
-\-XX:ReservedCodeCacheSize=\fIsize\fR
-.RS 4
-Sets the maximum code cache size (in bytes) for JIT\-compiled code\&. Append the letter
-\fBk\fR
-or
-\fBK\fR
-to indicate kilobytes,
-\fBm\fR
-or
-\fBM\fR
-to indicate megabytes,
-\fBg\fR
-or
-\fBG\fR
-to indicate gigabytes\&. This option is equivalent to
-\fB\-Xmaxjitcodesize\fR\&.
-.RE
-.PP
-\-XX:+TieredCompilation
-.RS 4
+
+By default, this option is disabled and inlining information is not printed\&. The \f3-XX:+PrintInlining\fR option has to be used together with the \f3-XX:+UnlockDiagnosticVMOptions\fR option that unlocks diagnostic JVM options\&.
+.TP
+-XX:ReservedCodeCacheSize=\fIsize\fR
+.br
+Sets the maximum code cache size (in bytes) for JIT-compiled code\&. Append the letter \f3k\fR or \f3K\fR to indicate kilobytes, \f3m\fR or \f3M\fR to indicate megabytes, \f3g\fR or \f3G\fR to indicate gigabytes\&. This option has a limit of 2 GB; otherwise, an error is generated\&. The maximum code cache size should not be less than the initial code cache size; see the option \f3-XX:InitialCodeCacheSize\fR\&. This option is equivalent to \f3-Xmaxjitcodesize\fR\&.
+.TP
+-XX:RTMAbortRatio=\fIabort_ratio\fR
+.br
+The RTM abort ratio is specified as a percentage (%) of all executed RTM transactions\&. If a number of aborted transactions becomes greater than this ratio, then the compiled code will be deoptimized\&. This ratio is used when the \f3-XX:+UseRTMDeopt\fR option is enabled\&. The default value of this option is 50\&. This means that the compiled code will be deoptimized if 50% of all transactions are aborted\&.
+.TP
+-XX:RTMRetryCount=\fInumber_of_retries\fR
+.br
+RTM locking code will be retried, when it is aborted or busy, the number of times specified by this option before falling back to the normal locking mechanism\&. The default value for this option is 5\&. The \f3-XX:UseRTMLocking\fR option must be enabled\&.
+.TP
+-XX:+TieredCompilation
+.br
 Enables the use of tiered compilation\&. By default, this option is enabled\&. Only the Java HotSpot Server VM supports this option\&.
-.RE
-.PP
-\-XX:+UseAES
-.RS 4
-Enables hardware\-based AES intrinsics for Intel, AMD, and SPARC hardware\&. Intel Westmere (2010 and newer), AMD Bulldozer (2011 and newer), and SPARC (T4 and newer) are the supported hardware\&. UseAES is used in conjunction with UseAESIntrinsics\&.
-.RE
-.PP
-\-XX:+UseAESIntrinsics
-.RS 4
-UseAES and UseAESIntrinsics flags are enabled by default and are supported only for Java HotSpot Server VM 32\-bit and 64\-bit\&. To disable hardware\-based AES intrinsics, specify
-\fB\-XX:\-UseAES \-XX:\-UseAESIntrinsics\fR\&. For example, to enable hardware AES, use the following flags:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:+UseAES \-XX:+UseAESIntrinsics\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-To support UseAES and UseAESIntrinsics flags for 32\-bit and 64\-bit use
-\fB\-server\fR
-option to choose Java HotSpot Server VM\&. These flags are not supported on Client VM\&.
-.RE
-.PP
-\-XX:+UseCodeCacheFlushing
-.RS 4
-Enables flushing of the code cache before shutting down the compiler\&. This option is enabled by default\&. To disable flushing of the code cache before shutting down the compiler, specify
-\fB\-XX:\-UseCodeCacheFlushing\fR\&.
-.RE
-.PP
-\-XX:+UseCondCardMark
-.RS 4
+.TP
+-XX:+UseAES
+.br
+Enables hardware-based AES intrinsics for Intel, AMD, and SPARC hardware\&. Intel Westmere (2010 and newer), AMD Bulldozer (2011 and newer), and SPARC (T4 and newer) are the supported hardware\&. UseAES is used in conjunction with UseAESIntrinsics\&.
+.TP
+-XX:+UseAESIntrinsics
+.br
+UseAES and UseAESIntrinsics flags are enabled by default and are supported only for Java HotSpot Server VM 32-bit and 64-bit\&. To disable hardware-based AES intrinsics, specify \f3-XX:-UseAES -XX:-UseAESIntrinsics\fR\&. For example, to enable hardware AES, use the following flags:
+.sp     
+.nf     
+\f3\-XX:+UseAES \-XX:+UseAESIntrinsics\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+To support UseAES and UseAESIntrinsics flags for 32-bit and 64-bit use \f3-server\fR option to choose Java HotSpot Server VM\&. These flags are not supported on Client VM\&.
+.TP
+-XX:+UseCodeCacheFlushing
+.br
+Enables flushing of the code cache before shutting down the compiler\&. This option is enabled by default\&. To disable flushing of the code cache before shutting down the compiler, specify \f3-XX:-UseCodeCacheFlushing\fR\&.
+.TP
+-XX:+UseCondCardMark
+.br
 Enables checking of whether the card is already marked before updating the card table\&. This option is disabled by default and should only be used on machines with multiple sockets, where it will increase performance of Java applications that rely heavily on concurrent operations\&. Only the Java HotSpot Server VM supports this option\&.
-.RE
-.PP
-\-XX:+UseSuperWord
-.RS 4
-Enables the transformation of scalar operations into superword operations\&. This option is enabled by default\&. To disable the transformation of scalar operations into superword operations, specify
-\fB\-XX:\-UseSuperWord\fR\&. Only the Java HotSpot Server VM supports this option\&.
-.RE
-.SS "Experimental JIT Compiler Options"
-.PP
-The options related to the Restricted Transactional Memory (RTM) locking feature in this section are experimental and are not officially supported in Java SE 8u20; you must enable the
-\fB\-XX:+UnlockExperimentalVMOptions\fR
-option to use them\&. These options are only available for the Java HotSpot Server VM on x86 CPUs that support Transactional Synchronization Extensions (TSX)\&.
-.PP
-\-XX:RTMAbortRatio=\fIabort_ratio\fR
-.RS 4
-The RTM abort ratio is specified as a percentage (%) of all executed RTM transactions\&. If a number of aborted transactions becomes greater than this ratio, then the compiled code will be deoptimized\&. This ratio is used when the
-\fB\-XX:+UseRTMDeopt\fR
-option is enabled\&. The default value of this option is 50\&. This means that the compiled code will be deoptimized if 50% of all transactions are aborted\&.
-.RE
-.PP
-\-XX:RTMRetryCount=\fInumber_of_retries\fR
-.RS 4
-RTM locking code will be retried, when it is aborted or busy, the number of times specified by this option before falling back to the normal locking mechanism\&. The default value for this option is 5\&. The
-\fB\-XX:UseRTMLocking\fR
-option must be enabled\&.
-.RE
-.PP
-\-XX:+UseRTMDeopt
-.RS 4
-Auto\-tunes RTM locking depending on the abort ratio\&. This ratio is specified by
-\fB\-XX:RTMAbortRatio\fR
-option\&. If the number of aborted transactions exceeds the abort ratio, then the method containing the lock will be deoptimized and recompiled with all locks as normal locks\&. This option is disabled by default\&. The
-\fB\-XX:UseRTMLocking\fR
-option must be enabled\&.
-.RE
-.PP
-\-XX:+UseRTMLocking
-.RS 4
-Generate Restricted Transactional Memory (RTM) locking code for all inflated locks, with the normal locking mechanism as the fallback handler\&. This option is disabled by default\&.
-.sp
-RTM is part of Intel\*(Aqs Transactional Synchronization Extensions (TSX), which is an x86 instruction set extension and facilitates the creation of multithreaded applications\&. RTM introduces the new instructions
-\fBXBEGIN\fR,
-\fBXABORT\fR,
-\fBXEND\fR, and
-\fBXTEST\fR\&. The
-\fBXBEGIN\fR
-and
-\fBXEND\fR
-instructions enclose a set of instructions to run as a transaction\&. If no conflict is found when running the transaction, the memory and register modifications are committed together at the
-\fBXEND\fR
-instruction\&. The
-\fBXABORT\fR
-instruction can be used to explicitly abort a transaction and the
-\fBXEND\fR
-instruction to check if a set of instructions are being run in a transaction\&.
-.sp
-A lock on a transaction is inflated when another thread tries to access the same transaction, thereby blocking the thread that did not originally request access to the transaction\&. RTM requires that a fallback set of operations be specified in case a transaction aborts or fails\&. An RTM lock is a lock that has been delegated to the TSX\*(Aqs system\&.
-.sp
-RTM improves performance for highly contended locks with low conflict in a critical region (which is code that must not be accessed by more than one thread concurrently)\&. RTM also improves the performance of coarse\-grain locking, which typically does not perform well in multithreaded applications\&. (Coarse\-grain locking is the strategy of holding locks for long periods to minimize the overhead of taking and releasing locks, while fine\-grained locking is the strategy of trying to achieve maximum parallelism by locking only when necessary and unlocking as soon as possible\&.) Also, for lightly contended locks that are used by different threads, RTM can reduce false cache line sharing, also known as cache line ping\-pong\&. This occurs when multiple threads from different processors are accessing different resources, but the resources share the same cache line\&. As a result, the processors repeatedly invalidate the cache lines of other processors, which forces them to read from main memory instead of their cache\&.
-.RE
-.SS "Advanced Serviceability Options"
-.PP
+.TP
+-XX:+UseRTMDeopt
+.br
+Auto-tunes RTM locking depending on the abort ratio\&. This ratio is specified by \f3-XX:RTMAbortRatio\fR option\&. If the number of aborted transactions exceeds the abort ratio, then the method containing the lock will be deoptimized and recompiled with all locks as normal locks\&. This option is disabled by default\&. The \f3-XX:+UseRTMLocking\fR option must be enabled\&.
+.TP
+-XX:+UseRTMLocking
+.br
+Generate Restricted Transactional Memory (RTM) locking code for all inflated locks, with the normal locking mechanism as the fallback handler\&. This option is disabled by default\&. Options related to RTM are only available for the Java HotSpot Server VM on x86 CPUs that support Transactional Synchronization Extensions (TSX)\&.
+
+RTM is part of Intel\&'s TSX, which is an x86 instruction set extension and facilitates the creation of multithreaded applications\&. RTM introduces the new instructions \f3XBEGIN\fR, \f3XABORT\fR, \f3XEND\fR, and \f3XTEST\fR\&. The \f3XBEGIN\fR and \f3XEND\fR instructions enclose a set of instructions to run as a transaction\&. If no conflict is found when running the transaction, the memory and register modifications are committed together at the \f3XEND\fR instruction\&. The \f3XABORT\fR instruction can be used to explicitly abort a transaction and the \f3XEND\fR instruction to check if a set of instructions are being run in a transaction\&.
+
+A lock on a transaction is inflated when another thread tries to access the same transaction, thereby blocking the thread that did not originally request access to the transaction\&. RTM requires that a fallback set of operations be specified in case a transaction aborts or fails\&. An RTM lock is a lock that has been delegated to the TSX\&'s system\&.
+
+RTM improves performance for highly contended locks with low conflict in a critical region (which is code that must not be accessed by more than one thread concurrently)\&. RTM also improves the performance of coarse-grain locking, which typically does not perform well in multithreaded applications\&. (Coarse-grain locking is the strategy of holding locks for long periods to minimize the overhead of taking and releasing locks, while fine-grained locking is the strategy of trying to achieve maximum parallelism by locking only when necessary and unlocking as soon as possible\&.) Also, for lightly contended locks that are used by different threads, RTM can reduce false cache line sharing, also known as cache line ping-pong\&. This occurs when multiple threads from different processors are accessing different resources, but the resources share the same cache line\&. As a result, the processors repeatedly invalidate the cache lines of other processors, which forces them to read from main memory instead of their cache\&.
+.TP
+-XX:+UseSHA
+.br
+Enables hardware-based intrinsics for SHA crypto hash functions for SPARC hardware\&. \f3UseSHA\fR is used in conjunction with the \f3UseSHA1Intrinsics\fR, \f3UseSHA256Intrinsics\fR, and \f3UseSHA512Intrinsics\fR options\&.
+
+The \f3UseSHA\fR and \f3UseSHA*Intrinsics\fR flags are enabled by default, and are supported only for Java HotSpot Server VM 64-bit on SPARC T4 and newer\&.
+
+This feature is only applicable when using the \f3sun\&.security\&.provider\&.Sun\fR provider for SHA operations\&.
+
+To disable all hardware-based SHA intrinsics, specify \f3-XX:-UseSHA\fR\&. To disable only a particular SHA intrinsic, use the appropriate corresponding option\&. For example: \f3-XX:-UseSHA256Intrinsics\fR\&.
+.TP
+-XX:+UseSHA1Intrinsics
+.br
+Enables intrinsics for SHA-1 crypto hash function\&.
+.TP
+-XX:+UseSHA256Intrinsics
+.br
+Enables intrinsics for SHA-224 and SHA-256 crypto hash functions\&.
+.TP
+-XX:+UseSHA512Intrinsics
+.br
+Enables intrinsics for SHA-384 and SHA-512 crypto hash functions\&.
+.TP
+-XX:+UseSuperWord
+.br
+Enables the transformation of scalar operations into superword operations\&. This option is enabled by default\&. To disable the transformation of scalar operations into superword operations, specify \f3-XX:-UseSuperWord\fR\&. Only the Java HotSpot Server VM supports this option\&.
+.SS ADVANCED\ SERVICEABILITY\ OPTIONS    
 These options provide the ability to gather system information and perform extensive debugging\&.
-.PP
-\-XX:+ExtendedDTraceProbes
-.RS 4
-Enables additional
-\fBdtrace\fR
-tool probes that impact the performance\&. By default, this option is disabled and
-\fBdtrace\fR
-performs only standard probes\&.
-.RE
-.PP
-\-XX:+HeapDumpOnOutOfMemory
-.RS 4
-Enables the dumping of the Java heap to a file in the current directory by using the heap profiler (HPROF) when a
-\fBjava\&.lang\&.OutOfMemoryError\fR
-exception is thrown\&. You can explicitly set the heap dump file path and name using the
-\fB\-XX:HeapDumpPath\fR
-option\&. By default, this option is disabled and the heap is not dumped when an
-\fBOutOfMemoryError\fR
-exception is thrown\&.
-.RE
-.PP
-\-XX:HeapDumpPath=\fIpath\fR
-.RS 4
-Sets the path and file name for writing the heap dump provided by the heap profiler (HPROF) when the
-\fB\-XX:+HeapDumpOnOutOfMemoryError\fR
-option is set\&. By default, the file is created in the current working directory, and it is named
-\fBjava_pid\fR\fIpid\fR\fB\&.hprof\fR
-where
-\fIpid\fR
-is the identifier of the process that caused the error\&. The following example shows how to set the default file explicitly (\fB%p\fR
-represents the current process identificator):
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:HeapDumpPath=\&./java_pid%p\&.hprof\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-The following example shows how to set the heap dump file to
-\fB/var/log/java/java_heapdump\&.hprof\fR:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:HeapDumpPath=/var/log/java/java_heapdump\&.hprof\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
-\-XX:LogFile=\fIpath\fR
-.RS 4
-Sets the path and file name where log data is written\&. By default, the file is created in the current working directory, and it is named
-\fBhotspot\&.log\fR\&.
-.sp
-The following example shows how to set the log file to
-\fB/var/log/java/hotspot\&.log\fR:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:LogFile=/var/log/java/hotspot\&.log\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
-\-XX:+PrintClassHistogram
-.RS 4
-Enables printing of a class instance histogram after a
-\fBControl+C\fR
-event (\fBSIGTERM\fR)\&. By default, this option is disabled\&.
-.sp
-Setting this option is equivalent to running the
-\fBjmap \-histo\fR
-command, or the
-\fBjcmd \fR\fIpid\fR\fB GC\&.class_histogram\fR
-command, where
-\fIpid\fR
-is the current Java process identifier\&.
-.RE
-.PP
-\-XX:+PrintConcurrentLocks
-.RS 4
-Enables printing of j locks after a event\&. By default, this option is disabled\&.
-.sp
-Enables printing of j\fBava\&.util\&.concurrent\fR
-locks after a
-\fBControl+C\fR
-event (\fBSIGTERM\fR)\&. By default, this option is disabled\&.
-.sp
-Setting this option is equivalent to running the
-\fBjstack \-l\fR
-command or the
-\fBjcmd \fR\fIpid\fR\fB Thread\&.print \-l\fR
-command, where
-\fIpid\fR
-is the current Java process identifier\&.
-.RE
-.PP
-\-XX:+UnlockDiagnosticVMOptions
-.RS 4
+.TP
+-XX:+ExtendedDTraceProbes
+.br
+Enables additional \f3dtrace\fR tool probes that impact the performance\&. By default, this option is disabled and \f3dtrace\fR performs only standard probes\&.
+.TP
+-XX:+HeapDumpOnOutOfMemory
+.br
+Enables the dumping of the Java heap to a file in the current directory by using the heap profiler (HPROF) when a \f3java\&.lang\&.OutOfMemoryError\fR exception is thrown\&. You can explicitly set the heap dump file path and name using the \f3-XX:HeapDumpPath\fR option\&. By default, this option is disabled and the heap is not dumped when an \f3OutOfMemoryError\fR exception is thrown\&.
+.TP
+-XX:HeapDumpPath=\fIpath\fR
+.br
+Sets the path and file name for writing the heap dump provided by the heap profiler (HPROF) when the \f3-XX:+HeapDumpOnOutOfMemoryError\fR option is set\&. By default, the file is created in the current working directory, and it is named \f3java_pid\fR\fIpid\fR\f3\&.hprof\fR where \fIpid\fR is the identifier of the process that caused the error\&. The following example shows how to set the default file explicitly (\f3%p\fR represents the current process identificator):
+.sp     
+.nf     
+\f3\-XX:HeapDumpPath=\&./java_pid%p\&.hprof\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+\fI\fRThe following example shows how to set the heap dump file to \f3/var/log/java/java_heapdump\&.hprof\fR:
+.sp     
+.nf     
+\f3\-XX:HeapDumpPath=/var/log/java/java_heapdump\&.hprof\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP
+-XX:LogFile=\fIpath\fR
+.br
+Sets the path and file name where log data is written\&. By default, the file is created in the current working directory, and it is named \f3hotspot\&.log\fR\&.
+
+\fI\fRThe following example shows how to set the log file to \f3/var/log/java/hotspot\&.log\fR:
+.sp     
+.nf     
+\f3\-XX:LogFile=/var/log/java/hotspot\&.log\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP
+-XX:+PrintClassHistogram
+.br
+\fI\fREnables printing of a class instance histogram after a \f3Control+C\fR event (\f3SIGTERM\fR)\&. By default, this option is disabled\&.
+
+Setting this option is equivalent to running the \f3jmap -histo\fR command, or the \f3jcmd\fR\fIpid\fR\f3GC\&.class_histogram\fR command, where \fIpid\fR is the current Java process identifier\&.
+.TP     
+-XX:+PrintConcurrentLocks
+
+
+Enables printing of \f3java\&.util\&.concurrent\fR locks after a \f3Control+C\fR event (\f3SIGTERM\fR)\&. By default, this option is disabled\&.
+
+Setting this option is equivalent to running the \f3jstack -l\fR command or the \f3jcmd\fR\fIpid\fR\f3Thread\&.print -l\fR command, where \fIpid\fR is the current Java process identifier\&.
+.TP
+-XX:+UnlockDiagnosticVMOptions
+.br
 Unlocks the options intended for diagnosing the JVM\&. By default, this option is disabled and diagnostic options are not available\&.
-.RE
-.SS "Advanced Garbage Collection Options"
-.PP
+.SS ADVANCED\ GARBAGE\ COLLECTION\ OPTIONS    
 These options control how garbage collection (GC) is performed by the Java HotSpot VM\&.
-.PP
-\-XX:+AggressiveHeap
-.RS 4
-Enables Java heap optimization\&. This sets various parameters to be optimal for long\-running jobs with intensive memory allocation, based on the configuration of the computer (RAM and CPU)\&. By default, the option is disabled and the heap is not optimized\&.
-.RE
-.PP
-\-XX:+AlwaysPreTouch
-.RS 4
-Enables touching of every page on the Java heap during JVM initialization\&. This gets all pages into the memory before entering the
-\fBmain()\fR
-method\&. The option can be used in testing to simulate a long\-running system with all virtual memory mapped to physical memory\&. By default, this option is disabled and all pages are committed as JVM heap space fills\&.
-.RE
-.PP
-\-XX:+CMSClassUnloadingEnabled
-.RS 4
-Enables class unloading when using the concurrent mark\-sweep (CMS) garbage collector\&. This option is enabled by default\&. To disable class unloading for the CMS garbage collector, specify
-\fB\-XX:\-CMSClassUnloadingEnabled\fR\&.
-.RE
-.PP
-\-XX:CMSExpAvgFactor=\fIpercent\fR
-.RS 4
+.TP
+-XX:+AggressiveHeap
+.br
+Enables Java heap optimization\&. This sets various parameters to be optimal for long-running jobs with intensive memory allocation, based on the configuration of the computer (RAM and CPU)\&. By default, the option is disabled and the heap is not optimized\&.
+.TP
+-XX:+AlwaysPreTouch
+.br
+Enables touching of every page on the Java heap during JVM initialization\&. This gets all pages into the memory before entering the \f3main()\fR method\&. The option can be used in testing to simulate a long-running system with all virtual memory mapped to physical memory\&. By default, this option is disabled and all pages are committed as JVM heap space fills\&.
+.TP
+-XX:+CMSClassUnloadingEnabled
+.br
+Enables class unloading when using the concurrent mark-sweep (CMS) garbage collector\&. This option is enabled by default\&. To disable class unloading for the CMS garbage collector, specify \f3-XX:-CMSClassUnloadingEnabled\fR\&.
+.TP
+-XX:CMSExpAvgFactor=\fIpercent\fR
+.br
 Sets the percentage of time (0 to 100) used to weight the current sample when computing exponential averages for the concurrent collection statistics\&. By default, the exponential averages factor is set to 25%\&. The following example shows how to set the factor to 15%:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:CMSExpAvgFactor=15\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
-\-XX:CMSInitiatingOccupancyFraction=\fIpercent\fR
-.RS 4
-Sets the percentage of the old generation occupancy (0 to 100) at which to start a CMS collection cycle\&. The default value is set to \-1\&. Any negative value (including the default) implies that
-\fB\-XX:CMSTriggerRatio\fR
-is used to define the value of the initiating occupancy fraction\&.
-.sp
+.sp     
+.nf     
+\f3\-XX:CMSExpAvgFactor=15\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP
+-XX:CMSInitiatingOccupancyFraction=\fIpercent\fR
+.br
+Sets the percentage of the old generation occupancy (0 to 100) at which to start a CMS collection cycle\&. The default value is set to -1\&. Any negative value (including the default) implies that \f3-XX:CMSTriggerRatio\fR is used to define the value of the initiating occupancy fraction\&.
+
 The following example shows how to set the occupancy fraction to 20%:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:CMSInitiatingOccupancyFraction=20\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
-\-XX:+CMSScavengeBeforeRemark
-.RS 4
+.sp     
+.nf     
+\f3\-XX:CMSInitiatingOccupancyFraction=20\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP
+-XX:+CMSScavengeBeforeRemark
+.br
 Enables scavenging attempts before the CMS remark step\&. By default, this option is disabled\&.
-.RE
-.PP
-\-XX:CMSTriggerRatio=\fIpercent\fR
-.RS 4
-Sets the percentage (0 to 100) of the value specified by
-\fB\-XX:MinHeapFreeRatio\fR
-that is allocated before a CMS collection cycle commences\&. The default value is set to 80%\&.
-.sp
+.TP
+-XX:CMSTriggerRatio=\fIpercent\fR
+.br
+Sets the percentage (0 to 100) of the value specified by \f3-XX:MinHeapFreeRatio\fR that is allocated before a CMS collection cycle commences\&. The default value is set to 80%\&.
+
 The following example shows how to set the occupancy fraction to 75%:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:CMSTriggerRatio=75\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
-\-XX:ConcGCThreads=\fIthreads\fR
-.RS 4
+.sp     
+.nf     
+\f3\-XX:CMSTriggerRatio=75\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP
+-XX:ConcGCThreads=\fIthreads\fR
+.br
 Sets the number of threads used for concurrent GC\&. The default value depends on the number of CPUs available to the JVM\&.
-.sp
+
 For example, to set the number of threads for concurrent GC to 2, specify the following option:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:ConcGCThreads=2\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
-\-XX:+DisableExplicitGC
-.RS 4
-Enables the option that disables processing of calls to
-\fBSystem\&.gc()\fR\&. This option is disabled by default, meaning that calls to
-\fBSystem\&.gc()\fR
-are processed\&. If processing of calls to
-\fBSystem\&.gc()\fR
-is disabled, the JVM still performs GC when necessary\&.
-.RE
-.PP
-\-XX:+ExplicitGCInvokesConcurrent
-.RS 4
-Enables invoking of concurrent GC by using the
-\fBSystem\&.gc()\fR
-request\&. This option is disabled by default and can be enabled only together with the
-\fB\-XX:+UseConcMarkSweepGC\fR
-option\&.
-.RE
-.PP
-\-XX:+ExplicitGCInvokesConcurrentAndUnloadsClasses
-.RS 4
-Enables invoking of concurrent GC by using the
-\fBSystem\&.gc()\fR
-request and unloading of classes during the concurrent GC cycle\&. This option is disabled by default and can be enabled only together with the
-\fB\-XX:+UseConcMarkSweepGC\fR
-option\&.
-.RE
-.PP
-\-XX:G1HeapRegionSize=\fIsize\fR
-.RS 4
-Sets the size of the regions into which the Java heap is subdivided when using the garbage\-first (G1) collector\&. The value can be between 1 MB and 32 MB\&. The default region size is determined ergonomically based on the heap size\&.
-.sp
+.sp     
+.nf     
+\f3\-XX:ConcGCThreads=2\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP
+-XX:+DisableExplicitGC
+.br
+Enables the option that disables processing of calls to \f3System\&.gc()\fR\&. This option is disabled by default, meaning that calls to \f3System\&.gc()\fR are processed\&. If processing of calls to \f3System\&.gc()\fR is disabled, the JVM still performs GC when necessary\&.
+.TP
+-XX:+ExplicitGCInvokesConcurrent
+.br
+Enables invoking of concurrent GC by using the \f3System\&.gc()\fR request\&. This option is disabled by default and can be enabled only together with the \f3-XX:+UseConcMarkSweepGC\fR option\&.
+.TP
+-XX:+ExplicitGCInvokesConcurrentAndUnloadsClasses
+.br
+Enables invoking of concurrent GC by using the \f3System\&.gc()\fR request and unloading of classes during the concurrent GC cycle\&. This option is disabled by default and can be enabled only together with the \f3-XX:+UseConcMarkSweepGC\fR option\&.
+.TP
+-XX:G1HeapRegionSize=\fIsize\fR
+.br
+Sets the size of the regions into which the Java heap is subdivided when using the garbage-first (G1) collector\&. The value can be between 1 MB and 32 MB\&. The default region size is determined ergonomically based on the heap size\&.
+
 The following example shows how to set the size of the subdivisions to 16 MB:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:G1HeapRegionSize=16m\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
-\-XX:+G1PrintHeapRegions
-.RS 4
+.sp     
+.nf     
+\f3\-XX:G1HeapRegionSize=16m\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP
+-XX:+G1PrintHeapRegions
+.br
 Enables the printing of information about which regions are allocated and which are reclaimed by the G1 collector\&. By default, this option is disabled\&.
-.RE
-.PP
-\-XX:G1ReservePercent=\fIpercent\fR
-.RS 4
+.TP
+-XX:G1ReservePercent=\fIpercent\fR
+.br
 Sets the percentage of the heap (0 to 50) that is reserved as a false ceiling to reduce the possibility of promotion failure for the G1 collector\&. By default, this option is set to 10%\&.
-.sp
+
 The following example shows how to set the reserved heap to 20%:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:G1ReservePercent=20\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
-\-XX:InitialHeapSize=\fIsize\fR
-.RS 4
-Sets the initial size (in bytes) of the memory allocation pool\&. This value must be either 0, or a multiple of 1024 and greater than 1 MB\&. Append the letter
-\fBk\fR
-or
-\fBK\fR
-to indicate kilobytes,
-\fBm\fR
-or
-\fBM\fR
-to indicate megabytes,
-\fBg\fR
-or
-\fBG\fR
-to indicate gigabytes\&. The default value is chosen at runtime based on system configuration\&. For more information, see Garbage Collector Ergonomics at http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/vm/gc\-ergonomics\&.html
-.sp
+.sp     
+.nf     
+\f3\-XX:G1ReservePercent=20\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP
+-XX:InitialHeapSize=\fIsize\fR
+.br
+Sets the initial size (in bytes) of the memory allocation pool\&. This value must be either 0, or a multiple of 1024 and greater than 1 MB\&. Append the letter \f3k\fR or \f3K\fR to indicate kilobytes, \f3m\fR or \f3M\fR to indicate megabytes, \f3g\fR or \f3G\fR to indicate gigabytes\&. The default value is chosen at runtime based on system configuration\&. See the section "Ergonomics" in \fIJava SE HotSpot Virtual Machine Garbage Collection Tuning Guide\fR at http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/vm/gctuning/index\&.html\&.
+
 The following examples show how to set the size of allocated memory to 6 MB using various units:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:InitialHeapSize=6291456\fR
-\fB\-XX:InitialHeapSize=6144k\fR
-\fB\-XX:InitialHeapSize=6m\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-If you set this option to 0, then the initial size will be set as the sum of the sizes allocated for the old generation and the young generation\&. The size of the heap for the young generation can be set using the
-\fB\-XX:NewSize\fR
-option\&.
-.RE
-.PP
-\-XX:InitialSurvivorRatio=\fIratio\fR
-.RS 4
-Sets the initial survivor space ratio used by the throughput garbage collector (which is enabled by the
-\fB\-XX:+UseParallelGC\fR
-and/or \-\fBXX:+UseParallelOldGC\fR
-options)\&. Adaptive sizing is enabled by default with the throughput garbage collector by using the
-\fB\-XX:+UseParallelGC\fR
-and
-\fB\-XX:+UseParallelOldGC\fR
-options, and survivor space is resized according to the application behavior, starting with the initial value\&. If adaptive sizing is disabled (using the
-\fB\-XX:\-UseAdaptiveSizePolicy\fR
-option), then the
-\fB\-XX:SurvivorRatio\fR
-option should be used to set the size of the survivor space for the entire execution of the application\&.
-.sp
+.sp     
+.nf     
+\f3\-XX:InitialHeapSize=6291456\fP
+.fi     
+.nf     
+\f3\-XX:InitialHeapSize=6144k\fP
+.fi     
+.nf     
+\f3\-XX:InitialHeapSize=6m\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+If you set this option to 0, then the initial size will be set as the sum of the sizes allocated for the old generation and the young generation\&. The size of the heap for the young generation can be set using the \f3-XX:NewSize\fR option\&.
+.TP
+-XX:InitialSurvivorRatio=\fIratio\fR
+.br
+Sets the initial survivor space ratio used by the throughput garbage collector (which is enabled by the \f3-XX:+UseParallelGC\fR and/or -\f3XX:+UseParallelOldGC\fR options)\&. Adaptive sizing is enabled by default with the throughput garbage collector by using the \f3-XX:+UseParallelGC\fR and \f3-XX:+UseParallelOldGC\fR options, and survivor space is resized according to the application behavior, starting with the initial value\&. If adaptive sizing is disabled (using the \f3-XX:-UseAdaptiveSizePolicy\fR option), then the \f3-XX:SurvivorRatio\fR option should be used to set the size of the survivor space for the entire execution of the application\&.
+
 The following formula can be used to calculate the initial size of survivor space (S) based on the size of the young generation (Y), and the initial survivor space ratio (R):
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBS=Y/(R+2)\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
+.sp     
+.nf     
+\f3S=Y/(R+2)\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
 The 2 in the equation denotes two survivor spaces\&. The larger the value specified as the initial survivor space ratio, the smaller the initial survivor space size\&.
-.sp
+
 By default, the initial survivor space ratio is set to 8\&. If the default value for the young generation space size is used (2 MB), the initial size of the survivor space will be 0\&.2 MB\&.
-.sp
+
 The following example shows how to set the initial survivor space ratio to 4:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:InitialSurvivorRatio=4\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
-\-XX:InitiatingHeapOccupancyPercent=\fIpercent\fR
-.RS 4
+.sp     
+.nf     
+\f3\-XX:InitialSurvivorRatio=4\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP
+-XX:InitiatingHeapOccupancyPercent=\fIpercent\fR
+.br
 Sets the percentage of the heap occupancy (0 to 100) at which to start a concurrent GC cycle\&. It is used by garbage collectors that trigger a concurrent GC cycle based on the occupancy of the entire heap, not just one of the generations (for example, the G1 garbage collector)\&.
-.sp
+
 By default, the initiating value is set to 45%\&. A value of 0 implies nonstop GC cycles\&. The following example shows how to set the initiating heap occupancy to 75%:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:InitiatingHeapOccupancyPercent=75\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
-\-XX:MaxGCPauseMillis=\fItime\fR
-.RS 4
+.sp     
+.nf     
+\f3\-XX:InitiatingHeapOccupancyPercent=75\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP
+-XX:MaxGCPauseMillis=\fItime\fR
+.br
 Sets a target for the maximum GC pause time (in milliseconds)\&. This is a soft goal, and the JVM will make its best effort to achieve it\&. By default, there is no maximum pause time value\&.
-.sp
+
 The following example shows how to set the maximum target pause time to 500 ms:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:MaxGCPauseMillis=500\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
-\-XX:MaxHeapSize=\fIsize\fR
-.RS 4
-Sets the maximum size (in byes) of the memory allocation pool\&. This value must be a multiple of 1024 and greater than 2 MB\&. Append the letter
-\fBk\fR
-or
-\fBK\fR
-to indicate kilobytes,
-\fBm\fR
-or
-\fBM\fR
-to indicate megabytes,
-\fBg\fR
-or
-\fBG\fR
-to indicate gigabytes\&. The default value is chosen at runtime based on system configuration\&. For server deployments,
-\fB\-XX:InitialHeapSize\fR
-and
-\fB\-XX:MaxHeapSize\fR
-are often set to the same value\&. For more information, see Garbage Collector Ergonomics at http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/vm/gc\-ergonomics\&.html
-.sp
+.sp     
+.nf     
+\f3\-XX:MaxGCPauseMillis=500\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP
+-XX:MaxHeapSize=\fIsize\fR
+.br
+Sets the maximum size (in byes) of the memory allocation pool\&. This value must be a multiple of 1024 and greater than 2 MB\&. Append the letter \f3k\fR or \f3K\fR to indicate kilobytes, \f3m\fR or \f3M\fR to indicate megabytes, \f3g\fR or \f3G\fR to indicate gigabytes\&. The default value is chosen at runtime based on system configuration\&. For server deployments, \f3-XX:InitialHeapSize\fR and \f3-XX:MaxHeapSize\fR are often set to the same value\&. See the section "Ergonomics" in \fIJava SE HotSpot Virtual Machine Garbage Collection Tuning Guide\fR at http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/vm/gctuning/index\&.html\&.
+
 The following examples show how to set the maximum allowed size of allocated memory to 80 MB using various units:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:MaxHeapSize=83886080\fR
-\fB\-XX:MaxHeapSize=81920k\fR
-\fB\-XX:MaxHeapSize=80m\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
+.sp     
+.nf     
+\f3\-XX:MaxHeapSize=83886080\fP
+.fi     
+.nf     
+\f3\-XX:MaxHeapSize=81920k\fP
+.fi     
+.nf     
+\f3\-XX:MaxHeapSize=80m\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
 On Oracle Solaris 7 and Oracle Solaris 8 SPARC platforms, the upper limit for this value is approximately 4,000 MB minus overhead amounts\&. On Oracle Solaris 2\&.6 and x86 platforms, the upper limit is approximately 2,000 MB minus overhead amounts\&. On Linux platforms, the upper limit is approximately 2,000 MB minus overhead amounts\&.
-.sp
-The
-\fB\-XX:MaxHeapSize\fR
-option is equivalent to
-\fB\-Xmx\fR\&.
-.RE
-.PP
-\-XX:MaxHeapFreeRatio=\fIpercent\fR
-.RS 4
+
+The \f3-XX:MaxHeapSize\fR option is equivalent to \f3-Xmx\fR\&.
+.TP
+-XX:MaxHeapFreeRatio=\fIpercent\fR
+.br
 Sets the maximum allowed percentage of free heap space (0 to 100) after a GC event\&. If free heap space expands above this value, then the heap will be shrunk\&. By default, this value is set to 70%\&.
-.sp
+
 The following example shows how to set the maximum free heap ratio to 75%:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:MaxHeapFreeRatio=75\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
-\-XX:MaxMetaspaceSize=\fIsize\fR
-.RS 4
+.sp     
+.nf     
+\f3\-XX:MaxHeapFreeRatio=75\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP
+-XX:MaxMetaspaceSize=\fIsize\fR
+.br
 Sets the maximum amount of native memory that can be allocated for class metadata\&. By default, the size is not limited\&. The amount of metadata for an application depends on the application itself, other running applications, and the amount of memory available on the system\&.
-.sp
+
 The following example shows how to set the maximum class metadata size to 256 MB:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:MaxMetaspaceSize=256m\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
-\-XX:MaxNewSize=\fIsize\fR
-.RS 4
+.sp     
+.nf     
+\f3\-XX:MaxMetaspaceSize=256m\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP
+-XX:MaxNewSize=\fIsize\fR
+.br
 Sets the maximum size (in bytes) of the heap for the young generation (nursery)\&. The default value is set ergonomically\&.
-.RE
-.PP
-\-XX:MaxTenuringThreshold=\fIthreshold\fR
-.RS 4
+.TP
+-XX:MaxTenuringThreshold=\fIthreshold\fR
+.br
 Sets the maximum tenuring threshold for use in adaptive GC sizing\&. The largest value is 15\&. The default value is 15 for the parallel (throughput) collector, and 6 for the CMS collector\&.
-.sp
+
 The following example shows how to set the maximum tenuring threshold to 10:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:MaxTenuringThreshold=10\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
-\-XX:MetaspaceSize=\fIsize\fR
-.RS 4
+.sp     
+.nf     
+\f3\-XX:MaxTenuringThreshold=10\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP
+-XX:MetaspaceSize=\fIsize\fR
+.br
 Sets the size of the allocated class metadata space that will trigger a garbage collection the first time it is exceeded\&. This threshold for a garbage collection is increased or decreased depending on the amount of metadata used\&. The default size depends on the platform\&.
-.RE
-.PP
-\-XX:MinHeapFreeRatio=\fIpercent\fR
-.RS 4
+.TP
+-XX:MinHeapFreeRatio=\fIpercent\fR
+.br
 Sets the minimum allowed percentage of free heap space (0 to 100) after a GC event\&. If free heap space falls below this value, then the heap will be expanded\&. By default, this value is set to 40%\&.
-.sp
+
 The following example shows how to set the minimum free heap ratio to 25%:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:MinHeapFreeRatio=25\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
-\-XX:NewRatio=\fIratio\fR
-.RS 4
+.sp     
+.nf     
+\f3\-XX:MinHeapFreeRatio=25\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP
+-XX:NewRatio=\fIratio\fR
+.br
 Sets the ratio between young and old generation sizes\&. By default, this option is set to 2\&. The following example shows how to set the young/old ratio to 1:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:NewRatio=1\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
-\-XX:NewSize=\fIsize\fR
-.RS 4
-Sets the initial size (in bytes) of the heap for the young generation (nursery)\&. Append the letter
-\fBk\fR
-or
-\fBK\fR
-to indicate kilobytes,
-\fBm\fR
-or
-\fBM\fR
-to indicate megabytes,
-\fBg\fR
-or
-\fBG\fR
-to indicate gigabytes\&.
-.sp
+.sp     
+.nf     
+\f3\-XX:NewRatio=1\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP
+-XX:NewSize=\fIsize\fR
+.br
+Sets the initial size (in bytes) of the heap for the young generation (nursery)\&. Append the letter \f3k\fR or \f3K\fR to indicate kilobytes, \f3m\fR or \f3M\fR to indicate megabytes, \f3g\fR or \f3G\fR to indicate gigabytes\&.
+
 The young generation region of the heap is used for new objects\&. GC is performed in this region more often than in other regions\&. If the size for the young generation is too low, then a large number of minor GCs will be performed\&. If the size is too high, then only full GCs will be performed, which can take a long time to complete\&. Oracle recommends that you keep the size for the young generation between a half and a quarter of the overall heap size\&.
-.sp
+
 The following examples show how to set the initial size of young generation to 256 MB using various units:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:NewSize=256m\fR
-\fB\-XX:NewSize=262144k\fR
-\fB\-XX:NewSize=268435456\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-The
-\fB\-XX:NewSize\fR
-option is equivalent to
-\fB\-Xmn\fR\&.
-.RE
-.PP
-\-XX:ParallelGCThreads=\fIthreads\fR
-.RS 4
+.sp     
+.nf     
+\f3\-XX:NewSize=256m\fP
+.fi     
+.nf     
+\f3\-XX:NewSize=262144k\fP
+.fi     
+.nf     
+\f3\-XX:NewSize=268435456\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+The \f3-XX:NewSize\fR option is equivalent to \f3-Xmn\fR\&.
+.TP
+-XX:ParallelGCThreads=\fIthreads\fR
+.br
 Sets the number of threads used for parallel garbage collection in the young and old generations\&. The default value depends on the number of CPUs available to the JVM\&.
-.sp
+
 For example, to set the number of threads for parallel GC to 2, specify the following option:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:ParallelGCThreads=2\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
-\-XX:+ParallelRefProcEnabled
-.RS 4
+.sp     
+.nf     
+\f3\-XX:ParallelGCThreads=2\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP
+-XX:+ParallelRefProcEnabled
+.br
 Enables parallel reference processing\&. By default, this option is disabled\&.
-.RE
-.PP
-\-XX:+PrintAdaptiveSizePolicy
-.RS 4
+.TP
+-XX:+PrintAdaptiveSizePolicy
+.br
 Enables printing of information about adaptive generation sizing\&. By default, this option is disabled\&.
-.RE
-.PP
-\-XX:+PrintGC
-.RS 4
+.TP
+-XX:+PrintGC
+.br
 Enables printing of messages at every GC\&. By default, this option is disabled\&.
-.RE
-.PP
-\-XX:+PrintGCApplicationConcurrentTime
-.RS 4
+.TP
+-XX:+PrintGCApplicationConcurrentTime
+.br
 Enables printing of how much time elapsed since the last pause (for example, a GC pause)\&. By default, this option is disabled\&.
-.RE
-.PP
-\-XX:+PrintGCApplicationStoppedTime
-.RS 4
+.TP
+-XX:+PrintGCApplicationStoppedTime
+.br
 Enables printing of how much time the pause (for example, a GC pause) lasted\&. By default, this option is disabled\&.
-.RE
-.PP
-\-XX:+PrintGCDateStamps
-.RS 4
+.TP
+-XX:+PrintGCDateStamps
+.br
 Enables printing of a date stamp at every GC\&. By default, this option is disabled\&.
-.RE
-.PP
-\-XX:+PrintGCDetails
-.RS 4
+.TP
+-XX:+PrintGCDetails
+.br
 Enables printing of detailed messages at every GC\&. By default, this option is disabled\&.
-.RE
-.PP
-\-XX:+PrintGCTaskTimeStamps
-.RS 4
+.TP
+-XX:+PrintGCTaskTimeStamps
+.br
 Enables printing of time stamps for every individual GC worker thread task\&. By default, this option is disabled\&.
-.RE
-.PP
-\-XX:+PrintGCTimeStamps
-.RS 4
+.TP
+-XX:+PrintGCTimeStamps
+.br
 Enables printing of time stamps at every GC\&. By default, this option is disabled\&.
-.RE
-.PP
-\-XX:+PrintStringDeduplicationStatistics
-.RS 4
-Prints detailed deduplication statistics\&. By default, this option is disabled\&. See the
-\fB\-XX:+UseStringDeduplication\fR
-option\&.
-.RE
-.PP
-\-XX:+PrintTenuringDistribution
-.RS 4
+.TP
+-XX:+PrintStringDeduplicationStatistics
+.br
+Prints detailed deduplication statistics\&. By default, this option is disabled\&. See the \f3-XX:+UseStringDeduplication\fR option\&.
+.TP
+-XX:+PrintTenuringDistribution
+.br
 Enables printing of tenuring age information\&. The following is an example of the output:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBDesired survivor size 48286924 bytes, new threshold 10 (max 10)\fR
-\fB\- age 1: 28992024 bytes, 28992024 total\fR
-\fB\- age 2: 1366864 bytes, 30358888 total\fR
-\fB\- age 3: 1425912 bytes, 31784800 total\fR
-\fB\&.\&.\&.\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
+.sp     
+.nf     
+\f3Desired survivor size 48286924 bytes, new threshold 10 (max 10)\fP
+.fi     
+.nf     
+\f3\- age 1: 28992024 bytes, 28992024 total\fP
+.fi     
+.nf     
+\f3\- age 2: 1366864 bytes, 30358888 total\fP
+.fi     
+.nf     
+\f3\- age 3: 1425912 bytes, 31784800 total\fP
+.fi     
+.nf     
+\f3\&.\&.\&.\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
 Age 1 objects are the youngest survivors (they were created after the previous scavenge, survived the latest scavenge, and moved from eden to survivor space)\&. Age 2 objects have survived two scavenges (during the second scavenge they were copied from one survivor space to the next)\&. And so on\&.
-.sp
+
 In the preceding example, 28 992 024 bytes survived one scavenge and were copied from eden to survivor space, 1 366 864 bytes are occupied by age 2 objects, etc\&. The third value in each row is the cumulative size of objects of age n or less\&.
-.sp
+
 By default, this option is disabled\&.
-.RE
-.PP
-\-XX:+ScavengeBeforeFullGC
-.RS 4
-Enables GC of the young generation before each full GC\&. This option is enabled by default\&. Oracle recommends that you
-\fIdo not\fR
-disable it, because scavenging the young generation before a full GC can reduce the number of objects reachable from the old generation space into the young generation space\&. To disable GC of the young generation before each full GC, specify
-\fB\-XX:\-ScavengeBeforeFullGC\fR\&.
-.RE
-.PP
-\-XX:SoftRefLRUPolicyMSPerMB=\fItime\fR
-.RS 4
-Sets the amount of time (in milliseconds) a softly reachable object is kept active on the heap after the last time it was referenced\&. The default value is one second of lifetime per free megabyte in the heap\&. The
-\fB\-XX:SoftRefLRUPolicyMSPerMB\fR
-option accepts integer values representing milliseconds per one megabyte of the current heap size (for Java HotSpot Client VM) or the maximum possible heap size (for Java HotSpot Server VM)\&. This difference means that the Client VM tends to flush soft references rather than grow the heap, whereas the Server VM tends to grow the heap rather than flush soft references\&. In the latter case, the value of the
-\fB\-Xmx\fR
-option has a significant effect on how quickly soft references are garbage collected\&.
-.sp
+.TP
+-XX:+ScavengeBeforeFullGC
+.br
+Enables GC of the young generation before each full GC\&. This option is enabled by default\&. Oracle recommends that you \fIdo not\fR disable it, because scavenging the young generation before a full GC can reduce the number of objects reachable from the old generation space into the young generation space\&. To disable GC of the young generation before each full GC, specify \f3-XX:-ScavengeBeforeFullGC\fR\&.
+.TP
+-XX:SoftRefLRUPolicyMSPerMB=\fItime\fR
+.br
+Sets the amount of time (in milliseconds) a softly reachable object is kept active on the heap after the last time it was referenced\&. The default value is one second of lifetime per free megabyte in the heap\&. The \f3-XX:SoftRefLRUPolicyMSPerMB\fR option accepts integer values representing milliseconds per one megabyte of the current heap size (for Java HotSpot Client VM) or the maximum possible heap size (for Java HotSpot Server VM)\&. This difference means that the Client VM tends to flush soft references rather than grow the heap, whereas the Server VM tends to grow the heap rather than flush soft references\&. In the latter case, the value of the \f3-Xmx\fR option has a significant effect on how quickly soft references are garbage collected\&.
+
 The following example shows how to set the value to 2\&.5 seconds:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:SoftRefLRUPolicyMSPerMB=2500\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
-\-XX:StringDeduplicationAgeThreshold=\fIthreshold\fR
-.RS 4
-\fBString\fR
-objects reaching the specified age are considered candidates for deduplication\&. An object\*(Aqs age is a measure of how many times it has survived garbage collection\&. This is sometimes referred to as tenuring; see the
-\fB\-XX:+PrintTenuringDistribution\fR
-option\&. Note that
-\fBString\fR
-objects that are promoted to an old heap region before this age has been reached are always considered candidates for deduplication\&. The default value for this option is
-\fB3\fR\&. See the
-\fB\-XX:+UseStringDeduplication\fR
-option\&.
-.RE
-.PP
-\-XX:SurvivorRatio=\fIratio\fR
-.RS 4
+.sp     
+.nf     
+\f3\-XX:SoftRefLRUPolicyMSPerMB=2500\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP
+-XX:StringDeduplicationAgeThreshold=\fIthreshold\fR
+.br
+\f3String\fR objects reaching the specified age are considered candidates for deduplication\&. An object\&'s age is a measure of how many times it has survived garbage collection\&. This is sometimes referred to as tenuring; see the \f3-XX:+PrintTenuringDistribution\fR option\&. Note that \f3String\fR objects that are promoted to an old heap region before this age has been reached are always considered candidates for deduplication\&. The default value for this option is \f33\fR\&. See the \f3-XX:+UseStringDeduplication\fR option\&.
+.TP
+-XX:SurvivorRatio=\fIratio\fR
+.br
 Sets the ratio between eden space size and survivor space size\&. By default, this option is set to 8\&. The following example shows how to set the eden/survivor space ratio to 4:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:SurvivorRatio=4\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
-\-XX:TargetSurvivorRatio=\fIpercent\fR
-.RS 4
+.sp     
+.nf     
+\f3\-XX:SurvivorRatio=4\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP
+-XX:TargetSurvivorRatio=\fIpercent\fR
+.br
 Sets the desired percentage of survivor space (0 to 100) used after young garbage collection\&. By default, this option is set to 50%\&.
-.sp
+
 The following example shows how to set the target survivor space ratio to 30%:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:TargetSurvivorRatio=30\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
-\-XX:TLABSize=\fIsize\fR
-.RS 4
-Sets the initial size (in bytes) of a thread\-local allocation buffer (TLAB)\&. Append the letter
-\fBk\fR
-or
-\fBK\fR
-to indicate kilobytes,
-\fBm\fR
-or
-\fBM\fR
-to indicate megabytes,
-\fBg\fR
-or
-\fBG\fR
-to indicate gigabytes\&. If this option is set to 0, then the JVM chooses the initial size automatically\&.
-.sp
+.sp     
+.nf     
+\f3\-XX:TargetSurvivorRatio=30\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP
+-XX:TLABSize=\fIsize\fR
+.br
+Sets the initial size (in bytes) of a thread-local allocation buffer (TLAB)\&. Append the letter \f3k\fR or \f3K\fR to indicate kilobytes, \f3m\fR or \f3M\fR to indicate megabytes, \f3g\fR or \f3G\fR to indicate gigabytes\&. If this option is set to 0, then the JVM chooses the initial size automatically\&.
+
 The following example shows how to set the initial TLAB size to 512 KB:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-XX:TLABSize=512k\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
-\-XX:+UseAdaptiveSizePolicy
-.RS 4
-Enables the use of adaptive generation sizing\&. This option is enabled by default\&. To disable adaptive generation sizing, specify
-\fB\-XX:\-UseAdaptiveSizePolicy\fR
-and set the size of the memory allocation pool explicitly (see the
-\fB\-XX:SurvivorRatio\fR
-option)\&.
-.RE
-.PP
-\-XX:+UseCMSInitiatingOccupancyOnly
-.RS 4
+.sp     
+.nf     
+\f3\-XX:TLABSize=512k\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP
+-XX:+UseAdaptiveSizePolicy
+.br
+Enables the use of adaptive generation sizing\&. This option is enabled by default\&. To disable adaptive generation sizing, specify \f3-XX:-UseAdaptiveSizePolicy\fR and set the size of the memory allocation pool explicitly (see the \f3-XX:SurvivorRatio\fR option)\&.
+.TP
+-XX:+UseCMSInitiatingOccupancyOnly
+.br
 Enables the use of the occupancy value as the only criterion for initiating the CMS collector\&. By default, this option is disabled and other criteria may be used\&.
-.RE
-.PP
-\-XX:+UseConcMarkSweepGC
-.RS 4
-Enables the use of the CMS garbage collector for the old generation\&. Oracle recommends that you use the CMS garbage collector when application latency requirements cannot be met by the throughput (\fB\-XX:+UseParallelGC\fR) garbage collector\&. The G1 garbage collector (\fB\-XX:+UseG1GC\fR) is another alternative\&.
-.sp
-By default, this option is disabled and the collector is chosen automatically based on the configuration of the machine and type of the JVM\&. When this option is enabled, the
-\fB\-XX:+UseParNewGC\fR
-option is automatically set and you should not disable it, because the following combination of options has been deprecated in JDK 8:
-\fB\-XX:+UseConcMarkSweepGC \-XX:\-UseParNewGC\fR\&.
-.RE
-.PP
-\-XX:+UseG1GC
-.RS 4
-Enables the use of the garbage\-first (G1) garbage collector\&. It is a server\-style garbage collector, targeted for multiprocessor machines with a large amount of RAM\&. It meets GC pause time goals with high probability, while maintaining good throughput\&. The G1 collector is recommended for applications requiring large heaps (sizes of around 6 GB or larger) with limited GC latency requirements (stable and predictable pause time below 0\&.5 seconds)\&.
-.sp
+.TP
+-XX:+UseConcMarkSweepGC
+.br
+Enables the use of the CMS garbage collector for the old generation\&. Oracle recommends that you use the CMS garbage collector when application latency requirements cannot be met by the throughput (\f3-XX:+UseParallelGC\fR) garbage collector\&. The G1 garbage collector (\f3-XX:+UseG1GC\fR) is another alternative\&.
+
+By default, this option is disabled and the collector is chosen automatically based on the configuration of the machine and type of the JVM\&. When this option is enabled, the \f3-XX:+UseParNewGC\fR option is automatically set and you should not disable it, because the following combination of options has been deprecated in JDK 8: \f3-XX:+UseConcMarkSweepGC -XX:-UseParNewGC\fR\&.
+.TP
+-XX:+UseG1GC
+.br
+Enables the use of the garbage-first (G1) garbage collector\&. It is a server-style garbage collector, targeted for multiprocessor machines with a large amount of RAM\&. It meets GC pause time goals with high probability, while maintaining good throughput\&. The G1 collector is recommended for applications requiring large heaps (sizes of around 6 GB or larger) with limited GC latency requirements (stable and predictable pause time below 0\&.5 seconds)\&.
+
 By default, this option is disabled and the collector is chosen automatically based on the configuration of the machine and type of the JVM\&.
-.RE
-.PP
-\-XX:+UseGCOverheadLimit
-.RS 4
-Enables the use of a policy that limits the proportion of time spent by the JVM on GC before an
-\fBOutOfMemoryError\fR
-exception is thrown\&. This option is enabled, by default and the parallel GC will throw an
-\fBOutOfMemoryError\fR
-if more than 98% of the total time is spent on garbage collection and less than 2% of the heap is recovered\&. When the heap is small, this feature can be used to prevent applications from running for long periods of time with little or no progress\&. To disable this option, specify
-\fB\-XX:\-UseGCOverheadLimit\fR\&.
-.RE
-.PP
-\-XX:+UseNUMA
-.RS 4
-Enables performance optimization of an application on a machine with nonuniform memory architecture (NUMA) by increasing the application\*(Aqs use of lower latency memory\&. By default, this option is disabled and no optimization for NUMA is made\&. The option is only available when the parallel garbage collector is used (\fB\-XX:+UseParallelGC\fR)\&.
-.RE
-.PP
-\-XX:+UseParallelGC
-.RS 4
+.TP
+-XX:+UseGCOverheadLimit
+.br
+Enables the use of a policy that limits the proportion of time spent by the JVM on GC before an \f3OutOfMemoryError\fR exception is thrown\&. This option is enabled, by default and the parallel GC will throw an \f3OutOfMemoryError\fR if more than 98% of the total time is spent on garbage collection and less than 2% of the heap is recovered\&. When the heap is small, this feature can be used to prevent applications from running for long periods of time with little or no progress\&. To disable this option, specify \f3-XX:-UseGCOverheadLimit\fR\&.
+.TP
+-XX:+UseNUMA
+.br
+Enables performance optimization of an application on a machine with nonuniform memory architecture (NUMA) by increasing the application\&'s use of lower latency memory\&. By default, this option is disabled and no optimization for NUMA is made\&. The option is only available when the parallel garbage collector is used (\f3-XX:+UseParallelGC\fR)\&.
+.TP
+-XX:+UseParallelGC
+.br
 Enables the use of the parallel scavenge garbage collector (also known as the throughput collector) to improve the performance of your application by leveraging multiple processors\&.
-.sp
-By default, this option is disabled and the collector is chosen automatically based on the configuration of the machine and type of the JVM\&. If it is enabled, then the
-\fB\-XX:+UseParallelOldGC\fR
-option is automatically enabled, unless you explicitly disable it\&.
-.RE
-.PP
-\-XX:+UseParallelOldGC
-.RS 4
-Enables the use of the parallel garbage collector for full GCs\&. By default, this option is disabled\&. Enabling it automatically enables the
-\fB\-XX:+UseParallelGC\fR
-option\&.
-.RE
-.PP
-\-XX:+UseParNewGC
-.RS 4
-Enables the use of parallel threads for collection in the young generation\&. By default, this option is disabled\&. It is automatically enabled when you set the
-\fB\-XX:+UseConcMarkSweepGC\fR
-option\&. Using the
-\fB\-XX:+UseParNewGC\fR
-option without the
-\fB\-XX:+UseConcMarkSweepGC\fR
-option was deprecated in JDK 8\&.
-.RE
-.PP
-\-XX:+UseSerialGC
-.RS 4
+
+By default, this option is disabled and the collector is chosen automatically based on the configuration of the machine and type of the JVM\&. If it is enabled, then the \f3-XX:+UseParallelOldGC\fR option is automatically enabled, unless you explicitly disable it\&.
+.TP
+-XX:+UseParallelOldGC
+.br
+Enables the use of the parallel garbage collector for full GCs\&. By default, this option is disabled\&. Enabling it automatically enables the \f3-XX:+UseParallelGC\fR option\&.
+.TP
+-XX:+UseParNewGC
+.br
+Enables the use of parallel threads for collection in the young generation\&. By default, this option is disabled\&. It is automatically enabled when you set the \f3-XX:+UseConcMarkSweepGC\fR option\&. Using the \f3-XX:+UseParNewGC\fR option without the \f3-XX:+UseConcMarkSweepGC\fR option was deprecated in JDK 8\&.
+.TP
+-XX:+UseSerialGC
+.br
 Enables the use of the serial garbage collector\&. This is generally the best choice for small and simple applications that do not require any special functionality from garbage collection\&. By default, this option is disabled and the collector is chosen automatically based on the configuration of the machine and type of the JVM\&.
-.RE
-.PP
-\-XX:+UseStringDeduplication
-.RS 4
-Enables string deduplication\&. By default, this option is disabled\&. To use this option, you must enable the garbage\-first (G1) garbage collector\&. See the
-\fB\-XX:+UseG1GC\fR
-option\&.
-.sp
-\fIString deduplication\fR
-reduces the memory footprint of
-\fBString\fR
-objects on the Java heap by taking advantage of the fact that many
-\fBString\fR
-objects are identical\&. Instead of each
-\fBString\fR
-object pointing to its own character array, identical
-\fBString\fR
-objects can point to and share the same character array\&.
-.RE
-.PP
-\-XX:+UseTLAB
-.RS 4
-Enables the use of thread\-local allocation blocks (TLABs) in the young generation space\&. This option is enabled by default\&. To disable the use of TLABs, specify
-\fB\-XX:\-UseTLAB\fR\&.
-.RE
-.SS "Deprecated and Removed Options"
-.PP
+.TP
+-XX:+UseSHM
+.br
+On Linux, enables the JVM to use shared memory to setup large pages\&.
+
+For more information, see Large Pages\&.
+.TP
+-XX:+UseStringDeduplication
+.br
+Enables string deduplication\&. By default, this option is disabled\&. To use this option, you must enable the garbage-first (G1) garbage collector\&. See the \f3-XX:+UseG1GC\fR option\&.
+
+\fIString deduplication\fR reduces the memory footprint of \f3String\fR objects on the Java heap by taking advantage of the fact that many \f3String\fR objects are identical\&. Instead of each \f3String\fR object pointing to its own character array, identical \f3String\fR objects can point to and share the same character array\&.
+.TP
+-XX:+UseTLAB
+.br
+Enables the use of thread-local allocation blocks (TLABs) in the young generation space\&. This option is enabled by default\&. To disable the use of TLABs, specify \f3-XX:-UseTLAB\fR\&.
+.SS DEPRECATED\ AND\ REMOVED\ OPTIONS    
 These options were included in the previous release, but have since been considered unnecessary\&.
-.PP
-\-Xincgc
-.RS 4
+.TP
+-Xincgc
+.br
 Enables incremental garbage collection\&. This option was deprecated in JDK 8 with no replacement\&.
-.RE
-.PP
-\-Xrun\fIlibname\fR
-.RS 4
-Loads the specified debugging/profiling library\&. This option was superseded by the
-\fB\-agentlib\fR
-option\&.
-.RE
-.PP
-\-XX:CMSIncrementalDutyCycle=\fIpercent\fR
-.RS 4
-Sets the percentage of time (0 to 100) between minor collections that the concurrent collector is allowed to run\&. This option was deprecated in JDK 8 with no replacement, following the deprecation of the
-\fB\-XX:+CMSIncrementalMode\fR
-option\&.
-.RE
-.PP
-\-XX:CMSIncrementalDutyCycleMin=\fIpercent\fR
-.RS 4
-Sets the percentage of time (0 to 100) between minor collections that is the lower bound for the duty cycle when
-\fB\-XX:+CMSIncrementalPacing\fR
-is enabled\&. This option was deprecated in JDK 8 with no replacement, following the deprecation of the
-\fB\-XX:+CMSIncrementalMode\fR
-option\&.
-.RE
-.PP
-\-XX:+CMSIncrementalMode
-.RS 4
-Enables the incremental mode for the CMS collector\&. This option was deprecated in JDK 8 with no replacement, along with other options that start with
-\fBCMSIncremental\fR\&.
-.RE
-.PP
-\-XX:CMSIncrementalOffset=\fIpercent\fR
-.RS 4
-Sets the percentage of time (0 to 100) by which the incremental mode duty cycle is shifted to the right within the period between minor collections\&. This option was deprecated in JDK 8 with no replacement, following the deprecation of the
-\fB\-XX:+CMSIncrementalMode\fR
-option\&.
-.RE
-.PP
-\-XX:+CMSIncrementalPacing
-.RS 4
-Enables automatic adjustment of the incremental mode duty cycle based on statistics collected while the JVM is running\&. This option was deprecated in JDK 8 with no replacement, following the deprecation of the
-\fB\-XX:+CMSIncrementalMode\fR
-option\&.
-.RE
-.PP
-\-XX:CMSIncrementalSafetyFactor=\fIpercent\fR
-.RS 4
-Sets the percentage of time (0 to 100) used to add conservatism when computing the duty cycle\&. This option was deprecated in JDK 8 with no replacement, following the deprecation of the
-\fB\-XX:+CMSIncrementalMode\fR
-option\&.
-.RE
-.PP
-\-XX:CMSInitiatingPermOccupancyFraction=\fIpercent\fR
-.RS 4
+.TP
+-Xrun\fIlibname\fR
+.br
+Loads the specified debugging/profiling library\&. This option was superseded by the \f3-agentlib\fR option\&.
+.TP
+-XX:CMSIncrementalDutyCycle=\fIpercent\fR
+.br
+Sets the percentage of time (0 to 100) between minor collections that the concurrent collector is allowed to run\&. This option was deprecated in JDK 8 with no replacement, following the deprecation of the \f3-XX:+CMSIncrementalMode\fR option\&.
+.TP
+-XX:CMSIncrementalDutyCycleMin=\fIpercent\fR
+.br
+Sets the percentage of time (0 to 100) between minor collections that is the lower bound for the duty cycle when \f3-XX:+CMSIncrementalPacing\fR is enabled\&. This option was deprecated in JDK 8 with no replacement, following the deprecation of the \f3-XX:+CMSIncrementalMode\fR option\&.
+.TP
+-XX:+CMSIncrementalMode
+.br
+Enables the incremental mode for the CMS collector\&. This option was deprecated in JDK 8 with no replacement, along with other options that start with \f3CMSIncremental\fR\&.
+.TP
+-XX:CMSIncrementalOffset=\fIpercent\fR
+.br
+Sets the percentage of time (0 to 100) by which the incremental mode duty cycle is shifted to the right within the period between minor collections\&. This option was deprecated in JDK 8 with no replacement, following the deprecation of the \f3-XX:+CMSIncrementalMode\fR option\&.
+.TP
+-XX:+CMSIncrementalPacing
+.br
+Enables automatic adjustment of the incremental mode duty cycle based on statistics collected while the JVM is running\&. This option was deprecated in JDK 8 with no replacement, following the deprecation of the \f3-XX:+CMSIncrementalMode\fR option\&.
+.TP
+-XX:CMSIncrementalSafetyFactor=\fIpercent\fR
+.br
+Sets the percentage of time (0 to 100) used to add conservatism when computing the duty cycle\&. This option was deprecated in JDK 8 with no replacement, following the deprecation of the \f3-XX:+CMSIncrementalMode\fR option\&.
+.TP
+-XX:CMSInitiatingPermOccupancyFraction=\fIpercent\fR
+.br
 Sets the percentage of the permanent generation occupancy (0 to 100) at which to start a GC\&. This option was deprecated in JDK 8 with no replacement\&.
-.RE
-.PP
-\-XX:MaxPermSize=\fIsize\fR
-.RS 4
-Sets the maximum permanent generation space size (in bytes)\&. This option was deprecated in JDK 8, and superseded by the
-\fB\-XX:MaxMetaspaceSize\fR
-option\&.
-.RE
-.PP
-\-XX:PermSize=\fIsize\fR
-.RS 4
-Sets the space (in bytes) allocated to the permanent generation that triggers a garbage collection if it is exceeded\&. This option was deprecated un JDK 8, and superseded by the
-\fB\-XX:MetaspaceSize\fR
-option\&.
-.RE
-.PP
-\-XX:+UseSplitVerifier
-.RS 4
+.TP
+-XX:MaxPermSize=\fIsize\fR
+.br
+Sets the maximum permanent generation space size (in bytes)\&. This option was deprecated in JDK 8, and superseded by the \f3-XX:MaxMetaspaceSize\fR option\&.
+.TP
+-XX:PermSize=\fIsize\fR
+.br
+Sets the space (in bytes) allocated to the permanent generation that triggers a garbage collection if it is exceeded\&. This option was deprecated un JDK 8, and superseded by the \f3-XX:MetaspaceSize\fR option\&.
+.TP
+-XX:+UseSplitVerifier
+.br
 Enables splitting of the verification process\&. By default, this option was enabled in the previous releases, and verification was split into two phases: type referencing (performed by the compiler) and type checking (performed by the JVM runtime)\&. This option was deprecated in JDK 8, and verification is now split by default without a way to disable it\&.
-.RE
-.PP
-\-XX:+UseStringCache
-.RS 4
+.TP
+-XX:+UseStringCache
+.br
 Enables caching of commonly allocated strings\&. This option was removed from JDK 8 with no replacement\&.
-.RE
-.SH "PERFORMANCE TUNING EXAMPLES"
-.PP
+.SH PERFORMANCE\ TUNING\ EXAMPLES    
 The following examples show how to use experimental tuning flags to either optimize throughput or to provide lower response time\&.
 .PP
-\fBExample 1\fR
-.br
-Tuning for Higher Throughput
-.RS 4
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBjava \-d64 \-server \-XX:+AggressiveOpts \-XX:+UseLargePages \-Xmn10g  \-Xms26g \-Xmx26g\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
+\f3Example 1 Tuning for Higher Throughput\fR
+.sp     
+.nf     
+\f3java \-d64 \-server \-XX:+AggressiveOpts \-XX:+UseLargePages \-Xmn10g  \-Xms26g \-Xmx26g\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+\f3Example 2 Tuning for Lower Response Time\fR
+.sp     
+.nf     
+\f3java \-d64 \-XX:+UseG1GC \-Xms26g Xmx26g \-XX:MaxGCPauseMillis=500 \-XX:+PrintGCTimeStamp\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+.SH LARGE\ PAGES    
+Also known as huge pages, large pages are memory pages that are significantly larger than the standard memory page size (which varies depending on the processor and operating system)\&. Large pages optimize processor Translation-Lookaside Buffers\&.
 .PP
-\fBExample 2\fR
-.br
-Tuning for Lower Response Time
-.RS 4
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBjava \-d64 \-XX:+UseG1GC \-Xms26g Xmx26g \-XX:MaxGCPauseMillis=500 \-XX:+PrintGCTimeStamp\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.SH "EXIT STATUS"
+A Translation-Lookaside Buffer (TLB) is a page translation cache that holds the most-recently used virtual-to-physical address translations\&. TLB is a scarce system resource\&. A TLB miss can be costly as the processor must then read from the hierarchical page table, which may require multiple memory accesses\&. By using a larger memory page size, a single TLB entry can represent a larger memory range\&. There will be less pressure on TLB, and memory-intensive applications may have better performance\&.
+.PP
+However, large pages page memory can negatively affect system performance\&. For example, when a large mount of memory is pinned by an application, it may create a shortage of regular memory and cause excessive paging in other applications and slow down the entire system\&. Also, a system that has been up for a long time could produce excessive fragmentation, which could make it impossible to reserve enough large page memory\&. When this happens, either the OS or JVM reverts to using regular pages\&.
+.SS LARGE\ PAGES\ SUPPORT    
+Solaris and Linux support large pages\&.
+.PP
+Solaris 9 and later include Multiple Page Size Support (MPSS); no additional configuration is necessary\&. See http://www\&.oracle\&.com/technetwork/server-storage/solaris10/overview/solaris9-features-scalability-135663\&.html\&.
 .PP
-The following exit values are typically returned by the launcher when the launcher is called with the wrong arguments, serious errors, or exceptions thrown by the JVM\&. However, a Java application may choose to return any value by using the API call
-\fBSystem\&.exit(exitValue)\fR\&. The values are:
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-\fB0\fR: Successful completion
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-\fB>0\fR: An error occurred
-.RE
-.SH "SEE ALSO"
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
+The 2\&.6 kernel supports large pages\&. Some vendors have backported the code to their 2\&.4-based releases\&. To check if your system can support large page memory, try the following:
+.sp     
+.nf     
+\f3# cat /proc/meminfo | grep Huge\fP
+.fi     
+.nf     
+\f3HugePages_Total: 0\fP
+.fi     
+.nf     
+\f3HugePages_Free: 0\fP
+.fi     
+.nf     
+\f3Hugepagesize: 2048 kB\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+If the output shows the three "Huge" variables, then your system can support large page memory but it needs to be configured\&. If the command prints nothing, then your system does not support large pages\&. To configure the system to use large page memory, login as \f3root\fR, and then follow these steps:
+.TP 0.4i    
+1\&.
+If you are using the option \f3-XX:+UseSHM\fR (instead of \f3-XX:+UseHugeTLBFS\fR), then increase the \f3SHMMAX\fR value\&. It must be larger than the Java heap size\&. On a system with 4 GB of physical RAM (or less), the following will make all the memory sharable:
+.sp     
+.nf     
+\f3# echo 4294967295 > /proc/sys/kernel/shmmax\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP 0.4i    
+2\&.
+If you are using the option \f3-XX:+UseSHM\fR or \f3-XX:+UseHugeTLBFS\fR, then specify the number of large pages\&. In the following example, 3 GB of a 4 GB system are reserved for large pages (assuming a large page size of 2048kB, then 3 GB = 3 * 1024 MB = 3072 MB = 3072 * 1024 kB = 3145728 kB and 3145728 kB / 2048 kB = 1536):
+.sp     
+.nf     
+\f3# echo 1536 > /proc/sys/vm/nr_hugepages\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.PP
+Note
+.PP
+Note that the values contained in \f3/proc\fR will reset after you reboot your system, so may want to set them in an initialization script (for example, \f3rc\&.local\fR or \f3sysctl\&.conf\fR)\&.
+.PP
+If you configure (or resize) the OS kernel parameters \f3/proc/sys/kernel/shmmax\fR or \f3/proc/sys/vm/nr_hugepages\fR, Java processes may allocate large pages for areas in addition to the Java heap\&. These steps can allocate large pages for the following areas:
+.PP
+Java heap
+.PP
+Permanent generation
+.PP
+Code cache
+.PP
+The marking bitmap data structure for the parallel GC
+.PP
+Consequently, if you configure the \f3nr_hugepages\fR parameter to the size of the Java heap, then the JVM can fail in allocating the permanent generation and code cache areas on large pages because these areas are quite large in size\&.
+.SH EXIT\ STATUS    
+The following exit values are typically returned by the launcher when the launcher is called with the wrong arguments, serious errors, or exceptions thrown by the JVM\&. However, a Java application may choose to return any value by using the API call \f3System\&.exit(exitValue)\fR\&. The values are:
+.TP 0.2i    
+\(bu
+\f30\fR: Successful completion
+.TP 0.2i    
+\(bu
+\f3>0\fR: An error occurred
+.SH SEE\ ALSO    
+.TP 0.2i    
+\(bu
 javac(1)
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
+.TP 0.2i    
+\(bu
 jdb(1)
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
+.TP 0.2i    
+\(bu
 javah(1)
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
+.TP 0.2i    
+\(bu
 jar(1)
-.RE
-.br
-'pl 8.5i
-'bp
+.TP 0.2i    
+\(bu
+jstat(1)
+.RE
+.br
+'pl 8.5i
+'bp
--- a/src/solaris/doc/sun/man/man1/javac.1	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/solaris/doc/sun/man/man1/javac.1	Tue Nov 04 17:20:19 2014 +0000
@@ -1,2116 +1,1370 @@
 '\" t
-.\" Copyright (c) 1994, 2014, 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.
-.\"
-.\" Title: javac
-.\" Language: English
-.\" Date: 8 August 2014
-.\" SectDesc: Basic Tools
-.\" Software: JDK 8
-.\" Arch: generic
-.\" Part Number: E38207-03
+.\"  Copyright (c) 1994, 2015, 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.
+.\"
+.\"     Arch: generic
+.\"     Software: JDK 8
+.\"     Date: 03 March 2015
+.\"     SectDesc: Basic Tools
+.\"     Title: javac.1
 .\"
 .if n .pl 99999
-.TH "javac" "1" "8 August 2014" "JDK 8" "Basic Tools"
-.\" -----------------------------------------------------------------
-.\" * Define some portability stuff
-.\" -----------------------------------------------------------------
-.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-.\" http://bugs.debian.org/507673
-.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
-.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-.ie \n(.g .ds Aq \(aq
-.el       .ds Aq '
-.\" -----------------------------------------------------------------
-.\" * set default formatting
-.\" -----------------------------------------------------------------
-.\" disable hyphenation
-.nh
-.\" disable justification (adjust text to left margin only)
-.ad l
-.\" -----------------------------------------------------------------
-.\" * MAIN CONTENT STARTS HERE *
-.\" -----------------------------------------------------------------
-.SH "NAME"
+.TH javac 1 "03 March 2015" "JDK 8" "Basic Tools"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el       .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+
+.SH NAME    
 javac \- Reads Java class and interface definitions and compiles them into bytecode and class files\&.
-.SH "SYNOPSIS"
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
+.SH SYNOPSIS    
+.sp     
+.nf     
+
 \fBjavac\fR [ \fIoptions\fR ] [ \fIsourcefiles\fR ] [ \fIclasses\fR] [ \fI@argfiles\fR ]
-.fi
-.if n \{\
-.RE
-.\}
-.PP
+.fi     
+.sp     
 Arguments can be in any order:
-.PP
+.TP     
 \fIoptions\fR
-.RS 4
-Command\-line options\&. See Options\&.
-.RE
-.PP
+Command-line options\&. See Options\&.
+.TP     
 \fIsourcefiles\fR
-.RS 4
-One or more source files to be compiled (such as
-\fBMyClass\&.java\fR)\&.
-.RE
-.PP
+One or more source files to be compiled (such as \f3MyClass\&.java\fR)\&.
+.TP     
 \fIclasses\fR
-.RS 4
-One or more classes to be processed for annotations (such as
-\fBMyPackage\&.MyClass\fR)\&.
-.RE
-.PP
+One or more classes to be processed for annotations (such as \f3MyPackage\&.MyClass\fR)\&.
+.TP     
 \fI@argfiles\fR
-.RS 4
-One or more files that list options and source files\&. The
-\fB\-J\fR
-options are not allowed in these files\&. See Command\-Line Argument Files\&.
-.RE
-.SH "DESCRIPTION"
+One or more files that list options and source files\&. The \f3-J\fR options are not allowed in these files\&. See Command-Line Argument Files\&.
+.SH DESCRIPTION    
+The \f3javac\fR command reads class and interface definitions, written in the Java programming language, and compiles them into bytecode class files\&. The \f3javac\fR command can also process annotations in Java source files and classes\&.
 .PP
-The
-\fBjavac\fR
-command reads class and interface definitions, written in the Java programming language, and compiles them into bytecode class files\&. The
-\fBjavac\fR
-command can also process annotations in Java source files and classes\&.
-.PP
-There are two ways to pass source code file names to
-\fBjavac\fR\&.
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
+There are two ways to pass source code file names to \f3javac\fR\&.
+.TP 0.2i    
+\(bu
 For a small number of source files, list the file names on the command line\&.
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-For a large number of source files, list the file names in a file that is separated by blanks or line breaks\&. Use the list file name preceded by an at sign (@) with the
-\fBjavac\fR
-command\&.
-.RE
-.PP
-Source code file names must have \&.java suffixes, class file names must have \&.class suffixes, and both source and class files must have root names that identify the class\&. For example, a class called
-\fBMyClass\fR
-would be written in a source file called
-\fBMyClass\&.java\fR
-and compiled into a bytecode class file called
-\fBMyClass\&.class\fR\&.
-.PP
-Inner class definitions produce additional class files\&. These class files have names that combine the inner and outer class names, such as
-\fBMyClass$MyInnerClass\&.class\fR\&.
-.PP
-Arrange source files in a directory tree that reflects their package tree\&. For example, if all of your source files are in
-\fB/workspace\fR, then put the source code for
-\fBcom\&.mysoft\&.mypack\&.MyClass\fR
-in
-\fB/workspace/com/mysoft/mypack/MyClass\&.java\fR\&.
-.PP
-By default, the compiler puts each class file in the same directory as its source file\&. You can specify a separate destination directory with the
-\fB\-d\fR
-option\&.
-.SH "OPTIONS"
+.TP 0.2i    
+\(bu
+For a large number of source files, list the file names in a file that is separated by blanks or line breaks\&. Use the list file name preceded by an at sign (@) with the \f3javac\fR command\&.
 .PP
-The compiler has a set of standard options that are supported on the current development environment\&. An additional set of nonstandard options are specific to the current virtual machine and compiler implementations and are subject to change in the future\&. Nonstandard options begin with the
-\fB\-X\fR
-option\&.
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-See also Cross\-Compilation Options
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-See also Nonstandard Options
-.RE
-.SS "Standard Options"
+Source code file names must have \&.java suffixes, class file names must have \&.class suffixes, and both source and class files must have root names that identify the class\&. For example, a class called \f3MyClass\fR would be written in a source file called \f3MyClass\&.java\fR and compiled into a bytecode class file called \f3MyClass\&.class\fR\&.
 .PP
-\-A\fIkey\fR[\fI=value\fR]
-.RS 4
-Specifies options to pass to annotation processors\&. These options are not interpreted by
-\fBjavac\fR
-directly, but are made available for use by individual processors\&. The
-\fBkey\fR
-value should be one or more identifiers separated by a dot (\&.)\&.
-.RE
+Inner class definitions produce additional class files\&. These class files have names that combine the inner and outer class names, such as \f3MyClass$MyInnerClass\&.class\fR\&.
 .PP
-\-cp \fIpath\fR or \-classpath \fIpath\fR
-.RS 4
-Specifies where to find user class files, and (optionally) annotation processors and source files\&. This class path overrides the user class path in the
-\fBCLASSPATH\fR
-environment variable\&. If neither
-\fBCLASSPATH\fR,
-\fB\-cp\fR
-nor
-\fB\-classpath\fR
-is specified, then the user
-\fIclass path\fR
-is the current directory\&. See Setting the Class Path \&.
-.sp
-If the
-\fB\-sourcepath\fR
-option is not specified, then the user class path is also searched for source files\&.
-.sp
-If the
-\fB\-processorpath\fR
-option is not specified, then the class path is also searched for annotation processors\&.
-.RE
-.PP
-\-Djava\&.ext\&.dirs=\fIdirectories\fR
-.RS 4
-Overrides the location of installed extensions\&.
-.RE
-.PP
-\-Djava\&.endorsed\&.dirs=\fIdirectories\fR
-.RS 4
-Overrides the location of the endorsed standards path\&.
-.RE
+Arrange source files in a directory tree that reflects their package tree\&. For example, if all of your source files are in \f3/workspace\fR, then put the source code for \f3com\&.mysoft\&.mypack\&.MyClass\fR in \f3/workspace/com/mysoft/mypack/MyClass\&.java\fR\&.
 .PP
-\-d \fIdirectory\fR
-.RS 4
-Sets the destination directory for class files\&. The directory must already exist because
-\fBjavac\fR
-does not create it\&. If a class is part of a package, then
-\fBjavac\fR
-puts the class file in a subdirectory that reflects the package name and creates directories as needed\&.
-.sp
-If you specify
-\fB\-d\fR
-\fB/home/myclasses\fR
-and the class is called
-\fBcom\&.mypackage\&.MyClass\fR, then the class file is
-\fB/home/myclasses/com/mypackage/MyClass\&.class\fR\&.
-.sp
-If the
-\fI\-d\fR
-option is not specified, then
-\fBjavac\fR
-puts each class file in the same directory as the source file from which it was generated\&.
-.sp
-\fBNote:\fR
-The directory specified by the
-\fI\-d\fR
-option is not automatically added to your user class path\&.
-.RE
-.PP
-\-deprecation
-.RS 4
-Shows a description of each use or override of a deprecated member or class\&. Without the
-\fB\-deprecation\fR
-option,
-\fBjavac\fR
-shows a summary of the source files that use or override deprecated members or classes\&. The
-\fB\-deprecation\fR
-option is shorthand for
-\fB\-Xlint:deprecation\fR\&.
-.RE
-.PP
-\-encoding \fIencoding\fR
-.RS 4
-Sets the source file encoding name, such as EUC\-JP and UTF\-8\&. If the
-\fB\-encoding\fR
-option is not specified, then the platform default converter is used\&.
-.RE
-.PP
-\-endorseddirs \fIdirectories\fR
-.RS 4
+By default, the compiler puts each class file in the same directory as its source file\&. You can specify a separate destination directory with the \f3-d\fR option\&.
+.SH OPTIONS    
+The compiler has a set of standard options that are supported on the current development environment\&. An additional set of nonstandard options are specific to the current virtual machine and compiler implementations and are subject to change in the future\&. Nonstandard options begin with the \f3-X\fR option\&.
+.TP 0.2i    
+\(bu
+See also Cross-Compilation Options
+.TP 0.2i    
+\(bu
+See also Nonstandard Options
+.SS STANDARD\ OPTIONS    
+.TP
+-A\fIkey\fR[\fI=value\fR]
+.br
+Specifies options to pass to annotation processors\&. These options are not interpreted by \f3javac\fR directly, but are made available for use by individual processors\&. The \f3key\fR value should be one or more identifiers separated by a dot (\&.)\&.
+.TP
+-cp \fIpath\fR or -classpath \fIpath\fR
+.br
+Specifies where to find user class files, and (optionally) annotation processors and source files\&. This class path overrides the user class path in the \f3CLASSPATH\fR environment variable\&. If neither \f3CLASSPATH\fR, \f3-cp\fR nor \f3-classpath\fR is specified, then the user \fIclass path\fR is the current directory\&. See Setting the Class Path\&.
+
+If the \f3-sourcepath\fR option is not specified, then the user class path is also searched for source files\&.
+
+If the \f3-processorpath\fR option is not specified, then the class path is also searched for annotation processors\&.
+.TP
+-Djava\&.ext\&.dirs=\fIdirectories\fR
+.br
+Overrides the location of installed extensions\&.
+.TP
+-Djava\&.endorsed\&.dirs=\fIdirectories\fR
+.br
 Overrides the location of the endorsed standards path\&.
-.RE
-.PP
-\-extdirs \fIdirectories\fR
-.RS 4
-Overrides the location of the
-\fBext\fR
-directory\&. The directories variable is a colon\-separated list of directories\&. Each JAR file in the specified directories is searched for class files\&. All JAR files found become part of the class path\&.
-.sp
-If you are cross\-compiling (compiling classes against bootstrap and extension classes of a different Java platform implementation), then this option specifies the directories that contain the extension classes\&. See Cross\-Compilation Options for more information\&.
-.RE
-.PP
-\-g
-.RS 4
+.TP
+-d \fIdirectory\fR
+.br
+Sets the destination directory for class files\&. The directory must already exist because \f3javac\fR does not create it\&. If a class is part of a package, then \f3javac\fR puts the class file in a subdirectory that reflects the package name and creates directories as needed\&.
+
+If you specify \f3-d\fR\f3/home/myclasses\fR and the class is called \f3com\&.mypackage\&.MyClass\fR, then the class file is \f3/home/myclasses/com/mypackage/MyClass\&.class\fR\&.
+
+If the \fI-d\fR option is not specified, then \f3javac\fR puts each class file in the same directory as the source file from which it was generated\&.
+
+\fINote:\fR The directory specified by the \fI-d\fR option is not automatically added to your user class path\&.
+.TP
+-deprecation
+.br
+Shows a description of each use or override of a deprecated member or class\&. Without the \f3-deprecation\fR option, \f3javac\fR shows a summary of the source files that use or override deprecated members or classes\&. The \f3-deprecation\fR option is shorthand for \f3-Xlint:deprecation\fR\&.
+.TP
+-encoding \fIencoding\fR
+.br
+Sets the source file encoding name, such as EUC-JP and UTF-8\&. If the \f3-encoding\fR option is not specified, then the platform default converter is used\&.
+.TP
+-endorseddirs \fIdirectories\fR
+.br
+Overrides the location of the endorsed standards path\&.
+.TP
+-extdirs \fIdirectories\fR
+.br
+Overrides the location of the \f3ext\fR directory\&. The directories variable is a colon-separated list of directories\&. Each JAR file in the specified directories is searched for class files\&. All JAR files found become part of the class path\&.
+
+If you are cross-compiling (compiling classes against bootstrap and extension classes of a different Java platform implementation), then this option specifies the directories that contain the extension classes\&. See Cross-Compilation Options for more information\&.
+.TP
+-g
+.br
 Generates all debugging information, including local variables\&. By default, only line number and source file information is generated\&.
-.RE
-.PP
-\-g:none
-.RS 4
+.TP
+-g:none
+.br
 Does not generate any debugging information\&.
-.RE
-.PP
-\-g:[\fIkeyword list\fR]
-.RS 4
+.TP
+-g:[\fIkeyword list\fR]
+.br
 Generates only some kinds of debugging information, specified by a comma separated list of keywords\&. Valid keywords are:
-.PP
+.RS     
+.TP     
 source
-.RS 4
 Source file debugging information\&.
-.RE
-.PP
+.TP     
 lines
-.RS 4
 Line number debugging information\&.
-.RE
-.PP
+.TP     
 vars
-.RS 4
 Local variable debugging information\&.
-.RE
-.RE
-.PP
-\-help
-.RS 4
+.RE     
+
+.TP
+-help
+.br
 Prints a synopsis of standard options\&.
-.RE
-.PP
-\-implicit:[\fIclass, none\fR]
-.RS 4
-Controls the generation of class files for implicitly loaded source files\&. To automatically generate class files, use
-\fB\-implicit:class\fR\&. To suppress class file generation, use
-\fB\-implicit:none\fR\&. If this option is not specified, then the default is to automatically generate class files\&. In this case, the compiler issues a warning if any such class files are generated when also doing annotation processing\&. The warning is not issued when the
-\fB\-implicit\fR
-option is set explicitly\&. See Searching for Types\&.
-.RE
-.PP
-\-J\fIoption\fR
-.RS 4
-Passes
-\fBoption\fR
-to the Java Virtual Machine (JVM), where option is one of the options described on the reference page for the Java launcher\&. For example,
-\fB\-J\-Xms48m\fR
-sets the startup memory to 48 MB\&. See
-java(1)\&.
-.sp
-\fBNote:\fR
-The
-\fICLASSPATH\fR,
-\fB\-classpath\fR,
-\fB\-bootclasspath\fR, and
-\fB\-extdirs\fR
-options do not specify the classes used to run
-\fBjavac\fR\&. Trying to customize the compiler implementation with these options and variables is risky and often does not accomplish what you want\&. If you must customize the complier implementation, then use the
-\fB\-J\fR
-option to pass options through to the underlying Java launcher\&.
-.RE
-.PP
-\-nowarn
-.RS 4
-Disables warning messages\&. This option operates the same as the
-\fB\-Xlint:none\fR
-option\&.
-.RE
-.PP
-\-parameters
-.RS 4
-Stores formal parameter names of constructors and methods in the generated class file so that the method
-\fBjava\&.lang\&.reflect\&.Executable\&.getParameters\fR
-from the Reflection API can retrieve them\&.
-.RE
-.PP
-\-proc: [\fInone\fR, \fIonly\fR]
-.RS 4
-Controls whether annotation processing and compilation are done\&.
-\fB\-proc:none\fR
-means that compilation takes place without annotation processing\&.
-\fB\-proc:only\fR
-means that only annotation processing is done, without any subsequent compilation\&.
-.RE
-.PP
-\-processor \fIclass1\fR [,\fIclass2\fR,\fIclass3\fR\&.\&.\&.]
-.RS 4
+.TP
+-implicit:[\fIclass, none\fR]
+.br
+Controls the generation of class files for implicitly loaded source files\&. To automatically generate class files, use \f3-implicit:class\fR\&. To suppress class file generation, use \f3-implicit:none\fR\&. If this option is not specified, then the default is to automatically generate class files\&. In this case, the compiler issues a warning if any such class files are generated when also doing annotation processing\&. The warning is not issued when the \f3-implicit\fR option is set explicitly\&. See Searching for Types\&.
+.TP
+-J\fIoption\fR
+.br
+Passes \f3option\fR to the Java Virtual Machine (JVM), where option is one of the options described on the reference page for the Java launcher\&. For example, \f3-J-Xms48m\fR sets the startup memory to 48 MB\&. See java(1)\&.
+
+\fINote:\fR The \fICLASSPATH\fR, \f3-classpath\fR, \f3-bootclasspath\fR, and \f3-extdirs\fR options do not specify the classes used to run \f3javac\fR\&. Trying to customize the compiler implementation with these options and variables is risky and often does not accomplish what you want\&. If you must customize the complier implementation, then use the \f3-J\fR option to pass options through to the underlying \f3\fRJava launcher\&.
+.TP
+-nowarn
+.br
+Disables warning messages\&. This option operates the same as the \f3-Xlint:none\fR option\&.
+.TP
+-parameters
+.br
+Stores formal parameter names of constructors and methods in the generated class file so that the method \f3java\&.lang\&.reflect\&.Executable\&.getParameters\fR from the Reflection API can retrieve them\&.
+.TP
+-proc: [\fInone\fR, \fIonly\fR]
+.br
+Controls whether annotation processing and compilation are done\&. \f3-proc:none\fR means that compilation takes place without annotation processing\&. \f3-proc:only\fR means that only annotation processing is done, without any subsequent compilation\&.
+.TP
+-processor \fIclass1\fR [,\fIclass2\fR,\fIclass3\fR\&.\&.\&.]
+.br
 Names of the annotation processors to run\&. This bypasses the default discovery process\&.
-.RE
-.PP
-\-processorpath \fIpath\fR
-.RS 4
+.TP
+-processorpath \fIpath\fR
+.br
 Specifies where to find annotation processors\&. If this option is not used, then the class path is searched for processors\&.
-.RE
-.PP
-\-s \fIdir\fR
-.RS 4
-Specifies the directory where to place the generated source files\&. The directory must already exist because
-\fBjavac\fR
-does not create it\&. If a class is part of a package, then the compiler puts the source file in a subdirectory that reflects the package name and creates directories as needed\&.
-.sp
-If you specify
-\fB\-s /home/mysrc\fR
-and the class is called
-\fBcom\&.mypackage\&.MyClass\fR, then the source file is put in
-\fB/home/mysrc/com/mypackage/MyClass\&.java\fR\&.
-.RE
-.PP
-\-source \fIrelease\fR
-.RS 4
-Specifies the version of source code accepted\&. The following values for
-\fBrelease\fR
-are allowed:
-.PP
+.TP
+-s \fIdir\fR
+.br
+Specifies the directory where to place the generated source files\&. The directory must already exist because \f3javac\fR does not create it\&. If a class is part of a package, then the compiler puts the source file in a subdirectory that reflects the package name and creates directories as needed\&.
+
+If you specify \f3-s /home/mysrc\fR and the class is called \f3com\&.mypackage\&.MyClass\fR, then the source file is put in \f3/home/mysrc/com/mypackage/MyClass\&.java\fR\&.
+.TP
+-source \fIrelease\fR
+.br
+Specifies the version of source code accepted\&. The following values for \f3release\fR are allowed:
+.RS     
+.TP     
 1\&.3
-.RS 4
 The compiler does not support assertions, generics, or other language features introduced after Java SE 1\&.3\&.
-.RE
-.PP
+.TP     
 1\&.4
-.RS 4
 The compiler accepts code containing assertions, which were introduced in Java SE 1\&.4\&.
-.RE
-.PP
+.TP     
 1\&.5
-.RS 4
 The compiler accepts code containing generics and other language features introduced in Java SE 5\&.
-.RE
-.PP
+.TP     
 5
-.RS 4
 Synonym for 1\&.5\&.
-.RE
-.PP
+.TP     
 1\&.6
-.RS 4
 No language changes were introduced in Java SE 6\&. However, encoding errors in source files are now reported as errors instead of warnings as in earlier releases of Java Platform, Standard Edition\&.
-.RE
-.PP
+.TP     
 6
-.RS 4
 Synonym for 1\&.6\&.
-.RE
-.PP
+.TP     
 1\&.7
-.RS 4
 The compiler accepts code with features introduced in Java SE 7\&.
-.RE
-.PP
+.TP     
 7
-.RS 4
 Synonym for 1\&.7\&.
-.RE
-.PP
+.TP     
 1\&.8
-.RS 4
 This is the default value\&. The compiler accepts code with features introduced in Java SE 8\&.
-.RE
-.PP
+.TP     
 8
-.RS 4
 Synonym for 1\&.8\&.
-.RE
-.RE
-.PP
-\-sourcepath \fIsourcepath\fR
-.RS 4
+.RE     
+
+.TP
+-sourcepath \fIsourcepath\fR
+.br
 Specifies the source code path to search for class or interface definitions\&. As with the user class path, source path entries are separated by colons (:) on Oracle Solaris and semicolons on Windows and can be directories, JAR archives, or ZIP archives\&. If packages are used, then the local path name within the directory or archive must reflect the package name\&.
-.sp
-\fBNote:\fR
-Classes found through the class path might be recompiled when their source files are also found\&. See Searching for Types\&.
-.RE
-.PP
-\-verbose
-.RS 4
+
+\fINote:\fR Classes found through the class path might be recompiled when their source files are also found\&. See Searching for Types\&.
+.TP
+-verbose
+.br
 Uses verbose output, which includes information about each class loaded and each source file compiled\&.
-.RE
-.PP
-\-version
-.RS 4
+.TP
+-version
+.br
 Prints release information\&.
-.RE
-.PP
-\-werror
-.RS 4
+.TP
+-werror
+.br
 Terminates compilation when warnings occur\&.
-.RE
-.PP
-\-X
-.RS 4
+.TP
+-X
+.br
 Displays information about nonstandard options and exits\&.
-.RE
-.SS "Cross\-Compilation Options"
-.PP
-By default, classes are compiled against the bootstrap and extension classes of the platform that
-\fBjavac\fR
-shipped with\&. But
-\fBjavac\fR
-also supports cross\-compiling, where classes are compiled against a bootstrap and extension classes of a different Java platform implementation\&. It is important to use the
-\fB\-bootclasspath\fR
-and
-\fB\-extdirs\fR
-options when cross\-compiling\&.
-.PP
-\-target \fIversion\fR
-.RS 4
+.SS CROSS-COMPILATION\ OPTIONS    
+By default, classes are compiled against the bootstrap and extension classes of the platform that \f3javac\fR shipped with\&. But \f3javac\fR also supports cross-compiling, where classes are compiled against a bootstrap and extension classes of a different Java platform implementation\&. It is important to use the \f3-bootclasspath\fR and \f3-extdirs\fR options when cross-compiling\&.
+.TP
+-target \fIversion\fR
+.br
 Generates class files that target a specified release of the virtual machine\&. Class files will run on the specified target and on later releases, but not on earlier releases of the JVM\&. Valid targets are 1\&.1, 1\&.2, 1\&.3, 1\&.4, 1\&.5 (also 5), 1\&.6 (also 6), 1\&.7 (also 7), and 1\&.8 (also 8)\&.
-.sp
-The default for the
-\fB\-target\fR
-option depends on the value of the
-\fB\-source\fR
-option:
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-If the
-\fB\-source\fR
-option is not specified, then the value of the
-\fB\-target\fR
-option is 1\&.8
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-If the
-\fB\-source\fR
-option is 1\&.2, then the value of the
-\fB\-target\fR
-option is 1\&.4
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-If the
-\fB\-source\fR
-option is 1\&.3, then the value of the
-\fB\-target\fR
-option is 1\&.4
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-If the
-\fB\-source\fR
-option is 1\&.5, then the value of the
-\fB\-target\fR
-option is 1\&.8
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-If the
-\fB\-source\fR
-option is 1\&.6, then the value of the
-\fB\-target\fR
-is option 1\&.8
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-If the
-\fB\-source\fR
-option is 1\&.7, then the value of the
-\fB\-target\fR
-is option 1\&.8
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-For all other values of the
-\fB\-source\fR
-option, the value of the
-\fB\-target\fR
-option is the value of the
-\fB\-source\fR
-option\&.
-.RE
-.RE
+
+The default for the \f3-target\fR option depends on the value of the \f3-source\fR option:
+.RS     
+.TP 0.2i    
+\(bu
+If the \f3-source\fR option is not specified, then the value of the \f3-target\fR option is 1\&.8
+.TP 0.2i    
+\(bu
+If the \f3-source\fR option is 1\&.2, then the value of the \f3-target\fR option is 1\&.4
+.TP 0.2i    
+\(bu
+If the \f3-source\fR option is 1\&.3, then the value of the \f3-target\fR option is 1\&.4
+.TP 0.2i    
+\(bu
+If the \f3-source\fR option is 1\&.5, then the value of the \f3-target\fR option is 1\&.8
+.TP 0.2i    
+\(bu
+If the \f3-source\fR option is 1\&.6, then the value of the \f3-target\fR is option 1\&.8
+.TP 0.2i    
+\(bu
+If the \f3-source\fR option is 1\&.7, then the value of the \f3-target\fR is option 1\&.8
+.TP 0.2i    
+\(bu
+For all other values of the \f3-source\fR option, the value of the \f3-target\fR option is the value of the \f3-source\fR option\&.
+.RE     
+
+.TP
+-bootclasspath \fIbootclasspath\fR
+.br
+Cross-compiles against the specified set of boot classes\&. As with the user class path, boot class path entries are separated by colons (:) and can be directories, JAR archives, or ZIP archives\&.
+.SS COMPACT\ PROFILE\ OPTION    
+Beginning with JDK 8, the \f3javac\fR compiler supports compact profiles\&. With compact profiles, applications that do not require the entire Java platform can be deployed and run with a smaller footprint\&. The compact profiles feature could be used to shorten the download time for applications from app stores\&. This feature makes for more compact deployment of Java applications that bundle the JRE\&. This feature is also useful in small devices\&.
 .PP
-\-bootclasspath \fIbootclasspath\fR
-.RS 4
-Cross\-compiles against the specified set of boot classes\&. As with the user class path, boot class path entries are separated by colons (:) and can be directories, JAR archives, or ZIP archives\&.
-.RE
-.SS "Compact Profile Option"
-.PP
-Beginning with JDK 8, the
-\fBjavac\fR
-compiler supports compact profiles\&. With compact profiles, applications that do not require the entire Java platform can be deployed and run with a smaller footprint\&. The compact profiles feature could be used to shorten the download time for applications from app stores\&. This feature makes for more compact deployment of Java applications that bundle the JRE\&. This feature is also useful in small devices\&.
-.PP
-The supported profile values are
-\fBcompact1\fR,
-\fBcompact2\fR, and
-\fBcompact3\fR\&. These are additive layers\&. Each higher\-numbered compact profile contains all of the APIs in profiles with smaller number names\&.
-.PP
-\-profile
-.RS 4
+The supported profile values are \f3compact1\fR, \f3compact2\fR, and \f3compact3\fR\&. These are additive layers\&. Each higher-numbered compact profile contains all of the APIs in profiles with smaller number names\&.
+.TP
+-profile
+.br
 When using compact profiles, this option specifies the profile name when compiling\&. For example:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBjavac \-profile compact1 Hello\&.java\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
+.sp     
+.nf     
+\f3javac \-profile compact1 Hello\&.java\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
 javac does not compile source code that uses any Java SE APIs that is not in the specified profile\&. Here is an example of the error message that results from attempting to compile such source code:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBcd jdk1\&.8\&.0/bin\fR
-\fB\&./javac \-profile compact1 Paint\&.java\fR
-\fBPaint\&.java:5: error: Applet is not available in profile \*(Aqcompact1\*(Aq\fR
-\fBimport java\&.applet\&.Applet;\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-In this example, you can correct the error by modifying the source to not use the
-\fBApplet\fR
-class\&. You could also correct the error by compiling without the \-profile option\&. Then the compilation would be run against the full set of Java SE APIs\&. (None of the compact profiles include the
-\fBApplet\fR
-class\&.)
-.sp
-An alternative way to compile with compact profiles is to use the
-\fB\-bootclasspath\fR
-option to specify a path to an
-\fBrt\&.jar\fR
-file that specifies a profile\*(Aqs image\&. Using the
-\fB\-profile\fR
-option instead does not require a profile image to be present on the system at compile time\&. This is useful when cross\-compiling\&.
-.RE
-.SS "Nonstandard Options"
-.PP
-\-Xbootclasspath/p:\fIpath\fR
-.RS 4
+.sp     
+.nf     
+\f3cd jdk1\&.8\&.0/bin\fP
+.fi     
+.nf     
+\f3\&./javac \-profile compact1 Paint\&.java\fP
+.fi     
+.nf     
+\f3Paint\&.java:5: error: Applet is not available in profile \&'compact1\&'\fP
+.fi     
+.nf     
+\f3import java\&.applet\&.Applet;\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+In this example, you can correct the error by modifying the source to not use the \f3Applet\fR class\&. You could also correct the error by compiling without the -profile option\&. Then the compilation would be run against the full set of Java SE APIs\&. (None of the compact profiles include the \f3Applet\fR class\&.)
+
+An alternative way to compile with compact profiles is to use the \f3-bootclasspath\fR option to specify a path to an \f3rt\&.jar\fR file that specifies a profile\&'s image\&. Using the \f3-profile\fR option instead does not require a profile image to be present on the system at compile time\&. This is useful when cross-compiling\&.
+.SS NONSTANDARD\ OPTIONS    
+.TP
+-Xbootclasspath/p:\fIpath\fR
+.br
 Adds a suffix to the bootstrap class path\&.
-.RE
-.PP
-\-Xbootclasspath/a:\fIpath\fR
-.RS 4
+.TP
+-Xbootclasspath/a:\fIpath\fR
+.br
 Adds a prefix to the bootstrap class path\&.
-.RE
-.PP
-\-Xbootclasspath/:\fIpath\fR
-.RS 4
+.TP
+-Xbootclasspath/:\fIpath\fR
+.br
 Overrides the location of the bootstrap class files\&.
-.RE
-.PP
-\-Xdoclint:[\-]\fIgroup\fR [\fI/access\fR]
-.RS 4
-Enables or disables specific groups of checks, where
-\fIgroup\fR
-is one of the following values:
-\fBaccessibility\fR,
-\fBsyntax\fR,
-\fBreference\fR,
-\fBhtml\fR
-or
-\fBmissing\fR\&. For more information about these groups of checks see the
-\fB\-Xdoclint\fR
-option of the
-\fBjavadoc\fR
-command\&. The
-\fB\-Xdoclint\fR
-option is disabled by default in the
-\fBjavac\fR
-command\&.
-.sp
-The variable
-\fIaccess\fR
-specifies the minimum visibility level of classes and members that the
-\fB\-Xdoclint\fR
-option checks\&. It can have one of the following values (in order of most to least visible) :
-\fBpublic\fR,
-\fBprotected\fR,
-\fBpackage\fR
-and
-\fBprivate\fR\&. For example, the following option checks classes and members (with all groups of checks) that have the access level protected and higher (which includes protected, package and public):
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-Xdoclint:all/protected\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
+.TP
+-Xdoclint:[-]\fIgroup\fR [\fI/access\fR]
+.br
+Enables or disables specific groups of checks, where \fIgroup\fR is one of the following values: \f3accessibility\fR, \f3syntax\fR, \f3reference\fR, \f3html\fR or \f3missing\fR\&. For more information about these groups of checks see the \f3-Xdoclint\fR option of the \f3javadoc\fR command\&. The \f3-Xdoclint\fR option is disabled by default in the \f3javac\fR command\&.
+
+The variable \fIaccess\fR specifies the minimum visibility level of classes and members that the \f3-Xdoclint\fR option checks\&. It can have one of the following values (in order of most to least visible) : \f3public\fR, \f3protected\fR, \f3package\fR and \f3private\fR\&. For example, the following option checks classes and members (with all groups of checks) that have the access level protected and higher (which includes protected, package and public):
+.sp     
+.nf     
+\f3\-Xdoclint:all/protected\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
 The following option enables all groups of checks for all access levels, except it will not check for HTML errors for classes and members that have access level package and higher (which includes package and public):
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-Xdoclint:all,\-html/package\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
-\-Xdoclint:none
-.RS 4
+.sp     
+.nf     
+\f3\-Xdoclint:all,\-html/package\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP
+-Xdoclint:none
+.br
 Disables all groups of checks\&.
-.RE
-.PP
-\-Xdoclint:all[\fI/access\fR]
-.RS 4
+.TP
+-Xdoclint:all[\fI/access\fR]
+.br
 Enables all groups of checks\&.
-.RE
-.PP
-\-Xlint
-.RS 4
-Enables all recommended warnings\&. In this release, enabling all available warnings is recommended\&.
-.RE
-.PP
-\-Xlint:all
-.RS 4
-Enables all recommended warnings\&. In this release, enabling all available warnings is recommended\&.
-.RE
-.PP
-\-Xlint:none
-.RS 4
+.TP
+-Xlint
+.br
+\fI\fREnables all recommended warnings\&. In this release, enabling all available warnings is recommended\&.
+.TP
+-Xlint:all
+.br
+\fI\fREnables all recommended warnings\&. In this release, enabling all available warnings is recommended\&.
+.TP
+-Xlint:none
+.br
 Disables all warnings\&.
-.RE
-.PP
-\-Xlint:\fIname\fR
-.RS 4
-Disables warning name\&. See Enable or Disable Warnings with the \-Xlint Option for a list of warnings you can disable with this option\&.
-.RE
-.PP
-\-Xlint:\fI\-name\fR
-.RS 4
-Disables warning name\&. See Enable or Disable Warnings with the \-Xlint Option with the
-\fB\-Xlint\fR
-option to get a list of warnings that you can disable with this option\&.
-.RE
-.PP
-\-Xmaxerrs \fInumber\fR
-.RS 4
+.TP
+-Xlint:\fIname\fR
+.br
+Disables warning name\&. See Enable or Disable Warnings with the -Xlint Option for a list of warnings you can disable with this option\&.
+.TP
+-Xlint:\fI-name\fR
+.br
+Disables warning name\&. See Enable or Disable Warnings with the -Xlint Option with the \f3-Xlint\fR option to get a list of warnings that you can disable with this option\&.
+.TP
+-Xmaxerrs \fInumber\fR
+.br
 Sets the maximum number of errors to print\&.
-.RE
-.PP
-\-Xmaxwarns \fInumber\fR
-.RS 4
+.TP
+-Xmaxwarns \fInumber\fR
+.br
 Sets the maximum number of warnings to print\&.
-.RE
-.PP
-\-Xstdout \fIfilename\fR
-.RS 4
-Sends compiler messages to the named file\&. By default, compiler messages go to
-\fBSystem\&.err\fR\&.
-.RE
-.PP
-\-Xprefer:[\fInewer,source\fR]
-.RS 4
-Specifies which file to read when both a source file and class file are found for a type\&. (See Searching for Types)\&. If the
-\fB\-Xprefer:newer\fR
-option is used, then it reads the newer of the source or class file for a type (default)\&. If the
-\fB\-Xprefer:source\fR
-option is used, then it reads the source file\&. Use \-\fBXprefer:source\fR
-when you want to be sure that any annotation processors can access annotations declared with a retention policy of
-\fBSOURCE\fR\&.
-.RE
-.PP
-\-Xpkginfo:[\fIalways\fR,\fIlegacy\fR,\fInonempty\fR]
-.RS 4
-Control whether javac generates
-\fBpackage\-info\&.class\fR
-files from package\-info\&.java files\&. Possible mode arguments for this option include the following\&.
-.PP
+.TP
+-Xstdout \fIfilename\fR
+.br
+Sends compiler messages to the named file\&. By default, compiler messages go to \f3System\&.err\fR\&.
+.TP
+-Xprefer:[\fInewer,source\fR]
+.br
+Specifies which file to read when both a source file and class file are found for a type\&. (See Searching for Types)\&. If the \f3-Xprefer:newer\fR option is used, then it reads the newer of the source or class file for a type (default)\&. If the \f3-Xprefer:source\fR option is used, then it reads the source file\&. Use -\f3Xprefer:source\fR when you want to be sure that any annotation processors can access annotations declared with a retention policy of \f3SOURCE\fR\&.
+.TP
+-Xpkginfo:[\fIalways\fR,\fIlegacy\fR,\fInonempty\fR]
+.br
+Control whether javac generates \f3package-info\&.class\fR files from package-info\&.java files\&. Possible mode arguments for this option include the following\&.
+.RS     
+.TP     
 always
-.RS 4
-Always generate a
-\fBpackage\-info\&.class\fR
-file for every
-\fBpackage\-info\&.java\fR
-file\&. This option may be useful if you use a build system such as Ant, which checks that each
-\fB\&.java\fR
-file has a corresponding
-\fB\&.class\fR
-file\&.
-.RE
-.PP
+Always generate a \f3package-info\&.class\fR file for every \f3package-info\&.java\fR file\&. This option may be useful if you use a build system such as Ant, which checks that each \f3\&.java\fR file has a corresponding \f3\&.class\fR file\&.
+.TP     
 legacy
-.RS 4
-Generate a
-\fBpackage\-info\&.class\fR
-file only if package\-info\&.java contains annotations\&. Don\*(Aqt generate a
-\fBpackage\-info\&.class\fR
-file if package\-info\&.java only contains comments\&.
-.sp
-\fBNote:\fR
-A
-\fBpackage\-info\&.class\fR
-file might be generated but be empty if all the annotations in the package\-info\&.java file have
-\fBRetentionPolicy\&.SOURCE\fR\&.
-.RE
-.PP
+Generate a \f3package-info\&.class\fR file only if package-info\&.java contains annotations\&. Don\&'t generate a \f3package-info\&.class\fR file if package-info\&.java only contains comments\&.
+
+\fINote:\fR A \f3package-info\&.class\fR file might be generated but be empty if all the annotations in the package-info\&.java file have \f3RetentionPolicy\&.SOURCE\fR\&.
+.TP     
 nonempty
-.RS 4
-Generate a
-\fBpackage\-info\&.class\fR
-file only if package\-info\&.java contains annotations with
-\fBRetentionPolicy\&.CLASS\fR
-or
-\fBRetentionPolicy\&.RUNTIME\fR\&.
-.RE
-.RE
-.PP
-\-Xprint
-.RS 4
+Generate a \f3package-info\&.class\fR file only if package-info\&.java contains annotations with \f3RetentionPolicy\&.CLASS\fR or \f3RetentionPolicy\&.RUNTIME\fR\&.
+.RE     
+
+.TP
+-Xprint
+.br
 Prints a textual representation of specified types for debugging purposes\&. Perform neither annotation processing nor compilation\&. The format of the output could change\&.
-.RE
-.PP
-\-XprintProcessorInfo
-.RS 4
+.TP
+-XprintProcessorInfo
+.br
 Prints information about which annotations a processor is asked to process\&.
-.RE
-.PP
-\-XprintRounds
-.RS 4
+.TP
+-XprintRounds
+.br
 Prints information about initial and subsequent annotation processing rounds\&.
-.RE
-.SH "ENABLE OR DISABLE WARNINGS WITH THE -XLINT OPTION"
-.PP
-Enable warning
-\fIname\fR
-with the
-\fB\-Xlint:name\fR
-option, where
-\fBname\fR
-is one of the following warning names\&. Note that you can disable a warning with the
-\fB\-Xlint:\-name:\fR
-option\&.
-.PP
+.SH ENABLE\ OR\ DISABLE\ WARNINGS\ WITH\ THE\ -XLINT\ OPTION    
+Enable warning \fIname\fR with the \f3-Xlint:name\fR option, where \f3name\fR is one of the following warning names\&. Note that you can disable a warning with the \f3-Xlint:-name:\fR option\&.
+.TP     
 cast
-.RS 4
 Warns about unnecessary and redundant casts, for example:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBString s = (String) "Hello!"\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
+.sp     
+.nf     
+\f3String s = (String) "Hello!"\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP     
 classfile
-.RS 4
 Warns about issues related to class file contents\&.
-.RE
-.PP
+.TP     
 deprecation
-.RS 4
 Warns about the use of deprecated items, for example:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBjava\&.util\&.Date myDate = new java\&.util\&.Date();\fR
-\fBint currentDay = myDate\&.getDay();\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-The method
-\fBjava\&.util\&.Date\&.getDay\fR
-has been deprecated since JDK 1\&.1
-.RE
-.PP
-dep\-ann
-.RS 4
-Warns about items that are documented with an
-\fB@deprecated\fR
-Javadoc comment, but do not have a
-\fB@Deprecated\fR
-annotation, for example:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB/**\fR
-\fB  * @deprecated As of Java SE 7, replaced by {@link #newMethod()}\fR
-\fB  */\fR
-\fBpublic static void deprecatedMethood() { }\fR
-\fBpublic static void newMethod() { }\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
+.sp     
+.nf     
+\f3java\&.util\&.Date myDate = new java\&.util\&.Date();\fP
+.fi     
+.nf     
+\f3int currentDay = myDate\&.getDay();\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+The method \f3java\&.util\&.Date\&.getDay\fR has been deprecated since JDK 1\&.1
+.TP     
+dep-ann
+Warns about items that are documented with an \f3@deprecated\fR Javadoc comment, but do not have a \f3@Deprecated\fR annotation, for example:
+.sp     
+.nf     
+\f3/**\fP
+.fi     
+.nf     
+\f3  * @deprecated As of Java SE 7, replaced by {@link #newMethod()}\fP
+.fi     
+.nf     
+\f3  */\fP
+.fi     
+.nf     
+\f3public static void deprecatedMethood() { }\fP
+.fi     
+.nf     
+\f3public static void newMethod() { }\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP     
 divzero
-.RS 4
 Warns about division by the constant integer 0, for example:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBint divideByZero = 42 / 0;\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
+.sp     
+.nf     
+\f3int divideByZero = 42 / 0;\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP     
 empty
-.RS 4
-Warns about empty statements after
-\fBif \fRstatements, for example:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBclass E {\fR
-\fB    void m() {\fR
-\fB         if (true) ;\fR
-\fB    }\fR
-\fB}\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
+Warns about empty statements after \f3if\fRstatements, for example:
+.sp     
+.nf     
+\f3class E {\fP
+.fi     
+.nf     
+\f3    void m() {\fP
+.fi     
+.nf     
+\f3         if (true) ;\fP
+.fi     
+.nf     
+\f3    }\fP
+.fi     
+.nf     
+\f3}\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP     
 fallthrough
-.RS 4
-Checks the switch blocks for fall\-through cases and provides a warning message for any that are found\&. Fall\-through cases are cases in a switch block, other than the last case in the block, whose code does not include a break statement, allowing code execution to fall through from that case to the next case\&. For example, the code following the case 1 label in this switch block does not end with a break statement:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBswitch (x) {\fR
-\fBcase 1:\fR
-\fB  System\&.out\&.println("1");\fR
-\fB  // No break statement here\&.\fR
-\fBcase 2:\fR
-\fB  System\&.out\&.println("2");\fR
-\fB}\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-If the
-\fB\-Xlint:fallthrough\fR
-option was used when compiling this code, then the compiler emits a warning about possible fall\-through into case, with the line number of the case in question\&.
-.RE
-.PP
+Checks the switch blocks for fall-through cases and provides a warning message for any that are found\&. Fall-through cases are cases in a switch block, other than the last case in the block, whose code does not include a break statement, allowing code execution to fall through from that case to the next case\&. For example, the code following the case 1 label in this switch block does not end with a break statement:
+.sp     
+.nf     
+\f3switch (x) {\fP
+.fi     
+.nf     
+\f3case 1:\fP
+.fi     
+.nf     
+\f3  System\&.out\&.println("1");\fP
+.fi     
+.nf     
+\f3  // No break statement here\&.\fP
+.fi     
+.nf     
+\f3case 2:\fP
+.fi     
+.nf     
+\f3  System\&.out\&.println("2");\fP
+.fi     
+.nf     
+\f3}\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+If the \f3-Xlint:fallthrough\fR option was used when compiling this code, then the compiler emits a warning about possible fall-through into case, with the line number of the case in question\&.
+.TP     
 finally
-.RS 4
-Warns about
-\fBfinally\fR
-clauses that cannot complete normally, for example:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBpublic static int m() {\fR
-\fB  try {\fR
-\fB     throw new NullPointerException();\fR
-\fB  }  catch (NullPointerException(); {\fR
-\fB     System\&.err\&.println("Caught NullPointerException\&.");\fR
-\fB     return 1;\fR
-\fB   } finally {\fR
-\fB     return 0;\fR
-\fB   }\fR
-\fB  }\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-The compiler generates a warning for the
-\fBfinally\fR
-block in this example\&. When the
-\fBint\fR
-method is called, it returns a value of 0\&. A
-\fBfinally\fR
-block executes when the
-\fBtry\fR
-block exits\&. In this example, when control is transferred to the
-\fBcatch\fR
-block, the
-\fBint\fR
-method exits\&. However, the
-\fBfinally\fR
-block must execute, so it is executed, even though control was transferred outside the method\&.
-.RE
-.PP
+Warns about \f3finally\fR clauses that cannot complete normally, for example:
+.sp     
+.nf     
+\f3public static int m() {\fP
+.fi     
+.nf     
+\f3  try {\fP
+.fi     
+.nf     
+\f3     throw new NullPointerException();\fP
+.fi     
+.nf     
+\f3  }  catch (NullPointerException(); {\fP
+.fi     
+.nf     
+\f3     System\&.err\&.println("Caught NullPointerException\&.");\fP
+.fi     
+.nf     
+\f3     return 1;\fP
+.fi     
+.nf     
+\f3   } finally {\fP
+.fi     
+.nf     
+\f3     return 0;\fP
+.fi     
+.nf     
+\f3   }\fP
+.fi     
+.nf     
+\f3  }\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+The compiler generates a warning for the \f3finally\fR block in this example\&. When the \f3int\fR method is called, it returns a value of 0\&. A \f3finally\fR block executes when the \f3try\fR block exits\&. In this example, when control is transferred to the \f3catch\fR block, the \f3int\fR method exits\&. However, the \f3finally\fR block must execute, so it is executed, even though control was transferred outside the method\&.
+.TP     
 options
-.RS 4
-Warns about issues that related to the use of command\-line options\&. See Cross\-Compilation Options\&.
-.RE
-.PP
+Warns about issues that related to the use of command-line options\&. See Cross-Compilation Options\&.
+.TP     
 overrides
-.RS 4
 Warns about issues regarding method overrides\&. For example, consider the following two classes:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBpublic class ClassWithVarargsMethod {\fR
-\fB  void varargsMethod(String\&.\&.\&. s) { }\fR
-\fB}\fR
- 
-\fBpublic class ClassWithOverridingMethod extends ClassWithVarargsMethod {\fR
-\fB   @Override\fR
-\fB   void varargsMethod(String[] s) { }\fR
-\fB}\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
+.sp     
+.nf     
+\f3public class ClassWithVarargsMethod {\fP
+.fi     
+.nf     
+\f3  void varargsMethod(String\&.\&.\&. s) { }\fP
+.fi     
+.nf     
+\f3}\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.nf     
+\f3public class ClassWithOverridingMethod extends ClassWithVarargsMethod {\fP
+.fi     
+.nf     
+\f3   @Override\fP
+.fi     
+.nf     
+\f3   void varargsMethod(String[] s) { }\fP
+.fi     
+.nf     
+\f3}\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
 The compiler generates a warning similar to the following:\&.
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBwarning: [override] varargsMethod(String[]) in ClassWithOverridingMethod \fR
-\fBoverrides varargsMethod(String\&.\&.\&.) in ClassWithVarargsMethod; overriding\fR
-\fBmethod is missing \*(Aq\&.\&.\&.\*(Aq\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-When the compiler encounters a
-\fBvarargs\fR
-method, it translates the
-\fBvarargs\fR
-formal parameter into an array\&. In the method
-\fBClassWithVarargsMethod\&.varargsMethod\fR, the compiler translates the
-\fBvarargs\fR
-formal parameter
-\fBString\&.\&.\&. s\fR
-to the formal parameter
-\fBString[] s\fR, an array, which matches the formal parameter of the method
-\fBClassWithOverridingMethod\&.varargsMethod\fR\&. Consequently, this example compiles\&.
-.RE
-.PP
+.sp     
+.nf     
+\f3warning: [override] varargsMethod(String[]) in ClassWithOverridingMethod \fP
+.fi     
+.nf     
+\f3overrides varargsMethod(String\&.\&.\&.) in ClassWithVarargsMethod; overriding\fP
+.fi     
+.nf     
+\f3method is missing \&'\&.\&.\&.\&'\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+When the compiler encounters a \f3varargs\fR method, it translates the \f3varargs\fR formal parameter into an array\&. In the method \f3ClassWithVarargsMethod\&.varargsMethod\fR, the compiler translates the \f3varargs\fR formal parameter \f3String\&.\&.\&. s\fR to the formal parameter \f3String[] s\fR, an array, which matches the formal parameter of the method \f3ClassWithOverridingMethod\&.varargsMethod\fR\&. Consequently, this example compiles\&.
+.TP     
 path
-.RS 4
-Warns about invalid path elements and nonexistent path directories on the command line (with regard to the class path, the source path, and other paths)\&. Such warnings cannot be suppressed with the
-\fB@SuppressWarnings\fR
-annotation, for example:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBjavac \-Xlint:path \-classpath /nonexistentpath Example\&.java\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
+Warns about invalid path elements and nonexistent path directories on the command line (with regard to the class path, the source path, and other paths)\&. Such warnings cannot be suppressed with the \f3@SuppressWarnings\fR annotation, for example:
+.sp     
+.nf     
+\f3javac \-Xlint:path \-classpath /nonexistentpath Example\&.java\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP     
 processing
-.RS 4
 Warn about issues regarding annotation processing\&. The compiler generates this warning when you have a class that has an annotation, and you use an annotation processor that cannot handle that type of exception\&. For example, the following is a simple annotation processor:
-.sp
-\fBSource file AnnocProc\&.java\fR:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBimport java\&.util\&.*;\fR
-\fBimport javax\&.annotation\&.processing\&.*;\fR
-\fBimport javax\&.lang\&.model\&.*;\fR
-\fBimport\&.javaz\&.lang\&.model\&.element\&.*;\fR
- 
-\fB@SupportedAnnotationTypes("NotAnno")\fR
-\fBpublic class AnnoProc extends AbstractProcessor {\fR
-\fB  public boolean process(Set<? extends TypeElement> elems, RoundEnvironment renv){\fR
-\fB     return true;\fR
-\fB  }\fR
- 
-\fB  public SourceVersion getSupportedSourceVersion() {\fR
-\fB     return SourceVersion\&.latest();\fR
-\fB   }\fR
-\fB}\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-\fBSource file AnnosWithoutProcessors\&.java\fR:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB@interface Anno { }\fR
-\fB \fR
-\fB@Anno\fR
-\fBclass AnnosWithoutProcessors { }\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-The following commands compile the annotation processor
-\fBAnnoProc\fR, then run this annotation processor against the source file
-\fBAnnosWithoutProcessors\&.java\fR:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBjavac AnnoProc\&.java\fR
-\fBjavac \-cp \&. \-Xlint:processing \-processor AnnoProc \-proc:only AnnosWithoutProcessors\&.java\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-When the compiler runs the annotation processor against the source file
-\fBAnnosWithoutProcessors\&.java\fR, it generates the following warning:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBwarning: [processing] No processor claimed any of these annotations: Anno\fR
-\fB \fR
-.fi
-.if n \{\
-.RE
-.\}
-To resolve this issue, you can rename the annotation defined and used in the class
-\fBAnnosWithoutProcessors\fR
-from
-\fBAnno\fR
-to
-\fBNotAnno\fR\&.
-.RE
-.PP
+
+\fISource file AnnocProc\&.java\fR:
+.sp     
+.nf     
+\f3import java\&.util\&.*;\fP
+.fi     
+.nf     
+\f3import javax\&.annotation\&.processing\&.*;\fP
+.fi     
+.nf     
+\f3import javax\&.lang\&.model\&.*;\fP
+.fi     
+.nf     
+\f3import\&.javaz\&.lang\&.model\&.element\&.*;\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.nf     
+\f3@SupportedAnnotationTypes("NotAnno")\fP
+.fi     
+.nf     
+\f3public class AnnoProc extends AbstractProcessor {\fP
+.fi     
+.nf     
+\f3  public boolean process(Set<? extends TypeElement> elems, RoundEnvironment renv){\fP
+.fi     
+.nf     
+\f3     return true;\fP
+.fi     
+.nf     
+\f3  }\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.nf     
+\f3  public SourceVersion getSupportedSourceVersion() {\fP
+.fi     
+.nf     
+\f3     return SourceVersion\&.latest();\fP
+.fi     
+.nf     
+\f3   }\fP
+.fi     
+.nf     
+\f3}\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+\fISource file AnnosWithoutProcessors\&.java\fR:
+.sp     
+.nf     
+\f3@interface Anno { }\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.nf     
+\f3@Anno\fP
+.fi     
+.nf     
+\f3class AnnosWithoutProcessors { }\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+The following commands compile the annotation processor \f3AnnoProc\fR, then run this annotation processor against the source file \f3AnnosWithoutProcessors\&.java\fR:
+.sp     
+.nf     
+\f3javac AnnoProc\&.java\fP
+.fi     
+.nf     
+\f3javac \-cp \&. \-Xlint:processing \-processor AnnoProc \-proc:only AnnosWithoutProcessors\&.java\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+When the compiler runs the annotation processor against the source file \f3AnnosWithoutProcessors\&.java\fR, it generates the following warning:
+.sp     
+.nf     
+\f3warning: [processing] No processor claimed any of these annotations: Anno\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+To resolve this issue, you can rename the annotation defined and used in the class \f3AnnosWithoutProcessors\fR from \f3Anno\fR to \f3NotAnno\fR\&.
+.TP     
 rawtypes
-.RS 4
-Warns about unchecked operations on raw types\&. The following statement generates a
-\fBrawtypes\fR
-warning:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBvoid countElements(List l) { \&.\&.\&. }\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-The following example does not generate a
-\fBrawtypes\fR
-warning
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBvoid countElements(List<?> l) { \&.\&.\&. }\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-\fBList\fR
-is a raw type\&. However,
-\fBList<?>\fR
-is an unbounded wildcard parameterized type\&. Because
-\fBList\fR
-is a parameterized interface, always specify its type argument\&. In this example, the
-\fBList\fR
-formal argument is specified with an unbounded wildcard (\fB?\fR) as its formal type parameter, which means that the
-\fBcountElements\fR
-method can accept any instantiation of the
-\fBList\fR
-interface\&.
-.RE
-.PP
+Warns about unchecked operations on raw types\&. The following statement generates a \f3rawtypes\fR warning:
+.sp     
+.nf     
+\f3void countElements(List l) { \&.\&.\&. }\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+The following example does not generate a \f3rawtypes\fR warning
+.sp     
+.nf     
+\f3void countElements(List<?> l) { \&.\&.\&. }\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+\f3List\fR is a raw type\&. However, \f3List<?>\fR is an unbounded wildcard parameterized type\&. Because \f3List\fR is a parameterized interface, always specify its type argument\&. In this example, the \f3List\fR formal argument is specified with an unbounded wildcard (\f3?\fR) as its formal type parameter, which means that the \f3countElements\fR method can accept any instantiation of the \f3List\fR interface\&.
+.TP     
 Serial
-.RS 4
-Warns about missing
-\fBserialVersionUID\fR
-definitions on serializable classes, for example:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBpublic class PersistentTime implements Serializable\fR
-\fB{\fR
-\fB  private Date time;\fR
-\fB \fR
-\fB   public PersistentTime() {\fR
-\fB     time = Calendar\&.getInstance()\&.getTime();\fR
-\fB   }\fR
-\fB \fR
-\fB   public Date getTime() {\fR
-\fB     return time;\fR
-\fB   }\fR
-\fB}\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-The compiler generates the following warning:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBwarning: [serial] serializable class PersistentTime has no definition of\fR
-\fBserialVersionUID\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-If a serializable class does not explicitly declare a field named
-\fBserialVersionUID\fR, then the serialization runtime environment calculates a default
-\fBserialVersionUID\fR
-value for that class based on various aspects of the class, as described in the Java Object Serialization Specification\&. However, it is strongly recommended that all serializable classes explicitly declare
-\fBserialVersionUID\fR
-values because the default process of computing
-\fBserialVersionUID\fR
-vales is highly sensitive to class details that can vary depending on compiler implementations, and as a result, might cause an unexpected
-\fBInvalidClassExceptions\fR
-during deserialization\&. To guarantee a consistent
-\fBserialVersionUID\fR
-value across different Java compiler implementations, a serializable class must declare an explicit
-\fBserialVersionUID\fR
-value\&.
-.RE
-.PP
-static
-.RS 4
-Warns about issues relating to the use of statics, for example:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBclass XLintStatic {\fR
-\fB    static void m1() { }\fR
-\fB    void m2() { this\&.m1(); }\fR
-\fB}\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
+Warns about missing \f3serialVersionUID\fR definitions on serializable classes, for example:
+.sp     
+.nf     
+\f3public class PersistentTime implements Serializable\fP
+.fi     
+.nf     
+\f3{\fP
+.fi     
+.nf     
+\f3  private Date time;\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.nf     
+\f3   public PersistentTime() {\fP
+.fi     
+.nf     
+\f3     time = Calendar\&.getInstance()\&.getTime();\fP
+.fi     
+.nf     
+\f3   }\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.nf     
+\f3   public Date getTime() {\fP
+.fi     
+.nf     
+\f3     return time;\fP
+.fi     
+.nf     
+\f3   }\fP
+.fi     
+.nf     
+\f3}\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
 The compiler generates the following warning:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBwarning: [static] static method should be qualified by type name, \fR
-\fBXLintStatic, instead of by an expression\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-To resolve this issue, you can call the
-\fBstatic\fR
-method
-\fBm1\fR
-as follows:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBXLintStatic\&.m1();\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-Alternately, you can remove the
-\fBstatic\fR
-keyword from the declaration of the method
-\fBm1\fR\&.
-.RE
-.PP
+.sp     
+.nf     
+\f3warning: [serial] serializable class PersistentTime has no definition of\fP
+.fi     
+.nf     
+\f3serialVersionUID\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+If a serializable class does not explicitly declare a field named \f3serialVersionUID\fR, then the serialization runtime environment calculates a default \f3serialVersionUID\fR value for that class based on various aspects of the class, as described in the Java Object Serialization Specification\&. However, it is strongly recommended that all serializable classes explicitly declare \f3serialVersionUID\fR values because the default process of computing \f3serialVersionUID\fR vales is highly sensitive to class details that can vary depending on compiler implementations, and as a result, might cause an unexpected \f3InvalidClassExceptions\fR during deserialization\&. To guarantee a consistent \f3serialVersionUID\fR value across different Java compiler implementations, a serializable class must declare an explicit \f3serialVersionUID\fR value\&.
+.TP     
+static
+Warns about issues relating to the use of statics, for example:
+.sp     
+.nf     
+\f3class XLintStatic {\fP
+.fi     
+.nf     
+\f3    static void m1() { }\fP
+.fi     
+.nf     
+\f3    void m2() { this\&.m1(); }\fP
+.fi     
+.nf     
+\f3}\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+The compiler generates the following warning:
+.sp     
+.nf     
+\f3warning: [static] static method should be qualified by type name, \fP
+.fi     
+.nf     
+\f3XLintStatic, instead of by an expression\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+To resolve this issue, you can call the \f3static\fR method \f3m1\fR as follows:
+.sp     
+.nf     
+\f3XLintStatic\&.m1();\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+Alternately, you can remove the \f3static\fR keyword from the declaration of the method \f3m1\fR\&.
+.TP     
 try
-.RS 4
-Warns about issues relating to use of
-\fBtry\fR
-blocks, including try\-with\-resources statements\&. For example, a warning is generated for the following statement because the resource
-\fBac\fR
-declared in the
-\fBtry\fR
-block is not used:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBtry ( AutoCloseable ac = getResource() ) {    // do nothing}\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.PP
+Warns about issues relating to use of \f3try\fR blocks, including try-with-resources statements\&. For example, a warning is generated for the following statement because the resource \f3ac\fR declared in the \f3try\fR block is not used:
+.sp     
+.nf     
+\f3try ( AutoCloseable ac = getResource() ) {    // do nothing}\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+.TP     
 unchecked
-.RS 4
 Gives more detail for unchecked conversion warnings that are mandated by the Java Language Specification, for example:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBList l = new ArrayList<Number>();\fR
-\fBList<String> ls = l;       // unchecked warning\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-During type erasure, the types
-\fBArrayList<Number>\fR
-and
-\fBList<String>\fR
-become
-\fBArrayList\fR
-and
-\fBList\fR, respectively\&.
-.sp
-The
-\fBls\fR
-command has the parameterized type
-\fBList<String>\fR\&. When the
-\fBList\fR
-referenced by
-\fBl\fR
-is assigned to
-\fBls\fR, the compiler generates an unchecked warning\&. At compile time, the compiler and JVM cannot determine whether
-\fBl\fR
-refers to a
-\fBList<String>\fR
-type\&. In this case,
-\fBl\fR
-does not refer to a
-\fBList<String>\fR
-type\&. As a result, heap pollution occurs\&.
-.sp
-A heap pollution situation occurs when the
-\fBList\fR
-object
-\fBl\fR, whose static type is
-\fBList<Number>\fR, is assigned to another
-\fBList\fR
-object,
-\fBls\fR, that has a different static type,
-\fBList<String>\fR\&. However, the compiler still allows this assignment\&. It must allow this assignment to preserve backward compatibility with releases of Java SE that do not support generics\&. Because of type erasure,
-\fBList<Number>\fR
-and
-\fBList<String>\fR
-both become
-\fBList\fR\&. Consequently, the compiler allows the assignment of the object
-\fBl\fR\fB,\fR
-which has a raw type of
-\fBList\fR, to the object
-\fBls\fR\&.
-.RE
-.PP
+.sp     
+.nf     
+\f3List l = new ArrayList<Number>();\fP
+.fi     
+.nf     
+\f3List<String> ls = l;       // unchecked warning\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+During type erasure, the types \f3ArrayList<Number>\fR and \f3List<String>\fR become \f3ArrayList\fR and \f3List\fR, respectively\&.
+
+The \f3ls\fR command has the parameterized type \f3List<String>\fR\&. When the \f3List\fR referenced by \f3l\fR is assigned to \f3ls\fR, the compiler generates an unchecked warning\&. At compile time, the compiler and JVM cannot determine whether \f3l\fR refers to a \f3List<String>\fR type\&. In this case, \f3l\fR does not refer to a \f3List<String>\fR type\&. As a result, heap pollution occurs\&.
+
+A heap pollution situation occurs when the \f3List\fR object \f3l\fR, whose static type is \f3List<Number>\fR, is assigned to another \f3List\fR object, \f3ls\fR, that has a different static type, \f3List<String>\fR\&. However, the compiler still allows this assignment\&. It must allow this assignment to preserve backward compatibility with releases of Java SE that do not support generics\&. Because of type erasure, \f3List<Number>\fR and \f3List<String>\fR both become \f3List\fR\&. Consequently, the compiler allows the assignment of the object \f3l\fR\f3,\fR which has a raw type of \f3List\fR, to the object \f3ls\fR\&.
+.TP     
 varargs
-.RS 4
-Warns about unsafe usages of variable arguments (\fBvarargs\fR) methods, in particular, those that contain non\-reifiable arguments, for example:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBpublic class ArrayBuilder {\fR
-\fB  public static <T> void addToList (List<T> listArg, T\&.\&.\&. elements) {\fR
-\fB    for (T x : elements) {\fR
-\fB      listArg\&.add(x);\fR
-\fB    }\fR
-\fB  }\fR
-\fB}\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-\fBNote:\fR
-A non\-reifiable type is a type whose type information is not fully available at runtime\&.
-.sp
-The compiler generates the following warning for the definition of the method
-\fBArrayBuilder\&.addToList\fR
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBwarning: [varargs] Possible heap pollution from parameterized vararg type T\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-When the compiler encounters a varargs method, it translates the
-\fBvarargs\fR
-formal parameter into an array\&. However, the Java programming language does not permit the creation of arrays of parameterized types\&. In the method
-\fBArrayBuilder\&.addToList\fR, the compiler translates the
-\fBvarargs\fR
-formal parameter
-\fBT\&.\&.\&.\fR
-elements to the formal parameter
-\fBT[]\fR
-elements, an array\&. However, because of type erasure, the compiler converts the
-\fBvarargs\fR
-formal parameter to
-\fBObject[]\fR
-elements\&. Consequently, there is a possibility of heap pollution\&.
-.RE
-.SH "COMMAND-LINE ARGUMENT FILES"
+Warns about unsafe usages of variable arguments (\f3varargs\fR) methods, in particular, those that contain non-reifiable arguments, for example:
+.sp     
+.nf     
+\f3public class ArrayBuilder {\fP
+.fi     
+.nf     
+\f3  public static <T> void addToList (List<T> listArg, T\&.\&.\&. elements) {\fP
+.fi     
+.nf     
+\f3    for (T x : elements) {\fP
+.fi     
+.nf     
+\f3      listArg\&.add(x);\fP
+.fi     
+.nf     
+\f3    }\fP
+.fi     
+.nf     
+\f3  }\fP
+.fi     
+.nf     
+\f3}\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+\fINote:\fR A non-reifiable type is a type whose type information is not fully available at runtime\&.
+
+The compiler generates the following warning for the definition of the method \f3ArrayBuilder\&.addToList\fR
+.sp     
+.nf     
+\f3warning: [varargs] Possible heap pollution from parameterized vararg type T\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+
+
+When the compiler encounters a varargs method, it translates the \f3varargs\fR formal parameter into an array\&. However, the Java programming language does not permit the creation of arrays of parameterized types\&. In the method \f3ArrayBuilder\&.addToList\fR, the compiler translates the \f3varargs\fR formal parameter \f3T\&.\&.\&.\fR elements to the formal parameter \f3T[]\fR elements, an array\&. However, because of type erasure, the compiler converts the \f3varargs\fR formal parameter to \f3Object[]\fR elements\&. Consequently, there is a possibility of heap pollution\&.
+.SH COMMAND-LINE\ ARGUMENT\ FILES    
+To shorten or simplify the \f3javac\fR command, you can specify one or more files that contain arguments to the \f3javac\fR command (except \f3-J\fR options)\&. This enables you to create \f3javac\fR commands of any length on any operating system\&.
 .PP
-To shorten or simplify the
-\fBjavac\fR
-command, you can specify one or more files that contain arguments to the
-\fBjavac\fR
-command (except
-\fB\-J\fR
-options)\&. This enables you to create
-\fBjavac\fR
-commands of any length on any operating system\&.
+An argument file can include \f3javac\fR options and source file names in any combination\&. The arguments within a file can be separated by spaces or new line characters\&. If a file name contains embedded spaces, then put the whole file name in double quotation marks\&.
+.PP
+File Names within an argument file are relative to the current directory, not the location of the argument file\&. Wild cards (*) are not allowed in these lists (such as for specifying \f3*\&.java\fR)\&. Use of the at sign (@) to recursively interpret files is not supported\&. The \f3-J\fR options are not supported because they are passed to the launcher, which does not support argument files\&.
 .PP
-An argument file can include
-\fBjavac\fR
-options and source file names in any combination\&. The arguments within a file can be separated by spaces or new line characters\&. If a file name contains embedded spaces, then put the whole file name in double quotation marks\&.
+When executing the \f3javac\fR command, pass in the path and name of each argument file with the at sign (@) leading character\&. When the \f3javac\fR command encounters an argument beginning with the at sign (@), it expands the contents of that file into the argument list\&.
 .PP
-File Names within an argument file are relative to the current directory, not the location of the argument file\&. Wild cards (*) are not allowed in these lists (such as for specifying
-\fB*\&.java\fR)\&. Use of the at sign (@) to recursively interpret files is not supported\&. The
-\fB\-J\fR
-options are not supported because they are passed to the launcher, which does not support argument files\&.
-.PP
-When executing the
-\fBjavac\fR
-command, pass in the path and name of each argument file with the at sign (@) leading character\&. When the
-\fBjavac\fR
-command encounters an argument beginning with the at sign (@), it expands the contents of that file into the argument list\&.
+\f3Example 1 Single Argument File\fR
 .PP
-\fBExample 1\fR
-.br
-Single Argument File
-.RS 4
-You could use a single argument file named
-\fBargfile\fR
-to hold all
-\fBjavac\fR
-arguments:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBjavac @argfile\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
+You could use a single argument file named \f3argfile\fR to hold all \f3javac\fR arguments:
+.sp     
+.nf     
+\f3javac @argfile\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
 This argument file could contain the contents of both files shown in Example 2
-.RE
+.PP
+\f3Example 2 Two Argument Files\fR
 .PP
-\fBExample 2\fR
-.br
-Two Argument Files
-.RS 4
-You can create two argument files: one for the
-\fBjavac\fR
-options and the other for the source file names\&. Note that the following lists have no line\-continuation characters\&.
-.sp
+You can create two argument files: one for the \f3javac\fR options and the other for the source file names\&. Note that the following lists have no line-continuation characters\&.
+.PP
 Create a file named options that contains the following:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-d classes\fR
-.fi
-.if n \{\
-.RE
-.\}
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-g\fR
-.fi
-.if n \{\
-.RE
-.\}
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB\-sourcepath /java/pubs/ws/1\&.3/src/share/classes\fR
-.fi
-.if n \{\
-.RE
-.\}
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
- 
-.fi
-.if n \{\
-.RE
-.\}
+.sp     
+.nf     
+\f3\-d classes\fP
+.fi     
+.nf     
+\f3\-g\fP
+.fi     
+.nf     
+\f3\-sourcepath /java/pubs/ws/1\&.3/src/share/classes\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
 Create a file named classes that contains the following:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBMyClass1\&.java\fR
-\fBMyClass2\&.java\fR
-\fBMyClass3\&.java\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-Then, run the
-\fBjavac\fR
-command as follows:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBjavac @options @classes\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
+.sp     
+.nf     
+\f3MyClass1\&.java\fP
+.fi     
+.nf     
+\f3MyClass2\&.java\fP
+.fi     
+.nf     
+\f3MyClass3\&.java\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+Then, run the \f3javac\fR command as follows:
+.sp     
+.nf     
+\f3javac @options @classes\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+\f3Example 3 Argument Files with Paths\fR
 .PP
-\fBExample 3\fR
-.br
-Argument Files with Paths
-.RS 4
-The argument files can have paths, but any file names inside the files are relative to the current working directory (not
-\fBpath1\fR
-or
-\fBpath2\fR):
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBjavac @path1/options @path2/classes\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
-.SH "ANNOTATION PROCESSING"
+The argument files can have paths, but any file names inside the files are relative to the current working directory (not \f3path1\fR or \f3path2\fR):
+.sp     
+.nf     
+\f3javac @path1/options @path2/classes\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+.SH ANNOTATION\ PROCESSING    
+The \f3javac\fR command provides direct support for annotation processing, superseding the need for the separate annotation processing command, \f3apt\fR\&.
 .PP
-The
-\fBjavac\fR
-command provides direct support for annotation processing, superseding the need for the separate annotation processing command,
-\fBapt\fR\&.
-.PP
-The API for annotation processors is defined in the
-\fBjavax\&.annotation\&.processing\fR
-and j\fBavax\&.lang\&.model\fR
-packages and subpackages\&.
-.SS "How Annotation Processing Works"
-.PP
-Unless annotation processing is disabled with the
-\fB\-proc:none\fR
-option, the compiler searches for any annotation processors that are available\&. The search path can be specified with the
-\fB\-processorpath\fR
-option\&. If no path is specified, then the user class path is used\&. Processors are located by means of service provider\-configuration files named
-\fBMETA\-INF/services/javax\&.annotation\&.processing\fR\&.Processor on the search path\&. Such files should contain the names of any annotation processors to be used, listed one per line\&. Alternatively, processors can be specified explicitly, using the
-\fB\-processor\fR
-option\&.
+The API for annotation processors is defined in the \f3javax\&.annotation\&.processing\fR and j\f3avax\&.lang\&.model\fR packages and subpackages\&.
+.SS HOW\ ANNOTATION\ PROCESSING\ WORKS    
+Unless annotation processing is disabled with the \f3-proc:none\fR option, the compiler searches for any annotation processors that are available\&. The search path can be specified with the \f3-processorpath\fR option\&. If no path is specified, then the user class path is used\&. Processors are located by means of service provider-configuration files named \f3META-INF/services/javax\&.annotation\&.processing\fR\&.Processor on the search path\&. Such files should contain the names of any annotation processors to be used, listed one per line\&. Alternatively, processors can be specified explicitly, using the \f3-processor\fR option\&.
 .PP
 After scanning the source files and classes on the command line to determine what annotations are present, the compiler queries the processors to determine what annotations they process\&. When a match is found, the processor is called\&. A processor can claim the annotations it processes, in which case no further attempt is made to find any processors for those annotations\&. After all of the annotations are claimed, the compiler does not search for additional processors\&.
 .PP
 If any processors generate new source files, then another round of annotation processing occurs: Any newly generated source files are scanned, and the annotations processed as before\&. Any processors called on previous rounds are also called on all subsequent rounds\&. This continues until no new source files are generated\&.
 .PP
-After a round occurs where no new source files are generated, the annotation processors are called one last time, to give them a chance to complete any remaining work\&. Finally, unless the
-\fB\-proc:only\fR
-option is used, the compiler compiles the original and all generated source files\&.
-.SS "Implicitly Loaded Source Files"
-.PP
-To compile a set of source files, the compiler might need to implicitly load additional source files\&. See Searching for Types\&. Such files are currently not subject to annotation processing\&. By default, the compiler gives a warning when annotation processing occurred and any implicitly loaded source files are compiled\&. The
-\fB\-implicit\fR
-option provides a way to suppress the warning\&.
-.SH "SEARCHING FOR TYPES"
-.PP
+After a round occurs where no new source files are generated, the annotation processors are called one last time, to give them a chance to complete any remaining work\&. Finally, unless the \f3-proc:only\fR option is used, the compiler compiles the original and all generated source files\&.
+.SS IMPLICITLY\ LOADED\ SOURCE\ FILES    
+To compile a set of source files, the compiler might need to implicitly load additional source files\&. See Searching for Types\&. Such files are currently not subject to annotation processing\&. By default, the compiler gives a warning when annotation processing occurred and any implicitly loaded source files are compiled\&. The \f3-implicit\fR option provides a way to suppress the warning\&.
+.SH SEARCHING\ FOR\ TYPES    
 To compile a source file, the compiler often needs information about a type, but the type definition is not in the source files specified on the command line\&. The compiler needs type information for every class or interface used, extended, or implemented in the source file\&. This includes classes and interfaces not explicitly mentioned in the source file, but that provide information through inheritance\&.
 .PP
-For example, when you create a subclass
-\fBjava\&.applet\&.Applet\fR, you are also using the ancestor classes of
-\fBApplet\fR:
-\fBjava\&.awt\&.Panel\fR,
-\fBjava\&.awt\&.Container\fR,
-\fBjava\&.awt\&.Component\fR, and
-\fBjava\&.lang\&.Object\fR\&.
+For example, when you create a subclass \f3java\&.applet\&.Applet\fR, you are also using the ancestor classes of \f3Applet\fR: \f3java\&.awt\&.Panel\fR, \f3java\&.awt\&.Container\fR, \f3java\&.awt\&.Component\fR, and \f3java\&.lang\&.Object\fR\&.
+.PP
+When the compiler needs type information, it searches for a source file or class file that defines the type\&. The compiler searches for class files first in the bootstrap and extension classes, then in the user class path (which by default is the current directory)\&. The user class path is defined by setting the \f3CLASSPATH\fR environment variable or by using the \f3-classpath\fR option\&.
+.PP
+If you set the \f3-sourcepath\fR option, then the compiler searches the indicated path for source files\&. Otherwise, the compiler searches the user class path for both class files and source files\&.
 .PP
-When the compiler needs type information, it searches for a source file or class file that defines the type\&. The compiler searches for class files first in the bootstrap and extension classes, then in the user class path (which by default is the current directory)\&. The user class path is defined by setting the
-\fBCLASSPATH\fR
-environment variable or by using the
-\fB\-classpath\fR
-option\&.
+You can specify different bootstrap or extension classes with the \f3-bootclasspath\fR and the \f3-extdirs\fR options\&. See Cross-Compilation Options\&.
 .PP
-If you set the
-\fB\-sourcepath\fR
-option, then the compiler searches the indicated path for source files\&. Otherwise, the compiler searches the user class path for both class files and source files\&.
+A successful type search may produce a class file, a source file, or both\&. If both are found, then you can use the \f3-Xprefer\fR option to instruct the compiler which to use\&. If \f3newer\fR is specified, then the compiler uses the newer of the two files\&. If \f3source\fR is specified, the compiler uses the source file\&. The default is \f3newer\fR\&.
 .PP
-You can specify different bootstrap or extension classes with the
-\fB\-bootclasspath\fR
-and the
-\fB\-extdirs\fR
-options\&. See Cross\-Compilation Options\&.
+If a type search finds a source file for a required type, either by itself, or as a result of the setting for the \f3-Xprefer\fR option, then the compiler reads the source file to get the information it needs\&. By default the compiler also compiles the source file\&. You can use the \f3-implicit\fR option to specify the behavior\&. If \f3none\fR is specified, then no class files are generated for the source file\&. If \f3class\fR is specified, then class files are generated for the source file\&.
 .PP
-A successful type search may produce a class file, a source file, or both\&. If both are found, then you can use the
-\fB\-Xprefer\fR
-option to instruct the compiler which to use\&. If
-\fBnewer\fR
-is specified, then the compiler uses the newer of the two files\&. If
-\fBsource\fR
-is specified, the compiler uses the source file\&. The default is
-\fBnewer\fR\&.
-.PP
-If a type search finds a source file for a required type, either by itself, or as a result of the setting for the
-\fB\-Xprefer\fR
-option, then the compiler reads the source file to get the information it needs\&. By default the compiler also compiles the source file\&. You can use the
-\fB\-implicit\fR
-option to specify the behavior\&. If
-\fBnone\fR
-is specified, then no class files are generated for the source file\&. If
-\fBclass\fR
-is specified, then class files are generated for the source file\&.
-.PP
-The compiler might not discover the need for some type information until after annotation processing completes\&. When the type information is found in a source file and no
-\fB\-implicit\fR
-option is specified, the compiler gives a warning that the file is being compiled without being subject to annotation processing\&. To disable the warning, either specify the file on the command line (so that it will be subject to annotation processing) or use the
-\fB\-implicit\fR
-option to specify whether or not class files should be generated for such source files\&.
-.SH "PROGRAMMATIC INTERFACE"
+The compiler might not discover the need for some type information until after annotation processing completes\&. When the type information is found in a source file and no \f3-implicit\fR option is specified, the compiler gives a warning that the file is being compiled without being subject to annotation processing\&. To disable the warning, either specify the file on the command line (so that it will be subject to annotation processing) or use the \f3-implicit\fR option to specify whether or not class files should be generated for such source files\&.
+.SH PROGRAMMATIC\ INTERFACE    
+The \f3javac\fR command supports the new Java Compiler API defined by the classes and interfaces in the \f3javax\&.tools\fR package\&.
+.SS EXAMPLE    
+To compile as though providing command-line arguments, use the following syntax:
+.sp     
+.nf     
+\f3JavaCompiler javac = ToolProvider\&.getSystemJavaCompiler();\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+The example writes diagnostics to the standard output stream and returns the exit code that \f3javac\fR would give when called from the command line\&.
 .PP
-The
-\fBjavac\fR
-command supports the new Java Compiler API defined by the classes and interfaces in the
-\fBjavax\&.tools\fR
-package\&.
-.SS "Example"
-.PP
-To compile as though providing command\-line arguments, use the following syntax:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBJavaCompiler javac = ToolProvider\&.getSystemJavaCompiler();\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.PP
-The example writes diagnostics to the standard output stream and returns the exit code that
-\fBjavac\fR
-would give when called from the command line\&.
+You can use other methods in the \f3javax\&.tools\&.JavaCompiler\fR interface to handle diagnostics, control where files are read from and written to, and more\&.
+.SS OLD\ INTERFACE    
+\fINote:\fR This API is retained for backward compatibility only\&. All new code should use the newer Java Compiler API\&.
 .PP
-You can use other methods in the
-\fBjavax\&.tools\&.JavaCompiler\fR
-interface to handle diagnostics, control where files are read from and written to, and more\&.
-.SS "Old Interface"
-.PP
-\fBNote:\fR
-This API is retained for backward compatibility only\&. All new code should use the newer Java Compiler API\&.
+The \f3com\&.sun\&.tools\&.javac\&.Main\fR class provides two static methods to call the compiler from a program:
+.sp     
+.nf     
+\f3public static int compile(String[] args);\fP
+.fi     
+.nf     
+\f3public static int compile(String[] args, PrintWriter out);\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+The \f3args\fR parameter represents any of the command-line arguments that would typically be passed to the compiler\&.
 .PP
-The
-\fBcom\&.sun\&.tools\&.javac\&.Main\fR
-class provides two static methods to call the compiler from a program:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBpublic static int compile(String[] args);\fR
-\fBpublic static int compile(String[] args, PrintWriter out);\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
+The \f3out\fR parameter indicates where the compiler diagnostic output is directed\&.
+.PP
+The \f3return\fR value is equivalent to the \f3exit\fR value from \f3javac\fR\&.
 .PP
-The
-\fBargs\fR
-parameter represents any of the command\-line arguments that would typically be passed to the compiler\&.
+\fINote:\fR All other classes and methods found in a package with names that start with \f3com\&.sun\&.tools\&.javac\fR (subpackages of \f3com\&.sun\&.tools\&.javac\fR) are strictly internal and subject to change at any time\&.
+.SH EXAMPLES    
+\f3Example 1 Compile a Simple Program\fR
 .PP
-The
-\fBout\fR
-parameter indicates where the compiler diagnostic output is directed\&.
+This example shows how to compile the \f3Hello\&.java\fR source file in the greetings directory\&. The class defined in \f3Hello\&.java\fR is called \f3greetings\&.Hello\fR\&. The greetings directory is the package directory both for the source file and the class file and is underneath the current directory\&. This makes it possible to use the default user class path\&. It also makes it unnecessary to specify a separate destination directory with the \f3-d\fR option\&.
 .PP
-The
-\fBreturn\fR
-value is equivalent to the
-\fBexit\fR
-value from
-\fBjavac\fR\&.
-.PP
-\fBNote:\fR
-All other classes and methods found in a package with names that start with
-\fBcom\&.sun\&.tools\&.javac\fR
-(subpackages of
-\fBcom\&.sun\&.tools\&.javac\fR) are strictly internal and subject to change at any time\&.
-.SH "EXAMPLES"
-.PP
-\fBExample 1\fR
-.br
-Compile a Simple Program
-.RS 4
-This example shows how to compile the
-\fBHello\&.java\fR
-source file in the greetings directory\&. The class defined in
-\fBHello\&.java\fR
-is called
-\fBgreetings\&.Hello\fR\&. The greetings directory is the package directory both for the source file and the class file and is underneath the current directory\&. This makes it possible to use the default user class path\&. It also makes it unnecessary to specify a separate destination directory with the
-\fB\-d\fR
-option\&.
-.sp
-The source code in
-\fBHello\&.java\fR:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBpackage greetings;\fR
-\fB \fR
-\fBpublic class Hello {\fR
-\fB    public static void main(String[] args) {\fR
-\fB        for (int i=0; i < args\&.length; i++) {\fR
-\fB            System\&.out\&.println("Hello " + args[i]);\fR
-\fB        }\fR
-\fB    }\fR
-\fB}\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
+The source code in \f3Hello\&.java\fR:
+.sp     
+.nf     
+\f3package greetings;\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.nf     
+\f3public class Hello {\fP
+.fi     
+.nf     
+\f3    public static void main(String[] args) {\fP
+.fi     
+.nf     
+\f3        for (int i=0; i < args\&.length; i++) {\fP
+.fi     
+.nf     
+\f3            System\&.out\&.println("Hello " + args[i]);\fP
+.fi     
+.nf     
+\f3        }\fP
+.fi     
+.nf     
+\f3    }\fP
+.fi     
+.nf     
+\f3}\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
 Compile greetings\&.Hello:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBjavac greetings/Hello\&.java\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-Run
-\fBgreetings\&.Hello\fR:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBjava greetings\&.Hello World Universe Everyone\fR
-\fBHello World\fR
-\fBHello Universe\fR
-\fBHello Everyone\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
+.sp     
+.nf     
+\f3javac greetings/Hello\&.java\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+Run \f3greetings\&.Hello\fR:
+.sp     
+.nf     
+\f3java greetings\&.Hello World Universe Everyone\fP
+.fi     
+.nf     
+\f3Hello World\fP
+.fi     
+.nf     
+\f3Hello Universe\fP
+.fi     
+.nf     
+\f3Hello Everyone\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+\f3Example 2 Compile Multiple Source Files\fR
 .PP
-\fBExample 2\fR
-.br
-Compile Multiple Source Files
-.RS 4
-This example compiles the
-\fBAloha\&.java\fR,
-\fBGutenTag\&.java\fR,
-\fBHello\&.java\fR, and
-\fBHi\&.java\fR
-source files in the
-\fBgreetings\fR
-package\&.
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fB% javac greetings/*\&.java\fR
-\fB% ls greetings\fR
-\fBAloha\&.class         GutenTag\&.class      Hello\&.class         Hi\&.class\fR
-\fBAloha\&.java          GutenTag\&.java       Hello\&.java          Hi\&.java\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
+This example compiles the \f3Aloha\&.java\fR, \f3GutenTag\&.java\fR, \f3Hello\&.java\fR, and \f3Hi\&.java\fR source files in the \f3greetings\fR package\&.
+.sp     
+.nf     
+\f3% javac greetings/*\&.java\fP
+.fi     
+.nf     
+\f3% ls greetings\fP
+.fi     
+.nf     
+\f3Aloha\&.class         GutenTag\&.class      Hello\&.class         Hi\&.class\fP
+.fi     
+.nf     
+\f3Aloha\&.java          GutenTag\&.java       Hello\&.java          Hi\&.java\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+\f3Example 3 Specify a User Class Path\fR
 .PP
-\fBExample 3\fR
-.br
-Specify a User Class Path
-.RS 4
 After changing one of the source files in the previous example, recompile it:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBpwd\fR
-\fB/examples\fR
-\fBjavac greetings/Hi\&.java\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-Because
-\fBgreetings\&.Hi\fR
-refers to other classes in the
-\fBgreetings\fR
-package, the compiler needs to find these other classes\&. The previous example works because the default user class path is the directory that contains the package directory\&. If you want to recompile this file without concern for which directory you are in, then add the examples directory to the user class path by setting
-\fBCLASSPATH\fR\&. This example uses the
-\fB\-classpath\fR
-option\&.
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBjavac \-classpath /examples /examples/greetings/Hi\&.java\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-If you change
-\fBgreetings\&.Hi\fR
-to use a banner utility, then that utility also needs to be accessible through the user class path\&.
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBjavac \-classpath /examples:/lib/Banners\&.jar \e\fR
-\fB            /examples/greetings/Hi\&.java\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-To execute a class in the
-\fBgreetings\fR
-package, the program needs access to the
-\fBgreetings\fR
-package, and to the classes that the
-\fBgreetings\fR
-classes use\&.
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBjava \-classpath /examples:/lib/Banners\&.jar greetings\&.Hi\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-.RE
+.sp     
+.nf     
+\f3pwd\fP
+.fi     
+.nf     
+\f3/examples\fP
+.fi     
+.nf     
+\f3javac greetings/Hi\&.java\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+Because \f3greetings\&.Hi\fR refers to other classes in the \f3greetings\fR package, the compiler needs to find these other classes\&. The previous example works because the default user class path is the directory that contains the package directory\&. If you want to recompile this file without concern for which directory you are in, then add the examples directory to the user class path by setting \f3CLASSPATH\fR\&. This example uses the \f3-classpath\fR option\&.
+.sp     
+.nf     
+\f3javac \-classpath /examples /examples/greetings/Hi\&.java\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+If you change \f3greetings\&.Hi\fR to use a banner utility, then that utility also needs to be accessible through the user class path\&.
+.sp     
+.nf     
+\f3javac \-classpath /examples:/lib/Banners\&.jar \e\fP
+.fi     
+.nf     
+\f3            /examples/greetings/Hi\&.java\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+To execute a class in the \f3greetings\fR package, the program needs access to the \f3greetings\fR package, and to the classes that the \f3greetings\fR classes use\&.
+.sp     
+.nf     
+\f3java \-classpath /examples:/lib/Banners\&.jar greetings\&.Hi\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+\f3Example 4 Separate Source Files and Class Files\fR
 .PP
-\fBExample 4\fR
-.br
-Separate Source Files and Class Files
-.RS 4
-The following example uses
-\fBjavac\fR
-to compile code that runs on JVM 1\&.7\&.
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBjavac \-source 1\&.7 \-target 1\&.7 \-bootclasspath jdk1\&.7\&.0/lib/rt\&.jar \e \fR
-\fB\-extdirs "" OldCode\&.java\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-The
-\fB\-source 1\&.7\fR
-option specifies that release 1\&.7 (or 7) of the Java programming language be used to compile
-\fBOldCode\&.java\fR\&. The option
-\fB\-target 1\&.7\fR
-option ensures that the generated class files are compatible with JVM 1\&.7\&. Note that in most cases, the value of the
-\fB\-target\fR
-option is the value of the
-\fB\-source\fR
-option; in this example, you can omit the
-\fB\-target\fR
-option\&.
-.sp
-You must specify the
-\fB\-bootclasspath\fR
-option to specify the correct version of the bootstrap classes (the
-\fBrt\&.jar\fR
-library)\&. If not, then the compiler generates a warning:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBjavac \-source 1\&.7 OldCode\&.java\fR
-\fBwarning: [options] bootstrap class path not set in conjunction with \fR
-\fB\-source 1\&.7\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
+The following example uses \f3javac\fR to compile code that runs on JVM 1\&.7\&.
+.sp     
+.nf     
+\f3javac \-source 1\&.7 \-target 1\&.7 \-bootclasspath jdk1\&.7\&.0/lib/rt\&.jar \e \fP
+.fi     
+.nf     
+\f3\-extdirs "" OldCode\&.java\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+The \f3-source 1\&.7\fR option specifies that release 1\&.7 (or 7) of the Java programming language be used to compile \f3OldCode\&.java\fR\&. The option \f3-target 1\&.7\fR option ensures that the generated class files are compatible with JVM 1\&.7\&. Note that in most cases, the value of the \f3-target\fR option is the value of the \f3-source\fR option; in this example, you can omit the \f3-target\fR option\&.
+.PP
+You must specify the \f3-bootclasspath\fR option to specify the correct version of the bootstrap classes (the \f3rt\&.jar\fR library)\&. If not, then the compiler generates a warning:
+.sp     
+.nf     
+\f3javac \-source 1\&.7 OldCode\&.java\fP
+.fi     
+.nf     
+\f3warning: [options] bootstrap class path not set in conjunction with \fP
+.fi     
+.nf     
+\f3\-source 1\&.7\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
 If you do not specify the correct version of bootstrap classes, then the compiler uses the old language rules (in this example, it uses version 1\&.7 of the Java programming language) combined with the new bootstrap classes, which can result in class files that do not work on the older platform (in this case, Java SE 7) because reference to nonexistent methods can get included\&.
-.RE
+.PP
+\f3Example 5 Cross Compile\fR
 .PP
-\fBExample 5\fR
-.br
-Cross Compile
-.RS 4
-This example uses
-\fBjavac\fR
-to compile code that runs on JVM 1\&.7\&.
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBjavac \-source 1\&.7 \-target 1\&.7 \-bootclasspath jdk1\&.7\&.0/lib/rt\&.jar \e\fR
-\fB            \-extdirs "" OldCode\&.java\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
-The\fB \-source 1\&.7\fR
-option specifies that release 1\&.7 (or 7) of the Java programming language to be used to compile OldCode\&.java\&. The
-\fB\-target 1\&.7\fR
-option ensures that the generated class files are compatible with JVM 1\&.7\&. In most cases, the value of the
-\fB\-target\fR
-is the value of
-\fB\-source\fR\&. In this example, the
-\fB\-target\fR
-option is omitted\&.
-.sp
-You must specify the
-\fB\-bootclasspath\fR
-option to specify the correct version of the bootstrap classes (the
-\fBrt\&.jar\fR
-library)\&. If not, then the compiler generates a warning:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\fBjavac \-source 1\&.7 OldCode\&.java\fR
-\fBwarning: [options] bootstrap class path not set in conjunction with \-source 1\&.7\fR
- 
-.fi
-.if n \{\
-.RE
-.\}
+This example uses \f3javac\fR to compile code that runs on JVM 1\&.7\&.
+.sp     
+.nf     
+\f3javac \-source 1\&.7 \-target 1\&.7 \-bootclasspath jdk1\&.7\&.0/lib/rt\&.jar \e\fP
+.fi     
+.nf     
+\f3            \-extdirs "" OldCode\&.java\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
+The\f3-source 1\&.7\fR option specifies that release 1\&.7 (or 7) of the Java programming language to be used to compile OldCode\&.java\&. The \f3-target 1\&.7\fR option ensures that the generated class files are compatible with JVM 1\&.7\&.
+.PP
+You must specify the \f3-bootclasspath\fR option to specify the correct version of the bootstrap classes (the \f3rt\&.jar\fR library)\&. If not, then the compiler generates a warning:
+.sp     
+.nf     
+\f3javac \-source 1\&.7 OldCode\&.java\fP
+.fi     
+.nf     
+\f3warning: [options] bootstrap class path not set in conjunction with \-source 1\&.7\fP
+.fi     
+.nf     
+\f3\fP
+.fi     
+.sp     
 If you do not specify the correct version of bootstrap classes, then the compiler uses the old language rules combined with the new bootstrap classes\&. This combination can result in class files that do not work on the older platform (in this case, Java SE 7) because reference to nonexistent methods can get included\&. In this example, the compiler uses release 1\&.7 of the Java programming language\&.
-.RE
-.SH "SEE ALSO"
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
+.SH SEE\ ALSO    
+.TP 0.2i    
+\(bu
 java(1)
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
+.TP 0.2i    
+\(bu
 jdb(1)
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
+.TP 0.2i    
+\(bu
 javah(1)
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
+.TP 0.2i    
+\(bu
 javadoc(1)
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
+.TP 0.2i    
+\(bu
 jar(1)
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
+.TP 0.2i    
+\(bu
 jdb(1)
-.RE
-.br
-'pl 8.5i
-'bp
+.RE
+.br
+'pl 8.5i
+'bp
--- a/src/solaris/doc/sun/man/man1/javadoc.1	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/solaris/doc/sun/man/man1/javadoc.1	Tue Nov 04 17:20:19 2014 +0000
@@ -1,5 +1,5 @@
 '\" t
-.\"  Copyright (c) 1994, 2013, Oracle and/or its affiliates. All rights reserved.
+.\"  Copyright (c) 1994, 2015, Oracle and/or its affiliates. All rights reserved.
 .\"
 .\" DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 .\"
@@ -23,12 +23,12 @@
 .\"
 .\"     Arch: generic
 .\"     Software: JDK 8
-.\"     Date: 10 May 2011
+.\"     Date: 03 March 2015
 .\"     SectDesc: Basic Tools
 .\"     Title: javadoc.1
 .\"
 .if n .pl 99999
-.TH javadoc 1 "10 May 2011" "JDK 8" "Basic Tools"
+.TH javadoc 1 "03 March 2015" "JDK 8" "Basic Tools"
 .\" -----------------------------------------------------------------
 .\" * Define some portability stuff
 .\" -----------------------------------------------------------------
@@ -209,7 +209,7 @@
 \f3package java\&.lang\&.applet;\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 
@@ -251,7 +251,7 @@
 \f3initialize, start, and stop the applet\&. \fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .nf     
 \f3@since 1\&.0 \fP
@@ -266,7 +266,7 @@
 \f3</HTML>\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 The \f3package\&.html\fR file is a typical HTML file and does not include a package declaration\&. The content of the package comment file is written in HTML with one exception\&. The documentation comment should not include the comment separators \f3/**\fR and \f3*/\fR or leading asterisks\&. When writing the comment, make the first sentence a summary about the package, and do not put a title or any other text between the \f3<body>\fR tag and the first sentence\&. You can include package tags\&. All block tags must appear after the main description\&. If you add an \f3@see\fR tag in a package comment file, then it must have a fully qualified name\&.
@@ -334,7 +334,7 @@
 \f3 */\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 .SS TEST\ AND\ TEMPLATE\ FILES    
@@ -350,7 +350,7 @@
 \f3com/package1/test\-files/\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 If your test files contain documentation comments, then you can set up a separate run of the \f3javadoc\fR command to produce test file documentation by passing in their test source file names with wild cards, such as \f3com/package1/test-files/*\&.java\fR\&.
@@ -560,7 +560,7 @@
 \f3implements Serializable\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 The declaration for the \f3Boolean\&.valueOf\fR method is:
@@ -569,7 +569,7 @@
 \f3public static Boolean valueOf(String s)\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 The \f3javadoc\fR command can include the modifiers \f3public\fR, \f3protected\fR, \f3private\fR, \f3abstract\fR, \f3final\fR, \f3static\fR, \f3transient\fR, and \f3volatile\fR, but not \f3synchronized\fR or \f3native\fR\&. The \f3synchronized\fR and \f3native\fR modifiers are considered implementation detail and not part of the API specification\&.
@@ -593,7 +593,7 @@
 \f3 */\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 To save space you can put a comment on one line:
@@ -602,7 +602,7 @@
 \f3/** This comment takes up only one line\&. */\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 
@@ -623,19 +623,19 @@
 \f3 */\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .nf     
 \f3import com\&.example;   // MISTAKE \- Important not to put import statement here\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .nf     
 \f3public class Whatever{ }\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 
@@ -657,7 +657,7 @@
 \f3 */\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 
@@ -676,7 +676,7 @@
 \f3 */\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 
@@ -700,7 +700,7 @@
 \f3 */\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 
@@ -730,7 +730,7 @@
 \f3public int x, y;      // Avoid this \fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 The \f3javadoc\fR command generates the following documentation from the previous code:
@@ -739,7 +739,7 @@
 \f3public int x\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 The horizontal and vertical distances of point (x, y)\&.
@@ -748,7 +748,7 @@
 \f3public int y\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 The horizontal and vertical distances of point (x, y)\&.
@@ -872,7 +872,7 @@
 \f3 */\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 
@@ -899,11 +899,10 @@
 .TP 0.2i    
 \(bu
 In the text arguments of the \f3@return\fR, \f3@param,\fR and \f3@throws\fR tags of a method\&. In this case, the tag text is copied from the corresponding tag up the hierarchy\&.
-.RE
-.RS
+.RE     
+
+
 See Method Comment Inheritance for a description of how comments are found in the inheritance hierarchy\&. Note that if this tag is missing, then the comment is or is not automatically inherited according to rules described in that section\&.
-
-.RE
 .TP     
 {@link \fIpackage\&.class#member label\fR}
 Introduced in JDK 1\&.2
@@ -920,7 +919,7 @@
 \f3Use the {@link #getComponentAt(int, int) getComponentAt} method\&.\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 
@@ -931,7 +930,7 @@
 \f3Use the <a href="Component\&.html#getComponentAt(int, int)">getComponentAt</a> method\&.\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 
@@ -942,7 +941,7 @@
 \f3Use the getComponentAt method\&.\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 
@@ -982,7 +981,7 @@
 \f3}\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 
@@ -1014,7 +1013,7 @@
 \f3}\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 
@@ -1071,7 +1070,7 @@
 \f3 */\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 
@@ -1091,7 +1090,7 @@
 \f3</dl>\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 
@@ -1128,7 +1127,7 @@
 \f3@see #constructor(Type argname, Type argname,\&.\&.\&.) \fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .nf     
 \f3\fIReferencing another class in the current or imported packages\fR\fP
@@ -1155,7 +1154,7 @@
 \f3@see Class \fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .nf     
 \f3\fIReferencing an element in another package (fully qualified)\fR\fP
@@ -1185,7 +1184,7 @@
 \f3@see package\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 \f3\fRNotes about the previous listing:
@@ -1215,7 +1214,7 @@
 Any enclosing classes and interfaces searching the closest first\&.
 .TP 0.4i    
 3\&.
-Any superclasses and superonterfaces, searching the closest first\&.
+Any superclasses and superinterfaces, searching the closest first\&.
 .TP 0.4i    
 4\&.
 The current package\&.
@@ -1307,7 +1306,7 @@
 \f3@see "The Java Programming Language"    //  "The Java Programming Language" \fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 \fINote:\fR You can extend the \f3@se\fR\f3e\fR tag to link to classes not being documented with the \f3-link\fR option\&.
@@ -1317,7 +1316,7 @@
 
 Used in the documentation comment for a default serializable field\&. See Documenting Serializable Fields and Data for a Class at http://docs\&.oracle\&.com/javase/8/docs/platform/serialization/spec/serial-arch\&.html#5251
 
-See also Oracle\(cqs Criteria for Including Classes in the Serialilzed Form Specification at http://www\&.oracle\&.com/technetwork/java/javase/documentation/serialized-criteria-137781\&.html
+See also Oracle\(cqs Criteria for Including Classes in the Serialized Form Specification at http://www\&.oracle\&.com/technetwork/java/javase/documentation/serialized-criteria-137781\&.html
 
 An optional \f3field-description\fR should explain the meaning of the field and list the acceptable values\&. When needed, the description can span multiple lines\&. The standard doclet adds this information to the serialized form page\&. See Cross-Reference Pages\&.
 
@@ -1331,13 +1330,12 @@
 .TP 0.2i    
 \(bu
 A private or package-private class that implements \f3Serializable\fR is excluded unless that class (or its package) is marked with the \f3@serial include\fR tag\&.
-.RE
-.RS
+.RE     
+
+
 For example, the \f3javax\&.swing\fR package is marked with the \f3@serial\fR\f3exclude\fR tag in package\&.html or package-info\&.java\&. The public class \f3java\&.security\&.BasicPermission\fR is marked with the \f3@serial exclude\fR tag\&. The package-private class \f3java\&.util\&.PropertyPermissionCollection\fR is marked with the \f3@serial include\fR tag\&.
 
 The \f3@serial\fR tag at the class level overrides the \f3@serial\fR tag at the package level\&.
-
-.RE
 .TP     
 @serialData \fIdata-description\fR
 Introduced in JDK 1\&.2
@@ -1387,7 +1385,7 @@
 \f3public static final String SCRIPT_START = "<script>"\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 
@@ -1407,7 +1405,7 @@
 \f3public String evalScript(String script) {}\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 
@@ -1494,7 +1492,7 @@
 \f3}\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 .SS FIELD\ TAGS    
@@ -1523,7 +1521,7 @@
 \f3    int x = 1263732;\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 .SS CONSTRUCTOR\ AND\ METHOD\ TAGS    
@@ -1578,7 +1576,7 @@
 \f3    }\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 .SH OPTIONS    
@@ -1592,7 +1590,7 @@
 .PP
 The options are:
 .PP
--1\&.1 || -author || -bootclasspath classpathlist || -bottom text || -breakiterator || -charset name || -classpath classpathlist || -d directory || -docencoding name || -docfilesubdirs || -doclet class || -docletpath classpathlist || -doctitle title || -encoding || -exclude packagename1:packagename2:\&.\&.\&. || -excludedocfilessubdir name1:name2 || -extdirs dirist || -footer footer || -group groupheading packagepattern:packagepattern || -header header || -help || -helpfile path\efilename || -Jflag || -keywords || -link extdocURL || -linkoffline extdocURL packagelistLoc || -linksource || -locale language_country_variant || -nocomment || -nodeprecated || -nodeprecatedlist || -nohelp || -noindex || -nonavbar || -noqualifier all | packagename1:packagename2\&.\&.\&. || -nosince || -notimestamp || -notree || -overview path/filename || -package || -private || -protected || -public || -quiet || -serialwarn || -source release || -sourcepath sourcepathlist || -sourcetab tablength || -splitindex || -stylesheet path/filename || -subpackages package1:package2:\&.\&.\&. || -tag tagname:Xaoptcmf:"taghead" || -taglet class || -tagletpath tagletpathlist || -title title || -top || -use || -verbose || -version || -windowtitle title
+-1\&.1 || -author || -bootclasspath classpathlist || -bottom text || -breakiterator || -charset name || -classpath classpathlist || -d directory || -docencoding name || -docfilesubdirs || -doclet class || -docletpath classpathlist || -doctitle title || -encoding || -exclude packagename1:packagename2:\&.\&.\&. || -excludedocfilessubdir name1:name2 || -extdirs dirist || -footer footer || -group groupheading packagepattern:packagepattern || -header header || -help || -helpfile path\efilename || -Jflag || -javafx ||-keywords || -link extdocURL || -linkoffline extdocURL packagelistLoc || -linksource || -locale language_country_variant || -nocomment || -nodeprecated || -nodeprecatedlist || -nohelp || -noindex || -nonavbar || -noqualifier all | packagename1:packagename2\&.\&.\&. || -nosince || -notimestamp || -notree || -overview path/filename || -package || -private || -protected || -public || -quiet || -serialwarn || -source release || -sourcepath sourcepathlist || -sourcetab tablength || -splitindex || -stylesheet path/filename || -subpackages package1:package2:\&.\&.\&. || -tag tagname:Xaoptcmf:"taghead" || -taglet class || -tagletpath tagletpathlist || -title title || -top || -use || -verbose || -version || -windowtitle title
 .PP
 The following options are the core Javadoc options that are available to all doclets\&. The standard doclet provides the rest of the doclets: \f3-bootclasspath\fR, \f3-breakiterator\fR, \f3-classpath\fR, \f3-doclet\fR, \f3-docletpath\fR, \f3-encoding\fR, -\f3exclude\fR, \f3-extdirs\fR, \f3-help\fR, \f3-locale\fR, \f3-\fR\f3overview\fR, \f3-package\fR, \f3-private\fR, \f3-protected\fR, \f3-public\fR, \f3-quiet\fR, \f3-source\fR, \f3-sourcepath\fR, \f3-subpackages\fR, and \f3-verbose\fR\&.
 .SS JAVADOC\ OPTIONS    
@@ -1635,12 +1633,11 @@
 .TP 0.2i    
 \(bu
 \f3-Xdoclint all,\fR\fI-group\fR : enable all except \fIgroup\fR checks
-.RE
-.RS
+.RE     
+
+
 The variable \fIgroup\fR has one of the following values:
 .RS     
-
-.RE
 .TP 0.2i    
 \(bu
 \f3accessibility\fR : Checks for the issues to be detected by an accessibility checker (for example, no caption or summary attributes specified in a \f3<table>\fR tag)\&.
@@ -1656,8 +1653,9 @@
 .TP 0.2i    
 \(bu
 \f3syntax\fR : Checks for low level issues like unescaped angle brackets (\f3<\fR and \f3>\fR) and ampersands (\f3&\fR) and invalid Javadoc tags\&.
-.RE
-.RS
+.RE     
+
+
 You can specify the \f3-Xdoclint\fR option multiple times to enable the option to check errors and warnings in multiple categories\&. Alternatively, you can specify multiple error and warning categories by using the preceding options\&. For example, use either of the following commands to check for the HTML, syntax, and accessibility issues in the file \fIfilename\fR\&.
 .sp     
 .nf     
@@ -1667,7 +1665,7 @@
 \f3javadoc \-Xdoclint:html,syntax,accessibility \fIfilename\fR\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 
@@ -1675,8 +1673,6 @@
 \fINote:\fR The \f3javadoc\fR command does not guarantee the completeness of these checks\&. In particular, it is not a full HTML compliance checker\&. The goal of the -\f3Xdoclint\fR option is to enable the \f3javadoc\fR command to report majority of common errors\&.
 
 The \f3javadoc\fR command does not attempt to fix invalid input, it just reports it\&.
-
-.RE
 .TP
 -public
 .br
@@ -1740,7 +1736,7 @@
 \f3javadoc \-sourcepath /home/user/src/ com\&.mypackage\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 
@@ -1755,7 +1751,7 @@
 \f3javadoc \-sourcepath /home/user1/src:/home/user2/src com\&.mypackage\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 
@@ -1766,13 +1762,13 @@
 
 If you omit \f3-sourcepath\fR, then the \f3javadoc\fR command uses \f3-classpath\fR to find the source files and class files (for backward compatibility)\&. If you want to search for source and class files in separate paths, then use both \f3-sourcepath\fR and \f3-classpath\fR\&.
 
-For example, if you want to document \f3com\&.mypackage\fR, whose source files reside in the directory /home/user/src/com/mypackage, and if this package relies on a library in /home/user/libthen you would use the following command:
+For example, if you want to document \f3com\&.mypackage\fR, whose source files reside in the directory /home/user/src/com/mypackage, and if this package relies on a library in /home/user/lib, then you would use the following command:
 .sp     
 .nf     
 \f3javadoc \-sourcepath /home/user/lib \-classpath /home/user/src com\&.mypackage\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 
@@ -1795,7 +1791,7 @@
 \f3javadoc \-d docs \-sourcepath /home/user/src  \-subpackages java:javax\&.swing \fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 
@@ -1813,7 +1809,7 @@
 \f3    java\&.net:java\&.lang\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 
@@ -1846,11 +1842,10 @@
 .TP 0.2i    
 \(bu
 Breakiterator sentence-break algorithm\&. Stops at a period, question mark, or exclamation point followed by a space when the next word starts with a capital letter\&. This is meant to handle most abbreviations (such as "The serial no\&. is valid", but will not handle "Mr\&. Smith")\&. The \f3-breakiterator\fR option does not stop at HTML tags or sentences that begin with numbers or symbols\&. The algorithm stops at the last period in \&.\&./filename, even when embedded in an HTML tag\&.
-.RE
-.RS
+.RE     
+
+
 In Java SE 1\&.5 the \f3-breakiterator\fR option warning messages are removed, and the default sentence-break algorithm is unchanged\&. If you have not modified your source code to eliminate the \f3-breakiterator\fR option warnings in Java SE 1\&.4\&.x, then you do not have to do anything\&. The warnings go away starting with Java SE 1\&.5\&.0\&.
-
-.RE
 .TP
 -locale \fIlanguage_country_variant\fR
 .br
@@ -1885,7 +1880,21 @@
 \f3Java HotSpot(TM) 64\-Bit Server VM (build 23\&.5\-b02, mixed mode)\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
+.fi     
+.sp     
+
+.TP
+-javafx
+.br
+Generates HTML documentation using the JavaFX extensions to the standard doclet\&. The generated documentation includes a Property Summary section in addition to the other summary sections generated by the standard Java doclet\&. The listed properties are linked to the sections for the getter and setter methods of each property\&.
+
+If there are no documentation comments written explicitly for getter and setter methods, the documentation comments from the property method are automatically copied to the generated documentation for these methods\&. This option also adds a new \f3@defaultValue\fR tag that allows documenting the default value for a property\&.
+
+Example:
+.sp     
+.nf     
+\f3javadoc \-javafx MyClass\&.java \-d testdir\fP
 .fi     
 .sp     
 
@@ -1957,7 +1966,7 @@
 \f3\-link <directory>/<directory>/\&.\&.\&./<name>\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 
@@ -1982,7 +1991,7 @@
 \f3javadoc \-link http://docs\&.oracle\&.com/javase/8/docs/api/ com\&.mypackage\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 The command generates documentation for the package \f3com\&.mypackage\fR with links to the Java SE packages\&. The generated documentation contains links to the \f3Object\fR class, for example, in the class \f3trees\fR\&. Other options, such as the \f3-sourcepath\fR and \f3-d\fR options, are not shown\&.
@@ -2044,7 +2053,7 @@
 \f3and so on \&.\&.\&.\&.\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 When \f3javadoc\fR is run without the \f3-link\fR option and encounters a name that belongs to an externally referenced class, it prints the name with no link\&. However, when the \f3-link\fR option is used, the \f3javadoc\fR command searches the package-list file at the specified \fIextdocURL\fR location for that package name\&. When it finds the package name, it prefixes the name with \fIextdocURL\fR\&.
@@ -2094,7 +2103,7 @@
 \f3javadoc \-linkoffline http://docs\&.oracle\&.com/javase/8/docs/api/ \&.  com\&.mypackage \fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 
@@ -2118,7 +2127,7 @@
 \f3packagelistLoc2 \&.\&.\&.\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 
@@ -2133,7 +2142,7 @@
 \f3javadoc \-d update \-linkoffline \&. html com\&.mypackage\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 When the \f3javadoc\fR command completes, copy these generated class pages in update/com/package (not the overview or index) to the original files in html/com/package\&.
@@ -2150,7 +2159,7 @@
 \f3public class Button extends Component implements Accessible\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 
@@ -2161,7 +2170,7 @@
 \f3public String getLabel()\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 
@@ -2176,8 +2185,9 @@
 .TP 0.2i    
 \(bu
 The \f3packagepattern\fR value can be any package name at the start of any package name followed by an asterisk (*)\&. The asterisk is the only wildcard allowed and means match any characters\&. Multiple patterns can be included in a group by separating them with colons (:)\&. If you use an asterisk in a pattern or pattern list, then the pattern list must be inside quotation marks, such as \f3"java\&.lang*:java\&.util"\fR\&.
-.RE
-.RS
+.RE     
+
+
 When you do not supply a \f3-group\fR option, all packages are placed in one group with the heading \fIPackages\fR and appropriate subheadings\&. If the subheadings do not include all documented packages (all groups), then the remaining packages appear in a separate group with the subheading Other Packages\&.
 
 For example, the following \f3javadoc\fR command separates the three documented packages into \fICore\fR, \fIExtension\fR, and \fIOther Packages\fR\&. The trailing dot (\&.) does not appear in \f3java\&.lang*\fR\&. Including the dot, such as \f3java\&.lang\&.*\fR omits the\f3java\&.lang\fR package\&.
@@ -2192,7 +2202,7 @@
 \f3        java\&.lang java\&.lang\&.reflect java\&.util javax\&.servlet java\&.new\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 
@@ -2212,8 +2222,6 @@
 \fIOther Packages\fR
 
 \f3java\&.new\fR
-
-.RE
 .TP
 -nodeprecated
 .br
@@ -2251,7 +2259,7 @@
 \f3javadoc \-helpfile /home/user/myhelp\&.html java\&.awt\&.\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 
@@ -2264,7 +2272,7 @@
 \f3javadoc \-stylesheet file /home/user/mystylesheet\&.css com\&.mypackage\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 
@@ -2283,7 +2291,7 @@
 \f3<META http\-equiv="Content\-Type" content="text/html; charset=ISO\-8859\-1">\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 
@@ -2296,7 +2304,7 @@
 .br
 Specifies the encoding of the generated HTML files\&. The name should be a preferred MIME name as specified in the IANA Registry, Character Sets at http://www\&.iana\&.org/assignments/character-sets
 
-If you omit the \f3-docencoding\fR option but use the \f3-encoding\fR option, then the encoding of the generated HTML files is determined by the \f3-encoding\fR option, for example: \f3javadoc -docencoding"iso-8859-1" mypackage\fR\&. See also the \f3-encoding\fR and \f3-docencoding name\fR options\&.
+If you omit the \f3-docencoding\fR option but use the \f3-encoding\fR option, then the encoding of the generated HTML files is determined by the \f3-encoding\fR option, for example: \f3javadoc -docencoding "iso-8859-1" mypackage\fR\&. See also the \f3-encoding\fR and \f3-docencoding name\fR options\&.
 .TP
 -keywords
 .br
@@ -2315,7 +2323,7 @@
 \f3<META NAME="keywords" CONTENT="charAt()">\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 
@@ -2360,7 +2368,7 @@
 \f3 */\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 
@@ -2390,7 +2398,7 @@
 \f3\-tag example:X\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 
@@ -2433,7 +2441,7 @@
 \f3\-tag see\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 
@@ -2523,7 +2531,7 @@
 \f3\-sourcepath /java/pubs/ws/1\&.7\&.0/src/share/classes\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 Create a file named packages that contains:
@@ -2538,7 +2546,7 @@
 \f3com\&.mypackage3\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 Run the \f3javadoc\fR command as follows:
@@ -2547,7 +2555,7 @@
 \f3javadoc @options @packages\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 \f3Example 3 Argument Files with Paths\fR
@@ -2558,7 +2566,7 @@
 \f3javadoc @path1/options @path2/packages\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 \f3Example 4 Option Arguments\fR
@@ -2581,7 +2589,7 @@
 \f3    Other names may be trademarks of their respective owners\&.</font>\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 Run the \f3javadoc\fR command as follows:\f3javadoc -bottom @bottom @packages\fR\&.
@@ -2616,7 +2624,7 @@
 \f3javadoc \-d /home/html \-sourcepath /home/src \-subpackages java \-exclude\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 \f3Example 2 Change to Root and Run Explicit Packages\fR
@@ -2630,7 +2638,7 @@
 \f3javadoc \-d /home/html java\&.awt java\&.awt\&.event\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 To also traverse down other package trees, append their names to the \f3-subpackages\fR argument, such as j\f3ava:javax:org\&.xml\&.sax\fR\&.
@@ -2643,7 +2651,7 @@
 \f3javadoc \-d /home/html \-sourcepath /home/src java\&.awt java\&.awt\&.event\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 \f3Example 4 Run from Any Directory on Explicit Packages in Multiple Trees\fR
@@ -2654,7 +2662,7 @@
 \f3javadoc \-d /home/html \-sourcepath /home/src1:/home/src2 java\&.awt java\&.awt\&.event\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 The result is that all cases generate HTML-formatted documentation for the \f3public\fR and \f3protected\fR classes and interfaces in packages j\f3ava\&.awt\fR and \f3java\&.awt\&.even\fRt and save the HTML files in the specified destination directory\&. Because two or more packages are being generated, the document has three HTML frames: one for the list of packages, another for the list of classes, and the third for the main class pages\&.
@@ -2676,7 +2684,7 @@
 \f3javadoc \-d /home/html Button\&.java Canvas\&.java Graphics*\&.java\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 \f3Example 2 Change to the Root Directory of the Package\fR
@@ -2690,7 +2698,7 @@
 \f3javadoc \-d /home/html java/awt/Button\&.java java/applet/Applet\&.java\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 \f3Example 3 Document Files from Any Directory\fR
@@ -2704,7 +2712,7 @@
 \f3/home/src/java/awt/Graphics*\&.java\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 
@@ -2720,7 +2728,7 @@
 \f3/home/src/java/applet/Applet\&.java\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 .SS REAL-WORLD\ EXAMPLES    
@@ -2784,7 +2792,7 @@
 \f3@packages\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 
@@ -2802,7 +2810,7 @@
 \f3import javax\&.tools\&.ToolProvider;\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .nf     
 \f3public class JavaAccessSample{\fP
@@ -2838,7 +2846,7 @@
 \f3 }\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 The first three arguments of the \f3run\fR method specify input, standard output, and standard error streams\&. \f3Null\fR is the default value for \f3System\&.in\fR, \f3System\&.out\fR, and \f3System\&.err\fR, respectively\&.
@@ -2891,7 +2899,7 @@
 \f3        java\&.applet\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .nf     
 \f3WINDOWTITLE = \&'Java\(tm SE 7 API Specification\&'\fP
@@ -2927,7 +2935,7 @@
 \f3SRCDIR = \&'/java/jdk/1\&.7\&.0/src/share/classes\&'\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 .SS NOTES    
--- a/src/solaris/doc/sun/man/man1/jjs.1	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/solaris/doc/sun/man/man1/jjs.1	Tue Nov 04 17:20:19 2014 +0000
@@ -1,5 +1,5 @@
 '\" t
-.\"  Copyright (c) 1994, 2013, Oracle and/or its affiliates. All rights reserved.
+.\"  Copyright (c) 1994, 2015, Oracle and/or its affiliates. All rights reserved.
 .\"
 .\" DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 .\"
@@ -23,12 +23,12 @@
 .\"
 .\"     Arch: generic
 .\"     Software: JDK 8
-.\"     Date: 21 November 2013
+.\"     Date: 03 March 2015
 .\"     SectDesc: Basic Tools
 .\"     Title: jjs.1
 .\"
 .if n .pl 99999
-.TH jjs 1 "21 November 2013" "JDK 8" "Basic Tools"
+.TH jjs 1 "03 March 2015" "JDK 8" "Basic Tools"
 .\" -----------------------------------------------------------------
 .\" * Define some portability stuff
 .\" -----------------------------------------------------------------
@@ -82,7 +82,7 @@
 \f3\-css=1k\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 
@@ -91,7 +91,7 @@
 .br
 Compiles the script without running it\&.
 .TP
--cp \fIpath\fR , --classpath \fIpath\fR
+-cp \fIpath\fR , -classpath \fIpath\fR
 .br
 Specifies the path to the supporting class files To set multiple paths, the option can be repeated, or you can separate each path with a colon (:)\&.
 .TP
@@ -112,7 +112,7 @@
 \f3jjs>\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 
@@ -133,7 +133,7 @@
 .TP
 -doe, --dump-on-error
 .br
-Provides a full stack trace when an arror occurs\&. By default, only a brief error message is printed\&.
+Provides a full stack trace when an error occurs\&. By default, only a brief error message is printed\&.
 .TP
 --early-lvalue-error
 .br
@@ -180,13 +180,17 @@
 \f3jjs>\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 
 
 This option can be repeated to pass multiple \f3java\fR command options\&.
 .TP
+--language=[es5]
+.br
+Specifies the ECMAScript language version\&. The default version is ES5\&.
+.TP
 --lazy-compilation
 .br
 Enables lazy code generation strategies (that is, the entire script is not compiled at once)\&. This option is experimental\&.
@@ -202,12 +206,13 @@
 .nf     
 \f3\-\-log=fields:finest,codegen:info\fP
 .fi     
-.nf     
-\f3\fR
-.fi     
 .sp     
 
 .TP
+--optimistic-types=[true|false]
+.br
+Enables or disables optimistic type assumptions with deoptimizing recompilation\&. Running with optimistic types will yield higher final speed, but may increase warmup time\&.
+.TP
 --package=\fIname\fR
 .br
 Specifies the package to which generated class files are added\&.
@@ -302,7 +307,7 @@
 \f3jjs script\&.js\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 \f3Example 2 Running Nashorn in Interactive Mode\fR
@@ -323,7 +328,7 @@
 \f3>>\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 \f3Example 3 Passing Arguments to Nashorn\fR
@@ -341,7 +346,7 @@
 \f3jjs>\fP
 .fi     
 .nf     
-\f3\fR
+\f3\fP
 .fi     
 .sp     
 .SH SEE\ ALSO    
--- a/src/solaris/doc/sun/man/man1/jstat.1	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/solaris/doc/sun/man/man1/jstat.1	Tue Nov 04 17:20:19 2014 +0000
@@ -1,5 +1,5 @@
 '\" t
-.\"  Copyright (c) 2004, 2013, Oracle and/or its affiliates. All rights reserved.
+.\"  Copyright (c) 2004, 2015, Oracle and/or its affiliates. All rights reserved.
 .\"
 .\" DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 .\"
@@ -23,12 +23,12 @@
 .\"
 .\"     Arch: generic
 .\"     Software: JDK 8
-.\"     Date: 10 May 2011
+.\"     Date: 03 March 2015
 .\"     SectDesc: Monitoring Tools
 .\"     Title: jstat.1
 .\"
 .if n .pl 99999
-.TH jstat 1 "10 May 2011" "JDK 8" "Monitoring Tools"
+.TH jstat 1 "03 March 2015" "JDK 8" "Monitoring Tools"
 .\" -----------------------------------------------------------------
 .\" * Define some portability stuff
 .\" -----------------------------------------------------------------
@@ -101,7 +101,7 @@
 The communications protocol\&. If the \fIprotocol\fR value is omitted and a host name is not specified, then the default protocol is a platform-specific optimized local protocol\&. If the \fIprotocol\fR value is omitted and a host name is specified, then the default protocol is \f3rmi\fR\&.
 .TP     
 \fIlvmid\fR
-The local virtual machine identifier for the target JVM\&. The \f3lvmid\fR is a platform-specific value that uniquely identifies a JVM on a system\&. The \f3lvmid\fR is the only required component of a virtual machine identifier\&. The \f3lvmid\fR is typically, but not necessarily, the operating system\&'s process identifier for the target JVM process\&. You can use the \f3jps\fR command to determine the \f3lvmid\fR\&. Also, you can determine the \f3lvmid\fR on UNIX platforms with the \f3ps\fR command, and on Windows with the Windows Task Manager\&.
+The local virtual machine identifier for the target JVM\&. The \f3lvmid\fR is a platform-specific value that uniquely identifies a JVM on a system\&. The \f3lvmid\fR is the only required component of a virtual machine identifier\&. The \f3lvmid\fR is typically, but not necessarily, the operating system\&'s process identifier for the target JVM process\&. You can use the \f3jps\fR command to determine the \f3lvmid\fR\&. Also, you can determine the \f3lvmid\fR on Solaris, Linux, and OS X platforms with the \f3ps\fR command, and on Windows with the Windows Task Manager\&.
 .TP     
 \fIhostname\fR
 A hostname or IP address that indicates the target host\&. If the \fIhostname\fR value is omitted, then the target host is the local host\&.
@@ -154,7 +154,7 @@
 
 \f3gcnewcapacity\fR: Displays statistics about the sizes of the new generations and its corresponding spaces\&.
 
-\f3gcold\fR: Displays statistics about the behavior of the old generation and Metaspace Statistics\&.
+\f3gcold\fR: Displays statistics about the behavior of the old generation and metaspace statistics\&.
 
 \f3gcoldcapacity\fR: Displays statistics about the sizes of the old generation\&.
 
@@ -170,7 +170,7 @@
 .TP
 -t
 .br
-Display sa timestamp column as the first column of output\&. The time stamp is the time since the start time of the target JVM\&.
+Displays a timestamp column as the first column of output\&. The time stamp is the time since the start time of the target JVM\&.
 .TP
 -J\fIjavaOption\fR
 .br
@@ -184,7 +184,7 @@
 
 \f3Loaded\fR: Number of classes loaded\&.
 
-\f3Bytes\fR: Number of KBs loaded\&.
+\f3Bytes\fR: Number of kBs loaded\&.
 
 \f3Unloaded\fR: Number of classes unloaded\&.
 
@@ -212,25 +212,29 @@
 .br
 Garbage-collected heap statistics\&.
 
-\f3S0C\fR: Current survivor space 0 capacity (KB)\&.
+\f3S0C\fR: Current survivor space 0 capacity (kB)\&.
 
-\f3S1C\fR: Current survivor space 1 capacity (KB)\&.
+\f3S1C\fR: Current survivor space 1 capacity (kB)\&.
+
+\f3S0U\fR: Survivor space 0 utilization (kB)\&.
 
-\f3S0U\fR: Survivor space 0 utilization (KB)\&.
+\f3S1U\fR: Survivor space 1 utilization (kB)\&.
 
-\f3S1U\fR: Survivor space 1 utilization (KB)\&.
+\f3EC\fR: Current eden space capacity (kB)\&.
 
-\f3EC\fR: Current eden space capacity (KB)\&.
+\f3EU\fR: Eden space utilization (kB)\&.
 
-\f3EU\fR: Eden space utilization (KB)\&.
+\f3OC\fR: Current old space capacity (kB)\&.
 
-\f3OC\fR: Current old space capacity (KB)\&.
+\f3OU\fR: Old space utilization (kB)\&.
+
+\f3MC\fR: Metaspace capacity (kB)\&.
 
-\f3OU\fR: Old space utilization (KB)\&.
+\f3MU\fR: Metacspace utilization (kB)\&.
 
-\f3MC\fR: Metaspace capacity (KB)\&.
+\f3CCSC\fR: Compressed class space capacity (kB)\&.
 
-\f3MU\fR: Metacspace utilization (KB)\&.
+\f3CCSU\fR: Compressed class space used (kB)\&.
 
 \f3YGC\fR: Number of young generation garbage collection events\&.
 
@@ -246,67 +250,71 @@
 .br
 Memory pool generation and space capacities\&.
 
-\f3NGCMN\fR: Minimum new generation capacity (KB)\&.
+\f3NGCMN\fR: Minimum new generation capacity (kB)\&.
+
+\f3NGCMX\fR: Maximum new generation capacity (kB)\&.
 
-\f3NGCMX\fR: Maximum new generation capacity (KB)\&.
+\f3NGC\fR: Current new generation capacity (kB)\&.
 
-\f3NGC\fR: Current new generation capacity (KB)\&.
+\f3S0C\fR: Current survivor space 0 capacity (kB)\&.
 
-\f3S0C\fR: Current survivor space 0 capacity (KB)\&.
+\f3S1C\fR: Current survivor space 1 capacity (kB)\&.
 
-\f3S1C\fR: Current survivor space 1 capacity (KB)\&.
+\f3EC\fR: Current eden space capacity (kB)\&.
 
-\f3EC\fR: Current eden space capacity (KB)\&.
+\f3OGCMN\fR: Minimum old generation capacity (kB)\&.
 
-\f3OGCMN\fR: Minimum old generation capacity (KB)\&.
+\f3OGCMX\fR: Maximum old generation capacity (kB)\&.
+
+\f3OGC\fR: Current old generation capacity (kB)\&.
 
-\f3OGCMX\fR: Maximum old generation capacity (KB)\&.
+\f3OC\fR: Current old space capacity (kB)\&.
 
-\f3OGC\fR: Current old generation capacity (KB)\&.
+\f3MCMN\fR: Minimum metaspace capacity (kB)\&.
 
-\f3OC\fR: Current old space capacity (KB)\&.
+\f3MCMX\fR: Maximum metaspace capacity (kB)\&.
 
-\f3MCMN\fR: Minimum metaspace capacity (KB)\&.
+\f3MC\fR: Metaspace capacity (kB)\&.
 
-\f3MCMX\fR: Maximum metaspace capacity (KB)\&.
+\f3CCSMN\fR: Compressed class space minimum capacity (kB)\&.
 
-\f3MC\fR: Metaspace capacity (KB)\&.
+\f3CCSMX\fR: Compressed class space maximum capacity (kB)\&.
 
-\f3YGC\fR: Number of Young generation GC Events\&.
+\f3CCSC\fR: Compressed class space capacity (kB)\&.
 
-\f3FGC\fR: Number of Full GC Events\&.
+\f3YGC\fR: Number of young generation GC events\&.
+
+\f3FGC\fR: Number of full GC events\&.
 .TP
 -gccause \fIoption\fR
 .br
 This option displays the same summary of garbage collection statistics as the \f3-gcutil\fR option, but includes the causes of the last garbage collection event and (when applicable) the current garbage collection event\&. In addition to the columns listed for \f3-gcutil\fR, this option adds the following columns\&.
 
-Garbage collection statistics, including garbage collection Events\&.
+\f3LGCC\fR: Cause of last garbage collection
 
-\f3LGCC\fR: Cause of last garbage collection\&.
-
-\f3GCC\fR: Cause of current garbage collection\&.
+\f3GCC\fR: Cause of current garbage collection
 .TP
 -gcnew \fIoption\fR
 .br
 New generation statistics\&.
 
-\f3S0C\fR: Current survivor space 0 capacity (KB)\&.
+\f3S0C\fR: Current survivor space 0 capacity (kB)\&.
 
-\f3S1C\fR: Current survivor space 1 capacity (KB)\&.
+\f3S1C\fR: Current survivor space 1 capacity (kB)\&.
 
-\f3S0U\fR: Survivor space 0 utilization (KB)\&.
+\f3S0U\fR: Survivor space 0 utilization (kB)\&.
 
-\f3S1U\fR: Survivor space 1 utilization (KB)\&.
+\f3S1U\fR: Survivor space 1 utilization (kB)\&.
 
 \f3TT\fR: Tenuring threshold\&.
 
 \f3MTT\fR: Maximum tenuring threshold\&.
 
-\f3DSS\fR: Desired survivor size (KB)\&.
+\f3DSS\fR: Desired survivor size (kB)\&.
 
-\f3EC\fR: Current eden space capacity (KB)\&.
+\f3EC\fR: Current eden space capacity (kB)\&.
 
-\f3EU\fR: Eden space utilization (KB)\&.
+\f3EU\fR: Eden space utilization (kB)\&.
 
 \f3YGC\fR: Number of young generation GC events\&.
 
@@ -316,39 +324,43 @@
 .br
 New generation space size statistics\&.
 
-NGCMN: Minimum new generation capacity (KB)\&.
+\f3NGCMN\fR: Minimum new generation capacity (kB)\&.
 
-\f3NGCMX\fR: Maximum new generation capacity (KB)\&.
+\f3NGCMX\fR: Maximum new generation capacity (kB)\&.
 
-\f3NGC\fR: Current new generation capacity (KB)\&.
+\f3NGC\fR: Current new generation capacity (kB)\&.
 
-\f3S0CMX\fR: Maximum survivor space 0 capacity (KB)\&.
+\f3S0CMX\fR: Maximum survivor space 0 capacity (kB)\&.
 
-\f3S0C\fR: Current survivor space 0 capacity (KB)\&.
+\f3S0C\fR: Current survivor space 0 capacity (kB)\&.
 
-\f3S1CMX\fR: Maximum survivor space 1 capacity (KB)\&.
+\f3S1CMX\fR: Maximum survivor space 1 capacity (kB)\&.
 
-\f3S1C\fR: Current survivor space 1 capacity (KB)\&.
+\f3S1C\fR: Current survivor space 1 capacity (kB)\&.
 
-\f3ECMX\fR: Maximum eden space capacity (KB)\&.
+\f3ECMX\fR: Maximum eden space capacity (kB)\&.
 
-\f3EC\fR: Current eden space capacity (KB)\&.
+\f3EC\fR: Current eden space capacity (kB)\&.
 
 \f3YGC\fR: Number of young generation GC events\&.
 
-\f3FGC\fR: Number of Full GC Events\&.
+\f3FGC\fR: Number of full GC events\&.
 .TP
 -gcold \fIoption\fR
 .br
-old and permanent generation statistics\&.
+Old and permanent generation statistics\&.
 
-\f3MC\fR: Metaspace capacity (KB)\&.
+\f3MC\fR: Metaspace capacity (kB)\&.
+
+\f3MU\fR: Metaspace utilization (kB)\&.
 
-\f3MU\fR: Metaspace utilization (KB)\&.
+\f3CCSC\fR: Compressed class space capacity (kB)\&.
+
+\f3CCSU\fR: Compressed class space used (kB)\&.
 
-\f3OC\fR: Current old space capacity (KB)\&.
+\f3OC\fR: Current old space capacity (kB)\&.
 
-\f3OU\fR: old space utilization (KB)\&.
+\f3OU\fR: Old space utilization (kB)\&.
 
 \f3YGC\fR: Number of young generation GC events\&.
 
@@ -362,13 +374,13 @@
 .br
 Old generation statistics\&.
 
-\f3OGCMN\fR: Minimum old generation capacity (KB)\&.
+\f3OGCMN\fR: Minimum old generation capacity (kB)\&.
 
-\f3OGCMX\fR: Maximum old generation capacity (KB)\&.
+\f3OGCMX\fR: Maximum old generation capacity (kB)\&.
 
-\f3OGC\fR: Current old generation capacity (KB)\&.
+\f3OGC\fR: Current old generation capacity (kB)\&.
 
-\f3OC\fR: Current old space capacity (KB)\&.
+\f3OC\fR: Current old space capacity (kB)\&.
 
 \f3YGC\fR: Number of young generation GC events\&.
 
@@ -382,11 +394,15 @@
 .br
 Permanent generation statistics\&.
 
-\f3MCMN\fR: Minimum metaspace capacity (KB)\&.
+\f3MCMN\fR: Minimum metaspace capacity (kB)\&.
+
+\f3MCMX\fR: Maximum metaspace capacity (kB)\&.
 
-\f3MCMX\fR: Maximum metaspace capacity (KB)\&.
+\f3MC\fR: Metaspace capacity (kB)\&.
 
-\f3MC\fR: Metaspace capacity (KB)\&.
+\f3CCSMN\fR: Compressed class space minimum capacity (kB)\&.
+
+\f3CCSMX\fR: Compressed class space maximum capacity (kB)\&.
 
 \f3YGC\fR: Number of young generation GC events\&.
 
@@ -410,6 +426,8 @@
 
 \f3M\fR: Metaspace utilization as a percentage of the space\&'s current capacity\&.
 
+\f3CCS\fR: Compressed class space utilization as a percentage\&.
+
 \f3YGC\fR: Number of young generation GC events\&.
 
 \f3YGCT\fR: Young generation garbage collection time\&.
@@ -430,47 +448,44 @@
 
 \f3Type\fR: Compilation type of the most recently compiled method\&.
 
-\f3Method\fR: Class name and method name identifying the most recently compiled method\&. Class name uses slash (/) instead of dot (\&.) as a name space separator\&. Method name is the method within the specified class\&. The format for these two fields is consistent with the HotSpot \f3-XX:+PrintComplation\fR option\&.
+\f3Method\fR: Class name and method name identifying the most recently compiled method\&. Class name uses slash (/) instead of dot (\&.) as a name space separator\&. Method name is the method within the specified class\&. The format for these two fields is consistent with the HotSpot \f3-XX:+PrintCompilation\fR option\&.
 .SH EXAMPLES    
 This section presents some examples of monitoring a local JVM with an \fIlvmid\fR of 21891\&.
 .SS THE\ GCUTIL\ OPTION    
 This example attaches to lvmid 21891 and takes 7 samples at 250 millisecond intervals and displays the output as specified by the -\f3gcutil\fR option\&.
 .PP
-The output of this example shows that a young generation collection occurred between the third and fourth sample\&. The collection took 0\&.001 seconds and promoted objects from the eden space (E) to the old space (O), resulting in an increase of old space utilization from 9\&.49% to 9\&.51%\&. Before the collection, the survivor space was 12\&.44% utilized, but after this collection it is only 7\&.74% utilized\&.
+The output of this example shows that a young generation collection occurred between the third and fourth sample\&. The collection took 0\&.078 seconds and promoted objects from the eden space (E) to the old space (O), resulting in an increase of old space utilization from 66\&.80% to 68\&.19%\&. Before the collection, the survivor space was 97\&.02% utilized, but after this collection it is 91\&.03% utilized\&.
 .sp     
 .nf     
 \f3jstat \-gcutil 21891 250 7\fP
 .fi     
 .nf     
-\f3  S0     S1     E      O      M       YGC    YGCT    FGC    FGCT     GCT\fP
+\f3  S0     S1     E      O      M     CCS    YGC     YGCT    FGC    FGCT     GCT   \fP
 .fi     
 .nf     
-\f30\&.00  99\&.74  13\&.49   7\&.86  95\&.82      3    0\&.124     0    0\&.000    0\&.124\fP
+\f3  0\&.00  97\&.02  70\&.31  66\&.80  95\&.52  89\&.14      7    0\&.300     0    0\&.000    0\&.300\fP
 .fi     
 .nf     
-\f30\&.00  99\&.74  13\&.49   7\&.86  95\&.82      3    0\&.124     0    0\&.000    0\&.124\fP
-.fi     
-.nf     
-\f30\&.00  99\&.74  13\&.49   7\&.86  95\&.82      3    0\&.124     0    0\&.000    0\&.124\fP
+\f3  0\&.00  97\&.02  86\&.23  66\&.80  95\&.52  89\&.14      7    0\&.300     0    0\&.000    0\&.300\fP
 .fi     
 .nf     
-\f30\&.00  99\&.74  13\&.49   7\&.86  95\&.82      3    0\&.124     0    0\&.000    0\&.124\fP
+\f3  0\&.00  97\&.02  96\&.53  66\&.80  95\&.52  89\&.14      7    0\&.300     0    0\&.000    0\&.300\fP
 .fi     
 .nf     
-\f30\&.00  99\&.74  13\&.80   7\&.86  95\&.82      3    0\&.124     0    0\&.000    0\&.124\fP
+\f3 91\&.03   0\&.00   1\&.98  68\&.19  95\&.89  91\&.24      8    0\&.378     0    0\&.000    0\&.378\fP
 .fi     
 .nf     
-\f30\&.00  99\&.74  13\&.80   7\&.86  95\&.82      3    0\&.124     0    0\&.000    0\&.124\fP
+\f3 91\&.03   0\&.00  15\&.82  68\&.19  95\&.89  91\&.24      8    0\&.378     0    0\&.000    0\&.378\fP
 .fi     
 .nf     
-\f30\&.00  99\&.74  13\&.80   7\&.86  95\&.82      3    0\&.124     0    0\&.000    0\&.124\fP
+\f3 91\&.03   0\&.00  17\&.80  68\&.19  95\&.89  91\&.24      8    0\&.378     0    0\&.000    0\&.378\fP
 .fi     
 .nf     
-\f3\fP
+\f3 91\&.03   0\&.00  17\&.80  68\&.19  95\&.89  91\&.24      8    0\&.378     0    0\&.000    0\&.378\fP
 .fi     
 .sp     
 .SS REPEAT\ THE\ COLUMN\ HEADER\ STRING    
-This example attaches to lvmid 21891 and takes samples at 250 millisecond intervals and displays the output as specified by \f3-gcutil\fR option\&. In addition, it uses the \f3-h3\fR option to output the column header after every 3 lines of data\&.
+This example attaches to lvmid 21891 and takes samples at 250 millisecond intervals and displays the output as specified by \f3-gcnew\fR option\&. In addition, it uses the \f3-h3\fR option to output the column header after every 3 lines of data\&.
 .PP
 In addition to showing the repeating header string, this example shows that between the second and third samples, a young GC occurred\&. Its duration was 0\&.001 seconds\&. The collection found enough active data that the survivor space 0 utilization (S0U) would have exceeded the desired survivor Size (DSS)\&. As a result, objects were promoted to the old generation (not visible in this output), and the tenuring threshold (TT) was lowered from 31 to 2\&.
 .PP
@@ -516,7 +531,7 @@
 .SS INCLUDE\ A\ TIME\ STAMP\ FOR\ EACH\ SAMPLE    
 This example attaches to lvmid 21891 and takes 3 samples at 250 millisecond intervals\&. The \f3-t\fR option is used to generate a time stamp for each sample in the first column\&.
 .PP
-The Timestamp column reports the elapsed time in seconds since the start of the target JVM\&. In addition, the \f3-gcoldcapacity\fR output shows the old generation capacity (OGC) and the old space capacity (OC) increasing as the heap expands to meet allocation or promotion demands\&. The old generation capacity (OGC) has grown to from 11,696 KB to 13820 KB after the eighty-first full garbage collection (FGC)\&. The maximum capacity of the generation (and space) is 60,544 KB (OGCMX), so it still has room to expand\&.
+The Timestamp column reports the elapsed time in seconds since the start of the target JVM\&. In addition, the \f3-gcoldcapacity\fR output shows the old generation capacity (OGC) and the old space capacity (OC) increasing as the heap expands to meet allocation or promotion demands\&. The old generation capacity (OGC) has grown from 11,696 kB to 13,820 kB after the eighty-first full garbage collection (FGC)\&. The maximum capacity of the generation (and space) is 60,544 kB (OGCMX), so it still has room to expand\&.
 .sp     
 .nf     
 \f3Timestamp      OGCMN    OGCMX     OGC       OC       YGC   FGC    FGCT    GCT\fP
@@ -537,7 +552,7 @@
 .SS MONITOR\ INSTRUMENTATION\ FOR\ A\ REMOTE\ JVM    
 This example attaches to lvmid 40496 on the system named remote\&.domain using the \f3-gcutil\fR option, with samples taken every second indefinitely\&.
 .PP
-The lvmid is combined with the name of the remote host to construct a \fIvmid\fR of \f340496@remote\&.domain\fR\&. This vmid results in the use of the \f3rmi\fR protocol to communicate to the default \f3jstatd\fR server on the remote host\&. The \f3jstatd\fR server is located using the rmiregistry on \f3remote\&.domain\fR that is bound to the default rmiregistry port (port 1099)\&.
+The lvmid is combined with the name of the remote host to construct a \fIvmid\fR of \f340496@remote\&.domain\fR\&. This vmid results in the use of the \f3rmi\fR protocol to communicate to the default \f3jstatd\fR server on the remote host\&. The \f3jstatd\fR server is located using the \f3rmiregistry\fR command on \f3remote\&.domain\fR that is bound to the default port of the \f3rmiregistry\fR command (port 1099)\&.
 .sp     
 .nf     
 \f3jstat \-gcutil 40496@remote\&.domain 1000\fP
--- a/src/solaris/doc/sun/man/man1/keytool.1	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/solaris/doc/sun/man/man1/keytool.1	Tue Nov 04 17:20:19 2014 +0000
@@ -1,5 +1,5 @@
 '\" t
-.\"  Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved.
+.\"  Copyright (c) 1998, 2015, Oracle and/or its affiliates. All rights reserved.
 .\"
 .\" DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 .\"
@@ -23,12 +23,12 @@
 .\"
 .\"     Arch: generic
 .\"     Software: JDK 8
-.\"     Date: 6 August 2013
+.\"     Date: 03 March 2015
 .\"     SectDesc: Security Tools
 .\"     Title: keytool.1
 .\"
 .if n .pl 99999
-.TH keytool 1 "6 August 2013" "JDK 8" "Security Tools"
+.TH keytool 1 "03 March 2015" "JDK 8" "Security Tools"
 .\" -----------------------------------------------------------------
 .\" * Define some portability stuff
 .\" -----------------------------------------------------------------
@@ -185,10 +185,16 @@
 .TP 0.2i    
 \(bu
 Items in italics (option values) represent the actual values that must be supplied\&. For example, here is the format of the \f3-printcert\fR command:
+.sp     
+.nf     
+\f3keytool \-printcert {\-file \fIcert_file\fR} {\-v}\fP
+.fi     
+.sp     
 
-\f3keytool -printcert {-file cert_file} {-v}\fR
+
 
-When you specify a \f3-printcert\fR command, replace \f3cert_file\fR with the actual file name, as follows: \f3keytool -printcert -file VScert\&.cer\fR
+
+When you specify a \f3-printcert\fR command, replace \fIcert_file\fR with the actual file name, as follows: \f3keytool -printcert -file VScert\&.cer\fR
 .TP 0.2i    
 \(bu
 Option values must be put in quotation marks when they contain a blank (space)\&.
@@ -385,10 +391,39 @@
 .PP
 \fINote:\fR Users should be aware that some combinations of extensions (and other certificate fields) may not conform to the Internet standard\&. See Certificate Conformance Warning\&.
 .SH COMMANDS    
-.TP
+.TP     
 -gencert
-.br
-\f3{-rfc} {-infile infile} {-outfile outfile} {-alias alias} {-sigalg sigalg} {-dname dname} {-startdate startdate {-ext ext}* {-validity valDays} [-keypass keypass] {-keystore keystore} [-storepass storepass] {-storetype storetype} {-providername provider_name} {-providerClass provider_class_name {-providerArg provider_arg}} {-v} {-protected} {-Jjavaoption}\fR
+.sp     
+.nf     
+\f3{\-rfc} {\-infile \fIinfile\fR} {\-outfile \fIoutfile\fR} {\-alias \fIalias\fR} {\-sigalg \fIsigalg\fR}\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3{\-dname \fIdname\fR} {\-startdate \fIstartdate\fR {\-ext \fIext\fR}* {\-validity \fIvalDays\fR}\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3[\-keypass \fIkeypass\fR] {\-keystore \fIkeystore\fR} [\-storepass \fIstorepass\fR]\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3{\-storetype \fIstoretype\fR} {\-providername \fIprovider_name\fR}\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3{\-providerClass \fIprovider_class_name\fR {\-providerArg \fIprovider_arg\fR}}\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3{\-v} {\-protected} {\-Jjavaoption}\fP
+.fi     
+.sp     
+
 
 Generates a certificate as a response to a certificate request file (which can be created by the \f3keytool\fR\f3-certreq\fR command)\&. The command reads the request from \fIinfile\fR (if omitted, from the standard input), signs it using alias\&'s private key, and outputs the X\&.509 certificate into \fIoutfile\fR (if omitted, to the standard output)\&. When\f3-rfc\fR is specified, the output format is Base64-encoded PEM; otherwise, a binary DER is created\&.
 
@@ -459,10 +494,39 @@
 .fi     
 .sp     
 
-.TP
+.TP     
 -genkeypair
-.br
-\f3{-alias alias} {-keyalg keyalg} {-keysize keysize} {-sigalg sigalg} [-dname dname] [-keypass keypass] {-startdate value} {-ext ext}* {-validity valDays} {-storetype storetype} {-keystore keystore} [-storepass storepass] {-providerClass provider_class_name {-providerArg provider_arg}} {-v} {-protected} {-Jjavaoption}\fR
+.sp     
+.nf     
+\f3{\-alias \fIalias\fR} {\-keyalg \fIkeyalg\fR} {\-keysize \fIkeysize\fR} {\-sigalg \fIsigalg\fR}\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3[\-dname \fIdname\fR] [\-keypass \fIkeypass\fR] {\-startdate \fIvalue\fR} {\-ext \fIext\fR}*\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3{\-validity \fIvalDays\fR} {\-storetype \fIstoretype\fR} {\-keystore \fIkeystore\fR}\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3[\-storepass \fIstorepass\fR]\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3{\-providerClass \fIprovider_class_name\fR {\-providerArg \fIprovider_arg\fR}}\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3{\-v} {\-protected} {\-Jjavaoption}\fP
+.fi     
+.sp     
+
 
 Generates a key pair (a public key and associated private key)\&. Wraps the public key into an X\&.509 v3 self-signed certificate, which is stored as a single-element certificate chain\&. This certificate chain and the private key are stored in a new keystore entry identified by alias\&.
 
@@ -510,18 +574,61 @@
 The value of \f3valDays\fR specifies the number of days (starting at the date specified by \f3-startdate\fR, or the current date when \f3-startdate\fR is not specified) for which the certificate should be considered valid\&.
 
 This command was named \f3-genkey\fR in earlier releases\&. The old name is still supported in this release\&. The new name, \f3-genkeypair\fR, is preferred going forward\&.
-.TP
+.TP     
 -genseckey
-.br
-\f3-genseckey {-alias alias} {-keyalg keyalg} {-keysize keysize} [-keypass keypass] {-storetype storetype} {-keystore keystore} [-storepass storepass] {-providerClass provider_class_name {-providerArg provider_arg}} {-v} {-protected} {-Jjavaoption}\fR
+.sp     
+.nf     
+\f3{\-alias \fIalias\fR} {\-keyalg \fIkeyalg\fR} {\-keysize \fIkeysize\fR} [\-keypass \fIkeypass\fR]\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3{\-storetype \fIstoretype\fR} {\-keystore \fIkeystore\fR} [\-storepass \fIstorepass\fR]\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3{\-providerClass \fIprovider_class_name\fR {\-providerArg \fIprovider_arg\fR}} {\-v}\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3{\-protected} {\-Jjavaoption}\fP
+.fi     
+.sp     
+
 
 Generates a secret key and stores it in a new \f3KeyStore\&.SecretKeyEntry\fR identified by \f3alias\fR\&.
 
 The value of \f3keyalg\fR specifies the algorithm to be used to generate the secret key, and the value of \f3keysize\fR specifies the size of the key to be generated\&. The \f3keypass\fR value is a password that protects the secret key\&. If no password is provided, then the user is prompted for it\&. If you press the Return key at the prompt, then the key password is set to the same password that is used for the \f3keystore\fR\&. The \f3keypass\fR value must be at least 6 characters\&.
-.TP
+.TP     
 -importcert
-.br
-\f3-importcert {-alias alias} {-file cert_file} [-keypass keypass] {-noprompt} {-trustcacerts} {-storetype storetype} {-keystore keystore} [-storepass storepass] {-providerName provider_name} {-providerClass provider_class_name {-providerArg provider_arg}} {-v} {-protected} {-Jjavaoption}\fR
+.sp     
+.nf     
+\f3{\-alias \fIalias\fR} {\-file \fIcert_file\fR} [\-keypass \fIkeypass\fR] {\-noprompt} {\-trustcacerts}\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3{\-storetype \fIstoretype\fR} {\-keystore \fIkeystore\fR} [\-storepass \fIstorepass\fR]\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3{\-providerName \fIprovider_name\fR}\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3{\-providerClass \fIprovider_class_name\fR {\-providerArg \fIprovider_arg\fR}}\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3{\-v} {\-protected} {\-Jjavaoption}\fP
+.fi     
+.sp     
+
 
 Reads the certificate or certificate chain (where the latter is supplied in a PKCS#7 formatted reply or a sequence of X\&.509 certificates) from the file \f3cert_file\fR, and stores it in the \f3keystore\fR entry identified by \f3alias\fR\&. If no file is specified, then the certificate or certificate chain is read from \f3stdin\fR\&.
 
@@ -530,16 +637,74 @@
 You import a certificate for two reasons: To add it to the list of trusted certificates, and to import a certificate reply received from a certificate authority (CA) as the result of submitting a Certificate Signing Request to that CA (see the \f3-certreq\fR option in Commands)\&.
 
 Which type of import is intended is indicated by the value of the \f3-alias\fR option\&. If the alias does not point to a key entry, then the \f3keytool\fR command assumes you are adding a trusted certificate entry\&. In this case, the alias should not already exist in the keystore\&. If the alias does already exist, then the \f3keytool\fR command outputs an error because there is already a trusted certificate for that alias, and does not import the certificate\&. If the alias points to a key entry, then the \f3keytool\fR command assumes you are importing a certificate reply\&.
-.TP
+.TP     
 -importpassword
-.br
-\f3{-alias alias} [-keypass keypass] {-storetype storetype} {-keystore keystore} [-storepass storepass] {-providerClass provider_class_name {-providerArg provider_arg}} {-v} {-protected} {-Jjavaoption}\fR
+.sp     
+.nf     
+\f3{\-alias \fIalias\fR} [\-keypass \fIkeypass\fR] {\-storetype \fIstoretype\fR} {\-keystore \fIkeystore\fR}\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3[\-storepass \fIstorepass\fR]\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3{\-providerClass \fIprovider_class_name\fR {\-providerArg \fIprovider_arg\fR}}\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3{\-v} {\-protected} {\-Jjavaoption}\fP
+.fi     
+.sp     
+
 
 Imports a passphrase and stores it in a new \f3KeyStore\&.SecretKeyEntry\fR identified by \f3alias\fR\&. The passphrase may be supplied via the standard input stream; otherwise the user is prompted for it\&. \f3keypass\fR is a password used to protect the imported passphrase\&. If no password is provided, the user is prompted for it\&. If you press the Return key at the prompt, the key password is set to the same password as that used for the \f3keystore\fR\&. \f3keypass\fR must be at least 6 characters long\&.
-.TP
+.TP     
 -importkeystore
-.br
-\f3{-srcstoretype srcstoretype} {-deststoretype deststoretype} [-srcstorepass srcstorepass] [-deststorepass deststorepass] {-srcprotected} {-destprotected} {-srcalias srcalias {-destalias destalias} [-srckeypass srckeypass] } [-destkeypass destkeypass] {-noprompt} {-srcProviderName src_provider_name} {-destProviderName dest_provider_name} {-providerClass provider_class_name {-providerArg provider_arg}} {-v} {-protected} {-Jjavaoption}\fR
+.sp     
+.nf     
+\f3{\-srcstoretype \fIsrcstoretype\fR} {\-deststoretype \fIdeststoretype\fR}\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3[\-srcstorepass \fIsrcstorepass\fR] [\-deststorepass \fIdeststorepass\fR] {\-srcprotected}\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3{\-destprotected} \fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3{\-srcalias \fIsrcalias\fR {\-destalias \fIdestalias\fR} [\-srckeypass \fIsrckeypass\fR]} \fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3[\-destkeypass \fIdestkeypass\fR] {\-noprompt}\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3{\-srcProviderName \fIsrc_provider_name\fR} {\-destProviderName \fIdest_provider_name\fR}\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3{\-providerClass \fIprovider_class_name\fR {\-providerArg \fIprovider_arg\fR}} {\-v}\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3{\-protected} {\-Jjavaoption}\fP
+.fi     
+.sp     
+
 
 Imports a single entry or all entries from a source keystore to a destination keystore\&.
 
@@ -550,16 +715,44 @@
 If the destination alias already exists in the destination keystore, then the user is prompted to either overwrite the entry or to create a new entry under a different alias name\&.
 
 If the \f3-noprompt\fR option is provided, then the user is not prompted for a new destination alias\&. Existing entries are overwritten with the destination alias name\&. Entries that cannot be imported are skipped and a warning is displayed\&.
-.TP
+.TP     
 -printcertreq
-.br
-\f3{-file file}\fR
+.sp     
+.nf     
+\f3{\-file \fIfile\fR}\fP
+.fi     
+.sp     
+
 
 Prints the content of a PKCS #10 format certificate request, which can be generated by the \f3keytool\fR\f3-certreq\fR command\&. The command reads the request from file\&. If there is no file, then the request is read from the standard input\&.
-.TP
+.TP     
 -certreq
-.br
-\f3{-alias alias} {-dname dname} {-sigalg sigalg} {-file certreq_file} [-keypass keypass] {-storetype storetype} {-keystore keystore} [-storepass storepass] {-providerName provider_name} {-providerClass provider_class_name {-providerArg provider_arg}} {-v} {-protected} {-Jjavaoption}\fR
+.sp     
+.nf     
+\f3{\-alias \fIalias\fR} {\-dname \fIdname\fR} {\-sigalg \fIsigalg\fR} {\-file \fIcertreq_file\fR}\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3[\-keypass \fIkeypass\fR] {\-storetype \fIstoretype\fR} {\-keystore \fIkeystore\fR}\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3[\-storepass \fIstorepass\fR] {\-providerName \fIprovider_name\fR}\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3{\-providerClass \fIprovider_class_name\fR {\-providerArg \fIprovider_arg\fR}}\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3{\-v} {\-protected} {\-Jjavaoption}\fP
+.fi     
+.sp     
+
 
 Generates a Certificate Signing Request (CSR) using the PKCS #10 format\&.
 
@@ -572,10 +765,29 @@
 The CSR is stored in the file certreq_file\&. If no file is specified, then the CSR is output to \f3stdout\fR\&.
 
 Use the \f3importcert\fR command to import the response from the CA\&.
-.TP
+.TP     
 -exportcert
-.br
-\f3{-alias alias} {-file cert_file} {-storetype storetype} {-keystore keystore} [-storepass storepass] {-providerName provider_name} {-providerClass provider_class_name {-providerArg provider_arg}} {-rfc} {-v} {-protected} {-Jjavaoption}\fR
+.sp     
+.nf     
+\f3{\-alias \fIalias\fR} {\-file \fIcert_file\fR} {\-storetype \fIstoretype\fR} {\-keystore \fIkeystore\fR}\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3[\-storepass \fIstorepass\fR] {\-providerName \fIprovider_name\fR}\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3{\-providerClass \fIprovider_class_name\fR {\-providerArg \fIprovider_arg\fR}}\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3{\-rfc} {\-v} {\-protected} {\-Jjavaoption}\fP
+.fi     
+.sp     
+
 
 Reads from the keystore the certificate associated with \fIalias\fR and stores it in the cert_file file\&. When no file is specified, the certificate is output to \f3stdout\fR\&.
 
@@ -584,20 +796,48 @@
 If \f3alias\fR refers to a trusted certificate, then that certificate is output\&. Otherwise, \f3alias\fR refers to a key entry with an associated certificate chain\&. In that case, the first certificate in the chain is returned\&. This certificate authenticates the public key of the entity addressed by \f3alias\fR\&.
 
 This command was named \f3-export\fR in earlier releases\&. The old name is still supported in this release\&. The new name, \f3-exportcert\fR, is preferred going forward\&.
-.TP
+.TP     
 -list
-.br
-\f3{-alias alias} {-storetype storetype} {-keystore keystore} [-storepass storepass] {-providerName provider_name} {-providerClass provider_class_name {-providerArg provider_arg}} {-v | -rfc} {-protected} {-Jjavaoption}\fR
+.sp     
+.nf     
+\f3{\-alias \fIalias\fR} {\-storetype \fIstoretype\fR} {\-keystore \fIkeystore\fR} [\-storepass \fIstorepass\fR]\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3{\-providerName \fIprovider_name\fR}\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3{\-providerClass \fIprovider_class_name\fR {\-providerArg \fIprovider_arg\fR}}\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3{\-v | \-rfc} {\-protected} {\-Jjavaoption}\fP
+.fi     
+.sp     
+
 
 Prints to \f3stdout\fR the contents of the keystore entry identified by \f3alias\fR\&. If no \f3alias\fR is specified, then the contents of the entire keystore are printed\&.
 
 This command by default prints the SHA1 fingerprint of a certificate\&. If the \f3-v\fR option is specified, then the certificate is printed in human-readable format, with additional information such as the owner, issuer, serial number, and any extensions\&. If the \f3-rfc\fR option is specified, then the certificate contents are printed using the printable encoding format, as defined by the Internet RFC 1421 Certificate Encoding Standard\&.
 
 You cannot specify both \f3-v\fR and \f3-rfc\fR\&.
-.TP
+.TP     
 -printcert
-.br
-\f3{-file cert_file | -sslserver host[:port]} {-jarfile JAR_file {-rfc} {-v} {-Jjavaoption}\fR
+.sp     
+.nf     
+\f3{\-file \fIcert_file\fR | \-sslserver \fIhost\fR[:\fIport\fR]} {\-jarfile \fIJAR_file\fR {\-rfc} {\-v}\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3{\-Jjavaoption}\fP
+.fi     
+.sp     
+
 
 Reads the certificate from the file cert_file, the SSL server located at host:port, or the signed JAR file \f3JAR_file\fR (with the \f3-jarfile\fR option and prints its contents in a human-readable format\&. When no port is specified, the standard HTTPS port 443 is assumed\&. Note that \f3-sslserver\fR and -file options cannot be provided at the same time\&. Otherwise, an error is reported\&. If neither option is specified, then the certificate is read from \f3stdin\fR\&.
 
@@ -608,40 +848,120 @@
 If the SSL server is behind a firewall, then the \f3-J-Dhttps\&.proxyHost=proxyhost\fR and \f3-J-Dhttps\&.proxyPort=proxyport\fR options can be specified on the command line for proxy tunneling\&. See Java Secure Socket Extension (JSSE) Reference Guide at http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/security/jsse/JSSERefGuide\&.html
 
 \fINote:\fR This option can be used independently of a keystore\&.
-.TP
+.TP     
 -printcrl
-.br
-\f3-file crl_ {-v}\fR
+.sp     
+.nf     
+\f3\-file \fIcrl_\fR {\-v}\fP
+.fi     
+.sp     
+
 
 Reads the Certificate Revocation List (CRL) from the file \f3crl_\fR\&. A CRL is a list of digital certificates that were revoked by the CA that issued them\&. The CA generates the \f3crl_\fR file\&.
 
 \fINote:\fR This option can be used independently of a keystore\&.
-.TP
+.TP     
 -storepasswd
-.br
-\f3[-new new_storepass] {-storetype storetype} {-keystore keystore} [-storepass storepass] {-providerName provider_name} {-providerClass provider_class_name {-providerArg provider_arg}} {-v} {-Jjavaoption}\fR
+.sp     
+.nf     
+\f3[\-new \fInew_storepass\fR] {\-storetype \fIstoretype\fR} {\-keystore \fIkeystore\fR}\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3[\-storepass \fIstorepass\fR] {\-providerName \fIprovider_name\fR}\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3{\-providerClass \fIprovider_class_name\fR {\-providerArg \fIprovider_arg\fR}}\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3{\-v} {\-Jjavaoption}\fP
+.fi     
+.sp     
+
 
 Changes the password used to protect the integrity of the keystore contents\&. The new password is \f3new_storepass\fR, which must be at least 6 characters\&.
-.TP
+.TP     
 -keypasswd
-.br
-\f3{-alias alias} [-keypass old_keypass] [-new new_keypass] {-storetype storetype} {-keystore keystore} [-storepass storepass] {-providerName provider_name} {-providerClass provider_class_name {-providerArg provider_arg}} {-v} {-Jjavaoption}\fR
+.sp     
+.nf     
+\f3{\-alias \fIalias\fR} [\-keypass \fIold_keypass\fR] [\-new \fInew_keypass\fR] {\-storetype \fIstoretype\fR}\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3{\-keystore \fIkeystore\fR} [\-storepass \fIstorepass\fR] {\-providerName \fIprovider_name\fR}\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3{\-providerClass \fIprovider_class_name\fR {\-providerArg \fIprovider_arg\fR}} {\-v}\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3{\-Jjavaoption}\fP
+.fi     
+.sp     
+
 
 Changes the password under which the private/secret key identified by \f3alias\fR is protected, from \f3old_keypass\fR to \f3new_keypass\fR, which must be at least 6 characters\&.
 
 If the \f3-keypass\fR option is not provided at the command line, and the key password is different from the keystore password, then the user is prompted for it\&.
 
 If the \f3-new\fR option is not provided at the command line, then the user is prompted for it
-.TP
+.TP     
 -delete
-.br
-\f3[-alias alias] {-storetype storetype} {-keystore keystore} [-storepass storepass] {-providerName provider_name} {-providerClass provider_class_name {-providerArg provider_arg}} {-v} {-protected} {-Jjavaoption}\fR
+.sp     
+.nf     
+\f3[\-alias \fIalias\fR] {\-storetype \fIstoretype\fR} {\-keystore \fIkeystore\fR} [\-storepass \fIstorepass\fR]\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3{\-providerName \fIprovider_name\fR}  \fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3{\-providerClass \fIprovider_class_name\fR {\-providerArg \fIprovider_arg\fR}}\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3{\-v} {\-protected} {\-Jjavaoption}\fP
+.fi     
+.sp     
+
 
 Deletes from the keystore the entry identified by \f3alias\fR\&. The user is prompted for the alias, when no alias is provided at the command line\&.
-.TP
+.TP     
 -changealias
-.br
-\f3{-alias alias} [-destalias destalias] [-keypass keypass] {-storetype storetype} {-keystore keystore} [-storepass storepass] {-providerName provider_name} {-providerClass provider_class_name {-providerArg provider_arg}} {-v} {-protected} {-Jjavaoption}\fR
+.sp     
+.nf     
+\f3{\-alias \fIalias\fR} [\-destalias \fIdestalias\fR] [\-keypass \fIkeypass\fR] {\-storetype \fIstoretype\fR}\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3{\-keystore \fIkeystore\fR} [\-storepass \fIstorepass\fR] {\-providerName \fIprovider_name\fR}\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3{\-providerClass \fIprovider_class_name\fR {\-providerArg \fIprovider_arg\fR}} {\-v}\fP
+.fi     
+.sp     
+.sp     
+.nf     
+\f3{\-protected} {\-Jjavaoption}\fP
+.fi     
+.sp     
+
 
 Move an existing keystore entry from the specified \f3alias\fR to a new alias, \f3destalias\fR\&. If no destination alias is provided, then the command prompts for one\&. If the original entry is protected with an entry password, then the password can be supplied with the \f3-keypass\fR option\&. If no key password is provided, then the \f3storepass\fR (if provided) is attempted first\&. If the attempt fails, then the user is prompted for a password\&.
 .TP
--- a/src/solaris/doc/sun/man/man1/policytool.1	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/solaris/doc/sun/man/man1/policytool.1	Tue Nov 04 17:20:19 2014 +0000
@@ -1,5 +1,5 @@
 '\" t
-.\"  Copyright (c) 2001, 2013, Oracle and/or its affiliates. All rights reserved.
+.\"  Copyright (c) 2001, 2015, Oracle and/or its affiliates. All rights reserved.
 .\"
 .\" DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 .\"
@@ -23,12 +23,12 @@
 .\"
 .\"     Arch: generic
 .\"     Software: JDK 8
-.\"     Date: 21 November 2013
+.\"     Date: 03 March 2015
 .\"     SectDesc: Security Tools
 .\"     Title: policytool.1
 .\"
 .if n .pl 99999
-.TH policytool 1 "21 November 2013" "JDK 8" "Security Tools"
+.TH policytool 1 "03 March 2015" "JDK 8" "Security Tools"
 .\" -----------------------------------------------------------------
 .\" * Define some portability stuff
 .\" -----------------------------------------------------------------
@@ -80,7 +80,7 @@
 Run the \f3policytool\fR command and load the specified file:
 .sp     
 .nf     
-\f3policytool\-file mypolicyfile\fP
+\f3policytool \-file \fImypolicyfile\fR\fP
 .fi     
 .nf     
 \f3\fP
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/solaris/native/java/net/AbstractPlainDatagramSocketImpl.c	Tue Nov 04 17:20:19 2014 +0000
@@ -0,0 +1,89 @@
+/*
+ * Copyright (c) 2014, 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 <sys/types.h>
+#include <sys/socket.h>
+
+#ifdef __solaris__
+#include <unistd.h>
+#include <stropts.h>
+
+#ifndef BSD_COMP
+#define BSD_COMP
+#endif
+
+#endif
+
+#include <sys/ioctl.h>
+
+#include "jvm.h"
+#include "jni_util.h"
+#include "net_util.h"
+
+#include "java_net_AbstractPlainDatagramSocketImpl.h"
+
+static jfieldID IO_fd_fdID;
+
+static jfieldID apdsi_fdID;
+
+
+/*
+ * Class:     java_net_AbstractPlainDatagramSocketImpl
+ * Method:    init
+ * Signature: ()V
+ */
+JNIEXPORT void JNICALL
+Java_java_net_AbstractPlainDatagramSocketImpl_init(JNIEnv *env, jclass cls) {
+
+    apdsi_fdID = (*env)->GetFieldID(env, cls, "fd",
+                                   "Ljava/io/FileDescriptor;");
+    CHECK_NULL(apdsi_fdID);
+
+    IO_fd_fdID = NET_GetFileDescriptorID(env);
+}
+
+/*
+ * Class:     java_net_AbstractPlainDatagramSocketImpl
+ * Method:    dataAvailable
+ * Signature: ()I
+ */
+JNIEXPORT jint JNICALL Java_java_net_AbstractPlainDatagramSocketImpl_dataAvailable
+(JNIEnv *env, jobject this) {
+    int fd, retval;
+
+    jobject fdObj = (*env)->GetObjectField(env, this, apdsi_fdID);
+
+    if (IS_NULL(fdObj)) {
+        JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException",
+                        "Socket closed");
+        return -1;
+    }
+    fd = (*env)->GetIntField(env, fdObj, IO_fd_fdID);
+
+    if (ioctl(fd, FIONREAD, &retval) < 0) {
+        return -1;
+    }
+    return retval;
+}
--- a/src/solaris/native/sun/awt/awt_util.h	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/solaris/native/sun/awt/awt_util.h	Tue Nov 04 17:20:19 2014 +0000
@@ -52,6 +52,8 @@
  */
 extern XErrorHandler current_native_xerror_handler;
 
+Window get_xawt_root_shell(JNIEnv *env);
+
 #endif /* !HEADLESS */
 
 #ifndef INTERSECTS
--- a/src/solaris/native/sun/xawt/XlibWrapper.c	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/solaris/native/sun/xawt/XlibWrapper.c	Tue Nov 04 17:20:19 2014 +0000
@@ -2011,10 +2011,14 @@
  * Toolkit thread to process PropertyNotify or SelectionNotify events.
  */
 static Bool
-secondary_loop_event(Display* dpy, XEvent* event, char* arg) {
-    return (event->type == SelectionNotify ||
-            event->type == SelectionClear  ||
-            event->type == PropertyNotify) ? True : False;
+secondary_loop_event(Display* dpy, XEvent* event, XPointer xawt_root_window) {
+    return (
+                event->type == SelectionNotify ||
+                event->type == SelectionClear  ||
+                event->type == PropertyNotify  ||
+                (event->type == ConfigureNotify
+                    && event->xany.window == *(Window*) xawt_root_window)
+            ) ? True : False;
 }
 
 
@@ -2025,8 +2029,11 @@
 
     AWT_CHECK_HAVE_LOCK_RETURN(JNI_FALSE);
     exitSecondaryLoop = False;
+    Window xawt_root_window = get_xawt_root_shell(env);
+
     while (!exitSecondaryLoop) {
-        if (XCheckIfEvent((Display*) jlong_to_ptr(display), (XEvent*) jlong_to_ptr(ptr), secondary_loop_event, NULL)) {
+        if (XCheckIfEvent((Display*) jlong_to_ptr(display),
+                (XEvent*) jlong_to_ptr(ptr), secondary_loop_event, (XPointer) &xawt_root_window)) {
             return JNI_TRUE;
         }
         timeout = (timeout < AWT_SECONDARY_LOOP_TIMEOUT) ? (timeout << 1) : AWT_SECONDARY_LOOP_TIMEOUT;
--- a/src/windows/lib/tzmappings	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/windows/lib/tzmappings	Tue Nov 04 17:20:19 2014 +0000
@@ -193,5 +193,10 @@
 Turkey Standard Time:926,926::Asia/Istanbul:
 Bahia Standard Time:927,927::America/Bahia:
 Libya Standard Time:928,928:LY:Africa/Tripoli:
-Western Brazilian Standard Time:929,929:BR:America/Rio_Branco:
-Armenian Standard Time:930,930:AM:Asia/Yerevan:
+Belarus Standard Time:929,929:BY:Europe/Minsk:
+Line Islands Standard Time:930,930::Pacific/Kiritimati:
+Russia Time Zone 10:931,931::Asia/Srednekolymsk:
+Russia Time Zone 11:932,932::Asia/Anadyr:
+Russia Time Zone 3:933,933::Europe/Samara:
+Western Brazilian Standard Time:934,934:BR:America/Rio_Branco:
+Armenian Standard Time:935,935:AM:Asia/Yerevan:
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/windows/native/java/net/AbstractPlainDatagramSocketImpl.c	Tue Nov 04 17:20:19 2014 +0000
@@ -0,0 +1,113 @@
+/*
+ * Copyright (c) 2014, 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 <windows.h>
+#include <winsock2.h>
+
+#include "jvm.h"
+#include "jni_util.h"
+#include "net_util.h"
+
+#include "java_net_AbstractPlainDatagramSocketImpl.h"
+
+static jfieldID IO_fd_fdID = NULL;
+static jfieldID apdsi_fdID = NULL;
+
+static jfieldID apdsi_fd1ID = NULL;
+static jclass two_stacks_clazz = NULL;
+
+
+/*
+ * Class:     java_net_AbstractPlainDatagramSocketImpl
+ * Method:    init
+ * Signature: ()V
+ */
+JNIEXPORT void JNICALL
+Java_java_net_AbstractPlainDatagramSocketImpl_init(JNIEnv *env, jclass cls) {
+
+    apdsi_fdID = (*env)->GetFieldID(env, cls, "fd",
+                                   "Ljava/io/FileDescriptor;");
+    CHECK_NULL(apdsi_fdID);
+    IO_fd_fdID = NET_GetFileDescriptorID(env);
+    CHECK_NULL(IO_fd_fdID);
+
+    two_stacks_clazz = (*env)->FindClass(env, "java/net/TwoStacksPlainDatagramSocketImpl");
+    CHECK_NULL(two_stacks_clazz);
+
+    /* Handle both TwoStacks and DualStack here */
+
+    if (JNU_Equals(env, cls, two_stacks_clazz)) {
+        /* fd1 present only in TwoStack.. */
+        apdsi_fd1ID = (*env)->GetFieldID(env, cls, "fd1",
+                                   "Ljava/io/FileDescriptor;");
+        CHECK_NULL(apdsi_fd1ID);
+    }
+
+    JNU_CHECK_EXCEPTION(env);
+}
+
+/*
+ * Class:     java_net_AbstractPlainDatagramSocketImpl
+ * Method:    dataAvailable
+ * Signature: ()I
+ */
+JNIEXPORT jint JNICALL Java_java_net_AbstractPlainDatagramSocketImpl_dataAvailable
+(JNIEnv *env, jobject this) {
+    SOCKET fd;
+    SOCKET fd1;
+    int  rv = -1, rv1 = -1;
+    jobject fdObj = (*env)->GetObjectField(env, this, apdsi_fdID);
+
+    if (!IS_NULL(fdObj)) {
+        int retval = 0;
+        fd = (SOCKET)(*env)->GetIntField(env, fdObj, IO_fd_fdID);
+        rv = ioctlsocket(fd, FIONREAD, &retval);
+        if (retval > 0) {
+            return retval;
+        }
+    }
+
+    if (!IS_NULL(apdsi_fd1ID)) {
+        /* TwoStacks */
+        jobject fd1Obj = (*env)->GetObjectField(env, this, apdsi_fd1ID);
+        if (!IS_NULL(fd1Obj)) {
+            int retval = 0;
+            fd1 = (SOCKET)(*env)->GetIntField(env, fd1Obj, IO_fd_fdID);
+            rv1 = ioctlsocket(fd1, FIONREAD, &retval);
+            if (retval > 0) {
+                return retval;
+            }
+        }
+    }
+
+    if (rv < 0 && rv1 < 0) {
+        JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException",
+                            "Socket closed");
+        return -1;
+    }
+
+    return 0;
+}
+
--- a/src/windows/native/sun/awt/splashscreen/splashscreen_sys.c	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/windows/native/sun/awt/splashscreen/splashscreen_sys.c	Tue Nov 04 17:20:19 2014 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2014, 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
@@ -213,6 +213,14 @@
 void
 SplashRedrawWindow(Splash * splash)
 {
+    if (!SplashIsStillLooping(splash)) {
+        KillTimer(splash->hWnd, 0);
+    }
+
+    if (splash->currentFrame < 0) {
+        return;
+    }
+
     SplashUpdateScreenData(splash);
     if (splash->isLayered) {
         BLENDFUNCTION bf;
@@ -303,9 +311,6 @@
             time = 0;
         SetTimer(splash->hWnd, 0, time, NULL);
     }
-    else {
-        KillTimer(splash->hWnd, 0);
-    }
 }
 
 void SplashReconfigureNow(Splash * splash) {
--- a/src/windows/native/sun/java2d/windows/GDIRenderer.cpp	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/windows/native/sun/java2d/windows/GDIRenderer.cpp	Tue Nov 04 17:20:19 2014 +0000
@@ -670,7 +670,7 @@
         if (ypoints != NULL) {
             pPoints = TransformPoly(xpoints, ypoints, transx, transy,
                                 tmpPts, &npoints, FALSE, FALSE);
-            env->ReleasePrimitiveArrayCritical(ypointsarray, xpoints, JNI_ABORT);
+            env->ReleasePrimitiveArrayCritical(ypointsarray, ypoints, JNI_ABORT);
         }
         env->ReleasePrimitiveArrayCritical(xpointsarray, xpoints, JNI_ABORT);
     }
--- a/src/windows/native/sun/security/mscapi/security.cpp	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/windows/native/sun/security/mscapi/security.cpp	Tue Nov 04 17:20:19 2014 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2014, 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
@@ -74,7 +74,10 @@
     const char* pszHashAlgorithm = NULL;
     ALG_ID algId = 0;
 
-    pszHashAlgorithm = env->GetStringUTFChars(jHashAlgorithm, NULL);
+    if ((pszHashAlgorithm = env->GetStringUTFChars(jHashAlgorithm, NULL))
+        == NULL) {
+        return algId;
+    }
 
     if ((strcmp("SHA", pszHashAlgorithm) == 0) ||
         (strcmp("SHA1", pszHashAlgorithm) == 0) ||
@@ -179,7 +182,9 @@
          */
         if (length < 0) {
             length = env->GetArrayLength(seed);
-            reseedBytes = env->GetByteArrayElements(seed, 0);
+            if ((reseedBytes = env->GetByteArrayElements(seed, 0)) == NULL) {
+                __leave;
+            }
 
             if (::CryptGenRandom(
                 hCryptProv,
@@ -211,7 +216,9 @@
         } else { // length == 0
 
             length = env->GetArrayLength(seed);
-            seedBytes = env->GetByteArrayElements(seed, 0);
+            if ((seedBytes = env->GetByteArrayElements(seed, 0)) == NULL) {
+                __leave;
+            }
 
             if (::CryptGenRandom(
                 hCryptProv,
@@ -275,7 +282,10 @@
     __try
     {
         // Open a system certificate store.
-        pszCertStoreName = env->GetStringUTFChars(jCertStoreName, NULL);
+        if ((pszCertStoreName = env->GetStringUTFChars(jCertStoreName, NULL))
+            == NULL) {
+            __leave;
+        }
         if ((hCertStore = ::CertOpenSystemStore(NULL, pszCertStoreName))
             == NULL) {
 
@@ -710,7 +720,10 @@
 
     __try
     {
-        pszKeyContainerName = env->GetStringUTFChars(keyContainerName, NULL);
+        if ((pszKeyContainerName =
+            env->GetStringUTFChars(keyContainerName, NULL)) == NULL) {
+            __leave;
+        }
 
         // Acquire a CSP context (create a new key container).
         // Prefer a PROV_RSA_AES CSP, when available, due to its support
@@ -847,7 +860,10 @@
     __try
     {
         // Open a system certificate store.
-        pszCertStoreName = env->GetStringUTFChars(jCertStoreName, NULL);
+        if ((pszCertStoreName = env->GetStringUTFChars(jCertStoreName, NULL))
+            == NULL) {
+            __leave;
+        }
         if ((hCertStore = ::CertOpenSystemStore(NULL, pszCertStoreName)) == NULL) {
             ThrowException(env, KEYSTORE_EXCEPTION, GetLastError());
             __leave;
@@ -1086,7 +1102,10 @@
     __try
     {
         // Open a system certificate store.
-        pszCertStoreName = env->GetStringUTFChars(jCertStoreName, NULL);
+        if ((pszCertStoreName = env->GetStringUTFChars(jCertStoreName, NULL))
+            == NULL) {
+            __leave;
+        }
         if ((hCertStore = ::CertOpenSystemStore(NULL, pszCertStoreName)) == NULL) {
             ThrowException(env, KEYSTORE_EXCEPTION, GetLastError());
             __leave;
@@ -1123,7 +1142,10 @@
                 cchNameString);
 
             // Compare the certificate's friendly name with supplied alias name
-            pszCertAliasName = env->GetStringUTFChars(jCertAliasName, NULL);
+            if ((pszCertAliasName = env->GetStringUTFChars(jCertAliasName, NULL))
+                == NULL) {
+                __leave;
+            }
             if (strcmp(pszCertAliasName, pszNameString) == 0) {
 
                 // Only delete the certificate if the alias names matches
@@ -1181,7 +1203,10 @@
 
     __try
     {
-        pszKeyContainerName = env->GetStringUTFChars(keyContainerName, NULL);
+        if ((pszKeyContainerName =
+            env->GetStringUTFChars(keyContainerName, NULL)) == NULL) {
+            __leave;
+        }
 
         // Destroying the default key container is not permitted
         // (because it may contain more one keypair).
@@ -1234,8 +1259,14 @@
 
     __try
     {
-        pszCertStoreName = env->GetStringUTFChars(jCertStoreName, NULL);
-        pszCertAliasName = env->GetStringUTFChars(jCertAliasName, NULL);
+        if ((pszCertStoreName = env->GetStringUTFChars(jCertStoreName, NULL))
+            == NULL) {
+            __leave;
+        }
+        if ((pszCertAliasName = env->GetStringUTFChars(jCertAliasName, NULL))
+            == NULL) {
+            __leave;
+        }
 
         // Open a system certificate store.
         if ((hCertStore = ::CertOpenSystemStore(NULL, pszCertStoreName)) == NULL) {
@@ -1530,7 +1561,9 @@
     __try {
 
         jsize length = env->GetArrayLength(jKeyBlob);
-        keyBlob = env->GetByteArrayElements(jKeyBlob, 0);
+        if ((keyBlob = env->GetByteArrayElements(jKeyBlob, 0)) == NULL) {
+            __leave;
+        }
 
         PUBLICKEYSTRUC* pPublicKeyStruc = (PUBLICKEYSTRUC *) keyBlob;
 
@@ -1580,7 +1613,9 @@
     __try {
 
         jsize length = env->GetArrayLength(jKeyBlob);
-        keyBlob = env->GetByteArrayElements(jKeyBlob, 0);
+        if ((keyBlob = env->GetByteArrayElements(jKeyBlob, 0)) == NULL) {
+            __leave;
+        }
 
         PUBLICKEYSTRUC* pPublicKeyStruc = (PUBLICKEYSTRUC *) keyBlob;
 
@@ -1632,6 +1667,9 @@
     }
 
     jbyte* sourceBytes = env->GetByteArrayElements(source, 0);
+    if (sourceBytes == NULL) {
+        return -1;
+    }
 
     // Copy bytes from the end of the source array to the beginning of the
     // destination array (until the destination array is full).
@@ -1740,45 +1778,61 @@
         }
         // The length argument must be the smaller of jPublicExponentLength
         // and sizeof(pRsaPubKey->pubkey)
-        convertToLittleEndian(env, jPublicExponent,
-            (jbyte *) &(pRsaPubKey->pubexp), jPublicExponentLength);
+        if ((jElementLength = convertToLittleEndian(env, jPublicExponent,
+            (jbyte *) &(pRsaPubKey->pubexp), jPublicExponentLength)) < 0) {
+            __leave;
+        }
 
         // Modulus n
         jBlobElement =
             (jbyte *) (jBlobBytes + sizeof(PUBLICKEYSTRUC) + sizeof(RSAPUBKEY));
-        jElementLength = convertToLittleEndian(env, jModulus, jBlobElement,
-            jKeyByteLength);
+        if ((jElementLength = convertToLittleEndian(env, jModulus, jBlobElement,
+            jKeyByteLength)) < 0) {
+            __leave;
+        }
 
         if (bGeneratePrivateKeyBlob) {
             // Prime p
             jBlobElement += jElementLength;
-            jElementLength = convertToLittleEndian(env, jPrimeP, jBlobElement,
-                jKeyByteLength / 2);
+            if ((jElementLength = convertToLittleEndian(env, jPrimeP,
+                jBlobElement, jKeyByteLength / 2)) < 0) {
+                __leave;
+            }
 
             // Prime q
             jBlobElement += jElementLength;
-            jElementLength = convertToLittleEndian(env, jPrimeQ, jBlobElement,
-                jKeyByteLength / 2);
+            if ((jElementLength = convertToLittleEndian(env, jPrimeQ,
+                jBlobElement, jKeyByteLength / 2)) < 0) {
+                __leave;
+            }
 
             // Prime exponent p
             jBlobElement += jElementLength;
-            jElementLength = convertToLittleEndian(env, jExponentP,
-                jBlobElement, jKeyByteLength / 2);
+            if ((jElementLength = convertToLittleEndian(env, jExponentP,
+                jBlobElement, jKeyByteLength / 2)) < 0) {
+                __leave;
+            }
 
             // Prime exponent q
             jBlobElement += jElementLength;
-            jElementLength = convertToLittleEndian(env, jExponentQ,
-                jBlobElement, jKeyByteLength / 2);
+            if ((jElementLength = convertToLittleEndian(env, jExponentQ,
+                jBlobElement, jKeyByteLength / 2)) < 0) {
+                __leave;
+            }
 
             // CRT coefficient
             jBlobElement += jElementLength;
-            jElementLength = convertToLittleEndian(env, jCrtCoefficient,
-                jBlobElement, jKeyByteLength / 2);
+            if ((jElementLength = convertToLittleEndian(env, jCrtCoefficient,
+                jBlobElement, jKeyByteLength / 2)) < 0) {
+                __leave;
+            }
 
             // Private exponent
             jBlobElement += jElementLength;
-            convertToLittleEndian(env, jPrivateExponent, jBlobElement,
-                jKeyByteLength);
+            if ((jElementLength = convertToLittleEndian(env, jPrivateExponent,
+                jBlobElement, jKeyByteLength)) < 0) {
+                __leave;
+            }
         }
 
         jBlob = env->NewByteArray(jBlobLength);
@@ -1849,9 +1903,15 @@
 
     __try
     {
-        pszKeyContainerName = env->GetStringUTFChars(keyContainerName, NULL);
+        if ((pszKeyContainerName =
+            env->GetStringUTFChars(keyContainerName, NULL)) == NULL) {
+            __leave;
+        }
         dwBlobLen = env->GetArrayLength(keyBlob);
-        pbKeyBlob = (BYTE *) env->GetByteArrayElements(keyBlob, 0);
+        if ((pbKeyBlob = (BYTE *) env->GetByteArrayElements(keyBlob, 0))
+            == NULL) {
+            __leave;
+        }
 
         // Acquire a CSP context (create a new key container).
         if (::CryptAcquireContext(
@@ -1923,7 +1983,10 @@
     __try
     {
         dwBlobLen = env->GetArrayLength(keyBlob);
-        pbKeyBlob = (BYTE *) env->GetByteArrayElements(keyBlob, 0);
+        if ((pbKeyBlob = (BYTE *) env->GetByteArrayElements(keyBlob, 0))
+            == NULL) {
+            __leave;
+        }
 
         // Acquire a CSP context (create a new key container).
         // Prefer a PROV_RSA_AES CSP, when available, due to its support
--- a/src/windows/native/sun/windows/awt_Component.cpp	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/windows/native/sun/windows/awt_Component.cpp	Tue Nov 04 17:20:19 2014 +0000
@@ -3955,7 +3955,6 @@
         DASSERT(stringCls);
         CHECK_NULL(stringCls);
         clauseReading = env->NewObjectArray(cClause, stringCls, NULL);
-        env->DeleteLocalRef(stringCls);
         DASSERT(clauseReading);
         CHECK_NULL(clauseReading);
         for (int i=0; i<cClause; i++)   env->SetObjectArrayElement(clauseReading, i, rgClauseReading[i]);
--- a/src/windows/native/sun/windows/awt_TextArea.cpp	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/windows/native/sun/windows/awt_TextArea.cpp	Tue Nov 04 17:20:19 2014 +0000
@@ -47,16 +47,12 @@
 
 jfieldID AwtTextArea::scrollbarVisibilityID;
 
-WNDPROC AwtTextArea::sm_pDefWindowProc = NULL;
-
 /************************************************************************
  * AwtTextArea methods
  */
 
 AwtTextArea::AwtTextArea() {
-    m_bIgnoreEnChange = FALSE;
     m_bCanUndo        = FALSE;
-    m_hEditCtrl       = NULL;
     m_lHDeltaAccum    = 0;
     m_lVDeltaAccum    = 0;
 }
@@ -67,10 +63,6 @@
 
 void AwtTextArea::Dispose()
 {
-    if (m_hEditCtrl != NULL) {
-        VERIFY(::DestroyWindow(m_hEditCtrl));
-        m_hEditCtrl = NULL;
-    }
     AwtTextComponent::Dispose();
 }
 
@@ -91,10 +83,6 @@
     }
 }
 
-void AwtTextArea::EditGetSel(CHARRANGE &cr) {
-    SendMessage(EM_EXGETSEL, 0, reinterpret_cast<LPARAM>(&cr));
-}
-
 /* Count how many '\n's are there in jStr */
 size_t AwtTextArea::CountNewLines(JNIEnv *env, jstring jStr, size_t maxlen)
 {
@@ -149,159 +137,6 @@
     return retValue;
 }
 
-/*
- * This routine is a window procedure for the subclass of the standard edit control
- * used to generate context menu. RichEdit controls don't have built-in context menu.
- * To implement this functionality we have to create an invisible edit control and
- * forward WM_CONTEXTMENU messages from a RichEdit control to this helper edit control.
- * While the edit control context menu is active we intercept the message generated in
- * response to particular item selection and forward it back to the RichEdit control.
- * (See AwtTextArea::WmContextMenu for more details).
- */
-LRESULT
-AwtTextArea::EditProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) {
-
-    static BOOL bContextMenuActive = FALSE;
-
-    LRESULT retValue = 0;
-    MsgRouting mr = mrDoDefault;
-
-    DASSERT(::IsWindow(::GetParent(hWnd)));
-
-    switch (message) {
-    case WM_UNDO:
-    case WM_CUT:
-    case WM_COPY:
-    case WM_PASTE:
-    case WM_CLEAR:
-    case EM_SETSEL:
-        if (bContextMenuActive) {
-            ::SendMessage(::GetParent(hWnd), message, wParam, lParam);
-            mr = mrConsume;
-        }
-        break;
-    case WM_CONTEXTMENU:
-        bContextMenuActive = TRUE;
-        break;
-    }
-
-    if (mr == mrDoDefault) {
-        DASSERT(sm_pDefWindowProc != NULL);
-        retValue = ::CallWindowProc(sm_pDefWindowProc,
-                                    hWnd, message, wParam, lParam);
-    }
-
-    if (message == WM_CONTEXTMENU) {
-        bContextMenuActive = FALSE;
-    }
-
-    return retValue;
-}
-
-MsgRouting
-AwtTextArea::WmContextMenu(HWND hCtrl, UINT xPos, UINT yPos) {
-    /* Use the system provided edit control class to generate context menu. */
-    if (m_hEditCtrl == NULL) {
-        DWORD dwStyle = WS_CHILD;
-        DWORD dwExStyle = 0;
-        m_hEditCtrl = ::CreateWindowEx(dwExStyle,
-                                        L"EDIT",
-                                        L"TEXT",
-                                        dwStyle,
-                                        0, 0, 0, 0,
-                                        GetHWnd(),
-                                        reinterpret_cast<HMENU>(
-                                         static_cast<INT_PTR>(
-                                             CreateControlID())),
-                                        AwtToolkit::GetInstance().GetModuleHandle(),
-                                        NULL);
-        DASSERT(m_hEditCtrl != NULL);
-        if (sm_pDefWindowProc == NULL) {
-            sm_pDefWindowProc = (WNDPROC)::GetWindowLongPtr(m_hEditCtrl,
-                                                         GWLP_WNDPROC);
-        }
-        ::SetLastError(0);
-        INT_PTR ret = ::SetWindowLongPtr(m_hEditCtrl, GWLP_WNDPROC,
-                                   (INT_PTR)AwtTextArea::EditProc);
-        DASSERT(ret != 0 || ::GetLastError() == 0);
-    }
-
-    /*
-     * Tricks on the edit control to ensure that its context menu has
-     * the correct set of enabled items according to the RichEdit state.
-     */
-    ::SetWindowText(m_hEditCtrl, TEXT("TEXT"));
-
-    if (m_bCanUndo == TRUE && SendMessage(EM_CANUNDO)) {
-        /* Enable 'Undo' item. */
-        ::SendMessage(m_hEditCtrl, WM_CHAR, 'A', 0);
-    }
-
-    {
-        /*
-         * Initial selection for the edit control - (0,1).
-         * This enables 'Cut', 'Copy' and 'Delete' and 'Select All'.
-         */
-        INT nStart = 0;
-        INT nEnd = 1;
-        if (SendMessage(EM_SELECTIONTYPE) == SEL_EMPTY) {
-            /*
-             * RichEdit selection is empty - clear selection of the edit control.
-             * This disables 'Cut', 'Copy' and 'Delete'.
-             */
-            nStart = -1;
-            nEnd = 0;
-        } else {
-
-            CHARRANGE cr;
-            EditGetSel(cr);
-            /* Check if all the text is selected. */
-            if (cr.cpMin == 0) {
-
-                int len = ::GetWindowTextLength(GetHWnd());
-                if (cr.cpMin == 0 && cr.cpMax >= len) {
-                    /*
-                     * All the text is selected in RichEdit - select all the
-                     * text in the edit control. This disables 'Select All'.
-                     */
-                    nStart = 0;
-                    nEnd = -1;
-                }
-            }
-        }
-        ::SendMessage(m_hEditCtrl, EM_SETSEL, (WPARAM)nStart, (LPARAM)nEnd);
-    }
-
-    /* Disable 'Paste' item if the RichEdit control is read-only. */
-    ::SendMessage(m_hEditCtrl, EM_SETREADONLY,
-                  GetStyle() & ES_READONLY ? TRUE : FALSE, 0);
-
-    POINT p;
-    p.x = xPos;
-    p.y = yPos;
-
-    /*
-     * If the context menu is requested with SHIFT+F10 or VK_APPS key,
-     * we position its top left corner to the center of the RichEdit
-     * client rect.
-     */
-    if (p.x == -1 && p.y == -1) {
-        RECT r;
-        VERIFY(::GetClientRect(GetHWnd(), &r));
-        p.x = (r.left + r.right) / 2;
-        p.y = (r.top + r.bottom) / 2;
-        VERIFY(::ClientToScreen(GetHWnd(), &p));
-    }
-
-    // The context menu steals focus from the proxy.
-    // So, set the focus-restore flag up.
-    SetRestoreFocus(TRUE);
-    ::SendMessage(m_hEditCtrl, WM_CONTEXTMENU, (WPARAM)m_hEditCtrl, MAKELPARAM(p.x, p.y));
-    SetRestoreFocus(FALSE);
-
-    return mrConsume;
-}
-
 MsgRouting
 AwtTextArea::WmNcHitTest(UINT x, UINT y, LRESULT& retVal)
 {
@@ -314,27 +149,8 @@
 
 
 MsgRouting
-AwtTextArea::WmNotify(UINT notifyCode)
-{
-    if (notifyCode == EN_CHANGE) {
-        /*
-         * Ignore notifications if the text hasn't been changed.
-         * EN_CHANGE sent on character formatting changes as well.
-         */
-        if (m_bIgnoreEnChange == FALSE) {
-            m_bCanUndo = TRUE;
-            DoCallback("valueChanged", "()V");
-        } else {
-            m_bCanUndo = FALSE;
-        }
-    }
-    return mrDoDefault;
-}
-
-MsgRouting
 AwtTextArea::HandleEvent(MSG *msg, BOOL synthetic)
 {
-    MsgRouting returnVal;
     /*
      * RichEdit 1.0 control starts internal message loop if the
      * left mouse button is pressed while the cursor is not over
@@ -486,26 +302,6 @@
         }
         delete msg;
         return mrConsume;
-    } else if (msg->message == WM_RBUTTONUP ||
-               (msg->message == WM_SYSKEYDOWN && msg->wParam == VK_F10 &&
-                HIBYTE(::GetKeyState(VK_SHIFT)))) {
-        POINT p;
-        if (msg->message == WM_RBUTTONUP) {
-            VERIFY(::GetCursorPos(&p));
-        } else {
-            p.x = -1;
-            p.y = -1;
-        }
-
-        if (!::PostMessage(GetHWnd(), WM_CONTEXTMENU, (WPARAM)GetHWnd(),
-                           MAKELPARAM(p.x, p.y))) {
-            JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
-            JNU_ThrowInternalError(env, "Message not posted, native event queue may be full.");
-            env->ExceptionDescribe();
-            env->ExceptionClear();
-        }
-        delete msg;
-        return mrConsume;
     } else if (msg->message == WM_MOUSEWHEEL) {
         // 4417236: If there is an old version of RichEd32.dll which
         // does not provide the mouse wheel scrolling we have to
@@ -596,15 +392,7 @@
         // 4417236: end of fix
     }
 
-    /*
-     * Store the 'synthetic' parameter so that the WM_PASTE security check
-     * happens only for synthetic events.
-     */
-    m_synthetic = synthetic;
-    returnVal = AwtComponent::HandleEvent(msg, synthetic);
-    m_synthetic = FALSE;
-
-    return returnVal;
+    return AwtTextComponent::HandleEvent(msg, synthetic);
 }
 
 
--- a/src/windows/native/sun/windows/awt_TextArea.h	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/windows/native/sun/windows/awt_TextArea.h	Tue Nov 04 17:20:19 2014 +0000
@@ -57,17 +57,11 @@
     static size_t GetALength(JNIEnv* env, jstring jStr, size_t maxlen);
 
     LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam);
-    static LRESULT CALLBACK EditProc(HWND hWnd, UINT message,
-                                     WPARAM wParam, LPARAM lParam);
 
     MsgRouting WmEnable(BOOL fEnabled);
-    MsgRouting WmContextMenu(HWND hCtrl, UINT xPos, UINT yPos);
-    MsgRouting WmNotify(UINT notifyCode);
     MsgRouting WmNcHitTest(UINT x, UINT y, LRESULT &retVal);
     MsgRouting HandleEvent(MSG *msg, BOOL synthetic);
 
-    INLINE void SetIgnoreEnChange(BOOL b) { m_bIgnoreEnChange = b; }
-
     virtual BOOL InheritsNativeMouseWheelBehavior();
     virtual void Reshape(int x, int y, int w, int h);
 
@@ -81,22 +75,7 @@
 protected:
 
     void EditSetSel(CHARRANGE &cr);
-    void EditGetSel(CHARRANGE &cr);
   private:
-    // RichEdit 1.0 control generates EN_CHANGE notifications not only
-    // on text changes, but also on any character formatting change.
-    // This flag is true when the latter case is detected.
-    BOOL    m_bIgnoreEnChange;
-
-    // RichEdit 1.0 control undoes a character formatting change
-    // if it is the latest. We don't create our own undo buffer,
-    // but just prohibit undo in case if the latest operation
-    // is a formatting change.
-    BOOL    m_bCanUndo;
-
-    HWND    m_hEditCtrl;
-    static WNDPROC sm_pDefWindowProc;
-
     LONG    m_lHDeltaAccum;
     LONG    m_lVDeltaAccum;
 
--- a/src/windows/native/sun/windows/awt_TextComponent.cpp	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/windows/native/sun/windows/awt_TextComponent.cpp	Tue Nov 04 17:20:19 2014 +0000
@@ -66,6 +66,8 @@
     m_lLastPos  = -1;
     m_isLFonly        = FALSE;
     m_EOLchecked      = FALSE;
+    m_hEditCtrl       = NULL;
+    m_bIgnoreEnChange = FALSE;
 //    javaEventsMask = 0;    // accessibility support
 }
 
@@ -213,6 +215,16 @@
     return c;
 }
 
+void AwtTextComponent::Dispose()
+{
+    if (m_hEditCtrl != NULL) {
+        VERIFY(::DestroyWindow(m_hEditCtrl));
+        m_hEditCtrl = NULL;
+    }
+    AwtComponent::Dispose();
+}
+
+
 LRESULT
 AwtTextComponent::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) {
 
@@ -322,7 +334,16 @@
 AwtTextComponent::WmNotify(UINT notifyCode)
 {
     if (notifyCode == EN_CHANGE) {
-      DoCallback("valueChanged", "()V");
+        /*
+         * Ignore notifications if the text hasn't been changed.
+         * EN_CHANGE sent on character formatting changes as well.
+         */
+        if (m_bIgnoreEnChange == FALSE) {
+            m_bCanUndo = TRUE;
+            DoCallback("valueChanged", "()V");
+        } else {
+            m_bCanUndo = FALSE;
+        }
     }
     return mrDoDefault;
 }
@@ -337,6 +358,28 @@
 {
     MsgRouting returnVal;
 
+    if (msg->message == WM_RBUTTONUP ||
+               (msg->message == WM_SYSKEYDOWN && msg->wParam == VK_F10 &&
+                HIBYTE(::GetKeyState(VK_SHIFT)))) {
+        POINT p;
+        if (msg->message == WM_RBUTTONUP) {
+            VERIFY(::GetCursorPos(&p));
+        } else {
+            p.x = -1;
+            p.y = -1;
+        }
+
+        if (!::PostMessage(GetHWnd(), WM_CONTEXTMENU, (WPARAM)GetHWnd(),
+                           MAKELPARAM(p.x, p.y))) {
+            JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
+            JNU_ThrowInternalError(env, "Message not posted, native event queue may be full.");
+            env->ExceptionDescribe();
+            env->ExceptionClear();
+        }
+        delete msg;
+        return mrConsume;
+    }
+
     /*
      * Store the 'synthetic' parameter so that the WM_PASTE security check
      * happens only for synthetic events.
@@ -701,6 +744,10 @@
     SendMessage(EM_SETBKGNDCOLOR, (WPARAM)FALSE, (LPARAM)GetBackgroundColor());
 }
 
+void AwtTextComponent::EditGetSel(CHARRANGE &cr) {
+    SendMessage(EM_EXGETSEL, 0, reinterpret_cast<LPARAM>(&cr));
+}
+
 
 /************************************************************************
  * WTextComponentPeer native methods
@@ -983,6 +1030,161 @@
 }
 
 
+/*
+ * This routine is a window procedure for the subclass of the standard edit control
+ * used to generate context menu. RichEdit controls don't have built-in context menu.
+ * To implement this functionality we have to create an invisible edit control and
+ * forward WM_CONTEXTMENU messages from a RichEdit control to this helper edit control.
+ * While the edit control context menu is active we intercept the message generated in
+ * response to particular item selection and forward it back to the RichEdit control.
+ * (See AwtTextArea::WmContextMenu for more details).
+ */
+
+WNDPROC AwtTextComponent::sm_pDefWindowProc = NULL;
+
+LRESULT
+AwtTextComponent::EditProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) {
+
+    static BOOL bContextMenuActive = FALSE;
+
+    LRESULT retValue = 0;
+    MsgRouting mr = mrDoDefault;
+
+    DASSERT(::IsWindow(::GetParent(hWnd)));
+
+    switch (message) {
+    case WM_UNDO:
+    case WM_CUT:
+    case WM_COPY:
+    case WM_PASTE:
+    case WM_CLEAR:
+    case EM_SETSEL:
+        if (bContextMenuActive) {
+            ::SendMessage(::GetParent(hWnd), message, wParam, lParam);
+            mr = mrConsume;
+        }
+        break;
+    case WM_CONTEXTMENU:
+        bContextMenuActive = TRUE;
+        break;
+    }
+
+    if (mr == mrDoDefault) {
+        DASSERT(sm_pDefWindowProc != NULL);
+        retValue = ::CallWindowProc(sm_pDefWindowProc,
+                                    hWnd, message, wParam, lParam);
+    }
+
+    if (message == WM_CONTEXTMENU) {
+        bContextMenuActive = FALSE;
+    }
+
+    return retValue;
+}
+
+MsgRouting
+AwtTextComponent::WmContextMenu(HWND hCtrl, UINT xPos, UINT yPos) {
+    /* Use the system provided edit control class to generate context menu. */
+    if (m_hEditCtrl == NULL) {
+        DWORD dwStyle = WS_CHILD;
+        DWORD dwExStyle = 0;
+        m_hEditCtrl = ::CreateWindowEx(dwExStyle,
+                                        L"EDIT",
+                                        L"TEXT",
+                                        dwStyle,
+                                        0, 0, 0, 0,
+                                        GetHWnd(),
+                                        reinterpret_cast<HMENU>(
+                                         static_cast<INT_PTR>(
+                                             CreateControlID())),
+                                        AwtToolkit::GetInstance().GetModuleHandle(),
+                                        NULL);
+        DASSERT(m_hEditCtrl != NULL);
+        if (sm_pDefWindowProc == NULL) {
+            sm_pDefWindowProc = (WNDPROC)::GetWindowLongPtr(m_hEditCtrl,
+                                                         GWLP_WNDPROC);
+        }
+        ::SetLastError(0);
+        INT_PTR ret = ::SetWindowLongPtr(m_hEditCtrl, GWLP_WNDPROC,
+                                   (INT_PTR)AwtTextArea::EditProc);
+        DASSERT(ret != 0 || ::GetLastError() == 0);
+    }
+
+    /*
+     * Tricks on the edit control to ensure that its context menu has
+     * the correct set of enabled items according to the RichEdit state.
+     */
+    ::SetWindowText(m_hEditCtrl, TEXT("TEXT"));
+
+    if (m_bCanUndo == TRUE && SendMessage(EM_CANUNDO)) {
+        /* Enable 'Undo' item. */
+        ::SendMessage(m_hEditCtrl, WM_CHAR, 'A', 0);
+    }
+
+    {
+        /*
+         * Initial selection for the edit control - (0,1).
+         * This enables 'Cut', 'Copy' and 'Delete' and 'Select All'.
+         */
+        INT nStart = 0;
+        INT nEnd = 1;
+        if (SendMessage(EM_SELECTIONTYPE) == SEL_EMPTY) {
+            /*
+             * RichEdit selection is empty - clear selection of the edit control.
+             * This disables 'Cut', 'Copy' and 'Delete'.
+             */
+            nStart = -1;
+            nEnd = 0;
+        } else {
+
+            CHARRANGE cr;
+            EditGetSel(cr);
+            /* Check if all the text is selected. */
+            if (cr.cpMin == 0) {
+
+                int len = ::GetWindowTextLength(GetHWnd());
+                if (cr.cpMin == 0 && cr.cpMax >= len) {
+                    /*
+                     * All the text is selected in RichEdit - select all the
+                     * text in the edit control. This disables 'Select All'.
+                     */
+                    nStart = 0;
+                    nEnd = -1;
+                }
+            }
+        }
+        ::SendMessage(m_hEditCtrl, EM_SETSEL, (WPARAM)nStart, (LPARAM)nEnd);
+    }
+
+    /* Disable 'Paste' item if the RichEdit control is read-only. */
+    ::SendMessage(m_hEditCtrl, EM_SETREADONLY,
+                  GetStyle() & ES_READONLY ? TRUE : FALSE, 0);
+
+    POINT p;
+    p.x = xPos;
+    p.y = yPos;
+
+    /*
+     * If the context menu is requested with SHIFT+F10 or VK_APPS key,
+     * we position its top left corner to the center of the RichEdit
+     * client rect.
+     */
+    if (p.x == -1 && p.y == -1) {
+        RECT r;
+        VERIFY(::GetClientRect(GetHWnd(), &r));
+        p.x = (r.left + r.right) / 2;
+        p.y = (r.top + r.bottom) / 2;
+        VERIFY(::ClientToScreen(GetHWnd(), &p));
+    }
+
+    // The context menu steals focus from the proxy.
+    // So, set the focus-restore flag up.
+    SetRestoreFocus(TRUE);
+    ::SendMessage(m_hEditCtrl, WM_CONTEXTMENU, (WPARAM)m_hEditCtrl, MAKELPARAM(p.x, p.y));
+    SetRestoreFocus(FALSE);
+
+    return mrConsume;
+}
 
 //
 // Accessibility support
--- a/src/windows/native/sun/windows/awt_TextComponent.h	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/windows/native/sun/windows/awt_TextComponent.h	Tue Nov 04 17:20:19 2014 +0000
@@ -47,6 +47,8 @@
 
     static AwtTextComponent* Create(jobject self, jobject parent, BOOL isMultiline);
 
+    virtual void Dispose();
+
     virtual LPCTSTR GetClassName();
     LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam);
 
@@ -83,6 +85,8 @@
     MsgRouting HandleEvent(MSG *msg, BOOL synthetic);
     MsgRouting WmPaste();
 
+    INLINE void SetIgnoreEnChange(BOOL b) { m_bIgnoreEnChange = b; }
+
     virtual BOOL IsFocusingMouseMessage(MSG *pMsg);
 
 /*  To be fully implemented in a future release
@@ -115,11 +119,24 @@
     INLINE VOID SetEndSelectionPos(LONG lPos) { m_lEndPos = lPos; }
     INLINE VOID SetLastSelectionPos(LONG lPos) { m_lLastPos = lPos; }
 
+    void EditGetSel(CHARRANGE &cr);
+
     // Used to prevent untrusted code from synthesizing a WM_PASTE message
     // by posting a <CTRL>-V KeyEvent
     BOOL    m_synthetic;
     LONG EditGetCharFromPos(POINT& pt);
 
+    // RichEdit 1.0 control generates EN_CHANGE notifications not only
+    // on text changes, but also on any character formatting change.
+    // This flag is true when the latter case is detected.
+    BOOL    m_bIgnoreEnChange;
+
+    // RichEdit 1.0 control undoes a character formatting change
+    // if it is the latest. We don't create our own undo buffer,
+    // but just prohibit undo in case if the latest operation
+    // is a formatting change.
+    BOOL    m_bCanUndo;
+
     /*****************************************************************
      * Inner class OleCallback declaration.
      */
@@ -166,6 +183,13 @@
 
     static OleCallback sm_oleCallback;
 
+    static WNDPROC sm_pDefWindowProc;
+    HWND    m_hEditCtrl;
+
+    static LRESULT CALLBACK EditProc(HWND hWnd, UINT message,
+                                     WPARAM wParam, LPARAM lParam);
+    MsgRouting WmContextMenu(HWND hCtrl, UINT xPos, UINT yPos);
+
     //
     // Accessibility support
     //
--- a/src/windows/native/sun/windows/awt_TextField.cpp	Fri Oct 10 15:52:52 2014 +0100
+++ b/src/windows/native/sun/windows/awt_TextField.cpp	Tue Nov 04 17:20:19 2014 +0000
@@ -249,13 +249,7 @@
         }
     }
 
-    /*
-     * Store the 'synthetic' parameter so that the WM_PASTE security check
-     * happens only for synthetic events.
-     */
-    m_synthetic = synthetic;
-    returnVal = AwtComponent::HandleEvent(msg, synthetic);
-    m_synthetic = FALSE;
+    returnVal = AwtTextComponent::HandleEvent(msg, synthetic);
 
     if(systemBeeperEnabled){
         SystemParametersInfo(SPI_SETBEEP, 1, NULL, 0);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/com/sun/jdi/EvalInterfaceStatic.sh	Tue Nov 04 17:20:19 2014 +0000
@@ -0,0 +1,126 @@
+#!/bin/sh
+
+#
+# Copyright (c) 2014, 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 8031195
+#  @summary JDB allows evaluation of calls to static interface methods
+#  @author Jaroslav Bachorik
+#
+#  @run shell/timeout=300 EvalInterfaceStatic.sh
+
+#  The test exercises the ability to invoke static methods on interfaces.
+#  Static interface methods are a new feature added in JDK8.
+#
+#  The test makes sure that it is, at all, possible to invoke an interface
+#  static method and that the static methods are not inherited by extending
+#  interfaces.
+
+classname=EvalStaticInterfaces
+
+createJavaFile()
+{
+    cat <<EOF > $classname.java.1
+public interface $classname {
+    static String staticMethod1() {
+        return "base:staticMethod1";
+    }
+
+    static String staticMethod2() {
+        return "base:staticMethod2";
+    }
+
+    public static void main(String[] args) {
+        // prove that these work
+        System.out.println("base staticMethod1(): " + $classname.staticMethod1());
+        System.out.println("base staticMethod2(): " + $classname.staticMethod2());
+        System.out.println("overridden staticMethod2(): " + Extended$classname.staticMethod2());
+        System.out.println("base staticMethod3(): " + Extended$classname.staticMethod3());
+
+        gus();
+    }
+
+    static void gus() {
+        int x = 0;             // @1 breakpoint
+    }
+}
+
+interface Extended$classname extends $classname {
+    static String staticMethod2() {
+        return "extended:staticMethod2";
+    }
+
+    static String staticMethod3() {
+        return "extended:staticMethod3";
+    }
+}
+
+
+
+EOF
+}
+
+# drive jdb by sending cmds to it and examining its output
+dojdbCmds()
+{
+    setBkpts @1
+    runToBkpt @1
+
+    cmd eval "$classname.staticMethod1()"
+    jdbFailIfNotPresent "base:staticMethod1" 2
+
+    cmd eval "$classname.staticMethod2()"
+    jdbFailIfNotPresent "base:staticMethod2" 2
+
+    cmd eval "Extended$classname.staticMethod1()"
+    jdbFailIfPresent "base:staticMethod1" 2
+
+    cmd eval "Extended$classname.staticMethod2()"
+    jdbFailIfNotPresent "extended:staticMethod2" 2
+
+    cmd eval "Extended$classname.staticMethod3()"
+    jdbFailIfNotPresent "extended:staticMethod3" 2
+}
+
+
+mysetup()
+{
+    if [ -z "$TESTSRC" ] ; then
+        TESTSRC=.
+    fi
+
+    for ii in . $TESTSRC $TESTSRC/.. ; do
+        if [ -r "$ii/ShellScaffold.sh" ] ; then
+            . $ii/ShellScaffold.sh
+            break
+        fi
+    done
+}
+
+# You could replace this next line with the contents
+# of ShellScaffold.sh and this script will run just the same.
+mysetup
+
+runit
+pass
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/com/sun/jdi/InterfaceMethodsTest.java	Tue Nov 04 17:20:19 2014 +0000
@@ -0,0 +1,422 @@
+/*
+ * Copyright (c) 2014, 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 8031195
+ *  @summary  JDI: Add support for static and default methods in interfaces
+ *
+ *  @run build TestScaffold VMConnection TargetListener TargetAdapter
+ *  @run build InterfaceMethodsTest
+ *  @run main InterfaceMethodsTest
+ */
+import com.sun.jdi.*;
+import com.sun.jdi.event.*;
+import java.util.Collections;
+
+public class InterfaceMethodsTest extends TestScaffold {
+    private static final int RESULT_A = 1;
+    private static final int RESULT_B = 1;
+    private static final int RESULT_TARGET = 1;
+    static interface InterfaceA {
+        static int staticMethodA() {
+            System.out.println("-InterfaceA: static interface method A-");
+            return RESULT_A;
+        }
+        static int staticMethodB() {
+            System.out.println("-InterfaceA: static interface method B-");
+            return RESULT_A;
+        }
+        default int defaultMethodA() {
+            System.out.println("-InterfaceA: default interface method A-");
+            return RESULT_A;
+        }
+        default int defaultMethodB() {
+            System.out.println("-InterfaceA: default interface method B-");
+            return RESULT_A;
+        }
+        default int defaultMethodC() {
+            System.out.println("-InterfaceA: default interface method C-");
+            return RESULT_A;
+        }
+
+        int implementedMethod();
+    }
+
+    static interface InterfaceB extends InterfaceA {
+        @Override
+        default int defaultMethodC() {
+            System.out.println("-InterfaceB: overridden default interface method C-");
+            return RESULT_B;
+        }
+        default int defaultMethodD() {
+            System.out.println("-InterfaceB: default interface method D-");
+            return RESULT_B;
+        }
+
+        static int staticMethodB() {
+            System.out.println("-InterfaceB: overridden static interface method B-");
+            return RESULT_B;
+        }
+
+        static int staticMethodC() {
+            System.out.println("-InterfaceB: static interface method C-");
+            return RESULT_B;
+        }
+    }
+
+    final static class TargetClass implements InterfaceB {
+        public int classMethod() {
+            System.out.println("-TargetClass: class only method-");
+            return RESULT_TARGET;
+        }
+
+        @Override
+        public int implementedMethod() {
+            System.out.println("-TargetClass: implemented non-default interface method-");
+            return RESULT_TARGET;
+        }
+
+        @Override
+        public int defaultMethodB() {
+            System.out.println("-TargetClass: overridden default interface method D");
+
+            return RESULT_TARGET;
+        }
+
+        public static void main(String[] args) {
+            TargetClass tc = new TargetClass();
+            tc.doTests(tc);
+        }
+
+        private void doTests(TargetClass ref) {
+            // break
+        }
+    }
+
+    public InterfaceMethodsTest(String[] args) {
+        super(args);
+    }
+
+    public static void main(String[] args) throws Exception {
+        new InterfaceMethodsTest(args).startTests();
+    }
+
+    private static final String TEST_CLASS_NAME = InterfaceMethodsTest.class.getName().replace('.', '/');
+    private static final String TARGET_CLASS_NAME = TargetClass.class.getName().replace('.', '/');
+    private static final String INTERFACEA_NAME = InterfaceA.class.getName().replace('.', '/');
+    private static final String INTERFACEB_NAME = InterfaceB.class.getName().replace('.', '/');
+
+    protected void runTests() throws Exception {
+        /*
+         * Get to the top of main()
+         * to determine targetClass and mainThread
+         */
+        BreakpointEvent bpe = startToMain(TARGET_CLASS_NAME);
+
+        bpe = resumeTo(TARGET_CLASS_NAME, "doTests", "(L" + TARGET_CLASS_NAME +";)V");
+
+        mainThread = bpe.thread();
+
+        StackFrame frame = mainThread.frame(0);
+        ObjectReference thisObject = frame.thisObject();
+        ObjectReference ref = (ObjectReference)frame.getArgumentValues().get(0);
+
+        ReferenceType targetClass = bpe.location().declaringType();
+        testImplementationClass(targetClass, thisObject);
+
+        testInterfaceA(ref);
+
+        testInterfaceB(ref);
+
+        /*
+         * resume the target listening for events
+         */
+        listenUntilVMDisconnect();
+
+        /*
+         * deal with results of test
+         * if anything has called failure("foo") testFailed will be true
+         */
+        if (!testFailed) {
+            println("InterfaceMethodsTest: passed");
+        } else {
+            throw new Exception("InterfaceMethodsTest: failed");
+        }
+    }
+
+    private void testInterfaceA(ObjectReference ref) {
+        // Test non-virtual calls on InterfaceA
+
+        ReferenceType ifaceClass = (ReferenceType)vm().classesByName(INTERFACEA_NAME).get(0);
+        /* Default method calls */
+
+        // invoke the InterfaceA's "defaultMethodA"
+        testInvokePos(ifaceClass, ref, "defaultMethodA", "()I", vm().mirrorOf(RESULT_A));
+
+        // invoke the InterfaceA's "defaultMethodB"
+        testInvokePos(ifaceClass, ref, "defaultMethodB", "()I", vm().mirrorOf(RESULT_A));
+
+        // invoke the InterfaceA's "defaultMethodC"
+        testInvokePos(ifaceClass, ref, "defaultMethodC", "()I", vm().mirrorOf(RESULT_A));
+
+        // "defaultMethodD" from InterfaceB is not accessible from here
+        testInvokeNeg(ifaceClass, ref, "defaultMethodD", "()I", vm().mirrorOf(RESULT_B),
+                "Attempted to invoke non-existing method");
+
+        // trying to invoke the asbtract method "implementedMethod"
+        testInvokeNeg(ifaceClass, ref, "implementedMethod", "()I", vm().mirrorOf(TARGET_CLASS_NAME),
+                "Invocation of non-default methods is not supported");
+
+
+        /* Static method calls */
+
+        // invoke interface static method A
+        testInvokePos(ifaceClass, null, "staticMethodA", "()I", vm().mirrorOf(RESULT_A));
+
+        // try to invoke static method A on the instance
+        testInvokePos(ifaceClass, ref, "staticMethodA", "()I", vm().mirrorOf(RESULT_A));
+
+        // invoke interface static method B
+        testInvokePos(ifaceClass, null, "staticMethodB", "()I", vm().mirrorOf(RESULT_A));
+
+        // try to invoke static method B on the instance
+        testInvokePos(ifaceClass, ref, "staticMethodB", "()I", vm().mirrorOf(RESULT_A));
+    }
+
+    private void testInterfaceB(ObjectReference ref) {
+        // Test non-virtual calls on InterfaceB
+        ReferenceType ifaceClass = (ReferenceType)vm().classesByName(INTERFACEB_NAME).get(0);
+
+        /* Default method calls */
+
+        // invoke the inherited "defaultMethodA"
+        testInvokePos(ifaceClass, ref, "defaultMethodA", "()I", vm().mirrorOf(RESULT_A));
+
+        // invoke the inherited "defaultMethodB"
+        testInvokePos(ifaceClass, ref, "defaultMethodB", "()I", vm().mirrorOf(RESULT_A));
+
+        // invoke the inherited and overridden "defaultMethodC"
+        testInvokePos(ifaceClass, ref, "defaultMethodC", "()I", vm().mirrorOf(RESULT_B));
+
+        // invoke InterfaceB only "defaultMethodD"
+        testInvokePos(ifaceClass, ref, "defaultMethodD", "()I", vm().mirrorOf(RESULT_B));
+
+        // "implementedMethod" is not present in InterfaceB
+        testInvokeNeg(ifaceClass, ref, "implementedMethod", "()I", vm().mirrorOf(RESULT_TARGET),
+                "Invocation of non-default methods is not supported");
+
+
+        /* Static method calls*/
+
+        // "staticMethodA" must not be inherited by InterfaceB
+        testInvokeNeg(ifaceClass, null, "staticMethodA", "()I", vm().mirrorOf(RESULT_A),
+                "Static interface methods are not inheritable");
+
+        // however it is possible to call "staticMethodA" on the actual instance
+        testInvokeNeg(ifaceClass, ref, "staticMethodA", "()I", vm().mirrorOf(RESULT_A),
+                "Static interface methods are not inheritable");
+
+        // "staticMethodB" is overridden in InterfaceB
+        testInvokePos(ifaceClass, null, "staticMethodB", "()I", vm().mirrorOf(RESULT_B));
+
+        // the instance invokes the overriden form of "staticMethodB" from InterfaceB
+        testInvokePos(ifaceClass, ref, "staticMethodB", "()I", vm().mirrorOf(RESULT_B));
+
+        // "staticMethodC" is present only in InterfaceB
+        testInvokePos(ifaceClass, null, "staticMethodC", "()I", vm().mirrorOf(RESULT_B));
+
+        // "staticMethodC" should be reachable from the instance too
+        testInvokePos(ifaceClass, ref, "staticMethodC", "()I", vm().mirrorOf(RESULT_B));
+    }
+
+    private void testImplementationClass(ReferenceType targetClass, ObjectReference thisObject) {
+        // Test invocations on the implementation object
+
+        /* Default method calls */
+
+        // "defaultMethodA" is accessible and not overridden
+        testInvokePos(targetClass, thisObject, "defaultMethodA", "()I", vm().mirrorOf(RESULT_TARGET));
+
+        // "defaultMethodB" is accessible and overridden in TargetClass
+        testInvokePos(targetClass, thisObject, "defaultMethodB", "()I", vm().mirrorOf(RESULT_TARGET));
+
+        // "defaultMethodC" is accessible and overridden in InterfaceB
+        testInvokePos(targetClass, thisObject, "defaultMethodC", "()I", vm().mirrorOf(RESULT_TARGET));
+
+        // "defaultMethodD" is accessible
+        testInvokePos(targetClass, thisObject, "defaultMethodD", "()I", vm().mirrorOf(RESULT_TARGET));
+
+
+        /* Non-default instance method calls */
+
+        // "classMethod" declared in TargetClass is accessible
+        testInvokePos(targetClass, thisObject, "classMethod", "()I", vm().mirrorOf(RESULT_TARGET));
+
+        // the abstract "implementedMethod" has been implemented in TargetClass
+        testInvokePos(targetClass, thisObject, "implementedMethod", "()I", vm().mirrorOf(RESULT_TARGET));
+
+
+        /* Static method calls */
+
+        // All the static methods declared by the interfaces are not reachable from the instance of the implementor class
+        testInvokeNeg(targetClass, thisObject, "staticMethodA", "()I", vm().mirrorOf(RESULT_A),
+                "Static interface methods are not inheritable");
+
+        testInvokeNeg(targetClass, thisObject, "staticMethodB", "()I", vm().mirrorOf(RESULT_B),
+                "Static interface methods are not inheritable");
+
+        testInvokeNeg(targetClass, thisObject, "staticMethodC", "()I", vm().mirrorOf(RESULT_B),
+                "Static interface methods are not inheritable");
+
+        // All the static methods declared by the interfaces are not reachable through the implementor class
+        testInvokeNeg(targetClass, null, "staticMethodA", "()I", vm().mirrorOf(RESULT_A),
+                "Static interface methods are not inheritable");
+
+        testInvokeNeg(targetClass, null, "staticMethodB", "()I", vm().mirrorOf(RESULT_B),
+                "Static interface methods are not inheritable");
+
+        testInvokeNeg(targetClass, null, "staticMethodC", "()I", vm().mirrorOf(RESULT_B),
+                "Static interface methods are not inheritable");
+    }
+
+    private void testInvokePos(ReferenceType targetClass, ObjectReference ref, String methodName,
+                               String methodSig, Value value) {
+        logInvocation(ref, methodName, methodSig, targetClass);
+        try {
+            invoke(targetClass, ref, methodName, methodSig, value);
+            System.err.println("--- PASSED");
+        } catch (Exception e) {
+            System.err.println("--- FAILED");
+            failure("FAILED: Invocation failed with error message " + e.getLocalizedMessage());
+        }
+    }
+
+    private void testInvokeNeg(ReferenceType targetClass, ObjectReference ref, String methodName,
+                               String methodSig, Value value, String msg) {
+        logInvocation(ref, methodName, methodSig, targetClass);
+        try {
+            invoke(targetClass, ref, methodName, methodSig, value);
+            System.err.println("--- FAILED");
+            failure("FAILED: " + msg);
+        } catch (Exception e) {
+            System.err.println("--- PASSED");
+
+        }
+    }
+
+    private void invoke(ReferenceType targetClass, ObjectReference ref, String methodName,
+                        String methodSig, Value value)
+    throws Exception {
+        Method method = getMethod(targetClass, methodName, methodSig);
+        if (method == null) {
+            throw new Exception("Can't find method: " + methodName  + " for class = " + targetClass);
+        }
+
+        println("Invoking " + (method.isAbstract() ? "abstract " : " ") + "method: " + method);
+
+        Value returnValue = null;
+        if (ref != null) {
+            returnValue = invokeInstance(ref, method);
+        } else {
+            returnValue = invokeStatic(targetClass, method);
+        }
+
+        println("        return val = " + returnValue);
+        // It has to be the same value as what we passed in!
+        if (returnValue.equals(value)) {
+            println("         " + method.name() + " return value matches: "
+                    + value);
+        } else {
+            if (value != null) {
+                throw new Exception(method.name() + " returned: " + returnValue +
+                                    " expected: " + value );
+            } else {
+                println("         " + method.name() + " return value : " + returnValue);
+            }
+
+        }
+    }
+
+    private Value invokeInstance(ObjectReference ref, Method method) throws Exception {
+        return ref.invokeMethod(mainThread, method, Collections.emptyList(), ObjectReference.INVOKE_NONVIRTUAL);
+    }
+
+    private Value invokeStatic(ReferenceType refType, Method method) throws Exception {
+        if (refType instanceof ClassType) {
+            return ((ClassType)refType).invokeMethod(mainThread, method, Collections.emptyList(), ObjectReference.INVOKE_NONVIRTUAL);
+        } else {
+            return ((InterfaceType)refType).invokeMethod(mainThread, method, Collections.emptyList(), ObjectReference.INVOKE_NONVIRTUAL);
+        }
+    }
+
+    private Method getMethod(ReferenceType rt, String name, String signature) {
+        if (rt == null) return null;
+        Method m = findMethod(rt, name, signature);
+        if (m == null) {
+            if (rt instanceof ClassType) {
+                for (Object ifc : ((ClassType)rt).interfaces()) {
+                    m = getMethod((ReferenceType)ifc, name, signature);
+                    if (m != null) {
+                        break;
+                    }
+                }
+                if (m == null) {
+                    m = getMethod(((ClassType)rt).superclass(), name, signature);
+                } else {
+                    if (m.isStatic()) {
+                        // interface static methods are not inherited
+                        m = null;
+                    }
+                }
+            } else if (rt instanceof InterfaceType) {
+                for(Object ifc : ((InterfaceType)rt).superinterfaces()) {
+                    m = getMethod((ReferenceType)ifc, name, signature);
+                    if (m != null) {
+                        if (m.isStatic()) {
+                            // interface static methods are not inherited
+                            m = null;
+                        }
+                        break;
+                    }
+                }
+            }
+        }
+
+        return m;
+    }
+
+    private void logInvocation(ObjectReference ref, String methodName, String methodSig, ReferenceType targetClass) {
+        if (ref != null) {
+            System.err.println("Invoking: " + ref.referenceType().name() + "." +
+                    methodName + methodSig + " with target of type " +
+                    targetClass.name());
+        } else {
+            System.err.println("Invoking static : " + targetClass.name() + "." +
+                    methodName + methodSig);
+        }
+    }
+}
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/com/sun/jdi/VisibleMethods.java	Tue Nov 04 17:20:19 2014 +0000
@@ -0,0 +1,141 @@
+/*
+ * Copyright (c) 2013, 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
+ *  @summary Test ReferenceType.visibleMethods
+ *  @bug 8028430
+ *
+ *  @author Staffan Larsen
+ *
+ *  @run build TestScaffold VMConnection TargetListener TargetAdapter
+ *  @run compile -g VisibleMethods.java
+ *  @run main VisibleMethods
+ */
+import com.sun.jdi.Method;
+import com.sun.jdi.ReferenceType;
+import com.sun.jdi.StackFrame;
+import com.sun.jdi.StringReference;
+import com.sun.jdi.ThreadReference;
+import com.sun.jdi.event.BreakpointEvent;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/********** target program **********/
+
+interface Super {
+    public void m(Object o); // This method should not be visible in AC
+    public void m(String s); // This method should not be visible in AC
+}
+
+interface One extends Super {
+    public void m(Object o);
+    public void m1(); // Either this method or Two.m1 should be visible in AC
+}
+
+interface Two extends Super {
+    public void m(String s);
+    public void m1(); // Either this method or One.m1 should be visible in AC
+}
+
+abstract class AC implements One, Two {
+}
+
+class CC extends AC {
+    public void m(Object o) {
+    }
+    public void m(String s) {
+    }
+    public void m1() {
+    }
+    public static void main(String[] args) {
+        System.out.println("Goodbye from VisibleMethods!");
+    }
+}
+
+/********** test program **********/
+
+public class VisibleMethods extends TestScaffold {
+    ReferenceType targetClass;
+    ThreadReference mainThread;
+
+    VisibleMethods(String args[]) {
+        super(args);
+    }
+
+    public static void main(String[] args) throws Exception {
+        new VisibleMethods(args).startTests();
+    }
+
+    /********** test core **********/
+
+    protected void runTests()
+        throws Exception
+    {
+        /*
+         * Run to String.<init>
+         */
+        startToMain("CC");
+
+        ReferenceType ac = findReferenceType("AC");
+        List<String> visible = ac.visibleMethods().
+                stream().
+                map(Method::toString).
+                collect(Collectors.toList());
+
+        System.out.println("visibleMethods(): " + visible);
+
+        verifyContains(visible, 1, "Two.m(java.lang.String)");
+        verifyContains(visible, 1, "One.m(java.lang.Object)");
+        verifyContains(visible, 0, "Super.m(java.lang.Object)");
+        verifyContains(visible, 0, "Super.m(java.lang.String)");
+        verifyContains(visible, 1, "Two.m1()", "One.m1()");
+
+        /*
+         * resume the target listening for events
+         */
+        listenUntilVMDisconnect();
+    }
+
+    private void verifyContains(List<String> methods, int matches,
+            String... sigs) throws Exception {
+        if (countMatches(methods, sigs) != matches) {
+            throw new Exception("visibleMethods() should have contained "
+                    + matches + " entry/entries from " + Arrays.toString(sigs));
+        }
+    }
+
+    private int countMatches(List<String> list1, String[] list2) {
+        int count = 0;
+        for (String s1 : list1) {
+            for (String s2 : list2) {
+                if (s1.equals(s2)) {
+                    count++;
+                }
+            }
+        }
+        return count;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/java/awt/Container/ContainerAIOOBE/ContainerAIOOBE.java	Tue Nov 04 17:20:19 2014 +0000
@@ -0,0 +1,74 @@
+/*
+ * Copyright (c) 2014, 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.awt.Button;
+import java.awt.Component;
+import java.awt.Container;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+
+/**
+ * @test
+ * @bug 8059590
+ * @summary ArrayIndexOutOfBoundsException occurs when Container with overridden getComponents() is deserialized.
+ * @author Alexey Ivanov
+ * @run main ContainerAIOOBE
+ */
+public class ContainerAIOOBE {
+
+    public static void main(final String[] args) throws Exception {
+        ZContainer z = new ZContainer();
+        z.add(new Button());
+
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        ObjectOutputStream oos = new ObjectOutputStream(baos);
+        oos.writeObject(z);
+        oos.flush();
+        oos.close();
+
+        byte[] array = baos.toByteArray();
+        ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(array));
+
+        // Reading the object must not throw ArrayIndexOutOfBoundsException
+        ZContainer zz = (ZContainer) ois.readObject();
+
+        if (zz.getComponentCount() != 1) {
+            throw new Exception("deserialized object must have 1 component");
+        }
+        if (!(zz.getComponent(0) instanceof Button)) {
+            throw new Exception("deserialized object must contain Button component");
+        }
+        if (zz.getComponents().length != 0) {
+            throw new Exception("deserialized object returns non-empty array");
+        }
+        System.out.println("Test passed");
+    }
+
+    static class ZContainer extends Container {
+        public Component[] getComponents() {
+            return new Component[0];
+        }
+    }
+}
--- a/test/java/awt/Focus/SortingFPT/JDK8048887.java	Fri Oct 10 15:52:52 2014 +0100
+++ b/test/java/awt/Focus/SortingFPT/JDK8048887.java	Tue Nov 04 17:20:19 2014 +0000
@@ -26,7 +26,7 @@
   @bug       8048887
   @summary   Tests SortingFTP for an exception caused by the tim-sort algo.
   @author    anton.tarasov: area=awt.focus
-  @run       main JDK8040632
+  @run       main JDK8048887
 */
 
 import javax.swing.JFrame;
--- a/test/java/awt/Graphics2D/DrawString/DrawStringCrash.java	Fri Oct 10 15:52:52 2014 +0100
+++ b/test/java/awt/Graphics2D/DrawString/DrawStringCrash.java	Tue Nov 04 17:20:19 2014 +0000
@@ -52,7 +52,7 @@
         Graphics2D g2d = bi.createGraphics();
         while (len < maxLen) {
             try {
-                g2d.drawString(s, 20, 20);
+                g2d.drawString(sb.toString(), 20, 20);
             } catch (OutOfMemoryError e) {
                 return;
             }
--- a/test/java/lang/invoke/LFCaching/LambdaFormTestCase.java	Fri Oct 10 15:52:52 2014 +0100
+++ b/test/java/lang/invoke/LFCaching/LambdaFormTestCase.java	Tue Nov 04 17:20:19 2014 +0000
@@ -22,6 +22,8 @@
  */
 
 import com.oracle.testlibrary.jsr292.Helper;
+import com.sun.management.HotSpotDiagnosticMXBean;
+import java.lang.management.ManagementFactory;
 import java.lang.reflect.Method;
 import java.util.Collection;
 import java.util.function.Function;
@@ -37,6 +39,8 @@
 
     private final static String METHOD_HANDLE_CLASS_NAME = "java.lang.invoke.MethodHandle";
     private final static String INTERNAL_FORM_METHOD_NAME = "internalForm";
+    private static final double ITERATIONS_TO_CODE_CACHE_SIZE_RATIO
+            = 45 / (128.0 * 1024 * 1024);
 
     /**
      * Reflection link to {@code j.l.i.MethodHandle.internalForm} method. It is
@@ -87,7 +91,24 @@
         boolean passed = true;
         int testCounter = 0;
         int failCounter = 0;
-        long iterations = Math.max(1, Helper.TEST_LIMIT / testMethods.size());
+        long testCaseNum = testMethods.size();
+        long iterations = Math.max(1, Helper.TEST_LIMIT / testCaseNum);
+        System.out.printf("Number of iterations according to -DtestLimit is %d (%d cases)%n",
+                iterations, iterations * testCaseNum);
+        HotSpotDiagnosticMXBean hsDiagBean = ManagementFactory.getPlatformMXBean(HotSpotDiagnosticMXBean.class);
+        long codeCacheSize = Long.parseLong(
+                hsDiagBean.getVMOption("ReservedCodeCacheSize").getValue());
+        System.out.printf("Code Cache Size is %d bytes%n", codeCacheSize);
+        long iterationsByCodeCacheSize = (long) (codeCacheSize
+                * ITERATIONS_TO_CODE_CACHE_SIZE_RATIO);
+        System.out.printf("Number of iterations limited by code cache size is %d (%d cases)%n",
+                iterationsByCodeCacheSize, iterationsByCodeCacheSize * testCaseNum);
+        if (iterations > iterationsByCodeCacheSize) {
+            iterations = iterationsByCodeCacheSize;
+        }
+        System.out.printf("Number of iterations is set to %d (%d cases)%n",
+                iterations, iterations * testCaseNum);
+        System.out.flush();
         for (long i = 0; i < iterations; i++) {
             System.err.println(String.format("Iteration %d:", i));
             for (TestMethods testMethod : testMethods) {
--- a/test/java/lang/invoke/LFCaching/TestMethods.java	Fri Oct 10 15:52:52 2014 +0100
+++ b/test/java/lang/invoke/LFCaching/TestMethods.java	Tue Nov 04 17:20:19 2014 +0000
@@ -44,7 +44,7 @@
                 @Override
                 public Map<String, Object> getTestCaseData() {
                     Map<String, Object> data = new HashMap<>();
-                    int desiredArity = Helper.RNG.nextInt(Helper.MAX_ARITY);
+                    int desiredArity = Helper.RNG.nextInt(super.maxArity);
                     MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity);
                     data.put("mtTarget", mtTarget);
                     // Arity after reducing because of long and double take 2 slots.
@@ -83,7 +83,7 @@
                 @Override
                 public Map<String, Object> getTestCaseData() {
                     Map<String, Object> data = new HashMap<>();
-                    int desiredArity = Helper.RNG.nextInt(Helper.MAX_ARITY);
+                    int desiredArity = Helper.RNG.nextInt(super.maxArity);
                     MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity);
                     data.put("mtTarget", mtTarget);
                     // Arity after reducing because of long and double take 2 slots.
@@ -91,7 +91,7 @@
                     int dropArgsPos = Helper.RNG.nextInt(realArity + 1);
                     data.put("dropArgsPos", dropArgsPos);
                     MethodType mtDropArgs = TestMethods.randomMethodTypeGenerator(
-                            Helper.RNG.nextInt(Helper.MAX_ARITY - realArity));
+                            Helper.RNG.nextInt(super.maxArity - realArity));
                     data.put("mtDropArgs", mtDropArgs);
                     return data;
                 }
@@ -106,20 +106,20 @@
                     int mtTgtSlotsCount = TestMethods.argSlotsCount(mtTarget);
                     int mtDASlotsCount = TestMethods.argSlotsCount(mtDropArgs);
                     List<Class<?>> fakeParList;
-                    if (mtTgtSlotsCount + mtDASlotsCount > Helper.MAX_ARITY - 1) {
+                    if (mtTgtSlotsCount + mtDASlotsCount > super.maxArity - 1) {
                         fakeParList = TestMethods.reduceArgListToSlotsCount(mtDropArgs.parameterList(),
-                                Helper.MAX_ARITY - mtTgtSlotsCount - 1);
+                                super.maxArity - mtTgtSlotsCount - 1);
                     } else {
                         fakeParList = mtDropArgs.parameterList();
                     }
                     return MethodHandles.dropArguments(target, dropArgsPos, fakeParList);
                 }
             },
-    EXPLICIT_CAST_ARGUMENTS("explicitCastArguments") {
+    EXPLICIT_CAST_ARGUMENTS("explicitCastArguments", Helper.MAX_ARITY / 2) {
                 @Override
                 public Map<String, Object> getTestCaseData() {
                     Map<String, Object> data = new HashMap<>();
-                    int desiredArity = Helper.RNG.nextInt(Helper.MAX_ARITY / 2);
+                    int desiredArity = Helper.RNG.nextInt(super.maxArity);
                     MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity);
                     data.put("mtTarget", mtTarget);
                     // Arity after reducing because of long and double take 2 slots.
@@ -146,11 +146,11 @@
                     return MethodHandles.explicitCastArguments(target, mtExcplCastArgs);
                 }
             },
-    FILTER_ARGUMENTS("filterArguments") {
+    FILTER_ARGUMENTS("filterArguments", Helper.MAX_ARITY / 2) {
                 @Override
                 public Map<String, Object> getTestCaseData() {
                     Map<String, Object> data = new HashMap<>();
-                    int desiredArity = Helper.RNG.nextInt(Helper.MAX_ARITY / 2);
+                    int desiredArity = Helper.RNG.nextInt(super.maxArity);
                     MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity);
                     data.put("mtTarget", mtTarget);
                     // Arity after reducing because of long and double take 2 slots.
@@ -184,7 +184,7 @@
                 @Override
                 public Map<String, Object> getTestCaseData() {
                     Map<String, Object> data = new HashMap<>();
-                    int desiredArity = Helper.RNG.nextInt(Helper.MAX_ARITY);
+                    int desiredArity = Helper.RNG.nextInt(super.maxArity);
                     MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity);
                     data.put("mtTarget", mtTarget);
                     // Arity after reducing because of long and double take 2 slots.
@@ -211,7 +211,7 @@
                 @Override
                 public Map<String, Object> getTestCaseData() {
                     Map<String, Object> data = new HashMap<>();
-                    int desiredArity = Helper.RNG.nextInt(Helper.MAX_ARITY);
+                    int desiredArity = Helper.RNG.nextInt(super.maxArity);
                     MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity);
                     data.put("mtTarget", mtTarget);
                     // Arity after reducing because of long and double take 2 slots.
@@ -236,18 +236,18 @@
                     return MethodHandles.insertArguments(target, insertArgsPos, insertList);
                 }
             },
-    PERMUTE_ARGUMENTS("permuteArguments") {
+    PERMUTE_ARGUMENTS("permuteArguments", Helper.MAX_ARITY / 2) {
                 @Override
                 public Map<String, Object> getTestCaseData() {
                     Map<String, Object> data = new HashMap<>();
-                    int desiredArity = Helper.RNG.nextInt(Helper.MAX_ARITY / 2);
+                    int desiredArity = Helper.RNG.nextInt(super.maxArity);
                     MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity);
                     // Arity after reducing because of long and double take 2 slots.
                     int realArity = mtTarget.parameterCount();
                     int[] permuteArgsReorderArray = new int[realArity];
-                    int mtParmuteArgsNum = Helper.RNG.nextInt(Helper.MAX_ARITY);
-                    mtParmuteArgsNum = mtParmuteArgsNum == 0 ? 1 : mtParmuteArgsNum;
-                    MethodType mtPermuteArgs = TestMethods.randomMethodTypeGenerator(mtParmuteArgsNum);
+                    int mtPermuteArgsNum = Helper.RNG.nextInt(Helper.MAX_ARITY);
+                    mtPermuteArgsNum = mtPermuteArgsNum == 0 ? 1 : mtPermuteArgsNum;
+                    MethodType mtPermuteArgs = TestMethods.randomMethodTypeGenerator(mtPermuteArgsNum);
                     mtTarget = mtTarget.changeReturnType(mtPermuteArgs.returnType());
                     for (int i = 0; i < realArity; i++) {
                         int mtPermuteArgsParNum = Helper.RNG.nextInt(mtPermuteArgs.parameterCount());
@@ -275,7 +275,7 @@
                 @Override
                 public Map<String, Object> getTestCaseData() {
                     Map<String, Object> data = new HashMap<>();
-                    int desiredArity = Helper.RNG.nextInt(Helper.MAX_ARITY);
+                    int desiredArity = Helper.RNG.nextInt(super.maxArity);
                     MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity);
                     data.put("mtTarget", mtTarget);
                     return data;
@@ -293,7 +293,7 @@
                 @Override
                 public Map<String, Object> getTestCaseData() {
                     Map<String, Object> data = new HashMap<>();
-                    int desiredArity = Helper.RNG.nextInt(Helper.MAX_ARITY);
+                    int desiredArity = Helper.RNG.nextInt(super.maxArity);
                     MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity);
                     data.put("mtTarget", mtTarget);
                     // Arity after reducing because of long and double take 2 slots.
@@ -329,7 +329,7 @@
                 @Override
                 public Map<String, Object> getTestCaseData() {
                     Map<String, Object> data = new HashMap<>();
-                    int desiredArity = Helper.RNG.nextInt(Helper.MAX_ARITY);
+                    int desiredArity = Helper.RNG.nextInt(super.maxArity);
                     MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity);
                     data.put("mtTarget", mtTarget);
                     // Arity after reducing because of long and double take 2 slots.
@@ -359,11 +359,11 @@
                     return MethodHandles.catchException(target, Exception.class, handler);
                 }
             },
-    INVOKER("invoker") {
+    INVOKER("invoker", Helper.MAX_ARITY - 1) {
                 @Override
                 public Map<String, Object> getTestCaseData() {
                     Map<String, Object> data = new HashMap<>();
-                    int desiredArity = Helper.RNG.nextInt(Helper.MAX_ARITY);
+                    int desiredArity = Helper.RNG.nextInt(super.maxArity);
                     MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity);
                     data.put("mtTarget", mtTarget);
                     return data;
@@ -375,11 +375,11 @@
                     return MethodHandles.invoker(mtTarget);
                 }
             },
-    EXACT_INVOKER("exactInvoker") {
+    EXACT_INVOKER("exactInvoker", Helper.MAX_ARITY - 1) {
                 @Override
                 public Map<String, Object> getTestCaseData() {
                     Map<String, Object> data = new HashMap<>();
-                    int desiredArity = Helper.RNG.nextInt(Helper.MAX_ARITY);
+                    int desiredArity = Helper.RNG.nextInt(super.maxArity);
                     MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity);
                     data.put("mtTarget", mtTarget);
                     return data;
@@ -391,11 +391,11 @@
                     return MethodHandles.exactInvoker(mtTarget);
                 }
             },
-    SPREAD_INVOKER("spreadInvoker") {
+    SPREAD_INVOKER("spreadInvoker", Helper.MAX_ARITY - 1) {
                 @Override
                 public Map<String, Object> getTestCaseData() {
                     Map<String, Object> data = new HashMap<>();
-                    int desiredArity = Helper.RNG.nextInt(Helper.MAX_ARITY);
+                    int desiredArity = Helper.RNG.nextInt(super.maxArity);
                     MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity);
                     data.put("mtTarget", mtTarget);
                     // Arity after reducing because of long and double take 2 slots.
@@ -416,7 +416,7 @@
                 @Override
                 public Map<String, Object> getTestCaseData() {
                     Map<String, Object> data = new HashMap<>();
-                    int desiredArity = Helper.RNG.nextInt(Helper.MAX_ARITY);
+                    int desiredArity = Helper.RNG.nextInt(super.maxArity);
                     MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity);
                     data.put("mtTarget", mtTarget);
                     return data;
@@ -436,7 +436,7 @@
                 @Override
                 public Map<String, Object> getTestCaseData() {
                     Map<String, Object> data = new HashMap<>();
-                    int desiredArity = Helper.RNG.nextInt(Helper.MAX_ARITY);
+                    int desiredArity = Helper.RNG.nextInt(super.maxArity);
                     MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity);
                     data.put("mtTarget", mtTarget);
                     return data;
@@ -456,7 +456,7 @@
                 @Override
                 public Map<String, Object> getTestCaseData() {
                     Map<String, Object> data = new HashMap<>();
-                    int desiredArity = Helper.RNG.nextInt(Helper.MAX_ARITY);
+                    int desiredArity = Helper.RNG.nextInt(super.maxArity);
                     MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity);
                     data.put("mtTarget", mtTarget);
                     return data;
@@ -481,7 +481,7 @@
                 @Override
                 public Map<String, Object> getTestCaseData() {
                     Map<String, Object> data = new HashMap<>();
-                    int desiredArity = Helper.RNG.nextInt(Helper.MAX_ARITY);
+                    int desiredArity = Helper.RNG.nextInt(super.maxArity);
                     MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity);
                     data.put("mtTarget", mtTarget);
                     return data;
@@ -503,8 +503,15 @@
      */
     public final String name;
 
+    private final int maxArity;
+
+    private TestMethods(String name, int maxArity) {
+        this.name = name;
+        this.maxArity = maxArity;
+    }
+
     private TestMethods(String name) {
-        this.name = name;
+        this(name, Helper.MAX_ARITY);
     }
 
     protected MethodHandle getMH(Map<String, Object> data, TestMethods.Kind kind) throws NoSuchMethodException, IllegalAccessException {
--- a/test/java/net/InetAddress/IPv4Formats.java	Fri Oct 10 15:52:52 2014 +0100
+++ b/test/java/net/InetAddress/IPv4Formats.java	Tue Nov 04 17:20:19 2014 +0000
@@ -27,6 +27,7 @@
  * @summary InetAddress.getByName behaves differently on windows
  */
 import java.net.*;
+import java.util.UUID;
 
 public class IPv4Formats {
     public static void main(String[] args) {
@@ -36,7 +37,7 @@
             {"126.1", "126.0.0.1"},
             {"128.50.65534", "128.50.255.254"},
             {"192.168.1.2", "192.168.1.2"},
-            {"hello.foo.bar", null},
+            {"invalidhost.invalid", null},
             {"1024.1.2.3", null},
             {"128.14.66000", null }
         };
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/java/net/ResponseCache/Test2.java	Tue Nov 04 17:20:19 2014 +0000
@@ -0,0 +1,135 @@
+/*
+ * Copyright (c) 2014, 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 8042622
+ * @summary Check for CRL results in IllegalArgumentException "white space not allowed"
+ * @run main/othervm Test2
+ */
+
+import com.sun.net.httpserver.*;
+
+import java.util.*;
+import java.util.concurrent.*;
+import java.io.*;
+import java.net.*;
+import java.security.*;
+import javax.security.auth.callback.*;
+import javax.net.ssl.*;
+
+public class Test2 {
+
+    static volatile boolean failed = false;
+
+    static class Cache extends ResponseCache {
+        public CacheResponse get(URI uri, String method, Map<String,List<String>> headers) {
+            Set<String> keys = headers.keySet();
+            for (String key : keys) {
+                if (key.indexOf(' ') != -1 || key.indexOf('\t') != -1
+                        || key.indexOf(':') != -1)
+                {
+                    failed = true;
+                }
+            }
+            return null;
+        }
+
+        public CacheRequest put(URI uri, URLConnection c) throws IOException {
+            return null;
+        }
+    }
+
+    static int port;
+
+    static String urlstring, redirstring;
+
+    public static void main (String[] args) throws Exception {
+        Handler handler = new Handler();
+        InetSocketAddress addr = new InetSocketAddress (0);
+        HttpServer server = HttpServer.create (addr, 0);
+        port = server.getAddress().getPort();
+        HttpContext ctx = server.createContext ("/test", handler);
+        System.out.println ("Server: " + server.getAddress().getPort());
+        ResponseCache.setDefault(new Cache());
+
+        ExecutorService executor = Executors.newCachedThreadPool();
+        server.setExecutor (executor);
+        server.start ();
+
+        urlstring = "http://127.0.0.1:" + Integer.toString(port)+"/test/foo";
+        redirstring = urlstring + "/redirect/bar";
+
+        URL url = new URL (urlstring);
+        HttpURLConnection urlc = (HttpURLConnection)url.openConnection();
+        urlc.addRequestProperty("X-Foo", "bar");
+        urlc.setInstanceFollowRedirects(true);
+        System.out.println(urlc.getResponseCode());
+        InputStream i = urlc.getInputStream();
+        int count=0;
+        for (int c=i.read(); c!=-1; c=i.read()) {
+            //System.out.write(c);
+            count++;
+        }
+        System.out.println("Read " + count);
+        System.out.println("FINISHED");
+        server.stop(0);
+        executor.shutdownNow();
+        if (failed) {
+            throw new RuntimeException("Test failed");
+        }
+    }
+
+    public static boolean error = false;
+    public static int count = 0;
+
+    static class Handler implements HttpHandler {
+        int invocation = 0;
+        public void handle (HttpExchange t)
+            throws IOException
+        {
+            InputStream is = t.getRequestBody();
+            Headers map = t.getRequestHeaders();
+            Headers rmap = t.getResponseHeaders();
+            invocation ++;
+            if (invocation == 1) {
+                rmap.add("Location", redirstring);
+                while (is.read () != -1) ;
+                is.close();
+                System.out.println ("sending response");
+                t.sendResponseHeaders (301, 0);
+            } else {
+                byte[] buf = "Hello world".getBytes();
+                t.sendResponseHeaders (200, buf.length);
+                OutputStream os = t.getResponseBody();
+                try {
+                        os.write(buf);
+                } catch (IOException e) {
+                        System.out.println ("EX 1 " + e);
+                }
+            }
+            System.out.println ("Closing");
+            t.close();
+        }
+    }
+}
--- a/test/java/security/cert/CertificateFactory/invalidEncodedCerts/DetectInvalidEncoding.java	Fri Oct 10 15:52:52 2014 +0100
+++ b/test/java/security/cert/CertificateFactory/invalidEncodedCerts/DetectInvalidEncoding.java	Tue Nov 04 17:20:19 2014 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2014, 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
@@ -23,27 +23,548 @@
 
 /**
  * @test
- * @bug 4776466
+ * @bug 4776466 8032573
  * @summary check that CertificateFactory rejects invalid encoded X.509 certs
  */
 
 import java.io.*;
+import java.util.Collection;
+import java.util.List;
+import java.util.LinkedList;
+import javax.security.auth.x500.X500Principal;
+import java.security.GeneralSecurityException;
 import java.security.cert.*;
 
 public class DetectInvalidEncoding {
 
+    // Originally found in the test file:
+    // java/security/cert/CertificateFactory/invalidEncodedCerts/invalidcert.pem
+    // The first character of the PEM encoding has been changed from "M" to
+    // "X" to force a failure during decoding.
+    private static final String INVALID_CERT =
+        "-----BEGIN CERTIFICATE-----\n" +
+        "XIICJjCCAdCgAwIBAgIBITANBgkqhkiG9w0BAQQFADCBqTELMAkGA1UEBhMCVVMx\n" +
+        "EzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBGcmFuY2lzY28xFTAT\n" +
+        "BgNVBAoTDEJFQSBXZWJMb2dpYzERMA8GA1UECxMIU2VjdXJpdHkxIzAhBgNVBAMT\n" +
+        "GkRlbW8gQ2VydGlmaWNhdGUgQXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9zdXBw\n" +
+        "b3J0QGJlYS5jb20wHhcNMDAwNTMwMjEzODAxWhcNMDQwNTEzMjEzODAxWjCBjDEL\n" +
+        "MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG\n" +
+        "cmFuY2lzY28xFTATBgNVBAoTDEJFQSBXZWJMb2dpYzEZMBcGA1UEAxMQd2VibG9n\n" +
+        "aWMuYmVhLmNvbTEeMBwGCSqGSIb3DQEJARYPc3VwcG9ydEBiZWEuY29tMFwwDQYJ\n" +
+        "KoZIhvcNAQEBBQADSwAwSAJBALdsXEHqKHgs6zj0hU5sXMAUHzoT8kgWXmNkKHXH\n" +
+        "79qbPh6EfdlriW9G/AbRF/pKrCQu7hhllAxREbqTuSlf2EMCAwEAATANBgkqhkiG\n" +
+        "9w0BAQQFAANBACgmqflL5m5LNeJGpWx9aIoABCiuDcpw1fFyegsqGX7CBhffcruS\n" +
+        "1p8h5vkHVbMu1frD1UgGnPlOO/K7Ig/KrsU=\n" +
+        "-----END CERTIFICATE-----";
+
+    // Created with keytool:
+    // keytool -genkeypair -keyalg rsa -keysize 2048 -keystore <KS_FILE>
+    //      -alias root -sigalg SHA256withRSA -dname "CN=Root, O=SomeCompany"
+    //      -validity 730 -ext bc:critical=ca:true
+    //      -ext ku:critical=keyCertSign,cRLSign
+    private static final String SINGLE_ROOT_CERT =
+        "-----BEGIN CERTIFICATE-----\n" +
+        "MIIDCjCCAfKgAwIBAgIEDUiw+DANBgkqhkiG9w0BAQsFADAlMRQwEgYDVQQKEwtT\n" +
+        "b21lQ29tcGFueTENMAsGA1UEAxMEUm9vdDAeFw0xNDA4MjgyMTI5MjZaFw0xNjA4\n" +
+        "MjcyMTI5MjZaMCUxFDASBgNVBAoTC1NvbWVDb21wYW55MQ0wCwYDVQQDEwRSb290\n" +
+        "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0VFecSNdH6CJhPOSG127\n" +
+        "tuvld4y7GGJ0kQf3Q0b8qgprsXAmn0/bQR+YX7PfS408cFW+q2SWXeY2kC/3chvi\n" +
+        "2syMsGdUJrDzuMbYsbvKPKyuJ2GJskX3mSbLMJj5Tzhg4qmwbzDTFIJ51yGa1Wmh\n" +
+        "i2+4PhltqT0TohvSVJlBrOWNhmvwv5UWsF4e2i04rebDZQoWkmD3MpImZXF/HYre\n" +
+        "9P8NP97vN0xZmh5PySHy2ILXN3ZhTn3tq0YxNSQTaMUfhgoyzWFvZKAnm/tZIh/1\n" +
+        "oswwEQPIZJ25AUTm9r3YPQXl1hsNdLU0asEVYRsgzGSTX5gCuUY+KzhStzisOcUY\n" +
+        "uQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNV\n" +
+        "HQ4EFgQUz1FBNixG/KCgcn6FOWzxP1hujG0wDQYJKoZIhvcNAQELBQADggEBAL60\n" +
+        "ZaNc6eIMbKntGVE/pdxxyKwPdDyAAeEevX23KRWoLbQjHXo5jrfDPhI5k45ztlyU\n" +
+        "+tIQbc81LlCl88I4dIx0fvEbxjNaAYhFNXwwSQBs2CuEAdRK8hodXbRcEeI+G10F\n" +
+        "ARIVs2C7JNm/RhxskCWgj6tFIOGaTZ9gHyvlQUEM18sr5fXZlXTqspZCmz3t5XPi\n" +
+        "5/wYLv6vk7k3G8WzMHbBE0bYI+61cCc8rbMHldtymbwSwiqfKC9y7oPEfRCbzVUe\n" +
+        "fgrKcOyVWDuw0y0hhsQL/oONjPp4uK/bl9B7T84t4+ihxdocWKx6eyhFvOvZH9t2\n" +
+        "kUylb9yBUYStwGExMHg=\n" +
+        "-----END CERTIFICATE-----";
+
+    // Created with keytool:
+    // keytool -genkeypair -keyalg rsa -keysize 2048 -keystore <KS_FILE>
+    //      -alias root -sigalg SHA256withRSA
+    //      -dname "CN=Intermed, O=SomeCompany" -validity 730
+    //      -ext bc:critical=ca:true -ext ku:critical=keyCertSign,cRLSign
+    // keytool -certreq -keystore <KS_FILE> -sigalg SHA256withRSA
+    //      -alias intermed -dname "CN=Intermed, O=SomeCompany"
+    // keytool -gencert -keystore <KS_FILE> -alias intermed
+    //      -sigalg SHA256withRSA -validity 730
+    //      -ext bc:critical=ca:true -ext ku:critical=keyCertSign,cRLSign
+    private static final String INTERMED_CA_CERT =
+        "-----BEGIN CERTIFICATE-----\n" +
+        "MIIDLzCCAhegAwIBAgIEIIgOyDANBgkqhkiG9w0BAQsFADAlMRQwEgYDVQQKEwtT\n" +
+        "b21lQ29tcGFueTENMAsGA1UEAxMEUm9vdDAeFw0xNDA4MjgyMjUyNDJaFw0xNjA4\n" +
+        "MDcyMjUyNDJaMCkxFDASBgNVBAoTC1NvbWVDb21wYW55MREwDwYDVQQDEwhJbnRl\n" +
+        "cm1lZDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJEecvTWla8kdWx+\n" +
+        "HHu5ryfBpJ95I7V4MEajnmzJVZcwvKhDjlDgABDMuVwFEUUSyeOdbWJF3DLKnyMD\n" +
+        "KTx6/58kuVak3NX2TJ8cmmIlKf1upFbdrEtjYViSnNrApprfO8B3ORdBbO6QDYza\n" +
+        "IkAWdI5GllFnVkb4yhMUBg3zfhglF+bl3D3lVRlp9bCrUZoNRs+mZjhVbcMn22ej\n" +
+        "TfG5Y3VpNM4SN8dFIxPQLLk/aao+cmWEQdbQ0R6ydemRukqrw170olSVLeoGGala\n" +
+        "3D4oJckde8EgNPcghcsdQ6tpGhkpFhmoyzEsuToR7Gq9UT5V2kkqJneiKXqQg4wz\n" +
+        "vMAlUGECAwEAAaNjMGEwHwYDVR0jBBgwFoAUOw+92bevFoJz96pR1DrAkPPUKb0w\n" +
+        "DwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFLbnErBs\n" +
+        "q/Mhci5XElfjjLZp3GRyMA0GCSqGSIb3DQEBCwUAA4IBAQAq8y2DpkSV31IXZ1vr\n" +
+        "/Ye+Nj/2NvBydFeHVRGMAN1LJv6/Q42TCSXbr6cDQ4NWQUtPm90yZBYJSznkbShx\n" +
+        "HOJEE6R8PRJvoUtMm7fJrNtkybTt6jX4j50Lw8gdYB/rgZb4z8ZQZVEo/0zpW4HV\n" +
+        "Gs+q4z8TkdmLR18hl39sUEsxt99AOBk8NtKKVNfBWq9b0QDhRkXfmqhyeXdDsHOV\n" +
+        "8ksulsa7hseheHhdjziEOpQugh8qzSea2kFPrLB53VjWfa4qDzEPaNhahho9piCu\n" +
+        "82XDnOrcEk9KyHWM7sa7vtK7++W+0MXD/p9nkZ6NHrJXweLriU0DXO6ZY3mzNKJK\n" +
+        "435M\n" +
+        "-----END CERTIFICATE-----";
+
+    // Subordinate cert created using keytool, both certs exported to
+    // files individually, then use openssl to place in a PKCS#7:
+    // openssl crl2pkcs7 -nocrl -certfile <INTERMED-CERT-PEM>
+    //      -certfile <ROOT-CERT-PEM> -out <P7-DEST-PEM-FILE>
+    private static final String PKCS7_INTERMED_ROOT_CERTS =
+        "-----BEGIN PKCS7-----\n" +
+        "MIIGbgYJKoZIhvcNAQcCoIIGXzCCBlsCAQExADALBgkqhkiG9w0BBwGgggZBMIID\n" +
+        "LzCCAhegAwIBAgIEIIgOyDANBgkqhkiG9w0BAQsFADAlMRQwEgYDVQQKEwtTb21l\n" +
+        "Q29tcGFueTENMAsGA1UEAxMEUm9vdDAeFw0xNDA4MjgyMjUyNDJaFw0xNjA4MDcy\n" +
+        "MjUyNDJaMCkxFDASBgNVBAoTC1NvbWVDb21wYW55MREwDwYDVQQDEwhJbnRlcm1l\n" +
+        "ZDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJEecvTWla8kdWx+HHu5\n" +
+        "ryfBpJ95I7V4MEajnmzJVZcwvKhDjlDgABDMuVwFEUUSyeOdbWJF3DLKnyMDKTx6\n" +
+        "/58kuVak3NX2TJ8cmmIlKf1upFbdrEtjYViSnNrApprfO8B3ORdBbO6QDYzaIkAW\n" +
+        "dI5GllFnVkb4yhMUBg3zfhglF+bl3D3lVRlp9bCrUZoNRs+mZjhVbcMn22ejTfG5\n" +
+        "Y3VpNM4SN8dFIxPQLLk/aao+cmWEQdbQ0R6ydemRukqrw170olSVLeoGGala3D4o\n" +
+        "Jckde8EgNPcghcsdQ6tpGhkpFhmoyzEsuToR7Gq9UT5V2kkqJneiKXqQg4wzvMAl\n" +
+        "UGECAwEAAaNjMGEwHwYDVR0jBBgwFoAUOw+92bevFoJz96pR1DrAkPPUKb0wDwYD\n" +
+        "VR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFLbnErBsq/Mh\n" +
+        "ci5XElfjjLZp3GRyMA0GCSqGSIb3DQEBCwUAA4IBAQAq8y2DpkSV31IXZ1vr/Ye+\n" +
+        "Nj/2NvBydFeHVRGMAN1LJv6/Q42TCSXbr6cDQ4NWQUtPm90yZBYJSznkbShxHOJE\n" +
+        "E6R8PRJvoUtMm7fJrNtkybTt6jX4j50Lw8gdYB/rgZb4z8ZQZVEo/0zpW4HVGs+q\n" +
+        "4z8TkdmLR18hl39sUEsxt99AOBk8NtKKVNfBWq9b0QDhRkXfmqhyeXdDsHOV8ksu\n" +
+        "lsa7hseheHhdjziEOpQugh8qzSea2kFPrLB53VjWfa4qDzEPaNhahho9piCu82XD\n" +
+        "nOrcEk9KyHWM7sa7vtK7++W+0MXD/p9nkZ6NHrJXweLriU0DXO6ZY3mzNKJK435M\n" +
+        "MIIDCjCCAfKgAwIBAgIEdffjKTANBgkqhkiG9w0BAQsFADAlMRQwEgYDVQQKEwtT\n" +
+        "b21lQ29tcGFueTENMAsGA1UEAxMEUm9vdDAeFw0xNDA4MjgyMjQ2MzZaFw0xNjA4\n" +
+        "MjcyMjQ2MzZaMCUxFDASBgNVBAoTC1NvbWVDb21wYW55MQ0wCwYDVQQDEwRSb290\n" +
+        "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAhnXc8Avv54Gk2xjVa2yA\n" +
+        "lBL/Cug1nyvKl5wqmN+foT6cMOX6bneCkJOJ4lSbch3gvl4ctlX/9hm3pB/+HhSr\n" +
+        "em2NcLQrLEq8l9Ar4RnqfoXQR4Uy+4P6wj9OcVV7e/v/+ZPnStOoEAtb5nAwsR2b\n" +
+        "hOC/tIFNwflrsmsmtMSoOiNftpYLFF4eOAdpDrXYMrqNu6ZxZsOQ7WZl4SsVOx1N\n" +
+        "/IINXwBLyoHJDzLZ0iJEV0O6mh846s0n6QXeK1P5d0uLcoZaZ1k8Q4sRcdoLA6rS\n" +
+        "e1WffipBFMvIuoDIigkHZIKVYRLG828rO+PFnRah0ybybkVsN6s3oLxfhswZDvut\n" +
+        "OwIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNV\n" +
+        "HQ4EFgQUOw+92bevFoJz96pR1DrAkPPUKb0wDQYJKoZIhvcNAQELBQADggEBACBN\n" +
+        "wEaV70FKKBINHtNwesd7TB6fgSaVgDZOO08aseHbXnm7AUhtDV3P5rQR2AsKtbg4\n" +
+        "COhlKw2/Ki18D4DfdCccFKFTRZBjqj2PxNmn6C68l1/bT4PuUXuM7rW++53RcOA7\n" +
+        "TbgLuzA25kSz7XinRvR8L4VwHtppu5tSYEthMIMgLZLGGV9r7kBfpY8lXdxQM8vb\n" +
+        "xZUIysasvVtVUFPOTV6g2dfn8QCoqLOmxyzTLdXe4M6acP6f7lmhgr3LMqDtB6K9\n" +
+        "pN+OImr77zNdZ+jTB+5e9a8gAvc5ZfG7Nk5RfwUatYTAFZ6Uggy2cKmIRpXCia18\n" +
+        "If78mc7goS1+lHkGCs2hADEA\n" +
+        "-----END PKCS7-----";
+
+    // Empty PKCS#7 in DER form can be created with openssl:
+    // openssl crl2pkcs7 -nocrl -outform DER
+    private static final byte[] PKCS7_BER_EMPTY = {
+          48,   39,    6,    9,   42, -122,   72, -122,
+          -9,   13,    1,    7,    2,  -96,   26,   48,
+          24,    2,    1,    1,   49,    0,   48,   11,
+           6,    9,   42, -122,   72, -122,   -9,   13,
+           1,    7,    1,  -96,    0,  -95,    0,   49,
+           0
+    };
+
+    private static final String JTEST_ROOT_CRL =
+        "-----BEGIN X509 CRL-----\n" +
+        "MIICoTCBigIBATANBgkqhkiG9w0BAQsFADA1MQ4wDAYDVQQKEwVKVGVzdDELMAkG\n" +
+        "A1UECxMCSVQxFjAUBgNVBAMTDUpUZXN0IFJvb3QgQ0EXDTE0MDkwNDE4NDIyMVqg\n" +
+        "MDAuMB8GA1UdIwQYMBaAFO6bllCV6kctH77MfqAtefNeRdsmMAsGA1UdFAQEAgIA\n" +
+        "jjANBgkqhkiG9w0BAQsFAAOCAgEAmp8ihtiRthknDC+VzehmlQw5u8MftMZYQYk5\n" +
+        "EI04SwyzY9JTL8QHb4u7fXjnZAyN89aYPypI5OSyDsyyGP/JDNsBt2Um/fl0aaCl\n" +
+        "Z4Np6x+dB9+oIU1XY7y2+uyQUC5MHivQ5ddbGPoAvK/msbugTGAjHvZpM+l0okiV\n" +
+        "3SofDrii5BSosFEkXfkf2oG9ZLO3YamsFMEZaOj/eWDyGhTyJMGsq2/8NeTF21Tp\n" +
+        "YkeDcTHqR5KHoYXjOIaS7NjmErm+uDpKH9Lq+JUcYrbUhmjnq5z04EsPF2F2L7Vb\n" +
+        "THI+awQAUQit16lXGuz7fFRZi2vPyiaRP5n2QT5D+ac1dAs+oWLDJw6Tf2v9KVTe\n" +
+        "OmW62yd6zQqCwBg+n57UcNu3sv/Sq3t7iRuN0AmWlIhu659POPQv7Np6bEo6dIpp\n" +
+        "u7Ze6D2KPtM177ETHYlCx2a3g9VEZYKrVhQ2749St0Cp5szVq691jFZAWYOzcfEO\n" +
+        "XfK1y25pmlBjvhNIIVRlU+T5rjNb8GaleYKVYnKOcv700K32QxFzcPf7nbNKwW99\n" +
+        "tcaNHFNP+LW/XP8I3CJ8toXLLcOITKVwMA+0GlO5eL7eX5POc+vE9+7IzGuybmU4\n" +
+        "uslxoLdJ0NSZWpYmf6a6qrJ67cj5i3706H+eBsWQcShfSYreh+TyWQaGk+fkEiUV\n" +
+        "iy4QdJ0=\n" +
+        "-----END X509 CRL-----";
+
+    private static final String JTEST_INTERMED_CRL =
+        "-----BEGIN X509 CRL-----\n" +
+        "MIICzzCBuAIBATANBgkqhkiG9w0BAQsFADA/MQ4wDAYDVQQKEwVKVGVzdDELMAkG\n" +
+        "A1UECxMCSVQxIDAeBgNVBAMTF0pUZXN0IEludGVybWVkaWF0ZSBDQSAxFw0xNDA5\n" +
+        "MDQyMjE2NTRaMCIwIAIBBhcNMTQwOTA0MjIxNjU0WjAMMAoGA1UdFQQDCgEFoDAw\n" +
+        "LjAfBgNVHSMEGDAWgBSvRdjbkSMJ3A7s5H6EWghQ+lkw/zALBgNVHRQEBAICAJsw\n" +
+        "DQYJKoZIhvcNAQELBQADggIBALJmikMwil8oywhenoO8o9xxCOIU0xrt3KdfiSXw\n" +
+        "8MtQXZHT9d1C6tlLAsYkWAfmfTvM2OU6wquFCLLsFmDZszbbCqmn4JhYBSKQMqlm\n" +
+        "IHnsiOFPvITW2FU08fWNLM+FtQzPnTFmx/CJo+wfGpq5tZMIbsccsCJ5uvZVAWGh\n" +
+        "0KbPmYcJG/O384+kzr/2H2IaoZoMMABec5c5FEF/tpp8jawzY+0VFyaVrumKWdan\n" +
+        "+3OvRQxT1wLxfNi2vdxB2rmNPo423qanXZAoVv260um3LYlmXBNK1jwQ9lp78jkT\n" +
+        "B7zMVa4hOUWVxdWc/LE6fUYgPsNqZd+hWy/PolIRp5TS21B5hkc5K87LT59GkexK\n" +
+        "vNVKQennOLGtH+Q7htK4UeY4Gm/W7UydOQ0k7hZzyfMDkCfLfNfK0l63qKwUku36\n" +
+        "UdeI1LXqulPEvb/d7rRAAM9p5Sm+RsECj2bcrZBMdIGXcSo26A5tzZpTEC79i4S1\n" +
+        "yxYIooeBnouUkDJ9+VBsJTSKY5fpU8JSkQPRyHKt+trGAkBt2Ka5MqrHtITzQ1vP\n" +
+        "5q4tNr45JGEXllH83NlBpWURfsdtkDHa3lxTD/pkrywOCyzz7wQ22D8Kul7EN8nT\n" +
+        "7LDbN+O3G9GHICxvWlJHp6HMsqGTuH1MIUR+5uZFOJa1S0IzorUIEieLncDUPgzO\n" +
+        "M4JA\n" +
+        "-----END X509 CRL-----";
+
+    // PKCS#7 CRL Set containing JTEST root and intermediate CRLs
+    private static final String PKCS7_CRL_SET =
+        "-----BEGIN PKCS7-----\n" +
+        "MIIFpQYJKoZIhvcNAQcCoIIFljCCBZICAQExADALBgkqhkiG9w0BBwGgAKGCBXgw\n" +
+        "ggKhMIGKAgEBMA0GCSqGSIb3DQEBCwUAMDUxDjAMBgNVBAoTBUpUZXN0MQswCQYD\n" +
+        "VQQLEwJJVDEWMBQGA1UEAxMNSlRlc3QgUm9vdCBDQRcNMTQwOTA0MTg0MjIxWqAw\n" +
+        "MC4wHwYDVR0jBBgwFoAU7puWUJXqRy0fvsx+oC15815F2yYwCwYDVR0UBAQCAgCO\n" +
+        "MA0GCSqGSIb3DQEBCwUAA4ICAQCanyKG2JG2GScML5XN6GaVDDm7wx+0xlhBiTkQ\n" +
+        "jThLDLNj0lMvxAdvi7t9eOdkDI3z1pg/Kkjk5LIOzLIY/8kM2wG3ZSb9+XRpoKVn\n" +
+        "g2nrH50H36ghTVdjvLb67JBQLkweK9Dl11sY+gC8r+axu6BMYCMe9mkz6XSiSJXd\n" +
+        "Kh8OuKLkFKiwUSRd+R/agb1ks7dhqawUwRlo6P95YPIaFPIkwayrb/w15MXbVOli\n" +
+        "R4NxMepHkoehheM4hpLs2OYSub64Okof0ur4lRxittSGaOernPTgSw8XYXYvtVtM\n" +
+        "cj5rBABRCK3XqVca7Pt8VFmLa8/KJpE/mfZBPkP5pzV0Cz6hYsMnDpN/a/0pVN46\n" +
+        "ZbrbJ3rNCoLAGD6fntRw27ey/9Kre3uJG43QCZaUiG7rn0849C/s2npsSjp0imm7\n" +
+        "tl7oPYo+0zXvsRMdiULHZreD1URlgqtWFDbvj1K3QKnmzNWrr3WMVkBZg7Nx8Q5d\n" +
+        "8rXLbmmaUGO+E0ghVGVT5PmuM1vwZqV5gpVico5y/vTQrfZDEXNw9/uds0rBb321\n" +
+        "xo0cU0/4tb9c/wjcIny2hcstw4hMpXAwD7QaU7l4vt5fk85z68T37sjMa7JuZTi6\n" +
+        "yXGgt0nQ1JlaliZ/prqqsnrtyPmLfvTof54GxZBxKF9Jit6H5PJZBoaT5+QSJRWL\n" +
+        "LhB0nTCCAs8wgbgCAQEwDQYJKoZIhvcNAQELBQAwPzEOMAwGA1UEChMFSlRlc3Qx\n" +
+        "CzAJBgNVBAsTAklUMSAwHgYDVQQDExdKVGVzdCBJbnRlcm1lZGlhdGUgQ0EgMRcN\n" +
+        "MTQwOTA0MjIxNjU0WjAiMCACAQYXDTE0MDkwNDIyMTY1NFowDDAKBgNVHRUEAwoB\n" +
+        "BaAwMC4wHwYDVR0jBBgwFoAUr0XY25EjCdwO7OR+hFoIUPpZMP8wCwYDVR0UBAQC\n" +
+        "AgCbMA0GCSqGSIb3DQEBCwUAA4ICAQCyZopDMIpfKMsIXp6DvKPccQjiFNMa7dyn\n" +
+        "X4kl8PDLUF2R0/XdQurZSwLGJFgH5n07zNjlOsKrhQiy7BZg2bM22wqpp+CYWAUi\n" +
+        "kDKpZiB57IjhT7yE1thVNPH1jSzPhbUMz50xZsfwiaPsHxqaubWTCG7HHLAiebr2\n" +
+        "VQFhodCmz5mHCRvzt/OPpM6/9h9iGqGaDDAAXnOXORRBf7aafI2sM2PtFRcmla7p\n" +
+        "ilnWp/tzr0UMU9cC8XzYtr3cQdq5jT6ONt6mp12QKFb9utLpty2JZlwTStY8EPZa\n" +
+        "e/I5Ewe8zFWuITlFlcXVnPyxOn1GID7DamXfoVsvz6JSEaeU0ttQeYZHOSvOy0+f\n" +
+        "RpHsSrzVSkHp5zixrR/kO4bSuFHmOBpv1u1MnTkNJO4Wc8nzA5Any3zXytJet6is\n" +
+        "FJLt+lHXiNS16rpTxL2/3e60QADPaeUpvkbBAo9m3K2QTHSBl3EqNugObc2aUxAu\n" +
+        "/YuEtcsWCKKHgZ6LlJAyfflQbCU0imOX6VPCUpED0chyrfraxgJAbdimuTKqx7SE\n" +
+        "80Nbz+auLTa+OSRhF5ZR/NzZQaVlEX7HbZAx2t5cUw/6ZK8sDgss8+8ENtg/Crpe\n" +
+        "xDfJ0+yw2zfjtxvRhyAsb1pSR6ehzLKhk7h9TCFEfubmRTiWtUtCM6K1CBIni53A\n" +
+        "1D4MzjOCQDEA\n" +
+        "-----END PKCS7-----";
+
     public static void main(String[] args) throws Exception {
         CertificateFactory cf = CertificateFactory.getInstance("X.509");
-        File f = new File
-            (System.getProperty("test.src", "."), "invalidcert.pem");
-        InputStream inStream = new FileInputStream(f);
-        try {
-            X509Certificate cert =
-                (X509Certificate) cf.generateCertificate(inStream);
-        } catch (CertificateParsingException ce) {
-            return;
+        List<DecodeTest> validTests = new LinkedList<>();
+        List<DecodeTest> invalidTests = new LinkedList<>();
+
+        // Load up positive test cases (for sanity checks)
+        StringBuilder sb = new StringBuilder();
+
+        validTests.add(new GenMultiCertTest("Single, valid certificate",
+                    SINGLE_ROOT_CERT.getBytes(), null,
+                    new X500Principal("CN=Root, O=SomeCompany")));
+        validTests.add(new GenMultiCertTest("PEM-encoded PKCS#7 chain",
+                    PKCS7_INTERMED_ROOT_CERTS.getBytes(), null,
+                    new X500Principal("CN=Intermed, O=SomeCompany"),
+                    new X500Principal("CN=Root, O=SomeCompany")));
+        validTests.add(new GenMultiCertTest("Two PEM-encoded X509 certs",
+                    (INTERMED_CA_CERT + "\n" + SINGLE_ROOT_CERT).getBytes(),
+                    null,
+                    new X500Principal("CN=Intermed, O=SomeCompany"),
+                    new X500Principal("CN=Root, O=SomeCompany")));
+        validTests.add(new GenMultiCertTest("Empty data", new byte[0], null));
+
+        sb.append("Certificate 1: CN=Root, O=SomeCompany\n");
+        sb.append(SINGLE_ROOT_CERT).append("\n");
+        sb.append("Certificate 2: CN=Intermed, O=SomeCompany\n");
+        sb.append(INTERMED_CA_CERT).append("\n");
+        sb.append("Extra trailing data\n");
+        validTests.add(new GenMultiCertTest(
+                    "Two PEM-encoded certs with leading/trailing " +
+                    "text data around each.", sb.toString().getBytes(), null,
+                    new X500Principal("CN=Root, O=SomeCompany"),
+                    new X500Principal("CN=Intermed, O=SomeCompany")));
+        validTests.add(new GenMultiCertTest(
+                    "BER-encoded PKCS#7 with empty certificates segment",
+                    PKCS7_BER_EMPTY, null));
+        validTests.add(new GenMultiCRLTest(
+                    "CRL with leading and trailing text data",
+                    ("This is a CRL\n" + JTEST_ROOT_CRL +
+                     "\nSee? Told you so\n\n").getBytes(), null,
+                    new X500Principal("CN=JTest Root CA,OU=IT,O=JTest")));
+        validTests.add(new GenMultiCRLTest(
+                    "Two CRLs, one after the other with leading/trailing text",
+                    ("This is a CRL\n" + JTEST_ROOT_CRL +
+                     "\nAnd this is another CRL\n" + JTEST_INTERMED_CRL +
+                     "\nAnd this is trailing text\n").getBytes(), null,
+                    new X500Principal("CN=JTest Root CA,OU=IT,O=JTest"),
+                    new X500Principal(
+                        "CN=JTest Intermediate CA 1,OU=IT,O=JTest")));
+        validTests.add(new GenMultiCRLTest("Two CRLs in a PKCS#7 CRL set",
+                PKCS7_CRL_SET.getBytes(), null,
+                new X500Principal("CN=JTest Root CA,OU=IT,O=JTest"),
+                new X500Principal("CN=JTest Intermediate CA 1,OU=IT,O=JTest")));
+
+        // Load up all test cases where we expect failures
+        invalidTests.add(new GenSingleCertTest("Invalid PEM encoding",
+                    INVALID_CERT.getBytes(),
+                    new CertificateParsingException()));
+        invalidTests.add(new GenMultiCertTest("Invalid PEM encoding",
+                    INVALID_CERT.getBytes(),
+                    new CertificateParsingException()));
+        invalidTests.add(new GenMultiCertTest(
+                    "Two cert sequence, one valid and one invalid",
+                    (INTERMED_CA_CERT + "\n" + INVALID_CERT).getBytes(),
+                    new CertificateParsingException()));
+        invalidTests.add(new GenMultiCertTest("Non-certificate text",
+                    "This is not a certificate".getBytes(),
+                    new CertificateException()));
+        invalidTests.add(new GenMultiCertTest(
+                    "Non-certificate text with partial PEM header (4 hyphens)",
+                    "----This is not a valid x509 certificate".getBytes(),
+                    new CertificateException()));
+        invalidTests.add(new GenMultiCertTest(
+                    "Leading non-certificate text plus valid PEM header, " +
+                    "but not on new line",
+                    "This is not valid -----BEGIN CERTIFICATE-----".getBytes(),
+                    new CertificateException()));
+        byte[] emptyCString = {0};
+        invalidTests.add(new GenMultiCertTest("Empty C-style string",
+                    emptyCString, new CertificateException()));
+        invalidTests.add(new GenMultiCRLTest("Non-CRL text",
+                    "This is not a CRL".getBytes(), new CRLException()));
+        invalidTests.add(new GenMultiCRLTest("Valid headers, but not a CRL",
+                    INTERMED_CA_CERT.getBytes(), new CRLException()));
+
+        System.out.println("===== Valid Tests =====");
+        for (DecodeTest dt : validTests) {
+            dt.passTest();
+        }
+        System.out.print("\n");
+
+        System.out.println("===== Invalid Tests =====");
+        for (DecodeTest dt : invalidTests) {
+            dt.failTest();
+        }
+    }
+
+    public static abstract class DecodeTest {
+        protected String testName;
+        protected byte[] testData;
+        protected Throwable expectedException;
+        protected X500Principal[] principals;
+        protected CertificateFactory cf;
+
+        /**
+         * Construct a DecodeTest
+         *
+         * @param name The test name
+         * @param input A byte array consisting of the input for this test
+         * @param failType An exception whose class should match the expected
+         *        exception that will be thrown when this test is run
+         * @param princs Zero of more X500Principals which will be used
+         *        to compare the output in a success case.
+         */
+        DecodeTest(String name, byte[] input, Throwable failType,
+                X500Principal... princs) throws CertificateException {
+            testName = name;
+            testData = input.clone();
+            expectedException = failType;
+            principals = princs;
+            cf = CertificateFactory.getInstance("X.509");
+        }
+
+        public abstract void passTest() throws GeneralSecurityException;
+
+        public abstract void failTest() throws GeneralSecurityException;
+    }
+
+    public static class GenMultiCertTest extends DecodeTest {
+        public GenMultiCertTest(String name, byte[] input, Throwable failType,
+                X500Principal... princs) throws CertificateException {
+            super(name, input, failType, princs);
+        }
+
+        @Override
+        public void passTest() throws GeneralSecurityException {
+            Collection<? extends Certificate> certs;
+
+            System.out.println("generateCertificates(): " + testName);
+            certs = cf.generateCertificates(new ByteArrayInputStream(testData));
+
+            // Walk the certs Collection and do a comparison of subject names
+            int i = 0;
+            if (certs.size() == principals.length) {
+                for (Certificate crt : certs) {
+                    X509Certificate xc = (X509Certificate)crt;
+                    if (!xc.getSubjectX500Principal().equals(
+                                principals[i])) {
+                        throw new RuntimeException("Name mismatch: " +
+                                "cert: " + xc.getSubjectX500Principal() +
+                                ", expected: " + principals[i]);
+                    }
+                    i++;
+                }
+            } else {
+                throw new RuntimeException("Size mismatch: certs = " +
+                        certs.size() + ", expected = " +
+                        principals.length);
+            }
         }
-        throw new Exception("CertificateFactory.generateCertificate() did not "
-            + "throw CertificateParsingException on invalid X.509 cert data");
+
+        @Override
+        public void failTest() throws GeneralSecurityException {
+            Throwable caughtException = null;
+            Collection<? extends Certificate> certs = null;
+
+            System.out.println("generateCertificates(): " + testName);
+            if (expectedException == null) {
+                throw new RuntimeException("failTest requires non-null " +
+                        "expectedException");
+            }
+
+            try {
+                certs =
+                    cf.generateCertificates(new ByteArrayInputStream(testData));
+            } catch (CertificateException ce) {
+                caughtException = ce;
+            }
+
+            if (caughtException != null) {
+                // It has to be the right kind of exception though...
+                if (!caughtException.getClass().equals(
+                        expectedException.getClass())) {
+                    System.err.println("Unexpected exception thrown. " +
+                            "Received: " + caughtException + ", Expected: " +
+                            expectedException.getClass());
+                    throw new RuntimeException(caughtException);
+                }
+            } else {
+                // For a failure test, we'd expect some kind of exception
+                // to be thrown.
+                throw new RuntimeException("Failed to catch expected " +
+                        "exception " + expectedException.getClass());
+            }
+        }
+    }
+
+    public static class GenSingleCertTest extends DecodeTest {
+        public GenSingleCertTest(String name, byte[] input, Throwable failType,
+                X500Principal... princs) throws CertificateException {
+            super(name, input, failType, princs);
+        }
+
+        @Override
+        public void passTest() throws GeneralSecurityException {
+            X509Certificate cert;
+
+            System.out.println("generateCertificate(): " + testName);
+            cert = (X509Certificate)cf.generateCertificate(
+                    new ByteArrayInputStream(testData));
+
+            // Compare the cert's subject name against the expected value
+            // provided in the test.  If multiple X500Principals were provided
+            // just use the first one as the expected value.
+            if (!cert.getSubjectX500Principal().equals(principals[0])) {
+                throw new RuntimeException("Name mismatch: " +
+                        "cert: " + cert.getSubjectX500Principal() +
+                        ", expected: " + principals[0]);
+            }
+        }
+
+        @Override
+        public void failTest() throws GeneralSecurityException {
+            Throwable caughtException = null;
+            X509Certificate cert = null;
+            System.out.println("generateCertificate(): " + testName);
+
+            if (expectedException == null) {
+                throw new RuntimeException("failTest requires non-null " +
+                        "expectedException");
+            }
+
+            try {
+                cert = (X509Certificate)cf.generateCertificate(
+                        new ByteArrayInputStream(testData));
+            } catch (CertificateException e) {
+                caughtException = e;
+            }
+
+            if (caughtException != null) {
+                // It has to be the right kind of exception though...
+                if (!caughtException.getClass().equals(
+                        expectedException.getClass())) {
+                    System.err.println("Unexpected exception thrown. " +
+                            "Received: " + caughtException + ", Expected: " +
+                            expectedException.getClass());
+                    throw new RuntimeException(caughtException);
+                }
+            } else {
+                // For a failure test, we'd expect some kind of exception
+                // to be thrown.
+                throw new RuntimeException("Failed to catch expected " +
+                        "exception " + expectedException.getClass());
+            }
+        }
+    }
+
+    public static class GenMultiCRLTest extends DecodeTest {
+        public GenMultiCRLTest(String name, byte[] input, Throwable failType,
+                X500Principal... princs) throws CertificateException {
+            super(name, input, failType, princs);
+        }
+
+        @Override
+        public void passTest() throws GeneralSecurityException {
+            Collection<? extends CRL> crls;
+
+            System.out.println("generateCRLs(): " + testName);
+            crls = cf.generateCRLs(new ByteArrayInputStream(testData));
+
+            // Walk the crls Collection and do a comparison of issuer names
+            int i = 0;
+            if (crls.size() == principals.length) {
+                for (CRL revlist : crls) {
+                    X509CRL xc = (X509CRL)revlist;
+                    if (!xc.getIssuerX500Principal().equals(principals[i])) {
+                        throw new RuntimeException("Name mismatch: " +
+                                "CRL: " + xc.getIssuerX500Principal() +
+                                ", expected: " + principals[i]);
+                    }
+                    i++;
+                }
+            } else {
+                throw new RuntimeException("Size mismatch: crls = " +
+                        crls.size() + ", expected = " +
+                        principals.length);
+            }
+        }
+
+        @Override
+        public void failTest() throws GeneralSecurityException {
+            Throwable caughtException = null;
+            Collection<? extends CRL> crls = null;
+
+            System.out.println("generateCRLs(): " + testName);
+            if (expectedException == null) {
+                throw new RuntimeException("failTest requires non-null " +
+                        "expectedException");
+            }
+
+            try {
+                crls =
+                    cf.generateCRLs(new ByteArrayInputStream(testData));
+            } catch (CRLException e) {
+                caughtException = e;
+            }
+
+            if (caughtException != null) {
+                // It has to be the right kind of exception though...
+                if (!caughtException.getClass().equals(
+                        expectedException.getClass())) {
+                    System.err.println("Unexpected exception thrown. " +
+                            "Received: " + caughtException + ", Expected: " +
+                            expectedException.getClass());
+                    throw new RuntimeException(caughtException);
+                }
+            } else {
+                // For a failure test, we'd expect some kind of exception
+                // to be thrown.
+                throw new RuntimeException("Failed to catch expected " +
+                        "exception " + expectedException.getClass());
+            }
+        }
     }
 }
--- a/test/java/security/cert/CertificateFactory/invalidEncodedCerts/invalidcert.pem	Fri Oct 10 15:52:52 2014 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,14 +0,0 @@
------BEGIN CERTIFICATE-----
-XIICJjCCAdCgAwIBAgIBITANBgkqhkiG9w0BAQQFADCBqTELMAkGA1UEBhMCVVMx
-EzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBGcmFuY2lzY28xFTAT
-BgNVBAoTDEJFQSBXZWJMb2dpYzERMA8GA1UECxMIU2VjdXJpdHkxIzAhBgNVBAMT
-GkRlbW8gQ2VydGlmaWNhdGUgQXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9zdXBw
-b3J0QGJlYS5jb20wHhcNMDAwNTMwMjEzODAxWhcNMDQwNTEzMjEzODAxWjCBjDEL
-MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
-cmFuY2lzY28xFTATBgNVBAoTDEJFQSBXZWJMb2dpYzEZMBcGA1UEAxMQd2VibG9n
-aWMuYmVhLmNvbTEeMBwGCSqGSIb3DQEJARYPc3VwcG9ydEBiZWEuY29tMFwwDQYJ
-KoZIhvcNAQEBBQADSwAwSAJBALdsXEHqKHgs6zj0hU5sXMAUHzoT8kgWXmNkKHXH
-79qbPh6EfdlriW9G/AbRF/pKrCQu7hhllAxREbqTuSlf2EMCAwEAATANBgkqhkiG
-9w0BAQQFAANBACgmqflL5m5LNeJGpWx9aIoABCiuDcpw1fFyegsqGX7CBhffcruS
-1p8h5vkHVbMu1frD1UgGnPlOO/K7Ig/KrsU=
------END CERTIFICATE-----
--- a/test/java/text/Format/DecimalFormat/TieRoundingTest.java	Fri Oct 10 15:52:52 2014 +0100
+++ b/test/java/text/Format/DecimalFormat/TieRoundingTest.java	Tue Nov 04 17:20:19 2014 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2014, 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
@@ -23,7 +23,7 @@
 
 /* @test
  *
- * @bug 7131459
+ * @bug 7131459 8039915
  * @summary test various situations of NumberFormat rounding when close to tie
  * @author Olivier Lagneau
  * @run main TieRoundingTest
@@ -56,7 +56,7 @@
         if (!result.equals(expectedOutput)) {
             System.out.println();
             System.out.println("========================================");
-            System.out.println("***Error formatting double value from string : " +
+            System.out.println("***Failure : error formatting value from string : " +
                                inputDigits);
             System.out.println("NumberFormat pattern is  : " +
                                ((DecimalFormat ) nf).toPattern());
@@ -103,7 +103,7 @@
         if (!result.equals(expectedOutput)) {
             System.out.println();
             System.out.println("========================================");
-            System.out.println("***Error formatting double value from string : " +
+            System.out.println("***Failure : error formatting value from string : " +
                                inputDigits);
             System.out.println("NumberFormat pattern is  : " +
                                ((DecimalFormat ) nf).toPattern());
@@ -144,7 +144,7 @@
         if (!result.equals(expectedOutput)) {
             System.out.println();
             System.out.println("========================================");
-            System.out.println("***Error formatting number value from string : " +
+            System.out.println("***Failure : error formatting value from string : " +
                                inputDigits);
             System.out.println("NumberFormat pattern is  : " +
                                ((DecimalFormat ) nf).toPattern());
@@ -174,7 +174,7 @@
 
     public static void main(String[] args) {
 
-        // Only the 3 rounding modes below may be impacted by bug 7131459.
+        // The 3 HALF_* rounding modes are impacted by bugs 7131459, 8039915.
         // So we do not test the other rounding modes.
         RoundingMode[] roundingModes = {
             RoundingMode.HALF_DOWN,
@@ -183,10 +183,14 @@
         };
 
         // Precise the relative position of input value against its closest tie.
+        // The double values tested below for 3 and 5 fractional digits must follow
+        // this scheme (position toward tie).
         String[] tieRelativePositions = {
             "below", "exact", "above",
             "below", "exact", "above",
             "below", "exact", "above",
+            "below", "above", "above",
+            "below", "below", "above",
             "below", "exact", "above"
         };
 
@@ -196,9 +200,13 @@
         double[] values3FractDigits = {
             // unimpacting values close to tie, with less than 3 input fract digits
             1.115d, 1.125d, 1.135d,
-            // impacting close to tie values covering all 6 cases
+            // HALF_* impacting close to tie values covering all 6 tie cases
             0.3115d, 0.3125d, 0.3135d,
             0.6865d, 0.6875d, 0.6885d,
+            // specific HALF_UP close to tie values
+            0.3124d, 0.3126d, 0.3128d,
+            // specific HALF_DOWN close to tie values
+            0.6864d, 0.6865d, 0.6868d,
             // unimpacting values close to tie, with more than 3 input fract digits
             1.46885d, 2.46875d, 1.46865d
         };
@@ -207,6 +215,8 @@
             "1.115d", "1.125d", "1.135d",
             "0.3115d", "0.3125d", "0.3135d",
             "0.6865d", "0.6875d", "0.6885d",
+            "0.3124d", "0.3126d", "0.3128d",
+            "0.6864d", "0.6865d", "0.6868d",
             "1.46885d", "2.46875d", "1.46865d"
         };
 
@@ -214,16 +224,22 @@
             {"1.115", "1.125", "1.135",
              "0.311", "0.312", "0.314",
              "0.686", "0.687", "0.689",
+             "0.312", "0.313", "0.313",
+             "0.686", "0.686", "0.687",
              "1.469", "2.469", "1.469"
             },
             {"1.115", "1.125", "1.135",
              "0.311", "0.312", "0.314",
              "0.686", "0.688", "0.689",
+             "0.312", "0.313", "0.313",
+             "0.686", "0.686", "0.687",
              "1.469", "2.469", "1.469"
             },
             {"1.115", "1.125", "1.135",
              "0.311", "0.313", "0.314",
              "0.686", "0.688", "0.689",
+             "0.312", "0.313", "0.313",
+             "0.686", "0.686", "0.687",
              "1.469", "2.469", "1.469"
             },
         };
@@ -250,9 +266,13 @@
         double[] values5FractDigits = {
             // unimpacting values close to tie, with less than 5 input fract digits
             1.3135d, 1.3125d, 1.3115d,
-            // impacting values close to tie, covering all 6 cases
+            // HALF_* impacting values close to tie, covering all 6 cases
             1.328115d, 1.328125d, 1.328135d,
             1.796865d, 1.796875d, 1.796885d,
+            // specific HALF_UP close to tie values
+            1.328124d, 1.798876d, 1.796889d,
+            // specific HALF_DOWN close to tie values
+            1.328114d, 1.796865d, 1.328138d,
             // unimpacting values close to tie, with more than 5 input fract digits
             1.3281149999999d, 1.75390625d, 1.7968750000001d
         };
@@ -261,6 +281,8 @@
             "1.3135d", "1.3125d", "1.3115d",
             "1.328115d", "1.328125d", "1.328135d",
             "1.796865d", "1.796875d", "1.796885d",
+            "1.328124d", "1.798876d", "1.796889d",
+            "1.328114d", "1.796865d", "1.328138d",
             "1.3281149999999d", "1.75390625d", "1.7968750000001d"
         };
 
@@ -268,16 +290,22 @@
             {"1.3135", "1.3125", "1.3115",
              "1.32811", "1.32812", "1.32814",
              "1.79686", "1.79687", "1.79689",
+             "1.32812", "1.79888", "1.79689",
+             "1.32811", "1.79686", "1.32814",
              "1.32811", "1.75391", "1.79688"
             },
             {"1.3135", "1.3125", "1.3115",
              "1.32811", "1.32812", "1.32814",
              "1.79686", "1.79688", "1.79689",
+             "1.32812", "1.79888", "1.79689",
+             "1.32811", "1.79686", "1.32814",
              "1.32811", "1.75391", "1.79688"
             },
             {"1.3135", "1.3125", "1.3115",
              "1.32811", "1.32813", "1.32814",
              "1.79686", "1.79688", "1.79689",
+             "1.32812", "1.79888", "1.79689",
+             "1.32811", "1.79686", "1.32814",
              "1.32811", "1.75391", "1.79688"
             }
         };
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/java/util/logging/FileHandlerPath.java	Tue Nov 04 17:20:19 2014 +0000
@@ -0,0 +1,315 @@
+/*
+ * Copyright (c) 2014, 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.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.FilePermission;
+import java.io.IOException;
+import java.nio.channels.FileChannel;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import static java.nio.file.StandardOpenOption.CREATE_NEW;
+import static java.nio.file.StandardOpenOption.WRITE;
+import java.security.CodeSource;
+import java.security.Permission;
+import java.security.PermissionCollection;
+import java.security.Permissions;
+import java.security.Policy;
+import java.security.ProtectionDomain;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Enumeration;
+import java.util.List;
+import java.util.Properties;
+import java.util.PropertyPermission;
+import java.util.UUID;
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.logging.FileHandler;
+import java.util.logging.LogManager;
+import java.util.logging.LoggingPermission;
+
+/**
+ * @test
+ * @bug 8059269
+ * @summary tests that using a simple (non composite) pattern does not lead
+ *        to NPE when the lock file already exists.
+ * @run main/othervm FileHandlerPath UNSECURE
+ * @run main/othervm FileHandlerPath SECURE
+ * @author danielfuchs
+ */
+public class FileHandlerPath {
+
+    /**
+     * We will test the simple pattern in two configurations.
+     * UNSECURE: No security manager.
+     * SECURE: With the security manager present - and the required
+     *         permissions granted.
+     */
+    public static enum TestCase {
+        UNSECURE, SECURE;
+        public void run(Properties propertyFile) throws Exception {
+            System.out.println("Running test case: " + name());
+            Configure.setUp(this, propertyFile);
+            test(this.name() + " " + propertyFile.getProperty("test.name"), propertyFile);
+        }
+    }
+
+
+    // Use a random name provided by UUID to avoid collision with other tests
+    final static String logFile = FileHandlerPath.class.getSimpleName() + "_"
+                + UUID.randomUUID().toString() + ".log";
+    final static String tmpLogFile;
+    final static String userDir = System.getProperty("user.dir");
+    final static String tmpDir = System.getProperty("java.io.tmpdir");
+    private static final List<Properties> properties;
+    static {
+        tmpLogFile = new File(tmpDir, logFile).toString();
+        Properties props1 = new Properties();
+        Properties props2 = new Properties();
+        props1.setProperty("test.name", "relative file");
+        props1.setProperty("test.file.name", logFile);
+        props1.setProperty(FileHandler.class.getName() + ".pattern", logFile);
+        props1.setProperty(FileHandler.class.getName() + ".count", "1");
+        props2.setProperty("test.name", "absoluste file");
+        props2.setProperty("test.file.name", tmpLogFile);
+        props2.setProperty(FileHandler.class.getName() + ".pattern", "%t/" + logFile);
+        props2.setProperty(FileHandler.class.getName() + ".count", "1");
+        properties = Collections.unmodifiableList(Arrays.asList(
+                    props1,
+                    props2));
+    }
+
+    public static void main(String... args) throws Exception {
+
+        if (args == null || args.length == 0) {
+            args = new String[] {
+                TestCase.UNSECURE.name(),
+                TestCase.SECURE.name(),
+            };
+        }
+
+        // Sanity checks
+
+        if (!Files.isWritable(Paths.get(userDir))) {
+            throw new RuntimeException(userDir +
+                    ": user.dir is not writable - can't run test.");
+        }
+        if (!Files.isWritable(Paths.get(tmpDir))) {
+            throw new RuntimeException(tmpDir +
+                    ": java.io.tmpdir is not writable - can't run test.");
+        }
+
+        File[] files = {
+            new File(logFile),
+            new File(tmpLogFile),
+            new File(logFile+".1"),
+            new File(tmpLogFile+".1"),
+            new File(logFile+".lck"),
+            new File(tmpLogFile+".lck"),
+            new File(logFile+".1.lck"),
+            new File(tmpLogFile+".1.lck")
+        };
+
+        for (File log : files) {
+            if (log.exists()) {
+                throw new Exception(log +": file already exists - can't run test.");
+            }
+        }
+
+        // Now start the real test
+
+        try {
+            for (String testName : args) {
+                for (Properties propertyFile : properties) {
+                    TestCase test = TestCase.valueOf(testName);
+                    test.run(propertyFile);
+                }
+            }
+        } finally {
+            // Cleanup...
+            Configure.doPrivileged(() -> {
+                for(File log : files) {
+                    try {
+                        final boolean isLockFile = log.getName().endsWith(".lck");
+                        // lock file should already be deleted, except if the
+                        // test failed in exception.
+                        // log file should all be present, except if the test
+                        // failed in exception.
+                        if (log.exists()) {
+                            if (!isLockFile) {
+                                System.out.println("deleting "+log.toString());
+                            } else {
+                                System.err.println("deleting lock file "+log.toString());
+                            }
+                            log.delete();
+                        } else {
+                            if (!isLockFile) {
+                                System.err.println(log.toString() + ": not found.");
+                            }
+                        }
+                    } catch (Throwable t) {
+                        // should not happen
+                        t.printStackTrace();
+                    }
+                }
+            });
+        }
+    }
+
+    static class Configure {
+        static Policy policy = null;
+        static final AtomicBoolean allowAll = new AtomicBoolean(false);
+        static void setUp(TestCase test, Properties propertyFile) {
+            switch (test) {
+                case SECURE:
+                    if (policy == null && System.getSecurityManager() != null) {
+                        throw new IllegalStateException("SecurityManager already set");
+                    } else if (policy == null) {
+                        policy = new SimplePolicy(TestCase.SECURE, allowAll);
+                        Policy.setPolicy(policy);
+                        System.setSecurityManager(new SecurityManager());
+                    }
+                    if (System.getSecurityManager() == null) {
+                        throw new IllegalStateException("No SecurityManager.");
+                    }
+                    if (policy == null) {
+                        throw new IllegalStateException("policy not configured");
+                    }
+                    break;
+                case UNSECURE:
+                    if (System.getSecurityManager() != null) {
+                        throw new IllegalStateException("SecurityManager already set");
+                    }
+                    break;
+                default:
+                    new InternalError("No such testcase: " + test);
+            }
+            doPrivileged(() -> {
+                try {
+                    ByteArrayOutputStream bytes = new ByteArrayOutputStream();
+                    propertyFile.store(bytes, propertyFile.getProperty("test.name"));
+                    ByteArrayInputStream bais = new ByteArrayInputStream(bytes.toByteArray());
+                    LogManager.getLogManager().readConfiguration(bais);
+                } catch (IOException ex) {
+                    throw new RuntimeException(ex);
+                }
+            });
+        }
+        static void doPrivileged(Runnable run) {
+            allowAll.set(true);
+            try {
+                run.run();
+            } finally {
+                allowAll.set(false);
+            }
+        }
+    }
+
+    public static void test(String name, Properties props) throws Exception {
+        System.out.println("Testing: " + name);
+        String file = props.getProperty("test.file.name");
+        // create the lock files first - in order to take the path that
+        // used to trigger the NPE
+        Files.createFile(Paths.get(file + ".lck"));
+        Files.createFile(Paths.get(file + ".1.lck"));
+        final FileHandler f1 = new FileHandler();
+        final FileHandler f2 = new FileHandler();
+        f1.close();
+        f2.close();
+        System.out.println("Success for " + name);
+    }
+
+
+    final static class PermissionsBuilder {
+        final Permissions perms;
+        public PermissionsBuilder() {
+            this(new Permissions());
+        }
+        public PermissionsBuilder(Permissions perms) {
+            this.perms = perms;
+        }
+        public PermissionsBuilder add(Permission p) {
+            perms.add(p);
+            return this;
+        }
+        public PermissionsBuilder addAll(PermissionCollection col) {
+            if (col != null) {
+                for (Enumeration<Permission> e = col.elements(); e.hasMoreElements(); ) {
+                    perms.add(e.nextElement());
+                }
+            }
+            return this;
+        }
+        public Permissions toPermissions() {
+            final PermissionsBuilder builder = new PermissionsBuilder();
+            builder.addAll(perms);
+            return builder.perms;
+        }
+    }
+
+    public static class SimplePolicy extends Policy {
+
+        final Permissions permissions;
+        final Permissions allPermissions;
+        final AtomicBoolean allowAll;
+        public SimplePolicy(TestCase test, AtomicBoolean allowAll) {
+            this.allowAll = allowAll;
+            permissions = new Permissions();
+            permissions.add(new LoggingPermission("control", null)); // needed by new FileHandler()
+            permissions.add(new FilePermission("<<ALL FILES>>", "read")); // needed by new FileHandler()
+            permissions.add(new FilePermission(logFile, "write,delete")); // needed by new FileHandler()
+            permissions.add(new FilePermission(logFile+".lck", "write,delete")); // needed by FileHandler.close()
+            permissions.add(new FilePermission(logFile+".1", "write,delete")); // needed by new FileHandler()
+            permissions.add(new FilePermission(logFile+".1.lck", "write,delete")); // needed by FileHandler.close()
+            permissions.add(new FilePermission(tmpLogFile, "write,delete")); // needed by new FileHandler()
+            permissions.add(new FilePermission(tmpLogFile+".lck", "write,delete")); // needed by FileHandler.close()
+            permissions.add(new FilePermission(tmpLogFile+".1", "write,delete")); // needed by new FileHandler()
+            permissions.add(new FilePermission(tmpLogFile+".1.lck", "write,delete")); // needed by FileHandler.close()
+            permissions.add(new FilePermission(userDir, "write")); // needed by new FileHandler()
+            permissions.add(new FilePermission(tmpDir, "write")); // needed by new FileHandler()
+            permissions.add(new PropertyPermission("user.dir", "read"));
+            permissions.add(new PropertyPermission("java.io.tmpdir", "read"));
+            allPermissions = new Permissions();
+            allPermissions.add(new java.security.AllPermission());
+        }
+
+        @Override
+        public boolean implies(ProtectionDomain domain, Permission permission) {
+            if (allowAll.get()) return allPermissions.implies(permission);
+            return permissions.implies(permission);
+        }
+
+        @Override
+        public PermissionCollection getPermissions(CodeSource codesource) {
+            return new PermissionsBuilder().addAll(allowAll.get()
+                    ? allPermissions : permissions).toPermissions();
+        }
+
+        @Override
+        public PermissionCollection getPermissions(ProtectionDomain domain) {
+            return new PermissionsBuilder().addAll(allowAll.get()
+                    ? allPermissions : permissions).toPermissions();
+        }
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/javax/swing/JRadioButton/8033699/bug8033699.java	Tue Nov 04 17:20:19 2014 +0000
@@ -0,0 +1,255 @@
+/*
+ * Copyright (c) 2014, 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
+ * @library ../../regtesthelpers
+ * @build Util
+ * @bug 8033699
+ * @summary  Incorrect radio button behavior when pressing tab key
+ * @author Vivi An
+ * @run main bug8033699
+ */
+
+import javax.swing.*;
+import javax.swing.event.*;
+import java.awt.event.*;
+import java.awt.*;
+import sun.awt.SunToolkit;
+
+public class bug8033699 {
+    private static Robot robot;
+    private static SunToolkit toolkit;
+
+    private static JButton btnStart;
+    private static ButtonGroup btnGrp;
+    private static JButton btnEnd;
+    private static JButton btnMiddle;
+    private static JRadioButton radioBtn1;
+    private static JRadioButton radioBtn2;
+    private static JRadioButton radioBtn3;
+    private static JRadioButton radioBtnSingle;
+
+    public static void main(String args[]) throws Throwable {
+        SwingUtilities.invokeAndWait(new Runnable() {
+            public void run() {
+                createAndShowGUI();
+            }
+        });
+
+        robot = new Robot();
+        Thread.sleep(100);
+
+        robot.setAutoDelay(100);
+        toolkit = (SunToolkit) Toolkit.getDefaultToolkit();
+
+        // tab key test grouped radio button
+        runTest1();
+
+        // tab key test non-grouped radio button
+        runTest2();
+
+        // shift tab key test grouped and non grouped radio button
+        runTest3();
+
+        // left/up key test in grouped radio button
+        runTest4();
+
+        // down/right key test in grouped radio button
+        runTest5();
+
+        // tab from radio button in group to next component in the middle of button group layout
+        runTest6();
+
+        // tab to radio button in group from component in the middle of button group layout
+        runTest7();
+
+        // down key circle back to first button in grouped radio button
+        runTest8();
+    }
+
+    private static void createAndShowGUI() {
+        JFrame mainFrame = new JFrame("Bug 8033699 - 8 Tests for Grouped/Non Group Radio Buttons");
+
+        btnStart = new JButton("Start");
+        btnEnd = new JButton("End");
+        btnMiddle = new JButton("Middle");
+
+        JPanel box = new JPanel();
+        box.setLayout(new BoxLayout(box, BoxLayout.Y_AXIS));
+        box.setBorder(BorderFactory.createTitledBorder("Grouped Radio Buttons"));
+        radioBtn1 = new JRadioButton("A");
+        radioBtn2 = new JRadioButton("B");
+        radioBtn3 = new JRadioButton("C");
+
+        ButtonGroup btnGrp = new ButtonGroup();
+        btnGrp.add(radioBtn1);
+        btnGrp.add(radioBtn2);
+        btnGrp.add(radioBtn3);
+        radioBtn1.setSelected(true);
+
+        box.add(radioBtn1);
+        box.add(radioBtn2);
+        box.add(btnMiddle);
+        box.add(radioBtn3);
+
+        radioBtnSingle = new JRadioButton("Not Grouped");
+        radioBtnSingle.setSelected(true);
+
+        mainFrame.getContentPane().add(btnStart);
+        mainFrame.getContentPane().add(box);
+        mainFrame.getContentPane().add(radioBtnSingle);
+        mainFrame.getContentPane().add(btnEnd);
+
+        mainFrame.getRootPane().setDefaultButton(btnStart);
+        btnStart.requestFocus();
+
+        mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+        mainFrame.setLayout(new BoxLayout(mainFrame.getContentPane(), BoxLayout.Y_AXIS));
+
+        mainFrame.setSize(300, 300);
+        mainFrame.setLocation(200, 200);
+        mainFrame.setVisible(true);
+        mainFrame.toFront();
+    }
+
+    // Radio button Group as a single component when traversing through tab key
+    private static void runTest1() throws Exception{
+        hitKey(robot, KeyEvent.VK_TAB);
+        hitKey(robot, KeyEvent.VK_TAB);
+
+        SwingUtilities.invokeAndWait(new Runnable() {
+            public void run() {
+                if (KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner() != radioBtnSingle) {
+                    System.out.println("Radio Button Group Go To Next Component through Tab Key failed");
+                    throw new RuntimeException("Focus is not on Radio Button Single as Expected");
+                }
+            }
+        });
+    }
+
+    // Non-Grouped Radio button as a single component when traversing through tab key
+    private static void runTest2() throws Exception{
+        hitKey(robot, KeyEvent.VK_TAB);
+        SwingUtilities.invokeAndWait(new Runnable() {
+            public void run() {
+                if (KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner() != btnEnd) {
+                    System.out.println("Non Grouped Radio Button Go To Next Component through Tab Key failed");
+                    throw new RuntimeException("Focus is not on Button End as Expected");
+                }
+            }
+        });
+    }
+
+    // Non-Grouped Radio button and Group Radio button as a single component when traversing through shift-tab key
+    private static void runTest3() throws Exception{
+        hitKey(robot, KeyEvent.VK_SHIFT, KeyEvent.VK_TAB);
+        hitKey(robot, KeyEvent.VK_SHIFT, KeyEvent.VK_TAB);
+        SwingUtilities.invokeAndWait(new Runnable() {
+            public void run() {
+                if (KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner() != radioBtn3) {
+                    System.out.println("Radio button Group/Non Grouped Radio Button SHIFT-Tab Key Test failed");
+                    throw new RuntimeException("Focus is not on Radio Button C as Expected");
+                }
+            }
+        });
+    }
+
+    // Using arrow key to move focus in radio button group
+    private static void runTest4() throws Exception{
+        hitKey(robot, KeyEvent.VK_UP);
+        hitKey(robot, KeyEvent.VK_LEFT);
+        SwingUtilities.invokeAndWait(new Runnable() {
+            public void run() {
+                if (KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner() != radioBtn1) {
+                    System.out.println("Radio button Group UP/LEFT Arrow Key Move Focus Failed");
+                    throw new RuntimeException("Focus is not on Radio Button A as Expected");
+                }
+            }
+        });
+    }
+
+    private static void runTest5() throws Exception{
+        hitKey(robot, KeyEvent.VK_DOWN);
+        hitKey(robot, KeyEvent.VK_RIGHT);
+        SwingUtilities.invokeAndWait(new Runnable() {
+            public void run() {
+                if (KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner() != radioBtn3) {
+                    System.out.println("Radio button Group Left/Up Arrow Key Move Focus Failed");
+                    throw new RuntimeException("Focus is not on Radio Button C as Expected");
+                }
+            }
+        });
+    }
+
+    private static void runTest6() throws Exception{
+        hitKey(robot, KeyEvent.VK_DOWN);
+        hitKey(robot, KeyEvent.VK_DOWN);
+        SwingUtilities.invokeAndWait(new Runnable() {
+            public void run() {
+                if (KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner() != radioBtn2) {
+                    System.out.println("Radio button Group Circle Back To First Button Test");
+                    throw new RuntimeException("Focus is not on Radio Button A as Expected");
+                }
+            }
+        });
+    }
+
+    private static void runTest7() throws Exception{
+        hitKey(robot, KeyEvent.VK_TAB);
+        SwingUtilities.invokeAndWait(new Runnable() {
+            public void run() {
+                if (KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner() != btnMiddle) {
+                    System.out.println("Separate Component added in button group layout");
+                    throw new RuntimeException("Focus is not on Middle Button as Expected");
+                }
+            }
+        });
+    }
+
+    private static void runTest8() throws Exception{
+        hitKey(robot, KeyEvent.VK_TAB);
+        SwingUtilities.invokeAndWait(new Runnable() {
+            public void run() {
+                if (KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner() != radioBtn3) {
+                    System.out.println("Separate Component added in button group layout");
+                    throw new RuntimeException("Focus is not on Radio Button C as Expected");
+                }
+            }
+        });
+    }
+
+    private static void hitKey(Robot robot, int keycode) {
+        robot.keyPress(keycode);
+        robot.keyRelease(keycode);
+        toolkit.realSync();
+    }
+
+    private static void hitKey(Robot robot, int mode, int keycode) {
+        robot.keyPress(mode);
+        robot.keyPress(keycode);
+        robot.keyRelease(mode);
+        robot.keyRelease(keycode);
+        toolkit.realSync();
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/javax/swing/JTabbedPane/7170310/bug7170310.java	Tue Nov 04 17:20:19 2014 +0000
@@ -0,0 +1,124 @@
+/*
+ * Copyright (c) 2014, 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.awt.Component;
+import java.awt.Dimension;
+import java.awt.Rectangle;
+import java.awt.Toolkit;
+import javax.swing.JComponent;
+import javax.swing.JFrame;
+import javax.swing.JPanel;
+import javax.swing.JTabbedPane;
+import javax.swing.JViewport;
+import javax.swing.SwingUtilities;
+import javax.swing.UIManager;
+import javax.swing.plaf.metal.MetalLookAndFeel;
+
+import sun.awt.SunToolkit;
+
+/**
+ * @test
+ * @bug 7170310
+ * @author Alexey Ivanov
+ * @summary Selected tab should be scrolled into view.
+ * @run main bug7170310
+ */
+public class bug7170310 {
+    private static final int TABS_NUMBER = 3;
+
+    private static volatile JTabbedPane tabbedPane;
+    private static volatile int count = 1;
+
+    private static volatile JFrame frame;
+
+    private static volatile Exception exception = null;
+
+    public static void main(String[] args) throws Exception {
+        try {
+            UIManager.setLookAndFeel(new MetalLookAndFeel());
+            SwingUtilities.invokeAndWait(bug7170310::createAndShowUI);
+
+            SunToolkit toolkit = (SunToolkit) Toolkit.getDefaultToolkit();
+            toolkit.realSync();
+
+            for (int i = 0; i < TABS_NUMBER; i++) {
+                SwingUtilities.invokeAndWait(bug7170310::addTab);
+                toolkit.realSync();
+            }
+
+            SwingUtilities.invokeAndWait(bug7170310::check);
+
+            if (exception != null) {
+                System.out.println("Test failed: " + exception.getMessage());
+                throw exception;
+            } else {
+                System.out.printf("Test passed");
+            }
+        } finally {
+            frame.dispose();
+        }
+    }
+
+    private static void createAndShowUI() {
+        frame = new JFrame("bug7170310");
+        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+        frame.setSize(200, 100);
+
+        tabbedPane = new JTabbedPane();
+        tabbedPane.addTab("Main Tab", new JPanel());
+
+        tabbedPane.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT);
+
+        frame.getContentPane().add(tabbedPane);
+        frame.setVisible(true);
+    }
+
+    private static void addTab() {
+        tabbedPane.addTab("Added Tab " + count++, new JPanel());
+        tabbedPane.setSelectedIndex(tabbedPane.getTabCount() - 1);
+    }
+
+    private static void check() {
+        try {
+            JViewport vp = null;
+            for (Component c : tabbedPane.getComponents()) {
+                if (c instanceof JViewport) {
+                    vp = (JViewport) c;
+                    break;
+                }
+            }
+
+            JComponent v = (JComponent) vp.getView();
+            Rectangle vr = vp.getViewRect();
+            Dimension vs = v.getSize();
+
+            // The tab view must be scrolled to the end so that the last tab is visible
+            if (vs.width != (vr.x + vr.width)) {
+                throw new RuntimeException("tabScroller.tabPanel view is positioned incorrectly: "
+                        + vs.width + " vs " + (vr.x + vr.width));
+            }
+        } catch (Exception e) {
+            exception = e;
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/javax/swing/text/html/HTMLDocument/8058120/bug8058120.java	Tue Nov 04 17:20:19 2014 +0000
@@ -0,0 +1,109 @@
+/*
+ * Copyright (c) 2014, 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 8058120
+ * @summary Rendering / caret errors with HTMLDocument
+ * @author Dmitry Markov
+ * @run main bug8058120
+ */
+
+import sun.awt.SunToolkit;
+
+import javax.swing.*;
+import javax.swing.text.Element;
+import javax.swing.text.html.HTML;
+import javax.swing.text.html.HTMLDocument;
+import javax.swing.text.html.HTMLEditorKit;
+import java.awt.*;
+
+public class bug8058120 {
+    private static SunToolkit toolkit = (SunToolkit) Toolkit.getDefaultToolkit();
+    private static HTMLDocument document = null;
+    private static final String text = "<p id = 'ab'>ab</p>";
+    private static final String textToInsert = "c";
+
+    public static void main(String[] args) {
+        SwingUtilities.invokeLater(new Runnable() {
+            @Override
+            public void run() {
+                createAndShowGUI();
+            }
+        });
+
+        toolkit.realSync();
+
+        SwingUtilities.invokeLater(new Runnable() {
+            @Override
+            public void run() {
+                try {
+                    document.insertAfterEnd(document.getElement("ab"), textToInsert);
+                } catch (Exception ex) {
+                    throw new RuntimeException(ex);
+                }
+            }
+        });
+
+        toolkit.realSync();
+
+        SwingUtilities.invokeLater(new Runnable() {
+            @Override
+            public void run() {
+                Element parent = document.getElement("ab").getParentElement();
+                int count = parent.getElementCount();
+                if (count != 2) {
+                    throw new RuntimeException("Test Failed! Unexpected Element count = "+count);
+                }
+                Element insertedElement = parent.getElement(count - 1);
+                if (!HTML.Tag.IMPLIED.toString().equals(insertedElement.getName())) {
+                    throw new RuntimeException("Test Failed! Inserted text is not wrapped by " + HTML.Tag.IMPLIED + " tag");
+                }
+            }
+        });
+    }
+
+    private static void createAndShowGUI() {
+        try {
+            UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");
+        } catch (Exception ex) {
+            throw new RuntimeException(ex);
+        }
+
+        JFrame frame = new JFrame("bug8058120");
+        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+
+        JEditorPane editorPane = new JEditorPane();
+        editorPane.setContentType("text/html");
+        editorPane.setEditorKit(new HTMLEditorKit());
+
+        document = (HTMLDocument) editorPane.getDocument();
+
+        editorPane.setText(text);
+
+        frame.add(editorPane);
+        frame.setSize(200, 200);
+        frame.setVisible(true);
+    }
+}
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/javax/xml/ws/xsanymixed/CopyingResponse.java	Tue Nov 04 17:20:19 2014 +0000
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2014, 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 org.somewhere.ws.EchoRequest;
+import org.somewhere.ws.EchoResponse;
+
+public class CopyingResponse extends EchoResponse {
+
+    public CopyingResponse() {}
+
+    public CopyingResponse(EchoRequest request) {
+        content = request.getContent();
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/javax/xml/ws/xsanymixed/ServiceImpl.java	Tue Nov 04 17:20:19 2014 +0000
@@ -0,0 +1,51 @@
+/*
+ * Copyright (c) 2014, 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 org.somewhere.ws.EchoRequest;
+import org.somewhere.ws.EchoResponse;
+import org.somewhere.ws.TestPort;
+
+import javax.jws.WebService;
+import javax.xml.namespace.QName;
+
+
+/**
+ * Simple Webservice implementation just copying xml part as is
+ * from incoming request into outgoing response
+ */
+@WebService(
+        endpointInterface = "org.somewhere.ws.TestPort",
+        targetNamespace = "http://ws.somewhere.org/",
+        serviceName = "TestService",
+        portName = "TestPort")
+public class ServiceImpl implements TestPort {
+
+    public static final QName PORT_NAME = new QName("http://ws.somewhere.org/", "TestPort");
+    public static final QName SERVICE_NAME = new QName("http://ws.somewhere.org/", "TestService");
+
+    @Override
+    public EchoResponse echo(EchoRequest request) {
+        return new CopyingResponse(request);
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/javax/xml/ws/xsanymixed/Test.java	Tue Nov 04 17:20:19 2014 +0000
@@ -0,0 +1,197 @@
+/*
+ * Copyright (c) 2014, 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 8036981 8038966 8051441
+ * @summary the content of xs:any content:mixed should remain as is,
+ *          no white space changes and no changes to namespace prefixes
+ * @run shell compile-wsdl.sh
+ * @run main/othervm Test
+ */
+
+import com.sun.net.httpserver.HttpServer;
+
+import javax.xml.transform.Source;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerException;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.stream.StreamResult;
+import javax.xml.transform.stream.StreamSource;
+import javax.xml.ws.Dispatch;
+import javax.xml.ws.Endpoint;
+import javax.xml.ws.Service;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.StringReader;
+import java.net.InetSocketAddress;
+import java.net.URL;
+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 static java.nio.file.FileVisitResult.CONTINUE;
+
+public class Test {
+
+    private static HttpServer httpServer;
+    private static Endpoint endpoint;
+    private static final String NL = System.getProperty("line.separator");
+
+    private static final String XS_ANY_MIXED_PART =
+            "<AppHdr xmlns=\"urn:head.001\">" + NL +
+            "      <Fr>" + NL + NL +
+            "<FIId xmlns=\"urn:head.009\">" + NL + NL +
+            "        any" + NL +
+            "    white" + NL +
+            "      space" + NL + NL +
+            "        <FinInstnId>... and" + NL + NL +
+            "            NO namespace prefixes!!!" + NL + NL +
+            "        </FinInstnId>" + NL + NL +
+            "  </FIId>" + NL +
+            "</Fr>" + NL +
+            "</AppHdr>";
+
+    private static final String XML_REQUEST = "<soap:Envelope " +
+            "xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\" " +
+            "xmlns:ws=\"http://ws.somewhere.org/\">" +
+            "<soap:Header/><soap:Body>" +
+            "<ws:echoRequest>" + NL +
+                XS_ANY_MIXED_PART + NL +
+            "</ws:echoRequest>" +
+            "</soap:Body></soap:Envelope>";
+
+    private static String deployWebservice() throws IOException {
+        // Manually create HttpServer here using ephemeral address for port
+        // so as to not end up with attempt to bind to an in-use port
+        httpServer = HttpServer.create(new InetSocketAddress(0), 0);
+        httpServer.start();
+        endpoint = Endpoint.create(new ServiceImpl());
+        endpoint.publish(httpServer.createContext("/wservice"));
+
+        String wsdlAddress = "http://localhost:" + httpServer.getAddress().getPort() + "/wservice?wsdl";
+        log("address = " + wsdlAddress);
+        return wsdlAddress;
+    }
+
+    private static void stopWebservice() {
+        if (endpoint != null && endpoint.isPublished()) {
+            endpoint.stop();
+        }
+        if (httpServer != null) {
+            httpServer.stop(0);
+        }
+    }
+
+    public static void main(String[] args) throws IOException, TransformerException {
+
+        try {
+            String address = deployWebservice();
+            Service service = Service.create(new URL(address), ServiceImpl.SERVICE_NAME);
+
+            Dispatch<Source> d = service.createDispatch(ServiceImpl.PORT_NAME, Source.class, Service.Mode.MESSAGE);
+            Source response = d.invoke(new StreamSource(new StringReader(XML_REQUEST)));
+
+            String resultXml = toString(response);
+
+            log("= request ======== \n");
+            log(XML_REQUEST);
+            log("= result ========= \n");
+            log(resultXml);
+            log("\n==================");
+
+            boolean xsAnyMixedPartSame = resultXml.contains(XS_ANY_MIXED_PART);
+            log("resultXml.contains(XS_ANY_PART) = " + xsAnyMixedPartSame);
+            if (!xsAnyMixedPartSame) {
+                fail("The xs:any content=mixed part is supposed to be same in request and response.");
+                throw new RuntimeException();
+            }
+
+            log("TEST PASSED");
+        } finally {
+            stopWebservice();
+
+            // if you need to debug or explore wsdl generation result
+            // comment this line out:
+            deleteGeneratedFiles();
+        }
+    }
+
+    private static String toString(Source response) throws TransformerException, IOException {
+        ByteArrayOutputStream bos = new ByteArrayOutputStream();
+        TransformerFactory transformerFactory = TransformerFactory.newInstance();
+        Transformer transformer = transformerFactory.newTransformer();
+        transformer.transform(response, new StreamResult(bos));
+        bos.close();
+        return new String(bos.toByteArray());
+    }
+
+    private static void fail(String message) {
+        log("TEST FAILED.");
+        throw new RuntimeException(message);
+    }
+
+    private static void log(String msg) {
+        System.out.println(msg);
+    }
+
+    private static void deleteGeneratedFiles() {
+        Path p = Paths.get("..", "classes", "javax", "xml", "ws", "xsanymixed", "org");
+        System.out.println("performing cleanup, deleting wsdl compilation result: " + p.toFile().getAbsolutePath());
+        if (Files.exists(p)) {
+            try {
+                Files.walkFileTree(p, new SimpleFileVisitor<Path>() {
+                    @Override
+                    public FileVisitResult visitFile(
+                            Path file,
+                            BasicFileAttributes attrs) throws IOException {
+
+                        System.out.println("deleting file [" + file.toFile().getAbsoluteFile() + "]");
+                        Files.delete(file);
+                        return CONTINUE;
+                    }
+
+                    @Override
+                    public FileVisitResult postVisitDirectory(
+                            Path dir,
+                            IOException exc) throws IOException {
+
+                        System.out.println("deleting dir [" + dir.toFile().getAbsoluteFile() + "]");
+                        if (exc == null) {
+                            Files.delete(dir);
+                            return CONTINUE;
+                        } else {
+                            throw exc;
+                        }
+                    }
+                });
+            } catch (IOException ioe) {
+                ioe.printStackTrace();
+            }
+        }
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/javax/xml/ws/xsanymixed/compile-wsdl.sh	Tue Nov 04 17:20:19 2014 +0000
@@ -0,0 +1,36 @@
+#! /bin/sh
+
+#
+# Copyright (c) 2014, 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.
+#
+
+#
+
+if [ "x$TESTJAVA" = x ]; then
+  TESTJAVA=$1; shift
+  TESTCLASSES=.
+fi
+
+echo "compiling [test-service.wsdl] wsdl ..."
+$TESTJAVA/bin/wsimport -keep  -d ${TESTCLASSES} ${TESTSRC}/service.wsdl
+
+echo "WSDL compiled. Main test class Test.java can be compiled now."
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/javax/xml/ws/xsanymixed/service.wsdl	Tue Nov 04 17:20:19 2014 +0000
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!--
+  Copyright (c) 2014, 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.
+-->
+<definitions xmlns="http://schemas.xmlsoap.org/wsdl/"
+             xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
+             xmlns:tns="http://ws.somewhere.org/"
+             xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+             xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata"
+             name="TestService"
+             targetNamespace="http://ws.somewhere.org/">
+
+    <types>
+        <xsd:schema targetNamespace="http://ws.somewhere.org/" version="1.0"
+                    xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://ws.somewhere.org/">
+
+            <xsd:element type="tns:echoRequest" name="echoRequest"/>
+            <xsd:element type="tns:echoResponse" name="echoResponse"/>
+
+            <xsd:complexType name="echoRequest" mixed="true">
+                <xsd:sequence>
+                    <xsd:any namespace="##any" processContents="skip" minOccurs="1" maxOccurs="10"/>
+                </xsd:sequence>
+            </xsd:complexType>
+
+            <xsd:complexType name="echoResponse" mixed="true">
+                <xsd:sequence>
+                    <xsd:any namespace="##any" processContents="skip" minOccurs="1" maxOccurs="10"/>
+                </xsd:sequence>
+            </xsd:complexType>
+        </xsd:schema>
+    </types>
+
+    <message name="echoRequest">
+        <part element="tns:echoRequest" name="parameters"/>
+    </message>
+    <message name="echoResponse">
+        <part element="tns:echoResponse" name="parameters"/>
+    </message>
+
+    <portType name="TestPort">
+        <operation name="echo">
+            <input message="tns:echoRequest" wsam:Action="http://ws.somewhere.org/tester/echoRequest"/>
+            <output message="tns:echoResponse" wsam:Action="http://ws.somewhere.org/tester/echoResponse"/>
+        </operation>
+    </portType>
+
+    <binding name="TestServicePortBinding" type="tns:TestPort">
+        <soap:binding style="document"
+                      transport="http://schemas.xmlsoap.org/soap/http"/>
+
+        <operation name="echo">
+            <soap:operation soapAction=""/>
+            <input>
+                <soap:body use="literal"/>
+            </input>
+            <output>
+                <soap:body use="literal"/>
+            </output>
+        </operation>
+    </binding>
+
+    <service name="TestService">
+        <port binding="tns:TestServicePortBinding" name="TestPort">
+            <soap:address location="http://localhost/ws/tester"/>
+        </port>
+    </service>
+</definitions>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/sun/awt/datatransfer/DataFlavorComparatorTest1.java	Tue Nov 04 17:20:19 2014 +0000
@@ -0,0 +1,115 @@
+/*
+ * Copyright (c) 2014, 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 8058473
+   @summary "Comparison method violates its general contract" when using Clipboard
+            Ensure that DataTransferer.DataFlavorComparator conforms to Comparator contract
+   @author Anton Nashatyrev
+   @run main DataFlavorComparatorTest1
+*/
+import sun.awt.datatransfer.DataTransferer;
+
+import java.awt.datatransfer.DataFlavor;
+import java.util.Comparator;
+
+public class DataFlavorComparatorTest1 {
+
+    public static void main(String[] args) throws Exception {
+        String[] mimes = new String[] {
+                "text/plain",
+                "text/plain; charset=unicode",
+                "text/plain; charset=cp1251",
+                "text/plain; charset=unicode; class=java.io.InputStream",
+                "text/plain; charset=unicode; class=java.io.Serializable",
+                "text/plain; charset=unicode; class=java.lang.Object",
+                "text/plain; class=java.lang.String",
+                "text/plain; class=java.io.Reader",
+                "text/plain; class=java.lang.Object",
+                "text/html",
+                "text/html; charset=unicode",
+                "text/html; charset=cp1251",
+                "text/html; charset=unicode; class=java.io.InputStream",
+                "text/html; charset=unicode; class=java.io.Serializable",
+                "text/html; charset=unicode; class=java.lang.Object",
+                "text/html; class=java.lang.String",
+                "text/html; class=java.io.Reader",
+                "text/html; class=java.lang.Object",
+                "text/unknown",
+                "text/unknown; charset=unicode",
+                "text/unknown; charset=cp1251",
+                "text/unknown; charset=unicode; class=java.io.InputStream",
+                "text/unknown; charset=unicode; class=java.io.Serializable",
+                "text/unknown; charset=unicode; class=java.lang.Object",
+                "text/unknown; class=java.lang.String",
+                "text/unknown; class=java.io.Reader",
+                "text/unknown; class=java.lang.Object",
+                "application/unknown; class=java.io.InputStream",
+                "application/unknown; class=java.lang.Object",
+                "application/unknown",
+                "application/x-java-jvm-local-objectref; class=java.io.InputStream",
+                "application/x-java-jvm-local-objectref; class=java.lang.Object",
+                "application/x-java-jvm-local-objectref",
+                "unknown/flavor",
+                "unknown/flavor; class=java.io.InputStream",
+                "unknown/flavor; class=java.lang.Object",
+        };
+
+        DataFlavor[] flavors = new DataFlavor[mimes.length];
+        for (int i = 0; i < flavors.length; i++) {
+            flavors[i] = new DataFlavor(mimes[i]);
+        }
+
+        testComparator(new DataTransferer.DataFlavorComparator(true), flavors);
+        testComparator(new DataTransferer.DataFlavorComparator(false), flavors);
+
+    }
+
+    private static void testComparator(Comparator cmp, DataFlavor[] flavs)
+            throws ClassNotFoundException {
+
+        for (DataFlavor x: flavs) {
+            for (DataFlavor y: flavs) {
+                if (Math.signum(cmp.compare(x,y)) != -Math.signum(cmp.compare(y,x))) {
+                    throw new RuntimeException("Antisymmetry violated: " + x + ", " + y);
+                }
+                if (cmp.compare(x,y) == 0 && !x.equals(y)) {
+                    throw new RuntimeException("Equals rule violated: " + x + ", " + y);
+                }
+                for (DataFlavor z: flavs) {
+                    if (cmp.compare(x,y) == 0) {
+                        if (Math.signum(cmp.compare(x, z)) != Math.signum(cmp.compare(y, z))) {
+                            throw new RuntimeException("Transitivity (1) violated: " + x + ", " + y + ", " + z);
+                        }
+                    } else {
+                        if (Math.signum(cmp.compare(x, y)) == Math.signum(cmp.compare(y, z))) {
+                            if (Math.signum(cmp.compare(x, y)) != Math.signum(cmp.compare(x, z))) {
+                                throw new RuntimeException("Transitivity (2) violated: " + x + ", " + y + ", " + z);
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    }
+}
--- a/test/sun/java2d/cmm/ColorConvertOp/ColConvCCMTest.java	Fri Oct 10 15:52:52 2014 +0100
+++ b/test/sun/java2d/cmm/ColorConvertOp/ColConvCCMTest.java	Tue Nov 04 17:20:19 2014 +0000
@@ -23,7 +23,7 @@
 
 /**
  * @test
- * @bug 6476665 7033534 6830714
+ * @bug 6476665 7033534 6830714 8052162
  * @summary Verifies color conversion of Component Color Model based images
  * @run main ColConvCCMTest
  */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/sun/security/jgss/spnego/NotPreferredMech.java	Tue Nov 04 17:20:19 2014 +0000
@@ -0,0 +1,100 @@
+/*
+ * Copyright (c) 2014, 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 8048194
+ * @run main/othervm NotPreferredMech
+ * @summary GSSContext.acceptSecContext fails when a supported mech is not initiator preferred
+ */
+
+import org.ietf.jgss.*;
+import sun.security.jgss.*;
+import sun.security.jgss.spnego.NegTokenInit;
+import sun.security.jgss.spnego.NegTokenTarg;
+import sun.security.util.BitArray;
+import sun.security.util.DerOutputStream;
+import sun.security.util.DerValue;
+import sun.security.util.ObjectIdentifier;
+
+import java.io.ByteArrayOutputStream;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.Method;
+
+public class NotPreferredMech {
+
+    public static void main(String[] argv) throws Exception {
+
+        // Generates a NegTokenInit mechTypes field, with an
+        // unsupported mech as the preferred.
+        DerOutputStream mech = new DerOutputStream();
+        mech.write(new Oid("1.2.3.4").getDER());
+        mech.write(GSSUtil.GSS_KRB5_MECH_OID.getDER());
+        DerOutputStream mechTypeList = new DerOutputStream();
+        mechTypeList.write(DerValue.tag_Sequence, mech);
+
+        // Generates a NegTokenInit mechToken field for 1.2.3.4 mech
+        GSSHeader h1 = new GSSHeader(new ObjectIdentifier("1.2.3.4"), 1);
+        ByteArrayOutputStream bout = new ByteArrayOutputStream();
+        h1.encode(bout);
+        bout.write(new byte[1]);
+
+        // Generates the NegTokenInit token
+        Constructor<NegTokenInit> ctor = NegTokenInit.class.getDeclaredConstructor(
+                byte[].class, BitArray.class, byte[].class, byte[].class);
+        ctor.setAccessible(true);
+        NegTokenInit initToken = ctor.newInstance(
+                mechTypeList.toByteArray(),
+                new BitArray(0),
+                bout.toByteArray(),
+                null);
+        Method m = Class.forName("sun.security.jgss.spnego.SpNegoToken")
+                .getDeclaredMethod("getEncoded");
+        m.setAccessible(true);
+        byte[] spnegoToken = (byte[])m.invoke(initToken);
+
+        // and wraps it into a GSSToken
+        GSSHeader h = new GSSHeader(
+                new ObjectIdentifier(GSSUtil.GSS_SPNEGO_MECH_OID.toString()),
+                spnegoToken.length);
+        bout = new ByteArrayOutputStream();
+        h.encode(bout);
+        bout.write(spnegoToken);
+        byte[] token = bout.toByteArray();
+
+        // and feeds it to a GSS acceptor
+        GSSManager man = GSSManager.getInstance();
+        GSSContext ctxt = man.createContext((GSSCredential) null);
+        token = ctxt.acceptSecContext(token, 0, token.length);
+        NegTokenTarg targ = new NegTokenTarg(token);
+
+        // Make sure it's a GO-ON message
+        Method m2 = NegTokenTarg.class.getDeclaredMethod("getNegotiatedResult");
+        m2.setAccessible(true);
+        int negResult = (int)m2.invoke(targ);
+
+        if (negResult != 1 /* ACCEPT_INCOMPLETE */) {
+            throw new Exception("Not a continue");
+        }
+    }
+}
--- a/test/sun/security/krb5/auto/S4U2proxy.java	Fri Oct 10 15:52:52 2014 +0100
+++ b/test/sun/security/krb5/auto/S4U2proxy.java	Tue Nov 04 17:20:19 2014 +0000
@@ -23,7 +23,7 @@
 
 /*
  * @test
- * @bug 6355584
+ * @bug 6355584 8044215
  * @summary Introduce constrained Kerberos delegation
  * @compile -XDignore.symbol.file S4U2proxy.java
  * @run main/othervm S4U2proxy krb5
@@ -69,6 +69,10 @@
         Context p = s.delegated();
 
         p.startAsClient(OneKDC.BACKEND, mech);
+
+        // 8044215: requestCredDeleg is useless and harmless
+        p.x().requestCredDeleg(true);
+
         b.startAsServer(mech);
         Context.handshake(p, b);
 
--- a/test/sun/security/ssl/sanity/ciphersuites/CipherSuitesInOrder.java	Fri Oct 10 15:52:52 2014 +0100
+++ b/test/sun/security/ssl/sanity/ciphersuites/CipherSuitesInOrder.java	Tue Nov 04 17:20:19 2014 +0000
@@ -69,11 +69,6 @@
         "TLS_ECDH_RSA_WITH_AES_128_CBC_SHA",
         "TLS_DHE_RSA_WITH_AES_128_CBC_SHA",
         "TLS_DHE_DSS_WITH_AES_128_CBC_SHA",
-        "TLS_ECDHE_ECDSA_WITH_RC4_128_SHA",
-        "TLS_ECDHE_RSA_WITH_RC4_128_SHA",
-        "SSL_RSA_WITH_RC4_128_SHA",
-        "TLS_ECDH_ECDSA_WITH_RC4_128_SHA",
-        "TLS_ECDH_RSA_WITH_RC4_128_SHA",
 
         "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384",
         "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256",
@@ -97,6 +92,12 @@
         "TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA",
         "SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA",
         "SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA",
+
+        "TLS_ECDHE_ECDSA_WITH_RC4_128_SHA",
+        "TLS_ECDHE_RSA_WITH_RC4_128_SHA",
+        "SSL_RSA_WITH_RC4_128_SHA",
+        "TLS_ECDH_ECDSA_WITH_RC4_128_SHA",
+        "TLS_ECDH_RSA_WITH_RC4_128_SHA",
         "SSL_RSA_WITH_RC4_128_MD5",
 
         "TLS_EMPTY_RENEGOTIATION_INFO_SCSV",
@@ -110,10 +111,20 @@
         "TLS_DH_anon_WITH_AES_128_CBC_SHA256",
         "TLS_ECDH_anon_WITH_AES_128_CBC_SHA",
         "TLS_DH_anon_WITH_AES_128_CBC_SHA",
+        "TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA",
+        "SSL_DH_anon_WITH_3DES_EDE_CBC_SHA",
         "TLS_ECDH_anon_WITH_RC4_128_SHA",
         "SSL_DH_anon_WITH_RC4_128_MD5",
-        "TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA",
-        "SSL_DH_anon_WITH_3DES_EDE_CBC_SHA",
+        "SSL_RSA_WITH_DES_CBC_SHA",
+        "SSL_DHE_RSA_WITH_DES_CBC_SHA",
+        "SSL_DHE_DSS_WITH_DES_CBC_SHA",
+        "SSL_DH_anon_WITH_DES_CBC_SHA",
+        "SSL_RSA_EXPORT_WITH_DES40_CBC_SHA",
+        "SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA",
+        "SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA",
+        "SSL_DH_anon_EXPORT_WITH_DES40_CBC_SHA",
+        "SSL_RSA_EXPORT_WITH_RC4_40_MD5",
+        "SSL_DH_anon_EXPORT_WITH_RC4_40_MD5",
         "TLS_RSA_WITH_NULL_SHA256",
         "TLS_ECDHE_ECDSA_WITH_NULL_SHA",
         "TLS_ECDHE_RSA_WITH_NULL_SHA",
@@ -122,26 +133,16 @@
         "TLS_ECDH_RSA_WITH_NULL_SHA",
         "TLS_ECDH_anon_WITH_NULL_SHA",
         "SSL_RSA_WITH_NULL_MD5",
-        "SSL_RSA_WITH_DES_CBC_SHA",
-        "SSL_DHE_RSA_WITH_DES_CBC_SHA",
-        "SSL_DHE_DSS_WITH_DES_CBC_SHA",
-        "SSL_DH_anon_WITH_DES_CBC_SHA",
-        "SSL_RSA_EXPORT_WITH_RC4_40_MD5",
-        "SSL_DH_anon_EXPORT_WITH_RC4_40_MD5",
-        "SSL_RSA_EXPORT_WITH_DES40_CBC_SHA",
-        "SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA",
-        "SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA",
-        "SSL_DH_anon_EXPORT_WITH_DES40_CBC_SHA",
+        "TLS_KRB5_WITH_3DES_EDE_CBC_SHA",
+        "TLS_KRB5_WITH_3DES_EDE_CBC_MD5",
         "TLS_KRB5_WITH_RC4_128_SHA",
         "TLS_KRB5_WITH_RC4_128_MD5",
-        "TLS_KRB5_WITH_3DES_EDE_CBC_SHA",
-        "TLS_KRB5_WITH_3DES_EDE_CBC_MD5",
         "TLS_KRB5_WITH_DES_CBC_SHA",
         "TLS_KRB5_WITH_DES_CBC_MD5",
+        "TLS_KRB5_EXPORT_WITH_DES_CBC_40_SHA",
+        "TLS_KRB5_EXPORT_WITH_DES_CBC_40_MD5",
         "TLS_KRB5_EXPORT_WITH_RC4_40_SHA",
-        "TLS_KRB5_EXPORT_WITH_RC4_40_MD5",
-        "TLS_KRB5_EXPORT_WITH_DES_CBC_40_SHA",
-        "TLS_KRB5_EXPORT_WITH_DES_CBC_40_MD5"
+        "TLS_KRB5_EXPORT_WITH_RC4_40_MD5"
     );
 
     private final static String[] protocols = {
--- a/test/sun/text/resources/LocaleData	Fri Oct 10 15:52:52 2014 +0100
+++ b/test/sun/text/resources/LocaleData	Tue Nov 04 17:20:19 2014 +0000
@@ -2502,7 +2502,7 @@
 CalendarData/pl_PL/minimalDaysInFirstWeek=4
 CalendarData/pt_PT/minimalDaysInFirstWeek=4
 
-#bug 4945388 
+#bug 4945388
 CurrencyNames/be_BY/BYR=\u0420\u0443\u0431
 CurrencyNames/bg_BG/BGN=\u043B\u0432.
 
@@ -5422,7 +5422,7 @@
 FormatData/en_SG/DatePatterns/2=MMM d, yyyy
 FormatData/en_SG/DatePatterns/3=M/d/yy
 FormatData/en_SG/DateTimePatterns/0={1} {0}
-# Use approved data 
+# Use approved data
 FormatData/ms/Eras/0=BCE
 FormatData/ms/Eras/1=CE
 FormatData/sr_BA/MonthNames/5=\u0458\u0443\u043d\u0438
@@ -5571,7 +5571,7 @@
 FormatData/fi/AmPmMarkers/0=ap.
 FormatData/fi/AmPmMarkers/1=ip.
 
-# bug 6507067 
+# bug 6507067
 TimeZoneNames/zh_TW/Asia\/Taipei/1=\u53f0\u7063\u6a19\u6e96\u6642\u9593
 TimeZoneNames/zh_TW/Asia\/Taipei/2=TST
 
@@ -7702,3 +7702,577 @@
 
 # bug 8055222
 CurrencyNames/lt_LT/EUR=\u20AC
+
+# bug 8042126 + missing MonthNarrows data
+FormatData//MonthNarrows/0=1
+FormatData//MonthNarrows/1=2
+FormatData//MonthNarrows/2=3
+FormatData//MonthNarrows/3=4
+FormatData//MonthNarrows/4=5
+FormatData//MonthNarrows/5=6
+FormatData//MonthNarrows/6=7
+FormatData//MonthNarrows/7=8
+FormatData//MonthNarrows/8=9
+FormatData//MonthNarrows/9=10
+FormatData//MonthNarrows/10=11
+FormatData//MonthNarrows/11=12
+FormatData//MonthNarrows/12=
+FormatData/bg/MonthNarrows/0=\u044f
+FormatData/bg/MonthNarrows/1=\u0444
+FormatData/bg/MonthNarrows/2=\u043c
+FormatData/bg/MonthNarrows/3=\u0430
+FormatData/bg/MonthNarrows/4=\u043c
+FormatData/bg/MonthNarrows/5=\u044e
+FormatData/bg/MonthNarrows/6=\u044e
+FormatData/bg/MonthNarrows/7=\u0430
+FormatData/bg/MonthNarrows/8=\u0441
+FormatData/bg/MonthNarrows/9=\u043e
+FormatData/bg/MonthNarrows/10=\u043d
+FormatData/bg/MonthNarrows/11=\u0434
+FormatData/bg/MonthNarrows/12=
+FormatData/zh_TW/MonthNarrows/0=1
+FormatData/zh_TW/MonthNarrows/1=2
+FormatData/zh_TW/MonthNarrows/2=3
+FormatData/zh_TW/MonthNarrows/3=4
+FormatData/zh_TW/MonthNarrows/4=5
+FormatData/zh_TW/MonthNarrows/5=6
+FormatData/zh_TW/MonthNarrows/6=7
+FormatData/zh_TW/MonthNarrows/7=8
+FormatData/zh_TW/MonthNarrows/8=9
+FormatData/zh_TW/MonthNarrows/9=10
+FormatData/zh_TW/MonthNarrows/10=11
+FormatData/zh_TW/MonthNarrows/11=12
+FormatData/zh_TW/MonthNarrows/12=
+FormatData/it/MonthNarrows/0=G
+FormatData/it/MonthNarrows/1=F
+FormatData/it/MonthNarrows/2=M
+FormatData/it/MonthNarrows/3=A
+FormatData/it/MonthNarrows/4=M
+FormatData/it/MonthNarrows/5=G
+FormatData/it/MonthNarrows/6=L
+FormatData/it/MonthNarrows/7=A
+FormatData/it/MonthNarrows/8=S
+FormatData/it/MonthNarrows/9=O
+FormatData/it/MonthNarrows/10=N
+FormatData/it/MonthNarrows/11=D
+FormatData/it/MonthNarrows/12=
+FormatData/ko/MonthNarrows/0=1\uc6d4
+FormatData/ko/MonthNarrows/1=2\uc6d4
+FormatData/ko/MonthNarrows/2=3\uc6d4
+FormatData/ko/MonthNarrows/3=4\uc6d4
+FormatData/ko/MonthNarrows/4=5\uc6d4
+FormatData/ko/MonthNarrows/5=6\uc6d4
+FormatData/ko/MonthNarrows/6=7\uc6d4
+FormatData/ko/MonthNarrows/7=8\uc6d4
+FormatData/ko/MonthNarrows/8=9\uc6d4
+FormatData/ko/MonthNarrows/9=10\uc6d4
+FormatData/ko/MonthNarrows/10=11\uc6d4
+FormatData/ko/MonthNarrows/11=12\uc6d4
+FormatData/ko/MonthNarrows/12=
+FormatData/uk/MonthNarrows/0=\u0421
+FormatData/uk/MonthNarrows/1=\u041b
+FormatData/uk/MonthNarrows/2=\u0411
+FormatData/uk/MonthNarrows/3=\u041a
+FormatData/uk/MonthNarrows/4=\u0422
+FormatData/uk/MonthNarrows/5=\u0427
+FormatData/uk/MonthNarrows/6=\u041b
+FormatData/uk/MonthNarrows/7=\u0421
+FormatData/uk/MonthNarrows/8=\u0412
+FormatData/uk/MonthNarrows/9=\u0416
+FormatData/uk/MonthNarrows/10=\u041b
+FormatData/uk/MonthNarrows/11=\u0413
+FormatData/uk/MonthNarrows/12=
+FormatData/lv/MonthNarrows/0=J
+FormatData/lv/MonthNarrows/1=F
+FormatData/lv/MonthNarrows/2=M
+FormatData/lv/MonthNarrows/3=A
+FormatData/lv/MonthNarrows/4=M
+FormatData/lv/MonthNarrows/5=J
+FormatData/lv/MonthNarrows/6=J
+FormatData/lv/MonthNarrows/7=A
+FormatData/lv/MonthNarrows/8=S
+FormatData/lv/MonthNarrows/9=O
+FormatData/lv/MonthNarrows/10=N
+FormatData/lv/MonthNarrows/11=D
+FormatData/lv/MonthNarrows/12=
+FormatData/pt/MonthNarrows/0=J
+FormatData/pt/MonthNarrows/1=F
+FormatData/pt/MonthNarrows/2=M
+FormatData/pt/MonthNarrows/3=A
+FormatData/pt/MonthNarrows/4=M
+FormatData/pt/MonthNarrows/5=J
+FormatData/pt/MonthNarrows/6=J
+FormatData/pt/MonthNarrows/7=A
+FormatData/pt/MonthNarrows/8=S
+FormatData/pt/MonthNarrows/9=O
+FormatData/pt/MonthNarrows/10=N
+FormatData/pt/MonthNarrows/11=D
+FormatData/pt/MonthNarrows/12=
+FormatData/sk/MonthNarrows/0=j
+FormatData/sk/MonthNarrows/1=f
+FormatData/sk/MonthNarrows/2=m
+FormatData/sk/MonthNarrows/3=a
+FormatData/sk/MonthNarrows/4=m
+FormatData/sk/MonthNarrows/5=j
+FormatData/sk/MonthNarrows/6=j
+FormatData/sk/MonthNarrows/7=a
+FormatData/sk/MonthNarrows/8=s
+FormatData/sk/MonthNarrows/9=o
+FormatData/sk/MonthNarrows/10=n
+FormatData/sk/MonthNarrows/11=d
+FormatData/sk/MonthNarrows/12=
+FormatData/hi_IN/MonthNarrows/0=\u091c
+FormatData/hi_IN/MonthNarrows/1=\u092b\u093c
+FormatData/hi_IN/MonthNarrows/2=\u092e\u093e
+FormatData/hi_IN/MonthNarrows/3=\u0905
+FormatData/hi_IN/MonthNarrows/4=\u092e
+FormatData/hi_IN/MonthNarrows/5=\u091c\u0942
+FormatData/hi_IN/MonthNarrows/6=\u091c\u0941
+FormatData/hi_IN/MonthNarrows/7=\u0905
+FormatData/hi_IN/MonthNarrows/8=\u0938\u093f
+FormatData/hi_IN/MonthNarrows/9=\u0905
+FormatData/hi_IN/MonthNarrows/10=\u0928
+FormatData/hi_IN/MonthNarrows/11=\u0926\u093f
+FormatData/hi_IN/MonthNarrows/12=
+FormatData/ga/MonthNarrows/0=E
+FormatData/ga/MonthNarrows/1=F
+FormatData/ga/MonthNarrows/2=M
+FormatData/ga/MonthNarrows/3=A
+FormatData/ga/MonthNarrows/4=B
+FormatData/ga/MonthNarrows/5=M
+FormatData/ga/MonthNarrows/6=I
+FormatData/ga/MonthNarrows/7=L
+FormatData/ga/MonthNarrows/8=M
+FormatData/ga/MonthNarrows/9=D
+FormatData/ga/MonthNarrows/10=S
+FormatData/ga/MonthNarrows/11=N
+FormatData/ga/MonthNarrows/12=
+FormatData/et/MonthNarrows/0=J
+FormatData/et/MonthNarrows/1=V
+FormatData/et/MonthNarrows/2=M
+FormatData/et/MonthNarrows/3=A
+FormatData/et/MonthNarrows/4=M
+FormatData/et/MonthNarrows/5=J
+FormatData/et/MonthNarrows/6=J
+FormatData/et/MonthNarrows/7=A
+FormatData/et/MonthNarrows/8=S
+FormatData/et/MonthNarrows/9=O
+FormatData/et/MonthNarrows/10=N
+FormatData/et/MonthNarrows/11=D
+FormatData/et/MonthNarrows/12=
+FormatData/sv/MonthNarrows/0=J
+FormatData/sv/MonthNarrows/1=F
+FormatData/sv/MonthNarrows/2=M
+FormatData/sv/MonthNarrows/3=A
+FormatData/sv/MonthNarrows/4=M
+FormatData/sv/MonthNarrows/5=J
+FormatData/sv/MonthNarrows/6=J
+FormatData/sv/MonthNarrows/7=A
+FormatData/sv/MonthNarrows/8=S
+FormatData/sv/MonthNarrows/9=O
+FormatData/sv/MonthNarrows/10=N
+FormatData/sv/MonthNarrows/11=D
+FormatData/sv/MonthNarrows/12=
+FormatData/cs/MonthNarrows/0=l
+FormatData/cs/MonthNarrows/1=\u00fa
+FormatData/cs/MonthNarrows/2=b
+FormatData/cs/MonthNarrows/3=d
+FormatData/cs/MonthNarrows/4=k
+FormatData/cs/MonthNarrows/5=\u010d
+FormatData/cs/MonthNarrows/6=\u010d
+FormatData/cs/MonthNarrows/7=s
+FormatData/cs/MonthNarrows/8=z
+FormatData/cs/MonthNarrows/9=\u0159
+FormatData/cs/MonthNarrows/10=l
+FormatData/cs/MonthNarrows/11=p
+FormatData/cs/MonthNarrows/12=
+FormatData/el/MonthNarrows/0=\u0399
+FormatData/el/MonthNarrows/1=\u03a6
+FormatData/el/MonthNarrows/2=\u039c
+FormatData/el/MonthNarrows/3=\u0391
+FormatData/el/MonthNarrows/4=\u039c
+FormatData/el/MonthNarrows/5=\u0399
+FormatData/el/MonthNarrows/6=\u0399
+FormatData/el/MonthNarrows/7=\u0391
+FormatData/el/MonthNarrows/8=\u03a3
+FormatData/el/MonthNarrows/9=\u039f
+FormatData/el/MonthNarrows/10=\u039d
+FormatData/el/MonthNarrows/11=\u0394
+FormatData/el/MonthNarrows/12=
+FormatData/hu/MonthNarrows/0=J
+FormatData/hu/MonthNarrows/1=F
+FormatData/hu/MonthNarrows/2=M
+FormatData/hu/MonthNarrows/3=\u00c1
+FormatData/hu/MonthNarrows/4=M
+FormatData/hu/MonthNarrows/5=J
+FormatData/hu/MonthNarrows/6=J
+FormatData/hu/MonthNarrows/7=A
+FormatData/hu/MonthNarrows/8=Sz
+FormatData/hu/MonthNarrows/9=O
+FormatData/hu/MonthNarrows/10=N
+FormatData/hu/MonthNarrows/11=D
+FormatData/hu/MonthNarrows/12=
+FormatData/es/MonthNarrows/0=E
+FormatData/es/MonthNarrows/1=F
+FormatData/es/MonthNarrows/2=M
+FormatData/es/MonthNarrows/3=A
+FormatData/es/MonthNarrows/4=M
+FormatData/es/MonthNarrows/5=J
+FormatData/es/MonthNarrows/6=J
+FormatData/es/MonthNarrows/7=A
+FormatData/es/MonthNarrows/8=S
+FormatData/es/MonthNarrows/9=O
+FormatData/es/MonthNarrows/10=N
+FormatData/es/MonthNarrows/11=D
+FormatData/es/MonthNarrows/12=
+FormatData/tr/MonthNarrows/0=O
+FormatData/tr/MonthNarrows/1=\u015e
+FormatData/tr/MonthNarrows/2=M
+FormatData/tr/MonthNarrows/3=N
+FormatData/tr/MonthNarrows/4=M
+FormatData/tr/MonthNarrows/5=H
+FormatData/tr/MonthNarrows/6=T
+FormatData/tr/MonthNarrows/7=A
+FormatData/tr/MonthNarrows/8=E
+FormatData/tr/MonthNarrows/9=E
+FormatData/tr/MonthNarrows/10=K
+FormatData/tr/MonthNarrows/11=A
+FormatData/tr/MonthNarrows/12=
+FormatData/hr/MonthNarrows/0=1.
+FormatData/hr/MonthNarrows/1=2.
+FormatData/hr/MonthNarrows/2=3.
+FormatData/hr/MonthNarrows/3=4.
+FormatData/hr/MonthNarrows/4=5.
+FormatData/hr/MonthNarrows/5=6.
+FormatData/hr/MonthNarrows/6=7.
+FormatData/hr/MonthNarrows/7=8.
+FormatData/hr/MonthNarrows/8=9.
+FormatData/hr/MonthNarrows/9=10.
+FormatData/hr/MonthNarrows/10=11.
+FormatData/hr/MonthNarrows/11=12.
+FormatData/hr/MonthNarrows/12=
+FormatData/lt/MonthNarrows/0=S
+FormatData/lt/MonthNarrows/1=V
+FormatData/lt/MonthNarrows/2=K
+FormatData/lt/MonthNarrows/3=B
+FormatData/lt/MonthNarrows/4=G
+FormatData/lt/MonthNarrows/5=B
+FormatData/lt/MonthNarrows/6=L
+FormatData/lt/MonthNarrows/7=R
+FormatData/lt/MonthNarrows/8=R
+FormatData/lt/MonthNarrows/9=S
+FormatData/lt/MonthNarrows/10=L
+FormatData/lt/MonthNarrows/11=G
+FormatData/lt/MonthNarrows/12=
+FormatData/sq/MonthNarrows/0=J
+FormatData/sq/MonthNarrows/1=S
+FormatData/sq/MonthNarrows/2=M
+FormatData/sq/MonthNarrows/3=P
+FormatData/sq/MonthNarrows/4=M
+FormatData/sq/MonthNarrows/5=Q
+FormatData/sq/MonthNarrows/6=K
+FormatData/sq/MonthNarrows/7=G
+FormatData/sq/MonthNarrows/8=S
+FormatData/sq/MonthNarrows/9=T
+FormatData/sq/MonthNarrows/10=N
+FormatData/sq/MonthNarrows/11=D
+FormatData/sq/MonthNarrows/12=
+FormatData/fr/MonthNarrows/0=J
+FormatData/fr/MonthNarrows/1=F
+FormatData/fr/MonthNarrows/2=M
+FormatData/fr/MonthNarrows/3=A
+FormatData/fr/MonthNarrows/4=M
+FormatData/fr/MonthNarrows/5=J
+FormatData/fr/MonthNarrows/6=J
+FormatData/fr/MonthNarrows/7=A
+FormatData/fr/MonthNarrows/8=S
+FormatData/fr/MonthNarrows/9=O
+FormatData/fr/MonthNarrows/10=N
+FormatData/fr/MonthNarrows/11=D
+FormatData/fr/MonthNarrows/12=
+FormatData/is/MonthNarrows/0=J
+FormatData/is/MonthNarrows/1=F
+FormatData/is/MonthNarrows/2=M
+FormatData/is/MonthNarrows/3=A
+FormatData/is/MonthNarrows/4=M
+FormatData/is/MonthNarrows/5=J
+FormatData/is/MonthNarrows/6=J
+FormatData/is/MonthNarrows/7=\u00c1
+FormatData/is/MonthNarrows/8=L
+FormatData/is/MonthNarrows/9=O
+FormatData/is/MonthNarrows/10=N
+FormatData/is/MonthNarrows/11=D
+FormatData/is/MonthNarrows/12=
+FormatData/de/MonthNarrows/0=J
+FormatData/de/MonthNarrows/1=F
+FormatData/de/MonthNarrows/2=M
+FormatData/de/MonthNarrows/3=A
+FormatData/de/MonthNarrows/4=M
+FormatData/de/MonthNarrows/5=J
+FormatData/de/MonthNarrows/6=J
+FormatData/de/MonthNarrows/7=A
+FormatData/de/MonthNarrows/8=S
+FormatData/de/MonthNarrows/9=O
+FormatData/de/MonthNarrows/10=N
+FormatData/de/MonthNarrows/11=D
+FormatData/de/MonthNarrows/12=
+FormatData/en/MonthNarrows/0=J
+FormatData/en/MonthNarrows/1=F
+FormatData/en/MonthNarrows/2=M
+FormatData/en/MonthNarrows/3=A
+FormatData/en/MonthNarrows/4=M
+FormatData/en/MonthNarrows/5=J
+FormatData/en/MonthNarrows/6=J
+FormatData/en/MonthNarrows/7=A
+FormatData/en/MonthNarrows/8=S
+FormatData/en/MonthNarrows/9=O
+FormatData/en/MonthNarrows/10=N
+FormatData/en/MonthNarrows/11=D
+FormatData/en/MonthNarrows/12=
+FormatData/ca/MonthNarrows/0=G
+FormatData/ca/MonthNarrows/1=F
+FormatData/ca/MonthNarrows/2=M
+FormatData/ca/MonthNarrows/3=A
+FormatData/ca/MonthNarrows/4=M
+FormatData/ca/MonthNarrows/5=J
+FormatData/ca/MonthNarrows/6=G
+FormatData/ca/MonthNarrows/7=A
+FormatData/ca/MonthNarrows/8=S
+FormatData/ca/MonthNarrows/9=O
+FormatData/ca/MonthNarrows/10=N
+FormatData/ca/MonthNarrows/11=D
+FormatData/ca/MonthNarrows/12=
+FormatData/sl/MonthNarrows/0=j
+FormatData/sl/MonthNarrows/1=f
+FormatData/sl/MonthNarrows/2=m
+FormatData/sl/MonthNarrows/3=a
+FormatData/sl/MonthNarrows/4=m
+FormatData/sl/MonthNarrows/5=j
+FormatData/sl/MonthNarrows/6=j
+FormatData/sl/MonthNarrows/7=a
+FormatData/sl/MonthNarrows/8=s
+FormatData/sl/MonthNarrows/9=o
+FormatData/sl/MonthNarrows/10=n
+FormatData/sl/MonthNarrows/11=d
+FormatData/sl/MonthNarrows/12=
+FormatData/fi/MonthNarrows/0=T
+FormatData/fi/MonthNarrows/1=H
+FormatData/fi/MonthNarrows/2=M
+FormatData/fi/MonthNarrows/3=H
+FormatData/fi/MonthNarrows/4=T
+FormatData/fi/MonthNarrows/5=K
+FormatData/fi/MonthNarrows/6=H
+FormatData/fi/MonthNarrows/7=E
+FormatData/fi/MonthNarrows/8=S
+FormatData/fi/MonthNarrows/9=L
+FormatData/fi/MonthNarrows/10=M
+FormatData/fi/MonthNarrows/11=J
+FormatData/fi/MonthNarrows/12=
+FormatData/mk/MonthNarrows/0=\u0458
+FormatData/mk/MonthNarrows/1=\u0444
+FormatData/mk/MonthNarrows/2=\u043c
+FormatData/mk/MonthNarrows/3=\u0430
+FormatData/mk/MonthNarrows/4=\u043c
+FormatData/mk/MonthNarrows/5=\u0458
+FormatData/mk/MonthNarrows/6=\u0458
+FormatData/mk/MonthNarrows/7=\u0430
+FormatData/mk/MonthNarrows/8=\u0441
+FormatData/mk/MonthNarrows/9=\u043e
+FormatData/mk/MonthNarrows/10=\u043d
+FormatData/mk/MonthNarrows/11=\u0434
+FormatData/mk/MonthNarrows/12=
+FormatData/sr-Latn/MonthNarrows/0=j
+FormatData/sr-Latn/MonthNarrows/1=f
+FormatData/sr-Latn/MonthNarrows/2=m
+FormatData/sr-Latn/MonthNarrows/3=a
+FormatData/sr-Latn/MonthNarrows/4=m
+FormatData/sr-Latn/MonthNarrows/5=j
+FormatData/sr-Latn/MonthNarrows/6=j
+FormatData/sr-Latn/MonthNarrows/7=a
+FormatData/sr-Latn/MonthNarrows/8=s
+FormatData/sr-Latn/MonthNarrows/9=o
+FormatData/sr-Latn/MonthNarrows/10=n
+FormatData/sr-Latn/MonthNarrows/11=d
+FormatData/sr-Latn/MonthNarrows/12=
+FormatData/th/MonthNarrows/0=\u0e21.\u0e04.
+FormatData/th/MonthNarrows/1=\u0e01.\u0e1e.
+FormatData/th/MonthNarrows/2=\u0e21\u0e35.\u0e04.
+FormatData/th/MonthNarrows/3=\u0e40\u0e21.\u0e22.
+FormatData/th/MonthNarrows/4=\u0e1e.\u0e04.
+FormatData/th/MonthNarrows/5=\u0e21\u0e34.\u0e22
+FormatData/th/MonthNarrows/6=\u0e01.\u0e04.
+FormatData/th/MonthNarrows/7=\u0e2a.\u0e04.
+FormatData/th/MonthNarrows/8=\u0e01.\u0e22.
+FormatData/th/MonthNarrows/9=\u0e15.\u0e04.
+FormatData/th/MonthNarrows/10=\u0e1e.\u0e22.
+FormatData/th/MonthNarrows/11=\u0e18.\u0e04.
+FormatData/th/MonthNarrows/12=
+FormatData/ar/MonthNarrows/0=\u064a
+FormatData/ar/MonthNarrows/1=\u0641
+FormatData/ar/MonthNarrows/2=\u0645
+FormatData/ar/MonthNarrows/3=\u0623
+FormatData/ar/MonthNarrows/4=\u0648
+FormatData/ar/MonthNarrows/5=\u0646
+FormatData/ar/MonthNarrows/6=\u0644
+FormatData/ar/MonthNarrows/7=\u063a
+FormatData/ar/MonthNarrows/8=\u0633
+FormatData/ar/MonthNarrows/9=\u0643
+FormatData/ar/MonthNarrows/10=\u0628
+FormatData/ar/MonthNarrows/11=\u062f
+FormatData/ar/MonthNarrows/12=
+FormatData/ru/MonthNarrows/0=\u042f
+FormatData/ru/MonthNarrows/1=\u0424
+FormatData/ru/MonthNarrows/2=\u041c
+FormatData/ru/MonthNarrows/3=\u0410
+FormatData/ru/MonthNarrows/4=\u041c
+FormatData/ru/MonthNarrows/5=\u0418
+FormatData/ru/MonthNarrows/6=\u0418
+FormatData/ru/MonthNarrows/7=\u0410
+FormatData/ru/MonthNarrows/8=\u0421
+FormatData/ru/MonthNarrows/9=\u041e
+FormatData/ru/MonthNarrows/10=\u041d
+FormatData/ru/MonthNarrows/11=\u0414
+FormatData/ru/MonthNarrows/12=
+FormatData/ms/MonthNarrows/0=J
+FormatData/ms/MonthNarrows/1=F
+FormatData/ms/MonthNarrows/2=M
+FormatData/ms/MonthNarrows/3=A
+FormatData/ms/MonthNarrows/4=M
+FormatData/ms/MonthNarrows/5=J
+FormatData/ms/MonthNarrows/6=J
+FormatData/ms/MonthNarrows/7=O
+FormatData/ms/MonthNarrows/8=S
+FormatData/ms/MonthNarrows/9=O
+FormatData/ms/MonthNarrows/10=N
+FormatData/ms/MonthNarrows/11=D
+FormatData/ms/MonthNarrows/12=
+FormatData/nl/MonthNarrows/0=J
+FormatData/nl/MonthNarrows/1=F
+FormatData/nl/MonthNarrows/2=M
+FormatData/nl/MonthNarrows/3=A
+FormatData/nl/MonthNarrows/4=M
+FormatData/nl/MonthNarrows/5=J
+FormatData/nl/MonthNarrows/6=J
+FormatData/nl/MonthNarrows/7=A
+FormatData/nl/MonthNarrows/8=S
+FormatData/nl/MonthNarrows/9=O
+FormatData/nl/MonthNarrows/10=N
+FormatData/nl/MonthNarrows/11=D
+FormatData/nl/MonthNarrows/12=
+FormatData/vi/MonthNarrows/0=1
+FormatData/vi/MonthNarrows/1=2
+FormatData/vi/MonthNarrows/2=3
+FormatData/vi/MonthNarrows/3=4
+FormatData/vi/MonthNarrows/4=5
+FormatData/vi/MonthNarrows/5=6
+FormatData/vi/MonthNarrows/6=7
+FormatData/vi/MonthNarrows/7=8
+FormatData/vi/MonthNarrows/8=9
+FormatData/vi/MonthNarrows/9=10
+FormatData/vi/MonthNarrows/10=11
+FormatData/vi/MonthNarrows/11=12
+FormatData/vi/MonthNarrows/12=
+FormatData/sr/MonthNarrows/0=\u0458
+FormatData/sr/MonthNarrows/1=\u0444
+FormatData/sr/MonthNarrows/2=\u043c
+FormatData/sr/MonthNarrows/3=\u0430
+FormatData/sr/MonthNarrows/4=\u043c
+FormatData/sr/MonthNarrows/5=\u0458
+FormatData/sr/MonthNarrows/6=\u0458
+FormatData/sr/MonthNarrows/7=\u0430
+FormatData/sr/MonthNarrows/8=\u0441
+FormatData/sr/MonthNarrows/9=\u043e
+FormatData/sr/MonthNarrows/10=\u043d
+FormatData/sr/MonthNarrows/11=\u0434
+FormatData/sr/MonthNarrows/12=
+FormatData/mt/MonthNarrows/0=J
+FormatData/mt/MonthNarrows/1=F
+FormatData/mt/MonthNarrows/2=M
+FormatData/mt/MonthNarrows/3=A
+FormatData/mt/MonthNarrows/4=M
+FormatData/mt/MonthNarrows/5=\u0120
+FormatData/mt/MonthNarrows/6=L
+FormatData/mt/MonthNarrows/7=A
+FormatData/mt/MonthNarrows/8=S
+FormatData/mt/MonthNarrows/9=O
+FormatData/mt/MonthNarrows/10=N
+FormatData/mt/MonthNarrows/11=D
+FormatData/mt/MonthNarrows/12=
+FormatData/da/MonthNarrows/0=J
+FormatData/da/MonthNarrows/1=F
+FormatData/da/MonthNarrows/2=M
+FormatData/da/MonthNarrows/3=A
+FormatData/da/MonthNarrows/4=M
+FormatData/da/MonthNarrows/5=J
+FormatData/da/MonthNarrows/6=J
+FormatData/da/MonthNarrows/7=A
+FormatData/da/MonthNarrows/8=S
+FormatData/da/MonthNarrows/9=O
+FormatData/da/MonthNarrows/10=N
+FormatData/da/MonthNarrows/11=D
+FormatData/da/MonthNarrows/12=
+FormatData/ro/MonthNarrows/0=I
+FormatData/ro/MonthNarrows/1=F
+FormatData/ro/MonthNarrows/2=M
+FormatData/ro/MonthNarrows/3=A
+FormatData/ro/MonthNarrows/4=M
+FormatData/ro/MonthNarrows/5=I
+FormatData/ro/MonthNarrows/6=I
+FormatData/ro/MonthNarrows/7=A
+FormatData/ro/MonthNarrows/8=S
+FormatData/ro/MonthNarrows/9=O
+FormatData/ro/MonthNarrows/10=N
+FormatData/ro/MonthNarrows/11=D
+FormatData/ro/MonthNarrows/12=
+FormatData/no/MonthNarrows/0=J
+FormatData/no/MonthNarrows/1=F
+FormatData/no/MonthNarrows/2=M
+FormatData/no/MonthNarrows/3=A
+FormatData/no/MonthNarrows/4=M
+FormatData/no/MonthNarrows/5=J
+FormatData/no/MonthNarrows/6=J
+FormatData/no/MonthNarrows/7=A
+FormatData/no/MonthNarrows/8=S
+FormatData/no/MonthNarrows/9=O
+FormatData/no/MonthNarrows/10=N
+FormatData/no/MonthNarrows/11=D
+FormatData/no/MonthNarrows/12=
+FormatData/pl/MonthNarrows/0=s
+FormatData/pl/MonthNarrows/1=l
+FormatData/pl/MonthNarrows/2=m
+FormatData/pl/MonthNarrows/3=k
+FormatData/pl/MonthNarrows/4=m
+FormatData/pl/MonthNarrows/5=c
+FormatData/pl/MonthNarrows/6=l
+FormatData/pl/MonthNarrows/7=s
+FormatData/pl/MonthNarrows/8=w
+FormatData/pl/MonthNarrows/9=p
+FormatData/pl/MonthNarrows/10=l
+FormatData/pl/MonthNarrows/11=g
+FormatData/pl/MonthNarrows/12=
+FormatData/iw/MonthNarrows/0=1
+FormatData/iw/MonthNarrows/1=2
+FormatData/iw/MonthNarrows/2=3
+FormatData/iw/MonthNarrows/3=4
+FormatData/iw/MonthNarrows/4=5
+FormatData/iw/MonthNarrows/5=6
+FormatData/iw/MonthNarrows/6=7
+FormatData/iw/MonthNarrows/7=8
+FormatData/iw/MonthNarrows/8=9
+FormatData/iw/MonthNarrows/9=10
+FormatData/iw/MonthNarrows/10=11
+FormatData/iw/MonthNarrows/11=12
+FormatData/iw/MonthNarrows/12=
+FormatData/zh/MonthNarrows/0=1
+FormatData/zh/MonthNarrows/1=2
+FormatData/zh/MonthNarrows/2=3
+FormatData/zh/MonthNarrows/3=4
+FormatData/zh/MonthNarrows/4=5
+FormatData/zh/MonthNarrows/5=6
+FormatData/zh/MonthNarrows/6=7
+FormatData/zh/MonthNarrows/7=8
+FormatData/zh/MonthNarrows/8=9
+FormatData/zh/MonthNarrows/9=10
+FormatData/zh/MonthNarrows/10=11
+FormatData/zh/MonthNarrows/11=12
+FormatData/zh/MonthNarrows/12=
--- a/test/sun/text/resources/LocaleDataTest.java	Fri Oct 10 15:52:52 2014 +0100
+++ b/test/sun/text/resources/LocaleDataTest.java	Tue Nov 04 17:20:19 2014 +0000
@@ -36,7 +36,7 @@
  *      6919624 6998391 7019267 7020960 7025837 7020583 7036905 7066203 7101495
  *      7003124 7085757 7028073 7171028 7189611 8000983 7195759 8004489 8006509
  *      7114053 7074882 7040556 8013836 8021121 6192407 6931564 8027695 7090826
- *      8017142 8037343 8055222
+ *      8017142 8037343 8055222 8042126
  * @summary Verify locale data
  *
  */