In order to build man pages and the full docs (see the
--enable-full-docs configure option) Graphviz and Pandoc are required. Any recent versions
-should work. For reference, and subject to change, Oracle builds use
-Graphviz 9.0.0 and Pandoc 2.19.2.
+href="https://pandoc.org">Pandoc is required. For full docs also Graphviz is required. Any recent
+versions should work. For reference, and subject to change, Oracle
+builds use Graphviz 9.0.0 and Pandoc 2.19.2.
Running Configure
To build the JDK, you need a "configuration", which consists of a
directory where to store the build output, coupled with information
diff --git a/doc/building.md b/doc/building.md
index 99bc509dc70d0..04db6e94d1c12 100644
--- a/doc/building.md
+++ b/doc/building.md
@@ -680,9 +680,9 @@ At least version 3.2 of GNU Bash must be used.
### Graphviz and Pandoc
-In order to build the full docs (see the `--enable-full-docs`
-configure option) [Graphviz](https://www.graphviz.org) and
-[Pandoc](https://pandoc.org) are required. Any recent versions should
+In order to build man pages and the full docs (see the `--enable-full-docs`
+configure option) [Pandoc](https://pandoc.org) is required. For full docs also
+[Graphviz](https://www.graphviz.org) is required. Any recent versions should
work. For reference, and subject to change, Oracle builds use Graphviz
9.0.0 and Pandoc 2.19.2.
diff --git a/make/Images.gmk b/make/Images.gmk
index 5f987a2f71a7d..c5d0ef11b5d2e 100644
--- a/make/Images.gmk
+++ b/make/Images.gmk
@@ -29,6 +29,7 @@ include $(SPEC)
include MakeBase.gmk
include CopyFiles.gmk
+include DebugInfoUtils.gmk
include Execute.gmk
include Modules.gmk
include Utils.gmk
diff --git a/make/StaticLibs.gmk b/make/StaticLibs.gmk
index 78918c456eed9..cfca2a774113d 100644
--- a/make/StaticLibs.gmk
+++ b/make/StaticLibs.gmk
@@ -29,6 +29,7 @@ include $(SPEC)
include MakeBase.gmk
include CopyFiles.gmk
+include DebugInfoUtils.gmk
include Modules.gmk
include modules/LauncherCommon.gmk
diff --git a/make/autoconf/boot-jdk.m4 b/make/autoconf/boot-jdk.m4
index d729012ad6a6f..d39e6e75a94c1 100644
--- a/make/autoconf/boot-jdk.m4
+++ b/make/autoconf/boot-jdk.m4
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2011, 2023, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2011, 2024, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
@@ -470,7 +470,7 @@ AC_DEFUN_ONCE([BOOTJDK_SETUP_BOOT_JDK_ARGUMENTS],
# Maximum amount of heap memory.
JVM_HEAP_LIMIT_32="768"
# Running a 64 bit JVM allows for and requires a bigger heap
- JVM_HEAP_LIMIT_64="1600"
+ JVM_HEAP_LIMIT_64="2048"
JVM_HEAP_LIMIT_GLOBAL=`expr $MEMORY_SIZE / 2`
if test "$JVM_HEAP_LIMIT_GLOBAL" -lt "$JVM_HEAP_LIMIT_32"; then
JVM_HEAP_LIMIT_32=$JVM_HEAP_LIMIT_GLOBAL
diff --git a/make/autoconf/flags-cflags.m4 b/make/autoconf/flags-cflags.m4
index 57654514eb64b..f78ccfe376214 100644
--- a/make/autoconf/flags-cflags.m4
+++ b/make/autoconf/flags-cflags.m4
@@ -302,7 +302,7 @@ AC_DEFUN([FLAGS_SETUP_QUALITY_CHECKS],
AC_DEFUN([FLAGS_SETUP_OPTIMIZATION],
[
- if test "x$TOOLCHAIN_TYPE" = xgcc; then
+ if test "x$TOOLCHAIN_TYPE" = xgcc || test "x$TOOLCHAIN_TYPE" = xclang; then
C_O_FLAG_HIGHEST_JVM="-O3"
C_O_FLAG_HIGHEST="-O3"
C_O_FLAG_HI="-O3"
@@ -311,6 +311,13 @@ AC_DEFUN([FLAGS_SETUP_OPTIMIZATION],
C_O_FLAG_DEBUG="-O0"
C_O_FLAG_DEBUG_JVM="-O0"
C_O_FLAG_NONE="-O0"
+
+ if test "x$TOOLCHAIN_TYPE" = xclang && test "x$OPENJDK_TARGET_OS" = xaix; then
+ C_O_FLAG_HIGHEST_JVM="${C_O_FLAG_HIGHEST_JVM} -finline-functions"
+ C_O_FLAG_HIGHEST="${C_O_FLAG_HIGHEST} -finline-functions"
+ C_O_FLAG_HI="${C_O_FLAG_HI} -finline-functions"
+ fi
+
# -D_FORTIFY_SOURCE=2 hardening option needs optimization (at least -O1) enabled
# set for lower O-levels -U_FORTIFY_SOURCE to overwrite previous settings
if test "x$OPENJDK_TARGET_OS" = xlinux -a "x$DEBUG_LEVEL" = "xfastdebug"; then
@@ -331,21 +338,6 @@ AC_DEFUN([FLAGS_SETUP_OPTIMIZATION],
C_O_FLAG_DEBUG_JVM="${C_O_FLAG_DEBUG_JVM} ${DISABLE_FORTIFY_CFLAGS}"
C_O_FLAG_NONE="${C_O_FLAG_NONE} ${DISABLE_FORTIFY_CFLAGS}"
fi
- elif test "x$TOOLCHAIN_TYPE" = xclang; then
- if test "x$OPENJDK_TARGET_OS" = xaix; then
- C_O_FLAG_HIGHEST_JVM="-O3 -finline-functions"
- C_O_FLAG_HIGHEST="-O3 -finline-functions"
- C_O_FLAG_HI="-O3 -finline-functions"
- else
- C_O_FLAG_HIGHEST_JVM="-O3"
- C_O_FLAG_HIGHEST="-O3"
- C_O_FLAG_HI="-O3"
- fi
- C_O_FLAG_NORM="-O2"
- C_O_FLAG_DEBUG_JVM="-O0"
- C_O_FLAG_SIZE="-Os"
- C_O_FLAG_DEBUG="-O0"
- C_O_FLAG_NONE="-O0"
elif test "x$TOOLCHAIN_TYPE" = xmicrosoft; then
C_O_FLAG_HIGHEST_JVM="-O2 -Oy-"
C_O_FLAG_HIGHEST="-O2"
diff --git a/make/autoconf/jdk-options.m4 b/make/autoconf/jdk-options.m4
index 61638ce5a2c7f..c09f581688ca0 100644
--- a/make/autoconf/jdk-options.m4
+++ b/make/autoconf/jdk-options.m4
@@ -121,7 +121,7 @@ AC_DEFUN_ONCE([JDKOPT_SETUP_JDK_OPTIONS],
if test "x$DOT" != "x"; then
AC_MSG_RESULT([yes])
else
- AC_MSG_RESULT([no, cannot generate full docs])
+ AC_MSG_RESULT([no, cannot generate full docs or man pages])
FULL_DOCS_AVAILABLE=false
fi
@@ -129,7 +129,7 @@ AC_DEFUN_ONCE([JDKOPT_SETUP_JDK_OPTIONS],
if test "x$ENABLE_PANDOC" = "xtrue"; then
AC_MSG_RESULT([yes])
else
- AC_MSG_RESULT([no, cannot generate full docs])
+ AC_MSG_RESULT([no, cannot generate full docs or man pages])
FULL_DOCS_AVAILABLE=false
fi
diff --git a/make/common/DebugInfoUtils.gmk b/make/common/DebugInfoUtils.gmk
new file mode 100644
index 0000000000000..69d6c24b5e037
--- /dev/null
+++ b/make/common/DebugInfoUtils.gmk
@@ -0,0 +1,58 @@
+#
+# Copyright (c) 2024, Oracle and/or its affiliates. All rights reserved.
+# 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.
+#
+
+ifeq ($(_MAKEBASE_GMK), )
+ $(error You must include MakeBase.gmk prior to including DebugInfoUtils.gmk)
+endif
+
+################################################################################
+#
+# Common debuginfo utility functions
+#
+################################################################################
+
+################################################################################
+# Find native debuginfo files in a directory
+#
+# Param 1 - dir to find debuginfo files in
+FindDebuginfoFiles = \
+ $(wildcard $(addprefix $1/*, $(DEBUGINFO_SUFFIXES)) \
+ $(addprefix $1/*/*, $(DEBUGINFO_SUFFIXES)) \
+ $(addprefix $1/*/*/*, $(DEBUGINFO_SUFFIXES)))
+
+# Pick the correct debug info files to copy, either zipped or not.
+ifeq ($(ZIP_EXTERNAL_DEBUG_SYMBOLS), true)
+ DEBUGINFO_SUFFIXES += .diz
+else
+ DEBUGINFO_SUFFIXES := .debuginfo .pdb .map
+ # On Macosx, if debug symbols have not been zipped, find all files inside *.dSYM
+ # dirs.
+ ifeq ($(call isTargetOs, macosx), true)
+ $(call FillFindCache, \
+ $(SUPPORT_OUTPUTDIR)/modules_libs $(SUPPORT_OUTPUTDIR)/modules_cmds)
+ FindDebuginfoFiles = \
+ $(if $(wildcard $1), $(call containing, .dSYM/, $(call FindFiles, $1)))
+ endif
+endif
diff --git a/make/common/FileUtils.gmk b/make/common/FileUtils.gmk
index d546ab94a58f0..d3cc4872ebb8f 100644
--- a/make/common/FileUtils.gmk
+++ b/make/common/FileUtils.gmk
@@ -307,26 +307,3 @@ ifeq ($(DISABLE_CACHE_FIND), true)
else
FindFiles = $(CacheFindFiles)
endif
-
-# Find native debuginfo files in a directory
-#
-# Param 1 - dir to find debuginfo files in
-FindDebuginfoFiles = \
- $(wildcard $(addprefix $1/*, $(DEBUGINFO_SUFFIXES)) \
- $(addprefix $1/*/*, $(DEBUGINFO_SUFFIXES)) \
- $(addprefix $1/*/*/*, $(DEBUGINFO_SUFFIXES)))
-
-# Pick the correct debug info files to copy, either zipped or not.
-ifeq ($(ZIP_EXTERNAL_DEBUG_SYMBOLS), true)
- DEBUGINFO_SUFFIXES += .diz
-else
- DEBUGINFO_SUFFIXES := .debuginfo .pdb .map
- # On Macosx, if debug symbols have not been zipped, find all files inside *.dSYM
- # dirs.
- ifeq ($(call isTargetOs, macosx), true)
- $(call FillFindCache, \
- $(SUPPORT_OUTPUTDIR)/modules_libs $(SUPPORT_OUTPUTDIR)/modules_cmds)
- FindDebuginfoFiles = \
- $(if $(wildcard $1), $(call containing, .dSYM/, $(call FindFiles, $1)))
- endif
-endif
diff --git a/make/common/modules/LauncherCommon.gmk b/make/common/modules/LauncherCommon.gmk
index 77f39457b4c2d..98e110a0a86cf 100644
--- a/make/common/modules/LauncherCommon.gmk
+++ b/make/common/modules/LauncherCommon.gmk
@@ -192,9 +192,7 @@ ifeq ($(call isTargetOsType, unix)+$(MAKEFILE_PREFIX), true+Launcher)
MAN_FILES_MD := $(wildcard $(addsuffix /*.md, $(call FindModuleManDirs, $(MODULE))))
ifneq ($(MAN_FILES_MD), )
- ifeq ($(ENABLE_PANDOC), false)
- $(info Warning: pandoc not found. Not generating man pages)
- else
+ ifeq ($(ENABLE_PANDOC), true)
# Create dynamic man pages from markdown using pandoc. We need
# PANDOC_TROFF_MANPAGE_FILTER, a wrapper around
# PANDOC_TROFF_MANPAGE_FILTER_JAVASCRIPT. This is created by buildtools-jdk.
diff --git a/make/conf/version-numbers.conf b/make/conf/version-numbers.conf
index 055f9ca886618..383b7533dee5f 100644
--- a/make/conf/version-numbers.conf
+++ b/make/conf/version-numbers.conf
@@ -26,17 +26,17 @@
# Default version, product, and vendor information to use,
# unless overridden by configure
-DEFAULT_VERSION_FEATURE=24
+DEFAULT_VERSION_FEATURE=25
DEFAULT_VERSION_INTERIM=0
DEFAULT_VERSION_UPDATE=0
DEFAULT_VERSION_PATCH=0
DEFAULT_VERSION_EXTRA1=0
DEFAULT_VERSION_EXTRA2=0
DEFAULT_VERSION_EXTRA3=0
-DEFAULT_VERSION_DATE=2025-03-18
-DEFAULT_VERSION_CLASSFILE_MAJOR=68 # "`$EXPR $DEFAULT_VERSION_FEATURE + 44`"
+DEFAULT_VERSION_DATE=2025-09-16
+DEFAULT_VERSION_CLASSFILE_MAJOR=69 # "`$EXPR $DEFAULT_VERSION_FEATURE + 44`"
DEFAULT_VERSION_CLASSFILE_MINOR=0
DEFAULT_VERSION_DOCS_API_SINCE=11
-DEFAULT_ACCEPTABLE_BOOT_VERSIONS="23 24"
-DEFAULT_JDK_SOURCE_TARGET_VERSION=24
+DEFAULT_ACCEPTABLE_BOOT_VERSIONS="23 24 25"
+DEFAULT_JDK_SOURCE_TARGET_VERSION=25
DEFAULT_PROMOTED_VERSION_PRE=ea
diff --git a/make/hotspot/lib/JvmFeatures.gmk b/make/hotspot/lib/JvmFeatures.gmk
index b94031515f79e..09a48508effa8 100644
--- a/make/hotspot/lib/JvmFeatures.gmk
+++ b/make/hotspot/lib/JvmFeatures.gmk
@@ -174,6 +174,12 @@ ifeq ($(call check-jvm-feature, link-time-opt), true)
-fno-fat-lto-objects
JVM_LDFLAGS_FEATURES += $(CXX_O_FLAG_HIGHEST_JVM) -flto=auto \
-fuse-linker-plugin -fno-strict-aliasing
+ else ifeq ($(call isCompiler, clang), true)
+ JVM_CFLAGS_FEATURES += -flto -fno-strict-aliasing
+ ifeq ($(call isBuildOs, aix), true)
+ JVM_CFLAGS_FEATURES += -ffat-lto-objects
+ endif
+ JVM_LDFLAGS_FEATURES += $(CXX_O_FLAG_HIGHEST_JVM) -flto -fno-strict-aliasing
else ifeq ($(call isCompiler, microsoft), true)
JVM_CFLAGS_FEATURES += -GL
JVM_LDFLAGS_FEATURES += -LTCG:INCREMENTAL
diff --git a/make/ide/xcode/hotspot/CreateXcodeProject.gmk b/make/ide/xcode/hotspot/CreateXcodeProject.gmk
index db8f7f401eff4..1f92ba0716f1e 100644
--- a/make/ide/xcode/hotspot/CreateXcodeProject.gmk
+++ b/make/ide/xcode/hotspot/CreateXcodeProject.gmk
@@ -42,7 +42,7 @@ ifeq ($(call isTargetOs, macosx), true)
PROJECT_FILE_NAME := hotspot.xcodeproj
COMPILE_COMMAND_FILE := $(OUTPUTDIR)/compile_commands.json
- LINKER_FLAGS_FILE := $(MAKESUPPORT_OUTPUTDIR)/compile-commands/jvm-ldflags.txt
+ LINKER_FLAGS_FILE := $(MAKESUPPORT_OUTPUTDIR)/compile-commands/LIBRARY_hotspot_variant-server_libjvm_libjvm-ldflags.txt
$(eval $(call SetupJavaCompilation, BUILD_PROJECT_CREATOR, \
TARGET_RELEASE := $(TARGET_RELEASE_BOOTJDK), \
@@ -60,7 +60,7 @@ ifeq ($(call isTargetOs, macosx), true)
XCODE_PROJ_DEBUG_OPTION := -d
endif
- XCODE_PROJ_VARDEPS := $(WORKSPACE_ROOT) $(IDE_OUTPUTDIR) \
+ XCODE_PROJ_VARDEPS := $(TOPDIR) $(IDE_OUTPUTDIR) \
$(PROJECT_MAKER_DIR)/data $(COMPILE_COMMAND_FILE) $(LINKER_FLAGS_FILE)
XCODE_PROJ_VARDEPS_FILE := $(call DependOnVariable, XCODE_PROJ_VARDEPS, \
$(TOOLS_OUTPUTDIR)/xcodeproj.vardeps)
@@ -70,7 +70,7 @@ ifeq ($(call isTargetOs, macosx), true)
DEPS := $(BUILD_PROJECT_CREATOR) $(COMPILE_COMMAND_FILE) \
$(LINKER_FLAGS_FILE) $(XCODE_PROJ_VARDEPS_FILE), \
OUTPUT_DIR := $(TOOLS_OUTPUTDIR), \
- COMMAND := $(PROJECT_CREATOR_TOOL) $(WORKSPACE_ROOT) $(IDE_OUTPUTDIR) \
+ COMMAND := $(PROJECT_CREATOR_TOOL) $(TOPDIR) $(IDE_OUTPUTDIR) \
$(PROJECT_MAKER_DIR)/data $(COMPILE_COMMAND_FILE) \
$(LINKER_FLAGS_FILE) $(XCODE_PROJ_DEBUG_OPTION), \
))
diff --git a/src/hotspot/cpu/aarch64/macroAssembler_aarch64.cpp b/src/hotspot/cpu/aarch64/macroAssembler_aarch64.cpp
index ce71d3a22621d..a836d71205e95 100644
--- a/src/hotspot/cpu/aarch64/macroAssembler_aarch64.cpp
+++ b/src/hotspot/cpu/aarch64/macroAssembler_aarch64.cpp
@@ -5305,7 +5305,7 @@ MacroAssembler::KlassDecodeMode MacroAssembler::klass_decode_mode() {
if (operand_valid_for_logical_immediate(
/*is32*/false, (uint64_t)CompressedKlassPointers::base())) {
const size_t range = CompressedKlassPointers::klass_range_end() - CompressedKlassPointers::base();
- const uint64_t range_mask = (1ULL << log2i(range)) - 1;
+ const uint64_t range_mask = right_n_bits(log2i_ceil(range));
if (((uint64_t)CompressedKlassPointers::base() & range_mask) == 0) {
return (_klass_decode_mode = KlassDecodeXor);
}
diff --git a/src/hotspot/cpu/ppc/assembler_ppc.hpp b/src/hotspot/cpu/ppc/assembler_ppc.hpp
index d2584cc1af31d..b99235371aa27 100644
--- a/src/hotspot/cpu/ppc/assembler_ppc.hpp
+++ b/src/hotspot/cpu/ppc/assembler_ppc.hpp
@@ -506,6 +506,9 @@ class Assembler : public AbstractAssembler {
LFSU_OPCODE = (49u << OPCODE_SHIFT | 00u << 1),
LFSX_OPCODE = (31u << OPCODE_SHIFT | 535u << 1),
+ LFIWAX_OPCODE = (31u << OPCODE_SHIFT | 855u << 1),
+ LFIWZX_OPCODE = (31u << OPCODE_SHIFT | 887u << 1),
+
STFD_OPCODE = (54u << OPCODE_SHIFT | 00u << 1),
STFDU_OPCODE = (55u << OPCODE_SHIFT | 00u << 1),
STFDX_OPCODE = (31u << OPCODE_SHIFT | 727u << 1),
@@ -513,6 +516,8 @@ class Assembler : public AbstractAssembler {
STFSU_OPCODE = (53u << OPCODE_SHIFT | 00u << 1),
STFSX_OPCODE = (31u << OPCODE_SHIFT | 663u << 1),
+ STFIWX_OPCODE = (31u << OPCODE_SHIFT | 983u << 1),
+
FSQRT_OPCODE = (63u << OPCODE_SHIFT | 22u << 1), // A-FORM
FSQRTS_OPCODE = (59u << OPCODE_SHIFT | 22u << 1), // A-FORM
@@ -555,6 +560,10 @@ class Assembler : public AbstractAssembler {
XVDIVSP_OPCODE = (60u << OPCODE_SHIFT | 88u << 3),
XXBRD_OPCODE = (60u << OPCODE_SHIFT | 475u << 2 | 23u << 16), // XX2-FORM
XXBRW_OPCODE = (60u << OPCODE_SHIFT | 475u << 2 | 15u << 16), // XX2-FORM
+ XVCVHPSP_OPCODE= (60u << OPCODE_SHIFT | 475u << 2 | 24u << 16), // XX2-FORM
+ XVCVSPHP_OPCODE= (60u << OPCODE_SHIFT | 475u << 2 | 25u << 16), // XX2-FORM
+ XSCVHPDP_OPCODE= (60u << OPCODE_SHIFT | 347u << 2 | 16u << 16), // XX2-FORM
+ XSCVDPHP_OPCODE= (60u << OPCODE_SHIFT | 347u << 2 | 17u << 16), // XX2-FORM
XXPERM_OPCODE = (60u << OPCODE_SHIFT | 26u << 3),
XXSEL_OPCODE = (60u << OPCODE_SHIFT | 3u << 4),
XXSPLTIB_OPCODE= (60u << OPCODE_SHIFT | 360u << 1),
@@ -2076,6 +2085,9 @@ class Assembler : public AbstractAssembler {
inline void lfdu( FloatRegister d, int si16, Register a);
inline void lfdx( FloatRegister d, Register a, Register b);
+ inline void lfiwax(FloatRegister d, Register a, Register b);
+ inline void lfiwzx(FloatRegister d, Register a, Register b);
+
// PPC 1, section 4.6.3 Floating-Point Store Instructions
inline void stfs( FloatRegister s, int si16, Register a);
inline void stfsu( FloatRegister s, int si16, Register a);
@@ -2084,6 +2096,8 @@ class Assembler : public AbstractAssembler {
inline void stfdu( FloatRegister s, int si16, Register a);
inline void stfdx( FloatRegister s, Register a, Register b);
+ inline void stfiwx(FloatRegister s, Register a, Register b);
+
// PPC 1, section 4.6.4 Floating-Point Move Instructions
inline void fmr( FloatRegister d, FloatRegister b);
inline void fmr_( FloatRegister d, FloatRegister b);
@@ -2348,6 +2362,10 @@ class Assembler : public AbstractAssembler {
inline void xxleqv( VectorSRegister d, VectorSRegister a, VectorSRegister b);
inline void xxbrd( VectorSRegister d, VectorSRegister b);
inline void xxbrw( VectorSRegister d, VectorSRegister b);
+ inline void xvcvhpsp( VectorSRegister d, VectorSRegister b);
+ inline void xvcvsphp( VectorSRegister d, VectorSRegister b);
+ inline void xscvhpdp( VectorSRegister d, VectorSRegister b);
+ inline void xscvdphp( VectorSRegister d, VectorSRegister b);
inline void xxland( VectorSRegister d, VectorSRegister a, VectorSRegister b);
inline void xxsel( VectorSRegister d, VectorSRegister a, VectorSRegister b, VectorSRegister c);
inline void xxspltib( VectorSRegister d, int ui8);
@@ -2474,10 +2492,13 @@ class Assembler : public AbstractAssembler {
inline void lfsx( FloatRegister d, Register b);
inline void lfd( FloatRegister d, int si16);
inline void lfdx( FloatRegister d, Register b);
+ inline void lfiwax(FloatRegister d, Register b);
+ inline void lfiwzx(FloatRegister d, Register b);
inline void stfs( FloatRegister s, int si16);
inline void stfsx( FloatRegister s, Register b);
inline void stfd( FloatRegister s, int si16);
inline void stfdx( FloatRegister s, Register b);
+ inline void stfiwx(FloatRegister s, Register b);
inline void lvebx( VectorRegister d, Register s2);
inline void lvehx( VectorRegister d, Register s2);
inline void lvewx( VectorRegister d, Register s2);
diff --git a/src/hotspot/cpu/ppc/assembler_ppc.inline.hpp b/src/hotspot/cpu/ppc/assembler_ppc.inline.hpp
index 07de57babfa86..eae75da9fbff3 100644
--- a/src/hotspot/cpu/ppc/assembler_ppc.inline.hpp
+++ b/src/hotspot/cpu/ppc/assembler_ppc.inline.hpp
@@ -741,6 +741,9 @@ inline void Assembler::lfd( FloatRegister d, int si16, Register a) { emit_int3
inline void Assembler::lfdu(FloatRegister d, int si16, Register a) { emit_int32( LFDU_OPCODE | frt(d) | ra(a) | simm(si16,16)); }
inline void Assembler::lfdx(FloatRegister d, Register a, Register b) { emit_int32( LFDX_OPCODE | frt(d) | ra0mem(a) | rb(b)); }
+inline void Assembler::lfiwax(FloatRegister d, Register a, Register b) { emit_int32( LFIWAX_OPCODE | frt(d) | ra0mem(a) |rb(b)); }
+inline void Assembler::lfiwzx(FloatRegister d, Register a, Register b) { emit_int32( LFIWZX_OPCODE | frt(d) | ra0mem(a) |rb(b)); }
+
// PPC 1, section 4.6.3 Floating-Point Store Instructions
// Use ra0mem instead of ra in some instructions below.
inline void Assembler::stfs( FloatRegister s, int si16, Register a) { emit_int32( STFS_OPCODE | frs(s) | ra0mem(a) | simm(si16,16)); }
@@ -750,6 +753,8 @@ inline void Assembler::stfd( FloatRegister s, int si16, Register a) { emit_int3
inline void Assembler::stfdu(FloatRegister s, int si16, Register a) { emit_int32( STFDU_OPCODE | frs(s) | ra(a) | simm(si16,16)); }
inline void Assembler::stfdx(FloatRegister s, Register a, Register b){ emit_int32( STFDX_OPCODE | frs(s) | ra0mem(a) | rb(b)); }
+inline void Assembler::stfiwx(FloatRegister s, Register a, Register b) { emit_int32( STFIWX_OPCODE | frs(s) | ra0mem(a) |rb(b)); }
+
// PPC 1, section 4.6.4 Floating-Point Move Instructions
inline void Assembler::fmr( FloatRegister d, FloatRegister b) { emit_int32( FMR_OPCODE | frt(d) | frb(b) | rc(0)); }
inline void Assembler::fmr_(FloatRegister d, FloatRegister b) { emit_int32( FMR_OPCODE | frt(d) | frb(b) | rc(1)); }
@@ -871,6 +876,10 @@ inline void Assembler::xxlxor( VectorSRegister d, VectorSRegister a, VectorSReg
inline void Assembler::xxleqv( VectorSRegister d, VectorSRegister a, VectorSRegister b) { emit_int32( XXLEQV_OPCODE | vsrt(d) | vsra(a) | vsrb(b)); }
inline void Assembler::xxbrd( VectorSRegister d, VectorSRegister b) { emit_int32( XXBRD_OPCODE | vsrt(d) | vsrb(b) ); }
inline void Assembler::xxbrw( VectorSRegister d, VectorSRegister b) { emit_int32( XXBRW_OPCODE | vsrt(d) | vsrb(b) ); }
+inline void Assembler::xvcvhpsp(VectorSRegister d, VectorSRegister b) { emit_int32( XVCVHPSP_OPCODE | vsrt(d) | vsrb(b) ); }
+inline void Assembler::xvcvsphp(VectorSRegister d, VectorSRegister b) { emit_int32( XVCVSPHP_OPCODE | vsrt(d) | vsrb(b) ); }
+inline void Assembler::xscvhpdp(VectorSRegister d, VectorSRegister b) { emit_int32( XSCVHPDP_OPCODE | vsrt(d) | vsrb(b) ); }
+inline void Assembler::xscvdphp(VectorSRegister d, VectorSRegister b) { emit_int32( XSCVDPHP_OPCODE | vsrt(d) | vsrb(b) ); }
inline void Assembler::xvdivsp( VectorSRegister d, VectorSRegister a, VectorSRegister b) { emit_int32( XVDIVSP_OPCODE | vsrt(d) | vsra(a) | vsrb(b)); }
inline void Assembler::xvdivdp( VectorSRegister d, VectorSRegister a, VectorSRegister b) { emit_int32( XVDIVDP_OPCODE | vsrt(d) | vsra(a) | vsrb(b)); }
inline void Assembler::xvabssp( VectorSRegister d, VectorSRegister b) { emit_int32( XVABSSP_OPCODE | vsrt(d) | vsrb(b)); }
@@ -1150,12 +1159,17 @@ inline void Assembler::lfsx(FloatRegister d, Register b) { emit_int32( LFSX_OPCO
inline void Assembler::lfd( FloatRegister d, int si16) { emit_int32( LFD_OPCODE | frt(d) | simm(si16,16)); }
inline void Assembler::lfdx(FloatRegister d, Register b) { emit_int32( LFDX_OPCODE | frt(d) | rb(b)); }
+inline void Assembler::lfiwax(FloatRegister d, Register b) { emit_int32( LFIWAX_OPCODE | frt(d) | rb(b)); }
+inline void Assembler::lfiwzx(FloatRegister d, Register b) { emit_int32( LFIWZX_OPCODE | frt(d) | rb(b)); }
+
// ra0 version
inline void Assembler::stfs( FloatRegister s, int si16) { emit_int32( STFS_OPCODE | frs(s) | simm(si16, 16)); }
inline void Assembler::stfsx(FloatRegister s, Register b) { emit_int32( STFSX_OPCODE | frs(s) | rb(b)); }
inline void Assembler::stfd( FloatRegister s, int si16) { emit_int32( STFD_OPCODE | frs(s) | simm(si16, 16)); }
inline void Assembler::stfdx(FloatRegister s, Register b) { emit_int32( STFDX_OPCODE | frs(s) | rb(b)); }
+inline void Assembler::stfiwx(FloatRegister s, Register b) { emit_int32( STFIWX_OPCODE | frs(s) |rb(b)); }
+
// ra0 version
inline void Assembler::lvebx( VectorRegister d, Register s2) { emit_int32( LVEBX_OPCODE | vrt(d) | rb(s2)); }
inline void Assembler::lvehx( VectorRegister d, Register s2) { emit_int32( LVEHX_OPCODE | vrt(d) | rb(s2)); }
diff --git a/src/hotspot/cpu/ppc/c1_LIRAssembler_ppc.cpp b/src/hotspot/cpu/ppc/c1_LIRAssembler_ppc.cpp
index b8a271ffc3b46..af426935b2f2b 100644
--- a/src/hotspot/cpu/ppc/c1_LIRAssembler_ppc.cpp
+++ b/src/hotspot/cpu/ppc/c1_LIRAssembler_ppc.cpp
@@ -1713,7 +1713,7 @@ void LIR_Assembler::arith_op(LIR_Code code, LIR_Opr left, LIR_Opr right, LIR_Opr
}
-void LIR_Assembler::intrinsic_op(LIR_Code code, LIR_Opr value, LIR_Opr thread, LIR_Opr dest, LIR_Op* op) {
+void LIR_Assembler::intrinsic_op(LIR_Code code, LIR_Opr value, LIR_Opr tmp, LIR_Opr dest, LIR_Op* op) {
switch (code) {
case lir_sqrt: {
__ fsqrt(dest->as_double_reg(), value->as_double_reg());
@@ -1723,6 +1723,14 @@ void LIR_Assembler::intrinsic_op(LIR_Code code, LIR_Opr value, LIR_Opr thread, L
__ fabs(dest->as_double_reg(), value->as_double_reg());
break;
}
+ case lir_f2hf: {
+ __ f2hf(dest.as_register(), value.as_float_reg(), tmp.as_float_reg());
+ break;
+ }
+ case lir_hf2f: {
+ __ hf2f(dest->as_float_reg(), value.as_register());
+ break;
+ }
default: {
ShouldNotReachHere();
break;
diff --git a/src/hotspot/cpu/ppc/c1_LIRGenerator_ppc.cpp b/src/hotspot/cpu/ppc/c1_LIRGenerator_ppc.cpp
index 7973e9d05459e..4e0908d6e61b5 100644
--- a/src/hotspot/cpu/ppc/c1_LIRGenerator_ppc.cpp
+++ b/src/hotspot/cpu/ppc/c1_LIRGenerator_ppc.cpp
@@ -690,6 +690,25 @@ void LIRGenerator::do_MathIntrinsic(Intrinsic* x) {
__ abs(value.result(), dst, LIR_OprFact::illegalOpr);
break;
}
+ case vmIntrinsics::_floatToFloat16: {
+ assert(x->number_of_arguments() == 1, "wrong type");
+ LIRItem value(x->argument_at(0), this);
+ value.load_item();
+ LIR_Opr dst = rlock_result(x);
+ LIR_Opr tmp = new_register(T_FLOAT);
+ // f2hf treats tmp as live_in. Workaround: initialize to some value.
+ __ move(LIR_OprFact::floatConst(-0.0), tmp); // just to satisfy LinearScan
+ __ f2hf(value.result(), dst, tmp);
+ break;
+ }
+ case vmIntrinsics::_float16ToFloat: {
+ assert(x->number_of_arguments() == 1, "wrong type");
+ LIRItem value(x->argument_at(0), this);
+ value.load_item();
+ LIR_Opr dst = rlock_result(x);
+ __ hf2f(value.result(), dst, LIR_OprFact::illegalOpr);
+ break;
+ }
case vmIntrinsics::_dsqrt:
case vmIntrinsics::_dsqrt_strict: {
if (VM_Version::has_fsqrt()) {
diff --git a/src/hotspot/cpu/ppc/macroAssembler_ppc.hpp b/src/hotspot/cpu/ppc/macroAssembler_ppc.hpp
index 237024fa05eaf..3e82c1c678578 100644
--- a/src/hotspot/cpu/ppc/macroAssembler_ppc.hpp
+++ b/src/hotspot/cpu/ppc/macroAssembler_ppc.hpp
@@ -186,6 +186,9 @@ class MacroAssembler: public Assembler {
void inline set_cmpu3(Register dst, bool treat_unordered_like_less);
// Branch-free implementation to convert !=0 to 1.
void inline normalize_bool(Register dst, Register temp = R0, bool is_64bit = false);
+ // Convert between half precision float encoded into a short and a float in a FloatRegister.
+ void inline f2hf(Register dst, FloatRegister src, FloatRegister tmp);
+ void inline hf2f(FloatRegister dst, Register src);
inline void pd_patch_instruction(address branch, address target, const char* file, int line);
NOT_PRODUCT(static void pd_print_patched_instruction(address branch);)
diff --git a/src/hotspot/cpu/ppc/macroAssembler_ppc.inline.hpp b/src/hotspot/cpu/ppc/macroAssembler_ppc.inline.hpp
index f98ad592388e7..6f5cd8fbd9671 100644
--- a/src/hotspot/cpu/ppc/macroAssembler_ppc.inline.hpp
+++ b/src/hotspot/cpu/ppc/macroAssembler_ppc.inline.hpp
@@ -297,6 +297,20 @@ inline void MacroAssembler::normalize_bool(Register dst, Register temp, bool is_
}
}
+inline void MacroAssembler::f2hf(Register dst, FloatRegister src, FloatRegister tmp) {
+ // Single precision values in FloatRegisters use double precision format on PPC64.
+ xscvdphp(tmp->to_vsr(), src->to_vsr());
+ mffprd(dst, tmp);
+ // Make it a proper short (sign-extended).
+ extsh(dst, dst);
+}
+
+inline void MacroAssembler::hf2f(FloatRegister dst, Register src) {
+ mtfprd(dst, src);
+ // Single precision values in FloatRegisters use double precision format on PPC64.
+ xscvhpdp(dst->to_vsr(), dst->to_vsr());
+}
+
// Convenience bc_far versions
inline void MacroAssembler::blt_far(ConditionRegister crx, Label& L, int optimize) { MacroAssembler::bc_far(bcondCRbiIs1, bi0(crx, less), L, optimize); }
inline void MacroAssembler::bgt_far(ConditionRegister crx, Label& L, int optimize) { MacroAssembler::bc_far(bcondCRbiIs1, bi0(crx, greater), L, optimize); }
diff --git a/src/hotspot/cpu/ppc/ppc.ad b/src/hotspot/cpu/ppc/ppc.ad
index cfed8674e898e..549ae0740e2e1 100644
--- a/src/hotspot/cpu/ppc/ppc.ad
+++ b/src/hotspot/cpu/ppc/ppc.ad
@@ -2077,6 +2077,9 @@ bool Matcher::match_rule_supported(int opcode) {
case Op_PopCountI:
case Op_PopCountL:
return (UsePopCountInstruction && VM_Version::has_popcntw());
+ case Op_ConvF2HF:
+ case Op_ConvHF2F:
+ return VM_Version::supports_float16();
case Op_AddVB:
case Op_AddVS:
@@ -11245,6 +11248,34 @@ instruct convF2D_reg(regD dst, regF src) %{
ins_pipe(pipe_class_default);
%}
+instruct convF2HF_reg_reg(iRegIdst dst, regF src, regF tmp) %{
+ match(Set dst (ConvF2HF src));
+ effect(TEMP tmp);
+ ins_cost(3 * DEFAULT_COST);
+ size(12);
+ format %{ "xscvdphp $tmp, $src\t# convert to half precision\n\t"
+ "mffprd $dst, $tmp\t# move result from $tmp to $dst\n\t"
+ "extsh $dst, $dst\t# make it a proper short"
+ %}
+ ins_encode %{
+ __ f2hf($dst$$Register, $src$$FloatRegister, $tmp$$FloatRegister);
+ %}
+ ins_pipe(pipe_class_default);
+%}
+
+instruct convHF2F_reg_reg(regF dst, iRegIsrc src) %{
+ match(Set dst (ConvHF2F src));
+ ins_cost(2 * DEFAULT_COST);
+ size(8);
+ format %{ "mtfprd $dst, $src\t# move source from $src to $dst\n\t"
+ "xscvhpdp $dst, $dst\t# convert from half precision"
+ %}
+ ins_encode %{
+ __ hf2f($dst$$FloatRegister, $src$$Register);
+ %}
+ ins_pipe(pipe_class_default);
+%}
+
//----------Control Flow Instructions------------------------------------------
// Compare Instructions
diff --git a/src/hotspot/cpu/ppc/stubGenerator_ppc.cpp b/src/hotspot/cpu/ppc/stubGenerator_ppc.cpp
index 9f2b668b9c834..00d2e206bf9b5 100644
--- a/src/hotspot/cpu/ppc/stubGenerator_ppc.cpp
+++ b/src/hotspot/cpu/ppc/stubGenerator_ppc.cpp
@@ -3451,6 +3451,24 @@ class StubGenerator: public StubCodeGenerator {
return start;
}
+ address generate_floatToFloat16() {
+ __ align(CodeEntryAlignment);
+ StubCodeMark mark(this, "StubRoutines", "floatToFloat16");
+ address start = __ function_entry();
+ __ f2hf(R3_RET, F1_ARG1, F0);
+ __ blr();
+ return start;
+ }
+
+ address generate_float16ToFloat() {
+ __ align(CodeEntryAlignment);
+ StubCodeMark mark(this, "StubRoutines", "float16ToFloat");
+ address start = __ function_entry();
+ __ hf2f(F1_RET, R3_ARG1);
+ __ blr();
+ return start;
+ }
+
address generate_method_entry_barrier() {
__ align(CodeEntryAlignment);
StubCodeMark mark(this, "StubRoutines", "nmethod_entry_barrier");
@@ -4678,6 +4696,12 @@ address generate_lookup_secondary_supers_table_stub(u1 super_klass_index) {
StubRoutines::_crc32c_table_addr = StubRoutines::ppc::generate_crc_constants(REVERSE_CRC32C_POLY);
StubRoutines::_updateBytesCRC32C = generate_CRC32_updateBytes(true);
}
+
+ if (VM_Version::supports_float16()) {
+ // For results consistency both intrinsics should be enabled.
+ StubRoutines::_hf2f = generate_float16ToFloat();
+ StubRoutines::_f2hf = generate_floatToFloat16();
+ }
}
void generate_continuation_stubs() {
diff --git a/src/hotspot/cpu/ppc/templateInterpreterGenerator_ppc.cpp b/src/hotspot/cpu/ppc/templateInterpreterGenerator_ppc.cpp
index e320349583ddc..9147dfc1677ab 100644
--- a/src/hotspot/cpu/ppc/templateInterpreterGenerator_ppc.cpp
+++ b/src/hotspot/cpu/ppc/templateInterpreterGenerator_ppc.cpp
@@ -1155,6 +1155,44 @@ address TemplateInterpreterGenerator::generate_math_entry(AbstractInterpreter::M
return entry;
}
+address TemplateInterpreterGenerator::generate_Float_floatToFloat16_entry() {
+ if (!VM_Version::supports_float16()) return nullptr;
+
+ address entry = __ pc();
+
+ __ lfs(F1, Interpreter::stackElementSize, R15_esp);
+ __ f2hf(R3_RET, F1, F0);
+
+ // Restore caller sp for c2i case (from compiled) and for resized sender frame (from interpreted).
+ __ resize_frame_absolute(R21_sender_SP, R11_scratch1, R0);
+ __ blr();
+
+ __ flush();
+
+ return entry;
+}
+
+address TemplateInterpreterGenerator::generate_Float_float16ToFloat_entry() {
+ if (!VM_Version::supports_float16()) return nullptr;
+
+ address entry = __ pc();
+
+ // Note: Could also use:
+ //__ li(R3, Interpreter::stackElementSize);
+ //__ lfiwax(F1_RET, R15_esp, R3); // short stored as 32 bit integer
+ //__ xscvhpdp(F1_RET->to_vsr(), F1_RET->to_vsr());
+ __ lwa(R3, Interpreter::stackElementSize, R15_esp);
+ __ hf2f(F1_RET, R3);
+
+ // Restore caller sp for c2i case (from compiled) and for resized sender frame (from interpreted).
+ __ resize_frame_absolute(R21_sender_SP, R11_scratch1, R0);
+ __ blr();
+
+ __ flush();
+
+ return entry;
+}
+
void TemplateInterpreterGenerator::bang_stack_shadow_pages(bool native_call) {
// Quick & dirty stack overflow checking: bang the stack & handle trap.
// Note that we do the banging after the frame is setup, since the exception
@@ -1965,8 +2003,6 @@ address TemplateInterpreterGenerator::generate_Float_intBitsToFloat_entry() { re
address TemplateInterpreterGenerator::generate_Float_floatToRawIntBits_entry() { return nullptr; }
address TemplateInterpreterGenerator::generate_Double_longBitsToDouble_entry() { return nullptr; }
address TemplateInterpreterGenerator::generate_Double_doubleToRawLongBits_entry() { return nullptr; }
-address TemplateInterpreterGenerator::generate_Float_float16ToFloat_entry() { return nullptr; }
-address TemplateInterpreterGenerator::generate_Float_floatToFloat16_entry() { return nullptr; }
// =============================================================================
// Exceptions
diff --git a/src/hotspot/cpu/ppc/vm_version_ppc.hpp b/src/hotspot/cpu/ppc/vm_version_ppc.hpp
index 9d8e4b88ee2e5..25dd07c966859 100644
--- a/src/hotspot/cpu/ppc/vm_version_ppc.hpp
+++ b/src/hotspot/cpu/ppc/vm_version_ppc.hpp
@@ -97,6 +97,8 @@ class VM_Version: public Abstract_VM_Version {
constexpr static bool supports_recursive_lightweight_locking() { return true; }
constexpr static bool supports_secondary_supers_table() { return true; }
+ static bool supports_float16() { return PowerArchitecturePPC64 >= 9; }
+
static bool is_determine_features_test_running() { return _is_determine_features_test_running; }
// CPU instruction support
static bool has_fsqrt() { return (_features & fsqrt_m) != 0; }
diff --git a/src/hotspot/cpu/riscv/macroAssembler_riscv.cpp b/src/hotspot/cpu/riscv/macroAssembler_riscv.cpp
index 44b806834f987..07c5a940a5091 100644
--- a/src/hotspot/cpu/riscv/macroAssembler_riscv.cpp
+++ b/src/hotspot/cpu/riscv/macroAssembler_riscv.cpp
@@ -785,7 +785,7 @@ void MacroAssembler::emit_static_call_stub() {
// Jump to the entry point of the c2i stub.
int32_t offset = 0;
- movptr(t1, 0, offset, t0); // lui + lui + slli + add
+ movptr2(t1, 0, offset, t0); // lui + lui + slli + add
jr(t1, offset);
}
diff --git a/src/hotspot/os/aix/os_aix.cpp b/src/hotspot/os/aix/os_aix.cpp
index 44b9571e1024c..26627c2f8fb3b 100644
--- a/src/hotspot/os/aix/os_aix.cpp
+++ b/src/hotspot/os/aix/os_aix.cpp
@@ -856,9 +856,9 @@ void os::pd_start_thread(Thread* thread) {
void os::free_thread(OSThread* osthread) {
assert(osthread != nullptr, "osthread not set");
- // We are told to free resources of the argument thread,
- // but we can only really operate on the current thread.
- assert(Thread::current()->osthread() == osthread,
+ // We are told to free resources of the argument thread, but we can only really operate
+ // on the current thread. The current thread may be already detached at this point.
+ assert(Thread::current_or_null() == nullptr || Thread::current()->osthread() == osthread,
"os::free_thread but not current thread");
// Restore caller's signal mask
diff --git a/src/hotspot/os/bsd/gc/z/zPhysicalMemoryBacking_bsd.cpp b/src/hotspot/os/bsd/gc/z/zPhysicalMemoryBacking_bsd.cpp
index 2e56c092a79b5..16835c8303931 100644
--- a/src/hotspot/os/bsd/gc/z/zPhysicalMemoryBacking_bsd.cpp
+++ b/src/hotspot/os/bsd/gc/z/zPhysicalMemoryBacking_bsd.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019, 2023, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2019, 2024, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -79,7 +79,7 @@ ZPhysicalMemoryBacking::ZPhysicalMemoryBacking(size_t max_capacity)
_initialized(false) {
// Reserve address space for backing memory
- _base = (uintptr_t)os::reserve_memory(max_capacity);
+ _base = (uintptr_t)os::reserve_memory(max_capacity, false, mtJavaHeap);
if (_base == 0) {
// Failed
ZInitialize::error("Failed to reserve address space for backing memory");
diff --git a/src/hotspot/os/bsd/os_bsd.cpp b/src/hotspot/os/bsd/os_bsd.cpp
index 8185797563c7d..5db846275d4b4 100644
--- a/src/hotspot/os/bsd/os_bsd.cpp
+++ b/src/hotspot/os/bsd/os_bsd.cpp
@@ -763,9 +763,9 @@ void os::pd_start_thread(Thread* thread) {
void os::free_thread(OSThread* osthread) {
assert(osthread != nullptr, "osthread not set");
- // We are told to free resources of the argument thread,
- // but we can only really operate on the current thread.
- assert(Thread::current()->osthread() == osthread,
+ // We are told to free resources of the argument thread, but we can only really operate
+ // on the current thread. The current thread may be already detached at this point.
+ assert(Thread::current_or_null() == nullptr || Thread::current()->osthread() == osthread,
"os::free_thread but not current thread");
// Restore caller's signal mask
diff --git a/src/hotspot/os/linux/os_linux.cpp b/src/hotspot/os/linux/os_linux.cpp
index d85120f3f1dc3..ed832f37bdf40 100644
--- a/src/hotspot/os/linux/os_linux.cpp
+++ b/src/hotspot/os/linux/os_linux.cpp
@@ -1190,9 +1190,9 @@ void os::pd_start_thread(Thread* thread) {
void os::free_thread(OSThread* osthread) {
assert(osthread != nullptr, "osthread not set");
- // We are told to free resources of the argument thread,
- // but we can only really operate on the current thread.
- assert(Thread::current()->osthread() == osthread,
+ // We are told to free resources of the argument thread, but we can only really operate
+ // on the current thread. The current thread may be already detached at this point.
+ assert(Thread::current_or_null() == nullptr || Thread::current()->osthread() == osthread,
"os::free_thread but not current thread");
#ifdef ASSERT
@@ -4582,7 +4582,7 @@ static void workaround_expand_exec_shield_cs_limit() {
*/
char* hint = (char*)(os::Linux::initial_thread_stack_bottom() -
(StackOverflow::stack_guard_zone_size() + page_size));
- char* codebuf = os::attempt_reserve_memory_at(hint, page_size);
+ char* codebuf = os::attempt_reserve_memory_at(hint, page_size, false, mtThread);
if (codebuf == nullptr) {
// JDK-8197429: There may be a stack gap of one megabyte between
@@ -4590,15 +4590,13 @@ static void workaround_expand_exec_shield_cs_limit() {
// Linux kernel workaround for CVE-2017-1000364. If we failed to
// map our codebuf, try again at an address one megabyte lower.
hint -= 1 * M;
- codebuf = os::attempt_reserve_memory_at(hint, page_size);
+ codebuf = os::attempt_reserve_memory_at(hint, page_size, false, mtThread);
}
if ((codebuf == nullptr) || (!os::commit_memory(codebuf, page_size, true))) {
return; // No matter, we tried, best effort.
}
- MemTracker::record_virtual_memory_tag((address)codebuf, mtInternal);
-
log_info(os)("[CS limit NX emulation work-around, exec code at: %p]", codebuf);
// Some code to exec: the 'ret' instruction
diff --git a/src/hotspot/os/windows/os_windows.cpp b/src/hotspot/os/windows/os_windows.cpp
index 849fc0c29f051..afd8fe01752b0 100644
--- a/src/hotspot/os/windows/os_windows.cpp
+++ b/src/hotspot/os/windows/os_windows.cpp
@@ -788,9 +788,9 @@ bool os::create_thread(Thread* thread, ThreadType thr_type,
void os::free_thread(OSThread* osthread) {
assert(osthread != nullptr, "osthread not set");
- // We are told to free resources of the argument thread,
- // but we can only really operate on the current thread.
- assert(Thread::current()->osthread() == osthread,
+ // We are told to free resources of the argument thread, but we can only really operate
+ // on the current thread. The current thread may be already detached at this point.
+ assert(Thread::current_or_null() == nullptr || Thread::current()->osthread() == osthread,
"os::free_thread but not current thread");
CloseHandle(osthread->thread_handle());
diff --git a/src/hotspot/os_cpu/bsd_aarch64/os_bsd_aarch64.cpp b/src/hotspot/os_cpu/bsd_aarch64/os_bsd_aarch64.cpp
index 7702dbd17ad69..1e3602d08f428 100644
--- a/src/hotspot/os_cpu/bsd_aarch64/os_bsd_aarch64.cpp
+++ b/src/hotspot/os_cpu/bsd_aarch64/os_bsd_aarch64.cpp
@@ -501,6 +501,7 @@ static inline void atomic_copy64(const volatile void *src, volatile void *dst) {
}
extern "C" {
+ // needs local assembler label '1:' to avoid trouble when using linktime optimization
int SpinPause() {
// We don't use StubRoutines::aarch64::spin_wait stub in order to
// avoid a costly call to os::current_thread_enable_wx() on MacOS.
@@ -523,14 +524,14 @@ extern "C" {
// to entry for case SpinWait::NOP
" add %[d], %[d], %[o] \n"
" br %[d] \n"
- " b SpinPause_return \n" // case SpinWait::NONE (-1)
+ " b 1f \n" // case SpinWait::NONE (-1)
" nop \n" // padding
" nop \n" // case SpinWait::NOP ( 0)
- " b SpinPause_return \n"
+ " b 1f \n"
" isb \n" // case SpinWait::ISB ( 1)
- " b SpinPause_return \n"
+ " b 1f \n"
" yield \n" // case SpinWait::YIELD ( 2)
- "SpinPause_return: \n"
+ "1: \n"
: [d]"=&r"(br_dst)
: [o]"r"(off)
: "memory");
diff --git a/src/hotspot/share/cds/archiveUtils.cpp b/src/hotspot/share/cds/archiveUtils.cpp
index 4d717879e0f65..3530fcff2b3f9 100644
--- a/src/hotspot/share/cds/archiveUtils.cpp
+++ b/src/hotspot/share/cds/archiveUtils.cpp
@@ -45,6 +45,7 @@
#include "utilities/debug.hpp"
#include "utilities/formatBuffer.hpp"
#include "utilities/globalDefinitions.hpp"
+#include "utilities/spinYield.hpp"
CHeapBitMap* ArchivePtrMarker::_ptrmap = nullptr;
CHeapBitMap* ArchivePtrMarker::_rw_ptrmap = nullptr;
@@ -399,3 +400,162 @@ size_t HeapRootSegments::segment_offset(size_t seg_idx) {
return _base_offset + seg_idx * _max_size_in_bytes;
}
+ArchiveWorkers::ArchiveWorkers() :
+ _end_semaphore(0),
+ _num_workers(max_workers()),
+ _started_workers(0),
+ _finish_tokens(0),
+ _state(UNUSED),
+ _task(nullptr) {}
+
+ArchiveWorkers::~ArchiveWorkers() {
+ assert(Atomic::load(&_state) != WORKING, "Should not be working");
+}
+
+int ArchiveWorkers::max_workers() {
+ // The pool is used for short-lived bursty tasks. We do not want to spend
+ // too much time creating and waking up threads unnecessarily. Plus, we do
+ // not want to overwhelm large machines. This is why we want to be very
+ // conservative about the number of workers actually needed.
+ return MAX2(0, log2i_graceful(os::active_processor_count()));
+}
+
+bool ArchiveWorkers::is_parallel() {
+ return _num_workers > 0;
+}
+
+void ArchiveWorkers::start_worker_if_needed() {
+ while (true) {
+ int cur = Atomic::load(&_started_workers);
+ if (cur >= _num_workers) {
+ return;
+ }
+ if (Atomic::cmpxchg(&_started_workers, cur, cur + 1, memory_order_relaxed) == cur) {
+ new ArchiveWorkerThread(this);
+ return;
+ }
+ }
+}
+
+void ArchiveWorkers::run_task(ArchiveWorkerTask* task) {
+ assert(Atomic::load(&_state) == UNUSED, "Should be unused yet");
+ assert(Atomic::load(&_task) == nullptr, "Should not have running tasks");
+ Atomic::store(&_state, WORKING);
+
+ if (is_parallel()) {
+ run_task_multi(task);
+ } else {
+ run_task_single(task);
+ }
+
+ assert(Atomic::load(&_state) == WORKING, "Should be working");
+ Atomic::store(&_state, SHUTDOWN);
+}
+
+void ArchiveWorkers::run_task_single(ArchiveWorkerTask* task) {
+ // Single thread needs no chunking.
+ task->configure_max_chunks(1);
+
+ // Execute the task ourselves, as there are no workers.
+ task->work(0, 1);
+}
+
+void ArchiveWorkers::run_task_multi(ArchiveWorkerTask* task) {
+ // Multiple threads can work with multiple chunks.
+ task->configure_max_chunks(_num_workers * CHUNKS_PER_WORKER);
+
+ // Set up the run and publish the task. Issue one additional finish token
+ // to cover the semaphore shutdown path, see below.
+ Atomic::store(&_finish_tokens, _num_workers + 1);
+ Atomic::release_store(&_task, task);
+
+ // Kick off pool startup by starting a single worker, and proceed
+ // immediately to executing the task locally.
+ start_worker_if_needed();
+
+ // Execute the task ourselves, while workers are catching up.
+ // This allows us to hide parts of task handoff latency.
+ task->run();
+
+ // Done executing task locally, wait for any remaining workers to complete.
+ // Once all workers report, we can proceed to termination. To do this safely,
+ // we need to make sure every worker has left. A spin-wait alone would suffice,
+ // but we do not want to burn cycles on it. A semaphore alone would not be safe,
+ // since workers can still be inside it as we proceed from wait here. So we block
+ // on semaphore first, and then spin-wait for all workers to terminate.
+ _end_semaphore.wait();
+ SpinYield spin;
+ while (Atomic::load(&_finish_tokens) != 0) {
+ spin.wait();
+ }
+
+ OrderAccess::fence();
+
+ assert(Atomic::load(&_finish_tokens) == 0, "All tokens are consumed");
+}
+
+void ArchiveWorkers::run_as_worker() {
+ assert(is_parallel(), "Should be in parallel mode");
+
+ ArchiveWorkerTask* task = Atomic::load_acquire(&_task);
+ task->run();
+
+ // All work done in threads should be visible to caller.
+ OrderAccess::fence();
+
+ // Signal the pool the work is complete, and we are exiting.
+ // Worker cannot do anything else with the pool after this.
+ if (Atomic::sub(&_finish_tokens, 1, memory_order_relaxed) == 1) {
+ // Last worker leaving. Notify the pool it can unblock to spin-wait.
+ // Then consume the last token and leave.
+ _end_semaphore.signal();
+ int last = Atomic::sub(&_finish_tokens, 1, memory_order_relaxed);
+ assert(last == 0, "Should be");
+ }
+}
+
+void ArchiveWorkerTask::run() {
+ while (true) {
+ int chunk = Atomic::load(&_chunk);
+ if (chunk >= _max_chunks) {
+ return;
+ }
+ if (Atomic::cmpxchg(&_chunk, chunk, chunk + 1, memory_order_relaxed) == chunk) {
+ assert(0 <= chunk && chunk < _max_chunks, "Sanity");
+ work(chunk, _max_chunks);
+ }
+ }
+}
+
+void ArchiveWorkerTask::configure_max_chunks(int max_chunks) {
+ if (_max_chunks == 0) {
+ _max_chunks = max_chunks;
+ }
+}
+
+ArchiveWorkerThread::ArchiveWorkerThread(ArchiveWorkers* pool) : NamedThread(), _pool(pool) {
+ set_name("ArchiveWorkerThread");
+ if (os::create_thread(this, os::os_thread)) {
+ os::start_thread(this);
+ } else {
+ vm_exit_during_initialization("Unable to create archive worker",
+ os::native_thread_creation_failed_msg());
+ }
+}
+
+void ArchiveWorkerThread::run() {
+ // Avalanche startup: each worker starts two others.
+ _pool->start_worker_if_needed();
+ _pool->start_worker_if_needed();
+
+ // Set ourselves up.
+ os::set_priority(this, NearMaxPriority);
+
+ // Work.
+ _pool->run_as_worker();
+}
+
+void ArchiveWorkerThread::post_run() {
+ this->NamedThread::post_run();
+ delete this;
+}
diff --git a/src/hotspot/share/cds/archiveUtils.hpp b/src/hotspot/share/cds/archiveUtils.hpp
index 723332c40e569..a10117e9f9aff 100644
--- a/src/hotspot/share/cds/archiveUtils.hpp
+++ b/src/hotspot/share/cds/archiveUtils.hpp
@@ -33,6 +33,8 @@
#include "utilities/bitMap.hpp"
#include "utilities/exceptions.hpp"
#include "utilities/macros.hpp"
+#include "runtime/nonJavaThread.hpp"
+#include "runtime/semaphore.hpp"
class BootstrapInfo;
class ReservedSpace;
@@ -344,4 +346,74 @@ class HeapRootSegments {
HeapRootSegments& operator=(const HeapRootSegments&) = default;
};
+class ArchiveWorkers;
+
+// A task to be worked on by worker threads
+class ArchiveWorkerTask : public CHeapObj {
+ friend class ArchiveWorkers;
+private:
+ const char* _name;
+ int _max_chunks;
+ volatile int _chunk;
+
+ void run();
+
+ void configure_max_chunks(int max_chunks);
+
+public:
+ ArchiveWorkerTask(const char* name) :
+ _name(name), _max_chunks(0), _chunk(0) {}
+ const char* name() const { return _name; }
+ virtual void work(int chunk, int max_chunks) = 0;
+};
+
+class ArchiveWorkerThread : public NamedThread {
+ friend class ArchiveWorkers;
+private:
+ ArchiveWorkers* const _pool;
+
+ void post_run() override;
+
+public:
+ ArchiveWorkerThread(ArchiveWorkers* pool);
+ const char* type_name() const override { return "Archive Worker Thread"; }
+ void run() override;
+};
+
+// Special archive workers. The goal for this implementation is to startup fast,
+// distribute spiky workloads efficiently, and shutdown immediately after use.
+// This makes the implementation quite different from the normal GC worker pool.
+class ArchiveWorkers : public StackObj {
+ friend class ArchiveWorkerThread;
+private:
+ // Target number of chunks per worker. This should be large enough to even
+ // out work imbalance, and small enough to keep bookkeeping overheads low.
+ static constexpr int CHUNKS_PER_WORKER = 4;
+ static int max_workers();
+
+ Semaphore _end_semaphore;
+
+ int _num_workers;
+ int _started_workers;
+ int _finish_tokens;
+
+ typedef enum { UNUSED, WORKING, SHUTDOWN } State;
+ volatile State _state;
+
+ ArchiveWorkerTask* _task;
+
+ void run_as_worker();
+ void start_worker_if_needed();
+
+ void run_task_single(ArchiveWorkerTask* task);
+ void run_task_multi(ArchiveWorkerTask* task);
+
+ bool is_parallel();
+
+public:
+ ArchiveWorkers();
+ ~ArchiveWorkers();
+ void run_task(ArchiveWorkerTask* task);
+};
+
#endif // SHARE_CDS_ARCHIVEUTILS_HPP
diff --git a/src/hotspot/share/cds/cds_globals.hpp b/src/hotspot/share/cds/cds_globals.hpp
index 38f5d8f46a62b..811740cfbcbc0 100644
--- a/src/hotspot/share/cds/cds_globals.hpp
+++ b/src/hotspot/share/cds/cds_globals.hpp
@@ -117,7 +117,10 @@
product(bool, AOTClassLinking, false, \
"Load/link all archived classes for the boot/platform/app " \
"loaders before application main") \
-
+ \
+ product(bool, AOTCacheParallelRelocation, true, DIAGNOSTIC, \
+ "Use parallel relocation code to speed up startup.") \
+ \
// end of CDS_FLAGS
DECLARE_FLAGS(CDS_FLAGS)
diff --git a/src/hotspot/share/cds/filemap.cpp b/src/hotspot/share/cds/filemap.cpp
index 91a2a57dee51b..594d8817322fd 100644
--- a/src/hotspot/share/cds/filemap.cpp
+++ b/src/hotspot/share/cds/filemap.cpp
@@ -1975,6 +1975,32 @@ char* FileMapInfo::map_bitmap_region() {
return bitmap_base;
}
+class SharedDataRelocationTask : public ArchiveWorkerTask {
+private:
+ BitMapView* const _rw_bm;
+ BitMapView* const _ro_bm;
+ SharedDataRelocator* const _rw_reloc;
+ SharedDataRelocator* const _ro_reloc;
+
+public:
+ SharedDataRelocationTask(BitMapView* rw_bm, BitMapView* ro_bm, SharedDataRelocator* rw_reloc, SharedDataRelocator* ro_reloc) :
+ ArchiveWorkerTask("Shared Data Relocation"),
+ _rw_bm(rw_bm), _ro_bm(ro_bm), _rw_reloc(rw_reloc), _ro_reloc(ro_reloc) {}
+
+ void work(int chunk, int max_chunks) override {
+ work_on(chunk, max_chunks, _rw_bm, _rw_reloc);
+ work_on(chunk, max_chunks, _ro_bm, _ro_reloc);
+ }
+
+ void work_on(int chunk, int max_chunks, BitMapView* bm, SharedDataRelocator* reloc) {
+ BitMap::idx_t size = bm->size();
+ BitMap::idx_t start = MIN2(size, size * chunk / max_chunks);
+ BitMap::idx_t end = MIN2(size, size * (chunk + 1) / max_chunks);
+ assert(end > start, "Sanity: no empty slices");
+ bm->iterate(reloc, start, end);
+ }
+};
+
// This is called when we cannot map the archive at the requested[ base address (usually 0x800000000).
// We relocate all pointers in the 2 core regions (ro, rw).
bool FileMapInfo::relocate_pointers_in_core_regions(intx addr_delta) {
@@ -2013,8 +2039,15 @@ bool FileMapInfo::relocate_pointers_in_core_regions(intx addr_delta) {
valid_new_base, valid_new_end, addr_delta);
SharedDataRelocator ro_patcher((address*)ro_patch_base + header()->ro_ptrmap_start_pos(), (address*)ro_patch_end, valid_old_base, valid_old_end,
valid_new_base, valid_new_end, addr_delta);
- rw_ptrmap.iterate(&rw_patcher);
- ro_ptrmap.iterate(&ro_patcher);
+
+ if (AOTCacheParallelRelocation) {
+ ArchiveWorkers workers;
+ SharedDataRelocationTask task(&rw_ptrmap, &ro_ptrmap, &rw_patcher, &ro_patcher);
+ workers.run_task(&task);
+ } else {
+ rw_ptrmap.iterate(&rw_patcher);
+ ro_ptrmap.iterate(&ro_patcher);
+ }
// The MetaspaceShared::bm region will be unmapped in MetaspaceShared::initialize_shared_spaces().
@@ -2698,8 +2731,8 @@ ClassFileStream* FileMapInfo::get_stream_from_class_loader(Handle class_loader,
const char* file_name,
TRAPS) {
JavaValue result(T_OBJECT);
- TempNewSymbol class_name_sym = SymbolTable::new_symbol(file_name);
- Handle ext_class_name = java_lang_String::externalize_classname(class_name_sym, CHECK_NULL);
+ oop class_name = java_lang_String::create_oop_from_str(file_name, THREAD);
+ Handle h_class_name = Handle(THREAD, class_name);
// byte[] ClassLoader.getResourceAsByteArray(String name)
JavaCalls::call_virtual(&result,
@@ -2707,7 +2740,7 @@ ClassFileStream* FileMapInfo::get_stream_from_class_loader(Handle class_loader,
vmClasses::ClassLoader_klass(),
vmSymbols::getResourceAsByteArray_name(),
vmSymbols::getResourceAsByteArray_signature(),
- ext_class_name,
+ h_class_name,
CHECK_NULL);
assert(result.get_type() == T_OBJECT, "just checking");
oop obj = result.get_oop();
diff --git a/src/hotspot/share/cds/metaspaceShared.cpp b/src/hotspot/share/cds/metaspaceShared.cpp
index ba17ccddb5219..f21b9c9060d50 100644
--- a/src/hotspot/share/cds/metaspaceShared.cpp
+++ b/src/hotspot/share/cds/metaspaceShared.cpp
@@ -281,7 +281,7 @@ void MetaspaceShared::initialize_for_static_dump() {
SharedBaseAddress = (size_t)_requested_base_address;
size_t symbol_rs_size = LP64_ONLY(3 * G) NOT_LP64(128 * M);
- _symbol_rs = ReservedSpace(symbol_rs_size);
+ _symbol_rs = ReservedSpace(symbol_rs_size, mtClassShared);
if (!_symbol_rs.is_reserved()) {
log_error(cds)("Unable to reserve memory for symbols: " SIZE_FORMAT " bytes.", symbol_rs_size);
MetaspaceShared::unrecoverable_writing_error();
diff --git a/src/hotspot/share/cds/runTimeClassInfo.cpp b/src/hotspot/share/cds/runTimeClassInfo.cpp
index 0acd89b5bce62..e2d41cd1de261 100644
--- a/src/hotspot/share/cds/runTimeClassInfo.cpp
+++ b/src/hotspot/share/cds/runTimeClassInfo.cpp
@@ -76,10 +76,13 @@ void RunTimeClassInfo::init(DumpTimeClassInfo& info) {
}
InstanceKlass* RunTimeClassInfo::klass() const {
- if (ArchiveBuilder::is_active() && ArchiveBuilder::current()->is_in_buffer_space((address)this)) {
- return ArchiveBuilder::current()->offset_to_buffered(_klass_offset);
- } else {
+ if (MetaspaceShared::is_in_shared_metaspace(this)) {
+ // is inside a mmaped CDS archive.
return ArchiveUtils::offset_to_archived_address(_klass_offset);
+ } else {
+ // is a temporary copy of a RunTimeClassInfo that's being initialized
+ // by the ArchiveBuilder.
+ return ArchiveBuilder::current()->offset_to_buffered(_klass_offset);
}
}
diff --git a/src/hotspot/share/classfile/classFileParser.cpp b/src/hotspot/share/classfile/classFileParser.cpp
index f0586cd7bcc32..a26831cd78328 100644
--- a/src/hotspot/share/classfile/classFileParser.cpp
+++ b/src/hotspot/share/classfile/classFileParser.cpp
@@ -153,6 +153,8 @@
#define JAVA_24_VERSION 68
+#define JAVA_25_VERSION 69
+
void ClassFileParser::set_class_bad_constant_seen(short bad_constant) {
assert((bad_constant == JVM_CONSTANT_Module ||
bad_constant == JVM_CONSTANT_Package) && _major_version >= JAVA_9_VERSION,
diff --git a/src/hotspot/share/gc/g1/g1CollectedHeap.cpp b/src/hotspot/share/gc/g1/g1CollectedHeap.cpp
index daf7eb5371baf..188ce354dd552 100644
--- a/src/hotspot/share/gc/g1/g1CollectedHeap.cpp
+++ b/src/hotspot/share/gc/g1/g1CollectedHeap.cpp
@@ -86,6 +86,7 @@
#include "gc/shared/isGCActiveMark.hpp"
#include "gc/shared/locationPrinter.inline.hpp"
#include "gc/shared/oopStorageParState.hpp"
+#include "gc/shared/partialArrayState.hpp"
#include "gc/shared/referenceProcessor.inline.hpp"
#include "gc/shared/suspendibleThreadSet.hpp"
#include "gc/shared/taskqueue.inline.hpp"
@@ -1165,6 +1166,7 @@ G1CollectedHeap::G1CollectedHeap() :
_cm_thread(nullptr),
_cr(nullptr),
_task_queues(nullptr),
+ _partial_array_state_manager(nullptr),
_ref_processor_stw(nullptr),
_is_alive_closure_stw(this),
_is_subject_to_discovery_stw(this),
@@ -1198,9 +1200,13 @@ G1CollectedHeap::G1CollectedHeap() :
_task_queues->register_queue(i, q);
}
+ _partial_array_state_manager = new PartialArrayStateManager(n_queues);
+
_gc_tracer_stw->initialize();
+}
- guarantee(_task_queues != nullptr, "task_queues allocation failure.");
+PartialArrayStateManager* G1CollectedHeap::partial_array_state_manager() const {
+ return _partial_array_state_manager;
}
G1RegionToSpaceMapper* G1CollectedHeap::create_aux_memory_mapper(const char* description,
diff --git a/src/hotspot/share/gc/g1/g1CollectedHeap.hpp b/src/hotspot/share/gc/g1/g1CollectedHeap.hpp
index 0f8bf9ffd2b4f..1b840392769cd 100644
--- a/src/hotspot/share/gc/g1/g1CollectedHeap.hpp
+++ b/src/hotspot/share/gc/g1/g1CollectedHeap.hpp
@@ -82,6 +82,7 @@ class GCMemoryManager;
class G1HeapRegion;
class MemoryPool;
class nmethod;
+class PartialArrayStateManager;
class ReferenceProcessor;
class STWGCTimer;
class WorkerThreads;
@@ -807,8 +808,9 @@ class G1CollectedHeap : public CollectedHeap {
// The concurrent refiner.
G1ConcurrentRefine* _cr;
- // The parallel task queues
- G1ScannerTasksQueueSet *_task_queues;
+ // Reusable parallel task queues and partial array manager.
+ G1ScannerTasksQueueSet* _task_queues;
+ PartialArrayStateManager* _partial_array_state_manager;
// ("Weak") Reference processing support.
//
@@ -874,6 +876,8 @@ class G1CollectedHeap : public CollectedHeap {
G1ScannerTasksQueueSet* task_queues() const;
G1ScannerTasksQueue* task_queue(uint i) const;
+ PartialArrayStateManager* partial_array_state_manager() const;
+
// Create a G1CollectedHeap.
// Must call the initialize method afterwards.
// May not return if something goes wrong.
diff --git a/src/hotspot/share/gc/g1/g1GCPhaseTimes.cpp b/src/hotspot/share/gc/g1/g1GCPhaseTimes.cpp
index 9e48a16018e30..4ec708ae09392 100644
--- a/src/hotspot/share/gc/g1/g1GCPhaseTimes.cpp
+++ b/src/hotspot/share/gc/g1/g1GCPhaseTimes.cpp
@@ -105,6 +105,7 @@ G1GCPhaseTimes::G1GCPhaseTimes(STWGCTimer* gc_timer, uint max_gc_threads) :
_gc_par_phases[UpdateDerivedPointers] = new WorkerDataArray("UpdateDerivedPointers", "Update Derived Pointers (ms):", max_gc_threads);
#endif
_gc_par_phases[EagerlyReclaimHumongousObjects] = new WorkerDataArray("EagerlyReclaimHumongousObjects", "Eagerly Reclaim Humongous Objects (ms):", max_gc_threads);
+ _gc_par_phases[ResetPartialArrayStateManager] = new WorkerDataArray("ResetPartialArrayStateManager", "Reset Partial Array State Manager (ms):", max_gc_threads);
_gc_par_phases[ProcessEvacuationFailedRegions] = new WorkerDataArray("ProcessEvacuationFailedRegions", "Process Evacuation Failed Regions (ms):", max_gc_threads);
_gc_par_phases[ScanHR]->create_thread_work_items("Scanned Cards:", ScanHRScannedCards);
@@ -517,6 +518,7 @@ double G1GCPhaseTimes::print_post_evacuate_collection_set(bool evacuation_failed
debug_phase(_gc_par_phases[UpdateDerivedPointers], 1);
#endif
debug_phase(_gc_par_phases[EagerlyReclaimHumongousObjects], 1);
+ trace_phase(_gc_par_phases[ResetPartialArrayStateManager]);
if (G1CollectedHeap::heap()->should_sample_collection_set_candidates()) {
debug_phase(_gc_par_phases[SampleCollectionSetCandidates], 1);
diff --git a/src/hotspot/share/gc/g1/g1GCPhaseTimes.hpp b/src/hotspot/share/gc/g1/g1GCPhaseTimes.hpp
index a54ef431abd2b..f3bc0efafb929 100644
--- a/src/hotspot/share/gc/g1/g1GCPhaseTimes.hpp
+++ b/src/hotspot/share/gc/g1/g1GCPhaseTimes.hpp
@@ -87,6 +87,7 @@ class G1GCPhaseTimes : public CHeapObj {
UpdateDerivedPointers,
#endif
EagerlyReclaimHumongousObjects,
+ ResetPartialArrayStateManager,
ProcessEvacuationFailedRegions,
ResetMarkingState,
NoteStartOfMark,
diff --git a/src/hotspot/share/gc/g1/g1ParScanThreadState.cpp b/src/hotspot/share/gc/g1/g1ParScanThreadState.cpp
index ad924b2fad49f..f3b7e87bc784b 100644
--- a/src/hotspot/share/gc/g1/g1ParScanThreadState.cpp
+++ b/src/hotspot/share/gc/g1/g1ParScanThreadState.cpp
@@ -61,8 +61,7 @@ G1ParScanThreadState::G1ParScanThreadState(G1CollectedHeap* g1h,
uint worker_id,
uint num_workers,
G1CollectionSet* collection_set,
- G1EvacFailureRegions* evac_failure_regions,
- PartialArrayStateAllocator* pas_allocator)
+ G1EvacFailureRegions* evac_failure_regions)
: _g1h(g1h),
_task_queue(g1h->task_queue(worker_id)),
_rdc_local_qset(rdcqs),
@@ -81,7 +80,7 @@ G1ParScanThreadState::G1ParScanThreadState(G1CollectedHeap* g1h,
_surviving_young_words(nullptr),
_surviving_words_length(collection_set->young_region_length() + 1),
_old_gen_is_full(false),
- _partial_array_state_allocator(pas_allocator),
+ _partial_array_state_allocator(g1h->partial_array_state_manager()),
_partial_array_stepper(num_workers, ParGCArrayScanChunk),
_string_dedup_requests(),
_max_num_optional_regions(collection_set->optional_region_length()),
@@ -254,7 +253,7 @@ void G1ParScanThreadState::do_partial_array(PartialArrayState* state) {
checked_cast(step._index),
checked_cast(step._index + _partial_array_stepper.chunk_size()));
// Release reference to the state, now that we're done with it.
- _partial_array_state_allocator->release(_worker_id, state);
+ _partial_array_state_allocator.release(state);
}
MAYBE_INLINE_EVACUATION
@@ -277,11 +276,10 @@ void G1ParScanThreadState::start_partial_objarray(G1HeapRegionAttr dest_attr,
assert(((array_length - step._index) % _partial_array_stepper.chunk_size()) == 0,
"invariant");
PartialArrayState* state =
- _partial_array_state_allocator->allocate(_worker_id,
- from_obj, to_obj,
- step._index,
- array_length,
- step._ncreate);
+ _partial_array_state_allocator.allocate(from_obj, to_obj,
+ step._index,
+ array_length,
+ step._ncreate);
for (uint i = 0; i < step._ncreate; ++i) {
push_on_queue(ScannerTask(state));
}
@@ -601,8 +599,7 @@ G1ParScanThreadState* G1ParScanThreadStateSet::state_for_worker(uint worker_id)
worker_id,
_num_workers,
_collection_set,
- _evac_failure_regions,
- &_partial_array_state_allocator);
+ _evac_failure_regions);
}
return _states[worker_id];
}
@@ -732,8 +729,7 @@ G1ParScanThreadStateSet::G1ParScanThreadStateSet(G1CollectedHeap* g1h,
_surviving_young_words_total(NEW_C_HEAP_ARRAY(size_t, collection_set->young_region_length() + 1, mtGC)),
_num_workers(num_workers),
_flushed(false),
- _evac_failure_regions(evac_failure_regions),
- _partial_array_state_allocator(num_workers)
+ _evac_failure_regions(evac_failure_regions)
{
for (uint i = 0; i < num_workers; ++i) {
_states[i] = nullptr;
diff --git a/src/hotspot/share/gc/g1/g1ParScanThreadState.hpp b/src/hotspot/share/gc/g1/g1ParScanThreadState.hpp
index f61f993f0280f..27aa29ee30c98 100644
--- a/src/hotspot/share/gc/g1/g1ParScanThreadState.hpp
+++ b/src/hotspot/share/gc/g1/g1ParScanThreadState.hpp
@@ -84,7 +84,7 @@ class G1ParScanThreadState : public CHeapObj {
// Indicates whether in the last generation (old) there is no more space
// available for allocation.
bool _old_gen_is_full;
- PartialArrayStateAllocator* _partial_array_state_allocator;
+ PartialArrayStateAllocator _partial_array_state_allocator;
PartialArrayTaskStepper _partial_array_stepper;
StringDedup::Requests _string_dedup_requests;
@@ -124,8 +124,7 @@ class G1ParScanThreadState : public CHeapObj {
uint worker_id,
uint num_workers,
G1CollectionSet* collection_set,
- G1EvacFailureRegions* evac_failure_regions,
- PartialArrayStateAllocator* partial_array_state_allocator);
+ G1EvacFailureRegions* evac_failure_regions);
virtual ~G1ParScanThreadState();
void set_ref_discoverer(ReferenceDiscoverer* rd) { _scanner.set_ref_discoverer(rd); }
@@ -247,7 +246,6 @@ class G1ParScanThreadStateSet : public StackObj {
uint _num_workers;
bool _flushed;
G1EvacFailureRegions* _evac_failure_regions;
- PartialArrayStateAllocator _partial_array_state_allocator;
public:
G1ParScanThreadStateSet(G1CollectedHeap* g1h,
diff --git a/src/hotspot/share/gc/g1/g1YoungGCPostEvacuateTasks.cpp b/src/hotspot/share/gc/g1/g1YoungGCPostEvacuateTasks.cpp
index 1d76a44f8f887..c72dcc9661821 100644
--- a/src/hotspot/share/gc/g1/g1YoungGCPostEvacuateTasks.cpp
+++ b/src/hotspot/share/gc/g1/g1YoungGCPostEvacuateTasks.cpp
@@ -42,6 +42,7 @@
#include "gc/g1/g1RemSet.hpp"
#include "gc/g1/g1YoungGCPostEvacuateTasks.hpp"
#include "gc/shared/bufferNode.hpp"
+#include "gc/shared/partialArrayState.hpp"
#include "jfr/jfrEvents.hpp"
#include "oops/access.inline.hpp"
#include "oops/compressedOops.inline.hpp"
@@ -944,6 +945,25 @@ class G1PostEvacuateCollectionSetCleanupTask2::ResizeTLABsTask : public G1Abstra
}
};
+class G1PostEvacuateCollectionSetCleanupTask2::ResetPartialArrayStateManagerTask
+ : public G1AbstractSubTask
+{
+public:
+ ResetPartialArrayStateManagerTask()
+ : G1AbstractSubTask(G1GCPhaseTimes::ResetPartialArrayStateManager)
+ {}
+
+ double worker_cost() const override {
+ return AlmostNoWork;
+ }
+
+ void do_work(uint worker_id) override {
+ // This must be in phase2 cleanup, after phase1 has destroyed all of the
+ // associated allocators.
+ G1CollectedHeap::heap()->partial_array_state_manager()->reset();
+ }
+};
+
G1PostEvacuateCollectionSetCleanupTask2::G1PostEvacuateCollectionSetCleanupTask2(G1ParScanThreadStateSet* per_thread_states,
G1EvacInfo* evacuation_info,
G1EvacFailureRegions* evac_failure_regions) :
@@ -955,6 +975,7 @@ G1PostEvacuateCollectionSetCleanupTask2::G1PostEvacuateCollectionSetCleanupTask2
if (G1CollectedHeap::heap()->has_humongous_reclaim_candidates()) {
add_serial_task(new EagerlyReclaimHumongousObjectsTask());
}
+ add_serial_task(new ResetPartialArrayStateManagerTask());
if (evac_failure_regions->has_regions_evac_failed()) {
add_parallel_task(new ProcessEvacuationFailedRegionsTask(evac_failure_regions));
diff --git a/src/hotspot/share/gc/g1/g1YoungGCPostEvacuateTasks.hpp b/src/hotspot/share/gc/g1/g1YoungGCPostEvacuateTasks.hpp
index 96eeaf27de19c..ad850af2eaceb 100644
--- a/src/hotspot/share/gc/g1/g1YoungGCPostEvacuateTasks.hpp
+++ b/src/hotspot/share/gc/g1/g1YoungGCPostEvacuateTasks.hpp
@@ -58,6 +58,7 @@ class G1PostEvacuateCollectionSetCleanupTask1 : public G1BatchedTask {
// - Redirty Logged Cards
// - Free Collection Set
// - Resize TLABs
+// - Reset the reusable PartialArrayStateManager.
class G1PostEvacuateCollectionSetCleanupTask2 : public G1BatchedTask {
class EagerlyReclaimHumongousObjectsTask;
#if COMPILER2_OR_JVMCI
@@ -68,6 +69,7 @@ class G1PostEvacuateCollectionSetCleanupTask2 : public G1BatchedTask {
class RedirtyLoggedCardsTask;
class FreeCollectionSetTask;
class ResizeTLABsTask;
+ class ResetPartialArrayStateManagerTask;
public:
G1PostEvacuateCollectionSetCleanupTask2(G1ParScanThreadStateSet* per_thread_states,
diff --git a/src/hotspot/share/gc/parallel/objectStartArray.cpp b/src/hotspot/share/gc/parallel/objectStartArray.cpp
index ef9de7abfd771..2a0f12ec70e72 100644
--- a/src/hotspot/share/gc/parallel/objectStartArray.cpp
+++ b/src/hotspot/share/gc/parallel/objectStartArray.cpp
@@ -47,11 +47,10 @@ void ObjectStartArray::initialize(MemRegion reserved_region) {
// Do not use large-pages for the backing store. The one large page region
// will be used for the heap proper.
- ReservedSpace backing_store(bytes_to_reserve);
+ ReservedSpace backing_store(bytes_to_reserve, mtGC);
if (!backing_store.is_reserved()) {
vm_exit_during_initialization("Could not reserve space for ObjectStartArray");
}
- MemTracker::record_virtual_memory_tag(backing_store.base(), mtGC);
// We do not commit any memory initially
_virtual_space.initialize(backing_store);
diff --git a/src/hotspot/share/gc/parallel/psPromotionManager.cpp b/src/hotspot/share/gc/parallel/psPromotionManager.cpp
index c740b1488d7b7..525285471c7d9 100644
--- a/src/hotspot/share/gc/parallel/psPromotionManager.cpp
+++ b/src/hotspot/share/gc/parallel/psPromotionManager.cpp
@@ -51,7 +51,7 @@ PSPromotionManager::PSScannerTasksQueueSet* PSPromotionManager::_stack_array_dep
PreservedMarksSet* PSPromotionManager::_preserved_marks_set = nullptr;
PSOldGen* PSPromotionManager::_old_gen = nullptr;
MutableSpace* PSPromotionManager::_young_space = nullptr;
-PartialArrayStateAllocator* PSPromotionManager::_partial_array_state_allocator = nullptr;
+PartialArrayStateManager* PSPromotionManager::_partial_array_state_manager = nullptr;
void PSPromotionManager::initialize() {
ParallelScavengeHeap* heap = ParallelScavengeHeap::heap();
@@ -61,21 +61,20 @@ void PSPromotionManager::initialize() {
const uint promotion_manager_num = ParallelGCThreads;
+ assert(_partial_array_state_manager == nullptr, "Attempt to initialize twice");
+ _partial_array_state_manager
+ = new PartialArrayStateManager(promotion_manager_num);
+
// To prevent false sharing, we pad the PSPromotionManagers
// and make sure that the first instance starts at a cache line.
assert(_manager_array == nullptr, "Attempt to initialize twice");
_manager_array = PaddedArray::create_unfreeable(promotion_manager_num);
- assert(_partial_array_state_allocator == nullptr, "Attempt to initialize twice");
- _partial_array_state_allocator
- = new PartialArrayStateAllocator(ParallelGCThreads);
-
- _stack_array_depth = new PSScannerTasksQueueSet(ParallelGCThreads);
+ _stack_array_depth = new PSScannerTasksQueueSet(promotion_manager_num);
// Create and register the PSPromotionManager(s) for the worker threads.
for(uint i=0; iregister_queue(i, _manager_array[i].claimed_stack_depth());
- _manager_array[i]._partial_array_state_allocator_index = i;
}
// The VMThread gets its own PSPromotionManager, which is not available
// for work stealing.
@@ -187,7 +186,8 @@ void PSPromotionManager::reset_stats() {
// Most members are initialized either by initialize() or reset().
PSPromotionManager::PSPromotionManager()
- : _partial_array_stepper(ParallelGCThreads, ParGCArrayScanChunk)
+ : _partial_array_state_allocator(_partial_array_state_manager),
+ _partial_array_stepper(ParallelGCThreads, ParGCArrayScanChunk)
{
// We set the old lab's start array.
_old_lab.set_start_array(old_gen()->start_array());
@@ -198,9 +198,6 @@ PSPromotionManager::PSPromotionManager()
_target_stack_size = GCDrainStackTargetSize;
}
- // Initialize to a bad value; fixed by initialize().
- _partial_array_state_allocator_index = UINT_MAX;
-
// let's choose 1.5x the chunk size
_min_array_size_for_chunking = (3 * ParGCArrayScanChunk / 2);
@@ -317,7 +314,7 @@ void PSPromotionManager::process_array_chunk(PartialArrayState* state) {
process_array_chunk_work(state->destination(), start, end);
}
// Release reference to state, now that we're done with it.
- _partial_array_state_allocator->release(_partial_array_state_allocator_index, state);
+ _partial_array_state_allocator.release(state);
}
void PSPromotionManager::push_objArray(oop old_obj, oop new_obj) {
@@ -331,11 +328,10 @@ void PSPromotionManager::push_objArray(oop old_obj, oop new_obj) {
if (step._ncreate > 0) {
TASKQUEUE_STATS_ONLY(++_arrays_chunked);
PartialArrayState* state =
- _partial_array_state_allocator->allocate(_partial_array_state_allocator_index,
- old_obj, new_obj,
- step._index,
- array_length,
- step._ncreate);
+ _partial_array_state_allocator.allocate(old_obj, new_obj,
+ step._index,
+ array_length,
+ step._ncreate);
for (uint i = 0; i < step._ncreate; ++i) {
push_depth(ScannerTask(state));
}
diff --git a/src/hotspot/share/gc/parallel/psPromotionManager.hpp b/src/hotspot/share/gc/parallel/psPromotionManager.hpp
index a69d975956dc3..a6de8623281c9 100644
--- a/src/hotspot/share/gc/parallel/psPromotionManager.hpp
+++ b/src/hotspot/share/gc/parallel/psPromotionManager.hpp
@@ -28,6 +28,7 @@
#include "gc/parallel/psPromotionLAB.hpp"
#include "gc/shared/copyFailedInfo.hpp"
#include "gc/shared/gcTrace.hpp"
+#include "gc/shared/partialArrayState.hpp"
#include "gc/shared/partialArrayTaskStepper.hpp"
#include "gc/shared/preservedMarks.hpp"
#include "gc/shared/stringdedup/stringDedup.hpp"
@@ -50,8 +51,6 @@
class MutableSpace;
class PSOldGen;
class ParCompactionManager;
-class PartialArrayState;
-class PartialArrayStateAllocator;
class PSPromotionManager {
friend class PSScavenge;
@@ -88,9 +87,9 @@ class PSPromotionManager {
uint _target_stack_size;
- static PartialArrayStateAllocator* _partial_array_state_allocator;
+ static PartialArrayStateManager* _partial_array_state_manager;
+ PartialArrayStateAllocator _partial_array_state_allocator;
PartialArrayTaskStepper _partial_array_stepper;
- uint _partial_array_state_allocator_index;
uint _min_array_size_for_chunking;
PreservedMarks* _preserved_marks;
diff --git a/src/hotspot/share/gc/serial/serialBlockOffsetTable.cpp b/src/hotspot/share/gc/serial/serialBlockOffsetTable.cpp
index 31f18652c63d6..7ac0fcc8b53c5 100644
--- a/src/hotspot/share/gc/serial/serialBlockOffsetTable.cpp
+++ b/src/hotspot/share/gc/serial/serialBlockOffsetTable.cpp
@@ -37,13 +37,11 @@ SerialBlockOffsetTable::SerialBlockOffsetTable(MemRegion reserved,
size_t init_word_size):
_reserved(reserved) {
size_t size = compute_size(reserved.word_size());
- ReservedSpace rs(size);
+ ReservedSpace rs(size, mtGC);
if (!rs.is_reserved()) {
vm_exit_during_initialization("Could not reserve enough space for heap offset array");
}
- MemTracker::record_virtual_memory_tag((address)rs.base(), mtGC);
-
if (!_vs.initialize(rs, 0)) {
vm_exit_during_initialization("Could not reserve enough space for heap offset array");
}
diff --git a/src/hotspot/share/gc/shared/partialArrayState.cpp b/src/hotspot/share/gc/shared/partialArrayState.cpp
index 48ef974ecfa53..60067c6547b86 100644
--- a/src/hotspot/share/gc/shared/partialArrayState.cpp
+++ b/src/hotspot/share/gc/shared/partialArrayState.cpp
@@ -52,27 +52,8 @@ void PartialArrayState::add_references(size_t count) {
assert(new_count >= count, "reference count overflow");
}
-class PartialArrayStateAllocator::Impl : public CHeapObj {
- struct FreeListEntry;
-
- Arena* _arenas;
- FreeListEntry** _free_lists;
- uint _num_workers;
-
+class PartialArrayStateAllocator::FreeListEntry {
public:
- Impl(uint num_workers);
- ~Impl();
-
- NONCOPYABLE(Impl);
-
- PartialArrayState* allocate(uint worker_id,
- oop src, oop dst,
- size_t index, size_t length,
- size_t initial_refcount);
- void release(uint worker_id, PartialArrayState* state);
-};
-
-struct PartialArrayStateAllocator::Impl::FreeListEntry {
FreeListEntry* _next;
FreeListEntry(FreeListEntry* next) : _next(next) {}
@@ -81,73 +62,80 @@ struct PartialArrayStateAllocator::Impl::FreeListEntry {
NONCOPYABLE(FreeListEntry);
};
-PartialArrayStateAllocator::Impl::Impl(uint num_workers)
- : _arenas(NEW_C_HEAP_ARRAY(Arena, num_workers, mtGC)),
- _free_lists(NEW_C_HEAP_ARRAY(FreeListEntry*, num_workers, mtGC)),
- _num_workers(num_workers)
-{
- for (uint i = 0; i < _num_workers; ++i) {
- ::new (&_arenas[i]) Arena(mtGC);
- _free_lists[i] = nullptr;
- }
-}
+PartialArrayStateAllocator::PartialArrayStateAllocator(PartialArrayStateManager* manager)
+ : _manager(manager),
+ _free_list(),
+ _arena(manager->register_allocator())
+{}
-PartialArrayStateAllocator::Impl::~Impl() {
- // We don't need to clean up the free lists. Deallocating the entries
+PartialArrayStateAllocator::~PartialArrayStateAllocator() {
+ // We don't need to clean up the free list. Deallocating the entries
// does nothing, since we're using arena allocation. Instead, leave it
- // to the arena destructor to release the memory.
- FREE_C_HEAP_ARRAY(FreeListEntry*, _free_lists);
- for (uint i = 0; i < _num_workers; ++i) {
- _arenas[i].~Arena();
- }
- FREE_C_HEAP_ARRAY(Arena*, _arenas);
+ // to the manager to release the memory.
+ // Inform the manager that an allocator is no longer in use.
+ _manager->release_allocator();
}
-PartialArrayState* PartialArrayStateAllocator::Impl::allocate(uint worker_id,
- oop src, oop dst,
- size_t index,
- size_t length,
- size_t initial_refcount) {
+PartialArrayState* PartialArrayStateAllocator::allocate(oop src, oop dst,
+ size_t index,
+ size_t length,
+ size_t initial_refcount) {
void* p;
- FreeListEntry* head = _free_lists[worker_id];
+ FreeListEntry* head = _free_list;
if (head == nullptr) {
- p = NEW_ARENA_OBJ(&_arenas[worker_id], PartialArrayState);
+ p = NEW_ARENA_OBJ(_arena, PartialArrayState);
} else {
- _free_lists[worker_id] = head->_next;
+ _free_list = head->_next;
head->~FreeListEntry();
p = head;
}
return ::new (p) PartialArrayState(src, dst, index, length, initial_refcount);
}
-void PartialArrayStateAllocator::Impl::release(uint worker_id, PartialArrayState* state) {
+void PartialArrayStateAllocator::release(PartialArrayState* state) {
size_t refcount = Atomic::sub(&state->_refcount, size_t(1), memory_order_release);
if (refcount != 0) {
assert(refcount + 1 != 0, "refcount underflow");
} else {
OrderAccess::acquire();
- state->~PartialArrayState();
- _free_lists[worker_id] = ::new (state) FreeListEntry(_free_lists[worker_id]);
+ // Don't need to call destructor; can't if not destructible.
+ static_assert(!std::is_destructible::value, "expected");
+ _free_list = ::new (state) FreeListEntry(_free_list);
}
}
-PartialArrayStateAllocator::PartialArrayStateAllocator(uint num_workers)
- : _impl(new Impl(num_workers))
+PartialArrayStateManager::PartialArrayStateManager(uint max_allocators)
+ : _arenas(NEW_C_HEAP_ARRAY(Arena, max_allocators, mtGC)),
+ _max_allocators(max_allocators),
+ _registered_allocators(0)
+ DEBUG_ONLY(COMMA _released_allocators(0))
{}
-PartialArrayStateAllocator::~PartialArrayStateAllocator() {
- delete _impl;
+PartialArrayStateManager::~PartialArrayStateManager() {
+ reset();
+ FREE_C_HEAP_ARRAY(Arena, _arenas);
}
-PartialArrayState* PartialArrayStateAllocator::allocate(uint worker_id,
- oop src, oop dst,
- size_t index,
- size_t length,
- size_t initial_refcount) {
- return _impl->allocate(worker_id, src, dst, index, length, initial_refcount);
+Arena* PartialArrayStateManager::register_allocator() {
+ uint idx = Atomic::fetch_then_add(&_registered_allocators, 1u, memory_order_relaxed);
+ assert(idx < _max_allocators, "exceeded configured max number of allocators");
+ return ::new (&_arenas[idx]) Arena(mtGC);
}
-void PartialArrayStateAllocator::release(uint worker_id, PartialArrayState* state) {
- _impl->release(worker_id, state);
+#ifdef ASSERT
+void PartialArrayStateManager::release_allocator() {
+ uint old = Atomic::fetch_then_add(&_released_allocators, 1u, memory_order_relaxed);
+ assert(old < Atomic::load(&_registered_allocators), "too many releases");
}
+#endif // ASSERT
+void PartialArrayStateManager::reset() {
+ uint count = Atomic::load(&_registered_allocators);
+ assert(count == Atomic::load(&_released_allocators),
+ "some allocators still active");
+ for (uint i = 0; i < count; ++i) {
+ _arenas[i].~Arena();
+ }
+ Atomic::store(&_registered_allocators, 0u);
+ DEBUG_ONLY(Atomic::store(&_released_allocators, 0u);)
+}
diff --git a/src/hotspot/share/gc/shared/partialArrayState.hpp b/src/hotspot/share/gc/shared/partialArrayState.hpp
index fb226e08665a0..3208c6d68077f 100644
--- a/src/hotspot/share/gc/shared/partialArrayState.hpp
+++ b/src/hotspot/share/gc/shared/partialArrayState.hpp
@@ -30,7 +30,9 @@
#include "utilities/globalDefinitions.hpp"
#include "utilities/macros.hpp"
+class Arena;
class PartialArrayStateAllocator;
+class PartialArrayStateManager;
// Instances of this class are used to represent processing progress for an
// array task in a taskqueue. When a sufficiently large array needs to be
@@ -52,8 +54,8 @@ class PartialArrayStateAllocator;
// referring to a given state that is added to a taskqueue must increase the
// reference count by one. When the processing of a task referring to a state
// is complete, the reference count must be decreased by one. When the
-// reference count reaches zero the state should be released to the allocator
-// for later reuse.
+// reference count reaches zero the state is released to the allocator for
+// later reuse.
class PartialArrayState {
oop _source;
oop _destination;
@@ -66,11 +68,13 @@ class PartialArrayState {
PartialArrayState(oop src, oop dst,
size_t index, size_t length,
size_t initial_refcount);
- ~PartialArrayState() = default;
+
+public:
+ // Deleted to require management by allocator object.
+ ~PartialArrayState() = delete;
NONCOPYABLE(PartialArrayState);
-public:
// Add count references, one per referring task being added to a taskqueue.
void add_references(size_t count);
@@ -91,39 +95,39 @@ class PartialArrayState {
// This class provides memory management for PartialArrayStates.
//
-// States are initially allocated from a set of arenas owned by the allocator.
-// This allows the entire set of allocated states to be discarded without the
-// need to keep track of or find them under some circumstances. For example,
-// if G1 concurrent marking is aborted and needs to restart because of a full
-// marking queue, the queue doesn't need to be searched for tasks referring to
-// states to allow releasing them. Instead the queue contents can just be
-// discarded, and the memory for the no longer referenced states will
-// eventually be reclaimed when the arenas are reset.
+// States are initially arena allocated from the manager, using a per-thread
+// allocator. This allows the entire set of allocated states to be discarded
+// without the need to keep track of or find them under some circumstances.
+// For example, if G1 concurrent marking is aborted and needs to restart
+// because of a full marking queue, the queue doesn't need to be searched for
+// tasks referring to states to allow releasing them. Instead the queue
+// contents can just be discarded, and the memory for the no longer referenced
+// states will eventually be reclaimed when the arena is reset.
//
-// A set of free-lists is placed in front of the arena allocators. This
-// causes the maximum number of allocated states to be based on the number of
+// The allocators each provide a free-list of states. When a state is
+// released and its reference count has reached zero, it is added to the
+// allocator's free-list, for use by future allocation requests. This causes
+// the maximum number of allocated states to be based on the number of
// in-progress arrays, rather than the total number of arrays that need to be
-// processed. The use of free-list allocators is the reason for reference
-// counting states.
+// processed.
//
-// The arena and free-list to use for an allocation operation is designated by
-// the worker_id used in the operation. This avoids locking and such on those
-// data structures, at the cost of possibly doing more total arena allocation
-// that would be needed with a single shared arena and free-list.
+// An allocator object is not thread-safe.
class PartialArrayStateAllocator : public CHeapObj {
- class Impl;
- Impl* _impl;
+ class FreeListEntry;
+
+ PartialArrayStateManager* _manager;
+ FreeListEntry* _free_list;
+ Arena* _arena; // Obtained from _manager.
public:
- PartialArrayStateAllocator(uint num_workers);
+ explicit PartialArrayStateAllocator(PartialArrayStateManager* manager);
~PartialArrayStateAllocator();
NONCOPYABLE(PartialArrayStateAllocator);
// Create a new state, obtaining the memory for it from the free-list or
- // arena associated with worker_id.
- PartialArrayState* allocate(uint worker_id,
- oop src, oop dst,
+ // from the associated manager.
+ PartialArrayState* allocate(oop src, oop dst,
size_t index, size_t length,
size_t initial_refcount);
@@ -131,7 +135,70 @@ class PartialArrayStateAllocator : public CHeapObj {
// state to the free-list associated with worker_id. The state must have
// been allocated by this allocator, but that allocation doesn't need to
// have been associated with worker_id.
- void release(uint worker_id, PartialArrayState* state);
+ void release(PartialArrayState* state);
+};
+
+// This class provides memory management for PartialArrayStates.
+//
+// States are allocated using an allocator object. Those allocators in turn
+// may request memory for a state from their associated manager. The manager
+// is responsible for obtaining and releasing memory used for states by the
+// associated allocators.
+//
+// A state may be allocated by one allocator, but end up on the free-list of a
+// different allocator. This can happen because a task referring to the state
+// may be stolen from the queue where it was initially added. This is permitted
+// because a state's memory won't be reclaimed until all of the allocators
+// associated with the manager that is ultimately providing the memory have
+// been deleted and the manager is reset.
+//
+// A manager is used in two distinct and non-overlapping phases.
+//
+// - allocating: This is the initial phase. During this phase, new allocators
+// may be created, and allocators may request memory from the manager.
+//
+// - releasing: When an allocator is destroyed the manager transitions to this
+// phase. It remains in this phase until all extent allocators associated with
+// this manager have been destroyed. During this phase, new allocators may not
+// be created, nor may extent allocators request memory from this manager.
+//
+// Once all the associated allocators have been destroyed the releasing phase
+// ends and the manager may be reset or deleted. Resetting transitions back
+// to the allocating phase.
+class PartialArrayStateManager : public CHeapObj {
+ friend class PartialArrayStateAllocator;
+
+ // Use an arena for each allocator, for thread-safe concurrent allocation by
+ // different allocators.
+ Arena* _arenas;
+
+ // Limit on the number of allocators this manager supports.
+ uint _max_allocators;
+
+ // The number of allocators that have been registered/released.
+ // Atomic to support concurrent registration, and concurrent release.
+ // Phasing restriction forbids registration concurrent with release.
+ volatile uint _registered_allocators;
+ DEBUG_ONLY(volatile uint _released_allocators;)
+
+ // These are all for sole use of the befriended allocator class.
+ Arena* register_allocator();
+ void release_allocator() NOT_DEBUG_RETURN;
+
+public:
+ explicit PartialArrayStateManager(uint max_allocators);
+
+ // Release the memory that has been requested by allocators associated with
+ // this manager.
+ // precondition: all associated allocators have been deleted.
+ ~PartialArrayStateManager();
+
+ NONCOPYABLE(PartialArrayStateManager);
+
+ // Recycle the memory that has been requested by allocators associated with
+ // this manager.
+ // precondition: all associated allocators have been deleted.
+ void reset();
};
#endif // SHARE_GC_SHARED_PARTIALARRAYSTATE_HPP
diff --git a/src/hotspot/share/gc/shenandoah/c2/shenandoahBarrierSetC2.cpp b/src/hotspot/share/gc/shenandoah/c2/shenandoahBarrierSetC2.cpp
index b906ae2ca0b96..c6bcbd18a1683 100644
--- a/src/hotspot/share/gc/shenandoah/c2/shenandoahBarrierSetC2.cpp
+++ b/src/hotspot/share/gc/shenandoah/c2/shenandoahBarrierSetC2.cpp
@@ -465,11 +465,17 @@ void ShenandoahBarrierSetC2::post_barrier(GraphKit* kit,
}
if (ReduceInitialCardMarks && obj == kit->just_allocated_object(kit->control())) {
- // We can skip marks on a freshly-allocated object in Eden.
- // Keep this code in sync with new_deferred_store_barrier() in runtime.cpp.
- // That routine informs GC to take appropriate compensating steps,
- // upon a slow-path allocation, so as to make this card-mark
- // elision safe.
+ // We use card marks to track old to young references in Generational Shenandoah;
+ // see flag ShenandoahCardBarrier above.
+ // Objects are always allocated in the young generation and initialized
+ // before they are promoted. There's always a safepoint (e.g. at final mark)
+ // before an object is promoted from young to old. Promotion entails dirtying of
+ // the cards backing promoted objects, so they will be guaranteed to be scanned
+ // at the next remembered set scan of the old generation.
+ // Thus, we can safely skip card-marking of initializing stores on a
+ // freshly-allocated object. If any of the assumptions above change in
+ // the future, this code will need to be re-examined; see check in
+ // ShenandoahCardBarrier::on_slowpath_allocation_exit().
return;
}
diff --git a/src/hotspot/share/gc/shenandoah/shenandoahBarrierSet.cpp b/src/hotspot/share/gc/shenandoah/shenandoahBarrierSet.cpp
index 38e363664dc3a..62067bccb1ed7 100644
--- a/src/hotspot/share/gc/shenandoah/shenandoahBarrierSet.cpp
+++ b/src/hotspot/share/gc/shenandoah/shenandoahBarrierSet.cpp
@@ -88,6 +88,14 @@ bool ShenandoahBarrierSet::need_keep_alive_barrier(DecoratorSet decorators, Basi
return (on_weak_ref || unknown) && keep_alive;
}
+void ShenandoahBarrierSet::on_slowpath_allocation_exit(JavaThread* thread, oop new_obj) {
+#if COMPILER2_OR_JVMCI
+ assert(!ReduceInitialCardMarks || !ShenandoahCardBarrier || ShenandoahGenerationalHeap::heap()->is_in_young(new_obj),
+ "Error: losing card mark on initialzing store to old gen");
+#endif // COMPILER2_OR_JVMCI
+ assert(thread->deferred_card_mark().is_empty(), "We don't use this");
+}
+
void ShenandoahBarrierSet::on_thread_create(Thread* thread) {
// Create thread local data
ShenandoahThreadLocalData::create(thread);
diff --git a/src/hotspot/share/gc/shenandoah/shenandoahBarrierSet.hpp b/src/hotspot/share/gc/shenandoah/shenandoahBarrierSet.hpp
index 8d1dc92761a59..0d38cc757f44a 100644
--- a/src/hotspot/share/gc/shenandoah/shenandoahBarrierSet.hpp
+++ b/src/hotspot/share/gc/shenandoah/shenandoahBarrierSet.hpp
@@ -77,17 +77,21 @@ class ShenandoahBarrierSet: public BarrierSet {
return (decorators & IN_NATIVE) != 0;
}
- void print_on(outputStream* st) const;
+ void print_on(outputStream* st) const override;
template
inline void arraycopy_barrier(T* src, T* dst, size_t count);
inline void clone_barrier(oop src);
void clone_barrier_runtime(oop src);
- virtual void on_thread_create(Thread* thread);
- virtual void on_thread_destroy(Thread* thread);
- virtual void on_thread_attach(Thread* thread);
- virtual void on_thread_detach(Thread* thread);
+ // Support for optimizing compilers to call the barrier set on slow path allocations
+ // that did not enter a TLAB. Used for e.g. ReduceInitialCardMarks to take any
+ // compensating actions to restore card-marks that might otherwise be incorrectly elided.
+ void on_slowpath_allocation_exit(JavaThread* thread, oop new_obj) override;
+ void on_thread_create(Thread* thread) override;
+ void on_thread_destroy(Thread* thread) override;
+ void on_thread_attach(Thread* thread) override;
+ void on_thread_detach(Thread* thread) override;
static inline oop resolve_forwarded_not_null(oop p);
static inline oop resolve_forwarded_not_null_mutator(oop p);
diff --git a/src/hotspot/share/gc/shenandoah/shenandoahControlThread.cpp b/src/hotspot/share/gc/shenandoah/shenandoahControlThread.cpp
index 8a82498225a95..136ac22d840ff 100644
--- a/src/hotspot/share/gc/shenandoah/shenandoahControlThread.cpp
+++ b/src/hotspot/share/gc/shenandoah/shenandoahControlThread.cpp
@@ -56,15 +56,8 @@ void ShenandoahControlThread::run_service() {
const GCCause::Cause default_cause = GCCause::_shenandoah_concurrent_gc;
int sleep = ShenandoahControlIntervalMin;
- double last_shrink_time = os::elapsedTime();
double last_sleep_adjust_time = os::elapsedTime();
- // Shrink period avoids constantly polling regions for shrinking.
- // Having a period 10x lower than the delay would mean we hit the
- // shrinking with lag of less than 1/10-th of true delay.
- // ShenandoahUncommitDelay is in msecs, but shrink_period is in seconds.
- const double shrink_period = (double)ShenandoahUncommitDelay / 1000 / 10;
-
ShenandoahCollectorPolicy* const policy = heap->shenandoah_policy();
ShenandoahHeuristics* const heuristics = heap->heuristics();
while (!in_graceful_shutdown() && !should_terminate()) {
@@ -76,9 +69,6 @@ void ShenandoahControlThread::run_service() {
// This control loop iteration has seen this much allocation.
const size_t allocs_seen = reset_allocs_seen();
- // Check if we have seen a new target for soft max heap size.
- const bool soft_max_changed = heap->check_soft_max_changed();
-
// Choose which GC mode to run in. The block below should select a single mode.
GCMode mode = none;
GCCause::Cause cause = GCCause::_last_gc_cause;
@@ -136,6 +126,9 @@ void ShenandoahControlThread::run_service() {
assert (!gc_requested || cause != GCCause::_last_gc_cause, "GC cause should be set");
if (gc_requested) {
+ // Cannot uncommit bitmap slices during concurrent reset
+ ShenandoahNoUncommitMark forbid_region_uncommit(heap);
+
// GC is starting, bump the internal ID
update_gc_id();
@@ -238,29 +231,20 @@ void ShenandoahControlThread::run_service() {
}
}
- const double current = os::elapsedTime();
-
- if (ShenandoahUncommit && (is_gc_requested || soft_max_changed || (current - last_shrink_time > shrink_period))) {
- // Explicit GC tries to uncommit everything down to min capacity.
- // Soft max change tries to uncommit everything down to target capacity.
- // Periodic uncommit tries to uncommit suitable regions down to min capacity.
-
- double shrink_before = (is_gc_requested || soft_max_changed) ?
- current :
- current - (ShenandoahUncommitDelay / 1000.0);
-
- size_t shrink_until = soft_max_changed ?
- heap->soft_max_capacity() :
- heap->min_capacity();
-
- heap->maybe_uncommit(shrink_before, shrink_until);
- heap->phase_timings()->flush_cycle_to_global();
- last_shrink_time = current;
+ // Check if we have seen a new target for soft max heap size or if a gc was requested.
+ // Either of these conditions will attempt to uncommit regions.
+ if (ShenandoahUncommit) {
+ if (heap->check_soft_max_changed()) {
+ heap->notify_soft_max_changed();
+ } else if (is_gc_requested) {
+ heap->notify_explicit_gc_requested();
+ }
}
// Wait before performing the next action. If allocation happened during this wait,
// we exit sooner, to let heuristics re-evaluate new conditions. If we are at idle,
// back off exponentially.
+ const double current = os::elapsedTime();
if (heap->has_changed()) {
sleep = ShenandoahControlIntervalMin;
} else if ((current - last_sleep_adjust_time) * 1000 > ShenandoahControlIntervalAdjustPeriod){
diff --git a/src/hotspot/share/gc/shenandoah/shenandoahGeneration.cpp b/src/hotspot/share/gc/shenandoah/shenandoahGeneration.cpp
index 1c644a9acccd7..a48b2baa18f38 100644
--- a/src/hotspot/share/gc/shenandoah/shenandoahGeneration.cpp
+++ b/src/hotspot/share/gc/shenandoah/shenandoahGeneration.cpp
@@ -73,8 +73,9 @@ class ShenandoahResetBitmapTask : public WorkerTask {
WorkerTask("Shenandoah Reset Bitmap"), _generation(generation) {}
void work(uint worker_id) {
- ShenandoahHeapRegion* region = _regions.next();
ShenandoahHeap* heap = ShenandoahHeap::heap();
+ assert(!heap->is_uncommit_in_progress(), "Cannot uncommit bitmaps while resetting them.");
+ ShenandoahHeapRegion* region = _regions.next();
ShenandoahMarkingContext* const ctx = heap->marking_context();
while (region != nullptr) {
auto const affiliation = region->affiliation();
diff --git a/src/hotspot/share/gc/shenandoah/shenandoahGenerationalControlThread.cpp b/src/hotspot/share/gc/shenandoah/shenandoahGenerationalControlThread.cpp
index ef0fbf671a0dd..33af35c6b9555 100644
--- a/src/hotspot/share/gc/shenandoah/shenandoahGenerationalControlThread.cpp
+++ b/src/hotspot/share/gc/shenandoah/shenandoahGenerationalControlThread.cpp
@@ -67,15 +67,8 @@ void ShenandoahGenerationalControlThread::run_service() {
const GCMode default_mode = concurrent_normal;
ShenandoahGenerationType generation = GLOBAL;
- double last_shrink_time = os::elapsedTime();
uint age_period = 0;
- // Shrink period avoids constantly polling regions for shrinking.
- // Having a period 10x lower than the delay would mean we hit the
- // shrinking with lag of less than 1/10-th of true delay.
- // ShenandoahUncommitDelay is in msecs, but shrink_period is in seconds.
- const double shrink_period = (double)ShenandoahUncommitDelay / 1000 / 10;
-
ShenandoahCollectorPolicy* const policy = heap->shenandoah_policy();
// Heuristics are notified of allocation failures here and other outcomes
@@ -191,6 +184,9 @@ void ShenandoahGenerationalControlThread::run_service() {
assert (!gc_requested || cause != GCCause::_no_gc, "GC cause should be set");
if (gc_requested) {
+ // Cannot uncommit bitmap slices during concurrent reset
+ ShenandoahNoUncommitMark forbid_region_uncommit(heap);
+
// Blow away all soft references on this cycle, if handling allocation failure,
// either implicit or explicit GC request, or we are requested to do so unconditionally.
if (generation == GLOBAL && (alloc_failure_pending || is_gc_requested || ShenandoahAlwaysClearSoftRefs)) {
@@ -303,24 +299,14 @@ void ShenandoahGenerationalControlThread::run_service() {
}
}
- const double current = os::elapsedTime();
-
- if (ShenandoahUncommit && (is_gc_requested || soft_max_changed || (current - last_shrink_time > shrink_period))) {
- // Explicit GC tries to uncommit everything down to min capacity.
- // Soft max change tries to uncommit everything down to target capacity.
- // Periodic uncommit tries to uncommit suitable regions down to min capacity.
-
- double shrink_before = (is_gc_requested || soft_max_changed) ?
- current :
- current - (ShenandoahUncommitDelay / 1000.0);
-
- size_t shrink_until = soft_max_changed ?
- heap->soft_max_capacity() :
- heap->min_capacity();
-
- heap->maybe_uncommit(shrink_before, shrink_until);
- heap->phase_timings()->flush_cycle_to_global();
- last_shrink_time = current;
+ // Check if we have seen a new target for soft max heap size or if a gc was requested.
+ // Either of these conditions will attempt to uncommit regions.
+ if (ShenandoahUncommit) {
+ if (heap->check_soft_max_changed()) {
+ heap->notify_soft_max_changed();
+ } else if (is_gc_requested) {
+ heap->notify_explicit_gc_requested();
+ }
}
// Wait for ShenandoahControlIntervalMax unless there was an allocation failure or another request was made mid-cycle.
diff --git a/src/hotspot/share/gc/shenandoah/shenandoahHeap.cpp b/src/hotspot/share/gc/shenandoah/shenandoahHeap.cpp
index 6ef66926b72fa..c1bc9dc661643 100644
--- a/src/hotspot/share/gc/shenandoah/shenandoahHeap.cpp
+++ b/src/hotspot/share/gc/shenandoah/shenandoahHeap.cpp
@@ -25,8 +25,10 @@
*/
#include "precompiled.hpp"
-#include "memory/allocation.hpp"
-#include "memory/universe.hpp"
+
+#include "cds/archiveHeapWriter.hpp"
+#include "classfile/systemDictionary.hpp"
+#include "code/codeCache.hpp"
#include "gc/shared/classUnloadingContext.hpp"
#include "gc/shared/fullGCForwarding.hpp"
@@ -42,17 +44,16 @@
#include "gc/shenandoah/heuristics/shenandoahYoungHeuristics.hpp"
#include "gc/shenandoah/shenandoahAllocRequest.hpp"
#include "gc/shenandoah/shenandoahBarrierSet.hpp"
-#include "gc/shenandoah/shenandoahClosures.inline.hpp"
+#include "gc/shenandoah/shenandoahCodeRoots.hpp"
#include "gc/shenandoah/shenandoahCollectionSet.hpp"
#include "gc/shenandoah/shenandoahCollectorPolicy.hpp"
#include "gc/shenandoah/shenandoahConcurrentMark.hpp"
-#include "gc/shenandoah/shenandoahMarkingContext.inline.hpp"
#include "gc/shenandoah/shenandoahControlThread.hpp"
+#include "gc/shenandoah/shenandoahClosures.inline.hpp"
#include "gc/shenandoah/shenandoahFreeSet.hpp"
#include "gc/shenandoah/shenandoahGenerationalEvacuationTask.hpp"
#include "gc/shenandoah/shenandoahGenerationalHeap.hpp"
#include "gc/shenandoah/shenandoahGlobalGeneration.hpp"
-#include "gc/shenandoah/shenandoahPhaseTimings.hpp"
#include "gc/shenandoah/shenandoahHeap.inline.hpp"
#include "gc/shenandoah/shenandoahHeapRegionClosures.hpp"
#include "gc/shenandoah/shenandoahHeapRegion.inline.hpp"
@@ -65,13 +66,14 @@
#include "gc/shenandoah/shenandoahPacer.inline.hpp"
#include "gc/shenandoah/shenandoahPadding.hpp"
#include "gc/shenandoah/shenandoahParallelCleaning.inline.hpp"
+#include "gc/shenandoah/shenandoahPhaseTimings.hpp"
#include "gc/shenandoah/shenandoahReferenceProcessor.hpp"
#include "gc/shenandoah/shenandoahRootProcessor.inline.hpp"
#include "gc/shenandoah/shenandoahScanRemembered.inline.hpp"
#include "gc/shenandoah/shenandoahSTWMark.hpp"
+#include "gc/shenandoah/shenandoahUncommitThread.hpp"
#include "gc/shenandoah/shenandoahUtils.hpp"
#include "gc/shenandoah/shenandoahVerifier.hpp"
-#include "gc/shenandoah/shenandoahCodeRoots.hpp"
#include "gc/shenandoah/shenandoahVMOperations.hpp"
#include "gc/shenandoah/shenandoahWorkGroup.hpp"
#include "gc/shenandoah/shenandoahWorkerPolicy.hpp"
@@ -79,17 +81,16 @@
#include "gc/shenandoah/mode/shenandoahGenerationalMode.hpp"
#include "gc/shenandoah/mode/shenandoahPassiveMode.hpp"
#include "gc/shenandoah/mode/shenandoahSATBMode.hpp"
-#include "utilities/globalDefinitions.hpp"
#if INCLUDE_JFR
#include "gc/shenandoah/shenandoahJfrSupport.hpp"
#endif
-#include "cds/archiveHeapWriter.hpp"
-#include "classfile/systemDictionary.hpp"
-#include "code/codeCache.hpp"
+
+#include "memory/allocation.hpp"
#include "memory/classLoaderMetaspace.hpp"
#include "memory/metaspaceUtils.hpp"
+#include "memory/universe.hpp"
#include "nmt/mallocTracker.hpp"
#include "nmt/memTracker.hpp"
#include "oops/compressedOops.inline.hpp"
@@ -102,6 +103,7 @@
#include "runtime/safepointMechanism.hpp"
#include "runtime/stackWatermarkSet.hpp"
#include "runtime/vmThread.hpp"
+#include "utilities/globalDefinitions.hpp"
#include "utilities/events.hpp"
#include "utilities/powerOfTwo.hpp"
@@ -459,6 +461,10 @@ jint ShenandoahHeap::initialize() {
initialize_controller();
+ if (ShenandoahUncommit) {
+ _uncommit_thread = new ShenandoahUncommitThread(this);
+ }
+
print_init_logger();
FullGCForwarding::initialize(_heap_region);
@@ -530,6 +536,7 @@ ShenandoahHeap::ShenandoahHeap(ShenandoahCollectorPolicy* policy) :
_update_refs_iterator(this),
_global_generation(nullptr),
_control_thread(nullptr),
+ _uncommit_thread(nullptr),
_young_generation(nullptr),
_old_generation(nullptr),
_shenandoah_policy(policy),
@@ -800,60 +807,15 @@ bool ShenandoahHeap::is_in(const void* p) const {
}
}
-void ShenandoahHeap::maybe_uncommit(double shrink_before, size_t shrink_until) {
- assert (ShenandoahUncommit, "should be enabled");
-
- // Determine if there is work to do. This avoids taking heap lock if there is
- // no work available, avoids spamming logs with superfluous logging messages,
- // and minimises the amount of work while locks are taken.
-
- if (committed() <= shrink_until) return;
-
- bool has_work = false;
- for (size_t i = 0; i < num_regions(); i++) {
- ShenandoahHeapRegion* r = get_region(i);
- if (r->is_empty_committed() && (r->empty_time() < shrink_before)) {
- has_work = true;
- break;
- }
- }
-
- if (has_work) {
- static const char* msg = "Concurrent uncommit";
- ShenandoahConcurrentPhase gcPhase(msg, ShenandoahPhaseTimings::conc_uncommit, true /* log_heap_usage */);
- EventMark em("%s", msg);
-
- op_uncommit(shrink_before, shrink_until);
+void ShenandoahHeap::notify_soft_max_changed() {
+ if (_uncommit_thread != nullptr) {
+ _uncommit_thread->notify_soft_max_changed();
}
}
-void ShenandoahHeap::op_uncommit(double shrink_before, size_t shrink_until) {
- assert (ShenandoahUncommit, "should be enabled");
-
- // Application allocates from the beginning of the heap, and GC allocates at
- // the end of it. It is more efficient to uncommit from the end, so that applications
- // could enjoy the near committed regions. GC allocations are much less frequent,
- // and therefore can accept the committing costs.
-
- size_t count = 0;
- for (size_t i = num_regions(); i > 0; i--) { // care about size_t underflow
- ShenandoahHeapRegion* r = get_region(i - 1);
- if (r->is_empty_committed() && (r->empty_time() < shrink_before)) {
- ShenandoahHeapLocker locker(lock());
- if (r->is_empty_committed()) {
- if (committed() < shrink_until + ShenandoahHeapRegion::region_size_bytes()) {
- break;
- }
-
- r->make_uncommitted();
- count++;
- }
- }
- SpinPause(); // allow allocators to take the lock
- }
-
- if (count > 0) {
- notify_heap_changed();
+void ShenandoahHeap::notify_explicit_gc_requested() {
+ if (_uncommit_thread != nullptr) {
+ _uncommit_thread->notify_explicit_gc_requested();
}
}
@@ -1507,6 +1469,10 @@ void ShenandoahHeap::gc_threads_do(ThreadClosure* tcl) const {
tcl->do_thread(_control_thread);
}
+ if (_uncommit_thread != nullptr) {
+ tcl->do_thread(_uncommit_thread);
+ }
+
workers()->threads_do(tcl);
if (_safepoint_workers != nullptr) {
_safepoint_workers->threads_do(tcl);
@@ -2094,6 +2060,11 @@ void ShenandoahHeap::stop() {
// Step 3. Wait until GC worker exits normally.
control_thread()->stop();
+
+ // Stop 4. Shutdown uncommit thread.
+ if (_uncommit_thread != nullptr) {
+ _uncommit_thread->stop();
+ }
}
void ShenandoahHeap::stw_unload_classes(bool full_gc) {
@@ -2521,7 +2492,7 @@ bool ShenandoahHeap::uncommit_bitmap_slice(ShenandoahHeapRegion *r) {
if (is_bitmap_slice_committed(r, true)) {
// Some other region from the group is still committed, meaning the bitmap
- // slice is should stay committed, exit right away.
+ // slice should stay committed, exit right away.
return true;
}
@@ -2535,6 +2506,27 @@ bool ShenandoahHeap::uncommit_bitmap_slice(ShenandoahHeapRegion *r) {
return true;
}
+void ShenandoahHeap::forbid_uncommit() {
+ if (_uncommit_thread != nullptr) {
+ _uncommit_thread->forbid_uncommit();
+ }
+}
+
+void ShenandoahHeap::allow_uncommit() {
+ if (_uncommit_thread != nullptr) {
+ _uncommit_thread->allow_uncommit();
+ }
+}
+
+#ifdef ASSERT
+bool ShenandoahHeap::is_uncommit_in_progress() {
+ if (_uncommit_thread != nullptr) {
+ return _uncommit_thread->is_uncommit_in_progress();
+ }
+ return false;
+}
+#endif
+
void ShenandoahHeap::safepoint_synchronize_begin() {
StackWatermarkSet::safepoint_synchronize_begin();
SuspendibleThreadSet::synchronize();
diff --git a/src/hotspot/share/gc/shenandoah/shenandoahHeap.hpp b/src/hotspot/share/gc/shenandoah/shenandoahHeap.hpp
index a9a793f9e605d..5f957b734104d 100644
--- a/src/hotspot/share/gc/shenandoah/shenandoahHeap.hpp
+++ b/src/hotspot/share/gc/shenandoah/shenandoahHeap.hpp
@@ -70,6 +70,7 @@ class ShenandoahFullGC;
class ShenandoahMonitoringSupport;
class ShenandoahPacer;
class ShenandoahReferenceProcessor;
+class ShenandoahUncommitThread;
class ShenandoahVerifier;
class ShenandoahWorkerThreads;
class VMStructs;
@@ -252,11 +253,14 @@ class ShenandoahHeap : public CollectedHeap {
// ---------- Periodic Tasks
//
-private:
+public:
+ // Notify heuristics and region state change logger that the state of the heap has changed
void notify_heap_changed();
-public:
+ // Force counters to update
void set_forced_counters_update(bool value);
+
+ // Update counters if forced flag is set
void handle_force_counters_update();
// ---------- Workers handling
@@ -440,11 +444,6 @@ class ShenandoahHeap : public CollectedHeap {
void cancel_gc(GCCause::Cause cause);
public:
- // These will uncommit empty regions if heap::committed > shrink_until
- // and there exists at least one region which was made empty before shrink_before.
- void maybe_uncommit(double shrink_before, size_t shrink_until);
- void op_uncommit(double shrink_before, size_t shrink_until);
-
// Returns true if the soft maximum heap has been changed using management APIs.
bool check_soft_max_changed();
@@ -478,14 +477,22 @@ class ShenandoahHeap : public CollectedHeap {
void notify_gc_no_progress();
size_t get_gc_no_progress_count() const;
-//
-// Mark support
+ // The uncommit thread targets soft max heap, notify this thread when that value has changed.
+ void notify_soft_max_changed();
+
+ // An explicit GC request may have freed regions, notify the uncommit thread.
+ void notify_explicit_gc_requested();
+
private:
ShenandoahGeneration* _global_generation;
protected:
+ // The control thread presides over concurrent collection cycles
ShenandoahController* _control_thread;
+ // The uncommit thread periodically attempts to uncommit regions that have been empty for longer than ShenandoahUncommitDelay
+ ShenandoahUncommitThread* _uncommit_thread;
+
ShenandoahYoungGeneration* _young_generation;
ShenandoahOldGeneration* _old_generation;
@@ -500,7 +507,7 @@ class ShenandoahHeap : public CollectedHeap {
ShenandoahMmuTracker _mmu_tracker;
public:
- ShenandoahController* control_thread() { return _control_thread; }
+ ShenandoahController* control_thread() const { return _control_thread; }
ShenandoahGeneration* global_generation() const { return _global_generation; }
ShenandoahYoungGeneration* young_generation() const {
@@ -726,6 +733,20 @@ class ShenandoahHeap : public CollectedHeap {
bool uncommit_bitmap_slice(ShenandoahHeapRegion *r);
bool is_bitmap_slice_committed(ShenandoahHeapRegion* r, bool skip_self = false);
+ // During concurrent reset, the control thread will zero out the mark bitmaps for committed regions.
+ // This cannot happen when the uncommit thread is simultaneously trying to uncommit regions and their bitmaps.
+ // To prevent these threads from working at the same time, we provide these methods for the control thread to
+ // prevent the uncommit thread from working while a collection cycle is in progress.
+
+ // Forbid uncommits (will stop and wait if regions are being uncommitted)
+ void forbid_uncommit();
+
+ // Allow the uncommit thread to process regions
+ void allow_uncommit();
+#ifdef ASSERT
+ bool is_uncommit_in_progress();
+#endif
+
// Liveness caching support
ShenandoahLiveData* get_liveness_cache(uint worker_id);
void flush_liveness_cache(uint worker_id);
diff --git a/src/hotspot/share/gc/shenandoah/shenandoahPhaseTimings.hpp b/src/hotspot/share/gc/shenandoah/shenandoahPhaseTimings.hpp
index 05ab60c0bb66b..4c8cb8c20570d 100644
--- a/src/hotspot/share/gc/shenandoah/shenandoahPhaseTimings.hpp
+++ b/src/hotspot/share/gc/shenandoah/shenandoahPhaseTimings.hpp
@@ -189,7 +189,6 @@ class outputStream;
f(full_gc_reconstruct_remembered_set, " Reconstruct Remembered Set") \
f(full_gc_heapdump_post, " Post Heap Dump") \
\
- f(conc_uncommit, "Concurrent Uncommit") \
f(pacing, "Pacing") \
\
f(heap_iteration_roots, "Heap Iteration") \
diff --git a/src/hotspot/share/gc/shenandoah/shenandoahUncommitThread.cpp b/src/hotspot/share/gc/shenandoah/shenandoahUncommitThread.cpp
new file mode 100644
index 0000000000000..85bb3349d5c97
--- /dev/null
+++ b/src/hotspot/share/gc/shenandoah/shenandoahUncommitThread.cpp
@@ -0,0 +1,198 @@
+/*
+ * Copyright Amazon.com Inc. or its affiliates. All Rights Reserved.
+ * 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/shenandoah/shenandoahHeap.inline.hpp"
+#include "gc/shenandoah/shenandoahHeapRegion.hpp"
+#include "gc/shenandoah/shenandoahUncommitThread.hpp"
+#include "logging/log.hpp"
+#include "runtime/mutexLocker.hpp"
+#include "utilities/events.hpp"
+
+ShenandoahUncommitThread::ShenandoahUncommitThread(ShenandoahHeap* heap)
+ : _heap(heap),
+ _stop_lock(Mutex::safepoint - 2, "ShenandoahUncommitStop_lock", true),
+ _uncommit_lock(Mutex::safepoint - 2, "ShenandoahUncommitCancel_lock", true) {
+ set_name("Shenandoah Uncommit Thread");
+ create_and_start();
+
+ // Allow uncommits. This is managed by the control thread during a GC.
+ _uncommit_allowed.set();
+}
+
+void ShenandoahUncommitThread::run_service() {
+ assert(ShenandoahUncommit, "Thread should only run when uncommit is enabled");
+
+ // poll_interval avoids constantly polling regions for shrinking.
+ // Having an interval 10x lower than the delay would mean we hit the
+ // shrinking with lag of less than 1/10-th of true delay.
+ // ShenandoahUncommitDelay is in millis, but shrink_period is in seconds.
+ const int64_t poll_interval = int64_t(ShenandoahUncommitDelay) / 10;
+ const double shrink_period = double(ShenandoahUncommitDelay) / 1000;
+ bool timed_out = false;
+ while (!should_terminate()) {
+ bool soft_max_changed = _soft_max_changed.try_unset();
+ bool explicit_gc_requested = _explicit_gc_requested.try_unset();
+
+ if (soft_max_changed || explicit_gc_requested || timed_out) {
+ double current = os::elapsedTime();
+ size_t shrink_until = soft_max_changed ? _heap->soft_max_capacity() : _heap->min_capacity();
+ double shrink_before = (soft_max_changed || explicit_gc_requested) ?
+ current :
+ current - shrink_period;
+
+ // Explicit GC tries to uncommit everything down to min capacity.
+ // Soft max change tries to uncommit everything down to target capacity.
+ // Periodic uncommit tries to uncommit suitable regions down to min capacity.
+ if (should_uncommit(shrink_before, shrink_until)) {
+ uncommit(shrink_before, shrink_until);
+ }
+ }
+ {
+ MonitorLocker locker(&_stop_lock, Mutex::_no_safepoint_check_flag);
+ if (!_stop_requested.is_set()) {
+ timed_out = locker.wait(poll_interval);
+ }
+ }
+ }
+}
+
+bool ShenandoahUncommitThread::should_uncommit(double shrink_before, size_t shrink_until) const {
+ // Only start uncommit if the GC is idle, is not trying to run and there is work to do.
+ return _heap->is_idle() && is_uncommit_allowed() && has_work(shrink_before, shrink_until);
+}
+
+bool ShenandoahUncommitThread::has_work(double shrink_before, size_t shrink_until) const {
+ // Determine if there is work to do. This avoids locking the heap if there is
+ // no work available, avoids spamming logs with superfluous logging messages,
+ // and minimises the amount of work while locks are held.
+
+ if (_heap->committed() <= shrink_until) {
+ return false;
+ }
+
+ for (size_t i = 0; i < _heap->num_regions(); i++) {
+ ShenandoahHeapRegion *r = _heap->get_region(i);
+ if (r->is_empty_committed() && (r->empty_time() < shrink_before)) {
+ return true;
+ }
+ }
+
+ return false;
+}
+
+void ShenandoahUncommitThread::notify_soft_max_changed() {
+ assert(is_uncommit_allowed(), "Only notify if uncommit is allowed");
+ if (_soft_max_changed.try_set()) {
+ MonitorLocker locker(&_stop_lock, Mutex::_no_safepoint_check_flag);
+ locker.notify_all();
+ }
+}
+
+void ShenandoahUncommitThread::notify_explicit_gc_requested() {
+ assert(is_uncommit_allowed(), "Only notify if uncommit is allowed");
+ if (_explicit_gc_requested.try_set()) {
+ MonitorLocker locker(&_stop_lock, Mutex::_no_safepoint_check_flag);
+ locker.notify_all();
+ }
+}
+
+bool ShenandoahUncommitThread::is_uncommit_allowed() const {
+ return _uncommit_allowed.is_set();
+}
+
+void ShenandoahUncommitThread::uncommit(double shrink_before, size_t shrink_until) {
+ assert(ShenandoahUncommit, "should be enabled");
+ assert(_uncommit_in_progress.is_unset(), "Uncommit should not be in progress");
+
+ if (!is_uncommit_allowed()) {
+ return;
+ }
+
+ const char* msg = "Concurrent uncommit";
+ EventMark em("%s", msg);
+ double start = os::elapsedTime();
+ log_info(gc, start)("%s", msg);
+
+ _uncommit_in_progress.set();
+
+ // Application allocates from the beginning of the heap, and GC allocates at
+ // the end of it. It is more efficient to uncommit from the end, so that applications
+ // could enjoy the near committed regions. GC allocations are much less frequent,
+ // and therefore can accept the committing costs.
+ size_t count = 0;
+ for (size_t i = _heap->num_regions(); i > 0; i--) {
+ if (!is_uncommit_allowed()) {
+ break;
+ }
+
+ ShenandoahHeapRegion* r = _heap->get_region(i - 1);
+ if (r->is_empty_committed() && (r->empty_time() < shrink_before)) {
+ SuspendibleThreadSetJoiner sts_joiner;
+ ShenandoahHeapLocker locker(_heap->lock());
+ if (r->is_empty_committed()) {
+ if (_heap->committed() < shrink_until + ShenandoahHeapRegion::region_size_bytes()) {
+ break;
+ }
+
+ r->make_uncommitted();
+ count++;
+ }
+ }
+ SpinPause(); // allow allocators to take the lock
+ }
+
+ {
+ MonitorLocker locker(&_uncommit_lock, Mutex::_no_safepoint_check_flag);
+ _uncommit_in_progress.unset();
+ locker.notify_all();
+ }
+
+ if (count > 0) {
+ _heap->notify_heap_changed();
+ }
+
+ double elapsed = os::elapsedTime() - start;
+ log_info(gc)("%s " PROPERFMT " (" PROPERFMT ") %.3fms",
+ msg, PROPERFMTARGS(count * ShenandoahHeapRegion::region_size_bytes()), PROPERFMTARGS(_heap->capacity()),
+ elapsed * MILLIUNITS);
+}
+
+void ShenandoahUncommitThread::stop_service() {
+ MonitorLocker locker(&_stop_lock, Mutex::_safepoint_check_flag);
+ _stop_requested.set();
+ locker.notify_all();
+}
+
+void ShenandoahUncommitThread::forbid_uncommit() {
+ MonitorLocker locker(&_uncommit_lock, Mutex::_no_safepoint_check_flag);
+ _uncommit_allowed.unset();
+ while (_uncommit_in_progress.is_set()) {
+ locker.wait();
+ }
+}
+
+void ShenandoahUncommitThread::allow_uncommit() {
+ _uncommit_allowed.set();
+}
diff --git a/src/hotspot/share/gc/shenandoah/shenandoahUncommitThread.hpp b/src/hotspot/share/gc/shenandoah/shenandoahUncommitThread.hpp
new file mode 100644
index 0000000000000..6c4e26e4e0fd8
--- /dev/null
+++ b/src/hotspot/share/gc/shenandoah/shenandoahUncommitThread.hpp
@@ -0,0 +1,97 @@
+/*
+ * Copyright Amazon.com Inc. or its affiliates. All Rights Reserved.
+ * 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_SHENANDOAH_SHENANDOAHUNCOMMITTHREAD
+#define SHARE_GC_SHENANDOAH_SHENANDOAHUNCOMMITTHREAD
+
+#include "gc/shared/concurrentGCThread.hpp"
+
+class ShenandoahHeap;
+
+class ShenandoahUncommitThread : public ConcurrentGCThread {
+ ShenandoahHeap* const _heap;
+
+ // Indicates that `SoftMaxHeapSize` has changed
+ ShenandoahSharedFlag _soft_max_changed;
+
+ // Indicates that an explicit gc has been requested
+ ShenandoahSharedFlag _explicit_gc_requested;
+
+ // Indicates that the thread should stop and terminate
+ ShenandoahSharedFlag _stop_requested;
+
+ // Indicates whether it is safe to uncommit regions
+ ShenandoahSharedFlag _uncommit_allowed;
+
+ // Indicates that regions are being actively uncommitted
+ ShenandoahSharedFlag _uncommit_in_progress;
+
+ // This lock is used to coordinate stopping and terminating this thread
+ Monitor _stop_lock;
+
+ // This lock is used to coordinate allowing or forbidding regions to be uncommitted
+ Monitor _uncommit_lock;
+
+ // True if there are regions to uncommit and uncommits are allowed
+ bool should_uncommit(double shrink_before, size_t shrink_until) const;
+
+ // True if there are regions that have been empty for longer than ShenandoahUncommitDelay and the committed
+ // memory is higher than soft max capacity or minimum capacity
+ bool has_work(double shrink_before, size_t shrink_until) const;
+
+ // Perform the work of uncommitting empty regions
+ void uncommit(double shrink_before, size_t shrink_until);
+
+ // True if the control thread has allowed this thread to uncommit regions
+ bool is_uncommit_allowed() const;
+
+public:
+ explicit ShenandoahUncommitThread(ShenandoahHeap* heap);
+
+ // Periodically check for regions to uncommit
+ void run_service() override;
+
+ // Wake up this thread and try to uncommit for changed soft max size
+ void notify_soft_max_changed();
+
+ // Wake up this thread and try to uncommit for min heap size
+ void notify_explicit_gc_requested();
+
+ // Wait for uncommit operations to stop, returns immediately if uncommit thread is idle
+ void forbid_uncommit();
+
+ // Allows uncommit operations to happen, does not block
+ void allow_uncommit();
+
+ // True if uncommit is in progress
+ bool is_uncommit_in_progress() {
+ return _uncommit_in_progress.is_set();
+ }
+protected:
+ // Interrupt and stop this thread
+ void stop_service() override;
+};
+
+
+#endif //SHARE_GC_SHENANDOAH_SHENANDOAHUNCOMMITTHREAD
diff --git a/src/hotspot/share/gc/shenandoah/shenandoahUtils.hpp b/src/hotspot/share/gc/shenandoah/shenandoahUtils.hpp
index 190822af9d6bb..fd30279d318a2 100644
--- a/src/hotspot/share/gc/shenandoah/shenandoahUtils.hpp
+++ b/src/hotspot/share/gc/shenandoah/shenandoahUtils.hpp
@@ -242,4 +242,19 @@ class ShenandoahSuspendibleThreadSetLeaver {
}
};
+// Regions cannot be uncommitted when concurrent reset is zeroing out the bitmaps.
+// This CADR class enforces this by forbidding region uncommits while it is in scope.
+class ShenandoahNoUncommitMark : public StackObj {
+ ShenandoahHeap* const _heap;
+public:
+ explicit ShenandoahNoUncommitMark(ShenandoahHeap* heap) : _heap(heap) {
+ _heap->forbid_uncommit();
+ }
+
+ ~ShenandoahNoUncommitMark() {
+ _heap->allow_uncommit();
+ }
+};
+
+
#endif // SHARE_GC_SHENANDOAH_SHENANDOAHUTILS_HPP
diff --git a/src/hotspot/share/memory/heap.cpp b/src/hotspot/share/memory/heap.cpp
index 658ec3e8de773..92a376defa5a5 100644
--- a/src/hotspot/share/memory/heap.cpp
+++ b/src/hotspot/share/memory/heap.cpp
@@ -227,13 +227,11 @@ bool CodeHeap::reserve(ReservedSpace rs, size_t committed_size, size_t segment_s
const size_t committed_segments_size = align_to_page_size(_number_of_committed_segments);
// reserve space for _segmap
- ReservedSpace seg_rs(reserved_segments_size);
+ ReservedSpace seg_rs(reserved_segments_size, mtCode);
if (!_segmap.initialize(seg_rs, committed_segments_size)) {
return false;
}
- MemTracker::record_virtual_memory_tag((address)_segmap.low_boundary(), mtCode);
-
assert(_segmap.committed_size() >= (size_t) _number_of_committed_segments, "could not commit enough space for segment map");
assert(_segmap.reserved_size() >= (size_t) _number_of_reserved_segments , "could not reserve enough space for segment map");
assert(_segmap.reserved_size() >= _segmap.committed_size() , "just checking");
diff --git a/src/hotspot/share/memory/virtualspace.cpp b/src/hotspot/share/memory/virtualspace.cpp
index 614a3ab784bbb..33574f7f5d1ea 100644
--- a/src/hotspot/share/memory/virtualspace.cpp
+++ b/src/hotspot/share/memory/virtualspace.cpp
@@ -45,20 +45,20 @@ ReservedSpace::ReservedSpace() : _base(nullptr), _size(0), _noaccess_prefix(0),
_alignment(0), _special(false), _fd_for_heap(-1), _executable(false) {
}
-ReservedSpace::ReservedSpace(size_t size) : _fd_for_heap(-1) {
+ReservedSpace::ReservedSpace(size_t size, MemTag mem_tag) : _fd_for_heap(-1) {
// Want to use large pages where possible. If the size is
// not large page aligned the mapping will be a mix of
// large and normal pages.
size_t page_size = os::page_size_for_region_unaligned(size, 1);
size_t alignment = os::vm_allocation_granularity();
- initialize(size, alignment, page_size, nullptr, false);
+ initialize(size, alignment, page_size, nullptr, false, mem_tag);
}
ReservedSpace::ReservedSpace(size_t size, size_t preferred_page_size) : _fd_for_heap(-1) {
// When a page size is given we don't want to mix large
// and normal pages. If the size is not a multiple of the
// page size it will be aligned up to achieve this.
- size_t alignment = os::vm_allocation_granularity();;
+ size_t alignment = os::vm_allocation_granularity();
if (preferred_page_size != os::vm_page_size()) {
alignment = MAX2(preferred_page_size, alignment);
size = align_up(size, alignment);
@@ -81,19 +81,19 @@ ReservedSpace::ReservedSpace(char* base, size_t size, size_t alignment, size_t p
}
// Helper method
-static char* attempt_map_or_reserve_memory_at(char* base, size_t size, int fd, bool executable) {
+static char* attempt_map_or_reserve_memory_at(char* base, size_t size, int fd, bool executable, MemTag mem_tag) {
if (fd != -1) {
return os::attempt_map_memory_to_file_at(base, size, fd);
}
- return os::attempt_reserve_memory_at(base, size, executable);
+ return os::attempt_reserve_memory_at(base, size, executable, mem_tag);
}
// Helper method
-static char* map_or_reserve_memory(size_t size, int fd, bool executable) {
+static char* map_or_reserve_memory(size_t size, int fd, bool executable, MemTag mem_tag) {
if (fd != -1) {
return os::map_memory_to_file(size, fd);
}
- return os::reserve_memory(size, executable);
+ return os::reserve_memory(size, executable, mem_tag);
}
// Helper method
@@ -154,7 +154,7 @@ static void log_on_large_pages_failure(char* req_addr, size_t bytes) {
}
static char* reserve_memory(char* requested_address, const size_t size,
- const size_t alignment, int fd, bool exec) {
+ const size_t alignment, int fd, bool exec, MemTag mem_tag) {
char* base;
// If the memory was requested at a particular address, use
// os::attempt_reserve_memory_at() to avoid mapping over something
@@ -163,12 +163,12 @@ static char* reserve_memory(char* requested_address, const size_t size,
assert(is_aligned(requested_address, alignment),
"Requested address " PTR_FORMAT " must be aligned to " SIZE_FORMAT,
p2i(requested_address), alignment);
- base = attempt_map_or_reserve_memory_at(requested_address, size, fd, exec);
+ base = attempt_map_or_reserve_memory_at(requested_address, size, fd, exec, mem_tag);
} else {
// Optimistically assume that the OS returns an aligned base pointer.
// When reserving a large address range, most OSes seem to align to at
// least 64K.
- base = map_or_reserve_memory(size, fd, exec);
+ base = map_or_reserve_memory(size, fd, exec, mem_tag);
// Check alignment constraints. This is only needed when there is
// no requested address.
if (!is_aligned(base, alignment)) {
@@ -220,7 +220,8 @@ void ReservedSpace::reserve(size_t size,
size_t alignment,
size_t page_size,
char* requested_address,
- bool executable) {
+ bool executable,
+ MemTag mem_tag) {
assert(is_aligned(size, alignment), "Size must be aligned to the requested alignment");
// There are basically three different cases that we need to handle below:
@@ -235,7 +236,7 @@ void ReservedSpace::reserve(size_t size,
// When there is a backing file directory for this space then whether
// large pages are allocated is up to the filesystem of the backing file.
// So UseLargePages is not taken into account for this reservation.
- char* base = reserve_memory(requested_address, size, alignment, _fd_for_heap, executable);
+ char* base = reserve_memory(requested_address, size, alignment, _fd_for_heap, executable, mem_tag);
if (base != nullptr) {
initialize_members(base, size, alignment, os::vm_page_size(), true, executable);
}
@@ -266,7 +267,7 @@ void ReservedSpace::reserve(size_t size,
}
// == Case 3 ==
- char* base = reserve_memory(requested_address, size, alignment, -1, executable);
+ char* base = reserve_memory(requested_address, size, alignment, -1, executable, mem_tag);
if (base != nullptr) {
// Successful mapping.
initialize_members(base, size, alignment, page_size, false, executable);
@@ -277,7 +278,8 @@ void ReservedSpace::initialize(size_t size,
size_t alignment,
size_t page_size,
char* requested_address,
- bool executable) {
+ bool executable,
+ MemTag mem_tag) {
const size_t granularity = os::vm_allocation_granularity();
assert((size & (granularity - 1)) == 0,
"size not aligned to os::vm_allocation_granularity()");
@@ -298,7 +300,7 @@ void ReservedSpace::initialize(size_t size,
alignment = MAX2(alignment, os::vm_page_size());
// Reserve the memory.
- reserve(size, alignment, page_size, requested_address, executable);
+ reserve(size, alignment, page_size, requested_address, executable, mem_tag);
// Check that the requested address is used if given.
if (failed_to_reserve_as_requested(_base, requested_address)) {
@@ -424,7 +426,7 @@ void ReservedHeapSpace::try_reserve_heap(size_t size,
p2i(requested_address),
size);
- reserve(size, alignment, page_size, requested_address, false);
+ reserve(size, alignment, page_size, requested_address, false, mtJavaHeap);
// Check alignment constraints.
if (is_reserved() && !is_aligned(_base, _alignment)) {
@@ -610,7 +612,7 @@ void ReservedHeapSpace::initialize_compressed_heap(const size_t size, size_t ali
// Last, desperate try without any placement.
if (_base == nullptr) {
log_trace(gc, heap, coops)("Trying to allocate at address null heap of size " SIZE_FORMAT_X, size + noaccess_prefix);
- initialize(size + noaccess_prefix, alignment, page_size, nullptr, false);
+ initialize(size + noaccess_prefix, alignment, page_size, nullptr, false, mtJavaHeap);
}
}
}
@@ -653,7 +655,7 @@ ReservedHeapSpace::ReservedHeapSpace(size_t size, size_t alignment, size_t page_
ShouldNotReachHere();
#endif // _LP64
} else {
- initialize(size, alignment, page_size, nullptr, false);
+ initialize(size, alignment, page_size, nullptr, false, mtJavaHeap);
}
assert(markWord::encode_pointer_as_mark(_base).decode_pointer() == _base,
@@ -661,10 +663,6 @@ ReservedHeapSpace::ReservedHeapSpace(size_t size, size_t alignment, size_t page_
assert(markWord::encode_pointer_as_mark(&_base[size]).decode_pointer() == &_base[size],
"area must be distinguishable from marks for mark-sweep");
- if (base() != nullptr) {
- MemTracker::record_virtual_memory_tag((address)base(), mtJavaHeap);
- }
-
if (_fd_for_heap != -1) {
::close(_fd_for_heap);
}
@@ -679,8 +677,7 @@ MemRegion ReservedHeapSpace::region() const {
ReservedCodeSpace::ReservedCodeSpace(size_t r_size,
size_t rs_align,
size_t rs_page_size) : ReservedSpace() {
- initialize(r_size, rs_align, rs_page_size, /*requested address*/ nullptr, /*executable*/ true);
- MemTracker::record_virtual_memory_tag((address)base(), mtCode);
+ initialize(r_size, rs_align, rs_page_size, /*requested address*/ nullptr, /*executable*/ true, mtCode);
}
// VirtualSpace
diff --git a/src/hotspot/share/memory/virtualspace.hpp b/src/hotspot/share/memory/virtualspace.hpp
index 022bcabe7536f..6139c3a413f0e 100644
--- a/src/hotspot/share/memory/virtualspace.hpp
+++ b/src/hotspot/share/memory/virtualspace.hpp
@@ -26,6 +26,7 @@
#define SHARE_MEMORY_VIRTUALSPACE_HPP
#include "memory/memRegion.hpp"
+#include "nmt/memTag.hpp"
#include "utilities/globalDefinitions.hpp"
class outputStream;
@@ -61,16 +62,16 @@ class ReservedSpace {
size_t page_size, bool special, bool executable);
void initialize(size_t size, size_t alignment, size_t page_size,
- char* requested_address, bool executable);
+ char* requested_address, bool executable, MemTag mem_tag = mtNone);
void reserve(size_t size, size_t alignment, size_t page_size,
- char* requested_address, bool executable);
+ char* requested_address, bool executable, MemTag mem_tag);
public:
// Constructor
ReservedSpace();
// Initialize the reserved space with the given size. Depending on the size
// a suitable page size and alignment will be used.
- explicit ReservedSpace(size_t size);
+ ReservedSpace(size_t size, MemTag mem_tag);
// Initialize the reserved space with the given size. The preferred_page_size
// is used as the minimum page size/alignment. This may waste some space if
// the given size is not aligned to that value, as the reservation will be
diff --git a/src/hotspot/share/prims/jni.cpp b/src/hotspot/share/prims/jni.cpp
index 7bea3441fa5bf..40d3b5062580a 100644
--- a/src/hotspot/share/prims/jni.cpp
+++ b/src/hotspot/share/prims/jni.cpp
@@ -2402,11 +2402,10 @@ static char* get_bad_address() {
static char* bad_address = nullptr;
if (bad_address == nullptr) {
size_t size = os::vm_allocation_granularity();
- bad_address = os::reserve_memory(size);
+ bad_address = os::reserve_memory(size, false, mtInternal);
if (bad_address != nullptr) {
os::protect_memory(bad_address, size, os::MEM_PROT_READ,
/*is_committed*/false);
- MemTracker::record_virtual_memory_tag((void*)bad_address, mtInternal);
}
}
return bad_address;
diff --git a/src/hotspot/share/prims/whitebox.cpp b/src/hotspot/share/prims/whitebox.cpp
index af5f3cf79cabc..d25ee27c0e116 100644
--- a/src/hotspot/share/prims/whitebox.cpp
+++ b/src/hotspot/share/prims/whitebox.cpp
@@ -711,19 +711,11 @@ WB_ENTRY(void, WB_NMTFree(JNIEnv* env, jobject o, jlong mem))
WB_END
WB_ENTRY(jlong, WB_NMTReserveMemory(JNIEnv* env, jobject o, jlong size))
- jlong addr = 0;
-
- addr = (jlong)(uintptr_t)os::reserve_memory(size);
- MemTracker::record_virtual_memory_tag((address)addr, mtTest);
-
- return addr;
+ return (jlong)(uintptr_t)os::reserve_memory(size, false, mtTest);
WB_END
WB_ENTRY(jlong, WB_NMTAttemptReserveMemoryAt(JNIEnv* env, jobject o, jlong addr, jlong size))
- addr = (jlong)(uintptr_t)os::attempt_reserve_memory_at((char*)(uintptr_t)addr, (size_t)size);
- MemTracker::record_virtual_memory_tag((address)addr, mtTest);
-
- return addr;
+ return (jlong)(uintptr_t)os::attempt_reserve_memory_at((char*)(uintptr_t)addr, (size_t)size, false, mtTest);
WB_END
WB_ENTRY(void, WB_NMTCommitMemory(JNIEnv* env, jobject o, jlong addr, jlong size))
diff --git a/src/hotspot/share/runtime/safepointMechanism.cpp b/src/hotspot/share/runtime/safepointMechanism.cpp
index a6aadf5ebc400..c7e3f55eba355 100644
--- a/src/hotspot/share/runtime/safepointMechanism.cpp
+++ b/src/hotspot/share/runtime/safepointMechanism.cpp
@@ -58,9 +58,8 @@ void SafepointMechanism::default_initialize() {
// Polling page
const size_t page_size = os::vm_page_size();
const size_t allocation_size = 2 * page_size;
- char* polling_page = os::reserve_memory(allocation_size);
- os::commit_memory_or_exit(polling_page, allocation_size, false, "Unable to commit Safepoint polling page");
- MemTracker::record_virtual_memory_tag((address)polling_page, mtSafepoint);
+ char* polling_page = os::reserve_memory(allocation_size, !ExecMem, mtSafepoint);
+ os::commit_memory_or_exit(polling_page, allocation_size, !ExecMem, "Unable to commit Safepoint polling page");
char* bad_page = polling_page;
char* good_page = polling_page + page_size;
diff --git a/src/hotspot/share/utilities/debug.cpp b/src/hotspot/share/utilities/debug.cpp
index 7286f70412ae5..07e93ca5710e7 100644
--- a/src/hotspot/share/utilities/debug.cpp
+++ b/src/hotspot/share/utilities/debug.cpp
@@ -715,10 +715,9 @@ struct TestMultipleStaticAssertFormsInClassScope {
// Support for showing register content on asserts/guarantees.
#ifdef CAN_SHOW_REGISTERS_ON_ASSERT
void initialize_assert_poison() {
- char* page = os::reserve_memory(os::vm_page_size());
+ char* page = os::reserve_memory(os::vm_page_size(), !ExecMem, mtInternal);
if (page) {
- MemTracker::record_virtual_memory_tag(page, mtInternal);
- if (os::commit_memory(page, os::vm_page_size(), false) &&
+ if (os::commit_memory(page, os::vm_page_size(), !ExecMem) &&
os::protect_memory(page, os::vm_page_size(), os::MEM_PROT_NONE)) {
g_assert_poison = page;
g_assert_poison_read_only = page;
diff --git a/src/java.base/share/classes/java/io/ObjectInputStream.java b/src/java.base/share/classes/java/io/ObjectInputStream.java
index 31d0aecf83110..a47d2d5a325a9 100644
--- a/src/java.base/share/classes/java/io/ObjectInputStream.java
+++ b/src/java.base/share/classes/java/io/ObjectInputStream.java
@@ -42,7 +42,6 @@
import jdk.internal.event.DeserializationEvent;
import jdk.internal.misc.Unsafe;
import jdk.internal.util.ByteArray;
-import sun.reflect.misc.ReflectUtil;
/**
* An ObjectInputStream deserializes primitive data and objects previously
@@ -1828,12 +1827,6 @@ private ObjectStreamClass readClassDesc(boolean unshared)
};
}
- private boolean isCustomSubclass() {
- // Return true if this class is a custom subclass of ObjectInputStream
- return getClass().getClassLoader()
- != ObjectInputStream.class.getClassLoader();
- }
-
/**
* Reads in and returns class descriptor for a dynamic proxy class. Sets
* passHandle to proxy class descriptor's assigned handle. If proxy class
@@ -1879,12 +1872,6 @@ private ObjectStreamClass readProxyDesc(boolean unshared)
} else if (!Proxy.isProxyClass(cl)) {
throw new InvalidClassException("Not a proxy");
} else {
- // ReflectUtil.checkProxyPackageAccess makes a test
- // equivalent to isCustomSubclass so there's no need
- // to condition this call to isCustomSubclass == true here.
- ReflectUtil.checkProxyPackageAccess(
- getClass().getClassLoader(),
- cl.getInterfaces());
// Filter the interfaces
for (Class> clazz : cl.getInterfaces()) {
filterCheck(clazz, -1);
@@ -1954,12 +1941,9 @@ private ObjectStreamClass readNonProxyDesc(boolean unshared)
Class> cl = null;
ClassNotFoundException resolveEx = null;
bin.setBlockDataMode(true);
- final boolean checksRequired = isCustomSubclass();
try {
if ((cl = resolveClass(readDesc)) == null) {
resolveEx = new ClassNotFoundException("null class");
- } else if (checksRequired) {
- ReflectUtil.checkPackageAccess(cl);
}
} catch (ClassNotFoundException ex) {
resolveEx = ex;
diff --git a/src/java.base/share/classes/java/io/ObjectOutputStream.java b/src/java.base/share/classes/java/io/ObjectOutputStream.java
index 5225c673705d5..71bda09bd8c8f 100644
--- a/src/java.base/share/classes/java/io/ObjectOutputStream.java
+++ b/src/java.base/share/classes/java/io/ObjectOutputStream.java
@@ -35,7 +35,6 @@
import jdk.internal.util.ByteArray;
import jdk.internal.access.JavaLangAccess;
import jdk.internal.access.SharedSecrets;
-import sun.reflect.misc.ReflectUtil;
import static jdk.internal.util.ModifiedUtf.putChar;
import static jdk.internal.util.ModifiedUtf.utfLen;
@@ -1170,12 +1169,6 @@ private void writeClassDesc(ObjectStreamClass desc, boolean unshared)
}
}
- private boolean isCustomSubclass() {
- // Return true if this class is a custom subclass of ObjectOutputStream
- return getClass().getClassLoader()
- != ObjectOutputStream.class.getClassLoader();
- }
-
/**
* Writes class descriptor representing a dynamic proxy class to stream.
*/
@@ -1193,9 +1186,6 @@ private void writeProxyDesc(ObjectStreamClass desc, boolean unshared)
}
bout.setBlockDataMode(true);
- if (isCustomSubclass()) {
- ReflectUtil.checkPackageAccess(cl);
- }
annotateProxyClass(cl);
bout.setBlockDataMode(false);
bout.writeByte(TC_ENDBLOCKDATA);
@@ -1222,9 +1212,6 @@ private void writeNonProxyDesc(ObjectStreamClass desc, boolean unshared)
Class> cl = desc.forClass();
bout.setBlockDataMode(true);
- if (cl != null && isCustomSubclass()) {
- ReflectUtil.checkPackageAccess(cl);
- }
annotateClass(cl);
bout.setBlockDataMode(false);
bout.writeByte(TC_ENDBLOCKDATA);
diff --git a/src/java.base/share/classes/java/lang/Class.java b/src/java.base/share/classes/java/lang/Class.java
index 23b8ac3fb9093..7929dd1a09f11 100644
--- a/src/java.base/share/classes/java/lang/Class.java
+++ b/src/java.base/share/classes/java/lang/Class.java
@@ -60,7 +60,6 @@
import java.util.Arrays;
import java.util.Collection;
import java.util.HashMap;
-import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
import java.util.List;
@@ -91,7 +90,6 @@
import sun.reflect.generics.repository.ConstructorRepository;
import sun.reflect.generics.scope.ClassScope;
import sun.reflect.annotation.*;
-import sun.reflect.misc.ReflectUtil;
/**
* Instances of the class {@code Class} represent classes and
diff --git a/src/java.base/share/classes/java/lang/classfile/ClassFile.java b/src/java.base/share/classes/java/lang/classfile/ClassFile.java
index db293f415888a..d87d27676bcf8 100644
--- a/src/java.base/share/classes/java/lang/classfile/ClassFile.java
+++ b/src/java.base/share/classes/java/lang/classfile/ClassFile.java
@@ -641,6 +641,12 @@ default List verify(Path path) throws IOException {
/** The class major version of JAVA_24. */
int JAVA_24_VERSION = 68;
+ /**
+ * The class major version of JAVA_25.
+ * @since 25
+ */
+ int JAVA_25_VERSION = 69;
+
/**
* A minor version number indicating a class uses preview features
* of a Java SE version since 12, for major versions {@value
@@ -652,7 +658,7 @@ default List verify(Path path) throws IOException {
* {@return the latest major Java version}
*/
static int latestMajorVersion() {
- return JAVA_24_VERSION;
+ return JAVA_25_VERSION;
}
/**
diff --git a/src/java.base/share/classes/java/lang/reflect/ClassFileFormatVersion.java b/src/java.base/share/classes/java/lang/reflect/ClassFileFormatVersion.java
index 72abe96a55991..b2fa39e166170 100644
--- a/src/java.base/share/classes/java/lang/reflect/ClassFileFormatVersion.java
+++ b/src/java.base/share/classes/java/lang/reflect/ClassFileFormatVersion.java
@@ -318,6 +318,18 @@ public enum ClassFileFormatVersion {
* The Java Virtual Machine Specification, Java SE 24 Edition
*/
RELEASE_24(68),
+
+ /**
+ * The version introduced by the Java Platform, Standard Edition
+ * 25.
+ *
+ * @since 25
+ *
+ * @see
+ * The Java Virtual Machine Specification, Java SE 25 Edition
+ */
+ RELEASE_25(69),
; // Reduce code churn when appending new constants
// Note to maintainers: when adding constants for newer releases,
@@ -333,7 +345,7 @@ private ClassFileFormatVersion(int major) {
* {@return the latest class file format version}
*/
public static ClassFileFormatVersion latest() {
- return RELEASE_24;
+ return RELEASE_25;
}
/**
diff --git a/src/java.base/share/classes/java/lang/reflect/Proxy.java b/src/java.base/share/classes/java/lang/reflect/Proxy.java
index 77f3d3e1e7120..83a1520ce082f 100644
--- a/src/java.base/share/classes/java/lang/reflect/Proxy.java
+++ b/src/java.base/share/classes/java/lang/reflect/Proxy.java
@@ -52,7 +52,6 @@
import jdk.internal.misc.VM;
import jdk.internal.loader.ClassLoaderValue;
import jdk.internal.vm.annotation.Stable;
-import sun.reflect.misc.ReflectUtil;
import static java.lang.invoke.MethodType.methodType;
import static java.lang.module.ModuleDescriptor.Modifier.SYNTHETIC;
@@ -984,7 +983,7 @@ public static InvocationHandler getInvocationHandler(Object proxy)
return ih;
}
- private static final String PROXY_PACKAGE_PREFIX = ReflectUtil.PROXY_PACKAGE;
+ private static final String PROXY_PACKAGE_PREFIX = "com.sun.proxy";
/**
* A cache of Method -> MethodHandle for default methods.
diff --git a/src/java.base/share/classes/java/util/concurrent/ForkJoinPool.java b/src/java.base/share/classes/java/util/concurrent/ForkJoinPool.java
index d51b4ba077064..73fa3eea1bd3a 100644
--- a/src/java.base/share/classes/java/util/concurrent/ForkJoinPool.java
+++ b/src/java.base/share/classes/java/util/concurrent/ForkJoinPool.java
@@ -610,12 +610,11 @@ public class ForkJoinPool extends AbstractExecutorService {
* it tries to deactivate()), giving up (and rescanning) on "ctl"
* contention. To avoid missed signals during deactivation, the
* method rescans and reactivates if there may have been a missed
- * (external) signal during deactivation. To reduce false-alarm
- * reactivations while doing so, we scan multiple times
- * (analogously to method quiescent()) before trying to
- * reactivate. Because idle workers are often not yet blocked
- * (parked), we use a WorkQueue field to advertise that a waiter
- * actually needs unparking upon signal.
+ * signal during deactivation. To reduce false-alarm reactivations
+ * while doing so, we scan multiple times (analogously to method
+ * quiescent()) before trying to reactivate. Because idle workers
+ * are often not yet blocked (parked), we use a WorkQueue field to
+ * advertise that a waiter actually needs unparking upon signal.
*
* Quiescence. Workers scan looking for work, giving up when they
* don't find any, without being sure that none are available.
@@ -1996,7 +1995,7 @@ private int deactivate(WorkQueue w, int phase) {
return IDLE;
int p = phase | IDLE, activePhase = phase + (IDLE << 1);
long pc = ctl, qc = (activePhase & LMASK) | ((pc - RC_UNIT) & UMASK);
- w.stackPred = (int)pc; // set ctl stack link
+ int sp = w.stackPred = (int)pc; // set ctl stack link
w.phase = p;
if (!compareAndSetCtl(pc, qc)) // try to enqueue
return w.phase = phase; // back out on possible signal
@@ -2006,18 +2005,18 @@ private int deactivate(WorkQueue w, int phase) {
(qs = queues) == null || (n = qs.length) <= 0)
return IDLE; // terminating
int prechecks = Math.min(ac, 2); // reactivation threshold
- for (int k = Math.max(n + (n << 1), SPIN_WAITS << 1);;) {
- WorkQueue q; int cap; ForkJoinTask>[] a;
+ for (int k = Math.max(n << 2, SPIN_WAITS << 1);;) {
+ WorkQueue q; int cap; ForkJoinTask>[] a; long c;
if (w.phase == activePhase)
return activePhase;
if (--k < 0)
return awaitWork(w, p); // block, drop, or exit
- if ((k & 1) != 0)
- Thread.onSpinWait(); // interleave spins and rechecks
- else if ((q = qs[k & (n - 1)]) != null &&
- (a = q.array) != null && (cap = a.length) > 0 &&
+ if ((q = qs[k & (n - 1)]) == null)
+ Thread.onSpinWait();
+ else if ((a = q.array) != null && (cap = a.length) > 0 &&
a[q.base & (cap - 1)] != null && --prechecks < 0 &&
- ctl == qc && compareAndSetCtl(qc, pc))
+ (int)(c = ctl) == activePhase &&
+ compareAndSetCtl(c, (sp & LMASK) | ((c + RC_UNIT) & UMASK)))
return w.phase = activePhase; // reactivate
}
}
diff --git a/src/java.base/share/classes/jdk/internal/org/objectweb/asm/ClassReader.java b/src/java.base/share/classes/jdk/internal/org/objectweb/asm/ClassReader.java
index f8cc49fe25e9d..91995e44ce6cc 100644
--- a/src/java.base/share/classes/jdk/internal/org/objectweb/asm/ClassReader.java
+++ b/src/java.base/share/classes/jdk/internal/org/objectweb/asm/ClassReader.java
@@ -227,7 +227,7 @@ public ClassReader(
this.b = classFileBuffer;
// Check the class' major_version. This field is after the magic and minor_version fields, which
// use 4 and 2 bytes respectively.
- if (checkClassVersion && readShort(classFileOffset + 6) > Opcodes.V24) {
+ if (checkClassVersion && readShort(classFileOffset + 6) > Opcodes.V25) {
throw new IllegalArgumentException(
"Unsupported class file major version " + readShort(classFileOffset + 6));
}
diff --git a/src/java.base/share/classes/jdk/internal/org/objectweb/asm/Opcodes.java b/src/java.base/share/classes/jdk/internal/org/objectweb/asm/Opcodes.java
index b51c8978061fd..12ac4e0a41710 100644
--- a/src/java.base/share/classes/jdk/internal/org/objectweb/asm/Opcodes.java
+++ b/src/java.base/share/classes/jdk/internal/org/objectweb/asm/Opcodes.java
@@ -314,6 +314,7 @@ public interface Opcodes {
int V22 = 0 << 16 | 66;
int V23 = 0 << 16 | 67;
int V24 = 0 << 16 | 68;
+ int V25 = 0 << 16 | 69;
/**
* Version flag indicating that the class is using 'preview' features.
diff --git a/src/java.base/share/classes/sun/reflect/generics/reflectiveObjects/TypeVariableImpl.java b/src/java.base/share/classes/sun/reflect/generics/reflectiveObjects/TypeVariableImpl.java
index 7f2829eda2004..75750d38f2fab 100644
--- a/src/java.base/share/classes/sun/reflect/generics/reflectiveObjects/TypeVariableImpl.java
+++ b/src/java.base/share/classes/sun/reflect/generics/reflectiveObjects/TypeVariableImpl.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2023, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2024, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -29,7 +29,6 @@
import java.lang.reflect.AnnotatedType;
import java.lang.reflect.Constructor;
import java.lang.reflect.GenericDeclaration;
-import java.lang.reflect.Member;
import java.lang.reflect.Method;
import java.lang.reflect.Type;
import java.lang.reflect.TypeVariable;
@@ -41,7 +40,6 @@
import sun.reflect.annotation.AnnotationType;
import sun.reflect.generics.factory.GenericsFactory;
import sun.reflect.generics.tree.FieldTypeSignature;
-import sun.reflect.misc.ReflectUtil;
/**
* Implementation of {@code java.lang.reflect.TypeVariable} interface
@@ -135,13 +133,9 @@ public Type[] getBounds() {
* @since 1.5
*/
public D getGenericDeclaration() {
- if (genericDeclaration instanceof Class> c)
- ReflectUtil.checkPackageAccess(c);
- else if ((genericDeclaration instanceof Method) ||
- (genericDeclaration instanceof Constructor))
- ReflectUtil.conservativeCheckMemberAccess((Member)genericDeclaration);
- else
- throw new AssertionError("Unexpected kind of GenericDeclaration");
+ assert genericDeclaration instanceof Class> ||
+ genericDeclaration instanceof Method ||
+ genericDeclaration instanceof Constructor : "Unexpected kind of GenericDeclaration";
return genericDeclaration;
}
diff --git a/src/java.base/share/classes/sun/reflect/misc/ConstructorUtil.java b/src/java.base/share/classes/sun/reflect/misc/ConstructorUtil.java
deleted file mode 100644
index e0e4233c8a5da..0000000000000
--- a/src/java.base/share/classes/sun/reflect/misc/ConstructorUtil.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (c) 2005, 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. 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.reflect.misc;
-
-import java.lang.reflect.Constructor;
-
-public final class ConstructorUtil {
-
- private ConstructorUtil() {
- }
-
- public static Constructor> getConstructor(Class> cls, Class>[] params)
- throws NoSuchMethodException {
- ReflectUtil.checkPackageAccess(cls);
- return cls.getConstructor(params);
- }
-
- public static Constructor>[] getConstructors(Class> cls) {
- ReflectUtil.checkPackageAccess(cls);
- return cls.getConstructors();
- }
-}
diff --git a/src/java.base/share/classes/sun/reflect/misc/FieldUtil.java b/src/java.base/share/classes/sun/reflect/misc/FieldUtil.java
deleted file mode 100644
index 705597c5ecba8..0000000000000
--- a/src/java.base/share/classes/sun/reflect/misc/FieldUtil.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 2005, 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. 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.reflect.misc;
-
-import java.lang.reflect.Field;
-
-/*
- * Create a trampoline class.
- */
-public final class FieldUtil {
-
- private FieldUtil() {
- }
-
- public static Field getField(Class> cls, String name)
- throws NoSuchFieldException {
- ReflectUtil.checkPackageAccess(cls);
- return cls.getField(name);
- }
-
- public static Field[] getFields(Class> cls) {
- ReflectUtil.checkPackageAccess(cls);
- return cls.getFields();
- }
-}
diff --git a/src/java.base/share/classes/sun/reflect/misc/MethodUtil.java b/src/java.base/share/classes/sun/reflect/misc/MethodUtil.java
index fb03b68db1c66..8d950c9a81888 100644
--- a/src/java.base/share/classes/sun/reflect/misc/MethodUtil.java
+++ b/src/java.base/share/classes/sun/reflect/misc/MethodUtil.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2005, 2023, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2024, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -79,15 +79,9 @@ private MethodUtil() {
public static Method getMethod(Class> cls, String name, Class>[] args)
throws NoSuchMethodException {
- ReflectUtil.checkPackageAccess(cls);
return cls.getMethod(name, args);
}
- public static Method[] getMethods(Class> cls) {
- ReflectUtil.checkPackageAccess(cls);
- return cls.getMethods();
- }
-
/*
* Bounce through the trampoline.
*/
@@ -140,7 +134,6 @@ protected synchronized Class> loadClass(String name, boolean resolve)
throws ClassNotFoundException
{
// First, check if the class has already been loaded
- ReflectUtil.checkPackageAccess(name);
Class> c = findLoadedClass(name);
if (c == null) {
try {
diff --git a/src/java.base/share/classes/sun/reflect/misc/ReflectUtil.java b/src/java.base/share/classes/sun/reflect/misc/ReflectUtil.java
index 86eadc2b2eea1..812e77a0a82d0 100644
--- a/src/java.base/share/classes/sun/reflect/misc/ReflectUtil.java
+++ b/src/java.base/share/classes/sun/reflect/misc/ReflectUtil.java
@@ -25,10 +25,6 @@
package sun.reflect.misc;
-import java.lang.reflect.Member;
-import java.lang.reflect.Method;
-import java.lang.reflect.Modifier;
-import java.lang.reflect.Proxy;
import jdk.internal.reflect.Reflection;
public final class ReflectUtil {
@@ -67,112 +63,4 @@ public static void ensureMemberAccess(Class> currentClass,
target == null ? null : target.getClass(),
modifiers);
}
-
- /**
- * Does nothing.
- */
- public static void conservativeCheckMemberAccess(Member m) {
- }
-
- /**
- * Does nothing.
- */
- public static void checkPackageAccess(Class> clazz) {
- }
-
- /**
- * Does nothing
- */
- public static void checkPackageAccess(String name) {
- }
-
- /**
- * Returns true.
- */
- public static boolean isPackageAccessible(Class> clazz) {
- return true;
- }
-
- /**
- * Returns false.
- */
- public static boolean needsPackageAccessCheck(ClassLoader from, ClassLoader to) {
- return false;
- }
-
- /**
- * Does nothing
- */
- public static void checkProxyPackageAccess(Class> clazz) {
- }
-
- /**
- * Does nothing.
- */
- public static void checkProxyPackageAccess(ClassLoader ccl,
- Class>... interfaces) {
- }
-
- // Note that bytecode instrumentation tools may exclude 'sun.*'
- // classes but not generated proxy classes and so keep it in com.sun.*
- public static final String PROXY_PACKAGE = "com.sun.proxy";
-
- /**
- * Test if the given class is a proxy class that implements
- * non-public interface. Such proxy class may be in a non-restricted
- * package that bypasses checkPackageAccess.
- */
- public static boolean isNonPublicProxyClass(Class> cls) {
- if (!Proxy.isProxyClass(cls)) {
- return false;
- }
- return !Modifier.isPublic(cls.getModifiers());
- }
-
- /**
- * Check if the given method is a method declared in the proxy interface
- * implemented by the given proxy instance.
- *
- * @param proxy a proxy instance
- * @param method an interface method dispatched to a InvocationHandler
- *
- * @throws IllegalArgumentException if the given proxy or method is invalid.
- */
- public static void checkProxyMethod(Object proxy, Method method) {
- // check if it is a valid proxy instance
- if (proxy == null || !Proxy.isProxyClass(proxy.getClass())) {
- throw new IllegalArgumentException("Not a Proxy instance");
- }
- if (Modifier.isStatic(method.getModifiers())) {
- throw new IllegalArgumentException("Can't handle static method");
- }
-
- Class> c = method.getDeclaringClass();
- if (c == Object.class) {
- String name = method.getName();
- if (name.equals("hashCode") || name.equals("equals") || name.equals("toString")) {
- return;
- }
- }
-
- if (isSuperInterface(proxy.getClass(), c)) {
- return;
- }
-
- // disallow any method not declared in one of the proxy interfaces
- throw new IllegalArgumentException("Can't handle: " + method);
- }
-
- private static boolean isSuperInterface(Class> c, Class> intf) {
- for (Class> i : c.getInterfaces()) {
- if (i == intf) {
- return true;
- }
- if (isSuperInterface(i, intf)) {
- return true;
- }
- }
- return false;
- }
-
}
diff --git a/src/java.compiler/share/classes/javax/lang/model/SourceVersion.java b/src/java.compiler/share/classes/javax/lang/model/SourceVersion.java
index 59461b54a2bba..9260ce532f160 100644
--- a/src/java.compiler/share/classes/javax/lang/model/SourceVersion.java
+++ b/src/java.compiler/share/classes/javax/lang/model/SourceVersion.java
@@ -444,6 +444,18 @@ public enum SourceVersion {
* The Java Language Specification, Java SE 24 Edition
*/
RELEASE_24,
+
+ /**
+ * The version introduced by the Java Platform, Standard Edition
+ * 25.
+ *
+ * @since 25
+ *
+ * @see
+ * The Java Language Specification, Java SE 25 Edition
+ */
+ RELEASE_25,
; // Reduce code churn when appending new constants
// Note that when adding constants for newer releases, the
@@ -453,7 +465,7 @@ public enum SourceVersion {
* {@return the latest source version that can be modeled}
*/
public static SourceVersion latest() {
- return RELEASE_24;
+ return RELEASE_25;
}
private static final SourceVersion latestSupported = getLatestSupported();
@@ -468,7 +480,7 @@ public static SourceVersion latest() {
private static SourceVersion getLatestSupported() {
int intVersion = Runtime.version().feature();
return (intVersion >= 11) ?
- valueOf("RELEASE_" + Math.min(24, intVersion)):
+ valueOf("RELEASE_" + Math.min(25, intVersion)):
RELEASE_10;
}
diff --git a/src/java.compiler/share/classes/javax/lang/model/util/AbstractAnnotationValueVisitor14.java b/src/java.compiler/share/classes/javax/lang/model/util/AbstractAnnotationValueVisitor14.java
index 8940edd685f5a..4d36781c58488 100644
--- a/src/java.compiler/share/classes/javax/lang/model/util/AbstractAnnotationValueVisitor14.java
+++ b/src/java.compiler/share/classes/javax/lang/model/util/AbstractAnnotationValueVisitor14.java
@@ -44,7 +44,7 @@
* @see AbstractAnnotationValueVisitor9
* @since 14
*/
-@SupportedSourceVersion(RELEASE_24)
+@SupportedSourceVersion(RELEASE_25)
public abstract class AbstractAnnotationValueVisitor14 extends AbstractAnnotationValueVisitor9 {
/**
diff --git a/src/java.compiler/share/classes/javax/lang/model/util/AbstractAnnotationValueVisitorPreview.java b/src/java.compiler/share/classes/javax/lang/model/util/AbstractAnnotationValueVisitorPreview.java
index 724ebe593790c..4afcc7fbf1db3 100644
--- a/src/java.compiler/share/classes/javax/lang/model/util/AbstractAnnotationValueVisitorPreview.java
+++ b/src/java.compiler/share/classes/javax/lang/model/util/AbstractAnnotationValueVisitorPreview.java
@@ -50,7 +50,7 @@
* @see AbstractAnnotationValueVisitor14
* @since 23
*/
-@SupportedSourceVersion(RELEASE_24)
+@SupportedSourceVersion(RELEASE_25)
@PreviewFeature(feature=PreviewFeature.Feature.LANGUAGE_MODEL, reflective=true)
public abstract class AbstractAnnotationValueVisitorPreview extends AbstractAnnotationValueVisitor14 {
diff --git a/src/java.compiler/share/classes/javax/lang/model/util/AbstractElementVisitor14.java b/src/java.compiler/share/classes/javax/lang/model/util/AbstractElementVisitor14.java
index fb4ea7681ccae..3a57ef18c5bb2 100644
--- a/src/java.compiler/share/classes/javax/lang/model/util/AbstractElementVisitor14.java
+++ b/src/java.compiler/share/classes/javax/lang/model/util/AbstractElementVisitor14.java
@@ -50,7 +50,7 @@
* @see AbstractElementVisitor9
* @since 16
*/
-@SupportedSourceVersion(RELEASE_24)
+@SupportedSourceVersion(RELEASE_25)
public abstract class AbstractElementVisitor14 extends AbstractElementVisitor9 {
/**
* Constructor for concrete subclasses to call.
diff --git a/src/java.compiler/share/classes/javax/lang/model/util/AbstractElementVisitorPreview.java b/src/java.compiler/share/classes/javax/lang/model/util/AbstractElementVisitorPreview.java
index 7297e7c0c7b26..b9642b203fe10 100644
--- a/src/java.compiler/share/classes/javax/lang/model/util/AbstractElementVisitorPreview.java
+++ b/src/java.compiler/share/classes/javax/lang/model/util/AbstractElementVisitorPreview.java
@@ -53,7 +53,7 @@
* @see AbstractElementVisitor14
* @since 23
*/
-@SupportedSourceVersion(RELEASE_24)
+@SupportedSourceVersion(RELEASE_25)
@PreviewFeature(feature=PreviewFeature.Feature.LANGUAGE_MODEL, reflective=true)
public abstract class AbstractElementVisitorPreview extends AbstractElementVisitor14 {
/**
diff --git a/src/java.compiler/share/classes/javax/lang/model/util/AbstractTypeVisitor14.java b/src/java.compiler/share/classes/javax/lang/model/util/AbstractTypeVisitor14.java
index ff5fb44e1f1f2..eb96f4abb997a 100644
--- a/src/java.compiler/share/classes/javax/lang/model/util/AbstractTypeVisitor14.java
+++ b/src/java.compiler/share/classes/javax/lang/model/util/AbstractTypeVisitor14.java
@@ -47,7 +47,7 @@
* @see AbstractTypeVisitor9
* @since 14
*/
-@SupportedSourceVersion(RELEASE_24)
+@SupportedSourceVersion(RELEASE_25)
public abstract class AbstractTypeVisitor14 extends AbstractTypeVisitor9 {
/**
* Constructor for concrete subclasses to call.
diff --git a/src/java.compiler/share/classes/javax/lang/model/util/AbstractTypeVisitorPreview.java b/src/java.compiler/share/classes/javax/lang/model/util/AbstractTypeVisitorPreview.java
index 823bad0748acd..74b007356d483 100644
--- a/src/java.compiler/share/classes/javax/lang/model/util/AbstractTypeVisitorPreview.java
+++ b/src/java.compiler/share/classes/javax/lang/model/util/AbstractTypeVisitorPreview.java
@@ -53,7 +53,7 @@
* @see AbstractTypeVisitor14
* @since 23
*/
-@SupportedSourceVersion(RELEASE_24)
+@SupportedSourceVersion(RELEASE_25)
@PreviewFeature(feature=PreviewFeature.Feature.LANGUAGE_MODEL, reflective=true)
public abstract class AbstractTypeVisitorPreview extends AbstractTypeVisitor14 {
/**
diff --git a/src/java.compiler/share/classes/javax/lang/model/util/ElementKindVisitor14.java b/src/java.compiler/share/classes/javax/lang/model/util/ElementKindVisitor14.java
index d52b62e8e9f5d..d7941d6e15392 100644
--- a/src/java.compiler/share/classes/javax/lang/model/util/ElementKindVisitor14.java
+++ b/src/java.compiler/share/classes/javax/lang/model/util/ElementKindVisitor14.java
@@ -61,7 +61,7 @@
* @see ElementKindVisitor9
* @since 16
*/
-@SupportedSourceVersion(RELEASE_24)
+@SupportedSourceVersion(RELEASE_25)
public class ElementKindVisitor14 extends ElementKindVisitor9 {
/**
* Constructor for concrete subclasses; uses {@code null} for the
diff --git a/src/java.compiler/share/classes/javax/lang/model/util/ElementKindVisitorPreview.java b/src/java.compiler/share/classes/javax/lang/model/util/ElementKindVisitorPreview.java
index 71d5f15fc85b9..868e89c23eb02 100644
--- a/src/java.compiler/share/classes/javax/lang/model/util/ElementKindVisitorPreview.java
+++ b/src/java.compiler/share/classes/javax/lang/model/util/ElementKindVisitorPreview.java
@@ -67,7 +67,7 @@
* @see ElementKindVisitor14
* @since 23
*/
-@SupportedSourceVersion(RELEASE_24)
+@SupportedSourceVersion(RELEASE_25)
@PreviewFeature(feature=PreviewFeature.Feature.LANGUAGE_MODEL, reflective=true)
public class ElementKindVisitorPreview extends ElementKindVisitor14 {
/**
diff --git a/src/java.compiler/share/classes/javax/lang/model/util/ElementScanner14.java b/src/java.compiler/share/classes/javax/lang/model/util/ElementScanner14.java
index 2f6fb0e03a0d7..e0c05ab228eff 100644
--- a/src/java.compiler/share/classes/javax/lang/model/util/ElementScanner14.java
+++ b/src/java.compiler/share/classes/javax/lang/model/util/ElementScanner14.java
@@ -77,7 +77,7 @@
* @see ElementScanner9
* @since 16
*/
-@SupportedSourceVersion(RELEASE_24)
+@SupportedSourceVersion(RELEASE_25)
public class ElementScanner14 extends ElementScanner9 {
/**
* Constructor for concrete subclasses; uses {@code null} for the
diff --git a/src/java.compiler/share/classes/javax/lang/model/util/ElementScannerPreview.java b/src/java.compiler/share/classes/javax/lang/model/util/ElementScannerPreview.java
index 85c30afcf2bc2..6d80aa8c66182 100644
--- a/src/java.compiler/share/classes/javax/lang/model/util/ElementScannerPreview.java
+++ b/src/java.compiler/share/classes/javax/lang/model/util/ElementScannerPreview.java
@@ -81,7 +81,7 @@
* @see ElementScanner14
* @since 23
*/
-@SupportedSourceVersion(RELEASE_24)
+@SupportedSourceVersion(RELEASE_25)
@PreviewFeature(feature=PreviewFeature.Feature.LANGUAGE_MODEL, reflective=true)
public class ElementScannerPreview extends ElementScanner14 {
/**
diff --git a/src/java.compiler/share/classes/javax/lang/model/util/SimpleAnnotationValueVisitor14.java b/src/java.compiler/share/classes/javax/lang/model/util/SimpleAnnotationValueVisitor14.java
index e0d36308454c1..4682e2a7ee84e 100644
--- a/src/java.compiler/share/classes/javax/lang/model/util/SimpleAnnotationValueVisitor14.java
+++ b/src/java.compiler/share/classes/javax/lang/model/util/SimpleAnnotationValueVisitor14.java
@@ -52,7 +52,7 @@
* @see SimpleAnnotationValueVisitor9
* @since 14
*/
-@SupportedSourceVersion(RELEASE_24)
+@SupportedSourceVersion(RELEASE_25)
public class SimpleAnnotationValueVisitor14 extends SimpleAnnotationValueVisitor9 {
/**
* Constructor for concrete subclasses; uses {@code null} for the
diff --git a/src/java.compiler/share/classes/javax/lang/model/util/SimpleAnnotationValueVisitorPreview.java b/src/java.compiler/share/classes/javax/lang/model/util/SimpleAnnotationValueVisitorPreview.java
index c0444c91060a2..a477f33017c95 100644
--- a/src/java.compiler/share/classes/javax/lang/model/util/SimpleAnnotationValueVisitorPreview.java
+++ b/src/java.compiler/share/classes/javax/lang/model/util/SimpleAnnotationValueVisitorPreview.java
@@ -58,7 +58,7 @@
* @see SimpleAnnotationValueVisitor14
* @since 23
*/
-@SupportedSourceVersion(RELEASE_24)
+@SupportedSourceVersion(RELEASE_25)
@PreviewFeature(feature=PreviewFeature.Feature.LANGUAGE_MODEL, reflective=true)
public class SimpleAnnotationValueVisitorPreview extends SimpleAnnotationValueVisitor14 {
/**
diff --git a/src/java.compiler/share/classes/javax/lang/model/util/SimpleElementVisitor14.java b/src/java.compiler/share/classes/javax/lang/model/util/SimpleElementVisitor14.java
index 8c47818ab3042..db97e59152f94 100644
--- a/src/java.compiler/share/classes/javax/lang/model/util/SimpleElementVisitor14.java
+++ b/src/java.compiler/share/classes/javax/lang/model/util/SimpleElementVisitor14.java
@@ -58,7 +58,7 @@
* @see SimpleElementVisitor9
* @since 16
*/
-@SupportedSourceVersion(RELEASE_24)
+@SupportedSourceVersion(RELEASE_25)
public class SimpleElementVisitor14 extends SimpleElementVisitor9 {
/**
* Constructor for concrete subclasses; uses {@code null} for the
diff --git a/src/java.compiler/share/classes/javax/lang/model/util/SimpleElementVisitorPreview.java b/src/java.compiler/share/classes/javax/lang/model/util/SimpleElementVisitorPreview.java
index 79da686ee0869..0d9914f3852ef 100644
--- a/src/java.compiler/share/classes/javax/lang/model/util/SimpleElementVisitorPreview.java
+++ b/src/java.compiler/share/classes/javax/lang/model/util/SimpleElementVisitorPreview.java
@@ -61,7 +61,7 @@
* @see SimpleElementVisitor14
* @since 23
*/
-@SupportedSourceVersion(RELEASE_24)
+@SupportedSourceVersion(RELEASE_25)
@PreviewFeature(feature=PreviewFeature.Feature.LANGUAGE_MODEL, reflective=true)
public class SimpleElementVisitorPreview extends SimpleElementVisitor14 {
/**
diff --git a/src/java.compiler/share/classes/javax/lang/model/util/SimpleTypeVisitor14.java b/src/java.compiler/share/classes/javax/lang/model/util/SimpleTypeVisitor14.java
index 7ee6c25526d0f..3f962137987dc 100644
--- a/src/java.compiler/share/classes/javax/lang/model/util/SimpleTypeVisitor14.java
+++ b/src/java.compiler/share/classes/javax/lang/model/util/SimpleTypeVisitor14.java
@@ -56,7 +56,7 @@
* @see SimpleTypeVisitor9
* @since 14
*/
-@SupportedSourceVersion(RELEASE_24)
+@SupportedSourceVersion(RELEASE_25)
public class SimpleTypeVisitor14 extends SimpleTypeVisitor9 {
/**
* Constructor for concrete subclasses; uses {@code null} for the
diff --git a/src/java.compiler/share/classes/javax/lang/model/util/SimpleTypeVisitorPreview.java b/src/java.compiler/share/classes/javax/lang/model/util/SimpleTypeVisitorPreview.java
index 1efbe7108370c..13a0ad41d7ed8 100644
--- a/src/java.compiler/share/classes/javax/lang/model/util/SimpleTypeVisitorPreview.java
+++ b/src/java.compiler/share/classes/javax/lang/model/util/SimpleTypeVisitorPreview.java
@@ -62,7 +62,7 @@
* @see SimpleTypeVisitor14
* @since 23
*/
-@SupportedSourceVersion(RELEASE_24)
+@SupportedSourceVersion(RELEASE_25)
@PreviewFeature(feature=PreviewFeature.Feature.LANGUAGE_MODEL, reflective=true)
public class SimpleTypeVisitorPreview extends SimpleTypeVisitor14 {
/**
diff --git a/src/java.compiler/share/classes/javax/lang/model/util/TypeKindVisitor14.java b/src/java.compiler/share/classes/javax/lang/model/util/TypeKindVisitor14.java
index 9c86f855564d6..57d43e77500b5 100644
--- a/src/java.compiler/share/classes/javax/lang/model/util/TypeKindVisitor14.java
+++ b/src/java.compiler/share/classes/javax/lang/model/util/TypeKindVisitor14.java
@@ -61,7 +61,7 @@
* @see TypeKindVisitor9
* @since 14
*/
-@SupportedSourceVersion(RELEASE_24)
+@SupportedSourceVersion(RELEASE_25)
public class TypeKindVisitor14 extends TypeKindVisitor9 {
/**
* Constructor for concrete subclasses to call; uses {@code null}
diff --git a/src/java.compiler/share/classes/javax/lang/model/util/TypeKindVisitorPreview.java b/src/java.compiler/share/classes/javax/lang/model/util/TypeKindVisitorPreview.java
index 70e0498f5658b..3ae19353a0bbb 100644
--- a/src/java.compiler/share/classes/javax/lang/model/util/TypeKindVisitorPreview.java
+++ b/src/java.compiler/share/classes/javax/lang/model/util/TypeKindVisitorPreview.java
@@ -66,7 +66,7 @@
* @see TypeKindVisitor14
* @since 23
*/
-@SupportedSourceVersion(RELEASE_24)
+@SupportedSourceVersion(RELEASE_25)
@PreviewFeature(feature=PreviewFeature.Feature.LANGUAGE_MODEL, reflective=true)
public class TypeKindVisitorPreview extends TypeKindVisitor14 {
/**
diff --git a/src/java.desktop/macosx/classes/com/apple/laf/AquaCaret.java b/src/java.desktop/macosx/classes/com/apple/laf/AquaCaret.java
index 9b0981aa8b29a..3c1b147d1eab4 100644
--- a/src/java.desktop/macosx/classes/com/apple/laf/AquaCaret.java
+++ b/src/java.desktop/macosx/classes/com/apple/laf/AquaCaret.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2024, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -189,20 +189,25 @@ protected synchronized void damage(final Rectangle r) {
// intersection of the caret rectangle and the component less the border, if any.
final Rectangle caretRect = new Rectangle(x, y, width, height);
final Border border = getComponent().getBorder();
- if (border != null) {
- final Rectangle alloc = getComponent().getBounds();
- alloc.x = alloc.y = 0;
+ final Rectangle alloc = getComponent().getBounds();
+ alloc.x = alloc.y = 0;
+ if (border != null && border.isBorderOpaque()) {
final Insets borderInsets = border.getBorderInsets(getComponent());
alloc.x += borderInsets.left;
alloc.y += borderInsets.top;
alloc.width -= borderInsets.left + borderInsets.right;
alloc.height -= borderInsets.top + borderInsets.bottom;
Rectangle2D.intersect(caretRect, alloc, caretRect);
+ x = caretRect.x;
+ y = caretRect.y;
+ width = Math.max(caretRect.width, 1);
+ height = Math.max(caretRect.height, 1);
+ } else {
+ x = alloc.x;
+ y = alloc.y;
+ width = alloc.width;
+ height = alloc.height;
}
- x = caretRect.x;
- y = caretRect.y;
- width = Math.max(caretRect.width, 1);
- height = Math.max(caretRect.height, 1);
repaint();
}
diff --git a/src/java.management/share/classes/com/sun/jmx/mbeanserver/MBeanInstantiator.java b/src/java.management/share/classes/com/sun/jmx/mbeanserver/MBeanInstantiator.java
index 53eeb721a13c2..b1fcf7999c620 100644
--- a/src/java.management/share/classes/com/sun/jmx/mbeanserver/MBeanInstantiator.java
+++ b/src/java.management/share/classes/com/sun/jmx/mbeanserver/MBeanInstantiator.java
@@ -46,7 +46,6 @@
import javax.management.RuntimeErrorException;
import javax.management.RuntimeMBeanException;
import javax.management.RuntimeOperationsException;
-import sun.reflect.misc.ConstructorUtil;
/**
* Implements the MBeanInstantiator interface. Provides methods for
@@ -681,7 +680,7 @@ static Class>[] loadSignatureClasses(String signature[],
private Constructor> findConstructor(Class> c, Class>[] params) {
try {
- return ConstructorUtil.getConstructor(c, params);
+ return c.getConstructor(params);
} catch (Exception e) {
return null;
}
diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Source.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Source.java
index 572a7b126750c..f1c25d032d05c 100644
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Source.java
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Source.java
@@ -148,6 +148,11 @@ public enum Source {
* 24, tbd
*/
JDK24("24"),
+
+ /**
+ * 25, tbd
+ */
+ JDK25("25"),
; // Reduce code churn when appending new constants
private static final Context.Key sourceKey = new Context.Key<>();
@@ -200,6 +205,7 @@ public boolean isSupported() {
public Target requiredTarget() {
return switch(this) {
+ case JDK25 -> Target.JDK1_25;
case JDK24 -> Target.JDK1_24;
case JDK23 -> Target.JDK1_23;
case JDK22 -> Target.JDK1_22;
@@ -351,6 +357,7 @@ public static SourceVersion toSourceVersion(Source source) {
case JDK22 -> RELEASE_22;
case JDK23 -> RELEASE_23;
case JDK24 -> RELEASE_24;
+ case JDK25 -> RELEASE_25;
default -> null;
};
}
diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/ClassFile.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/ClassFile.java
index c7e71f74d8a78..202d92f63bc61 100644
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/ClassFile.java
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/ClassFile.java
@@ -128,6 +128,7 @@ public enum Version {
V66(66, 0), // JDK 22
V67(67, 0), // JDK 23
V68(68, 0), // JDK 24
+ V69(69, 0), // JDK 25
; // Reduce code churn when appending new constants
Version(int major, int minor) {
this.major = major;
diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/Target.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/Target.java
index b7449cd0577f0..90f235fff04bc 100644
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/Target.java
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/Target.java
@@ -107,6 +107,9 @@ public enum Target {
/** JDK 24. */
JDK1_24("24", 68, 0),
+
+ /** JDK 25. */
+ JDK1_25("25", 69, 0),
; // Reduce code churn when appending new constants
private static final Context.Key targetKey = new Context.Key<>();
diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/processing/PrintingProcessor.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/processing/PrintingProcessor.java
index d0eee6d6195c7..7aca585f37ef5 100644
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/processing/PrintingProcessor.java
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/processing/PrintingProcessor.java
@@ -55,7 +55,7 @@
* deletion without notice.
*/
@SupportedAnnotationTypes("*")
-@SupportedSourceVersion(SourceVersion.RELEASE_24)
+@SupportedSourceVersion(SourceVersion.RELEASE_25)
public class PrintingProcessor extends AbstractProcessor {
PrintWriter writer;
diff --git a/src/jdk.compiler/share/data/symbols/java.base-O.sym.txt b/src/jdk.compiler/share/data/symbols/java.base-O.sym.txt
new file mode 100644
index 0000000000000..8ce4d000efa54
--- /dev/null
+++ b/src/jdk.compiler/share/data/symbols/java.base-O.sym.txt
@@ -0,0 +1,3713 @@
+#
+# Copyright (c) 2024, Oracle and/or its affiliates. All rights reserved.
+# 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/classfile,java/lang/classfile/attribute,java/lang/classfile/components,java/lang/classfile/constantpool,java/lang/classfile/instruction,java/lang/constant,java/lang/foreign,java/lang/invoke,java/lang/module,java/lang/ref,java/lang/reflect,java/lang/runtime,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/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/random,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,jdk/internal/event[jdk.jfr],jdk/internal/javac[java.compiler\u005C;u002C;java.desktop\u005C;u002C;java.se\u005C;u002C;jdk.compiler\u005C;u002C;jdk.incubator.vector\u005C;u002C;jdk.jartool\u005C;u002C;jdk.jdeps\u005C;u002C;jdk.jfr\u005C;u002C;jdk.jlink\u005C;u002C;jdk.jshell],jdk/internal/vm/vector[jdk.incubator.vector] extraModulePackages jdk/internal/access/foreign,jdk/internal/classfile/impl,jdk/internal/constant,jdk/internal/foreign/abi,jdk/internal/foreign/abi/aarch64/linux,jdk/internal/foreign/abi/aarch64/macos,jdk/internal/foreign/abi/aarch64/windows,jdk/internal/foreign/abi/fallback,jdk/internal/foreign/abi/ppc64/aix,jdk/internal/foreign/abi/ppc64/linux,jdk/internal/foreign/abi/riscv64/linux,jdk/internal/foreign/abi/s390/linux,jdk/internal/foreign/abi/x64/sysv,jdk/internal/foreign/abi/x64/windows,jdk/internal/foreign/layout,sun/nio/ch,sun/net,jdk/internal/foreign,jdk/internal/foreign,sun/net,sun/nio/ch uses java/lang/System$LoggerFinder,java/net/ContentHandlerFactory,java/net/spi/InetAddressResolverProvider,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/io/JdkConsoleProvider,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 macos-aarch64 flags 8000
+
+class name java/io/BufferedInputStream
+-method name read descriptor ()I
+-method name read descriptor ([BII)I
+-method name skip descriptor (J)J
+-method name available descriptor ()I
+-method name mark descriptor (I)V
+-method name reset descriptor ()V
+-method name transferTo descriptor (Ljava/io/OutputStream;)J
+method name read descriptor ()I thrownTypes java/io/IOException flags 21
+method name read descriptor ([BII)I thrownTypes java/io/IOException flags 21
+method name skip descriptor (J)J thrownTypes java/io/IOException flags 21
+method name available descriptor ()I thrownTypes java/io/IOException flags 21
+method name mark descriptor (I)V flags 21
+method name reset descriptor ()V thrownTypes java/io/IOException flags 21
+method name transferTo descriptor (Ljava/io/OutputStream;)J thrownTypes java/io/IOException flags 21
+
+class name java/io/BufferedOutputStream
+-method name write descriptor (I)V
+-method name write descriptor ([BII)V
+-method name flush descriptor ()V
+method name write descriptor (I)V thrownTypes java/io/IOException flags 21
+method name write descriptor ([BII)V thrownTypes java/io/IOException flags 21
+method name flush descriptor ()V thrownTypes java/io/IOException flags 21
+
+class name java/io/ByteArrayOutputStream
+-method name writeTo descriptor (Ljava/io/OutputStream;)V
+method name writeTo descriptor (Ljava/io/OutputStream;)V thrownTypes java/io/IOException flags 21
+
+class name java/io/Console
+method name println descriptor ()Ljava/io/Console; flags 1 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;IMPLICIT_CLASSES;)
+method name readln descriptor ()Ljava/lang/String; flags 1 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;IMPLICIT_CLASSES;)
+
+class name java/io/IO
+method name println descriptor ()V flags 9
+method name readln descriptor ()Ljava/lang/String; flags 9
+
+class name java/io/ObjectInputStream
+-method name descriptor ()V
+-method name enableResolveObject descriptor (Z)Z
+method name descriptor ()V thrownTypes java/io/IOException flags 4
+method name enableResolveObject descriptor (Z)Z flags 4
+
+class name java/io/ObjectOutputStream
+-method name descriptor ()V
+-method name enableReplaceObject descriptor (Z)Z
+method name descriptor ()V thrownTypes java/io/IOException flags 4
+method name enableReplaceObject descriptor (Z)Z flags 4
+
+class name java/io/ObjectStreamClass
+-method name forClass descriptor ()Ljava/lang/Class;
+method name forClass descriptor ()Ljava/lang/Class; flags 1 signature ()Ljava/lang/Class<*>;
+
+class name java/io/ObjectStreamField
+-method name getType descriptor ()Ljava/lang/Class;
+method name getType descriptor ()Ljava/lang/Class; flags 1 signature ()Ljava/lang/Class<*>;
+
+class name java/io/ProxyingConsole
+method name readln descriptor ()Ljava/lang/String; flags 1
+
+class name java/io/PushbackInputStream
+-method name close descriptor ()V
+method name close descriptor ()V thrownTypes java/io/IOException flags 21
+
+class name java/io/Reader
+method name of descriptor (Ljava/lang/CharSequence;)Ljava/io/Reader; flags 9
+
+class name java/lang/Character$UnicodeBlock
+field name TODHRI descriptor Ljava/lang/Character$UnicodeBlock; flags 19
+field name GARAY descriptor Ljava/lang/Character$UnicodeBlock; flags 19
+field name TULU_TIGALARI descriptor Ljava/lang/Character$UnicodeBlock; flags 19
+field name MYANMAR_EXTENDED_C descriptor Ljava/lang/Character$UnicodeBlock; flags 19
+field name SUNUWAR descriptor Ljava/lang/Character$UnicodeBlock; flags 19
+field name EGYPTIAN_HIEROGLYPHS_EXTENDED_A descriptor Ljava/lang/Character$UnicodeBlock; flags 19
+field name GURUNG_KHEMA descriptor Ljava/lang/Character$UnicodeBlock; flags 19
+field name KIRAT_RAI descriptor Ljava/lang/Character$UnicodeBlock; flags 19
+field name SYMBOLS_FOR_LEGACY_COMPUTING_SUPPLEMENT descriptor Ljava/lang/Character$UnicodeBlock; flags 19
+field name OL_ONAL descriptor Ljava/lang/Character$UnicodeBlock; flags 19
+
+class name java/lang/Character$UnicodeScript
+field name TODHRI descriptor Ljava/lang/Character$UnicodeScript; flags 4019
+field name GARAY descriptor Ljava/lang/Character$UnicodeScript; flags 4019
+field name TULU_TIGALARI descriptor Ljava/lang/Character$UnicodeScript; flags 4019
+field name SUNUWAR descriptor Ljava/lang/Character$UnicodeScript; flags 4019
+field name GURUNG_KHEMA descriptor Ljava/lang/Character$UnicodeScript; flags 4019
+field name KIRAT_RAI descriptor Ljava/lang/Character$UnicodeScript; flags 4019
+field name OL_ONAL descriptor Ljava/lang/Character$UnicodeScript; flags 4019
+
+class name java/lang/Class
+-method name getSigners descriptor ()[Ljava/lang/Object;
+-method name forName descriptor (Ljava/lang/String;ZLjava/lang/ClassLoader;)Ljava/lang/Class;
+-method name forName descriptor (Ljava/lang/Module;Ljava/lang/String;)Ljava/lang/Class;
+-method name getClassLoader descriptor ()Ljava/lang/ClassLoader;
+-method name getEnclosingMethod descriptor ()Ljava/lang/reflect/Method;
+-method name getEnclosingConstructor descriptor ()Ljava/lang/reflect/Constructor;
+-method name getDeclaringClass descriptor ()Ljava/lang/Class;
+-method name getEnclosingClass descriptor ()Ljava/lang/Class;
+-method name getClasses descriptor ()[Ljava/lang/Class;
+-method name getFields descriptor ()[Ljava/lang/reflect/Field;
+-method name getMethods descriptor ()[Ljava/lang/reflect/Method;
+-method name getConstructors descriptor ()[Ljava/lang/reflect/Constructor;
+-method name getField descriptor (Ljava/lang/String;)Ljava/lang/reflect/Field;
+-method name getMethod descriptor (Ljava/lang/String;[Ljava/lang/Class;)Ljava/lang/reflect/Method;
+-method name getConstructor descriptor ([Ljava/lang/Class;)Ljava/lang/reflect/Constructor;
+-method name getDeclaredClasses descriptor ()[Ljava/lang/Class;
+-method name getDeclaredFields descriptor ()[Ljava/lang/reflect/Field;
+-method name getDeclaredMethods descriptor ()[Ljava/lang/reflect/Method;
+-method name getDeclaredConstructors descriptor ()[Ljava/lang/reflect/Constructor;
+-method name getDeclaredField descriptor (Ljava/lang/String;)Ljava/lang/reflect/Field;
+-method name getDeclaredMethod descriptor (Ljava/lang/String;[Ljava/lang/Class;)Ljava/lang/reflect/Method;
+-method name getDeclaredConstructor descriptor ([Ljava/lang/Class;)Ljava/lang/reflect/Constructor;
+-method name getNestHost descriptor ()Ljava/lang/Class;
+-method name getNestMembers descriptor ()[Ljava/lang/Class;
+-method name getRecordComponents descriptor ()[Ljava/lang/reflect/RecordComponent;
+-method name getPermittedSubclasses descriptor ()[Ljava/lang/Class;
+method name getSigners descriptor ()[Ljava/lang/Object; flags 1
+method name forName descriptor (Ljava/lang/String;ZLjava/lang/ClassLoader;)Ljava/lang/Class; thrownTypes java/lang/ClassNotFoundException flags 9 signature (Ljava/lang/String;ZLjava/lang/ClassLoader;)Ljava/lang/Class<*>;
+method name forName descriptor (Ljava/lang/Module;Ljava/lang/String;)Ljava/lang/Class; flags 9 signature (Ljava/lang/Module;Ljava/lang/String;)Ljava/lang/Class<*>;
+method name getClassLoader descriptor ()Ljava/lang/ClassLoader; flags 1
+method name getEnclosingMethod descriptor ()Ljava/lang/reflect/Method; flags 1
+method name getEnclosingConstructor descriptor ()Ljava/lang/reflect/Constructor; flags 1 signature ()Ljava/lang/reflect/Constructor<*>;
+method name getDeclaringClass descriptor ()Ljava/lang/Class; flags 1 signature ()Ljava/lang/Class<*>;
+method name getEnclosingClass descriptor ()Ljava/lang/Class; flags 1 signature ()Ljava/lang/Class<*>;
+method name getClasses descriptor ()[Ljava/lang/Class; flags 1 signature ()[Ljava/lang/Class<*>;
+method name getFields descriptor ()[Ljava/lang/reflect/Field; flags 1
+method name getMethods descriptor ()[Ljava/lang/reflect/Method; flags 1
+method name getConstructors descriptor ()[Ljava/lang/reflect/Constructor; flags 1 signature ()[Ljava/lang/reflect/Constructor<*>;
+method name getField descriptor (Ljava/lang/String;)Ljava/lang/reflect/Field; thrownTypes java/lang/NoSuchFieldException flags 1
+method name getMethod descriptor (Ljava/lang/String;[Ljava/lang/Class;)Ljava/lang/reflect/Method; thrownTypes java/lang/NoSuchMethodException flags 81 signature (Ljava/lang/String;[Ljava/lang/Class<*>;)Ljava/lang/reflect/Method;
+method name getConstructor descriptor ([Ljava/lang/Class;)Ljava/lang/reflect/Constructor; thrownTypes java/lang/NoSuchMethodException flags 81 signature ([Ljava/lang/Class<*>;)Ljava/lang/reflect/Constructor;
+method name getDeclaredClasses descriptor ()[Ljava/lang/Class; flags 1 signature ()[Ljava/lang/Class<*>;
+method name getDeclaredFields descriptor ()[Ljava/lang/reflect/Field; flags 1
+method name getRecordComponents descriptor ()[Ljava/lang/reflect/RecordComponent; flags 1
+method name getDeclaredMethods descriptor ()[Ljava/lang/reflect/Method; flags 1
+method name getDeclaredConstructors descriptor ()[Ljava/lang/reflect/Constructor; flags 1 signature ()[Ljava/lang/reflect/Constructor<*>;
+method name getDeclaredField descriptor (Ljava/lang/String;)Ljava/lang/reflect/Field; thrownTypes java/lang/NoSuchFieldException flags 1
+method name getDeclaredMethod descriptor (Ljava/lang/String;[Ljava/lang/Class;)Ljava/lang/reflect/Method; thrownTypes java/lang/NoSuchMethodException flags 81 signature (Ljava/lang/String;[Ljava/lang/Class<*>;)Ljava/lang/reflect/Method;
+method name getDeclaredConstructor descriptor ([Ljava/lang/Class;)Ljava/lang/reflect/Constructor; thrownTypes java/lang/NoSuchMethodException flags 81 signature ([Ljava/lang/Class<*>;)Ljava/lang/reflect/Constructor;
+method name getNestHost descriptor ()Ljava/lang/Class; flags 1 signature ()Ljava/lang/Class<*>;
+method name getNestMembers descriptor ()[Ljava/lang/Class; flags 1 signature ()[Ljava/lang/Class<*>;
+method name getPermittedSubclasses descriptor ()[Ljava/lang/Class; flags 1 signature ()[Ljava/lang/Class<*>;
+
+class name java/lang/ClassLoader
+-method name getParent descriptor ()Ljava/lang/ClassLoader;
+-method name getPlatformClassLoader descriptor ()Ljava/lang/ClassLoader;
+-method name getSystemClassLoader descriptor ()Ljava/lang/ClassLoader;
+method name getParent descriptor ()Ljava/lang/ClassLoader; flags 11
+method name getPlatformClassLoader descriptor ()Ljava/lang/ClassLoader; flags 9
+method name getSystemClassLoader descriptor ()Ljava/lang/ClassLoader; flags 9
+
+class name java/lang/Math
+-method name tanh descriptor (D)D
+method name tanh descriptor (D)D flags 9 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+
+class name java/lang/Process
+method name waitFor descriptor (Ljava/time/Duration;)Z thrownTypes java/lang/InterruptedException flags 1
+
+class name java/lang/Runtime
+-method name load descriptor (Ljava/lang/String;)V
+-method name loadLibrary descriptor (Ljava/lang/String;)V
+method name load descriptor (Ljava/lang/String;)V flags 1 runtimeAnnotations @Ljdk/internal/reflect/CallerSensitive;@Ljdk/internal/javac/Restricted;
+method name loadLibrary descriptor (Ljava/lang/String;)V flags 1 runtimeAnnotations @Ljdk/internal/reflect/CallerSensitive;@Ljdk/internal/javac/Restricted;
+
+class name java/lang/ScopedValue
+-method name runWhere descriptor (Ljava/lang/ScopedValue;Ljava/lang/Object;Ljava/lang/Runnable;)V
+-method name callWhere descriptor (Ljava/lang/ScopedValue;Ljava/lang/Object;Ljava/lang/ScopedValue$CallableOp;)Ljava/lang/Object;
+
+class name java/lang/SecurityManager
+header extends java/lang/Object flags 21 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="17")
+innerclass innerClass java/lang/StackWalker$StackFrame outerClass java/lang/StackWalker innerClassName StackFrame flags 609
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+-method name getClassContext descriptor ()[Ljava/lang/Class;
+-method name checkMulticast descriptor (Ljava/net/InetAddress;B)V
+method name getClassContext descriptor ()[Ljava/lang/Class; flags 4 signature ()[Ljava/lang/Class<*>;
+method name checkMulticast descriptor (Ljava/net/InetAddress;B)V flags 1
+
+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$Logger outerClass java/lang/System innerClassName Logger flags 609
+innerclass innerClass java/lang/System$LoggerFinder outerClass java/lang/System innerClassName LoggerFinder flags 409
+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
+-method name load descriptor (Ljava/lang/String;)V
+-method name loadLibrary descriptor (Ljava/lang/String;)V
+-method name setSecurityManager descriptor (Ljava/lang/SecurityManager;)V
+method name load descriptor (Ljava/lang/String;)V flags 9 runtimeAnnotations @Ljdk/internal/reflect/CallerSensitive;@Ljdk/internal/javac/Restricted;
+method name loadLibrary descriptor (Ljava/lang/String;)V flags 9 runtimeAnnotations @Ljdk/internal/reflect/CallerSensitive;@Ljdk/internal/javac/Restricted;
+method name setSecurityManager descriptor (Ljava/lang/SecurityManager;)V flags 9 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="17")
+
+class name java/lang/System$LoggerFinder
+header extends java/lang/Object nestHost java/lang/System flags 421
+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
+
+class name java/lang/Thread
+-method name getContextClassLoader descriptor ()Ljava/lang/ClassLoader;
+method name getContextClassLoader descriptor ()Ljava/lang/ClassLoader; flags 1
+
+class name java/lang/classfile/AccessFlags
+header extends java/lang/Object implements java/lang/classfile/ClassElement,java/lang/classfile/MethodElement,java/lang/classfile/FieldElement sealed true permittedSubclasses jdk/internal/classfile/impl/AccessFlagsImpl flags 601
+innerclass innerClass java/lang/reflect/AccessFlag$Location outerClass java/lang/reflect/AccessFlag innerClassName Location flags 4019
+-method name ofClass descriptor (I)Ljava/lang/classfile/AccessFlags;
+-method name ofClass descriptor ([Ljava/lang/reflect/AccessFlag;)Ljava/lang/classfile/AccessFlags;
+-method name ofField descriptor (I)Ljava/lang/classfile/AccessFlags;
+-method name ofField descriptor ([Ljava/lang/reflect/AccessFlag;)Ljava/lang/classfile/AccessFlags;
+-method name ofMethod descriptor (I)Ljava/lang/classfile/AccessFlags;
+-method name ofMethod descriptor ([Ljava/lang/reflect/AccessFlag;)Ljava/lang/classfile/AccessFlags;
+
+class name java/lang/classfile/Annotation
+header extends java/lang/Object sealed true permittedSubclasses jdk/internal/classfile/impl/AnnotationImpl flags 601
+
+class name java/lang/classfile/AnnotationElement
+header extends java/lang/Object sealed true permittedSubclasses jdk/internal/classfile/impl/AnnotationImpl$AnnotationElementImpl flags 601
+innerclass innerClass jdk/internal/classfile/impl/AnnotationImpl$AnnotationElementImpl outerClass jdk/internal/classfile/impl/AnnotationImpl innerClassName AnnotationElementImpl flags 19
+innerclass innerClass java/lang/classfile/AnnotationValue$OfClass outerClass java/lang/classfile/AnnotationValue innerClassName OfClass flags 609
+innerclass innerClass java/lang/classfile/AnnotationValue$OfString outerClass java/lang/classfile/AnnotationValue innerClassName OfString flags 609
+innerclass innerClass java/lang/classfile/AnnotationValue$OfLong outerClass java/lang/classfile/AnnotationValue innerClassName OfLong flags 609
+innerclass innerClass java/lang/classfile/AnnotationValue$OfInt outerClass java/lang/classfile/AnnotationValue innerClassName OfInt flags 609
+innerclass innerClass java/lang/classfile/AnnotationValue$OfChar outerClass java/lang/classfile/AnnotationValue innerClassName OfChar flags 609
+innerclass innerClass java/lang/classfile/AnnotationValue$OfShort outerClass java/lang/classfile/AnnotationValue innerClassName OfShort flags 609
+innerclass innerClass java/lang/classfile/AnnotationValue$OfByte outerClass java/lang/classfile/AnnotationValue innerClassName OfByte flags 609
+innerclass innerClass java/lang/classfile/AnnotationValue$OfBoolean outerClass java/lang/classfile/AnnotationValue innerClassName OfBoolean flags 609
+innerclass innerClass java/lang/classfile/AnnotationValue$OfDouble outerClass java/lang/classfile/AnnotationValue innerClassName OfDouble flags 609
+innerclass innerClass java/lang/classfile/AnnotationValue$OfFloat outerClass java/lang/classfile/AnnotationValue innerClassName OfFloat flags 609
+innerclass innerClass java/lang/classfile/AnnotationValue$OfAnnotation outerClass java/lang/classfile/AnnotationValue innerClassName OfAnnotation flags 609
+innerclass innerClass java/lang/classfile/AnnotationValue$OfArray outerClass java/lang/classfile/AnnotationValue innerClassName OfArray flags 609
+
+class name java/lang/classfile/AnnotationValue
+header extends java/lang/Object nestMembers java/lang/classfile/AnnotationValue$OfEnum,java/lang/classfile/AnnotationValue$OfClass,java/lang/classfile/AnnotationValue$OfBoolean,java/lang/classfile/AnnotationValue$OfByte,java/lang/classfile/AnnotationValue$OfChar,java/lang/classfile/AnnotationValue$OfShort,java/lang/classfile/AnnotationValue$OfInt,java/lang/classfile/AnnotationValue$OfLong,java/lang/classfile/AnnotationValue$OfFloat,java/lang/classfile/AnnotationValue$OfDouble,java/lang/classfile/AnnotationValue$OfString,java/lang/classfile/AnnotationValue$OfConstant,java/lang/classfile/AnnotationValue$OfArray,java/lang/classfile/AnnotationValue$OfAnnotation sealed true permittedSubclasses java/lang/classfile/AnnotationValue$OfAnnotation,java/lang/classfile/AnnotationValue$OfArray,java/lang/classfile/AnnotationValue$OfConstant,java/lang/classfile/AnnotationValue$OfClass,java/lang/classfile/AnnotationValue$OfEnum flags 601
+innerclass innerClass jdk/internal/classfile/impl/AnnotationImpl$OfEnumImpl outerClass jdk/internal/classfile/impl/AnnotationImpl innerClassName OfEnumImpl flags 19
+innerclass innerClass java/lang/classfile/AnnotationValue$OfEnum outerClass java/lang/classfile/AnnotationValue innerClassName OfEnum flags 609
+innerclass innerClass jdk/internal/classfile/impl/AnnotationImpl$OfClassImpl outerClass jdk/internal/classfile/impl/AnnotationImpl innerClassName OfClassImpl flags 19
+innerclass innerClass java/lang/classfile/AnnotationValue$OfClass outerClass java/lang/classfile/AnnotationValue innerClassName OfClass flags 609
+innerclass innerClass jdk/internal/classfile/impl/AnnotationImpl$OfStringImpl outerClass jdk/internal/classfile/impl/AnnotationImpl innerClassName OfStringImpl flags 19
+innerclass innerClass java/lang/classfile/AnnotationValue$OfString outerClass java/lang/classfile/AnnotationValue innerClassName OfString flags 609
+innerclass innerClass jdk/internal/classfile/impl/AnnotationImpl$OfDoubleImpl outerClass jdk/internal/classfile/impl/AnnotationImpl innerClassName OfDoubleImpl flags 19
+innerclass innerClass java/lang/classfile/AnnotationValue$OfDouble outerClass java/lang/classfile/AnnotationValue innerClassName OfDouble flags 609
+innerclass innerClass jdk/internal/classfile/impl/AnnotationImpl$OfFloatImpl outerClass jdk/internal/classfile/impl/AnnotationImpl innerClassName OfFloatImpl flags 19
+innerclass innerClass java/lang/classfile/AnnotationValue$OfFloat outerClass java/lang/classfile/AnnotationValue innerClassName OfFloat flags 609
+innerclass innerClass jdk/internal/classfile/impl/AnnotationImpl$OfLongImpl outerClass jdk/internal/classfile/impl/AnnotationImpl innerClassName OfLongImpl flags 19
+innerclass innerClass java/lang/classfile/AnnotationValue$OfLong outerClass java/lang/classfile/AnnotationValue innerClassName OfLong flags 609
+innerclass innerClass jdk/internal/classfile/impl/AnnotationImpl$OfIntImpl outerClass jdk/internal/classfile/impl/AnnotationImpl innerClassName OfIntImpl flags 19
+innerclass innerClass java/lang/classfile/AnnotationValue$OfInt outerClass java/lang/classfile/AnnotationValue innerClassName OfInt flags 609
+innerclass innerClass jdk/internal/classfile/impl/AnnotationImpl$OfShortImpl outerClass jdk/internal/classfile/impl/AnnotationImpl innerClassName OfShortImpl flags 19
+innerclass innerClass java/lang/classfile/AnnotationValue$OfShort outerClass java/lang/classfile/AnnotationValue innerClassName OfShort flags 609
+innerclass innerClass jdk/internal/classfile/impl/AnnotationImpl$OfCharImpl outerClass jdk/internal/classfile/impl/AnnotationImpl innerClassName OfCharImpl flags 19
+innerclass innerClass java/lang/classfile/AnnotationValue$OfChar outerClass java/lang/classfile/AnnotationValue innerClassName OfChar flags 609
+innerclass innerClass jdk/internal/classfile/impl/AnnotationImpl$OfByteImpl outerClass jdk/internal/classfile/impl/AnnotationImpl innerClassName OfByteImpl flags 19
+innerclass innerClass java/lang/classfile/AnnotationValue$OfByte outerClass java/lang/classfile/AnnotationValue innerClassName OfByte flags 609
+innerclass innerClass jdk/internal/classfile/impl/AnnotationImpl$OfBooleanImpl outerClass jdk/internal/classfile/impl/AnnotationImpl innerClassName OfBooleanImpl flags 19
+innerclass innerClass java/lang/classfile/AnnotationValue$OfBoolean outerClass java/lang/classfile/AnnotationValue innerClassName OfBoolean flags 609
+innerclass innerClass jdk/internal/classfile/impl/AnnotationImpl$OfAnnotationImpl outerClass jdk/internal/classfile/impl/AnnotationImpl innerClassName OfAnnotationImpl flags 19
+innerclass innerClass jdk/internal/classfile/impl/AnnotationImpl$OfArrayImpl outerClass jdk/internal/classfile/impl/AnnotationImpl innerClassName OfArrayImpl flags 19
+innerclass innerClass java/lang/classfile/AnnotationValue$OfArray outerClass java/lang/classfile/AnnotationValue innerClassName OfArray flags 609
+innerclass innerClass java/lang/classfile/AnnotationValue$OfConstant outerClass java/lang/classfile/AnnotationValue innerClassName OfConstant flags 609
+innerclass innerClass java/lang/classfile/AnnotationValue$OfAnnotation outerClass java/lang/classfile/AnnotationValue innerClassName OfAnnotation flags 609
+-method name ofString descriptor (Ljava/lang/classfile/constantpool/Utf8Entry;)Ljava/lang/classfile/AnnotationValue$OfConstant;
+-method name ofString descriptor (Ljava/lang/String;)Ljava/lang/classfile/AnnotationValue$OfConstant;
+-method name ofDouble descriptor (Ljava/lang/classfile/constantpool/DoubleEntry;)Ljava/lang/classfile/AnnotationValue$OfConstant;
+-method name ofDouble descriptor (D)Ljava/lang/classfile/AnnotationValue$OfConstant;
+-method name ofFloat descriptor (Ljava/lang/classfile/constantpool/FloatEntry;)Ljava/lang/classfile/AnnotationValue$OfConstant;
+-method name ofFloat descriptor (F)Ljava/lang/classfile/AnnotationValue$OfConstant;
+-method name ofLong descriptor (Ljava/lang/classfile/constantpool/LongEntry;)Ljava/lang/classfile/AnnotationValue$OfConstant;
+-method name ofLong descriptor (J)Ljava/lang/classfile/AnnotationValue$OfConstant;
+-method name ofInt descriptor (Ljava/lang/classfile/constantpool/IntegerEntry;)Ljava/lang/classfile/AnnotationValue$OfConstant;
+-method name ofInt descriptor (I)Ljava/lang/classfile/AnnotationValue$OfConstant;
+-method name ofShort descriptor (Ljava/lang/classfile/constantpool/IntegerEntry;)Ljava/lang/classfile/AnnotationValue$OfConstant;
+-method name ofShort descriptor (S)Ljava/lang/classfile/AnnotationValue$OfConstant;
+-method name ofChar descriptor (Ljava/lang/classfile/constantpool/IntegerEntry;)Ljava/lang/classfile/AnnotationValue$OfConstant;
+-method name ofChar descriptor (C)Ljava/lang/classfile/AnnotationValue$OfConstant;
+-method name ofByte descriptor (Ljava/lang/classfile/constantpool/IntegerEntry;)Ljava/lang/classfile/AnnotationValue$OfConstant;
+-method name ofByte descriptor (B)Ljava/lang/classfile/AnnotationValue$OfConstant;
+-method name ofBoolean descriptor (Ljava/lang/classfile/constantpool/IntegerEntry;)Ljava/lang/classfile/AnnotationValue$OfConstant;
+-method name ofBoolean descriptor (Z)Ljava/lang/classfile/AnnotationValue$OfConstant;
+field name TAG_BYTE descriptor I constantValue 66 flags 19
+field name TAG_CHAR descriptor I constantValue 67 flags 19
+field name TAG_DOUBLE descriptor I constantValue 68 flags 19
+field name TAG_FLOAT descriptor I constantValue 70 flags 19
+field name TAG_INT descriptor I constantValue 73 flags 19
+field name TAG_LONG descriptor I constantValue 74 flags 19
+field name TAG_SHORT descriptor I constantValue 83 flags 19
+field name TAG_BOOLEAN descriptor I constantValue 90 flags 19
+field name TAG_STRING descriptor I constantValue 115 flags 19
+field name TAG_ENUM descriptor I constantValue 101 flags 19
+field name TAG_CLASS descriptor I constantValue 99 flags 19
+field name TAG_ANNOTATION descriptor I constantValue 64 flags 19
+field name TAG_ARRAY descriptor I constantValue 91 flags 19
+method name ofString descriptor (Ljava/lang/classfile/constantpool/Utf8Entry;)Ljava/lang/classfile/AnnotationValue$OfString; flags 9
+method name ofString descriptor (Ljava/lang/String;)Ljava/lang/classfile/AnnotationValue$OfString; flags 9
+method name ofDouble descriptor (Ljava/lang/classfile/constantpool/DoubleEntry;)Ljava/lang/classfile/AnnotationValue$OfDouble; flags 9
+method name ofDouble descriptor (D)Ljava/lang/classfile/AnnotationValue$OfDouble; flags 9
+method name ofFloat descriptor (Ljava/lang/classfile/constantpool/FloatEntry;)Ljava/lang/classfile/AnnotationValue$OfFloat; flags 9
+method name ofFloat descriptor (F)Ljava/lang/classfile/AnnotationValue$OfFloat; flags 9
+method name ofLong descriptor (Ljava/lang/classfile/constantpool/LongEntry;)Ljava/lang/classfile/AnnotationValue$OfLong; flags 9
+method name ofLong descriptor (J)Ljava/lang/classfile/AnnotationValue$OfLong; flags 9
+method name ofInt descriptor (Ljava/lang/classfile/constantpool/IntegerEntry;)Ljava/lang/classfile/AnnotationValue$OfInt; flags 9
+method name ofInt descriptor (I)Ljava/lang/classfile/AnnotationValue$OfInt; flags 9
+method name ofShort descriptor (Ljava/lang/classfile/constantpool/IntegerEntry;)Ljava/lang/classfile/AnnotationValue$OfShort; flags 9
+method name ofShort descriptor (S)Ljava/lang/classfile/AnnotationValue$OfShort; flags 9
+method name ofChar descriptor (Ljava/lang/classfile/constantpool/IntegerEntry;)Ljava/lang/classfile/AnnotationValue$OfChar; flags 9
+method name ofChar descriptor (C)Ljava/lang/classfile/AnnotationValue$OfChar; flags 9
+method name ofByte descriptor (Ljava/lang/classfile/constantpool/IntegerEntry;)Ljava/lang/classfile/AnnotationValue$OfByte; flags 9
+method name ofByte descriptor (B)Ljava/lang/classfile/AnnotationValue$OfByte; flags 9
+method name ofBoolean descriptor (Ljava/lang/classfile/constantpool/IntegerEntry;)Ljava/lang/classfile/AnnotationValue$OfBoolean; flags 9
+method name ofBoolean descriptor (Z)Ljava/lang/classfile/AnnotationValue$OfBoolean; flags 9
+
+class name java/lang/classfile/AnnotationValue$OfAnnotation
+header extends java/lang/Object implements java/lang/classfile/AnnotationValue nestHost java/lang/classfile/AnnotationValue sealed true permittedSubclasses jdk/internal/classfile/impl/AnnotationImpl$OfAnnotationImpl flags 601
+innerclass innerClass java/lang/classfile/AnnotationValue$OfAnnotation outerClass java/lang/classfile/AnnotationValue innerClassName OfAnnotation flags 609
+innerclass innerClass jdk/internal/classfile/impl/AnnotationImpl$OfAnnotationImpl outerClass jdk/internal/classfile/impl/AnnotationImpl innerClassName OfAnnotationImpl flags 19
+
+class name java/lang/classfile/AnnotationValue$OfArray
+header extends java/lang/Object implements java/lang/classfile/AnnotationValue nestHost java/lang/classfile/AnnotationValue sealed true permittedSubclasses jdk/internal/classfile/impl/AnnotationImpl$OfArrayImpl flags 601
+innerclass innerClass java/lang/classfile/AnnotationValue$OfArray outerClass java/lang/classfile/AnnotationValue innerClassName OfArray flags 609
+innerclass innerClass jdk/internal/classfile/impl/AnnotationImpl$OfArrayImpl outerClass jdk/internal/classfile/impl/AnnotationImpl innerClassName OfArrayImpl flags 19
+
+class name java/lang/classfile/AnnotationValue$OfBoolean
+header extends java/lang/Object implements java/lang/classfile/AnnotationValue$OfConstant nestHost java/lang/classfile/AnnotationValue sealed true permittedSubclasses jdk/internal/classfile/impl/AnnotationImpl$OfBooleanImpl flags 601
+innerclass innerClass java/lang/classfile/AnnotationValue$OfBoolean outerClass java/lang/classfile/AnnotationValue innerClassName OfBoolean flags 609
+innerclass innerClass java/lang/classfile/AnnotationValue$OfConstant outerClass java/lang/classfile/AnnotationValue innerClassName OfConstant flags 609
+innerclass innerClass jdk/internal/classfile/impl/AnnotationImpl$OfBooleanImpl outerClass jdk/internal/classfile/impl/AnnotationImpl innerClassName OfBooleanImpl flags 19
+method name constant descriptor ()Ljava/lang/classfile/constantpool/IntegerEntry; flags 401
+method name resolvedValue descriptor ()Ljava/lang/Boolean; flags 1
+method name resolvedValue descriptor ()Ljava/lang/constant/Constable; flags 1041
+method name constant descriptor ()Ljava/lang/classfile/constantpool/AnnotationConstantValueEntry; flags 1041
+
+class name java/lang/classfile/AnnotationValue$OfByte
+header extends java/lang/Object implements java/lang/classfile/AnnotationValue$OfConstant nestHost java/lang/classfile/AnnotationValue sealed true permittedSubclasses jdk/internal/classfile/impl/AnnotationImpl$OfByteImpl flags 601
+innerclass innerClass java/lang/classfile/AnnotationValue$OfByte outerClass java/lang/classfile/AnnotationValue innerClassName OfByte flags 609
+innerclass innerClass java/lang/classfile/AnnotationValue$OfConstant outerClass java/lang/classfile/AnnotationValue innerClassName OfConstant flags 609
+innerclass innerClass jdk/internal/classfile/impl/AnnotationImpl$OfByteImpl outerClass jdk/internal/classfile/impl/AnnotationImpl innerClassName OfByteImpl flags 19
+method name constant descriptor ()Ljava/lang/classfile/constantpool/IntegerEntry; flags 401
+method name resolvedValue descriptor ()Ljava/lang/Byte; flags 1
+method name resolvedValue descriptor ()Ljava/lang/constant/Constable; flags 1041
+method name constant descriptor ()Ljava/lang/classfile/constantpool/AnnotationConstantValueEntry; flags 1041
+
+class name java/lang/classfile/AnnotationValue$OfChar
+header extends java/lang/Object implements java/lang/classfile/AnnotationValue$OfConstant nestHost java/lang/classfile/AnnotationValue sealed true permittedSubclasses jdk/internal/classfile/impl/AnnotationImpl$OfCharImpl flags 601
+innerclass innerClass java/lang/classfile/AnnotationValue$OfChar outerClass java/lang/classfile/AnnotationValue innerClassName OfChar flags 609
+innerclass innerClass java/lang/classfile/AnnotationValue$OfConstant outerClass java/lang/classfile/AnnotationValue innerClassName OfConstant flags 609
+innerclass innerClass jdk/internal/classfile/impl/AnnotationImpl$OfCharImpl outerClass jdk/internal/classfile/impl/AnnotationImpl innerClassName OfCharImpl flags 19
+method name constant descriptor ()Ljava/lang/classfile/constantpool/IntegerEntry; flags 401
+method name charValue descriptor ()C flags 401
+method name resolvedValue descriptor ()Ljava/lang/Character; flags 1
+method name resolvedValue descriptor ()Ljava/lang/constant/Constable; flags 1041
+method name constant descriptor ()Ljava/lang/classfile/constantpool/AnnotationConstantValueEntry; flags 1041
+
+-class name java/lang/classfile/AnnotationValue$OfCharacter
+
+class name java/lang/classfile/AnnotationValue$OfClass
+header extends java/lang/Object implements java/lang/classfile/AnnotationValue nestHost java/lang/classfile/AnnotationValue sealed true permittedSubclasses jdk/internal/classfile/impl/AnnotationImpl$OfClassImpl flags 601
+innerclass innerClass java/lang/classfile/AnnotationValue$OfClass outerClass java/lang/classfile/AnnotationValue innerClassName OfClass flags 609
+innerclass innerClass jdk/internal/classfile/impl/AnnotationImpl$OfClassImpl outerClass jdk/internal/classfile/impl/AnnotationImpl innerClassName OfClassImpl flags 19
+
+class name java/lang/classfile/AnnotationValue$OfConstant
+header extends java/lang/Object implements java/lang/classfile/AnnotationValue nestHost java/lang/classfile/AnnotationValue sealed true permittedSubclasses java/lang/classfile/AnnotationValue$OfString,java/lang/classfile/AnnotationValue$OfDouble,java/lang/classfile/AnnotationValue$OfFloat,java/lang/classfile/AnnotationValue$OfLong,java/lang/classfile/AnnotationValue$OfInt,java/lang/classfile/AnnotationValue$OfShort,java/lang/classfile/AnnotationValue$OfChar,java/lang/classfile/AnnotationValue$OfByte,java/lang/classfile/AnnotationValue$OfBoolean flags 601
+innerclass innerClass java/lang/classfile/AnnotationValue$OfConstant outerClass java/lang/classfile/AnnotationValue innerClassName OfConstant flags 609
+innerclass innerClass java/lang/classfile/AnnotationValue$OfString outerClass java/lang/classfile/AnnotationValue innerClassName OfString flags 609
+innerclass innerClass java/lang/classfile/AnnotationValue$OfDouble outerClass java/lang/classfile/AnnotationValue innerClassName OfDouble flags 609
+innerclass innerClass java/lang/classfile/AnnotationValue$OfFloat outerClass java/lang/classfile/AnnotationValue innerClassName OfFloat flags 609
+innerclass innerClass java/lang/classfile/AnnotationValue$OfLong outerClass java/lang/classfile/AnnotationValue innerClassName OfLong flags 609
+innerclass innerClass java/lang/classfile/AnnotationValue$OfInt outerClass java/lang/classfile/AnnotationValue innerClassName OfInt flags 609
+innerclass innerClass java/lang/classfile/AnnotationValue$OfShort outerClass java/lang/classfile/AnnotationValue innerClassName OfShort flags 609
+innerclass innerClass java/lang/classfile/AnnotationValue$OfChar outerClass java/lang/classfile/AnnotationValue innerClassName OfChar flags 609
+innerclass innerClass java/lang/classfile/AnnotationValue$OfByte outerClass java/lang/classfile/AnnotationValue innerClassName OfByte flags 609
+innerclass innerClass java/lang/classfile/AnnotationValue$OfBoolean outerClass java/lang/classfile/AnnotationValue innerClassName OfBoolean flags 609
+-method name constantValue descriptor ()Ljava/lang/constant/ConstantDesc;
+method name resolvedValue descriptor ()Ljava/lang/constant/Constable; flags 401
+
+class name java/lang/classfile/AnnotationValue$OfDouble
+header extends java/lang/Object implements java/lang/classfile/AnnotationValue$OfConstant nestHost java/lang/classfile/AnnotationValue sealed true permittedSubclasses jdk/internal/classfile/impl/AnnotationImpl$OfDoubleImpl flags 601
+innerclass innerClass java/lang/classfile/AnnotationValue$OfDouble outerClass java/lang/classfile/AnnotationValue innerClassName OfDouble flags 609
+innerclass innerClass java/lang/classfile/AnnotationValue$OfConstant outerClass java/lang/classfile/AnnotationValue innerClassName OfConstant flags 609
+innerclass innerClass jdk/internal/classfile/impl/AnnotationImpl$OfDoubleImpl outerClass jdk/internal/classfile/impl/AnnotationImpl innerClassName OfDoubleImpl flags 19
+method name constant descriptor ()Ljava/lang/classfile/constantpool/DoubleEntry; flags 401
+method name resolvedValue descriptor ()Ljava/lang/Double; flags 1
+method name resolvedValue descriptor ()Ljava/lang/constant/Constable; flags 1041
+method name constant descriptor ()Ljava/lang/classfile/constantpool/AnnotationConstantValueEntry; flags 1041
+
+class name java/lang/classfile/AnnotationValue$OfEnum
+header extends java/lang/Object implements java/lang/classfile/AnnotationValue nestHost java/lang/classfile/AnnotationValue sealed true permittedSubclasses jdk/internal/classfile/impl/AnnotationImpl$OfEnumImpl flags 601
+innerclass innerClass java/lang/classfile/AnnotationValue$OfEnum outerClass java/lang/classfile/AnnotationValue innerClassName OfEnum flags 609
+innerclass innerClass jdk/internal/classfile/impl/AnnotationImpl$OfEnumImpl outerClass jdk/internal/classfile/impl/AnnotationImpl innerClassName OfEnumImpl flags 19
+
+class name java/lang/classfile/AnnotationValue$OfFloat
+header extends java/lang/Object implements java/lang/classfile/AnnotationValue$OfConstant nestHost java/lang/classfile/AnnotationValue sealed true permittedSubclasses jdk/internal/classfile/impl/AnnotationImpl$OfFloatImpl flags 601
+innerclass innerClass java/lang/classfile/AnnotationValue$OfFloat outerClass java/lang/classfile/AnnotationValue innerClassName OfFloat flags 609
+innerclass innerClass java/lang/classfile/AnnotationValue$OfConstant outerClass java/lang/classfile/AnnotationValue innerClassName OfConstant flags 609
+innerclass innerClass jdk/internal/classfile/impl/AnnotationImpl$OfFloatImpl outerClass jdk/internal/classfile/impl/AnnotationImpl innerClassName OfFloatImpl flags 19
+method name constant descriptor ()Ljava/lang/classfile/constantpool/FloatEntry; flags 401
+method name resolvedValue descriptor ()Ljava/lang/Float; flags 1
+method name resolvedValue descriptor ()Ljava/lang/constant/Constable; flags 1041
+method name constant descriptor ()Ljava/lang/classfile/constantpool/AnnotationConstantValueEntry; flags 1041
+
+class name java/lang/classfile/AnnotationValue$OfInt
+header extends java/lang/Object implements java/lang/classfile/AnnotationValue$OfConstant nestHost java/lang/classfile/AnnotationValue sealed true permittedSubclasses jdk/internal/classfile/impl/AnnotationImpl$OfIntImpl flags 601
+innerclass innerClass java/lang/classfile/AnnotationValue$OfInt outerClass java/lang/classfile/AnnotationValue innerClassName OfInt flags 609
+innerclass innerClass java/lang/classfile/AnnotationValue$OfConstant outerClass java/lang/classfile/AnnotationValue innerClassName OfConstant flags 609
+innerclass innerClass jdk/internal/classfile/impl/AnnotationImpl$OfIntImpl outerClass jdk/internal/classfile/impl/AnnotationImpl innerClassName OfIntImpl flags 19
+method name constant descriptor ()Ljava/lang/classfile/constantpool/IntegerEntry; flags 401
+method name intValue descriptor ()I flags 401
+method name resolvedValue descriptor ()Ljava/lang/Integer; flags 1
+method name resolvedValue descriptor ()Ljava/lang/constant/Constable; flags 1041
+method name constant descriptor ()Ljava/lang/classfile/constantpool/AnnotationConstantValueEntry; flags 1041
+
+-class name java/lang/classfile/AnnotationValue$OfInteger
+
+class name java/lang/classfile/AnnotationValue$OfLong
+header extends java/lang/Object implements java/lang/classfile/AnnotationValue$OfConstant nestHost java/lang/classfile/AnnotationValue sealed true permittedSubclasses jdk/internal/classfile/impl/AnnotationImpl$OfLongImpl flags 601
+innerclass innerClass java/lang/classfile/AnnotationValue$OfLong outerClass java/lang/classfile/AnnotationValue innerClassName OfLong flags 609
+innerclass innerClass java/lang/classfile/AnnotationValue$OfConstant outerClass java/lang/classfile/AnnotationValue innerClassName OfConstant flags 609
+innerclass innerClass jdk/internal/classfile/impl/AnnotationImpl$OfLongImpl outerClass jdk/internal/classfile/impl/AnnotationImpl innerClassName OfLongImpl flags 19
+method name constant descriptor ()Ljava/lang/classfile/constantpool/LongEntry; flags 401
+method name resolvedValue descriptor ()Ljava/lang/Long; flags 1
+method name resolvedValue descriptor ()Ljava/lang/constant/Constable; flags 1041
+method name constant descriptor ()Ljava/lang/classfile/constantpool/AnnotationConstantValueEntry; flags 1041
+
+class name java/lang/classfile/AnnotationValue$OfShort
+header extends java/lang/Object implements java/lang/classfile/AnnotationValue$OfConstant nestHost java/lang/classfile/AnnotationValue sealed true permittedSubclasses jdk/internal/classfile/impl/AnnotationImpl$OfShortImpl flags 601
+innerclass innerClass java/lang/classfile/AnnotationValue$OfShort outerClass java/lang/classfile/AnnotationValue innerClassName OfShort flags 609
+innerclass innerClass java/lang/classfile/AnnotationValue$OfConstant outerClass java/lang/classfile/AnnotationValue innerClassName OfConstant flags 609
+innerclass innerClass jdk/internal/classfile/impl/AnnotationImpl$OfShortImpl outerClass jdk/internal/classfile/impl/AnnotationImpl innerClassName OfShortImpl flags 19
+method name constant descriptor ()Ljava/lang/classfile/constantpool/IntegerEntry; flags 401
+method name resolvedValue descriptor ()Ljava/lang/Short; flags 1
+method name resolvedValue descriptor ()Ljava/lang/constant/Constable; flags 1041
+method name constant descriptor ()Ljava/lang/classfile/constantpool/AnnotationConstantValueEntry; flags 1041
+
+class name java/lang/classfile/AnnotationValue$OfString
+header extends java/lang/Object implements java/lang/classfile/AnnotationValue$OfConstant nestHost java/lang/classfile/AnnotationValue sealed true permittedSubclasses jdk/internal/classfile/impl/AnnotationImpl$OfStringImpl flags 601
+innerclass innerClass java/lang/classfile/AnnotationValue$OfString outerClass java/lang/classfile/AnnotationValue innerClassName OfString flags 609
+innerclass innerClass java/lang/classfile/AnnotationValue$OfConstant outerClass java/lang/classfile/AnnotationValue innerClassName OfConstant flags 609
+innerclass innerClass jdk/internal/classfile/impl/AnnotationImpl$OfStringImpl outerClass jdk/internal/classfile/impl/AnnotationImpl innerClassName OfStringImpl flags 19
+method name constant descriptor ()Ljava/lang/classfile/constantpool/Utf8Entry; flags 401
+method name resolvedValue descriptor ()Ljava/lang/String; flags 1
+method name resolvedValue descriptor ()Ljava/lang/constant/Constable; flags 1041
+method name constant descriptor ()Ljava/lang/classfile/constantpool/AnnotationConstantValueEntry; flags 1041
+
+class name java/lang/classfile/Attribute
+header extends java/lang/Object implements java/lang/classfile/ClassFileElement sealed true permittedSubclasses java/lang/classfile/attribute/AnnotationDefaultAttribute,java/lang/classfile/attribute/BootstrapMethodsAttribute,java/lang/classfile/attribute/CharacterRangeTableAttribute,java/lang/classfile/attribute/CodeAttribute,java/lang/classfile/attribute/CompilationIDAttribute,java/lang/classfile/attribute/ConstantValueAttribute,java/lang/classfile/attribute/DeprecatedAttribute,java/lang/classfile/attribute/EnclosingMethodAttribute,java/lang/classfile/attribute/ExceptionsAttribute,java/lang/classfile/attribute/InnerClassesAttribute,java/lang/classfile/attribute/LineNumberTableAttribute,java/lang/classfile/attribute/LocalVariableTableAttribute,java/lang/classfile/attribute/LocalVariableTypeTableAttribute,java/lang/classfile/attribute/MethodParametersAttribute,java/lang/classfile/attribute/ModuleAttribute,java/lang/classfile/attribute/ModuleHashesAttribute,java/lang/classfile/attribute/ModuleMainClassAttribute,java/lang/classfile/attribute/ModulePackagesAttribute,java/lang/classfile/attribute/ModuleResolutionAttribute,java/lang/classfile/attribute/ModuleTargetAttribute,java/lang/classfile/attribute/NestHostAttribute,java/lang/classfile/attribute/NestMembersAttribute,java/lang/classfile/attribute/PermittedSubclassesAttribute,java/lang/classfile/attribute/RecordAttribute,java/lang/classfile/attribute/RuntimeInvisibleAnnotationsAttribute,java/lang/classfile/attribute/RuntimeInvisibleParameterAnnotationsAttribute,java/lang/classfile/attribute/RuntimeInvisibleTypeAnnotationsAttribute,java/lang/classfile/attribute/RuntimeVisibleAnnotationsAttribute,java/lang/classfile/attribute/RuntimeVisibleParameterAnnotationsAttribute,java/lang/classfile/attribute/RuntimeVisibleTypeAnnotationsAttribute,java/lang/classfile/attribute/SignatureAttribute,java/lang/classfile/attribute/SourceDebugExtensionAttribute,java/lang/classfile/attribute/SourceFileAttribute,java/lang/classfile/attribute/SourceIDAttribute,java/lang/classfile/attribute/StackMapTableAttribute,java/lang/classfile/attribute/SyntheticAttribute,java/lang/classfile/attribute/UnknownAttribute,jdk/internal/classfile/impl/BoundAttribute,jdk/internal/classfile/impl/UnboundAttribute,java/lang/classfile/CustomAttribute flags 601 signature ;>Ljava/lang/Object;Ljava/lang/classfile/ClassFileElement;
+-method name attributeName descriptor ()Ljava/lang/String;
+method name attributeName descriptor ()Ljava/lang/classfile/constantpool/Utf8Entry; flags 401
+
+class name java/lang/classfile/AttributeMapper
+header extends java/lang/Object nestMembers java/lang/classfile/AttributeMapper$AttributeStability flags 601 signature ;>Ljava/lang/Object;
+innerclass innerClass java/lang/classfile/AttributeMapper$AttributeStability outerClass java/lang/classfile/AttributeMapper innerClassName AttributeStability flags 4019
+-method name readAttribute descriptor (Ljava/lang/classfile/AttributedElement;Ljava/lang/classfile/ClassReader;I)Ljava/lang/Object;
+-method name writeAttribute descriptor (Ljava/lang/classfile/BufWriter;Ljava/lang/Object;)V
+method name readAttribute descriptor (Ljava/lang/classfile/AttributedElement;Ljava/lang/classfile/ClassReader;I)Ljava/lang/classfile/Attribute; flags 401 signature (Ljava/lang/classfile/AttributedElement;Ljava/lang/classfile/ClassReader;I)TA;
+method name writeAttribute descriptor (Ljava/lang/classfile/BufWriter;Ljava/lang/classfile/Attribute;)V flags 401 signature (Ljava/lang/classfile/BufWriter;TA;)V
+
+class name java/lang/classfile/AttributeMapper$AttributeStability
+header extends java/lang/Enum nestHost java/lang/classfile/AttributeMapper flags 4031 signature Ljava/lang/Enum;
+innerclass innerClass java/lang/classfile/AttributeMapper$AttributeStability outerClass java/lang/classfile/AttributeMapper innerClassName AttributeStability flags 4019
+
+class name java/lang/classfile/AttributedElement
+header extends java/lang/Object implements java/lang/classfile/ClassFileElement sealed true permittedSubclasses java/lang/classfile/ClassModel,java/lang/classfile/CodeModel,java/lang/classfile/FieldModel,java/lang/classfile/MethodModel,java/lang/classfile/attribute/RecordComponentInfo,jdk/internal/classfile/impl/AbstractUnboundModel flags 601
+
+class name java/lang/classfile/Attributes
+header extends java/lang/Object flags 31
+
+class name java/lang/classfile/BootstrapMethodEntry
+header extends java/lang/Object sealed true permittedSubclasses jdk/internal/classfile/impl/BootstrapMethodEntryImpl flags 601
+
+class name java/lang/classfile/BufWriter
+header extends java/lang/Object sealed true permittedSubclasses jdk/internal/classfile/impl/BufWriterImpl flags 601
+-method name writeBytes descriptor (Ljava/lang/classfile/BufWriter;)V
+-method name writeList descriptor (Ljava/util/List;)V
+-method name writeListIndices descriptor (Ljava/util/List;)V
+-method name copyTo descriptor ([BI)V
+
+class name java/lang/classfile/ClassBuilder
+header extends java/lang/Object implements java/lang/classfile/ClassFileBuilder sealed true permittedSubclasses jdk/internal/classfile/impl/ChainedClassBuilder,jdk/internal/classfile/impl/DirectClassBuilder flags 601 signature Ljava/lang/Object;Ljava/lang/classfile/ClassFileBuilder;
+innerclass innerClass java/lang/reflect/AccessFlag$Location outerClass java/lang/reflect/AccessFlag innerClassName Location flags 4019
+-method name original descriptor ()Ljava/util/Optional;
+
+class name java/lang/classfile/ClassElement
+header extends java/lang/Object implements java/lang/classfile/ClassFileElement sealed true permittedSubclasses java/lang/classfile/AccessFlags,java/lang/classfile/Superclass,java/lang/classfile/Interfaces,java/lang/classfile/ClassFileVersion,java/lang/classfile/FieldModel,java/lang/classfile/MethodModel,java/lang/classfile/CustomAttribute,java/lang/classfile/attribute/CompilationIDAttribute,java/lang/classfile/attribute/DeprecatedAttribute,java/lang/classfile/attribute/EnclosingMethodAttribute,java/lang/classfile/attribute/InnerClassesAttribute,java/lang/classfile/attribute/ModuleAttribute,java/lang/classfile/attribute/ModuleHashesAttribute,java/lang/classfile/attribute/ModuleMainClassAttribute,java/lang/classfile/attribute/ModulePackagesAttribute,java/lang/classfile/attribute/ModuleResolutionAttribute,java/lang/classfile/attribute/ModuleTargetAttribute,java/lang/classfile/attribute/NestHostAttribute,java/lang/classfile/attribute/NestMembersAttribute,java/lang/classfile/attribute/PermittedSubclassesAttribute,java/lang/classfile/attribute/RecordAttribute,java/lang/classfile/attribute/RuntimeInvisibleAnnotationsAttribute,java/lang/classfile/attribute/RuntimeInvisibleTypeAnnotationsAttribute,java/lang/classfile/attribute/RuntimeVisibleAnnotationsAttribute,java/lang/classfile/attribute/RuntimeVisibleTypeAnnotationsAttribute,java/lang/classfile/attribute/SignatureAttribute,java/lang/classfile/attribute/SourceDebugExtensionAttribute,java/lang/classfile/attribute/SourceFileAttribute,java/lang/classfile/attribute/SourceIDAttribute,java/lang/classfile/attribute/SyntheticAttribute,java/lang/classfile/attribute/UnknownAttribute flags 601
+
+class name java/lang/classfile/ClassFile
+header extends java/lang/Object nestMembers java/lang/classfile/ClassFile$AttributesProcessingOption,java/lang/classfile/ClassFile$StackMapsOption,java/lang/classfile/ClassFile$ShortJumpsOption,java/lang/classfile/ClassFile$LineNumbersOption,java/lang/classfile/ClassFile$DebugElementsOption,java/lang/classfile/ClassFile$DeadLabelsOption,java/lang/classfile/ClassFile$DeadCodeOption,java/lang/classfile/ClassFile$ConstantPoolSharingOption,java/lang/classfile/ClassFile$ClassHierarchyResolverOption,java/lang/classfile/ClassFile$AttributeMapperOption,java/lang/classfile/ClassFile$Option sealed true permittedSubclasses jdk/internal/classfile/impl/ClassFileImpl flags 601
+innerclass innerClass java/lang/classfile/ClassFile$Option outerClass java/lang/classfile/ClassFile innerClassName Option flags 609
+innerclass innerClass java/lang/classfile/ClassFile$AttributesProcessingOption outerClass java/lang/classfile/ClassFile innerClassName AttributesProcessingOption flags 4019
+innerclass innerClass java/lang/classfile/ClassFile$StackMapsOption outerClass java/lang/classfile/ClassFile innerClassName StackMapsOption flags 4019
+innerclass innerClass java/lang/classfile/ClassFile$ShortJumpsOption outerClass java/lang/classfile/ClassFile innerClassName ShortJumpsOption flags 4019
+innerclass innerClass java/lang/classfile/ClassFile$LineNumbersOption outerClass java/lang/classfile/ClassFile innerClassName LineNumbersOption flags 4019
+innerclass innerClass java/lang/classfile/ClassFile$DebugElementsOption outerClass java/lang/classfile/ClassFile innerClassName DebugElementsOption flags 4019
+innerclass innerClass java/lang/classfile/ClassFile$DeadLabelsOption outerClass java/lang/classfile/ClassFile innerClassName DeadLabelsOption flags 4019
+innerclass innerClass java/lang/classfile/ClassFile$DeadCodeOption outerClass java/lang/classfile/ClassFile innerClassName DeadCodeOption flags 4019
+innerclass innerClass java/lang/classfile/ClassFile$ConstantPoolSharingOption outerClass java/lang/classfile/ClassFile innerClassName ConstantPoolSharingOption flags 4019
+innerclass innerClass java/lang/classfile/ClassFile$ClassHierarchyResolverOption outerClass java/lang/classfile/ClassFile innerClassName ClassHierarchyResolverOption flags 609
+innerclass innerClass java/lang/classfile/ClassFile$AttributeMapperOption outerClass java/lang/classfile/ClassFile innerClassName AttributeMapperOption flags 609
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+-field name NOP descriptor I
+-field name ACONST_NULL descriptor I
+-field name ICONST_M1 descriptor I
+-field name ICONST_0 descriptor I
+-field name ICONST_1 descriptor I
+-field name ICONST_2 descriptor I
+-field name ICONST_3 descriptor I
+-field name ICONST_4 descriptor I
+-field name ICONST_5 descriptor I
+-field name LCONST_0 descriptor I
+-field name LCONST_1 descriptor I
+-field name FCONST_0 descriptor I
+-field name FCONST_1 descriptor I
+-field name FCONST_2 descriptor I
+-field name DCONST_0 descriptor I
+-field name DCONST_1 descriptor I
+-field name BIPUSH descriptor I
+-field name SIPUSH descriptor I
+-field name LDC descriptor I
+-field name LDC_W descriptor I
+-field name LDC2_W descriptor I
+-field name ILOAD descriptor I
+-field name LLOAD descriptor I
+-field name FLOAD descriptor I
+-field name DLOAD descriptor I
+-field name ALOAD descriptor I
+-field name ILOAD_0 descriptor I
+-field name ILOAD_1 descriptor I
+-field name ILOAD_2 descriptor I
+-field name ILOAD_3 descriptor I
+-field name LLOAD_0 descriptor I
+-field name LLOAD_1 descriptor I
+-field name LLOAD_2 descriptor I
+-field name LLOAD_3 descriptor I
+-field name FLOAD_0 descriptor I
+-field name FLOAD_1 descriptor I
+-field name FLOAD_2 descriptor I
+-field name FLOAD_3 descriptor I
+-field name DLOAD_0 descriptor I
+-field name DLOAD_1 descriptor I
+-field name DLOAD_2 descriptor I
+-field name DLOAD_3 descriptor I
+-field name ALOAD_0 descriptor I
+-field name ALOAD_1 descriptor I
+-field name ALOAD_2 descriptor I
+-field name ALOAD_3 descriptor I
+-field name IALOAD descriptor I
+-field name LALOAD descriptor I
+-field name FALOAD descriptor I
+-field name DALOAD descriptor I
+-field name AALOAD descriptor I
+-field name BALOAD descriptor I
+-field name CALOAD descriptor I
+-field name SALOAD descriptor I
+-field name ISTORE descriptor I
+-field name LSTORE descriptor I
+-field name FSTORE descriptor I
+-field name DSTORE descriptor I
+-field name ASTORE descriptor I
+-field name ISTORE_0 descriptor I
+-field name ISTORE_1 descriptor I
+-field name ISTORE_2 descriptor I
+-field name ISTORE_3 descriptor I
+-field name LSTORE_0 descriptor I
+-field name LSTORE_1 descriptor I
+-field name LSTORE_2 descriptor I
+-field name LSTORE_3 descriptor I
+-field name FSTORE_0 descriptor I
+-field name FSTORE_1 descriptor I
+-field name FSTORE_2 descriptor I
+-field name FSTORE_3 descriptor I
+-field name DSTORE_0 descriptor I
+-field name DSTORE_1 descriptor I
+-field name DSTORE_2 descriptor I
+-field name DSTORE_3 descriptor I
+-field name ASTORE_0 descriptor I
+-field name ASTORE_1 descriptor I
+-field name ASTORE_2 descriptor I
+-field name ASTORE_3 descriptor I
+-field name IASTORE descriptor I
+-field name LASTORE descriptor I
+-field name FASTORE descriptor I
+-field name DASTORE descriptor I
+-field name AASTORE descriptor I
+-field name BASTORE descriptor I
+-field name CASTORE descriptor I
+-field name SASTORE descriptor I
+-field name POP descriptor I
+-field name POP2 descriptor I
+-field name DUP descriptor I
+-field name DUP_X1 descriptor I
+-field name DUP_X2 descriptor I
+-field name DUP2 descriptor I
+-field name DUP2_X1 descriptor I
+-field name DUP2_X2 descriptor I
+-field name SWAP descriptor I
+-field name IADD descriptor I
+-field name LADD descriptor I
+-field name FADD descriptor I
+-field name DADD descriptor I
+-field name ISUB descriptor I
+-field name LSUB descriptor I
+-field name FSUB descriptor I
+-field name DSUB descriptor I
+-field name IMUL descriptor I
+-field name LMUL descriptor I
+-field name FMUL descriptor I
+-field name DMUL descriptor I
+-field name IDIV descriptor I
+-field name LDIV descriptor I
+-field name FDIV descriptor I
+-field name DDIV descriptor I
+-field name IREM descriptor I
+-field name LREM descriptor I
+-field name FREM descriptor I
+-field name DREM descriptor I
+-field name INEG descriptor I
+-field name LNEG descriptor I
+-field name FNEG descriptor I
+-field name DNEG descriptor I
+-field name ISHL descriptor I
+-field name LSHL descriptor I
+-field name ISHR descriptor I
+-field name LSHR descriptor I
+-field name IUSHR descriptor I
+-field name LUSHR descriptor I
+-field name IAND descriptor I
+-field name LAND descriptor I
+-field name IOR descriptor I
+-field name LOR descriptor I
+-field name IXOR descriptor I
+-field name LXOR descriptor I
+-field name IINC descriptor I
+-field name I2L descriptor I
+-field name I2F descriptor I
+-field name I2D descriptor I
+-field name L2I descriptor I
+-field name L2F descriptor I
+-field name L2D descriptor I
+-field name F2I descriptor I
+-field name F2L descriptor I
+-field name F2D descriptor I
+-field name D2I descriptor I
+-field name D2L descriptor I
+-field name D2F descriptor I
+-field name I2B descriptor I
+-field name I2C descriptor I
+-field name I2S descriptor I
+-field name LCMP descriptor I
+-field name FCMPL descriptor I
+-field name FCMPG descriptor I
+-field name DCMPL descriptor I
+-field name DCMPG descriptor I
+-field name IFEQ descriptor I
+-field name IFNE descriptor I
+-field name IFLT descriptor I
+-field name IFGE descriptor I
+-field name IFGT descriptor I
+-field name IFLE descriptor I
+-field name IF_ICMPEQ descriptor I
+-field name IF_ICMPNE descriptor I
+-field name IF_ICMPLT descriptor I
+-field name IF_ICMPGE descriptor I
+-field name IF_ICMPGT descriptor I
+-field name IF_ICMPLE descriptor I
+-field name IF_ACMPEQ descriptor I
+-field name IF_ACMPNE descriptor I
+-field name GOTO descriptor I
+-field name JSR descriptor I
+-field name RET descriptor I
+-field name TABLESWITCH descriptor I
+-field name LOOKUPSWITCH descriptor I
+-field name IRETURN descriptor I
+-field name LRETURN descriptor I
+-field name FRETURN descriptor I
+-field name DRETURN descriptor I
+-field name ARETURN descriptor I
+-field name RETURN descriptor I
+-field name GETSTATIC descriptor I
+-field name PUTSTATIC descriptor I
+-field name GETFIELD descriptor I
+-field name PUTFIELD descriptor I
+-field name INVOKEVIRTUAL descriptor I
+-field name INVOKESPECIAL descriptor I
+-field name INVOKESTATIC descriptor I
+-field name INVOKEINTERFACE descriptor I
+-field name INVOKEDYNAMIC descriptor I
+-field name NEW descriptor I
+-field name NEWARRAY descriptor I
+-field name ANEWARRAY descriptor I
+-field name ARRAYLENGTH descriptor I
+-field name ATHROW descriptor I
+-field name CHECKCAST descriptor I
+-field name INSTANCEOF descriptor I
+-field name MONITORENTER descriptor I
+-field name MONITOREXIT descriptor I
+-field name WIDE descriptor I
+-field name MULTIANEWARRAY descriptor I
+-field name IFNULL descriptor I
+-field name IFNONNULL descriptor I
+-field name GOTO_W descriptor I
+-field name JSR_W descriptor I
+-field name CRT_STATEMENT descriptor I
+-field name CRT_BLOCK descriptor I
+-field name CRT_ASSIGNMENT descriptor I
+-field name CRT_FLOW_CONTROLLER descriptor I
+-field name CRT_FLOW_TARGET descriptor I
+-field name CRT_INVOKE descriptor I
+-field name CRT_CREATE descriptor I
+-field name CRT_BRANCH_TRUE descriptor I
+-field name CRT_BRANCH_FALSE descriptor I
+-field name TAG_CLASS descriptor I
+-field name TAG_CONSTANTDYNAMIC descriptor I
+-field name TAG_DOUBLE descriptor I
+-field name TAG_FIELDREF descriptor I
+-field name TAG_FLOAT descriptor I
+-field name TAG_INTEGER descriptor I
+-field name TAG_INTERFACEMETHODREF descriptor I
+-field name TAG_INVOKEDYNAMIC descriptor I
+-field name TAG_LONG descriptor I
+-field name TAG_METHODHANDLE descriptor I
+-field name TAG_METHODREF descriptor I
+-field name TAG_METHODTYPE descriptor I
+-field name TAG_MODULE descriptor I
+-field name TAG_NAMEANDTYPE descriptor I
+-field name TAG_PACKAGE descriptor I
+-field name TAG_STRING descriptor I
+-field name TAG_UNICODE descriptor I
+-field name TAG_UTF8 descriptor I
+-field name AEV_BYTE descriptor I
+-field name AEV_CHAR descriptor I
+-field name AEV_DOUBLE descriptor I
+-field name AEV_FLOAT descriptor I
+-field name AEV_INT descriptor I
+-field name AEV_LONG descriptor I
+-field name AEV_SHORT descriptor I
+-field name AEV_BOOLEAN descriptor I
+-field name AEV_STRING descriptor I
+-field name AEV_ENUM descriptor I
+-field name AEV_CLASS descriptor I
+-field name AEV_ANNOTATION descriptor I
+-field name AEV_ARRAY descriptor I
+-field name TAT_CLASS_TYPE_PARAMETER descriptor I
+-field name TAT_METHOD_TYPE_PARAMETER descriptor I
+-field name TAT_CLASS_EXTENDS descriptor I
+-field name TAT_CLASS_TYPE_PARAMETER_BOUND descriptor I
+-field name TAT_METHOD_TYPE_PARAMETER_BOUND descriptor I
+-field name TAT_FIELD descriptor I
+-field name TAT_METHOD_RETURN descriptor I
+-field name TAT_METHOD_RECEIVER descriptor I
+-field name TAT_METHOD_FORMAL_PARAMETER descriptor I
+-field name TAT_THROWS descriptor I
+-field name TAT_LOCAL_VARIABLE descriptor I
+-field name TAT_RESOURCE_VARIABLE descriptor I
+-field name TAT_EXCEPTION_PARAMETER descriptor I
+-field name TAT_INSTANCEOF descriptor I
+-field name TAT_NEW descriptor I
+-field name TAT_CONSTRUCTOR_REFERENCE descriptor I
+-field name TAT_METHOD_REFERENCE descriptor I
+-field name TAT_CAST descriptor I
+-field name TAT_CONSTRUCTOR_INVOCATION_TYPE_ARGUMENT descriptor I
+-field name TAT_METHOD_INVOCATION_TYPE_ARGUMENT descriptor I
+-field name TAT_CONSTRUCTOR_REFERENCE_TYPE_ARGUMENT descriptor I
+-field name TAT_METHOD_REFERENCE_TYPE_ARGUMENT descriptor I
+-field name VT_TOP descriptor I
+-field name VT_INTEGER descriptor I
+-field name VT_FLOAT descriptor I
+-field name VT_DOUBLE descriptor I
+-field name VT_LONG descriptor I
+-field name VT_NULL descriptor I
+-field name VT_UNINITIALIZED_THIS descriptor I
+-field name VT_OBJECT descriptor I
+-field name VT_UNINITIALIZED descriptor I
+-field name DEFAULT_CLASS_FLAGS descriptor I
+-method name transform descriptor (Ljava/lang/classfile/ClassModel;Ljava/lang/classfile/ClassTransform;)[B
+-method name transform descriptor (Ljava/lang/classfile/ClassModel;Ljava/lang/constant/ClassDesc;Ljava/lang/classfile/ClassTransform;)[B
+-method name transform descriptor (Ljava/lang/classfile/ClassModel;Ljava/lang/classfile/constantpool/ClassEntry;Ljava/lang/classfile/ClassTransform;)[B
+field name JAVA_24_VERSION descriptor I constantValue 68 flags 19
+method name transformClass descriptor (Ljava/lang/classfile/ClassModel;Ljava/lang/classfile/ClassTransform;)[B flags 1
+method name transformClass descriptor (Ljava/lang/classfile/ClassModel;Ljava/lang/constant/ClassDesc;Ljava/lang/classfile/ClassTransform;)[B flags 1
+method name transformClass descriptor (Ljava/lang/classfile/ClassModel;Ljava/lang/classfile/constantpool/ClassEntry;Ljava/lang/classfile/ClassTransform;)[B flags 401
+
+class name java/lang/classfile/ClassFile$AttributeMapperOption
+header extends java/lang/Object implements java/lang/classfile/ClassFile$Option nestHost java/lang/classfile/ClassFile sealed true permittedSubclasses jdk/internal/classfile/impl/ClassFileImpl$AttributeMapperOptionImpl flags 601
+innerclass innerClass jdk/internal/classfile/impl/ClassFileImpl$AttributeMapperOptionImpl outerClass jdk/internal/classfile/impl/ClassFileImpl innerClassName AttributeMapperOptionImpl flags 19
+innerclass innerClass java/lang/classfile/ClassFile$AttributeMapperOption outerClass java/lang/classfile/ClassFile innerClassName AttributeMapperOption flags 609
+innerclass innerClass java/lang/classfile/ClassFile$Option outerClass java/lang/classfile/ClassFile innerClassName Option flags 609
+
+class name java/lang/classfile/ClassFile$AttributesProcessingOption
+header extends java/lang/Enum implements java/lang/classfile/ClassFile$Option nestHost java/lang/classfile/ClassFile flags 4031 signature Ljava/lang/Enum;Ljava/lang/classfile/ClassFile$Option;
+innerclass innerClass java/lang/classfile/ClassFile$AttributesProcessingOption outerClass java/lang/classfile/ClassFile innerClassName AttributesProcessingOption flags 4019
+innerclass innerClass java/lang/classfile/ClassFile$Option outerClass java/lang/classfile/ClassFile innerClassName Option flags 609
+-field name DROP_UNSTABLE_ATRIBUTES descriptor Ljava/lang/classfile/ClassFile$AttributesProcessingOption;
+field name DROP_UNSTABLE_ATTRIBUTES descriptor Ljava/lang/classfile/ClassFile$AttributesProcessingOption; flags 4019
+
+class name java/lang/classfile/ClassFile$ClassHierarchyResolverOption
+header extends java/lang/Object implements java/lang/classfile/ClassFile$Option nestHost java/lang/classfile/ClassFile sealed true permittedSubclasses jdk/internal/classfile/impl/ClassFileImpl$ClassHierarchyResolverOptionImpl flags 601
+innerclass innerClass jdk/internal/classfile/impl/ClassFileImpl$ClassHierarchyResolverOptionImpl outerClass jdk/internal/classfile/impl/ClassFileImpl innerClassName ClassHierarchyResolverOptionImpl flags 19
+innerclass innerClass java/lang/classfile/ClassFile$ClassHierarchyResolverOption outerClass java/lang/classfile/ClassFile innerClassName ClassHierarchyResolverOption flags 609
+innerclass innerClass java/lang/classfile/ClassFile$Option outerClass java/lang/classfile/ClassFile innerClassName Option flags 609
+
+class name java/lang/classfile/ClassFile$ConstantPoolSharingOption
+header extends java/lang/Enum implements java/lang/classfile/ClassFile$Option nestHost java/lang/classfile/ClassFile flags 4031 signature Ljava/lang/Enum;Ljava/lang/classfile/ClassFile$Option;
+innerclass innerClass java/lang/classfile/ClassFile$ConstantPoolSharingOption outerClass java/lang/classfile/ClassFile innerClassName ConstantPoolSharingOption flags 4019
+innerclass innerClass java/lang/classfile/ClassFile$Option outerClass java/lang/classfile/ClassFile innerClassName Option flags 609
+
+class name java/lang/classfile/ClassFile$DeadCodeOption
+header extends java/lang/Enum implements java/lang/classfile/ClassFile$Option nestHost java/lang/classfile/ClassFile flags 4031 signature Ljava/lang/Enum;Ljava/lang/classfile/ClassFile$Option;
+innerclass innerClass java/lang/classfile/ClassFile$DeadCodeOption outerClass java/lang/classfile/ClassFile innerClassName DeadCodeOption flags 4019
+innerclass innerClass java/lang/classfile/ClassFile$Option outerClass java/lang/classfile/ClassFile innerClassName Option flags 609
+
+class name java/lang/classfile/ClassFile$DeadLabelsOption
+header extends java/lang/Enum implements java/lang/classfile/ClassFile$Option nestHost java/lang/classfile/ClassFile flags 4031 signature Ljava/lang/Enum;Ljava/lang/classfile/ClassFile$Option;
+innerclass innerClass java/lang/classfile/ClassFile$DeadLabelsOption outerClass java/lang/classfile/ClassFile innerClassName DeadLabelsOption flags 4019
+innerclass innerClass java/lang/classfile/ClassFile$Option outerClass java/lang/classfile/ClassFile innerClassName Option flags 609
+
+class name java/lang/classfile/ClassFile$DebugElementsOption
+header extends java/lang/Enum implements java/lang/classfile/ClassFile$Option nestHost java/lang/classfile/ClassFile flags 4031 signature Ljava/lang/Enum;Ljava/lang/classfile/ClassFile$Option;
+innerclass innerClass java/lang/classfile/ClassFile$DebugElementsOption outerClass java/lang/classfile/ClassFile innerClassName DebugElementsOption flags 4019
+innerclass innerClass java/lang/classfile/ClassFile$Option outerClass java/lang/classfile/ClassFile innerClassName Option flags 609
+
+class name java/lang/classfile/ClassFile$LineNumbersOption
+header extends java/lang/Enum implements java/lang/classfile/ClassFile$Option nestHost java/lang/classfile/ClassFile flags 4031 signature Ljava/lang/Enum;Ljava/lang/classfile/ClassFile$Option;
+innerclass innerClass java/lang/classfile/ClassFile$LineNumbersOption outerClass java/lang/classfile/ClassFile innerClassName LineNumbersOption flags 4019
+innerclass innerClass java/lang/classfile/ClassFile$Option outerClass java/lang/classfile/ClassFile innerClassName Option flags 609
+
+class name java/lang/classfile/ClassFile$Option
+header extends java/lang/Object nestHost java/lang/classfile/ClassFile sealed true permittedSubclasses java/lang/classfile/ClassFile$AttributeMapperOption,java/lang/classfile/ClassFile$ClassHierarchyResolverOption,java/lang/classfile/ClassFile$ConstantPoolSharingOption,java/lang/classfile/ClassFile$DeadCodeOption,java/lang/classfile/ClassFile$DeadLabelsOption,java/lang/classfile/ClassFile$DebugElementsOption,java/lang/classfile/ClassFile$LineNumbersOption,java/lang/classfile/ClassFile$ShortJumpsOption,java/lang/classfile/ClassFile$StackMapsOption,java/lang/classfile/ClassFile$AttributesProcessingOption flags 601
+innerclass innerClass java/lang/classfile/ClassFile$Option outerClass java/lang/classfile/ClassFile innerClassName Option flags 609
+innerclass innerClass java/lang/classfile/ClassFile$AttributeMapperOption outerClass java/lang/classfile/ClassFile innerClassName AttributeMapperOption flags 609
+innerclass innerClass java/lang/classfile/ClassFile$ClassHierarchyResolverOption outerClass java/lang/classfile/ClassFile innerClassName ClassHierarchyResolverOption flags 609
+innerclass innerClass java/lang/classfile/ClassFile$ConstantPoolSharingOption outerClass java/lang/classfile/ClassFile innerClassName ConstantPoolSharingOption flags 4019
+innerclass innerClass java/lang/classfile/ClassFile$DeadCodeOption outerClass java/lang/classfile/ClassFile innerClassName DeadCodeOption flags 4019
+innerclass innerClass java/lang/classfile/ClassFile$DeadLabelsOption outerClass java/lang/classfile/ClassFile innerClassName DeadLabelsOption flags 4019
+innerclass innerClass java/lang/classfile/ClassFile$DebugElementsOption outerClass java/lang/classfile/ClassFile innerClassName DebugElementsOption flags 4019
+innerclass innerClass java/lang/classfile/ClassFile$LineNumbersOption outerClass java/lang/classfile/ClassFile innerClassName LineNumbersOption flags 4019
+innerclass innerClass java/lang/classfile/ClassFile$ShortJumpsOption outerClass java/lang/classfile/ClassFile innerClassName ShortJumpsOption flags 4019
+innerclass innerClass java/lang/classfile/ClassFile$StackMapsOption outerClass java/lang/classfile/ClassFile innerClassName StackMapsOption flags 4019
+innerclass innerClass java/lang/classfile/ClassFile$AttributesProcessingOption outerClass java/lang/classfile/ClassFile innerClassName AttributesProcessingOption flags 4019
+
+class name java/lang/classfile/ClassFile$ShortJumpsOption
+header extends java/lang/Enum implements java/lang/classfile/ClassFile$Option nestHost java/lang/classfile/ClassFile flags 4031 signature Ljava/lang/Enum;Ljava/lang/classfile/ClassFile$Option;
+innerclass innerClass java/lang/classfile/ClassFile$ShortJumpsOption outerClass java/lang/classfile/ClassFile innerClassName ShortJumpsOption flags 4019
+innerclass innerClass java/lang/classfile/ClassFile$Option outerClass java/lang/classfile/ClassFile innerClassName Option flags 609
+
+class name java/lang/classfile/ClassFile$StackMapsOption
+header extends java/lang/Enum implements java/lang/classfile/ClassFile$Option nestHost java/lang/classfile/ClassFile flags 4031 signature Ljava/lang/Enum;Ljava/lang/classfile/ClassFile$Option;
+innerclass innerClass java/lang/classfile/ClassFile$StackMapsOption outerClass java/lang/classfile/ClassFile innerClassName StackMapsOption flags 4019
+innerclass innerClass java/lang/classfile/ClassFile$Option outerClass java/lang/classfile/ClassFile innerClassName Option flags 609
+
+class name java/lang/classfile/ClassFileBuilder
+header extends java/lang/Object implements java/util/function/Consumer sealed true permittedSubclasses java/lang/classfile/ClassBuilder,java/lang/classfile/FieldBuilder,java/lang/classfile/MethodBuilder,java/lang/classfile/CodeBuilder flags 601 signature ;>Ljava/lang/Object;Ljava/util/function/Consumer;
+-method name canWriteDirect descriptor (Ljava/lang/classfile/constantpool/ConstantPool;)Z
+-method name transform descriptor (Ljava/lang/classfile/CompoundElement;Ljava/lang/classfile/ClassFileTransform;)V
+method name transform descriptor (Ljava/lang/classfile/CompoundElement;Ljava/lang/classfile/ClassFileTransform;)Ljava/lang/classfile/ClassFileBuilder; flags 1 signature (Ljava/lang/classfile/CompoundElement;Ljava/lang/classfile/ClassFileTransform<*TE;TB;>;)TB;
+
+class name java/lang/classfile/ClassFileElement
+header extends java/lang/Object sealed true permittedSubclasses java/lang/classfile/AttributedElement,java/lang/classfile/CompoundElement,java/lang/classfile/Attribute,java/lang/classfile/ClassElement,java/lang/classfile/CodeElement,java/lang/classfile/FieldElement,java/lang/classfile/MethodElement flags 601
+
+class name java/lang/classfile/ClassFileTransform
+header extends java/lang/Object sealed true permittedSubclasses java/lang/classfile/ClassTransform,java/lang/classfile/FieldTransform,java/lang/classfile/MethodTransform,java/lang/classfile/CodeTransform flags 601 signature ;E::Ljava/lang/classfile/ClassFileElement;B::Ljava/lang/classfile/ClassFileBuilder;>Ljava/lang/Object;
+-method name resolve descriptor (Ljava/lang/classfile/ClassFileBuilder;)Ljava/lang/classfile/ClassFileTransform$ResolvedTransform;
+
+-class name java/lang/classfile/ClassFileTransform$ResolvedTransform
+
+class name java/lang/classfile/ClassFileVersion
+header extends java/lang/Object implements java/lang/classfile/ClassElement sealed true permittedSubclasses jdk/internal/classfile/impl/ClassFileVersionImpl flags 601
+
+class name java/lang/classfile/ClassHierarchyResolver
+header extends java/lang/Object nestMembers java/lang/classfile/ClassHierarchyResolver$ClassHierarchyInfo flags 601 runtimeAnnotations @Ljava/lang/FunctionalInterface;
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+innerclass innerClass java/lang/classfile/ClassHierarchyResolver$ClassHierarchyInfo outerClass java/lang/classfile/ClassHierarchyResolver innerClassName ClassHierarchyInfo flags 609
+
+class name java/lang/classfile/ClassHierarchyResolver$ClassHierarchyInfo
+header extends java/lang/Object nestHost java/lang/classfile/ClassHierarchyResolver sealed true permittedSubclasses jdk/internal/classfile/impl/ClassHierarchyImpl$ClassHierarchyInfoImpl flags 601
+innerclass innerClass jdk/internal/classfile/impl/ClassHierarchyImpl$ClassHierarchyInfoImpl outerClass jdk/internal/classfile/impl/ClassHierarchyImpl innerClassName ClassHierarchyInfoImpl flags 19
+innerclass innerClass java/lang/classfile/ClassHierarchyResolver$ClassHierarchyInfo outerClass java/lang/classfile/ClassHierarchyResolver innerClassName ClassHierarchyInfo flags 609
+
+class name java/lang/classfile/ClassModel
+header extends java/lang/Object implements java/lang/classfile/CompoundElement,java/lang/classfile/AttributedElement sealed true permittedSubclasses jdk/internal/classfile/impl/ClassImpl flags 601 signature Ljava/lang/Object;Ljava/lang/classfile/CompoundElement;Ljava/lang/classfile/AttributedElement;
+
+class name java/lang/classfile/ClassReader
+header extends java/lang/Object implements java/lang/classfile/constantpool/ConstantPool sealed true permittedSubclasses jdk/internal/classfile/impl/ClassReaderImpl flags 601
+-method name readUtf8Entry descriptor (I)Ljava/lang/classfile/constantpool/Utf8Entry;
+-method name readUtf8EntryOrNull descriptor (I)Ljava/lang/classfile/constantpool/Utf8Entry;
+-method name readModuleEntry descriptor (I)Ljava/lang/classfile/constantpool/ModuleEntry;
+-method name readPackageEntry descriptor (I)Ljava/lang/classfile/constantpool/PackageEntry;
+-method name readClassEntry descriptor (I)Ljava/lang/classfile/constantpool/ClassEntry;
+-method name readNameAndTypeEntry descriptor (I)Ljava/lang/classfile/constantpool/NameAndTypeEntry;
+-method name readMethodHandleEntry descriptor (I)Ljava/lang/classfile/constantpool/MethodHandleEntry;
+-method name compare descriptor (Ljava/lang/classfile/BufWriter;III)Z
+
+class name java/lang/classfile/ClassSignature
+header extends java/lang/Object sealed true permittedSubclasses jdk/internal/classfile/impl/SignaturesImpl$ClassSignatureImpl flags 601
+innerclass innerClass java/lang/classfile/Signature$ClassTypeSig outerClass java/lang/classfile/Signature innerClassName ClassTypeSig flags 609
+innerclass innerClass jdk/internal/classfile/impl/SignaturesImpl$ClassSignatureImpl outerClass jdk/internal/classfile/impl/SignaturesImpl innerClassName ClassSignatureImpl flags 19
+innerclass innerClass java/lang/classfile/Signature$TypeParam outerClass java/lang/classfile/Signature innerClassName TypeParam flags 609
+
+class name java/lang/classfile/ClassTransform
+header extends java/lang/Object implements java/lang/classfile/ClassFileTransform flags 601 signature Ljava/lang/Object;Ljava/lang/classfile/ClassFileTransform; runtimeAnnotations @Ljava/lang/FunctionalInterface;
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+-method name resolve descriptor (Ljava/lang/classfile/ClassBuilder;)Ljava/lang/classfile/ClassFileTransform$ResolvedTransform;
+-method name resolve descriptor (Ljava/lang/classfile/ClassFileBuilder;)Ljava/lang/classfile/ClassFileTransform$ResolvedTransform;
+
+class name java/lang/classfile/CodeBuilder
+header extends java/lang/Object implements java/lang/classfile/ClassFileBuilder nestMembers java/lang/classfile/CodeBuilder$CatchBuilder,java/lang/classfile/CodeBuilder$BlockCodeBuilder sealed true permittedSubclasses java/lang/classfile/CodeBuilder$BlockCodeBuilder,jdk/internal/classfile/impl/ChainedCodeBuilder,jdk/internal/classfile/impl/TerminalCodeBuilder,jdk/internal/classfile/impl/NonterminalCodeBuilder flags 601 signature Ljava/lang/Object;Ljava/lang/classfile/ClassFileBuilder;
+innerclass innerClass java/lang/classfile/Opcode$Kind outerClass java/lang/classfile/Opcode innerClassName Kind flags 4019
+innerclass innerClass java/lang/classfile/instruction/ConstantInstruction$IntrinsicConstantInstruction outerClass java/lang/classfile/instruction/ConstantInstruction innerClassName IntrinsicConstantInstruction flags 609
+innerclass innerClass java/lang/classfile/instruction/ConstantInstruction$ArgumentConstantInstruction outerClass java/lang/classfile/instruction/ConstantInstruction innerClassName ArgumentConstantInstruction flags 609
+innerclass innerClass java/lang/classfile/instruction/ConstantInstruction$LoadConstantInstruction outerClass java/lang/classfile/instruction/ConstantInstruction innerClassName LoadConstantInstruction flags 609
+innerclass innerClass java/lang/classfile/CodeBuilder$CatchBuilder outerClass java/lang/classfile/CodeBuilder innerClassName CatchBuilder flags 609
+innerclass innerClass java/lang/classfile/CodeBuilder$BlockCodeBuilder outerClass java/lang/classfile/CodeBuilder innerClassName BlockCodeBuilder flags 609
+-method name original descriptor ()Ljava/util/Optional;
+-method name if_nonnull descriptor (Ljava/lang/classfile/Label;)Ljava/lang/classfile/CodeBuilder;
+-method name if_null descriptor (Ljava/lang/classfile/Label;)Ljava/lang/classfile/CodeBuilder;
+-method name loadConstant descriptor (Ljava/lang/classfile/Opcode;Ljava/lang/constant/ConstantDesc;)Ljava/lang/classfile/CodeBuilder;
+method name loadConstant descriptor (I)Ljava/lang/classfile/CodeBuilder; flags 1
+method name loadConstant descriptor (J)Ljava/lang/classfile/CodeBuilder; flags 1
+method name loadConstant descriptor (F)Ljava/lang/classfile/CodeBuilder; flags 1
+method name loadConstant descriptor (D)Ljava/lang/classfile/CodeBuilder; flags 1
+method name ifnonnull descriptor (Ljava/lang/classfile/Label;)Ljava/lang/classfile/CodeBuilder; flags 1
+method name ifnull descriptor (Ljava/lang/classfile/Label;)Ljava/lang/classfile/CodeBuilder; flags 1
+
+class name java/lang/classfile/CodeBuilder$BlockCodeBuilder
+header extends java/lang/Object implements java/lang/classfile/CodeBuilder nestHost java/lang/classfile/CodeBuilder sealed true permittedSubclasses jdk/internal/classfile/impl/BlockCodeBuilderImpl flags 601
+innerclass innerClass java/lang/classfile/CodeBuilder$BlockCodeBuilder outerClass java/lang/classfile/CodeBuilder innerClassName BlockCodeBuilder flags 609
+
+class name java/lang/classfile/CodeBuilder$CatchBuilder
+header extends java/lang/Object nestHost java/lang/classfile/CodeBuilder sealed true permittedSubclasses jdk/internal/classfile/impl/CatchBuilderImpl flags 601
+innerclass innerClass java/lang/classfile/CodeBuilder$CatchBuilder outerClass java/lang/classfile/CodeBuilder innerClassName CatchBuilder flags 609
+innerclass innerClass java/lang/classfile/CodeBuilder$BlockCodeBuilder outerClass java/lang/classfile/CodeBuilder innerClassName BlockCodeBuilder flags 609
+
+class name java/lang/classfile/CodeElement
+header extends java/lang/Object implements java/lang/classfile/ClassFileElement sealed true permittedSubclasses java/lang/classfile/Instruction,java/lang/classfile/PseudoInstruction,java/lang/classfile/CustomAttribute,java/lang/classfile/attribute/RuntimeVisibleTypeAnnotationsAttribute,java/lang/classfile/attribute/RuntimeInvisibleTypeAnnotationsAttribute,java/lang/classfile/attribute/StackMapTableAttribute flags 601
+
+class name java/lang/classfile/CodeModel
+header extends java/lang/Object implements java/lang/classfile/CompoundElement,java/lang/classfile/AttributedElement,java/lang/classfile/MethodElement sealed true permittedSubclasses java/lang/classfile/attribute/CodeAttribute,jdk/internal/classfile/impl/BufferedCodeBuilder$Model flags 601 signature Ljava/lang/Object;Ljava/lang/classfile/CompoundElement;Ljava/lang/classfile/AttributedElement;Ljava/lang/classfile/MethodElement;
+innerclass innerClass jdk/internal/classfile/impl/BufferedCodeBuilder$Model outerClass jdk/internal/classfile/impl/BufferedCodeBuilder innerClassName Model flags 11
+-method name maxLocals descriptor ()I
+-method name maxStack descriptor ()I
+
+class name java/lang/classfile/CodeTransform
+header extends java/lang/Object implements java/lang/classfile/ClassFileTransform flags 601 signature Ljava/lang/Object;Ljava/lang/classfile/ClassFileTransform; runtimeAnnotations @Ljava/lang/FunctionalInterface;
+-method name resolve descriptor (Ljava/lang/classfile/CodeBuilder;)Ljava/lang/classfile/ClassFileTransform$ResolvedTransform;
+-method name resolve descriptor (Ljava/lang/classfile/ClassFileBuilder;)Ljava/lang/classfile/ClassFileTransform$ResolvedTransform;
+
+class name java/lang/classfile/CompoundElement
+header extends java/lang/Object implements java/lang/classfile/ClassFileElement,java/lang/Iterable sealed true permittedSubclasses java/lang/classfile/ClassModel,java/lang/classfile/CodeModel,java/lang/classfile/FieldModel,java/lang/classfile/MethodModel,jdk/internal/classfile/impl/AbstractUnboundModel flags 601 signature Ljava/lang/Object;Ljava/lang/classfile/ClassFileElement;Ljava/lang/Iterable;
+-method name forEachElement descriptor (Ljava/util/function/Consumer;)V
+-method name elements descriptor ()Ljava/lang/Iterable;
+method name forEach descriptor (Ljava/util/function/Consumer;)V flags 401 signature (Ljava/util/function/Consumer<-TE;>;)V
+
+class name java/lang/classfile/CustomAttribute
+header extends java/lang/Object implements java/lang/classfile/Attribute,java/lang/classfile/CodeElement,java/lang/classfile/ClassElement,java/lang/classfile/MethodElement,java/lang/classfile/FieldElement flags 421 signature ;>Ljava/lang/Object;Ljava/lang/classfile/Attribute;Ljava/lang/classfile/CodeElement;Ljava/lang/classfile/ClassElement;Ljava/lang/classfile/MethodElement;Ljava/lang/classfile/FieldElement;
+-method name attributeName descriptor ()Ljava/lang/String;
+-method name writeTo descriptor (Ljava/lang/classfile/BufWriter;)V
+method name attributeName descriptor ()Ljava/lang/classfile/constantpool/Utf8Entry; flags 1
+
+class name java/lang/classfile/FieldBuilder
+header extends java/lang/Object implements java/lang/classfile/ClassFileBuilder sealed true permittedSubclasses jdk/internal/classfile/impl/TerminalFieldBuilder,jdk/internal/classfile/impl/ChainedFieldBuilder flags 601 signature Ljava/lang/Object;Ljava/lang/classfile/ClassFileBuilder;
+innerclass innerClass java/lang/reflect/AccessFlag$Location outerClass java/lang/reflect/AccessFlag innerClassName Location flags 4019
+-method name original descriptor ()Ljava/util/Optional;
+
+class name java/lang/classfile/FieldElement
+header extends java/lang/Object implements java/lang/classfile/ClassFileElement sealed true permittedSubclasses java/lang/classfile/AccessFlags,java/lang/classfile/CustomAttribute,java/lang/classfile/attribute/ConstantValueAttribute,java/lang/classfile/attribute/DeprecatedAttribute,java/lang/classfile/attribute/RuntimeInvisibleAnnotationsAttribute,java/lang/classfile/attribute/RuntimeInvisibleTypeAnnotationsAttribute,java/lang/classfile/attribute/RuntimeVisibleAnnotationsAttribute,java/lang/classfile/attribute/RuntimeVisibleTypeAnnotationsAttribute,java/lang/classfile/attribute/SignatureAttribute,java/lang/classfile/attribute/SyntheticAttribute,java/lang/classfile/attribute/UnknownAttribute flags 601
+
+class name java/lang/classfile/FieldModel
+header extends java/lang/Object implements java/lang/classfile/CompoundElement,java/lang/classfile/AttributedElement,java/lang/classfile/ClassElement sealed true permittedSubclasses jdk/internal/classfile/impl/BufferedFieldBuilder$Model,jdk/internal/classfile/impl/FieldImpl flags 601 signature Ljava/lang/Object;Ljava/lang/classfile/CompoundElement;Ljava/lang/classfile/AttributedElement;Ljava/lang/classfile/ClassElement;
+innerclass innerClass jdk/internal/classfile/impl/BufferedFieldBuilder$Model outerClass jdk/internal/classfile/impl/BufferedFieldBuilder innerClassName Model flags 11
+
+class name java/lang/classfile/FieldTransform
+header extends java/lang/Object implements java/lang/classfile/ClassFileTransform flags 601 signature Ljava/lang/Object;Ljava/lang/classfile/ClassFileTransform; runtimeAnnotations @Ljava/lang/FunctionalInterface;
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+-method name resolve descriptor (Ljava/lang/classfile/FieldBuilder;)Ljava/lang/classfile/ClassFileTransform$ResolvedTransform;
+-method name resolve descriptor (Ljava/lang/classfile/ClassFileBuilder;)Ljava/lang/classfile/ClassFileTransform$ResolvedTransform;
+
+class name java/lang/classfile/Instruction
+header extends java/lang/Object implements java/lang/classfile/CodeElement sealed true permittedSubclasses java/lang/classfile/instruction/ArrayLoadInstruction,java/lang/classfile/instruction/ArrayStoreInstruction,java/lang/classfile/instruction/BranchInstruction,java/lang/classfile/instruction/ConstantInstruction,java/lang/classfile/instruction/ConvertInstruction,java/lang/classfile/instruction/DiscontinuedInstruction,java/lang/classfile/instruction/FieldInstruction,java/lang/classfile/instruction/InvokeDynamicInstruction,java/lang/classfile/instruction/InvokeInstruction,java/lang/classfile/instruction/LoadInstruction,java/lang/classfile/instruction/StoreInstruction,java/lang/classfile/instruction/IncrementInstruction,java/lang/classfile/instruction/LookupSwitchInstruction,java/lang/classfile/instruction/MonitorInstruction,java/lang/classfile/instruction/NewMultiArrayInstruction,java/lang/classfile/instruction/NewObjectInstruction,java/lang/classfile/instruction/NewPrimitiveArrayInstruction,java/lang/classfile/instruction/NewReferenceArrayInstruction,java/lang/classfile/instruction/NopInstruction,java/lang/classfile/instruction/OperatorInstruction,java/lang/classfile/instruction/ReturnInstruction,java/lang/classfile/instruction/StackInstruction,java/lang/classfile/instruction/TableSwitchInstruction,java/lang/classfile/instruction/ThrowInstruction,java/lang/classfile/instruction/TypeCheckInstruction,jdk/internal/classfile/impl/AbstractInstruction flags 601
+
+class name java/lang/classfile/Interfaces
+header extends java/lang/Object implements java/lang/classfile/ClassElement sealed true permittedSubclasses jdk/internal/classfile/impl/InterfacesImpl flags 601
+
+class name java/lang/classfile/Label
+header extends java/lang/Object sealed true permittedSubclasses jdk/internal/classfile/impl/LabelImpl flags 601
+
+class name java/lang/classfile/MethodBuilder
+header extends java/lang/Object implements java/lang/classfile/ClassFileBuilder sealed true permittedSubclasses jdk/internal/classfile/impl/ChainedMethodBuilder,jdk/internal/classfile/impl/TerminalMethodBuilder flags 601 signature Ljava/lang/Object;Ljava/lang/classfile/ClassFileBuilder;
+innerclass innerClass java/lang/reflect/AccessFlag$Location outerClass java/lang/reflect/AccessFlag innerClassName Location flags 4019
+-method name original descriptor ()Ljava/util/Optional;
+
+class name java/lang/classfile/MethodElement
+header extends java/lang/Object implements java/lang/classfile/ClassFileElement sealed true permittedSubclasses java/lang/classfile/AccessFlags,java/lang/classfile/CodeModel,java/lang/classfile/CustomAttribute,java/lang/classfile/attribute/AnnotationDefaultAttribute,java/lang/classfile/attribute/DeprecatedAttribute,java/lang/classfile/attribute/ExceptionsAttribute,java/lang/classfile/attribute/MethodParametersAttribute,java/lang/classfile/attribute/RuntimeInvisibleAnnotationsAttribute,java/lang/classfile/attribute/RuntimeInvisibleParameterAnnotationsAttribute,java/lang/classfile/attribute/RuntimeInvisibleTypeAnnotationsAttribute,java/lang/classfile/attribute/RuntimeVisibleAnnotationsAttribute,java/lang/classfile/attribute/RuntimeVisibleParameterAnnotationsAttribute,java/lang/classfile/attribute/RuntimeVisibleTypeAnnotationsAttribute,java/lang/classfile/attribute/SignatureAttribute,java/lang/classfile/attribute/SyntheticAttribute,java/lang/classfile/attribute/UnknownAttribute flags 601
+
+class name java/lang/classfile/MethodModel
+header extends java/lang/Object implements java/lang/classfile/CompoundElement,java/lang/classfile/AttributedElement,java/lang/classfile/ClassElement sealed true permittedSubclasses jdk/internal/classfile/impl/BufferedMethodBuilder$Model,jdk/internal/classfile/impl/MethodImpl flags 601 signature Ljava/lang/Object;Ljava/lang/classfile/CompoundElement;Ljava/lang/classfile/AttributedElement;Ljava/lang/classfile/ClassElement;
+innerclass innerClass jdk/internal/classfile/impl/BufferedMethodBuilder$Model outerClass jdk/internal/classfile/impl/BufferedMethodBuilder innerClassName Model flags 11
+
+class name java/lang/classfile/MethodSignature
+header extends java/lang/Object sealed true permittedSubclasses jdk/internal/classfile/impl/SignaturesImpl$MethodSignatureImpl flags 601
+innerclass innerClass jdk/internal/classfile/impl/SignaturesImpl$MethodSignatureImpl outerClass jdk/internal/classfile/impl/SignaturesImpl innerClassName MethodSignatureImpl flags 19
+innerclass innerClass java/lang/classfile/Signature$TypeParam outerClass java/lang/classfile/Signature innerClassName TypeParam flags 609
+innerclass innerClass java/lang/classfile/Signature$ThrowableSig outerClass java/lang/classfile/Signature innerClassName ThrowableSig flags 609
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/lang/classfile/MethodTransform
+header extends java/lang/Object implements java/lang/classfile/ClassFileTransform flags 601 signature Ljava/lang/Object;Ljava/lang/classfile/ClassFileTransform; runtimeAnnotations @Ljava/lang/FunctionalInterface;
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+-method name resolve descriptor (Ljava/lang/classfile/MethodBuilder;)Ljava/lang/classfile/ClassFileTransform$ResolvedTransform;
+-method name resolve descriptor (Ljava/lang/classfile/ClassFileBuilder;)Ljava/lang/classfile/ClassFileTransform$ResolvedTransform;
+
+class name java/lang/classfile/Opcode
+header extends java/lang/Enum nestMembers java/lang/classfile/Opcode$Kind flags 4031 signature Ljava/lang/Enum;
+innerclass innerClass java/lang/classfile/Opcode$Kind outerClass java/lang/classfile/Opcode innerClassName Kind flags 4019
+-method name primaryTypeKind descriptor ()Ljava/lang/classfile/TypeKind;
+-method name secondaryTypeKind descriptor ()Ljava/lang/classfile/TypeKind;
+-method name slot descriptor ()I
+-method name constantValue descriptor ()Ljava/lang/constant/ConstantDesc;
+-method name isUnconditionalBranch descriptor ()Z
+
+class name java/lang/classfile/Opcode$Kind
+header extends java/lang/Enum nestHost java/lang/classfile/Opcode flags 4031 signature Ljava/lang/Enum;
+innerclass innerClass java/lang/classfile/Opcode$Kind outerClass java/lang/classfile/Opcode innerClassName Kind flags 4019
+
+class name java/lang/classfile/PseudoInstruction
+header extends java/lang/Object implements java/lang/classfile/CodeElement sealed true permittedSubclasses java/lang/classfile/instruction/CharacterRange,java/lang/classfile/instruction/ExceptionCatch,java/lang/classfile/instruction/LabelTarget,java/lang/classfile/instruction/LineNumber,java/lang/classfile/instruction/LocalVariable,java/lang/classfile/instruction/LocalVariableType,jdk/internal/classfile/impl/AbstractPseudoInstruction flags 601
+
+class name java/lang/classfile/Signature
+header extends java/lang/Object nestMembers java/lang/classfile/Signature$ThrowableSig,java/lang/classfile/Signature$TypeParam,java/lang/classfile/Signature$ArrayTypeSig,java/lang/classfile/Signature$TypeVarSig,java/lang/classfile/Signature$TypeArg,java/lang/classfile/Signature$TypeArg$Bounded,java/lang/classfile/Signature$TypeArg$Bounded$WildcardIndicator,java/lang/classfile/Signature$TypeArg$Unbounded,java/lang/classfile/Signature$ClassTypeSig,java/lang/classfile/Signature$RefTypeSig,java/lang/classfile/Signature$BaseTypeSig sealed true permittedSubclasses java/lang/classfile/Signature$BaseTypeSig,java/lang/classfile/Signature$RefTypeSig,java/lang/classfile/Signature$ThrowableSig flags 601
+innerclass innerClass java/lang/classfile/Signature$ArrayTypeSig outerClass java/lang/classfile/Signature innerClassName ArrayTypeSig flags 609
+innerclass innerClass java/lang/classfile/Signature$BaseTypeSig outerClass java/lang/classfile/Signature innerClassName BaseTypeSig flags 609
+innerclass innerClass java/lang/classfile/Signature$TypeArg outerClass java/lang/classfile/Signature innerClassName TypeArg flags 609
+innerclass innerClass java/lang/classfile/Signature$ClassTypeSig outerClass java/lang/classfile/Signature innerClassName ClassTypeSig flags 609
+innerclass innerClass java/lang/classfile/Signature$ThrowableSig outerClass java/lang/classfile/Signature innerClassName ThrowableSig flags 609
+innerclass innerClass java/lang/classfile/Signature$TypeParam outerClass java/lang/classfile/Signature innerClassName TypeParam flags 609
+innerclass innerClass java/lang/classfile/Signature$TypeVarSig outerClass java/lang/classfile/Signature innerClassName TypeVarSig flags 609
+innerclass innerClass java/lang/classfile/Signature$RefTypeSig outerClass java/lang/classfile/Signature innerClassName RefTypeSig flags 609
+innerclass innerClass java/lang/classfile/Signature$TypeArg$Bounded outerClass java/lang/classfile/Signature$TypeArg innerClassName Bounded flags 609
+innerclass innerClass java/lang/classfile/Signature$TypeArg$Bounded$WildcardIndicator outerClass java/lang/classfile/Signature$TypeArg$Bounded innerClassName WildcardIndicator flags 4019
+innerclass innerClass java/lang/classfile/Signature$TypeArg$Unbounded outerClass java/lang/classfile/Signature$TypeArg innerClassName Unbounded flags 609
+
+class name java/lang/classfile/Signature$ArrayTypeSig
+header extends java/lang/Object implements java/lang/classfile/Signature$RefTypeSig nestHost java/lang/classfile/Signature sealed true permittedSubclasses jdk/internal/classfile/impl/SignaturesImpl$ArrayTypeSigImpl flags 601
+innerclass innerClass java/lang/classfile/Signature$ArrayTypeSig outerClass java/lang/classfile/Signature innerClassName ArrayTypeSig flags 609
+innerclass innerClass jdk/internal/classfile/impl/SignaturesImpl$ArrayTypeSigImpl outerClass jdk/internal/classfile/impl/SignaturesImpl innerClassName ArrayTypeSigImpl flags 19
+innerclass innerClass java/lang/classfile/Signature$RefTypeSig outerClass java/lang/classfile/Signature innerClassName RefTypeSig flags 609
+
+class name java/lang/classfile/Signature$BaseTypeSig
+header extends java/lang/Object implements java/lang/classfile/Signature nestHost java/lang/classfile/Signature sealed true permittedSubclasses jdk/internal/classfile/impl/SignaturesImpl$BaseTypeSigImpl flags 601
+innerclass innerClass jdk/internal/classfile/impl/SignaturesImpl$BaseTypeSigImpl outerClass jdk/internal/classfile/impl/SignaturesImpl innerClassName BaseTypeSigImpl flags 19
+innerclass innerClass java/lang/classfile/Signature$BaseTypeSig outerClass java/lang/classfile/Signature innerClassName BaseTypeSig flags 609
+
+class name java/lang/classfile/Signature$ClassTypeSig
+header extends java/lang/Object implements java/lang/classfile/Signature$RefTypeSig,java/lang/classfile/Signature$ThrowableSig nestHost java/lang/classfile/Signature sealed true permittedSubclasses jdk/internal/classfile/impl/SignaturesImpl$ClassTypeSigImpl flags 601
+innerclass innerClass java/lang/classfile/Signature$ClassTypeSig outerClass java/lang/classfile/Signature innerClassName ClassTypeSig flags 609
+innerclass innerClass java/lang/classfile/Signature$TypeArg outerClass java/lang/classfile/Signature innerClassName TypeArg flags 609
+innerclass innerClass jdk/internal/classfile/impl/SignaturesImpl$ClassTypeSigImpl outerClass jdk/internal/classfile/impl/SignaturesImpl innerClassName ClassTypeSigImpl flags 19
+innerclass innerClass java/lang/classfile/Signature$RefTypeSig outerClass java/lang/classfile/Signature innerClassName RefTypeSig flags 609
+innerclass innerClass java/lang/classfile/Signature$ThrowableSig outerClass java/lang/classfile/Signature innerClassName ThrowableSig flags 609
+
+class name java/lang/classfile/Signature$RefTypeSig
+header extends java/lang/Object implements java/lang/classfile/Signature nestHost java/lang/classfile/Signature sealed true permittedSubclasses java/lang/classfile/Signature$ArrayTypeSig,java/lang/classfile/Signature$ClassTypeSig,java/lang/classfile/Signature$TypeVarSig flags 601
+innerclass innerClass java/lang/classfile/Signature$RefTypeSig outerClass java/lang/classfile/Signature innerClassName RefTypeSig flags 609
+innerclass innerClass java/lang/classfile/Signature$ArrayTypeSig outerClass java/lang/classfile/Signature innerClassName ArrayTypeSig flags 609
+innerclass innerClass java/lang/classfile/Signature$ClassTypeSig outerClass java/lang/classfile/Signature innerClassName ClassTypeSig flags 609
+innerclass innerClass java/lang/classfile/Signature$TypeVarSig outerClass java/lang/classfile/Signature innerClassName TypeVarSig flags 609
+
+class name java/lang/classfile/Signature$ThrowableSig
+header extends java/lang/Object implements java/lang/classfile/Signature nestHost java/lang/classfile/Signature sealed true permittedSubclasses java/lang/classfile/Signature$ClassTypeSig,java/lang/classfile/Signature$TypeVarSig flags 601
+innerclass innerClass java/lang/classfile/Signature$ThrowableSig outerClass java/lang/classfile/Signature innerClassName ThrowableSig flags 609
+innerclass innerClass java/lang/classfile/Signature$ClassTypeSig outerClass java/lang/classfile/Signature innerClassName ClassTypeSig flags 609
+innerclass innerClass java/lang/classfile/Signature$TypeVarSig outerClass java/lang/classfile/Signature innerClassName TypeVarSig flags 609
+
+class name java/lang/classfile/Signature$TypeArg
+header extends java/lang/Object nestHost java/lang/classfile/Signature sealed true permittedSubclasses java/lang/classfile/Signature$TypeArg$Unbounded,java/lang/classfile/Signature$TypeArg$Bounded flags 601
+innerclass innerClass java/lang/classfile/Signature$TypeArg outerClass java/lang/classfile/Signature innerClassName TypeArg flags 609
+innerclass innerClass java/lang/classfile/Signature$TypeArg$Bounded outerClass java/lang/classfile/Signature$TypeArg innerClassName Bounded flags 609
+innerclass innerClass java/lang/classfile/Signature$TypeArg$Bounded$WildcardIndicator outerClass java/lang/classfile/Signature$TypeArg$Bounded innerClassName WildcardIndicator flags 4019
+innerclass innerClass java/lang/classfile/Signature$RefTypeSig outerClass java/lang/classfile/Signature innerClassName RefTypeSig flags 609
+innerclass innerClass jdk/internal/classfile/impl/SignaturesImpl$UnboundedTypeArgImpl outerClass jdk/internal/classfile/impl/SignaturesImpl innerClassName UnboundedTypeArgImpl flags 4019
+innerclass innerClass jdk/internal/classfile/impl/SignaturesImpl$TypeArgImpl outerClass jdk/internal/classfile/impl/SignaturesImpl innerClassName TypeArgImpl flags 19
+innerclass innerClass java/lang/classfile/Signature$TypeArg$Unbounded outerClass java/lang/classfile/Signature$TypeArg innerClassName Unbounded flags 609
+
+class name java/lang/classfile/Signature$TypeArg$Bounded
+header extends java/lang/Object implements java/lang/classfile/Signature$TypeArg nestHost java/lang/classfile/Signature sealed true permittedSubclasses jdk/internal/classfile/impl/SignaturesImpl$TypeArgImpl flags 601
+innerclass innerClass java/lang/classfile/Signature$TypeArg outerClass java/lang/classfile/Signature innerClassName TypeArg flags 609
+innerclass innerClass java/lang/classfile/Signature$TypeArg$Bounded outerClass java/lang/classfile/Signature$TypeArg innerClassName Bounded flags 609
+innerclass innerClass java/lang/classfile/Signature$TypeArg$Bounded$WildcardIndicator outerClass java/lang/classfile/Signature$TypeArg$Bounded innerClassName WildcardIndicator flags 4019
+innerclass innerClass java/lang/classfile/Signature$RefTypeSig outerClass java/lang/classfile/Signature innerClassName RefTypeSig flags 609
+innerclass innerClass jdk/internal/classfile/impl/SignaturesImpl$TypeArgImpl outerClass jdk/internal/classfile/impl/SignaturesImpl innerClassName TypeArgImpl flags 19
+
+class name java/lang/classfile/Signature$TypeArg$Bounded$WildcardIndicator
+header extends java/lang/Enum nestHost java/lang/classfile/Signature flags 4031 signature Ljava/lang/Enum;
+innerclass innerClass java/lang/classfile/Signature$TypeArg outerClass java/lang/classfile/Signature innerClassName TypeArg flags 609
+innerclass innerClass java/lang/classfile/Signature$TypeArg$Bounded outerClass java/lang/classfile/Signature$TypeArg innerClassName Bounded flags 609
+innerclass innerClass java/lang/classfile/Signature$TypeArg$Bounded$WildcardIndicator outerClass java/lang/classfile/Signature$TypeArg$Bounded innerClassName WildcardIndicator flags 4019
+
+class name java/lang/classfile/Signature$TypeArg$Unbounded
+header extends java/lang/Object implements java/lang/classfile/Signature$TypeArg nestHost java/lang/classfile/Signature sealed true permittedSubclasses jdk/internal/classfile/impl/SignaturesImpl$UnboundedTypeArgImpl flags 601
+innerclass innerClass java/lang/classfile/Signature$TypeArg outerClass java/lang/classfile/Signature innerClassName TypeArg flags 609
+innerclass innerClass java/lang/classfile/Signature$TypeArg$Unbounded outerClass java/lang/classfile/Signature$TypeArg innerClassName Unbounded flags 609
+innerclass innerClass jdk/internal/classfile/impl/SignaturesImpl$UnboundedTypeArgImpl outerClass jdk/internal/classfile/impl/SignaturesImpl innerClassName UnboundedTypeArgImpl flags 4019
+
+class name java/lang/classfile/Signature$TypeParam
+header extends java/lang/Object nestHost java/lang/classfile/Signature sealed true permittedSubclasses jdk/internal/classfile/impl/SignaturesImpl$TypeParamImpl flags 601
+innerclass innerClass jdk/internal/classfile/impl/SignaturesImpl$TypeParamImpl outerClass jdk/internal/classfile/impl/SignaturesImpl innerClassName TypeParamImpl flags 19
+innerclass innerClass java/lang/classfile/Signature$TypeParam outerClass java/lang/classfile/Signature innerClassName TypeParam flags 609
+innerclass innerClass java/lang/classfile/Signature$RefTypeSig outerClass java/lang/classfile/Signature innerClassName RefTypeSig flags 609
+
+class name java/lang/classfile/Signature$TypeVarSig
+header extends java/lang/Object implements java/lang/classfile/Signature$RefTypeSig,java/lang/classfile/Signature$ThrowableSig nestHost java/lang/classfile/Signature sealed true permittedSubclasses jdk/internal/classfile/impl/SignaturesImpl$TypeVarSigImpl flags 601
+innerclass innerClass jdk/internal/classfile/impl/SignaturesImpl$TypeVarSigImpl outerClass jdk/internal/classfile/impl/SignaturesImpl innerClassName TypeVarSigImpl flags 19
+innerclass innerClass java/lang/classfile/Signature$TypeVarSig outerClass java/lang/classfile/Signature innerClassName TypeVarSig flags 609
+innerclass innerClass java/lang/classfile/Signature$RefTypeSig outerClass java/lang/classfile/Signature innerClassName RefTypeSig flags 609
+innerclass innerClass java/lang/classfile/Signature$ThrowableSig outerClass java/lang/classfile/Signature innerClassName ThrowableSig flags 609
+
+class name java/lang/classfile/Superclass
+header extends java/lang/Object implements java/lang/classfile/ClassElement sealed true permittedSubclasses jdk/internal/classfile/impl/SuperclassImpl flags 601
+
+class name java/lang/classfile/TypeAnnotation
+header extends java/lang/Object nestMembers java/lang/classfile/TypeAnnotation$TypePathComponent,java/lang/classfile/TypeAnnotation$TypePathComponent$Kind,java/lang/classfile/TypeAnnotation$TypeArgumentTarget,java/lang/classfile/TypeAnnotation$OffsetTarget,java/lang/classfile/TypeAnnotation$CatchTarget,java/lang/classfile/TypeAnnotation$LocalVarTargetInfo,java/lang/classfile/TypeAnnotation$LocalVarTarget,java/lang/classfile/TypeAnnotation$ThrowsTarget,java/lang/classfile/TypeAnnotation$FormalParameterTarget,java/lang/classfile/TypeAnnotation$EmptyTarget,java/lang/classfile/TypeAnnotation$TypeParameterBoundTarget,java/lang/classfile/TypeAnnotation$SupertypeTarget,java/lang/classfile/TypeAnnotation$TypeParameterTarget,java/lang/classfile/TypeAnnotation$TargetInfo,java/lang/classfile/TypeAnnotation$TargetType sealed true permittedSubclasses jdk/internal/classfile/impl/UnboundAttribute$UnboundTypeAnnotation flags 601
+innerclass innerClass jdk/internal/classfile/impl/UnboundAttribute$UnboundTypeAnnotation outerClass jdk/internal/classfile/impl/UnboundAttribute innerClassName UnboundTypeAnnotation flags 19
+innerclass innerClass java/lang/classfile/TypeAnnotation$TargetInfo outerClass java/lang/classfile/TypeAnnotation innerClassName TargetInfo flags 609
+innerclass innerClass java/lang/classfile/TypeAnnotation$TypePathComponent outerClass java/lang/classfile/TypeAnnotation innerClassName TypePathComponent flags 609
+innerclass innerClass java/lang/classfile/TypeAnnotation$TypeArgumentTarget outerClass java/lang/classfile/TypeAnnotation innerClassName TypeArgumentTarget flags 609
+innerclass innerClass java/lang/classfile/TypeAnnotation$OffsetTarget outerClass java/lang/classfile/TypeAnnotation innerClassName OffsetTarget flags 609
+innerclass innerClass java/lang/classfile/TypeAnnotation$CatchTarget outerClass java/lang/classfile/TypeAnnotation innerClassName CatchTarget flags 609
+innerclass innerClass java/lang/classfile/TypeAnnotation$LocalVarTargetInfo outerClass java/lang/classfile/TypeAnnotation innerClassName LocalVarTargetInfo flags 609
+innerclass innerClass java/lang/classfile/TypeAnnotation$LocalVarTarget outerClass java/lang/classfile/TypeAnnotation innerClassName LocalVarTarget flags 609
+innerclass innerClass java/lang/classfile/TypeAnnotation$ThrowsTarget outerClass java/lang/classfile/TypeAnnotation innerClassName ThrowsTarget flags 609
+innerclass innerClass java/lang/classfile/TypeAnnotation$FormalParameterTarget outerClass java/lang/classfile/TypeAnnotation innerClassName FormalParameterTarget flags 609
+innerclass innerClass java/lang/classfile/TypeAnnotation$EmptyTarget outerClass java/lang/classfile/TypeAnnotation innerClassName EmptyTarget flags 609
+innerclass innerClass java/lang/classfile/TypeAnnotation$TypeParameterBoundTarget outerClass java/lang/classfile/TypeAnnotation innerClassName TypeParameterBoundTarget flags 609
+innerclass innerClass java/lang/classfile/TypeAnnotation$SupertypeTarget outerClass java/lang/classfile/TypeAnnotation innerClassName SupertypeTarget flags 609
+innerclass innerClass java/lang/classfile/TypeAnnotation$TypeParameterTarget outerClass java/lang/classfile/TypeAnnotation innerClassName TypeParameterTarget flags 609
+innerclass innerClass java/lang/classfile/TypeAnnotation$TargetType outerClass java/lang/classfile/TypeAnnotation innerClassName TargetType flags 4019
+innerclass innerClass java/lang/classfile/TypeAnnotation$TypePathComponent$Kind outerClass java/lang/classfile/TypeAnnotation$TypePathComponent innerClassName Kind flags 4019
+-method name of descriptor (Ljava/lang/classfile/TypeAnnotation$TargetInfo;Ljava/util/List;Ljava/lang/classfile/constantpool/Utf8Entry;Ljava/util/List;)Ljava/lang/classfile/TypeAnnotation;
+-method name of descriptor (Ljava/lang/classfile/TypeAnnotation$TargetInfo;Ljava/util/List;Ljava/lang/constant/ClassDesc;[Ljava/lang/classfile/AnnotationElement;)Ljava/lang/classfile/TypeAnnotation;
+-method name of descriptor (Ljava/lang/classfile/TypeAnnotation$TargetInfo;Ljava/util/List;Ljava/lang/constant/ClassDesc;Ljava/util/List;)Ljava/lang/classfile/TypeAnnotation;
+-method name of descriptor (Ljava/lang/classfile/TypeAnnotation$TargetInfo;Ljava/util/List;Ljava/lang/classfile/constantpool/Utf8Entry;[Ljava/lang/classfile/AnnotationElement;)Ljava/lang/classfile/TypeAnnotation;
+method name annotation descriptor ()Ljava/lang/classfile/Annotation; flags 401
+method name of descriptor (Ljava/lang/classfile/TypeAnnotation$TargetInfo;Ljava/util/List;Ljava/lang/classfile/Annotation;)Ljava/lang/classfile/TypeAnnotation; flags 9 signature (Ljava/lang/classfile/TypeAnnotation$TargetInfo;Ljava/util/List;Ljava/lang/classfile/Annotation;)Ljava/lang/classfile/TypeAnnotation;
+
+class name java/lang/classfile/TypeAnnotation$CatchTarget
+header extends java/lang/Object implements java/lang/classfile/TypeAnnotation$TargetInfo nestHost java/lang/classfile/TypeAnnotation sealed true permittedSubclasses jdk/internal/classfile/impl/TargetInfoImpl$CatchTargetImpl flags 601
+innerclass innerClass java/lang/classfile/TypeAnnotation$CatchTarget outerClass java/lang/classfile/TypeAnnotation innerClassName CatchTarget flags 609
+innerclass innerClass java/lang/classfile/TypeAnnotation$TargetInfo outerClass java/lang/classfile/TypeAnnotation innerClassName TargetInfo flags 609
+innerclass innerClass jdk/internal/classfile/impl/TargetInfoImpl$CatchTargetImpl outerClass jdk/internal/classfile/impl/TargetInfoImpl innerClassName CatchTargetImpl flags 19
+
+class name java/lang/classfile/TypeAnnotation$EmptyTarget
+header extends java/lang/Object implements java/lang/classfile/TypeAnnotation$TargetInfo nestHost java/lang/classfile/TypeAnnotation sealed true permittedSubclasses jdk/internal/classfile/impl/TargetInfoImpl$EmptyTargetImpl flags 601
+innerclass innerClass java/lang/classfile/TypeAnnotation$EmptyTarget outerClass java/lang/classfile/TypeAnnotation innerClassName EmptyTarget flags 609
+innerclass innerClass java/lang/classfile/TypeAnnotation$TargetInfo outerClass java/lang/classfile/TypeAnnotation innerClassName TargetInfo flags 609
+innerclass innerClass jdk/internal/classfile/impl/TargetInfoImpl$EmptyTargetImpl outerClass jdk/internal/classfile/impl/TargetInfoImpl innerClassName EmptyTargetImpl flags 19
+
+class name java/lang/classfile/TypeAnnotation$FormalParameterTarget
+header extends java/lang/Object implements java/lang/classfile/TypeAnnotation$TargetInfo nestHost java/lang/classfile/TypeAnnotation sealed true permittedSubclasses jdk/internal/classfile/impl/TargetInfoImpl$FormalParameterTargetImpl flags 601
+innerclass innerClass java/lang/classfile/TypeAnnotation$FormalParameterTarget outerClass java/lang/classfile/TypeAnnotation innerClassName FormalParameterTarget flags 609
+innerclass innerClass java/lang/classfile/TypeAnnotation$TargetInfo outerClass java/lang/classfile/TypeAnnotation innerClassName TargetInfo flags 609
+innerclass innerClass jdk/internal/classfile/impl/TargetInfoImpl$FormalParameterTargetImpl outerClass jdk/internal/classfile/impl/TargetInfoImpl innerClassName FormalParameterTargetImpl flags 19
+
+class name java/lang/classfile/TypeAnnotation$LocalVarTarget
+header extends java/lang/Object implements java/lang/classfile/TypeAnnotation$TargetInfo nestHost java/lang/classfile/TypeAnnotation sealed true permittedSubclasses jdk/internal/classfile/impl/TargetInfoImpl$LocalVarTargetImpl flags 601
+innerclass innerClass java/lang/classfile/TypeAnnotation$LocalVarTarget outerClass java/lang/classfile/TypeAnnotation innerClassName LocalVarTarget flags 609
+innerclass innerClass java/lang/classfile/TypeAnnotation$TargetInfo outerClass java/lang/classfile/TypeAnnotation innerClassName TargetInfo flags 609
+innerclass innerClass java/lang/classfile/TypeAnnotation$LocalVarTargetInfo outerClass java/lang/classfile/TypeAnnotation innerClassName LocalVarTargetInfo flags 609
+innerclass innerClass jdk/internal/classfile/impl/TargetInfoImpl$LocalVarTargetImpl outerClass jdk/internal/classfile/impl/TargetInfoImpl innerClassName LocalVarTargetImpl flags 19
+
+class name java/lang/classfile/TypeAnnotation$LocalVarTargetInfo
+header extends java/lang/Object nestHost java/lang/classfile/TypeAnnotation sealed true permittedSubclasses jdk/internal/classfile/impl/TargetInfoImpl$LocalVarTargetInfoImpl flags 601
+innerclass innerClass jdk/internal/classfile/impl/TargetInfoImpl$LocalVarTargetInfoImpl outerClass jdk/internal/classfile/impl/TargetInfoImpl innerClassName LocalVarTargetInfoImpl flags 19
+innerclass innerClass java/lang/classfile/TypeAnnotation$LocalVarTargetInfo outerClass java/lang/classfile/TypeAnnotation innerClassName LocalVarTargetInfo flags 609
+
+class name java/lang/classfile/TypeAnnotation$OffsetTarget
+header extends java/lang/Object implements java/lang/classfile/TypeAnnotation$TargetInfo nestHost java/lang/classfile/TypeAnnotation sealed true permittedSubclasses jdk/internal/classfile/impl/TargetInfoImpl$OffsetTargetImpl flags 601
+innerclass innerClass java/lang/classfile/TypeAnnotation$OffsetTarget outerClass java/lang/classfile/TypeAnnotation innerClassName OffsetTarget flags 609
+innerclass innerClass java/lang/classfile/TypeAnnotation$TargetInfo outerClass java/lang/classfile/TypeAnnotation innerClassName TargetInfo flags 609
+innerclass innerClass jdk/internal/classfile/impl/TargetInfoImpl$OffsetTargetImpl outerClass jdk/internal/classfile/impl/TargetInfoImpl innerClassName OffsetTargetImpl flags 19
+
+class name java/lang/classfile/TypeAnnotation$SupertypeTarget
+header extends java/lang/Object implements java/lang/classfile/TypeAnnotation$TargetInfo nestHost java/lang/classfile/TypeAnnotation sealed true permittedSubclasses jdk/internal/classfile/impl/TargetInfoImpl$SupertypeTargetImpl flags 601
+innerclass innerClass java/lang/classfile/TypeAnnotation$SupertypeTarget outerClass java/lang/classfile/TypeAnnotation innerClassName SupertypeTarget flags 609
+innerclass innerClass java/lang/classfile/TypeAnnotation$TargetInfo outerClass java/lang/classfile/TypeAnnotation innerClassName TargetInfo flags 609
+innerclass innerClass jdk/internal/classfile/impl/TargetInfoImpl$SupertypeTargetImpl outerClass jdk/internal/classfile/impl/TargetInfoImpl innerClassName SupertypeTargetImpl flags 19
+
+class name java/lang/classfile/TypeAnnotation$TargetInfo
+header extends java/lang/Object nestHost java/lang/classfile/TypeAnnotation sealed true permittedSubclasses java/lang/classfile/TypeAnnotation$TypeParameterTarget,java/lang/classfile/TypeAnnotation$SupertypeTarget,java/lang/classfile/TypeAnnotation$TypeParameterBoundTarget,java/lang/classfile/TypeAnnotation$EmptyTarget,java/lang/classfile/TypeAnnotation$FormalParameterTarget,java/lang/classfile/TypeAnnotation$ThrowsTarget,java/lang/classfile/TypeAnnotation$LocalVarTarget,java/lang/classfile/TypeAnnotation$CatchTarget,java/lang/classfile/TypeAnnotation$OffsetTarget,java/lang/classfile/TypeAnnotation$TypeArgumentTarget flags 601
+innerclass innerClass java/lang/classfile/TypeAnnotation$TargetInfo outerClass java/lang/classfile/TypeAnnotation innerClassName TargetInfo flags 609
+innerclass innerClass java/lang/classfile/TypeAnnotation$TargetType outerClass java/lang/classfile/TypeAnnotation innerClassName TargetType flags 4019
+innerclass innerClass jdk/internal/classfile/impl/TargetInfoImpl$TypeParameterTargetImpl outerClass jdk/internal/classfile/impl/TargetInfoImpl innerClassName TypeParameterTargetImpl flags 19
+innerclass innerClass java/lang/classfile/TypeAnnotation$TypeParameterTarget outerClass java/lang/classfile/TypeAnnotation innerClassName TypeParameterTarget flags 609
+innerclass innerClass jdk/internal/classfile/impl/TargetInfoImpl$SupertypeTargetImpl outerClass jdk/internal/classfile/impl/TargetInfoImpl innerClassName SupertypeTargetImpl flags 19
+innerclass innerClass jdk/internal/classfile/impl/TargetInfoImpl$TypeParameterBoundTargetImpl outerClass jdk/internal/classfile/impl/TargetInfoImpl innerClassName TypeParameterBoundTargetImpl flags 19
+innerclass innerClass java/lang/classfile/TypeAnnotation$TypeParameterBoundTarget outerClass java/lang/classfile/TypeAnnotation innerClassName TypeParameterBoundTarget flags 609
+innerclass innerClass jdk/internal/classfile/impl/TargetInfoImpl$EmptyTargetImpl outerClass jdk/internal/classfile/impl/TargetInfoImpl innerClassName EmptyTargetImpl flags 19
+innerclass innerClass java/lang/classfile/TypeAnnotation$EmptyTarget outerClass java/lang/classfile/TypeAnnotation innerClassName EmptyTarget flags 609
+innerclass innerClass jdk/internal/classfile/impl/TargetInfoImpl$FormalParameterTargetImpl outerClass jdk/internal/classfile/impl/TargetInfoImpl innerClassName FormalParameterTargetImpl flags 19
+innerclass innerClass jdk/internal/classfile/impl/TargetInfoImpl$ThrowsTargetImpl outerClass jdk/internal/classfile/impl/TargetInfoImpl innerClassName ThrowsTargetImpl flags 19
+innerclass innerClass jdk/internal/classfile/impl/TargetInfoImpl$LocalVarTargetImpl outerClass jdk/internal/classfile/impl/TargetInfoImpl innerClassName LocalVarTargetImpl flags 19
+innerclass innerClass java/lang/classfile/TypeAnnotation$LocalVarTarget outerClass java/lang/classfile/TypeAnnotation innerClassName LocalVarTarget flags 609
+innerclass innerClass jdk/internal/classfile/impl/TargetInfoImpl$CatchTargetImpl outerClass jdk/internal/classfile/impl/TargetInfoImpl innerClassName CatchTargetImpl flags 19
+innerclass innerClass jdk/internal/classfile/impl/TargetInfoImpl$OffsetTargetImpl outerClass jdk/internal/classfile/impl/TargetInfoImpl innerClassName OffsetTargetImpl flags 19
+innerclass innerClass java/lang/classfile/TypeAnnotation$OffsetTarget outerClass java/lang/classfile/TypeAnnotation innerClassName OffsetTarget flags 609
+innerclass innerClass jdk/internal/classfile/impl/TargetInfoImpl$TypeArgumentTargetImpl outerClass jdk/internal/classfile/impl/TargetInfoImpl innerClassName TypeArgumentTargetImpl flags 19
+innerclass innerClass java/lang/classfile/TypeAnnotation$TypeArgumentTarget outerClass java/lang/classfile/TypeAnnotation innerClassName TypeArgumentTarget flags 609
+innerclass innerClass java/lang/classfile/TypeAnnotation$SupertypeTarget outerClass java/lang/classfile/TypeAnnotation innerClassName SupertypeTarget flags 609
+innerclass innerClass java/lang/classfile/TypeAnnotation$FormalParameterTarget outerClass java/lang/classfile/TypeAnnotation innerClassName FormalParameterTarget flags 609
+innerclass innerClass java/lang/classfile/TypeAnnotation$ThrowsTarget outerClass java/lang/classfile/TypeAnnotation innerClassName ThrowsTarget flags 609
+innerclass innerClass java/lang/classfile/TypeAnnotation$LocalVarTargetInfo outerClass java/lang/classfile/TypeAnnotation innerClassName LocalVarTargetInfo flags 609
+innerclass innerClass java/lang/classfile/TypeAnnotation$CatchTarget outerClass java/lang/classfile/TypeAnnotation innerClassName CatchTarget flags 609
+field name TARGET_CLASS_TYPE_PARAMETER descriptor I constantValue 0 flags 19
+field name TARGET_METHOD_TYPE_PARAMETER descriptor I constantValue 1 flags 19
+field name TARGET_CLASS_EXTENDS descriptor I constantValue 16 flags 19
+field name TARGET_CLASS_TYPE_PARAMETER_BOUND descriptor I constantValue 17 flags 19
+field name TARGET_METHOD_TYPE_PARAMETER_BOUND descriptor I constantValue 18 flags 19
+field name TARGET_FIELD descriptor I constantValue 19 flags 19
+field name TARGET_METHOD_RETURN descriptor I constantValue 20 flags 19
+field name TARGET_METHOD_RECEIVER descriptor I constantValue 21 flags 19
+field name TARGET_METHOD_FORMAL_PARAMETER descriptor I constantValue 22 flags 19
+field name TARGET_THROWS descriptor I constantValue 23 flags 19
+field name TARGET_LOCAL_VARIABLE descriptor I constantValue 64 flags 19
+field name TARGET_RESOURCE_VARIABLE descriptor I constantValue 65 flags 19
+field name TARGET_EXCEPTION_PARAMETER descriptor I constantValue 66 flags 19
+field name TARGET_INSTANCEOF descriptor I constantValue 67 flags 19
+field name TARGET_NEW descriptor I constantValue 68 flags 19
+field name TARGET_CONSTRUCTOR_REFERENCE descriptor I constantValue 69 flags 19
+field name TARGET_METHOD_REFERENCE descriptor I constantValue 70 flags 19
+field name TARGET_CAST descriptor I constantValue 71 flags 19
+field name TARGET_CONSTRUCTOR_INVOCATION_TYPE_ARGUMENT descriptor I constantValue 72 flags 19
+field name TARGET_METHOD_INVOCATION_TYPE_ARGUMENT descriptor I constantValue 73 flags 19
+field name TARGET_CONSTRUCTOR_REFERENCE_TYPE_ARGUMENT descriptor I constantValue 74 flags 19
+field name TARGET_METHOD_REFERENCE_TYPE_ARGUMENT descriptor I constantValue 75 flags 19
+
+class name java/lang/classfile/TypeAnnotation$TargetType
+header extends java/lang/Enum nestHost java/lang/classfile/TypeAnnotation flags 4031 signature Ljava/lang/Enum;
+innerclass innerClass java/lang/classfile/TypeAnnotation$TargetInfo outerClass java/lang/classfile/TypeAnnotation innerClassName TargetInfo flags 609
+innerclass innerClass java/lang/classfile/TypeAnnotation$TargetType outerClass java/lang/classfile/TypeAnnotation innerClassName TargetType flags 4019
+
+class name java/lang/classfile/TypeAnnotation$ThrowsTarget
+header extends java/lang/Object implements java/lang/classfile/TypeAnnotation$TargetInfo nestHost java/lang/classfile/TypeAnnotation sealed true permittedSubclasses jdk/internal/classfile/impl/TargetInfoImpl$ThrowsTargetImpl flags 601
+innerclass innerClass java/lang/classfile/TypeAnnotation$ThrowsTarget outerClass java/lang/classfile/TypeAnnotation innerClassName ThrowsTarget flags 609
+innerclass innerClass java/lang/classfile/TypeAnnotation$TargetInfo outerClass java/lang/classfile/TypeAnnotation innerClassName TargetInfo flags 609
+innerclass innerClass jdk/internal/classfile/impl/TargetInfoImpl$ThrowsTargetImpl outerClass jdk/internal/classfile/impl/TargetInfoImpl innerClassName ThrowsTargetImpl flags 19
+
+class name java/lang/classfile/TypeAnnotation$TypeArgumentTarget
+header extends java/lang/Object implements java/lang/classfile/TypeAnnotation$TargetInfo nestHost java/lang/classfile/TypeAnnotation sealed true permittedSubclasses jdk/internal/classfile/impl/TargetInfoImpl$TypeArgumentTargetImpl flags 601
+innerclass innerClass java/lang/classfile/TypeAnnotation$TypeArgumentTarget outerClass java/lang/classfile/TypeAnnotation innerClassName TypeArgumentTarget flags 609
+innerclass innerClass java/lang/classfile/TypeAnnotation$TargetInfo outerClass java/lang/classfile/TypeAnnotation innerClassName TargetInfo flags 609
+innerclass innerClass jdk/internal/classfile/impl/TargetInfoImpl$TypeArgumentTargetImpl outerClass jdk/internal/classfile/impl/TargetInfoImpl innerClassName TypeArgumentTargetImpl flags 19
+
+class name java/lang/classfile/TypeAnnotation$TypeParameterBoundTarget
+header extends java/lang/Object implements java/lang/classfile/TypeAnnotation$TargetInfo nestHost java/lang/classfile/TypeAnnotation sealed true permittedSubclasses jdk/internal/classfile/impl/TargetInfoImpl$TypeParameterBoundTargetImpl flags 601
+innerclass innerClass java/lang/classfile/TypeAnnotation$TypeParameterBoundTarget outerClass java/lang/classfile/TypeAnnotation innerClassName TypeParameterBoundTarget flags 609
+innerclass innerClass java/lang/classfile/TypeAnnotation$TargetInfo outerClass java/lang/classfile/TypeAnnotation innerClassName TargetInfo flags 609
+innerclass innerClass jdk/internal/classfile/impl/TargetInfoImpl$TypeParameterBoundTargetImpl outerClass jdk/internal/classfile/impl/TargetInfoImpl innerClassName TypeParameterBoundTargetImpl flags 19
+
+class name java/lang/classfile/TypeAnnotation$TypeParameterTarget
+header extends java/lang/Object implements java/lang/classfile/TypeAnnotation$TargetInfo nestHost java/lang/classfile/TypeAnnotation sealed true permittedSubclasses jdk/internal/classfile/impl/TargetInfoImpl$TypeParameterTargetImpl flags 601
+innerclass innerClass java/lang/classfile/TypeAnnotation$TypeParameterTarget outerClass java/lang/classfile/TypeAnnotation innerClassName TypeParameterTarget flags 609
+innerclass innerClass java/lang/classfile/TypeAnnotation$TargetInfo outerClass java/lang/classfile/TypeAnnotation innerClassName TargetInfo flags 609
+innerclass innerClass jdk/internal/classfile/impl/TargetInfoImpl$TypeParameterTargetImpl outerClass jdk/internal/classfile/impl/TargetInfoImpl innerClassName TypeParameterTargetImpl flags 19
+
+class name java/lang/classfile/TypeAnnotation$TypePathComponent
+header extends java/lang/Object nestHost java/lang/classfile/TypeAnnotation sealed true permittedSubclasses jdk/internal/classfile/impl/UnboundAttribute$TypePathComponentImpl flags 601
+innerclass innerClass java/lang/classfile/TypeAnnotation$TypePathComponent outerClass java/lang/classfile/TypeAnnotation innerClassName TypePathComponent flags 609
+innerclass innerClass java/lang/classfile/TypeAnnotation$TypePathComponent$Kind outerClass java/lang/classfile/TypeAnnotation$TypePathComponent innerClassName Kind flags 4019
+innerclass innerClass jdk/internal/classfile/impl/UnboundAttribute$TypePathComponentImpl outerClass jdk/internal/classfile/impl/UnboundAttribute innerClassName TypePathComponentImpl flags 19
+
+class name java/lang/classfile/TypeAnnotation$TypePathComponent$Kind
+header extends java/lang/Enum nestHost java/lang/classfile/TypeAnnotation flags 4031 signature Ljava/lang/Enum;
+innerclass innerClass java/lang/classfile/TypeAnnotation$TypePathComponent outerClass java/lang/classfile/TypeAnnotation innerClassName TypePathComponent flags 609
+innerclass innerClass java/lang/classfile/TypeAnnotation$TypePathComponent$Kind outerClass java/lang/classfile/TypeAnnotation$TypePathComponent innerClassName Kind flags 4019
+
+class name java/lang/classfile/TypeKind
+header extends java/lang/Enum flags 4031 signature Ljava/lang/Enum;
+innerclass innerClass java/lang/invoke/TypeDescriptor$OfField outerClass java/lang/invoke/TypeDescriptor innerClassName OfField flags 609
+-field name ByteType descriptor Ljava/lang/classfile/TypeKind;
+-field name ShortType descriptor Ljava/lang/classfile/TypeKind;
+-field name IntType descriptor Ljava/lang/classfile/TypeKind;
+-field name FloatType descriptor Ljava/lang/classfile/TypeKind;
+-field name LongType descriptor Ljava/lang/classfile/TypeKind;
+-field name DoubleType descriptor Ljava/lang/classfile/TypeKind;
+-field name ReferenceType descriptor Ljava/lang/classfile/TypeKind;
+-field name CharType descriptor Ljava/lang/classfile/TypeKind;
+-field name BooleanType descriptor Ljava/lang/classfile/TypeKind;
+-field name VoidType descriptor Ljava/lang/classfile/TypeKind;
+-method name typeName descriptor ()Ljava/lang/String;
+-method name descriptor descriptor ()Ljava/lang/String;
+field name BOOLEAN descriptor Ljava/lang/classfile/TypeKind; flags 4019
+field name BYTE descriptor Ljava/lang/classfile/TypeKind; flags 4019
+field name CHAR descriptor Ljava/lang/classfile/TypeKind; flags 4019
+field name SHORT descriptor Ljava/lang/classfile/TypeKind; flags 4019
+field name INT descriptor Ljava/lang/classfile/TypeKind; flags 4019
+field name LONG descriptor Ljava/lang/classfile/TypeKind; flags 4019
+field name FLOAT descriptor Ljava/lang/classfile/TypeKind; flags 4019
+field name DOUBLE descriptor Ljava/lang/classfile/TypeKind; flags 4019
+field name REFERENCE descriptor Ljava/lang/classfile/TypeKind; flags 4019
+field name VOID descriptor Ljava/lang/classfile/TypeKind; flags 4019
+method name upperBound descriptor ()Ljava/lang/constant/ClassDesc; flags 1
+
+-class name java/lang/classfile/WritableElement
+
+class name java/lang/classfile/attribute/AnnotationDefaultAttribute
+header extends java/lang/Object implements java/lang/classfile/Attribute,java/lang/classfile/MethodElement sealed true permittedSubclasses jdk/internal/classfile/impl/BoundAttribute$BoundAnnotationDefaultAttr,jdk/internal/classfile/impl/UnboundAttribute$UnboundAnnotationDefaultAttribute flags 601 signature Ljava/lang/Object;Ljava/lang/classfile/Attribute;Ljava/lang/classfile/MethodElement;
+innerclass innerClass jdk/internal/classfile/impl/UnboundAttribute$UnboundAnnotationDefaultAttribute outerClass jdk/internal/classfile/impl/UnboundAttribute innerClassName UnboundAnnotationDefaultAttribute flags 19
+innerclass innerClass jdk/internal/classfile/impl/BoundAttribute$BoundAnnotationDefaultAttr outerClass jdk/internal/classfile/impl/BoundAttribute innerClassName BoundAnnotationDefaultAttr flags 19
+
+class name java/lang/classfile/attribute/BootstrapMethodsAttribute
+header extends java/lang/Object implements java/lang/classfile/Attribute sealed true permittedSubclasses jdk/internal/classfile/impl/BoundAttribute$BoundBootstrapMethodsAttribute,jdk/internal/classfile/impl/UnboundAttribute$EmptyBootstrapAttribute flags 601 signature Ljava/lang/Object;Ljava/lang/classfile/Attribute;
+innerclass innerClass jdk/internal/classfile/impl/BoundAttribute$BoundBootstrapMethodsAttribute outerClass jdk/internal/classfile/impl/BoundAttribute innerClassName BoundBootstrapMethodsAttribute flags 19
+innerclass innerClass jdk/internal/classfile/impl/UnboundAttribute$EmptyBootstrapAttribute outerClass jdk/internal/classfile/impl/UnboundAttribute innerClassName EmptyBootstrapAttribute flags 19
+
+class name java/lang/classfile/attribute/CharacterRangeInfo
+header extends java/lang/Object sealed true permittedSubclasses jdk/internal/classfile/impl/UnboundAttribute$UnboundCharacterRangeInfo flags 601
+innerclass innerClass jdk/internal/classfile/impl/UnboundAttribute$UnboundCharacterRangeInfo outerClass jdk/internal/classfile/impl/UnboundAttribute innerClassName UnboundCharacterRangeInfo flags 19
+
+class name java/lang/classfile/attribute/CharacterRangeTableAttribute
+header extends java/lang/Object implements java/lang/classfile/Attribute sealed true permittedSubclasses jdk/internal/classfile/impl/BoundAttribute$BoundCharacterRangeTableAttribute,jdk/internal/classfile/impl/UnboundAttribute$UnboundCharacterRangeTableAttribute flags 601 signature Ljava/lang/Object;Ljava/lang/classfile/Attribute;
+innerclass innerClass jdk/internal/classfile/impl/UnboundAttribute$UnboundCharacterRangeTableAttribute outerClass jdk/internal/classfile/impl/UnboundAttribute innerClassName UnboundCharacterRangeTableAttribute flags 19
+innerclass innerClass jdk/internal/classfile/impl/BoundAttribute$BoundCharacterRangeTableAttribute outerClass jdk/internal/classfile/impl/BoundAttribute innerClassName BoundCharacterRangeTableAttribute flags 19
+
+class name java/lang/classfile/attribute/CodeAttribute
+header extends java/lang/Object implements java/lang/classfile/Attribute,java/lang/classfile/CodeModel sealed true permittedSubclasses jdk/internal/classfile/impl/BoundAttribute$BoundCodeAttribute flags 601 signature Ljava/lang/Object;Ljava/lang/classfile/Attribute;Ljava/lang/classfile/CodeModel;
+innerclass innerClass jdk/internal/classfile/impl/BoundAttribute$BoundCodeAttribute outerClass jdk/internal/classfile/impl/BoundAttribute innerClassName BoundCodeAttribute flags 409
+method name maxLocals descriptor ()I flags 401
+method name maxStack descriptor ()I flags 401
+
+class name java/lang/classfile/attribute/CompilationIDAttribute
+header extends java/lang/Object implements java/lang/classfile/Attribute,java/lang/classfile/ClassElement sealed true permittedSubclasses jdk/internal/classfile/impl/BoundAttribute$BoundCompilationIDAttribute,jdk/internal/classfile/impl/UnboundAttribute$UnboundCompilationIDAttribute flags 601 signature Ljava/lang/Object;Ljava/lang/classfile/Attribute;Ljava/lang/classfile/ClassElement;
+innerclass innerClass jdk/internal/classfile/impl/UnboundAttribute$UnboundCompilationIDAttribute outerClass jdk/internal/classfile/impl/UnboundAttribute innerClassName UnboundCompilationIDAttribute flags 19
+innerclass innerClass jdk/internal/classfile/impl/BoundAttribute$BoundCompilationIDAttribute outerClass jdk/internal/classfile/impl/BoundAttribute innerClassName BoundCompilationIDAttribute flags 19
+
+class name java/lang/classfile/attribute/ConstantValueAttribute
+header extends java/lang/Object implements java/lang/classfile/Attribute,java/lang/classfile/FieldElement sealed true permittedSubclasses jdk/internal/classfile/impl/BoundAttribute$BoundConstantValueAttribute,jdk/internal/classfile/impl/UnboundAttribute$UnboundConstantValueAttribute flags 601 signature Ljava/lang/Object;Ljava/lang/classfile/Attribute;Ljava/lang/classfile/FieldElement;
+innerclass innerClass jdk/internal/classfile/impl/UnboundAttribute$UnboundConstantValueAttribute outerClass jdk/internal/classfile/impl/UnboundAttribute innerClassName UnboundConstantValueAttribute flags 19
+innerclass innerClass jdk/internal/classfile/impl/BoundAttribute$BoundConstantValueAttribute outerClass jdk/internal/classfile/impl/BoundAttribute innerClassName BoundConstantValueAttribute flags 19
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/lang/classfile/attribute/DeprecatedAttribute
+header extends java/lang/Object implements java/lang/classfile/Attribute,java/lang/classfile/ClassElement,java/lang/classfile/MethodElement,java/lang/classfile/FieldElement sealed true permittedSubclasses jdk/internal/classfile/impl/BoundAttribute$BoundDeprecatedAttribute,jdk/internal/classfile/impl/UnboundAttribute$UnboundDeprecatedAttribute flags 601 signature Ljava/lang/Object;Ljava/lang/classfile/Attribute;Ljava/lang/classfile/ClassElement;Ljava/lang/classfile/MethodElement;Ljava/lang/classfile/FieldElement;
+innerclass innerClass jdk/internal/classfile/impl/UnboundAttribute$UnboundDeprecatedAttribute outerClass jdk/internal/classfile/impl/UnboundAttribute innerClassName UnboundDeprecatedAttribute flags 19
+innerclass innerClass jdk/internal/classfile/impl/BoundAttribute$BoundDeprecatedAttribute outerClass jdk/internal/classfile/impl/BoundAttribute innerClassName BoundDeprecatedAttribute flags 19
+
+class name java/lang/classfile/attribute/EnclosingMethodAttribute
+header extends java/lang/Object implements java/lang/classfile/Attribute,java/lang/classfile/ClassElement sealed true permittedSubclasses jdk/internal/classfile/impl/BoundAttribute$BoundEnclosingMethodAttribute,jdk/internal/classfile/impl/UnboundAttribute$UnboundEnclosingMethodAttribute flags 601 signature Ljava/lang/Object;Ljava/lang/classfile/Attribute;Ljava/lang/classfile/ClassElement;
+innerclass innerClass jdk/internal/classfile/impl/UnboundAttribute$UnboundEnclosingMethodAttribute outerClass jdk/internal/classfile/impl/UnboundAttribute innerClassName UnboundEnclosingMethodAttribute flags 19
+innerclass innerClass jdk/internal/classfile/impl/BoundAttribute$BoundEnclosingMethodAttribute outerClass jdk/internal/classfile/impl/BoundAttribute innerClassName BoundEnclosingMethodAttribute flags 19
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/lang/classfile/attribute/ExceptionsAttribute
+header extends java/lang/Object implements java/lang/classfile/Attribute,java/lang/classfile/MethodElement sealed true permittedSubclasses jdk/internal/classfile/impl/BoundAttribute$BoundExceptionsAttribute,jdk/internal/classfile/impl/UnboundAttribute$UnboundExceptionsAttribute flags 601 signature Ljava/lang/Object;Ljava/lang/classfile/Attribute;Ljava/lang/classfile/MethodElement;
+innerclass innerClass jdk/internal/classfile/impl/UnboundAttribute$UnboundExceptionsAttribute outerClass jdk/internal/classfile/impl/UnboundAttribute innerClassName UnboundExceptionsAttribute flags 19
+innerclass innerClass jdk/internal/classfile/impl/BoundAttribute$BoundExceptionsAttribute outerClass jdk/internal/classfile/impl/BoundAttribute innerClassName BoundExceptionsAttribute flags 19
+
+class name java/lang/classfile/attribute/InnerClassInfo
+header extends java/lang/Object sealed true permittedSubclasses jdk/internal/classfile/impl/UnboundAttribute$UnboundInnerClassInfo flags 601
+innerclass innerClass java/lang/reflect/AccessFlag$Location outerClass java/lang/reflect/AccessFlag innerClassName Location flags 4019
+innerclass innerClass jdk/internal/classfile/impl/UnboundAttribute$UnboundInnerClassInfo outerClass jdk/internal/classfile/impl/UnboundAttribute innerClassName UnboundInnerClassInfo flags 19
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/lang/classfile/attribute/InnerClassesAttribute
+header extends java/lang/Object implements java/lang/classfile/Attribute,java/lang/classfile/ClassElement sealed true permittedSubclasses jdk/internal/classfile/impl/BoundAttribute$BoundInnerClassesAttribute,jdk/internal/classfile/impl/UnboundAttribute$UnboundInnerClassesAttribute flags 601 signature Ljava/lang/Object;Ljava/lang/classfile/Attribute;Ljava/lang/classfile/ClassElement;
+innerclass innerClass jdk/internal/classfile/impl/UnboundAttribute$UnboundInnerClassesAttribute outerClass jdk/internal/classfile/impl/UnboundAttribute innerClassName UnboundInnerClassesAttribute flags 19
+innerclass innerClass jdk/internal/classfile/impl/BoundAttribute$BoundInnerClassesAttribute outerClass jdk/internal/classfile/impl/BoundAttribute innerClassName BoundInnerClassesAttribute flags 19
+
+class name java/lang/classfile/attribute/LineNumberInfo
+header extends java/lang/Object sealed true permittedSubclasses jdk/internal/classfile/impl/UnboundAttribute$UnboundLineNumberInfo flags 601
+innerclass innerClass jdk/internal/classfile/impl/UnboundAttribute$UnboundLineNumberInfo outerClass jdk/internal/classfile/impl/UnboundAttribute innerClassName UnboundLineNumberInfo flags 19
+
+class name java/lang/classfile/attribute/LineNumberTableAttribute
+header extends java/lang/Object implements java/lang/classfile/Attribute sealed true permittedSubclasses jdk/internal/classfile/impl/BoundAttribute$BoundLineNumberTableAttribute,jdk/internal/classfile/impl/UnboundAttribute$UnboundLineNumberTableAttribute flags 601 signature Ljava/lang/Object;Ljava/lang/classfile/Attribute;
+innerclass innerClass jdk/internal/classfile/impl/UnboundAttribute$UnboundLineNumberTableAttribute outerClass jdk/internal/classfile/impl/UnboundAttribute innerClassName UnboundLineNumberTableAttribute flags 19
+innerclass innerClass jdk/internal/classfile/impl/BoundAttribute$BoundLineNumberTableAttribute outerClass jdk/internal/classfile/impl/BoundAttribute innerClassName BoundLineNumberTableAttribute flags 19
+
+class name java/lang/classfile/attribute/LocalVariableInfo
+header extends java/lang/Object sealed true permittedSubclasses jdk/internal/classfile/impl/UnboundAttribute$UnboundLocalVariableInfo,jdk/internal/classfile/impl/BoundLocalVariable flags 601
+innerclass innerClass jdk/internal/classfile/impl/UnboundAttribute$UnboundLocalVariableInfo outerClass jdk/internal/classfile/impl/UnboundAttribute innerClassName UnboundLocalVariableInfo flags 19
+
+class name java/lang/classfile/attribute/LocalVariableTableAttribute
+header extends java/lang/Object implements java/lang/classfile/Attribute sealed true permittedSubclasses jdk/internal/classfile/impl/BoundAttribute$BoundLocalVariableTableAttribute,jdk/internal/classfile/impl/UnboundAttribute$UnboundLocalVariableTableAttribute flags 601 signature Ljava/lang/Object;Ljava/lang/classfile/Attribute;
+innerclass innerClass jdk/internal/classfile/impl/UnboundAttribute$UnboundLocalVariableTableAttribute outerClass jdk/internal/classfile/impl/UnboundAttribute innerClassName UnboundLocalVariableTableAttribute flags 19
+innerclass innerClass jdk/internal/classfile/impl/BoundAttribute$BoundLocalVariableTableAttribute outerClass jdk/internal/classfile/impl/BoundAttribute innerClassName BoundLocalVariableTableAttribute flags 19
+
+class name java/lang/classfile/attribute/LocalVariableTypeInfo
+header extends java/lang/Object sealed true permittedSubclasses jdk/internal/classfile/impl/UnboundAttribute$UnboundLocalVariableTypeInfo,jdk/internal/classfile/impl/BoundLocalVariableType flags 601
+innerclass innerClass jdk/internal/classfile/impl/UnboundAttribute$UnboundLocalVariableTypeInfo outerClass jdk/internal/classfile/impl/UnboundAttribute innerClassName UnboundLocalVariableTypeInfo flags 19
+
+class name java/lang/classfile/attribute/LocalVariableTypeTableAttribute
+header extends java/lang/Object implements java/lang/classfile/Attribute sealed true permittedSubclasses jdk/internal/classfile/impl/BoundAttribute$BoundLocalVariableTypeTableAttribute,jdk/internal/classfile/impl/UnboundAttribute$UnboundLocalVariableTypeTableAttribute flags 601 signature Ljava/lang/Object;Ljava/lang/classfile/Attribute;
+innerclass innerClass jdk/internal/classfile/impl/UnboundAttribute$UnboundLocalVariableTypeTableAttribute outerClass jdk/internal/classfile/impl/UnboundAttribute innerClassName UnboundLocalVariableTypeTableAttribute flags 19
+innerclass innerClass jdk/internal/classfile/impl/BoundAttribute$BoundLocalVariableTypeTableAttribute outerClass jdk/internal/classfile/impl/BoundAttribute innerClassName BoundLocalVariableTypeTableAttribute flags 19
+
+class name java/lang/classfile/attribute/MethodParameterInfo
+header extends java/lang/Object sealed true permittedSubclasses jdk/internal/classfile/impl/UnboundAttribute$UnboundMethodParameterInfo flags 601
+innerclass innerClass java/lang/reflect/AccessFlag$Location outerClass java/lang/reflect/AccessFlag innerClassName Location flags 4019
+innerclass innerClass jdk/internal/classfile/impl/UnboundAttribute$UnboundMethodParameterInfo outerClass jdk/internal/classfile/impl/UnboundAttribute innerClassName UnboundMethodParameterInfo flags 19
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/lang/classfile/attribute/MethodParametersAttribute
+header extends java/lang/Object implements java/lang/classfile/Attribute,java/lang/classfile/MethodElement sealed true permittedSubclasses jdk/internal/classfile/impl/BoundAttribute$BoundMethodParametersAttribute,jdk/internal/classfile/impl/UnboundAttribute$UnboundMethodParametersAttribute flags 601 signature Ljava/lang/Object;Ljava/lang/classfile/Attribute;Ljava/lang/classfile/MethodElement;
+innerclass innerClass jdk/internal/classfile/impl/UnboundAttribute$UnboundMethodParametersAttribute outerClass jdk/internal/classfile/impl/UnboundAttribute innerClassName UnboundMethodParametersAttribute flags 19
+innerclass innerClass jdk/internal/classfile/impl/BoundAttribute$BoundMethodParametersAttribute outerClass jdk/internal/classfile/impl/BoundAttribute innerClassName BoundMethodParametersAttribute flags 19
+
+class name java/lang/classfile/attribute/ModuleAttribute
+header extends java/lang/Object implements java/lang/classfile/Attribute,java/lang/classfile/ClassElement nestMembers java/lang/classfile/attribute/ModuleAttribute$ModuleAttributeBuilder sealed true permittedSubclasses jdk/internal/classfile/impl/BoundAttribute$BoundModuleAttribute,jdk/internal/classfile/impl/UnboundAttribute$UnboundModuleAttribute flags 601 signature Ljava/lang/Object;Ljava/lang/classfile/Attribute;Ljava/lang/classfile/ClassElement;
+innerclass innerClass java/lang/reflect/AccessFlag$Location outerClass java/lang/reflect/AccessFlag innerClassName Location flags 4019
+innerclass innerClass jdk/internal/classfile/impl/UnboundAttribute$UnboundModuleAttribute outerClass jdk/internal/classfile/impl/UnboundAttribute innerClassName UnboundModuleAttribute flags 19
+innerclass innerClass java/lang/classfile/attribute/ModuleAttribute$ModuleAttributeBuilder outerClass java/lang/classfile/attribute/ModuleAttribute innerClassName ModuleAttributeBuilder flags 609
+innerclass innerClass jdk/internal/classfile/impl/BoundAttribute$BoundModuleAttribute outerClass jdk/internal/classfile/impl/BoundAttribute innerClassName BoundModuleAttribute flags 19
+
+class name java/lang/classfile/attribute/ModuleAttribute$ModuleAttributeBuilder
+header extends java/lang/Object nestHost java/lang/classfile/attribute/ModuleAttribute sealed true permittedSubclasses jdk/internal/classfile/impl/ModuleAttributeBuilderImpl flags 601
+innerclass innerClass java/lang/reflect/AccessFlag$Location outerClass java/lang/reflect/AccessFlag innerClassName Location flags 4019
+innerclass innerClass java/lang/classfile/attribute/ModuleAttribute$ModuleAttributeBuilder outerClass java/lang/classfile/attribute/ModuleAttribute innerClassName ModuleAttributeBuilder flags 609
+-method name build descriptor ()Ljava/lang/classfile/attribute/ModuleAttribute;
+
+class name java/lang/classfile/attribute/ModuleExportInfo
+header extends java/lang/Object sealed true permittedSubclasses jdk/internal/classfile/impl/UnboundAttribute$UnboundModuleExportInfo flags 601
+innerclass innerClass java/lang/reflect/AccessFlag$Location outerClass java/lang/reflect/AccessFlag innerClassName Location flags 4019
+innerclass innerClass jdk/internal/classfile/impl/UnboundAttribute$UnboundModuleExportInfo outerClass jdk/internal/classfile/impl/UnboundAttribute innerClassName UnboundModuleExportInfo flags 19
+
+class name java/lang/classfile/attribute/ModuleHashInfo
+header extends java/lang/Object sealed true permittedSubclasses jdk/internal/classfile/impl/UnboundAttribute$UnboundModuleHashInfo flags 601
+innerclass innerClass jdk/internal/classfile/impl/UnboundAttribute$UnboundModuleHashInfo outerClass jdk/internal/classfile/impl/UnboundAttribute innerClassName UnboundModuleHashInfo flags 19
+
+class name java/lang/classfile/attribute/ModuleHashesAttribute
+header extends java/lang/Object implements java/lang/classfile/Attribute,java/lang/classfile/ClassElement sealed true permittedSubclasses jdk/internal/classfile/impl/BoundAttribute$BoundModuleHashesAttribute,jdk/internal/classfile/impl/UnboundAttribute$UnboundModuleHashesAttribute flags 601 signature Ljava/lang/Object;Ljava/lang/classfile/Attribute;Ljava/lang/classfile/ClassElement;
+innerclass innerClass jdk/internal/classfile/impl/UnboundAttribute$UnboundModuleHashesAttribute outerClass jdk/internal/classfile/impl/UnboundAttribute innerClassName UnboundModuleHashesAttribute flags 19
+innerclass innerClass jdk/internal/classfile/impl/BoundAttribute$BoundModuleHashesAttribute outerClass jdk/internal/classfile/impl/BoundAttribute innerClassName BoundModuleHashesAttribute flags 19
+
+class name java/lang/classfile/attribute/ModuleMainClassAttribute
+header extends java/lang/Object implements java/lang/classfile/Attribute,java/lang/classfile/ClassElement sealed true permittedSubclasses jdk/internal/classfile/impl/BoundAttribute$BoundModuleMainClassAttribute,jdk/internal/classfile/impl/UnboundAttribute$UnboundModuleMainClassAttribute flags 601 signature Ljava/lang/Object;Ljava/lang/classfile/Attribute;Ljava/lang/classfile/ClassElement;
+innerclass innerClass jdk/internal/classfile/impl/UnboundAttribute$UnboundModuleMainClassAttribute outerClass jdk/internal/classfile/impl/UnboundAttribute innerClassName UnboundModuleMainClassAttribute flags 19
+innerclass innerClass jdk/internal/classfile/impl/BoundAttribute$BoundModuleMainClassAttribute outerClass jdk/internal/classfile/impl/BoundAttribute innerClassName BoundModuleMainClassAttribute flags 19
+
+class name java/lang/classfile/attribute/ModuleOpenInfo
+header extends java/lang/Object sealed true permittedSubclasses jdk/internal/classfile/impl/UnboundAttribute$UnboundModuleOpenInfo flags 601
+innerclass innerClass java/lang/reflect/AccessFlag$Location outerClass java/lang/reflect/AccessFlag innerClassName Location flags 4019
+innerclass innerClass jdk/internal/classfile/impl/UnboundAttribute$UnboundModuleOpenInfo outerClass jdk/internal/classfile/impl/UnboundAttribute innerClassName UnboundModuleOpenInfo flags 19
+
+class name java/lang/classfile/attribute/ModulePackagesAttribute
+header extends java/lang/Object implements java/lang/classfile/Attribute,java/lang/classfile/ClassElement sealed true permittedSubclasses jdk/internal/classfile/impl/BoundAttribute$BoundModulePackagesAttribute,jdk/internal/classfile/impl/UnboundAttribute$UnboundModulePackagesAttribute flags 601 signature Ljava/lang/Object;Ljava/lang/classfile/Attribute;Ljava/lang/classfile/ClassElement;
+innerclass innerClass jdk/internal/classfile/impl/UnboundAttribute$UnboundModulePackagesAttribute outerClass jdk/internal/classfile/impl/UnboundAttribute innerClassName UnboundModulePackagesAttribute flags 19
+innerclass innerClass jdk/internal/classfile/impl/BoundAttribute$BoundModulePackagesAttribute outerClass jdk/internal/classfile/impl/BoundAttribute innerClassName BoundModulePackagesAttribute flags 19
+
+class name java/lang/classfile/attribute/ModuleProvideInfo
+header extends java/lang/Object sealed true permittedSubclasses jdk/internal/classfile/impl/UnboundAttribute$UnboundModuleProvideInfo flags 601
+innerclass innerClass jdk/internal/classfile/impl/UnboundAttribute$UnboundModuleProvideInfo outerClass jdk/internal/classfile/impl/UnboundAttribute innerClassName UnboundModuleProvideInfo flags 19
+
+class name java/lang/classfile/attribute/ModuleRequireInfo
+header extends java/lang/Object sealed true permittedSubclasses jdk/internal/classfile/impl/UnboundAttribute$UnboundModuleRequiresInfo flags 601
+innerclass innerClass java/lang/reflect/AccessFlag$Location outerClass java/lang/reflect/AccessFlag innerClassName Location flags 4019
+innerclass innerClass jdk/internal/classfile/impl/UnboundAttribute$UnboundModuleRequiresInfo outerClass jdk/internal/classfile/impl/UnboundAttribute innerClassName UnboundModuleRequiresInfo flags 19
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/lang/classfile/attribute/ModuleResolutionAttribute
+header extends java/lang/Object implements java/lang/classfile/Attribute,java/lang/classfile/ClassElement sealed true permittedSubclasses jdk/internal/classfile/impl/BoundAttribute$BoundModuleResolutionAttribute,jdk/internal/classfile/impl/UnboundAttribute$UnboundModuleResolutionAttribute flags 601 signature Ljava/lang/Object;Ljava/lang/classfile/Attribute;Ljava/lang/classfile/ClassElement;
+innerclass innerClass jdk/internal/classfile/impl/UnboundAttribute$UnboundModuleResolutionAttribute outerClass jdk/internal/classfile/impl/UnboundAttribute innerClassName UnboundModuleResolutionAttribute flags 19
+innerclass innerClass jdk/internal/classfile/impl/BoundAttribute$BoundModuleResolutionAttribute outerClass jdk/internal/classfile/impl/BoundAttribute innerClassName BoundModuleResolutionAttribute flags 19
+
+class name java/lang/classfile/attribute/ModuleTargetAttribute
+header extends java/lang/Object implements java/lang/classfile/Attribute,java/lang/classfile/ClassElement sealed true permittedSubclasses jdk/internal/classfile/impl/BoundAttribute$BoundModuleTargetAttribute,jdk/internal/classfile/impl/UnboundAttribute$UnboundModuleTargetAttribute flags 601 signature Ljava/lang/Object;Ljava/lang/classfile/Attribute;Ljava/lang/classfile/ClassElement;
+innerclass innerClass jdk/internal/classfile/impl/UnboundAttribute$UnboundModuleTargetAttribute outerClass jdk/internal/classfile/impl/UnboundAttribute innerClassName UnboundModuleTargetAttribute flags 19
+innerclass innerClass jdk/internal/classfile/impl/BoundAttribute$BoundModuleTargetAttribute outerClass jdk/internal/classfile/impl/BoundAttribute innerClassName BoundModuleTargetAttribute flags 19
+
+class name java/lang/classfile/attribute/NestHostAttribute
+header extends java/lang/Object implements java/lang/classfile/Attribute,java/lang/classfile/ClassElement sealed true permittedSubclasses jdk/internal/classfile/impl/BoundAttribute$BoundNestHostAttribute,jdk/internal/classfile/impl/UnboundAttribute$UnboundNestHostAttribute flags 601 signature Ljava/lang/Object;Ljava/lang/classfile/Attribute;Ljava/lang/classfile/ClassElement;
+innerclass innerClass jdk/internal/classfile/impl/UnboundAttribute$UnboundNestHostAttribute outerClass jdk/internal/classfile/impl/UnboundAttribute innerClassName UnboundNestHostAttribute flags 19
+innerclass innerClass jdk/internal/classfile/impl/BoundAttribute$BoundNestHostAttribute outerClass jdk/internal/classfile/impl/BoundAttribute innerClassName BoundNestHostAttribute flags 19
+
+class name java/lang/classfile/attribute/NestMembersAttribute
+header extends java/lang/Object implements java/lang/classfile/Attribute,java/lang/classfile/ClassElement sealed true permittedSubclasses jdk/internal/classfile/impl/BoundAttribute$BoundNestMembersAttribute,jdk/internal/classfile/impl/UnboundAttribute$UnboundNestMembersAttribute flags 601 signature Ljava/lang/Object;Ljava/lang/classfile/Attribute;Ljava/lang/classfile/ClassElement;
+innerclass innerClass jdk/internal/classfile/impl/UnboundAttribute$UnboundNestMembersAttribute outerClass jdk/internal/classfile/impl/UnboundAttribute innerClassName UnboundNestMembersAttribute flags 19
+innerclass innerClass jdk/internal/classfile/impl/BoundAttribute$BoundNestMembersAttribute outerClass jdk/internal/classfile/impl/BoundAttribute innerClassName BoundNestMembersAttribute flags 19
+
+class name java/lang/classfile/attribute/PermittedSubclassesAttribute
+header extends java/lang/Object implements java/lang/classfile/Attribute,java/lang/classfile/ClassElement sealed true permittedSubclasses jdk/internal/classfile/impl/BoundAttribute$BoundPermittedSubclassesAttribute,jdk/internal/classfile/impl/UnboundAttribute$UnboundPermittedSubclassesAttribute flags 601 signature Ljava/lang/Object;Ljava/lang/classfile/Attribute;Ljava/lang/classfile/ClassElement;
+innerclass innerClass jdk/internal/classfile/impl/UnboundAttribute$UnboundPermittedSubclassesAttribute outerClass jdk/internal/classfile/impl/UnboundAttribute innerClassName UnboundPermittedSubclassesAttribute flags 19
+innerclass innerClass jdk/internal/classfile/impl/BoundAttribute$BoundPermittedSubclassesAttribute outerClass jdk/internal/classfile/impl/BoundAttribute innerClassName BoundPermittedSubclassesAttribute flags 19
+
+class name java/lang/classfile/attribute/RecordAttribute
+header extends java/lang/Object implements java/lang/classfile/Attribute,java/lang/classfile/ClassElement sealed true permittedSubclasses jdk/internal/classfile/impl/BoundAttribute$BoundRecordAttribute,jdk/internal/classfile/impl/UnboundAttribute$UnboundRecordAttribute flags 601 signature Ljava/lang/Object;Ljava/lang/classfile/Attribute;Ljava/lang/classfile/ClassElement;
+innerclass innerClass jdk/internal/classfile/impl/UnboundAttribute$UnboundRecordAttribute outerClass jdk/internal/classfile/impl/UnboundAttribute innerClassName UnboundRecordAttribute flags 19
+innerclass innerClass jdk/internal/classfile/impl/BoundAttribute$BoundRecordAttribute outerClass jdk/internal/classfile/impl/BoundAttribute innerClassName BoundRecordAttribute flags 19
+
+class name java/lang/classfile/attribute/RecordComponentInfo
+header extends java/lang/Object implements java/lang/classfile/AttributedElement sealed true permittedSubclasses jdk/internal/classfile/impl/BoundRecordComponentInfo,jdk/internal/classfile/impl/UnboundAttribute$UnboundRecordComponentInfo flags 601
+innerclass innerClass jdk/internal/classfile/impl/UnboundAttribute$UnboundRecordComponentInfo outerClass jdk/internal/classfile/impl/UnboundAttribute innerClassName UnboundRecordComponentInfo flags 19
+
+class name java/lang/classfile/attribute/RuntimeInvisibleAnnotationsAttribute
+header extends java/lang/Object implements java/lang/classfile/Attribute,java/lang/classfile/ClassElement,java/lang/classfile/MethodElement,java/lang/classfile/FieldElement sealed true permittedSubclasses jdk/internal/classfile/impl/BoundAttribute$BoundRuntimeInvisibleAnnotationsAttribute,jdk/internal/classfile/impl/UnboundAttribute$UnboundRuntimeInvisibleAnnotationsAttribute flags 601 signature Ljava/lang/Object;Ljava/lang/classfile/Attribute;Ljava/lang/classfile/ClassElement;Ljava/lang/classfile/MethodElement;Ljava/lang/classfile/FieldElement;
+innerclass innerClass jdk/internal/classfile/impl/UnboundAttribute$UnboundRuntimeInvisibleAnnotationsAttribute outerClass jdk/internal/classfile/impl/UnboundAttribute innerClassName UnboundRuntimeInvisibleAnnotationsAttribute flags 19
+innerclass innerClass jdk/internal/classfile/impl/BoundAttribute$BoundRuntimeInvisibleAnnotationsAttribute outerClass jdk/internal/classfile/impl/BoundAttribute innerClassName BoundRuntimeInvisibleAnnotationsAttribute flags 19
+
+class name java/lang/classfile/attribute/RuntimeInvisibleParameterAnnotationsAttribute
+header extends java/lang/Object implements java/lang/classfile/Attribute,java/lang/classfile/MethodElement sealed true permittedSubclasses jdk/internal/classfile/impl/BoundAttribute$BoundRuntimeInvisibleParameterAnnotationsAttribute,jdk/internal/classfile/impl/UnboundAttribute$UnboundRuntimeInvisibleParameterAnnotationsAttribute flags 601 signature Ljava/lang/Object;Ljava/lang/classfile/Attribute;Ljava/lang/classfile/MethodElement;
+innerclass innerClass jdk/internal/classfile/impl/UnboundAttribute$UnboundRuntimeInvisibleParameterAnnotationsAttribute outerClass jdk/internal/classfile/impl/UnboundAttribute innerClassName UnboundRuntimeInvisibleParameterAnnotationsAttribute flags 19
+innerclass innerClass jdk/internal/classfile/impl/BoundAttribute$BoundRuntimeInvisibleParameterAnnotationsAttribute outerClass jdk/internal/classfile/impl/BoundAttribute innerClassName BoundRuntimeInvisibleParameterAnnotationsAttribute flags 19
+
+class name java/lang/classfile/attribute/RuntimeInvisibleTypeAnnotationsAttribute
+header extends java/lang/Object implements java/lang/classfile/Attribute,java/lang/classfile/ClassElement,java/lang/classfile/MethodElement,java/lang/classfile/FieldElement,java/lang/classfile/CodeElement sealed true permittedSubclasses jdk/internal/classfile/impl/BoundAttribute$BoundRuntimeInvisibleTypeAnnotationsAttribute,jdk/internal/classfile/impl/UnboundAttribute$UnboundRuntimeInvisibleTypeAnnotationsAttribute flags 601 signature Ljava/lang/Object;Ljava/lang/classfile/Attribute;Ljava/lang/classfile/ClassElement;Ljava/lang/classfile/MethodElement;Ljava/lang/classfile/FieldElement;Ljava/lang/classfile/CodeElement;
+innerclass innerClass jdk/internal/classfile/impl/UnboundAttribute$UnboundRuntimeInvisibleTypeAnnotationsAttribute outerClass jdk/internal/classfile/impl/UnboundAttribute innerClassName UnboundRuntimeInvisibleTypeAnnotationsAttribute flags 19
+innerclass innerClass jdk/internal/classfile/impl/BoundAttribute$BoundRuntimeInvisibleTypeAnnotationsAttribute outerClass jdk/internal/classfile/impl/BoundAttribute innerClassName BoundRuntimeInvisibleTypeAnnotationsAttribute flags 19
+
+class name java/lang/classfile/attribute/RuntimeVisibleAnnotationsAttribute
+header extends java/lang/Object implements java/lang/classfile/Attribute,java/lang/classfile/ClassElement,java/lang/classfile/MethodElement,java/lang/classfile/FieldElement sealed true permittedSubclasses jdk/internal/classfile/impl/BoundAttribute$BoundRuntimeVisibleAnnotationsAttribute,jdk/internal/classfile/impl/UnboundAttribute$UnboundRuntimeVisibleAnnotationsAttribute flags 601 signature Ljava/lang/Object;Ljava/lang/classfile/Attribute;Ljava/lang/classfile/ClassElement;Ljava/lang/classfile/MethodElement;Ljava/lang/classfile/FieldElement;
+innerclass innerClass jdk/internal/classfile/impl/UnboundAttribute$UnboundRuntimeVisibleAnnotationsAttribute outerClass jdk/internal/classfile/impl/UnboundAttribute innerClassName UnboundRuntimeVisibleAnnotationsAttribute flags 19
+innerclass innerClass jdk/internal/classfile/impl/BoundAttribute$BoundRuntimeVisibleAnnotationsAttribute outerClass jdk/internal/classfile/impl/BoundAttribute innerClassName BoundRuntimeVisibleAnnotationsAttribute flags 19
+
+class name java/lang/classfile/attribute/RuntimeVisibleParameterAnnotationsAttribute
+header extends java/lang/Object implements java/lang/classfile/Attribute,java/lang/classfile/MethodElement sealed true permittedSubclasses jdk/internal/classfile/impl/BoundAttribute$BoundRuntimeVisibleParameterAnnotationsAttribute,jdk/internal/classfile/impl/UnboundAttribute$UnboundRuntimeVisibleParameterAnnotationsAttribute flags 601 signature Ljava/lang/Object;Ljava/lang/classfile/Attribute;Ljava/lang/classfile/MethodElement;
+innerclass innerClass jdk/internal/classfile/impl/UnboundAttribute$UnboundRuntimeVisibleParameterAnnotationsAttribute outerClass jdk/internal/classfile/impl/UnboundAttribute innerClassName UnboundRuntimeVisibleParameterAnnotationsAttribute flags 19
+innerclass innerClass jdk/internal/classfile/impl/BoundAttribute$BoundRuntimeVisibleParameterAnnotationsAttribute outerClass jdk/internal/classfile/impl/BoundAttribute innerClassName BoundRuntimeVisibleParameterAnnotationsAttribute flags 19
+
+class name java/lang/classfile/attribute/RuntimeVisibleTypeAnnotationsAttribute
+header extends java/lang/Object implements java/lang/classfile/Attribute,java/lang/classfile/ClassElement,java/lang/classfile/MethodElement,java/lang/classfile/FieldElement,java/lang/classfile/CodeElement sealed true permittedSubclasses jdk/internal/classfile/impl/BoundAttribute$BoundRuntimeVisibleTypeAnnotationsAttribute,jdk/internal/classfile/impl/UnboundAttribute$UnboundRuntimeVisibleTypeAnnotationsAttribute flags 601 signature Ljava/lang/Object;Ljava/lang/classfile/Attribute;Ljava/lang/classfile/ClassElement;Ljava/lang/classfile/MethodElement;Ljava/lang/classfile/FieldElement;Ljava/lang/classfile/CodeElement;
+innerclass innerClass jdk/internal/classfile/impl/UnboundAttribute$UnboundRuntimeVisibleTypeAnnotationsAttribute outerClass jdk/internal/classfile/impl/UnboundAttribute innerClassName UnboundRuntimeVisibleTypeAnnotationsAttribute flags 19
+innerclass innerClass jdk/internal/classfile/impl/BoundAttribute$BoundRuntimeVisibleTypeAnnotationsAttribute outerClass jdk/internal/classfile/impl/BoundAttribute innerClassName BoundRuntimeVisibleTypeAnnotationsAttribute flags 19
+
+class name java/lang/classfile/attribute/SignatureAttribute
+header extends java/lang/Object implements java/lang/classfile/Attribute,java/lang/classfile/ClassElement,java/lang/classfile/MethodElement,java/lang/classfile/FieldElement sealed true permittedSubclasses jdk/internal/classfile/impl/BoundAttribute$BoundSignatureAttribute,jdk/internal/classfile/impl/UnboundAttribute$UnboundSignatureAttribute flags 601 signature Ljava/lang/Object;Ljava/lang/classfile/Attribute;Ljava/lang/classfile/ClassElement;Ljava/lang/classfile/MethodElement;Ljava/lang/classfile/FieldElement;
+innerclass innerClass jdk/internal/classfile/impl/UnboundAttribute$UnboundSignatureAttribute outerClass jdk/internal/classfile/impl/UnboundAttribute innerClassName UnboundSignatureAttribute flags 19
+innerclass innerClass jdk/internal/classfile/impl/BoundAttribute$BoundSignatureAttribute outerClass jdk/internal/classfile/impl/BoundAttribute innerClassName BoundSignatureAttribute flags 19
+
+class name java/lang/classfile/attribute/SourceDebugExtensionAttribute
+header extends java/lang/Object implements java/lang/classfile/Attribute,java/lang/classfile/ClassElement sealed true permittedSubclasses jdk/internal/classfile/impl/BoundAttribute$BoundSourceDebugExtensionAttribute,jdk/internal/classfile/impl/UnboundAttribute$UnboundSourceDebugExtensionAttribute flags 601 signature Ljava/lang/Object;Ljava/lang/classfile/Attribute;Ljava/lang/classfile/ClassElement;
+innerclass innerClass jdk/internal/classfile/impl/UnboundAttribute$UnboundSourceDebugExtensionAttribute outerClass jdk/internal/classfile/impl/UnboundAttribute innerClassName UnboundSourceDebugExtensionAttribute flags 19
+innerclass innerClass jdk/internal/classfile/impl/BoundAttribute$BoundSourceDebugExtensionAttribute outerClass jdk/internal/classfile/impl/BoundAttribute innerClassName BoundSourceDebugExtensionAttribute flags 19
+
+class name java/lang/classfile/attribute/SourceFileAttribute
+header extends java/lang/Object implements java/lang/classfile/Attribute,java/lang/classfile/ClassElement sealed true permittedSubclasses jdk/internal/classfile/impl/BoundAttribute$BoundSourceFileAttribute,jdk/internal/classfile/impl/UnboundAttribute$UnboundSourceFileAttribute flags 601 signature Ljava/lang/Object;Ljava/lang/classfile/Attribute;Ljava/lang/classfile/ClassElement;
+innerclass innerClass jdk/internal/classfile/impl/UnboundAttribute$UnboundSourceFileAttribute outerClass jdk/internal/classfile/impl/UnboundAttribute innerClassName UnboundSourceFileAttribute flags 19
+innerclass innerClass jdk/internal/classfile/impl/BoundAttribute$BoundSourceFileAttribute outerClass jdk/internal/classfile/impl/BoundAttribute innerClassName BoundSourceFileAttribute flags 19
+
+class name java/lang/classfile/attribute/SourceIDAttribute
+header extends java/lang/Object implements java/lang/classfile/Attribute,java/lang/classfile/ClassElement sealed true permittedSubclasses jdk/internal/classfile/impl/BoundAttribute$BoundSourceIDAttribute,jdk/internal/classfile/impl/UnboundAttribute$UnboundSourceIDAttribute flags 601 signature Ljava/lang/Object;Ljava/lang/classfile/Attribute;Ljava/lang/classfile/ClassElement;
+innerclass innerClass jdk/internal/classfile/impl/UnboundAttribute$UnboundSourceIDAttribute outerClass jdk/internal/classfile/impl/UnboundAttribute innerClassName UnboundSourceIDAttribute flags 19
+innerclass innerClass jdk/internal/classfile/impl/BoundAttribute$BoundSourceIDAttribute outerClass jdk/internal/classfile/impl/BoundAttribute innerClassName BoundSourceIDAttribute flags 19
+
+class name java/lang/classfile/attribute/StackMapFrameInfo
+header extends java/lang/Object nestMembers java/lang/classfile/attribute/StackMapFrameInfo$UninitializedVerificationTypeInfo,java/lang/classfile/attribute/StackMapFrameInfo$ObjectVerificationTypeInfo,java/lang/classfile/attribute/StackMapFrameInfo$SimpleVerificationTypeInfo,java/lang/classfile/attribute/StackMapFrameInfo$VerificationTypeInfo sealed true permittedSubclasses jdk/internal/classfile/impl/StackMapDecoder$StackMapFrameImpl flags 601
+innerclass innerClass jdk/internal/classfile/impl/StackMapDecoder$StackMapFrameImpl outerClass jdk/internal/classfile/impl/StackMapDecoder innerClassName StackMapFrameImpl flags 19
+innerclass innerClass java/lang/classfile/attribute/StackMapFrameInfo$UninitializedVerificationTypeInfo outerClass java/lang/classfile/attribute/StackMapFrameInfo innerClassName UninitializedVerificationTypeInfo flags 609
+innerclass innerClass java/lang/classfile/attribute/StackMapFrameInfo$ObjectVerificationTypeInfo outerClass java/lang/classfile/attribute/StackMapFrameInfo innerClassName ObjectVerificationTypeInfo flags 609
+innerclass innerClass java/lang/classfile/attribute/StackMapFrameInfo$SimpleVerificationTypeInfo outerClass java/lang/classfile/attribute/StackMapFrameInfo innerClassName SimpleVerificationTypeInfo flags 4019
+innerclass innerClass java/lang/classfile/attribute/StackMapFrameInfo$VerificationTypeInfo outerClass java/lang/classfile/attribute/StackMapFrameInfo innerClassName VerificationTypeInfo flags 609
+
+class name java/lang/classfile/attribute/StackMapFrameInfo$ObjectVerificationTypeInfo
+header extends java/lang/Object implements java/lang/classfile/attribute/StackMapFrameInfo$VerificationTypeInfo nestHost java/lang/classfile/attribute/StackMapFrameInfo sealed true permittedSubclasses jdk/internal/classfile/impl/StackMapDecoder$ObjectVerificationTypeInfoImpl flags 601
+innerclass innerClass jdk/internal/classfile/impl/StackMapDecoder$ObjectVerificationTypeInfoImpl outerClass jdk/internal/classfile/impl/StackMapDecoder innerClassName ObjectVerificationTypeInfoImpl flags 19
+innerclass innerClass java/lang/classfile/attribute/StackMapFrameInfo$ObjectVerificationTypeInfo outerClass java/lang/classfile/attribute/StackMapFrameInfo innerClassName ObjectVerificationTypeInfo flags 609
+innerclass innerClass java/lang/classfile/attribute/StackMapFrameInfo$VerificationTypeInfo outerClass java/lang/classfile/attribute/StackMapFrameInfo innerClassName VerificationTypeInfo flags 609
+
+class name java/lang/classfile/attribute/StackMapFrameInfo$SimpleVerificationTypeInfo
+header extends java/lang/Enum implements java/lang/classfile/attribute/StackMapFrameInfo$VerificationTypeInfo nestHost java/lang/classfile/attribute/StackMapFrameInfo flags 4031 signature Ljava/lang/Enum;Ljava/lang/classfile/attribute/StackMapFrameInfo$VerificationTypeInfo;
+innerclass innerClass java/lang/classfile/attribute/StackMapFrameInfo$SimpleVerificationTypeInfo outerClass java/lang/classfile/attribute/StackMapFrameInfo innerClassName SimpleVerificationTypeInfo flags 4019
+innerclass innerClass java/lang/classfile/attribute/StackMapFrameInfo$VerificationTypeInfo outerClass java/lang/classfile/attribute/StackMapFrameInfo innerClassName VerificationTypeInfo flags 609
+-field name ITEM_TOP descriptor Ljava/lang/classfile/attribute/StackMapFrameInfo$SimpleVerificationTypeInfo;
+-field name ITEM_INTEGER descriptor Ljava/lang/classfile/attribute/StackMapFrameInfo$SimpleVerificationTypeInfo;
+-field name ITEM_FLOAT descriptor Ljava/lang/classfile/attribute/StackMapFrameInfo$SimpleVerificationTypeInfo;
+-field name ITEM_DOUBLE descriptor Ljava/lang/classfile/attribute/StackMapFrameInfo$SimpleVerificationTypeInfo;
+-field name ITEM_LONG descriptor Ljava/lang/classfile/attribute/StackMapFrameInfo$SimpleVerificationTypeInfo;
+-field name ITEM_NULL descriptor Ljava/lang/classfile/attribute/StackMapFrameInfo$SimpleVerificationTypeInfo;
+-field name ITEM_UNINITIALIZED_THIS descriptor Ljava/lang/classfile/attribute/StackMapFrameInfo$SimpleVerificationTypeInfo;
+field name TOP descriptor Ljava/lang/classfile/attribute/StackMapFrameInfo$SimpleVerificationTypeInfo; flags 4019
+field name INTEGER descriptor Ljava/lang/classfile/attribute/StackMapFrameInfo$SimpleVerificationTypeInfo; flags 4019
+field name FLOAT descriptor Ljava/lang/classfile/attribute/StackMapFrameInfo$SimpleVerificationTypeInfo; flags 4019
+field name DOUBLE descriptor Ljava/lang/classfile/attribute/StackMapFrameInfo$SimpleVerificationTypeInfo; flags 4019
+field name LONG descriptor Ljava/lang/classfile/attribute/StackMapFrameInfo$SimpleVerificationTypeInfo; flags 4019
+field name NULL descriptor Ljava/lang/classfile/attribute/StackMapFrameInfo$SimpleVerificationTypeInfo; flags 4019
+field name UNINITIALIZED_THIS descriptor Ljava/lang/classfile/attribute/StackMapFrameInfo$SimpleVerificationTypeInfo; flags 4019
+
+class name java/lang/classfile/attribute/StackMapFrameInfo$UninitializedVerificationTypeInfo
+header extends java/lang/Object implements java/lang/classfile/attribute/StackMapFrameInfo$VerificationTypeInfo nestHost java/lang/classfile/attribute/StackMapFrameInfo sealed true permittedSubclasses jdk/internal/classfile/impl/StackMapDecoder$UninitializedVerificationTypeInfoImpl flags 601
+innerclass innerClass jdk/internal/classfile/impl/StackMapDecoder$UninitializedVerificationTypeInfoImpl outerClass jdk/internal/classfile/impl/StackMapDecoder innerClassName UninitializedVerificationTypeInfoImpl flags 19
+innerclass innerClass java/lang/classfile/attribute/StackMapFrameInfo$UninitializedVerificationTypeInfo outerClass java/lang/classfile/attribute/StackMapFrameInfo innerClassName UninitializedVerificationTypeInfo flags 609
+innerclass innerClass java/lang/classfile/attribute/StackMapFrameInfo$VerificationTypeInfo outerClass java/lang/classfile/attribute/StackMapFrameInfo innerClassName VerificationTypeInfo flags 609
+
+class name java/lang/classfile/attribute/StackMapFrameInfo$VerificationTypeInfo
+header extends java/lang/Object nestHost java/lang/classfile/attribute/StackMapFrameInfo sealed true permittedSubclasses java/lang/classfile/attribute/StackMapFrameInfo$SimpleVerificationTypeInfo,java/lang/classfile/attribute/StackMapFrameInfo$ObjectVerificationTypeInfo,java/lang/classfile/attribute/StackMapFrameInfo$UninitializedVerificationTypeInfo flags 601
+innerclass innerClass java/lang/classfile/attribute/StackMapFrameInfo$VerificationTypeInfo outerClass java/lang/classfile/attribute/StackMapFrameInfo innerClassName VerificationTypeInfo flags 609
+innerclass innerClass java/lang/classfile/attribute/StackMapFrameInfo$SimpleVerificationTypeInfo outerClass java/lang/classfile/attribute/StackMapFrameInfo innerClassName SimpleVerificationTypeInfo flags 4019
+innerclass innerClass java/lang/classfile/attribute/StackMapFrameInfo$ObjectVerificationTypeInfo outerClass java/lang/classfile/attribute/StackMapFrameInfo innerClassName ObjectVerificationTypeInfo flags 609
+innerclass innerClass java/lang/classfile/attribute/StackMapFrameInfo$UninitializedVerificationTypeInfo outerClass java/lang/classfile/attribute/StackMapFrameInfo innerClassName UninitializedVerificationTypeInfo flags 609
+field name ITEM_TOP descriptor I constantValue 0 flags 19
+field name ITEM_INTEGER descriptor I constantValue 1 flags 19
+field name ITEM_FLOAT descriptor I constantValue 2 flags 19
+field name ITEM_DOUBLE descriptor I constantValue 3 flags 19
+field name ITEM_LONG descriptor I constantValue 4 flags 19
+field name ITEM_NULL descriptor I constantValue 5 flags 19
+field name ITEM_UNINITIALIZED_THIS descriptor I constantValue 6 flags 19
+field name ITEM_OBJECT descriptor I constantValue 7 flags 19
+field name ITEM_UNINITIALIZED descriptor I constantValue 8 flags 19
+
+class name java/lang/classfile/attribute/StackMapTableAttribute
+header extends java/lang/Object implements java/lang/classfile/Attribute,java/lang/classfile/CodeElement sealed true permittedSubclasses jdk/internal/classfile/impl/BoundAttribute$BoundStackMapTableAttribute,jdk/internal/classfile/impl/UnboundAttribute$UnboundStackMapTableAttribute flags 601 signature Ljava/lang/Object;Ljava/lang/classfile/Attribute;Ljava/lang/classfile/CodeElement;
+innerclass innerClass jdk/internal/classfile/impl/UnboundAttribute$UnboundStackMapTableAttribute outerClass jdk/internal/classfile/impl/UnboundAttribute innerClassName UnboundStackMapTableAttribute flags 19
+innerclass innerClass jdk/internal/classfile/impl/BoundAttribute$BoundStackMapTableAttribute outerClass jdk/internal/classfile/impl/BoundAttribute innerClassName BoundStackMapTableAttribute flags 19
+
+class name java/lang/classfile/attribute/SyntheticAttribute
+header extends java/lang/Object implements java/lang/classfile/Attribute,java/lang/classfile/ClassElement,java/lang/classfile/MethodElement,java/lang/classfile/FieldElement sealed true permittedSubclasses jdk/internal/classfile/impl/BoundAttribute$BoundSyntheticAttribute,jdk/internal/classfile/impl/UnboundAttribute$UnboundSyntheticAttribute flags 601 signature Ljava/lang/Object;Ljava/lang/classfile/Attribute;Ljava/lang/classfile/ClassElement;Ljava/lang/classfile/MethodElement;Ljava/lang/classfile/FieldElement;
+innerclass innerClass jdk/internal/classfile/impl/UnboundAttribute$UnboundSyntheticAttribute outerClass jdk/internal/classfile/impl/UnboundAttribute innerClassName UnboundSyntheticAttribute flags 19
+innerclass innerClass jdk/internal/classfile/impl/BoundAttribute$BoundSyntheticAttribute outerClass jdk/internal/classfile/impl/BoundAttribute innerClassName BoundSyntheticAttribute flags 19
+
+class name java/lang/classfile/attribute/UnknownAttribute
+header extends java/lang/Object implements java/lang/classfile/Attribute,java/lang/classfile/ClassElement,java/lang/classfile/MethodElement,java/lang/classfile/FieldElement sealed true permittedSubclasses jdk/internal/classfile/impl/BoundAttribute$BoundUnknownAttribute flags 601 signature Ljava/lang/Object;Ljava/lang/classfile/Attribute;Ljava/lang/classfile/ClassElement;Ljava/lang/classfile/MethodElement;Ljava/lang/classfile/FieldElement;
+innerclass innerClass jdk/internal/classfile/impl/BoundAttribute$BoundUnknownAttribute outerClass jdk/internal/classfile/impl/BoundAttribute innerClassName BoundUnknownAttribute flags 19
+
+class name java/lang/classfile/components/ClassPrinter
+header extends java/lang/Object nestMembers java/lang/classfile/components/ClassPrinter$MapNode,java/lang/classfile/components/ClassPrinter$ListNode,java/lang/classfile/components/ClassPrinter$LeafNode,java/lang/classfile/components/ClassPrinter$Node,java/lang/classfile/components/ClassPrinter$Verbosity flags 31
+innerclass innerClass java/lang/classfile/components/ClassPrinter$Verbosity outerClass java/lang/classfile/components/ClassPrinter innerClassName Verbosity flags 4019
+innerclass innerClass java/lang/classfile/components/ClassPrinter$MapNode outerClass java/lang/classfile/components/ClassPrinter innerClassName MapNode flags 609
+innerclass innerClass java/lang/classfile/components/ClassPrinter$ListNode outerClass java/lang/classfile/components/ClassPrinter innerClassName ListNode flags 609
+innerclass innerClass java/lang/classfile/components/ClassPrinter$LeafNode outerClass java/lang/classfile/components/ClassPrinter innerClassName LeafNode flags 609
+innerclass innerClass java/lang/classfile/components/ClassPrinter$Node outerClass java/lang/classfile/components/ClassPrinter innerClassName Node flags 609
+
+class name java/lang/classfile/components/ClassPrinter$LeafNode
+header extends java/lang/Object implements java/lang/classfile/components/ClassPrinter$Node nestHost java/lang/classfile/components/ClassPrinter sealed true permittedSubclasses jdk/internal/classfile/impl/ClassPrinterImpl$LeafNodeImpl flags 601
+innerclass innerClass java/lang/classfile/components/ClassPrinter$LeafNode outerClass java/lang/classfile/components/ClassPrinter innerClassName LeafNode flags 609
+innerclass innerClass java/lang/classfile/components/ClassPrinter$Node outerClass java/lang/classfile/components/ClassPrinter innerClassName Node flags 609
+innerclass innerClass jdk/internal/classfile/impl/ClassPrinterImpl$LeafNodeImpl outerClass jdk/internal/classfile/impl/ClassPrinterImpl innerClassName LeafNodeImpl flags 19
+
+class name java/lang/classfile/components/ClassPrinter$ListNode
+header extends java/lang/Object implements java/lang/classfile/components/ClassPrinter$Node,java/util/List nestHost java/lang/classfile/components/ClassPrinter sealed true permittedSubclasses jdk/internal/classfile/impl/ClassPrinterImpl$ListNodeImpl flags 601 signature Ljava/lang/Object;Ljava/lang/classfile/components/ClassPrinter$Node;Ljava/util/List;
+innerclass innerClass java/lang/classfile/components/ClassPrinter$ListNode outerClass java/lang/classfile/components/ClassPrinter innerClassName ListNode flags 609
+innerclass innerClass java/lang/classfile/components/ClassPrinter$Node outerClass java/lang/classfile/components/ClassPrinter innerClassName Node flags 609
+innerclass innerClass jdk/internal/classfile/impl/ClassPrinterImpl$ListNodeImpl outerClass jdk/internal/classfile/impl/ClassPrinterImpl innerClassName ListNodeImpl flags 9
+
+class name java/lang/classfile/components/ClassPrinter$MapNode
+header extends java/lang/Object implements java/lang/classfile/components/ClassPrinter$Node,java/util/Map nestHost java/lang/classfile/components/ClassPrinter sealed true permittedSubclasses jdk/internal/classfile/impl/ClassPrinterImpl$MapNodeImpl flags 601 signature Ljava/lang/Object;Ljava/lang/classfile/components/ClassPrinter$Node;Ljava/util/Map;
+innerclass innerClass java/lang/classfile/components/ClassPrinter$MapNode outerClass java/lang/classfile/components/ClassPrinter innerClassName MapNode flags 609
+innerclass innerClass java/lang/classfile/components/ClassPrinter$Node outerClass java/lang/classfile/components/ClassPrinter innerClassName Node flags 609
+innerclass innerClass jdk/internal/classfile/impl/ClassPrinterImpl$MapNodeImpl outerClass jdk/internal/classfile/impl/ClassPrinterImpl innerClassName MapNodeImpl flags 19
+
+class name java/lang/classfile/components/ClassPrinter$Node
+header extends java/lang/Object nestHost java/lang/classfile/components/ClassPrinter sealed true permittedSubclasses java/lang/classfile/components/ClassPrinter$LeafNode,java/lang/classfile/components/ClassPrinter$ListNode,java/lang/classfile/components/ClassPrinter$MapNode flags 601
+innerclass innerClass java/lang/classfile/components/ClassPrinter$Node outerClass java/lang/classfile/components/ClassPrinter innerClassName Node flags 609
+innerclass innerClass java/lang/classfile/components/ClassPrinter$LeafNode outerClass java/lang/classfile/components/ClassPrinter innerClassName LeafNode flags 609
+innerclass innerClass java/lang/classfile/components/ClassPrinter$ListNode outerClass java/lang/classfile/components/ClassPrinter innerClassName ListNode flags 609
+innerclass innerClass java/lang/classfile/components/ClassPrinter$MapNode outerClass java/lang/classfile/components/ClassPrinter innerClassName MapNode flags 609
+
+class name java/lang/classfile/components/ClassPrinter$Verbosity
+header extends java/lang/Enum nestHost java/lang/classfile/components/ClassPrinter flags 4031 signature Ljava/lang/Enum;
+innerclass innerClass java/lang/classfile/components/ClassPrinter$Verbosity outerClass java/lang/classfile/components/ClassPrinter innerClassName Verbosity flags 4019
+
+class name java/lang/classfile/components/ClassRemapper
+header extends java/lang/Object implements java/lang/classfile/ClassTransform sealed true permittedSubclasses jdk/internal/classfile/impl/ClassRemapperImpl flags 601
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/lang/classfile/components/CodeLocalsShifter
+header extends java/lang/Object implements java/lang/classfile/CodeTransform sealed true permittedSubclasses jdk/internal/classfile/impl/CodeLocalsShifterImpl flags 601
+innerclass innerClass java/lang/invoke/TypeDescriptor$OfField outerClass java/lang/invoke/TypeDescriptor innerClassName OfField flags 609
+
+class name java/lang/classfile/components/CodeRelabeler
+header extends java/lang/Object implements java/lang/classfile/CodeTransform sealed true permittedSubclasses jdk/internal/classfile/impl/CodeRelabelerImpl flags 601
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+-method name relabel descriptor (Ljava/lang/classfile/Label;Ljava/lang/classfile/CodeBuilder;)Ljava/lang/classfile/Label;
+
+class name java/lang/classfile/components/CodeStackTracker
+header extends java/lang/Object implements java/lang/classfile/CodeTransform sealed true permittedSubclasses jdk/internal/classfile/impl/CodeStackTrackerImpl flags 601
+
+class name java/lang/classfile/constantpool/AnnotationConstantValueEntry
+header extends java/lang/Object implements java/lang/classfile/constantpool/PoolEntry sealed true permittedSubclasses java/lang/classfile/constantpool/DoubleEntry,java/lang/classfile/constantpool/FloatEntry,java/lang/classfile/constantpool/IntegerEntry,java/lang/classfile/constantpool/LongEntry,java/lang/classfile/constantpool/Utf8Entry flags 601
+
+class name java/lang/classfile/constantpool/ClassEntry
+header extends java/lang/Object implements java/lang/classfile/constantpool/LoadableConstantEntry sealed true permittedSubclasses jdk/internal/classfile/impl/AbstractPoolEntry$ClassEntryImpl flags 601
+innerclass innerClass jdk/internal/classfile/impl/AbstractPoolEntry$ClassEntryImpl outerClass jdk/internal/classfile/impl/AbstractPoolEntry innerClassName ClassEntryImpl flags 19
+
+class name java/lang/classfile/constantpool/ConstantDynamicEntry
+header extends java/lang/Object implements java/lang/classfile/constantpool/DynamicConstantPoolEntry,java/lang/classfile/constantpool/LoadableConstantEntry sealed true permittedSubclasses jdk/internal/classfile/impl/AbstractPoolEntry$ConstantDynamicEntryImpl flags 601
+innerclass innerClass jdk/internal/classfile/impl/AbstractPoolEntry$ConstantDynamicEntryImpl outerClass jdk/internal/classfile/impl/AbstractPoolEntry innerClassName ConstantDynamicEntryImpl flags 19
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/lang/classfile/constantpool/ConstantPool
+header extends java/lang/Object implements java/lang/Iterable sealed true permittedSubclasses java/lang/classfile/ClassReader,java/lang/classfile/constantpool/ConstantPoolBuilder flags 601 signature Ljava/lang/Object;Ljava/lang/Iterable;
+
+class name java/lang/classfile/constantpool/ConstantPoolBuilder
+header extends java/lang/Object implements java/lang/classfile/constantpool/ConstantPool sealed true permittedSubclasses jdk/internal/classfile/impl/SplitConstantPool,jdk/internal/classfile/impl/TemporaryConstantPool flags 601
+innerclass innerClass jdk/internal/classfile/impl/AbstractPoolEntry$ClassEntryImpl outerClass jdk/internal/classfile/impl/AbstractPoolEntry innerClassName ClassEntryImpl flags 19
+innerclass innerClass java/lang/constant/DirectMethodHandleDesc$Kind outerClass java/lang/constant/DirectMethodHandleDesc innerClassName Kind flags 4019
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+-method name writeBootstrapMethods descriptor (Ljava/lang/classfile/BufWriter;)Z
+-method name annotationConstantValueEntry descriptor (Ljava/lang/constant/ConstantDesc;)Ljava/lang/classfile/constantpool/AnnotationConstantValueEntry;
+
+class name java/lang/classfile/constantpool/ConstantPoolException
+header extends java/lang/IllegalArgumentException flags 21
+
+class name java/lang/classfile/constantpool/ConstantValueEntry
+header extends java/lang/Object implements java/lang/classfile/constantpool/LoadableConstantEntry sealed true permittedSubclasses java/lang/classfile/constantpool/DoubleEntry,java/lang/classfile/constantpool/FloatEntry,java/lang/classfile/constantpool/IntegerEntry,java/lang/classfile/constantpool/LongEntry,java/lang/classfile/constantpool/StringEntry flags 601
+
+class name java/lang/classfile/constantpool/DoubleEntry
+header extends java/lang/Object implements java/lang/classfile/constantpool/AnnotationConstantValueEntry,java/lang/classfile/constantpool/ConstantValueEntry sealed true permittedSubclasses jdk/internal/classfile/impl/AbstractPoolEntry$DoubleEntryImpl flags 601
+innerclass innerClass jdk/internal/classfile/impl/AbstractPoolEntry$DoubleEntryImpl outerClass jdk/internal/classfile/impl/AbstractPoolEntry innerClassName DoubleEntryImpl flags 19
+
+class name java/lang/classfile/constantpool/DynamicConstantPoolEntry
+header extends java/lang/Object implements java/lang/classfile/constantpool/PoolEntry sealed true permittedSubclasses java/lang/classfile/constantpool/ConstantDynamicEntry,java/lang/classfile/constantpool/InvokeDynamicEntry flags 601
+
+class name java/lang/classfile/constantpool/FieldRefEntry
+header extends java/lang/Object implements java/lang/classfile/constantpool/MemberRefEntry sealed true permittedSubclasses jdk/internal/classfile/impl/AbstractPoolEntry$FieldRefEntryImpl flags 601
+innerclass innerClass jdk/internal/classfile/impl/AbstractPoolEntry$FieldRefEntryImpl outerClass jdk/internal/classfile/impl/AbstractPoolEntry innerClassName FieldRefEntryImpl flags 19
+
+class name java/lang/classfile/constantpool/FloatEntry
+header extends java/lang/Object implements java/lang/classfile/constantpool/AnnotationConstantValueEntry,java/lang/classfile/constantpool/ConstantValueEntry sealed true permittedSubclasses jdk/internal/classfile/impl/AbstractPoolEntry$FloatEntryImpl flags 601
+innerclass innerClass jdk/internal/classfile/impl/AbstractPoolEntry$FloatEntryImpl outerClass jdk/internal/classfile/impl/AbstractPoolEntry innerClassName FloatEntryImpl flags 19
+
+class name java/lang/classfile/constantpool/IntegerEntry
+header extends java/lang/Object implements java/lang/classfile/constantpool/AnnotationConstantValueEntry,java/lang/classfile/constantpool/ConstantValueEntry sealed true permittedSubclasses jdk/internal/classfile/impl/AbstractPoolEntry$IntegerEntryImpl flags 601
+innerclass innerClass jdk/internal/classfile/impl/AbstractPoolEntry$IntegerEntryImpl outerClass jdk/internal/classfile/impl/AbstractPoolEntry innerClassName IntegerEntryImpl flags 19
+
+class name java/lang/classfile/constantpool/InterfaceMethodRefEntry
+header extends java/lang/Object implements java/lang/classfile/constantpool/MemberRefEntry sealed true permittedSubclasses jdk/internal/classfile/impl/AbstractPoolEntry$InterfaceMethodRefEntryImpl flags 601
+innerclass innerClass jdk/internal/classfile/impl/AbstractPoolEntry$InterfaceMethodRefEntryImpl outerClass jdk/internal/classfile/impl/AbstractPoolEntry innerClassName InterfaceMethodRefEntryImpl flags 19
+
+class name java/lang/classfile/constantpool/InvokeDynamicEntry
+header extends java/lang/Object implements java/lang/classfile/constantpool/DynamicConstantPoolEntry sealed true permittedSubclasses jdk/internal/classfile/impl/AbstractPoolEntry$InvokeDynamicEntryImpl flags 601
+innerclass innerClass jdk/internal/classfile/impl/AbstractPoolEntry$InvokeDynamicEntryImpl outerClass jdk/internal/classfile/impl/AbstractPoolEntry innerClassName InvokeDynamicEntryImpl flags 19
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/lang/classfile/constantpool/LoadableConstantEntry
+header extends java/lang/Object implements java/lang/classfile/constantpool/PoolEntry sealed true permittedSubclasses java/lang/classfile/constantpool/ClassEntry,java/lang/classfile/constantpool/ConstantDynamicEntry,java/lang/classfile/constantpool/ConstantValueEntry,java/lang/classfile/constantpool/MethodHandleEntry,java/lang/classfile/constantpool/MethodTypeEntry flags 601
+
+class name java/lang/classfile/constantpool/LongEntry
+header extends java/lang/Object implements java/lang/classfile/constantpool/AnnotationConstantValueEntry,java/lang/classfile/constantpool/ConstantValueEntry sealed true permittedSubclasses jdk/internal/classfile/impl/AbstractPoolEntry$LongEntryImpl flags 601
+innerclass innerClass jdk/internal/classfile/impl/AbstractPoolEntry$LongEntryImpl outerClass jdk/internal/classfile/impl/AbstractPoolEntry innerClassName LongEntryImpl flags 19
+
+class name java/lang/classfile/constantpool/MemberRefEntry
+header extends java/lang/Object implements java/lang/classfile/constantpool/PoolEntry sealed true permittedSubclasses java/lang/classfile/constantpool/FieldRefEntry,java/lang/classfile/constantpool/InterfaceMethodRefEntry,java/lang/classfile/constantpool/MethodRefEntry,jdk/internal/classfile/impl/AbstractPoolEntry$AbstractMemberRefEntry flags 601
+innerclass innerClass jdk/internal/classfile/impl/AbstractPoolEntry$AbstractMemberRefEntry outerClass jdk/internal/classfile/impl/AbstractPoolEntry innerClassName AbstractMemberRefEntry flags 409
+
+class name java/lang/classfile/constantpool/MethodHandleEntry
+header extends java/lang/Object implements java/lang/classfile/constantpool/LoadableConstantEntry sealed true permittedSubclasses jdk/internal/classfile/impl/AbstractPoolEntry$MethodHandleEntryImpl flags 601
+innerclass innerClass jdk/internal/classfile/impl/AbstractPoolEntry$MethodHandleEntryImpl outerClass jdk/internal/classfile/impl/AbstractPoolEntry innerClassName MethodHandleEntryImpl flags 19
+
+class name java/lang/classfile/constantpool/MethodRefEntry
+header extends java/lang/Object implements java/lang/classfile/constantpool/MemberRefEntry sealed true permittedSubclasses jdk/internal/classfile/impl/AbstractPoolEntry$MethodRefEntryImpl flags 601
+innerclass innerClass jdk/internal/classfile/impl/AbstractPoolEntry$MethodRefEntryImpl outerClass jdk/internal/classfile/impl/AbstractPoolEntry innerClassName MethodRefEntryImpl flags 19
+
+class name java/lang/classfile/constantpool/MethodTypeEntry
+header extends java/lang/Object implements java/lang/classfile/constantpool/LoadableConstantEntry sealed true permittedSubclasses jdk/internal/classfile/impl/AbstractPoolEntry$MethodTypeEntryImpl flags 601
+innerclass innerClass jdk/internal/classfile/impl/AbstractPoolEntry$MethodTypeEntryImpl outerClass jdk/internal/classfile/impl/AbstractPoolEntry innerClassName MethodTypeEntryImpl flags 19
+
+class name java/lang/classfile/constantpool/ModuleEntry
+header extends java/lang/Object implements java/lang/classfile/constantpool/PoolEntry sealed true permittedSubclasses jdk/internal/classfile/impl/AbstractPoolEntry$ModuleEntryImpl flags 601
+innerclass innerClass jdk/internal/classfile/impl/AbstractPoolEntry$ModuleEntryImpl outerClass jdk/internal/classfile/impl/AbstractPoolEntry innerClassName ModuleEntryImpl flags 19
+
+class name java/lang/classfile/constantpool/NameAndTypeEntry
+header extends java/lang/Object implements java/lang/classfile/constantpool/PoolEntry sealed true permittedSubclasses jdk/internal/classfile/impl/AbstractPoolEntry$NameAndTypeEntryImpl flags 601
+innerclass innerClass jdk/internal/classfile/impl/AbstractPoolEntry$NameAndTypeEntryImpl outerClass jdk/internal/classfile/impl/AbstractPoolEntry innerClassName NameAndTypeEntryImpl flags 19
+
+class name java/lang/classfile/constantpool/PackageEntry
+header extends java/lang/Object implements java/lang/classfile/constantpool/PoolEntry sealed true permittedSubclasses jdk/internal/classfile/impl/AbstractPoolEntry$PackageEntryImpl flags 601
+innerclass innerClass jdk/internal/classfile/impl/AbstractPoolEntry$PackageEntryImpl outerClass jdk/internal/classfile/impl/AbstractPoolEntry innerClassName PackageEntryImpl flags 19
+
+class name java/lang/classfile/constantpool/PoolEntry
+header extends java/lang/Object sealed true permittedSubclasses java/lang/classfile/constantpool/AnnotationConstantValueEntry,java/lang/classfile/constantpool/DynamicConstantPoolEntry,java/lang/classfile/constantpool/LoadableConstantEntry,java/lang/classfile/constantpool/MemberRefEntry,java/lang/classfile/constantpool/ModuleEntry,java/lang/classfile/constantpool/NameAndTypeEntry,java/lang/classfile/constantpool/PackageEntry flags 601
+field name TAG_CLASS descriptor I constantValue 7 flags 19
+field name TAG_DOUBLE descriptor I constantValue 6 flags 19
+field name TAG_DYNAMIC descriptor I constantValue 17 flags 19
+field name TAG_FIELDREF descriptor I constantValue 9 flags 19
+field name TAG_FLOAT descriptor I constantValue 4 flags 19
+field name TAG_INTEGER descriptor I constantValue 3 flags 19
+field name TAG_INTERFACE_METHODREF descriptor I constantValue 11 flags 19
+field name TAG_INVOKE_DYNAMIC descriptor I constantValue 18 flags 19
+field name TAG_LONG descriptor I constantValue 5 flags 19
+field name TAG_METHOD_HANDLE descriptor I constantValue 15 flags 19
+field name TAG_METHODREF descriptor I constantValue 10 flags 19
+field name TAG_METHOD_TYPE descriptor I constantValue 16 flags 19
+field name TAG_MODULE descriptor I constantValue 19 flags 19
+field name TAG_NAME_AND_TYPE descriptor I constantValue 12 flags 19
+field name TAG_PACKAGE descriptor I constantValue 20 flags 19
+field name TAG_STRING descriptor I constantValue 8 flags 19
+field name TAG_UTF8 descriptor I constantValue 1 flags 19
+
+class name java/lang/classfile/constantpool/StringEntry
+header extends java/lang/Object implements java/lang/classfile/constantpool/ConstantValueEntry sealed true permittedSubclasses jdk/internal/classfile/impl/AbstractPoolEntry$StringEntryImpl flags 601
+innerclass innerClass jdk/internal/classfile/impl/AbstractPoolEntry$StringEntryImpl outerClass jdk/internal/classfile/impl/AbstractPoolEntry innerClassName StringEntryImpl flags 19
+
+class name java/lang/classfile/constantpool/Utf8Entry
+header extends java/lang/Object implements java/lang/CharSequence,java/lang/classfile/constantpool/AnnotationConstantValueEntry sealed true permittedSubclasses jdk/internal/classfile/impl/AbstractPoolEntry$Utf8EntryImpl flags 601
+innerclass innerClass jdk/internal/classfile/impl/AbstractPoolEntry$Utf8EntryImpl outerClass jdk/internal/classfile/impl/AbstractPoolEntry innerClassName Utf8EntryImpl flags 19
+
+class name java/lang/classfile/instruction/ArrayLoadInstruction
+header extends java/lang/Object implements java/lang/classfile/Instruction sealed true permittedSubclasses jdk/internal/classfile/impl/AbstractInstruction$UnboundArrayLoadInstruction flags 601
+innerclass innerClass java/lang/classfile/Opcode$Kind outerClass java/lang/classfile/Opcode innerClassName Kind flags 4019
+innerclass innerClass jdk/internal/classfile/impl/AbstractInstruction$UnboundArrayLoadInstruction outerClass jdk/internal/classfile/impl/AbstractInstruction innerClassName UnboundArrayLoadInstruction flags 19
+
+class name java/lang/classfile/instruction/ArrayStoreInstruction
+header extends java/lang/Object implements java/lang/classfile/Instruction sealed true permittedSubclasses jdk/internal/classfile/impl/AbstractInstruction$UnboundArrayStoreInstruction flags 601
+innerclass innerClass java/lang/classfile/Opcode$Kind outerClass java/lang/classfile/Opcode innerClassName Kind flags 4019
+innerclass innerClass jdk/internal/classfile/impl/AbstractInstruction$UnboundArrayStoreInstruction outerClass jdk/internal/classfile/impl/AbstractInstruction innerClassName UnboundArrayStoreInstruction flags 19
+
+class name java/lang/classfile/instruction/BranchInstruction
+header extends java/lang/Object implements java/lang/classfile/Instruction sealed true permittedSubclasses jdk/internal/classfile/impl/AbstractInstruction$BoundBranchInstruction,jdk/internal/classfile/impl/AbstractInstruction$UnboundBranchInstruction flags 601
+innerclass innerClass java/lang/classfile/Opcode$Kind outerClass java/lang/classfile/Opcode innerClassName Kind flags 4019
+innerclass innerClass jdk/internal/classfile/impl/AbstractInstruction$UnboundBranchInstruction outerClass jdk/internal/classfile/impl/AbstractInstruction innerClassName UnboundBranchInstruction flags 19
+innerclass innerClass jdk/internal/classfile/impl/AbstractInstruction$BoundBranchInstruction outerClass jdk/internal/classfile/impl/AbstractInstruction innerClassName BoundBranchInstruction flags 19
+
+class name java/lang/classfile/instruction/CharacterRange
+header extends java/lang/Object implements java/lang/classfile/PseudoInstruction sealed true permittedSubclasses jdk/internal/classfile/impl/AbstractPseudoInstruction$UnboundCharacterRange,jdk/internal/classfile/impl/BoundCharacterRange flags 601
+innerclass innerClass jdk/internal/classfile/impl/AbstractPseudoInstruction$UnboundCharacterRange outerClass jdk/internal/classfile/impl/AbstractPseudoInstruction innerClassName UnboundCharacterRange flags 19
+field name FLAG_STATEMENT descriptor I constantValue 1 flags 19
+field name FLAG_BLOCK descriptor I constantValue 2 flags 19
+field name FLAG_ASSIGNMENT descriptor I constantValue 4 flags 19
+field name FLAG_FLOW_CONTROLLER descriptor I constantValue 8 flags 19
+field name FLAG_FLOW_TARGET descriptor I constantValue 16 flags 19
+field name FLAG_INVOKE descriptor I constantValue 32 flags 19
+field name FLAG_CREATE descriptor I constantValue 64 flags 19
+field name FLAG_BRANCH_TRUE descriptor I constantValue 128 flags 19
+field name FLAG_BRANCH_FALSE descriptor I constantValue 256 flags 19
+
+class name java/lang/classfile/instruction/ConstantInstruction
+header extends java/lang/Object implements java/lang/classfile/Instruction nestMembers java/lang/classfile/instruction/ConstantInstruction$LoadConstantInstruction,java/lang/classfile/instruction/ConstantInstruction$ArgumentConstantInstruction,java/lang/classfile/instruction/ConstantInstruction$IntrinsicConstantInstruction sealed true permittedSubclasses java/lang/classfile/instruction/ConstantInstruction$IntrinsicConstantInstruction,java/lang/classfile/instruction/ConstantInstruction$ArgumentConstantInstruction,java/lang/classfile/instruction/ConstantInstruction$LoadConstantInstruction flags 601
+innerclass innerClass java/lang/classfile/Opcode$Kind outerClass java/lang/classfile/Opcode innerClassName Kind flags 4019
+innerclass innerClass jdk/internal/classfile/impl/AbstractInstruction$UnboundIntrinsicConstantInstruction outerClass jdk/internal/classfile/impl/AbstractInstruction innerClassName UnboundIntrinsicConstantInstruction flags 19
+innerclass innerClass jdk/internal/classfile/impl/AbstractInstruction$UnboundArgumentConstantInstruction outerClass jdk/internal/classfile/impl/AbstractInstruction innerClassName UnboundArgumentConstantInstruction flags 19
+innerclass innerClass jdk/internal/classfile/impl/AbstractInstruction$UnboundLoadConstantInstruction outerClass jdk/internal/classfile/impl/AbstractInstruction innerClassName UnboundLoadConstantInstruction flags 19
+innerclass innerClass java/lang/classfile/instruction/ConstantInstruction$LoadConstantInstruction outerClass java/lang/classfile/instruction/ConstantInstruction innerClassName LoadConstantInstruction flags 609
+innerclass innerClass java/lang/classfile/instruction/ConstantInstruction$ArgumentConstantInstruction outerClass java/lang/classfile/instruction/ConstantInstruction innerClassName ArgumentConstantInstruction flags 609
+innerclass innerClass java/lang/classfile/instruction/ConstantInstruction$IntrinsicConstantInstruction outerClass java/lang/classfile/instruction/ConstantInstruction innerClassName IntrinsicConstantInstruction flags 609
+
+class name java/lang/classfile/instruction/ConstantInstruction$ArgumentConstantInstruction
+header extends java/lang/Object implements java/lang/classfile/instruction/ConstantInstruction nestHost java/lang/classfile/instruction/ConstantInstruction sealed true permittedSubclasses jdk/internal/classfile/impl/AbstractInstruction$BoundArgumentConstantInstruction,jdk/internal/classfile/impl/AbstractInstruction$UnboundArgumentConstantInstruction flags 601
+innerclass innerClass java/lang/classfile/instruction/ConstantInstruction$ArgumentConstantInstruction outerClass java/lang/classfile/instruction/ConstantInstruction innerClassName ArgumentConstantInstruction flags 609
+innerclass innerClass jdk/internal/classfile/impl/AbstractInstruction$BoundArgumentConstantInstruction outerClass jdk/internal/classfile/impl/AbstractInstruction innerClassName BoundArgumentConstantInstruction flags 19
+innerclass innerClass jdk/internal/classfile/impl/AbstractInstruction$UnboundArgumentConstantInstruction outerClass jdk/internal/classfile/impl/AbstractInstruction innerClassName UnboundArgumentConstantInstruction flags 19
+
+class name java/lang/classfile/instruction/ConstantInstruction$IntrinsicConstantInstruction
+header extends java/lang/Object implements java/lang/classfile/instruction/ConstantInstruction nestHost java/lang/classfile/instruction/ConstantInstruction sealed true permittedSubclasses jdk/internal/classfile/impl/AbstractInstruction$UnboundIntrinsicConstantInstruction flags 601
+innerclass innerClass java/lang/classfile/instruction/ConstantInstruction$IntrinsicConstantInstruction outerClass java/lang/classfile/instruction/ConstantInstruction innerClassName IntrinsicConstantInstruction flags 609
+innerclass innerClass jdk/internal/classfile/impl/AbstractInstruction$UnboundIntrinsicConstantInstruction outerClass jdk/internal/classfile/impl/AbstractInstruction innerClassName UnboundIntrinsicConstantInstruction flags 19
+
+class name java/lang/classfile/instruction/ConstantInstruction$LoadConstantInstruction
+header extends java/lang/Object implements java/lang/classfile/instruction/ConstantInstruction nestHost java/lang/classfile/instruction/ConstantInstruction sealed true permittedSubclasses jdk/internal/classfile/impl/AbstractInstruction$BoundLoadConstantInstruction,jdk/internal/classfile/impl/AbstractInstruction$UnboundLoadConstantInstruction flags 601
+innerclass innerClass java/lang/classfile/instruction/ConstantInstruction$LoadConstantInstruction outerClass java/lang/classfile/instruction/ConstantInstruction innerClassName LoadConstantInstruction flags 609
+innerclass innerClass jdk/internal/classfile/impl/AbstractInstruction$BoundLoadConstantInstruction outerClass jdk/internal/classfile/impl/AbstractInstruction innerClassName BoundLoadConstantInstruction flags 19
+innerclass innerClass jdk/internal/classfile/impl/AbstractInstruction$UnboundLoadConstantInstruction outerClass jdk/internal/classfile/impl/AbstractInstruction innerClassName UnboundLoadConstantInstruction flags 19
+
+class name java/lang/classfile/instruction/ConvertInstruction
+header extends java/lang/Object implements java/lang/classfile/Instruction sealed true permittedSubclasses jdk/internal/classfile/impl/AbstractInstruction$UnboundConvertInstruction flags 601
+innerclass innerClass java/lang/classfile/Opcode$Kind outerClass java/lang/classfile/Opcode innerClassName Kind flags 4019
+innerclass innerClass jdk/internal/classfile/impl/AbstractInstruction$UnboundConvertInstruction outerClass jdk/internal/classfile/impl/AbstractInstruction innerClassName UnboundConvertInstruction flags 19
+
+class name java/lang/classfile/instruction/DiscontinuedInstruction
+header extends java/lang/Object implements java/lang/classfile/Instruction nestMembers java/lang/classfile/instruction/DiscontinuedInstruction$RetInstruction,java/lang/classfile/instruction/DiscontinuedInstruction$JsrInstruction sealed true permittedSubclasses java/lang/classfile/instruction/DiscontinuedInstruction$JsrInstruction,java/lang/classfile/instruction/DiscontinuedInstruction$RetInstruction flags 601
+innerclass innerClass java/lang/classfile/instruction/DiscontinuedInstruction$RetInstruction outerClass java/lang/classfile/instruction/DiscontinuedInstruction innerClassName RetInstruction flags 609
+innerclass innerClass java/lang/classfile/instruction/DiscontinuedInstruction$JsrInstruction outerClass java/lang/classfile/instruction/DiscontinuedInstruction innerClassName JsrInstruction flags 609
+
+class name java/lang/classfile/instruction/DiscontinuedInstruction$JsrInstruction
+header extends java/lang/Object implements java/lang/classfile/instruction/DiscontinuedInstruction nestHost java/lang/classfile/instruction/DiscontinuedInstruction sealed true permittedSubclasses jdk/internal/classfile/impl/AbstractInstruction$BoundJsrInstruction,jdk/internal/classfile/impl/AbstractInstruction$UnboundJsrInstruction flags 601
+innerclass innerClass java/lang/classfile/Opcode$Kind outerClass java/lang/classfile/Opcode innerClassName Kind flags 4019
+innerclass innerClass jdk/internal/classfile/impl/AbstractInstruction$UnboundJsrInstruction outerClass jdk/internal/classfile/impl/AbstractInstruction innerClassName UnboundJsrInstruction flags 19
+innerclass innerClass java/lang/classfile/instruction/DiscontinuedInstruction$JsrInstruction outerClass java/lang/classfile/instruction/DiscontinuedInstruction innerClassName JsrInstruction flags 609
+innerclass innerClass jdk/internal/classfile/impl/AbstractInstruction$BoundJsrInstruction outerClass jdk/internal/classfile/impl/AbstractInstruction innerClassName BoundJsrInstruction flags 19
+
+class name java/lang/classfile/instruction/DiscontinuedInstruction$RetInstruction
+header extends java/lang/Object implements java/lang/classfile/instruction/DiscontinuedInstruction nestHost java/lang/classfile/instruction/DiscontinuedInstruction sealed true permittedSubclasses jdk/internal/classfile/impl/AbstractInstruction$BoundRetInstruction,jdk/internal/classfile/impl/AbstractInstruction$UnboundRetInstruction flags 601
+innerclass innerClass jdk/internal/classfile/impl/AbstractInstruction$UnboundRetInstruction outerClass jdk/internal/classfile/impl/AbstractInstruction innerClassName UnboundRetInstruction flags 19
+innerclass innerClass java/lang/classfile/instruction/DiscontinuedInstruction$RetInstruction outerClass java/lang/classfile/instruction/DiscontinuedInstruction innerClassName RetInstruction flags 609
+innerclass innerClass jdk/internal/classfile/impl/AbstractInstruction$BoundRetInstruction outerClass jdk/internal/classfile/impl/AbstractInstruction innerClassName BoundRetInstruction flags 19
+
+class name java/lang/classfile/instruction/ExceptionCatch
+header extends java/lang/Object implements java/lang/classfile/PseudoInstruction sealed true permittedSubclasses jdk/internal/classfile/impl/AbstractPseudoInstruction$ExceptionCatchImpl flags 601
+innerclass innerClass jdk/internal/classfile/impl/AbstractPseudoInstruction$ExceptionCatchImpl outerClass jdk/internal/classfile/impl/AbstractPseudoInstruction innerClassName ExceptionCatchImpl flags 19
+
+class name java/lang/classfile/instruction/FieldInstruction
+header extends java/lang/Object implements java/lang/classfile/Instruction sealed true permittedSubclasses jdk/internal/classfile/impl/AbstractInstruction$BoundFieldInstruction,jdk/internal/classfile/impl/AbstractInstruction$UnboundFieldInstruction flags 601
+innerclass innerClass java/lang/classfile/Opcode$Kind outerClass java/lang/classfile/Opcode innerClassName Kind flags 4019
+innerclass innerClass jdk/internal/classfile/impl/AbstractInstruction$UnboundFieldInstruction outerClass jdk/internal/classfile/impl/AbstractInstruction innerClassName UnboundFieldInstruction flags 19
+innerclass innerClass jdk/internal/classfile/impl/AbstractInstruction$BoundFieldInstruction outerClass jdk/internal/classfile/impl/AbstractInstruction innerClassName BoundFieldInstruction flags 19
+
+class name java/lang/classfile/instruction/IncrementInstruction
+header extends java/lang/Object implements java/lang/classfile/Instruction sealed true permittedSubclasses jdk/internal/classfile/impl/AbstractInstruction$BoundIncrementInstruction,jdk/internal/classfile/impl/AbstractInstruction$UnboundIncrementInstruction flags 601
+innerclass innerClass jdk/internal/classfile/impl/AbstractInstruction$UnboundIncrementInstruction outerClass jdk/internal/classfile/impl/AbstractInstruction innerClassName UnboundIncrementInstruction flags 19
+innerclass innerClass jdk/internal/classfile/impl/AbstractInstruction$BoundIncrementInstruction outerClass jdk/internal/classfile/impl/AbstractInstruction innerClassName BoundIncrementInstruction flags 19
+
+class name java/lang/classfile/instruction/InvokeDynamicInstruction
+header extends java/lang/Object implements java/lang/classfile/Instruction sealed true permittedSubclasses jdk/internal/classfile/impl/AbstractInstruction$BoundInvokeDynamicInstruction,jdk/internal/classfile/impl/AbstractInstruction$UnboundInvokeDynamicInstruction flags 601
+innerclass innerClass jdk/internal/classfile/impl/AbstractInstruction$UnboundInvokeDynamicInstruction outerClass jdk/internal/classfile/impl/AbstractInstruction innerClassName UnboundInvokeDynamicInstruction flags 19
+innerclass innerClass jdk/internal/classfile/impl/AbstractInstruction$BoundInvokeDynamicInstruction outerClass jdk/internal/classfile/impl/AbstractInstruction innerClassName BoundInvokeDynamicInstruction flags 19
+
+class name java/lang/classfile/instruction/InvokeInstruction
+header extends java/lang/Object implements java/lang/classfile/Instruction sealed true permittedSubclasses jdk/internal/classfile/impl/AbstractInstruction$BoundInvokeInterfaceInstruction,jdk/internal/classfile/impl/AbstractInstruction$BoundInvokeInstruction,jdk/internal/classfile/impl/AbstractInstruction$UnboundInvokeInstruction flags 601
+innerclass innerClass java/lang/classfile/Opcode$Kind outerClass java/lang/classfile/Opcode innerClassName Kind flags 4019
+innerclass innerClass jdk/internal/classfile/impl/AbstractInstruction$UnboundInvokeInstruction outerClass jdk/internal/classfile/impl/AbstractInstruction innerClassName UnboundInvokeInstruction flags 19
+innerclass innerClass jdk/internal/classfile/impl/AbstractInstruction$BoundInvokeInterfaceInstruction outerClass jdk/internal/classfile/impl/AbstractInstruction innerClassName BoundInvokeInterfaceInstruction flags 19
+innerclass innerClass jdk/internal/classfile/impl/AbstractInstruction$BoundInvokeInstruction outerClass jdk/internal/classfile/impl/AbstractInstruction innerClassName BoundInvokeInstruction flags 19
+
+class name java/lang/classfile/instruction/LabelTarget
+header extends java/lang/Object implements java/lang/classfile/PseudoInstruction sealed true permittedSubclasses jdk/internal/classfile/impl/LabelImpl flags 601
+
+class name java/lang/classfile/instruction/LineNumber
+header extends java/lang/Object implements java/lang/classfile/PseudoInstruction sealed true permittedSubclasses jdk/internal/classfile/impl/LineNumberImpl flags 601
+
+class name java/lang/classfile/instruction/LoadInstruction
+header extends java/lang/Object implements java/lang/classfile/Instruction sealed true permittedSubclasses jdk/internal/classfile/impl/AbstractInstruction$BoundLoadInstruction,jdk/internal/classfile/impl/AbstractInstruction$UnboundLoadInstruction flags 601
+innerclass innerClass jdk/internal/classfile/impl/AbstractInstruction$UnboundLoadInstruction outerClass jdk/internal/classfile/impl/AbstractInstruction innerClassName UnboundLoadInstruction flags 19
+innerclass innerClass java/lang/classfile/Opcode$Kind outerClass java/lang/classfile/Opcode innerClassName Kind flags 4019
+innerclass innerClass jdk/internal/classfile/impl/AbstractInstruction$BoundLoadInstruction outerClass jdk/internal/classfile/impl/AbstractInstruction innerClassName BoundLoadInstruction flags 19
+
+class name java/lang/classfile/instruction/LocalVariable
+header extends java/lang/Object implements java/lang/classfile/PseudoInstruction sealed true permittedSubclasses jdk/internal/classfile/impl/AbstractPseudoInstruction$UnboundLocalVariable,jdk/internal/classfile/impl/BoundLocalVariable flags 601
+innerclass innerClass jdk/internal/classfile/impl/AbstractPseudoInstruction$UnboundLocalVariable outerClass jdk/internal/classfile/impl/AbstractPseudoInstruction innerClassName UnboundLocalVariable flags 19
+-method name writeTo descriptor (Ljava/lang/classfile/BufWriter;)Z
+
+class name java/lang/classfile/instruction/LocalVariableType
+header extends java/lang/Object implements java/lang/classfile/PseudoInstruction sealed true permittedSubclasses jdk/internal/classfile/impl/AbstractPseudoInstruction$UnboundLocalVariableType,jdk/internal/classfile/impl/BoundLocalVariableType flags 601
+innerclass innerClass jdk/internal/classfile/impl/AbstractPseudoInstruction$UnboundLocalVariableType outerClass jdk/internal/classfile/impl/AbstractPseudoInstruction innerClassName UnboundLocalVariableType flags 19
+-method name writeTo descriptor (Ljava/lang/classfile/BufWriter;)Z
+
+class name java/lang/classfile/instruction/LookupSwitchInstruction
+header extends java/lang/Object implements java/lang/classfile/Instruction sealed true permittedSubclasses jdk/internal/classfile/impl/AbstractInstruction$BoundLookupSwitchInstruction,jdk/internal/classfile/impl/AbstractInstruction$UnboundLookupSwitchInstruction flags 601
+innerclass innerClass jdk/internal/classfile/impl/AbstractInstruction$UnboundLookupSwitchInstruction outerClass jdk/internal/classfile/impl/AbstractInstruction innerClassName UnboundLookupSwitchInstruction flags 19
+innerclass innerClass jdk/internal/classfile/impl/AbstractInstruction$BoundLookupSwitchInstruction outerClass jdk/internal/classfile/impl/AbstractInstruction innerClassName BoundLookupSwitchInstruction flags 19
+
+class name java/lang/classfile/instruction/MonitorInstruction
+header extends java/lang/Object implements java/lang/classfile/Instruction sealed true permittedSubclasses jdk/internal/classfile/impl/AbstractInstruction$UnboundMonitorInstruction flags 601
+innerclass innerClass java/lang/classfile/Opcode$Kind outerClass java/lang/classfile/Opcode innerClassName Kind flags 4019
+innerclass innerClass jdk/internal/classfile/impl/AbstractInstruction$UnboundMonitorInstruction outerClass jdk/internal/classfile/impl/AbstractInstruction innerClassName UnboundMonitorInstruction flags 19
+
+class name java/lang/classfile/instruction/NewMultiArrayInstruction
+header extends java/lang/Object implements java/lang/classfile/Instruction sealed true permittedSubclasses jdk/internal/classfile/impl/AbstractInstruction$BoundNewMultidimensionalArrayInstruction,jdk/internal/classfile/impl/AbstractInstruction$UnboundNewMultidimensionalArrayInstruction flags 601
+innerclass innerClass jdk/internal/classfile/impl/AbstractInstruction$UnboundNewMultidimensionalArrayInstruction outerClass jdk/internal/classfile/impl/AbstractInstruction innerClassName UnboundNewMultidimensionalArrayInstruction flags 19
+innerclass innerClass jdk/internal/classfile/impl/AbstractInstruction$BoundNewMultidimensionalArrayInstruction outerClass jdk/internal/classfile/impl/AbstractInstruction innerClassName BoundNewMultidimensionalArrayInstruction flags 19
+
+class name java/lang/classfile/instruction/NewObjectInstruction
+header extends java/lang/Object implements java/lang/classfile/Instruction sealed true permittedSubclasses jdk/internal/classfile/impl/AbstractInstruction$BoundNewObjectInstruction,jdk/internal/classfile/impl/AbstractInstruction$UnboundNewObjectInstruction flags 601
+innerclass innerClass jdk/internal/classfile/impl/AbstractInstruction$UnboundNewObjectInstruction outerClass jdk/internal/classfile/impl/AbstractInstruction innerClassName UnboundNewObjectInstruction flags 19
+innerclass innerClass jdk/internal/classfile/impl/AbstractInstruction$BoundNewObjectInstruction outerClass jdk/internal/classfile/impl/AbstractInstruction innerClassName BoundNewObjectInstruction flags 19
+
+class name java/lang/classfile/instruction/NewPrimitiveArrayInstruction
+header extends java/lang/Object implements java/lang/classfile/Instruction sealed true permittedSubclasses jdk/internal/classfile/impl/AbstractInstruction$BoundNewPrimitiveArrayInstruction,jdk/internal/classfile/impl/AbstractInstruction$UnboundNewPrimitiveArrayInstruction flags 601
+innerclass innerClass jdk/internal/classfile/impl/AbstractInstruction$UnboundNewPrimitiveArrayInstruction outerClass jdk/internal/classfile/impl/AbstractInstruction innerClassName UnboundNewPrimitiveArrayInstruction flags 19
+innerclass innerClass jdk/internal/classfile/impl/AbstractInstruction$BoundNewPrimitiveArrayInstruction outerClass jdk/internal/classfile/impl/AbstractInstruction innerClassName BoundNewPrimitiveArrayInstruction flags 19
+
+class name java/lang/classfile/instruction/NewReferenceArrayInstruction
+header extends java/lang/Object implements java/lang/classfile/Instruction sealed true permittedSubclasses jdk/internal/classfile/impl/AbstractInstruction$BoundNewReferenceArrayInstruction,jdk/internal/classfile/impl/AbstractInstruction$UnboundNewReferenceArrayInstruction flags 601
+innerclass innerClass jdk/internal/classfile/impl/AbstractInstruction$UnboundNewReferenceArrayInstruction outerClass jdk/internal/classfile/impl/AbstractInstruction innerClassName UnboundNewReferenceArrayInstruction flags 19
+innerclass innerClass jdk/internal/classfile/impl/AbstractInstruction$BoundNewReferenceArrayInstruction outerClass jdk/internal/classfile/impl/AbstractInstruction innerClassName BoundNewReferenceArrayInstruction flags 19
+
+class name java/lang/classfile/instruction/NopInstruction
+header extends java/lang/Object implements java/lang/classfile/Instruction sealed true permittedSubclasses jdk/internal/classfile/impl/AbstractInstruction$UnboundNopInstruction flags 601
+innerclass innerClass jdk/internal/classfile/impl/AbstractInstruction$UnboundNopInstruction outerClass jdk/internal/classfile/impl/AbstractInstruction innerClassName UnboundNopInstruction flags 19
+
+class name java/lang/classfile/instruction/OperatorInstruction
+header extends java/lang/Object implements java/lang/classfile/Instruction sealed true permittedSubclasses jdk/internal/classfile/impl/AbstractInstruction$UnboundOperatorInstruction flags 601
+innerclass innerClass java/lang/classfile/Opcode$Kind outerClass java/lang/classfile/Opcode innerClassName Kind flags 4019
+innerclass innerClass jdk/internal/classfile/impl/AbstractInstruction$UnboundOperatorInstruction outerClass jdk/internal/classfile/impl/AbstractInstruction innerClassName UnboundOperatorInstruction flags 19
+
+class name java/lang/classfile/instruction/ReturnInstruction
+header extends java/lang/Object implements java/lang/classfile/Instruction sealed true permittedSubclasses jdk/internal/classfile/impl/AbstractInstruction$UnboundReturnInstruction flags 601
+innerclass innerClass java/lang/classfile/Opcode$Kind outerClass java/lang/classfile/Opcode innerClassName Kind flags 4019
+innerclass innerClass jdk/internal/classfile/impl/AbstractInstruction$UnboundReturnInstruction outerClass jdk/internal/classfile/impl/AbstractInstruction innerClassName UnboundReturnInstruction flags 19
+
+class name java/lang/classfile/instruction/StackInstruction
+header extends java/lang/Object implements java/lang/classfile/Instruction sealed true permittedSubclasses jdk/internal/classfile/impl/AbstractInstruction$UnboundStackInstruction flags 601
+innerclass innerClass java/lang/classfile/Opcode$Kind outerClass java/lang/classfile/Opcode innerClassName Kind flags 4019
+innerclass innerClass jdk/internal/classfile/impl/AbstractInstruction$UnboundStackInstruction outerClass jdk/internal/classfile/impl/AbstractInstruction innerClassName UnboundStackInstruction flags 19
+
+class name java/lang/classfile/instruction/StoreInstruction
+header extends java/lang/Object implements java/lang/classfile/Instruction sealed true permittedSubclasses jdk/internal/classfile/impl/AbstractInstruction$BoundStoreInstruction,jdk/internal/classfile/impl/AbstractInstruction$UnboundStoreInstruction flags 601
+innerclass innerClass jdk/internal/classfile/impl/AbstractInstruction$UnboundStoreInstruction outerClass jdk/internal/classfile/impl/AbstractInstruction innerClassName UnboundStoreInstruction flags 19
+innerclass innerClass java/lang/classfile/Opcode$Kind outerClass java/lang/classfile/Opcode innerClassName Kind flags 4019
+innerclass innerClass jdk/internal/classfile/impl/AbstractInstruction$BoundStoreInstruction outerClass jdk/internal/classfile/impl/AbstractInstruction innerClassName BoundStoreInstruction flags 19
+
+class name java/lang/classfile/instruction/SwitchCase
+header extends java/lang/Object sealed true permittedSubclasses jdk/internal/classfile/impl/AbstractInstruction$SwitchCaseImpl flags 601
+innerclass innerClass jdk/internal/classfile/impl/AbstractInstruction$SwitchCaseImpl outerClass jdk/internal/classfile/impl/AbstractInstruction innerClassName SwitchCaseImpl flags 19
+
+class name java/lang/classfile/instruction/TableSwitchInstruction
+header extends java/lang/Object implements java/lang/classfile/Instruction sealed true permittedSubclasses jdk/internal/classfile/impl/AbstractInstruction$BoundTableSwitchInstruction,jdk/internal/classfile/impl/AbstractInstruction$UnboundTableSwitchInstruction flags 601
+innerclass innerClass jdk/internal/classfile/impl/AbstractInstruction$UnboundTableSwitchInstruction outerClass jdk/internal/classfile/impl/AbstractInstruction innerClassName UnboundTableSwitchInstruction flags 19
+innerclass innerClass jdk/internal/classfile/impl/AbstractInstruction$BoundTableSwitchInstruction outerClass jdk/internal/classfile/impl/AbstractInstruction innerClassName BoundTableSwitchInstruction flags 19
+
+class name java/lang/classfile/instruction/ThrowInstruction
+header extends java/lang/Object implements java/lang/classfile/Instruction sealed true permittedSubclasses jdk/internal/classfile/impl/AbstractInstruction$UnboundThrowInstruction flags 601
+innerclass innerClass jdk/internal/classfile/impl/AbstractInstruction$UnboundThrowInstruction outerClass jdk/internal/classfile/impl/AbstractInstruction innerClassName UnboundThrowInstruction flags 19
+
+class name java/lang/classfile/instruction/TypeCheckInstruction
+header extends java/lang/Object implements java/lang/classfile/Instruction sealed true permittedSubclasses jdk/internal/classfile/impl/AbstractInstruction$BoundTypeCheckInstruction,jdk/internal/classfile/impl/AbstractInstruction$UnboundTypeCheckInstruction flags 601
+innerclass innerClass java/lang/classfile/Opcode$Kind outerClass java/lang/classfile/Opcode innerClassName Kind flags 4019
+innerclass innerClass jdk/internal/classfile/impl/AbstractInstruction$UnboundTypeCheckInstruction outerClass jdk/internal/classfile/impl/AbstractInstruction innerClassName UnboundTypeCheckInstruction flags 19
+innerclass innerClass jdk/internal/classfile/impl/AbstractInstruction$BoundTypeCheckInstruction outerClass jdk/internal/classfile/impl/AbstractInstruction innerClassName BoundTypeCheckInstruction flags 19
+
+class name java/lang/constant/ClassDesc
+header extends java/lang/Object implements java/lang/constant/ConstantDesc,java/lang/invoke/TypeDescriptor$OfField sealed true permittedSubclasses jdk/internal/constant/PrimitiveClassDescImpl,jdk/internal/constant/ClassOrInterfaceDescImpl,jdk/internal/constant/ArrayClassDescImpl flags 601 signature Ljava/lang/Object;Ljava/lang/constant/ConstantDesc;Ljava/lang/invoke/TypeDescriptor$OfField;
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+innerclass innerClass java/lang/invoke/TypeDescriptor$OfField outerClass java/lang/invoke/TypeDescriptor innerClassName OfField flags 609
+-method name arrayType descriptor ()Ljava/lang/constant/ClassDesc;
+-method name arrayType descriptor (I)Ljava/lang/constant/ClassDesc;
+-method name displayName descriptor ()Ljava/lang/String;
+method name arrayType descriptor ()Ljava/lang/constant/ClassDesc; flags 401
+method name arrayType descriptor (I)Ljava/lang/constant/ClassDesc; flags 401
+method name displayName descriptor ()Ljava/lang/String; flags 401
+
+class name java/lang/foreign/MemorySegment
+header extends java/lang/Object nestMembers java/lang/foreign/MemorySegment$Scope sealed true permittedSubclasses jdk/internal/foreign/AbstractMemorySegmentImpl flags 601
+innerclass innerClass jdk/internal/foreign/HeapMemorySegmentImpl$OfByte outerClass jdk/internal/foreign/HeapMemorySegmentImpl innerClassName OfByte flags 19
+innerclass innerClass jdk/internal/foreign/HeapMemorySegmentImpl$OfChar outerClass jdk/internal/foreign/HeapMemorySegmentImpl innerClassName OfChar flags 19
+innerclass innerClass jdk/internal/foreign/HeapMemorySegmentImpl$OfShort outerClass jdk/internal/foreign/HeapMemorySegmentImpl innerClassName OfShort flags 19
+innerclass innerClass jdk/internal/foreign/HeapMemorySegmentImpl$OfInt outerClass jdk/internal/foreign/HeapMemorySegmentImpl innerClassName OfInt flags 19
+innerclass innerClass jdk/internal/foreign/HeapMemorySegmentImpl$OfFloat outerClass jdk/internal/foreign/HeapMemorySegmentImpl innerClassName OfFloat flags 19
+innerclass innerClass jdk/internal/foreign/HeapMemorySegmentImpl$OfLong outerClass jdk/internal/foreign/HeapMemorySegmentImpl innerClassName OfLong flags 19
+innerclass innerClass jdk/internal/foreign/HeapMemorySegmentImpl$OfDouble outerClass jdk/internal/foreign/HeapMemorySegmentImpl innerClassName OfDouble flags 19
+innerclass innerClass java/lang/foreign/MemorySegment$Scope outerClass java/lang/foreign/MemorySegment innerClassName Scope flags 609
+innerclass innerClass java/lang/foreign/ValueLayout$OfByte outerClass java/lang/foreign/ValueLayout innerClassName OfByte flags 609
+innerclass innerClass java/lang/foreign/ValueLayout$OfShort outerClass java/lang/foreign/ValueLayout innerClassName OfShort flags 609
+innerclass innerClass java/lang/foreign/ValueLayout$OfChar outerClass java/lang/foreign/ValueLayout innerClassName OfChar flags 609
+innerclass innerClass java/lang/foreign/ValueLayout$OfInt outerClass java/lang/foreign/ValueLayout innerClassName OfInt flags 609
+innerclass innerClass java/lang/foreign/ValueLayout$OfFloat outerClass java/lang/foreign/ValueLayout innerClassName OfFloat flags 609
+innerclass innerClass java/lang/foreign/ValueLayout$OfLong outerClass java/lang/foreign/ValueLayout innerClassName OfLong flags 609
+innerclass innerClass java/lang/foreign/ValueLayout$OfDouble outerClass java/lang/foreign/ValueLayout innerClassName OfDouble flags 609
+innerclass innerClass java/lang/foreign/ValueLayout$OfBoolean outerClass java/lang/foreign/ValueLayout innerClassName OfBoolean flags 609
+
+class name java/lang/invoke/MethodHandle
+-method name asType descriptor (Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodHandle;
+method name asType descriptor (Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodHandle; flags 11 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline;
+
+class name java/lang/invoke/MethodHandleProxies
+-method name asInterfaceInstance descriptor (Ljava/lang/Class;Ljava/lang/invoke/MethodHandle;)Ljava/lang/Object;
+method name asInterfaceInstance descriptor (Ljava/lang/Class;Ljava/lang/invoke/MethodHandle;)Ljava/lang/Object; flags 9 signature (Ljava/lang/Class;Ljava/lang/invoke/MethodHandle;)TT;
+
+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/invoke/MethodType;>;Ljava/io/Serializable;
+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
+
+class name java/lang/module/ModuleFinder
+header extends java/lang/Object flags 601
+
+class name java/lang/reflect/ClassFileFormatVersion
+field name RELEASE_24 descriptor Ljava/lang/reflect/ClassFileFormatVersion; flags 4019
+
+class name java/lang/reflect/Proxy
+-method name getProxyClass descriptor (Ljava/lang/ClassLoader;[Ljava/lang/Class;)Ljava/lang/Class;
+-method name newProxyInstance descriptor (Ljava/lang/ClassLoader;[Ljava/lang/Class;Ljava/lang/reflect/InvocationHandler;)Ljava/lang/Object;
+-method name getInvocationHandler descriptor (Ljava/lang/Object;)Ljava/lang/reflect/InvocationHandler;
+method name getProxyClass descriptor (Ljava/lang/ClassLoader;[Ljava/lang/Class;)Ljava/lang/Class; thrownTypes java/lang/IllegalArgumentException flags 89 deprecated true signature (Ljava/lang/ClassLoader;[Ljava/lang/Class<*>;)Ljava/lang/Class<*>; runtimeAnnotations @Ljava/lang/Deprecated;
+method name newProxyInstance descriptor (Ljava/lang/ClassLoader;[Ljava/lang/Class;Ljava/lang/reflect/InvocationHandler;)Ljava/lang/Object; flags 9 signature (Ljava/lang/ClassLoader;[Ljava/lang/Class<*>;Ljava/lang/reflect/InvocationHandler;)Ljava/lang/Object;
+method name getInvocationHandler descriptor (Ljava/lang/Object;)Ljava/lang/reflect/InvocationHandler; thrownTypes java/lang/IllegalArgumentException flags 9
+
+class name java/net/URL
+header extends java/lang/Object implements java/io/Serializable flags 31
+innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409
+
+class name java/nio/ByteBufferAsCharBufferB
+header extends java/nio/CharBuffer sealed true permittedSubclasses java/nio/ByteBufferAsCharBufferRB flags 20
+innerclass innerClass jdk/internal/foreign/HeapMemorySegmentImpl$OfByte outerClass jdk/internal/foreign/HeapMemorySegmentImpl innerClassName OfByte flags 19
+
+class name java/nio/ByteBufferAsCharBufferL
+header extends java/nio/CharBuffer sealed true permittedSubclasses java/nio/ByteBufferAsCharBufferRL flags 20
+innerclass innerClass jdk/internal/foreign/HeapMemorySegmentImpl$OfByte outerClass jdk/internal/foreign/HeapMemorySegmentImpl innerClassName OfByte flags 19
+
+class name java/nio/ByteBufferAsCharBufferRB
+header extends java/nio/ByteBufferAsCharBufferB flags 30
+innerclass innerClass jdk/internal/foreign/HeapMemorySegmentImpl$OfByte outerClass jdk/internal/foreign/HeapMemorySegmentImpl innerClassName OfByte flags 19
+
+class name java/nio/ByteBufferAsCharBufferRL
+header extends java/nio/ByteBufferAsCharBufferL flags 30
+innerclass innerClass jdk/internal/foreign/HeapMemorySegmentImpl$OfByte outerClass jdk/internal/foreign/HeapMemorySegmentImpl innerClassName OfByte flags 19
+
+class name java/nio/ByteBufferAsDoubleBufferB
+header extends java/nio/DoubleBuffer sealed true permittedSubclasses java/nio/ByteBufferAsDoubleBufferRB flags 20
+innerclass innerClass jdk/internal/foreign/HeapMemorySegmentImpl$OfByte outerClass jdk/internal/foreign/HeapMemorySegmentImpl innerClassName OfByte flags 19
+
+class name java/nio/ByteBufferAsDoubleBufferL
+header extends java/nio/DoubleBuffer sealed true permittedSubclasses java/nio/ByteBufferAsDoubleBufferRL flags 20
+innerclass innerClass jdk/internal/foreign/HeapMemorySegmentImpl$OfByte outerClass jdk/internal/foreign/HeapMemorySegmentImpl innerClassName OfByte flags 19
+
+class name java/nio/ByteBufferAsDoubleBufferRB
+header extends java/nio/ByteBufferAsDoubleBufferB flags 30
+innerclass innerClass jdk/internal/foreign/HeapMemorySegmentImpl$OfByte outerClass jdk/internal/foreign/HeapMemorySegmentImpl innerClassName OfByte flags 19
+
+class name java/nio/ByteBufferAsDoubleBufferRL
+header extends java/nio/ByteBufferAsDoubleBufferL flags 30
+innerclass innerClass jdk/internal/foreign/HeapMemorySegmentImpl$OfByte outerClass jdk/internal/foreign/HeapMemorySegmentImpl innerClassName OfByte flags 19
+
+class name java/nio/ByteBufferAsFloatBufferB
+header extends java/nio/FloatBuffer sealed true permittedSubclasses java/nio/ByteBufferAsFloatBufferRB flags 20
+innerclass innerClass jdk/internal/foreign/HeapMemorySegmentImpl$OfByte outerClass jdk/internal/foreign/HeapMemorySegmentImpl innerClassName OfByte flags 19
+
+class name java/nio/ByteBufferAsFloatBufferL
+header extends java/nio/FloatBuffer sealed true permittedSubclasses java/nio/ByteBufferAsFloatBufferRL flags 20
+innerclass innerClass jdk/internal/foreign/HeapMemorySegmentImpl$OfByte outerClass jdk/internal/foreign/HeapMemorySegmentImpl innerClassName OfByte flags 19
+
+class name java/nio/ByteBufferAsFloatBufferRB
+header extends java/nio/ByteBufferAsFloatBufferB flags 30
+innerclass innerClass jdk/internal/foreign/HeapMemorySegmentImpl$OfByte outerClass jdk/internal/foreign/HeapMemorySegmentImpl innerClassName OfByte flags 19
+
+class name java/nio/ByteBufferAsFloatBufferRL
+header extends java/nio/ByteBufferAsFloatBufferL flags 30
+innerclass innerClass jdk/internal/foreign/HeapMemorySegmentImpl$OfByte outerClass jdk/internal/foreign/HeapMemorySegmentImpl innerClassName OfByte flags 19
+
+class name java/nio/ByteBufferAsIntBufferB
+header extends java/nio/IntBuffer sealed true permittedSubclasses java/nio/ByteBufferAsIntBufferRB flags 20
+innerclass innerClass jdk/internal/foreign/HeapMemorySegmentImpl$OfByte outerClass jdk/internal/foreign/HeapMemorySegmentImpl innerClassName OfByte flags 19
+
+class name java/nio/ByteBufferAsIntBufferL
+header extends java/nio/IntBuffer sealed true permittedSubclasses java/nio/ByteBufferAsIntBufferRL flags 20
+innerclass innerClass jdk/internal/foreign/HeapMemorySegmentImpl$OfByte outerClass jdk/internal/foreign/HeapMemorySegmentImpl innerClassName OfByte flags 19
+
+class name java/nio/ByteBufferAsIntBufferRB
+header extends java/nio/ByteBufferAsIntBufferB flags 30
+innerclass innerClass jdk/internal/foreign/HeapMemorySegmentImpl$OfByte outerClass jdk/internal/foreign/HeapMemorySegmentImpl innerClassName OfByte flags 19
+
+class name java/nio/ByteBufferAsIntBufferRL
+header extends java/nio/ByteBufferAsIntBufferL flags 30
+innerclass innerClass jdk/internal/foreign/HeapMemorySegmentImpl$OfByte outerClass jdk/internal/foreign/HeapMemorySegmentImpl innerClassName OfByte flags 19
+
+class name java/nio/ByteBufferAsLongBufferB
+header extends java/nio/LongBuffer sealed true permittedSubclasses java/nio/ByteBufferAsLongBufferRB flags 20
+innerclass innerClass jdk/internal/foreign/HeapMemorySegmentImpl$OfByte outerClass jdk/internal/foreign/HeapMemorySegmentImpl innerClassName OfByte flags 19
+
+class name java/nio/ByteBufferAsLongBufferL
+header extends java/nio/LongBuffer sealed true permittedSubclasses java/nio/ByteBufferAsLongBufferRL flags 20
+innerclass innerClass jdk/internal/foreign/HeapMemorySegmentImpl$OfByte outerClass jdk/internal/foreign/HeapMemorySegmentImpl innerClassName OfByte flags 19
+
+class name java/nio/ByteBufferAsLongBufferRB
+header extends java/nio/ByteBufferAsLongBufferB flags 30
+innerclass innerClass jdk/internal/foreign/HeapMemorySegmentImpl$OfByte outerClass jdk/internal/foreign/HeapMemorySegmentImpl innerClassName OfByte flags 19
+
+class name java/nio/ByteBufferAsLongBufferRL
+header extends java/nio/ByteBufferAsLongBufferL flags 30
+innerclass innerClass jdk/internal/foreign/HeapMemorySegmentImpl$OfByte outerClass jdk/internal/foreign/HeapMemorySegmentImpl innerClassName OfByte flags 19
+
+class name java/nio/ByteBufferAsShortBufferB
+header extends java/nio/ShortBuffer sealed true permittedSubclasses java/nio/ByteBufferAsShortBufferRB flags 20
+innerclass innerClass jdk/internal/foreign/HeapMemorySegmentImpl$OfByte outerClass jdk/internal/foreign/HeapMemorySegmentImpl innerClassName OfByte flags 19
+
+class name java/nio/ByteBufferAsShortBufferL
+header extends java/nio/ShortBuffer sealed true permittedSubclasses java/nio/ByteBufferAsShortBufferRL flags 20
+innerclass innerClass jdk/internal/foreign/HeapMemorySegmentImpl$OfByte outerClass jdk/internal/foreign/HeapMemorySegmentImpl innerClassName OfByte flags 19
+
+class name java/nio/ByteBufferAsShortBufferRB
+header extends java/nio/ByteBufferAsShortBufferB flags 30
+innerclass innerClass jdk/internal/foreign/HeapMemorySegmentImpl$OfByte outerClass jdk/internal/foreign/HeapMemorySegmentImpl innerClassName OfByte flags 19
+
+class name java/nio/ByteBufferAsShortBufferRL
+header extends java/nio/ByteBufferAsShortBufferL flags 30
+innerclass innerClass jdk/internal/foreign/HeapMemorySegmentImpl$OfByte outerClass jdk/internal/foreign/HeapMemorySegmentImpl innerClassName OfByte flags 19
+
+class name java/nio/CharBuffer
+header extends java/nio/Buffer implements java/lang/Comparable,java/lang/Appendable,java/lang/CharSequence,java/lang/Readable sealed true permittedSubclasses java/nio/StringCharBuffer,java/nio/HeapCharBuffer,java/nio/DirectCharBufferS,java/nio/DirectCharBufferU,java/nio/ByteBufferAsCharBufferB,java/nio/ByteBufferAsCharBufferL flags 421 signature Ljava/nio/Buffer;Ljava/lang/Comparable;Ljava/lang/Appendable;Ljava/lang/CharSequence;Ljava/lang/Readable;
+innerclass innerClass jdk/internal/foreign/HeapMemorySegmentImpl$OfChar outerClass jdk/internal/foreign/HeapMemorySegmentImpl innerClassName OfChar flags 19
+innerclass innerClass java/util/Spliterator$OfInt outerClass java/util/Spliterator innerClassName OfInt flags 609
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/nio/DirectByteBuffer
+-field name UNALIGNED descriptor Z
+
+class name java/nio/DirectCharBufferS
+-field name UNALIGNED descriptor Z
+
+class name java/nio/DirectCharBufferU
+-field name UNALIGNED descriptor Z
+
+class name java/nio/DirectDoubleBufferS
+-field name UNALIGNED descriptor Z
+
+class name java/nio/DirectDoubleBufferU
+-field name UNALIGNED descriptor Z
+
+class name java/nio/DirectFloatBufferS
+-field name UNALIGNED descriptor Z
+
+class name java/nio/DirectFloatBufferU
+-field name UNALIGNED descriptor Z
+
+class name java/nio/DirectIntBufferS
+-field name UNALIGNED descriptor Z
+
+class name java/nio/DirectIntBufferU
+-field name UNALIGNED descriptor Z
+
+class name java/nio/DirectLongBufferS
+-field name UNALIGNED descriptor Z
+
+class name java/nio/DirectLongBufferU
+-field name UNALIGNED descriptor Z
+
+class name java/nio/DirectShortBufferS
+-field name UNALIGNED descriptor Z
+
+class name java/nio/DirectShortBufferU
+-field name UNALIGNED descriptor Z
+
+class name java/nio/DoubleBuffer
+header extends java/nio/Buffer implements java/lang/Comparable sealed true permittedSubclasses java/nio/HeapDoubleBuffer,java/nio/DirectDoubleBufferS,java/nio/DirectDoubleBufferU,java/nio/ByteBufferAsDoubleBufferB,java/nio/ByteBufferAsDoubleBufferL flags 421 signature Ljava/nio/Buffer;Ljava/lang/Comparable;
+innerclass innerClass jdk/internal/foreign/HeapMemorySegmentImpl$OfDouble outerClass jdk/internal/foreign/HeapMemorySegmentImpl innerClassName OfDouble flags 19
+
+class name java/nio/FloatBuffer
+header extends java/nio/Buffer implements java/lang/Comparable sealed true permittedSubclasses java/nio/HeapFloatBuffer,java/nio/DirectFloatBufferS,java/nio/DirectFloatBufferU,java/nio/ByteBufferAsFloatBufferB,java/nio/ByteBufferAsFloatBufferL flags 421 signature Ljava/nio/Buffer;Ljava/lang/Comparable;
+innerclass innerClass jdk/internal/foreign/HeapMemorySegmentImpl$OfFloat outerClass jdk/internal/foreign/HeapMemorySegmentImpl innerClassName OfFloat flags 19
+
+class name java/nio/HeapByteBuffer
+header extends java/nio/ByteBuffer sealed true permittedSubclasses java/nio/HeapByteBufferR flags 20
+innerclass innerClass jdk/internal/foreign/HeapMemorySegmentImpl$OfByte outerClass jdk/internal/foreign/HeapMemorySegmentImpl innerClassName OfByte flags 19
+
+class name java/nio/HeapByteBufferR
+header extends java/nio/HeapByteBuffer flags 30
+innerclass innerClass jdk/internal/foreign/HeapMemorySegmentImpl$OfByte outerClass jdk/internal/foreign/HeapMemorySegmentImpl innerClassName OfByte flags 19
+
+class name java/nio/IntBuffer
+header extends java/nio/Buffer implements java/lang/Comparable sealed true permittedSubclasses java/nio/HeapIntBuffer,java/nio/DirectIntBufferS,java/nio/DirectIntBufferU,java/nio/ByteBufferAsIntBufferB,java/nio/ByteBufferAsIntBufferL flags 421 signature Ljava/nio/Buffer;Ljava/lang/Comparable;
+innerclass innerClass jdk/internal/foreign/HeapMemorySegmentImpl$OfInt outerClass jdk/internal/foreign/HeapMemorySegmentImpl innerClassName OfInt flags 19
+
+class name java/nio/LongBuffer
+header extends java/nio/Buffer implements java/lang/Comparable sealed true permittedSubclasses java/nio/HeapLongBuffer,java/nio/DirectLongBufferS,java/nio/DirectLongBufferU,java/nio/ByteBufferAsLongBufferB,java/nio/ByteBufferAsLongBufferL flags 421 signature Ljava/nio/Buffer;Ljava/lang/Comparable;
+innerclass innerClass jdk/internal/foreign/HeapMemorySegmentImpl$OfLong outerClass jdk/internal/foreign/HeapMemorySegmentImpl innerClassName OfLong flags 19
+
+class name java/nio/ShortBuffer
+header extends java/nio/Buffer implements java/lang/Comparable sealed true permittedSubclasses java/nio/HeapShortBuffer,java/nio/DirectShortBufferS,java/nio/DirectShortBufferU,java/nio/ByteBufferAsShortBufferB,java/nio/ByteBufferAsShortBufferL flags 421 signature Ljava/nio/Buffer;Ljava/lang/Comparable;
+innerclass innerClass jdk/internal/foreign/HeapMemorySegmentImpl$OfShort outerClass jdk/internal/foreign/HeapMemorySegmentImpl innerClassName OfShort flags 19
+
+class name java/security/AccessController
+-method name doPrivilegedWithCombiner descriptor (Ljava/security/PrivilegedAction;)Ljava/lang/Object;
+-method name doPrivileged descriptor (Ljava/security/PrivilegedAction;Ljava/security/AccessControlContext;[Ljava/security/Permission;)Ljava/lang/Object;
+-method name doPrivilegedWithCombiner descriptor (Ljava/security/PrivilegedAction;Ljava/security/AccessControlContext;[Ljava/security/Permission;)Ljava/lang/Object;
+-method name doPrivilegedWithCombiner descriptor (Ljava/security/PrivilegedExceptionAction;)Ljava/lang/Object;
+-method name doPrivileged descriptor (Ljava/security/PrivilegedExceptionAction;Ljava/security/AccessControlContext;[Ljava/security/Permission;)Ljava/lang/Object;
+-method name doPrivilegedWithCombiner descriptor (Ljava/security/PrivilegedExceptionAction;Ljava/security/AccessControlContext;[Ljava/security/Permission;)Ljava/lang/Object;
+-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 (Ljava/security/PrivilegedAction;)TT;
+method name doPrivilegedWithCombiner descriptor (Ljava/security/PrivilegedAction;)Ljava/lang/Object; flags 9 signature (Ljava/security/PrivilegedAction;)TT;
+method name doPrivileged descriptor (Ljava/security/PrivilegedAction;Ljava/security/AccessControlContext;)Ljava/lang/Object; flags 9 signature (Ljava/security/PrivilegedAction;Ljava/security/AccessControlContext;)TT;
+method name doPrivileged descriptor (Ljava/security/PrivilegedAction;Ljava/security/AccessControlContext;[Ljava/security/Permission;)Ljava/lang/Object; flags 89 signature (Ljava/security/PrivilegedAction;Ljava/security/AccessControlContext;[Ljava/security/Permission;)TT;
+method name doPrivilegedWithCombiner descriptor (Ljava/security/PrivilegedAction;Ljava/security/AccessControlContext;[Ljava/security/Permission;)Ljava/lang/Object; flags 89 signature (Ljava/security/PrivilegedAction;Ljava/security/AccessControlContext;[Ljava/security/Permission;)TT;
+method name doPrivileged descriptor (Ljava/security/PrivilegedExceptionAction;)Ljava/lang/Object; thrownTypes java/security/PrivilegedActionException flags 9 signature (Ljava/security/PrivilegedExceptionAction;)TT;
+method name doPrivilegedWithCombiner descriptor (Ljava/security/PrivilegedExceptionAction;)Ljava/lang/Object; thrownTypes java/security/PrivilegedActionException flags 9 signature (Ljava/security/PrivilegedExceptionAction;)TT;
+method name doPrivileged descriptor (Ljava/security/PrivilegedExceptionAction;Ljava/security/AccessControlContext;)Ljava/lang/Object; thrownTypes java/security/PrivilegedActionException flags 9 signature (Ljava/security/PrivilegedExceptionAction;Ljava/security/AccessControlContext;)TT;
+method name doPrivileged descriptor (Ljava/security/PrivilegedExceptionAction;Ljava/security/AccessControlContext;[Ljava/security/Permission;)Ljava/lang/Object; thrownTypes java/security/PrivilegedActionException flags 89 signature (Ljava/security/PrivilegedExceptionAction;Ljava/security/AccessControlContext;[Ljava/security/Permission;)TT;
+method name doPrivilegedWithCombiner descriptor (Ljava/security/PrivilegedExceptionAction;Ljava/security/AccessControlContext;[Ljava/security/Permission;)Ljava/lang/Object; thrownTypes java/security/PrivilegedActionException flags 89 signature (Ljava/security/PrivilegedExceptionAction;Ljava/security/AccessControlContext;[Ljava/security/Permission;)TT;
+
+class name java/security/ProtectionDomain
+header extends java/lang/Object flags 21 classAnnotations @Ljdk/Profile+Annotation;(value=I1)
+
+class name java/security/cert/CertPathBuilder
+header extends java/lang/Object flags 21 classAnnotations @Ljdk/Profile+Annotation;(value=I1)
+
+class name java/security/cert/CertPathValidator
+header extends java/lang/Object flags 21 classAnnotations @Ljdk/Profile+Annotation;(value=I1)
+
+class name java/security/cert/CertStore
+header extends java/lang/Object flags 21 classAnnotations @Ljdk/Profile+Annotation;(value=I1)
+
+class name java/security/spec/NamedParameterSpec
+field name ML_DSA_44 descriptor Ljava/security/spec/NamedParameterSpec; flags 19
+field name ML_DSA_65 descriptor Ljava/security/spec/NamedParameterSpec; flags 19
+field name ML_DSA_87 descriptor Ljava/security/spec/NamedParameterSpec; flags 19
+field name ML_KEM_512 descriptor Ljava/security/spec/NamedParameterSpec; flags 19
+field name ML_KEM_768 descriptor Ljava/security/spec/NamedParameterSpec; flags 19
+field name ML_KEM_1024 descriptor Ljava/security/spec/NamedParameterSpec; flags 19
+
+class name java/text/DecimalFormat
+header extends java/text/NumberFormat flags 21
+innerclass innerClass java/util/Locale$Category outerClass java/util/Locale innerClassName Category flags 4019
+innerclass innerClass java/text/NumberFormat$Field outerClass java/text/NumberFormat innerClassName Field flags 9
+innerclass innerClass java/text/Format$Field outerClass java/text/Format innerClassName Field flags 9
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/text/MessageFormat
+header extends java/text/Format nestMembers java/text/MessageFormat$Field flags 21
+innerclass innerClass java/util/Locale$Category outerClass java/util/Locale innerClassName Category flags 4019
+innerclass innerClass java/text/ListFormat$Type outerClass java/text/ListFormat innerClassName Type flags 4019
+innerclass innerClass java/text/ListFormat$Style outerClass java/text/ListFormat innerClassName Style flags 4019
+innerclass innerClass java/text/MessageFormat$Field outerClass java/text/MessageFormat innerClassName Field flags 9
+innerclass innerClass java/text/AttributedCharacterIterator$Attribute outerClass java/text/AttributedCharacterIterator innerClassName Attribute flags 9
+innerclass innerClass java/text/Format$Field outerClass java/text/Format innerClassName Field flags 9
+innerclass innerClass java/text/NumberFormat$Style outerClass java/text/NumberFormat innerClassName Style flags 4019
+innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409
+
+class name java/text/NumberFormat
+header extends java/text/Format nestMembers java/text/NumberFormat$Style,java/text/NumberFormat$Field flags 421
+innerclass innerClass java/util/Locale$Category outerClass java/util/Locale innerClassName Category flags 4019
+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/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/util/ServiceLoader
+header extends java/lang/Object implements java/lang/Iterable nestMembers java/util/ServiceLoader$Provider flags 31 signature Ljava/lang/Object;Ljava/lang/Iterable;
+innerclass innerClass java/util/ServiceLoader$Provider outerClass java/util/ServiceLoader innerClassName Provider flags 609
+
+class name java/util/concurrent/ConcurrentSkipListSet
+header extends java/util/AbstractSet implements java/util/NavigableSet,java/lang/Cloneable,java/io/Serializable flags 21 signature Ljava/util/AbstractSet;Ljava/util/NavigableSet;Ljava/lang/Cloneable;Ljava/io/Serializable;
+innerclass innerClass java/util/Map$Entry outerClass java/util/Map innerClassName Entry flags 609
+
+class name java/util/concurrent/atomic/AtomicReferenceArray
+header extends java/lang/Object implements java/io/Serializable flags 21 signature Ljava/lang/Object;Ljava/io/Serializable;
+innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409
+
+class name java/util/spi/AbstractResourceBundleProvider
+header extends java/lang/Object implements java/util/spi/ResourceBundleProvider flags 421
+innerclass innerClass java/util/ResourceBundle$Control outerClass java/util/ResourceBundle innerClassName Control flags 9
+
+class name java/util/stream/Gatherer
+header extends java/lang/Object nestMembers java/util/stream/Gatherer$Integrator,java/util/stream/Gatherer$Integrator$Greedy,java/util/stream/Gatherer$Downstream flags 601 signature Ljava/lang/Object;
+innerclass innerClass java/util/stream/Gatherer$Integrator outerClass java/util/stream/Gatherer innerClassName Integrator flags 609
+innerclass innerClass java/util/stream/Gatherer$Downstream outerClass java/util/stream/Gatherer innerClassName Downstream flags 609
+innerclass innerClass java/util/stream/Gatherer$Integrator$Greedy outerClass java/util/stream/Gatherer$Integrator innerClassName Greedy flags 609
+
+class name java/util/stream/Gatherer$Downstream
+header extends java/lang/Object nestHost java/util/stream/Gatherer flags 601 signature Ljava/lang/Object; runtimeAnnotations @Ljava/lang/FunctionalInterface;
+innerclass innerClass java/util/stream/Gatherer$Downstream outerClass java/util/stream/Gatherer innerClassName Downstream flags 609
+
+class name java/util/stream/Gatherer$Integrator
+header extends java/lang/Object nestHost java/util/stream/Gatherer flags 601 signature Ljava/lang/Object; runtimeAnnotations @Ljava/lang/FunctionalInterface;
+innerclass innerClass java/util/stream/Gatherer$Integrator outerClass java/util/stream/Gatherer innerClassName Integrator flags 609
+innerclass innerClass java/util/stream/Gatherer$Integrator$Greedy outerClass java/util/stream/Gatherer$Integrator innerClassName Greedy flags 609
+innerclass innerClass java/util/stream/Gatherer$Downstream outerClass java/util/stream/Gatherer innerClassName Downstream flags 609
+
+class name java/util/stream/Gatherer$Integrator$Greedy
+header extends java/lang/Object implements java/util/stream/Gatherer$Integrator nestHost java/util/stream/Gatherer flags 601 signature Ljava/lang/Object;Ljava/util/stream/Gatherer$Integrator; runtimeAnnotations @Ljava/lang/FunctionalInterface;
+innerclass innerClass java/util/stream/Gatherer$Integrator outerClass java/util/stream/Gatherer innerClassName Integrator flags 609
+innerclass innerClass java/util/stream/Gatherer$Integrator$Greedy outerClass java/util/stream/Gatherer$Integrator innerClassName Greedy flags 609
+
+class name java/util/stream/Gatherers
+header extends java/lang/Object flags 31
+innerclass innerClass java/util/stream/Gatherer$Integrator outerClass java/util/stream/Gatherer innerClassName Integrator flags 609
+innerclass innerClass java/util/stream/Gatherer$Integrator$Greedy outerClass java/util/stream/Gatherer$Integrator innerClassName Greedy flags 609
+innerclass innerClass java/util/stream/Gatherer$Downstream outerClass java/util/stream/Gatherer innerClassName Downstream flags 609
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/util/stream/Stream
+-method name gather descriptor (Ljava/util/stream/Gatherer;)Ljava/util/stream/Stream;
+method name gather descriptor (Ljava/util/stream/Gatherer;)Ljava/util/stream/Stream; flags 1 signature (Ljava/util/stream/Gatherer<-TT;*TR;>;)Ljava/util/stream/Stream