changeset 9397:79de9afa367c

Merge
author duke
date Wed, 05 Jul 2017 17:43:05 +0200
parents af4b2168b0f9 5cad348bfb7b
children 5d86d0c7692e
files hotspot/make/linux/makefiles/cscope.make hotspot/make/solaris/makefiles/cscope.make jdk/src/share/classes/sun/security/util/SignatureFileManifest.java
diffstat 205 files changed, 16752 insertions(+), 18542 deletions(-) [+]
line wrap: on
line diff
--- a/.hgignore	Mon May 02 09:38:22 2011 -0700
+++ b/.hgignore	Wed Jul 05 17:43:05 2017 +0200
@@ -2,3 +2,4 @@
 ^dist/
 /nbproject/private/
 ^webrev
+^.hgtip
--- a/.hgtags-top-repo	Mon May 02 09:38:22 2011 -0700
+++ b/.hgtags-top-repo	Wed Jul 05 17:43:05 2017 +0200
@@ -114,3 +114,4 @@
 7654afc6a29e43cb0a1343ce7f1287bf690d5e5f jdk7-b137
 fc47c97bbbd91b1f774d855c48a7e285eb1a351a jdk7-b138
 7ed6d0b9aaa12320832a7ddadb88d6d8d0dda4c1 jdk7-b139
+dcfe74f1c6553c556e7d361c30b0b614eb5e40f6 jdk7-b140
--- a/Makefile	Mon May 02 09:38:22 2011 -0700
+++ b/Makefile	Wed Jul 05 17:43:05 2017 +0200
@@ -97,7 +97,7 @@
 endef
 
 # Generic build of basic repo series
-generic_build_repo_series::
+generic_build_repo_series:: $(SOURCE_TIPS)
 	$(MKDIR) -p $(OUTPUTDIR)
 	$(MKDIR) -p $(OUTPUTDIR)/j2sdk-image
 	@$(call StartTimer)
@@ -243,6 +243,14 @@
 debug_build:: build_debug_image
 fastdebug_build:: build_fastdebug_image
 
+# The source tips are stored with the relative path to the repo.
+#   This file will be used when constructing the jdk image.
+source_tips: $(SOURCE_TIPS)
+	$(CAT) $<
+$(SOURCE_TIPS): FRC
+	@$(prep-target)
+	@$(call GetSourceTips)
+
 clobber:: REPORT_BUILD_TIMES=
 clobber:: 
 	$(RM) -r $(OUTPUTDIR)/*
--- a/corba/.hgignore	Mon May 02 09:38:22 2011 -0700
+++ b/corba/.hgignore	Wed Jul 05 17:43:05 2017 +0200
@@ -1,3 +1,4 @@
 ^build/
 ^dist/
 /nbproject/private/
+^.hgtip
--- a/corba/.hgtags	Mon May 02 09:38:22 2011 -0700
+++ b/corba/.hgtags	Wed Jul 05 17:43:05 2017 +0200
@@ -114,3 +114,4 @@
 a66c01d8bf895261715955df0b95545c000ed6a8 jdk7-b137
 78d8cf04697e9df54f7f11e195b7da29b8e345a2 jdk7-b138
 60b074ec6fcf5cdf9efce22fdfb02326ed8fa2d3 jdk7-b139
+cdf5d19ec142424489549025e9c42e51f32cf688 jdk7-b140
--- a/hotspot/.hgignore	Mon May 02 09:38:22 2011 -0700
+++ b/hotspot/.hgignore	Wed Jul 05 17:43:05 2017 +0200
@@ -5,3 +5,4 @@
 ^src/share/tools/IdealGraphVisualizer/[a-zA-Z0-9]*/build/
 ^src/share/tools/IdealGraphVisualizer/build/
 ^src/share/tools/IdealGraphVisualizer/dist/
+^.hgtip
--- a/hotspot/.hgtags	Mon May 02 09:38:22 2011 -0700
+++ b/hotspot/.hgtags	Wed Jul 05 17:43:05 2017 +0200
@@ -166,3 +166,5 @@
 0930dc920c185afbf40fed9a655290b8e5b16783 hs21-b08
 611e19a16519d6fb5deea9ab565336e6e6ee475d jdk7-b139
 611e19a16519d6fb5deea9ab565336e6e6ee475d hs21-b09
+d283b82966712b353fa307845a1316da42a355f4 jdk7-b140
+d283b82966712b353fa307845a1316da42a355f4 hs21-b10
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/make/cscope.make	Wed Jul 05 17:43:05 2017 +0200
@@ -0,0 +1,141 @@
+#
+# Copyright (c) 2000, 2008, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#  
+#
+
+# The cscope.out file is generated in the current directory.  The old cscope.out
+# file is *not* removed because cscope is smart enough to only build what has
+# changed.  cscope can be confused if files are renamed or removed, so it may be
+# necessary to remove cscope.out (gmake cscope.clean) if a lot of reorganization
+# has occurred.
+
+include $(GAMMADIR)/make/scm.make
+
+RM	= rm -f
+HG	= hg
+CS_TOP	= $(GAMMADIR)
+
+CSDIRS	= $(CS_TOP)/src $(CS_TOP)/make
+CSINCS	= $(CSDIRS:%=-I%)
+
+CSCOPE		= cscope
+CSCOPE_OUT	= cscope.out
+CSCOPE_FLAGS	= -b
+
+# Allow .java files to be added from the environment (CSCLASSES=yes).
+ifdef	CSCLASSES
+ADDCLASSES=	-o -name '*.java'
+endif
+
+# Adding CClassHeaders also pushes the file count of a full workspace up about
+# 200 files (these files also don't exist in a new workspace, and thus will
+# cause the recreation of the database as they get created, which might seem
+# a little confusing).  Thus allow these files to be added from the environment
+# (CSHEADERS=yes).
+ifndef	CSHEADERS
+RMCCHEADERS=	-o -name CClassHeaders
+endif
+
+# Ignore build products.
+CS_PRUNE_GENERATED	= -o -name '${OSNAME}_*_core' -o \
+			     -name '${OSNAME}_*_compiler?'
+
+# O/S-specific files for all systems are included by default.  Set CS_OS to a
+# space-separated list of identifiers to include only those systems.
+ifdef	CS_OS
+CS_PRUNE_OS	= $(patsubst %,-o -name '*%*',\
+		    $(filter-out ${CS_OS},linux macos solaris windows))
+endif
+
+# CPU-specific files for all processors are included by default.  Set CS_CPU 
+# space-separated list identifiers to include only those CPUs.
+ifdef	CS_CPU
+CS_PRUNE_CPU	= $(patsubst %,-o -name '*%*',\
+		    $(filter-out ${CS_CPU},arm ppc sparc x86 zero))
+endif
+
+# What files should we include?  A simple rule might be just those files under
+# SCCS control, however this would miss files we create like the opcodes and
+# CClassHeaders.  The following attempts to find everything that is *useful*.
+# (.del files are created by sccsrm, demo directories contain many .java files
+# that probably aren't useful for development, and the pkgarchive may contain
+# duplicates of files within the source hierarchy).
+
+# Directories to exclude.
+CS_PRUNE_STD	= $(SCM_DIRS) \
+		  -o -name '.del-*' \
+		  -o -name '*demo' \
+		  -o -name pkgarchive
+
+# Placeholder for user-defined excludes.
+CS_PRUNE_EX	=
+
+CS_PRUNE	= $(CS_PRUNE_STD) \
+		  $(CS_PRUNE_OS) \
+		  $(CS_PRUNE_CPU) \
+		  $(CS_PRUNE_GENERATED) \
+		  $(CS_PRUNE_EX) \
+		  $(RMCCHEADERS)
+
+# File names to include.
+CSFILENAMES	= -name '*.[ch]pp' \
+		  -o -name '*.[Ccshlxy]' \
+		  $(CS_ADD_GENERATED) \
+		  -o -name '*.d' \
+		  -o -name '*.il' \
+		  -o -name '*.cc' \
+		  -o -name '*[Mm]akefile*' \
+		  -o -name '*.gmk' \
+		  -o -name '*.make' \
+		  -o -name '*.ad' \
+		  $(ADDCLASSES)
+
+.PHONY:		cscope cscope.clean cscope.scratch TAGS.clean FORCE
+.PRECIOUS:	cscope.out
+
+cscope $(CSCOPE_OUT): cscope.files FORCE
+	$(CSCOPE) -f $(CSCOPE_OUT) $(CSCOPE_FLAGS)
+
+cscope.clean:
+	$(QUIETLY) $(RM) $(CSCOPE_OUT) cscope.files
+
+cscope.scratch:  cscope.clean cscope
+
+# The raw list is reordered so cscope displays the most relevant files first.
+cscope.files:
+	$(QUIETLY)						\
+	raw=cscope.$$$$;					\
+	find $(CSDIRS) -type d \( $(CS_PRUNE) \) -prune -o	\
+	    -type f \( $(CSFILENAMES) \) -print > $$raw;	\
+	{							\
+	echo "$(CSINCS)";					\
+	egrep -v "\.java|/make/" $$raw;				\
+	fgrep ".java" $$raw;					\
+	fgrep "/make/" $$raw;					\
+	} > $@;							\
+	rm -f $$raw
+
+TAGS:  cscope.files FORCE
+	egrep -v '^-|^$$' $< | etags --members -
+
+TAGS.clean:
+	$(RM) TAGS
--- a/hotspot/make/hotspot_version	Mon May 02 09:38:22 2011 -0700
+++ b/hotspot/make/hotspot_version	Wed Jul 05 17:43:05 2017 +0200
@@ -35,7 +35,7 @@
 
 HS_MAJOR_VER=21
 HS_MINOR_VER=0
-HS_BUILD_NUMBER=10
+HS_BUILD_NUMBER=11
 
 JDK_MAJOR_VER=1
 JDK_MINOR_VER=7
--- a/hotspot/make/linux/Makefile	Mon May 02 09:38:22 2011 -0700
+++ b/hotspot/make/linux/Makefile	Wed Jul 05 17:43:05 2017 +0200
@@ -359,7 +359,7 @@
 
 clean:  clean_compiler2 clean_compiler1 clean_core clean_zero clean_shark clean_docs
 
-include $(GAMMADIR)/make/$(OSNAME)/makefiles/cscope.make
+include $(GAMMADIR)/make/cscope.make
 
 #-------------------------------------------------------------------------------
 
--- a/hotspot/make/linux/makefiles/cscope.make	Mon May 02 09:38:22 2011 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,160 +0,0 @@
-#
-# Copyright (c) 2005, 2008, Oracle and/or its affiliates. All rights reserved.
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# This code is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License version 2 only, as
-# published by the Free Software Foundation.
-#
-# This code is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-# version 2 for more details (a copy is included in the LICENSE file that
-# accompanied this code).
-#
-# You should have received a copy of the GNU General Public License version
-# 2 along with this work; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-# or visit www.oracle.com if you need additional information or have any
-# questions.
-#  
-#
-
-#
-# The cscope.out file is made in the current directory and spans the entire
-# source tree.
-#
-# Things to note:
-#	1. We use relative names for cscope.
-#	2. We *don't* remove the old cscope.out file, because cscope is smart
-#	   enough to only build what has changed.  It can be confused, however,
-#	   if files are renamed or removed, so it may be necessary to manually
-#	   remove cscope.out if a lot of reorganization has occurred.
-#
-
-include $(GAMMADIR)/make/scm.make
-
-NAWK	= awk
-RM	= rm -f
-HG	= hg
-CS_TOP	= ../..
-
-CSDIRS	= $(CS_TOP)/src $(CS_TOP)/build
-CSINCS	= $(CSDIRS:%=-I%)
-
-CSCOPE		= cscope
-CSCOPE_FLAGS	= -b
-
-# Allow .java files to be added from the environment (CSCLASSES=yes).
-ifdef	CSCLASSES
-ADDCLASSES=	-o -name '*.java'
-endif
-
-# Adding CClassHeaders also pushes the file count of a full workspace up about
-# 200 files (these files also don't exist in a new workspace, and thus will
-# cause the recreation of the database as they get created, which might seem
-# a little confusing).  Thus allow these files to be added from the environment
-# (CSHEADERS=yes).
-ifndef	CSHEADERS
-RMCCHEADERS=	-o -name CClassHeaders
-endif
-
-# Use CS_GENERATED=x to include auto-generated files in the build directories.
-ifdef	CS_GENERATED
-CS_ADD_GENERATED	= -o -name '*.incl'
-else
-CS_PRUNE_GENERATED	= -o -name '${OS}_*_core' -o -name '${OS}_*_compiler?'
-endif
-
-# OS-specific files for other systems are excluded by default.  Use CS_OS=yes
-# to include platform-specific files for other platforms.
-ifndef	CS_OS
-CS_OS		= linux macos solaris win32
-CS_PRUNE_OS	= $(patsubst %,-o -name '*%*',$(filter-out ${OS},${CS_OS}))
-endif
-
-# Processor-specific files for other processors are excluded by default.  Use
-# CS_CPU=x to include platform-specific files for other platforms.
-ifndef	CS_CPU
-CS_CPU		= i486 sparc amd64 ia64
-CS_PRUNE_CPU	= $(patsubst %,-o -name '*%*',$(filter-out ${SRCARCH},${CS_CPU}))
-endif
-
-# What files should we include?  A simple rule might be just those files under
-# SCCS control, however this would miss files we create like the opcodes and
-# CClassHeaders.  The following attempts to find everything that is *useful*.
-# (.del files are created by sccsrm, demo directories contain many .java files
-# that probably aren't useful for development, and the pkgarchive may contain
-# duplicates of files within the source hierarchy).
-
-# Directories to exclude.
-CS_PRUNE_STD	= $(SCM_DIRS) \
-		  -o -name '.del-*' \
-		  -o -name '*demo' \
-		  -o -name pkgarchive
-
-CS_PRUNE	= $(CS_PRUNE_STD) \
-		  $(CS_PRUNE_OS) \
-		  $(CS_PRUNE_CPU) \
-		  $(CS_PRUNE_GENERATED) \
-		  $(RMCCHEADERS)
-
-# File names to include.
-CSFILENAMES	= -name '*.[ch]pp' \
-		  -o -name '*.[Ccshlxy]' \
-		  $(CS_ADD_GENERATED) \
-		  -o -name '*.il' \
-		  -o -name '*.cc' \
-		  -o -name '*[Mm]akefile*' \
-		  -o -name '*.gmk' \
-		  -o -name '*.make' \
-		  -o -name '*.ad' \
-		  $(ADDCLASSES)
-
-.PRECIOUS:	cscope.out
-
-cscope cscope.out: cscope.files FORCE
-	$(CSCOPE) $(CSCOPE_FLAGS)
-
-# The .raw file is reordered here in an attempt to make cscope display the most
-# relevant files first.
-cscope.files: .cscope.files.raw
-	echo "$(CSINCS)" > $@
-	-egrep -v "\.java|\/make\/"	$< >> $@
-	-fgrep ".java"			$< >> $@
-	-fgrep "/make/"		$< >> $@
-
-.cscope.files.raw:  .nametable.files
-	-find $(CSDIRS) -type d \( $(CS_PRUNE) \) -prune -o \
-	    -type f \( $(CSFILENAMES) \) -print > $@
-
-cscope.clean:  nametable.clean
-	-$(RM) cscope.out cscope.files .cscope.files.raw
-
-TAGS:  cscope.files FORCE
-	egrep -v '^-|^$$' $< | etags --members -
-
-TAGS.clean:  nametable.clean
-	-$(RM) TAGS
-
-# .nametable.files and .nametable.files.tmp are used to determine if any files
-# were added to/deleted from/renamed in the workspace.  If not, then there's
-# normally no need to rebuild the cscope database. To force a rebuild of
-# the cscope database: gmake nametable.clean.
-.nametable.files:  .nametable.files.tmp
-	( cmp -s $@ $< ) || ( cp $< $@ )
-	-$(RM) $<
-
-# `hg status' is slightly faster than `hg fstatus'. Both are
-# quite a bit slower on an NFS mounted file system, so this is
-# really geared towards repos on local file systems.
-.nametable.files.tmp:
-	-$(HG) fstatus -acmn > $@
-nametable.clean:
-	-$(RM) .nametable.files .nametable.files.tmp
-
-FORCE:
-
-.PHONY:		cscope cscope.clean TAGS.clean nametable.clean FORCE
--- a/hotspot/make/solaris/Makefile	Mon May 02 09:38:22 2011 -0700
+++ b/hotspot/make/solaris/Makefile	Wed Jul 05 17:43:05 2017 +0200
@@ -296,7 +296,7 @@
 
 clean:  clean_compiler2 clean_compiler1 clean_core clean_docs clean_kernel
 
-include $(GAMMADIR)/make/$(OSNAME)/makefiles/cscope.make
+include $(GAMMADIR)/make/cscope.make
 
 #-------------------------------------------------------------------------------
 
--- a/hotspot/make/solaris/makefiles/cscope.make	Mon May 02 09:38:22 2011 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,162 +0,0 @@
-#
-# Copyright (c) 2000, 2008, Oracle and/or its affiliates. All rights reserved.
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# This code is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License version 2 only, as
-# published by the Free Software Foundation.
-#
-# This code is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-# version 2 for more details (a copy is included in the LICENSE file that
-# accompanied this code).
-#
-# You should have received a copy of the GNU General Public License version
-# 2 along with this work; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-# or visit www.oracle.com if you need additional information or have any
-# questions.
-#  
-#
-
-#
-# The cscope.out file is made in the current directory and spans the entire
-# source tree.
-#
-# Things to note:
-#	1. We use relative names for cscope.
-#	2. We *don't* remove the old cscope.out file, because cscope is smart
-#	   enough to only build what has changed.  It can be confused, however,
-#	   if files are renamed or removed, so it may be necessary to manually
-#	   remove cscope.out if a lot of reorganization has occurred.
-#
-
-include $(GAMMADIR)/make/scm.make
-
-NAWK	= /usr/xpg4/bin/awk
-RM	= rm -f
-HG	= hg
-CS_TOP	= ../..
-
-CSDIRS	= $(CS_TOP)/src $(CS_TOP)/make
-CSINCS	= $(CSDIRS:%=-I%)
-
-CSCOPE		= cscope
-CSCOPE_FLAGS	= -b
-
-# Allow .java files to be added from the environment (CSCLASSES=yes).
-ifdef	CSCLASSES
-ADDCLASSES=	-o -name '*.java'
-endif
-
-# Adding CClassHeaders also pushes the file count of a full workspace up about
-# 200 files (these files also don't exist in a new workspace, and thus will
-# cause the recreation of the database as they get created, which might seem
-# a little confusing).  Thus allow these files to be added from the environment
-# (CSHEADERS=yes).
-ifndef	CSHEADERS
-RMCCHEADERS=	-o -name CClassHeaders
-endif
-
-# Use CS_GENERATED=x to include auto-generated files in the make directories.
-ifdef	CS_GENERATED
-CS_ADD_GENERATED	= -o -name '*.incl'
-else
-CS_PRUNE_GENERATED	= -o -name '${OS}_*_core' -o -name '${OS}_*_compiler?'
-endif
-
-# OS-specific files for other systems are excluded by default.  Use CS_OS=yes
-# to include platform-specific files for other platforms.
-ifndef	CS_OS
-CS_OS		= linux macos solaris win32
-CS_PRUNE_OS	= $(patsubst %,-o -name '*%*',$(filter-out ${OS},${CS_OS}))
-endif
-
-# Processor-specific files for other processors are excluded by default.  Use
-# CS_CPU=x to include platform-specific files for other platforms.
-ifndef	CS_CPU
-CS_CPU		= i486 sparc amd64 ia64
-CS_PRUNE_CPU	= $(patsubst %,-o -name '*%*',$(filter-out ${SRCARCH},${CS_CPU}))
-endif
-
-# What files should we include?  A simple rule might be just those files under
-# SCCS control, however this would miss files we create like the opcodes and
-# CClassHeaders.  The following attempts to find everything that is *useful*.
-# (.del files are created by sccsrm, demo directories contain many .java files
-# that probably aren't useful for development, and the pkgarchive may contain
-# duplicates of files within the source hierarchy).
-
-# Directories to exclude.
-CS_PRUNE_STD	= $(SCM_DIRS) \
-		  -o -name '.del-*' \
-		  -o -name '*demo' \
-		  -o -name pkgarchive
-
-CS_PRUNE	= $(CS_PRUNE_STD) \
-		  $(CS_PRUNE_OS) \
-		  $(CS_PRUNE_CPU) \
-		  $(CS_PRUNE_GENERATED) \
-		  $(RMCCHEADERS)
-
-# File names to include.
-CSFILENAMES	= -name '*.[ch]pp' \
-		  -o -name '*.[Ccshlxy]' \
-		  $(CS_ADD_GENERATED) \
-		  -o -name '*.d' \
-		  -o -name '*.il' \
-		  -o -name '*.cc' \
-		  -o -name '*[Mm]akefile*' \
-		  -o -name '*.gmk' \
-		  -o -name '*.make' \
-		  -o -name '*.ad' \
-		  $(ADDCLASSES)
-
-.PRECIOUS:	cscope.out
-
-cscope cscope.out: cscope.files FORCE
-	$(CSCOPE) $(CSCOPE_FLAGS)
-
-# The .raw file is reordered here in an attempt to make cscope display the most
-# relevant files first.
-cscope.files: .cscope.files.raw
-	echo "$(CSINCS)" > $@
-	-egrep -v "\.java|\/make\/"	$< >> $@
-	-fgrep ".java"			$< >> $@
-	-fgrep "/make/"		$< >> $@
-
-.cscope.files.raw:  .nametable.files
-	-find $(CSDIRS) -type d \( $(CS_PRUNE) \) -prune -o \
-	    -type f \( $(CSFILENAMES) \) -print > $@
-
-cscope.clean:  nametable.clean
-	-$(RM) cscope.out cscope.files .cscope.files.raw
-
-TAGS:  cscope.files FORCE
-	egrep -v '^-|^$$' $< | etags --members -
-
-TAGS.clean:  nametable.clean
-	-$(RM) TAGS
-
-# .nametable.files and .nametable.files.tmp are used to determine if any files
-# were added to/deleted from/renamed in the workspace.  If not, then there's
-# normally no need to rebuild the cscope database. To force a rebuild of
-# the cscope database: gmake nametable.clean.
-.nametable.files:  .nametable.files.tmp
-	( cmp -s $@ $< ) || ( cp $< $@ )
-	-$(RM) $<
-
-# `hg status' is slightly faster than `hg fstatus'. Both are
-# quite a bit slower on an NFS mounted file system, so this is
-# really geared towards repos on local file systems.
-.nametable.files.tmp:
-	-$(HG) fstatus -acmn > $@
-
-nametable.clean:
-	-$(RM) .nametable.files .nametable.files.tmp
-
-FORCE:
-
-.PHONY:		cscope cscope.clean TAGS.clean nametable.clean FORCE
--- a/hotspot/src/cpu/sparc/vm/methodHandles_sparc.cpp	Mon May 02 09:38:22 2011 -0700
+++ b/hotspot/src/cpu/sparc/vm/methodHandles_sparc.cpp	Wed Jul 05 17:43:05 2017 +0200
@@ -486,7 +486,7 @@
       if (ek == _invokespecial_mh) {
         // Must load & check the first argument before entering the target method.
         __ load_method_handle_vmslots(O0_argslot, G3_method_handle, O1_scratch);
-        __ ld_ptr(__ argument_address(O0_argslot), G3_method_handle);
+        __ ld_ptr(__ argument_address(O0_argslot, -1), G3_method_handle);
         __ null_check(G3_method_handle);
         __ verify_oop(G3_method_handle);
       }
--- a/hotspot/src/cpu/sparc/vm/templateTable_sparc.cpp	Mon May 02 09:38:22 2011 -0700
+++ b/hotspot/src/cpu/sparc/vm/templateTable_sparc.cpp	Wed Jul 05 17:43:05 2017 +0200
@@ -3293,8 +3293,6 @@
                              /*virtual*/ false, /*vfinal*/ false, /*indy*/ true);
   __ mov(SP, O5_savedSP);  // record SP that we wanted the callee to restore
 
-  __ verify_oop(G5_callsite);
-
   // profile this call
   __ profile_call(O4);
 
@@ -3307,8 +3305,10 @@
   __ sll(Rret, LogBytesPerWord, Rret);
   __ ld_ptr(Rtemp, Rret, Rret);  // get return address
 
+  __ verify_oop(G5_callsite);
   __ load_heap_oop(G5_callsite, __ delayed_value(java_lang_invoke_CallSite::target_offset_in_bytes, Rscratch), G3_method_handle);
   __ null_check(G3_method_handle);
+  __ verify_oop(G3_method_handle);
 
   // Adjust Rret first so Llast_SP can be same as Rret
   __ add(Rret, -frame::pc_return_offset, O7);
--- a/hotspot/src/cpu/x86/vm/templateTable_x86_32.cpp	Mon May 02 09:38:22 2011 -0700
+++ b/hotspot/src/cpu/x86/vm/templateTable_x86_32.cpp	Wed Jul 05 17:43:05 2017 +0200
@@ -422,7 +422,7 @@
 
   Label L_done, L_throw_exception;
   const Register con_klass_temp = rcx;  // same as Rcache
-  __ movptr(con_klass_temp, Address(rax, oopDesc::klass_offset_in_bytes()));
+  __ load_klass(con_klass_temp, rax);
   __ cmpptr(con_klass_temp, ExternalAddress((address)Universe::systemObjArrayKlassObj_addr()));
   __ jcc(Assembler::notEqual, L_done);
   __ cmpl(Address(rax, arrayOopDesc::length_offset_in_bytes()), 0);
@@ -432,7 +432,7 @@
 
   // Load the exception from the system-array which wraps it:
   __ bind(L_throw_exception);
-  __ movptr(rax, Address(rax, arrayOopDesc::base_offset_in_bytes(T_OBJECT)));
+  __ load_heap_oop(rax, Address(rax, arrayOopDesc::base_offset_in_bytes(T_OBJECT)));
   __ jump(ExternalAddress(Interpreter::throw_exception_entry()));
 
   __ bind(L_done);
@@ -946,9 +946,9 @@
   __ jcc(Assembler::zero, is_null);
 
   // Move subklass into EBX
-  __ movptr(rbx, Address(rax, oopDesc::klass_offset_in_bytes()));
+  __ load_klass(rbx, rax);
   // Move superklass into EAX
-  __ movptr(rax, Address(rdx, oopDesc::klass_offset_in_bytes()));
+  __ load_klass(rax, rdx);
   __ movptr(rax, Address(rax, sizeof(oopDesc) + objArrayKlass::element_klass_offset_in_bytes()));
   // Compress array+index*wordSize+12 into a single register.  Frees ECX.
   __ lea(rdx, element_address);
@@ -2001,7 +2001,7 @@
   if (_desc->bytecode() == Bytecodes::_return_register_finalizer) {
     assert(state == vtos, "only valid state");
     __ movptr(rax, aaddress(0));
-    __ movptr(rdi, Address(rax, oopDesc::klass_offset_in_bytes()));
+    __ load_klass(rdi, rax);
     __ movl(rdi, Address(rdi, Klass::access_flags_offset_in_bytes() + sizeof(oopDesc)));
     __ testl(rdi, JVM_ACC_HAS_FINALIZER);
     Label skip_register_finalizer;
@@ -2948,7 +2948,7 @@
   // get receiver klass
   __ null_check(recv, oopDesc::klass_offset_in_bytes());
   // Keep recv in rcx for callee expects it there
-  __ movptr(rax, Address(recv, oopDesc::klass_offset_in_bytes()));
+  __ load_klass(rax, recv);
   __ verify_oop(rax);
 
   // profile this call
@@ -3028,7 +3028,7 @@
 
   // Get receiver klass into rdx - also a null check
   __ restore_locals();  // restore rdi
-  __ movptr(rdx, Address(rcx, oopDesc::klass_offset_in_bytes()));
+  __ load_klass(rdx, rcx);
   __ verify_oop(rdx);
 
   // profile this call
@@ -3083,6 +3083,7 @@
 
 void TemplateTable::invokedynamic(int byte_no) {
   transition(vtos, vtos);
+  assert(byte_no == f1_oop, "use this argument");
 
   if (!EnableInvokeDynamic) {
     // We should not encounter this bytecode if !EnableInvokeDynamic.
@@ -3095,7 +3096,6 @@
     return;
   }
 
-  assert(byte_no == f1_oop, "use this argument");
   prepare_invoke(rax, rbx, byte_no);
 
   // rax: CallSite object (f1)
@@ -3106,14 +3106,14 @@
   Register rax_callsite      = rax;
   Register rcx_method_handle = rcx;
 
-  if (ProfileInterpreter) {
-    // %%% should make a type profile for any invokedynamic that takes a ref argument
-    // profile this call
-    __ profile_call(rsi);
-  }
-
-  __ movptr(rcx_method_handle, Address(rax_callsite, __ delayed_value(java_lang_invoke_CallSite::target_offset_in_bytes, rcx)));
+  // %%% should make a type profile for any invokedynamic that takes a ref argument
+  // profile this call
+  __ profile_call(rsi);
+
+  __ verify_oop(rax_callsite);
+  __ load_heap_oop(rcx_method_handle, Address(rax_callsite, __ delayed_value(java_lang_invoke_CallSite::target_offset_in_bytes, rdx)));
   __ null_check(rcx_method_handle);
+  __ verify_oop(rcx_method_handle);
   __ prepare_to_jump_from_interpreted();
   __ jump_to_method_handle_entry(rcx_method_handle, rdx);
 }
@@ -3258,7 +3258,7 @@
                 (int32_t)markOopDesc::prototype()); // header
       __ pop(rcx);   // get saved klass back in the register.
     }
-    __ movptr(Address(rax, oopDesc::klass_offset_in_bytes()), rcx);  // klass
+    __ store_klass(rax, rcx);  // klass
 
     {
       SkipIfEqual skip_if(_masm, &DTraceAllocProbes, 0);
@@ -3333,7 +3333,7 @@
   __ movptr(rax, Address(rcx, rbx, Address::times_ptr, sizeof(constantPoolOopDesc)));
 
   __ bind(resolved);
-  __ movptr(rbx, Address(rdx, oopDesc::klass_offset_in_bytes()));
+  __ load_klass(rbx, rdx);
 
   // Generate subtype check.  Blows ECX.  Resets EDI.  Object in EDX.
   // Superklass in EAX.  Subklass in EBX.
@@ -3376,12 +3376,12 @@
   __ push(atos);
   call_VM(rax, CAST_FROM_FN_PTR(address, InterpreterRuntime::quicken_io_cc) );
   __ pop_ptr(rdx);
-  __ movptr(rdx, Address(rdx, oopDesc::klass_offset_in_bytes()));
+  __ load_klass(rdx, rdx);
   __ jmp(resolved);
 
   // Get superklass in EAX and subklass in EDX
   __ bind(quicked);
-  __ movptr(rdx, Address(rax, oopDesc::klass_offset_in_bytes()));
+  __ load_klass(rdx, rax);
   __ movptr(rax, Address(rcx, rbx, Address::times_ptr, sizeof(constantPoolOopDesc)));
 
   __ bind(resolved);
--- a/hotspot/src/cpu/x86/vm/templateTable_x86_64.cpp	Mon May 02 09:38:22 2011 -0700
+++ b/hotspot/src/cpu/x86/vm/templateTable_x86_64.cpp	Wed Jul 05 17:43:05 2017 +0200
@@ -436,7 +436,7 @@
   Label L_done, L_throw_exception;
   const Register con_klass_temp = rcx;  // same as cache
   const Register array_klass_temp = rdx;  // same as index
-  __ movptr(con_klass_temp, Address(rax, oopDesc::klass_offset_in_bytes()));
+  __ load_klass(con_klass_temp, rax);
   __ lea(array_klass_temp, ExternalAddress((address)Universe::systemObjArrayKlassObj_addr()));
   __ cmpptr(con_klass_temp, Address(array_klass_temp, 0));
   __ jcc(Assembler::notEqual, L_done);
@@ -447,7 +447,7 @@
 
   // Load the exception from the system-array which wraps it:
   __ bind(L_throw_exception);
-  __ movptr(rax, Address(rax, arrayOopDesc::base_offset_in_bytes(T_OBJECT)));
+  __ load_heap_oop(rax, Address(rax, arrayOopDesc::base_offset_in_bytes(T_OBJECT)));
   __ jump(ExternalAddress(Interpreter::throw_exception_entry()));
 
   __ bind(L_done);
@@ -3137,7 +3137,6 @@
     return;
   }
 
-  assert(byte_no == f1_oop, "use this argument");
   prepare_invoke(rax, rbx, byte_no);
 
   // rax: CallSite object (f1)
@@ -3148,14 +3147,14 @@
   Register rax_callsite      = rax;
   Register rcx_method_handle = rcx;
 
-  if (ProfileInterpreter) {
-    // %%% should make a type profile for any invokedynamic that takes a ref argument
-    // profile this call
-    __ profile_call(r13);
-  }
-
-  __ load_heap_oop(rcx_method_handle, Address(rax_callsite, __ delayed_value(java_lang_invoke_CallSite::target_offset_in_bytes, rcx)));
+  // %%% should make a type profile for any invokedynamic that takes a ref argument
+  // profile this call
+  __ profile_call(r13);
+
+  __ verify_oop(rax_callsite);
+  __ load_heap_oop(rcx_method_handle, Address(rax_callsite, __ delayed_value(java_lang_invoke_CallSite::target_offset_in_bytes, rdx)));
   __ null_check(rcx_method_handle);
+  __ verify_oop(rcx_method_handle);
   __ prepare_to_jump_from_interpreted();
   __ jump_to_method_handle_entry(rcx_method_handle, rdx);
 }
--- a/hotspot/src/cpu/x86/vm/vm_version_x86.cpp	Mon May 02 09:38:22 2011 -0700
+++ b/hotspot/src/cpu/x86/vm/vm_version_x86.cpp	Wed Jul 05 17:43:05 2017 +0200
@@ -441,12 +441,25 @@
       }
     }
 
-    // On family 21 processors default is no sw prefetch
-    if ( cpu_family() == 21 ) {
+    // some defaults for AMD family 15h
+    if ( cpu_family() == 0x15 ) {
+      // On family 15h processors default is no sw prefetch
       if (FLAG_IS_DEFAULT(AllocatePrefetchStyle)) {
         AllocatePrefetchStyle = 0;
       }
+      // Also, if some other prefetch style is specified, default instruction type is PREFETCHW
+      if (FLAG_IS_DEFAULT(AllocatePrefetchInstr)) {
+        AllocatePrefetchInstr = 3;
+      }
+      // On family 15h processors use XMM and UnalignedLoadStores for Array Copy
+      if( FLAG_IS_DEFAULT(UseXMMForArrayCopy) ) {
+        UseXMMForArrayCopy = true;
+      }
+      if( FLAG_IS_DEFAULT(UseUnalignedLoadStores) && UseXMMForArrayCopy ) {
+        UseUnalignedLoadStores = true;
+      }
     }
+
   }
 
   if( is_intel() ) { // Intel cpus specific settings
--- a/hotspot/src/os/linux/vm/globals_linux.hpp	Mon May 02 09:38:22 2011 -0700
+++ b/hotspot/src/os/linux/vm/globals_linux.hpp	Wed Jul 05 17:43:05 2017 +0200
@@ -29,13 +29,19 @@
 // Defines Linux specific flags. They are not available on other platforms.
 //
 #define RUNTIME_OS_FLAGS(develop, develop_pd, product, product_pd, diagnostic, notproduct) \
-  product(bool, UseOprofile, false,                                 \
-        "enable support for Oprofile profiler")                     \
-                                                                    \
-  product(bool, UseLinuxPosixThreadCPUClocks, true,                 \
-          "enable fast Linux Posix clocks where available")
-// NB: The default value of UseLinuxPosixThreadCPUClocks may be
-// overridden in Arguments::parse_each_vm_init_arg.
+  product(bool, UseOprofile, false,                                     \
+        "enable support for Oprofile profiler")                         \
+                                                                        \
+  product(bool, UseLinuxPosixThreadCPUClocks, true,                     \
+          "enable fast Linux Posix clocks where available")             \
+/*  NB: The default value of UseLinuxPosixThreadCPUClocks may be        \
+    overridden in Arguments::parse_each_vm_init_arg.  */                \
+                                                                        \
+  product(bool, UseHugeTLBFS, false,                                    \
+          "Use MAP_HUGETLB for large pages")                            \
+                                                                        \
+  product(bool, UseSHM, false,                                          \
+          "Use SYSV shared memory for large pages")
 
 //
 // Defines Linux-specific default values. The flags are available on all
--- a/hotspot/src/os/linux/vm/os_linux.cpp	Mon May 02 09:38:22 2011 -0700
+++ b/hotspot/src/os/linux/vm/os_linux.cpp	Wed Jul 05 17:43:05 2017 +0200
@@ -2465,16 +2465,40 @@
   return res != (uintptr_t) MAP_FAILED;
 }
 
+// Define MAP_HUGETLB here so we can build HotSpot on old systems.
+#ifndef MAP_HUGETLB
+#define MAP_HUGETLB 0x40000
+#endif
+
+// Define MADV_HUGEPAGE here so we can build HotSpot on old systems.
+#ifndef MADV_HUGEPAGE
+#define MADV_HUGEPAGE 14
+#endif
+
 bool os::commit_memory(char* addr, size_t size, size_t alignment_hint,
                        bool exec) {
+  if (UseHugeTLBFS && alignment_hint > (size_t)vm_page_size()) {
+    int prot = exec ? PROT_READ|PROT_WRITE|PROT_EXEC : PROT_READ|PROT_WRITE;
+    uintptr_t res =
+      (uintptr_t) ::mmap(addr, size, prot,
+                         MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS|MAP_HUGETLB,
+                         -1, 0);
+    return res != (uintptr_t) MAP_FAILED;
+  }
+
   return commit_memory(addr, size, exec);
 }
 
-void os::realign_memory(char *addr, size_t bytes, size_t alignment_hint) { }
+void os::realign_memory(char *addr, size_t bytes, size_t alignment_hint) {
+  if (UseHugeTLBFS && alignment_hint > (size_t)vm_page_size()) {
+    // We don't check the return value: madvise(MADV_HUGEPAGE) may not
+    // be supported or the memory may already be backed by huge pages.
+    ::madvise(addr, bytes, MADV_HUGEPAGE);
+  }
+}
 
 void os::free_memory(char *addr, size_t bytes) {
-  ::mmap(addr, bytes, PROT_READ | PROT_WRITE,
-         MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0);
+  ::madvise(addr, bytes, MADV_DONTNEED);
 }
 
 void os::numa_make_global(char *addr, size_t bytes) {
@@ -2812,6 +2836,43 @@
   return linux_mprotect(addr, size, PROT_READ|PROT_WRITE);
 }
 
+bool os::Linux::hugetlbfs_sanity_check(bool warn, size_t page_size) {
+  bool result = false;
+  void *p = mmap (NULL, page_size, PROT_READ|PROT_WRITE,
+                  MAP_ANONYMOUS|MAP_PRIVATE|MAP_HUGETLB,
+                  -1, 0);
+
+  if (p != (void *) -1) {
+    // We don't know if this really is a huge page or not.
+    FILE *fp = fopen("/proc/self/maps", "r");
+    if (fp) {
+      while (!feof(fp)) {
+        char chars[257];
+        long x = 0;
+        if (fgets(chars, sizeof(chars), fp)) {
+          if (sscanf(chars, "%lx-%*lx", &x) == 1
+              && x == (long)p) {
+            if (strstr (chars, "hugepage")) {
+              result = true;
+              break;
+            }
+          }
+        }
+      }
+      fclose(fp);
+    }
+    munmap (p, page_size);
+    if (result)
+      return true;
+  }
+
+  if (warn) {
+    warning("HugeTLBFS is not supported by the operating system.");
+  }
+
+  return result;
+}
+
 /*
 * Set the coredump_filter bits to include largepages in core dump (bit 6)
 *
@@ -2854,7 +2915,16 @@
 static size_t _large_page_size = 0;
 
 bool os::large_page_init() {
-  if (!UseLargePages) return false;
+  if (!UseLargePages) {
+    UseHugeTLBFS = false;
+    UseSHM = false;
+    return false;
+  }
+
+  if (FLAG_IS_DEFAULT(UseHugeTLBFS) && FLAG_IS_DEFAULT(UseSHM)) {
+    // Our user has not expressed a preference, so we'll try both.
+    UseHugeTLBFS = UseSHM = true;
+  }
 
   if (LargePageSizeInBytes) {
     _large_page_size = LargePageSizeInBytes;
@@ -2899,6 +2969,9 @@
     }
   }
 
+  // print a warning if any large page related flag is specified on command line
+  bool warn_on_failure = !FLAG_IS_DEFAULT(UseHugeTLBFS);
+
   const size_t default_page_size = (size_t)Linux::page_size();
   if (_large_page_size > default_page_size) {
     _page_sizes[0] = _large_page_size;
@@ -2906,6 +2979,14 @@
     _page_sizes[2] = 0;
   }
 
+  UseHugeTLBFS = UseHugeTLBFS &&
+                 Linux::hugetlbfs_sanity_check(warn_on_failure, _large_page_size);
+
+  if (UseHugeTLBFS)
+    UseSHM = false;
+
+  UseLargePages = UseHugeTLBFS || UseSHM;
+
   set_coredump_filter();
 
   // Large page support is available on 2.6 or newer kernel, some vendors
@@ -2922,7 +3003,7 @@
 char* os::reserve_memory_special(size_t bytes, char* req_addr, bool exec) {
   // "exec" is passed in but not used.  Creating the shared image for
   // the code cache doesn't have an SHM_X executable permission to check.
-  assert(UseLargePages, "only for large pages");
+  assert(UseLargePages && UseSHM, "only for SHM large pages");
 
   key_t key = IPC_PRIVATE;
   char *addr;
@@ -2989,16 +3070,15 @@
   return _large_page_size;
 }
 
-// Linux does not support anonymous mmap with large page memory. The only way
-// to reserve large page memory without file backing is through SysV shared
-// memory API. The entire memory region is committed and pinned upfront.
-// Hopefully this will change in the future...
+// HugeTLBFS allows application to commit large page memory on demand;
+// with SysV SHM the entire memory region must be allocated as shared
+// memory.
 bool os::can_commit_large_page_memory() {
-  return false;
+  return UseHugeTLBFS;
 }
 
 bool os::can_execute_large_page_memory() {
-  return false;
+  return UseHugeTLBFS;
 }
 
 // Reserve memory at an arbitrary address, only if that area is
@@ -4090,6 +4170,23 @@
         UseNUMA = false;
       }
     }
+    // With SHM large pages we cannot uncommit a page, so there's not way
+    // we can make the adaptive lgrp chunk resizing work. If the user specified
+    // both UseNUMA and UseLargePages (or UseSHM) on the command line - warn and
+    // disable adaptive resizing.
+    if (UseNUMA && UseLargePages && UseSHM) {
+      if (!FLAG_IS_DEFAULT(UseNUMA)) {
+        if (FLAG_IS_DEFAULT(UseLargePages) && FLAG_IS_DEFAULT(UseSHM)) {
+          UseLargePages = false;
+        } else {
+          warning("UseNUMA is not fully compatible with SHM large pages, disabling adaptive resizing");
+          UseAdaptiveSizePolicy = false;
+          UseAdaptiveNUMAChunkSizing = false;
+        }
+      } else {
+        UseNUMA = false;
+      }
+    }
     if (!UseNUMA && ForceNUMA) {
       UseNUMA = true;
     }
--- a/hotspot/src/os/linux/vm/os_linux.hpp	Mon May 02 09:38:22 2011 -0700
+++ b/hotspot/src/os/linux/vm/os_linux.hpp	Wed Jul 05 17:43:05 2017 +0200
@@ -86,6 +86,9 @@
 
   static void rebuild_cpu_to_node_map();
   static GrowableArray<int>* cpu_to_node()    { return _cpu_to_node; }
+
+  static bool hugetlbfs_sanity_check(bool warn, size_t page_size);
+
  public:
   static void init_thread_fpu_state();
   static int  get_fpu_control_word();
--- a/hotspot/src/os/solaris/vm/os_solaris.cpp	Mon May 02 09:38:22 2011 -0700
+++ b/hotspot/src/os/solaris/vm/os_solaris.cpp	Wed Jul 05 17:43:05 2017 +0200
@@ -2826,7 +2826,9 @@
 void os::realign_memory(char *addr, size_t bytes, size_t alignment_hint) {
   assert((intptr_t)addr % alignment_hint == 0, "Address should be aligned.");
   assert((intptr_t)(addr + bytes) % alignment_hint == 0, "End should be aligned.");
-  Solaris::set_mpss_range(addr, bytes, alignment_hint);
+  if (UseLargePages && UseMPSS) {
+    Solaris::set_mpss_range(addr, bytes, alignment_hint);
+  }
 }
 
 // Tell the OS to make the range local to the first-touching LWP
@@ -5044,6 +5046,20 @@
         UseNUMA = false;
       }
     }
+    // ISM is not compatible with the NUMA allocator - it always allocates
+    // pages round-robin across the lgroups.
+    if (UseNUMA && UseLargePages && UseISM) {
+      if (!FLAG_IS_DEFAULT(UseNUMA)) {
+        if (FLAG_IS_DEFAULT(UseLargePages) && FLAG_IS_DEFAULT(UseISM)) {
+          UseLargePages = false;
+        } else {
+          warning("UseNUMA is not compatible with ISM large pages, disabling NUMA allocator");
+          UseNUMA = false;
+        }
+      } else {
+        UseNUMA = false;
+      }
+    }
     if (!UseNUMA && ForceNUMA) {
       UseNUMA = true;
     }
--- a/hotspot/src/share/vm/c1/c1_Runtime1.cpp	Mon May 02 09:38:22 2011 -0700
+++ b/hotspot/src/share/vm/c1/c1_Runtime1.cpp	Wed Jul 05 17:43:05 2017 +0200
@@ -1026,9 +1026,21 @@
           // first replace the tail, then the call
 #ifdef ARM
           if(stub_id == Runtime1::load_klass_patching_id && !VM_Version::supports_movw()) {
+            nmethod* nm = CodeCache::find_nmethod(instr_pc);
+            oop* oop_addr = NULL;
+            assert(nm != NULL, "invalid nmethod_pc");
+            RelocIterator oops(nm, copy_buff, copy_buff + 1);
+            while (oops.next()) {
+              if (oops.type() == relocInfo::oop_type) {
+                oop_Relocation* r = oops.oop_reloc();
+                oop_addr = r->oop_addr();
+                break;
+              }
+            }
+            assert(oop_addr != NULL, "oop relocation must exist");
             copy_buff -= *byte_count;
             NativeMovConstReg* n_copy2 = nativeMovConstReg_at(copy_buff);
-            n_copy2->set_data((intx) (load_klass()), instr_pc);
+            n_copy2->set_pc_relative_offset((address)oop_addr, instr_pc);
           }
 #endif
 
--- a/hotspot/src/share/vm/ci/bcEscapeAnalyzer.cpp	Mon May 02 09:38:22 2011 -0700
+++ b/hotspot/src/share/vm/ci/bcEscapeAnalyzer.cpp	Wed Jul 05 17:43:05 2017 +0200
@@ -232,14 +232,7 @@
   }
 
   // compute size of arguments
-  int arg_size = target->arg_size();
-  if (code == Bytecodes::_invokedynamic) {
-    assert(!target->is_static(), "receiver explicit in method");
-    arg_size--;  // implicit, not really on stack
-  }
-  if (!target->is_loaded() && code == Bytecodes::_invokestatic) {
-    arg_size--;
-  }
+  int arg_size = target->invoke_arg_size(code);
   int arg_base = MAX2(state._stack_height - arg_size, 0);
 
   // direct recursive calls are skipped if they can be bound statically without introducing
--- a/hotspot/src/share/vm/ci/ciEnv.cpp	Mon May 02 09:38:22 2011 -0700
+++ b/hotspot/src/share/vm/ci/ciEnv.cpp	Wed Jul 05 17:43:05 2017 +0200
@@ -756,7 +756,7 @@
   assert(bc == Bytecodes::_invokedynamic, "must be invokedynamic");
 
   bool is_resolved = cpool->cache()->main_entry_at(index)->is_resolved(bc);
-  if (is_resolved && (oop) cpool->cache()->secondary_entry_at(index)->f1() == NULL)
+  if (is_resolved && cpool->cache()->secondary_entry_at(index)->is_f1_null())
     // FIXME: code generation could allow for null (unlinked) call site
     is_resolved = false;
 
@@ -770,7 +770,7 @@
 
   // Get the invoker methodOop from the constant pool.
   oop f1_value = cpool->cache()->main_entry_at(index)->f1();
-  methodOop signature_invoker = methodOop(f1_value);
+  methodOop signature_invoker = (methodOop) f1_value;
   assert(signature_invoker != NULL && signature_invoker->is_method() && signature_invoker->is_method_handle_invoke(),
          "correct result from LinkResolver::resolve_invokedynamic");
 
--- a/hotspot/src/share/vm/ci/ciMethod.hpp	Mon May 02 09:38:22 2011 -0700
+++ b/hotspot/src/share/vm/ci/ciMethod.hpp	Wed Jul 05 17:43:05 2017 +0200
@@ -127,7 +127,24 @@
   ciSignature* signature() const                 { return _signature; }
   ciType*      return_type() const               { return _signature->return_type(); }
   int          arg_size_no_receiver() const      { return _signature->size(); }
-  int          arg_size() const                  { return _signature->size() + (_flags.is_static() ? 0 : 1); }
+  // Can only be used on loaded ciMethods
+  int          arg_size() const                  {
+    check_is_loaded();
+    return _signature->size() + (_flags.is_static() ? 0 : 1);
+  }
+  // Report the number of elements on stack when invoking this method.
+  // This is different than the regular arg_size because invokdynamic
+  // has an implicit receiver.
+  int invoke_arg_size(Bytecodes::Code code) const {
+    int arg_size = _signature->size();
+    // Add a receiver argument, maybe:
+    if (code != Bytecodes::_invokestatic &&
+        code != Bytecodes::_invokedynamic) {
+      arg_size++;
+    }
+    return arg_size;
+  }
+
 
   // Method code and related information.
   address code()                                 { if (_code == NULL) load_code(); return _code; }
@@ -276,9 +293,9 @@
   void print_short_name(outputStream* st = tty);
 
   methodOop get_method_handle_target() {
-    klassOop receiver_limit_oop = NULL;
-    int flags = 0;
-    return MethodHandles::decode_method(get_oop(), receiver_limit_oop, flags);
+    KlassHandle receiver_limit; int flags = 0;
+    methodHandle m = MethodHandles::decode_method(get_oop(), receiver_limit, flags);
+    return m();
   }
 };
 
--- a/hotspot/src/share/vm/ci/ciObject.cpp	Mon May 02 09:38:22 2011 -0700
+++ b/hotspot/src/share/vm/ci/ciObject.cpp	Wed Jul 05 17:43:05 2017 +0200
@@ -194,6 +194,16 @@
 // ciObject::should_be_constant()
 bool ciObject::should_be_constant() {
   if (ScavengeRootsInCode >= 2)  return true;  // force everybody to be a constant
+  if (!JavaObjectsInPerm && !is_null_object()) {
+    // We want Strings and Classes to be embeddable by default since
+    // they used to be in the perm world.  Not all Strings used to be
+    // embeddable but there's no easy way to distinguish the interned
+    // from the regulars ones so just treat them all that way.
+    ciEnv* env = CURRENT_ENV;
+    if (klass() == env->String_klass() || klass() == env->Class_klass()) {
+      return true;
+    }
+  }
   return handle() == NULL || !is_scavengable();
 }
 
--- a/hotspot/src/share/vm/classfile/javaClasses.cpp	Mon May 02 09:38:22 2011 -0700
+++ b/hotspot/src/share/vm/classfile/javaClasses.cpp	Wed Jul 05 17:43:05 2017 +0200
@@ -1357,7 +1357,7 @@
 };
 
 
-void java_lang_Throwable::fill_in_stack_trace(Handle throwable, TRAPS) {
+void java_lang_Throwable::fill_in_stack_trace(Handle throwable, methodHandle method, TRAPS) {
   if (!StackTraceInThrowable) return;
   ResourceMark rm(THREAD);
 
@@ -1374,6 +1374,16 @@
   JavaThread* thread = (JavaThread*)THREAD;
   BacktraceBuilder bt(CHECK);
 
+  // If there is no Java frame just return the method that was being called
+  // with bci 0
+  if (!thread->has_last_Java_frame()) {
+    if (max_depth >= 1 && method() != NULL) {
+      bt.push(method(), 0, CHECK);
+      set_backtrace(throwable(), bt.backtrace());
+    }
+    return;
+  }
+
   // Instead of using vframe directly, this version of fill_in_stack_trace
   // basically handles everything by hand. This significantly improved the
   // speed of this method call up to 28.5% on Solaris sparc. 27.1% on Windows.
@@ -1477,7 +1487,7 @@
   set_backtrace(throwable(), bt.backtrace());
 }
 
-void java_lang_Throwable::fill_in_stack_trace(Handle throwable) {
+void java_lang_Throwable::fill_in_stack_trace(Handle throwable, methodHandle method) {
   // No-op if stack trace is disabled
   if (!StackTraceInThrowable) {
     return;
@@ -1491,7 +1501,7 @@
   PRESERVE_EXCEPTION_MARK;
 
   JavaThread* thread = JavaThread::active();
-  fill_in_stack_trace(throwable, thread);
+  fill_in_stack_trace(throwable, method, thread);
   // ignore exceptions thrown during stack trace filling
   CLEAR_PENDING_EXCEPTION;
 }
--- a/hotspot/src/share/vm/classfile/javaClasses.hpp	Mon May 02 09:38:22 2011 -0700
+++ b/hotspot/src/share/vm/classfile/javaClasses.hpp	Wed Jul 05 17:43:05 2017 +0200
@@ -440,8 +440,8 @@
   static void fill_in_stack_trace_of_preallocated_backtrace(Handle throwable);
 
   // Fill in current stack trace, can cause GC
-  static void fill_in_stack_trace(Handle throwable, TRAPS);
-  static void fill_in_stack_trace(Handle throwable);
+  static void fill_in_stack_trace(Handle throwable, methodHandle method, TRAPS);
+  static void fill_in_stack_trace(Handle throwable, methodHandle method = methodHandle());
   // Programmatic access to stack trace
   static oop  get_stack_trace_element(oop throwable, int index, TRAPS);
   static int  get_stack_trace_depth(oop throwable, TRAPS);
--- a/hotspot/src/share/vm/compiler/compileBroker.cpp	Mon May 02 09:38:22 2011 -0700
+++ b/hotspot/src/share/vm/compiler/compileBroker.cpp	Wed Jul 05 17:43:05 2017 +0200
@@ -976,6 +976,15 @@
     return;
   }
 
+  // If the requesting thread is holding the pending list lock
+  // then we just return. We can't risk blocking while holding
+  // the pending list lock or a 3-way deadlock may occur
+  // between the reference handler thread, a GC (instigated
+  // by a compiler thread), and compiled method registration.
+  if (instanceRefKlass::owns_pending_list_lock(JavaThread::current())) {
+    return;
+  }
+
   // Outputs from the following MutexLocker block:
   CompileTask* task     = NULL;
   bool         blocking = false;
@@ -1304,17 +1313,8 @@
 // Should the current thread be blocked until this compilation request
 // has been fulfilled?
 bool CompileBroker::is_compile_blocking(methodHandle method, int osr_bci) {
-  if (!BackgroundCompilation) {
-    Symbol* class_name = method->method_holder()->klass_part()->name();
-    if (class_name->starts_with("java/lang/ref/Reference", 23)) {
-      // The reference handler thread can dead lock with the GC if compilation is blocking,
-      // so we avoid blocking compiles for anything in the java.lang.ref.Reference class,
-      // including inner classes such as ReferenceHandler.
-      return false;
-    }
-    return true;
-  }
-  return false;
+  assert(!instanceRefKlass::owns_pending_list_lock(JavaThread::current()), "possible deadlock");
+  return !BackgroundCompilation;
 }
 
 
--- a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.cpp	Mon May 02 09:38:22 2011 -0700
+++ b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.cpp	Wed Jul 05 17:43:05 2017 +0200
@@ -1963,10 +1963,21 @@
 // Iteration support, mostly delegated from a CMS generation
 
 void CompactibleFreeListSpace::save_marks() {
-  // mark the "end" of the used space at the time of this call;
+  assert(Thread::current()->is_VM_thread(),
+         "Global variable should only be set when single-threaded");
+  // Mark the "end" of the used space at the time of this call;
   // note, however, that promoted objects from this point
   // on are tracked in the _promoInfo below.
   set_saved_mark_word(unallocated_block());
+#ifdef ASSERT
+  // Check the sanity of save_marks() etc.
+  MemRegion ur    = used_region();
+  MemRegion urasm = used_region_at_save_marks();
+  assert(ur.contains(urasm),
+         err_msg(" Error at save_marks(): [" PTR_FORMAT "," PTR_FORMAT ")"
+                 " should contain [" PTR_FORMAT "," PTR_FORMAT ")",
+                 ur.start(), ur.end(), urasm.start(), urasm.end()));
+#endif
   // inform allocator that promotions should be tracked.
   assert(_promoInfo.noPromotions(), "_promoInfo inconsistency");
   _promoInfo.startTrackingPromotions();
--- a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp	Mon May 02 09:38:22 2011 -0700
+++ b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp	Wed Jul 05 17:43:05 2017 +0200
@@ -3189,10 +3189,9 @@
 }
 
 void CMSCollector::setup_cms_unloading_and_verification_state() {
-  const  bool should_verify =    VerifyBeforeGC || VerifyAfterGC || VerifyDuringGC
+  const  bool should_verify =   VerifyBeforeGC || VerifyAfterGC || VerifyDuringGC
                              || VerifyBeforeExit;
-  const  int  rso           =    SharedHeap::SO_Symbols | SharedHeap::SO_Strings
-                             |   SharedHeap::SO_CodeCache;
+  const  int  rso           =   SharedHeap::SO_Strings | SharedHeap::SO_CodeCache;
 
   if (should_unload_classes()) {   // Should unload classes this cycle
     remove_root_scanning_option(rso);  // Shrink the root set appropriately
--- a/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp	Mon May 02 09:38:22 2011 -0700
+++ b/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp	Wed Jul 05 17:43:05 2017 +0200
@@ -1161,6 +1161,7 @@
     TraceTime t(system_gc ? "Full GC (System.gc())" : "Full GC",
                 PrintGC, true, gclog_or_tty);
 
+    TraceCollectorStats tcs(g1mm()->full_collection_counters());
     TraceMemoryManagerStats tms(true /* fullGC */);
 
     double start = os::elapsedTime();
@@ -1339,6 +1340,7 @@
   if (PrintHeapAtGC) {
     Universe::print_heap_after_gc();
   }
+  g1mm()->update_counters();
 
   return true;
 }
@@ -1971,6 +1973,10 @@
 
   init_mutator_alloc_region();
 
+  // Do create of the monitoring and management support so that
+  // values in the heap have been properly initialized.
+  _g1mm = new G1MonitoringSupport(this, &_g1_storage);
+
   return JNI_OK;
 }
 
@@ -2113,6 +2119,28 @@
      (cause == GCCause::_java_lang_system_gc && ExplicitGCInvokesConcurrent));
 }
 
+#ifndef PRODUCT
+void G1CollectedHeap::allocate_dummy_regions() {
+  // Let's fill up most of the region
+  size_t word_size = HeapRegion::GrainWords - 1024;
+  // And as a result the region we'll allocate will be humongous.
+  guarantee(isHumongous(word_size), "sanity");
+
+  for (uintx i = 0; i < G1DummyRegionsPerGC; ++i) {
+    // Let's use the existing mechanism for the allocation
+    HeapWord* dummy_obj = humongous_obj_allocate(word_size);
+    if (dummy_obj != NULL) {
+      MemRegion mr(dummy_obj, word_size);
+      CollectedHeap::fill_with_object(mr);
+    } else {
+      // If we can't allocate once, we probably cannot allocate
+      // again. Let's get out of the loop.
+      break;
+    }
+  }
+}
+#endif // !PRODUCT
+
 void G1CollectedHeap::increment_full_collections_completed(bool concurrent) {
   MonitorLockerEx x(FullGCCount_lock, Mutex::_no_safepoint_check_flag);
 
@@ -2777,17 +2805,26 @@
                              bool silent,
                              bool use_prev_marking) {
   if (SafepointSynchronize::is_at_safepoint() || ! UseTLAB) {
-    if (!silent) { gclog_or_tty->print("roots "); }
+    if (!silent) { gclog_or_tty->print("Roots (excluding permgen) "); }
     VerifyRootsClosure rootsCl(use_prev_marking);
     CodeBlobToOopClosure blobsCl(&rootsCl, /*do_marking=*/ false);
-    process_strong_roots(true,  // activate StrongRootsScope
-                         false,
-                         SharedHeap::SO_AllClasses,
+    // We apply the relevant closures to all the oops in the
+    // system dictionary, the string table and the code cache.
+    const int so = SharedHeap::SO_AllClasses | SharedHeap::SO_Strings | SharedHeap::SO_CodeCache;
+    process_strong_roots(true,      // activate StrongRootsScope
+                         true,      // we set "collecting perm gen" to true,
+                                    // so we don't reset the dirty cards in the perm gen.
+                         SharedHeap::ScanningOption(so),  // roots scanning options
                          &rootsCl,
                          &blobsCl,
                          &rootsCl);
+    // Since we used "collecting_perm_gen" == true above, we will not have
+    // checked the refs from perm into the G1-collected heap. We check those
+    // references explicitly below. Whether the relevant cards are dirty
+    // is checked further below in the rem set verification.
+    if (!silent) { gclog_or_tty->print("Permgen roots "); }
+    perm_gen()->oop_iterate(&rootsCl);
     bool failures = rootsCl.failures();
-    rem_set()->invalidate(perm_gen()->used_region(), false);
     if (!silent) { gclog_or_tty->print("HeapRegionSets "); }
     verify_region_sets();
     if (!silent) { gclog_or_tty->print("HeapRegions "); }
@@ -3164,6 +3201,7 @@
     TraceCPUTime tcpu(PrintGCDetails, true, gclog_or_tty);
     TraceTime t(verbose_str, PrintGC && !PrintGCDetails, true, gclog_or_tty);
 
+    TraceCollectorStats tcs(g1mm()->incremental_collection_counters());
     TraceMemoryManagerStats tms(false /* fullGC */);
 
     // If the secondary_free_list is not empty, append it to the
@@ -3338,6 +3376,8 @@
         doConcurrentMark();
       }
 
+      allocate_dummy_regions();
+
 #if YOUNG_LIST_VERBOSE
       gclog_or_tty->print_cr("\nEnd of the pause.\nYoung_list:");
       _young_list->print();
@@ -3401,6 +3441,8 @@
   if (PrintHeapAtGC) {
     Universe::print_heap_after_gc();
   }
+  g1mm()->update_counters();
+
   if (G1SummarizeRSetStats &&
       (G1SummarizeRSetStatsPeriod > 0) &&
       (total_collections() % G1SummarizeRSetStatsPeriod == 0)) {
@@ -5314,6 +5356,7 @@
     if (new_alloc_region != NULL) {
       g1_policy()->update_region_num(true /* next_is_young */);
       set_region_short_lived_locked(new_alloc_region);
+      g1mm()->update_eden_counters();
       return new_alloc_region;
     }
   }
--- a/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.hpp	Mon May 02 09:38:22 2011 -0700
+++ b/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.hpp	Wed Jul 05 17:43:05 2017 +0200
@@ -28,7 +28,9 @@
 #include "gc_implementation/g1/concurrentMark.hpp"
 #include "gc_implementation/g1/g1AllocRegion.hpp"
 #include "gc_implementation/g1/g1RemSet.hpp"
+#include "gc_implementation/g1/g1MonitoringSupport.hpp"
 #include "gc_implementation/g1/heapRegionSets.hpp"
+#include "gc_implementation/shared/hSpaceCounters.hpp"
 #include "gc_implementation/parNew/parGCAllocBuffer.hpp"
 #include "memory/barrierSet.hpp"
 #include "memory/memRegion.hpp"
@@ -57,6 +59,7 @@
 class ConcurrentMark;
 class ConcurrentMarkThread;
 class ConcurrentG1Refine;
+class GenerationCounters;
 
 typedef OverflowTaskQueue<StarTask>         RefToScanQueue;
 typedef GenericTaskQueueSet<RefToScanQueue> RefToScanQueueSet;
@@ -236,6 +239,9 @@
   // current collection.
   HeapRegion* _gc_alloc_region_list;
 
+  // Helper for monitoring and management support.
+  G1MonitoringSupport* _g1mm;
+
   // Determines PLAB size for a particular allocation purpose.
   static size_t desired_plab_sz(GCAllocPurpose purpose);
 
@@ -298,6 +304,14 @@
   // started is maintained in _total_full_collections in CollectedHeap.
   volatile unsigned int _full_collections_completed;
 
+  // This is a non-product method that is helpful for testing. It is
+  // called at the end of a GC and artificially expands the heap by
+  // allocating a number of dead regions. This way we can induce very
+  // frequent marking cycles and stress the cleanup / concurrent
+  // cleanup code more (as all the regions that will be allocated by
+  // this method will be found dead by the marking cycle).
+  void allocate_dummy_regions() PRODUCT_RETURN;
+
   // These are macros so that, if the assert fires, we get the correct
   // line number, file, etc.
 
@@ -542,6 +556,9 @@
   HeapWord* expand_and_allocate(size_t word_size);
 
 public:
+
+  G1MonitoringSupport* g1mm() { return _g1mm; }
+
   // Expand the garbage-first heap by at least the given size (in bytes!).
   // Returns true if the heap was expanded by the requested amount;
   // false otherwise.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/src/share/vm/gc_implementation/g1/g1MonitoringSupport.cpp	Wed Jul 05 17:43:05 2017 +0200
@@ -0,0 +1,178 @@
+/*
+ * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ *
+ */
+
+#include "precompiled.hpp"
+#include "gc_implementation/g1/g1MonitoringSupport.hpp"
+#include "gc_implementation/g1/g1CollectedHeap.inline.hpp"
+#include "gc_implementation/g1/g1CollectorPolicy.hpp"
+
+G1MonitoringSupport::G1MonitoringSupport(G1CollectedHeap* g1h,
+                                         VirtualSpace* g1_storage_addr) :
+  _g1h(g1h),
+  _incremental_collection_counters(NULL),
+  _full_collection_counters(NULL),
+  _non_young_collection_counters(NULL),
+  _old_space_counters(NULL),
+  _young_collection_counters(NULL),
+  _eden_counters(NULL),
+  _from_counters(NULL),
+  _to_counters(NULL),
+  _g1_storage_addr(g1_storage_addr)
+{
+  // Counters for GC collections
+  //
+  //  name "collector.0".  In a generational collector this would be the
+  // young generation collection.
+  _incremental_collection_counters =
+    new CollectorCounters("G1 incremental collections", 0);
+  //   name "collector.1".  In a generational collector this would be the
+  // old generation collection.
+  _full_collection_counters =
+    new CollectorCounters("G1 stop-the-world full collections", 1);
+
+  // timer sampling for all counters supporting sampling only update the
+  // used value.  See the take_sample() method.  G1 requires both used and
+  // capacity updated so sampling is not currently used.  It might
+  // be sufficient to update all counters in take_sample() even though
+  // take_sample() only returns "used".  When sampling was used, there
+  // were some anomolous values emitted which may have been the consequence
+  // of not updating all values simultaneously (i.e., see the calculation done
+  // in eden_space_used(), is it possbile that the values used to
+  // calculate either eden_used or survivor_used are being updated by
+  // the collector when the sample is being done?).
+  const bool sampled = false;
+
+  // "Generation" and "Space" counters.
+  //
+  //  name "generation.1" This is logically the old generation in
+  // generational GC terms.  The "1, 1" parameters are for
+  // the n-th generation (=1) with 1 space.
+  // Counters are created from minCapacity, maxCapacity, and capacity
+  _non_young_collection_counters =
+    new GenerationCounters("whole heap", 1, 1, _g1_storage_addr);
+
+  //  name  "generation.1.space.0"
+  // Counters are created from maxCapacity, capacity, initCapacity,
+  // and used.
+  _old_space_counters = new HSpaceCounters("space", 0,
+    _g1h->max_capacity(), _g1h->capacity(), _non_young_collection_counters);
+
+  //   Young collection set
+  //  name "generation.0".  This is logically the young generation.
+  //  The "0, 3" are paremeters for the n-th genertaion (=0) with 3 spaces.
+  // See  _non_young_collection_counters for additional counters
+  _young_collection_counters = new GenerationCounters("young", 0, 3, NULL);
+
+  // Replace "max_heap_byte_size() with maximum young gen size for
+  // g1Collectedheap
+  //  name "generation.0.space.0"
+  // See _old_space_counters for additional counters
+  _eden_counters = new HSpaceCounters("eden", 0,
+    _g1h->max_capacity(), eden_space_committed(),
+    _young_collection_counters);
+
+  //  name "generation.0.space.1"
+  // See _old_space_counters for additional counters
+  // Set the arguments to indicate that this survivor space is not used.
+  _from_counters = new HSpaceCounters("s0", 1, (long) 0, (long) 0,
+    _young_collection_counters);
+
+  //  name "generation.0.space.2"
+  // See _old_space_counters for additional counters
+  _to_counters = new HSpaceCounters("s1", 2,
+    _g1h->max_capacity(),
+    survivor_space_committed(),
+    _young_collection_counters);
+}
+
+size_t G1MonitoringSupport::overall_committed() {
+  return g1h()->capacity();
+}
+
+size_t G1MonitoringSupport::overall_used() {
+  return g1h()->used_unlocked();
+}
+
+size_t G1MonitoringSupport::eden_space_committed() {
+  return MAX2(eden_space_used(), (size_t) HeapRegion::GrainBytes);
+}
+
+size_t G1MonitoringSupport::eden_space_used() {
+  size_t young_list_length = g1h()->young_list()->length();
+  size_t eden_used = young_list_length * HeapRegion::GrainBytes;
+  size_t survivor_used = survivor_space_used();
+  eden_used = subtract_up_to_zero(eden_used, survivor_used);
+  return eden_used;
+}
+
+size_t G1MonitoringSupport::survivor_space_committed() {
+  return MAX2(survivor_space_used(),
+              (size_t) HeapRegion::GrainBytes);
+}
+
+size_t G1MonitoringSupport::survivor_space_used() {
+  size_t survivor_num = g1h()->g1_policy()->recorded_survivor_regions();
+  size_t survivor_used = survivor_num * HeapRegion::GrainBytes;
+  return survivor_used;
+}
+
+size_t G1MonitoringSupport::old_space_committed() {
+  size_t committed = overall_committed();
+  size_t eden_committed = eden_space_committed();
+  size_t survivor_committed = survivor_space_committed();
+  committed = subtract_up_to_zero(committed, eden_committed);
+  committed = subtract_up_to_zero(committed, survivor_committed);
+  committed = MAX2(committed, (size_t) HeapRegion::GrainBytes);
+  return committed;
+}
+
+// See the comment near the top of g1MonitoringSupport.hpp for
+// an explanation of these calculations for "used" and "capacity".
+size_t G1MonitoringSupport::old_space_used() {
+  size_t used = overall_used();
+  size_t eden_used = eden_space_used();
+  size_t survivor_used = survivor_space_used();
+  used = subtract_up_to_zero(used, eden_used);
+  used = subtract_up_to_zero(used, survivor_used);
+  return used;
+}
+
+void G1MonitoringSupport::update_counters() {
+  if (UsePerfData) {
+    eden_counters()->update_capacity(eden_space_committed());
+    eden_counters()->update_used(eden_space_used());
+    to_counters()->update_capacity(survivor_space_committed());
+    to_counters()->update_used(survivor_space_used());
+    old_space_counters()->update_capacity(old_space_committed());
+    old_space_counters()->update_used(old_space_used());
+    non_young_collection_counters()->update_all();
+  }
+}
+
+void G1MonitoringSupport::update_eden_counters() {
+  if (UsePerfData) {
+    eden_counters()->update_capacity(eden_space_committed());
+    eden_counters()->update_used(eden_space_used());
+  }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/src/share/vm/gc_implementation/g1/g1MonitoringSupport.hpp	Wed Jul 05 17:43:05 2017 +0200
@@ -0,0 +1,203 @@
+/*
+ * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ *
+ */
+
+#ifndef SHARE_VM_GC_IMPLEMENTATION_G1_G1MONITORINGSUPPORT_HPP
+#define SHARE_VM_GC_IMPLEMENTATION_G1_G1MONITORINGSUPPORT_HPP
+
+#include "gc_implementation/shared/hSpaceCounters.hpp"
+
+class G1CollectedHeap;
+class G1SpaceMonitoringSupport;
+
+// Class for monitoring logical spaces in G1.
+// G1 defines a set of regions as a young
+// collection (analogous to a young generation).
+// The young collection is a logical generation
+// with no fixed chunk (see space.hpp) reflecting
+// the address space for the generation.  In addition
+// to the young collection there is its complement
+// the non-young collection that is simply the regions
+// not in the young collection.  The non-young collection
+// is treated here as a logical old generation only
+// because the monitoring tools expect a generational
+// heap.  The monitoring tools expect that a Space
+// (see space.hpp) exists that describe the
+// address space of young collection and non-young
+// collection and such a view is provided here.
+//
+// This class provides interfaces to access
+// the value of variables for the young collection
+// that include the "capacity" and "used" of the
+// young collection along with constant values
+// for the minimum and maximum capacities for
+// the logical spaces.  Similarly for the non-young
+// collection.
+//
+// Also provided are counters for G1 concurrent collections
+// and stop-the-world full heap collecitons.
+//
+// Below is a description of how "used" and "capactiy"
+// (or committed) is calculated for the logical spaces.
+//
+// 1) The used space calculation for a pool is not necessarily
+// independent of the others. We can easily get from G1 the overall
+// used space in the entire heap, the number of regions in the young
+// generation (includes both eden and survivors), and the number of
+// survivor regions. So, from that we calculate:
+//
+//  survivor_used = survivor_num * region_size
+//  eden_used     = young_region_num * region_size - survivor_used
+//  old_gen_used  = overall_used - eden_used - survivor_used
+//
+// Note that survivor_used and eden_used are upper bounds. To get the
+// actual value we would have to iterate over the regions and add up
+// ->used(). But that'd be expensive. So, we'll accept some lack of
+// accuracy for those two. But, we have to be careful when calculating
+// old_gen_used, in case we subtract from overall_used more then the
+// actual number and our result goes negative.
+//
+// 2) Calculating the used space is straightforward, as described
+// above. However, how do we calculate the committed space, given that
+// we allocate space for the eden, survivor, and old gen out of the
+// same pool of regions? One way to do this is to use the used value
+// as also the committed value for the eden and survivor spaces and
+// then calculate the old gen committed space as follows:
+//
+//  old_gen_committed = overall_committed - eden_committed - survivor_committed
+//
+// Maybe a better way to do that would be to calculate used for eden
+// and survivor as a sum of ->used() over their regions and then
+// calculate committed as region_num * region_size (i.e., what we use
+// to calculate the used space now). This is something to consider
+// in the future.
+//
+// 3) Another decision that is again not straightforward is what is
+// the max size that each memory pool can grow to. One way to do this
+// would be to use the committed size for the max for the eden and
+// survivors and calculate the old gen max as follows (basically, it's
+// a similar pattern to what we use for the committed space, as
+// described above):
+//
+//  old_gen_max = overall_max - eden_max - survivor_max
+//
+// Unfortunately, the above makes the max of each pool fluctuate over
+// time and, even though this is allowed according to the spec, it
+// broke several assumptions in the M&M framework (there were cases
+// where used would reach a value greater than max). So, for max we
+// use -1, which means "undefined" according to the spec.
+//
+// 4) Now, there is a very subtle issue with all the above. The
+// framework will call get_memory_usage() on the three pools
+// asynchronously. As a result, each call might get a different value
+// for, say, survivor_num which will yield inconsistent values for
+// eden_used, survivor_used, and old_gen_used (as survivor_num is used
+// in the calculation of all three). This would normally be
+// ok. However, it's possible that this might cause the sum of
+// eden_used, survivor_used, and old_gen_used to go over the max heap
+// size and this seems to sometimes cause JConsole (and maybe other
+// clients) to get confused. There's not a really an easy / clean
+// solution to this problem, due to the asynchrounous nature of the
+// framework.
+
+class G1MonitoringSupport : public CHeapObj {
+  G1CollectedHeap* _g1h;
+  VirtualSpace* _g1_storage_addr;
+
+  // jstat performance counters
+  //  incremental collections both fully and partially young
+  CollectorCounters*   _incremental_collection_counters;
+  //  full stop-the-world collections
+  CollectorCounters*   _full_collection_counters;
+  //  young collection set counters.  The _eden_counters,
+  // _from_counters, and _to_counters are associated with
+  // this "generational" counter.
+  GenerationCounters*  _young_collection_counters;
+  //  non-young collection set counters. The _old_space_counters
+  // below are associated with this "generational" counter.
+  GenerationCounters*  _non_young_collection_counters;
+  // Counters for the capacity and used for
+  //   the whole heap
+  HSpaceCounters*      _old_space_counters;
+  //   the young collection
+  HSpaceCounters*      _eden_counters;
+  //   the survivor collection (only one, _to_counters, is actively used)
+  HSpaceCounters*      _from_counters;
+  HSpaceCounters*      _to_counters;
+
+  // It returns x - y if x > y, 0 otherwise.
+  // As described in the comment above, some of the inputs to the
+  // calculations we have to do are obtained concurrently and hence
+  // may be inconsistent with each other. So, this provides a
+  // defensive way of performing the subtraction and avoids the value
+  // going negative (which would mean a very large result, given that
+  // the parameter are size_t).
+  static size_t subtract_up_to_zero(size_t x, size_t y) {
+    if (x > y) {
+      return x - y;
+    } else {
+      return 0;
+    }
+  }
+
+ public:
+  G1MonitoringSupport(G1CollectedHeap* g1h, VirtualSpace* g1_storage_addr);
+
+  G1CollectedHeap* g1h() { return _g1h; }
+  VirtualSpace* g1_storage_addr() { return _g1_storage_addr; }
+
+  // Performance Counter accessors
+  void update_counters();
+  void update_eden_counters();
+
+  CollectorCounters* incremental_collection_counters() {
+    return _incremental_collection_counters;
+  }
+  CollectorCounters* full_collection_counters() {
+    return _full_collection_counters;
+  }
+  GenerationCounters* non_young_collection_counters() {
+    return _non_young_collection_counters;
+  }
+  HSpaceCounters*      old_space_counters() { return _old_space_counters; }
+  HSpaceCounters*      eden_counters() { return _eden_counters; }
+  HSpaceCounters*      from_counters() { return _from_counters; }
+  HSpaceCounters*      to_counters() { return _to_counters; }
+
+  // Monitoring support used by
+  //   MemoryService
+  //   jstat counters
+  size_t overall_committed();
+  size_t overall_used();
+
+  size_t eden_space_committed();
+  size_t eden_space_used();
+
+  size_t survivor_space_committed();
+  size_t survivor_space_used();
+
+  size_t old_space_committed();
+  size_t old_space_used();
+};
+
+#endif // SHARE_VM_GC_IMPLEMENTATION_G1_G1MONITORINGSUPPORT_HPP
--- a/hotspot/src/share/vm/gc_implementation/g1/g1_globals.hpp	Mon May 02 09:38:22 2011 -0700
+++ b/hotspot/src/share/vm/gc_implementation/g1/g1_globals.hpp	Wed Jul 05 17:43:05 2017 +0200
@@ -300,6 +300,11 @@
   develop(uintx, G1StressConcRegionFreeingDelayMillis, 0,                   \
           "Artificial delay during concurrent region freeing")              \
                                                                             \
+  develop(uintx, G1DummyRegionsPerGC, 0,                                    \
+          "The number of dummy regions G1 will allocate at the end of "     \
+          "each evacuation pause in order to artificially fill up the "     \
+          "heap and stress the marking implementation.")                    \
+                                                                            \
   develop(bool, ReduceInitialCardMarksForG1, false,                         \
           "When ReduceInitialCardMarks is true, this flag setting "         \
           " controls whether G1 allows the RICM optimization")              \
--- a/hotspot/src/share/vm/gc_implementation/parNew/parCardTableModRefBS.cpp	Mon May 02 09:38:22 2011 -0700
+++ b/hotspot/src/share/vm/gc_implementation/parNew/parCardTableModRefBS.cpp	Wed Jul 05 17:43:05 2017 +0200
@@ -33,44 +33,43 @@
 #include "runtime/mutexLocker.hpp"
 #include "runtime/virtualspace.hpp"
 
-void CardTableModRefBS::par_non_clean_card_iterate_work(Space* sp, MemRegion mr,
-                                                        DirtyCardToOopClosure* dcto_cl,
-                                                        MemRegionClosure* cl,
-                                                        int n_threads) {
-  if (n_threads > 0) {
-    assert((n_threads == 1 && ParallelGCThreads == 0) ||
-           n_threads <= (int)ParallelGCThreads,
-           "# worker threads != # requested!");
-    // Make sure the LNC array is valid for the space.
-    jbyte**   lowest_non_clean;
-    uintptr_t lowest_non_clean_base_chunk_index;
-    size_t    lowest_non_clean_chunk_size;
-    get_LNC_array_for_space(sp, lowest_non_clean,
-                            lowest_non_clean_base_chunk_index,
-                            lowest_non_clean_chunk_size);
+void CardTableModRefBS::non_clean_card_iterate_parallel_work(Space* sp, MemRegion mr,
+                                                             DirtyCardToOopClosure* dcto_cl,
+                                                             ClearNoncleanCardWrapper* cl,
+                                                             int n_threads) {
+  assert(n_threads > 0, "Error: expected n_threads > 0");
+  assert((n_threads == 1 && ParallelGCThreads == 0) ||
+         n_threads <= (int)ParallelGCThreads,
+         "# worker threads != # requested!");
+  // Make sure the LNC array is valid for the space.
+  jbyte**   lowest_non_clean;
+  uintptr_t lowest_non_clean_base_chunk_index;
+  size_t    lowest_non_clean_chunk_size;
+  get_LNC_array_for_space(sp, lowest_non_clean,
+                          lowest_non_clean_base_chunk_index,
+                          lowest_non_clean_chunk_size);
 
-    int n_strides = n_threads * StridesPerThread;
-    SequentialSubTasksDone* pst = sp->par_seq_tasks();
-    pst->set_n_threads(n_threads);
-    pst->set_n_tasks(n_strides);
+  int n_strides = n_threads * StridesPerThread;
+  SequentialSubTasksDone* pst = sp->par_seq_tasks();
+  pst->set_n_threads(n_threads);
+  pst->set_n_tasks(n_strides);
 
-    int stride = 0;
-    while (!pst->is_task_claimed(/* reference */ stride)) {
-      process_stride(sp, mr, stride, n_strides, dcto_cl, cl,
-                     lowest_non_clean,
-                     lowest_non_clean_base_chunk_index,
-                     lowest_non_clean_chunk_size);
-    }
-    if (pst->all_tasks_completed()) {
-      // Clear lowest_non_clean array for next time.
-      intptr_t first_chunk_index = addr_to_chunk_index(mr.start());
-      uintptr_t last_chunk_index  = addr_to_chunk_index(mr.last());
-      for (uintptr_t ch = first_chunk_index; ch <= last_chunk_index; ch++) {
-        intptr_t ind = ch - lowest_non_clean_base_chunk_index;
-        assert(0 <= ind && ind < (intptr_t)lowest_non_clean_chunk_size,
-               "Bounds error");
-        lowest_non_clean[ind] = NULL;
-      }
+  int stride = 0;
+  while (!pst->is_task_claimed(/* reference */ stride)) {
+    process_stride(sp, mr, stride, n_strides, dcto_cl, cl,
+                   lowest_non_clean,
+                   lowest_non_clean_base_chunk_index,
+                   lowest_non_clean_chunk_size);
+  }
+  if (pst->all_tasks_completed()) {
+    // Clear lowest_non_clean array for next time.
+    intptr_t first_chunk_index = addr_to_chunk_index(mr.start());
+    uintptr_t last_chunk_index  = addr_to_chunk_index(mr.last());
+    for (uintptr_t ch = first_chunk_index; ch <= last_chunk_index; ch++) {
+      intptr_t ind = ch - lowest_non_clean_base_chunk_index;
+      assert(0 <= ind && ind < (intptr_t)lowest_non_clean_chunk_size,
+             "Bounds error");
+      lowest_non_clean[ind] = NULL;
     }
   }
 }
@@ -81,7 +80,7 @@
                MemRegion used,
                jint stride, int n_strides,
                DirtyCardToOopClosure* dcto_cl,
-               MemRegionClosure* cl,
+               ClearNoncleanCardWrapper* cl,
                jbyte** lowest_non_clean,
                uintptr_t lowest_non_clean_base_chunk_index,
                size_t    lowest_non_clean_chunk_size) {
@@ -127,7 +126,11 @@
                              lowest_non_clean_base_chunk_index,
                              lowest_non_clean_chunk_size);
 
-    non_clean_card_iterate_work(chunk_mr, cl);
+    // We do not call the non_clean_card_iterate_serial() version because
+    // we want to clear the cards, and the ClearNoncleanCardWrapper closure
+    // itself does the work of finding contiguous dirty ranges of cards to
+    // process (and clear).
+    cl->do_MemRegion(chunk_mr);
 
     // Find the next chunk of the stride.
     chunk_card_start += CardsPerStrideChunk * n_strides;
--- a/hotspot/src/share/vm/gc_implementation/shared/generationCounters.cpp	Mon May 02 09:38:22 2011 -0700
+++ b/hotspot/src/share/vm/gc_implementation/shared/generationCounters.cpp	Wed Jul 05 17:43:05 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 2011, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -51,15 +51,18 @@
 
     cname = PerfDataManager::counter_name(_name_space, "minCapacity");
     PerfDataManager::create_constant(SUN_GC, cname, PerfData::U_Bytes,
+                                     _virtual_space == NULL ? 0 :
                                      _virtual_space->committed_size(), CHECK);
 
     cname = PerfDataManager::counter_name(_name_space, "maxCapacity");
     PerfDataManager::create_constant(SUN_GC, cname, PerfData::U_Bytes,
+                                     _virtual_space == NULL ? 0 :
                                      _virtual_space->reserved_size(), CHECK);
 
     cname = PerfDataManager::counter_name(_name_space, "capacity");
     _current_size = PerfDataManager::create_variable(SUN_GC, cname,
-                                      PerfData::U_Bytes,
+                                     PerfData::U_Bytes,
+                                     _virtual_space == NULL ? 0 :
                                      _virtual_space->committed_size(), CHECK);
   }
 }
--- a/hotspot/src/share/vm/gc_implementation/shared/generationCounters.hpp	Mon May 02 09:38:22 2011 -0700
+++ b/hotspot/src/share/vm/gc_implementation/shared/generationCounters.hpp	Wed Jul 05 17:43:05 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 2011, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -61,10 +61,11 @@
   }
 
   virtual void update_all() {
-    _current_size->set_value(_virtual_space->committed_size());
+    _current_size->set_value(_virtual_space == NULL ? 0 :
+                             _virtual_space->committed_size());
   }
 
   const char* name_space() const        { return _name_space; }
+
 };
-
 #endif // SHARE_VM_GC_IMPLEMENTATION_SHARED_GENERATIONCOUNTERS_HPP
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/src/share/vm/gc_implementation/shared/hSpaceCounters.cpp	Wed Jul 05 17:43:05 2017 +0200
@@ -0,0 +1,66 @@
+/*
+ * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ *
+ */
+
+#include "precompiled.hpp"
+#include "gc_implementation/shared/hSpaceCounters.hpp"
+#include "memory/generation.hpp"
+#include "memory/resourceArea.hpp"
+
+HSpaceCounters::HSpaceCounters(const char* name,
+                               int ordinal,
+                               size_t max_size,
+                               size_t initial_capacity,
+                               GenerationCounters* gc) {
+
+  if (UsePerfData) {
+    EXCEPTION_MARK;
+    ResourceMark rm;
+
+    const char* cns =
+      PerfDataManager::name_space(gc->name_space(), "space", ordinal);
+
+    _name_space = NEW_C_HEAP_ARRAY(char, strlen(cns)+1);
+    strcpy(_name_space, cns);
+
+    const char* cname = PerfDataManager::counter_name(_name_space, "name");
+    PerfDataManager::create_string_constant(SUN_GC, cname, name, CHECK);
+
+    cname = PerfDataManager::counter_name(_name_space, "maxCapacity");
+    PerfDataManager::create_constant(SUN_GC, cname, PerfData::U_Bytes,
+                                     (jlong)max_size, CHECK);
+
+    cname = PerfDataManager::counter_name(_name_space, "capacity");
+    _capacity = PerfDataManager::create_variable(SUN_GC, cname,
+                                                 PerfData::U_Bytes,
+                                                 initial_capacity, CHECK);
+
+    cname = PerfDataManager::counter_name(_name_space, "used");
+    _used = PerfDataManager::create_variable(SUN_GC, cname, PerfData::U_Bytes,
+                                             (jlong) 0, CHECK);
+
+    cname = PerfDataManager::counter_name(_name_space, "initCapacity");
+    PerfDataManager::create_constant(SUN_GC, cname, PerfData::U_Bytes,
+                                     initial_capacity, CHECK);
+  }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/src/share/vm/gc_implementation/shared/hSpaceCounters.hpp	Wed Jul 05 17:43:05 2017 +0200
@@ -0,0 +1,87 @@
+/*
+ * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ *
+ */
+
+#ifndef SHARE_VM_GC_IMPLEMENTATION_SHARED_HSPACECOUNTERS_HPP
+#define SHARE_VM_GC_IMPLEMENTATION_SHARED_HSPACECOUNTERS_HPP
+
+#ifndef SERIALGC
+#include "gc_implementation/shared/generationCounters.hpp"
+#include "memory/generation.hpp"
+#include "runtime/perfData.hpp"
+#endif
+
+// A HSpaceCounter is a holder class for performance counters
+// that track a collections (logical spaces) in a heap;
+
+class HeapSpaceUsedHelper;
+class G1SpaceMonitoringSupport;
+
+class HSpaceCounters: public CHeapObj {
+  friend class VMStructs;
+
+ private:
+  PerfVariable*        _capacity;
+  PerfVariable*        _used;
+
+  // Constant PerfData types don't need to retain a reference.
+  // However, it's a good idea to document them here.
+
+  char*             _name_space;
+
+ public:
+
+  HSpaceCounters(const char* name, int ordinal, size_t max_size,
+                 size_t initial_capacity, GenerationCounters* gc);
+
+  ~HSpaceCounters() {
+    if (_name_space != NULL) FREE_C_HEAP_ARRAY(char, _name_space);
+  }
+
+  inline void update_capacity(size_t v) {
+    _capacity->set_value(v);
+  }
+
+  inline void update_used(size_t v) {
+    _used->set_value(v);
+  }
+
+  debug_only(
+    // for security reasons, we do not allow arbitrary reads from
+    // the counters as they may live in shared memory.
+    jlong used() {
+      return _used->get_value();
+    }
+    jlong capacity() {
+      return _used->get_value();
+    }
+  )
+
+  inline void update_all(size_t capacity, size_t used) {
+    update_capacity(capacity);
+    update_used(used);
+  }
+
+  const char* name_space() const        { return _name_space; }
+};
+#endif // SHARE_VM_GC_IMPLEMENTATION_SHARED_HSPACECOUNTERS_HPP
--- a/hotspot/src/share/vm/memory/cardTableModRefBS.cpp	Mon May 02 09:38:22 2011 -0700
+++ b/hotspot/src/share/vm/memory/cardTableModRefBS.cpp	Wed Jul 05 17:43:05 2017 +0200
@@ -456,31 +456,35 @@
 }
 
 
-void CardTableModRefBS::non_clean_card_iterate(Space* sp,
-                                               MemRegion mr,
-                                               DirtyCardToOopClosure* dcto_cl,
-                                               MemRegionClosure* cl) {
+void CardTableModRefBS::non_clean_card_iterate_possibly_parallel(Space* sp,
+                                                                 MemRegion mr,
+                                                                 DirtyCardToOopClosure* dcto_cl,
+                                                                 ClearNoncleanCardWrapper* cl) {
   if (!mr.is_empty()) {
     int n_threads = SharedHeap::heap()->n_par_threads();
     if (n_threads > 0) {
 #ifndef SERIALGC
-      par_non_clean_card_iterate_work(sp, mr, dcto_cl, cl, n_threads);
+      non_clean_card_iterate_parallel_work(sp, mr, dcto_cl, cl, n_threads);
 #else  // SERIALGC
       fatal("Parallel gc not supported here.");
 #endif // SERIALGC
     } else {
-      non_clean_card_iterate_work(mr, cl);
+      // We do not call the non_clean_card_iterate_serial() version below because
+      // we want to clear the cards (which non_clean_card_iterate_serial() does not
+      // do for us), and the ClearNoncleanCardWrapper closure itself does the work
+      // of finding contiguous dirty ranges of cards to process (and clear).
+      cl->do_MemRegion(mr);
     }
   }
 }
 
-// NOTE: For this to work correctly, it is important that
-// we look for non-clean cards below (so as to catch those
-// marked precleaned), rather than look explicitly for dirty
-// cards (and miss those marked precleaned). In that sense,
-// the name precleaned is currently somewhat of a misnomer.
-void CardTableModRefBS::non_clean_card_iterate_work(MemRegion mr,
-                                                    MemRegionClosure* cl) {
+// The iterator itself is not MT-aware, but
+// MT-aware callers and closures can use this to
+// accomplish dirty card iteration in parallel. The
+// iterator itself does not clear the dirty cards, or
+// change their values in any manner.
+void CardTableModRefBS::non_clean_card_iterate_serial(MemRegion mr,
+                                                      MemRegionClosure* cl) {
   for (int i = 0; i < _cur_covered_regions; i++) {
     MemRegion mri = mr.intersection(_covered[i]);
     if (mri.word_size() > 0) {
@@ -661,7 +665,7 @@
 
 void CardTableModRefBS::verify_clean_region(MemRegion mr) {
   GuaranteeNotModClosure blk(this);
-  non_clean_card_iterate_work(mr, &blk);
+  non_clean_card_iterate_serial(mr, &blk);
 }
 
 // To verify a MemRegion is entirely dirty this closure is passed to
--- a/hotspot/src/share/vm/memory/cardTableModRefBS.hpp	Mon May 02 09:38:22 2011 -0700
+++ b/hotspot/src/share/vm/memory/cardTableModRefBS.hpp	Wed Jul 05 17:43:05 2017 +0200
@@ -44,6 +44,7 @@
 class Generation;
 class OopsInGenClosure;
 class DirtyCardToOopClosure;
+class ClearNoncleanCardWrapper;
 
 class CardTableModRefBS: public ModRefBarrierSet {
   // Some classes get to look at some private stuff.
@@ -165,22 +166,28 @@
 
   // Iterate over the portion of the card-table which covers the given
   // region mr in the given space and apply cl to any dirty sub-regions
-  // of mr. cl and dcto_cl must either be the same closure or cl must
-  // wrap dcto_cl. Both are required - neither may be NULL. Also, dcto_cl
-  // may be modified. Note that this function will operate in a parallel
-  // mode if worker threads are available.
-  void non_clean_card_iterate(Space* sp, MemRegion mr,
-                              DirtyCardToOopClosure* dcto_cl,
-                              MemRegionClosure* cl);
+  // of mr. Dirty cards are _not_ cleared by the iterator method itself,
+  // but closures may arrange to do so on their own should they so wish.
+  void non_clean_card_iterate_serial(MemRegion mr, MemRegionClosure* cl);
 
-  // Utility function used to implement the other versions below.
-  void non_clean_card_iterate_work(MemRegion mr, MemRegionClosure* cl);
+  // A variant of the above that will operate in a parallel mode if
+  // worker threads are available, and clear the dirty cards as it
+  // processes them.
+  // ClearNoncleanCardWrapper cl must wrap the DirtyCardToOopClosure dcto_cl,
+  // which may itself be modified by the method.
+  void non_clean_card_iterate_possibly_parallel(Space* sp, MemRegion mr,
+                                                DirtyCardToOopClosure* dcto_cl,
+                                                ClearNoncleanCardWrapper* cl);
 
-  void par_non_clean_card_iterate_work(Space* sp, MemRegion mr,
-                                       DirtyCardToOopClosure* dcto_cl,
-                                       MemRegionClosure* cl,
-                                       int n_threads);
+ private:
+  // Work method used to implement non_clean_card_iterate_possibly_parallel()
+  // above in the parallel case.
+  void non_clean_card_iterate_parallel_work(Space* sp, MemRegion mr,
+                                            DirtyCardToOopClosure* dcto_cl,
+                                            ClearNoncleanCardWrapper* cl,
+                                            int n_threads);
 
+ protected:
   // Dirty the bytes corresponding to "mr" (not all of which must be
   // covered.)
   void dirty_MemRegion(MemRegion mr);
@@ -237,7 +244,7 @@
                       MemRegion used,
                       jint stride, int n_strides,
                       DirtyCardToOopClosure* dcto_cl,
-                      MemRegionClosure* cl,
+                      ClearNoncleanCardWrapper* cl,
                       jbyte** lowest_non_clean,
                       uintptr_t lowest_non_clean_base_chunk_index,
                       size_t lowest_non_clean_chunk_size);
@@ -409,14 +416,14 @@
   // marking, where a dirty card may cause scanning, and summarization
   // marking, of objects that extend onto subsequent cards.)
   void mod_card_iterate(MemRegionClosure* cl) {
-    non_clean_card_iterate_work(_whole_heap, cl);
+    non_clean_card_iterate_serial(_whole_heap, cl);
   }
 
   // Like the "mod_cards_iterate" above, except only invokes the closure
   // for cards within the MemRegion "mr" (which is required to be
   // card-aligned and sized.)
   void mod_card_iterate(MemRegion mr, MemRegionClosure* cl) {
-    non_clean_card_iterate_work(mr, cl);
+    non_clean_card_iterate_serial(mr, cl);
   }
 
   static uintx ct_max_alignment_constraint();
@@ -493,4 +500,5 @@
   void set_CTRS(CardTableRS* rs) { _rs = rs; }
 };
 
+
 #endif // SHARE_VM_MEMORY_CARDTABLEMODREFBS_HPP
--- a/hotspot/src/share/vm/memory/cardTableRS.cpp	Mon May 02 09:38:22 2011 -0700
+++ b/hotspot/src/share/vm/memory/cardTableRS.cpp	Wed Jul 05 17:43:05 2017 +0200
@@ -105,107 +105,111 @@
   g->younger_refs_iterate(blk);
 }
 
-class ClearNoncleanCardWrapper: public MemRegionClosure {
-  MemRegionClosure* _dirty_card_closure;
-  CardTableRS* _ct;
-  bool _is_par;
-private:
-  // Clears the given card, return true if the corresponding card should be
-  // processed.
-  bool clear_card(jbyte* entry) {
-    if (_is_par) {
-      while (true) {
-        // In the parallel case, we may have to do this several times.
-        jbyte entry_val = *entry;
-        assert(entry_val != CardTableRS::clean_card_val(),
-               "We shouldn't be looking at clean cards, and this should "
-               "be the only place they get cleaned.");
-        if (CardTableRS::card_is_dirty_wrt_gen_iter(entry_val)
-            || _ct->is_prev_youngergen_card_val(entry_val)) {
-          jbyte res =
-            Atomic::cmpxchg(CardTableRS::clean_card_val(), entry, entry_val);
-          if (res == entry_val) {
-            break;
-          } else {
-            assert(res == CardTableRS::cur_youngergen_and_prev_nonclean_card,
-                   "The CAS above should only fail if another thread did "
-                   "a GC write barrier.");
-          }
-        } else if (entry_val ==
-                   CardTableRS::cur_youngergen_and_prev_nonclean_card) {
-          // Parallelism shouldn't matter in this case.  Only the thread
-          // assigned to scan the card should change this value.
-          *entry = _ct->cur_youngergen_card_val();
-          break;
-        } else {
-          assert(entry_val == _ct->cur_youngergen_card_val(),
-                 "Should be the only possibility.");
-          // In this case, the card was clean before, and become
-          // cur_youngergen only because of processing of a promoted object.
-          // We don't have to look at the card.
-          return false;
-        }
+inline bool ClearNoncleanCardWrapper::clear_card(jbyte* entry) {
+  if (_is_par) {
+    return clear_card_parallel(entry);
+  } else {
+    return clear_card_serial(entry);
+  }
+}
+
+inline bool ClearNoncleanCardWrapper::clear_card_parallel(jbyte* entry) {
+  while (true) {
+    // In the parallel case, we may have to do this several times.
+    jbyte entry_val = *entry;
+    assert(entry_val != CardTableRS::clean_card_val(),
+           "We shouldn't be looking at clean cards, and this should "
+           "be the only place they get cleaned.");
+    if (CardTableRS::card_is_dirty_wrt_gen_iter(entry_val)
+        || _ct->is_prev_youngergen_card_val(entry_val)) {
+      jbyte res =
+        Atomic::cmpxchg(CardTableRS::clean_card_val(), entry, entry_val);
+      if (res == entry_val) {
+        break;
+      } else {
+        assert(res == CardTableRS::cur_youngergen_and_prev_nonclean_card,
+               "The CAS above should only fail if another thread did "
+               "a GC write barrier.");
       }
-      return true;
+    } else if (entry_val ==
+               CardTableRS::cur_youngergen_and_prev_nonclean_card) {
+      // Parallelism shouldn't matter in this case.  Only the thread
+      // assigned to scan the card should change this value.
+      *entry = _ct->cur_youngergen_card_val();
+      break;
     } else {
-      jbyte entry_val = *entry;
-      assert(entry_val != CardTableRS::clean_card_val(),
-             "We shouldn't be looking at clean cards, and this should "
-             "be the only place they get cleaned.");
-      assert(entry_val != CardTableRS::cur_youngergen_and_prev_nonclean_card,
-             "This should be possible in the sequential case.");
-      *entry = CardTableRS::clean_card_val();
-      return true;
+      assert(entry_val == _ct->cur_youngergen_card_val(),
+             "Should be the only possibility.");
+      // In this case, the card was clean before, and become
+      // cur_youngergen only because of processing of a promoted object.
+      // We don't have to look at the card.
+      return false;
     }
   }
+  return true;
+}
 
-public:
-  ClearNoncleanCardWrapper(MemRegionClosure* dirty_card_closure,
-                           CardTableRS* ct) :
+
+inline bool ClearNoncleanCardWrapper::clear_card_serial(jbyte* entry) {
+  jbyte entry_val = *entry;
+  assert(entry_val != CardTableRS::clean_card_val(),
+         "We shouldn't be looking at clean cards, and this should "
+         "be the only place they get cleaned.");
+  assert(entry_val != CardTableRS::cur_youngergen_and_prev_nonclean_card,
+         "This should be possible in the sequential case.");
+  *entry = CardTableRS::clean_card_val();
+  return true;
+}
+
+ClearNoncleanCardWrapper::ClearNoncleanCardWrapper(
+  MemRegionClosure* dirty_card_closure, CardTableRS* ct) :
     _dirty_card_closure(dirty_card_closure), _ct(ct) {
     _is_par = (SharedHeap::heap()->n_par_threads() > 0);
+}
+
+void ClearNoncleanCardWrapper::do_MemRegion(MemRegion mr) {
+  assert(mr.word_size() > 0, "Error");
+  assert(_ct->is_aligned(mr.start()), "mr.start() should be card aligned");
+  // mr.end() may not necessarily be card aligned.
+  jbyte* cur_entry = _ct->byte_for(mr.last());
+  const jbyte* limit = _ct->byte_for(mr.start());
+  HeapWord* end_of_non_clean = mr.end();
+  HeapWord* start_of_non_clean = end_of_non_clean;
+  while (cur_entry >= limit) {
+    HeapWord* cur_hw = _ct->addr_for(cur_entry);
+    if ((*cur_entry != CardTableRS::clean_card_val()) && clear_card(cur_entry)) {
+      // Continue the dirty range by opening the
+      // dirty window one card to the left.
+      start_of_non_clean = cur_hw;
+    } else {
+      // We hit a "clean" card; process any non-empty
+      // "dirty" range accumulated so far.
+      if (start_of_non_clean < end_of_non_clean) {
+        const MemRegion mrd(start_of_non_clean, end_of_non_clean);
+        _dirty_card_closure->do_MemRegion(mrd);
+      }
+      // Reset the dirty window, while continuing to look
+      // for the next dirty card that will start a
+      // new dirty window.
+      end_of_non_clean = cur_hw;
+      start_of_non_clean = cur_hw;
+    }
+    // Note that "cur_entry" leads "start_of_non_clean" in
+    // its leftward excursion after this point
+    // in the loop and, when we hit the left end of "mr",
+    // will point off of the left end of the card-table
+    // for "mr".
+    cur_entry--;
   }
-  void do_MemRegion(MemRegion mr) {
-    // We start at the high end of "mr", walking backwards
-    // while accumulating a contiguous dirty range of cards in
-    // [start_of_non_clean, end_of_non_clean) which we then
-    // process en masse.
-    HeapWord* end_of_non_clean = mr.end();
-    HeapWord* start_of_non_clean = end_of_non_clean;
-    jbyte*       entry = _ct->byte_for(mr.last());
-    const jbyte* first_entry = _ct->byte_for(mr.start());
-    while (entry >= first_entry) {
-      HeapWord* cur = _ct->addr_for(entry);
-      if (!clear_card(entry)) {
-        // We hit a clean card; process any non-empty
-        // dirty range accumulated so far.
-        if (start_of_non_clean < end_of_non_clean) {
-          MemRegion mr2(start_of_non_clean, end_of_non_clean);
-          _dirty_card_closure->do_MemRegion(mr2);
-        }
-        // Reset the dirty window while continuing to
-        // look for the next dirty window to process.
-        end_of_non_clean = cur;
-        start_of_non_clean = end_of_non_clean;
-      }
-      // Open the left end of the window one card to the left.
-      start_of_non_clean = cur;
-      // Note that "entry" leads "start_of_non_clean" in
-      // its leftward excursion after this point
-      // in the loop and, when we hit the left end of "mr",
-      // will point off of the left end of the card-table
-      // for "mr".
-      entry--;
-    }
-    // If the first card of "mr" was dirty, we will have
-    // been left with a dirty window, co-initial with "mr",
-    // which we now process.
-    if (start_of_non_clean < end_of_non_clean) {
-      MemRegion mr2(start_of_non_clean, end_of_non_clean);
-      _dirty_card_closure->do_MemRegion(mr2);
-    }
+  // If the first card of "mr" was dirty, we will have
+  // been left with a dirty window, co-initial with "mr",
+  // which we now process.
+  if (start_of_non_clean < end_of_non_clean) {
+    const MemRegion mrd(start_of_non_clean, end_of_non_clean);
+    _dirty_card_closure->do_MemRegion(mrd);
   }
-};
+}
+
 // clean (by dirty->clean before) ==> cur_younger_gen
 // dirty                          ==> cur_youngergen_and_prev_nonclean_card
 // precleaned                     ==> cur_youngergen_and_prev_nonclean_card
@@ -246,8 +250,35 @@
                                                    cl->gen_boundary());
   ClearNoncleanCardWrapper clear_cl(dcto_cl, this);
 
-  _ct_bs->non_clean_card_iterate(sp, sp->used_region_at_save_marks(),
-                                dcto_cl, &clear_cl);
+  const MemRegion urasm = sp->used_region_at_save_marks();
+#ifdef ASSERT
+  // Convert the assertion check to a warning if we are running
+  // CMS+ParNew until related bug is fixed.
+  MemRegion ur    = sp->used_region();
+  assert(ur.contains(urasm) || (UseConcMarkSweepGC && UseParNewGC),
+         err_msg("Did you forget to call save_marks()? "
+                 "[" PTR_FORMAT ", " PTR_FORMAT ") is not contained in "
+                 "[" PTR_FORMAT ", " PTR_FORMAT ")",
+                 urasm.start(), urasm.end(), ur.start(), ur.end()));
+  // In the case of CMS+ParNew, issue a warning
+  if (!ur.contains(urasm)) {
+    assert(UseConcMarkSweepGC && UseParNewGC, "Tautology: see assert above");
+    warning("CMS+ParNew: Did you forget to call save_marks()? "
+            "[" PTR_FORMAT ", " PTR_FORMAT ") is not contained in "
+            "[" PTR_FORMAT ", " PTR_FORMAT ")",
+             urasm.start(), urasm.end(), ur.start(), ur.end());
+    MemRegion ur2 = sp->used_region();
+    MemRegion urasm2 = sp->used_region_at_save_marks();
+    if (!ur.equals(ur2)) {
+      warning("CMS+ParNew: Flickering used_region()!!");
+    }
+    if (!urasm.equals(urasm2)) {
+      warning("CMS+ParNew: Flickering used_region_at_save_marks()!!");
+    }
+  }
+#endif
+  _ct_bs->non_clean_card_iterate_possibly_parallel(sp, urasm,
+                                                   dcto_cl, &clear_cl);
 }
 
 void CardTableRS::clear_into_younger(Generation* gen, bool clear_perm) {
--- a/hotspot/src/share/vm/memory/cardTableRS.hpp	Mon May 02 09:38:22 2011 -0700
+++ b/hotspot/src/share/vm/memory/cardTableRS.hpp	Wed Jul 05 17:43:05 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2001, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2011, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -166,4 +166,21 @@
 
 };
 
+class ClearNoncleanCardWrapper: public MemRegionClosure {
+  MemRegionClosure* _dirty_card_closure;
+  CardTableRS* _ct;
+  bool _is_par;
+private:
+  // Clears the given card, return true if the corresponding card should be
+  // processed.
+  inline bool clear_card(jbyte* entry);
+  // Work methods called by the clear_card()
+  inline bool clear_card_serial(jbyte* entry);
+  inline bool clear_card_parallel(jbyte* entry);
+
+public:
+  ClearNoncleanCardWrapper(MemRegionClosure* dirty_card_closure, CardTableRS* ct);
+  void do_MemRegion(MemRegion mr);
+};
+
 #endif // SHARE_VM_MEMORY_CARDTABLERS_HPP
--- a/hotspot/src/share/vm/memory/genCollectedHeap.hpp	Mon May 02 09:38:22 2011 -0700
+++ b/hotspot/src/share/vm/memory/genCollectedHeap.hpp	Wed Jul 05 17:43:05 2017 +0200
@@ -427,13 +427,13 @@
   // explicitly mark reachable objects in younger generations, to avoid
   // excess storage retention.)  If "collecting_perm_gen" is false, then
   // roots that may only contain references to permGen objects are not
-  // scanned. The "so" argument determines which of the roots
+  // scanned; instead, the older_gens closure is applied to all outgoing
+  // references in the perm gen.  The "so" argument determines which of the roots
   // the closure is applied to:
   // "SO_None" does none;
   // "SO_AllClasses" applies the closure to all entries in the SystemDictionary;
   // "SO_SystemClasses" to all the "system" classes and loaders;
-  // "SO_Symbols_and_Strings" applies the closure to all entries in
-  // SymbolsTable and StringTable.
+  // "SO_Strings" applies the closure to all entries in the StringTable.
   void gen_process_strong_roots(int level,
                                 bool younger_gens_as_roots,
                                 // The remaining arguments are in an order
--- a/hotspot/src/share/vm/memory/genOopClosures.hpp	Mon May 02 09:38:22 2011 -0700
+++ b/hotspot/src/share/vm/memory/genOopClosures.hpp	Wed Jul 05 17:43:05 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2001, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2011, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -175,7 +175,7 @@
  protected:
   template <class T> inline void do_oop_work(T* p) {
     oop obj = oopDesc::load_decode_heap_oop(p);
-    guarantee(obj->is_oop_or_null(), "invalid oop");
+    guarantee(obj->is_oop_or_null(), err_msg("invalid oop: " INTPTR_FORMAT, obj));
   }
  public:
   virtual void do_oop(oop* p);
--- a/hotspot/src/share/vm/memory/sharedHeap.cpp	Mon May 02 09:38:22 2011 -0700
+++ b/hotspot/src/share/vm/memory/sharedHeap.cpp	Wed Jul 05 17:43:05 2017 +0200
@@ -46,7 +46,6 @@
   SH_PS_Management_oops_do,
   SH_PS_SystemDictionary_oops_do,
   SH_PS_jvmti_oops_do,
-  SH_PS_SymbolTable_oops_do,
   SH_PS_StringTable_oops_do,
   SH_PS_CodeCache_oops_do,
   // Leave this one last.
@@ -161,13 +160,9 @@
   if (!_process_strong_tasks->is_task_claimed(SH_PS_SystemDictionary_oops_do)) {
     if (so & SO_AllClasses) {
       SystemDictionary::oops_do(roots);
-    } else
-      if (so & SO_SystemClasses) {
-        SystemDictionary::always_strong_oops_do(roots);
-      }
-  }
-
-  if (!_process_strong_tasks->is_task_claimed(SH_PS_SymbolTable_oops_do)) {
+    } else if (so & SO_SystemClasses) {
+      SystemDictionary::always_strong_oops_do(roots);
+    }
   }
 
   if (!_process_strong_tasks->is_task_claimed(SH_PS_StringTable_oops_do)) {
--- a/hotspot/src/share/vm/memory/sharedHeap.hpp	Mon May 02 09:38:22 2011 -0700
+++ b/hotspot/src/share/vm/memory/sharedHeap.hpp	Wed Jul 05 17:43:05 2017 +0200
@@ -192,9 +192,8 @@
     SO_None                = 0x0,
     SO_AllClasses          = 0x1,
     SO_SystemClasses       = 0x2,
-    SO_Symbols             = 0x4,
-    SO_Strings             = 0x8,
-    SO_CodeCache           = 0x10
+    SO_Strings             = 0x4,
+    SO_CodeCache           = 0x8
   };
 
   FlexibleWorkGang* workers() const { return _workers; }
@@ -208,14 +207,13 @@
 
   // Invoke the "do_oop" method the closure "roots" on all root locations.
   // If "collecting_perm_gen" is false, then roots that may only contain
-  // references to permGen objects are not scanned.  If true, the
-  // "perm_gen" closure is applied to all older-to-younger refs in the
+  // references to permGen objects are not scanned; instead, in that case,
+  // the "perm_blk" closure is applied to all outgoing refs in the
   // permanent generation.  The "so" argument determines which of roots
   // the closure is applied to:
   // "SO_None" does none;
   // "SO_AllClasses" applies the closure to all entries in the SystemDictionary;
   // "SO_SystemClasses" to all the "system" classes and loaders;
-  // "SO_Symbols" applies the closure to all entries in SymbolsTable;
   // "SO_Strings" applies the closure to all entries in StringTable;
   // "SO_CodeCache" applies the closure to all elements of the CodeCache.
   void process_strong_roots(bool activate_scope,
--- a/hotspot/src/share/vm/oops/cpCacheOop.cpp	Mon May 02 09:38:22 2011 -0700
+++ b/hotspot/src/share/vm/oops/cpCacheOop.cpp	Wed Jul 05 17:43:05 2017 +0200
@@ -104,7 +104,7 @@
   void* result = Atomic::cmpxchg_ptr(f1, f1_addr, NULL);
   bool success = (result == NULL);
   if (success) {
-    update_barrier_set(f1_addr, f1);
+    update_barrier_set((void*) f1_addr, f1);
   }
 }
 
@@ -275,21 +275,23 @@
   return (int) bsm_cache_index;
 }
 
-void ConstantPoolCacheEntry::set_dynamic_call(Handle call_site,
-                                              methodHandle signature_invoker) {
+void ConstantPoolCacheEntry::set_dynamic_call(Handle call_site, methodHandle signature_invoker) {
   assert(is_secondary_entry(), "");
+  // NOTE: it's important that all other values are set before f1 is
+  // set since some users short circuit on f1 being set
+  // (i.e. non-null) and that may result in uninitialized values for
+  // other racing threads (e.g. flags).
   int param_size = signature_invoker->size_of_parameters();
   assert(param_size >= 1, "method argument size must include MH.this");
-  param_size -= 1;              // do not count MH.this; it is not stacked for invokedynamic
-  if (Atomic::cmpxchg_ptr(call_site(), &_f1, NULL) == NULL) {
-    // racing threads might be trying to install their own favorites
-    set_f1(call_site());
-  }
+  param_size -= 1;  // do not count MH.this; it is not stacked for invokedynamic
   bool is_final = true;
   assert(signature_invoker->is_final_method(), "is_final");
-  set_flags(as_flags(as_TosState(signature_invoker->result_type()), is_final, false, false, false, true) | param_size);
+  int flags = as_flags(as_TosState(signature_invoker->result_type()), is_final, false, false, false, true) | param_size;
+  assert(_flags == 0 || _flags == flags, "flags should be the same");
+  set_flags(flags);
   // do not do set_bytecode on a secondary CP cache entry
   //set_bytecode_1(Bytecodes::_invokedynamic);
+  set_f1_if_null_atomic(call_site());  // This must be the last one to set (see NOTE above)!
 }
 
 
--- a/hotspot/src/share/vm/opto/escape.cpp	Mon May 02 09:38:22 2011 -0700
+++ b/hotspot/src/share/vm/opto/escape.cpp	Wed Jul 05 17:43:05 2017 +0200
@@ -1437,7 +1437,10 @@
 
   // Update the memory inputs of MemNodes with the value we computed
   // in Phase 2 and move stores memory users to corresponding memory slices.
-#ifdef ASSERT
+
+  // Disable memory split verification code until the fix for 6984348.
+  // Currently it produces false negative results since it does not cover all cases.
+#if 0 // ifdef ASSERT
   visited.Reset();
   Node_Stack old_mems(arena, _compile->unique() >> 2);
 #endif
@@ -1447,7 +1450,7 @@
       Node *n = ptnode_adr(i)->_node;
       assert(n != NULL, "sanity");
       if (n->is_Mem()) {
-#ifdef ASSERT
+#if 0 // ifdef ASSERT
         Node* old_mem = n->in(MemNode::Memory);
         if (!visited.test_set(old_mem->_idx)) {
           old_mems.push(old_mem, old_mem->outcnt());
@@ -1469,13 +1472,13 @@
       }
     }
   }
-#ifdef ASSERT
+#if 0 // ifdef ASSERT
   // Verify that memory was split correctly
   while (old_mems.is_nonempty()) {
     Node* old_mem = old_mems.node();
     uint  old_cnt = old_mems.index();
     old_mems.pop();
-    assert(old_cnt = old_mem->outcnt(), "old mem could be lost");
+    assert(old_cnt == old_mem->outcnt(), "old mem could be lost");
   }
 #endif
 }
--- a/hotspot/src/share/vm/opto/graphKit.cpp	Mon May 02 09:38:22 2011 -0700
+++ b/hotspot/src/share/vm/opto/graphKit.cpp	Wed Jul 05 17:43:05 2017 +0200
@@ -1033,14 +1033,10 @@
       iter.reset_to_bci(bci());
       iter.next();
       ciMethod* method = iter.get_method(ignore);
-      inputs = method->arg_size_no_receiver();
-      // Add a receiver argument, maybe:
-      if (code != Bytecodes::_invokestatic &&
-          code != Bytecodes::_invokedynamic)
-        inputs += 1;
       // (Do not use ciMethod::arg_size(), because
       // it might be an unloaded method, which doesn't
       // know whether it is static or not.)
+      inputs = method->invoke_arg_size(code);
       int size = method->return_type()->size();
       depth = size - inputs;
     }
@@ -2957,8 +2953,7 @@
 
 //---------------------------set_output_for_allocation-------------------------
 Node* GraphKit::set_output_for_allocation(AllocateNode* alloc,
-                                          const TypeOopPtr* oop_type,
-                                          bool raw_mem_only) {
+                                          const TypeOopPtr* oop_type) {
   int rawidx = Compile::AliasIdxRaw;
   alloc->set_req( TypeFunc::FramePtr, frameptr() );
   add_safepoint_edges(alloc);
@@ -2982,7 +2977,7 @@
                                                  rawoop)->as_Initialize();
   assert(alloc->initialization() == init,  "2-way macro link must work");
   assert(init ->allocation()     == alloc, "2-way macro link must work");
-  if (ReduceFieldZeroing && !raw_mem_only) {
+  {
     // Extract memory strands which may participate in the new object's
     // initialization, and source them from the new InitializeNode.
     // This will allow us to observe initializations when they occur,
@@ -3043,11 +3038,9 @@
 // the type to a constant.
 // The optional arguments are for specialized use by intrinsics:
 //  - If 'extra_slow_test' if not null is an extra condition for the slow-path.
-//  - If 'raw_mem_only', do not cast the result to an oop.
 //  - If 'return_size_val', report the the total object size to the caller.
 Node* GraphKit::new_instance(Node* klass_node,
                              Node* extra_slow_test,
-                             bool raw_mem_only, // affect only raw memory
                              Node* *return_size_val) {
   // Compute size in doublewords
   // The size is always an integral number of doublewords, represented
@@ -3118,7 +3111,7 @@
                      size, klass_node,
                      initial_slow_test);
 
-  return set_output_for_allocation(alloc, oop_type, raw_mem_only);
+  return set_output_for_allocation(alloc, oop_type);
 }
 
 //-------------------------------new_array-------------------------------------
@@ -3128,7 +3121,6 @@
 Node* GraphKit::new_array(Node* klass_node,     // array klass (maybe variable)
                           Node* length,         // number of array elements
                           int   nargs,          // number of arguments to push back for uncommon trap
-                          bool raw_mem_only,    // affect only raw memory
                           Node* *return_size_val) {
   jint  layout_con = Klass::_lh_neutral_value;
   Node* layout_val = get_layout_helper(klass_node, layout_con);
@@ -3273,7 +3265,7 @@
     ary_type = ary_type->is_aryptr()->cast_to_size(length_type);
   }
 
-  Node* javaoop = set_output_for_allocation(alloc, ary_type, raw_mem_only);
+  Node* javaoop = set_output_for_allocation(alloc, ary_type);
 
   // Cast length on remaining path to be as narrow as possible
   if (map()->find_edge(length) >= 0) {
@@ -3462,9 +3454,22 @@
 
   // Get the alias_index for raw card-mark memory
   int adr_type = Compile::AliasIdxRaw;
+  Node*   zero = __ ConI(0); // Dirty card value
+  BasicType bt = T_BYTE;
+
+  if (UseCondCardMark) {
+    // The classic GC reference write barrier is typically implemented
+    // as a store into the global card mark table.  Unfortunately
+    // unconditional stores can result in false sharing and excessive
+    // coherence traffic as well as false transactional aborts.
+    // UseCondCardMark enables MP "polite" conditional card mark
+    // stores.  In theory we could relax the load from ctrl() to
+    // no_ctrl, but that doesn't buy much latitude.
+    Node* card_val = __ load( __ ctrl(), card_adr, TypeInt::BYTE, bt, adr_type);
+    __ if_then(card_val, BoolTest::ne, zero);
+  }
+
   // Smash zero into card
-  Node*   zero = __ ConI(0);
-  BasicType bt = T_BYTE;
   if( !UseConcMarkSweepGC ) {
     __ store(__ ctrl(), card_adr, zero, bt, adr_type);
   } else {
@@ -3472,6 +3477,10 @@
     __ storeCM(__ ctrl(), card_adr, zero, oop_store, adr_idx, bt, adr_type);
   }
 
+  if (UseCondCardMark) {
+    __ end_if();
+  }
+
   // Final sync IdealKit and GraphKit.
   final_sync(ideal);
 }
--- a/hotspot/src/share/vm/opto/graphKit.hpp	Mon May 02 09:38:22 2011 -0700
+++ b/hotspot/src/share/vm/opto/graphKit.hpp	Wed Jul 05 17:43:05 2017 +0200
@@ -773,15 +773,13 @@
 
   // implementation of object creation
   Node* set_output_for_allocation(AllocateNode* alloc,
-                                  const TypeOopPtr* oop_type,
-                                  bool raw_mem_only);
+                                  const TypeOopPtr* oop_type);
   Node* get_layout_helper(Node* klass_node, jint& constant_value);
   Node* new_instance(Node* klass_node,
                      Node* slow_test = NULL,
-                     bool raw_mem_only = false,
                      Node* *return_size_val = NULL);
   Node* new_array(Node* klass_node, Node* count_val, int nargs,
-                  bool raw_mem_only = false, Node* *return_size_val = NULL);
+                  Node* *return_size_val = NULL);
 
   // Handy for making control flow
   IfNode* create_and_map_if(Node* ctrl, Node* tst, float prob, float cnt) {
--- a/hotspot/src/share/vm/opto/library_call.cpp	Mon May 02 09:38:22 2011 -0700
+++ b/hotspot/src/share/vm/opto/library_call.cpp	Wed Jul 05 17:43:05 2017 +0200
@@ -3527,8 +3527,7 @@
       Node* orig_tail = _gvn.transform( new(C, 3) SubINode(orig_length, start) );
       Node* moved = generate_min_max(vmIntrinsics::_min, orig_tail, length);
 
-      const bool raw_mem_only = true;
-      newcopy = new_array(klass_node, length, 0, raw_mem_only);
+      newcopy = new_array(klass_node, length, 0);
 
       // Generate a direct call to the right arraycopy function(s).
       // We know the copy is disjoint but we might not know if the
@@ -4325,8 +4324,6 @@
 
     const TypePtr* raw_adr_type = TypeRawPtr::BOTTOM;
     int raw_adr_idx = Compile::AliasIdxRaw;
-    const bool raw_mem_only = true;
-
 
     Node* array_ctl = generate_array_guard(obj_klass, (RegionNode*)NULL);
     if (array_ctl != NULL) {
@@ -4335,8 +4332,7 @@
       set_control(array_ctl);
       Node* obj_length = load_array_length(obj);
       Node* obj_size  = NULL;
-      Node* alloc_obj = new_array(obj_klass, obj_length, 0,
-                                  raw_mem_only, &obj_size);
+      Node* alloc_obj = new_array(obj_klass, obj_length, 0, &obj_size);
 
       if (!use_ReduceInitialCardMarks()) {
         // If it is an oop array, it requires very special treatment,
@@ -4408,7 +4404,7 @@
       // It's an instance, and it passed the slow-path tests.
       PreserveJVMState pjvms(this);
       Node* obj_size  = NULL;
-      Node* alloc_obj = new_instance(obj_klass, NULL, raw_mem_only, &obj_size);
+      Node* alloc_obj = new_instance(obj_klass, NULL, &obj_size);
 
       copy_to_clone(obj, alloc_obj, obj_size, false, !use_ReduceInitialCardMarks());
 
--- a/hotspot/src/share/vm/opto/loopopts.cpp	Mon May 02 09:38:22 2011 -0700
+++ b/hotspot/src/share/vm/opto/loopopts.cpp	Wed Jul 05 17:43:05 2017 +0200
@@ -2262,6 +2262,9 @@
 //                  stmt1
 //                    |
 //                    v
+//               loop predicate
+//                    |
+//                    v
 //                  stmt2 clone
 //                    |
 //                    v
@@ -2272,9 +2275,6 @@
 //         :  false   true
 //         :  |       |
 //         :  |       v
-//         :  | loop predicate
-//         :  |       |
-//         :  |       v
 //         :  |    newloop<-----+
 //         :  |        |        |
 //         :  |     stmt3 clone |
@@ -2330,7 +2330,6 @@
     }
   }
 
-  Node* entry = head->in(LoopNode::EntryControl);
   int dd = dom_depth(head);
 
   // Step 1: find cut point
@@ -2627,8 +2626,6 @@
 
   // Backedge of the surviving new_head (the clone) is original last_peel
   _igvn.hash_delete(new_head_clone);
-  Node* new_entry = move_loop_predicates(entry, new_head_clone->in(LoopNode::EntryControl));
-  new_head_clone->set_req(LoopNode::EntryControl, new_entry);
   new_head_clone->set_req(LoopNode::LoopBackControl, last_peel);
   _igvn._worklist.push(new_head_clone);
 
--- a/hotspot/src/share/vm/opto/macro.cpp	Mon May 02 09:38:22 2011 -0700
+++ b/hotspot/src/share/vm/opto/macro.cpp	Wed Jul 05 17:43:05 2017 +0200
@@ -221,9 +221,16 @@
     Node *shift = p2x->unique_out();
     Node *addp = shift->unique_out();
     for (DUIterator_Last jmin, j = addp->last_outs(jmin); j >= jmin; --j) {
-      Node *st = addp->last_out(j);
-      assert(st->is_Store(), "store required");
-      _igvn.replace_node(st, st->in(MemNode::Memory));
+      Node *mem = addp->last_out(j);
+      if (UseCondCardMark && mem->is_Load()) {
+        assert(mem->Opcode() == Op_LoadB, "unexpected code shape");
+        // The load is checking if the card has been written so
+        // replace it with zero to fold the test.
+        _igvn.replace_node(mem, intcon(0));
+        continue;
+      }
+      assert(mem->is_Store(), "store required");
+      _igvn.replace_node(mem, mem->in(MemNode::Memory));
     }
   } else {
     // G1 pre/post barriers
--- a/hotspot/src/share/vm/opto/memnode.cpp	Mon May 02 09:38:22 2011 -0700
+++ b/hotspot/src/share/vm/opto/memnode.cpp	Wed Jul 05 17:43:05 2017 +0200
@@ -1259,15 +1259,18 @@
     return NULL; // Wait stable graph
   }
   uint cnt = mem->req();
-  for( uint i = 1; i < cnt; i++ ) {
+  for (uint i = 1; i < cnt; i++) {
+    Node* rc = region->in(i);
+    if (rc == NULL || phase->type(rc) == Type::TOP)
+      return NULL; // Wait stable graph
     Node *in = mem->in(i);
-    if( in == NULL ) {
+    if (in == NULL) {
       return NULL; // Wait stable graph
     }
   }
   // Check for loop invariant.
   if (cnt == 3) {
-    for( uint i = 1; i < cnt; i++ ) {
+    for (uint i = 1; i < cnt; i++) {
       Node *in = mem->in(i);
       Node* m = MemNode::optimize_memory_chain(in, addr_t, phase);
       if (m == mem) {
@@ -1281,38 +1284,37 @@
 
   // Do nothing here if Identity will find a value
   // (to avoid infinite chain of value phis generation).
-  if ( !phase->eqv(this, this->Identity(phase)) )
+  if (!phase->eqv(this, this->Identity(phase)))
     return NULL;
 
   // Skip the split if the region dominates some control edge of the address.
-  if (cnt == 3 && !MemNode::all_controls_dominate(address, region))
+  if (!MemNode::all_controls_dominate(address, region))
     return NULL;
 
   const Type* this_type = this->bottom_type();
   int this_index  = phase->C->get_alias_index(addr_t);
   int this_offset = addr_t->offset();
   int this_iid    = addr_t->is_oopptr()->instance_id();
-  int wins = 0;
   PhaseIterGVN *igvn = phase->is_IterGVN();
   Node *phi = new (igvn->C, region->req()) PhiNode(region, this_type, NULL, this_iid, this_index, this_offset);
-  for( uint i = 1; i < region->req(); i++ ) {
+  for (uint i = 1; i < region->req(); i++) {
     Node *x;
     Node* the_clone = NULL;
-    if( region->in(i) == phase->C->top() ) {
+    if (region->in(i) == phase->C->top()) {
       x = phase->C->top();      // Dead path?  Use a dead data op
     } else {
       x = this->clone();        // Else clone up the data op
       the_clone = x;            // Remember for possible deletion.
       // Alter data node to use pre-phi inputs
-      if( this->in(0) == region ) {
-        x->set_req( 0, region->in(i) );
+      if (this->in(0) == region) {
+        x->set_req(0, region->in(i));
       } else {
-        x->set_req( 0, NULL );
+        x->set_req(0, NULL);
       }
-      for( uint j = 1; j < this->req(); j++ ) {
+      for (uint j = 1; j < this->req(); j++) {
         Node *in = this->in(j);
-        if( in->is_Phi() && in->in(0) == region )
-          x->set_req( j, in->in(i) ); // Use pre-Phi input for the clone
+        if (in->is_Phi() && in->in(0) == region)
+          x->set_req(j, in->in(i)); // Use pre-Phi input for the clone
       }
     }
     // Check for a 'win' on some paths
@@ -1321,12 +1323,11 @@
     bool singleton = t->singleton();
 
     // See comments in PhaseIdealLoop::split_thru_phi().
-    if( singleton && t == Type::TOP ) {
+    if (singleton && t == Type::TOP) {
       singleton &= region->is_Loop() && (i != LoopNode::EntryControl);
     }
 
-    if( singleton ) {
-      wins++;
+    if (singleton) {
       x = igvn->makecon(t);
     } else {
       // We now call Identity to try to simplify the cloned node.
@@ -1340,13 +1341,11 @@
       // igvn->type(x) is set to x->Value() already.
       x->raise_bottom_type(t);
       Node *y = x->Identity(igvn);
-      if( y != x ) {
-        wins++;
+      if (y != x) {
         x = y;
       } else {
         y = igvn->hash_find(x);
-        if( y ) {
-          wins++;
+        if (y) {
           x = y;
         } else {
           // Else x is a new node we are keeping
@@ -1360,13 +1359,9 @@
       igvn->remove_dead_node(the_clone);
     phi->set_req(i, x);
   }
-  if( wins > 0 ) {
-    // Record Phi
-    igvn->register_new_node_with_optimizer(phi);
-    return phi;
-  }
-  igvn->remove_dead_node(phi);
-  return NULL;
+  // Record Phi
+  igvn->register_new_node_with_optimizer(phi);
+  return phi;
 }
 
 //------------------------------Ideal------------------------------------------
@@ -1677,14 +1672,15 @@
   // If we are loading from a freshly-allocated object, produce a zero,
   // if the load is provably beyond the header of the object.
   // (Also allow a variable load from a fresh array to produce zero.)
-  if (ReduceFieldZeroing) {
+  const TypeOopPtr *tinst = tp->isa_oopptr();
+  bool is_instance = (tinst != NULL) && tinst->is_known_instance_field();
+  if (ReduceFieldZeroing || is_instance) {
     Node* value = can_see_stored_value(mem,phase);
     if (value != NULL && value->is_Con())
       return value->bottom_type();
   }
 
-  const TypeOopPtr *tinst = tp->isa_oopptr();
-  if (tinst != NULL && tinst->is_known_instance_field()) {
+  if (is_instance) {
     // If we have an instance type and our memory input is the
     // programs's initial memory state, there is no matching store,
     // so just return a zero of the appropriate type
--- a/hotspot/src/share/vm/opto/stringopts.cpp	Mon May 02 09:38:22 2011 -0700
+++ b/hotspot/src/share/vm/opto/stringopts.cpp	Wed Jul 05 17:43:05 2017 +0200
@@ -1172,16 +1172,16 @@
 
 Node* PhaseStringOpts::copy_string(GraphKit& kit, Node* str, Node* char_array, Node* start) {
   Node* string = str;
-  Node* offset = kit.make_load(NULL,
+  Node* offset = kit.make_load(kit.control(),
                                kit.basic_plus_adr(string, string, java_lang_String::offset_offset_in_bytes()),
                                TypeInt::INT, T_INT, offset_field_idx);
-  Node* count = kit.make_load(NULL,
+  Node* count = kit.make_load(kit.control(),
                               kit.basic_plus_adr(string, string, java_lang_String::count_offset_in_bytes()),
                               TypeInt::INT, T_INT, count_field_idx);
   const TypeAryPtr*  value_type = TypeAryPtr::make(TypePtr::NotNull,
                                                    TypeAry::make(TypeInt::CHAR,TypeInt::POS),
                                                    ciTypeArrayKlass::make(T_CHAR), true, 0);
-  Node* value = kit.make_load(NULL,
+  Node* value = kit.make_load(kit.control(),
                               kit.basic_plus_adr(string, string, java_lang_String::value_offset_in_bytes()),
                               value_type, T_OBJECT, value_field_idx);
 
@@ -1342,7 +1342,7 @@
         }
         //         Node* offset = kit.make_load(NULL, kit.basic_plus_adr(arg, arg, offset_offset),
         //                                      TypeInt::INT, T_INT, offset_field_idx);
-        Node* count = kit.make_load(NULL, kit.basic_plus_adr(arg, arg, java_lang_String::count_offset_in_bytes()),
+        Node* count = kit.make_load(kit.control(), kit.basic_plus_adr(arg, arg, java_lang_String::count_offset_in_bytes()),
                                     TypeInt::INT, T_INT, count_field_idx);
         length = __ AddI(length, count);
         string_sizes->init_req(argi, NULL);
--- a/hotspot/src/share/vm/prims/methodHandleWalk.cpp	Mon May 02 09:38:22 2011 -0700
+++ b/hotspot/src/share/vm/prims/methodHandleWalk.cpp	Wed Jul 05 17:43:05 2017 +0200
@@ -82,10 +82,8 @@
 
 void MethodHandleChain::set_last_method(oop target, TRAPS) {
   _is_last = true;
-  klassOop receiver_limit_oop = NULL;
-  int flags = 0;
-  methodOop m = MethodHandles::decode_method(target, receiver_limit_oop, flags);
-  _last_method = methodHandle(THREAD, m);
+  KlassHandle receiver_limit; int flags = 0;
+  _last_method = MethodHandles::decode_method(target, receiver_limit, flags);
   if ((flags & MethodHandles::_dmf_has_receiver) == 0)
     _last_invoke = Bytecodes::_invokestatic;
   else if ((flags & MethodHandles::_dmf_does_dispatch) == 0)
--- a/hotspot/src/share/vm/prims/methodHandles.cpp	Mon May 02 09:38:22 2011 -0700
+++ b/hotspot/src/share/vm/prims/methodHandles.cpp	Wed Jul 05 17:43:05 2017 +0200
@@ -153,9 +153,9 @@
 // and local, like parse a data structure.  For speed, such methods work on plain
 // oops, not handles.  Trapping methods uniformly operate on handles.
 
-methodOop MethodHandles::decode_vmtarget(oop vmtarget, int vmindex, oop mtype,
-                                         klassOop& receiver_limit_result, int& decode_flags_result) {
-  if (vmtarget == NULL)  return NULL;
+methodHandle MethodHandles::decode_vmtarget(oop vmtarget, int vmindex, oop mtype,
+                                            KlassHandle& receiver_limit_result, int& decode_flags_result) {
+  if (vmtarget == NULL)  return methodHandle();
   assert(methodOopDesc::nonvirtual_vtable_index < 0, "encoding");
   if (vmindex < 0) {
     // this DMH performs no dispatch; it is directly bound to a methodOop
@@ -198,20 +198,20 @@
 // MemberName and DirectMethodHandle have the same linkage to the JVM internals.
 // (MemberName is the non-operational name used for queries and setup.)
 
-methodOop MethodHandles::decode_DirectMethodHandle(oop mh, klassOop& receiver_limit_result, int& decode_flags_result) {
+methodHandle MethodHandles::decode_DirectMethodHandle(oop mh, KlassHandle& receiver_limit_result, int& decode_flags_result) {
   oop vmtarget = java_lang_invoke_DirectMethodHandle::vmtarget(mh);
   int vmindex  = java_lang_invoke_DirectMethodHandle::vmindex(mh);
   oop mtype    = java_lang_invoke_DirectMethodHandle::type(mh);
   return decode_vmtarget(vmtarget, vmindex, mtype, receiver_limit_result, decode_flags_result);
 }
 
-methodOop MethodHandles::decode_BoundMethodHandle(oop mh, klassOop& receiver_limit_result, int& decode_flags_result) {
+methodHandle MethodHandles::decode_BoundMethodHandle(oop mh, KlassHandle& receiver_limit_result, int& decode_flags_result) {
   assert(java_lang_invoke_BoundMethodHandle::is_instance(mh), "");
   assert(mh->klass() != SystemDictionary::AdapterMethodHandle_klass(), "");
   for (oop bmh = mh;;) {
     // Bound MHs can be stacked to bind several arguments.
     oop target = java_lang_invoke_MethodHandle::vmtarget(bmh);
-    if (target == NULL)  return NULL;
+    if (target == NULL)  return methodHandle();
     decode_flags_result |= MethodHandles::_dmf_binds_argument;
     klassOop tk = target->klass();
     if (tk == SystemDictionary::BoundMethodHandle_klass()) {
@@ -236,14 +236,14 @@
   }
 }
 
-methodOop MethodHandles::decode_AdapterMethodHandle(oop mh, klassOop& receiver_limit_result, int& decode_flags_result) {
+methodHandle MethodHandles::decode_AdapterMethodHandle(oop mh, KlassHandle& receiver_limit_result, int& decode_flags_result) {
   assert(mh->klass() == SystemDictionary::AdapterMethodHandle_klass(), "");
   for (oop amh = mh;;) {
     // Adapter MHs can be stacked to convert several arguments.
     int conv_op = adapter_conversion_op(java_lang_invoke_AdapterMethodHandle::conversion(amh));
     decode_flags_result |= (_dmf_adapter_lsb << conv_op) & _DMF_ADAPTER_MASK;
     oop target = java_lang_invoke_MethodHandle::vmtarget(amh);
-    if (target == NULL)  return NULL;
+    if (target == NULL)  return methodHandle();
     klassOop tk = target->klass();
     if (tk == SystemDictionary::AdapterMethodHandle_klass()) {
       amh = target;
@@ -255,8 +255,8 @@
   }
 }
 
-methodOop MethodHandles::decode_MethodHandle(oop mh, klassOop& receiver_limit_result, int& decode_flags_result) {
-  if (mh == NULL)  return NULL;
+methodHandle MethodHandles::decode_MethodHandle(oop mh, KlassHandle& receiver_limit_result, int& decode_flags_result) {
+  if (mh == NULL)  return methodHandle();
   klassOop mhk = mh->klass();
   assert(java_lang_invoke_MethodHandle::is_subclass(mhk), "must be a MethodHandle");
   if (mhk == SystemDictionary::DirectMethodHandle_klass()) {
@@ -270,7 +270,7 @@
     return decode_BoundMethodHandle(mh, receiver_limit_result, decode_flags_result);
   } else {
     assert(false, "cannot parse this MH");
-    return NULL;              // random MH?
+    return methodHandle();  // random MH?
   }
 }
 
@@ -299,9 +299,9 @@
 
 // A trusted party is handing us a cookie to determine a method.
 // Let's boil it down to the method oop they really want.
-methodOop MethodHandles::decode_method(oop x, klassOop& receiver_limit_result, int& decode_flags_result) {
+methodHandle MethodHandles::decode_method(oop x, KlassHandle& receiver_limit_result, int& decode_flags_result) {
   decode_flags_result = 0;
-  receiver_limit_result = NULL;
+  receiver_limit_result = KlassHandle();
   klassOop xk = x->klass();
   if (xk == Universe::methodKlassObj()) {
     return decode_methodOop((methodOop) x, decode_flags_result);
@@ -329,7 +329,7 @@
     assert(!x->is_method(), "already checked");
     assert(!java_lang_invoke_MemberName::is_instance(x), "already checked");
   }
-  return NULL;
+  return methodHandle();
 }
 
 
@@ -389,11 +389,10 @@
     int offset = instanceKlass::cast(k)->offset_from_fields(slot);
     init_MemberName(mname_oop, k, accessFlags_from(mods), offset);
   } else {
-    int decode_flags = 0; klassOop receiver_limit = NULL;
-    methodOop m = MethodHandles::decode_method(target_oop,
-                                               receiver_limit, decode_flags);
+    KlassHandle receiver_limit; int decode_flags = 0;
+    methodHandle m = MethodHandles::decode_method(target_oop, receiver_limit, decode_flags);
     bool do_dispatch = ((decode_flags & MethodHandles::_dmf_does_dispatch) != 0);
-    init_MemberName(mname_oop, m, do_dispatch);
+    init_MemberName(mname_oop, m(), do_dispatch);
   }
 }
 
@@ -423,13 +422,14 @@
 }
 
 
-methodOop MethodHandles::decode_MemberName(oop mname, klassOop& receiver_limit_result, int& decode_flags_result) {
+methodHandle MethodHandles::decode_MemberName(oop mname, KlassHandle& receiver_limit_result, int& decode_flags_result) {
+  methodHandle empty;
   int flags  = java_lang_invoke_MemberName::flags(mname);
-  if ((flags & (IS_METHOD | IS_CONSTRUCTOR)) == 0)  return NULL;  // not invocable
+  if ((flags & (IS_METHOD | IS_CONSTRUCTOR)) == 0)  return empty;  // not invocable
   oop vmtarget = java_lang_invoke_MemberName::vmtarget(mname);
   int vmindex  = java_lang_invoke_MemberName::vmindex(mname);
-  if (vmindex == VM_INDEX_UNINITIALIZED)  return NULL; // not resolved
-  methodOop m = decode_vmtarget(vmtarget, vmindex, NULL, receiver_limit_result, decode_flags_result);
+  if (vmindex == VM_INDEX_UNINITIALIZED)  return empty;  // not resolved
+  methodHandle m = decode_vmtarget(vmtarget, vmindex, NULL, receiver_limit_result, decode_flags_result);
   oop clazz = java_lang_invoke_MemberName::clazz(mname);
   if (clazz != NULL && java_lang_Class::is_instance(clazz)) {
     klassOop klass = java_lang_Class::as_klassOop(clazz);
@@ -439,9 +439,7 @@
 }
 
 // convert the external string or reflective type to an internal signature
-Symbol* MethodHandles::convert_to_signature(oop type_str,
-                                            bool polymorphic,
-                                            TRAPS) {
+Symbol* MethodHandles::convert_to_signature(oop type_str, bool polymorphic, TRAPS) {
   if (java_lang_invoke_MethodType::is_instance(type_str)) {
     return java_lang_invoke_MethodType::as_signature(type_str, polymorphic, CHECK_NULL);
   } else if (java_lang_Class::is_instance(type_str)) {
@@ -474,48 +472,48 @@
 #endif
   if (java_lang_invoke_MemberName::vmindex(mname()) != VM_INDEX_UNINITIALIZED)
     return;  // already resolved
-  oop defc_oop = java_lang_invoke_MemberName::clazz(mname());
-  oop name_str = java_lang_invoke_MemberName::name(mname());
-  oop type_str = java_lang_invoke_MemberName::type(mname());
-  int flags    = java_lang_invoke_MemberName::flags(mname());
+  Handle defc_oop(THREAD, java_lang_invoke_MemberName::clazz(mname()));
+  Handle name_str(THREAD, java_lang_invoke_MemberName::name( mname()));
+  Handle type_str(THREAD, java_lang_invoke_MemberName::type( mname()));
+  int    flags    =       java_lang_invoke_MemberName::flags(mname());
 
-  if (defc_oop == NULL || name_str == NULL || type_str == NULL) {
+  if (defc_oop.is_null() || name_str.is_null() || type_str.is_null()) {
     THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(), "nothing to resolve");
   }
-  klassOop defc_klassOop = java_lang_Class::as_klassOop(defc_oop);
-  defc_oop = NULL;  // safety
-  if (defc_klassOop == NULL)  return;  // a primitive; no resolution possible
-  if (!Klass::cast(defc_klassOop)->oop_is_instance()) {
-    if (!Klass::cast(defc_klassOop)->oop_is_array())  return;
-    defc_klassOop = SystemDictionary::Object_klass();
+
+  instanceKlassHandle defc;
+  {
+    klassOop defc_klassOop = java_lang_Class::as_klassOop(defc_oop());
+    if (defc_klassOop == NULL)  return;  // a primitive; no resolution possible
+    if (!Klass::cast(defc_klassOop)->oop_is_instance()) {
+      if (!Klass::cast(defc_klassOop)->oop_is_array())  return;
+      defc_klassOop = SystemDictionary::Object_klass();
+    }
+    defc = instanceKlassHandle(THREAD, defc_klassOop);
   }
-  instanceKlassHandle defc(THREAD, defc_klassOop);
-  defc_klassOop = NULL;  // safety
   if (defc.is_null()) {
     THROW_MSG(vmSymbols::java_lang_InternalError(), "primitive class");
   }
-  defc->link_class(CHECK);
+  defc->link_class(CHECK);  // possible safepoint
 
   // convert the external string name to an internal symbol
-  TempNewSymbol name = java_lang_String::as_symbol_or_null(name_str);
+  TempNewSymbol name = java_lang_String::as_symbol_or_null(name_str());
   if (name == NULL)  return;  // no such name
-  name_str = NULL;  // safety
 
   Handle polymorphic_method_type;
   bool polymorphic_signature = false;
   if ((flags & ALL_KINDS) == IS_METHOD &&
       (defc() == SystemDictionary::MethodHandle_klass() &&
-       methodOopDesc::is_method_handle_invoke_name(name)))
+       methodOopDesc::is_method_handle_invoke_name(name))) {
     polymorphic_signature = true;
+  }
 
   // convert the external string or reflective type to an internal signature
-  TempNewSymbol type = convert_to_signature(type_str, polymorphic_signature, CHECK);
-  if (java_lang_invoke_MethodType::is_instance(type_str) && polymorphic_signature) {
-    polymorphic_method_type = Handle(THREAD, type_str);  //preserve exactly
+  TempNewSymbol type = convert_to_signature(type_str(), polymorphic_signature, CHECK);
+  if (java_lang_invoke_MethodType::is_instance(type_str()) && polymorphic_signature) {
+    polymorphic_method_type = type_str;  // preserve exactly
   }
-
   if (type == NULL)  return;  // no such signature exists in the VM
-  type_str = NULL; // safety
 
   // Time to do the lookup.
   switch (flags & ALL_KINDS) {
@@ -560,8 +558,8 @@
       java_lang_invoke_MemberName::set_vmtarget(mname(), vmtarget);
       java_lang_invoke_MemberName::set_vmindex(mname(),  vmindex);
       java_lang_invoke_MemberName::set_modifiers(mname(), mods);
-      DEBUG_ONLY(int junk; klassOop junk2);
-      assert(decode_MemberName(mname(), junk2, junk) == result.resolved_method()(),
+      DEBUG_ONLY(KlassHandle junk1; int junk2);
+      assert(decode_MemberName(mname(), junk1, junk2) == result.resolved_method(),
              "properly stored for later decoding");
       return;
     }
@@ -589,8 +587,8 @@
       java_lang_invoke_MemberName::set_vmtarget(mname(), vmtarget);
       java_lang_invoke_MemberName::set_vmindex(mname(),  vmindex);
       java_lang_invoke_MemberName::set_modifiers(mname(), mods);
-      DEBUG_ONLY(int junk; klassOop junk2);
-      assert(decode_MemberName(mname(), junk2, junk) == result.resolved_method()(),
+      DEBUG_ONLY(KlassHandle junk1; int junk2);
+      assert(decode_MemberName(mname(), junk1, junk2) == result.resolved_method(),
              "properly stored for later decoding");
       return;
     }
@@ -677,16 +675,14 @@
   case IS_METHOD:
   case IS_CONSTRUCTOR:
     {
-      klassOop receiver_limit = NULL;
-      int      decode_flags   = 0;
-      methodHandle m(THREAD, decode_vmtarget(vmtarget, vmindex, NULL,
-                                             receiver_limit, decode_flags));
+      KlassHandle receiver_limit; int decode_flags = 0;
+      methodHandle m = decode_vmtarget(vmtarget, vmindex, NULL, receiver_limit, decode_flags);
       if (m.is_null())  break;
       if (!have_defc) {
         klassOop defc = m->method_holder();
-        if (receiver_limit != NULL && receiver_limit != defc
-            && Klass::cast(receiver_limit)->is_subtype_of(defc))
-          defc = receiver_limit;
+        if (receiver_limit.not_null() && receiver_limit() != defc
+            && Klass::cast(receiver_limit())->is_subtype_of(defc))
+          defc = receiver_limit();
         java_lang_invoke_MemberName::set_clazz(mname(), Klass::cast(defc)->java_mirror());
       }
       if (!have_name) {
@@ -884,10 +880,9 @@
   // - AMH can have methodOop for static invoke with bound receiver
   // - DMH can have methodOop for static invoke (on variable receiver)
   // - DMH can have klassOop for dispatched (non-static) invoke
-  klassOop receiver_limit = NULL;
-  int decode_flags = 0;
-  methodOop m = decode_MethodHandle(mh(), receiver_limit, decode_flags);
-  if (m == NULL)  return NULL;
+  KlassHandle receiver_limit; int decode_flags = 0;
+  methodHandle m = decode_MethodHandle(mh(), receiver_limit, decode_flags);
+  if (m.is_null())  return NULL;
   switch (format) {
   case ETF_REFLECT_METHOD:
     // same as jni_ToReflectedMethod:
@@ -903,10 +898,10 @@
       if (SystemDictionary::MemberName_klass() == NULL)  break;
       instanceKlassHandle mname_klass(THREAD, SystemDictionary::MemberName_klass());
       mname_klass->initialize(CHECK_NULL);
-      Handle mname = mname_klass->allocate_instance_handle(CHECK_NULL);
+      Handle mname = mname_klass->allocate_instance_handle(CHECK_NULL);  // possible safepoint
       java_lang_invoke_MemberName::set_vmindex(mname(), VM_INDEX_UNINITIALIZED);
       bool do_dispatch = ((decode_flags & MethodHandles::_dmf_does_dispatch) != 0);
-      init_MemberName(mname(), m, do_dispatch);
+      init_MemberName(mname(), m(), do_dispatch);
       expand_MemberName(mname, 0, CHECK_NULL);
       return mname();
     }
@@ -1459,8 +1454,8 @@
   // that links the interpreter calls to the method.  We need the same
   // bits, and will use the same calling sequence code.
 
-  int vmindex = methodOopDesc::garbage_vtable_index;
-  oop vmtarget = NULL;
+  int    vmindex = methodOopDesc::garbage_vtable_index;
+  Handle vmtarget;
 
   instanceKlass::cast(m->method_holder())->link_class(CHECK);
 
@@ -1478,7 +1473,7 @@
   } else if (!do_dispatch || m->can_be_statically_bound()) {
     // We are simulating an invokestatic or invokespecial instruction.
     // Set up the method pointer, just like ConstantPoolCacheEntry::set_method().
-    vmtarget = m();
+    vmtarget = m;
     // this does not help dispatch, but it will make it possible to parse this MH:
     vmindex  = methodOopDesc::nonvirtual_vtable_index;
     assert(vmindex < 0, "(>=0) == do_dispatch");
@@ -1490,7 +1485,7 @@
       // For a DMH, it is done now, when the handle is created.
       Klass* k = Klass::cast(m->method_holder());
       if (k->should_be_initialized()) {
-        k->initialize(CHECK);
+        k->initialize(CHECK);  // possible safepoint
       }
     }
   } else {
@@ -1504,10 +1499,10 @@
 
   if (me == NULL) { THROW(vmSymbols::java_lang_InternalError()); }
 
-  java_lang_invoke_DirectMethodHandle::set_vmtarget(mh(), vmtarget);
-  java_lang_invoke_DirectMethodHandle::set_vmindex(mh(),  vmindex);
-  DEBUG_ONLY(int flags; klassOop rlimit);
-  assert(MethodHandles::decode_method(mh(), rlimit, flags) == m(),
+  java_lang_invoke_DirectMethodHandle::set_vmtarget(mh(), vmtarget());
+  java_lang_invoke_DirectMethodHandle::set_vmindex( mh(), vmindex);
+  DEBUG_ONLY(KlassHandle rlimit; int flags);
+  assert(MethodHandles::decode_method(mh(), rlimit, flags) == m,
          "properly stored for later decoding");
   DEBUG_ONLY(bool actual_do_dispatch = ((flags & _dmf_does_dispatch) != 0));
   assert(!(actual_do_dispatch && !do_dispatch),
@@ -1523,10 +1518,13 @@
                                                            methodHandle m,
                                                            TRAPS) {
   // Verify type.
-  oop receiver = java_lang_invoke_BoundMethodHandle::argument(mh());
+  KlassHandle bound_recv_type;
+  {
+    oop receiver = java_lang_invoke_BoundMethodHandle::argument(mh());
+    if (receiver != NULL)
+      bound_recv_type = KlassHandle(THREAD, receiver->klass());
+  }
   Handle mtype(THREAD, java_lang_invoke_MethodHandle::type(mh()));
-  KlassHandle bound_recv_type;
-  if (receiver != NULL)  bound_recv_type = KlassHandle(THREAD, receiver->klass());
   verify_method_type(m, mtype, true, bound_recv_type, CHECK);
 
   int receiver_pos = m->size_of_parameters() - 1;
@@ -1573,8 +1571,8 @@
 
   java_lang_invoke_BoundMethodHandle::set_vmtarget(mh(), m());
 
-  DEBUG_ONLY(int junk; klassOop junk2);
-  assert(MethodHandles::decode_method(mh(), junk2, junk) == m(), "properly stored for later decoding");
+  DEBUG_ONLY(KlassHandle junk1; int junk2);
+  assert(MethodHandles::decode_method(mh(), junk1, junk2) == m, "properly stored for later decoding");
   assert(decode_MethodHandle_stack_pushes(mh()) == 1, "BMH pushes one stack slot");
 
   // Done!
@@ -1682,8 +1680,11 @@
   }
 
   // Get bound type and required slots.
-  oop ptype_oop = java_lang_invoke_MethodType::ptype(java_lang_invoke_MethodHandle::type(target()), argnum);
-  BasicType ptype = java_lang_Class::as_BasicType(ptype_oop);
+  BasicType ptype;
+  {
+    oop ptype_oop = java_lang_invoke_MethodType::ptype(java_lang_invoke_MethodHandle::type(target()), argnum);
+    ptype = java_lang_Class::as_BasicType(ptype_oop);
+  }
   int slots_pushed = type2size[ptype];
 
   // If (a) the target is a direct non-dispatched method handle,
@@ -1694,13 +1695,12 @@
   if (OptimizeMethodHandles &&
       target->klass() == SystemDictionary::DirectMethodHandle_klass() &&
       (argnum == 0 || java_lang_invoke_DirectMethodHandle::vmindex(target()) < 0)) {
-    int decode_flags = 0; klassOop receiver_limit_oop = NULL;
-    methodHandle m(THREAD, decode_method(target(), receiver_limit_oop, decode_flags));
+    KlassHandle receiver_limit; int decode_flags = 0;
+    methodHandle m = decode_method(target(), receiver_limit, decode_flags);
     if (m.is_null()) { THROW_MSG(vmSymbols::java_lang_InternalError(), "DMH failed to decode"); }
     DEBUG_ONLY(int m_vmslots = m->size_of_parameters() - slots_pushed); // pos. of 1st arg.
     assert(java_lang_invoke_BoundMethodHandle::vmslots(mh()) == m_vmslots, "type w/ m sig");
     if (argnum == 0 && (decode_flags & _dmf_has_receiver) != 0) {
-      KlassHandle receiver_limit(THREAD, receiver_limit_oop);
       init_BoundMethodHandle_with_receiver(mh, m,
                                            receiver_limit, decode_flags,
                                            CHECK);
@@ -2019,7 +2019,6 @@
 }
 
 void MethodHandles::init_AdapterMethodHandle(Handle mh, Handle target, int argnum, TRAPS) {
-  oop  argument   = java_lang_invoke_AdapterMethodHandle::argument(mh());
   int  argslot    = java_lang_invoke_AdapterMethodHandle::vmargslot(mh());
   jint conversion = java_lang_invoke_AdapterMethodHandle::conversion(mh());
   jint conv_op    = adapter_conversion_op(conversion);
@@ -2215,18 +2214,14 @@
 
   // which method are we really talking about?
   if (target_jh == NULL) { THROW(vmSymbols::java_lang_InternalError()); }
-  oop target_oop = JNIHandles::resolve_non_null(target_jh);
-  if (java_lang_invoke_MemberName::is_instance(target_oop) &&
-      java_lang_invoke_MemberName::vmindex(target_oop) == VM_INDEX_UNINITIALIZED) {
-    Handle mname(THREAD, target_oop);
-    MethodHandles::resolve_MemberName(mname, CHECK);
-    target_oop = mname(); // in case of GC
+  Handle target(THREAD, JNIHandles::resolve_non_null(target_jh));
+  if (java_lang_invoke_MemberName::is_instance(target()) &&
+      java_lang_invoke_MemberName::vmindex(target()) == VM_INDEX_UNINITIALIZED) {
+    MethodHandles::resolve_MemberName(target, CHECK);
   }
 
-  int decode_flags = 0; klassOop receiver_limit = NULL;
-  methodHandle m(THREAD,
-                 MethodHandles::decode_method(target_oop,
-                                              receiver_limit, decode_flags));
+  KlassHandle receiver_limit; int decode_flags = 0;
+  methodHandle m = MethodHandles::decode_method(target(), receiver_limit, decode_flags);
   if (m.is_null()) { THROW_MSG(vmSymbols::java_lang_InternalError(), "no such method"); }
 
   // The trusted Java code that calls this method should already have performed
@@ -2284,12 +2279,8 @@
     // Target object is a reflective method.  (%%% Do we need this alternate path?)
     Untested("init_BMH of non-MH");
     if (argnum != 0) { THROW(vmSymbols::java_lang_InternalError()); }
-    int decode_flags = 0; klassOop receiver_limit_oop = NULL;
-    methodHandle m(THREAD,
-                   MethodHandles::decode_method(target(),
-                                                receiver_limit_oop,
-                                                decode_flags));
-    KlassHandle receiver_limit(THREAD, receiver_limit_oop);
+    KlassHandle receiver_limit; int decode_flags = 0;
+    methodHandle m = MethodHandles::decode_method(target(), receiver_limit, decode_flags);
     MethodHandles::init_BoundMethodHandle_with_receiver(mh, m,
                                                        receiver_limit,
                                                        decode_flags,
@@ -2424,12 +2415,12 @@
 #ifndef PRODUCT
   if (which >= 0 && which < con_value_count) {
     int con = con_values[which];
-    objArrayOop box = (objArrayOop) JNIHandles::resolve(box_jh);
-    if (box != NULL && box->klass() == Universe::objectArrayKlassObj() && box->length() > 0) {
+    objArrayHandle box(THREAD, (objArrayOop) JNIHandles::resolve(box_jh));
+    if (box.not_null() && box->klass() == Universe::objectArrayKlassObj() && box->length() > 0) {
       const char* str = &con_names[0];
       for (int i = 0; i < which; i++)
         str += strlen(str) + 1;   // skip name and null
-      oop name = java_lang_String::create_oop_from_str(str, CHECK_0);
+      oop name = java_lang_String::create_oop_from_str(str, CHECK_0);  // possible safepoint
       box->obj_at_put(0, name);
     }
     return con;
@@ -2486,10 +2477,10 @@
                                jclass clazz_jh, jstring name_jh, jstring sig_jh,
                                int mflags, jclass caller_jh, jint skip, jobjectArray results_jh)) {
   if (clazz_jh == NULL || results_jh == NULL)  return -1;
-  klassOop k_oop = java_lang_Class::as_klassOop(JNIHandles::resolve_non_null(clazz_jh));
+  KlassHandle k(THREAD, java_lang_Class::as_klassOop(JNIHandles::resolve_non_null(clazz_jh)));
 
-  objArrayOop results = (objArrayOop) JNIHandles::resolve(results_jh);
-  if (results == NULL || !results->is_objArray())       return -1;
+  objArrayHandle results(THREAD, (objArrayOop) JNIHandles::resolve(results_jh));
+  if (results.is_null() || !results->is_objArray())  return -1;
 
   TempNewSymbol name = NULL;
   TempNewSymbol sig = NULL;
@@ -2502,20 +2493,20 @@
     if (sig == NULL)  return 0; // a match is not possible
   }
 
-  klassOop caller = NULL;
+  KlassHandle caller;
   if (caller_jh != NULL) {
     oop caller_oop = JNIHandles::resolve_non_null(caller_jh);
     if (!java_lang_Class::is_instance(caller_oop))  return -1;
-    caller = java_lang_Class::as_klassOop(caller_oop);
+    caller = KlassHandle(THREAD, java_lang_Class::as_klassOop(caller_oop));
   }
 
-  if (name != NULL && sig != NULL && results != NULL) {
+  if (name != NULL && sig != NULL && results.not_null()) {
     // try a direct resolve
     // %%% TO DO
   }
 
-  int res = MethodHandles::find_MemberNames(k_oop, name, sig, mflags,
-                                            caller, skip, results);
+  int res = MethodHandles::find_MemberNames(k(), name, sig, mflags,
+                                            caller(), skip, results());
   // TO DO: expand at least some of the MemberNames, to avoid massive callbacks
   return res;
 }
--- a/hotspot/src/share/vm/prims/methodHandles.hpp	Mon May 02 09:38:22 2011 -0700
+++ b/hotspot/src/share/vm/prims/methodHandles.hpp	Wed Jul 05 17:43:05 2017 +0200
@@ -265,13 +265,13 @@
   static inline address from_interpreted_entry(EntryKind ek);
 
   // helpers for decode_method.
-  static methodOop decode_methodOop(methodOop m, int& decode_flags_result);
-  static methodOop decode_vmtarget(oop vmtarget, int vmindex, oop mtype, klassOop& receiver_limit_result, int& decode_flags_result);
-  static methodOop decode_MemberName(oop mname, klassOop& receiver_limit_result, int& decode_flags_result);
-  static methodOop decode_MethodHandle(oop mh, klassOop& receiver_limit_result, int& decode_flags_result);
-  static methodOop decode_DirectMethodHandle(oop mh, klassOop& receiver_limit_result, int& decode_flags_result);
-  static methodOop decode_BoundMethodHandle(oop mh, klassOop& receiver_limit_result, int& decode_flags_result);
-  static methodOop decode_AdapterMethodHandle(oop mh, klassOop& receiver_limit_result, int& decode_flags_result);
+  static methodOop    decode_methodOop(methodOop m, int& decode_flags_result);
+  static methodHandle decode_vmtarget(oop vmtarget, int vmindex, oop mtype, KlassHandle& receiver_limit_result, int& decode_flags_result);
+  static methodHandle decode_MemberName(oop mname, KlassHandle& receiver_limit_result, int& decode_flags_result);
+  static methodHandle decode_MethodHandle(oop mh, KlassHandle& receiver_limit_result, int& decode_flags_result);
+  static methodHandle decode_DirectMethodHandle(oop mh, KlassHandle& receiver_limit_result, int& decode_flags_result);
+  static methodHandle decode_BoundMethodHandle(oop mh, KlassHandle& receiver_limit_result, int& decode_flags_result);
+  static methodHandle decode_AdapterMethodHandle(oop mh, KlassHandle& receiver_limit_result, int& decode_flags_result);
 
   // Find out how many stack slots an mh pushes or pops.
   // The result is *not* reported as a multiple of stack_move_unit();
@@ -317,7 +317,7 @@
     _dmf_adapter_lsb    = 0x20,
     _DMF_ADAPTER_MASK   = (_dmf_adapter_lsb << CONV_OP_LIMIT) - _dmf_adapter_lsb
   };
-  static methodOop decode_method(oop x, klassOop& receiver_limit_result, int& decode_flags_result);
+  static methodHandle decode_method(oop x, KlassHandle& receiver_limit_result, int& decode_flags_result);
   enum {
     // format of query to getConstant:
     GC_JVM_PUSH_LIMIT = 0,
--- a/hotspot/src/share/vm/runtime/globals.hpp	Mon May 02 09:38:22 2011 -0700
+++ b/hotspot/src/share/vm/runtime/globals.hpp	Wed Jul 05 17:43:05 2017 +0200
@@ -620,6 +620,9 @@
   product(bool, UseSSE42Intrinsics, false,                                  \
           "SSE4.2 versions of intrinsics")                                  \
                                                                             \
+  product(bool, UseCondCardMark, false,                                     \
+          "Check for already marked card before updating card table")       \
+                                                                            \
   develop(bool, TraceCallFixup, false,                                      \
           "traces all call fixups")                                         \
                                                                             \
--- a/hotspot/src/share/vm/runtime/javaCalls.cpp	Mon May 02 09:38:22 2011 -0700
+++ b/hotspot/src/share/vm/runtime/javaCalls.cpp	Wed Jul 05 17:43:05 2017 +0200
@@ -389,7 +389,7 @@
   // to Java
   if (!os::stack_shadow_pages_available(THREAD, method)) {
     // Throw stack overflow exception with preinitialized exception.
-    Exceptions::throw_stack_overflow_exception(THREAD, __FILE__, __LINE__);
+    Exceptions::throw_stack_overflow_exception(THREAD, __FILE__, __LINE__, method);
     return;
   } else {
     // Touch pages checked if the OS needs them to be touched to be mapped.
--- a/hotspot/src/share/vm/runtime/sharedRuntime.cpp	Mon May 02 09:38:22 2011 -0700
+++ b/hotspot/src/share/vm/runtime/sharedRuntime.cpp	Wed Jul 05 17:43:05 2017 +0200
@@ -1721,14 +1721,14 @@
         targetArity = ArgumentCount(target->signature()).size();
       }
     }
-    klassOop kignore; int dmf_flags = 0;
-    methodOop actual_method = MethodHandles::decode_method(actual, kignore, dmf_flags);
+    KlassHandle kignore; int dmf_flags = 0;
+    methodHandle actual_method = MethodHandles::decode_method(actual, kignore, dmf_flags);
     if ((dmf_flags & ~(MethodHandles::_dmf_has_receiver |
                        MethodHandles::_dmf_does_dispatch |
                        MethodHandles::_dmf_from_interface)) != 0)
-      actual_method = NULL;  // MH does extra binds, drops, etc.
+      actual_method = methodHandle();  // MH does extra binds, drops, etc.
     bool has_receiver = ((dmf_flags & MethodHandles::_dmf_has_receiver) != 0);
-    if (actual_method != NULL) {
+    if (actual_method.not_null()) {
       mhName = actual_method->signature()->as_C_string();
       mhArity = ArgumentCount(actual_method->signature()).size();
       if (!actual_method->is_static())  mhArity += 1;
--- a/hotspot/src/share/vm/runtime/vmThread.cpp	Mon May 02 09:38:22 2011 -0700
+++ b/hotspot/src/share/vm/runtime/vmThread.cpp	Wed Jul 05 17:43:05 2017 +0200
@@ -291,7 +291,9 @@
     // Among other things, this ensures that Eden top is correct.
     Universe::heap()->prepare_for_verify();
     os::check_heap();
-    Universe::verify(true, true); // Silent verification to not polute normal output
+    // Silent verification so as not to pollute normal output,
+    // unless we really asked for it.
+    Universe::verify(true, !(PrintGCDetails || Verbose));
   }
 
   CompileBroker::set_should_block();
--- a/hotspot/src/share/vm/services/g1MemoryPool.cpp	Mon May 02 09:38:22 2011 -0700
+++ b/hotspot/src/share/vm/services/g1MemoryPool.cpp	Wed Jul 05 17:43:05 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -34,10 +34,10 @@
                                      size_t init_size,
                                      bool support_usage_threshold) :
   _g1h(g1h), CollectedMemoryPool(name,
-                                 MemoryPool::Heap,
-                                 init_size,
-                                 undefined_max(),
-                                 support_usage_threshold) {
+                                   MemoryPool::Heap,
+                                   init_size,
+                                   undefined_max(),
+                                   support_usage_threshold) {
   assert(UseG1GC, "sanity");
 }
 
@@ -48,44 +48,27 @@
 
 // See the comment at the top of g1MemoryPool.hpp
 size_t G1MemoryPoolSuper::eden_space_used(G1CollectedHeap* g1h) {
-  size_t young_list_length = g1h->young_list()->length();
-  size_t eden_used = young_list_length * HeapRegion::GrainBytes;
-  size_t survivor_used = survivor_space_used(g1h);
-  eden_used = subtract_up_to_zero(eden_used, survivor_used);
-  return eden_used;
+  return g1h->g1mm()->eden_space_used();
 }
 
 // See the comment at the top of g1MemoryPool.hpp
 size_t G1MemoryPoolSuper::survivor_space_committed(G1CollectedHeap* g1h) {
-  return MAX2(survivor_space_used(g1h), (size_t) HeapRegion::GrainBytes);
+  return g1h->g1mm()->survivor_space_committed();
 }
 
 // See the comment at the top of g1MemoryPool.hpp
 size_t G1MemoryPoolSuper::survivor_space_used(G1CollectedHeap* g1h) {
-  size_t survivor_num = g1h->g1_policy()->recorded_survivor_regions();
-  size_t survivor_used = survivor_num * HeapRegion::GrainBytes;
-  return survivor_used;
+  return g1h->g1mm()->survivor_space_used();
 }
 
 // See the comment at the top of g1MemoryPool.hpp
 size_t G1MemoryPoolSuper::old_space_committed(G1CollectedHeap* g1h) {
-  size_t committed = overall_committed(g1h);
-  size_t eden_committed = eden_space_committed(g1h);
-  size_t survivor_committed = survivor_space_committed(g1h);
-  committed = subtract_up_to_zero(committed, eden_committed);
-  committed = subtract_up_to_zero(committed, survivor_committed);
-  committed = MAX2(committed, (size_t) HeapRegion::GrainBytes);
-  return committed;
+  return g1h->g1mm()->old_space_committed();
 }
 
 // See the comment at the top of g1MemoryPool.hpp
 size_t G1MemoryPoolSuper::old_space_used(G1CollectedHeap* g1h) {
-  size_t used = overall_used(g1h);
-  size_t eden_used = eden_space_used(g1h);
-  size_t survivor_used = survivor_space_used(g1h);
-  used = subtract_up_to_zero(used, eden_used);
-  used = subtract_up_to_zero(used, survivor_used);
-  return used;
+  return g1h->g1mm()->old_space_used();
 }
 
 G1EdenPool::G1EdenPool(G1CollectedHeap* g1h) :
--- a/hotspot/src/share/vm/services/g1MemoryPool.hpp	Mon May 02 09:38:22 2011 -0700
+++ b/hotspot/src/share/vm/services/g1MemoryPool.hpp	Wed Jul 05 17:43:05 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -46,68 +46,9 @@
 // get, as this does affect the performance and behavior of G1. Which
 // is why we introduce the three memory pools implemented here.
 //
-// The above approach inroduces a couple of challenging issues in the
-// implementation of the three memory pools:
+// See comments in g1MonitoringSupport.hpp for additional details
+// on this model.
 //
-// 1) The used space calculation for a pool is not necessarily
-// independent of the others. We can easily get from G1 the overall
-// used space in the entire heap, the number of regions in the young
-// generation (includes both eden and survivors), and the number of
-// survivor regions. So, from that we calculate:
-//
-//  survivor_used = survivor_num * region_size
-//  eden_used     = young_region_num * region_size - survivor_used
-//  old_gen_used  = overall_used - eden_used - survivor_used
-//
-// Note that survivor_used and eden_used are upper bounds. To get the
-// actual value we would have to iterate over the regions and add up
-// ->used(). But that'd be expensive. So, we'll accept some lack of
-// accuracy for those two. But, we have to be careful when calculating
-// old_gen_used, in case we subtract from overall_used more then the
-// actual number and our result goes negative.
-//
-// 2) Calculating the used space is straightforward, as described
-// above. However, how do we calculate the committed space, given that
-// we allocate space for the eden, survivor, and old gen out of the
-// same pool of regions? One way to do this is to use the used value
-// as also the committed value for the eden and survivor spaces and
-// then calculate the old gen committed space as follows:
-//
-//  old_gen_committed = overall_committed - eden_committed - survivor_committed
-//
-// Maybe a better way to do that would be to calculate used for eden
-// and survivor as a sum of ->used() over their regions and then
-// calculate committed as region_num * region_size (i.e., what we use
-// to calculate the used space now). This is something to consider
-// in the future.
-//
-// 3) Another decision that is again not straightforward is what is
-// the max size that each memory pool can grow to. One way to do this
-// would be to use the committed size for the max for the eden and
-// survivors and calculate the old gen max as follows (basically, it's
-// a similar pattern to what we use for the committed space, as
-// described above):
-//
-//  old_gen_max = overall_max - eden_max - survivor_max
-//
-// Unfortunately, the above makes the max of each pool fluctuate over
-// time and, even though this is allowed according to the spec, it
-// broke several assumptions in the M&M framework (there were cases
-// where used would reach a value greater than max). So, for max we
-// use -1, which means "undefined" according to the spec.
-//
-// 4) Now, there is a very subtle issue with all the above. The
-// framework will call get_memory_usage() on the three pools
-// asynchronously. As a result, each call might get a different value
-// for, say, survivor_num which will yield inconsistent values for
-// eden_used, survivor_used, and old_gen_used (as survivor_num is used
-// in the calculation of all three). This would normally be
-// ok. However, it's possible that this might cause the sum of
-// eden_used, survivor_used, and old_gen_used to go over the max heap
-// size and this seems to sometimes cause JConsole (and maybe other
-// clients) to get confused. There's not a really an easy / clean
-// solution to this problem, due to the asynchrounous nature of the
-// framework.
 
 
 // This class is shared by the three G1 memory pool classes
@@ -116,22 +57,6 @@
 // (see comment above), we put the calculations in this class so that
 // we can easily share them among the subclasses.
 class G1MemoryPoolSuper : public CollectedMemoryPool {
-private:
-  // It returns x - y if x > y, 0 otherwise.
-  // As described in the comment above, some of the inputs to the
-  // calculations we have to do are obtained concurrently and hence
-  // may be inconsistent with each other. So, this provides a
-  // defensive way of performing the subtraction and avoids the value
-  // going negative (which would mean a very large result, given that
-  // the parameter are size_t).
-  static size_t subtract_up_to_zero(size_t x, size_t y) {
-    if (x > y) {
-      return x - y;
-    } else {
-      return 0;
-    }
-  }
-
 protected:
   G1CollectedHeap* _g1h;
 
@@ -148,13 +73,6 @@
     return (size_t) -1;
   }
 
-  static size_t overall_committed(G1CollectedHeap* g1h) {
-    return g1h->capacity();
-  }
-  static size_t overall_used(G1CollectedHeap* g1h) {
-    return g1h->used_unlocked();
-  }
-
   static size_t eden_space_committed(G1CollectedHeap* g1h);
   static size_t eden_space_used(G1CollectedHeap* g1h);
 
--- a/hotspot/src/share/vm/utilities/exceptions.cpp	Mon May 02 09:38:22 2011 -0700
+++ b/hotspot/src/share/vm/utilities/exceptions.cpp	Wed Jul 05 17:43:05 2017 +0200
@@ -207,7 +207,7 @@
 }
 
 
-void Exceptions::throw_stack_overflow_exception(Thread* THREAD, const char* file, int line) {
+void Exceptions::throw_stack_overflow_exception(Thread* THREAD, const char* file, int line, methodHandle method) {
   Handle exception;
   if (!THREAD->has_pending_exception()) {
     klassOop k = SystemDictionary::StackOverflowError_klass();
@@ -215,13 +215,13 @@
     exception = Handle(THREAD, e);  // fill_in_stack trace does gc
     assert(instanceKlass::cast(k)->is_initialized(), "need to increase min_stack_allowed calculation");
     if (StackTraceInThrowable) {
-      java_lang_Throwable::fill_in_stack_trace(exception);
+      java_lang_Throwable::fill_in_stack_trace(exception, method());
     }
   } else {
     // if prior exception, throw that one instead
     exception = Handle(THREAD, THREAD->pending_exception());
   }
-  _throw_oop(THREAD, file, line, exception());
+  _throw(THREAD, file, line, exception);
 }
 
 void Exceptions::fthrow(Thread* thread, const char* file, int line, Symbol* h_name, const char* format, ...) {
--- a/hotspot/src/share/vm/utilities/exceptions.hpp	Mon May 02 09:38:22 2011 -0700
+++ b/hotspot/src/share/vm/utilities/exceptions.hpp	Wed Jul 05 17:43:05 2017 +0200
@@ -144,7 +144,7 @@
                              const char* message,
                              ExceptionMsgToUtf8Mode to_utf8_safe = safe_to_utf8);
 
-  static void throw_stack_overflow_exception(Thread* thread, const char* file, int line);
+  static void throw_stack_overflow_exception(Thread* thread, const char* file, int line, methodHandle method);
 
   // for AbortVMOnException flag
   NOT_PRODUCT(static void debug_check_abort(Handle exception, const char* message = NULL);)
--- a/jaxp/.hgignore	Mon May 02 09:38:22 2011 -0700
+++ b/jaxp/.hgignore	Wed Jul 05 17:43:05 2017 +0200
@@ -4,3 +4,4 @@
 ^drop_included/
 ^webrev/
 /nbproject/private/
+^.hgtip
--- a/jaxp/.hgtags	Mon May 02 09:38:22 2011 -0700
+++ b/jaxp/.hgtags	Wed Jul 05 17:43:05 2017 +0200
@@ -114,3 +114,4 @@
 1d87f7460cde7f8f30af668490f82b52b879bfd8 jdk7-b137
 be3758943770a0a3dd4be6a1cb4063507c4d7062 jdk7-b138
 28c7c0ed2444607829ba11ad827f8d52197a2830 jdk7-b139
+c8136fd161c83917f87e93b14fa2ba3483f9be83 jdk7-b140
--- a/jaxws/.hgignore	Mon May 02 09:38:22 2011 -0700
+++ b/jaxws/.hgignore	Wed Jul 05 17:43:05 2017 +0200
@@ -4,3 +4,4 @@
 ^drop_included/
 ^webrev/
 /nbproject/private/
+^.hgtip
--- a/jaxws/.hgtags	Mon May 02 09:38:22 2011 -0700
+++ b/jaxws/.hgtags	Wed Jul 05 17:43:05 2017 +0200
@@ -114,3 +114,4 @@
 ccea3282991ce8b678e188cf32a8239f76ff3bfa jdk7-b137
 cc956c8a8255583535597e9a63db23c510e9a063 jdk7-b138
 c025078c8362076503bb83b8e4da14ba7b347940 jdk7-b139
+82a9022c4f21b1313023c8303b557a17c4106701 jdk7-b140
--- a/jdk/.hgignore	Mon May 02 09:38:22 2011 -0700
+++ b/jdk/.hgignore	Wed Jul 05 17:43:05 2017 +0200
@@ -3,3 +3,4 @@
 /nbproject/private/
 ^make/netbeans/.*/build/
 ^make/netbeans/.*/dist/
+^.hgtip
--- a/jdk/.hgtags	Mon May 02 09:38:22 2011 -0700
+++ b/jdk/.hgtags	Wed Jul 05 17:43:05 2017 +0200
@@ -114,3 +114,4 @@
 29296ea6529a418037ccce95903249665ef31c11 jdk7-b137
 60d3d55dcc9c31a30ced9caa6ef5c0dcd7db031d jdk7-b138
 d80954a89b49fda47c0c5cace65a17f5a758b8bd jdk7-b139
+9315c733fb17ddfb9fb44be7e0ffea37bf3c727d jdk7-b140
--- a/jdk/make/common/Defs-linux.gmk	Mon May 02 09:38:22 2011 -0700
+++ b/jdk/make/common/Defs-linux.gmk	Wed Jul 05 17:43:05 2017 +0200
@@ -251,9 +251,8 @@
 # statically link libgcc but will print a warning with the flag. We don't 
 # want the warning, so check gcc version first.
 #
-CC_VER_MAJOR := $(shell $(CC) -dumpversion | $(SED) 's/egcs-//' | $(CUT) -d'.' -f1)
-ifeq ("$(CC_VER_MAJOR)", "3")
-OTHER_LDFLAGS  += -static-libgcc
+ifeq ($(CC_MAJORVER),3)
+  OTHER_LDFLAGS  += -static-libgcc
 endif
 
 # Automatic precompiled header option to use (if COMPILE_APPROACH=batch)
@@ -355,7 +354,7 @@
 # Japanese manpages
 #
 JA_SOURCE_ENCODING = eucJP
-JA_TARGET_ENCODINGS = eucJP
+JA_TARGET_ENCODINGS = UTF-8
 
 # Settings for the JDI - Serviceability Agent binding.
 HOTSPOT_SALIB_PATH   = $(HOTSPOT_IMPORT_PATH)/jre/lib/$(LIBARCH)
--- a/jdk/make/common/Defs-solaris.gmk	Mon May 02 09:38:22 2011 -0700
+++ b/jdk/make/common/Defs-solaris.gmk	Wed Jul 05 17:43:05 2017 +0200
@@ -457,14 +457,15 @@
     # On X86, make sure tail call optimization is off
     #    The z and y are the tail call optimizations.
     ifeq ($(ARCH_FAMILY), i586)
-      ifeq ($(shell $(EXPR) $(CC_MAJORVER) \>= 5), 1)
-        ifeq ($(shell $(EXPR) $(CC_MINORVER) \> 8), 1)
-          #    Somehow, tail call optimization is creeping in.
-          #    Make sure it is off.
-	  # WARNING: These may cause compiler warnings about duplicate -O options
-          CC_XKEEPFRAME_OPTIONS  += -Wu,-O$(OPT_LEVEL/$(OPTIMIZATION_LEVEL))~yz
-          CXX_XKEEPFRAME_OPTIONS += -Qoption ube -O$(OPT_LEVEL/$(OPTIMIZATION_LEVEL))~yz
-        endif
+      CC_NEWER_THAN_58 := \
+        $(shell $(EXPR) $(CC_MAJORVER) \> 5 \| \
+	    \( $(CC_MAJORVER) = 5 \& $(CC_MINORVER) \> 8 \) )
+      ifeq ($(CC_NEWER_THAN_58),1)
+        #    Somehow, tail call optimization is creeping in.
+        #    Make sure it is off.
+        # WARNING: These may cause compiler warnings about duplicate -O options
+        CC_XKEEPFRAME_OPTIONS  += -Wu,-O$(OPT_LEVEL/$(OPTIMIZATION_LEVEL))~yz
+        CXX_XKEEPFRAME_OPTIONS += -Qoption ube -O$(OPT_LEVEL/$(OPTIMIZATION_LEVEL))~yz
       endif
     endif
   
@@ -481,14 +482,15 @@
         CXX_XKEEPFRAME_OPTIONS += -Qoption ube -Z~B
       endif
 
-      ifeq ($(shell $(EXPR) $(CC_MAJORVER) \>= 5), 1)
-        ifeq ($(shell $(EXPR) $(CC_MINORVER) \> 6), 1)
-          # Do NOT use frame pointer register as a general purpose opt register
-          CC_OPT/NONE            += -xregs=no%frameptr
-          CXX_OPT/NONE           += -xregs=no%frameptr
-          CC_XKEEPFRAME_OPTIONS  += -xregs=no%frameptr
-          CXX_XKEEPFRAME_OPTIONS += -xregs=no%frameptr
-        endif
+      CC_NEWER_THAN_56 := \
+        $(shell $(EXPR) $(CC_MAJORVER) \> 5 \| \
+	    \( $(CC_MAJORVER) = 5 \& $(CC_MINORVER) \> 6 \) )
+      ifeq ($(CC_NEWER_THAN_56),1)
+        # Do NOT use frame pointer register as a general purpose opt register
+        CC_OPT/NONE            += -xregs=no%frameptr
+        CXX_OPT/NONE           += -xregs=no%frameptr
+        CC_XKEEPFRAME_OPTIONS  += -xregs=no%frameptr
+        CXX_XKEEPFRAME_OPTIONS += -xregs=no%frameptr
       endif
     endif
   
@@ -566,8 +568,10 @@
     CFLAGS_REQUIRED_sparc    += -xregs=no%appl
     CFLAGS_REQUIRED_sparcv9  += -xregs=no%appl
   endif
-  ifeq ($(shell $(EXPR) $(CC_VER) \> 5.6), 1)
-    # We MUST allow data alignment of 4 for sparc V8 (32bit)
+  CC_NEWER_THAN_56 := \
+    $(shell $(EXPR) $(CC_MAJORVER) \> 5 \| \
+         \( $(CC_MAJORVER) = 5 \& $(CC_MINORVER) \> 6 \) )
+  ifeq ($(CC_NEWER_THAN_56),1)
     #     Presents an ABI issue with customer JNI libs? We must be able to
     #     to handle 4byte aligned objects? (rare occurance, but possible?)
     CFLAGS_REQUIRED_sparc += -xmemalign=4s
--- a/jdk/make/common/Demo.gmk	Mon May 02 09:38:22 2011 -0700
+++ b/jdk/make/common/Demo.gmk	Wed Jul 05 17:43:05 2017 +0200
@@ -211,9 +211,13 @@
 endif
 
 # Jar manifest file
-$(DEMO_MANIFEST): 
+MAINMANIFEST  = $(JDK_TOPDIR)/make/tools/manifest.mf
+$(DEMO_MANIFEST): $(MAINMANIFEST)
 	@$(prep-target)
-	$(ECHO) "Main-Class: $(DEMO_MAINCLASS)" > $@
+	$(SED) -e "s#@@RELEASE@@#$(RELEASE)#"           \
+               -e "s#@@COMPANY_NAME@@#$(COMPANY_NAME)#" \
+               $(MAINMANIFEST) >> $@
+	$(ECHO) "Main-Class: $(DEMO_MAINCLASS)" >> $@
 ifdef DEMO_MANIFEST_ATTR
 	$(ECHO) "$(DEMO_MANIFEST_ATTR)" >> $@
 endif
--- a/jdk/make/common/Release-embedded.gmk	Mon May 02 09:38:22 2011 -0700
+++ b/jdk/make/common/Release-embedded.gmk	Wed Jul 05 17:43:05 2017 +0200
@@ -84,10 +84,10 @@
 
 # Create headless rt.jar
 HL_RT_JAR=$(ABS_TEMPDIR)/rt-hl-orig.jar
-$(HL_RT_JAR): MakeHeadlessJarFileList $(JAR_MANIFEST_FILE)
+$(HL_RT_JAR): MakeHeadlessJarFileList $(RT_JAR_MANIFEST_FILE)
 	$(prep-target)
 	$(CD) $(CLASSBINDIR) ; \
-		$(BOOT_JAR_CMD) $(CREATE_JAR_OPTS) $(JAR_MANIFEST_FILE) $@ @$(HEADLESS_RT_JAR_FILELIST) \
+		$(BOOT_JAR_CMD) $(CREATE_JAR_OPTS) $(RT_JAR_MANIFEST_FILE) $@ @$(HEADLESS_RT_JAR_FILELIST) \
 		 $(JAR_JFLAGS)
 	@$(CD) $(CLASSBINDIR); $(java-vm-cleanup)
 
--- a/jdk/make/common/Release.gmk	Mon May 02 09:38:22 2011 -0700
+++ b/jdk/make/common/Release.gmk	Wed Jul 05 17:43:05 2017 +0200
@@ -164,7 +164,7 @@
 ifeq ($(PLATFORM), linux)
   MANBASEDIRS=$(JDK_TOPDIR)/src/linux/doc $(IMPORTDOCDIR)
   MAN1SUBDIR=man
-  JA_DIRNAME=ja_JP.$(JA_SOURCE_ENCODING)
+  JA_DIRNAME=ja_JP.UTF-8
 endif # linux
 
 define copy-man-pages
@@ -190,8 +190,7 @@
 done
 $(java-vm-cleanup)
 if [ "$(JA_DIRNAME)" != "" ] ; then \
-  $(MV) $1/man/ja $1/man/$(JA_DIRNAME); \
-  $(CD) $1/man && $(LN) -s $(JA_DIRNAME) ja; \
+  $(CD) $1/man && $(RM) ja && $(LN) -s $(JA_DIRNAME) ja; \
 fi
 endef
 
@@ -609,8 +608,8 @@
 	@$(java-vm-cleanup)
 
 # Create the manifest file.
-JAR_MANIFEST_FILE=$(ABS_TEMPDIR)/manifest.tmp
-$(JAR_MANIFEST_FILE): $(MAINMANIFEST) $(BEANMANIFEST)
+RT_JAR_MANIFEST_FILE=$(ABS_TEMPDIR)/rt_manifest.tmp
+$(RT_JAR_MANIFEST_FILE): $(MAINMANIFEST) $(BEANMANIFEST)
 	$(prep-target)
 	$(SED) -e "s#@@RELEASE@@#$(RELEASE)#" 		\
 	       -e "s#@@COMPANY_NAME@@#$(COMPANY_NAME)#" \
@@ -618,21 +617,28 @@
 	$(ECHO) >> $@
 	$(CAT) $(BEANMANIFEST) >> $@
 
+OTHER_JAR_MANIFEST_FILE=$(ABS_TEMPDIR)/other_manifest.tmp
+$(OTHER_JAR_MANIFEST_FILE): $(MAINMANIFEST)
+	$(prep-target)
+	$(SED) -e "s#@@RELEASE@@#$(RELEASE)#" 		\
+	       -e "s#@@COMPANY_NAME@@#$(COMPANY_NAME)#" \
+	       $(MAINMANIFEST) >> $@
+
 # Create resources.jar containing non-class files
 RESOURCES_JAR=$(ABS_TEMPDIR)/resources-orig.jar
-$(RESOURCES_JAR): $(RES_JAR_FILELIST) $(JAR_MANIFEST_FILE)
+$(RESOURCES_JAR): $(RES_JAR_FILELIST) $(OTHER_JAR_MANIFEST_FILE)
 	$(prep-target)
 	$(CD) $(CLASSBINDIR) && \
-	    $(BOOT_JAR_CMD) $(CREATE_JAR_OPTS) $(JAR_MANIFEST_FILE) $@ \
+	    $(BOOT_JAR_CMD) $(CREATE_JAR_OPTS) $(OTHER_JAR_MANIFEST_FILE) $@ \
 	        @$(RES_JAR_FILELIST) $(BOOT_JAR_JFLAGS)
 	@$(CD) $(CLASSBINDIR) && $(java-vm-cleanup)
 
 # Create jsse.jar containing SunJSSE implementation classes
 JSSE_JAR=$(ABS_TEMPDIR)/jsse-orig.jar
-$(JSSE_JAR): $(JAR_MANIFEST_FILE)
+$(JSSE_JAR): $(OTHER_JAR_MANIFEST_FILE)
 	$(prep-target)
 	$(CD) $(CLASSBINDIR) && \
-	    $(BOOT_JAR_CMD) $(CREATE_JAR_OPTS) $(JAR_MANIFEST_FILE) $@ \
+	    $(BOOT_JAR_CMD) $(CREATE_JAR_OPTS) $(OTHER_JAR_MANIFEST_FILE) $@ \
 		$(JSSE_CLASSES_DIRS) $(BOOT_JAR_JFLAGS)
 	@$(CD) $(CLASSBINDIR) && $(java-vm-cleanup)
 
@@ -676,10 +682,10 @@
 
 # Create rt.jar
 RT_JAR=$(ABS_TEMPDIR)/rt-orig.jar
-$(RT_JAR): $(RT_JAR_FILELIST) $(JAR_MANIFEST_FILE)
+$(RT_JAR): $(RT_JAR_FILELIST) $(RT_JAR_MANIFEST_FILE)
 	$(prep-target)
 	$(CD) $(CLASSBINDIR) && \
-	    $(BOOT_JAR_CMD) $(CREATE_JAR_OPTS) $(JAR_MANIFEST_FILE) $@ \
+	    $(BOOT_JAR_CMD) $(CREATE_JAR_OPTS) $(RT_JAR_MANIFEST_FILE) $@ \
 	        @$(RT_JAR_FILELIST) $(BOOT_JAR_JFLAGS)
 	@$(CD) $(CLASSBINDIR) && $(java-vm-cleanup)
 
@@ -1117,6 +1123,10 @@
 MINIMUM_OS_NAME    := $(REQUIRED_OS_NAME)
 MINIMUM_OS_VERSION := $(REQUIRED_OS_VERSION)
 MINIMUM_OS_ARCH    := $(ARCH)
+ALL_SOURCE_TIPS     = $(shell \
+  if [ -f $(SOURCE_TIPS) ] ; then \
+    $(CAT) $(SOURCE_TIPS) ; \
+  fi)
 
 $(JDK_INFO_FILE): FRC
 	$(prep-target)
@@ -1124,6 +1134,7 @@
 	$(call info-file-item, "OS_NAME",      "$(MINIMUM_OS_NAME)")
 	$(call info-file-item, "OS_VERSION",   "$(MINIMUM_OS_VERSION)")
 	$(call info-file-item, "OS_ARCH",      "$(MINIMUM_OS_ARCH)")
+	$(call info-file-item, "SOURCE",       "$(ALL_SOURCE_TIPS)")
 
 # Create release file to identify this image
 identify-image-jdk:: $(JDK_INFO_FILE)
@@ -1134,6 +1145,7 @@
 	$(call info-file-item, "OS_NAME",      "$(MINIMUM_OS_NAME)")
 	$(call info-file-item, "OS_VERSION",   "$(MINIMUM_OS_VERSION)")
 	$(call info-file-item, "OS_ARCH",      "$(MINIMUM_OS_ARCH)")
+	$(call info-file-item, "SOURCE",       "$(ALL_SOURCE_TIPS)")
 
 # Create release file to identify this image
 identify-image-jre:: $(JRE_INFO_FILE)
--- a/jdk/make/common/shared/Compiler-gcc.gmk	Mon May 02 09:38:22 2011 -0700
+++ b/jdk/make/common/shared/Compiler-gcc.gmk	Wed Jul 05 17:43:05 2017 +0200
@@ -87,6 +87,8 @@
 # Get gcc version
 _CC_VER :=$(shell $(CC) -dumpversion 2>&1 )
 CC_VER  :=$(call GetVersion,"$(_CC_VER)")
+CC_MAJORVER  :=$(call MajorVersion,$(CC_VER))
+CC_MINORVER  :=$(call MinorVersion,$(CC_VER))
 
 # Name of compiler
 COMPILER_NAME = GCC$(call MajorVersion,$(CC_VER))
--- a/jdk/make/common/shared/Compiler-sun.gmk	Mon May 02 09:38:22 2011 -0700
+++ b/jdk/make/common/shared/Compiler-sun.gmk	Wed Jul 05 17:43:05 2017 +0200
@@ -117,7 +117,10 @@
   LINT_XARCH_OPTION_OLD/64 += -Xarch=amd64
 endif
 # Pick the options we want based on the compiler being used. (5.9 or newer)
-ifeq ($(shell expr $(CC_MINORVER) \>= 9), 1)
+CC_59_OR_NEWER := \
+  $(shell expr $(CC_MAJORVER) \> 5 \| \
+      \( $(CC_MAJORVER) = 5 \& $(CC_MINORVER) \>= 9 \) )
+ifeq ($(CC_59_OR_NEWER), 1)
   XARCH_OPTION/32 = $(XARCH_OPTION_NEW/32)
   XARCH_OPTION/64 = $(XARCH_OPTION_NEW/64)
   LINT_XARCH_OPTION/32 = $(LINT_XARCH_OPTION_NEW/32)
--- a/jdk/make/common/shared/Defs-utils.gmk	Mon May 02 09:38:22 2011 -0700
+++ b/jdk/make/common/shared/Defs-utils.gmk	Wed Jul 05 17:43:05 2017 +0200
@@ -110,6 +110,7 @@
 GREP           = $(UTILS_COMMAND_PATH)grep
 GUNZIP         = $(UTILS_COMMAND_PATH)gunzip
 HEAD           = $(UTILS_USR_BIN_PATH)head
+HG             = hg
 ID             = $(UTILS_COMMAND_PATH)id
 ISAINFO        = $(UTILS_COMMAND_PATH)isainfo
 KSH            = $(UTILS_COMMAND_PATH)ksh
--- a/jdk/make/common/shared/Defs.gmk	Mon May 02 09:38:22 2011 -0700
+++ b/jdk/make/common/shared/Defs.gmk	Wed Jul 05 17:43:05 2017 +0200
@@ -612,6 +612,44 @@
   COPYRIGHT_YEAR = $(shell $(DATE) '+%Y')
 endif
 
+# Create file with source information
+SOURCE_TIPS=$(ABS_OUTPUTDIR)/source_tips
+
+# The source tips can come from the Mercurial repository, or in the files
+#   $(HGTIP_FILENAME) which contains the tip but is also positioned in the same
+#   directory as the original $(HGDIR) directory.
+#   These should not be := assignments, only used from the root Makefile.
+HG_VERSION = $(shell $(HG) version 2> $(DEV_NULL))
+HG_DIRECTORY=.hg
+HGTIP_FILENAME=.hgtip
+HG_SEARCH = ./REPO ./*/REPO ./*/*/REPO ./*/*/*/REPO
+REPO_LIST = $(patsubst ./%,%,$(patsubst %/,%,$(sort $(dir \
+    $(shell ( $(LS) -d $(HG_SEARCH:%/REPO=%/$(HG_DIRECTORY)) ; \
+              $(LS)    $(HG_SEARCH:%/REPO=%/$(HGTIP_FILENAME)) ) \
+	        2> $(DEV_NULL))))))
+
+# Emit the repo:tip pairs to $@
+define GetSourceTips
+for i in $(REPO_LIST) IGNORE ; do \
+  if [ "$${i}" = "IGNORE" ] ; then \
+    continue; \
+  elif [ -d $${i}/$(HG_DIRECTORY) -a "$(HG_VERSION)" != "" ] ; then \
+    $(PRINTF) " %s:%s" \
+      "$${i}" `$(HG) tip --repository $${i} --template '{node|short}\n'` ; \
+  elif [ -f $${i}/$(HGTIP_FILENAME) ] ; then \
+    $(PRINTF) " %s:%s" \
+      "$${i}" `$(CAT) $${i}/$(HGTIP_FILENAME)` ; \
+  fi; \
+done >> $@
+$(PRINTF) "\n" >> $@
+endef
+
+# Create the HGTIP_FILENAME file
+define CreateHgTip
+$(HG) tip --repository $1 --template '{node|short}\n' > $1/$(HGTIP_FILENAME);\
+$(ECHO) $1/$(HGTIP_FILENAME)
+endef
+
 # Get the compiler specific settings (will run the compiler to find out)
 #   NOTE: COMPILER_PATH must be set by this time.
 #   Up until we include this file, we don't know what specific compiler
--- a/jdk/make/common/shared/Platform.gmk	Mon May 02 09:38:22 2011 -0700
+++ b/jdk/make/common/shared/Platform.gmk	Wed Jul 05 17:43:05 2017 +0200
@@ -428,8 +428,6 @@
 # Machines with 512Mb or less of real memory are considered low memory
 #    build machines and adjustments will be made to prevent excessing
 #    system swapping during the build.
-#    If we don't know, assume 512. Subtract 128 from MB for VM MAX.
-#    Don't set VM max over 1024-128=896.
 ifeq ($(JDK_HAS_MEM_INFO),)
   JDK_HAS_MEM_INFO=true
   export JDK_HAS_MEM_INFO
@@ -440,18 +438,8 @@
       else \
         echo "false"; \
       fi)
-    MAX_VM_MEMORY := $(shell \
-      if [ $(MB_OF_MEMORY) -le 1024 ] ; then \
-        expr $(MB_OF_MEMORY) '-' 128 2> $(DEV_NULL) ; \
-      else \
-        echo "896"; \
-      fi)
-    MIN_VM_MEMORY := $(shell \
-      if [ $(MAX_VM_MEMORY) -le 128 ] ; then \
-        expr $(MAX_VM_MEMORY) '-' 8 2> $(DEV_NULL) ; \
-      else \
-        echo "128"; \
-      fi)
+    MAX_VM_MEMORY := 512
+    MIN_VM_MEMORY := $(MAX_VM_MEMORY)
   else
     MB_OF_MEMORY       := unknown
     LOW_MEMORY_MACHINE := true
--- a/jdk/make/javax/crypto/Defs-jce.gmk	Mon May 02 09:38:22 2011 -0700
+++ b/jdk/make/javax/crypto/Defs-jce.gmk	Wed Jul 05 17:43:05 2017 +0200
@@ -31,9 +31,11 @@
 JCE_MANIFEST_FILE    = $(TEMPDIR)/manifest.mf
 $(JCE_MANIFEST_FILE): $(MAINMANIFEST)
 	$(prep-target)
-	( $(SED) "s/@@RELEASE@@/$(RELEASE)/" $<; \
-	    $(ECHO) "Extension-Name: javax.crypto"; \
-	    $(ECHO) "Implementation-Vendor-Id: com.sun"; ) > $@
+	$(SED) -e "s#@@RELEASE@@#$(RELEASE)#"           \
+               -e "s#@@COMPANY_NAME@@#$(COMPANY_NAME)#" \
+               $(MAINMANIFEST) >> $@
+	$(ECHO) "Extension-Name: javax.crypto" >> $@
+	$(ECHO) "Implementation-Vendor-Id: com.sun" >> $@
 
 README-MAKEFILE_WARNING = \
     "\nPlease read make/javax/crypto/Makefile for further build instructions."
--- a/jdk/make/sun/jpeg/Makefile	Mon May 02 09:38:22 2011 -0700
+++ b/jdk/make/sun/jpeg/Makefile	Wed Jul 05 17:43:05 2017 +0200
@@ -73,9 +73,14 @@
   # Recommended way to avoid such warning is to declare the variable as
   # volatile to prevent the optimization. However, this approach does not
   # work because we have to declare all variables as volatile in result.
-ifndef CROSS_COMPILE_ARCH
-  OTHER_CFLAGS += -Wno-clobbered
-endif
+  ifndef CROSS_COMPILE_ARCH
+    CC_43_OR_NEWER := \
+      $(shell $(EXPR) $(CC_MAJORVER) \> 4 \| \
+          \( $(CC_MAJORVER) = 4 \& $(CC_MINORVER) \>= 3 \) )
+    ifeq ($(CC_43_OR_NEWER),1)
+      OTHER_CFLAGS += -Wno-clobbered
+    endif
+  endif
 endif
 
 include $(BUILDDIR)/common/Mapfile-vers.gmk
--- a/jdk/make/tools/manifest.mf	Mon May 02 09:38:22 2011 -0700
+++ b/jdk/make/tools/manifest.mf	Wed Jul 05 17:43:05 2017 +0200
@@ -1,7 +1,7 @@
 Manifest-Version: 1.0
 Specification-Title: Java Platform API Specification
 Specification-Version: 1.7
-Specification-Vendor: Oracle
+Specification-Vendor: Oracle Corporation
 Implementation-Title: Java Runtime Environment
 Implementation-Version: @@RELEASE@@
 Implementation-Vendor: @@COMPANY_NAME@@
--- a/jdk/src/linux/doc/man/ja/appletviewer.1	Mon May 02 09:38:22 2011 -0700
+++ b/jdk/src/linux/doc/man/ja/appletviewer.1	Wed Jul 05 17:43:05 2017 +0200
@@ -19,54 +19,44 @@
 ." or visit www.oracle.com if you need additional information or have any
 ." questions.
 ."
-.TH appletviewer 1 "02 Jun 2010"
+.TH appletviewer 1 "14 Apr 2011"
 
 .LP
-.SH "名前"
-appletviewer \- Java アプレットビューア
+.SH "̾"
+appletviewer \- Java ץåȥӥ塼
 .LP
-.RS 3
-
 .LP
+\f3appletviewer\fP ޥɤ Web ֥饦γǥץåȤ¹Ԥޤ
 .LP
-\f3appletviewer\fP コマンドは Web ブラウザの外でアプレットを実行させます。
-.LP
-.RE
-.SH "形式"
-.LP
-
+.SH ""
 .LP
 .LP
 \f4appletviewer\fP \f2[\fP \f2options\fP \f2] \fP\f2urls\fP ...
 .LP
-.SH "説明"
+.SH ""
 .LP
-
 .LP
+\f3appletviewer\fP ޥɤ \f2urls\fP ˻ꤵ줿ɥȤ뤤ϥ꥽³ơΥɥȤȤ뤽줾ΥץåȤȼΥɥɽޤ: \f2urls\fP ˤäƻȤ줿ɥȤ\f2OBJECT\fP\f2EMBED\fPޤ \f2APPLET\fP ǤɤΥץåȤ⻲ȤƤʤ硢\f3appletviewer\fP ϲԤޤ\f3appletviewer\fP ǥݡȤ HTML ξܺ٤ˤĤƤϡ
+.na
+\f2֥ץåȥӥ塼Υ\fP @
+.fi
+http://java.sun.com/javase/6/docs/technotes/tools/appletviewertags.html򻲾ȤƤ
 .LP
-\f3appletviewer\fP コマンドは \f2urls\fP に指定されたドキュメントあるいはリソースと接続して、そのドキュメントが参照するそれぞれのアプレットを独自のウィンドウで表示します。注: \f2urls\fP によって参照されたドキュメントが、\f2OBJECT\fP、\f2EMBED\fP、または \f2APPLET\fP タグでどのアプレットも参照していない場合、\f3appletviewer\fP は何も行いません。\f3appletviewer\fP でサポートされる HTML タグの詳細については、
-.na
-\f2「アプレットビューアのタグ」\fP @
-.fi
-http://java.sun.com/javase/6/docs/technotes/tools/appletviewertags.htmlを参照してください。
 .LP
+\f3:\fP \f3appletviewer\fP ϡRFC2396 ǵꤵ줿׵˽ä沽줿 URL ɬפȤޤݡȤΤϡ沽줿 URL Ǥե̾ˤĤƤϡRFC2396 ˻ꤵ줿ˡ沽Ƥɬפޤ
 .LP
-\f3注:\fP \f3appletviewer\fP は、RFC2396 で規定されたエスケープ機構に従って符号化された URL を必要とします。サポートされるのは、符号化された URL だけです。ただし、ファイル名については、RFC2396 に指定された方法で符号化を解除しておく必要があります。
-.LP
-.SH "オプション"
-.LP
-
+.SH "ץ"
 .LP
 .RS 3
 .TP 3
 \-debug 
-Java デバッガ jdb(1) でアプレットビューアを開始します。 これにより、ドキュメント中のアプレットをデバッグすることができます。 
+Java ǥХå jdb(1) ǥץåȥӥ塼򳫻ϤޤˤꡢɥΥץåȤǥХå뤳ȤǤޤ 
 .TP 3
 \-encoding \  \ encoding name 
-入力 HTML ファイルのエンコーディング名を指定します。 
+ HTML եΥ󥳡ǥ̾ꤷޤ 
 .TP 3
 \-Jjavaoption 
-文字列 \f2javaoption\fP は、appletviewer を実行する Java インタプリタに 1 つの引数として渡されます。引数にスペースを含めてはいけません。複数の引数は、各引数のすべてを接頭辞 \f3\-J\fP で始めることにより区分する必要があります。これは、コンパイラの実行環境、またはメモリーの利用に有効です。 
+ʸ \f2javaoption\fP ϡappletviewer ¹Ԥ Java 󥿥ץ꥿ 1 ĤΰȤϤޤ˥ڡޤƤϤޤʣΰϡưΤ٤ƤƬ \f3\-J\fP ǻϤ뤳Ȥˤʬɬפޤϡѥμ¹ԴĶޤϥ꡼ѤͭǤ 
 .RE
 
 .LP
--- a/jdk/src/linux/doc/man/ja/apt.1	Mon May 02 09:38:22 2011 -0700
+++ b/jdk/src/linux/doc/man/ja/apt.1	Wed Jul 05 17:43:05 2017 +0200
@@ -19,102 +19,133 @@
 ." or visit www.oracle.com if you need additional information or have any
 ." questions.
 ."
-.TH apt 1 "02 Jun 2010"
+.TH apt 1 "14 Apr 2011"
 
 .LP
 .SH "NAME"
 .LP
 .LP
-\f2apt\fP \- 注釈処理ツール
+\f2apt\fP \- ġ
 .LP
-.SH "形式"
+.SH ""
 .LP
 .LP
-\f2apt [\-classpath \fP\f2classpath\fP] [\-sourcepath \f2sourcepath\fP] [\-d \f2directory\fP] [\-s \f2directory\fP] [\-factorypath \f2path\fP] [\-factory \f2class\fP] [\-print] [\-nocompile] [\-A\f2key\fP[\f2=val\fP] ...][\f2javac option\fP] sourcefiles [@files]
+\f2apt [\-classpath \fP\f2classpath\fP] [\-sourcepath \f2sourcepath\fP] [\-d \f2directory\fP] [\-s \f2directory\fP] [\-factorypath \f2path\fP] [\-factory \f2class\fP] [\-print] [\-nocompile] [\-A\f2key\fP[\f2=val\fP] ...] [\f2javac option\fP] sourcefiles [@files]
 .LP
-.SH "パラメータ"
+.SH "ѥ᡼"
 .LP
 .LP
-オプションは順不同です。特定のオプションに適用されるパラメータについては、下記の「オプション」を参照してください。
+ץλ˷ޤϤޤΥץŬѤѥ᡼ˤĤƤϡΡ֥ץפ򻲾ȤƤ
 .LP
 .RS 3
 .TP 3
 sourcefiles 
-ゼロ、1 つ、または複数の処理対象のソースファイル 
+1 ġޤʣνоݤΥե 
 .TP 3
 @files 
-ソースファイルまたは他のオプションを一覧表示する 1 つまたは複数のファイル 
+եޤ¾Υץɽ 1 ĤޤʣΥե 
 .RE
 
 .LP
-.SH "説明"
+.SH ""
 .LP
 .LP
-注釈処理ツール \f2apt\fP は、新しいリフレクト API とサポートインフラストラクチャーから構成され、プログラム注釈を処理します。\f2apt\fP リフレクト API は、 構築時のソースベースで、プログラム構造に関する読み取り専用ビューを提供します。これらのリフレクト API は、総称を追加した後に、Java(TM) プログラミング言語の型システムを正しくモデル化するように設計されています。最初に、\f2apt\fP は、新しいソースコードと他のファイルを作成する注釈プロセッサを実行します。次に、\f2apt\fP は、元のソースファイルと生成したソースファイルの両方をコンパイルするため、開発が楽になります。ツールとのインタフェースに使用されるリフレクト API などの API は、\f2com.sun.mirror\fP のサブパッケージです。
+ġ \f2apt\fP ϡե쥯 API ȥݡȥե饹ȥ饯㡼鹽졢ץޤ\f2apt\fP ե쥯 API ϡ ۻΥ١ǡץ๽¤˴ؤɤ߼ѥӥ塼󶡤ޤΥե쥯 API ϡΤɲäˡJava(TM) ץߥ󥰸ηƥǥ벽褦߷פƤޤǽˡ\f2apt\fP ϡɤ¾Υեץå¹Ԥޤˡ\f2apt\fP ϡΥեեξ򥳥ѥ뤹뤿ᡢȯڤˤʤޤġȤΥ󥿥ե˻Ѥե쥯 API ʤɤ API ϡ\f2com.sun.mirror\fP Υ֥ѥåǤ
 .LP
 .LP
-ツールの機能に関する詳細と、\f2apt\fP を使用した開発方法については、
+ġεǽ˴ؤܺ٤ȡ\f2apt\fP ѤȯˡˤĤƤϡ
 .na
-\f4「\fP\f4apt\fP\f3 入門」\fP @
+\f4apt \fP @
 .fi
-http://java.sun.com/javase/6/docs/technotes/guides/apt/GettingStarted.htmlを参照してください。
+http://java.sun.com/javase/6/docs/technotes/guides/apt/GettingStarted.html򻲾ȤƤ
 .LP
 .RS 3
 .TP 3
-注: 
-\f2apt\fP の機能は、\f2javac(1)\fP ツールの一部となった注釈処理インフラストラクチャーに組み込まれ、すべての Java コンパイラで使用できるように標準化されました。この新しいインフラストラクチャーは、言語モデルおよび Java プラットフォームの一部となった注釈処理 API に依存します。注釈プロセッサの開発は、新しい API および \f2javac\fP ツールに基づいて行うようお勧めします。 
+: 
+\f2apt\fP εǽϡ\f2javac(1)\fP ġΰȤʤäե饹ȥ饯㡼Ȥ߹ޤ졢٤Ƥ Java ѥǻѤǤ褦ɸಽޤοե饹ȥ饯㡼ϡǥ뤪 Java ץåȥեΰȤʤä API ˰¸ޤץåγȯϡ API  \f2javac\fP ġ˴ŤƹԤ褦ᤷޤ 
 .RE
 
 .LP
-.SH "オプション"
+.SH "ץ"
 .LP
 .SS 
-apt 固有のオプション
+apt ͭΥץ
 .LP
 .RS 3
 .TP 3
 \-s dir 
-プロセッサの生成するソースファイルを置くディレクトリルートを指定します。 ファイルは、パッケージの名前空間に基づいてサブディレクトリに置かれます。 
+ץå륽ե֤ǥ쥯ȥ롼Ȥꤷޤ եϡѥå֤̾˴Ťƥ֥ǥ쥯ȥ֤ޤ 
 .TP 3
 \-nocompile 
-ソースファイルをクラスファイルにコンパイルしません。 
+ե򥯥饹ե˥ѥ뤷ޤ 
 .TP 3
 \-print 
-指定したタイプのテキスト表現を出力します。 注釈処理またはコンパイルは行いません。 
+ꤷפΥƥɽϤޤ ޤϥѥϹԤޤ 
 .TP 3
 \-A[key[=val]] 
-注釈プロセッサへ渡すオプションです。 このオプションは、\f2apt\fP が直接解釈するのではなく、それぞれのプロセッサによって使用できるように変えられます。 
+ץåϤץǤ Υץϡ\f2apt\fP ľ᤹ܲΤǤϤʤ줾ΥץåˤäƻѤǤ褦Ѥޤ 
 .TP 3
 \-factorypath path 
-注釈プロセッサファクトリを検索する場所を指定します。 このオプションを使用する場合、クラスパスのファクトリは検索されません。 
+ץåեȥ򸡺ꤷޤ ΥץѤ硢饹ѥΥեȥϸޤ 
 .TP 3
 \-factory classname 
-使用する注釈プロセッサファクトリの名前です。 デフォルトの検出プロセスを省略します。 
+Ѥץåեȥ̾Ǥ ǥեȤθХץάޤ 
+.TP 3
+\-version 
+СϤޤ 
+.TP 3
+\-X 
+ɸ४ץ˴ؤɽޤ 
 .RE
 
 .LP
 .SS 
-javac と共用するオプション
+javac ȶѤ륪ץ
 .LP
 .RS 3
 .TP 3
 \-d dir 
-プロセッサと javac 生成のクラスファイルを置く場所を指定します。 
+ץå javac Υ饹ե֤ꤷޤ 
 .TP 3
-\-cp path or \-classpath path 
-ユーザークラスファイルと注釈プロセッサファクトリを検索する場所を指定します。\f2\-factorypath\fP が指定されている場合、クラスパスのファクトリは検索されません。 
+\-cp path ޤ \-classpath path 
+桼饹եץåեȥ򸡺ꤷޤ\f2\-factorypath\fP ꤵƤ硢饹ѥΥեȥϸޤ 
 .RE
 
 .LP
 .LP
-\f2javac\fP オプションの詳細については、javac(1) のマニュアルページを参照してください。
+\f2javac\fP ץξܺ٤ˤĤƤϡjavac(1) Υޥ˥奢ڡ򻲾ȤƤ
 .LP
-.SH "注"
+.SS 
+ɸ४ץ
 .LP
+.RS 3
+.TP 3
+\-XListAnnotationTypes 
+η˸Фꥹ. 
+.TP 3
+\-XListDeclarations 
+ꤪ󥯥롼ɤꥹ. 
+.TP 3
+\-XPrintAptRounds 
+ӺƵŪ \f2apt\fP 饦ɤ˴ؤϤ. 
+.TP 3
+\-XPrintFactoryInfo 
+׵᤹եȥ˴ؤϤ. 
+.TP 3
+\-XclassesAsDecls 
+饹եȥեξ򡢽оݤȤƽޤ 
+.RE
+
 .LP
-\f2apt\fP の機能は、\f2javac\fP により提供される標準注釈処理インフラストラクチャーに組み込まれました。今後の JDK リリースでは、\f2apt\fP および関連する API のサポートが中止する可能性があります。
 .LP
-.SH "関連項目"
+\f3\fP: ɸ४ץʤΤǡͽʤѹǽޤ
+.LP
+.SH ""
+.LP
+.LP
+\f2apt\fP εǽϡ\f2javac\fP ˤ󶡤ɸե饹ȥ饯㡼Ȥ߹ޤޤ JDK ꡼Ǥϡ\f2apt\fP ӴϢ API ΥݡȤߤǽޤ
+.LP
+.SH "Ϣ"
 .LP
 .RS 3
 .TP 2
--- a/jdk/src/linux/doc/man/ja/extcheck.1	Mon May 02 09:38:22 2011 -0700
+++ b/jdk/src/linux/doc/man/ja/extcheck.1	Wed Jul 05 17:43:05 2017 +0200
@@ -19,22 +19,16 @@
 ." or visit www.oracle.com if you need additional information or have any
 ." questions.
 ."
-.TH extcheck 1 "02 Jun 2010"
+.TH extcheck 1 "14 Apr 2011"
 
 .LP
-.SH "名前"
-extcheck \- jar の競合検出ユーティリティー
+.SH "̾"
+extcheck \- jar ζ縡Х桼ƥƥ
 .LP
-.RS 3
-
 .LP
+\f3extcheck\fP ϡåȤ jar եȸߥ󥹥ȡ뤵Ƥĥǽ jar ե֤ΥСζ򸡽Фޤ
 .LP
-\f3extcheck\fP は、ターゲットの jar ファイルと現在インストールされている拡張機能の jar ファイル間のバージョンの競合を検出します。
-.LP
-.RE
-.SH "形式"
-.LP
-
+.SH ""
 .LP
 .nf
 \f3
@@ -45,39 +39,33 @@
 .fi
 
 .LP
-.SH "説明"
+.SH ""
 .LP
-
 .LP
+\f3extcheck\fP 桼ƥƥϡꤵ줿 Jar եΥȥ뤪ӥС Java(TM) 2 SDK ˥󥹥ȡ뤵Ƥĥǽȶ礷Ƥʤåޤĥǽ򥤥󥹥ȡ뤹ˡΥ桼ƥƥȤäơСƱ꿷ĥǽǤ˥󥹥ȡ뤵ƤʤɤĴ٤뤳ȤǤޤ
 .LP
-\f3extcheck\fP ユーティリティーは、指定された Jar ファイルのタイトルおよびバージョンが Java(TM) 2 SDK にインストールされている拡張機能と競合していないかをチェックします。拡張機能をインストールする前に、このユーティリティーを使って、バージョンが同じか、より新しい拡張機能がすでにインストールされていないかどうかを調べることができます。
 .LP
+\f3extcheck\fP 桼ƥƥϡtargetfile.jar եΥޥ˥եΥإå \f2Specification\-title\fP  \f2Specification\-version\fP 򡢳ĥǽǥ쥯ȥ˸ߥ󥹥ȡ뤵Ƥ \f2٤Ƥ Jar ե\fP бإåӤޤǥեȤǤϡĥǽǥ쥯ȥϡ\f2jre/lib/ext\fP Ǥ\f3extcheck\fP 桼ƥƥϡ\f2java.lang.Package.isCompatibleWith\fP ᥽åɤƱͤˡǥСֹӤޤ
 .LP
-\f3extcheck\fP ユーティリティーは、\f2targetfile.jar\fP ファイルのマニフェスト内のヘッダー \f2Specification\-title\fP および \f2Specification\-version\fP を、拡張機能ディレクトリ内に現在インストールされているすべての Jar ファイル内の対応するヘッダーと比較します。デフォルトでは、拡張機能ディレクトリは、\f2jre/lib/ext\fP です。\f3extcheck\fP ユーティリティーは、\f2java.lang.Package.isCompatibleWith\fP メソッドと同様の方法でバージョン番号を比較します。
 .LP
+礬ФʤΥ꥿󥳡ɤ \f20\fP Ǥ
 .LP
-競合が検出されない場合のリターンコードは \f20\fP です。
 .LP
+ĥǽǥ쥯ȥΤ줫 jar եΥޥ˥եȤˡƱ \f2Specification\-title\fP ƱޤϤ꿷 \f2Specification\-version\fP ֹ椬ϡǤʤ顼ɤ֤ޤ \f2targetfile.jar\fP Υޥ˥եȤ \f2Specification\-title\fP ޤ \f2Specification\-version\fP °ʤ⡢Ǥʤ顼ɤ֤ޤ
 .LP
-拡張機能ディレクトリ内のいずれかの jar ファイルのマニフェストに、同一の \f2Specification\-title\fP、および同一またはより新しい \f2Specification\-version\fP 番号がある場合は、ゼロでないエラーコードが返されます。\f2targetfile.jar\fP のマニフェストに \f2Specification\-title\fP または \f2Specification\-version\fP 属性がない場合も、ゼロでないエラーコードが返されます。
-.LP
-.SH "オプション"
-.LP
-
+.SH "ץ"
 .LP
 .RS 3
 .TP 3
 \-verbose 
-拡張機能ディレクトリ内の Jar ファイルを、チェック時に一覧表示します。また、ターゲット jar ファイルのマニフェストの属性、および競合する jar ファイルについても報告します。 
+ĥǽǥ쥯ȥ Jar ե򡢥å˰ɽޤޤå jar եΥޥ˥եȤ°Ӷ礹 jar եˤĤƤ𤷤ޤ 
 .TP 3
 \-Joption 
-Java 仮想マシンに \f2option\fP を渡します。 \f2option\fP には、java(1)のリファレンスページに記載されているオプションを 1 つ指定します。たとえば、\f3\-J\-Xms48m\fP と指定すると、スタートアップメモリーは 48M バイトに設定されます。 
+Java ۥޥ \f2option\fP Ϥޤ\f2option\fP ˤϡjava(1)Υե󥹥ڡ˵ܤƤ륪ץ 1 ĻꤷޤȤС\f3\-J\-Xms48m\fP Ȼꤹȡȥåץ꡼ 48M ХȤꤵޤ 
 .RE
 
 .LP
-.SH "関連項目"
-.LP
-
+.SH "Ϣ"
 .LP
 .LP
 jar(1)
--- a/jdk/src/linux/doc/man/ja/idlj.1	Mon May 02 09:38:22 2011 -0700
+++ b/jdk/src/linux/doc/man/ja/idlj.1	Wed Jul 05 17:43:05 2017 +0200
@@ -19,20 +19,14 @@
 ." or visit www.oracle.com if you need additional information or have any
 ." questions.
 ."
-.TH idlj 1 "02 Jun 2010"
+.TH idlj 1 "14 Apr 2011"
 
 .LP
-.SH "名前"
-idlj \- IDL\-to\-Java コンパイラ
+.SH "̾"
+idlj \- IDL\-to\-Java ѥ
 .LP
-.RS 3
-
-.LP
-\f3idlj\fP は、指定された IDL ファイルから Java バインディングを生成します。
-.RE
-.SH "形式"
-.LP
-
+\f3idlj\fP ϡꤵ줿 IDL ե뤫 Java Хǥ󥰤ޤ 
+.SH ""
 .LP
 .nf
 \f3
@@ -44,68 +38,118 @@
 
 .LP
 .LP
-\f2idl\-file\fP は、インタフェース定義言語 (IDL) による定義が入ったファイルの名前です。\f2options\fP の順番は任意ですが、\f2idl\-file\fP よりも前に指定しなければなりません。
+\f2idl\-file\fP ϡ󥿥ե (IDL) ˤäե̾Ǥ\f2options\fP ν֤ǤդǤ\f2idl\-file\fP ˻ꤷʤФʤޤ
 .LP
-.SH "説明"
+.SH ""
 .LP
-
 .LP
-IDL\-to\-Java コンパイラは、指定された IDL ファイルについて Java バインディングを生成します。 バインディングの詳細は、
+IDL\-to\-Java ѥϡꤵ줿 IDL եˤĤ Java Хǥ󥰤ޤХǥ󥰤ξܺ٤ϡ
 .na
 \f2OMG IDL to Java Language Mapping Specification\fP @
 .fi
-http://java.sun.com/javase/6/docs/technotes/guides/idl/mapping/jidlMapping.html を参照してください。IDL\-to\-Java コンパイラの以前のリリースの中には、\f2idltojava\fP という名前だったものがあります。 
+http://java.sun.com/javase/6/docs/technotes/guides/idl/mapping/jidlMapping.html 򻲾ȤƤIDL\-to\-Java ѥΰΥ꡼ˤϡ\f2idltojava\fP Ȥ̾äΤޤ
+.LP
 .SS 
-クライアントバインディングおよびサーバーバインディングの発行
+饤ȥХǥ󥰤ӥСХǥ󥰤ȯ
 .LP
-.RS 3
+.LP
+My.idl Ȥ̾ IDL եФ Java Хǥ󥰤ˤϡΥޥɤ¹Ԥޤ
+.LP
+.nf
+\f3
+.fl
+idlj My.idl
+.fl
+\fP
+.fi
 
 .LP
-My.idl という名前の IDL ファイルに対して Java バインディングを生成するには、次のコマンドを実行します。 \f2idlj My.idl\fP
 .LP
-これにより、クライアント側のバインディングが生成されます。 このコマンドは、次のコマンドと等価です。 \f2idlj \fP\f4\-fclient\fP\f2 My.idl\fP
+ˤꡢ饤¦ΥХǥ󥰤ޤΥޥɤϡΥޥɤǤ
 .LP
-クライアント側のバインディングには、サーバー側のスケルトンは組み込まれていません。インタフェースに対してサーバー側のバインディングを生成するには、次のコマンドを実行します。 \f2idlj \fP\f4\-fserver\fP\f2 My.idl\fP
+.nf
+\f3
+.fl
+idlj \fP\f3\-fclient\fP My.idl
+.fl
+.fi
+
 .LP
-サーバー側のバインディングには、クライアント側のバインディングに加えて、スケルトンが組み込まれてています。 これらは、すべて \f2POA\fP (継承モデル) クラスです。クライアント側とサーバー側の両方のバインディングを生成する場合は、次のコマンド (どれも等価) のうちの 1 つを使用します。 \f2idlj \fP\f4\-fclient \-fserver\fP\f2 My.idl\fP
-.br
-\f2idlj \fP\f4\-fall\fP\f2 My.idl\fP
 .LP
+饤¦ΥХǥ󥰤ˤϡС¦ΥȥȤ߹ޤƤޤ󡣥󥿥եФƥС¦ΥХǥ󥰤ˤϡΥޥɤ¹Ԥޤ
 .LP
-サーバー側のモデルとしては、2 つのモデルが可能です。それは、継承モデルと、Tie 委譲モデルです。
+.nf
+\f3
+.fl
+idlj \fP\f3\-fserver\fP My.idl
+.fl
+.fi
+
 .LP
 .LP
-デフォルトのサーバー側のモデルは、「移殖可能サーバント継承モデル」です。\f2My.idl\fP 内で \f2My\fP インタフェースが定義されている場合は、\f2MyPOA.java\fP というファイルが生成されます。\f2My\fP に対してその実装を提供し、この実装は \f2_MyPOA\fP から継承する必要があります。
+С¦ΥХǥ󥰤ˤϡ饤¦ΥХǥ󥰤ΤۤˡȥޤޤƤޤϤ٤ơ \f2POA\fP (ĤޤѾǥ) 饹Ǥ饤¦ȥС¦ξΥХǥ󥰤ϡΥޥ (ɤ) Τ 1 ĤѤޤ
 .LP
+.nf
+\f3
+.fl
+idlj \fP\f3\-fclient \-fserver\fP My.idl
+.fl
+idlj \f3\-fall\fP My.idl
+.fl
+.fi
+
 .LP
-\f2MyPOA.java\fP は 
+.LP
+С¦Dzǽʥǥ 2 ĤޤѾǥ Tie ѾǥǤ
+.LP
+.LP
+ǥեȤΥС¦ΥǥϡְܿǽХȷѾǥפǤ\f2My.idl\fP  \f2My\fP 󥿥եƤϡ\f2MyPOA.java\fP Ȥե뤬ޤμ \f2My\fP 󶡤\f2MyPOA\fP Ѿɬפޤ
+.LP
+.LP
+\f2MyPOA.java\fP  
 .na
 \f2org.omg.PortableServer.Servant\fP @
 .fi
-http://java.sun.com/javase/6/docs/api/org/omg/PortableServer/Servant.html を拡張するストリームベースのスケルトンで、スケルトンが実装する IDL インタフェースに関連付けられている \f2InvokeHandler\fP インタフェースとオペレーションインタフェースを実装します。
+http://java.sun.com/javase/6/docs/api/org/omg/PortableServer/Servant.html ĥ륹ȥ꡼١Υȥǡȥ󤬼 IDL 󥿥ե˴ϢդƤ \f2InvokeHandler\fP 󥿥եȥڥ졼󥤥󥿥եޤ
 .LP
 .LP
 .na
 \f2Portable Object Adapter (POA)\fP @
 .fi
-http://java.sun.com/javase/6/docs/technotes/guides/idl/POA.html の \f2PortableServer\fP モジュールは、ネイティブの \f2Servant\fP 型を定義します。Java プログラミング言語では、\f2Servant\fP 型は、Java の \f2org.omg.PortableServer.Servant\fP クラスにマッピングされています。これはあらゆる POA サーバント実装の基底クラスとなり多数のメソッドを提供します。 これらのメソッドはアプリケーションプログラマが呼び出すだけではなく、POA 自身からも呼び出され、場合によってはサーバントの動作を制御するためにユーザーがオーバーライドすることもあります。
+http://java.sun.com/javase/6/docs/technotes/guides/idl/POA.html  \f2PortableServer\fP ⥸塼ϡͥƥ֤ \f2Servant\fP ޤJava ץߥ󥰸Ǥϡ\f2Servant\fP  Java  \f2org.omg.PortableServer.Servant\fP 饹˥ޥåפޤΥ饹ϡ٤Ƥ POA Хȼδ쥯饹ȤƵǽץꥱץޤƤӽФȤΤǤ뤤ĤΥ᥽åɤΤۤˡPOA ΤΤˤäƸƤӽФ졢ХȤư椹뤿˥桼С饤ɤǤ᥽åɤ󶡤ޤ
 .LP
 .LP
-継承モデルのもう 1 つのオプションは、\f2\-oldImplBase\fP フラグを使用して、J2SE 1.4 より前のバージョンの Java プログラミング言語と互換性のあるサーバー側バインディングを生成することです。ただし、\f2\-oldImplBase\fP フラグを使用するのは、標準的な手法ではありません。これらの API は推奨されていません。このフラグを使用するのは、J2SE 1.3 で記述された既存のサーバーとの互換性を保つ場合だけです。その場合、既存の MAKEFILE を変更して \f2idlj\fP コンパイラに \f2\-oldImplBase\fP フラグを追加する必要があります。 フラグを追加しない場合、POA ベースのサーバー側マッピングが生成されます。下位互換性のあるサーバー側バインディングを生成するには、次のコマンドを使用します。
+ѾǥΤ⤦ 1 ĤΥץϡ\f2\-oldImplBase\fP ե饰Ѥ뤳ȤǡJ2SE 1.4 ΥС Java ץߥ󥰸ȸߴΤ륵С¦Хǥ󥰤뤳ȤǤ\f2\-oldImplBase\fP ե饰ѤΤϡɸŪʼˡǤϤޤ󡣤 API Ϻ侩ˤʤͽǤΥե饰ѤΤϡJ2SE 1.3 ǵҤ줿¸ΥСȤθߴɬפʾǤξˤϴ¸ MAKEFILE ѹ\f2idlj\fP ѥ \f2\-oldImplBase\fP ե饰ɲäɬפޤʤȡPOA ١ΥС¦ޥåԥ󥰤ޤ̸ߴΤ륵С¦Хǥ󥰤ˤϡΥޥɤѤޤ
 .LP
-\f2idlj \fP\f4\-fclient \-fserver\fP\f2 \fP\f4\-oldImplBase\fP\f2 My.idl\fP
-.br
-\f2idlj \fP\f4\-fall\fP\f2 \fP\f4\-oldImplBase\fP\f2 My.idl\fP
+.nf
+\f3
+.fl
+idlj \fP\f3\-fclient \-fserver\fP \f3\-oldImplBase\fP My.idl
+.fl
+idlj \f3\-fall\fP \f3\-oldImplBase\fP My.idl
+.fl
+.fi
+
 .LP
-\f2My.idl\fP 内で \f2My\fP インタフェースが定義されている場合は、\f2_MyImplBase.java\fP というファイルが生成されます。\f2My\fP に対してその実装を提供し、この実装は \f2_MyImplBase\fP から継承しなければなりません。  
 .LP
-もう 1 つのサーバー側モデルは、Tie モデルと呼ばれるものです。このサーバー側モデルは、委譲モデルです。Tie とスケルトンを同時に生成することはできないため、それらは別々に生成しなければなりません。次のコマンドによって、Tie モデル用のバインディングが生成されます。
+\f2My.idl\fP  \f2My\fP 󥿥եƤϡ\f2_MyImplBase.java\fP Ȥե뤬ޤ\f2My\fP ФƤμ󶡤μ \f2_MyImplBase\fP ѾʤФʤޤ
 .LP
-\f2idlj \fP\f4\-fall\fP\f2 My.idl\fP
-.br
-\f2idlj \fP\f4\-fallTIE\fP\f2 My.idl\fP
 .LP
-\f2My\fP というインタフェースの場合、上記の 2 番目のコマンドにより、\f2MyPOATie.java\fP が生成されます。\f2MyPOATie\fP のコンストラクタは、\f2delegate\fP を取ります。この例では、デフォルトの POA モデルを使用しているため、コンストラクタにも \f2poa\fP が必要です。\f2delegate\fP に対して実装を提供しなければなりませんが、この実装は \f2MyOperations\fP インタフェースから継承する必要があるだけで、その他のクラスから継承する必要はありません。しかし、この実装を ORB と一緒に使用するには、\f2MyPOATie\fP 内で実装をラップしなければなりません。たとえば、次のようにします。  
+⤦ 1 ĤΥС¦ǥϡTie ǥȸƤФΤǤΥС¦ǥϡѾǥǤTie ȥȥƱ뤳ȤϤǤʤᡢ̡ʤФʤޤ󡣼ΥޥɤˤäơTie ǥѤΥХǥ󥰤ޤ
+.LP
+.nf
+\f3
+.fl
+idlj \fP\f3\-fall\fP My.idl
+.fl
+idlj \f3\-fallTIE\fP My.idl
+.fl
+.fi
+
+.LP
+.LP
+\f2My\fP Ȥ󥿥եξ硢嵭 2 ܤΥޥɤˤꡢ\f2MyPOATie.java\fP ޤ\f2MyPOATie\fP Υ󥹥ȥ饯ϡ\f2delegate\fP ޤǤϡǥեȤ POA ǥѤƤ뤿ᡢ󥹥ȥ饯ˤ \f2poa\fP ɬפǤ\f2delegate\fP ФƼ󶡤ʤФʤޤ󤬡μ \f2MyOperations\fP 󥿥եѾɬפǡ¾Υ饹ѾɬפϤޤ󡣤μ ORB Ȱ˻Ѥˤϡ\f2MyPOATie\fP ǼåפʤФʤޤ󡣤ȤСΤ褦ˤޤ
+.LP
 .nf
 \f3
 .fl
@@ -143,16 +187,24 @@
 .fi
 
 .LP
-他の実装から継承しなければならない場合、標準の継承モデルではなく Tie モデルを使用することがあります。Java の場合は、インタフェースの継承の個数に制限はありませんが、クラスの継承に使用できるスロットは 1 つだけです。継承モデルを使用した場合は、そのスロットが占有されます。Tie モデルを使用した場合は、そのスロットが使用されず、ユーザーが独自の目的で使用することができます。ただし、間接参照のレベルが 1 つ導入されるという欠点があります。つまり、メソッドを呼び出すときに余分なメソッド呼び出しが発生します。 
 .LP
-IDL のバージョンから J2SE 1.4 より前のバージョンの Java 言語へのマッピングと互換性のある、サーバー側の Tie モデルのバインディングを生成するには、次のコマンドを使用します。
+¾μѾʤФʤʤ硢ɸηѾǥǤϤʤ Tie ǥѤ뤳ȤޤJava ξϡ󥿥եηѾθĿ¤Ϥޤ󤬡饹ηѾ˻ѤǤ륹åȤ 1 ĤǤѾǥѤϡΥåȤͭޤTie ǥѤϡΥåȤѤ줺桼ȼŪǻѤ뤳ȤǤޤˡˤϡΥ٥뤬 1 ƳȤޤ᥽åɤƤӽФȤˡ;ʬʥ᥽åɸƤӽФ 1 ȯޤ
 .LP
-\f2idlj \fP\f4\-oldImplBase\fP\f2 \fP\f4\-fall\fP\f2 My.idl\fP
-.br
-\f2idlj \fP\f4\-oldImplBase\fP\f2 \fP\f4\-fallTIE\fP\f2 My.idl\fP
 .LP
+IDL ΥС󤫤 J2SE 1.4 ΥС Java ؤΥޥåԥ󥰤ȸߴΤ롢С¦ Tie ǥΥХǥ󥰤ˤϡΥޥɤѤޤ
 .LP
-\f2My\fP というインタフェースの場合、これにより \f2My_Tie.java\fP が生成されます。\f2My_Tie\fP のコンストラクタは、\f2impl\fP を取ります。\f2impl\fP に対して実装を提供しなければなりませんが、その実装は \f2HelloOperations\fP インタフェースから継承する必要があるだけで、その他のクラスから継承する必要はありません。しかし、この実装を ORB と一緒に使用するには、\f2My_Tie\fP 内で実装をラップしなければなりません。たとえば、次のようにします。
+.nf
+\f3
+.fl
+idlj \fP\f3\-oldImplBase\fP \f3\-fall\fP My.idl
+.fl
+idlj \f3\-oldImplBase\fP \f3\-fallTIE\fP My.idl
+.fl
+.fi
+
+.LP
+.LP
+\f2My\fP Ȥ󥿥եξ硢ˤ \f2My_Tie.java\fP ޤ\f2My_Tie\fP Υ󥹥ȥ饯ϡ\f2impl\fP ޤ\f2impl\fP ФƼ󶡤ʤФʤޤ󤬡μ \f2HelloOperations\fP 󥿥եѾɬפǡ¾Υ饹ѾɬפϤޤ󡣤μ ORB Ȱ˻Ѥˤϡ\f2My_Tie\fP ǼåפʤФʤޤ󡣤ȤСΤ褦ˤޤ
 .LP
 .nf
 \f3
@@ -183,201 +235,383 @@
 .fi
 
 .LP
-.RE
 .SS 
-発行されたファイルの代替位置の指定
+ȯԤ줿եذ֤λ
 .LP
-.RS 3
+.LP
+ȯԤ줿ե򥫥ȥǥ쥯ȥʳΥǥ쥯ȥ֤ˤϡΤ褦ʥޥɤǥѥƤӽФޤ
+.LP
+.nf
+\f3
+.fl
+idlj \fP\f3\-td /altdir\fP My.idl
+.fl
+.fi
 
 .LP
-発行されたファイルをカレントディレクトリ以外のディレクトリに置くには、次のようなコマンドでコンパイラを呼び出します。 
-.RS 3
+.LP
+\f2My\fP 󥿥եξ硢Хǥ󥰤ϡ\f2./My.java\fP ǤϤʤ\f2/altdir/My.java\fP ʤɤȯԤޤ
+.LP
+.SS 
+󥯥롼ɥեذ֤λ
+.LP
+.LP
+\f2My.idl\fP ˤ⤦ 1 Ĥ IDL ե \f2MyOther.idl\fP 󥯥롼ɤƤ硢ѥϡǥ쥯ȥ \f2MyOther.idl\fP Τꤷޤ⤷Υե뤬Ȥ \f2/includes\fP ˤϡΤ褦ʥޥɤǥѥƤӽФޤ
+.LP
+.nf
+\f3
+.fl
+idlj \fP\f3\-i /includes\fP My.idl
+.fl
+.fi
 
 .LP
-\f2idlj \fP\f4\-td /altdir\fP\f2 My.idl\fP
-.RE
-\f2My\fP インタフェースの場合、バインディングは、\f2./My.java\fP ではなく、\f2/altdir/My.java\fP などに発行されます。
-.RE
-.SS 
-インクルードファイルの代替位置の指定
 .LP
-.RS 3
+ޤ⤷ \f2My.idl\fP ˡȤ \f2/moreIncludes\fP ˤ \f2Another.idl\fP ⥤󥯥롼ɤƤΤǤСΤ褦ʥޥɤǥѥƤӽФޤ
+.LP
+.nf
+\f3
+.fl
+idlj \fP\f3\-i /includes \-i /moreIncludes\fP My.idl
+.fl
+.fi
 
 .LP
-\f2My.idl\fP にもう 1 つの IDL ファイル \f2MyOther.idl\fP がインクルードされている場合、コンパイラは、ローカルディレクトリに \f2MyOther.idl\fP があるものと想定します。もしそのファイルが、たとえば \f2/includes\fP にある場合は、次のようなコマンドでコンパイラを呼び出します。 \f2idlj \fP\f4\-i /includes\fP\f2 My.idl\fP
 .LP
-また、もし \f2My.idl\fP に、たとえば \f2/moreIncludes\fP にある \f2Another.idl\fP もインクルードされているのであれば、次のようなコマンドでコンパイラを呼び出します。 \f2idlj \fP\f4\-i /includes \-i /moreIncludes\fP\f2 My.idl\fP
+Τ褦ʷǥ󥯥롼ɤꤹȡޥɤĹʣˤʤޤǡ󥯥롼ɥե򸡺򥳥ѥ˻ؼ뤿̤ˡѰդƤޤˡϡĶѿιͤȻƤޤCLASSPATH ˥ꥹȤƤǥ쥯ȥ \f2idl.config\fP Ȥ̾Υեޤ \f2idl.config\fP ˡΤ褦ʷιԤޤ
 .LP
-このような形式でインクルードを指定すると、コマンドが長くて複雑になります。 そこで、インクルードファイルを検索する場所をコンパイラに指示するための別の方法が用意されています。この方法は、環境変数の考え方と似ています。CLASSPATH にリストされているディレクトリ内に \f2idl.config\fP という名前のファイルを作成します。その \f2idl.config\fP の中に、次のような形式の行を入れます。  \f2includes=/includes;/moreIncludes\fP
-.LP
-コンパイラは、このファイルを検索し、インクルードリストを読み込みます。この例では、ディレクトリの間の区切り文字はセミコロン (;) になっています。この区切り文字は、プラットフォームによって異なります。たとえば、Windows プラットフォームではセミコロンですが、Unix プラットフォームではコロンです。 \f2インクルード\fPの詳細については、
-.na
-\f2CLASSPATH の設定\fP @
+.nf
+\f3
+.fl
+includes=/includes;/moreIncludes
+.fl
+\fP
 .fi
-http://java.sun.com/javase/6/docs/technotes/tools/index.html#general を参照してください。
-.RE
-.SS 
-インクルードファイルに対するバインディングの発行
-.LP
-.RS 3
 
 .LP
-デフォルトでは、コマンド行に指定した IDL ファイルで定義されているインタフェースや構造体などについてのみ、Java バインディングが生成されます。インクルードされたファイルで定義されている型については、Java バインディングは生成されません。たとえば、次の 2 つの IDL ファイルについて考えてみましょう。   \f4My.idl\fP
 .LP
-\f2#include <MyOther.idl>\fP
-.br
-\f2interface My\fP
-.br
-\f2{\fP
-.br
-\f2};\fP
-.br
-\f4MyOther.idl\fP 
+ѥϡΥե򸡺󥯥롼ɥꥹȤɤ߹ߤޤǤϡǥ쥯ȥδ֤ζڤʸϥߥ (;) ˤʤäƤޤζڤʸϡץåȥեˤäưۤʤޤȤСWindows ץåȥեǤϥߥǤUnix ץåȥեǤϥǤ \f2󥯥롼\fPξܺ٤ˤĤƤϡ
+.na
+\f2CLASSPATH \fP @
+.fi
+http://java.sun.com/javase/6/docs/technotes/tools/index.html#general 򻲾ȤƤ
 .LP
-\f2interface MyOther\fP
-.br
-\f2{\fP
-.br
-\f2};\fP\  
+.SS 
+󥯥롼ɥեФХǥ󥰤ȯ
 .LP
-次のコマンドでは、\f2My\fP に対する Java バインディングだけが生成されます。 \f2idlj My.idl\fP
 .LP
-\f2My.idl\fP で定義されている型と、\f2My.idl\fP にインクルードされたファイル (この例では \f2MyOther.idl\fP) で定義されている型すべてについて Java バインディングを生成するには、次のコマンドを使用します。 \f2idlj \fP\f4\-emitAll\fP\f2 My.idl\fP
+ǥեȤǤϡޥɹԤ˻ꤷ IDL եƤ륤󥿥ե乽¤ΤʤɤˤĤƤΤߡJava Хǥ󥰤ޤ󥯥롼ɤ줿եƤ뷿ˤĤƤϡJava Хǥ󥰤ޤ󡣤ȤС 2 Ĥ IDL եˤĤƹͤƤߤޤ礦
 .LP
-このデフォルトの規則に関して注意しなければならないことがあります。グローバルスコープに指定した \f2#include\fP 文は、前述のとおりに処理されます。これらの \f2#include\fP 文は、インポート文と見なすことができます。それに対して、他の定義に囲まれたスコープ内に指定した \f2#include\fP 文は、本当の意味での \f2#include\fP 文として処理されます。 つまり、インクルードされたファイルにあるコードが、元のファイルにそのまま指定されているかのように処理され、それに対して Java バインディングが発行されます。次に例を示します。   \f4My.idl\fP
-.LP
-\f2#include <MyOther.idl>\fP
-.br
-\f2interface My\fP
-.br
-\f2{\fP
-.br
-\f2\  #include <Embedded.idl>\fP
-.br
-\f2};\ \fP  \f4MyOther.idl\fP
-.LP
-\f2interface MyOther\fP
-.br
-\f2{\fP
-.br
-\f2};\ \fP  \f4Embedded.idl\fP
-.LP
-\f2enum E {one, two, three};\fP\  
-.LP
-このとき、次のコマンドを実行すると、 \f2idlj My.idl\fP
-.LP
-次のような一連の Java ファイルが生成されます。 \f2./MyHolder.java\fP
-.br
-\f2./MyHelper.java\fP
-.br
-\f2./_MyStub.java\fP
-.br
-\f2./MyPackage\fP
-.br
-\f2./MyPackage/EHolder.java\fP
-.br
-\f2./MyPackage/EHelper.java\fP
-.br
-\f2./MyPackage/E.java\fP
-.br
-\f2./My.java\fP
-.LP
-インポート文と見なされる \f2#include\fP に定義されているため、\f2MyOther.java\fP は生成されません。ただし、本当の意味での \f2#include\fP で定義されているため、\f2E.java\fP は生成されます。さらに、\f2Embedded.idl\fP が \f2My\fP インタフェースのスコープ内にインクルードされていたため、\f2My\fP のスコープ内 (つまり、\f2MyPackage\fP 内) に生成されています。 
-.LP
-上記の例で \f2\-emitAll\fP フラグを使用すれば、インクルードされたすべてのファイルにあるすべての型が発行されます。
-.LP
-.RE
-.SS 
-パッケージの接頭辞の挿入
-.LP
-.RS 3
 
 .LP
-ABC という名前の会社のために作業していて、次のような IDL ファイルを構築したとしましょう。   
-.br
-\f4Widgets.idl\fP 
 .LP
-\f2module Widgets\fP
-.br
-\f2{\fP
-.br
-\f2\  interface W1 {...};\fP
-.br
-\f2\  interface W2 {...};\fP
-.br
-\f2};\fP\  
+\f4My.idl\fP
 .LP
-このファイルに対して IDL\-to\-Java コンパイラを実行すると、\f2W1\fP および \f2W2\fP に対する Java バインディングが \f2Widgets\fP パッケージ内に生成されます。しかし、業界の慣例によると、会社のパッケージは、\f2com.<会社名>\fP という名前のパッケージ内に置くことになっています。そのため、\f2Widgets\fP パッケージでは不十分です。慣例に従うには、パッケージを \f2com.abc.Widgets\fP にする必要があります。このパッケージ接頭辞を \f2Widgets\fP モジュールに付加するには、次のコマンドを実行します。 \f2idlj \fP\f4\-pkgPrefix Widgets com.abc\fP\f2 Widgets.idl\fP
-.LP
-\f2Widgets.idl\fP をインクルードしている IDL ファイルがある場合は、そのコマンドにも \f2\-pkgPrefix\fP フラグが必要です。このフラグを指定しないと、その IDL ファイルは、\f2com.abc.Widgets\fP パッケージではなく、\f2Widgets\fP パッケージを検索することになります。 
-.LP
-接頭辞が必要なパッケージがいくつもある場合は、前述の \f2idl.config\fP ファイルで接頭辞を指定するのが簡単です。パッケージの接頭辞を指定する行は、それぞれ次の形式で記述します。
-.LP
-\f2PkgPrefix.<type>=<prefix>\fP
-.LP
-したがって、上記の例の場合は、次のように記述します。  \f2PkgPrefix.Widgets=com.abc\fP
-.LP
-.LP
-このオプションを使用しても、リポジトリ ID は影響を受けません。
-.LP
-.RE
-.SS 
-コンパイル前のシンボルの定義
-.LP
-.RS 3
+.nf
+\f3
+.fl
+#include <MyOther.idl>
+.fl
+interface My
+.fl
+{
+.fl
+};
+.fl
+\fP
+.fi
 
 .LP
-コンパイル用のシンボルが IDL ファイル内で定義されていない場合は、そのシンボルを定義する必要があります。 これは、たとえば、バインディング内にデバッグコードを組み入れるときに使用します。次のコマンドは、 \f2idlj \fP\f4\-d\fP\f2 MYDEF My.idl\fP
-.LP
-\f2My.idl\fP 内に \f2#define MYDEF\fP という行を指定した場合と等価です。
-.RE
-.SS 
-既存のバインディングの保持
-.LP
-.RS 3
 
 .LP
-Java バインディングファイルがすでに存在する場合は、\f2\-keep\fP フラグを指定すると、コンパイラによる上書きを回避できます。デフォルトでは、すでに存在するかどうかにかかわらず、すべてのファイルが生成されます。これらのファイルをカスタマイズした場合 (ただし、それらの内容が正確であるとき以外はカスタマイズは避ける)、\f2\-keep\fP オプションは有用です。次のコマンドは、 \f2idlj \fP\f4\-keep\fP\f2 My.idl\fP
 .LP
-クライアント側のバインディングで、まだ存在しないものをすべて発行します。
-.RE
-.SS 
-コンパイルの進捗状況の表示
+\f4MyOther.idl\fP
 .LP
-.RS 3
+.nf
+\f3
+.fl
+interface MyOther
+.fl
+{
+.fl
+};
+.fl
+\fP
+.fi
 
 .LP
-IDL\-to\-Java コンパイラは、実行の各段階で状態メッセージを生成します。「冗長」モード (メッセージが多いモード) にするには、\f2\-v\fP オプションを使用します。 \f2idlj \fP\f4\-v\fP\f2 My.idl\fP
-.LP
-デフォルトでは、コンパイラは冗長モードでは実行されません。
-.RE
-.SS 
-バージョン情報の表示
-.LP
-.RS 3
 
 .LP
 .LP
-IDL\-to\-Java コンパイラのビルドバージョンを表示するには、コマンド行で \f2\-version\fP オプションを指定します。
+ΥޥɤǤϡ\f2My\fP Ф Java Хǥ󥰤ޤ
 .LP
+.nf
+\f3
+.fl
+idlj My.idl
+.fl
+\fP
+.fi
+
 .LP
-\f2idlj \-version\fP
 .LP
+\f2My.idl\fP Ƥ뷿ȡ\f2My.idl\fP ˥󥯥롼ɤ줿ե (Ǥ \f2MyOther.idl\fP) Ƥ뷿٤ƤˤĤ Java Хǥ󥰤ˤϡΥޥɤѤޤ
 .LP
-バージョン情報は、コンパイラによって生成されたバインディング内にも書き込まれています。このオプションをコマンド行に指定すると、それ以外のオプションを指定しても、すべて無視されます。
+.nf
+\f3
+.fl
+idlj \fP\f3\-emitAll\fP My.idl
+.fl
+.fi
+
 .LP
-.RE
-.SH "オプション"
+.LP
+ΥǥեȤε§˴ؤդʤФʤʤȤޤХ륹פ˻ꤷ \f2#include\fP ʸϡҤΤȤ˽ޤ \f2#include\fP ʸϡݡʸȸʤȤǤޤФơ¾˰Ϥޤ줿˻ꤷ \f2#include\fP ʸϡΰ̣Ǥ \f2#include\fP ʸȤƽޤĤޤꡢ󥯥롼ɤ줿եˤ륳ɤΥեˤΤޤ޻ꤵƤ뤫Τ褦˽졢Ф Java Хǥ󥰤ȯԤޤϤǤ
 .LP
 
 .LP
+.LP
+\f4My.idl\fP
+.LP
+.nf
+\f3
+.fl
+#include <MyOther.idl>
+.fl
+interface My
+.fl
+{
+.fl
+  #include <Embedded.idl>
+.fl
+};
+.fl
+\fP
+.fi
+
+.LP
+
+.LP
+.LP
+\f4MyOther.idl\fP
+.LP
+.nf
+\f3
+.fl
+interface MyOther
+.fl
+{
+.fl
+};
+.fl
+\fP
+.fi
+
+.LP
+
+.LP
+.LP
+\f4Embedded.idl\fP
+.LP
+.nf
+\f3
+.fl
+enum E {one, two, three};
+.fl
+\fP
+.fi
+
+.LP
+
+.LP
+.LP
+ΤȤΥޥɤ¹Ԥȡ
+.LP
+.nf
+\f3
+.fl
+idlj My.idl
+.fl
+\fP
+.fi
+
+.LP
+.LP
+Τ褦ʰϢ Java ե뤬ޤ
+.LP
+.nf
+\f3
+.fl
+./MyHolder.java
+.fl
+./MyHelper.java
+.fl
+./_MyStub.java
+.fl
+./MyPackage
+.fl
+./MyPackage/EHolder.java
+.fl
+./MyPackage/EHelper.java
+.fl
+./MyPackage/E.java
+.fl
+./My.java
+.fl
+\fP
+.fi
+
+.LP
+.LP
+ݡʸȸʤ \f2#include\fP Ƥ뤿ᡢ\f2MyOther.java\fP ޤ󡣤ΰ̣Ǥ \f2#include\fP Ƥ뤿ᡢ\f2E.java\fP ޤˡ\f2Embedded.idl\fP  \f2My\fP 󥿥եΥ˥󥯥롼ɤƤᡢ\f2My\fP Υ (Ĥޤꡢ\f2MyPackage\fP ) Ƥޤ
+.LP
+.LP
+嵭 \f2\-emitAll\fP ե饰ѤС󥯥롼ɤ줿٤ƤΥեˤ뤹٤ƤηȯԤޤ
+.LP
+.SS 
+ѥåƬ
+.LP
+.LP
+ABC Ȥ̾βҤΤ˺ȤƤơΤ褦 IDL եۤȤޤ礦
+.LP
+
+.LP
+.LP
+\f4Widgets.idl\fP
+.LP
+.nf
+\f3
+.fl
+module Widgets
+.fl
+{
+.fl
+  interface W1 {...};
+.fl
+  interface W2 {...};
+.fl
+};
+.fl
+\fP
+.fi
+
+.LP
+
+.LP
+.LP
+ΥեФ IDL\-to\-Java ѥ¹Ԥȡ\f2W1\fP  \f2W2\fP Ф Java Хǥ󥰤 \f2Widgets\fP ѥåޤȳδˤȡҤΥѥåϡ\f2com.<̾>\fP Ȥ̾Υѥå֤ȤˤʤäƤޤΤᡢ\f2Widgets\fP ѥåǤԽʬǤ˽ˤϡѥå \f2com.abc.Widgets\fP ˤɬפޤΥѥåƬ \f2Widgets\fP ⥸塼ղäˤϡΥޥɤ¹Ԥޤ
+.LP
+.nf
+\f3
+.fl
+idlj \fP\f3\-pkgPrefix Widgets com.abc\fP Widgets.idl
+.fl
+.fi
+
+.LP
+.LP
+\f2Widgets.idl\fP 򥤥󥯥롼ɤƤ IDL ե뤬ϡΥޥɤˤ \f2\-pkgPrefix\fP ե饰ɬפǤΥե饰ꤷʤȡ IDL եϡ\f2com.abc.Widgets\fP ѥåǤϤʤ\f2Widgets\fP ѥå򸡺뤳Ȥˤʤޤ
+.LP
+.LP
+ƬɬפʥѥåĤ⤢ϡҤ \f2idl.config\fP եƬꤹΤñǤѥåƬꤹԤϡ줾켡ηǵҤޤ
+.LP
+.nf
+\f3
+.fl
+PkgPrefix.<type>=<prefix>
+.fl
+\fP
+.fi
+
+.LP
+äơ嵭ξϡΤ褦˵Ҥޤ 
+.nf
+\f3
+.fl
+PkgPrefix.Widgets=com.abc
+.fl
+\fP
+.fi
+
+.LP
+.LP
+ΥץѤƤ⡢ݥȥ ID ϱƶޤ
+.LP
+.SS 
+ѥΥܥ
+.LP
+.LP
+ѥѤΥܥ뤬 IDL եƤʤϡΥܥɬפޤϡȤСХǥ˥ǥХåɤȤȤ˻ѤޤΥޥɤϡ
+.LP
+.nf
+\f3
+.fl
+idlj \fP\f3\-d\fP MYDEF My.idl
+.fl
+.fi
+
+.LP
+.LP
+\f2My.idl\fP  \f2#define MYDEF\fP ȤԤꤷǤ
+.LP
+.SS 
+¸ΥХǥ󥰤ݻ
+.LP
+.LP
+Java Хǥ󥰥ե뤬Ǥ¸ߤϡ\f2\-keep\fP ե饰ꤹȡѥˤ񤭤ǤޤǥեȤǤϡǤ¸ߤ뤫ɤˤ餺٤ƤΥե뤬ޤΥե򥫥ޥ (ƤΤǤȤʳϥޥ򤱤)\-keep ץͭѤǤΥޥɤϡ
+.LP
+.nf
+\f3
+.fl
+idlj \fP\f3\-keep\fP My.idl
+.fl
+.fi
+
+.LP
+.LP
+饤¦ΥХǥ󥰤ǡޤ¸ߤʤΤ򤹤٤ȯԤޤ
+.LP
+.SS 
+ѥοĽɽ
+.LP
+.LP
+IDL\-to\-Java ѥϡ¹ԤγʳǾ֥åޤ־Ĺץ⡼ (å¿⡼) ˤˤϡ\f2\-v\fP ץѤޤ
+.LP
+.nf
+\f3
+.fl
+idlj \fP\f3\-v\fP My.idl
+.fl
+.fi
+
+.LP
+.LP
+ǥեȤǤϡѥϾĹ⡼ɤǤϼ¹Ԥޤ
+.LP
+.SS 
+Сɽ
+.LP
+.LP
+IDL\-to\-Java ѥΥӥɥСɽˤϡޥɹԤ \f2\-version\fP ץꤷޤ
+.LP
+.nf
+\f3
+.fl
+idlj \-version
+.fl
+\fP
+.fi
+
+.LP
+.LP
+Сϡѥˤä줿Хǥˤ񤭹ޤƤޤΥץ򥳥ޥɹԤ˻ꤹȡʳΥץꤷƤ⡢٤̵뤵ޤ
+.LP
+.SH "ץ"
+.LP
 .RS 3
 .TP 3
 \-d symbol 
-このオプションは、IDL ファイルに次のような行を追加した場合と等価です。 
-.RS 3
-
-.LP
+ΥץϡIDL ե˼Τ褦ʹԤɲäǤ 
 .nf
 \f3
 .fl
@@ -385,33 +619,32 @@
 .fl
 \fP
 .fi
-.RE
 .TP 3
 \-emitAll 
-\f2#include\fP ファイル内で定義されているものも含めて、すべての型を発行します。 
+#include ե ƤΤޤơ \f2٤Ƥη\fP ȯԤޤ 
 .TP 3
 \-fside 
-発行するバインディングを定義します。 \f2side\fP は、\f2client\fP、\f2server\fP、\f2serverTIE\fP、\f2all\fP、\f2allTIE\fP のどちらかです。\f2\-fserverTIE\fP または \f2\-fallTIE\fP オプションを指定すると、委譲モデルスケルトンが発行されます。このフラグを指定しなかった場合は、\f2\-fclient\fP が指定されたものと見なされます。 
+ȯԤХǥ󥰤ޤ\f2side\fP  \f2client\fP\f2server\fP\f2serverTIE\fP\f2all\fP\f2allTIE\fP Τ줫ˤʤޤ\f2\-fserverTIE\fP ޤ \f2\-fallTIE\fP ץꤹȡѾǥ륹ȥȯԤޤΥե饰ꤷʤäϡ\f2\-fclient\fP ꤵ줿Τȸʤޤ 
 .TP 3
 \-i include\-path 
-デフォルトでは、インクルードファイルはカレントディレクトリから検索されます。このオプションを指定すると、ほかのディレクトリを追加できます。 
+ǥեȤǤϡ󥯥롼ɥեϥȥǥ쥯ȥ꤫鸡ޤΥץꤹȡۤΥǥ쥯ȥɲäǤޤ 
 .TP 3
 \-keep 
-生成されるファイルがすでに存在している場合は、そのファイルが上書きされません。デフォルトでは、上書きされます。 
+ե뤬Ǥ¸ߤƤϡΥե뤬񤭤ޤ󡣥ǥեȤǤϡ񤭤ޤ 
 .TP 3
 \-noWarn 
-警告メッセージを表示しないようにします。 
+ٹåɽʤ褦ˤޤ 
 .TP 3
 \-oldImplBase 
-v1.4 より前の JDK ORB と互換性のあるスケルトンを生成します。デフォルトでは、POA 継承モデルのサーバー側バインディングが生成されます。このオプションを指定すると、\f2ImplBase\fP 継承モデルのクラスであるサーバー側バインディングが生成されるので、古いバージョンの Java プログラミング言語との下位互換性が得られます。 
+v1.4  JDK ORB ȸߴΤ륹ȥޤǥեȤǤϡPOA ѾǥΥС¦Хǥ󥰤ޤΥץꤹȡ\f2ImplBase\fP ѾǥΥ饹Ǥ륵С¦Хǥ󥰤ΤǡŤС Java ץߥ󥰸Ȥβ̸ߴޤ 
 .TP 3
 \-pkgPrefix type prefix 
-\f2type\fP がファイルスコープで検出された場合は、その型に対して生成されるすべてのファイルについて、生成される Java パッケージ名に \f2prefix\fP という接頭辞が付加されます。\f2type\fP は、トップレベルモジュールの単純名か、どのモジュールよりも外側で定義された IDL 型の単純名のどちらかです。 
+\f2type\fP ե륹פǸФ줿ϡηФ뤹٤ƤΥեˤĤơ Java ѥå̾ \f2prefix\fP ȤƬղäޤ\f2type\fP ϡȥåץ٥⥸塼ñ̾ɤΥ⥸塼⳰¦줿 IDL ñ̾Τɤ餫Ǥ 
 .TP 3
 \-pkgTranslate type package 
-識別子の中にモジュール名 \f2type\fP が検出されると、生成される Java パッケージ内のすべてのファイルについて、識別子の中のその名前が \f2package\fP で置き換えられます。最初に \f2pkgPrefix\fP を変更します。\f2type\fP は、トップレベルのモジュール、またはすべてのモジュールの外部で定義された IDL 型の単純名です。 そして、完全なパッケージ名に正確に一致しなければなりません。 
+̻Ҥ˥⥸塼̾ type Фȡ Java ѥåΤ٤ƤΥեˤĤơ̻ҤΤ̾ package ֤ޤǽ \f2pkgPrefix\fP ѹޤ\f2type\fP ϡȥåץ٥Υ⥸塼롢ޤϤ٤ƤΥ⥸塼γ줿 IDL ñ̾Ǥơʥѥå̾Τ˰פʤФʤޤ 
 .LP
-1 つの識別子の中で複数の変換がマッチする場合は、もっとも長いマッチが選ばれます。たとえば、次のような引数が指定されている場合は、 
+1 Ĥμ̻ҤʣѴޥåϡäȤĹޥåФޤȤСΤ褦ʰꤵƤϡ 
 .nf
 \f3
 .fl
@@ -420,89 +653,85 @@
 \fP
 .fi
 .LP
-次のような変換が実施されます。 
+Τ褦Ѵ»ܤޤ 
 .nf
 \f3
 .fl
-foo          => bar
+foo          =>      bar
 .fl
-foo.boo      => bar.boo
+foo.boo      =>      bar.boo
 .fl
-foo.baz      => buzz.fizz
+foo.baz      =>      buzz.fizz
 .fl
-foo.baz.bar  => buzz.fizz.bar
+foo.baz.bar  =>      buzz.fizz.bar
 .fl
 \fP
 .fi
 .LP
-次のパッケージ名を変換することはできません。 
+Υѥå̾Ѵ뤳ȤϤǤޤ 
 .RS 3
 .TP 2
 o
 \f2org\fP 
 .TP 2
 o
-\f2org.omg\fP、または \f2org.omg\fP のサブパッケージ 
+\f2org.omg\fPޤ \f2org.omg\fP Υ֥ѥå 
 .RE
 .LP
-これらのパッケージ名を変換しようとすると、互換性のないコードが生成されます。 そして、\f2\-pkgTranslate\fP のあとの最初の引数としてそれらのパッケージを使用すると、エラーとして扱われます。  
+Υѥå̾Ѵ褦ȤȡߴΤʤɤޤơ\f2\-pkgTranslate\fP ΤȤκǽΰȤƤΥѥåѤȡ顼Ȥưޤ  
 .TP 3
 \-skeletonName xxx%yyy 
-\f2xxx%yyy\fP が、スケルトンに名前を付けるパターンとして使用されます。デフォルトは、次のとおりです。 
+\f2xxx%yyy\fP ȥ̾դѥȤƻѤޤǥեȤϼΤȤǤ 
 .RS 3
 .TP 2
 o
-\f2POA\fP 基底クラスの場合は「%POA」(\f2\-fserver\fP または \f2\-fall\fP) 
+\f2POA\fP 쥯饹ξϡ%POA(\f2\-fserver\fP ޤ \f2\-fall\fP) 
 .TP 2
 o
-\f2oldImplBase\fP クラスの場合は「_%ImplBase」(\f2\-oldImplBase\fP かつ (\f2\-fserver\fP または \f2\-fall\fP)) 
+\f2oldImplBase\fP 饹ξϡ_%ImplBase(\f2\-oldImplBase\fP  (\f2\-fserver\fP ޤ \f2\-fall\fP)) 
 .RE
 .TP 3
 \-td dir 
-出力ディレクトリとして、カレントディレクトリではなく、\f2dir\fP が使用されます。 
+ϥǥ쥯ȥȤơȥǥ쥯ȥǤϤʤ\f2dir\fP Ѥޤ 
 .TP 3
 \-tieName xxx%yyy 
-このパターンに従って Tie に名前が付けられます。デフォルトは、次のとおりです。 
+Υѥ˽ä Tie ̾դޤǥեȤϼΤȤǤ 
 .RS 3
 .TP 2
 o
-\f2POA\fP Tie 基底クラスの場合は「%POATie」(\f2\-fserverTie\fP または \f2\-fallTie\fP) 
+\f2POA\fP Tie 쥯饹ξϡ%POATie(\f2\-fserverTie\fP ޤ \f2\-fallTie\fP) 
 .TP 2
 o
-\f2oldImplBase\fP Tie クラスの場合は「%_Tie」(\f2\-oldImplBase\fP かつ (\f2\-fserverTie\fP または \f2\-fallTie\fP)) 
+\f2oldImplBase\fP Tie 饹ξϡ%_Tie(\f2\-oldImplBase\fP  (\f2\-fserverTie\fP ޤ \f2\-fallTie\fP)) 
 .RE
 .TP 3
-\-verbose 
-冗長モードになります。 
+\-nowarn, \-verbose 
+Ĺ⡼ɤˤʤޤ 
 .TP 3
 \-version 
-バージョン情報を表示して終了します。 
+Сɽƽλޤ 
 .RE
 
 .LP
-各オプションの詳細については、「説明」のセクションを参照してください。 
-.SH "制約"
-.LP
-
+ƥץξܺ٤ˤĤƤϡפΥ򻲾ȤƤ 
+.SH ""
 .LP
 .RS 3
 .TP 2
 o
-グローバルスコープ内のエスケープされた識別子は、IDL プリミティブ型の \f2Object\fP または \f2ValueBase\fP と同じ綴りであってはなりません。これらの識別子については、シンボルテーブルが事前にロードされており、これらの識別子の再定義を許可すると元の定義が上書きされてしまいます。これは、おそらく恒久的な制約です。 
+Х륹Υפ줿̻ҤϡIDL ץߥƥַ \f2Object\fP ޤ \f2ValueBase\fP Ʊ֤ǤäƤϤʤޤ󡣤μ̻ҤˤĤƤϡܥơ֥뤬˥ɤƤꡢμ̻ҤκĤȸ񤭤Ƥޤޤϡ餯ŪǤ 
 .TP 2
 o
-\f2fixed\fP という IDL 型はサポートされていません。 
+\f2fixed\fP Ȥ IDL ϥݡȤƤޤ 
 .RE
 
 .LP
-.SH "既知の問題点"
-.LP
-
+.SH "Τ"
 .LP
 .RS 3
 .TP 2
 o
-グローバル識別子についてインポートが生成されません。予期されないローカル impl を呼び出すと、例外を受け取ります。 しかし、その原因は、\f2ServerDelegate\fP DSI コード内の \f2NullPointerException\fP にあるようです。 
+Х뼱̻ҤˤĤƥݡȤޤͽʤ impl ƤӽФȡ㳰ޤ θϡ\f2ServerDelegate\fP DSI  \f2NullPointerException\fP ˤ褦Ǥ 
 .RE
 
 .LP
--- a/jdk/src/linux/doc/man/ja/jar.1	Mon May 02 09:38:22 2011 -0700
+++ b/jdk/src/linux/doc/man/ja/jar.1	Wed Jul 05 17:43:05 2017 +0200
@@ -19,104 +19,93 @@
 ." or visit www.oracle.com if you need additional information or have any
 ." questions.
 ."
-.TH jar 1 "02 Jun 2010"
+.TH jar 1 "14 Apr 2011"
 
 .LP
-.SH "名前"
-jar \- Java ARchive ツール
+.SH "̾"
+jar \- Java ARchive ġ
 .LP
-\f3jar\fP は複数のファイルを 1 つの JAR アーカイブファイルに結合します。 
+\f3jar\fP ʣΥե 1 Ĥ JAR ֥ե˷礷ޤ 
 .RS 3
 .TP 2
 o
-形式 
+ 
 .TP 2
 o
-説明 
+ 
 .TP 2
 o
-オプション 

 .TP 2
 o
-コマンド行引数ファイル 
+ޥɹ԰ե 
 .TP 2
 o
-例 
+ 
 .TP 2
 o
-関連項目 

 .RE
 
 .LP
-.SH "形式"
-.LP
-
+.SH ""
 .LP
 .RS 3
 .TP 3
-JAR ファイルの作成 
+JAR եκ 
 \f4jar c\fP\f2[v0Mmfe] [\fP\f2manifest\fP\f2] [\fP\f2jarfile\fP\f2] [\fP\f2entrypoint\fP\f2] [\-C\fP \f2dir\fP\f2]\fP \f2inputfiles\fP \f2[\-J\fP\f2option\fP\f2]\fP 
 .TP 3
-JAR ファイルの更新 
+JAR եι 
 \f4jar u\fP\f2[v0Mmfe] [\fP\f2manifest\fP\f2] [\fP\f2jarfile\fP\f2] [\fP\f2entrypoint\fP\f2] [\-C\fP \f2dir\fP\f2]\fP \f2inputfiles\fP \f2[\-J\fP\f2option\fP\f2]\fP 
 .TP 3
-JAR ファイルの抽出 
+JAR ե 
 \f4jar x\fP\f2[vf] [\fP\f2jarfile\fP\f2] [\fP\f2inputfiles\fP\f2] [\-J\fP\f2option\fP\f2]\fP 
 .TP 3
-JAR ファイルの内容の表形式による一覧表示 
+JAR եƤɽˤɽ 
 \f4jar t\fP\f2[vf] [\fP\f2jarfile\fP\f2] [\fP\f2inputfiles\fP\f2] [\-J\fP\f2option\fP\f2]\fP 
 .TP 3
-JAR ファイルへのインデックスの追加 
+JAR եؤΥǥåɲ 
 \f4jar i\fP \f2jarfile\fP \f2[\-J\fP\f2option\fP\f2]\fP 
 .RE
 
 .LP
 .LP
-説明
-.LP
-.RS 3
-
+
 .LP
 .RS 3
 .TP 3
 cuxtiv0Mmfe 
-\f2jar\fP コマンドを制御するオプション 
+\f2jar\fP ޥɤ椹륪ץ 
 .TP 3
 jarfile 
-作成 (\f2c\fP)、更新 (\f2u\fP)、抽出 (\f2x\fP)、または内容の一覧表示 (\f2t\fP) の対象となる JAR ファイル。\f2f\fP オプションとファイル名 \f2jarfile\fP とがペアになります。 つまり、片方を記述すれば、もう一方も記述する必要があります。\f2f\fP と \f2jarfile\fP を省略すると、標準入力から「JAR ファイル」が取得されるか (x および t の場合)、標準出力へ「JAR ファイル」が送信されます(c および u の場合)。 
+ (\f2c\fP) (\f2u\fP) (\f2x\fP)ޤܼɽ (\f2t\fP) оݤȤʤ JAR ե롣\f2f\fP ץȥե̾ \f2jarfile\fP Ȥڥˤʤޤ Ĥޤꡢ򵭽ҤС⤦⵭Ҥɬפޤ \f2f\fP  \f2jarfile\fP άȡɸϤJAR եפ뤫 (x  t ξ)ɸϤءJAR եפޤ(c  u ξ) 
 .TP 3
 inputfiles 
-\f2jarfile\fP に結合されるか (c および u の場合)、\f2jarfile\fP から抽出 (x の場合) または一覧表示 (t の場合) される、空白で区切られたファイルまたはディレクトリ。すべてのディレクトリは再帰的に処理されます。このファイルは、オプション \f2O\fP (ゼロ) を使用しないかぎり圧縮されます。 
+\f2jarfile\fP ˷礵뤫 (c  u ξ)\f2jarfile\fP  (x ξ) ޤϰɽ (t ξ) 롢Ƕڤ줿եޤϥǥ쥯ȥꡣ٤ƤΥǥ쥯ȥϺƵŪ˽ޤΥեϡץ \f20\fP () Ѥʤ갵̤ޤ 
 .TP 3
 manifest 
-\f2name\fP\f2:\fP\f2value\fP のペアが、JAR ファイルの MANIFEST.MF に含まれている既存のマニフェストファイル。\f2\-m\fP オプションとファイル名 \f2manifest\fP とがペアになります。 つまり、片方を記述すれば、もう一方も記述する必要があります。\f3m\fP、\f3f\fP、および \f3e\fP の出現順序は、\f2manifest\fP、\f2jarfile\fP、\f2entrypoint\fP の出現順序と一致する必要があります。 
+JAR ե MANIFEST.MF ˴ޤ٤ \f2name\fP\f2:\fP \f2value\fP ڥޤޤƤ¸Υޥ˥եȥե롣\f2m\fP ץȥե̾ \f2manifest\fP ȤڥˤʤޤĤޤꡢ򵭽ҤС⤦⵭Ҥɬפޤ\f3m\fP\f3f\fP \f3e\fP νиϡ\f2manifest\fP\f2jarfile\fP\f2entrypoint\fP νиȰפɬפޤ 
 .TP 3
 entrypoint 
-実行可能 JAR ファイル内にバンドルされたスタンドアロンアプリケーションのアプリケーションエントリポイントとして設定するクラスの名前。\f2\-e\fP オプションと entrypoint は対になっています。 どちらかを指定する場合は両方とも指定する必要があります。\f3m\fP、\f3f\fP、および \f3e\fP の出現順序は、\f2manifest\fP、\f2jarfile\fP、\f2entrypoint\fP の出現順序と一致する必要があります。 
+¹Բǽ JAR ե˥Хɥ뤵줿ɥ󥢥ץꥱΥץꥱ󥨥ȥݥȤȤꤹ륯饹̾\f2\-e\fP ץ entrypoint ФˤʤäƤޤɤ餫ꤹξȤꤹɬפޤ\f3m\fP\f3f\fP \f3e\fP νиϡ\f2manifest\fP\f2jarfile\fP\f2entrypoint\fP νиȰפɬפޤ 
 .TP 3
 \-C\ dir 
-これに続く \f2inputfiles\fP 引数を処理する間、ディレクトリを \f2dir\fP へ一時的に変更します。\f2\-C\ \fP\f2dir\fP \f2inputfiles\fP のセットは複数使用できます。 
+³ \f2inputfiles\fP ֡ǥ쥯ȥ \f2dir\fP ذŪѹޤ \f2\-C\ \fP\f2\-\ dir\fP \f2inputfiles\fP ΥåȤʣѤǤޤ 
 .TP 3
 \-Joption 
-Java 実行環境へ渡されるオプション。\f2\-J\fP と \f2option\fP の間には空白を入れないでください。 
+Java ¹ԴĶϤ륪ץ\f2\-J\fP  \f2option\fP δ֤ˤ϶ʤǤ 
 .RE
 
 .LP
-.RE
-.SH "説明"
+.SH ""
 .LP
-
-.LP
-\f3jar\fP ツールは、複数のファイルを 1 つの JAR アーカイブファイルに結合します。 \f3jar\fP は、ZIP および 
+\f3jar\fP ġʣΥե 1 Ĥ JAR ֥ե˷礷ޤ\f3jar\fP ϡZIP  
 .na
 \f2ZLIB\fP @
 .fi
-http://www.gzip.org/zlib/ 圧縮形式をベースにした、汎用のアーカイブおよび圧縮ツールです。ただし \f3jar\fP ツールの主な目的は、いくつかの Java アプレットやアプリケーションを 1 個のアーカイブに統合することです。アプレットやアプリケーションのコンポーネント (ファイル、イメージ、およびサウンド) が 1 つのアーカイブに結合されていると、Java エージェント (ブラウザなど) は、それらのコンポーネントを 1 回の HTTP トランザクションでダウンロードすることができ、コンポーネントごとに新しい接続を必要とすることがありません。これによって、ダウンロードの回数が大幅に減ります。 また、\f3jar\fP はファイルを圧縮するので、ダウンロード時間も短くなります。また、ファイル内の個々のエントリにアプレット作成者による署名を書き込めるので、配布元の認証が可能になります。jar ツールの構文は、\f2tar\fP コマンドの構文とほぼ同じです。\f3JAR\fP アーカイブは、圧縮されているかどうかにかかわらず、クラスパスのエントリとして使用できます。 
+http://www.gzip.org/zlib/ ̷˴ŤѤΥ֤Ӱ̥ġǤ \f3jar\fP ġμŪϡĤ Java ץåȤ䥢ץꥱ 1 ĤΥ֤礹뤳ȤǤץåȤ䥢ץꥱΥݡͥ (ե롢᡼ӥ)  1 ĤΥ֤˷礵ƤȡJava  (֥饦ʤ) ϡΥݡͥȤ 1  HTTP ȥ󥶥ǥɤ뤳ȤǤݡͥȤȤ˿³ɬפȤ뤳Ȥޤ󡣤ˤꡢɻ֤ṳ̂ޤޤ\f3jar\fP ϥեΰ̤ԤΤǡɻ֤ṳ̂ޤޤեθġΥȥ˥ץåȺԤˤ̾񤭹Τǡ۸ǧڤǽˤʤޤjar ġιʸϡ\f2tar\fP ޥɤιʸȤۤƱǤ\f3JAR\fP ֤ϡ̤Ƥ뤫ɤˤ餺饹ѥΥȥȤƻѤǤޤ 
 .LP
-複数のファイルを JAR ファイルへ結合する一般的な使用法は次のとおりです。
-.LP
-.RS 3
-
+ʣΥե JAR եط礹ŪʻˡϼΤȤǤ
 .LP
 .nf
 \f3
@@ -125,19 +114,15 @@
 .fl
 \fP
 .fi
-.RE
 
 .LP
-この例では、現在のディレクトリにあるクラス (.class) ファイルがすべて、\f2myFile.jar\fP という名前のファイルに格納されます。jar ツールは自動的に、\f2META\-INF/MANIFEST.MF\fP という名前のマニフェストファイルエントリを生成します。これは常に、JAR ファイルの最初のエントリになります。マニフェストファイルは、アーカイブに関するメタ情報を宣言し、そのデータを \f2name\ :\ value\fP ペアとして格納します。jar ツールがマニフェストファイル内にメタ情報を格納する方法の詳細については、「
+ǤϡߤΥǥ쥯ȥˤ륯饹 (.class) ե뤬٤ơ\f2myFile.jar\fP Ȥ̾Υե˳Ǽޤjar ġϼưŪˡ \f2META\-INF/MANIFEST.MF\fP Ȥ̾Υޥ˥եȥե륨ȥޤϾˡJAR եκǽΥȥˤʤޤޥ˥եȥեϡ֤˴ؤ᥿Υǡ \f2name\ :\ value\fP ڥȤƳǼޤjar ġ뤬ޥ˥եȥե˥᥿Ǽˡξܺ٤ˤĤƤϡ
 .na
 \f2JAR file specification\fP @
 .fi
-http://java.sun.com/javase/6/docs/technotes/guides/jar/jar.html#JAR%20Manifest」を参照してください。 
+http://java.sun.com/javase/6/docs/technotes/guides/jar/jar.html#JAR%20Manifestפ򻲾ȤƤ 
 .LP
-既存のマニフェストファイル内に格納された \f2name\ :\ value\fP ペアを JAR ファイルに含める必要がある場合には、そのファイルを次のように \f2\-m\fP オプションを使って指定します。
-.LP
-.RS 3
-
+¸Υޥ˥եȥե˳Ǽ줿 \f2name\ :\ value\fP ڥ JAR ե˴ޤɬפˤϡΥե򼡤Τ褦 \f2\-m\fP ץȤäƻꤷޤ
 .LP
 .nf
 \f3
@@ -146,20 +131,16 @@
 .fl
 \fP
 .fi
-.RE
 
 .LP
-既存のマニフェストファイルは改行文字で終わっている必要があります。 マニフェストファイルが改行文字で終わっていない場合、\f3jar\fP はその最後の行を解析しません。
+¸Υޥ˥եȥեϲʸǽäƤɬפޤޥ˥եȥե뤬ʸǽäƤʤȡ\f3jar\fP ϤκǽԤϤޤ
 .br
 
 .LP
 .br
 
 .LP
-\f3注:\ \fPコマンド行に \f2cmf\fP ではなく \f2cfm\fP が指定された jar コマンド (m と \-f オプションの順番を逆にする) の場合、\f3jar\fP コマンド行にまず JAR アーカイブの名前を指定し、続いてマニフェストファイルの名前を指定する必要があります。 次に例を示します。 
-.RS 3
-
-.LP
+\f3:\ \fPޥɹԤ \f2cmf\fP ǤϤʤ \f2cfm\fP ꤵ줿 jar ޥ (m  \-f ץν֤դˤ) ξ硢\f3jar\fP ޥɹԤˤޤ JAR ֤̾ꤷ³ƥޥ˥եȥե̾ꤹɬפޤ 򼨤ޤ 
 .nf
 \f3
 .fl
@@ -167,15 +148,11 @@
 .fl
 \fP
 .fi
-.RE
 
 .LP
-マニフェストは、RFC822 ASCII 形式で規定されたテキスト形式であるため、マニフェストファイルの内容を簡単に表示および編集できます。 
+ޥ˥եȤϡRFC822 ASCII ǵꤵ줿ƥȷǤ뤿ᡢޥ˥եȥեƤñɽԽǤޤ 
 .LP
-JAR ファイルからファイルを抽出する場合は、\f2x\fP を使用します。
-.LP
-.RS 3
-
+JAR ե뤫եФϡ \f2x\fP Ѥޤ
 .LP
 .nf
 \f3
@@ -184,14 +161,10 @@
 .fl
 \fP
 .fi
-.RE
 
 .LP
 .LP
-jar ファイルから個別のファイルを抽出する場合は、そのファイル名を指定します。
-.LP
-.RS 3
-
+jar ե뤫̤ΥեФϡΥե̾ꤷޤ
 .LP
 .nf
 \f3
@@ -200,18 +173,14 @@
 .fl
 \fP
 .fi
-.RE
 
 .LP
 .LP
-JDK のバージョン 1.3 以降から、\f2jar\fP ユーティリティーで 
+JDK ΥС 1.3 ʹߤ顢\f2jar\fP 桼ƥƥ 
 .na
 \f2JarIndex\fP @
 .fi
-http://java.sun.com/javase/6/docs/technotes/guides/jar/jar.html#JARIndex がサポートされています。 JarIndex を使用すると、アプリケーションのクラスローダーで JAR ファイルからクラスがロードされるときの効率が向上します。アプリケーションまたはアプレットが複数の JAR ファイルにバンドルされている場合は、クラスがロードされるときに、必要な JAR ファイル以外のダウンロードおよびオープンは行われません。このパフォーマンスの最適化は、新しい \f2\-i\fP オプションを指定して \f2jar\fP を実行すると有効になります。このオプションを使うと、指定した JAR メインファイルとそのメインファイルが依存しているすべての JAR ファイルについて、パッケージ位置情報が生成されます。 メインファイルが依存している JAR ファイルは、JAR メインファイルのマニフェストの \f2Class\-Path\fP 属性に指定しておく必要があります。
-.LP
-.RS 3
-
+http://java.sun.com/javase/6/docs/technotes/guides/jar/jar.html#JAR_Index ݡȤƤޤ JarIndex ѤȡץꥱΥ饹 JAR ե뤫饯饹ɤȤθΨ夷ޤץꥱޤϥץåȤʣ JAR ե˥Хɥ뤵Ƥϡ饹ɤȤˡɬפ JAR եʳΥɤӥץϹԤޤ󡣤Υѥեޥ󥹤κŬϡ \f2\-i\fP ץꤷ \f2jar\fP ¹ԤͭˤʤޤΥץȤȡꤷ JAR ᥤեȡΥᥤե뤬¸Ƥ뤹٤Ƥ JAR եˤĤơѥå־ޤᥤե뤬¸Ƥ JAR եϡJAR ᥤեΥޥ˥եȤ \f2Class\-Path\fP °˻ꤷƤɬפޤ
 .LP
 .nf
 \f3
@@ -220,52 +189,42 @@
 .fl
 \fP
 .fi
-.RE
 
 .LP
 .LP
-この例では、\f2INDEX.LIST\fP ファイルが \f2main.jar\fP の \f2META\-INF\fP ディレクトリに挿入されます。
+Ǥϡ \f2INDEX.LIST\fP ե뤬 \f2main.jar\fP  \f2META\-INF\fP ǥ쥯ȥޤ
 .br
 .br
-このファイルに格納されている情報を使用して、アプリケーションのクラスローダーは、効率的にクラスをロードします。 インデックスファイルに位置情報を格納する方法の詳細は、 「\f2JarIndex\fP 仕様」を参照してください。
+Υե˳ǼƤѤơץꥱΥ饹ϡΨŪ˥饹ɤޤǥåե˰־Ǽˡξܺ٤ϡJarIndex ͡פ򻲾ȤƤ
 .br
 .br
-ディレクトリをコピーするには、まず \f2dir1\fP 内のファイルを圧縮して標準出力に出力し、続いて標準入力から \f2dir2\fP に抽出します (両方の \f2jar\fP コマンドから \f2\-f\fP オプションを省く)。 次に例を示します。
-.LP
-.RS 3
-
+ǥ쥯ȥ򥳥ԡˤϡޤ \f2dir1\fP Υե򰵽̤ \f2stdout\fP ˽Ϥ³ \f2stdin\fP Ф \f2dir2\fP ˽Ϥޤ (\f2\-f\fP ץϤɤ \f2jar\fP ޥɤǤά)
 .LP
 .nf
 \f3
 .fl
-% (cd dir1; jar c .) | (cd dir2; jar x)
+% (cd dir1; jar c .)| (cd dir2; jar x)
 .fl
 \fP
 .fi
-.RE
 
 .LP
 .LP
-\f2jar\fP を使って JAR ファイルや JAR ファイルマニフェストを操作するコマンドサンプルを確認するには、「例」を参照してください。また、「
+\f2jar\fP Ѥ JAR ե JAR ޥ˥եȥե륵ץ륳ޥɤǧϡҤΡפ򻲾ȤƤޤ
 .na
 \f2Java Tutorial\fP @
 .fi
-http://java.sun.com/docs/books/tutorial/jar」の JAR コースも参照してください。
+http://download.oracle.com/javase/tutorial/deployment/jarפ JAR ⻲ȤƤ
 .LP
-.SH "オプション"
-.LP
-
+.SH "ץ"
 .LP
 .RS 3
 .TP 3
 c 
-\f2jarfile\fP の名前で新しいアーカイブファイルを作成するか (\f2f\fP が指定されている場合)、標準出力で作成します (\f2f\fP と \f2jarfile\fP が省略されている場合)。\f2inputfiles\fP で指定されたファイルとディレクトリを、このアーカイブに追加します。 
+f ꤵ줿 \f2jarfile\fP Ȥ̾ \f2\fP ֥ե \f2\fP f  \f2jarfile\fP ά줿ɸϤ˾Ϥޤ\f2inputfiles\fP ǻꤵ줿եȥǥ쥯ȥ򡢤Υ֤ɲäޤ 
 .TP 3
 u 
-\f2inputfiles\fP で指定されたファイルとディレクトリを追加することにより、既存のファイル \f2jarfile\fP を更新します (\f2f\fP が指定されている場合)。 例を示します。 
-.RS 3
-
-.LP
+f ꤵƤˡ¸ե \f2jarfile\fP  \f2Ūǡ\fP \f2inputfiles\fP ˻ꤵ줿եǥ쥯ȥɲäޤ򼨤ޤ 
 .nf
 \f3
 .fl
@@ -273,11 +232,7 @@
 .fl
 \fP
 .fi
-.RE
-上のコマンドは、ファイル \f2foo.class\fP を既存の JAR ファイル \f2foo.jar\fP に追加します。次の例に示すように、\f2\-u\fP オプションは、マニフェストエントリも更新できます。 
-.RS 3
-
-.LP
+Υޥɤϡե \f2foo.class\fP ¸ JAR ե \f2foo.jar\fP ɲäޤ˼褦ˡ\f2\-u\fP ץϡޥ˥եȥȥ⹹Ǥޤ 
 .nf
 \f3
 .fl
@@ -285,20 +240,16 @@
 .fl
 \fP
 .fi
-.RE
-\f2foo.jar\fP マニフェストをマニフェスト内の \f2name:value\fP ペアで更新します。 
+\f2foo.jar\fP ޥ˥եȤޥ˥ե \f2name:value\fP ڥǹޤ 
 .TP 3
 x 
-\f2jarfile\fP から (\f2f\fP が指定されている場合)、または標準入力から (\f2f\fP と \f2jarfile\fP が省略されている場合)、ファイルとディレクトリを抽出します。\f2inputfiles\fP が指定されている場合は、その指定したファイルとディレクトリだけが抽出されます。指定されていなければ、すべてのファイルとディレクトリが抽出されます。抽出されたファイルの日時は、アーカイブ内で設定されたものです。 
+f ꤵ줿 \f2jarfile\fP \f2\fP  \f2f\fP  \f2jarfile\fP ά줿ɸϤ顢եǥ쥯ȥФޤ\f2inputfiles\fP ꤵƤϡλꤷեȥǥ쥯ȥФޤꤵƤʤС٤ƤΥեȥǥ쥯ȥ꤬ФޤФ줿եϡꤵ줿ΤǤ 
 .TP 3
 t 
-\f2jarfile\fP から (\f2f\fP が指定されている場合)、または標準入力から (\f2f\fP と \f2jarfile\fP が省略されている場合)、内容を表形式で一覧表示します。\f2inputfiles\fP が指定されている場合は、その指定したファイルとディレクトリだけが一覧表示されます。指定されていなければ、すべてのファイルとディレクトリが一覧表示されます。 
+f ꤵ줿 \f2jarfile\fP \f2\fP  \f2f\fP  \f2jarfile\fP ά줿ɸϤ顢ܼɽޤ\f2inputfiles\fP ꤵƤϡλꤷեȥǥ쥯ȥɽޤꤵƤʤС٤ƤΥեȥǥ쥯ȥ꤬ɽޤ 
 .TP 3
 i 
-指定された \f2jarfile\fP と、それに依存する JAR ファイルについて、インデックス情報を生成します。例を示します。 
-.RS 3
-
-.LP
+ꤵ줿 \f2jarfile\fP ȡ˰¸ JAR եˤĤơǥåޤȤС 
 .nf
 \f3
 .fl
@@ -306,29 +257,25 @@
 .fl
 \fP
 .fi
-.RE
 .LP
-上のコマンドは、\f2foo.jar\fP 内に \f2INDEX.LIST\fP ファイルを生成します。 このファイルには、\f2foo.jar\fP と、\f2foo.jar\fP の \f2Class\-Path\fP 属性に指定されたすべての JAR ファイルに入っている各パッケージの位置情報が書き込まれています。 インデックスの例を参照してください。   
+Υޥɤϡ\f2foo.jar\fP  \f2INDEX.LIST\fP եޤ Υեˤϡ\f2foo.jar\fP ȡ\f2foo.jar\fP  \f2Class\-Path\fP °˻ꤵ줿٤Ƥ JAR եäƤƥѥåΰ־󤬽񤭹ޤƤޤǥå򻲾ȤƤ  
 .TP 3
 f 
-作成 (\f2c\fP)、更新 (\f2u\fP)、抽出 (\f2x\fP)、インデックス追加 (\f2i\fP)、または表示 (\f2t\fP) 対象のファイル \f2jarfile\fP を指定します。\f2f\fP オプションとファイル名 \f2jarfile\fP とがペアになります。 つまり、片方を記述すれば、もう一方も記述する必要があります。\f2f\fP と \f2jarfile\fP を省略すると、標準入力から JAR ファイル名が使用されたり (x および t の場合)、標準出力に jar ファイルが 送信されたりします (c および u の場合)。 
+γƽоݤȤʤե \f2jarfile\fP ꤷޤ (\f2c\fP) (\f2u\fP) (\f2x\fP)ǥåɲ (\f2i\fP)ޤɽ (\f2t\fP)\f2f\fP ץȥե̾ \f2jarfile\fP Ȥڥˤʤޤ Ĥޤꡢ򵭽ҤС⤦⵭ҤɬפޤOmitting \f2f\fP  \f2jarfile\fP άȡx  t ξ \f2ɸ\fP JAR ե̾졢c  u ξ \f2ɸ\fP  JAR ե뤬ޤ 
 .TP 3
 v 
-詳細な出力を標準出力に生成します。あとで例を示します。 
+ܺ٤ʽϤɸϤޤȤ򼨤ޤ 
 .TP 3
 0 
-(ゼロ) ZIP による圧縮を使用せずに、保存します。 
+() ZIP ˤ밵̤Ѥˡ¸ޤ 
 .TP 3
 M 
-マニフェストファイルエントリを作成しません (c および u の場合)。 または、マニフェストファイルエントリが存在する場合にそれを削除します (u の場合)。 
+ޥ˥եȥե륨ȥޤ (c  u ξ)ޤϡޥ˥եȥե륨ȥ꤬¸ߤˤޤ (u ξ) 
 .TP 3
 m 
-\f2META\-INF/MANIFEST.MF\fP のファイルで指定したマニフェストファイル \f2manifest\fP の \f2name :value\fP の属性ペアを組み込みます。すでに同じ名前で存在しない限り、 \f2jar\fP はその \f2name\ :\ value\fP ペアを追加します。同じ名前で存在する場合は、\f2jar\fP はその値を更新します。 
+\f2META\-INF/MANIFEST.MF\fP Υեǻꤷޥ˥եȥե \f2manifest\fP  \f2name : value\fP °ڥȤ߹ߤޤ \f2jar\fP ϡǤƱ̾¸ߤʤꡢ \f2name:value\fP ڥɲäޤƱ̾¸ߤ硢 \f2jar\fP Ϥͤ򹹿ޤ 
 .LP
-コマンド行で、\f3m\fP と \f3f\fP の文字は、\f2manifest\fP と \f2jarfile\fP の入力順序と同じ順序で記述する必要があります。たとえば、次のようにして使います。 
-.RS 3
-
-.LP
+ޥɹԤǡ\f3m\fP  \f3f\fP ʸϡ\f2manifest\fP  \f2jarfile\fP ϽƱǵҤɬפޤȤСΤ褦ˤƻȤޤ 
 .nf
 \f3
 .fl
@@ -336,22 +283,17 @@
 .fl
 \fP
 .fi
-.RE
-デフォルトのマニフェストには含まれないマニフェストに、特別な目的の \f2name\ :\ value\fP の属性ペアを追加できます。たとえば、ベンダー情報、バージョン情報、パッケージシーリング、または JAR にバンドルされたアプリケーションを実行するための属性を追加できます。\f4\-m\fP オプションの使用例については、「Java Tutorial」 にある「
+ǥեȤΥޥ˥եȤˤϴޤޤʤޥ˥եȤˡ̤Ū \f2name\ :\ value\fP °ڥɲäǤޤȤС٥󡢥С󡢥ѥå󥰡ޤ JAR ˥Хɥ뤵줿ץꥱ¹Ԥ뤿°ɲäǤޤJava TutorialפΡ
 .na
 \f2JAR Files\fP @
 .fi
-http://java.sun.com/docs/books/tutorial/jar/」コースを参照してください。 
-.LP
+http://download.oracle.com/javase/tutorial/deployment/jar/ץ򻲾Ȥ  \f4\-m\fP ץλǧƤ 
 .TP 3
 e 
-実行可能 JAR ファイル内にバンドルされたスタンドアロンアプリケーションのアプリケーションエントリポイントとして、\f2entrypoint\fP を設定します。このオプションを使用すると、マニフェストファイル内の \f2Main\-Class\fP 属性値が作成または上書きされます。 このオプションは、JAR ファイルの作成中または更新中に使用できます。 このオプションを使えば、マニフェストファイルを編集または作成することなしに、アプリケーションのエントリポイントを指定できます。
+¹Բǽ JAR ե˥Хɥ뤵줿ɥ󥢥ץꥱΥץꥱ󥨥ȥݥȤȤơ\f2entrypoint\fP ꤷޤΥץѤȡޥ˥եȥե \f2Main\-Class\fP °ͤޤϾ񤭤ޤΥץϡJAR եκޤϹ˻ѤǤޤΥץȤСޥ˥եȥեԽޤϺ뤳ȤʤˡץꥱΥȥݥȤǤޤ
 .br
 .br
-たとえば、次のコマンドは \f2Main.jar\fP を作成しますが、その際、マニフェストファイル内の \f2Main\-Class\fP 属性値は \f2Main\fP に設定されます。 
-.RS 3
-
-.LP
+ȤСΥޥɤǤ \f2Main.jar\fP ޤκݡޥ˥ե \f2Main\-Class\fP °ͤ \f2Main\fP ꤵޤ 
 .nf
 \f3
 .fl
@@ -359,12 +301,8 @@
 .fl
 \fP
 .fi
-.RE
 .LP
-次のコマンドを実行すると java ランタイムから直接このアプリケーションを起動できます。 
-.RS 3
-
-.LP
+Υޥɤ¹Ԥ java 󥿥फľܤΥץꥱưǤޤ 
 .nf
 \f3
 .fl
@@ -372,11 +310,7 @@
 .fl
 \fP
 .fi
-.RE
-エントリポイントのクラス名が特定のパッケージ内に存在している場合、エントリポイントの区切り文字としてドット (「.」) またはスラッシュ (「/」) を使用できます。たとえば、\f2Main.class\fP が \f2foo\fP という名前のパッケージ内に存在している場合、次のようにしてエントリポイントを指定できます。 
-.RS 3
-
-.LP
+ѥå˥ȥݥȤΥ饹̾ޤޤƤ硢ɥå (.) å (/) Τ줫ʸ򤽤ζڤʸȤƻѤǤޤȤС \f2Main.class\fP  \f2foo\fP Ȥ̾Υѥå˴ޤޤƤ硢ȥݥȤϼΤ褦ˤƻǤޤ 
 .nf
 \f3
 .fl
@@ -384,11 +318,7 @@
 .fl
 \fP
 .fi
-.RE
-または 
-.RS 3
-
-.LP

 .nf
 \f3
 .fl
@@ -396,18 +326,14 @@
 .fl
 \fP
 .fi
-.RE
-\f3注:\ \fP \f2\-m\fP オプションと \f2\-e\fP オプションの両方を同時に指定する場合、指定されたマニフェストにも \f2Main\-Class\fP 属性が含まれていると、\f2Main.class\fP の指定があいまいになってエラーが発生し、JAR の作成または更新処理が異常終了します。 
+\f3:\ \fP \f2\-m\fP ץ \f2\-e\fP ץξƱ˻ꤷ硢ꤷޥ˥եȤˤ \f2Main\-Class\fP °ޤޤƤС \f2Main.class\fP λ꤬ޤˤʤäƥ顼ȯJAR κ乹۾ェλޤ 
 .LP
 .TP 3
 \-C \ dir 
-\f2jar\fP コマンドの実行中に後続の \f2inputfiles\fP 引数を処理するときに、一時的にディレクトリを変更します (\f2cd\fP\ \f2dir\fP)。この処理は、UNIX の \f2tar\fP ユーティリティーの \f2\-C\fP オプションの機能に類似しています。
+\f2jar\fP ޥɤμ¹˸³ \f2inputfiles\fP ȤˡŪ˥ǥ쥯ȥѹޤ (cd \f2dir\fP)νϡUNIX  \f2tar\fP 桼ƥƥ \f2\-C\fP ץεǽƤޤ
 .br
 .br
-たとえば、次のコマンドは、\f2classes\fP ディレクトリに移動し、そのディレクトリから \f2bar.class\fP を \f2foo.jar\fP に追加します。 
-.RS 3
-
-.LP
+ȤСΥޥɤϡ\f2classes\fP ǥ쥯ȥ˰ưΥǥ쥯ȥ꤫ \f2bar.class\fP  \f2foo.jar\fP ɲäޤ 
 .nf
 \f3
 .fl
@@ -415,23 +341,15 @@
 .fl
 \fP
 .fi
-.RE
-次のコマンドでは、\f2classes\fP ディレクトリに移動し、\f2classes\fP ディレクトリ内のすべてのファイルを \f2foo.jar\fP に追加します (jar ファイルには classes ディレクトリを作成しません)。 次に元のディレクトリに戻ってから、\f2bin\fP ディレクトリに移動し、\f2xyz.class\fP を \f2foo.jar\fP に追加します。 
-.RS 3
-
-.LP
+ΥޥɤǤϡ\f2classes\fP ǥ쥯ȥ˰ư\f2classes\fP ǥ쥯ȥΤ٤ƤΥե \f2foo.jar\fP ɲäޤ (jar եˤ classes ǥ쥯ȥޤ)˸Υǥ쥯ȥäƤ顢\f2bin\fP ǥ쥯ȥ˰ư\f2xyz.class\fP  \f2foo.jar\fP ɲäޤ 
 .nf
 \f3
 .fl
-jar uf foo.jar \-C classes . \-C bin xyz.class
+jar uf foo.jar \-C classes .\-C bin xyz.class
 .fl
 \fP
 .fi
-.RE
-\f2classes\fP に \f2bar1\fP と \f2bar2\fP が保持されている場合、\f2jar tf foo.jar\fP を使用すると、JAR ファイルには次の要素が含められます。 
-.RS 3
-
-.LP
+\f2classes\fP ˥ե \f2bar1\fP  \f2bar2\fP ǼƤˡ \f2jar tf foo.jar\fP ѤȤ JAR եȤ򡢼˼ޤ 
 .nf
 \f3
 .fl
@@ -447,30 +365,24 @@
 .fl
 \fP
 .fi
-.RE
 .LP
 .TP 3
 \-Joption 
-Java 実行環境に \f2option\fP を渡します。 \f2option\fP には、「Java アプリケーション起動ツール」のリファレンスページに記載されているオプションを 1 つ指定します。たとえば、\f4\-J\-Xmx48M\fP と指定すると、最大メモリーは 48M バイトに設定されます。\f2\-J\fP を使って背後の実行環境にオプションを渡すことはよく行われています。 
+Java ¹ԴĶ \f2option\fP Ϥޤ \f2option\fP ˤϡJava ץꥱưġפΥե󥹥ڡ˵ܤƤ륪ץ 1 ĻꤷޤȤС \f4\-J\-Xmx48M\fP Ȼꤹȡ꡼ 48M ХȤꤵޤ\f2\-J\fP Ȥäظμ¹ԴĶ˥ץϤȤϤ褯ԤƤޤ 
 .RE
 
 .LP
-.SH "コマンド行引数ファイル"
+.SH "ޥɹ԰ե"
 .LP
-
+jar ΥޥɹԤûʷˤꤹ뤿ˡjar ޥɤФ (\-J ץ) ޤ 1 İʾ \f2ե\fP ꤹ뤳Ȥ \f2Ǥޤ\fP ˤꡢǤդĹ jar ޥɤǤڥ졼ƥ󥰥ƥˤ륳ޥɹԤ¤ޤ 
 .LP
-jar のコマンド行を短くしたり簡潔にしたりするために、\f2jar\fP コマンドに対する引数 (\f2\-J\fP オプションを除く) を含む 1 つ以上のファイルを指定することができます。これにより、任意の長さの jar コマンドを作成でき、オペレーティングシステムによるコマンド行の制限から解放されます。 
+եˤϥץȥե̾ޤ뤳ȤǤޤեγưϡڡޤϲԤǶڤޤեΥե̾ϡߤΥǥ쥯ȥ꤫鸫Хѥˤʤޤեΰ֤鸫ХѥǤϤޤ󡣥磻ɥ (*) ϡ̾ʤХڥ졼ƥ󥰥ƥॷˤäƤʸ˲ᤵޤξϤΤ褦ˤϲᤵޤ󡣰եΰ \f2@\fP ʸѤơʣΥեƵŪ˲᤹뤳ȤϥݡȤƤޤ󡣤ޤ\f2\-J\fP ץ⥵ݡȤƤޤ󡣤ΥץϵưġϤޤưġǤϰե򥵥ݡȤƤʤǤ
 .LP
-引数ファイルにはオプションとファイル名を含めることができます。ファイル内の各引数は、スペースまたは改行で区切ります。引数ファイル内のファイル名は、現在のディレクトリから見た相対パスになります。 引数ファイルの位置から見た相対パスではありません。ワイルドカード (*) は、通常ならばオペレーティングシステムシェルによってあらゆる文字に解釈されますが、この場合はそのようには解釈されません。引数ファイル内の引数で \f2@\fP 文字を使用して、複数のファイルを再帰的に解釈することはサポートされていません。また、\f2\-J\fP オプションもサポートされていません。 このオプションは起動ツールに渡されますが、起動ツールでは引数ファイルをサポートしていないからです。
 .LP
-.LP
-\f2jar\fP を実行するときに、各引数ファイルのパスとファイル名の先頭に \f2@\fP 文字を付けて渡します。\f2jar\fP は、\f2@\fP 文字で始まる引数を見つけると、そのファイルの内容を展開して引数リストに挿入します。
+\f2jar\fP ¹ԤȤˡưեΥѥȥե̾Ƭ \f2@\fP ʸդϤޤ \f2jar\fP ϡ\f2@\fP ʸǻϤޤ򸫤ĤȡΥեƤŸưꥹȤޤ
 .br
 .br
-次の例では、\f2find\fP コマンドから出力されたファイル名を \f2classes.list\fP 内に格納しています。 
-.LP
-.RS 3
-
+ǡ \f2classes.list\fP ˤϡ \f2find\fP ޥɤˤäƽϤ줿ե̾Ǽޤ 
 .LP
 .nf
 \f3
@@ -478,14 +390,10 @@
 % find \fP\f3.\fP \-name '*.class' \-print > classes.list
 .fl
 .fi
-.RE
 
 .LP
 .LP
-その後、引数ファイル構文を使って \f2jar\fP にリストを渡すと、\f2Classes.list\fP で \f2jar\fP コマンドを実行できます。
-.LP
-.RS 3
-
+ˡե빽ʸѤ \f2classes.list\fP  jar ϤȤǡ \f2Υꥹ\fP Ф \f2jar\fP ޥɤ¹ԤǤޤ
 .LP
 .nf
 \f3
@@ -494,13 +402,9 @@
 .fl
 \fP
 .fi
-.RE
 
 .LP
-引数ファイルはパスを指定できますが、相対パスが記述された引数ファイル内のすべてのファイル名は、渡されたパスに対して相対的ではなく、現在の作業ディレクトリに相対的となります。 次に例を示します。 
-.RS 3
-
-.LP
+եϥѥǤޤХѥҤ줿եΤ٤ƤΥե̾ϡϤ줿ѥФŪǤϤʤߤκȥǥ쥯ȥŪȤʤޤϤǤ 
 .nf
 \f3
 .fl
@@ -508,20 +412,14 @@
 .fl
 \fP
 .fi
-.RE
 
 .LP
 .LP
 
 .LP
-.SH "例"
+.SH ""
 .LP
-
-.LP
-特定のディレクトリ内のすべてのファイルをアーカイブに追加する (そのアーカイブがすでに存在する場合は、その内容を上書きする) には、次のようにします。\f2\-v\fP オプションを使用して情報を詳細に列挙するように指定すると、サイズや最新の更新日など、アーカイブ内のファイルについての詳細情報が表示されます。 
-.RS 3
-
-.LP
+Υǥ쥯ȥΤ٤ƤΥե򥢡֤ɲä (Υ֤Ǥ¸ߤϡƤ񤭤) ˤϡΤ褦ˤޤ\f2\-v\fP ץѤƾܺ٤󤹤褦˻ꤹȡǿιʤɡΥեˤĤƤξܺپɽޤ 
 .nf
 \f3
 .fl
@@ -557,13 +455,9 @@
 .fl
 \fP
 .fi
-.RE
 
 .LP
-すでに画像、オーディオファイル、およびクラス用のサブディレクトリに分けている場合は、これらを単一の JAR ファイルに結合できます。 
-.RS 3
-
-.LP
+Ǥ˲ǥե롢ӥ饹ѤΥ֥ǥ쥯ȥʬƤϡñ JAR ե˷Ǥޤ 
 .nf
 \f3
 .fl
@@ -607,13 +501,9 @@
 .fl
 \fP
 .fi
-.RE
 
 .LP
-JAR ファイルのエントリ名を表示するには、「\f2t\fP」オプションを使用します。 
-.RS 3
-
-.LP
+JAR եΥȥ̾ɽˤϡ\f2t\fPץץѤޤ 
 .nf
 \f3
 .fl
@@ -641,28 +531,24 @@
 .fl
 \fP
 .fi
-.RE
 
 .LP
 .LP
-クラスロードを高速にするためにインデックスファイルを JAR ファイルに追加するには、「\f2i\fP」オプションを使用します。
+饹ɤ®ˤ뤿˥ǥåե JAR եɲäˤϡ\f2i\fPץץѤޤ
 .br
 .br
-例:
+:
 .br
 
 .LP
-.RS 3
-
-.LP
-たとえば、株取引アプリケーション用の相互依存したクラスを、\f2main.jar\fP、\f2buy.jar\fP、および \f2sell.jar\fP という 3 つの JAR ファイルに分割したとします。
+ȤСץꥱ¸Ƥ륯饹\f2main.jar\fP\f2buy.jar\fP \f2sell.jar\fP Ȥ 3 Ĥ JAR եʬ䤷Ȥޤ
 .br
 
 .LP
 .br
 
 .LP
-\f2main.jar\fP のマニフェストの \f2Class\-path\fP 属性に次のように指定した場合、 
+\f2main.jar\fP Υޥ˥եȤ \f2Class\-path\fP °˼Τ褦˻ꤷ硢 
 .nf
 \f3
 .fl
@@ -672,7 +558,7 @@
 .fi
 
 .LP
-\f2\-i\fP オプションを使用すれば、アプリケーションのクラスの 読み込みを高速化できます。 
+\f2\-i\fP ץѤСץꥱΥ饹 ɤ߹ߤ®Ǥޤ 
 .nf
 \f3
 .fl
@@ -682,38 +568,34 @@
 .fi
 
 .LP
-\f2INDEX.LIST\fP ファイルが \f2META\-INF\fP ディレクトリに挿入されます。この結果、アプリケーションのクラスローダーによってクラスまたは リソースの検索が行われるときに、適切な jar ファイルがダウンロードされます。
-.RE
-.SH "関連項目"
+\f2INDEX.LIST\fP ե뤬 \f2META\-INF\fP ǥ쥯ȥޤη̡ץꥱΥ饹ˤäƥ饹ޤϥ꥽θԤȤˡŬڤ jar ե뤬ɤޤ 
+.SH "Ϣ"
 .LP
-
 .LP
 .na
-\f2「JAR ファイルの概要」\fP @
+\f2JAR եγ\fP @
 .fi
 http://java.sun.com/javase/6/docs/technotes/guides/jar/jarGuide.html
-.br
-
+.LP
 .LP
 .na
-\f2「JAR ファイルの仕様」\fP @
+\f2JAR եλ\fP @
 .fi
 http://java.sun.com/javase/6/docs/technotes/guides/jar/jar.html
-.br
-
+.LP
 .LP
 .na
-\f2「Jar インデックス」\fP @
+\f2JarIndex λ\fP @
 .fi
-http://java.sun.com/javase/6/docs/technotes/guides/jar/jar.html#JARIndex
-.br
-
+http://java.sun.com/javase/6/docs/technotes/guides/jar/jar.html#JAR_Index
+.LP
 .LP
 .na
-\f2「Jar チュートリアル」\fP @
+\f2JAR 塼ȥꥢ\fP @
 .fi
-http://java.sun.com/docs/books/tutorial/jar (Java Software の Web サイト内)
-.br
-
+http://download.oracle.com/javase/tutorial/deployment/jar/index.html
 .LP
-pack200(1)  
+.LP
+pack200(1)
+.LP
+ 
--- a/jdk/src/linux/doc/man/ja/jarsigner.1	Mon May 02 09:38:22 2011 -0700
+++ b/jdk/src/linux/doc/man/ja/jarsigner.1	Wed Jul 05 17:43:05 2017 +0200
@@ -1,4 +1,4 @@
-." Copyright (c) 1998, 2010, Oracle and/or its affiliates. All rights reserved.
+." Copyright (c) 1998, 2011, Oracle and/or its affiliates. All rights reserved.
 ." DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 ."
 ." This code is free software; you can redistribute it and/or modify it
@@ -19,117 +19,1010 @@
 ." or visit www.oracle.com if you need additional information or have any
 ." questions.
 ."
-.TH jarsigner 1 "02 Jun 2010"
+.TH jarsigner 1 "14 Apr 2011"
 
 .LP
-.SH "名前"
-jarsigner \- JAR 署名および検証ツール
+.SH "̾"
+jarsigner \- JAR ̾Ӹڥġ
 .LP
-.RS 3
-
 .LP
+Java ARchive (JAR) եν̾̾դ JAR եν̾򸡾ڤޤ
 .LP
-Java ARchive (JAR) ファイルの署名を生成し、署名付き JAR ファイルの署名を検証します。
-.LP
-.RE
-.SH "形式"
-.LP
-
+.SH ""
 .LP
 .nf
 \f3
 .fl
 \fP\f3jarsigner\fP [ options ] jar\-file alias
 .fl
-\f3jarsigner\fP \-verify [ options ] jar\-file 
+\f3jarsigner\fP \-verify [ options ] jar\-file [alias...]
 .fl
 .fi
 
 .LP
-.SH "説明"
 .LP
-
+jarsigner  \-verify ޥɤǤϡJAR ե̾ΤȤ 0 İʾΥȥ̾Ǥޤȥ̾ꤵ줿硢jarsigner ϡJAR եγƽ̾դƥƥθڤ˻Ѥ񤬥ȥ̾Τ줫˰פ뤳Ȥåޤ̾ϡ\-keystore ǻꤵ줿ȥޤϥǥեȤΥȥޤ
 .LP
+.SH ""
 .LP
-\f3jarsigner\fP ツールは、次の 2 つの目的で使用します。
+.LP
+\f3jarsigner\fP ġϡ 2 ĤŪǻѤޤ
 .LP
 .RS 3
 .TP 3
 1.
-Java ARchive (JAR) ファイルに署名を付ける 
+Java ARchive (JAR) ե˽̾դ 
 .TP 3
 2.
-署名付き JAR ファイルの署名と整合性を検証する 
+̾դ JAR եν̾򸡾ڤ 
 .RE
 
 .LP
 .LP
-JAR 機能を使うと、クラスファイル、イメージ、サウンド、およびその他のデジタルデータを単一のファイルにパッケージ化できるので、ファイルを迅速かつ容易に配布できます。開発者は、jar(1) という名前のツールを使って JAR ファイルを作成できます。技術的な観点から言えば、すべての ZIP ファイルも JAR ファイルとみなすことができます。 ただし、\f3jar\fP によって作成された JAR ファイル、または \f3jarsigner\fP によって処理された JAR ファイルには、META\-INF/MANIFEST.MF ファイルが含まれています。
+JAR ǽȤȡ饹ե롢᡼ɡӤ¾ΥǥǡñΥե˥ѥåǤΤǡե®ưפۤǤޤȯԤϡjar(1) Ȥ̾ΥġȤä JAR եǤޤŪʴС٤Ƥ ZIP ե JAR եȤߤʤȤǤޤ \f3jar\fP ˤäƺ줿 JAR ե롢ޤ \f3jarsigner\fP ˤäƽ줿 JAR եˤϡMETA\-INF/MANIFEST.MF ե뤬ޤޤƤޤ
 .LP
 .LP
-「デジタル署名」は、なんらかのデータ (「署名」の対象となるデータ) と、エンティティー (人、会社など) の非公開鍵とに基づいて計算されるビット列です。手書きの署名同様、デジタル署名には多くの利点があります。
+֥ǥ̾פϡʤ餫Υǡ (ֽ̾פоݤȤʤǡ) ȡƥƥ (͡Ҥʤ) Ȥ˴ŤƷ׻ӥåǤ񤭤ν̾Ʊ͡ǥ̾ˤ¿ޤ
 .LP
 .RS 3
 .TP 2
 o
-署名の生成に使われた非公開鍵と対になる公開鍵を使って計算を行うことで、デジタル署名が本物かどうかを検証できる 
+̾˻Ȥ줿ФˤʤȤäƷ׻ԤȤǡǥ̾ʪɤ򸡾ڤǤ 
 .TP 2
 o
-非公開鍵が他人に知られない限り、デジタル署名の偽造は不可能である 
+¾ͤΤʤ¤ꡢǥ̾ε¤ԲǽǤ 
 .TP 2
 o
-デジタル署名は、その署名が付いたデータだけを対象とするものであり、ほかのデータの署名として機能することはない 
+ǥ̾ϡν̾դǡоݤȤΤǤꡢۤΥǡν̾ȤƵǽ뤳ȤϤʤ 
 .TP 2
 o
-署名付きのデータは変更できない。 データが変更された場合は、その署名によってデータが本物ではないことが検証される 
+̾դΥǡѹǤʤ ǡѹ줿ϡν̾ˤäƥǡʪǤϤʤȤڤ 
 .RE
 
 .LP
 .LP
-ファイルに対してエンティティーの署名を生成するには、まず、エンティティーは、そのエンティティーに関連する公開鍵と非公開鍵のペアを持つ必要があります。 また、公開鍵を認証する 1 つまたは複数の証明書も必要です。「証明書」とは、あるエンティティーが発行したデジタル署名付きの文書で、別なエンティティーの公開鍵が特定の値であることを証明しています。
+եФƥƥƥν̾ˤϡޤƥƥϡΥƥƥ˴ϢΥڥɬפޤޤǧڤ 1 ĤޤʣξɬפǤ־פȤϡ륨ƥƥȯԤǥ̾դʸǡ̤ʥƥƥθͤǤ뤳ȤƤޤ
 .LP
 .LP
-\f3jarsigner\fP は、「キーストア」に含まれる鍵と証明書情報を使って、JAR ファイルのデジタル署名を生成します。キーストアは、非公開鍵と、非公開鍵に関連付けられた X.509 証明書チェーンが収められたデータベースです。キーストアの作成と管理には、keytool(1) ユーティリティーを使います。
+\f3jarsigner\fP ϡ֥ȥפ˴ޤޤ븰ȾȤäơJAR եΥǥ̾ޤȥϡȡ˴Ϣդ줿 X.509 󤬼줿ǡ١Ǥȥκȴˤϡkeytool(1) 桼ƥƥȤޤ
 .LP
 .LP
-\f3jarsigner\fP は、エンティティーの非公開鍵を使って署名を生成します。署名付き JAR ファイルには、ファイルの署名に使用する非公開鍵に対応する公開鍵を保存するキーストアからとった証明書のコピーも含まれています。 \f3jarsigner\fP は、署名付き JAR ファイルのデジタル署名を、ファイル内 (の署名ブロックファイル) に含まれている証明書を使って検証することができます。
+\f3jarsigner\fP ϡƥƥȤäƽ̾ޤ̾դ JAR եˤäˡեν̾˻Ѥ줿бФ롢ȥξΥԡޤޤƤޤ\f3jarsigner\fP ϡ̾դ JAR ե (֥̾åե) ˤѤƤΥեΥǥ̾򸡾ڤǤޤ
 .LP
 .LP
-5.0 以降では、\f3jarsigner\fP はタイムスタンプを含む署名を生成するので、システムやデプロイヤ (Java Plug\-in を含む) はJAR ファイルが署名証明書の有効期間中に署名されたかどうかをチェックできます。さらに、5.0 で追加された API を使用して、アプリケーションはタイムスタンプ情報を取得できます。
+\f3jarsigner\fP ϥॹפޤ̾Τǡƥǥץ (Java Plug\-in ޤ) JAR ե뤬̾ͭ˽̾줿ɤåǤޤˡAPI Ѥȡץꥱ󤫤饿ॹ׾Ǥޤ
 .LP
 .LP
-現時点では、\f3jarsigner\fP で署名できるのは、JDK の jar(1) ツールで作成された JAR ファイル、または ZIP ファイルだけです。JAR ファイルは ZIP ファイルと同じですが、JAR ファイルには META\-INF/MANIFEST.MF ファイルが含まれている点が異なります。META\-INF/MANIFEST.MF ファイルは、\f3jarsigner\fP が ZIP ファイルに署名を付けるときに自動的に作成されます。
+Ǥϡ\f3jarsigner\fP ǽ̾ǤΤϡJDK  jar(1) ġǺ줿 JAR ե롢ޤ ZIP եǤJAR ե ZIP եƱǤJAR եˤ META\-INF/MANIFEST.MF ե뤬ޤޤƤۤʤޤMETA\-INF/MANIFEST.MF եϡ\f3jarsigner\fP  ZIP ե˽̾դȤ˼ưŪ˺ޤ
 .LP
 .LP
-デフォルトでは、\f3jarsigner\fP は JAR (または ZIP) ファイルに「署名」を付けます。署名付き JAR ファイルを「検証」する場合は、\f2\-verify\fP オプションを指定します。
+ǥեȤǤϡ\f3jarsigner\fP  JAR (ޤ ZIP) եˡֽ̾פդޤ̾դ JAR եָڡפϡ \f2\-verify\fP ץꤷޤ
 .LP
 .SS 
-JDK 1.1 との互換性
+ȥ̾
 .LP
-.RS 3
+.LP
+ȥΤ٤ƤΥȥϡդΡ̾פ𤷤ƥޤ
+.LP
+.LP
+\f3jarsigner\fP Ȥä JAR ե˽̾դȤϡ̾ɬפޤ७ȥȥ̾ꤹɬפޤȤСϡworking ǥ쥯ȥ mystore Ȥ̾Υȥ˴ޤޤ̾ duke ˴Ϣդ줿ȤäơMyJARFile.jar Ȥ̾ JAR ե˽̾դޤϥեϻꤵƤʤΤǡMyJARFile.jar Ͻ̾դ JAR եˤäƾ񤭤ޤ
+.LP
+.nf
+\f3
+.fl
+    jarsigner \-keystore /working/mystore \-storepass myspass
+.fl
+      \-keypass dukekeypasswd MyJARFile.jar duke
+.fl
+\fP
+.fi
 
 .LP
 .LP
-\f3keytool\fP ツールと \f3jarsigner\fP ツールは、JDK 1.1 で提供されていた \f3javakey\fP ツールを完全に置き換えるものです。これらの新しいツールは \f3javakey\fP よりも多くの機能を備えており、キーストアと非公開鍵をパスワードで保護する機能や、署名の生成に加えて署名を検証する機能を持っています。
+ȥϥѥɤݸƤΤǡȥΥѥ (Ǥ mypass) ꤹɬפޤޥɹԤǥȥΥѥɤꤷʤȡѥɤϤޤƱͤˡ⥭ȥǥѥɤˤäݸƤ뤿ᡢΥѥ (Ǥ dukekeypasswd) ꤹɬפޤ ޥɹԤΥѥɤꤷƤʤޤꤷѥȤ¸ƤѥɤȰäƤˤϡΥѥɤϤޤ
 .LP
+.SS 
+ȥξ
 .LP
-新しいキーストアアーキテクチャーは、\f3javakey\fP が作成して管理していたアイデンティティーデータベースに代わるものです。キーストア形式と、JDK 1.1 の \f3javakey\fP が使っていたデータベース形式との間には下位互換性はありません。ただし、次のようなことは可能です。
+.LP
+\f3jarsigner\fP ˤϡ \f2Ѥ륭ȥ URL ꤹ \-keystore\fP ޤȥ \f2\fP ǥեȤǡ \f2user.home\fP ƥץѥƥǷޤ桼Υۡǥ쥯ȥ .keystore Ȥ̾Υե˳ǼޤSolaris ƥξ硢 \f2user.home\fP ΥǥեȤϥ桼 home ǥ쥯ȥˤʤޤ
+.LP
+.LP
+\-keystore ץ \f2˻ꤷ\fP ϥȥ꡼ब \f2KeyStore.load\fP ᥽åɤϤդƤURL Ȥ \f2NONE\fP ꤵƤϡnull Υȥ꡼ब \f2KeyStore.load\fP ᥽åɤϤޤ \f2NONE\fP ϡ \f2KeyStore\fP ե١ǤϤʤ硢ȤФ줬ϡɥȡǥХ¸ߤƤʤɤ˻ꤹ٤Ǥ
+.LP
+.SS 
+ȥμ
+.LP
+.LP
+java.security ѥå \f2󶡤Ƥ\fP KeyStore 饹 \f2ϡ\fP ȥξؤΥӾѹԤΡΤ줿󥿥ե󶡤ޤȥθȤƤϡ줾줬Ρ֥ספΥȥоݤȤʣΰۤʤ¸߲ǽǤ
+.LP
+.LP
+ߡȥμѤΤȤơ\f3keytool\fP  \f3jarsigner\fP  2 ĤΥޥɹԥġȡ\f3Policy Tool\fP Ȥ̾ 1 Ĥ GUI ١Υġ뤬ޤKeyStore \f2\fP public ȤƻѲǽʤΤǡJava 2 SDK 桼 KeyStore ȤäۤΥƥץꥱǤޤ
+.LP
+.LP
+ȥˤϡSun 󶡤Ȥ߹ߤΥǥեȤμޤϡJKS Ȥ̾ȼΥȥ () ѤΤǡȥեȤƼƤޤμǤϡġϸ̤Υѥɤˤäݸ졢ȥΤ (Ȥ̤) ѥɤˤäݸޤ
+.LP
+.LP
+ȥμϡץХ١ǤŪˤϡ \f2KeyStore\fP ˤä󶡤륢ץꥱ󥤥󥿥ե֥ӥץХ󥿥ե (SPI) ˴ŤƼޤĤޤꡢбݥ饹 \f2KeystoreSpi\fP Ʊ \f2java.security\fP ѥå¸ߤƤꡢΥ饹ˤäơ֥ץХפɬפΤ륵ӥץХ󥿥ե᥽åɤƤޤǡ֥ץХפȤϡJava Security API ˤäƥǽʥӥΥ֥åȤФθ󶡤ѥåޤϥѥåνΤȤǤäơȥμ󶡤ˤϡ
+.na
+\f2Java Ź沽ƥ㡼ѥץХμˡ\fP @
+.fi
+http://java.sun.com/javase/6/docs/technotes/guides/security/crypto/HowToImplAProvider.htmlƤ褦ˡ饤Ȥ֥ץХפKeystoreSpi ֥饹μ󶡤ɬפޤ
+.LP
+.LP
+ץꥱǤϡKeyStore 饹󶡤 getInstance եȥ᥽åɤȤȤǡޤޤʥץХۤʤ֥ספΥȥ \f2\fP ǤޤȥΥפϡȥγǼȥǡȤȤˡȥȥȥΤݸ뤿˻Ȥ륢르ꥺޤۤʤ륿פΥȥμˤϡߴϤޤ
+.LP
+.LP
+\f3keytool\fP ϡǤդΥե١Υȥưޤkeytool ϡޥɹԤϤ줿ȥξե̾Ȥư FileInputStream ѴơFileInputStream 饭ȥξɤޤ\f3jarsigner\fP ġ \f3policytool\fP ġϡURL ǻǽǤդξ꤫饭ȥɤ߹ळȤǤޤ
+.LP
+.LP
+\f3jarsigner\fP  \f3keytool\fP ξ硢\f2\-storetype\fP ץȤäƥޥɹԤǥȥΥפǤޤ\f3Policy Tool\fP ξϡ[Edit] ˥塼 [Change Keystore] ޥɤȤäƥȥΥפǤޤ
+.LP
+.LP
+桼ȥΥפŪ˻ꤷʤä硢ġϡñ˥ƥץѥƥեǻꤵ줿 \f2keystore.type\fP ץѥƥͤ˴Ťơȥμ򤷤ޤΥƥץѥƥե \f2java.security\fP ȸƤФ졢SDK ƥץѥƥǥ쥯ȥ \f2java.home\fP/lib/security ¸ߤƤޤǡ\f2java.home\fP ϼ¹ԻĶΥǥ쥯ȥ (SDK  \f2jre\fP ǥ쥯ȥޤ Java 2 Runtime Environment Υȥåץ٥ǥ쥯ȥ) Ǥ
+.LP
+.LP
+ƥġϡ \f2keystore.type\fP ͤͤǻꤵ줿פΥȥƤץХĤޤǡߥ󥹥ȡ뤵Ƥ뤹٤ƤΥץХĴ٤ޤŪΥץХĤȡΥץХΥȥμȤޤ
+.LP
+.LP
+\f2KeyStore\fP 饹Ƥ static ᥽å \f2getDefaultType\fP Ѥȡץꥱ䥢ץåȤ \f2keystore.type\fP ץѥƥͤǤޤΥɤϡǥեȤΥȥ \f2(keystore.type ץѥƥǻꤵ줿)\fP Υ󥹥󥹤ޤ
+.LP
+.nf
+\f3
+.fl
+    KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
+.fl
+\fP
+.fi
+
+.LP
+.LP
+ǥեȤΥȥפ JKS (Sun 󶡤ȼΥפΥȥμ) ǤϡƥץѥƥեμιԤˤäƻꤵƤޤ
+.LP
+.nf
+\f3
+.fl
+    keystore.type=jks
+.fl
+\fP
+.fi
+
+.LP
+.LP
+: ȥΥפλǤϡʸȾʸ϶̤ޤ󡣤ȤСJKS  jks ƱΤȤưޤ
+.LP
+.LP
+ƥġǥǥեȰʳΥȥμѤˤϡιԤѹ̤ΥȥΥפꤷޤȤСpkcs12 ȸƤФ륿פΥȥμ󶡤ƤץХѥåѤˤϡιԤ򼡤Τ褦ѹޤ
+.LP
+.nf
+\f3
+.fl
+    keystore.type=pkcs12
+.fl
+\fP
+.fi
+
+.LP
+.LP
+PKCS#11 ץХѥåѤ硢ξܺ٤ˤĤƤϡJava PKCS#11 Reference Guideפˤ
+.na
+\f2KeyTool and JarSigner\fP @
+.fi
+http://java.sun.com/javase/6/docs/technotes/guides/security/p11guide.html#KeyToolJarSigner򻲾ȤƤ
+.LP
+.SS 
+ݡȤ륢르ꥺ
+.LP
+.LP
+\f3jarsigner\fP ϥǥեȤǡΤ줫Ѥ JAR ե˽̾ޤ
 .LP
 .RS 3
 .TP 2
 o
-\f3keytool\fP の \f2\-identitydb\fP コマンドを使うと、アイデンティティーデータベースの情報をキーストアにインポートできます。 
+SHA1 ȥ르ꥺȤä DSA (ǥ̾르ꥺ) 
 .TP 2
 o
-\f3jarsigner\fP は、以前に \f3javakey\fP を使って署名された JAR ファイルに署名を付けることができます。 
+SHA256 ȥ르ꥺѤ RSA 르ꥺ 
 .TP 2
 o
-\f3jarsigner\fP は、\f3javakey\fPを使って署名された JAR ファイルを検証できます。したがって、jarsigner は、Java 2 SDK のキーストアではなく JDK 1.1 のアイデンティティーデータベースからの署名者別名を認識し、これらを対象に処理を行うことができます。 
+SHA256  ECDSA (ʱ߶ǥ̾르ꥺ) Ѥ EC (ʱ߶) Ź르ꥺ 
 .RE
 
 .LP
 .LP
-次の表は、JDK 1.1.x で署名された JAR ファイルが、Java 2 プラットフォームでどのように扱われるかを示しています。
+Ūˤϡ̾Ԥθ DSA Ǥ硢\f3jarsigner\fP  SHA1withDSA 르ꥺȤä JAR ե˽̾դޤ̾Ԥθ RSA Ǥ硢\f3jarsigner\fP  SHA256withRSA 르ꥺȤä JAR ե˽̾դޤ̾Ԥθ EC Ǥ硢\f3jarsigner\fP  SHA256withECDSA 르ꥺȤä JAR ե˽̾դޤ
+.LP
+.LP
+ΥǥեȤν̾르ꥺϡ\f2\-sigalg\fP ץȤäƥС饤ɤǤޤ
+.LP
+.SS 
+̾դ JAR ե
+.LP
+.LP
+\f3jarsigner\fP Ȥä JAR ե˽̾դ硢Ϥ̾դ JAR ե JAR եƱǤ 2 Ĥɲåե뤬 META\-INF ǥ쥯ȥ֤ۤʤޤ
+.LP
+.RS 3
+.TP 2
+o
+.SF ĥҤդ̾ե 
+.TP 2
+o
+.DSA.RSAޤ .EC ĥҤ˻Ľ֥̾åե 
+.RE
+
+.LP
+.LP
+ 2 ĤΥեΥ١ե̾ϡ \f2\-sigFile\fP ץͤޤȤСΤ褦˥ץꤷȤޤ
+.LP
+.nf
+\f3
+.fl
+\-sigFile MKSIGN
+.fl
+\fP
+.fi
+
+.LP
+.LP
+ξ硢ե̾Ϥ줾 MKSIGN.SF  MKSIGN.DSA ˤʤޤ
+.LP
+.LP
+ޥɹԤ \f2\-sigfile\fP ץꤷʤä硢.SF ե .DSA եΥ١ե̾ϡޥɹԤǻꤵ줿̾Ƭ 8 ʸ򤹤٤ʸѴΤˤʤޤ̾ 8 ʸ̤ξϡ̾Τޤ޻Ȥޤ̾ˡ̾ե̾˻ѤǤʤʸޤޤƤϡʸ (_) ֤ƥե̾ޤѤǤʸϡե٥åȡ (_)ϥեǤ
+.LP
+\f3̾ (.SF) ե\fP
+.LP
+.LP
+̾ե (.SF ե) ϡ\f3jarsigner\fP ǽ̾դ JAR ե˾˴ޤޤޥ˥եȥեȻƤޤĤޤꡢޥ˥եȥեƱ͡.SF եˤϡJAR ե˴ޤޤƤ륽ե뤴Ȥˡ 3 ĤιԤޤ
+.LP
+.RS 3
+.TP 2
+o
+ե̾ 
+.TP 2
+o
+ȤƤȥ르ꥺ (SHA) ̾ 
+.TP 2
+o
+SHA Ȥ 
+.RE
+
+.LP
+.LP
+ޥ˥եȥեǤϡSHA ȤͤϡեΥХʥǡΥ (ϥå) Ǥ.SF եǤϡեΥȤͤϡޥ˥եȥեγ륽եб 3 ԤΥϥåǤ
+.LP
+.LP
+̾եˤϡǥեȤǥޥ˥եȥեΤΥϥåޤޤƤޤҤΡJAR եθڡפ褦ˡΥإå¸ߤˤäƸڤκŬǽˤʤäƤޤ
+.LP
+\f3֥̾åե\fP
+.LP
+.SF եˤϽ̾դ졢̾Ͻ֥̾åե֤ޤΥեˤϡȥξޤϾ沽줿ǴޤޤƤޤ ޤϾϡ̾˻Ȥ줿бǧڤޤեγĥҤϡѤȥ르ꥺ˱ .DSA.RSA.EC Τ줫ˤʤޤ 
+.SS 
+̾ॹ
+.LP
+.LP
+\f2jarsigner\fP ġϡJAR եν̾˽̾ॹפ¸Ǥޤˡ \f2jarsigner\fP ؽ̾򥵥ݡȤޤưϾάǽǡ̾˼γƥץˤä椵ޤ
+.LP
+.RS 3
+.TP 2
+o
+\f2\-tsa url\fP 
+.TP 2
+o
+\f2\-tsacert alias\fP 
+.TP 2
+o
+\f2\-altsigner class\fP 
+.TP 2
+o
+\f2\-altsignerpath classpathlist\fP 
+.RE
+
+.LP
+.LP
+γƥץξܺ٤ˤĤƤϡҤΡ֥ץ򻲾ȤƤ
+.LP
+.SS 
+JAR եθ
+.LP
+.LP
+JAR եθڤΤϡ̾ͭǤꡢĽ̾ʸ JAR եΤɤΥեѹƤʤǤJAR եθڤϡμǹԤޤ
+.LP
+.RS 3
+.TP 3
+1.
+.SF ե뤽켫Τν̾򸡾ڤޤ 
+.LP
+μǤϡƽ֥̾å (.DSA) ե˳ǼƤ̾ºݤˡбȤä줿ΤǤ뤳Ȥǧޤ .DSA եˤϡξ (ޤϾ) ޤޤƤޤޤμǤϡŪν̾б̾ (.SF) եͭʽ̾Ǥ뤫ɤĴ١.SF ե뤬ѤƤʤȤǧޤ  
+.TP 3
+2.
+.SF եγƥȥΥȤޥ˥եбƥͤ碌Ƹڤޤ 
+.LP
+.SF եˤϡޥ˥եȥեΤΥϥå夬Ǽ줿إåǥեȤǴޤޤƤޤΥإå¸ߤϡإåΥϥå夬ºݤ˥ޥ˥եȥեΥϥåȰפ뤫ɤ򸡾ڤ뤳ȤǤޤϥå夬פϡμ˿ʤߤޤ 
+.LP
+ϥå夬פʤϡΨŪˤˡȤäƸڤԤޤŪˤϡ.SF եγƥե󥻥Υϥå夬ޥ˥եȥեб륻ΥϥåȰפ뤫ɤǧޤ (ֽ̾ (.SF) եפ򻲾) 
+.LP
+.SF եΥإå˳Ǽ줿ޥ˥եȥեΥϥåȡºݤΥޥ˥եȥեΥϥåȤפʤϡ̾ ( .SF ե) ˡJAR ե 1 İʾΥե뤬ɲ \f2(jar ġ)\fP 줿ǽޤjar \f2ġ\fP Ȥäƥեɲä硢ޥ˥եȥեѹޤ (եѤΥɲä).SF եѹޤ󡣤ξ硢.SF եΥإåʳΥ˳Ǽ줿ϥå夬ޥ˥եȥեб륻ΥϥåȰפȤϡ̾ JAR ե¸ߤƤեΤɤΥեѹƤʤȤˤʤꡢڤΤȤưޤ  
+.TP 3
+3.
+JAR եΥեΤ.SF ե˥ȥijƥեɤ߹ߤޤɤ߹˥եΥȤ׻̤ޥ˥եȥγեΥȤӤޤ2 ĤΥȤƱǤʤФʤ餺ǤʤϸڤԤޤ 
+.RE
+
+.LP
+.LP
+ڥץǤʤ餫νʸڥ顼ȯ硢ڥץߤ졢ƥ㳰ޤ줿ƥ㳰ϡ\f3jarsigner\fP åɽޤ
+.LP
+.SS 
+1 Ĥ JAR եоݤȤʣν̾
+.LP
+.LP
+1 Ĥ JAR եФ \f3jarsigner\fP ġʣ¹Ԥ¹ԤΤӤˡۤʤ桼̾ꤹСJAR եʣΥ桼ν̾դ뤳ȤǤޤ
+.LP
+.nf
+\f3
+.fl
+  jarsigner myBundle.jar susan
+.fl
+  jarsigner myBundle.jar kevin
+.fl
+\fP
+.fi
+
+.LP
+.LP
+JAR ե뤬ʣ̾Ƥ硢 JAR եˤ .SF ե .DSA եФʣޤޤ뤳Ȥˤʤޤ .SF ե .DSA եФϡ1 ν̾Ф 1 ĺޤäơǽϤ JAR եˤϡ̾ĥե뤬ޤޤޤ
+.LP
+.nf
+\f3
+.fl
+  SUSAN.SF
+.fl
+  SUSAN.DSA
+.fl
+  KEVIN.SF
+.fl
+  KEVIN.DSA
+.fl
+\fP
+.fi
+
+.LP
+.LP
+: JAR եǤϡJDK 1.1  \f3javakey\fP ġ줿̾ \f3jarsigner\fP 줿̾ߤǤޤĤޤꡢǤ \f3javakey\fP Ȥäƽ̾դƤ JAR եˡ\f3jarsigner\fP Ȥäƽ̾դ뤳ȤǤޤ
+.LP
+.SH "ץ"
+.LP
+.LP
+ʲǤϡ\f3jarsigner\fP ΥץˤĤޤ:
+.LP
+.RS 3
+.TP 2
+o
+ɤΥץ̾ˤƬ˥ޥʥ (\-) դ 
+.TP 2
+o
+ץǤդνǻǤ 
+.TP 2
+o
+åΤιܤμºݤ (ץ) ϡ桼ꤹɬפ 
+.TP 2
+o
+\f2\-keystore\fP \f2\-storepass\fP \f2\-keypass\fP \f2\-sigfile\fP \f2\-sigalg\fP \f2\-digestalg\fP \f2\-signedjar\fP ץѤǤΤϡ̾դ JAR ե򸡾ڤǤϤʤJAR ե˽̾ǤƱͤˡ̾򥳥ޥɹԤǻꤹΤϡJAR ե˽̾դǤ 
+.RE
+
+.LP
+.RS 3
+.TP 3
+\-keystore url 
+ȥξ򼨤 URL ꤷޤǥեȤϡ桼Υۡǥ쥯ȥΥե \f2.keystore\fP Ǥ 桼Υۡǥ쥯ȥϡuser.home ƥץѥƥˤäƷޤޤ 
+.LP
+̾ȤϥȥɬפǤ ΤᡢǥեȤΥȥ¸ߤʤ硢뤤ϥǥեȰʳΤۤΥȥѤϡȥŪ˻ꤹɬפޤ 
+.LP
+ڤȤϥȥɬפޤ󡣤ȥꤵƤ뤫뤤ϥǥեȤΥȥ¸ߤƤơ \f2\-verbose\fP ץꤵƤ硢JAR եθڤ˻Ѥ񤬤Υȥ 1 ĤǤޤޤƤ뤫ɤ˴ؤɲþ󤬽Ϥޤ 
+.LP
+: \f2\-keystore\fP ΰˤϡURL ˥ե̾ (ȥѥ) Ǥޤ ե̾ (ȥѥ) ꤷϡfile:URL ȤưޤȤСΤ褦˻Ǥޤ 
+.nf
+\f3
+.fl
+  \-keystore \fP\f4filePathAndName\fP\f3
+.fl
+\fP
+.fi
+.LP
+ϡλƱΤȤưޤ 
+.nf
+\f3
+.fl
+  \-keystore file:\fP\f4filePathAndName\fP\f3
+.fl
+\fP
+.fi
+.LP
+JRE  \f2$JAVA_HOME/lib/security\fP ǥ쥯ȥ˳Ǽ줿 \f2java.security\fP ƥץѥƥե Sun PKCS#11 ץХꤵƤ硢keytool  jarsigner  PKCS#11 ȡ˴ŤưǤޤΥץꤷޤ 
+.RS 3
+.TP 2
+o
+\f2\-keystore NONE\fP 
+.TP 2
+o
+\f2\-storetype PKCS11\fP 
+.RE
+.LP
+ȤСΥޥɤϡꤵ줿 PKCS#11 ȡƤɽޤ 
+.nf
+\f3
+.fl
+   jarsigner \-keystore NONE \-storetype PKCS11 \-list
+.fl
+
+.fl
+\fP
+.fi
+.TP 3
+\-storetype storetype 
+󥹥󥹤륭ȥΥפꤷޤǥեȤΥȥפϡƥץѥƥե keystore.type ץѥƥͤǻꤵ줿פǤͤϡ \f2java.security.KeyStore\fP  static getDefaultType ᥽å \f2ǼǤޤ\fP. 
+.LP
+\-storepass ץȤä PCKS#11 ȡ PIN  \f2ꤹ뤳Ȥ\fP Ǥޤꤷʤä硢keytool  jarsigner ϥ桼˥ȡ PIN  Ϥޤȡݸ줿ǧڥѥ (Ѥ PIN ѥåɤɤ߼굡ʤ) 硢\f2\-protected\fP ץꤹɬפޤѥɥץꤹɬפϤޤ  
+.TP 3
+\-storepass[:env | :file] argument 
+.LP
+ȥ˥ΤɬפʥѥɤꤷޤΥץɬפʤΤϡJAR ե˽̾դȤǤ (JAR ե򸡾ڤȤ)ξ硢 \f2\-storepass\fP ץ򥳥ޥɹԤǻꤷʤäϡѥɤϤޤ 
+.LP
+ \f2env\fP ޤ \f2file\fP ꤵƤʤ硢ѥɤͤ \f2argument\fP ˤʤޤʳξ硢ѥɤϼΤ褦ˤƼޤ 
+.RS 3
+.TP 2
+o
+\f2env\fP: \f2argument\fP Ȥ̾δĶѿѥɤ 
+.TP 2
+o
+\f2file\fP: \f2argument\fP Ȥ̾Υե뤫ѥɤ 
+.RE
+.LP
+: ƥȤŪȤ硢ޤϥƥݸ줿ƥѤƤʳϡޥɹԤ䥹ץȤǥѥɤꤷʤǤ  
+.TP 3
+\-keypass[:env | :file] argument 
+.LP
+ޥɹԤǻꤵ줿̾б륭ȥȥݸΤ˻Ȥѥɤꤷޤ\f3jarsigner\fP Ȥä JAR ե˽̾դȤϡѥɤɬפǤޥɹԤǥѥɤꤵƤ餺ɬפʥѥɤȥΥѥɤȰۤʤϡѥɤϤޤ 
+.LP
+ \f2env\fP ޤ \f2file\fP ꤵƤʤ硢ѥɤͤ \f2argument\fP ˤʤޤʳξ硢ѥɤϼΤ褦ˤƼޤ 
+.RS 3
+.TP 2
+o
+\f2env\fP: \f2argument\fP Ȥ̾δĶѿѥɤ 
+.TP 2
+o
+\f2file\fP: \f2argument\fP Ȥ̾Υե뤫ѥɤ 
+.RE
+.LP
+: ƥȤŪȤ硢ޤϥƥݸ줿ƥѤƤʳϡޥɹԤ䥹ץȤǥѥɤꤷʤǤ  
+.TP 3
+\-sigfile file 
+.SF ե .DSA ե˻Ȥ١ե̾ꤷޤȤС\f2file\fP  DUKESIGN ꤹȡ .SF ե .DSA ե̾ϡ줾 DUKESIGN.SF  DUKESIGN.DSA ˤʤޤ Υեϡ̾դ JAR ե META\-INF ǥ쥯ȥ֤ޤ 
+.LP
+\f2file\fP ˻ѤǤʸϡa\-zA\-Z0\-9_\-פǤĤޤꡢʸӥϥեѤǤޤ: .SF  .DSA Υե̾ǤϡʸϤ٤ʸѴޤ 
+.LP
+\-sigfile \f2ץ\fP ꤷʤä硢.SF ե .DSA եΥ١ե̾ϡޥɹԤǻꤵ줿̾Ƭ 8 ʸ򤹤٤ʸѴΤˤʤޤ̾ 8 ʸ̤ξϡ̾Τޤ޻Ȥޤ̾ˡ̾ե̾˻ѤǤʤʸޤޤƤϡʸ (_) ֤ƥե̾ޤ  
+.TP 3
+\-sigalg algorithm 
+JAR եν̾˻Ѥ̾르ꥺ̾ꤷޤ 
+.LP
+ɸ̾르ꥺ̾ΰˤĤƤϡJava Cryptography Architectureפˤ 
+.na
+\f2Appendix A \fP @
+.fi
+http://java.sun.com/javase/6/docs/technotes/guides/security/crypto/CryptoSpec.html#AppA򻲾ȤƤΥ르ꥺϡJAR եν̾˻Ѥ̩ȸߴΤΤǤʤФʤޤ󡣤Υץꤷʤä硢̩Υפ˱ SHA1withDSASHA256withRSASHA256withECDSA Τ줫Ѥޤꤵ줿르ꥺμ󶡤ץХŪ˥󥹥ȡ뤵Ƥ뤫뤤ϥ桼Τ褦ʥץХ \f2\-providerClass\fP ץȤäƻꤹɬפޤǤʤ硢ޥɤμ¹ԤԤޤ  
+.TP 3
+\-digestalg algorithm 
+JAR եΥȥȤݤ˻Ѥåȥ르ꥺ̾ꤷޤ 
+.LP
+ɸåȥ르ꥺ̾ΰˤĤƤϡJava Cryptography Architectureפˤ 
+.na
+\f2Appendix A \fP @
+.fi
+http://java.sun.com/javase/6/docs/technotes/guides/security/crypto/CryptoSpec.html#AppA򻲾ȤƤΥץꤷʤä硢SHA256 Ѥޤꤵ줿르ꥺμ󶡤ץХŪ˥󥹥ȡ뤵Ƥ뤫뤤ϥ桼Τ褦ʥץХ \f2\-providerClass\fP ץȤäƻꤹɬפޤǤʤ硢ޥɤμ¹ԤԤޤ  
+.TP 3
+\-signedjar file 
+̾դ JAR ե̾ꤷޤ 
+.LP
+ޥɹԤ̾ꤷʤäϡ JAR ե (̾оݤȤʤ JAR ե) ̾Ʊ̾Ȥޤ ξ硢 JAR եϽ̾դ JAR եˤäƾ񤭤ޤ  
+.TP 3
+\-verify 
+ޥɹԤǤΥץ󤬻ꤵƤϡꤵ줿 JAR ե뤬ڤޤ JAR եؤν̾ϹԤޤ󡣸ڤȡjar verified Ȥåɽޤ̾Ƥʤ JAR ե롢ޤϥݡȤƤʤ르ꥺ (RSA ץХΥ󥹥ȡλƤʤ RSA ʤ) Ȥäƽ̾줿 JAR ե򸡾ڤ褦Ȥȡjar is unsigned. (signatures missing or not parsable)פȤåɽޤ 
+.LP
+̾դ JAR եϡ\f3jarsigner\fP ޤ JDK 1.1  \f3javakey\fP ġ롢뤤ϤξȤäƸڤǤޤ 
+.LP
+ڤˤĤƤξܺ٤ϡJAR եθڡפ򻲾ȤƤ  
+.TP 3
+\-certs 
+ޥɹԤǡ \f2\-verify\fP  \f2\-verbose\fP ץȤȤˤΥץꤷ硢JAR եγƽ̾Ԥξ󤬽Ϥ˴ޤޤޤˤϼΤΤޤޤޤ 
+.RS 3
+.TP 2
+o
+̾Ԥθ (.DSA ե˳Ǽ줿) μ̾ 
+.TP 2
+o
+ X.  (Ĥޤꡢ \f2java.security.cert.X509Certificate\fP Υ󥹥) Ǥϡ̾Ԥμ̾ 
+.RE
+.LP
+ȥγǧԤޤޥɹԤǥȥͤꤵƤʤ硢ǥեȤΥȥե뤬Сޤ̾Ԥθξ񤬥ȥΥȥȰפϡξɽޤ 
+.RS 3
+.TP 2
+o
+̾Ԥ˳륭ȥȥ̾̾ϳ̤ǰϤޤޤ ȥǤϤʤ JDK 1.1 Υǥƥƥǡ١ͳ褹̾Ԥξϡ̤ǤϤʤ̤ǰϤޤޤ 
+.RE
+.TP 3
+\-certchain file 
+ޥɹԤǻꤷ̾Ƿޤ륭ȥȥ˴Ϣդ줿󤬴ǤʤˡѤ٤ꤷޤΤ褦ʾ֤ˤʤǽΤϡȥϡɥȡ˳ǼƤ뤬ˤϾΤݻǤΰ褬¸ߤƤʤ褦ʾǤΥեϰϢ X.509 񤬽Ϣ뤵줿ΡPKCS#7 ñǡ֥åΤ줫ȤʤꡢΥ󥳡ǥ󥰷ϥХʥꥨ󥳡ǥ󥰷Internet RFC 1421 ɸǵꤵǽ󥳡ǥ󥰷 (BASE64 󥳡ǥ󥰤ȤƤФ) Τ줫ˤʤޤ 
+.TP 3
+\-verbose 
+ޥɹԤǤΥץ󤬻ꤵƤ硢\f3jarsigner\fP ϡ־Ĺץ⡼ɤưJAR ν̾ޤϸڤοʹԾ˴ؤɲþϤޤ 
+.TP 3
+\-internalsf 
+ϡJAR եν̾줿 .DSA (֥̾å) եˡ줿 .SF ե (̾ե) δʥԡ沽줿ǴޤޤƤޤưѹޤưѹˤʤꡢߤǤϡ JAR եΤΥ򾮤뤿ˡǥեȤǤ .SF ե뤬 .DSA ե˴ޤޤʤ褦ˤʤäƤޤ \f2\-internalsf\fP ץ򥳥ޥɹԤǻꤹȡƱ褦ưޤ\f3ΥץϡƥȤԤˤǤʳˤϻѤʤǤ ΥץѤȡͭפʺŬԤʤʤޤ\fP 
+.TP 3
+\-sectionsonly 
+ޥɹԤǤΥץ󤬻ꤵƤ硢JAR եν̾ .SF ե (̾ե) ˤϡޥ˥եȥեΤΥϥåޤإåɲäޤ󡣤ξ硢.SF ե˴ޤޤΤϡJAR եγƥե˴ؤ󤪤ӥϥåǤܺ٤ϡֽ̾ (.SF) եפ򻲾ȤƤ 
+.LP
+ǥեȤǤϡŬԤˡޥ˥եȥեΤΥϥåޤإåɲäޤإå¸ߤϡJAR եθڻˡޤإåΥϥå夬ޥ˥եȥեΤΥϥåȼºݤ˰פ뤫ɤǧޤϥå夬פ硢ڤϼμ˿ʤߤޤϥå夬פʤϡΨŪˤˡȤäƸڤԤޤ Ūˤϡ.SF եγƥե󥻥Υϥå夬ޥ˥եȥեб륻ΥϥåȰפ뤫ɤǧޤ 
+.LP
+ܺ٤ϡJAR եθڡפ򻲾ȤƤ 
+.LP
+\f3ΥץϡƥȤԤˤǤʳˤϻѤʤǤ ΥץѤȡͭפʺŬԤʤʤޤ\fP  
+.TP 3
+\-protected 
+\f2true\fP ޤ \f2false\fP PIN ꡼ʤɤݸ줿ǧڥѥ𤷤ƥѥɤꤹɬפˤϡͤ \f2true\fP ˻ꤷƤ 
+.TP 3
+\-providerClass provider\-class\-name 
+ӥץХƥץѥƥե (\f2java.security\fP) ΥꥹȤäƤʤȤˡŹ沽ӥץХΥޥ饹ե̾ꤷޤ 
+.LP
+\f2\-providerArg\fP \f2ConfigFilePath\fP ץȤ߹碌ƻѤޤkeytool  jarsigner ϥץХưŪ˥󥹥ȡ뤷ޤ (ǡ\f2ConfigFilePath\fP ϥȡեؤΥѥǤ)ƥץѥƥե Sun PKCS#11 ץХꤵƤʤ PKCS#11 ȥɽ륳ޥɤ򼡤˼ޤ 
+.nf
+\f3
+.fl
+jarsigner \-keystore NONE \-storetype PKCS11 \\ 
+.fl
+          \-providerClass sun.security.pkcs11.SunPKCS11 \\ 
+.fl
+          \-providerArg /foo/bar/token.config \\ 
+.fl
+          \-list
+.fl
+\fP
+.fi
+.TP 3
+\-providerName providerName 
+\f2java.security\fP ƥץѥƥե 2 İʾΥץХꤵƤ硢\f2\-providerName\fP ץȤäΥץХ󥹥󥹤ǤޤΥץΰϡץХ̾Ǥ 
+.LP
+Sun PKCS#11 ץХξ硢\f2providerName\fP  \f2SunPKCS11\-\fP\f2TokenName\fP Ȥˤʤޤ ǡ\f2TokenName\fPפϡץХ󥹥󥹤줿̾Ǥ ܺ٤
+.na
+\f2°ɽ\fP @
+.fi
+http://java.sun.com/javase/6/docs/technotes/guides/security/p11guide.html#ATTRS򻲾ȤƤȤСʲΥޥɤǤϡ̾ \f2SmartCard\fP  PKCS#11 ȥץХ󥹥󥹤ƤꥹȤޤ 
+.nf
+\f3
+.fl
+jarsigner \-keystore NONE \-storetype PKCS11 \\ 
+.fl
+        \-providerName SunPKCS11\-SmartCard \\ 
+.fl
+        \-list
+.fl
+\fP
+.fi
+.TP 3
+\-Jjavaoption 
+ꤵ줿 \f2javaoption\fP ʸ Java 󥿥ץ꥿ľϤޤ\f3jarsigner\fP ϡºݤˤ Java 󥿥ץ꥿Ф֥åѡפǤΥץˤϡޤ뤳ȤϤǤޤ󡣤Υץϡ¹ԴĶޤϥ꡼ѤĴǤѲǽʥ󥿥ץ꥿ץΰɽˤϡ \f2java \-h\fP ޤ \f2java \-X\fP ȥޥɹԤϤޤ 
+.LP
+.TP 3
+\-tsa url 
+\f2\-tsa http://example.tsa.url\fP  JAR եν̾˥ޥɹԤɽ硢̾ΥॹפޤURL \f2http://example.tsa.url\fP ϡTSA (Time Stamping Authority) ξꤷޤϡ \f2\-tsacert\fP ץǸФ줿 URL 򥪡С饤ɤޤ \f2\-tsa\fP ץǤϡTSA θ򥭡ȥ֤ɬפϤޤ 
+.LP
+ॹפ뤿ˡ \f2jarsigner\fP ϡ
+.na
+\f2RFC 3161\fP @
+.fi
+http://www.ietf.org/rfc/rfc3161.txt Ƥ ॹץץȥ (TSP) Ѥ TSA ̿ޤȡTSA ֤줿ॹץȡϽ֥̾åեν̾ȤȤ¸ޤ 
+.LP
+.TP 3
+\-tsacert alias 
+\f2\-tsacert alias\fP  JAR եν̾˥ޥɹԤɽ硢̾Υॹפޤ \f2alias\fP ϡȥθͭ TSA θꤷޤȥξǡTSA ξꤹ URL ޤ Subject Information Access ĥǽǧޤ 
+.LP
+TSA θϡ \f2\-tsacert Ȥä硢ȥ֤Ƥɬפޤ\fP. 
+.LP
+.TP 3
+\-altsigner class 
+ؽ̾Ѥ뤳Ȥꤷޤ饹̾ϡcom.sun.jarsigner.ContentSigner ݥ饹ĥ륯饹ե \f2ꤷޤ\fP. Υ饹եؤΥѥϡ \f2\-altsignerpath\fP ץˤäޤ \f2\-altsigner\fP ץ󤬻Ѥȡ \f2jarsigner\fP ϡꤵ줿饹󶡤̾ѤޤǤʤ硢 \f2jarsigner\fP ϥǥեȤν̾Ѥޤ 
+.LP
+ȤС \f2com.sun.sun.jarsigner.AuthSigner\fP Ȥ̾Υ饹󶡤̾Ѥˤϡ \f2jarsigner\fP ץ \f2\-altsigner com.sun.jarsigner.AuthSignerפѤޤ\fP 
+.LP
+.TP 3
+\-altsignerpath classpathlist 
+饹ե (Υ饹ե̾Ҥ \f2\-altsigner\fP ץǻꤵ) ӤΥ饹¸뤹٤Ƥ JAR եؤΥѥꤷޤ饹ե뤬 JAR եˤ硢ʲΤ褦 JAR եؤΥѥꤵޤ 
+.LP
+ХѥޤϸߤΥǥ쥯ȥ꤫ХѥǤޤ \f2classpathlist\fP ʣΥѥ JAR ե뤬ޤޤˤϡ Solaris ξϥ (\f2:\fP) ǡWindows ξϥߥ (\f2;\fP) Ǥ줾ڤޤŪΥ饹Ǥ˸ѥˤϡΥץפǤ 
+.LP
+饹եޤࡢJAR եؤΥѥꤹ򼨤ޤ 
+.nf
+\f3
+.fl
+\-altsignerpath /home/user/lib/authsigner.jar
+.fl
+\fP
+.fi
+.LP
+JAR ե̾ޤޤƤ뤳ȤդƤ 
+.LP
+饹եޤ JAR եؤΥѥꤹ򼨤ޤ 
+.nf
+\f3
+.fl
+\-altsignerpath /home/user/classes/com/sun/tools/jarsigner/
+.fl
+\fP
+.fi
+.LP
+JAR ե̾ϴޤޤƤʤȤαդƤ  
+.TP 3
+\-strict 
+̾ޤϸڽˡ餫ηٹåɽ礬ޤޥɹԤǤΥץꤹȡĤäٹåġνλɤȿǤޤܺ٤ϡַٹפι򻲾ȤƤ 
+.TP 3
+\-verbose:sub\-options 
+ڽǡ \f2\-verbose\fP ץϡɽ̤ꤹ륵֥ץޤ \f2\-certs\fP ꤷ硢ǥեȥ⡼ (ޤϥ֥ץ all) Ǥϡȥ꤬뤿Ӥˤγƥȥ꤬ɽ졢ΤȤ JAR եγƽ̾Ԥξɽޤ \f2\-certs\fP  \f2\-verbose:grouped\fP ֥ץꤷ硢Ʊ̾ԾĥȥȤξ󤬡ä˥롼ײɽޤ \f2\-certs\fP  \f2\-verbose:summary\fP ֥ץꤷ硢Ʊ̾ԾĥȥȤξ󤬤ä˥롼ײɽޤƥȥξܺ٤1 ĤΥȥ (Ӥʾ)פȤ󤵤ɽޤܺ٤ι򻲾ȤƤ 
+.RE
+
+.LP
+.SH ""
+.LP
+.SS 
+JAR եν̾
+.LP
+.LP
+bundle.jar Ȥ̾ JAR ե뤬ȤޤΥեˡȥ̾ jane Ǥ桼Ȥäơ̾դȤޤȥϡmystore Ȥ̾ǡC ɥ饤֤ working ǥ쥯ȥˤꡢȥΥѥɤ mypass\f2jane\fP Υѥɤ j638klm Ȥޤξ硢Υޥɤ¹ԤȡJAR ե˽̾դ sbundle.jar Ȥ̾դ JAR եǤޤ
+.LP
+.nf
+\f3
+.fl
+    jarsigner \-keystore /working/mystore \-storepass myspass
+.fl
+      \-keypass j638klm \-signedjar sbundle.jar bundle.jar jane
+.fl
+\fP
+.fi
+
+.LP
+.LP
+ΥޥɤǤ \f2\-sigfile\fP ꤵƤʤᡢ̾դ JAR ե˳Ǽ .SF ե .DSA ե̾ϡ̾ǥե̾ĤޤĤޤꡢ̾ \f2JANE.SF\fP  \f2JANE.DSA\fP ˤʤޤ
+.LP
+.LP
+ȥΥѥɤΥѥɤ򤢤ȤϤϡΥޥɤṳ̂ƼΤ褦ϤǤޤ
+.LP
+.nf
+\f3
+.fl
+    jarsigner \-keystore /working/mystore
+.fl
+      \-signedjar sbundle.jar bundle.jar jane
+.fl
+\fP
+.fi
+
+.LP
+.LP
+ǥեȤΥȥ (ۡǥ쥯ȥ .keystore Ȥ̾Υȥ) Ѥϡ˼褦ˡȥλάǤޤ
+.LP
+.nf
+\f3
+.fl
+    jarsigner \-signedjar sbundle.jar bundle.jar jane
+.fl
+\fP
+.fi
+
+.LP
+.LP
+Ǹˡ JAR ե (\f2bundle.jar\fP) ̾դ JAR եñ˾񤭤ϡΤ褦 \f2\-signedjar\fP ץꤹɬפϤޤ
+.LP
+.nf
+\f3
+.fl
+    jarsigner bundle.jar jane
+.fl
+\fP
+.fi
+
+.LP
+.SS 
+̾դ JAR եθ
+.LP
+.LP
+˼Τϡ̾դ JAR ե򸡾ڤ̾ͭ JAR ե뤬ѤƤʤȤǧ뤿ΥޥǤ
+.LP
+.nf
+\f3
+.fl
+    jarsigner \-verify sbundle.jar
+.fl
+\fP
+.fi
+
+.LP
+.LP
+ڤȡΤ褦ʥåɽޤ
+.LP
+.nf
+\f3
+.fl
+    jar verified.
+.fl
+\fP
+.fi
+
+.LP
+.LP
+ȤץץȤɽޤڤʤäϡ顼åɽޤ
+.LP
+.LP
+\-verbose ץȤȡ \f2¿ξ\fP ɽޤ\-verbose ץդ \f3jarsigner\fP \f2ѤȤν\fP ˼ޤ
+.LP
+.nf
+\f3
+.fl
+    jarsigner \-verify \-verbose sbundle.jar
+.fl
+
+.fl
+           198 Fri Sep 26 16:14:06 PDT 1997 META\-INF/MANIFEST.MF
+.fl
+           199 Fri Sep 26 16:22:10 PDT 1997 META\-INF/JANE.SF
+.fl
+          1013 Fri Sep 26 16:22:10 PDT 1997 META\-INF/JANE.DSA
+.fl
+    smk   2752 Fri Sep 26 16:12:30 PDT 1997 AclEx.class
+.fl
+    smk    849 Fri Sep 26 16:12:46 PDT 1997 test.class
+.fl
+
+.fl
+      s = ̾ڤޤ
+.fl
+      m = ޥ˥եȤ˥ȥ꤬ܤƤޤ
+.fl
+      k = ȥ 1 İʾξ񤬸Ĥޤ
+.fl
+
+.fl
+    JAR ڤޤ
+.fl
+\fP
+.fi
+
+.LP
+.SS 
+Ȥä
+.LP
+.LP
+ڻ \-verify  \-verbose ץ˲ä \f2\-certs\fP ץꤷϡ JAR եγƽ̾ԤξϤޤˤϡ񥿥ס̾Լ̾ (X.509 ξΤ) JAR եθξ񤬥ȥȥξ˰פˤϡ̤ǰϤޤ줿̾ԤΥȥ̾ޤޤޤ򼨤ޤ
+.LP
+.nf
+\f3
+.fl
+    jarsigner \-keystore /working/mystore \-verify \-verbose \-certs myTest.jar
+.fl
+
+.fl
+           198 Fri Sep 26 16:14:06 PDT 1997 META\-INF/MANIFEST.MF
+.fl
+           199 Fri Sep 26 16:22:10 PDT 1997 META\-INF/JANE.SF
+.fl
+          1013 Fri Sep 26 16:22:10 PDT 1997 META\-INF/JANE.DSA
+.fl
+           208 Fri Sep 26 16:23:30 PDT 1997 META\-INF/JAVATEST.SF
+.fl
+          1087 Fri Sep 26 16:23:30 PDT 1997 META\-INF/JAVATEST.DSA
+.fl
+    smk   2752 Fri Sep 26 16:12:30 PDT 1997 Tst.class
+.fl
+
+.fl
+      X.509, CN=Test Group, OU=Java Software, O=Sun Microsystems, L=CUP, S=CA, C=US (javatest)
+.fl
+      X.509, CN=Jane Smith, OU=Java Software, O=Sun, L=cup, S=ca, C=us (jane)
+.fl
+
+.fl
+      s = ̾ڤޤ
+.fl
+      m = ޥ˥եȤ˥ȥ꤬ܤƤޤ
+.fl
+      k = ȥ 1 İʾξ񤬸Ĥޤ
+.fl
+
+.fl
+    JAR ڤޤ
+.fl
+\fP
+.fi
+
+.LP
+.LP
+̾Ԥξ X.509 Ǥʤϡ̾ɽޤ󡣤ξˤϡΥפ̾ɽޤȤС PGP ǡ̾ bob ξϡΤ褦ɽޤ
+.LP
+.nf
+\f3
+.fl
+      PGP, (bob)
+.fl
+\fP
+.fi
+
+.LP
+.SS 
+ǥƥƥǡ١ν̾Ԥޤ JAR եθ
+.LP
+.LP
+JAR ե뤬JDK 1.1  \f3javakey\fP ġȤäƽ̾Ƥ硢̾Ԥϥǥƥƥǡ١̾Ǥξ硢ڤνϤˤ i Ȥ椬ޤޤޤJAR ե뤬ǥƥƥǡ١̾ȥȥ̾ξˤäƽ̾Ƥϡk  i ξɽޤ
+.LP
+.LP
+\f2\-certs\fP ץꤷ硢ȥ̾ϳ̤ǰϤޤΤФǥƥƥǡ١̾ϳѳ̤ǰϤޤɽޤȤС
+.LP
+.nf
+\f3
+.fl
+    jarsigner \-keystore /working/mystore \-verify \-verbose \-certs writeFile.jar
+.fl
+
+.fl
+           198 Fri Sep 26 16:14:06 PDT 1997 META\-INF/MANIFEST.MF
+.fl
+           199 Fri Sep 26 16:22:10 PDT 1997 META\-INF/JANE.SF
+.fl
+          1013 Fri Sep 26 16:22:10 PDT 1997 META\-INF/JANE.DSA
+.fl
+           199 Fri Sep 27 12:22:30 PDT 1997 META\-INF/DUKE.SF
+.fl
+          1013 Fri Sep 27 12:22:30 PDT 1997 META\-INF/DUKE.DSA
+.fl
+   smki   2752 Fri Sep 26 16:12:30 PDT 1997 writeFile.html
+.fl
+
+.fl
+      X.509, CN=Jane Smith, OU=Java Software, O=Sun, L=cup, S=ca, C=us (jane)
+.fl
+      X.509, CN=Duke, OU=Java Software, O=Sun, L=cup, S=ca, C=us [duke]
+.fl
+
+.fl
+      s = ̾ڤޤ
+.fl
+      m = ޥ˥եȤ˥ȥ꤬ܤƤޤ
+.fl
+      k = ȥ 1 İʾξ񤬸Ĥޤ
+.fl
+      i = ǥƥƥפ 1 İʾξ񤬸Ĥޤ
+.fl
+
+.fl
+    JAR ڤޤ
+.fl
+\fP
+.fi
+
+.LP
+.LP
+̾ duke ϳѳ̤ǰϤޤƤΤǡ̾ϥȥ̾ǤϤʤǥƥƥǡ١̾Ǥ
+.LP
+.SH "ٹ"
+.LP
+̾/ڽˤϡjarsigner 餵ޤޤʷٹɽǽޤηٹ𥳡ɤϼΤ褦Ƥޤ 
+.nf
+\f3
+.fl
+         hasExpiringCert         2
+.fl
+              JAR ˴ޤޤ륨ȥν̾Ԥξ 6 ˴ڤˤʤޤ
+.fl
+
+.fl
+         hasExpiredCert          4
+.fl
+              JAR ˴ޤޤ륨ȥν̾Ԥξ񤬴ڤˤʤäƤޤ
+.fl
+
+.fl
+         notYetValidCert         4
+.fl
+              JAR ˴ޤޤ륨ȥν̾Ԥξ񤬤ޤͭˤʤäƤޤ
+.fl
+
+.fl
+         chainNotValidated       4
+.fl
+              JAR ˴ޤޤ륨ȥξθڤԤޤ
+.fl
+
+.fl
+         badKeyUsa ge             8
+.fl
+              JAR ˴ޤޤ륨ȥν̾Ԥξ KeyUsage ĥɤν̾ĤƤޤ
+.fl
+
+.fl
+         badExtendedKeyUsage     8
+.fl
+              JAR ˴ޤޤ륨ȥν̾Ԥξ ExtendedKeyUsage ĥ
+.fl
+             ɤν̾ĤƤޤ
+.fl
+
+.fl
+         badNetscapeCertType     8
+.fl
+              JAR ˴ޤޤ륨ȥν̾Ԥξ NetscapeCertType ĥ
+.fl
+             ɤν̾ĤƤޤ
+.fl
+
+.fl
+         hasUnsignedEntry        16
+.fl
+              JAR ˤϡåԤƤʤ̾ʤȥ꤬ޤޤƤޤ
+.fl
+
+.fl
+         notSignedByAlias        32
+.fl
+              JAR ˤϡꤵ줿̾ˤäƽ̾Ƥʤ̾դȥ꤬ޤޤƤޤ
+.fl
+
+.fl
+         aliasNotInStore         32
+.fl
+              JAR ˤϡΥȥ̾ˤäƽ̾Ƥʤ̾դȥ꤬ޤޤƤޤ
+.fl
+   
+.fl
+\fP
+.fi
+
+.LP
+.LP
+\f2\-strict\fP ץꤷ硢Ф줿ٹ OR äͤġνλɤȤ֤ޤȤСȥν̾˻Ѥ񤬴ڤˤʤäƤơĤξ keyUsage ĥǥեν̾ĤƤʤ硢λ 12 (=4+8) ֤ޤ
+.LP
+.LP
+\f3\fP: UNIX ǻѲǽͤ 0  255 Ǥ뤿ᡢλɤϺѤޤˤƤ⡢̾/ڽԤȡνλɤ֤ޤ
+.LP
+.nf
+\f3
+.fl
+failure                 1 
+.fl
+\fP
+.fi
+
+.LP
+.SS 
+JDK 1.1 Ȥθߴ
+.LP
+.LP
+\f3keytool\fP ġ \f3jarsigner\fP ġϡJDK 1.1 󶡤Ƥ \f3javakey\fP ġ֤ΤǤοġϡȥѥɤݸ뵡ǽ䡢̾˲äƽ̾򸡾ڤ뵡ǽʤɡ\f3javakey\fP ¿ΤǽƤޤ
+.LP
+.LP
+ȥƥ㡼ϡ\f3javakey\fP ƴƤǥƥƥǡ١ΤǤȥȡJDK 1.1  \f3javakey\fP ȤäƤǡ١Ȥδ֤ˤϲ̸ߴϤޤ󡣤ΤȤϲǽǤ
+.LP
+.RS 3
+.TP 2
+o
+\f3keytool\fP  \f2\-identitydb\fP ޥɤȤȡǥƥƥǡ١ξ򥭡ȥ˥ݡȤǤޤ 
+.TP 2
+o
+\f3jarsigner\fP ϡ \f3javakey\fP Ȥäƽ̾줿 JAR ե˽̾դ뤳ȤǤޤ 
+.TP 2
+o
+\f3jarsigner\fP ϡ\f3javakey\fPȤäƽ̾줿 JAR ե򸡾ڤǤޤäơjarsigner ϡJava 2 SDK ΥȥǤϤʤ JDK 1.1 Υǥƥƥǡ١ν̾̾ǧоݤ˽ԤȤǤޤ 
+.RE
+
+.LP
+.LP
+ɽϡJDK 1.1.x ǽ̾줿 JAR ե뤬Java 2 ץåȥեǤɤΤ褦˰뤫򼨤Ƥޤ
 .LP
 .LP
 .TS
@@ -160,7 +1053,7 @@
 .ll \n(34u*1u/6u
 .if \n(.l<\n(80 .ll \n(80u
 .in 0
-\f3JAR ファイルのタイプ\fP
+\f3JAR եΥ\fP
 .br
 .di
 .nr a| \n(dn
@@ -176,7 +1069,7 @@
 .ll \n(34u*1u/6u
 .if \n(.l<\n(81 .ll \n(81u
 .in 0
-\f31.1 データベース内のアイデンティティー\fP
+\f31.1 ǡ١Υǥƥƥ\fP
 .br
 .di
 .nr b| \n(dn
@@ -192,7 +1085,7 @@
 .ll \n(34u*1u/6u
 .if \n(.l<\n(82 .ll \n(82u
 .in 0
-\f31.1 データベースから Java 2 Platform キーストアにインポートされる信頼できるアイデンティティー (4)\fP
+\f31.1 ǡ١ Java 2 Platform ȥ˥ݡȤ뿮Ǥ륢ǥƥƥ (4)\fP
 .br
 .di
 .nr c| \n(dn
@@ -208,7 +1101,7 @@
 .ll \n(34u*1u/6u
 .if \n(.l<\n(83 .ll \n(83u
 .in 0
-\f3ポリシーファイルがアイデンティティー/別名に特権を与える\fP
+\f3ݥꥷե뤬ǥƥƥ/̾øͿ\fP
 .br
 .di
 .nr d| \n(dn
@@ -224,7 +1117,7 @@
 .ll \n(34u*1u/6u
 .if \n(.l<\n(84 .ll \n(84u
 .in 0
-すべてのコードに与えられるデフォルトの特権
+٤ƤΥɤͿǥեȤø
 .br
 .di
 .nr e| \n(dn
@@ -240,7 +1133,7 @@
 .ll \n(34u*1u/6u
 .if \n(.l<\n(84 .ll \n(84u
 .in 0
-すべてのコードに与えられるデフォルトの特権
+٤ƤΥɤͿǥեȤø
 .br
 .di
 .nr f| \n(dn
@@ -256,7 +1149,7 @@
 .ll \n(34u*1u/6u
 .if \n(.l<\n(84 .ll \n(84u
 .in 0
-すべてのコードに与えられるデフォルトの特権
+٤ƤΥɤͿǥեȤø
 .br
 .di
 .nr g| \n(dn
@@ -272,7 +1165,7 @@
 .ll \n(34u*1u/6u
 .if \n(.l<\n(81 .ll \n(81u
 .in 0
-あり/信頼できない
+/Ǥʤ
 .br
 .di
 .nr h| \n(dn
@@ -288,7 +1181,7 @@
 .ll \n(34u*1u/6u
 .if \n(.l<\n(84 .ll \n(84u
 .in 0
-すべてのコードに与えられるデフォルトの特権 (3)
+٤ƤΥɤͿǥեȤø(3)
 .br
 .di
 .nr i| \n(dn
@@ -304,7 +1197,7 @@
 .ll \n(34u*1u/6u
 .if \n(.l<\n(81 .ll \n(81u
 .in 0
-あり/信頼できない
+/Ǥʤ
 .br
 .di
 .nr j| \n(dn
@@ -320,7 +1213,7 @@
 .ll \n(34u*1u/6u
 .if \n(.l<\n(84 .ll \n(84u
 .in 0
-すべてのコードに与えられるデフォルトの特権 (1,3)
+٤ƤΥɤͿǥեȤø(1,3)
 .br
 .di
 .nr k| \n(dn
@@ -336,7 +1229,7 @@
 .ll \n(34u*1u/6u
 .if \n(.l<\n(84 .ll \n(84u
 .in 0
-すべてのコードに与えられるデフォルトの特権とポリシーファイル内で与えられる特権
+٤ƤΥɤͿǥեȤøȥݥꥷեͿø
 .br
 .di
 .nr l| \n(dn
@@ -352,7 +1245,7 @@
 .ll \n(34u*1u/6u
 .if \n(.l<\n(84 .ll \n(84u
 .in 0
-すべてのコードに与えられるデフォルトの特権とポリシーファイル内で与えられる特権 (2)
+٤ƤΥɤͿǥեȤøȥݥꥷեͿø(2)
 .br
 .di
 .nr m| \n(dn
@@ -363,46 +1256,46 @@
 .nf
 .ll \n(34u
 .nr 80 0
-.nr 38 \w署名付き JAR
+.nr 38 \w̾դ JAR
 .if \n(80<\n(38 .nr 80 \n(38
-.nr 38 \w署名のない JAR
+.nr 38 \w̾Τʤ JAR
 .if \n(80<\n(38 .nr 80 \n(38
-.nr 38 \w署名付き JAR
+.nr 38 \w̾դ JAR
 .if \n(80<\n(38 .nr 80 \n(38
-.nr 38 \w署名付き JAR
+.nr 38 \w̾դ JAR
 .if \n(80<\n(38 .nr 80 \n(38
-.nr 38 \w署名付き JAR
+.nr 38 \w̾դ JAR
 .if \n(80<\n(38 .nr 80 \n(38
-.nr 38 \w署名付き JAR
+.nr 38 \w̾դ JAR
 .if \n(80<\n(38 .nr 80 \n(38
-.nr 38 \w署名付き JAR
+.nr 38 \w̾դ JAR
 .if \n(80<\n(38 .nr 80 \n(38
-.nr 38 \w署名付き JAR
+.nr 38 \w̾դ JAR
 .if \n(80<\n(38 .nr 80 \n(38
-.nr 38 \w署名付き JAR
+.nr 38 \w̾դ JAR
 .if \n(80<\n(38 .nr 80 \n(38
-.nr 38 \w署名付き JAR
+.nr 38 \w̾դ JAR
 .if \n(80<\n(38 .nr 80 \n(38
 .80
 .rm 80
 .nr 38 \n(a-
 .if \n(80<\n(38 .nr 80 \n(38
 .nr 81 0
-.nr 38 \wなし
+.nr 38 \wʤ
 .if \n(81<\n(38 .nr 81 \n(38
-.nr 38 \wなし
+.nr 38 \wʤ
 .if \n(81<\n(38 .nr 81 \n(38
-.nr 38 \wなし
+.nr 38 \wʤ
 .if \n(81<\n(38 .nr 81 \n(38
-.nr 38 \wなし
+.nr 38 \wʤ
 .if \n(81<\n(38 .nr 81 \n(38
-.nr 38 \wあり/信頼できる
+.nr 38 \w/Ǥ
 .if \n(81<\n(38 .nr 81 \n(38
-.nr 38 \wあり/信頼できる
+.nr 38 \w/Ǥ
 .if \n(81<\n(38 .nr 81 \n(38
-.nr 38 \wあり/信頼できる
+.nr 38 \w/Ǥ
 .if \n(81<\n(38 .nr 81 \n(38
-.nr 38 \wあり/信頼できる
+.nr 38 \w/Ǥ
 .if \n(81<\n(38 .nr 81 \n(38
 .81
 .rm 81
@@ -413,63 +1306,63 @@
 .nr 38 \n(j-
 .if \n(81<\n(38 .nr 81 \n(38
 .nr 82 0
-.nr 38 \wなし
+.nr 38 \wʤ
 .if \n(82<\n(38 .nr 82 \n(38
-.nr 38 \wなし
+.nr 38 \wʤ
 .if \n(82<\n(38 .nr 82 \n(38
-.nr 38 \wあり
+.nr 38 \w
 .if \n(82<\n(38 .nr 82 \n(38
-.nr 38 \wなし
+.nr 38 \wʤ
 .if \n(82<\n(38 .nr 82 \n(38
-.nr 38 \wなし
+.nr 38 \wʤ
 .if \n(82<\n(38 .nr 82 \n(38
-.nr 38 \wあり
+.nr 38 \w
 .if \n(82<\n(38 .nr 82 \n(38
-.nr 38 \wあり
+.nr 38 \w
 .if \n(82<\n(38 .nr 82 \n(38
-.nr 38 \wなし
+.nr 38 \wʤ
 .if \n(82<\n(38 .nr 82 \n(38
-.nr 38 \wあり
+.nr 38 \w
 .if \n(82<\n(38 .nr 82 \n(38
-.nr 38 \wなし
+.nr 38 \wʤ
 .if \n(82<\n(38 .nr 82 \n(38
 .82
 .rm 82
 .nr 38 \n(c-
 .if \n(82<\n(38 .nr 82 \n(38
 .nr 83 0
-.nr 38 \wなし
+.nr 38 \wʤ
 .if \n(83<\n(38 .nr 83 \n(38
-.nr 38 \wなし
+.nr 38 \wʤ
 .if \n(83<\n(38 .nr 83 \n(38
-.nr 38 \wなし
+.nr 38 \wʤ
 .if \n(83<\n(38 .nr 83 \n(38
-.nr 38 \wなし
+.nr 38 \wʤ
 .if \n(83<\n(38 .nr 83 \n(38
-.nr 38 \wあり
+.nr 38 \w
 .if \n(83<\n(38 .nr 83 \n(38
-.nr 38 \wあり
+.nr 38 \w
 .if \n(83<\n(38 .nr 83 \n(38
-.nr 38 \wあり
+.nr 38 \w
 .if \n(83<\n(38 .nr 83 \n(38
-.nr 38 \wなし
+.nr 38 \wʤ
 .if \n(83<\n(38 .nr 83 \n(38
-.nr 38 \wなし
+.nr 38 \wʤ
 .if \n(83<\n(38 .nr 83 \n(38
-.nr 38 \wあり
+.nr 38 \w
 .if \n(83<\n(38 .nr 83 \n(38
 .83
 .rm 83
 .nr 38 \n(d-
 .if \n(83<\n(38 .nr 83 \n(38
 .nr 84 0
-.nr 38 \w\f3与えられる特権\fP
+.nr 38 \w\f3Ϳø\fP
 .if \n(84<\n(38 .nr 84 \n(38
-.nr 38 \wすべての特権
+.nr 38 \w٤Ƥø
 .if \n(84<\n(38 .nr 84 \n(38
-.nr 38 \wすべての特権 (1)
+.nr 38 \w٤Ƥø (1)
 .if \n(84<\n(38 .nr 84 \n(38
-.nr 38 \wすべての特権 (1)
+.nr 38 \w٤Ƥø (1)
 .if \n(84<\n(38 .nr 84 \n(38
 .84
 .rm 84
@@ -503,7 +1396,7 @@
 .nr 44 \n(83+(3*\n(38)
 .nr 84 +\n(44
 .nr TW \n(84
-.if t .if \n(TW>\n(.li .tm Table at line 185 file Input is too wide - \n(TW units
+.if t .if \n(TW>\n(.li .tm Table at line 1078 file Input is too wide - \n(TW units
 .fc  
 .nr #T 0-1
 .nr #a 0-1
@@ -528,7 +1421,7 @@
 .ta \n(80u \n(81u \n(82u \n(83u \n(84u 
 .nr 31 \n(.f
 .nr 35 1m
-\&\h'|\n(40u'\h'|\n(41u'\h'|\n(42u'\h'|\n(43u'\h'|\n(44u'\f3与えられる特権\fP
+\&\h'|\n(40u'\h'|\n(41u'\h'|\n(42u'\h'|\n(43u'\h'|\n(44u'\f3Ϳø\fP
 .mk ##
 .nr 31 \n(##
 .sp |\n(##u-1v
@@ -565,7 +1458,7 @@
 .ta \n(80u \n(81u \n(82u \n(83u \n(84u 
 .nr 31 \n(.f
 .nr 35 1m
-\&\h'|\n(40u'署名付き JAR\h'|\n(41u'なし\h'|\n(42u'なし\h'|\n(43u'なし\h'|\n(44u'
+\&\h'|\n(40u'̾դ JAR\h'|\n(41u'ʤ\h'|\n(42u'ʤ\h'|\n(43u'ʤ\h'|\n(44u'
 .mk ##
 .nr 31 \n(##
 .sp |\n(##u-1v
@@ -581,7 +1474,7 @@
 .ta \n(80u \n(81u \n(82u \n(83u \n(84u 
 .nr 31 \n(.f
 .nr 35 1m
-\&\h'|\n(40u'署名のない JAR\h'|\n(41u'なし\h'|\n(42u'なし\h'|\n(43u'なし\h'|\n(44u'
+\&\h'|\n(40u'̾Τʤ JAR\h'|\n(41u'ʤ\h'|\n(42u'ʤ\h'|\n(43u'ʤ\h'|\n(44u'
 .mk ##
 .nr 31 \n(##
 .sp |\n(##u-1v
@@ -597,7 +1490,7 @@
 .ta \n(80u \n(81u \n(82u \n(83u \n(84u 
 .nr 31 \n(.f
 .nr 35 1m
-\&\h'|\n(40u'署名付き JAR\h'|\n(41u'なし\h'|\n(42u'あり\h'|\n(43u'なし\h'|\n(44u'
+\&\h'|\n(40u'̾դ JAR\h'|\n(41u'ʤ\h'|\n(42u'\h'|\n(43u'ʤ\h'|\n(44u'
 .mk ##
 .nr 31 \n(##
 .sp |\n(##u-1v
@@ -615,7 +1508,7 @@
 .ta \n(80u \n(81u \n(82u \n(83u \n(84u 
 .nr 31 \n(.f
 .nr 35 1m
-\&\h'|\n(40u'署名付き JAR\h'|\n(41u'\h'|\n(42u'なし\h'|\n(43u'なし\h'|\n(44u'
+\&\h'|\n(40u'̾դ JAR\h'|\n(41u'\h'|\n(42u'ʤ\h'|\n(43u'ʤ\h'|\n(44u'
 .mk ##
 .nr 31 \n(##
 .sp |\n(##u-1v
@@ -640,7 +1533,7 @@
 .ta \n(80u \n(81u \n(82u \n(83u \n(84u 
 .nr 31 \n(.f
 .nr 35 1m
-\&\h'|\n(40u'署名付き JAR\h'|\n(41u'\h'|\n(42u'なし\h'|\n(43u'あり\h'|\n(44u'
+\&\h'|\n(40u'̾դ JAR\h'|\n(41u'\h'|\n(42u'ʤ\h'|\n(43u'\h'|\n(44u'
 .mk ##
 .nr 31 \n(##
 .sp |\n(##u-1v
@@ -663,7 +1556,7 @@
 .ta \n(80u \n(81u \n(82u \n(83u \n(84u 
 .nr 31 \n(.f
 .nr 35 1m
-\&\h'|\n(40u'署名付き JAR\h'|\n(41u'なし\h'|\n(42u'あり\h'|\n(43u'あり\h'|\n(44u'
+\&\h'|\n(40u'̾դ JAR\h'|\n(41u'ʤ\h'|\n(42u'\h'|\n(43u'\h'|\n(44u'
 .mk ##
 .nr 31 \n(##
 .sp |\n(##u-1v
@@ -679,7 +1572,7 @@
 .ta \n(80u \n(81u \n(82u \n(83u \n(84u 
 .nr 31 \n(.f
 .nr 35 1m
-\&\h'|\n(40u'署名付き JAR\h'|\n(41u'あり/信頼できる\h'|\n(42u'あり\h'|\n(43u'あり\h'|\n(44u'
+\&\h'|\n(40u'̾դ JAR\h'|\n(41u'/Ǥ\h'|\n(42u'\h'|\n(43u'\h'|\n(44u'
 .mk ##
 .nr 31 \n(##
 .sp |\n(##u-1v
@@ -693,15 +1586,15 @@
 .ta \n(80u \n(81u \n(82u \n(83u \n(84u 
 .nr 31 \n(.f
 .nr 35 1m
-\&\h'|\n(40u'署名付き JAR\h'|\n(41u'あり/信頼できる\h'|\n(42u'なし\h'|\n(43u'なし\h'|\n(44u'すべての特権
+\&\h'|\n(40u'̾դ JAR\h'|\n(41u'/Ǥ\h'|\n(42u'ʤ\h'|\n(43u'ʤ\h'|\n(44u'٤Ƥø
 .ta \n(80u \n(81u \n(82u \n(83u \n(84u 
 .nr 31 \n(.f
 .nr 35 1m
-\&\h'|\n(40u'署名付き JAR\h'|\n(41u'あり/信頼できる\h'|\n(42u'あり\h'|\n(43u'なし\h'|\n(44u'すべての特権 (1)
+\&\h'|\n(40u'̾դ JAR\h'|\n(41u'/Ǥ\h'|\n(42u'\h'|\n(43u'ʤ\h'|\n(44u'٤Ƥø (1)
 .ta \n(80u \n(81u \n(82u \n(83u \n(84u 
 .nr 31 \n(.f
 .nr 35 1m
-\&\h'|\n(40u'署名付き JAR\h'|\n(41u'あり/信頼できる\h'|\n(42u'なし\h'|\n(43u'あり\h'|\n(44u'すべての特権 (1)
+\&\h'|\n(40u'̾դ JAR\h'|\n(41u'/Ǥ\h'|\n(42u'ʤ\h'|\n(43u'\h'|\n(44u'٤Ƥø (1)
 .fc
 .nr T. 1
 .T# 1
@@ -724,894 +1617,43 @@
 
 .LP
 .LP
-注 \-
+ \-
 .LP
 .RS 3
 .TP 3
 1.
-ポリシーファイル内にアイデンティティー/別名についての言及がある場合、それをキーストアにインポートして、ポリシーファイルの設定が与えられた特権に反映されるようにする必要があります。 
+ݥꥷե˥ǥƥƥ/̾ˤĤƤθڤ硢򥭡ȥ˥ݡȤơݥꥷե꤬Ϳ줿øȿǤ褦ˤɬפޤ 
 .TP 3
 2.
-ポリシーファイル/キーストアの組み合わせは、アイデンティティーデータベース内の信頼できるアイデンティティーよりも優先されます。 
+ݥꥷե/ȥȤ߹碌ϡǥƥƥǡ١οǤ륢ǥƥƥͥ褵ޤ 
 .TP 3
 3.
-Java 2 プラットフォームでは、信頼できないアイデンティティーは無視されます。 
+Java 2 ץåȥեǤϡǤʤǥƥƥ̵뤵ޤ 
 .TP 3
 4.
-Java 2 SDK キーストアにインポートできるのは、信頼できるアイデンティティーだけです。 
+Java 2 SDK ȥ˥ݡȤǤΤϡǤ륢ǥƥƥǤ 
 .RE
 
 .LP
-.SS 
-キーストアの別名
-.LP
-.RS 3
-
-.LP
-.LP
-キーストアのすべてのエントリは、一意の「別名」を介してアクセスされます。
-.LP
-.LP
-\f3jarsigner\fP を使って JAR ファイルに署名を付けるときは、署名の生成に必要な非公開鍵を含むキーストアエントリの別名を指定する必要があります。たとえば、次の例は、working ディレクトリの mystore という名前のキーストアに含まれる別名 duke に関連付けられた非公開鍵を使って、MyJARFile.jar という名前の JAR ファイルに署名を付けます。出力ファイルは指定されていないので、MyJARFile.jar は署名付きの JAR ファイルによって上書きされます。
-.LP
-.nf
-\f3
-.fl
-    jarsigner \-keystore /working/mystore \-storepass myspass
-.fl
-      \-keypass dukekeypasswd MyJARFile.jar duke 
-.fl
-\fP
-.fi
-
-.LP
-.LP
-キーストアはパスワードで保護されているので、ストアのパスワード (上の例では mypass) を指定する必要があります。コマンド行でストアのパスワードを指定しないと、パスワードの入力を求められます。同様に、非公開鍵もキーストア内でパスワードによって保護されているため、非公開鍵のパスワード (上の例では dukekeypasswd) を指定する必要があります。 コマンド行で非公開鍵のパスワードを指定していない、また、指定したパスワートが保存されているパスワードと違っている場合には、非公開鍵のパスワードの入力を求められます。
-.LP
-.RE
-.SS 
-キーストアの場所
-.LP
-.RS 3
-
-.LP
-.LP
-\f3jarsigner\fP には、使用するキーストアの URL を指定する \f2\-keystore\fP オプションがあります。キーストアは、デフォルトではユーザーのホームディレクトリの \f2.keystore\fP という名前のファイルに格納されます。 ユーザーのホームディレクトリは、\f2user.home\fP システムプロパティーによって決まります。Solaris システムの場合、\f2user.home\fP がデフォルトでユーザーのホームディレクトリになっています。
-.LP
-.LP
-\f2\-keystore\fP オプションからの入力ストリームは、\f2KeyStore.load\fP メソッドに渡されます。URL として \f2NONE\fP が指定されている場合は、null のストリームが \f2KeyStore.load\fP メソッドに渡されます。\f2NONE\fP は、\f2KeyStore\fP がファイルベースではなく、たとえば、ハードウェアトークンデバイスに置かれている場合に指定します。
-.LP
-.RE
-.SS 
-キーストアの実装
-.LP
-.RS 3
-
-.LP
-.LP
-\f2java.security\fP パッケージで提供される \f2KeyStore\fP クラスには、キーストア内の情報に対するアクセスと変更を行うための明確に定義されたインタフェースが用意されています。キーストアの固定実装としては、それぞれが特定の「タイプ」のキーストアを対象とする複数の異なる実装が存在可能です。
-.LP
-.LP
-現在、キーストアの実装を使用するものとして、\f3keytool\fP と \f3jarsigner\fP の 2 つのコマンド行ツールと、\f3Policy Tool\fP という名前の 1 つの GUI ベースのツールがあります。\f2KeyStore\fP は public として使用可能なので、Java 2 SDK ユーザーは KeyStore を使ったほかのセキュリティーアプリケーションも作成できます。
-.LP
-.LP
-キーストアには、Sun が提供する組み込みのデフォルトの実装があります。これは、JKS という名前の独自のキーストアタイプ (形式) を利用するもので、キーストアをファイルとして実装しています。この実装では、個々の非公開鍵は個別のパスワードによって保護され、キーストア全体の整合性も (非公開鍵とは別の) パスワードによって保護されます。
-.LP
-.LP
-キーストアの実装は、プロバイダベースです。具体的には、\f2KeyStore\fP が提供するアプリケーションインタフェースは、Service Provider Interface (SPI) という形で実装されています。つまり、対応する \f2KeystoreSpi\fP 抽象クラス (これも \f2java.security\fP パッケージに含まれている) があり、このクラスが Service Provider Interface のメソッドを定義しています。 これらのメソッドは、「プロバイダ」が実装しなければなりません。ここで、「プロバイダ」とは、Java Security API によってアクセス可能なサービスのサブセットに対し、その固定実装を提供するパッケージまたはパッケージの集合のことです。したがって、キーストアの実装を提供するには、
-.na
-\f2「Java 暗号化アーキテクチャー用プロバイダの実装方法」\fP @
-.fi
-http://java.sun.com/javase/6/docs/technotes/guides/security/crypto/HowToImplAProvider.htmlで説明しているように、クライアントが「プロバイダ」を実装し、KeystoreSpi サブクラスの実装を提供する必要があります。
-.LP
-.LP
-アプリケーションでは、\f2KeyStore\fP クラスが提供する getInstance ファクトリメソッドを使うことで、さまざまなプロバイダから異なる「タイプ」のキーストアの実装を選択できます。キーストアのタイプは、キーストア情報の格納形式とデータ形式を定義するとともに、キーストア内の非公開鍵とキーストア自体の整合性を保護するために使われるアルゴリズムを定義します。異なるタイプのキーストアの実装には、互換性はありません。
-.LP
-.LP
-\f3keytool\fP は、任意のファイルベースのキーストア実装で動作します。keytool は、コマンド行から渡されたキーストアの場所をファイル名として扱い、これを FileInputStream に変換して、FileInputStream からキーストアの情報をロードします。一方、\f3jarsigner\fP ツールと \f3policytool\fP ツールは、URL で指定可能な任意の場所からキーストアを読み込むことができます。
-.LP
-.LP
-\f3jarsigner\fP と \f3keytool\fP の場合、\f2\-storetype\fP オプションを使ってコマンド行でキーストアのタイプを指定できます。\f3Policy Tool\fP の場合は、[Edit] メニューの [Change Keystore] コマンドを使ってキーストアのタイプを指定できます。
-.LP
-.LP
-キーストアのタイプを明示的に指定しない場合、keytool、jarsigner、および policytool の各ツールは、セキュリティープロパティーファイル内で指定された \f2keystore.type\fP プロパティーの値に基づいてキーストアの実装を選択します。セキュリティープロパティーファイルは、\f2java.security\fP という名前で SDK セキュリティープロパティーディレクトリ \f2java.home\fP/lib/security に置かれています。 \f2java.home\fP は、実行環境のディレクトリ (SDK の \f2jre\fP ディレクトリまたは Java 2 Runtime Environment の最上位のディレクトリ) です。
-.LP
-.LP
-各ツールは、\f2keystore.type\fP の値を取得し、この値で指定されたタイプのキーストアを実装しているプロバイダが見つかるまで、現在インストールされているすべてのプロバイダを調べます。目的のプロバイダが見つかると、そのプロバイダからのキーストアの実装を使います。
-.LP
-.LP
-\f2KeyStore\fP クラスでは \f2getDefaultType\fP という名前の static メソッドが定義されており、アプリケーションとアプレットはこのメソッドを使うことで \f2keystore.type\fP プロパティーの値を取得できます。次のコードは、デフォルトのキーストアタイプ (\f2keystore.type\fP プロパティーで指定されたタイプ) のインスタンスを生成します。
-.LP
-.nf
-\f3
-.fl
-    KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
-.fl
-\fP
-.fi
-
-.LP
-.LP
-デフォルトのキーストアタイプは JKS (Sun が提供する独自のタイプのキーストアの実装) です。これは、セキュリティープロパティーファイル内の次の行によって指定されています。
-.LP
-.nf
-\f3
-.fl
-    keystore.type=jks
-.fl
-\fP
-.fi
-
-.LP
-.LP
-注:キーストアのタイプの指定では、大文字と小文字は区別されません。たとえば、JKS と jks は同じものとして扱われます。
-.LP
-.LP
-各ツールでデフォルト以外のキーストアの実装を使用するには、上の行を変更して別のキーストアのタイプを指定します。たとえば、pkcs12 と呼ばれるタイプのキーストアの実装を提供しているプロバイダパッケージを使用するには、上の行を次のように変更します。
-.LP
-.nf
-\f3
-.fl
-    keystore.type=pkcs12
-.fl
-\fP
-.fi
-
-.LP
-.LP
-PKCS#11 プロバイダパッケージを使用する場合、その詳細については、「Java PKCS#11 Reference Guide」にある
-.na
-\f2「KeyTool and JarSigner」\fP @
-.fi
-http://java.sun.com/javase/6/docs/technotes/guides/security/p11guide.html#KeyToolJarSignerの節を参照してください。
-.LP
-.RE
-.RE
-.SS 
-サポートされるアルゴリズム
-.LP
-.RS 3
-
-.LP
-.LP
-デフォルトでは、\f3jarsigner\fP は次のどちらかのアルゴリズムを使って JAR ファイルに署名します。
+.SH "Ϣ"
 .LP
 .RS 3
 .TP 2
 o
-SHA\-1 ダイジェストアルゴリズムを使った DSA (デジタル署名アルゴリズム) 
+jar(1) ġΥɥ 
 .TP 2
 o
-MD5 ダイジェストアルゴリズムを使った RSA アルゴリズム 
-.RE
-
-.LP
-.LP
-具体的には、署名者の公開鍵と非公開鍵が DSA 鍵である場合、\f3jarsigner\fP は SHA1withDSA アルゴリズムを使って JAR ファイルに署名を付けます。署名者の鍵が RSA 鍵である場合、\f3jarsigner\fP は MD5withRSA アルゴリズムを使って JAR ファイルに署名を付けます。
-.LP
-.LP
-これらのデフォルトの署名アルゴリズムは、\f2\-sigalg\fP オプションを使ってオーバーライドできます。
-.LP
-.RE
-.SS 
-署名付き JAR ファイル
-.LP
-.RS 3
-
-.LP
-.LP
-\f3jarsigner\fP を使って JAR ファイルに署名を付けた場合、出力される署名付き JAR ファイルは入力 JAR ファイルと同じですが、次の 2 つの追加ファイルが META\-INF ディレクトリに置かれる点が異なります。
-.LP
-.RS 3
+keytool(1) ġΥɥ 
 .TP 2
 o
-.SF 拡張子の付いた署名ファイル 
-.TP 2
-o
-.DSA 拡張子の付いた署名ブロックファイル 
-.RE
-
-.LP
-.LP
-これら 2 つのファイルのベースファイル名は、\f2\-sigFile\fP オプションの値から作成されます。たとえば、次のようにオプションを指定したとします。
-.LP
-.nf
-\f3
-.fl
-  \-sigFile MKSIGN
-.fl
-\fP
+.na
+\f4jarsigner\fP\f2 ġλˤĤƤϡ\fP @
 .fi
-
-.LP
-.LP
-この場合、ファイル名はそれぞれ MKSIGN.SF と MKSIGN.DSA になります。
-.LP
-.LP
-コマンド行で \f2\-sigfile\fP オプションを指定しなかった場合、.SF ファイルと .DSA ファイルのベースファイル名は、コマンド行で指定された別名の先頭の 8 文字をすべて大文字に変換したものになります。別名が 8 文字未満の場合は、別名がそのまま使われます。別名の中に、署名ファイル名に使用できない文字が含まれている場合は、該当する文字を下線 (_) に置き換えてファイル名が作成されます。使用できる文字は、アルファベット、数字、下線 (_)、ハイフンです。
-.LP
-\f3署名 (.SF) ファイル\fP
-.LP
-.RS 3
-
-.LP
-.LP
-署名ファイル (.SF ファイル) は、\f3jarsigner\fP で署名を付けた JAR ファイルに常に含まれるマニフェストファイルと似ています。つまり、マニフェストファイル同様、.SF ファイルには、JAR ファイルに含まれているソースファイルごとに、次の 3 つの行があります。
-.LP
-.RS 3
-.TP 2
-o
-ファイル名 
-.TP 2
-o
-使われているダイジェストアルゴリズム (SHA) の名前 
-.TP 2
-o
-SHA ダイジェストの値 
-.RE
-
-.LP
-.LP
-マニフェストファイルでは、SHA ダイジェストの値は、ソースファイルのバイナリデータのダイジェスト (ハッシュ) です。一方、.SF ファイルでは、ソースファイルのダイジェストの値は、マニフェストファイル中の該当するソースファイルに対応する 3 行のハッシュです。
-.LP
-.LP
-署名ファイルには、デフォルトでマニフェストファイル全体のハッシュも含まれています。後述の「JAR ファイルの検証」で説明するように、このヘッダーの存在によって検証の最適化が可能になっています。
-.LP
-.RE
-\f3署名ブロック (.DSA) ファイル\fP
-.LP
-.RS 3
-
-.LP
-.LP
-.SF ファイルには署名が付けられ、署名は .DSA ファイルに置かれます。.DSA ファイルには、キーストアからの証明書または証明書チェーンも符号化された形で含まれています。 証明書または証明書チェーンは、署名に使われた非公開鍵に対応する公開鍵を認証します。
-.LP
-.RE
-.RE
-.SS 
-署名タイムスタンプ
-.LP
-.RS 3
-
-.LP
-.LP
-J2SE 5.0 リリースの \f2jarsigner\fP ツールは、JAR ファイルの署名時に署名タイムスタンプを生成および格納できるようになりました。さらに、\f2jarsigner\fP は代替署名機構をサポートします。この動作は省略可能で、署名時に次の各オプションによって制御されます。
-.LP
-.RS 3
-.TP 2
-o
-\f2\-tsa url\fP 
-.TP 2
-o
-\f2\-tsacert alias\fP 
-.TP 2
-o
-\f2\-altsigner class\fP 
-.TP 2
-o
-\f2\-altsignerpath classpathlist\fP 
-.RE
-
-.LP
-.LP
-これらの各オプションの詳細については、後述の「オプション」節を参照してください。
-.LP
-.RE
-.SS 
-JAR ファイルの検証
-.LP
-.RS 3
-
-.LP
-.LP
-JAR ファイルの検証が成功するのは、署名が有効であり、かつ署名の生成以後に JAR ファイル内のどのファイルも変更されていない場合です。JAR ファイルの検証は、次の手順で行われます。
-.LP
-.RS 3
-.TP 3
-1.
-.SF ファイルそれ自体の署名を検証します。 
-.LP
-この手順では、各署名ブロック (.DSA) ファイルに格納されている署名が、実際に、公開鍵に対応する非公開鍵を使って生成されたものであることを確認します。 .DSA ファイルには、公開鍵の証明書 (または証明書チェーン) も含まれています。また、この手順では、目的の署名が、対応する署名 (.SF) ファイル内の有効な署名であるかどうかを調べ、.SF ファイルが改変されていないことも確認します。  
-.TP 3
-2.
-.SF ファイル内の各エントリのダイジェストをマニフェスト内の対応する各セクションと突き合わせて検証します。 
-.LP
-.SF ファイルには、マニフェストファイル全体のハッシュが格納されたヘッダーがデフォルトで含まれています。このヘッダーが存在する場合は、ヘッダー内のハッシュが実際にマニフェストファイルのハッシュと一致するかどうかを検証することができます。ハッシュが一致する場合は、次の手順に進みます。 
-.LP
-ハッシュが一致しない場合は、効率的には劣る方法を使って検証を行います。 具体的には、.SF ファイル内の各ソースファイル情報セクションのハッシュが、マニフェストファイル内の対応するセクションのハッシュと一致するかどうかを確認します (「署名 (.SF) ファイル」を参照)。 
-.LP
-.SF ファイルのヘッダーに格納されたマニフェストファイルのハッシュと、実際のマニフェストファイルのハッシュとが一致しない場合は、署名 (および .SF ファイル) の生成後に、JAR ファイルに 1 つ以上のファイルが追加 (\f2jar\fP ツールを使用) された可能性があります。\f2jar\fP ツールを使ってファイルを追加した場合、マニフェストファイルは変更されますが (新しいファイル用のセクションが追加される)、.SF ファイルは変更されません。この場合、.SF ファイルのヘッダー以外のセクションに格納されたハッシュが、マニフェストファイル内の対応するセクションのハッシュと一致するときは、署名の生成時に JAR ファイル内に存在していたファイルのうち、どのファイルも変更されていないことになり、検証は成功したものとして扱われます。  
-.TP 3
-3.
-JAR ファイル内のファイルのうち、.SF ファイル内にエントリを持つ各ファイルを読み込みます。読み込み中にファイルのダイジェストを計算し、結果をマニフェストセクション内の該当するファイルのダイジェストと比較します。2 つのダイジェストは同じでなければならず、そうでない場合は検証が失敗します。 
-.RE
-
-.LP
-.LP
-検証プロセスの途中でなんらかの重大な検証エラーが発生した場合、検証プロセスは中止され、セキュリティー例外がスローされます。スローされたセキュリティー例外は、\f3jarsigner\fP がキャッチして表示します。
-.LP
-.RE
-.SS 
-1 つの JAR ファイルを対象とする複数の署名
-.LP
-.RS 3
-
-.LP
-.LP
-1 つの JAR ファイルに対して \f3jarsigner\fP ツールを複数回実行し、実行のたびに、異なるユーザーの別名を指定すれば、JAR ファイルに複数のユーザーの署名を付けることができます。
-.LP
-.nf
-\f3
-.fl
-  jarsigner myBundle.jar susan
-.fl
-  jarsigner myBundle.jar kevin
-.fl
-\fP
+http://download.oracle.com/javase/tutorial/index.html
+.na
+\f2Java 塼ȥꥢ\fP\f4\fP @
 .fi
-
-.LP
-.LP
-JAR ファイルが複数回署名されている場合、その JAR ファイルには .SF ファイルと .DSA ファイルの対が複数含まれることになります。 .SF ファイルと .DSA ファイルの対は、1 回の署名に対して 1 つ作成されます。したがって、上の例で出力される JAR ファイルには、次の名前を持つファイルが含まれます。
-.LP
-.nf
-\f3
-.fl
-  SUSAN.SF
-.fl
-  SUSAN.DSA
-.fl
-  KEVIN.SF
-.fl
-  KEVIN.DSA
-.fl
-\fP
-.fi
-
-.LP
-.LP
-注:JAR ファイルでは、JDK 1.1 の \f3javakey\fP ツールで生成された署名と \f3jarsigner\fP で生成された署名が混在できます。つまり、すでに \f3javakey\fP を使って署名が付けられている JAR ファイルに、\f3jarsigner\fP を使って署名を付けることができます。
-.LP
-.RE
-.SH "オプション"
-.LP
-
-.LP
-.LP
-以下では、\f3jarsigner\fP のオプションについて説明します。注:
-.LP
-.RS 3
-.TP 2
-o
-どのオプション名にも先頭にマイナス記号 (\-) が付く 
-.TP 2
-o
-オプションは任意の順序で指定できる 
-.TP 2
-o
-イタリック体の項目の実際の値 (オプションの値) は、ユーザーが指定する必要がある 
-.TP 2
-o
-\f2\-keystore\fP、\f2\-storepass\fP、\f2\-keypass\fP、\f2\-sigfile\fP、\f2\-sigalg\fP、\f2\-digestalg\fP および \f2\-signedjar\fP の各オプションを使用できるのは、JAR ファイルに署名を付ける場合だけである。 これらのオプションは、JAR ファイルを検証する場合には使用できない。同様に、別名をコマンド行で指定するのは、JAR ファイルに署名を付ける場合だけである 
-.RE
-
-.LP
-.RS 3
-.TP 3
-\-keystore url 
-キーストアの場所を示す URL を指定します。デフォルトは、ユーザーのホームディレクトリ内のファイル \f2.keystore\fP です。 ユーザーのホームディレクトリは、user.home システムプロパティーによって決まります。 
-.LP
-署名するときはキーストアが必要です。 このため、デフォルトのキーストアが存在しない場合、あるいはデフォルト以外のほかのキーストアを使用する場合は、キーストアを明示的に指定する必要があります。 
-.LP
-検証するときはキーストアは必要ありません。 ただし、キーストアが指定されているか、あるいはデフォルトのキーストアが存在していて、さらに \f2\-verbose\fP オプションも指定されている場合は、JAR ファイルの検証に使われる証明書がキーストアに存在するかどうかについての追加情報が出力されます。 
-.LP
-注:\f2\-keystore\fP の引数には、URL の代わりにファイル名 (とパス) を指定できます。 ファイル名 (とパス) を指定した場合は、「file:」URL として扱われます。たとえば、次のように指定できます。 
-.nf
-\f3
-.fl
-  \-keystore \fP\f4filePathAndName\fP\f3
-.fl
-\fP
-.fi
-これは、次の指定と同じものとして扱われます。 
-.nf
-\f3
-.fl
-  \-keystore file:\fP\f4filePathAndName\fP\f3
-.fl
-\fP
-.fi
-JRE の \f2$JAVA_HOME/lib/security\fP ディレクトリに格納された \f2java.security\fP セキュリティープロパティーファイル内で Sun PKCS#11 プロバイダが設定されている場合、keytool と jarsigner は PKCS#11 トークンに基づいて動作できます。 次のオプションを指定します。 
-.RS 3
-.TP 2
-o
-\f2\-keystore NONE\fP 
-.TP 2
-o
-\f2\-storetype PKCS11\fP 
-.RE
-たとえば、次のコマンドは、設定された PKCS#11 トークンの内容を一覧表示します。 
-.RS 3
-
-.LP
-.nf
-\f3
-.fl
-   jarsigner \-keystore NONE \-storetype PKCS11 \-list
-.fl
-  
-.fl
-\fP
-.fi
-.RE
-.TP 3
-\-storetype storetype 
-インスタンスを生成するキーストアのタイプを指定します。デフォルトのキーストアタイプは、セキュリティープロパティーファイル内の keystore.type プロパティーの値で指定されたタイプです。 この値は、\f2java.security.KeyStore\fP の static \f2getDefaultType\fP メソッドで取得できます。 
-.LP
-\f2\-storepass\fP オプションを使って PCKS#11 トークンの PIN を指定することもできます。何も指定しなかった場合、keytool と jarsigner はユーザーにトークン PIN の 入力を求めます。トークンに保護された認証パス (専用の PIN パッドや生体読み取り機など) がある場合、\f2\-protected\fP オプションを指定する必要がありますが、パスワードオプションを指定する必要はありません。  
-.TP 3
-\-storepass password 
-キーストアにアクセスするのに必要なパスワードを指定します。このオプションが必要なのは、JAR ファイルに署名を付けるときだけです (JAR ファイルを検証するときは不要)。署名を付けるときに、コマンド行で \f2\-storepass\fP オプションを指定しなかった場合は、パスワードの入力を求められます。 
-.LP
-注:テストを目的とする場合、またはセキュリティー保護されたシステムを使用している場合以外は、コマンド行やスクリプトでパスワードを指定しないでください。また、password プロンプトでパスワードを入力すると、入力したパスワードがエコーされ、そのまま画面に表示されます。 このため、周囲にほかのユーザーがいる場合は、パスワードを見られないように注意してください。  
-.TP 3
-\-keypass password 
-コマンド行で指定された別名に対応するキーストアエントリの非公開鍵を保護するのに使うパスワードを指定します。\f3jarsigner\fP を使って JAR ファイルに署名を付けるときは、パスワードが必要です。コマンド行でパスワードが指定されておらず、必要なパスワードがストアのパスワードと異なる場合は、パスワードの入力を求められます。 
-.LP
-注:テストを目的とする場合、またはセキュリティー保護されたシステムを使用している場合以外は、コマンド行やスクリプトでパスワードを指定しないでください。また、password プロンプトでパスワードを入力すると、入力したパスワードがエコーされ、そのまま画面に表示されます。 このため、周囲にほかのユーザーがいる場合は、パスワードを見られないように注意してください。  
-.TP 3
-\-sigfile file 
-.SF ファイルと .DSA ファイルの生成に使うベースファイル名を指定します。たとえば、\f2file\fP に DUKESIGN を指定すると、生成される .SF ファイルと .DSA ファイルの名前は、それぞれ DUKESIGN.SF と DUKESIGN.DSA になります。 これらのファイルは、署名付き JAR ファイルの META\-INF ディレクトリに置かれます。 
-.LP
-\f2file\fP に使用できる文字は「a\-zA\-Z0\-9_\-」です。つまり、文字、数字、下線、およびハイフンだけを使用できます。注:.SF および .DSA のファイル名では、小文字はすべて大文字に変換されます。 
-.LP
-コマンド行で \f2\-sigfile\fP オプションを指定しなかった場合、.SF ファイルと .DSA ファイルのベースファイル名は、コマンド行で指定された別名の先頭の 8 文字をすべて大文字に変換したものになります。別名が 8 文字未満の場合は、別名がそのまま使われます。別名の中に、署名ファイル名に使用できない文字が含まれている場合は、該当する文字を下線 (_) に置き換えてファイル名が作成されます。  
-.TP 3
-\-sigalg algorithm 
-.RS 3
-
-.LP
-JAR ファイルの署名に使用する署名アルゴリズムの名前を指定します。 
-.LP
-標準署名アルゴリズム名の一覧については、「Java Cryptography Architecture」にある 
-.na
-\f2「Appendix A 」\fP @
-.fi
-http://java.sun.com/javase/6/docs/technotes/guides/security/crypto/CryptoSpec.html#AppAを参照してください。このアルゴリズムは、JAR ファイルの署名に使用する秘密鍵と互換性のあるものでなければなりません。このオプションを指定しなかった場合、秘密鍵のタイプに応じて SHA1withDSA、MD5withRSA のいずれかが使用されます。指定されたアルゴリズムの実装を提供するプロバイダが静的にインストールされているか、あるいはユーザーがそのようなプロバイダを \f2\-providerClass\fP オプションを使って指定する必要があります。 そうでない場合、コマンドの実行が失敗します。
-.LP
-.RE
-.TP 3
-\-digestalg algorithm 
-.RS 3
-JAR ファイルのエントリをダイジェストする際に使用するメッセージダイジェストアルゴリズムの名前を指定します。 
-.LP
-標準メッセージダイジェストアルゴリズム名の一覧については、「Java Cryptography Architecture」にある 
-.na
-\f2「Appendix A 」\fP @
-.fi
-http://java.sun.com/javase/6/docs/technotes/guides/security/crypto/CryptoSpec.html#AppAを参照してください。このオプションを指定しなかった場合、SHA\-1 が使用されます。指定されたアルゴリズムの実装を提供するプロバイダが静的にインストールされているか、あるいはユーザーがそのようなプロバイダを \f2\-providerClass\fP オプションを使って指定する必要があります。 そうでない場合、コマンドの実行が失敗します。
-.LP
-.RE
-.TP 3
-\-signedjar file 
-署名付き JAR ファイルの名前を指定します。 
-.LP
-コマンド行で名前を指定しなかった場合は、入力 JAR ファイル (署名の対象となる JAR ファイル) の名前と同じ名前が使われます。 この場合、入力 JAR ファイルは署名付き JAR ファイルによって上書きされます。  
-.TP 3
-\-verify 
-コマンド行でこのオプションが指定されている場合は、指定された JAR ファイルが検証されます。JAR ファイルへの署名は行われません。 検証が成功すると、「jar が検証されました。」 というメッセージが表示されます。署名されていない JAR ファイル、またはサポートされていないアルゴリズム (RSA プロバイダのインストールを終了していない場合の RSA など) を使って署名された JAR ファイルを検証しようとすると、「jar は署名されていません。(署名が見つからないか、構文解析できません)」というメッセージが表示されます。 
-.LP
-署名付き JAR ファイルは、\f3jarsigner\fP または JDK 1.1 の \f3javakey\fP ツール、あるいはその両方を使って検証できます。 
-.LP
-検証についての詳細は、「JAR ファイルの検証」を参照してください。  
-.TP 3
-\-certs 
-コマンド行で、\f2\-verify\fP および \f2\-verbose\fP オプションとともにこのオプションが指定されている場合は、JAR ファイルの各署名者の証明書情報も出力されます。証明書情報には次のものが含まれます。 
-.RS 3
-.TP 2
-o
-署名者の公開鍵を証明する (.DSA ファイルに格納された) 証明書の種類の名前 
-.TP 2
-o
-証明書が X.509 証明書 (つまり、\f2java.security.cert.X509Certificate\fP のインスタンス) である場合は、署名者の識別名 
-.RE
-.LP
-キーストアの確認も行われます。コマンド行でキーストアの値が指定されていない場合、デフォルトのキーストアファイルがあれば、検査されます。署名者の公開鍵の証明書がキーストア内のエントリと一致した場合は、次の情報も表示されます。 
-.RS 3
-.TP 2
-o
-署名者に該当するキーストアエントリの別名。 この別名は括弧で囲まれます。ただし、キーストアではなく JDK 1.1 のアイデンティティーデータベースに由来する署名者の場合は、括弧ではなく大括弧で囲まれます。 
-.RE
-.TP 3
-\-verbose 
-コマンド行でこのオプションが指定されている場合、\f3jarsigner\fP は「冗長」モードで動作し、JAR の署名または検証の進行状況に関する追加情報を出力します。 
-.TP 3
-\-internalsf 
-以前は、JAR ファイルの署名時に生成された .DSA (署名ブロック) ファイルの中に、生成された .SF ファイル (署名ファイル) の完全なコピーが符号化された形で含まれていました。この動作は変更されました。この動作は変更になり、現在では、出力 JAR ファイル全体のサイズを小さくするために、デフォルトでは .SF ファイルが .DSA ファイルに含まれないようになっています。ただし、コマンド行で \f2\-internalsf\fP オプションを指定すると、以前と同じように動作します。\f3このオプションは、テストを行う場合には便利ですが、それ以外には使用しないでください。 このオプションを使用すると、有益な最適化が行われなくなります。\fP 
-.TP 3
-\-sectionsonly 
-コマンド行でこのオプションが指定されている場合、JAR ファイルの署名時に生成される .SF ファイル (署名ファイル) には、マニフェストファイル全体のハッシュを含むヘッダーは追加されません。この場合、.SF ファイルに含まれるのは、JAR ファイル内の各ソースファイルに関する情報およびハッシュだけです。 詳細は、「署名 (.SF) ファイル」を参照してください。 
-.LP
-デフォルトでは、最適化を行うために、マニフェストファイル全体のハッシュを含むヘッダーが追加されます。ヘッダーが存在する場合は、JAR ファイルの検証時に、まずヘッダー内のハッシュが、マニフェストファイル全体のハッシュと実際に一致するかどうかが確認されます。ハッシュが一致する場合、検証は次の手順に進みます。ハッシュが一致しない場合は、効率的には劣る方法を使って検証を行います。 具体的には、.SF ファイル内の各ソースファイル情報セクションのハッシュが、マニフェストファイル内の対応するセクションのハッシュと一致するかどうかを確認します。 
-.LP
-詳細は、「JAR ファイルの検証」を参照してください。 
-.LP
-\f3このオプションは、テストを行う場合には便利ですが、それ以外には使用しないでください。 このオプションを使用すると、有益な最適化が行われなくなります。\fP   
-.TP 3
-\-protected 
-\f2true\fP または \f2false\fP のいずれか。専用 PIN リーダーなどの保護された認証パスを介してパスワードを指定する必要がある場合には、この値に \f2true\fP を指定してください。 
-.RE
-.RS 3
-.TP 3
-\-provider provider\-class\-name 
-サービスプロバイダがセキュリティープロパティーファイル (\f2java.security\fP) のリストに入っていないときに、暗号化サービスプロバイダのマスタークラスファイルの名前を指定します。 
-.LP
-\f2\-providerArg\fP \f2ConfigFilePath\fP オプションと組み合わせて使用します。 keytool と jarsigner はプロバイダを動的にインストールします (ここで、\f2ConfigFilePath\fP はトークン設定ファイルへのパスです)。セキュリティープロパティーファイル内で Sun PKCS#11 プロバイダが設定されていない場合に PKCS#11 キーストアを一覧表示するコマンドの例を次に示します。 
-.RS 3
-
-.LP
-.nf
-\f3
-.fl
-jarsigner \-keystore NONE \-storetype PKCS11 \\ 
-.fl
-          \-providerClass sun.security.pkcs11.SunPKCS11 \\ 
-.fl
-          \-providerArg /foo/bar/token.config \\ 
-.fl
-          \-list
-.fl
-\fP
-.fi
-.RE
-.TP 3
-\-providerName providerName 
-\f2java.security\fP セキュリティープロパティーファイル内で 2 つ以上のプロバイダが設定されている場合、\f2\-providerName\fP オプションを使って特定のプロバイダインスタンスを選択できます。このオプションの引数は、プロバイダの名前です。 
-.LP
-Sun PKCS#11 プロバイダの場合、\f2providerName\fP は \f2SunPKCS11\-\fP\f2TokenName\fP という形式になります。 ここで「\f2TokenName\fP」は、プロバイダインスタンスが構成された名前の接尾辞です。 詳細は
-.na
-\f2構成属性の表\fP @
-.fi
-http://java.sun.com/javase/6/docs/technotes/guides/security/p11guide.html#ATTRSを参照してください。たとえば、以下のコマンドでは、名前接尾辞 \f2SmartCard\fP の PKCS#11 キーストアプロバイダインスタンスの内容をリストします。 
-.RS 3
-
-.LP
-.nf
-\f3
-.fl
-jarsigner \-keystore NONE \-storetype PKCS11 \\ 
-.fl
-        \-providerName SunPKCS11\-SmartCard \\ 
-.fl
-        \-list
-.fl
-\fP
-.fi
-.RE
-.TP 3
-\-Jjavaoption 
-指定された \f2javaoption\fP 文字列を Java インタプリタに直接渡します。(\f3jarsigner\fP は、実際には Java インタプリタに対する「ラッパー」です。このオプションには、空白を含めることはできません。このオプションは、実行環境またはメモリー使用を調整する場合に便利です。指定できるインタプリタオプションを一覧表示するには、コマンド行で \f2java \-h\fP または \f2java \-X\fP と入力してください。 
-.LP
-.TP 3
-\-tsa url 
-JAR ファイルの署名時にコマンド行に「\f2\-tsa http://example.tsa.url\fP」が表示される場合、署名のタイムスタンプが生成されます。URL \f2http://example.tsa.url\fP は、TSA (Time Stamping Authority) の場所を特定します。これは、\f2\-tsacert\fP オプションで検出された URL をオーバーライドします。\f2\-tsa\fP オプションでは、TSA の公開鍵証明書をキーストアに配置する必要はありません。 
-.LP
-タイムスタンプを生成するため、\f2jarsigner\fP は 
-.na
-\f2RFC 3161\fP @
-.fi
-http://www.ietf.org/rfc/rfc3161.txt で定義されている TSP (Time\-Stamp Protocol) を使用して TSA と通信します。成功すると、TSA から返されたタイムスタンプトークンは署名ブロックファイルの署名とともに保存されます。 
-.LP
-.TP 3
-\-tsacert alias 
-JAR ファイルの署名時にコマンド行に「\f2\-tsacert alias\fP」が表示される場合、署名のタイムスタンプが生成されます。\f2alias\fP は、キーストア内の現在有効な TSA の公開鍵証明書を特定します。エントリの証明書で、TSA の場所を特定する URL を含む Subject Information Access 拡張機能が確認されます。 
-.LP
-TSA の公開鍵証明書は、\f2\-tsacert\fP を使った場合、キーストアに配置されている必要があります。 
-.LP
-.TP 3
-\-altsigner class 
-代替署名機構を使用することを指定します。完全修飾クラス名は、\f2com.sun.jarsigner.ContentSigner\fP の abstract クラスを拡張するクラスファイルを特定します。このクラスファイルへのパスは、\f2\-altsignerpath\fP オプションによって定義されます。\f2\-altsigner\fP オプションを使用した場合、\f2jarsigner\fP は指定されたクラスが提供する署名機構を使用します。または、\f2jarsigner\fP はデフォルトの署名機構を使用します。 
-.LP
-たとえば、\f2com.sun.sun.jarsigner.AuthSigner\fP というクラスが提供する署名機構を使用するには、\f2jarsigner\fP オプション「\f2\-altsigner com.sun.jarsigner.AuthSigner\fP」を使用します。 
-.LP
-.TP 3
-\-altsignerpath classpathlist 
-クラスファイル (クラスファイル名は上記のように \f2\-altsigner\fP オプションで指定される) およびそれが依存する JAR ファイルへのパスを指定します。クラスファイルが JAR ファイル内にある場合、以下の例のように JAR ファイルへのパスが指定されます。 
-.LP
-絶対パスまたは現在のディレクトリからの相対パスを指定できます。\f2classpathlist\fP には、複数のパスまたは JAR ファイルを含めることができます。 その場合、各パスまたは JAR ファイルを、Solaris の場合にはコロン (\f2:\fP)、Windows の場合にはセミコロン (\f2;\fP) で区切ります。目的のクラスがすでに検索パス内にある場合は、このオプションは不要です。 
-.LP
-クラスファイルを含む、JAR ファイルへのパスを指定する例を示します。 
-.RS 3
-
-.LP
-.LP
-\f2\-altsignerpath /home/user/lib/authsigner.jar\fP
-.LP
-.RE
-.LP
-JAR ファイル名が含まれていることに注意してください。 
-.LP
-クラスファイルを含む JAR ファイルへのパスを指定する例を示します。 
-.RS 3
-.LP
-\f2\-altsignerpath /home/user/classes/com/sun/tools/jarsigner/\fP
-.LP
-.RE
-.LP
-JAR ファイル名は含まれていないことに留意してください。  
-.RE
-.SH "例"
-.LP
-
-.LP
-.SS 
-JAR ファイルの署名
-.LP
-.RS 3
-
-.LP
-.LP
-bundle.jar という名前の JAR ファイルがあるとします。 このファイルに、キーストアの別名が jane であるユーザーの非公開鍵を使って、署名を付けるとします。キーストアは、mystore という名前で、C ドライブの working ディレクトリにあり、キーストアのパスワードは mypass、\f2jane\fP の非公開鍵のパスワードは j638klm とします。この場合、次のコマンドを実行すると、JAR ファイルに署名を付けて sbundle.jar という署名付き JAR ファイルを作成できます。
-.LP
-.nf
-\f3
-.fl
-    jarsigner \-keystore /working/mystore \-storepass myspass
-.fl
-      \-keypass j638klm \-signedjar sbundle.jar bundle.jar jane 
-.fl
-\fP
-.fi
-
-.LP
-.LP
-上のコマンドでは \f2\-sigfile\fP オプションが指定されていないため、署名付き JAR ファイルに格納される .SF ファイルと .DSA ファイルの名前は、別名からデフォルト名がつけられます。つまり、\f2JANE.SF\fP と \f2JANE.DSA\fP になります。
-.LP
-.LP
-ストアのパスワードと非公開鍵のパスワードをあとで入力する場合は、上のコマンドを短縮して次のように入力できます。
-.LP
-.nf
-\f3
-.fl
-    jarsigner \-keystore /working/mystore
-.fl
-      \-signedjar sbundle.jar bundle.jar jane 
-.fl
-\fP
-.fi
-
-.LP
-.LP
-デフォルトのキーストア (ホームディレクトリ内の .keystore という名前のキーストア) を使用する場合は、次に示すように、キーストアの指定を省略できます。
-.LP
-.nf
-\f3
-.fl
-    jarsigner \-signedjar sbundle.jar bundle.jar jane 
-.fl
-\fP
-.fi
-
-.LP
-.LP
-また、署名付き JAR ファイルで入力 JAR ファイル (\f2bundle.jar\fP) を上書きする場合は、\f2\-signedjar\fP オプションの指定も省略できます。
-.LP
-.nf
-\f3
-.fl
-    jarsigner bundle.jar jane 
-.fl
-\fP
-.fi
-.RE
-
-.LP
-.SS 
-署名付き JAR ファイルの検証
-.LP
-.RS 3
-
-.LP
-.LP
-次に示すのは、署名付き JAR ファイルを検証し、署名が有効で JAR ファイルが改変されていないことを確認するためのコマンド例です。
-.LP
-.nf
-\f3
-.fl
-    jarsigner \-verify sbundle.jar 
-.fl
-\fP
-.fi
-
-.LP
-.LP
-検証が成功すると、次のようなメッセージが表示されます。
-.LP
-.nf
-\f3
-.fl
-    jar が検証されました。
-.fl
-\fP
-.fi
-
-.LP
-.LP
-というメッセージが表示されます。検証が成功しなかった場合は、エラーメッセージが表示されます。
-.LP
-.LP
-\f2\-verbose\fP オプションを使うと、より多くの情報が表示されます。次に示すのは、\f2\-verbose\fP オプションを指定した \f3jarsigner\fP の実行例とその出力結果です。
-.LP
-.nf
-\f3
-.fl
-    jarsigner \-verify \-verbose sbundle.jar
-.fl
-
-.fl
-           198 Fri Sep 26 16:14:06 PDT 1997 META\-INF/MANIFEST.MF
-.fl
-           199 Fri Sep 26 16:22:10 PDT 1997 META\-INF/JANE.SF
-.fl
-          1013 Fri Sep 26 16:22:10 PDT 1997 META\-INF/JANE.DSA
-.fl
-    smk   2752 Fri Sep 26 16:12:30 PDT 1997 AclEx.class
-.fl
-    smk    849 Fri Sep 26 16:12:46 PDT 1997 test.class
-.fl
-
-.fl
-      s = 署名が検証されました。
-.fl
-      m = エントリがマニフェスト内にリストされます。
-.fl
-      k = 1 つ以上の証明書がキーストアで検出されました。
-.fl
-
-.fl
-    jar が検証されました。
-.fl
-\fP
-.fi
-
-.LP
-.SS 
-証明書情報を使った検証
-.LP
-.LP
-検証時に、\f2\-verify\fP と \f2\-verbose\fP オプションに加えて \f2\-certs\fP オプションを指定した場合は、JAR ファイル内の各署名者の証明書情報も出力されます。 これには、証明書のタイプ、署名者の識別名情報 (X.509 証明書の場合)、および JAR ファイルの公開鍵の証明書がキーストアエントリの公開鍵の証明書と一致する場合には、括弧で囲まれた署名者のキーストア別名が含まれます。次に例を示します。
-.LP
-.nf
-\f3
-.fl
-    jarsigner \-keystore /working/mystore \-verify \-verbose \-certs myTest.jar
-.fl
-
-.fl
-           198 Fri Sep 26 16:14:06 PDT 1997 META\-INF/MANIFEST.MF
-.fl
-           199 Fri Sep 26 16:22:10 PDT 1997 META\-INF/JANE.SF
-.fl
-          1013 Fri Sep 26 16:22:10 PDT 1997 META\-INF/JANE.DSA
-.fl
-           208 Fri Sep 26 16:23:30 PDT 1997 META\-INF/JAVATEST.SF
-.fl
-          1087 Fri Sep 26 16:23:30 PDT 1997 META\-INF/JAVATEST.DSA
-.fl
-    smk   2752 Fri Sep 26 16:12:30 PDT 1997 Tst.class
-.fl
-
-.fl
-      X.509, CN=Test Group, OU=Java Software, O=Sun Microsystems, L=CUP, S=CA, C=US (javatest)
-.fl
-      X.509, CN=Jane Smith, OU=Java Software, O=Sun, L=cup, S=ca, C=us (jane)
-.fl
-
-.fl
-      s = 署名が検証されました。
-.fl
-      m = エントリがマニフェスト内にリストされます。
-.fl
-      k = 1 つ以上の証明書がキーストアで検出されました。
-.fl
-
-.fl
-    jar が検証されました。 
-.fl
-\fP
-.fi
-
-.LP
-.LP
-署名者の証明書が X.509 証明書でない場合は、識別名情報は表示されません。その場合には、証明書のタイプと別名だけが表示されます。たとえば、証明書が PGP 証明書で、別名が bob の場合は、次のように表示されます。
-.LP
-.nf
-\f3
-.fl
-      PGP, (bob)
-.fl
-\fP
-.fi
-
-.LP
-.SS 
-アイデンティティーデータベースの署名者を含む JAR ファイルの検証
-.LP
-.LP
-JAR ファイルが、JDK 1.1 の \f3javakey\fP ツールを使って署名されている場合、署名者はアイデンティティーデータベース内の別名です。 この場合、検証の出力には i という記号が含まれます。JAR ファイルが、アイデンティティーデータベース内の別名とキーストア内の別名の両方によって署名されている場合は、k と i の両方が表示されます。
-.LP
-.LP
-\f2\-certs\fP オプションを指定した場合、キーストアの別名は括弧で囲まれるのに対し、アイデンティティーデータベース内の別名は角括弧で囲まれて表示されます。例を示します。
-.LP
-.nf
-\f3
-.fl
-    jarsigner \-keystore /working/mystore \-verify \-verbose \-certs writeFile.jar
-.fl
-
-.fl
-           198 Fri Sep 26 16:14:06 PDT 1997 META\-INF/MANIFEST.MF
-.fl
-           199 Fri Sep 26 16:22:10 PDT 1997 META\-INF/JANE.SF
-.fl
-          1013 Fri Sep 26 16:22:10 PDT 1997 META\-INF/JANE.DSA
-.fl
-           199 Fri Sep 27 12:22:30 PDT 1997 META\-INF/DUKE.SF
-.fl
-          1013 Fri Sep 27 12:22:30 PDT 1997 META\-INF/DUKE.DSA
-.fl
-   smki   2752 Fri Sep 26 16:12:30 PDT 1997 writeFile.html
-.fl
-
-.fl
-      X.509, CN=Jane Smith, OU=Java Software, O=Sun, L=cup, S=ca, C=us (jane)
-.fl
-      X.509, CN=Duke, OU=Java Software, O=Sun, L=cup, S=ca, C=us [duke]
-.fl
-
-.fl
-      s = 署名が検証されました。
-.fl
-      m = エントリがマニフェスト内にリストされます。
-.fl
-      k = 1 つ以上の証明書がキーストアで検出されました。
-.fl
-      i = 1 つ以上の証明書がアイデンティティースコープで検出されました。
-.fl
-
-.fl
-    jar が検証されました。
-.fl
-\fP
-.fi
-
-.LP
-.LP
-別名 duke は角括弧で囲まれているので、この別名はキーストアの別名ではなく、アイデンティティーデータベースの別名です。
-.LP
-.RE
-.SH "関連項目"
-.LP
-
-.LP
-.RS 3
-.TP 2
-o
-jar(1) ツールのドキュメント 
-.TP 2
-o
-keytool(1) ツールのドキュメント 
-.TP 2
-o
-\f3jarsigner\fP ツールの使用例については、
-.na
-\f4「Java Tutorial」\fP @
-.fi
-http://java.sun.com/docs/books/tutorial/index.htmlの
-.na
-\f4「Security」\fP @
-.fi
-http://java.sun.com/docs/books/tutorial/security/index.htmlを参照 
+http://download.oracle.com/javase/tutorial/index.htmlSecurity\f3򻲾\fP 
 .RE
 
 .LP
--- a/jdk/src/linux/doc/man/ja/java.1	Mon May 02 09:38:22 2011 -0700
+++ b/jdk/src/linux/doc/man/ja/java.1	Wed Jul 05 17:43:05 2017 +0200
@@ -1,4 +1,4 @@
-." Copyright (c) 1994, 2010, Oracle and/or its affiliates. All rights reserved.
+." Copyright (c) 1994, 2011, Oracle and/or its affiliates. All rights reserved.
 ." DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 ."
 ." This code is free software; you can redistribute it and/or modify it
@@ -19,29 +19,29 @@
 ." or visit www.oracle.com if you need additional information or have any
 ." questions.
 ."
-.TH java 1 "02 Jun 2010"
+.TH java 1 "14 Apr 2011"
 
 .LP
-.SH "名前"
-java \- Java アプリケーション起動ツール
+.SH "̾"
+java \- Java ץꥱưġ
 .LP
 .RS 3
 .TP 2
 o
-形式 
+ 
 .TP 2
 o
-説明 
+ 
 .TP 2
 o
-オプション 

 .TP 2
 o
-関連項目 

 .RE
 
 .LP
-.SH "形式"
+.SH ""
 .LP
 .nf
 \f3
@@ -54,88 +54,78 @@
 
 .LP
 .RS 3
-
-.LP
-.RS 3
 .TP 3
 options 
-コマンド行オプション。 
+ޥɹԥץ 
 .TP 3
 class 
-呼び出されるクラスの名前 
+ƤӽФ륯饹̾ 
 .TP 3
 file.jar 
-呼び出される JAR ファイルの名前。必ず \f2\-jar\fP とともに使用する 
+ƤӽФ JAR ե̾ɬ \f2\-jar\fP ȤȤ˻Ѥ 
 .TP 3
 argument 
-\f3main\fP 関数に渡される引数 
+\f3main\fP ؿϤ 
 .RE
 
 .LP
-.RE
-.SH " 説明"
+.SH ""
 .LP
-
 .LP
+\f3java\fP ġϡJava ץꥱưޤjava ġϡJava Runtime Environment ưȡꤵ줿饹ɤΥ饹 \f3main\fP ᥽åɤƤӽФȤˤꡢJava ץꥱưޤ
 .LP
-\f3java\fP ツールは、Java アプリケーションを起動します。java ツールは、Java Runtime Environment を起動したあと、指定されたクラスをロードし、そのクラスの \f3main\fP メソッドを呼び出すことにより、Java アプリケーションを起動します。
 .LP
-.LP
-このメソッドは、public および static として宣言する必要があります。 また、値を返してはいけません。 さらに、\f2String\fP 配列をパラメータとして指定できなければなりません。メソッドの宣言は、次のようになっていなければなりません。
+Υ᥽åɤϡpublic  static Ȥɬפޤ ޤ֤ͤƤϤޤ ˡ \f2String\fP ѥ᡼ȤƻǤʤФʤޤ󡣥᥽åɤϡΤ褦ˤʤäƤʤФʤޤ
 .LP
 .nf
 \f3
 .fl
-    public static void main(String args[])
+public static void main(String args[])
 .fl
 \fP
 .fi
 
 .LP
 .LP
-デフォルトでは、コマンド行オプション以外の最初の引数が、呼び出されるクラスの名前になります。この名前には、完全指定のクラス名を使用する必要があります。\f3\-jar\fP オプションを指定した場合、コマンド行オプション以外の最初の引数が、アプリケーションのクラスファイルとリソースファイルを含む \f3JAR\fP アーカイブの名前になります。 この場合、マニフェストの \f3Main\-Class\fP ヘッダーで指定されたクラスが起動クラスになります。
+ǥեȤǤϡޥɹԥץʳκǽΰƤӽФ륯饹̾ˤʤޤ̾ˤϡΥ饹̾Ѥɬפޤ\f3\-jar\fP ץꤷ硢ޥɹԥץʳκǽΰץꥱΥ饹եȥ꥽եޤ \f3JAR\fP ֤̾ˤʤޤξ硢ޥ˥եȤ \f3Main\-Class\fP إåǻꤵ줿饹ư饹ˤʤޤ
 .LP
 .LP
-Java Runtime は、ブートストラップクラスパス、インストール型拡張機能、およびユーザークラスパスの 3 箇所から起動クラスと他の使用されているクラスを検索します。
+Java Runtime ϡ֡ȥȥåץ饹ѥ󥹥ȡ뷿ĥǽӥ桼饹ѥ 3 ս꤫鵯ư饹¾λѤƤ륯饹򸡺ޤ
 .LP
 .LP
-クラス名または JAR ファイル名のあとにある、コマンド行オプション以外の引数は、\f3main\fP 関数に渡されます。
+饹̾ޤ JAR ե̾ΤȤˤ롢ޥɹԥץʳΰϡ\f3main\fP ؿϤޤ
 .LP
-.SH "オプション"
+.SH "ץ"
 .LP
-
 .LP
+ưġˤϡߤμ¹ԴĶӾΥ꡼ǥݡȤɸ४ץ󤬤ޤޤۥޥθߤμǤϡɸ४ץΥåȤ⥵ݡȤޤϡΥ꡼ѹǽޤ
 .LP
-起動ツールには、現在の実行環境および将来のリリースでサポートされる標準オプションがあります。また、仮想マシンの現在の実装では、非標準オプションのセットもサポートされます。 これは、将来のリリースで変更される可能性があります。
-.LP
-.SH "標準オプション"
-.LP
-
+.SH "ɸ४ץ"
 .LP
 .RS 3
 .TP 3
 \-client 
 .LP
-Java HotSpot Client VM を選択します。64 ビット対応 JDK は現時点では、このオプションを無視し、代わりに Java Hotspot Server VM を使用します。 
+Java HotSpot Client VM 򤷤ޤ64 ӥåб JDK ϸǤϡΥץ̵뤷 Java Hotspot Server VM Ѥޤ 
 .LP
-デフォルトの VM の選択については、
+ǥեȤ VM ˤĤƤϡ
 .na
-\f2「サーバー \- クラスマシンの検出」\fP @
+\f2֥С \- 饹ޥθС\fP @
 .fi
-http://java.sun.com/javase/6/docs/technotes/guides/vm/server\-class.htmlを参照してください。  
+http://java.sun.com/javase/6/docs/technotes/guides/vm/server\-class.html򻲾ȤƤ  
 .TP 3
 \-server 
 .LP
-Java HotSpot Server VM を選択します。64 ビット対応 JDK 上では、サポートされるのは Java Hotspot Server VM だけであるため、\-server オプションが暗黙的に選択されます。 
+Java HotSpot Server VM 򤷤ޤ64 ӥåб JDK ǤϡݡȤΤ Java Hotspot Server VM Ǥ뤿ᡢ\-server ץ󤬰Ū򤵤ޤ 
 .LP
-デフォルトの VM の選択については、
+ǥեȤ VM ˤĤƤϡ
 .na
-\f2「サーバー \- クラスマシンの検出」\fP @
+\f2֥С \- 饹ޥθС\fP @
 .fi
-http://java.sun.com/javase/6/docs/technotes/guides/vm/server\-class.htmlを参照してください。  
+http://java.sun.com/javase/6/docs/technotes/guides/vm/server\-class.html򻲾ȤƤ  
 .TP 3
 \-agentlib:libname[=options] 
-ネイティブエージェントライブラリ \f2libname\fP をロードします。 たとえば次のように指定します。 
+ͥƥ֥ȥ饤֥ \f2libname\fP ɤޤȤмΤ褦˻ꤷޤ 
 .LP
 \-agentlib:hprof 
 .LP
@@ -143,57 +133,57 @@
 .LP
 \-agentlib:hprof=help 
 .LP
-詳細については、
+ܺ٤ˤĤƤϡ
 .na
-\f2「JVMTI エージェントのコマンド行オプション」\fP @
+\f2JVMTI ȤΥޥɹԥץ\fP @
 .fi
-http://java.sun.com/javase/6/docs/platform/jvmti/jvmti.html#startingを参照してください。  
+http://java.sun.com/javase/6/docs/platform/jvmti/jvmti.html#starting򻲾ȤƤ  
 .TP 3
 \-agentpath:pathname[=options] 
-フルパス名を使用して、ネーティブエージェントライブラリをロードします。詳細については、
+եѥ̾Ѥơ͡ƥ֥ȥ饤֥ɤޤܺ٤ˤĤƤϡ
 .na
-\f2「JVMTI エージェントのコマンド行オプション」\fP @
+\f2JVMTI ȤΥޥɹԥץ\fP @
 .fi
-http://java.sun.com/javase/6/docs/platform/jvmti/jvmti.html#startingを参照してください。 
+http://java.sun.com/javase/6/docs/platform/jvmti/jvmti.html#starting򻲾ȤƤ 
 .TP 3
 \-classpath classpath 
 .TP 3
 \-cp classpath 
-クラスファイルを検索するディレクトリ、JAR アーカイブ、および ZIP アーカイブのリストを指定します。クラスパスの各エントリはコロン (\f3:\fP) で区切ります。\f3\-classpath\fP または \f3\-cp\fP を指定すると、このオプションの値によって \f3CLASSPATH\fP 環境変数の設定がオーバーライドされます。 
+饹ե򸡺ǥ쥯ȥꡢJAR ֡ ZIP ֤ΥꥹȤꤷޤ饹ѥγƥȥϥ (\f3:\fP) Ƕڤޤ\f3\-classpath\fP ޤ \f3\-cp\fP ꤹȡΥץͤˤä \f3CLASSPATH\fP Ķѿ꤬С饤ɤޤ 
 .LP
-\f3\-classpath\fP も \f3\-cp\fP も使用されず、\f3CLASSPATH\fP も設定されていない場合、ユーザークラスパスは現在のディレクトリ (\f4.\fP) になります。  
+\f3\-classpath\fP  \f3\-cp\fP Ѥ줺\f3CLASSPATH\fP ꤵƤʤ硢桼饹ѥϸߤΥǥ쥯ȥ (\f4.\fP) ˤʤޤ  
 .LP
-便宜上、\f2*\fP のベース名を含むクラスパス要素は、ディレクトリ内の拡張子 \f2.jar\fP または \f2.JAR\fP を持つすべてのファイルのリストを指定するのと同じとみなされます (Java プログラムはこの 2 つの呼び出しを区別できない)。
+ص塢 \f2*\fP Υ١̾ޤ९饹ѥǤϡ \f2.jar\fP ޤ \f2.JAR\fP ĥҤ˻ĥǥ쥯ȥΤ٤ƤΥեΥꥹȤꤹΤƱȤߤʤޤ (java ץϤ 2 ĤθƤӽФ̤Ǥʤ)
 .br
 .br
-たとえば、ディレクトリ \f2foo\fP に \f2a.jar\fP と \f2b.JAR\fP が含まれている場合、クラスパス要素 \f2foo/*\fP は \f2A.jar:b.JAR\fP に展開されます。 ただし、JAR ファイルの順番は指定されません。このリストには、隠しファイルも含め、指定されたディレクトリ内のすべての JAR ファイルが含まれます。\f2*\fP だけから成るクラスパスエントリは、カレントディレクトリ内のすべての JAR ファイルのリストに展開されます。\f2CLASSPATH\fP 環境変数も、定義時には同様に展開されます。クラスパスのワイルドカード展開は必ず、Java 仮想マシンの起動前に実行されます。したがって、\f2System.getenv("CLASSPATH")\fP 呼び出しのように環境に問い合わせを行わない限り、Java プログラムが展開されていないワイルドカードを認識することはありません。  
+ȤСǥ쥯ȥ \f2foo\fP  \f2a.jar\fP  \f2b.JAR\fP ޤޤƤ硢饹ѥ \f2foo/*\fP  \f2A.jar:b.JAR\fP ŸޤJAR եν֤̤ȤʤޤΥꥹȤˤϡեޤᡢꤵ줿ǥ쥯ȥΤ٤Ƥ JAR ե뤬ޤޤޤ*  \f2饹ѥȥϡ\fP ȥǥ쥯ȥΤ٤Ƥ JAR եΥꥹȤŸޤ \f2CLASSPATH\fP Ķѿ⡢ˤƱͤŸޤ饹ѥΥ磻ɥŸɬJava ۥޥεư˼¹Ԥޤäơ\f2System.getenv("CLASSPATH")\fP ƤӽФΤ褦˴Ķ䤤碌Ԥʤ¤ꡢJava ץबŸƤʤ磻ɥɤǧ뤳ȤϤޤ  
 .LP
-クラスパスの詳細