Merge
This commit is contained in:
commit
b8cf472fe8
1
.hgtags
1
.hgtags
@ -304,3 +304,4 @@ f40752db7773ca0c737f2ad88371e35c57fdfed7 jdk9-b58
|
||||
da950f343762a856d69751570a4c07cfa68a415b jdk9-b59
|
||||
38f98cb6b33562a926ec3b79c7b34128be37647d jdk9-b60
|
||||
ac3f5a39d4ff14d70c365e12cf5ec8f2abd52a04 jdk9-b61
|
||||
e7dbbef69d12b6a74dfad331b7188e7f893e8d29 jdk9-b62
|
||||
|
@ -304,3 +304,4 @@ f25ee9f62427a9ba27418e5531a89754791a305b jdk9-b57
|
||||
39e8a131289e8386aa4c3e4b184faa812a7c0421 jdk9-b59
|
||||
9fa2185bee17462d1014538bff60af6e6f0b01e7 jdk9-b60
|
||||
ea38728b4f4bdd8fd0d7a89b18069f521cf05013 jdk9-b61
|
||||
105d045a69174d870b69bfe471b3f2d05a9f8ecc jdk9-b62
|
||||
|
@ -478,6 +478,15 @@ AC_DEFUN_ONCE([BASIC_SETUP_PATHS],
|
||||
AUTOCONF_DIR=$TOPDIR/common/autoconf
|
||||
])
|
||||
|
||||
# Evaluates platform specific overrides for devkit variables.
|
||||
# $1: Name of variable
|
||||
AC_DEFUN([BASIC_EVAL_DEVKIT_VARIABLE],
|
||||
[
|
||||
if test "x[$]$1" = x; then
|
||||
eval $1="\${$1_${OPENJDK_TARGET_CPU}}"
|
||||
fi
|
||||
])
|
||||
|
||||
AC_DEFUN_ONCE([BASIC_SETUP_DEVKIT],
|
||||
[
|
||||
AC_ARG_WITH([devkit], [AS_HELP_STRING([--with-devkit],
|
||||
@ -487,12 +496,27 @@ AC_DEFUN_ONCE([BASIC_SETUP_DEVKIT],
|
||||
DEVKIT_ROOT="$with_devkit"
|
||||
# Check for a meta data info file in the root of the devkit
|
||||
if test -f "$DEVKIT_ROOT/devkit.info"; then
|
||||
# This potentially sets the following:
|
||||
# DEVKIT_NAME: A descriptive name of the devkit
|
||||
# DEVKIT_TOOLCHAIN_PATH: Corresponds to --with-toolchain-path
|
||||
# DEVKIT_EXTRA_PATH: Corresponds to --with-extra-path
|
||||
# DEVKIT_SYSROOT: Corresponds to --with-sysroot
|
||||
. $DEVKIT_ROOT/devkit.info
|
||||
# This potentially sets the following:
|
||||
# A descriptive name of the devkit
|
||||
BASIC_EVAL_DEVKIT_VARIABLE([DEVKIT_NAME])
|
||||
# Corresponds to --with-extra-path
|
||||
BASIC_EVAL_DEVKIT_VARIABLE([DEVKIT_EXTRA_PATH])
|
||||
# Corresponds to --with-toolchain-path
|
||||
BASIC_EVAL_DEVKIT_VARIABLE([DEVKIT_TOOLCHAIN_PATH])
|
||||
# Corresponds to --with-sysroot
|
||||
BASIC_EVAL_DEVKIT_VARIABLE([DEVKIT_SYSROOT])
|
||||
|
||||
# Identifies the Visual Studio version in the devkit
|
||||
BASIC_EVAL_DEVKIT_VARIABLE([DEVKIT_VS_VERSION])
|
||||
# The Visual Studio include environment variable
|
||||
BASIC_EVAL_DEVKIT_VARIABLE([DEVKIT_VS_INCLUDE])
|
||||
# The Visual Studio lib environment variable
|
||||
BASIC_EVAL_DEVKIT_VARIABLE([DEVKIT_VS_LIB])
|
||||
# Corresponds to --with-msvcr-dll
|
||||
BASIC_EVAL_DEVKIT_VARIABLE([DEVKIT_MSVCR_DLL])
|
||||
# Corresponds to --with-msvcp-dll
|
||||
BASIC_EVAL_DEVKIT_VARIABLE([DEVKIT_MSVCP_DLL])
|
||||
fi
|
||||
|
||||
AC_MSG_CHECKING([for devkit])
|
||||
@ -502,9 +526,7 @@ AC_DEFUN_ONCE([BASIC_SETUP_DEVKIT],
|
||||
AC_MSG_RESULT([$DEVKIT_ROOT])
|
||||
fi
|
||||
|
||||
if test "x$DEVKIT_EXTRA_PATH" != x; then
|
||||
BASIC_PREPEND_TO_PATH([EXTRA_PATH],$DEVKIT_EXTRA_PATH)
|
||||
fi
|
||||
BASIC_PREPEND_TO_PATH([EXTRA_PATH],$DEVKIT_EXTRA_PATH)
|
||||
|
||||
# Fallback default of just /bin if DEVKIT_PATH is not defined
|
||||
if test "x$DEVKIT_TOOLCHAIN_PATH" = x; then
|
||||
@ -681,8 +703,12 @@ AC_DEFUN_ONCE([BASIC_SETUP_OUTPUT_DIR],
|
||||
files_present=`$LS $OUTPUT_ROOT`
|
||||
# Configure has already touched config.log and confdefs.h in the current dir when this check
|
||||
# is performed.
|
||||
filtered_files=`$ECHO "$files_present" | $SED -e 's/config.log//g' -e 's/confdefs.h//g' -e 's/ //g' \
|
||||
| $TR -d '\n'`
|
||||
filtered_files=`$ECHO "$files_present" \
|
||||
| $SED -e 's/config.log//g' \
|
||||
-e 's/confdefs.h//g' \
|
||||
-e 's/fixpath.exe//g' \
|
||||
-e 's/ //g' \
|
||||
| $TR -d '\n'`
|
||||
if test "x$filtered_files" != x; then
|
||||
AC_MSG_NOTICE([Current directory is $CURDIR.])
|
||||
AC_MSG_NOTICE([Since this is not the source root, configure will output the configuration here])
|
||||
|
@ -66,7 +66,7 @@ AC_DEFUN([BASIC_MAKE_WINDOWS_SPACE_SAFE_CYGWIN],
|
||||
# Going to short mode and back again did indeed matter. Since short mode is
|
||||
# case insensitive, let's make it lowercase to improve readability.
|
||||
shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
|
||||
# Now convert it back to Unix-stile (cygpath)
|
||||
# Now convert it back to Unix-style (cygpath)
|
||||
input_path=`$CYGPATH -u "$shortmode_path"`
|
||||
new_path="$input_path"
|
||||
fi
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -189,11 +189,15 @@ AC_DEFUN_ONCE([TOOLCHAIN_PRE_DETECTION],
|
||||
ORG_CFLAGS="$CFLAGS"
|
||||
ORG_CXXFLAGS="$CXXFLAGS"
|
||||
|
||||
# autoconf magic only relies on PATH, so update it if tools dir is specified
|
||||
OLD_PATH="$PATH"
|
||||
|
||||
# On Windows, we need to detect the visual studio installation first.
|
||||
# This will change the PATH, but we need to keep that new PATH even
|
||||
# after toolchain detection is done, since the compiler (on x86) uses
|
||||
# it for DLL resolution in runtime.
|
||||
if test "x$OPENJDK_BUILD_OS" = "xwindows" && test "x$TOOLCHAIN_TYPE" = "xmicrosoft"; then
|
||||
if test "x$OPENJDK_BUILD_OS" = "xwindows" \
|
||||
&& test "x$TOOLCHAIN_TYPE" = "xmicrosoft"; then
|
||||
TOOLCHAIN_SETUP_VISUAL_STUDIO_ENV
|
||||
# Reset path to VS_PATH. It will include everything that was on PATH at the time we
|
||||
# ran TOOLCHAIN_SETUP_VISUAL_STUDIO_ENV.
|
||||
@ -203,9 +207,6 @@ AC_DEFUN_ONCE([TOOLCHAIN_PRE_DETECTION],
|
||||
export LIB="$VS_LIB"
|
||||
fi
|
||||
|
||||
# autoconf magic only relies on PATH, so update it if tools dir is specified
|
||||
OLD_PATH="$PATH"
|
||||
|
||||
# For solaris we really need solaris tools, and not the GNU equivalent.
|
||||
# The build tools on Solaris reside in /usr/ccs (C Compilation System),
|
||||
# so add that to path before starting to probe.
|
||||
|
@ -210,6 +210,37 @@ AC_DEFUN([TOOLCHAIN_FIND_VISUAL_STUDIO],
|
||||
done
|
||||
|
||||
exit 0
|
||||
elif test "x$DEVKIT_VS_VERSION" != x; then
|
||||
VS_VERSION=$DEVKIT_VS_VERSION
|
||||
TOOLCHAIN_VERSION=$VS_VERSION
|
||||
eval VS_DESCRIPTION="\${VS_DESCRIPTION_${VS_VERSION}}"
|
||||
eval VS_VERSION_INTERNAL="\${VS_VERSION_INTERNAL_${VS_VERSION}}"
|
||||
eval MSVCR_NAME="\${VS_MSVCR_${VS_VERSION}}"
|
||||
eval MSVCP_NAME="\${VS_MSVCP_${VS_VERSION}}"
|
||||
eval PLATFORM_TOOLSET="\${VS_VS_PLATFORM_NAME_${VS_VERSION}}"
|
||||
VS_PATH="$TOOLCHAIN_PATH:$PATH"
|
||||
|
||||
# Convert DEVKIT_VS_INCLUDE into windows style VS_INCLUDE so that it
|
||||
# can still be exported as INCLUDE for compiler invocations without
|
||||
# SYSROOT_CFLAGS
|
||||
OLDIFS="$IFS"
|
||||
IFS=";"
|
||||
for i in $DEVKIT_VS_INCLUDE; do
|
||||
ipath=$i
|
||||
BASIC_WINDOWS_REWRITE_AS_WINDOWS_MIXED_PATH([ipath])
|
||||
VS_INCLUDE="$VS_INCLUDE;$ipath"
|
||||
done
|
||||
# Convert DEVKIT_VS_LIB into VS_LIB so that it can still be exported
|
||||
# as LIB for compiler invocations without SYSROOT_LDFLAGS
|
||||
for i in $DEVKIT_VS_LIB; do
|
||||
libpath=$i
|
||||
BASIC_WINDOWS_REWRITE_AS_WINDOWS_MIXED_PATH([libpath])
|
||||
VS_LIB="$VS_LIB;$libpath"
|
||||
done
|
||||
IFS="$OLDIFS"
|
||||
|
||||
AC_MSG_NOTICE([Found devkit $VS_DESCRIPTION])
|
||||
|
||||
elif test "x$with_toolchain_version" != x; then
|
||||
# User override; check that it is valid
|
||||
if test "x${VALID_VS_VERSIONS/$with_toolchain_version/}" = "x${VALID_VS_VERSIONS}"; then
|
||||
@ -262,71 +293,81 @@ AC_DEFUN([TOOLCHAIN_SETUP_VISUAL_STUDIO_ENV],
|
||||
# First-hand choice is to locate and run the vsvars bat file.
|
||||
TOOLCHAIN_FIND_VISUAL_STUDIO
|
||||
|
||||
if test "x$VS_ENV_CMD" != x; then
|
||||
# We have found a Visual Studio environment on disk, let's extract variables from the vsvars bat file.
|
||||
BASIC_FIXUP_EXECUTABLE(VS_ENV_CMD)
|
||||
# If we have a devkit, skip all of the below.
|
||||
if test "x$DEVKIT_VS_VERSION" = x; then
|
||||
if test "x$VS_ENV_CMD" != x; then
|
||||
# We have found a Visual Studio environment on disk, let's extract variables from the vsvars bat file.
|
||||
BASIC_FIXUP_EXECUTABLE(VS_ENV_CMD)
|
||||
|
||||
# Lets extract the variables that are set by vcvarsall.bat/vsvars32.bat/vsvars64.bat
|
||||
AC_MSG_NOTICE([Trying to extract Visual Studio environment variables])
|
||||
# Lets extract the variables that are set by vcvarsall.bat/vsvars32.bat/vsvars64.bat
|
||||
AC_MSG_NOTICE([Trying to extract Visual Studio environment variables])
|
||||
|
||||
# We need to create a couple of temporary files.
|
||||
VS_ENV_TMP_DIR="$CONFIGURESUPPORT_OUTPUTDIR/vs-env"
|
||||
$MKDIR -p $VS_ENV_TMP_DIR
|
||||
# We need to create a couple of temporary files.
|
||||
VS_ENV_TMP_DIR="$CONFIGURESUPPORT_OUTPUTDIR/vs-env"
|
||||
$MKDIR -p $VS_ENV_TMP_DIR
|
||||
|
||||
# Cannot use the VS10 setup script directly (since it only updates the DOS subshell environment).
|
||||
# Instead create a shell script which will set the relevant variables when run.
|
||||
WINPATH_VS_ENV_CMD="$VS_ENV_CMD"
|
||||
BASIC_WINDOWS_REWRITE_AS_WINDOWS_MIXED_PATH([WINPATH_VS_ENV_CMD])
|
||||
WINPATH_BASH="$BASH"
|
||||
BASIC_WINDOWS_REWRITE_AS_WINDOWS_MIXED_PATH([WINPATH_BASH])
|
||||
# Cannot use the VS10 setup script directly (since it only updates the DOS subshell environment).
|
||||
# Instead create a shell script which will set the relevant variables when run.
|
||||
WINPATH_VS_ENV_CMD="$VS_ENV_CMD"
|
||||
BASIC_WINDOWS_REWRITE_AS_WINDOWS_MIXED_PATH([WINPATH_VS_ENV_CMD])
|
||||
WINPATH_BASH="$BASH"
|
||||
BASIC_WINDOWS_REWRITE_AS_WINDOWS_MIXED_PATH([WINPATH_BASH])
|
||||
|
||||
# Generate a DOS batch file which runs $VS_ENV_CMD, and then creates a shell
|
||||
# script (executable by bash) that will setup the important variables.
|
||||
EXTRACT_VC_ENV_BAT_FILE="$VS_ENV_TMP_DIR/extract-vs-env.bat"
|
||||
$ECHO "@echo off" > $EXTRACT_VC_ENV_BAT_FILE
|
||||
# This will end up something like:
|
||||
# call C:/progra~2/micros~2.0/vc/bin/amd64/vcvars64.bat
|
||||
$ECHO "call $WINPATH_VS_ENV_CMD $VS_ENV_ARGS" >> $EXTRACT_VC_ENV_BAT_FILE
|
||||
# These will end up something like:
|
||||
# C:/CygWin/bin/bash -c 'echo VS_PATH=\"$PATH\" > localdevenv.sh
|
||||
# The trailing space for everyone except PATH is no typo, but is needed due
|
||||
# to trailing \ in the Windows paths. These will be stripped later.
|
||||
$ECHO "$WINPATH_BASH -c 'echo VS_PATH="'\"$PATH\" > set-vs-env.sh' >> $EXTRACT_VC_ENV_BAT_FILE
|
||||
$ECHO "$WINPATH_BASH -c 'echo VS_INCLUDE="'\"$INCLUDE\;$include \" >> set-vs-env.sh' >> $EXTRACT_VC_ENV_BAT_FILE
|
||||
$ECHO "$WINPATH_BASH -c 'echo VS_LIB="'\"$LIB\;$lib \" >> set-vs-env.sh' >> $EXTRACT_VC_ENV_BAT_FILE
|
||||
$ECHO "$WINPATH_BASH -c 'echo VCINSTALLDIR="'\"$VCINSTALLDIR \" >> set-vs-env.sh' >> $EXTRACT_VC_ENV_BAT_FILE
|
||||
$ECHO "$WINPATH_BASH -c 'echo WindowsSdkDir="'\"$WindowsSdkDir \" >> set-vs-env.sh' >> $EXTRACT_VC_ENV_BAT_FILE
|
||||
$ECHO "$WINPATH_BASH -c 'echo WINDOWSSDKDIR="'\"$WINDOWSSDKDIR \" >> set-vs-env.sh' >> $EXTRACT_VC_ENV_BAT_FILE
|
||||
# Generate a DOS batch file which runs $VS_ENV_CMD, and then creates a shell
|
||||
# script (executable by bash) that will setup the important variables.
|
||||
EXTRACT_VC_ENV_BAT_FILE="$VS_ENV_TMP_DIR/extract-vs-env.bat"
|
||||
$ECHO "@echo off" > $EXTRACT_VC_ENV_BAT_FILE
|
||||
# This will end up something like:
|
||||
# call C:/progra~2/micros~2.0/vc/bin/amd64/vcvars64.bat
|
||||
$ECHO "call $WINPATH_VS_ENV_CMD $VS_ENV_ARGS" >> $EXTRACT_VC_ENV_BAT_FILE
|
||||
# These will end up something like:
|
||||
# C:/CygWin/bin/bash -c 'echo VS_PATH=\"$PATH\" > localdevenv.sh
|
||||
# The trailing space for everyone except PATH is no typo, but is needed due
|
||||
# to trailing \ in the Windows paths. These will be stripped later.
|
||||
$ECHO "$WINPATH_BASH -c 'echo VS_PATH="'\"$PATH\" > set-vs-env.sh' \
|
||||
>> $EXTRACT_VC_ENV_BAT_FILE
|
||||
$ECHO "$WINPATH_BASH -c 'echo VS_INCLUDE="'\"$INCLUDE\;$include \" >> set-vs-env.sh' \
|
||||
>> $EXTRACT_VC_ENV_BAT_FILE
|
||||
$ECHO "$WINPATH_BASH -c 'echo VS_LIB="'\"$LIB\;$lib \" >> set-vs-env.sh' \
|
||||
>> $EXTRACT_VC_ENV_BAT_FILE
|
||||
$ECHO "$WINPATH_BASH -c 'echo VCINSTALLDIR="'\"$VCINSTALLDIR \" >> set-vs-env.sh' \
|
||||
>> $EXTRACT_VC_ENV_BAT_FILE
|
||||
$ECHO "$WINPATH_BASH -c 'echo WindowsSdkDir="'\"$WindowsSdkDir \" >> set-vs-env.sh' \
|
||||
>> $EXTRACT_VC_ENV_BAT_FILE
|
||||
$ECHO "$WINPATH_BASH -c 'echo WINDOWSSDKDIR="'\"$WINDOWSSDKDIR \" >> set-vs-env.sh' \
|
||||
>> $EXTRACT_VC_ENV_BAT_FILE
|
||||
|
||||
# Now execute the newly created bat file.
|
||||
# The | cat is to stop SetEnv.Cmd to mess with system colors on msys.
|
||||
# Change directory so we don't need to mess with Windows paths in redirects.
|
||||
cd $VS_ENV_TMP_DIR
|
||||
cmd /c extract-vs-env.bat | $CAT
|
||||
cd $CURDIR
|
||||
# Now execute the newly created bat file.
|
||||
# The | cat is to stop SetEnv.Cmd to mess with system colors on msys.
|
||||
# Change directory so we don't need to mess with Windows paths in redirects.
|
||||
cd $VS_ENV_TMP_DIR
|
||||
cmd /c extract-vs-env.bat | $CAT
|
||||
cd $CURDIR
|
||||
|
||||
if test ! -s $VS_ENV_TMP_DIR/set-vs-env.sh; then
|
||||
AC_MSG_NOTICE([Could not succesfully extract the envionment variables needed for the VS setup.])
|
||||
AC_MSG_NOTICE([Try setting --with-tools-dir to the VC/bin directory within the VS installation])
|
||||
AC_MSG_NOTICE([or run "bash.exe -l" from a VS command prompt and then run configure from there.])
|
||||
AC_MSG_ERROR([Cannot continue])
|
||||
if test ! -s $VS_ENV_TMP_DIR/set-vs-env.sh; then
|
||||
AC_MSG_NOTICE([Could not succesfully extract the envionment variables needed for the VS setup.])
|
||||
AC_MSG_NOTICE([Try setting --with-tools-dir to the VC/bin directory within the VS installation])
|
||||
AC_MSG_NOTICE([or run "bash.exe -l" from a VS command prompt and then run configure from there.])
|
||||
AC_MSG_ERROR([Cannot continue])
|
||||
fi
|
||||
|
||||
# Now set all paths and other env variables. This will allow the rest of
|
||||
# the configure script to find and run the compiler in the proper way.
|
||||
AC_MSG_NOTICE([Setting extracted environment variables])
|
||||
. $VS_ENV_TMP_DIR/set-vs-env.sh
|
||||
# Now we have VS_PATH, VS_INCLUDE, VS_LIB. For further checking, we
|
||||
# also define VCINSTALLDIR, WindowsSdkDir and WINDOWSSDKDIR.
|
||||
else
|
||||
# We did not find a vsvars bat file, let's hope we are run from a VS command prompt.
|
||||
AC_MSG_NOTICE([Cannot locate a valid Visual Studio installation, checking current environment])
|
||||
fi
|
||||
|
||||
# Now set all paths and other env variables. This will allow the rest of
|
||||
# the configure script to find and run the compiler in the proper way.
|
||||
AC_MSG_NOTICE([Setting extracted environment variables])
|
||||
. $VS_ENV_TMP_DIR/set-vs-env.sh
|
||||
# Now we have VS_PATH, VS_INCLUDE, VS_LIB. For further checking, we
|
||||
# also define VCINSTALLDIR, WindowsSdkDir and WINDOWSSDKDIR.
|
||||
else
|
||||
# We did not find a vsvars bat file, let's hope we are run from a VS command prompt.
|
||||
AC_MSG_NOTICE([Cannot locate a valid Visual Studio installation, checking current environment])
|
||||
fi
|
||||
|
||||
# At this point, we should have correct variables in the environment, or we can't continue.
|
||||
AC_MSG_CHECKING([for Visual Studio variables])
|
||||
|
||||
if test "x$VCINSTALLDIR" != x || test "x$WindowsSDKDir" != x || test "x$WINDOWSSDKDIR" != x; then
|
||||
if test "x$VCINSTALLDIR" != x || test "x$WindowsSDKDir" != x \
|
||||
|| test "x$WINDOWSSDKDIR" != x || test "x$DEVKIT_NAME" != x; then
|
||||
if test "x$VS_INCLUDE" = x || test "x$VS_LIB" = x; then
|
||||
AC_MSG_RESULT([present but broken])
|
||||
AC_MSG_ERROR([Your VC command prompt seems broken, INCLUDE and/or LIB is missing.])
|
||||
@ -403,10 +444,10 @@ AC_DEFUN([TOOLCHAIN_CHECK_POSSIBLE_MSVC_DLL],
|
||||
POSSIBLE_MSVC_DLL="$2"
|
||||
METHOD="$3"
|
||||
if test -n "$POSSIBLE_MSVC_DLL" -a -e "$POSSIBLE_MSVC_DLL"; then
|
||||
AC_MSG_NOTICE([Found $1 at $POSSIBLE_MSVC_DLL using $METHOD])
|
||||
AC_MSG_NOTICE([Found $DLL_NAME at $POSSIBLE_MSVC_DLL using $METHOD])
|
||||
|
||||
# Need to check if the found msvcr is correct architecture
|
||||
AC_MSG_CHECKING([found $1 architecture])
|
||||
AC_MSG_CHECKING([found $DLL_NAME architecture])
|
||||
MSVC_DLL_FILETYPE=`$FILE -b "$POSSIBLE_MSVC_DLL"`
|
||||
if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then
|
||||
# The MSYS 'file' command returns "PE32 executable for MS Windows (DLL) (GUI) Intel 80386 32-bit"
|
||||
@ -426,19 +467,19 @@ AC_DEFUN([TOOLCHAIN_CHECK_POSSIBLE_MSVC_DLL],
|
||||
if $ECHO "$MSVC_DLL_FILETYPE" | $GREP "$CORRECT_MSVCR_ARCH" 2>&1 > /dev/null; then
|
||||
AC_MSG_RESULT([ok])
|
||||
MSVC_DLL="$POSSIBLE_MSVC_DLL"
|
||||
AC_MSG_CHECKING([for $1])
|
||||
BASIC_FIXUP_PATH(MSVC_DLL)
|
||||
AC_MSG_CHECKING([for $DLL_NAME])
|
||||
AC_MSG_RESULT([$MSVC_DLL])
|
||||
else
|
||||
AC_MSG_RESULT([incorrect, ignoring])
|
||||
AC_MSG_NOTICE([The file type of the located $1 is $MSVC_DLL_FILETYPE])
|
||||
AC_MSG_NOTICE([The file type of the located $DLL_NAME is $MSVC_DLL_FILETYPE])
|
||||
fi
|
||||
fi
|
||||
])
|
||||
|
||||
AC_DEFUN([TOOLCHAIN_SETUP_MSVC_DLL],
|
||||
[
|
||||
VAR_NAME="$1"
|
||||
DLL_NAME="$2"
|
||||
DLL_NAME="$1"
|
||||
MSVC_DLL=
|
||||
|
||||
if test "x$MSVC_DLL" = x; then
|
||||
@ -517,10 +558,6 @@ AC_DEFUN([TOOLCHAIN_SETUP_MSVC_DLL],
|
||||
AC_MSG_RESULT([no])
|
||||
AC_MSG_ERROR([Could not find $DLL_NAME. Please specify using --with-msvcr-dll.])
|
||||
fi
|
||||
|
||||
$1=$MSVC_DLL
|
||||
BASIC_FIXUP_PATH($1)
|
||||
AC_SUBST($1, [$]$1)
|
||||
])
|
||||
|
||||
AC_DEFUN([TOOLCHAIN_SETUP_VS_RUNTIME_DLLS],
|
||||
@ -530,14 +567,22 @@ AC_DEFUN([TOOLCHAIN_SETUP_VS_RUNTIME_DLLS],
|
||||
|
||||
if test "x$with_msvcr_dll" != x; then
|
||||
# If given explicitely by user, do not probe. If not present, fail directly.
|
||||
TOOLCHAIN_CHECK_POSSIBLE_MSVC_DLL([$DLL_NAME], [$with_msvcr_dll],
|
||||
[--with-msvcr-dll])
|
||||
TOOLCHAIN_CHECK_POSSIBLE_MSVC_DLL($MSVCR_NAME, [$with_msvcr_dll], [--with-msvcr-dll])
|
||||
if test "x$MSVC_DLL" = x; then
|
||||
AC_MSG_ERROR([Could not find a proper $MSVCR_NAME as specified by --with-msvcr-dll])
|
||||
fi
|
||||
MSVCR_DLL="$MSVC_DLL"
|
||||
elif test "x$DEVKIT_MSVCR_DLL" != x; then
|
||||
TOOLCHAIN_CHECK_POSSIBLE_MSVC_DLL($MSVCR_NAME, [$DEVKIT_MSVCR_DLL], [devkit])
|
||||
if test "x$MSVC_DLL" = x; then
|
||||
AC_MSG_ERROR([Could not find a proper $MSVCR_NAME as specified by devkit])
|
||||
fi
|
||||
MSVCR_DLL="$MSVC_DLL"
|
||||
else
|
||||
TOOLCHAIN_SETUP_MSVC_DLL([MSVCR_DLL], [${MSVCR_NAME}])
|
||||
TOOLCHAIN_SETUP_MSVC_DLL([${MSVCR_NAME}])
|
||||
MSVCR_DLL="$MSVC_DLL"
|
||||
fi
|
||||
AC_SUBST(MSVCR_DLL)
|
||||
|
||||
AC_ARG_WITH(msvcp-dll, [AS_HELP_STRING([--with-msvcp-dll],
|
||||
[path to microsoft C++ runtime dll (msvcp*.dll) (Windows only) @<:@probed@:>@])])
|
||||
@ -545,13 +590,21 @@ AC_DEFUN([TOOLCHAIN_SETUP_VS_RUNTIME_DLLS],
|
||||
if test "x$MSVCP_NAME" != "x"; then
|
||||
if test "x$with_msvcp_dll" != x; then
|
||||
# If given explicitely by user, do not probe. If not present, fail directly.
|
||||
TOOLCHAIN_CHECK_POSSIBLE_MSVC_DLL([$DLL_NAME], [$with_msvcp_dll],
|
||||
[--with-msvcp-dll])
|
||||
TOOLCHAIN_CHECK_POSSIBLE_MSVC_DLL($MSVCP_NAME, [$with_msvcp_dll], [--with-msvcp-dll])
|
||||
if test "x$MSVC_DLL" = x; then
|
||||
AC_MSG_ERROR([Could not find a proper $MSVCP_NAME as specified by --with-msvcp-dll])
|
||||
fi
|
||||
MSVCP_DLL="$MSVC_DLL"
|
||||
elif test "x$DEVKIT_MSVCP_DLL" != x; then
|
||||
TOOLCHAIN_CHECK_POSSIBLE_MSVC_DLL($MSVCP_NAME, [$DEVKIT_MSVCP_DLL], [devkit])
|
||||
if test "x$MSVC_DLL" = x; then
|
||||
AC_MSG_ERROR([Could not find a proper $MSVCP_NAME as specified by devkit])
|
||||
fi
|
||||
MSVCP_DLL="$MSVC_DLL"
|
||||
else
|
||||
TOOLCHAIN_SETUP_MSVC_DLL([MSVCP_DLL], [${MSVCP_NAME}])
|
||||
TOOLCHAIN_SETUP_MSVC_DLL([${MSVCP_NAME}])
|
||||
MSVCP_DLL="$MSVC_DLL"
|
||||
fi
|
||||
AC_SUBST(MSVCP_DLL)
|
||||
fi
|
||||
])
|
||||
|
@ -304,3 +304,4 @@ d8ebf1a5b18ccbc849f5bf0f80aa3d78583eee68 jdk9-b57
|
||||
cda6ae062f85fac5555f4e1318885b0ecd998bd1 jdk9-b59
|
||||
caa330b275f39282793466529f6864766b31d9fd jdk9-b60
|
||||
d690f489ca0bb95a6157d996da2fa72bcbcf02ea jdk9-b61
|
||||
d27f7e0a7aca129969de23e9934408a31b4abf4c jdk9-b62
|
||||
|
@ -464,3 +464,4 @@ ee878f3d6732856f7725c590312bfbe2ffa52cc7 jdk9-b58
|
||||
96bcaec07cb165782bae1b9a1f28450b37a10e3a jdk9-b59
|
||||
9c916db4bf3bc164a47b5a9cefe5ffd71e111f6a jdk9-b60
|
||||
715d2da5801c410746e92f08066d53bde1496286 jdk9-b61
|
||||
1eab877142cce6ca06e556e2ad0af688f993f00b jdk9-b62
|
||||
|
@ -74,7 +74,8 @@ LP64=1
|
||||
|
||||
!if "$(BUILDARCH)" == "i486"
|
||||
MACHINE=I386
|
||||
CXX_FLAGS=$(CXX_FLAGS) /D "IA32"
|
||||
# VS2013 generates bad l2f without /arch:IA32
|
||||
CXX_FLAGS=$(CXX_FLAGS) /D "IA32" /arch:IA32
|
||||
!endif
|
||||
|
||||
CXX_FLAGS=$(CXX_FLAGS) /D "WIN32" /D "_WINDOWS"
|
||||
|
@ -449,7 +449,7 @@ reg_class no_special_reg32(
|
||||
R26
|
||||
/* R27, */ // heapbase
|
||||
/* R28, */ // thread
|
||||
/* R29, */ // fp
|
||||
R29, // fp
|
||||
/* R30, */ // lr
|
||||
/* R31 */ // sp
|
||||
);
|
||||
@ -483,7 +483,7 @@ reg_class no_special_reg(
|
||||
R26, R26_H,
|
||||
/* R27, R27_H, */ // heapbase
|
||||
/* R28, R28_H, */ // thread
|
||||
/* R29, R29_H, */ // fp
|
||||
R29, R29_H, // fp
|
||||
/* R30, R30_H, */ // lr
|
||||
/* R31, R31_H */ // sp
|
||||
);
|
||||
@ -758,6 +758,8 @@ definitions %{
|
||||
|
||||
source_hpp %{
|
||||
|
||||
#include "memory/cardTableModRefBS.hpp"
|
||||
|
||||
class CallStubImpl {
|
||||
|
||||
//--------------------------------------------------------------
|
||||
@ -2538,7 +2540,7 @@ RegMask Matcher::modL_proj_mask() {
|
||||
}
|
||||
|
||||
const RegMask Matcher::method_handle_invoke_SP_save_mask() {
|
||||
return RegMask();
|
||||
return FP_REG_mask();
|
||||
}
|
||||
|
||||
// helper for encoding java_to_runtime calls on sim
|
||||
|
@ -77,12 +77,6 @@ inline frame::frame(intptr_t* sp, intptr_t* fp, address pc) {
|
||||
inline frame::frame(intptr_t* sp, intptr_t* unextended_sp, intptr_t* fp, address pc) {
|
||||
intptr_t a = intptr_t(sp);
|
||||
intptr_t b = intptr_t(fp);
|
||||
#ifndef PRODUCT
|
||||
if (fp)
|
||||
if (sp > fp || (fp - sp > 0x100000))
|
||||
for(;;)
|
||||
asm("nop");
|
||||
#endif
|
||||
_sp = sp;
|
||||
_unextended_sp = unextended_sp;
|
||||
_fp = fp;
|
||||
@ -104,12 +98,6 @@ inline frame::frame(intptr_t* sp, intptr_t* unextended_sp, intptr_t* fp, address
|
||||
inline frame::frame(intptr_t* sp, intptr_t* fp) {
|
||||
intptr_t a = intptr_t(sp);
|
||||
intptr_t b = intptr_t(fp);
|
||||
#ifndef PRODUCT
|
||||
if (fp)
|
||||
if (sp > fp || (fp - sp > 0x100000))
|
||||
for(;;)
|
||||
asm("nop");
|
||||
#endif
|
||||
_sp = sp;
|
||||
_unextended_sp = sp;
|
||||
_fp = fp;
|
||||
|
@ -32,22 +32,14 @@
|
||||
|
||||
#include "compiler/disassembler.hpp"
|
||||
#include "memory/resourceArea.hpp"
|
||||
#include "nativeInst_aarch64.hpp"
|
||||
#include "opto/compile.hpp"
|
||||
#include "opto/node.hpp"
|
||||
#include "runtime/biasedLocking.hpp"
|
||||
#include "runtime/icache.hpp"
|
||||
#include "runtime/interfaceSupport.hpp"
|
||||
#include "runtime/sharedRuntime.hpp"
|
||||
|
||||
// #include "gc_interface/collectedHeap.inline.hpp"
|
||||
// #include "interpreter/interpreter.hpp"
|
||||
// #include "memory/cardTableModRefBS.hpp"
|
||||
// #include "prims/methodHandles.hpp"
|
||||
// #include "runtime/biasedLocking.hpp"
|
||||
// #include "runtime/interfaceSupport.hpp"
|
||||
// #include "runtime/objectMonitor.hpp"
|
||||
// #include "runtime/os.hpp"
|
||||
// #include "runtime/sharedRuntime.hpp"
|
||||
// #include "runtime/stubRoutines.hpp"
|
||||
|
||||
#if INCLUDE_ALL_GCS
|
||||
#include "gc_implementation/g1/g1CollectedHeap.inline.hpp"
|
||||
#include "gc_implementation/g1/g1SATBCardTableModRefBS.hpp"
|
||||
|
@ -25,7 +25,7 @@
|
||||
* @test
|
||||
* @bug 8015396
|
||||
* @summary double a%b returns NaN for some (a,b) (|a| < inf, |b|>0) (on Core i7 980X)
|
||||
*
|
||||
* @ignore 8015396
|
||||
* @run main ModNaN
|
||||
*/
|
||||
public class ModNaN {
|
||||
|
@ -304,3 +304,4 @@ d5b5a010a16688f188f5a9247ed873f5100b530c jdk9-b53
|
||||
a1a9d943446911a4a0f74f0d082c32094af944ae jdk9-b59
|
||||
c12db18748dacfccd6581ead29228c2cb6e51b34 jdk9-b60
|
||||
f4a4a54620370f077c2e830a5561c8cfa811712b jdk9-b61
|
||||
3bcf83c1bbc1b7663e930d72c133a9bd86c7618d jdk9-b62
|
||||
|
@ -307,3 +307,4 @@ b4f913b48e699980bd11fe19cce134d0adb4c31c jdk9-b56
|
||||
8a9ebae410bc388668fc203e559b5407bde757eb jdk9-b59
|
||||
f31835b59035377a220efc5a248b90f090ee1689 jdk9-b60
|
||||
77f44848c44c003205490bf5ab88035233b65418 jdk9-b61
|
||||
cd0cf72b2cbf4adb778a02505fb065bb2292688c jdk9-b62
|
||||
|
@ -304,3 +304,4 @@ c76339e86ea7da5d9ac7856f3fae9ef73eef04a2 jdk9-b57
|
||||
48ee960f29df93a9b2a895621321358a86909086 jdk9-b59
|
||||
84c5527f742bc64562e47d3149c16197fe1c4c1a jdk9-b60
|
||||
da84dcac1b0b12c5b836b05ac75ecbfadee0cd32 jdk9-b61
|
||||
49118e68fbd4cc0044e718c47db681946d5efd69 jdk9-b62
|
||||
|
@ -32,11 +32,11 @@ include MakeBase.gmk
|
||||
|
||||
# Put the libraries here. Different locations for different target OS types.
|
||||
ifneq ($(OPENJDK_TARGET_OS), windows)
|
||||
HOTSPOT_LIB_DIR := $(HOTSPOT_DIST)/jre/lib$(OPENJDK_TARGET_CPU_LIBDIR)
|
||||
HOTSPOT_LIB_DIR := $(HOTSPOT_DIST)/lib$(OPENJDK_TARGET_CPU_LIBDIR)
|
||||
BASE_INSTALL_LIBRARIES_HERE := $(SUPPORT_OUTPUTDIR)/modules_libs/java.base$(OPENJDK_TARGET_CPU_LIBDIR)
|
||||
SA_INSTALL_LIBRARIES_HERE := $(SUPPORT_OUTPUTDIR)/modules_libs/jdk.hotspot.agent$(OPENJDK_TARGET_CPU_LIBDIR)
|
||||
else
|
||||
HOTSPOT_LIB_DIR := $(HOTSPOT_DIST)/jre/bin
|
||||
HOTSPOT_LIB_DIR := $(HOTSPOT_DIST)/bin
|
||||
BASE_INSTALL_LIBRARIES_HERE := $(SUPPORT_OUTPUTDIR)/modules_libs/java.base
|
||||
SA_INSTALL_LIBRARIES_HERE := $(SUPPORT_OUTPUTDIR)/modules_libs/jdk.hotspot.agent
|
||||
endif
|
||||
@ -80,11 +80,11 @@ SA_TARGETS := $(COPY_HOTSPOT_SA)
|
||||
################################################################################
|
||||
|
||||
ifeq ($(OPENJDK_TARGET_OS), macosx)
|
||||
JSIG_DEBUGINFO := $(strip $(wildcard $(HOTSPOT_DIST)/jre/lib$(OPENJDK_TARGET_CPU_LIBDIR)/libjsig$(SHARED_LIBRARY_SUFFIX).dSYM) \
|
||||
$(wildcard $(HOTSPOT_DIST)/jre/lib$(OPENJDK_TARGET_CPU_LIBDIR)/libjsig.diz) )
|
||||
JSIG_DEBUGINFO := $(strip $(wildcard $(HOTSPOT_DIST)/lib$(OPENJDK_TARGET_CPU_LIBDIR)/libjsig$(SHARED_LIBRARY_SUFFIX).dSYM) \
|
||||
$(wildcard $(HOTSPOT_DIST)/lib$(OPENJDK_TARGET_CPU_LIBDIR)/libjsig.diz) )
|
||||
else
|
||||
JSIG_DEBUGINFO := $(strip $(wildcard $(HOTSPOT_DIST)/jre/lib$(OPENJDK_TARGET_CPU_LIBDIR)/libjsig.debuginfo) \
|
||||
$(wildcard $(HOTSPOT_DIST)/jre/lib$(OPENJDK_TARGET_CPU_LIBDIR)/libjsig.diz) )
|
||||
JSIG_DEBUGINFO := $(strip $(wildcard $(HOTSPOT_DIST)/lib$(OPENJDK_TARGET_CPU_LIBDIR)/libjsig.debuginfo) \
|
||||
$(wildcard $(HOTSPOT_DIST)/lib$(OPENJDK_TARGET_CPU_LIBDIR)/libjsig.diz) )
|
||||
endif
|
||||
|
||||
ifneq ($(OPENJDK_TARGET_OS), windows)
|
||||
|
@ -21,4 +21,4 @@
|
||||
# or visit www.oracle.com if you need additional information or have any
|
||||
# questions.
|
||||
#
|
||||
tzdata2015b
|
||||
tzdata2015d
|
||||
|
@ -342,35 +342,29 @@ Rule Egypt 2007 only - Sep Thu>=1 24:00 0 -
|
||||
# above) says DST had no affect on electricity consumption. There is
|
||||
# no information about when DST will end this fall. See:
|
||||
# http://abcnews.go.com/International/wireStory/el-sissi-pushes-egyptians-line-23614833
|
||||
|
||||
# From Steffen Thorsen (2015-04-08):
|
||||
# Egypt will start DST on midnight after Thursday, April 30, 2015.
|
||||
# This is based on a law (no 35) from May 15, 2014 saying it starts the last
|
||||
# Thursday of April.... Clocks will still be turned back for Ramadan, but
|
||||
# dates not yet announced....
|
||||
# http://almogaz.com/news/weird-news/2015/04/05/1947105 ...
|
||||
# http://www.timeanddate.com/news/time/egypt-starts-dst-2015.html
|
||||
|
||||
# From Ahmed Nazmy (2015-04-20):
|
||||
# Egypt's ministers cabinet just announced ... that it will cancel DST at
|
||||
# least for 2015.
|
||||
#
|
||||
# For now, guess that later spring and fall transitions will use
|
||||
# 2010's rules, and guess that Egypt will switch to standard time at
|
||||
# 24:00 the last Thursday before Ramadan, and back to DST at 00:00 the
|
||||
# first Friday after Ramadan. To implement this,
|
||||
# transition dates for 2015 through 2037 were determined by running
|
||||
# the following program under GNU Emacs 24.3, with the results integrated
|
||||
# by hand into the table below. Ramadan again intrudes on the guessed
|
||||
# DST starting in 2038, but that's beyond our somewhat-arbitrary cutoff.
|
||||
# (let ((islamic-year 1436))
|
||||
# (while (< islamic-year 1460)
|
||||
# (let ((a (calendar-islamic-to-absolute (list 9 1 islamic-year)))
|
||||
# (b (calendar-islamic-to-absolute (list 10 1 islamic-year)))
|
||||
# (friday 5))
|
||||
# (while (/= friday (mod a 7))
|
||||
# (setq a (1- a)))
|
||||
# (while (/= friday (mod b 7))
|
||||
# (setq b (1+ b)))
|
||||
# (setq a (1- a))
|
||||
# (setq b (1- b))
|
||||
# (setq a (calendar-gregorian-from-absolute a))
|
||||
# (setq b (calendar-gregorian-from-absolute b))
|
||||
# (insert
|
||||
# (format
|
||||
# (concat "Rule\tEgypt\t%d\tonly\t-\t%s\t%2d\t24:00\t0\t-\n"
|
||||
# "Rule\tEgypt\t%d\tonly\t-\t%s\t%2d\t24:00\t1:00\tS\n")
|
||||
# (car (cdr (cdr a))) (calendar-month-name (car a) t) (car (cdr a))
|
||||
# (car (cdr (cdr b))) (calendar-month-name (car b) t) (car (cdr b)))))
|
||||
# (setq islamic-year (+ 1 islamic-year))))
|
||||
# From Tim Parenti (2015-04-20):
|
||||
# http://english.ahram.org.eg/WriterArticles/NewsContentP/1/128195/Egypt/No-daylight-saving-this-summer-Egypts-prime-minist.aspx
|
||||
# "Egypt's cabinet agreed on Monday not to switch clocks for daylight saving
|
||||
# time this summer, and carry out studies on the possibility of canceling the
|
||||
# practice altogether in future years."
|
||||
#
|
||||
# From Paul Eggert (2015-04-20):
|
||||
# For now, assume DST will be canceled. Any resumption would likely
|
||||
# use different rules anyway.
|
||||
|
||||
Rule Egypt 2008 only - Aug lastThu 24:00 0 -
|
||||
Rule Egypt 2009 only - Aug 20 24:00 0 -
|
||||
Rule Egypt 2010 only - Aug 10 24:00 0 -
|
||||
@ -379,22 +373,7 @@ Rule Egypt 2010 only - Sep lastThu 24:00 0 -
|
||||
Rule Egypt 2014 only - May 15 24:00 1:00 S
|
||||
Rule Egypt 2014 only - Jun 26 24:00 0 -
|
||||
Rule Egypt 2014 only - Jul 31 24:00 1:00 S
|
||||
Rule Egypt 2014 max - Sep lastThu 24:00 0 -
|
||||
Rule Egypt 2015 2019 - Apr lastFri 0:00s 1:00 S
|
||||
Rule Egypt 2015 only - Jun 11 24:00 0 -
|
||||
Rule Egypt 2015 only - Jul 23 24:00 1:00 S
|
||||
Rule Egypt 2016 only - Jun 2 24:00 0 -
|
||||
Rule Egypt 2016 only - Jul 7 24:00 1:00 S
|
||||
Rule Egypt 2017 only - May 25 24:00 0 -
|
||||
Rule Egypt 2017 only - Jun 29 24:00 1:00 S
|
||||
Rule Egypt 2018 only - May 10 24:00 0 -
|
||||
Rule Egypt 2018 only - Jun 14 24:00 1:00 S
|
||||
Rule Egypt 2019 only - May 2 24:00 0 -
|
||||
Rule Egypt 2019 only - Jun 6 24:00 1:00 S
|
||||
Rule Egypt 2020 only - May 28 24:00 1:00 S
|
||||
Rule Egypt 2021 only - May 13 24:00 1:00 S
|
||||
Rule Egypt 2022 only - May 5 24:00 1:00 S
|
||||
Rule Egypt 2023 max - Apr lastFri 0:00s 1:00 S
|
||||
Rule Egypt 2014 only - Sep lastThu 24:00 0 -
|
||||
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
Zone Africa/Cairo 2:05:09 - LMT 1900 Oct
|
||||
|
@ -38,41 +38,6 @@
|
||||
# I made up all time zone abbreviations mentioned here; corrections welcome!
|
||||
# FORMAT is 'zzz' and GMTOFF is 0 for locations while uninhabited.
|
||||
|
||||
# These rules are stolen from the 'southamerica' file.
|
||||
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
|
||||
Rule ArgAQ 1964 1966 - Mar 1 0:00 0 -
|
||||
Rule ArgAQ 1964 1966 - Oct 15 0:00 1:00 S
|
||||
Rule ArgAQ 1967 only - Apr 2 0:00 0 -
|
||||
Rule ArgAQ 1967 1968 - Oct Sun>=1 0:00 1:00 S
|
||||
Rule ArgAQ 1968 1969 - Apr Sun>=1 0:00 0 -
|
||||
Rule ArgAQ 1974 only - Jan 23 0:00 1:00 S
|
||||
Rule ArgAQ 1974 only - May 1 0:00 0 -
|
||||
Rule ChileAQ 1972 1986 - Mar Sun>=9 3:00u 0 -
|
||||
Rule ChileAQ 1974 1987 - Oct Sun>=9 4:00u 1:00 S
|
||||
Rule ChileAQ 1987 only - Apr 12 3:00u 0 -
|
||||
Rule ChileAQ 1988 1989 - Mar Sun>=9 3:00u 0 -
|
||||
Rule ChileAQ 1988 only - Oct Sun>=1 4:00u 1:00 S
|
||||
Rule ChileAQ 1989 only - Oct Sun>=9 4:00u 1:00 S
|
||||
Rule ChileAQ 1990 only - Mar 18 3:00u 0 -
|
||||
Rule ChileAQ 1990 only - Sep 16 4:00u 1:00 S
|
||||
Rule ChileAQ 1991 1996 - Mar Sun>=9 3:00u 0 -
|
||||
Rule ChileAQ 1991 1997 - Oct Sun>=9 4:00u 1:00 S
|
||||
Rule ChileAQ 1997 only - Mar 30 3:00u 0 -
|
||||
Rule ChileAQ 1998 only - Mar Sun>=9 3:00u 0 -
|
||||
Rule ChileAQ 1998 only - Sep 27 4:00u 1:00 S
|
||||
Rule ChileAQ 1999 only - Apr 4 3:00u 0 -
|
||||
Rule ChileAQ 1999 2010 - Oct Sun>=9 4:00u 1:00 S
|
||||
Rule ChileAQ 2000 2007 - Mar Sun>=9 3:00u 0 -
|
||||
# N.B.: the end of March 29 in Chile is March 30 in Universal time,
|
||||
# which is used below in specifying the transition.
|
||||
Rule ChileAQ 2008 only - Mar 30 3:00u 0 -
|
||||
Rule ChileAQ 2009 only - Mar Sun>=9 3:00u 0 -
|
||||
Rule ChileAQ 2010 only - Apr Sun>=1 3:00u 0 -
|
||||
Rule ChileAQ 2011 only - May Sun>=2 3:00u 0 -
|
||||
Rule ChileAQ 2011 only - Aug Sun>=16 4:00u 1:00 S
|
||||
Rule ChileAQ 2012 2015 - Apr Sun>=23 3:00u 0 -
|
||||
Rule ChileAQ 2012 2014 - Sep Sun>=2 4:00u 1:00 S
|
||||
|
||||
# Argentina - year-round bases
|
||||
# Belgrano II, Confin Coast, -770227-0343737, since 1972-02-05
|
||||
# Carlini, Potter Cove, King George Island, -6414-0602320, since 1982-01
|
||||
@ -367,21 +332,7 @@ Zone Antarctica/Rothera 0 - zzz 1976 Dec 1
|
||||
# USA - year-round bases
|
||||
#
|
||||
# Palmer, Anvers Island, since 1965 (moved 2 miles in 1968)
|
||||
#
|
||||
# From Ethan Dicks (1996-10-06):
|
||||
# It keeps the same time as Punta Arenas, Chile, because, just like us
|
||||
# and the South Pole, that's the other end of their supply line....
|
||||
# I verified with someone who was there that since 1980,
|
||||
# Palmer has followed Chile. Prior to that, before the Falklands War,
|
||||
# Palmer used to be supplied from Argentina.
|
||||
#
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
Zone Antarctica/Palmer 0 - zzz 1965
|
||||
-4:00 ArgAQ AR%sT 1969 Oct 5
|
||||
-3:00 ArgAQ AR%sT 1982 May
|
||||
-4:00 ChileAQ CL%sT 2015 Apr 26 3:00u
|
||||
-3:00 - CLT
|
||||
#
|
||||
# See 'southamerica' for Antarctica/Palmer, since it uses South American DST.
|
||||
#
|
||||
# McMurdo Station, Ross Island, since 1955-12
|
||||
# Amundsen-Scott South Pole Station, continuously occupied since 1956-11-20
|
||||
|
@ -43,6 +43,7 @@ Link America/Argentina/Jujuy America/Jujuy
|
||||
Link America/Indiana/Knox America/Knox_IN
|
||||
Link America/Kentucky/Louisville America/Louisville
|
||||
Link America/Argentina/Mendoza America/Mendoza
|
||||
Link America/Toronto America/Montreal
|
||||
Link America/Rio_Branco America/Porto_Acre
|
||||
Link America/Argentina/Cordoba America/Rosario
|
||||
Link America/Denver America/Shiprock
|
||||
|
@ -99,7 +99,7 @@
|
||||
# 1:00:14 SET Swedish (1879-1899)*
|
||||
# 2:00 EET EEST Eastern Europe
|
||||
# 3:00 FET Further-eastern Europe (2011-2014)*
|
||||
# 3:00 MSK MSD MSM* Moscow
|
||||
# 3:00 MSK MSD MSM* Minsk, Moscow
|
||||
|
||||
# From Peter Ilieve (1994-12-04),
|
||||
# The original six [EU members]: Belgium, France, (West) Germany, Italy,
|
||||
|
@ -250,9 +250,14 @@ Zone PST8PDT -8:00 US P%sT
|
||||
# The law doesn't give abbreviations.
|
||||
#
|
||||
# From Paul Eggert (2000-01-08), following a heads-up from Rives McDow:
|
||||
# Public law 106-564 (2000-12-23) introduced the abbreviation
|
||||
# "Chamorro Standard Time" for time in Guam and the Northern Marianas.
|
||||
# See the file "australasia".
|
||||
# Public law 106-564 (2000-12-23) introduced ... "Chamorro Standard Time"
|
||||
# for time in Guam and the Northern Marianas. See the file "australasia".
|
||||
#
|
||||
# From Paul Eggert (2015-04-17):
|
||||
# HST and HDT are standardized abbreviations for Hawaii-Aleutian
|
||||
# standard and daylight times. See section 9.47 (p 234) of the
|
||||
# U.S. Government Printing Office Style Manual (2008)
|
||||
# http://www.gpo.gov/fdsys/pkg/GPO-STYLEMANUAL-2008/pdf/GPO-STYLEMANUAL-2008.pdf
|
||||
|
||||
# From Arthur David Olson, 2005-08-09
|
||||
# The following was signed into law on 2005-08-08.
|
||||
@ -559,7 +564,7 @@ Zone America/Adak 12:13:21 - LMT 1867 Oct 18
|
||||
-11:00 - BST 1969
|
||||
-11:00 US B%sT 1983 Oct 30 2:00
|
||||
-10:00 US AH%sT 1983 Nov 30
|
||||
-10:00 US HA%sT
|
||||
-10:00 US H%sT
|
||||
# The following switches don't quite make our 1970 cutoff.
|
||||
#
|
||||
# Shanks writes that part of southwest Alaska (e.g. Aniak)
|
||||
@ -1354,14 +1359,9 @@ Zone America/Moncton -4:19:08 - LMT 1883 Dec 9
|
||||
|
||||
# Quebec
|
||||
|
||||
# From Paul Eggert (2013-08-30):
|
||||
# Since 1970 most of Quebec has been like Toronto.
|
||||
# However, because earlier versions of the tz database mistakenly relied on data
|
||||
# from Shanks & Pottenger saying that Quebec differed from Ontario after 1970,
|
||||
# a separate entry was created for most of Quebec. We're loath to lose
|
||||
# its pre-1970 info, even though the tz database is normally limited to
|
||||
# zones that differ after 1970, so keep this otherwise out-of-scope entry.
|
||||
|
||||
# From Paul Eggert (2015-03-24):
|
||||
# See America/Toronto for most of Quebec, including Montreal.
|
||||
#
|
||||
# Matthews and Vincent (1998) also write that Quebec east of the -63
|
||||
# meridian is supposed to observe AST, but residents as far east as
|
||||
# Natashquan use EST/EDT, and residents east of Natashquan use AST.
|
||||
@ -1375,39 +1375,10 @@ Zone America/Moncton -4:19:08 - LMT 1883 Dec 9
|
||||
# For lack of better info, guess this practice began around 1970, contra to
|
||||
# Shanks & Pottenger who have this region observing AST/ADT.
|
||||
|
||||
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
|
||||
Rule Mont 1917 only - Mar 25 2:00 1:00 D
|
||||
Rule Mont 1917 only - Apr 24 0:00 0 S
|
||||
Rule Mont 1919 only - Mar 31 2:30 1:00 D
|
||||
Rule Mont 1919 only - Oct 25 2:30 0 S
|
||||
Rule Mont 1920 only - May 2 2:30 1:00 D
|
||||
Rule Mont 1920 1922 - Oct Sun>=1 2:30 0 S
|
||||
Rule Mont 1921 only - May 1 2:00 1:00 D
|
||||
Rule Mont 1922 only - Apr 30 2:00 1:00 D
|
||||
Rule Mont 1924 only - May 17 2:00 1:00 D
|
||||
Rule Mont 1924 1926 - Sep lastSun 2:30 0 S
|
||||
Rule Mont 1925 1926 - May Sun>=1 2:00 1:00 D
|
||||
Rule Mont 1927 1937 - Apr lastSat 24:00 1:00 D
|
||||
Rule Mont 1927 1937 - Sep lastSat 24:00 0 S
|
||||
Rule Mont 1938 1940 - Apr lastSun 0:00 1:00 D
|
||||
Rule Mont 1938 1939 - Sep lastSun 0:00 0 S
|
||||
Rule Mont 1946 1973 - Apr lastSun 2:00 1:00 D
|
||||
Rule Mont 1945 1948 - Sep lastSun 2:00 0 S
|
||||
Rule Mont 1949 1950 - Oct lastSun 2:00 0 S
|
||||
Rule Mont 1951 1956 - Sep lastSun 2:00 0 S
|
||||
Rule Mont 1957 1973 - Oct lastSun 2:00 0 S
|
||||
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
Zone America/Blanc-Sablon -3:48:28 - LMT 1884
|
||||
-4:00 Canada A%sT 1970
|
||||
-4:00 - AST
|
||||
Zone America/Montreal -4:54:16 - LMT 1884
|
||||
-5:00 Mont E%sT 1918
|
||||
-5:00 Canada E%sT 1919
|
||||
-5:00 Mont E%sT 1942 Feb 9 2:00s
|
||||
-5:00 Canada E%sT 1946
|
||||
-5:00 Mont E%sT 1974
|
||||
-5:00 Canada E%sT
|
||||
|
||||
# Ontario
|
||||
|
||||
@ -1898,17 +1869,115 @@ Zone America/Creston -7:46:04 - LMT 1884
|
||||
# Dawson switched to PST in 1973. Inuvik switched to MST in 1979.
|
||||
# Mathew Englander (1996-10-07) gives the following refs:
|
||||
# * 1967. Paragraph 28(34)(g) of the Interpretation Act, S.C. 1967-68,
|
||||
# c. 7 defines Yukon standard time as UTC-9. This is still valid;
|
||||
# c. 7 defines Yukon standard time as UTC-9....
|
||||
# see Interpretation Act, R.S.C. 1985, c. I-21, s. 35(1).
|
||||
# [http://canlii.ca/t/7vhg]
|
||||
# * C.O. 1973/214 switched Yukon to PST on 1973-10-28 00:00.
|
||||
# * O.I.C. 1980/02 established DST.
|
||||
# * O.I.C. 1987/056 changed DST to Apr firstSun 2:00 to Oct lastSun 2:00.
|
||||
# Shanks & Pottenger say Yukon's 1973-10-28 switch was at 2:00; go
|
||||
# with Englander.
|
||||
# From Chris Walton (2006-06-26):
|
||||
# Here is a link to the old daylight saving portion of the interpretation
|
||||
# act which was last updated in 1987:
|
||||
# http://www.gov.yk.ca/legislation/regs/oic1987_056.pdf
|
||||
|
||||
# From Brian Inglis (2015-04-14):
|
||||
#
|
||||
# I tried to trace the history of Yukon time and found the following
|
||||
# regulations, giving the reference title and URL if found, regulation name,
|
||||
# and relevant quote if available. Each regulation specifically revokes its
|
||||
# predecessor. The final reference is to the current Interpretation Act
|
||||
# authorizing and resulting from these regulatory changes.
|
||||
#
|
||||
# Only recent regulations were retrievable via Yukon government site search or
|
||||
# index, and only some via Canadian legal sources. Other sources used include
|
||||
# articles titled "Standard Time and Time Zones in Canada" from JRASC via ADS
|
||||
# Abstracts, cited by ADO for 1932 ..., and updated versions from 1958 and
|
||||
# 1970 quoted below; each article includes current extracts from provincial
|
||||
# and territorial ST and DST regulations at the end, summaries and details of
|
||||
# standard times and daylight saving time at many locations across Canada,
|
||||
# with time zone maps, tables and calculations for Canadian Sunrise, Sunset,
|
||||
# and LMST; they also cover many countries and global locations, with a chart
|
||||
# and table showing current Universal Time offsets, and may be useful as
|
||||
# another source of information for 1970 and earlier.
|
||||
#
|
||||
# * Standard Time and Time Zones in Canada; Smith, C.C.; JRASC, Vol. 26,
|
||||
# pp.49-77; February 1932; SAO/NASA Astrophysics Data System (ADS)
|
||||
# http://adsabs.harvard.edu/abs/1932JRASC..26...49S from p.75:
|
||||
# Yukon Interpretation Ordinance
|
||||
# Yukon standard time is the local mean time at the one hundred and
|
||||
# thirty-fifth meridian.
|
||||
#
|
||||
# * Standard Time and Time Zones in Canada; Smith, C.C.; Thomson, Malcolm M.;
|
||||
# JRASC, Vol. 52, pp.193-223; October 1958; SAO/NASA Astrophysics Data System
|
||||
# (ADS) http://adsabs.harvard.edu/abs/1958JRASC..52..193S from pp.220-1:
|
||||
# Yukon Interpretation Ordinance, 1955, Chap. 16.
|
||||
#
|
||||
# (1) Subject to this section, standard time shall be reckoned as nine
|
||||
# hours behind Greenwich Time and called Yukon Standard Time.
|
||||
#
|
||||
# (2) Notwithstanding subsection (1), the Commissioner may make regulations
|
||||
# varying the manner of reckoning standard time.
|
||||
#
|
||||
# * Yukon Territory Commissioner's Order 1966-20 Interpretation Ordinance
|
||||
# http://? - no online source found
|
||||
#
|
||||
# * Standard Time and Time Zones in Canada; Thomson, Malcolm M.; JRASC,
|
||||
# Vol. 64, pp.129-162; June 1970; SAO/NASA Astrophysics Data System (ADS)
|
||||
# http://adsabs.harvard.edu/abs/1970JRASC..64..129T from p.156: Yukon
|
||||
# Territory Commissioner's Order 1967-59 Interpretation Ordinance ...
|
||||
#
|
||||
# 1. Commissioner's Order 1966-20 dated at Whitehorse in the Yukon
|
||||
# Territory on 27th January, 1966, is hereby revoked.
|
||||
#
|
||||
# 2. Yukon (East) Standard Time as defined by section 36 of the
|
||||
# Interpretation Ordinance from and after mid-night on the 28th day of May,
|
||||
# 1967 shall be reckoned in the same manner as Pacific Standard Time, that
|
||||
# is to say, eight hours behind Greenwich Time in the area of the Yukon
|
||||
# Territory lying east of the 138th degree longitude west.
|
||||
#
|
||||
# 3. In the remainder of the Territory, lying west of the 138th degree
|
||||
# longitude west, Yukon (West) Standard Time shall be reckoned as nine
|
||||
# hours behind Greenwich Time.
|
||||
#
|
||||
# * Yukon Standard Time defined as Pacific Standard Time, YCO 1973/214
|
||||
# http://www.canlii.org/en/yk/laws/regu/yco-1973-214/latest/yco-1973-214.html
|
||||
# C.O. 1973/214 INTERPRETATION ACT ...
|
||||
#
|
||||
# 1. Effective October 28, 1973 Commissioner's Order 1967/59 is hereby
|
||||
# revoked.
|
||||
#
|
||||
# 2. Yukon Standard Time as defined by section 36 of the Interpretation
|
||||
# Act from and after midnight on the twenty-eighth day of October, 1973
|
||||
# shall be reckoned in the same manner as Pacific Standard Time, that is
|
||||
# to say eight hours behind Greenwich Time.
|
||||
#
|
||||
# * O.I.C. 1980/02 INTERPRETATION ACT
|
||||
# http://? - no online source found
|
||||
#
|
||||
# * Yukon Daylight Saving Time, YOIC 1987/56
|
||||
# http://www.canlii.org/en/yk/laws/regu/yoic-1987-56/latest/yoic-1987-56.html
|
||||
# O.I.C. 1987/056 INTERPRETATION ACT ...
|
||||
#
|
||||
# In every year between
|
||||
# (a) two o'clock in the morning in the first Sunday in April, and
|
||||
# (b) two o'clock in the morning in the last Sunday in October,
|
||||
# Standard Time shall be reckoned as seven hours behind Greenwich Time and
|
||||
# called Yukon Daylight Saving Time.
|
||||
# ...
|
||||
# Dated ... 9th day of March, A.D., 1987.
|
||||
#
|
||||
# * Yukon Daylight Saving Time 2006, YOIC 2006/127
|
||||
# http://www.canlii.org/en/yk/laws/regu/yoic-2006-127/latest/yoic-2006-127.html
|
||||
# O.I.C. 2006/127 INTERPRETATION ACT ...
|
||||
#
|
||||
# 1. In Yukon each year the time for general purposes shall be 7 hours
|
||||
# behind Greenwich mean time during the period commencing at two o'clock
|
||||
# in the forenoon on the second Sunday of March and ending at two o'clock
|
||||
# in the forenoon on the first Sunday of November and shall be called
|
||||
# Yukon Daylight Saving Time.
|
||||
#
|
||||
# 2. Order-in-Council 1987/56 is revoked.
|
||||
#
|
||||
# 3. This order comes into force January 1, 2007.
|
||||
#
|
||||
# * Interpretation Act, RSY 2002, c 125
|
||||
# http://www.canlii.org/en/yk/laws/stat/rsy-2002-c-125/latest/rsy-2002-c-125.html
|
||||
|
||||
# From Rives McDow (1999-09-04):
|
||||
# Nunavut ... moved ... to incorporate the whole territory into one time zone.
|
||||
@ -2134,7 +2203,7 @@ Zone America/Inuvik 0 - zzz 1953 # Inuvik founded
|
||||
-7:00 NT_YK M%sT 1980
|
||||
-7:00 Canada M%sT
|
||||
Zone America/Whitehorse -9:00:12 - LMT 1900 Aug 20
|
||||
-9:00 NT_YK Y%sT 1966 Jul 1 2:00
|
||||
-9:00 NT_YK Y%sT 1967 May 28 0:00
|
||||
-8:00 NT_YK P%sT 1980
|
||||
-8:00 Canada P%sT
|
||||
Zone America/Dawson -9:17:40 - LMT 1900 Aug 20
|
||||
|
@ -1121,6 +1121,60 @@ Zone America/Rio_Branco -4:31:12 - LMT 1914
|
||||
|
||||
# Chile
|
||||
|
||||
# From Paul Eggert (2015-04-03):
|
||||
# Shanks & Pottenger says America/Santiago introduced standard time in
|
||||
# 1890 and rounds its UTC offset to 70W40; guess that in practice this
|
||||
# was the same offset as in 1916-1919. It also says Pacific/Easter
|
||||
# standardized on 109W22 in 1890; assume this didn't change the clocks.
|
||||
#
|
||||
# Dates for America/Santiago from 1910 to 2004 are primarily from
|
||||
# the following source, cited by Oscar van Vlijmen (2006-10-08):
|
||||
# [1] Chile Law
|
||||
# http://www.webexhibits.org/daylightsaving/chile.html
|
||||
# This contains a copy of a this official table:
|
||||
# Cambios en la hora oficial de Chile desde 1900 (retrieved 2008-03-30)
|
||||
# http://web.archive.org/web/20080330200901/http://www.horaoficial.cl/cambio.htm
|
||||
# [1] needs several corrections, though.
|
||||
#
|
||||
# The first set of corrections is from:
|
||||
# [2] History of the Official Time of Chile
|
||||
# http://www.horaoficial.cl/ing/horaof_ing.html (retrieved 2012-03-06). See:
|
||||
# http://web.archive.org/web/20120306042032/http://www.horaoficial.cl/ing/horaof_ing.html
|
||||
# This is an English translation of:
|
||||
# Historia de la hora oficial de Chile (retrieved 2012-10-24). See:
|
||||
# http://web.archive.org/web/20121024234627/http://www.horaoficial.cl/horaof.htm
|
||||
# A fancier Spanish version (requiring mouse-clicking) is at:
|
||||
# http://www.horaoficial.cl/historia_hora.html
|
||||
# Conflicts between [1] and [2] were resolved as follows:
|
||||
#
|
||||
# - [1] says the 1910 transition was Jan 1, [2] says Jan 10 and cites
|
||||
# Boletín Nº 1, Aviso Nº 1 (1910). Go with [2].
|
||||
#
|
||||
# - [1] says SMT was -4:42:45, [2] says Chile's official time from
|
||||
# 1916 to 1919 was -4:42:46.3, the meridian of Chile's National
|
||||
# Astronomical Observatory (OAN), then located in what is now
|
||||
# Quinta Normal in Santiago. Go with [2], rounding it to -4:42:46.
|
||||
#
|
||||
# - [1] says the 1918 transition was Sep 1, [2] says Sep 10 and cites
|
||||
# Boletín Nº 22, Aviso Nº 129/1918 (1918-08-23). Go with [2].
|
||||
#
|
||||
# - [1] does not give times for transitions; assume they occur
|
||||
# at midnight mainland time, the current common practice. However,
|
||||
# go with [2]'s specification of 23:00 for the 1947-05-21 transition.
|
||||
#
|
||||
# Another correction to [1] is from Jesper Nørgaard Welen, who
|
||||
# wrote (2006-10-08), "I think that there are some obvious mistakes in
|
||||
# the suggested link from Oscar van Vlijmen,... for instance entry 66
|
||||
# says that GMT-4 ended 1990-09-12 while entry 67 only begins GMT-3 at
|
||||
# 1990-09-15 (they should have been 1990-09-15 and 1990-09-16
|
||||
# respectively), but anyhow it clears up some doubts too."
|
||||
#
|
||||
# Data for Pacific/Easter from 1910 through 1967 come from Shanks &
|
||||
# Pottenger. After that, for lack of better info assume
|
||||
# Pacific/Easter is always two hours behind America/Santiago;
|
||||
# this is known to work for DST transitions starting in 2008 and
|
||||
# may well be true for earlier transitions.
|
||||
|
||||
# From Eduardo Krell (1995-10-19):
|
||||
# The law says to switch to DST at midnight [24:00] on the second SATURDAY
|
||||
# of October.... The law is the same for March and October.
|
||||
@ -1133,78 +1187,35 @@ Zone America/Rio_Branco -4:31:12 - LMT 1914
|
||||
# Because of the same drought, the government decided to end DST later,
|
||||
# on April 3, (one-time change).
|
||||
|
||||
# From Oscar van Vlijmen (2006-10-08):
|
||||
# http://www.horaoficial.cl/cambio.htm
|
||||
|
||||
# From Jesper Nørgaard Welen (2006-10-08):
|
||||
# I think that there are some obvious mistakes in the suggested link
|
||||
# from Oscar van Vlijmen,... for instance entry 66 says that GMT-4
|
||||
# ended 1990-09-12 while entry 67 only begins GMT-3 at 1990-09-15
|
||||
# (they should have been 1990-09-15 and 1990-09-16 respectively), but
|
||||
# anyhow it clears up some doubts too.
|
||||
|
||||
# From Paul Eggert (2014-08-12):
|
||||
# The following data entries for Chile and America/Santiago are from
|
||||
# <http://www.horaoficial.cl/horaof.htm> (2006-09-20), transcribed by
|
||||
# Jesper Nørgaard Welen. The data entries for Pacific/Easter are from Shanks
|
||||
# & Pottenger, except with DST transitions after 1932 cloned from
|
||||
# America/Santiago. The pre-1980 Pacific/Easter data entries are dubious,
|
||||
# but we have no other source.
|
||||
|
||||
# From Germán Poo-Caamaño (2008-03-03):
|
||||
# Due to drought, Chile extends Daylight Time in three weeks. This
|
||||
# is one-time change (Saturday 3/29 at 24:00 for America/Santiago
|
||||
# and Saturday 3/29 at 22:00 for Pacific/Easter)
|
||||
# The Supreme Decree is located at
|
||||
# http://www.shoa.cl/servicios/supremo316.pdf
|
||||
# and the instructions for 2008 are located in:
|
||||
# http://www.horaoficial.cl/cambio.htm
|
||||
|
||||
#
|
||||
# From José Miguel Garrido (2008-03-05):
|
||||
# ...
|
||||
# You could see the announces of the change on
|
||||
# http://www.shoa.cl/noticias/2008/04hora/hora.htm
|
||||
|
||||
# From Angel Chiang (2010-03-04):
|
||||
# Subject: DST in Chile exceptionally extended to 3 April due to earthquake
|
||||
# http://www.gobiernodechile.cl/viewNoticia.aspx?idArticulo=30098
|
||||
# (in Spanish, last paragraph).
|
||||
#
|
||||
# This is breaking news. There should be more information available later.
|
||||
|
||||
# From Arthur David Olson (2010-03-06):
|
||||
# Angel Chiang's message confirmed by Julio Pacheco; Julio provided a patch.
|
||||
|
||||
# From Glenn Eychaner (2011-03-02):
|
||||
# It appears that the Chilean government has decided to postpone the
|
||||
# change from summer time to winter time again, by three weeks to April
|
||||
# 2nd:
|
||||
# http://www.emol.com/noticias/nacional/detalle/detallenoticias.asp?idnoticia=467651
|
||||
#
|
||||
# This is not yet reflected in the official "cambio de hora" site, but
|
||||
# probably will be soon:
|
||||
# http://www.horaoficial.cl/cambio.htm
|
||||
|
||||
# From Arthur David Olson (2011-03-02):
|
||||
# The emol.com article mentions a water shortage as the cause of the
|
||||
# postponement, which may mean that it's not a permanent change.
|
||||
|
||||
# From Glenn Eychaner (2011-03-28):
|
||||
# The article:
|
||||
# http://diario.elmercurio.com/2011/03/28/_portada/_portada/noticias/7565897A-CA86-49E6-9E03-660B21A4883E.htm?id=3D{7565897A-CA86-49E6-9E03-660B21A4883E}
|
||||
#
|
||||
# In English:
|
||||
# Chile's clocks will go back an hour this year on the 7th of May instead
|
||||
# of this Saturday. They will go forward again the 3rd Saturday in
|
||||
# August, not in October as they have since 1968. This is a pilot plan
|
||||
# which will be reevaluated in 2012.
|
||||
# August, not in October as they have since 1968.
|
||||
|
||||
# From Mauricio Parada (2012-02-22), translated by Glenn Eychaner (2012-02-23):
|
||||
# As stated in the website of the Chilean Energy Ministry
|
||||
# http://www.minenergia.cl/ministerio/noticias/generales/gobierno-anuncia-fechas-de-cambio-de.html
|
||||
# The Chilean Government has decided to postpone the entrance into winter time
|
||||
# (to leave DST) from March 11 2012 to April 28th 2012. The decision has not
|
||||
# been yet formalized but it will within the next days.
|
||||
# (to leave DST) from March 11 2012 to April 28th 2012....
|
||||
# Quote from the website communication:
|
||||
#
|
||||
# 6. For the year 2012, the dates of entry into winter time will be as follows:
|
||||
@ -1237,17 +1248,9 @@ Zone America/Rio_Branco -4:31:12 - LMT 1914
|
||||
# From Paul Eggert (2015-03-03):
|
||||
# For now, assume that the extension will persist indefinitely.
|
||||
|
||||
# NOTE: ChileAQ rules for Antarctic bases are stored separately in the
|
||||
# 'antarctica' file.
|
||||
|
||||
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
|
||||
Rule Chile 1927 1932 - Sep 1 0:00 1:00 S
|
||||
Rule Chile 1927 1931 - Sep 1 0:00 1:00 S
|
||||
Rule Chile 1928 1932 - Apr 1 0:00 0 -
|
||||
Rule Chile 1942 only - Jun 1 4:00u 0 -
|
||||
Rule Chile 1942 only - Aug 1 5:00u 1:00 S
|
||||
Rule Chile 1946 only - Jul 15 4:00u 1:00 S
|
||||
Rule Chile 1946 only - Sep 1 3:00u 0:00 -
|
||||
Rule Chile 1947 only - Apr 1 4:00u 0 -
|
||||
Rule Chile 1968 only - Nov 3 4:00u 1:00 S
|
||||
Rule Chile 1969 only - Mar 30 3:00u 0 -
|
||||
Rule Chile 1969 only - Nov 23 4:00u 1:00 S
|
||||
@ -1258,10 +1261,8 @@ Rule Chile 1972 1986 - Mar Sun>=9 3:00u 0 -
|
||||
Rule Chile 1973 only - Sep 30 4:00u 1:00 S
|
||||
Rule Chile 1974 1987 - Oct Sun>=9 4:00u 1:00 S
|
||||
Rule Chile 1987 only - Apr 12 3:00u 0 -
|
||||
Rule Chile 1988 1989 - Mar Sun>=9 3:00u 0 -
|
||||
Rule Chile 1988 only - Oct Sun>=1 4:00u 1:00 S
|
||||
Rule Chile 1989 only - Oct Sun>=9 4:00u 1:00 S
|
||||
Rule Chile 1990 only - Mar 18 3:00u 0 -
|
||||
Rule Chile 1988 1990 - Mar Sun>=9 3:00u 0 -
|
||||
Rule Chile 1988 1989 - Oct Sun>=9 4:00u 1:00 S
|
||||
Rule Chile 1990 only - Sep 16 4:00u 1:00 S
|
||||
Rule Chile 1991 1996 - Mar Sun>=9 3:00u 0 -
|
||||
Rule Chile 1991 1997 - Oct Sun>=9 4:00u 1:00 S
|
||||
@ -1284,15 +1285,21 @@ Rule Chile 2012 2014 - Sep Sun>=2 4:00u 1:00 S
|
||||
# (1996-09) says 1998-03-08. Ignore these.
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
Zone America/Santiago -4:42:46 - LMT 1890
|
||||
-4:42:46 - SMT 1910 # Santiago Mean Time
|
||||
-4:42:46 - SMT 1910 Jan 10 # Santiago Mean Time
|
||||
-5:00 - CLT 1916 Jul 1 # Chile Time
|
||||
-4:42:46 - SMT 1918 Sep 1 # Santiago Mean Time
|
||||
-4:00 - CLT 1919 Jul 1 # Chile Time
|
||||
-4:42:46 - SMT 1927 Sep 1 # Santiago Mean Time
|
||||
-5:00 Chile CL%sT 1947 May 22 # Chile Time
|
||||
-4:42:46 - SMT 1918 Sep 10
|
||||
-4:00 - CLT 1919 Jul 1
|
||||
-4:42:46 - SMT 1927 Sep 1
|
||||
-5:00 Chile CL%sT 1932 Sep 1
|
||||
-4:00 - CLT 1942 Jun 1
|
||||
-5:00 - CLT 1942 Aug 1
|
||||
-4:00 - CLT 1946 Jul 15
|
||||
-4:00 1:00 CLST 1946 Sep 1 # central Chile
|
||||
-4:00 - CLT 1947 Apr 1
|
||||
-5:00 - CLT 1947 May 21 23:00
|
||||
-4:00 Chile CL%sT 2015 Apr 26 3:00u
|
||||
-3:00 - CLT
|
||||
Zone Pacific/Easter -7:17:44 - LMT 1890
|
||||
Zone Pacific/Easter -7:17:28 - LMT 1890
|
||||
-7:17:28 - EMT 1932 Sep # Easter Mean Time
|
||||
-7:00 Chile EAS%sT 1982 Mar 14 3:00u # Easter Time
|
||||
-6:00 Chile EAS%sT 2015 Apr 26 3:00u
|
||||
@ -1302,6 +1309,25 @@ Zone Pacific/Easter -7:17:44 - LMT 1890
|
||||
# Other Chilean locations, including Juan Fernández Is, Desventuradas Is,
|
||||
# and Antarctic bases, are like America/Santiago.
|
||||
|
||||
# Antarctic base using South American rules
|
||||
# (See the file 'antarctica' for more.)
|
||||
#
|
||||
# Palmer, Anvers Island, since 1965 (moved 2 miles in 1968)
|
||||
#
|
||||
# From Ethan Dicks (1996-10-06):
|
||||
# It keeps the same time as Punta Arenas, Chile, because, just like us
|
||||
# and the South Pole, that's the other end of their supply line....
|
||||
# I verified with someone who was there that since 1980,
|
||||
# Palmer has followed Chile. Prior to that, before the Falklands War,
|
||||
# Palmer used to be supplied from Argentina.
|
||||
#
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
Zone Antarctica/Palmer 0 - zzz 1965
|
||||
-4:00 Arg AR%sT 1969 Oct 5
|
||||
-3:00 Arg AR%sT 1982 May
|
||||
-4:00 Chile CL%sT 2015 Apr 26 3:00u
|
||||
-3:00 - CLT
|
||||
|
||||
# Colombia
|
||||
|
||||
# Milne gives 4:56:16.4 for Bogotá time in 1899; round to nearest. He writes,
|
||||
|
@ -827,7 +827,7 @@ ifndef BUILD_HEADLESS_ONLY
|
||||
LIBSPLASHSCREEN_DIRS += $(JDK_TOPDIR)/src/java.desktop/macosx/native/libsplashscreen
|
||||
endif
|
||||
|
||||
LIBSPLASHSCREEN_CFLAGS += -DSPLASHSCREEN -DPNG_NO_MMX_CODE \
|
||||
LIBSPLASHSCREEN_CFLAGS += -DSPLASHSCREEN -DPNG_NO_MMX_CODE -DPNG_ARM_NEON_OPT=0 \
|
||||
$(addprefix -I, $(LIBSPLASHSCREEN_DIRS)) \
|
||||
$(LIBJAVA_HEADER_FLAGS) \
|
||||
#
|
||||
|
@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
#
|
||||
# This code is free software; you can redistribute it and/or modify it
|
||||
@ -25,6 +25,9 @@
|
||||
|
||||
include LibCommon.gmk
|
||||
|
||||
# Hook to include the corresponding custom file, if present.
|
||||
$(eval $(call IncludeCustomExtension, jdk, lib/Lib-java.instrument.gmk))
|
||||
|
||||
################################################################################
|
||||
|
||||
LIBINSTRUMENT_SRC := $(JDK_TOPDIR)/src/java.instrument/share/native/libinstrument \
|
||||
|
@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
#
|
||||
# This code is free software; you can redistribute it and/or modify it
|
||||
@ -30,33 +30,14 @@ $(eval $(call IncludeCustomExtension, jdk, lib/Lib-java.management.gmk))
|
||||
|
||||
################################################################################
|
||||
|
||||
BUILD_LIBMANAGEMENT_SRC += $(JDK_TOPDIR)/src/java.management/share/native/libmanagement \
|
||||
LIBMANAGEMENT_SRC += $(JDK_TOPDIR)/src/java.management/share/native/libmanagement \
|
||||
$(JDK_TOPDIR)/src/java.management/$(OPENJDK_TARGET_OS_TYPE)/native/libmanagement
|
||||
BUILD_LIBMANAGEMENT_CFLAGS := -I$(JDK_TOPDIR)/src/java.management/share/native/include \
|
||||
$(addprefix -I,$(BUILD_LIBMANAGEMENT_SRC)) \
|
||||
LIBMANAGEMENT_CFLAGS := -I$(JDK_TOPDIR)/src/java.management/share/native/include \
|
||||
$(addprefix -I,$(LIBMANAGEMENT_SRC)) \
|
||||
-I$(SUPPORT_OUTPUTDIR)/headers/java.management \
|
||||
$(LIBJAVA_HEADER_FLAGS) \
|
||||
#
|
||||
|
||||
# In (at least) VS2013 and later, -DPSAPI_VERSION=1 is needed to generate
|
||||
# a binary that is compatible with windows versions older than 7/2008R2.
|
||||
# See MSDN documentation for GetProcessMemoryInfo for more information.
|
||||
BUILD_LIBMANAGEMENT_CFLAGS += -DPSAPI_VERSION=1
|
||||
|
||||
BUILD_LIBMANAGEMENT_EXCLUDES :=
|
||||
|
||||
ifneq ($(OPENJDK_TARGET_OS), solaris)
|
||||
BUILD_LIBMANAGEMENT_EXCLUDES += SolarisOperatingSystem.c
|
||||
endif
|
||||
|
||||
ifneq ($(OPENJDK_TARGET_OS), linux)
|
||||
BUILD_LIBMANAGEMENT_EXCLUDES += LinuxOperatingSystem.c
|
||||
endif
|
||||
|
||||
ifneq ($(OPENJDK_TARGET_OS), macosx)
|
||||
BUILD_LIBMANAGEMENT_EXCLUDES += MacosxOperatingSystem.c
|
||||
endif
|
||||
|
||||
LIBMANAGEMENT_OPTIMIZATION := HIGH
|
||||
ifneq ($(findstring $(OPENJDK_TARGET_OS), solaris linux), )
|
||||
ifeq ($(ENABLE_DEBUG_SYMBOLS), true)
|
||||
@ -64,17 +45,13 @@ ifneq ($(findstring $(OPENJDK_TARGET_OS), solaris linux), )
|
||||
endif
|
||||
endif
|
||||
|
||||
# Make it possible to override this variable
|
||||
LIBMANAGEMENT_MAPFILE ?= $(JDK_TOPDIR)/make/mapfiles/libmanagement/mapfile-vers
|
||||
|
||||
$(eval $(call SetupNativeCompilation,BUILD_LIBMANAGEMENT, \
|
||||
LIBRARY := management, \
|
||||
OUTPUT_DIR := $(INSTALL_LIBRARIES_HERE), \
|
||||
SRC := $(BUILD_LIBMANAGEMENT_SRC), \
|
||||
EXCLUDE_FILES := $(BUILD_LIBMANAGEMENT_EXCLUDES), \
|
||||
SRC := $(LIBMANAGEMENT_SRC), \
|
||||
OPTIMIZATION := $(LIBMANAGEMENT_OPTIMIZATION), \
|
||||
CFLAGS := $(CFLAGS_JDKLIB) $(CFLAGS_WARNINGS_ARE_ERRORS) $(BUILD_LIBMANAGEMENT_CFLAGS), \
|
||||
MAPFILE := $(LIBMANAGEMENT_MAPFILE), \
|
||||
CFLAGS := $(CFLAGS_JDKLIB) $(CFLAGS_WARNINGS_ARE_ERRORS) $(LIBMANAGEMENT_CFLAGS), \
|
||||
MAPFILE := $(JDK_TOPDIR)/make/mapfiles/libmanagement/mapfile-vers, \
|
||||
LDFLAGS := $(LDFLAGS_JDKLIB) \
|
||||
$(call SET_SHARED_LIBRARY_ORIGIN), \
|
||||
LDFLAGS_solaris := -lkstat, \
|
||||
|
@ -49,6 +49,7 @@ $(eval $(call SetupNativeCompilation,BUILD_LIBHPROF, \
|
||||
CFLAGS := $(CFLAGS_JDKLIB) $(CFLAGS_WARNINGS_ARE_ERRORS) \
|
||||
$(BUILD_LIBHPROF_CFLAGS), \
|
||||
CFLAGS_debug := -DHPROF_LOGGING, \
|
||||
CFLAGS_windows := -D_WINSOCK_DEPRECATED_NO_WARNINGS, \
|
||||
MAPFILE := $(JDK_TOPDIR)/make/mapfiles/libhprof/mapfile-vers, \
|
||||
LDFLAGS := $(LDFLAGS_JDKLIB) \
|
||||
$(call SET_SHARED_LIBRARY_ORIGIN), \
|
||||
|
80
jdk/make/lib/Lib-jdk.management.gmk
Normal file
80
jdk/make/lib/Lib-jdk.management.gmk
Normal file
@ -0,0 +1,80 @@
|
||||
#
|
||||
# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
#
|
||||
# This code is free software; you can redistribute it and/or modify it
|
||||
# under the terms of the GNU General Public License version 2 only, as
|
||||
# published by the Free Software Foundation. Oracle designates this
|
||||
# particular file as subject to the "Classpath" exception as provided
|
||||
# by Oracle in the LICENSE file that accompanied this code.
|
||||
#
|
||||
# This code is distributed in the hope that it will be useful, but WITHOUT
|
||||
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
# version 2 for more details (a copy is included in the LICENSE file that
|
||||
# accompanied this code).
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License version
|
||||
# 2 along with this work; if not, write to the Free Software Foundation,
|
||||
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
#
|
||||
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
# or visit www.oracle.com if you need additional information or have any
|
||||
# questions.
|
||||
#
|
||||
|
||||
include LibCommon.gmk
|
||||
|
||||
# Hook to include the corresponding custom file, if present.
|
||||
$(eval $(call IncludeCustomExtension, jdk, lib/Lib-jdk.management.gmk))
|
||||
|
||||
################################################################################
|
||||
|
||||
LIBMANAGEMENT_EXT_SRC += $(JDK_TOPDIR)/src/jdk.management/share/native/libmanagement_ext \
|
||||
$(JDK_TOPDIR)/src/jdk.management/$(OPENJDK_TARGET_OS_TYPE)/native/libmanagement_ext \
|
||||
$(JDK_TOPDIR)/src/jdk.management/$(OPENJDK_TARGET_OS)/native/libmanagement_ext
|
||||
LIBMANAGEMENT_EXT_CFLAGS := -I$(JDK_TOPDIR)/src/java.management/share/native/include \
|
||||
$(addprefix -I,$(LIBMANAGEMENT_EXT_SRC)) \
|
||||
-I$(SUPPORT_OUTPUTDIR)/headers/jdk.management \
|
||||
$(LIBJAVA_HEADER_FLAGS) \
|
||||
#
|
||||
|
||||
# In (at least) VS2013 and later, -DPSAPI_VERSION=1 is needed to generate
|
||||
# a binary that is compatible with windows versions older than 7/2008R2.
|
||||
# See MSDN documentation for GetProcessMemoryInfo for more information.
|
||||
BUILD_LIBMANAGEMENT_EXT_CFLAGS += -DPSAPI_VERSION=1
|
||||
|
||||
LIBMANAGEMENT_EXT_OPTIMIZATION := HIGH
|
||||
ifneq ($(findstring $(OPENJDK_TARGET_OS), solaris linux), )
|
||||
ifeq ($(ENABLE_DEBUG_SYMBOLS), true)
|
||||
LIBMANAGEMENT_EXT_OPTIMIZATION := LOW
|
||||
endif
|
||||
endif
|
||||
|
||||
$(eval $(call SetupNativeCompilation,BUILD_LIBMANAGEMENT_EXT, \
|
||||
LIBRARY := management_ext, \
|
||||
OUTPUT_DIR := $(INSTALL_LIBRARIES_HERE), \
|
||||
SRC := $(LIBMANAGEMENT_EXT_SRC), \
|
||||
LANG := C, \
|
||||
OPTIMIZATION := $(LIBMANAGEMENT_EXT_OPTIMIZATION), \
|
||||
CFLAGS := $(CFLAGS_JDKLIB) $(CFLAGS_WARNINGS_ARE_ERRORS) $(LIBMANAGEMENT_EXT_CFLAGS), \
|
||||
MAPFILE := $(JDK_TOPDIR)/make/mapfiles/libmanagement_ext/mapfile-vers, \
|
||||
LDFLAGS := $(LDFLAGS_JDKLIB) \
|
||||
$(call SET_SHARED_LIBRARY_ORIGIN), \
|
||||
LDFLAGS_solaris := -lkstat, \
|
||||
LDFLAGS_SUFFIX := $(LDFLAGS_JDKLIB_SUFFIX), \
|
||||
LDFLAGS_SUFFIX_windows := jvm.lib psapi.lib $(WIN_JAVA_LIB) advapi32.lib, \
|
||||
LDFLAGS_SUFFIX_aix := -lperfstat,\
|
||||
VERSIONINFO_RESOURCE := $(GLOBAL_VERSION_INFO_RESOURCE), \
|
||||
RC_FLAGS := $(RC_FLAGS) \
|
||||
-D "JDK_FNAME=management_ext.dll" \
|
||||
-D "JDK_INTERNAL_NAME=management_ext" \
|
||||
-D "JDK_FTYPE=0x2L", \
|
||||
OBJECT_DIR := $(SUPPORT_OUTPUTDIR)/native/$(MODULE)/libmanagement_ext, \
|
||||
DEBUG_SYMBOLS := true))
|
||||
|
||||
$(BUILD_LIBMANAGEMENT_EXT): $(call FindLib, java.base, java)
|
||||
|
||||
TARGETS += $(BUILD_LIBMANAGEMENT_EXT)
|
||||
|
||||
################################################################################
|
@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
#
|
||||
# This code is free software; you can redistribute it and/or modify it
|
||||
@ -27,37 +27,10 @@
|
||||
|
||||
SUNWprivate_1.1 {
|
||||
global:
|
||||
Java_sun_management_OperatingSystemImpl_getCommittedVirtualMemorySize0;
|
||||
Java_sun_management_OperatingSystemImpl_getFreePhysicalMemorySize0;
|
||||
Java_sun_management_OperatingSystemImpl_getFreeSwapSpaceSize0;
|
||||
Java_sun_management_OperatingSystemImpl_getMaxFileDescriptorCount0;
|
||||
Java_sun_management_OperatingSystemImpl_getOpenFileDescriptorCount0;
|
||||
Java_sun_management_OperatingSystemImpl_getProcessCpuLoad0;
|
||||
Java_sun_management_OperatingSystemImpl_getProcessCpuTime0;
|
||||
Java_sun_management_OperatingSystemImpl_getSystemCpuLoad0;
|
||||
Java_sun_management_OperatingSystemImpl_getTotalPhysicalMemorySize0;
|
||||
Java_sun_management_OperatingSystemImpl_getTotalSwapSpaceSize0;
|
||||
Java_sun_management_OperatingSystemImpl_initialize0;
|
||||
Java_sun_management_ClassLoadingImpl_setVerboseClass;
|
||||
Java_sun_management_DiagnosticCommandImpl_executeDiagnosticCommand;
|
||||
Java_sun_management_DiagnosticCommandImpl_getDiagnosticCommands;
|
||||
Java_sun_management_DiagnosticCommandImpl_getDiagnosticCommandInfo;
|
||||
Java_sun_management_DiagnosticCommandImpl_setNotificationEnabled;
|
||||
Java_sun_management_FileSystemImpl_isAccessUserOnly0;
|
||||
Java_sun_management_Flag_getAllFlagNames;
|
||||
Java_sun_management_Flag_getFlags;
|
||||
Java_sun_management_Flag_getInternalFlagCount;
|
||||
Java_sun_management_Flag_initialize;
|
||||
Java_sun_management_Flag_setLongValue;
|
||||
Java_sun_management_Flag_setBooleanValue;
|
||||
Java_sun_management_Flag_setStringValue;
|
||||
Java_sun_management_GarbageCollectorImpl_getCollectionCount;
|
||||
Java_sun_management_FileSystemImpl_isAccessUserOnly0;
|
||||
Java_sun_management_GarbageCollectorImpl_getCollectionCount;
|
||||
Java_sun_management_GarbageCollectorImpl_getCollectionTime;
|
||||
Java_sun_management_GarbageCollectorImpl_setNotificationEnabled;
|
||||
Java_sun_management_GcInfoBuilder_fillGcAttributeInfo;
|
||||
Java_sun_management_GcInfoBuilder_getLastGcInfo0;
|
||||
Java_sun_management_GcInfoBuilder_getNumGcExtAttributes;
|
||||
Java_sun_management_HotSpotDiagnostic_dumpHeap0;
|
||||
Java_sun_management_HotspotThread_getInternalThreadCount;
|
||||
Java_sun_management_HotspotThread_getInternalThreadTimes0;
|
||||
Java_sun_management_MemoryImpl_getMemoryManagers0;
|
||||
|
60
jdk/make/mapfiles/libmanagement_ext/mapfile-vers
Normal file
60
jdk/make/mapfiles/libmanagement_ext/mapfile-vers
Normal file
@ -0,0 +1,60 @@
|
||||
#
|
||||
# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
#
|
||||
# This code is free software; you can redistribute it and/or modify it
|
||||
# under the terms of the GNU General Public License version 2 only, as
|
||||
# published by the Free Software Foundation. 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.
|
||||
#
|
||||
|
||||
# Define library interface.
|
||||
|
||||
SUNWprivate_1.1 {
|
||||
global:
|
||||
Java_com_sun_management_internal_OperatingSystemImpl_getCommittedVirtualMemorySize0;
|
||||
Java_com_sun_management_internal_OperatingSystemImpl_getFreePhysicalMemorySize0;
|
||||
Java_com_sun_management_internal_OperatingSystemImpl_getFreeSwapSpaceSize0;
|
||||
Java_com_sun_management_internal_OperatingSystemImpl_getMaxFileDescriptorCount0;
|
||||
Java_com_sun_management_internal_OperatingSystemImpl_getOpenFileDescriptorCount0;
|
||||
Java_com_sun_management_internal_OperatingSystemImpl_getProcessCpuLoad0;
|
||||
Java_com_sun_management_internal_OperatingSystemImpl_getProcessCpuTime0;
|
||||
Java_com_sun_management_internal_OperatingSystemImpl_getSystemCpuLoad0;
|
||||
Java_com_sun_management_internal_OperatingSystemImpl_getTotalPhysicalMemorySize0;
|
||||
Java_com_sun_management_internal_OperatingSystemImpl_getTotalSwapSpaceSize0;
|
||||
Java_com_sun_management_internal_OperatingSystemImpl_initialize0;
|
||||
Java_com_sun_management_internal_DiagnosticCommandImpl_executeDiagnosticCommand;
|
||||
Java_com_sun_management_internal_DiagnosticCommandImpl_getDiagnosticCommands;
|
||||
Java_com_sun_management_internal_DiagnosticCommandImpl_getDiagnosticCommandInfo;
|
||||
Java_com_sun_management_internal_DiagnosticCommandImpl_setNotificationEnabled;
|
||||
Java_com_sun_management_internal_Flag_getAllFlagNames;
|
||||
Java_com_sun_management_internal_Flag_getFlags;
|
||||
Java_com_sun_management_internal_Flag_getInternalFlagCount;
|
||||
Java_com_sun_management_internal_Flag_initialize;
|
||||
Java_com_sun_management_internal_Flag_setLongValue;
|
||||
Java_com_sun_management_internal_Flag_setBooleanValue;
|
||||
Java_com_sun_management_internal_Flag_setStringValue;
|
||||
Java_com_sun_management_internal_GarbageCollectorExtImpl_setNotificationEnabled;
|
||||
Java_com_sun_management_internal_GcInfoBuilder_fillGcAttributeInfo;
|
||||
Java_com_sun_management_internal_GcInfoBuilder_getLastGcInfo0;
|
||||
Java_com_sun_management_internal_GcInfoBuilder_getNumGcExtAttributes;
|
||||
Java_com_sun_management_internal_HotSpotDiagnostic_dumpHeap0;
|
||||
JNI_OnLoad;
|
||||
local:
|
||||
*;
|
||||
};
|
@ -22,6 +22,7 @@ jdk.deploy.osx
|
||||
jdk.hprof.agent
|
||||
jdk.httpserver
|
||||
jdk.jfr
|
||||
jdk.management
|
||||
jdk.management.cmm
|
||||
jdk.naming.rmi
|
||||
jdk.sctp
|
||||
|
@ -38,7 +38,17 @@ import static com.sun.crypto.provider.AESConstants.AES_BLOCK_SIZE;
|
||||
* under section 6.5. It needs to be constructed w/ an initialized
|
||||
* cipher object, and initial counter block(ICB). Given an input X
|
||||
* of arbitrary length, it processes and returns an output which has
|
||||
* the same length as X.
|
||||
* the same length as X. The invariants of this class are:
|
||||
*
|
||||
* (1) The length of intialCounterBlk (and also of its clones, e.g.,
|
||||
* fields counter and counterSave) is equal to AES_BLOCK_SIZE.
|
||||
*
|
||||
* (2) After construction, the field counter never becomes null, it
|
||||
* always contains a byte array of length AES_BLOCK_SIZE.
|
||||
*
|
||||
* If any invariant is broken, failures can occur because the
|
||||
* AESCrypt.encryptBlock method can be intrinsified on the HotSpot VM
|
||||
* (see JDK-8067648 for details).
|
||||
*
|
||||
* <p>This function is used in the implementation of GCM mode.
|
||||
*
|
||||
@ -59,6 +69,10 @@ final class GCTR {
|
||||
// NOTE: cipher should already be initialized
|
||||
GCTR(SymmetricCipher cipher, byte[] initialCounterBlk) {
|
||||
this.aes = cipher;
|
||||
if (initialCounterBlk.length != AES_BLOCK_SIZE) {
|
||||
throw new RuntimeException("length of initial counter block (" + initialCounterBlk.length +
|
||||
") not equal to AES_BLOCK_SIZE (" + AES_BLOCK_SIZE + ")");
|
||||
}
|
||||
this.icb = initialCounterBlk;
|
||||
this.counter = icb.clone();
|
||||
}
|
||||
@ -137,6 +151,8 @@ final class GCTR {
|
||||
* Restores the content of this object to the previous saved one.
|
||||
*/
|
||||
void restore() {
|
||||
this.counter = this.counterSave;
|
||||
if (this.counterSave != null) {
|
||||
this.counter = this.counterSave;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1312,7 +1312,7 @@ public final class Class<T> implements java.io.Serializable,
|
||||
// e) Anonymous classes
|
||||
|
||||
|
||||
// JVM Spec 4.8.6: A class must have an EnclosingMethod
|
||||
// JVM Spec 4.7.7: A class must have an EnclosingMethod
|
||||
// attribute if and only if it is a local class or an
|
||||
// anonymous class.
|
||||
EnclosingMethodInfo enclosingInfo = getEnclosingMethodInfo();
|
||||
@ -1357,28 +1357,7 @@ public final class Class<T> implements java.io.Serializable,
|
||||
simpleName = getName();
|
||||
return simpleName.substring(simpleName.lastIndexOf('.')+1); // strip the package name
|
||||
}
|
||||
// According to JLS3 "Binary Compatibility" (13.1) the binary
|
||||
// name of non-package classes (not top level) is the binary
|
||||
// name of the immediately enclosing class followed by a '$' followed by:
|
||||
// (for nested and inner classes): the simple name.
|
||||
// (for local classes): 1 or more digits followed by the simple name.
|
||||
// (for anonymous classes): 1 or more digits.
|
||||
|
||||
// Since getSimpleBinaryName() will strip the binary name of
|
||||
// the immediately enclosing class, we are now looking at a
|
||||
// string that matches the regular expression "\$[0-9]*"
|
||||
// followed by a simple name (considering the simple of an
|
||||
// anonymous class to be the empty string).
|
||||
|
||||
// Remove leading "\$[0-9]*" from the name
|
||||
int length = simpleName.length();
|
||||
if (length < 1 || simpleName.charAt(0) != '$')
|
||||
throw new InternalError("Malformed class name");
|
||||
int index = 1;
|
||||
while (index < length && isAsciiDigit(simpleName.charAt(index)))
|
||||
index++;
|
||||
// Eventually, this is the empty string iff this is an anonymous class
|
||||
return simpleName.substring(index);
|
||||
return simpleName;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -1489,20 +1468,20 @@ public final class Class<T> implements java.io.Serializable,
|
||||
Class<?> enclosingClass = getEnclosingClass();
|
||||
if (enclosingClass == null) // top level class
|
||||
return null;
|
||||
// Otherwise, strip the enclosing class' name
|
||||
try {
|
||||
return getName().substring(enclosingClass.getName().length());
|
||||
} catch (IndexOutOfBoundsException ex) {
|
||||
throw new InternalError("Malformed class name", ex);
|
||||
}
|
||||
String name = getSimpleBinaryName0();
|
||||
if (name == null) // anonymous class
|
||||
return "";
|
||||
return name;
|
||||
}
|
||||
|
||||
private native String getSimpleBinaryName0();
|
||||
|
||||
/**
|
||||
* Returns {@code true} if this is a local class or an anonymous
|
||||
* class. Returns {@code false} otherwise.
|
||||
*/
|
||||
private boolean isLocalOrAnonymousClass() {
|
||||
// JVM Spec 4.8.6: A class must have an EnclosingMethod
|
||||
// JVM Spec 4.7.7: A class must have an EnclosingMethod
|
||||
// attribute if and only if it is a local class or an
|
||||
// anonymous class.
|
||||
return getEnclosingMethodInfo() != null;
|
||||
|
@ -25,9 +25,10 @@
|
||||
|
||||
package java.lang.invoke;
|
||||
|
||||
import sun.invoke.empty.Empty;
|
||||
import static java.lang.invoke.MethodHandleStatics.*;
|
||||
import static java.lang.invoke.MethodHandles.Lookup.IMPL_LOOKUP;
|
||||
import java.lang.reflect.Field;
|
||||
import sun.misc.Cleaner;
|
||||
|
||||
/**
|
||||
* A {@code CallSite} is a holder for a variable {@link MethodHandle},
|
||||
@ -135,6 +136,50 @@ public class CallSite {
|
||||
this.target = boundTarget;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@code CallSite} dependency context.
|
||||
* VM uses context class to store nmethod dependencies on the call site target.
|
||||
* Can be in 2 states: (a) null; or (b) {@code Cleaner} instance pointing to some Class instance.
|
||||
* Lazily initialized when CallSite instance is linked to some indy call site or VM needs
|
||||
* it to store dependencies. As a corollary, "null" context means there are no dependencies
|
||||
* registered yet. {@code Cleaner} is used in 2 roles:
|
||||
* (a) context class access for VM;
|
||||
* (b) stale context class cleanup.
|
||||
* {@code Cleaner} holds the context class until cleanup action is finished (see {@code PhantomReference}).
|
||||
* Though it's impossible to get the context class using {@code Reference.get()}, VM extracts it directly
|
||||
* from {@code Reference.referent} field.
|
||||
*/
|
||||
private volatile Cleaner context = null;
|
||||
|
||||
/**
|
||||
* Default context.
|
||||
* VM uses it to initialize non-linked CallSite context.
|
||||
*/
|
||||
private static class DefaultContext {}
|
||||
private static final Cleaner DEFAULT_CONTEXT = makeContext(DefaultContext.class, null);
|
||||
|
||||
private static Cleaner makeContext(Class<?> referent, final CallSite holder) {
|
||||
return Cleaner.create(referent,
|
||||
new Runnable() {
|
||||
@Override public void run() {
|
||||
MethodHandleNatives.invalidateDependentNMethods(holder);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/** Initialize context class used for nmethod dependency tracking */
|
||||
/*package-private*/
|
||||
void initContext(Class<?> newContext) {
|
||||
// If there are concurrent actions, exactly one succeeds.
|
||||
if (context == null) {
|
||||
UNSAFE.compareAndSwapObject(this, CONTEXT_OFFSET, /*expected=*/null, makeContext(newContext, this));
|
||||
// No need to care about failed CAS attempt.
|
||||
// Since initContext is called from indy call site linkage in newContext class, there's no risk
|
||||
// that the context class becomes dead while corresponding context cleaner is alive (causing cleanup
|
||||
// action in the wrong context).
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the type of this call site's target.
|
||||
* Although targets may change, any call site's type is permanent, and can never change to an unequal type.
|
||||
@ -246,11 +291,13 @@ public class CallSite {
|
||||
}
|
||||
|
||||
// unsafe stuff:
|
||||
private static final long TARGET_OFFSET;
|
||||
private static final long TARGET_OFFSET;
|
||||
private static final long CONTEXT_OFFSET;
|
||||
static {
|
||||
try {
|
||||
TARGET_OFFSET = UNSAFE.objectFieldOffset(CallSite.class.getDeclaredField("target"));
|
||||
} catch (Exception ex) { throw new Error(ex); }
|
||||
TARGET_OFFSET = UNSAFE.objectFieldOffset(CallSite.class.getDeclaredField("target"));
|
||||
CONTEXT_OFFSET = UNSAFE.objectFieldOffset(CallSite.class.getDeclaredField("context"));
|
||||
} catch (Exception ex) { throw newInternalError(ex); }
|
||||
}
|
||||
|
||||
/*package-private*/
|
||||
|
@ -691,10 +691,4 @@ class DirectMethodHandle extends MethodHandle {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
void customize() {
|
||||
assert(form.customized == null);
|
||||
// No need to customize DMHs.
|
||||
}
|
||||
}
|
||||
|
@ -847,11 +847,7 @@ class InvokerBytecodeGenerator {
|
||||
refKind = REF_invokeVirtual;
|
||||
}
|
||||
|
||||
if (member.getDeclaringClass().isInterface() && refKind == REF_invokeVirtual) {
|
||||
// Methods from Object declared in an interface can be resolved by JVM to invokevirtual kind.
|
||||
// Need to convert it back to invokeinterface to pass verification and make the invocation works as expected.
|
||||
refKind = REF_invokeInterface;
|
||||
}
|
||||
assert(!(member.getDeclaringClass().isInterface() && refKind == REF_invokeVirtual));
|
||||
|
||||
// push arguments
|
||||
emitPushArguments(name);
|
||||
|
@ -281,7 +281,7 @@ class Invokers {
|
||||
outArgs[0] = names[CHECK_TYPE];
|
||||
}
|
||||
if (CHECK_CUSTOM != -1) {
|
||||
names[CHECK_CUSTOM] = new Name(NF_checkCustomized, names[CALL_MH]);
|
||||
names[CHECK_CUSTOM] = new Name(NF_checkCustomized, outArgs[0]);
|
||||
}
|
||||
names[LINKER_CALL] = new Name(outCallType, outArgs);
|
||||
lform = new LambdaForm(debugName, INARG_LIMIT, names);
|
||||
@ -394,6 +394,7 @@ class Invokers {
|
||||
@ForceInline
|
||||
void checkCustomized(Object o) {
|
||||
MethodHandle mh = (MethodHandle)o;
|
||||
if (MethodHandleImpl.isCompileConstant(mh)) return;
|
||||
if (mh.form.customized == null) {
|
||||
maybeCustomize(mh);
|
||||
}
|
||||
|
@ -722,6 +722,13 @@ import static java.lang.invoke.MethodHandles.Lookup.IMPL_LOOKUP;
|
||||
return result;
|
||||
}
|
||||
|
||||
// Intrinsified by C2. Returns true if obj is a compile-time constant.
|
||||
@LambdaForm.Hidden
|
||||
static
|
||||
boolean isCompileConstant(Object obj) {
|
||||
return false;
|
||||
}
|
||||
|
||||
static
|
||||
MethodHandle makeGuardWithTest(MethodHandle test,
|
||||
MethodHandle target,
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2008, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2008, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -55,121 +55,42 @@ class MethodHandleNatives {
|
||||
static native Object staticFieldBase(MemberName self); // e.g., returns clazz
|
||||
static native Object getMemberVMInfo(MemberName self); // returns {vmindex,vmtarget}
|
||||
|
||||
/// MethodHandle support
|
||||
|
||||
/** Fetch MH-related JVM parameter.
|
||||
* which=0 retrieves MethodHandlePushLimit
|
||||
* which=1 retrieves stack slot push size (in address units)
|
||||
*/
|
||||
static native int getConstant(int which);
|
||||
|
||||
static final boolean COUNT_GWT;
|
||||
|
||||
/// CallSite support
|
||||
|
||||
/** Tell the JVM that we need to change the target of a CallSite. */
|
||||
static native void setCallSiteTargetNormal(CallSite site, MethodHandle target);
|
||||
static native void setCallSiteTargetVolatile(CallSite site, MethodHandle target);
|
||||
|
||||
/** Invalidate CallSite context: clean up dependent nmethods and reset call site context to initial state (null). */
|
||||
static native void invalidateDependentNMethods(CallSite site);
|
||||
|
||||
private static native void registerNatives();
|
||||
static {
|
||||
registerNatives();
|
||||
COUNT_GWT = getConstant(Constants.GC_COUNT_GWT) != 0;
|
||||
|
||||
// The JVM calls MethodHandleNatives.<clinit>. Cascade the <clinit> calls as needed:
|
||||
MethodHandleImpl.initStatics();
|
||||
}
|
||||
|
||||
// All compile-time constants go here.
|
||||
// There is an opportunity to check them against the JVM's idea of them.
|
||||
/**
|
||||
* Compile-time constants go here. This collection exists not only for
|
||||
* reference from clients, but also for ensuring the VM and JDK agree on the
|
||||
* values of these constants (see {@link #verifyConstants()}).
|
||||
*/
|
||||
static class Constants {
|
||||
Constants() { } // static only
|
||||
// MethodHandleImpl
|
||||
static final int // for getConstant
|
||||
GC_COUNT_GWT = 4,
|
||||
GC_LAMBDA_SUPPORT = 5;
|
||||
|
||||
// MemberName
|
||||
// The JVM uses values of -2 and above for vtable indexes.
|
||||
// Field values are simple positive offsets.
|
||||
// Ref: src/share/vm/oops/methodOop.hpp
|
||||
// This value is negative enough to avoid such numbers,
|
||||
// but not too negative.
|
||||
static final int
|
||||
MN_IS_METHOD = 0x00010000, // method (not constructor)
|
||||
MN_IS_CONSTRUCTOR = 0x00020000, // constructor
|
||||
MN_IS_FIELD = 0x00040000, // field
|
||||
MN_IS_TYPE = 0x00080000, // nested type
|
||||
MN_CALLER_SENSITIVE = 0x00100000, // @CallerSensitive annotation detected
|
||||
MN_REFERENCE_KIND_SHIFT = 24, // refKind
|
||||
MN_REFERENCE_KIND_MASK = 0x0F000000 >> MN_REFERENCE_KIND_SHIFT,
|
||||
// The SEARCH_* bits are not for MN.flags but for the matchFlags argument of MHN.getMembers:
|
||||
MN_SEARCH_SUPERCLASSES = 0x00100000,
|
||||
MN_SEARCH_INTERFACES = 0x00200000;
|
||||
|
||||
/**
|
||||
* Basic types as encoded in the JVM. These code values are not
|
||||
* intended for use outside this class. They are used as part of
|
||||
* a private interface between the JVM and this class.
|
||||
*/
|
||||
static final int
|
||||
T_BOOLEAN = 4,
|
||||
T_CHAR = 5,
|
||||
T_FLOAT = 6,
|
||||
T_DOUBLE = 7,
|
||||
T_BYTE = 8,
|
||||
T_SHORT = 9,
|
||||
T_INT = 10,
|
||||
T_LONG = 11,
|
||||
T_OBJECT = 12,
|
||||
//T_ARRAY = 13
|
||||
T_VOID = 14,
|
||||
//T_ADDRESS = 15
|
||||
T_ILLEGAL = 99;
|
||||
|
||||
/**
|
||||
* Constant pool entry types.
|
||||
*/
|
||||
static final byte
|
||||
CONSTANT_Utf8 = 1,
|
||||
CONSTANT_Integer = 3,
|
||||
CONSTANT_Float = 4,
|
||||
CONSTANT_Long = 5,
|
||||
CONSTANT_Double = 6,
|
||||
CONSTANT_Class = 7,
|
||||
CONSTANT_String = 8,
|
||||
CONSTANT_Fieldref = 9,
|
||||
CONSTANT_Methodref = 10,
|
||||
CONSTANT_InterfaceMethodref = 11,
|
||||
CONSTANT_NameAndType = 12,
|
||||
CONSTANT_MethodHandle = 15, // JSR 292
|
||||
CONSTANT_MethodType = 16, // JSR 292
|
||||
CONSTANT_InvokeDynamic = 18,
|
||||
CONSTANT_LIMIT = 19; // Limit to tags found in classfiles
|
||||
|
||||
/**
|
||||
* Access modifier flags.
|
||||
*/
|
||||
static final char
|
||||
ACC_PUBLIC = 0x0001,
|
||||
ACC_PRIVATE = 0x0002,
|
||||
ACC_PROTECTED = 0x0004,
|
||||
ACC_STATIC = 0x0008,
|
||||
ACC_FINAL = 0x0010,
|
||||
ACC_SYNCHRONIZED = 0x0020,
|
||||
ACC_VOLATILE = 0x0040,
|
||||
ACC_TRANSIENT = 0x0080,
|
||||
ACC_NATIVE = 0x0100,
|
||||
ACC_INTERFACE = 0x0200,
|
||||
ACC_ABSTRACT = 0x0400,
|
||||
ACC_STRICT = 0x0800,
|
||||
ACC_SYNTHETIC = 0x1000,
|
||||
ACC_ANNOTATION = 0x2000,
|
||||
ACC_ENUM = 0x4000,
|
||||
// aliases:
|
||||
ACC_SUPER = ACC_SYNCHRONIZED,
|
||||
ACC_BRIDGE = ACC_VOLATILE,
|
||||
ACC_VARARGS = ACC_TRANSIENT;
|
||||
MN_IS_METHOD = 0x00010000, // method (not constructor)
|
||||
MN_IS_CONSTRUCTOR = 0x00020000, // constructor
|
||||
MN_IS_FIELD = 0x00040000, // field
|
||||
MN_IS_TYPE = 0x00080000, // nested type
|
||||
MN_CALLER_SENSITIVE = 0x00100000, // @CallerSensitive annotation detected
|
||||
MN_REFERENCE_KIND_SHIFT = 24, // refKind
|
||||
MN_REFERENCE_KIND_MASK = 0x0F000000 >> MN_REFERENCE_KIND_SHIFT,
|
||||
// The SEARCH_* bits are not for MN.flags but for the matchFlags argument of MHN.getMembers:
|
||||
MN_SEARCH_SUPERCLASSES = 0x00100000,
|
||||
MN_SEARCH_INTERFACES = 0x00200000;
|
||||
|
||||
/**
|
||||
* Constant pool reference-kind codes, as used by CONSTANT_MethodHandle CP entries.
|
||||
@ -314,6 +235,7 @@ class MethodHandleNatives {
|
||||
return Invokers.linkToTargetMethod(type);
|
||||
} else {
|
||||
appendixResult[0] = callSite;
|
||||
callSite.initContext(caller);
|
||||
return Invokers.linkToCallSiteMethod(type);
|
||||
}
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -567,32 +567,13 @@ class Bits { // package-private
|
||||
|
||||
// -- Processor and memory-system properties --
|
||||
|
||||
private static final ByteOrder byteOrder;
|
||||
private static final ByteOrder byteOrder
|
||||
= unsafe.isBigEndian() ? ByteOrder.BIG_ENDIAN : ByteOrder.LITTLE_ENDIAN;
|
||||
|
||||
static ByteOrder byteOrder() {
|
||||
if (byteOrder == null)
|
||||
throw new Error("Unknown byte order");
|
||||
return byteOrder;
|
||||
}
|
||||
|
||||
static {
|
||||
long a = unsafe.allocateMemory(8);
|
||||
try {
|
||||
unsafe.putLong(a, 0x0102030405060708L);
|
||||
byte b = unsafe.getByte(a);
|
||||
switch (b) {
|
||||
case 0x01: byteOrder = ByteOrder.BIG_ENDIAN; break;
|
||||
case 0x08: byteOrder = ByteOrder.LITTLE_ENDIAN; break;
|
||||
default:
|
||||
assert false;
|
||||
byteOrder = null;
|
||||
}
|
||||
} finally {
|
||||
unsafe.freeMemory(a);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private static int pageSize = -1;
|
||||
|
||||
static int pageSize() {
|
||||
@ -605,17 +586,9 @@ class Bits { // package-private
|
||||
return (int)(size + (long)pageSize() - 1L) / pageSize();
|
||||
}
|
||||
|
||||
private static boolean unaligned;
|
||||
private static boolean unalignedKnown = false;
|
||||
private static boolean unaligned = unsafe.unalignedAccess();
|
||||
|
||||
static boolean unaligned() {
|
||||
if (unalignedKnown)
|
||||
return unaligned;
|
||||
String arch = AccessController.doPrivileged(
|
||||
new sun.security.action.GetPropertyAction("os.arch"));
|
||||
unaligned = arch.equals("i386") || arch.equals("x86")
|
||||
|| arch.equals("amd64") || arch.equals("x86_64");
|
||||
unalignedKnown = true;
|
||||
return unaligned;
|
||||
}
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -27,6 +27,7 @@
|
||||
|
||||
package java.nio;
|
||||
|
||||
import sun.misc.Unsafe;
|
||||
|
||||
/**
|
||||
#if[rw]
|
||||
@ -52,6 +53,16 @@ class Heap$Type$Buffer$RW$
|
||||
#end[rw]
|
||||
*/
|
||||
|
||||
#if[byte]
|
||||
|
||||
// Cached unsafe-access object
|
||||
private static final Unsafe unsafe = Bits.unsafe();
|
||||
|
||||
// Cached array base offset
|
||||
private static final long arrayBaseOffset = unsafe.arrayBaseOffset($type$[].class);
|
||||
|
||||
#end[byte]
|
||||
|
||||
Heap$Type$Buffer$RW$(int cap, int lim) { // package-private
|
||||
#if[rw]
|
||||
super(-1, 0, lim, cap, new $type$[cap], 0);
|
||||
@ -131,6 +142,12 @@ class Heap$Type$Buffer$RW$
|
||||
return i + offset;
|
||||
}
|
||||
|
||||
#if[byte]
|
||||
private long byteOffset(long i) {
|
||||
return arrayBaseOffset + i + offset;
|
||||
}
|
||||
#end[byte]
|
||||
|
||||
public $type$ get() {
|
||||
return hb[ix(nextGetIndex())];
|
||||
}
|
||||
@ -256,18 +273,18 @@ class Heap$Type$Buffer$RW$
|
||||
#if[rw]
|
||||
|
||||
public char getChar() {
|
||||
return Bits.getChar(this, ix(nextGetIndex(2)), bigEndian);
|
||||
return unsafe.getCharUnaligned(hb, byteOffset(nextGetIndex(2)), bigEndian);
|
||||
}
|
||||
|
||||
public char getChar(int i) {
|
||||
return Bits.getChar(this, ix(checkIndex(i, 2)), bigEndian);
|
||||
return unsafe.getCharUnaligned(hb, byteOffset(checkIndex(i, 2)), bigEndian);
|
||||
}
|
||||
|
||||
#end[rw]
|
||||
|
||||
public $Type$Buffer putChar(char x) {
|
||||
#if[rw]
|
||||
Bits.putChar(this, ix(nextPutIndex(2)), x, bigEndian);
|
||||
unsafe.putCharUnaligned(hb, byteOffset(nextPutIndex(2)), x, bigEndian);
|
||||
return this;
|
||||
#else[rw]
|
||||
throw new ReadOnlyBufferException();
|
||||
@ -276,7 +293,7 @@ class Heap$Type$Buffer$RW$
|
||||
|
||||
public $Type$Buffer putChar(int i, char x) {
|
||||
#if[rw]
|
||||
Bits.putChar(this, ix(checkIndex(i, 2)), x, bigEndian);
|
||||
unsafe.putCharUnaligned(hb, byteOffset(checkIndex(i, 2)), x, bigEndian);
|
||||
return this;
|
||||
#else[rw]
|
||||
throw new ReadOnlyBufferException();
|
||||
@ -307,18 +324,18 @@ class Heap$Type$Buffer$RW$
|
||||
#if[rw]
|
||||
|
||||
public short getShort() {
|
||||
return Bits.getShort(this, ix(nextGetIndex(2)), bigEndian);
|
||||
return unsafe.getShortUnaligned(hb, byteOffset(nextGetIndex(2)), bigEndian);
|
||||
}
|
||||
|
||||
public short getShort(int i) {
|
||||
return Bits.getShort(this, ix(checkIndex(i, 2)), bigEndian);
|
||||
return unsafe.getShortUnaligned(hb, byteOffset(checkIndex(i, 2)), bigEndian);
|
||||
}
|
||||
|
||||
#end[rw]
|
||||
|
||||
public $Type$Buffer putShort(short x) {
|
||||
#if[rw]
|
||||
Bits.putShort(this, ix(nextPutIndex(2)), x, bigEndian);
|
||||
unsafe.putShortUnaligned(hb, byteOffset(nextPutIndex(2)), x, bigEndian);
|
||||
return this;
|
||||
#else[rw]
|
||||
throw new ReadOnlyBufferException();
|
||||
@ -327,7 +344,7 @@ class Heap$Type$Buffer$RW$
|
||||
|
||||
public $Type$Buffer putShort(int i, short x) {
|
||||
#if[rw]
|
||||
Bits.putShort(this, ix(checkIndex(i, 2)), x, bigEndian);
|
||||
unsafe.putShortUnaligned(hb, byteOffset(checkIndex(i, 2)), x, bigEndian);
|
||||
return this;
|
||||
#else[rw]
|
||||
throw new ReadOnlyBufferException();
|
||||
@ -358,18 +375,18 @@ class Heap$Type$Buffer$RW$
|
||||
#if[rw]
|
||||
|
||||
public int getInt() {
|
||||
return Bits.getInt(this, ix(nextGetIndex(4)), bigEndian);
|
||||
return unsafe.getIntUnaligned(hb, byteOffset(nextGetIndex(4)), bigEndian);
|
||||
}
|
||||
|
||||
public int getInt(int i) {
|
||||
return Bits.getInt(this, ix(checkIndex(i, 4)), bigEndian);
|
||||
return unsafe.getIntUnaligned(hb, byteOffset(checkIndex(i, 4)), bigEndian);
|
||||
}
|
||||
|
||||
#end[rw]
|
||||
|
||||
public $Type$Buffer putInt(int x) {
|
||||
#if[rw]
|
||||
Bits.putInt(this, ix(nextPutIndex(4)), x, bigEndian);
|
||||
unsafe.putIntUnaligned(hb, byteOffset(nextPutIndex(4)), x, bigEndian);
|
||||
return this;
|
||||
#else[rw]
|
||||
throw new ReadOnlyBufferException();
|
||||
@ -378,7 +395,7 @@ class Heap$Type$Buffer$RW$
|
||||
|
||||
public $Type$Buffer putInt(int i, int x) {
|
||||
#if[rw]
|
||||
Bits.putInt(this, ix(checkIndex(i, 4)), x, bigEndian);
|
||||
unsafe.putIntUnaligned(hb, byteOffset(checkIndex(i, 4)), x, bigEndian);
|
||||
return this;
|
||||
#else[rw]
|
||||
throw new ReadOnlyBufferException();
|
||||
@ -409,18 +426,18 @@ class Heap$Type$Buffer$RW$
|
||||
#if[rw]
|
||||
|
||||
public long getLong() {
|
||||
return Bits.getLong(this, ix(nextGetIndex(8)), bigEndian);
|
||||
return unsafe.getLongUnaligned(hb, byteOffset(nextGetIndex(8)), bigEndian);
|
||||
}
|
||||
|
||||
public long getLong(int i) {
|
||||
return Bits.getLong(this, ix(checkIndex(i, 8)), bigEndian);
|
||||
return unsafe.getLongUnaligned(hb, byteOffset(checkIndex(i, 8)), bigEndian);
|
||||
}
|
||||
|
||||
#end[rw]
|
||||
|
||||
public $Type$Buffer putLong(long x) {
|
||||
#if[rw]
|
||||
Bits.putLong(this, ix(nextPutIndex(8)), x, bigEndian);
|
||||
unsafe.putLongUnaligned(hb, byteOffset(nextPutIndex(8)), x, bigEndian);
|
||||
return this;
|
||||
#else[rw]
|
||||
throw new ReadOnlyBufferException();
|
||||
@ -429,7 +446,7 @@ class Heap$Type$Buffer$RW$
|
||||
|
||||
public $Type$Buffer putLong(int i, long x) {
|
||||
#if[rw]
|
||||
Bits.putLong(this, ix(checkIndex(i, 8)), x, bigEndian);
|
||||
unsafe.putLongUnaligned(hb, byteOffset(checkIndex(i, 8)), x, bigEndian);
|
||||
return this;
|
||||
#else[rw]
|
||||
throw new ReadOnlyBufferException();
|
||||
@ -460,18 +477,21 @@ class Heap$Type$Buffer$RW$
|
||||
#if[rw]
|
||||
|
||||
public float getFloat() {
|
||||
return Bits.getFloat(this, ix(nextGetIndex(4)), bigEndian);
|
||||
int x = unsafe.getIntUnaligned(hb, byteOffset(nextPutIndex(4)), bigEndian);
|
||||
return Float.intBitsToFloat(x);
|
||||
}
|
||||
|
||||
public float getFloat(int i) {
|
||||
return Bits.getFloat(this, ix(checkIndex(i, 4)), bigEndian);
|
||||
int x = unsafe.getIntUnaligned(hb, byteOffset(checkIndex(i, 4)), bigEndian);
|
||||
return Float.intBitsToFloat(x);
|
||||
}
|
||||
|
||||
#end[rw]
|
||||
|
||||
public $Type$Buffer putFloat(float x) {
|
||||
#if[rw]
|
||||
Bits.putFloat(this, ix(nextPutIndex(4)), x, bigEndian);
|
||||
int y = Float.floatToRawIntBits(x);
|
||||
unsafe.putIntUnaligned(hb, byteOffset(nextPutIndex(4)), y, bigEndian);
|
||||
return this;
|
||||
#else[rw]
|
||||
throw new ReadOnlyBufferException();
|
||||
@ -480,7 +500,8 @@ class Heap$Type$Buffer$RW$
|
||||
|
||||
public $Type$Buffer putFloat(int i, float x) {
|
||||
#if[rw]
|
||||
Bits.putFloat(this, ix(checkIndex(i, 4)), x, bigEndian);
|
||||
int y = Float.floatToRawIntBits(x);
|
||||
unsafe.putIntUnaligned(hb, byteOffset(checkIndex(i, 4)), y, bigEndian);
|
||||
return this;
|
||||
#else[rw]
|
||||
throw new ReadOnlyBufferException();
|
||||
@ -511,18 +532,21 @@ class Heap$Type$Buffer$RW$
|
||||
#if[rw]
|
||||
|
||||
public double getDouble() {
|
||||
return Bits.getDouble(this, ix(nextGetIndex(8)), bigEndian);
|
||||
long x = unsafe.getLongUnaligned(hb, byteOffset(nextGetIndex(8)), bigEndian);
|
||||
return Double.longBitsToDouble(x);
|
||||
}
|
||||
|
||||
public double getDouble(int i) {
|
||||
return Bits.getDouble(this, ix(checkIndex(i, 8)), bigEndian);
|
||||
long x = unsafe.getLongUnaligned(hb, byteOffset(checkIndex(i, 8)), bigEndian);
|
||||
return Double.longBitsToDouble(x);
|
||||
}
|
||||
|
||||
#end[rw]
|
||||
|
||||
public $Type$Buffer putDouble(double x) {
|
||||
#if[rw]
|
||||
Bits.putDouble(this, ix(nextPutIndex(8)), x, bigEndian);
|
||||
long y = Double.doubleToRawLongBits(x);
|
||||
unsafe.putLongUnaligned(hb, byteOffset(nextPutIndex(8)), y, bigEndian);
|
||||
return this;
|
||||
#else[rw]
|
||||
throw new ReadOnlyBufferException();
|
||||
@ -531,7 +555,8 @@ class Heap$Type$Buffer$RW$
|
||||
|
||||
public $Type$Buffer putDouble(int i, double x) {
|
||||
#if[rw]
|
||||
Bits.putDouble(this, ix(checkIndex(i, 8)), x, bigEndian);
|
||||
long y = Double.doubleToRawLongBits(x);
|
||||
unsafe.putLongUnaligned(hb, byteOffset(checkIndex(i, 8)), y, bigEndian);
|
||||
return this;
|
||||
#else[rw]
|
||||
throw new ReadOnlyBufferException();
|
||||
|
@ -103,6 +103,10 @@ public final class ZoneOffsetTransition
|
||||
* Serialization version.
|
||||
*/
|
||||
private static final long serialVersionUID = -6946044323557704546L;
|
||||
/**
|
||||
* The transition epoch-second.
|
||||
*/
|
||||
private final long epochSecond;
|
||||
/**
|
||||
* The local transition date-time at the transition.
|
||||
*/
|
||||
@ -152,6 +156,7 @@ public final class ZoneOffsetTransition
|
||||
* @param offsetAfter the offset at and after the transition, not null
|
||||
*/
|
||||
ZoneOffsetTransition(LocalDateTime transition, ZoneOffset offsetBefore, ZoneOffset offsetAfter) {
|
||||
this.epochSecond = transition.toEpochSecond(offsetBefore);
|
||||
this.transition = transition;
|
||||
this.offsetBefore = offsetBefore;
|
||||
this.offsetAfter = offsetAfter;
|
||||
@ -165,6 +170,7 @@ public final class ZoneOffsetTransition
|
||||
* @param offsetAfter the offset at and after the transition, not null
|
||||
*/
|
||||
ZoneOffsetTransition(long epochSecond, ZoneOffset offsetBefore, ZoneOffset offsetAfter) {
|
||||
this.epochSecond = epochSecond;
|
||||
this.transition = LocalDateTime.ofEpochSecond(epochSecond, 0, offsetBefore);
|
||||
this.offsetBefore = offsetBefore;
|
||||
this.offsetAfter = offsetAfter;
|
||||
@ -209,7 +215,7 @@ public final class ZoneOffsetTransition
|
||||
* @throws IOException if an error occurs
|
||||
*/
|
||||
void writeExternal(DataOutput out) throws IOException {
|
||||
Ser.writeEpochSec(toEpochSecond(), out);
|
||||
Ser.writeEpochSec(epochSecond, out);
|
||||
Ser.writeOffset(offsetBefore, out);
|
||||
Ser.writeOffset(offsetAfter, out);
|
||||
}
|
||||
@ -253,7 +259,7 @@ public final class ZoneOffsetTransition
|
||||
* @return the transition epoch second
|
||||
*/
|
||||
public long toEpochSecond() {
|
||||
return transition.toEpochSecond(offsetBefore);
|
||||
return epochSecond;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------
|
||||
@ -397,7 +403,13 @@ public final class ZoneOffsetTransition
|
||||
*/
|
||||
@Override
|
||||
public int compareTo(ZoneOffsetTransition transition) {
|
||||
return this.getInstant().compareTo(transition.getInstant());
|
||||
if (epochSecond < transition.epochSecond) {
|
||||
return -1;
|
||||
} else if (epochSecond > transition.epochSecond) {
|
||||
return 1;
|
||||
} else {
|
||||
return this.getInstant().compareTo(transition.getInstant());
|
||||
}
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------
|
||||
@ -416,7 +428,8 @@ public final class ZoneOffsetTransition
|
||||
}
|
||||
if (other instanceof ZoneOffsetTransition) {
|
||||
ZoneOffsetTransition d = (ZoneOffsetTransition) other;
|
||||
return transition.equals(d.transition) &&
|
||||
return epochSecond == d.epochSecond &&
|
||||
transition.equals(d.transition) &&
|
||||
offsetBefore.equals(d.offsetBefore) && offsetAfter.equals(d.offsetAfter);
|
||||
}
|
||||
return false;
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -140,11 +140,24 @@ import java.util.Locale;
|
||||
*/
|
||||
public abstract class LocaleServiceProvider {
|
||||
|
||||
private static Void checkPermission() {
|
||||
SecurityManager sm = System.getSecurityManager();
|
||||
if (sm != null) {
|
||||
sm.checkPermission(new RuntimePermission("localeServiceProvider"));
|
||||
}
|
||||
return null;
|
||||
}
|
||||
private LocaleServiceProvider(Void ignore) { }
|
||||
|
||||
/**
|
||||
* Sole constructor. (For invocation by subclass constructors, typically
|
||||
* implicit.)
|
||||
* Initializes a new locale service provider.
|
||||
*
|
||||
* @throws SecurityException
|
||||
* If a security manager has been installed and it denies
|
||||
* {@link RuntimePermission RuntimePermission("localeServiceProvider")}
|
||||
*/
|
||||
protected LocaleServiceProvider() {
|
||||
this(checkPermission());
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -183,7 +183,7 @@ public final class Unsafe {
|
||||
* <p>
|
||||
* Unless the reference {@code x} being stored is either null
|
||||
* or matches the field type, the results are undefined.
|
||||
* If the reference {@code o} is non-null, car marks or
|
||||
* If the reference {@code o} is non-null, card marks or
|
||||
* other store barriers for that object (if the VM requires them)
|
||||
* are updated.
|
||||
* @see #putInt(Object, long, int)
|
||||
@ -219,6 +219,35 @@ public final class Unsafe {
|
||||
/** @see #putInt(Object, long, int) */
|
||||
public native void putDouble(Object o, long offset, double x);
|
||||
|
||||
// These read VM internal data.
|
||||
|
||||
/**
|
||||
* Fetches an uncompressed reference value from a given native variable
|
||||
* ignoring the VM's compressed references mode.
|
||||
*
|
||||
* @param address a memory address locating the variable
|
||||
* @return the value fetched from the indicated native variable
|
||||
*/
|
||||
public native Object getUncompressedObject(long address);
|
||||
|
||||
/**
|
||||
* Fetches the {@link java.lang.Class} Java mirror for the given native
|
||||
* metaspace {@code Klass} pointer.
|
||||
*
|
||||
* @param metaspaceKlass a native metaspace {@code Klass} pointer
|
||||
* @return the {@link java.lang.Class} Java mirror
|
||||
*/
|
||||
public native Class<?> getJavaMirror(long metaspaceKlass);
|
||||
|
||||
/**
|
||||
* Fetches a native metaspace {@code Klass} pointer for the given Java
|
||||
* object.
|
||||
*
|
||||
* @param o Java heap object for which to fetch the class pointer
|
||||
* @return a native metaspace {@code Klass} pointer
|
||||
*/
|
||||
public native long getKlassPointer(Object o);
|
||||
|
||||
// These work on values in the C heap.
|
||||
|
||||
/**
|
||||
@ -934,4 +963,347 @@ public final class Unsafe {
|
||||
private static void throwIllegalAccessError() {
|
||||
throw new IllegalAccessError();
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Returns true if the native byte ordering of this
|
||||
* platform is big-endian, false if it is little-endian.
|
||||
*/
|
||||
public final boolean isBigEndian() { return BE; }
|
||||
|
||||
/**
|
||||
* @return Returns true if this platform is capable of performing
|
||||
* accesses at addresses which are not aligned for the type of the
|
||||
* primitive type being accessed, false otherwise.
|
||||
*/
|
||||
public final boolean unalignedAccess() { return unalignedAccess; }
|
||||
|
||||
/**
|
||||
* Fetches a value at some byte offset into a given Java object.
|
||||
* More specifically, fetches a value within the given object
|
||||
* <code>o</code> at the given offset, or (if <code>o</code> is
|
||||
* null) from the memory address whose numerical value is the
|
||||
* given offset. <p>
|
||||
*
|
||||
* The specification of this method is the same as {@link
|
||||
* #getLong(Object, long)} except that the offset does not need to
|
||||
* have been obtained from {@link #objectFieldOffset} on the
|
||||
* {@link java.lang.reflect.Field} of some Java field. The value
|
||||
* in memory is raw data, and need not correspond to any Java
|
||||
* variable. Unless <code>o</code> is null, the value accessed
|
||||
* must be entirely within the allocated object. The endianness
|
||||
* of the value in memory is the endianness of the native platform.
|
||||
*
|
||||
* <p> The read will be atomic with respect to the largest power
|
||||
* of two that divides the GCD of the offset and the storage size.
|
||||
* For example, getLongUnaligned will make atomic reads of 2-, 4-,
|
||||
* or 8-byte storage units if the offset is zero mod 2, 4, or 8,
|
||||
* respectively. There are no other guarantees of atomicity.
|
||||
* <p>
|
||||
* 8-byte atomicity is only guaranteed on platforms on which
|
||||
* support atomic accesses to longs.
|
||||
*
|
||||
* @param o Java heap object in which the value resides, if any, else
|
||||
* null
|
||||
* @param offset The offset in bytes from the start of the object
|
||||
* @return the value fetched from the indicated object
|
||||
* @throws RuntimeException No defined exceptions are thrown, not even
|
||||
* {@link NullPointerException}
|
||||
* @since 1.9
|
||||
*/
|
||||
public final long getLongUnaligned(Object o, long offset) {
|
||||
if ((offset & 7) == 0) {
|
||||
return getLong(o, offset);
|
||||
} else if ((offset & 3) == 0) {
|
||||
return makeLong(getInt(o, offset),
|
||||
getInt(o, offset + 4));
|
||||
} else if ((offset & 1) == 0) {
|
||||
return makeLong(getShort(o, offset),
|
||||
getShort(o, offset + 2),
|
||||
getShort(o, offset + 4),
|
||||
getShort(o, offset + 6));
|
||||
} else {
|
||||
return makeLong(getByte(o, offset),
|
||||
getByte(o, offset + 1),
|
||||
getByte(o, offset + 2),
|
||||
getByte(o, offset + 3),
|
||||
getByte(o, offset + 4),
|
||||
getByte(o, offset + 5),
|
||||
getByte(o, offset + 6),
|
||||
getByte(o, offset + 7));
|
||||
}
|
||||
}
|
||||
/**
|
||||
* As {@link #getLongUnaligned(Object, long)} but with an
|
||||
* additional argument which specifies the endianness of the value
|
||||
* as stored in memory.
|
||||
*
|
||||
* @param o Java heap object in which the variable resides
|
||||
* @param offset The offset in bytes from the start of the object
|
||||
* @param bigEndian The endianness of the value
|
||||
* @return the value fetched from the indicated object
|
||||
* @since 1.9
|
||||
*/
|
||||
public final long getLongUnaligned(Object o, long offset, boolean bigEndian) {
|
||||
return convEndian(bigEndian, getLongUnaligned(o, offset));
|
||||
}
|
||||
|
||||
/** @see #getLongUnaligned(Object, long) */
|
||||
public final int getIntUnaligned(Object o, long offset) {
|
||||
if ((offset & 3) == 0) {
|
||||
return getInt(o, offset);
|
||||
} else if ((offset & 1) == 0) {
|
||||
return makeInt(getShort(o, offset),
|
||||
getShort(o, offset + 2));
|
||||
} else {
|
||||
return makeInt(getByte(o, offset),
|
||||
getByte(o, offset + 1),
|
||||
getByte(o, offset + 2),
|
||||
getByte(o, offset + 3));
|
||||
}
|
||||
}
|
||||
/** @see #getLongUnaligned(Object, long, boolean) */
|
||||
public final int getIntUnaligned(Object o, long offset, boolean bigEndian) {
|
||||
return convEndian(bigEndian, getIntUnaligned(o, offset));
|
||||
}
|
||||
|
||||
/** @see #getLongUnaligned(Object, long) */
|
||||
public final short getShortUnaligned(Object o, long offset) {
|
||||
if ((offset & 1) == 0) {
|
||||
return getShort(o, offset);
|
||||
} else {
|
||||
return makeShort(getByte(o, offset),
|
||||
getByte(o, offset + 1));
|
||||
}
|
||||
}
|
||||
/** @see #getLongUnaligned(Object, long, boolean) */
|
||||
public final short getShortUnaligned(Object o, long offset, boolean bigEndian) {
|
||||
return convEndian(bigEndian, getShortUnaligned(o, offset));
|
||||
}
|
||||
|
||||
/** @see #getLongUnaligned(Object, long) */
|
||||
public final char getCharUnaligned(Object o, long offset) {
|
||||
return (char)getShortUnaligned(o, offset);
|
||||
}
|
||||
/** @see #getLongUnaligned(Object, long, boolean) */
|
||||
public final char getCharUnaligned(Object o, long offset, boolean bigEndian) {
|
||||
return convEndian(bigEndian, getCharUnaligned(o, offset));
|
||||
}
|
||||
|
||||
/**
|
||||
* Stores a value at some byte offset into a given Java object.
|
||||
* <p>
|
||||
* The specification of this method is the same as {@link
|
||||
* #getLong(Object, long)} except that the offset does not need to
|
||||
* have been obtained from {@link #objectFieldOffset} on the
|
||||
* {@link java.lang.reflect.Field} of some Java field. The value
|
||||
* in memory is raw data, and need not correspond to any Java
|
||||
* variable. The endianness of the value in memory is the
|
||||
* endianness of the native platform.
|
||||
* <p>
|
||||
* The write will be atomic with respect to the largest power of
|
||||
* two that divides the GCD of the offset and the storage size.
|
||||
* For example, putLongUnaligned will make atomic writes of 2-, 4-,
|
||||
* or 8-byte storage units if the offset is zero mod 2, 4, or 8,
|
||||
* respectively. There are no other guarantees of atomicity.
|
||||
* <p>
|
||||
* 8-byte atomicity is only guaranteed on platforms on which
|
||||
* support atomic accesses to longs.
|
||||
* <p>
|
||||
*
|
||||
* @param o Java heap object in which the value resides, if any, else
|
||||
* null
|
||||
* @param offset The offset in bytes from the start of the object
|
||||
* @param x the value to store
|
||||
* @throws RuntimeException No defined exceptions are thrown, not even
|
||||
* {@link NullPointerException}
|
||||
* @since 1.9
|
||||
*/
|
||||
public final void putLongUnaligned(Object o, long offset, long x) {
|
||||
if ((offset & 7) == 0) {
|
||||
putLong(o, offset, x);
|
||||
} else if ((offset & 3) == 0) {
|
||||
putLongParts(o, offset,
|
||||
(int)(x >> 0),
|
||||
(int)(x >>> 32));
|
||||
} else if ((offset & 1) == 0) {
|
||||
putLongParts(o, offset,
|
||||
(short)(x >>> 0),
|
||||
(short)(x >>> 16),
|
||||
(short)(x >>> 32),
|
||||
(short)(x >>> 48));
|
||||
} else {
|
||||
putLongParts(o, offset,
|
||||
(byte)(x >>> 0),
|
||||
(byte)(x >>> 8),
|
||||
(byte)(x >>> 16),
|
||||
(byte)(x >>> 24),
|
||||
(byte)(x >>> 32),
|
||||
(byte)(x >>> 40),
|
||||
(byte)(x >>> 48),
|
||||
(byte)(x >>> 56));
|
||||
}
|
||||
}
|
||||
/**
|
||||
* As {@link #putLongUnaligned(Object, long, long)} but with an additional
|
||||
* argument which specifies the endianness of the value as stored in memory.
|
||||
* @param o Java heap object in which the value resides
|
||||
* @param offset The offset in bytes from the start of the object
|
||||
* @param x the value to store
|
||||
* @param bigEndian The endianness of the value
|
||||
* @throws RuntimeException No defined exceptions are thrown, not even
|
||||
* {@link NullPointerException}
|
||||
* @since 1.9
|
||||
*/
|
||||
public final void putLongUnaligned(Object o, long offset, long x, boolean bigEndian) {
|
||||
putLongUnaligned(o, offset, convEndian(bigEndian, x));
|
||||
}
|
||||
|
||||
/** @see #putLongUnaligned(Object, long, long) */
|
||||
public final void putIntUnaligned(Object o, long offset, int x) {
|
||||
if ((offset & 3) == 0) {
|
||||
putInt(o, offset, x);
|
||||
} else if ((offset & 1) == 0) {
|
||||
putIntParts(o, offset,
|
||||
(short)(x >> 0),
|
||||
(short)(x >>> 16));
|
||||
} else {
|
||||
putIntParts(o, offset,
|
||||
(byte)(x >>> 0),
|
||||
(byte)(x >>> 8),
|
||||
(byte)(x >>> 16),
|
||||
(byte)(x >>> 24));
|
||||
}
|
||||
}
|
||||
/** @see #putLongUnaligned(Object, long, long, boolean) */
|
||||
public final void putIntUnaligned(Object o, long offset, int x, boolean bigEndian) {
|
||||
putIntUnaligned(o, offset, convEndian(bigEndian, x));
|
||||
}
|
||||
|
||||
/** @see #putLongUnaligned(Object, long, long) */
|
||||
public final void putShortUnaligned(Object o, long offset, short x) {
|
||||
if ((offset & 1) == 0) {
|
||||
putShort(o, offset, x);
|
||||
} else {
|
||||
putShortParts(o, offset,
|
||||
(byte)(x >>> 0),
|
||||
(byte)(x >>> 8));
|
||||
}
|
||||
}
|
||||
/** @see #putLongUnaligned(Object, long, long, boolean) */
|
||||
public final void putShortUnaligned(Object o, long offset, short x, boolean bigEndian) {
|
||||
putShortUnaligned(o, offset, convEndian(bigEndian, x));
|
||||
}
|
||||
|
||||
/** @see #putLongUnaligned(Object, long, long) */
|
||||
public final void putCharUnaligned(Object o, long offset, char x) {
|
||||
putShortUnaligned(o, offset, (short)x);
|
||||
}
|
||||
/** @see #putLongUnaligned(Object, long, long, boolean) */
|
||||
public final void putCharUnaligned(Object o, long offset, char x, boolean bigEndian) {
|
||||
putCharUnaligned(o, offset, convEndian(bigEndian, x));
|
||||
}
|
||||
|
||||
// JVM interface methods
|
||||
private native boolean unalignedAccess0();
|
||||
private native boolean isBigEndian0();
|
||||
|
||||
// BE is true iff the native endianness of this platform is big.
|
||||
private static final boolean BE = theUnsafe.isBigEndian0();
|
||||
|
||||
// unalignedAccess is true iff this platform can perform unaligned accesses.
|
||||
private static final boolean unalignedAccess = theUnsafe.unalignedAccess0();
|
||||
|
||||
private static int pickPos(int top, int pos) { return BE ? top - pos : pos; }
|
||||
|
||||
// These methods construct integers from bytes. The byte ordering
|
||||
// is the native endianness of this platform.
|
||||
private static long makeLong(byte i0, byte i1, byte i2, byte i3, byte i4, byte i5, byte i6, byte i7) {
|
||||
return ((toUnsignedLong(i0) << pickPos(56, 0))
|
||||
| (toUnsignedLong(i1) << pickPos(56, 8))
|
||||
| (toUnsignedLong(i2) << pickPos(56, 16))
|
||||
| (toUnsignedLong(i3) << pickPos(56, 24))
|
||||
| (toUnsignedLong(i4) << pickPos(56, 32))
|
||||
| (toUnsignedLong(i5) << pickPos(56, 40))
|
||||
| (toUnsignedLong(i6) << pickPos(56, 48))
|
||||
| (toUnsignedLong(i7) << pickPos(56, 56)));
|
||||
}
|
||||
private static long makeLong(short i0, short i1, short i2, short i3) {
|
||||
return ((toUnsignedLong(i0) << pickPos(48, 0))
|
||||
| (toUnsignedLong(i1) << pickPos(48, 16))
|
||||
| (toUnsignedLong(i2) << pickPos(48, 32))
|
||||
| (toUnsignedLong(i3) << pickPos(48, 48)));
|
||||
}
|
||||
private static long makeLong(int i0, int i1) {
|
||||
return (toUnsignedLong(i0) << pickPos(32, 0))
|
||||
| (toUnsignedLong(i1) << pickPos(32, 32));
|
||||
}
|
||||
private static int makeInt(short i0, short i1) {
|
||||
return (toUnsignedInt(i0) << pickPos(16, 0))
|
||||
| (toUnsignedInt(i1) << pickPos(16, 16));
|
||||
}
|
||||
private static int makeInt(byte i0, byte i1, byte i2, byte i3) {
|
||||
return ((toUnsignedInt(i0) << pickPos(24, 0))
|
||||
| (toUnsignedInt(i1) << pickPos(24, 8))
|
||||
| (toUnsignedInt(i2) << pickPos(24, 16))
|
||||
| (toUnsignedInt(i3) << pickPos(24, 24)));
|
||||
}
|
||||
private static short makeShort(byte i0, byte i1) {
|
||||
return (short)((toUnsignedInt(i0) << pickPos(8, 0))
|
||||
| (toUnsignedInt(i1) << pickPos(8, 8)));
|
||||
}
|
||||
|
||||
private static byte pick(byte le, byte be) { return BE ? be : le; }
|
||||
private static short pick(short le, short be) { return BE ? be : le; }
|
||||
private static int pick(int le, int be) { return BE ? be : le; }
|
||||
|
||||
// These methods write integers to memory from smaller parts
|
||||
// provided by their caller. The ordering in which these parts
|
||||
// are written is the native endianness of this platform.
|
||||
private void putLongParts(Object o, long offset, byte i0, byte i1, byte i2, byte i3, byte i4, byte i5, byte i6, byte i7) {
|
||||
putByte(o, offset + 0, pick(i0, i7));
|
||||
putByte(o, offset + 1, pick(i1, i6));
|
||||
putByte(o, offset + 2, pick(i2, i5));
|
||||
putByte(o, offset + 3, pick(i3, i4));
|
||||
putByte(o, offset + 4, pick(i4, i3));
|
||||
putByte(o, offset + 5, pick(i5, i2));
|
||||
putByte(o, offset + 6, pick(i6, i1));
|
||||
putByte(o, offset + 7, pick(i7, i0));
|
||||
}
|
||||
private void putLongParts(Object o, long offset, short i0, short i1, short i2, short i3) {
|
||||
putShort(o, offset + 0, pick(i0, i3));
|
||||
putShort(o, offset + 2, pick(i1, i2));
|
||||
putShort(o, offset + 4, pick(i2, i1));
|
||||
putShort(o, offset + 6, pick(i3, i0));
|
||||
}
|
||||
private void putLongParts(Object o, long offset, int i0, int i1) {
|
||||
putInt(o, offset + 0, pick(i0, i1));
|
||||
putInt(o, offset + 4, pick(i1, i0));
|
||||
}
|
||||
private void putIntParts(Object o, long offset, short i0, short i1) {
|
||||
putShort(o, offset + 0, pick(i0, i1));
|
||||
putShort(o, offset + 2, pick(i1, i0));
|
||||
}
|
||||
private void putIntParts(Object o, long offset, byte i0, byte i1, byte i2, byte i3) {
|
||||
putByte(o, offset + 0, pick(i0, i3));
|
||||
putByte(o, offset + 1, pick(i1, i2));
|
||||
putByte(o, offset + 2, pick(i2, i1));
|
||||
putByte(o, offset + 3, pick(i3, i0));
|
||||
}
|
||||
private void putShortParts(Object o, long offset, byte i0, byte i1) {
|
||||
putByte(o, offset + 0, pick(i0, i1));
|
||||
putByte(o, offset + 1, pick(i1, i0));
|
||||
}
|
||||
|
||||
// Zero-extend an integer
|
||||
private static int toUnsignedInt(byte n) { return n & 0xff; }
|
||||
private static int toUnsignedInt(short n) { return n & 0xffff; }
|
||||
private static long toUnsignedLong(byte n) { return n & 0xffl; }
|
||||
private static long toUnsignedLong(short n) { return n & 0xffffl; }
|
||||
private static long toUnsignedLong(int n) { return n & 0xffffffffl; }
|
||||
|
||||
// Maybe byte-reverse an integer
|
||||
private static char convEndian(boolean big, char n) { return big == BE ? n : Character.reverseBytes(n); }
|
||||
private static short convEndian(boolean big, short n) { return big == BE ? n : Short.reverseBytes(n) ; }
|
||||
private static int convEndian(boolean big, int n) { return big == BE ? n : Integer.reverseBytes(n) ; }
|
||||
private static long convEndian(boolean big, long n) { return big == BE ? n : Long.reverseBytes(n) ; }
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1999, 2014, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1999, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -1642,23 +1642,22 @@ public final class PKCS12KeyStore extends KeyStoreSpi {
|
||||
Entry entry = entries.get(alias);
|
||||
|
||||
// certificate chain
|
||||
int chainLen = 1;
|
||||
Certificate[] certs = null;
|
||||
Certificate[] certs;
|
||||
|
||||
if (entry instanceof PrivateKeyEntry) {
|
||||
PrivateKeyEntry keyEntry = (PrivateKeyEntry) entry;
|
||||
if (keyEntry.chain == null) {
|
||||
chainLen = 0;
|
||||
} else {
|
||||
chainLen = keyEntry.chain.length;
|
||||
}
|
||||
certs = keyEntry.chain;
|
||||
|
||||
if (keyEntry.chain != null) {
|
||||
certs = keyEntry.chain;
|
||||
} else {
|
||||
certs = new Certificate[0];
|
||||
}
|
||||
} else if (entry instanceof CertEntry) {
|
||||
certs = new Certificate[]{((CertEntry) entry).cert};
|
||||
certs = new Certificate[]{((CertEntry) entry).cert};
|
||||
} else {
|
||||
certs = new Certificate[0];
|
||||
}
|
||||
|
||||
for (int i = 0; i < chainLen; i++) {
|
||||
for (int i = 0; i < certs.length; i++) {
|
||||
// create SafeBag of Type CertBag
|
||||
DerOutputStream safeBag = new DerOutputStream();
|
||||
safeBag.putOID(CertBag_OID);
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2006, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2006, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -88,13 +88,8 @@ final class ByteArrayAccess {
|
||||
|
||||
// Return whether this platform supports full speed int/long memory access
|
||||
// at unaligned addresses.
|
||||
// This code was copied from java.nio.Bits because there is no equivalent
|
||||
// public API.
|
||||
private static boolean unaligned() {
|
||||
String arch = java.security.AccessController.doPrivileged
|
||||
(new sun.security.action.GetPropertyAction("os.arch", ""));
|
||||
return arch.equals("i386") || arch.equals("x86") || arch.equals("amd64")
|
||||
|| arch.equals("x86_64");
|
||||
return unsafe.unalignedAccess();
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -25,6 +25,8 @@
|
||||
|
||||
package sun.util.locale.provider;
|
||||
|
||||
import java.security.AccessController;
|
||||
import java.security.PrivilegedAction;
|
||||
import java.text.spi.BreakIteratorProvider;
|
||||
import java.text.spi.CollatorProvider;
|
||||
import java.text.spi.DateFormatProvider;
|
||||
@ -177,7 +179,9 @@ public abstract class AuxLocaleProviderAdapter extends LocaleProviderAdapter {
|
||||
* A dummy locale service provider that indicates there is no
|
||||
* provider available
|
||||
*/
|
||||
private static final NullProvider NULL_PROVIDER = new NullProvider();
|
||||
private static final NullProvider NULL_PROVIDER = AccessController.doPrivileged(
|
||||
(PrivilegedAction<NullProvider>) () -> new NullProvider());
|
||||
|
||||
private static class NullProvider extends LocaleServiceProvider {
|
||||
@Override
|
||||
public Locale[] getAvailableLocales() {
|
||||
|
@ -26,7 +26,7 @@
|
||||
package sun.util.locale.provider;
|
||||
|
||||
import java.security.AccessController;
|
||||
import java.security.PrivilegedActionException;
|
||||
import java.security.PrivilegedAction;
|
||||
import java.security.PrivilegedExceptionAction;
|
||||
import java.text.spi.BreakIteratorProvider;
|
||||
import java.text.spi.CollatorProvider;
|
||||
@ -133,8 +133,12 @@ public class JRELocaleProviderAdapter extends LocaleProviderAdapter implements R
|
||||
@Override
|
||||
public BreakIteratorProvider getBreakIteratorProvider() {
|
||||
if (breakIteratorProvider == null) {
|
||||
BreakIteratorProvider provider = new BreakIteratorProviderImpl(getAdapterType(),
|
||||
getLanguageTagSet("FormatData"));
|
||||
BreakIteratorProvider provider = AccessController.doPrivileged(
|
||||
(PrivilegedAction<BreakIteratorProvider>) () ->
|
||||
new BreakIteratorProviderImpl(
|
||||
getAdapterType(),
|
||||
getLanguageTagSet("FormatData")));
|
||||
|
||||
synchronized (this) {
|
||||
if (breakIteratorProvider == null) {
|
||||
breakIteratorProvider = provider;
|
||||
@ -147,8 +151,12 @@ public class JRELocaleProviderAdapter extends LocaleProviderAdapter implements R
|
||||
@Override
|
||||
public CollatorProvider getCollatorProvider() {
|
||||
if (collatorProvider == null) {
|
||||
CollatorProvider provider = new CollatorProviderImpl(getAdapterType(),
|
||||
getLanguageTagSet("CollationData"));
|
||||
CollatorProvider provider = AccessController.doPrivileged(
|
||||
(PrivilegedAction<CollatorProvider>) () ->
|
||||
new CollatorProviderImpl(
|
||||
getAdapterType(),
|
||||
getLanguageTagSet("CollationData")));
|
||||
|
||||
synchronized (this) {
|
||||
if (collatorProvider == null) {
|
||||
collatorProvider = provider;
|
||||
@ -161,8 +169,12 @@ public class JRELocaleProviderAdapter extends LocaleProviderAdapter implements R
|
||||
@Override
|
||||
public DateFormatProvider getDateFormatProvider() {
|
||||
if (dateFormatProvider == null) {
|
||||
DateFormatProvider provider = new DateFormatProviderImpl(getAdapterType(),
|
||||
getLanguageTagSet("FormatData"));
|
||||
DateFormatProvider provider = AccessController.doPrivileged(
|
||||
(PrivilegedAction<DateFormatProvider>) () ->
|
||||
new DateFormatProviderImpl(
|
||||
getAdapterType(),
|
||||
getLanguageTagSet("FormatData")));
|
||||
|
||||
synchronized (this) {
|
||||
if (dateFormatProvider == null) {
|
||||
dateFormatProvider = provider;
|
||||
@ -175,8 +187,12 @@ public class JRELocaleProviderAdapter extends LocaleProviderAdapter implements R
|
||||
@Override
|
||||
public DateFormatSymbolsProvider getDateFormatSymbolsProvider() {
|
||||
if (dateFormatSymbolsProvider == null) {
|
||||
DateFormatSymbolsProvider provider = new DateFormatSymbolsProviderImpl(getAdapterType(),
|
||||
getLanguageTagSet("FormatData"));
|
||||
DateFormatSymbolsProvider provider = AccessController.doPrivileged(
|
||||
(PrivilegedAction<DateFormatSymbolsProvider>) () ->
|
||||
new DateFormatSymbolsProviderImpl(
|
||||
getAdapterType(),
|
||||
getLanguageTagSet("FormatData")));
|
||||
|
||||
synchronized (this) {
|
||||
if (dateFormatSymbolsProvider == null) {
|
||||
dateFormatSymbolsProvider = provider;
|
||||
@ -189,7 +205,12 @@ public class JRELocaleProviderAdapter extends LocaleProviderAdapter implements R
|
||||
@Override
|
||||
public DecimalFormatSymbolsProvider getDecimalFormatSymbolsProvider() {
|
||||
if (decimalFormatSymbolsProvider == null) {
|
||||
DecimalFormatSymbolsProvider provider = new DecimalFormatSymbolsProviderImpl(getAdapterType(), getLanguageTagSet("FormatData"));
|
||||
DecimalFormatSymbolsProvider provider = AccessController.doPrivileged(
|
||||
(PrivilegedAction<DecimalFormatSymbolsProvider>) () ->
|
||||
new DecimalFormatSymbolsProviderImpl(
|
||||
getAdapterType(),
|
||||
getLanguageTagSet("FormatData")));
|
||||
|
||||
synchronized (this) {
|
||||
if (decimalFormatSymbolsProvider == null) {
|
||||
decimalFormatSymbolsProvider = provider;
|
||||
@ -202,8 +223,12 @@ public class JRELocaleProviderAdapter extends LocaleProviderAdapter implements R
|
||||
@Override
|
||||
public NumberFormatProvider getNumberFormatProvider() {
|
||||
if (numberFormatProvider == null) {
|
||||
NumberFormatProvider provider = new NumberFormatProviderImpl(getAdapterType(),
|
||||
getLanguageTagSet("FormatData"));
|
||||
NumberFormatProvider provider = AccessController.doPrivileged(
|
||||
(PrivilegedAction<NumberFormatProvider>) () ->
|
||||
new NumberFormatProviderImpl(
|
||||
getAdapterType(),
|
||||
getLanguageTagSet("FormatData")));
|
||||
|
||||
synchronized (this) {
|
||||
if (numberFormatProvider == null) {
|
||||
numberFormatProvider = provider;
|
||||
@ -219,8 +244,12 @@ public class JRELocaleProviderAdapter extends LocaleProviderAdapter implements R
|
||||
@Override
|
||||
public CurrencyNameProvider getCurrencyNameProvider() {
|
||||
if (currencyNameProvider == null) {
|
||||
CurrencyNameProvider provider = new CurrencyNameProviderImpl(getAdapterType(),
|
||||
getLanguageTagSet("CurrencyNames"));
|
||||
CurrencyNameProvider provider = AccessController.doPrivileged(
|
||||
(PrivilegedAction<CurrencyNameProvider>) () ->
|
||||
new CurrencyNameProviderImpl(
|
||||
getAdapterType(),
|
||||
getLanguageTagSet("CurrencyNames")));
|
||||
|
||||
synchronized (this) {
|
||||
if (currencyNameProvider == null) {
|
||||
currencyNameProvider = provider;
|
||||
@ -233,8 +262,12 @@ public class JRELocaleProviderAdapter extends LocaleProviderAdapter implements R
|
||||
@Override
|
||||
public LocaleNameProvider getLocaleNameProvider() {
|
||||
if (localeNameProvider == null) {
|
||||
LocaleNameProvider provider = new LocaleNameProviderImpl(getAdapterType(),
|
||||
getLanguageTagSet("LocaleNames"));
|
||||
LocaleNameProvider provider = AccessController.doPrivileged(
|
||||
(PrivilegedAction<LocaleNameProvider>) () ->
|
||||
new LocaleNameProviderImpl(
|
||||
getAdapterType(),
|
||||
getLanguageTagSet("LocaleNames")));
|
||||
|
||||
synchronized (this) {
|
||||
if (localeNameProvider == null) {
|
||||
localeNameProvider = provider;
|
||||
@ -247,8 +280,12 @@ public class JRELocaleProviderAdapter extends LocaleProviderAdapter implements R
|
||||
@Override
|
||||
public TimeZoneNameProvider getTimeZoneNameProvider() {
|
||||
if (timeZoneNameProvider == null) {
|
||||
TimeZoneNameProvider provider = new TimeZoneNameProviderImpl(getAdapterType(),
|
||||
getLanguageTagSet("TimeZoneNames"));
|
||||
TimeZoneNameProvider provider = AccessController.doPrivileged(
|
||||
(PrivilegedAction<TimeZoneNameProvider>) () ->
|
||||
new TimeZoneNameProviderImpl(
|
||||
getAdapterType(),
|
||||
getLanguageTagSet("TimeZoneNames")));
|
||||
|
||||
synchronized (this) {
|
||||
if (timeZoneNameProvider == null) {
|
||||
timeZoneNameProvider = provider;
|
||||
@ -261,9 +298,12 @@ public class JRELocaleProviderAdapter extends LocaleProviderAdapter implements R
|
||||
@Override
|
||||
public CalendarDataProvider getCalendarDataProvider() {
|
||||
if (calendarDataProvider == null) {
|
||||
CalendarDataProvider provider;
|
||||
provider = new CalendarDataProviderImpl(getAdapterType(),
|
||||
getLanguageTagSet("CalendarData"));
|
||||
CalendarDataProvider provider = AccessController.doPrivileged(
|
||||
(PrivilegedAction<CalendarDataProvider>) () ->
|
||||
new CalendarDataProviderImpl(
|
||||
getAdapterType(),
|
||||
getLanguageTagSet("CalendarData")));
|
||||
|
||||
synchronized (this) {
|
||||
if (calendarDataProvider == null) {
|
||||
calendarDataProvider = provider;
|
||||
@ -276,9 +316,12 @@ public class JRELocaleProviderAdapter extends LocaleProviderAdapter implements R
|
||||
@Override
|
||||
public CalendarNameProvider getCalendarNameProvider() {
|
||||
if (calendarNameProvider == null) {
|
||||
CalendarNameProvider provider;
|
||||
provider = new CalendarNameProviderImpl(getAdapterType(),
|
||||
getLanguageTagSet("FormatData"));
|
||||
CalendarNameProvider provider = AccessController.doPrivileged(
|
||||
(PrivilegedAction<CalendarNameProvider>) () ->
|
||||
new CalendarNameProviderImpl(
|
||||
getAdapterType(),
|
||||
getLanguageTagSet("FormatData")));
|
||||
|
||||
synchronized (this) {
|
||||
if (calendarNameProvider == null) {
|
||||
calendarNameProvider = provider;
|
||||
@ -294,8 +337,12 @@ public class JRELocaleProviderAdapter extends LocaleProviderAdapter implements R
|
||||
@Override
|
||||
public CalendarProvider getCalendarProvider() {
|
||||
if (calendarProvider == null) {
|
||||
CalendarProvider provider = new CalendarProviderImpl(getAdapterType(),
|
||||
getLanguageTagSet("CalendarData"));
|
||||
CalendarProvider provider = AccessController.doPrivileged(
|
||||
(PrivilegedAction<CalendarProvider>) () ->
|
||||
new CalendarProviderImpl(
|
||||
getAdapterType(),
|
||||
getLanguageTagSet("CalendarData")));
|
||||
|
||||
synchronized (this) {
|
||||
if (calendarProvider == null) {
|
||||
calendarProvider = provider;
|
||||
@ -319,6 +366,7 @@ public class JRELocaleProviderAdapter extends LocaleProviderAdapter implements R
|
||||
}
|
||||
|
||||
// ResourceBundleBasedAdapter method implementation
|
||||
|
||||
@Override
|
||||
public LocaleData getLocaleData() {
|
||||
if (localeData == null) {
|
||||
@ -449,4 +497,4 @@ public class JRELocaleProviderAdapter extends LocaleProviderAdapter implements R
|
||||
}
|
||||
return locales;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -152,9 +152,6 @@ public final class TimeZoneNames extends TimeZoneNamesBundle {
|
||||
String GST[] = new String[] {"Gulf Standard Time", "GST",
|
||||
"Gulf Daylight Time", "GDT",
|
||||
"Gulf Time", "GT"};
|
||||
String HAST[] = new String[] {"Hawaii-Aleutian Standard Time", "HAST",
|
||||
"Hawaii-Aleutian Daylight Time", "HADT",
|
||||
"Hawaii-Aleutian Time", "HAT"};
|
||||
String HKT[] = new String[] {"Hong Kong Time", "HKT",
|
||||
"Hong Kong Summer Time", "HKST",
|
||||
"Hong Kong Time", "HKT"};
|
||||
@ -371,7 +368,7 @@ public final class TimeZoneNames extends TimeZoneNamesBundle {
|
||||
{"Africa/Tripoli", EET},
|
||||
{"Africa/Tunis", CET},
|
||||
{"Africa/Windhoek", WAT},
|
||||
{"America/Adak", HAST},
|
||||
{"America/Adak", HST},
|
||||
{"America/Anguilla", AST},
|
||||
{"America/Antigua", AST},
|
||||
{"America/Araguaina", BRT},
|
||||
@ -393,7 +390,7 @@ public final class TimeZoneNames extends TimeZoneNamesBundle {
|
||||
"Paraguay Summer Time", "PYST",
|
||||
"Paraguay Time", "PYT"}},
|
||||
{"America/Atikokan", EST},
|
||||
{"America/Atka", HAST},
|
||||
{"America/Atka", HST},
|
||||
{"America/Bahia", BRT},
|
||||
{"America/Bahia_Banderas", CST},
|
||||
{"America/Barbados", AST},
|
||||
@ -1024,7 +1021,7 @@ public final class TimeZoneNames extends TimeZoneNamesBundle {
|
||||
{"UCT", UTC},
|
||||
{"Universal", UTC},
|
||||
{"US/Alaska", AKST},
|
||||
{"US/Aleutian", HAST},
|
||||
{"US/Aleutian", HST},
|
||||
{"US/Arizona", MST},
|
||||
{"US/Central", CST},
|
||||
{"US/Eastern", EST},
|
||||
|
@ -395,6 +395,9 @@ JVM_GetDeclaredClasses(JNIEnv *env, jclass ofClass);
|
||||
JNIEXPORT jclass JNICALL
|
||||
JVM_GetDeclaringClass(JNIEnv *env, jclass ofClass);
|
||||
|
||||
JNIEXPORT jstring JNICALL
|
||||
JVM_GetSimpleBinaryName(JNIEnv *env, jclass ofClass);
|
||||
|
||||
/* Generics support (JDK 1.5) */
|
||||
JNIEXPORT jstring JNICALL
|
||||
JVM_GetClassSignature(JNIEnv *env, jclass cls);
|
||||
|
@ -67,6 +67,7 @@ static JNINativeMethod methods[] = {
|
||||
{"getProtectionDomain0", "()" PD, (void *)&JVM_GetProtectionDomain},
|
||||
{"getDeclaredClasses0", "()[" CLS, (void *)&JVM_GetDeclaredClasses},
|
||||
{"getDeclaringClass0", "()" CLS, (void *)&JVM_GetDeclaringClass},
|
||||
{"getSimpleBinaryName0", "()" STR, (void *)&JVM_GetSimpleBinaryName},
|
||||
{"getGenericSignature0", "()" STR, (void *)&JVM_GetClassSignature},
|
||||
{"getRawAnnotations", "()" BA, (void *)&JVM_GetClassAnnotations},
|
||||
{"getConstantPool", "()" CPL, (void *)&JVM_GetClassConstantPool},
|
||||
|
@ -33,7 +33,6 @@ import java.util.Set;
|
||||
import java.util.function.Function;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.Stream;
|
||||
import javax.management.DynamicMBean;
|
||||
import javax.management.ObjectName;
|
||||
import sun.management.ManagementFactoryHelper;
|
||||
import sun.management.spi.PlatformMBeanProvider;
|
||||
@ -162,8 +161,7 @@ class DefaultPlatformMBeanProvider extends PlatformMBeanProvider {
|
||||
@Override
|
||||
public Set<Class<? extends MemoryManagerMXBean>> mbeanInterfaces() {
|
||||
return Stream.of(MemoryManagerMXBean.class,
|
||||
GarbageCollectorMXBean.class,
|
||||
com.sun.management.GarbageCollectorMXBean.class).collect(Collectors.toSet());
|
||||
GarbageCollectorMXBean.class).collect(Collectors.toSet());
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -464,39 +462,6 @@ class DefaultPlatformMBeanProvider extends PlatformMBeanProvider {
|
||||
|
||||
});
|
||||
|
||||
/**
|
||||
* DynamicMBean
|
||||
*/
|
||||
HashMap<ObjectName, DynamicMBean> dynmbeans
|
||||
= ManagementFactoryHelper.getPlatformDynamicMBeans();
|
||||
final Set<String> dynamicMBeanInterfaceNames =
|
||||
Collections.unmodifiableSet(Collections.singleton("javax.management.DynamicMBean"));
|
||||
for (Map.Entry<ObjectName, DynamicMBean> e : dynmbeans.entrySet()) {
|
||||
initMBeanList.add(new PlatformComponent<DynamicMBean>() {
|
||||
@Override
|
||||
public Set<Class<? extends DynamicMBean>> mbeanInterfaces() {
|
||||
return Collections.emptySet();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<String> mbeanInterfaceNames() {
|
||||
return dynamicMBeanInterfaceNames;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getObjectNamePattern() {
|
||||
return e.getKey().getCanonicalName();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String, DynamicMBean> nameToMBeanMap() {
|
||||
return Collections.<String, DynamicMBean>singletonMap(
|
||||
e.getKey().getCanonicalName(),
|
||||
e.getValue());
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
initMBeanList.trimToSize();
|
||||
return initMBeanList;
|
||||
}
|
||||
|
@ -582,7 +582,7 @@ public class ManagementFactory {
|
||||
final Class<?> cls = mxbeanInterface;
|
||||
ClassLoader loader =
|
||||
AccessController.doPrivileged(
|
||||
(PrivilegedAction<ClassLoader>) () -> cls.getClassLoader());
|
||||
(PrivilegedAction<ClassLoader>) () -> cls.getClassLoader());
|
||||
if (!sun.misc.VM.isSystemDomainLoader(loader)) {
|
||||
throw new IllegalArgumentException(mxbeanName +
|
||||
" is not a platform MXBean");
|
||||
@ -883,7 +883,7 @@ public class ManagementFactory {
|
||||
all.add(new DefaultPlatformMBeanProvider());
|
||||
return all;
|
||||
}, null, new FilePermission("<<ALL FILES>>", "read"),
|
||||
new RuntimePermission("sun.management.spi.PlatformMBeanProvider"));
|
||||
new RuntimePermission("sun.management.spi.PlatformMBeanProvider.subclass"));
|
||||
|
||||
// load all platform components into a map
|
||||
componentMap = providers.stream()
|
||||
@ -970,4 +970,11 @@ public class ManagementFactory {
|
||||
return singleton;
|
||||
}
|
||||
}
|
||||
|
||||
static {
|
||||
AccessController.doPrivileged((PrivilegedAction<Void>) () -> {
|
||||
System.loadLibrary("management");
|
||||
return null;
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -34,6 +34,7 @@ import java.lang.management.ManagementFactory;
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.lang.reflect.Method;
|
||||
import java.net.InetAddress;
|
||||
import java.net.MalformedURLException;
|
||||
import java.net.UnknownHostException;
|
||||
import java.text.MessageFormat;
|
||||
import java.util.MissingResourceException;
|
||||
@ -55,6 +56,125 @@ import sun.misc.VMSupport;
|
||||
* system class loader. Also jmx framework could be started by jcmd
|
||||
*/
|
||||
public class Agent {
|
||||
/**
|
||||
* Agent status collector strategy class
|
||||
*/
|
||||
private static abstract class StatusCollector {
|
||||
final protected StringBuilder sb = new StringBuilder();
|
||||
final public String collect() {
|
||||
Properties agentProps = VMSupport.getAgentProperties();
|
||||
String localConnAddr = (String)agentProps.get(LOCAL_CONNECTOR_ADDRESS_PROP);
|
||||
if (localConnAddr != null || jmxServer != null) {
|
||||
addAgentStatus(true);
|
||||
appendConnections(localConnAddr);
|
||||
} else {
|
||||
addAgentStatus(false);
|
||||
}
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
private void appendConnections(String localConnAddr) {
|
||||
appendConnectionsHeader();
|
||||
if (localConnAddr != null) {
|
||||
try {
|
||||
JMXServiceURL u = new JMXServiceURL(localConnAddr);
|
||||
addConnection(false, u);
|
||||
} catch (MalformedURLException e) {
|
||||
// will never happen
|
||||
}
|
||||
|
||||
}
|
||||
if (jmxServer != null) {
|
||||
addConnection(true, jmxServer.getAddress());
|
||||
}
|
||||
appendConnectionsFooter();
|
||||
}
|
||||
|
||||
private void addConnection(boolean remote, JMXServiceURL u) {
|
||||
appendConnectionHeader(remote);
|
||||
addConnectionDetails(u);
|
||||
if (remote) {
|
||||
addConfigProperties();
|
||||
}
|
||||
appendConnectionFooter(remote);
|
||||
}
|
||||
|
||||
private void addConfigProperties() {
|
||||
appendConfigPropsHeader();
|
||||
boolean[] first = new boolean[] {true};
|
||||
configProps.entrySet().stream().forEach((e) -> {
|
||||
String key = (String)e.getKey();
|
||||
if (key.startsWith("com.sun.management.")) {
|
||||
addConfigProp(key, e.getValue(), first[0]);
|
||||
first[0] = false;
|
||||
}
|
||||
});
|
||||
appendConfigPropsFooter();
|
||||
}
|
||||
|
||||
abstract protected void addAgentStatus(boolean enabled);
|
||||
abstract protected void appendConnectionsHeader();
|
||||
abstract protected void appendConnectionsFooter();
|
||||
abstract protected void addConnectionDetails(JMXServiceURL u);
|
||||
abstract protected void appendConnectionHeader(boolean remote);
|
||||
abstract protected void appendConnectionFooter(boolean remote);
|
||||
abstract protected void appendConfigPropsHeader();
|
||||
abstract protected void appendConfigPropsFooter();
|
||||
abstract protected void addConfigProp(String key, Object value, boolean first);
|
||||
}
|
||||
|
||||
/**
|
||||
* Free-text status collector strategy implementation
|
||||
*/
|
||||
final private static class TextStatusCollector extends StatusCollector {
|
||||
|
||||
@Override
|
||||
protected void addAgentStatus(boolean enabled) {
|
||||
sb.append("Agent: ").append(enabled ? "enabled" : "disabled").append('\n');
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void appendConnectionsHeader() {
|
||||
sb.append('\n');
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void addConnectionDetails(JMXServiceURL u) {
|
||||
sb.append("Protocol : ").append(u.getProtocol()).append('\n')
|
||||
.append("Host : ").append(u.getHost()).append('\n')
|
||||
.append("URL : ").append(u).append('\n');
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void appendConnectionHeader(boolean remote) {
|
||||
sb.append("Connection Type: ").append(remote ? "remote" : "local").append('\n');
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void appendConfigPropsHeader() {
|
||||
sb.append("Properties :\n");
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void addConfigProp(String key, Object value, boolean first) {
|
||||
if (!first) {
|
||||
sb.append('\n');
|
||||
}
|
||||
sb.append(" ").append(key).append(" = ").append(value);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void appendConnectionsFooter() {}
|
||||
|
||||
@Override
|
||||
protected void appendConnectionFooter(boolean remote) {
|
||||
sb.append('\n');
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void appendConfigPropsFooter() {}
|
||||
}
|
||||
|
||||
// management properties
|
||||
|
||||
private static Properties mgmtProps;
|
||||
@ -81,6 +201,8 @@ public class Agent {
|
||||
|
||||
// The only active agent allowed
|
||||
private static JMXConnectorServer jmxServer = null;
|
||||
// The properties used to configure the server
|
||||
private static Properties configProps = null;
|
||||
|
||||
// Parse string com.sun.management.prop=xxx,com.sun.management.prop=yyyy
|
||||
// and return property set if args is null or empty
|
||||
@ -161,7 +283,7 @@ public class Agent {
|
||||
|
||||
try {
|
||||
Properties argProps = parseString(args);
|
||||
Properties configProps = new Properties();
|
||||
configProps = new Properties();
|
||||
|
||||
// Load the management properties from the config file
|
||||
// if config file is not specified readConfiguration implicitly
|
||||
@ -228,9 +350,14 @@ public class Agent {
|
||||
// Don't cause any errors.
|
||||
jmxServer.stop();
|
||||
jmxServer = null;
|
||||
configProps = null;
|
||||
}
|
||||
}
|
||||
|
||||
private static synchronized String getManagementAgentStatus() throws Exception {
|
||||
return new TextStatusCollector().collect();
|
||||
}
|
||||
|
||||
private static void startAgent(Properties props) throws Exception {
|
||||
String snmpPort = props.getProperty(SNMP_PORT);
|
||||
String jmxremote = props.getProperty(JMXREMOTE);
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -25,168 +25,31 @@
|
||||
|
||||
package sun.management;
|
||||
|
||||
import com.sun.management.GarbageCollectorMXBean;
|
||||
import com.sun.management.GarbageCollectionNotificationInfo;
|
||||
import java.lang.management.GarbageCollectorMXBean;
|
||||
import java.lang.management.ManagementFactory;
|
||||
import java.lang.management.MemoryPoolMXBean;
|
||||
import java.lang.management.MemoryUsage;
|
||||
|
||||
import com.sun.management.GcInfo;
|
||||
import javax.management.openmbean.CompositeData;
|
||||
import javax.management.MBeanInfo;
|
||||
import javax.management.MBeanAttributeInfo;
|
||||
import javax.management.ObjectName;
|
||||
import javax.management.MBeanNotificationInfo;
|
||||
import javax.management.Notification;
|
||||
import javax.management.NotificationFilter;
|
||||
import javax.management.NotificationListener;
|
||||
import javax.management.ListenerNotFoundException;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.ListIterator;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* Implementation class for the garbage collector.
|
||||
* Standard and committed hotspot-specific metrics if any.
|
||||
*
|
||||
* ManagementFactory.getGarbageCollectorMXBeans() returns a list
|
||||
* of instances of this class.
|
||||
*/
|
||||
class GarbageCollectorImpl extends MemoryManagerImpl
|
||||
public class GarbageCollectorImpl extends MemoryManagerImpl
|
||||
implements GarbageCollectorMXBean {
|
||||
|
||||
GarbageCollectorImpl(String name) {
|
||||
protected GarbageCollectorImpl(String name) {
|
||||
super(name);
|
||||
}
|
||||
|
||||
@Override
|
||||
public native long getCollectionCount();
|
||||
|
||||
@Override
|
||||
public native long getCollectionTime();
|
||||
|
||||
|
||||
// The memory pools are static and won't be changed.
|
||||
// TODO: If the hotspot implementation begins to have pools
|
||||
// dynamically created and removed, this needs to be modified.
|
||||
private String[] poolNames = null;
|
||||
synchronized String[] getAllPoolNames() {
|
||||
if (poolNames == null) {
|
||||
List<MemoryPoolMXBean> pools = ManagementFactory.getMemoryPoolMXBeans();
|
||||
poolNames = new String[pools.size()];
|
||||
int i = 0;
|
||||
for (MemoryPoolMXBean m : pools) {
|
||||
poolNames[i++] = m.getName();
|
||||
}
|
||||
}
|
||||
return poolNames;
|
||||
}
|
||||
|
||||
// Sun JDK extension
|
||||
private GcInfoBuilder gcInfoBuilder;
|
||||
|
||||
private synchronized GcInfoBuilder getGcInfoBuilder() {
|
||||
if(gcInfoBuilder == null) {
|
||||
gcInfoBuilder = new GcInfoBuilder(this, getAllPoolNames());
|
||||
}
|
||||
return gcInfoBuilder;
|
||||
}
|
||||
|
||||
public GcInfo getLastGcInfo() {
|
||||
GcInfo info = getGcInfoBuilder().getLastGcInfo();
|
||||
return info;
|
||||
}
|
||||
|
||||
private final static String notifName =
|
||||
"javax.management.Notification";
|
||||
|
||||
private final static String[] gcNotifTypes = {
|
||||
GarbageCollectionNotificationInfo.GARBAGE_COLLECTION_NOTIFICATION
|
||||
};
|
||||
|
||||
private MBeanNotificationInfo[] notifInfo = null;
|
||||
public MBeanNotificationInfo[] getNotificationInfo() {
|
||||
synchronized (this) {
|
||||
if (notifInfo == null) {
|
||||
notifInfo = new MBeanNotificationInfo[1];
|
||||
notifInfo[0] = new MBeanNotificationInfo(gcNotifTypes,
|
||||
notifName,
|
||||
"GC Notification");
|
||||
}
|
||||
}
|
||||
return notifInfo;
|
||||
}
|
||||
|
||||
private static long seqNumber = 0;
|
||||
private static long getNextSeqNumber() {
|
||||
return ++seqNumber;
|
||||
}
|
||||
|
||||
void createGCNotification(long timestamp,
|
||||
String gcName,
|
||||
String gcAction,
|
||||
String gcCause,
|
||||
GcInfo gcInfo) {
|
||||
|
||||
if (!hasListeners()) {
|
||||
return;
|
||||
}
|
||||
|
||||
Notification notif = new Notification(GarbageCollectionNotificationInfo.GARBAGE_COLLECTION_NOTIFICATION,
|
||||
getObjectName(),
|
||||
getNextSeqNumber(),
|
||||
timestamp,
|
||||
gcName);
|
||||
GarbageCollectionNotificationInfo info =
|
||||
new GarbageCollectionNotificationInfo(gcName,
|
||||
gcAction,
|
||||
gcCause,
|
||||
gcInfo);
|
||||
|
||||
CompositeData cd =
|
||||
GarbageCollectionNotifInfoCompositeData.toCompositeData(info);
|
||||
notif.setUserData(cd);
|
||||
sendNotification(notif);
|
||||
}
|
||||
|
||||
public synchronized void addNotificationListener(NotificationListener listener,
|
||||
NotificationFilter filter,
|
||||
Object handback)
|
||||
{
|
||||
boolean before = hasListeners();
|
||||
super.addNotificationListener(listener, filter, handback);
|
||||
boolean after = hasListeners();
|
||||
if (!before && after) {
|
||||
setNotificationEnabled(this, true);
|
||||
}
|
||||
}
|
||||
|
||||
public synchronized void removeNotificationListener(NotificationListener listener)
|
||||
throws ListenerNotFoundException {
|
||||
boolean before = hasListeners();
|
||||
super.removeNotificationListener(listener);
|
||||
boolean after = hasListeners();
|
||||
if (before && !after) {
|
||||
setNotificationEnabled(this,false);
|
||||
}
|
||||
}
|
||||
|
||||
public synchronized void removeNotificationListener(NotificationListener listener,
|
||||
NotificationFilter filter,
|
||||
Object handback)
|
||||
throws ListenerNotFoundException
|
||||
{
|
||||
boolean before = hasListeners();
|
||||
super.removeNotificationListener(listener,filter,handback);
|
||||
boolean after = hasListeners();
|
||||
if (before && !after) {
|
||||
setNotificationEnabled(this,false);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public ObjectName getObjectName() {
|
||||
return Util.newObjectName(ManagementFactory.GARBAGE_COLLECTOR_MXBEAN_DOMAIN_TYPE, getName());
|
||||
}
|
||||
|
||||
native void setNotificationEnabled(GarbageCollectorMXBean gc,
|
||||
boolean enabled);
|
||||
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2004, 2012, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2004, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -115,28 +115,28 @@ public abstract class LazyCompositeData
|
||||
protected abstract CompositeData getCompositeData();
|
||||
|
||||
// Helper methods
|
||||
static String getString(CompositeData cd, String itemName) {
|
||||
public static String getString(CompositeData cd, String itemName) {
|
||||
if (cd == null)
|
||||
throw new IllegalArgumentException("Null CompositeData");
|
||||
|
||||
return (String) cd.get(itemName);
|
||||
}
|
||||
|
||||
static boolean getBoolean(CompositeData cd, String itemName) {
|
||||
public static boolean getBoolean(CompositeData cd, String itemName) {
|
||||
if (cd == null)
|
||||
throw new IllegalArgumentException("Null CompositeData");
|
||||
|
||||
return ((Boolean) cd.get(itemName)).booleanValue();
|
||||
}
|
||||
|
||||
static long getLong(CompositeData cd, String itemName) {
|
||||
public static long getLong(CompositeData cd, String itemName) {
|
||||
if (cd == null)
|
||||
throw new IllegalArgumentException("Null CompositeData");
|
||||
|
||||
return ((Long) cd.get(itemName)).longValue();
|
||||
}
|
||||
|
||||
static int getInt(CompositeData cd, String itemName) {
|
||||
public static int getInt(CompositeData cd, String itemName) {
|
||||
if (cd == null)
|
||||
throw new IllegalArgumentException("Null CompositeData");
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -26,8 +26,6 @@
|
||||
package sun.management;
|
||||
|
||||
import java.lang.management.*;
|
||||
|
||||
import javax.management.DynamicMBean;
|
||||
import javax.management.InstanceAlreadyExistsException;
|
||||
import javax.management.InstanceNotFoundException;
|
||||
import javax.management.MBeanServer;
|
||||
@ -38,30 +36,35 @@ import javax.management.RuntimeOperationsException;
|
||||
import java.security.AccessController;
|
||||
import java.security.PrivilegedActionException;
|
||||
import java.security.PrivilegedExceptionAction;
|
||||
|
||||
import sun.util.logging.LoggingSupport;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import com.sun.management.DiagnosticCommandMBean;
|
||||
import com.sun.management.HotSpotDiagnosticMXBean;
|
||||
|
||||
/**
|
||||
* ManagementFactoryHelper provides static factory methods to create
|
||||
* instances of the management interface.
|
||||
*/
|
||||
public class ManagementFactoryHelper {
|
||||
static {
|
||||
// make sure that the management lib is loaded within
|
||||
// java.lang.management.ManagementFactory
|
||||
sun.misc.Unsafe.getUnsafe().ensureClassInitialized(ManagementFactory.class);
|
||||
}
|
||||
|
||||
private static final VMManagement jvm = new VMManagementImpl();
|
||||
|
||||
private ManagementFactoryHelper() {};
|
||||
|
||||
private static VMManagement jvm;
|
||||
public static VMManagement getVMManagement() {
|
||||
return jvm;
|
||||
}
|
||||
|
||||
private static ClassLoadingImpl classMBean = null;
|
||||
private static MemoryImpl memoryMBean = null;
|
||||
private static ThreadImpl threadMBean = null;
|
||||
private static RuntimeImpl runtimeMBean = null;
|
||||
private static CompilationImpl compileMBean = null;
|
||||
private static OperatingSystemImpl osMBean = null;
|
||||
private static BaseOperatingSystemImpl osMBean = null;
|
||||
|
||||
public static synchronized ClassLoadingMXBean getClassLoadingMXBean() {
|
||||
if (classMBean == null) {
|
||||
@ -100,7 +103,7 @@ public class ManagementFactoryHelper {
|
||||
|
||||
public static synchronized OperatingSystemMXBean getOperatingSystemMXBean() {
|
||||
if (osMBean == null) {
|
||||
osMBean = new OperatingSystemImpl(jvm);
|
||||
osMBean = new BaseOperatingSystemImpl(jvm);
|
||||
}
|
||||
return osMBean;
|
||||
}
|
||||
@ -123,7 +126,7 @@ public class ManagementFactoryHelper {
|
||||
return result;
|
||||
}
|
||||
|
||||
public static List<GarbageCollectorMXBean> getGarbageCollectorMXBeans() {
|
||||
public static List<GarbageCollectorMXBean> getGarbageCollectorMXBeans() {
|
||||
MemoryManagerMXBean[] mgrs = MemoryImpl.getMemoryManagers();
|
||||
List<GarbageCollectorMXBean> result = new ArrayList<>(mgrs.length);
|
||||
for (MemoryManagerMXBean m : mgrs) {
|
||||
@ -257,20 +260,11 @@ public class ManagementFactoryHelper {
|
||||
};
|
||||
}
|
||||
|
||||
private static HotSpotDiagnostic hsDiagMBean = null;
|
||||
private static HotspotRuntime hsRuntimeMBean = null;
|
||||
private static HotspotClassLoading hsClassMBean = null;
|
||||
private static HotspotThread hsThreadMBean = null;
|
||||
private static HotspotCompilation hsCompileMBean = null;
|
||||
private static HotspotMemory hsMemoryMBean = null;
|
||||
private static DiagnosticCommandImpl hsDiagCommandMBean = null;
|
||||
|
||||
public static synchronized HotSpotDiagnosticMXBean getDiagnosticMXBean() {
|
||||
if (hsDiagMBean == null) {
|
||||
hsDiagMBean = new HotSpotDiagnostic();
|
||||
}
|
||||
return hsDiagMBean;
|
||||
}
|
||||
|
||||
/**
|
||||
* This method is for testing only.
|
||||
@ -312,14 +306,6 @@ public class ManagementFactoryHelper {
|
||||
return hsMemoryMBean;
|
||||
}
|
||||
|
||||
public static synchronized DiagnosticCommandMBean getDiagnosticCommandMBean() {
|
||||
// Remote Diagnostic Commands may not be supported
|
||||
if (hsDiagCommandMBean == null && jvm.isRemoteDiagnosticCommandsSupported()) {
|
||||
hsDiagCommandMBean = new DiagnosticCommandImpl(jvm);
|
||||
}
|
||||
return hsDiagCommandMBean;
|
||||
}
|
||||
|
||||
/**
|
||||
* This method is for testing only.
|
||||
*/
|
||||
@ -374,18 +360,6 @@ public class ManagementFactoryHelper {
|
||||
private final static String HOTSPOT_THREAD_MBEAN_NAME =
|
||||
"sun.management:type=HotspotThreading";
|
||||
|
||||
final static String HOTSPOT_DIAGNOSTIC_COMMAND_MBEAN_NAME =
|
||||
"com.sun.management:type=DiagnosticCommand";
|
||||
|
||||
public static HashMap<ObjectName, DynamicMBean> getPlatformDynamicMBeans() {
|
||||
HashMap<ObjectName, DynamicMBean> map = new HashMap<>();
|
||||
DiagnosticCommandMBean diagMBean = getDiagnosticCommandMBean();
|
||||
if (diagMBean != null) {
|
||||
map.put(Util.newObjectName(HOTSPOT_DIAGNOSTIC_COMMAND_MBEAN_NAME), diagMBean);
|
||||
}
|
||||
return map;
|
||||
}
|
||||
|
||||
static void registerInternalMBeans(MBeanServer mbs) {
|
||||
// register all internal MBeans if not registered
|
||||
// No exception is thrown if a MBean with that object name
|
||||
@ -441,17 +415,6 @@ public class ManagementFactoryHelper {
|
||||
}
|
||||
}
|
||||
|
||||
static {
|
||||
AccessController.doPrivileged(
|
||||
new java.security.PrivilegedAction<Void>() {
|
||||
public Void run() {
|
||||
System.loadLibrary("management");
|
||||
return null;
|
||||
}
|
||||
});
|
||||
jvm = new VMManagementImpl();
|
||||
}
|
||||
|
||||
public static boolean isThreadSuspended(int state) {
|
||||
return ((state & JMM_THREAD_STATE_FLAG_SUSPENDED) != 0);
|
||||
}
|
||||
@ -471,4 +434,20 @@ public class ManagementFactoryHelper {
|
||||
private static final int JMM_THREAD_STATE_FLAG_SUSPENDED = 0x00100000;
|
||||
private static final int JMM_THREAD_STATE_FLAG_NATIVE = 0x00400000;
|
||||
|
||||
// Invoked by the VM
|
||||
private static MemoryPoolMXBean createMemoryPool
|
||||
(String name, boolean isHeap, long uThreshold, long gcThreshold) {
|
||||
return new MemoryPoolImpl(name, isHeap, uThreshold, gcThreshold);
|
||||
}
|
||||
|
||||
private static MemoryManagerMXBean createMemoryManager(String name) {
|
||||
return new MemoryManagerImpl(name);
|
||||
}
|
||||
|
||||
private static GarbageCollectorMXBean
|
||||
createGarbageCollector(String name, String type) {
|
||||
|
||||
// ignore type parameter which is for future extension
|
||||
return new GarbageCollectorImpl(name);
|
||||
}
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2004, 2012, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2004, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -38,10 +38,8 @@ import java.security.AccessController;
|
||||
import java.security.PrivilegedAction;
|
||||
import java.security.PrivilegedActionException;
|
||||
import java.security.PrivilegedExceptionAction;
|
||||
import javax.management.*;
|
||||
import javax.management.openmbean.*;
|
||||
import static javax.management.openmbean.SimpleType.*;
|
||||
import com.sun.management.VMOption;
|
||||
|
||||
/**
|
||||
* A mapped mxbean type maps a Java type to an open type.
|
||||
@ -113,7 +111,7 @@ public abstract class MappedMXBeanType {
|
||||
return mt;
|
||||
}
|
||||
|
||||
static synchronized MappedMXBeanType getMappedType(Type t)
|
||||
public static synchronized MappedMXBeanType getMappedType(Type t)
|
||||
throws OpenDataException {
|
||||
MappedMXBeanType mt = convertedTypes.get(t);
|
||||
if (mt == null) {
|
||||
@ -152,7 +150,7 @@ public abstract class MappedMXBeanType {
|
||||
}
|
||||
|
||||
// Return the mapped open type
|
||||
OpenType<?> getOpenType() {
|
||||
public OpenType<?> getOpenType() {
|
||||
return openType;
|
||||
}
|
||||
|
||||
@ -177,10 +175,10 @@ public abstract class MappedMXBeanType {
|
||||
// return name of the class or the generic type
|
||||
abstract String getName();
|
||||
|
||||
abstract Object toOpenTypeData(Object javaTypeData)
|
||||
public abstract Object toOpenTypeData(Object javaTypeData)
|
||||
throws OpenDataException;
|
||||
|
||||
abstract Object toJavaTypeData(Object openTypeData)
|
||||
public abstract Object toJavaTypeData(Object openTypeData)
|
||||
throws OpenDataException, InvalidObjectException;
|
||||
|
||||
// Basic Types - Classes that do not require data conversion
|
||||
@ -208,11 +206,11 @@ public abstract class MappedMXBeanType {
|
||||
return basicType.getName();
|
||||
}
|
||||
|
||||
Object toOpenTypeData(Object data) throws OpenDataException {
|
||||
public Object toOpenTypeData(Object data) throws OpenDataException {
|
||||
return data;
|
||||
}
|
||||
|
||||
Object toJavaTypeData(Object data)
|
||||
public Object toJavaTypeData(Object data)
|
||||
throws OpenDataException, InvalidObjectException {
|
||||
|
||||
return data;
|
||||
@ -243,11 +241,11 @@ public abstract class MappedMXBeanType {
|
||||
return enumClass.getName();
|
||||
}
|
||||
|
||||
Object toOpenTypeData(Object data) throws OpenDataException {
|
||||
public Object toOpenTypeData(Object data) throws OpenDataException {
|
||||
return ((Enum) data).name();
|
||||
}
|
||||
|
||||
Object toJavaTypeData(Object data)
|
||||
public Object toJavaTypeData(Object data)
|
||||
throws OpenDataException, InvalidObjectException {
|
||||
|
||||
try {
|
||||
@ -315,7 +313,7 @@ public abstract class MappedMXBeanType {
|
||||
return arrayClass.getName();
|
||||
}
|
||||
|
||||
Object toOpenTypeData(Object data) throws OpenDataException {
|
||||
public Object toOpenTypeData(Object data) throws OpenDataException {
|
||||
// If the base element type is a basic type
|
||||
// return the data as no conversion is needed.
|
||||
// Primitive types are not converted to wrappers.
|
||||
@ -340,7 +338,7 @@ public abstract class MappedMXBeanType {
|
||||
}
|
||||
|
||||
|
||||
Object toJavaTypeData(Object data)
|
||||
public Object toJavaTypeData(Object data)
|
||||
throws OpenDataException, InvalidObjectException {
|
||||
|
||||
// If the base element type is a basic type
|
||||
@ -457,7 +455,7 @@ public abstract class MappedMXBeanType {
|
||||
return typeName;
|
||||
}
|
||||
|
||||
Object toOpenTypeData(Object data) throws OpenDataException {
|
||||
public Object toOpenTypeData(Object data) throws OpenDataException {
|
||||
final List<Object> list = (List<Object>) data;
|
||||
|
||||
final Object[] openArray = (Object[])
|
||||
@ -470,7 +468,7 @@ public abstract class MappedMXBeanType {
|
||||
return openArray;
|
||||
}
|
||||
|
||||
Object toJavaTypeData(Object data)
|
||||
public Object toJavaTypeData(Object data)
|
||||
throws OpenDataException, InvalidObjectException {
|
||||
|
||||
final Object[] openArray = (Object[]) data;
|
||||
@ -538,7 +536,7 @@ public abstract class MappedMXBeanType {
|
||||
return typeName;
|
||||
}
|
||||
|
||||
Object toOpenTypeData(Object data) throws OpenDataException {
|
||||
public Object toOpenTypeData(Object data) throws OpenDataException {
|
||||
final Map<Object,Object> map = (Map<Object,Object>) data;
|
||||
final TabularType tabularType = (TabularType) openType;
|
||||
final TabularData table = new TabularDataSupport(tabularType);
|
||||
@ -556,7 +554,7 @@ public abstract class MappedMXBeanType {
|
||||
return table;
|
||||
}
|
||||
|
||||
Object toJavaTypeData(Object data)
|
||||
public Object toJavaTypeData(Object data)
|
||||
throws OpenDataException, InvalidObjectException {
|
||||
|
||||
final TabularData td = (TabularData) data;
|
||||
@ -605,8 +603,9 @@ public abstract class MappedMXBeanType {
|
||||
//
|
||||
static class CompositeDataMXBeanType extends MappedMXBeanType {
|
||||
final Class<?> javaClass;
|
||||
final boolean isCompositeData;
|
||||
boolean isCompositeData = false;
|
||||
Method fromMethod = null;
|
||||
Method toMethod = null;
|
||||
|
||||
CompositeDataMXBeanType(Class<?> c) throws OpenDataException {
|
||||
this.javaClass = c;
|
||||
@ -624,6 +623,26 @@ public abstract class MappedMXBeanType {
|
||||
// that has no from method to be embeded in another class.
|
||||
}
|
||||
|
||||
// check if a static "toCompositeData" method exists
|
||||
try {
|
||||
toMethod = AccessController.doPrivileged(new PrivilegedExceptionAction<Method>() {
|
||||
public Method run() throws NoSuchMethodException {
|
||||
Method m = javaClass.getDeclaredMethod("toCompositeData", javaClass);
|
||||
if (m != null
|
||||
&& CompositeData.class.isAssignableFrom(m.getReturnType())
|
||||
&& Modifier.isStatic(m.getModifiers())) {
|
||||
m.setAccessible(true);
|
||||
return m;
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
});
|
||||
} catch (PrivilegedActionException e) {
|
||||
// ignore NoSuchMethodException since we allow classes
|
||||
// that has no from method to be embeded in another class.
|
||||
}
|
||||
|
||||
if (COMPOSITE_DATA_CLASS.isAssignableFrom(c)) {
|
||||
// c implements CompositeData - set openType to null
|
||||
// defer generating the CompositeType
|
||||
@ -636,16 +655,16 @@ public abstract class MappedMXBeanType {
|
||||
// Make a CompositeData containing all the getters
|
||||
final Method[] methods =
|
||||
AccessController.doPrivileged(new PrivilegedAction<Method[]>() {
|
||||
public Method[] run() {
|
||||
return javaClass.getMethods();
|
||||
}
|
||||
});
|
||||
public Method[] run() {
|
||||
return javaClass.getMethods();
|
||||
}
|
||||
});
|
||||
final List<String> names = new ArrayList<>();
|
||||
final List<OpenType<?>> types = new ArrayList<>();
|
||||
|
||||
/* Select public methods that look like "T getX()" or "boolean
|
||||
isX()", where T is not void and X is not the empty
|
||||
string. Exclude "Class getClass()" inherited from Object. */
|
||||
isX()", where T is not void and X is not the empty
|
||||
string. Exclude "Class getClass()" inherited from Object. */
|
||||
for (int i = 0; i < methods.length; i++) {
|
||||
final Method method = methods[i];
|
||||
final String name = method.getName();
|
||||
@ -676,10 +695,10 @@ public abstract class MappedMXBeanType {
|
||||
|
||||
final String[] nameArray = names.toArray(new String[0]);
|
||||
openType = new CompositeType(c.getName(),
|
||||
c.getName(),
|
||||
nameArray, // field names
|
||||
nameArray, // field descriptions
|
||||
types.toArray(new OpenType<?>[0]));
|
||||
c.getName(),
|
||||
nameArray, // field names
|
||||
nameArray, // field descriptions
|
||||
types.toArray(new OpenType<?>[0]));
|
||||
}
|
||||
}
|
||||
|
||||
@ -691,7 +710,23 @@ public abstract class MappedMXBeanType {
|
||||
return javaClass.getName();
|
||||
}
|
||||
|
||||
Object toOpenTypeData(Object data) throws OpenDataException {
|
||||
public Object toOpenTypeData(Object data) throws OpenDataException {
|
||||
if (toMethod != null) {
|
||||
try {
|
||||
return toMethod.invoke(null, data);
|
||||
} catch (IllegalAccessException e) {
|
||||
// should never reach here
|
||||
throw new AssertionError(e);
|
||||
} catch (InvocationTargetException e) {
|
||||
final OpenDataException ode
|
||||
= new OpenDataException("Failed to invoke "
|
||||
+ toMethod.getName() + " to convert " + javaClass.getName()
|
||||
+ " to CompositeData");
|
||||
ode.initCause(e);
|
||||
throw ode;
|
||||
}
|
||||
}
|
||||
|
||||
if (data instanceof MemoryUsage) {
|
||||
return MemoryUsageCompositeData.toCompositeData((MemoryUsage) data);
|
||||
}
|
||||
@ -712,10 +747,6 @@ public abstract class MappedMXBeanType {
|
||||
toCompositeData((MemoryNotificationInfo) data);
|
||||
}
|
||||
|
||||
if (data instanceof VMOption) {
|
||||
return VMOptionCompositeData.toCompositeData((VMOption) data);
|
||||
}
|
||||
|
||||
if (isCompositeData) {
|
||||
// Classes that implement CompositeData
|
||||
//
|
||||
@ -732,7 +763,7 @@ public abstract class MappedMXBeanType {
|
||||
" is not supported for platform MXBeans");
|
||||
}
|
||||
|
||||
Object toJavaTypeData(Object data)
|
||||
public Object toJavaTypeData(Object data)
|
||||
throws OpenDataException, InvalidObjectException {
|
||||
|
||||
if (fromMethod == null) {
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -34,13 +34,12 @@ import javax.management.NotificationListener;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.ArrayList;
|
||||
import java.util.ListIterator;
|
||||
import java.util.Collections;
|
||||
|
||||
/**
|
||||
* Abstract helper class for notification emitter support.
|
||||
*/
|
||||
abstract class NotificationEmitterSupport implements NotificationEmitter {
|
||||
public abstract class NotificationEmitterSupport implements NotificationEmitter {
|
||||
|
||||
protected NotificationEmitterSupport() {
|
||||
}
|
||||
@ -135,7 +134,7 @@ abstract class NotificationEmitterSupport implements NotificationEmitter {
|
||||
}
|
||||
}
|
||||
|
||||
void sendNotification(Notification notification) {
|
||||
public void sendNotification(Notification notification) {
|
||||
|
||||
if (notification == null) {
|
||||
return;
|
||||
@ -162,7 +161,7 @@ abstract class NotificationEmitterSupport implements NotificationEmitter {
|
||||
}
|
||||
}
|
||||
|
||||
boolean hasListeners() {
|
||||
public boolean hasListeners() {
|
||||
synchronized (listenerLock) {
|
||||
return !listenerList.isEmpty();
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -26,20 +26,18 @@
|
||||
package sun.management;
|
||||
|
||||
import java.lang.management.ManagementFactory;
|
||||
|
||||
import java.lang.management.ThreadInfo;
|
||||
|
||||
import java.lang.management.ThreadMXBean;
|
||||
import javax.management.ObjectName;
|
||||
|
||||
/**
|
||||
* Implementation class for the thread subsystem.
|
||||
* Standard and committed hotspot-specific metrics if any.
|
||||
*
|
||||
* ManagementFactory.getThreadMXBean() returns an instance
|
||||
* of this class.
|
||||
* Implementation for java.lang.management.ThreadMXBean as well as providing the
|
||||
* supporting method for com.sun.management.ThreadMXBean.
|
||||
* The supporting method for com.sun.management.ThreadMXBean can be moved to
|
||||
* jdk.management in the future.
|
||||
*/
|
||||
class ThreadImpl implements com.sun.management.ThreadMXBean {
|
||||
|
||||
public class ThreadImpl implements ThreadMXBean {
|
||||
private final VMManagement jvm;
|
||||
|
||||
// default for thread contention monitoring is disabled.
|
||||
@ -50,32 +48,38 @@ class ThreadImpl implements com.sun.management.ThreadMXBean {
|
||||
/**
|
||||
* Constructor of ThreadImpl class.
|
||||
*/
|
||||
ThreadImpl(VMManagement vm) {
|
||||
protected ThreadImpl(VMManagement vm) {
|
||||
this.jvm = vm;
|
||||
this.cpuTimeEnabled = jvm.isThreadCpuTimeEnabled();
|
||||
this.allocatedMemoryEnabled = jvm.isThreadAllocatedMemoryEnabled();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getThreadCount() {
|
||||
return jvm.getLiveThreadCount();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getPeakThreadCount() {
|
||||
return jvm.getPeakThreadCount();
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getTotalStartedThreadCount() {
|
||||
return jvm.getTotalThreadCount();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getDaemonThreadCount() {
|
||||
return jvm.getDaemonThreadCount();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isThreadContentionMonitoringSupported() {
|
||||
return jvm.isThreadContentionMonitoringSupported();
|
||||
}
|
||||
|
||||
@Override
|
||||
public synchronized boolean isThreadContentionMonitoringEnabled() {
|
||||
if (!isThreadContentionMonitoringSupported()) {
|
||||
throw new UnsupportedOperationException(
|
||||
@ -84,18 +88,21 @@ class ThreadImpl implements com.sun.management.ThreadMXBean {
|
||||
return contentionMonitoringEnabled;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isThreadCpuTimeSupported() {
|
||||
return jvm.isOtherThreadCpuTimeSupported();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isCurrentThreadCpuTimeSupported() {
|
||||
return jvm.isCurrentThreadCpuTimeSupported();
|
||||
}
|
||||
|
||||
public boolean isThreadAllocatedMemorySupported() {
|
||||
protected boolean isThreadAllocatedMemorySupported() {
|
||||
return jvm.isThreadAllocatedMemorySupported();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isThreadCpuTimeEnabled() {
|
||||
if (!isThreadCpuTimeSupported() &&
|
||||
!isCurrentThreadCpuTimeSupported()) {
|
||||
@ -105,7 +112,7 @@ class ThreadImpl implements com.sun.management.ThreadMXBean {
|
||||
return cpuTimeEnabled;
|
||||
}
|
||||
|
||||
public boolean isThreadAllocatedMemoryEnabled() {
|
||||
protected boolean isThreadAllocatedMemoryEnabled() {
|
||||
if (!isThreadAllocatedMemorySupported()) {
|
||||
throw new UnsupportedOperationException(
|
||||
"Thread allocated memory measurement is not supported");
|
||||
@ -113,6 +120,7 @@ class ThreadImpl implements com.sun.management.ThreadMXBean {
|
||||
return allocatedMemoryEnabled;
|
||||
}
|
||||
|
||||
@Override
|
||||
public long[] getAllThreadIds() {
|
||||
Util.checkMonitorAccess();
|
||||
|
||||
@ -126,6 +134,7 @@ class ThreadImpl implements com.sun.management.ThreadMXBean {
|
||||
return ids;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ThreadInfo getThreadInfo(long id) {
|
||||
long[] ids = new long[1];
|
||||
ids[0] = id;
|
||||
@ -133,6 +142,7 @@ class ThreadImpl implements com.sun.management.ThreadMXBean {
|
||||
return infos[0];
|
||||
}
|
||||
|
||||
@Override
|
||||
public ThreadInfo getThreadInfo(long id, int maxDepth) {
|
||||
long[] ids = new long[1];
|
||||
ids[0] = id;
|
||||
@ -140,6 +150,7 @@ class ThreadImpl implements com.sun.management.ThreadMXBean {
|
||||
return infos[0];
|
||||
}
|
||||
|
||||
@Override
|
||||
public ThreadInfo[] getThreadInfo(long[] ids) {
|
||||
return getThreadInfo(ids, 0);
|
||||
}
|
||||
@ -157,6 +168,7 @@ class ThreadImpl implements com.sun.management.ThreadMXBean {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public ThreadInfo[] getThreadInfo(long[] ids, int maxDepth) {
|
||||
verifyThreadIds(ids);
|
||||
|
||||
@ -165,6 +177,10 @@ class ThreadImpl implements com.sun.management.ThreadMXBean {
|
||||
"Invalid maxDepth parameter: " + maxDepth);
|
||||
}
|
||||
|
||||
// ids has been verified to be non-null
|
||||
// an empty array of ids should return an empty array of ThreadInfos
|
||||
if (ids.length == 0) return new ThreadInfo[0];
|
||||
|
||||
Util.checkMonitorAccess();
|
||||
|
||||
ThreadInfo[] infos = new ThreadInfo[ids.length]; // nulls
|
||||
@ -176,6 +192,7 @@ class ThreadImpl implements com.sun.management.ThreadMXBean {
|
||||
return infos;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setThreadContentionMonitoringEnabled(boolean enable) {
|
||||
if (!isThreadContentionMonitoringSupported()) {
|
||||
throw new UnsupportedOperationException(
|
||||
@ -209,6 +226,7 @@ class ThreadImpl implements com.sun.management.ThreadMXBean {
|
||||
return isThreadCpuTimeEnabled();
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getCurrentThreadCpuTime() {
|
||||
if (verifyCurrentThreadCpuTime()) {
|
||||
return getThreadTotalCpuTime0(0);
|
||||
@ -216,6 +234,7 @@ class ThreadImpl implements com.sun.management.ThreadMXBean {
|
||||
return -1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getThreadCpuTime(long id) {
|
||||
long[] ids = new long[1];
|
||||
ids[0] = id;
|
||||
@ -247,7 +266,7 @@ class ThreadImpl implements com.sun.management.ThreadMXBean {
|
||||
return isThreadCpuTimeEnabled();
|
||||
}
|
||||
|
||||
public long[] getThreadCpuTime(long[] ids) {
|
||||
protected long[] getThreadCpuTime(long[] ids) {
|
||||
boolean verified = verifyThreadCpuTime(ids);
|
||||
|
||||
int length = ids.length;
|
||||
@ -268,6 +287,7 @@ class ThreadImpl implements com.sun.management.ThreadMXBean {
|
||||
return times;
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getCurrentThreadUserTime() {
|
||||
if (verifyCurrentThreadCpuTime()) {
|
||||
return getThreadUserCpuTime0(0);
|
||||
@ -275,6 +295,7 @@ class ThreadImpl implements com.sun.management.ThreadMXBean {
|
||||
return -1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getThreadUserTime(long id) {
|
||||
long[] ids = new long[1];
|
||||
ids[0] = id;
|
||||
@ -282,7 +303,7 @@ class ThreadImpl implements com.sun.management.ThreadMXBean {
|
||||
return times[0];
|
||||
}
|
||||
|
||||
public long[] getThreadUserTime(long[] ids) {
|
||||
protected long[] getThreadUserTime(long[] ids) {
|
||||
boolean verified = verifyThreadCpuTime(ids);
|
||||
|
||||
int length = ids.length;
|
||||
@ -303,6 +324,7 @@ class ThreadImpl implements com.sun.management.ThreadMXBean {
|
||||
return times;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setThreadCpuTimeEnabled(boolean enable) {
|
||||
if (!isThreadCpuTimeSupported() &&
|
||||
!isCurrentThreadCpuTimeSupported()) {
|
||||
@ -320,7 +342,7 @@ class ThreadImpl implements com.sun.management.ThreadMXBean {
|
||||
}
|
||||
}
|
||||
|
||||
public long getThreadAllocatedBytes(long id) {
|
||||
protected long getThreadAllocatedBytes(long id) {
|
||||
long[] ids = new long[1];
|
||||
ids[0] = id;
|
||||
final long[] sizes = getThreadAllocatedBytes(ids);
|
||||
@ -339,7 +361,7 @@ class ThreadImpl implements com.sun.management.ThreadMXBean {
|
||||
return isThreadAllocatedMemoryEnabled();
|
||||
}
|
||||
|
||||
public long[] getThreadAllocatedBytes(long[] ids) {
|
||||
protected long[] getThreadAllocatedBytes(long[] ids) {
|
||||
boolean verified = verifyThreadAllocatedMemory(ids);
|
||||
|
||||
long[] sizes = new long[ids.length];
|
||||
@ -351,7 +373,7 @@ class ThreadImpl implements com.sun.management.ThreadMXBean {
|
||||
return sizes;
|
||||
}
|
||||
|
||||
public void setThreadAllocatedMemoryEnabled(boolean enable) {
|
||||
protected void setThreadAllocatedMemoryEnabled(boolean enable) {
|
||||
if (!isThreadAllocatedMemorySupported()) {
|
||||
throw new UnsupportedOperationException(
|
||||
"Thread allocated memory measurement is not supported.");
|
||||
@ -367,6 +389,7 @@ class ThreadImpl implements com.sun.management.ThreadMXBean {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public long[] findMonitorDeadlockedThreads() {
|
||||
Util.checkMonitorAccess();
|
||||
|
||||
@ -383,6 +406,7 @@ class ThreadImpl implements com.sun.management.ThreadMXBean {
|
||||
return ids;
|
||||
}
|
||||
|
||||
@Override
|
||||
public long[] findDeadlockedThreads() {
|
||||
if (!isSynchronizerUsageSupported()) {
|
||||
throw new UnsupportedOperationException(
|
||||
@ -404,15 +428,18 @@ class ThreadImpl implements com.sun.management.ThreadMXBean {
|
||||
return ids;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void resetPeakThreadCount() {
|
||||
Util.checkControlAccess();
|
||||
resetPeakThreadCount0();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isObjectMonitorUsageSupported() {
|
||||
return jvm.isObjectMonitorUsageSupported();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isSynchronizerUsageSupported() {
|
||||
return jvm.isSynchronizerUsageSupported();
|
||||
}
|
||||
@ -432,14 +459,20 @@ class ThreadImpl implements com.sun.management.ThreadMXBean {
|
||||
Util.checkMonitorAccess();
|
||||
}
|
||||
|
||||
@Override
|
||||
public ThreadInfo[] getThreadInfo(long[] ids,
|
||||
boolean lockedMonitors,
|
||||
boolean lockedSynchronizers) {
|
||||
verifyThreadIds(ids);
|
||||
// ids has been verified to be non-null
|
||||
// an empty array of ids should return an empty array of ThreadInfos
|
||||
if (ids.length == 0) return new ThreadInfo[0];
|
||||
|
||||
verifyDumpThreads(lockedMonitors, lockedSynchronizers);
|
||||
return dumpThreads0(ids, lockedMonitors, lockedSynchronizers);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ThreadInfo[] dumpAllThreads(boolean lockedMonitors,
|
||||
boolean lockedSynchronizers) {
|
||||
verifyDumpThreads(lockedMonitors, lockedSynchronizers);
|
||||
@ -469,6 +502,7 @@ class ThreadImpl implements com.sun.management.ThreadMXBean {
|
||||
// tid == 0 to reset contention times for all threads
|
||||
private static native void resetContentionTimes0(long tid);
|
||||
|
||||
@Override
|
||||
public ObjectName getObjectName() {
|
||||
return Util.newObjectName(ManagementFactory.THREAD_MXBEAN_NAME);
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2003, 2008, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -81,7 +81,7 @@ public class Util {
|
||||
static void checkMonitorAccess() throws SecurityException {
|
||||
checkAccess(monitorPermission);
|
||||
}
|
||||
static void checkControlAccess() throws SecurityException {
|
||||
public static void checkControlAccess() throws SecurityException {
|
||||
checkAccess(controlPermission);
|
||||
}
|
||||
}
|
||||
|
@ -205,7 +205,7 @@ public abstract class PlatformMBeanProvider {
|
||||
* Instantiates a new PlatformMBeanProvider.
|
||||
*
|
||||
* @throws SecurityException if the subclass (and calling code) does not
|
||||
* have {@code RuntimePermission("sun.management.spi.PlatformMBeanProvider", "subclass")}
|
||||
* have {@code RuntimePermission("sun.management.spi.PlatformMBeanProvider.subclass")}
|
||||
*/
|
||||
protected PlatformMBeanProvider () {
|
||||
this(checkSubclassPermission());
|
||||
@ -226,7 +226,7 @@ public abstract class PlatformMBeanProvider {
|
||||
private static Void checkSubclassPermission() {
|
||||
SecurityManager sm = System.getSecurityManager();
|
||||
if (sm != null) {
|
||||
sm.checkPermission(new RuntimePermission(PlatformMBeanProvider.class.getName(), "subclass"));
|
||||
sm.checkPermission(new RuntimePermission(PlatformMBeanProvider.class.getName()+".subclass"));
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
@ -36,17 +36,3 @@ JNIEXPORT jlong JNICALL Java_sun_management_GarbageCollectorImpl_getCollectionTi
|
||||
(JNIEnv *env, jobject mgr) {
|
||||
return jmm_interface->GetLongAttribute(env, mgr, JMM_GC_TIME_MS);
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT void JNICALL Java_sun_management_GarbageCollectorImpl_setNotificationEnabled
|
||||
(JNIEnv *env, jobject dummy, jobject gc,jboolean enabled) {
|
||||
|
||||
if (gc == NULL) {
|
||||
JNU_ThrowNullPointerException(env, "Invalid GarbageCollectorMBean");
|
||||
return;
|
||||
}
|
||||
if((jmm_version > JMM_VERSION_1_2)
|
||||
|| (jmm_version == JMM_VERSION_1_2 && ((jmm_version&0xFF)>=1))) {
|
||||
jmm_interface->SetGCNotificationEnabled(env, gc, enabled);
|
||||
}
|
||||
}
|
||||
|
@ -59,6 +59,8 @@ public class GSSUtil {
|
||||
GSSUtil.createOid("1.2.840.113554.1.2.2");
|
||||
public static final Oid GSS_KRB5_MECH_OID2 =
|
||||
GSSUtil.createOid("1.3.5.1.5.2");
|
||||
public static final Oid GSS_KRB5_MECH_OID_MS =
|
||||
GSSUtil.createOid("1.2.840.48018.1.2.2");
|
||||
|
||||
public static final Oid GSS_SPNEGO_MECH_OID =
|
||||
GSSUtil.createOid("1.3.6.1.5.5.2");
|
||||
@ -101,7 +103,8 @@ public class GSSUtil {
|
||||
|
||||
public static boolean isKerberosMech(Oid oid) {
|
||||
return (GSS_KRB5_MECH_OID.equals(oid) ||
|
||||
GSS_KRB5_MECH_OID2.equals(oid));
|
||||
GSS_KRB5_MECH_OID2.equals(oid) ||
|
||||
GSS_KRB5_MECH_OID_MS.equals(oid));
|
||||
|
||||
}
|
||||
|
||||
|
@ -538,14 +538,21 @@ public class SpNegoContext implements GSSContextSpi {
|
||||
// get the token for mechanism
|
||||
byte[] accept_token;
|
||||
|
||||
if (mechList[0].equals(mech_wanted)) {
|
||||
if (mechList[0].equals(mech_wanted) ||
|
||||
(GSSUtil.isKerberosMech(mechList[0]) &&
|
||||
GSSUtil.isKerberosMech(mech_wanted))) {
|
||||
// get the mechanism token
|
||||
if (DEBUG && !mech_wanted.equals(mechList[0])) {
|
||||
System.out.println("SpNegoContext.acceptSecContext: " +
|
||||
"negotiated mech adjusted to " + mechList[0]);
|
||||
}
|
||||
byte[] mechToken = initToken.getMechToken();
|
||||
if (mechToken == null) {
|
||||
throw new GSSException(GSSException.FAILURE, -1,
|
||||
"mechToken is missing");
|
||||
}
|
||||
accept_token = GSS_acceptSecContext(mechToken);
|
||||
mech_wanted = mechList[0];
|
||||
} else {
|
||||
accept_token = null;
|
||||
}
|
||||
|
@ -389,7 +389,7 @@ JNIEXPORT jobject JNICALL Java_sun_security_krb5_Credentials_acquireDefaultNativ
|
||||
jobject authTime, renewTillTime, hostAddresses = NULL;
|
||||
KERB_EXTERNAL_TICKET *msticket;
|
||||
int found = 0;
|
||||
FILETIME Now, EndTime, LocalEndTime;
|
||||
FILETIME Now, EndTime;
|
||||
|
||||
int i, netypes;
|
||||
jint *etypes = NULL;
|
||||
@ -476,8 +476,7 @@ JNIEXPORT jobject JNICALL Java_sun_security_krb5_Credentials_acquireDefaultNativ
|
||||
GetSystemTimeAsFileTime(&Now);
|
||||
EndTime.dwLowDateTime = msticket->EndTime.LowPart;
|
||||
EndTime.dwHighDateTime = msticket->EndTime.HighPart;
|
||||
FileTimeToLocalFileTime(&EndTime, &LocalEndTime);
|
||||
if (CompareFileTime(&Now, &LocalEndTime) < 0) {
|
||||
if (CompareFileTime(&Now, &EndTime) < 0) {
|
||||
for (i=0; i<netypes; i++) {
|
||||
if (etypes[i] == msticket->SessionKey.KeyType) {
|
||||
found = 1;
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1998, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1998, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -130,6 +130,15 @@ final public class InterfaceTypeImpl extends InvokableTypeImpl
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
boolean isAssignableTo(ReferenceType type) {
|
||||
if (type.name().equals("java.lang.Object")) {
|
||||
// interfaces are always assignable to j.l.Object
|
||||
return true;
|
||||
}
|
||||
return super.isAssignableTo(type);
|
||||
}
|
||||
|
||||
@Override
|
||||
List<InterfaceType> interfaces() {
|
||||
return superinterfaces();
|
||||
@ -140,4 +149,4 @@ final public class InterfaceTypeImpl extends InvokableTypeImpl
|
||||
// method must be directly in this interface
|
||||
return this.equals(method.declaringType());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2004, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2004, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -64,15 +64,9 @@ public class Jstatd {
|
||||
int localport = (port < 0) ? Registry.REGISTRY_PORT : port;
|
||||
registry = LocateRegistry.createRegistry(localport);
|
||||
bind(name, remoteHost);
|
||||
} else {
|
||||
throw e;
|
||||
}
|
||||
else {
|
||||
System.out.println("Could not contact registry\n"
|
||||
+ e.getMessage());
|
||||
e.printStackTrace();
|
||||
}
|
||||
} catch (RemoteException e) {
|
||||
System.err.println("Could not bind " + name + " to RMI Registry");
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
@ -142,23 +136,28 @@ public class Jstatd {
|
||||
RemoteHost stub = (RemoteHost) UnicastRemoteObject.exportObject(
|
||||
remoteHost, 0);
|
||||
bind(name.toString(), remoteHost);
|
||||
System.out.println("jstatd started (bound to " + name.toString() + ")");
|
||||
System.out.flush();
|
||||
} catch (MalformedURLException e) {
|
||||
if (rminame != null) {
|
||||
System.out.println("Bad RMI server name: " + rminame);
|
||||
} else {
|
||||
System.out.println("Bad RMI URL: " + name + " : "
|
||||
+ e.getMessage());
|
||||
System.out.println("Bad RMI URL: " + name);
|
||||
}
|
||||
e.printStackTrace(System.out);
|
||||
System.exit(1);
|
||||
} catch (java.rmi.ConnectException e) {
|
||||
// could not attach to or create a registry
|
||||
System.out.println("Could not contact RMI registry\n"
|
||||
+ e.getMessage());
|
||||
System.out.println("Could not contact RMI registry");
|
||||
e.printStackTrace(System.out);
|
||||
System.exit(1);
|
||||
} catch (RemoteException e) {
|
||||
System.out.println("Could not bind " + name + " to RMI Registry");
|
||||
e.printStackTrace(System.out);
|
||||
System.exit(1);
|
||||
} catch (Exception e) {
|
||||
System.out.println("Could not create remote object\n"
|
||||
+ e.getMessage());
|
||||
e.printStackTrace();
|
||||
System.out.println("Could not create remote object");
|
||||
e.printStackTrace(System.out);
|
||||
System.exit(1);
|
||||
}
|
||||
}
|
||||
|
@ -153,9 +153,6 @@ public final class TimeZoneNames_de extends TimeZoneNamesBundle {
|
||||
String GST[] = new String[] {"Golf Normalzeit", "GST",
|
||||
"Golf Sommerzeit", "GDT",
|
||||
"Zeitzone f\u00FCr Persischen Golf", "GT"};
|
||||
String HAST[] = new String[] {"Hawaii-Aleutische Normalzeit", "HAST",
|
||||
"Hawaii-Aleutische Sommerzeit", "HADT",
|
||||
"Zeitzone f\u00FCr Hawaii und Al\u00EButen", "HAT"};
|
||||
String HKT[] = new String[] {"Hongkong Zeit", "HKT",
|
||||
"Hongkong Sommerzeit", "HKST",
|
||||
"Hongkong Zeit", "HKT"};
|
||||
@ -372,7 +369,7 @@ public final class TimeZoneNames_de extends TimeZoneNamesBundle {
|
||||
{"Africa/Tripoli", EET},
|
||||
{"Africa/Tunis", CET},
|
||||
{"Africa/Windhoek", WAT},
|
||||
{"America/Adak", HAST},
|
||||
{"America/Adak", HST},
|
||||
{"America/Anguilla", AST},
|
||||
{"America/Antigua", AST},
|
||||
{"America/Araguaina", BRT},
|
||||
@ -394,7 +391,7 @@ public final class TimeZoneNames_de extends TimeZoneNamesBundle {
|
||||
"Paraguay Sommerzeit", "PYST",
|
||||
"Paraguay Zeit", "PYT"}},
|
||||
{"America/Atikokan", EST},
|
||||
{"America/Atka", HAST},
|
||||
{"America/Atka", HST},
|
||||
{"America/Bahia", BRT},
|
||||
{"America/Bahia_Banderas", CST},
|
||||
{"America/Barbados", AST},
|
||||
@ -1024,7 +1021,7 @@ public final class TimeZoneNames_de extends TimeZoneNamesBundle {
|
||||
{"UCT", UTC},
|
||||
{"Universal", UTC},
|
||||
{"US/Alaska", AKST},
|
||||
{"US/Aleutian", HAST},
|
||||
{"US/Aleutian", HST},
|
||||
{"US/Arizona", MST},
|
||||
{"US/Central", CST},
|
||||
{"US/Eastern", EST},
|
||||
|
@ -153,9 +153,6 @@ public final class TimeZoneNames_es extends TimeZoneNamesBundle {
|
||||
String GST[] = new String[] {"Hora est\u00e1ndar del Golfo", "GST",
|
||||
"Hora de verano del Golfo", "GDT",
|
||||
"Hora del Golfo", "GT"};
|
||||
String HAST[] = new String[] {"Hora est\u00e1ndar de Hawaii-Aleutianas", "HAST",
|
||||
"Hora de verano de Hawaii-Aleutianas", "HADT",
|
||||
"Hora de Hawaii-Aleutian", "HAT"};
|
||||
String HKT[] = new String[] {"Hora de Hong Kong", "HKT",
|
||||
"Hora de verano de Hong Kong", "HKST",
|
||||
"Hora de Hong Kong", "HKT"};
|
||||
@ -372,7 +369,7 @@ public final class TimeZoneNames_es extends TimeZoneNamesBundle {
|
||||
{"Africa/Tripoli", EET},
|
||||
{"Africa/Tunis", CET},
|
||||
{"Africa/Windhoek", WAT},
|
||||
{"America/Adak", HAST},
|
||||
{"America/Adak", HST},
|
||||
{"America/Anguilla", AST},
|
||||
{"America/Antigua", AST},
|
||||
{"America/Araguaina", BRT},
|
||||
@ -394,7 +391,7 @@ public final class TimeZoneNames_es extends TimeZoneNamesBundle {
|
||||
"Hora de verano de Paraguay", "PYST",
|
||||
"Hora de Paraguay", "PYT"}},
|
||||
{"America/Atikokan", EST},
|
||||
{"America/Atka", HAST},
|
||||
{"America/Atka", HST},
|
||||
{"America/Bahia", BRT},
|
||||
{"America/Bahia_Banderas", CST},
|
||||
{"America/Barbados", AST},
|
||||
@ -1024,7 +1021,7 @@ public final class TimeZoneNames_es extends TimeZoneNamesBundle {
|
||||
{"UCT", UTC},
|
||||
{"Universal", UTC},
|
||||
{"US/Alaska", AKST},
|
||||
{"US/Aleutian", HAST},
|
||||
{"US/Aleutian", HST},
|
||||
{"US/Arizona", MST},
|
||||
{"US/Central", CST},
|
||||
{"US/Eastern", EST},
|
||||
|
@ -153,9 +153,6 @@ public final class TimeZoneNames_fr extends TimeZoneNamesBundle {
|
||||
String GST[] = new String[] {"Heure normale du Golfe", "GST",
|
||||
"Heure avanc\u00e9e du Golfe", "GDT",
|
||||
"Golfe", "GT"} ;
|
||||
String HAST[] = new String[] {"Heure normale d'Hawa\u00ef-Al\u00e9outiennes", "HAST",
|
||||
"Heure avanc\u00e9e d'Hawa\u00ef-Al\u00e9outiennes", "HADT",
|
||||
"Hawa\u00EF-Iles Al\u00E9outiennes", "HAT"} ;
|
||||
String HKT[] = new String[] {"Heure de Hong Kong", "HKT",
|
||||
"Heure d'\u00e9t\u00e9 de Hong Kong", "HKST",
|
||||
"Heure de Hong-Kong", "HKT"};
|
||||
@ -372,7 +369,7 @@ public final class TimeZoneNames_fr extends TimeZoneNamesBundle {
|
||||
{"Africa/Tripoli", EET},
|
||||
{"Africa/Tunis", CET},
|
||||
{"Africa/Windhoek", WAT},
|
||||
{"America/Adak", HAST},
|
||||
{"America/Adak", HST},
|
||||
{"America/Anguilla", AST},
|
||||
{"America/Antigua", AST},
|
||||
{"America/Araguaina", BRT},
|
||||
@ -394,7 +391,7 @@ public final class TimeZoneNames_fr extends TimeZoneNamesBundle {
|
||||
"Heure d'\u00e9t\u00e9 du Paraguay", "PYST",
|
||||
"Heure du Paraguay", "PYT"}},
|
||||
{"America/Atikokan", EST},
|
||||
{"America/Atka", HAST},
|
||||
{"America/Atka", HST},
|
||||
{"America/Bahia", BRT},
|
||||
{"America/Bahia_Banderas", CST},
|
||||
{"America/Barbados", AST},
|
||||
@ -1024,7 +1021,7 @@ public final class TimeZoneNames_fr extends TimeZoneNamesBundle {
|
||||
{"UCT", UTC},
|
||||
{"Universal", UTC},
|
||||
{"US/Alaska", AKST},
|
||||
{"US/Aleutian", HAST},
|
||||
{"US/Aleutian", HST},
|
||||
{"US/Arizona", MST},
|
||||
{"US/Central", CST},
|
||||
{"US/Eastern", EST},
|
||||
|
@ -153,9 +153,6 @@ public final class TimeZoneNames_it extends TimeZoneNamesBundle {
|
||||
String GST[] = new String[] {"Ora solare del golfo", "GST",
|
||||
"Ora legale del golfo", "GDT",
|
||||
"Ora del golfo", "GT"};
|
||||
String HAST[] = new String[] {"Ora solare delle Isole Hawaii-Aleutine", "HAST",
|
||||
"Ora solare delle Isole Hawaii-Aleutine", "HADT",
|
||||
"Ora Hawaii-Aleutine", "HAT"};
|
||||
String HKT[] = new String[] {"Ora di Hong Kong", "HKT",
|
||||
"Ora estiva di Hong Kong", "HKST",
|
||||
"Ora di Hong Kong", "HKT"};
|
||||
@ -372,7 +369,7 @@ public final class TimeZoneNames_it extends TimeZoneNamesBundle {
|
||||
{"Africa/Tripoli", EET},
|
||||
{"Africa/Tunis", CET},
|
||||
{"Africa/Windhoek", WAT},
|
||||
{"America/Adak", HAST},
|
||||
{"America/Adak", HST},
|
||||
{"America/Anguilla", AST},
|
||||
{"America/Antigua", AST},
|
||||
{"America/Araguaina", BRT},
|
||||
@ -394,7 +391,7 @@ public final class TimeZoneNames_it extends TimeZoneNamesBundle {
|
||||
"Ora estiva del Paraguay", "PYST",
|
||||
"Ora del Paraguay", "PYT"}},
|
||||
{"America/Atikokan", EST},
|
||||
{"America/Atka", HAST},
|
||||
{"America/Atka", HST},
|
||||
{"America/Bahia", BRT},
|
||||
{"America/Bahia_Banderas", CST},
|
||||
{"America/Barbados", AST},
|
||||
@ -1024,7 +1021,7 @@ public final class TimeZoneNames_it extends TimeZoneNamesBundle {
|
||||
{"UCT", UTC},
|
||||
{"Universal", UTC},
|
||||
{"US/Alaska", AKST},
|
||||
{"US/Aleutian", HAST},
|
||||
{"US/Aleutian", HST},
|
||||
{"US/Arizona", MST},
|
||||
{"US/Central", CST},
|
||||
{"US/Eastern", EST},
|
||||
|
@ -153,9 +153,6 @@ public final class TimeZoneNames_ja extends TimeZoneNamesBundle {
|
||||
String GST[] = new String[] {"\u6e7e\u5cb8\u6a19\u6e96\u6642", "GST",
|
||||
"\u6e7e\u5cb8\u590f\u6642\u9593", "GDT",
|
||||
"\u6E7E\u5CB8\u6642\u9593", "GT"};
|
||||
String HAST[] = new String[] {"\u30cf\u30ef\u30a4 - \u30a2\u30ea\u30e5\u30fc\u30b7\u30e3\u30f3\u6a19\u6e96\u6642", "HAST",
|
||||
"\u30cf\u30ef\u30a4 - \u30a2\u30ea\u30e5\u30fc\u30b7\u30e3\u30f3\u590f\u6642\u9593", "HADT",
|
||||
"\u30CF\u30EF\u30A4\u30FB\u30A2\u30EA\u30E5\u30FC\u30B7\u30E3\u30F3\u6642\u9593", "HAT"};
|
||||
String HKT[] = new String[] {"\u9999\u6e2f\u6642\u9593", "HKT",
|
||||
"\u9999\u6e2f\u590f\u6642\u9593", "HKST",
|
||||
"\u9999\u6E2F\u6642\u9593", "HKT"};
|
||||
@ -372,7 +369,7 @@ public final class TimeZoneNames_ja extends TimeZoneNamesBundle {
|
||||
{"Africa/Tripoli", EET},
|
||||
{"Africa/Tunis", CET},
|
||||
{"Africa/Windhoek", WAT},
|
||||
{"America/Adak", HAST},
|
||||
{"America/Adak", HST},
|
||||
{"America/Anguilla", AST},
|
||||
{"America/Antigua", AST},
|
||||
{"America/Araguaina", BRT},
|
||||
@ -394,7 +391,7 @@ public final class TimeZoneNames_ja extends TimeZoneNamesBundle {
|
||||
"\u30d1\u30e9\u30b0\u30a2\u30a4\u590f\u6642\u9593", "PYST",
|
||||
"\u30D1\u30E9\u30B0\u30A2\u30A4\u6642\u9593", "PYT"}},
|
||||
{"America/Atikokan", EST},
|
||||
{"America/Atka", HAST},
|
||||
{"America/Atka", HST},
|
||||
{"America/Bahia", BRT},
|
||||
{"America/Bahia_Banderas", CST},
|
||||
{"America/Barbados", AST},
|
||||
@ -1024,7 +1021,7 @@ public final class TimeZoneNames_ja extends TimeZoneNamesBundle {
|
||||
{"UCT", UTC},
|
||||
{"Universal", UTC},
|
||||
{"US/Alaska", AKST},
|
||||
{"US/Aleutian", HAST},
|
||||
{"US/Aleutian", HST},
|
||||
{"US/Arizona", MST},
|
||||
{"US/Central", CST},
|
||||
{"US/Eastern", EST},
|
||||
|
@ -153,9 +153,6 @@ public final class TimeZoneNames_ko extends TimeZoneNamesBundle {
|
||||
String GST[] = new String[] {"\uac78\ud504\ub9cc \ud45c\uc900\uc2dc", "GST",
|
||||
"\uac78\ud504\ub9cc \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "GDT",
|
||||
"\uAC78\uD504\uB9CC \uD45C\uC900\uC2DC", "GT"};
|
||||
String HAST[] = new String[] {"\ud558\uc640\uc774 \uc54c\ub958\uc0e8 \ud45c\uc900\uc2dc", "HAST",
|
||||
"\ud558\uc640\uc774 \uc54c\ub958\uc0e8 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "HADT",
|
||||
"\uD558\uC640\uC774-\uC54C\uB8E8\uC0E8 \uD45C\uC900\uC2DC", "HAT"};
|
||||
String HKT[] = new String[] {"\ud64d\ucf69 \uc2dc\uac04", "HKT",
|
||||
"\ud64d\ucf69 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "HKST",
|
||||
"\uD64D\uCF69 \uD45C\uC900\uC2DC", "HKT"};
|
||||
@ -372,7 +369,7 @@ public final class TimeZoneNames_ko extends TimeZoneNamesBundle {
|
||||
{"Africa/Tripoli", EET},
|
||||
{"Africa/Tunis", CET},
|
||||
{"Africa/Windhoek", WAT},
|
||||
{"America/Adak", HAST},
|
||||
{"America/Adak", HST},
|
||||
{"America/Anguilla", AST},
|
||||
{"America/Antigua", AST},
|
||||
{"America/Araguaina", BRT},
|
||||
@ -394,7 +391,7 @@ public final class TimeZoneNames_ko extends TimeZoneNamesBundle {
|
||||
"\ud30c\ub77c\uacfc\uc774 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "PYST",
|
||||
"\uD30C\uB77C\uACFC\uC774 \uD45C\uC900\uC2DC", "PYT"}},
|
||||
{"America/Atikokan", EST},
|
||||
{"America/Atka", HAST},
|
||||
{"America/Atka", HST},
|
||||
{"America/Bahia", BRT},
|
||||
{"America/Bahia_Banderas", CST},
|
||||
{"America/Barbados", AST},
|
||||
@ -1024,7 +1021,7 @@ public final class TimeZoneNames_ko extends TimeZoneNamesBundle {
|
||||
{"UCT", UTC},
|
||||
{"Universal", UTC},
|
||||
{"US/Alaska", AKST},
|
||||
{"US/Aleutian", HAST},
|
||||
{"US/Aleutian", HST},
|
||||
{"US/Arizona", MST},
|
||||
{"US/Central", CST},
|
||||
{"US/Eastern", EST},
|
||||
|
@ -150,9 +150,6 @@ public final class TimeZoneNames_pt_BR extends TimeZoneNamesBundle {
|
||||
String GST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o do golfo", "GST",
|
||||
"Hor\u00e1rio de luz natural do golfo", "GDT",
|
||||
"Hor\u00E1rio do Golfo", "GT"};
|
||||
String HAST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o do Hava\u00ed-Aleutian", "HAST",
|
||||
"Hor\u00e1rio de luz natural do Hava\u00ed-Aleutian", "HADT",
|
||||
"Hor\u00E1rio do Hava\u00ED-Aleutas", "HAT"};
|
||||
String HKT[] = new String[] {"Fuso hor\u00e1rio de Hong Kong", "HKT",
|
||||
"Fuso hor\u00e1rio de ver\u00e3o de Hong Kong", "HKST",
|
||||
"Hor\u00E1rio de Hong Kong", "HKT"};
|
||||
@ -372,7 +369,7 @@ public final class TimeZoneNames_pt_BR extends TimeZoneNamesBundle {
|
||||
{"Africa/Tripoli", EET},
|
||||
{"Africa/Tunis", CET},
|
||||
{"Africa/Windhoek", WAT},
|
||||
{"America/Adak", HAST},
|
||||
{"America/Adak", HST},
|
||||
{"America/Anguilla", AST},
|
||||
{"America/Antigua", AST},
|
||||
{"America/Araguaina", BRT},
|
||||
@ -394,7 +391,7 @@ public final class TimeZoneNames_pt_BR extends TimeZoneNamesBundle {
|
||||
"Fuso hor\u00e1rio de ver\u00e3o do Paraguai", "PYST",
|
||||
"Hor\u00E1rio do Paraguai", "PYT"}},
|
||||
{"America/Atikokan", EST},
|
||||
{"America/Atka", HAST},
|
||||
{"America/Atka", HST},
|
||||
{"America/Bahia", BRT},
|
||||
{"America/Bahia_Banderas", CST},
|
||||
{"America/Barbados", AST},
|
||||
@ -1024,7 +1021,7 @@ public final class TimeZoneNames_pt_BR extends TimeZoneNamesBundle {
|
||||
{"UCT", UTC},
|
||||
{"Universal", UTC},
|
||||
{"US/Alaska", AKST},
|
||||
{"US/Aleutian", HAST},
|
||||
{"US/Aleutian", HST},
|
||||
{"US/Arizona", MST},
|
||||
{"US/Central", CST},
|
||||
{"US/Eastern", EST},
|
||||
|
@ -153,9 +153,6 @@ public final class TimeZoneNames_sv extends TimeZoneNamesBundle {
|
||||
String GST[] = new String[] {"Gulf-normaltid", "GST",
|
||||
"Gulf-sommartid", "GDT",
|
||||
"Golfens tid", "GT"};
|
||||
String HAST[] = new String[] {"Hawaii-Aleuterna, normaltid", "HAST",
|
||||
"Hawaii-Aleuterna, sommartid", "HADT",
|
||||
"Hawaiiansk-aleutisk tid", "HAT"};
|
||||
String HKT[] = new String[] {"Hong Kong, normaltid", "HKT",
|
||||
"Hong Kong, sommartid", "HKST",
|
||||
"Hongkong-tid", "HKT"};
|
||||
@ -372,7 +369,7 @@ public final class TimeZoneNames_sv extends TimeZoneNamesBundle {
|
||||
{"Africa/Tripoli", EET},
|
||||
{"Africa/Tunis", CET},
|
||||
{"Africa/Windhoek", WAT},
|
||||
{"America/Adak", HAST},
|
||||
{"America/Adak", HST},
|
||||
{"America/Anguilla", AST},
|
||||
{"America/Antigua", AST},
|
||||
{"America/Araguaina", BRT},
|
||||
@ -394,7 +391,7 @@ public final class TimeZoneNames_sv extends TimeZoneNamesBundle {
|
||||
"Paraguay, sommartid", "PYST",
|
||||
"Paraguayansk tid", "PYT"}},
|
||||
{"America/Atikokan", EST},
|
||||
{"America/Atka", HAST},
|
||||
{"America/Atka", HST},
|
||||
{"America/Bahia", BRT},
|
||||
{"America/Bahia_Banderas", CST},
|
||||
{"America/Barbados", AST},
|
||||
@ -1024,7 +1021,7 @@ public final class TimeZoneNames_sv extends TimeZoneNamesBundle {
|
||||
{"UCT", UTC},
|
||||
{"Universal", UTC},
|
||||
{"US/Alaska", AKST},
|
||||
{"US/Aleutian", HAST},
|
||||
{"US/Aleutian", HST},
|
||||
{"US/Arizona", MST},
|
||||
{"US/Central", CST},
|
||||
{"US/Eastern", EST},
|
||||
|
@ -153,9 +153,6 @@ public final class TimeZoneNames_zh_CN extends TimeZoneNamesBundle {
|
||||
String GST[] = new String[] {"\u6ce2\u65af\u6e7e\u6807\u51c6\u65f6\u95f4", "GST",
|
||||
"\u6ce2\u65af\u6e7e\u590f\u4ee4\u65f6", "GDT",
|
||||
"\u6D77\u6E7E\u65F6\u95F4", "GT"};
|
||||
String HAST[] = new String[] {"\u590f\u5a01\u5937-\u963f\u7559\u7533\u7fa4\u5c9b\u6807\u51c6\u65f6\u95f4", "HAST",
|
||||
"\u590f\u5a01\u5937-\u963f\u7559\u7533\u7fa4\u5c9b\u590f\u4ee4\u65f6", "HADT",
|
||||
"\u590F\u5A01\u5937-\u963F\u7559\u7533\u65F6\u95F4", "HAT"};
|
||||
String HKT[] = new String[] {"\u9999\u6e2f\u65f6\u95f4", "HKT",
|
||||
"\u9999\u6e2f\u590f\u4ee4\u65f6", "HKST",
|
||||
"\u9999\u6E2F\u65F6\u95F4", "HKT"};
|
||||
@ -372,7 +369,7 @@ public final class TimeZoneNames_zh_CN extends TimeZoneNamesBundle {
|
||||
{"Africa/Tripoli", EET},
|
||||
{"Africa/Tunis", CET},
|
||||
{"Africa/Windhoek", WAT},
|
||||
{"America/Adak", HAST},
|
||||
{"America/Adak", HST},
|
||||
{"America/Anguilla", AST},
|
||||
{"America/Antigua", AST},
|
||||
{"America/Araguaina", BRT},
|
||||
@ -394,7 +391,7 @@ public final class TimeZoneNames_zh_CN extends TimeZoneNamesBundle {
|
||||
"\u5df4\u62c9\u572d\u590f\u4ee4\u65f6", "PYST",
|
||||
"\u5DF4\u62C9\u572D\u65F6\u95F4", "PYT"}},
|
||||
{"America/Atikokan", EST},
|
||||
{"America/Atka", HAST},
|
||||
{"America/Atka", HST},
|
||||
{"America/Bahia", BRT},
|
||||
{"America/Bahia_Banderas", CST},
|
||||
{"America/Barbados", AST},
|
||||
@ -1024,7 +1021,7 @@ public final class TimeZoneNames_zh_CN extends TimeZoneNamesBundle {
|
||||
{"UCT", UTC},
|
||||
{"Universal", UTC},
|
||||
{"US/Alaska", AKST},
|
||||
{"US/Aleutian", HAST},
|
||||
{"US/Aleutian", HST},
|
||||
{"US/Arizona", MST},
|
||||
{"US/Central", CST},
|
||||
{"US/Eastern", EST},
|
||||
|
@ -153,9 +153,6 @@ public final class TimeZoneNames_zh_TW extends TimeZoneNamesBundle {
|
||||
String GST[] = new String[] {"\u6ce2\u65af\u7063\u6a19\u6e96\u6642\u9593", "GST",
|
||||
"\u6ce2\u65af\u7063\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "GDT",
|
||||
"\u6CE2\u65AF\u7063\u6642\u9593", "GT"};
|
||||
String HAST[] = new String[] {"\u590f\u5a01\u5937-\u963f\u7559\u7533\u7fa4\u5cf6\u6a19\u6e96\u6642\u9593", "HAST",
|
||||
"\u590f\u5a01\u5937-\u963f\u7559\u7533\u7fa4\u5cf6\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "HADT",
|
||||
"\u590F\u5A01\u5937-\u963F\u7559\u7533\u6642\u9593", "HAT"};
|
||||
String HKT[] = new String[] {"\u9999\u6e2f\u6642\u9593", "HKT",
|
||||
"\u9999\u6e2f\u590f\u4ee4\u6642\u9593", "HKST",
|
||||
"\u9999\u6E2F\u6642\u9593", "HKT"};
|
||||
@ -372,7 +369,7 @@ public final class TimeZoneNames_zh_TW extends TimeZoneNamesBundle {
|
||||
{"Africa/Tripoli", EET},
|
||||
{"Africa/Tunis", CET},
|
||||
{"Africa/Windhoek", WAT},
|
||||
{"America/Adak", HAST},
|
||||
{"America/Adak", HST},
|
||||
{"America/Anguilla", AST},
|
||||
{"America/Antigua", AST},
|
||||
{"America/Araguaina", BRT},
|
||||
@ -394,7 +391,7 @@ public final class TimeZoneNames_zh_TW extends TimeZoneNamesBundle {
|
||||
"\u5df4\u62c9\u572d\u590f\u4ee4\u6642\u9593", "PYST",
|
||||
"\u5DF4\u62C9\u572D\u6642\u9593", "PYT"}},
|
||||
{"America/Atikokan", EST},
|
||||
{"America/Atka", HAST},
|
||||
{"America/Atka", HST},
|
||||
{"America/Bahia", BRT},
|
||||
{"America/Bahia_Banderas", CST},
|
||||
{"America/Barbados", AST},
|
||||
@ -1026,7 +1023,7 @@ public final class TimeZoneNames_zh_TW extends TimeZoneNamesBundle {
|
||||
{"UCT", UTC},
|
||||
{"Universal", UTC},
|
||||
{"US/Alaska", AKST},
|
||||
{"US/Aleutian", HAST},
|
||||
{"US/Aleutian", HST},
|
||||
{"US/Arizona", MST},
|
||||
{"US/Central", CST},
|
||||
{"US/Eastern", EST},
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -36,7 +36,7 @@
|
||||
#include <dlfcn.h>
|
||||
#include <pthread.h>
|
||||
#include <inttypes.h>
|
||||
#include "sun_management_OperatingSystemImpl.h"
|
||||
#include "com_sun_management_internal_OperatingSystemImpl.h"
|
||||
|
||||
struct ticks {
|
||||
uint64_t used;
|
||||
@ -311,7 +311,7 @@ double get_process_load() {
|
||||
}
|
||||
|
||||
JNIEXPORT jdouble JNICALL
|
||||
Java_sun_management_OperatingSystemImpl_getSystemCpuLoad0
|
||||
Java_com_sun_management_internal_OperatingSystemImpl_getSystemCpuLoad0
|
||||
(JNIEnv *env, jobject dummy)
|
||||
{
|
||||
if(perfInit() == 0) {
|
||||
@ -322,7 +322,7 @@ Java_sun_management_OperatingSystemImpl_getSystemCpuLoad0
|
||||
}
|
||||
|
||||
JNIEXPORT jdouble JNICALL
|
||||
Java_sun_management_OperatingSystemImpl_getProcessCpuLoad0
|
||||
Java_com_sun_management_internal_OperatingSystemImpl_getProcessCpuLoad0
|
||||
(JNIEnv *env, jobject dummy)
|
||||
{
|
||||
if(perfInit() == 0) {
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -23,7 +23,7 @@
|
||||
* questions.
|
||||
*/
|
||||
|
||||
#include "sun_management_OperatingSystemImpl.h"
|
||||
#include "com_sun_management_internal_OperatingSystemImpl.h"
|
||||
|
||||
#include <sys/time.h>
|
||||
#include <mach/mach.h>
|
||||
@ -32,7 +32,7 @@
|
||||
#include "jvm.h"
|
||||
|
||||
JNIEXPORT jdouble JNICALL
|
||||
Java_sun_management_OperatingSystemImpl_getSystemCpuLoad0
|
||||
Java_com_sun_management_internal_OperatingSystemImpl_getSystemCpuLoad0
|
||||
(JNIEnv *env, jobject dummy)
|
||||
{
|
||||
// This code is influenced by the darwin top source
|
||||
@ -84,7 +84,7 @@ Java_sun_management_OperatingSystemImpl_getSystemCpuLoad0
|
||||
|
||||
|
||||
JNIEXPORT jdouble JNICALL
|
||||
Java_sun_management_OperatingSystemImpl_getProcessCpuLoad0
|
||||
Java_com_sun_management_internal_OperatingSystemImpl_getProcessCpuLoad0
|
||||
(JNIEnv *env, jobject dummy)
|
||||
{
|
||||
// This code is influenced by the darwin top source
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -25,13 +25,10 @@
|
||||
|
||||
package com.sun.management;
|
||||
|
||||
import javax.management.Notification;
|
||||
import javax.management.openmbean.CompositeData;
|
||||
import javax.management.openmbean.CompositeDataView;
|
||||
import javax.management.openmbean.CompositeType;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import sun.management.GarbageCollectionNotifInfoCompositeData;
|
||||
import com.sun.management.internal.GarbageCollectionNotifInfoCompositeData;
|
||||
|
||||
/**
|
||||
* The information about a garbage collection
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -33,9 +33,8 @@ import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.List;
|
||||
import sun.management.GcInfoCompositeData;
|
||||
import sun.management.GcInfoBuilder;
|
||||
import com.sun.management.internal.GcInfoCompositeData;
|
||||
import com.sun.management.internal.GcInfoBuilder;
|
||||
|
||||
/**
|
||||
* Garbage collection information. It contains the following
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -25,7 +25,7 @@
|
||||
|
||||
package com.sun.management;
|
||||
|
||||
import sun.management.VMOptionCompositeData;
|
||||
import com.sun.management.internal.VMOptionCompositeData;
|
||||
import javax.management.openmbean.CompositeData;
|
||||
|
||||
/**
|
||||
@ -241,5 +241,8 @@ public class VMOption {
|
||||
|
||||
}
|
||||
|
||||
|
||||
// for sun.management.MappedMXBeanType
|
||||
static CompositeData toCompositeData(VMOption option) {
|
||||
return VMOptionCompositeData.toCompositeData(option);
|
||||
}
|
||||
}
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -23,7 +23,7 @@
|
||||
* questions.
|
||||
*/
|
||||
|
||||
package sun.management;
|
||||
package com.sun.management.internal;
|
||||
|
||||
/**
|
||||
* Diagnostic Command Argument information. It contains the description
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -23,21 +23,41 @@
|
||||
* questions.
|
||||
*/
|
||||
|
||||
package sun.management;
|
||||
package com.sun.management.internal;
|
||||
|
||||
import com.sun.management.DiagnosticCommandMBean;
|
||||
import java.lang.reflect.Constructor;
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.security.Permission;
|
||||
import java.util.*;
|
||||
import javax.management.*;
|
||||
import javax.management.Attribute;
|
||||
import javax.management.AttributeList;
|
||||
import javax.management.AttributeNotFoundException;
|
||||
import javax.management.Descriptor;
|
||||
import javax.management.ImmutableDescriptor;
|
||||
import javax.management.InvalidAttributeValueException;
|
||||
import javax.management.ListenerNotFoundException;
|
||||
import javax.management.MBeanException;
|
||||
import javax.management.MBeanInfo;
|
||||
import javax.management.MBeanNotificationInfo;
|
||||
import javax.management.MBeanOperationInfo;
|
||||
import javax.management.MBeanParameterInfo;
|
||||
import javax.management.MalformedObjectNameException;
|
||||
import javax.management.Notification;
|
||||
import javax.management.NotificationFilter;
|
||||
import javax.management.NotificationListener;
|
||||
import javax.management.ObjectName;
|
||||
import javax.management.ReflectionException;
|
||||
import sun.management.ManagementFactoryHelper;
|
||||
import sun.management.NotificationEmitterSupport;
|
||||
import sun.management.VMManagement;
|
||||
|
||||
/**
|
||||
* Implementation class for the diagnostic commands subsystem.
|
||||
*
|
||||
* @since 1.8
|
||||
*/
|
||||
class DiagnosticCommandImpl extends NotificationEmitterSupport
|
||||
public class DiagnosticCommandImpl extends NotificationEmitterSupport
|
||||
implements DiagnosticCommandMBean {
|
||||
|
||||
private final VMManagement jvm;
|
||||
@ -45,6 +65,17 @@ class DiagnosticCommandImpl extends NotificationEmitterSupport
|
||||
private static final String strClassName = "".getClass().getName();
|
||||
private static final String strArrayClassName = String[].class.getName();
|
||||
private final boolean isSupported;
|
||||
private static DiagnosticCommandImpl diagCommandMBean = null;
|
||||
|
||||
static synchronized DiagnosticCommandMBean getDiagnosticCommandMBean() {
|
||||
VMManagement jvm = ManagementFactoryHelper.getVMManagement();
|
||||
|
||||
// Remote Diagnostic Commands may not be supported
|
||||
if (diagCommandMBean == null && jvm.isRemoteDiagnosticCommandsSupported()) {
|
||||
diagCommandMBean = new DiagnosticCommandImpl(jvm);
|
||||
}
|
||||
return diagCommandMBean;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getAttribute(String attribute) throws AttributeNotFoundException,
|
||||
@ -327,7 +358,7 @@ class DiagnosticCommandImpl extends NotificationEmitterSupport
|
||||
}
|
||||
ObjectName on = null;
|
||||
try {
|
||||
on = ObjectName.getInstance(ManagementFactoryHelper.HOTSPOT_DIAGNOSTIC_COMMAND_MBEAN_NAME);
|
||||
on = ObjectName.getInstance(PlatformMBeanProviderImpl.DIAGNOSTIC_COMMAND_MBEAN_NAME);
|
||||
} catch (MalformedObjectNameException e) { }
|
||||
Notification notif = new Notification("jmx.mbean.info.changed",
|
||||
on,
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -23,7 +23,7 @@
|
||||
* questions.
|
||||
*/
|
||||
|
||||
package sun.management;
|
||||
package com.sun.management.internal;
|
||||
|
||||
import java.util.List;
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -23,7 +23,7 @@
|
||||
* questions.
|
||||
*/
|
||||
|
||||
package sun.management;
|
||||
package com.sun.management.internal;
|
||||
|
||||
import java.util.*;
|
||||
import com.sun.management.VMOption;
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -23,11 +23,10 @@
|
||||
* questions.
|
||||
*/
|
||||
|
||||
package sun.management;
|
||||
package com.sun.management.internal;
|
||||
|
||||
import com.sun.management.GarbageCollectionNotificationInfo;
|
||||
import com.sun.management.GcInfo;
|
||||
import java.lang.reflect.Method;
|
||||
import javax.management.openmbean.CompositeData;
|
||||
import javax.management.openmbean.CompositeType;
|
||||
import javax.management.openmbean.CompositeDataSupport;
|
||||
@ -38,6 +37,9 @@ import java.security.AccessController;
|
||||
import java.security.PrivilegedAction;
|
||||
import java.lang.reflect.Field;
|
||||
import java.util.HashMap;
|
||||
import sun.management.LazyCompositeData;
|
||||
import static sun.management.LazyCompositeData.getString;
|
||||
import sun.management.Util;
|
||||
|
||||
/**
|
||||
* A CompositeData for GarbageCollectionNotificationInfo for the local management support.
|
||||
@ -95,7 +97,7 @@ public class GarbageCollectionNotifInfoCompositeData extends LazyCompositeData {
|
||||
compositeTypeByBuilder.put(builder,gict);
|
||||
} catch (OpenDataException e) {
|
||||
// shouldn't reach here
|
||||
throw Util.newException(e);
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -205,7 +207,7 @@ public class GarbageCollectionNotifInfoCompositeData extends LazyCompositeData {
|
||||
baseGcNotifInfoItemTypes);
|
||||
} catch (OpenDataException e) {
|
||||
// shouldn't reach here
|
||||
throw Util.newException(e);
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
return baseGcNotifInfoCompositeType;
|
@ -0,0 +1,181 @@
|
||||
/*
|
||||
* Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License version 2 only, as
|
||||
* published by the Free Software Foundation. Oracle designates this
|
||||
* particular file as subject to the "Classpath" exception as provided
|
||||
* by Oracle in the LICENSE file that accompanied this code.
|
||||
*
|
||||
* This code is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
* version 2 for more details (a copy is included in the LICENSE file that
|
||||
* accompanied this code).
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License version
|
||||
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*
|
||||
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
* or visit www.oracle.com if you need additional information or have any
|
||||
* questions.
|
||||
*/
|
||||
|
||||
package com.sun.management.internal;
|
||||
|
||||
import com.sun.management.GarbageCollectionNotificationInfo;
|
||||
import com.sun.management.GarbageCollectorMXBean;
|
||||
import com.sun.management.GcInfo;
|
||||
import java.lang.management.ManagementFactory;
|
||||
import java.lang.management.MemoryPoolMXBean;
|
||||
import java.util.List;
|
||||
import javax.management.ListenerNotFoundException;
|
||||
import javax.management.MBeanNotificationInfo;
|
||||
import javax.management.Notification;
|
||||
import javax.management.NotificationFilter;
|
||||
import javax.management.NotificationListener;
|
||||
import javax.management.openmbean.CompositeData;
|
||||
import sun.management.GarbageCollectorImpl;
|
||||
|
||||
/**
|
||||
* Implementation class for the garbage collector.
|
||||
* Standard and committed hotspot-specific metrics if any.
|
||||
*
|
||||
* ManagementFactory.getGarbageCollectorMXBeans() returns a list
|
||||
* of instances of this class.
|
||||
*/
|
||||
public class GarbageCollectorExtImpl extends GarbageCollectorImpl
|
||||
implements GarbageCollectorMXBean {
|
||||
|
||||
public GarbageCollectorExtImpl(String name) {
|
||||
super(name);
|
||||
}
|
||||
|
||||
// The memory pools are static and won't be changed.
|
||||
// TODO: If the hotspot implementation begins to have pools
|
||||
// dynamically created and removed, this needs to be modified.
|
||||
private String[] poolNames = null;
|
||||
private synchronized String[] getAllPoolNames() {
|
||||
if (poolNames == null) {
|
||||
List<MemoryPoolMXBean> pools = ManagementFactory.getMemoryPoolMXBeans();
|
||||
poolNames = new String[pools.size()];
|
||||
int i = 0;
|
||||
for (MemoryPoolMXBean m : pools) {
|
||||
poolNames[i++] = m.getName();
|
||||
}
|
||||
}
|
||||
return poolNames;
|
||||
}
|
||||
|
||||
public GcInfo getLastGcInfo() {
|
||||
GcInfo info = getGcInfoBuilder().getLastGcInfo();
|
||||
return info;
|
||||
}
|
||||
|
||||
private final static String notifName =
|
||||
"javax.management.Notification";
|
||||
|
||||
private final static String[] gcNotifTypes = {
|
||||
GarbageCollectionNotificationInfo.GARBAGE_COLLECTION_NOTIFICATION
|
||||
};
|
||||
|
||||
private MBeanNotificationInfo[] notifInfo = null;
|
||||
public MBeanNotificationInfo[] getNotificationInfo() {
|
||||
synchronized (this) {
|
||||
if (notifInfo == null) {
|
||||
notifInfo = new MBeanNotificationInfo[1];
|
||||
notifInfo[0] = new MBeanNotificationInfo(gcNotifTypes,
|
||||
notifName,
|
||||
"GC Notification");
|
||||
}
|
||||
}
|
||||
return notifInfo;
|
||||
}
|
||||
|
||||
private static long seqNumber = 0;
|
||||
private static long getNextSeqNumber() {
|
||||
return ++seqNumber;
|
||||
}
|
||||
|
||||
protected void createGCNotification(long timestamp,
|
||||
String gcName,
|
||||
String gcAction,
|
||||
String gcCause,
|
||||
GcInfo gcInfo) {
|
||||
if (!hasListeners()) {
|
||||
return;
|
||||
}
|
||||
Notification notif = new Notification(GarbageCollectionNotificationInfo.GARBAGE_COLLECTION_NOTIFICATION,
|
||||
getObjectName(),
|
||||
getNextSeqNumber(),
|
||||
timestamp,
|
||||
gcName);
|
||||
GarbageCollectionNotificationInfo info =
|
||||
new GarbageCollectionNotificationInfo(gcName,
|
||||
gcAction,
|
||||
gcCause,
|
||||
gcInfo);
|
||||
|
||||
CompositeData cd =
|
||||
GarbageCollectionNotifInfoCompositeData.toCompositeData(info);
|
||||
notif.setUserData(cd);
|
||||
sendNotification(notif);
|
||||
}
|
||||
|
||||
public synchronized void addNotificationListener(NotificationListener listener,
|
||||
NotificationFilter filter,
|
||||
Object handback)
|
||||
{
|
||||
boolean before = hasListeners();
|
||||
super.addNotificationListener(listener, filter, handback);
|
||||
boolean after = hasListeners();
|
||||
if (!before && after) {
|
||||
setNotificationEnabled(this, true);
|
||||
}
|
||||
}
|
||||
|
||||
public synchronized void removeNotificationListener(NotificationListener listener)
|
||||
throws ListenerNotFoundException {
|
||||
boolean before = hasListeners();
|
||||
super.removeNotificationListener(listener);
|
||||
boolean after = hasListeners();
|
||||
|
||||
if (before && !after) {
|
||||
setNotificationEnabled(this,false);
|
||||
}
|
||||
}
|
||||
|
||||
public synchronized void removeNotificationListener(NotificationListener listener,
|
||||
NotificationFilter filter,
|
||||
Object handback)
|
||||
throws ListenerNotFoundException
|
||||
{
|
||||
boolean before = hasListeners();
|
||||
super.removeNotificationListener(listener,filter,handback);
|
||||
boolean after = hasListeners();
|
||||
if (before && !after) {
|
||||
setNotificationEnabled(this,false);
|
||||
}
|
||||
}
|
||||
|
||||
private GcInfoBuilder gcInfoBuilder;
|
||||
// Invoked also by the VM
|
||||
private synchronized GcInfoBuilder getGcInfoBuilder() {
|
||||
if(gcInfoBuilder == null) {
|
||||
gcInfoBuilder = new GcInfoBuilder(this, getAllPoolNames());
|
||||
}
|
||||
return gcInfoBuilder;
|
||||
}
|
||||
|
||||
private native void setNotificationEnabled(GarbageCollectorMXBean gc,
|
||||
boolean enabled);
|
||||
|
||||
// Invoked by the VM
|
||||
private static java.lang.management.GarbageCollectorMXBean
|
||||
createGarbageCollector(String name, String type) {
|
||||
|
||||
return new GarbageCollectorExtImpl(name);
|
||||
}
|
||||
}
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -22,20 +22,16 @@
|
||||
* or visit www.oracle.com if you need additional information or have any
|
||||
* questions.
|
||||
*/
|
||||
package sun.management;
|
||||
package com.sun.management.internal;
|
||||
|
||||
import java.lang.management.GarbageCollectorMXBean;
|
||||
import java.lang.management.MemoryUsage;
|
||||
import javax.management.openmbean.OpenType;
|
||||
import javax.management.openmbean.SimpleType;
|
||||
import javax.management.openmbean.TabularType;
|
||||
import javax.management.openmbean.TabularData;
|
||||
import javax.management.openmbean.TabularDataSupport;
|
||||
import javax.management.openmbean.CompositeType;
|
||||
import javax.management.openmbean.CompositeData;
|
||||
import javax.management.openmbean.CompositeDataSupport;
|
||||
import javax.management.openmbean.OpenDataException;
|
||||
import com.sun.management.GcInfo;
|
||||
import sun.management.Util;
|
||||
|
||||
/**
|
||||
* Helper class to build composite data.
|
||||
@ -164,7 +160,7 @@ public class GcInfoBuilder {
|
||||
allItemTypes);
|
||||
} catch (OpenDataException e) {
|
||||
// shouldn't reach here
|
||||
throw Util.newException(e);
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
gcInfoCompositeType = gict;
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2004, 2014, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2004, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -23,16 +23,12 @@
|
||||
* questions.
|
||||
*/
|
||||
|
||||
package sun.management;
|
||||
package com.sun.management.internal;
|
||||
|
||||
import java.lang.management.MemoryUsage;
|
||||
import java.lang.reflect.Method;
|
||||
import java.lang.reflect.Field;
|
||||
import java.util.Iterator;
|
||||
import java.util.Map;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Collections;
|
||||
import java.io.InvalidObjectException;
|
||||
import javax.management.openmbean.CompositeType;
|
||||
import javax.management.openmbean.CompositeData;
|
||||
@ -42,9 +38,12 @@ import javax.management.openmbean.SimpleType;
|
||||
import javax.management.openmbean.OpenType;
|
||||
import javax.management.openmbean.OpenDataException;
|
||||
import com.sun.management.GcInfo;
|
||||
import com.sun.management.GarbageCollectionNotificationInfo;
|
||||
import java.security.AccessController;
|
||||
import java.security.PrivilegedAction;
|
||||
import sun.management.LazyCompositeData;
|
||||
import static sun.management.LazyCompositeData.getLong;
|
||||
import sun.management.MappedMXBeanType;
|
||||
import sun.management.Util;
|
||||
|
||||
/**
|
||||
* A CompositeData for GcInfo for the local management support.
|
||||
@ -266,7 +265,7 @@ public class GcInfoCompositeData extends LazyCompositeData {
|
||||
getBaseGcInfoItemTypes());
|
||||
} catch (OpenDataException e) {
|
||||
// shouldn't reach here
|
||||
throw Util.newException(e);
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
return baseGcInfoCompositeType;
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user