Merge JDK-8200758-branch
authorherrick
Wed, 13 Feb 2019 13:22:15 -0500
branchJDK-8200758-branch
changeset 57182 2d71241be958
parent 57181 d10b861e8d62 (current diff)
parent 53730 1d942423516c (diff)
child 57183 43b208f90d2f
Merge
make/CompileDemos.gmk
make/CompileJavaModules.gmk
make/common/Modules.gmk
make/common/NativeCompilation.gmk
src/hotspot/share/code/relocInfo_ext.cpp
src/hotspot/share/code/relocInfo_ext.hpp
src/hotspot/share/gc/g1/collectionSetChooser.cpp
src/hotspot/share/gc/g1/collectionSetChooser.hpp
src/java.desktop/windows/native/libawt/windows/awt_Robot.h
test/hotspot/jtreg/serviceability/dcmd/framework/TEST.properties
test/jdk/sun/security/krb5/auto/rcache_usemd5.sh
test/jdk/sun/security/krb5/tools/ktarg.sh
test/jdk/sun/security/krb5/tools/ktcheck.sh
test/jdk/sun/security/krb5/tools/ktmissing.sh
test/jdk/sun/security/krb5/tools/ktzero.sh
--- a/.hgtags	Tue Feb 12 11:58:41 2019 -0500
+++ b/.hgtags	Wed Feb 13 13:22:15 2019 -0500
@@ -540,3 +540,5 @@
 44f41693631f9b5ac78ff4d2bfabd6734fe46df2 jdk-12+29
 b5f05fe4a6f8b3996a000c20078b356d991ca8ec jdk-13+6
 6c377af36a5c4203f16aed8a5e4c2ecc08fcd8bd jdk-12+30
+021917019cda1c0c5853255322274f37693a2431 jdk-13+7
+b5f7bb57de2f797be34f6c75d45c3245ad37ab97 jdk-12+31
--- a/make/Bundles.gmk	Tue Feb 12 11:58:41 2019 -0500
+++ b/make/Bundles.gmk	Wed Feb 13 13:22:15 2019 -0500
@@ -35,7 +35,7 @@
 # On Windows tar frequently complains that "file changed as we read it" for
 # some random source files. This seems to be cause by anti virus scanners and
 # is most likely safe to ignore. When it happens, tar returns '1'.
-ifeq ($(OPENJDK_BUILD_OS), windows)
+ifeq ($(call isBuildOs, windows), true)
   TAR_IGNORE_EXIT_VALUE := || test "$$$$?" = "1"
 endif
 
@@ -144,7 +144,7 @@
 
 # On Macosx, we bundle up the macosx specific images which already have the
 # correct base directories.
-ifeq ($(OPENJDK_TARGET_OS)-$(DEBUG_LEVEL), macosx-release)
+ifeq ($(call isTargetOs, macosx)+$(DEBUG_LEVEL), true+release)
   JDK_IMAGE_DIR := $(JDK_MACOSX_BUNDLE_DIR)
   JDK_IMAGE_HOMEDIR := $(JDK_MACOSX_CONTENTS_DIR)/Home
   JDK_BUNDLE_SUBDIR :=
@@ -167,7 +167,7 @@
 
   # Create special filter rules when dealing with unzipped .dSYM directories on
   # macosx
-  ifeq ($(OPENJDK_TARGET_OS), macosx)
+  ifeq ($(call isTargetOs, macosx), true)
     ifeq ($(ZIP_EXTERNAL_DEBUG_SYMBOLS), false)
       JDK_SYMBOLS_EXCLUDE_PATTERN := $(addprefix %, \
           $(call containing, .dSYM/, $(patsubst $(JDK_IMAGE_DIR)/%, %, $(ALL_JDK_FILES))))
--- a/make/CompileDemos.gmk	Tue Feb 12 11:58:41 2019 -0500
+++ b/make/CompileDemos.gmk	Wed Feb 13 13:22:15 2019 -0500
@@ -239,7 +239,7 @@
 	$(call install-file)
 	$(CHMOD) -f ug+w $@
 
-ifeq ($(OPENJDK_TARGET_OS), solaris)
+ifeq ($(call isTargetOs, solaris), true)
   TARGETS += $(patsubst $(DEMO_SHARE_SRC)/nbproject/%, \
     $(SUPPORT_OUTPUTDIR)/demos/image/nbproject/%, \
     $(call CacheFind, $(DEMO_SHARE_SRC)/nbproject))
--- a/make/CompileJavaModules.gmk	Tue Feb 12 11:58:41 2019 -0500
+++ b/make/CompileJavaModules.gmk	Wed Feb 13 13:22:15 2019 -0500
@@ -51,21 +51,18 @@
 # data files and shouldn't go in the product
 java.base_EXCLUDE_FILES += sun/text/resources/BreakIteratorRules.java
 
-ifneq ($(OPENJDK_TARGET_OS), solaris)
+ifeq ($(call isTargetOs, solaris), false)
   java.base_EXCLUDE_FILES += \
       SolarisLoginModule.java \
       SolarisSystem.java \
       #
 endif
 
-ifeq ($(filter $(OPENJDK_TARGET_OS), solaris macosx aix), )
-  #
-  # only solaris, macosx and aix
-  #
+ifeq ($(call isTargetOs, solaris macosx aix), false)
   java.base_EXCLUDE_FILES += sun/nio/fs/PollingWatchService.java
 endif
 
-ifeq ($(OPENJDK_TARGET_OS), windows)
+ifeq ($(call isTargetOs, windows), true)
   java.base_EXCLUDE_FILES += \
       sun/nio/ch/SimpleAsynchronousFileChannelImpl.java \
       #
@@ -124,7 +121,7 @@
     .template \
     #
 
-ifeq ($(OPENJDK_TARGET_OS), macosx)
+ifeq ($(call isTargetOs, macosx), true)
   # exclude all X11 on Mac.
   java.desktop_EXCLUDES += \
       sun/awt/X11 \
@@ -186,7 +183,7 @@
       sun/awt/X11/XwcTextItem.java
 endif
 
-ifeq ($(OPENJDK_TARGET_OS), windows)
+ifeq ($(call isTargetOs, windows), true)
   java.desktop_EXCLUDES += com/sun/java/swing/plaf/gtk
 endif
 
@@ -194,8 +191,7 @@
   java.desktop_EXCLUDES += sun/applet
 endif
 
-# Used on windows and macosx
-ifeq ($(filter $(OPENJDK_TARGET_OS), windows macosx), )
+ifeq ($(call isTargetOs, windows macosx), false)
   java.desktop_EXCLUDE_FILES += sun/awt/AWTCharset.java
 endif
 
@@ -374,11 +370,11 @@
     $(TOPDIR)/src/jdk.sctp/unix/classes/sun/nio/ch/sctp/SendFailed.java \
     $(TOPDIR)/src/jdk.sctp/unix/classes/sun/nio/ch/sctp/Shutdown.java
 
-ifeq ($(OPENJDK_TARGET_OS), macosx)
+ifeq ($(call isTargetOs, macosx), true)
   jdk.sctp_EXCLUDE_FILES += $(SCTP_IMPL_CLASSES)
 endif
 
-ifeq ($(OPENJDK_TARGET_OS),aix)
+ifeq ($(call isTargetOs, aix), true)
   jdk.sctp_EXCLUDE_FILES += $(SCTP_IMPL_CLASSES)
 endif
 
--- a/make/CopyImportModules.gmk	Tue Feb 12 11:58:41 2019 -0500
+++ b/make/CopyImportModules.gmk	Wed Feb 13 13:22:15 2019 -0500
@@ -38,7 +38,7 @@
 $(eval $(call FillCacheFind, $(LIBS_DIR) $(CMDS_DIR) $(CONF_DIR)))
 
 ifneq ($(LIBS_DIR), )
-  ifeq ($(OPENJDK_TARGET_OS), windows)
+  ifeq ($(call isTargetOs, windows), true)
     TO_BIN_FILTER := %$(SHARED_LIBRARY_SUFFIX) %.diz %.pdb %.map
 
     $(eval $(call SetupCopyFiles, COPY_LIBS_TO_BIN, \
--- a/make/CreateJmods.gmk	Tue Feb 12 11:58:41 2019 -0500
+++ b/make/CreateJmods.gmk	Wed Feb 13 13:22:15 2019 -0500
@@ -118,7 +118,7 @@
     endif
   endif
 else # not java.base
-  ifeq ($(OPENJDK_TARGET_OS), windows)
+  ifeq ($(call isTargetOs, windows), true)
     # Only java.base needs to include the MSVC*_DLLs. Make sure no other module
     # tries to include them (typically imported ones).
     ifneq ($(MSVCR_DLL), )
--- a/make/Images.gmk	Tue Feb 12 11:58:41 2019 -0500
+++ b/make/Images.gmk	Wed Feb 13 13:22:15 2019 -0500
@@ -144,7 +144,7 @@
       )
 
   ifeq ($(ZIP_EXTERNAL_DEBUG_SYMBOLS), true)
-    ifeq ($(OPENJDK_TARGET_OS), macosx)
+    ifeq ($(call isTargetOs, macosx), true)
       DEMO_FILES := $(call not-containing, .dSYM, $(DEMO_FILES))
     else
       DEMO_FILES := $(filter-out %.debuginfo %.pdb %.map, $(DEMO_FILES))
@@ -192,7 +192,7 @@
 ALL_JRE_MODULES := $(sort $(JRE_MODULES), $(foreach m, $(JRE_MODULES), \
     $(call FindTransitiveDepsForModule, $m)))
 
-ifeq ($(OPENJDK_TARGET_OS), windows)
+ifeq ($(call isTargetOs, windows), true)
   LIBS_TARGET_SUBDIR := bin
 else
   LIBS_TARGET_SUBDIR := lib
@@ -211,7 +211,7 @@
   DEBUGINFO_SUFFIXES := .debuginfo .pdb .map
   # On Macosx, if debug symbols have not been zipped, find all files inside *.dSYM
   # dirs.
-  ifeq ($(OPENJDK_TARGET_OS), macosx)
+  ifeq ($(call isTargetOs, macosx), true)
     $(eval $(call FillCacheFind, \
         $(SUPPORT_OUTPUTDIR)/modules_cmds $(SUPPORT_OUTPUTDIR)/modules_libs))
     FindDebuginfoFiles = \
--- a/make/Init.gmk	Tue Feb 12 11:58:41 2019 -0500
+++ b/make/Init.gmk	Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
 #
-# Copyright (c) 2012, 2018, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2012, 2019, 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
@@ -277,7 +277,7 @@
         else
 	  $(ECHO) "Re-running configure using default settings"
         endif
-	( cd $(OUTPUTDIR) && PATH="$(ORIGINAL_PATH)" \
+	( cd $(OUTPUTDIR) && PATH="$(ORIGINAL_PATH)" AUTOCONF="$(AUTOCONF)" \
 	    CUSTOM_ROOT="$(CUSTOM_ROOT)" \
 	    CUSTOM_CONFIG_DIR="$(CUSTOM_CONFIG_DIR)" \
 	    $(BASH) $(TOPDIR)/configure $(CONFIGURE_COMMAND_LINE) )
--- a/make/InitSupport.gmk	Tue Feb 12 11:58:41 2019 -0500
+++ b/make/InitSupport.gmk	Wed Feb 13 13:22:15 2019 -0500
@@ -483,7 +483,7 @@
 	    $(TOUCH) $(SJAVAC_SERVER_DIR)/server.port.stop; true
   endef
 
-  ifeq ($(OPENJDK_BUILD_OS), windows)
+  ifeq ($(call isBuildOs, windows), true)
     # On windows we need to synchronize with the javac server to be able to
     # move or remove the build output directory. Since we have no proper
     # synchronization process, wait for a while and hope it helps. This is only
--- a/make/MacBundles.gmk	Tue Feb 12 11:58:41 2019 -0500
+++ b/make/MacBundles.gmk	Wed Feb 13 13:22:15 2019 -0500
@@ -30,7 +30,7 @@
 default: bundles
 
 # Only macosx has bundles defined.
-ifeq ($(OPENJDK_TARGET_OS), macosx)
+ifeq ($(call isTargetOs, macosx), true)
 
   bundles: jre-bundle jdk-bundle
 
--- a/make/Main.gmk	Tue Feb 12 11:58:41 2019 -0500
+++ b/make/Main.gmk	Wed Feb 13 13:22:15 2019 -0500
@@ -1032,7 +1032,7 @@
   endif
 endif
 
-ifeq ($(OPENJDK_TARGET_OS), macosx)
+ifeq ($(call isTargetOs, macosx), true)
   product-images: mac-jdk-bundle
 endif
 
--- a/make/ModuleWrapper.gmk	Tue Feb 12 11:58:41 2019 -0500
+++ b/make/ModuleWrapper.gmk	Wed Feb 13 13:22:15 2019 -0500
@@ -42,7 +42,7 @@
 include $(MAKEFILE_PREFIX)-$(MODULE).gmk
 
 # Setup copy rules from the modules directories to the jdk image directory.
-ifeq ($(OPENJDK_TARGET_OS), windows)
+ifeq ($(call isTargetOs, windows), true)
   TO_BIN_FILTER := %$(SHARED_LIBRARY_SUFFIX) %.diz %.pdb %.map
 
   $(eval $(call SetupCopyFiles, COPY_LIBS_TO_BIN, \
--- a/make/RunTests.gmk	Tue Feb 12 11:58:41 2019 -0500
+++ b/make/RunTests.gmk	Wed Feb 13 13:22:15 2019 -0500
@@ -61,7 +61,7 @@
 endef
 
 # Setup _NT_SYMBOL_PATH on Windows
-ifeq ($(OPENJDK_TARGET_OS), windows)
+ifeq ($(call isTargetOs, windows), true)
   ifndef _NT_SYMBOL_PATH
     # Can't use PathList here as it adds quotes around the value.
     _NT_SYMBOL_PATH := \
@@ -224,7 +224,7 @@
 
 ifeq ($(TEST_JOBS), 0)
   CORES_DIVIDER := 2
-  ifeq ($(OPENJDK_TARGET_CPU_ARCH), sparc)
+  ifeq ($(call isTargetCpuArch, sparc), true)
     # For smaller SPARC machines we see reasonable scaling of throughput up to
     # cpus/4 without affecting test reliability. On the bigger machines, cpus/4
     # causes intermittent timeouts.
@@ -808,7 +808,7 @@
   $1_JTREG_MAX_RAM_PERCENTAGE := $$(shell $$(EXPR) 25 / $$($1_JTREG_JOBS))
 
   # SPARC is in general slower per core so need to scale up timeouts a bit.
-  ifeq ($(OPENJDK_TARGET_CPU_ARCH), sparc)
+  ifeq ($(call isTargetCpuArch, sparc), true)
     JTREG_TIMEOUT_FACTOR ?= 8
   else
     JTREG_TIMEOUT_FACTOR ?= 4
@@ -835,7 +835,7 @@
   $1_JTREG_BASIC_OPTIONS += -e:JDK8_HOME=$$(BOOT_JDK)
   # If running on Windows, propagate the _NT_SYMBOL_PATH to enable
   # symbol lookup in hserr files
-  ifeq ($$(OPENJDK_TARGET_OS), windows)
+  ifeq ($$(call isTargetOs, windows), true)
     $1_JTREG_BASIC_OPTIONS += -e:_NT_SYMBOL_PATH
   endif
 
--- a/make/TestImage.gmk	Tue Feb 12 11:58:41 2019 -0500
+++ b/make/TestImage.gmk	Wed Feb 13 13:22:15 2019 -0500
@@ -30,7 +30,7 @@
 
 ############################################################################
 
-ifeq ($(OPENJDK_TARGET_OS), windows)
+ifeq ($(call isTargetOs, windows), true)
   FIXPATH_COPY := $(TEST_IMAGE_DIR)/bin/fixpath.exe
 
   $(FIXPATH_COPY): $(firstword $(FIXPATH))
--- a/make/ZipSecurity.gmk	Tue Feb 12 11:58:41 2019 -0500
+++ b/make/ZipSecurity.gmk	Wed Feb 13 13:22:15 2019 -0500
@@ -70,7 +70,7 @@
 #
 # Windows specific binary security packages.
 #
-ifeq ($(OPENJDK_TARGET_OS), windows)
+ifeq ($(call isTargetOs, windows), true)
   # sec-windows-bin.zip is used by builds where the corresponding sources are not available
   $(eval $(call SetupZipArchive,BUILD_SEC_WINDOWS_BIN_ZIP, \
       SRC := $(JDK_OUTPUTDIR), \
@@ -80,7 +80,7 @@
   TARGETS += $(IMAGES_OUTPUTDIR)/sec-windows-bin.zip
 
   # JGSS files contain the native Kerberos library
-  ifeq ($(OPENJDK_TARGET_CPU), x86_64)
+  ifeq ($(call isTargetCpu, x86_64), true)
     JGSS_ZIP_NAME = jgss-windows-x64-bin.zip
   else
     JGSS_ZIP_NAME = jgss-windows-i586-bin.zip
--- a/make/autoconf/basics.m4	Tue Feb 12 11:58:41 2019 -0500
+++ b/make/autoconf/basics.m4	Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
 #
-# Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2011, 2019, 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
@@ -406,6 +406,8 @@
 [
   # Save the original command line. This is passed to us by the wrapper configure script.
   AC_SUBST(CONFIGURE_COMMAND_LINE)
+  # AUTOCONF might be set in the environment by the user. Preserve for "make reconfigure".
+  AC_SUBST(AUTOCONF)
   # Save the path variable before it gets changed
   ORIGINAL_PATH="$PATH"
   AC_SUBST(ORIGINAL_PATH)
--- a/make/autoconf/spec.gmk.in	Tue Feb 12 11:58:41 2019 -0500
+++ b/make/autoconf/spec.gmk.in	Wed Feb 13 13:22:15 2019 -0500
@@ -36,6 +36,9 @@
 # A self-referential reference to this file.
 SPEC:=@SPEC@
 
+# Path to autoconf if overriden by the user, to be used by "make reconfigure"
+AUTOCONF := @AUTOCONF@
+
 # SPACE and COMMA are defined in MakeBase.gmk, but they are also used in
 # some definitions here, and are needed if MakeBase.gmk is not included before
 # this file.
--- a/make/common/MakeBase.gmk	Tue Feb 12 11:58:41 2019 -0500
+++ b/make/common/MakeBase.gmk	Wed Feb 13 13:22:15 2019 -0500
@@ -258,7 +258,7 @@
 ################################################################################
 # All install-file and related macros automatically call DecodeSpace when needed.
 
-ifeq ($(OPENJDK_TARGET_OS),solaris)
+ifeq ($(call isTargetOs, solaris), true)
   # On Solaris, if the target is a symlink and exists, cp won't overwrite.
   # Cp has to operate in recursive mode to allow for -P flag, to preserve soft links. If the
   # name of the target file differs from the source file, rename after copy.
@@ -284,7 +284,7 @@
 	  $(CP) -f '$(call DecodeSpace, $<)' '$(call DecodeSpace, $@)'; \
 	fi
   endef
-else ifeq ($(OPENJDK_TARGET_OS),macosx)
+else ifeq ($(call isTargetOs, macosx), true)
   # On mac, extended attributes sometimes creep into the source files, which may later
   # cause the creation of ._* files which confuses testing. Clear these with xattr if
   # set. Some files get their write permissions removed after being copied to the
@@ -418,7 +418,7 @@
 # unchanged.
 # This is normally not needed since we use the FIXPATH prefix for command lines,
 # but might be needed in certain circumstances.
-ifeq ($(OPENJDK_TARGET_OS), windows)
+ifeq ($(call isTargetOs, windows), true)
   FixPath = \
       $(shell $(CYGPATH) -m $1)
 else
--- a/make/common/Modules.gmk	Tue Feb 12 11:58:41 2019 -0500
+++ b/make/common/Modules.gmk	Wed Feb 13 13:22:15 2019 -0500
@@ -117,11 +117,11 @@
     jdk.zipfs \
     #
 
-ifeq ($(OPENJDK_TARGET_OS), windows)
+ifeq ($(call isTargetOs, windows), true)
   PLATFORM_MODULES += jdk.crypto.mscapi
 endif
 
-ifeq ($(OPENJDK_TARGET_OS), solaris)
+ifeq ($(call isTargetOs, solaris), true)
   PLATFORM_MODULES += jdk.crypto.ucrypto
 endif
 
--- a/make/common/NativeCompilation.gmk	Tue Feb 12 11:58:41 2019 -0500
+++ b/make/common/NativeCompilation.gmk	Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
 #
-# Copyright (c) 2011, 2019, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2011, 2018, 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
@@ -175,9 +175,9 @@
 )
 endef
 
-ifeq ($(OPENJDK_BUILD_OS_ENV), windows.cygwin)
+ifeq ($(call isBuildOsEnv, windows.cygwin), true)
   UNIX_PATH_PREFIX := /cygdrive
-else ifeq ($(OPENJDK_BUILD_OS_ENV), windows.msys)
+else ifeq ($(call isBuildOsEnv, windows.msys), true)
   UNIX_PATH_PREFIX :=
 endif
 
@@ -390,7 +390,6 @@
 #   ARFLAGS the archiver flags to be used
 #   OBJECT_DIR the directory where we store the object files
 #   OUTPUT_DIR the directory where the resulting binary is put
-#   SYMBOLS_DIR the directory where the debug symbols are put, defaults to OUTPUT_DIR
 #   INCLUDES only pick source from these directories
 #   EXCLUDES do not pick source from these directories
 #   INCLUDE_FILES only compile exactly these files!
@@ -501,6 +500,8 @@
   $$(call SetIfEmpty, $1_SYSROOT_CFLAGS, $$($$($1_TOOLCHAIN)_SYSROOT_CFLAGS))
   $$(call SetIfEmpty, $1_SYSROOT_LDFLAGS, $$($$($1_TOOLCHAIN)_SYSROOT_LDFLAGS))
 
+  # Make sure the dirs exist.
+  $$(call MakeDir, $$($1_OBJECT_DIR) $$($1_OUTPUT_DIR))
   $$(foreach d, $$($1_SRC), $$(if $$(wildcard $$d), , \
       $$(error SRC specified to SetupNativeCompilation $1 contains missing directory $$d)))
 
@@ -769,7 +770,7 @@
 	$(TOUCH) $$@
 
   # On windows we need to create a resource file
-  ifeq ($(OPENJDK_TARGET_OS), windows)
+  ifeq ($(call isTargetOs, windows), true)
     ifneq ($$($1_VERSIONINFO_RESOURCE), )
       $1_RES := $$($1_OBJECT_DIR)/$$($1_BASENAME).res
       $1_RES_DEP := $$($1_RES).d
@@ -807,7 +808,7 @@
 
   ifneq ($(DISABLE_MAPFILES), true)
     $1_REAL_MAPFILE := $$($1_MAPFILE)
-    ifneq ($(OPENJDK_TARGET_OS), windows)
+    ifeq ($(call isTargetOs, windows), false)
       ifneq ($$($1_REORDER), )
         $1_REAL_MAPFILE := $$($1_OBJECT_DIR)/mapfile
 
@@ -841,32 +842,31 @@
 
   ifeq ($$($1_COPY_DEBUG_SYMBOLS), true)
     ifneq ($$($1_DEBUG_SYMBOLS), false)
-      $$(call SetIfEmpty, $1_SYMBOLS_DIR, $$($1_OUTPUT_DIR))
       # Only copy debug symbols for dynamic libraries and programs.
       ifneq ($$($1_TYPE), STATIC_LIBRARY)
         # Generate debuginfo files.
-        ifeq ($(OPENJDK_TARGET_OS), windows)
-          $1_EXTRA_LDFLAGS += -debug "-pdb:$$($1_SYMBOLS_DIR)/$$($1_NOSUFFIX).pdb" \
-              "-map:$$($1_SYMBOLS_DIR)/$$($1_NOSUFFIX).map"
-          $1_DEBUGINFO_FILES := $$($1_SYMBOLS_DIR)/$$($1_NOSUFFIX).pdb \
-              $$($1_SYMBOLS_DIR)/$$($1_NOSUFFIX).map
+        ifeq ($(call isTargetOs, windows), true)
+          $1_EXTRA_LDFLAGS += -debug "-pdb:$$($1_OUTPUT_DIR)/$$($1_NOSUFFIX).pdb" \
+              "-map:$$($1_OUTPUT_DIR)/$$($1_NOSUFFIX).map"
+          $1_DEBUGINFO_FILES := $$($1_OUTPUT_DIR)/$$($1_NOSUFFIX).pdb \
+              $$($1_OUTPUT_DIR)/$$($1_NOSUFFIX).map
 
-        else ifneq ($(findstring $(OPENJDK_TARGET_OS), linux solaris), )
-          $1_DEBUGINFO_FILES := $$($1_SYMBOLS_DIR)/$$($1_NOSUFFIX).debuginfo
+        else ifeq ($(call isTargetOs, linux solaris), true)
+          $1_DEBUGINFO_FILES := $$($1_OUTPUT_DIR)/$$($1_NOSUFFIX).debuginfo
           # Setup the command line creating debuginfo files, to be run after linking.
           # It cannot be run separately since it updates the original target file
           $1_CREATE_DEBUGINFO_CMDS := \
               $$($1_OBJCOPY) --only-keep-debug $$($1_TARGET) $$($1_DEBUGINFO_FILES) $$(NEWLINE) \
-              $(CD) $$($1_SYMBOLS_DIR) && \
+              $(CD) $$($1_OUTPUT_DIR) && \
                   $$($1_OBJCOPY) --add-gnu-debuglink=$$($1_DEBUGINFO_FILES) $$($1_TARGET)
 
-        else ifeq ($(OPENJDK_TARGET_OS), macosx)
+        else ifeq ($(call isTargetOs, macosx), true)
           $1_DEBUGINFO_FILES := \
-              $$($1_SYMBOLS_DIR)/$$($1_BASENAME).dSYM/Contents/Info.plist \
-              $$($1_SYMBOLS_DIR)/$$($1_BASENAME).dSYM/Contents/Resources/DWARF/$$($1_BASENAME)
+              $$($1_OUTPUT_DIR)/$$($1_BASENAME).dSYM/Contents/Info.plist \
+              $$($1_OUTPUT_DIR)/$$($1_BASENAME).dSYM/Contents/Resources/DWARF/$$($1_BASENAME)
           $1_CREATE_DEBUGINFO_CMDS := \
-              $(DSYMUTIL) --out $$($1_SYMBOLS_DIR)/$$($1_BASENAME).dSYM $$($1_TARGET)
-        endif # OPENJDK_TARGET_OS
+              $(DSYMUTIL) --out $$($1_OUTPUT_DIR)/$$($1_BASENAME).dSYM $$($1_TARGET)
+        endif
 
         # Since the link rule creates more than one file that we want to track,
         # we have to use some tricks to get make to cooperate. To properly
@@ -887,14 +887,14 @@
         $1 += $$($1_DEBUGINFO_FILES)
 
         ifeq ($$($1_ZIP_EXTERNAL_DEBUG_SYMBOLS), true)
-          $1_DEBUGINFO_ZIP := $$($1_SYMBOLS_DIR)/$$($1_NOSUFFIX).diz
+          $1_DEBUGINFO_ZIP := $$($1_OUTPUT_DIR)/$$($1_NOSUFFIX).diz
           $1 += $$($1_DEBUGINFO_ZIP)
 
           # The dependency on TARGET is needed for debuginfo files
           # to be rebuilt properly.
           $$($1_DEBUGINFO_ZIP): $$($1_DEBUGINFO_FILES) $$($1_TARGET)
-		$(CD) $$($1_SYMBOLS_DIR) && \
-		    $(ZIPEXE) -q -r $$@ $$(subst $$($1_SYMBOLS_DIR)/,, $$($1_DEBUGINFO_FILES))
+		$(CD) $$($1_OUTPUT_DIR) && \
+		    $(ZIPEXE) -q -r $$@ $$(subst $$($1_OUTPUT_DIR)/,, $$($1_DEBUGINFO_FILES))
 
         endif
        endif # !STATIC_LIBRARY
@@ -930,7 +930,6 @@
 
     $$($1_TARGET): $$($1_TARGET_DEPS)
 	$$(call LogInfo, Building static library $$($1_BASENAME))
-	$$(call MakeDir, $$($1_OUTPUT_DIR) $$($1_SYMBOLS_DIR))
 	$$(call ExecuteWithLog, $$($1_OBJECT_DIR)/$$($1_SAFE_NAME)_link, \
 	    $$($1_AR) $$($1_ARFLAGS) $(AR_OUT_OPTION)$$($1_TARGET) $$($1_ALL_OBJS) \
 	        $$($1_RES))
@@ -953,7 +952,7 @@
       endif
     endif
 
-    ifeq ($(OPENJDK_TARGET_OS), windows)
+    ifeq ($(call isTargetOs, windows), true)
       ifeq ($$($1_EMBED_MANIFEST), true)
         $1_EXTRA_LDFLAGS += -manifest:embed
       endif
@@ -1033,8 +1032,7 @@
                 # Keep as much as possible on one execution line for best performance
                 # on Windows
 		$$(call LogInfo, Linking $$($1_BASENAME))
-		$$(call MakeDir, $$($1_OUTPUT_DIR) $$($1_SYMBOLS_DIR))
-                ifeq ($(OPENJDK_TARGET_OS), windows)
+                ifeq ($(call isTargetOs, windows), true)
 		  $$(call ExecuteWithLog, $$($1_OBJECT_DIR)/$$($1_SAFE_NAME)_link, \
 		      $$($1_LD) $$($1_LDFLAGS) $$($1_EXTRA_LDFLAGS) $$($1_SYSROOT_LDFLAGS) \
 		          $(LD_OUT_OPTION)$$($1_TARGET) $$($1_LD_OBJ_ARG) $$($1_RES) $$(GLOBAL_LIBS) \
@@ -1052,7 +1050,7 @@
 		  $$($1_CREATE_DEBUGINFO_CMDS)
 		  $$($1_STRIP_CMD)
                 endif
-                ifeq ($(OPENJDK_TARGET_OS), windows)
+                ifeq ($(call isTargetOs, windows), true)
                   ifneq ($$($1_MANIFEST), )
 		    $$($1_MT) -nologo -manifest $$($1_MANIFEST) -identity:"$$($1_NAME).exe, version=$$($1_MANIFEST_VERSION)" -outputresource:$$@;#1
                   endif
--- a/make/common/Utils.gmk	Tue Feb 12 11:58:41 2019 -0500
+++ b/make/common/Utils.gmk	Wed Feb 13 13:22:15 2019 -0500
@@ -181,6 +181,23 @@
   )
 
 ################################################################################
+# Boolean operators.
+
+# Return the word "true" if all the boolean words given as argument is "true",
+# and returns "false" otherwise. Boolean words must be "true" or "false". It is
+# an error to supply a non-boolean word. An empty string is considered "true".
+And = \
+  $(strip $(if $(filter-out true false, $1), $(error Non-boolean values: $1)) \
+  $(if $(strip $(filter-out true, $1)), false, true))
+
+# Return the word "false" if all the boolean words given as argument is "false",
+# and returns "true" otherwise. Boolean words must be "true" or "false". It is
+# an error to supply a non-boolean word.  An empty string is considered "false".
+Or = \
+  $(strip $(if $(filter-out true false, $1), $(error Non-boolean values: $1)) \
+  $(if $(strip $(filter-out false, $1)), true, false))
+
+################################################################################
 # Parse a multiple-keyword variable, like FOO="KEYWORD1=val1;KEYWORD2=val2;..."
 # These will be converted into a series of variables like FOO_KEYWORD1=val1,
 # FOO_KEYWORD2=val2, etc. Unknown keywords will cause an error.
@@ -269,6 +286,50 @@
     $(if $(filter $1, $(JVM_VARIANTS)), true, false))
 
 ################################################################################
+# Check if our build or target conforms to certain restrictions. This set of
+# functions all work in similar ways, testing the property that the name
+# implies, so e.g. isTargetCpu test the CPU of the target system.
+#
+# $1 - A property, or a space separated list of properties to test for.
+#
+# Returns true if the actual property matches one of the properties in the list,
+# and false otherwise.
+#
+# Examples: $(call isTargetOs, linux solaris) will return true when executed
+# on either linux or solaris, and false otherwise.
+# $(call isBuildCpuArch, x86) will return true iff the build CPU Arch is x86.
+
+isTargetOs = \
+  $(strip $(if $(filter $(OPENJDK_TARGET_OS), $1), true, false))
+
+isTargetOsType = \
+  $(strip $(if $(filter $(OPENJDK_TARGET_OS_TYPE), $1), true, false))
+
+isTargetCpu = \
+  $(strip $(if $(filter $(OPENJDK_TARGET_CPU), $1), true, false))
+
+isTargetCpuArch = \
+  $(strip $(if $(filter $(OPENJDK_TARGET_CPU_ARCH), $1), true, false))
+
+isTargetCpuBits = \
+  $(strip $(if $(filter $(OPENJDK_TARGET_CPU_BITS), $1), true, false))
+
+isBuildOs = \
+  $(strip $(if $(filter $(OPENJDK_BUILD_OS), $1), true, false))
+
+isBuildOsType = \
+  $(strip $(if $(filter $(OPENJDK_BUILD_OS_TYPE), $1), true, false))
+
+isBuildOsEnv = \
+  $(strip $(if $(filter $(OPENJDK_BUILD_OS_ENV), $1), true, false))
+
+isBuildCpu = \
+  $(strip $(if $(filter $(OPENJDK_BUILD_CPU), $1), true, false))
+
+isBuildCpuArch = \
+  $(strip $(if $(filter $(OPENJDK_BUILD_CPU_ARCH), $1), true, false))
+
+################################################################################
 # Converts a space separated list to a comma separated list.
 #
 # Replacing double-comma with a single comma is to workaround the issue with
--- a/make/conf/jib-profiles.js	Tue Feb 12 11:58:41 2019 -0500
+++ b/make/conf/jib-profiles.js	Wed Feb 13 13:22:15 2019 -0500
@@ -944,11 +944,17 @@
         },
 
         jcov: {
-            server: "jpg",
-            product: "jcov",
-            version: "3.0",
-            build_number: "b07",
-            file: "bundles/jcov-3_0.zip",
+            // Until an official build of JCov is available, use custom
+            // build to support classfile version 57.
+            // See CODETOOLS-7902358 for more info.
+            // server: "jpg",
+            // product: "jcov",
+            // version: "3.0",
+            // build_number: "b07",
+            // file: "bundles/jcov-3_0.zip",
+            organization: common.organization,
+            revision: "3.0-57-support+1.0",
+            ext: "zip",
             environment_name: "JCOV_HOME",
         },
 
--- a/make/copy/Copy-java.base.gmk	Tue Feb 12 11:58:41 2019 -0500
+++ b/make/copy/Copy-java.base.gmk	Wed Feb 13 13:22:15 2019 -0500
@@ -31,7 +31,7 @@
 
 ################################################################################
 
-ifeq ($(OPENJDK_TARGET_OS), aix)
+ifeq ($(call isTargetOs, aix), true)
 
   TZMAPPINGS_SRC := $(TOPDIR)/src/java.base/$(OPENJDK_TARGET_OS)/conf
 
@@ -44,7 +44,7 @@
 
 ################################################################################
 # Copy the microsoft runtime libraries on windows
-ifeq ($(OPENJDK_TARGET_OS), windows)
+ifeq ($(call isTargetOs, windows), true)
 
   # Chmod to avoid permission issues if bundles are unpacked on unix platforms.
   define copy-and-chmod
@@ -81,7 +81,7 @@
 ################################################################################
 # In jvm.cfg, the first listed KNOWN variant is the default. On most build
 # configurations, that is the server variant.
-ifeq ($(OPENJDK_TARGET_OS)-$(OPENJDK_TARGET_CPU), windows-x86)
+ifeq ($(call And, $(call isTargetOs, windows) $(call isTargetCpu, x86)), true)
   DEFAULT_CFG_VARIANT ?= client
 endif
 DEFAULT_CFG_VARIANT ?= server
@@ -143,7 +143,7 @@
 DEF_POLICY_SRC_LIST := $(DEF_POLICY_SRC)
 DEF_POLICY_SRC_LIST += $(CUSTOM_POLICY_SRC_LIST)
 
-ifneq ($(filter $(OPENJDK_TARGET_OS), windows solaris), )
+ifeq ($(call isTargetOs, windows solaris), true)
   DEF_POLICY_SRC_LIST += $(TOPDIR)/src/java.base/$(OPENJDK_TARGET_OS)/lib/security/default.policy
 endif
 
@@ -183,7 +183,7 @@
 
 TARGETS += $(COPY_NET_PROPERTIES)
 
-ifneq ($(filter $(OPENJDK_TARGET_OS), solaris linux), )
+ifeq ($(call isTargetOs, solaris linux), true)
   $(eval $(call SetupCopyFiles, COPY_SDP_CONF, \
       FILES := $(TOPDIR)/src/java.base/$(OPENJDK_TARGET_OS_TYPE)/conf/sdp/sdp.conf.template, \
       DEST := $(CONF_DST_DIR)/sdp, \
--- a/make/copy/Copy-jdk.crypto.cryptoki.gmk	Tue Feb 12 11:58:41 2019 -0500
+++ b/make/copy/Copy-jdk.crypto.cryptoki.gmk	Wed Feb 13 13:22:15 2019 -0500
@@ -27,7 +27,7 @@
 
 ################################################################################
 
-ifeq ($(OPENJDK_TARGET_OS), solaris)
+ifeq ($(call isTargetOs, solaris), true)
 
   SUNPKCS11_CFG_SRC := \
       $(TOPDIR)/src/jdk.crypto.cryptoki/solaris/conf/security/sunpkcs11-solaris.cfg
--- a/make/copy/Copy-jdk.crypto.ucrypto.gmk	Tue Feb 12 11:58:41 2019 -0500
+++ b/make/copy/Copy-jdk.crypto.ucrypto.gmk	Wed Feb 13 13:22:15 2019 -0500
@@ -27,7 +27,7 @@
 
 ################################################################################
 
-ifeq ($(OPENJDK_TARGET_OS), solaris)
+ifeq ($(call isTargetOs, solaris), true)
 
   UCRYPTO_CFG_SRC := $(TOPDIR)/src/jdk.crypto.ucrypto/solaris/conf/security/ucrypto-solaris.cfg
   UCRYPTO_CFG_DST := $(CONF_DST_DIR)/security/ucrypto-solaris.cfg
--- a/make/data/symbols/README	Tue Feb 12 11:58:41 2019 -0500
+++ b/make/data/symbols/README	Wed Feb 13 13:22:15 2019 -0500
@@ -1,3 +1,3 @@
 This directory contains history data for -release.
 
-Please see $LANGTOOLS_DIR/make/src/classes/build/tools/symbolgenerator/CreateSymbols.java for main usage.
+Please see $JDK_TOP_DIR/make/scripts/generate-symbol-data.sh for main usage.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/make/data/symbols/java.base-C.sym.txt	Wed Feb 13 13:22:15 2019 -0500
@@ -0,0 +1,636 @@
+#
+# Copyright (c) 2019, 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 FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. ###
+# ##########################################################
+#
+module name java.base
+header exports java/io,java/lang,java/lang/annotation,java/lang/constant,java/lang/invoke,java/lang/module,java/lang/ref,java/lang/reflect,java/math,java/net,java/net/spi,java/nio,java/nio/channels,java/nio/channels/spi,java/nio/charset,java/nio/charset/spi,java/nio/file,java/nio/file/attribute,java/nio/file/spi,java/security,java/security/acl,java/security/cert,java/security/interfaces,java/security/spec,java/text,java/text/spi,java/time,java/time/chrono,java/time/format,java/time/temporal,java/time/zone,java/util,java/util/concurrent,java/util/concurrent/atomic,java/util/concurrent/locks,java/util/function,java/util/jar,java/util/regex,java/util/spi,java/util/stream,java/util/zip,javax/crypto,javax/crypto/interfaces,javax/crypto/spec,javax/net,javax/net/ssl,javax/security/auth,javax/security/auth/callback,javax/security/auth/login,javax/security/auth/spi,javax/security/auth/x500,javax/security/cert uses java/lang/System$LoggerFinder,java/net/ContentHandlerFactory,java/net/spi/URLStreamHandlerProvider,java/nio/channels/spi/AsynchronousChannelProvider,java/nio/channels/spi/SelectorProvider,java/nio/charset/spi/CharsetProvider,java/nio/file/spi/FileSystemProvider,java/nio/file/spi/FileTypeDetector,java/security/Provider,java/text/spi/BreakIteratorProvider,java/text/spi/CollatorProvider,java/text/spi/DateFormatProvider,java/text/spi/DateFormatSymbolsProvider,java/text/spi/DecimalFormatSymbolsProvider,java/text/spi/NumberFormatProvider,java/time/chrono/AbstractChronology,java/time/chrono/Chronology,java/time/zone/ZoneRulesProvider,java/util/spi/CalendarDataProvider,java/util/spi/CalendarNameProvider,java/util/spi/CurrencyNameProvider,java/util/spi/LocaleNameProvider,java/util/spi/ResourceBundleControlProvider,java/util/spi/ResourceBundleProvider,java/util/spi/TimeZoneNameProvider,java/util/spi/ToolProvider,javax/security/auth/spi/LoginModule,jdk/internal/logger/DefaultLoggerFinder,sun/text/spi/JavaTimeDateTimePatternProvider,sun/util/locale/provider/LocaleDataMetaInfo,sun/util/resources/LocaleData$CommonResourceBundleProvider,sun/util/resources/LocaleData$SupplementaryResourceBundleProvider,sun/util/spi/CalendarProvider provides interface\u0020;java/nio/file/spi/FileSystemProvider\u0020;impls\u0020;jdk/internal/jrtfs/JrtFileSystemProvider target linux-amd64 flags 8000
+
+class name java/io/FileInputStream
+-method name finalize descriptor ()V
+
+class name java/io/FileOutputStream
+-method name finalize descriptor ()V
+
+class name java/io/InputStream
+method name skipNBytes descriptor (J)V thrownTypes java/io/IOException flags 1
+
+class name java/lang/Character$UnicodeBlock
+field name GEORGIAN_EXTENDED descriptor Ljava/lang/Character$UnicodeBlock; flags 19
+field name HANIFI_ROHINGYA descriptor Ljava/lang/Character$UnicodeBlock; flags 19
+field name OLD_SOGDIAN descriptor Ljava/lang/Character$UnicodeBlock; flags 19
+field name SOGDIAN descriptor Ljava/lang/Character$UnicodeBlock; flags 19
+field name DOGRA descriptor Ljava/lang/Character$UnicodeBlock; flags 19
+field name GUNJALA_GONDI descriptor Ljava/lang/Character$UnicodeBlock; flags 19
+field name MAKASAR descriptor Ljava/lang/Character$UnicodeBlock; flags 19
+field name MEDEFAIDRIN descriptor Ljava/lang/Character$UnicodeBlock; flags 19
+field name MAYAN_NUMERALS descriptor Ljava/lang/Character$UnicodeBlock; flags 19
+field name INDIC_SIYAQ_NUMBERS descriptor Ljava/lang/Character$UnicodeBlock; flags 19
+field name CHESS_SYMBOLS descriptor Ljava/lang/Character$UnicodeBlock; flags 19
+
+class name java/lang/Character$UnicodeScript
+field name HANIFI_ROHINGYA descriptor Ljava/lang/Character$UnicodeScript; flags 4019
+field name OLD_SOGDIAN descriptor Ljava/lang/Character$UnicodeScript; flags 4019
+field name SOGDIAN descriptor Ljava/lang/Character$UnicodeScript; flags 4019
+field name DOGRA descriptor Ljava/lang/Character$UnicodeScript; flags 4019
+field name GUNJALA_GONDI descriptor Ljava/lang/Character$UnicodeScript; flags 4019
+field name MAKASAR descriptor Ljava/lang/Character$UnicodeScript; flags 4019
+field name MEDEFAIDRIN descriptor Ljava/lang/Character$UnicodeScript; flags 4019
+
+class name java/lang/Class
+header extends java/lang/Object implements java/io/Serializable,java/lang/reflect/GenericDeclaration,java/lang/reflect/Type,java/lang/reflect/AnnotatedElement,java/lang/invoke/TypeDescriptor$OfField,java/lang/constant/Constable flags 31 signature <T:Ljava/lang/Object;>Ljava/lang/Object;Ljava/io/Serializable;Ljava/lang/reflect/GenericDeclaration;Ljava/lang/reflect/Type;Ljava/lang/reflect/AnnotatedElement;Ljava/lang/invoke/TypeDescriptor$OfField<Ljava/lang/Class<*>;>;Ljava/lang/constant/Constable;
+innerclass innerClass java/util/Map$Entry outerClass java/util/Map innerClassName Entry flags 609
+innerclass innerClass java/lang/invoke/TypeDescriptor$OfField outerClass java/lang/invoke/TypeDescriptor innerClassName OfField flags 609
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+method name descriptorString descriptor ()Ljava/lang/String; flags 1
+method name componentType descriptor ()Ljava/lang/Class; flags 1 signature ()Ljava/lang/Class<*>;
+method name arrayType descriptor ()Ljava/lang/Class; flags 1 signature ()Ljava/lang/Class<*>;
+method name describeConstable descriptor ()Ljava/util/Optional; flags 1 signature ()Ljava/util/Optional<Ljava/lang/constant/ClassDesc;>;
+method name arrayType descriptor ()Ljava/lang/invoke/TypeDescriptor$OfField; flags 1041
+method name componentType descriptor ()Ljava/lang/invoke/TypeDescriptor$OfField; flags 1041
+
+class name java/lang/ClassNotFoundException
+header extends java/lang/ReflectiveOperationException flags 21
+innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409
+innerclass innerClass java/io/ObjectOutputStream$PutField outerClass java/io/ObjectOutputStream innerClassName PutField flags 409
+-method name getCause descriptor ()Ljava/lang/Throwable;
+
+class name java/lang/Double
+header extends java/lang/Number implements java/lang/Comparable,java/lang/constant/Constable,java/lang/constant/ConstantDesc flags 31 signature Ljava/lang/Number;Ljava/lang/Comparable<Ljava/lang/Double;>;Ljava/lang/constant/Constable;Ljava/lang/constant/ConstantDesc;
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+method name describeConstable descriptor ()Ljava/util/Optional; flags 1 signature ()Ljava/util/Optional<Ljava/lang/Double;>;
+method name resolveConstantDesc descriptor (Ljava/lang/invoke/MethodHandles$Lookup;)Ljava/lang/Double; flags 1
+method name resolveConstantDesc descriptor (Ljava/lang/invoke/MethodHandles$Lookup;)Ljava/lang/Object; thrownTypes java/lang/ReflectiveOperationException flags 1041
+
+class name java/lang/Enum
+header extends java/lang/Object implements java/lang/constant/Constable,java/lang/Comparable,java/io/Serializable nestMembers java/lang/Enum$EnumDesc flags 421 signature <E:Ljava/lang/Enum<TE;>;>Ljava/lang/Object;Ljava/lang/constant/Constable;Ljava/lang/Comparable<TE;>;Ljava/io/Serializable;
+innerclass innerClass java/lang/Enum$EnumDesc outerClass java/lang/Enum innerClassName EnumDesc flags 19
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+method name describeConstable descriptor ()Ljava/util/Optional; flags 11 signature ()Ljava/util/Optional<Ljava/lang/Enum$EnumDesc<TE;>;>;
+
+class name java/lang/Enum$EnumDesc
+header extends java/lang/constant/DynamicConstantDesc nestHost java/lang/Enum flags 31 signature <E:Ljava/lang/Enum<TE;>;>Ljava/lang/constant/DynamicConstantDesc<TE;>;
+innerclass innerClass java/lang/Enum$EnumDesc outerClass java/lang/Enum innerClassName EnumDesc flags 19
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+method name of descriptor (Ljava/lang/constant/ClassDesc;Ljava/lang/String;)Ljava/lang/Enum$EnumDesc; flags 9 signature <E:Ljava/lang/Enum<TE;>;>(Ljava/lang/constant/ClassDesc;Ljava/lang/String;)Ljava/lang/Enum$EnumDesc<TE;>;
+method name resolveConstantDesc descriptor (Ljava/lang/invoke/MethodHandles$Lookup;)Ljava/lang/Enum; thrownTypes java/lang/ReflectiveOperationException flags 1 signature (Ljava/lang/invoke/MethodHandles$Lookup;)TE;
+method name toString descriptor ()Ljava/lang/String; flags 1
+method name resolveConstantDesc descriptor (Ljava/lang/invoke/MethodHandles$Lookup;)Ljava/lang/Object; thrownTypes java/lang/ReflectiveOperationException flags 1041
+
+class name java/lang/ExceptionInInitializerError
+header extends java/lang/LinkageError flags 21
+innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409
+innerclass innerClass java/io/ObjectOutputStream$PutField outerClass java/io/ObjectOutputStream innerClassName PutField flags 409
+-method name getCause descriptor ()Ljava/lang/Throwable;
+
+class name java/lang/Float
+header extends java/lang/Number implements java/lang/Comparable,java/lang/constant/Constable,java/lang/constant/ConstantDesc flags 31 signature Ljava/lang/Number;Ljava/lang/Comparable<Ljava/lang/Float;>;Ljava/lang/constant/Constable;Ljava/lang/constant/ConstantDesc;
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+method name describeConstable descriptor ()Ljava/util/Optional; flags 1 signature ()Ljava/util/Optional<Ljava/lang/Float;>;
+method name resolveConstantDesc descriptor (Ljava/lang/invoke/MethodHandles$Lookup;)Ljava/lang/Float; flags 1
+method name resolveConstantDesc descriptor (Ljava/lang/invoke/MethodHandles$Lookup;)Ljava/lang/Object; thrownTypes java/lang/ReflectiveOperationException flags 1041
+
+class name java/lang/Integer
+header extends java/lang/Number implements java/lang/Comparable,java/lang/constant/Constable,java/lang/constant/ConstantDesc flags 31 signature Ljava/lang/Number;Ljava/lang/Comparable<Ljava/lang/Integer;>;Ljava/lang/constant/Constable;Ljava/lang/constant/ConstantDesc;
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+method name describeConstable descriptor ()Ljava/util/Optional; flags 1 signature ()Ljava/util/Optional<Ljava/lang/Integer;>;
+method name resolveConstantDesc descriptor (Ljava/lang/invoke/MethodHandles$Lookup;)Ljava/lang/Integer; flags 1
+method name resolveConstantDesc descriptor (Ljava/lang/invoke/MethodHandles$Lookup;)Ljava/lang/Object; thrownTypes java/lang/ReflectiveOperationException flags 1041
+
+class name java/lang/Long
+header extends java/lang/Number implements java/lang/Comparable,java/lang/constant/Constable,java/lang/constant/ConstantDesc flags 31 signature Ljava/lang/Number;Ljava/lang/Comparable<Ljava/lang/Long;>;Ljava/lang/constant/Constable;Ljava/lang/constant/ConstantDesc;
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+method name describeConstable descriptor ()Ljava/util/Optional; flags 1 signature ()Ljava/util/Optional<Ljava/lang/Long;>;
+method name resolveConstantDesc descriptor (Ljava/lang/invoke/MethodHandles$Lookup;)Ljava/lang/Long; flags 1
+method name resolveConstantDesc descriptor (Ljava/lang/invoke/MethodHandles$Lookup;)Ljava/lang/Object; thrownTypes java/lang/ReflectiveOperationException flags 1041
+
+class name java/lang/String
+header extends java/lang/Object implements java/io/Serializable,java/lang/Comparable,java/lang/CharSequence,java/lang/constant/Constable,java/lang/constant/ConstantDesc flags 31 signature Ljava/lang/Object;Ljava/io/Serializable;Ljava/lang/Comparable<Ljava/lang/String;>;Ljava/lang/CharSequence;Ljava/lang/constant/Constable;Ljava/lang/constant/ConstantDesc;
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+innerclass innerClass java/util/Spliterator$OfInt outerClass java/util/Spliterator innerClassName OfInt flags 609
+method name indent descriptor (I)Ljava/lang/String; flags 1
+method name transform descriptor (Ljava/util/function/Function;)Ljava/lang/Object; flags 1 signature <R:Ljava/lang/Object;>(Ljava/util/function/Function<-Ljava/lang/String;+TR;>;)TR;
+method name describeConstable descriptor ()Ljava/util/Optional; flags 1 signature ()Ljava/util/Optional<Ljava/lang/String;>;
+method name resolveConstantDesc descriptor (Ljava/lang/invoke/MethodHandles$Lookup;)Ljava/lang/String; flags 1
+method name resolveConstantDesc descriptor (Ljava/lang/invoke/MethodHandles$Lookup;)Ljava/lang/Object; thrownTypes java/lang/ReflectiveOperationException flags 1041
+
+class name java/lang/System
+header extends java/lang/Object nestMembers java/lang/System$LoggerFinder,java/lang/System$Logger,java/lang/System$Logger$Level flags 31
+innerclass innerClass java/lang/System$LoggerFinder outerClass java/lang/System innerClassName LoggerFinder flags 409
+innerclass innerClass java/lang/System$Logger outerClass java/lang/System innerClassName Logger flags 609
+innerclass innerClass java/util/Map$Entry outerClass java/util/Map innerClassName Entry flags 609
+innerclass innerClass java/lang/System$Logger$Level outerClass java/lang/System$Logger innerClassName Level flags 4019
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/lang/constant/ClassDesc
+header extends java/lang/Object implements java/lang/constant/ConstantDesc,java/lang/invoke/TypeDescriptor$OfField flags 601 signature Ljava/lang/Object;Ljava/lang/constant/ConstantDesc;Ljava/lang/invoke/TypeDescriptor$OfField<Ljava/lang/constant/ClassDesc;>;
+innerclass innerClass java/lang/invoke/TypeDescriptor$OfField outerClass java/lang/invoke/TypeDescriptor innerClassName OfField flags 609
+method name of descriptor (Ljava/lang/String;)Ljava/lang/constant/ClassDesc; flags 9
+method name of descriptor (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/constant/ClassDesc; flags 9
+method name ofDescriptor descriptor (Ljava/lang/String;)Ljava/lang/constant/ClassDesc; flags 9
+method name arrayType descriptor ()Ljava/lang/constant/ClassDesc; flags 1
+method name arrayType descriptor (I)Ljava/lang/constant/ClassDesc; flags 1
+method name nested descriptor (Ljava/lang/String;)Ljava/lang/constant/ClassDesc; flags 1
+method name nested descriptor (Ljava/lang/String;[Ljava/lang/String;)Ljava/lang/constant/ClassDesc; flags 81
+method name isArray descriptor ()Z flags 1
+method name isPrimitive descriptor ()Z flags 1
+method name isClassOrInterface descriptor ()Z flags 1
+method name componentType descriptor ()Ljava/lang/constant/ClassDesc; flags 1
+method name packageName descriptor ()Ljava/lang/String; flags 1
+method name displayName descriptor ()Ljava/lang/String; flags 1
+method name descriptorString descriptor ()Ljava/lang/String; flags 401
+method name equals descriptor (Ljava/lang/Object;)Z flags 401
+method name arrayType descriptor ()Ljava/lang/invoke/TypeDescriptor$OfField; flags 1041
+method name componentType descriptor ()Ljava/lang/invoke/TypeDescriptor$OfField; flags 1041
+
+class name java/lang/constant/Constable
+header extends java/lang/Object flags 601
+method name describeConstable descriptor ()Ljava/util/Optional; flags 401 signature ()Ljava/util/Optional<+Ljava/lang/constant/ConstantDesc;>;
+
+class name java/lang/constant/ConstantDesc
+header extends java/lang/Object flags 601
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+method name resolveConstantDesc descriptor (Ljava/lang/invoke/MethodHandles$Lookup;)Ljava/lang/Object; thrownTypes java/lang/ReflectiveOperationException flags 401
+
+class name java/lang/constant/ConstantDescs
+header extends java/lang/Object flags 31
+innerclass innerClass java/lang/constant/DirectMethodHandleDesc$Kind outerClass java/lang/constant/DirectMethodHandleDesc innerClassName Kind flags 4019
+field name DEFAULT_NAME descriptor Ljava/lang/String; constantValue _ flags 19
+field name CD_Object descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_String descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_Class descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_Number descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_Integer descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_Long descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_Float descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_Double descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_Short descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_Byte descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_Character descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_Boolean descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_Void descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_Throwable descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_Exception descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_Enum descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_VarHandle descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_MethodHandles descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_MethodHandles_Lookup descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_MethodHandle descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_MethodType descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_CallSite descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_Collection descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_List descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_Set descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_Map descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_ConstantDesc descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_ClassDesc descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_EnumDesc descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_MethodTypeDesc descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_MethodHandleDesc descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_DirectMethodHandleDesc descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_VarHandleDesc descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_MethodHandleDesc_Kind descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_DynamicConstantDesc descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_DynamicCallSiteDesc descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_ConstantBootstraps descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name BSM_PRIMITIVE_CLASS descriptor Ljava/lang/constant/DirectMethodHandleDesc; flags 19
+field name BSM_ENUM_CONSTANT descriptor Ljava/lang/constant/DirectMethodHandleDesc; flags 19
+field name BSM_NULL_CONSTANT descriptor Ljava/lang/constant/DirectMethodHandleDesc; flags 19
+field name BSM_VARHANDLE_FIELD descriptor Ljava/lang/constant/DirectMethodHandleDesc; flags 19
+field name BSM_VARHANDLE_STATIC_FIELD descriptor Ljava/lang/constant/DirectMethodHandleDesc; flags 19
+field name BSM_VARHANDLE_ARRAY descriptor Ljava/lang/constant/DirectMethodHandleDesc; flags 19
+field name BSM_INVOKE descriptor Ljava/lang/constant/DirectMethodHandleDesc; flags 19
+field name CD_int descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_long descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_float descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_double descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_short descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_byte descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_char descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_boolean descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_void descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name NULL descriptor Ljava/lang/constant/ConstantDesc; flags 19
+method name ofCallsiteBootstrap descriptor (Ljava/lang/constant/ClassDesc;Ljava/lang/String;Ljava/lang/constant/ClassDesc;[Ljava/lang/constant/ClassDesc;)Ljava/lang/constant/DirectMethodHandleDesc; flags 89
+method name ofConstantBootstrap descriptor (Ljava/lang/constant/ClassDesc;Ljava/lang/String;Ljava/lang/constant/ClassDesc;[Ljava/lang/constant/ClassDesc;)Ljava/lang/constant/DirectMethodHandleDesc; flags 89
+
+class name java/lang/constant/DirectMethodHandleDesc
+header extends java/lang/Object implements java/lang/constant/MethodHandleDesc nestMembers java/lang/constant/DirectMethodHandleDesc$Kind flags 601
+innerclass innerClass java/lang/constant/DirectMethodHandleDesc$Kind outerClass java/lang/constant/DirectMethodHandleDesc innerClassName Kind flags 4019
+method name kind descriptor ()Ljava/lang/constant/DirectMethodHandleDesc$Kind; flags 401
+method name refKind descriptor ()I flags 401
+method name isOwnerInterface descriptor ()Z flags 401
+method name owner descriptor ()Ljava/lang/constant/ClassDesc; flags 401
+method name methodName descriptor ()Ljava/lang/String; flags 401
+method name lookupDescriptor descriptor ()Ljava/lang/String; flags 401
+
+class name java/lang/constant/DirectMethodHandleDesc$Kind
+header extends java/lang/Enum nestHost java/lang/constant/DirectMethodHandleDesc flags 4031 signature Ljava/lang/Enum<Ljava/lang/constant/DirectMethodHandleDesc$Kind;>;
+innerclass innerClass java/lang/constant/DirectMethodHandleDesc$Kind outerClass java/lang/constant/DirectMethodHandleDesc innerClassName Kind flags 4019
+field name STATIC descriptor Ljava/lang/constant/DirectMethodHandleDesc$Kind; flags 4019
+field name INTERFACE_STATIC descriptor Ljava/lang/constant/DirectMethodHandleDesc$Kind; flags 4019
+field name VIRTUAL descriptor Ljava/lang/constant/DirectMethodHandleDesc$Kind; flags 4019
+field name INTERFACE_VIRTUAL descriptor Ljava/lang/constant/DirectMethodHandleDesc$Kind; flags 4019
+field name SPECIAL descriptor Ljava/lang/constant/DirectMethodHandleDesc$Kind; flags 4019
+field name INTERFACE_SPECIAL descriptor Ljava/lang/constant/DirectMethodHandleDesc$Kind; flags 4019
+field name CONSTRUCTOR descriptor Ljava/lang/constant/DirectMethodHandleDesc$Kind; flags 4019
+field name GETTER descriptor Ljava/lang/constant/DirectMethodHandleDesc$Kind; flags 4019
+field name SETTER descriptor Ljava/lang/constant/DirectMethodHandleDesc$Kind; flags 4019
+field name STATIC_GETTER descriptor Ljava/lang/constant/DirectMethodHandleDesc$Kind; flags 4019
+field name STATIC_SETTER descriptor Ljava/lang/constant/DirectMethodHandleDesc$Kind; flags 4019
+field name refKind descriptor I flags 11
+field name isInterface descriptor Z flags 11
+method name values descriptor ()[Ljava/lang/constant/DirectMethodHandleDesc$Kind; flags 9
+method name valueOf descriptor (Ljava/lang/String;)Ljava/lang/constant/DirectMethodHandleDesc$Kind; flags 9
+method name valueOf descriptor (I)Ljava/lang/constant/DirectMethodHandleDesc$Kind; flags 9
+method name valueOf descriptor (IZ)Ljava/lang/constant/DirectMethodHandleDesc$Kind; flags 9
+
+class name java/lang/constant/DynamicCallSiteDesc
+header extends java/lang/Object flags 21
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+method name of descriptor (Ljava/lang/constant/DirectMethodHandleDesc;Ljava/lang/String;Ljava/lang/constant/MethodTypeDesc;[Ljava/lang/constant/ConstantDesc;)Ljava/lang/constant/DynamicCallSiteDesc; flags 89
+method name of descriptor (Ljava/lang/constant/DirectMethodHandleDesc;Ljava/lang/String;Ljava/lang/constant/MethodTypeDesc;)Ljava/lang/constant/DynamicCallSiteDesc; flags 9
+method name of descriptor (Ljava/lang/constant/DirectMethodHandleDesc;Ljava/lang/constant/MethodTypeDesc;)Ljava/lang/constant/DynamicCallSiteDesc; flags 9
+method name withArgs descriptor ([Ljava/lang/constant/ConstantDesc;)Ljava/lang/constant/DynamicCallSiteDesc; flags 81
+method name withNameAndType descriptor (Ljava/lang/String;Ljava/lang/constant/MethodTypeDesc;)Ljava/lang/constant/DynamicCallSiteDesc; flags 1
+method name invocationName descriptor ()Ljava/lang/String; flags 1
+method name invocationType descriptor ()Ljava/lang/constant/MethodTypeDesc; flags 1
+method name bootstrapMethod descriptor ()Ljava/lang/constant/MethodHandleDesc; flags 1
+method name bootstrapArgs descriptor ()[Ljava/lang/constant/ConstantDesc; flags 1
+method name resolveCallSiteDesc descriptor (Ljava/lang/invoke/MethodHandles$Lookup;)Ljava/lang/invoke/CallSite; thrownTypes java/lang/Throwable flags 1
+method name equals descriptor (Ljava/lang/Object;)Z flags 11
+method name hashCode descriptor ()I flags 11
+method name toString descriptor ()Ljava/lang/String; flags 1
+
+class name java/lang/constant/DynamicConstantDesc
+header extends java/lang/Object implements java/lang/constant/ConstantDesc flags 421 signature <T:Ljava/lang/Object;>Ljava/lang/Object;Ljava/lang/constant/ConstantDesc;
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+innerclass innerClass java/util/Map$Entry outerClass java/util/Map innerClassName Entry flags 609
+innerclass innerClass java/lang/Enum$EnumDesc outerClass java/lang/Enum innerClassName EnumDesc flags 19
+innerclass innerClass java/lang/invoke/VarHandle$VarHandleDesc outerClass java/lang/invoke/VarHandle innerClassName VarHandleDesc flags 19
+method name <init> descriptor (Ljava/lang/constant/DirectMethodHandleDesc;Ljava/lang/String;Ljava/lang/constant/ClassDesc;[Ljava/lang/constant/ConstantDesc;)V flags 84
+method name ofCanonical descriptor (Ljava/lang/constant/DirectMethodHandleDesc;Ljava/lang/String;Ljava/lang/constant/ClassDesc;[Ljava/lang/constant/ConstantDesc;)Ljava/lang/constant/ConstantDesc; flags 9 signature <T:Ljava/lang/Object;>(Ljava/lang/constant/DirectMethodHandleDesc;Ljava/lang/String;Ljava/lang/constant/ClassDesc;[Ljava/lang/constant/ConstantDesc;)Ljava/lang/constant/ConstantDesc;
+method name ofNamed descriptor (Ljava/lang/constant/DirectMethodHandleDesc;Ljava/lang/String;Ljava/lang/constant/ClassDesc;[Ljava/lang/constant/ConstantDesc;)Ljava/lang/constant/DynamicConstantDesc; flags 89 signature <T:Ljava/lang/Object;>(Ljava/lang/constant/DirectMethodHandleDesc;Ljava/lang/String;Ljava/lang/constant/ClassDesc;[Ljava/lang/constant/ConstantDesc;)Ljava/lang/constant/DynamicConstantDesc<TT;>;
+method name of descriptor (Ljava/lang/constant/DirectMethodHandleDesc;[Ljava/lang/constant/ConstantDesc;)Ljava/lang/constant/DynamicConstantDesc; flags 89 signature <T:Ljava/lang/Object;>(Ljava/lang/constant/DirectMethodHandleDesc;[Ljava/lang/constant/ConstantDesc;)Ljava/lang/constant/DynamicConstantDesc<TT;>;
+method name of descriptor (Ljava/lang/constant/DirectMethodHandleDesc;)Ljava/lang/constant/DynamicConstantDesc; flags 9 signature <T:Ljava/lang/Object;>(Ljava/lang/constant/DirectMethodHandleDesc;)Ljava/lang/constant/DynamicConstantDesc<TT;>;
+method name constantName descriptor ()Ljava/lang/String; flags 1
+method name constantType descriptor ()Ljava/lang/constant/ClassDesc; flags 1
+method name bootstrapMethod descriptor ()Ljava/lang/constant/DirectMethodHandleDesc; flags 1
+method name bootstrapArgs descriptor ()[Ljava/lang/constant/ConstantDesc; flags 1
+method name bootstrapArgsList descriptor ()Ljava/util/List; flags 1 signature ()Ljava/util/List<Ljava/lang/constant/ConstantDesc;>;
+method name resolveConstantDesc descriptor (Ljava/lang/invoke/MethodHandles$Lookup;)Ljava/lang/Object; thrownTypes java/lang/ReflectiveOperationException flags 1 signature (Ljava/lang/invoke/MethodHandles$Lookup;)TT;
+method name equals descriptor (Ljava/lang/Object;)Z flags 11
+method name hashCode descriptor ()I flags 11
+method name toString descriptor ()Ljava/lang/String; flags 1
+
+class name java/lang/constant/MethodHandleDesc
+header extends java/lang/Object implements java/lang/constant/ConstantDesc flags 601
+innerclass innerClass java/lang/constant/DirectMethodHandleDesc$Kind outerClass java/lang/constant/DirectMethodHandleDesc innerClassName Kind flags 4019
+method name of descriptor (Ljava/lang/constant/DirectMethodHandleDesc$Kind;Ljava/lang/constant/ClassDesc;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/constant/DirectMethodHandleDesc; flags 9
+method name ofMethod descriptor (Ljava/lang/constant/DirectMethodHandleDesc$Kind;Ljava/lang/constant/ClassDesc;Ljava/lang/String;Ljava/lang/constant/MethodTypeDesc;)Ljava/lang/constant/DirectMethodHandleDesc; flags 9
+method name ofField descriptor (Ljava/lang/constant/DirectMethodHandleDesc$Kind;Ljava/lang/constant/ClassDesc;Ljava/lang/String;Ljava/lang/constant/ClassDesc;)Ljava/lang/constant/DirectMethodHandleDesc; flags 9
+method name ofConstructor descriptor (Ljava/lang/constant/ClassDesc;[Ljava/lang/constant/ClassDesc;)Ljava/lang/constant/DirectMethodHandleDesc; flags 89
+method name asType descriptor (Ljava/lang/constant/MethodTypeDesc;)Ljava/lang/constant/MethodHandleDesc; flags 1
+method name invocationType descriptor ()Ljava/lang/constant/MethodTypeDesc; flags 401
+method name equals descriptor (Ljava/lang/Object;)Z flags 401
+
+class name java/lang/constant/MethodTypeDesc
+header extends java/lang/Object implements java/lang/constant/ConstantDesc,java/lang/invoke/TypeDescriptor$OfMethod flags 601 signature Ljava/lang/Object;Ljava/lang/constant/ConstantDesc;Ljava/lang/invoke/TypeDescriptor$OfMethod<Ljava/lang/constant/ClassDesc;Ljava/lang/constant/MethodTypeDesc;>;
+innerclass innerClass java/lang/invoke/TypeDescriptor$OfField outerClass java/lang/invoke/TypeDescriptor innerClassName OfField flags 609
+innerclass innerClass java/lang/invoke/TypeDescriptor$OfMethod outerClass java/lang/invoke/TypeDescriptor innerClassName OfMethod flags 609
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+method name ofDescriptor descriptor (Ljava/lang/String;)Ljava/lang/constant/MethodTypeDesc; flags 9
+method name of descriptor (Ljava/lang/constant/ClassDesc;[Ljava/lang/constant/ClassDesc;)Ljava/lang/constant/MethodTypeDesc; flags 89
+method name returnType descriptor ()Ljava/lang/constant/ClassDesc; flags 401
+method name parameterCount descriptor ()I flags 401
+method name parameterType descriptor (I)Ljava/lang/constant/ClassDesc; flags 401
+method name parameterList descriptor ()Ljava/util/List; flags 401 signature ()Ljava/util/List<Ljava/lang/constant/ClassDesc;>;
+method name parameterArray descriptor ()[Ljava/lang/constant/ClassDesc; flags 401
+method name changeReturnType descriptor (Ljava/lang/constant/ClassDesc;)Ljava/lang/constant/MethodTypeDesc; flags 401
+method name changeParameterType descriptor (ILjava/lang/constant/ClassDesc;)Ljava/lang/constant/MethodTypeDesc; flags 401
+method name dropParameterTypes descriptor (II)Ljava/lang/constant/MethodTypeDesc; flags 401
+method name insertParameterTypes descriptor (I[Ljava/lang/constant/ClassDesc;)Ljava/lang/constant/MethodTypeDesc; flags 481
+method name descriptorString descriptor ()Ljava/lang/String; flags 1
+method name displayDescriptor descriptor ()Ljava/lang/String; flags 1
+method name equals descriptor (Ljava/lang/Object;)Z flags 401
+method name insertParameterTypes descriptor (I[Ljava/lang/invoke/TypeDescriptor$OfField;)Ljava/lang/invoke/TypeDescriptor$OfMethod; flags 1041
+method name dropParameterTypes descriptor (II)Ljava/lang/invoke/TypeDescriptor$OfMethod; flags 1041
+method name changeParameterType descriptor (ILjava/lang/invoke/TypeDescriptor$OfField;)Ljava/lang/invoke/TypeDescriptor$OfMethod; flags 1041
+method name changeReturnType descriptor (Ljava/lang/invoke/TypeDescriptor$OfField;)Ljava/lang/invoke/TypeDescriptor$OfMethod; flags 1041
+method name parameterArray descriptor ()[Ljava/lang/invoke/TypeDescriptor$OfField; flags 1041
+method name returnType descriptor ()Ljava/lang/invoke/TypeDescriptor$OfField; flags 1041
+method name parameterType descriptor (I)Ljava/lang/invoke/TypeDescriptor$OfField; flags 1041
+
+class name java/lang/invoke/MethodHandle
+header extends java/lang/Object implements java/lang/constant/Constable flags 421
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+innerclass innerClass java/lang/constant/DirectMethodHandleDesc$Kind outerClass java/lang/constant/DirectMethodHandleDesc innerClassName Kind flags 4019
+method name describeConstable descriptor ()Ljava/util/Optional; flags 1 signature ()Ljava/util/Optional<Ljava/lang/constant/MethodHandleDesc;>;
+
+class name java/lang/invoke/MethodHandleProxies
+header extends java/lang/Object flags 21
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/lang/invoke/MethodType
+header extends java/lang/Object implements java/lang/constant/Constable,java/lang/invoke/TypeDescriptor$OfMethod,java/io/Serializable flags 31 signature Ljava/lang/Object;Ljava/lang/constant/Constable;Ljava/lang/invoke/TypeDescriptor$OfMethod<Ljava/lang/Class<*>;Ljava/lang/invoke/MethodType;>;Ljava/io/Serializable;
+innerclass innerClass java/lang/invoke/TypeDescriptor$OfField outerClass java/lang/invoke/TypeDescriptor innerClassName OfField flags 609
+innerclass innerClass java/lang/invoke/TypeDescriptor$OfMethod outerClass java/lang/invoke/TypeDescriptor innerClassName OfMethod flags 609
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+method name descriptorString descriptor ()Ljava/lang/String; flags 1
+method name describeConstable descriptor ()Ljava/util/Optional; flags 1 signature ()Ljava/util/Optional<Ljava/lang/constant/MethodTypeDesc;>;
+method name insertParameterTypes descriptor (I[Ljava/lang/invoke/TypeDescriptor$OfField;)Ljava/lang/invoke/TypeDescriptor$OfMethod; flags 1041
+method name dropParameterTypes descriptor (II)Ljava/lang/invoke/TypeDescriptor$OfMethod; flags 1041
+method name changeParameterType descriptor (ILjava/lang/invoke/TypeDescriptor$OfField;)Ljava/lang/invoke/TypeDescriptor$OfMethod; flags 1041
+method name changeReturnType descriptor (Ljava/lang/invoke/TypeDescriptor$OfField;)Ljava/lang/invoke/TypeDescriptor$OfMethod; flags 1041
+method name parameterArray descriptor ()[Ljava/lang/invoke/TypeDescriptor$OfField; flags 1041
+method name returnType descriptor ()Ljava/lang/invoke/TypeDescriptor$OfField; flags 1041
+method name parameterType descriptor (I)Ljava/lang/invoke/TypeDescriptor$OfField; flags 1041
+
+class name java/lang/invoke/TypeDescriptor
+header extends java/lang/Object nestMembers java/lang/invoke/TypeDescriptor$OfMethod,java/lang/invoke/TypeDescriptor$OfField flags 601
+innerclass innerClass java/lang/invoke/TypeDescriptor$OfMethod outerClass java/lang/invoke/TypeDescriptor innerClassName OfMethod flags 609
+innerclass innerClass java/lang/invoke/TypeDescriptor$OfField outerClass java/lang/invoke/TypeDescriptor innerClassName OfField flags 609
+method name descriptorString descriptor ()Ljava/lang/String; flags 401
+
+class name java/lang/invoke/TypeDescriptor$OfField
+header extends java/lang/Object implements java/lang/invoke/TypeDescriptor nestHost java/lang/invoke/TypeDescriptor flags 601 signature <F::Ljava/lang/invoke/TypeDescriptor$OfField<TF;>;>Ljava/lang/Object;Ljava/lang/invoke/TypeDescriptor;
+innerclass innerClass java/lang/invoke/TypeDescriptor$OfField outerClass java/lang/invoke/TypeDescriptor innerClassName OfField flags 609
+method name isArray descriptor ()Z flags 401
+method name isPrimitive descriptor ()Z flags 401
+method name componentType descriptor ()Ljava/lang/invoke/TypeDescriptor$OfField; flags 401 signature ()TF;
+method name arrayType descriptor ()Ljava/lang/invoke/TypeDescriptor$OfField; flags 401 signature ()TF;
+
+class name java/lang/invoke/TypeDescriptor$OfMethod
+header extends java/lang/Object implements java/lang/invoke/TypeDescriptor nestHost java/lang/invoke/TypeDescriptor flags 601 signature <F::Ljava/lang/invoke/TypeDescriptor$OfField<TF;>;M::Ljava/lang/invoke/TypeDescriptor$OfMethod<TF;TM;>;>Ljava/lang/Object;Ljava/lang/invoke/TypeDescriptor;
+innerclass innerClass java/lang/invoke/TypeDescriptor$OfField outerClass java/lang/invoke/TypeDescriptor innerClassName OfField flags 609
+innerclass innerClass java/lang/invoke/TypeDescriptor$OfMethod outerClass java/lang/invoke/TypeDescriptor innerClassName OfMethod flags 609
+method name parameterCount descriptor ()I flags 401
+method name parameterType descriptor (I)Ljava/lang/invoke/TypeDescriptor$OfField; flags 401 signature (I)TF;
+method name returnType descriptor ()Ljava/lang/invoke/TypeDescriptor$OfField; flags 401 signature ()TF;
+method name parameterArray descriptor ()[Ljava/lang/invoke/TypeDescriptor$OfField; flags 401 signature ()[TF;
+method name parameterList descriptor ()Ljava/util/List; flags 401 signature ()Ljava/util/List<TF;>;
+method name changeReturnType descriptor (Ljava/lang/invoke/TypeDescriptor$OfField;)Ljava/lang/invoke/TypeDescriptor$OfMethod; flags 401 signature (TF;)TM;
+method name changeParameterType descriptor (ILjava/lang/invoke/TypeDescriptor$OfField;)Ljava/lang/invoke/TypeDescriptor$OfMethod; flags 401 signature (ITF;)TM;
+method name dropParameterTypes descriptor (II)Ljava/lang/invoke/TypeDescriptor$OfMethod; flags 401 signature (II)TM;
+method name insertParameterTypes descriptor (I[Ljava/lang/invoke/TypeDescriptor$OfField;)Ljava/lang/invoke/TypeDescriptor$OfMethod; flags 481 signature (I[TF;)TM;
+
+class name java/lang/invoke/VarHandle
+header extends java/lang/Object implements java/lang/constant/Constable nestMembers java/lang/invoke/VarHandle$VarHandleDesc,java/lang/invoke/VarHandle$AccessMode flags 421
+innerclass innerClass java/lang/invoke/VarHandle$VarHandleDesc outerClass java/lang/invoke/VarHandle innerClassName VarHandleDesc flags 19
+innerclass innerClass java/lang/invoke/VarHandle$AccessMode outerClass java/lang/invoke/VarHandle innerClassName AccessMode flags 4019
+method name toString descriptor ()Ljava/lang/String; flags 11
+method name describeConstable descriptor ()Ljava/util/Optional; flags 1 signature ()Ljava/util/Optional<Ljava/lang/invoke/VarHandle$VarHandleDesc;>;
+
+class name java/lang/invoke/VarHandle$VarHandleDesc
+header extends java/lang/constant/DynamicConstantDesc nestHost java/lang/invoke/VarHandle flags 31 signature Ljava/lang/constant/DynamicConstantDesc<Ljava/lang/invoke/VarHandle;>;
+innerclass innerClass java/lang/invoke/VarHandle$VarHandleDesc outerClass java/lang/invoke/VarHandle innerClassName VarHandleDesc flags 19
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+method name ofField descriptor (Ljava/lang/constant/ClassDesc;Ljava/lang/String;Ljava/lang/constant/ClassDesc;)Ljava/lang/invoke/VarHandle$VarHandleDesc; flags 9
+method name ofStaticField descriptor (Ljava/lang/constant/ClassDesc;Ljava/lang/String;Ljava/lang/constant/ClassDesc;)Ljava/lang/invoke/VarHandle$VarHandleDesc; flags 9
+method name ofArray descriptor (Ljava/lang/constant/ClassDesc;)Ljava/lang/invoke/VarHandle$VarHandleDesc; flags 9
+method name varType descriptor ()Ljava/lang/constant/ClassDesc; flags 1
+method name resolveConstantDesc descriptor (Ljava/lang/invoke/MethodHandles$Lookup;)Ljava/lang/invoke/VarHandle; thrownTypes java/lang/ReflectiveOperationException flags 1
+method name toString descriptor ()Ljava/lang/String; flags 1
+method name resolveConstantDesc descriptor (Ljava/lang/invoke/MethodHandles$Lookup;)Ljava/lang/Object; thrownTypes java/lang/ReflectiveOperationException flags 1041
+
+class name java/lang/module/ModuleDescriptor
+header extends java/lang/Object implements java/lang/Comparable nestMembers java/lang/module/ModuleDescriptor$Builder,java/lang/module/ModuleDescriptor$Version,java/lang/module/ModuleDescriptor$Provides,java/lang/module/ModuleDescriptor$Opens,java/lang/module/ModuleDescriptor$Opens$Modifier,java/lang/module/ModuleDescriptor$Exports,java/lang/module/ModuleDescriptor$Exports$Modifier,java/lang/module/ModuleDescriptor$Requires,java/lang/module/ModuleDescriptor$Requires$Modifier,java/lang/module/ModuleDescriptor$Modifier flags 21 signature Ljava/lang/Object;Ljava/lang/Comparable<Ljava/lang/module/ModuleDescriptor;>;
+innerclass innerClass java/lang/module/ModuleDescriptor$Builder outerClass java/lang/module/ModuleDescriptor innerClassName Builder flags 19
+innerclass innerClass java/lang/module/ModuleDescriptor$Version outerClass java/lang/module/ModuleDescriptor innerClassName Version flags 19
+innerclass innerClass java/lang/module/ModuleDescriptor$Provides outerClass java/lang/module/ModuleDescriptor innerClassName Provides flags 19
+innerclass innerClass java/lang/module/ModuleDescriptor$Opens outerClass java/lang/module/ModuleDescriptor innerClassName Opens flags 19
+innerclass innerClass java/lang/module/ModuleDescriptor$Exports outerClass java/lang/module/ModuleDescriptor innerClassName Exports flags 19
+innerclass innerClass java/lang/module/ModuleDescriptor$Requires outerClass java/lang/module/ModuleDescriptor innerClassName Requires flags 19
+innerclass innerClass java/lang/module/ModuleDescriptor$Modifier outerClass java/lang/module/ModuleDescriptor innerClassName Modifier flags 4019
+innerclass innerClass java/lang/module/ModuleDescriptor$Opens$Modifier outerClass java/lang/module/ModuleDescriptor$Opens innerClassName Modifier flags 4019
+innerclass innerClass java/lang/module/ModuleDescriptor$Exports$Modifier outerClass java/lang/module/ModuleDescriptor$Exports innerClassName Modifier flags 4019
+innerclass innerClass java/lang/module/ModuleDescriptor$Requires$Modifier outerClass java/lang/module/ModuleDescriptor$Requires innerClassName Modifier flags 4019
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/lang/reflect/Executable
+header extends java/lang/reflect/AccessibleObject implements java/lang/reflect/Member,java/lang/reflect/GenericDeclaration flags 421
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/lang/reflect/UndeclaredThrowableException
+header extends java/lang/RuntimeException flags 21
+innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409
+innerclass innerClass java/io/ObjectOutputStream$PutField outerClass java/io/ObjectOutputStream innerClassName PutField flags 409
+-method name getCause descriptor ()Ljava/lang/Throwable;
+
+class name java/net/SecureCacheResponse
+method name getSSLSession descriptor ()Ljava/util/Optional; flags 1 signature ()Ljava/util/Optional<Ljavax/net/ssl/SSLSession;>;
+
+class name java/net/ServerSocket
+method name <init> descriptor (Ljava/net/SocketImpl;)V flags 4
+
+class name java/nio/file/Files
+method name mismatch descriptor (Ljava/nio/file/Path;Ljava/nio/file/Path;)J thrownTypes java/io/IOException flags 9
+
+class name java/security/AccessController
+-method name doPrivileged descriptor (Ljava/security/PrivilegedAction;)Ljava/lang/Object;
+-method name doPrivileged descriptor (Ljava/security/PrivilegedAction;Ljava/security/AccessControlContext;)Ljava/lang/Object;
+-method name doPrivileged descriptor (Ljava/security/PrivilegedExceptionAction;)Ljava/lang/Object;
+-method name doPrivileged descriptor (Ljava/security/PrivilegedExceptionAction;Ljava/security/AccessControlContext;)Ljava/lang/Object;
+method name doPrivileged descriptor (Ljava/security/PrivilegedAction;)Ljava/lang/Object; flags 9 signature <T:Ljava/lang/Object;>(Ljava/security/PrivilegedAction<TT;>;)TT; runtimeAnnotations @Ljdk/internal/reflect/CallerSensitive;
+method name doPrivileged descriptor (Ljava/security/PrivilegedAction;Ljava/security/AccessControlContext;)Ljava/lang/Object; flags 9 signature <T:Ljava/lang/Object;>(Ljava/security/PrivilegedAction<TT;>;Ljava/security/AccessControlContext;)TT; runtimeAnnotations @Ljdk/internal/reflect/CallerSensitive;
+method name doPrivileged descriptor (Ljava/security/PrivilegedExceptionAction;)Ljava/lang/Object; thrownTypes java/security/PrivilegedActionException flags 9 signature <T:Ljava/lang/Object;>(Ljava/security/PrivilegedExceptionAction<TT;>;)TT; runtimeAnnotations @Ljdk/internal/reflect/CallerSensitive;
+method name doPrivileged descriptor (Ljava/security/PrivilegedExceptionAction;Ljava/security/AccessControlContext;)Ljava/lang/Object; thrownTypes java/security/PrivilegedActionException flags 9 signature <T:Ljava/lang/Object;>(Ljava/security/PrivilegedExceptionAction<TT;>;Ljava/security/AccessControlContext;)TT; runtimeAnnotations @Ljdk/internal/reflect/CallerSensitive;
+
+class name java/security/Key
+-field name serialVersionUID descriptor J
+field name serialVersionUID descriptor J constantValue 6603384152749567654 flags 19 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;
+
+class name java/security/PrivateKey
+-field name serialVersionUID descriptor J
+field name serialVersionUID descriptor J constantValue 6034044314589513430 flags 19 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;
+
+class name java/security/PrivilegedActionException
+header extends java/lang/Exception flags 21
+innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409
+innerclass innerClass java/io/ObjectOutputStream$PutField outerClass java/io/ObjectOutputStream innerClassName PutField flags 409
+-method name getCause descriptor ()Ljava/lang/Throwable;
+
+class name java/security/Provider
+-method name getService descriptor (Ljava/lang/String;Ljava/lang/String;)Ljava/security/Provider$Service;
+-method name putService descriptor (Ljava/security/Provider$Service;)V
+-method name removeService descriptor (Ljava/security/Provider$Service;)V
+method name getService descriptor (Ljava/lang/String;Ljava/lang/String;)Ljava/security/Provider$Service; flags 1
+method name putService descriptor (Ljava/security/Provider$Service;)V flags 4
+method name removeService descriptor (Ljava/security/Provider$Service;)V flags 4
+
+class name java/security/PublicKey
+-field name serialVersionUID descriptor J
+field name serialVersionUID descriptor J constantValue 7187392471159151072 flags 19 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;
+
+class name java/security/interfaces/DSAPrivateKey
+-field name serialVersionUID descriptor J
+field name serialVersionUID descriptor J constantValue 7776497482533790279 flags 19 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;
+
+class name java/security/interfaces/DSAPublicKey
+-field name serialVersionUID descriptor J
+field name serialVersionUID descriptor J constantValue 1234526332779022332 flags 19 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;
+
+class name java/security/interfaces/ECPrivateKey
+-field name serialVersionUID descriptor J
+field name serialVersionUID descriptor J constantValue -7896394956925609184 flags 19 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;
+
+class name java/security/interfaces/ECPublicKey
+-field name serialVersionUID descriptor J
+field name serialVersionUID descriptor J constantValue -3314988629879632826 flags 19 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;
+
+class name java/security/interfaces/RSAMultiPrimePrivateCrtKey
+-field name serialVersionUID descriptor J
+field name serialVersionUID descriptor J constantValue 618058533534628008 flags 19 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;
+
+class name java/security/interfaces/RSAPrivateCrtKey
+-field name serialVersionUID descriptor J
+field name serialVersionUID descriptor J constantValue -5682214253527700368 flags 19 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;
+
+class name java/security/interfaces/RSAPrivateKey
+-field name serialVersionUID descriptor J
+field name serialVersionUID descriptor J constantValue 5187144804936595022 flags 19 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;
+
+class name java/security/interfaces/RSAPublicKey
+-field name serialVersionUID descriptor J
+field name serialVersionUID descriptor J constantValue -8727434096241101194 flags 19 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;
+
+class name java/security/spec/PSSParameterSpec
+method name toString descriptor ()Ljava/lang/String; flags 1
+
+class name java/text/CompactNumberFormat
+header extends java/text/NumberFormat flags 31
+innerclass innerClass java/text/Format$Field outerClass java/text/Format innerClassName Field flags 9
+innerclass innerClass java/text/NumberFormat$Field outerClass java/text/NumberFormat innerClassName Field flags 9
+method name <init> descriptor (Ljava/lang/String;Ljava/text/DecimalFormatSymbols;[Ljava/lang/String;)V flags 1
+method name format descriptor (Ljava/lang/Object;Ljava/lang/StringBuffer;Ljava/text/FieldPosition;)Ljava/lang/StringBuffer; flags 11
+method name format descriptor (DLjava/lang/StringBuffer;Ljava/text/FieldPosition;)Ljava/lang/StringBuffer; flags 1
+method name format descriptor (JLjava/lang/StringBuffer;Ljava/text/FieldPosition;)Ljava/lang/StringBuffer; flags 1
+method name formatToCharacterIterator descriptor (Ljava/lang/Object;)Ljava/text/AttributedCharacterIterator; flags 1
+method name parse descriptor (Ljava/lang/String;Ljava/text/ParsePosition;)Ljava/lang/Number; flags 1
+method name setMaximumIntegerDigits descriptor (I)V flags 1
+method name setMinimumIntegerDigits descriptor (I)V flags 1
+method name setMinimumFractionDigits descriptor (I)V flags 1
+method name setMaximumFractionDigits descriptor (I)V flags 1
+method name getRoundingMode descriptor ()Ljava/math/RoundingMode; flags 1
+method name setRoundingMode descriptor (Ljava/math/RoundingMode;)V flags 1
+method name getGroupingSize descriptor ()I flags 1
+method name setGroupingSize descriptor (I)V flags 1
+method name isGroupingUsed descriptor ()Z flags 1
+method name setGroupingUsed descriptor (Z)V flags 1
+method name isParseIntegerOnly descriptor ()Z flags 1
+method name setParseIntegerOnly descriptor (Z)V flags 1
+method name isParseBigDecimal descriptor ()Z flags 1
+method name setParseBigDecimal descriptor (Z)V flags 1
+method name equals descriptor (Ljava/lang/Object;)Z flags 1
+method name hashCode descriptor ()I flags 1
+method name clone descriptor ()Ljava/text/CompactNumberFormat; flags 1
+method name clone descriptor ()Ljava/lang/Object; flags 1041
+
+class name java/text/NumberFormat
+header extends java/text/Format nestMembers java/text/NumberFormat$Style,java/text/NumberFormat$Field flags 421
+innerclass innerClass java/text/NumberFormat$Style outerClass java/text/NumberFormat innerClassName Style flags 4019
+innerclass innerClass java/text/NumberFormat$Field outerClass java/text/NumberFormat innerClassName Field flags 9
+innerclass innerClass java/util/Locale$Category outerClass java/util/Locale innerClassName Category flags 4019
+method name getCompactNumberInstance descriptor ()Ljava/text/NumberFormat; flags 9
+method name getCompactNumberInstance descriptor (Ljava/util/Locale;Ljava/text/NumberFormat$Style;)Ljava/text/NumberFormat; flags 9
+
+class name java/text/NumberFormat$Field
+field name PREFIX descriptor Ljava/text/NumberFormat$Field; flags 19
+field name SUFFIX descriptor Ljava/text/NumberFormat$Field; flags 19
+
+class name java/text/NumberFormat$Style
+header extends java/lang/Enum nestHost java/text/NumberFormat flags 4031 signature Ljava/lang/Enum<Ljava/text/NumberFormat$Style;>;
+innerclass innerClass java/text/NumberFormat$Style outerClass java/text/NumberFormat innerClassName Style flags 4019
+field name SHORT descriptor Ljava/text/NumberFormat$Style; flags 4019
+field name LONG descriptor Ljava/text/NumberFormat$Style; flags 4019
+method name values descriptor ()[Ljava/text/NumberFormat$Style; flags 9
+method name valueOf descriptor (Ljava/lang/String;)Ljava/text/NumberFormat$Style; flags 9
+
+class name java/text/spi/NumberFormatProvider
+header extends java/util/spi/LocaleServiceProvider flags 421
+innerclass innerClass java/text/NumberFormat$Style outerClass java/text/NumberFormat innerClassName Style flags 4019
+method name getCompactNumberInstance descriptor (Ljava/util/Locale;Ljava/text/NumberFormat$Style;)Ljava/text/NumberFormat; flags 1
+
+class name java/util/concurrent/CompletableFuture
+method name exceptionallyAsync descriptor (Ljava/util/function/Function;)Ljava/util/concurrent/CompletableFuture; flags 1 signature (Ljava/util/function/Function<Ljava/lang/Throwable;+TT;>;)Ljava/util/concurrent/CompletableFuture<TT;>;
+method name exceptionallyAsync descriptor (Ljava/util/function/Function;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletableFuture; flags 1 signature (Ljava/util/function/Function<Ljava/lang/Throwable;+TT;>;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletableFuture<TT;>;
+method name exceptionallyCompose descriptor (Ljava/util/function/Function;)Ljava/util/concurrent/CompletableFuture; flags 1 signature (Ljava/util/function/Function<Ljava/lang/Throwable;+Ljava/util/concurrent/CompletionStage<TT;>;>;)Ljava/util/concurrent/CompletableFuture<TT;>;
+method name exceptionallyComposeAsync descriptor (Ljava/util/function/Function;)Ljava/util/concurrent/CompletableFuture; flags 1 signature (Ljava/util/function/Function<Ljava/lang/Throwable;+Ljava/util/concurrent/CompletionStage<TT;>;>;)Ljava/util/concurrent/CompletableFuture<TT;>;
+method name exceptionallyComposeAsync descriptor (Ljava/util/function/Function;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletableFuture; flags 1 signature (Ljava/util/function/Function<Ljava/lang/Throwable;+Ljava/util/concurrent/CompletionStage<TT;>;>;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletableFuture<TT;>;
+method name exceptionallyComposeAsync descriptor (Ljava/util/function/Function;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletionStage; flags 1041
+method name exceptionallyComposeAsync descriptor (Ljava/util/function/Function;)Ljava/util/concurrent/CompletionStage; flags 1041
+method name exceptionallyCompose descriptor (Ljava/util/function/Function;)Ljava/util/concurrent/CompletionStage; flags 1041
+method name exceptionallyAsync descriptor (Ljava/util/function/Function;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletionStage; flags 1041
+method name exceptionallyAsync descriptor (Ljava/util/function/Function;)Ljava/util/concurrent/CompletionStage; flags 1041
+
+class name java/util/concurrent/CompletionStage
+header extends java/lang/Object flags 601 signature <T:Ljava/lang/Object;>Ljava/lang/Object;
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+method name exceptionallyAsync descriptor (Ljava/util/function/Function;)Ljava/util/concurrent/CompletionStage; flags 1 signature (Ljava/util/function/Function<Ljava/lang/Throwable;+TT;>;)Ljava/util/concurrent/CompletionStage<TT;>;
+method name exceptionallyAsync descriptor (Ljava/util/function/Function;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletionStage; flags 1 signature (Ljava/util/function/Function<Ljava/lang/Throwable;+TT;>;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletionStage<TT;>;
+method name exceptionallyCompose descriptor (Ljava/util/function/Function;)Ljava/util/concurrent/CompletionStage; flags 1 signature (Ljava/util/function/Function<Ljava/lang/Throwable;+Ljava/util/concurrent/CompletionStage<TT;>;>;)Ljava/util/concurrent/CompletionStage<TT;>;
+method name exceptionallyComposeAsync descriptor (Ljava/util/function/Function;)Ljava/util/concurrent/CompletionStage; flags 1 signature (Ljava/util/function/Function<Ljava/lang/Throwable;+Ljava/util/concurrent/CompletionStage<TT;>;>;)Ljava/util/concurrent/CompletionStage<TT;>;
+method name exceptionallyComposeAsync descriptor (Ljava/util/function/Function;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletionStage; flags 1 signature (Ljava/util/function/Function<Ljava/lang/Throwable;+Ljava/util/concurrent/CompletionStage<TT;>;>;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletionStage<TT;>;
+
+class name java/util/jar/JarFile
+header extends java/util/zip/ZipFile flags 21
+innerclass innerClass java/lang/Runtime$Version outerClass java/lang/Runtime innerClassName Version flags 19
+innerclass innerClass java/util/jar/Attributes$Name outerClass java/util/jar/Attributes innerClassName Name flags 9
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/util/stream/Collectors
+method name teeing descriptor (Ljava/util/stream/Collector;Ljava/util/stream/Collector;Ljava/util/function/BiFunction;)Ljava/util/stream/Collector; flags 9 signature <T:Ljava/lang/Object;R1:Ljava/lang/Object;R2:Ljava/lang/Object;R:Ljava/lang/Object;>(Ljava/util/stream/Collector<-TT;*TR1;>;Ljava/util/stream/Collector<-TT;*TR2;>;Ljava/util/function/BiFunction<-TR1;-TR2;TR;>;)Ljava/util/stream/Collector<TT;*TR;>;
+
+class name java/util/zip/Deflater
+-method name finalize descriptor ()V
+
+class name java/util/zip/Inflater
+-method name finalize descriptor ()V
+
+class name java/util/zip/ZipFile
+-method name finalize descriptor ()V
+
+class name javax/crypto/Cipher
+method name toString descriptor ()Ljava/lang/String; flags 1
+
+class name javax/crypto/SecretKey
+-field name serialVersionUID descriptor J
+field name serialVersionUID descriptor J constantValue -4795878709595146952 flags 19 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;
+
+class name javax/crypto/interfaces/DHPrivateKey
+-field name serialVersionUID descriptor J
+field name serialVersionUID descriptor J constantValue 2211791113380396553 flags 19 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;
+
+class name javax/crypto/interfaces/DHPublicKey
+-field name serialVersionUID descriptor J
+field name serialVersionUID descriptor J constantValue -6628103563352519193 flags 19 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;
+
+class name javax/crypto/interfaces/PBEKey
+-field name serialVersionUID descriptor J
+field name serialVersionUID descriptor J constantValue -1430015993304333921 flags 19 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;
+
+class name javax/net/ssl/HttpsURLConnection
+method name getSSLSession descriptor ()Ljava/util/Optional; flags 1 signature ()Ljava/util/Optional<Ljavax/net/ssl/SSLSession;>;
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/make/data/symbols/java.compiler-C.sym.txt	Wed Feb 13 13:22:15 2019 -0500
@@ -0,0 +1,106 @@
+#
+# Copyright (c) 2019, 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 FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. ###
+# ##########################################################
+#
+class name javax/lang/model/SourceVersion
+field name RELEASE_12 descriptor Ljavax/lang/model/SourceVersion; flags 4019
+
+class name javax/lang/model/util/AbstractAnnotationValueVisitor7
+-method name <init> descriptor ()V
+method name <init> descriptor ()V flags 4 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(since="12")
+
+class name javax/lang/model/util/AbstractAnnotationValueVisitor9
+header extends javax/lang/model/util/AbstractAnnotationValueVisitor8 flags 421 signature <R:Ljava/lang/Object;P:Ljava/lang/Object;>Ljavax/lang/model/util/AbstractAnnotationValueVisitor8<TR;TP;>; runtimeAnnotations @Ljavax/annotation/processing/SupportedSourceVersion;(value=eLjavax/lang/model/SourceVersion;RELEASE_12;)
+
+class name javax/lang/model/util/AbstractElementVisitor7
+-method name <init> descriptor ()V
+method name <init> descriptor ()V flags 4 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(since="12")
+
+class name javax/lang/model/util/AbstractElementVisitor9
+header extends javax/lang/model/util/AbstractElementVisitor8 flags 421 signature <R:Ljava/lang/Object;P:Ljava/lang/Object;>Ljavax/lang/model/util/AbstractElementVisitor8<TR;TP;>; runtimeAnnotations @Ljavax/annotation/processing/SupportedSourceVersion;(value=eLjavax/lang/model/SourceVersion;RELEASE_12;)
+
+class name javax/lang/model/util/AbstractTypeVisitor7
+-method name <init> descriptor ()V
+method name <init> descriptor ()V flags 4 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(since="12")
+
+class name javax/lang/model/util/AbstractTypeVisitor9
+header extends javax/lang/model/util/AbstractTypeVisitor8 flags 421 signature <R:Ljava/lang/Object;P:Ljava/lang/Object;>Ljavax/lang/model/util/AbstractTypeVisitor8<TR;TP;>; runtimeAnnotations @Ljavax/annotation/processing/SupportedSourceVersion;(value=eLjavax/lang/model/SourceVersion;RELEASE_12;)
+
+class name javax/lang/model/util/ElementKindVisitor7
+-method name <init> descriptor ()V
+-method name <init> descriptor (Ljava/lang/Object;)V
+method name <init> descriptor ()V flags 4 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(since="12")
+method name <init> descriptor (Ljava/lang/Object;)V flags 4 deprecated true signature (TR;)V runtimeAnnotations @Ljava/lang/Deprecated;(since="12")
+
+class name javax/lang/model/util/ElementKindVisitor9
+header extends javax/lang/model/util/ElementKindVisitor8 flags 21 signature <R:Ljava/lang/Object;P:Ljava/lang/Object;>Ljavax/lang/model/util/ElementKindVisitor8<TR;TP;>; runtimeAnnotations @Ljavax/annotation/processing/SupportedSourceVersion;(value=eLjavax/lang/model/SourceVersion;RELEASE_12;)
+
+class name javax/lang/model/util/ElementScanner7
+-method name <init> descriptor ()V
+-method name <init> descriptor (Ljava/lang/Object;)V
+method name <init> descriptor ()V flags 4 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(since="12")
+method name <init> descriptor (Ljava/lang/Object;)V flags 4 deprecated true signature (TR;)V runtimeAnnotations @Ljava/lang/Deprecated;(since="12")
+
+class name javax/lang/model/util/ElementScanner9
+header extends javax/lang/model/util/ElementScanner8 flags 21 signature <R:Ljava/lang/Object;P:Ljava/lang/Object;>Ljavax/lang/model/util/ElementScanner8<TR;TP;>; runtimeAnnotations @Ljavax/annotation/processing/SupportedSourceVersion;(value=eLjavax/lang/model/SourceVersion;RELEASE_12;)
+
+class name javax/lang/model/util/SimpleAnnotationValueVisitor7
+-method name <init> descriptor ()V
+-method name <init> descriptor (Ljava/lang/Object;)V
+method name <init> descriptor ()V flags 4 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(since="12")
+method name <init> descriptor (Ljava/lang/Object;)V flags 4 deprecated true signature (TR;)V runtimeAnnotations @Ljava/lang/Deprecated;(since="12")
+
+class name javax/lang/model/util/SimpleAnnotationValueVisitor9
+header extends javax/lang/model/util/SimpleAnnotationValueVisitor8 flags 21 signature <R:Ljava/lang/Object;P:Ljava/lang/Object;>Ljavax/lang/model/util/SimpleAnnotationValueVisitor8<TR;TP;>; runtimeAnnotations @Ljavax/annotation/processing/SupportedSourceVersion;(value=eLjavax/lang/model/SourceVersion;RELEASE_12;)
+
+class name javax/lang/model/util/SimpleElementVisitor7
+-method name <init> descriptor ()V
+-method name <init> descriptor (Ljava/lang/Object;)V
+method name <init> descriptor ()V flags 4 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(since="12")
+method name <init> descriptor (Ljava/lang/Object;)V flags 4 deprecated true signature (TR;)V runtimeAnnotations @Ljava/lang/Deprecated;(since="12")
+
+class name javax/lang/model/util/SimpleElementVisitor9
+header extends javax/lang/model/util/SimpleElementVisitor8 flags 21 signature <R:Ljava/lang/Object;P:Ljava/lang/Object;>Ljavax/lang/model/util/SimpleElementVisitor8<TR;TP;>; runtimeAnnotations @Ljavax/annotation/processing/SupportedSourceVersion;(value=eLjavax/lang/model/SourceVersion;RELEASE_12;)
+
+class name javax/lang/model/util/SimpleTypeVisitor7
+-method name <init> descriptor ()V
+-method name <init> descriptor (Ljava/lang/Object;)V
+method name <init> descriptor ()V flags 4 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(since="12")
+method name <init> descriptor (Ljava/lang/Object;)V flags 4 deprecated true signature (TR;)V runtimeAnnotations @Ljava/lang/Deprecated;(since="12")
+
+class name javax/lang/model/util/SimpleTypeVisitor9
+header extends javax/lang/model/util/SimpleTypeVisitor8 flags 21 signature <R:Ljava/lang/Object;P:Ljava/lang/Object;>Ljavax/lang/model/util/SimpleTypeVisitor8<TR;TP;>; runtimeAnnotations @Ljavax/annotation/processing/SupportedSourceVersion;(value=eLjavax/lang/model/SourceVersion;RELEASE_12;)
+
+class name javax/lang/model/util/TypeKindVisitor7
+-method name <init> descriptor ()V
+-method name <init> descriptor (Ljava/lang/Object;)V
+method name <init> descriptor ()V flags 4 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(since="12")
+method name <init> descriptor (Ljava/lang/Object;)V flags 4 deprecated true signature (TR;)V runtimeAnnotations @Ljava/lang/Deprecated;(since="12")
+
+class name javax/lang/model/util/TypeKindVisitor9
+header extends javax/lang/model/util/TypeKindVisitor8 flags 21 signature <R:Ljava/lang/Object;P:Ljava/lang/Object;>Ljavax/lang/model/util/TypeKindVisitor8<TR;TP;>; runtimeAnnotations @Ljavax/annotation/processing/SupportedSourceVersion;(value=eLjavax/lang/model/SourceVersion;RELEASE_12;)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/make/data/symbols/java.desktop-C.sym.txt	Wed Feb 13 13:22:15 2019 -0500
@@ -0,0 +1,47 @@
+#
+# Copyright (c) 2019, 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 FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. ###
+# ##########################################################
+#
+class name javax/swing/border/TitledBorder
+header extends javax/swing/border/AbstractBorder flags 21
+innerclass innerClass java/awt/Component$BaselineResizeBehavior outerClass java/awt/Component innerClassName BaselineResizeBehavior flags 4019
+innerclass innerClass java/awt/geom/Path2D$Float outerClass java/awt/geom/Path2D innerClassName Float flags 9
+innerclass innerClass java/lang/ref/Cleaner$Cleanable outerClass java/lang/ref/Cleaner innerClassName Cleanable flags 609
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name javax/swing/filechooser/FileSystemView
+method name getChooserShortcutPanelFiles descriptor ()[Ljava/io/File; flags 11
+
+class name javax/swing/text/html/StyleSheet$ListPainter
+header extends java/lang/Object implements java/io/Serializable nestHost javax/swing/text/html/StyleSheet flags 21
+innerclass innerClass javax/swing/text/html/StyleSheet$ListPainter outerClass javax/swing/text/html/StyleSheet innerClassName ListPainter flags 9
+innerclass innerClass javax/swing/text/html/HTML$Tag outerClass javax/swing/text/html/HTML innerClassName Tag flags 9
+innerclass innerClass javax/swing/text/html/CSS$Attribute outerClass javax/swing/text/html/CSS innerClassName Attribute flags 19
+innerclass innerClass javax/swing/text/html/HTML$Attribute outerClass javax/swing/text/html/HTML innerClassName Attribute flags 19
+innerclass innerClass java/awt/RenderingHints$Key outerClass java/awt/RenderingHints innerClassName Key flags 409
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/make/data/symbols/java.naming-C.sym.txt	Wed Feb 13 13:22:15 2019 -0500
@@ -0,0 +1,50 @@
+#
+# Copyright (c) 2019, 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 FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. ###
+# ##########################################################
+#
+module name java.naming
+header exports javax/naming,javax/naming/directory,javax/naming/event,javax/naming/ldap,javax/naming/spi,javax/naming/ldap/spi requires name\u0020;java.base\u0020;flags\u0020;8000,name\u0020;java.security.sasl\u0020;flags\u0020;0 uses javax/naming/ldap/StartTlsResponse,javax/naming/spi/InitialContextFactory,javax/naming/ldap/spi/LdapDnsProvider provides interface\u0020;java/security/Provider\u0020;impls\u0020;sun/security/provider/certpath/ldap/JdkLDAP target linux-amd64 flags 8000
+
+class name javax/naming/Name
+-field name serialVersionUID descriptor J
+field name serialVersionUID descriptor J constantValue -3617482732056931635 flags 19 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;
+
+class name javax/naming/directory/Attribute
+-field name serialVersionUID descriptor J
+field name serialVersionUID descriptor J constantValue 8707690322213556804 flags 19 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;
+
+class name javax/naming/ldap/spi/LdapDnsProvider
+header extends java/lang/Object flags 421
+method name <init> descriptor ()V flags 4
+method name lookupEndpoints descriptor (Ljava/lang/String;Ljava/util/Map;)Ljava/util/Optional; thrownTypes javax/naming/NamingException flags 401 signature (Ljava/lang/String;Ljava/util/Map<**>;)Ljava/util/Optional<Ljavax/naming/ldap/spi/LdapDnsProviderResult;>;
+
+class name javax/naming/ldap/spi/LdapDnsProviderResult
+header extends java/lang/Object flags 31
+method name <init> descriptor (Ljava/lang/String;Ljava/util/List;)V flags 1 signature (Ljava/lang/String;Ljava/util/List<Ljava/lang/String;>;)V
+method name getDomainName descriptor ()Ljava/lang/String; flags 1
+method name getEndpoints descriptor ()Ljava/util/List; flags 1 signature ()Ljava/util/List<Ljava/lang/String;>;
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/make/data/symbols/java.rmi-C.sym.txt	Wed Feb 13 13:22:15 2019 -0500
@@ -0,0 +1,36 @@
+#
+# Copyright (c) 2019, 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 FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. ###
+# ##########################################################
+#
+class name java/rmi/server/RemoteRef
+-field name serialVersionUID descriptor J
+field name serialVersionUID descriptor J constantValue 3632638527362204081 flags 19 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;
+
+class name java/rmi/server/ServerRef
+-field name serialVersionUID descriptor J
+field name serialVersionUID descriptor J constantValue -4557750989390278438 flags 19 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/make/data/symbols/java.xml-C.sym.txt	Wed Feb 13 13:22:15 2019 -0500
@@ -0,0 +1,32 @@
+#
+# Copyright (c) 2019, 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 FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. ###
+# ##########################################################
+#
+class name javax/xml/stream/XMLInputFactory
+method name newFactory descriptor ()Ljavax/xml/stream/XMLInputFactory; thrownTypes javax/xml/stream/FactoryConfigurationError flags 9
+-method name newFactory descriptor ()Ljavax/xml/stream/XMLInputFactory;
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/make/data/symbols/jdk.compiler-C.sym.txt	Wed Feb 13 13:22:15 2019 -0500
@@ -0,0 +1,84 @@
+#
+# Copyright (c) 2019, 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 FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. ###
+# ##########################################################
+#
+class name com/sun/source/doctree/DocTree$Kind
+field name SYSTEM_PROPERTY descriptor Lcom/sun/source/doctree/DocTree$Kind; flags 4019
+
+class name com/sun/source/doctree/DocTreeVisitor
+method name visitSystemProperty descriptor (Lcom/sun/source/doctree/SystemPropertyTree;Ljava/lang/Object;)Ljava/lang/Object; flags 1 signature (Lcom/sun/source/doctree/SystemPropertyTree;TP;)TR;
+
+class name com/sun/source/doctree/SystemPropertyTree
+header extends java/lang/Object implements com/sun/source/doctree/InlineTagTree flags 601
+method name getPropertyName descriptor ()Ljavax/lang/model/element/Name; flags 401
+
+class name com/sun/source/tree/BreakTree
+method name getValue descriptor ()Lcom/sun/source/tree/ExpressionTree; flags 401 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="12")
+
+class name com/sun/source/tree/CaseTree
+header extends java/lang/Object implements com/sun/source/tree/Tree nestMembers com/sun/source/tree/CaseTree$CaseKind flags 601
+innerclass innerClass com/sun/source/tree/CaseTree$CaseKind outerClass com/sun/source/tree/CaseTree innerClassName CaseKind flags 4019
+method name getExpressions descriptor ()Ljava/util/List; flags 401 deprecated true signature ()Ljava/util/List<+Lcom/sun/source/tree/ExpressionTree;>; runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="12")
+method name getBody descriptor ()Lcom/sun/source/tree/Tree; flags 1 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="12")
+method name getCaseKind descriptor ()Lcom/sun/source/tree/CaseTree$CaseKind; flags 1 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="12")
+
+class name com/sun/source/tree/CaseTree$CaseKind
+header extends java/lang/Enum nestHost com/sun/source/tree/CaseTree flags 4031 deprecated true signature Ljava/lang/Enum<Lcom/sun/source/tree/CaseTree$CaseKind;>; runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="12")
+innerclass innerClass com/sun/source/tree/CaseTree$CaseKind outerClass com/sun/source/tree/CaseTree innerClassName CaseKind flags 4019
+field name STATEMENT descriptor Lcom/sun/source/tree/CaseTree$CaseKind; flags 4019
+field name RULE descriptor Lcom/sun/source/tree/CaseTree$CaseKind; flags 4019
+method name values descriptor ()[Lcom/sun/source/tree/CaseTree$CaseKind; flags 9
+method name valueOf descriptor (Ljava/lang/String;)Lcom/sun/source/tree/CaseTree$CaseKind; flags 9
+
+class name com/sun/source/tree/SwitchExpressionTree
+header extends java/lang/Object implements com/sun/source/tree/ExpressionTree flags 601 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="12")
+method name getExpression descriptor ()Lcom/sun/source/tree/ExpressionTree; flags 401
+method name getCases descriptor ()Ljava/util/List; flags 401 signature ()Ljava/util/List<+Lcom/sun/source/tree/CaseTree;>;
+
+class name com/sun/source/tree/Tree$Kind
+field name SWITCH_EXPRESSION descriptor Lcom/sun/source/tree/Tree$Kind; flags 4019 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="12")
+
+class name com/sun/source/tree/TreeVisitor
+method name visitSwitchExpression descriptor (Lcom/sun/source/tree/SwitchExpressionTree;Ljava/lang/Object;)Ljava/lang/Object; flags 401 deprecated true signature (Lcom/sun/source/tree/SwitchExpressionTree;TP;)TR; runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="12")
+
+class name com/sun/source/util/DocTreeFactory
+method name newSystemPropertyTree descriptor (Ljavax/lang/model/element/Name;)Lcom/sun/source/doctree/SystemPropertyTree; flags 401
+
+class name com/sun/source/util/DocTreeScanner
+method name visitSystemProperty descriptor (Lcom/sun/source/doctree/SystemPropertyTree;Ljava/lang/Object;)Ljava/lang/Object; flags 1 signature (Lcom/sun/source/doctree/SystemPropertyTree;TP;)TR;
+
+class name com/sun/source/util/SimpleDocTreeVisitor
+method name visitSystemProperty descriptor (Lcom/sun/source/doctree/SystemPropertyTree;Ljava/lang/Object;)Ljava/lang/Object; flags 1 signature (Lcom/sun/source/doctree/SystemPropertyTree;TP;)TR;
+
+class name com/sun/source/util/SimpleTreeVisitor
+method name visitSwitchExpression descriptor (Lcom/sun/source/tree/SwitchExpressionTree;Ljava/lang/Object;)Ljava/lang/Object; flags 1 deprecated true signature (Lcom/sun/source/tree/SwitchExpressionTree;TP;)TR; runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="12")
+
+class name com/sun/source/util/TreeScanner
+header extends java/lang/Object implements com/sun/source/tree/TreeVisitor flags 21 signature <R:Ljava/lang/Object;P:Ljava/lang/Object;>Ljava/lang/Object;Lcom/sun/source/tree/TreeVisitor<TR;TP;>;
+innerclass innerClass com/sun/source/tree/CaseTree$CaseKind outerClass com/sun/source/tree/CaseTree innerClassName CaseKind flags 4019
+method name visitSwitchExpression descriptor (Lcom/sun/source/tree/SwitchExpressionTree;Ljava/lang/Object;)Ljava/lang/Object; flags 1 deprecated true signature (Lcom/sun/source/tree/SwitchExpressionTree;TP;)TR; runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="12")
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/make/data/symbols/jdk.jfr-C.sym.txt	Wed Feb 13 13:22:15 2019 -0500
@@ -0,0 +1,31 @@
+#
+# Copyright (c) 2019, 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 FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. ###
+# ##########################################################
+#
+class name jdk/jfr/Event
+header extends jdk/internal/event/Event flags 421 runtimeAnnotations @Ljdk/jfr/Enabled;(value=Ztrue)@Ljdk/jfr/StackTrace;(value=Ztrue)@Ljdk/jfr/Registered;(value=Ztrue)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/make/data/symbols/jdk.jsobject-C.sym.txt	Wed Feb 13 13:22:15 2019 -0500
@@ -0,0 +1,32 @@
+#
+# Copyright (c) 2019, 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 FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. ###
+# ##########################################################
+#
+class name netscape/javascript/JSObject
+-method name getWindow descriptor (Ljava/applet/Applet;)Lnetscape/javascript/JSObject;
+method name getWindow descriptor (Ljava/applet/Applet;)Lnetscape/javascript/JSObject; thrownTypes netscape/javascript/JSException flags 9 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="9")
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/make/data/symbols/jdk.unsupported-C.sym.txt	Wed Feb 13 13:22:15 2019 -0500
@@ -0,0 +1,32 @@
+#
+# Copyright (c) 2019, 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 FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. ###
+# ##########################################################
+#
+class name sun/reflect/ReflectionFactory
+header extends java/lang/Object flags 21 classAnnotations @Lsun/Proprietary+Annotation;
+-method name newInstanceForSerialization descriptor (Ljava/lang/reflect/Constructor;[Ljava/security/ProtectionDomain;)Ljava/lang/Object;
+
--- a/make/data/symbols/symbols	Tue Feb 12 11:58:41 2019 -0500
+++ b/make/data/symbols/symbols	Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
 #
-# Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2015, 2019, 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,9 +29,10 @@
 #command used to generate this file:
 #build.tools.symbolgenerator.CreateSymbols build-description-incremental symbols include.list
 #
-generate platforms 7:8:9:A:B
+generate platforms 7:8:9:A:B:C
 platform version 8 files java.activation-8.sym.txt:java.base-8.sym.txt:java.compiler-8.sym.txt:java.corba-8.sym.txt:java.datatransfer-8.sym.txt:java.desktop-8.sym.txt:java.instrument-8.sym.txt:java.logging-8.sym.txt:java.management-8.sym.txt:java.management.rmi-8.sym.txt:java.naming-8.sym.txt:java.prefs-8.sym.txt:java.rmi-8.sym.txt:java.scripting-8.sym.txt:java.security.jgss-8.sym.txt:java.security.sasl-8.sym.txt:java.sql-8.sym.txt:java.sql.rowset-8.sym.txt:java.transaction-8.sym.txt:java.xml-8.sym.txt:java.xml.bind-8.sym.txt:java.xml.crypto-8.sym.txt:java.xml.ws-8.sym.txt:java.xml.ws.annotation-8.sym.txt:jdk.httpserver-8.sym.txt:jdk.management-8.sym.txt:jdk.scripting.nashorn-8.sym.txt:jdk.sctp-8.sym.txt:jdk.security.auth-8.sym.txt:jdk.security.jgss-8.sym.txt
 platform version 7 base 8 files java.base-7.sym.txt:java.compiler-7.sym.txt:java.datatransfer-7.sym.txt:java.desktop-7.sym.txt:java.logging-7.sym.txt:java.management-7.sym.txt:java.naming-7.sym.txt:java.prefs-7.sym.txt:java.rmi-7.sym.txt:java.scripting-7.sym.txt:java.security.jgss-7.sym.txt:java.security.sasl-7.sym.txt:java.sql-7.sym.txt:java.sql.rowset-7.sym.txt:java.xml-7.sym.txt:java.xml.bind-7.sym.txt:java.xml.ws.annotation-7.sym.txt:jdk.httpserver-7.sym.txt:jdk.management-7.sym.txt:jdk.scripting.nashorn-7.sym.txt:jdk.sctp-7.sym.txt:jdk.security.auth-7.sym.txt:jdk.security.jgss-7.sym.txt
 platform version 9 base 8 files java.activation-9.sym.txt:java.base-9.sym.txt:java.compiler-9.sym.txt:java.corba-9.sym.txt:java.datatransfer-9.sym.txt:java.desktop-9.sym.txt:java.instrument-9.sym.txt:java.logging-9.sym.txt:java.management-9.sym.txt:java.management.rmi-9.sym.txt:java.naming-9.sym.txt:java.prefs-9.sym.txt:java.rmi-9.sym.txt:java.scripting-9.sym.txt:java.se-9.sym.txt:java.se.ee-9.sym.txt:java.security.jgss-9.sym.txt:java.security.sasl-9.sym.txt:java.smartcardio-9.sym.txt:java.sql-9.sym.txt:java.sql.rowset-9.sym.txt:java.transaction-9.sym.txt:java.xml-9.sym.txt:java.xml.bind-9.sym.txt:java.xml.crypto-9.sym.txt:java.xml.ws-9.sym.txt:java.xml.ws.annotation-9.sym.txt:jdk.accessibility-9.sym.txt:jdk.attach-9.sym.txt:jdk.charsets-9.sym.txt:jdk.compiler-9.sym.txt:jdk.crypto.cryptoki-9.sym.txt:jdk.crypto.ec-9.sym.txt:jdk.dynalink-9.sym.txt:jdk.editpad-9.sym.txt:jdk.hotspot.agent-9.sym.txt:jdk.httpserver-9.sym.txt:jdk.incubator.httpclient-9.sym.txt:jdk.jartool-9.sym.txt:jdk.javadoc-9.sym.txt:jdk.jcmd-9.sym.txt:jdk.jconsole-9.sym.txt:jdk.jdeps-9.sym.txt:jdk.jdi-9.sym.txt:jdk.jdwp.agent-9.sym.txt:jdk.jlink-9.sym.txt:jdk.jshell-9.sym.txt:jdk.jsobject-9.sym.txt:jdk.jstatd-9.sym.txt:jdk.localedata-9.sym.txt:jdk.management-9.sym.txt:jdk.management.agent-9.sym.txt:jdk.naming.dns-9.sym.txt:jdk.naming.rmi-9.sym.txt:jdk.net-9.sym.txt:jdk.pack-9.sym.txt:jdk.policytool-9.sym.txt:jdk.rmic-9.sym.txt:jdk.scripting.nashorn-9.sym.txt:jdk.sctp-9.sym.txt:jdk.security.auth-9.sym.txt:jdk.security.jgss-9.sym.txt:jdk.unsupported-9.sym.txt:jdk.xml.dom-9.sym.txt:jdk.zipfs-9.sym.txt
 platform version A base 9 files java.activation-A.sym.txt:java.base-A.sym.txt:java.compiler-A.sym.txt:java.corba-A.sym.txt:java.datatransfer-A.sym.txt:java.desktop-A.sym.txt:java.instrument-A.sym.txt:java.logging-A.sym.txt:java.management-A.sym.txt:java.management.rmi-A.sym.txt:java.naming-A.sym.txt:java.prefs-A.sym.txt:java.rmi-A.sym.txt:java.scripting-A.sym.txt:java.se-A.sym.txt:java.se.ee-A.sym.txt:java.security.jgss-A.sym.txt:java.security.sasl-A.sym.txt:java.smartcardio-A.sym.txt:java.sql-A.sym.txt:java.sql.rowset-A.sym.txt:java.transaction-A.sym.txt:java.xml-A.sym.txt:java.xml.bind-A.sym.txt:java.xml.crypto-A.sym.txt:java.xml.ws-A.sym.txt:java.xml.ws.annotation-A.sym.txt:jdk.accessibility-A.sym.txt:jdk.attach-A.sym.txt:jdk.charsets-A.sym.txt:jdk.compiler-A.sym.txt:jdk.crypto.cryptoki-A.sym.txt:jdk.crypto.ec-A.sym.txt:jdk.dynalink-A.sym.txt:jdk.editpad-A.sym.txt:jdk.hotspot.agent-A.sym.txt:jdk.httpserver-A.sym.txt:jdk.incubator.httpclient-A.sym.txt:jdk.jartool-A.sym.txt:jdk.javadoc-A.sym.txt:jdk.jcmd-A.sym.txt:jdk.jconsole-A.sym.txt:jdk.jdeps-A.sym.txt:jdk.jdi-A.sym.txt:jdk.jdwp.agent-A.sym.txt:jdk.jlink-A.sym.txt:jdk.jshell-A.sym.txt:jdk.jsobject-A.sym.txt:jdk.jstatd-A.sym.txt:jdk.localedata-A.sym.txt:jdk.management-A.sym.txt:jdk.management.agent-A.sym.txt:jdk.naming.dns-A.sym.txt:jdk.naming.rmi-A.sym.txt:jdk.net-A.sym.txt:jdk.pack-A.sym.txt:jdk.policytool-A.sym.txt:jdk.rmic-A.sym.txt:jdk.scripting.nashorn-A.sym.txt:jdk.sctp-A.sym.txt:jdk.security.auth-A.sym.txt:jdk.security.jgss-A.sym.txt:jdk.unsupported-A.sym.txt:jdk.xml.dom-A.sym.txt:jdk.zipfs-A.sym.txt
 platform version B base A files java.activation-B.sym.txt:java.base-B.sym.txt:java.compiler-B.sym.txt:java.corba-B.sym.txt:java.datatransfer-B.sym.txt:java.desktop-B.sym.txt:java.instrument-B.sym.txt:java.logging-B.sym.txt:java.management-B.sym.txt:java.management.rmi-B.sym.txt:java.naming-B.sym.txt:java.net.http-B.sym.txt:java.prefs-B.sym.txt:java.rmi-B.sym.txt:java.scripting-B.sym.txt:java.se-B.sym.txt:java.se.ee-B.sym.txt:java.security.jgss-B.sym.txt:java.security.sasl-B.sym.txt:java.smartcardio-B.sym.txt:java.sql-B.sym.txt:java.sql.rowset-B.sym.txt:java.transaction-B.sym.txt:java.transaction.xa-B.sym.txt:java.xml-B.sym.txt:java.xml.bind-B.sym.txt:java.xml.crypto-B.sym.txt:java.xml.ws-B.sym.txt:java.xml.ws.annotation-B.sym.txt:jdk.accessibility-B.sym.txt:jdk.attach-B.sym.txt:jdk.charsets-B.sym.txt:jdk.compiler-B.sym.txt:jdk.crypto.cryptoki-B.sym.txt:jdk.crypto.ec-B.sym.txt:jdk.dynalink-B.sym.txt:jdk.editpad-B.sym.txt:jdk.hotspot.agent-B.sym.txt:jdk.httpserver-B.sym.txt:jdk.incubator.httpclient-B.sym.txt:jdk.jartool-B.sym.txt:jdk.javadoc-B.sym.txt:jdk.jcmd-B.sym.txt:jdk.jconsole-B.sym.txt:jdk.jdeps-B.sym.txt:jdk.jdi-B.sym.txt:jdk.jdwp.agent-B.sym.txt:jdk.jfr-B.sym.txt:jdk.jlink-B.sym.txt:jdk.jshell-B.sym.txt:jdk.jsobject-B.sym.txt:jdk.jstatd-B.sym.txt:jdk.localedata-B.sym.txt:jdk.management-B.sym.txt:jdk.management.agent-B.sym.txt:jdk.management.jfr-B.sym.txt:jdk.naming.dns-B.sym.txt:jdk.naming.rmi-B.sym.txt:jdk.net-B.sym.txt:jdk.pack-B.sym.txt:jdk.rmic-B.sym.txt:jdk.scripting.nashorn-B.sym.txt:jdk.sctp-B.sym.txt:jdk.security.auth-B.sym.txt:jdk.security.jgss-B.sym.txt:jdk.unsupported-B.sym.txt:jdk.xml.dom-B.sym.txt:jdk.zipfs-B.sym.txt
+platform version C base B files java.base-C.sym.txt:java.compiler-C.sym.txt:java.desktop-C.sym.txt:java.naming-C.sym.txt:java.rmi-C.sym.txt:java.xml-C.sym.txt:jdk.compiler-C.sym.txt:jdk.jfr-C.sym.txt:jdk.jsobject-C.sym.txt:jdk.unsupported-C.sym.txt
--- a/make/gensrc/Gensrc-java.desktop.gmk	Tue Feb 12 11:58:41 2019 -0500
+++ b/make/gensrc/Gensrc-java.desktop.gmk	Wed Feb 13 13:22:15 2019 -0500
@@ -28,11 +28,11 @@
 # Hook to include the corresponding custom file, if present.
 $(eval $(call IncludeCustomExtension, gensrc/Gensrc-java.desktop.gmk))
 
-ifneq ($(OPENJDK_TARGET_OS), windows)
+ifeq ($(call isTargetOs, windows), false)
   include GensrcIcons.gmk
 endif
 
-ifneq ($(filter $(OPENJDK_TARGET_OS), linux solaris aix), )
+ifeq ($(call isTargetOs, linux solaris aix), true)
   include GensrcX11Wrappers.gmk
 endif
 
@@ -52,21 +52,21 @@
     $(TOPDIR)/src/java.desktop/share/classes/sun/print/resources \
     #
 
-ifeq ($(OPENJDK_TARGET_OS), macosx)
+ifeq ($(call isTargetOs, macosx), true)
   PROP_SRC_DIRS += \
       $(TOPDIR)/src/java.desktop/macosx/classes/com/apple/laf/resources \
       $(TOPDIR)/src/java.desktop/macosx/classes/sun/awt/resources \
       #
 endif
 
-ifeq ($(OPENJDK_TARGET_OS), windows)
+ifeq ($(call isTargetOs, windows), true)
   PROP_SRC_DIRS += \
       $(TOPDIR)/src/java.desktop/windows/classes/com/sun/java/swing/plaf/windows/resources \
       $(TOPDIR)/src/java.desktop/windows/classes/sun/awt/windows \
       #
 endif
 
-ifeq ($(filter $(OPENJDK_TARGET_OS), windows macosx), )
+ifeq ($(call isTargetOs, windows macosx), false)
   PROP_SRC_DIRS += $(TOPDIR)/src/java.desktop/share/classes/com/sun/java/swing/plaf/gtk/resources
 endif
 
--- a/make/gensrc/Gensrc-jdk.hotspot.agent.gmk	Tue Feb 12 11:58:41 2019 -0500
+++ b/make/gensrc/Gensrc-jdk.hotspot.agent.gmk	Wed Feb 13 13:22:15 2019 -0500
@@ -42,7 +42,7 @@
 
 ################################################################################
 
-ifeq ($(OPENJDK_TARGET_OS), macosx)
+ifeq ($(call isTargetOs, macosx), true)
   MIG_OUTPUT_DIR := $(SUPPORT_OUTPUTDIR)/gensrc/jdk.hotspot.agent
   MACH_EXC_HEADER := $(MIG_OUTPUT_DIR)/mach_exc.h
   MACH_EXC_USER := $(MIG_OUTPUT_DIR)/mach_excUser.c
--- a/make/gensrc/GensrcIcons.gmk	Tue Feb 12 11:58:41 2019 -0500
+++ b/make/gensrc/GensrcIcons.gmk	Wed Feb 13 13:22:15 2019 -0500
@@ -108,7 +108,7 @@
 
 ################################################################################
 
-ifeq ($(OPENJDK_TARGET_OS), macosx)
+ifeq ($(call isTargetOs, macosx), true)
 
   GENSRC_OSX_ICONS_DST := $(SUPPORT_OUTPUTDIR)/headers/java.desktop
   GENSRC_OSX_ICONS := $(GENSRC_OSX_ICONS_DST)/AWTIconData.h
--- a/make/gensrc/GensrcMisc.gmk	Tue Feb 12 11:58:41 2019 -0500
+++ b/make/gensrc/GensrcMisc.gmk	Wed Feb 13 13:22:15 2019 -0500
@@ -89,7 +89,7 @@
 
 ################################################################################
 
-ifneq ($(OPENJDK_TARGET_OS), windows)
+ifeq ($(call isTargetOs, windows), false)
 
   GENSRC_UC_FILE := $(SUPPORT_OUTPUTDIR)/gensrc/java.base/sun/nio/fs/UnixConstants.java
 
@@ -103,7 +103,7 @@
 
 ################################################################################
 
-ifeq ($(OPENJDK_TARGET_OS), solaris)
+ifeq ($(call isTargetOs, solaris), true)
 
   GENSRC_SC_FILE := $(SUPPORT_OUTPUTDIR)/gensrc/java.base/sun/nio/fs/SolarisConstants.java
 
--- a/make/hotspot/CopyToExplodedJdk.gmk	Tue Feb 12 11:58:41 2019 -0500
+++ b/make/hotspot/CopyToExplodedJdk.gmk	Wed Feb 13 13:22:15 2019 -0500
@@ -25,7 +25,7 @@
 
 # Copy all built libraries into exploded jdk
 LIB_TARGETS := $(filter $(LIB_OUTPUTDIR)/%, $(TARGETS))
-ifeq ($(OPENJDK_TARGET_OS), windows)
+ifeq ($(call isTargetOs, windows), true)
   $(eval $(call SetupCopyFiles, COPY_LIBS_BIN, \
       SRC := $(SUPPORT_OUTPUTDIR)/modules_libs/java.base, \
       DEST := $(JDK_OUTPUTDIR)/bin, \
--- a/make/hotspot/gensrc/GensrcAdlc.gmk	Tue Feb 12 11:58:41 2019 -0500
+++ b/make/hotspot/gensrc/GensrcAdlc.gmk	Wed Feb 13 13:22:15 2019 -0500
@@ -34,16 +34,16 @@
 
   # Flags depending on the build platform/tool chain
   # NOTE: No optimization or debug flags set here
-  ifeq ($(OPENJDK_BUILD_OS), linux)
+  ifeq ($(call isBuildOs, linux), true)
     ADLC_CFLAGS := -fno-exceptions -DLINUX
-  else ifeq ($(OPENJDK_BUILD_OS), solaris)
+  else ifeq ($(call isBuildOs, solaris), true)
     ADLC_LDFLAGS := -m64
     ADLC_CFLAGS := -m64
     ADLC_CFLAGS_WARNINGS := +w
-  else ifeq ($(OPENJDK_BUILD_OS), aix)
+  else ifeq ($(call isBuildOs, aix), true)
     ADLC_LDFLAGS := -q64
     ADLC_CFLAGS := -qnortti -qeh -q64 -DAIX
-  else ifeq ($(OPENJDK_BUILD_OS), windows)
+  else ifeq ($(call isBuildOs, windows), true)
     ADLC_LDFLAGS := -nologo
     ADLC_CFLAGS := -nologo -EHsc
     # NOTE: The old build also have -D_CRT_SECURE_NO_DEPRECATE but it doesn't
@@ -87,17 +87,17 @@
   ADLCFLAGS += -q -T
 
   # ADLC flags depending on target OS
-  ifeq ($(OPENJDK_TARGET_OS), linux)
+  ifeq ($(call isTargetOs, linux), true)
     ADLCFLAGS += -DLINUX=1 -D_GNU_SOURCE=1
-  else ifeq ($(OPENJDK_TARGET_OS), solaris)
+  else ifeq ($(call isTargetOs, solaris), true)
     ADLCFLAGS += -DSOLARIS=1 -DSPARC_WORKS=1
-  else ifeq ($(OPENJDK_TARGET_OS), aix)
+  else ifeq ($(call isTargetOs, aix), true)
     ADLCFLAGS += -DAIX=1
-  else ifeq ($(OPENJDK_TARGET_OS), macosx)
+  else ifeq ($(call isTargetOs, macosx), true)
     ADLCFLAGS += -D_ALLBSD_SOURCE=1 -D_GNU_SOURCE=1
   endif
 
-  ifneq ($(OPENJDK_TARGET_OS), windows)
+  ifeq ($(call isTargetOs, windows), false)
     # NOTE: Windows adlc flags was different in the old build. Is this really
     # correct?
 
@@ -109,7 +109,7 @@
 
   # This generates checks in the generated C++ files that _LP64 is correctly
   # (un)defined when compiling them.
-  ifeq ($(OPENJDK_TARGET_CPU_BITS), 64)
+  ifeq ($(call isTargetCpuBits, 64), true)
     ADLCFLAGS += -D_LP64=1
   else
     ADLCFLAGS += -U_LP64
--- a/make/hotspot/gensrc/GensrcDtrace.gmk	Tue Feb 12 11:58:41 2019 -0500
+++ b/make/hotspot/gensrc/GensrcDtrace.gmk	Wed Feb 13 13:22:15 2019 -0500
@@ -28,12 +28,12 @@
 
 ifeq ($(call check-jvm-feature, dtrace), true)
 
-  ifeq ($(OPENJDK_TARGET_OS), solaris)
+  ifeq ($(call isTargetOs, solaris), true)
     DTRACE_FLAGS := -64
     DTRACE_CPP_FLAGS := -D_LP64
-  else ifeq ($(OPENJDK_TARGET_OS), macosx)
+  else ifeq ($(call isTargetOs, macosx), true)
     DTRACE_CPP_FLAGS := -D_LP64 -x c
-  else ifeq ($(OPENJDK_TARGET_OS), linux)
+  else ifeq ($(call isTargetOs, linux), true)
     DTRACE_CPP_FLAGS := -x c
   endif
 
@@ -54,7 +54,7 @@
   TARGETS += $(patsubst $(DTRACE_SOURCE_DIR)/%.d, \
       $(DTRACE_GENSRC_DIR)/%.h, $(wildcard $(DTRACE_SOURCE_DIR)/*.d))
 
-  ifeq ($(OPENJDK_TARGET_OS), solaris)
+  ifeq ($(call isTargetOs, solaris), true)
     ############################################################################
     # First we need to generate the dtraceGenOffsets tool. When run, this will
     # produce two header files and a C++ file. Note that generateJvmOffsets.cpp
--- a/make/hotspot/ide/CreateVSProject.gmk	Tue Feb 12 11:58:41 2019 -0500
+++ b/make/hotspot/ide/CreateVSProject.gmk	Wed Feb 13 13:22:15 2019 -0500
@@ -31,7 +31,7 @@
 include JavaCompilation.gmk
 include SetupJavaCompilers.gmk
 
-ifeq ($(OPENJDK_TARGET_OS), windows)
+ifeq ($(call isTargetOs, windows), true)
   # The next part is a bit hacky. We include the CompileJvm.gmk to be
   # able to extact flags, but we do not wish to execute the rules.
 
@@ -46,12 +46,12 @@
 
   # Helper macro to convert a unix path to a Windows path, suitable for
   # inclusion in a command line.
-  ifeq ($(OPENJDK_BUILD_OS_ENV), windows.cygwin)
+  ifeq ($(call isBuildOsEnv, windows.cygwin), true)
     FixPath = \
         $(strip $(subst \,\\,$(shell $(CYGPATH) -w $1)))
     FixLinuxExecutable = \
         $(call FixPath, $1)
-  else ifeq ($(OPENJDK_BUILD_OS_ENV), windows.wsl)
+  else ifeq ($(call isBuildOsEnv, windows.wsl), true)
     FixPath = \
         $(strip $(subst \,\\,$(shell $(WSLPATH) -w $1)))
     FixLinuxExecutable = \
--- a/make/hotspot/lib/CompileDtraceLibraries.gmk	Tue Feb 12 11:58:41 2019 -0500
+++ b/make/hotspot/lib/CompileDtraceLibraries.gmk	Wed Feb 13 13:22:15 2019 -0500
@@ -24,7 +24,7 @@
 #
 
 ifeq ($(call check-jvm-feature, dtrace), true)
-  ifeq ($(OPENJDK_TARGET_OS), solaris)
+  ifeq ($(call isTargetOs, solaris), true)
     JNI_INCLUDE_FLAGS := \
         -I$(SUPPORT_OUTPUTDIR)/modules_include/java.base \
         -I$(SUPPORT_OUTPUTDIR)/modules_include/java.base/$(OPENJDK_TARGET_OS_INCLUDE_SUBDIR) \
--- a/make/hotspot/lib/CompileGtest.gmk	Tue Feb 12 11:58:41 2019 -0500
+++ b/make/hotspot/lib/CompileGtest.gmk	Wed Feb 13 13:22:15 2019 -0500
@@ -31,7 +31,7 @@
 
 # On Windows, there are no internal debug symbols so must set copying to true
 # to get any at all.
-ifeq ($(OPENJDK_TARGET_OS), windows)
+ifeq ($(call isTargetOs, windows), true)
   GTEST_COPY_DEBUG_SYMBOLS := true
 else
   GTEST_COPY_DEBUG_SYMBOLS := false
@@ -39,7 +39,7 @@
 
 ################################################################################
 
-ifeq ($(OPENJDK_TARGET_OS), windows)
+ifeq ($(call isTargetOs, windows), true)
   GTEST_JVM_MAPFILE := $(JVM_MAPFILE)
 else
   GTEST_JVM_MAPFILE := $(JVM_OUTPUTDIR)/gtest/mapfile
--- a/make/hotspot/lib/CompileJvm.gmk	Tue Feb 12 11:58:41 2019 -0500
+++ b/make/hotspot/lib/CompileJvm.gmk	Wed Feb 13 13:22:15 2019 -0500
@@ -56,9 +56,9 @@
 JVM_EXCLUDES += adlc
 
 # Needed by vm_version.cpp
-ifeq ($(OPENJDK_TARGET_CPU), x86_64)
+ifeq ($(call isTargetCpu, x86_64), true)
   OPENJDK_TARGET_CPU_VM_VERSION := amd64
-else ifeq ($(OPENJDK_TARGET_CPU), sparcv9)
+else ifeq ($(call isTargetCpu, sparcv9), true)
   OPENJDK_TARGET_CPU_VM_VERSION := sparc
 else
   OPENJDK_TARGET_CPU_VM_VERSION := $(OPENJDK_TARGET_CPU)
@@ -107,10 +107,10 @@
 
 # ARM source selection
 
-ifeq ($(OPENJDK_TARGET_OS)-$(OPENJDK_TARGET_CPU), linux-arm)
+ifeq ($(call And, $(call isTargetOs, linux) $(call isTargetCpu, arm)), true)
   JVM_EXCLUDE_PATTERNS += arm_64
 
-else ifeq ($(OPENJDK_TARGET_OS)-$(OPENJDK_TARGET_CPU), linux-aarch64)
+else ifeq ($(call And, $(call isTargetOs, linux) $(call isTargetCpu, aarch64)), true)
   # For 64-bit arm builds, we use the 64 bit hotspot/src/cpu/arm
   # hotspot sources if HOTSPOT_TARGET_CPU_ARCH is set to arm.
   # Exclude the aarch64 and 32 bit arm files for this build.
@@ -119,21 +119,21 @@
   endif
 endif
 
-ifneq ($(filter $(OPENJDK_TARGET_OS), linux macosx windows), )
+ifeq ($(call isTargetOs, linux macosx windows), true)
   JVM_PRECOMPILED_HEADER := $(TOPDIR)/src/hotspot/share/precompiled/precompiled.hpp
 endif
 
-ifeq ($(OPENJDK_TARGET_CPU), x86)
+ifeq ($(call isTargetCpu, x86), true)
   JVM_EXCLUDE_PATTERNS += x86_64
-else ifeq ($(OPENJDK_TARGET_CPU), x86_64)
+else ifeq ($(call isTargetCpu, x86_64), true)
   JVM_EXCLUDE_PATTERNS += x86_32
 endif
 
 # Inline assembly for solaris
-ifeq ($(OPENJDK_TARGET_OS), solaris)
-  ifeq ($(OPENJDK_TARGET_CPU), x86_64)
+ifeq ($(call isTargetOs, solaris), true)
+  ifeq ($(call isTargetCpu, x86_64), true)
     JVM_CFLAGS += $(TOPDIR)/src/hotspot/os_cpu/solaris_x86/solaris_x86_64.il
-  else ifeq ($(OPENJDK_TARGET_CPU), sparcv9)
+  else ifeq ($(call isTargetCpu, sparcv9), true)
     JVM_CFLAGS += $(TOPDIR)/src/hotspot/os_cpu/solaris_sparc/solaris_sparc.il
   endif
   # Exclude warnings in devstudio 12.6
@@ -143,7 +143,7 @@
   endif
 endif
 
-ifeq ($(OPENJDK_TARGET_OS)-$(OPENJDK_TARGET_CPU), solaris-sparcv9)
+ifeq ($(call And, $(call isTargetOs, solaris) $(call isTargetCpu, sparcv9)), true)
   ifeq ($(COMPILE_WITH_DEBUG_SYMBOLS), false)
     # NOTE: In the old build, we weirdly enough set -g/-g0 always, regardless
     # of if debug symbols were needed. Without it, compilation fails on
@@ -152,8 +152,8 @@
   endif
 endif
 
-ifeq ($(OPENJDK_TARGET_OS), windows)
-  ifeq ($(OPENJDK_TARGET_CPU_BITS), 64)
+ifeq ($(call isTargetOs, windows), true)
+  ifeq ($(call isTargetCpuBits, 64), true)
     RC_DESC := 64-Bit$(SPACE)
   endif
   JVM_RCFLAGS += -D"HS_FILEDESC=$(HOTSPOT_VM_DISTRO) $(RC_DESC)$(JVM_VARIANT) VM"
@@ -209,7 +209,7 @@
     $(BUILD_LIBJVM_TARGET_DEPS))
 
 ifneq ($(GENERATE_COMPILE_COMMANDS_ONLY), true)
-  ifeq ($(OPENJDK_TARGET_OS), windows)
+  ifeq ($(call isTargetOs, windows), true)
     # It doesn't matter which jvm.lib file gets exported, but we need
     # to pick just one.
     ifeq ($(JVM_VARIANT), $(JVM_VARIANT_MAIN))
--- a/make/hotspot/lib/JvmDtraceObjects.gmk	Tue Feb 12 11:58:41 2019 -0500
+++ b/make/hotspot/lib/JvmDtraceObjects.gmk	Wed Feb 13 13:22:15 2019 -0500
@@ -24,7 +24,7 @@
 #
 
 ifeq ($(call check-jvm-feature, dtrace), true)
-  ifeq ($(OPENJDK_TARGET_OS), solaris)
+  ifeq ($(call isTargetOs, solaris), true)
 
     ############################################################################
     # Integrate with libjvm. Here we generate two object files which are
@@ -131,7 +131,7 @@
 	    > $(DTRACE_SUPPORT_DIR)/$(@F).d))
 	$(call ExecuteWithLog, $@, $(DTRACE) $(DTRACE_FLAGS) -o $@ \
 	    -s $(DTRACE_SUPPORT_DIR)/$(@F).d)
-        ifeq ($(OPENJDK_TARGET_CPU_ARCH), sparc)
+        ifeq ($(call isTargetCpuArch, sparc), true)
 	  $(call ExecuteWithLog, $@.elfedit, $(ELFEDIT) $(call GetElfeditCommands) $@)
         endif
 
--- a/make/hotspot/lib/JvmFeatures.gmk	Tue Feb 12 11:58:41 2019 -0500
+++ b/make/hotspot/lib/JvmFeatures.gmk	Wed Feb 13 13:22:15 2019 -0500
@@ -47,14 +47,14 @@
 ifeq ($(call check-jvm-feature, zero), true)
   JVM_CFLAGS_FEATURES += -DZERO -DCC_INTERP -DZERO_LIBARCH='"$(OPENJDK_TARGET_CPU_LEGACY_LIB)"' $(LIBFFI_CFLAGS)
   JVM_LIBS_FEATURES += $(LIBFFI_LIBS)
-  ifeq ($(OPENJDK_TARGET_CPU), sparcv9)
+  ifeq ($(call isTargetCpu, sparcv9), true)
     BUILD_LIBJVM_EXTRA_FILES := $(TOPDIR)/src/hotspot/cpu/sparc/memset_with_concurrent_readers_sparc.cpp
   endif
 endif
 
 ifeq ($(call check-jvm-feature, minimal), true)
   JVM_CFLAGS_FEATURES += -DMINIMAL_JVM -DVMTYPE=\"Minimal\"
-  ifeq ($(OPENJDK_TARGET_OS), linux)
+  ifeq ($(call isTargetOs, linux), true)
     # Override the default -g with a more liberal strip policy for the minimal JVM
     JVM_STRIPFLAGS := --strip-unneeded
   endif
--- a/make/hotspot/lib/JvmFlags.gmk	Tue Feb 12 11:58:41 2019 -0500
+++ b/make/hotspot/lib/JvmFlags.gmk	Wed Feb 13 13:22:15 2019 -0500
@@ -74,7 +74,7 @@
   endif
 else ifeq ($(DEBUG_LEVEL), fastdebug)
   JVM_CFLAGS_DEBUGLEVEL := -DASSERT
-  ifeq ($(filter $(OPENJDK_TARGET_OS), windows aix), )
+  ifeq ($(call isTargetOs, windows aix), false)
     # NOTE: Old build did not define CHECK_UNHANDLED_OOPS on Windows and AIX.
     JVM_CFLAGS_DEBUGLEVEL += -DCHECK_UNHANDLED_OOPS
   endif
--- a/make/hotspot/lib/JvmMapfile.gmk	Tue Feb 12 11:58:41 2019 -0500
+++ b/make/hotspot/lib/JvmMapfile.gmk	Wed Feb 13 13:22:15 2019 -0500
@@ -28,13 +28,13 @@
 ################################################################################
 # Combine a list of static symbols
 
-ifneq ($(OPENJDK_TARGET_OS)-$(OPENJDK_TARGET_CPU), windows-x86_64)
+ifeq ($(call And, $(call isTargetOs, windows) $(call isTargetCpu, x86_64)), false)
   # On Windows x86_64, we should not have any symbols at all, since that
   # results in duplicate warnings from the linker (JDK-8043491).
   SYMBOLS_SRC += $(TOPDIR)/make/hotspot/symbols/symbols-shared
 endif
 
-ifeq ($(OPENJDK_TARGET_OS_TYPE), unix)
+ifeq ($(call isTargetOsType, unix), true)
   SYMBOLS_SRC += $(TOPDIR)/make/hotspot/symbols/symbols-unix
 endif
 
@@ -48,7 +48,7 @@
   endif
 endif
 
-ifeq ($(OPENJDK_TARGET_OS), solaris)
+ifeq ($(call isTargetOs, solaris), true)
   ifeq ($(call check-jvm-feature, dtrace), true)
     # Additional mapfiles that are only used when dtrace is enabled
     ifeq ($(call check-jvm-feature, compiler2), true)
@@ -64,7 +64,7 @@
 # Create a dynamic list of symbols from the built object files. This is highly
 # platform dependent.
 
-ifeq ($(OPENJDK_TARGET_OS), linux)
+ifeq ($(call isTargetOs, linux), true)
   DUMP_SYMBOLS_CMD := $(NM) --defined-only *.o
   ifneq ($(FILTER_SYMBOLS_PATTERN), )
     FILTER_SYMBOLS_PATTERN := $(FILTER_SYMBOLS_PATTERN)|
@@ -76,7 +76,7 @@
         if ($$3 ~ /$(FILTER_SYMBOLS_PATTERN)/) print $$3; \
       }'
 
-else ifeq ($(OPENJDK_TARGET_OS), solaris)
+else ifeq ($(call isTargetOs, solaris), true)
   DUMP_SYMBOLS_CMD := $(NM) -p *.o
   ifneq ($(FILTER_SYMBOLS_PATTERN), )
     FILTER_SYMBOLS_PATTERN := $(FILTER_SYMBOLS_PATTERN)|
@@ -90,7 +90,7 @@
         if ($$3 ~ /$(FILTER_SYMBOLS_PATTERN)/) print $$3; \
       }'
 
-else ifeq ($(OPENJDK_TARGET_OS), macosx)
+else ifeq ($(call isTargetOs, macosx), true)
   # nm on macosx prints out "warning: nm: no name list" to stderr for
   # files without symbols. Hide this, even at the expense of hiding real errors.
   DUMP_SYMBOLS_CMD := $(NM) -Uj *.o 2> /dev/null
@@ -107,7 +107,7 @@
 # The script below might be what was intended, but it failes to link with tons
 # of 'cannot export hidden symbol vtable for X'.
 #  '{ if ($$1 ~ /^__ZTV/ || $$1 ~ /^_gHotSpotVM/) print substr($$1, 2) }'
-else ifeq ($(OPENJDK_TARGET_OS), aix)
+else ifeq ($(call isTargetOs, aix), true)
   # NOTE: The old build had the solution below. This should to be fixed in
   # configure instead.
 
@@ -123,7 +123,7 @@
         if ($$3 ~ /^SharedArchivePath__9Arguments$$/) print $$3; \
        }'
 
-else ifeq ($(OPENJDK_TARGET_OS), windows)
+else ifeq ($(call isTargetOs, windows), true)
   DUMP_SYMBOLS_CMD := $(DUMPBIN) -symbols *.obj
   FILTER_SYMBOLS_AWK_SCRIPT := \
       '{ \
@@ -153,12 +153,12 @@
 ################################################################################
 # Finally convert the symbol list into a platform-specific mapfile
 
-ifeq ($(OPENJDK_TARGET_OS), macosx)
+ifeq ($(call isTargetOs, macosx), true)
   # On macosx, we need to add a leading underscore
   define create-mapfile-work
 	  $(AWK) '{ if ($$0 ~ ".") { print "  _" $$0 } }'  < $^ > $@.tmp
   endef
-else ifeq ($(OPENJDK_TARGET_OS), windows)
+else ifeq ($(call isTargetOs, windows), true)
   # On windows, add an 'EXPORTS' header
   define create-mapfile-work
 	  $(ECHO) "EXPORTS" > $@.tmp
--- a/make/hotspot/lib/JvmOverrideFiles.gmk	Tue Feb 12 11:58:41 2019 -0500
+++ b/make/hotspot/lib/JvmOverrideFiles.gmk	Wed Feb 13 13:22:15 2019 -0500
@@ -51,7 +51,7 @@
   LIBJVM_FDLIBM_COPY_OPT_FLAG := $(CXX_O_FLAG_NORM)
 endif
 
-ifeq ($(OPENJDK_TARGET_OS), linux)
+ifeq ($(call isTargetOs, linux), true)
   BUILD_LIBJVM_ostream.cpp_CXXFLAGS := -D_FILE_OFFSET_BITS=64
   BUILD_LIBJVM_logFileOutput.cpp_CXXFLAGS := -D_FILE_OFFSET_BITS=64
 
@@ -65,7 +65,7 @@
 	#
   endif
 
-  ifeq ($(OPENJDK_TARGET_CPU), x86)
+  ifeq ($(call isTargetCpu, x86), true)
     # Performance measurements show that by compiling GC related code, we could
     # significantly reduce the GC pause time on 32 bit Linux/Unix platforms by
     # compiling without the PIC flag (-fPIC on linux).
@@ -83,7 +83,7 @@
     $(foreach s, $(NONPIC_SRC), $(eval BUILD_LIBJVM_$(notdir $s)_CXXFLAGS := -fno-PIC))
   endif
 
-else ifeq ($(OPENJDK_TARGET_OS), solaris)
+else ifeq ($(call isTargetOs, solaris), true)
   ifneq ($(DEBUG_LEVEL), slowdebug)
     # dev studio 12.6 workaround
     BUILD_LIBJVM_arguments.cpp_OPTIMIZATION := LOW
@@ -97,7 +97,7 @@
     BUILD_LIBJVM_jni.cpp_CXXFLAGS := -Qoption ube -O~yz
     BUILD_LIBJVM_stubGenerator_$(HOTSPOT_TARGET_CPU).cpp_CXXFLAGS := -xspace
 
-    ifeq ($(OPENJDK_TARGET_CPU), x86_64)
+    ifeq ($(call isTargetCpu, x86_64), true)
       # Temporary until SS10 C++ compiler is fixed
       BUILD_LIBJVM_generateOptoStub.cpp_CXXFLAGS := -xO2
       # Temporary util SS12u1 C++ compiler is fixed
@@ -118,7 +118,7 @@
     BUILD_LIBJVM_bytecodeInterpreter.cpp_CXXFLAGS := +d
     BUILD_LIBJVM_bytecodeInterpreterWithChecks.cpp_CXXFLAGS := +d
 
-    ifeq ($(OPENJDK_TARGET_CPU_ARCH), x86)
+    ifeq ($(call isTargetCpuArch, x86), true)
       # ube explodes on x86
       BUILD_LIBJVM_bytecodeInterpreter.cpp_CXXFLAGS += -xO1
       BUILD_LIBJVM_bytecodeInterpreterWithChecks.cpp_CXXFLAGS += -xO1
@@ -129,7 +129,7 @@
   # Workaround for jvmciCompilerToVM.cpp long compilation time
   BUILD_LIBJVM_jvmciCompilerToVMInit.cpp_OPTIMIZATION := NONE
 
-else ifeq ($(OPENJDK_TARGET_OS), macosx)
+else ifeq ($(call isTargetOs, macosx), true)
   # The copied fdlibm routines in these files must not be optimized
   BUILD_LIBJVM_sharedRuntimeTrig.cpp_CXXFLAGS := $(FDLIBM_CFLAGS) $(LIBJVM_FDLIBM_COPY_OPT_FLAG)
   BUILD_LIBJVM_sharedRuntimeTrans.cpp_CXXFLAGS := $(FDLIBM_CFLAGS) $(LIBJVM_FDLIBM_COPY_OPT_FLAG)
@@ -160,7 +160,7 @@
         #
   endif
 
-else ifeq ($(OPENJDK_TARGET_OS), aix)
+else ifeq ($(call isTargetOs, aix), true)
   BUILD_LIBJVM_synchronizer.cpp_CXXFLAGS := -qnoinline
   BUILD_LIBJVM_sharedRuntimeTrans.cpp_CXXFLAGS := $(CXX_O_FLAG_NONE)
   # Disable aggressive optimizations for functions in sharedRuntimeTrig.cpp
@@ -185,7 +185,7 @@
   # Disable ELF decoder on AIX (AIX uses XCOFF).
   JVM_EXCLUDE_PATTERNS += elf
 
-else ifeq ($(OPENJDK_TARGET_OS), windows)
+else ifeq ($(call isTargetOs, windows), true)
   JVM_PRECOMPILED_HEADER_EXCLUDE := \
       bytecodeInterpreter.cpp \
       bytecodeInterpreterWithChecks.cpp \
--- a/make/hotspot/test/GtestImage.gmk	Tue Feb 12 11:58:41 2019 -0500
+++ b/make/hotspot/test/GtestImage.gmk	Wed Feb 13 13:22:15 2019 -0500
@@ -37,7 +37,7 @@
   $(eval TARGETS += $$(COPY_GTEST_$v)) \
 )
 
-ifeq ($(OPENJDK_TARGET_OS), windows)
+ifeq ($(call isTargetOs, windows), true)
   $(foreach v, $(JVM_VARIANTS), \
     $(eval $(call SetupCopyFiles, COPY_GTEST_MSVCR_$v, \
         DEST := $(TEST_IMAGE_DIR)/hotspot/gtest/$v, \
@@ -54,7 +54,7 @@
   )
 endif
 
-ifeq ($(OPENJDK_TARGET_OS), solaris)
+ifeq ($(call isTargetOs, solaris), true)
   $(foreach v, $(JVM_VARIANTS), \
     $(eval $(call SetupCopyFiles, COPY_GTEST_STLPORT_$v, \
         DEST := $(TEST_IMAGE_DIR)/hotspot/gtest/$v, \
--- a/make/langtools/src/classes/build/tools/symbolgenerator/CreateSymbols.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/make/langtools/src/classes/build/tools/symbolgenerator/CreateSymbols.java	Wed Feb 13 13:22:15 2019 -0500
@@ -1786,9 +1786,13 @@
             if (existing.equals(headerDesc)) {
                 headerDesc = existing;
                 existed = true;
-            } else {
-                //check if the only difference between the 7 and 8 version is the Profile annotation
-                //if so, copy it to the pre-8 version, so save space
+            }
+        }
+
+        if (!existed) {
+            //check if the only difference between the 7 and 8 version is the Profile annotation
+            //if so, copy it to the pre-8 version, so save space
+            for (ClassHeaderDescription existing : clazzDesc.header) {
                 List<AnnotationDescription> annots = existing.classAnnotations;
 
                 if (annots != null) {
@@ -2610,6 +2614,40 @@
                                                req.requires_flags,
                                                ver);
             }
+
+            @Override
+            public int hashCode() {
+                int hash = 7;
+                hash = 53 * hash + Objects.hashCode(this.moduleName);
+                hash = 53 * hash + this.flags;
+                hash = 53 * hash + Objects.hashCode(this.version);
+                return hash;
+            }
+
+            @Override
+            public boolean equals(Object obj) {
+                if (this == obj) {
+                    return true;
+                }
+                if (obj == null) {
+                    return false;
+                }
+                if (getClass() != obj.getClass()) {
+                    return false;
+                }
+                final RequiresDescription other = (RequiresDescription) obj;
+                if (this.flags != other.flags) {
+                    return false;
+                }
+                if (!Objects.equals(this.moduleName, other.moduleName)) {
+                    return false;
+                }
+                if (!Objects.equals(this.version, other.version)) {
+                    return false;
+                }
+                return true;
+            }
+
         }
 
         static class ProvidesDescription {
@@ -2645,6 +2683,35 @@
                               .collect(Collectors.toList());
                 return new ProvidesDescription(api, impls);
             }
+
+            @Override
+            public int hashCode() {
+                int hash = 5;
+                hash = 53 * hash + Objects.hashCode(this.interfaceName);
+                hash = 53 * hash + Objects.hashCode(this.implNames);
+                return hash;
+            }
+
+            @Override
+            public boolean equals(Object obj) {
+                if (this == obj) {
+                    return true;
+                }
+                if (obj == null) {
+                    return false;
+                }
+                if (getClass() != obj.getClass()) {
+                    return false;
+                }
+                final ProvidesDescription other = (ProvidesDescription) obj;
+                if (!Objects.equals(this.interfaceName, other.interfaceName)) {
+                    return false;
+                }
+                if (!Objects.equals(this.implNames, other.implNames)) {
+                    return false;
+                }
+                return true;
+            }
         }
     }
 
@@ -2806,7 +2873,7 @@
             if (!Objects.equals(this.nestHost, other.nestHost)) {
                 return false;
             }
-            if (!Objects.equals(this.nestMembers, other.nestMembers)) {
+            if (!listEquals(this.nestMembers, other.nestMembers)) {
                 return false;
             }
             return true;
--- a/make/launcher/Launcher-java.base.gmk	Tue Feb 12 11:58:41 2019 -0500
+++ b/make/launcher/Launcher-java.base.gmk	Wed Feb 13 13:22:15 2019 -0500
@@ -51,7 +51,7 @@
 
 TARGETS += $(SUPPORT_OUTPUTDIR)/modules_cmds/java.base/java$(EXE_SUFFIX)
 
-ifeq ($(OPENJDK_TARGET_OS), windows)
+ifeq ($(call isTargetOs, windows), true)
   $(eval $(call SetupBuildLauncher, javaw, \
       CFLAGS := -DJAVAW -DEXPAND_CLASSPATH_WILDCARDS -DENABLE_ARG_FILES, \
       EXTRA_RC_FLAGS := $(JAVA_RC_FLAGS), \
@@ -65,7 +65,7 @@
 
 ################################################################################
 
-ifeq ($(OPENJDK_TARGET_OS), linux)
+ifeq ($(call isTargetOs, linux), true)
   $(eval $(call SetupJdkExecutable, BUILD_JEXEC, \
       NAME := jexec, \
       SRC := $(TOPDIR)/src/$(MODULE)/unix/native/launcher, \
@@ -84,7 +84,7 @@
 
 ################################################################################
 
-ifneq ($(findstring $(OPENJDK_TARGET_OS), macosx solaris aix linux), )
+ifeq ($(call isTargetOs, macosx solaris aix linux), true)
   $(eval $(call SetupJdkExecutable, BUILD_JSPAWNHELPER, \
       NAME := jspawnhelper, \
       SRC := $(TOPDIR)/src/$(MODULE)/unix/native/jspawnhelper, \
--- a/make/launcher/Launcher-java.security.jgss.gmk	Tue Feb 12 11:58:41 2019 -0500
+++ b/make/launcher/Launcher-java.security.jgss.gmk	Wed Feb 13 13:22:15 2019 -0500
@@ -25,7 +25,7 @@
 
 include LauncherCommon.gmk
 
-ifeq ($(OPENJDK_TARGET_OS), windows)
+ifeq ($(call isTargetOs, windows), true)
   $(eval $(call SetupBuildLauncher, kinit, \
       MAIN_CLASS := sun.security.krb5.internal.tools.Kinit, \
   ))
--- a/make/launcher/Launcher-jdk.accessibility.gmk	Tue Feb 12 11:58:41 2019 -0500
+++ b/make/launcher/Launcher-jdk.accessibility.gmk	Wed Feb 13 13:22:15 2019 -0500
@@ -28,7 +28,7 @@
 ################################################################################
 # jabswitch
 
-ifeq ($(OPENJDK_TARGET_OS), windows)
+ifeq ($(call isTargetOs, windows), true)
 
   JABSWITCH_SRC := $(TOPDIR)/src/jdk.accessibility/windows/native/jabswitch
   ACCESSBRIDGE_SRC := $(TOPDIR)/src/jdk.accessibility/windows/native/common
@@ -98,7 +98,7 @@
 
   endef
 
-  ifeq ($(OPENJDK_TARGET_CPU_BITS), 32)
+  ifeq ($(call isTargetCpuBits, 32), true)
     $(eval $(call SetupInspector,-32,32))
     $(eval $(call SetupWalker,-32,32))
     $(eval $(call SetupInspector,,LEGACY))
--- a/make/launcher/Launcher-jdk.pack.gmk	Tue Feb 12 11:58:41 2019 -0500
+++ b/make/launcher/Launcher-jdk.pack.gmk	Wed Feb 13 13:22:15 2019 -0500
@@ -45,7 +45,7 @@
   CXXFLAGS_JDKEXE += -fvisibility=hidden
   LDFLAGS_JDKEXE += -Wl,--exclude-libs,ALL
 else ifeq ($(TOOLCHAIN_TYPE), clang)
-  ifneq ($(OPENJDK_TARGET_OS), macosx)
+  ifeq ($(call isTargetOs, macosx), false)
     CXXFLAGS_JDKEXE += -fvisibility=hidden
   endif
 else ifeq ($(TOOLCHAIN_TYPE), solstudio)
--- a/make/launcher/LauncherCommon.gmk	Tue Feb 12 11:58:41 2019 -0500
+++ b/make/launcher/LauncherCommon.gmk	Wed Feb 13 13:22:15 2019 -0500
@@ -105,7 +105,7 @@
       $$(addprefix -J, $$($1_JAVA_ARGS)) $$($1_LAUNCHER_CLASS), "$$a"$(COMMA) )) }'
   $1_CFLAGS += -DJAVA_ARGS=$$($1_JAVA_ARGS_STR)
 
-  ifeq ($(OPENJDK_TARGET_OS), macosx)
+  ifeq ($(call isTargetOs, macosx), true)
     ifeq ($$($1_MACOSX_SIGNED), true)
       $1_PLIST_FILE := Info-privileged.plist
         $1_CODESIGN := true
@@ -179,11 +179,11 @@
   $1 += $$(BUILD_LAUNCHER_$1)
   TARGETS += $$($1)
 
-  ifeq ($(OPENJDK_TARGET_OS), aix)
+  ifeq ($(call isTargetOs, aix), true)
     $$(BUILD_LAUNCHER_$1): $(call FindStaticLib, java.base, jli_static)
   endif
 
-  ifeq ($(OPENJDK_TARGET_OS), windows)
+  ifeq ($(call isTargetOs, windows), true)
     $$(BUILD_LAUNCHER_$1): $(call FindStaticLib, java.base, java, /libjava) \
         $$($1_WINDOWS_JLI_LIB)
   endif
@@ -194,7 +194,7 @@
 # relationship between executables and man pages (even if this is not always
 # the case), so piggyback man page generation on the launcher compilation.
 
-ifeq ($(OPENJDK_TARGET_OS_TYPE), unix)
+ifeq ($(call isTargetOsType, unix), true)
   # Only build manpages on unix systems.
   # We assume all our man pages should reside in section 1.
 
--- a/make/lib/Awt2dLibraries.gmk	Tue Feb 12 11:58:41 2019 -0500
+++ b/make/lib/Awt2dLibraries.gmk	Wed Feb 13 13:22:15 2019 -0500
@@ -43,7 +43,7 @@
 
 BUILD_LIBMLIB_CFLAGS := -D__USE_J2D_NAMES -D__MEDIALIB_OLD_NAMES -DMLIB_NO_LIBSUNMATH
 
-ifeq ($(OPENJDK_TARGET_CPU_BITS), 64)
+ifeq ($(call isTargetCpuBits, 64), true)
   BUILD_LIBMLIB_CFLAGS += -DMLIB_OS64BIT
 endif
 
@@ -68,7 +68,7 @@
 
 ################################################################################
 
-ifeq ($(OPENJDK_TARGET_OS)-$(OPENJDK_TARGET_CPU_ARCH), solaris-sparc)
+ifeq ($(call And, $(call isTargetOs, solaris) $(call isTargetCpuArch, sparc)), true)
 
   # libmlib_image_v is basically built from mlib_image sources, with some additions
   # and some exclusions.
@@ -80,7 +80,7 @@
   LIBMLIB_IMAGE_V_CFLAGS := -xarch=sparcvis -D__USE_J2D_NAMES -D__MEDIALIB_OLD_NAMES \
       $(TOPDIR)/src/$(MODULE)/unix/native/libmlib_image/vis_$(OPENJDK_TARGET_CPU_BITS).il
 
-  ifeq ($(OPENJDK_TARGET_CPU_BITS), 64)
+  ifeq ($(call isTargetCpuBits, 64), true)
     LIBMLIB_IMAGE_V_CFLAGS += -DMLIB_OS64BIT
   endif
 
@@ -127,11 +127,11 @@
     $(TOPDIR)/src/$(MODULE)/$(OPENJDK_TARGET_OS_TYPE)/native/common/awt \
     #
 
-ifeq ($(OPENJDK_TARGET_OS)-$(OPENJDK_TARGET_CPU_ARCH), solaris-sparc)
+ifeq ($(call And, $(call isTargetOs, solaris) $(call isTargetCpuArch, sparc)), true)
   LIBAWT_EXTRA_SRC += $(TOPDIR)/src/$(MODULE)/share/native/common/awt/medialib
 endif
 
-ifeq ($(OPENJDK_TARGET_OS), windows)
+ifeq ($(call isTargetOs, windows), true)
   LIBAWT_EXTRA_SRC += \
       $(TOPDIR)/src/$(MODULE)/share/native/common/awt/utility \
       $(TOPDIR)/src/$(MODULE)/share/native/common/font \
@@ -140,22 +140,22 @@
       #
 endif
 
-ifneq ($(filter $(OPENJDK_TARGET_OS), solaris linux macosx aix), )
+ifeq ($(call isTargetOs, solaris linux macosx aix), true)
   LIBAWT_EXFILES += awt_Font.c CUPSfuncs.c fontpath.c X11Color.c
 endif
 
-ifeq ($(OPENJDK_TARGET_OS), macosx)
+ifeq ($(call isTargetOs, macosx), true)
   LIBAWT_EXFILES += initIDs.c awt/image/cvutils/img_colors.c
 endif
 
-ifeq ($(OPENJDK_TARGET_OS), windows)
+ifeq ($(call isTargetOs, windows), true)
   LIBAWT_EXFILES += \
       java2d/d3d/D3DShaderGen.c \
       awt/image/cvutils/img_colors.c \
       #
 endif
 
-ifeq ($(OPENJDK_TARGET_OS)-$(OPENJDK_TARGET_CPU), solaris-sparcv9)
+ifeq ($(call And, $(call isTargetOs, solaris) $(call isTargetCpu, sparcv9)), true)
   LIBAWT_EXFILES += java2d/loops/MapAccelFunc.c
 else
   LIBAWT_EXCLUDES += \
@@ -182,20 +182,20 @@
 
 LIBAWT_CFLAGS += -D__MEDIALIB_OLD_NAMES -D__USE_J2D_NAMES $(X_CFLAGS)
 
-ifeq ($(OPENJDK_TARGET_OS)-$(OPENJDK_TARGET_CPU), solaris-sparcv9)
+ifeq ($(call And, $(call isTargetOs, solaris) $(call isTargetCpu, sparcv9)), true)
   LIBAWT_CFLAGS += -xarch=sparcvis -DMLIB_ADD_SUFF \
       $(TOPDIR)/src/$(MODULE)/unix/native/libmlib_image/vis_$(OPENJDK_TARGET_CPU_BITS).il
 
   LIBAWT_ASFLAGS = -P -xarch=v9a
 endif
 
-ifneq ($(OPENJDK_TARGET_OS), solaris)
+ifeq ($(call isTargetOs, solaris), false)
   LIBAWT_CFLAGS += -DMLIB_NO_LIBSUNMATH
 endif
 
-ifeq ($(OPENJDK_TARGET_OS), windows)
+ifeq ($(call isTargetOs, windows), true)
   LIBAWT_CFLAGS += -EHsc -DUNICODE -D_UNICODE
-  ifeq ($(OPENJDK_TARGET_CPU_BITS), 64)
+  ifeq ($(call isTargetCpuBits, 64), true)
     LIBAWT_CFLAGS += -DMLIB_OS64BIT
   endif
 
@@ -203,7 +203,7 @@
   LIBAWT_VERSIONINFO_RESOURCE := $(TOPDIR)/src/$(MODULE)/windows/native/libawt/windows/awt.rc
 endif
 
-ifeq ($(OPENJDK_TARGET_OS), linux)
+ifeq ($(call isTargetOs, linux), true)
   # FIXME: This is probably not what we want to do, but keep it now for compatibility.
   LIBAWT_CFLAGS += $(EXPORT_ALL_SYMBOLS)
 endif
@@ -263,7 +263,7 @@
 
 $(BUILD_LIBAWT): $(call FindLib, java.base, java)
 
-ifeq ($(OPENJDK_TARGET_OS), macosx)
+ifeq ($(call isTargetOs, macosx), true)
   $(BUILD_LIBAWT): $(BUILD_LIBMLIB_IMAGE)
 endif
 
@@ -271,7 +271,7 @@
 
 ################################################################################
 
-ifeq ($(findstring $(OPENJDK_TARGET_OS), windows macosx), )
+ifeq ($(call isTargetOs, windows macosx), false)
   ifeq ($(ENABLE_HEADLESS_ONLY), false)
 
     LIBAWT_XAWT_EXTRA_SRC := \
@@ -297,11 +297,11 @@
         $(FONTCONFIG_CFLAGS) \
         $(CUPS_CFLAGS)
 
-    ifeq ($(OPENJDK_TARGET_OS), solaris)
+    ifeq ($(call isTargetOs, solaris), true)
       LIBAWT_XAWT_CFLAGS += -DFUNCPROTO=15
     endif
 
-    ifeq ($(OPENJDK_TARGET_OS), linux)
+    ifeq ($(call isTargetOs, linux), true)
       ifeq ($(DISABLE_XRENDER), true)
         LIBAWT_XAWT_CFLAGS += -DDISABLE_XRENDER_BY_DEFAULT=true
       endif
@@ -309,7 +309,7 @@
 
     LIBAWT_XAWT_LIBS := $(LIBM) -lawt -lXext -lX11 -lXrender $(LIBDL) -lXtst -lXi -ljava -ljvm
 
-    ifeq ($(OPENJDK_TARGET_OS), linux)
+    ifeq ($(call isTargetOs, linux), true)
       LIBAWT_XAWT_LIBS += -lpthread
     endif
 
@@ -443,7 +443,7 @@
 ################################################################################
 
 # Mac and Windows only use the native AWT lib, do not build libawt_headless
-ifeq ($(findstring $(OPENJDK_TARGET_OS), windows macosx),)
+ifeq ($(call isTargetOs, windows macosx), false)
 
   LIBAWT_HEADLESS_EXTRA_SRC := \
       common/font \
@@ -504,7 +504,7 @@
 
   # For use by libfontmanager:
   LIBFREETYPE_CFLAGS := -I$(BUILD_LIBFREETYPE_HEADER_DIRS)
-  ifeq ($(OPENJDK_TARGET_OS), windows)
+  ifeq ($(call isTargetOs, windows), true)
     LIBFREETYPE_LIBS := $(SUPPORT_OUTPUTDIR)/native/$(MODULE)/libfreetype/freetype.lib
   else
     LIBFREETYPE_LIBS := -lfreetype
@@ -534,20 +534,20 @@
 
 HARFBUZZ_CFLAGS := -DHAVE_OT -DHAVE_FALLBACK -DHAVE_UCDN -DHAVE_ROUND
 
-ifneq ($(OPENJDK_TARGET_OS), windows)
+ifeq ($(call isTargetOs, windows), false)
   HARFBUZZ_CFLAGS += -DGETPAGESIZE -DHAVE_MPROTECT -DHAVE_PTHREAD \
                       -DHAVE_SYSCONF -DHAVE_SYS_MMAN_H -DHAVE_UNISTD_H
 endif
-ifneq (, $(findstring $(OPENJDK_TARGET_OS), linux macosx))
+ifeq ($(call isTargetOs, linux macosx), true)
   HARFBUZZ_CFLAGS += -DHAVE_INTEL_ATOMIC_PRIMITIVES
 endif
-ifeq ($(OPENJDK_TARGET_OS), solaris)
+ifeq ($(call isTargetOs, solaris), true)
   HARFBUZZ_CFLAGS += -DHAVE_SOLARIS_ATOMIC_OPS
 endif
-ifeq ($(OPENJDK_TARGET_OS), macosx)
+ifeq ($(call isTargetOs, macosx), true)
   HARFBUZZ_CFLAGS += -DHAVE_CORETEXT
 endif
-ifneq ($(OPENJDK_TARGET_OS), macosx)
+ifeq ($(call isTargetOs, macosx), false)
   LIBFONTMANAGER_EXCLUDE_FILES += harfbuzz/hb-coretext.cc
 endif
 # hb-ft.cc is not presently needed, and requires freetype 2.4.2 or later.
@@ -572,11 +572,11 @@
 
 LIBFONTMANAGER_OPTIMIZATION := HIGH
 
-ifeq ($(OPENJDK_TARGET_OS), windows)
+ifeq ($(call isTargetOs, windows), true)
   LIBFONTMANAGER_EXCLUDE_FILES += X11FontScaler.c \
       X11TextRenderer.c
   LIBFONTMANAGER_OPTIMIZATION := HIGHEST
-else ifeq ($(OPENJDK_TARGET_OS), macosx)
+else ifeq ($(call isTargetOs, macosx), true)
   LIBFONTMANAGER_EXCLUDE_FILES += X11FontScaler.c \
       X11TextRenderer.c \
       fontpath.c \
@@ -640,7 +640,7 @@
 
 $(BUILD_LIBFONTMANAGER): $(BUILD_LIBAWT)
 
-ifeq ($(OPENJDK_TARGET_OS), macosx)
+ifeq ($(call isTargetOs, macosx), true)
   $(BUILD_LIBFONTMANAGER): $(call FindLib, $(MODULE), awt_lwawt)
 endif
 
@@ -652,7 +652,7 @@
 
 ################################################################################
 
-ifeq ($(OPENJDK_TARGET_OS), windows)
+ifeq ($(call isTargetOs, windows), true)
 
   LIBJAWT_CFLAGS := -EHsc -DUNICODE -D_UNICODE
 
@@ -667,7 +667,7 @@
       java.base:libjava \
       #
 
-  ifeq ($(OPENJDK_TARGET_CPU), x86)
+  ifeq ($(call isTargetCpu, x86), true)
     KERNEL32_LIB := kernel32.lib
   endif
 
@@ -692,25 +692,25 @@
 
   TARGETS += $(COPY_JAWT_LIB)
 
-else # OPENJDK_TARGET_OS not windows
+else # not windows
 
-  ifeq ($(OPENJDK_TARGET_OS), macosx)
+  ifeq ($(call isTargetOs, macosx), true)
     # libjawt on macosx do not use the unix code
     LIBJAWT_EXCLUDE_SRC_PATTERNS := unix
   endif
 
-  ifeq ($(OPENJDK_TARGET_OS), macosx)
+  ifeq ($(call isTargetOs, macosx), true)
     JAWT_LIBS := -lawt_lwawt
   else
     JAWT_LIBS :=
-    ifneq ($(OPENJDK_TARGET_OS), solaris)
+    ifeq ($(call isTargetOs, solaris), false)
       JAWT_LIBS += -lawt
     endif
     ifeq ($(ENABLE_HEADLESS_ONLY), false)
       JAWT_LIBS += -lawt_xawt
     else
       JAWT_LIBS += -lawt_headless
-      ifeq ($(OPENJDK_TARGET_OS), linux)
+      ifeq ($(call isTargetOs, linux), true)
         JAWT_CFLAGS += -DHEADLESS
       endif
     endif
@@ -742,11 +742,11 @@
     $(BUILD_LIBJAWT): $(call FindLib, $(MODULE), awt_headless)
   endif
 
-  ifeq ($(OPENJDK_TARGET_OS), macosx)
+  ifeq ($(call isTargetOs, macosx), true)
    $(BUILD_LIBJAWT): $(call FindLib, $(MODULE), awt_lwawt)
   endif
 
-endif # OPENJDK_TARGET_OS
+endif
 
 TARGETS += $(BUILD_LIBJAWT)
 
@@ -784,20 +784,20 @@
     LIBSPLASHSCREEN_EXTRA_SRC += java.base:libzip/zlib
   endif
 
-  ifeq ($(OPENJDK_TARGET_OS), macosx)
+  ifeq ($(call isTargetOs, macosx), true)
     # libsplashscreen on macosx do not use the unix code
     LIBSPLASHSCREEN_EXCLUDE_SRC_PATTERNS := unix
   endif
 
   LIBSPLASHSCREEN_CFLAGS += -DSPLASHSCREEN -DPNG_NO_MMX_CODE -DPNG_ARM_NEON_OPT=0
 
-  ifeq ($(OPENJDK_TARGET_OS), linux)
-    ifeq ($(OPENJDK_TARGET_CPU_ARCH), ppc)
+  ifeq ($(call isTargetOs, linux), true)
+    ifeq ($(call isTargetCpuArch, ppc), true)
       LIBSPLASHSCREEN_CFLAGS += -DPNG_POWERPC_VSX_OPT=0
     endif
   endif
 
-  ifeq ($(OPENJDK_TARGET_OS), macosx)
+  ifeq ($(call isTargetOs, macosx), true)
     LIBSPLASHSCREEN_CFLAGS += -DWITH_MACOSX
 
     BUILD_LIBSPLASHSCREEN_java_awt_SplashScreen.c_CFLAGS := -x objective-c -O0
@@ -808,7 +808,7 @@
     BUILD_LIBSPLASHSCREEN_splashscreen_png.c_CFLAGS := -x objective-c -O0
     BUILD_LIBSPLASHSCREEN_splashscreen_sys.m_CFLAGS := -O0
 
-  else ifeq ($(OPENJDK_TARGET_OS), windows)
+  else ifeq ($(call isTargetOs, windows), true)
     LIBSPLASHSCREEN_CFLAGS += -DWITH_WIN32
   else
     LIBSPLASHSCREEN_CFLAGS += -DWITH_X11 $(X_CFLAGS)
@@ -816,14 +816,14 @@
 
   LIBSPLASHSCREEN_LIBS :=
 
-  ifeq ($(OPENJDK_TARGET_OS), macosx)
+  ifeq ($(call isTargetOs, macosx), true)
     LIBSPLASHSCREEN_LIBS += \
         $(LIBM) -lpthread -liconv -losxapp \
         -framework ApplicationServices \
         -framework Foundation \
         -framework Cocoa \
         -framework JavaNativeFoundation
-  else ifeq ($(OPENJDK_TARGET_OS), windows)
+  else ifeq ($(call isTargetOs, windows), true)
     LIBSPLASHSCREEN_LIBS += kernel32.lib user32.lib gdi32.lib delayimp.lib $(WIN_JAVA_LIB) jvm.lib
   else
     LIBSPLASHSCREEN_LIBS += $(X_LIBS) -lX11 -lXext $(LIBM) -lpthread -ldl
@@ -863,7 +863,7 @@
 
   TARGETS += $(BUILD_LIBSPLASHSCREEN)
 
-  ifeq ($(OPENJDK_TARGET_OS), macosx)
+  ifeq ($(call isTargetOs, macosx), true)
     $(BUILD_LIBSPLASHSCREEN): $(call FindLib, $(MODULE), osxapp)
   endif
 
@@ -871,7 +871,7 @@
 
 ################################################################################
 
-ifeq ($(OPENJDK_TARGET_OS), macosx)
+ifeq ($(call isTargetOs, macosx), true)
 
   LIBAWT_LWAWT_EXTRA_SRC := \
       $(TOPDIR)/src/$(MODULE)/unix/native/common/awt \
@@ -941,7 +941,7 @@
 
 ################################################################################
 
-ifeq ($(OPENJDK_TARGET_OS), macosx)
+ifeq ($(call isTargetOs, macosx), true)
 
   $(eval $(call SetupJdkLibrary, BUILD_LIBOSXUI, \
       NAME := osxui, \
--- a/make/lib/CoreLibraries.gmk	Tue Feb 12 11:58:41 2019 -0500
+++ b/make/lib/CoreLibraries.gmk	Wed Feb 13 13:22:15 2019 -0500
@@ -35,7 +35,7 @@
 
 BUILD_LIBFDLIBM_OPTIMIZATION := NONE
 
-ifeq ($(OPENJDK_TARGET_OS), solaris)
+ifeq ($(call isTargetOs, solaris), true)
   BUILD_LIBFDLIBM_OPTIMIZATION := HIGH
 endif
 
@@ -68,7 +68,7 @@
 ##########################################################################################
 
 LIBVERIFY_OPTIMIZATION := HIGH
-ifneq ($(findstring $(OPENJDK_TARGET_OS), solaris linux), )
+ifeq ($(call isTargetOs, solaris linux), true)
   ifeq ($(COMPILE_WITH_DEBUG_SYMBOLS), true)
     LIBVERIFY_OPTIMIZATION := LOW
   endif
@@ -92,7 +92,7 @@
 
 LIBJAVA_CFLAGS := -DARCHPROPNAME='"$(OPENJDK_TARGET_CPU_OSARCH)"'
 
-ifeq ($(OPENJDK_TARGET_OS), macosx)
+ifeq ($(call isTargetOs, macosx), true)
   BUILD_LIBJAVA_java_props_md.c_CFLAGS := -x objective-c
   BUILD_LIBJAVA_java_props_macosx.c_CFLAGS := -x objective-c
 endif
@@ -181,11 +181,11 @@
 
 ##########################################################################################
 
-ifeq ($(OPENJDK_TARGET_OS), macosx)
+ifeq ($(call isTargetOs, macosx), true)
   LIBJLI_EXCLUDE_FILES += java_md_solinux.c
 endif
 
-ifeq ($(OPENJDK_TARGET_OS), windows)
+ifeq ($(call isTargetOs, windows), true)
   # Supply the name of the C runtime lib.
   LIBJLI_CFLAGS += -DMSVCR_DLL_NAME='"$(notdir $(MSVCR_DLL))"'
   ifneq ($(MSVCP_DLL), )
@@ -233,7 +233,7 @@
 
 LIBJLI_SRC_DIRS := $(call FindSrcDirsForComponent, java.base, libjli)
 
-ifeq ($(OPENJDK_TARGET_OS), aix)
+ifeq ($(call isTargetOs, aix), true)
   # AIX also requires a static libjli because the compiler doesn't support '-rpath'
   $(eval $(call SetupNativeCompilation, BUILD_LIBJLI_STATIC, \
       NAME := jli_static, \
--- a/make/lib/Lib-java.base.gmk	Tue Feb 12 11:58:41 2019 -0500
+++ b/make/lib/Lib-java.base.gmk	Wed Feb 13 13:22:15 2019 -0500
@@ -99,7 +99,7 @@
 ################################################################################
 # Create the macosx security library
 
-ifeq ($(OPENJDK_TARGET_OS), macosx)
+ifeq ($(call isTargetOs, macosx), true)
   # JavaNativeFoundation framework not supported in static builds
   ifneq ($(STATIC_BUILD), true)
 
@@ -130,7 +130,7 @@
 ################################################################################
 # Create the jsig library
 
-ifeq ($(OPENJDK_TARGET_OS_TYPE), unix)
+ifeq ($(call isTargetOsType, unix), true)
   ifeq ($(STATIC_BUILD), false)
     $(eval $(call SetupJdkLibrary, BUILD_LIBJSIG, \
         NAME := jsig, \
@@ -205,7 +205,7 @@
 ################################################################################
 # Copy tzmappings file for Windows
 
-ifeq ($(OPENJDK_TARGET_OS), windows)
+ifeq ($(call isTargetOs, windows), true)
   $(eval $(call SetupCopyFiles, COPY_TZMAPPINGS, \
       FILES := $(SUPPORT_OUTPUTDIR)/gensrc/java.base/windows/conf/tzmappings, \
       DEST := $(call FindLibDirForModule, $(MODULE)), \
--- a/make/lib/Lib-java.desktop.gmk	Tue Feb 12 11:58:41 2019 -0500
+++ b/make/lib/Lib-java.desktop.gmk	Wed Feb 13 13:22:15 2019 -0500
@@ -39,7 +39,7 @@
 ################################################################################
 # Create the libjsound library
 
-ifneq ($(OPENJDK_TARGET_OS), aix)
+ifeq ($(call isTargetOs, aix), false)
 
   LIBJSOUND_CFLAGS := \
       $(ALSA_CFLAGS) \
@@ -48,14 +48,14 @@
       -DUSE_DAUDIO=TRUE \
       #
 
-  ifneq ($(OPENJDK_TARGET_OS), solaris)
+  ifeq ($(call isTargetOs, solaris), false)
     LIBJSOUND_CFLAGS += \
         -DUSE_PLATFORM_MIDI_OUT=TRUE \
         -DUSE_PLATFORM_MIDI_IN=TRUE \
         #
   endif
 
-  ifeq ($(OPENJDK_TARGET_OS), macosx)
+  ifeq ($(call isTargetOs, macosx), true)
     LIBJSOUND_TOOLCHAIN := TOOLCHAIN_LINK_CXX
   endif
 
@@ -87,7 +87,7 @@
 ################################################################################
 # Create the macosx specific osxapp and osx libraries
 
-ifeq ($(OPENJDK_TARGET_OS), macosx)
+ifeq ($(call isTargetOs, macosx), true)
 
   $(eval $(call SetupJdkLibrary, BUILD_LIBOSXAPP, \
       NAME := osxapp, \
@@ -142,4 +142,3 @@
   $(BUILD_LIBOSX): $(call FindLib, java.base, java)
 
 endif
-
--- a/make/lib/Lib-java.instrument.gmk	Tue Feb 12 11:58:41 2019 -0500
+++ b/make/lib/Lib-java.instrument.gmk	Wed Feb 13 13:22:15 2019 -0500
@@ -30,7 +30,7 @@
 
 ################################################################################
 
-ifeq ($(OPENJDK_TARGET_OS), windows)
+ifeq ($(call isTargetOs, windows), true)
   # equivalent of strcasecmp is stricmp on Windows
   LIBINSTRUMENT_CFLAGS := -Dstrcasecmp=stricmp
   WINDOWS_JLI_LIB := $(SUPPORT_OUTPUTDIR)/native/java.base/libjli/jli.lib
@@ -62,7 +62,7 @@
         $(WINDOWS_JLI_LIB), \
 ))
 
-ifeq ($(OPENJDK_TARGET_OS), aix)
+ifeq ($(call isTargetOs, aix), true)
   $(BUILD_LIBINSTRUMENT): $(call FindStaticLib, java.base, jli_static)
 else
   $(BUILD_LIBINSTRUMENT): $(call FindLib, java.base, jli)
--- a/make/lib/Lib-java.management.gmk	Tue Feb 12 11:58:41 2019 -0500
+++ b/make/lib/Lib-java.management.gmk	Wed Feb 13 13:22:15 2019 -0500
@@ -31,7 +31,7 @@
 ################################################################################
 
 LIBMANAGEMENT_OPTIMIZATION := HIGH
-ifneq ($(findstring $(OPENJDK_TARGET_OS), solaris linux), )
+ifeq ($(call isTargetOs, solaris linux), true)
   ifeq ($(COMPILE_WITH_DEBUG_SYMBOLS), true)
     LIBMANAGEMENT_OPTIMIZATION := LOW
   endif
@@ -57,4 +57,3 @@
 
 # Include custom extension post hook
 $(eval $(call IncludeCustomExtension, lib/Lib-java.management-post.gmk))
-
--- a/make/lib/Lib-java.prefs.gmk	Tue Feb 12 11:58:41 2019 -0500
+++ b/make/lib/Lib-java.prefs.gmk	Wed Feb 13 13:22:15 2019 -0500
@@ -28,7 +28,7 @@
 ################################################################################
 
 # libprefs on macosx do not use the unix code
-ifeq ($(OPENJDK_TARGET_OS), macosx)
+ifeq ($(call isTargetOs, macosx), true)
   LIBPREFS_EXCLUDE_SRC_PATTERNS := unix
 endif
 
--- a/make/lib/Lib-java.security.jgss.gmk	Tue Feb 12 11:58:41 2019 -0500
+++ b/make/lib/Lib-java.security.jgss.gmk	Wed Feb 13 13:22:15 2019 -0500
@@ -44,7 +44,7 @@
 
 ifneq ($(BUILD_CRYPTO), false)
 
-  ifeq ($(OPENJDK_TARGET_OS), windows)
+  ifeq ($(call isTargetOs, windows), true)
     $(eval $(call SetupJdkLibrary, BUILD_LIBW2K_LSA_AUTH, \
         NAME := w2k_lsa_auth, \
         OPTIMIZATION := LOW, \
@@ -59,7 +59,7 @@
     TARGETS += $(BUILD_LIBW2K_LSA_AUTH)
   endif
 
-  ifeq ($(OPENJDK_TARGET_OS), macosx)
+  ifeq ($(call isTargetOs, macosx), true)
     # libosxkrb5 needs to call deprecated krb5 APIs so that java
     # can use the native credentials cache.
     $(eval $(call SetupJdkLibrary, BUILD_LIBOSXKRB5, \
--- a/make/lib/Lib-jdk.accessibility.gmk	Tue Feb 12 11:58:41 2019 -0500
+++ b/make/lib/Lib-jdk.accessibility.gmk	Wed Feb 13 13:22:15 2019 -0500
@@ -27,7 +27,7 @@
 
 ################################################################################
 
-ifeq ($(OPENJDK_TARGET_OS), windows)
+ifeq ($(call isTargetOs, windows), true)
 
   ROOT_SRCDIR := $(TOPDIR)/src/jdk.accessibility/windows/native
 
@@ -100,7 +100,7 @@
 
   endef
 
-  ifeq ($(OPENJDK_TARGET_CPU_BITS), 32)
+  ifeq ($(call isTargetCpuBits, 32), true)
     $(eval $(call SetupAccessBridgeSysInfo))
     $(eval $(call SetupJavaDLL,-32,32))
     $(eval $(call SetupJavaDLL,,LEGACY))
--- a/make/lib/Lib-jdk.attach.gmk	Tue Feb 12 11:58:41 2019 -0500
+++ b/make/lib/Lib-jdk.attach.gmk	Wed Feb 13 13:22:15 2019 -0500
@@ -27,7 +27,7 @@
 
 ################################################################################
 
-ifeq ($(OPENJDK_TARGET_OS), windows)
+ifeq ($(call isTargetOs, windows), true)
   # In (at least) VS2013 and later, -DPSAPI_VERSION=1 is needed to generate
   # a binary that is compatible with windows versions older than 7/2008R2.
   # See MSDN documentation for GetProcessMemoryInfo for more information.
--- a/make/lib/Lib-jdk.crypto.mscapi.gmk	Tue Feb 12 11:58:41 2019 -0500
+++ b/make/lib/Lib-jdk.crypto.mscapi.gmk	Wed Feb 13 13:22:15 2019 -0500
@@ -27,7 +27,7 @@
 
 ################################################################################
 
-ifeq ($(OPENJDK_TARGET_OS), windows)
+ifeq ($(call isTargetOs, windows), true)
 
   $(eval $(call SetupJdkLibrary, BUILD_LIBSUNMSCAPI, \
       NAME := sunmscapi, \
--- a/make/lib/Lib-jdk.crypto.ucrypto.gmk	Tue Feb 12 11:58:41 2019 -0500
+++ b/make/lib/Lib-jdk.crypto.ucrypto.gmk	Wed Feb 13 13:22:15 2019 -0500
@@ -27,7 +27,7 @@
 
 ################################################################################
 
-ifeq ($(OPENJDK_TARGET_OS), solaris)
+ifeq ($(call isTargetOs, solaris), true)
 
   $(eval $(call SetupJdkLibrary, BUILD_LIBJ2UCRYPTO, \
       NAME := j2ucrypto, \
--- a/make/lib/Lib-jdk.hotspot.agent.gmk	Tue Feb 12 11:58:41 2019 -0500
+++ b/make/lib/Lib-jdk.hotspot.agent.gmk	Wed Feb 13 13:22:15 2019 -0500
@@ -29,19 +29,19 @@
 
 ################################################################################
 
-ifeq ($(OPENJDK_TARGET_OS), linux)
+ifeq ($(call isTargetOs, linux), true)
   SA_CFLAGS := -D_FILE_OFFSET_BITS=64
 
-else ifeq ($(OPENJDK_TARGET_OS), solaris)
+else ifeq ($(call isTargetOs, solaris), true)
   SA_LDFLAGS := -mt
 
-else ifeq ($(OPENJDK_TARGET_OS), macosx)
+else ifeq ($(call isTargetOs, macosx), true)
   SA_CFLAGS := -Damd64 -D_GNU_SOURCE -mno-omit-leaf-frame-pointer \
       -mstack-alignment=16 -fPIC
   LIBSA_EXTRA_SRC := $(SUPPORT_OUTPUTDIR)/gensrc/jdk.hotspot.agent
-else ifeq ($(OPENJDK_TARGET_OS), windows)
+else ifeq ($(call isTargetOs, windows), true)
   SA_CFLAGS := -D_WINDOWS -D_DEBUG -D_CONSOLE -D_MBCS -EHsc
-  ifeq ($(OPENJDK_TARGET_CPU), x86_64)
+  ifeq ($(call isTargetCpu, x86_64), true)
     SA_CXXFLAGS := -DWIN64
   else
     # Only add /RTC1 flag for debug builds as it's
--- a/make/lib/Lib-jdk.internal.le.gmk	Tue Feb 12 11:58:41 2019 -0500
+++ b/make/lib/Lib-jdk.internal.le.gmk	Wed Feb 13 13:22:15 2019 -0500
@@ -27,7 +27,7 @@
 
 ################################################################################
 
-ifeq ($(OPENJDK_TARGET_OS), windows)
+ifeq ($(call isTargetOs, windows), true)
 
   $(eval $(call SetupJdkLibrary, BUILD_LIBLE, \
       NAME := le, \
@@ -39,6 +39,6 @@
 
   TARGETS += $(BUILD_LIBLE)
 
-endif # OPENJDK_TARGET_OS
+endif
 
 ################################################################################
--- a/make/lib/Lib-jdk.jdi.gmk	Tue Feb 12 11:58:41 2019 -0500
+++ b/make/lib/Lib-jdk.jdi.gmk	Wed Feb 13 13:22:15 2019 -0500
@@ -27,7 +27,7 @@
 
 ################################################################################
 
-ifeq ($(OPENJDK_TARGET_OS), windows)
+ifeq ($(call isTargetOs, windows), true)
 
   $(eval $(call SetupJdkLibrary, BUILD_LIBDT_SHMEM, \
       NAME := dt_shmem, \
@@ -42,6 +42,6 @@
 
   TARGETS += $(BUILD_LIBDT_SHMEM)
 
-endif # OPENJDK_TARGET_OS
+endif
 
 ################################################################################
--- a/make/lib/Lib-jdk.management.gmk	Tue Feb 12 11:58:41 2019 -0500
+++ b/make/lib/Lib-jdk.management.gmk	Wed Feb 13 13:22:15 2019 -0500
@@ -30,7 +30,7 @@
 
 ################################################################################
 
-ifeq ($(OPENJDK_TARGET_OS), windows)
+ifeq ($(call isTargetOs, windows), true)
   # In (at least) VS2013 and later, -DPSAPI_VERSION=1 is needed to generate
   # a binary that is compatible with windows versions older than 7/2008R2.
   # See MSDN documentation for GetProcessMemoryInfo for more information.
@@ -38,7 +38,7 @@
 endif
 
 LIBMANAGEMENT_EXT_OPTIMIZATION := HIGH
-ifneq ($(findstring $(OPENJDK_TARGET_OS), solaris linux), )
+ifeq ($(call isTargetOs, solaris linux), true)
   ifeq ($(COMPILE_WITH_DEBUG_SYMBOLS), true)
     LIBMANAGEMENT_EXT_OPTIMIZATION := LOW
   endif
@@ -65,4 +65,3 @@
 
 # Include custom extension post hook
 $(eval $(call IncludeCustomExtension, lib/Lib-jdk.management-post.gmk))
-
--- a/make/lib/Lib-jdk.net.gmk	Tue Feb 12 11:58:41 2019 -0500
+++ b/make/lib/Lib-jdk.net.gmk	Wed Feb 13 13:22:15 2019 -0500
@@ -27,7 +27,7 @@
 
 ################################################################################
 
-ifneq ($(filter $(OPENJDK_TARGET_OS), solaris linux macosx), )
+ifeq ($(call isTargetOs, solaris linux macosx), true)
 
   $(eval $(call SetupJdkLibrary, BUILD_LIBEXTNET, \
       NAME := extnet, \
--- a/make/lib/Lib-jdk.sctp.gmk	Tue Feb 12 11:58:41 2019 -0500
+++ b/make/lib/Lib-jdk.sctp.gmk	Wed Feb 13 13:22:15 2019 -0500
@@ -27,9 +27,9 @@
 
 ################################################################################
 
-ifeq ($(OPENJDK_TARGET_OS_TYPE), unix)
+ifeq ($(call isTargetOsType, unix), true)
 
-  ifeq ($(filter $(OPENJDK_TARGET_OS), macosx aix), )
+  ifeq ($(call isTargetOs, macosx aix), false)
     $(eval $(call SetupJdkLibrary, BUILD_LIBSCTP, \
         NAME := sctp, \
         OPTIMIZATION := LOW, \
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/make/scripts/generate-symbol-data.sh	Wed Feb 13 13:22:15 2019 -0500
@@ -0,0 +1,77 @@
+#!/bin/sh
+#
+# Copyright (c) 2019, 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 script allows to easily generate (add or update) "--release N" data for JDK N + 1.
+# N must be 11 or greater. This script works on Linux. To create new data, or update existing
+# data, it is necessary to:
+# - download a binary build of OpenJDK N for Linux, API of which will be recorded. It is strongly recommended
+#   to use an official build, not a custom build, to avoid any chance of including unofficial changes.
+#   The binary build should never be a build newer than the GA for JDK N. Install the build. The installation
+#   directory will be denoted as "${JDK_N_INSTALL}" in the further text.
+# - have a checkout the JDK to which the data should be added (or in which the data should be updated).
+#   The checkout directory will be denoted as "${JDK_CHECKOUT}" in the further text.
+#   The checkout must not have any local changes that could interfere with the new data. In particular,
+#   there must be absolutely no changed, new or removed files under the ${JDK_CHECKOUT}/make/data/symbols
+#   directory.
+# - open a terminal program and run these commands:
+#     cd "${JDK_CHECKOUT}"/make/data/symbols
+#     bash ../../scripts/generate-symbol-data.sh "${JDK_N_INSTALL}"
+# - this command will generate or update data for "--release N" into the ${JDK_CHECKOUT}/make/data/symbols
+#   directory, updating all registration necessary. If the goal was to update the data, and there are no
+#   new or changed files in the ${JDK_CHECKOUT}/make/data/symbols directory after running this script,
+#   there were no relevant changes and no further action is necessary. Note that version for N > 9 are encoded
+#   using capital letters, i.e. A represents version 10, B represents 11, and so on. The version numbers are in
+#   the names of the files in the ${JDK_CHECKOUT}/make/data/symbols directory, as well as in
+#   the ${JDK_CHECKOUT}/make/data/symbols/symbols file.
+# - if there are any changed/new files in the ${JDK_CHECKOUT}/make/data/symbols directory after running this script,
+#   then all the changes in this directory, including any new files, need to be sent for review and eventually pushed.
+#   The commit message should specify which binary build was installed in the ${JDK_N_INSTALL} directory and also
+#   include the SCM state that was used to build it, which can be found in ${JDK_N_INSTALL}/release,
+#   in property "SOURCE".
+
+if [ "$1x" = "x" ] ; then
+    echo "Must provide the target JDK as a parameter:" >&2
+    echo "$0 <target-jdk>" >&2
+    exit 1
+fi;
+
+if [ ! -f symbols ] ; then
+    echo "Must run inside the make/data/symbols directory" >&2
+    exit 1
+fi;
+
+if [ "`hg status .`x" != "x" ] ; then
+    echo "The make/data/symbols directory contains local changes!" >&2
+    exit 1
+fi;
+
+$1/bin/java --add-exports jdk.jdeps/com.sun.tools.classfile=ALL-UNNAMED \
+            --add-exports jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED \
+            --add-exports jdk.compiler/com.sun.tools.javac.jvm=ALL-UNNAMED \
+            --add-exports jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED \
+            --add-modules jdk.jdeps \
+            ../../../make/langtools/src/classes/build/tools/symbolgenerator/CreateSymbols.java \
+            build-description-incremental symbols include.list
--- a/make/test/BuildFailureHandler.gmk	Tue Feb 12 11:58:41 2019 -0500
+++ b/make/test/BuildFailureHandler.gmk	Wed Feb 13 13:22:15 2019 -0500
@@ -61,7 +61,7 @@
 
 ################################################################################
 
-ifeq ($(OPENJDK_TARGET_OS), windows)
+ifeq ($(call isTargetOs, windows), true)
 
   $(eval $(call SetupNativeCompilation, BUILD_LIBTIMEOUT_HANDLER, \
         NAME := timeoutHandler, \
@@ -99,7 +99,7 @@
 #
 RUN_DIR := $(FH_SUPPORT)/test
 # Add the dir of the dll to the path on windows
-ifeq ($(OPENJDK_TARGET_OS), windows)
+ifeq ($(call isTargetOs, windows), true)
   export PATH := $(PATH);$(FH_SUPPORT)
 endif
 
--- a/make/test/JtregNativeHotspot.gmk	Tue Feb 12 11:58:41 2019 -0500
+++ b/make/test/JtregNativeHotspot.gmk	Wed Feb 13 13:22:15 2019 -0500
@@ -140,7 +140,7 @@
     -I$(VM_TESTBASE_DIR)/nsk/share/jni
 
 NO_FRAMEPOINTER_CFLAGS :=
-ifeq ($(OPENJDK_TARGET_OS),linux)
+ifeq ($(call isTargetOs, linux), true)
    NO_FRAMEPOINTER_CFLAGS := -fomit-frame-pointer
 endif
 
@@ -849,11 +849,11 @@
 ################################################################################
 
 # Platform specific setup
-ifneq ($(OPENJDK_TARGET_OS)-$(OPENJDK_TARGET_CPU_ARCH), solaris-sparc)
+ifeq ($(call And, $(call isTargetOs, solaris) $(call isTargetCpuArch, sparc)), false)
   BUILD_HOTSPOT_JTREG_EXCLUDE += liboverflow.c exeThreadSignalMask.c
 endif
 
-ifeq ($(OPENJDK_TARGET_OS), linux)
+ifeq ($(call isTargetOs, linux), true)
     BUILD_HOTSPOT_JTREG_LIBRARIES_LDFLAGS_libtest-rw := -z noexecstack
     BUILD_HOTSPOT_JTREG_LIBRARIES_LDFLAGS_libtest-rwx := -z execstack
     BUILD_HOTSPOT_JTREG_LIBRARIES_LIBS_libstepBreakPopReturn := -lpthread
@@ -870,11 +870,11 @@
 
 BUILD_HOTSPOT_JTREG_EXECUTABLES_LIBS_exesigtest := -ljvm
 
-ifeq ($(OPENJDK_TARGET_OS), solaris)
+ifeq ($(call isTargetOs, solaris), true)
     BUILD_HOTSPOT_JTREG_EXCLUDE += libterminatedThread.c
 endif
 
-ifeq ($(OPENJDK_TARGET_OS), windows)
+ifeq ($(call isTargetOs, windows), true)
     BUILD_HOTSPOT_JTREG_EXECUTABLES_CFLAGS_exeFPRegs := -MT
     BUILD_HOTSPOT_JTREG_EXCLUDE += exesigtest.c libterminatedThread.c
 
--- a/make/test/JtregNativeJdk.gmk	Tue Feb 12 11:58:41 2019 -0500
+++ b/make/test/JtregNativeJdk.gmk	Wed Feb 13 13:22:15 2019 -0500
@@ -54,7 +54,7 @@
     -I$(TOPDIR)/src/java.base/$(OPENJDK_TARGET_OS)/native/libjli
 
 # Platform specific setup
-ifeq ($(OPENJDK_TARGET_OS), windows)
+ifeq ($(call isTargetOs, windows), true)
   BUILD_JDK_JTREG_EXCLUDE += libDirectIO.c libInheritedChannel.c
 
   WIN_LIB_JAVA := $(SUPPORT_OUTPUTDIR)/native/java.base/libjava/java.lib
@@ -64,15 +64,15 @@
 else
   BUILD_JDK_JTREG_LIBRARIES_LIBS_libstringPlatformChars := -ljava
   BUILD_JDK_JTREG_LIBRARIES_LIBS_libDirectIO := -ljava
-  ifeq ($(OPENJDK_TARGET_OS), linux)
+  ifeq ($(call isTargetOs, linux), true)
     BUILD_JDK_JTREG_LIBRARIES_LIBS_libInheritedChannel := -ljava
-  else ifeq ($(OPENJDK_TARGET_OS), solaris)
+  else ifeq ($(call isTargetOs, solaris), true)
     BUILD_JDK_JTREG_LIBRARIES_LIBS_libInheritedChannel := -ljava -lsocket -lnsl
   endif
   BUILD_JDK_JTREG_EXECUTABLES_LIBS_exeJliLaunchTest := -ljli
 endif
 
-ifeq ($(OPENJDK_TARGET_OS), macosx)
+ifeq ($(call isTargetOs, macosx), true)
   BUILD_JDK_JTREG_LIBRARIES_CFLAGS_libTestMainKeyWindow := -ObjC
   BUILD_JDK_JTREG_LIBRARIES_LIBS_libTestMainKeyWindow := -framework JavaVM \
       -framework Cocoa -framework JavaNativeFoundation
--- a/src/hotspot/cpu/aarch64/gc/shenandoah/shenandoahBarrierSetAssembler_aarch64.cpp	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/hotspot/cpu/aarch64/gc/shenandoah/shenandoahBarrierSetAssembler_aarch64.cpp	Wed Feb 13 13:22:15 2019 -0500
@@ -425,54 +425,56 @@
 void ShenandoahBarrierSetAssembler::cmpxchg_oop(MacroAssembler* masm, Register addr, Register expected, Register new_val,
                                                 bool acquire, bool release, bool weak, bool is_cae,
                                                 Register result) {
-
-  Register tmp = rscratch2;
+  Register tmp1 = rscratch1;
+  Register tmp2 = rscratch2;
   bool is_narrow = UseCompressedOops;
   Assembler::operand_size size = is_narrow ? Assembler::word : Assembler::xword;
 
-  assert_different_registers(addr, expected, new_val, result, tmp);
+  assert_different_registers(addr, expected, new_val, tmp1, tmp2);
 
   Label retry, done, fail;
 
   // CAS, using LL/SC pair.
   __ bind(retry);
-  __ load_exclusive(result, addr, size, acquire);
+  __ load_exclusive(tmp1, addr, size, acquire);
   if (is_narrow) {
-    __ cmpw(result, expected);
+    __ cmpw(tmp1, expected);
   } else {
-    __ cmp(result, expected);
+    __ cmp(tmp1, expected);
   }
   __ br(Assembler::NE, fail);
-  __ store_exclusive(tmp, new_val, addr, size, release);
+  __ store_exclusive(tmp2, new_val, addr, size, release);
   if (weak) {
-    __ cmpw(tmp, 0u); // If the store fails, return NE to our caller
+    __ cmpw(tmp2, 0u); // If the store fails, return NE to our caller
   } else {
-    __ cbnzw(tmp, retry);
+    __ cbnzw(tmp2, retry);
   }
   __ b(done);
 
  __  bind(fail);
-  // Check if rb(expected)==rb(result)
+  // Check if rb(expected)==rb(tmp1)
   // Shuffle registers so that we have memory value ready for next expected.
-  __ mov(tmp, expected);
-  __ mov(expected, result);
+  __ mov(tmp2, expected);
+  __ mov(expected, tmp1);
   if (is_narrow) {
-    __ decode_heap_oop(result, result);
-    __ decode_heap_oop(tmp, tmp);
+    __ decode_heap_oop(tmp1, tmp1);
+    __ decode_heap_oop(tmp2, tmp2);
   }
-  read_barrier_impl(masm, result);
-  read_barrier_impl(masm, tmp);
-  __ cmp(result, tmp);
+  read_barrier_impl(masm, tmp1);
+  read_barrier_impl(masm, tmp2);
+  __ cmp(tmp1, tmp2);
   // Retry with expected now being the value we just loaded from addr.
   __ br(Assembler::EQ, retry);
   if (is_cae && is_narrow) {
     // For cmp-and-exchange and narrow oops, we need to restore
     // the compressed old-value. We moved it to 'expected' a few lines up.
-    __ mov(result, expected);
+    __ mov(tmp1, expected);
   }
   __ bind(done);
 
-  if (!is_cae) {
+  if (is_cae) {
+    __ mov(result, tmp1);
+  } else {
     __ cset(result, Assembler::EQ);
   }
 }
--- a/src/hotspot/cpu/arm/arm.ad	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/hotspot/cpu/arm/arm.ad	Wed Feb 13 13:22:15 2019 -0500
@@ -352,7 +352,7 @@
   // If this does safepoint polling, then do it here
   if (do_polling() && ra_->C->is_method_compilation()) {
     // mov_slow here is usually one or two instruction
-    __ mov_address(Rtemp, (address)os::get_polling_page(), symbolic_Relocation::polling_page_reference);
+    __ mov_address(Rtemp, (address)os::get_polling_page());
     __ relocate(relocInfo::poll_return_type);
     __ ldr(Rtemp, Address(Rtemp));
   }
--- a/src/hotspot/cpu/arm/c1_LIRAssembler_arm.cpp	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/hotspot/cpu/arm/c1_LIRAssembler_arm.cpp	Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2008, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2008, 2019, 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
@@ -309,7 +309,7 @@
   __ remove_frame(initial_frame_size_in_bytes());
 
   // mov_slow here is usually one or two instruction
-  __ mov_address(Rtemp, os::get_polling_page(), symbolic_Relocation::polling_page_reference);
+  __ mov_address(Rtemp, os::get_polling_page());
   __ relocate(relocInfo::poll_return_type);
   __ ldr(Rtemp, Address(Rtemp));
   __ ret();
@@ -317,7 +317,7 @@
 
 
 int LIR_Assembler::safepoint_poll(LIR_Opr tmp, CodeEmitInfo* info) {
-  __ mov_address(Rtemp, os::get_polling_page(), symbolic_Relocation::polling_page_reference);
+  __ mov_address(Rtemp, os::get_polling_page());
   if (info != NULL) {
     add_debug_info_for_branch(info);
   }
--- a/src/hotspot/cpu/arm/gc/g1/g1BarrierSetAssembler_arm.cpp	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/hotspot/cpu/arm/gc/g1/g1BarrierSetAssembler_arm.cpp	Wed Feb 13 13:22:15 2019 -0500
@@ -218,7 +218,7 @@
   const Register card_addr = tmp1;
   assert(sizeof(*ct->byte_map_base()) == sizeof(jbyte), "adjust this code");
 
-  __ mov_address(tmp2, (address)ct->byte_map_base(), symbolic_Relocation::card_table_reference);
+  __ mov_address(tmp2, (address)ct->byte_map_base());
   __ add(card_addr, tmp2, AsmOperand(store_addr, lsr, CardTable::card_shift));
 
   __ ldrb(tmp2, Address(card_addr));
--- a/src/hotspot/cpu/arm/gc/shared/barrierSetAssembler_arm.cpp	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/hotspot/cpu/arm/gc/shared/barrierSetAssembler_arm.cpp	Wed Feb 13 13:22:15 2019 -0500
@@ -167,7 +167,7 @@
 
   bool load_const = VM_Version::supports_movw();
   if (load_const) {
-    __ mov_address(top_addr, (address)Universe::heap()->top_addr(), symbolic_Relocation::eden_top_reference);
+    __ mov_address(top_addr, (address)Universe::heap()->top_addr());
   } else {
     __ ldr(top_addr, Address(Rthread, JavaThread::heap_top_addr_offset()));
   }
--- a/src/hotspot/cpu/arm/gc/shared/cardTableBarrierSetAssembler_arm.cpp	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/hotspot/cpu/arm/gc/shared/cardTableBarrierSetAssembler_arm.cpp	Wed Feb 13 13:22:15 2019 -0500
@@ -61,7 +61,7 @@
   __ sub(count, count, addr); // nb of cards
 
   // warning: Rthread has not been preserved
-  __ mov_address(tmp, (address) ct->byte_map_base(), symbolic_Relocation::card_table_reference);
+  __ mov_address(tmp, (address) ct->byte_map_base());
   __ add(addr,tmp, addr);
 
   Register zero = __ zero_register(tmp);
@@ -119,7 +119,7 @@
      Possible cause is a cache miss (card table base address resides in a
      rarely accessed area of thread descriptor).
   */
-  __ mov_address(card_table_base, (address)ct->byte_map_base(), symbolic_Relocation::card_table_reference);
+  __ mov_address(card_table_base, (address)ct->byte_map_base());
 }
 
 // The 2nd part of the store check.
--- a/src/hotspot/cpu/arm/macroAssembler_arm.hpp	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/hotspot/cpu/arm/macroAssembler_arm.hpp	Wed Feb 13 13:22:15 2019 -0500
@@ -26,7 +26,6 @@
 #define CPU_ARM_MACROASSEMBLER_ARM_HPP
 
 #include "code/relocInfo.hpp"
-#include "code/relocInfo_ext.hpp"
 
 class BiasedLockingCounters;
 
@@ -513,15 +512,13 @@
     }
   }
 
-  // Runtime address that may vary from one execution to another. The
-  // symbolic_reference describes what the address is, allowing
-  // the address to be resolved in a different execution context.
+  // Runtime address that may vary from one execution to another.
   // Warning: do not implement as a PC relative address.
-  void mov_address(Register rd, address addr, symbolic_Relocation::symbolic_reference t) {
+  void mov_address(Register rd, address addr) {
     mov_address(rd, addr, RelocationHolder::none);
   }
 
-  // rspec can be RelocationHolder::none (for ignored symbolic_Relocation).
+  // rspec can be RelocationHolder::none (for ignored symbolic Relocation).
   // In that case, the address is absolute and the generated code need
   // not be relocable.
   void mov_address(Register rd, address addr, RelocationHolder const& rspec) {
--- a/src/hotspot/cpu/arm/stubGenerator_arm.cpp	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/hotspot/cpu/arm/stubGenerator_arm.cpp	Wed Feb 13 13:22:15 2019 -0500
@@ -820,9 +820,9 @@
     // Note: oop_mask and oop_bits must be updated if the code is saved/reused
     const address oop_mask = (address) Universe::verify_oop_mask();
     const address oop_bits = (address) Universe::verify_oop_bits();
-    __ mov_address(tmp1, oop_mask, symbolic_Relocation::oop_mask_reference);
+    __ mov_address(tmp1, oop_mask);
     __ andr(tmp2, oop, tmp1);
-    __ mov_address(tmp1, oop_bits, symbolic_Relocation::oop_bits_reference);
+    __ mov_address(tmp1, oop_bits);
     __ cmp(tmp2, tmp1);
     __ b(error, ne);
 
--- a/src/hotspot/os/aix/porting_aix.cpp	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/hotspot/os/aix/porting_aix.cpp	Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2013 SAP SE. All rights reserved.
+ * Copyright (c) 2012, 2019 SAP SE. 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
@@ -34,7 +34,15 @@
 #include "utilities/align.hpp"
 #include "utilities/debug.hpp"
 
+// distinguish old xlc and xlclang++, where
+// <ibmdemangle.h> is suggested but not found in GA release (might come with a fix)
+#if defined(__clang__)
+#define DISABLE_DEMANGLE
+// #include <ibmdemangle.h>
+#else
 #include <demangle.h>
+#endif
+
 #include <sys/debug.h>
 #include <pthread.h>
 #include <ucontext.h>
@@ -237,6 +245,7 @@
       p_name[i] = '\0';
 
       // If it is a C++ name, try and demangle it using the Demangle interface (see demangle.h).
+#ifndef DISABLE_DEMANGLE
       if (demangle) {
         char* rest;
         Name* const name = Demangle(p_name, rest);
@@ -249,6 +258,7 @@
           delete name;
         }
       }
+#endif
     } else {
       strncpy(p_name, "<nameless function>", namelen-1);
       p_name[namelen-1] = '\0';
--- a/src/hotspot/os/windows/os_windows.cpp	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/hotspot/os/windows/os_windows.cpp	Wed Feb 13 13:22:15 2019 -0500
@@ -125,6 +125,11 @@
   #define __CPU__ i486
 #endif
 
+#if INCLUDE_AOT
+PVOID  topLevelVectoredExceptionHandler = NULL;
+LONG WINAPI topLevelVectoredExceptionFilter(struct _EXCEPTION_POINTERS* exceptionInfo);
+#endif
+
 // save DLL module handle, used by GetModuleFileName
 
 HINSTANCE vm_lib_handle;
@@ -143,6 +148,12 @@
     if (ForceTimeHighResolution) {
       timeEndPeriod(1L);
     }
+#if INCLUDE_AOT
+    if (topLevelVectoredExceptionHandler != NULL) {
+      RemoveVectoredExceptionHandler(topLevelVectoredExceptionHandler);
+      topLevelVectoredExceptionHandler = NULL;
+    }
+#endif
     break;
   default:
     break;
@@ -2325,6 +2336,25 @@
   return true;
 }
 
+#if INCLUDE_AOT
+LONG WINAPI topLevelVectoredExceptionFilter(struct _EXCEPTION_POINTERS* exceptionInfo) {
+  PEXCEPTION_RECORD exceptionRecord = exceptionInfo->ExceptionRecord;
+  address addr = (address) exceptionRecord->ExceptionInformation[1];
+  address pc = (address) exceptionInfo->ContextRecord->Rip;
+
+  // Handle the case where we get an implicit exception in AOT generated
+  // code.  AOT DLL's loaded are not registered for structured exceptions.
+  // If the exception occurred in the codeCache or AOT code, pass control
+  // to our normal exception handler.
+  CodeBlob* cb = CodeCache::find_blob(pc);
+  if (cb != NULL) {
+    return topLevelExceptionFilter(exceptionInfo);
+  }
+
+  return EXCEPTION_CONTINUE_SEARCH;
+}
+#endif
+
 //-----------------------------------------------------------------------------
 LONG WINAPI topLevelExceptionFilter(struct _EXCEPTION_POINTERS* exceptionInfo) {
   if (InterceptOSException) return EXCEPTION_CONTINUE_SEARCH;
@@ -4080,6 +4110,16 @@
 
   // Setup Windows Exceptions
 
+#if INCLUDE_AOT
+  // If AOT is enabled we need to install a vectored exception handler
+  // in order to forward implicit exceptions from code in AOT
+  // generated DLLs.  This is necessary since these DLLs are not
+  // registered for structured exceptions like codecache methods are.
+  if (UseAOT) {
+    topLevelVectoredExceptionHandler = AddVectoredExceptionHandler( 1, topLevelVectoredExceptionFilter);
+  }
+#endif
+
   // for debugging float code generation bugs
   if (ForceFloatExceptions) {
 #ifndef  _WIN64
--- a/src/hotspot/os_cpu/aix_ppc/prefetch_aix_ppc.inline.hpp	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/hotspot/os_cpu/aix_ppc/prefetch_aix_ppc.inline.hpp	Wed Feb 13 13:22:15 2019 -0500
@@ -43,7 +43,7 @@
 }
 
 inline void Prefetch::write(void *loc, intx interval) {
-#if !defined(USE_XLC_PREFETCH_WRITE_BUILTIN)
+#if !defined(USE_XLC_BUILTINS)
   __asm__ __volatile__ (
     "   dcbtst 0, %0       \n"
     :
--- a/src/hotspot/share/aot/aotCodeHeap.cpp	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/hotspot/share/aot/aotCodeHeap.cpp	Wed Feb 13 13:22:15 2019 -0500
@@ -707,7 +707,9 @@
     for (int i = 0; i < methods_cnt; ++i) {
       int code_id = indexes[i];
       AOTCompiledMethod* aot = _code_to_aot[code_id]._aot;
-      aot->mark_for_deoptimization(false);
+      if (aot != NULL) {
+        aot->mark_for_deoptimization(false);
+      }
     }
   }
 }
--- a/src/hotspot/share/classfile/classFileParser.cpp	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/hotspot/share/classfile/classFileParser.cpp	Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2019, 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
@@ -4991,30 +4991,30 @@
 bool ClassFileParser::verify_unqualified_name(const char* name,
                                               unsigned int length,
                                               int type) {
-  for (const char* p = name; p != name + length;) {
-    jchar ch = *p;
-    if (ch < 128) {
-      if (ch == '.' || ch == ';' || ch == '[' ) {
-        return false;   // do not permit '.', ';', or '['
-      }
-      if (ch == '/') {
+  for (const char* p = name; p != name + length; p++) {
+    switch(*p) {
+      case '.':
+      case ';':
+      case '[':
+        // do not permit '.', ';', or '['
+        return false;
+      case '/':
         // check for '//' or leading or trailing '/' which are not legal
         // unqualified name must not be empty
         if (type == ClassFileParser::LegalClass) {
           if (p == name || p+1 >= name+length || *(p+1) == '/') {
-           return false;
+            return false;
           }
         } else {
           return false;   // do not permit '/' unless it's class name
         }
-      }
-      if (type == ClassFileParser::LegalMethod && (ch == '<' || ch == '>')) {
-        return false;   // do not permit '<' or '>' in method names
-      }
-      p++;
-    } else {
-      char* tmp_p = UTF8::next(p, &ch);
-      p = tmp_p;
+        break;
+      case '<':
+      case '>':
+        // do not permit '<' or '>' in method names
+        if (type == ClassFileParser::LegalMethod) {
+          return false;
+        }
     }
   }
   return true;
@@ -5026,7 +5026,7 @@
 // Return NULL if no fieldname at all was found, or in the case of slash_ok
 // being true, we saw consecutive slashes (meaning we were looking for a
 // qualified path but found something that was badly-formed).
-static const char* skip_over_field_name(const char* name,
+static const char* skip_over_field_name(const char* const name,
                                         bool slash_ok,
                                         unsigned int length) {
   const char* p;
@@ -5062,29 +5062,12 @@
       // Check if ch is Java identifier start or is Java identifier part
       // 4672820: call java.lang.Character methods directly without generating separate tables.
       EXCEPTION_MARK;
-
       // return value
       JavaValue result(T_BOOLEAN);
-      // Set up the arguments to isJavaIdentifierStart and isJavaIdentifierPart
+      // Set up the arguments to isJavaIdentifierStart or isJavaIdentifierPart
       JavaCallArguments args;
       args.push_int(unicode_ch);
 
-      // public static boolean isJavaIdentifierStart(char ch);
-      JavaCalls::call_static(&result,
-        SystemDictionary::Character_klass(),
-        vmSymbols::isJavaIdentifierStart_name(),
-        vmSymbols::int_bool_signature(),
-        &args,
-        THREAD);
-
-      if (HAS_PENDING_EXCEPTION) {
-        CLEAR_PENDING_EXCEPTION;
-        return 0;
-      }
-      if (result.get_jboolean()) {
-        continue;
-      }
-
       if (not_first_ch) {
         // public static boolean isJavaIdentifierPart(char ch);
         JavaCalls::call_static(&result,
@@ -5093,15 +5076,21 @@
           vmSymbols::int_bool_signature(),
           &args,
           THREAD);
-
-        if (HAS_PENDING_EXCEPTION) {
-          CLEAR_PENDING_EXCEPTION;
-          return 0;
-        }
-
-        if (result.get_jboolean()) {
-          continue;
-        }
+      } else {
+        // public static boolean isJavaIdentifierStart(char ch);
+        JavaCalls::call_static(&result,
+          SystemDictionary::Character_klass(),
+          vmSymbols::isJavaIdentifierStart_name(),
+          vmSymbols::int_bool_signature(),
+          &args,
+          THREAD);
+      }
+      if (HAS_PENDING_EXCEPTION) {
+        CLEAR_PENDING_EXCEPTION;
+        return NULL;
+      }
+      if(result.get_jboolean()) {
+        continue;
       }
     }
     return (not_first_ch) ? old_p : NULL;
@@ -5142,18 +5131,12 @@
       }
       else {
         // Skip leading 'L' and ignore first appearance of ';'
-        length--;
         signature++;
         char* c = strchr((char*) signature, ';');
         // Format check signature
         if (c != NULL) {
-          ResourceMark rm(THREAD);
           int newlen = c - (char*) signature;
-          char* sig = NEW_RESOURCE_ARRAY(char, newlen + 1);
-          strncpy(sig, signature, newlen);
-          sig[newlen] = '\0';
-
-          bool legal = verify_unqualified_name(sig, newlen, LegalClass);
+          bool legal = verify_unqualified_name(signature, newlen, LegalClass);
           if (!legal) {
             classfile_parse_error("Class name contains illegal character "
                                   "in descriptor in class file %s",
@@ -5187,8 +5170,8 @@
 void ClassFileParser::verify_legal_class_name(const Symbol* name, TRAPS) const {
   if (!_need_verify || _relax_verify) { return; }
 
-  char buf[fixed_buffer_size];
-  char* bytes = name->as_utf8_flexible_buffer(THREAD, buf, fixed_buffer_size);
+  assert(name->refcount() > 0, "symbol must be kept alive");
+  char* bytes = (char*)name->bytes();
   unsigned int length = name->utf8_length();
   bool legal = false;
 
@@ -5227,8 +5210,7 @@
 void ClassFileParser::verify_legal_field_name(const Symbol* name, TRAPS) const {
   if (!_need_verify || _relax_verify) { return; }
 
-  char buf[fixed_buffer_size];
-  char* bytes = name->as_utf8_flexible_buffer(THREAD, buf, fixed_buffer_size);
+  char* bytes = (char*)name->bytes();
   unsigned int length = name->utf8_length();
   bool legal = false;
 
@@ -5262,8 +5244,7 @@
   if (!_need_verify || _relax_verify) { return; }
 
   assert(name != NULL, "method name is null");
-  char buf[fixed_buffer_size];
-  char* bytes = name->as_utf8_flexible_buffer(THREAD, buf, fixed_buffer_size);
+  char* bytes = (char*)name->bytes();
   unsigned int length = name->utf8_length();
   bool legal = false;
 
@@ -5302,8 +5283,7 @@
                                                    TRAPS) const {
   if (!_need_verify) { return; }
 
-  char buf[fixed_buffer_size];
-  const char* const bytes = signature->as_utf8_flexible_buffer(THREAD, buf, fixed_buffer_size);
+  const char* const bytes = (const char* const)signature->bytes();
   const unsigned int length = signature->utf8_length();
   const char* const p = skip_over_field_signature(bytes, false, length, CHECK);
 
@@ -5332,8 +5312,7 @@
   }
 
   unsigned int args_size = 0;
-  char buf[fixed_buffer_size];
-  const char* p = signature->as_utf8_flexible_buffer(THREAD, buf, fixed_buffer_size);
+  const char* p = (const char*)signature->bytes();
   unsigned int length = signature->utf8_length();
   const char* nextp;
 
@@ -5739,6 +5718,19 @@
   debug_only(ik->verify();)
 }
 
+void ClassFileParser::update_class_name(Symbol* new_class_name) {
+  // Decrement the refcount in the old name, since we're clobbering it.
+  if (_class_name != NULL) {
+    _class_name->decrement_refcount();
+  }
+  _class_name = new_class_name;
+  // Increment the refcount of the new name.
+  // Now the ClassFileParser owns this name and will decrement in
+  // the destructor.
+  _class_name->increment_refcount();
+}
+
+
 // For an unsafe anonymous class that is in the unnamed package, move it to its host class's
 // package by prepending its host class's package name to its class name and setting
 // its _class_name field.
@@ -5762,9 +5754,10 @@
     strncpy(new_anon_name + host_pkg_len + 1, (char *)_class_name->base(), class_name_len);
 
     // Create a symbol and update the anonymous class name.
-    _class_name = SymbolTable::new_symbol(new_anon_name,
+    Symbol* new_name = SymbolTable::new_symbol(new_anon_name,
                                           (int)host_pkg_len + 1 + class_name_len,
                                           CHECK);
+    update_class_name(new_name);
   }
 }
 
@@ -5810,6 +5803,7 @@
                                  TRAPS) :
   _stream(stream),
   _requested_name(name),
+  _class_name(NULL),
   _loader_data(loader_data),
   _unsafe_anonymous_host(unsafe_anonymous_host),
   _cp_patches(cp_patches),
@@ -5867,7 +5861,7 @@
   _has_vanilla_constructor(false),
   _max_bootstrap_specifier_index(-1) {
 
-  _class_name = name != NULL ? name : vmSymbols::unknown_class_name();
+  update_class_name(name != NULL ? name : vmSymbols::unknown_class_name());
 
   assert(THREAD->is_Java_thread(), "invariant");
   assert(_loader_data != NULL, "invariant");
@@ -5937,6 +5931,8 @@
 
 // Destructor to clean up
 ClassFileParser::~ClassFileParser() {
+  _class_name->decrement_refcount();
+
   if (_cp != NULL) {
     MetadataFactory::free_metadata(_loader_data, _cp);
   }
@@ -6092,7 +6088,7 @@
 
   // Update _class_name which could be null previously
   // to reflect the name in the constant pool
-  _class_name = class_name_in_cp;
+  update_class_name(class_name_in_cp);
 
   // Don't need to check whether this class name is legal or not.
   // It has been checked when constant pool is parsed.
--- a/src/hotspot/share/classfile/classFileParser.hpp	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/hotspot/share/classfile/classFileParser.hpp	Wed Feb 13 13:22:15 2019 -0500
@@ -496,6 +496,8 @@
                      FieldLayoutInfo* info,
                      TRAPS);
 
+   void update_class_name(Symbol* new_name);
+
  public:
   ClassFileParser(ClassFileStream* stream,
                   Symbol* name,
--- a/src/hotspot/share/classfile/modules.cpp	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/hotspot/share/classfile/modules.cpp	Wed Feb 13 13:22:15 2019 -0500
@@ -334,8 +334,8 @@
           (package_name[JAVAPKG_LEN] == '/' || package_name[JAVAPKG_LEN] == '\0'))) {
       const char* class_loader_name = loader_data->loader_name_and_id();
       size_t pkg_len = strlen(package_name);
-      char* pkg_name = NEW_RESOURCE_ARRAY_IN_THREAD(THREAD, char, pkg_len);
-      strncpy(pkg_name, package_name, pkg_len);
+      char* pkg_name = NEW_RESOURCE_ARRAY_IN_THREAD(THREAD, char, pkg_len + 1);
+      strncpy(pkg_name, package_name, pkg_len + 1);
       StringUtils::replace_no_expand(pkg_name, "/", ".");
       const char* msg_text1 = "Class loader (instance of): ";
       const char* msg_text2 = " tried to define prohibited package name: ";
--- a/src/hotspot/share/code/relocInfo.cpp	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/hotspot/share/code/relocInfo.cpp	Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2019, 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
@@ -92,18 +92,6 @@
   assert(format()==old_format, "sanity check");
 }
 
-nmethod* RelocIterator::code_as_nmethod() const {
-  return _code->as_nmethod();
-}
-
-void relocInfo::set_format(int f) {
-  int old_offset = addr_offset();
-  assert((f & format_mask) == f, "wrong format");
-  _value = (_value & ~(format_mask << offset_width)) | (f << offset_width);
-  assert(addr_offset()==old_offset, "sanity check");
-}
-
-
 void relocInfo::change_reloc_info_for_address(RelocIterator *itr, address pc, relocType old_type, relocType new_type) {
   bool found = false;
   while (itr->next() && !found) {
@@ -117,11 +105,6 @@
 }
 
 
-void relocInfo::remove_reloc_info_for_address(RelocIterator *itr, address pc, relocType old_type) {
-  change_reloc_info_for_address(itr, pc, old_type, none);
-}
-
-
 // ----------------------------------------------------------------------------------------------------
 // Implementation of RelocIterator
 
@@ -179,14 +162,6 @@
   set_limits(begin, limit);
 }
 
-
-enum { indexCardSize = 128 };
-struct RelocIndexEntry {
-  jint addr_offset;          // offset from header_end of an addr()
-  jint reloc_offset;         // offset from header_end of a relocInfo (prefix)
-};
-
-
 bool RelocIterator::addr_in_const() const {
   const int n = CodeBuffer::SECT_CONSTS;
   return section_start(n) <= addr() && addr() < section_end(n);
@@ -215,12 +190,6 @@
 }
 
 
-void RelocIterator::set_limit(address limit) {
-  address code_end = (address)code() + code()->size();
-  assert(limit == NULL || limit <= code_end, "in bounds");
-  _limit = limit;
-}
-
 // All the strange bit-encodings are in here.
 // The idea is to encode relocation data which are small integers
 // very efficiently (a single extra halfword).  Larger chunks of
@@ -622,14 +591,6 @@
   }
 }
 
-
-void metadata_Relocation::verify_metadata_relocation() {
-  if (!metadata_is_immediate()) {
-    // get the metadata from the pool, and re-insert it into the instruction:
-    verify_value(value());
-  }
-}
-
 address virtual_call_Relocation::cached_value() {
   assert(_cached_value != NULL && _cached_value < addr(), "must precede ic_call");
   return _cached_value;
--- a/src/hotspot/share/code/relocInfo.hpp	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/hotspot/share/code/relocInfo.hpp	Wed Feb 13 13:22:15 2019 -0500
@@ -345,7 +345,6 @@
   static int offset_limit()     { return (1 << offset_width) * offset_unit; }
 
   void set_type(relocType type);
-  void set_format(int format);
 
   void remove() { set_type(none); }
 
@@ -422,7 +421,6 @@
   // (since code is dynamically patched, we also need to dynamically update the relocation info)
   // Both methods takes old_type, so it is able to performe sanity checks on the information removed.
   static void change_reloc_info_for_address(RelocIterator *itr, address pc, relocType old_type, relocType new_type);
-  static void remove_reloc_info_for_address(RelocIterator *itr, address pc, relocType old_type);
 
   // Machine dependent stuff
 #include CPU_HEADER(relocInfo)
@@ -531,7 +529,6 @@
   short           _databuf; // spare buffer for compressed data
   short*          _data;    // pointer to the relocation's data
   short           _datalen; // number of halfwords in _data
-  char            _format;  // position within the instruction
 
   // Base addresses needed to compute targets of section_word_type relocs.
   address _section_start[SECT_LIMIT];
@@ -588,23 +585,18 @@
       return false;
     }
 
-    if (relocInfo::have_format)  _format = current()->format();
     return true;
   }
 
   // accessors
   address      limit()        const { return _limit; }
-  void     set_limit(address x);
   relocType    type()         const { return current()->type(); }
   int          format()       const { return (relocInfo::have_format) ? current()->format() : 0; }
   address      addr()         const { return _addr; }
   CompiledMethod*     code()  const { return _code; }
-  nmethod*     code_as_nmethod() const;
   short*       data()         const { return _data; }
   int          datalen()      const { return _datalen; }
   bool     has_current()      const { return _datalen >= 0; }
-
-  void       set_addr(address addr) { _addr = addr; }
   bool   addr_in_const()      const;
 
   address section_start(int n) const {
@@ -793,7 +785,6 @@
   // accessors which only make sense for a bound Relocation
   address         addr()            const { return binding()->addr(); }
   CompiledMethod* code()            const { return binding()->code(); }
-  nmethod*        code_as_nmethod() const { return binding()->code_as_nmethod(); }
   bool            addr_in_const()   const { return binding()->addr_in_const(); }
  protected:
   short*   data()         const { return binding()->data(); }
@@ -1002,8 +993,6 @@
 
   void fix_metadata_relocation();        // reasserts metadata value
 
-  void verify_metadata_relocation();
-
   address value()  { return (address) *metadata_addr(); }
 
   bool metadata_is_immediate()  { return metadata_index() == 0; }
--- a/src/hotspot/share/code/relocInfo_ext.cpp	Tue Feb 12 11:58:41 2019 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,88 +0,0 @@
-/*
- * Copyright (c) 2015, 2018, 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.
- *
- */
-
-#include "precompiled.hpp"
-#include "code/codeCache.hpp"
-#include "code/relocInfo.hpp"
-#include "code/relocInfo_ext.hpp"
-#include "gc/shared/cardTable.hpp"
-#include "gc/shared/cardTableBarrierSet.hpp"
-#include "gc/shared/collectedHeap.hpp"
-#include "memory/universe.hpp"
-#include "runtime/os.hpp"
-#include "utilities/debug.hpp"
-#ifdef COMPILER1
-#include "c1/c1_globals.hpp"
-#endif
-
-address symbolic_Relocation::symbolic_value(symbolic_Relocation::symbolic_reference t) {
-  if (Universe::heap() == NULL) {
-    // the symbolic values are not needed so early
-    // (and most of them lead to errors if asked too early)
-    return NULL;
-  }
-  switch(t) {
-  case symbolic_Relocation::polling_page_reference: {
-    return os::get_polling_page();
-  }
-  case symbolic_Relocation::eden_top_reference: {
-    if (!Universe::heap()->supports_inline_contig_alloc()) {
-      return NULL;
-    }
-    return (address)Universe::heap()->top_addr();
-  }
-  case symbolic_Relocation::heap_end_reference: {
-    if (!Universe::heap()->supports_inline_contig_alloc()) {
-      return NULL;
-    }
-    return (address)Universe::heap()->end_addr();
-  }
-  case symbolic_Relocation::card_table_reference: {
-    BarrierSet* bs = BarrierSet::barrier_set();
-    CardTableBarrierSet* ctbs = barrier_set_cast<CardTableBarrierSet>(bs);
-    CardTable* ct = ctbs->card_table();
-    return (address)ct->byte_map_base();
-  }
-  case symbolic_Relocation::mark_bits_reference: {
-    return (address)Universe::verify_mark_bits();
-  }
-  case symbolic_Relocation::mark_mask_reference: {
-    return (address)Universe::verify_mark_mask();
-  }
-  case symbolic_Relocation::oop_bits_reference: {
-    return (address)Universe::verify_oop_bits();
-  }
-  case symbolic_Relocation::oop_mask_reference: {
-    return (address)Universe::verify_oop_mask();
-  }
-  case symbolic_Relocation::debug_string_reference: {
-    return (address)"<Lost debug string>";
-  }
-  default: {
-    // missing declaration
-    ShouldNotReachHere();
-    return NULL;
-  }
-  }
-}
--- a/src/hotspot/share/code/relocInfo_ext.hpp	Tue Feb 12 11:58:41 2019 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,61 +0,0 @@
-/*
- * Copyright (c) 2011, 2019, 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.
- *
- */
-
-#ifndef SHARE_CODE_RELOCINFO_EXT_HPP
-#define SHARE_CODE_RELOCINFO_EXT_HPP
-
-// symbolic_Relocation allows to anotate some addresses in the generated code.
-//
-// This class was initially defined using the last unused relocType. The
-// new version tries to limit the impact on open source code changes.
-//
-// Without compiled code support, symbolic_Relocation need not be a real
-// relocation. To avoid using the last unused relocType, the
-// symbolic_Relocation::spec(<any symbolic type>) has been replaced
-// by additional methods using directly the symbolic type.
-//
-// Note: the order of the arguments in some methods had to reversed
-// to avoid confusion between the relocType enum and the
-// symbolic_reference enum.
-class symbolic_Relocation : AllStatic {
-
- public:
-  enum symbolic_reference {
-    card_table_reference,
-    eden_top_reference,
-    heap_end_reference,
-    polling_page_reference,
-    mark_bits_reference,
-    mark_mask_reference,
-    oop_bits_reference,
-    oop_mask_reference,
-    debug_string_reference,
-    last_symbolic_reference
-  };
-
-  // get the new value for a given symbolic type
-  static address symbolic_value(symbolic_reference t);
-};
-
-#endif // SHARE_CODE_RELOCINFO_EXT_HPP
--- a/src/hotspot/share/gc/cms/concurrentMarkSweepGeneration.cpp	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/hotspot/share/gc/cms/concurrentMarkSweepGeneration.cpp	Wed Feb 13 13:22:15 2019 -0500
@@ -636,8 +636,8 @@
   }
 
   NOT_PRODUCT(_overflow_counter = CMSMarkStackOverflowInterval;)
-  _gc_counters = new CollectorCounters("CMS", 1);
-  _cgc_counters = new CollectorCounters("CMS stop-the-world phases", 2);
+  _gc_counters = new CollectorCounters("CMS full collection pauses", 1);
+  _cgc_counters = new CollectorCounters("CMS concurrent cycle pauses", 2);
   _completed_initialization = true;
   _inter_sweep_timer.start();  // start of time
 }
--- a/src/hotspot/share/gc/cms/parNewGeneration.cpp	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/hotspot/share/gc/cms/parNewGeneration.cpp	Wed Feb 13 13:22:15 2019 -0500
@@ -624,7 +624,7 @@
 }
 
 ParNewGeneration::ParNewGeneration(ReservedSpace rs, size_t initial_byte_size)
-  : DefNewGeneration(rs, initial_byte_size, "PCopy"),
+  : DefNewGeneration(rs, initial_byte_size, "CMS young collection pauses"),
   _plab_stats("Young", YoungPLABSize, PLABWeight),
   _overflow_list(NULL),
   _is_alive_closure(this)
--- a/src/hotspot/share/gc/g1/collectionSetChooser.cpp	Tue Feb 12 11:58:41 2019 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,302 +0,0 @@
-/*
- * Copyright (c) 2001, 2018, 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.
- *
- */
-
-#include "precompiled.hpp"
-#include "gc/g1/collectionSetChooser.hpp"
-#include "gc/g1/g1CollectedHeap.inline.hpp"
-#include "gc/g1/heapRegionRemSet.hpp"
-#include "gc/shared/space.inline.hpp"
-#include "runtime/atomic.hpp"
-
-// Even though we don't use the GC efficiency in our heuristics as
-// much as we used to, we still order according to GC efficiency. This
-// will cause regions with a lot of live objects and large RSets to
-// end up at the end of the array. Given that we might skip collecting
-// the last few old regions, if after a few mixed GCs the remaining
-// have reclaimable bytes under a certain threshold, the hope is that
-// the ones we'll skip are ones with both large RSets and a lot of
-// live objects, not the ones with just a lot of live objects if we
-// ordered according to the amount of reclaimable bytes per region.
-static int order_regions(HeapRegion* hr1, HeapRegion* hr2) {
-  if (hr1 == NULL) {
-    if (hr2 == NULL) {
-      return 0;
-    } else {
-      return 1;
-    }
-  } else if (hr2 == NULL) {
-    return -1;
-  }
-
-  double gc_eff1 = hr1->gc_efficiency();
-  double gc_eff2 = hr2->gc_efficiency();
-  if (gc_eff1 > gc_eff2) {
-    return -1;
-  } if (gc_eff1 < gc_eff2) {
-    return 1;
-  } else {
-    return 0;
-  }
-}
-
-static int order_regions(HeapRegion** hr1p, HeapRegion** hr2p) {
-  return order_regions(*hr1p, *hr2p);
-}
-
-CollectionSetChooser::CollectionSetChooser() :
-  // The line below is the worst bit of C++ hackery I've ever written
-  // (Detlefs, 11/23).  You should think of it as equivalent to
-  // "_regions(100, true)": initialize the growable array and inform it
-  // that it should allocate its elem array(s) on the C heap.
-  //
-  // The first argument, however, is actually a comma expression
-  // (set_allocation_type(this, C_HEAP), 100). The purpose of the
-  // set_allocation_type() call is to replace the default allocation
-  // type for embedded objects STACK_OR_EMBEDDED with C_HEAP. It will
-  // allow to pass the assert in GenericGrowableArray() which checks
-  // that a growable array object must be on C heap if elements are.
-  //
-  // Note: containing object is allocated on C heap since it is CHeapObj.
-  //
-  _regions((ResourceObj::set_allocation_type((address) &_regions,
-                                             ResourceObj::C_HEAP),
-                  100), true /* C_Heap */),
-    _front(0), _end(0), _first_par_unreserved_idx(0),
-    _region_live_threshold_bytes(0), _remaining_reclaimable_bytes(0) {
-  _region_live_threshold_bytes = mixed_gc_live_threshold_bytes();
-}
-
-#ifndef PRODUCT
-void CollectionSetChooser::verify() {
-  guarantee(_end <= regions_length(), "_end: %u regions length: %u", _end, regions_length());
-  guarantee(_front <= _end, "_front: %u _end: %u", _front, _end);
-  uint index = 0;
-  size_t sum_of_reclaimable_bytes = 0;
-  while (index < _front) {
-    guarantee(regions_at(index) == NULL,
-              "all entries before _front should be NULL");
-    index += 1;
-  }
-  HeapRegion *prev = NULL;
-  while (index < _end) {
-    HeapRegion *curr = regions_at(index++);
-    guarantee(curr != NULL, "Regions in _regions array cannot be NULL");
-    guarantee(!curr->is_young(), "should not be young!");
-    guarantee(!curr->is_pinned(),
-              "Pinned region should not be in collection set (index %u)", curr->hrm_index());
-    if (prev != NULL) {
-      guarantee(order_regions(prev, curr) != 1,
-                "GC eff prev: %1.4f GC eff curr: %1.4f",
-                prev->gc_efficiency(), curr->gc_efficiency());
-    }
-    sum_of_reclaimable_bytes += curr->reclaimable_bytes();
-    prev = curr;
-  }
-  guarantee(sum_of_reclaimable_bytes == _remaining_reclaimable_bytes,
-            "reclaimable bytes inconsistent, "
-            "remaining: " SIZE_FORMAT " sum: " SIZE_FORMAT,
-            _remaining_reclaimable_bytes, sum_of_reclaimable_bytes);
-}
-#endif // !PRODUCT
-
-void CollectionSetChooser::sort_regions() {
-  // First trim any unused portion of the top in the parallel case.
-  if (_first_par_unreserved_idx > 0) {
-    assert(_first_par_unreserved_idx <= regions_length(),
-           "Or we didn't reserved enough length");
-    regions_trunc_to(_first_par_unreserved_idx);
-  }
-  _regions.sort(order_regions);
-  assert(_end <= regions_length(), "Requirement");
-#ifdef ASSERT
-  for (uint i = 0; i < _end; i++) {
-    assert(regions_at(i) != NULL, "Should be true by sorting!");
-  }
-#endif // ASSERT
-  if (log_is_enabled(Trace, gc, liveness)) {
-    G1PrintRegionLivenessInfoClosure cl("Post-Sorting");
-    for (uint i = 0; i < _end; ++i) {
-      HeapRegion* r = regions_at(i);
-      cl.do_heap_region(r);
-    }
-  }
-  verify();
-}
-
-void CollectionSetChooser::add_region(HeapRegion* hr) {
-  assert(!hr->is_pinned(),
-         "Pinned region shouldn't be added to the collection set (index %u)", hr->hrm_index());
-  assert(hr->is_old(), "should be old but is %s", hr->get_type_str());
-  assert(hr->rem_set()->is_complete(),
-         "Trying to add region %u to the collection set with incomplete remembered set", hr->hrm_index());
-  _regions.append(hr);
-  _end++;
-  _remaining_reclaimable_bytes += hr->reclaimable_bytes();
-  hr->calc_gc_efficiency();
-}
-
-void CollectionSetChooser::push(HeapRegion* hr) {
-  assert(hr != NULL, "Can't put back a NULL region");
-  assert(_front >= 1, "Too many regions have been put back");
-  _front--;
-  regions_at_put(_front, hr);
-  _remaining_reclaimable_bytes += hr->reclaimable_bytes();
-}
-
-void CollectionSetChooser::prepare_for_par_region_addition(uint n_threads,
-                                                           uint n_regions,
-                                                           uint chunk_size) {
-  _first_par_unreserved_idx = 0;
-  uint max_waste = n_threads * chunk_size;
-  // it should be aligned with respect to chunk_size
-  uint aligned_n_regions = (n_regions + chunk_size - 1) / chunk_size * chunk_size;
-  assert(aligned_n_regions % chunk_size == 0, "should be aligned");
-  regions_at_put_grow(aligned_n_regions + max_waste - 1, NULL);
-}
-
-uint CollectionSetChooser::claim_array_chunk(uint chunk_size) {
-  uint res = (uint) Atomic::add((jint) chunk_size,
-                                (volatile jint*) &_first_par_unreserved_idx);
-  assert(regions_length() > res + chunk_size - 1,
-         "Should already have been expanded");
-  return res - chunk_size;
-}
-
-void CollectionSetChooser::set_region(uint index, HeapRegion* hr) {
-  assert(regions_at(index) == NULL, "precondition");
-  assert(hr->is_old(), "should be old but is %s", hr->get_type_str());
-  regions_at_put(index, hr);
-  hr->calc_gc_efficiency();
-}
-
-void CollectionSetChooser::update_totals(uint region_num,
-                                         size_t reclaimable_bytes) {
-  // Only take the lock if we actually need to update the totals.
-  if (region_num > 0) {
-    assert(reclaimable_bytes > 0, "invariant");
-    // We could have just used atomics instead of taking the
-    // lock. However, we currently don't have an atomic add for size_t.
-    MutexLockerEx x(ParGCRareEvent_lock, Mutex::_no_safepoint_check_flag);
-    _end += region_num;
-    _remaining_reclaimable_bytes += reclaimable_bytes;
-  } else {
-    assert(reclaimable_bytes == 0, "invariant");
-  }
-}
-
-void CollectionSetChooser::iterate(HeapRegionClosure* cl) {
-  for (uint i = _front; i < _end; i++) {
-    HeapRegion* r = regions_at(i);
-    if (cl->do_heap_region(r)) {
-      cl->set_incomplete();
-      break;
-    }
-  }
-}
-
-void CollectionSetChooser::clear() {
-  _regions.clear();
-  _front = 0;
-  _end = 0;
-  _remaining_reclaimable_bytes = 0;
-}
-
-class ParKnownGarbageHRClosure: public HeapRegionClosure {
-  G1CollectedHeap* _g1h;
-  CSetChooserParUpdater _cset_updater;
-
-public:
-  ParKnownGarbageHRClosure(CollectionSetChooser* hrSorted,
-                           uint chunk_size) :
-    _g1h(G1CollectedHeap::heap()),
-    _cset_updater(hrSorted, true /* parallel */, chunk_size) { }
-
-  bool do_heap_region(HeapRegion* r) {
-    // We will skip any region that's currently used as an old GC
-    // alloc region (we should not consider those for collection
-    // before we fill them up).
-    if (_cset_updater.should_add(r) && !_g1h->is_old_gc_alloc_region(r)) {
-      _cset_updater.add_region(r);
-    } else if (r->is_old()) {
-      // Keep remembered sets for humongous regions, otherwise clean out remembered
-      // sets for old regions.
-      r->rem_set()->clear(true /* only_cardset */);
-    } else {
-      assert(r->is_archive() || !r->is_old() || !r->rem_set()->is_tracked(),
-             "Missed to clear unused remembered set of region %u (%s) that is %s",
-             r->hrm_index(), r->get_type_str(), r->rem_set()->get_state_str());
-    }
-    return false;
-  }
-};
-
-class ParKnownGarbageTask: public AbstractGangTask {
-  CollectionSetChooser* _hrSorted;
-  uint _chunk_size;
-  G1CollectedHeap* _g1h;
-  HeapRegionClaimer _hrclaimer;
-
-public:
-  ParKnownGarbageTask(CollectionSetChooser* hrSorted, uint chunk_size, uint n_workers) :
-      AbstractGangTask("ParKnownGarbageTask"),
-      _hrSorted(hrSorted), _chunk_size(chunk_size),
-      _g1h(G1CollectedHeap::heap()), _hrclaimer(n_workers) {}
-
-  void work(uint worker_id) {
-    ParKnownGarbageHRClosure par_known_garbage_cl(_hrSorted, _chunk_size);
-    _g1h->heap_region_par_iterate_from_worker_offset(&par_known_garbage_cl, &_hrclaimer, worker_id);
-  }
-};
-
-uint CollectionSetChooser::calculate_parallel_work_chunk_size(uint n_workers, uint n_regions) const {
-  assert(n_workers > 0, "Active gc workers should be greater than 0");
-  const uint overpartition_factor = 4;
-  const uint min_chunk_size = MAX2(n_regions / n_workers, 1U);
-  return MAX2(n_regions / (n_workers * overpartition_factor), min_chunk_size);
-}
-
-bool CollectionSetChooser::region_occupancy_low_enough_for_evac(size_t live_bytes) {
-  return live_bytes < mixed_gc_live_threshold_bytes();
-}
-
-bool CollectionSetChooser::should_add(HeapRegion* hr) const {
-  return !hr->is_young() &&
-         !hr->is_pinned() &&
-         region_occupancy_low_enough_for_evac(hr->live_bytes()) &&
-         hr->rem_set()->is_complete();
-}
-
-void CollectionSetChooser::rebuild(WorkGang* workers, uint n_regions) {
-  clear();
-
-  uint n_workers = workers->active_workers();
-
-  uint chunk_size = calculate_parallel_work_chunk_size(n_workers, n_regions);
-  prepare_for_par_region_addition(n_workers, n_regions, chunk_size);
-
-  ParKnownGarbageTask par_known_garbage_task(this, chunk_size, n_workers);
-  workers->run_task(&par_known_garbage_task);
-
-  sort_regions();
-}
--- a/src/hotspot/share/gc/g1/collectionSetChooser.hpp	Tue Feb 12 11:58:41 2019 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,202 +0,0 @@
-/*
- * Copyright (c) 2001, 2019, 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.
- *
- */
-
-#ifndef SHARE_GC_G1_COLLECTIONSETCHOOSER_HPP
-#define SHARE_GC_G1_COLLECTIONSETCHOOSER_HPP
-
-#include "gc/g1/heapRegion.hpp"
-#include "utilities/growableArray.hpp"
-
-class CollectionSetChooser: public CHeapObj<mtGC> {
-
-  GrowableArray<HeapRegion*> _regions;
-
-  // Unfortunately, GrowableArray uses ints for length and indexes. To
-  // avoid excessive casting in the rest of the class the following
-  // wrapper methods are provided that use uints.
-
-  uint regions_length()          { return (uint) _regions.length(); }
-  HeapRegion* regions_at(uint i) { return _regions.at((int) i);     }
-  void regions_at_put(uint i, HeapRegion* hr) {
-    _regions.at_put((int) i, hr);
-  }
-  void regions_at_put_grow(uint i, HeapRegion* hr) {
-    _regions.at_put_grow((int) i, hr);
-  }
-  void regions_trunc_to(uint i)  { _regions.trunc_to((uint) i); }
-
-  // The index of the next candidate old region to be considered for
-  // addition to the CSet.
-  uint _front;
-
-  // The index of the last candidate old region
-  uint _end;
-
-  // Keeps track of the start of the next array chunk to be claimed by
-  // parallel GC workers.
-  uint _first_par_unreserved_idx;
-
-  // If a region has more live bytes than this threshold, it will not
-  // be added to the CSet chooser and will not be a candidate for
-  // collection.
-  size_t _region_live_threshold_bytes;
-
-  // The sum of reclaimable bytes over all the regions in the CSet chooser.
-  size_t _remaining_reclaimable_bytes;
-
-  // Calculate and return chunk size (in number of regions) for parallel
-  // addition of regions
-  uint calculate_parallel_work_chunk_size(uint n_workers, uint n_regions) const;
-public:
-
-  // Return the current candidate region to be considered for
-  // collection without removing it from the CSet chooser.
-  HeapRegion* peek() {
-    HeapRegion* res = NULL;
-    if (_front < _end) {
-      res = regions_at(_front);
-      assert(res != NULL, "Unexpected NULL hr in _regions at index %u", _front);
-    }
-    return res;
-  }
-
-  // Remove the given region from the CSet chooser and move to the
-  // next one.
-  HeapRegion* pop() {
-    HeapRegion* hr = regions_at(_front);
-    assert(hr != NULL, "pre-condition");
-    assert(_front < _end, "pre-condition");
-    regions_at_put(_front, NULL);
-    assert(hr->reclaimable_bytes() <= _remaining_reclaimable_bytes,
-           "remaining reclaimable bytes inconsistent "
-           "from region: " SIZE_FORMAT " remaining: " SIZE_FORMAT,
-           hr->reclaimable_bytes(), _remaining_reclaimable_bytes);
-    _remaining_reclaimable_bytes -= hr->reclaimable_bytes();
-    _front += 1;
-    return hr;
-  }
-
-  void push(HeapRegion* hr);
-
-  CollectionSetChooser();
-
-  static size_t mixed_gc_live_threshold_bytes() {
-    return HeapRegion::GrainBytes * (size_t) G1MixedGCLiveThresholdPercent / 100;
-  }
-
-  static bool region_occupancy_low_enough_for_evac(size_t live_bytes);
-
-  void sort_regions();
-
-  // Determine whether to add the given region to the CSet chooser or
-  // not. Currently, we skip pinned regions and regions whose live
-  // bytes are over the threshold. Humongous regions may be reclaimed during cleanup.
-  // Regions also need a complete remembered set to be a candidate.
-  bool should_add(HeapRegion* hr) const;
-
-  // Returns the number candidate old regions added
-  uint length() { return _end; }
-
-  // Serial version.
-  void add_region(HeapRegion *hr);
-
-  // Must be called before calls to claim_array_chunk().
-  // n_regions is the number of regions, chunk_size the chunk size.
-  void prepare_for_par_region_addition(uint n_threads, uint n_regions, uint chunk_size);
-  // Returns the first index in a contiguous chunk of chunk_size indexes
-  // that the calling thread has reserved.  These must be set by the
-  // calling thread using set_region() (to NULL if necessary).
-  uint claim_array_chunk(uint chunk_size);
-  // Set the marked array entry at index to hr.  Careful to claim the index
-  // first if in parallel.
-  void set_region(uint index, HeapRegion* hr);
-  // Atomically increment the number of added regions by region_num
-  // and the amount of reclaimable bytes by reclaimable_bytes.
-  void update_totals(uint region_num, size_t reclaimable_bytes);
-
-  // Iterate over all collection set candidate regions.
-  void iterate(HeapRegionClosure* cl);
-
-  void clear();
-
-  void rebuild(WorkGang* workers, uint n_regions);
-
-  // Return the number of candidate regions that remain to be collected.
-  uint remaining_regions() { return _end - _front; }
-
-  // Determine whether the CSet chooser has more candidate regions or not.
-  bool is_empty() { return remaining_regions() == 0; }
-
-  // Return the reclaimable bytes that remain to be collected on
-  // all the candidate regions in the CSet chooser.
-  size_t remaining_reclaimable_bytes() { return _remaining_reclaimable_bytes; }
-
-  // Returns true if the used portion of "_regions" is properly
-  // sorted, otherwise asserts false.
-  void verify() PRODUCT_RETURN;
-};
-
-class CSetChooserParUpdater : public StackObj {
-private:
-  CollectionSetChooser* _chooser;
-  bool _parallel;
-  uint _chunk_size;
-  uint _cur_chunk_idx;
-  uint _cur_chunk_end;
-  uint _regions_added;
-  size_t _reclaimable_bytes_added;
-
-public:
-  CSetChooserParUpdater(CollectionSetChooser* chooser,
-                        bool parallel, uint chunk_size) :
-    _chooser(chooser), _parallel(parallel), _chunk_size(chunk_size),
-    _cur_chunk_idx(0), _cur_chunk_end(0),
-    _regions_added(0), _reclaimable_bytes_added(0) { }
-
-  ~CSetChooserParUpdater() {
-    if (_parallel && _regions_added > 0) {
-      _chooser->update_totals(_regions_added, _reclaimable_bytes_added);
-    }
-  }
-
-  void add_region(HeapRegion* hr) {
-    if (_parallel) {
-      if (_cur_chunk_idx == _cur_chunk_end) {
-        _cur_chunk_idx = _chooser->claim_array_chunk(_chunk_size);
-        _cur_chunk_end = _cur_chunk_idx + _chunk_size;
-      }
-      assert(_cur_chunk_idx < _cur_chunk_end, "invariant");
-      _chooser->set_region(_cur_chunk_idx, hr);
-      _cur_chunk_idx += 1;
-    } else {
-      _chooser->add_region(hr);
-    }
-    _regions_added += 1;
-    _reclaimable_bytes_added += hr->reclaimable_bytes();
-  }
-
-  bool should_add(HeapRegion* hr) { return _chooser->should_add(hr); }
-};
-
-#endif // SHARE_GC_G1_COLLECTIONSETCHOOSER_HPP
--- a/src/hotspot/share/gc/g1/g1CollectionSet.cpp	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/hotspot/share/gc/g1/g1CollectionSet.cpp	Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2019, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -25,6 +25,7 @@
 #include "precompiled.hpp"
 #include "gc/g1/g1CollectedHeap.inline.hpp"
 #include "gc/g1/g1CollectionSet.hpp"
+#include "gc/g1/g1CollectionSetCandidates.hpp"
 #include "gc/g1/g1CollectorState.hpp"
 #include "gc/g1/g1ParScanThreadState.hpp"
 #include "gc/g1/g1Policy.hpp"
@@ -44,10 +45,6 @@
   return _policy->phase_times();
 }
 
-CollectionSetChooser* G1CollectionSet::cset_chooser() {
-  return _cset_chooser;
-}
-
 double G1CollectionSet::predict_region_elapsed_time_ms(HeapRegion* hr) {
   return _policy->predict_region_elapsed_time_ms(hr, collector_state()->in_young_only_phase());
 }
@@ -55,7 +52,7 @@
 G1CollectionSet::G1CollectionSet(G1CollectedHeap* g1h, G1Policy* policy) :
   _g1h(g1h),
   _policy(policy),
-  _cset_chooser(new CollectionSetChooser()),
+  _candidates(NULL),
   _eden_region_length(0),
   _survivor_region_length(0),
   _old_region_length(0),
@@ -80,7 +77,7 @@
     FREE_C_HEAP_ARRAY(uint, _collection_set_regions);
   }
   free_optional_regions();
-  delete _cset_chooser;
+  clear_candidates();
 }
 
 void G1CollectionSet::init_region_lengths(uint eden_cset_region_length,
@@ -120,6 +117,11 @@
   }
 }
 
+void G1CollectionSet::clear_candidates() {
+  delete _candidates;
+  _candidates = NULL;
+}
+
 void G1CollectionSet::set_recorded_rs_lengths(size_t rs_lengths) {
   _recorded_rs_lengths = rs_lengths;
 }
@@ -439,14 +441,14 @@
 }
 
 void G1CollectionSet::add_as_old(HeapRegion* hr) {
-  cset_chooser()->pop(); // already have region via peek()
+  candidates()->pop_front(); // already have region via peek()
   _g1h->old_set_remove(hr);
   add_old_region(hr);
 }
 
 void G1CollectionSet::add_as_optional(HeapRegion* hr) {
   assert(_optional_regions != NULL, "Must not be called before array is allocated");
-  cset_chooser()->pop(); // already have region via peek()
+  candidates()->pop_front(); // already have region via peek()
   _g1h->old_set_remove(hr);
   add_optional_region(hr);
 }
@@ -480,7 +482,7 @@
   uint expensive_region_num = 0;
 
   if (collector_state()->in_mixed_phase()) {
-    cset_chooser()->verify();
+    candidates()->verify();
     const uint min_old_cset_length = _policy->calc_min_old_cset_length();
     const uint max_old_cset_length = MAX2(min_old_cset_length, _policy->calc_max_old_cset_length());
     bool check_time_remaining = _policy->adaptive_young_list_length();
@@ -490,7 +492,7 @@
                               "time remaining %1.2fms, optional threshold %1.2fms",
                               min_old_cset_length, max_old_cset_length, time_remaining_ms, optional_threshold_ms);
 
-    HeapRegion* hr = cset_chooser()->peek();
+    HeapRegion* hr = candidates()->peek_front();
     while (hr != NULL) {
       if (old_region_length() + optional_region_length() >= max_old_cset_length) {
         // Added maximum number of old regions to the CSet.
@@ -502,7 +504,7 @@
 
       // Stop adding regions if the remaining reclaimable space is
       // not above G1HeapWastePercent.
-      size_t reclaimable_bytes = cset_chooser()->remaining_reclaimable_bytes();
+      size_t reclaimable_bytes = candidates()->remaining_reclaimable_bytes();
       double reclaimable_percent = _policy->reclaimable_bytes_percent(reclaimable_bytes);
       double threshold = (double) G1HeapWastePercent;
       if (reclaimable_percent <= threshold) {
@@ -551,13 +553,13 @@
           break;
         }
       }
-      hr = cset_chooser()->peek();
+      hr = candidates()->peek_front();
     }
     if (hr == NULL) {
       log_debug(gc, ergo, cset)("Finish adding old regions to CSet (candidate old regions not available)");
     }
 
-    cset_chooser()->verify();
+    candidates()->verify();
   }
 
   stop_incremental_building();
@@ -630,15 +632,15 @@
 G1OptionalCSet::~G1OptionalCSet() {
   G1CollectedHeap* g1h = G1CollectedHeap::heap();
   while (!is_empty()) {
-    // We want to return regions not evacuated to the
-    // chooser in reverse order to maintain the old order.
+    // We want to return regions not evacuated to the collection set candidates
+    // in reverse order to maintain the old order.
     HeapRegion* hr = _cset->remove_last_optional_region();
     assert(hr != NULL, "Should be valid region left");
     _pset->record_unused_optional_region(hr);
     g1h->old_set_add(hr);
     g1h->clear_in_cset(hr);
     hr->set_index_in_opt_cset(InvalidCSetIndex);
-    _cset->cset_chooser()->push(hr);
+    _cset->candidates()->push_front(hr);
   }
   _cset->free_optional_regions();
 }
--- a/src/hotspot/share/gc/g1/g1CollectionSet.hpp	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/hotspot/share/gc/g1/g1CollectionSet.hpp	Wed Feb 13 13:22:15 2019 -0500
@@ -25,23 +25,25 @@
 #ifndef SHARE_GC_G1_G1COLLECTIONSET_HPP
 #define SHARE_GC_G1_G1COLLECTIONSET_HPP
 
-#include "gc/g1/collectionSetChooser.hpp"
 #include "utilities/debug.hpp"
 #include "utilities/globalDefinitions.hpp"
 
 class G1CollectedHeap;
+class G1CollectionSetCandidates;
 class G1CollectorState;
 class G1GCPhaseTimes;
 class G1ParScanThreadStateSet;
 class G1Policy;
 class G1SurvivorRegions;
 class HeapRegion;
+class HeapRegionClosure;
 
 class G1CollectionSet {
   G1CollectedHeap* _g1h;
   G1Policy* _policy;
 
-  CollectionSetChooser* _cset_chooser;
+  // All old gen collection set candidate regions for the current mixed gc phase.
+  G1CollectionSetCandidates* _candidates;
 
   uint _eden_region_length;
   uint _survivor_region_length;
@@ -128,7 +130,13 @@
   void initialize_optional(uint max_length);
   void free_optional_regions();
 
-  CollectionSetChooser* cset_chooser();
+  void clear_candidates();
+
+  void set_candidates(G1CollectionSetCandidates* candidates) {
+    assert(_candidates == NULL, "Trying to replace collection set candidates.");
+    _candidates = candidates;
+  }
+  G1CollectionSetCandidates* candidates() { return _candidates; }
 
   void init_region_lengths(uint eden_cset_region_length,
                            uint survivor_cset_region_length);
@@ -253,8 +261,8 @@
     _current_limit(0),
     _prepare_failed(false),
     _evacuation_failed(false) { }
-  // The destructor returns regions to the cset-chooser and
-  // frees the optional structure in the cset.
+  // The destructor returns regions to the collection set candidates set and
+  // frees the optional structure in the collection set.
   ~G1OptionalCSet();
 
   uint current_index() { return _current_index; }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hotspot/share/gc/g1/g1CollectionSetCandidates.cpp	Wed Feb 13 13:22:15 2019 -0500
@@ -0,0 +1,89 @@
+/*
+ * Copyright (c) 2019, 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.
+ *
+ */
+
+#include "precompiled.hpp"
+#include "gc/g1/g1CollectionSetCandidates.hpp"
+#include "gc/g1/g1CollectionSetChooser.hpp"
+#include "gc/g1/heapRegion.inline.hpp"
+
+HeapRegion* G1CollectionSetCandidates::pop_front() {
+  assert(_front_idx < _num_regions, "pre-condition");
+  HeapRegion* hr = _regions[_front_idx];
+  assert(hr != NULL, "pre-condition");
+  _regions[_front_idx] = NULL;
+  assert(hr->reclaimable_bytes() <= _remaining_reclaimable_bytes,
+         "Remaining reclaimable bytes inconsistent "
+         "from region: " SIZE_FORMAT " remaining: " SIZE_FORMAT,
+         hr->reclaimable_bytes(), _remaining_reclaimable_bytes);
+  _remaining_reclaimable_bytes -= hr->reclaimable_bytes();
+  _front_idx++;
+  return hr;
+}
+
+void G1CollectionSetCandidates::push_front(HeapRegion* hr) {
+  assert(hr != NULL, "Can't put back a NULL region");
+  assert(_front_idx >= 1, "Too many regions have been put back.");
+  _front_idx--;
+  _regions[_front_idx] = hr;
+  _remaining_reclaimable_bytes += hr->reclaimable_bytes();
+}
+
+void G1CollectionSetCandidates::iterate(HeapRegionClosure* cl) {
+  for (uint i = _front_idx; i < _num_regions; i++) {
+    HeapRegion* r = _regions[i];
+    if (cl->do_heap_region(r)) {
+      cl->set_incomplete();
+      break;
+    }
+  }
+}
+
+#ifndef PRODUCT
+void G1CollectionSetCandidates::verify() const {
+  guarantee(_front_idx <= _num_regions, "Index: %u Num_regions: %u", _front_idx, _num_regions);
+  uint idx = 0;
+  size_t sum_of_reclaimable_bytes = 0;
+  while (idx < _front_idx) {
+    guarantee(_regions[idx] == NULL, "All entries before _front_idx %u should be NULL, but %u is not",
+              _front_idx, idx);
+    idx++;
+  }
+  HeapRegion *prev = NULL;
+  for (; idx < _num_regions; idx++) {
+    HeapRegion *cur = _regions[idx];
+    guarantee(cur != NULL, "Regions after _front_idx %u cannot be NULL but %u is", _front_idx, idx);
+    guarantee(G1CollectionSetChooser::should_add(cur), "Region %u should be eligible for addition.", cur->hrm_index());
+    if (prev != NULL) {
+      guarantee(prev->gc_efficiency() >= cur->gc_efficiency(),
+                "GC efficiency for region %u: %1.4f smaller than for region %u: %1.4f",
+                prev->hrm_index(), prev->gc_efficiency(), cur->hrm_index(), cur->gc_efficiency());
+    }
+    sum_of_reclaimable_bytes += cur->reclaimable_bytes();
+    prev = cur;
+  }
+  guarantee(sum_of_reclaimable_bytes == _remaining_reclaimable_bytes,
+            "Inconsistent remaining_reclaimable bytes, remaining " SIZE_FORMAT " calculated " SIZE_FORMAT,
+            _remaining_reclaimable_bytes, sum_of_reclaimable_bytes);
+}
+#endif // !PRODUCT
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hotspot/share/gc/g1/g1CollectionSetCandidates.hpp	Wed Feb 13 13:22:15 2019 -0500
@@ -0,0 +1,99 @@
+/*
+ * Copyright (c) 2019, 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.
+ *
+ */
+
+#ifndef SHARE_GC_G1_G1COLLECTIONSETCANDIDATES_HPP
+#define SHARE_GC_G1_G1COLLECTIONSETCANDIDATES_HPP
+
+#include "gc/g1/g1CollectionSetCandidates.hpp"
+#include "gc/shared/workgroup.hpp"
+#include "memory/allocation.hpp"
+#include "runtime/globals.hpp"
+
+class HeapRegion;
+class HeapRegionClosure;
+
+// Set of collection set candidates, i.e. all old gen regions we consider worth
+// collecting in the remainder of the current mixed phase. Regions are sorted by decreasing
+// gc efficiency.
+// Maintains a cursor into the list that specifies the next collection set candidate
+// to put into the current collection set.
+class G1CollectionSetCandidates : public CHeapObj<mtGC> {
+  HeapRegion** _regions;
+  uint _num_regions; // Total number of regions in the collection set candidate set.
+
+  // The sum of bytes that can be reclaimed in the remaining set of collection
+  // set candidates.
+  size_t _remaining_reclaimable_bytes;
+  // The index of the next candidate old region to be considered for
+  // addition to the current collection set.
+  uint _front_idx;
+
+public:
+  G1CollectionSetCandidates(HeapRegion** regions, uint num_regions, size_t remaining_reclaimable_bytes) :
+    _regions(regions),
+    _num_regions(num_regions),
+    _remaining_reclaimable_bytes(remaining_reclaimable_bytes),
+    _front_idx(0) { }
+
+  ~G1CollectionSetCandidates() {
+    FREE_C_HEAP_ARRAY(HeapRegion*, _regions);
+  }
+
+  // Returns the total number of collection set candidate old regions added.
+  uint num_regions() { return _num_regions; }
+
+  // Return the candidate region at the cursor position to be considered for collection without
+  // removing it.
+  HeapRegion* peek_front() {
+    HeapRegion* res = NULL;
+    if (_front_idx < _num_regions) {
+      res = _regions[_front_idx];
+      assert(res != NULL, "Unexpected NULL HeapRegion at index %u", _front_idx);
+    }
+    return res;
+  }
+
+  // Remove the given region from the candidates set and move the cursor to the next one.
+  HeapRegion* pop_front();
+
+  // Add the given HeapRegion to the front of the collection set candidate set again.
+  void push_front(HeapRegion* hr);
+
+  // Iterate over all remaining collection set candidate regions.
+  void iterate(HeapRegionClosure* cl);
+
+  // Return the number of candidate regions remaining.
+  uint num_remaining() { return _num_regions - _front_idx; }
+
+  bool is_empty() { return num_remaining() == 0; }
+
+  // Return the amount of reclaimable bytes that may be collected by the remaining
+  // candidate regions.
+  size_t remaining_reclaimable_bytes() { return _remaining_reclaimable_bytes; }
+
+  void verify() const PRODUCT_RETURN;
+};
+
+#endif /* SHARE_GC_G1_G1COLLECTIONSETCANDIDATES_HPP */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hotspot/share/gc/g1/g1CollectionSetChooser.cpp	Wed Feb 13 13:22:15 2019 -0500
@@ -0,0 +1,270 @@
+/*
+ * Copyright (c) 2001, 2019, 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.
+ *
+ */
+
+#include "precompiled.hpp"
+#include "gc/g1/g1CollectedHeap.inline.hpp"
+#include "gc/g1/g1CollectionSetCandidates.hpp"
+#include "gc/g1/g1CollectionSetChooser.hpp"
+#include "gc/g1/heapRegionRemSet.hpp"
+#include "gc/shared/space.inline.hpp"
+#include "runtime/atomic.hpp"
+#include "utilities/quickSort.hpp"
+
+// Order regions according to GC efficiency. This will cause regions with a lot
+// of live objects and large remembered sets to end up at the end of the array.
+// Given that we might skip collecting the last few old regions, if after a few
+// mixed GCs the remaining have reclaimable bytes under a certain threshold, the
+// hope is that the ones we'll skip are ones with both large remembered sets and
+// a lot of live objects, not the ones with just a lot of live objects if we
+// ordered according to the amount of reclaimable bytes per region.
+static int order_regions(HeapRegion* hr1, HeapRegion* hr2) {
+  // Make sure that NULL entries are moved to the end.
+  if (hr1 == NULL) {
+    if (hr2 == NULL) {
+      return 0;
+    } else {
+      return 1;
+    }
+  } else if (hr2 == NULL) {
+    return -1;
+  }
+
+  double gc_eff1 = hr1->gc_efficiency();
+  double gc_eff2 = hr2->gc_efficiency();
+
+  if (gc_eff1 > gc_eff2) {
+    return -1;
+  } if (gc_eff1 < gc_eff2) {
+    return 1;
+  } else {
+    return 0;
+  }
+}
+
+// Determine collection set candidates: For all regions determine whether they
+// should be a collection set candidates, calculate their efficiency, sort and
+// return them as G1CollectionSetCandidates instance.
+// Threads calculate the GC efficiency of the regions they get to process, and
+// put them into some work area unsorted. At the end the array is sorted and
+// copied into the G1CollectionSetCandidates instance; the caller will be the new
+// owner of this object.
+class G1BuildCandidateRegionsTask : public AbstractGangTask {
+
+  // Work area for building the set of collection set candidates. Contains references
+  // to heap regions with their GC efficiencies calculated. To reduce contention
+  // on claiming array elements, worker threads claim parts of this array in chunks;
+  // Array elements may be NULL as threads might not get enough regions to fill
+  // up their chunks completely.
+  // Final sorting will remove them.
+  class G1BuildCandidateArray : public StackObj {
+
+    uint const _max_size;
+    uint const _chunk_size;
+
+    HeapRegion** _data;
+
+    uint volatile _cur_claim_idx;
+
+    // Calculates the maximum array size that will be used.
+    static uint required_array_size(uint num_regions, uint chunk_size, uint num_workers) {
+      uint const max_waste = num_workers * chunk_size;
+      // The array should be aligned with respect to chunk_size.
+      uint const aligned_num_regions = ((num_regions + chunk_size - 1) / chunk_size) * chunk_size;
+
+      return aligned_num_regions + max_waste;
+    }
+
+  public:
+    G1BuildCandidateArray(uint max_num_regions, uint chunk_size, uint num_workers) :
+      _max_size(required_array_size(max_num_regions, chunk_size, num_workers)),
+      _chunk_size(chunk_size),
+      _data(NEW_C_HEAP_ARRAY(HeapRegion*, _max_size, mtGC)),
+      _cur_claim_idx(0) {
+      for (uint i = 0; i < _max_size; i++) {
+        _data[i] = NULL;
+      }
+    }
+
+    ~G1BuildCandidateArray() {
+      FREE_C_HEAP_ARRAY(HeapRegion*, _data);
+    }
+
+    // Claim a new chunk, returning its bounds [from, to[.
+    void claim_chunk(uint& from, uint& to) {
+      uint result = Atomic::add(_chunk_size, &_cur_claim_idx);
+      assert(_max_size > result - 1,
+             "Array too small, is %u should be %u with chunk size %u.",
+             _max_size, result, _chunk_size);
+      from = result - _chunk_size;
+      to = result;
+    }
+
+    // Set element in array.
+    void set(uint idx, HeapRegion* hr) {
+      assert(idx < _max_size, "Index %u out of bounds %u", idx, _max_size);
+      assert(_data[idx] == NULL, "Value must not have been set.");
+      _data[idx] = hr;
+    }
+
+    void sort_and_copy_into(HeapRegion** dest, uint num_regions) {
+      if (_cur_claim_idx == 0) {
+        return;
+      }
+      for (uint i = _cur_claim_idx; i < _max_size; i++) {
+        assert(_data[i] == NULL, "must be");
+      }
+      QuickSort::sort(_data, _cur_claim_idx, order_regions, true);
+      for (uint i = num_regions; i < _max_size; i++) {
+        assert(_data[i] == NULL, "must be");
+      }
+      for (uint i = 0; i < num_regions; i++) {
+        dest[i] = _data[i];
+      }
+    }
+  };
+
+  // Per-region closure. In addition to determining whether a region should be
+  // added to the candidates, and calculating those regions' gc efficiencies, also
+  // gather additional statistics.
+  class G1BuildCandidateRegionsClosure : public HeapRegionClosure {
+    G1BuildCandidateArray* _array;
+
+    uint _cur_chunk_idx;
+    uint _cur_chunk_end;
+
+    uint _regions_added;
+    size_t _reclaimable_bytes_added;
+
+    void add_region(HeapRegion* hr) {
+      if (_cur_chunk_idx == _cur_chunk_end) {
+        _array->claim_chunk(_cur_chunk_idx, _cur_chunk_end);
+      }
+      assert(_cur_chunk_idx < _cur_chunk_end, "Must be");
+
+      hr->calc_gc_efficiency();
+      _array->set(_cur_chunk_idx, hr);
+
+      _cur_chunk_idx++;
+
+      _regions_added++;
+      _reclaimable_bytes_added += hr->reclaimable_bytes();
+    }
+
+    bool should_add(HeapRegion* hr) { return G1CollectionSetChooser::should_add(hr); }
+
+  public:
+    G1BuildCandidateRegionsClosure(G1BuildCandidateArray* array) :
+      _array(array),
+      _cur_chunk_idx(0),
+      _cur_chunk_end(0),
+      _regions_added(0),
+      _reclaimable_bytes_added(0) { }
+
+    bool do_heap_region(HeapRegion* r) {
+      // We will skip any region that's currently used as an old GC
+      // alloc region (we should not consider those for collection
+      // before we fill them up).
+      if (should_add(r) && !G1CollectedHeap::heap()->is_old_gc_alloc_region(r)) {
+        add_region(r);
+      } else if (r->is_old()) {
+        // Keep remembered sets for humongous regions, otherwise clean out remembered
+        // sets for old regions.
+        r->rem_set()->clear(true /* only_cardset */);
+      } else {
+        assert(r->is_archive() || !r->is_old() || !r->rem_set()->is_tracked(),
+               "Missed to clear unused remembered set of region %u (%s) that is %s",
+               r->hrm_index(), r->get_type_str(), r->rem_set()->get_state_str());
+      }
+      return false;
+    }
+
+    uint regions_added() const { return _regions_added; }
+    size_t reclaimable_bytes_added() const { return _reclaimable_bytes_added; }
+  };
+
+  G1CollectedHeap* _g1h;
+  HeapRegionClaimer _hrclaimer;
+
+  uint volatile _num_regions_added;
+  size_t volatile _reclaimable_bytes_added;
+
+  G1BuildCandidateArray _result;
+
+  void update_totals(uint num_regions, size_t reclaimable_bytes) {
+    if (num_regions > 0) {
+      assert(reclaimable_bytes > 0, "invariant");
+      Atomic::add(num_regions, &_num_regions_added);
+      Atomic::add(reclaimable_bytes, &_reclaimable_bytes_added);
+    } else {
+      assert(reclaimable_bytes == 0, "invariant");
+    }
+  }
+
+public:
+  G1BuildCandidateRegionsTask(uint max_num_regions, uint chunk_size, uint num_workers) :
+    AbstractGangTask("G1 Build Candidate Regions"),
+    _g1h(G1CollectedHeap::heap()),
+    _hrclaimer(num_workers),
+    _num_regions_added(0),
+    _reclaimable_bytes_added(0),
+    _result(max_num_regions, chunk_size, num_workers) { }
+
+  void work(uint worker_id) {
+    G1BuildCandidateRegionsClosure cl(&_result);
+    _g1h->heap_region_par_iterate_from_worker_offset(&cl, &_hrclaimer, worker_id);
+    update_totals(cl.regions_added(), cl.reclaimable_bytes_added());
+  }
+
+  G1CollectionSetCandidates* get_sorted_candidates() {
+    HeapRegion** regions = NEW_C_HEAP_ARRAY(HeapRegion*, _num_regions_added, mtGC);
+    _result.sort_and_copy_into(regions, _num_regions_added);
+    return new G1CollectionSetCandidates(regions,
+                                         _num_regions_added,
+                                         _reclaimable_bytes_added);
+  }
+};
+
+uint G1CollectionSetChooser::calculate_work_chunk_size(uint num_workers, uint num_regions) {
+  assert(num_workers > 0, "Active gc workers should be greater than 0");
+  return MAX2(num_regions / num_workers, 1U);
+}
+
+bool G1CollectionSetChooser::should_add(HeapRegion* hr) {
+  return !hr->is_young() &&
+         !hr->is_pinned() &&
+         region_occupancy_low_enough_for_evac(hr->live_bytes()) &&
+         hr->rem_set()->is_complete();
+}
+
+G1CollectionSetCandidates* G1CollectionSetChooser::build(WorkGang* workers, uint max_num_regions) {
+  uint num_workers = workers->active_workers();
+  uint chunk_size = calculate_work_chunk_size(num_workers, max_num_regions);
+
+  G1BuildCandidateRegionsTask cl(max_num_regions, chunk_size, num_workers);
+  workers->run_task(&cl, num_workers);
+
+  G1CollectionSetCandidates* result = cl.get_sorted_candidates();
+  result->verify();
+  return result;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hotspot/share/gc/g1/g1CollectionSetChooser.hpp	Wed Feb 13 13:22:15 2019 -0500
@@ -0,0 +1,60 @@
+/*
+ * Copyright (c) 2001, 2019, 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.
+ *
+ */
+
+#ifndef SHARE_GC_G1_G1COLLECTIONSETCHOOSER_HPP
+#define SHARE_GC_G1_G1COLLECTIONSETCHOOSER_HPP
+
+#include "gc/g1/heapRegion.hpp"
+#include "memory/allocation.hpp"
+#include "runtime/globals.hpp"
+
+class G1CollectionSetCandidates;
+class WorkGang;
+
+// Helper class to calculate collection set candidates, and containing some related
+// methods.
+class G1CollectionSetChooser : public AllStatic {
+  static uint calculate_work_chunk_size(uint num_workers, uint num_regions);
+public:
+
+  static size_t mixed_gc_live_threshold_bytes() {
+    return HeapRegion::GrainBytes * (size_t) G1MixedGCLiveThresholdPercent / 100;
+  }
+
+  static bool region_occupancy_low_enough_for_evac(size_t live_bytes) {
+    return live_bytes < mixed_gc_live_threshold_bytes();
+  }
+
+  // Determine whether to add the given region to the collection set candidates or
+  // not. Currently, we skip pinned regions and regions whose live
+  // bytes are over the threshold. Humongous regions may be reclaimed during cleanup.
+  // Regions also need a complete remembered set to be a candidate.
+  static bool should_add(HeapRegion* hr);
+
+  // Build and return set of collection set candidates sorted by decreasing gc
+  // efficiency.
+  static G1CollectionSetCandidates* build(WorkGang* workers, uint max_num_regions);
+};
+
+#endif // SHARE_GC_G1_G1COLLECTIONSETCHOOSER_HPP
--- a/src/hotspot/share/gc/g1/g1MonitoringSupport.cpp	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/hotspot/share/gc/g1/g1MonitoringSupport.cpp	Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2019, 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
@@ -119,15 +119,15 @@
   //  name "collector.0".  In a generational collector this would be the
   // young generation collection.
   _incremental_collection_counters =
-    new CollectorCounters("G1 incremental collections", 0);
+    new CollectorCounters("G1 young collection pauses", 0);
   //   name "collector.1".  In a generational collector this would be the
   // old generation collection.
   _full_collection_counters =
-    new CollectorCounters("G1 stop-the-world full collections", 1);
+    new CollectorCounters("G1 full collection pauses", 1);
   //   name "collector.2".  In a generational collector this would be the
   // STW phases in concurrent collection.
   _conc_collection_counters =
-    new CollectorCounters("G1 stop-the-world phases", 2);
+    new CollectorCounters("G1 concurrent cycle pauses", 2);
 
   // "Generation" and "Space" counters.
   //
--- a/src/hotspot/share/gc/g1/g1Policy.cpp	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/hotspot/share/gc/g1/g1Policy.cpp	Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2001, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2019, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -26,9 +26,11 @@
 #include "gc/g1/g1Analytics.hpp"
 #include "gc/g1/g1CollectedHeap.inline.hpp"
 #include "gc/g1/g1CollectionSet.hpp"
+#include "gc/g1/g1CollectionSetCandidates.hpp"
 #include "gc/g1/g1ConcurrentMark.hpp"
 #include "gc/g1/g1ConcurrentMarkThread.inline.hpp"
 #include "gc/g1/g1ConcurrentRefine.hpp"
+#include "gc/g1/g1CollectionSetChooser.hpp"
 #include "gc/g1/g1HeterogeneousHeapPolicy.hpp"
 #include "gc/g1/g1HotCardCache.hpp"
 #include "gc/g1/g1IHOPControl.hpp"
@@ -438,7 +440,7 @@
   // Release the future to-space so that it is available for compaction into.
   collector_state()->set_in_young_only_phase(false);
   collector_state()->set_in_full_gc(true);
-  cset_chooser()->clear();
+  _collection_set->clear_candidates();
 }
 
 void G1Policy::record_full_collection_end() {
@@ -546,10 +548,6 @@
   return other_time_ms(pause_time_ms) - phase_times()->total_free_cset_time_ms();
 }
 
-CollectionSetChooser* G1Policy::cset_chooser() const {
-  return _collection_set->cset_chooser();
-}
-
 bool G1Policy::about_to_start_mixed_phase() const {
   return _g1h->concurrent_mark()->cm_thread()->during_cycle() || collector_state()->in_young_gc_before_mixed();
 }
@@ -773,8 +771,6 @@
   _g1h->concurrent_refine()->adjust(average_time_ms(G1GCPhaseTimes::UpdateRS),
                                     phase_times()->sum_thread_work_items(G1GCPhaseTimes::UpdateRS),
                                     update_rs_time_goal_ms);
-
-  cset_chooser()->verify();
 }
 
 G1IHOPControl* G1Policy::create_ihop_control(const G1Predictions* predictor){
@@ -1032,7 +1028,8 @@
 }
 
 void G1Policy::record_concurrent_mark_cleanup_end() {
-  cset_chooser()->rebuild(_g1h->workers(), _g1h->num_regions());
+  G1CollectionSetCandidates* candidates = G1CollectionSetChooser::build(_g1h->workers(), _g1h->num_regions());
+  _collection_set->set_candidates(candidates);
 
   bool mixed_gc_pending = next_gc_should_be_mixed("request mixed gcs", "request young-only gcs");
   if (!mixed_gc_pending) {
@@ -1063,10 +1060,10 @@
 
 void G1Policy::clear_collection_set_candidates() {
   // Clear remembered sets of remaining candidate regions and the actual candidate
-  // list.
+  // set.
   G1ClearCollectionSetCandidateRemSets cl;
-  cset_chooser()->iterate(&cl);
-  cset_chooser()->clear();
+  _collection_set->candidates()->iterate(&cl);
+  _collection_set->clear_candidates();
 }
 
 void G1Policy::maybe_start_marking() {
@@ -1132,22 +1129,24 @@
 
 bool G1Policy::next_gc_should_be_mixed(const char* true_action_str,
                                        const char* false_action_str) const {
-  if (cset_chooser()->is_empty()) {
+  G1CollectionSetCandidates* candidates = _collection_set->candidates();
+
+  if (candidates->is_empty()) {
     log_debug(gc, ergo)("%s (candidate old regions not available)", false_action_str);
     return false;
   }
 
   // Is the amount of uncollected reclaimable space above G1HeapWastePercent?
-  size_t reclaimable_bytes = cset_chooser()->remaining_reclaimable_bytes();
+  size_t reclaimable_bytes = candidates->remaining_reclaimable_bytes();
   double reclaimable_percent = reclaimable_bytes_percent(reclaimable_bytes);
   double threshold = (double) G1HeapWastePercent;
   if (reclaimable_percent <= threshold) {
     log_debug(gc, ergo)("%s (reclaimable percentage not over threshold). candidate old regions: %u reclaimable: " SIZE_FORMAT " (%1.2f) threshold: " UINTX_FORMAT,
-                        false_action_str, cset_chooser()->remaining_regions(), reclaimable_bytes, reclaimable_percent, G1HeapWastePercent);
+                        false_action_str, candidates->num_remaining(), reclaimable_bytes, reclaimable_percent, G1HeapWastePercent);
     return false;
   }
   log_debug(gc, ergo)("%s (candidate old regions available). candidate old regions: %u reclaimable: " SIZE_FORMAT " (%1.2f) threshold: " UINTX_FORMAT,
-                      true_action_str, cset_chooser()->remaining_regions(), reclaimable_bytes, reclaimable_percent, G1HeapWastePercent);
+                      true_action_str, candidates->num_remaining(), reclaimable_bytes, reclaimable_percent, G1HeapWastePercent);
   return true;
 }
 
@@ -1159,10 +1158,10 @@
   // maximum desired number of mixed GCs.
   //
   // The calculation is based on the number of marked regions we added
-  // to the CSet chooser in the first place, not how many remain, so
+  // to the CSet candidates in the first place, not how many remain, so
   // that the result is the same during all mixed GCs that follow a cycle.
 
-  const size_t region_num = (size_t) cset_chooser()->length();
+  const size_t region_num = _collection_set->candidates()->num_regions();
   const size_t gc_num = (size_t) MAX2(G1MixedGCCountTarget, (uintx) 1);
   size_t result = region_num / gc_num;
   // emulate ceiling
--- a/src/hotspot/share/gc/g1/g1Policy.hpp	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/hotspot/share/gc/g1/g1Policy.hpp	Wed Feb 13 13:22:15 2019 -0500
@@ -44,7 +44,7 @@
 
 class HeapRegion;
 class G1CollectionSet;
-class CollectionSetChooser;
+class G1CollectionSetChooser;
 class G1IHOPControl;
 class G1Analytics;
 class G1SurvivorRegions;
@@ -176,7 +176,7 @@
   double non_young_other_time_ms() const;
   double constant_other_time_ms(double pause_time_ms) const;
 
-  CollectionSetChooser* cset_chooser() const;
+  G1CollectionSetChooser* cset_chooser() const;
 
   // The number of bytes copied during the GC.
   size_t _bytes_copied_during_gc;
--- a/src/hotspot/share/gc/g1/g1RemSetTrackingPolicy.cpp	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/hotspot/share/gc/g1/g1RemSetTrackingPolicy.cpp	Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2018, 2019, 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 @@
  */
 
 #include "precompiled.hpp"
-#include "gc/g1/collectionSetChooser.hpp"
+#include "gc/g1/g1CollectionSetChooser.hpp"
 #include "gc/g1/g1RemSetTrackingPolicy.hpp"
 #include "gc/g1/heapRegion.inline.hpp"
 #include "gc/g1/heapRegionRemSet.hpp"
@@ -126,7 +126,7 @@
   // - Otherwise only add those old gen regions which occupancy is low enough that there
   // is a chance that we will ever evacuate them in the mixed gcs.
   if ((total_live_bytes > 0) &&
-      CollectionSetChooser::region_occupancy_low_enough_for_evac(total_live_bytes) &&
+      G1CollectionSetChooser::region_occupancy_low_enough_for_evac(total_live_bytes) &&
       !r->rem_set()->is_tracked()) {
 
     r->rem_set()->set_state_updating();
--- a/src/hotspot/share/gc/g1/heapRegion.hpp	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/hotspot/share/gc/g1/heapRegion.hpp	Wed Feb 13 13:22:15 2019 -0500
@@ -547,7 +547,7 @@
   }
 
   void calc_gc_efficiency(void);
-  double gc_efficiency() { return _gc_efficiency;}
+  double gc_efficiency() const { return _gc_efficiency;}
 
   uint index_in_opt_cset() const { return _index_in_opt_cset; }
   void set_index_in_opt_cset(uint index) { _index_in_opt_cset = index; }
@@ -705,7 +705,7 @@
 class HeapRegionClosure : public StackObj {
   friend class HeapRegionManager;
   friend class G1CollectionSet;
-  friend class CollectionSetChooser;
+  friend class G1CollectionSetCandidates;
 
   bool _is_complete;
   void set_incomplete() { _is_complete = false; }
--- a/src/hotspot/share/gc/parallel/psMarkSweep.cpp	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/hotspot/share/gc/parallel/psMarkSweep.cpp	Wed Feb 13 13:22:15 2019 -0500
@@ -72,7 +72,7 @@
 void PSMarkSweep::initialize() {
   _span_based_discoverer.set_span(ParallelScavengeHeap::heap()->reserved_region());
   set_ref_processor(new ReferenceProcessor(&_span_based_discoverer));     // a vanilla ref proc
-  _counters = new CollectorCounters("PSMarkSweep", 1);
+  _counters = new CollectorCounters("Serial full collection pauses", 1);
   MarkSweep::initialize();
 }
 
--- a/src/hotspot/share/gc/parallel/psParallelCompact.cpp	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/hotspot/share/gc/parallel/psParallelCompact.cpp	Wed Feb 13 13:22:15 2019 -0500
@@ -883,7 +883,7 @@
     new PCReferenceProcessor(&_span_based_discoverer,
                              &_is_alive_closure); // non-header is alive closure
 
-  _counters = new CollectorCounters("PSParallelCompact", 1);
+  _counters = new CollectorCounters("Parallel full collection pauses", 1);
 
   // Initialize static fields in ParCompactionManager.
   ParCompactionManager::initialize(mark_bitmap());
--- a/src/hotspot/share/gc/parallel/psScavenge.cpp	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/hotspot/share/gc/parallel/psScavenge.cpp	Wed Feb 13 13:22:15 2019 -0500
@@ -754,5 +754,5 @@
   // Cache the cardtable
   _card_table = heap->card_table();
 
-  _counters = new CollectorCounters("PSScavenge", 0);
+  _counters = new CollectorCounters("Parallel young collection pauses", 0);
 }
--- a/src/hotspot/share/gc/serial/defNewGeneration.hpp	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/hotspot/share/gc/serial/defNewGeneration.hpp	Wed Feb 13 13:22:15 2019 -0500
@@ -192,7 +192,7 @@
 
  public:
   DefNewGeneration(ReservedSpace rs, size_t initial_byte_size,
-                   const char* policy="Copy");
+                   const char* policy="Serial young collection pauses");
 
   virtual void ref_processor_init();
 
--- a/src/hotspot/share/gc/serial/tenuredGeneration.cpp	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/hotspot/share/gc/serial/tenuredGeneration.cpp	Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2001, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2019, 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
@@ -65,7 +65,7 @@
   _gen_counters = new GenerationCounters(gen_name, 1, 1,
       gcp->min_old_size(), gcp->max_old_size(), &_virtual_space);
 
-  _gc_counters = new CollectorCounters("MSC", 1);
+  _gc_counters = new CollectorCounters("Serial full collection pauses", 1);
 
   _space_counters = new CSpaceCounters(gen_name, 0,
                                        _virtual_space.reserved_size(),
--- a/src/hotspot/share/gc/shared/weakProcessor.cpp	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/hotspot/share/gc/shared/weakProcessor.cpp	Wed Feb 13 13:22:15 2019 -0500
@@ -35,19 +35,23 @@
 #include "utilities/macros.hpp"
 
 void WeakProcessor::weak_oops_do(BoolObjectClosure* is_alive, OopClosure* keep_alive) {
-  StringTable::reset_dead_counter();
-  CountingIsAliveClosure<BoolObjectClosure> cl(is_alive);
   FOR_EACH_WEAK_PROCESSOR_PHASE(phase) {
     if (WeakProcessorPhases::is_serial(phase)) {
-      WeakProcessorPhases::processor(phase)(&cl, keep_alive);
+      WeakProcessorPhases::processor(phase)(is_alive, keep_alive);
     } else {
-      WeakProcessorPhases::oop_storage(phase)->weak_oops_do(&cl, keep_alive);
-    }
-    if (WeakProcessorPhases::is_stringtable(phase)) {
-      StringTable::inc_dead_counter(cl.num_dead());
+      if (WeakProcessorPhases::is_stringtable(phase)) {
+        StringTable::reset_dead_counter();
+
+        CountingSkippedIsAliveClosure<BoolObjectClosure, OopClosure> cl(is_alive, keep_alive);
+        WeakProcessorPhases::oop_storage(phase)->oops_do(&cl);
+
+        StringTable::inc_dead_counter(cl.num_dead() + cl.num_skipped());
+        StringTable::finish_dead_counter();
+      } else {
+        WeakProcessorPhases::oop_storage(phase)->weak_oops_do(is_alive, keep_alive);
+      }
     }
   }
-  StringTable::finish_dead_counter();
 }
 
 void WeakProcessor::oops_do(OopClosure* closure) {
--- a/src/hotspot/share/gc/shared/weakProcessor.inline.hpp	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/hotspot/share/gc/shared/weakProcessor.inline.hpp	Wed Feb 13 13:22:15 2019 -0500
@@ -37,15 +37,15 @@
 class BoolObjectClosure;
 class OopClosure;
 
-template<typename T>
+template<typename IsAlive>
 class CountingIsAliveClosure : public BoolObjectClosure {
-  T* _inner;
+  IsAlive* _inner;
 
   size_t _num_dead;
   size_t _num_total;
 
 public:
-  CountingIsAliveClosure(T* cl) : _inner(cl), _num_dead(0), _num_total(0) { }
+  CountingIsAliveClosure(IsAlive* cl) : _inner(cl), _num_dead(0), _num_total(0) { }
 
   virtual bool do_object_b(oop obj) {
     bool result = _inner->do_object_b(obj);
@@ -58,6 +58,33 @@
   size_t num_total() const { return _num_total; }
 };
 
+template <typename IsAlive, typename KeepAlive>
+class CountingSkippedIsAliveClosure : public Closure {
+  CountingIsAliveClosure<IsAlive> _counting_is_alive;
+  KeepAlive* _keep_alive;
+
+  size_t _num_skipped;
+
+public:
+  CountingSkippedIsAliveClosure(IsAlive* is_alive, KeepAlive* keep_alive) :
+    _counting_is_alive(is_alive), _keep_alive(keep_alive), _num_skipped(0) { }
+
+  void do_oop(oop* p) {
+    oop obj = *p;
+    if (obj == NULL) {
+      _num_skipped++;
+    } else if (_counting_is_alive.do_object_b(obj)) {
+      _keep_alive->do_oop(p);
+    } else {
+      *p = NULL;
+    }
+  }
+
+  size_t num_dead() const { return _counting_is_alive.num_dead(); }
+  size_t num_skipped() const { return _num_skipped; }
+  size_t num_total() const { return _counting_is_alive.num_total() + num_skipped(); }
+};
+
 template<typename IsAlive, typename KeepAlive>
 void WeakProcessor::Task::work(uint worker_id,
                                IsAlive* is_alive,
@@ -67,8 +94,8 @@
          worker_id, _nworkers);
 
   FOR_EACH_WEAK_PROCESSOR_PHASE(phase) {
-    CountingIsAliveClosure<IsAlive> cl(is_alive);
     if (WeakProcessorPhases::is_serial(phase)) {
+      CountingIsAliveClosure<IsAlive> cl(is_alive);
       uint serial_index = WeakProcessorPhases::serial_index(phase);
       if (_serial_phases_done.try_claim_task(serial_index)) {
         WeakProcessorPhaseTimeTracker pt(_phase_times, phase);
@@ -78,15 +105,16 @@
         }
       }
     } else {
+      CountingSkippedIsAliveClosure<IsAlive, KeepAlive> cl(is_alive, keep_alive);
       WeakProcessorPhaseTimeTracker pt(_phase_times, phase, worker_id);
       uint storage_index = WeakProcessorPhases::oop_storage_index(phase);
-      _storage_states[storage_index].weak_oops_do(&cl, keep_alive);
+      _storage_states[storage_index].oops_do(&cl);
       if (_phase_times != NULL) {
         _phase_times->record_worker_items(worker_id, phase, cl.num_dead(), cl.num_total());
       }
-    }
-    if (WeakProcessorPhases::is_stringtable(phase)) {
-      StringTable::inc_dead_counter(cl.num_dead());
+      if (WeakProcessorPhases::is_stringtable(phase)) {
+        StringTable::inc_dead_counter(cl.num_dead() + cl.num_skipped());
+      }
     }
   }
 
--- a/src/hotspot/share/gc/z/zServiceability.cpp	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/hotspot/share/gc/z/zServiceability.cpp	Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2019, 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
@@ -72,8 +72,8 @@
                     max_capacity /* max_capacity */,
                     min_capacity /* init_capacity */),
     // gc.collector.2
-    _collector_counters("stop-the-world" /* name */,
-                        2                /* ordinal */) {}
+    _collector_counters("Z concurrent cycle pauses" /* name */,
+                        2                           /* ordinal */) {}
 
 CollectorCounters* ZServiceabilityCounters::collector_counters() {
   return &_collector_counters;
--- a/src/hotspot/share/memory/allocation.cpp	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/hotspot/share/memory/allocation.cpp	Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2019, 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
@@ -169,8 +169,7 @@
   ResourceObj* resobj = (ResourceObj *)res;
   resobj->_allocation_t[0] = ~(allocation + type);
   if (type != STACK_OR_EMBEDDED) {
-    // Called from operator new() and CollectionSetChooser(),
-    // set verification value.
+    // Called from operator new(), set verification value.
     resobj->_allocation_t[1] = (uintptr_t)&(resobj->_allocation_t[1]) + type;
   }
 }
--- a/src/hotspot/share/opto/c2_globals.hpp	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/hotspot/share/opto/c2_globals.hpp	Wed Feb 13 13:22:15 2019 -0500
@@ -509,9 +509,6 @@
   product(bool, EliminateAutoBox, true,                                     \
           "Control optimizations for autobox elimination")                  \
                                                                             \
-  diagnostic(bool, UseImplicitStableValues, true,                           \
-          "Mark well-known stable fields as such (e.g. String.value)")      \
-                                                                            \
   product(intx, AutoBoxCacheMax, 128,                                       \
           "Sets max value cached by the java.lang.Integer autobox cache")   \
           range(0, max_jint)                                                \
--- a/src/hotspot/share/opto/escape.cpp	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/hotspot/share/opto/escape.cpp	Wed Feb 13 13:22:15 2019 -0500
@@ -3010,6 +3010,11 @@
       n->raise_bottom_type(tinst);
       igvn->hash_insert(n);
       record_for_optimizer(n);
+      // Allocate an alias index for the header fields. Accesses to
+      // the header emitted during macro expansion wouldn't have
+      // correct memory state otherwise.
+      _compile->get_alias_index(tinst->add_offset(oopDesc::mark_offset_in_bytes()));
+      _compile->get_alias_index(tinst->add_offset(oopDesc::klass_offset_in_bytes()));
       if (alloc->is_Allocate() && (t->isa_instptr() || t->isa_aryptr())) {
 
         // First, put on the worklist all Field edges from Connection Graph
--- a/src/hotspot/share/opto/graphKit.cpp	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/hotspot/share/opto/graphKit.cpp	Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2001, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2019, 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
@@ -3426,6 +3426,10 @@
     record_for_igvn(minit_in); // fold it up later, if possible
     Node* minit_out = memory(rawidx);
     assert(minit_out->is_Proj() && minit_out->in(0) == init, "");
+    // Add an edge in the MergeMem for the header fields so an access
+    // to one of those has correct memory state
+    set_memory(minit_out, C->get_alias_index(oop_type->add_offset(oopDesc::mark_offset_in_bytes())));
+    set_memory(minit_out, C->get_alias_index(oop_type->add_offset(oopDesc::klass_offset_in_bytes())));
     if (oop_type->isa_aryptr()) {
       const TypePtr* telemref = oop_type->add_offset(Type::OffsetBot);
       int            elemidx  = C->get_alias_index(telemref);
@@ -3882,10 +3886,6 @@
   Node* p = basic_plus_adr(str, str, value_offset);
   Node* load = access_load_at(str, p, value_field_type, value_type, T_OBJECT,
                               IN_HEAP | (set_ctrl ? C2_CONTROL_DEPENDENT_LOAD : 0) | MO_UNORDERED);
-  // String.value field is known to be @Stable.
-  if (UseImplicitStableValues) {
-    load = cast_array_to_stable(load, value_type);
-  }
   return load;
 }
 
@@ -3897,7 +3897,6 @@
   const TypeInstPtr* string_type = TypeInstPtr::make(TypePtr::NotNull, C->env()->String_klass(),
                                                      false, NULL, 0);
   const TypePtr* coder_field_type = string_type->add_offset(coder_offset);
-  int coder_field_idx = C->get_alias_index(coder_field_type);
 
   Node* p = basic_plus_adr(str, str, coder_offset);
   Node* load = access_load_at(str, p, coder_field_type, TypeInt::BYTE, T_BYTE,
@@ -4035,9 +4034,3 @@
   }
   return NULL;
 }
-
-Node* GraphKit::cast_array_to_stable(Node* ary, const TypeAryPtr* ary_type) {
-  // Reify the property as a CastPP node in Ideal graph to comply with monotonicity
-  // assumption of CCP analysis.
-  return _gvn.transform(new CastPPNode(ary, ary_type->cast_to_stable(true)));
-}
--- a/src/hotspot/share/opto/graphKit.hpp	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/hotspot/share/opto/graphKit.hpp	Wed Feb 13 13:22:15 2019 -0500
@@ -884,9 +884,6 @@
   void add_predicate_impl(Deoptimization::DeoptReason reason, int nargs);
 
   Node* make_constant_from_field(ciField* field, Node* obj);
-
-  // Produce new array node of stable type
-  Node* cast_array_to_stable(Node* ary, const TypeAryPtr* ary_type);
 };
 
 // Helper class to support building of control flow branches. Upon
--- a/src/hotspot/share/prims/jniCheck.cpp	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/hotspot/share/prims/jniCheck.cpp	Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2001, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2019, 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
@@ -418,21 +418,20 @@
   size_t sz;
   void* orig_result = check_wrapped_array(thr, fn_name, obj, carray, &sz);
   switch (mode) {
+  // As we never make copies, mode 0 and JNI_COMMIT are the same.
   case 0:
-    memcpy(orig_result, carray, sz);
-    GuardedMemory::free_copy(carray);
-    break;
   case JNI_COMMIT:
     memcpy(orig_result, carray, sz);
     break;
   case JNI_ABORT:
-    GuardedMemory::free_copy(carray);
     break;
   default:
     tty->print_cr("%s: Unrecognized mode %i releasing array "
         PTR_FORMAT " elements " PTR_FORMAT, fn_name, mode, p2i(obj), p2i(carray));
     NativeReportJNIFatalError(thr, "Unrecognized array release mode");
   }
+  // We always need to release the copy we made with GuardedMemory
+  GuardedMemory::free_copy(carray);
   return orig_result;
 }
 
--- a/src/hotspot/share/prims/whitebox.cpp	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/hotspot/share/prims/whitebox.cpp	Wed Feb 13 13:22:15 2019 -0500
@@ -694,6 +694,13 @@
   return (jlong)(uintptr_t)os::malloc(size, mtTest, stack);
 WB_END
 
+// Alloc memory with pseudo call stack and specific memory type.
+WB_ENTRY(jlong, WB_NMTMallocWithPseudoStackAndType(JNIEnv* env, jobject o, jlong size, jint pseudo_stack, jint type))
+  address pc = (address)(size_t)pseudo_stack;
+  NativeCallStack stack(&pc, 1);
+  return (jlong)(uintptr_t)os::malloc(size, (MEMFLAGS)type, stack);
+WB_END
+
 // Free the memory allocated by NMTAllocTest
 WB_ENTRY(void, WB_NMTFree(JNIEnv* env, jobject o, jlong mem))
   os::free((void*)(uintptr_t)mem);
@@ -2161,6 +2168,7 @@
 #if INCLUDE_NMT
   {CC"NMTMalloc",           CC"(J)J",                 (void*)&WB_NMTMalloc          },
   {CC"NMTMallocWithPseudoStack", CC"(JI)J",           (void*)&WB_NMTMallocWithPseudoStack},
+  {CC"NMTMallocWithPseudoStackAndType", CC"(JII)J",   (void*)&WB_NMTMallocWithPseudoStackAndType},
   {CC"NMTFree",             CC"(J)V",                 (void*)&WB_NMTFree            },
   {CC"NMTReserveMemory",    CC"(J)J",                 (void*)&WB_NMTReserveMemory   },
   {CC"NMTAttemptReserveMemoryAt",    CC"(JJ)J",       (void*)&WB_NMTAttemptReserveMemoryAt },
--- a/src/hotspot/share/runtime/arguments.cpp	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/hotspot/share/runtime/arguments.cpp	Wed Feb 13 13:22:15 2019 -0500
@@ -541,6 +541,16 @@
   { "SharedReadOnlySize",            JDK_Version::undefined(), JDK_Version::jdk(10), JDK_Version::undefined() },
   { "SharedMiscDataSize",            JDK_Version::undefined(), JDK_Version::jdk(10), JDK_Version::undefined() },
   { "SharedMiscCodeSize",            JDK_Version::undefined(), JDK_Version::jdk(10), JDK_Version::undefined() },
+  { "ProfilerPrintByteCodeStatistics", JDK_Version::undefined(), JDK_Version::jdk(13), JDK_Version::jdk(14) },
+  { "ProfilerRecordPC",              JDK_Version::undefined(), JDK_Version::jdk(13), JDK_Version::jdk(14) },
+  { "ProfileVM",                     JDK_Version::undefined(), JDK_Version::jdk(13), JDK_Version::jdk(14) },
+  { "ProfileIntervals",              JDK_Version::undefined(), JDK_Version::jdk(13), JDK_Version::jdk(14) },
+  { "ProfileIntervalsTicks",         JDK_Version::undefined(), JDK_Version::jdk(13), JDK_Version::jdk(14) },
+  { "ProfilerNumberOfInterpretedMethods", JDK_Version::undefined(), JDK_Version::jdk(13), JDK_Version::jdk(14) },
+  { "ProfilerNumberOfCompiledMethods", JDK_Version::undefined(), JDK_Version::jdk(13), JDK_Version::jdk(14) },
+  { "ProfilerNumberOfStubMethods",   JDK_Version::undefined(), JDK_Version::jdk(13), JDK_Version::jdk(14) },
+  { "ProfilerNumberOfRuntimeStubNodes", JDK_Version::undefined(), JDK_Version::jdk(13), JDK_Version::jdk(14) },
+  { "UseImplicitStableValues",       JDK_Version::undefined(), JDK_Version::jdk(13), JDK_Version::jdk(14) },
 
 #ifdef TEST_VERIFY_SPECIAL_JVM_FLAGS
   { "dep > obs",                    JDK_Version::jdk(9), JDK_Version::jdk(8), JDK_Version::undefined() },
@@ -3784,8 +3794,8 @@
 #endif
 
 #if defined(AIX)
-  UNSUPPORTED_OPTION(AllocateHeapAt);
-  UNSUPPORTED_OPTION(AllocateOldGenAt);
+  UNSUPPORTED_OPTION_NULL(AllocateHeapAt);
+  UNSUPPORTED_OPTION_NULL(AllocateOldGenAt);
 #endif
 
 #ifndef PRODUCT
--- a/src/hotspot/share/runtime/arguments.hpp	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/hotspot/share/runtime/arguments.hpp	Wed Feb 13 13:22:15 2019 -0500
@@ -663,4 +663,16 @@
   }                                                      \
 } while(0)
 
+// similar to UNSUPPORTED_OPTION but sets flag to NULL
+#define UNSUPPORTED_OPTION_NULL(opt)                     \
+do {                                                     \
+  if (opt) {                                             \
+    if (FLAG_IS_CMDLINE(opt)) {                          \
+      warning("-XX flag " #opt " not supported in this VM"); \
+    }                                                    \
+    FLAG_SET_DEFAULT(opt, NULL);                         \
+  }                                                      \
+} while(0)
+
+
 #endif // SHARE_RUNTIME_ARGUMENTS_HPP
--- a/src/hotspot/share/runtime/globals.hpp	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/hotspot/share/runtime/globals.hpp	Wed Feb 13 13:22:15 2019 -0500
@@ -749,19 +749,6 @@
   product(bool, OmitStackTraceInFastThrow, true,                            \
           "Omit backtraces for some 'hot' exceptions in optimized code")    \
                                                                             \
-  product(bool, ProfilerPrintByteCodeStatistics, false,                     \
-          "Print bytecode statistics when dumping profiler output")         \
-                                                                            \
-  product(bool, ProfilerRecordPC, false,                                    \
-          "Collect ticks for each 16 byte interval of compiled code")       \
-                                                                            \
-  product(bool, ProfileVM, false,                                           \
-          "Profile ticks that fall within VM (either in the VM Thread "     \
-          "or VM code called through stubs)")                               \
-                                                                            \
-  product(bool, ProfileIntervals, false,                                    \
-          "Print profiles for each interval (see ProfileIntervalsTicks)")   \
-                                                                            \
   notproduct(bool, ProfilerCheckIntervals, false,                           \
           "Collect and print information on spacing of profiler ticks")     \
                                                                             \
@@ -1650,23 +1637,6 @@
   develop(intx, MethodHistogramCutoff, 100,                                 \
           "The cutoff value for method invocation histogram (+CountCalls)") \
                                                                             \
-  diagnostic(intx, ProfilerNumberOfInterpretedMethods, 25,                  \
-          "Number of interpreted methods to show in profile")               \
-                                                                            \
-  diagnostic(intx, ProfilerNumberOfCompiledMethods, 25,                     \
-          "Number of compiled methods to show in profile")                  \
-                                                                            \
-  diagnostic(intx, ProfilerNumberOfStubMethods, 25,                         \
-          "Number of stub methods to show in profile")                      \
-                                                                            \
-  diagnostic(intx, ProfilerNumberOfRuntimeStubNodes, 25,                    \
-          "Number of runtime stub nodes to show in profile")                \
-                                                                            \
-  product(intx, ProfileIntervalsTicks, 100,                                 \
-          "Number of ticks between printing of interval profile "           \
-          "(+ProfileIntervals)")                                            \
-          range(0, max_intx)                                                \
-                                                                            \
   develop(intx, DontYieldALotInterval,    10,                               \
           "Interval between which yields will be dropped (milliseconds)")   \
                                                                             \
--- a/src/hotspot/share/runtime/handles.cpp	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/hotspot/share/runtime/handles.cpp	Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2019, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -26,7 +26,6 @@
 #include "memory/allocation.inline.hpp"
 #include "oops/constantPool.hpp"
 #include "oops/oop.inline.hpp"
-#include "runtime/atomic.hpp"
 #include "runtime/handles.inline.hpp"
 #include "runtime/thread.inline.hpp"
 
@@ -102,9 +101,6 @@
   return handles_visited;
 }
 
-// Used for debugging handle allocation.
-NOT_PRODUCT(jint _nof_handlemarks  = 0;)
-
 void HandleArea::oops_do(OopClosure* f) {
   uintx handles_visited = 0;
   // First handle the current chunk. It is filled to the high water mark.
@@ -130,46 +126,35 @@
   _size_in_bytes = _area->_size_in_bytes;
   debug_only(_area->_handle_mark_nesting++);
   assert(_area->_handle_mark_nesting > 0, "must stack allocate HandleMarks");
-  debug_only(Atomic::inc(&_nof_handlemarks);)
 
   // Link this in the thread
   set_previous_handle_mark(thread->last_handle_mark());
   thread->set_last_handle_mark(this);
 }
 
-
 HandleMark::~HandleMark() {
-  HandleArea* area = _area;   // help compilers with poor alias analysis
-  assert(area == _thread->handle_area(), "sanity check");
-  assert(area->_handle_mark_nesting > 0, "must stack allocate HandleMarks" );
-  debug_only(area->_handle_mark_nesting--);
+  assert(_area == _thread->handle_area(), "sanity check");
+  assert(_area->_handle_mark_nesting > 0, "must stack allocate HandleMarks" );
 
-  // Delete later chunks
-  if( _chunk->next() ) {
-    // reset arena size before delete chunks. Otherwise, the total
-    // arena size could exceed total chunk size
-    assert(area->size_in_bytes() > size_in_bytes(), "Sanity check");
-    area->set_size_in_bytes(size_in_bytes());
-    _chunk->next_chop();
-  } else {
-    assert(area->size_in_bytes() == size_in_bytes(), "Sanity check");
-  }
-  // Roll back arena to saved top markers
-  area->_chunk = _chunk;
-  area->_hwm = _hwm;
-  area->_max = _max;
+  pop_and_restore();
 #ifdef ASSERT
   // clear out first chunk (to detect allocation bugs)
   if (ZapVMHandleArea) {
     memset(_hwm, badHandleValue, _max - _hwm);
   }
-  Atomic::dec(&_nof_handlemarks);
 #endif
 
   // Unlink this from the thread
   _thread->set_last_handle_mark(previous_handle_mark());
 }
 
+void HandleMark::chop_later_chunks() {
+  // reset arena size before delete chunks. Otherwise, the total
+  // arena size could exceed total chunk size
+  _area->set_size_in_bytes(size_in_bytes());
+  _chunk->next_chop();
+}
+
 void* HandleMark::operator new(size_t size) throw() {
   return AllocateHeap(size, mtThread);
 }
--- a/src/hotspot/share/runtime/handles.hpp	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/hotspot/share/runtime/handles.hpp	Wed Feb 13 13:22:15 2019 -0500
@@ -253,6 +253,8 @@
   HandleMark* previous_handle_mark() const        { return _previous_handle_mark; }
 
   size_t size_in_bytes() const { return _size_in_bytes; }
+  // remove all chunks beginning with the next
+  void chop_later_chunks();
  public:
   HandleMark();                            // see handles_inline.hpp
   HandleMark(Thread* thread)                      { initialize(thread); }
--- a/src/hotspot/share/runtime/handles.inline.hpp	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/hotspot/share/runtime/handles.inline.hpp	Wed Feb 13 13:22:15 2019 -0500
@@ -79,7 +79,6 @@
   initialize(Thread::current());
 }
 
-
 inline void HandleMark::push() {
   // This is intentionally a NOP. pop_and_restore will reset
   // values to the HandleMark further down the stack, typically
@@ -88,22 +87,18 @@
 }
 
 inline void HandleMark::pop_and_restore() {
-  HandleArea* area = _area;   // help compilers with poor alias analysis
   // Delete later chunks
-  if( _chunk->next() ) {
-    // reset arena size before delete chunks. Otherwise, the total
-    // arena size could exceed total chunk size
-    assert(area->size_in_bytes() > size_in_bytes(), "Sanity check");
-    area->set_size_in_bytes(size_in_bytes());
-    _chunk->next_chop();
+  if(_chunk->next() != NULL) {
+    assert(_area->size_in_bytes() > size_in_bytes(), "Sanity check");
+    chop_later_chunks();
   } else {
-    assert(area->size_in_bytes() == size_in_bytes(), "Sanity check");
+    assert(_area->size_in_bytes() == size_in_bytes(), "Sanity check");
   }
   // Roll back arena to saved top markers
-  area->_chunk = _chunk;
-  area->_hwm = _hwm;
-  area->_max = _max;
-  debug_only(area->_handle_mark_nesting--);
+  _area->_chunk = _chunk;
+  _area->_hwm = _hwm;
+  _area->_max = _max;
+  debug_only(_area->_handle_mark_nesting--);
 }
 
 inline HandleMarkCleaner::HandleMarkCleaner(Thread* thread) {
--- a/src/hotspot/share/runtime/vm_version.cpp	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/hotspot/share/runtime/vm_version.cpp	Wed Feb 13 13:22:15 2019 -0500
@@ -230,13 +230,7 @@
         #define HOTSPOT_BUILD_COMPILER "unknown MS VC++:" XSTR(_MSC_VER)
       #endif
     #elif defined(__SUNPRO_CC)
-      #if   __SUNPRO_CC == 0x420
-        #define HOTSPOT_BUILD_COMPILER "Workshop 4.2"
-      #elif __SUNPRO_CC == 0x500
-        #define HOTSPOT_BUILD_COMPILER "Workshop 5.0 compat=" XSTR(__SUNPRO_CC_COMPAT)
-      #elif __SUNPRO_CC == 0x520
-        #define HOTSPOT_BUILD_COMPILER "Workshop 5.2 compat=" XSTR(__SUNPRO_CC_COMPAT)
-      #elif __SUNPRO_CC == 0x580
+      #if __SUNPRO_CC == 0x580
         #define HOTSPOT_BUILD_COMPILER "Workshop 5.8"
       #elif __SUNPRO_CC == 0x590
         #define HOTSPOT_BUILD_COMPILER "Workshop 5.9"
@@ -249,6 +243,8 @@
       #else
         #define HOTSPOT_BUILD_COMPILER "unknown Workshop:" XSTR(__SUNPRO_CC)
       #endif
+    #elif defined(__clang_version__)
+        #define HOTSPOT_BUILD_COMPILER "clang " __VERSION__
     #elif defined(__GNUC__)
         #define HOTSPOT_BUILD_COMPILER "gcc " __VERSION__
     #elif defined(__IBMCPP__)
--- a/src/hotspot/share/services/allocationSite.hpp	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/hotspot/share/services/allocationSite.hpp	Wed Feb 13 13:22:15 2019 -0500
@@ -25,6 +25,7 @@
 #ifndef SHARE_SERVICES_ALLOCATIONSITE_HPP
 #define SHARE_SERVICES_ALLOCATIONSITE_HPP
 
+#include "memory/allocation.hpp"
 #include "utilities/nativeCallStack.hpp"
 
 // Allocation site represents a code path that makes a memory
@@ -33,8 +34,9 @@
  private:
   NativeCallStack  _call_stack;
   E                e;
+  MEMFLAGS         _flag;
  public:
-  AllocationSite(const NativeCallStack& stack) : _call_stack(stack) { }
+  AllocationSite(const NativeCallStack& stack, MEMFLAGS flag) : _call_stack(stack), _flag(flag) { }
   int hash() const { return _call_stack.hash(); }
   bool equals(const NativeCallStack& stack) const {
     return _call_stack.equals(stack);
@@ -51,6 +53,8 @@
   // Information regarding this allocation
   E* data()             { return &e; }
   const E* peek() const { return &e; }
+
+  MEMFLAGS flag() const { return _flag; }
 };
 
 #endif // SHARE_SERVICES_ALLOCATIONSITE_HPP
--- a/src/hotspot/share/services/mallocSiteTable.cpp	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/hotspot/share/services/mallocSiteTable.cpp	Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2019, 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
@@ -138,7 +138,7 @@
   MallocSiteHashtableEntry* head = _table[index];
   while (head != NULL && (*pos_idx) <= MAX_BUCKET_LENGTH) {
     MallocSite* site = head->data();
-    if (site->flags() == flags && site->equals(key)) {
+    if (site->flag() == flags && site->equals(key)) {
       return head->data();
     }
 
--- a/src/hotspot/share/services/mallocSiteTable.hpp	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/hotspot/share/services/mallocSiteTable.hpp	Wed Feb 13 13:22:15 2019 -0500
@@ -37,15 +37,12 @@
 // MallocSite represents a code path that eventually calls
 // os::malloc() to allocate memory
 class MallocSite : public AllocationSite<MemoryCounter> {
- private:
-  MEMFLAGS _flags;
-
  public:
   MallocSite() :
-    AllocationSite<MemoryCounter>(NativeCallStack::empty_stack()), _flags(mtNone) {}
+    AllocationSite<MemoryCounter>(NativeCallStack::empty_stack(), mtNone) {}
 
   MallocSite(const NativeCallStack& stack, MEMFLAGS flags) :
-    AllocationSite<MemoryCounter>(stack), _flags(flags) {}
+    AllocationSite<MemoryCounter>(stack, flags) {}
 
 
   void allocate(size_t size)      { data()->allocate(size);   }
@@ -55,7 +52,6 @@
   size_t size()  const { return peek()->size(); }
   // The number of calls were made
   size_t count() const { return peek()->count(); }
-  MEMFLAGS flags() const  { return (MEMFLAGS)_flags; }
 };
 
 // Malloc site hashtable entry
--- a/src/hotspot/share/services/memBaseline.cpp	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/hotspot/share/services/memBaseline.cpp	Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2019, 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
@@ -64,7 +64,7 @@
 int compare_malloc_site_and_type(const MallocSite& s1, const MallocSite& s2) {
   int res = compare_malloc_site(s1, s2);
   if (res == 0) {
-    res = (int)(s1.flags() - s2.flags());
+    res = (int)(s1.flag() - s2.flag());
   }
 
   return res;
@@ -212,7 +212,7 @@
   const ReservedMemoryRegion* rgn;
   VirtualMemoryAllocationSite* site;
   while ((rgn = itr.next()) != NULL) {
-    VirtualMemoryAllocationSite tmp(*rgn->call_stack());
+    VirtualMemoryAllocationSite tmp(*rgn->call_stack(), rgn->flag());
     site = allocation_sites.find(tmp);
     if (site == NULL) {
       LinkedListNode<VirtualMemoryAllocationSite>* node =
--- a/src/hotspot/share/services/memReporter.cpp	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/hotspot/share/services/memReporter.cpp	Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2019, 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
@@ -240,7 +240,7 @@
     const NativeCallStack* stack = malloc_site->call_stack();
     stack->print_on(out);
     out->print("%29s", " ");
-    MEMFLAGS flag = malloc_site->flags();
+    MEMFLAGS flag = malloc_site->flag();
     assert((flag >= 0 && flag < (int)mt_number_of_types) && flag != mtNone,
       "Must have a valid memory type");
     print_malloc(malloc_site->size(), malloc_site->count(),flag);
@@ -266,6 +266,10 @@
     stack->print_on(out);
     out->print("%28s (", " ");
     print_total(virtual_memory_site->reserved(), virtual_memory_site->committed());
+    MEMFLAGS flag = virtual_memory_site->flag();
+    if (flag != mtNone) {
+      out->print(" Type=%s", NMTUtil::flag_to_name(flag));
+    }
     out->print_cr(")\n");
   }
 }
@@ -690,19 +694,25 @@
 
 void MemDetailDiffReporter::new_malloc_site(const MallocSite* malloc_site) const {
   diff_malloc_site(malloc_site->call_stack(), malloc_site->size(), malloc_site->count(),
-    0, 0, malloc_site->flags());
+    0, 0, malloc_site->flag());
 }
 
 void MemDetailDiffReporter::old_malloc_site(const MallocSite* malloc_site) const {
   diff_malloc_site(malloc_site->call_stack(), 0, 0, malloc_site->size(),
-    malloc_site->count(), malloc_site->flags());
+    malloc_site->count(), malloc_site->flag());
 }
 
 void MemDetailDiffReporter::diff_malloc_site(const MallocSite* early,
   const MallocSite* current)  const {
-  assert(early->flags() == current->flags(), "Must be the same memory type");
-  diff_malloc_site(current->call_stack(), current->size(), current->count(),
-    early->size(), early->count(), early->flags());
+  if (early->flag() != current->flag()) {
+    // If malloc site type changed, treat it as deallocation of old type and
+    // allocation of new type.
+    old_malloc_site(early);
+    new_malloc_site(current);
+  } else {
+    diff_malloc_site(current->call_stack(), current->size(), current->count(),
+      early->size(), early->count(), early->flag());
+  }
 }
 
 void MemDetailDiffReporter::diff_malloc_site(const NativeCallStack* stack, size_t current_size,
@@ -725,21 +735,22 @@
 
 
 void MemDetailDiffReporter::new_virtual_memory_site(const VirtualMemoryAllocationSite* site) const {
-  diff_virtual_memory_site(site->call_stack(), site->reserved(), site->committed(), 0, 0);
+  diff_virtual_memory_site(site->call_stack(), site->reserved(), site->committed(), 0, 0, site->flag());
 }
 
 void MemDetailDiffReporter::old_virtual_memory_site(const VirtualMemoryAllocationSite* site) const {
-  diff_virtual_memory_site(site->call_stack(), 0, 0, site->reserved(), site->committed());
+  diff_virtual_memory_site(site->call_stack(), 0, 0, site->reserved(), site->committed(), site->flag());
 }
 
 void MemDetailDiffReporter::diff_virtual_memory_site(const VirtualMemoryAllocationSite* early,
   const VirtualMemoryAllocationSite* current) const {
+  assert(early->flag() == current->flag(), "Should be the same");
   diff_virtual_memory_site(current->call_stack(), current->reserved(), current->committed(),
-    early->reserved(), early->committed());
+    early->reserved(), early->committed(), current->flag());
 }
 
 void MemDetailDiffReporter::diff_virtual_memory_site(const NativeCallStack* stack, size_t current_reserved,
-  size_t current_committed, size_t early_reserved, size_t early_committed) const  {
+  size_t current_committed, size_t early_reserved, size_t early_committed, MEMFLAGS flag) const  {
   outputStream* out = output();
 
   // no change
@@ -753,5 +764,9 @@
   print_virtual_memory_diff(current_reserved, current_committed,
     early_reserved, early_committed);
 
+  if (flag != mtNone) {
+    out->print(" Type=%s", NMTUtil::flag_to_name(flag));
+  }
+
   out->print_cr(")\n");
  }
--- a/src/hotspot/share/services/memReporter.hpp	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/hotspot/share/services/memReporter.hpp	Wed Feb 13 13:22:15 2019 -0500
@@ -230,7 +230,7 @@
   void diff_malloc_site(const NativeCallStack* stack, size_t current_size,
     size_t currrent_count, size_t early_size, size_t early_count, MEMFLAGS flags) const;
   void diff_virtual_memory_site(const NativeCallStack* stack, size_t current_reserved,
-    size_t current_committed, size_t early_reserved, size_t early_committed) const;
+    size_t current_committed, size_t early_reserved, size_t early_committed, MEMFLAGS flag) const;
 };
 
 #endif // INCLUDE_NMT
--- a/src/hotspot/share/services/virtualMemoryTracker.hpp	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/hotspot/share/services/virtualMemoryTracker.hpp	Wed Feb 13 13:22:15 2019 -0500
@@ -70,8 +70,8 @@
 // Virtual memory allocation site, keeps track where the virtual memory is reserved.
 class VirtualMemoryAllocationSite : public AllocationSite<VirtualMemory> {
  public:
-  VirtualMemoryAllocationSite(const NativeCallStack& stack) :
-    AllocationSite<VirtualMemory>(stack) { }
+  VirtualMemoryAllocationSite(const NativeCallStack& stack, MEMFLAGS flag) :
+    AllocationSite<VirtualMemory>(stack, flag) { }
 
   inline void reserve_memory(size_t sz)  { data()->reserve_memory(sz);  }
   inline void commit_memory (size_t sz)  { data()->commit_memory(sz);   }
--- a/src/hotspot/share/utilities/debug.cpp	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/hotspot/share/utilities/debug.cpp	Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2019, 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
@@ -34,6 +34,7 @@
 #include "gc/shared/collectedHeap.hpp"
 #include "interpreter/bytecodeHistogram.hpp"
 #include "interpreter/interpreter.hpp"
+#include "memory/allocation.hpp"
 #include "memory/resourceArea.hpp"
 #include "memory/universe.hpp"
 #include "oops/oop.inline.hpp"
@@ -51,6 +52,7 @@
 #include "runtime/vframe.hpp"
 #include "runtime/vm_version.hpp"
 #include "services/heapDumper.hpp"
+#include "services/memTracker.hpp"
 #include "utilities/defaultStream.hpp"
 #include "utilities/events.hpp"
 #include "utilities/formatBuffer.hpp"
@@ -721,6 +723,7 @@
 void initialize_assert_poison() {
   char* page = os::reserve_memory(os::vm_page_size());
   if (page) {
+    MemTracker::record_virtual_memory_type(page, mtInternal);
     if (os::commit_memory(page, os::vm_page_size(), false) &&
         os::protect_memory(page, os::vm_page_size(), os::MEM_PROT_NONE)) {
       g_assert_poison = page;
--- a/src/hotspot/share/utilities/globalDefinitions_xlc.hpp	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/hotspot/share/utilities/globalDefinitions_xlc.hpp	Wed Feb 13 13:22:15 2019 -0500
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 1998, 2019, Oracle and/or its affiliates. All rights reserved.
- * Copyright (c) 2012, 2017 SAP SE. All rights reserved.
+ * Copyright (c) 2012, 2019 SAP SE. 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
@@ -51,51 +51,43 @@
 
 #include <stdint.h>
 
+// __IBMCPP__ is not defined any more with xlclang++
+#ifdef __IBMCPP__
+#if __IBMCPP__ < 1200
+#error "xlc < 12 not supported"
+#endif
+#endif
+
+#ifndef _AIX
+#error "missing AIX-specific definition _AIX"
+#endif
+
 // Use XLC compiler builtins instead of inline assembler
 #define USE_XLC_BUILTINS
+
 #ifdef USE_XLC_BUILTINS
 #include <builtins.h>
-  #if __IBMCPP__ < 1000
-  // the funtion prototype for __dcbtst(void *) is missing in XLC V8.0
-  // I could compile a little test, where I provided the prototype.
-  // The generated code was correct there. This is the prototype:
-  // extern "builtin" void __dcbtst (void *);
-  // For now we don't make use of it when compiling with XLC V8.0
-  #else
-  // __IBMCPP__ >= 1000
-  // XLC V10 provides the prototype for __dcbtst (void *);
-  #define USE_XLC_PREFETCH_WRITE_BUILTIN
-  #endif
+// XLC V10 and higher provide the prototype for __dcbtst (void *);
 #endif // USE_XLC_BUILTINS
 
 // NULL vs NULL_WORD:
-// On Linux NULL is defined as a special type '__null'. Assigning __null to
-// integer variable will cause gcc warning. Use NULL_WORD in places where a
-// pointer is stored as integer value.  On some platforms, sizeof(intptr_t) >
-// sizeof(void*), so here we want something which is integer type, but has the
-// same size as a pointer.
-#ifdef __GNUC__
-  #error XLC and __GNUC__?
-#else
-  #define NULL_WORD  NULL
-#endif
+// Some platform/tool-chain combinations can't assign NULL to an integer
+// type so we define NULL_WORD to use in those contexts. For xlc they are the same.
+#define NULL_WORD  NULL
 
 // AIX also needs a 64 bit NULL to work as a null address pointer.
 // Most system includes on AIX would define it as an int 0 if not already defined with one
 // exception: /usr/include/dirent.h will unconditionally redefine NULL to int 0 again.
 // In this case you need to copy the following defines to a position after #include <dirent.h>
-// (see jmv_aix.h).
-#ifdef AIX
-  #include <dirent.h>
-  #ifdef _LP64
-    #undef NULL
-    #define NULL 0L
-  #else
-    #ifndef NULL
-      #define NULL 0
-    #endif
+#include <dirent.h>
+#ifdef _LP64
+  #undef NULL
+  #define NULL 0L
+#else
+  #ifndef NULL
+    #define NULL 0
   #endif
-#endif // AIX
+#endif
 
 // Compiler-specific primitive types
 // All defs of int (uint16_6 etc) are defined in AIX' /usr/include/stdint.h
@@ -108,21 +100,14 @@
 typedef uint64_t julong;
 
 // checking for nanness
-#ifdef AIX
 inline int g_isnan(float  f) { return isnan(f); }
 inline int g_isnan(double f) { return isnan(f); }
-#else
-#error "missing platform-specific definition here"
-#endif
 
 // Checking for finiteness
-
 inline int g_isfinite(jfloat  f)                 { return finite(f); }
 inline int g_isfinite(jdouble f)                 { return finite(f); }
 
-
 // Wide characters
-
 inline int wcslen(const jchar* x) { return wcslen((const wchar_t*)x); }
 
 
--- a/src/java.base/macosx/classes/apple/security/KeychainStore.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.base/macosx/classes/apple/security/KeychainStore.java	Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2019, 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
@@ -102,6 +102,8 @@
     private static final int iterationCount = 1024;
     private static final int SALT_LEN = 20;
 
+    private static final Debug debug = Debug.getInstance("keystore");
+
     static {
         AccessController.doPrivileged(
             new PrivilegedAction<Void>() {
@@ -773,6 +775,10 @@
 
             entries.clear();
             _scanKeychain();
+            if (debug != null) {
+                debug.println("KeychainStore load entry count: " +
+                        entries.size());
+            }
         }
     }
 
--- a/src/java.base/share/classes/com/sun/crypto/provider/GaloisCounterMode.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.base/share/classes/com/sun/crypto/provider/GaloisCounterMode.java	Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2019, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -61,6 +61,9 @@
     // can only be returned by the doFinal(...) call.
     private static final int MAX_BUF_SIZE = Integer.MAX_VALUE;
 
+    // data size when buffer is divided up to aid in intrinsics
+    private static final int TRIGGERLEN = 65536;  // 64k
+
     // buffer for AAD data; if null, meaning update has been called
     private ByteArrayOutputStream aadBuffer = new ByteArrayOutputStream();
     private int sizeOfAAD = 0;
@@ -380,12 +383,10 @@
     // Utility to process the last block; used by encryptFinal and decryptFinal
     void doLastBlock(byte[] in, int inOfs, int len, byte[] out, int outOfs,
                      boolean isEncrypt) throws IllegalBlockSizeException {
-        // process data in 'in'
-        gctrPAndC.doFinal(in, inOfs, len, out, outOfs);
-        processed += len;
-
         byte[] ct;
         int ctOfs;
+        int ilen = len;  // internal length
+
         if (isEncrypt) {
             ct = out;
             ctOfs = outOfs;
@@ -393,14 +394,38 @@
             ct = in;
             ctOfs = inOfs;
         }
+
+        // Divide up larger data sizes to trigger CTR & GHASH intrinsic quicker
+        if (len > TRIGGERLEN) {
+            int i = 0;
+            int tlen;  // incremental lengths
+            // 96bit CTR x86 intrinsic
+            final int plen = AES_BLOCK_SIZE * 6;
+            // arbitrary formula to aid intrinsic without reaching buffer end
+            final int count = len / 1024;
+
+            while (count > i) {
+                tlen = gctrPAndC.update(in, inOfs, plen, out, outOfs);
+                ghashAllToS.update(ct, ctOfs, tlen);
+                inOfs += tlen;
+                outOfs += tlen;
+                ctOfs += tlen;
+                i++;
+            }
+            ilen -= count * plen;
+            processed += count * plen;
+        }
+
+        gctrPAndC.doFinal(in, inOfs, ilen, out, outOfs);
+        processed += ilen;
+
         int lastLen = len  % AES_BLOCK_SIZE;
         if (lastLen != 0) {
             ghashAllToS.update(ct, ctOfs, len - lastLen);
-            byte[] padded =
-                expandToOneBlock(ct, (ctOfs + len - lastLen), lastLen);
-            ghashAllToS.update(padded);
+            ghashAllToS.update(
+                    expandToOneBlock(ct, (ctOfs + len - lastLen), lastLen));
         } else {
-            ghashAllToS.update(ct, ctOfs, len);
+            ghashAllToS.update(ct, ctOfs, ilen);
         }
     }
 
@@ -562,15 +587,19 @@
         System.arraycopy(in, inOfs + len - tagLenBytes, tag, 0, tagLenBytes);
         len -= tagLenBytes;
 
-        if (len > 0) {
-            ibuffer.write(in, inOfs, len);
-        }
+        // If decryption is in-place or there is buffered "ibuffer" data, copy
+        // the "in" byte array into the ibuffer before proceeding.
+        if (in == out || ibuffer.size() > 0) {
+            if (len > 0) {
+                ibuffer.write(in, inOfs, len);
+            }
 
-        // refresh 'in' to all buffered-up bytes
-        in = ibuffer.toByteArray();
-        inOfs = 0;
-        len = in.length;
-        ibuffer.reset();
+            // refresh 'in' to all buffered-up bytes
+            in = ibuffer.toByteArray();
+            inOfs = 0;
+            len = in.length;
+            ibuffer.reset();
+        }
 
         if (len > 0) {
             doLastBlock(in, inOfs, len, out, outOfs, false);
--- a/src/java.base/share/classes/com/sun/crypto/provider/JceKeyStore.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.base/share/classes/com/sun/crypto/provider/JceKeyStore.java	Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2019, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -25,6 +25,8 @@
 
 package com.sun.crypto.provider;
 
+import sun.security.util.Debug;
+
 import java.io.*;
 import java.util.*;
 import java.security.AccessController;
@@ -59,6 +61,7 @@
 
 public final class JceKeyStore extends KeyStoreSpi {
 
+    private static final Debug debug = Debug.getInstance("keystore");
     private static final int JCEKS_MAGIC = 0xcececece;
     private static final int JKS_MAGIC = 0xfeedfeed;
     private static final int VERSION_1 = 0x01;
@@ -680,6 +683,7 @@
             Hashtable<String, CertificateFactory> cfs = null;
             ByteArrayInputStream bais = null;
             byte[] encoded = null;
+            int trustedKeyCount = 0, privateKeyCount = 0, secretKeyCount = 0;
 
             if (stream == null)
                 return;
@@ -726,7 +730,7 @@
                     tag = dis.readInt();
 
                     if (tag == 1) { // private-key entry
-
+                        privateKeyCount++;
                         PrivateKeyEntry entry = new PrivateKeyEntry();
 
                         // read the alias
@@ -786,7 +790,7 @@
                         entries.put(alias, entry);
 
                     } else if (tag == 2) { // trusted certificate entry
-
+                        trustedKeyCount++;
                         TrustedCertEntry entry = new TrustedCertEntry();
 
                         // read the alias
@@ -825,7 +829,7 @@
                         entries.put(alias, entry);
 
                     } else if (tag == 3) { // secret-key entry
-
+                        secretKeyCount++;
                         SecretKeyEntry entry = new SecretKeyEntry();
 
                         // read the alias
@@ -858,10 +862,18 @@
                         entries.put(alias, entry);
 
                     } else {
-                        throw new IOException("Unrecognized keystore entry");
+                        throw new IOException("Unrecognized keystore entry: " +
+                                tag);
                     }
                 }
 
+                if (debug != null) {
+                    debug.println("JceKeyStore load: private key count: " +
+                        privateKeyCount + ". trusted key count: " +
+                        trustedKeyCount + ". secret key count: " +
+                        secretKeyCount);
+                }
+
                 /*
                  * If a password has been provided, we check the keyed digest
                  * at the end. If this check fails, the store has been tampered
--- a/src/java.base/share/classes/java/util/HashMap.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.base/share/classes/java/util/HashMap.java	Wed Feb 13 13:22:15 2019 -0500
@@ -501,9 +501,14 @@
                          (int)ft : MAXIMUM_CAPACITY);
                 if (t > threshold)
                     threshold = tableSizeFor(t);
+            } else {
+                // Because of linked-list bucket constraints, we cannot
+                // expand all at once, but can reduce total resize
+                // effort by repeated doubling now vs later
+                while (s > threshold && table.length < MAXIMUM_CAPACITY)
+                    resize();
             }
-            else if (s > threshold)
-                resize();
+
             for (Map.Entry<? extends K, ? extends V> e : m.entrySet()) {
                 K key = e.getKey();
                 V value = e.getValue();
--- a/src/java.base/share/classes/jdk/internal/loader/BuiltinClassLoader.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.base/share/classes/jdk/internal/loader/BuiltinClassLoader.java	Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2019, 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
@@ -638,7 +638,7 @@
      * binary name. This method returns {@code null} when the class is not
      * found.
      */
-    protected Class<?> loadClassOrNull(String cn) {
+    protected final Class<?> loadClassOrNull(String cn) {
         return loadClassOrNull(cn, false);
     }
 
--- a/src/java.base/share/classes/jdk/internal/loader/ClassLoaders.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.base/share/classes/jdk/internal/loader/ClassLoaders.java	Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2019, 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
@@ -114,7 +114,7 @@
         }
 
         @Override
-        protected Class<?> loadClassOrNull(String cn) {
+        protected Class<?> loadClassOrNull(String cn, boolean resolve) {
             return JLA.findBootstrapClassOrNull(this, cn);
         }
     };
--- a/src/java.base/share/classes/sun/security/pkcs12/PKCS12KeyStore.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.base/share/classes/sun/security/pkcs12/PKCS12KeyStore.java	Wed Feb 13 13:22:15 2019 -0500
@@ -2231,18 +2231,9 @@
         }
 
         if (debug != null) {
-            if (privateKeyCount > 0) {
-                debug.println("Loaded " + privateKeyCount +
-                    " protected private key(s)");
-            }
-            if (secretKeyCount > 0) {
-                debug.println("Loaded " + secretKeyCount +
-                    " protected secret key(s)");
-            }
-            if (certificateCount > 0) {
-                debug.println("Loaded " + certificateCount +
-                    " certificate(s)");
-            }
+            debug.println("PKCS12KeyStore load: private key count: " +
+                    privateKeyCount + ". secret key count: " + secretKeyCount +
+                    ". certificate count: " + certificateCount);
         }
 
         certEntries.clear();
--- a/src/java.base/share/classes/sun/security/provider/JavaKeyStore.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.base/share/classes/sun/security/provider/JavaKeyStore.java	Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2019, 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
@@ -34,6 +34,7 @@
 
 import sun.security.pkcs.EncryptedPrivateKeyInfo;
 import sun.security.pkcs12.PKCS12KeyStore;
+import sun.security.util.Debug;
 import sun.security.util.IOUtils;
 import sun.security.util.KeyStoreDelegator;
 
@@ -74,6 +75,7 @@
         }
     }
 
+    private static final Debug debug = Debug.getInstance("keystore");
     private static final int MAGIC = 0xfeedfeed;
     private static final int VERSION_1 = 0x01;
     private static final int VERSION_2 = 0x02;
@@ -643,6 +645,7 @@
             Hashtable<String, CertificateFactory> cfs = null;
             ByteArrayInputStream bais = null;
             byte[] encoded = null;
+            int trustedKeyCount = 0, privateKeyCount = 0;
 
             if (stream == null)
                 return;
@@ -681,7 +684,7 @@
                 tag = dis.readInt();
 
                 if (tag == 1) { // private key entry
-
+                    privateKeyCount++;
                     KeyEntry entry = new KeyEntry();
 
                     // Read the alias
@@ -730,7 +733,7 @@
                     entries.put(alias, entry);
 
                 } else if (tag == 2) { // trusted certificate entry
-
+                    trustedKeyCount++;
                     TrustedCertEntry entry = new TrustedCertEntry();
 
                     // Read the alias
@@ -765,10 +768,16 @@
                     entries.put(alias, entry);
 
                 } else {
-                    throw new IOException("Unrecognized keystore entry");
+                    throw new IOException("Unrecognized keystore entry: " +
+                            tag);
                 }
             }
 
+            if (debug != null) {
+                debug.println("JavaKeyStore load: private key count: " +
+                    privateKeyCount + ". trusted key count: " + trustedKeyCount);
+            }
+
             /*
              * If a password has been provided, we check the keyed digest
              * at the end. If this check fails, the store has been tampered
--- a/src/java.base/share/classes/sun/security/ssl/ClientHello.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.base/share/classes/sun/security/ssl/ClientHello.java	Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2019, 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
@@ -519,7 +519,7 @@
             if (session != null && identityAlg != null) {
                 String sessionIdentityAlg =
                     session.getIdentificationProtocol();
-                if (!Objects.equals(identityAlg, sessionIdentityAlg)) {
+                if (!identityAlg.equalsIgnoreCase(sessionIdentityAlg)) {
                     if (SSLLogger.isOn &&
                     SSLLogger.isOn("ssl,handshake,verbose")) {
                         SSLLogger.finest("Can't resume, endpoint id" +
@@ -1036,7 +1036,7 @@
                 if (resumingSession && identityAlg != null) {
                     String sessionIdentityAlg =
                         previous.getIdentificationProtocol();
-                    if (!Objects.equals(identityAlg, sessionIdentityAlg)) {
+                    if (!identityAlg.equalsIgnoreCase(sessionIdentityAlg)) {
                         if (SSLLogger.isOn &&
                         SSLLogger.isOn("ssl,handshake,verbose")) {
                             SSLLogger.finest("Can't resume, endpoint id" +
--- a/src/java.base/share/classes/sun/security/ssl/PreSharedKeyExtension.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.base/share/classes/sun/security/ssl/PreSharedKeyExtension.java	Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2019, 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
@@ -458,7 +458,7 @@
         String identityAlg = shc.sslConfig.identificationProtocol;
         if (result && identityAlg != null) {
             String sessionIdentityAlg = s.getIdentificationProtocol();
-            if (!Objects.equals(identityAlg, sessionIdentityAlg)) {
+            if (!identityAlg.equalsIgnoreCase(sessionIdentityAlg)) {
                 if (SSLLogger.isOn &&
                     SSLLogger.isOn("ssl,handshake,verbose")) {
 
--- a/src/java.base/unix/classes/java/lang/ProcessImpl.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.base/unix/classes/java/lang/ProcessImpl.java	Wed Feb 13 13:22:15 2019 -0500
@@ -89,7 +89,7 @@
 
     private static enum Platform {
 
-        LINUX(LaunchMechanism.VFORK, LaunchMechanism.POSIX_SPAWN, LaunchMechanism.FORK),
+        LINUX(LaunchMechanism.POSIX_SPAWN, LaunchMechanism.VFORK, LaunchMechanism.FORK),
 
         BSD(LaunchMechanism.POSIX_SPAWN, LaunchMechanism.FORK),
 
@@ -106,27 +106,6 @@
                 EnumSet.copyOf(Arrays.asList(launchMechanisms));
         }
 
-        @SuppressWarnings("fallthrough")
-        private String helperPath(String javahome, String osArch) {
-            switch (this) {
-                case SOLARIS:
-                    // fall through...
-                case LINUX:
-                case AIX:
-                case BSD:
-                    return javahome + "/lib/jspawnhelper";
-
-                default:
-                    throw new AssertionError("Unsupported platform: " + this);
-            }
-        }
-
-        String helperPath() {
-            Properties props = GetPropertyAction.privilegedGetProperties();
-            return helperPath(StaticProperty.javaHome(),
-                              props.getProperty("os.arch"));
-        }
-
         LaunchMechanism launchMechanism() {
             return AccessController.doPrivileged(
                 (PrivilegedAction<LaunchMechanism>) () -> {
@@ -169,7 +148,7 @@
 
     private static final Platform platform = Platform.get();
     private static final LaunchMechanism launchMechanism = platform.launchMechanism();
-    private static final byte[] helperpath = toCString(platform.helperPath());
+    private static final byte[] helperpath = toCString(StaticProperty.javaHome() + "/lib/jspawnhelper");
 
     private static byte[] toCString(String s) {
         if (s == null)
--- a/src/java.base/unix/native/libjava/ProcessImpl_md.c	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.base/unix/native/libjava/ProcessImpl_md.c	Wed Feb 13 13:22:15 2019 -0500
@@ -49,56 +49,139 @@
 #include "childproc.h"
 
 /*
- * There are 4 possible strategies we might use to "fork":
+ *
+ * When starting a child on Unix, we need to do three things:
+ * - fork off
+ * - in the child process, do some pre-exec work: duping/closing file
+ *   descriptors to set up stdio-redirection, setting environment variables,
+ *   changing paths...
+ * - then exec(2) the target binary
+ *
+ * There are three ways to fork off:
+ *
+ * A) fork(2). Portable and safe (no side effects) but may fail with ENOMEM on
+ *    all Unices when invoked from a VM with a high memory footprint. On Unices
+ *    with strict no-overcommit policy this problem is most visible.
  *
- * - fork(2).  Very portable and reliable but subject to
- *   failure due to overcommit (see the documentation on
- *   /proc/sys/vm/overcommit_memory in Linux proc(5)).
- *   This is the ancient problem of spurious failure whenever a large
- *   process starts a small subprocess.
+ *    This is because forking the VM will first create a child process with
+ *    theoretically the same memory footprint as the parent - even if you plan
+ *    to follow up with exec'ing a tiny binary. In reality techniques like
+ *    copy-on-write etc mitigate the problem somewhat but we still run the risk
+ *    of hitting system limits.
+ *
+ *    For a Linux centric description of this problem, see the documentation on
+ *    /proc/sys/vm/overcommit_memory in Linux proc(5).
+ *
+ * B) vfork(2): Portable and fast but very unsafe. It bypasses the memory
+ *    problems related to fork(2) by starting the child in the memory image of
+ *    the parent. Things that can go wrong include:
+ *    - Programming errors in the child process before the exec(2) call may
+ *      trash memory in the parent process, most commonly the stack of the
+ *      thread invoking vfork.
+ *    - Signals received by the child before the exec(2) call may be at best
+ *      misdirected to the parent, at worst immediately kill child and parent.
  *
- * - vfork().  Using this is scary because all relevant man pages
- *   contain dire warnings, e.g. Linux vfork(2).  But at least it's
- *   documented in the glibc docs and is standardized by XPG4.
- *   http://www.opengroup.org/onlinepubs/000095399/functions/vfork.html
- *   On Linux, one might think that vfork() would be implemented using
- *   the clone system call with flag CLONE_VFORK, but in fact vfork is
- *   a separate system call (which is a good sign, suggesting that
- *   vfork will continue to be supported at least on Linux).
- *   Another good sign is that glibc implements posix_spawn using
- *   vfork whenever possible.  Note that we cannot use posix_spawn
- *   ourselves because there's no reliable way to close all inherited
- *   file descriptors.
+ *    This is mitigated by very strict rules about what one is allowed to do in
+ *    the child process between vfork(2) and exec(2), which is basically nothing.
+ *    However, we always broke this rule by doing the pre-exec work between
+ *    vfork(2) and exec(2).
+ *
+ *    Also note that vfork(2) has been deprecated by the OpenGroup, presumably
+ *    because of its many dangers.
+ *
+ * C) clone(2): This is a Linux specific call which gives the caller fine
+ *    grained control about how exactly the process fork is executed. It is
+ *    powerful, but Linux-specific.
+ *
+ * Aside from these three possibilities there is a forth option:  posix_spawn(3).
+ * Where fork/vfork/clone all fork off the process and leave pre-exec work and
+ * calling exec(2) to the user, posix_spawn(3) offers the user fork+exec-like
+ * functionality in one package, similar to CreateProcess() on Windows.
+ *
+ * It is not a system call in itself, but usually a wrapper implemented within
+ * the libc in terms of one of (fork|vfork|clone)+exec - so whether or not it
+ * has advantages over calling the naked (fork|vfork|clone) functions depends
+ * on how posix_spawn(3) is implemented.
+ *
+ * Note that when using posix_spawn(3), we exec twice: first a tiny binary called
+ * the jspawnhelper, then in the jspawnhelper we do the pre-exec work and exec a
+ * second time, this time the target binary (similar to the "exec-twice-technique"
+ * described in http://mail.openjdk.java.net/pipermail/core-libs-dev/2018-September/055333.html).
+ *
+ * This is a JDK-specific implementation detail which just happens to be
+ * implemented for jdk.lang.Process.launchMechanism=POSIX_SPAWN.
+ *
+ * --- Linux-specific ---
  *
- * - clone() with flags CLONE_VM but not CLONE_THREAD.  clone() is
- *   Linux-specific, but this ought to work - at least the glibc
- *   sources contain code to handle different combinations of CLONE_VM
- *   and CLONE_THREAD.  However, when this was implemented, it
- *   appeared to fail on 32-bit i386 (but not 64-bit x86_64) Linux with
- *   the simple program
- *     Runtime.getRuntime().exec("/bin/true").waitFor();
- *   with:
- *     #  Internal Error (os_linux_x86.cpp:683), pid=19940, tid=2934639536
- *     #  Error: pthread_getattr_np failed with errno = 3 (ESRCH)
- *   We believe this is a glibc bug, reported here:
- *     http://sources.redhat.com/bugzilla/show_bug.cgi?id=10311
- *   but the glibc maintainers closed it as WONTFIX.
+ * How does glibc implement posix_spawn?
+ * (see: sysdeps/posix/spawni.c for glibc < 2.24,
+ *       sysdeps/unix/sysv/linux/spawni.c for glibc >= 2.24):
+ *
+ * 1) Before glibc 2.4 (released 2006), posix_spawn(3) used just fork(2)/exec(2).
+ *    This would be bad for the JDK since we would risk the known memory issues with
+ *    fork(2). But since this only affects glibc variants which have long been
+ *    phased out by modern distributions, this is irrelevant.
+ *
+ * 2) Between glibc 2.4 and glibc 2.23, posix_spawn uses either fork(2) or
+ *    vfork(2) depending on how exactly the user called posix_spawn(3):
+ *
+ * <quote>
+ *       The child process is created using vfork(2) instead of fork(2) when
+ *       either of the following is true:
+ *
+ *       * the spawn-flags element of the attributes object pointed to by
+ *          attrp contains the GNU-specific flag POSIX_SPAWN_USEVFORK; or
+ *
+ *       * file_actions is NULL and the spawn-flags element of the attributes
+ *          object pointed to by attrp does not contain
+ *          POSIX_SPAWN_SETSIGMASK, POSIX_SPAWN_SETSIGDEF,
+ *          POSIX_SPAWN_SETSCHEDPARAM, POSIX_SPAWN_SETSCHEDULER,
+ *          POSIX_SPAWN_SETPGROUP, or POSIX_SPAWN_RESETIDS.
+ * </quote>
+ *
+ * Due to the way the JDK calls posix_spawn(3), it would therefore call vfork(2).
+ * So we would avoid the fork(2) memory problems. However, there still remains the
+ * risk associated with vfork(2). But it is smaller than were we to call vfork(2)
+ * directly since we use the jspawnhelper, moving all pre-exec work off to after
+ * the first exec, thereby reducing the vulnerable time window.
+ *
+ * 3) Since glibc >= 2.24, glibc uses clone+exec:
  *
- * - posix_spawn(). While posix_spawn() is a fairly elaborate and
- *   complicated system call, it can't quite do everything that the old
- *   fork()/exec() combination can do, so the only feasible way to do
- *   this, is to use posix_spawn to launch a new helper executable
- *   "jprochelper", which in turn execs the target (after cleaning
- *   up file-descriptors etc.) The end result is the same as before,
- *   a child process linked to the parent in the same way, but it
- *   avoids the problem of duplicating the parent (VM) process
- *   address space temporarily, before launching the target command.
+ *    new_pid = CLONE (__spawni_child, STACK (stack, stack_size), stack_size,
+ *                     CLONE_VM | CLONE_VFORK | SIGCHLD, &args);
+ *
+ * This is even better than (2):
+ *
+ * CLONE_VM means we run in the parent's memory image, as with (2)
+ * CLONE_VFORK means parent waits until we exec, as with (2)
+ *
+ * However, error possibilities are further reduced since:
+ * - posix_spawn(3) passes a separate stack for the child to run on, eliminating
+ *   the danger of trashing the forking thread's stack in the parent process.
+ * - posix_spawn(3) takes care to temporarily block all incoming signals to the
+ *   child process until the first exec(2) has been called,
  *
- * Based on the above analysis, we are currently using vfork() on
- * Linux and posix_spawn() on other Unix systems.
+ * TL;DR
+ * Calling posix_spawn(3) for glibc
+ * (2) < 2.24 is not perfect but still better than using plain vfork(2), since
+ *     the chance of an error happening is greatly reduced
+ * (3) >= 2.24 is the best option - portable, fast and as safe as possible.
+ *
+ * ---
+ *
+ * How does muslc implement posix_spawn?
+ *
+ * They always did use the clone (.. CLONE_VM | CLONE_VFORK ...)
+ * technique. So we are safe to use posix_spawn() here regardless of muslc
+ * version.
+ *
+ * </Linux-specific>
+ *
+ *
+ * Based on the above analysis, we are currently defaulting to posix_spawn()
+ * on all Unices including Linux.
  */
 
-
 static void
 setSIGCHLDHandler(JNIEnv *env)
 {
--- a/src/java.desktop/macosx/classes/sun/awt/CGraphicsConfig.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.desktop/macosx/classes/sun/awt/CGraphicsConfig.java	Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2019, 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.awt.Rectangle;
 import java.awt.Transparency;
 import java.awt.geom.AffineTransform;
-import java.awt.image.BufferedImage;
 import java.awt.image.ColorModel;
 
 import sun.java2d.SurfaceData;
@@ -48,11 +47,6 @@
     }
 
     @Override
-    public BufferedImage createCompatibleImage(int width, int height) {
-        throw new UnsupportedOperationException("not implemented");
-    }
-
-    @Override
     public final Rectangle getBounds() {
         return device.getBounds();
     }
@@ -66,11 +60,6 @@
     }
 
     @Override
-    public ColorModel getColorModel(int transparency) {
-        throw new UnsupportedOperationException("not implemented");
-    }
-
-    @Override
     public AffineTransform getDefaultTransform() {
         double scaleFactor = device.getScaleFactor();
         return AffineTransform.getScaleInstance(scaleFactor, scaleFactor);
--- a/src/java.desktop/macosx/classes/sun/awt/CGraphicsDevice.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.desktop/macosx/classes/sun/awt/CGraphicsDevice.java	Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2019, 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
@@ -51,11 +51,7 @@
     private volatile Rectangle bounds;
     private volatile int scale;
 
-    // Array of all GraphicsConfig instances for this device
-    private final GraphicsConfiguration[] configs;
-
-    // Default config (temporarily hard coded)
-    private final int DEFAULT_CONFIG = 0;
+    private final GraphicsConfiguration config;
 
     private static AWTPermission fullScreenExclusivePermission;
 
@@ -64,9 +60,7 @@
 
     public CGraphicsDevice(final int displayID) {
         this.displayID = displayID;
-        configs = new GraphicsConfiguration[] {
-            CGLGraphicsConfig.getConfig(this, displayID, 0)
-        };
+        config = CGLGraphicsConfig.getConfig(this, displayID, 0);
     }
 
     /**
@@ -74,7 +68,7 @@
      */
     @Override
     public GraphicsConfiguration[] getConfigurations() {
-        return configs.clone();
+        return new GraphicsConfiguration[]{config};
     }
 
     /**
@@ -82,7 +76,7 @@
      */
     @Override
     public GraphicsConfiguration getDefaultConfiguration() {
-        return configs[DEFAULT_CONFIG];
+        return config;
     }
 
     /**
--- a/src/java.desktop/macosx/classes/sun/java2d/opengl/CGLGraphicsConfig.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.desktop/macosx/classes/sun/java2d/opengl/CGLGraphicsConfig.java	Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2019, 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
@@ -185,11 +185,6 @@
         return pConfigInfo;
     }
 
-    /**
-     * {@inheritDoc}
-     *
-     * @see sun.java2d.pipe.hw.BufferedContextProvider#getContext
-     */
     @Override
     public OGLContext getContext() {
         return context;
@@ -395,11 +390,6 @@
         return vi;
     }
 
-    /**
-     * {@inheritDoc}
-     *
-     * @see sun.java2d.pipe.hw.AccelGraphicsConfig#getContextCapabilities
-     */
     @Override
     public ContextCapabilities getContextCapabilities() {
         return oglCaps;
--- a/src/java.desktop/macosx/classes/sun/lwawt/macosx/CPrinterDevice.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.desktop/macosx/classes/sun/lwawt/macosx/CPrinterDevice.java	Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2019, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -25,13 +25,15 @@
 
 package sun.lwawt.macosx;
 
-import java.awt.*;
+import java.awt.GraphicsConfiguration;
+import java.awt.GraphicsDevice;
+
+public final class CPrinterDevice extends GraphicsDevice {
 
-public class CPrinterDevice extends GraphicsDevice {
-    GraphicsConfiguration gc;
+    private final GraphicsConfiguration config;
 
-    public CPrinterDevice(CPrinterGraphicsConfig gc) {
-        this.gc = gc;
+    public CPrinterDevice(final CPrinterGraphicsConfig config) {
+        this.config = config;
     }
 
     /**
@@ -42,6 +44,7 @@
      * @see #TYPE_PRINTER
      * @see #TYPE_IMAGE_BUFFER
      */
+    @Override
     public int getType() {
         return GraphicsDevice.TYPE_PRINTER;
     }
@@ -52,6 +55,7 @@
      * @return a {@code String} that is the identification
      * of this {@code GraphicsDevice}.
      */
+    @Override
     public String getIDstring() {
         return ("Printer");
     }
@@ -63,8 +67,9 @@
      * objects that are associated with this
      * {@code GraphicsDevice}.
      */
+    @Override
     public GraphicsConfiguration[] getConfigurations() {
-        return new GraphicsConfiguration[] { gc };
+        return new GraphicsConfiguration[]{config};
     }
 
     /**
@@ -73,7 +78,8 @@
      * @return the default {@code GraphicsConfiguration}
      * of this {@code GraphicsDevice}.
      */
+    @Override
     public GraphicsConfiguration getDefaultConfiguration() {
-        return gc;
+        return config;
     }
 }
--- a/src/java.desktop/macosx/classes/sun/lwawt/macosx/CPrinterGraphicsConfig.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.desktop/macosx/classes/sun/lwawt/macosx/CPrinterGraphicsConfig.java	Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2019, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -25,21 +25,29 @@
 
 package sun.lwawt.macosx;
 
-import java.awt.*;
-import java.awt.geom.*;
-import java.awt.image.*;
-import java.awt.print.*;
+import java.awt.Component;
+import java.awt.Graphics2D;
+import java.awt.GraphicsConfiguration;
+import java.awt.GraphicsDevice;
+import java.awt.Rectangle;
+import java.awt.Transparency;
+import java.awt.geom.AffineTransform;
+import java.awt.image.BufferedImage;
+import java.awt.image.ColorModel;
+import java.awt.image.VolatileImage;
+import java.awt.print.PageFormat;
 
-public class CPrinterGraphicsConfig extends GraphicsConfiguration {
+public final class CPrinterGraphicsConfig extends GraphicsConfiguration {
+
     public static CPrinterGraphicsConfig getConfig(PageFormat pf) {
         return new CPrinterGraphicsConfig(pf);
     }
 
-    GraphicsDevice gd;
-    PageFormat pf;
+    private final GraphicsDevice device;
+    private final PageFormat pf;
 
     public CPrinterGraphicsConfig(PageFormat pf) {
-        this.gd = new CPrinterDevice(this);
+        this.device = new CPrinterDevice(this);
         this.pf = pf;
     }
 
@@ -53,8 +61,9 @@
      * @return a {@code GraphicsDevice} object that is
      * associated with this {@code GraphicsConfiguration}.
      */
+    @Override
     public GraphicsDevice getDevice() {
-        return gd;
+        return device;
     }
 
     /**
@@ -70,6 +79,7 @@
      * @return a {@code BufferedImage} whose data layout and color
      * model is compatible with this {@code GraphicsConfiguration}.
      */
+    @Override
     public BufferedImage createCompatibleImage(int width, int height) {
         return createCompatibleImage(width, height, Transparency.OPAQUE);
     }
@@ -87,11 +97,13 @@
      * model is compatible with this {@code GraphicsConfiguration}.
      * @see Component#createVolatileImage(int, int)
      */
+    @Override
     public VolatileImage createCompatibleVolatileImage(int width, int height) {
         return createCompatibleVolatileImage(width, height, Transparency.OPAQUE);
     }
 
     // empty implementation (this should not be called)
+    @Override
     public VolatileImage createCompatibleVolatileImage(int width, int height, int transparency) {
         return null;
     }
@@ -114,6 +126,7 @@
      * @see Transparency#BITMASK
      * @see Transparency#TRANSLUCENT
      */
+    @Override
     public BufferedImage createCompatibleImage(int width, int height, int transparency) {
         //+++gdb what to do?
         return null;
@@ -125,6 +138,7 @@
      * @return a {@code ColorModel} object that is associated with
      * this {@code GraphicsConfiguration}.
      */
+    @Override
     public ColorModel getColorModel() {
         return getColorModel(Transparency.OPAQUE);
     }
@@ -138,6 +152,7 @@
      * this {@code GraphicsConfiguration} and supports the
      * specified transparency.
      */
+    @Override
     public ColorModel getColorModel(int transparency) {
         return ColorModel.getRGBdefault();
     }
@@ -161,6 +176,7 @@
      * @return the default {@code AffineTransform} for this
      * {@code GraphicsConfiguration}.
      */
+    @Override
     public AffineTransform getDefaultTransform() {
         return new AffineTransform();
     }
@@ -192,6 +208,7 @@
      * default {@code AffineTransform} so that 72 units in user
      * space is mapped to 1 inch in device space.
      */
+    @Override
     public AffineTransform getNormalizingTransform() {
         return new AffineTransform();
     }
@@ -205,6 +222,7 @@
      * {@code GraphicsConfiguration}.
      * @since 1.3
      */
+    @Override
     public Rectangle getBounds() {
         return new Rectangle(0, 0, (int)pf.getWidth(), (int)pf.getHeight());
     }
--- a/src/java.desktop/macosx/classes/sun/lwawt/macosx/CRobot.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.desktop/macosx/classes/sun/lwawt/macosx/CRobot.java	Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2019, 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,10 +54,6 @@
         initRobot();
     }
 
-    @Override
-    public void dispose() {
-    }
-
     /**
      * Moves mouse pointer to given screen coordinates.
      * @param x X position
--- a/src/java.desktop/share/classes/com/sun/java/swing/plaf/gtk/GTKStyle.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.desktop/share/classes/com/sun/java/swing/plaf/gtk/GTKStyle.java	Wed Feb 13 13:22:15 2019 -0500
@@ -1167,13 +1167,24 @@
         ICONS_MAP = new HashMap<String, GTKStockIcon>();
         ICONS_MAP.put("FileChooser.cancelIcon", new GTKStockIcon("gtk-cancel", 4));
         ICONS_MAP.put("FileChooser.okIcon",     new GTKStockIcon("gtk-ok",     4));
-        ICONS_MAP.put("OptionPane.errorIcon", new GTKStockIcon("gtk-dialog-error", 6));
-        ICONS_MAP.put("OptionPane.informationIcon", new GTKStockIcon("gtk-dialog-info", 6));
-        ICONS_MAP.put("OptionPane.warningIcon", new GTKStockIcon("gtk-dialog-warning", 6));
-        ICONS_MAP.put("OptionPane.questionIcon", new GTKStockIcon("gtk-dialog-question", 6));
         ICONS_MAP.put("OptionPane.yesIcon", new GTKStockIcon("gtk-yes", 4));
         ICONS_MAP.put("OptionPane.noIcon", new GTKStockIcon("gtk-no", 4));
         ICONS_MAP.put("OptionPane.cancelIcon", new GTKStockIcon("gtk-cancel", 4));
         ICONS_MAP.put("OptionPane.okIcon", new GTKStockIcon("gtk-ok", 4));
+
+        //check whether the gtk version is >= 3.10 as the Icon names were
+        //changed from this version
+        UNIXToolkit tk = (UNIXToolkit)Toolkit.getDefaultToolkit();
+        if (tk.checkGtkVersion(3, 10, 0)) {
+            ICONS_MAP.put("OptionPane.errorIcon", new GTKStockIcon("dialog-error", 6));
+            ICONS_MAP.put("OptionPane.informationIcon", new GTKStockIcon("dialog-information", 6));
+            ICONS_MAP.put("OptionPane.warningIcon", new GTKStockIcon("dialog-warning", 6));
+            ICONS_MAP.put("OptionPane.questionIcon", new GTKStockIcon("dialog-question", 6));
+        } else {
+            ICONS_MAP.put("OptionPane.errorIcon", new GTKStockIcon("gtk-dialog-error", 6));
+            ICONS_MAP.put("OptionPane.informationIcon", new GTKStockIcon("gtk-dialog-info", 6));
+            ICONS_MAP.put("OptionPane.warningIcon", new GTKStockIcon("gtk-dialog-warning", 6));
+            ICONS_MAP.put("OptionPane.questionIcon", new GTKStockIcon("gtk-dialog-question", 6));
+        }
     }
 }
--- a/src/java.desktop/share/classes/java/awt/GraphicsConfiguration.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.desktop/share/classes/java/awt/GraphicsConfiguration.java	Wed Feb 13 13:22:15 2019 -0500
@@ -104,8 +104,6 @@
  * implements the interface for that capability.
  *
  */
-
-
 public abstract class GraphicsConfiguration {
 
     private static BufferCapabilities defaultBufferCaps;
--- a/src/java.desktop/share/classes/java/awt/Robot.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.desktop/share/classes/java/awt/Robot.java	Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1999, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2019, 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
@@ -134,8 +134,6 @@
         Toolkit toolkit = Toolkit.getDefaultToolkit();
         if (toolkit instanceof ComponentFactory) {
             peer = ((ComponentFactory)toolkit).createRobot(this, screen);
-            disposer = new RobotDisposer(peer);
-            sun.java2d.Disposer.addRecord(anchor, disposer);
         }
         initLegalButtonMask();
     }
@@ -177,22 +175,6 @@
         }
     }
 
-    private transient Object anchor = new Object();
-
-    static class RobotDisposer implements sun.java2d.DisposerRecord {
-        private final RobotPeer peer;
-        public RobotDisposer(RobotPeer peer) {
-            this.peer = peer;
-        }
-        public void dispose() {
-            if (peer != null) {
-                peer.dispose();
-            }
-        }
-    }
-
-    private transient RobotDisposer disposer;
-
     /**
      * Moves mouse pointer to given screen coordinates.
      * @param x         X position
--- a/src/java.desktop/share/classes/java/awt/desktop/AboutEvent.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.desktop/share/classes/java/awt/desktop/AboutEvent.java	Wed Feb 13 13:22:15 2019 -0500
@@ -33,11 +33,13 @@
  * Event sent when the application is asked to open its about window.
  *
  * @see AboutHandler#handleAbout
- *
  * @since 9
  */
 public final class AboutEvent extends AppEvent {
 
+    /**
+     * Use serialVersionUID from JDK 9 for interoperability.
+     */
     private static final long serialVersionUID = -5987180734802756477L;
 
     /**
--- a/src/java.desktop/share/classes/java/awt/desktop/AboutHandler.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.desktop/share/classes/java/awt/desktop/AboutHandler.java	Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2018, 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,8 +29,7 @@
  * An implementer receives notification when the app is asked to show its about
  * dialog.
  *
- * @see java.awt.Desktop#setAboutHandler(java.awt.desktop.AboutHandler)
- *
+ * @see java.awt.Desktop#setAboutHandler(AboutHandler)
  * @since 9
  */
 public interface AboutHandler {
@@ -38,7 +37,7 @@
     /**
      * Called when the application is asked to show its about dialog.
      *
-     * @param e the request to show the about dialog.
+     * @param  e the request to show the about dialog
      */
-    public void handleAbout(final AboutEvent e);
+    public void handleAbout(AboutEvent e);
 }
--- a/src/java.desktop/share/classes/java/awt/desktop/AppEvent.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.desktop/share/classes/java/awt/desktop/AppEvent.java	Wed Feb 13 13:22:15 2019 -0500
@@ -38,6 +38,9 @@
  */
 public class AppEvent extends EventObject {
 
+    /**
+     * Use serialVersionUID from JDK 9 for interoperability.
+     */
     private static final long serialVersionUID = -5958503993556009432L;
 
     /**
--- a/src/java.desktop/share/classes/java/awt/desktop/AppForegroundEvent.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.desktop/share/classes/java/awt/desktop/AppForegroundEvent.java	Wed Feb 13 13:22:15 2019 -0500
@@ -35,11 +35,13 @@
  *
  * @see AppForegroundListener#appRaisedToForeground(AppForegroundEvent)
  * @see AppForegroundListener#appMovedToBackground(AppForegroundEvent)
- *
  * @since 9
  */
 public final class AppForegroundEvent extends AppEvent {
 
+    /**
+     * Use serialVersionUID from JDK 9 for interoperability.
+     */
     private static final long serialVersionUID = -5513582555740533911L;
 
     /**
--- a/src/java.desktop/share/classes/java/awt/desktop/AppForegroundListener.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.desktop/share/classes/java/awt/desktop/AppForegroundListener.java	Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2018, 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
@@ -34,17 +34,19 @@
  * @since 9
  */
 public interface AppForegroundListener extends SystemEventListener {
+
     /**
      * Called when the app becomes the foreground app.
-     * @param e event
+     *
+     * @param  e event
      */
-    public void appRaisedToForeground(final AppForegroundEvent e);
+    public void appRaisedToForeground(AppForegroundEvent e);
 
     /**
      * Called when the app becomes the background app and another app becomes
      * the foreground app.
      *
-     * @param e event
+     * @param  e event
      */
-    public void appMovedToBackground(final AppForegroundEvent e);
+    public void appMovedToBackground(AppForegroundEvent e);
 }
--- a/src/java.desktop/share/classes/java/awt/desktop/AppHiddenEvent.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.desktop/share/classes/java/awt/desktop/AppHiddenEvent.java	Wed Feb 13 13:22:15 2019 -0500
@@ -34,11 +34,13 @@
  *
  * @see AppHiddenListener#appHidden(AppHiddenEvent)
  * @see AppHiddenListener#appUnhidden(AppHiddenEvent)
- *
  * @since 9
  */
 public final class AppHiddenEvent extends AppEvent {
 
+    /**
+     * Use serialVersionUID from JDK 9 for interoperability.
+     */
     private static final long serialVersionUID = 2637465279476429224L;
 
     /**
--- a/src/java.desktop/share/classes/java/awt/desktop/AppHiddenListener.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.desktop/share/classes/java/awt/desktop/AppHiddenListener.java	Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2018, 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
@@ -35,17 +35,17 @@
 public interface AppHiddenListener extends SystemEventListener {
 
     /**
-     * Called the app is hidden.
+     * Called when the app is hidden.
      *
-     * @param e event
+     * @param  e event
      */
-    public void appHidden(final AppHiddenEvent e);
+    public void appHidden(AppHiddenEvent e);
 
     /**
      * Called when the hidden app is shown again (but not necessarily brought to
      * the foreground).
      *
-     * @param e event
+     * @param  e event
      */
-    public void appUnhidden(final AppHiddenEvent e);
+    public void appUnhidden(AppHiddenEvent e);
 }
--- a/src/java.desktop/share/classes/java/awt/desktop/AppReopenedEvent.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.desktop/share/classes/java/awt/desktop/AppReopenedEvent.java	Wed Feb 13 13:22:15 2019 -0500
@@ -33,11 +33,13 @@
  * Event sent when the application is asked to re-open itself.
  *
  * @see AppReopenedListener#appReopened(AppReopenedEvent)
- *
  * @since 9
  */
 public final class AppReopenedEvent extends AppEvent {
 
+    /**
+     * Use serialVersionUID from JDK 9 for interoperability.
+     */
     private static final long serialVersionUID = 1503238361530407990L;
 
     /**
--- a/src/java.desktop/share/classes/java/awt/desktop/AppReopenedListener.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.desktop/share/classes/java/awt/desktop/AppReopenedListener.java	Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -27,15 +27,18 @@
 
 /**
  * Implementors receive notification when the app has been asked to open again.
- *
- * This notification is useful for showing a new document when your app has no open windows.
+ * <p>
+ * This notification is useful for showing a new document when your app has no
+ * open windows.
  *
  * @since 9
  */
 public interface AppReopenedListener extends SystemEventListener {
+
     /**
-     * Called when the app has been reopened
-     * @param e the request to reopen the app
+     * Called when the app has been reopened.
+     *
+     * @param  e the request to reopen the app
      */
-    public void appReopened(final AppReopenedEvent e);
+    public void appReopened(AppReopenedEvent e);
 }
--- a/src/java.desktop/share/classes/java/awt/desktop/FilesEvent.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.desktop/share/classes/java/awt/desktop/FilesEvent.java	Wed Feb 13 13:22:15 2019 -0500
@@ -39,7 +39,14 @@
  */
 public class FilesEvent extends AppEvent {
 
+    /**
+     * Use serialVersionUID from JDK 9 for interoperability.
+     */
     private static final long serialVersionUID = 5271763715462312871L;
+
+    /**
+     * The list of files.
+     */
     final List<File> files;
 
     /**
--- a/src/java.desktop/share/classes/java/awt/desktop/OpenFilesEvent.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.desktop/share/classes/java/awt/desktop/OpenFilesEvent.java	Wed Feb 13 13:22:15 2019 -0500
@@ -35,12 +35,18 @@
  * Event sent when the app is asked to open a list of files.
  *
  * @see OpenFilesHandler#openFiles
- *
  * @since 9
  */
 public final class OpenFilesEvent extends FilesEvent {
 
+    /**
+     * Use serialVersionUID from JDK 9 for interoperability.
+     */
     private static final long serialVersionUID = -3982871005867718956L;
+
+    /**
+     * The search term used to find the files.
+     */
     final String searchTerm;
 
     /**
@@ -63,10 +69,10 @@
     }
 
     /**
-     * Gets the search term. The platform may optionally provide the search
-     * term that was used to find the files. This is for example the case
-     * on Mac OS X, when the files were opened using the Spotlight search
-     * menu or a Finder search window.
+     * Gets the search term. The platform may optionally provide the search term
+     * that was used to find the files. This is for example the case on MacOS,
+     * when the files were opened using the Spotlight search menu or a Finder
+     * search window.
      * <p>
      * This is useful for highlighting the search term in the documents when
      * they are opened.
--- a/src/java.desktop/share/classes/java/awt/desktop/OpenFilesHandler.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.desktop/share/classes/java/awt/desktop/OpenFilesHandler.java	Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -25,18 +25,20 @@
 
 package java.awt.desktop;
 
-
 /**
- * An implementor is notified when the application is asked to open a list of files.
+ * An implementor is notified when the application is asked to open a list of
+ * files.
  *
- * @see java.awt.Desktop#setOpenFileHandler(java.awt.desktop.OpenFilesHandler)
- *
+ * @see java.awt.Desktop#setOpenFileHandler(OpenFilesHandler)
  * @since 9
  */
 public interface OpenFilesHandler {
+
     /**
      * Called when the application is asked to open a list of files.
-     * @param e the request to open a list of files, and the search term used to find them, if any.
+     *
+     * @param  e the request to open a list of files, and the search term used
+     *         to find them, if any
      */
-    public void openFiles(final OpenFilesEvent e);
+    public void openFiles(OpenFilesEvent e);
 }
--- a/src/java.desktop/share/classes/java/awt/desktop/OpenURIEvent.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.desktop/share/classes/java/awt/desktop/OpenURIEvent.java	Wed Feb 13 13:22:15 2019 -0500
@@ -34,12 +34,18 @@
  * Event sent when the app is asked to open a {@code URI}.
  *
  * @see OpenURIHandler#openURI(OpenURIEvent)
- *
  * @since 9
  */
 public final class OpenURIEvent extends AppEvent {
 
+    /**
+     * Use serialVersionUID from JDK 9 for interoperability.
+     */
     private static final long serialVersionUID = 221209100935933476L;
+
+    /**
+     * The {@code URI} the app was asked to open.
+     */
     final URI uri;
 
     /**
@@ -58,7 +64,8 @@
     }
 
     /**
-     * Get the {@code URI} the app was asked to open
+     * Get the {@code URI} the app was asked to open.
+     *
      * @return the {@code URI}
      */
     public URI getURI() {
--- a/src/java.desktop/share/classes/java/awt/desktop/OpenURIHandler.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.desktop/share/classes/java/awt/desktop/OpenURIHandler.java	Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -28,14 +28,15 @@
 /**
  * An implementor is notified when the application is asked to open a URI.
  *
- * @see java.awt.Desktop#setOpenURIHandler(java.awt.desktop.OpenURIHandler)
- *
+ * @see java.awt.Desktop#setOpenURIHandler(OpenURIHandler)
  * @since 9
  */
 public interface OpenURIHandler {
+
     /**
-     * Called when the application is asked to open a {@code URI}
-     * @param e the request to open a {@code URI}
+     * Called when the application is asked to open a {@code URI}.
+     *
+     * @param  e the request to open a {@code URI}
      */
-    public void openURI(final OpenURIEvent e);
+    public void openURI(OpenURIEvent e);
 }
--- a/src/java.desktop/share/classes/java/awt/desktop/PreferencesEvent.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.desktop/share/classes/java/awt/desktop/PreferencesEvent.java	Wed Feb 13 13:22:15 2019 -0500
@@ -33,11 +33,13 @@
  * Event sent when the application is asked to open its preferences window.
  *
  * @see PreferencesHandler#handlePreferences
- *
  * @since 9
  */
 public final class PreferencesEvent extends AppEvent {
 
+    /**
+     * Use serialVersionUID from JDK 9 for interoperability.
+     */
     private static final long serialVersionUID = -6398607097086476160L;
 
     /**
--- a/src/java.desktop/share/classes/java/awt/desktop/PreferencesHandler.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.desktop/share/classes/java/awt/desktop/PreferencesHandler.java	Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -28,14 +28,15 @@
 /**
  * An implementor is notified when the app is asked to show its preferences UI.
  *
- * @see java.awt.Desktop#setPreferencesHandler(java.awt.desktop.PreferencesHandler)
- *
+ * @see java.awt.Desktop#setPreferencesHandler(PreferencesHandler)
  * @since 9
  */
 public interface PreferencesHandler {
+
     /**
      * Called when the app is asked to show its preferences UI.
-     * @param e the request to show preferences.
+     *
+     * @param  e the request to show preferences
      */
-    public void handlePreferences(final PreferencesEvent e);
+    public void handlePreferences(PreferencesEvent e);
 }
--- a/src/java.desktop/share/classes/java/awt/desktop/PrintFilesEvent.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.desktop/share/classes/java/awt/desktop/PrintFilesEvent.java	Wed Feb 13 13:22:15 2019 -0500
@@ -39,6 +39,9 @@
  */
 public final class PrintFilesEvent extends FilesEvent {
 
+    /**
+     * Use serialVersionUID from JDK 9 for interoperability.
+     */
     private static final long serialVersionUID = -5752560876153618618L;
 
     /**
--- a/src/java.desktop/share/classes/java/awt/desktop/PrintFilesHandler.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.desktop/share/classes/java/awt/desktop/PrintFilesHandler.java	Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -26,16 +26,18 @@
 package java.awt.desktop;
 
 /**
- * An implementor can respond to requests to print documents that the app has been registered to handle.
+ * An implementor can respond to requests to print documents that the app has
+ * been registered to handle.
  *
- * @see java.awt.Desktop#setPrintFileHandler(java.awt.desktop.PrintFilesHandler)
- *
+ * @see java.awt.Desktop#setPrintFileHandler(PrintFilesHandler)
  * @since 9
  */
 public interface PrintFilesHandler {
+
     /**
      * Called when the application is asked to print a list of files.
-     * @param e the request to print a list of files.
+     *
+     * @param  e the request to print a list of files
      */
-    public void printFiles(final PrintFilesEvent e);
+    public void printFiles(PrintFilesEvent e);
 }
--- a/src/java.desktop/share/classes/java/awt/desktop/QuitEvent.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.desktop/share/classes/java/awt/desktop/QuitEvent.java	Wed Feb 13 13:22:15 2019 -0500
@@ -33,11 +33,13 @@
  * Event sent when the application is asked to quit.
  *
  * @see QuitHandler#handleQuitRequestWith(QuitEvent, QuitResponse)
- *
  * @since 9
  */
 public final class QuitEvent extends AppEvent {
 
+    /**
+     * Use serialVersionUID from JDK 9 for interoperability.
+     */
     private static final long serialVersionUID = -256100795532403146L;
 
     /**
--- a/src/java.desktop/share/classes/java/awt/desktop/QuitHandler.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.desktop/share/classes/java/awt/desktop/QuitHandler.java	Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -26,26 +26,32 @@
 package java.awt.desktop;
 
 /**
- * An implementor determines if requests to quit this application should proceed or cancel.
+ * An implementor determines if requests to quit this application should proceed
+ * or cancel.
  *
- * @see java.awt.Desktop#setQuitHandler(java.awt.desktop.QuitHandler)
- * @see java.awt.Desktop#setQuitStrategy(java.awt.desktop.QuitStrategy)
- *
+ * @see java.awt.Desktop#setQuitHandler(QuitHandler)
+ * @see java.awt.Desktop#setQuitStrategy(QuitStrategy)
  * @since 9
  */
 public interface QuitHandler {
+
     /**
      * Invoked when the application is asked to quit.
+     * <p>
+     * Implementors must call either {@link QuitResponse#cancelQuit()},
+     * {@link QuitResponse#performQuit()}, or ensure the application terminates.
+     * The process (or log-out) requesting this app to quit will be blocked
+     * until the {@link QuitResponse} is handled. Apps that require complex UI
+     * to shutdown may call the {@link QuitResponse} from any thread. Your app
+     * may be asked to quit multiple times before you have responded to the
+     * initial request. This handler is called each time a quit is requested,
+     * and the same {@link QuitResponse} object is passed until it is handled.
+     * Once used, the {@link QuitResponse} cannot be used again to change the
+     * decision.
      *
-     * Implementors must call either {@link QuitResponse#cancelQuit()}, {@link QuitResponse#performQuit()}, or ensure the application terminates.
-     * The process (or log-out) requesting this app to quit will be blocked until the {@link QuitResponse} is handled.
-     * Apps that require complex UI to shutdown may call the {@link QuitResponse} from any thread.
-     * Your app may be asked to quit multiple times before you have responded to the initial request.
-     * This handler is called each time a quit is requested, and the same {@link QuitResponse} object is passed until it is handled.
-     * Once used, the {@link QuitResponse} cannot be used again to change the decision.
-     *
-     * @param e the request to quit this application.
-     * @param response the one-shot response object used to cancel or proceed with the quit action.
+     * @param  e the request to quit this application
+     * @param  response the one-shot response object used to cancel or proceed
+     *         with the quit action
      */
-    public void handleQuitRequestWith(final QuitEvent e, final QuitResponse response);
+    public void handleQuitRequestWith(QuitEvent e, QuitResponse response);
 }
--- a/src/java.desktop/share/classes/java/awt/desktop/QuitResponse.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.desktop/share/classes/java/awt/desktop/QuitResponse.java	Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -28,21 +28,23 @@
 /**
  * Used to respond to a request to quit the application.
  *
- * @see java.awt.Desktop#setQuitHandler(java.awt.desktop.QuitHandler)
- * @see java.awt.desktop.QuitHandler
- * @see java.awt.Desktop#setQuitStrategy(java.awt.desktop.QuitStrategy)
- *
+ * @see java.awt.Desktop#setQuitHandler(QuitHandler)
+ * @see QuitHandler
+ * @see java.awt.Desktop#setQuitStrategy(QuitStrategy)
  * @since 9
  */
 public interface QuitResponse {
 
     /**
-     * Notifies the external quit requester that the quit will proceed, and performs the default {@link java.awt.desktop.QuitStrategy}.
+     * Notifies the external quit requester that the quit will proceed, and
+     * performs the default {@link QuitStrategy}.
      */
     public void performQuit();
 
     /**
-     * Notifies the external quit requester that the user has explicitly canceled the pending quit, and leaves the application running.
+     * Notifies the external quit requester that the user has explicitly
+     * canceled the pending quit, and leaves the application running.
+     * <p>
      * <b>Note: this will cancel a pending log-out, restart, or shutdown.</b>
      */
     public void cancelQuit();
--- a/src/java.desktop/share/classes/java/awt/desktop/QuitStrategy.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.desktop/share/classes/java/awt/desktop/QuitStrategy.java	Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -26,18 +26,19 @@
 package java.awt.desktop;
 
 /**
- * The strategy used to shut down the application, if Sudden Termination is not enabled.
+ * The strategy used to shut down the application, if Sudden Termination is not
+ * enabled.
  *
- * @see java.awt.Desktop#setQuitHandler(java.awt.desktop.QuitHandler)
- * @see java.awt.Desktop#setQuitStrategy(java.awt.desktop.QuitStrategy)
+ * @see java.awt.Desktop#setQuitHandler(QuitHandler)
+ * @see java.awt.Desktop#setQuitStrategy(QuitStrategy)
  * @see java.awt.Desktop#enableSuddenTermination()
  * @see java.awt.Desktop#disableSuddenTermination()
- *
  * @since 9
  */
 public enum QuitStrategy {
     /**
-     * Shuts down the application by calling {@code System.exit(0)}. This is the default strategy.
+     * Shuts down the application by calling {@code System.exit(0)}. This is the
+     * default strategy.
      */
     NORMAL_EXIT,
 
--- a/src/java.desktop/share/classes/java/awt/desktop/ScreenSleepEvent.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.desktop/share/classes/java/awt/desktop/ScreenSleepEvent.java	Wed Feb 13 13:22:15 2019 -0500
@@ -35,11 +35,13 @@
  *
  * @see ScreenSleepListener#screenAboutToSleep(ScreenSleepEvent)
  * @see ScreenSleepListener#screenAwoke(ScreenSleepEvent)
- *
  * @since 9
  */
 public final class ScreenSleepEvent extends AppEvent {
 
+    /**
+     * Use serialVersionUID from JDK 9 for interoperability.
+     */
     private static final long serialVersionUID = 7521606180376544150L;
 
     /**
--- a/src/java.desktop/share/classes/java/awt/desktop/ScreenSleepListener.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.desktop/share/classes/java/awt/desktop/ScreenSleepListener.java	Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -26,9 +26,11 @@
 package java.awt.desktop;
 
 /**
- * Implementors receive notification when the displays attached to the system have entered power save sleep.
- *
- * This notification is useful for discontinuing a costly animation, or indicating that the user is no longer present on a network service.
+ * Implementors receive notification when the displays attached to the system
+ * have entered power save sleep.
+ * <p>
+ * This notification is useful for discontinuing a costly animation, or
+ * indicating that the user is no longer present on a network service.
  *
  * @since 9
  */
@@ -36,13 +38,15 @@
 
     /**
      * Called when the system displays have entered power save sleep.
-     * @param e the screen sleep event
+     *
+     * @param  e the screen sleep event
      */
-    public void screenAboutToSleep(final ScreenSleepEvent e);
+    public void screenAboutToSleep(ScreenSleepEvent e);
 
     /**
      * Called when the system displays have awoken from power save sleep.
-     * @param e the screen sleep event
+     *
+     * @param  e the screen sleep event
      */
-    public void screenAwoke(final ScreenSleepEvent e);
+    public void screenAwoke(ScreenSleepEvent e);
 }
--- a/src/java.desktop/share/classes/java/awt/desktop/SystemEventListener.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.desktop/share/classes/java/awt/desktop/SystemEventListener.java	Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -28,9 +28,8 @@
 import java.util.EventListener;
 
 /**
- * Common interface for all event listener sub-types.
- *
- * Implementors may implement multiple sub-types, but only need to call
+ * Common interface for all event listener sub-types. Implementors may implement
+ * multiple sub-types, but only need to call
  * {@link java.awt.Desktop#addAppEventListener(SystemEventListener)} once to
  * receive all notifications.
  *
--- a/src/java.desktop/share/classes/java/awt/desktop/SystemSleepEvent.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.desktop/share/classes/java/awt/desktop/SystemSleepEvent.java	Wed Feb 13 13:22:15 2019 -0500
@@ -34,11 +34,13 @@
  *
  * @see SystemSleepListener#systemAboutToSleep(SystemSleepEvent)
  * @see SystemSleepListener#systemAwoke(SystemSleepEvent)
- *
  * @since 9
  */
 public final class SystemSleepEvent extends AppEvent {
 
+    /**
+     * Use serialVersionUID from JDK 9 for interoperability.
+     */
     private static final long serialVersionUID = 11372269824930549L;
 
     /**
--- a/src/java.desktop/share/classes/java/awt/desktop/SystemSleepListener.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.desktop/share/classes/java/awt/desktop/SystemSleepListener.java	Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -28,7 +28,7 @@
 /**
  * Implementors receive notification as the system is entering sleep, and after
  * the system wakes.
- *
+ * <p>
  * This notification is useful for disconnecting from network services prior to
  * sleep, or re-establishing a connection if the network configuration has
  * changed during sleep.
@@ -42,14 +42,14 @@
      * delivered prior to the actual system sleep, and may be processed after
      * the corresponding wake has occurred.
      *
-     * @param e the system sleep event
+     * @param  e the system sleep event
      */
-    public void systemAboutToSleep(final SystemSleepEvent e);
+    public void systemAboutToSleep(SystemSleepEvent e);
 
     /**
      * Called after the system has awoken from sleeping.
      *
-     * @param e the system sleep event
+     * @param  e the system sleep event
      */
-    public void systemAwoke(final SystemSleepEvent e);
+    public void systemAwoke(SystemSleepEvent e);
 }
--- a/src/java.desktop/share/classes/java/awt/desktop/UserSessionEvent.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.desktop/share/classes/java/awt/desktop/UserSessionEvent.java	Wed Feb 13 13:22:15 2019 -0500
@@ -30,19 +30,23 @@
 import java.awt.HeadlessException;
 
 /**
- * Event sent when the user session has been changed.
- *
- * Some systems may provide a reason of a user session change.
+ * Event sent when the user session has been changed. Some systems may provide a
+ * reason of a user session change.
  *
  * @see UserSessionListener#userSessionActivated(UserSessionEvent)
  * @see UserSessionListener#userSessionDeactivated(UserSessionEvent)
- *
  * @since 9
  */
 public final class UserSessionEvent extends AppEvent {
 
+    /**
+     * Use serialVersionUID from JDK 9 for interoperability.
+     */
     private static final long serialVersionUID = 6747138462796569055L;
 
+    /**
+     * The reason of the user session change.
+     */
     private final Reason reason;
 
     /**
--- a/src/java.desktop/share/classes/java/awt/desktop/UserSessionListener.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.desktop/share/classes/java/awt/desktop/UserSessionListener.java	Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -25,32 +25,33 @@
 
 package java.awt.desktop;
 
-
 /**
  * Implementors receive notification when the user session changes.
- *
- * This notification is useful for discontinuing a costly animation,
- * or indicating that the user is no longer present on a network service.
- *
+ * <p>
+ * This notification is useful for discontinuing a costly animation, or
+ * indicating that the user is no longer present on a network service.
+ * <p>
  * Some systems may provide a reason of the user session change.
  *
  * @see UserSessionEvent.Reason#UNSPECIFIED
  * @see UserSessionEvent.Reason#CONSOLE
  * @see UserSessionEvent.Reason#REMOTE
  * @see UserSessionEvent.Reason#LOCK
- *
  * @since 9
  */
 public interface UserSessionListener extends SystemEventListener {
+
     /**
      * Called when the user session has been switched away.
-     * @param e the user session switch event
+     *
+     * @param  e the user session switch event
      */
-    public void userSessionDeactivated(final UserSessionEvent e);
+    public void userSessionDeactivated(UserSessionEvent e);
 
     /**
      * Called when the user session has been switched to.
-     * @param e the user session switch event
+     *
+     * @param  e the user session switch event
      */
-    public void userSessionActivated(final UserSessionEvent e);
+    public void userSessionActivated(UserSessionEvent e);
 }
--- a/src/java.desktop/share/classes/java/awt/geom/Path2D.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.desktop/share/classes/java/awt/geom/Path2D.java	Wed Feb 13 13:22:15 2019 -0500
@@ -858,7 +858,6 @@
          * path.
          *
          * @serialData
-         * <a id="Path2DSerialData"><!-- --></a>
          * <ol>
          * <li>The default serializable fields.
          * There are no default serializable fields as of 1.6.
@@ -1634,7 +1633,6 @@
          * path.
          *
          * @serialData
-         * <a id="Path2DSerialData"><!-- --></a>
          * <ol>
          * <li>The default serializable fields.
          * There are no default serializable fields as of 1.6.
--- a/src/java.desktop/share/classes/java/awt/peer/RobotPeer.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.desktop/share/classes/java/awt/peer/RobotPeer.java	Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1999, 2008, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2019, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -25,7 +25,8 @@
 
 package java.awt.peer;
 
-import java.awt.*;
+import java.awt.Rectangle;
+import java.awt.Robot;
 
 /**
  * RobotPeer defines an interface whereby toolkits support automated testing
@@ -116,9 +117,4 @@
      * @see Robot#createScreenCapture(Rectangle)
      */
     int[] getRGBPixels(Rectangle bounds);
-
-    /**
-     * Disposes the robot peer when it is not needed anymore.
-     */
-    void dispose();
 }
--- a/src/java.desktop/share/classes/sun/awt/image/BufferedImageDevice.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.desktop/share/classes/sun/awt/image/BufferedImageDevice.java	Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1999, 2000, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2019, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -25,15 +25,15 @@
 
 package sun.awt.image;
 
+import java.awt.GraphicsConfiguration;
 import java.awt.GraphicsDevice;
-import java.awt.GraphicsConfiguration;
+
+public final class BufferedImageDevice extends GraphicsDevice {
 
-public class BufferedImageDevice extends GraphicsDevice
-{
-    GraphicsConfiguration gc;
+    private final GraphicsConfiguration config;
 
-    public BufferedImageDevice(BufferedImageGraphicsConfig gc) {
-        this.gc = gc;
+    public BufferedImageDevice(final BufferedImageGraphicsConfig config) {
+        this.config = config;
     }
 
     /**
@@ -44,6 +44,7 @@
      * @see #TYPE_PRINTER
      * @see #TYPE_IMAGE_BUFFER
      */
+    @Override
     public int getType() {
         return GraphicsDevice.TYPE_IMAGE_BUFFER;
     }
@@ -54,6 +55,7 @@
      * @return a {@code String} that is the identification
      * of this {@code GraphicsDevice}.
      */
+    @Override
     public String getIDstring() {
         return ("BufferedImage");
     }
@@ -65,8 +67,9 @@
      * objects that are associated with this
      * {@code GraphicsDevice}.
      */
+    @Override
     public GraphicsConfiguration[] getConfigurations() {
-        return new GraphicsConfiguration[] { gc };
+        return new GraphicsConfiguration[]{config};
     }
 
     /**
@@ -75,7 +78,8 @@
      * @return the default {@code GraphicsConfiguration}
      * of this {@code GraphicsDevice}.
      */
+    @Override
     public GraphicsConfiguration getDefaultConfiguration() {
-        return gc;
+        return config;
     }
 }
--- a/src/java.desktop/share/classes/sun/awt/image/BufferedImageGraphicsConfig.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.desktop/share/classes/sun/awt/image/BufferedImageGraphicsConfig.java	Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2019, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -25,12 +25,10 @@
 
 package sun.awt.image;
 
-import java.awt.AWTException;
 import java.awt.Component;
 import java.awt.Graphics2D;
 import java.awt.GraphicsConfiguration;
 import java.awt.GraphicsDevice;
-import java.awt.ImageCapabilities;
 import java.awt.Rectangle;
 import java.awt.Transparency;
 import java.awt.geom.AffineTransform;
@@ -38,12 +36,10 @@
 import java.awt.image.ColorModel;
 import java.awt.image.DirectColorModel;
 import java.awt.image.Raster;
-import java.awt.image.VolatileImage;
 import java.awt.image.WritableRaster;
 
-public class BufferedImageGraphicsConfig
-    extends GraphicsConfiguration
-{
+public final class BufferedImageGraphicsConfig extends GraphicsConfiguration {
+
     private static final int numconfigs = BufferedImage.TYPE_BYTE_BINARY;
     private static BufferedImageGraphicsConfig[] standardConfigs =
         new BufferedImageGraphicsConfig[numconfigs];
@@ -77,24 +73,20 @@
         return ret;
     }
 
-    GraphicsDevice gd;
-    ColorModel model;
-    Raster raster;
+    private final GraphicsDevice device;
+    private final ColorModel model;
+    private final Raster raster;
     private final double scaleX;
     private final double scaleY;
 
-    public BufferedImageGraphicsConfig(BufferedImage bufImg, Component comp) {
-        this(bufImg, comp, 1, 1);
-    }
-
     public BufferedImageGraphicsConfig(BufferedImage bufImg, Component comp,
                                        double scaleX, double scaleY)
     {
         if (comp == null) {
-            this.gd = new BufferedImageDevice(this);
+            device = new BufferedImageDevice(this);
         } else {
             Graphics2D g2d = (Graphics2D)comp.getGraphics();
-            this.gd = g2d.getDeviceConfiguration().getDevice();
+            device = g2d.getDeviceConfiguration().getDevice();
         }
         this.model = bufImg.getColorModel();
         this.raster = bufImg.getRaster().createCompatibleWritableRaster(1, 1);
@@ -105,8 +97,9 @@
     /**
      * Return the graphics device associated with this configuration.
      */
+    @Override
     public GraphicsDevice getDevice() {
-        return gd;
+        return device;
     }
 
     /**
@@ -118,6 +111,7 @@
      * that is closest to this native device configuration and thus
      * can be optimally blitted to this device.
      */
+    @Override
     public BufferedImage createCompatibleImage(int width, int height) {
         WritableRaster wr = raster.createCompatibleWritableRaster(width, height);
         return new BufferedImage(model, wr, model.isAlphaPremultiplied(), null);
@@ -126,6 +120,7 @@
     /**
      * Returns the color model associated with this configuration.
      */
+    @Override
     public ColorModel getColorModel() {
         return model;
     }
@@ -134,6 +129,7 @@
      * Returns the color model associated with this configuration that
      * supports the specified transparency.
      */
+    @Override
     public ColorModel getColorModel(int transparency) {
 
         if (model.getTransparency() == transparency) {
@@ -160,6 +156,7 @@
      * increasing to the right and Y coordinates increasing downwards.
      * For image buffers, this Transform will be the Identity transform.
      */
+    @Override
     public AffineTransform getDefaultTransform() {
         return AffineTransform.getScaleInstance(scaleX, scaleY);
     }
@@ -183,10 +180,12 @@
      * For image buffers, this Transform will be the Identity transform,
      * since there is no valid distance measurement.
      */
+    @Override
     public AffineTransform getNormalizingTransform() {
         return new AffineTransform();
     }
 
+    @Override
     public Rectangle getBounds() {
         return new Rectangle(0, 0, Integer.MAX_VALUE, Integer.MAX_VALUE);
     }
--- a/src/java.desktop/share/classes/sun/java2d/HeadlessGraphicsEnvironment.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.desktop/share/classes/sun/java2d/HeadlessGraphicsEnvironment.java	Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -25,22 +25,20 @@
 
 package sun.java2d;
 
-import java.awt.GraphicsEnvironment;
+import java.awt.Font;
+import java.awt.Graphics2D;
 import java.awt.GraphicsDevice;
-import java.awt.Graphics2D;
+import java.awt.GraphicsEnvironment;
 import java.awt.HeadlessException;
-import java.awt.image.BufferedImage;
-import java.awt.Font;
-import java.util.Locale;
-import sun.awt.FontConfiguration;
 import java.awt.Point;
 import java.awt.Rectangle;
+import java.awt.image.BufferedImage;
+import java.util.Locale;
 
 /**
  * Headless decorator implementation of a SunGraphicsEnvironment
  */
-
-public class HeadlessGraphicsEnvironment extends GraphicsEnvironment {
+public final class HeadlessGraphicsEnvironment extends GraphicsEnvironment {
 
     private GraphicsEnvironment ge;
 
@@ -48,37 +46,41 @@
         this.ge = ge;
     }
 
+    @Override
     public GraphicsDevice[] getScreenDevices()
         throws HeadlessException {
         throw new HeadlessException();
     }
 
+    @Override
     public GraphicsDevice getDefaultScreenDevice()
         throws HeadlessException {
         throw new HeadlessException();
     }
 
+    @Override
     public Point getCenterPoint() throws HeadlessException {
         throw new HeadlessException();
     }
 
+    @Override
     public Rectangle getMaximumWindowBounds() throws HeadlessException {
         throw new HeadlessException();
     }
 
+    @Override
     public Graphics2D createGraphics(BufferedImage img) {
         return ge.createGraphics(img); }
 
+    @Override
     public Font[] getAllFonts() { return ge.getAllFonts(); }
 
+    @Override
     public String[] getAvailableFontFamilyNames() {
         return ge.getAvailableFontFamilyNames(); }
 
+    @Override
     public String[] getAvailableFontFamilyNames(Locale l) {
-        return ge.getAvailableFontFamilyNames(l); }
-
-    /* Used by FontManager : internal API */
-    public GraphicsEnvironment getSunGraphicsEnvironment() {
-        return ge;
+        return ge.getAvailableFontFamilyNames(l);
     }
 }
--- a/src/java.desktop/share/classes/sun/print/PrinterGraphicsConfig.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.desktop/share/classes/sun/print/PrinterGraphicsConfig.java	Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2004, 2007, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2004, 2019, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -27,7 +27,6 @@
 
 import java.awt.GraphicsConfiguration;
 import java.awt.GraphicsDevice;
-
 import java.awt.Rectangle;
 import java.awt.Transparency;
 import java.awt.geom.AffineTransform;
@@ -35,32 +34,35 @@
 import java.awt.image.ColorModel;
 import java.awt.image.DirectColorModel;
 
-public class PrinterGraphicsConfig extends GraphicsConfiguration {
+public final class PrinterGraphicsConfig extends GraphicsConfiguration {
 
     static ColorModel theModel;
 
-    GraphicsDevice gd;
-    int pageWidth, pageHeight;
-    AffineTransform deviceTransform;
+    private final GraphicsDevice device;
+    private final int pageWidth;
+    private final int pageHeight;
+    private final AffineTransform deviceTransform;
 
     public PrinterGraphicsConfig(String printerID, AffineTransform deviceTx,
                                  int pageWid, int pageHgt) {
         this.pageWidth = pageWid;
         this.pageHeight = pageHgt;
         this.deviceTransform = deviceTx;
-        this.gd = new PrinterGraphicsDevice(this, printerID);
+        this.device = new PrinterGraphicsDevice(this, printerID);
     }
 
     /**
      * Return the graphics device associated with this configuration.
      */
+    @Override
     public GraphicsDevice getDevice() {
-        return gd;
+        return device;
     }
 
     /**
      * Returns the color model associated with this configuration.
      */
+    @Override
     public ColorModel getColorModel() {
         if (theModel == null) {
             BufferedImage bufImg =
@@ -75,6 +77,7 @@
      * Returns the color model associated with this configuration that
      * supports the specified transparency.
      */
+    @Override
     public ColorModel getColorModel(int transparency) {
         switch (transparency) {
         case Transparency.OPAQUE:
@@ -97,6 +100,7 @@
      * increasing to the right and Y coordinates increasing downwards.
      * For image buffers, this Transform will be the Identity transform.
      */
+    @Override
     public AffineTransform getDefaultTransform() {
         return new AffineTransform(deviceTransform);
     }
@@ -120,10 +124,12 @@
      * For image buffers, this Transform will be the Identity transform,
      * since there is no valid distance measurement.
      */
+    @Override
     public AffineTransform getNormalizingTransform() {
         return new AffineTransform();
     }
 
+    @Override
     public Rectangle getBounds() {
         return new Rectangle(0, 0, pageWidth, pageHeight);
     }
--- a/src/java.desktop/share/classes/sun/print/PrinterGraphicsDevice.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.desktop/share/classes/sun/print/PrinterGraphicsDevice.java	Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2004, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2004, 2019, 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,6 @@
  * questions.
  */
 
-
 package sun.print;
 
 import java.awt.GraphicsConfiguration;
@@ -32,36 +31,40 @@
 
 public final class PrinterGraphicsDevice extends GraphicsDevice {
 
-    String printerID;
-    GraphicsConfiguration graphicsConf;
+    private final String printerID;
+    private final GraphicsConfiguration config;
 
-    protected PrinterGraphicsDevice(GraphicsConfiguration conf, String id) {
+    PrinterGraphicsDevice(GraphicsConfiguration conf, String id) {
         printerID = id;
-        graphicsConf = conf;
+        config = conf;
     }
 
+    @Override
     public int getType() {
         return TYPE_PRINTER;
     }
 
+    @Override
     public String getIDstring() {
         return printerID;
     }
 
+    @Override
     public GraphicsConfiguration[] getConfigurations() {
-        GraphicsConfiguration[] confs = new GraphicsConfiguration[1];
-        confs[0] = graphicsConf;
-        return confs;
+        return new GraphicsConfiguration[]{config};
     }
 
+    @Override
     public GraphicsConfiguration getDefaultConfiguration() {
-        return graphicsConf;
+        return config;
     }
 
+    @Override
     public void setFullScreenWindow(Window w) {
         // Do nothing
     }
 
+    @Override
     public Window getFullScreenWindow() {
         return null;
     }
--- a/src/java.desktop/unix/classes/sun/awt/X11/InfoWindow.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.desktop/unix/classes/sun/awt/X11/InfoWindow.java	Wed Feb 13 13:22:15 2019 -0500
@@ -53,6 +53,7 @@
 import java.util.concurrent.ArrayBlockingQueue;
 
 import sun.awt.SunToolkit;
+import sun.awt.UNIXToolkit;
 
 /**
  * An utility window class. This is a base class for Tooltip and Balloon.
@@ -437,12 +438,24 @@
 
         private void loadGtkImages() {
             if (!gtkImagesLoaded) {
-                errorImage = (Image)Toolkit.getDefaultToolkit().getDesktopProperty(
-                    "gtk.icon.gtk-dialog-error.6.rtl");
-                warnImage = (Image)Toolkit.getDefaultToolkit().getDesktopProperty(
-                    "gtk.icon.gtk-dialog-warning.6.rtl");
-                infoImage = (Image)Toolkit.getDefaultToolkit().getDesktopProperty(
-                    "gtk.icon.gtk-dialog-info.6.rtl");
+                //check whether the gtk version is >= 3.10 as the Icon names were
+                //changed from this release
+                UNIXToolkit tk = (UNIXToolkit) Toolkit.getDefaultToolkit();
+                if (tk.checkGtkVersion(3, 10, 0)) {
+                    errorImage = (Image) tk.getDesktopProperty(
+                            "gtk.icon.dialog-error.6.rtl");
+                    warnImage = (Image) tk.getDesktopProperty(
+                            "gtk.icon.dialog-warning.6.rtl");
+                    infoImage = (Image) tk.getDesktopProperty(
+                            "gtk.icon.dialog-information.6.rtl");
+                } else {
+                    errorImage = (Image) tk.getDesktopProperty(
+                            "gtk.icon.gtk-dialog-error.6.rtl");
+                    warnImage = (Image) tk.getDesktopProperty(
+                            "gtk.icon.gtk-dialog-warning.6.rtl");
+                    infoImage = (Image) tk.getDesktopProperty(
+                            "gtk.icon.gtk-dialog-info.6.rtl");
+                }
                 gtkImagesLoaded = true;
             }
         }
--- a/src/java.desktop/unix/classes/sun/awt/X11/XRobotPeer.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.desktop/unix/classes/sun/awt/X11/XRobotPeer.java	Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2019, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -22,19 +22,22 @@
  * or visit www.oracle.com if you need additional information or have any
  * questions.
  */
+
 package sun.awt.X11;
 
-import java.awt.*;
-import java.awt.peer.*;
+import java.awt.GraphicsConfiguration;
+import java.awt.Rectangle;
+import java.awt.Toolkit;
+import java.awt.peer.RobotPeer;
 import java.security.AccessController;
-import sun.security.action.GetPropertyAction;
 
 import sun.awt.AWTAccessor;
 import sun.awt.SunToolkit;
 import sun.awt.UNIXToolkit;
 import sun.awt.X11GraphicsConfig;
+import sun.security.action.GetPropertyAction;
 
-class XRobotPeer implements RobotPeer {
+final class XRobotPeer implements RobotPeer {
 
     static final boolean tryGtk;
     static {
@@ -70,11 +73,6 @@
     }
 
     @Override
-    public void dispose() {
-        // does nothing
-    }
-
-    @Override
     public void mouseMove(int x, int y) {
         mouseMoveImpl(xgc, xgc.scaleUp(x), xgc.scaleUp(y));
     }
--- a/src/java.desktop/unix/classes/sun/awt/X11GraphicsConfig.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.desktop/unix/classes/sun/awt/X11GraphicsConfig.java	Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2019, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -28,32 +28,33 @@
 import java.awt.AWTException;
 import java.awt.BufferCapabilities;
 import java.awt.Component;
-import java.awt.Toolkit;
 import java.awt.GraphicsConfiguration;
 import java.awt.GraphicsDevice;
 import java.awt.Image;
 import java.awt.ImageCapabilities;
+import java.awt.Rectangle;
+import java.awt.Toolkit;
 import java.awt.Transparency;
-import java.awt.image.ColorModel;
 import java.awt.color.ColorSpace;
+import java.awt.geom.AffineTransform;
+import java.awt.image.ColorModel;
 import java.awt.image.ComponentColorModel;
+import java.awt.image.DataBuffer;
 import java.awt.image.DirectColorModel;
-import java.awt.image.DataBuffer;
 import java.awt.image.VolatileImage;
 import java.awt.image.WritableRaster;
-import java.awt.geom.AffineTransform;
-import java.awt.Rectangle;
+
+import sun.awt.image.OffScreenImage;
+import sun.awt.image.SunVolatileImage;
+import sun.awt.image.SurfaceManager;
 import sun.java2d.Disposer;
 import sun.java2d.DisposerRecord;
 import sun.java2d.SurfaceData;
+import sun.java2d.loops.CompositeType;
 import sun.java2d.loops.RenderLoops;
 import sun.java2d.loops.SurfaceType;
-import sun.java2d.loops.CompositeType;
 import sun.java2d.pipe.Region;
 import sun.java2d.x11.X11SurfaceData;
-import sun.awt.image.OffScreenImage;
-import sun.awt.image.SunVolatileImage;
-import sun.awt.image.SurfaceManager;
 
 /**
  * This is an implementation of a GraphicsConfiguration object for a
@@ -65,7 +66,7 @@
 public class X11GraphicsConfig extends GraphicsConfiguration
     implements SurfaceManager.ProxiedGraphicsConfig
 {
-    protected X11GraphicsDevice screen;
+    private final X11GraphicsDevice device;
     protected int visual;
     int depth;
     int colormap;
@@ -116,12 +117,12 @@
                                 int visualnum, int depth,
                                 int colormap, boolean doubleBuffer)
     {
-        this.screen = device;
+        this.device = device;
         this.visual = visualnum;
         this.doubleBuffer = doubleBuffer;
         this.depth = depth;
         this.colormap = colormap;
-        init (visualnum, screen.getScreen());
+        init (visualnum, device.getScreen());
 
         // add a record to the Disposer so that we destroy the native
         // AwtGraphicsConfigData when this object goes away (i.e. after a
@@ -134,8 +135,9 @@
     /**
      * Return the graphics device associated with this configuration.
      */
+    @Override
     public X11GraphicsDevice getDevice() {
-        return screen;
+        return device;
     }
 
     /**
@@ -177,8 +179,9 @@
         return surfaceType;
     }
 
+    @Override
     public Object getProxyKey() {
-        return screen.getProxyKeyFor(getSurfaceType());
+        return device.getProxyKeyFor(getSurfaceType());
     }
 
     /**
@@ -197,6 +200,7 @@
     /**
      * Returns the color model associated with this configuration.
      */
+    @Override
     public synchronized ColorModel getColorModel() {
         if (colorModel == null)  {
             // Force SystemColors to be resolved before we create the CM
@@ -218,6 +222,7 @@
      * Returns the color model associated with this configuration that
      * supports the specified transparency.
      */
+    @Override
     public ColorModel getColorModel(int transparency) {
         switch (transparency) {
         case Transparency.OPAQUE:
@@ -256,6 +261,7 @@
      * increasing to the right and Y coordinates increasing downwards.
      * For image buffers, this Transform will be the Identity transform.
      */
+    @Override
     public AffineTransform getDefaultTransform() {
         double scale = getScale();
         return AffineTransform.getScaleInstance(scale, scale);
@@ -292,9 +298,10 @@
      * For image buffers, this Transform will be the Identity transform,
      * since there is no valid distance measurement.
      */
+    @Override
     public AffineTransform getNormalizingTransform() {
-        double xscale = getXResolution(screen.getScreen()) / 72.0;
-        double yscale = getYResolution(screen.getScreen()) / 72.0;
+        double xscale = getXResolution(device.getScreen()) / 72.0;
+        double yscale = getYResolution(device.getScreen()) / 72.0;
         return new AffineTransform(xscale, 0.0, 0.0, yscale, 0.0, 0.0);
     }
 
@@ -306,7 +313,7 @@
     }
 
     public String toString() {
-        return ("X11GraphicsConfig[dev="+screen+
+        return ("X11GraphicsConfig[dev="+device+
                 ",vis=0x"+Integer.toHexString(visual)+
                 "]");
     }
@@ -321,8 +328,9 @@
         initIDs ();
     }
 
+    @Override
     public Rectangle getBounds() {
-        Rectangle rect = pGetBounds(screen.getScreen());
+        Rectangle rect = pGetBounds(device.getScreen());
         if (getScale() != 1) {
             rect.x = scaleDown(rect.x);
             rect.y = scaleDown(rect.y);
@@ -340,6 +348,7 @@
         }
     }
 
+    @Override
     public BufferCapabilities getBufferCapabilities() {
         if (bufferCaps == null) {
             if (doubleBuffer) {
@@ -351,6 +360,7 @@
         return bufferCaps;
     }
 
+    @Override
     public ImageCapabilities getImageCapabilities() {
         return imageCaps;
     }
@@ -366,6 +376,7 @@
         public X11GCDisposerRecord(long x11CfgData) {
             this.x11ConfigData = x11CfgData;
         }
+        @Override
         public synchronized void dispose() {
             if (x11ConfigData != 0L) {
                 X11GraphicsConfig.dispose(x11ConfigData);
--- a/src/java.desktop/unix/classes/sun/awt/X11GraphicsDevice.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.desktop/unix/classes/sun/awt/X11GraphicsDevice.java	Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2019, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -27,23 +27,22 @@
 
 import java.awt.AWTPermission;
 import java.awt.DisplayMode;
-import java.awt.GraphicsEnvironment;
+import java.awt.GraphicsConfiguration;
 import java.awt.GraphicsDevice;
-import java.awt.GraphicsConfiguration;
+import java.awt.GraphicsEnvironment;
 import java.awt.Rectangle;
 import java.awt.Window;
 import java.security.AccessController;
 import java.security.PrivilegedAction;
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.HashSet;
-import java.util.HashMap;
-
-import sun.java2d.opengl.GLXGraphicsConfig;
-import sun.java2d.xr.XRGraphicsConfig;
-import sun.java2d.loops.SurfaceType;
 
 import sun.awt.util.ThreadGroupUtils;
 import sun.java2d.SunGraphicsEnvironment;
+import sun.java2d.loops.SurfaceType;
+import sun.java2d.opengl.GLXGraphicsConfig;
+import sun.java2d.xr.XRGraphicsConfig;
 
 /**
  * This is an implementation of a GraphicsDevice object for a single
@@ -76,12 +75,6 @@
      */
     private static native void initIDs();
 
-    static {
-        if (!GraphicsEnvironment.isHeadless()) {
-            initIDs();
-        }
-    }
-
     /**
      * Returns the X11 screen of the device.
      */
@@ -113,6 +106,7 @@
      * @see #TYPE_PRINTER
      * @see #TYPE_IMAGE_BUFFER
      */
+    @Override
     public int getType() {
         return TYPE_RASTER_SCREEN;
     }
@@ -121,6 +115,7 @@
      * Returns the identification string associated with this graphics
      * device.
      */
+    @Override
     public String getIDstring() {
         return ":0."+screen;
     }
@@ -134,6 +129,7 @@
      * Returns all of the graphics
      * configurations associated with this graphics device.
      */
+    @Override
     public GraphicsConfiguration[] getConfigurations() {
         if (configs == null) {
             synchronized (configLock) {
@@ -221,6 +217,7 @@
      * Returns the default graphics configuration
      * associated with this graphics device.
      */
+    @Override
     public GraphicsConfiguration getDefaultConfiguration() {
         if (defaultConfig == null) {
             synchronized (configLock) {
@@ -487,6 +484,7 @@
      * From the DisplayChangedListener interface; called from
      * X11GraphicsEnvironment when the display mode has been changed.
      */
+    @Override
     public synchronized void displayChanged() {
         scale = initScaleFactor();
         // On X11 the visuals do not change, and therefore we don't need
@@ -501,6 +499,7 @@
      * From the DisplayChangedListener interface; devices do not need
      * to react to this event.
      */
+    @Override
     public void paletteChanged() {
     }
 
--- a/src/java.desktop/unix/classes/sun/awt/X11GraphicsEnvironment.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.desktop/unix/classes/sun/awt/X11GraphicsEnvironment.java	Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2019, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -27,20 +27,17 @@
 
 import java.awt.AWTError;
 import java.awt.GraphicsDevice;
-import java.awt.Point;
-import java.awt.Rectangle;
 import java.net.InetAddress;
 import java.net.NetworkInterface;
 import java.net.SocketException;
 import java.net.UnknownHostException;
-
-import java.util.*;
+import java.util.Enumeration;
 
 import sun.java2d.SunGraphicsEnvironment;
 import sun.java2d.SurfaceManagerFactory;
 import sun.java2d.UnixSurfaceManagerFactory;
+import sun.java2d.xr.XRSurfaceData;
 import sun.util.logging.PlatformLogger;
-import sun.java2d.xr.XRSurfaceData;
 
 /**
  * This is an implementation of a GraphicsEnvironment object for the
@@ -290,32 +287,6 @@
     }
 
     private static native boolean pRunningXinerama();
-    private static native Point getXineramaCenterPoint();
-
-    /**
-     * Override for Xinerama case: call new Solaris API for getting the correct
-     * centering point from the windowing system.
-     */
-    public Point getCenterPoint() {
-        if (runningXinerama()) {
-            Point p = getXineramaCenterPoint();
-            if (p != null) {
-                return p;
-            }
-        }
-        return super.getCenterPoint();
-    }
-
-    /**
-     * Override for Xinerama case
-     */
-    public Rectangle getMaximumWindowBounds() {
-        if (runningXinerama()) {
-            return getXineramaWindowBounds();
-        } else {
-            return super.getMaximumWindowBounds();
-        }
-    }
 
     public boolean runningXinerama() {
         if (xinerState == null) {
@@ -330,105 +301,6 @@
     }
 
     /**
-     * Return the bounds for a centered Window on a system running in Xinerama
-     * mode.
-     *
-     * Calculations are based on the assumption of a perfectly rectangular
-     * display area (display edges line up with one another, and displays
-     * have consistent width and/or height).
-     *
-     * The bounds to return depend on the arrangement of displays and on where
-     * Windows are to be centered.  There are two common situations:
-     *
-     * 1) The center point lies at the center of the combined area of all the
-     *    displays.  In this case, the combined area of all displays is
-     *    returned.
-     *
-     * 2) The center point lies at the center of a single display.  In this case
-     *    the user most likely wants centered Windows to be constrained to that
-     *    single display.  The boundaries of the one display are returned.
-     *
-     * It is possible for the center point to be at both the center of the
-     * entire display space AND at the center of a single monitor (a square of
-     * 9 monitors, for instance).  In this case, the entire display area is
-     * returned.
-     *
-     * Because the center point is arbitrarily settable by the user, it could
-     * fit neither of the cases above.  The fallback case is to simply return
-     * the combined area for all screens.
-     */
-    protected Rectangle getXineramaWindowBounds() {
-        Point center = getCenterPoint();
-        Rectangle unionRect, tempRect;
-        GraphicsDevice[] gds = getScreenDevices();
-        Rectangle centerMonitorRect = null;
-        int i;
-
-        // if center point is at the center of all monitors
-        // return union of all bounds
-        //
-        //  MM*MM     MMM       M
-        //            M*M       *
-        //            MMM       M
-
-        // if center point is at center of a single monitor (but not of all
-        // monitors)
-        // return bounds of single monitor
-        //
-        // MMM         MM
-        // MM*         *M
-
-        // else, center is in some strange spot (such as on the border between
-        // monitors), and we should just return the union of all monitors
-        //
-        // MM          MMM
-        // MM          MMM
-
-        unionRect = getUsableBounds(gds[0]);
-
-        for (i = 0; i < gds.length; i++) {
-            tempRect = getUsableBounds(gds[i]);
-            if (centerMonitorRect == null &&
-                // add a pixel or two for fudge-factor
-                (tempRect.width / 2) + tempRect.x > center.x - 1 &&
-                (tempRect.height / 2) + tempRect.y > center.y - 1 &&
-                (tempRect.width / 2) + tempRect.x < center.x + 1 &&
-                (tempRect.height / 2) + tempRect.y < center.y + 1) {
-                centerMonitorRect = tempRect;
-            }
-            unionRect = unionRect.union(tempRect);
-        }
-
-        // first: check for center of all monitors (video wall)
-        // add a pixel or two for fudge-factor
-        if ((unionRect.width / 2) + unionRect.x > center.x - 1 &&
-            (unionRect.height / 2) + unionRect.y > center.y - 1 &&
-            (unionRect.width / 2) + unionRect.x < center.x + 1 &&
-            (unionRect.height / 2) + unionRect.y < center.y + 1) {
-
-            if (screenLog.isLoggable(PlatformLogger.Level.FINER)) {
-                screenLog.finer("Video Wall: center point is at center of all displays.");
-            }
-            return unionRect;
-        }
-
-        // next, check if at center of one monitor
-        if (centerMonitorRect != null) {
-            if (screenLog.isLoggable(PlatformLogger.Level.FINER)) {
-                screenLog.finer("Center point at center of a particular " +
-                                "monitor, but not of the entire virtual display.");
-            }
-            return centerMonitorRect;
-        }
-
-        // otherwise, the center is at some weird spot: return unionRect
-        if (screenLog.isLoggable(PlatformLogger.Level.FINER)) {
-            screenLog.finer("Center point is somewhere strange - return union of all bounds.");
-        }
-        return unionRect;
-    }
-
-    /**
      * From the DisplayChangedListener interface; devices do not need
      * to react to this event.
      */
--- a/src/java.desktop/unix/classes/sun/java2d/opengl/GLXGraphicsConfig.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.desktop/unix/classes/sun/java2d/opengl/GLXGraphicsConfig.java	Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2019, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -41,6 +41,7 @@
 import java.awt.image.DirectColorModel;
 import java.awt.image.VolatileImage;
 import java.awt.image.WritableRaster;
+
 import sun.awt.X11ComponentPeer;
 import sun.awt.X11GraphicsConfig;
 import sun.awt.X11GraphicsDevice;
@@ -51,15 +52,18 @@
 import sun.java2d.SunGraphics2D;
 import sun.java2d.Surface;
 import sun.java2d.SurfaceData;
+import sun.java2d.opengl.GLXSurfaceData.GLXVSyncOffScreenSurfaceData;
 import sun.java2d.pipe.hw.AccelSurface;
 import sun.java2d.pipe.hw.AccelTypedVolatileImage;
 import sun.java2d.pipe.hw.ContextCapabilities;
-import static sun.java2d.opengl.OGLSurfaceData.*;
-import static sun.java2d.opengl.OGLContext.*;
-import static sun.java2d.opengl.OGLContext.OGLContextCaps.*;
-import sun.java2d.opengl.GLXSurfaceData.GLXVSyncOffScreenSurfaceData;
 
-public class GLXGraphicsConfig
+import static sun.java2d.opengl.OGLContext.OGLContextCaps;
+import static sun.java2d.opengl.OGLContext.OGLContextCaps.CAPS_DOUBLEBUFFERED;
+import static sun.java2d.opengl.OGLContext.OGLContextCaps.CAPS_EXT_FBOBJECT;
+import static sun.java2d.opengl.OGLSurfaceData.FBOBJECT;
+import static sun.java2d.opengl.OGLSurfaceData.TEXTURE;
+
+public final class GLXGraphicsConfig
     extends X11GraphicsConfig
     implements OGLGraphicsConfig
 {
@@ -172,11 +176,6 @@
         return pConfigInfo;
     }
 
-    /**
-     * {@inheritDoc}
-     *
-     * @see sun.java2d.pipe.hw.BufferedContextProvider#getContext
-     */
     @Override
     public final OGLContext getContext() {
         return context;
@@ -211,7 +210,7 @@
     }
 
     public String toString() {
-        return ("GLXGraphicsConfig[dev="+screen+
+        return ("GLXGraphicsConfig[dev="+getDevice()+
                 ",vis=0x"+Integer.toHexString(visual)+
                 "]");
     }
@@ -386,11 +385,6 @@
         return imageCaps;
     }
 
-    /**
-     * {@inheritDoc}
-     *
-     * @see sun.java2d.pipe.hw.AccelGraphicsConfig#createCompatibleVolatileImage
-     */
     @Override
     public VolatileImage
         createCompatibleVolatileImage(int width, int height,
@@ -414,11 +408,6 @@
         return vi;
     }
 
-    /**
-     * {@inheritDoc}
-     *
-     * @see sun.java2d.pipe.hw.AccelGraphicsConfig#getContextCapabilities
-     */
     @Override
     public ContextCapabilities getContextCapabilities() {
         return oglCaps;
--- a/src/java.desktop/unix/native/common/awt/awt_GraphicsEnv.h	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.desktop/unix/native/common/awt/awt_GraphicsEnv.h	Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2019, 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
@@ -62,12 +62,6 @@
 struct X11GraphicsConfigIDs {
     jfieldID aData;
     jfieldID bitsPerPixel;
-    jfieldID screen;
-};
-
-/* fieldIDs for X11GraphicsDevice fields that may be accessed from C */
-struct X11GraphicsDeviceIDs {
-    jfieldID screen;
 };
 
 #endif /* _AWT_GRAPHICSENV_H_ */
--- a/src/java.desktop/unix/native/libawt_xawt/awt/awt_GraphicsEnv.c	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.desktop/unix/native/libawt_xawt/awt/awt_GraphicsEnv.c	Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2019, 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
@@ -96,7 +96,6 @@
     } while (0)
 
 struct X11GraphicsConfigIDs x11GraphicsConfigIDs;
-struct X11GraphicsDeviceIDs x11GraphicsDeviceIDs;
 
 #ifndef HEADLESS
 int awtCreateX11Colormap(AwtGraphicsConfigDataPtr adata);
@@ -138,10 +137,6 @@
 typedef Status XineramaGetInfoFunc(Display* display, int screen_number,
          XRectangle* framebuffer_rects, unsigned char* framebuffer_hints,
          int* num_framebuffers);
-typedef Status XineramaGetCenterHintFunc(Display* display, int screen_number,
-                                         int* x, int* y);
-
-XineramaGetCenterHintFunc* XineramaSolarisCenterFunc = NULL;
 #endif
 
 Bool usingXinerama = False;
@@ -152,32 +147,20 @@
 {
     x11GraphicsConfigIDs.aData = NULL;
     x11GraphicsConfigIDs.bitsPerPixel = NULL;
-    x11GraphicsConfigIDs.screen = NULL;
 
     x11GraphicsConfigIDs.aData = (*env)->GetFieldID (env, cls, "aData", "J");
     CHECK_NULL(x11GraphicsConfigIDs.aData);
     x11GraphicsConfigIDs.bitsPerPixel = (*env)->GetFieldID (env, cls, "bitsPerPixel", "I");
     CHECK_NULL(x11GraphicsConfigIDs.bitsPerPixel);
-    x11GraphicsConfigIDs.screen = (*env)->GetFieldID (env, cls, "screen", "Lsun/awt/X11GraphicsDevice;");
-    CHECK_NULL(x11GraphicsConfigIDs.screen);
 
     if (x11GraphicsConfigIDs.aData == NULL ||
-            x11GraphicsConfigIDs.bitsPerPixel == NULL ||
-        x11GraphicsConfigIDs.screen == NULL) {
+            x11GraphicsConfigIDs.bitsPerPixel == NULL) {
 
             JNU_ThrowNoSuchFieldError(env, "Can't find a field");
             return;
         }
 }
 
-JNIEXPORT void JNICALL
-Java_sun_awt_X11GraphicsDevice_initIDs (JNIEnv *env, jclass cls)
-{
-    x11GraphicsDeviceIDs.screen = NULL;
-    x11GraphicsDeviceIDs.screen = (*env)->GetFieldID (env, cls, "screen", "I");
-    DASSERT(x11GraphicsDeviceIDs.screen);
-}
-
 #ifndef HEADLESS
 
 /*
@@ -207,6 +190,8 @@
     visualList = XGetVisualInfo(awt_display,
                                 mask, vinfo, &visualsMatched);
     if (visualList) {
+        int id = -1;
+        VisualID defaultVisual = XVisualIDFromVisual(DefaultVisual(awt_display, vinfo->screen));
         defaultConfig = ZALLOC(_AwtGraphicsConfigData);
         for (i = 0; i < visualsMatched; i++) {
             memcpy(&defaultConfig->awt_visInfo, &visualList[i], sizeof(XVisualInfo));
@@ -215,19 +200,30 @@
             /* we can't use awtJNI_CreateColorData here, because it'll pull,
                SystemColor, which in turn will cause toolkit to be reinitialized */
             if (awtCreateX11Colormap(defaultConfig)) {
-                /* Allocate white and black pixels for this visual */
-                color.flags = DoRed | DoGreen | DoBlue;
-                color.red = color.green = color.blue = 0x0000;
-                XAllocColor(awt_display, defaultConfig->awt_cmap, &color);
-                x11Screens[visualList[i].screen].blackpixel = color.pixel;
-                color.flags = DoRed | DoGreen | DoBlue;
-                color.red = color.green = color.blue = 0xffff;
-                XAllocColor(awt_display, defaultConfig->awt_cmap, &color);
-                x11Screens[visualList[i].screen].whitepixel = color.pixel;
+                if (visualList[i].visualid == defaultVisual) {
+                    id = i;
+                    break;
+                } else if (-1 == id) {
+                    // Keep 1st match for fallback
+                    id = i;
+                }
+            }
+        }
+        if (-1 != id) {
+            memcpy(&defaultConfig->awt_visInfo, &visualList[id], sizeof(XVisualInfo));
+            defaultConfig->awt_depth = visualList[id].depth;
+            /* Allocate white and black pixels for this visual */
+            color.flags = DoRed | DoGreen | DoBlue;
+            color.red = color.green = color.blue = 0x0000;
+            XAllocColor(awt_display, defaultConfig->awt_cmap, &color);
+            x11Screens[visualList[id].screen].blackpixel = color.pixel;
+            color.flags = DoRed | DoGreen | DoBlue;
+            color.red = color.green = color.blue = 0xffff;
+            XAllocColor(awt_display, defaultConfig->awt_cmap, &color);
+            x11Screens[visualList[id].screen].whitepixel = color.pixel;
 
-                XFree(visualList);
-                return defaultConfig;
-            }
+            XFree(visualList);
+            return defaultConfig;
         }
         XFree(visualList);
         free((void *)defaultConfig);
@@ -645,16 +641,12 @@
     int32_t locNumScr = 0;
     /* load and run XineramaGetInfo */
     char* XineramaGetInfoName = "XineramaGetInfo";
-    char* XineramaGetCenterHintName = "XineramaGetCenterHint";
     XineramaGetInfoFunc* XineramaSolarisFunc = NULL;
 
     /* load library */
     libHandle = dlopen(JNI_LIB_NAME("Xext"), RTLD_LAZY | RTLD_GLOBAL);
     if (libHandle != NULL) {
         XineramaSolarisFunc = (XineramaGetInfoFunc*)dlsym(libHandle, XineramaGetInfoName);
-        XineramaSolarisCenterFunc =
-            (XineramaGetCenterHintFunc*)dlsym(libHandle, XineramaGetCenterHintName);
-
         if (XineramaSolarisFunc != NULL) {
             DTRACE_PRINTLN("calling XineramaGetInfo func on Solaris");
             if ((*XineramaSolarisFunc)(awt_display, 0, &fbrects[0],
@@ -1589,38 +1581,6 @@
 #endif /* HEADLESS */
 }
 
-/*
- * Can return NULL.
- *
- * Class:     sun_awt_X11GraphicsEnvironment
- * Method:    getXineramaCenterPoint
- * Signature: ()Ljava/awt/Point
- */
-JNIEXPORT jobject JNICALL
-Java_sun_awt_X11GraphicsEnvironment_getXineramaCenterPoint(JNIEnv *env,
-    jobject this)
-{
-    jobject point = NULL;
-#ifndef HEADLESS    /* return NULL in HEADLESS, Linux */
-#if !defined(__linux__) && !defined(MACOSX)
-    int x,y;
-
-    AWT_LOCK();
-    DASSERT(usingXinerama);
-    if (XineramaSolarisCenterFunc != NULL) {
-        (XineramaSolarisCenterFunc)(awt_display, 0, &x, &y);
-        point = JNU_NewObjectByName(env, "java/awt/Point","(II)V", x, y);
-        DASSERT(point);
-    } else {
-        DTRACE_PRINTLN("unable to call XineramaSolarisCenterFunc: symbol is null");
-    }
-    AWT_FLUSH_UNLOCK();
-#endif /* __linux __ || MACOSX */
-#endif /* HEADLESS */
-    return point;
-}
-
-
 /**
  * Begin DisplayMode/FullScreen support
  */
--- a/src/java.desktop/unix/native/libawt_xawt/awt/awt_InputMethod.c	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.desktop/unix/native/libawt_xawt/awt/awt_InputMethod.c	Wed Feb 13 13:22:15 2019 -0500
@@ -676,9 +676,10 @@
         return NULL;
     }
     statusWindow->w = status;
-    //12-point font
+    //12, 13-point fonts
     statusWindow->fontset = XCreateFontSet(dpy,
-                                           "-*-*-medium-r-normal-*-*-120-*-*-*-*",
+                                           "-*-*-medium-r-normal-*-*-120-*-*-*-*," \
+                                           "-*-*-medium-r-normal-*-*-130-*-*-*-*",
                                            &mclr, &mccr, &dsr);
     /* In case we didn't find the font set, release the list of missing characters */
     if (mccr > 0) {
--- a/src/java.desktop/unix/native/libawt_xawt/awt/gtk3_interface.c	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.desktop/unix/native/libawt_xawt/awt/gtk3_interface.c	Wed Feb 13 13:22:15 2019 -0500
@@ -1612,7 +1612,11 @@
 
     GtkStateFlags flags = get_gtk_flags(state_type);
     if (expander_style == GTK_EXPANDER_EXPANDED) {
-        flags |= GTK_STATE_FLAG_ACTIVE;
+        if (gtk3_version_3_14) {
+            flags |= GTK_STATE_FLAG_CHECKED;
+        } else {
+            flags |= GTK_STATE_FLAG_ACTIVE;
+        }
     }
 
     fp_gtk_style_context_set_state(context, flags);
--- a/src/java.desktop/windows/classes/sun/awt/Win32GraphicsConfig.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.desktop/windows/classes/sun/awt/Win32GraphicsConfig.java	Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2009, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2019, 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,28 +33,22 @@
 import java.awt.GraphicsDevice;
 import java.awt.GraphicsEnvironment;
 import java.awt.Image;
-import java.awt.ImageCapabilities;
 import java.awt.Rectangle;
-import java.awt.Toolkit;
 import java.awt.Transparency;
-import java.awt.Window;
 import java.awt.geom.AffineTransform;
-import java.awt.image.BufferedImage;
 import java.awt.image.ColorModel;
 import java.awt.image.DirectColorModel;
-import java.awt.image.Raster;
 import java.awt.image.VolatileImage;
 import java.awt.image.WritableRaster;
 
-import sun.awt.windows.WComponentPeer;
 import sun.awt.image.OffScreenImage;
 import sun.awt.image.SunVolatileImage;
 import sun.awt.image.SurfaceManager;
+import sun.awt.windows.WComponentPeer;
 import sun.java2d.SurfaceData;
-import sun.java2d.InvalidPipeException;
+import sun.java2d.loops.CompositeType;
 import sun.java2d.loops.RenderLoops;
 import sun.java2d.loops.SurfaceType;
-import sun.java2d.loops.CompositeType;
 import sun.java2d.windows.GDIWindowSurfaceData;
 
 /**
@@ -67,7 +61,7 @@
 public class Win32GraphicsConfig extends GraphicsConfiguration
     implements DisplayChangedListener, SurfaceManager.ProxiedGraphicsConfig
 {
-    protected Win32GraphicsDevice screen;
+    private final Win32GraphicsDevice device;
     protected int visual;  //PixelFormatID
     protected RenderLoops solidloops;
 
@@ -98,7 +92,7 @@
      */
     @Deprecated
     public Win32GraphicsConfig(GraphicsDevice device, int visualnum) {
-        this.screen = (Win32GraphicsDevice)device;
+        this.device = (Win32GraphicsDevice)device;
         this.visual = visualnum;
         ((Win32GraphicsDevice)device).addDisplayChangedListener(this);
     }
@@ -106,8 +100,9 @@
     /**
      * Return the graphics device associated with this configuration.
      */
+    @Override
     public Win32GraphicsDevice getDevice() {
-        return screen;
+        return device;
     }
 
     /**
@@ -117,8 +112,9 @@
         return visual;
     }
 
+    @Override
     public Object getProxyKey() {
-        return screen;
+        return device;
     }
 
     /**
@@ -139,8 +135,9 @@
     /**
      * Returns the color model associated with this configuration.
      */
+    @Override
     public synchronized ColorModel getColorModel() {
-        return screen.getColorModel();
+        return device.getColorModel();
     }
 
     /**
@@ -152,13 +149,14 @@
      * to reflect the new situation.
      */
     public ColorModel getDeviceColorModel() {
-        return screen.getDynamicColorModel();
+        return device.getDynamicColorModel();
     }
 
     /**
      * Returns the color model associated with this configuration that
      * supports the specified transparency.
      */
+    @Override
     public ColorModel getColorModel(int transparency) {
         switch (transparency) {
         case Transparency.OPAQUE:
@@ -181,9 +179,10 @@
      * increasing to the right and Y coordinates increasing downwards.
      * For image buffers, this Transform will be the Identity transform.
      */
+    @Override
     public AffineTransform getDefaultTransform() {
-        double scaleX = screen.getDefaultScaleX();
-        double scaleY = screen.getDefaultScaleY();
+        double scaleX = device.getDefaultScaleX();
+        double scaleY = device.getDefaultScaleY();
         return AffineTransform.getScaleInstance(scaleX, scaleY);
     }
 
@@ -206,6 +205,7 @@
      * For image buffers, this Transform will be the Identity transform,
      * since there is no valid distance measurement.
      */
+    @Override
     public AffineTransform getNormalizingTransform() {
         Win32GraphicsEnvironment ge = (Win32GraphicsEnvironment)
             GraphicsEnvironment.getLocalGraphicsEnvironment();
@@ -215,19 +215,22 @@
     }
 
     public String toString() {
-        return (super.toString()+"[dev="+screen+",pixfmt="+visual+"]");
+        return (super.toString()+"[dev="+device+",pixfmt="+visual+"]");
     }
 
     private native Rectangle getBounds(int screen);
 
+    @Override
     public Rectangle getBounds() {
-        return getBounds(screen.getScreen());
+        return getBounds(device.getScreen());
     }
 
+    @Override
     public synchronized void displayChanged() {
         solidloops = null;
     }
 
+    @Override
     public void paletteChanged() {}
 
     /**
--- a/src/java.desktop/windows/classes/sun/awt/Win32GraphicsDevice.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.desktop/windows/classes/sun/awt/Win32GraphicsDevice.java	Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2019, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -26,28 +26,27 @@
 package sun.awt;
 
 import java.awt.AWTPermission;
-import java.awt.GraphicsDevice;
-import java.awt.GraphicsConfiguration;
-import java.awt.GraphicsEnvironment;
 import java.awt.DisplayMode;
 import java.awt.EventQueue;
 import java.awt.Frame;
+import java.awt.GraphicsConfiguration;
+import java.awt.GraphicsDevice;
+import java.awt.GraphicsEnvironment;
 import java.awt.Rectangle;
 import java.awt.Window;
 import java.awt.event.WindowAdapter;
 import java.awt.event.WindowEvent;
 import java.awt.event.WindowListener;
-import java.awt.geom.Point2D;
 import java.awt.image.ColorModel;
+import java.awt.peer.WindowPeer;
 import java.util.ArrayList;
 import java.util.Vector;
-import java.awt.peer.WindowPeer;
-import java.security.AccessController;
+
 import sun.awt.windows.WWindowPeer;
 import sun.java2d.SunGraphicsEnvironment;
 import sun.java2d.opengl.WGLGraphicsConfig;
 import sun.java2d.windows.WindowsFlags;
-import sun.security.action.GetPropertyAction;
+
 import static sun.awt.Win32GraphicsEnvironment.debugScaleX;
 import static sun.awt.Win32GraphicsEnvironment.debugScaleY;
 
@@ -131,6 +130,7 @@
      * @see #TYPE_PRINTER
      * @see #TYPE_IMAGE_BUFFER
      */
+    @Override
     public int getType() {
         return TYPE_RASTER_SCREEN;
     }
@@ -189,6 +189,7 @@
      * Returns the identification string associated with this graphics
      * device.
      */
+    @Override
     public String getIDstring() {
         return idString;
     }
@@ -198,6 +199,7 @@
      * Returns all of the graphics
      * configurations associated with this graphics device.
      */
+    @Override
     public GraphicsConfiguration[] getConfigurations() {
         if (configs==null) {
             if (WindowsFlags.isOGLEnabled() && isDefaultDevice()) {
@@ -290,6 +292,7 @@
      * Returns the default graphics configuration
      * associated with this graphics device.
      */
+    @Override
     public GraphicsConfiguration getDefaultConfiguration() {
         if (defaultConfig == null) {
             // first try to create a WGLGraphicsConfig if OGL is enabled
@@ -329,6 +332,7 @@
         return defaultConfig;
     }
 
+    @Override
     public String toString() {
         return valid ? descString + "]" : descString + ", removed]";
     }
@@ -519,6 +523,7 @@
      * Called from Win32GraphicsEnvironment when the display settings have
      * changed.
      */
+    @Override
     public void displayChanged() {
         dynamicColorModel = null;
         defaultConfig = null;
@@ -532,6 +537,7 @@
      * Part of the DisplayChangedListener interface: devices
      * do not need to react to this event
      */
+    @Override
     public void paletteChanged() {
     }
 
@@ -659,6 +665,7 @@
         // Fix for 6709453. Using invokeLater to avoid listening
         // for the events already posted to the queue.
         EventQueue.invokeLater(new Runnable() {
+            @Override
             public void run() {
                 w.addWindowListener(fsWindowListener);
             }
--- a/src/java.desktop/windows/classes/sun/awt/windows/WRobotPeer.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.desktop/windows/classes/sun/awt/windows/WRobotPeer.java	Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2019, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -32,23 +32,11 @@
 
 import sun.java2d.SunGraphicsEnvironment;
 
-final class WRobotPeer extends WObjectPeer implements RobotPeer
-{
-    WRobotPeer() {
-        create();
-    }
+final class WRobotPeer implements RobotPeer {
+
     WRobotPeer(GraphicsDevice screen) {
-        create();
     }
 
-    private synchronized native void _dispose();
-
-    @Override
-    protected void disposeImpl() {
-        _dispose();
-    }
-
-    public native void create();
     public native void mouseMoveImpl(int x, int y);
     @Override
     public void mouseMove(int x, int y) {
--- a/src/java.desktop/windows/classes/sun/java2d/d3d/D3DGraphicsConfig.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.desktop/windows/classes/sun/java2d/d3d/D3DGraphicsConfig.java	Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2019, 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
@@ -49,14 +49,14 @@
 import static sun.java2d.pipe.hw.AccelSurface.*;
 import static sun.java2d.d3d.D3DContext.D3DContextCaps.*;
 
-public class D3DGraphicsConfig
+public final class D3DGraphicsConfig
     extends Win32GraphicsConfig
     implements AccelGraphicsConfig
 {
     private static ImageCapabilities imageCaps = new D3DImageCaps();
 
     private BufferCapabilities bufferCaps;
-    private D3DGraphicsDevice device;
+    private final D3DGraphicsDevice device;
 
     @SuppressWarnings("deprecation")
     protected D3DGraphicsConfig(D3DGraphicsDevice device) {
@@ -107,7 +107,7 @@
 
     @Override
     public String toString() {
-        return ("D3DGraphicsConfig[dev="+screen+",pixfmt="+visual+"]");
+        return ("D3DGraphicsConfig[dev="+device+",pixfmt="+visual+"]");
     }
 
     /**
@@ -263,21 +263,11 @@
         return device;
     }
 
-    /**
-     * {@inheritDoc}
-     *
-     * @see sun.java2d.pipe.hw.BufferedContextProvider#getContext
-     */
     @Override
     public D3DContext getContext() {
         return device.getContext();
     }
 
-    /**
-     * {@inheritDoc}
-     *
-     * @see sun.java2d.pipe.hw.AccelGraphicsConfig#createCompatibleVolatileImage
-     */
     @Override
     public VolatileImage
         createCompatibleVolatileImage(int width, int height,
@@ -313,11 +303,6 @@
         return vi;
     }
 
-    /**
-     * {@inheritDoc}
-     *
-     * @see sun.java2d.pipe.hw.AccelGraphicsConfig#getContextCapabilities
-     */
     @Override
     public ContextCapabilities getContextCapabilities() {
         return device.getContextCapabilities();
--- a/src/java.desktop/windows/classes/sun/java2d/d3d/D3DGraphicsDevice.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.desktop/windows/classes/sun/java2d/d3d/D3DGraphicsDevice.java	Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2019, 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
@@ -42,17 +42,19 @@
 import sun.awt.AWTAccessor.ComponentAccessor;
 import sun.awt.Win32GraphicsDevice;
 import sun.awt.windows.WWindowPeer;
+import sun.java2d.d3d.D3DContext.D3DContextCaps;
 import sun.java2d.pipe.hw.ContextCapabilities;
 import sun.java2d.windows.WindowsFlags;
-import static sun.java2d.d3d.D3DContext.D3DContextCaps.*;
-import sun.java2d.d3d.D3DContext.D3DContextCaps;
+
+import static sun.java2d.d3d.D3DContext.D3DContextCaps.CAPS_DEVICE_OK;
+import static sun.java2d.d3d.D3DContext.D3DContextCaps.CAPS_EMPTY;
 
 /**
  * This class implements D3D-specific functionality, such as fullscreen
  * exclusive mode and display changes.  It is kept separate from
  * Win32GraphicsDevice to help avoid overburdening the parent class.
  */
-public class D3DGraphicsDevice extends Win32GraphicsDevice {
+public final class D3DGraphicsDevice extends Win32GraphicsDevice {
     private D3DContext context;
 
     private static boolean d3dAvailable;
--- a/src/java.desktop/windows/classes/sun/java2d/opengl/WGLGraphicsConfig.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.desktop/windows/classes/sun/java2d/opengl/WGLGraphicsConfig.java	Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2004, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2004, 2019, 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,6 +38,7 @@
 import java.awt.image.DataBuffer;
 import java.awt.image.DirectColorModel;
 import java.awt.image.VolatileImage;
+
 import sun.awt.Win32GraphicsConfig;
 import sun.awt.Win32GraphicsDevice;
 import sun.awt.image.SunVolatileImage;
@@ -48,15 +49,19 @@
 import sun.java2d.SunGraphics2D;
 import sun.java2d.Surface;
 import sun.java2d.SurfaceData;
+import sun.java2d.opengl.OGLContext.OGLContextCaps;
 import sun.java2d.pipe.hw.AccelSurface;
 import sun.java2d.pipe.hw.AccelTypedVolatileImage;
 import sun.java2d.pipe.hw.ContextCapabilities;
-import static sun.java2d.opengl.OGLContext.OGLContextCaps.*;
-import static sun.java2d.opengl.WGLSurfaceData.*;
-import sun.java2d.opengl.OGLContext.OGLContextCaps;
 import sun.java2d.windows.GDIWindowSurfaceData;
 
-public class WGLGraphicsConfig
+import static sun.java2d.opengl.OGLContext.OGLContextCaps.CAPS_DOUBLEBUFFERED;
+import static sun.java2d.opengl.OGLContext.OGLContextCaps.CAPS_EXT_FBOBJECT;
+import static sun.java2d.opengl.WGLSurfaceData.FBOBJECT;
+import static sun.java2d.opengl.WGLSurfaceData.TEXTURE;
+import static sun.java2d.opengl.WGLSurfaceData.WGLVSyncOffScreenSurfaceData;
+
+public final class WGLGraphicsConfig
     extends Win32GraphicsConfig
     implements OGLGraphicsConfig
 {
@@ -93,10 +98,12 @@
                            new WGLGCDisposerRecord(pConfigInfo));
     }
 
+    @Override
     public Object getProxyKey() {
         return this;
     }
 
+    @Override
     public SurfaceData createManagedSurface(int w, int h, int transparency) {
         return WGLSurfaceData.createData(this, w, h,
                                          getColorModel(transparency),
@@ -127,6 +134,7 @@
             if (cfginfo != 0L) {
                 OGLContext.setScratchSurface(cfginfo);
                 rq.flushAndInvokeNow(new Runnable() {
+                    @Override
                     public void run() {
                         ids[0] = OGLContext.getOGLIdString();
                     }
@@ -157,6 +165,7 @@
             this.screen = screen;
             this.pixfmt = pixfmt;
         }
+        @Override
         public void run() {
             cfginfo = getWGLConfigInfo(screen, pixfmt);
         }
@@ -183,11 +192,6 @@
         return pConfigInfo;
     }
 
-    /**
-     * {@inheritDoc}
-     *
-     * @see sun.java2d.pipe.hw.BufferedContextProvider#getContext
-     */
     @Override
     public final OGLContext getContext() {
         return context;
@@ -198,6 +202,7 @@
         public WGLGCDisposerRecord(long pCfgInfo) {
             this.pCfgInfo = pCfgInfo;
         }
+        @Override
         public void dispose() {
             if (pCfgInfo != 0) {
                 OGLRenderQueue.disposeGraphicsConfig(pCfgInfo);
@@ -242,7 +247,7 @@
 
     @Override
     public String toString() {
-        return ("WGLGraphicsConfig[dev="+screen+",pixfmt="+visual+"]");
+        return ("WGLGraphicsConfig[dev="+getDevice()+",pixfmt="+visual+"]");
     }
 
     /**
@@ -388,6 +393,7 @@
         private WGLImageCaps() {
             super(true);
         }
+        @Override
         public boolean isTrueVolatile() {
             return true;
         }
@@ -398,11 +404,6 @@
         return imageCaps;
     }
 
-    /**
-     * {@inheritDoc}
-     *
-     * @see sun.java2d.pipe.hw.AccelGraphicsConfig#createCompatibleVolatileImage
-     */
     @Override
     public VolatileImage
         createCompatibleVolatileImage(int width, int height,
@@ -426,11 +427,6 @@
         return vi;
     }
 
-    /**
-     * {@inheritDoc}
-     *
-     * @see sun.java2d.pipe.hw.AccelGraphicsConfig#getContextCapabilities
-     */
     @Override
     public ContextCapabilities getContextCapabilities() {
         return oglCaps;
--- a/src/java.desktop/windows/native/libawt/windows/awt_Robot.cpp	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.desktop/windows/native/libawt/windows/awt_Robot.cpp	Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2019, 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,32 +23,17 @@
  * questions.
  */
 
-#include "awt.h"
-#include "awt_Toolkit.h"
-#include "awt_Component.h"
-#include "awt_Robot.h"
 #include "sun_awt_windows_WRobotPeer.h"
 #include "java_awt_event_InputEvent.h"
+#include "awt_Component.h"
 #include <winuser.h>
 
-AwtRobot::AwtRobot( jobject peer )
-{
-    JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
-    m_peerObject = env->NewWeakGlobalRef(peer);
-    JNU_CHECK_EXCEPTION(env);
-    JNI_SET_PDATA(peer, this);
-}
-
-AwtRobot::~AwtRobot()
-{
-}
-
 static int signum(int i) {
   // special version of signum which returns 1 when value is 0
   return i >= 0 ? 1 : -1;
 }
 
-void AwtRobot::MouseMove( jint x, jint y)
+static void MouseMove(jint x, jint y)
 {
     INPUT mouseInput = {0};
     mouseInput.type = INPUT_MOUSE;
@@ -59,7 +44,7 @@
     ::SendInput(1, &mouseInput, sizeof(mouseInput));
 }
 
-void AwtRobot::MousePress( jint buttonMask )
+static void MousePress(jint buttonMask)
 {
     DWORD dwFlags = 0L;
     // According to MSDN: Software Driving Software
@@ -101,7 +86,7 @@
     ::SendInput(1, &mouseInput, sizeof(mouseInput));
 }
 
-void AwtRobot::MouseRelease( jint buttonMask )
+static void MouseRelease(jint buttonMask)
 {
     DWORD dwFlags = 0L;
     // According to MSDN: Software Driving Software
@@ -144,11 +129,11 @@
     ::SendInput(1, &mouseInput, sizeof(mouseInput));
 }
 
-void AwtRobot::MouseWheel (jint wheelAmt) {
+static void MouseWheel(jint wheelAmt) {
     mouse_event(MOUSEEVENTF_WHEEL, 0, 0, wheelAmt * -1 * WHEEL_DELTA, 0);
 }
 
-inline jint AwtRobot::WinToJavaPixel(USHORT r, USHORT g, USHORT b)
+inline jint WinToJavaPixel(USHORT r, USHORT g, USHORT b)
 {
     jint value =
             0xFF << 24 | // alpha channel is always turned all the way up
@@ -158,7 +143,7 @@
     return value;
 }
 
-void AwtRobot::GetRGBPixels(jint x, jint y, jint width, jint height, jintArray pixelArray)
+static void GetRGBPixels(jint x, jint y, jint width, jint height, jintArray pixelArray)
 {
     DASSERT(width > 0 && height > 0);
 
@@ -255,17 +240,7 @@
     ::DeleteDC(hdcScreen);
 }
 
-void AwtRobot::KeyPress( jint jkey )
-{
-    DoKeyEvent(jkey, 0); // no flags means key down
-}
-
-void AwtRobot::KeyRelease( jint jkey )
-{
-    DoKeyEvent(jkey, KEYEVENTF_KEYUP);
-}
-
-void AwtRobot::DoKeyEvent( jint jkey, DWORD dwFlags )
+static void DoKeyEvent(jint jkey, DWORD dwFlags)
 {
     UINT        vkey;
     UINT        modifiers;
@@ -297,48 +272,16 @@
     }
 }
 
-//
-// utility function to get the C++ object from the Java one
-//
-// (static)
-AwtRobot * AwtRobot::GetRobot( jobject self )
-{
-    JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
-    AwtRobot * robot = (AwtRobot *)JNI_GET_PDATA(self);
-    DASSERT( !::IsBadWritePtr( robot, sizeof(AwtRobot)));
-    return robot;
-}
-
-//////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////
 // Native method declarations
 //
 
-JNIEXPORT void JNICALL Java_sun_awt_windows_WRobotPeer_create(
-    JNIEnv * env, jobject self)
-{
-    TRY;
-
-    new AwtRobot(self);
-
-    CATCH_BAD_ALLOC;
-}
-
-JNIEXPORT void JNICALL Java_sun_awt_windows_WRobotPeer__1dispose(
-    JNIEnv *env, jobject self)
-{
-    TRY_NO_VERIFY;
-
-    AwtObject::_Dispose(self);
-
-    CATCH_BAD_ALLOC;
-}
-
 JNIEXPORT void JNICALL Java_sun_awt_windows_WRobotPeer_mouseMoveImpl(
     JNIEnv * env, jobject self, jint x, jint y)
 {
     TRY;
 
-    AwtRobot::GetRobot(self)->MouseMove(x, y);
+    MouseMove(x, y);
 
     CATCH_BAD_ALLOC;
 }
@@ -348,7 +291,7 @@
 {
     TRY;
 
-    AwtRobot::GetRobot(self)->MousePress(buttons);
+    MousePress(buttons);
 
     CATCH_BAD_ALLOC;
 }
@@ -358,7 +301,7 @@
 {
     TRY;
 
-    AwtRobot::GetRobot(self)->MouseRelease(buttons);
+    MouseRelease(buttons);
 
     CATCH_BAD_ALLOC;
 }
@@ -368,7 +311,7 @@
 {
     TRY;
 
-    AwtRobot::GetRobot(self)->MouseWheel(wheelAmt);
+    MouseWheel(wheelAmt);
 
     CATCH_BAD_ALLOC;
 }
@@ -378,7 +321,7 @@
 {
     TRY;
 
-    AwtRobot::GetRobot(self)->GetRGBPixels(x, y, width, height, pixelArray);
+    GetRGBPixels(x, y, width, height, pixelArray);
 
     CATCH_BAD_ALLOC;
 }
@@ -388,7 +331,7 @@
 {
     TRY;
 
-    AwtRobot::GetRobot(self)->KeyPress(javakey);
+    DoKeyEvent(javakey, 0); // no flags means key down
 
     CATCH_BAD_ALLOC;
 }
@@ -398,7 +341,7 @@
 {
     TRY;
 
-    AwtRobot::GetRobot(self)->KeyRelease(javakey);
+    DoKeyEvent(javakey, KEYEVENTF_KEYUP);
 
     CATCH_BAD_ALLOC;
 }
--- a/src/java.desktop/windows/native/libawt/windows/awt_Robot.h	Tue Feb 12 11:58:41 2019 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,58 +0,0 @@
-/*
- * Copyright (c) 1998, 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.  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.
- */
-
-#ifndef AWT_ROBOT_H
-#define AWT_ROBOT_H
-
-#include "awt_Toolkit.h"
-#include "awt_Object.h"
-#include "sun_awt_windows_WRobotPeer.h"
-#include "jlong.h"
-
-class AwtRobot : public AwtObject
-{
-    public:
-        AwtRobot( jobject peer );
-        virtual ~AwtRobot();
-
-        void MouseMove( jint x, jint y);
-        void MousePress( jint buttonMask );
-        void MouseRelease( jint buttonMask );
-
-        void MouseWheel(jint wheelAmt);
-        jint getNumberOfButtons();
-
-        void GetRGBPixels(jint x, jint y, jint width, jint height, jintArray pixelArray);
-
-        void KeyPress( jint key );
-        void KeyRelease( jint key );
-        static AwtRobot * GetRobot( jobject self );
-
-    private:
-        void DoKeyEvent( jint jkey, DWORD dwFlags );
-        static jint WinToJavaPixel(USHORT r, USHORT g, USHORT b);
-};
-
-#endif // AWT_ROBOT_H
--- a/src/java.net.http/share/classes/jdk/internal/net/http/MultiExchange.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.net.http/share/classes/jdk/internal/net/http/MultiExchange.java	Wed Feb 13 13:22:15 2019 -0500
@@ -259,7 +259,7 @@
 
     private boolean bodyIsPresent(Response r) {
         HttpHeaders headers = r.headers();
-        if (headers.firstValue("Content-length").isPresent())
+        if (headers.firstValueAsLong("Content-length").orElse(0L) != 0L)
             return true;
         if (headers.firstValue("Transfer-encoding").isPresent())
             return true;
--- a/src/java.net.http/share/classes/jdk/internal/net/http/Stream.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.net.http/share/classes/jdk/internal/net/http/Stream.java	Wed Feb 13 13:22:15 2019 -0500
@@ -597,10 +597,6 @@
         if (contentLength > 0) {
             h.setHeader("content-length", Long.toString(contentLength));
         }
-        URI uri = request.uri();
-        if (uri != null) {
-            h.setHeader("host", Utils.hostString(request));
-        }
         HttpHeaders sysh = filterHeaders(h.build());
         HttpHeaders userh = filterHeaders(request.getUserHeaders());
         // Filter context restricted from userHeaders
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/javac_ja.properties	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/javac_ja.properties	Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
 #
-# Copyright (c) 1999, 2018, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 1999, 2019, 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,7 +53,7 @@
 javac.opt.encoding=\u30BD\u30FC\u30B9\u30FB\u30D5\u30A1\u30A4\u30EB\u304C\u4F7F\u7528\u3059\u308B\u6587\u5B57\u30A8\u30F3\u30B3\u30FC\u30C7\u30A3\u30F3\u30B0\u3092\u6307\u5B9A\u3059\u308B
 javac.opt.profile=\u4F7F\u7528\u3055\u308C\u3066\u3044\u308BAPI\u304C\u6307\u5B9A\u3057\u305F\u30D7\u30ED\u30D5\u30A1\u30A4\u30EB\u3067\u4F7F\u7528\u53EF\u80FD\u304B\u3069\u3046\u304B\u3092\u78BA\u8A8D\u3057\u307E\u3059
 javac.opt.target=\u7279\u5B9A\u306EVM\u30D0\u30FC\u30B8\u30E7\u30F3\u7528\u306E\u30AF\u30E9\u30B9\u30FB\u30D5\u30A1\u30A4\u30EB\u3092\u751F\u6210\u3057\u307E\u3059\u3002\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u3066\u3044\u308B\u30D0\u30FC\u30B8\u30E7\u30F3: {0}
-javac.opt.release=\u7279\u5B9A\u306E\u30EA\u30EA\u30FC\u30B9\u7528\u306B\u306B\u30B3\u30F3\u30D1\u30A4\u30EB\u3057\u307E\u3059\u3002\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u3066\u3044\u308B\u30EA\u30EA\u30FC\u30B9: {0}
+javac.opt.release=\u7279\u5B9A\u306E\u30EA\u30EA\u30FC\u30B9\u7528\u306B\u30B3\u30F3\u30D1\u30A4\u30EB\u3057\u307E\u3059\u3002\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u3066\u3044\u308B\u30EA\u30EA\u30FC\u30B9: {0}
 javac.opt.source=\u6307\u5B9A\u3055\u308C\u305F\u30EA\u30EA\u30FC\u30B9\u3068\u30BD\u30FC\u30B9\u306E\u4E92\u63DB\u6027\u3092\u4FDD\u6301\u3057\u307E\u3059\u3002\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u3066\u3044\u308B\u30EA\u30EA\u30FC\u30B9: {0}
 javac.opt.Werror=\u8B66\u544A\u304C\u767A\u751F\u3057\u305F\u5834\u5408\u306B\u30B3\u30F3\u30D1\u30A4\u30EB\u3092\u7D42\u4E86\u3059\u308B
 javac.opt.A=\u6CE8\u91C8\u30D7\u30ED\u30BB\u30C3\u30B5\u306B\u6E21\u3055\u308C\u308B\u30AA\u30D7\u30B7\u30E7\u30F3
@@ -66,7 +66,7 @@
 javac.opt.arg.key.equals.value=key[=value]
 javac.opt.arg.path=<path>
 javac.opt.arg.mspath=<module-source-path>
-javac.opt.arg.m=<module-name>
+javac.opt.arg.m=<module>(,<module>)*
 javac.opt.arg.jdk=<jdk>|none
 javac.opt.arg.dirs=<dirs>
 javac.opt.arg.directory=<directory>
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/javac_zh_CN.properties	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/javac_zh_CN.properties	Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
 #
-# Copyright (c) 1999, 2018, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 1999, 2019, 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
@@ -34,7 +34,7 @@
 javac.opt.classpath=\u6307\u5B9A\u67E5\u627E\u7528\u6237\u7C7B\u6587\u4EF6\u548C\u6CE8\u91CA\u5904\u7406\u7A0B\u5E8F\u7684\u4F4D\u7F6E
 javac.opt.modulepath=\u6307\u5B9A\u67E5\u627E\u5E94\u7528\u7A0B\u5E8F\u6A21\u5757\u7684\u4F4D\u7F6E
 javac.opt.sourcepath=\u6307\u5B9A\u67E5\u627E\u8F93\u5165\u6E90\u6587\u4EF6\u7684\u4F4D\u7F6E
-javac.opt.m=\u53EA\u7F16\u8BD1\u6307\u5B9A\u7684\u6A21\u5757, \u8BF7\u68C0\u67E5\u65F6\u95F4\u6233
+javac.opt.m=\u53EA\u7F16\u8BD1\u6307\u5B9A\u7684\u6A21\u5757\uFF0C\u8BF7\u68C0\u67E5\u65F6\u95F4\u6233
 javac.opt.modulesourcepath=\u6307\u5B9A\u67E5\u627E\u591A\u4E2A\u6A21\u5757\u7684\u8F93\u5165\u6E90\u6587\u4EF6\u7684\u4F4D\u7F6E
 javac.opt.bootclasspath=\u8986\u76D6\u5F15\u5BFC\u7C7B\u6587\u4EF6\u7684\u4F4D\u7F6E
 javac.opt.system=\u8986\u76D6\u7CFB\u7EDF\u6A21\u5757\u4F4D\u7F6E
@@ -66,7 +66,7 @@
 javac.opt.arg.key.equals.value=key[=value]
 javac.opt.arg.path=<path>
 javac.opt.arg.mspath=<module-source-path>
-javac.opt.arg.m=<module-name>
+javac.opt.arg.m=<\u6A21\u5757>(,<\u6A21\u5757>)*
 javac.opt.arg.jdk=<jdk>|none
 javac.opt.arg.dirs=<dirs>
 javac.opt.arg.directory=<directory>
--- a/src/jdk.crypto.cryptoki/share/classes/sun/security/pkcs11/P11KeyStore.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/jdk.crypto.cryptoki/share/classes/sun/security/pkcs11/P11KeyStore.java	Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2019, 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
@@ -772,6 +772,8 @@
             }
             if (debug != null) {
                 dumpTokenMap();
+                debug.println("P11KeyStore load. Entry count: " +
+                        aliasMap.size());
             }
         } catch (KeyStoreException | PKCS11Exception e) {
             throw new IOException("load failed", e);
--- a/src/jdk.crypto.mscapi/windows/classes/sun/security/mscapi/CKeyStore.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/jdk.crypto.mscapi/windows/classes/sun/security/mscapi/CKeyStore.java	Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2019, 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
@@ -45,6 +45,8 @@
 import java.security.interfaces.RSAPrivateCrtKey;
 import java.util.*;
 
+import sun.security.util.Debug;
+
 /**
  * Implementation of key store for Windows using the Microsoft Crypto API.
  *
@@ -180,6 +182,7 @@
     private static final String KEYSTORE_COMPATIBILITY_MODE_PROP =
         "sun.security.mscapi.keyStoreCompatibilityMode";
     private final boolean keyStoreCompatibilityMode;
+    private static final Debug debug = Debug.getInstance("keystore");
 
     /*
      * The keystore entries.
@@ -710,6 +713,11 @@
         } catch (KeyStoreException e) {
             throw new IOException(e);
         }
+
+        if (debug != null) {
+            debug.println("MSCAPI keystore load: entry count: " +
+                    entries.size());
+        }
     }
 
     /**
--- a/src/jdk.httpserver/share/classes/com/sun/net/httpserver/HttpExchange.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/jdk.httpserver/share/classes/com/sun/net/httpserver/HttpExchange.java	Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2019, 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
@@ -171,6 +171,13 @@
      * this is set to the appropriate value depending on the response length parameter.
      * <p>
      * This method must be called prior to calling {@link #getResponseBody()}.
+     *
+     * @implNote This implementation allows the caller to instruct the
+     * server to force a connection close after the exchange terminates, by
+     * supplying a {@code Connection: close} header to the {@linkplain
+     * #getResponseHeaders() response headers} before {@code sendResponseHeaders}
+     * is called.
+     *
      * @param rCode the response code to send
      * @param responseLength if {@literal > 0}, specifies a fixed response
      *        body length and that exact number of bytes must be written
--- a/src/jdk.httpserver/share/classes/sun/net/httpserver/ExchangeImpl.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/jdk.httpserver/share/classes/sun/net/httpserver/ExchangeImpl.java	Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2019, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -32,6 +32,7 @@
 import java.lang.System.Logger;
 import java.lang.System.Logger.Level;
 import java.text.*;
+import java.util.stream.Stream;
 import com.sun.net.httpserver.*;
 
 class ExchangeImpl {
@@ -261,6 +262,22 @@
                 o.setWrappedStream (new FixedLengthOutputStream (this, ros, contentLen));
             }
         }
+
+        // A custom handler can request that the connection be
+        // closed after the exchange by supplying Connection: close
+        // to the response header. Nothing to do if the exchange is
+        // already set up to be closed.
+        if (!close) {
+            Stream<String> conheader =
+                    Optional.ofNullable(rspHdrs.get("Connection"))
+                    .map(List::stream).orElse(Stream.empty());
+            if (conheader.anyMatch("close"::equalsIgnoreCase)) {
+                Logger logger = server.getLogger();
+                logger.log (Level.DEBUG, "Connection: close requested by handler");
+                close = true;
+            }
+        }
+
         write (rspHdrs, tmpout);
         this.rspContentLen = contentLen;
         tmpout.flush() ;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/jdk.jcmd/linux/classes/sun/tools/ProcessHelper.java	Wed Feb 13 13:22:15 2019 -0500
@@ -0,0 +1,155 @@
+/*
+ * Copyright (c) 2019, 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 sun.tools;
+
+import java.io.IOException;
+import java.io.UncheckedIOException;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.util.jar.Attributes;
+import java.util.jar.JarFile;
+import java.util.jar.Manifest;
+import java.util.stream.Stream;
+
+/**
+ * A helper class that retrieves the main class name for
+ * a running Java process using the proc filesystem (procfs)
+ */
+public class ProcessHelper implements sun.tools.common.ProcessHelper {
+
+
+    private static final String CMD_PREFIX = "cmd:";
+    private static final ProcessHelper INSTANCE = new ProcessHelper();
+
+    public static ProcessHelper getInstance() {
+        return INSTANCE;
+    }
+
+    /**
+     * Gets the main class name for the given Java process by parsing the
+     * process command line.
+     * @param pid - process ID (pid)
+     * @return main class name or null if the process no longer exists or
+     * was started with a native launcher (e.g. jcmd etc)
+     */
+
+    public String getMainClass(String pid) {
+        String cmdLine = getCommandLine(pid);
+        if (cmdLine == null) {
+            return null;
+        }
+        if (cmdLine.startsWith(CMD_PREFIX)) {
+            cmdLine = cmdLine.substring(CMD_PREFIX.length());
+        }
+        String[] parts = cmdLine.split(" ");
+        String mainClass = null;
+
+        if(parts.length == 0) {
+            return null;
+        }
+
+        // Check the executable
+        String[] executablePath = parts[0].split("/");
+        if (executablePath.length > 0) {
+            String binaryName = executablePath[executablePath.length - 1];
+            if (!"java".equals(binaryName)) {
+                // Skip the process if it is not started with java launcher
+                return null;
+            }
+        }
+
+        // If -jar option is used then read the main class name from the manifest file.
+        // Otherwise, the main class name is either specified in -m or --module options or it
+        // is the first part that is not a Java option (doesn't start with '-' and is not a
+        // classpath or a module path).
+
+        for (int i = 1; i < parts.length && mainClass == null; i++) {
+            if (i < parts.length - 1) {
+                // Check if the module is executed with explicitly specified main class
+                if ((parts[i].equals("-m") || parts[i].equals("--module"))) {
+                    return getMainClassFromModuleArg(parts[i + 1]);
+                }
+                // Check if the main class needs to be read from the manifest.mf in a JAR file
+                if (parts[i].equals("-jar")) {
+                    return getMainClassFromJar(parts[i + 1], pid);
+                }
+            }
+            // If this is a classpath or a module path option then skip the next part
+            // (the classpath or the module path itself)
+            if (parts[i].equals("-cp") || parts[i].equals("-classpath") ||  parts[i].equals("--class-path") ||
+                    parts[i].equals("-p") || parts[i].equals("--module-path")) {
+                i++;
+                continue;
+            }
+            // Skip all other Java options
+            if (parts[i].startsWith("-")) {
+                continue;
+            }
+            mainClass = parts[i];
+        }
+        return mainClass;
+
+    }
+
+    private String getMainClassFromModuleArg(String moduleArg) {
+        int pos = moduleArg.lastIndexOf("/");
+        return (pos > 0 && pos < moduleArg.length()-1) ? moduleArg.substring(pos + 1) : null;
+    }
+
+    private String getMainClassFromJar(String jar, String pid) {
+        if (!jar.startsWith("/")) {
+            String cwd = getCurrentWorkingDir(pid);
+            if (cwd != null) {
+                jar = cwd + "/" + jar;
+            }
+        }
+        try (JarFile jarFile = new JarFile(jar)) {
+            Manifest mf = jarFile.getManifest();
+            if (mf != null) {
+                Attributes mainAttributes = mf.getMainAttributes();
+                return mainAttributes.getValue("Main-Class");
+            }
+        } catch (IOException e) {
+            return null;
+        }
+        return null;
+    }
+
+    private static String getCurrentWorkingDir(String pid) {
+        return ("/proc/" + pid + "/cwd");
+    }
+
+    private static String getCommandLine(String pid) {
+        try (Stream<String> lines =
+                     Files.lines(Paths.get("/proc/" + pid + "/cmdline"))) {
+            return lines.map(x -> x.replaceAll("\0", " ")).findFirst().orElse(null);
+        } catch (IOException | UncheckedIOException e) {
+            return null;
+        }
+    }
+}
+
+
--- a/src/jdk.jcmd/share/classes/sun/tools/common/ProcessArgumentMatcher.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/jdk.jcmd/share/classes/sun/tools/common/ProcessArgumentMatcher.java	Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2019, 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,25 +78,37 @@
     }
 
     private static boolean check(VirtualMachineDescriptor vmd, String excludeClass, String partialMatch) {
+
         String mainClass = null;
-        try {
-            VmIdentifier vmId = new VmIdentifier(vmd.id());
-            MonitoredHost monitoredHost = MonitoredHost.getMonitoredHost(vmId);
-            MonitoredVm monitoredVm = monitoredHost.getMonitoredVm(vmId, -1);
-            mainClass = MonitoredVmUtil.mainClass(monitoredVm, true);
-            monitoredHost.detach(monitoredVm);
-        } catch (NullPointerException npe) {
-            // There is a potential race, where a running java app is being
-            // queried, unfortunately the java app has shutdown after this
-            // method is started but before getMonitoredVM is called.
-            // If this is the case, then the /tmp/hsperfdata_xxx/pid file
-            // will have disappeared and we will get a NullPointerException.
-            // Handle this gracefully....
-            return false;
-        } catch (MonitorException | URISyntaxException e) {
-            return false;
+
+        // Get the main class name using platform specific helper
+        ProcessHelper helper = ProcessHelper.platformProcessHelper();
+        if (helper != null) {
+            mainClass = helper.getMainClass(vmd.id());
         }
 
+        // If the main class name is still unset then retrieve it with the attach mechanism
+        if (mainClass == null) {
+            try {
+                VmIdentifier vmId = new VmIdentifier(vmd.id());
+                MonitoredHost monitoredHost = MonitoredHost.getMonitoredHost(vmId);
+                MonitoredVm monitoredVm = monitoredHost.getMonitoredVm(vmId, -1);
+                mainClass = MonitoredVmUtil.mainClass(monitoredVm, true);
+                monitoredHost.detach(monitoredVm);
+            } catch (NullPointerException npe) {
+                // There is a potential race, where a running java app is being
+                // queried, unfortunately the java app has shutdown after this
+                // method is started but before getMonitoredVM is called.
+                // If this is the case, then the /tmp/hsperfdata_xxx/pid file
+                // will have disappeared and we will get a NullPointerException.
+                // Handle this gracefully....
+                return false;
+            } catch (MonitorException | URISyntaxException e) {
+                return false;
+            }
+        }
+
+
         if (excludeClass != null && mainClass.equals(excludeClass)) {
             return false;
         }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/jdk.jcmd/share/classes/sun/tools/common/ProcessHelper.java	Wed Feb 13 13:22:15 2019 -0500
@@ -0,0 +1,64 @@
+/*
+ * Copyright (c) 2019, 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 sun.tools.common;
+
+import java.lang.reflect.Method;
+
+/**
+ * A helper class to retrieve the main class name for a running
+ * Java process.
+ */
+
+public interface ProcessHelper {
+
+    /**
+     * Returns an instance of the ProcessHelper class.
+     *
+     * @return ProcessHelper object or null if not supported on this platform.
+     */
+    public static ProcessHelper platformProcessHelper() {
+        try {
+            Class<?> c = Class.forName("sun.tools.ProcessHelper");
+            @SuppressWarnings("unchecked")
+            Method m = c.getMethod("getInstance");
+            return (ProcessHelper) m.invoke(null);
+        } catch (ClassNotFoundException e) {
+            return null;
+        } catch (ReflectiveOperationException e) {
+            throw new InternalError(e);
+        }
+    }
+
+
+    /**
+     * Returns the main class name for the given Java process
+     *
+     * @param pid - process ID (pid)
+     * @return main class name or null if the main class could not be retrieved
+     */
+
+    String getMainClass(String pid);
+}
--- a/src/jdk.zipfs/share/classes/module-info.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/src/jdk.zipfs/share/classes/module-info.java	Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2019, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -24,14 +24,89 @@
  */
 
 /**
- * Provides the implementation of the zip file system provider.
+ * Provides the implementation of the Zip file system provider.
+ * The Zip file system provider treats the contents of a Zip or JAR file as a file system.
+ * <p>
+ *
+ * <h3>Accessing a Zip File System</h3>
+ *
+ * The {@linkplain java.nio.file.FileSystems FileSystems} {@code newFileSystem}
+ * static factory methods can be used to:
+ * <ul>
+ *     <li>Create a Zip file system</li>
+ *     <li>Open an existing file as a Zip file system</li>
+ * </ul>
+ *
+ * <h3>URI Scheme Used to Identify the Zip File System</h3>
+ *
+ * The URI {@link java.net.URI#getScheme scheme} that identifies the ZIP file system is {@code jar}.
+ *
+ * <h3>Zip File System Properties</h3>
+ *
+ * The following properties may be specified when creating a Zip
+ * file system:
+ * <p>
+ * <table class="striped">
+ * <caption style="display:none">
+ *     Configurable properties that may be specified when creating
+ *     a new Zip file system
+ * </caption>
+ * <thead>
+ * <tr>
+ * <th scope="col">Property Name</th>
+ * <th scope="col">Data Type</th>
+ * <th scope="col">Default Value</th>
+ * <th scope="col">Description</th>
+ * </tr>
+ * </thead>
  *
- * <p> The zip file system provider treats a zip or JAR file as a file system
- * and provides the ability to manipulate the contents of the file.
- * The zip file system provider can be created by
- * {@link java.nio.file.FileSystems#newFileSystem
- * FileSystems.newFileSystem} if installed.
+ * <tbody>
+ * <tr>
+ *   <td scope="row">create</td>
+ *   <td>java.lang.String</td>
+ *   <td>false</td>
+ *   <td>
+ *       If the value is {@code true}, the Zip file system provider
+ *       creates a new Zip or JAR file if it does not exist.
+ *   </td>
+ * </tr>
+ * <tr>
+ *   <td scope="row">encoding</td>
+ *   <td>java.lang.String</td>
+ *   <td>UTF-8</td>
+ *   <td>
+ *       The value indicates the encoding scheme for the
+ *       names of the entries in the Zip or JAR file.
+ *   </td>
+ * </tr>
+ * </tbody>
+ * </table>
+ *
+ * <h3>Examples:</h3>
  *
+ * Construct a new Zip file system that is identified by a URI.  If the Zip file does not exist,
+ * it will be created:
+ * <pre>
+ * {@code
+ *
+ *     URI uri = URI.create("jar:file:/home/luckydog/tennisTeam.zip");
+ *     Map<String, String> env = Map.of("create", "true");
+ *     FileSystem zipfs = FileSystems.newFileSystem(uri, env);
+ * }
+ * </pre>
+ *
+ * Construct a new Zip file system that is identified by specifying a path
+ * and using automatic file type detection. Iterate from the root of the JAR displaying each
+ * found entry:
+ * <pre>
+ * {@code
+ *
+ *     FileSystem zipfs = FileSystems.newFileSystem(Path.of("helloworld.jar"), null);
+ *     Path rootDir = zipfs.getPath("/");
+ *     Files.walk(rootDir)
+ *            .forEach(System.out::println);
+ * }
+ * </pre>
  * @provides java.nio.file.spi.FileSystemProvider
  * @moduleGraph
  * @since 9
--- a/test/hotspot/jtreg/ProblemList.txt	Tue Feb 12 11:58:41 2019 -0500
+++ b/test/hotspot/jtreg/ProblemList.txt	Wed Feb 13 13:22:15 2019 -0500
@@ -82,6 +82,7 @@
 
 runtime/handshake/HandshakeWalkSuspendExitTest.java 8214174 generic-all
 runtime/SharedArchiveFile/SASymbolTableTest.java 8193639 solaris-all
+runtime/CompressedOops/UseCompressedOops.java 8079353 windows-all
 
 #############################################################################
 
@@ -163,7 +164,6 @@
 vmTestbase/nsk/jdi/EventRequest/setEnabled/setenabled003/TestDescription.java 8066993 generic-all
 vmTestbase/nsk/jdi/VirtualMachine/redefineClasses/redefineclasses021/TestDescription.java 8065773 generic-all
 vmTestbase/nsk/jdi/VirtualMachine/redefineClasses/redefineclasses023/TestDescription.java 8065773 generic-all
-vmTestbase/nsk/jdi/EventQueue/remove_l/remove_l005/TestDescription.java 8068225 generic-all
 
 vmTestbase/metaspace/gc/firstGC_10m/TestDescription.java 8208250 generic-all
 vmTestbase/metaspace/gc/firstGC_50m/TestDescription.java 8208250 generic-all
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/compiler/c2/TestUseOptoBiasInliningWithoutEliminateLocks.java	Wed Feb 13 13:22:15 2019 -0500
@@ -0,0 +1,94 @@
+/*
+ * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2019 SAP SE. 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 8217990
+ * @summary With -XX:+UseOptoBiasInlining loading the markword is replaced by 0L if EliminateLocks is disabled. assert(dmw->is_neutral()) failed: invariant fails.
+ * @author Richard Reingruber richard DOT reingruber AT sap DOT com
+ *
+ * @library /test/lib /test/hotspot/jtreg
+ *
+ * @build sun.hotspot.WhiteBox
+ * @build ClassFileInstaller
+ *
+ * @run driver ClassFileInstaller sun.hotspot.WhiteBox
+ *                                sun.hotspot.WhiteBox$WhiteBoxPermission
+ *
+ * @run main/othervm -XX:+IgnoreUnrecognizedVMOptions
+ *                   -XX:CompileCommand=compileonly,*.TestUseOptoBiasInliningWithoutEliminateLocks::dontinline_testMethod
+ *                   -XX:CompileCommand=dontinline,*::dontinline_*
+ *                   -XX:-EliminateLocks
+ *                   -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -Xbootclasspath/a:.
+ *                   -Xbatch
+ *                   -XX:-TieredCompilation
+ *                   compiler.c2.TestUseOptoBiasInliningWithoutEliminateLocks
+ */
+
+package compiler.c2;
+
+import sun.hotspot.WhiteBox;
+
+public class TestUseOptoBiasInliningWithoutEliminateLocks {
+
+    public static final WhiteBox WB = WhiteBox.getWhiteBox();
+
+    public static void main(String[] args) {
+        new TestUseOptoBiasInliningWithoutEliminateLocks().run();
+    }
+
+    public boolean warmupDone;
+
+    public void run() {
+        for(int i = 0; i < 30000; i++) {
+            dontinline_testMethod();
+        }
+        warmupDone = true;
+        dontinline_testMethod();
+    }
+
+    public void dontinline_testMethod() {
+        PointXY l1 = new PointXY(4.0f, 2.0f);
+        synchronized (l1) {
+            dontinline_deopt();
+        }
+    }
+
+    public void dontinline_deopt() {
+        if (warmupDone) {
+            WB.deoptimizeFrames(false);
+        }
+    }
+
+    static class PointXY {
+
+        public float fritz;
+        public float felix;
+
+        public PointXY(float fritz_param, float felix_param) {
+            this.fritz = fritz_param;
+//            this.felix = felix_param;
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/compiler/intrinsics/math/TestFpMinMaxIntrinsics.java	Wed Feb 13 13:22:15 2019 -0500
@@ -0,0 +1,125 @@
+/*
+ * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2018, Arm Limited. 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 8212043
+ * @summary Test compiler intrinsics of floating-point Math.min/max
+ *
+ * @run main/othervm -Xint compiler.intrinsics.math.TestFpMinMaxIntrinsics
+ * @run main/othervm -XX:+UnlockDiagnosticVMOptions
+ *                   -Xcomp -XX:TieredStopAtLevel=1
+ *                   -XX:CompileOnly=java/lang/Math
+ *                   compiler.intrinsics.math.TestFpMinMaxIntrinsics
+ * @run main/othervm -XX:+UnlockDiagnosticVMOptions
+ *                   -Xcomp -XX:-TieredCompilation
+ *                   -XX:CompileOnly=java/lang/Math
+ *                   compiler.intrinsics.math.TestFpMinMaxIntrinsics
+ */
+
+package compiler.intrinsics.math;
+
+import java.util.Arrays;
+
+public class TestFpMinMaxIntrinsics {
+
+    private static final float fPos     =  15280.0f;
+    private static final float fNeg     = -55555.5f;
+    private static final float fPosZero =      0.0f;
+    private static final float fNegZero =     -0.0f;
+    private static final float fPosInf  = Float.POSITIVE_INFINITY;
+    private static final float fNegInf  = Float.NEGATIVE_INFINITY;
+    private static final float fNaN     = Float.NaN;
+
+    private static final double dPos     =  482390926662501720.0;
+    private static final double dNeg     = -333333333333333333.3;
+    private static final double dPosZero =                   0.0;
+    private static final double dNegZero =                  -0.0;
+    private static final double dPosInf  = Double.POSITIVE_INFINITY;
+    private static final double dNegInf  = Double.NEGATIVE_INFINITY;
+    private static final double dNaN     = Double.NaN;
+
+    private static final float[][] f_cases = {
+        //     a         b         min       max
+        {     fPos,     fPos,     fPos,     fPos },
+        {     fPos,     fNeg,     fNeg,     fPos },
+        { fPosZero, fNegZero, fNegZero, fPosZero },
+        { fNegZero, fNegZero, fNegZero, fNegZero },
+        {     fPos,  fPosInf,     fPos,  fPosInf },
+        {     fNeg,  fNegInf,  fNegInf,     fNeg },
+        {     fPos,     fNaN,     fNaN,     fNaN },
+        {  fNegInf,     fNaN,     fNaN,     fNaN },
+    };
+
+    private static final double[][] d_cases = {
+        //     a         b         min       max
+        {     dPos,     dPos,     dPos,     dPos },
+        {     dPos,     dNeg,     dNeg,     dPos },
+        { dPosZero, dNegZero, dNegZero, dPosZero },
+        { dNegZero, dNegZero, dNegZero, dNegZero },
+        {     dPos,  dPosInf,     dPos,  dPosInf },
+        {     dNeg,  dNegInf,  dNegInf,     dNeg },
+        {     dPos,     dNaN,     dNaN,     dNaN },
+        {  dNegInf,     dNaN,     dNaN,     dNaN },
+    };
+
+    private static void fTest(float[] row) {
+        float min = Math.min(row[0], row[1]);
+        float max = Math.max(row[0], row[1]);
+        if (Float.isNaN(min) && Float.isNaN(max)
+                && Float.isNaN(row[2]) && Float.isNaN(row[3])) {
+            // Return if all of them are NaN
+            return;
+        }
+        if (min != row[2] || max != row[3]) {
+            throw new AssertionError("Unexpected result of float min/max: " +
+                    "a = " + row[0] + ", b = " + row[1] + ", " +
+                    "result = (" + min + ", " + max + "), " +
+                    "expected = (" + row[2] + ", " + row[3] + ")");
+        }
+    }
+
+    private static void dTest(double[] row) {
+        double min = Math.min(row[0], row[1]);
+        double max = Math.max(row[0], row[1]);
+        if (Double.isNaN(min) && Double.isNaN(max)
+                && Double.isNaN(row[2]) && Double.isNaN(row[3])) {
+            // Return if all of them are NaN
+            return;
+        }
+        if (min != row[2] || max != row[3]) {
+            throw new AssertionError("Unexpected result of double min/max" +
+                    "a = " + row[0] + ", b = " + row[1] + ", " +
+                    "result = (" + min + ", " + max + "), " +
+                    "expected = (" + row[2] + ", " + row[3] + ")");
+        }
+    }
+
+    public static void main(String[] args) {
+        Arrays.stream(f_cases).forEach(TestFpMinMaxIntrinsics::fTest);
+        Arrays.stream(d_cases).forEach(TestFpMinMaxIntrinsics::dTest);
+        System.out.println("PASS");
+    }
+}
+
--- a/test/hotspot/jtreg/gc/TestAgeOutput.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/test/hotspot/jtreg/gc/TestAgeOutput.java	Wed Feb 13 13:22:15 2019 -0500
@@ -55,12 +55,9 @@
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
-import jdk.test.lib.Platform;
 import jdk.test.lib.process.OutputAnalyzer;
 import jdk.test.lib.process.ProcessTools;
 
-import static jdk.test.lib.Asserts.*;
-
 public class TestAgeOutput {
 
     public static void checkPattern(String pattern, String what) throws Exception {
--- a/test/hotspot/jtreg/gc/TestAllocateHeapAt.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/test/hotspot/jtreg/gc/TestAllocateHeapAt.java	Wed Feb 13 13:22:15 2019 -0500
@@ -40,7 +40,7 @@
 
 public class TestAllocateHeapAt {
   public static void main(String args[]) throws Exception {
-    ArrayList<String> vmOpts = new ArrayList();
+    ArrayList<String> vmOpts = new ArrayList<>();
 
     String testVmOptsStr = System.getProperty("test.java.opts");
     if (!testVmOptsStr.isEmpty()) {
--- a/test/hotspot/jtreg/gc/TestAllocateHeapAtError.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/test/hotspot/jtreg/gc/TestAllocateHeapAtError.java	Wed Feb 13 13:22:15 2019 -0500
@@ -42,7 +42,7 @@
 
 public class TestAllocateHeapAtError {
   public static void main(String args[]) throws Exception {
-    ArrayList<String> vmOpts = new ArrayList();
+    ArrayList<String> vmOpts = new ArrayList<>();
 
     String testVmOptsStr = System.getProperty("test.java.opts");
     if (!testVmOptsStr.isEmpty()) {
--- a/test/hotspot/jtreg/gc/TestAllocateHeapAtMultiple.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/test/hotspot/jtreg/gc/TestAllocateHeapAtMultiple.java	Wed Feb 13 13:22:15 2019 -0500
@@ -40,7 +40,7 @@
 
 public class TestAllocateHeapAtMultiple {
   public static void main(String args[]) throws Exception {
-    ArrayList<String> vmOpts = new ArrayList();
+    ArrayList<String> vmOpts = new ArrayList<>();
     String[] testVmOpts = null;
 
     String test_dir = System.getProperty("test.dir", ".");
--- a/test/hotspot/jtreg/gc/TestCardTablePageCommits.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/test/hotspot/jtreg/gc/TestCardTablePageCommits.java	Wed Feb 13 13:22:15 2019 -0500
@@ -23,7 +23,6 @@
 
 package gc;
 
-import jdk.test.lib.JDKToolFinder;
 import jdk.test.lib.process.ProcessTools;
 import jdk.test.lib.process.OutputAnalyzer;
 import jdk.test.lib.Platform;
--- a/test/hotspot/jtreg/gc/TestFullGCCount.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/test/hotspot/jtreg/gc/TestFullGCCount.java	Wed Feb 13 13:22:15 2019 -0500
@@ -52,7 +52,7 @@
         int iterations = 20;
         boolean failed = false;
         String errorMessage = "";
-        HashMap<String, List> counts = new HashMap<>();
+        HashMap<String, List<Long>> counts = new HashMap<>();
 
         // Prime the collection of count lists for all collectors.
         for (int i = 0; i < collectors.size(); i++) {
@@ -91,10 +91,10 @@
         System.out.println("Passed.");
     }
 
-    private static void addCollectionCount(HashMap<String, List> counts, int iteration) {
+    private static void addCollectionCount(HashMap<String, List<Long>> counts, int iteration) {
         for (int i = 0; i < collectors.size(); i++) {
             GarbageCollectorMXBean collector = collectors.get(i);
-            List thisList = counts.get(collector.getName());
+            List<Long> thisList = counts.get(collector.getName());
             thisList.add(collector.getCollectionCount());
         }
     }
--- a/test/hotspot/jtreg/gc/TestGenerationPerfCounter.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/test/hotspot/jtreg/gc/TestGenerationPerfCounter.java	Wed Feb 13 13:22:15 2019 -0500
@@ -24,7 +24,6 @@
 package gc;
 
 import static jdk.test.lib.Asserts.*;
-import gc.testlibrary.PerfCounter;
 import gc.testlibrary.PerfCounters;
 
 
--- a/test/hotspot/jtreg/gc/TestMemoryMXBeansAndPoolsPresence.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/test/hotspot/jtreg/gc/TestMemoryMXBeansAndPoolsPresence.java	Wed Feb 13 13:22:15 2019 -0500
@@ -24,7 +24,6 @@
 package gc;
 
 import java.util.List;
-import java.util.ArrayList;
 import java.lang.management.*;
 import static jdk.test.lib.Asserts.*;
 import java.util.stream.*;
--- a/test/hotspot/jtreg/gc/TestNumWorkerOutput.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/test/hotspot/jtreg/gc/TestNumWorkerOutput.java	Wed Feb 13 13:22:15 2019 -0500
@@ -54,12 +54,9 @@
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
-import jdk.test.lib.Platform;
 import jdk.test.lib.process.OutputAnalyzer;
 import jdk.test.lib.process.ProcessTools;
 
-import static jdk.test.lib.Asserts.*;
-
 public class TestNumWorkerOutput {
 
     public static void checkPatternOnce(String pattern, String what) throws Exception {
--- a/test/hotspot/jtreg/gc/TestObjectAlignment.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/test/hotspot/jtreg/gc/TestObjectAlignment.java	Wed Feb 13 13:22:15 2019 -0500
@@ -44,9 +44,6 @@
  * @run main/othervm gc.TestObjectAlignment -Xmx20M -XX:-ExplicitGCInvokesConcurrent -XX:+IgnoreUnrecognizedVMOptions -XX:ObjectAlignmentInBytes=256
  */
 
-import jdk.test.lib.process.ProcessTools;
-import jdk.test.lib.process.OutputAnalyzer;
-
 public class TestObjectAlignment {
 
   public static byte[] garbage;
--- a/test/hotspot/jtreg/gc/TestPolicyNamePerfCounter.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/test/hotspot/jtreg/gc/TestPolicyNamePerfCounter.java	Wed Feb 13 13:22:15 2019 -0500
@@ -24,7 +24,6 @@
 package gc;
 
 import static jdk.test.lib.Asserts.*;
-import gc.testlibrary.PerfCounter;
 import gc.testlibrary.PerfCounters;
 
 
--- a/test/hotspot/jtreg/gc/TestSoftReferencesBehaviorOnOOME.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/test/hotspot/jtreg/gc/TestSoftReferencesBehaviorOnOOME.java	Wed Feb 13 13:22:15 2019 -0500
@@ -71,9 +71,9 @@
     void softReferencesOom(long minSize, long maxSize) {
         System.out.format( "minSize = %d, maxSize = %d%n", minSize, maxSize );
 
-        LinkedList<SoftReference> arrSoftRefs = new LinkedList();
+        LinkedList<SoftReference<byte[]>> arrSoftRefs = new LinkedList<>();
         staticRef = arrSoftRefs;
-        LinkedList arrObjects = new LinkedList();
+        LinkedList<byte[]> arrObjects = new LinkedList<>();
         staticRef = arrObjects;
 
         long multiplier = maxSize - minSize;
@@ -89,7 +89,7 @@
             while (numSofts-- > 0) {
                 int allocationSize = ((int) (RND_GENERATOR.nextDouble() * multiplier))
                             + (int)minSize;
-                arrSoftRefs.add(new SoftReference(new byte[allocationSize]));
+                arrSoftRefs.add(new SoftReference<byte[]>(new byte[allocationSize]));
             }
 
             System.out.println("free: " + Runtime.getRuntime().freeMemory());
@@ -106,7 +106,7 @@
             arrObjects = null;
             long oomSoftArraySize = arrSoftRefs.size();
 
-            for (SoftReference sr : arrSoftRefs) {
+            for (SoftReference<byte[]> sr : arrSoftRefs) {
                 Object o = sr.get();
 
                 if (o != null) {
--- a/test/hotspot/jtreg/gc/TestVerifyDuringStartup.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/test/hotspot/jtreg/gc/TestVerifyDuringStartup.java	Wed Feb 13 13:22:15 2019 -0500
@@ -41,7 +41,7 @@
 
 public class TestVerifyDuringStartup {
   public static void main(String args[]) throws Exception {
-    ArrayList<String> vmOpts = new ArrayList();
+    ArrayList<String> vmOpts = new ArrayList<>();
 
     String testVmOptsStr = System.getProperty("test.java.opts");
     if (!testVmOptsStr.isEmpty()) {
--- a/test/hotspot/jtreg/gc/TestVerifySilently.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/test/hotspot/jtreg/gc/TestVerifySilently.java	Wed Feb 13 13:22:15 2019 -0500
@@ -49,7 +49,7 @@
 public class TestVerifySilently {
 
   private static OutputAnalyzer runTest(boolean verifySilently) throws Exception {
-    ArrayList<String> vmOpts = new ArrayList();
+    ArrayList<String> vmOpts = new ArrayList<>();
 
     Collections.addAll(vmOpts, Utils.getFilteredTestJavaOpts("-Xlog.*"));
     Collections.addAll(vmOpts, new String[] {"-XX:+UnlockDiagnosticVMOptions",
--- a/test/hotspot/jtreg/gc/TestVerifySubSet.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/test/hotspot/jtreg/gc/TestVerifySubSet.java	Wed Feb 13 13:22:15 2019 -0500
@@ -47,7 +47,7 @@
 public class TestVerifySubSet {
 
     private static OutputAnalyzer runTest(String subset) throws Exception {
-        ArrayList<String> vmOpts = new ArrayList();
+        ArrayList<String> vmOpts = new ArrayList<>();
 
         Collections.addAll(vmOpts, Utils.getFilteredTestJavaOpts("-Xlog.*"));
         Collections.addAll(vmOpts, new String[] {"-XX:+UnlockDiagnosticVMOptions",
--- a/test/hotspot/jtreg/gc/arguments/AllocationHelper.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/test/hotspot/jtreg/gc/arguments/AllocationHelper.java	Wed Feb 13 13:22:15 2019 -0500
@@ -23,7 +23,6 @@
 
 package gc.arguments;
 
-import java.util.LinkedList;
 import java.util.concurrent.Callable;
 
 /**
--- a/test/hotspot/jtreg/gc/arguments/TestSelectDefaultGC.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/test/hotspot/jtreg/gc/arguments/TestSelectDefaultGC.java	Wed Feb 13 13:22:15 2019 -0500
@@ -35,12 +35,9 @@
  * @run driver gc.arguments.TestSelectDefaultGC
  */
 
-import jdk.test.lib.Platform;
 import jdk.test.lib.process.OutputAnalyzer;
 import jdk.test.lib.process.ProcessTools;
 
-import java.util.regex.*;
-
 public class TestSelectDefaultGC {
     public static void assertVMOption(OutputAnalyzer output, String option, boolean value) {
         output.shouldMatch(" " + option + " .*=.* " + value + " ");
--- a/test/hotspot/jtreg/gc/arguments/TestShrinkHeapInSteps.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/test/hotspot/jtreg/gc/arguments/TestShrinkHeapInSteps.java	Wed Feb 13 13:22:15 2019 -0500
@@ -37,7 +37,6 @@
 
 import java.util.LinkedList;
 import java.util.Arrays;
-import java.util.Collections;
 import jdk.test.lib.Utils;
 
 public class TestShrinkHeapInSteps {
--- a/test/hotspot/jtreg/gc/class_unloading/TestCMSClassUnloadingEnabledHWM.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/test/hotspot/jtreg/gc/class_unloading/TestCMSClassUnloadingEnabledHWM.java	Wed Feb 13 13:22:15 2019 -0500
@@ -42,8 +42,6 @@
 import jdk.test.lib.process.ProcessTools;
 import java.lang.management.GarbageCollectorMXBean;
 import java.lang.management.ManagementFactory;
-import java.util.ArrayList;
-import java.util.Arrays;
 import sun.hotspot.WhiteBox;
 
 public class TestCMSClassUnloadingEnabledHWM {
--- a/test/hotspot/jtreg/gc/class_unloading/TestG1ClassUnloadingHWM.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/test/hotspot/jtreg/gc/class_unloading/TestG1ClassUnloadingHWM.java	Wed Feb 13 13:22:15 2019 -0500
@@ -39,8 +39,6 @@
 
 import jdk.test.lib.process.OutputAnalyzer;
 import jdk.test.lib.process.ProcessTools;
-import java.util.ArrayList;
-import java.util.Arrays;
 import sun.hotspot.WhiteBox;
 
 public class TestG1ClassUnloadingHWM {
--- a/test/hotspot/jtreg/gc/cms/TestMBeanCMS.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/test/hotspot/jtreg/gc/cms/TestMBeanCMS.java	Wed Feb 13 13:22:15 2019 -0500
@@ -137,7 +137,7 @@
     public void allocationWork(long target) {
 
         long sizeAllocated = 0;
-        List list = new LinkedList();
+        List<byte[]> list = new LinkedList<>();
         long delay = 50;
         long count = 0;
 
--- a/test/hotspot/jtreg/gc/concurrent_phase_control/CheckControl.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/test/hotspot/jtreg/gc/concurrent_phase_control/CheckControl.java	Wed Feb 13 13:22:15 2019 -0500
@@ -51,7 +51,6 @@
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
-import jdk.test.lib.Platform;
 import jdk.test.lib.process.OutputAnalyzer;
 import jdk.test.lib.process.ProcessTools;
 
--- a/test/hotspot/jtreg/gc/epsilon/TestArraycopyCheckcast.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/test/hotspot/jtreg/gc/epsilon/TestArraycopyCheckcast.java	Wed Feb 13 13:22:15 2019 -0500
@@ -38,8 +38,6 @@
  * @run main/othervm -Xmx1g -Xbatch -Xcomp -XX:-TieredCompilation  -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC gc.epsilon.TestArraycopyCheckcast
  */
 
-import java.util.Random;
-
 public class TestArraycopyCheckcast {
 
   static int COUNT = Integer.getInteger("count", 1000);
--- a/test/hotspot/jtreg/gc/epsilon/TestEpsilonEnabled.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/test/hotspot/jtreg/gc/epsilon/TestEpsilonEnabled.java	Wed Feb 13 13:22:15 2019 -0500
@@ -32,7 +32,6 @@
  * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC gc.epsilon.TestEpsilonEnabled
  */
 
-import jdk.test.lib.Platform;
 import java.lang.management.GarbageCollectorMXBean;
 import java.lang.management.ManagementFactory;
 
--- a/test/hotspot/jtreg/gc/epsilon/TestMemoryMXBeans.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/test/hotspot/jtreg/gc/epsilon/TestMemoryMXBeans.java	Wed Feb 13 13:22:15 2019 -0500
@@ -36,7 +36,6 @@
  */
 
 import java.lang.management.*;
-import java.util.*;
 
 public class TestMemoryMXBeans {
 
--- a/test/hotspot/jtreg/gc/g1/TestEagerReclaimHumongousRegionsLog.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/test/hotspot/jtreg/gc/g1/TestEagerReclaimHumongousRegionsLog.java	Wed Feb 13 13:22:15 2019 -0500
@@ -39,12 +39,8 @@
 import sun.hotspot.WhiteBox;
 
 import java.util.Arrays;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
 import jdk.test.lib.Asserts;
 
-import jdk.test.lib.Platform;
 import jdk.test.lib.process.OutputAnalyzer;
 import jdk.test.lib.process.ProcessTools;
 
--- a/test/hotspot/jtreg/gc/g1/TestHumongousShrinkHeap.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/test/hotspot/jtreg/gc/g1/TestHumongousShrinkHeap.java	Wed Feb 13 13:22:15 2019 -0500
@@ -52,7 +52,7 @@
     public static final String MIN_FREE_RATIO_FLAG_NAME = "MinHeapFreeRatio";
     public static final String MAX_FREE_RATIO_FLAG_NAME = "MaxHeapFreeRatio";
 
-    private static final List<List<byte[]>> garbage = new ArrayList();
+    private static final List<List<byte[]>> garbage = new ArrayList<>();
     private static final int REGION_SIZE = 1024 * 1024; // 1M
     private static final int LISTS_COUNT = 10;
     private static final int HUMON_SIZE = Math.round(.9f * REGION_SIZE);
@@ -108,7 +108,7 @@
     private void allocate() {
 
         for (int i = 0; i < LISTS_COUNT; i++) {
-            List<byte[]> stuff = new ArrayList();
+            List<byte[]> stuff = new ArrayList<>();
             allocateList(stuff, HUMON_COUNT, HUMON_SIZE);
             MemoryUsagePrinter.printMemoryUsage("allocate #" + (i+1));
             garbage.add(stuff);
@@ -120,12 +120,12 @@
         garbage.subList(0, garbage.size() - 1).clear();
 
         // do not free last one element from last list
-        List stuff = garbage.get(garbage.size() - 1);
+        List<byte[]> stuff = garbage.get(garbage.size() - 1);
         stuff.subList(0, stuff.size() - 1).clear();
         System.gc();
     }
 
-    private static void allocateList(List garbage, int count, int size) {
+    private static void allocateList(List<byte[]> garbage, int count, int size) {
         for (int i = 0; i < count; i++) {
             garbage.add(new byte[size]);
         }
--- a/test/hotspot/jtreg/gc/g1/TestLargePageUseForAuxMemory.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/test/hotspot/jtreg/gc/g1/TestLargePageUseForAuxMemory.java	Wed Feb 13 13:22:15 2019 -0500
@@ -38,9 +38,6 @@
  */
 
 import java.lang.Math;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-
 import jdk.test.lib.process.OutputAnalyzer;
 import jdk.test.lib.process.ProcessTools;
 import jdk.test.lib.Asserts;
--- a/test/hotspot/jtreg/gc/g1/TestPLABOutput.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/test/hotspot/jtreg/gc/g1/TestPLABOutput.java	Wed Feb 13 13:22:15 2019 -0500
@@ -41,7 +41,6 @@
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
-import jdk.test.lib.Platform;
 import jdk.test.lib.process.OutputAnalyzer;
 import jdk.test.lib.process.ProcessTools;
 
--- a/test/hotspot/jtreg/gc/g1/TestPeriodicLogMessages.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/test/hotspot/jtreg/gc/g1/TestPeriodicLogMessages.java	Wed Feb 13 13:22:15 2019 -0500
@@ -36,7 +36,6 @@
 
 import jdk.test.lib.process.OutputAnalyzer;
 import jdk.test.lib.process.ProcessTools;
-import jdk.test.lib.Platform;
 
 public class TestPeriodicLogMessages {
 
--- a/test/hotspot/jtreg/gc/g1/TestRemsetLoggingTools.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/test/hotspot/jtreg/gc/g1/TestRemsetLoggingTools.java	Wed Feb 13 13:22:15 2019 -0500
@@ -27,13 +27,10 @@
  * Common helpers for TestRemsetLogging* tests
  */
 
-import com.sun.management.HotSpotDiagnosticMXBean;
-import com.sun.management.VMOption;
 import sun.hotspot.WhiteBox;
 
 import jdk.test.lib.process.ProcessTools;
 import jdk.test.lib.process.OutputAnalyzer;
-import java.lang.management.ManagementFactory;
 import java.util.ArrayList;
 import java.util.Arrays;
 
--- a/test/hotspot/jtreg/gc/g1/TestShrinkAuxiliaryData.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/test/hotspot/jtreg/gc/g1/TestShrinkAuxiliaryData.java	Wed Feb 13 13:22:15 2019 -0500
@@ -27,7 +27,6 @@
 import jdk.test.lib.Platform;
 import jdk.test.lib.process.ProcessTools;
 import jdk.test.lib.process.OutputAnalyzer;
-import jdk.test.lib.Utils;
 import jtreg.SkippedException;
 
 import java.io.IOException;
@@ -36,7 +35,6 @@
 import java.text.DecimalFormat;
 import java.text.DecimalFormatSymbols;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.Collections;
 import java.util.LinkedList;
 import java.util.List;
@@ -68,7 +66,7 @@
     }
 
     protected void test() throws Exception {
-        ArrayList<String> vmOpts = new ArrayList();
+        ArrayList<String> vmOpts = new ArrayList<>();
         Collections.addAll(vmOpts, initialOpts);
 
         int maxCacheSize = Math.max(0, Math.min(31, getMaxCacheSize()));
@@ -84,14 +82,14 @@
 
         // for 32 bits ObjectAlignmentInBytes is not a option
         if (Platform.is32bit()) {
-            ArrayList<String> vmOptsWithoutAlign = new ArrayList(vmOpts);
+            ArrayList<String> vmOptsWithoutAlign = new ArrayList<>(vmOpts);
             vmOptsWithoutAlign.add(ShrinkAuxiliaryDataTest.class.getName());
             performTest(vmOptsWithoutAlign);
             return;
         }
 
         for (int alignment = 3; alignment <= 8; alignment++) {
-            ArrayList<String> vmOptsWithAlign = new ArrayList(vmOpts);
+            ArrayList<String> vmOptsWithAlign = new ArrayList<>(vmOpts);
             vmOptsWithAlign.add("-XX:ObjectAlignmentInBytes="
                     + (int) Math.pow(2, alignment));
             vmOptsWithAlign.add(ShrinkAuxiliaryDataTest.class.getName());
@@ -202,8 +200,8 @@
 
         class GarbageObject {
 
-            private final List<byte[]> payload = new ArrayList();
-            private final List<GarbageObject> ref = new LinkedList();
+            private final List<byte[]> payload = new ArrayList<>();
+            private final List<GarbageObject> ref = new LinkedList<>();
 
             public GarbageObject(int size) {
                 payload.add(new byte[size]);
@@ -220,7 +218,7 @@
             }
         }
 
-        private final List<GarbageObject> garbage = new ArrayList();
+        private final List<GarbageObject> garbage = new ArrayList<>();
 
         public void test() throws IOException {
 
--- a/test/hotspot/jtreg/gc/g1/TestShrinkDefragmentedHeap.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/test/hotspot/jtreg/gc/g1/TestShrinkDefragmentedHeap.java	Wed Feb 13 13:22:15 2019 -0500
@@ -139,7 +139,7 @@
             garbage.subList(0, garbage.size() - 1).clear();
 
             // do not free last one element from last list
-            ArrayList stuff = garbage.get(garbage.size() - 1);
+            ArrayList<byte[]> stuff = garbage.get(garbage.size() - 1);
             if (stuff.size() > 1) {
                 stuff.subList(0, stuff.size() - 1).clear();
             }
@@ -159,7 +159,7 @@
             );
         }
 
-        private static void allocateList(List garbage, int count, int size) {
+        private static void allocateList(List<byte[]> garbage, int count, int size) {
             for (int i = 0; i < count; i++) {
                 garbage.add(new byte[size]);
             }
--- a/test/hotspot/jtreg/gc/g1/TestStringDeduplicationTools.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/test/hotspot/jtreg/gc/g1/TestStringDeduplicationTools.java	Wed Feb 13 13:22:15 2019 -0500
@@ -27,9 +27,7 @@
  * Common code for string deduplication tests
  */
 
-import java.lang.management.*;
 import java.lang.reflect.*;
-import java.security.*;
 import java.util.*;
 import jdk.test.lib.process.ProcessTools;
 import jdk.test.lib.process.OutputAnalyzer;
--- a/test/hotspot/jtreg/gc/g1/TestVerifyGCType.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/test/hotspot/jtreg/gc/g1/TestVerifyGCType.java	Wed Feb 13 13:22:15 2019 -0500
@@ -38,7 +38,6 @@
 import java.util.Collections;
 
 import jdk.test.lib.Asserts;
-import jdk.test.lib.Utils;
 import jdk.test.lib.process.OutputAnalyzer;
 import jdk.test.lib.process.ProcessTools;
 import sun.hotspot.WhiteBox;
--- a/test/hotspot/jtreg/gc/g1/humongousObjects/TestObjectCollected.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/test/hotspot/jtreg/gc/g1/humongousObjects/TestObjectCollected.java	Wed Feb 13 13:22:15 2019 -0500
@@ -139,7 +139,7 @@
 
         System.out.println(String.format("Testing %s reference behavior after %s", ref.name(), gc.name()));
 
-        Reference reference = ref.create();
+        Reference<byte[]> reference = ref.create();
         Asserts.assertNotNull(reference, "Test Bug: failed to allocate reference");
         long adr = WHITE_BOX.getObjectAddress(reference.get());
 
--- a/test/hotspot/jtreg/gc/g1/mixedgc/TestOldGenCollectionUsage.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/test/hotspot/jtreg/gc/g1/mixedgc/TestOldGenCollectionUsage.java	Wed Feb 13 13:22:15 2019 -0500
@@ -42,8 +42,6 @@
 
 import java.util.ArrayList;
 import java.util.List;
-import java.util.Collections;
-
 import java.lang.management.*;
 
 // 8195115 says that for the "G1 Old Gen" MemoryPool, CollectionUsage.used
--- a/test/hotspot/jtreg/gc/logging/TestDeprecatedPrintFlags.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/test/hotspot/jtreg/gc/logging/TestDeprecatedPrintFlags.java	Wed Feb 13 13:22:15 2019 -0500
@@ -36,10 +36,8 @@
 
 import jdk.test.lib.process.OutputAnalyzer;
 import jdk.test.lib.process.ProcessTools;
-import java.io.File;
 import java.nio.file.Files;
 import java.nio.file.Paths;
-import java.util.List;
 import java.util.stream.Collectors;
 
 public class TestDeprecatedPrintFlags {
--- a/test/hotspot/jtreg/gc/logging/TestMetaSpaceLog.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/test/hotspot/jtreg/gc/logging/TestMetaSpaceLog.java	Wed Feb 13 13:22:15 2019 -0500
@@ -27,7 +27,6 @@
 import java.io.File;
 import java.net.URL;
 import java.net.URLClassLoader;
-import java.util.List;
 import java.util.function.Predicate;
 import java.util.regex.Pattern;
 import java.util.regex.Matcher;
--- a/test/hotspot/jtreg/gc/logging/TestPrintReferences.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/test/hotspot/jtreg/gc/logging/TestPrintReferences.java	Wed Feb 13 13:22:15 2019 -0500
@@ -36,8 +36,6 @@
 
 import java.lang.ref.SoftReference;
 import java.math.BigDecimal;
-import java.util.ArrayList;
-
 import jdk.test.lib.process.OutputAnalyzer;
 import jdk.test.lib.process.ProcessTools;
 import java.util.regex.Pattern;
--- a/test/hotspot/jtreg/gc/metaspace/TestMetaspaceMemoryPool.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/test/hotspot/jtreg/gc/metaspace/TestMetaspaceMemoryPool.java	Wed Feb 13 13:22:15 2019 -0500
@@ -26,8 +26,6 @@
 import java.util.List;
 import java.lang.management.*;
 import jdk.test.lib.Platform;
-import jdk.test.lib.process.ProcessTools;
-import jdk.test.lib.process.OutputAnalyzer;
 import static jdk.test.lib.Asserts.*;
 
 /* @test TestMetaspaceMemoryPool
--- a/test/hotspot/jtreg/gc/metaspace/TestMetaspacePerfCounters.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/test/hotspot/jtreg/gc/metaspace/TestMetaspacePerfCounters.java	Wed Feb 13 13:22:15 2019 -0500
@@ -70,7 +70,7 @@
  * @run main/othervm -XX:+IgnoreUnrecognizedVMOptions -XX:+UseCompressedOops -XX:+UseCompressedClassPointers -XX:+UsePerfData -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC gc.metaspace.TestMetaspacePerfCounters
  */
 public class TestMetaspacePerfCounters {
-    public static Class fooClass = null;
+    public static Class<?> fooClass = null;
     private static final String[] counterNames = {"minCapacity", "maxCapacity", "capacity", "used"};
     private static final List<GarbageCollectorMXBean> gcBeans = ManagementFactoryHelper.getGarbageCollectorMXBeans();
 
--- a/test/hotspot/jtreg/gc/metaspace/TestPerfCountersAndMemoryPools.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/test/hotspot/jtreg/gc/metaspace/TestPerfCountersAndMemoryPools.java	Wed Feb 13 13:22:15 2019 -0500
@@ -28,7 +28,6 @@
 
 import jdk.test.lib.Platform;
 import static jdk.test.lib.Asserts.*;
-import gc.testlibrary.PerfCounter;
 import gc.testlibrary.PerfCounters;
 
 /* @test TestPerfCountersAndMemoryPools
--- a/test/hotspot/jtreg/gc/nvdimm/TestAllocateOldGenAt.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/test/hotspot/jtreg/gc/nvdimm/TestAllocateOldGenAt.java	Wed Feb 13 13:22:15 2019 -0500
@@ -43,7 +43,7 @@
   private static ArrayList<String> commonOpts;
 
   public static void main(String args[]) throws Exception {
-    commonOpts = new ArrayList();
+    commonOpts = new ArrayList<>();
 
     String testVmOptsStr = System.getProperty("test.java.opts");
     if (!testVmOptsStr.isEmpty()) {
@@ -63,7 +63,7 @@
   }
 
   private static void runTest(String... extraFlags) throws Exception {
-    ArrayList<String> testOpts = new ArrayList();
+    ArrayList<String> testOpts = new ArrayList<>();
     Collections.addAll(testOpts, commonOpts.toArray(new String[commonOpts.size()]));
     Collections.addAll(testOpts, extraFlags);
 
--- a/test/hotspot/jtreg/gc/nvdimm/TestAllocateOldGenAtError.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/test/hotspot/jtreg/gc/nvdimm/TestAllocateOldGenAtError.java	Wed Feb 13 13:22:15 2019 -0500
@@ -45,7 +45,7 @@
   private static ArrayList<String> commonOpts;
 
   public static void main(String args[]) throws Exception {
-    commonOpts = new ArrayList();
+    commonOpts = new ArrayList<>();
 
     String testVmOptsStr = System.getProperty("test.java.opts");
     if (!testVmOptsStr.isEmpty()) {
@@ -94,7 +94,7 @@
   }
 
   private static OutputAnalyzer runTest(String... extraFlags) throws Exception {
-    ArrayList<String> testOpts = new ArrayList();
+    ArrayList<String> testOpts = new ArrayList<>();
     Collections.addAll(testOpts, commonOpts.toArray(new String[commonOpts.size()]));
     Collections.addAll(testOpts, extraFlags);
 
--- a/test/hotspot/jtreg/gc/nvdimm/TestAllocateOldGenAtMultiple.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/test/hotspot/jtreg/gc/nvdimm/TestAllocateOldGenAtMultiple.java	Wed Feb 13 13:22:15 2019 -0500
@@ -42,7 +42,7 @@
 
 public class TestAllocateOldGenAtMultiple {
   public static void main(String args[]) throws Exception {
-    ArrayList<String> vmOpts = new ArrayList();
+    ArrayList<String> vmOpts = new ArrayList<>();
     String[] testVmOpts = null;
 
     String test_dir = System.getProperty("test.dir", ".");
--- a/test/hotspot/jtreg/gc/nvdimm/TestHumongousObjectsOnNvdimm.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/test/hotspot/jtreg/gc/nvdimm/TestHumongousObjectsOnNvdimm.java	Wed Feb 13 13:22:15 2019 -0500
@@ -41,7 +41,6 @@
 import sun.hotspot.WhiteBox;
 
 import java.util.ArrayList;
-import java.util.List;
 import java.util.Collections;
 import gc.testlibrary.Helpers;
 
@@ -54,7 +53,7 @@
     private static ArrayList<String> testOpts;
 
     public static void main(String args[]) throws Exception {
-        testOpts = new ArrayList();
+        testOpts = new ArrayList<>();
 
         String[] common_options = new String[] {
             "-Xbootclasspath/a:.",
--- a/test/hotspot/jtreg/gc/nvdimm/TestOldObjectsOnNvdimm.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/test/hotspot/jtreg/gc/nvdimm/TestOldObjectsOnNvdimm.java	Wed Feb 13 13:22:15 2019 -0500
@@ -41,7 +41,6 @@
 import sun.hotspot.WhiteBox;
 
 import java.util.ArrayList;
-import java.util.List;
 import java.util.Collections;
 
 /*
@@ -54,7 +53,7 @@
     private static ArrayList<String> testOpts;
 
     public static void main(String args[]) throws Exception {
-        testOpts = new ArrayList();
+        testOpts = new ArrayList<>();
 
         String[] common_options = new String[] {
             "-Xbootclasspath/a:.",
--- a/test/hotspot/jtreg/gc/nvdimm/TestYoungObjectsOnDram.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/test/hotspot/jtreg/gc/nvdimm/TestYoungObjectsOnDram.java	Wed Feb 13 13:22:15 2019 -0500
@@ -41,7 +41,6 @@
 import sun.hotspot.WhiteBox;
 
 import java.util.ArrayList;
-import java.util.List;
 import java.util.Collections;
 
 /**
@@ -54,7 +53,7 @@
     private static ArrayList<String> testOpts;
 
     public static void main(String args[]) throws Exception {
-        testOpts = new ArrayList();
+        testOpts = new ArrayList<>();
 
         String[] common_options = new String[] {
             "-Xbootclasspath/a:.",
--- a/test/hotspot/jtreg/gc/stress/TestReclaimStringsLeaksMemory.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/test/hotspot/jtreg/gc/stress/TestReclaimStringsLeaksMemory.java	Wed Feb 13 13:22:15 2019 -0500
@@ -55,12 +55,12 @@
     public static final int ReservedThreshold = 70000;
 
     public static void main(String[] args) throws Exception {
-        ArrayList<String> baseargs = new ArrayList(Arrays.asList( "-Xms256M",
-                                                                  "-Xmx256M",
-                                                                  "-Xlog:gc*",
-                                                                  "-XX:NativeMemoryTracking=summary",
-                                                                  "-XX:+UnlockDiagnosticVMOptions",
-                                                                  "-XX:+PrintNMTStatistics" ));
+        ArrayList<String> baseargs = new ArrayList<>(Arrays.asList("-Xms256M",
+                                                                   "-Xmx256M",
+                                                                   "-Xlog:gc*",
+                                                                   "-XX:NativeMemoryTracking=summary",
+                                                                   "-XX:+UnlockDiagnosticVMOptions",
+                                                                   "-XX:+PrintNMTStatistics" ));
         baseargs.addAll(Arrays.asList(args));
         baseargs.add(GCTest.class.getName());
         ProcessBuilder pb_default =
--- a/test/hotspot/jtreg/gc/stress/gclocker/TestGCLocker.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/test/hotspot/jtreg/gc/stress/gclocker/TestGCLocker.java	Wed Feb 13 13:22:15 2019 -0500
@@ -30,7 +30,6 @@
 import java.lang.management.MemoryPoolMXBean;
 import java.lang.management.ManagementFactory;
 import java.lang.management.MemoryUsage;
-import java.nio.ByteBuffer;
 import java.util.ArrayDeque;
 import java.util.HashMap;
 import java.util.List;
--- a/test/hotspot/jtreg/gc/stress/systemgc/TestSystemGC.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/test/hotspot/jtreg/gc/stress/systemgc/TestSystemGC.java	Wed Feb 13 13:22:15 2019 -0500
@@ -26,7 +26,6 @@
 // A test that stresses a full GC by allocating objects of different lifetimes
 // and concurrently calling System.gc().
 
-import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.TreeMap;
--- a/test/hotspot/jtreg/gc/whitebox/TestConcMarkCycleWB.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/test/hotspot/jtreg/gc/whitebox/TestConcMarkCycleWB.java	Wed Feb 13 13:22:15 2019 -0500
@@ -38,7 +38,6 @@
  * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -XX:+UseG1GC gc.whitebox.TestConcMarkCycleWB
  * @summary Verifies that ConcurrentMarking-related WB works properly
  */
-import static jdk.test.lib.Asserts.assertFalse;
 import static jdk.test.lib.Asserts.assertTrue;
 import sun.hotspot.WhiteBox;
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/NMT/MallocSiteTypeChange.java	Wed Feb 13 13:22:15 2019 -0500
@@ -0,0 +1,70 @@
+/*
+ * Copyright (c) 2019, Red Hat, Inc. 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 MallocSiteTypeChange
+ * @bug 8200109
+ * @key nmt jcmd
+ * @modules java.base/jdk.internal.misc
+ * @library /test/lib
+ * @build sun.hotspot.WhiteBox
+ * @run driver ClassFileInstaller sun.hotspot.WhiteBox
+ * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -XX:NativeMemoryTracking=detail MallocSiteTypeChange
+ */
+
+import jdk.test.lib.JDKToolFinder;
+import jdk.test.lib.process.ProcessTools;
+import jdk.test.lib.process.OutputAnalyzer;
+import sun.hotspot.WhiteBox;
+
+public class MallocSiteTypeChange {
+    public static void main(String args[]) throws Exception {
+        OutputAnalyzer output;
+        WhiteBox wb = WhiteBox.getWhiteBox();
+
+        // Grab my own PID
+        String pid = Long.toString(ProcessTools.getProcessId());
+        ProcessBuilder pb = new ProcessBuilder();
+
+        int pc = 1;
+        long addr = wb.NMTMallocWithPseudoStack(4 * 1024, pc);
+
+        // Verify that current tracking level is "detail"
+        pb.command(new String[] { JDKToolFinder.getJDKTool("jcmd"), pid, "VM.native_memory", "summary"});
+        output = new OutputAnalyzer(pb.start());
+        output.shouldContain("Test (reserved=4KB, committed=4KB)");
+
+        pb.command(new String[] { JDKToolFinder.getJDKTool("jcmd"), pid, "VM.native_memory", "baseline"});
+        output = new OutputAnalyzer(pb.start());
+        output.shouldContain("Baseline succeeded");
+
+        wb.NMTFree(addr);
+        addr = wb.NMTMallocWithPseudoStackAndType(2 * 1024, pc, 7 /* mtInternal */ );
+        pb.command(new String[] { JDKToolFinder.getJDKTool("jcmd"), pid, "VM.native_memory", "detail.diff"});
+        output = new OutputAnalyzer(pb.start());
+        output.shouldContain("(malloc=0KB type=Test -4KB)");
+        output.shouldContain("(malloc=2KB type=Internal +2KB #1 +1)");
+        output.shouldHaveExitValue(0);
+  }
+}
--- a/test/hotspot/jtreg/serviceability/dcmd/framework/HelpTest.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/test/hotspot/jtreg/serviceability/dcmd/framework/HelpTest.java	Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2019, 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 @@
  * @test
  * @summary Test of diagnostic command help (tests all DCMD executors)
  * @library /test/lib
+ *          /vmTestbase
  * @modules java.base/jdk.internal.misc
  *          java.compiler
  *          java.management
@@ -55,7 +56,13 @@
 
     @Test
     public void mainClass() {
-        run(new MainClassJcmdExecutor());
+        TestProcessLauncher t = new TestProcessLauncher(Process.class.getName());
+        try {
+            t.launch();
+            run(new MainClassJcmdExecutor(Process.class.getName()));
+        } finally {
+            t.quit();
+        }
     }
 
     @Test
@@ -68,4 +75,6 @@
         run(new JMXExecutor());
     }
 
+    private static class Process extends TestJavaProcess {
+    }
 }
--- a/test/hotspot/jtreg/serviceability/dcmd/framework/InvalidCommandTest.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/test/hotspot/jtreg/serviceability/dcmd/framework/InvalidCommandTest.java	Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2019, 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 @@
  * @test
  * @summary Test of invalid diagnostic command (tests all DCMD executors)
  * @library /test/lib
+ *          /vmTestbase
  * @modules java.base/jdk.internal.misc
  *          java.compiler
  *          java.management
@@ -53,7 +54,13 @@
 
     @Test
     public void mainClass() {
-        run(new MainClassJcmdExecutor());
+        TestProcessLauncher t = new TestProcessLauncher(Process.class.getName());
+        try {
+            t.launch();
+            run(new MainClassJcmdExecutor(Process.class.getName()));
+        } finally {
+            t.quit();
+        }
     }
 
     @Test
@@ -65,4 +72,7 @@
     public void jmx() {
         run(new JMXExecutor());
     }
+
+    private static class Process extends TestJavaProcess {
+    }
 }
--- a/test/hotspot/jtreg/serviceability/dcmd/framework/TEST.properties	Tue Feb 12 11:58:41 2019 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,2 +0,0 @@
-exclusiveAccess.dirs=.
-
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/serviceability/dcmd/framework/TestJavaProcess.java	Wed Feb 13 13:22:15 2019 -0500
@@ -0,0 +1,61 @@
+/*
+ * Copyright (c) 2019, 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 nsk.share.jpda.*;
+import nsk.share.jdi.*;
+
+/**
+ * A simple process that connects to a pipe and waits for command "quit" to
+ * be received.
+ *
+ * Usage: java TestJavaProcess -pipe.port <PIPE_PORT_NUMBER>
+ */
+
+public class TestJavaProcess {
+
+    static final int PASSED = 0;
+    static final int FAILED = 2;
+
+    public static void main(String argv[]) {
+
+        log("Test Java process started!");
+
+        ArgumentHandler argHandler = new ArgumentHandler(argv);
+        IOPipe pipe = argHandler.createDebugeeIOPipe();
+        pipe.println("ready");
+        log("Waiting for the quit command from the test ...");
+        String cmd = pipe.readln();
+        int exitCode = PASSED;
+        if (cmd.equals("quit")) {
+            log("'quit' received");
+        } else {
+            log("Invalid command received " + cmd);
+            exitCode = FAILED;
+        }
+        System.exit(exitCode);
+    }
+
+    private static void log(String message) {
+        System.out.println(message);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/serviceability/dcmd/framework/TestProcessLauncher.java	Wed Feb 13 13:22:15 2019 -0500
@@ -0,0 +1,78 @@
+
+/*
+ * Copyright (c) 2019, 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 nsk.share.*;
+import nsk.share.jpda.*;
+import nsk.share.jdi.*;
+
+/**
+ * Launches a new Java process that uses a communication pipe to interact
+ * with the test.
+ */
+
+public class TestProcessLauncher {
+
+    private final String className;
+    private final ArgumentHandler argHandler;
+
+    private IOPipe pipe;
+
+    public TestProcessLauncher(String className, ArgumentHandler argHandler) {
+        this.className = className;
+        this.argHandler = argHandler;
+    }
+
+    public TestProcessLauncher(String className) {
+        this(className, new ArgumentHandler(new String[0]));
+    }
+
+    public Process launch() {
+
+        String java = argHandler.getLaunchExecPath();
+
+        Log log = new Log(System.out, argHandler);
+        Binder binder = new Binder(argHandler, log);
+        binder.prepareForPipeConnection(argHandler);
+
+        String cmd = java + " " + className + " -pipe.port=" + argHandler.getPipePort();
+
+        Debugee debuggee = binder.startLocalDebugee(cmd);
+        debuggee.redirectOutput(log);
+
+        pipe = new IOPipe(debuggee);
+
+        String line = pipe.readln();
+        if (!"ready".equals(line)) {
+            System.out.println("Wrong reply received:" + line);
+        }
+        return debuggee.getProcess();
+    }
+
+    public void quit() {
+        if (pipe != null) {
+            pipe.println("quit");
+        }
+    }
+
+}
--- a/test/hotspot/jtreg/serviceability/dcmd/framework/VMVersionTest.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/test/hotspot/jtreg/serviceability/dcmd/framework/VMVersionTest.java	Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2019, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -27,6 +27,7 @@
 import jdk.test.lib.dcmd.MainClassJcmdExecutor;
 import jdk.test.lib.dcmd.FileJcmdExecutor;
 import jdk.test.lib.dcmd.JMXExecutor;
+import nsk.share.jdi.ArgumentHandler;
 
 import org.testng.annotations.Test;
 
@@ -34,6 +35,8 @@
  * @test
  * @summary Test of diagnostic command VM.version (tests all DCMD executors)
  * @library /test/lib
+ *          /vmTestbase
+ * @build   TestJavaProcess
  * @modules java.base/jdk.internal.misc
  *          java.compiler
  *          java.management
@@ -53,7 +56,13 @@
 
     @Test
     public void mainClass() {
-        run(new MainClassJcmdExecutor());
+        TestProcessLauncher t = new TestProcessLauncher(Process.class.getName());
+        try {
+            t.launch();
+            run(new MainClassJcmdExecutor(Process.class.getName()));
+        } finally {
+            t.quit();
+        }
     }
 
     @Test
@@ -65,4 +74,6 @@
     public void jmx() {
         run(new JMXExecutor());
     }
+
+    private static class Process extends TestJavaProcess{}
 }
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/VirtualMachine/canBeModified/canbemodified001.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/VirtualMachine/canBeModified/canbemodified001.java	Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2019, 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,7 @@
             exitStatus = Consts.TEST_FAILED;
             e.printStackTrace();
         } finally {
+            debugee.resume();
             debugee.endDebugee();
         }
         display("Test finished. exitStatus = " + exitStatus);
--- a/test/hotspot/jtreg/vmTestbase/nsk/share/jdi/Debugee.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/test/hotspot/jtreg/vmTestbase/nsk/share/jdi/Debugee.java	Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2001, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2019, 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
@@ -557,6 +557,7 @@
      * exit status code.
      */
     public int endDebugee() {
+        int status = waitFor();
         if (vm != null) {
             try {
                 vm.dispose();
@@ -564,7 +565,7 @@
             }
             vm = null;
         }
-        return waitFor();
+        return status;
     }
 
     /*
--- a/test/hotspot/jtreg/vmTestbase/nsk/share/jpda/DebugeeBinder.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/test/hotspot/jtreg/vmTestbase/nsk/share/jpda/DebugeeBinder.java	Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2001, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2019, 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
@@ -175,7 +175,7 @@
      * Make preperation for IOPipe connection before starting debugee VM process.
      * May change options in the passed <code>argumentHandler</code>.
      */
-    protected void prepareForPipeConnection(DebugeeArgumentHandler argumentHandler) {
+    public void prepareForPipeConnection(DebugeeArgumentHandler argumentHandler) {
         if (argumentHandler.isTransportAddressDynamic()) {
             try {
                 pipeServerSocket = new ServerSocket();
--- a/test/jdk/ProblemList.txt	Tue Feb 12 11:58:41 2019 -0500
+++ b/test/jdk/ProblemList.txt	Wed Feb 13 13:22:15 2019 -0500
@@ -147,7 +147,6 @@
 java/awt/EventQueue/6980209/bug6980209.java 8198615 macosx-all
 java/awt/Frame/ExceptionOnSetExtendedStateTest/ExceptionOnSetExtendedStateTest.java 8198237 macosx-all
 java/awt/Frame/ShapeNotSetSometimes/ShapeNotSetSometimes.java 8144030 macosx-all,linux-all
-java/awt/Frame/UnfocusableMaximizedFrameResizablity/UnfocusableMaximizedFrameResizablity.java 8208290 macosx-all
 java/awt/grab/EmbeddedFrameTest1/EmbeddedFrameTest1.java 7080150 macosx-all
 java/awt/event/InputEvent/EventWhenTest/EventWhenTest.java 8168646 generic-all
 java/awt/KeyboardFocusmanager/TypeAhead/EnqueueWithDialogButtonTest/EnqueueWithDialogButtonTest.java 8198623 macosx-all
@@ -247,10 +246,9 @@
 java/awt/FullScreen/DisplayChangeVITest/DisplayChangeVITest.java 8169469 windows-all
 java/awt/Graphics2D/DrawString/DrawRotatedStringUsingRotatedFont.java 8197796 generic-all
 java/awt/TextArea/TextAreaScrolling/TextAreaScrolling.java 8196300 windows-all
-java/awt/print/PrinterJob/Margins.java 8196301 windows-all
 java/awt/print/PrinterJob/PSQuestionMark.java 7003378 generic-all
 java/awt/print/PrinterJob/GlyphPositions.java 7003378 generic-all
-java/awt/Choice/PopupPosTest/PopupPosTest.html 8192930 windows-all
+java/awt/Choice/PopupPosTest/PopupPosTest.html  8197811 windows-all
 java/awt/Choice/ChoiceMouseWheelTest/ChoiceMouseWheelTest.java 7100044 macosx-all,linux-all
 java/awt/Component/CreateImage/CreateImage.java 8198334  windows-all
 java/awt/Component/GetScreenLocTest/GetScreenLocTest.java 4753654 generic-all
@@ -258,32 +256,32 @@
 java/awt/Focus/NonFocusableWindowTest/NoEventsTest.java 8000171 windows-all
 java/awt/Frame/MiscUndecorated/RepaintTest.java 8079267 windows-all,linux-all
 java/awt/Robot/ModifierRobotKey/ModifierRobotKeyTest.java 8157173 generic-all
-java/awt/Modal/FileDialog/FileDialogAppModal1Test.java 8198664 macosx-all
-java/awt/Modal/FileDialog/FileDialogAppModal2Test.java 8198664 macosx-all
-java/awt/Modal/FileDialog/FileDialogAppModal3Test.java 8198664 macosx-all
-java/awt/Modal/FileDialog/FileDialogAppModal4Test.java 8198664 macosx-all
-java/awt/Modal/FileDialog/FileDialogAppModal5Test.java 8198664 macosx-all
-java/awt/Modal/FileDialog/FileDialogAppModal6Test.java 8198664 macosx-all
-java/awt/Modal/FileDialog/FileDialogDocModal1Test.java 8198664 macosx-all
-java/awt/Modal/FileDialog/FileDialogDocModal2Test.java 8198664 macosx-all
-java/awt/Modal/FileDialog/FileDialogDocModal3Test.java 8198664 macosx-all
-java/awt/Modal/FileDialog/FileDialogDocModal4Test.java 8198664 macosx-all
-java/awt/Modal/FileDialog/FileDialogDocModal5Test.java 8198664 macosx-all
-java/awt/Modal/FileDialog/FileDialogDocModal6Test.java 8198664 macosx-all
-java/awt/Modal/FileDialog/FileDialogDocModal7Test.java 8198664 macosx-all
-java/awt/Modal/FileDialog/FileDialogModal1Test.java 8198664 macosx-all
-java/awt/Modal/FileDialog/FileDialogModal2Test.java 8198664 macosx-all
-java/awt/Modal/FileDialog/FileDialogModal3Test.java 8198664 macosx-all
-java/awt/Modal/FileDialog/FileDialogModal4Test.java 8198664 macosx-all
-java/awt/Modal/FileDialog/FileDialogModal5Test.java 8198664 macosx-all
-java/awt/Modal/FileDialog/FileDialogModal6Test.java 8198664 macosx-all
-java/awt/Modal/FileDialog/FileDialogNonModal1Test.java 8198664 macosx-all
-java/awt/Modal/FileDialog/FileDialogNonModal2Test.java 8198664 macosx-all,linux-all
-java/awt/Modal/FileDialog/FileDialogNonModal3Test.java 8198664 macosx-all
-java/awt/Modal/FileDialog/FileDialogNonModal4Test.java 8198664 macosx-all
-java/awt/Modal/FileDialog/FileDialogNonModal5Test.java 8198664 macosx-all
-java/awt/Modal/FileDialog/FileDialogNonModal6Test.java 8198664 macosx-all,linux-all
-java/awt/Modal/FileDialog/FileDialogNonModal7Test.java 8198664 macosx-all,linux-all
+java/awt/Modal/FileDialog/FileDialogAppModal1Test.java 7186009 macosx-all
+java/awt/Modal/FileDialog/FileDialogAppModal2Test.java 7186009 macosx-all
+java/awt/Modal/FileDialog/FileDialogAppModal3Test.java 7186009 macosx-all
+java/awt/Modal/FileDialog/FileDialogAppModal4Test.java 7186009 macosx-all
+java/awt/Modal/FileDialog/FileDialogAppModal5Test.java 7186009 macosx-all
+java/awt/Modal/FileDialog/FileDialogAppModal6Test.java 7186009 macosx-all
+java/awt/Modal/FileDialog/FileDialogDocModal1Test.java 7186009 macosx-all
+java/awt/Modal/FileDialog/FileDialogDocModal2Test.java 7186009 macosx-all
+java/awt/Modal/FileDialog/FileDialogDocModal3Test.java 7186009 macosx-all
+java/awt/Modal/FileDialog/FileDialogDocModal4Test.java 7186009 macosx-all
+java/awt/Modal/FileDialog/FileDialogDocModal5Test.java 7186009 macosx-all
+java/awt/Modal/FileDialog/FileDialogDocModal6Test.java 7186009 macosx-all
+java/awt/Modal/FileDialog/FileDialogDocModal7Test.java 7186009 macosx-all
+java/awt/Modal/FileDialog/FileDialogModal1Test.java 7186009 macosx-all
+java/awt/Modal/FileDialog/FileDialogModal2Test.java 7186009 macosx-all
+java/awt/Modal/FileDialog/FileDialogModal3Test.java 7186009 macosx-all
+java/awt/Modal/FileDialog/FileDialogModal4Test.java 7186009 macosx-all
+java/awt/Modal/FileDialog/FileDialogModal5Test.java 7186009 macosx-all
+java/awt/Modal/FileDialog/FileDialogModal6Test.java 7186009 macosx-all
+java/awt/Modal/FileDialog/FileDialogNonModal1Test.java 7186009 macosx-all
+java/awt/Modal/FileDialog/FileDialogNonModal2Test.java 7186009 macosx-all,linux-all
+java/awt/Modal/FileDialog/FileDialogNonModal3Test.java 7186009 macosx-all
+java/awt/Modal/FileDialog/FileDialogNonModal4Test.java 7186009 macosx-all
+java/awt/Modal/FileDialog/FileDialogNonModal5Test.java 7186009 macosx-all
+java/awt/Modal/FileDialog/FileDialogNonModal6Test.java 7186009 macosx-all,linux-all
+java/awt/Modal/FileDialog/FileDialogNonModal7Test.java 7186009 macosx-all,linux-all
 java/awt/Modal/FileDialog/FileDialogTKModal1Test.java 8196430 generic-all
 java/awt/Modal/FileDialog/FileDialogTKModal2Test.java 8196430 generic-all
 java/awt/Modal/FileDialog/FileDialogTKModal3Test.java 8196430 generic-all
@@ -716,7 +714,6 @@
 javax/swing/JComponent/6683775/bug6683775.java 8172337 generic-all
 javax/swing/JComboBox/6236162/bug6236162.java 8028707 windows-all,macosx-all
 javax/swing/text/html/parser/Test8017492.java 8022535 generic-all
-javax/swing/JWindow/ShapedAndTranslucentWindows/PerPixelTranslucentCanvas.java 8081476 windows-all,macosx-all
 javax/swing/JWindow/ShapedAndTranslucentWindows/PerPixelTranslucentSwing.java 8194128 macosx-all
 javax/swing/JWindow/ShapedAndTranslucentWindows/SetShapeAndClickSwing.java 8013450 macosx-all
 javax/swing/JWindow/ShapedAndTranslucentWindows/TranslucentJComboBox.java 8024627 macosx-all
@@ -740,7 +737,7 @@
 javax/swing/JFileChooser/4524490/bug4524490.java 8042380 generic-all
 javax/swing/JFileChooser/8002077/bug8002077.java 8196094 windows-all
 javax/swing/JFileChooser/DeserializedJFileChooser/DeserializedJFileChooserTest.java 8196095 generic-all
-javax/swing/JFileChooser/6396844/TwentyThousandTest.java 8058231 generic-all
+javax/swing/JFileChooser/6396844/TwentyThousandTest.java 8198003 generic-all
 javax/swing/JFrame/8175301/ScaledFrameBackgroundTest.java 8193942 generic-all
 javax/swing/JList/6462008/bug6462008.java 7156347 generic-all
 javax/swing/JPopupMenu/6580930/bug6580930.java 8196096 windows-all,macosx-all
@@ -804,7 +801,6 @@
 javax/swing/JTextArea/TextViewOOM/TextViewOOM.java 8167355 generic-all
 javax/swing/text/Utilities/8142966/SwingFontMetricsTest.java 8199529 windows-all
 javax/swing/JPopupMenu/8075063/ContextMenuScrollTest.java 202880 linux-all
-javax/swing/JPopupMenu/6583251/bug6583251.java 8213564 linux-all
 javax/swing/dnd/8139050/NativeErrorsInTableDnD.java 8202765  macosx-all,linux-all
 javax/swing/Popup/TaskbarPositionTest.java 8065097 macosx-all,linux-all
 javax/swing/JButton/4368790/bug4368790.java 8213123 macosx-all
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/com/sun/net/httpserver/bugs/HandlerConnectionClose.java	Wed Feb 13 13:22:15 2019 -0500
@@ -0,0 +1,437 @@
+/*
+ * Copyright (c) 2019, 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 8218554
+ * @summary  test that the handler can request a connection close.
+ * @library /test/lib
+ * @build jdk.test.lib.net.SimpleSSLContext
+ * @run main/othervm HandlerConnectionClose
+ */
+
+import com.sun.net.httpserver.HttpExchange;
+import com.sun.net.httpserver.HttpHandler;
+import com.sun.net.httpserver.HttpServer;
+import com.sun.net.httpserver.HttpsConfigurator;
+import com.sun.net.httpserver.HttpsServer;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.HttpURLConnection;
+import java.net.InetAddress;
+import java.net.InetSocketAddress;
+import java.net.Socket;
+import java.net.URI;
+import java.net.URL;
+import java.nio.charset.StandardCharsets;
+import java.util.List;
+import java.util.Locale;
+import java.util.logging.Handler;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import java.util.logging.SimpleFormatter;
+import java.util.logging.StreamHandler;
+import jdk.test.lib.net.SimpleSSLContext;
+import javax.net.ssl.HttpsURLConnection;
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.SSLSession;
+
+public class HandlerConnectionClose
+{
+    static final int ONEK = 1024;
+    static final long POST_SIZE = ONEK * 1L;
+    SSLContext sslContext;
+    Logger logger;
+
+    void test(String[] args) throws Exception {
+
+        HttpServer httpServer = startHttpServer("http");
+        try {
+            testHttpURLConnection(httpServer, "http","/close/legacy/http/chunked");
+            testHttpURLConnection(httpServer, "http","/close/legacy/http/fixed");
+            testPlainSocket(httpServer, "http","/close/plain/http/chunked");
+            testPlainSocket(httpServer, "http","/close/plain/http/fixed");
+        } finally {
+            httpServer.stop(0);
+        }
+        sslContext = new SimpleSSLContext().get();
+        HttpServer httpsServer = startHttpServer("https");
+        try {
+            testHttpURLConnection(httpsServer, "https","/close/legacy/https/chunked");
+            testHttpURLConnection(httpsServer, "https","/close/legacy/https/fixed");
+            testPlainSocket(httpsServer, "https","/close/plain/https/chunked");
+            testPlainSocket(httpsServer, "https","/close/plain/https/fixed");
+        } finally{
+            httpsServer.stop(0);
+        }
+    }
+
+    void testHttpURLConnection(HttpServer httpServer, String protocol, String path) throws Exception {
+        int port = httpServer.getAddress().getPort();
+        String host = httpServer.getAddress().getHostString();
+        URL url = new URI(protocol, null, host, port, path, null, null).toURL();
+        HttpURLConnection uc = (HttpURLConnection) url.openConnection();
+        if ("https".equalsIgnoreCase(protocol)) {
+            ((HttpsURLConnection)uc).setSSLSocketFactory(sslContext.getSocketFactory());
+            ((HttpsURLConnection)uc).setHostnameVerifier((String hostname, SSLSession session) -> true);
+        }
+        uc.setDoOutput(true);
+        uc.setRequestMethod("POST");
+        uc.setFixedLengthStreamingMode(POST_SIZE);
+        OutputStream os = uc.getOutputStream();
+
+        /* create a 1K byte array with data to POST */
+        byte[] ba = new byte[ONEK];
+        for (int i = 0; i < ONEK; i++)
+            ba[i] = (byte) i;
+
+        System.out.println("\n" + uc.getClass().getSimpleName() +": POST " + url + " HTTP/1.1");
+        long times = POST_SIZE / ONEK;
+        for (int i = 0; i < times; i++) {
+            os.write(ba);
+        }
+
+        os.close();
+        InputStream is = uc.getInputStream();
+        int read;
+        long count = 0;
+        while ((read = is.read(ba)) != -1) {
+            for (int i = 0; i < read; i++) {
+                byte expected = (byte) count++;
+                if (ba[i] != expected) {
+                    throw new IOException("byte mismatch at "
+                            + (count - 1) + ": expected " + expected + " got " + ba[i]);
+                }
+            }
+        }
+        if (count != POST_SIZE) {
+            throw new IOException("Unexpected length: " + count + " expected " + POST_SIZE);
+        }
+        is.close();
+
+        pass();
+    }
+
+    void testPlainSocket(HttpServer httpServer, String protocol, String path) throws Exception {
+        int port = httpServer.getAddress().getPort();
+        String host = httpServer.getAddress().getHostString();
+        URL url = new URI(protocol, null, host, port, path, null, null).toURL();
+        Socket socket;
+        if ("https".equalsIgnoreCase(protocol)) {
+            socket = sslContext.getSocketFactory().createSocket(host, port);
+        } else {
+            socket = new Socket(host, port);
+        }
+        try (Socket sock = socket) {
+            OutputStream os = socket.getOutputStream();
+
+            // send request headers
+            String request = new StringBuilder()
+                    .append("POST ").append(path).append(" HTTP/1.1").append("\r\n")
+                    .append("host: ").append(host).append(':').append(port).append("\r\n")
+                    .append("Content-Length: ").append(POST_SIZE).append("\r\n")
+                    .append("\r\n")
+                    .toString();
+            os.write(request.getBytes(StandardCharsets.US_ASCII));
+
+            /* create a 1K byte array with data to POST */
+            byte[] ba = new byte[ONEK];
+            for (int i = 0; i < ONEK; i++)
+                ba[i] = (byte) i;
+
+            // send request data
+            long times = POST_SIZE / ONEK;
+            for (int i = 0; i < times; i++) {
+                os.write(ba);
+            }
+            os.flush();
+
+            InputStream is = socket.getInputStream();
+            ByteArrayOutputStream bos = new ByteArrayOutputStream();
+
+            // read all response headers
+            int c;
+            int crlf = 0;
+            while ((c = is.read()) != -1) {
+                if (c == '\r') continue;
+                if (c == '\n') crlf++;
+                else crlf = 0;
+                bos.write(c);
+                if (crlf == 2) break;
+            }
+            String responseHeadersStr = bos.toString(StandardCharsets.US_ASCII);
+            List<String> responseHeaders = List.of(responseHeadersStr.split("\n"));
+            System.out.println("\nPOST " + url + " HTTP/1.1");
+            responseHeaders.stream().forEach(s -> System.out.println("[reply]\t" + s));
+            String statusLine = responseHeaders.get(0);
+            if (!statusLine.startsWith("HTTP/1.1 200 "))
+                throw new IOException("Unexpected status: " + statusLine);
+            String cl = responseHeaders.stream()
+                    .map(s -> s.toLowerCase(Locale.ROOT))
+                    .filter(s -> s.startsWith("content-length: "))
+                    .findFirst()
+                    .orElse(null);
+            String te = responseHeaders.stream()
+                    .map(s -> s.toLowerCase(Locale.ROOT))
+                    .filter(s -> s.startsWith("transfer-encoding: "))
+                    .findFirst()
+                    .orElse(null);
+
+            // check content-length and transfer-encoding are as expected
+            int read = 0;
+            long count = 0;
+            if (path.endsWith("/fixed")) {
+                if (!("content-length: " + POST_SIZE).equalsIgnoreCase(cl)) {
+                    throw new IOException("Unexpected Content-Length: [" + cl + "]");
+                }
+                if (te != null) {
+                    throw new IOException("Unexpected Transfer-Encoding: [" + te + "]");
+                }
+                // Got expected Content-Length: 1024 - read response data
+                while ((read = is.read()) != -1) {
+                    int expected = (int) (count & 0xFF);
+                    if ((read & 0xFF) != expected) {
+                        throw new IOException("byte mismatch at "
+                                + (count - 1) + ": expected " + expected + " got " + read);
+                    }
+                    if (++count == POST_SIZE) break;
+                }
+            } else if (cl != null) {
+                throw new IOException("Unexpected Content-Length: [" + cl + "]");
+            } else {
+                if (!("transfer-encoding: chunked").equalsIgnoreCase(te)) {
+                    throw new IOException("Unexpected Transfer-Encoding: [" + te + "]");
+                }
+                // This is a quick & dirty implementation of
+                // chunk decoding - no trailers - no extensions
+                StringBuilder chunks = new StringBuilder();
+                int cs = -1;
+                while (cs != 0) {
+                    cs = 0;
+                    chunks.setLength(0);
+
+                    // read next chunk length
+                    while ((read = is.read()) != -1) {
+                        if (read == '\r') continue;
+                        if (read == '\n') break;
+                        chunks.append((char) read);
+                    }
+                    cs = Integer.parseInt(chunks.toString().trim(), 16);
+                    System.out.println("Got chunk length: " + cs);
+
+                    // If chunk size is 0, then we have read the last chunk.
+                    if (cs == 0) break;
+
+                    // Read the chunk data
+                    while (--cs >= 0) {
+                        read = is.read();
+                        if (read == -1) break; // EOF
+                        int expected = (int) (count & 0xFF);
+                        if ((read & 0xFF) != expected) {
+                            throw new IOException("byte mismatch at "
+                                    + (count - 1) + ": expected " + expected + " got " + read);
+                        }
+                        // This is cheating: we know the size :-)
+                        if (++count == POST_SIZE) break;
+                    }
+
+                    if (read == -1) {
+                        throw new IOException("Unexpected EOF after " + count + " data bytes");
+                    }
+
+                    // read CRLF
+                    if ((read = is.read()) != '\r') {
+                        throw new IOException("Expected CR at " + count + "after chunk data - got " + read);
+                    }
+                    if ((read = is.read()) != '\n') {
+                        throw new IOException("Expected LF at " + count + "after chunk data - got " + read);
+                    }
+
+                    if (cs == 0 && count == POST_SIZE) {
+                        cs = -1;
+                    }
+
+                    if (cs != -1) {
+                        // count == POST_SIZE, but some chunk data still to be read?
+                        throw new IOException("Unexpected chunk size, "
+                                + cs + " bytes still to read after " + count +
+                                " data bytes received.");
+                    }
+                }
+                // Last CRLF?
+                for (int i = 0; i < 2; i++) {
+                    if ((read = is.read()) == -1) break;
+                }
+            }
+
+            if (count != POST_SIZE) {
+                throw new IOException("Unexpected length: " + count + " expected " + POST_SIZE);
+            }
+
+            if (!sock.isClosed()) {
+                try {
+                    // We send an end request to the server to verify that the
+                    // connection is closed. If the server has not closed the
+                    // connection, it will reply. If we receive a response,
+                    // we should fail...
+                    String endrequest = new StringBuilder()
+                            .append("GET ").append("/close/end").append(" HTTP/1.1").append("\r\n")
+                            .append("host: ").append(host).append(':').append(port).append("\r\n")
+                            .append("Content-Length: ").append(0).append("\r\n")
+                            .append("\r\n")
+                            .toString();
+                    os.write(endrequest.getBytes(StandardCharsets.US_ASCII));
+                    os.flush();
+                    StringBuilder resp = new StringBuilder();
+                    crlf = 0;
+
+                    // read all headers.
+                    // If the server closed the connection as expected
+                    // we should immediately read EOF
+                    while ((read = is.read()) != -1) {
+                        if (read == '\r') continue;
+                        if (read == '\n') crlf++;
+                        else crlf = 0;
+                        if (crlf == 2) break;
+                        resp.append((char) read);
+                    }
+
+                    List<String> lines = List.of(resp.toString().split("\n"));
+                    if (read != -1 || resp.length() != 0) {
+                        System.err.println("Connection not closed!");
+                        System.err.println("Got: ");
+                        lines.stream().forEach(s -> System.err.println("[end]\t" + s));
+                        throw new AssertionError("EOF not received after " + count + " data bytes");
+                    }
+                    if (read != -1) {
+                        throw new AssertionError("EOF was expected after " + count + " bytes, but got: " + read);
+                    } else {
+                        System.out.println("Got expected EOF (" + read + ")");
+                    }
+                } catch (IOException x) {
+                    // expected! all is well
+                    System.out.println("Socket closed as expected, got exception writing to it.");
+                }
+            } else {
+                System.out.println("Socket closed as expected");
+            }
+            pass();
+        }
+    }
+
+    /**
+     * Http Server
+     */
+    HttpServer startHttpServer(String protocol) throws IOException {
+        if (debug) {
+            logger = Logger.getLogger("com.sun.net.httpserver");
+            Handler outHandler = new StreamHandler(System.out,
+                                     new SimpleFormatter());
+            outHandler.setLevel(Level.FINEST);
+            logger.setLevel(Level.FINEST);
+            logger.addHandler(outHandler);
+        }
+
+        InetSocketAddress serverAddress = new InetSocketAddress(InetAddress.getLoopbackAddress(), 0);
+        HttpServer httpServer = null;
+        if ("http".equalsIgnoreCase(protocol)) {
+            httpServer = HttpServer.create(serverAddress, 0);
+        }
+        if ("https".equalsIgnoreCase(protocol)) {
+            HttpsServer httpsServer = HttpsServer.create(serverAddress, 0);
+            httpsServer.setHttpsConfigurator(new HttpsConfigurator(sslContext));
+            httpServer = httpsServer;
+        }
+        httpServer.createContext("/close/", new MyHandler(POST_SIZE));
+        System.out.println("Server created at: " + httpServer.getAddress());
+        httpServer.start();
+        return httpServer;
+    }
+
+    class MyHandler implements HttpHandler {
+        static final int BUFFER_SIZE = 512;
+        final long expected;
+
+        MyHandler(long expected){
+            this.expected = expected;
+        }
+
+        @Override
+        public void handle(HttpExchange t) throws IOException {
+            System.out.println("Server: serving " + t.getRequestURI());
+            boolean chunked = t.getRequestURI().getPath().endsWith("/chunked");
+            boolean fixed = t.getRequestURI().getPath().endsWith("/fixed");
+            boolean end = t.getRequestURI().getPath().endsWith("/end");
+            long responseLength = fixed ? POST_SIZE : 0;
+            responseLength = end ? -1 : responseLength;
+            responseLength = chunked ? 0 : responseLength;
+
+            if (!end) t.getResponseHeaders().add("connection", "CLose");
+            t.sendResponseHeaders(200, responseLength);
+
+            if (!end) {
+                OutputStream os = t.getResponseBody();
+                InputStream is = t.getRequestBody();
+                byte[] ba = new byte[BUFFER_SIZE];
+                int read;
+                long count = 0L;
+                while ((read = is.read(ba)) != -1) {
+                    count += read;
+                    os.write(ba, 0, read);
+                }
+                is.close();
+
+                check(count == expected, "Expected: " + expected + ", received "
+                        + count);
+                debug("Received " + count + " bytes");
+                os.close();
+            }
+
+            t.close();
+        }
+    }
+
+         //--------------------- Infrastructure ---------------------------
+    boolean debug = true;
+    volatile int passed = 0, failed = 0;
+    void pass() {passed++;}
+    void fail() {failed++; Thread.dumpStack();}
+    void fail(String msg) {System.err.println(msg); fail();}
+    void unexpected(Throwable t) {failed++; t.printStackTrace();}
+    void check(boolean cond) {if (cond) pass(); else fail();}
+    void check(boolean cond, String failMessage) {if (cond) pass(); else fail(failMessage);}
+    void debug(String message) {if(debug) { System.out.println(message); }  }
+    public static void main(String[] args) throws Throwable {
+        Class<?> k = new Object(){}.getClass().getEnclosingClass();
+        try {k.getMethod("instanceMain",String[].class)
+                .invoke( k.newInstance(), (Object) args);}
+        catch (Throwable e) {throw e.getCause();}}
+    public void instanceMain(String[] args) throws Throwable {
+        try {test(args);} catch (Throwable t) {unexpected(t);}
+        System.out.printf("%nPassed = %d, failed = %d%n%n", passed, failed);
+        if (failed > 0) throw new AssertionError("Some tests failed");}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/java/lang/Package/bootclasspath/GetPackageFromBootClassPath.java	Wed Feb 13 13:22:15 2019 -0500
@@ -0,0 +1,67 @@
+/*
+ * Copyright (c) 2019, 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 8218419
+ * @library /test/lib
+ * @modules jdk.compiler
+ * @build jdk.test.lib.compiler.CompilerUtils
+ * @run driver GetPackageFromBootClassPath setup
+ * @run main/othervm -Xbootclasspath/a:boot GetPackageFromBootClassPath
+ */
+
+import java.lang.annotation.Annotation;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.Arrays;
+
+public class GetPackageFromBootClassPath {
+    public static void main(String... args) throws Exception {
+        if (args.length == 0) {
+            test();
+        } else {
+            setupBootLib();
+        }
+    }
+
+    private static void test() throws Exception {
+        Class<?> c = Class.forName("foo.Foo", false, null);
+        Package p = c.getPackage();
+        Annotation[] annotations = p.getAnnotations();
+        Class<?> annType = Class.forName("foo.MyAnnotation", false, null);
+        if (annotations.length != 1 ||
+            annotations[0].annotationType() != annType) {
+            throw new RuntimeException("Expected foo.MyAnnotation but got " +
+                Arrays.toString(annotations));
+        }
+    }
+
+    private static void setupBootLib() throws Exception {
+        Path testSrc = Paths.get(System.getProperty("test.src"), "boot");
+        Path bootDir = Paths.get("boot");
+        if (!jdk.test.lib.compiler.CompilerUtils.compile(testSrc, bootDir)) {
+            throw new RuntimeException("compilation fails");
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/java/lang/Package/bootclasspath/boot/foo/Foo.java	Wed Feb 13 13:22:15 2019 -0500
@@ -0,0 +1,27 @@
+/*
+ * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package foo;
+
+public class Foo {
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/java/lang/Package/bootclasspath/boot/foo/MyAnnotation.java	Wed Feb 13 13:22:15 2019 -0500
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package foo;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Target(ElementType.PACKAGE)
+@Retention(RetentionPolicy.RUNTIME)
+public @interface MyAnnotation {
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/java/lang/Package/bootclasspath/boot/foo/package-info.java	Wed Feb 13 13:22:15 2019 -0500
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2019, 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.
+ */
+
+@MyAnnotation
+package foo;
--- a/test/jdk/java/lang/invoke/VarHandles/VarHandleTestAccessBoolean.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/test/jdk/java/lang/invoke/VarHandles/VarHandleTestAccessBoolean.java	Wed Feb 13 13:22:15 2019 -0500
@@ -133,16 +133,13 @@
     }
 
     @Test
-    public void testEqualsAndHashCode() {
+    public void testEquals() {
         VarHandle[] vhs1 = allocate(true);
         VarHandle[] vhs2 = allocate(true);
 
         for (int i = 0; i < vhs1.length; i++) {
             for (int j = 0; j < vhs1.length; j++) {
-                if (i == j) {
-                    assertEquals(vhs1[i], vhs1[i]);
-                }
-                else {
+                if (i != j) {
                     assertNotEquals(vhs1[i], vhs1[j]);
                     assertNotEquals(vhs1[i], vhs2[j]);
                 }
--- a/test/jdk/java/lang/invoke/VarHandles/VarHandleTestAccessByte.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/test/jdk/java/lang/invoke/VarHandles/VarHandleTestAccessByte.java	Wed Feb 13 13:22:15 2019 -0500
@@ -133,16 +133,13 @@
     }
 
     @Test
-    public void testEqualsAndHashCode() {
+    public void testEquals() {
         VarHandle[] vhs1 = allocate(true);
         VarHandle[] vhs2 = allocate(true);
 
         for (int i = 0; i < vhs1.length; i++) {
             for (int j = 0; j < vhs1.length; j++) {
-                if (i == j) {
-                    assertEquals(vhs1[i], vhs1[i]);
-                }
-                else {
+                if (i != j) {
                     assertNotEquals(vhs1[i], vhs1[j]);
                     assertNotEquals(vhs1[i], vhs2[j]);
                 }
--- a/test/jdk/java/lang/invoke/VarHandles/VarHandleTestAccessChar.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/test/jdk/java/lang/invoke/VarHandles/VarHandleTestAccessChar.java	Wed Feb 13 13:22:15 2019 -0500
@@ -133,16 +133,13 @@
     }
 
     @Test
-    public void testEqualsAndHashCode() {
+    public void testEquals() {
         VarHandle[] vhs1 = allocate(true);
         VarHandle[] vhs2 = allocate(true);
 
         for (int i = 0; i < vhs1.length; i++) {
             for (int j = 0; j < vhs1.length; j++) {
-                if (i == j) {
-                    assertEquals(vhs1[i], vhs1[i]);
-                }
-                else {
+                if (i != j) {
                     assertNotEquals(vhs1[i], vhs1[j]);
                     assertNotEquals(vhs1[i], vhs2[j]);
                 }
--- a/test/jdk/java/lang/invoke/VarHandles/VarHandleTestAccessDouble.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/test/jdk/java/lang/invoke/VarHandles/VarHandleTestAccessDouble.java	Wed Feb 13 13:22:15 2019 -0500
@@ -133,16 +133,13 @@
     }
 
     @Test
-    public void testEqualsAndHashCode() {
+    public void testEquals() {
         VarHandle[] vhs1 = allocate(true);
         VarHandle[] vhs2 = allocate(true);
 
         for (int i = 0; i < vhs1.length; i++) {
             for (int j = 0; j < vhs1.length; j++) {
-                if (i == j) {
-                    assertEquals(vhs1[i], vhs1[i]);
-                }
-                else {
+                if (i != j) {
                     assertNotEquals(vhs1[i], vhs1[j]);
                     assertNotEquals(vhs1[i], vhs2[j]);
                 }
--- a/test/jdk/java/lang/invoke/VarHandles/VarHandleTestAccessFloat.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/test/jdk/java/lang/invoke/VarHandles/VarHandleTestAccessFloat.java	Wed Feb 13 13:22:15 2019 -0500
@@ -133,16 +133,13 @@
     }
 
     @Test
-    public void testEqualsAndHashCode() {
+    public void testEquals() {
         VarHandle[] vhs1 = allocate(true);
         VarHandle[] vhs2 = allocate(true);
 
         for (int i = 0; i < vhs1.length; i++) {
             for (int j = 0; j < vhs1.length; j++) {
-                if (i == j) {
-                    assertEquals(vhs1[i], vhs1[i]);
-                }
-                else {
+                if (i != j) {
                     assertNotEquals(vhs1[i], vhs1[j]);
                     assertNotEquals(vhs1[i], vhs2[j]);
                 }
--- a/test/jdk/java/lang/invoke/VarHandles/VarHandleTestAccessInt.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/test/jdk/java/lang/invoke/VarHandles/VarHandleTestAccessInt.java	Wed Feb 13 13:22:15 2019 -0500
@@ -133,16 +133,13 @@
     }
 
     @Test
-    public void testEqualsAndHashCode() {
+    public void testEquals() {
         VarHandle[] vhs1 = allocate(true);
         VarHandle[] vhs2 = allocate(true);
 
         for (int i = 0; i < vhs1.length; i++) {
             for (int j = 0; j < vhs1.length; j++) {
-                if (i == j) {
-                    assertEquals(vhs1[i], vhs1[i]);
-                }
-                else {
+                if (i != j) {
                     assertNotEquals(vhs1[i], vhs1[j]);
                     assertNotEquals(vhs1[i], vhs2[j]);
                 }
--- a/test/jdk/java/lang/invoke/VarHandles/VarHandleTestAccessLong.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/test/jdk/java/lang/invoke/VarHandles/VarHandleTestAccessLong.java	Wed Feb 13 13:22:15 2019 -0500
@@ -133,16 +133,13 @@
     }
 
     @Test
-    public void testEqualsAndHashCode() {
+    public void testEquals() {
         VarHandle[] vhs1 = allocate(true);
         VarHandle[] vhs2 = allocate(true);
 
         for (int i = 0; i < vhs1.length; i++) {
             for (int j = 0; j < vhs1.length; j++) {
-                if (i == j) {
-                    assertEquals(vhs1[i], vhs1[i]);
-                }
-                else {
+                if (i != j) {
                     assertNotEquals(vhs1[i], vhs1[j]);
                     assertNotEquals(vhs1[i], vhs2[j]);
                 }
--- a/test/jdk/java/lang/invoke/VarHandles/VarHandleTestAccessShort.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/test/jdk/java/lang/invoke/VarHandles/VarHandleTestAccessShort.java	Wed Feb 13 13:22:15 2019 -0500
@@ -133,16 +133,13 @@
     }
 
     @Test
-    public void testEqualsAndHashCode() {
+    public void testEquals() {
         VarHandle[] vhs1 = allocate(true);
         VarHandle[] vhs2 = allocate(true);
 
         for (int i = 0; i < vhs1.length; i++) {
             for (int j = 0; j < vhs1.length; j++) {
-                if (i == j) {
-                    assertEquals(vhs1[i], vhs1[i]);
-                }
-                else {
+                if (i != j) {
                     assertNotEquals(vhs1[i], vhs1[j]);
                     assertNotEquals(vhs1[i], vhs2[j]);
                 }
--- a/test/jdk/java/lang/invoke/VarHandles/VarHandleTestAccessString.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/test/jdk/java/lang/invoke/VarHandles/VarHandleTestAccessString.java	Wed Feb 13 13:22:15 2019 -0500
@@ -135,16 +135,13 @@
     }
 
     @Test
-    public void testEqualsAndHashCode() {
+    public void testEquals() {
         VarHandle[] vhs1 = allocate(true);
         VarHandle[] vhs2 = allocate(true);
 
         for (int i = 0; i < vhs1.length; i++) {
             for (int j = 0; j < vhs1.length; j++) {
-                if (i == j) {
-                    assertEquals(vhs1[i], vhs1[i]);
-                }
-                else {
+                if (i != j) {
                     assertNotEquals(vhs1[i], vhs1[j]);
                     assertNotEquals(vhs1[i], vhs2[j]);
                 }
--- a/test/jdk/java/lang/invoke/VarHandles/VarHandleTestByteArrayAsChar.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/test/jdk/java/lang/invoke/VarHandles/VarHandleTestByteArrayAsChar.java	Wed Feb 13 13:22:15 2019 -0500
@@ -83,7 +83,7 @@
     }
 
     @Test
-    public void testEqualsAndHashCode() {
+    public void testEquals() {
         VarHandle[] vhs1 = setupVarHandleSources(true).stream().
             map(vhs -> vhs.s).toArray(VarHandle[]::new);
         VarHandle[] vhs2 = setupVarHandleSources(true).stream().
@@ -91,10 +91,7 @@
 
         for (int i = 0; i < vhs1.length; i++) {
             for (int j = 0; j < vhs1.length; j++) {
-                if (i == j) {
-                    assertEquals(vhs1[i], vhs1[i]);
-                }
-                else {
+                if (i != j) {
                     assertNotEquals(vhs1[i], vhs1[j]);
                     assertNotEquals(vhs1[i], vhs2[j]);
                 }
--- a/test/jdk/java/lang/invoke/VarHandles/VarHandleTestByteArrayAsDouble.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/test/jdk/java/lang/invoke/VarHandles/VarHandleTestByteArrayAsDouble.java	Wed Feb 13 13:22:15 2019 -0500
@@ -83,7 +83,7 @@
     }
 
     @Test
-    public void testEqualsAndHashCode() {
+    public void testEquals() {
         VarHandle[] vhs1 = setupVarHandleSources(true).stream().
             map(vhs -> vhs.s).toArray(VarHandle[]::new);
         VarHandle[] vhs2 = setupVarHandleSources(true).stream().
@@ -91,10 +91,7 @@
 
         for (int i = 0; i < vhs1.length; i++) {
             for (int j = 0; j < vhs1.length; j++) {
-                if (i == j) {
-                    assertEquals(vhs1[i], vhs1[i]);
-                }
-                else {
+                if (i != j) {
                     assertNotEquals(vhs1[i], vhs1[j]);
                     assertNotEquals(vhs1[i], vhs2[j]);
                 }
--- a/test/jdk/java/lang/invoke/VarHandles/VarHandleTestByteArrayAsFloat.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/test/jdk/java/lang/invoke/VarHandles/VarHandleTestByteArrayAsFloat.java	Wed Feb 13 13:22:15 2019 -0500
@@ -83,7 +83,7 @@
     }
 
     @Test
-    public void testEqualsAndHashCode() {
+    public void testEquals() {
         VarHandle[] vhs1 = setupVarHandleSources(true).stream().
             map(vhs -> vhs.s).toArray(VarHandle[]::new);
         VarHandle[] vhs2 = setupVarHandleSources(true).stream().
@@ -91,10 +91,7 @@
 
         for (int i = 0; i < vhs1.length; i++) {
             for (int j = 0; j < vhs1.length; j++) {
-                if (i == j) {
-                    assertEquals(vhs1[i], vhs1[i]);
-                }
-                else {
+                if (i != j) {
                     assertNotEquals(vhs1[i], vhs1[j]);
                     assertNotEquals(vhs1[i], vhs2[j]);
                 }
--- a/test/jdk/java/lang/invoke/VarHandles/VarHandleTestByteArrayAsInt.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/test/jdk/java/lang/invoke/VarHandles/VarHandleTestByteArrayAsInt.java	Wed Feb 13 13:22:15 2019 -0500
@@ -83,7 +83,7 @@
     }
 
     @Test
-    public void testEqualsAndHashCode() {
+    public void testEquals() {
         VarHandle[] vhs1 = setupVarHandleSources(true).stream().
             map(vhs -> vhs.s).toArray(VarHandle[]::new);
         VarHandle[] vhs2 = setupVarHandleSources(true).stream().
@@ -91,10 +91,7 @@
 
         for (int i = 0; i < vhs1.length; i++) {
             for (int j = 0; j < vhs1.length; j++) {
-                if (i == j) {
-                    assertEquals(vhs1[i], vhs1[i]);
-                }
-                else {
+                if (i != j) {
                     assertNotEquals(vhs1[i], vhs1[j]);
                     assertNotEquals(vhs1[i], vhs2[j]);
                 }
--- a/test/jdk/java/lang/invoke/VarHandles/VarHandleTestByteArrayAsLong.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/test/jdk/java/lang/invoke/VarHandles/VarHandleTestByteArrayAsLong.java	Wed Feb 13 13:22:15 2019 -0500
@@ -83,7 +83,7 @@
     }
 
     @Test
-    public void testEqualsAndHashCode() {
+    public void testEquals() {
         VarHandle[] vhs1 = setupVarHandleSources(true).stream().
             map(vhs -> vhs.s).toArray(VarHandle[]::new);
         VarHandle[] vhs2 = setupVarHandleSources(true).stream().
@@ -91,10 +91,7 @@
 
         for (int i = 0; i < vhs1.length; i++) {
             for (int j = 0; j < vhs1.length; j++) {
-                if (i == j) {
-                    assertEquals(vhs1[i], vhs1[i]);
-                }
-                else {
+                if (i != j) {
                     assertNotEquals(vhs1[i], vhs1[j]);
                     assertNotEquals(vhs1[i], vhs2[j]);
                 }
--- a/test/jdk/java/lang/invoke/VarHandles/VarHandleTestByteArrayAsShort.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/test/jdk/java/lang/invoke/VarHandles/VarHandleTestByteArrayAsShort.java	Wed Feb 13 13:22:15 2019 -0500
@@ -83,7 +83,7 @@
     }
 
     @Test
-    public void testEqualsAndHashCode() {
+    public void testEquals() {
         VarHandle[] vhs1 = setupVarHandleSources(true).stream().
             map(vhs -> vhs.s).toArray(VarHandle[]::new);
         VarHandle[] vhs2 = setupVarHandleSources(true).stream().
@@ -91,10 +91,7 @@
 
         for (int i = 0; i < vhs1.length; i++) {
             for (int j = 0; j < vhs1.length; j++) {
-                if (i == j) {
-                    assertEquals(vhs1[i], vhs1[i]);
-                }
-                else {
+                if (i != j) {
                     assertNotEquals(vhs1[i], vhs1[j]);
                     assertNotEquals(vhs1[i], vhs2[j]);
                 }
--- a/test/jdk/java/lang/invoke/VarHandles/X-VarHandleTestAccess.java.template	Tue Feb 12 11:58:41 2019 -0500
+++ b/test/jdk/java/lang/invoke/VarHandles/X-VarHandleTestAccess.java.template	Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2019, 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
@@ -143,18 +143,13 @@
     }
 
     @Test
-    public void testEqualsAndHashCode() {
+    public void testEquals() {
         VarHandle[] vhs1 = allocate(true);
         VarHandle[] vhs2 = allocate(true);
 
         for (int i = 0; i < vhs1.length; i++) {
             for (int j = 0; j < vhs1.length; j++) {
-                if (i == j) {
-                    assertEquals(vhs1[i], vhs1[i]);
-                    assertEquals(vhs1[i], vhs2[i]);
-                    assertEquals(vhs1[i].hashCode(), vhs2[i].hashCode());
-                }
-                else {
+                if (i != j) {
                     assertNotEquals(vhs1[i], vhs1[j]);
                     assertNotEquals(vhs1[i], vhs2[j]);
                 }
--- a/test/jdk/java/lang/invoke/VarHandles/X-VarHandleTestByteArrayView.java.template	Tue Feb 12 11:58:41 2019 -0500
+++ b/test/jdk/java/lang/invoke/VarHandles/X-VarHandleTestByteArrayView.java.template	Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2019, 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
@@ -87,7 +87,7 @@
     }
 
     @Test
-    public void testEqualsAndHashCode() {
+    public void testEquals() {
         VarHandle[] vhs1 = setupVarHandleSources(true).stream().
             map(vhs -> vhs.s).toArray(VarHandle[]::new);
         VarHandle[] vhs2 = setupVarHandleSources(true).stream().
@@ -95,12 +95,7 @@
 
         for (int i = 0; i < vhs1.length; i++) {
             for (int j = 0; j < vhs1.length; j++) {
-                if (i == j) {
-                    assertEquals(vhs1[i], vhs1[i]);
-                    assertEquals(vhs1[i], vhs2[i]);
-                    assertEquals(vhs1[i].hashCode(), vhs2[i].hashCode());
-                }
-                else {
+                if (i != j) {
                     assertNotEquals(vhs1[i], vhs1[j]);
                     assertNotEquals(vhs1[i], vhs2[j]);
                 }
--- a/test/jdk/java/net/httpclient/Response204.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/test/jdk/java/net/httpclient/Response204.java	Wed Feb 13 13:22:15 2019 -0500
@@ -23,7 +23,7 @@
 
 /**
  * @test
- * @bug 8211437 8216974
+ * @bug 8211437 8216974 8218662
  * @run main/othervm -Djdk.httpclient.HttpClient.log=headers,requests Response204
  * @summary
  */
@@ -33,12 +33,13 @@
 import java.net.http.HttpClient;
 import java.net.http.HttpRequest;
 import java.net.http.HttpResponse;
-import java.util.*;
+import java.net.http.HttpResponse.BodyHandlers;
 import java.util.concurrent.*;
 import java.util.concurrent.atomic.AtomicReference;
 import java.util.logging.*;
 import java.io.*;
 import java.net.*;
+import static java.net.http.HttpClient.Builder.NO_PROXY;
 
 /**
  * Verify that a 204 response code with no content-length is handled correctly
@@ -58,6 +59,7 @@
         InetSocketAddress addr = new InetSocketAddress (InetAddress.getLoopbackAddress(), 0);
         HttpServer server = HttpServer.create (addr, 0);
         HttpContext ctx = server.createContext ("/test", handler);
+        server.createContext ("/zero", new ZeroContentLengthHandler());
         ExecutorService executor = Executors.newCachedThreadPool();
         server.setExecutor (executor);
         server.start ();
@@ -91,12 +93,31 @@
             // check for 8216974
             Exception error = serverError.get();
             if (error != null) throw error;
+
+            // Test 3
+            testZeroContentLength(uri.resolve("/zero/xxyy"));
+            System.out.println ("OK 3");
         } finally {
             server.stop(2);
             executor.shutdown();
         }
     }
 
+    static void testZeroContentLength(URI uri) throws Exception {
+        System.out.println("--- testZeroContentLength ---");
+        HttpClient client = HttpClient.newBuilder().proxy(NO_PROXY).build();
+        HttpRequest request = HttpRequest.newBuilder(uri).build();
+        HttpResponse<String> response = client.send(request, BodyHandlers.ofString());
+        System.out.println("Received response:" + response);
+        System.out.println("Received headers:" + response.headers());
+        if (response.statusCode() != 204)
+            throw new RuntimeException("Expected 204, got:" + response.statusCode());
+        if (response.body() != null && !response.body().equals(""))
+            throw new RuntimeException("Expected empty response, got: " + response.body());
+        if (response.headers().firstValueAsLong("Content-Length").orElse(-1L) != 0L)
+            throw new RuntimeException("Expected Content-Length:0, in: " + response.headers());
+    }
+
     public static boolean error = false;
 
     static class Handler implements HttpHandler {
@@ -133,4 +154,16 @@
             t.close();
         }
     }
+
+    // A handler that returns a 204 with a `Content-Length: 0` header/value
+    static class ZeroContentLengthHandler implements HttpHandler {
+        public void handle(HttpExchange t) throws IOException {
+            try (InputStream is = t.getRequestBody()) {
+                is.readAllBytes();
+            }
+            t.getResponseHeaders().set("Content-length", "0");
+            t.sendResponseHeaders(204, -1);
+            t.close();
+        }
+    }
 }
--- a/test/jdk/java/net/httpclient/SpecialHeadersTest.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/test/jdk/java/net/httpclient/SpecialHeadersTest.java	Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2018, 2019, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -25,7 +25,7 @@
  * @test
  * @summary  Verify that some special headers - such as User-Agent
  *           can be specified by the caller.
- * @bug 8203771
+ * @bug 8203771 8218546
  * @modules java.base/sun.net.www.http
  *          java.net.http/jdk.internal.net.http.common
  *          java.net.http/jdk.internal.net.http.frame
@@ -64,8 +64,6 @@
 import java.net.http.HttpRequest;
 import java.net.http.HttpResponse;
 import java.net.http.HttpResponse.BodyHandlers;
-import java.security.AccessController;
-import java.security.PrivilegedAction;
 import java.time.Duration;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -74,13 +72,13 @@
 import java.util.Map;
 import java.util.Optional;
 import java.util.function.Function;
-
-import static java.lang.System.err;
 import static java.lang.System.out;
 import static java.net.http.HttpClient.Builder.NO_PROXY;
+import static java.net.http.HttpClient.Version.HTTP_2;
 import static java.nio.charset.StandardCharsets.US_ASCII;
 import org.testng.Assert;
 import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertTrue;
 
 public class SpecialHeadersTest implements HttpServerAdapters {
 
@@ -151,7 +149,11 @@
         "USER-AGENT", u -> userAgent(), "HOST", u -> u.getRawAuthority());
 
     @Test(dataProvider = "variants")
-    void test(String uriString, String headerNameAndValue, boolean sameClient) throws Exception {
+    void test(String uriString,
+              String headerNameAndValue,
+              boolean sameClient)
+        throws Exception
+    {
         out.println("\n--- Starting ");
 
         int index = headerNameAndValue.indexOf(":");
@@ -183,21 +185,41 @@
             assertEquals(resp.statusCode(), 200,
                     "Expected 200, got:" + resp.statusCode());
 
-            String receivedHeaderString = value == null ? null
-                    : resp.headers().firstValue("X-"+key).get();
-            out.println("Got X-" + key + ": " + resp.headers().allValues("X-"+key));
-            if (value != null) {
-                assertEquals(receivedHeaderString, value);
-                assertEquals(resp.headers().allValues("X-"+key), List.of(value));
+            boolean isInitialRequest = i == 0;
+            boolean isSecure = uri.getScheme().equalsIgnoreCase("https");
+            boolean isHTTP2 = resp.version() == HTTP_2;
+            boolean isNotH2CUpgrade = isSecure || (sameClient == true && !isInitialRequest);
+            boolean isDefaultHostHeader = name.equalsIgnoreCase("host") && useDefault;
+
+            // By default, HTTP/2 sets the `:authority:` pseudo-header, instead
+            // of the `Host` header. Therefore, there should be no "X-Host"
+            // header in the response, except the response to the h2c Upgrade
+            // request which will have been sent through HTTP/1.1.
+
+            if (isDefaultHostHeader && isHTTP2 && isNotH2CUpgrade) {
+                assertTrue(resp.headers().firstValue("X-" + key).isEmpty());
+                assertTrue(resp.headers().allValues("X-" + key).isEmpty());
+                out.println("No X-" + key + " header received, as expected");
             } else {
-                assertEquals(resp.headers().allValues("X-"+key).size(), 0);
+                String receivedHeaderString = value == null ? null
+                        : resp.headers().firstValue("X-"+key).get();
+                out.println("Got X-" + key + ": " + resp.headers().allValues("X-"+key));
+                if (value != null) {
+                    assertEquals(receivedHeaderString, value);
+                    assertEquals(resp.headers().allValues("X-"+key), List.of(value));
+                } else {
+                    assertEquals(resp.headers().allValues("X-"+key).size(), 0);
+                }
             }
-
         }
     }
 
     @Test(dataProvider = "variants")
-    void testHomeMadeIllegalHeader(String uriString, String headerNameAndValue, boolean sameClient) throws Exception {
+    void testHomeMadeIllegalHeader(String uriString,
+                                   String headerNameAndValue,
+                                   boolean sameClient)
+        throws Exception
+    {
         out.println("\n--- Starting ");
         final URI uri = URI.create(uriString);
 
@@ -266,6 +288,11 @@
             }
             HttpRequest request = requestBuilder.build();
 
+            boolean isInitialRequest = i == 0;
+            boolean isSecure = uri.getScheme().equalsIgnoreCase("https");
+            boolean isNotH2CUpgrade = isSecure || (sameClient == true && !isInitialRequest);
+            boolean isDefaultHostHeader = name.equalsIgnoreCase("host") && useDefault;
+
             client.sendAsync(request, BodyHandlers.ofString())
                     .thenApply(response -> {
                         out.println("Got response: " + response);
@@ -273,15 +300,27 @@
                         assertEquals(response.statusCode(), 200);
                         return response;})
                     .thenAccept(resp -> {
-                        String receivedHeaderString = value == null ? null
-                                : resp.headers().firstValue("X-"+key).get();
-                        out.println("Got X-" + key + ": " + resp.headers().allValues("X-"+key));
-                        if (value != null) {
-                            assertEquals(receivedHeaderString, value);
-                            assertEquals(resp.headers().allValues("X-" + key), List.of(value));
+                        // By default, HTTP/2 sets the `:authority:` pseudo-header, instead
+                        // of the `Host` header. Therefore, there should be no "X-Host"
+                        // header in the response, except the response to the h2c Upgrade
+                        // request which will have been sent through HTTP/1.1.
+
+                        if (isDefaultHostHeader && resp.version() == HTTP_2 && isNotH2CUpgrade) {
+                            assertTrue(resp.headers().firstValue("X-" + key).isEmpty());
+                            assertTrue(resp.headers().allValues("X-" + key).isEmpty());
+                            out.println("No X-" + key + " header received, as expected");
                         } else {
-                            assertEquals(resp.headers().allValues("X-" + key).size(), 1);
-                        } })
+                            String receivedHeaderString = value == null ? null
+                                    : resp.headers().firstValue("X-"+key).get();
+                            out.println("Got X-" + key + ": " + resp.headers().allValues("X-"+key));
+                            if (value != null) {
+                                assertEquals(receivedHeaderString, value);
+                                assertEquals(resp.headers().allValues("X-" + key), List.of(value));
+                            } else {
+                                assertEquals(resp.headers().allValues("X-" + key).size(), 1);
+                            }
+                        }
+                    })
                     .join();
         }
     }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/java/util/HashMap/WhiteBoxResizeTest.java	Wed Feb 13 13:22:15 2019 -0500
@@ -0,0 +1,132 @@
+/*
+ * Copyright (c) 2018, Red Hat, Inc. All rights reserved.
+ *
+ * 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.testng.annotations.Test;
+
+import java.lang.invoke.MethodHandle;
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.MethodType;
+import java.lang.invoke.VarHandle;
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ThreadLocalRandom;
+import java.util.function.Supplier;
+import java.util.stream.IntStream;
+
+import static java.util.stream.Collectors.toMap;
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertNull;
+
+/*
+ * @test
+ * @bug 8210280
+ * @modules java.base/java.util:open
+ * @summary White box tests for HashMap internals around table resize
+ * @run testng WhiteBoxResizeTest
+ * @key randomness
+ */
+public class WhiteBoxResizeTest {
+    final ThreadLocalRandom rnd = ThreadLocalRandom.current();
+    final MethodHandle TABLE_SIZE_FOR;
+    final VarHandle THRESHOLD;
+    final VarHandle TABLE;
+
+    public WhiteBoxResizeTest() throws ReflectiveOperationException {
+        Class<?> mClass = HashMap.class;
+        String nodeClassName = mClass.getName() + "$Node";
+        Class<?> nodeArrayClass = Class.forName("[L" + nodeClassName + ";");
+        MethodHandles.Lookup lookup = MethodHandles.privateLookupIn(mClass, MethodHandles.lookup());
+        TABLE = lookup.findVarHandle(mClass, "table", nodeArrayClass);
+        this.TABLE_SIZE_FOR = lookup.findStatic(
+                mClass, "tableSizeFor",
+                MethodType.methodType(int.class, int.class));
+        this.THRESHOLD = lookup.findVarHandle(mClass, "threshold", int.class);
+    }
+
+    int tableSizeFor(int n) {
+        try {
+            return (int) TABLE_SIZE_FOR.invoke(n);
+        } catch (Throwable t) { throw new AssertionError(t); }
+    }
+
+    Object[] table(HashMap map) {
+        try {
+            return (Object[]) TABLE.get(map);
+        } catch (Throwable t) { throw new AssertionError(t); }
+    }
+
+    int capacity(HashMap map) {
+        return table(map).length;
+    }
+
+    @Test
+    public void testTableSizeFor() {
+        assertEquals(tableSizeFor(0), 1);
+        assertEquals(tableSizeFor(1), 1);
+        assertEquals(tableSizeFor(2), 2);
+        assertEquals(tableSizeFor(3), 4);
+        assertEquals(tableSizeFor(15), 16);
+        assertEquals(tableSizeFor(16), 16);
+        assertEquals(tableSizeFor(17), 32);
+        int maxSize = 1 << 30;
+        assertEquals(tableSizeFor(maxSize - 1), maxSize);
+        assertEquals(tableSizeFor(maxSize), maxSize);
+        assertEquals(tableSizeFor(maxSize + 1), maxSize);
+        assertEquals(tableSizeFor(Integer.MAX_VALUE), maxSize);
+    }
+
+    @Test
+    public void capacityTestDefaultConstructor() {
+        capacityTestDefaultConstructor(new HashMap<>());
+        capacityTestDefaultConstructor(new LinkedHashMap<>());
+    }
+
+    void capacityTestDefaultConstructor(HashMap<Integer, Integer> map) {
+        assertNull(table(map));
+
+        map.put(1, 1);
+        assertEquals(capacity(map), 16); // default initial capacity
+
+        map.putAll(IntStream.range(0, 64).boxed().collect(toMap(i -> i, i -> i)));
+        assertEquals(capacity(map), 128);
+    }
+
+    @Test
+    public void capacityTestInitialCapacity() {
+        int initialCapacity = rnd.nextInt(2, 128);
+        List<Supplier<HashMap<Integer, Integer>>> suppliers = List.of(
+            () -> new HashMap<>(initialCapacity),
+            () -> new HashMap<>(initialCapacity, 0.75f),
+            () -> new LinkedHashMap<>(initialCapacity),
+            () -> new LinkedHashMap<>(initialCapacity, 0.75f));
+
+        for (Supplier<HashMap<Integer, Integer>> supplier : suppliers) {
+            HashMap<Integer, Integer> map = supplier.get();
+            assertNull(table(map));
+
+            map.put(1, 1);
+            assertEquals(capacity(map), tableSizeFor(initialCapacity));
+        }
+    }
+}
--- a/test/jdk/java/util/concurrent/tck/JSR166TestCase.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/test/jdk/java/util/concurrent/tck/JSR166TestCase.java	Wed Feb 13 13:22:15 2019 -0500
@@ -487,6 +487,12 @@
     public static boolean atLeastJava9()  { return JAVA_CLASS_VERSION >= 53.0; }
     public static boolean atLeastJava10() { return JAVA_CLASS_VERSION >= 54.0; }
     public static boolean atLeastJava11() { return JAVA_CLASS_VERSION >= 55.0; }
+    public static boolean atLeastJava12() { return JAVA_CLASS_VERSION >= 56.0; }
+    public static boolean atLeastJava13() { return JAVA_CLASS_VERSION >= 57.0; }
+    public static boolean atLeastJava14() { return JAVA_CLASS_VERSION >= 58.0; }
+    public static boolean atLeastJava15() { return JAVA_CLASS_VERSION >= 59.0; }
+    public static boolean atLeastJava16() { return JAVA_CLASS_VERSION >= 60.0; }
+    public static boolean atLeastJava17() { return JAVA_CLASS_VERSION >= 61.0; }
 
     /**
      * Collects all JSR166 unit tests as one suite.
@@ -577,6 +583,7 @@
                 "HashMapTest",
                 "LinkedBlockingDeque8Test",
                 "LinkedBlockingQueue8Test",
+                "LinkedHashMapTest",
                 "LongAccumulatorTest",
                 "LongAdderTest",
                 "SplittableRandomTest",
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/java/util/concurrent/tck/LinkedHashMapTest.java	Wed Feb 13 13:22:15 2019 -0500
@@ -0,0 +1,60 @@
+/*
+ * 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.
+ */
+
+/*
+ * This file is available under and governed by the GNU General Public
+ * License version 2 only, as published by the Free Software Foundation.
+ * However, the following notice accompanied the original version of this
+ * file:
+ *
+ * Written by Doug Lea and Martin Buchholz with assistance from
+ * members of JCP JSR-166 Expert Group and released to the public
+ * domain, as explained at
+ * http://creativecommons.org/publicdomain/zero/1.0/
+ */
+
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+import junit.framework.Test;
+
+public class LinkedHashMapTest extends JSR166TestCase {
+    public static void main(String[] args) {
+        main(suite(), args);
+    }
+
+    public static Test suite() {
+        class Implementation implements MapImplementation {
+            public Class<?> klazz() { return LinkedHashMap.class; }
+            public Map emptyMap() { return new LinkedHashMap(); }
+            public Object makeKey(int i) { return i; }
+            public Object makeValue(int i) { return i; }
+            public boolean isConcurrent() { return false; }
+            public boolean permitsNullKeys() { return true; }
+            public boolean permitsNullValues() { return true; }
+            public boolean supportsSetValue() { return true; }
+        }
+        return newTestSuite(
+            // LinkedHashMapTest.class,
+            MapTest.testSuite(new Implementation()));
+    }
+}
--- a/test/jdk/java/util/concurrent/tck/MapTest.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/test/jdk/java/util/concurrent/tck/MapTest.java	Wed Feb 13 13:22:15 2019 -0500
@@ -166,6 +166,40 @@
         assertEquals(1, m.size());
     }
 
+    /**
+     * "Missing" test found while investigating JDK-8210280.
+     * ant -Djsr166.tckTestClass=HashMapTest -Djsr166.methodFilter=testBug8210280 -Djsr166.runsPerTest=1000000 tck
+     */
+    public void testBug8210280() {
+        final ThreadLocalRandom rnd = ThreadLocalRandom.current();
+        final int size1 = rnd.nextInt(32);
+        final int size2 = rnd.nextInt(128);
+
+        final Map m1 = impl.emptyMap();
+        for (int i = 0; i < size1; i++) {
+            int elt = rnd.nextInt(1024 * i, 1024 * (i + 1));
+            assertNull(m1.put(impl.makeKey(elt), impl.makeValue(elt)));
+        }
+
+        final Map m2 = impl.emptyMap();
+        for (int i = 0; i < size2; i++) {
+            int elt = rnd.nextInt(Integer.MIN_VALUE + 1024 * i,
+                                  Integer.MIN_VALUE + 1024 * (i + 1));
+            assertNull(m2.put(impl.makeKey(elt), impl.makeValue(-elt)));
+        }
+
+        final Map m1Copy = impl.emptyMap();
+        m1Copy.putAll(m1);
+
+        m1.putAll(m2);
+
+        for (Object elt : m2.keySet())
+            assertEquals(m2.get(elt), m1.get(elt));
+        for (Object elt : m1Copy.keySet())
+            assertSame(m1Copy.get(elt), m1.get(elt));
+        assertEquals(size1 + size2, m1.size());
+    }
+
 //     public void testFailsIntentionallyForDebugging() {
 //         fail(impl.klazz().getSimpleName());
 //     }
--- a/test/jdk/javax/swing/JPopupMenu/6583251/bug6583251.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/test/jdk/javax/swing/JPopupMenu/6583251/bug6583251.java	Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2019, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -26,7 +26,7 @@
 /*
  * @test
  * @key headful
- * @bug 6583251
+ * @bug 6583251 8217377
  * @summary One more ClassCastException in Swing with TrayIcon
  * @author Alexander Potochkin
  * @run main bug6583251
@@ -57,22 +57,32 @@
     }
 
     public static void main(String[] args) throws Exception {
+        if (SystemTray.isSupported()) {
+            SwingUtilities.invokeAndWait(new Runnable() {
+                public void run() {
+                    createGui();
+                }
+            });
 
-        SwingUtilities.invokeAndWait(new Runnable() {
-            public void run() {
-                createGui();
-            }
-        });
+            Robot robot = new Robot();
+            robot.waitForIdle();
+            menu.show(frame, 0, 0);
+            robot.waitForIdle();
 
-        Robot robot = new Robot();
-        robot.waitForIdle();
-        menu.show(frame, 0, 0);
-        robot.waitForIdle();
+            TrayIcon trayIcon = new TrayIcon(new BufferedImage(1, 1, BufferedImage.TYPE_INT_ARGB));
+            MouseEvent ev = new MouseEvent(
+                    new JButton(), MouseEvent.MOUSE_PRESSED, System.currentTimeMillis(), 0, 0, 0, 1, false);
+            ev.setSource(trayIcon);
+            Toolkit.getDefaultToolkit().getSystemEventQueue().postEvent(ev);
 
-        TrayIcon trayIcon = new TrayIcon(new BufferedImage(1, 1, BufferedImage.TYPE_INT_ARGB));
-        MouseEvent ev = new MouseEvent(
-                new JButton(), MouseEvent.MOUSE_PRESSED, System.currentTimeMillis(), 0, 0, 0, 1, false);
-        ev.setSource(trayIcon);
-        Toolkit.getDefaultToolkit().getSystemEventQueue().postEvent(ev);
+            SwingUtilities.invokeAndWait(new Runnable() {
+                public void run() {
+                    frame.dispose();
+                }
+            });
+
+        } else {
+            System.out.println("SystemTray not supported. " + "Skipping the test.");
+        }
     }
 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/sanity/client/SwingSet/src/ColorChooserDemoTest.java	Wed Feb 13 13:22:15 2019 -0500
@@ -0,0 +1,328 @@
+/*
+* Copyright (c) 2019, 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 static com.sun.swingset3.demos.colorchooser.ColorChooserDemo.BACKGROUND;
+import static com.sun.swingset3.demos.colorchooser.ColorChooserDemo.CHOOSER_TITLE;
+import static com.sun.swingset3.demos.colorchooser.ColorChooserDemo.DEMO_TITLE;
+import static com.sun.swingset3.demos.colorchooser.ColorChooserDemo.GRADIENT_1;
+import static com.sun.swingset3.demos.colorchooser.ColorChooserDemo.GRADIENT_2;
+import static com.sun.swingset3.demos.colorchooser.ColorChooserDemo.PERIMETER;
+
+import java.awt.Color;
+import java.awt.event.KeyEvent;
+
+import org.jemmy2ext.JemmyExt.ByClassChooser;
+import org.jtregext.GuiTestListener;
+import org.netbeans.jemmy.ClassReference;
+import org.netbeans.jemmy.DialogWaiter;
+import org.netbeans.jemmy.operators.JButtonOperator;
+import org.netbeans.jemmy.operators.JColorChooserOperator;
+import org.netbeans.jemmy.operators.JComponentOperator;
+import org.netbeans.jemmy.operators.JDialogOperator;
+import org.netbeans.jemmy.operators.JFrameOperator;
+import org.netbeans.jemmy.operators.JSliderOperator;
+import org.netbeans.jemmy.operators.JSpinnerOperator;
+import org.netbeans.jemmy.operators.JTabbedPaneOperator;
+import org.netbeans.jemmy.operators.JTextFieldOperator;
+import org.testng.annotations.Listeners;
+import org.testng.annotations.Test;
+
+import com.sun.swingset3.demos.colorchooser.BezierAnimationPanel;
+import com.sun.swingset3.demos.colorchooser.BezierAnimationPanel.BezierColor;
+import com.sun.swingset3.demos.colorchooser.ColorChooserDemo;
+
+/*
+* @test
+* @key headful
+* @summary Verifies SwingSet3 ColorChooserDemo by performing simple interaction
+*  with all the controls that are shown in the ColorChooserDialog.
+*
+* @library /sanity/client/lib/jemmy/src
+* @library /sanity/client/lib/Extensions/src
+* @library /sanity/client/lib/SwingSet3/src
+* @modules java.desktop
+*          java.logging
+* @build com.sun.swingset3.demos.colorchooser.ColorChooserDemo
+* @run testng ColorChooserDemoTest
+*/
+@Listeners(GuiTestListener.class)
+public class ColorChooserDemoTest {
+
+private static final String OK_BUTTON_TITLE = "OK";
+private static final String CANCEL_BUTTON_TITLE = "Cancel";
+private static final String RESET_BUTTON_TITLE = "Reset";
+private static final String HSV = "HSV";
+private static final String RGB = "RGB";
+private static final String HSL = "HSL";
+private static final String CMYK = "CMYK";
+private static final int HSV_NUMBER_OF_SLIDERS_AND_SPINNERS = 4;
+private static final int RGB_NUMBER_OF_SLIDERS_AND_SPINNERS = 4;
+private static final int HSL_NUMBER_OF_SLIDERS_AND_SPINNERS = 4;
+private static final int CMYK_NUMBER_OF_SLIDERS_AND_SPINNERS = 5;
+private static final int HSV_HUE_INDEX = 0;
+private static final int HSV_SATURATION_INDEX = 1;
+private static final int HSV_VALUE_INDEX = 2;
+private static final int HSV_TRANSPARENCY_INDEX = 3;
+private static final int HSL_HUE_INDEX = 0;
+private static final int HSL_SATURATION_INDEX = 1;
+private static final int HSL_LIGHTNESS_INDEX = 2;
+private static final int HSL_TRANSPARENCY_INDEX = 3;
+private static final int RGB_RED_INDEX = 0;
+private static final int RGB_GREEN_INDEX = 1;
+private static final int RGB_BLUE_INDEX = 2;
+private static final int RGB_ALPHA_INDEX = 3;
+private static final int RGB_COLORCODE_TEXT_FIELD_INDEX = 4;
+private static final int CMYK_CYAN_INDEX = 0;
+private static final int CMYK_MAGENTA_INDEX = 1;
+private static final int CMYK_YELLOW_INDEX = 2;
+private static final int CMYK_BLACK_INDEX = 3;
+private static final int CMYK_ALPHA_INDEX = 4;
+
+private final Color resetColor = new Color(125, 125, 125);
+
+private JDialogOperator colorChooserDialog;
+private JButtonOperator okButton;
+private JButtonOperator cancelButton;
+private JButtonOperator resetButton;
+private JColorChooserOperator colorChooser;
+private JButtonOperator backgroundButton;
+private JButtonOperator gradient1Button;
+private JButtonOperator gradient2Button;
+private JButtonOperator perimeterButton;
+private JTabbedPaneOperator tabOperator;
+private JComponentOperator bezierAnimationPanel;
+private JSliderOperator[] sliders = new JSliderOperator[5];
+private JSpinnerOperator[] spinners = new JSpinnerOperator[5];
+private JButtonOperator lastFocusedButton;
+
+@Test
+public void test() throws Exception {
+new ClassReference(ColorChooserDemo.class.getCanonicalName()).startApplication();
+JFrameOperator frame = new JFrameOperator(DEMO_TITLE);
+bezierAnimationPanel = new JComponentOperator(frame, new ByClassChooser(BezierAnimationPanel.class));
+initializePanelButtons(frame);
+checkBackgroundColorChooser();
+checkGradient1ColorChooser();
+checkGradient2ColorChooser();
+checkPerimeterColorChooser();
+}
+
+private void checkBackgroundColorChooser() throws Exception {
+basicCheck(backgroundButton, BezierColor.BACKGROUND);
+checkAllColorChoosers(backgroundButton);
+}
+
+private void checkGradient1ColorChooser() throws Exception {
+basicCheck(gradient1Button, BezierColor.GRADIENT_A);
+}
+
+private void checkGradient2ColorChooser() throws Exception {
+basicCheck(gradient2Button, BezierColor.GRADIENT_B);
+}
+
+private void checkPerimeterColorChooser() throws Exception {
+basicCheck(perimeterButton, BezierColor.OUTER);
+}
+
+private void pushButtonAndInitialize(JButtonOperator jbo) throws InterruptedException {
+// Wait for focus to return to last focused button
+lastFocusedButton.waitHasFocus();
+jbo.pushNoBlock();
+lastFocusedButton = jbo;
+// Wait till the ColorChooserDemo Dialog Opens
+new DialogWaiter().waitDialog(CHOOSER_TITLE, false, false);
+initializeDialog();
+}
+
+private void initializePanelButtons(JFrameOperator frame) {
+backgroundButton = new JButtonOperator(frame, BACKGROUND);
+gradient1Button = new JButtonOperator(frame, GRADIENT_1);
+gradient2Button = new JButtonOperator(frame, GRADIENT_2);
+perimeterButton = new JButtonOperator(frame, PERIMETER);
+lastFocusedButton = backgroundButton;
+}
+
+private void initializeDialog() {
+colorChooserDialog = new JDialogOperator(CHOOSER_TITLE);
+tabOperator = new JTabbedPaneOperator(colorChooserDialog);
+colorChooser = new JColorChooserOperator(colorChooserDialog);
+okButton = new JButtonOperator(colorChooserDialog, OK_BUTTON_TITLE);
+cancelButton = new JButtonOperator(colorChooserDialog, CANCEL_BUTTON_TITLE);
+resetButton = new JButtonOperator(colorChooserDialog, RESET_BUTTON_TITLE);
+}
+
+private void basicCheck(JButtonOperator jbo, BezierColor bezierColor) throws Exception {
+Color testColor = new Color(100, 26, 155);
+Color testColor2 = new Color(10, 40, 50);
+checkDefaultColorChooser(jbo, testColor, bezierColor);
+checkCancelButton(jbo, testColor2);
+checkResetButton(jbo, testColor2);
+}
+
+private void checkDefaultColorChooser(JButtonOperator jbo, Color testColor, BezierColor bezierColor)
+throws Exception {
+BezierAnimationPanel bezierPanel;
+pushButtonAndInitialize(jbo);
+// Check ColorChooser color is being set and used accordingly
+// in the animation panel
+setAndWaitColor(testColor);
+pushButtonAndWaitDialogClosed(okButton);
+bezierPanel = (BezierAnimationPanel) bezierAnimationPanel.getSource();
+colorChooser.waitStateOnQueue(jColorChooser -> (bezierPanel.getBezierColor(bezierColor).equals(testColor)));
+}
+
+private void checkCancelButton(JButtonOperator jbo, Color testColor) throws Exception {
+pushButtonAndInitialize(jbo);
+setAndWaitColor(testColor);
+pushButtonAndWaitDialogClosed(cancelButton);
+}
+
+private void checkResetButton(JButtonOperator jbo, Color testColor) throws Exception {
+pushButtonAndInitialize(jbo);
+Color initialColor = colorChooser.getColor();
+setAndWaitColor(testColor);
+resetButton.push();
+waitJColorChooserColor(initialColor);
+pushButtonAndWaitDialogClosed(okButton);
+}
+
+private void checkAllColorChoosers(JButtonOperator jbo) throws Exception {
+pushButtonAndInitialize(jbo);
+checkHSV();
+checkHSL();
+checkRGB();
+checkCMYK();
+pushButtonAndWaitDialogClosed(okButton);
+}
+
+private void waitJColorChooserColor(Color expectedColor) {
+colorChooser.waitStateOnQueue(jColorChooser -> colorChooser.getColor().equals(expectedColor));
+}
+
+private void setAndWaitColor(Color color) {
+colorChooser.setColor(color);
+// Wait for the Color to be set
+waitJColorChooserColor(color);
+}
+
+private void resetColor() {
+colorChooser.setColor(resetColor);
+// Wait for the Color to be reset
+waitJColorChooserColor(resetColor);
+}
+
+private void checkHSV() {
+tabOperator.selectPage(HSV);
+initializeSliderAndSpinner(HSV_NUMBER_OF_SLIDERS_AND_SPINNERS);
+resetColor();
+setAndCheckSlider(sliders[HSV_SATURATION_INDEX], 50, new Color(125, 62, 62));
+setAndCheckSlider(sliders[HSV_VALUE_INDEX], 80, new Color(204, 102, 102));
+setAndCheckSlider(sliders[HSV_HUE_INDEX], 50, new Color(204, 187, 102));
+setAndCheckSlider(sliders[HSV_TRANSPARENCY_INDEX], 50, new Color(204, 187, 102, 127));
+setAndCheckSpinner(spinners[HSV_SATURATION_INDEX], 25, new Color(204, 195, 153, 127));
+setAndCheckSpinner(spinners[HSV_VALUE_INDEX], 40, new Color(102, 97, 76, 127));
+setAndCheckSpinner(spinners[HSV_HUE_INDEX], 25, new Color(102, 87, 76, 127));
+setAndCheckSpinner(spinners[HSV_TRANSPARENCY_INDEX], 100, new Color(102, 87, 76, 0));
+}
+
+private void checkHSL() {
+tabOperator.selectPage(HSL);
+initializeSliderAndSpinner(HSL_NUMBER_OF_SLIDERS_AND_SPINNERS);
+resetColor();
+setAndCheckSlider(sliders[HSL_SATURATION_INDEX], 50, new Color(187, 62, 62));
+setAndCheckSlider(sliders[HSL_LIGHTNESS_INDEX], 80, new Color(229, 178, 178));
+setAndCheckSlider(sliders[HSL_HUE_INDEX], 180, new Color(178, 229, 229));
+setAndCheckSlider(sliders[HSL_TRANSPARENCY_INDEX], 50, new Color(178, 229, 229, 127));
+setAndCheckSpinner(spinners[HSL_SATURATION_INDEX], 25, new Color(191, 216, 216, 127));
+setAndCheckSpinner(spinners[HSL_LIGHTNESS_INDEX], 40, new Color(76, 127, 127, 127));
+setAndCheckSpinner(spinners[HSL_HUE_INDEX], 25, new Color(127, 97, 76, 127));
+setAndCheckSpinner(spinners[HSL_TRANSPARENCY_INDEX], 50, new Color(127, 97, 76, 127));
+}
+
+private void checkRGB() {
+String sampleColor = "111111";
+tabOperator.selectPage(RGB);
+initializeSliderAndSpinner(RGB_NUMBER_OF_SLIDERS_AND_SPINNERS);
+JTextFieldOperator colorCode = new JTextFieldOperator(colorChooserDialog, RGB_COLORCODE_TEXT_FIELD_INDEX);
+resetColor();
+setAndCheckSlider(sliders[RGB_GREEN_INDEX], 50, new Color(125, 50, 125, 255));
+setAndCheckSlider(sliders[RGB_BLUE_INDEX], 80, new Color(125, 50, 80, 255));
+setAndCheckSlider(sliders[RGB_RED_INDEX], 50, new Color(50, 50, 80, 255));
+setAndCheckSlider(sliders[RGB_ALPHA_INDEX], 125, new Color(50, 50, 80, 125));
+setAndCheckSpinner(spinners[RGB_GREEN_INDEX], 25, new Color(50, 25, 80, 125));
+setAndCheckSpinner(spinners[RGB_BLUE_INDEX], 40, new Color(50, 25, 40, 125));
+setAndCheckSpinner(spinners[RGB_RED_INDEX], 25, new Color(25, 25, 40, 125));
+setAndCheckSpinner(spinners[RGB_ALPHA_INDEX], 255, new Color(25, 25, 40, 255));
+
+colorCode.setText(sampleColor);
+// Wait for the sampleColor to be set in the color code text field.
+colorCode.waitText(sampleColor);
+colorCode.getFocus();
+colorCode.pressKey(KeyEvent.VK_TAB);
+// Wait for the color to be set
+waitJColorChooserColor(new Color(17, 17, 17, 255));
+}
+
+private void checkCMYK() {
+tabOperator.selectPage(CMYK);
+initializeSliderAndSpinner(CMYK_NUMBER_OF_SLIDERS_AND_SPINNERS);
+resetColor();
+setAndCheckSlider(sliders[CMYK_MAGENTA_INDEX], 50, new Color(125, 100, 125, 255));
+setAndCheckSlider(sliders[CMYK_YELLOW_INDEX], 80, new Color(125, 100, 85, 255));
+setAndCheckSlider(sliders[CMYK_CYAN_INDEX], 50, new Color(100, 100, 85, 255));
+setAndCheckSlider(sliders[CMYK_BLACK_INDEX], 50, new Color(164, 164, 140, 255));
+setAndCheckSlider(sliders[CMYK_ALPHA_INDEX], 125, new Color(164, 164, 140, 125));
+setAndCheckSpinner(spinners[CMYK_MAGENTA_INDEX], 25, new Color(164, 184, 140, 125));
+setAndCheckSpinner(spinners[CMYK_YELLOW_INDEX], 40, new Color(164, 184, 172, 125));
+setAndCheckSpinner(spinners[CMYK_CYAN_INDEX], 25, new Color(184, 184, 172, 125));
+setAndCheckSpinner(spinners[CMYK_BLACK_INDEX], 100, new Color(139, 139, 130, 125));
+setAndCheckSpinner(spinners[CMYK_ALPHA_INDEX], 255, new Color(139, 139, 130, 255));
+}
+
+private void setAndCheckSlider(JSliderOperator slider, int sliderValue, Color expectedColor) {
+slider.setValue(sliderValue);
+// Wait for slider to attain the specified value
+slider.waitStateOnQueue(jSlider -> slider.getValue() == sliderValue);
+colorChooser.waitStateOnQueue(jColorChooser -> (colorChooser.getColor().equals(expectedColor)));
+}
+
+private void setAndCheckSpinner(JSpinnerOperator spinner, int spinnerValue, Color expectedColor) {
+spinner.setValue(spinnerValue);
+// Wait for spinner to attain the specified value
+spinner.waitStateOnQueue(jSpinner -> (int) spinner.getValue() == spinnerValue);
+colorChooser.waitStateOnQueue(jColorChooser -> (colorChooser.getColor().equals(expectedColor)));
+}
+
+private void initializeSliderAndSpinner(int numberOfSlidersAndSpinners) {
+for (int i = 0; i < numberOfSlidersAndSpinners; i++) {
+sliders[i] = new JSliderOperator(colorChooserDialog, i);
+spinners[i] = new JSpinnerOperator(colorChooserDialog, i);
+}
+}
+
+private void pushButtonAndWaitDialogClosed(JButtonOperator button) {
+button.push();
+// Wait for the color chooser dialog to close.
+colorChooserDialog.waitClosed();
+}
+}
--- a/test/jdk/sanity/client/SwingSet/src/SliderDemoTest.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/test/jdk/sanity/client/SwingSet/src/SliderDemoTest.java	Wed Feb 13 13:22:15 2019 -0500
@@ -1,6 +1,6 @@
 
 /*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2019, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -27,6 +27,8 @@
 import java.awt.event.KeyEvent;
 import java.util.function.Predicate;
 
+import javax.swing.UIManager;
+
 import static org.testng.AssertJUnit.*;
 import org.testng.annotations.Test;
 import org.netbeans.jemmy.ClassReference;
@@ -52,7 +54,7 @@
  *          java.logging
  * @build org.jemmy2ext.JemmyExt
  * @build com.sun.swingset3.demos.slider.SliderDemo
- * @run testng SliderDemoTest
+ * @run testng/timeout=600 SliderDemoTest
  */
 @Listeners(GuiTestListener.class)
 public class SliderDemoTest {
@@ -63,9 +65,12 @@
     private static final int HORIZONTAL_MINOR_TICKS_SLIDER_MAXIMUM = 11;
     private static final int VERTICAL_MINOR_TICKS_SLIDER_MINIMUM = 0;
     private static final int VERTICAL_MINOR_TICKS_SLIDER_MAXIMUM = 100;
+    private String currentLookAndFeel;
 
-    @Test
-    public void test() throws Exception {
+    @Test(dataProvider = "availableLookAndFeels", dataProviderClass = TestHelpers.class)
+    public void test(String lookAndFeel) throws Exception {
+        UIManager.setLookAndFeel(lookAndFeel);
+        currentLookAndFeel = lookAndFeel;
         new ClassReference(SliderDemo.class.getCanonicalName()).startApplication();
         JFrameOperator frame = new JFrameOperator(DEMO_TITLE);
         plain(frame, HORIZONTAL_PLAIN_SLIDER);
@@ -143,6 +148,7 @@
     }
 
     private void checkKeyboard(JSliderOperator jso) {
+        boolean isMotif = currentLookAndFeel.equals("com.sun.java.swing.plaf.motif.MotifLookAndFeel");
         checkKeyPress(jso, KeyEvent.VK_HOME,
                 jSlider -> jSlider.getValue() == jso.getMinimum());
 
@@ -156,7 +162,7 @@
             checkKeyPress(jso, KeyEvent.VK_RIGHT,
                     jSlider -> jSlider.getValue() >= expectedValue);
         }
-        {
+        if (!isMotif) {
             int expectedValue = jso.getValue() + 11;
             checkKeyPress(jso, KeyEvent.VK_PAGE_UP,
                     jSlider -> jSlider.getValue() >= expectedValue);
@@ -175,7 +181,7 @@
             checkKeyPress(jso, KeyEvent.VK_LEFT,
                     jSlider -> jSlider.getValue() <= expectedValue);
         }
-        {
+        if (!isMotif) {
             int expectedValue = jso.getValue() - 11;
             checkKeyPress(jso, KeyEvent.VK_PAGE_DOWN,
                     jSlider -> jSlider.getValue() <= expectedValue);
--- a/test/jdk/sanity/client/SwingSet/src/ToolTipDemoTest.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/test/jdk/sanity/client/SwingSet/src/ToolTipDemoTest.java	Wed Feb 13 13:22:15 2019 -0500
@@ -34,6 +34,7 @@
 import java.awt.Point;
 
 import javax.swing.ToolTipManager;
+import javax.swing.UIManager;
 
 import org.jtregext.GuiTestListener;
 import org.netbeans.jemmy.ClassReference;
@@ -75,8 +76,9 @@
      *
      * @throws Exception
      */
-    @Test
-    public void test() throws Exception {
+    @Test(dataProvider = "availableLookAndFeels", dataProviderClass = TestHelpers.class)
+    public void test(String lookAndFeel) throws Exception {
+        UIManager.setLookAndFeel(lookAndFeel);
         new ClassReference(ToolTipDemo.class.getCanonicalName()).startApplication();
         JFrameOperator frameOperator = new JFrameOperator(DEMO_TITLE);
         frameOperator.setComparator(EXACT_STRING_COMPARATOR);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/sanity/client/lib/SwingSet3/src/com/sun/swingset3/demos/colorchooser/BezierAnimationPanel.java	Wed Feb 13 13:22:15 2019 -0500
@@ -0,0 +1,254 @@
+/*
+* Copyright (c) 2007, 2019, Oracle and/or its affiliates. All rights reserved.
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* This code is free software; you can redistribute it and/or modify it
+* under the terms of the GNU General Public License version 2 only, as
+* published by the Free Software Foundation.
+*
+* This code is distributed in the hope that it will be useful, but WITHOUT
+* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+* FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+* version 2 for more details (a copy is included in the LICENSE file that
+* accompanied this code).
+*
+* You should have received a copy of the GNU General Public License version
+* 2 along with this work; if not, write to the Free Software Foundation,
+* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+*
+* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+* or visit www.oracle.com if you need additional information or have any
+* questions.
+*/
+
+package com.sun.swingset3.demos.colorchooser;
+
+import java.awt.*;
+import java.awt.event.HierarchyEvent;
+import java.awt.event.HierarchyListener;
+import java.awt.geom.GeneralPath;
+import java.awt.image.BufferedImage;
+import java.util.Hashtable;
+import java.util.Map;
+import javax.swing.*;
+
+import static com.sun.swingset3.demos.colorchooser.BezierAnimationPanel.BezierColor.*;
+
+/**
+* BezierAnimationPanel
+*
+* @author Jim Graham
+* @author Jeff Dinkins (removed dynamic setting changes, made swing friendly)
+* @version 1.16 11/17/05
+*/
+public class BezierAnimationPanel extends JPanel implements Runnable {
+public static enum BezierColor {
+BACKGROUND, OUTER, GRADIENT_A, GRADIENT_B
+}
+
+private final Map<BezierColor, Color> colors = new Hashtable<BezierColor, Color>();
+
+private GradientPaint gradient = null;
+
+private static final int NUMPTS = 6;
+
+private final float[] animpts = new float[NUMPTS * 2];
+
+private final float[] deltas = new float[NUMPTS * 2];
+
+private BufferedImage img;
+
+private Thread anim;
+
+private final Object lock = new Object();
+
+/**
+* BezierAnimationPanel Constructor
+*/
+public BezierAnimationPanel() {
+setOpaque(true);
+
+colors.put(BACKGROUND, new Color(0, 0, 153));
+colors.put(OUTER, new Color(255, 255, 255));
+colors.put(GRADIENT_A, new Color(255, 0, 101));
+colors.put(GRADIENT_B, new Color(255, 255, 0));
+
+addHierarchyListener(new HierarchyListener() {
+public void hierarchyChanged(HierarchyEvent e) {
+if (isShowing()) {
+start();
+} else {
+stop();
+}
+}
+});
+}
+
+public Color getBezierColor(BezierColor bezierColor) {
+return colors.get(bezierColor);
+}
+
+public void setBezierColor(BezierColor bezierColor, Color value) {
+if (value != null) {
+colors.put(bezierColor, value);
+}
+}
+
+public void start() {
+Dimension size = getSize();
+for (int i = 0; i < animpts.length; i += 2) {
+animpts[i] = (float) (Math.random() * size.width);
+animpts[i + 1] = (float) (Math.random() * size.height);
+deltas[i] = (float) (Math.random() * 4.0 + 2.0);
+deltas[i + 1] = (float) (Math.random() * 4.0 + 2.0);
+if (animpts[i] > size.width / 6.0f) {
+deltas[i] = -deltas[i];
+}
+if (animpts[i + 1] > size.height / 6.0f) {
+deltas[i + 1] = -deltas[i + 1];
+}
+}
+anim = new Thread(this);
+anim.setPriority(Thread.MIN_PRIORITY);
+anim.start();
+}
+
+public synchronized void stop() {
+anim = null;
+notify();
+}
+
+private static void animate(float[] pts, float[] deltas, int index, int limit) {
+float newpt = pts[index] + deltas[index];
+if (newpt <= 0) {
+newpt = -newpt;
+deltas[index] = (float) (Math.random() * 3.0 + 2.0);
+} else if (newpt >= (float) limit) {
+newpt = 2.0f * limit - newpt;
+deltas[index] = -(float) (Math.random() * 3.0 + 2.0);
+}
+pts[index] = newpt;
+}
+
+public void run() {
+Thread me = Thread.currentThread();
+while (getSize().width <= 0) {
+try {
+Thread.sleep(500);
+} catch (InterruptedException e) {
+return;
+}
+}
+
+Graphics2D g2d = null;
+Graphics2D bufferG2D = null;
+BasicStroke solid = new BasicStroke(9.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND, 9.0f);
+GeneralPath gp = new GeneralPath(GeneralPath.WIND_NON_ZERO);
+int rule = AlphaComposite.SRC_OVER;
+AlphaComposite opaque = AlphaComposite.SrcOver;
+AlphaComposite blend = AlphaComposite.getInstance(rule, 0.9f);
+AlphaComposite set = AlphaComposite.Src;
+Dimension oldSize = getSize();
+Shape clippath = null;
+while (anim == me) {
+Dimension size = getSize();
+if (size.width != oldSize.width || size.height != oldSize.height) {
+img = null;
+clippath = null;
+if (bufferG2D != null) {
+bufferG2D.dispose();
+bufferG2D = null;
+}
+}
+oldSize = size;
+
+if (img == null) {
+img = (BufferedImage) createImage(size.width, size.height);
+}
+
+if (bufferG2D == null) {
+bufferG2D = img.createGraphics();
+bufferG2D.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_DEFAULT);
+bufferG2D.setClip(clippath);
+}
+g2d = bufferG2D;
+
+float[] ctrlpts;
+for (int i = 0; i < animpts.length; i += 2) {
+animate(animpts, deltas, i, size.width);
+animate(animpts, deltas, i + 1, size.height);
+}
+ctrlpts = animpts;
+int len = ctrlpts.length;
+gp.reset();
+float prevx = ctrlpts[len - 2];
+float prevy = ctrlpts[len - 1];
+float curx = ctrlpts[0];
+float cury = ctrlpts[1];
+float midx = (curx + prevx) / 2.0f;
+float midy = (cury + prevy) / 2.0f;
+gp.moveTo(midx, midy);
+for (int i = 2; i <= ctrlpts.length; i += 2) {
+float x1 = (midx + curx) / 2.0f;
+float y1 = (midy + cury) / 2.0f;
+prevx = curx;
+prevy = cury;
+if (i < ctrlpts.length) {
+curx = ctrlpts[i];
+cury = ctrlpts[i + 1];
+} else {
+curx = ctrlpts[0];
+cury = ctrlpts[1];
+}
+midx = (curx + prevx) / 2.0f;
+midy = (cury + prevy) / 2.0f;
+float x2 = (prevx + midx) / 2.0f;
+float y2 = (prevy + midy) / 2.0f;
+gp.curveTo(x1, y1, x2, y2, midx, midy);
+}
+gp.closePath();
+
+synchronized (lock) {
+g2d.setComposite(set);
+g2d.setBackground(getBezierColor(BACKGROUND));
+g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_OFF);
+
+// g2d.clearRect(bounds.x-5, bounds.y-5, bounds.x + bounds.width
+// + 5, bounds.y + bounds.height + 5);
+g2d.clearRect(0, 0, getWidth(), getHeight());
+
+g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
+g2d.setColor(getBezierColor(OUTER));
+g2d.setComposite(opaque);
+g2d.setStroke(solid);
+g2d.draw(gp);
+g2d.setPaint(gradient);
+
+Rectangle bounds = gp.getBounds();
+
+gradient = new GradientPaint(bounds.x, bounds.y, getBezierColor(GRADIENT_A), bounds.x + bounds.width,
+bounds.y + bounds.height, getBezierColor(GRADIENT_B), true);
+
+g2d.setComposite(blend);
+g2d.fill(gp);
+}
+
+repaint();
+
+Thread.yield();
+}
+if (g2d != null) {
+g2d.dispose();
+}
+}
+
+public void paint(Graphics g) {
+synchronized (lock) {
+Graphics2D g2d = (Graphics2D) g;
+if (img != null) {
+g2d.setComposite(AlphaComposite.Src);
+g2d.drawImage(img, null, 0, 0);
+}
+}
+}
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/sanity/client/lib/SwingSet3/src/com/sun/swingset3/demos/colorchooser/ColorChooserDemo.java	Wed Feb 13 13:22:15 2019 -0500
@@ -0,0 +1,170 @@
+/*
+ * Copyright (c) 2007, 2019, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package com.sun.swingset3.demos.colorchooser;
+
+import java.awt.*;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import javax.swing.*;
+import javax.swing.border.EmptyBorder;
+
+import com.sun.swingset3.demos.JGridPanel;
+import com.sun.swingset3.demos.ResourceManager;
+import com.sun.swingset3.DemoProperties;
+
+/**
+ * JColorChooserDemo
+ *
+ * @author Jeff Dinkins
+ * @version 1.1 07/16/99
+ */
+@DemoProperties(value = "JColorChooser Demo", category = "Choosers", description = "Demonstrates JColorChooser, a component which allows the user to pick a color.", sourceFiles = {
+        "com/sun/swingset3/demos/colorchooser/ColorChooserDemo.java",
+        "com/sun/swingset3/demos/colorchooser/BezierAnimationPanel.java", "com/sun/swingset3/demos/JGridPanel.java",
+        "com/sun/swingset3/demos/ResourceManager.java",
+        "com/sun/swingset3/demos/colorchooser/resources/ColorChooserDemo.properties",
+        "com/sun/swingset3/demos/colorchooser/resources/images/ColorChooserDemo.gif" })
+public class ColorChooserDemo extends JPanel {
+
+    private static final ResourceManager resourceManager = new ResourceManager(ColorChooserDemo.class);
+
+    private final BezierAnimationPanel bezAnim = new BezierAnimationPanel();
+
+    public static final String BACKGROUND = resourceManager.getString("ColorChooserDemo.background");
+    public static final String GRADIENT_1 = resourceManager.getString("ColorChooserDemo.grad_a");
+    public static final String GRADIENT_2 = resourceManager.getString("ColorChooserDemo.grad_b");
+    public static final String PERIMETER = resourceManager.getString("ColorChooserDemo.outer_line");
+    public static final String CHOOSER_TITLE = resourceManager.getString("ColorChooserDemo.chooser_title");
+
+    private final JButton outerColorButton = new JButton(PERIMETER);
+
+    private final JButton backgroundColorButton = new JButton(BACKGROUND);
+
+    private final JButton gradientAButton = new JButton(GRADIENT_1);
+
+    private final JButton gradientBButton = new JButton(GRADIENT_2);
+
+    public static final String DEMO_TITLE = ColorChooserDemo.class.getAnnotation(DemoProperties.class).value();
+
+    /**
+     * main method allows us to run as a standalone demo.
+     */
+    public static void main(String[] args) {
+        JFrame frame = new JFrame(ColorChooserDemo.class.getAnnotation(DemoProperties.class).value());
+
+        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+        frame.getContentPane().add(new ColorChooserDemo());
+        frame.setPreferredSize(new Dimension(800, 600));
+        frame.pack();
+        frame.setLocationRelativeTo(null);
+        frame.setVisible(true);
+    }
+
+    /**
+     * ColorChooserDemo Constructor
+     */
+    public ColorChooserDemo() {
+        setLayout(new BorderLayout());
+
+        outerColorButton.setIcon(new ColorSwatch(BezierAnimationPanel.BezierColor.OUTER));
+
+        backgroundColorButton.setIcon(new ColorSwatch(BezierAnimationPanel.BezierColor.BACKGROUND));
+
+        gradientAButton.setIcon(new ColorSwatch(BezierAnimationPanel.BezierColor.GRADIENT_A));
+
+        gradientBButton.setIcon(new ColorSwatch(BezierAnimationPanel.BezierColor.GRADIENT_B));
+
+        ActionListener l = new ActionListener() {
+            public void actionPerformed(ActionEvent e) {
+                JButton button = (JButton) e.getSource();
+
+                final BezierAnimationPanel.BezierColor bezierColor = ((ColorSwatch) button.getIcon()).getBezierColor();
+
+                Color current = bezAnim.getBezierColor(bezierColor);
+
+                final JColorChooser chooser = new JColorChooser(current != null ? current : Color.WHITE);
+
+                ActionListener colorChooserListener = new ActionListener() {
+                    public void actionPerformed(ActionEvent ae) {
+                        bezAnim.setBezierColor(bezierColor, chooser.getColor());
+                    }
+                };
+
+                JDialog dialog = JColorChooser.createDialog(ColorChooserDemo.this, CHOOSER_TITLE, true, chooser,
+                        colorChooserListener, null);
+
+                dialog.setVisible(true);
+            }
+        };
+
+        outerColorButton.addActionListener(l);
+        backgroundColorButton.addActionListener(l);
+        gradientAButton.addActionListener(l);
+        gradientBButton.addActionListener(l);
+
+        // Add control buttons
+        JPanel buttonPanel = new JPanel(new GridLayout(1, 4, 15, 0));
+
+        buttonPanel.add(backgroundColorButton);
+        buttonPanel.add(gradientAButton);
+        buttonPanel.add(gradientBButton);
+        buttonPanel.add(outerColorButton);
+
+        // Add everything to the panel
+        JGridPanel pnContent = new JGridPanel(1, 0, 1);
+
+        pnContent.cell(buttonPanel, JGridPanel.Layout.CENTER).cell(bezAnim);
+
+        pnContent.setBorder(new EmptyBorder(10, 0, 0, 0));
+
+        add(pnContent);
+    }
+
+    private class ColorSwatch implements Icon {
+        private final BezierAnimationPanel.BezierColor bezierColor;
+
+        public ColorSwatch(BezierAnimationPanel.BezierColor bezierColor) {
+            this.bezierColor = bezierColor;
+        }
+
+        public int getIconWidth() {
+            return 11;
+        }
+
+        public int getIconHeight() {
+            return 11;
+        }
+
+        public BezierAnimationPanel.BezierColor getBezierColor() {
+            return bezierColor;
+        }
+
+        public void paintIcon(Component c, Graphics g, int x, int y) {
+            g.setColor(Color.black);
+            g.fillRect(x, y, getIconWidth(), getIconHeight());
+            g.setColor(bezAnim.getBezierColor(bezierColor));
+            g.fillRect(x + 2, y + 2, getIconWidth() - 4, getIconHeight() - 4);
+        }
+    }
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/sanity/client/lib/SwingSet3/src/com/sun/swingset3/demos/colorchooser/resources/ColorChooserDemo.properties	Wed Feb 13 13:22:15 2019 -0500
@@ -0,0 +1,11 @@
+### ColorChooser Demo ###
+
+ColorChooserDemo.accessible_description=The ColorChooser allows a user to pick a color either from a pallete or by choosing RGB or HSB values
+ColorChooserDemo.tooltip=JColorChooser demo
+ColorChooserDemo.name=ColorChooser Demo
+ColorChooserDemo.chooser_title=Choose a Color
+ColorChooserDemo.background=Background
+ColorChooserDemo.grad_a=Gradient 1
+ColorChooserDemo.grad_b=Gradient 2
+ColorChooserDemo.outer_line=Perimeter
+ColorChooserDemo.cup=Image of the Java Trademark Coffee Cup
Binary file test/jdk/sanity/client/lib/SwingSet3/src/com/sun/swingset3/demos/colorchooser/resources/images/ColorChooserDemo.gif has changed
--- a/test/jdk/sanity/client/lib/SwingSet3/src/com/sun/swingset3/demos/slider/SliderDemo.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/test/jdk/sanity/client/lib/SwingSet3/src/com/sun/swingset3/demos/slider/SliderDemo.java	Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2019, 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
@@ -73,6 +73,9 @@
      * main method allows us to run as a standalone demo.
      */
     public static void main(String[] args) {
+        //Ensure slider value is not printed above the slider handle
+        //which is the default behavior in GTK look and feel.
+        UIManager.put("Slider.paintValue", Boolean.FALSE);
         JFrame frame = new JFrame(SliderDemo.class.getAnnotation(DemoProperties.class).value());
         frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
         frame.getContentPane().add(new SliderDemo());
--- a/test/jdk/sanity/client/lib/jemmy/src/org/netbeans/jemmy/drivers/DefaultDriverInstaller.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/test/jdk/sanity/client/lib/jemmy/src/org/netbeans/jemmy/drivers/DefaultDriverInstaller.java	Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2019, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -41,7 +41,7 @@
 import org.netbeans.jemmy.drivers.menus.DefaultJMenuDriver;
 import org.netbeans.jemmy.drivers.menus.QueueJMenuDriver;
 import org.netbeans.jemmy.drivers.scrolling.JScrollBarDriver;
-import org.netbeans.jemmy.drivers.scrolling.JSliderDriver;
+import org.netbeans.jemmy.drivers.scrolling.KeyboardJSliderScrollDriver;
 import org.netbeans.jemmy.drivers.scrolling.JSplitPaneDriver;
 import org.netbeans.jemmy.drivers.scrolling.ScrollPaneDriver;
 import org.netbeans.jemmy.drivers.scrolling.ScrollbarDriver;
@@ -109,7 +109,7 @@
                     new ScrollPaneDriver(),
                     new JScrollBarDriver(),
                     new JSplitPaneDriver(),
-                    new JSliderDriver(),
+                    new KeyboardJSliderScrollDriver(),
                     createSpinnerDriver(),
                     new ButtonMouseDriver(),
                     new JTabMouseDriver(),
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/sun/security/krb5/auto/ReplayCacheTestProcWithMD5.java	Wed Feb 13 13:22:15 2019 -0500
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2016, 2019, 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 8168518 8194486
+ * @summary  testing jdk.krb5.rcache.useMD5. This action is put in a separate
+ *           test so that ReplayCacheTestProc.java can be launched with special
+ *           test.* system properties easily.
+ * @library ../../../../java/security/testlibrary/ /test/lib
+ * @build jdk.test.lib.Platform
+ * @run main jdk.test.lib.FileInstaller TestHosts TestHosts
+ * @run main/othervm/timeout=300 -Djdk.krb5.rcache.useMD5=true
+ *           -Djdk.net.hosts.file=TestHosts
+ *           -Dtest.service=host ReplayCacheTestProc
+ */
--- a/test/jdk/sun/security/krb5/auto/rcache_usemd5.sh	Tue Feb 12 11:58:41 2019 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,34 +0,0 @@
-#
-# Copyright (c) 2016, 2018, 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 8168518 8194486
-# @summary  testing jdk.krb5.rcache.useMD5. This action is put in a separate
-#           test so that ReplayCacheTestProc.java can be launched with special
-#           test.* system properties easily.
-# @library ../../../../java/security/testlibrary/ /test/lib
-# @build jdk.test.lib.Platform
-# @run main jdk.test.lib.FileInstaller TestHosts TestHosts
-# @run main/othervm/timeout=300 -Djdk.krb5.rcache.useMD5=true
-#           -Djdk.net.hosts.file=TestHosts
-#           -Dtest.service=host ReplayCacheTestProc
--- a/test/jdk/sun/security/krb5/tools/KtabCheck.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/test/jdk/sun/security/krb5/tools/KtabCheck.java	Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2019, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -21,27 +21,87 @@
  * questions.
  */
 
+import java.io.File;
+import java.nio.file.Files;
+import java.nio.file.Path;
 import java.util.Arrays;
 import java.util.HashSet;
 import java.util.Set;
+
+import jdk.test.lib.SecurityTools;
 import sun.security.krb5.internal.ktab.KeyTab;
 import sun.security.krb5.internal.ktab.KeyTabEntry;
 
-/**
- * This class is called by the test ktcheck.sh and is not meant to run
- * by itself.
+/*
+ * @test
+ * @bug 6950546
+ * @summary "ktab -d name etype" to "ktab -d name [-e etype] [kvno | all | old]"
+ * @requires os.family == "windows"
+ * @library /test/lib
+ * @modules java.security.jgss/sun.security.krb5.internal.ktab
+ *          java.security.jgss/sun.security.krb5
  */
 public class KtabCheck {
+
+    private static final String KEYTAB = "ktab.tmp";
+
+    public static void main(String[] args) throws Exception {
+
+        Files.deleteIfExists(Path.of(KEYTAB));
+
+        ktab("-a me mine");
+        check(1,16,1,23,1,17);
+        ktab("-a me mine -n 0");
+        check(0,16,0,23,0,17);
+        ktab("-a me mine -n 1 -append");
+        check(0,16,0,23,0,17,1,16,1,23,1,17);
+        ktab("-a me mine -append");
+        check(0,16,0,23,0,17,1,16,1,23,1,17,2,16,2,23,2,17);
+        ktab("-a me mine");
+        check(3,16,3,23,3,17);
+        ktab("-a me mine -n 4 -append");
+        check(3,16,3,23,3,17,4,16,4,23,4,17);
+        ktab("-a me mine -n 5 -append");
+        check(3,16,3,23,3,17,4,16,4,23,4,17,5,16,5,23,5,17);
+        ktab("-a me mine -n 6 -append");
+        check(3,16,3,23,3,17,4,16,4,23,4,17,5,16,5,23,5,17,6,16,6,23,6,17);
+        ktab("-d me 3");
+        check(4,16,4,23,4,17,5,16,5,23,5,17,6,16,6,23,6,17);
+        ktab("-d me -e 16 6");
+        check(4,16,4,23,4,17,5,16,5,23,5,17,6,23,6,17);
+        ktab("-d me -e 17 6");
+        check(4,16,4,23,4,17,5,16,5,23,5,17,6,23);
+        ktab("-d me -e 16 5");
+        check(4,16,4,23,4,17,5,23,5,17,6,23);
+        ktab("-d me old");
+        check(4,16,5,17,6,23);
+        try {
+            ktab("-d me old");
+            throw new Exception("Should fail");
+        } catch (Exception e) {
+            // no-op
+        }
+        check(4,16,5,17,6,23);
+        ktab("-d me");
+        check();
+    }
+
+    static void ktab(String s) throws Exception {
+        File conf = new File(System.getProperty("test.src"), "onlythree.conf");
+        SecurityTools.ktab("-J-Djava.security.krb5.conf=" + conf
+                + " -k " + KEYTAB + " -f " + s).shouldHaveExitValue(0);
+    }
+
     /**
      * Checks if a keytab contains exactly the keys (kvno and etype)
-     * @param args keytabname kvno etype...
+     * @param args kvno etype...
      */
-    public static void main(String[] args) throws Exception {
+    static void check(int... args) throws Exception {
         System.out.println("Checking " + Arrays.toString(args));
-        KeyTab ktab = KeyTab.getInstance(args[0]);
+        KeyTab ktab = KeyTab.getInstance(KEYTAB);
         Set<String> expected = new HashSet<>();
-        for (int i=1; i<args.length; i += 2) {
-            expected.add(args[i]+":"+args[i+1]);
+        for (int i = 0; i < args.length; i += 2) {
+            expected.add(args[i] + ":" + args[i + 1]);
         }
         for (KeyTabEntry e: ktab.getEntries()) {
             // KVNO and etype
--- a/test/jdk/sun/security/krb5/tools/KtabZero.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/test/jdk/sun/security/krb5/tools/KtabZero.java	Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2019, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -21,21 +21,25 @@
  * questions.
  */
 
+import jdk.test.lib.SecurityTools;
+import jdk.test.lib.process.OutputAnalyzer;
 import sun.security.krb5.internal.ktab.KeyTab;
 import sun.security.krb5.internal.ktab.KeyTabConstants;
 
-import java.io.File;
 import java.lang.reflect.Field;
 import java.nio.file.Files;
+import java.nio.file.Path;
 import java.nio.file.Paths;
 
+import static jdk.test.lib.SecurityTools.klist;
+
 /*
  * @test
- * @bug 8014196
+ * @bug 8014196 7002036 7043737
  * @summary ktab creates a file with zero kt_vno
  * @requires os.family == "windows"
+ * @library /test/lib
  * @modules java.security.jgss/sun.security.krb5.internal.ktab:+open
- *          java.security.jgss/sun.security.krb5.internal.tools
  */
 public class KtabZero {
 
@@ -45,6 +49,8 @@
 
         // 0. Non-existing keytab
         Files.deleteIfExists(Paths.get(NAME));
+        ktab("-l").shouldNotHaveExitValue(0);
+        klist("-k " + NAME).shouldNotHaveExitValue(0);
         check(true);
 
         // 1. Create with KeyTab
@@ -54,9 +60,24 @@
 
         // 2. Create with the tool
         Files.deleteIfExists(Paths.get(NAME));
-        sun.security.krb5.internal.tools.Ktab.main(
-            ("-k " + NAME + " -a me@HERE pass").split(" "));
+        ktab("-a me@HERE pass").shouldHaveExitValue(0);
+        ktab("-l").shouldHaveExitValue(0);
+
+        // 7002036: ktab return code changes on a error case
+        ktab("-hello").shouldNotHaveExitValue(0);
+        ktab("").shouldNotHaveExitValue(0);
         check(false);
+
+        // 3. Invalid keytab
+        Files.write(Path.of(NAME), "garbage".getBytes());
+        ktab("-l").shouldNotHaveExitValue(0);
+        ktab("-a me@HERE pass").shouldNotHaveExitValue(0);
+        klist("-k " + NAME).shouldNotHaveExitValue(0);
+    }
+
+    static OutputAnalyzer ktab(String s) throws Exception {
+        s = ("-k " + NAME + " " + s).trim();
+        return SecurityTools.ktab(s);
     }
 
     // Checks existence as well as kt-vno
--- a/test/jdk/sun/security/krb5/tools/ktarg.sh	Tue Feb 12 11:58:41 2019 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,67 +0,0 @@
-#
-# Copyright (c) 2010, 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 7002036
-# @summary ktab return code changes on a error case
-# @run shell ktarg.sh
-#
-
-if [ "${TESTJAVA}" = "" ] ; then
-  JAVAC_CMD=`which javac`
-  TESTJAVA=`dirname $JAVAC_CMD`/..
-fi
-
-if [ "${TESTSRC}" = "" ] ; then
-  TESTSRC="."
-fi
-
-OS=`uname -s`
-case "$OS" in
-  CYGWIN* )
-    FS="/"
-    ;;
-  Windows_* )
-    FS="\\"
-    ;;
-  * )
-    FS="/"
-    echo "Unsupported system!"
-    exit 0;
-    ;;
-esac
-
-KEYTAB=ktarg.tmp
-
-rm $KEYTAB 2> /dev/null
-KTAB="${TESTJAVA}${FS}bin${FS}ktab -k $KEYTAB"
-
-$KTAB -a me@LOCAL mine || exit 1
-
-$KTAB -hello
-if [ $? = 0 ]; then exit 2; fi
-
-$KTAB
-if [ $? = 0 ]; then exit 3; fi
-
-exit 0
--- a/test/jdk/sun/security/krb5/tools/ktcheck.sh	Tue Feb 12 11:58:41 2019 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,99 +0,0 @@
-#
-# Copyright (c) 2010, 2012, 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 6950546
-# @summary "ktab -d name etype" to "ktab -d name [-e etype] [kvno | all | old]"
-# @modules java.security.jgss/sun.security.krb5.internal.ktab
-#          java.security.jgss/sun.security.krb5
-# @compile KtabCheck.java
-# @run shell ktcheck.sh
-#
-
-if [ "${TESTJAVA}" = "" ] ; then
-  JAVAC_CMD=`which javac`
-  TESTJAVA=`dirname $JAVAC_CMD`/..
-fi
-
-if [ "${TESTSRC}" = "" ] ; then
-  TESTSRC="."
-fi
-
-OS=`uname -s`
-case "$OS" in
-  CYGWIN* )
-    FS="/"
-    ;;
-  Windows_* )
-    FS="\\"
-    ;;
-  * )
-    FS="/"
-    echo "Unsupported system!"
-    exit 0;
-    ;;
-esac
-
-KEYTAB=ktab.tmp
-
-rm $KEYTAB
-
-EXTRA_OPTIONS="-Djava.security.krb5.conf=${TESTSRC}${FS}onlythree.conf"
-KTAB="${TESTJAVA}${FS}bin${FS}ktab -J${EXTRA_OPTIONS} -k $KEYTAB -f"
-CHECK="${TESTJAVA}${FS}bin${FS}java -cp ${TESTCLASSES} ${TESTVMOPTS} ${EXTRA_OPTIONS} \
-        --add-exports java.security.jgss/sun.security.krb5.internal.ktab=ALL-UNNAMED \
-        --add-exports java.security.jgss/sun.security.krb5=ALL-UNNAMED \
-        KtabCheck $KEYTAB"
-
-echo ${EXTRA_OPTIONS}
-
-$KTAB -a me mine
-$CHECK 1 16 1 23 1 17 || exit 1
-$KTAB -a me mine -n 0
-$CHECK 0 16 0 23 0 17 || exit 1
-$KTAB -a me mine -n 1 -append
-$CHECK 0 16 0 23 0 17 1 16 1 23 1 17 || exit 1
-$KTAB -a me mine -append
-$CHECK 0 16 0 23 0 17 1 16 1 23 1 17 2 16 2 23 2 17 || exit 1
-$KTAB -a me mine
-$CHECK 3 16 3 23 3 17 || exit 1
-$KTAB -a me mine -n 4 -append
-$CHECK 3 16 3 23 3 17 4 16 4 23 4 17 || exit 1
-$KTAB -a me mine -n 5 -append
-$CHECK 3 16 3 23 3 17 4 16 4 23 4 17 5 16 5 23 5 17 || exit 1
-$KTAB -a me mine -n 6 -append
-$CHECK 3 16 3 23 3 17 4 16 4 23 4 17 5 16 5 23 5 17 6 16 6 23 6 17 || exit 1
-$KTAB -d me 3
-$CHECK 4 16 4 23 4 17 5 16 5 23 5 17 6 16 6 23 6 17 || exit 1
-$KTAB -d me -e 16 6
-$CHECK 4 16 4 23 4 17 5 16 5 23 5 17 6 23 6 17 || exit 1
-$KTAB -d me -e 17 6
-$CHECK 4 16 4 23 4 17 5 16 5 23 5 17 6 23 || exit 1
-$KTAB -d me -e 16 5
-$CHECK 4 16 4 23 4 17 5 23 5 17 6 23 || exit 1
-$KTAB -d me old
-$CHECK 4 16 5 17 6 23 || exit 1
-$KTAB -d me old
-$CHECK 4 16 5 17 6 23 || exit 1
-$KTAB -d me
-$CHECK || exit 1
--- a/test/jdk/sun/security/krb5/tools/ktmissing.sh	Tue Feb 12 11:58:41 2019 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,51 +0,0 @@
-#
-# Copyright (c) 2011, 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 7043737
-# @summary klist does not detect non-existing keytab
-# @run shell ktmissing.sh
-#
-
-OS=`uname -s`
-case "$OS" in
-  CYGWIN* )
-    FS="/"
-    ;;
-  Windows_* )
-    FS="\\"
-    ;;
-  * )
-    FS="/"
-    echo "Unsupported system!"
-    exit 0;
-    ;;
-esac
-
-${TESTJAVA}${FS}bin${FS}klist -k this_file_does_not_exist && exit 1
-
-echo ABC > this_is_not_a_keytab
-
-${TESTJAVA}${FS}bin${FS}klist -k this_is_not_a_keytab && exit 2
-
-exit 0
--- a/test/jdk/sun/security/krb5/tools/ktzero.sh	Tue Feb 12 11:58:41 2019 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,74 +0,0 @@
-#
-# 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
-# @bug 8014196
-# @summary ktab creates a file with zero kt_vno
-# @run shell ktzero.sh
-#
-
-if [ "${TESTJAVA}" = "" ] ; then
-  JAVAC_CMD=`which javac`
-  TESTJAVA=`dirname $JAVAC_CMD`/..
-fi
-
-if [ "${TESTSRC}" = "" ] ; then
-  TESTSRC="."
-fi
-
-OS=`uname -s`
-case "$OS" in
-  CYGWIN* )
-    FS="/"
-    ;;
-  Windows_* )
-    FS="\\"
-    ;;
-  * )
-    FS="/"
-    echo "Unsupported system!"
-    exit 0;
-    ;;
-esac
-
-KEYTAB=ktzero.tmp
-
-rm $KEYTAB 2> /dev/null
-KTAB="${TESTJAVA}${FS}bin${FS}ktab -k $KEYTAB"
-
-# Listing non-existing ktab should fail
-$KTAB -l && exit 1
-
-# Can add to non-existing ktab
-$KTAB -a me@LOCAL mine || exit 2
-
-# Now can be listed
-$KTAB -l || exit 3
-
-echo ABCDEFG > $KEYTAB
-
-# Invalid keytab should fail for all commands
-$KTAB -l && exit 4
-$KTAB -a me@LOCAL mine && exit 2
-
-exit 0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/sun/tools/jcmd/TestProcess.java	Wed Feb 13 13:22:15 2019 -0500
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package test;
+
+public class TestProcess {
+
+    public static void main(String[] args) throws Exception {
+       System.out.print("The process started, pid:" + ProcessHandle.current().pid());
+        while(true) {
+            Thread.sleep(100);
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/sun/tools/jcmd/TestProcessHelper.java	Wed Feb 13 13:22:15 2019 -0500
@@ -0,0 +1,259 @@
+/*
+ * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import jdk.internal.module.ModuleInfoWriter;
+import jdk.test.lib.JDKToolFinder;
+import jdk.test.lib.process.ProcessTools;
+import jdk.test.lib.util.JarUtils;
+import sun.tools.common.ProcessHelper;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.lang.module.ModuleDescriptor;
+import java.nio.file.FileSystems;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.util.ArrayList;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.jar.Attributes;
+import java.util.jar.JarEntry;
+import java.util.jar.JarOutputStream;
+import java.util.jar.Manifest;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+/*
+ * @test
+ * @bug 8205654
+ * @summary Unit test for sun.tools.ProcessHelper class. The test launches Java processes with different Java options
+ * and checks that sun.tools.ProcessHelper.getMainClass(pid) method returns a correct main class.                                                                                                                               return a .
+ *
+ * @requires os.family == "linux"
+ * @library /test/lib
+ * @modules jdk.jcmd/sun.tools.common
+ *          java.base/jdk.internal.module
+ * @build test.TestProcess
+ * @run main/othervm TestProcessHelper
+ */
+public class TestProcessHelper {
+
+    private ProcessHelper PROCESS_HELPER = ProcessHelper.platformProcessHelper();
+
+    private static final String TEST_PROCESS_MAIN_CLASS_NAME = "TestProcess";
+    private static final String TEST_PROCESS_MAIN_CLASS_PACKAGE = "test";
+    private static final String TEST_PROCESS_MAIN_CLASS = TEST_PROCESS_MAIN_CLASS_PACKAGE + "."
+            + TEST_PROCESS_MAIN_CLASS_NAME;
+    private static final Path TEST_CLASSES = FileSystems.getDefault().getPath(System.getProperty("test.classes"));
+    private static final Path USER_DIR = FileSystems.getDefault().getPath(System.getProperty("user.dir", "."));
+    private static final Path TEST_MODULES = USER_DIR.resolve("testmodules");
+    private static final String JAVA_PATH = JDKToolFinder.getJDKTool("java");
+    private static final Path TEST_CLASS = TEST_CLASSES.resolve(TEST_PROCESS_MAIN_CLASS_PACKAGE)
+            .resolve(TEST_PROCESS_MAIN_CLASS_NAME + ".class");
+
+    private static final String[] CP_OPTIONS = {"-cp", "-classpath", "--class-path"};
+    private static final String[][] VM_ARGS = {{}, {"-Dtest1=aaa"}, {"-Dtest1=aaa", "-Dtest2=bbb"}};
+    private static final String[][] ARGS = {{}, {"param1"}, {"param1", "param2"}};
+    private static final String[] MP_OPTIONS = {"-p", "--module-path"};
+    private static final String[] MODULE_OPTIONS = {"-m", "--module"};
+    private static final String JAR_OPTION = "-jar";
+    private static final String MODULE_NAME = "module1";
+
+
+    public static void main(String[] args) throws Exception {
+        new TestProcessHelper().runTests();
+    }
+
+    public void runTests() throws Exception {
+        testClassPath();
+        testJar();
+        testModule();
+    }
+
+    // Test Java processes that are started with -classpath, -cp, or --class-path options
+    // and with different combinations of VM and program args.
+    private void testClassPath() throws Exception {
+        for (String cp : CP_OPTIONS) {
+            for (String[] vma : VM_ARGS) {
+                for (String[] arg : ARGS) {
+                    List<String> cmd = new LinkedList<>();
+                    cmd.add(JAVA_PATH);
+                    cmd.add(cp);
+                    cmd.add(TEST_CLASSES.toAbsolutePath().toString());
+                    for (String v : vma) {
+                        cmd.add(v);
+                    }
+                    cmd.add(TEST_PROCESS_MAIN_CLASS);
+                    for (String a : arg) {
+                        cmd.add(a);
+                    }
+                    testProcessHelper(cmd);
+                }
+            }
+        }
+    }
+
+    // Test Java processes that are started with -jar option
+    // and with different combinations of VM and program args.
+    private void testJar() throws Exception {
+        File jarFile = prepareJar();
+        for (String[] vma : VM_ARGS) {
+            for (String[] arg : ARGS) {
+                List<String> cmd = new LinkedList<>();
+                cmd.add(JAVA_PATH);
+                for (String v : vma) {
+                    cmd.add(v);
+                }
+                cmd.add(JAR_OPTION);
+                cmd.add(jarFile.getAbsolutePath());
+                for (String a : arg) {
+                    cmd.add(a);
+                }
+                testProcessHelper(cmd);
+            }
+        }
+
+    }
+
+    // Test Java processes that are started with -m or --module options
+    // and with different combination of VM and program args.
+    private void testModule() throws Exception {
+        prepareModule();
+        for (String mp : MP_OPTIONS) {
+            for (String m : MODULE_OPTIONS) {
+                for (String[] vma : VM_ARGS) {
+                    for (String[] arg : ARGS) {
+                        List<String> cmd = new LinkedList<>();
+                        cmd.add(JAVA_PATH);
+                        cmd.add(mp);
+                        cmd.add(TEST_MODULES.toAbsolutePath().toString());
+                        for (String v : vma) {
+                            cmd.add(v);
+                        }
+                        cmd.add(m);
+                        cmd.add(MODULE_NAME + "/" + TEST_PROCESS_MAIN_CLASS);
+                        for (String a : arg) {
+                            cmd.add(a);
+                        }
+                        testProcessHelper(cmd);
+                    }
+                }
+            }
+        }
+    }
+
+    private void checkMainClass(Process p, String expectedMainClass) {
+        String mainClass = PROCESS_HELPER.getMainClass(Long.toString(p.pid()));
+        p.destroyForcibly();
+        if (!expectedMainClass.equals(mainClass)) {
+            throw new RuntimeException("Main class is wrong: " + mainClass);
+        }
+    }
+
+    private void testProcessHelper(List<String> args) throws Exception {
+        ProcessBuilder pb = new ProcessBuilder(args);
+        String cmd = pb.command().stream().collect(Collectors.joining(" "));
+        System.out.println("Starting the process:" + cmd);
+        Process p = ProcessTools.startProcess("test", pb);
+        if (!p.isAlive()) {
+            throw new RuntimeException("Cannot start the process: " + cmd);
+        }
+        checkMainClass(p, TEST_PROCESS_MAIN_CLASS);
+    }
+
+    private File prepareJar() throws Exception {
+        Path jarFile = USER_DIR.resolve("testprocess.jar");
+        Manifest manifest = createManifest();
+        JarUtils.createJarFile(jarFile, manifest, TEST_CLASSES, TEST_CLASS);
+        return jarFile.toFile();
+    }
+
+    private void prepareModule() throws Exception {
+        TEST_MODULES.toFile().mkdirs();
+        Path moduleJar = TEST_MODULES.resolve("mod1.jar");
+        ModuleDescriptor md = createModuleDescriptor();
+        createModuleJarFile(moduleJar, md, TEST_CLASSES, TEST_CLASS);
+    }
+
+    private Manifest createManifest() {
+        Manifest manifest = new Manifest();
+        manifest.getMainAttributes().put(Attributes.Name.MANIFEST_VERSION, "1.0");
+        manifest.getMainAttributes().put(Attributes.Name.MAIN_CLASS, TEST_PROCESS_MAIN_CLASS);
+        return manifest;
+    }
+
+    private ModuleDescriptor createModuleDescriptor() {
+        ModuleDescriptor.Builder builder
+                = ModuleDescriptor.newModule(MODULE_NAME).requires("java.base");
+        return builder.build();
+    }
+
+    private static void createModuleJarFile(Path jarfile, ModuleDescriptor md, Path dir, Path... files)
+            throws IOException {
+
+        Path parent = jarfile.getParent();
+        if (parent != null) {
+            Files.createDirectories(parent);
+        }
+
+        List<Path> entries = findAllRegularFiles(dir, files);
+
+        try (OutputStream out = Files.newOutputStream(jarfile);
+             JarOutputStream jos = new JarOutputStream(out)) {
+            if (md != null) {
+                JarEntry je = new JarEntry("module-info.class");
+                jos.putNextEntry(je);
+                ModuleInfoWriter.write(md, jos);
+                jos.closeEntry();
+            }
+
+            for (Path entry : entries) {
+                String name = toJarEntryName(entry);
+                jos.putNextEntry(new JarEntry(name));
+                Files.copy(dir.resolve(entry), jos);
+                jos.closeEntry();
+            }
+        }
+    }
+
+    private static String toJarEntryName(Path file) {
+        Path normalized = file.normalize();
+        return normalized.subpath(0, normalized.getNameCount())
+                .toString()
+                .replace(File.separatorChar, '/');
+    }
+
+    private static List<Path> findAllRegularFiles(Path dir, Path[] files) throws IOException {
+        List<Path> entries = new ArrayList<>();
+        for (Path file : files) {
+            try (Stream<Path> stream = Files.find(dir.resolve(file), Integer.MAX_VALUE,
+                    (p, attrs) -> attrs.isRegularFile())) {
+                stream.map(dir::relativize)
+                        .forEach(entries::add);
+            }
+        }
+        return entries;
+    }
+
+}
--- a/test/lib/jdk/test/lib/SecurityTools.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/test/lib/jdk/test/lib/SecurityTools.java	Wed Feb 13 13:22:15 2019 -0500
@@ -195,5 +195,33 @@
     public static OutputAnalyzer jarsigner(String... args) throws Exception {
         return jarsigner(List.of(args));
     }
+
+    /**
+     * Runs ktab.
+     *
+     * @param args arguments to ktab in a single string. Only call this if
+     *             there is no white space inside an argument. This string will
+     *             be split with {@code \s+}.
+     * @return an {@link OutputAnalyzer} object
+     * @throws Exception if there is an error
+     */
+    public static OutputAnalyzer ktab(String args) throws Exception {
+        return execute(getProcessBuilder(
+                "ktab", List.of(args.trim().split("\\s+"))));
+    }
+
+    /**
+     * Runs klist.
+     *
+     * @param args arguments to klist in a single string. Only call this if
+     *             there is no white space inside an argument. This string will
+     *             be split with {@code \s+}.
+     * @return an {@link OutputAnalyzer} object
+     * @throws Exception if there is an error
+     */
+    public static OutputAnalyzer klist(String args) throws Exception {
+        return execute(getProcessBuilder(
+                "klist", List.of(args.trim().split("\\s+"))));
+    }
 }
 
--- a/test/lib/sun/hotspot/WhiteBox.java	Tue Feb 12 11:58:41 2019 -0500
+++ b/test/lib/sun/hotspot/WhiteBox.java	Wed Feb 13 13:22:15 2019 -0500
@@ -216,6 +216,7 @@
   public native void NMTUncommitMemory(long addr, long size);
   public native void NMTReleaseMemory(long addr, long size);
   public native long NMTMallocWithPseudoStack(long size, int index);
+  public native long NMTMallocWithPseudoStackAndType(long size, int index, int type);
   public native boolean NMTChangeTrackingLevel();
   public native int NMTGetHashSize();
 
--- a/test/make/TestMakeBase.gmk	Tue Feb 12 11:58:41 2019 -0500
+++ b/test/make/TestMakeBase.gmk	Wed Feb 13 13:22:15 2019 -0500
@@ -116,6 +116,28 @@
 endif
 
 ################################################################################
+# Test boolean operators
+
+$(eval $(call assert-equals, $(call And,  true  true  true ), true))
+$(eval $(call assert-equals, $(call And,  true  false true ), false))
+$(eval $(call assert-equals, $(call And,  false false false ), false))
+$(eval $(call assert-equals, $(call And, true), true))
+$(eval $(call assert-equals, $(call And, false), false))
+$(eval $(call assert-equals, $(call And,    ), true))
+
+$(eval $(call assert-equals, $(call Or,  true  true  true ), true))
+$(eval $(call assert-equals, $(call Or,  true  false true ), true))
+$(eval $(call assert-equals, $(call Or,  false false false ), false))
+$(eval $(call assert-equals, $(call Or, true), true))
+$(eval $(call assert-equals, $(call Or, false), false))
+$(eval $(call assert-equals, $(call Or,    ), false))
+
+# We cannot catch $(error) while testing, but you can enable this manually
+# by uncommenting and watch make fails.
+#$(eval $(call assert-equals, $(call And,  non-boolean  ), $(error ...)))
+#$(eval $(call assert-equals, $(call Or,  non-boolean  ), $(error ...)))
+
+################################################################################
 # Test remove-prefixes
 
 $(eval $(call assert-equals, \
--- a/test/make/UtilsForTests.gmk	Tue Feb 12 11:58:41 2019 -0500
+++ b/test/make/UtilsForTests.gmk	Wed Feb 13 13:22:15 2019 -0500
@@ -37,6 +37,6 @@
 
 # On macosx, file system timestamps only have 1 second resultion so must add
 # sleeps to properly test dependencies.
-ifeq ($(OPENJDK_BUILD_OS), macosx)
+ifeq ($(call isBuildOs, macosx), true)
   SLEEP_ON_MAC := sleep 1
 endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/micro/org/openjdk/bench/java/util/HashMapBench.java	Wed Feb 13 13:22:15 2019 -0500
@@ -0,0 +1,103 @@
+/*
+ * Copyright (c) 2018, Red Hat, Inc. All rights reserved.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package org.openjdk.bench.java.util;
+
+import org.openjdk.jmh.annotations.Benchmark;
+import org.openjdk.jmh.annotations.BenchmarkMode;
+import org.openjdk.jmh.annotations.Mode;
+import org.openjdk.jmh.annotations.OutputTimeUnit;
+import org.openjdk.jmh.annotations.Param;
+import org.openjdk.jmh.annotations.Scope;
+import org.openjdk.jmh.annotations.Setup;
+import org.openjdk.jmh.annotations.State;
+
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.concurrent.ThreadLocalRandom;
+import java.util.concurrent.TimeUnit;
+import java.util.function.Supplier;
+import java.util.stream.IntStream;
+
+import static java.util.stream.Collectors.toMap;
+
+@BenchmarkMode(Mode.AverageTime)
+@OutputTimeUnit(TimeUnit.MILLISECONDS)
+@State(Scope.Thread)
+public class HashMapBench {
+    private Supplier<Map<Integer, Integer>> mapSupplier;
+    private Map<Integer, Integer> bigMapToAdd;
+
+    @Param("1000000")
+    private int size;
+
+    @Param
+    private MapType mapType;
+
+    public enum MapType {
+        HASH_MAP,
+        LINKED_HASH_MAP,
+    }
+
+    @Setup
+    public void setup() {
+        switch (mapType) {
+        case HASH_MAP:
+            mapSupplier = () -> new HashMap<>();
+            break;
+        case LINKED_HASH_MAP:
+            mapSupplier = () -> new LinkedHashMap<>();
+            break;
+        default:
+            throw new AssertionError();
+        }
+
+        ThreadLocalRandom rnd = ThreadLocalRandom.current();
+        this.bigMapToAdd = IntStream.range(0, size).boxed()
+            .collect(toMap(i -> 7 + i * 128, i -> rnd.nextInt()));
+    }
+
+    @Benchmark
+    public int putAllWithBigMapToNonEmptyMap() {
+        Map<Integer, Integer> map = mapSupplier.get();
+        map.put(-1, -1);
+        map.putAll(bigMapToAdd);
+        return map.size();
+    }
+
+    @Benchmark
+    public int putAllWithBigMapToEmptyMap() {
+        Map<Integer, Integer> map = mapSupplier.get();
+        map.putAll(bigMapToAdd);
+        return map.size();
+    }
+
+    @Benchmark
+    public int put() {
+        Map<Integer, Integer> map = mapSupplier.get();
+        for (int k : bigMapToAdd.keySet()) {
+            map.put(k, bigMapToAdd.get(k));
+        }
+        return map.size();
+    }
+}