From 7722b3d09721532bc91c94e2cac2d909f93a6336 Mon Sep 17 00:00:00 2001 From: Albert Noll Date: Mon, 3 Mar 2014 08:04:14 +0100 Subject: [PATCH 001/116] 8035946: Use ResourceHashtable for dependency checking Use ResourceHashtable for dependency checking and delete GenericHashtable Reviewed-by: kvn, coleenp --- hotspot/src/share/vm/code/dependencies.cpp | 8 +- hotspot/src/share/vm/code/dependencies.hpp | 7 +- hotspot/src/share/vm/code/nmethod.cpp | 14 ++- hotspot/src/share/vm/utilities/hashtable.cpp | 113 ------------------ hotspot/src/share/vm/utilities/hashtable.hpp | 82 ------------- .../src/share/vm/utilities/resourceHash.hpp | 10 +- 6 files changed, 26 insertions(+), 208 deletions(-) diff --git a/hotspot/src/share/vm/code/dependencies.cpp b/hotspot/src/share/vm/code/dependencies.cpp index d3dcf5da9a6..bee31fcacfc 100644 --- a/hotspot/src/share/vm/code/dependencies.cpp +++ b/hotspot/src/share/vm/code/dependencies.cpp @@ -725,13 +725,13 @@ Klass* Dependencies::DepStream::context_type() { } // ----------------- DependencySignature -------------------------------------- -bool DependencySignature::equals(DependencySignature* sig) const { - if ((type() != sig->type()) || (args_count() != sig->args_count())) { +bool DependencySignature::equals(DependencySignature const& s1, DependencySignature const& s2) { + if ((s1.type() != s2.type()) || (s1.args_count() != s2.args_count())) { return false; } - for (int i = 0; i < sig->args_count(); i++) { - if (arg(i) != sig->arg(i)) { + for (int i = 0; i < s1.args_count(); i++) { + if (s1.arg(i) != s2.arg(i)) { return false; } } diff --git a/hotspot/src/share/vm/code/dependencies.hpp b/hotspot/src/share/vm/code/dependencies.hpp index 050478cbc85..3501b57fd51 100644 --- a/hotspot/src/share/vm/code/dependencies.hpp +++ b/hotspot/src/share/vm/code/dependencies.hpp @@ -527,7 +527,7 @@ class Dependencies: public ResourceObj { }; -class DependencySignature : public GenericHashtableEntry { +class DependencySignature : public ResourceObj { private: int _args_count; uintptr_t _argument_hash[Dependencies::max_arg_count]; @@ -542,12 +542,13 @@ class DependencySignature : public GenericHashtableEntry> 2; } + static bool equals(DependencySignature const& s1, DependencySignature const& s2); + static unsigned hash (DependencySignature const& s1) { return s1.arg(0) >> 2; } int args_count() const { return _args_count; } uintptr_t arg(int idx) const { return _argument_hash[idx]; } Dependencies::DepType type() const { return _type; } + }; diff --git a/hotspot/src/share/vm/code/nmethod.cpp b/hotspot/src/share/vm/code/nmethod.cpp index 020916b8d34..a002ee76ea4 100644 --- a/hotspot/src/share/vm/code/nmethod.cpp +++ b/hotspot/src/share/vm/code/nmethod.cpp @@ -39,6 +39,7 @@ #include "prims/jvmtiImpl.hpp" #include "runtime/sharedRuntime.hpp" #include "runtime/sweeper.hpp" +#include "utilities/resourceHash.hpp" #include "utilities/dtrace.hpp" #include "utilities/events.hpp" #include "utilities/xmlstream.hpp" @@ -2135,7 +2136,11 @@ void nmethod::check_all_dependencies(DepChange& changes) { // Turn off dependency tracing while actually testing dependencies. NOT_PRODUCT( FlagSetting fs(TraceDependencies, false) ); - GenericHashtable* table = new GenericHashtable(11027); + typedef ResourceHashtable DepTable; + + DepTable* table = new DepTable(); + // Iterate over live nmethods and check dependencies of all nmethods that are not // marked for deoptimization. A particular dependency is only checked once. for(nmethod* nm = CodeCache::alive_nmethod(CodeCache::first()); nm != NULL; nm = CodeCache::alive_nmethod(CodeCache::next(nm))) { @@ -2143,9 +2148,10 @@ void nmethod::check_all_dependencies(DepChange& changes) { for (Dependencies::DepStream deps(nm); deps.next(); ) { // Construct abstraction of a dependency. DependencySignature* current_sig = new DependencySignature(deps); - // Determine if 'deps' is already checked. table->add() returns - // 'true' if the dependency was added (i.e., was not in the hashtable). - if (table->add(current_sig)) { + + // Determine if dependency is already checked. table->put(...) returns + // 'true' if the dependency is added (i.e., was not in the hashtable). + if (table->put(*current_sig, 1)) { if (deps.check_dependency() != NULL) { // Dependency checking failed. Print out information about the failed // dependency and finally fail with an assert. We can fail here, since diff --git a/hotspot/src/share/vm/utilities/hashtable.cpp b/hotspot/src/share/vm/utilities/hashtable.cpp index a850ebe87f4..8698cca914a 100644 --- a/hotspot/src/share/vm/utilities/hashtable.cpp +++ b/hotspot/src/share/vm/utilities/hashtable.cpp @@ -25,7 +25,6 @@ #include "precompiled.hpp" #include "classfile/altHashing.hpp" #include "classfile/javaClasses.hpp" -#include "code/dependencies.hpp" #include "memory/allocation.inline.hpp" #include "memory/filemap.hpp" #include "memory/resourceArea.hpp" @@ -353,116 +352,6 @@ template void BasicHashtable::verify_lookup_length(double load) #endif -template GenericHashtable::GenericHashtable(int size, bool C_heap, MEMFLAGS memflag) { - assert(size > 0, " Invalid hashtable size"); - _size = size; - _C_heap = C_heap; - _memflag = memflag; - // Perform subtype-specific resource allocation - _items = (C_heap) ? NEW_C_HEAP_ARRAY(T*, size, memflag) : NEW_RESOURCE_ARRAY(T*, size); - memset(_items, 0, sizeof(T*) * size); - - DEBUG_ONLY(_num_items = 0;) -} - -template GenericHashtable::~GenericHashtable() { - if (on_C_heap()) { - // Check backing array - for (int i = 0; i < size(); i++) { - T* item = head(i); - // Delete all items in linked list - while (item != NULL) { - T* next_item = item->next(); - delete item; - DEBUG_ONLY(_num_items--); - item = next_item; - } - } - FREE_C_HEAP_ARRAY(T*, _items, _memflag); - _items = NULL; - assert (_num_items == 0, "Not all memory released"); - } -} - -/** - * Return a pointer to the item 'I' that is stored in the hashtable for - * which match_item->equals(I) == true. If no such item is found, NULL - * is returned. - */ -template T* GenericHashtable::contains(T* match_item) { - if (match_item != NULL) { - int idx = index(match_item); - return contains_impl(match_item, idx); - } - return NULL; -} - -/** - * Add item to the hashtable. Return 'true' if the item was added - * and false otherwise. - */ -template bool GenericHashtable::add(T* item) { - if (item != NULL) { - int idx = index(item); - T* found_item = contains_impl(item, idx); - if (found_item == NULL) { - T* list_head = head(idx); - item->set_next(list_head); - item->set_prev(NULL); - - if (list_head != NULL) { - list_head->set_prev(item); - } - set_head(item, idx); - DEBUG_ONLY(_num_items++); - return true; - } - } - return false; -} - -/** - * Removes an item 'I' from the hashtable, if present. 'I' is removed, if - * match_item->equals(I) == true. Removing an item from the hashtable does - * not free memory. - */ -template T* GenericHashtable::remove(T* match_item) { - if (match_item != NULL) { - int idx = index(match_item); - T* found_item = contains_impl(match_item, idx); - if (found_item != NULL) { - // Remove item from linked list - T* prev = found_item->prev(); - T* next = found_item->next(); - if (prev != NULL) { - prev->set_next(next); - } else { - set_head(next, idx); - } - if (next != NULL) { - next->set_prev(prev); - } - - DEBUG_ONLY(_num_items--); - return found_item; - } - } - return NULL; -} - - -template T* GenericHashtable::contains_impl(T* item, int idx) { - T* current_item = head(idx); - while (current_item != NULL) { - if (current_item->equals(item)) { - return current_item; - } - current_item = current_item->next(); - } - return NULL; -} - - // Explicitly instantiate these types template class Hashtable; template class Hashtable; @@ -482,5 +371,3 @@ template class BasicHashtable; template class BasicHashtable; template class BasicHashtable; template class BasicHashtable; - -template class GenericHashtable; diff --git a/hotspot/src/share/vm/utilities/hashtable.hpp b/hotspot/src/share/vm/utilities/hashtable.hpp index 8294eaab3d2..fcebf72ea95 100644 --- a/hotspot/src/share/vm/utilities/hashtable.hpp +++ b/hotspot/src/share/vm/utilities/hashtable.hpp @@ -327,86 +327,4 @@ public: } }; - -/* - * Usage of GenericHashtable: - * - * class X : public GenericHashtableEntry { - * - * // Implement virtual functions in class X - * bool equals(X* sig) const; - * uintptr_t hash() const; - * }; - * - * void foo() { - * GenericHashtable* table = new GenericHashtable(11027, false); - * - * X* elem = new X(); - * table->add(elem); - * table->contains(elem); - * } - * - * You can choose other allocation types as well. For example, to store the hashtable to a - * particular region (CHeapObj) simply replace ResourceObj with the desired type: - * - * class X : public GenericHashtableEntry > { ... }; - * - * To make the destructor (and remove) of the hashtable work: - * 1) override the delete operator of X - * 2) provide a destructor of the X - * - * You may also find it convenient to override the new operator. - * - * If you use this templates do not forget to add an explicit initialization - * (at the end of hashtable.cpp). - * - * template class GenericHashtable; - */ -template class GenericHashtableEntry : public M { - private: - T* _next; - T* _prev; - public: - // Must be implemented by subclass. - virtual uintptr_t key() const = 0; - virtual bool equals(T* other) const = 0; - - T* next() const { return _next; } - T* prev() const { return _prev; } - void set_next(T* item) { _next = item; } - void set_prev(T* item) { _prev = item; } - - // Constructor and destructor - GenericHashtableEntry() : _next(NULL), _prev(NULL) { }; - virtual ~GenericHashtableEntry() {}; -}; - -template class GenericHashtable : public M { - private: - T** _items; - int _size; - bool _C_heap; - MEMFLAGS _memflag; - - // Accessor methods - T* head (int idx) const { return _items[idx]; } - void set_head(T* item, int idx) { _items[idx] = item; } - int index (T* item) { assert(item != NULL, "missing null check"); return item->key() % size(); } - - // Helper function - T* contains_impl(T* item, int idx); - - DEBUG_ONLY(int _num_items;) - public: - GenericHashtable(int size, bool C_heap = false, MEMFLAGS memflag = mtNone); - ~GenericHashtable(); - T* contains(T* match_item); - T* remove (T* match_item); - bool add (T* item); - - - bool on_C_heap() const { return _C_heap; } - int size() const { return _size; } -}; - #endif // SHARE_VM_UTILITIES_HASHTABLE_HPP diff --git a/hotspot/src/share/vm/utilities/resourceHash.hpp b/hotspot/src/share/vm/utilities/resourceHash.hpp index 2fe5dec941a..211d6bca117 100644 --- a/hotspot/src/share/vm/utilities/resourceHash.hpp +++ b/hotspot/src/share/vm/utilities/resourceHash.hpp @@ -105,14 +105,20 @@ class ResourceHashtable : public ResourceObj { } } - // Inserts or replaces a value in the table - void put(K const& key, V const& value) { + /** + * Inserts or replaces a value in the table. + * @return: true: if a new item is added + * false: if the item already existed and the value is updated + */ + bool put(K const& key, V const& value) { unsigned hv = HASH(key); Node** ptr = lookup_node(hv, key); if (*ptr != NULL) { (*ptr)->_value = value; + return false; } else { *ptr = new Node(hv, key, value); + return true; } } From 0b6a5f744ab3e4699a626396f1950855154b6921 Mon Sep 17 00:00:00 2001 From: Nils Eliasson Date: Tue, 28 Jan 2014 15:05:46 +0100 Subject: [PATCH 002/116] 8007270: Make IsMethodCompilable test work with tiered Only c2 compiles counts toward cutoff Reviewed-by: kvn, roland --- .../whitebox/CompilerWhiteBoxTest.java | 23 ++++++ .../whitebox/IsMethodCompilableTest.java | 71 +++++++++++-------- .../com/oracle/java/testlibrary/Platform.java | 9 +++ 3 files changed, 73 insertions(+), 30 deletions(-) diff --git a/hotspot/test/compiler/whitebox/CompilerWhiteBoxTest.java b/hotspot/test/compiler/whitebox/CompilerWhiteBoxTest.java index e47231e29f5..97dad5bf704 100644 --- a/hotspot/test/compiler/whitebox/CompilerWhiteBoxTest.java +++ b/hotspot/test/compiler/whitebox/CompilerWhiteBoxTest.java @@ -195,6 +195,29 @@ public abstract class CompilerWhiteBoxTest { printInfo(); } + /** + * Checks, that {@linkplain #method} is not compiled at the given compilation + * level or above. + * + * @param compLevel + * + * @throws RuntimeException if {@linkplain #method} is in compiler queue or + * is compiled, or if {@linkplain #method} has zero + * compilation level. + */ + + protected final void checkNotCompiled(int compLevel) { + if (WHITE_BOX.isMethodQueuedForCompilation(method)) { + throw new RuntimeException(method + " must not be in queue"); + } + if (WHITE_BOX.getMethodCompilationLevel(method, false) >= compLevel) { + throw new RuntimeException(method + " comp_level must be >= maxCompLevel"); + } + if (WHITE_BOX.getMethodCompilationLevel(method, true) >= compLevel) { + throw new RuntimeException(method + " osr_comp_level must be >= maxCompLevel"); + } + } + /** * Checks, that {@linkplain #method} is not compiled. * diff --git a/hotspot/test/compiler/whitebox/IsMethodCompilableTest.java b/hotspot/test/compiler/whitebox/IsMethodCompilableTest.java index bd5916a7ca8..83d88669735 100644 --- a/hotspot/test/compiler/whitebox/IsMethodCompilableTest.java +++ b/hotspot/test/compiler/whitebox/IsMethodCompilableTest.java @@ -24,13 +24,17 @@ /* * @test IsMethodCompilableTest * @bug 8007270 8006683 8007288 8022832 - * @library /testlibrary /testlibrary/whitebox + * @library /testlibrary /testlibrary/whitebox /testlibrary/com/oracle/java/testlibrary * @build IsMethodCompilableTest * @run main ClassFileInstaller sun.hotspot.WhiteBox - * @run main/othervm/timeout=2400 -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -XX:CompileCommand=compileonly,SimpleTestCase$Helper::* IsMethodCompilableTest + * @run main ClassFileInstaller com.oracle.java.testlibrary.Platform + * @run main/othervm/timeout=2400 -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -XX:PerMethodRecompilationCutoff=3 -XX:CompileCommand=compileonly,SimpleTestCase$Helper::* IsMethodCompilableTest * @summary testing of WB::isMethodCompilable() * @author igor.ignatyev@oracle.com */ + +import com.oracle.java.testlibrary.Platform; + public class IsMethodCompilableTest extends CompilerWhiteBoxTest { /** * Value of {@code -XX:PerMethodRecompilationCutoff} @@ -43,7 +47,7 @@ public class IsMethodCompilableTest extends CompilerWhiteBoxTest { if (tmp == -1) { PER_METHOD_RECOMPILATION_CUTOFF = -1 /* Inf */; } else { - PER_METHOD_RECOMPILATION_CUTOFF = 1 + (0xFFFFFFFFL & tmp); + PER_METHOD_RECOMPILATION_CUTOFF = (0xFFFFFFFFL & tmp); } } @@ -60,19 +64,26 @@ public class IsMethodCompilableTest extends CompilerWhiteBoxTest { /** * Tests {@code WB::isMethodCompilable()} by recompilation of tested method * 'PerMethodRecompilationCutoff' times and checks compilation status. Also - * checks that WB::clearMethodState() clears no-compilable flags. + * checks that WB::clearMethodState() clears no-compilable flags. Only + * applicable to c2 compiled methods. * * @throws Exception if one of the checks fails. */ @Override protected void test() throws Exception { + + // Only c2 compilations can be disabled through PerMethodRecompilationCutoff + if (!Platform.isServer()) { + return; + } + if (testCase.isOsr() && CompilerWhiteBoxTest.MODE.startsWith( "compiled ")) { - System.err.printf("Warning: %s is not applicable in %s%n", - testCase.name(), CompilerWhiteBoxTest.MODE); - return; + System.err.printf("Warning: %s is not applicable in %s%n", + testCase.name(), CompilerWhiteBoxTest.MODE); + return; } - if (!isCompilable()) { + if (!isCompilable(COMP_LEVEL_FULL_OPTIMIZATION)) { throw new RuntimeException(method + " must be compilable"); } System.out.println("PerMethodRecompilationCutoff = " @@ -83,39 +94,37 @@ public class IsMethodCompilableTest extends CompilerWhiteBoxTest { return; } - // deoptimize 'PerMethodRecompilationCutoff' times and clear state - for (long i = 0L, n = PER_METHOD_RECOMPILATION_CUTOFF - 1; i < n; ++i) { - compileAndDeoptimize(); + // deoptimize 'PerMethodRecompilationCutoff' times + for (long attempts = 0, successes = 0; + (successes < PER_METHOD_RECOMPILATION_CUTOFF) && + (attempts < PER_METHOD_RECOMPILATION_CUTOFF*2) && + isCompilable(COMP_LEVEL_FULL_OPTIMIZATION); attempts++) { + if (compileAndDeoptimize() == COMP_LEVEL_FULL_OPTIMIZATION) { + successes++; + } } - if (!testCase.isOsr() && !isCompilable()) { - // in osr test case count of deopt maybe more than iterations - throw new RuntimeException(method + " is not compilable after " - + (PER_METHOD_RECOMPILATION_CUTOFF - 1) + " iterations"); - } - WHITE_BOX.clearMethodState(method); - // deoptimize 'PerMethodRecompilationCutoff' + 1 times - long i; - for (i = 0L; i < PER_METHOD_RECOMPILATION_CUTOFF - && isCompilable(); ++i) { - compileAndDeoptimize(); - } - if (!testCase.isOsr() && i != PER_METHOD_RECOMPILATION_CUTOFF) { + if (!testCase.isOsr() && !isCompilable(COMP_LEVEL_FULL_OPTIMIZATION)) { // in osr test case count of deopt maybe more than iterations throw new RuntimeException(method + " is not compilable after " - + i + " iterations, but must only after " - + PER_METHOD_RECOMPILATION_CUTOFF); + + PER_METHOD_RECOMPILATION_CUTOFF + " iterations"); } - if (isCompilable()) { + + // Now compile once more + compileAndDeoptimize(); + + if (isCompilable(COMP_LEVEL_FULL_OPTIMIZATION)) { throw new RuntimeException(method + " is still compilable after " + PER_METHOD_RECOMPILATION_CUTOFF + " iterations"); } - compile(); checkNotCompiled(); + compile(); + waitBackgroundCompilation(); + checkNotCompiled(COMP_LEVEL_FULL_OPTIMIZATION); // WB.clearMethodState() must reset no-compilable flags WHITE_BOX.clearMethodState(method); - if (!isCompilable()) { + if (!isCompilable(COMP_LEVEL_FULL_OPTIMIZATION)) { throw new RuntimeException(method + " is not compilable after clearMethodState()"); } @@ -123,9 +132,11 @@ public class IsMethodCompilableTest extends CompilerWhiteBoxTest { checkCompiled(); } - private void compileAndDeoptimize() throws Exception { + private int compileAndDeoptimize() throws Exception { compile(); waitBackgroundCompilation(); + int compLevel = getCompLevel(); deoptimize(); + return compLevel; } } diff --git a/hotspot/test/testlibrary/com/oracle/java/testlibrary/Platform.java b/hotspot/test/testlibrary/com/oracle/java/testlibrary/Platform.java index a2e5f82ad71..34b2f20f9a3 100644 --- a/hotspot/test/testlibrary/com/oracle/java/testlibrary/Platform.java +++ b/hotspot/test/testlibrary/com/oracle/java/testlibrary/Platform.java @@ -28,6 +28,15 @@ public class Platform { private static final String dataModel = System.getProperty("sun.arch.data.model"); private static final String vmVersion = System.getProperty("java.vm.version"); private static final String osArch = System.getProperty("os.arch"); + private static final String vmName = System.getProperty("java.vm.name"); + + public static boolean isClient() { + return vmName.endsWith(" Client VM"); + } + + public static boolean isServer() { + return vmName.endsWith(" Server VM"); + } public static boolean is32bit() { return dataModel.equals("32"); From 4dde43fa62eacbace22d8123b89253c5831c7a82 Mon Sep 17 00:00:00 2001 From: Jesper Wilhelmsson Date: Fri, 31 Jan 2014 13:38:01 +0100 Subject: [PATCH 003/116] 8023899: Typo in TraceCPUTime message Removed the comma Reviewed-by: pliden, tschatzl --- hotspot/src/share/vm/runtime/timer.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hotspot/src/share/vm/runtime/timer.cpp b/hotspot/src/share/vm/runtime/timer.cpp index ccb3322cedd..e33a51cfb97 100644 --- a/hotspot/src/share/vm/runtime/timer.cpp +++ b/hotspot/src/share/vm/runtime/timer.cpp @@ -194,7 +194,7 @@ TraceCPUTime::~TraceCPUTime() { system_secs = system_time - _starting_system_time; real_secs = real_time - _starting_real_time; - _logfile->print(" [Times: user=%3.2f sys=%3.2f, real=%3.2f secs] ", + _logfile->print(" [Times: user=%3.2f sys=%3.2f real=%3.2f secs] ", user_secs, system_secs, real_secs); } else { From ce89103d32c6515e83e6564faad7eea076ce85ff Mon Sep 17 00:00:00 2001 From: Volker Simonis Date: Mon, 10 Feb 2014 10:52:02 +0100 Subject: [PATCH 004/116] 8033951: nasgen needs the newly build nasgen and nashorn classes in the bootclasspath Reviewed-by: erikj --- nashorn/make/BuildNashorn.gmk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nashorn/make/BuildNashorn.gmk b/nashorn/make/BuildNashorn.gmk index fc87044245b..a987874c7ea 100644 --- a/nashorn/make/BuildNashorn.gmk +++ b/nashorn/make/BuildNashorn.gmk @@ -77,7 +77,7 @@ $(NASHORN_OUTPUTDIR)/classes/_the.nasgen.run: $(BUILD_NASGEN) $(RM) -rf $(@D)/jdk $(@D)/netscape $(CP) -R -p $(NASHORN_OUTPUTDIR)/nashorn_classes/* $(@D)/ $(FIXPATH) $(JAVA) \ - -cp "$(NASHORN_OUTPUTDIR)/nasgen_classes$(PATH_SEP)$(NASHORN_OUTPUTDIR)/nashorn_classes" \ + -Xbootclasspath/p:"$(NASHORN_OUTPUTDIR)/nasgen_classes$(PATH_SEP)$(NASHORN_OUTPUTDIR)/nashorn_classes" \ jdk.nashorn.internal.tools.nasgen.Main $(@D) jdk.nashorn.internal.objects $(@D) $(TOUCH) $@ From d54998d0af7551223c20bba9be0a0d533067df01 Mon Sep 17 00:00:00 2001 From: Omair Majid Date: Thu, 20 Feb 2014 10:07:46 -0500 Subject: [PATCH 005/116] 8035341: Allow using a system installed libpng Reviewed-by: andrew, erikj, ihse, serb --- common/autoconf/generated-configure.sh | 124 ++++++++++++++++++++++++- common/autoconf/libraries.m4 | 40 ++++++++ common/autoconf/spec.gmk.in | 9 ++ 3 files changed, 172 insertions(+), 1 deletion(-) diff --git a/common/autoconf/generated-configure.sh b/common/autoconf/generated-configure.sh index 25db0b333ca..138c51adcfd 100644 --- a/common/autoconf/generated-configure.sh +++ b/common/autoconf/generated-configure.sh @@ -646,6 +646,9 @@ LIBDL LIBM LIBZIP_CAN_USE_MMAP USE_EXTERNAL_LIBZ +USE_EXTERNAL_LIBPNG +PNG_LIBS +PNG_CFLAGS USE_EXTERNAL_LIBGIF USE_EXTERNAL_LIBJPEG ALSA_LIBS @@ -1070,6 +1073,7 @@ with_alsa with_alsa_include with_alsa_lib with_giflib +with_libpng with_zlib with_stdc__lib with_num_cores @@ -1178,6 +1182,8 @@ FREETYPE_CFLAGS FREETYPE_LIBS ALSA_CFLAGS ALSA_LIBS +PNG_CFLAGS +PNG_LIBS LIBFFI_CFLAGS LIBFFI_LIBS CCACHE' @@ -1921,6 +1927,8 @@ Optional Packages: --with-alsa-lib specify directory for the alsa library --with-giflib use giflib from build system or OpenJDK source (system, bundled) [bundled] + --with-libpng use libpng from build system or OpenJDK source + (system, bundled) [bundled] --with-zlib use zlib from build system or OpenJDK source (system, bundled) [bundled] --with-stdc++lib=,, @@ -2037,6 +2045,8 @@ Some influential environment variables: linker flags for FREETYPE, overriding pkg-config ALSA_CFLAGS C compiler flags for ALSA, overriding pkg-config ALSA_LIBS linker flags for ALSA, overriding pkg-config + PNG_CFLAGS C compiler flags for PNG, overriding pkg-config + PNG_LIBS linker flags for PNG, overriding pkg-config LIBFFI_CFLAGS C compiler flags for LIBFFI, overriding pkg-config LIBFFI_LIBS linker flags for LIBFFI, overriding pkg-config @@ -4092,7 +4102,7 @@ fi #CUSTOM_AUTOCONF_INCLUDE # Do not change or remove the following line, it is needed for consistency checks: -DATE_WHEN_GENERATED=1392111785 +DATE_WHEN_GENERATED=1392907541 ############################################################################### # @@ -47214,6 +47224,118 @@ fi fi + ############################################################################### + # + # Check for the png library + # + + +# Check whether --with-libpng was given. +if test "${with_libpng+set}" = set; then : + withval=$with_libpng; +fi + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for which libpng to use" >&5 +$as_echo_n "checking for which libpng to use... " >&6; } + + # default is bundled + DEFAULT_LIBPNG=bundled + + # + # if user didn't specify, use DEFAULT_LIBPNG + # + if test "x${with_libpng}" = "x"; then + with_libpng=${DEFAULT_LIBPNG} + fi + + if test "x${with_libpng}" = "xbundled"; then + USE_EXTERNAL_LIBPNG=false + { $as_echo "$as_me:${as_lineno-$LINENO}: result: bundled" >&5 +$as_echo "bundled" >&6; } + elif test "x${with_libpng}" = "xsystem"; then + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for PNG" >&5 +$as_echo_n "checking for PNG... " >&6; } + +if test -n "$PNG_CFLAGS"; then + pkg_cv_PNG_CFLAGS="$PNG_CFLAGS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libpng\""; } >&5 + ($PKG_CONFIG --exists --print-errors "libpng") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_PNG_CFLAGS=`$PKG_CONFIG --cflags "libpng" 2>/dev/null` +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi +if test -n "$PNG_LIBS"; then + pkg_cv_PNG_LIBS="$PNG_LIBS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libpng\""; } >&5 + ($PKG_CONFIG --exists --print-errors "libpng") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_PNG_LIBS=`$PKG_CONFIG --libs "libpng" 2>/dev/null` +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + PNG_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "libpng" 2>&1` + else + PNG_PKG_ERRORS=`$PKG_CONFIG --print-errors "libpng" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$PNG_PKG_ERRORS" >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + LIBPNG_FOUND=no +elif test $pkg_failed = untried; then + LIBPNG_FOUND=no +else + PNG_CFLAGS=$pkg_cv_PNG_CFLAGS + PNG_LIBS=$pkg_cv_PNG_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + LIBPNG_FOUND=yes +fi + if test "x${LIBPNG_FOUND}" = "xyes"; then + USE_EXTERNAL_LIBPNG=true + { $as_echo "$as_me:${as_lineno-$LINENO}: result: system" >&5 +$as_echo "system" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: system not found" >&5 +$as_echo "system not found" >&6; } + as_fn_error $? "--with-libpng=system specified, but no libpng found!" "$LINENO" 5 + fi + else + as_fn_error $? "Invalid value of --with-libpng: ${with_libpng}, use 'system' or 'bundled'" "$LINENO" 5 + fi + + ############################################################################### # # Check for the zlib library diff --git a/common/autoconf/libraries.m4 b/common/autoconf/libraries.m4 index dccec779cfc..9a187c5b3da 100644 --- a/common/autoconf/libraries.m4 +++ b/common/autoconf/libraries.m4 @@ -652,6 +652,46 @@ AC_DEFUN_ONCE([LIB_SETUP_MISC_LIBS], fi AC_SUBST(USE_EXTERNAL_LIBGIF) + ############################################################################### + # + # Check for the png library + # + + AC_ARG_WITH(libpng, [AS_HELP_STRING([--with-libpng], + [use libpng from build system or OpenJDK source (system, bundled) @<:@bundled@:>@])]) + + + AC_MSG_CHECKING([for which libpng to use]) + + # default is bundled + DEFAULT_LIBPNG=bundled + + # + # if user didn't specify, use DEFAULT_LIBPNG + # + if test "x${with_libpng}" = "x"; then + with_libpng=${DEFAULT_LIBPNG} + fi + + if test "x${with_libpng}" = "xbundled"; then + USE_EXTERNAL_LIBPNG=false + AC_MSG_RESULT([bundled]) + elif test "x${with_libpng}" = "xsystem"; then + PKG_CHECK_MODULES(PNG, libpng, + [ LIBPNG_FOUND=yes ], + [ LIBPNG_FOUND=no ]) + if test "x${LIBPNG_FOUND}" = "xyes"; then + USE_EXTERNAL_LIBPNG=true + AC_MSG_RESULT([system]) + else + AC_MSG_RESULT([system not found]) + AC_MSG_ERROR([--with-libpng=system specified, but no libpng found!]) + fi + else + AC_MSG_ERROR([Invalid value of --with-libpng: ${with_libpng}, use 'system' or 'bundled']) + fi + AC_SUBST(USE_EXTERNAL_LIBPNG) + ############################################################################### # # Check for the zlib library diff --git a/common/autoconf/spec.gmk.in b/common/autoconf/spec.gmk.in index dec8cd5ff8c..76cde66bbce 100644 --- a/common/autoconf/spec.gmk.in +++ b/common/autoconf/spec.gmk.in @@ -645,6 +645,15 @@ INSTALL_SHAREDSTATEDIR=@sharedstatedir@ # Read-only single-machine data INSTALL_SYSCONFDIR=@sysconfdir@ +#################################################### +# +# Libraries +# + +USE_EXTERNAL_LIBPNG:=@USE_EXTERNAL_LIBPNG@ +PNG_LIBS:=@PNG_LIBS@ +PNG_CFLAGS:=@PNG_CFLAGS@ + #################################################### # From 90d8f00199e701081552cc1b7470dedfaece89c0 Mon Sep 17 00:00:00 2001 From: Stefan Johansson Date: Fri, 21 Feb 2014 09:48:52 +0100 Subject: [PATCH 006/116] 8035057: NewSize ergonomics wrong when setting small or unaligned size on command line Making sure that if NewSize is set on the command line it should be used for both min and initial size even if it is re-aligned. Reviewed-by: jwilhelm, jmasa --- hotspot/src/share/vm/memory/collectorPolicy.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/hotspot/src/share/vm/memory/collectorPolicy.cpp b/hotspot/src/share/vm/memory/collectorPolicy.cpp index a2f7166eda7..83ec563f153 100644 --- a/hotspot/src/share/vm/memory/collectorPolicy.cpp +++ b/hotspot/src/share/vm/memory/collectorPolicy.cpp @@ -304,10 +304,13 @@ void GenCollectorPolicy::initialize_flags() { } // Now take the actual NewSize into account. We will silently increase NewSize - // if the user specified a smaller value. + // if the user specified a smaller or unaligned value. smallest_new_size = MAX2(smallest_new_size, (uintx)align_size_down(NewSize, _gen_alignment)); if (smallest_new_size != NewSize) { - FLAG_SET_ERGO(uintx, NewSize, smallest_new_size); + // Do not use FLAG_SET_ERGO to update NewSize here, since this will override + // if NewSize was set on the command line or not. This information is needed + // later when setting the initial and minimum young generation size. + NewSize = smallest_new_size; } _initial_gen0_size = NewSize; From 97a80c5f9d349eac80ec0ecdb67f6862bc25bdd7 Mon Sep 17 00:00:00 2001 From: Henry Jen Date: Tue, 25 Feb 2014 23:38:52 -0800 Subject: [PATCH 007/116] 8019470: Changes needed to compile JDK 8 on MacOS with clang compiler Reviewed-by: erikj, ihse --- common/autoconf/flags.m4 | 39 ++++++++++++++++ common/autoconf/generated-configure.sh | 65 ++++++++++++++++++++++++-- common/autoconf/toolchain.m4 | 23 ++++++++- 3 files changed, 122 insertions(+), 5 deletions(-) diff --git a/common/autoconf/flags.m4 b/common/autoconf/flags.m4 index 613afc319a1..bcfa1777bcf 100644 --- a/common/autoconf/flags.m4 +++ b/common/autoconf/flags.m4 @@ -133,6 +133,26 @@ AC_DEFUN_ONCE([FLAGS_SETUP_COMPILER_FLAGS_FOR_LIBS], C_FLAG_REORDER='' CXX_FLAG_REORDER='' + if test "x$OPENJDK_TARGET_OS" = xmacosx; then + # Linking is different on MacOSX + SHARED_LIBRARY_FLAGS="-dynamiclib -compatibility_version 1.0.0 -current_version 1.0.0 $PICFLAG" + SET_EXECUTABLE_ORIGIN='-Xlinker -rpath -Xlinker @loader_path/.' + SET_SHARED_LIBRARY_ORIGIN="$SET_EXECUTABLE_ORIGIN" + SET_SHARED_LIBRARY_NAME='-Xlinker -install_name -Xlinker @rpath/[$]1' + SET_SHARED_LIBRARY_MAPFILE='' + else + # Default works for linux, might work on other platforms as well. + SHARED_LIBRARY_FLAGS='-shared' + SET_EXECUTABLE_ORIGIN='-Xlinker -rpath -Xlinker \$$$$ORIGIN[$]1' + SET_SHARED_LIBRARY_ORIGIN="-Xlinker -z -Xlinker origin $SET_EXECUTABLE_ORIGIN" + SET_SHARED_LIBRARY_NAME='-Xlinker -soname=[$]1' + SET_SHARED_LIBRARY_MAPFILE='-Xlinker -version-script=[$]1' + fi + elif test "x$TOOLCHAIN_TYPE" = xclang; then + PICFLAG='' + C_FLAG_REORDER='' + CXX_FLAG_REORDER='' + if test "x$OPENJDK_TARGET_OS" = xmacosx; then # Linking is different on MacOSX SHARED_LIBRARY_FLAGS="-dynamiclib -compatibility_version 1.0.0 -current_version 1.0.0 $PICFLAG" @@ -242,6 +262,8 @@ AC_DEFUN_ONCE([FLAGS_SETUP_COMPILER_FLAGS_FOR_OPTIMIZATION], # Generate make dependency files if test "x$TOOLCHAIN_TYPE" = xgcc; then C_FLAG_DEPS="-MMD -MF" + elif test "x$TOOLCHAIN_TYPE" = xclang; then + C_FLAG_DEPS="-MMD -MF" elif test "x$TOOLCHAIN_TYPE" = xsolstudio; then C_FLAG_DEPS="-xMMD -xMF" elif test "x$TOOLCHAIN_TYPE" = xxlc; then @@ -260,6 +282,9 @@ AC_DEFUN_ONCE([FLAGS_SETUP_COMPILER_FLAGS_FOR_OPTIMIZATION], CFLAGS_DEBUG_SYMBOLS="-g" CXXFLAGS_DEBUG_SYMBOLS="-g" fi + elif test "x$TOOLCHAIN_TYPE" = xclang; then + CFLAGS_DEBUG_SYMBOLS="-g" + CXXFLAGS_DEBUG_SYMBOLS="-g" elif test "x$TOOLCHAIN_TYPE" = xsolstudio; then CFLAGS_DEBUG_SYMBOLS="-g -xs" CXXFLAGS_DEBUG_SYMBOLS="-g0 -xs" @@ -315,6 +340,20 @@ AC_DEFUN_ONCE([FLAGS_SETUP_COMPILER_FLAGS_FOR_OPTIMIZATION], C_O_FLAG_NORM="-O2" C_O_FLAG_NONE="-O0" fi + elif test "x$TOOLCHAIN_TYPE" = xclang; then + if test "x$OPENJDK_TARGET_OS" = xmacosx; then + # On MacOSX we optimize for size, something + # we should do for all platforms? + C_O_FLAG_HIGHEST="-Os" + C_O_FLAG_HI="-Os" + C_O_FLAG_NORM="-Os" + C_O_FLAG_NONE="" + else + C_O_FLAG_HIGHEST="-O3" + C_O_FLAG_HI="-O3" + C_O_FLAG_NORM="-O2" + C_O_FLAG_NONE="-O0" + fi elif test "x$TOOLCHAIN_TYPE" = xxlc; then C_O_FLAG_HIGHEST="-O3" C_O_FLAG_HI="-O3 -qstrict" diff --git a/common/autoconf/generated-configure.sh b/common/autoconf/generated-configure.sh index 7473edb634f..a10b2ef98db 100644 --- a/common/autoconf/generated-configure.sh +++ b/common/autoconf/generated-configure.sh @@ -4221,7 +4221,7 @@ TOOLCHAIN_DESCRIPTION_xlc="IBM XL C/C++" #CUSTOM_AUTOCONF_INCLUDE # Do not change or remove the following line, it is needed for consistency checks: -DATE_WHEN_GENERATED=1394011255 +DATE_WHEN_GENERATED=1394150589 ############################################################################### # @@ -26297,8 +26297,28 @@ fi # Use indirect variable referencing toolchain_var_name=VALID_TOOLCHAINS_$OPENJDK_BUILD_OS VALID_TOOLCHAINS=${!toolchain_var_name} - # First toolchain type in the list is the default - DEFAULT_TOOLCHAIN=${VALID_TOOLCHAINS%% *} + + if test "x$OPENJDK_TARGET_OS" = xmacosx; then + # On Mac OS X, default toolchain to clang after Xcode 5 + XCODE_VERSION_OUTPUT=`xcodebuild -version 2>&1 | $HEAD -n 1` + $ECHO "$XCODE_VERSION_OUTPUT" | $GREP "Xcode " > /dev/null + if test $? -ne 0; then + as_fn_error $? "Failed to determine Xcode version." "$LINENO" 5 + fi + XCODE_MAJOR_VERSION=`$ECHO $XCODE_VERSION_OUTPUT | \ + $SED -e 's/^Xcode \([1-9][0-9.]*\)/\1/' | \ + $CUT -f 1 -d .` + { $as_echo "$as_me:${as_lineno-$LINENO}: Xcode major version: $XCODE_MAJOR_VERSION" >&5 +$as_echo "$as_me: Xcode major version: $XCODE_MAJOR_VERSION" >&6;} + if test $XCODE_MAJOR_VERSION -ge 5; then + DEFAULT_TOOLCHAIN="clang" + else + DEFAULT_TOOLCHAIN="gcc" + fi + else + # First toolchain type in the list is the default + DEFAULT_TOOLCHAIN=${VALID_TOOLCHAINS%% *} + fi if test "x$with_toolchain_type" = xlist; then # List all toolchains @@ -41221,6 +41241,26 @@ $as_echo "$ac_cv_c_bigendian" >&6; } C_FLAG_REORDER='' CXX_FLAG_REORDER='' + if test "x$OPENJDK_TARGET_OS" = xmacosx; then + # Linking is different on MacOSX + SHARED_LIBRARY_FLAGS="-dynamiclib -compatibility_version 1.0.0 -current_version 1.0.0 $PICFLAG" + SET_EXECUTABLE_ORIGIN='-Xlinker -rpath -Xlinker @loader_path/.' + SET_SHARED_LIBRARY_ORIGIN="$SET_EXECUTABLE_ORIGIN" + SET_SHARED_LIBRARY_NAME='-Xlinker -install_name -Xlinker @rpath/$1' + SET_SHARED_LIBRARY_MAPFILE='' + else + # Default works for linux, might work on other platforms as well. + SHARED_LIBRARY_FLAGS='-shared' + SET_EXECUTABLE_ORIGIN='-Xlinker -rpath -Xlinker \$$$$ORIGIN$1' + SET_SHARED_LIBRARY_ORIGIN="-Xlinker -z -Xlinker origin $SET_EXECUTABLE_ORIGIN" + SET_SHARED_LIBRARY_NAME='-Xlinker -soname=$1' + SET_SHARED_LIBRARY_MAPFILE='-Xlinker -version-script=$1' + fi + elif test "x$TOOLCHAIN_TYPE" = xclang; then + PICFLAG='' + C_FLAG_REORDER='' + CXX_FLAG_REORDER='' + if test "x$OPENJDK_TARGET_OS" = xmacosx; then # Linking is different on MacOSX SHARED_LIBRARY_FLAGS="-dynamiclib -compatibility_version 1.0.0 -current_version 1.0.0 $PICFLAG" @@ -41297,6 +41337,8 @@ $as_echo "$ac_cv_c_bigendian" >&6; } # Generate make dependency files if test "x$TOOLCHAIN_TYPE" = xgcc; then C_FLAG_DEPS="-MMD -MF" + elif test "x$TOOLCHAIN_TYPE" = xclang; then + C_FLAG_DEPS="-MMD -MF" elif test "x$TOOLCHAIN_TYPE" = xsolstudio; then C_FLAG_DEPS="-xMMD -xMF" elif test "x$TOOLCHAIN_TYPE" = xxlc; then @@ -41315,6 +41357,9 @@ $as_echo "$ac_cv_c_bigendian" >&6; } CFLAGS_DEBUG_SYMBOLS="-g" CXXFLAGS_DEBUG_SYMBOLS="-g" fi + elif test "x$TOOLCHAIN_TYPE" = xclang; then + CFLAGS_DEBUG_SYMBOLS="-g" + CXXFLAGS_DEBUG_SYMBOLS="-g" elif test "x$TOOLCHAIN_TYPE" = xsolstudio; then CFLAGS_DEBUG_SYMBOLS="-g -xs" CXXFLAGS_DEBUG_SYMBOLS="-g0 -xs" @@ -41370,6 +41415,20 @@ $as_echo "$ac_cv_c_bigendian" >&6; } C_O_FLAG_NORM="-O2" C_O_FLAG_NONE="-O0" fi + elif test "x$TOOLCHAIN_TYPE" = xclang; then + if test "x$OPENJDK_TARGET_OS" = xmacosx; then + # On MacOSX we optimize for size, something + # we should do for all platforms? + C_O_FLAG_HIGHEST="-Os" + C_O_FLAG_HI="-Os" + C_O_FLAG_NORM="-Os" + C_O_FLAG_NONE="" + else + C_O_FLAG_HIGHEST="-O3" + C_O_FLAG_HI="-O3" + C_O_FLAG_NORM="-O2" + C_O_FLAG_NONE="-O0" + fi elif test "x$TOOLCHAIN_TYPE" = xxlc; then C_O_FLAG_HIGHEST="-O3" C_O_FLAG_HI="-O3 -qstrict" diff --git a/common/autoconf/toolchain.m4 b/common/autoconf/toolchain.m4 index 7110d783205..ba57a850219 100644 --- a/common/autoconf/toolchain.m4 +++ b/common/autoconf/toolchain.m4 @@ -96,8 +96,27 @@ AC_DEFUN_ONCE([TOOLCHAIN_DETERMINE_TOOLCHAIN_TYPE], # Use indirect variable referencing toolchain_var_name=VALID_TOOLCHAINS_$OPENJDK_BUILD_OS VALID_TOOLCHAINS=${!toolchain_var_name} - # First toolchain type in the list is the default - DEFAULT_TOOLCHAIN=${VALID_TOOLCHAINS%% *} + + if test "x$OPENJDK_TARGET_OS" = xmacosx; then + # On Mac OS X, default toolchain to clang after Xcode 5 + XCODE_VERSION_OUTPUT=`xcodebuild -version 2>&1 | $HEAD -n 1` + $ECHO "$XCODE_VERSION_OUTPUT" | $GREP "Xcode " > /dev/null + if test $? -ne 0; then + AC_MSG_ERROR([Failed to determine Xcode version.]) + fi + XCODE_MAJOR_VERSION=`$ECHO $XCODE_VERSION_OUTPUT | \ + $SED -e 's/^Xcode \(@<:@1-9@:>@@<:@0-9.@:>@*\)/\1/' | \ + $CUT -f 1 -d .` + AC_MSG_NOTICE([Xcode major version: $XCODE_MAJOR_VERSION]) + if test $XCODE_MAJOR_VERSION -ge 5; then + DEFAULT_TOOLCHAIN="clang" + else + DEFAULT_TOOLCHAIN="gcc" + fi + else + # First toolchain type in the list is the default + DEFAULT_TOOLCHAIN=${VALID_TOOLCHAINS%% *} + fi if test "x$with_toolchain_type" = xlist; then # List all toolchains From e1e850a132654a3d95b5d33f07a895662a3346d1 Mon Sep 17 00:00:00 2001 From: Staffan Larsen Date: Wed, 26 Feb 2014 15:47:44 +0100 Subject: [PATCH 008/116] 8035150: ShouldNotReachHere() in ConstantPool::copy_entry_to Reviewed-by: dcubed, mgronlun --- hotspot/src/share/vm/oops/constantPool.cpp | 1 + .../TestRedefineWithUnresolvedClass.java | 82 ++++++ .../jvmti/UnresolvedClassAgent.java | 69 +++++ .../jvmti/UnresolvedClassAgent.mf | 3 + .../oracle/java/testlibrary/ProcessTools.java | 81 +++++- .../com/oracle/java/testlibrary/Utils.java | 263 ++++++++++++++++++ 6 files changed, 497 insertions(+), 2 deletions(-) create mode 100644 hotspot/test/serviceability/jvmti/TestRedefineWithUnresolvedClass.java create mode 100644 hotspot/test/serviceability/jvmti/UnresolvedClassAgent.java create mode 100644 hotspot/test/serviceability/jvmti/UnresolvedClassAgent.mf create mode 100644 hotspot/test/testlibrary/com/oracle/java/testlibrary/Utils.java diff --git a/hotspot/src/share/vm/oops/constantPool.cpp b/hotspot/src/share/vm/oops/constantPool.cpp index e008ccb8d4a..9ed7628985d 100644 --- a/hotspot/src/share/vm/oops/constantPool.cpp +++ b/hotspot/src/share/vm/oops/constantPool.cpp @@ -1295,6 +1295,7 @@ void ConstantPool::copy_entry_to(constantPoolHandle from_cp, int from_i, } break; case JVM_CONSTANT_UnresolvedClass: + case JVM_CONSTANT_UnresolvedClassInError: { // Can be resolved after checking tag, so check the slot first. CPSlot entry = from_cp->slot_at(from_i); diff --git a/hotspot/test/serviceability/jvmti/TestRedefineWithUnresolvedClass.java b/hotspot/test/serviceability/jvmti/TestRedefineWithUnresolvedClass.java new file mode 100644 index 00000000000..4f929c49af6 --- /dev/null +++ b/hotspot/test/serviceability/jvmti/TestRedefineWithUnresolvedClass.java @@ -0,0 +1,82 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @summary Redefine a class with an UnresolvedClass reference in the constant pool. + * @bug 8035150 + * @library /testlibrary + * @build UnresolvedClassAgent com.oracle.java.testlibrary.ProcessTools com.oracle.java.testlibrary.OutputAnalyzer + * @run main TestRedefineWithUnresolvedClass + */ + +import java.io.File; +import java.util.Arrays; + +import com.oracle.java.testlibrary.OutputAnalyzer; +import com.oracle.java.testlibrary.ProcessTools; + +public class TestRedefineWithUnresolvedClass { + + final static String slash = File.separator; + final static String testClasses = System.getProperty("test.classes") + slash; + + public static void main(String... args) throws Throwable { + // delete this class to cause a NoClassDefFoundError + File unresolved = new File(testClasses, "MyUnresolvedClass.class"); + if (unresolved.exists() && !unresolved.delete()) { + throw new Exception("Could not delete: " + unresolved); + } + + // build the javaagent + buildJar("UnresolvedClassAgent"); + + // launch a VM with the javaagent + launchTest(); + } + + private static void buildJar(String jarName) throws Throwable { + String testSrc = System.getProperty("test.src", "?") + slash; + + String jarPath = String.format("%s%s.jar", testClasses, jarName); + String manifestPath = String.format("%s%s.mf", testSrc, jarName); + String className = String.format("%s.class", jarName); + + String[] args = new String[] {"-cfm", jarPath, manifestPath, "-C", testClasses, className}; + + System.out.println("Running jar " + Arrays.toString(args)); + sun.tools.jar.Main jarTool = new sun.tools.jar.Main(System.out, System.err, "jar"); + if (!jarTool.run(args)) { + throw new Exception("jar failed: args=" + Arrays.toString(args)); + } + } + + private static void launchTest() throws Throwable { + String[] args = { + "-javaagent:" + testClasses + "UnresolvedClassAgent.jar", + "-Dtest.classes=" + testClasses, + "UnresolvedClassAgent" }; + OutputAnalyzer output = ProcessTools.executeTestJvm(args); + output.shouldHaveExitValue(0); + } +} diff --git a/hotspot/test/serviceability/jvmti/UnresolvedClassAgent.java b/hotspot/test/serviceability/jvmti/UnresolvedClassAgent.java new file mode 100644 index 00000000000..efe7b25a1aa --- /dev/null +++ b/hotspot/test/serviceability/jvmti/UnresolvedClassAgent.java @@ -0,0 +1,69 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import java.io.DataInputStream; +import java.io.File; +import java.io.FileInputStream; +import java.lang.instrument.ClassDefinition; +import java.lang.instrument.Instrumentation; + +/* + * This class is present during compilation, but will be deleted before execution. + */ +class MyUnresolvedClass { + static void bar() { + } +} + +class MyRedefinedClass { + static void foo() { + MyUnresolvedClass.bar(); + } +} + +public class UnresolvedClassAgent { + public static void main(String... args) { + } + + public static void premain(String args, Instrumentation inst) throws Exception { + try { + MyRedefinedClass.foo(); + } catch(NoClassDefFoundError err) { + System.out.println("NoClassDefFoundError (expected)"); + } + + File f = new File(System.getProperty("test.classes"), "MyRedefinedClass.class"); + byte[] buf = new byte[(int)f.length()]; + try (DataInputStream dis = new DataInputStream(new FileInputStream(f))) { + dis.readFully(buf); + } + ClassDefinition cd = new ClassDefinition(MyRedefinedClass.class, buf); + inst.redefineClasses(new ClassDefinition[] {cd}); + + try { + MyRedefinedClass.foo(); + } catch(NoClassDefFoundError err) { + System.out.println("NoClassDefFoundError (expected again)"); + } + } +} diff --git a/hotspot/test/serviceability/jvmti/UnresolvedClassAgent.mf b/hotspot/test/serviceability/jvmti/UnresolvedClassAgent.mf new file mode 100644 index 00000000000..5570570cd11 --- /dev/null +++ b/hotspot/test/serviceability/jvmti/UnresolvedClassAgent.mf @@ -0,0 +1,3 @@ +Manifest-Version: 1.0 +Premain-Class: UnresolvedClassAgent +Can-Redefine-Classes: true diff --git a/hotspot/test/testlibrary/com/oracle/java/testlibrary/ProcessTools.java b/hotspot/test/testlibrary/com/oracle/java/testlibrary/ProcessTools.java index 04293905824..649b7a1b38a 100644 --- a/hotspot/test/testlibrary/com/oracle/java/testlibrary/ProcessTools.java +++ b/hotspot/test/testlibrary/com/oracle/java/testlibrary/ProcessTools.java @@ -163,10 +163,87 @@ public final class ProcessTools { // Reporting StringBuilder cmdLine = new StringBuilder(); - for (String cmd : args) - cmdLine.append(cmd).append(' '); + for (String cmd : args) { + cmdLine.append(cmd).append(' '); + } System.out.println("Command line: [" + cmdLine.toString() + "]"); return new ProcessBuilder(args.toArray(new String[args.size()])); } + + /** + * Executes a test jvm process, waits for it to finish and returns the process output. + * The default jvm options from jtreg, test.vm.opts and test.java.opts, are added. + * The java from the test.jdk is used to execute the command. + * + * The command line will be like: + * {test.jdk}/bin/java {test.vm.opts} {test.java.opts} cmds + * + * @param cmds User specifed arguments. + * @return The output from the process. + */ + public static OutputAnalyzer executeTestJvm(String... cmds) throws Throwable { + ProcessBuilder pb = createJavaProcessBuilder(Utils.addTestJavaOpts(cmds)); + return executeProcess(pb); + } + + /** + * Executes a process, waits for it to finish and returns the process output. + * @param pb The ProcessBuilder to execute. + * @return The output from the process. + */ + public static OutputAnalyzer executeProcess(ProcessBuilder pb) throws Throwable { + OutputAnalyzer output = null; + try { + output = new OutputAnalyzer(pb.start()); + return output; + } catch (Throwable t) { + System.out.println("executeProcess() failed: " + t); + throw t; + } finally { + System.out.println(getProcessLog(pb, output)); + } + } + + /** + * Executes a process, waits for it to finish and returns the process output. + * @param cmds The command line to execute. + * @return The output from the process. + */ + public static OutputAnalyzer executeProcess(String... cmds) throws Throwable { + return executeProcess(new ProcessBuilder(cmds)); + } + + /** + * Used to log command line, stdout, stderr and exit code from an executed process. + * @param pb The executed process. + * @param output The output from the process. + */ + public static String getProcessLog(ProcessBuilder pb, OutputAnalyzer output) { + String stderr = output == null ? "null" : output.getStderr(); + String stdout = output == null ? "null" : output.getStdout(); + String exitValue = output == null ? "null": Integer.toString(output.getExitValue()); + StringBuilder logMsg = new StringBuilder(); + final String nl = System.getProperty("line.separator"); + logMsg.append("--- ProcessLog ---" + nl); + logMsg.append("cmd: " + getCommandLine(pb) + nl); + logMsg.append("exitvalue: " + exitValue + nl); + logMsg.append("stderr: " + stderr + nl); + logMsg.append("stdout: " + stdout + nl); + return logMsg.toString(); + } + + /** + * @return The full command line for the ProcessBuilder. + */ + public static String getCommandLine(ProcessBuilder pb) { + if (pb == null) { + return "null"; + } + StringBuilder cmd = new StringBuilder(); + for (String s : pb.command()) { + cmd.append(s).append(" "); + } + return cmd.toString().trim(); + } } diff --git a/hotspot/test/testlibrary/com/oracle/java/testlibrary/Utils.java b/hotspot/test/testlibrary/com/oracle/java/testlibrary/Utils.java new file mode 100644 index 00000000000..a0031e706ec --- /dev/null +++ b/hotspot/test/testlibrary/com/oracle/java/testlibrary/Utils.java @@ -0,0 +1,263 @@ +/* + * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.oracle.java.testlibrary; + +import static com.oracle.java.testlibrary.Asserts.assertTrue; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileReader; +import java.io.IOException; +import java.net.InetAddress; +import java.net.ServerSocket; +import java.net.UnknownHostException; +import java.util.ArrayList; +import java.util.List; +import java.util.Arrays; +import java.util.Collections; +import java.util.regex.Pattern; +import java.util.regex.Matcher; + +/** + * Common library for various test helper functions. + */ +public final class Utils { + + /** + * Returns the sequence used by operating system to separate lines. + */ + public static final String NEW_LINE = System.getProperty("line.separator"); + + /** + * Returns the value of 'test.vm.opts'system property. + */ + public static final String VM_OPTIONS = System.getProperty("test.vm.opts", "").trim(); + + /** + * Returns the value of 'test.java.opts'system property. + */ + public static final String JAVA_OPTIONS = System.getProperty("test.java.opts", "").trim(); + + /** + * Returns the value of 'test.timeout.factor' system property + * converted to {@code double}. + */ + public static final double TIMEOUT_FACTOR; + static { + String toFactor = System.getProperty("test.timeout.factor", "1.0"); + TIMEOUT_FACTOR = Double.parseDouble(toFactor); + } + + private Utils() { + // Private constructor to prevent class instantiation + } + + /** + * Returns the list of VM options. + * + * @return List of VM options + */ + public static List getVmOptions() { + return Arrays.asList(safeSplitString(VM_OPTIONS)); + } + + /** + * Returns the list of VM options with -J prefix. + * + * @return The list of VM options with -J prefix + */ + public static List getForwardVmOptions() { + String[] opts = safeSplitString(VM_OPTIONS); + for (int i = 0; i < opts.length; i++) { + opts[i] = "-J" + opts[i]; + } + return Arrays.asList(opts); + } + + /** + * Returns the default JTReg arguments for a jvm running a test. + * This is the combination of JTReg arguments test.vm.opts and test.java.opts. + * @return An array of options, or an empty array if no opptions. + */ + public static String[] getTestJavaOpts() { + List opts = new ArrayList(); + Collections.addAll(opts, safeSplitString(VM_OPTIONS)); + Collections.addAll(opts, safeSplitString(JAVA_OPTIONS)); + return opts.toArray(new String[0]); + } + + /** + * Combines given arguments with default JTReg arguments for a jvm running a test. + * This is the combination of JTReg arguments test.vm.opts and test.java.opts + * @return The combination of JTReg test java options and user args. + */ + public static String[] addTestJavaOpts(String... userArgs) { + List opts = new ArrayList(); + Collections.addAll(opts, getTestJavaOpts()); + Collections.addAll(opts, userArgs); + return opts.toArray(new String[0]); + } + + /** + * Splits a string by white space. + * Works like String.split(), but returns an empty array + * if the string is null or empty. + */ + private static String[] safeSplitString(String s) { + if (s == null || s.trim().isEmpty()) { + return new String[] {}; + } + return s.trim().split("\\s+"); + } + + /** + * @return The full command line for the ProcessBuilder. + */ + public static String getCommandLine(ProcessBuilder pb) { + StringBuilder cmd = new StringBuilder(); + for (String s : pb.command()) { + cmd.append(s).append(" "); + } + return cmd.toString(); + } + + /** + * Returns the free port on the local host. + * The function will spin until a valid port number is found. + * + * @return The port number + * @throws InterruptedException if any thread has interrupted the current thread + * @throws IOException if an I/O error occurs when opening the socket + */ + public static int getFreePort() throws InterruptedException, IOException { + int port = -1; + + while (port <= 0) { + Thread.sleep(100); + + ServerSocket serverSocket = null; + try { + serverSocket = new ServerSocket(0); + port = serverSocket.getLocalPort(); + } finally { + serverSocket.close(); + } + } + + return port; + } + + /** + * Returns the name of the local host. + * + * @return The host name + * @throws UnknownHostException if IP address of a host could not be determined + */ + public static String getHostname() throws UnknownHostException { + InetAddress inetAddress = InetAddress.getLocalHost(); + String hostName = inetAddress.getHostName(); + + assertTrue((hostName != null && !hostName.isEmpty()), + "Cannot get hostname"); + + return hostName; + } + + /** + * Uses "jcmd -l" to search for a jvm pid. This function will wait + * forever (until jtreg timeout) for the pid to be found. + * @param key Regular expression to search for + * @return The found pid. + */ + public static int waitForJvmPid(String key) throws Throwable { + final long iterationSleepMillis = 250; + System.out.println("waitForJvmPid: Waiting for key '" + key + "'"); + System.out.flush(); + while (true) { + int pid = tryFindJvmPid(key); + if (pid >= 0) { + return pid; + } + Thread.sleep(iterationSleepMillis); + } + } + + /** + * Searches for a jvm pid in the output from "jcmd -l". + * + * Example output from jcmd is: + * 12498 sun.tools.jcmd.JCmd -l + * 12254 /tmp/jdk8/tl/jdk/JTwork/classes/com/sun/tools/attach/Application.jar + * + * @param key A regular expression to search for. + * @return The found pid, or -1 if Enot found. + * @throws Exception If multiple matching jvms are found. + */ + public static int tryFindJvmPid(String key) throws Throwable { + OutputAnalyzer output = null; + try { + JDKToolLauncher jcmdLauncher = JDKToolLauncher.create("jcmd"); + jcmdLauncher.addToolArg("-l"); + output = ProcessTools.executeProcess(jcmdLauncher.getCommand()); + output.shouldHaveExitValue(0); + + // Search for a line starting with numbers (pid), follwed by the key. + Pattern pattern = Pattern.compile("([0-9]+)\\s.*(" + key + ").*\\r?\\n"); + Matcher matcher = pattern.matcher(output.getStdout()); + + int pid = -1; + if (matcher.find()) { + pid = Integer.parseInt(matcher.group(1)); + System.out.println("findJvmPid.pid: " + pid); + if (matcher.find()) { + throw new Exception("Found multiple JVM pids for key: " + key); + } + } + return pid; + } catch (Throwable t) { + System.out.println(String.format("Utils.findJvmPid(%s) failed: %s", key, t)); + throw t; + } + } + + /** + * Returns file content as a list of strings + * + * @param file File to operate on + * @return List of strings + * @throws IOException + */ + public static List fileAsList(File file) throws IOException { + assertTrue(file.exists() && file.isFile(), + file.getAbsolutePath() + " does not exist or not a file"); + List output = new ArrayList<>(); + try (BufferedReader reader = new BufferedReader(new FileReader(file.getAbsolutePath()))) { + while (reader.ready()) { + output.add(reader.readLine().replace(NEW_LINE, "")); + } + } + return output; + } + +} From bfb1c4265701bbf4392f8b7ed7df9653d725e514 Mon Sep 17 00:00:00 2001 From: Yumin Qi Date: Wed, 26 Feb 2014 15:20:41 -0800 Subject: [PATCH 009/116] 6498581: ThreadInterruptTest3 produces wrong output on Windows There is race condition between os::interrupt and os::is_interrupted on Windows. In JVM_Sleep(Thread.sleep), check if thread gets interrupted, it may see interrupted but not really interrupted so cause spurious waking up (early return from sleep). Fix by checking if interrupt event really gets set thus prevent false return. For intrinsic of _isInterrupted, on Windows, go fastpath only on bit not set. Co-authored-by: David Holmes Reviewed-by: acorn, kvn --- hotspot/src/os/windows/vm/os_windows.cpp | 5 +++-- hotspot/src/share/vm/opto/library_call.cpp | 8 +++++++- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/hotspot/src/os/windows/vm/os_windows.cpp b/hotspot/src/os/windows/vm/os_windows.cpp index 4cc42970ad0..69fb8bc0600 100644 --- a/hotspot/src/os/windows/vm/os_windows.cpp +++ b/hotspot/src/os/windows/vm/os_windows.cpp @@ -3619,13 +3619,14 @@ bool os::is_interrupted(Thread* thread, bool clear_interrupted) { "possibility of dangling Thread pointer"); OSThread* osthread = thread->osthread(); - bool interrupted = osthread->interrupted(); // There is no synchronization between the setting of the interrupt // and it being cleared here. It is critical - see 6535709 - that // we only clear the interrupt state, and reset the interrupt event, // if we are going to report that we were indeed interrupted - else // an interrupt can be "lost", leading to spurious wakeups or lost wakeups - // depending on the timing + // depending on the timing. By checking thread interrupt event to see + // if the thread gets real interrupt thus prevent spurious wakeup. + bool interrupted = osthread->interrupted() && (WaitForSingleObject(osthread->interrupt_event(), 0) == WAIT_OBJECT_0); if (interrupted && clear_interrupted) { osthread->set_interrupted(false); ResetEvent(osthread->interrupt_event()); diff --git a/hotspot/src/share/vm/opto/library_call.cpp b/hotspot/src/share/vm/opto/library_call.cpp index 465de355b67..f98878a7bad 100644 --- a/hotspot/src/share/vm/opto/library_call.cpp +++ b/hotspot/src/share/vm/opto/library_call.cpp @@ -3246,7 +3246,8 @@ bool LibraryCallKit::inline_native_currentThread() { // private native boolean java.lang.Thread.isInterrupted(boolean ClearInterrupted); bool LibraryCallKit::inline_native_isInterrupted() { // Add a fast path to t.isInterrupted(clear_int): - // (t == Thread.current() && (!TLS._osthread._interrupted || !clear_int)) + // (t == Thread.current() && + // (!TLS._osthread._interrupted || WINDOWS_ONLY(false) NOT_WINDOWS(!clear_int))) // ? TLS._osthread._interrupted : /*slow path:*/ t.isInterrupted(clear_int) // So, in the common case that the interrupt bit is false, // we avoid making a call into the VM. Even if the interrupt bit @@ -3303,6 +3304,7 @@ bool LibraryCallKit::inline_native_isInterrupted() { // drop through to next case set_control( _gvn.transform(new (C) IfTrueNode(iff_bit))); +#ifndef TARGET_OS_FAMILY_windows // (c) Or, if interrupt bit is set and clear_int is false, use 2nd fast path. Node* clr_arg = argument(1); Node* cmp_arg = _gvn.transform(new (C) CmpINode(clr_arg, intcon(0))); @@ -3316,6 +3318,10 @@ bool LibraryCallKit::inline_native_isInterrupted() { // drop through to next case set_control( _gvn.transform(new (C) IfTrueNode(iff_arg))); +#else + // To return true on Windows you must read the _interrupted field + // and check the the event state i.e. take the slow path. +#endif // TARGET_OS_FAMILY_windows // (d) Otherwise, go to the slow path. slow_region->add_req(control()); From 1d81fd35d6b12305a558c101c01a1d46616400ef Mon Sep 17 00:00:00 2001 From: Staffan Larsen Date: Fri, 28 Feb 2014 14:30:25 +0400 Subject: [PATCH 010/116] 8036010: hs: Some jtreg tests use hard coded ports Bind to an ephemeral port Reviewed-by: jbachorik, sla --- hotspot/test/runtime/6294277/SourceDebugExtension.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hotspot/test/runtime/6294277/SourceDebugExtension.java b/hotspot/test/runtime/6294277/SourceDebugExtension.java index e8cc8a8bb50..bb650e673ca 100644 --- a/hotspot/test/runtime/6294277/SourceDebugExtension.java +++ b/hotspot/test/runtime/6294277/SourceDebugExtension.java @@ -25,7 +25,7 @@ * @test * @bug 6294277 * @summary java -Xdebug crashes on SourceDebugExtension attribute larger than 64K - * @run main/othervm -Xdebug -Xrunjdwp:transport=dt_socket,address=8888,server=y,suspend=n SourceDebugExtension + * @run main/othervm -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n SourceDebugExtension */ import java.io.*; From 9bb0f46d009d40362387981fec1d4832805d2dea Mon Sep 17 00:00:00 2001 From: Ivan Gerasimov Date: Fri, 28 Feb 2014 16:00:40 +0400 Subject: [PATCH 011/116] 8035893: JVM_GetVersionInfo fails to zero structure Reviewed-by: sla, zgu --- hotspot/src/share/vm/prims/jvm.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hotspot/src/share/vm/prims/jvm.cpp b/hotspot/src/share/vm/prims/jvm.cpp index 5003db9119a..1c95046c77b 100644 --- a/hotspot/src/share/vm/prims/jvm.cpp +++ b/hotspot/src/share/vm/prims/jvm.cpp @@ -4360,7 +4360,7 @@ JVM_END JVM_ENTRY(void, JVM_GetVersionInfo(JNIEnv* env, jvm_version_info* info, size_t info_size)) { - memset(info, 0, sizeof(info_size)); + memset(info, 0, info_size); info->jvm_version = Abstract_VM_Version::jvm_version(); info->update_version = 0; /* 0 in HotSpot Express VM */ From 791b5d2b0ddee61da87909aa7d252542d1d3a911 Mon Sep 17 00:00:00 2001 From: Serguei Spitsyn Date: Sat, 1 Mar 2014 08:05:55 -0800 Subject: [PATCH 012/116] 6471769: Error: assert(_cur_stack_depth == count_frames(),"cur_stack_depth out of sync") It is more safe to get/update data for suspended threads at a safepoint Reviewed-by: dcubed, twisti, dholmes --- hotspot/src/share/vm/prims/jvmtiEnv.cpp | 30 ++++++++-- hotspot/src/share/vm/prims/jvmtiEnvBase.hpp | 55 +++++++++++++++++++ .../share/vm/prims/jvmtiEnvThreadState.cpp | 36 ++++-------- .../share/vm/prims/jvmtiEventController.cpp | 8 +-- .../src/share/vm/prims/jvmtiThreadState.cpp | 31 ++++------- .../src/share/vm/runtime/vm_operations.hpp | 4 +- 6 files changed, 108 insertions(+), 56 deletions(-) diff --git a/hotspot/src/share/vm/prims/jvmtiEnv.cpp b/hotspot/src/share/vm/prims/jvmtiEnv.cpp index 5aba54b6ca9..6dcf2e1bf95 100644 --- a/hotspot/src/share/vm/prims/jvmtiEnv.cpp +++ b/hotspot/src/share/vm/prims/jvmtiEnv.cpp @@ -1464,7 +1464,19 @@ JvmtiEnv::PopFrame(JavaThread* java_thread) { // It's fine to update the thread state here because no JVMTI events // shall be posted for this PopFrame. - state->update_for_pop_top_frame(); + // It is only safe to perform the direct operation on the current + // thread. All other usage needs to use a vm-safepoint-op for safety. + if (java_thread == JavaThread::current()) { + state->update_for_pop_top_frame(); + } else { + VM_UpdateForPopTopFrame op(state); + VMThread::execute(&op); + jvmtiError err = op.result(); + if (err != JVMTI_ERROR_NONE) { + return err; + } + } + java_thread->set_popframe_condition(JavaThread::popframe_pending_bit); // Set pending step flag for this popframe and it is cleared when next // step event is posted. @@ -1505,6 +1517,7 @@ JvmtiEnv::GetFrameLocation(JavaThread* java_thread, jint depth, jmethodID* metho // depth - pre-checked as non-negative jvmtiError JvmtiEnv::NotifyFramePop(JavaThread* java_thread, jint depth) { + jvmtiError err = JVMTI_ERROR_NONE; ResourceMark rm; uint32_t debug_bits = 0; @@ -1532,10 +1545,17 @@ JvmtiEnv::NotifyFramePop(JavaThread* java_thread, jint depth) { assert(vf->frame_pointer() != NULL, "frame pointer mustn't be NULL"); - int frame_number = state->count_frames() - depth; - state->env_thread_state(this)->set_frame_pop(frame_number); - - return JVMTI_ERROR_NONE; + // It is only safe to perform the direct operation on the current + // thread. All other usage needs to use a vm-safepoint-op for safety. + if (java_thread == JavaThread::current()) { + int frame_number = state->count_frames() - depth; + state->env_thread_state(this)->set_frame_pop(frame_number); + } else { + VM_SetFramePop op(this, state, depth); + VMThread::execute(&op); + err = op.result(); + } + return err; } /* end NotifyFramePop */ diff --git a/hotspot/src/share/vm/prims/jvmtiEnvBase.hpp b/hotspot/src/share/vm/prims/jvmtiEnvBase.hpp index 0f9495945ec..f3c06c30c34 100644 --- a/hotspot/src/share/vm/prims/jvmtiEnvBase.hpp +++ b/hotspot/src/share/vm/prims/jvmtiEnvBase.hpp @@ -29,6 +29,7 @@ #include "prims/jvmtiEnvThreadState.hpp" #include "prims/jvmtiEventController.hpp" #include "prims/jvmtiThreadState.hpp" +#include "prims/jvmtiThreadState.inline.hpp" #include "runtime/fieldDescriptor.hpp" #include "runtime/frame.hpp" #include "runtime/handles.inline.hpp" @@ -334,6 +335,60 @@ class JvmtiEnvIterator : public StackObj { JvmtiEnv* next(JvmtiEnvBase* env) { return env->next_environment(); } }; +// VM operation to update for pop top frame. +class VM_UpdateForPopTopFrame : public VM_Operation { +private: + JvmtiThreadState* _state; + jvmtiError _result; + +public: + VM_UpdateForPopTopFrame(JvmtiThreadState* state) { + _state = state; + _result = JVMTI_ERROR_NONE; + } + VMOp_Type type() const { return VMOp_UpdateForPopTopFrame; } + jvmtiError result() { return _result; } + void doit() { + JavaThread* jt = _state->get_thread(); + if (Threads::includes(jt) && !jt->is_exiting() && jt->threadObj() != NULL) { + _state->update_for_pop_top_frame(); + } else { + _result = JVMTI_ERROR_THREAD_NOT_ALIVE; + } + } +}; + +// VM operation to set frame pop. +class VM_SetFramePop : public VM_Operation { +private: + JvmtiEnv *_env; + JvmtiThreadState* _state; + jint _depth; + jvmtiError _result; + +public: + VM_SetFramePop(JvmtiEnv *env, JvmtiThreadState* state, jint depth) { + _env = env; + _state = state; + _depth = depth; + _result = JVMTI_ERROR_NONE; + } + // Nested operation must be allowed for the VM_EnterInterpOnlyMode that is + // called from the JvmtiEventControllerPrivate::recompute_thread_enabled. + bool allow_nested_vm_operations() const { return true; } + VMOp_Type type() const { return VMOp_SetFramePop; } + jvmtiError result() { return _result; } + void doit() { + JavaThread* jt = _state->get_thread(); + if (Threads::includes(jt) && !jt->is_exiting() && jt->threadObj() != NULL) { + int frame_number = _state->count_frames() - _depth; + _state->env_thread_state((JvmtiEnvBase*)_env)->set_frame_pop(frame_number); + } else { + _result = JVMTI_ERROR_THREAD_NOT_ALIVE; + } + } +}; + // VM operation to get monitor information with stack depth. class VM_GetOwnedMonitorInfo : public VM_Operation { diff --git a/hotspot/src/share/vm/prims/jvmtiEnvThreadState.cpp b/hotspot/src/share/vm/prims/jvmtiEnvThreadState.cpp index ab3c5f445b3..3b290af1a0d 100644 --- a/hotspot/src/share/vm/prims/jvmtiEnvThreadState.cpp +++ b/hotspot/src/share/vm/prims/jvmtiEnvThreadState.cpp @@ -190,12 +190,8 @@ void JvmtiEnvThreadState::compare_and_set_current_location(Method* new_method, JvmtiFramePops* JvmtiEnvThreadState::get_frame_pops() { -#ifdef ASSERT - uint32_t debug_bits = 0; -#endif - assert(get_thread() == Thread::current() || JvmtiEnv::is_thread_fully_suspended(get_thread(), false, &debug_bits), - "frame pop data only accessible from same thread or while suspended"); - + assert(get_thread() == Thread::current() || SafepointSynchronize::is_at_safepoint(), + "frame pop data only accessible from same thread or at safepoint"); if (_frame_pops == NULL) { _frame_pops = new JvmtiFramePops(); assert(_frame_pops != NULL, "_frame_pops != NULL"); @@ -209,44 +205,32 @@ bool JvmtiEnvThreadState::has_frame_pops() { } void JvmtiEnvThreadState::set_frame_pop(int frame_number) { -#ifdef ASSERT - uint32_t debug_bits = 0; -#endif - assert(get_thread() == Thread::current() || JvmtiEnv::is_thread_fully_suspended(get_thread(), false, &debug_bits), - "frame pop data only accessible from same thread or while suspended"); + assert(get_thread() == Thread::current() || SafepointSynchronize::is_at_safepoint(), + "frame pop data only accessible from same thread or at safepoint"); JvmtiFramePop fpop(frame_number); JvmtiEventController::set_frame_pop(this, fpop); } void JvmtiEnvThreadState::clear_frame_pop(int frame_number) { -#ifdef ASSERT - uint32_t debug_bits = 0; -#endif - assert(get_thread() == Thread::current() || JvmtiEnv::is_thread_fully_suspended(get_thread(), false, &debug_bits), - "frame pop data only accessible from same thread or while suspended"); + assert(get_thread() == Thread::current() || SafepointSynchronize::is_at_safepoint(), + "frame pop data only accessible from same thread or at safepoint"); JvmtiFramePop fpop(frame_number); JvmtiEventController::clear_frame_pop(this, fpop); } void JvmtiEnvThreadState::clear_to_frame_pop(int frame_number) { -#ifdef ASSERT - uint32_t debug_bits = 0; -#endif - assert(get_thread() == Thread::current() || JvmtiEnv::is_thread_fully_suspended(get_thread(), false, &debug_bits), - "frame pop data only accessible from same thread or while suspended"); + assert(get_thread() == Thread::current() || SafepointSynchronize::is_at_safepoint(), + "frame pop data only accessible from same thread or at safepoint"); JvmtiFramePop fpop(frame_number); JvmtiEventController::clear_to_frame_pop(this, fpop); } bool JvmtiEnvThreadState::is_frame_pop(int cur_frame_number) { -#ifdef ASSERT - uint32_t debug_bits = 0; -#endif - assert(get_thread() == Thread::current() || JvmtiEnv::is_thread_fully_suspended(get_thread(), false, &debug_bits), - "frame pop data only accessible from same thread or while suspended"); + assert(get_thread() == Thread::current() || SafepointSynchronize::is_at_safepoint(), + "frame pop data only accessible from same thread or at safepoint"); if (!get_thread()->is_interp_only_mode() || _frame_pops == NULL) { return false; } diff --git a/hotspot/src/share/vm/prims/jvmtiEventController.cpp b/hotspot/src/share/vm/prims/jvmtiEventController.cpp index 52bfb1f7632..dff9989736e 100644 --- a/hotspot/src/share/vm/prims/jvmtiEventController.cpp +++ b/hotspot/src/share/vm/prims/jvmtiEventController.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -989,21 +989,21 @@ JvmtiEventController::set_extension_event_callback(JvmtiEnvBase *env, void JvmtiEventController::set_frame_pop(JvmtiEnvThreadState *ets, JvmtiFramePop fpop) { - MutexLocker mu(JvmtiThreadState_lock); + MutexLockerEx mu(SafepointSynchronize::is_at_safepoint() ? NULL : JvmtiThreadState_lock); JvmtiEventControllerPrivate::set_frame_pop(ets, fpop); } void JvmtiEventController::clear_frame_pop(JvmtiEnvThreadState *ets, JvmtiFramePop fpop) { - MutexLocker mu(JvmtiThreadState_lock); + MutexLockerEx mu(SafepointSynchronize::is_at_safepoint() ? NULL : JvmtiThreadState_lock); JvmtiEventControllerPrivate::clear_frame_pop(ets, fpop); } void JvmtiEventController::clear_to_frame_pop(JvmtiEnvThreadState *ets, JvmtiFramePop fpop) { - MutexLocker mu(JvmtiThreadState_lock); + MutexLockerEx mu(SafepointSynchronize::is_at_safepoint() ? NULL : JvmtiThreadState_lock); JvmtiEventControllerPrivate::clear_to_frame_pop(ets, fpop); } diff --git a/hotspot/src/share/vm/prims/jvmtiThreadState.cpp b/hotspot/src/share/vm/prims/jvmtiThreadState.cpp index 34b5bdc8f44..42f4854bd89 100644 --- a/hotspot/src/share/vm/prims/jvmtiThreadState.cpp +++ b/hotspot/src/share/vm/prims/jvmtiThreadState.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -63,6 +63,7 @@ JvmtiThreadState::JvmtiThreadState(JavaThread* thread) _vm_object_alloc_event_collector = NULL; _the_class_for_redefinition_verification = NULL; _scratch_class_for_redefinition_verification = NULL; + _cur_stack_depth = UNKNOWN_STACK_DEPTH; // JVMTI ForceEarlyReturn support _pending_step_for_earlyret = false; @@ -213,12 +214,9 @@ void JvmtiThreadState::leave_interp_only_mode() { // Helper routine used in several places int JvmtiThreadState::count_frames() { -#ifdef ASSERT - uint32_t debug_bits = 0; -#endif - assert(SafepointSynchronize::is_at_safepoint() || - JvmtiEnv::is_thread_fully_suspended(get_thread(), false, &debug_bits), - "at safepoint or must be suspended"); + guarantee(SafepointSynchronize::is_at_safepoint() || + (JavaThread *)Thread::current() == get_thread(), + "must be current thread or at safepoint"); if (!get_thread()->has_last_Java_frame()) return 0; // no Java frames @@ -243,15 +241,9 @@ int JvmtiThreadState::count_frames() { void JvmtiThreadState::invalidate_cur_stack_depth() { - Thread *cur = Thread::current(); - uint32_t debug_bits = 0; - - // The caller can be the VMThread at a safepoint, the current thread - // or the target thread must be suspended. - guarantee((cur->is_VM_thread() && SafepointSynchronize::is_at_safepoint()) || - (JavaThread *)cur == get_thread() || - JvmtiEnv::is_thread_fully_suspended(get_thread(), false, &debug_bits), - "sanity check"); + guarantee(SafepointSynchronize::is_at_safepoint() || + (JavaThread *)Thread::current() == get_thread(), + "must be current thread or at safepoint"); _cur_stack_depth = UNKNOWN_STACK_DEPTH; } @@ -280,10 +272,9 @@ void JvmtiThreadState::decr_cur_stack_depth() { } int JvmtiThreadState::cur_stack_depth() { - uint32_t debug_bits = 0; - guarantee(JavaThread::current() == get_thread() || - JvmtiEnv::is_thread_fully_suspended(get_thread(), false, &debug_bits), - "must be current thread or suspended"); + guarantee(SafepointSynchronize::is_at_safepoint() || + (JavaThread *)Thread::current() == get_thread(), + "must be current thread or at safepoint"); if (!is_interp_only_mode() || _cur_stack_depth == UNKNOWN_STACK_DEPTH) { _cur_stack_depth = count_frames(); diff --git a/hotspot/src/share/vm/runtime/vm_operations.hpp b/hotspot/src/share/vm/runtime/vm_operations.hpp index 005fc11780b..a3a58e4d4c3 100644 --- a/hotspot/src/share/vm/runtime/vm_operations.hpp +++ b/hotspot/src/share/vm/runtime/vm_operations.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -74,6 +74,8 @@ template(PopulateDumpSharedSpace) \ template(JNIFunctionTableCopier) \ template(RedefineClasses) \ + template(UpdateForPopTopFrame) \ + template(SetFramePop) \ template(GetOwnedMonitorInfo) \ template(GetObjectMonitorUsage) \ template(GetCurrentContendedMonitor) \ From 4482a30c613d457ddb1dcc66a56521bfba7d03e0 Mon Sep 17 00:00:00 2001 From: Dmitry Samersoff Date: Sat, 1 Mar 2014 09:56:15 -0800 Subject: [PATCH 013/116] 8036102: part of the fix for 6498581 lost in mismerge Restore code lost in mis-merge Reviewed-by: dcubed --- hotspot/src/share/vm/opto/library_call.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/hotspot/src/share/vm/opto/library_call.cpp b/hotspot/src/share/vm/opto/library_call.cpp index 73c6e9090f9..bd2ef020bb2 100644 --- a/hotspot/src/share/vm/opto/library_call.cpp +++ b/hotspot/src/share/vm/opto/library_call.cpp @@ -3180,7 +3180,8 @@ bool LibraryCallKit::inline_native_currentThread() { // private native boolean java.lang.Thread.isInterrupted(boolean ClearInterrupted); bool LibraryCallKit::inline_native_isInterrupted() { // Add a fast path to t.isInterrupted(clear_int): - // (t == Thread.current() && (!TLS._osthread._interrupted || !clear_int)) + // (t == Thread.current() && + // (!TLS._osthread._interrupted || WINDOWS_ONLY(false) NOT_WINDOWS(!clear_int))) // ? TLS._osthread._interrupted : /*slow path:*/ t.isInterrupted(clear_int) // So, in the common case that the interrupt bit is false, // we avoid making a call into the VM. Even if the interrupt bit @@ -3237,6 +3238,7 @@ bool LibraryCallKit::inline_native_isInterrupted() { // drop through to next case set_control( _gvn.transform(new (C) IfTrueNode(iff_bit))); +#ifndef TARGET_OS_FAMILY_windows // (c) Or, if interrupt bit is set and clear_int is false, use 2nd fast path. Node* clr_arg = argument(1); Node* cmp_arg = _gvn.transform(new (C) CmpINode(clr_arg, intcon(0))); @@ -3250,6 +3252,10 @@ bool LibraryCallKit::inline_native_isInterrupted() { // drop through to next case set_control( _gvn.transform(new (C) IfTrueNode(iff_arg))); +#else + // To return true on Windows you must read the _interrupted field + // and check the the event state i.e. take the slow path. +#endif // TARGET_OS_FAMILY_windows // (d) Otherwise, go to the slow path. slow_region->add_req(control()); From e8d4b7aee3a4f35508353e67c7c05a77ca020924 Mon Sep 17 00:00:00 2001 From: Coleen Phillimore Date: Tue, 4 Mar 2014 09:57:16 -0500 Subject: [PATCH 014/116] 8036547: test/runtime/CompressedOops/CompressedClassPointers.java fails with product build since -XX:+PrintMiscellaneous is a debug only flag Use PrintCompressedOopsMode and these other flags that match printing compressed oop information Reviewed-by: ctornqvi, sla --- hotspot/src/share/vm/runtime/arguments.cpp | 3 ++- .../test/runtime/CompressedOops/CompressedClassPointers.java | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/hotspot/src/share/vm/runtime/arguments.cpp b/hotspot/src/share/vm/runtime/arguments.cpp index 1e02bf0cad8..c6549f88665 100644 --- a/hotspot/src/share/vm/runtime/arguments.cpp +++ b/hotspot/src/share/vm/runtime/arguments.cpp @@ -1699,7 +1699,8 @@ void Arguments::set_heap_size() { // HeapBaseMinAddress can be greater than default but not less than. if (!FLAG_IS_DEFAULT(HeapBaseMinAddress)) { if (HeapBaseMinAddress < DefaultHeapBaseMinAddress) { - if (PrintMiscellaneous && Verbose) { // matches compressed oops printing flags + // matches compressed oops printing flags + if (PrintCompressedOopsMode || (PrintMiscellaneous && Verbose)) { jio_fprintf(defaultStream::error_stream(), "HeapBaseMinAddress must be at least " UINTX_FORMAT " (" UINTX_FORMAT "G) which is greater than value given " diff --git a/hotspot/test/runtime/CompressedOops/CompressedClassPointers.java b/hotspot/test/runtime/CompressedOops/CompressedClassPointers.java index e801d5b87df..bb68a6ff074 100644 --- a/hotspot/test/runtime/CompressedOops/CompressedClassPointers.java +++ b/hotspot/test/runtime/CompressedOops/CompressedClassPointers.java @@ -83,8 +83,8 @@ public class CompressedClassPointers { public static void heapBaseMinAddressTest() throws Exception { ProcessBuilder pb = ProcessTools.createJavaProcessBuilder( "-XX:HeapBaseMinAddress=1m", - "-XX:+PrintMiscellaneous", - "-XX:+Verbose", + "-XX:+UnlockDiagnosticVMOptions", + "-XX:+PrintCompressedOopsMode", "-version"); OutputAnalyzer output = new OutputAnalyzer(pb.start()); output.shouldContain("HeapBaseMinAddress must be at least"); From 4b9933a0120150e5d7f51de791d11c08507e23d5 Mon Sep 17 00:00:00 2001 From: Goetz Lindenmaier Date: Mon, 3 Mar 2014 11:54:35 +0100 Subject: [PATCH 015/116] 8036122: Fix warning 'format not a string literal' Reviewed-by: mduigou, kvn --- hotspot/make/bsd/makefiles/gcc.make | 2 +- hotspot/make/linux/makefiles/gcc.make | 2 +- hotspot/make/solaris/makefiles/gcc.make | 2 +- hotspot/src/os/linux/vm/os_linux.cpp | 6 ++--- .../src/share/vm/compiler/compilerOracle.cpp | 27 +++---------------- 5 files changed, 10 insertions(+), 29 deletions(-) diff --git a/hotspot/make/bsd/makefiles/gcc.make b/hotspot/make/bsd/makefiles/gcc.make index 9c9cef07f82..2a0eab17ef9 100644 --- a/hotspot/make/bsd/makefiles/gcc.make +++ b/hotspot/make/bsd/makefiles/gcc.make @@ -260,7 +260,7 @@ ifeq ($(USE_CLANG), true) WARNINGS_ARE_ERRORS += -Wno-empty-body endif -WARNING_FLAGS = -Wpointer-arith -Wsign-compare -Wundef -Wunused-function -Wformat=2 -Wno-error=format-nonliteral +WARNING_FLAGS = -Wpointer-arith -Wsign-compare -Wundef -Wunused-function -Wformat=2 ifeq ($(USE_CLANG),) # Since GCC 4.3, -Wconversion has changed its meanings to warn these implicit diff --git a/hotspot/make/linux/makefiles/gcc.make b/hotspot/make/linux/makefiles/gcc.make index 071c36e5876..87ef16faed8 100644 --- a/hotspot/make/linux/makefiles/gcc.make +++ b/hotspot/make/linux/makefiles/gcc.make @@ -215,7 +215,7 @@ ifeq ($(USE_CLANG), true) WARNINGS_ARE_ERRORS += -Wno-return-type -Wno-empty-body endif -WARNING_FLAGS = -Wpointer-arith -Wsign-compare -Wundef -Wunused-function -Wunused-value -Wformat=2 -Wno-error=format-nonliteral +WARNING_FLAGS = -Wpointer-arith -Wsign-compare -Wundef -Wunused-function -Wunused-value -Wformat=2 ifeq ($(USE_CLANG),) # Since GCC 4.3, -Wconversion has changed its meanings to warn these implicit diff --git a/hotspot/make/solaris/makefiles/gcc.make b/hotspot/make/solaris/makefiles/gcc.make index 627691c78f3..94778592ece 100644 --- a/hotspot/make/solaris/makefiles/gcc.make +++ b/hotspot/make/solaris/makefiles/gcc.make @@ -118,7 +118,7 @@ endif # Compiler warnings are treated as errors WARNINGS_ARE_ERRORS = -Werror # Enable these warnings. See 'info gcc' about details on these options -WARNING_FLAGS = -Wpointer-arith -Wconversion -Wsign-compare -Wundef -Wformat=2 -Wno-error=format-nonliteral +WARNING_FLAGS = -Wpointer-arith -Wconversion -Wsign-compare -Wundef -Wformat=2 CFLAGS_WARN/DEFAULT = $(WARNINGS_ARE_ERRORS) $(WARNING_FLAGS) # Special cases CFLAGS_WARN/BYFILE = $(CFLAGS_WARN/$@)$(CFLAGS_WARN/DEFAULT$(CFLAGS_WARN/$@)) diff --git a/hotspot/src/os/linux/vm/os_linux.cpp b/hotspot/src/os/linux/vm/os_linux.cpp index 4490c5f2f71..20ef1e10fb4 100644 --- a/hotspot/src/os/linux/vm/os_linux.cpp +++ b/hotspot/src/os/linux/vm/os_linux.cpp @@ -5284,7 +5284,6 @@ jlong os::thread_cpu_time(Thread *thread, bool user_sys_cpu_time) { static jlong slow_thread_cpu_time(Thread *thread, bool user_sys_cpu_time) { static bool proc_task_unchecked = true; - static const char *proc_stat_path = "/proc/%d/stat"; pid_t tid = thread->osthread()->thread_id(); char *s; char stat[2048]; @@ -5297,6 +5296,8 @@ static jlong slow_thread_cpu_time(Thread *thread, bool user_sys_cpu_time) { long ldummy; FILE *fp; + snprintf(proc_name, 64, "/proc/%d/stat", tid); + // The /proc//stat aggregates per-process usage on // new Linux kernels 2.6+ where NPTL is supported. // The /proc/self/task//stat still has the per-thread usage. @@ -5308,12 +5309,11 @@ static jlong slow_thread_cpu_time(Thread *thread, bool user_sys_cpu_time) { proc_task_unchecked = false; fp = fopen("/proc/self/task", "r"); if (fp != NULL) { - proc_stat_path = "/proc/self/task/%d/stat"; + snprintf(proc_name, 64, "/proc/self/task/%d/stat", tid); fclose(fp); } } - sprintf(proc_name, proc_stat_path, tid); fp = fopen(proc_name, "r"); if ( fp == NULL ) return -1; statlen = fread(stat, 1, 2047, fp); diff --git a/hotspot/src/share/vm/compiler/compilerOracle.cpp b/hotspot/src/share/vm/compiler/compilerOracle.cpp index cb5068dc4c6..582ec675d4d 100644 --- a/hotspot/src/share/vm/compiler/compilerOracle.cpp +++ b/hotspot/src/share/vm/compiler/compilerOracle.cpp @@ -374,25 +374,8 @@ static void usage() { "\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff" #define RANGE0 "[*" RANGEBASE "]" -#define RANGEDOT "[*" RANGEBASE ".]" #define RANGESLASH "[*" RANGEBASE "/]" - -// Accept several syntaxes for these patterns -// original syntax -// cmd java.lang.String foo -// PrintCompilation syntax -// cmd java.lang.String::foo -// VM syntax -// cmd java/lang/String[. ]foo -// - -static const char* patterns[] = { - "%*[ \t]%255" RANGEDOT " " "%255" RANGE0 "%n", - "%*[ \t]%255" RANGEDOT "::" "%255" RANGE0 "%n", - "%*[ \t]%255" RANGESLASH "%*[ .]" "%255" RANGE0 "%n", -}; - static MethodMatcher::Mode check_mode(char name[], const char*& error_msg) { int match = MethodMatcher::Exact; while (name[0] == '*') { @@ -421,12 +404,10 @@ static bool scan_line(const char * line, int* bytes_read, const char*& error_msg) { *bytes_read = 0; error_msg = NULL; - for (uint i = 0; i < ARRAY_SIZE(patterns); i++) { - if (2 == sscanf(line, patterns[i], class_name, method_name, bytes_read)) { - *c_mode = check_mode(class_name, error_msg); - *m_mode = check_mode(method_name, error_msg); - return *c_mode != MethodMatcher::Unknown && *m_mode != MethodMatcher::Unknown; - } + if (2 == sscanf(line, "%*[ \t]%255" RANGESLASH "%*[ ]" "%255" RANGE0 "%n", class_name, method_name, bytes_read)) { + *c_mode = check_mode(class_name, error_msg); + *m_mode = check_mode(method_name, error_msg); + return *c_mode != MethodMatcher::Unknown && *m_mode != MethodMatcher::Unknown; } return false; } From c4bd0f58d316bafe4cb670d09ee932e79c1ae929 Mon Sep 17 00:00:00 2001 From: Aleksey Shipilev Date: Mon, 3 Mar 2014 15:54:45 +0400 Subject: [PATCH 016/116] 8033380: Experimental VM flag to enforce access atomicity -XX:+AlwaysAtomicAccesses to unconditionally enforce the access atomicity. Reviewed-by: roland, kvn, iveresov --- hotspot/src/share/vm/c1/c1_LIRGenerator.cpp | 6 ++-- hotspot/src/share/vm/c1/c1_Runtime1.cpp | 34 ++++++++++++++++----- hotspot/src/share/vm/opto/parse3.cpp | 6 ++-- hotspot/src/share/vm/runtime/globals.hpp | 3 ++ 4 files changed, 37 insertions(+), 12 deletions(-) diff --git a/hotspot/src/share/vm/c1/c1_LIRGenerator.cpp b/hotspot/src/share/vm/c1/c1_LIRGenerator.cpp index 5ed04765618..ca8383b2542 100644 --- a/hotspot/src/share/vm/c1/c1_LIRGenerator.cpp +++ b/hotspot/src/share/vm/c1/c1_LIRGenerator.cpp @@ -1734,7 +1734,8 @@ void LIRGenerator::do_StoreField(StoreField* x) { (info ? new CodeEmitInfo(info) : NULL)); } - if (is_volatile && !needs_patching) { + bool needs_atomic_access = is_volatile || AlwaysAtomicAccesses; + if (needs_atomic_access && !needs_patching) { volatile_field_store(value.result(), address, info); } else { LIR_PatchCode patch_code = needs_patching ? lir_patch_normal : lir_patch_none; @@ -1807,7 +1808,8 @@ void LIRGenerator::do_LoadField(LoadField* x) { address = generate_address(object.result(), x->offset(), field_type); } - if (is_volatile && !needs_patching) { + bool needs_atomic_access = is_volatile || AlwaysAtomicAccesses; + if (needs_atomic_access && !needs_patching) { volatile_field_load(address, reg, info); } else { LIR_PatchCode patch_code = needs_patching ? lir_patch_normal : lir_patch_none; diff --git a/hotspot/src/share/vm/c1/c1_Runtime1.cpp b/hotspot/src/share/vm/c1/c1_Runtime1.cpp index e3bac09c5b4..11542c4a50b 100644 --- a/hotspot/src/share/vm/c1/c1_Runtime1.cpp +++ b/hotspot/src/share/vm/c1/c1_Runtime1.cpp @@ -809,11 +809,10 @@ JRT_ENTRY(void, Runtime1::patch_code(JavaThread* thread, Runtime1::StubID stub_i int bci = vfst.bci(); Bytecodes::Code code = caller_method()->java_code_at(bci); -#ifndef PRODUCT // this is used by assertions in the access_field_patching_id BasicType patch_field_type = T_ILLEGAL; -#endif // PRODUCT bool deoptimize_for_volatile = false; + bool deoptimize_for_atomic = false; int patch_field_offset = -1; KlassHandle init_klass(THREAD, NULL); // klass needed by load_klass_patching code KlassHandle load_klass(THREAD, NULL); // klass needed by load_klass_patching code @@ -839,11 +838,24 @@ JRT_ENTRY(void, Runtime1::patch_code(JavaThread* thread, Runtime1::StubID stub_i // is the path for patching field offsets. load_klass is only // used for patching references to oops which don't need special // handling in the volatile case. + deoptimize_for_volatile = result.access_flags().is_volatile(); -#ifndef PRODUCT + // If we are patching a field which should be atomic, then + // the generated code is not correct either, force deoptimizing. + // We need to only cover T_LONG and T_DOUBLE fields, as we can + // break access atomicity only for them. + + // Strictly speaking, the deoptimizaation on 64-bit platforms + // is unnecessary, and T_LONG stores on 32-bit platforms need + // to be handled by special patching code when AlwaysAtomicAccesses + // becomes product feature. At this point, we are still going + // for the deoptimization for consistency against volatile + // accesses. + patch_field_type = result.field_type(); -#endif + deoptimize_for_atomic = (AlwaysAtomicAccesses && (patch_field_type == T_DOUBLE || patch_field_type == T_LONG)); + } else if (load_klass_or_mirror_patch_id) { Klass* k = NULL; switch (code) { @@ -918,13 +930,19 @@ JRT_ENTRY(void, Runtime1::patch_code(JavaThread* thread, Runtime1::StubID stub_i ShouldNotReachHere(); } - if (deoptimize_for_volatile) { - // At compile time we assumed the field wasn't volatile but after - // loading it turns out it was volatile so we have to throw the + if (deoptimize_for_volatile || deoptimize_for_atomic) { + // At compile time we assumed the field wasn't volatile/atomic but after + // loading it turns out it was volatile/atomic so we have to throw the // compiled code out and let it be regenerated. if (TracePatching) { - tty->print_cr("Deoptimizing for patching volatile field reference"); + if (deoptimize_for_volatile) { + tty->print_cr("Deoptimizing for patching volatile field reference"); + } + if (deoptimize_for_atomic) { + tty->print_cr("Deoptimizing for patching atomic field reference"); + } } + // It's possible the nmethod was invalidated in the last // safepoint, but if it's still alive then make it not_entrant. nmethod* nm = CodeCache::find_nmethod(caller_frame.pc()); diff --git a/hotspot/src/share/vm/opto/parse3.cpp b/hotspot/src/share/vm/opto/parse3.cpp index 466e1ca3b90..0e3eddde236 100644 --- a/hotspot/src/share/vm/opto/parse3.cpp +++ b/hotspot/src/share/vm/opto/parse3.cpp @@ -233,7 +233,8 @@ void Parse::do_get_xxx(Node* obj, ciField* field, bool is_field) { // Build the load. // MemNode::MemOrd mo = is_vol ? MemNode::acquire : MemNode::unordered; - Node* ld = make_load(NULL, adr, type, bt, adr_type, mo, is_vol); + bool needs_atomic_access = is_vol || AlwaysAtomicAccesses; + Node* ld = make_load(NULL, adr, type, bt, adr_type, mo, needs_atomic_access); // Adjust Java stack if (type2size[bt] == 1) @@ -314,7 +315,8 @@ void Parse::do_put_xxx(Node* obj, ciField* field, bool is_field) { } store = store_oop_to_object(control(), obj, adr, adr_type, val, field_type, bt, mo); } else { - store = store_to_memory(control(), adr, val, bt, adr_type, mo, is_vol); + bool needs_atomic_access = is_vol || AlwaysAtomicAccesses; + store = store_to_memory(control(), adr, val, bt, adr_type, mo, needs_atomic_access); } // If reference is volatile, prevent following volatiles ops from diff --git a/hotspot/src/share/vm/runtime/globals.hpp b/hotspot/src/share/vm/runtime/globals.hpp index b971907b980..a9eb5a1176e 100644 --- a/hotspot/src/share/vm/runtime/globals.hpp +++ b/hotspot/src/share/vm/runtime/globals.hpp @@ -3864,6 +3864,9 @@ class CommandLineFlags { "Allocation less than this value will be allocated " \ "using malloc. Larger allocations will use mmap.") \ \ + experimental(bool, AlwaysAtomicAccesses, false, \ + "Accesses to all variables should always be atomic") \ + \ product(bool, EnableTracing, false, \ "Enable event-based tracing") \ \ From 1d10b6813e2749cf1b0c073aac43f5d7b4c4209e Mon Sep 17 00:00:00 2001 From: Aleksey Shipilev Date: Mon, 3 Mar 2014 15:31:27 +0400 Subject: [PATCH 017/116] 8031818: Experimental VM flag for enforcing safe object construction -XX:+AlwaysSafeConstructors to unconditionally emit the trailing constructor barrier. Reviewed-by: kvn, roland --- hotspot/src/share/vm/c1/c1_GraphBuilder.cpp | 6 +- hotspot/src/share/vm/c1/c1_IR.cpp | 1 + hotspot/src/share/vm/c1/c1_IR.hpp | 4 ++ hotspot/src/share/vm/opto/parse.hpp | 6 ++ hotspot/src/share/vm/opto/parse1.cpp | 64 ++++++++++++++------- hotspot/src/share/vm/opto/parse3.cpp | 12 +++- hotspot/src/share/vm/runtime/globals.hpp | 3 + 7 files changed, 74 insertions(+), 22 deletions(-) diff --git a/hotspot/src/share/vm/c1/c1_GraphBuilder.cpp b/hotspot/src/share/vm/c1/c1_GraphBuilder.cpp index 7cb6d3dfa47..389eaf29b47 100644 --- a/hotspot/src/share/vm/c1/c1_GraphBuilder.cpp +++ b/hotspot/src/share/vm/c1/c1_GraphBuilder.cpp @@ -1436,7 +1436,7 @@ void GraphBuilder::method_return(Value x) { bool need_mem_bar = false; if (method()->name() == ciSymbol::object_initializer_name() && - scope()->wrote_final()) { + (scope()->wrote_final() || (AlwaysSafeConstructors && scope()->wrote_fields()))) { need_mem_bar = true; } @@ -1550,6 +1550,10 @@ void GraphBuilder::access_field(Bytecodes::Code code) { scope()->set_wrote_final(); } + if (code == Bytecodes::_putfield) { + scope()->set_wrote_fields(); + } + const int offset = !needs_patching ? field->offset() : -1; switch (code) { case Bytecodes::_getstatic: { diff --git a/hotspot/src/share/vm/c1/c1_IR.cpp b/hotspot/src/share/vm/c1/c1_IR.cpp index c377e56ecef..b2a4fbbc494 100644 --- a/hotspot/src/share/vm/c1/c1_IR.cpp +++ b/hotspot/src/share/vm/c1/c1_IR.cpp @@ -142,6 +142,7 @@ IRScope::IRScope(Compilation* compilation, IRScope* caller, int caller_bci, ciMe _number_of_locks = 0; _monitor_pairing_ok = method->has_balanced_monitors(); _wrote_final = false; + _wrote_fields = false; _start = NULL; if (osr_bci == -1) { diff --git a/hotspot/src/share/vm/c1/c1_IR.hpp b/hotspot/src/share/vm/c1/c1_IR.hpp index ba1abee0d01..6dc0e3a98bd 100644 --- a/hotspot/src/share/vm/c1/c1_IR.hpp +++ b/hotspot/src/share/vm/c1/c1_IR.hpp @@ -150,6 +150,7 @@ class IRScope: public CompilationResourceObj { int _number_of_locks; // the number of monitor lock slots needed bool _monitor_pairing_ok; // the monitor pairing info bool _wrote_final; // has written final field + bool _wrote_fields; // has written fields BlockBegin* _start; // the start block, successsors are method entries BitMap _requires_phi_function; // bit is set if phi functions at loop headers are necessary for a local variable @@ -184,6 +185,9 @@ class IRScope: public CompilationResourceObj { BlockBegin* start() const { return _start; } void set_wrote_final() { _wrote_final = true; } bool wrote_final () const { return _wrote_final; } + void set_wrote_fields() { _wrote_fields = true; } + bool wrote_fields () const { return _wrote_fields; } + }; diff --git a/hotspot/src/share/vm/opto/parse.hpp b/hotspot/src/share/vm/opto/parse.hpp index cca8a8b6c3c..092e40a7f64 100644 --- a/hotspot/src/share/vm/opto/parse.hpp +++ b/hotspot/src/share/vm/opto/parse.hpp @@ -338,6 +338,8 @@ class Parse : public GraphKit { GraphKit _exits; // Record all normal returns and throws here. bool _wrote_final; // Did we write a final field? bool _wrote_volatile; // Did we write a volatile field? + bool _wrote_stable; // Did we write a @Stable field? + bool _wrote_fields; // Did we write any field? bool _count_invocations; // update and test invocation counter bool _method_data_update; // update method data oop Node* _alloc_with_final; // An allocation node with final field @@ -383,6 +385,10 @@ class Parse : public GraphKit { void set_wrote_final(bool z) { _wrote_final = z; } bool wrote_volatile() const { return _wrote_volatile; } void set_wrote_volatile(bool z) { _wrote_volatile = z; } + bool wrote_stable() const { return _wrote_stable; } + void set_wrote_stable(bool z) { _wrote_stable = z; } + bool wrote_fields() const { return _wrote_fields; } + void set_wrote_fields(bool z) { _wrote_fields = z; } bool count_invocations() const { return _count_invocations; } bool method_data_update() const { return _method_data_update; } Node* alloc_with_final() const { return _alloc_with_final; } diff --git a/hotspot/src/share/vm/opto/parse1.cpp b/hotspot/src/share/vm/opto/parse1.cpp index 74b1f1a4ac8..db50f98492b 100644 --- a/hotspot/src/share/vm/opto/parse1.cpp +++ b/hotspot/src/share/vm/opto/parse1.cpp @@ -391,6 +391,8 @@ Parse::Parse(JVMState* caller, ciMethod* parse_method, float expected_uses, Pars _depth = 1 + (caller->has_method() ? caller->depth() : 0); _wrote_final = false; _wrote_volatile = false; + _wrote_stable = false; + _wrote_fields = false; _alloc_with_final = NULL; _entry_bci = InvocationEntryBci; _tf = NULL; @@ -908,26 +910,35 @@ void Parse::do_exits() { Node* iophi = _exits.i_o(); _exits.set_i_o(gvn().transform(iophi)); - // On PPC64, also add MemBarRelease for constructors which write - // volatile fields. As support_IRIW_for_not_multiple_copy_atomic_cpu - // is set on PPC64, no sync instruction is issued after volatile - // stores. We want to quarantee the same behaviour as on platforms - // with total store order, although this is not required by the Java - // memory model. So as with finals, we add a barrier here. - if (wrote_final() PPC64_ONLY(|| (wrote_volatile() && method()->is_initializer()))) { - // This method (which must be a constructor by the rules of Java) - // wrote a final. The effects of all initializations must be - // committed to memory before any code after the constructor - // publishes the reference to the newly constructor object. - // Rather than wait for the publication, we simply block the - // writes here. Rather than put a barrier on only those writes - // which are required to complete, we force all writes to complete. - // - // "All bets are off" unless the first publication occurs after a - // normal return from the constructor. We do not attempt to detect - // such unusual early publications. But no barrier is needed on - // exceptional returns, since they cannot publish normally. - // + // Figure out if we need to emit the trailing barrier. The barrier is only + // needed in the constructors, and only in three cases: + // + // 1. The constructor wrote a final. The effects of all initializations + // must be committed to memory before any code after the constructor + // publishes the reference to the newly constructed object. Rather + // than wait for the publication, we simply block the writes here. + // Rather than put a barrier on only those writes which are required + // to complete, we force all writes to complete. + // + // 2. On PPC64, also add MemBarRelease for constructors which write + // volatile fields. As support_IRIW_for_not_multiple_copy_atomic_cpu + // is set on PPC64, no sync instruction is issued after volatile + // stores. We want to guarantee the same behavior as on platforms + // with total store order, although this is not required by the Java + // memory model. So as with finals, we add a barrier here. + // + // 3. Experimental VM option is used to force the barrier if any field + // was written out in the constructor. + // + // "All bets are off" unless the first publication occurs after a + // normal return from the constructor. We do not attempt to detect + // such unusual early publications. But no barrier is needed on + // exceptional returns, since they cannot publish normally. + // + if (method()->is_initializer() && + (wrote_final() || + PPC64_ONLY(wrote_volatile() ||) + (AlwaysSafeConstructors && wrote_fields()))) { _exits.insert_mem_bar(Op_MemBarRelease, alloc_with_final()); #ifndef PRODUCT if (PrintOpto && (Verbose || WizardMode)) { @@ -937,6 +948,19 @@ void Parse::do_exits() { #endif } + // Any method can write a @Stable field; insert memory barriers after + // those also. If there is a predecessor allocation node, bind the + // barrier there. + if (wrote_stable()) { + _exits.insert_mem_bar(Op_MemBarRelease, alloc_with_final()); +#ifndef PRODUCT + if (PrintOpto && (Verbose || WizardMode)) { + method()->print_name(); + tty->print_cr(" writes @Stable and needs a memory barrier"); + } +#endif + } + for (MergeMemStream mms(_exits.merged_memory()); mms.next_non_empty(); ) { // transform each slice of the original memphi: mms.set_memory(_gvn.transform(mms.memory())); diff --git a/hotspot/src/share/vm/opto/parse3.cpp b/hotspot/src/share/vm/opto/parse3.cpp index 0e3eddde236..1f7ea1d3f8b 100644 --- a/hotspot/src/share/vm/opto/parse3.cpp +++ b/hotspot/src/share/vm/opto/parse3.cpp @@ -334,13 +334,23 @@ void Parse::do_put_xxx(Node* obj, ciField* field, bool is_field) { } } + if (is_field) { + set_wrote_fields(true); + } + // If the field is final, the rules of Java say we are in or . // Note the presence of writes to final non-static fields, so that we // can insert a memory barrier later on to keep the writes from floating // out of the constructor. // Any method can write a @Stable field; insert memory barriers after those also. if (is_field && (field->is_final() || field->is_stable())) { - set_wrote_final(true); + if (field->is_final()) { + set_wrote_final(true); + } + if (field->is_stable()) { + set_wrote_stable(true); + } + // Preserve allocation ptr to create precedent edge to it in membar // generated on exit from constructor. if (C->eliminate_boxing() && diff --git a/hotspot/src/share/vm/runtime/globals.hpp b/hotspot/src/share/vm/runtime/globals.hpp index a9eb5a1176e..866cff8349a 100644 --- a/hotspot/src/share/vm/runtime/globals.hpp +++ b/hotspot/src/share/vm/runtime/globals.hpp @@ -535,6 +535,9 @@ class CommandLineFlags { develop(bool, CleanChunkPoolAsync, falseInEmbedded, \ "Clean the chunk pool asynchronously") \ \ + experimental(bool, AlwaysSafeConstructors, false, \ + "Force safe construction, as if all fields are final.") \ + \ /* Temporary: See 6948537 */ \ experimental(bool, UseMemSetInBOT, true, \ "(Unstable) uses memset in BOT updates in GC code") \ From 1a95f3a409faf70f7ee0281bb7762f0a5ffe844b Mon Sep 17 00:00:00 2001 From: Coleen Phillimore Date: Mon, 3 Mar 2014 13:58:52 -0500 Subject: [PATCH 018/116] 8035735: Metaspace::contains become extremely slow in some cases Call is_metadata instead which does less work for the call in debugInfo.hpp which is called for all compiled code stack frames. Reviewed-by: jmasa, dcubed --- hotspot/src/share/vm/code/debugInfo.hpp | 6 +++--- hotspot/src/share/vm/oops/metadata.hpp | 1 + 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/hotspot/src/share/vm/code/debugInfo.hpp b/hotspot/src/share/vm/code/debugInfo.hpp index cf0a9a6d39f..287ff876cb0 100644 --- a/hotspot/src/share/vm/code/debugInfo.hpp +++ b/hotspot/src/share/vm/code/debugInfo.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -273,8 +273,8 @@ class DebugInfoReadStream : public CompressedReadStream { } Method* read_method() { Method* o = (Method*)(code()->metadata_at(read_int())); - assert(o == NULL || - o->is_metaspace_object(), "meta data only"); + // is_metadata() is a faster check than is_metaspace_object() + assert(o == NULL || o->is_metadata(), "meta data only"); return o; } ScopeValue* read_object_value(); diff --git a/hotspot/src/share/vm/oops/metadata.hpp b/hotspot/src/share/vm/oops/metadata.hpp index 84a60893e81..dc52c452ee3 100644 --- a/hotspot/src/share/vm/oops/metadata.hpp +++ b/hotspot/src/share/vm/oops/metadata.hpp @@ -42,6 +42,7 @@ class Metadata : public MetaspaceObj { // Rehashing support for tables containing pointers to this unsigned int new_hash(juint seed) { ShouldNotReachHere(); return 0; } + virtual bool is_metadata() const volatile { return true; } virtual bool is_klass() const volatile { return false; } virtual bool is_method() const volatile { return false; } virtual bool is_methodData() const volatile { return false; } From 132fd335ebbe3754b559cc5b2ba9c0c4f42f608d Mon Sep 17 00:00:00 2001 From: Vladimir Ivanov Date: Tue, 4 Mar 2014 02:19:04 -0800 Subject: [PATCH 019/116] 8035887: VM crashes trying to force inlining the recursive call Reviewed-by: kvn, twisti --- hotspot/src/share/vm/c1/c1_GraphBuilder.cpp | 13 ++++++++----- hotspot/src/share/vm/runtime/globals.hpp | 3 ++- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/hotspot/src/share/vm/c1/c1_GraphBuilder.cpp b/hotspot/src/share/vm/c1/c1_GraphBuilder.cpp index 389eaf29b47..974bc04cc4d 100644 --- a/hotspot/src/share/vm/c1/c1_GraphBuilder.cpp +++ b/hotspot/src/share/vm/c1/c1_GraphBuilder.cpp @@ -3771,11 +3771,14 @@ bool GraphBuilder::try_inline_full(ciMethod* callee, bool holder_known, Bytecode } // now perform tests that are based on flag settings - if (callee->force_inline()) { - if (inline_level() > MaxForceInlineLevel) INLINE_BAILOUT("MaxForceInlineLevel"); - print_inlining(callee, "force inline by annotation"); - } else if (callee->should_inline()) { - print_inlining(callee, "force inline by CompileOracle"); + if (callee->force_inline() || callee->should_inline()) { + if (inline_level() > MaxForceInlineLevel ) INLINE_BAILOUT("MaxForceInlineLevel"); + if (recursive_inline_level(callee) > MaxRecursiveInlineLevel) INLINE_BAILOUT("recursive inlining too deep"); + + const char* msg = ""; + if (callee->force_inline()) msg = "force inline by annotation"; + if (callee->should_inline()) msg = "force inline by CompileOracle"; + print_inlining(callee, msg); } else { // use heuristic controls on inlining if (inline_level() > MaxInlineLevel ) INLINE_BAILOUT("inlining too deep"); diff --git a/hotspot/src/share/vm/runtime/globals.hpp b/hotspot/src/share/vm/runtime/globals.hpp index 866cff8349a..1d0f62ed4d7 100644 --- a/hotspot/src/share/vm/runtime/globals.hpp +++ b/hotspot/src/share/vm/runtime/globals.hpp @@ -2987,7 +2987,8 @@ class CommandLineFlags { "maximum number of nested recursive calls that are inlined") \ \ develop(intx, MaxForceInlineLevel, 100, \ - "maximum number of nested @ForceInline calls that are inlined") \ + "maximum number of nested calls that are forced for inlining " \ + "(using CompilerOracle or marked w/ @ForceInline)") \ \ product_pd(intx, InlineSmallCode, \ "Only inline already compiled methods if their code size is " \ From 3ba019c8b2ec38b890dfa3b68dd89766356493f4 Mon Sep 17 00:00:00 2001 From: Vladimir Ivanov Date: Tue, 4 Mar 2014 02:20:41 -0800 Subject: [PATCH 020/116] 8035828: Turn on @Stable support in VM Reviewed-by: jrose, twisti --- hotspot/src/share/vm/opto/c2_globals.hpp | 2 +- hotspot/src/share/vm/runtime/globals.hpp | 4 +- .../compiler/stable/TestStableBoolean.java | 627 +++++++++++++++++ .../test/compiler/stable/TestStableByte.java | 632 +++++++++++++++++ .../test/compiler/stable/TestStableChar.java | 631 +++++++++++++++++ .../compiler/stable/TestStableDouble.java | 632 +++++++++++++++++ .../test/compiler/stable/TestStableFloat.java | 632 +++++++++++++++++ .../test/compiler/stable/TestStableInt.java | 632 +++++++++++++++++ .../test/compiler/stable/TestStableLong.java | 632 +++++++++++++++++ .../compiler/stable/TestStableObject.java | 635 ++++++++++++++++++ .../test/compiler/stable/TestStableShort.java | 632 +++++++++++++++++ 11 files changed, 5688 insertions(+), 3 deletions(-) create mode 100644 hotspot/test/compiler/stable/TestStableBoolean.java create mode 100644 hotspot/test/compiler/stable/TestStableByte.java create mode 100644 hotspot/test/compiler/stable/TestStableChar.java create mode 100644 hotspot/test/compiler/stable/TestStableDouble.java create mode 100644 hotspot/test/compiler/stable/TestStableFloat.java create mode 100644 hotspot/test/compiler/stable/TestStableInt.java create mode 100644 hotspot/test/compiler/stable/TestStableLong.java create mode 100644 hotspot/test/compiler/stable/TestStableObject.java create mode 100644 hotspot/test/compiler/stable/TestStableShort.java diff --git a/hotspot/src/share/vm/opto/c2_globals.hpp b/hotspot/src/share/vm/opto/c2_globals.hpp index cc5e2ced6b3..3064b2390f1 100644 --- a/hotspot/src/share/vm/opto/c2_globals.hpp +++ b/hotspot/src/share/vm/opto/c2_globals.hpp @@ -452,7 +452,7 @@ product(bool, EliminateAutoBox, true, \ "Control optimizations for autobox elimination") \ \ - experimental(bool, UseImplicitStableValues, false, \ + diagnostic(bool, UseImplicitStableValues, true, \ "Mark well-known stable fields as such (e.g. String.value)") \ \ product(intx, AutoBoxCacheMax, 128, \ diff --git a/hotspot/src/share/vm/runtime/globals.hpp b/hotspot/src/share/vm/runtime/globals.hpp index 1d0f62ed4d7..30f7007066d 100644 --- a/hotspot/src/share/vm/runtime/globals.hpp +++ b/hotspot/src/share/vm/runtime/globals.hpp @@ -3799,8 +3799,8 @@ class CommandLineFlags { experimental(bool, TrustFinalNonStaticFields, false, \ "trust final non-static declarations for constant folding") \ \ - experimental(bool, FoldStableValues, false, \ - "Private flag to control optimizations for stable variables") \ + diagnostic(bool, FoldStableValues, true, \ + "Optimize loads from stable fields (marked w/ @Stable)") \ \ develop(bool, TraceInvokeDynamic, false, \ "trace internal invoke dynamic operations") \ diff --git a/hotspot/test/compiler/stable/TestStableBoolean.java b/hotspot/test/compiler/stable/TestStableBoolean.java new file mode 100644 index 00000000000..37f42875022 --- /dev/null +++ b/hotspot/test/compiler/stable/TestStableBoolean.java @@ -0,0 +1,627 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test TestStableBoolean + * @summary tests on stable fields and arrays + * @library /testlibrary + * @compile -XDignore.symbol.file TestStableBoolean.java + * @run main ClassFileInstaller + * java/lang/invoke/TestStableBoolean + * java/lang/invoke/TestStableBoolean$BooleanStable + * java/lang/invoke/TestStableBoolean$StaticBooleanStable + * java/lang/invoke/TestStableBoolean$VolatileBooleanStable + * java/lang/invoke/TestStableBoolean$BooleanArrayDim1 + * java/lang/invoke/TestStableBoolean$BooleanArrayDim2 + * java/lang/invoke/TestStableBoolean$BooleanArrayDim3 + * java/lang/invoke/TestStableBoolean$BooleanArrayDim4 + * java/lang/invoke/TestStableBoolean$ObjectArrayLowerDim0 + * java/lang/invoke/TestStableBoolean$ObjectArrayLowerDim1 + * java/lang/invoke/TestStableBoolean$NestedStableField + * java/lang/invoke/TestStableBoolean$NestedStableField$A + * java/lang/invoke/TestStableBoolean$NestedStableField1 + * java/lang/invoke/TestStableBoolean$NestedStableField1$A + * java/lang/invoke/TestStableBoolean$NestedStableField2 + * java/lang/invoke/TestStableBoolean$NestedStableField2$A + * java/lang/invoke/TestStableBoolean$NestedStableField3 + * java/lang/invoke/TestStableBoolean$NestedStableField3$A + * java/lang/invoke/TestStableBoolean$DefaultValue + * java/lang/invoke/TestStableBoolean$ObjectArrayLowerDim2 + * + * @run main/othervm -Xbootclasspath/a:. -XX:+IgnoreUnrecognizedVMOptions + * -XX:+UnlockDiagnosticVMOptions -XX:+FoldStableValues -XX:+UseCompressedOop + * -server -XX:-TieredCompilation -Xcomp + * -XX:CompileOnly=::get,::get1,::get2,::get3,::get4 + * java.lang.invoke.TestStableBoolean + * + * @run main/othervm -Xbootclasspath/a:. -XX:+IgnoreUnrecognizedVMOptions + * -XX:+UnlockDiagnosticVMOptions -XX:+FoldStableValues -XX:-UseCompressedOop + * -server -XX:-TieredCompilation -Xcomp + * -XX:CompileOnly=::get,::get1,::get2,::get3,::get4 + * java.lang.invoke.TestStableBoolean + * + * @run main/othervm -Xbootclasspath/a:. -XX:+IgnoreUnrecognizedVMOptions + * -XX:+UnlockDiagnosticVMOptions -XX:-FoldStableValues -XX:+UseCompressedOop + * -server -XX:-TieredCompilation -Xcomp + * -XX:CompileOnly=::get,::get1,::get2,::get3,::get4 + * java.lang.invoke.TestStableBoolean + * + * @run main/othervm -Xbootclasspath/a:. -XX:+IgnoreUnrecognizedVMOptions + * -XX:+UnlockDiagnosticVMOptions -XX:-FoldStableValues -XX:-UseCompressedOop + * -server -XX:-TieredCompilation -Xcomp + * -XX:CompileOnly=::get,::get1,::get2,::get3,::get4 + * java.lang.invoke.TestStableBoolean + */ +package java.lang.invoke; + +import com.sun.management.HotSpotDiagnosticMXBean; +import com.sun.management.VMOption; +import sun.management.ManagementFactoryHelper; +import java.lang.reflect.InvocationTargetException; + +public class TestStableBoolean { + public static void main(String[] args) throws Exception { + System.out.println("@Stable enabled: "+isStableEnabled); + System.out.println(); + + run(DefaultValue.class); + run(BooleanStable.class); + run(StaticBooleanStable.class); + run(VolatileBooleanStable.class); + + // @Stable arrays: Dim 1-4 + run(BooleanArrayDim1.class); + run(BooleanArrayDim2.class); + run(BooleanArrayDim3.class); + run(BooleanArrayDim4.class); + + // @Stable Object field: dynamic arrays + run(ObjectArrayLowerDim0.class); + run(ObjectArrayLowerDim1.class); + run(ObjectArrayLowerDim2.class); + + // Nested @Stable fields + run(NestedStableField.class); + run(NestedStableField1.class); + run(NestedStableField2.class); + run(NestedStableField3.class); + + if (failed) { + throw new Error("TEST FAILED"); + } + } + + /* ==================================================== */ + + static class DefaultValue { + public @Stable boolean v; + + public static final DefaultValue c = new DefaultValue(); + public static boolean get() { return c.v; } + public static void test() throws Exception { + boolean val1 = get(); + c.v = true; boolean val2 = get(); + assertEquals(val1, false); + assertEquals(val2, true); + } + } + + /* ==================================================== */ + + static class BooleanStable { + public @Stable boolean v; + + public static final BooleanStable c = new BooleanStable(); + public static boolean get() { return c.v; } + public static void test() throws Exception { + c.v = true; boolean val1 = get(); + c.v = false; boolean val2 = get(); + assertEquals(val1, true); + assertEquals(val2, (isStableEnabled ? true : false)); + } + } + + /* ==================================================== */ + + static class StaticBooleanStable { + public static @Stable boolean v; + + public static final StaticBooleanStable c = new StaticBooleanStable(); + public static boolean get() { return c.v; } + public static void test() throws Exception { + c.v = true; boolean val1 = get(); + c.v = false; boolean val2 = get(); + assertEquals(val1, true); + assertEquals(val2, (isStableEnabled ? true : false)); + } + } + + /* ==================================================== */ + + static class VolatileBooleanStable { + public @Stable volatile boolean v; + + public static final VolatileBooleanStable c = new VolatileBooleanStable(); + public static boolean get() { return c.v; } + public static void test() throws Exception { + c.v = true; boolean val1 = get(); + c.v = false; boolean val2 = get(); + assertEquals(val1, true); + assertEquals(val2, (isStableEnabled ? true : false)); + } + } + + /* ==================================================== */ + // @Stable array == field && all components are stable + + static class BooleanArrayDim1 { + public @Stable boolean[] v; + + public static final BooleanArrayDim1 c = new BooleanArrayDim1(); + public static boolean get() { return c.v[0]; } + public static boolean get1() { return c.v[10]; } + public static boolean[] get2() { return c.v; } + public static void test() throws Exception { + { + c.v = new boolean[1]; c.v[0] = true; boolean val1 = get(); + c.v[0] = false; boolean val2 = get(); + assertEquals(val1, true); + assertEquals(val2, (isStableEnabled ? true : false)); + } + + { + c.v = new boolean[20]; c.v[10] = true; boolean val1 = get1(); + c.v[10] = false; boolean val2 = get1(); + assertEquals(val1, true); + assertEquals(val2, (isStableEnabled ? true : false)); + } + + { + c.v = new boolean[1]; boolean[] val1 = get2(); + c.v = new boolean[1]; boolean[] val2 = get2(); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + } + } + + /* ==================================================== */ + + static class BooleanArrayDim2 { + public @Stable boolean[][] v; + + public static final BooleanArrayDim2 c = new BooleanArrayDim2(); + public static boolean get() { return c.v[0][0]; } + public static boolean[] get1() { return c.v[0]; } + public static boolean[][] get2() { return c.v; } + public static void test() throws Exception { + { + c.v = new boolean[1][1]; c.v[0][0] = true; boolean val1 = get(); + c.v[0][0] = false; boolean val2 = get(); + assertEquals(val1, true); + assertEquals(val2, (isStableEnabled ? true : false)); + + c.v = new boolean[1][1]; c.v[0][0] = false; boolean val3 = get(); + assertEquals(val3, (isStableEnabled ? true : false)); + + c.v[0] = new boolean[1]; c.v[0][0] = false; boolean val4 = get(); + assertEquals(val4, (isStableEnabled ? true : false)); + } + + { + c.v = new boolean[1][1]; boolean[] val1 = get1(); + c.v[0] = new boolean[1]; boolean[] val2 = get1(); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + + { + c.v = new boolean[1][1]; boolean[][] val1 = get2(); + c.v = new boolean[1][1]; boolean[][] val2 = get2(); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + } + } + + /* ==================================================== */ + + static class BooleanArrayDim3 { + public @Stable boolean[][][] v; + + public static final BooleanArrayDim3 c = new BooleanArrayDim3(); + public static boolean get() { return c.v[0][0][0]; } + public static boolean[] get1() { return c.v[0][0]; } + public static boolean[][] get2() { return c.v[0]; } + public static boolean[][][] get3() { return c.v; } + public static void test() throws Exception { + { + c.v = new boolean[1][1][1]; c.v[0][0][0] = true; boolean val1 = get(); + c.v[0][0][0] = false; boolean val2 = get(); + assertEquals(val1, true); + assertEquals(val2, (isStableEnabled ? true : false)); + + c.v = new boolean[1][1][1]; c.v[0][0][0] = false; boolean val3 = get(); + assertEquals(val3, (isStableEnabled ? true : false)); + + c.v[0] = new boolean[1][1]; c.v[0][0][0] = false; boolean val4 = get(); + assertEquals(val4, (isStableEnabled ? true : false)); + + c.v[0][0] = new boolean[1]; c.v[0][0][0] = false; boolean val5 = get(); + assertEquals(val5, (isStableEnabled ? true : false)); + } + + { + c.v = new boolean[1][1][1]; boolean[] val1 = get1(); + c.v[0][0] = new boolean[1]; boolean[] val2 = get1(); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + + { + c.v = new boolean[1][1][1]; boolean[][] val1 = get2(); + c.v[0] = new boolean[1][1]; boolean[][] val2 = get2(); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + + { + c.v = new boolean[1][1][1]; boolean[][][] val1 = get3(); + c.v = new boolean[1][1][1]; boolean[][][] val2 = get3(); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + } + } + + /* ==================================================== */ + + static class BooleanArrayDim4 { + public @Stable boolean[][][][] v; + + public static final BooleanArrayDim4 c = new BooleanArrayDim4(); + public static boolean get() { return c.v[0][0][0][0]; } + public static boolean[] get1() { return c.v[0][0][0]; } + public static boolean[][] get2() { return c.v[0][0]; } + public static boolean[][][] get3() { return c.v[0]; } + public static boolean[][][][] get4() { return c.v; } + public static void test() throws Exception { + { + c.v = new boolean[1][1][1][1]; c.v[0][0][0][0] = true; boolean val1 = get(); + c.v[0][0][0][0] = false; boolean val2 = get(); + assertEquals(val1, true); + assertEquals(val2, (isStableEnabled ? true : false)); + + c.v = new boolean[1][1][1][1]; c.v[0][0][0][0] = false; boolean val3 = get(); + assertEquals(val3, (isStableEnabled ? true : false)); + + c.v[0] = new boolean[1][1][1]; c.v[0][0][0][0] = false; boolean val4 = get(); + assertEquals(val4, (isStableEnabled ? true : false)); + + c.v[0][0] = new boolean[1][1]; c.v[0][0][0][0] = false; boolean val5 = get(); + assertEquals(val5, (isStableEnabled ? true : false)); + + c.v[0][0][0] = new boolean[1]; c.v[0][0][0][0] = false; boolean val6 = get(); + assertEquals(val6, (isStableEnabled ? true : false)); + } + + { + c.v = new boolean[1][1][1][1]; boolean[] val1 = get1(); + c.v[0][0][0] = new boolean[1]; boolean[] val2 = get1(); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + + { + c.v = new boolean[1][1][1][1]; boolean[][] val1 = get2(); + c.v[0][0] = new boolean[1][1]; boolean[][] val2 = get2(); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + + { + c.v = new boolean[1][1][1][1]; boolean[][][] val1 = get3(); + c.v[0] = new boolean[1][1][1]; boolean[][][] val2 = get3(); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + + { + c.v = new boolean[1][1][1][1]; boolean[][][][] val1 = get4(); + c.v = new boolean[1][1][1][1]; boolean[][][][] val2 = get4(); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + + } + } + + /* ==================================================== */ + // Dynamic Dim is higher than static + + static class ObjectArrayLowerDim0 { + public @Stable Object v; + + public static final ObjectArrayLowerDim0 c = new ObjectArrayLowerDim0(); + public static boolean get() { return ((boolean[])c.v)[0]; } + public static boolean[] get1() { return (boolean[])c.v; } + public static boolean[] get2() { return (boolean[])c.v; } + + public static void test() throws Exception { + { + c.v = new boolean[1]; ((boolean[])c.v)[0] = true; boolean val1 = get(); + ((boolean[])c.v)[0] = false; boolean val2 = get(); + + assertEquals(val1, true); + assertEquals(val2, false); + } + + { + c.v = new boolean[1]; boolean[] val1 = get1(); + c.v = new boolean[1]; boolean[] val2 = get1(); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + } + } + + /* ==================================================== */ + + static class ObjectArrayLowerDim1 { + public @Stable Object[] v; + + public static final ObjectArrayLowerDim1 c = new ObjectArrayLowerDim1(); + public static boolean get() { return ((boolean[][])c.v)[0][0]; } + public static boolean[] get1() { return (boolean[])(c.v[0]); } + public static Object[] get2() { return c.v; } + + public static void test() throws Exception { + { + c.v = new boolean[1][1]; ((boolean[][])c.v)[0][0] = true; boolean val1 = get(); + ((boolean[][])c.v)[0][0] = false; boolean val2 = get(); + + assertEquals(val1, true); + assertEquals(val2, false); + } + + { + c.v = new boolean[1][1]; c.v[0] = new boolean[0]; boolean[] val1 = get1(); + c.v[0] = new boolean[0]; boolean[] val2 = get1(); + + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + + { + c.v = new boolean[0][0]; Object[] val1 = get2(); + c.v = new boolean[0][0]; Object[] val2 = get2(); + + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + } + } + + /* ==================================================== */ + + static class ObjectArrayLowerDim2 { + public @Stable Object[][] v; + + public static final ObjectArrayLowerDim2 c = new ObjectArrayLowerDim2(); + public static boolean get() { return ((boolean[][][])c.v)[0][0][0]; } + public static boolean[] get1() { return (boolean[])(c.v[0][0]); } + public static boolean[][] get2() { return (boolean[][])(c.v[0]); } + public static Object[][] get3() { return c.v; } + + public static void test() throws Exception { + { + c.v = new boolean[1][1][1]; ((boolean[][][])c.v)[0][0][0] = true; boolean val1 = get(); + ((boolean[][][])c.v)[0][0][0] = false; boolean val2 = get(); + + assertEquals(val1, true); + assertEquals(val2, false); + } + + { + c.v = new boolean[1][1][1]; c.v[0][0] = new boolean[0]; boolean[] val1 = get1(); + c.v[0][0] = new boolean[0]; boolean[] val2 = get1(); + + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + + { + c.v = new boolean[1][1][1]; c.v[0] = new boolean[0][0]; boolean[][] val1 = get2(); + c.v[0] = new boolean[0][0]; boolean[][] val2 = get2(); + + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + + { + c.v = new boolean[0][0][0]; Object[][] val1 = get3(); + c.v = new boolean[0][0][0]; Object[][] val2 = get3(); + + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + } + } + + /* ==================================================== */ + + static class NestedStableField { + static class A { + public @Stable boolean a; + + } + public @Stable A v; + + public static final NestedStableField c = new NestedStableField(); + public static A get() { return c.v; } + public static boolean get1() { return get().a; } + + public static void test() throws Exception { + { + c.v = new A(); c.v.a = true; A val1 = get(); + c.v.a = false; A val2 = get(); + + assertEquals(val1.a, false); + assertEquals(val2.a, false); + } + + { + c.v = new A(); c.v.a = true; boolean val1 = get1(); + c.v.a = false; boolean val2 = get1(); + c.v = new A(); c.v.a = false; boolean val3 = get1(); + + assertEquals(val1, true); + assertEquals(val2, (isStableEnabled ? true : false)); + assertEquals(val3, (isStableEnabled ? true : false)); + } + } + } + + /* ==================================================== */ + + static class NestedStableField1 { + static class A { + public @Stable boolean a; + public @Stable A next; + } + public @Stable A v; + + public static final NestedStableField1 c = new NestedStableField1(); + public static A get() { return c.v.next.next.next.next.next.next.next; } + public static boolean get1() { return get().a; } + + public static void test() throws Exception { + { + c.v = new A(); c.v.next = new A(); c.v.next.next = c.v; + c.v.a = true; c.v.next.a = true; A val1 = get(); + c.v.a = false; c.v.next.a = false; A val2 = get(); + + assertEquals(val1.a, false); + assertEquals(val2.a, false); + } + + { + c.v = new A(); c.v.next = c.v; + c.v.a = true; boolean val1 = get1(); + c.v.a = false; boolean val2 = get1(); + c.v = new A(); c.v.next = c.v; + c.v.a = false; boolean val3 = get1(); + + assertEquals(val1, true); + assertEquals(val2, (isStableEnabled ? true : false)); + assertEquals(val3, (isStableEnabled ? true : false)); + } + } + } + /* ==================================================== */ + + static class NestedStableField2 { + static class A { + public @Stable boolean a; + public @Stable A left; + public A right; + } + + public @Stable A v; + + public static final NestedStableField2 c = new NestedStableField2(); + public static boolean get() { return c.v.left.left.left.a; } + public static boolean get1() { return c.v.left.left.right.left.a; } + + public static void test() throws Exception { + { + c.v = new A(); c.v.left = c.v.right = c.v; + c.v.a = true; boolean val1 = get(); boolean val2 = get1(); + c.v.a = false; boolean val3 = get(); boolean val4 = get1(); + + assertEquals(val1, true); + assertEquals(val3, (isStableEnabled ? true : false)); + + assertEquals(val2, true); + assertEquals(val4, false); + } + } + } + + /* ==================================================== */ + + static class NestedStableField3 { + static class A { + public @Stable boolean a; + public @Stable A[] left; + public A[] right; + } + + public @Stable A[] v; + + public static final NestedStableField3 c = new NestedStableField3(); + public static boolean get() { return c.v[0].left[1].left[0].left[1].a; } + public static boolean get1() { return c.v[1].left[0].left[1].right[0].left[1].a; } + + public static void test() throws Exception { + { + A elem = new A(); + c.v = new A[] { elem, elem }; c.v[0].left = c.v[0].right = c.v; + elem.a = true; boolean val1 = get(); boolean val2 = get1(); + elem.a = false; boolean val3 = get(); boolean val4 = get1(); + + assertEquals(val1, true); + assertEquals(val3, (isStableEnabled ? true : false)); + + assertEquals(val2, true); + assertEquals(val4, false); + } + } + } + + /* ==================================================== */ + // Auxiliary methods + static void assertEquals(boolean i, boolean j) { if (i != j) throw new AssertionError(i + " != " + j); } + static void assertTrue(boolean b) { if (!b) throw new AssertionError(); } + + static boolean failed = false; + + public static void run(Class test) { + Throwable ex = null; + System.out.print(test.getName()+": "); + try { + test.getMethod("test").invoke(null); + } catch (InvocationTargetException e) { + ex = e.getCause(); + } catch (Throwable e) { + ex = e; + } finally { + if (ex == null) { + System.out.println("PASSED"); + } else { + failed = true; + System.out.println("FAILED"); + ex.printStackTrace(System.out); + } + } + } + + static final boolean isStableEnabled; + static { + HotSpotDiagnosticMXBean diagnostic + = ManagementFactoryHelper.getDiagnosticMXBean(); + VMOption tmp; + try { + tmp = diagnostic.getVMOption("FoldStableValues"); + } catch (IllegalArgumentException e) { + tmp = null; + } + isStableEnabled = (tmp == null ? false : Boolean.parseBoolean(tmp.getValue())); + } +} diff --git a/hotspot/test/compiler/stable/TestStableByte.java b/hotspot/test/compiler/stable/TestStableByte.java new file mode 100644 index 00000000000..4a14fcc3b2f --- /dev/null +++ b/hotspot/test/compiler/stable/TestStableByte.java @@ -0,0 +1,632 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test TestStableByte + * @summary tests on stable fields and arrays + * @library /testlibrary + * @compile -XDignore.symbol.file TestStableByte.java + * @run main ClassFileInstaller + * java/lang/invoke/TestStableByte + * java/lang/invoke/TestStableByte$ByteStable + * java/lang/invoke/TestStableByte$StaticByteStable + * java/lang/invoke/TestStableByte$VolatileByteStable + * java/lang/invoke/TestStableByte$ByteArrayDim1 + * java/lang/invoke/TestStableByte$ByteArrayDim2 + * java/lang/invoke/TestStableByte$ByteArrayDim3 + * java/lang/invoke/TestStableByte$ByteArrayDim4 + * java/lang/invoke/TestStableByte$ObjectArrayLowerDim0 + * java/lang/invoke/TestStableByte$ObjectArrayLowerDim1 + * java/lang/invoke/TestStableByte$NestedStableField + * java/lang/invoke/TestStableByte$NestedStableField$A + * java/lang/invoke/TestStableByte$NestedStableField1 + * java/lang/invoke/TestStableByte$NestedStableField1$A + * java/lang/invoke/TestStableByte$NestedStableField2 + * java/lang/invoke/TestStableByte$NestedStableField2$A + * java/lang/invoke/TestStableByte$NestedStableField3 + * java/lang/invoke/TestStableByte$NestedStableField3$A + * java/lang/invoke/TestStableByte$DefaultValue + * java/lang/invoke/TestStableByte$ObjectArrayLowerDim2 + * + * @run main/othervm -Xbootclasspath/a:. -XX:+IgnoreUnrecognizedVMOptions + * -XX:+UnlockDiagnosticVMOptions -XX:+FoldStableValues -XX:+UseCompressedOop + * -server -XX:-TieredCompilation -Xcomp + * -XX:CompileOnly=::get,::get1,::get2,::get3,::get4 + * java.lang.invoke.TestStableByte + * + * @run main/othervm -Xbootclasspath/a:. -XX:+IgnoreUnrecognizedVMOptions + * -XX:+UnlockDiagnosticVMOptions -XX:+FoldStableValues -XX:-UseCompressedOop + * -server -XX:-TieredCompilation -Xcomp + * -XX:CompileOnly=::get,::get1,::get2,::get3,::get4 + * java.lang.invoke.TestStableByte + * + * @run main/othervm -Xbootclasspath/a:. -XX:+IgnoreUnrecognizedVMOptions + * -XX:+UnlockDiagnosticVMOptions -XX:-FoldStableValues -XX:+UseCompressedOop + * -server -XX:-TieredCompilation -Xcomp + * -XX:CompileOnly=::get,::get1,::get2,::get3,::get4 + * java.lang.invoke.TestStableByte + * + * @run main/othervm -Xbootclasspath/a:. -XX:+IgnoreUnrecognizedVMOptions + * -XX:+UnlockDiagnosticVMOptions -XX:-FoldStableValues -XX:-UseCompressedOop + * -server -XX:-TieredCompilation -Xcomp + * -XX:CompileOnly=::get,::get1,::get2,::get3,::get4 + * java.lang.invoke.TestStableByte + */ +package java.lang.invoke; + +import com.sun.management.HotSpotDiagnosticMXBean; +import com.sun.management.VMOption; +import sun.management.ManagementFactoryHelper; +import java.lang.reflect.InvocationTargetException; + +public class TestStableByte { + public static void main(String[] args) throws Exception { + System.out.println("@Stable enabled: "+isStableEnabled); + System.out.println(); + + run(DefaultValue.class); + run(ByteStable.class); + run(StaticByteStable.class); + run(VolatileByteStable.class); + + // @Stable arrays: Dim 1-4 + run(ByteArrayDim1.class); + run(ByteArrayDim2.class); + run(ByteArrayDim3.class); + run(ByteArrayDim4.class); + + // @Stable Object field: dynamic arrays + run(ObjectArrayLowerDim0.class); + run(ObjectArrayLowerDim1.class); + run(ObjectArrayLowerDim2.class); + + // Nested @Stable fields + run(NestedStableField.class); + run(NestedStableField1.class); + run(NestedStableField2.class); + run(NestedStableField3.class); + + if (failed) { + throw new Error("TEST FAILED"); + } + } + + /* ==================================================== */ + + static class DefaultValue { + public @Stable byte v; + + public static final DefaultValue c = new DefaultValue(); + public static byte get() { return c.v; } + public static void test() throws Exception { + byte val1 = get(); + c.v = 1; byte val2 = get(); + assertEquals(val1, 0); + assertEquals(val2, 1); + } + } + + /* ==================================================== */ + + static class ByteStable { + public @Stable byte v; + + public static final ByteStable c = new ByteStable(); + public static byte get() { return c.v; } + public static void test() throws Exception { + c.v = 5; byte val1 = get(); + c.v = 127; byte val2 = get(); + assertEquals(val1, 5); + assertEquals(val2, (isStableEnabled ? 5 : 127)); + } + } + + /* ==================================================== */ + + static class StaticByteStable { + public static @Stable byte v; + + public static final StaticByteStable c = new StaticByteStable(); + public static byte get() { return c.v; } + public static void test() throws Exception { + c.v = 5; byte val1 = get(); + c.v = 127; byte val2 = get(); + assertEquals(val1, 5); + assertEquals(val2, (isStableEnabled ? 5 : 127)); + } + } + + /* ==================================================== */ + + static class VolatileByteStable { + public @Stable volatile byte v; + + public static final VolatileByteStable c = new VolatileByteStable(); + public static byte get() { return c.v; } + public static void test() throws Exception { + c.v = 5; byte val1 = get(); + c.v = 127; byte val2 = get(); + assertEquals(val1, 5); + assertEquals(val2, (isStableEnabled ? 5 : 127)); + } + } + + /* ==================================================== */ + // @Stable array == field && all components are stable + + static class ByteArrayDim1 { + public @Stable byte[] v; + + public static final ByteArrayDim1 c = new ByteArrayDim1(); + public static byte get() { return c.v[0]; } + public static byte get1() { return c.v[10]; } + public static byte[] get2() { return c.v; } + public static void test() throws Exception { + { + c.v = new byte[1]; c.v[0] = 1; byte val1 = get(); + c.v[0] = 2; byte val2 = get(); + assertEquals(val1, 1); + assertEquals(val2, (isStableEnabled ? 1 : 2)); + + c.v = new byte[1]; c.v[0] = 3; byte val3 = get(); + assertEquals(val3, (isStableEnabled ? 1 : 3)); + } + + { + c.v = new byte[20]; c.v[10] = 1; byte val1 = get1(); + c.v[10] = 2; byte val2 = get1(); + assertEquals(val1, 1); + assertEquals(val2, (isStableEnabled ? 1 : 2)); + + c.v = new byte[20]; c.v[10] = 3; byte val3 = get1(); + assertEquals(val3, (isStableEnabled ? 1 : 3)); + } + + { + c.v = new byte[1]; byte[] val1 = get2(); + c.v = new byte[1]; byte[] val2 = get2(); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + } + } + + /* ==================================================== */ + + static class ByteArrayDim2 { + public @Stable byte[][] v; + + public static final ByteArrayDim2 c = new ByteArrayDim2(); + public static byte get() { return c.v[0][0]; } + public static byte[] get1() { return c.v[0]; } + public static byte[][] get2() { return c.v; } + public static void test() throws Exception { + { + c.v = new byte[1][1]; c.v[0][0] = 1; byte val1 = get(); + c.v[0][0] = 2; byte val2 = get(); + assertEquals(val1, 1); + assertEquals(val2, (isStableEnabled ? 1 : 2)); + + c.v = new byte[1][1]; c.v[0][0] = 3; byte val3 = get(); + assertEquals(val3, (isStableEnabled ? 1 : 3)); + + c.v[0] = new byte[1]; c.v[0][0] = 4; byte val4 = get(); + assertEquals(val4, (isStableEnabled ? 1 : 4)); + } + + { + c.v = new byte[1][1]; byte[] val1 = get1(); + c.v[0] = new byte[1]; byte[] val2 = get1(); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + + { + c.v = new byte[1][1]; byte[][] val1 = get2(); + c.v = new byte[1][1]; byte[][] val2 = get2(); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + } + } + + /* ==================================================== */ + + static class ByteArrayDim3 { + public @Stable byte[][][] v; + + public static final ByteArrayDim3 c = new ByteArrayDim3(); + public static byte get() { return c.v[0][0][0]; } + public static byte[] get1() { return c.v[0][0]; } + public static byte[][] get2() { return c.v[0]; } + public static byte[][][] get3() { return c.v; } + public static void test() throws Exception { + { + c.v = new byte[1][1][1]; c.v[0][0][0] = 1; byte val1 = get(); + c.v[0][0][0] = 2; byte val2 = get(); + assertEquals(val1, 1); + assertEquals(val2, (isStableEnabled ? 1 : 2)); + + c.v = new byte[1][1][1]; c.v[0][0][0] = 3; byte val3 = get(); + assertEquals(val3, (isStableEnabled ? 1 : 3)); + + c.v[0] = new byte[1][1]; c.v[0][0][0] = 4; byte val4 = get(); + assertEquals(val4, (isStableEnabled ? 1 : 4)); + + c.v[0][0] = new byte[1]; c.v[0][0][0] = 5; byte val5 = get(); + assertEquals(val5, (isStableEnabled ? 1 : 5)); + } + + { + c.v = new byte[1][1][1]; byte[] val1 = get1(); + c.v[0][0] = new byte[1]; byte[] val2 = get1(); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + + { + c.v = new byte[1][1][1]; byte[][] val1 = get2(); + c.v[0] = new byte[1][1]; byte[][] val2 = get2(); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + + { + c.v = new byte[1][1][1]; byte[][][] val1 = get3(); + c.v = new byte[1][1][1]; byte[][][] val2 = get3(); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + } + } + + /* ==================================================== */ + + static class ByteArrayDim4 { + public @Stable byte[][][][] v; + + public static final ByteArrayDim4 c = new ByteArrayDim4(); + public static byte get() { return c.v[0][0][0][0]; } + public static byte[] get1() { return c.v[0][0][0]; } + public static byte[][] get2() { return c.v[0][0]; } + public static byte[][][] get3() { return c.v[0]; } + public static byte[][][][] get4() { return c.v; } + public static void test() throws Exception { + { + c.v = new byte[1][1][1][1]; c.v[0][0][0][0] = 1; byte val1 = get(); + c.v[0][0][0][0] = 2; byte val2 = get(); + assertEquals(val1, 1); + assertEquals(val2, (isStableEnabled ? 1 : 2)); + + c.v = new byte[1][1][1][1]; c.v[0][0][0][0] = 3; byte val3 = get(); + assertEquals(val3, (isStableEnabled ? 1 : 3)); + + c.v[0] = new byte[1][1][1]; c.v[0][0][0][0] = 4; byte val4 = get(); + assertEquals(val4, (isStableEnabled ? 1 : 4)); + + c.v[0][0] = new byte[1][1]; c.v[0][0][0][0] = 5; byte val5 = get(); + assertEquals(val5, (isStableEnabled ? 1 : 5)); + + c.v[0][0][0] = new byte[1]; c.v[0][0][0][0] = 6; byte val6 = get(); + assertEquals(val6, (isStableEnabled ? 1 : 6)); + } + + { + c.v = new byte[1][1][1][1]; byte[] val1 = get1(); + c.v[0][0][0] = new byte[1]; byte[] val2 = get1(); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + + { + c.v = new byte[1][1][1][1]; byte[][] val1 = get2(); + c.v[0][0] = new byte[1][1]; byte[][] val2 = get2(); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + + { + c.v = new byte[1][1][1][1]; byte[][][] val1 = get3(); + c.v[0] = new byte[1][1][1]; byte[][][] val2 = get3(); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + + { + c.v = new byte[1][1][1][1]; byte[][][][] val1 = get4(); + c.v = new byte[1][1][1][1]; byte[][][][] val2 = get4(); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + + } + } + + /* ==================================================== */ + // Dynamic Dim is higher than static + + static class ObjectArrayLowerDim0 { + public @Stable Object v; + + public static final ObjectArrayLowerDim0 c = new ObjectArrayLowerDim0(); + public static byte get() { return ((byte[])c.v)[0]; } + public static byte[] get1() { return (byte[])c.v; } + + public static void test() throws Exception { + { + c.v = new byte[1]; ((byte[])c.v)[0] = 1; byte val1 = get(); + ((byte[])c.v)[0] = 2; byte val2 = get(); + + assertEquals(val1, 1); + assertEquals(val2, 2); + } + + { + c.v = new byte[1]; byte[] val1 = get1(); + c.v = new byte[1]; byte[] val2 = get1(); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + } + } + + /* ==================================================== */ + + static class ObjectArrayLowerDim1 { + public @Stable Object[] v; + + public static final ObjectArrayLowerDim1 c = new ObjectArrayLowerDim1(); + public static byte get() { return ((byte[][])c.v)[0][0]; } + public static byte[] get1() { return (byte[])(c.v[0]); } + public static Object[] get2() { return c.v; } + + public static void test() throws Exception { + { + c.v = new byte[1][1]; ((byte[][])c.v)[0][0] = 1; byte val1 = get(); + ((byte[][])c.v)[0][0] = 2; byte val2 = get(); + + assertEquals(val1, 1); + assertEquals(val2, 2); + } + + { + c.v = new byte[1][1]; c.v[0] = new byte[0]; byte[] val1 = get1(); + c.v[0] = new byte[0]; byte[] val2 = get1(); + + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + + { + c.v = new byte[0][0]; Object[] val1 = get2(); + c.v = new byte[0][0]; Object[] val2 = get2(); + + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + } + } + + /* ==================================================== */ + + static class ObjectArrayLowerDim2 { + public @Stable Object[][] v; + + public static final ObjectArrayLowerDim2 c = new ObjectArrayLowerDim2(); + public static byte get() { return ((byte[][][])c.v)[0][0][0]; } + public static byte[] get1() { return (byte[])(c.v[0][0]); } + public static byte[][] get2() { return (byte[][])(c.v[0]); } + public static Object[][] get3() { return c.v; } + + public static void test() throws Exception { + { + c.v = new byte[1][1][1]; ((byte[][][])c.v)[0][0][0] = 1; byte val1 = get(); + ((byte[][][])c.v)[0][0][0] = 2; byte val2 = get(); + + assertEquals(val1, 1); + assertEquals(val2, 2); + } + + { + c.v = new byte[1][1][1]; c.v[0][0] = new byte[0]; byte[] val1 = get1(); + c.v[0][0] = new byte[0]; byte[] val2 = get1(); + + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + + { + c.v = new byte[1][1][1]; c.v[0] = new byte[0][0]; byte[][] val1 = get2(); + c.v[0] = new byte[0][0]; byte[][] val2 = get2(); + + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + + { + c.v = new byte[0][0][0]; Object[][] val1 = get3(); + c.v = new byte[0][0][0]; Object[][] val2 = get3(); + + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + } + } + + /* ==================================================== */ + + static class NestedStableField { + static class A { + public @Stable byte a; + + } + public @Stable A v; + + public static final NestedStableField c = new NestedStableField(); + public static A get() { return c.v; } + public static byte get1() { return get().a; } + + public static void test() throws Exception { + { + c.v = new A(); c.v.a = 1; A val1 = get(); + c.v.a = 2; A val2 = get(); + + assertEquals(val1.a, 2); + assertEquals(val2.a, 2); + } + + { + c.v = new A(); c.v.a = 1; byte val1 = get1(); + c.v.a = 2; byte val2 = get1(); + c.v = new A(); c.v.a = 3; byte val3 = get1(); + + assertEquals(val1, 1); + assertEquals(val2, (isStableEnabled ? 1 : 2)); + assertEquals(val3, (isStableEnabled ? 1 : 3)); + } + } + } + + /* ==================================================== */ + + static class NestedStableField1 { + static class A { + public @Stable byte a; + public @Stable A next; + } + public @Stable A v; + + public static final NestedStableField1 c = new NestedStableField1(); + public static A get() { return c.v.next.next.next.next.next.next.next; } + public static byte get1() { return get().a; } + + public static void test() throws Exception { + { + c.v = new A(); c.v.next = new A(); c.v.next.next = c.v; + c.v.a = 1; c.v.next.a = 1; A val1 = get(); + c.v.a = 2; c.v.next.a = 2; A val2 = get(); + + assertEquals(val1.a, 2); + assertEquals(val2.a, 2); + } + + { + c.v = new A(); c.v.next = c.v; + c.v.a = 1; byte val1 = get1(); + c.v.a = 2; byte val2 = get1(); + c.v = new A(); c.v.next = c.v; + c.v.a = 3; byte val3 = get1(); + + assertEquals(val1, 1); + assertEquals(val2, (isStableEnabled ? 1 : 2)); + assertEquals(val3, (isStableEnabled ? 1 : 3)); + } + } + } + /* ==================================================== */ + + static class NestedStableField2 { + static class A { + public @Stable byte a; + public @Stable A left; + public A right; + } + + public @Stable A v; + + public static final NestedStableField2 c = new NestedStableField2(); + public static byte get() { return c.v.left.left.left.a; } + public static byte get1() { return c.v.left.left.right.left.a; } + + public static void test() throws Exception { + { + c.v = new A(); c.v.left = c.v.right = c.v; + c.v.a = 1; byte val1 = get(); byte val2 = get1(); + c.v.a = 2; byte val3 = get(); byte val4 = get1(); + + assertEquals(val1, 1); + assertEquals(val3, (isStableEnabled ? 1 : 2)); + + assertEquals(val2, 1); + assertEquals(val4, 2); + } + } + } + + /* ==================================================== */ + + static class NestedStableField3 { + static class A { + public @Stable byte a; + public @Stable A[] left; + public A[] right; + } + + public @Stable A[] v; + + public static final NestedStableField3 c = new NestedStableField3(); + public static byte get() { return c.v[0].left[1].left[0].left[1].a; } + public static byte get1() { return c.v[1].left[0].left[1].right[0].left[1].a; } + + public static void test() throws Exception { + { + A elem = new A(); + c.v = new A[] { elem, elem }; c.v[0].left = c.v[0].right = c.v; + elem.a = 1; byte val1 = get(); byte val2 = get1(); + elem.a = 2; byte val3 = get(); byte val4 = get1(); + + assertEquals(val1, 1); + assertEquals(val3, (isStableEnabled ? 1 : 2)); + + assertEquals(val2, 1); + assertEquals(val4, 2); + } + } + } + + /* ==================================================== */ + // Auxiliary methods + static void assertEquals(int i, int j) { if (i != j) throw new AssertionError(i + " != " + j); } + static void assertTrue(boolean b) { if (!b) throw new AssertionError(); } + + static boolean failed = false; + + public static void run(Class test) { + Throwable ex = null; + System.out.print(test.getName()+": "); + try { + test.getMethod("test").invoke(null); + } catch (InvocationTargetException e) { + ex = e.getCause(); + } catch (Throwable e) { + ex = e; + } finally { + if (ex == null) { + System.out.println("PASSED"); + } else { + failed = true; + System.out.println("FAILED"); + ex.printStackTrace(System.out); + } + } + } + + static final boolean isStableEnabled; + static { + HotSpotDiagnosticMXBean diagnostic + = ManagementFactoryHelper.getDiagnosticMXBean(); + VMOption tmp; + try { + tmp = diagnostic.getVMOption("FoldStableValues"); + } catch (IllegalArgumentException e) { + tmp = null; + } + isStableEnabled = (tmp == null ? false : Boolean.parseBoolean(tmp.getValue())); + } +} diff --git a/hotspot/test/compiler/stable/TestStableChar.java b/hotspot/test/compiler/stable/TestStableChar.java new file mode 100644 index 00000000000..ede8e9a4df7 --- /dev/null +++ b/hotspot/test/compiler/stable/TestStableChar.java @@ -0,0 +1,631 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test TestStableChar + * @summary tests on stable fields and arrays + * @library /testlibrary + * @compile -XDignore.symbol.file TestStableChar.java + * @run main ClassFileInstaller + * java/lang/invoke/TestStableChar + * java/lang/invoke/TestStableChar$CharStable + * java/lang/invoke/TestStableChar$StaticCharStable + * java/lang/invoke/TestStableChar$VolatileCharStable + * java/lang/invoke/TestStableChar$CharArrayDim1 + * java/lang/invoke/TestStableChar$CharArrayDim2 + * java/lang/invoke/TestStableChar$CharArrayDim3 + * java/lang/invoke/TestStableChar$CharArrayDim4 + * java/lang/invoke/TestStableChar$ObjectArrayLowerDim0 + * java/lang/invoke/TestStableChar$ObjectArrayLowerDim1 + * java/lang/invoke/TestStableChar$NestedStableField + * java/lang/invoke/TestStableChar$NestedStableField$A + * java/lang/invoke/TestStableChar$NestedStableField1 + * java/lang/invoke/TestStableChar$NestedStableField1$A + * java/lang/invoke/TestStableChar$NestedStableField2 + * java/lang/invoke/TestStableChar$NestedStableField2$A + * java/lang/invoke/TestStableChar$NestedStableField3 + * java/lang/invoke/TestStableChar$NestedStableField3$A + * java/lang/invoke/TestStableChar$DefaultValue + * java/lang/invoke/TestStableChar$ObjectArrayLowerDim2 + * + * @run main/othervm -Xbootclasspath/a:. -XX:+IgnoreUnrecognizedVMOptions + * -XX:+UnlockDiagnosticVMOptions -XX:+FoldStableValues -XX:-UseCompressedOop + * -server -XX:-TieredCompilation -Xcomp + * -XX:CompileOnly=::get,::get1,::get2,::get3,::get4 + * java.lang.invoke.TestStableChar + * + * @run main/othervm -Xbootclasspath/a:. -XX:+IgnoreUnrecognizedVMOptions + * -XX:+UnlockDiagnosticVMOptions -XX:+FoldStableValues -XX:+UseCompressedOop + * -server -XX:-TieredCompilation -Xcomp + * -XX:CompileOnly=::get,::get1,::get2,::get3,::get4 + * java.lang.invoke.TestStableChar + * + * @run main/othervm -Xbootclasspath/a:. -XX:+IgnoreUnrecognizedVMOptions + * -XX:+UnlockDiagnosticVMOptions -XX:-FoldStableValues -XX:+UseCompressedOop + * -server -XX:-TieredCompilation -Xcomp + * -XX:CompileOnly=::get,::get1,::get2,::get3,::get4 + * java.lang.invoke.TestStableChar + * + * @run main/othervm -Xbootclasspath/a:. -XX:+IgnoreUnrecognizedVMOptions + * -XX:+UnlockDiagnosticVMOptions -XX:-FoldStableValues -XX:-UseCompressedOop + * -server -XX:-TieredCompilation -Xcomp + * -XX:CompileOnly=::get,::get1,::get2,::get3,::get4 + * java.lang.invoke.TestStableChar + */ +package java.lang.invoke; + +import com.sun.management.HotSpotDiagnosticMXBean; +import com.sun.management.VMOption; +import sun.management.ManagementFactoryHelper; +import java.lang.reflect.InvocationTargetException; + +public class TestStableChar { + public static void main(String[] args) throws Exception { + System.out.println("@Stable enabled: "+isStableEnabled); + System.out.println(); + + run(DefaultValue.class); + run(CharStable.class); + run(StaticCharStable.class); + run(VolatileCharStable.class); + + // @Stable arrays: Dim 1-4 + run(CharArrayDim1.class); + run(CharArrayDim2.class); + run(CharArrayDim3.class); + run(CharArrayDim4.class); + + // @Stable Object field: dynamic arrays + run(ObjectArrayLowerDim0.class); + run(ObjectArrayLowerDim1.class); + run(ObjectArrayLowerDim2.class); + + // Nested @Stable fields + run(NestedStableField.class); + run(NestedStableField1.class); + run(NestedStableField2.class); + run(NestedStableField3.class); + + if (failed) { + throw new Error("TEST FAILED"); + } + } + + /* ==================================================== */ + + static class DefaultValue { + public @Stable char v; + + public static final DefaultValue c = new DefaultValue(); + public static char get() { return c.v; } + public static void test() throws Exception { + char val1 = get(); + c.v = 'a'; char val2 = get(); + assertEquals(val1, 0); + assertEquals(val2, 'a'); + } + } + + /* ==================================================== */ + + static class CharStable { + public @Stable char v; + + public static final CharStable c = new CharStable(); + public static char get() { return c.v; } + public static void test() throws Exception { + c.v = 'a'; char val1 = get(); + c.v = 'b'; char val2 = get(); + assertEquals(val1, 'a'); + assertEquals(val2, (isStableEnabled ? 'a' : 'b')); + } + } + + /* ==================================================== */ + + static class StaticCharStable { + public @Stable char v; + + public static final StaticCharStable c = new StaticCharStable(); + public static char get() { return c.v; } + public static void test() throws Exception { + c.v = 'a'; char val1 = get(); + c.v = 'b'; char val2 = get(); + assertEquals(val1, 'a'); + assertEquals(val2, (isStableEnabled ? 'a' : 'b')); + } + } + + /* ==================================================== */ + + static class VolatileCharStable { + public @Stable volatile char v; + + public static final VolatileCharStable c = new VolatileCharStable(); + public static char get() { return c.v; } + public static void test() throws Exception { + c.v = 'a'; char val1 = get(); + c.v = 'b'; char val2 = get(); + assertEquals(val1, 'a'); + assertEquals(val2, (isStableEnabled ? 'a' : 'b')); + } + } + + /* ==================================================== */ + // @Stable array == field && all components are stable + + static class CharArrayDim1 { + public @Stable char[] v; + + public static final CharArrayDim1 c = new CharArrayDim1(); + public static char get() { return c.v[0]; } + public static char get1() { return c.v[10]; } + public static char[] get2() { return c.v; } + public static void test() throws Exception { + { + c.v = new char[1]; c.v[0] = 'a'; char val1 = get(); + c.v[0] = 'b'; char val2 = get(); + assertEquals(val1, 'a'); + assertEquals(val2, (isStableEnabled ? 'a' : 'b')); + + c.v = new char[1]; c.v[0] = 'c'; char val3 = get(); + assertEquals(val3, (isStableEnabled ? 'a' : 'c')); + } + + { + c.v = new char[20]; c.v[10] = 'a'; char val1 = get1(); + c.v[10] = 'b'; char val2 = get1(); + assertEquals(val1, 'a'); + assertEquals(val2, (isStableEnabled ? 'a' : 'b')); + + c.v = new char[20]; c.v[10] = 'c'; char val3 = get1(); + assertEquals(val3, (isStableEnabled ? 'a' : 'c')); + } + + { + c.v = new char[1]; char[] val1 = get2(); + c.v = new char[1]; char[] val2 = get2(); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + } + } + + /* ==================================================== */ + + static class CharArrayDim2 { + public @Stable char[][] v; + + public static final CharArrayDim2 c = new CharArrayDim2(); + public static char get() { return c.v[0][0]; } + public static char[] get1() { return c.v[0]; } + public static char[][] get2() { return c.v; } + public static void test() throws Exception { + { + c.v = new char[1][1]; c.v[0][0] = 'a'; char val1 = get(); + c.v[0][0] = 'b'; char val2 = get(); + assertEquals(val1, 'a'); + assertEquals(val2, (isStableEnabled ? 'a' : 'b')); + + c.v = new char[1][1]; c.v[0][0] = 'c'; char val3 = get(); + assertEquals(val3, (isStableEnabled ? 'a' : 'c')); + + c.v[0] = new char[1]; c.v[0][0] = 'd'; char val4 = get(); + assertEquals(val4, (isStableEnabled ? 'a' : 'd')); + } + + { + c.v = new char[1][1]; char[] val1 = get1(); + c.v[0] = new char[1]; char[] val2 = get1(); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + + { + c.v = new char[1][1]; char[][] val1 = get2(); + c.v = new char[1][1]; char[][] val2 = get2(); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + } + } + + /* ==================================================== */ + + static class CharArrayDim3 { + public @Stable char[][][] v; + + public static final CharArrayDim3 c = new CharArrayDim3(); + public static char get() { return c.v[0][0][0]; } + public static char[] get1() { return c.v[0][0]; } + public static char[][] get2() { return c.v[0]; } + public static char[][][] get3() { return c.v; } + public static void test() throws Exception { + { + c.v = new char[1][1][1]; c.v[0][0][0] = 'a'; char val1 = get(); + c.v[0][0][0] = 'b'; char val2 = get(); + assertEquals(val1, 'a'); + assertEquals(val2, (isStableEnabled ? 'a' : 'b')); + + c.v = new char[1][1][1]; c.v[0][0][0] = 'c'; char val3 = get(); + assertEquals(val3, (isStableEnabled ? 'a' : 'c')); + + c.v[0] = new char[1][1]; c.v[0][0][0] = 'd'; char val4 = get(); + assertEquals(val4, (isStableEnabled ? 'a' : 'd')); + + c.v[0][0] = new char[1]; c.v[0][0][0] = 'e'; char val5 = get(); + assertEquals(val5, (isStableEnabled ? 'a' : 'e')); + } + + { + c.v = new char[1][1][1]; char[] val1 = get1(); + c.v[0][0] = new char[1]; char[] val2 = get1(); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + + { + c.v = new char[1][1][1]; char[][] val1 = get2(); + c.v[0] = new char[1][1]; char[][] val2 = get2(); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + + { + c.v = new char[1][1][1]; char[][][] val1 = get3(); + c.v = new char[1][1][1]; char[][][] val2 = get3(); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + } + } + + /* ==================================================== */ + + static class CharArrayDim4 { + public @Stable char[][][][] v; + + public static final CharArrayDim4 c = new CharArrayDim4(); + public static char get() { return c.v[0][0][0][0]; } + public static char[] get1() { return c.v[0][0][0]; } + public static char[][] get2() { return c.v[0][0]; } + public static char[][][] get3() { return c.v[0]; } + public static char[][][][] get4() { return c.v; } + public static void test() throws Exception { + { + c.v = new char[1][1][1][1]; c.v[0][0][0][0] = 'a'; char val1 = get(); + c.v[0][0][0][0] = 'b'; char val2 = get(); + assertEquals(val1, 'a'); + assertEquals(val2, (isStableEnabled ? 'a' : 'b')); + + c.v = new char[1][1][1][1]; c.v[0][0][0][0] = 'c'; char val3 = get(); + assertEquals(val3, (isStableEnabled ? 'a' : 'c')); + + c.v[0] = new char[1][1][1]; c.v[0][0][0][0] = 'd'; char val4 = get(); + assertEquals(val4, (isStableEnabled ? 'a' : 'd')); + + c.v[0][0] = new char[1][1]; c.v[0][0][0][0] = 'e'; char val5 = get(); + assertEquals(val5, (isStableEnabled ? 'a' : 'e')); + + c.v[0][0][0] = new char[1]; c.v[0][0][0][0] = 'f'; char val6 = get(); + assertEquals(val6, (isStableEnabled ? 'a' : 'f')); + } + + { + c.v = new char[1][1][1][1]; char[] val1 = get1(); + c.v[0][0][0] = new char[1]; char[] val2 = get1(); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + + { + c.v = new char[1][1][1][1]; char[][] val1 = get2(); + c.v[0][0] = new char[1][1]; char[][] val2 = get2(); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + + { + c.v = new char[1][1][1][1]; char[][][] val1 = get3(); + c.v[0] = new char[1][1][1]; char[][][] val2 = get3(); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + + { + c.v = new char[1][1][1][1]; char[][][][] val1 = get4(); + c.v = new char[1][1][1][1]; char[][][][] val2 = get4(); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + + } + } + + /* ==================================================== */ + // Dynamic Dim is higher than static + static class ObjectArrayLowerDim0 { + public @Stable Object v; + + public static final ObjectArrayLowerDim0 c = new ObjectArrayLowerDim0(); + public static char get() { return ((char[])c.v)[0]; } + public static char[] get1() { return (char[])c.v; } + + public static void test() throws Exception { + { + c.v = new char[1]; ((char[])c.v)[0] = 'a'; char val1 = get(); + ((char[])c.v)[0] = 'b'; char val2 = get(); + + assertEquals(val1, 'a'); + assertEquals(val2, 'b'); + } + + { + c.v = new char[1]; char[] val1 = get1(); + c.v = new char[1]; char[] val2 = get1(); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + } + } + + /* ==================================================== */ + + static class ObjectArrayLowerDim1 { + public @Stable Object[] v; + + public static final ObjectArrayLowerDim1 c = new ObjectArrayLowerDim1(); + public static char get() { return ((char[][])c.v)[0][0]; } + public static char[] get1() { return (char[])(c.v[0]); } + public static Object[] get2() { return c.v; } + + public static void test() throws Exception { + { + c.v = new char[1][1]; ((char[][])c.v)[0][0] = 'a'; char val1 = get(); + ((char[][])c.v)[0][0] = 'b'; char val2 = get(); + + assertEquals(val1, 'a'); + assertEquals(val2, 'b'); + } + + { + c.v = new char[1][1]; c.v[0] = new char[0]; char[] val1 = get1(); + c.v[0] = new char[0]; char[] val2 = get1(); + + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + + { + c.v = new char[0][0]; Object[] val1 = get2(); + c.v = new char[0][0]; Object[] val2 = get2(); + + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + } + } + + /* ==================================================== */ + + static class ObjectArrayLowerDim2 { + public @Stable Object[][] v; + + public static final ObjectArrayLowerDim2 c = new ObjectArrayLowerDim2(); + public static char get() { return ((char[][][])c.v)[0][0][0]; } + public static char[] get1() { return (char[])(c.v[0][0]); } + public static char[][] get2() { return (char[][])(c.v[0]); } + public static Object[][] get3() { return c.v; } + + public static void test() throws Exception { + { + c.v = new char[1][1][1]; ((char[][][])c.v)[0][0][0] = 'a'; char val1 = get(); + ((char[][][])c.v)[0][0][0] = 'b'; char val2 = get(); + + assertEquals(val1, 'a'); + assertEquals(val2, 'b'); + } + + { + c.v = new char[1][1][1]; c.v[0][0] = new char[0]; char[] val1 = get1(); + c.v[0][0] = new char[0]; char[] val2 = get1(); + + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + + { + c.v = new char[1][1][1]; c.v[0] = new char[0][0]; char[][] val1 = get2(); + c.v[0] = new char[0][0]; char[][] val2 = get2(); + + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + + { + c.v = new char[0][0][0]; Object[][] val1 = get3(); + c.v = new char[0][0][0]; Object[][] val2 = get3(); + + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + } + } + + /* ==================================================== */ + + static class NestedStableField { + static class A { + public @Stable char a; + + } + public @Stable A v; + + public static final NestedStableField c = new NestedStableField(); + public static A get() { return c.v; } + public static char get1() { return get().a; } + + public static void test() throws Exception { + { + c.v = new A(); c.v.a = 'a'; A val1 = get(); + c.v.a = 'b'; A val2 = get(); + + assertEquals(val1.a, 'b'); + assertEquals(val2.a, 'b'); + } + + { + c.v = new A(); c.v.a = 'a'; char val1 = get1(); + c.v.a = 'b'; char val2 = get1(); + c.v = new A(); c.v.a = 'c'; char val3 = get1(); + + assertEquals(val1, 'a'); + assertEquals(val2, (isStableEnabled ? 'a' : 'b')); + assertEquals(val3, (isStableEnabled ? 'a' : 'c')); + } + } + } + + /* ==================================================== */ + + static class NestedStableField1 { + static class A { + public @Stable char a; + public @Stable A next; + } + public @Stable A v; + + public static final NestedStableField1 c = new NestedStableField1(); + public static A get() { return c.v.next.next.next.next.next.next.next; } + public static char get1() { return get().a; } + + public static void test() throws Exception { + { + c.v = new A(); c.v.next = new A(); c.v.next.next = c.v; + c.v.a = 'a'; c.v.next.a = 'a'; A val1 = get(); + c.v.a = 'b'; c.v.next.a = 'b'; A val2 = get(); + + assertEquals(val1.a, 'b'); + assertEquals(val2.a, 'b'); + } + + { + c.v = new A(); c.v.next = c.v; + c.v.a = 'a'; char val1 = get1(); + c.v.a = 'b'; char val2 = get1(); + c.v = new A(); c.v.next = c.v; + c.v.a = 'c'; char val3 = get1(); + + assertEquals(val1, 'a'); + assertEquals(val2, (isStableEnabled ? 'a' : 'b')); + assertEquals(val3, (isStableEnabled ? 'a' : 'c')); + } + } + } + /* ==================================================== */ + + static class NestedStableField2 { + static class A { + public @Stable char a; + public @Stable A left; + public A right; + } + + public @Stable A v; + + public static final NestedStableField2 c = new NestedStableField2(); + public static char get() { return c.v.left.left.left.a; } + public static char get1() { return c.v.left.left.right.left.a; } + + public static void test() throws Exception { + { + c.v = new A(); c.v.left = c.v.right = c.v; + c.v.a = 'a'; char val1 = get(); char val2 = get1(); + c.v.a = 'b'; char val3 = get(); char val4 = get1(); + + assertEquals(val1, 'a'); + assertEquals(val3, (isStableEnabled ? 'a' : 'b')); + + assertEquals(val2, 'a'); + assertEquals(val4, 'b'); + } + } + } + + /* ==================================================== */ + + static class NestedStableField3 { + static class A { + public @Stable char a; + public @Stable A[] left; + public A[] right; + } + + public @Stable A[] v; + + public static final NestedStableField3 c = new NestedStableField3(); + public static char get() { return c.v[0].left[1].left[0].left[1].a; } + public static char get1() { return c.v[1].left[0].left[1].right[0].left[1].a; } + + public static void test() throws Exception { + { + A elem = new A(); + c.v = new A[] { elem, elem }; c.v[0].left = c.v[0].right = c.v; + elem.a = 'a'; char val1 = get(); char val2 = get1(); + elem.a = 'b'; char val3 = get(); char val4 = get1(); + + assertEquals(val1, 'a'); + assertEquals(val3, (isStableEnabled ? 'a' : 'b')); + + assertEquals(val2, 'a'); + assertEquals(val4, 'b'); + } + } + } + + /* ==================================================== */ + // Auxiliary methods + static void assertEquals(int i, int j) { if (i != j) throw new AssertionError(i + " != " + j); } + static void assertTrue(boolean b) { if (!b) throw new AssertionError(); } + + static boolean failed = false; + + public static void run(Class test) { + Throwable ex = null; + System.out.print(test.getName()+": "); + try { + test.getMethod("test").invoke(null); + } catch (InvocationTargetException e) { + ex = e.getCause(); + } catch (Throwable e) { + ex = e; + } finally { + if (ex == null) { + System.out.println("PASSED"); + } else { + failed = true; + System.out.println("FAILED"); + ex.printStackTrace(System.out); + } + } + } + + static final boolean isStableEnabled; + static { + HotSpotDiagnosticMXBean diagnostic + = ManagementFactoryHelper.getDiagnosticMXBean(); + VMOption tmp; + try { + tmp = diagnostic.getVMOption("FoldStableValues"); + } catch (IllegalArgumentException e) { + tmp = null; + } + isStableEnabled = (tmp == null ? false : Boolean.parseBoolean(tmp.getValue())); + } +} diff --git a/hotspot/test/compiler/stable/TestStableDouble.java b/hotspot/test/compiler/stable/TestStableDouble.java new file mode 100644 index 00000000000..b656acbd1ae --- /dev/null +++ b/hotspot/test/compiler/stable/TestStableDouble.java @@ -0,0 +1,632 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test TestStableDouble + * @summary tests on stable fields and arrays + * @library /testlibrary + * @compile -XDignore.symbol.file TestStableDouble.java + * @run main ClassFileInstaller + * java/lang/invoke/TestStableDouble + * java/lang/invoke/TestStableDouble$DoubleStable + * java/lang/invoke/TestStableDouble$StaticDoubleStable + * java/lang/invoke/TestStableDouble$VolatileDoubleStable + * java/lang/invoke/TestStableDouble$DoubleArrayDim1 + * java/lang/invoke/TestStableDouble$DoubleArrayDim2 + * java/lang/invoke/TestStableDouble$DoubleArrayDim3 + * java/lang/invoke/TestStableDouble$DoubleArrayDim4 + * java/lang/invoke/TestStableDouble$ObjectArrayLowerDim0 + * java/lang/invoke/TestStableDouble$ObjectArrayLowerDim1 + * java/lang/invoke/TestStableDouble$NestedStableField + * java/lang/invoke/TestStableDouble$NestedStableField$A + * java/lang/invoke/TestStableDouble$NestedStableField1 + * java/lang/invoke/TestStableDouble$NestedStableField1$A + * java/lang/invoke/TestStableDouble$NestedStableField2 + * java/lang/invoke/TestStableDouble$NestedStableField2$A + * java/lang/invoke/TestStableDouble$NestedStableField3 + * java/lang/invoke/TestStableDouble$NestedStableField3$A + * java/lang/invoke/TestStableDouble$DefaultValue + * java/lang/invoke/TestStableDouble$ObjectArrayLowerDim2 + * + * @run main/othervm -Xbootclasspath/a:. -XX:+IgnoreUnrecognizedVMOptions + * -XX:+UnlockDiagnosticVMOptions -XX:+FoldStableValues -XX:+UseCompressedOop + * -server -XX:-TieredCompilation -Xcomp + * -XX:CompileOnly=::get,::get1,::get2,::get3,::get4 + * java.lang.invoke.TestStableDouble + * + * @run main/othervm -Xbootclasspath/a:. -XX:+IgnoreUnrecognizedVMOptions + * -XX:+UnlockDiagnosticVMOptions -XX:+FoldStableValues -XX:-UseCompressedOop + * -server -XX:-TieredCompilation -Xcomp + * -XX:CompileOnly=::get,::get1,::get2,::get3,::get4 + * java.lang.invoke.TestStableDouble + * + * @run main/othervm -Xbootclasspath/a:. -XX:+IgnoreUnrecognizedVMOptions + * -XX:+UnlockDiagnosticVMOptions -XX:-FoldStableValues -XX:+UseCompressedOop + * -server -XX:-TieredCompilation -Xcomp + * -XX:CompileOnly=::get,::get1,::get2,::get3,::get4 + * java.lang.invoke.TestStableDouble + * + * @run main/othervm -Xbootclasspath/a:. -XX:+IgnoreUnrecognizedVMOptions + * -XX:+UnlockDiagnosticVMOptions -XX:-FoldStableValues -XX:-UseCompressedOop + * -server -XX:-TieredCompilation -Xcomp + * -XX:CompileOnly=::get,::get1,::get2,::get3,::get4 + * java.lang.invoke.TestStableDouble + */ +package java.lang.invoke; + +import com.sun.management.HotSpotDiagnosticMXBean; +import com.sun.management.VMOption; +import sun.management.ManagementFactoryHelper; +import java.lang.reflect.InvocationTargetException; + +public class TestStableDouble { + public static void main(String[] args) throws Exception { + System.out.println("@Stable enabled: "+isStableEnabled); + System.out.println(); + + run(DefaultValue.class); + run(DoubleStable.class); + run(StaticDoubleStable.class); + run(VolatileDoubleStable.class); + + // @Stable arrays: Dim 1-4 + run(DoubleArrayDim1.class); + run(DoubleArrayDim2.class); + run(DoubleArrayDim3.class); + run(DoubleArrayDim4.class); + + // @Stable Object field: dynamic arrays + run(ObjectArrayLowerDim0.class); + run(ObjectArrayLowerDim1.class); + run(ObjectArrayLowerDim2.class); + + // Nested @Stable fields + run(NestedStableField.class); + run(NestedStableField1.class); + run(NestedStableField2.class); + run(NestedStableField3.class); + + if (failed) { + throw new Error("TEST FAILED"); + } + } + + /* ==================================================== */ + + static class DefaultValue { + public @Stable double v; + + public static final DefaultValue c = new DefaultValue(); + public static double get() { return c.v; } + public static void test() throws Exception { + double val1 = get(); + c.v = 1.0; double val2 = get(); + assertEquals(val1, 0); + assertEquals(val2, 1.0); + } + } + + /* ==================================================== */ + + static class DoubleStable { + public @Stable double v; + + public static final DoubleStable c = new DoubleStable(); + public static double get() { return c.v; } + public static void test() throws Exception { + c.v = 1.0; double val1 = get(); + c.v = Double.MAX_VALUE; double val2 = get(); + assertEquals(val1, 1.0); + assertEquals(val2, (isStableEnabled ? 1.0 : Double.MAX_VALUE)); + } + } + + /* ==================================================== */ + + static class StaticDoubleStable { + public static @Stable double v; + + public static final StaticDoubleStable c = new StaticDoubleStable(); + public static double get() { return c.v; } + public static void test() throws Exception { + c.v = 1.0; double val1 = get(); + c.v = Double.MAX_VALUE; double val2 = get(); + assertEquals(val1, 1.0); + assertEquals(val2, (isStableEnabled ? 1.0 : Double.MAX_VALUE)); + } + } + + /* ==================================================== */ + + static class VolatileDoubleStable { + public @Stable double v; + + public static final VolatileDoubleStable c = new VolatileDoubleStable(); + public static double get() { return c.v; } + public static void test() throws Exception { + c.v = 1.0; double val1 = get(); + c.v = Double.MAX_VALUE; double val2 = get(); + assertEquals(val1, 1.0); + assertEquals(val2, (isStableEnabled ? 1.0 : Double.MAX_VALUE)); + } + } + + /* ==================================================== */ + // @Stable array == field && all components are stable + + static class DoubleArrayDim1 { + public @Stable double[] v; + + public static final DoubleArrayDim1 c = new DoubleArrayDim1(); + public static double get() { return c.v[0]; } + public static double get1() { return c.v[10]; } + public static double[] get2() { return c.v; } + public static void test() throws Exception { + { + c.v = new double[1]; c.v[0] = 1.0; double val1 = get(); + c.v[0] = 2.0; double val2 = get(); + assertEquals(val1, 1.0); + assertEquals(val2, (isStableEnabled ? 1.0 : 2.0)); + + c.v = new double[1]; c.v[0] = 3.0; double val3 = get(); + assertEquals(val3, (isStableEnabled ? 1.0 : 3.0)); + } + + { + c.v = new double[20]; c.v[10] = 1.0; double val1 = get1(); + c.v[10] = 2.0; double val2 = get1(); + assertEquals(val1, 1.0); + assertEquals(val2, (isStableEnabled ? 1.0 : 2.0)); + + c.v = new double[20]; c.v[10] = 3.0; double val3 = get1(); + assertEquals(val3, (isStableEnabled ? 1.0 : 3.0)); + } + + { + c.v = new double[1]; double[] val1 = get2(); + c.v = new double[1]; double[] val2 = get2(); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + } + } + + /* ==================================================== */ + + static class DoubleArrayDim2 { + public @Stable double[][] v; + + public static final DoubleArrayDim2 c = new DoubleArrayDim2(); + public static double get() { return c.v[0][0]; } + public static double[] get1() { return c.v[0]; } + public static double[][] get2() { return c.v; } + public static void test() throws Exception { + { + c.v = new double[1][1]; c.v[0][0] = 1.0; double val1 = get(); + c.v[0][0] = 2.0; double val2 = get(); + assertEquals(val1, 1.0); + assertEquals(val2, (isStableEnabled ? 1.0 : 2.0)); + + c.v = new double[1][1]; c.v[0][0] = 3.0; double val3 = get(); + assertEquals(val3, (isStableEnabled ? 1.0 : 3.0)); + + c.v[0] = new double[1]; c.v[0][0] = 4.0; double val4 = get(); + assertEquals(val4, (isStableEnabled ? 1.0 : 4.0)); + } + + { + c.v = new double[1][1]; double[] val1 = get1(); + c.v[0] = new double[1]; double[] val2 = get1(); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + + { + c.v = new double[1][1]; double[][] val1 = get2(); + c.v = new double[1][1]; double[][] val2 = get2(); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + } + } + + /* ==================================================== */ + + static class DoubleArrayDim3 { + public @Stable double[][][] v; + + public static final DoubleArrayDim3 c = new DoubleArrayDim3(); + public static double get() { return c.v[0][0][0]; } + public static double[] get1() { return c.v[0][0]; } + public static double[][] get2() { return c.v[0]; } + public static double[][][] get3() { return c.v; } + public static void test() throws Exception { + { + c.v = new double[1][1][1]; c.v[0][0][0] = 1.0; double val1 = get(); + c.v[0][0][0] = 2.0; double val2 = get(); + assertEquals(val1, 1.0); + assertEquals(val2, (isStableEnabled ? 1.0 : 2.0)); + + c.v = new double[1][1][1]; c.v[0][0][0] = 3.0; double val3 = get(); + assertEquals(val3, (isStableEnabled ? 1.0 : 3.0)); + + c.v[0] = new double[1][1]; c.v[0][0][0] = 4.0; double val4 = get(); + assertEquals(val4, (isStableEnabled ? 1.0 : 4.0)); + + c.v[0][0] = new double[1]; c.v[0][0][0] = 5.0; double val5 = get(); + assertEquals(val5, (isStableEnabled ? 1.0 : 5.0)); + } + + { + c.v = new double[1][1][1]; double[] val1 = get1(); + c.v[0][0] = new double[1]; double[] val2 = get1(); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + + { + c.v = new double[1][1][1]; double[][] val1 = get2(); + c.v[0] = new double[1][1]; double[][] val2 = get2(); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + + { + c.v = new double[1][1][1]; double[][][] val1 = get3(); + c.v = new double[1][1][1]; double[][][] val2 = get3(); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + } + } + + /* ==================================================== */ + + static class DoubleArrayDim4 { + public @Stable double[][][][] v; + + public static final DoubleArrayDim4 c = new DoubleArrayDim4(); + public static double get() { return c.v[0][0][0][0]; } + public static double[] get1() { return c.v[0][0][0]; } + public static double[][] get2() { return c.v[0][0]; } + public static double[][][] get3() { return c.v[0]; } + public static double[][][][] get4() { return c.v; } + public static void test() throws Exception { + { + c.v = new double[1][1][1][1]; c.v[0][0][0][0] = 1.0; double val1 = get(); + c.v[0][0][0][0] = 2.0; double val2 = get(); + assertEquals(val1, 1.0); + assertEquals(val2, (isStableEnabled ? 1.0 : 2.0)); + + c.v = new double[1][1][1][1]; c.v[0][0][0][0] = 3.0; double val3 = get(); + assertEquals(val3, (isStableEnabled ? 1.0 : 3.0)); + + c.v[0] = new double[1][1][1]; c.v[0][0][0][0] = 4.0; double val4 = get(); + assertEquals(val4, (isStableEnabled ? 1.0 : 4.0)); + + c.v[0][0] = new double[1][1]; c.v[0][0][0][0] = 5.0; double val5 = get(); + assertEquals(val5, (isStableEnabled ? 1.0 : 5.0)); + + c.v[0][0][0] = new double[1]; c.v[0][0][0][0] = 6.0; double val6 = get(); + assertEquals(val6, (isStableEnabled ? 1.0 : 6.0)); + } + + { + c.v = new double[1][1][1][1]; double[] val1 = get1(); + c.v[0][0][0] = new double[1]; double[] val2 = get1(); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + + { + c.v = new double[1][1][1][1]; double[][] val1 = get2(); + c.v[0][0] = new double[1][1]; double[][] val2 = get2(); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + + { + c.v = new double[1][1][1][1]; double[][][] val1 = get3(); + c.v[0] = new double[1][1][1]; double[][][] val2 = get3(); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + + { + c.v = new double[1][1][1][1]; double[][][][] val1 = get4(); + c.v = new double[1][1][1][1]; double[][][][] val2 = get4(); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + + } + } + + /* ==================================================== */ + // Dynamic Dim is higher than static + + static class ObjectArrayLowerDim0 { + public @Stable Object v; + + public static final ObjectArrayLowerDim0 c = new ObjectArrayLowerDim0(); + public static double get() { return ((double[])c.v)[0]; } + public static double[] get1() { return (double[])c.v; } + + public static void test() throws Exception { + { + c.v = new double[1]; ((double[])c.v)[0] = 1.0; double val1 = get(); + ((double[])c.v)[0] = 2.0; double val2 = get(); + + assertEquals(val1, 1.0); + assertEquals(val2, 2.0); + } + + { + c.v = new double[1]; double[] val1 = get1(); + c.v = new double[1]; double[] val2 = get1(); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + } + } + + /* ==================================================== */ + + static class ObjectArrayLowerDim1 { + public @Stable Object[] v; + + public static final ObjectArrayLowerDim1 c = new ObjectArrayLowerDim1(); + public static double get() { return ((double[][])c.v)[0][0]; } + public static double[] get1() { return (double[])(c.v[0]); } + public static Object[] get2() { return c.v; } + + public static void test() throws Exception { + { + c.v = new double[1][1]; ((double[][])c.v)[0][0] = 1.0; double val1 = get(); + ((double[][])c.v)[0][0] = 2.0; double val2 = get(); + + assertEquals(val1, 1.0); + assertEquals(val2, 2.0); + } + + { + c.v = new double[1][1]; c.v[0] = new double[0]; double[] val1 = get1(); + c.v[0] = new double[0]; double[] val2 = get1(); + + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + + { + c.v = new double[0][0]; Object[] val1 = get2(); + c.v = new double[0][0]; Object[] val2 = get2(); + + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + } + } + + /* ==================================================== */ + + static class ObjectArrayLowerDim2 { + public @Stable Object[][] v; + + public static final ObjectArrayLowerDim2 c = new ObjectArrayLowerDim2(); + public static double get() { return ((double[][][])c.v)[0][0][0]; } + public static double[] get1() { return (double[])(c.v[0][0]); } + public static double[][] get2() { return (double[][])(c.v[0]); } + public static Object[][] get3() { return c.v; } + + public static void test() throws Exception { + { + c.v = new double[1][1][1]; ((double[][][])c.v)[0][0][0] = 1.0; double val1 = get(); + ((double[][][])c.v)[0][0][0] = 2.0; double val2 = get(); + + assertEquals(val1, 1.0); + assertEquals(val2, 2.0); + } + + { + c.v = new double[1][1][1]; c.v[0][0] = new double[0]; double[] val1 = get1(); + c.v[0][0] = new double[0]; double[] val2 = get1(); + + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + + { + c.v = new double[1][1][1]; c.v[0] = new double[0][0]; double[][] val1 = get2(); + c.v[0] = new double[0][0]; double[][] val2 = get2(); + + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + + { + c.v = new double[0][0][0]; Object[][] val1 = get3(); + c.v = new double[0][0][0]; Object[][] val2 = get3(); + + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + } + } + + /* ==================================================== */ + + static class NestedStableField { + static class A { + public @Stable double a; + + } + public @Stable A v; + + public static final NestedStableField c = new NestedStableField(); + public static A get() { return c.v; } + public static double get1() { return get().a; } + + public static void test() throws Exception { + { + c.v = new A(); c.v.a = 1.0; A val1 = get(); + c.v.a = 2.0; A val2 = get(); + + assertEquals(val1.a, 2.0); + assertEquals(val2.a, 2.0); + } + + { + c.v = new A(); c.v.a = 1.0; double val1 = get1(); + c.v.a = 2.0; double val2 = get1(); + c.v = new A(); c.v.a = 3.0; double val3 = get1(); + + assertEquals(val1, 1.0); + assertEquals(val2, (isStableEnabled ? 1.0 : 2.0)); + assertEquals(val3, (isStableEnabled ? 1.0 : 3.0)); + } + } + } + + /* ==================================================== */ + + static class NestedStableField1 { + static class A { + public @Stable double a; + public @Stable A next; + } + public @Stable A v; + + public static final NestedStableField1 c = new NestedStableField1(); + public static A get() { return c.v.next.next.next.next.next.next.next; } + public static double get1() { return get().a; } + + public static void test() throws Exception { + { + c.v = new A(); c.v.next = new A(); c.v.next.next = c.v; + c.v.a = 1.0; c.v.next.a = 1.0; A val1 = get(); + c.v.a = 2.0; c.v.next.a = 2.0; A val2 = get(); + + assertEquals(val1.a, 2.0); + assertEquals(val2.a, 2.0); + } + + { + c.v = new A(); c.v.next = c.v; + c.v.a = 1.0; double val1 = get1(); + c.v.a = 2.0; double val2 = get1(); + c.v = new A(); c.v.next = c.v; + c.v.a = 3.0; double val3 = get1(); + + assertEquals(val1, 1.0); + assertEquals(val2, (isStableEnabled ? 1.0 : 2.0)); + assertEquals(val3, (isStableEnabled ? 1.0 : 3.0)); + } + } + } + /* ==================================================== */ + + static class NestedStableField2 { + static class A { + public @Stable double a; + public @Stable A left; + public A right; + } + + public @Stable A v; + + public static final NestedStableField2 c = new NestedStableField2(); + public static double get() { return c.v.left.left.left.a; } + public static double get1() { return c.v.left.left.right.left.a; } + + public static void test() throws Exception { + { + c.v = new A(); c.v.left = c.v.right = c.v; + c.v.a = 1.0; double val1 = get(); double val2 = get1(); + c.v.a = 2.0; double val3 = get(); double val4 = get1(); + + assertEquals(val1, 1.0); + assertEquals(val3, (isStableEnabled ? 1.0 : 2.0)); + + assertEquals(val2, 1.0); + assertEquals(val4, 2.0); + } + } + } + + /* ==================================================== */ + + static class NestedStableField3 { + static class A { + public @Stable double a; + public @Stable A[] left; + public A[] right; + } + + public @Stable A[] v; + + public static final NestedStableField3 c = new NestedStableField3(); + public static double get() { return c.v[0].left[1].left[0].left[1].a; } + public static double get1() { return c.v[1].left[0].left[1].right[0].left[1].a; } + + public static void test() throws Exception { + { + A elem = new A(); + c.v = new A[] { elem, elem }; c.v[0].left = c.v[0].right = c.v; + elem.a = 1.0; double val1 = get(); double val2 = get1(); + elem.a = 2.0; double val3 = get(); double val4 = get1(); + + assertEquals(val1, 1.0); + assertEquals(val3, (isStableEnabled ? 1.0 : 2.0)); + + assertEquals(val2, 1.0); + assertEquals(val4, 2.0); + } + } + } + + /* ==================================================== */ + // Auxiliary methods + static void assertEquals(double i, double j) { if (i != j) throw new AssertionError(i + " != " + j); } + static void assertTrue(boolean b) { if (!b) throw new AssertionError(); } + + static boolean failed = false; + + public static void run(Class test) { + Throwable ex = null; + System.out.print(test.getName()+": "); + try { + test.getMethod("test").invoke(null); + } catch (InvocationTargetException e) { + ex = e.getCause(); + } catch (Throwable e) { + ex = e; + } finally { + if (ex == null) { + System.out.println("PASSED"); + } else { + failed = true; + System.out.println("FAILED"); + ex.printStackTrace(System.out); + } + } + } + + static final boolean isStableEnabled; + static { + HotSpotDiagnosticMXBean diagnostic + = ManagementFactoryHelper.getDiagnosticMXBean(); + VMOption tmp; + try { + tmp = diagnostic.getVMOption("FoldStableValues"); + } catch (IllegalArgumentException e) { + tmp = null; + } + isStableEnabled = (tmp == null ? false : Boolean.parseBoolean(tmp.getValue())); + } +} diff --git a/hotspot/test/compiler/stable/TestStableFloat.java b/hotspot/test/compiler/stable/TestStableFloat.java new file mode 100644 index 00000000000..ab1c3f0be1f --- /dev/null +++ b/hotspot/test/compiler/stable/TestStableFloat.java @@ -0,0 +1,632 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test TestStableFloat + * @summary tests on stable fields and arrays + * @library /testlibrary + * @compile -XDignore.symbol.file TestStableFloat.java + * @run main ClassFileInstaller + * java/lang/invoke/TestStableFloat + * java/lang/invoke/TestStableFloat$FloatStable + * java/lang/invoke/TestStableFloat$StaticFloatStable + * java/lang/invoke/TestStableFloat$VolatileFloatStable + * java/lang/invoke/TestStableFloat$FloatArrayDim1 + * java/lang/invoke/TestStableFloat$FloatArrayDim2 + * java/lang/invoke/TestStableFloat$FloatArrayDim3 + * java/lang/invoke/TestStableFloat$FloatArrayDim4 + * java/lang/invoke/TestStableFloat$ObjectArrayLowerDim0 + * java/lang/invoke/TestStableFloat$ObjectArrayLowerDim1 + * java/lang/invoke/TestStableFloat$NestedStableField + * java/lang/invoke/TestStableFloat$NestedStableField$A + * java/lang/invoke/TestStableFloat$NestedStableField1 + * java/lang/invoke/TestStableFloat$NestedStableField1$A + * java/lang/invoke/TestStableFloat$NestedStableField2 + * java/lang/invoke/TestStableFloat$NestedStableField2$A + * java/lang/invoke/TestStableFloat$NestedStableField3 + * java/lang/invoke/TestStableFloat$NestedStableField3$A + * java/lang/invoke/TestStableFloat$DefaultValue + * java/lang/invoke/TestStableFloat$ObjectArrayLowerDim2 + * + * @run main/othervm -Xbootclasspath/a:. -XX:+IgnoreUnrecognizedVMOptions + * -XX:+UnlockDiagnosticVMOptions -XX:+FoldStableValues -XX:+UseCompressedOop + * -server -XX:-TieredCompilation -Xcomp + * -XX:CompileOnly=::get,::get1,::get2,::get3,::get4 + * java.lang.invoke.TestStableFloat + * + * @run main/othervm -Xbootclasspath/a:. -XX:+IgnoreUnrecognizedVMOptions + * -XX:+UnlockDiagnosticVMOptions -XX:+FoldStableValues -XX:-UseCompressedOop + * -server -XX:-TieredCompilation -Xcomp + * -XX:CompileOnly=::get,::get1,::get2,::get3,::get4 + * java.lang.invoke.TestStableFloat + * + * @run main/othervm -Xbootclasspath/a:. -XX:+IgnoreUnrecognizedVMOptions + * -XX:+UnlockDiagnosticVMOptions -XX:-FoldStableValues -XX:+UseCompressedOop + * -server -XX:-TieredCompilation -Xcomp + * -XX:CompileOnly=::get,::get1,::get2,::get3,::get4 + * java.lang.invoke.TestStableFloat + * + * @run main/othervm -Xbootclasspath/a:. -XX:+IgnoreUnrecognizedVMOptions + * -XX:+UnlockDiagnosticVMOptions -XX:-FoldStableValues -XX:-UseCompressedOop + * -server -XX:-TieredCompilation -Xcomp + * -XX:CompileOnly=::get,::get1,::get2,::get3,::get4 + * java.lang.invoke.TestStableFloat + */ +package java.lang.invoke; + +import com.sun.management.HotSpotDiagnosticMXBean; +import com.sun.management.VMOption; +import sun.management.ManagementFactoryHelper; +import java.lang.reflect.InvocationTargetException; + +public class TestStableFloat { + public static void main(String[] args) throws Exception { + System.out.println("@Stable enabled: "+isStableEnabled); + System.out.println(); + + run(DefaultValue.class); + run(FloatStable.class); + run(StaticFloatStable.class); + run(VolatileFloatStable.class); + + // @Stable arrays: Dim 1-4 + run(FloatArrayDim1.class); + run(FloatArrayDim2.class); + run(FloatArrayDim3.class); + run(FloatArrayDim4.class); + + // @Stable Object field: dynamic arrays + run(ObjectArrayLowerDim0.class); + run(ObjectArrayLowerDim1.class); + run(ObjectArrayLowerDim2.class); + + // Nested @Stable fields + run(NestedStableField.class); + run(NestedStableField1.class); + run(NestedStableField2.class); + run(NestedStableField3.class); + + if (failed) { + throw new Error("TEST FAILED"); + } + } + + /* ==================================================== */ + + static class DefaultValue { + public @Stable float v; + + public static final DefaultValue c = new DefaultValue(); + public static float get() { return c.v; } + public static void test() throws Exception { + float val1 = get(); + c.v = 1.0F; float val2 = get(); + assertEquals(val1, 0F); + assertEquals(val2, 1.0F); + } + } + + /* ==================================================== */ + + static class FloatStable { + public @Stable float v; + + public static final FloatStable c = new FloatStable(); + public static float get() { return c.v; } + public static void test() throws Exception { + c.v = 1.0F; float val1 = get(); + c.v = 2.0F; float val2 = get(); + assertEquals(val1, 1.0F); + assertEquals(val2, (isStableEnabled ? 1.0F : 2.0F)); + } + } + + /* ==================================================== */ + + static class StaticFloatStable { + public static @Stable float v; + + public static final StaticFloatStable c = new StaticFloatStable(); + public static float get() { return c.v; } + public static void test() throws Exception { + c.v = 1.0F; float val1 = get(); + c.v = 2.0F; float val2 = get(); + assertEquals(val1, 1.0F); + assertEquals(val2, (isStableEnabled ? 1.0F : 2.0F)); + } + } + + /* ==================================================== */ + + static class VolatileFloatStable { + public @Stable volatile float v; + + public static final VolatileFloatStable c = new VolatileFloatStable(); + public static float get() { return c.v; } + public static void test() throws Exception { + c.v = 1.0F; float val1 = get(); + c.v = 2.0F; float val2 = get(); + assertEquals(val1, 1.0F); + assertEquals(val2, (isStableEnabled ? 1.0F : 2.0F)); + } + } + + /* ==================================================== */ + // @Stable array == field && all components are stable + + static class FloatArrayDim1 { + public @Stable float[] v; + + public static final FloatArrayDim1 c = new FloatArrayDim1(); + public static float get() { return c.v[0]; } + public static float get1() { return c.v[10]; } + public static float[] get2() { return c.v; } + public static void test() throws Exception { + { + c.v = new float[1]; c.v[0] = 1.0F; float val1 = get(); + c.v[0] = 2.0F; float val2 = get(); + assertEquals(val1, 1.0F); + assertEquals(val2, (isStableEnabled ? 1.0F : 2.0F)); + + c.v = new float[1]; c.v[0] = 3.0F; float val3 = get(); + assertEquals(val3, (isStableEnabled ? 1.0F : 3.0F)); + } + + { + c.v = new float[20]; c.v[10] = 1.0F; float val1 = get1(); + c.v[10] = 2.0F; float val2 = get1(); + assertEquals(val1, 1.0F); + assertEquals(val2, (isStableEnabled ? 1.0F : 2.0F)); + + c.v = new float[20]; c.v[10] = 3.0F; float val3 = get1(); + assertEquals(val3, (isStableEnabled ? 1.0F : 3.0F)); + } + + { + c.v = new float[1]; float[] val1 = get2(); + c.v = new float[1]; float[] val2 = get2(); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + } + } + + /* ==================================================== */ + + static class FloatArrayDim2 { + public @Stable float[][] v; + + public static final FloatArrayDim2 c = new FloatArrayDim2(); + public static float get() { return c.v[0][0]; } + public static float[] get1() { return c.v[0]; } + public static float[][] get2() { return c.v; } + public static void test() throws Exception { + { + c.v = new float[1][1]; c.v[0][0] = 1.0F; float val1 = get(); + c.v[0][0] = 2.0F; float val2 = get(); + assertEquals(val1, 1.0F); + assertEquals(val2, (isStableEnabled ? 1.0F : 2.0F)); + + c.v = new float[1][1]; c.v[0][0] = 3.0F; float val3 = get(); + assertEquals(val3, (isStableEnabled ? 1.0F : 3.0F)); + + c.v[0] = new float[1]; c.v[0][0] = 4.0F; float val4 = get(); + assertEquals(val4, (isStableEnabled ? 1.0F : 4.0F)); + } + + { + c.v = new float[1][1]; float[] val1 = get1(); + c.v[0] = new float[1]; float[] val2 = get1(); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + + { + c.v = new float[1][1]; float[][] val1 = get2(); + c.v = new float[1][1]; float[][] val2 = get2(); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + } + } + + /* ==================================================== */ + + static class FloatArrayDim3 { + public @Stable float[][][] v; + + public static final FloatArrayDim3 c = new FloatArrayDim3(); + public static float get() { return c.v[0][0][0]; } + public static float[] get1() { return c.v[0][0]; } + public static float[][] get2() { return c.v[0]; } + public static float[][][] get3() { return c.v; } + public static void test() throws Exception { + { + c.v = new float[1][1][1]; c.v[0][0][0] = 1.0F; float val1 = get(); + c.v[0][0][0] = 2.0F; float val2 = get(); + assertEquals(val1, 1.0F); + assertEquals(val2, (isStableEnabled ? 1.0F : 2.0F)); + + c.v = new float[1][1][1]; c.v[0][0][0] = 3.0F; float val3 = get(); + assertEquals(val3, (isStableEnabled ? 1.0F : 3.0F)); + + c.v[0] = new float[1][1]; c.v[0][0][0] = 4.0F; float val4 = get(); + assertEquals(val4, (isStableEnabled ? 1.0F : 4.0F)); + + c.v[0][0] = new float[1]; c.v[0][0][0] = 5.0F; float val5 = get(); + assertEquals(val5, (isStableEnabled ? 1.0F : 5.0F)); + } + + { + c.v = new float[1][1][1]; float[] val1 = get1(); + c.v[0][0] = new float[1]; float[] val2 = get1(); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + + { + c.v = new float[1][1][1]; float[][] val1 = get2(); + c.v[0] = new float[1][1]; float[][] val2 = get2(); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + + { + c.v = new float[1][1][1]; float[][][] val1 = get3(); + c.v = new float[1][1][1]; float[][][] val2 = get3(); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + } + } + + /* ==================================================== */ + + static class FloatArrayDim4 { + public @Stable float[][][][] v; + + public static final FloatArrayDim4 c = new FloatArrayDim4(); + public static float get() { return c.v[0][0][0][0]; } + public static float[] get1() { return c.v[0][0][0]; } + public static float[][] get2() { return c.v[0][0]; } + public static float[][][] get3() { return c.v[0]; } + public static float[][][][] get4() { return c.v; } + public static void test() throws Exception { + { + c.v = new float[1][1][1][1]; c.v[0][0][0][0] = 1.0F; float val1 = get(); + c.v[0][0][0][0] = 2.0F; float val2 = get(); + assertEquals(val1, 1.0F); + assertEquals(val2, (isStableEnabled ? 1.0F : 2.0F)); + + c.v = new float[1][1][1][1]; c.v[0][0][0][0] = 3.0F; float val3 = get(); + assertEquals(val3, (isStableEnabled ? 1.0F : 3.0F)); + + c.v[0] = new float[1][1][1]; c.v[0][0][0][0] = 4.0F; float val4 = get(); + assertEquals(val4, (isStableEnabled ? 1.0F : 4.0F)); + + c.v[0][0] = new float[1][1]; c.v[0][0][0][0] = 5.0F; float val5 = get(); + assertEquals(val5, (isStableEnabled ? 1.0F : 5.0F)); + + c.v[0][0][0] = new float[1]; c.v[0][0][0][0] = 6.0F; float val6 = get(); + assertEquals(val6, (isStableEnabled ? 1.0F : 6.0F)); + } + + { + c.v = new float[1][1][1][1]; float[] val1 = get1(); + c.v[0][0][0] = new float[1]; float[] val2 = get1(); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + + { + c.v = new float[1][1][1][1]; float[][] val1 = get2(); + c.v[0][0] = new float[1][1]; float[][] val2 = get2(); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + + { + c.v = new float[1][1][1][1]; float[][][] val1 = get3(); + c.v[0] = new float[1][1][1]; float[][][] val2 = get3(); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + + { + c.v = new float[1][1][1][1]; float[][][][] val1 = get4(); + c.v = new float[1][1][1][1]; float[][][][] val2 = get4(); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + + } + } + + /* ==================================================== */ + // Dynamic Dim is higher than static + + static class ObjectArrayLowerDim0 { + public @Stable Object v; + + public static final ObjectArrayLowerDim0 c = new ObjectArrayLowerDim0(); + public static float get() { return ((float[])c.v)[0]; } + public static float[] get1() { return (float[])c.v; } + + public static void test() throws Exception { + { + c.v = new float[1]; ((float[])c.v)[0] = 1.0F; float val1 = get(); + ((float[])c.v)[0] = 2.0F; float val2 = get(); + + assertEquals(val1, 1.0F); + assertEquals(val2, 2.0F); + } + + { + c.v = new float[1]; float[] val1 = get1(); + c.v = new float[1]; float[] val2 = get1(); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + } + } + + /* ==================================================== */ + + static class ObjectArrayLowerDim1 { + public @Stable Object[] v; + + public static final ObjectArrayLowerDim1 c = new ObjectArrayLowerDim1(); + public static float get() { return ((float[][])c.v)[0][0]; } + public static float[] get1() { return (float[])(c.v[0]); } + public static Object[] get2() { return c.v; } + + public static void test() throws Exception { + { + c.v = new float[1][1]; ((float[][])c.v)[0][0] = 1.0F; float val1 = get(); + ((float[][])c.v)[0][0] = 2.0F; float val2 = get(); + + assertEquals(val1, 1.0F); + assertEquals(val2, 2.0F); + } + + { + c.v = new float[1][1]; c.v[0] = new float[0]; float[] val1 = get1(); + c.v[0] = new float[0]; float[] val2 = get1(); + + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + + { + c.v = new float[0][0]; Object[] val1 = get2(); + c.v = new float[0][0]; Object[] val2 = get2(); + + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + } + } + + /* ==================================================== */ + + static class ObjectArrayLowerDim2 { + public @Stable Object[][] v; + + public static final ObjectArrayLowerDim2 c = new ObjectArrayLowerDim2(); + public static float get() { return ((float[][][])c.v)[0][0][0]; } + public static float[] get1() { return (float[])(c.v[0][0]); } + public static float[][] get2() { return (float[][])(c.v[0]); } + public static Object[][] get3() { return c.v; } + + public static void test() throws Exception { + { + c.v = new float[1][1][1]; ((float[][][])c.v)[0][0][0] = 1.0F; float val1 = get(); + ((float[][][])c.v)[0][0][0] = 2.0F; float val2 = get(); + + assertEquals(val1, 1.0F); + assertEquals(val2, 2.0F); + } + + { + c.v = new float[1][1][1]; c.v[0][0] = new float[0]; float[] val1 = get1(); + c.v[0][0] = new float[0]; float[] val2 = get1(); + + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + + { + c.v = new float[1][1][1]; c.v[0] = new float[0][0]; float[][] val1 = get2(); + c.v[0] = new float[0][0]; float[][] val2 = get2(); + + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + + { + c.v = new float[0][0][0]; Object[][] val1 = get3(); + c.v = new float[0][0][0]; Object[][] val2 = get3(); + + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + } + } + + /* ==================================================== */ + + static class NestedStableField { + static class A { + public @Stable float a; + + } + public @Stable A v; + + public static final NestedStableField c = new NestedStableField(); + public static A get() { return c.v; } + public static float get1() { return get().a; } + + public static void test() throws Exception { + { + c.v = new A(); c.v.a = 1.0F; A val1 = get(); + c.v.a = 2.0F; A val2 = get(); + + assertEquals(val1.a, 2.0F); + assertEquals(val2.a, 2.0F); + } + + { + c.v = new A(); c.v.a = 1.0F; float val1 = get1(); + c.v.a = 2.0F; float val2 = get1(); + c.v = new A(); c.v.a = 3.0F; float val3 = get1(); + + assertEquals(val1, 1.0F); + assertEquals(val2, (isStableEnabled ? 1.0F : 2.0F)); + assertEquals(val3, (isStableEnabled ? 1.0F : 3.0F)); + } + } + } + + /* ==================================================== */ + + static class NestedStableField1 { + static class A { + public @Stable float a; + public @Stable A next; + } + public @Stable A v; + + public static final NestedStableField1 c = new NestedStableField1(); + public static A get() { return c.v.next.next.next.next.next.next.next; } + public static float get1() { return get().a; } + + public static void test() throws Exception { + { + c.v = new A(); c.v.next = new A(); c.v.next.next = c.v; + c.v.a = 1.0F; c.v.next.a = 1.0F; A val1 = get(); + c.v.a = 2.0F; c.v.next.a = 2.0F; A val2 = get(); + + assertEquals(val1.a, 2.0F); + assertEquals(val2.a, 2.0F); + } + + { + c.v = new A(); c.v.next = c.v; + c.v.a = 1.0F; float val1 = get1(); + c.v.a = 2.0F; float val2 = get1(); + c.v = new A(); c.v.next = c.v; + c.v.a = 3.0F; float val3 = get1(); + + assertEquals(val1, 1.0F); + assertEquals(val2, (isStableEnabled ? 1.0F : 2.0F)); + assertEquals(val3, (isStableEnabled ? 1.0F : 3.0F)); + } + } + } + /* ==================================================== */ + + static class NestedStableField2 { + static class A { + public @Stable float a; + public @Stable A left; + public A right; + } + + public @Stable A v; + + public static final NestedStableField2 c = new NestedStableField2(); + public static float get() { return c.v.left.left.left.a; } + public static float get1() { return c.v.left.left.right.left.a; } + + public static void test() throws Exception { + { + c.v = new A(); c.v.left = c.v.right = c.v; + c.v.a = 1.0F; float val1 = get(); float val2 = get1(); + c.v.a = 2.0F; float val3 = get(); float val4 = get1(); + + assertEquals(val1, 1.0F); + assertEquals(val3, (isStableEnabled ? 1.0F : 2.0F)); + + assertEquals(val2, 1.0F); + assertEquals(val4, 2.0F); + } + } + } + + /* ==================================================== */ + + static class NestedStableField3 { + static class A { + public @Stable float a; + public @Stable A[] left; + public A[] right; + } + + public @Stable A[] v; + + public static final NestedStableField3 c = new NestedStableField3(); + public static float get() { return c.v[0].left[1].left[0].left[1].a; } + public static float get1() { return c.v[1].left[0].left[1].right[0].left[1].a; } + + public static void test() throws Exception { + { + A elem = new A(); + c.v = new A[] { elem, elem }; c.v[0].left = c.v[0].right = c.v; + elem.a = 1.0F; float val1 = get(); float val2 = get1(); + elem.a = 2.0F; float val3 = get(); float val4 = get1(); + + assertEquals(val1, 1.0F); + assertEquals(val3, (isStableEnabled ? 1.0F : 2.0F)); + + assertEquals(val2, 1.0F); + assertEquals(val4, 2.0F); + } + } + } + + /* ==================================================== */ + // Auxiliary methods + static void assertEquals(float i, float j) { if (i != j) throw new AssertionError(i + " != " + j); } + static void assertTrue(boolean b) { if (!b) throw new AssertionError(); } + + static boolean failed = false; + + public static void run(Class test) { + Throwable ex = null; + System.out.print(test.getName()+": "); + try { + test.getMethod("test").invoke(null); + } catch (InvocationTargetException e) { + ex = e.getCause(); + } catch (Throwable e) { + ex = e; + } finally { + if (ex == null) { + System.out.println("PASSED"); + } else { + failed = true; + System.out.println("FAILED"); + ex.printStackTrace(System.out); + } + } + } + + static final boolean isStableEnabled; + static { + HotSpotDiagnosticMXBean diagnostic + = ManagementFactoryHelper.getDiagnosticMXBean(); + VMOption tmp; + try { + tmp = diagnostic.getVMOption("FoldStableValues"); + } catch (IllegalArgumentException e) { + tmp = null; + } + isStableEnabled = (tmp == null ? false : Boolean.parseBoolean(tmp.getValue())); + } +} diff --git a/hotspot/test/compiler/stable/TestStableInt.java b/hotspot/test/compiler/stable/TestStableInt.java new file mode 100644 index 00000000000..9632a8dc39d --- /dev/null +++ b/hotspot/test/compiler/stable/TestStableInt.java @@ -0,0 +1,632 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test TestStableInt + * @summary tests on stable fields and arrays + * @library /testlibrary + * @compile -XDignore.symbol.file TestStableInt.java + * @run main ClassFileInstaller + * java/lang/invoke/TestStableInt + * java/lang/invoke/TestStableInt$IntStable + * java/lang/invoke/TestStableInt$StaticIntStable + * java/lang/invoke/TestStableInt$VolatileIntStable + * java/lang/invoke/TestStableInt$IntArrayDim1 + * java/lang/invoke/TestStableInt$IntArrayDim2 + * java/lang/invoke/TestStableInt$IntArrayDim3 + * java/lang/invoke/TestStableInt$IntArrayDim4 + * java/lang/invoke/TestStableInt$ObjectArrayLowerDim0 + * java/lang/invoke/TestStableInt$ObjectArrayLowerDim1 + * java/lang/invoke/TestStableInt$NestedStableField + * java/lang/invoke/TestStableInt$NestedStableField$A + * java/lang/invoke/TestStableInt$NestedStableField1 + * java/lang/invoke/TestStableInt$NestedStableField1$A + * java/lang/invoke/TestStableInt$NestedStableField2 + * java/lang/invoke/TestStableInt$NestedStableField2$A + * java/lang/invoke/TestStableInt$NestedStableField3 + * java/lang/invoke/TestStableInt$NestedStableField3$A + * java/lang/invoke/TestStableInt$DefaultValue + * java/lang/invoke/TestStableInt$ObjectArrayLowerDim2 + * + * @run main/othervm -Xbootclasspath/a:. -XX:+IgnoreUnrecognizedVMOptions + * -XX:+UnlockDiagnosticVMOptions -XX:+FoldStableValues -XX:+UseCompressedOop + * -server -XX:-TieredCompilation -Xcomp + * -XX:CompileOnly=::get,::get1,::get2,::get3,::get4 + * java.lang.invoke.TestStableInt + * + * @run main/othervm -Xbootclasspath/a:. -XX:+IgnoreUnrecognizedVMOptions + * -XX:+UnlockDiagnosticVMOptions -XX:+FoldStableValues -XX:-UseCompressedOop + * -server -XX:-TieredCompilation -Xcomp + * -XX:CompileOnly=::get,::get1,::get2,::get3,::get4 + * java.lang.invoke.TestStableInt + * + * @run main/othervm -Xbootclasspath/a:. -XX:+IgnoreUnrecognizedVMOptions + * -XX:+UnlockDiagnosticVMOptions -XX:-FoldStableValues -XX:+UseCompressedOop + * -server -XX:-TieredCompilation -Xcomp + * -XX:CompileOnly=::get,::get1,::get2,::get3,::get4 + * java.lang.invoke.TestStableInt + * + * @run main/othervm -Xbootclasspath/a:. -XX:+IgnoreUnrecognizedVMOptions + * -XX:+UnlockDiagnosticVMOptions -XX:-FoldStableValues -XX:-UseCompressedOop + * -server -XX:-TieredCompilation -Xcomp + * -XX:CompileOnly=::get,::get1,::get2,::get3,::get4 + * java.lang.invoke.TestStableInt + */ +package java.lang.invoke; + +import com.sun.management.HotSpotDiagnosticMXBean; +import com.sun.management.VMOption; +import sun.management.ManagementFactoryHelper; +import java.lang.reflect.InvocationTargetException; + +public class TestStableInt { + public static void main(String[] args) throws Exception { + System.out.println("@Stable enabled: "+isStableEnabled); + System.out.println(); + + run(DefaultValue.class); + run(IntStable.class); + run(StaticIntStable.class); + run(VolatileIntStable.class); + + // @Stable arrays: Dim 1-4 + run(IntArrayDim1.class); + run(IntArrayDim2.class); + run(IntArrayDim3.class); + run(IntArrayDim4.class); + + // @Stable Object field: dynamic arrays + run(ObjectArrayLowerDim0.class); + run(ObjectArrayLowerDim1.class); + run(ObjectArrayLowerDim2.class); + + // Nested @Stable fields + run(NestedStableField.class); + run(NestedStableField1.class); + run(NestedStableField2.class); + run(NestedStableField3.class); + + if (failed) { + throw new Error("TEST FAILED"); + } + } + + /* ==================================================== */ + + static class DefaultValue { + public @Stable int v; + + public static final DefaultValue c = new DefaultValue(); + public static int get() { return c.v; } + public static void test() throws Exception { + int val1 = get(); + c.v = 1; int val2 = get(); + assertEquals(val1, 0); + assertEquals(val2, 1); + } + } + + /* ==================================================== */ + + static class IntStable { + public @Stable int v; + + public static final IntStable c = new IntStable(); + public static int get() { return c.v; } + public static void test() throws Exception { + c.v = 1; int val1 = get(); + c.v = 2; int val2 = get(); + assertEquals(val1, 1); + assertEquals(val2, (isStableEnabled ? 1 : 2)); + } + } + + /* ==================================================== */ + + static class StaticIntStable { + public static @Stable int v; + + public static final StaticIntStable c = new StaticIntStable(); + public static int get() { return c.v; } + public static void test() throws Exception { + c.v = 1; int val1 = get(); + c.v = 2; int val2 = get(); + assertEquals(val1, 1); + assertEquals(val2, (isStableEnabled ? 1 : 2)); + } + } + + /* ==================================================== */ + + static class VolatileIntStable { + public @Stable volatile int v; + + public static final VolatileIntStable c = new VolatileIntStable(); + public static int get() { return c.v; } + public static void test() throws Exception { + c.v = 1; int val1 = get(); + c.v = 2; int val2 = get(); + assertEquals(val1, 1); + assertEquals(val2, (isStableEnabled ? 1 : 2)); + } + } + + /* ==================================================== */ + // @Stable array == field && all components are stable + + static class IntArrayDim1 { + public @Stable int[] v; + + public static final IntArrayDim1 c = new IntArrayDim1(); + public static int get() { return c.v[0]; } + public static int get1() { return c.v[10]; } + public static int[] get2() { return c.v; } + public static void test() throws Exception { + { + c.v = new int[1]; c.v[0] = 1; int val1 = get(); + c.v[0] = 2; int val2 = get(); + assertEquals(val1, 1); + assertEquals(val2, (isStableEnabled ? 1 : 2)); + + c.v = new int[1]; c.v[0] = 3; int val3 = get(); + assertEquals(val3, (isStableEnabled ? 1 : 3)); + } + + { + c.v = new int[20]; c.v[10] = 1; int val1 = get1(); + c.v[10] = 2; int val2 = get1(); + assertEquals(val1, 1); + assertEquals(val2, (isStableEnabled ? 1 : 2)); + + c.v = new int[20]; c.v[10] = 3; int val3 = get1(); + assertEquals(val3, (isStableEnabled ? 1 : 3)); + } + + { + c.v = new int[1]; int[] val1 = get2(); + c.v = new int[1]; int[] val2 = get2(); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + } + } + + /* ==================================================== */ + + static class IntArrayDim2 { + public @Stable int[][] v; + + public static final IntArrayDim2 c = new IntArrayDim2(); + public static int get() { return c.v[0][0]; } + public static int[] get1() { return c.v[0]; } + public static int[][] get2() { return c.v; } + public static void test() throws Exception { + { + c.v = new int[1][1]; c.v[0][0] = 1; int val1 = get(); + c.v[0][0] = 2; int val2 = get(); + assertEquals(val1, 1); + assertEquals(val2, (isStableEnabled ? 1 : 2)); + + c.v = new int[1][1]; c.v[0][0] = 3; int val3 = get(); + assertEquals(val3, (isStableEnabled ? 1 : 3)); + + c.v[0] = new int[1]; c.v[0][0] = 4; int val4 = get(); + assertEquals(val4, (isStableEnabled ? 1 : 4)); + } + + { + c.v = new int[1][1]; int[] val1 = get1(); + c.v[0] = new int[1]; int[] val2 = get1(); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + + { + c.v = new int[1][1]; int[][] val1 = get2(); + c.v = new int[1][1]; int[][] val2 = get2(); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + } + } + + /* ==================================================== */ + + static class IntArrayDim3 { + public @Stable int[][][] v; + + public static final IntArrayDim3 c = new IntArrayDim3(); + public static int get() { return c.v[0][0][0]; } + public static int[] get1() { return c.v[0][0]; } + public static int[][] get2() { return c.v[0]; } + public static int[][][] get3() { return c.v; } + public static void test() throws Exception { + { + c.v = new int[1][1][1]; c.v[0][0][0] = 1; int val1 = get(); + c.v[0][0][0] = 2; int val2 = get(); + assertEquals(val1, 1); + assertEquals(val2, (isStableEnabled ? 1 : 2)); + + c.v = new int[1][1][1]; c.v[0][0][0] = 3; int val3 = get(); + assertEquals(val3, (isStableEnabled ? 1 : 3)); + + c.v[0] = new int[1][1]; c.v[0][0][0] = 4; int val4 = get(); + assertEquals(val4, (isStableEnabled ? 1 : 4)); + + c.v[0][0] = new int[1]; c.v[0][0][0] = 5; int val5 = get(); + assertEquals(val5, (isStableEnabled ? 1 : 5)); + } + + { + c.v = new int[1][1][1]; int[] val1 = get1(); + c.v[0][0] = new int[1]; int[] val2 = get1(); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + + { + c.v = new int[1][1][1]; int[][] val1 = get2(); + c.v[0] = new int[1][1]; int[][] val2 = get2(); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + + { + c.v = new int[1][1][1]; int[][][] val1 = get3(); + c.v = new int[1][1][1]; int[][][] val2 = get3(); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + } + } + + /* ==================================================== */ + + static class IntArrayDim4 { + public @Stable int[][][][] v; + + public static final IntArrayDim4 c = new IntArrayDim4(); + public static int get() { return c.v[0][0][0][0]; } + public static int[] get1() { return c.v[0][0][0]; } + public static int[][] get2() { return c.v[0][0]; } + public static int[][][] get3() { return c.v[0]; } + public static int[][][][] get4() { return c.v; } + public static void test() throws Exception { + { + c.v = new int[1][1][1][1]; c.v[0][0][0][0] = 1; int val1 = get(); + c.v[0][0][0][0] = 2; int val2 = get(); + assertEquals(val1, 1); + assertEquals(val2, (isStableEnabled ? 1 : 2)); + + c.v = new int[1][1][1][1]; c.v[0][0][0][0] = 3; int val3 = get(); + assertEquals(val3, (isStableEnabled ? 1 : 3)); + + c.v[0] = new int[1][1][1]; c.v[0][0][0][0] = 4; int val4 = get(); + assertEquals(val4, (isStableEnabled ? 1 : 4)); + + c.v[0][0] = new int[1][1]; c.v[0][0][0][0] = 5; int val5 = get(); + assertEquals(val5, (isStableEnabled ? 1 : 5)); + + c.v[0][0][0] = new int[1]; c.v[0][0][0][0] = 6; int val6 = get(); + assertEquals(val6, (isStableEnabled ? 1 : 6)); + } + + { + c.v = new int[1][1][1][1]; int[] val1 = get1(); + c.v[0][0][0] = new int[1]; int[] val2 = get1(); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + + { + c.v = new int[1][1][1][1]; int[][] val1 = get2(); + c.v[0][0] = new int[1][1]; int[][] val2 = get2(); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + + { + c.v = new int[1][1][1][1]; int[][][] val1 = get3(); + c.v[0] = new int[1][1][1]; int[][][] val2 = get3(); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + + { + c.v = new int[1][1][1][1]; int[][][][] val1 = get4(); + c.v = new int[1][1][1][1]; int[][][][] val2 = get4(); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + + } + } + + /* ==================================================== */ + // Dynamic Dim is higher than static + + static class ObjectArrayLowerDim0 { + public @Stable Object v; + + public static final ObjectArrayLowerDim0 c = new ObjectArrayLowerDim0(); + public static int get() { return ((int[])c.v)[0]; } + public static int[] get1() { return (int[])c.v; } + + public static void test() throws Exception { + { + c.v = new int[1]; ((int[])c.v)[0] = 1; int val1 = get(); + ((int[])c.v)[0] = 2; int val2 = get(); + + assertEquals(val1, 1); + assertEquals(val2, 2); + } + + { + c.v = new int[1]; int[] val1 = get1(); + c.v = new int[1]; int[] val2 = get1(); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + } + } + + /* ==================================================== */ + + static class ObjectArrayLowerDim1 { + public @Stable Object[] v; + + public static final ObjectArrayLowerDim1 c = new ObjectArrayLowerDim1(); + public static int get() { return ((int[][])c.v)[0][0]; } + public static int[] get1() { return (int[])(c.v[0]); } + public static Object[] get2() { return c.v; } + + public static void test() throws Exception { + { + c.v = new int[1][1]; ((int[][])c.v)[0][0] = 1; int val1 = get(); + ((int[][])c.v)[0][0] = 2; int val2 = get(); + + assertEquals(val1, 1); + assertEquals(val2, 2); + } + + { + c.v = new int[1][1]; c.v[0] = new int[0]; int[] val1 = get1(); + c.v[0] = new int[0]; int[] val2 = get1(); + + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + + { + c.v = new int[0][0]; Object[] val1 = get2(); + c.v = new int[0][0]; Object[] val2 = get2(); + + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + } + } + + /* ==================================================== */ + + static class ObjectArrayLowerDim2 { + public @Stable Object[][] v; + + public static final ObjectArrayLowerDim2 c = new ObjectArrayLowerDim2(); + public static int get() { return ((int[][][])c.v)[0][0][0]; } + public static int[] get1() { return (int[])(c.v[0][0]); } + public static int[][] get2() { return (int[][])(c.v[0]); } + public static Object[][] get3() { return c.v; } + + public static void test() throws Exception { + { + c.v = new int[1][1][1]; ((int[][][])c.v)[0][0][0] = 1; int val1 = get(); + ((int[][][])c.v)[0][0][0] = 2; int val2 = get(); + + assertEquals(val1, 1); + assertEquals(val2, 2); + } + + { + c.v = new int[1][1][1]; c.v[0][0] = new int[0]; int[] val1 = get1(); + c.v[0][0] = new int[0]; int[] val2 = get1(); + + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + + { + c.v = new int[1][1][1]; c.v[0] = new int[0][0]; int[][] val1 = get2(); + c.v[0] = new int[0][0]; int[][] val2 = get2(); + + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + + { + c.v = new int[0][0][0]; Object[][] val1 = get3(); + c.v = new int[0][0][0]; Object[][] val2 = get3(); + + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + } + } + + /* ==================================================== */ + + static class NestedStableField { + static class A { + public @Stable int a; + + } + public @Stable A v; + + public static final NestedStableField c = new NestedStableField(); + public static A get() { return c.v; } + public static int get1() { return get().a; } + + public static void test() throws Exception { + { + c.v = new A(); c.v.a = 1; A val1 = get(); + c.v.a = 2; A val2 = get(); + + assertEquals(val1.a, 2); + assertEquals(val2.a, 2); + } + + { + c.v = new A(); c.v.a = 1; int val1 = get1(); + c.v.a = 2; int val2 = get1(); + c.v = new A(); c.v.a = 3; int val3 = get1(); + + assertEquals(val1, 1); + assertEquals(val2, (isStableEnabled ? 1 : 2)); + assertEquals(val3, (isStableEnabled ? 1 : 3)); + } + } + } + + /* ==================================================== */ + + static class NestedStableField1 { + static class A { + public @Stable int a; + public @Stable A next; + } + public @Stable A v; + + public static final NestedStableField1 c = new NestedStableField1(); + public static A get() { return c.v.next.next.next.next.next.next.next; } + public static int get1() { return get().a; } + + public static void test() throws Exception { + { + c.v = new A(); c.v.next = new A(); c.v.next.next = c.v; + c.v.a = 1; c.v.next.a = 1; A val1 = get(); + c.v.a = 2; c.v.next.a = 2; A val2 = get(); + + assertEquals(val1.a, 2); + assertEquals(val2.a, 2); + } + + { + c.v = new A(); c.v.next = c.v; + c.v.a = 1; int val1 = get1(); + c.v.a = 2; int val2 = get1(); + c.v = new A(); c.v.next = c.v; + c.v.a = 3; int val3 = get1(); + + assertEquals(val1, 1); + assertEquals(val2, (isStableEnabled ? 1 : 2)); + assertEquals(val3, (isStableEnabled ? 1 : 3)); + } + } + } + /* ==================================================== */ + + static class NestedStableField2 { + static class A { + public @Stable int a; + public @Stable A left; + public A right; + } + + public @Stable A v; + + public static final NestedStableField2 c = new NestedStableField2(); + public static int get() { return c.v.left.left.left.a; } + public static int get1() { return c.v.left.left.right.left.a; } + + public static void test() throws Exception { + { + c.v = new A(); c.v.left = c.v.right = c.v; + c.v.a = 1; int val1 = get(); int val2 = get1(); + c.v.a = 2; int val3 = get(); int val4 = get1(); + + assertEquals(val1, 1); + assertEquals(val3, (isStableEnabled ? 1 : 2)); + + assertEquals(val2, 1); + assertEquals(val4, 2); + } + } + } + + /* ==================================================== */ + + static class NestedStableField3 { + static class A { + public @Stable int a; + public @Stable A[] left; + public A[] right; + } + + public @Stable A[] v; + + public static final NestedStableField3 c = new NestedStableField3(); + public static int get() { return c.v[0].left[1].left[0].left[1].a; } + public static int get1() { return c.v[1].left[0].left[1].right[0].left[1].a; } + + public static void test() throws Exception { + { + A elem = new A(); + c.v = new A[] { elem, elem }; c.v[0].left = c.v[0].right = c.v; + elem.a = 1; int val1 = get(); int val2 = get1(); + elem.a = 2; int val3 = get(); int val4 = get1(); + + assertEquals(val1, 1); + assertEquals(val3, (isStableEnabled ? 1 : 2)); + + assertEquals(val2, 1); + assertEquals(val4, 2); + } + } + } + + /* ==================================================== */ + // Auxiliary methods + static void assertEquals(int i, int j) { if (i != j) throw new AssertionError(i + " != " + j); } + static void assertTrue(boolean b) { if (!b) throw new AssertionError(); } + + static boolean failed = false; + + public static void run(Class test) { + Throwable ex = null; + System.out.print(test.getName()+": "); + try { + test.getMethod("test").invoke(null); + } catch (InvocationTargetException e) { + ex = e.getCause(); + } catch (Throwable e) { + ex = e; + } finally { + if (ex == null) { + System.out.println("PASSED"); + } else { + failed = true; + System.out.println("FAILED"); + ex.printStackTrace(System.out); + } + } + } + + static final boolean isStableEnabled; + static { + HotSpotDiagnosticMXBean diagnostic + = ManagementFactoryHelper.getDiagnosticMXBean(); + VMOption tmp; + try { + tmp = diagnostic.getVMOption("FoldStableValues"); + } catch (IllegalArgumentException e) { + tmp = null; + } + isStableEnabled = (tmp == null ? false : Boolean.parseBoolean(tmp.getValue())); + } +} diff --git a/hotspot/test/compiler/stable/TestStableLong.java b/hotspot/test/compiler/stable/TestStableLong.java new file mode 100644 index 00000000000..d1c72f5609c --- /dev/null +++ b/hotspot/test/compiler/stable/TestStableLong.java @@ -0,0 +1,632 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test TestStableLong + * @summary tests on stable fields and arrays + * @library /testlibrary + * @compile -XDignore.symbol.file TestStableLong.java + * @run main ClassFileInstaller + * java/lang/invoke/TestStableLong + * java/lang/invoke/TestStableLong$LongStable + * java/lang/invoke/TestStableLong$StaticLongStable + * java/lang/invoke/TestStableLong$VolatileLongStable + * java/lang/invoke/TestStableLong$LongArrayDim1 + * java/lang/invoke/TestStableLong$LongArrayDim2 + * java/lang/invoke/TestStableLong$LongArrayDim3 + * java/lang/invoke/TestStableLong$LongArrayDim4 + * java/lang/invoke/TestStableLong$ObjectArrayLowerDim0 + * java/lang/invoke/TestStableLong$ObjectArrayLowerDim1 + * java/lang/invoke/TestStableLong$NestedStableField + * java/lang/invoke/TestStableLong$NestedStableField$A + * java/lang/invoke/TestStableLong$NestedStableField1 + * java/lang/invoke/TestStableLong$NestedStableField1$A + * java/lang/invoke/TestStableLong$NestedStableField2 + * java/lang/invoke/TestStableLong$NestedStableField2$A + * java/lang/invoke/TestStableLong$NestedStableField3 + * java/lang/invoke/TestStableLong$NestedStableField3$A + * java/lang/invoke/TestStableLong$DefaultValue + * java/lang/invoke/TestStableLong$ObjectArrayLowerDim2 + * + * @run main/othervm -Xbootclasspath/a:. -XX:+IgnoreUnrecognizedVMOptions + * -XX:+UnlockDiagnosticVMOptions -XX:+FoldStableValues -XX:+UseCompressedOop + * -server -XX:-TieredCompilation -Xcomp + * -XX:CompileOnly=::get,::get1,::get2,::get3,::get4 + * java.lang.invoke.TestStableLong + * + * @run main/othervm -Xbootclasspath/a:. -XX:+IgnoreUnrecognizedVMOptions + * -XX:+UnlockDiagnosticVMOptions -XX:+FoldStableValues -XX:-UseCompressedOop + * -server -XX:-TieredCompilation -Xcomp + * -XX:CompileOnly=::get,::get1,::get2,::get3,::get4 + * java.lang.invoke.TestStableLong + * + * @run main/othervm -Xbootclasspath/a:. -XX:+IgnoreUnrecognizedVMOptions + * -XX:+UnlockDiagnosticVMOptions -XX:-FoldStableValues -XX:+UseCompressedOop + * -server -XX:-TieredCompilation -Xcomp + * -XX:CompileOnly=::get,::get1,::get2,::get3,::get4 + * java.lang.invoke.TestStableLong + * + * @run main/othervm -Xbootclasspath/a:. -XX:+IgnoreUnrecognizedVMOptions + * -XX:+UnlockDiagnosticVMOptions -XX:-FoldStableValues -XX:-UseCompressedOop + * -server -XX:-TieredCompilation -Xcomp + * -XX:CompileOnly=::get,::get1,::get2,::get3,::get4 + * java.lang.invoke.TestStableLong + */ +package java.lang.invoke; + +import com.sun.management.HotSpotDiagnosticMXBean; +import com.sun.management.VMOption; +import sun.management.ManagementFactoryHelper; +import java.lang.reflect.InvocationTargetException; + +public class TestStableLong { + public static void main(String[] args) throws Exception { + System.out.println("@Stable enabled: "+isStableEnabled); + System.out.println(); + + run(DefaultValue.class); + run(LongStable.class); + run(StaticLongStable.class); + run(VolatileLongStable.class); + + // @Stable arrays: Dim 1-4 + run(LongArrayDim1.class); + run(LongArrayDim2.class); + run(LongArrayDim3.class); + run(LongArrayDim4.class); + + // @Stable Object field: dynamic arrays + run(ObjectArrayLowerDim0.class); + run(ObjectArrayLowerDim1.class); + run(ObjectArrayLowerDim2.class); + + // Nested @Stable fields + run(NestedStableField.class); + run(NestedStableField1.class); + run(NestedStableField2.class); + run(NestedStableField3.class); + + if (failed) { + throw new Error("TEST FAILED"); + } + } + + /* ==================================================== */ + + static class DefaultValue { + public @Stable long v; + + public static final DefaultValue c = new DefaultValue(); + public static long get() { return c.v; } + public static void test() throws Exception { + long val1 = get(); + c.v = 1L; long val2 = get(); + assertEquals(val1, 0); + assertEquals(val2, 1L); + } + } + + /* ==================================================== */ + + static class LongStable { + public @Stable long v; + + public static final LongStable c = new LongStable(); + public static long get() { return c.v; } + public static void test() throws Exception { + c.v = 5; long val1 = get(); + c.v = Long.MAX_VALUE; long val2 = get(); + assertEquals(val1, 5); + assertEquals(val2, (isStableEnabled ? 5 : Long.MAX_VALUE)); + } + } + + /* ==================================================== */ + + static class StaticLongStable { + public static @Stable long v; + + public static final StaticLongStable c = new StaticLongStable(); + public static long get() { return c.v; } + public static void test() throws Exception { + c.v = 5; long val1 = get(); + c.v = Long.MAX_VALUE; long val2 = get(); + assertEquals(val1, 5); + assertEquals(val2, (isStableEnabled ? 5 : Long.MAX_VALUE)); + } + } + + /* ==================================================== */ + + static class VolatileLongStable { + public @Stable volatile long v; + + public static final VolatileLongStable c = new VolatileLongStable(); + public static long get() { return c.v; } + public static void test() throws Exception { + c.v = 5; long val1 = get(); + c.v = Long.MAX_VALUE; long val2 = get(); + assertEquals(val1, 5); + assertEquals(val2, (isStableEnabled ? 5 : Long.MAX_VALUE)); + } + } + + /* ==================================================== */ + // @Stable array == field && all components are stable + + static class LongArrayDim1 { + public @Stable long[] v; + + public static final LongArrayDim1 c = new LongArrayDim1(); + public static long get() { return c.v[0]; } + public static long get1() { return c.v[10]; } + public static long[] get2() { return c.v; } + public static void test() throws Exception { + { + c.v = new long[1]; c.v[0] = 1; long val1 = get(); + c.v[0] = 2; long val2 = get(); + assertEquals(val1, 1); + assertEquals(val2, (isStableEnabled ? 1 : 2)); + + c.v = new long[1]; c.v[0] = 3; long val3 = get(); + assertEquals(val3, (isStableEnabled ? 1 : 3)); + } + + { + c.v = new long[20]; c.v[10] = 1; long val1 = get1(); + c.v[10] = 2; long val2 = get1(); + assertEquals(val1, 1); + assertEquals(val2, (isStableEnabled ? 1 : 2)); + + c.v = new long[20]; c.v[10] = 3; long val3 = get1(); + assertEquals(val3, (isStableEnabled ? 1 : 3)); + } + + { + c.v = new long[1]; long[] val1 = get2(); + c.v = new long[1]; long[] val2 = get2(); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + } + } + + /* ==================================================== */ + + static class LongArrayDim2 { + public @Stable long[][] v; + + public static final LongArrayDim2 c = new LongArrayDim2(); + public static long get() { return c.v[0][0]; } + public static long[] get1() { return c.v[0]; } + public static long[][] get2() { return c.v; } + public static void test() throws Exception { + { + c.v = new long[1][1]; c.v[0][0] = 1; long val1 = get(); + c.v[0][0] = 2; long val2 = get(); + assertEquals(val1, 1); + assertEquals(val2, (isStableEnabled ? 1 : 2)); + + c.v = new long[1][1]; c.v[0][0] = 3; long val3 = get(); + assertEquals(val3, (isStableEnabled ? 1 : 3)); + + c.v[0] = new long[1]; c.v[0][0] = 4; long val4 = get(); + assertEquals(val4, (isStableEnabled ? 1 : 4)); + } + + { + c.v = new long[1][1]; long[] val1 = get1(); + c.v[0] = new long[1]; long[] val2 = get1(); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + + { + c.v = new long[1][1]; long[][] val1 = get2(); + c.v = new long[1][1]; long[][] val2 = get2(); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + } + } + + /* ==================================================== */ + + static class LongArrayDim3 { + public @Stable long[][][] v; + + public static final LongArrayDim3 c = new LongArrayDim3(); + public static long get() { return c.v[0][0][0]; } + public static long[] get1() { return c.v[0][0]; } + public static long[][] get2() { return c.v[0]; } + public static long[][][] get3() { return c.v; } + public static void test() throws Exception { + { + c.v = new long[1][1][1]; c.v[0][0][0] = 1; long val1 = get(); + c.v[0][0][0] = 2; long val2 = get(); + assertEquals(val1, 1); + assertEquals(val2, (isStableEnabled ? 1 : 2)); + + c.v = new long[1][1][1]; c.v[0][0][0] = 3; long val3 = get(); + assertEquals(val3, (isStableEnabled ? 1 : 3)); + + c.v[0] = new long[1][1]; c.v[0][0][0] = 4; long val4 = get(); + assertEquals(val4, (isStableEnabled ? 1 : 4)); + + c.v[0][0] = new long[1]; c.v[0][0][0] = 5; long val5 = get(); + assertEquals(val5, (isStableEnabled ? 1 : 5)); + } + + { + c.v = new long[1][1][1]; long[] val1 = get1(); + c.v[0][0] = new long[1]; long[] val2 = get1(); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + + { + c.v = new long[1][1][1]; long[][] val1 = get2(); + c.v[0] = new long[1][1]; long[][] val2 = get2(); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + + { + c.v = new long[1][1][1]; long[][][] val1 = get3(); + c.v = new long[1][1][1]; long[][][] val2 = get3(); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + } + } + + /* ==================================================== */ + + static class LongArrayDim4 { + public @Stable long[][][][] v; + + public static final LongArrayDim4 c = new LongArrayDim4(); + public static long get() { return c.v[0][0][0][0]; } + public static long[] get1() { return c.v[0][0][0]; } + public static long[][] get2() { return c.v[0][0]; } + public static long[][][] get3() { return c.v[0]; } + public static long[][][][] get4() { return c.v; } + public static void test() throws Exception { + { + c.v = new long[1][1][1][1]; c.v[0][0][0][0] = 1; long val1 = get(); + c.v[0][0][0][0] = 2; long val2 = get(); + assertEquals(val1, 1); + assertEquals(val2, (isStableEnabled ? 1 : 2)); + + c.v = new long[1][1][1][1]; c.v[0][0][0][0] = 3; long val3 = get(); + assertEquals(val3, (isStableEnabled ? 1 : 3)); + + c.v[0] = new long[1][1][1]; c.v[0][0][0][0] = 4; long val4 = get(); + assertEquals(val4, (isStableEnabled ? 1 : 4)); + + c.v[0][0] = new long[1][1]; c.v[0][0][0][0] = 5; long val5 = get(); + assertEquals(val5, (isStableEnabled ? 1 : 5)); + + c.v[0][0][0] = new long[1]; c.v[0][0][0][0] = 6; long val6 = get(); + assertEquals(val6, (isStableEnabled ? 1 : 6)); + } + + { + c.v = new long[1][1][1][1]; long[] val1 = get1(); + c.v[0][0][0] = new long[1]; long[] val2 = get1(); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + + { + c.v = new long[1][1][1][1]; long[][] val1 = get2(); + c.v[0][0] = new long[1][1]; long[][] val2 = get2(); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + + { + c.v = new long[1][1][1][1]; long[][][] val1 = get3(); + c.v[0] = new long[1][1][1]; long[][][] val2 = get3(); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + + { + c.v = new long[1][1][1][1]; long[][][][] val1 = get4(); + c.v = new long[1][1][1][1]; long[][][][] val2 = get4(); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + + } + } + + /* ==================================================== */ + // Dynamic Dim is higher than static + + static class ObjectArrayLowerDim0 { + public @Stable Object v; + + public static final ObjectArrayLowerDim0 c = new ObjectArrayLowerDim0(); + public static long get() { return ((long[])c.v)[0]; } + public static long[] get1() { return (long[])c.v; } + + public static void test() throws Exception { + { + c.v = new long[1]; ((long[])c.v)[0] = 1; long val1 = get(); + ((long[])c.v)[0] = 2; long val2 = get(); + + assertEquals(val1, 1); + assertEquals(val2, 2); + } + + { + c.v = new long[1]; long[] val1 = get1(); + c.v = new long[1]; long[] val2 = get1(); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + } + } + + /* ==================================================== */ + + static class ObjectArrayLowerDim1 { + public @Stable Object[] v; + + public static final ObjectArrayLowerDim1 c = new ObjectArrayLowerDim1(); + public static long get() { return ((long[][])c.v)[0][0]; } + public static long[] get1() { return (long[])(c.v[0]); } + public static Object[] get2() { return c.v; } + + public static void test() throws Exception { + { + c.v = new long[1][1]; ((long[][])c.v)[0][0] = 1; long val1 = get(); + ((long[][])c.v)[0][0] = 2; long val2 = get(); + + assertEquals(val1, 1); + assertEquals(val2, 2); + } + + { + c.v = new long[1][1]; c.v[0] = new long[0]; long[] val1 = get1(); + c.v[0] = new long[0]; long[] val2 = get1(); + + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + + { + c.v = new long[0][0]; Object[] val1 = get2(); + c.v = new long[0][0]; Object[] val2 = get2(); + + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + } + } + + /* ==================================================== */ + + static class ObjectArrayLowerDim2 { + public @Stable Object[][] v; + + public static final ObjectArrayLowerDim2 c = new ObjectArrayLowerDim2(); + public static long get() { return ((long[][][])c.v)[0][0][0]; } + public static long[] get1() { return (long[])(c.v[0][0]); } + public static long[][] get2() { return (long[][])(c.v[0]); } + public static Object[][] get3() { return c.v; } + + public static void test() throws Exception { + { + c.v = new long[1][1][1]; ((long[][][])c.v)[0][0][0] = 1L; long val1 = get(); + ((long[][][])c.v)[0][0][0] = 2L; long val2 = get(); + + assertEquals(val1, 1L); + assertEquals(val2, 2L); + } + + { + c.v = new long[1][1][1]; c.v[0][0] = new long[0]; long[] val1 = get1(); + c.v[0][0] = new long[0]; long[] val2 = get1(); + + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + + { + c.v = new long[1][1][1]; c.v[0] = new long[0][0]; long[][] val1 = get2(); + c.v[0] = new long[0][0]; long[][] val2 = get2(); + + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + + { + c.v = new long[0][0][0]; Object[][] val1 = get3(); + c.v = new long[0][0][0]; Object[][] val2 = get3(); + + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + } + } + + /* ==================================================== */ + + static class NestedStableField { + static class A { + public @Stable long a; + + } + public @Stable A v; + + public static final NestedStableField c = new NestedStableField(); + public static A get() { return c.v; } + public static long get1() { return get().a; } + + public static void test() throws Exception { + { + c.v = new A(); c.v.a = 1; A val1 = get(); + c.v.a = 2; A val2 = get(); + + assertEquals(val1.a, 2); + assertEquals(val2.a, 2); + } + + { + c.v = new A(); c.v.a = 1; long val1 = get1(); + c.v.a = 2; long val2 = get1(); + c.v = new A(); c.v.a = 3; long val3 = get1(); + + assertEquals(val1, 1); + assertEquals(val2, (isStableEnabled ? 1 : 2)); + assertEquals(val3, (isStableEnabled ? 1 : 3)); + } + } + } + + /* ==================================================== */ + + static class NestedStableField1 { + static class A { + public @Stable long a; + public @Stable A next; + } + public @Stable A v; + + public static final NestedStableField1 c = new NestedStableField1(); + public static A get() { return c.v.next.next.next.next.next.next.next; } + public static long get1() { return get().a; } + + public static void test() throws Exception { + { + c.v = new A(); c.v.next = new A(); c.v.next.next = c.v; + c.v.a = 1; c.v.next.a = 1; A val1 = get(); + c.v.a = 2; c.v.next.a = 2; A val2 = get(); + + assertEquals(val1.a, 2); + assertEquals(val2.a, 2); + } + + { + c.v = new A(); c.v.next = c.v; + c.v.a = 1; long val1 = get1(); + c.v.a = 2; long val2 = get1(); + c.v = new A(); c.v.next = c.v; + c.v.a = 3; long val3 = get1(); + + assertEquals(val1, 1); + assertEquals(val2, (isStableEnabled ? 1 : 2)); + assertEquals(val3, (isStableEnabled ? 1 : 3)); + } + } + } + /* ==================================================== */ + + static class NestedStableField2 { + static class A { + public @Stable long a; + public @Stable A left; + public A right; + } + + public @Stable A v; + + public static final NestedStableField2 c = new NestedStableField2(); + public static long get() { return c.v.left.left.left.a; } + public static long get1() { return c.v.left.left.right.left.a; } + + public static void test() throws Exception { + { + c.v = new A(); c.v.left = c.v.right = c.v; + c.v.a = 1; long val1 = get(); long val2 = get1(); + c.v.a = 2; long val3 = get(); long val4 = get1(); + + assertEquals(val1, 1); + assertEquals(val3, (isStableEnabled ? 1 : 2)); + + assertEquals(val2, 1); + assertEquals(val4, 2); + } + } + } + + /* ==================================================== */ + + static class NestedStableField3 { + static class A { + public @Stable long a; + public @Stable A[] left; + public A[] right; + } + + public @Stable A[] v; + + public static final NestedStableField3 c = new NestedStableField3(); + public static long get() { return c.v[0].left[1].left[0].left[1].a; } + public static long get1() { return c.v[1].left[0].left[1].right[0].left[1].a; } + + public static void test() throws Exception { + { + A elem = new A(); + c.v = new A[] { elem, elem }; c.v[0].left = c.v[0].right = c.v; + elem.a = 1; long val1 = get(); long val2 = get1(); + elem.a = 2; long val3 = get(); long val4 = get1(); + + assertEquals(val1, 1); + assertEquals(val3, (isStableEnabled ? 1 : 2)); + + assertEquals(val2, 1); + assertEquals(val4, 2); + } + } + } + + /* ==================================================== */ + // Auxiliary methods + static void assertEquals(long i, long j) { if (i != j) throw new AssertionError(i + " != " + j); } + static void assertTrue(boolean b) { if (!b) throw new AssertionError(); } + + static boolean failed = false; + + public static void run(Class test) { + Throwable ex = null; + System.out.print(test.getName()+": "); + try { + test.getMethod("test").invoke(null); + } catch (InvocationTargetException e) { + ex = e.getCause(); + } catch (Throwable e) { + ex = e; + } finally { + if (ex == null) { + System.out.println("PASSED"); + } else { + failed = true; + System.out.println("FAILED"); + ex.printStackTrace(System.out); + } + } + } + + static final boolean isStableEnabled; + static { + HotSpotDiagnosticMXBean diagnostic + = ManagementFactoryHelper.getDiagnosticMXBean(); + VMOption tmp; + try { + tmp = diagnostic.getVMOption("FoldStableValues"); + } catch (IllegalArgumentException e) { + tmp = null; + } + isStableEnabled = (tmp == null ? false : Boolean.parseBoolean(tmp.getValue())); + } +} diff --git a/hotspot/test/compiler/stable/TestStableObject.java b/hotspot/test/compiler/stable/TestStableObject.java new file mode 100644 index 00000000000..7958c6500c4 --- /dev/null +++ b/hotspot/test/compiler/stable/TestStableObject.java @@ -0,0 +1,635 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test TestStableObject + * @summary tests on stable fields and arrays + * @library /testlibrary + * @compile -XDignore.symbol.file TestStableObject.java + * @run main ClassFileInstaller + * java/lang/invoke/TestStableObject + * java/lang/invoke/TestStableObject$ObjectStable + * java/lang/invoke/TestStableObject$StaticObjectStable + * java/lang/invoke/TestStableObject$VolatileObjectStable + * java/lang/invoke/TestStableObject$ObjectArrayDim1 + * java/lang/invoke/TestStableObject$ObjectArrayDim2 + * java/lang/invoke/TestStableObject$ObjectArrayDim3 + * java/lang/invoke/TestStableObject$ObjectArrayDim4 + * java/lang/invoke/TestStableObject$ObjectArrayLowerDim0 + * java/lang/invoke/TestStableObject$ObjectArrayLowerDim1 + * java/lang/invoke/TestStableObject$NestedStableField + * java/lang/invoke/TestStableObject$NestedStableField$A + * java/lang/invoke/TestStableObject$NestedStableField1 + * java/lang/invoke/TestStableObject$NestedStableField1$A + * java/lang/invoke/TestStableObject$NestedStableField2 + * java/lang/invoke/TestStableObject$NestedStableField2$A + * java/lang/invoke/TestStableObject$NestedStableField3 + * java/lang/invoke/TestStableObject$NestedStableField3$A + * java/lang/invoke/TestStableObject$Values + * java/lang/invoke/TestStableObject$DefaultValue + * java/lang/invoke/TestStableObject$ObjectArrayLowerDim2 + * + * @run main/othervm -Xbootclasspath/a:. -XX:+IgnoreUnrecognizedVMOptions + * -XX:+UnlockDiagnosticVMOptions -XX:+FoldStableValues -XX:+UseCompressedOop + * -server -XX:-TieredCompilation -Xcomp + * -XX:CompileOnly=::get,::get1,::get2,::get3,::get4 + * java.lang.invoke.TestStableObject + * + * @run main/othervm -Xbootclasspath/a:. -XX:+IgnoreUnrecognizedVMOptions + * -XX:+UnlockDiagnosticVMOptions -XX:+FoldStableValues -XX:-UseCompressedOop + * -server -XX:-TieredCompilation -Xcomp + * -XX:CompileOnly=::get,::get1,::get2,::get3,::get4 + * java.lang.invoke.TestStableObject + * + * @run main/othervm -Xbootclasspath/a:. -XX:+IgnoreUnrecognizedVMOptions + * -XX:+UnlockDiagnosticVMOptions -XX:-FoldStableValues -XX:+UseCompressedOop + * -server -XX:-TieredCompilation -Xcomp + * -XX:CompileOnly=::get,::get1,::get2,::get3,::get4 + * java.lang.invoke.TestStableObject + * + * @run main/othervm -Xbootclasspath/a:. -XX:+IgnoreUnrecognizedVMOptions + * -XX:+UnlockDiagnosticVMOptions -XX:-FoldStableValues -XX:-UseCompressedOop + * -server -XX:-TieredCompilation -Xcomp + * -XX:CompileOnly=::get,::get1,::get2,::get3,::get4 + * java.lang.invoke.TestStableObject + */ +package java.lang.invoke; + +import com.sun.management.HotSpotDiagnosticMXBean; +import com.sun.management.VMOption; +import sun.management.ManagementFactoryHelper; +import java.lang.reflect.InvocationTargetException; + +public class TestStableObject { + public static void main(String[] args) throws Exception { + System.out.println("@Stable enabled: "+isStableEnabled); + System.out.println(); + + run(DefaultValue.class); + run(ObjectStable.class); + run(StaticObjectStable.class); + run(VolatileObjectStable.class); + + // @Stable arrays: Dim 1-4 + run(ObjectArrayDim1.class); + run(ObjectArrayDim2.class); + run(ObjectArrayDim3.class); + run(ObjectArrayDim4.class); + + // @Stable Object field: dynamic arrays + run(ObjectArrayLowerDim0.class); + run(ObjectArrayLowerDim1.class); + run(ObjectArrayLowerDim2.class); + + // Nested @Stable fields + run(NestedStableField.class); + run(NestedStableField1.class); + run(NestedStableField2.class); + run(NestedStableField3.class); + + if (failed) { + throw new Error("TEST FAILED"); + } + } + + /* ==================================================== */ + + enum Values {A, B, C, D, E, F} + + static class DefaultValue { + public @Stable Object v; + + public static final DefaultValue c = new DefaultValue(); + public static Object get() { return c.v; } + public static void test() throws Exception { + Object val1 = get(); + c.v = Values.A; Object val2 = get(); + assertEquals(val1, null); + assertEquals(val2, Values.A); + } + } + + /* ==================================================== */ + + static class ObjectStable { + public @Stable Values v; + + public static final ObjectStable c = new ObjectStable (); + public static Values get() { return c.v; } + public static void test() throws Exception { + c.v = Values.A; Values val1 = get(); + c.v = Values.B; Values val2 = get(); + assertEquals(val1, Values.A); + assertEquals(val2, (isStableEnabled ? Values.A : Values.B)); + } + } + + /* ==================================================== */ + + static class StaticObjectStable { + public static @Stable Values v; + + public static final ObjectStable c = new ObjectStable (); + public static Values get() { return c.v; } + public static void test() throws Exception { + c.v = Values.A; Values val1 = get(); + c.v = Values.B; Values val2 = get(); + assertEquals(val1, Values.A); + assertEquals(val2, (isStableEnabled ? Values.A : Values.B)); + } + } + + /* ==================================================== */ + + static class VolatileObjectStable { + public @Stable volatile Values v; + + public static final VolatileObjectStable c = new VolatileObjectStable (); + public static Values get() { return c.v; } + public static void test() throws Exception { + c.v = Values.A; Values val1 = get(); + c.v = Values.B; Values val2 = get(); + assertEquals(val1, Values.A); + assertEquals(val2, (isStableEnabled ? Values.A : Values.B)); + } + } + + /* ==================================================== */ + // @Stable array == field && all components are stable + + static class ObjectArrayDim1 { + public @Stable Object[] v; + + public static final ObjectArrayDim1 c = new ObjectArrayDim1(); + public static Object get() { return c.v[0]; } + public static Object get1() { return c.v[10]; } + public static Object[] get2() { return c.v; } + public static void test() throws Exception { + { + c.v = new Object[1]; c.v[0] = Values.A; Object val1 = get(); + c.v[0] = Values.B; Object val2 = get(); + assertEquals(val1, Values.A); + assertEquals(val2, (isStableEnabled ? Values.A : Values.B)); + + c.v = new Object[1]; c.v[0] = Values.C; Object val3 = get(); + assertEquals(val3, (isStableEnabled ? Values.A : Values.C)); + } + + { + c.v = new Object[20]; c.v[10] = Values.A; Object val1 = get1(); + c.v[10] = Values.B; Object val2 = get1(); + assertEquals(val1, Values.A); + assertEquals(val2, (isStableEnabled ? Values.A : Values.B)); + + c.v = new Object[20]; c.v[10] = Values.C; Object val3 = get1(); + assertEquals(val3, (isStableEnabled ? Values.A : Values.C)); + } + + { + c.v = new Object[1]; Object[] val1 = get2(); + c.v = new Object[1]; Object[] val2 = get2(); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + } + } + + /* ==================================================== */ + + static class ObjectArrayDim2 { + public @Stable Object[][] v; + + public static final ObjectArrayDim2 c = new ObjectArrayDim2(); + public static Object get() { return c.v[0][0]; } + public static Object[] get1() { return c.v[0]; } + public static Object[][] get2() { return c.v; } + public static void test() throws Exception { + { + c.v = new Object[1][1]; c.v[0][0] = Values.A; Object val1 = get(); + c.v[0][0] = Values.B; Object val2 = get(); + assertEquals(val1, Values.A); + assertEquals(val2, (isStableEnabled ? Values.A : Values.B)); + + c.v = new Object[1][1]; c.v[0][0] = Values.C; Object val3 = get(); + assertEquals(val3, (isStableEnabled ? Values.A : Values.C)); + + c.v[0] = new Object[1]; c.v[0][0] = Values.D; Object val4 = get(); + assertEquals(val4, (isStableEnabled ? Values.A : Values.D)); + } + + { + c.v = new Object[1][1]; Object[] val1 = get1(); + c.v[0] = new Object[1]; Object[] val2 = get1(); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + + { + c.v = new Object[1][1]; Object[][] val1 = get2(); + c.v = new Object[1][1]; Object[][] val2 = get2(); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + } + } + + /* ==================================================== */ + + static class ObjectArrayDim3 { + public @Stable Object[][][] v; + + public static final ObjectArrayDim3 c = new ObjectArrayDim3(); + public static Object get() { return c.v[0][0][0]; } + public static Object[] get1() { return c.v[0][0]; } + public static Object[][] get2() { return c.v[0]; } + public static Object[][][] get3() { return c.v; } + public static void test() throws Exception { + { + c.v = new Object[1][1][1]; c.v[0][0][0] = Values.A; Object val1 = get(); + c.v[0][0][0] = Values.B; Object val2 = get(); + assertEquals(val1, Values.A); + assertEquals(val2, (isStableEnabled ? Values.A : Values.B)); + + c.v = new Object[1][1][1]; c.v[0][0][0] = Values.C; Object val3 = get(); + assertEquals(val3, (isStableEnabled ? Values.A : Values.C)); + + c.v[0] = new Object[1][1]; c.v[0][0][0] = Values.D; Object val4 = get(); + assertEquals(val4, (isStableEnabled ? Values.A : Values.D)); + + c.v[0][0] = new Object[1]; c.v[0][0][0] = Values.E; Object val5 = get(); + assertEquals(val5, (isStableEnabled ? Values.A : Values.E)); + } + + { + c.v = new Object[1][1][1]; Object[] val1 = get1(); + c.v[0][0] = new Object[1]; Object[] val2 = get1(); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + + { + c.v = new Object[1][1][1]; Object[][] val1 = get2(); + c.v[0] = new Object[1][1]; Object[][] val2 = get2(); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + + { + c.v = new Object[1][1][1]; Object[][][] val1 = get3(); + c.v = new Object[1][1][1]; Object[][][] val2 = get3(); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + } + } + + /* ==================================================== */ + + static class ObjectArrayDim4 { + public @Stable Object[][][][] v; + + public static final ObjectArrayDim4 c = new ObjectArrayDim4(); + public static Object get() { return c.v[0][0][0][0]; } + public static Object[] get1() { return c.v[0][0][0]; } + public static Object[][] get2() { return c.v[0][0]; } + public static Object[][][] get3() { return c.v[0]; } + public static Object[][][][] get4() { return c.v; } + public static void test() throws Exception { + { + c.v = new Object[1][1][1][1]; c.v[0][0][0][0] = Values.A; Object val1 = get(); + c.v[0][0][0][0] = Values.B; Object val2 = get(); + assertEquals(val1, Values.A); + assertEquals(val2, (isStableEnabled ? Values.A : Values.B)); + + c.v = new Object[1][1][1][1]; c.v[0][0][0][0] = Values.C; Object val3 = get(); + assertEquals(val3, (isStableEnabled ? Values.A : Values.C)); + + c.v[0] = new Object[1][1][1]; c.v[0][0][0][0] = Values.D; Object val4 = get(); + assertEquals(val4, (isStableEnabled ? Values.A : Values.D)); + + c.v[0][0] = new Object[1][1]; c.v[0][0][0][0] = Values.E; Object val5 = get(); + assertEquals(val5, (isStableEnabled ? Values.A : Values.E)); + + c.v[0][0][0] = new Object[1]; c.v[0][0][0][0] = Values.F; Object val6 = get(); + assertEquals(val6, (isStableEnabled ? Values.A : Values.F)); + } + + { + c.v = new Object[1][1][1][1]; Object[] val1 = get1(); + c.v[0][0][0] = new Object[1]; Object[] val2 = get1(); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + + { + c.v = new Object[1][1][1][1]; Object[][] val1 = get2(); + c.v[0][0] = new Object[1][1]; Object[][] val2 = get2(); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + + { + c.v = new Object[1][1][1][1]; Object[][][] val1 = get3(); + c.v[0] = new Object[1][1][1]; Object[][][] val2 = get3(); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + + { + c.v = new Object[1][1][1][1]; Object[][][][] val1 = get4(); + c.v = new Object[1][1][1][1]; Object[][][][] val2 = get4(); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + + } + } + + /* ==================================================== */ + // Dynamic Dim is higher than static + + static class ObjectArrayLowerDim0 { + public @Stable Object v; + + public static final ObjectArrayLowerDim0 c = new ObjectArrayLowerDim0(); + public static Object get() { return ((Object[])c.v)[0]; } + public static Object[] get1() { return (Object[])c.v; } + + public static void test() throws Exception { + { + c.v = new Object[1]; ((Object[])c.v)[0] = Values.A; Object val1 = get(); + ((Object[])c.v)[0] = Values.B; Object val2 = get(); + + assertEquals(val1, Values.A); + assertEquals(val2, Values.B); + } + + { + c.v = new Object[1]; Object[] val1 = get1(); + c.v = new Object[1]; Object[] val2 = get1(); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + } + } + + /* ==================================================== */ + + static class ObjectArrayLowerDim1 { + public @Stable Object[] v; + + public static final ObjectArrayLowerDim1 c = new ObjectArrayLowerDim1(); + public static Object get() { return ((Object[][])c.v)[0][0]; } + public static Object[] get1() { return (Object[])(c.v[0]); } + public static Object[] get2() { return c.v; } + + public static void test() throws Exception { + { + c.v = new Object[1][1]; ((Object[][])c.v)[0][0] = Values.A; Object val1 = get(); + ((Object[][])c.v)[0][0] = Values.B; Object val2 = get(); + + assertEquals(val1, Values.A); + assertEquals(val2, Values.B); + } + + { + c.v = new Object[1][1]; c.v[0] = new Object[0]; Object[] val1 = get1(); + c.v[0] = new Object[0]; Object[] val2 = get1(); + + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + + { + c.v = new Object[0][0]; Object[] val1 = get2(); + c.v = new Object[0][0]; Object[] val2 = get2(); + + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + } + } + + /* ==================================================== */ + + static class ObjectArrayLowerDim2 { + public @Stable Object[][] v; + + public static final ObjectArrayLowerDim2 c = new ObjectArrayLowerDim2(); + public static Object get() { return ((Object[][][])c.v)[0][0][0]; } + public static Object[] get1() { return (Object[])(c.v[0][0]); } + public static Object[][] get2() { return (Object[][])(c.v[0]); } + public static Object[][] get3() { return c.v; } + + public static void test() throws Exception { + { + c.v = new Object[1][1][1]; ((Object[][][])c.v)[0][0][0] = Values.A; Object val1 = get(); + ((Object[][][])c.v)[0][0][0] = Values.B; Object val2 = get(); + + assertEquals(val1, Values.A); + assertEquals(val2, Values.B); + } + + { + c.v = new Object[1][1][1]; c.v[0][0] = new Object[0]; Object[] val1 = get1(); + c.v[0][0] = new Object[0]; Object[] val2 = get1(); + + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + + { + c.v = new Object[1][1][1]; c.v[0] = new Object[0][0]; Object[][] val1 = get2(); + c.v[0] = new Object[0][0]; Object[][] val2 = get2(); + + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + + { + c.v = new Object[0][0][0]; Object[][] val1 = get3(); + c.v = new Object[0][0][0]; Object[][] val2 = get3(); + + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + } + } + + /* ==================================================== */ + + static class NestedStableField { + static class A { + public @Stable Object a; + + } + public @Stable A v; + + public static final NestedStableField c = new NestedStableField(); + public static A get() { return c.v; } + public static Object get1() { return get().a; } + + public static void test() throws Exception { + { + c.v = new A(); c.v.a = Values.A; A val1 = get(); + c.v.a = Values.B; A val2 = get(); + + assertEquals(val1.a, Values.B); + assertEquals(val2.a, Values.B); + } + + { + c.v = new A(); c.v.a = Values.A; Object val1 = get1(); + c.v.a = Values.B; Object val2 = get1(); + c.v = new A(); c.v.a = Values.C; Object val3 = get1(); + + assertEquals(val1, Values.A); + assertEquals(val2, (isStableEnabled ? Values.A : Values.B)); + assertEquals(val3, (isStableEnabled ? Values.A : Values.C)); + } + } + } + + /* ==================================================== */ + + static class NestedStableField1 { + static class A { + public @Stable Object a; + public @Stable A next; + } + public @Stable A v; + + public static final NestedStableField1 c = new NestedStableField1(); + public static A get() { return c.v.next.next.next.next.next.next.next; } + public static Object get1() { return get().a; } + + public static void test() throws Exception { + { + c.v = new A(); c.v.next = new A(); c.v.next.next = c.v; + c.v.a = Values.A; c.v.next.a = Values.A; A val1 = get(); + c.v.a = Values.B; c.v.next.a = Values.B; A val2 = get(); + + assertEquals(val1.a, Values.B); + assertEquals(val2.a, Values.B); + } + + { + c.v = new A(); c.v.next = c.v; + c.v.a = Values.A; Object val1 = get1(); + c.v.a = Values.B; Object val2 = get1(); + c.v = new A(); c.v.next = c.v; + c.v.a = Values.C; Object val3 = get1(); + + assertEquals(val1, Values.A); + assertEquals(val2, (isStableEnabled ? Values.A : Values.B)); + assertEquals(val3, (isStableEnabled ? Values.A : Values.C)); + } + } + } + /* ==================================================== */ + + static class NestedStableField2 { + static class A { + public @Stable Object a; + public @Stable A left; + public A right; + } + + public @Stable A v; + + public static final NestedStableField2 c = new NestedStableField2(); + public static Object get() { return c.v.left.left.left.a; } + public static Object get1() { return c.v.left.left.right.left.a; } + + public static void test() throws Exception { + { + c.v = new A(); c.v.left = c.v.right = c.v; + c.v.a = Values.A; Object val1 = get(); Object val2 = get1(); + c.v.a = Values.B; Object val3 = get(); Object val4 = get1(); + + assertEquals(val1, Values.A); + assertEquals(val3, (isStableEnabled ? Values.A : Values.B)); + + assertEquals(val2, Values.A); + assertEquals(val4, Values.B); + } + } + } + + /* ==================================================== */ + + static class NestedStableField3 { + static class A { + public @Stable Object a; + public @Stable A[] left; + public A[] right; + } + + public @Stable A[] v; + + public static final NestedStableField3 c = new NestedStableField3(); + public static Object get() { return c.v[0].left[1].left[0].left[1].a; } + public static Object get1() { return c.v[1].left[0].left[1].right[0].left[1].a; } + + public static void test() throws Exception { + { + A elem = new A(); + c.v = new A[] { elem, elem }; c.v[0].left = c.v[0].right = c.v; + elem.a = Values.A; Object val1 = get(); Object val2 = get1(); + elem.a = Values.B; Object val3 = get(); Object val4 = get1(); + + assertEquals(val1, Values.A); + assertEquals(val3, (isStableEnabled ? Values.A : Values.B)); + + assertEquals(val2, Values.A); + assertEquals(val4, Values.B); + } + } + } + + /* ==================================================== */ + // Auxiliary methods + static void assertEquals(Object i, Object j) { if (i != j) throw new AssertionError(i + " != " + j); } + static void assertTrue(boolean b) { if (!b) throw new AssertionError(); } + + static boolean failed = false; + + public static void run(Class test) { + Throwable ex = null; + System.out.print(test.getName()+": "); + try { + test.getMethod("test").invoke(null); + } catch (InvocationTargetException e) { + ex = e.getCause(); + } catch (Throwable e) { + ex = e; + } finally { + if (ex == null) { + System.out.println("PASSED"); + } else { + failed = true; + System.out.println("FAILED"); + ex.printStackTrace(System.out); + } + } + } + + static final boolean isStableEnabled; + static { + HotSpotDiagnosticMXBean diagnostic + = ManagementFactoryHelper.getDiagnosticMXBean(); + VMOption tmp; + try { + tmp = diagnostic.getVMOption("FoldStableValues"); + } catch (IllegalArgumentException e) { + tmp = null; + } + isStableEnabled = (tmp == null ? false : Boolean.parseBoolean(tmp.getValue())); + } +} diff --git a/hotspot/test/compiler/stable/TestStableShort.java b/hotspot/test/compiler/stable/TestStableShort.java new file mode 100644 index 00000000000..a80d0726db6 --- /dev/null +++ b/hotspot/test/compiler/stable/TestStableShort.java @@ -0,0 +1,632 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test TestStableShort + * @summary tests on stable fields and arrays + * @library /testlibrary + * @compile -XDignore.symbol.file TestStableShort.java + * @run main ClassFileInstaller + * java/lang/invoke/TestStableShort + * java/lang/invoke/TestStableShort$ShortStable + * java/lang/invoke/TestStableShort$StaticShortStable + * java/lang/invoke/TestStableShort$VolatileShortStable + * java/lang/invoke/TestStableShort$ShortArrayDim1 + * java/lang/invoke/TestStableShort$ShortArrayDim2 + * java/lang/invoke/TestStableShort$ShortArrayDim3 + * java/lang/invoke/TestStableShort$ShortArrayDim4 + * java/lang/invoke/TestStableShort$ObjectArrayLowerDim0 + * java/lang/invoke/TestStableShort$ObjectArrayLowerDim1 + * java/lang/invoke/TestStableShort$NestedStableField + * java/lang/invoke/TestStableShort$NestedStableField$A + * java/lang/invoke/TestStableShort$NestedStableField1 + * java/lang/invoke/TestStableShort$NestedStableField1$A + * java/lang/invoke/TestStableShort$NestedStableField2 + * java/lang/invoke/TestStableShort$NestedStableField2$A + * java/lang/invoke/TestStableShort$NestedStableField3 + * java/lang/invoke/TestStableShort$NestedStableField3$A + * java/lang/invoke/TestStableShort$DefaultValue + * java/lang/invoke/TestStableShort$ObjectArrayLowerDim2 + * + * @run main/othervm -Xbootclasspath/a:. -XX:+IgnoreUnrecognizedVMOptions + * -XX:+UnlockDiagnosticVMOptions -XX:+FoldStableValues -XX:+UseCompressedOop + * -server -XX:-TieredCompilation -Xcomp + * -XX:CompileOnly=::get,::get1,::get2,::get3,::get4 + * java.lang.invoke.TestStableShort + * + * @run main/othervm -Xbootclasspath/a:. -XX:+IgnoreUnrecognizedVMOptions + * -XX:+UnlockDiagnosticVMOptions -XX:+FoldStableValues -XX:-UseCompressedOop + * -server -XX:-TieredCompilation -Xcomp + * -XX:CompileOnly=::get,::get1,::get2,::get3,::get4 + * java.lang.invoke.TestStableShort + * + * @run main/othervm -Xbootclasspath/a:. -XX:+IgnoreUnrecognizedVMOptions + * -XX:+UnlockDiagnosticVMOptions -XX:-FoldStableValues -XX:+UseCompressedOop + * -server -XX:-TieredCompilation -Xcomp + * -XX:CompileOnly=::get,::get1,::get2,::get3,::get4 + * java.lang.invoke.TestStableShort + * + * @run main/othervm -Xbootclasspath/a:. -XX:+IgnoreUnrecognizedVMOptions + * -XX:+UnlockDiagnosticVMOptions -XX:-FoldStableValues -XX:-UseCompressedOop + * -server -XX:-TieredCompilation -Xcomp + * -XX:CompileOnly=::get,::get1,::get2,::get3,::get4 + * java.lang.invoke.TestStableShort + */ +package java.lang.invoke; + +import com.sun.management.HotSpotDiagnosticMXBean; +import com.sun.management.VMOption; +import sun.management.ManagementFactoryHelper; +import java.lang.reflect.InvocationTargetException; + +public class TestStableShort { + public static void main(String[] args) throws Exception { + System.out.println("@Stable enabled: "+isStableEnabled); + System.out.println(); + + run(DefaultValue.class); + run(ShortStable.class); + run(StaticShortStable.class); + run(VolatileShortStable.class); + + // @Stable arrays: Dim 1-4 + run(ShortArrayDim1.class); + run(ShortArrayDim2.class); + run(ShortArrayDim3.class); + run(ShortArrayDim4.class); + + // @Stable Object field: dynamic arrays + run(ObjectArrayLowerDim0.class); + run(ObjectArrayLowerDim1.class); + run(ObjectArrayLowerDim2.class); + + // Nested @Stable fields + run(NestedStableField.class); + run(NestedStableField1.class); + run(NestedStableField2.class); + run(NestedStableField3.class); + + if (failed) { + throw new Error("TEST FAILED"); + } + } + + /* ==================================================== */ + + static class DefaultValue { + public @Stable short v; + + public static final DefaultValue c = new DefaultValue(); + public static short get() { return c.v; } + public static void test() throws Exception { + short val1 = get(); + c.v = 1; short val2 = get(); + assertEquals(val1, 0); + assertEquals(val2, 1); + } + } + + /* ==================================================== */ + + static class ShortStable { + public @Stable short v; + + public static final ShortStable c = new ShortStable(); + public static short get() { return c.v; } + public static void test() throws Exception { + c.v = 1; short val1 = get(); + c.v = 32767; short val2 = get(); + assertEquals(val1, 1); + assertEquals(val2, (isStableEnabled ? 1 : 32767)); + } + } + + /* ==================================================== */ + + static class StaticShortStable { + public static @Stable short v; + + public static final StaticShortStable c = new StaticShortStable(); + public static short get() { return c.v; } + public static void test() throws Exception { + c.v = 1; short val1 = get(); + c.v = 32767; short val2 = get(); + assertEquals(val1, 1); + assertEquals(val2, (isStableEnabled ? 1 : 32767)); + } + } + + /* ==================================================== */ + + static class VolatileShortStable { + public @Stable volatile short v; + + public static final VolatileShortStable c = new VolatileShortStable(); + public static short get() { return c.v; } + public static void test() throws Exception { + c.v = 1; short val1 = get(); + c.v = 32767; short val2 = get(); + assertEquals(val1, 1); + assertEquals(val2, (isStableEnabled ? 1 : 32767)); + } + } + + /* ==================================================== */ + // @Stable array == field && all components are stable + + static class ShortArrayDim1 { + public @Stable short[] v; + + public static final ShortArrayDim1 c = new ShortArrayDim1(); + public static short get() { return c.v[0]; } + public static short get1() { return c.v[10]; } + public static short[] get2() { return c.v; } + public static void test() throws Exception { + { + c.v = new short[1]; c.v[0] = 1; short val1 = get(); + c.v[0] = 2; short val2 = get(); + assertEquals(val1, 1); + assertEquals(val2, (isStableEnabled ? 1 : 2)); + + c.v = new short[1]; c.v[0] = 3; short val3 = get(); + assertEquals(val3, (isStableEnabled ? 1 : 3)); + } + + { + c.v = new short[20]; c.v[10] = 1; short val1 = get1(); + c.v[10] = 2; short val2 = get1(); + assertEquals(val1, 1); + assertEquals(val2, (isStableEnabled ? 1 : 2)); + + c.v = new short[20]; c.v[10] = 3; short val3 = get1(); + assertEquals(val3, (isStableEnabled ? 1 : 3)); + } + + { + c.v = new short[1]; short[] val1 = get2(); + c.v = new short[1]; short[] val2 = get2(); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + } + } + + /* ==================================================== */ + + static class ShortArrayDim2 { + public @Stable short[][] v; + + public static final ShortArrayDim2 c = new ShortArrayDim2(); + public static short get() { return c.v[0][0]; } + public static short[] get1() { return c.v[0]; } + public static short[][] get2() { return c.v; } + public static void test() throws Exception { + { + c.v = new short[1][1]; c.v[0][0] = 1; short val1 = get(); + c.v[0][0] = 2; short val2 = get(); + assertEquals(val1, 1); + assertEquals(val2, (isStableEnabled ? 1 : 2)); + + c.v = new short[1][1]; c.v[0][0] = 3; short val3 = get(); + assertEquals(val3, (isStableEnabled ? 1 : 3)); + + c.v[0] = new short[1]; c.v[0][0] = 4; short val4 = get(); + assertEquals(val4, (isStableEnabled ? 1 : 4)); + } + + { + c.v = new short[1][1]; short[] val1 = get1(); + c.v[0] = new short[1]; short[] val2 = get1(); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + + { + c.v = new short[1][1]; short[][] val1 = get2(); + c.v = new short[1][1]; short[][] val2 = get2(); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + } + } + + /* ==================================================== */ + + static class ShortArrayDim3 { + public @Stable short[][][] v; + + public static final ShortArrayDim3 c = new ShortArrayDim3(); + public static short get() { return c.v[0][0][0]; } + public static short[] get1() { return c.v[0][0]; } + public static short[][] get2() { return c.v[0]; } + public static short[][][] get3() { return c.v; } + public static void test() throws Exception { + { + c.v = new short[1][1][1]; c.v[0][0][0] = 1; short val1 = get(); + c.v[0][0][0] = 2; short val2 = get(); + assertEquals(val1, 1); + assertEquals(val2, (isStableEnabled ? 1 : 2)); + + c.v = new short[1][1][1]; c.v[0][0][0] = 3; short val3 = get(); + assertEquals(val3, (isStableEnabled ? 1 : 3)); + + c.v[0] = new short[1][1]; c.v[0][0][0] = 4; short val4 = get(); + assertEquals(val4, (isStableEnabled ? 1 : 4)); + + c.v[0][0] = new short[1]; c.v[0][0][0] = 5; short val5 = get(); + assertEquals(val5, (isStableEnabled ? 1 : 5)); + } + + { + c.v = new short[1][1][1]; short[] val1 = get1(); + c.v[0][0] = new short[1]; short[] val2 = get1(); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + + { + c.v = new short[1][1][1]; short[][] val1 = get2(); + c.v[0] = new short[1][1]; short[][] val2 = get2(); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + + { + c.v = new short[1][1][1]; short[][][] val1 = get3(); + c.v = new short[1][1][1]; short[][][] val2 = get3(); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + } + } + + /* ==================================================== */ + + static class ShortArrayDim4 { + public @Stable short[][][][] v; + + public static final ShortArrayDim4 c = new ShortArrayDim4(); + public static short get() { return c.v[0][0][0][0]; } + public static short[] get1() { return c.v[0][0][0]; } + public static short[][] get2() { return c.v[0][0]; } + public static short[][][] get3() { return c.v[0]; } + public static short[][][][] get4() { return c.v; } + public static void test() throws Exception { + { + c.v = new short[1][1][1][1]; c.v[0][0][0][0] = 1; short val1 = get(); + c.v[0][0][0][0] = 2; short val2 = get(); + assertEquals(val1, 1); + assertEquals(val2, (isStableEnabled ? 1 : 2)); + + c.v = new short[1][1][1][1]; c.v[0][0][0][0] = 3; short val3 = get(); + assertEquals(val3, (isStableEnabled ? 1 : 3)); + + c.v[0] = new short[1][1][1]; c.v[0][0][0][0] = 4; short val4 = get(); + assertEquals(val4, (isStableEnabled ? 1 : 4)); + + c.v[0][0] = new short[1][1]; c.v[0][0][0][0] = 5; short val5 = get(); + assertEquals(val5, (isStableEnabled ? 1 : 5)); + + c.v[0][0][0] = new short[1]; c.v[0][0][0][0] = 6; short val6 = get(); + assertEquals(val6, (isStableEnabled ? 1 : 6)); + } + + { + c.v = new short[1][1][1][1]; short[] val1 = get1(); + c.v[0][0][0] = new short[1]; short[] val2 = get1(); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + + { + c.v = new short[1][1][1][1]; short[][] val1 = get2(); + c.v[0][0] = new short[1][1]; short[][] val2 = get2(); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + + { + c.v = new short[1][1][1][1]; short[][][] val1 = get3(); + c.v[0] = new short[1][1][1]; short[][][] val2 = get3(); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + + { + c.v = new short[1][1][1][1]; short[][][][] val1 = get4(); + c.v = new short[1][1][1][1]; short[][][][] val2 = get4(); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + + } + } + + /* ==================================================== */ + // Dynamic Dim is higher than static + + static class ObjectArrayLowerDim0 { + public @Stable Object v; + + public static final ObjectArrayLowerDim0 c = new ObjectArrayLowerDim0(); + public static short get() { return ((short[])c.v)[0]; } + public static short[] get1() { return (short[])c.v; } + + public static void test() throws Exception { + { + c.v = new short[1]; ((short[])c.v)[0] = 1; short val1 = get(); + ((short[])c.v)[0] = 2; short val2 = get(); + + assertEquals(val1, 1); + assertEquals(val2, 2); + } + + { + c.v = new short[1]; short[] val1 = get1(); + c.v = new short[1]; short[] val2 = get1(); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + } + } + + /* ==================================================== */ + + static class ObjectArrayLowerDim1 { + public @Stable Object[] v; + + public static final ObjectArrayLowerDim1 c = new ObjectArrayLowerDim1(); + public static short get() { return ((short[][])c.v)[0][0]; } + public static short[] get1() { return (short[])(c.v[0]); } + public static Object[] get2() { return c.v; } + + public static void test() throws Exception { + { + c.v = new short[1][1]; ((short[][])c.v)[0][0] = 1; short val1 = get(); + ((short[][])c.v)[0][0] = 2; short val2 = get(); + + assertEquals(val1, 1); + assertEquals(val2, 2); + } + + { + c.v = new short[1][1]; c.v[0] = new short[0]; short[] val1 = get1(); + c.v[0] = new short[0]; short[] val2 = get1(); + + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + + { + c.v = new short[0][0]; Object[] val1 = get2(); + c.v = new short[0][0]; Object[] val2 = get2(); + + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + } + } + + /* ==================================================== */ + + static class ObjectArrayLowerDim2 { + public @Stable Object[][] v; + + public static final ObjectArrayLowerDim2 c = new ObjectArrayLowerDim2(); + public static short get() { return ((short[][][])c.v)[0][0][0]; } + public static short[] get1() { return (short[])(c.v[0][0]); } + public static short[][] get2() { return (short[][])(c.v[0]); } + public static Object[][] get3() { return c.v; } + + public static void test() throws Exception { + { + c.v = new short[1][1][1]; ((short[][][])c.v)[0][0][0] = 1; short val1 = get(); + ((short[][][])c.v)[0][0][0] = 2; short val2 = get(); + + assertEquals(val1, 1); + assertEquals(val2, 2); + } + + { + c.v = new short[1][1][1]; c.v[0][0] = new short[0]; short[] val1 = get1(); + c.v[0][0] = new short[0]; short[] val2 = get1(); + + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + + { + c.v = new short[1][1][1]; c.v[0] = new short[0][0]; short[][] val1 = get2(); + c.v[0] = new short[0][0]; short[][] val2 = get2(); + + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + + { + c.v = new short[0][0][0]; Object[][] val1 = get3(); + c.v = new short[0][0][0]; Object[][] val2 = get3(); + + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); + } + } + } + + /* ==================================================== */ + + static class NestedStableField { + static class A { + public @Stable short a; + + } + public @Stable A v; + + public static final NestedStableField c = new NestedStableField(); + public static A get() { return c.v; } + public static short get1() { return get().a; } + + public static void test() throws Exception { + { + c.v = new A(); c.v.a = 1; A val1 = get(); + c.v.a = 2; A val2 = get(); + + assertEquals(val1.a, 2); + assertEquals(val2.a, 2); + } + + { + c.v = new A(); c.v.a = 1; short val1 = get1(); + c.v.a = 2; short val2 = get1(); + c.v = new A(); c.v.a = 3; short val3 = get1(); + + assertEquals(val1, 1); + assertEquals(val2, (isStableEnabled ? 1 : 2)); + assertEquals(val3, (isStableEnabled ? 1 : 3)); + } + } + } + + /* ==================================================== */ + + static class NestedStableField1 { + static class A { + public @Stable short a; + public @Stable A next; + } + public @Stable A v; + + public static final NestedStableField1 c = new NestedStableField1(); + public static A get() { return c.v.next.next.next.next.next.next.next; } + public static short get1() { return get().a; } + + public static void test() throws Exception { + { + c.v = new A(); c.v.next = new A(); c.v.next.next = c.v; + c.v.a = 1; c.v.next.a = 1; A val1 = get(); + c.v.a = 2; c.v.next.a = 2; A val2 = get(); + + assertEquals(val1.a, 2); + assertEquals(val2.a, 2); + } + + { + c.v = new A(); c.v.next = c.v; + c.v.a = 1; short val1 = get1(); + c.v.a = 2; short val2 = get1(); + c.v = new A(); c.v.next = c.v; + c.v.a = 3; short val3 = get1(); + + assertEquals(val1, 1); + assertEquals(val2, (isStableEnabled ? 1 : 2)); + assertEquals(val3, (isStableEnabled ? 1 : 3)); + } + } + } + /* ==================================================== */ + + static class NestedStableField2 { + static class A { + public @Stable short a; + public @Stable A left; + public A right; + } + + public @Stable A v; + + public static final NestedStableField2 c = new NestedStableField2(); + public static short get() { return c.v.left.left.left.a; } + public static short get1() { return c.v.left.left.right.left.a; } + + public static void test() throws Exception { + { + c.v = new A(); c.v.left = c.v.right = c.v; + c.v.a = 1; short val1 = get(); short val2 = get1(); + c.v.a = 2; short val3 = get(); short val4 = get1(); + + assertEquals(val1, 1); + assertEquals(val3, (isStableEnabled ? 1 : 2)); + + assertEquals(val2, 1); + assertEquals(val4, 2); + } + } + } + + /* ==================================================== */ + + static class NestedStableField3 { + static class A { + public @Stable short a; + public @Stable A[] left; + public A[] right; + } + + public @Stable A[] v; + + public static final NestedStableField3 c = new NestedStableField3(); + public static short get() { return c.v[0].left[1].left[0].left[1].a; } + public static short get1() { return c.v[1].left[0].left[1].right[0].left[1].a; } + + public static void test() throws Exception { + { + A elem = new A(); + c.v = new A[] { elem, elem }; c.v[0].left = c.v[0].right = c.v; + elem.a = 1; short val1 = get(); short val2 = get1(); + elem.a = 2; short val3 = get(); short val4 = get1(); + + assertEquals(val1, 1); + assertEquals(val3, (isStableEnabled ? 1 : 2)); + + assertEquals(val2, 1); + assertEquals(val4, 2); + } + } + } + + /* ==================================================== */ + // Auxiliary methods + static void assertEquals(int i, int j) { if (i != j) throw new AssertionError(i + " != " + j); } + static void assertTrue(boolean b) { if (!b) throw new AssertionError(); } + + static boolean failed = false; + + public static void run(Class test) { + Throwable ex = null; + System.out.print(test.getName()+": "); + try { + test.getMethod("test").invoke(null); + } catch (InvocationTargetException e) { + ex = e.getCause(); + } catch (Throwable e) { + ex = e; + } finally { + if (ex == null) { + System.out.println("PASSED"); + } else { + failed = true; + System.out.println("FAILED"); + ex.printStackTrace(System.out); + } + } + } + + static final boolean isStableEnabled; + static { + HotSpotDiagnosticMXBean diagnostic + = ManagementFactoryHelper.getDiagnosticMXBean(); + VMOption tmp; + try { + tmp = diagnostic.getVMOption("FoldStableValues"); + } catch (IllegalArgumentException e) { + tmp = null; + } + isStableEnabled = (tmp == null ? false : Boolean.parseBoolean(tmp.getValue())); + } +} From 1dbe60a4752f8097718af12558a46d265e3cc801 Mon Sep 17 00:00:00 2001 From: Vladimir Ivanov Date: Tue, 4 Mar 2014 02:23:16 -0800 Subject: [PATCH 021/116] 8025842: Convert warning("Thread holding lock at safepoint that vm can block on") to fatal(...) Reviewed-by: iveresov, roland, coleenp --- hotspot/src/share/vm/runtime/thread.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hotspot/src/share/vm/runtime/thread.cpp b/hotspot/src/share/vm/runtime/thread.cpp index d0fb67715ae..bd794da4524 100644 --- a/hotspot/src/share/vm/runtime/thread.cpp +++ b/hotspot/src/share/vm/runtime/thread.cpp @@ -910,7 +910,7 @@ void Thread::check_for_valid_safepoint_state(bool potential_vm_operation) { cur != VMOperationRequest_lock && cur != VMOperationQueue_lock) || cur->rank() == Mutex::special) { - warning("Thread holding lock at safepoint that vm can block on: %s", cur->name()); + fatal(err_msg("Thread holding lock at safepoint that vm can block on: %s", cur->name())); } } } From fc6e8666a115543bd14620c1f6d1a3f56e381a25 Mon Sep 17 00:00:00 2001 From: Vladimir Ivanov Date: Tue, 4 Mar 2014 02:33:10 -0800 Subject: [PATCH 022/116] 8036100: Default method returns true for a while, and then returns false Reviewed-by: kvn, jrose --- hotspot/src/share/vm/ci/ciMethod.cpp | 5 ++ .../inlining/InlineDefaultMethod1.java | 58 +++++++++++++++++++ 2 files changed, 63 insertions(+) create mode 100644 hotspot/test/compiler/inlining/InlineDefaultMethod1.java diff --git a/hotspot/src/share/vm/ci/ciMethod.cpp b/hotspot/src/share/vm/ci/ciMethod.cpp index 86f1ed31bef..c927b10a030 100644 --- a/hotspot/src/share/vm/ci/ciMethod.cpp +++ b/hotspot/src/share/vm/ci/ciMethod.cpp @@ -724,6 +724,11 @@ ciMethod* ciMethod::find_monomorphic_target(ciInstanceKlass* caller, VM_ENTRY_MARK; + // Disable CHA for default methods for now + if (root_m->get_Method()->is_default_method()) { + return NULL; + } + methodHandle target; { MutexLocker locker(Compile_lock); diff --git a/hotspot/test/compiler/inlining/InlineDefaultMethod1.java b/hotspot/test/compiler/inlining/InlineDefaultMethod1.java new file mode 100644 index 00000000000..d0cadb8fe4e --- /dev/null +++ b/hotspot/test/compiler/inlining/InlineDefaultMethod1.java @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 8036100 + * @summary Default method returns true for a while, and then returns false + * @run main/othervm -Xcomp -XX:CompileOnly=InlineDefaultMethod1::test + * -XX:CompileOnly=I1::m -XX:CompileOnly=I2::m + * InlineDefaultMethod1 + */ +interface I1 { + default public int m() { return 0; } +} + +interface I2 extends I1 { + default public int m() { return 1; } +} + +abstract class A implements I1 { +} + +class B extends A implements I2 { +} + +public class InlineDefaultMethod1 { + public static void test(A obj) { + int id = obj.m(); + if (id != 1) { + throw new AssertionError("Called wrong method: 1 != "+id); + } + } + + public static void main(String[] args) throws InterruptedException { + test(new B()); + System.out.println("TEST PASSED"); + } +} From 7d7f4bf62a84376a63026d4c4636f968293b0280 Mon Sep 17 00:00:00 2001 From: Volker Simonis Date: Tue, 4 Mar 2014 17:14:00 +0100 Subject: [PATCH 023/116] 8036614: AIX: fix adjust-mflags.sh to build with GNU Make 4.0 (adapt 8028407 for AIX) Reviewed-by: kvn --- hotspot/make/aix/makefiles/adjust-mflags.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hotspot/make/aix/makefiles/adjust-mflags.sh b/hotspot/make/aix/makefiles/adjust-mflags.sh index df1aa625b77..6c06819fb74 100644 --- a/hotspot/make/aix/makefiles/adjust-mflags.sh +++ b/hotspot/make/aix/makefiles/adjust-mflags.sh @@ -1,6 +1,6 @@ #! /bin/sh # -# Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 1999, 2014, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it @@ -64,7 +64,7 @@ MFLAGS=` echo "$MFLAGS" \ | sed ' s/^-/ -/ - s/ -\([^ ][^ ]*\)j/ -\1 -j/ + s/ -\([^ I][^ I]*\)j/ -\1 -j/ s/ -j[0-9][0-9]*/ -j/ s/ -j\([^ ]\)/ -j -\1/ s/ -j/ -j'${HOTSPOT_BUILD_JOBS:-${default_build_jobs}}'/ From 694a2d010b62be897afa765a83f694278fb7dbd1 Mon Sep 17 00:00:00 2001 From: Mario Torre Date: Tue, 4 Mar 2014 18:52:06 -0800 Subject: [PATCH 024/116] 8036619: Shark: add LLVM 3.4 support Reviewed-by: twisti --- hotspot/make/linux/makefiles/zeroshark.make | 3 + hotspot/src/share/vm/shark/llvmHeaders.hpp | 32 +++++++-- hotspot/src/share/vm/shark/sharkCompiler.cpp | 4 ++ hotspot/src/share/vm/shark/sharkCompiler.hpp | 3 + hotspot/src/share/vm/shark/sharkInliner.cpp | 4 ++ .../src/share/vm/shark/sharkMemoryManager.cpp | 66 ++++++++++++------- .../src/share/vm/shark/sharkMemoryManager.hpp | 27 +++++--- 7 files changed, 101 insertions(+), 38 deletions(-) diff --git a/hotspot/make/linux/makefiles/zeroshark.make b/hotspot/make/linux/makefiles/zeroshark.make index 890a0910e7f..3c10770d42a 100644 --- a/hotspot/make/linux/makefiles/zeroshark.make +++ b/hotspot/make/linux/makefiles/zeroshark.make @@ -25,6 +25,9 @@ # Setup common to Zero (non-Shark) and Shark versions of VM +# override this from the main file because some version of llvm do not like -Wundef +WARNING_FLAGS = -Wpointer-arith -Wsign-compare -Wunused-function -Wunused-value + # The copied fdlibm routines in sharedRuntimeTrig.o must not be optimized OPT_CFLAGS/sharedRuntimeTrig.o = $(OPT_CFLAGS/NOOPT) # The copied fdlibm routines in sharedRuntimeTrans.o must not be optimized diff --git a/hotspot/src/share/vm/shark/llvmHeaders.hpp b/hotspot/src/share/vm/shark/llvmHeaders.hpp index 1f2c2c79778..05ef7fea1d3 100644 --- a/hotspot/src/share/vm/shark/llvmHeaders.hpp +++ b/hotspot/src/share/vm/shark/llvmHeaders.hpp @@ -36,21 +36,43 @@ #endif #include +#include + +// includes specific to each version +#if SHARK_LLVM_VERSION <= 31 +#include +#include #include #include #include -#include #include #include #include -#if SHARK_LLVM_VERSION <= 31 -#include -#else +#elif SHARK_LLVM_VERSION <= 32 #include +#include +#include +#include +#include +#include +#include +#include +#else // SHARK_LLVM_VERSION <= 34 +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #endif + +// common includes #include #include -#include #include #include #include diff --git a/hotspot/src/share/vm/shark/sharkCompiler.cpp b/hotspot/src/share/vm/shark/sharkCompiler.cpp index 17fdcfcbbe3..fe62efdecbd 100644 --- a/hotspot/src/share/vm/shark/sharkCompiler.cpp +++ b/hotspot/src/share/vm/shark/sharkCompiler.cpp @@ -364,3 +364,7 @@ const char* SharkCompiler::methodname(const char* klass, const char* method) { *(dst++) = '\0'; return buf; } + +void SharkCompiler::print_timers() { + // do nothing +} diff --git a/hotspot/src/share/vm/shark/sharkCompiler.hpp b/hotspot/src/share/vm/shark/sharkCompiler.hpp index 97400298865..1b8681771a0 100644 --- a/hotspot/src/share/vm/shark/sharkCompiler.hpp +++ b/hotspot/src/share/vm/shark/sharkCompiler.hpp @@ -56,6 +56,9 @@ class SharkCompiler : public AbstractCompiler { // Compile a normal (bytecode) method and install it in the VM void compile_method(ciEnv* env, ciMethod* target, int entry_bci); + // Print compilation timers and statistics + void print_timers(); + // Generate a wrapper for a native (JNI) method nmethod* generate_native_wrapper(MacroAssembler* masm, methodHandle target, diff --git a/hotspot/src/share/vm/shark/sharkInliner.cpp b/hotspot/src/share/vm/shark/sharkInliner.cpp index 76b63a16342..47465848d7d 100644 --- a/hotspot/src/share/vm/shark/sharkInliner.cpp +++ b/hotspot/src/share/vm/shark/sharkInliner.cpp @@ -744,6 +744,10 @@ bool SharkInlinerHelper::do_field_access(bool is_get, bool is_field) { } bool SharkInliner::attempt_inline(ciMethod *target, SharkState *state) { + if (!Inline) { + return false; + } + if (SharkIntrinsics::is_intrinsic(target)) { SharkIntrinsics::inline_intrinsic(target, state); return true; diff --git a/hotspot/src/share/vm/shark/sharkMemoryManager.cpp b/hotspot/src/share/vm/shark/sharkMemoryManager.cpp index 20cb0e5ebfe..d986ae8868b 100644 --- a/hotspot/src/share/vm/shark/sharkMemoryManager.cpp +++ b/hotspot/src/share/vm/shark/sharkMemoryManager.cpp @@ -59,18 +59,6 @@ void SharkMemoryManager::endFunctionBody(const Function* F, entry->set_code_limit(FunctionEnd); } -unsigned char* SharkMemoryManager::startExceptionTable(const Function* F, - uintptr_t& ActualSize) { - return mm()->startExceptionTable(F, ActualSize); -} - -void SharkMemoryManager::endExceptionTable(const Function* F, - unsigned char* TableStart, - unsigned char* TableEnd, - unsigned char* FrameRegister) { - mm()->endExceptionTable(F, TableStart, TableEnd, FrameRegister); -} - void SharkMemoryManager::setMemoryWritable() { mm()->setMemoryWritable(); } @@ -79,10 +67,6 @@ void SharkMemoryManager::setMemoryExecutable() { mm()->setMemoryExecutable(); } -void SharkMemoryManager::deallocateExceptionTable(void *ptr) { - mm()->deallocateExceptionTable(ptr); -} - void SharkMemoryManager::deallocateFunctionBody(void *ptr) { mm()->deallocateFunctionBody(ptr); } @@ -96,14 +80,6 @@ void* SharkMemoryManager::getPointerToNamedFunction(const std::string &Name, boo return mm()->getPointerToNamedFunction(Name, AbortOnFailure); } -uint8_t* SharkMemoryManager::allocateCodeSection(uintptr_t Size, unsigned Alignment, unsigned SectionID) { - return mm()->allocateCodeSection(Size, Alignment, SectionID); -} - -uint8_t* SharkMemoryManager::allocateDataSection(uintptr_t Size, unsigned Alignment, unsigned SectionID) { - return mm()->allocateDataSection(Size, Alignment, SectionID); -} - void SharkMemoryManager::setPoisonMemory(bool poison) { mm()->setPoisonMemory(poison); } @@ -112,3 +88,45 @@ unsigned char *SharkMemoryManager::allocateSpace(intptr_t Size, unsigned int Alignment) { return mm()->allocateSpace(Size, Alignment); } + +#if SHARK_LLVM_VERSION <= 32 + +uint8_t* SharkMemoryManager::allocateCodeSection(uintptr_t Size, unsigned Alignment, unsigned SectionID) { + return mm()->allocateCodeSection(Size, Alignment, SectionID); +} + +uint8_t* SharkMemoryManager::allocateDataSection(uintptr_t Size, unsigned Alignment, unsigned SectionID) { + return mm()->allocateDataSection(Size, Alignment, SectionID); +} + +void SharkMemoryManager::deallocateExceptionTable(void *ptr) { + mm()->deallocateExceptionTable(ptr); +} + +unsigned char* SharkMemoryManager::startExceptionTable(const Function* F, + uintptr_t& ActualSize) { + return mm()->startExceptionTable(F, ActualSize); +} + +void SharkMemoryManager::endExceptionTable(const Function* F, + unsigned char* TableStart, + unsigned char* TableEnd, + unsigned char* FrameRegister) { + mm()->endExceptionTable(F, TableStart, TableEnd, FrameRegister); +} + +#else + +uint8_t *SharkMemoryManager::allocateCodeSection(uintptr_t Size, unsigned Alignment, unsigned SectionID, StringRef SectionName) { + return mm()->allocateCodeSection(Size, Alignment, SectionID, SectionName); +} + +uint8_t* SharkMemoryManager::allocateDataSection(uintptr_t Size, unsigned Alignment, unsigned SectionID, StringRef SectionName, bool IsReadOnly) { + return mm()->allocateDataSection(Size, Alignment, SectionID, SectionName, IsReadOnly); +} + +bool SharkMemoryManager::finalizeMemory(std::string *ErrMsg) { + return mm()->finalizeMemory(ErrMsg); +} + +#endif diff --git a/hotspot/src/share/vm/shark/sharkMemoryManager.hpp b/hotspot/src/share/vm/shark/sharkMemoryManager.hpp index fa725a14502..7a5ad7b3e1c 100644 --- a/hotspot/src/share/vm/shark/sharkMemoryManager.hpp +++ b/hotspot/src/share/vm/shark/sharkMemoryManager.hpp @@ -69,23 +69,32 @@ class SharkMemoryManager : public llvm::JITMemoryManager { void endFunctionBody(const llvm::Function* F, unsigned char* FunctionStart, unsigned char* FunctionEnd); - unsigned char* startExceptionTable(const llvm::Function* F, - uintptr_t& ActualSize); - void endExceptionTable(const llvm::Function* F, - unsigned char* TableStart, - unsigned char* TableEnd, - unsigned char* FrameRegister); + void *getPointerToNamedFunction(const std::string &Name, bool AbortOnFailure = true); - uint8_t *allocateCodeSection(uintptr_t Size, unsigned Alignment, unsigned SectionID); - uint8_t *allocateDataSection(uintptr_t Size, unsigned Alignment, unsigned SectionID); void setPoisonMemory(bool); uint8_t* allocateGlobal(uintptr_t, unsigned int); void setMemoryWritable(); void setMemoryExecutable(); - void deallocateExceptionTable(void *ptr); void deallocateFunctionBody(void *ptr); unsigned char *allocateSpace(intptr_t Size, unsigned int Alignment); + +#if SHARK_LLVM_VERSION <= 32 +uint8_t *allocateCodeSection(uintptr_t Size, unsigned Alignment, unsigned SectionID); +uint8_t *allocateDataSection(uintptr_t Size, unsigned Alignment, unsigned SectionID); +unsigned char* startExceptionTable(const llvm::Function* F, + uintptr_t& ActualSize); +void deallocateExceptionTable(void *ptr); +void endExceptionTable(const llvm::Function* F, + unsigned char* TableStart, + unsigned char* TableEnd, + unsigned char* FrameRegister); +#else +uint8_t *allocateCodeSection(uintptr_t Size, unsigned Alignment, unsigned SectionID, llvm::StringRef SectionName); +uint8_t *allocateDataSection(uintptr_t Size, unsigned Alignment, unsigned SectionID, llvm::StringRef SectionName, bool IsReadOnly); +bool finalizeMemory(std::string *ErrMsg = 0); +#endif + }; #endif // SHARE_VM_SHARK_SHARKMEMORYMANAGER_HPP From 9150b930938f2cff47765cea4fbaaff90b6dd90f Mon Sep 17 00:00:00 2001 From: Albert Noll Date: Wed, 5 Mar 2014 06:08:19 +0100 Subject: [PATCH 025/116] 8036092: [TESTBUG] compiler/uncommontrap/TestSpecTrapClassUnloading.java fails with: Unrecognized VM option 'UseTypeSpeculation' Add -XX:+IgnoreUnrecognizedVMOptions to @main/othervm to make the test pass on Client VM Reviewed-by: kvn, roland --- .../test/compiler/uncommontrap/TestSpecTrapClassUnloading.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hotspot/test/compiler/uncommontrap/TestSpecTrapClassUnloading.java b/hotspot/test/compiler/uncommontrap/TestSpecTrapClassUnloading.java index 11572672afe..e660ad5e56d 100644 --- a/hotspot/test/compiler/uncommontrap/TestSpecTrapClassUnloading.java +++ b/hotspot/test/compiler/uncommontrap/TestSpecTrapClassUnloading.java @@ -25,7 +25,7 @@ * @test * @bug 8031752 * @summary speculative traps need to be cleaned up at GC - * @run main/othervm -XX:-TieredCompilation -XX:-UseOnStackReplacement -XX:-BackgroundCompilation -XX:+UnlockExperimentalVMOptions -XX:+UseTypeSpeculation -XX:TypeProfileLevel=222 -XX:CompileCommand=exclude,java.lang.reflect.Method::invoke -XX:CompileCommand=exclude,sun.reflect.DelegatingMethodAccessorImpl::invoke -Xmx1M TestSpecTrapClassUnloading + * @run main/othervm -XX:+IgnoreUnrecognizedVMOptions -XX:-TieredCompilation -XX:-UseOnStackReplacement -XX:-BackgroundCompilation -XX:+UnlockExperimentalVMOptions -XX:+UseTypeSpeculation -XX:TypeProfileLevel=222 -XX:CompileCommand=exclude,java.lang.reflect.Method::invoke -XX:CompileCommand=exclude,sun.reflect.DelegatingMethodAccessorImpl::invoke -Xmx1M TestSpecTrapClassUnloading * */ From 38fd717c30dcacf76aed2cca9e4848f81177f86f Mon Sep 17 00:00:00 2001 From: Roland Westrelin Date: Wed, 5 Mar 2014 09:29:12 +0100 Subject: [PATCH 026/116] 8035841: assert(dp_src->tag() == dp_dst->tag()) failed: should be same tags 1 != 0 at ciMethodData.cpp:90 Concurrent update of traps with construction of ciMethodData Reviewed-by: kvn, twisti --- hotspot/src/share/vm/ci/ciMethodData.cpp | 7 +-- hotspot/src/share/vm/oops/methodData.cpp | 68 ++++++++++++------------ hotspot/src/share/vm/oops/methodData.hpp | 12 ++--- 3 files changed, 43 insertions(+), 44 deletions(-) diff --git a/hotspot/src/share/vm/ci/ciMethodData.cpp b/hotspot/src/share/vm/ci/ciMethodData.cpp index 950e3d6dd21..bc8794063ad 100644 --- a/hotspot/src/share/vm/ci/ciMethodData.cpp +++ b/hotspot/src/share/vm/ci/ciMethodData.cpp @@ -87,8 +87,9 @@ void ciMethodData::load_extra_data() { DataLayout* dp_dst = extra_data_base(); for (;; dp_src = MethodData::next_extra(dp_src), dp_dst = MethodData::next_extra(dp_dst)) { assert(dp_src < end_src, "moved past end of extra data"); - assert(dp_src->tag() == dp_dst->tag(), err_msg("should be same tags %d != %d", dp_src->tag(), dp_dst->tag())); - switch(dp_src->tag()) { + // New traps in the MDO can be added as we translate the copy so + // look at the entries in the copy. + switch(dp_dst->tag()) { case DataLayout::speculative_trap_data_tag: { ciSpeculativeTrapData* data_dst = new ciSpeculativeTrapData(dp_dst); SpeculativeTrapData* data_src = new SpeculativeTrapData(dp_src); @@ -102,7 +103,7 @@ void ciMethodData::load_extra_data() { // An empty slot or ArgInfoData entry marks the end of the trap data return; default: - fatal(err_msg("bad tag = %d", dp_src->tag())); + fatal(err_msg("bad tag = %d", dp_dst->tag())); } } } diff --git a/hotspot/src/share/vm/oops/methodData.cpp b/hotspot/src/share/vm/oops/methodData.cpp index b226173d832..0e6e0ec0130 100644 --- a/hotspot/src/share/vm/oops/methodData.cpp +++ b/hotspot/src/share/vm/oops/methodData.cpp @@ -1071,7 +1071,8 @@ void MethodData::post_initialize(BytecodeStream* stream) { } // Initialize the MethodData* corresponding to a given method. -MethodData::MethodData(methodHandle method, int size, TRAPS) { +MethodData::MethodData(methodHandle method, int size, TRAPS) + : _extra_data_lock(Monitor::leaf, "MDO extra data lock") { No_Safepoint_Verifier no_safepoint; // init function atomic wrt GC ResourceMark rm; // Set the method back-pointer. @@ -1235,7 +1236,7 @@ DataLayout* MethodData::next_extra(DataLayout* dp) { return (DataLayout*)((address)dp + DataLayout::compute_size_in_bytes(nb_cells)); } -ProfileData* MethodData::bci_to_extra_data_helper(int bci, Method* m, DataLayout*& dp) { +ProfileData* MethodData::bci_to_extra_data_helper(int bci, Method* m, DataLayout*& dp, bool concurrent) { DataLayout* end = extra_data_limit(); for (;; dp = next_extra(dp)) { @@ -1257,10 +1258,11 @@ ProfileData* MethodData::bci_to_extra_data_helper(int bci, Method* m, DataLayout if (m != NULL) { SpeculativeTrapData* data = new SpeculativeTrapData(dp); // data->method() may be null in case of a concurrent - // allocation. Assume it's for the same method and use that + // allocation. Maybe it's for the same method. Try to use that // entry in that case. if (dp->bci() == bci) { if (data->method() == NULL) { + assert(concurrent, "impossible because no concurrent allocation"); return NULL; } else if (data->method() == m) { return data; @@ -1289,40 +1291,40 @@ ProfileData* MethodData::bci_to_extra_data(int bci, Method* m, bool create_if_mi // Allocation in the extra data space has to be atomic because not // all entries have the same size and non atomic concurrent // allocation would result in a corrupted extra data space. - while (true) { - ProfileData* result = bci_to_extra_data_helper(bci, m, dp); - if (result != NULL) { + ProfileData* result = bci_to_extra_data_helper(bci, m, dp, true); + if (result != NULL) { + return result; + } + + if (create_if_missing && dp < end) { + MutexLocker ml(&_extra_data_lock); + // Check again now that we have the lock. Another thread may + // have added extra data entries. + ProfileData* result = bci_to_extra_data_helper(bci, m, dp, false); + if (result != NULL || dp >= end) { return result; } - if (create_if_missing && dp < end) { - assert(dp->tag() == DataLayout::no_tag || (dp->tag() == DataLayout::speculative_trap_data_tag && m != NULL), "should be free"); - assert(next_extra(dp)->tag() == DataLayout::no_tag || next_extra(dp)->tag() == DataLayout::arg_info_data_tag, "should be free or arg info"); - u1 tag = m == NULL ? DataLayout::bit_data_tag : DataLayout::speculative_trap_data_tag; - // SpeculativeTrapData is 2 slots. Make sure we have room. - if (m != NULL && next_extra(dp)->tag() != DataLayout::no_tag) { - return NULL; - } - DataLayout temp; - temp.initialize(tag, bci, 0); - // May have been set concurrently - if (dp->header() != temp.header() && !dp->atomic_set_header(temp.header())) { - // Allocation failure because of concurrent allocation. Try - // again. - continue; - } - assert(dp->tag() == tag, "sane"); - assert(dp->bci() == bci, "no concurrent allocation"); - if (tag == DataLayout::bit_data_tag) { - return new BitData(dp); - } else { - // If being allocated concurrently, one trap may be lost - SpeculativeTrapData* data = new SpeculativeTrapData(dp); - data->set_method(m); - return data; - } + assert(dp->tag() == DataLayout::no_tag || (dp->tag() == DataLayout::speculative_trap_data_tag && m != NULL), "should be free"); + assert(next_extra(dp)->tag() == DataLayout::no_tag || next_extra(dp)->tag() == DataLayout::arg_info_data_tag, "should be free or arg info"); + u1 tag = m == NULL ? DataLayout::bit_data_tag : DataLayout::speculative_trap_data_tag; + // SpeculativeTrapData is 2 slots. Make sure we have room. + if (m != NULL && next_extra(dp)->tag() != DataLayout::no_tag) { + return NULL; + } + DataLayout temp; + temp.initialize(tag, bci, 0); + + dp->set_header(temp.header()); + assert(dp->tag() == tag, "sane"); + assert(dp->bci() == bci, "no concurrent allocation"); + if (tag == DataLayout::bit_data_tag) { + return new BitData(dp); + } else { + SpeculativeTrapData* data = new SpeculativeTrapData(dp); + data->set_method(m); + return data; } - return NULL; } return NULL; } diff --git a/hotspot/src/share/vm/oops/methodData.hpp b/hotspot/src/share/vm/oops/methodData.hpp index 76b0708f233..e0218f9fd47 100644 --- a/hotspot/src/share/vm/oops/methodData.hpp +++ b/hotspot/src/share/vm/oops/methodData.hpp @@ -190,12 +190,6 @@ public: void set_header(intptr_t value) { _header._bits = value; } - bool atomic_set_header(intptr_t value) { - if (Atomic::cmpxchg_ptr(value, (volatile intptr_t*)&_header._bits, 0) == 0) { - return true; - } - return false; - } intptr_t header() { return _header._bits; } @@ -2047,10 +2041,12 @@ private: // Cached hint for bci_to_dp and bci_to_data int _hint_di; + Mutex _extra_data_lock; + MethodData(methodHandle method, int size, TRAPS); public: static MethodData* allocate(ClassLoaderData* loader_data, methodHandle method, TRAPS); - MethodData() {}; // For ciMethodData + MethodData() : _extra_data_lock(Monitor::leaf, "MDO extra data lock") {}; // For ciMethodData bool is_methodData() const volatile { return true; } @@ -2155,7 +2151,7 @@ private: // What is the index of the first data entry? int first_di() const { return 0; } - ProfileData* bci_to_extra_data_helper(int bci, Method* m, DataLayout*& dp); + ProfileData* bci_to_extra_data_helper(int bci, Method* m, DataLayout*& dp, bool concurrent); // Find or create an extra ProfileData: ProfileData* bci_to_extra_data(int bci, Method* m, bool create_if_missing); From 9e39a2797d24e49e237f4be847cf01036cae34a3 Mon Sep 17 00:00:00 2001 From: Albert Noll Date: Wed, 5 Mar 2014 10:20:30 +0100 Subject: [PATCH 027/116] 8036091: compiler/membars/DekkerTest.java fails with -XX:CICompilerCount=1 Start test with -XX:-TieredCompilation so that one compiler thread works Reviewed-by: kvn, twisti --- hotspot/src/share/vm/runtime/arguments.cpp | 2 +- hotspot/test/compiler/membars/DekkerTest.java | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/hotspot/src/share/vm/runtime/arguments.cpp b/hotspot/src/share/vm/runtime/arguments.cpp index 1e02bf0cad8..d6d8583d697 100644 --- a/hotspot/src/share/vm/runtime/arguments.cpp +++ b/hotspot/src/share/vm/runtime/arguments.cpp @@ -2409,7 +2409,7 @@ bool Arguments::check_vm_args_consistency() { status &= verify_interval(NmethodSweepActivity, 0, 2000, "NmethodSweepActivity"); // TieredCompilation needs at least 2 compiler threads. - const int num_min_compiler_threads = (TieredCompilation) ? 2 : 1; + const int num_min_compiler_threads = (TieredCompilation && (TieredStopAtLevel >= CompLevel_full_optimization)) ? 2 : 1; status &=verify_min_value(CICompilerCount, num_min_compiler_threads, "CICompilerCount"); return status; diff --git a/hotspot/test/compiler/membars/DekkerTest.java b/hotspot/test/compiler/membars/DekkerTest.java index ed313576010..f4f2826b6e4 100644 --- a/hotspot/test/compiler/membars/DekkerTest.java +++ b/hotspot/test/compiler/membars/DekkerTest.java @@ -25,9 +25,9 @@ * @test * @bug 8007898 * @summary Incorrect optimization of Memory Barriers in Matcher::post_store_load_barrier(). - * @run main/othervm -Xbatch -XX:+IgnoreUnrecognizedVMOptions -XX:CICompilerCount=1 -XX:+StressGCM -XX:+StressLCM DekkerTest - * @run main/othervm -Xbatch -XX:+IgnoreUnrecognizedVMOptions -XX:CICompilerCount=1 -XX:+StressGCM -XX:+StressLCM DekkerTest - * @run main/othervm -Xbatch -XX:+IgnoreUnrecognizedVMOptions -XX:CICompilerCount=1 -XX:+StressGCM -XX:+StressLCM DekkerTest + * @run main/othervm -Xbatch -XX:+IgnoreUnrecognizedVMOptions -XX:CICompilerCount=1 -XX:-TieredCompilation -XX:+StressGCM -XX:+StressLCM DekkerTest + * @run main/othervm -Xbatch -XX:+IgnoreUnrecognizedVMOptions -XX:CICompilerCount=1 -XX:-TieredCompilation -XX:+StressGCM -XX:+StressLCM DekkerTest + * @run main/othervm -Xbatch -XX:+IgnoreUnrecognizedVMOptions -XX:CICompilerCount=1 -XX:-TieredCompilation -XX:+StressGCM -XX:+StressLCM DekkerTest * @author Martin Doerr martin DOT doerr AT sap DOT com * * Run 3 times since the failure is intermittent. From 7bee30f699b32b64fba849476c5c898c59fd41e9 Mon Sep 17 00:00:00 2001 From: Roland Westrelin Date: Wed, 5 Mar 2014 15:14:25 +0100 Subject: [PATCH 028/116] 8036146: make CPP interpreter build again Fix build of CPP interpreter on x86 and sparc Reviewed-by: kvn --- .../src/cpu/sparc/vm/cppInterpreter_sparc.cpp | 72 +++++++++---------- hotspot/src/cpu/sparc/vm/frame_sparc.cpp | 2 + .../src/cpu/sparc/vm/interp_masm_sparc.cpp | 35 ++++----- hotspot/src/cpu/sparc/vm/nativeInst_sparc.cpp | 3 +- .../x86/vm/bytecodeInterpreter_x86.inline.hpp | 2 +- hotspot/src/cpu/x86/vm/cppInterpreter_x86.cpp | 48 +++++++++---- hotspot/src/cpu/x86/vm/frame_x86.cpp | 2 + hotspot/src/cpu/x86/vm/interp_masm_x86_32.cpp | 55 +++++++------- hotspot/src/cpu/x86/vm/interp_masm_x86_32.hpp | 2 +- hotspot/src/cpu/x86/vm/interp_masm_x86_64.cpp | 56 ++++++++------- hotspot/src/cpu/x86/vm/interp_masm_x86_64.hpp | 2 +- hotspot/src/cpu/x86/vm/interpreter_x86_32.cpp | 2 + hotspot/src/cpu/x86/vm/interpreter_x86_64.cpp | 2 + .../vm/interpreter/bytecodeInterpreter.cpp | 2 +- 14 files changed, 159 insertions(+), 126 deletions(-) diff --git a/hotspot/src/cpu/sparc/vm/cppInterpreter_sparc.cpp b/hotspot/src/cpu/sparc/vm/cppInterpreter_sparc.cpp index 371b6aa7f71..1a53471e596 100644 --- a/hotspot/src/cpu/sparc/vm/cppInterpreter_sparc.cpp +++ b/hotspot/src/cpu/sparc/vm/cppInterpreter_sparc.cpp @@ -413,16 +413,15 @@ void InterpreterGenerator::generate_counter_incr(Label* overflow, Label* profile // Update standard invocation counters __ increment_invocation_counter(Rcounters, O0, G4_scratch); if (ProfileInterpreter) { - Address interpreter_invocation_counter(Rcounters, 0, + Address interpreter_invocation_counter(Rcounters, in_bytes(MethodCounters::interpreter_invocation_counter_offset())); __ ld(interpreter_invocation_counter, G4_scratch); __ inc(G4_scratch); __ st(G4_scratch, interpreter_invocation_counter); } - Address invocation_limit(G3_scratch, (address)&InvocationCounter::InterpreterInvocationLimit); - __ sethi(invocation_limit); - __ ld(invocation_limit, G3_scratch); + AddressLiteral invocation_limit((address)&InvocationCounter::InterpreterInvocationLimit); + __ load_contents(invocation_limit, G3_scratch); __ cmp(O0, G3_scratch); __ br(Assembler::greaterEqualUnsigned, false, Assembler::pn, *overflow); __ delayed()->nop(); @@ -439,7 +438,7 @@ address InterpreterGenerator::generate_empty_entry(void) { // do nothing for empty methods (do not even increment invocation counter) if ( UseFastEmptyMethods) { // If we need a safepoint check, generate full interpreter entry. - Address sync_state(G3_scratch, SafepointSynchronize::address_of_state()); + AddressLiteral sync_state(SafepointSynchronize::address_of_state()); __ load_contents(sync_state, G3_scratch); __ cmp(G3_scratch, SafepointSynchronize::_not_synchronized); __ br(Assembler::notEqual, false, Assembler::pn, frame_manager_entry); @@ -471,7 +470,7 @@ address InterpreterGenerator::generate_accessor_entry(void) { if ( UseFastAccessorMethods) { // Check if we need to reach a safepoint and generate full interpreter // frame if so. - Address sync_state(G3_scratch, SafepointSynchronize::address_of_state()); + AddressLiteral sync_state(SafepointSynchronize::address_of_state()); __ load_contents(sync_state, G3_scratch); __ cmp(G3_scratch, SafepointSynchronize::_not_synchronized); __ br(Assembler::notEqual, false, Assembler::pn, slow_path); @@ -486,8 +485,8 @@ address InterpreterGenerator::generate_accessor_entry(void) { // read first instruction word and extract bytecode @ 1 and index @ 2 // get first 4 bytes of the bytecodes (big endian!) - __ ld_ptr(Address(G5_method, 0, in_bytes(Method::const_offset())), G1_scratch); - __ ld(Address(G1_scratch, 0, in_bytes(ConstMethod::codes_offset())), G1_scratch); + __ ld_ptr(Address(G5_method, in_bytes(Method::const_offset())), G1_scratch); + __ ld(Address(G1_scratch, in_bytes(ConstMethod::codes_offset())), G1_scratch); // move index @ 2 far left then to the right most two bytes. __ sll(G1_scratch, 2*BitsPerByte, G1_scratch); @@ -590,15 +589,15 @@ address InterpreterGenerator::generate_native_entry(bool synchronized) { const Register Gtmp1 = G3_scratch ; const Register Gtmp2 = G1_scratch; const Register RconstMethod = Gtmp1; - const Address constMethod(G5_method, 0, in_bytes(Method::const_offset())); - const Address size_of_parameters(RconstMethod, 0, in_bytes(ConstMethod::size_of_parameters_offset())); + const Address constMethod(G5_method, in_bytes(Method::const_offset())); + const Address size_of_parameters(RconstMethod, in_bytes(ConstMethod::size_of_parameters_offset())); bool inc_counter = UseCompiler || CountCompiledCalls; // make sure registers are different! assert_different_registers(G2_thread, G5_method, Gargs, Gtmp1, Gtmp2); - const Address access_flags (G5_method, 0, in_bytes(Method::access_flags_offset())); + const Address access_flags (G5_method, in_bytes(Method::access_flags_offset())); Label Lentry; __ bind(Lentry); @@ -643,7 +642,7 @@ address InterpreterGenerator::generate_native_entry(bool synchronized) { // At this point Lstate points to new interpreter state // - const Address do_not_unlock_if_synchronized(G2_thread, 0, + const Address do_not_unlock_if_synchronized(G2_thread, in_bytes(JavaThread::do_not_unlock_if_synchronized_offset())); // Since at this point in the method invocation the exception handler // would try to exit the monitor of synchronized methods which hasn't @@ -717,17 +716,17 @@ address InterpreterGenerator::generate_native_entry(bool synchronized) { { Label L; __ ld_ptr(STATE(_method), G5_method); - __ ld_ptr(Address(G5_method, 0, in_bytes(Method::signature_handler_offset())), G3_scratch); + __ ld_ptr(Address(G5_method, in_bytes(Method::signature_handler_offset())), G3_scratch); __ tst(G3_scratch); __ brx(Assembler::notZero, false, Assembler::pt, L); __ delayed()->nop(); __ call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::prepare_native_call), G5_method, false); __ ld_ptr(STATE(_method), G5_method); - Address exception_addr(G2_thread, 0, in_bytes(Thread::pending_exception_offset())); + Address exception_addr(G2_thread, in_bytes(Thread::pending_exception_offset())); __ ld_ptr(exception_addr, G3_scratch); __ br_notnull_short(G3_scratch, Assembler::pn, pending_exception_present); - __ ld_ptr(Address(G5_method, 0, in_bytes(Method::signature_handler_offset())), G3_scratch); + __ ld_ptr(Address(G5_method, in_bytes(Method::signature_handler_offset())), G3_scratch); __ bind(L); } @@ -771,13 +770,13 @@ address InterpreterGenerator::generate_native_entry(bool synchronized) { __ br( Assembler::zero, false, Assembler::pt, not_static); __ delayed()-> // get native function entry point(O0 is a good temp until the very end) - ld_ptr(Address(G5_method, 0, in_bytes(Method::native_function_offset())), O0); + ld_ptr(Address(G5_method, in_bytes(Method::native_function_offset())), O0); // for static methods insert the mirror argument const int mirror_offset = in_bytes(Klass::java_mirror_offset()); - __ ld_ptr(Address(G5_method, 0, in_bytes(Method:: const_offset())), O1); - __ ld_ptr(Address(O1, 0, in_bytes(ConstMethod::constants_offset())), O1); - __ ld_ptr(Address(O1, 0, ConstantPool::pool_holder_offset_in_bytes()), O1); + __ ld_ptr(Address(G5_method, in_bytes(Method:: const_offset())), O1); + __ ld_ptr(Address(O1, in_bytes(ConstMethod::constants_offset())), O1); + __ ld_ptr(Address(O1, ConstantPool::pool_holder_offset_in_bytes()), O1); __ ld_ptr(O1, mirror_offset, O1); // where the mirror handle body is allocated: #ifdef ASSERT @@ -831,18 +830,17 @@ address InterpreterGenerator::generate_native_entry(bool synchronized) { // flush the windows now. We don't care about the current (protection) frame // only the outer frames - __ flush_windows(); + __ flushw(); // mark windows as flushed Address flags(G2_thread, - 0, in_bytes(JavaThread::frame_anchor_offset()) + in_bytes(JavaFrameAnchor::flags_offset())); __ set(JavaFrameAnchor::flushed, G3_scratch); __ st(G3_scratch, flags); // Transition from _thread_in_Java to _thread_in_native. We are already safepoint ready. - Address thread_state(G2_thread, 0, in_bytes(JavaThread::thread_state_offset())); + Address thread_state(G2_thread, in_bytes(JavaThread::thread_state_offset())); #ifdef ASSERT { Label L; __ ld(thread_state, G3_scratch); @@ -867,7 +865,7 @@ address InterpreterGenerator::generate_native_entry(bool synchronized) { // Block, if necessary, before resuming in _thread_in_Java state. // In order for GC to work, don't clear the last_Java_sp until after blocking. { Label no_block; - Address sync_state(G3_scratch, SafepointSynchronize::address_of_state()); + AddressLiteral sync_state(SafepointSynchronize::address_of_state()); // Switch thread to "native transition" state before reading the synchronization state. // This additional state is necessary because reading and testing the synchronization @@ -890,7 +888,7 @@ address InterpreterGenerator::generate_native_entry(bool synchronized) { Label L; - Address suspend_state(G2_thread, 0, in_bytes(JavaThread::suspend_flags_offset())); + Address suspend_state(G2_thread, in_bytes(JavaThread::suspend_flags_offset())); __ br(Assembler::notEqual, false, Assembler::pn, L); __ delayed()-> ld(suspend_state, G3_scratch); @@ -965,7 +963,7 @@ address InterpreterGenerator::generate_native_entry(bool synchronized) { // handle exceptions (exception handling will handle unlocking!) { Label L; - Address exception_addr (G2_thread, 0, in_bytes(Thread::pending_exception_offset())); + Address exception_addr (G2_thread, in_bytes(Thread::pending_exception_offset())); __ ld_ptr(exception_addr, Gtemp); __ tst(Gtemp); @@ -1055,8 +1053,8 @@ void CppInterpreterGenerator::generate_compute_interpreter_state(const Register assert_different_registers(state, prev_state); assert_different_registers(prev_state, G3_scratch); const Register Gtmp = G3_scratch; - const Address constMethod (G5_method, 0, in_bytes(Method::const_offset())); - const Address access_flags (G5_method, 0, in_bytes(Method::access_flags_offset())); + const Address constMethod (G5_method, in_bytes(Method::const_offset())); + const Address access_flags (G5_method, in_bytes(Method::access_flags_offset())); // slop factor is two extra slots on the expression stack so that // we always have room to store a result when returning from a call without parameters @@ -1075,7 +1073,7 @@ void CppInterpreterGenerator::generate_compute_interpreter_state(const Register if (native) { const Register RconstMethod = Gtmp; - const Address size_of_parameters(RconstMethod, 0, in_bytes(ConstMethod::size_of_parameters_offset())); + const Address size_of_parameters(RconstMethod, in_bytes(ConstMethod::size_of_parameters_offset())); __ ld_ptr(constMethod, RconstMethod); __ lduh( size_of_parameters, Gtmp ); __ calc_mem_param_words(Gtmp, Gtmp); // space for native call parameters passed on the stack in words @@ -1246,8 +1244,8 @@ void CppInterpreterGenerator::generate_compute_interpreter_state(const Register if (init_value != noreg) { Label clear_loop; const Register RconstMethod = O1; - const Address size_of_parameters(RconstMethod, 0, in_bytes(ConstMethod::size_of_parameters_offset())); - const Address size_of_locals (RconstMethod, 0, in_bytes(ConstMethod::size_of_locals_offset())); + const Address size_of_parameters(RconstMethod, in_bytes(ConstMethod::size_of_parameters_offset())); + const Address size_of_locals (RconstMethod, in_bytes(ConstMethod::size_of_locals_offset())); // NOTE: If you change the frame layout, this code will need to // be updated! @@ -1496,11 +1494,11 @@ void CppInterpreterGenerator::adjust_callers_stack(Register args) { // // assert_different_registers(state, prev_state); const Register Gtmp = G3_scratch; - const RconstMethod = G3_scratch; + const Register RconstMethod = G3_scratch; const Register tmp = O2; - const Address constMethod(G5_method, 0, in_bytes(Method::const_offset())); - const Address size_of_parameters(RconstMethod, 0, in_bytes(ConstMethod::size_of_parameters_offset())); - const Address size_of_locals (RconstMethod, 0, in_bytes(ConstMethod::size_of_locals_offset())); + const Address constMethod(G5_method, in_bytes(Method::const_offset())); + const Address size_of_parameters(RconstMethod, in_bytes(ConstMethod::size_of_parameters_offset())); + const Address size_of_locals (RconstMethod, in_bytes(ConstMethod::size_of_locals_offset())); __ ld_ptr(constMethod, RconstMethod); __ lduh(size_of_parameters, tmp); @@ -1555,8 +1553,8 @@ address InterpreterGenerator::generate_normal_entry(bool synchronized) { const Register Gtmp1 = G3_scratch; // const Register Lmirror = L1; // native mirror (native calls only) - const Address constMethod (G5_method, 0, in_bytes(Method::const_offset())); - const Address access_flags (G5_method, 0, in_bytes(Method::access_flags_offset())); + const Address constMethod (G5_method, in_bytes(Method::const_offset())); + const Address access_flags (G5_method, in_bytes(Method::access_flags_offset())); address entry_point = __ pc(); __ mov(G0, prevState); // no current activation @@ -1709,7 +1707,7 @@ address InterpreterGenerator::generate_normal_entry(bool synchronized) { // We want exception in the thread no matter what we ultimately decide about frame type. - Address exception_addr (G2_thread, 0, in_bytes(Thread::pending_exception_offset())); + Address exception_addr (G2_thread, in_bytes(Thread::pending_exception_offset())); __ verify_thread(); __ st_ptr(O0, exception_addr); diff --git a/hotspot/src/cpu/sparc/vm/frame_sparc.cpp b/hotspot/src/cpu/sparc/vm/frame_sparc.cpp index 6ce05bdfce1..29b37f006a5 100644 --- a/hotspot/src/cpu/sparc/vm/frame_sparc.cpp +++ b/hotspot/src/cpu/sparc/vm/frame_sparc.cpp @@ -827,6 +827,7 @@ void frame::describe_pd(FrameValues& values, int frame_no) { } if (is_interpreted_frame()) { +#ifndef CC_INTERP DESCRIBE_FP_OFFSET(interpreter_frame_d_scratch_fp); DESCRIBE_FP_OFFSET(interpreter_frame_l_scratch_fp); DESCRIBE_FP_OFFSET(interpreter_frame_padding); @@ -837,6 +838,7 @@ void frame::describe_pd(FrameValues& values, int frame_no) { if ((esp >= sp()) && (esp < fp())) { values.describe(-1, esp, "*Lesp"); } +#endif } if (!is_compiled_frame()) { diff --git a/hotspot/src/cpu/sparc/vm/interp_masm_sparc.cpp b/hotspot/src/cpu/sparc/vm/interp_masm_sparc.cpp index c22f20a23d4..9d4d13bf663 100644 --- a/hotspot/src/cpu/sparc/vm/interp_masm_sparc.cpp +++ b/hotspot/src/cpu/sparc/vm/interp_masm_sparc.cpp @@ -2497,6 +2497,24 @@ void InterpreterMacroAssembler::verify_oop_or_return_address(Register reg, Regis void InterpreterMacroAssembler::verify_FPU(int stack_depth, TosState state) { if (state == ftos || state == dtos) MacroAssembler::verify_FPU(stack_depth); } + + +// Jump if ((*counter_addr += increment) & mask) satisfies the condition. +void InterpreterMacroAssembler::increment_mask_and_jump(Address counter_addr, + int increment, int mask, + Register scratch1, Register scratch2, + Condition cond, Label *where) { + ld(counter_addr, scratch1); + add(scratch1, increment, scratch1); + if (is_simm13(mask)) { + andcc(scratch1, mask, G0); + } else { + set(mask, scratch2); + andcc(scratch1, scratch2, G0); + } + br(cond, false, Assembler::pn, *where); + delayed()->st(scratch1, counter_addr); +} #endif /* CC_INTERP */ // Inline assembly for: @@ -2646,20 +2664,3 @@ void InterpreterMacroAssembler::restore_return_value( TosState state, bool is_na } #endif // CC_INTERP } - -// Jump if ((*counter_addr += increment) & mask) satisfies the condition. -void InterpreterMacroAssembler::increment_mask_and_jump(Address counter_addr, - int increment, int mask, - Register scratch1, Register scratch2, - Condition cond, Label *where) { - ld(counter_addr, scratch1); - add(scratch1, increment, scratch1); - if (is_simm13(mask)) { - andcc(scratch1, mask, G0); - } else { - set(mask, scratch2); - andcc(scratch1, scratch2, G0); - } - br(cond, false, Assembler::pn, *where); - delayed()->st(scratch1, counter_addr); -} diff --git a/hotspot/src/cpu/sparc/vm/nativeInst_sparc.cpp b/hotspot/src/cpu/sparc/vm/nativeInst_sparc.cpp index f5ac37cf6fa..c15c3c0994f 100644 --- a/hotspot/src/cpu/sparc/vm/nativeInst_sparc.cpp +++ b/hotspot/src/cpu/sparc/vm/nativeInst_sparc.cpp @@ -23,7 +23,8 @@ */ #include "precompiled.hpp" -#include "asm/macroAssembler.hpp" +#include "asm/macroAssembler.inline.hpp" +#include "code/codeCache.hpp" #include "memory/resourceArea.hpp" #include "nativeInst_sparc.hpp" #include "oops/oop.inline.hpp" diff --git a/hotspot/src/cpu/x86/vm/bytecodeInterpreter_x86.inline.hpp b/hotspot/src/cpu/x86/vm/bytecodeInterpreter_x86.inline.hpp index 4f60b455801..d205f1db79a 100644 --- a/hotspot/src/cpu/x86/vm/bytecodeInterpreter_x86.inline.hpp +++ b/hotspot/src/cpu/x86/vm/bytecodeInterpreter_x86.inline.hpp @@ -250,7 +250,7 @@ inline jint BytecodeInterpreter::VMintSub(jint op1, jint op2) { return op1 - op2; } -inline jint BytecodeInterpreter::VMintUshr(jint op1, jint op2) { +inline juint BytecodeInterpreter::VMintUshr(jint op1, jint op2) { return ((juint) op1) >> (op2 & 0x1f); } diff --git a/hotspot/src/cpu/x86/vm/cppInterpreter_x86.cpp b/hotspot/src/cpu/x86/vm/cppInterpreter_x86.cpp index e669f5b6638..0ddf854f364 100644 --- a/hotspot/src/cpu/x86/vm/cppInterpreter_x86.cpp +++ b/hotspot/src/cpu/x86/vm/cppInterpreter_x86.cpp @@ -574,7 +574,7 @@ void InterpreterGenerator::generate_counter_incr(Label* overflow, Label* profile MethodCounters::invocation_counter_offset() + InvocationCounter::counter_offset()); const Address backedge_counter (rax, - MethodCounter::backedge_counter_offset() + + MethodCounters::backedge_counter_offset() + InvocationCounter::counter_offset()); __ get_method_counters(rbx, rax, done); @@ -982,16 +982,18 @@ address InterpreterGenerator::generate_native_entry(bool synchronized) { // to save/restore. address entry_point = __ pc(); - const Address constMethod (rbx, Method::const_offset()); const Address access_flags (rbx, Method::access_flags_offset()); - const Address size_of_parameters(rcx, ConstMethod::size_of_parameters_offset()); // rsi/r13 == state/locals rdi == prevstate const Register locals = rdi; // get parameter size (always needed) - __ movptr(rcx, constMethod); - __ load_unsigned_short(rcx, size_of_parameters); + { + const Address constMethod (rbx, Method::const_offset()); + const Address size_of_parameters(rcx, ConstMethod::size_of_parameters_offset()); + __ movptr(rcx, constMethod); + __ load_unsigned_short(rcx, size_of_parameters); + } // rbx: Method* // rcx: size of parameters @@ -1111,14 +1113,16 @@ address InterpreterGenerator::generate_native_entry(bool synchronized) { const Register method = rbx; const Register thread = LP64_ONLY(r15_thread) NOT_LP64(rdi); const Register t = InterpreterRuntime::SignatureHandlerGenerator::temp(); // rcx|rscratch1 - const Address constMethod (method, Method::const_offset()); - const Address size_of_parameters(t, ConstMethod::size_of_parameters_offset()); - // allocate space for parameters + // allocate space for parameters __ movptr(method, STATE(_method)); __ verify_method_ptr(method); - __ movptr(t, constMethod); - __ load_unsigned_short(t, size_of_parameters); + { + const Address constMethod (method, Method::const_offset()); + const Address size_of_parameters(t, ConstMethod::size_of_parameters_offset()); + __ movptr(t, constMethod); + __ load_unsigned_short(t, size_of_parameters); + } __ shll(t, 2); #ifdef _LP64 __ subptr(rsp, t); @@ -2221,7 +2225,6 @@ address AbstractInterpreterGenerator::generate_method_entry(AbstractInterpreter: case Interpreter::empty : entry_point = ((InterpreterGenerator*)this)->generate_empty_entry(); break; case Interpreter::accessor : entry_point = ((InterpreterGenerator*)this)->generate_accessor_entry(); break; case Interpreter::abstract : entry_point = ((InterpreterGenerator*)this)->generate_abstract_entry(); break; - case Interpreter::method_handle : entry_point = ((InterpreterGenerator*)this)->generate_method_handle_entry(); break; case Interpreter::java_lang_math_sin : // fall thru case Interpreter::java_lang_math_cos : // fall thru @@ -2229,7 +2232,10 @@ address AbstractInterpreterGenerator::generate_method_entry(AbstractInterpreter: case Interpreter::java_lang_math_abs : // fall thru case Interpreter::java_lang_math_log : // fall thru case Interpreter::java_lang_math_log10 : // fall thru - case Interpreter::java_lang_math_sqrt : entry_point = ((InterpreterGenerator*)this)->generate_math_entry(kind); break; + case Interpreter::java_lang_math_sqrt : // fall thru + case Interpreter::java_lang_math_pow : // fall thru + case Interpreter::java_lang_math_exp : // fall thru + entry_point = ((InterpreterGenerator*)this)->generate_math_entry(kind); break; case Interpreter::java_lang_ref_reference_get : entry_point = ((InterpreterGenerator*)this)->generate_Reference_get_entry(); break; default : ShouldNotReachHere(); break; @@ -2451,4 +2457,22 @@ int AbstractInterpreter::layout_activation(Method* method, return frame_size/BytesPerWord; } +bool AbstractInterpreter::can_be_compiled(methodHandle m) { + switch (method_kind(m)) { + case Interpreter::java_lang_math_sin : // fall thru + case Interpreter::java_lang_math_cos : // fall thru + case Interpreter::java_lang_math_tan : // fall thru + case Interpreter::java_lang_math_abs : // fall thru + case Interpreter::java_lang_math_log : // fall thru + case Interpreter::java_lang_math_log10 : // fall thru + case Interpreter::java_lang_math_sqrt : // fall thru + case Interpreter::java_lang_math_pow : // fall thru + case Interpreter::java_lang_math_exp : + return false; + default: + return true; + } +} + + #endif // CC_INTERP (all) diff --git a/hotspot/src/cpu/x86/vm/frame_x86.cpp b/hotspot/src/cpu/x86/vm/frame_x86.cpp index 4e83863a9f9..deeb48a44bb 100644 --- a/hotspot/src/cpu/x86/vm/frame_x86.cpp +++ b/hotspot/src/cpu/x86/vm/frame_x86.cpp @@ -687,6 +687,7 @@ intptr_t* frame::interpreter_frame_tos_at(jint offset) const { void frame::describe_pd(FrameValues& values, int frame_no) { if (is_interpreted_frame()) { +#ifndef CC_INTERP DESCRIBE_FP_OFFSET(interpreter_frame_sender_sp); DESCRIBE_FP_OFFSET(interpreter_frame_last_sp); DESCRIBE_FP_OFFSET(interpreter_frame_method); @@ -695,6 +696,7 @@ void frame::describe_pd(FrameValues& values, int frame_no) { DESCRIBE_FP_OFFSET(interpreter_frame_locals); DESCRIBE_FP_OFFSET(interpreter_frame_bcx); DESCRIBE_FP_OFFSET(interpreter_frame_initial_sp); +#endif } } #endif diff --git a/hotspot/src/cpu/x86/vm/interp_masm_x86_32.cpp b/hotspot/src/cpu/x86/vm/interp_masm_x86_32.cpp index b6f2438db83..92f58b4d61a 100644 --- a/hotspot/src/cpu/x86/vm/interp_masm_x86_32.cpp +++ b/hotspot/src/cpu/x86/vm/interp_masm_x86_32.cpp @@ -266,20 +266,6 @@ void InterpreterMacroAssembler::get_cache_entry_pointer_at_bcp(Register cache, R addptr(cache, tmp); // construct pointer to cache entry } -void InterpreterMacroAssembler::get_method_counters(Register method, - Register mcs, Label& skip) { - Label has_counters; - movptr(mcs, Address(method, Method::method_counters_offset())); - testptr(mcs, mcs); - jcc(Assembler::notZero, has_counters); - call_VM(noreg, CAST_FROM_FN_PTR(address, - InterpreterRuntime::build_method_counters), method); - movptr(mcs, Address(method,Method::method_counters_offset())); - testptr(mcs, mcs); - jcc(Assembler::zero, skip); // No MethodCounters allocated, OutOfMemory - bind(has_counters); -} - // Load object from cpool->resolved_references(index) void InterpreterMacroAssembler::load_resolved_reference_at_index( Register result, Register index) { @@ -678,6 +664,20 @@ void InterpreterMacroAssembler::remove_activation(TosState state, Register ret_a #endif /* !CC_INTERP */ +void InterpreterMacroAssembler::get_method_counters(Register method, + Register mcs, Label& skip) { + Label has_counters; + movptr(mcs, Address(method, Method::method_counters_offset())); + testptr(mcs, mcs); + jcc(Assembler::notZero, has_counters); + call_VM(noreg, CAST_FROM_FN_PTR(address, + InterpreterRuntime::build_method_counters), method); + movptr(mcs, Address(method,Method::method_counters_offset())); + testptr(mcs, mcs); + jcc(Assembler::zero, skip); // No MethodCounters allocated, OutOfMemory + bind(has_counters); +} + // Lock object // @@ -1359,6 +1359,19 @@ void InterpreterMacroAssembler::verify_FPU(int stack_depth, TosState state) { if (state == ftos || state == dtos) MacroAssembler::verify_FPU(stack_depth); } +// Jump if ((*counter_addr += increment) & mask) satisfies the condition. +void InterpreterMacroAssembler::increment_mask_and_jump(Address counter_addr, + int increment, int mask, + Register scratch, bool preloaded, + Condition cond, Label* where) { + if (!preloaded) { + movl(scratch, counter_addr); + } + incrementl(scratch, increment); + movl(counter_addr, scratch); + andl(scratch, mask); + jcc(cond, *where); +} #endif /* CC_INTERP */ @@ -1430,17 +1443,3 @@ void InterpreterMacroAssembler::notify_method_exit( NOT_CC_INTERP(pop(state)); } } - -// Jump if ((*counter_addr += increment) & mask) satisfies the condition. -void InterpreterMacroAssembler::increment_mask_and_jump(Address counter_addr, - int increment, int mask, - Register scratch, bool preloaded, - Condition cond, Label* where) { - if (!preloaded) { - movl(scratch, counter_addr); - } - incrementl(scratch, increment); - movl(counter_addr, scratch); - andl(scratch, mask); - jcc(cond, *where); -} diff --git a/hotspot/src/cpu/x86/vm/interp_masm_x86_32.hpp b/hotspot/src/cpu/x86/vm/interp_masm_x86_32.hpp index 19ff288bfee..88f01fc5852 100644 --- a/hotspot/src/cpu/x86/vm/interp_masm_x86_32.hpp +++ b/hotspot/src/cpu/x86/vm/interp_masm_x86_32.hpp @@ -77,7 +77,6 @@ void get_cache_and_index_and_bytecode_at_bcp(Register cache, Register index, Register bytecode, int byte_no, int bcp_offset, size_t index_size = sizeof(u2)); void get_cache_entry_pointer_at_bcp(Register cache, Register tmp, int bcp_offset, size_t index_size = sizeof(u2)); void get_cache_index_at_bcp(Register index, int bcp_offset, size_t index_size = sizeof(u2)); - void get_method_counters(Register method, Register mcs, Label& skip); // load cpool->resolved_references(index); void load_resolved_reference_at_index(Register result, Register index); @@ -156,6 +155,7 @@ bool install_monitor_exception = true, bool notify_jvmdi = true); #endif /* !CC_INTERP */ + void get_method_counters(Register method, Register mcs, Label& skip); // Debugging void verify_oop(Register reg, TosState state = atos); // only if +VerifyOops && state == atos diff --git a/hotspot/src/cpu/x86/vm/interp_masm_x86_64.cpp b/hotspot/src/cpu/x86/vm/interp_masm_x86_64.cpp index 520c872a604..356106e946f 100644 --- a/hotspot/src/cpu/x86/vm/interp_masm_x86_64.cpp +++ b/hotspot/src/cpu/x86/vm/interp_masm_x86_64.cpp @@ -271,20 +271,6 @@ void InterpreterMacroAssembler::get_cache_entry_pointer_at_bcp(Register cache, addptr(cache, tmp); // construct pointer to cache entry } -void InterpreterMacroAssembler::get_method_counters(Register method, - Register mcs, Label& skip) { - Label has_counters; - movptr(mcs, Address(method, Method::method_counters_offset())); - testptr(mcs, mcs); - jcc(Assembler::notZero, has_counters); - call_VM(noreg, CAST_FROM_FN_PTR(address, - InterpreterRuntime::build_method_counters), method); - movptr(mcs, Address(method,Method::method_counters_offset())); - testptr(mcs, mcs); - jcc(Assembler::zero, skip); // No MethodCounters allocated, OutOfMemory - bind(has_counters); -} - // Load object from cpool->resolved_references(index) void InterpreterMacroAssembler::load_resolved_reference_at_index( Register result, Register index) { @@ -676,6 +662,21 @@ void InterpreterMacroAssembler::remove_activation( #endif // C_INTERP +void InterpreterMacroAssembler::get_method_counters(Register method, + Register mcs, Label& skip) { + Label has_counters; + movptr(mcs, Address(method, Method::method_counters_offset())); + testptr(mcs, mcs); + jcc(Assembler::notZero, has_counters); + call_VM(noreg, CAST_FROM_FN_PTR(address, + InterpreterRuntime::build_method_counters), method); + movptr(mcs, Address(method,Method::method_counters_offset())); + testptr(mcs, mcs); + jcc(Assembler::zero, skip); // No MethodCounters allocated, OutOfMemory + bind(has_counters); +} + + // Lock object // // Args: @@ -1423,6 +1424,20 @@ void InterpreterMacroAssembler::verify_oop(Register reg, TosState state) { void InterpreterMacroAssembler::verify_FPU(int stack_depth, TosState state) { } + +// Jump if ((*counter_addr += increment) & mask) satisfies the condition. +void InterpreterMacroAssembler::increment_mask_and_jump(Address counter_addr, + int increment, int mask, + Register scratch, bool preloaded, + Condition cond, Label* where) { + if (!preloaded) { + movl(scratch, counter_addr); + } + incrementl(scratch, increment); + movl(counter_addr, scratch); + andl(scratch, mask); + jcc(cond, *where); +} #endif // !CC_INTERP @@ -1491,16 +1506,3 @@ void InterpreterMacroAssembler::notify_method_exit( } } -// Jump if ((*counter_addr += increment) & mask) satisfies the condition. -void InterpreterMacroAssembler::increment_mask_and_jump(Address counter_addr, - int increment, int mask, - Register scratch, bool preloaded, - Condition cond, Label* where) { - if (!preloaded) { - movl(scratch, counter_addr); - } - incrementl(scratch, increment); - movl(counter_addr, scratch); - andl(scratch, mask); - jcc(cond, *where); -} diff --git a/hotspot/src/cpu/x86/vm/interp_masm_x86_64.hpp b/hotspot/src/cpu/x86/vm/interp_masm_x86_64.hpp index 36bd779ef9b..9186009fa9a 100644 --- a/hotspot/src/cpu/x86/vm/interp_masm_x86_64.hpp +++ b/hotspot/src/cpu/x86/vm/interp_masm_x86_64.hpp @@ -99,7 +99,6 @@ void get_cache_and_index_and_bytecode_at_bcp(Register cache, Register index, Register bytecode, int byte_no, int bcp_offset, size_t index_size = sizeof(u2)); void get_cache_entry_pointer_at_bcp(Register cache, Register tmp, int bcp_offset, size_t index_size = sizeof(u2)); void get_cache_index_at_bcp(Register index, int bcp_offset, size_t index_size = sizeof(u2)); - void get_method_counters(Register method, Register mcs, Label& skip); // load cpool->resolved_references(index); void load_resolved_reference_at_index(Register result, Register index); @@ -172,6 +171,7 @@ bool install_monitor_exception = true, bool notify_jvmdi = true); #endif // CC_INTERP + void get_method_counters(Register method, Register mcs, Label& skip); // Object locking void lock_object (Register lock_reg); diff --git a/hotspot/src/cpu/x86/vm/interpreter_x86_32.cpp b/hotspot/src/cpu/x86/vm/interpreter_x86_32.cpp index 865801e3de7..3c66bf4fb45 100644 --- a/hotspot/src/cpu/x86/vm/interpreter_x86_32.cpp +++ b/hotspot/src/cpu/x86/vm/interpreter_x86_32.cpp @@ -229,10 +229,12 @@ address InterpreterGenerator::generate_abstract_entry(void) { // abstract method entry +#ifndef CC_INTERP // pop return address, reset last_sp to NULL __ empty_expression_stack(); __ restore_bcp(); // rsi must be correct for exception handler (was destroyed) __ restore_locals(); // make sure locals pointer is correct as well (was destroyed) +#endif // throw exception __ call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::throw_AbstractMethodError)); diff --git a/hotspot/src/cpu/x86/vm/interpreter_x86_64.cpp b/hotspot/src/cpu/x86/vm/interpreter_x86_64.cpp index bc5229b997d..02ee74506bb 100644 --- a/hotspot/src/cpu/x86/vm/interpreter_x86_64.cpp +++ b/hotspot/src/cpu/x86/vm/interpreter_x86_64.cpp @@ -310,10 +310,12 @@ address InterpreterGenerator::generate_abstract_entry(void) { // abstract method entry +#ifndef CC_INTERP // pop return address, reset last_sp to NULL __ empty_expression_stack(); __ restore_bcp(); // rsi must be correct for exception handler (was destroyed) __ restore_locals(); // make sure locals pointer is correct as well (was destroyed) +#endif // throw exception __ call_VM(noreg, CAST_FROM_FN_PTR(address, diff --git a/hotspot/src/share/vm/interpreter/bytecodeInterpreter.cpp b/hotspot/src/share/vm/interpreter/bytecodeInterpreter.cpp index 06261c804de..9453b50febb 100644 --- a/hotspot/src/share/vm/interpreter/bytecodeInterpreter.cpp +++ b/hotspot/src/share/vm/interpreter/bytecodeInterpreter.cpp @@ -3475,7 +3475,7 @@ BytecodeInterpreter::print() { tty->print_cr("&native_fresult: " INTPTR_FORMAT, (uintptr_t) &this->_native_fresult); tty->print_cr("native_lresult: " INTPTR_FORMAT, (uintptr_t) this->_native_lresult); #endif -#if !defined(ZERO) +#if !defined(ZERO) && defined(PPC) tty->print_cr("last_Java_fp: " INTPTR_FORMAT, (uintptr_t) this->_last_Java_fp); #endif // !ZERO tty->print_cr("self_link: " INTPTR_FORMAT, (uintptr_t) this->_self_link); From 8c7d064ee8be6be3bbd83345c7098803809ce57d Mon Sep 17 00:00:00 2001 From: Jon Masamitsu Date: Wed, 5 Mar 2014 07:34:35 -0800 Subject: [PATCH 029/116] 7098155: Resize young gen at full collections for UseParallelGC Reviewed-by: tschatzl --- .../parallelScavenge/psMarkSweep.cpp | 18 ++++++++++++------ .../parallelScavenge/psParallelCompact.cpp | 19 +++++++++++++------ 2 files changed, 25 insertions(+), 12 deletions(-) diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psMarkSweep.cpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psMarkSweep.cpp index 39d88816718..ca2037cb6f9 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psMarkSweep.cpp +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psMarkSweep.cpp @@ -280,6 +280,16 @@ bool PSMarkSweep::invoke_no_policy(bool clear_all_softrefs) { if (UseAdaptiveGenerationSizePolicyAtMajorCollection && ((gc_cause != GCCause::_java_lang_system_gc) || UseAdaptiveSizePolicyWithSystemGC)) { + // Swap the survivor spaces if from_space is empty. The + // resize_young_gen() called below is normally used after + // a successful young GC and swapping of survivor spaces; + // otherwise, it will fail to resize the young gen with + // the current implementation. + if (young_gen->from_space()->is_empty()) { + young_gen->from_space()->clear(SpaceDecorator::Mangle); + young_gen->swap_spaces(); + } + // Calculate optimal free space amounts assert(young_gen->max_size() > young_gen->from_space()->capacity_in_bytes() + @@ -318,12 +328,8 @@ bool PSMarkSweep::invoke_no_policy(bool clear_all_softrefs) { heap->resize_old_gen(size_policy->calculated_old_free_size_in_bytes()); - // Don't resize the young generation at an major collection. A - // desired young generation size may have been calculated but - // resizing the young generation complicates the code because the - // resizing of the old generation may have moved the boundary - // between the young generation and the old generation. Let the - // young generation resizing happen at the minor collections. + heap->resize_young_gen(size_policy->calculated_eden_size_in_bytes(), + size_policy->calculated_survivor_size_in_bytes()); } if (PrintAdaptiveSizePolicy) { gclog_or_tty->print_cr("AdaptiveSizeStop: collection: %d ", diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.cpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.cpp index f2e83ca21df..31ee8bc5938 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.cpp +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.cpp @@ -43,6 +43,7 @@ #include "gc_implementation/shared/gcTrace.hpp" #include "gc_implementation/shared/gcTraceTime.hpp" #include "gc_implementation/shared/isGCActiveMark.hpp" +#include "gc_implementation/shared/spaceDecorator.hpp" #include "gc_interface/gcCause.hpp" #include "memory/gcLocker.inline.hpp" #include "memory/referencePolicy.hpp" @@ -2115,6 +2116,16 @@ bool PSParallelCompact::invoke_no_policy(bool maximum_heap_compaction) { if (UseAdaptiveGenerationSizePolicyAtMajorCollection && ((gc_cause != GCCause::_java_lang_system_gc) || UseAdaptiveSizePolicyWithSystemGC)) { + // Swap the survivor spaces if from_space is empty. The + // resize_young_gen() called below is normally used after + // a successful young GC and swapping of survivor spaces; + // otherwise, it will fail to resize the young gen with + // the current implementation. + if (young_gen->from_space()->is_empty()) { + young_gen->from_space()->clear(SpaceDecorator::Mangle); + young_gen->swap_spaces(); + } + // Calculate optimal free space amounts assert(young_gen->max_size() > young_gen->from_space()->capacity_in_bytes() + @@ -2154,12 +2165,8 @@ bool PSParallelCompact::invoke_no_policy(bool maximum_heap_compaction) { heap->resize_old_gen( size_policy->calculated_old_free_size_in_bytes()); - // Don't resize the young generation at an major collection. A - // desired young generation size may have been calculated but - // resizing the young generation complicates the code because the - // resizing of the old generation may have moved the boundary - // between the young generation and the old generation. Let the - // young generation resizing happen at the minor collections. + heap->resize_young_gen(size_policy->calculated_eden_size_in_bytes(), + size_policy->calculated_survivor_size_in_bytes()); } if (PrintAdaptiveSizePolicy) { gclog_or_tty->print_cr("AdaptiveSizeStop: collection: %d ", From eedf369513ed4f601842be24dc5471ca72d92a97 Mon Sep 17 00:00:00 2001 From: Mikhailo Seledtsov Date: Wed, 5 Mar 2014 12:31:09 -0500 Subject: [PATCH 030/116] 8033990: Add message to verbose output to indicate when JVM was unable to use shared archive (with -Xshare:auto) Added message to indicate when sharing was attempted but failed Reviewed-by: coleenp, ctornqvi --- hotspot/src/share/vm/memory/filemap.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/hotspot/src/share/vm/memory/filemap.cpp b/hotspot/src/share/vm/memory/filemap.cpp index 8eb5f452495..1420c279036 100644 --- a/hotspot/src/share/vm/memory/filemap.cpp +++ b/hotspot/src/share/vm/memory/filemap.cpp @@ -78,6 +78,10 @@ void FileMapInfo::fail_continue(const char *msg, ...) { va_start(ap, msg); if (RequireSharedSpaces) { fail(msg, ap); + } else { + if (PrintSharedSpaces) { + tty->print_cr("UseSharedSpaces: %s", msg); + } } va_end(ap); UseSharedSpaces = false; From 533560cb3e71b7726313d90945106116692b4379 Mon Sep 17 00:00:00 2001 From: Vladimir Kozlov Date: Wed, 5 Mar 2014 16:21:22 -0800 Subject: [PATCH 031/116] 8035983: Fix "Native frames:" in crash report (hs_err file) Check fr.sender_sp() in java thread instead of os::is_first_C_frame(&fr). Reviewed-by: twisti, coleenp --- hotspot/src/share/vm/utilities/vmError.cpp | 23 ++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/hotspot/src/share/vm/utilities/vmError.cpp b/hotspot/src/share/vm/utilities/vmError.cpp index 4b0953ae499..e950d338681 100644 --- a/hotspot/src/share/vm/utilities/vmError.cpp +++ b/hotspot/src/share/vm/utilities/vmError.cpp @@ -592,13 +592,24 @@ void VMError::report(outputStream* st) { st->cr(); // Compiled code may use EBP register on x86 so it looks like // non-walkable C frame. Use frame.sender() for java frames. - if (_thread && _thread->is_Java_thread() && fr.is_java_frame()) { - RegisterMap map((JavaThread*)_thread, false); // No update - fr = fr.sender(&map); - continue; + if (_thread && _thread->is_Java_thread()) { + // Catch very first native frame by using stack address. + // For JavaThread stack_base and stack_size should be set. + if (!_thread->on_local_stack((address)(fr.sender_sp() + 1))) { + break; + } + if (fr.is_java_frame()) { + RegisterMap map((JavaThread*)_thread, false); // No update + fr = fr.sender(&map); + } else { + fr = os::get_sender_for_C_frame(&fr); + } + } else { + // is_first_C_frame() does only simple checks for frame pointer, + // it will pass if java compiled code has a pointer in EBP. + if (os::is_first_C_frame(&fr)) break; + fr = os::get_sender_for_C_frame(&fr); } - if (os::is_first_C_frame(&fr)) break; - fr = os::get_sender_for_C_frame(&fr); } if (count > StackPrintLimit) { From 54177912e8471ebf8a418b199926f4925187a2fd Mon Sep 17 00:00:00 2001 From: Igor Ignatyev Date: Thu, 6 Mar 2014 12:45:59 +0400 Subject: [PATCH 032/116] 8028482: [TESTBUG] tests that use JMX should be in need_compact3 test group Reviewed-by: roland, sla, dholmes --- hotspot/test/TEST.groups | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/hotspot/test/TEST.groups b/hotspot/test/TEST.groups index 946cb2be8cf..676d859686d 100644 --- a/hotspot/test/TEST.groups +++ b/hotspot/test/TEST.groups @@ -130,7 +130,9 @@ needs_compact3 = \ gc/arguments/TestG1HeapRegionSize.java \ gc/metaspace/TestMetaspaceMemoryPool.java \ runtime/InternalApi/ThreadCpuTimesDeadlock.java \ - serviceability/threads/TestFalseDeadLock.java + serviceability/threads/TestFalseDeadLock.java \ + compiler/tiered/NonTieredLevelsTest.java \ + compiler/tiered/TieredLevelsTest.java # Compact 2 adds full VM tests compact2 = \ From 4f2175f0881cacd9cbef1565f1fb4d16b676c205 Mon Sep 17 00:00:00 2001 From: Igor Ignatyev Date: Thu, 6 Mar 2014 12:46:04 +0400 Subject: [PATCH 033/116] 8027257: [TESTBUG] compiler/ciReplay/TestVM.sh : Error: Could not find or load main class negative_test Reviewed-by: roland, kvn --- hotspot/test/compiler/ciReplay/TestVM.sh | 2 +- hotspot/test/compiler/ciReplay/common.sh | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/hotspot/test/compiler/ciReplay/TestVM.sh b/hotspot/test/compiler/ciReplay/TestVM.sh index e6c3cc56946..6154466671d 100644 --- a/hotspot/test/compiler/ciReplay/TestVM.sh +++ b/hotspot/test/compiler/ciReplay/TestVM.sh @@ -78,8 +78,8 @@ then positive_test `expr $stop_level + 50` "TIERED LEVEL $stop_level :: REPLAY" \ "-XX:TieredStopAtLevel=$stop_level" stop_level=`expr $stop_level + 1` + cleanup done - cleanup fi echo TEST PASSED diff --git a/hotspot/test/compiler/ciReplay/common.sh b/hotspot/test/compiler/ciReplay/common.sh index e03acaa8b30..608f68e551a 100644 --- a/hotspot/test/compiler/ciReplay/common.sh +++ b/hotspot/test/compiler/ciReplay/common.sh @@ -99,13 +99,12 @@ common_tests() { # $2 - non-tiered comp_level nontiered_tests() { level=`grep "^compile " $replay_data | awk '{print $6}'` - # is level available in non-tiere + # is level available in non-tiered if [ "$level" -eq $2 ] then positive_test $1 "NON-TIERED :: AVAILABLE COMP_LEVEL" \ -XX:-TieredCompilation else - negative_test `expr $1 + 1` "NON-TIERED :: UNAVAILABLE COMP_LEVEL" \ negative_test `expr $1 + 1` "NON-TIERED :: UNAVAILABLE COMP_LEVEL" \ -XX:-TieredCompilation fi From 8439d7fa51ff0a3ffaacbb3127cd2c52d2588197 Mon Sep 17 00:00:00 2001 From: Igor Ignatyev Date: Thu, 6 Mar 2014 12:47:45 +0400 Subject: [PATCH 034/116] 8027124: [TESTBUG] NonTieredLevelsTest: java.lang.RuntimeException: private TestCase$Helper(java.lang.Object) must be osr_compiled Reviewed-by: kvn, roland --- .../compiler/tiered/NonTieredLevelsTest.java | 5 ++++- .../test/compiler/tiered/TieredLevelsTest.java | 5 ++++- .../compiler/whitebox/CompilerWhiteBoxTest.java | 16 +++++++++++++++- .../compiler/whitebox/DeoptimizeAllTest.java | 9 +++------ .../compiler/whitebox/DeoptimizeMethodTest.java | 9 +++------ .../whitebox/IsMethodCompilableTest.java | 7 ++----- .../whitebox/MakeMethodNotCompilableTest.java | 9 +++------ 7 files changed, 34 insertions(+), 26 deletions(-) diff --git a/hotspot/test/compiler/tiered/NonTieredLevelsTest.java b/hotspot/test/compiler/tiered/NonTieredLevelsTest.java index 715d32a8944..13411a0dd73 100644 --- a/hotspot/test/compiler/tiered/NonTieredLevelsTest.java +++ b/hotspot/test/compiler/tiered/NonTieredLevelsTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -70,6 +70,9 @@ public class NonTieredLevelsTest extends CompLevelsTest { @Override protected void test() throws Exception { + if (skipXcompOSR()) { + return; + } checkNotCompiled(); compile(); checkCompiled(); diff --git a/hotspot/test/compiler/tiered/TieredLevelsTest.java b/hotspot/test/compiler/tiered/TieredLevelsTest.java index 675a394498a..9fb2254d0b5 100644 --- a/hotspot/test/compiler/tiered/TieredLevelsTest.java +++ b/hotspot/test/compiler/tiered/TieredLevelsTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -51,6 +51,9 @@ public class TieredLevelsTest extends CompLevelsTest { @Override protected void test() throws Exception { + if (skipXcompOSR()) { + return; + } checkNotCompiled(); compile(); checkCompiled(); diff --git a/hotspot/test/compiler/whitebox/CompilerWhiteBoxTest.java b/hotspot/test/compiler/whitebox/CompilerWhiteBoxTest.java index 97dad5bf704..c199c2a6a67 100644 --- a/hotspot/test/compiler/whitebox/CompilerWhiteBoxTest.java +++ b/hotspot/test/compiler/whitebox/CompilerWhiteBoxTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -403,6 +403,20 @@ public abstract class CompilerWhiteBoxTest { /** flag for OSR test case */ boolean isOsr(); } + + /** + * @return {@code true} if the current test case is OSR and the mode is + * Xcomp, otherwise {@code false} + */ + protected boolean skipXcompOSR() { + boolean result = testCase.isOsr() + && CompilerWhiteBoxTest.MODE.startsWith("compiled "); + if (result && IS_VERBOSE) { + System.err.printf("Warning: %s is not applicable in %s%n", + testCase.name(), CompilerWhiteBoxTest.MODE); + } + return result; + } } enum SimpleTestCase implements CompilerWhiteBoxTest.TestCase { diff --git a/hotspot/test/compiler/whitebox/DeoptimizeAllTest.java b/hotspot/test/compiler/whitebox/DeoptimizeAllTest.java index 350c99c8f5c..ea4e36400eb 100644 --- a/hotspot/test/compiler/whitebox/DeoptimizeAllTest.java +++ b/hotspot/test/compiler/whitebox/DeoptimizeAllTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -51,11 +51,8 @@ public class DeoptimizeAllTest extends CompilerWhiteBoxTest { */ @Override protected void test() throws Exception { - if (testCase.isOsr() && CompilerWhiteBoxTest.MODE.startsWith( - "compiled ")) { - System.err.printf("Warning: %s is not applicable in %s%n", - testCase.name(), CompilerWhiteBoxTest.MODE); - return; + if (skipXcompOSR()) { + return; } compile(); checkCompiled(); diff --git a/hotspot/test/compiler/whitebox/DeoptimizeMethodTest.java b/hotspot/test/compiler/whitebox/DeoptimizeMethodTest.java index 565a5b91cd7..0b9ffd2d9db 100644 --- a/hotspot/test/compiler/whitebox/DeoptimizeMethodTest.java +++ b/hotspot/test/compiler/whitebox/DeoptimizeMethodTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -51,11 +51,8 @@ public class DeoptimizeMethodTest extends CompilerWhiteBoxTest { */ @Override protected void test() throws Exception { - if (testCase.isOsr() && CompilerWhiteBoxTest.MODE.startsWith( - "compiled ")) { - System.err.printf("Warning: %s is not applicable in %s%n", - testCase.name(), CompilerWhiteBoxTest.MODE); - return; + if (skipXcompOSR()) { + return; } compile(); checkCompiled(); diff --git a/hotspot/test/compiler/whitebox/IsMethodCompilableTest.java b/hotspot/test/compiler/whitebox/IsMethodCompilableTest.java index 83d88669735..88e5cd835e4 100644 --- a/hotspot/test/compiler/whitebox/IsMethodCompilableTest.java +++ b/hotspot/test/compiler/whitebox/IsMethodCompilableTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -77,10 +77,7 @@ public class IsMethodCompilableTest extends CompilerWhiteBoxTest { return; } - if (testCase.isOsr() && CompilerWhiteBoxTest.MODE.startsWith( - "compiled ")) { - System.err.printf("Warning: %s is not applicable in %s%n", - testCase.name(), CompilerWhiteBoxTest.MODE); + if (skipXcompOSR()) { return; } if (!isCompilable(COMP_LEVEL_FULL_OPTIMIZATION)) { diff --git a/hotspot/test/compiler/whitebox/MakeMethodNotCompilableTest.java b/hotspot/test/compiler/whitebox/MakeMethodNotCompilableTest.java index cbd65da45bd..d6586879778 100644 --- a/hotspot/test/compiler/whitebox/MakeMethodNotCompilableTest.java +++ b/hotspot/test/compiler/whitebox/MakeMethodNotCompilableTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -53,11 +53,8 @@ public class MakeMethodNotCompilableTest extends CompilerWhiteBoxTest { */ @Override protected void test() throws Exception { - if (testCase.isOsr() && CompilerWhiteBoxTest.MODE.startsWith( - "compiled ")) { - System.err.printf("Warning: %s is not applicable in %s%n", - testCase.name(), CompilerWhiteBoxTest.MODE); - return; + if (skipXcompOSR()) { + return; } checkNotCompiled(); if (!isCompilable()) { From d5ff84f8b3e1027a84af27f13c221bce2def07bf Mon Sep 17 00:00:00 2001 From: Roland Westrelin Date: Thu, 6 Mar 2014 11:11:04 +0100 Subject: [PATCH 035/116] 8032633: Enable type speculation by default Enable type speculation Reviewed-by: kvn --- hotspot/src/share/vm/opto/c2_globals.hpp | 2 +- .../test/compiler/types/TestMeetTopArrayExactConstantArray.java | 2 +- .../test/compiler/types/TestSpeculationFailedHigherEqual.java | 2 +- hotspot/test/compiler/types/TypeSpeculation.java | 2 +- .../test/compiler/uncommontrap/TestSpecTrapClassUnloading.java | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/hotspot/src/share/vm/opto/c2_globals.hpp b/hotspot/src/share/vm/opto/c2_globals.hpp index 3064b2390f1..0db9dab8104 100644 --- a/hotspot/src/share/vm/opto/c2_globals.hpp +++ b/hotspot/src/share/vm/opto/c2_globals.hpp @@ -650,7 +650,7 @@ experimental(bool, ReplaceInParentMaps, false, \ "Propagate type improvements in callers of inlinee if possible") \ \ - experimental(bool, UseTypeSpeculation, false, \ + product(bool, UseTypeSpeculation, true, \ "Speculatively propagate types from profiles") \ \ diagnostic(bool, UseInlineDepthForSpeculativeTypes, true, \ diff --git a/hotspot/test/compiler/types/TestMeetTopArrayExactConstantArray.java b/hotspot/test/compiler/types/TestMeetTopArrayExactConstantArray.java index 56b19b31713..4ec6e7b03af 100644 --- a/hotspot/test/compiler/types/TestMeetTopArrayExactConstantArray.java +++ b/hotspot/test/compiler/types/TestMeetTopArrayExactConstantArray.java @@ -25,7 +25,7 @@ * @test * @bug 8027571 * @summary meet of TopPTR exact array with constant array is not symmetric - * @run main/othervm -XX:+IgnoreUnrecognizedVMOptions -XX:-UseOnStackReplacement -XX:TypeProfileLevel=222 -XX:+UnlockExperimentalVMOptions -XX:+UseTypeSpeculation -XX:-BackgroundCompilation TestMeetTopArrayExactConstantArray + * @run main/othervm -XX:+IgnoreUnrecognizedVMOptions -XX:-UseOnStackReplacement -XX:TypeProfileLevel=222 -XX:+UseTypeSpeculation -XX:-BackgroundCompilation TestMeetTopArrayExactConstantArray * */ diff --git a/hotspot/test/compiler/types/TestSpeculationFailedHigherEqual.java b/hotspot/test/compiler/types/TestSpeculationFailedHigherEqual.java index 9579dce6e40..70d5566ad33 100644 --- a/hotspot/test/compiler/types/TestSpeculationFailedHigherEqual.java +++ b/hotspot/test/compiler/types/TestSpeculationFailedHigherEqual.java @@ -25,7 +25,7 @@ * @test * @bug 8027422 * @summary type methods shouldn't always operate on speculative part - * @run main/othervm -XX:+IgnoreUnrecognizedVMOptions -XX:TypeProfileLevel=222 -XX:+UnlockExperimentalVMOptions -XX:+UseTypeSpeculation -XX:-BackgroundCompilation TestSpeculationFailedHigherEqual + * @run main/othervm -XX:+IgnoreUnrecognizedVMOptions -XX:TypeProfileLevel=222 -XX:+UseTypeSpeculation -XX:-BackgroundCompilation TestSpeculationFailedHigherEqual * */ diff --git a/hotspot/test/compiler/types/TypeSpeculation.java b/hotspot/test/compiler/types/TypeSpeculation.java index 0a9c8e94d95..6f146b84ede 100644 --- a/hotspot/test/compiler/types/TypeSpeculation.java +++ b/hotspot/test/compiler/types/TypeSpeculation.java @@ -25,7 +25,7 @@ * @test * @bug 8024070 * @summary Test that type speculation doesn't cause incorrect execution - * @run main/othervm -XX:+IgnoreUnrecognizedVMOptions -XX:-UseOnStackReplacement -XX:-BackgroundCompilation -XX:TypeProfileLevel=222 -XX:+UnlockExperimentalVMOptions -XX:+UseTypeSpeculation TypeSpeculation + * @run main/othervm -XX:+IgnoreUnrecognizedVMOptions -XX:-UseOnStackReplacement -XX:-BackgroundCompilation -XX:TypeProfileLevel=222 -XX:+UseTypeSpeculation TypeSpeculation * */ diff --git a/hotspot/test/compiler/uncommontrap/TestSpecTrapClassUnloading.java b/hotspot/test/compiler/uncommontrap/TestSpecTrapClassUnloading.java index e660ad5e56d..fcdd592263d 100644 --- a/hotspot/test/compiler/uncommontrap/TestSpecTrapClassUnloading.java +++ b/hotspot/test/compiler/uncommontrap/TestSpecTrapClassUnloading.java @@ -25,7 +25,7 @@ * @test * @bug 8031752 * @summary speculative traps need to be cleaned up at GC - * @run main/othervm -XX:+IgnoreUnrecognizedVMOptions -XX:-TieredCompilation -XX:-UseOnStackReplacement -XX:-BackgroundCompilation -XX:+UnlockExperimentalVMOptions -XX:+UseTypeSpeculation -XX:TypeProfileLevel=222 -XX:CompileCommand=exclude,java.lang.reflect.Method::invoke -XX:CompileCommand=exclude,sun.reflect.DelegatingMethodAccessorImpl::invoke -Xmx1M TestSpecTrapClassUnloading + * @run main/othervm -XX:+IgnoreUnrecognizedVMOptions -XX:-TieredCompilation -XX:-UseOnStackReplacement -XX:-BackgroundCompilation -XX:+UseTypeSpeculation -XX:TypeProfileLevel=222 -XX:CompileCommand=exclude,java.lang.reflect.Method::invoke -XX:CompileCommand=exclude,sun.reflect.DelegatingMethodAccessorImpl::invoke -Xmx1M TestSpecTrapClassUnloading * */ From bd8255eaa4c38f4c9f8341e3157fbe3351d8c26d Mon Sep 17 00:00:00 2001 From: Vladimir Ivanov Date: Thu, 6 Mar 2014 09:53:14 -0800 Subject: [PATCH 036/116] 8036667: "assert(adr->is_AddP() && adr->in(AddPNode::Offset)->is_Con()) failed: offset is a constant" with FoldStableValues on Reviewed-by: kvn --- hotspot/src/share/vm/opto/memnode.cpp | 53 +++++++++++++-------------- 1 file changed, 25 insertions(+), 28 deletions(-) diff --git a/hotspot/src/share/vm/opto/memnode.cpp b/hotspot/src/share/vm/opto/memnode.cpp index 8097eade89f..3a6d4998b06 100644 --- a/hotspot/src/share/vm/opto/memnode.cpp +++ b/hotspot/src/share/vm/opto/memnode.cpp @@ -1593,35 +1593,33 @@ LoadNode::load_array_final_field(const TypeKlassPtr *tkls, // Try to constant-fold a stable array element. static const Type* fold_stable_ary_elem(const TypeAryPtr* ary, int off, BasicType loadbt) { + assert(ary->const_oop(), "array should be constant"); assert(ary->is_stable(), "array should be stable"); - if (ary->const_oop() != NULL) { - // Decode the results of GraphKit::array_element_address. - ciArray* aobj = ary->const_oop()->as_array(); - ciConstant con = aobj->element_value_by_offset(off); + // Decode the results of GraphKit::array_element_address. + ciArray* aobj = ary->const_oop()->as_array(); + ciConstant con = aobj->element_value_by_offset(off); - if (con.basic_type() != T_ILLEGAL && !con.is_null_or_zero()) { - const Type* con_type = Type::make_from_constant(con); - if (con_type != NULL) { - if (con_type->isa_aryptr()) { - // Join with the array element type, in case it is also stable. - int dim = ary->stable_dimension(); - con_type = con_type->is_aryptr()->cast_to_stable(true, dim-1); - } - if (loadbt == T_NARROWOOP && con_type->isa_oopptr()) { - con_type = con_type->make_narrowoop(); - } -#ifndef PRODUCT - if (TraceIterativeGVN) { - tty->print("FoldStableValues: array element [off=%d]: con_type=", off); - con_type->dump(); tty->cr(); - } -#endif //PRODUCT - return con_type; + if (con.basic_type() != T_ILLEGAL && !con.is_null_or_zero()) { + const Type* con_type = Type::make_from_constant(con); + if (con_type != NULL) { + if (con_type->isa_aryptr()) { + // Join with the array element type, in case it is also stable. + int dim = ary->stable_dimension(); + con_type = con_type->is_aryptr()->cast_to_stable(true, dim-1); } + if (loadbt == T_NARROWOOP && con_type->isa_oopptr()) { + con_type = con_type->make_narrowoop(); + } +#ifndef PRODUCT + if (TraceIterativeGVN) { + tty->print("FoldStableValues: array element [off=%d]: con_type=", off); + con_type->dump(); tty->cr(); + } +#endif //PRODUCT + return con_type; } } - return NULL; } @@ -1641,7 +1639,7 @@ const Type *LoadNode::Value( PhaseTransform *phase ) const { // Try to guess loaded type from pointer type if (tp->isa_aryptr()) { const TypeAryPtr* ary = tp->is_aryptr(); - const Type *t = ary->elem(); + const Type* t = ary->elem(); // Determine whether the reference is beyond the header or not, by comparing // the offset against the offset of the start of the array's data. @@ -1653,10 +1651,9 @@ const Type *LoadNode::Value( PhaseTransform *phase ) const { const bool off_beyond_header = ((uint)off >= (uint)min_base_off); // Try to constant-fold a stable array element. - if (FoldStableValues && ary->is_stable()) { - // Make sure the reference is not into the header - if (off_beyond_header && off != Type::OffsetBot) { - assert(adr->is_AddP() && adr->in(AddPNode::Offset)->is_Con(), "offset is a constant"); + if (FoldStableValues && ary->is_stable() && ary->const_oop() != NULL) { + // Make sure the reference is not into the header and the offset is constant + if (off_beyond_header && adr->is_AddP() && off != Type::OffsetBot) { const Type* con_type = fold_stable_ary_elem(ary, off, memory_type()); if (con_type != NULL) { return con_type; From f90699ff1671ca7706f0c8fe7c1a562d5790d266 Mon Sep 17 00:00:00 2001 From: Alexander Smundak Date: Thu, 6 Mar 2014 10:55:28 -0800 Subject: [PATCH 037/116] 8035647: PPC64: Support for elf v2 abi ELFv2 ABI used by the little endian PowerPC64 on Linux. Reviewed-by: kvn --- hotspot/src/cpu/ppc/vm/assembler_ppc.hpp | 4 + .../src/cpu/ppc/vm/assembler_ppc.inline.hpp | 2 + hotspot/src/cpu/ppc/vm/cppInterpreter_ppc.cpp | 11 ++- hotspot/src/cpu/ppc/vm/frame_ppc.hpp | 36 +++---- hotspot/src/cpu/ppc/vm/interpreterRT_ppc.cpp | 4 + hotspot/src/cpu/ppc/vm/interpreter_ppc.cpp | 6 +- hotspot/src/cpu/ppc/vm/macroAssembler_ppc.cpp | 75 ++++++++++++--- hotspot/src/cpu/ppc/vm/macroAssembler_ppc.hpp | 26 +++++- .../cpu/ppc/vm/macroAssembler_ppc.inline.hpp | 6 ++ hotspot/src/cpu/ppc/vm/methodHandles_ppc.cpp | 10 +- hotspot/src/cpu/ppc/vm/ppc.ad | 37 ++++++-- hotspot/src/cpu/ppc/vm/runtime_ppc.cpp | 12 ++- hotspot/src/cpu/ppc/vm/sharedRuntime_ppc.cpp | 93 +++++++++++-------- hotspot/src/cpu/ppc/vm/stubGenerator_ppc.cpp | 85 +++++++++++------ hotspot/src/cpu/ppc/vm/vm_version_ppc.cpp | 15 ++- hotspot/src/share/vm/utilities/elfFile.cpp | 2 +- 16 files changed, 298 insertions(+), 126 deletions(-) diff --git a/hotspot/src/cpu/ppc/vm/assembler_ppc.hpp b/hotspot/src/cpu/ppc/vm/assembler_ppc.hpp index b0519a63b08..56b0b92db73 100644 --- a/hotspot/src/cpu/ppc/vm/assembler_ppc.hpp +++ b/hotspot/src/cpu/ppc/vm/assembler_ppc.hpp @@ -124,6 +124,7 @@ class Argument VALUE_OBJ_CLASS_SPEC { } }; +#if !defined(ABI_ELFv2) // A ppc64 function descriptor. struct FunctionDescriptor VALUE_OBJ_CLASS_SPEC { private: @@ -161,6 +162,7 @@ struct FunctionDescriptor VALUE_OBJ_CLASS_SPEC { _env = (address) 0xbad; } }; +#endif class Assembler : public AbstractAssembler { protected: @@ -1067,6 +1069,7 @@ class Assembler : public AbstractAssembler { // Emit an address. inline address emit_addr(const address addr = NULL); +#if !defined(ABI_ELFv2) // Emit a function descriptor with the specified entry point, TOC, // and ENV. If the entry point is NULL, the descriptor will point // just past the descriptor. @@ -1074,6 +1077,7 @@ class Assembler : public AbstractAssembler { inline address emit_fd(address entry = NULL, address toc = (address) FunctionDescriptor::friend_toc, address env = (address) FunctionDescriptor::friend_env); +#endif ///////////////////////////////////////////////////////////////////////////////////// // PPC instructions diff --git a/hotspot/src/cpu/ppc/vm/assembler_ppc.inline.hpp b/hotspot/src/cpu/ppc/vm/assembler_ppc.inline.hpp index 200aaf11aed..d96d9204dbc 100644 --- a/hotspot/src/cpu/ppc/vm/assembler_ppc.inline.hpp +++ b/hotspot/src/cpu/ppc/vm/assembler_ppc.inline.hpp @@ -55,6 +55,7 @@ inline address Assembler::emit_addr(const address addr) { return start; } +#if !defined(ABI_ELFv2) // Emit a function descriptor with the specified entry point, TOC, and // ENV. If the entry point is NULL, the descriptor will point just // past the descriptor. @@ -73,6 +74,7 @@ inline address Assembler::emit_fd(address entry, address toc, address env) { return (address)fd; } +#endif // Issue an illegal instruction. 0 is guaranteed to be an illegal instruction. inline void Assembler::illtrap() { Assembler::emit_int32(0); } diff --git a/hotspot/src/cpu/ppc/vm/cppInterpreter_ppc.cpp b/hotspot/src/cpu/ppc/vm/cppInterpreter_ppc.cpp index c9853c589cc..44c09d9c30a 100644 --- a/hotspot/src/cpu/ppc/vm/cppInterpreter_ppc.cpp +++ b/hotspot/src/cpu/ppc/vm/cppInterpreter_ppc.cpp @@ -1136,7 +1136,9 @@ address CppInterpreterGenerator::generate_native_entry(void) { // (outgoing C args), R3_ARG1 to R10_ARG8, and F1_ARG1 to // F13_ARG13. __ mr(R3_ARG1, R18_locals); +#if !defined(ABI_ELFv2) __ ld(signature_handler_fd, 0, signature_handler_fd); +#endif __ call_stub(signature_handler_fd); // reload method __ ld(R19_method, state_(_method)); @@ -1295,8 +1297,13 @@ address CppInterpreterGenerator::generate_native_entry(void) { // native result acrosss the call. No oop is present __ mr(R3_ARG1, R16_thread); +#if defined(ABI_ELFv2) + __ call_c(CAST_FROM_FN_PTR(address, JavaThread::check_special_condition_for_native_trans), + relocInfo::none); +#else __ call_c(CAST_FROM_FN_PTR(FunctionDescriptor*, JavaThread::check_special_condition_for_native_trans), relocInfo::none); +#endif __ bind(sync_check_done); //============================================================================= @@ -1413,7 +1420,7 @@ address CppInterpreterGenerator::generate_native_entry(void) { // First, pop to caller's frame. __ pop_interpreter_frame(R11_scratch1, R12_scratch2, R21_tmp1 /* set to return pc */, R22_tmp2); - __ push_frame_abi112(0, R11_scratch1); + __ push_frame_reg_args(0, R11_scratch1); // Get the address of the exception handler. __ call_VM_leaf(CAST_FROM_FN_PTR(address, SharedRuntime::exception_handler_for_return_address), R16_thread, @@ -2545,7 +2552,7 @@ address CppInterpreterGenerator::generate_normal_entry(void) { __ mr(R4_ARG2, R3_ARG1); // ARG2 := ARG1 // Find the address of the "catch_exception" stub. - __ push_frame_abi112(0, R11_scratch1); + __ push_frame_reg_args(0, R11_scratch1); __ call_VM_leaf(CAST_FROM_FN_PTR(address, SharedRuntime::exception_handler_for_return_address), R16_thread, R4_ARG2); diff --git a/hotspot/src/cpu/ppc/vm/frame_ppc.hpp b/hotspot/src/cpu/ppc/vm/frame_ppc.hpp index 26321baeb89..b0a350252ad 100644 --- a/hotspot/src/cpu/ppc/vm/frame_ppc.hpp +++ b/hotspot/src/cpu/ppc/vm/frame_ppc.hpp @@ -50,7 +50,7 @@ // [C_FRAME] // // C_FRAME: - // 0 [ABI_112] + // 0 [ABI_REG_ARGS] // 112 CARG_9: outgoing arg 9 (arg_1 ... arg_8 via gpr_3 ... gpr_{10}) // ... // 40+M*8 CARG_M: outgoing arg M (M is the maximum of outgoing args taken over all call sites in the procedure) @@ -77,7 +77,7 @@ // 32 reserved // 40 space for TOC (=R2) register for next call // - // ABI_112: + // ABI_REG_ARGS: // 0 [ABI_48] // 48 CARG_1: spill slot for outgoing arg 1. used by next callee. // ... ... @@ -95,23 +95,25 @@ log_2_of_alignment_in_bits = 7 }; - // ABI_48: - struct abi_48 { + // ABI_MINFRAME: + struct abi_minframe { uint64_t callers_sp; uint64_t cr; //_16 uint64_t lr; +#if !defined(ABI_ELFv2) uint64_t reserved1; //_16 uint64_t reserved2; +#endif uint64_t toc; //_16 // nothing to add here! // aligned to frame::alignment_in_bytes (16) }; enum { - abi_48_size = sizeof(abi_48) + abi_minframe_size = sizeof(abi_minframe) }; - struct abi_112 : abi_48 { + struct abi_reg_args : abi_minframe { uint64_t carg_1; uint64_t carg_2; //_16 uint64_t carg_3; @@ -124,13 +126,13 @@ }; enum { - abi_112_size = sizeof(abi_112) + abi_reg_args_size = sizeof(abi_reg_args) }; #define _abi(_component) \ - (offset_of(frame::abi_112, _component)) + (offset_of(frame::abi_reg_args, _component)) - struct abi_112_spill : abi_112 { + struct abi_reg_args_spill : abi_reg_args { // additional spill slots uint64_t spill_ret; uint64_t spill_fret; //_16 @@ -138,11 +140,11 @@ }; enum { - abi_112_spill_size = sizeof(abi_112_spill) + abi_reg_args_spill_size = sizeof(abi_reg_args_spill) }; - #define _abi_112_spill(_component) \ - (offset_of(frame::abi_112_spill, _component)) + #define _abi_reg_args_spill(_component) \ + (offset_of(frame::abi_reg_args_spill, _component)) // non-volatile GPRs: @@ -242,7 +244,7 @@ // [ENTRY_FRAME_LOCALS] // // PARENT_IJAVA_FRAME_ABI: - // 0 [ABI_48] + // 0 [ABI_MINFRAME] // top_frame_sp // initial_caller_sp // @@ -258,7 +260,7 @@ // PARENT_IJAVA_FRAME_ABI - struct parent_ijava_frame_abi : abi_48 { + struct parent_ijava_frame_abi : abi_minframe { // SOE registers. // C2i adapters spill their top-frame stack-pointer here. uint64_t top_frame_sp; // carg_1 @@ -285,7 +287,7 @@ uint64_t carg_6_unused; //_16 carg_6 uint64_t carg_7_unused; // carg_7 // Use arg8 for storing frame_manager_lr. The size of - // top_ijava_frame_abi must match abi_112. + // top_ijava_frame_abi must match abi_reg_args. uint64_t frame_manager_lr; //_16 carg_8 // nothing to add here! // aligned to frame::alignment_in_bytes (16) @@ -395,8 +397,8 @@ intptr_t* fp() const { return _fp; } // Accessors for ABIs - inline abi_48* own_abi() const { return (abi_48*) _sp; } - inline abi_48* callers_abi() const { return (abi_48*) _fp; } + inline abi_minframe* own_abi() const { return (abi_minframe*) _sp; } + inline abi_minframe* callers_abi() const { return (abi_minframe*) _fp; } private: diff --git a/hotspot/src/cpu/ppc/vm/interpreterRT_ppc.cpp b/hotspot/src/cpu/ppc/vm/interpreterRT_ppc.cpp index 3a1389f413b..5d45d8bf82f 100644 --- a/hotspot/src/cpu/ppc/vm/interpreterRT_ppc.cpp +++ b/hotspot/src/cpu/ppc/vm/interpreterRT_ppc.cpp @@ -109,8 +109,10 @@ void InterpreterRuntime::SignatureHandlerGenerator::pass_object() { } void InterpreterRuntime::SignatureHandlerGenerator::generate(uint64_t fingerprint) { +#if !defined(ABI_ELFv2) // Emit fd for current codebuffer. Needs patching! __ emit_fd(); +#endif // Generate code to handle arguments. iterate(fingerprint); @@ -127,11 +129,13 @@ void InterpreterRuntime::SignatureHandlerGenerator::generate(uint64_t fingerprin // Implementation of SignatureHandlerLibrary void SignatureHandlerLibrary::pd_set_handler(address handler) { +#if !defined(ABI_ELFv2) // patch fd here. FunctionDescriptor* fd = (FunctionDescriptor*) handler; fd->set_entry(handler + (int)sizeof(FunctionDescriptor)); assert(fd->toc() == (address)0xcafe, "need to adjust TOC here"); +#endif } diff --git a/hotspot/src/cpu/ppc/vm/interpreter_ppc.cpp b/hotspot/src/cpu/ppc/vm/interpreter_ppc.cpp index 3cc1b7f07e9..03e1b1e7d54 100644 --- a/hotspot/src/cpu/ppc/vm/interpreter_ppc.cpp +++ b/hotspot/src/cpu/ppc/vm/interpreter_ppc.cpp @@ -128,13 +128,13 @@ address AbstractInterpreterGenerator::generate_slow_signature_handler() { const Register target_sp = R28_tmp8; const FloatRegister floatSlot = F0; - address entry = __ emit_fd(); + address entry = __ function_entry(); __ save_LR_CR(R0); __ save_nonvolatile_gprs(R1_SP, _spill_nonvolatiles_neg(r14)); // We use target_sp for storing arguments in the C frame. __ mr(target_sp, R1_SP); - __ push_frame_abi112_nonvolatiles(0, R11_scratch1); + __ push_frame_reg_args_nonvolatiles(0, R11_scratch1); __ mr(arg_java, R3_ARG1); @@ -474,7 +474,7 @@ address InterpreterGenerator::generate_abstract_entry(void) { // Push a new C frame and save LR. __ save_LR_CR(R0); - __ push_frame_abi112(0, R11_scratch1); + __ push_frame_reg_args(0, R11_scratch1); // This is not a leaf but we have a JavaFrameAnchor now and we will // check (create) exceptions afterward so this is ok. diff --git a/hotspot/src/cpu/ppc/vm/macroAssembler_ppc.cpp b/hotspot/src/cpu/ppc/vm/macroAssembler_ppc.cpp index dfe97adadb5..603e3ed2592 100644 --- a/hotspot/src/cpu/ppc/vm/macroAssembler_ppc.cpp +++ b/hotspot/src/cpu/ppc/vm/macroAssembler_ppc.cpp @@ -594,7 +594,13 @@ void MacroAssembler::bxx64_patchable(address dest, relocInfo::relocType rt, bool "can't identify emitted call"); } else { // variant 1: - +#if defined(ABI_ELFv2) + nop(); + calculate_address_from_global_toc(R12, dest, true, true, false); + mtctr(R12); + nop(); + nop(); +#else mr(R0, R11); // spill R11 -> R0. // Load the destination address into CTR, @@ -604,6 +610,7 @@ void MacroAssembler::bxx64_patchable(address dest, relocInfo::relocType rt, bool mtctr(R11); mr(R11, R0); // spill R11 <- R0. nop(); +#endif // do the call/jump if (link) { @@ -912,16 +919,16 @@ void MacroAssembler::push_frame(unsigned int bytes, Register tmp) { } } -// Push a frame of size `bytes' plus abi112 on top. -void MacroAssembler::push_frame_abi112(unsigned int bytes, Register tmp) { - push_frame(bytes + frame::abi_112_size, tmp); +// Push a frame of size `bytes' plus abi_reg_args on top. +void MacroAssembler::push_frame_reg_args(unsigned int bytes, Register tmp) { + push_frame(bytes + frame::abi_reg_args_size, tmp); } // Setup up a new C frame with a spill area for non-volatile GPRs and // additional space for local variables. -void MacroAssembler::push_frame_abi112_nonvolatiles(unsigned int bytes, - Register tmp) { - push_frame(bytes + frame::abi_112_size + frame::spill_nonvolatiles_size, tmp); +void MacroAssembler::push_frame_reg_args_nonvolatiles(unsigned int bytes, + Register tmp) { + push_frame(bytes + frame::abi_reg_args_size + frame::spill_nonvolatiles_size, tmp); } // Pop current C frame. @@ -929,6 +936,42 @@ void MacroAssembler::pop_frame() { ld(R1_SP, _abi(callers_sp), R1_SP); } +#if defined(ABI_ELFv2) +address MacroAssembler::branch_to(Register r_function_entry, bool and_link) { + // TODO(asmundak): make sure the caller uses R12 as function descriptor + // most of the times. + if (R12 != r_function_entry) { + mr(R12, r_function_entry); + } + mtctr(R12); + // Do a call or a branch. + if (and_link) { + bctrl(); + } else { + bctr(); + } + _last_calls_return_pc = pc(); + + return _last_calls_return_pc; +} + +// Call a C function via a function descriptor and use full C +// calling conventions. Updates and returns _last_calls_return_pc. +address MacroAssembler::call_c(Register r_function_entry) { + return branch_to(r_function_entry, /*and_link=*/true); +} + +// For tail calls: only branch, don't link, so callee returns to caller of this function. +address MacroAssembler::call_c_and_return_to_caller(Register r_function_entry) { + return branch_to(r_function_entry, /*and_link=*/false); +} + +address MacroAssembler::call_c(address function_entry, relocInfo::relocType rt) { + load_const(R12, function_entry, R0); + return branch_to(R12, /*and_link=*/true); +} + +#else // Generic version of a call to C function via a function descriptor // with variable support for C calling conventions (TOC, ENV, etc.). // Updates and returns _last_calls_return_pc. @@ -1077,6 +1120,7 @@ address MacroAssembler::call_c_using_toc(const FunctionDescriptor* fd, } return _last_calls_return_pc; } +#endif void MacroAssembler::call_VM_base(Register oop_result, Register last_java_sp, @@ -1091,8 +1135,11 @@ void MacroAssembler::call_VM_base(Register oop_result, // ARG1 must hold thread address. mr(R3_ARG1, R16_thread); - +#if defined(ABI_ELFv2) + address return_pc = call_c(entry_point, relocInfo::none); +#else address return_pc = call_c((FunctionDescriptor*)entry_point, relocInfo::none); +#endif reset_last_Java_frame(); @@ -1113,7 +1160,11 @@ void MacroAssembler::call_VM_base(Register oop_result, void MacroAssembler::call_VM_leaf_base(address entry_point) { BLOCK_COMMENT("call_VM_leaf {"); +#if defined(ABI_ELFv2) + call_c(entry_point, relocInfo::none); +#else call_c(CAST_FROM_FN_PTR(FunctionDescriptor*, entry_point), relocInfo::none); +#endif BLOCK_COMMENT("} call_VM_leaf"); } @@ -2227,7 +2278,7 @@ void MacroAssembler::g1_write_barrier_pre(Register Robj, RegisterOrConstant offs // VM call need frame to access(write) O register. if (needs_frame) { save_LR_CR(Rtmp1); - push_frame_abi112(0, Rtmp2); + push_frame_reg_args(0, Rtmp2); } if (Rpre_val->is_volatile() && Robj == noreg) mr(R31, Rpre_val); // Save pre_val across C call if it was preloaded. @@ -3006,13 +3057,13 @@ void MacroAssembler::verify_oop(Register oop, const char* msg) { mr(R0, tmp); // kill tmp save_LR_CR(tmp); - push_frame_abi112(nbytes_save, tmp); + push_frame_reg_args(nbytes_save, tmp); // restore tmp mr(tmp, R0); save_volatile_gprs(R1_SP, 112); // except R0 - // load FunctionDescriptor** + // load FunctionDescriptor** / entry_address * load_const(tmp, fd); - // load FunctionDescriptor* + // load FunctionDescriptor* / entry_address ld(tmp, 0, tmp); mr(R4_ARG2, oop); load_const(R3_ARG1, (address)msg); diff --git a/hotspot/src/cpu/ppc/vm/macroAssembler_ppc.hpp b/hotspot/src/cpu/ppc/vm/macroAssembler_ppc.hpp index e3ba572c67f..9b793ef1547 100644 --- a/hotspot/src/cpu/ppc/vm/macroAssembler_ppc.hpp +++ b/hotspot/src/cpu/ppc/vm/macroAssembler_ppc.hpp @@ -279,12 +279,12 @@ class MacroAssembler: public Assembler { // Push a frame of size `bytes'. No abi space provided. void push_frame(unsigned int bytes, Register tmp); - // Push a frame of size `bytes' plus abi112 on top. - void push_frame_abi112(unsigned int bytes, Register tmp); + // Push a frame of size `bytes' plus abi_reg_args on top. + void push_frame_reg_args(unsigned int bytes, Register tmp); // Setup up a new C frame with a spill area for non-volatile GPRs and additional // space for local variables - void push_frame_abi112_nonvolatiles(unsigned int bytes, Register tmp); + void push_frame_reg_args_nonvolatiles(unsigned int bytes, Register tmp); // pop current C frame void pop_frame(); @@ -296,17 +296,31 @@ class MacroAssembler: public Assembler { private: address _last_calls_return_pc; +#if defined(ABI_ELFv2) + // Generic version of a call to C function. + // Updates and returns _last_calls_return_pc. + address branch_to(Register function_entry, bool and_link); +#else // Generic version of a call to C function via a function descriptor // with variable support for C calling conventions (TOC, ENV, etc.). // updates and returns _last_calls_return_pc. address branch_to(Register function_descriptor, bool and_link, bool save_toc_before_call, bool restore_toc_after_call, bool load_toc_of_callee, bool load_env_of_callee); +#endif public: // Get the pc where the last call will return to. returns _last_calls_return_pc. inline address last_calls_return_pc(); +#if defined(ABI_ELFv2) + // Call a C function via a function descriptor and use full C + // calling conventions. Updates and returns _last_calls_return_pc. + address call_c(Register function_entry); + // For tail calls: only branch, don't link, so callee returns to caller of this function. + address call_c_and_return_to_caller(Register function_entry); + address call_c(address function_entry, relocInfo::relocType rt); +#else // Call a C function via a function descriptor and use full C // calling conventions. Updates and returns _last_calls_return_pc. address call_c(Register function_descriptor); @@ -315,6 +329,7 @@ class MacroAssembler: public Assembler { address call_c(const FunctionDescriptor* function_descriptor, relocInfo::relocType rt); address call_c_using_toc(const FunctionDescriptor* function_descriptor, relocInfo::relocType rt, Register toc); +#endif protected: @@ -649,6 +664,11 @@ class MacroAssembler: public Assembler { void _verify_method_ptr(Register reg, const char * msg, const char * file, int line) {} void _verify_klass_ptr(Register reg, const char * msg, const char * file, int line) {} + // Convenience method returning function entry. For the ELFv1 case + // creates function descriptor at the current address and returs + // the pointer to it. For the ELFv2 case returns the current address. + inline address function_entry(); + #define verify_method_ptr(reg) _verify_method_ptr(reg, "broken method " #reg, __FILE__, __LINE__) #define verify_klass_ptr(reg) _verify_klass_ptr(reg, "broken klass " #reg, __FILE__, __LINE__) diff --git a/hotspot/src/cpu/ppc/vm/macroAssembler_ppc.inline.hpp b/hotspot/src/cpu/ppc/vm/macroAssembler_ppc.inline.hpp index 93f31a70f5e..bebfb4b6305 100644 --- a/hotspot/src/cpu/ppc/vm/macroAssembler_ppc.inline.hpp +++ b/hotspot/src/cpu/ppc/vm/macroAssembler_ppc.inline.hpp @@ -385,4 +385,10 @@ inline void MacroAssembler::trap_range_check_ge(Register a, int si16) { twi(traptoEqual | traptoGreaterThanUnsigned, a/*reg a*/, si16); } +#if defined(ABI_ELFv2) +inline address MacroAssembler::function_entry() { return pc(); } +#else +inline address MacroAssembler::function_entry() { return emit_fd(); } +#endif + #endif // CPU_PPC_VM_MACROASSEMBLER_PPC_INLINE_HPP diff --git a/hotspot/src/cpu/ppc/vm/methodHandles_ppc.cpp b/hotspot/src/cpu/ppc/vm/methodHandles_ppc.cpp index 6709c8ce680..26363754b09 100644 --- a/hotspot/src/cpu/ppc/vm/methodHandles_ppc.cpp +++ b/hotspot/src/cpu/ppc/vm/methodHandles_ppc.cpp @@ -453,11 +453,11 @@ void trace_method_handle_stub(const char* adaptername, if (Verbose) { tty->print_cr("Registers:"); - const int abi_offset = frame::abi_112_size / 8; + const int abi_offset = frame::abi_reg_args_size / 8; for (int i = R3->encoding(); i <= R12->encoding(); i++) { Register r = as_Register(i); int count = i - R3->encoding(); - // The registers are stored in reverse order on the stack (by save_volatile_gprs(R1_SP, abi_112_size)). + // The registers are stored in reverse order on the stack (by save_volatile_gprs(R1_SP, abi_reg_args_size)). tty->print("%3s=" PTR_FORMAT, r->name(), saved_regs[abi_offset + count]); if ((count + 1) % 4 == 0) { tty->cr(); @@ -524,9 +524,9 @@ void MethodHandles::trace_method_handle(MacroAssembler* _masm, const char* adapt __ save_LR_CR(R0); __ mr(R0, R1_SP); // saved_sp assert(Assembler::is_simm(-nbytes_save, 16), "Overwriting R0"); - // push_frame_abi112 only uses R0 if nbytes_save is wider than 16 bit - __ push_frame_abi112(nbytes_save, R0); - __ save_volatile_gprs(R1_SP, frame::abi_112_size); // Except R0. + // Push_frame_reg_args only uses R0 if nbytes_save is wider than 16 bit. + __ push_frame_reg_args(nbytes_save, R0); + __ save_volatile_gprs(R1_SP, frame::abi_reg_args_size); // Except R0. __ load_const(R3_ARG1, (address)adaptername); __ mr(R4_ARG2, R23_method_handle); diff --git a/hotspot/src/cpu/ppc/vm/ppc.ad b/hotspot/src/cpu/ppc/vm/ppc.ad index 6006c1acaf6..c2854e68e16 100644 --- a/hotspot/src/cpu/ppc/vm/ppc.ad +++ b/hotspot/src/cpu/ppc/vm/ppc.ad @@ -1008,7 +1008,11 @@ int MachCallDynamicJavaNode::ret_addr_offset() { } int MachCallRuntimeNode::ret_addr_offset() { +#if defined(ABI_ELFv2) + return 28; +#else return 40; +#endif } //============================================================================= @@ -3674,6 +3678,10 @@ encode %{ MacroAssembler _masm(&cbuf); const address start_pc = __ pc(); +#if defined(ABI_ELFv2) + address entry= !($meth$$method) ? NULL : (address)$meth$$method; + __ call_c(entry, relocInfo::runtime_call_type); +#else // The function we're going to call. FunctionDescriptor fdtemp; const FunctionDescriptor* fd = !($meth$$method) ? &fdtemp : (FunctionDescriptor*)$meth$$method; @@ -3684,6 +3692,7 @@ encode %{ // Put entry, env, toc into the constant pool, this needs up to 3 constant // pool entries; call_c_using_toc will optimize the call. __ call_c_using_toc(fd, relocInfo::runtime_call_type, Rtoc); +#endif // Check the ret_addr_offset. assert(((MachCallRuntimeNode*)this)->ret_addr_offset() == __ last_calls_return_pc() - start_pc, @@ -3699,20 +3708,25 @@ encode %{ __ mtctr($src$$Register); %} - // postalloc expand emitter for runtime leaf calls. + // Postalloc expand emitter for runtime leaf calls. enc_class postalloc_expand_java_to_runtime_call(method meth, iRegLdst toc) %{ + loadConLNodesTuple loadConLNodes_Entry; +#if defined(ABI_ELFv2) + jlong entry_address = (jlong) this->entry_point(); + assert(entry_address, "need address here"); + loadConLNodes_Entry = loadConLNodesTuple_create(C, ra_, n_toc, new (C) immLOper(entry_address), + OptoReg::Name(R12_H_num), OptoReg::Name(R12_num)); +#else // Get the struct that describes the function we are about to call. FunctionDescriptor* fd = (FunctionDescriptor*) this->entry_point(); assert(fd, "need fd here"); + jlong entry_address = (jlong) fd->entry(); // new nodes - loadConLNodesTuple loadConLNodes_Entry; loadConLNodesTuple loadConLNodes_Env; loadConLNodesTuple loadConLNodes_Toc; - MachNode *mtctr = NULL; - MachCallLeafNode *call = NULL; // Create nodes and operands for loading the entry point. - loadConLNodes_Entry = loadConLNodesTuple_create(C, ra_, n_toc, new (C) immLOper((jlong) fd->entry()), + loadConLNodes_Entry = loadConLNodesTuple_create(C, ra_, n_toc, new (C) immLOper(entry_address), OptoReg::Name(R12_H_num), OptoReg::Name(R12_num)); @@ -3733,8 +3747,9 @@ encode %{ // Create nodes and operands for loading the Toc point. loadConLNodes_Toc = loadConLNodesTuple_create(C, ra_, n_toc, new (C) immLOper((jlong) fd->toc()), OptoReg::Name(R2_H_num), OptoReg::Name(R2_num)); +#endif // ABI_ELFv2 // mtctr node - mtctr = new (C) CallLeafDirect_mtctrNode(); + MachNode *mtctr = new (C) CallLeafDirect_mtctrNode(); assert(loadConLNodes_Entry._last != NULL, "entry must exist"); mtctr->add_req(0, loadConLNodes_Entry._last); @@ -3743,10 +3758,10 @@ encode %{ mtctr->_opnds[1] = new (C) iRegLdstOper(); // call node - call = new (C) CallLeafDirectNode(); + MachCallLeafNode *call = new (C) CallLeafDirectNode(); call->_opnds[0] = _opnds[0]; - call->_opnds[1] = new (C) methodOper((intptr_t) fd->entry()); // may get set later + call->_opnds[1] = new (C) methodOper((intptr_t) entry_address); // May get set later. // Make the new call node look like the old one. call->_name = _name; @@ -3773,8 +3788,10 @@ encode %{ // These must be reqired edges, as the registers are live up to // the call. Else the constants are handled as kills. call->add_req(mtctr); +#if !defined(ABI_ELFv2) call->add_req(loadConLNodes_Env._last); call->add_req(loadConLNodes_Toc._last); +#endif // ...as well as prec for (uint i = req(); i < len(); ++i) { @@ -3787,10 +3804,12 @@ encode %{ // Insert the new nodes. if (loadConLNodes_Entry._large_hi) nodes->push(loadConLNodes_Entry._large_hi); if (loadConLNodes_Entry._last) nodes->push(loadConLNodes_Entry._last); +#if !defined(ABI_ELFv2) if (loadConLNodes_Env._large_hi) nodes->push(loadConLNodes_Env._large_hi); if (loadConLNodes_Env._last) nodes->push(loadConLNodes_Env._last); if (loadConLNodes_Toc._large_hi) nodes->push(loadConLNodes_Toc._large_hi); if (loadConLNodes_Toc._last) nodes->push(loadConLNodes_Toc._last); +#endif nodes->push(mtctr); nodes->push(call); %} @@ -3837,7 +3856,7 @@ frame %{ // out_preserve_stack_slots for calls to C. Supports the var-args // backing area for register parms. // - varargs_C_out_slots_killed(((frame::abi_112_size - frame::jit_out_preserve_size) / VMRegImpl::stack_slot_size)); + varargs_C_out_slots_killed(((frame::abi_reg_args_size - frame::jit_out_preserve_size) / VMRegImpl::stack_slot_size)); // The after-PROLOG location of the return address. Location of // return address specifies a type (REG or STACK) and a number diff --git a/hotspot/src/cpu/ppc/vm/runtime_ppc.cpp b/hotspot/src/cpu/ppc/vm/runtime_ppc.cpp index bc3432bb1e3..0e5898381c2 100644 --- a/hotspot/src/cpu/ppc/vm/runtime_ppc.cpp +++ b/hotspot/src/cpu/ppc/vm/runtime_ppc.cpp @@ -87,7 +87,7 @@ void OptoRuntime::generate_exception_blob() { address start = __ pc(); - int frame_size_in_bytes = frame::abi_112_size; + int frame_size_in_bytes = frame::abi_reg_args_size; OopMap* map = new OopMap(frame_size_in_bytes / sizeof(jint), 0); // Exception pc is 'return address' for stack walker. @@ -99,7 +99,7 @@ void OptoRuntime::generate_exception_blob() { // Save callee-saved registers. // Push a C frame for the exception blob. It is needed for the C call later on. - __ push_frame_abi112(0, R11_scratch1); + __ push_frame_reg_args(0, R11_scratch1); // This call does all the hard work. It checks if an exception handler // exists in the method. @@ -109,8 +109,12 @@ void OptoRuntime::generate_exception_blob() { __ set_last_Java_frame(/*sp=*/R1_SP, noreg); __ mr(R3_ARG1, R16_thread); +#if defined(ABI_ELFv2) + __ call_c((address) OptoRuntime::handle_exception_C, relocInfo::none); +#else __ call_c(CAST_FROM_FN_PTR(FunctionDescriptor*, OptoRuntime::handle_exception_C), relocInfo::none); +#endif address calls_return_pc = __ last_calls_return_pc(); # ifdef ASSERT __ cmpdi(CCR0, R3_RET, 0); @@ -162,7 +166,11 @@ void OptoRuntime::generate_exception_blob() { __ bind(mh_callsite); __ mr(R31, R3_RET); // Save branch address. __ mr(R3_ARG1, R16_thread); +#if defined(ABI_ELFv2) + __ call_c((address) adjust_SP_for_methodhandle_callsite, relocInfo::none); +#else __ call_c(CAST_FROM_FN_PTR(FunctionDescriptor*, adjust_SP_for_methodhandle_callsite), relocInfo::none); +#endif // Returns unextended_sp in R3_RET. __ mtctr(R31); // Move address of exception handler to SR_CTR. diff --git a/hotspot/src/cpu/ppc/vm/sharedRuntime_ppc.cpp b/hotspot/src/cpu/ppc/vm/sharedRuntime_ppc.cpp index 2d9b4900bce..323bdf46771 100644 --- a/hotspot/src/cpu/ppc/vm/sharedRuntime_ppc.cpp +++ b/hotspot/src/cpu/ppc/vm/sharedRuntime_ppc.cpp @@ -67,7 +67,7 @@ class RegisterSaver { return_pc_is_thread_saved_exception_pc }; - static OopMap* push_frame_abi112_and_save_live_registers(MacroAssembler* masm, + static OopMap* push_frame_reg_args_and_save_live_registers(MacroAssembler* masm, int* out_frame_size_in_bytes, bool generate_oop_map, int return_pc_adjustment, @@ -200,12 +200,12 @@ static const RegisterSaver::LiveRegType RegisterSaver_LiveRegs[] = { RegisterSaver_LiveIntReg( R30 ), // r30 must be the last register }; -OopMap* RegisterSaver::push_frame_abi112_and_save_live_registers(MacroAssembler* masm, +OopMap* RegisterSaver::push_frame_reg_args_and_save_live_registers(MacroAssembler* masm, int* out_frame_size_in_bytes, bool generate_oop_map, int return_pc_adjustment, ReturnPCLocation return_pc_location) { - // Push an abi112-frame and store all registers which may be live. + // Push an abi_reg_args-frame and store all registers which may be live. // If requested, create an OopMap: Record volatile registers as // callee-save values in an OopMap so their save locations will be // propagated to the RegisterMap of the caller frame during @@ -221,7 +221,7 @@ OopMap* RegisterSaver::push_frame_abi112_and_save_live_registers(MacroAssembler* sizeof(RegisterSaver::LiveRegType); const int register_save_size = regstosave_num * reg_size; const int frame_size_in_bytes = round_to(register_save_size, frame::alignment_in_bytes) - + frame::abi_112_size; + + frame::abi_reg_args_size; *out_frame_size_in_bytes = frame_size_in_bytes; const int frame_size_in_slots = frame_size_in_bytes / sizeof(jint); const int register_save_offset = frame_size_in_bytes - register_save_size; @@ -229,7 +229,7 @@ OopMap* RegisterSaver::push_frame_abi112_and_save_live_registers(MacroAssembler* // OopMap frame size is in c2 stack slots (sizeof(jint)) not bytes or words. OopMap* map = generate_oop_map ? new OopMap(frame_size_in_slots, 0) : NULL; - BLOCK_COMMENT("push_frame_abi112_and_save_live_registers {"); + BLOCK_COMMENT("push_frame_reg_args_and_save_live_registers {"); // Save r30 in the last slot of the not yet pushed frame so that we // can use it as scratch reg. @@ -294,7 +294,7 @@ OopMap* RegisterSaver::push_frame_abi112_and_save_live_registers(MacroAssembler* offset += reg_size; } - BLOCK_COMMENT("} push_frame_abi112_and_save_live_registers"); + BLOCK_COMMENT("} push_frame_reg_args_and_save_live_registers"); // And we're done. return map; @@ -699,15 +699,19 @@ int SharedRuntime::c_calling_convention(const BasicType *sig_bt, int i; VMReg reg; - // Leave room for C-compatible ABI_112. - int stk = (frame::abi_112_size - frame::jit_out_preserve_size) / VMRegImpl::stack_slot_size; + // Leave room for C-compatible ABI_REG_ARGS. + int stk = (frame::abi_reg_args_size - frame::jit_out_preserve_size) / VMRegImpl::stack_slot_size; int arg = 0; int freg = 0; // Avoid passing C arguments in the wrong stack slots. +#if defined(ABI_ELFv2) + assert((SharedRuntime::out_preserve_stack_slots() + stk) * VMRegImpl::stack_slot_size == 96, + "passing C arguments in wrong stack slots"); +#else assert((SharedRuntime::out_preserve_stack_slots() + stk) * VMRegImpl::stack_slot_size == 112, "passing C arguments in wrong stack slots"); - +#endif // We fill-out regs AND regs2 if an argument must be passed in a // register AND in a stack slot. If regs2 is NULL in such a // situation, we bail-out with a fatal error. @@ -1504,7 +1508,11 @@ static void check_needs_gc_for_critical_native(MacroAssembler* masm, __ block_comment("block_for_jni_critical"); address entry_point = CAST_FROM_FN_PTR(address, SharedRuntime::block_for_jni_critical); +#if defined(ABI_ELFv2) + __ call_c(entry_point, relocInfo::runtime_call_type); +#else __ call_c(CAST_FROM_FN_PTR(FunctionDescriptor*, entry_point), relocInfo::runtime_call_type); +#endif address start = __ pc() - __ offset(), calls_return_pc = __ last_calls_return_pc(); oop_maps->add_gc_map(calls_return_pc - start, map); @@ -1877,7 +1885,7 @@ nmethod *SharedRuntime::generate_native_wrapper(MacroAssembler *masm, // Layout of the native wrapper frame: // (stack grows upwards, memory grows downwards) // - // NW [ABI_112] <-- 1) R1_SP + // NW [ABI_REG_ARGS] <-- 1) R1_SP // [outgoing arguments] <-- 2) R1_SP + out_arg_slot_offset // [oopHandle area] <-- 3) R1_SP + oop_handle_offset (save area for critical natives) // klass <-- 4) R1_SP + klass_offset @@ -2211,8 +2219,8 @@ nmethod *SharedRuntime::generate_native_wrapper(MacroAssembler *masm, // slow case of monitor enter. Inline a special case of call_VM that // disallows any pending_exception. - // Save argument registers and leave room for C-compatible ABI_112. - int frame_size = frame::abi_112_size + + // Save argument registers and leave room for C-compatible ABI_REG_ARGS. + int frame_size = frame::abi_reg_args_size + round_to(total_c_args * wordSize, frame::alignment_in_bytes); __ mr(R11_scratch1, R1_SP); RegisterSaver::push_frame_and_save_argument_registers(masm, R12_scratch2, frame_size, total_c_args, out_regs, out_regs2); @@ -2250,9 +2258,12 @@ nmethod *SharedRuntime::generate_native_wrapper(MacroAssembler *masm, // The JNI call // -------------------------------------------------------------------------- - +#if defined(ABI_ELFv2) + __ call_c(native_func, relocInfo::runtime_call_type); +#else FunctionDescriptor* fd_native_method = (FunctionDescriptor*) native_func; __ call_c(fd_native_method, relocInfo::runtime_call_type); +#endif // Now, we are back from the native code. @@ -2724,7 +2735,7 @@ void SharedRuntime::generate_deopt_blob() { OopMapSet *oop_maps = new OopMapSet(); // size of ABI112 plus spill slots for R3_RET and F1_RET. - const int frame_size_in_bytes = frame::abi_112_spill_size; + const int frame_size_in_bytes = frame::abi_reg_args_spill_size; const int frame_size_in_slots = frame_size_in_bytes / sizeof(jint); int first_frame_size_in_bytes = 0; // frame size of "unpack frame" for call to fetch_unroll_info. @@ -2757,11 +2768,11 @@ void SharedRuntime::generate_deopt_blob() { // Push the "unpack frame" // Save everything in sight. - map = RegisterSaver::push_frame_abi112_and_save_live_registers(masm, - &first_frame_size_in_bytes, - /*generate_oop_map=*/ true, - return_pc_adjustment_no_exception, - RegisterSaver::return_pc_is_lr); + map = RegisterSaver::push_frame_reg_args_and_save_live_registers(masm, + &first_frame_size_in_bytes, + /*generate_oop_map=*/ true, + return_pc_adjustment_no_exception, + RegisterSaver::return_pc_is_lr); assert(map != NULL, "OopMap must have been created"); __ li(exec_mode_reg, Deoptimization::Unpack_deopt); @@ -2787,11 +2798,11 @@ void SharedRuntime::generate_deopt_blob() { // Push the "unpack frame". // Save everything in sight. assert(R4 == R4_ARG2, "exception pc must be in r4"); - RegisterSaver::push_frame_abi112_and_save_live_registers(masm, - &first_frame_size_in_bytes, - /*generate_oop_map=*/ false, - return_pc_adjustment_exception, - RegisterSaver::return_pc_is_r4); + RegisterSaver::push_frame_reg_args_and_save_live_registers(masm, + &first_frame_size_in_bytes, + /*generate_oop_map=*/ false, + return_pc_adjustment_exception, + RegisterSaver::return_pc_is_r4); // Deopt during an exception. Save exec mode for unpack_frames. __ li(exec_mode_reg, Deoptimization::Unpack_exception); @@ -2876,8 +2887,8 @@ void SharedRuntime::generate_deopt_blob() { // ...). // Spill live volatile registers since we'll do a call. - __ std( R3_RET, _abi_112_spill(spill_ret), R1_SP); - __ stfd(F1_RET, _abi_112_spill(spill_fret), R1_SP); + __ std( R3_RET, _abi_reg_args_spill(spill_ret), R1_SP); + __ stfd(F1_RET, _abi_reg_args_spill(spill_fret), R1_SP); // Let the unpacker layout information in the skeletal frames just // allocated. @@ -2889,8 +2900,8 @@ void SharedRuntime::generate_deopt_blob() { __ reset_last_Java_frame(); // Restore the volatiles saved above. - __ ld( R3_RET, _abi_112_spill(spill_ret), R1_SP); - __ lfd(F1_RET, _abi_112_spill(spill_fret), R1_SP); + __ ld( R3_RET, _abi_reg_args_spill(spill_ret), R1_SP); + __ lfd(F1_RET, _abi_reg_args_spill(spill_fret), R1_SP); // Pop the unpack frame. __ pop_frame(); @@ -2930,7 +2941,7 @@ void SharedRuntime::generate_uncommon_trap_blob() { Register unc_trap_reg = R23_tmp3; OopMapSet* oop_maps = new OopMapSet(); - int frame_size_in_bytes = frame::abi_112_size; + int frame_size_in_bytes = frame::abi_reg_args_size; OopMap* map = new OopMap(frame_size_in_bytes / sizeof(jint), 0); // stack: (deoptee, optional i2c, caller_of_deoptee, ...). @@ -2943,7 +2954,7 @@ void SharedRuntime::generate_uncommon_trap_blob() { __ save_LR_CR(R11_scratch1); // Push an "uncommon_trap" frame. - __ push_frame_abi112(0, R11_scratch1); + __ push_frame_reg_args(0, R11_scratch1); // stack: (unpack frame, deoptee, optional i2c, caller_of_deoptee, ...). @@ -2996,7 +3007,7 @@ void SharedRuntime::generate_uncommon_trap_blob() { // interpreter frames just created. // Push a simple "unpack frame" here. - __ push_frame_abi112(0, R11_scratch1); + __ push_frame_reg_args(0, R11_scratch1); // stack: (unpack frame, skeletal interpreter frame, ..., optional // skeletal interpreter frame, optional c2i, caller of deoptee, @@ -3064,11 +3075,11 @@ SafepointBlob* SharedRuntime::generate_handler_blob(address call_ptr, int poll_t } // Save registers, fpu state, and flags. - map = RegisterSaver::push_frame_abi112_and_save_live_registers(masm, - &frame_size_in_bytes, - /*generate_oop_map=*/ true, - /*return_pc_adjustment=*/0, - return_pc_location); + map = RegisterSaver::push_frame_reg_args_and_save_live_registers(masm, + &frame_size_in_bytes, + /*generate_oop_map=*/ true, + /*return_pc_adjustment=*/0, + return_pc_location); // The following is basically a call_VM. However, we need the precise // address of the call in order to generate an oopmap. Hence, we do all the @@ -3151,11 +3162,11 @@ RuntimeStub* SharedRuntime::generate_resolve_blob(address destination, const cha address start = __ pc(); - map = RegisterSaver::push_frame_abi112_and_save_live_registers(masm, - &frame_size_in_bytes, - /*generate_oop_map*/ true, - /*return_pc_adjustment*/ 0, - RegisterSaver::return_pc_is_lr); + map = RegisterSaver::push_frame_reg_args_and_save_live_registers(masm, + &frame_size_in_bytes, + /*generate_oop_map*/ true, + /*return_pc_adjustment*/ 0, + RegisterSaver::return_pc_is_lr); // Use noreg as last_Java_pc, the return pc will be reconstructed // from the physical frame. diff --git a/hotspot/src/cpu/ppc/vm/stubGenerator_ppc.cpp b/hotspot/src/cpu/ppc/vm/stubGenerator_ppc.cpp index 1cd4d295925..96c3ae94648 100644 --- a/hotspot/src/cpu/ppc/vm/stubGenerator_ppc.cpp +++ b/hotspot/src/cpu/ppc/vm/stubGenerator_ppc.cpp @@ -79,11 +79,11 @@ class StubGenerator: public StubCodeGenerator { StubCodeMark mark(this, "StubRoutines", "call_stub"); - address start = __ emit_fd(); + address start = __ function_entry(); // some sanity checks - assert((sizeof(frame::abi_48) % 16) == 0, "unaligned"); - assert((sizeof(frame::abi_112) % 16) == 0, "unaligned"); + assert((sizeof(frame::abi_minframe) % 16) == 0, "unaligned"); + assert((sizeof(frame::abi_reg_args) % 16) == 0, "unaligned"); assert((sizeof(frame::spill_nonvolatiles) % 16) == 0, "unaligned"); assert((sizeof(frame::parent_ijava_frame_abi) % 16) == 0, "unaligned"); assert((sizeof(frame::entry_frame_locals) % 16) == 0, "unaligned"); @@ -444,7 +444,7 @@ class StubGenerator: public StubCodeGenerator { // Save LR/CR and copy exception pc (LR) into R4_ARG2. __ save_LR_CR(R4_ARG2); - __ push_frame_abi112(0, R0); + __ push_frame_reg_args(0, R0); // Find exception handler. __ call_VM_leaf(CAST_FROM_FN_PTR(address, SharedRuntime::exception_handler_for_return_address), @@ -519,7 +519,7 @@ class StubGenerator: public StubCodeGenerator { MacroAssembler* masm = new MacroAssembler(&code); OopMapSet* oop_maps = new OopMapSet(); - int frame_size_in_bytes = frame::abi_112_size; + int frame_size_in_bytes = frame::abi_reg_args_size; OopMap* map = new OopMap(frame_size_in_bytes / sizeof(jint), 0); StubCodeMark mark(this, "StubRoutines", "throw_exception"); @@ -529,7 +529,7 @@ class StubGenerator: public StubCodeGenerator { __ save_LR_CR(R11_scratch1); // Push a frame. - __ push_frame_abi112(0, R11_scratch1); + __ push_frame_reg_args(0, R11_scratch1); address frame_complete_pc = __ pc(); @@ -551,8 +551,11 @@ class StubGenerator: public StubCodeGenerator { if (arg2 != noreg) { __ mr(R5_ARG3, arg2); } - __ call_c(CAST_FROM_FN_PTR(FunctionDescriptor*, runtime_entry), - relocInfo::none); +#if defined(ABI_ELFv2) + __ call_c(runtime_entry, relocInfo::none); +#else + __ call_c(CAST_FROM_FN_PTR(FunctionDescriptor*, runtime_entry), relocInfo::none); +#endif // Set an oopmap for the call site. oop_maps->add_gc_map((int)(gc_map_pc - start), map); @@ -614,7 +617,7 @@ class StubGenerator: public StubCodeGenerator { // With G1, don't generate the call if we statically know that the target in uninitialized if (!dest_uninitialized) { const int spill_slots = 4 * wordSize; - const int frame_size = frame::abi_112_size + spill_slots; + const int frame_size = frame::abi_reg_args_size + spill_slots; Label filtered; // Is marking active? @@ -628,7 +631,7 @@ class StubGenerator: public StubCodeGenerator { __ beq(CCR0, filtered); __ save_LR_CR(R0); - __ push_frame_abi112(spill_slots, R0); + __ push_frame_reg_args(spill_slots, R0); __ std(from, frame_size - 1 * wordSize, R1_SP); __ std(to, frame_size - 2 * wordSize, R1_SP); __ std(count, frame_size - 3 * wordSize, R1_SP); @@ -672,7 +675,7 @@ class StubGenerator: public StubCodeGenerator { if (branchToEnd) { __ save_LR_CR(R0); // We need this frame only to spill LR. - __ push_frame_abi112(0, R0); + __ push_frame_reg_args(0, R0); __ call_VM_leaf(CAST_FROM_FN_PTR(address, BarrierSet::static_write_ref_array_post), addr, count); __ pop_frame(); __ restore_LR_CR(R0); @@ -742,7 +745,7 @@ class StubGenerator: public StubCodeGenerator { StubCodeMark mark(this, "StubRoutines", "zero_words_aligned8"); // Implemented as in ClearArray. - address start = __ emit_fd(); + address start = __ function_entry(); Register base_ptr_reg = R3_ARG1; // tohw (needs to be 8b aligned) Register cnt_dwords_reg = R4_ARG2; // count (in dwords) @@ -820,7 +823,7 @@ class StubGenerator: public StubCodeGenerator { // address generate_handler_for_unsafe_access() { StubCodeMark mark(this, "StubRoutines", "handler_for_unsafe_access"); - address start = __ emit_fd(); + address start = __ function_entry(); __ unimplemented("StubRoutines::handler_for_unsafe_access", 93); return start; } @@ -861,7 +864,7 @@ class StubGenerator: public StubCodeGenerator { // to read from the safepoint polling page. address generate_load_from_poll() { StubCodeMark mark(this, "StubRoutines", "generate_load_from_poll"); - address start = __ emit_fd(); + address start = __ function_entry(); __ unimplemented("StubRoutines::verify_oop", 95); // TODO PPC port return start; } @@ -885,7 +888,7 @@ class StubGenerator: public StubCodeGenerator { // address generate_fill(BasicType t, bool aligned, const char* name) { StubCodeMark mark(this, "StubRoutines", name); - address start = __ emit_fd(); + address start = __ function_entry(); const Register to = R3_ARG1; // source array address const Register value = R4_ARG2; // fill value @@ -1123,7 +1126,7 @@ class StubGenerator: public StubCodeGenerator { // address generate_disjoint_byte_copy(bool aligned, const char * name) { StubCodeMark mark(this, "StubRoutines", name); - address start = __ emit_fd(); + address start = __ function_entry(); Register tmp1 = R6_ARG4; Register tmp2 = R7_ARG5; @@ -1254,15 +1257,21 @@ class StubGenerator: public StubCodeGenerator { // address generate_conjoint_byte_copy(bool aligned, const char * name) { StubCodeMark mark(this, "StubRoutines", name); - address start = __ emit_fd(); + address start = __ function_entry(); Register tmp1 = R6_ARG4; Register tmp2 = R7_ARG5; Register tmp3 = R8_ARG6; +#if defined(ABI_ELFv2) + address nooverlap_target = aligned ? + StubRoutines::arrayof_jbyte_disjoint_arraycopy() : + StubRoutines::jbyte_disjoint_arraycopy(); +#else address nooverlap_target = aligned ? ((FunctionDescriptor*)StubRoutines::arrayof_jbyte_disjoint_arraycopy())->entry() : ((FunctionDescriptor*)StubRoutines::jbyte_disjoint_arraycopy())->entry(); +#endif array_overlap_test(nooverlap_target, 0); // Do reverse copy. We assume the case of actual overlap is rare enough @@ -1345,7 +1354,7 @@ class StubGenerator: public StubCodeGenerator { Register tmp3 = R8_ARG6; Register tmp4 = R9_ARG7; - address start = __ emit_fd(); + address start = __ function_entry(); Label l_1, l_2, l_3, l_4, l_5, l_6, l_7, l_8; // don't try anything fancy if arrays don't have many elements @@ -1474,15 +1483,21 @@ class StubGenerator: public StubCodeGenerator { // address generate_conjoint_short_copy(bool aligned, const char * name) { StubCodeMark mark(this, "StubRoutines", name); - address start = __ emit_fd(); + address start = __ function_entry(); Register tmp1 = R6_ARG4; Register tmp2 = R7_ARG5; Register tmp3 = R8_ARG6; +#if defined(ABI_ELFv2) + address nooverlap_target = aligned ? + StubRoutines::arrayof_jshort_disjoint_arraycopy() : + StubRoutines::jshort_disjoint_arraycopy(); +#else address nooverlap_target = aligned ? ((FunctionDescriptor*)StubRoutines::arrayof_jshort_disjoint_arraycopy())->entry() : ((FunctionDescriptor*)StubRoutines::jshort_disjoint_arraycopy())->entry(); +#endif array_overlap_test(nooverlap_target, 1); @@ -1597,7 +1612,7 @@ class StubGenerator: public StubCodeGenerator { // address generate_disjoint_int_copy(bool aligned, const char * name) { StubCodeMark mark(this, "StubRoutines", name); - address start = __ emit_fd(); + address start = __ function_entry(); generate_disjoint_int_copy_core(aligned); __ blr(); return start; @@ -1681,11 +1696,17 @@ class StubGenerator: public StubCodeGenerator { // address generate_conjoint_int_copy(bool aligned, const char * name) { StubCodeMark mark(this, "StubRoutines", name); - address start = __ emit_fd(); + address start = __ function_entry(); +#if defined(ABI_ELFv2) + address nooverlap_target = aligned ? + StubRoutines::arrayof_jint_disjoint_arraycopy() : + StubRoutines::jint_disjoint_arraycopy(); +#else address nooverlap_target = aligned ? ((FunctionDescriptor*)StubRoutines::arrayof_jint_disjoint_arraycopy())->entry() : ((FunctionDescriptor*)StubRoutines::jint_disjoint_arraycopy())->entry(); +#endif array_overlap_test(nooverlap_target, 2); @@ -1767,7 +1788,7 @@ class StubGenerator: public StubCodeGenerator { // address generate_disjoint_long_copy(bool aligned, const char * name) { StubCodeMark mark(this, "StubRoutines", name); - address start = __ emit_fd(); + address start = __ function_entry(); generate_disjoint_long_copy_core(aligned); __ blr(); @@ -1849,11 +1870,17 @@ class StubGenerator: public StubCodeGenerator { // address generate_conjoint_long_copy(bool aligned, const char * name) { StubCodeMark mark(this, "StubRoutines", name); - address start = __ emit_fd(); + address start = __ function_entry(); +#if defined(ABI_ELFv2) + address nooverlap_target = aligned ? + StubRoutines::arrayof_jlong_disjoint_arraycopy() : + StubRoutines::jlong_disjoint_arraycopy(); +#else address nooverlap_target = aligned ? ((FunctionDescriptor*)StubRoutines::arrayof_jlong_disjoint_arraycopy())->entry() : ((FunctionDescriptor*)StubRoutines::jlong_disjoint_arraycopy())->entry(); +#endif array_overlap_test(nooverlap_target, 3); generate_conjoint_long_copy_core(aligned); @@ -1875,11 +1902,17 @@ class StubGenerator: public StubCodeGenerator { address generate_conjoint_oop_copy(bool aligned, const char * name, bool dest_uninitialized) { StubCodeMark mark(this, "StubRoutines", name); - address start = __ emit_fd(); + address start = __ function_entry(); +#if defined(ABI_ELFv2) + address nooverlap_target = aligned ? + StubRoutines::arrayof_oop_disjoint_arraycopy() : + StubRoutines::oop_disjoint_arraycopy(); +#else address nooverlap_target = aligned ? ((FunctionDescriptor*)StubRoutines::arrayof_oop_disjoint_arraycopy())->entry() : ((FunctionDescriptor*)StubRoutines::oop_disjoint_arraycopy())->entry(); +#endif gen_write_ref_array_pre_barrier(R3_ARG1, R4_ARG2, R5_ARG3, dest_uninitialized, R9_ARG7); @@ -1910,7 +1943,7 @@ class StubGenerator: public StubCodeGenerator { // address generate_disjoint_oop_copy(bool aligned, const char * name, bool dest_uninitialized) { StubCodeMark mark(this, "StubRoutines", name); - address start = __ emit_fd(); + address start = __ function_entry(); gen_write_ref_array_pre_barrier(R3_ARG1, R4_ARG2, R5_ARG3, dest_uninitialized, R9_ARG7); @@ -1991,7 +2024,7 @@ class StubGenerator: public StubCodeGenerator { StubCodeMark mark(this, "StubRoutines", name); // Entry point, pc or function descriptor. - *entry = __ emit_fd(); + *entry = __ function_entry(); // Load *adr into R4_ARG2, may fault. *fault_pc = __ pc(); diff --git a/hotspot/src/cpu/ppc/vm/vm_version_ppc.cpp b/hotspot/src/cpu/ppc/vm/vm_version_ppc.cpp index a732c7bfc80..567a5d0d3f6 100644 --- a/hotspot/src/cpu/ppc/vm/vm_version_ppc.cpp +++ b/hotspot/src/cpu/ppc/vm/vm_version_ppc.cpp @@ -24,7 +24,8 @@ */ #include "precompiled.hpp" -#include "assembler_ppc.inline.hpp" +#include "asm/assembler.inline.hpp" +#include "asm/macroAssembler.inline.hpp" #include "compiler/disassembler.hpp" #include "memory/resourceArea.hpp" #include "runtime/java.hpp" @@ -168,7 +169,7 @@ void VM_Version::determine_section_size() { uint32_t *code = (uint32_t *)a->pc(); // Emit code. - void (*test1)() = (void(*)())(void *)a->emit_fd(); + void (*test1)() = (void(*)())(void *)a->function_entry(); Label l1; @@ -242,7 +243,7 @@ void VM_Version::determine_section_size() { a->blr(); // Emit code. - void (*test2)() = (void(*)())(void *)a->emit_fd(); + void (*test2)() = (void(*)())(void *)a->function_entry(); // uint32_t *code = (uint32_t *)a->pc(); Label l2; @@ -383,8 +384,12 @@ void VM_Version::determine_section_size() { #endif // COMPILER2 void VM_Version::determine_features() { +#if defined(ABI_ELFv2) + const int code_size = (num_features+1+2*7)*BytesPerInstWord; // TODO(asmundak): calculation is incorrect. +#else // 7 InstWords for each call (function descriptor + blr instruction). const int code_size = (num_features+1+2*7)*BytesPerInstWord; +#endif int features = 0; // create test area @@ -398,7 +403,7 @@ void VM_Version::determine_features() { MacroAssembler* a = new MacroAssembler(&cb); // Emit code. - void (*test)(address addr, uint64_t offset)=(void(*)(address addr, uint64_t offset))(void *)a->emit_fd(); + void (*test)(address addr, uint64_t offset)=(void(*)(address addr, uint64_t offset))(void *)a->function_entry(); uint32_t *code = (uint32_t *)a->pc(); // Don't use R0 in ldarx. // Keep R3_ARG1 unmodified, it contains &field (see below). @@ -415,7 +420,7 @@ void VM_Version::determine_features() { a->blr(); // Emit function to set one cache line to zero. Emit function descriptor and get pointer to it. - void (*zero_cacheline_func_ptr)(char*) = (void(*)(char*))(void *)a->emit_fd(); + void (*zero_cacheline_func_ptr)(char*) = (void(*)(char*))(void *)a->function_entry(); a->dcbz(R3_ARG1); // R3_ARG1 = addr a->blr(); diff --git a/hotspot/src/share/vm/utilities/elfFile.cpp b/hotspot/src/share/vm/utilities/elfFile.cpp index 371a036406c..3d895956315 100644 --- a/hotspot/src/share/vm/utilities/elfFile.cpp +++ b/hotspot/src/share/vm/utilities/elfFile.cpp @@ -140,7 +140,7 @@ bool ElfFile::load_tables() { } } -#if defined(PPC64) +#if defined(PPC64) && !defined(ABI_ELFv2) // Now read the .opd section wich contains the PPC64 function descriptor table. // The .opd section is only available on PPC64 (see for example: // http://refspecs.linuxfoundation.org/LSB_3.1.1/LSB-Core-PPC64/LSB-Core-PPC64/specialsections.html) From 87b278c44ca338bebc8b89ea29ce8b17116fd0a0 Mon Sep 17 00:00:00 2001 From: Volker Simonis Date: Thu, 6 Mar 2014 14:35:26 +0100 Subject: [PATCH 038/116] 8036777: AIX: Adapt implementation after '6546236: Thread interrupt() of Thread.sleep() can be lost on Solaris.' Reviewed-by: kvn --- hotspot/src/os/aix/vm/os_aix.cpp | 156 +----------------------- hotspot/src/os/aix/vm/os_aix.inline.hpp | 6 + 2 files changed, 10 insertions(+), 152 deletions(-) diff --git a/hotspot/src/os/aix/vm/os_aix.cpp b/hotspot/src/os/aix/vm/os_aix.cpp index ba6b8d494c6..33385e7a09a 100644 --- a/hotspot/src/os/aix/vm/os_aix.cpp +++ b/hotspot/src/os/aix/vm/os_aix.cpp @@ -1135,15 +1135,10 @@ jlong os::javaTimeNanos() { } void os::javaTimeNanos_info(jvmtiTimerInfo *info_ptr) { - { - // gettimeofday - based on time in seconds since the Epoch thus does not wrap - info_ptr->max_value = ALL_64_BITS; - - // gettimeofday is a real time clock so it skips - info_ptr->may_skip_backward = true; - info_ptr->may_skip_forward = true; - } - + info_ptr->max_value = ALL_64_BITS; + // mread_real_time() is monotonic (see 'os::javaTimeNanos()') + info_ptr->may_skip_backward = false; + info_ptr->may_skip_forward = false; info_ptr->kind = JVMTI_TIMER_ELAPSED; // elapsed not CPU time } @@ -2799,105 +2794,6 @@ size_t os::read(int fd, void *buf, unsigned int nBytes) { return ::read(fd, buf, nBytes); } -#define NANOSECS_PER_MILLISEC 1000000 - -int os::sleep(Thread* thread, jlong millis, bool interruptible) { - assert(thread == Thread::current(), "thread consistency check"); - - // Prevent nasty overflow in deadline calculation - // by handling long sleeps similar to solaris or windows. - const jlong limit = INT_MAX; - int result; - while (millis > limit) { - if ((result = os::sleep(thread, limit, interruptible)) != OS_OK) { - return result; - } - millis -= limit; - } - - ParkEvent * const slp = thread->_SleepEvent; - slp->reset(); - OrderAccess::fence(); - - if (interruptible) { - jlong prevtime = javaTimeNanos(); - - // Prevent precision loss and too long sleeps - jlong deadline = prevtime + millis * NANOSECS_PER_MILLISEC; - - for (;;) { - if (os::is_interrupted(thread, true)) { - return OS_INTRPT; - } - - jlong newtime = javaTimeNanos(); - - assert(newtime >= prevtime, "time moving backwards"); - // Doing prevtime and newtime in microseconds doesn't help precision, - // and trying to round up to avoid lost milliseconds can result in a - // too-short delay. - millis -= (newtime - prevtime) / NANOSECS_PER_MILLISEC; - - if (millis <= 0) { - return OS_OK; - } - - // Stop sleeping if we passed the deadline - if (newtime >= deadline) { - return OS_OK; - } - - prevtime = newtime; - - { - assert(thread->is_Java_thread(), "sanity check"); - JavaThread *jt = (JavaThread *) thread; - ThreadBlockInVM tbivm(jt); - OSThreadWaitState osts(jt->osthread(), false /* not Object.wait() */); - - jt->set_suspend_equivalent(); - - slp->park(millis); - - // were we externally suspended while we were waiting? - jt->check_and_wait_while_suspended(); - } - } - } else { - OSThreadWaitState osts(thread->osthread(), false /* not Object.wait() */); - jlong prevtime = javaTimeNanos(); - - // Prevent precision loss and too long sleeps - jlong deadline = prevtime + millis * NANOSECS_PER_MILLISEC; - - for (;;) { - // It'd be nice to avoid the back-to-back javaTimeNanos() calls on - // the 1st iteration ... - jlong newtime = javaTimeNanos(); - - if (newtime - prevtime < 0) { - // time moving backwards, should only happen if no monotonic clock - // not a guarantee() because JVM should not abort on kernel/glibc bugs - // - HS14 Commented out as not implemented. - // - TODO Maybe we should implement it? - //assert(!Aix::supports_monotonic_clock(), "time moving backwards"); - } else { - millis -= (newtime - prevtime) / NANOSECS_PER_MILLISEC; - } - - if (millis <= 0) break; - - if (newtime >= deadline) { - break; - } - - prevtime = newtime; - slp->park(millis); - } - return OS_OK; - } -} - void os::naked_short_sleep(jlong ms) { struct timespec req; @@ -3246,50 +3142,6 @@ static void do_resume(OSThread* osthread) { guarantee(osthread->sr.is_running(), "Must be running!"); } -//////////////////////////////////////////////////////////////////////////////// -// interrupt support - -void os::interrupt(Thread* thread) { - assert(Thread::current() == thread || Threads_lock->owned_by_self(), - "possibility of dangling Thread pointer"); - - OSThread* osthread = thread->osthread(); - - if (!osthread->interrupted()) { - osthread->set_interrupted(true); - // More than one thread can get here with the same value of osthread, - // resulting in multiple notifications. We do, however, want the store - // to interrupted() to be visible to other threads before we execute unpark(). - OrderAccess::fence(); - ParkEvent * const slp = thread->_SleepEvent; - if (slp != NULL) slp->unpark(); - } - - // For JSR166. Unpark even if interrupt status already was set - if (thread->is_Java_thread()) - ((JavaThread*)thread)->parker()->unpark(); - - ParkEvent * ev = thread->_ParkEvent; - if (ev != NULL) ev->unpark(); - -} - -bool os::is_interrupted(Thread* thread, bool clear_interrupted) { - assert(Thread::current() == thread || Threads_lock->owned_by_self(), - "possibility of dangling Thread pointer"); - - OSThread* osthread = thread->osthread(); - - bool interrupted = osthread->interrupted(); - - if (interrupted && clear_interrupted) { - osthread->set_interrupted(false); - // consider thread->_SleepEvent->reset() ... optional optimization - } - - return interrupted; -} - /////////////////////////////////////////////////////////////////////////////////// // signal handling (except suspend/resume) diff --git a/hotspot/src/os/aix/vm/os_aix.inline.hpp b/hotspot/src/os/aix/vm/os_aix.inline.hpp index ff9c7a7aa3e..4a648559f52 100644 --- a/hotspot/src/os/aix/vm/os_aix.inline.hpp +++ b/hotspot/src/os/aix/vm/os_aix.inline.hpp @@ -283,4 +283,10 @@ inline int os::set_sock_opt(int fd, int level, int optname, const char* optval, socklen_t optlen) { return ::setsockopt(fd, level, optname, optval, optlen); } + +inline bool os::supports_monotonic_clock() { + // mread_real_time() is monotonic on AIX (see os::javaTimeNanos() comments) + return true; +} + #endif // OS_AIX_VM_OS_AIX_INLINE_HPP From af27057b263d8954ada8a03b5f715f5071794e8d Mon Sep 17 00:00:00 2001 From: Paul Govereau Date: Thu, 6 Mar 2014 13:50:12 -0500 Subject: [PATCH 039/116] 8034091: There is no records in LineNumberTable attribute for ternary operator ?: splitted to several lines Reviewed-by: jjg --- .../classes/com/sun/tools/javac/jvm/Gen.java | 2 + .../ConditionalLineNumberTest.java | 80 +++++++++++++++++++ 2 files changed, 82 insertions(+) create mode 100644 langtools/test/tools/javac/linenumbers/ConditionalLineNumberTest.java diff --git a/langtools/src/share/classes/com/sun/tools/javac/jvm/Gen.java b/langtools/src/share/classes/com/sun/tools/javac/jvm/Gen.java index 0f2cbcf1ed7..e1bda1c736d 100644 --- a/langtools/src/share/classes/com/sun/tools/javac/jvm/Gen.java +++ b/langtools/src/share/classes/com/sun/tools/javac/jvm/Gen.java @@ -1910,6 +1910,7 @@ public class Gen extends JCTree.Visitor { if (!c.isFalse()) { code.resolve(c.trueJumps); int startpc = genCrt ? code.curCP() : 0; + code.statBegin(tree.truepart.pos); genExpr(tree.truepart, pt).load(); code.state.forceStackTop(tree.type); if (genCrt) code.crt.put(tree.truepart, CRT_FLOW_TARGET, @@ -1919,6 +1920,7 @@ public class Gen extends JCTree.Visitor { if (elseChain != null) { code.resolve(elseChain); int startpc = genCrt ? code.curCP() : 0; + code.statBegin(tree.falsepart.pos); genExpr(tree.falsepart, pt).load(); code.state.forceStackTop(tree.type); if (genCrt) code.crt.put(tree.falsepart, CRT_FLOW_TARGET, diff --git a/langtools/test/tools/javac/linenumbers/ConditionalLineNumberTest.java b/langtools/test/tools/javac/linenumbers/ConditionalLineNumberTest.java new file mode 100644 index 00000000000..a1af968e806 --- /dev/null +++ b/langtools/test/tools/javac/linenumbers/ConditionalLineNumberTest.java @@ -0,0 +1,80 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 8034091 + * @summary Add LineNumberTable attributes for conditional operator (?:) split across several lines. + */ + +import com.sun.tools.classfile.ClassFile; +import com.sun.tools.classfile.ConstantPoolException; +import com.sun.tools.classfile.Method; +import com.sun.tools.classfile.Attribute; +import com.sun.tools.classfile.Code_attribute; +import com.sun.tools.classfile.LineNumberTable_attribute; +import com.sun.tools.classfile.LineNumberTable_attribute.Entry; + +import java.io.File; +import java.io.IOException; + +public class ConditionalLineNumberTest { + public static void main(String[] args) throws Exception { + // check that we have 5 consecutive entries for method() + Entry[] lines = findEntries(); + if (lines == null || lines.length != 5) + throw new Exception("conditional line number table incorrect"); + + int current = lines[0].line_number; + for (Entry e : lines) { + if (e.line_number != current) + throw new Exception("conditional line number table incorrect"); + current++; + } + } + + static Entry[] findEntries() throws IOException, ConstantPoolException { + ClassFile self = ClassFile.read(ConditionalLineNumberTest.class.getResourceAsStream("ConditionalLineNumberTest.class")); + for (Method m : self.methods) { + if ("method".equals(m.getName(self.constant_pool))) { + Code_attribute code_attribute = (Code_attribute)m.attributes.get(Attribute.Code); + for (Attribute at : code_attribute.attributes) { + if (Attribute.LineNumberTable.equals(at.getName(self.constant_pool))) { + return ((LineNumberTable_attribute)at).line_number_table; + } + } + } + } + return null; + } + + // This method should get one LineNumberTable entry per line + // in the method body. + public static String method(int field) { + String s = field % 2 == 0 ? + (field == 0 ? "false" + : "true" + field) : //Breakpoint + "false" + field; //Breakpoint + return s; + } +} From e8bc971d1961bdad3cda137be28da6905c6faa49 Mon Sep 17 00:00:00 2001 From: Albert Noll Date: Fri, 7 Mar 2014 07:42:40 +0100 Subject: [PATCH 040/116] 8029799: vm/mlvm/anonloader/stress/oome prints warning: CodeHeap: # of free blocks > 10000 Double CodeCacheSegmentSize from 64 byte to 128 bytes if tiered compilation is enabled Reviewed-by: kvn, twisti --- hotspot/src/share/vm/code/codeCache.cpp | 50 ++-- hotspot/src/share/vm/code/codeCache.hpp | 7 +- hotspot/src/share/vm/memory/heap.cpp | 272 +++++++++++---------- hotspot/src/share/vm/memory/heap.hpp | 30 ++- hotspot/src/share/vm/runtime/arguments.cpp | 2 + hotspot/src/share/vm/runtime/globals.hpp | 8 +- 6 files changed, 201 insertions(+), 168 deletions(-) diff --git a/hotspot/src/share/vm/code/codeCache.cpp b/hotspot/src/share/vm/code/codeCache.cpp index 3d7758304a8..b3a857c2062 100644 --- a/hotspot/src/share/vm/code/codeCache.cpp +++ b/hotspot/src/share/vm/code/codeCache.cpp @@ -198,14 +198,12 @@ CodeBlob* CodeCache::allocate(int size, bool is_critical) { } maxCodeCacheUsed = MAX2(maxCodeCacheUsed, ((address)_heap->high_boundary() - (address)_heap->low_boundary()) - unallocated_capacity()); - verify_if_often(); print_trace("allocation", cb, size); return cb; } void CodeCache::free(CodeBlob* cb) { assert_locked_or_safepoint(CodeCache_lock); - verify_if_often(); print_trace("free", cb); if (cb->is_nmethod()) { @@ -221,7 +219,6 @@ void CodeCache::free(CodeBlob* cb) { _heap->deallocate(cb); - verify_if_often(); assert(_number_of_blobs >= 0, "sanity check"); } @@ -244,12 +241,6 @@ void CodeCache::commit(CodeBlob* cb) { } -void CodeCache::flush() { - assert_locked_or_safepoint(CodeCache_lock); - Unimplemented(); -} - - // Iteration over CodeBlobs #define FOR_ALL_BLOBS(var) for (CodeBlob *var = first() ; var != NULL; var = next(var) ) @@ -269,7 +260,7 @@ bool CodeCache::contains(void *p) { CodeBlob* CodeCache::find_blob(void* start) { CodeBlob* result = find_blob_unsafe(start); if (result == NULL) return NULL; - // We could potientially look up non_entrant methods + // We could potentially look up non_entrant methods guarantee(!result->is_zombie() || result->is_locked_by_vm() || is_error_reported(), "unsafe access to zombie method"); return result; } @@ -741,17 +732,26 @@ void CodeCache::report_codemem_full() { } } +void CodeCache::print_memory_overhead() { + size_t wasted_bytes = 0; + CodeBlob *cb; + for (cb = first(); cb != NULL; cb = next(cb)) { + HeapBlock* heap_block = ((HeapBlock*)cb) - 1; + wasted_bytes += heap_block->length() * CodeCacheSegmentSize - cb->size(); + } + // Print bytes that are allocated in the freelist + ttyLocker ttl; + tty->print_cr("Number of elements in freelist: %d", freelist_length()); + tty->print_cr("Allocated in freelist: %dkB", bytes_allocated_in_freelist()/K); + tty->print_cr("Unused bytes in CodeBlobs: %dkB", (int)(wasted_bytes/K)); + tty->print_cr("Segment map size: %dkB", allocated_segments()/K); // 1 byte per segment +} + //------------------------------------------------------------------------------------------------ // Non-product version #ifndef PRODUCT -void CodeCache::verify_if_often() { - if (VerifyCodeCacheOften) { - _heap->verify(); - } -} - void CodeCache::print_trace(const char* event, CodeBlob* cb, int size) { if (PrintCodeCache2) { // Need to add a new flag ResourceMark rm; @@ -774,7 +774,7 @@ void CodeCache::print_internals() { int nmethodUnloaded = 0; int nmethodJava = 0; int nmethodNative = 0; - int maxCodeSize = 0; + int max_nm_size = 0; ResourceMark rm; CodeBlob *cb; @@ -798,13 +798,11 @@ void CodeCache::print_internals() { if(nm->is_not_entrant()) { nmethodNotEntrant++; } if(nm->is_zombie()) { nmethodZombie++; } if(nm->is_unloaded()) { nmethodUnloaded++; } - if(nm->is_native_method()) { nmethodNative++; } + if(nm->method() != NULL && nm->is_native_method()) { nmethodNative++; } if(nm->method() != NULL && nm->is_java_method()) { nmethodJava++; - if (nm->insts_size() > maxCodeSize) { - maxCodeSize = nm->insts_size(); - } + max_nm_size = MAX2(max_nm_size, nm->size()); } } else if (cb->is_runtime_stub()) { runtimeStubCount++; @@ -820,18 +818,19 @@ void CodeCache::print_internals() { } int bucketSize = 512; - int bucketLimit = maxCodeSize / bucketSize + 1; + int bucketLimit = max_nm_size / bucketSize + 1; int *buckets = NEW_C_HEAP_ARRAY(int, bucketLimit, mtCode); - memset(buckets,0,sizeof(int) * bucketLimit); + memset(buckets, 0, sizeof(int) * bucketLimit); for (cb = first(); cb != NULL; cb = next(cb)) { if (cb->is_nmethod()) { nmethod* nm = (nmethod*)cb; if(nm->is_java_method()) { - buckets[nm->insts_size() / bucketSize]++; - } + buckets[nm->size() / bucketSize]++; + } } } + tty->print_cr("Code Cache Entries (total of %d)",total); tty->print_cr("-------------------------------------------------"); tty->print_cr("nmethods: %d",nmethodCount); @@ -858,6 +857,7 @@ void CodeCache::print_internals() { } FREE_C_HEAP_ARRAY(int, buckets, mtCode); + print_memory_overhead(); } #endif // !PRODUCT diff --git a/hotspot/src/share/vm/code/codeCache.hpp b/hotspot/src/share/vm/code/codeCache.hpp index e190b11ae7e..f9f656cc35a 100644 --- a/hotspot/src/share/vm/code/codeCache.hpp +++ b/hotspot/src/share/vm/code/codeCache.hpp @@ -58,12 +58,13 @@ class CodeCache : AllStatic { static bool _needs_cache_clean; static nmethod* _scavenge_root_nmethods; // linked via nm->scavenge_root_link() - static void verify_if_often() PRODUCT_RETURN; - static void mark_scavenge_root_nmethods() PRODUCT_RETURN; static void verify_perm_nmethods(CodeBlobClosure* f_or_null) PRODUCT_RETURN; static int _codemem_full_count; + static size_t bytes_allocated_in_freelist() { return _heap->allocated_in_freelist(); } + static int allocated_segments() { return _heap->allocated_segments(); } + static size_t freelist_length() { return _heap->freelist_length(); } public: @@ -78,7 +79,6 @@ class CodeCache : AllStatic { static int alignment_unit(); // guaranteed alignment of all CodeBlobs static int alignment_offset(); // guaranteed offset of first CodeBlob byte within alignment unit (i.e., allocation header) static void free(CodeBlob* cb); // frees a CodeBlob - static void flush(); // flushes all CodeBlobs static bool contains(void *p); // returns whether p is included static void blobs_do(void f(CodeBlob* cb)); // iterates over all CodeBlobs static void blobs_do(CodeBlobClosure* f); // iterates over all CodeBlobs @@ -150,6 +150,7 @@ class CodeCache : AllStatic { // Printing/debugging static void print(); // prints summary static void print_internals(); + static void print_memory_overhead(); static void verify(); // verifies the code cache static void print_trace(const char* event, CodeBlob* cb, int size = 0) PRODUCT_RETURN; static void print_summary(outputStream* st, bool detailed = true); // Prints a summary of the code cache usage diff --git a/hotspot/src/share/vm/memory/heap.cpp b/hotspot/src/share/vm/memory/heap.cpp index a241af2eee9..db0105fb3a1 100644 --- a/hotspot/src/share/vm/memory/heap.cpp +++ b/hotspot/src/share/vm/memory/heap.cpp @@ -43,6 +43,7 @@ CodeHeap::CodeHeap() { _next_segment = 0; _freelist = NULL; _freelist_segments = 0; + _freelist_length = 0; } @@ -53,7 +54,7 @@ void CodeHeap::mark_segmap_as_free(size_t beg, size_t end) { address p = (address)_segmap.low() + beg; address q = (address)_segmap.low() + end; // initialize interval - while (p < q) *p++ = 0xFF; + while (p < q) *p++ = free_sentinel; } @@ -67,7 +68,7 @@ void CodeHeap::mark_segmap_as_used(size_t beg, size_t end) { int i = 0; while (p < q) { *p++ = i++; - if (i == 0xFF) i = 1; + if (i == free_sentinel) i = 1; } } @@ -139,11 +140,6 @@ bool CodeHeap::reserve(size_t reserved_size, size_t committed_size, } -void CodeHeap::release() { - Unimplemented(); -} - - bool CodeHeap::expand_by(size_t size) { // expand _memory space size_t dm = align_to_page_size(_memory.committed_size() + size) - _memory.committed_size(); @@ -157,8 +153,8 @@ bool CodeHeap::expand_by(size_t size) { assert(_number_of_reserved_segments >= _number_of_committed_segments, "just checking"); // expand _segmap space size_t ds = align_to_page_size(_number_of_committed_segments) - _segmap.committed_size(); - if (ds > 0) { - if (!_segmap.expand_by(ds)) return false; + if ((ds > 0) && !_segmap.expand_by(ds)) { + return false; } assert(_segmap.committed_size() >= (size_t) _number_of_committed_segments, "just checking"); // initialize additional segmap entries @@ -167,12 +163,6 @@ bool CodeHeap::expand_by(size_t size) { return true; } - -void CodeHeap::shrink_by(size_t size) { - Unimplemented(); -} - - void CodeHeap::clear() { _next_segment = 0; mark_segmap_as_free(0, _number_of_committed_segments); @@ -180,26 +170,23 @@ void CodeHeap::clear() { void* CodeHeap::allocate(size_t instance_size, bool is_critical) { - size_t number_of_segments = size_to_segments(instance_size + sizeof(HeapBlock)); + size_t number_of_segments = size_to_segments(instance_size + header_size()); assert(segments_to_size(number_of_segments) >= sizeof(FreeBlock), "not enough room for FreeList"); // First check if we can satisfy request from freelist - debug_only(verify()); + NOT_PRODUCT(verify()); HeapBlock* block = search_freelist(number_of_segments, is_critical); - debug_only(if (VerifyCodeCacheOften) verify()); + NOT_PRODUCT(verify()); + if (block != NULL) { assert(block->length() >= number_of_segments && block->length() < number_of_segments + CodeCacheMinBlockLength, "sanity check"); assert(!block->free(), "must be marked free"); -#ifdef ASSERT - memset((void *)block->allocated_space(), badCodeHeapNewVal, instance_size); -#endif + DEBUG_ONLY(memset((void*)block->allocated_space(), badCodeHeapNewVal, instance_size)); return block->allocated_space(); } // Ensure minimum size for allocation to the heap. - if (number_of_segments < CodeCacheMinBlockLength) { - number_of_segments = CodeCacheMinBlockLength; - } + number_of_segments = MAX2((int)CodeCacheMinBlockLength, (int)number_of_segments); if (!is_critical) { // Make sure the allocation fits in the unallocated heap without using @@ -215,9 +202,7 @@ void* CodeHeap::allocate(size_t instance_size, bool is_critical) { HeapBlock* b = block_at(_next_segment); b->initialize(number_of_segments); _next_segment += number_of_segments; -#ifdef ASSERT - memset((void *)b->allocated_space(), badCodeHeapNewVal, instance_size); -#endif + DEBUG_ONLY(memset((void *)b->allocated_space(), badCodeHeapNewVal, instance_size)); return b->allocated_space(); } else { return NULL; @@ -230,28 +215,56 @@ void CodeHeap::deallocate(void* p) { // Find start of HeapBlock HeapBlock* b = (((HeapBlock *)p) - 1); assert(b->allocated_space() == p, "sanity check"); -#ifdef ASSERT - memset((void *)b->allocated_space(), - badCodeHeapFreeVal, - segments_to_size(b->length()) - sizeof(HeapBlock)); -#endif + DEBUG_ONLY(memset((void *)b->allocated_space(), badCodeHeapFreeVal, + segments_to_size(b->length()) - sizeof(HeapBlock))); add_to_freelist(b); - - debug_only(if (VerifyCodeCacheOften) verify()); + NOT_PRODUCT(verify()); } - +/** + * Uses segment map to find the the start (header) of a nmethod. This works as follows: + * The memory of the code cache is divided into 'segments'. The size of a segment is + * determined by -XX:CodeCacheSegmentSize=XX. Allocation in the code cache can only + * happen at segment boundaries. A pointer in the code cache can be mapped to a segment + * by calling segment_for(addr). Each time memory is requested from the code cache, + * the segmap is updated accordingly. See the following example, which illustrates the + * state of code cache and the segment map: (seg -> segment, nm ->nmethod) + * + * code cache segmap + * ----------- --------- + * seg 1 | nm 1 | -> | 0 | + * seg 2 | nm 1 | -> | 1 | + * ... | nm 1 | -> | .. | + * seg m | nm 2 | -> | 0 | + * seg m+1 | nm 2 | -> | 1 | + * ... | nm 2 | -> | 2 | + * ... | nm 2 | -> | .. | + * ... | nm 2 | -> | 0xFE | + * seg m+n | nm 2 | -> | 1 | + * ... | nm 2 | -> | | + * + * A value of '0' in the segmap indicates that this segment contains the beginning of + * an nmethod. Let's walk through a simple example: If we want to find the start of + * an nmethod that falls into seg 2, we read the value of the segmap[2]. The value + * is an offset that points to the segment that contains the start of the nmethod. + * Another example: If we want to get the start of nm 2, and we happen to get a pointer + * that points to seg m+n, we first read seg[n+m], which returns '1'. So we have to + * do one more read of the segmap[m+n-1] to finally get the segment header. + */ void* CodeHeap::find_start(void* p) const { if (!contains(p)) { return NULL; } - size_t i = segment_for(p); - address b = (address)_segmap.low(); - if (b[i] == 0xFF) { + size_t seg_idx = segment_for(p); + address seg_map = (address)_segmap.low(); + if (is_segment_unused(seg_map[seg_idx])) { return NULL; } - while (b[i] > 0) i -= (int)b[i]; - HeapBlock* h = block_at(i); + while (seg_map[seg_idx] > 0) { + seg_idx -= (int)seg_map[seg_idx]; + } + + HeapBlock* h = block_at(seg_idx); if (h->free()) { return NULL; } @@ -272,7 +285,7 @@ size_t CodeHeap::alignment_offset() const { } // Finds the next free heapblock. If the current one is free, that it returned -void* CodeHeap::next_free(HeapBlock *b) const { +void* CodeHeap::next_free(HeapBlock* b) const { // Since free blocks are merged, there is max. on free block // between two used ones if (b != NULL && b->free()) b = next_block(b); @@ -287,7 +300,7 @@ HeapBlock* CodeHeap::first_block() const { return NULL; } -HeapBlock *CodeHeap::block_start(void *q) const { +HeapBlock* CodeHeap::block_start(void* q) const { HeapBlock* b = (HeapBlock*)find_start(q); if (b == NULL) return NULL; return b - 1; @@ -312,6 +325,10 @@ size_t CodeHeap::max_capacity() const { return _memory.reserved_size(); } +int CodeHeap::allocated_segments() const { + return (int)_next_segment; +} + size_t CodeHeap::allocated_capacity() const { // size of used heap - size on freelist return segments_to_size(_next_segment - _freelist_segments); @@ -325,7 +342,7 @@ size_t CodeHeap::heap_unallocated_capacity() const { // Free list management -FreeBlock *CodeHeap::following_block(FreeBlock *b) { +FreeBlock* CodeHeap::following_block(FreeBlock *b) { return (FreeBlock*)(((address)b) + _segment_size * b->length()); } @@ -343,7 +360,7 @@ void CodeHeap::insert_after(FreeBlock* a, FreeBlock* b) { } // Try to merge this block with the following block -void CodeHeap::merge_right(FreeBlock *a) { +bool CodeHeap::merge_right(FreeBlock* a) { assert(a->free(), "must be a free block"); if (following_block(a) == a->link()) { assert(a->link() != NULL && a->link()->free(), "must be free too"); @@ -353,13 +370,20 @@ void CodeHeap::merge_right(FreeBlock *a) { // Update find_start map size_t beg = segment_for(a); mark_segmap_as_used(beg, beg + a->length()); + _freelist_length--; + return true; } + return false; } -void CodeHeap::add_to_freelist(HeapBlock *a) { + +void CodeHeap::add_to_freelist(HeapBlock* a) { FreeBlock* b = (FreeBlock*)a; + _freelist_length++; + assert(b != _freelist, "cannot be removed twice"); + // Mark as free and update free space count _freelist_segments += b->length(); b->set_free(); @@ -371,95 +395,96 @@ void CodeHeap::add_to_freelist(HeapBlock *a) { return; } - // Scan for right place to put into list. List - // is sorted by increasing addresses - FreeBlock* prev = NULL; - FreeBlock* cur = _freelist; - while(cur != NULL && cur < b) { - assert(prev == NULL || prev < cur, "must be ordered"); - prev = cur; - cur = cur->link(); - } - - assert( (prev == NULL && b < _freelist) || - (prev < b && (cur == NULL || b < cur)), "list must be ordered"); - - if (prev == NULL) { + // Since the freelist is ordered (smaller addresses -> larger addresses) and the + // element we want to insert into the freelist has a smaller address than the first + // element, we can simply add 'b' as the first element and we are done. + if (b < _freelist) { // Insert first in list b->set_link(_freelist); _freelist = b; merge_right(_freelist); - } else { - insert_after(prev, b); + return; } + + // Scan for right place to put into list. List + // is sorted by increasing addresses + FreeBlock* prev = _freelist; + FreeBlock* cur = _freelist->link(); + while(cur != NULL && cur < b) { + assert(prev < cur, "Freelist must be ordered"); + prev = cur; + cur = cur->link(); + } + assert((prev < b) && (cur == NULL || b < cur), "free-list must be ordered"); + insert_after(prev, b); } -// Search freelist for an entry on the list with the best fit -// Return NULL if no one was found +/** + * Search freelist for an entry on the list with the best fit. + * @return NULL, if no one was found + */ FreeBlock* CodeHeap::search_freelist(size_t length, bool is_critical) { - FreeBlock *best_block = NULL; - FreeBlock *best_prev = NULL; - size_t best_length = 0; + FreeBlock* found_block = NULL; + FreeBlock* found_prev = NULL; + size_t found_length = 0; - // Search for smallest block which is bigger than length - FreeBlock *prev = NULL; - FreeBlock *cur = _freelist; + FreeBlock* prev = NULL; + FreeBlock* cur = _freelist; + const size_t critical_boundary = (size_t)high_boundary() - CodeCacheMinimumFreeSpace; + + // Search for first block that fits while(cur != NULL) { - size_t l = cur->length(); - if (l >= length && (best_block == NULL || best_length > l)) { - + if (cur->length() >= length) { // Non critical allocations are not allowed to use the last part of the code heap. - if (!is_critical) { - // Make sure the end of the allocation doesn't cross into the last part of the code heap - if (((size_t)cur + length) > ((size_t)high_boundary() - CodeCacheMinimumFreeSpace)) { - // the freelist is sorted by address - if one fails, all consecutive will also fail. - break; - } + // Make sure the end of the allocation doesn't cross into the last part of the code heap. + if (!is_critical && (((size_t)cur + length) > critical_boundary)) { + // The freelist is sorted by address - if one fails, all consecutive will also fail. + break; } + // Remember block, its previous element, and its length + found_block = cur; + found_prev = prev; + found_length = found_block->length(); - // Remember best block, its previous element, and its length - best_block = cur; - best_prev = prev; - best_length = best_block->length(); + break; } - // Next element in list prev = cur; cur = cur->link(); } - if (best_block == NULL) { + if (found_block == NULL) { // None found return NULL; } - assert((best_prev == NULL && _freelist == best_block ) || - (best_prev != NULL && best_prev->link() == best_block), "sanity check"); - // Exact (or at least good enough) fit. Remove from list. // Don't leave anything on the freelist smaller than CodeCacheMinBlockLength. - if (best_length < length + CodeCacheMinBlockLength) { - length = best_length; - if (best_prev == NULL) { - assert(_freelist == best_block, "sanity check"); + if (found_length - length < CodeCacheMinBlockLength) { + _freelist_length--; + length = found_length; + if (found_prev == NULL) { + assert(_freelist == found_block, "sanity check"); _freelist = _freelist->link(); } else { + assert((found_prev->link() == found_block), "sanity check"); // Unmap element - best_prev->set_link(best_block->link()); + found_prev->set_link(found_block->link()); } } else { // Truncate block and return a pointer to the following block - best_block->set_length(best_length - length); - best_block = following_block(best_block); // Set used bit and length on new block - size_t beg = segment_for(best_block); + found_block->set_length(found_length - length); + found_block = following_block(found_block); + + size_t beg = segment_for(found_block); mark_segmap_as_used(beg, beg + length); - best_block->set_length(length); + found_block->set_length(length); } - best_block->set_used(); + found_block->set_used(); _freelist_segments -= length; - return best_block; + return found_block; } //---------------------------------------------------------------------------- @@ -471,33 +496,34 @@ void CodeHeap::print() { tty->print_cr("The Heap"); } -#endif - void CodeHeap::verify() { - // Count the number of blocks on the freelist, and the amount of space - // represented. - int count = 0; - size_t len = 0; - for(FreeBlock* b = _freelist; b != NULL; b = b->link()) { - len += b->length(); - count++; - } + if (VerifyCodeCache) { + size_t len = 0; + int count = 0; + for(FreeBlock* b = _freelist; b != NULL; b = b->link()) { + len += b->length(); + count++; + // Check if we have merged all free blocks + assert(merge_right(b) == false, "Missed merging opportunity"); + } + // Verify that freelist contains the right amount of free space + assert(len == _freelist_segments, "wrong freelist"); - // Verify that freelist contains the right amount of free space - // guarantee(len == _freelist_segments, "wrong freelist"); + for(HeapBlock* h = first_block(); h != NULL; h = next_block(h)) { + if (h->free()) count--; + } + // Verify that the freelist contains the same number of blocks + // than free blocks found on the full list. + assert(count == 0, "missing free blocks"); - // Verify that the number of free blocks is not out of hand. - static int free_block_threshold = 10000; - if (count > free_block_threshold) { - warning("CodeHeap: # of free blocks > %d", free_block_threshold); - // Double the warning limit - free_block_threshold *= 2; + // Verify that the number of free blocks is not out of hand. + static int free_block_threshold = 10000; + if (count > free_block_threshold) { + warning("CodeHeap: # of free blocks > %d", free_block_threshold); + // Double the warning limit + free_block_threshold *= 2; + } } - - // Verify that the freelist contains the same number of free blocks that is - // found on the full list. - for(HeapBlock *h = first_block(); h != NULL; h = next_block(h)) { - if (h->free()) count--; - } - // guarantee(count == 0, "missing free blocks"); } + +#endif diff --git a/hotspot/src/share/vm/memory/heap.hpp b/hotspot/src/share/vm/memory/heap.hpp index e271d1be2fc..849931ee70b 100644 --- a/hotspot/src/share/vm/memory/heap.hpp +++ b/hotspot/src/share/vm/memory/heap.hpp @@ -92,24 +92,28 @@ class CodeHeap : public CHeapObj { FreeBlock* _freelist; size_t _freelist_segments; // No. of segments in freelist + int _freelist_length; + + enum { free_sentinel = 0xFF }; // Helper functions size_t size_to_segments(size_t size) const { return (size + _segment_size - 1) >> _log2_segment_size; } size_t segments_to_size(size_t number_of_segments) const { return number_of_segments << _log2_segment_size; } size_t segment_for(void* p) const { return ((char*)p - _memory.low()) >> _log2_segment_size; } + bool is_segment_unused(int val) const { return val == free_sentinel; } HeapBlock* block_at(size_t i) const { return (HeapBlock*)(_memory.low() + (i << _log2_segment_size)); } void mark_segmap_as_free(size_t beg, size_t end); void mark_segmap_as_used(size_t beg, size_t end); // Freelist management helpers - FreeBlock* following_block(FreeBlock *b); + FreeBlock* following_block(FreeBlock* b); void insert_after(FreeBlock* a, FreeBlock* b); - void merge_right (FreeBlock* a); + bool merge_right (FreeBlock* a); // Toplevel freelist management - void add_to_freelist(HeapBlock *b); + void add_to_freelist(HeapBlock* b); FreeBlock* search_freelist(size_t length, bool is_critical); // Iteration helpers @@ -120,20 +124,18 @@ class CodeHeap : public CHeapObj { // to perform additional actions on creation of executable code void on_code_mapping(char* base, size_t size); + void clear(); // clears all heap contents public: CodeHeap(); // Heap extents bool reserve(size_t reserved_size, size_t committed_size, size_t segment_size); - void release(); // releases all allocated memory bool expand_by(size_t size); // expands committed memory by size - void shrink_by(size_t size); // shrinks committed memory by size - void clear(); // clears all heap contents // Memory allocation void* allocate (size_t size, bool is_critical); // allocates a block of size or returns NULL - void deallocate(void* p); // deallocates a block + void deallocate(void* p); // deallocates a block // Attributes char* low_boundary() const { return _memory.low_boundary (); } @@ -141,12 +143,13 @@ class CodeHeap : public CHeapObj { char* high_boundary() const { return _memory.high_boundary(); } bool contains(const void* p) const { return low_boundary() <= p && p < high(); } - void* find_start(void* p) const; // returns the block containing p or NULL - size_t alignment_unit() const; // alignment of any block - size_t alignment_offset() const; // offset of first byte of any block, within the enclosing alignment unit - static size_t header_size(); // returns the header size for each heap block + void* find_start(void* p) const; // returns the block containing p or NULL + size_t alignment_unit() const; // alignment of any block + size_t alignment_offset() const; // offset of first byte of any block, within the enclosing alignment unit + static size_t header_size(); // returns the header size for each heap block - // Iteration + size_t allocated_in_freelist() const { return _freelist_segments * CodeCacheSegmentSize; } + int freelist_length() const { return _freelist_length; } // number of elements in the freelist // returns the first block or NULL void* first() const { return next_free(first_block()); } @@ -156,6 +159,7 @@ class CodeHeap : public CHeapObj { // Statistics size_t capacity() const; size_t max_capacity() const; + int allocated_segments() const; size_t allocated_capacity() const; size_t unallocated_capacity() const { return max_capacity() - allocated_capacity(); } @@ -164,7 +168,7 @@ private: public: // Debugging - void verify(); + void verify() PRODUCT_RETURN; void print() PRODUCT_RETURN; }; diff --git a/hotspot/src/share/vm/runtime/arguments.cpp b/hotspot/src/share/vm/runtime/arguments.cpp index d6d8583d697..14ff5167cb6 100644 --- a/hotspot/src/share/vm/runtime/arguments.cpp +++ b/hotspot/src/share/vm/runtime/arguments.cpp @@ -2407,6 +2407,8 @@ bool Arguments::check_vm_args_consistency() { status &= verify_interval(NmethodSweepFraction, 1, ReservedCodeCacheSize/K, "NmethodSweepFraction"); status &= verify_interval(NmethodSweepActivity, 0, 2000, "NmethodSweepActivity"); + status &= verify_interval(CodeCacheMinBlockLength, 1, 100, "CodeCacheMinBlockLength"); + status &= verify_interval(CodeCacheSegmentSize, 1, 1024, "CodeCacheSegmentSize"); // TieredCompilation needs at least 2 compiler threads. const int num_min_compiler_threads = (TieredCompilation && (TieredStopAtLevel >= CompLevel_full_optimization)) ? 2 : 1; diff --git a/hotspot/src/share/vm/runtime/globals.hpp b/hotspot/src/share/vm/runtime/globals.hpp index 30f7007066d..945e8ea667e 100644 --- a/hotspot/src/share/vm/runtime/globals.hpp +++ b/hotspot/src/share/vm/runtime/globals.hpp @@ -814,8 +814,8 @@ class CommandLineFlags { product(bool, PrintOopAddress, false, \ "Always print the location of the oop") \ \ - notproduct(bool, VerifyCodeCacheOften, false, \ - "Verify compiled-code cache often") \ + notproduct(bool, VerifyCodeCache, false, \ + "Verify code cache on memory allocation/deallocation") \ \ develop(bool, ZapDeadCompiledLocals, false, \ "Zap dead locals in compiler frames") \ @@ -3296,8 +3296,8 @@ class CommandLineFlags { "disable this feature") \ \ /* code cache parameters */ \ - /* ppc64 has large code-entry alignment. */ \ - develop(uintx, CodeCacheSegmentSize, 64 PPC64_ONLY(+64), \ + /* ppc64/tiered compilation has large code-entry alignment. */ \ + develop(uintx, CodeCacheSegmentSize, 64 PPC64_ONLY(+64) NOT_PPC64(TIERED_ONLY(+64)),\ "Code cache segment size (in bytes) - smallest unit of " \ "allocation") \ \ From 16962804f32708b10babc1f40f2bc12a805830a1 Mon Sep 17 00:00:00 2001 From: Jan Lahoda Date: Fri, 7 Mar 2014 13:35:56 +0100 Subject: [PATCH 041/116] 8034854: outer_class_info_index of synthetic class is not zero Auxiliary synthetic anonymous classes should not have an outer class specified in the InnerClasses attribute. Reviewed-by: vromero, jjg, abuckley --- .../com/sun/tools/javac/jvm/ClassWriter.java | 2 +- .../InnerClasses/SyntheticClasses.java | 97 +++++++++++++++++++ 2 files changed, 98 insertions(+), 1 deletion(-) create mode 100644 langtools/test/tools/javac/classfiles/InnerClasses/SyntheticClasses.java diff --git a/langtools/src/share/classes/com/sun/tools/javac/jvm/ClassWriter.java b/langtools/src/share/classes/com/sun/tools/javac/jvm/ClassWriter.java index 5e7293d74d3..13e910ce559 100644 --- a/langtools/src/share/classes/com/sun/tools/javac/jvm/ClassWriter.java +++ b/langtools/src/share/classes/com/sun/tools/javac/jvm/ClassWriter.java @@ -1037,7 +1037,7 @@ public class ClassWriter extends ClassFile { } databuf.appendChar(pool.get(inner)); databuf.appendChar( - inner.owner.kind == TYP ? pool.get(inner.owner) : 0); + inner.owner.kind == TYP && !inner.name.isEmpty() ? pool.get(inner.owner) : 0); databuf.appendChar( !inner.name.isEmpty() ? pool.get(inner.name) : 0); databuf.appendChar(flags); diff --git a/langtools/test/tools/javac/classfiles/InnerClasses/SyntheticClasses.java b/langtools/test/tools/javac/classfiles/InnerClasses/SyntheticClasses.java new file mode 100644 index 00000000000..58a8f9aa186 --- /dev/null +++ b/langtools/test/tools/javac/classfiles/InnerClasses/SyntheticClasses.java @@ -0,0 +1,97 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/** @test + * @bug 8034854 + * @summary Verify that the InnerClasses attribute has outer_class_info_index zero if it has + * inner_name_index zero (for synthetic classes) + * @compile SyntheticClasses.java + * @run main SyntheticClasses + */ + +import java.io.*; +import java.util.*; +import com.sun.tools.classfile.*; + +public class SyntheticClasses { + + public static void main(String[] args) throws IOException, ConstantPoolException { + new SyntheticClasses().run(); + } + + private void run() throws IOException, ConstantPoolException { + File testClasses = new File(System.getProperty("test.classes")); + for (File classFile : testClasses.listFiles()) { + ClassFile cf = ClassFile.read(classFile); + if (cf.getName().matches(".*\\$[0-9]+")) { + EnclosingMethod_attribute encl = + (EnclosingMethod_attribute) cf.getAttribute(Attribute.EnclosingMethod); + if (encl != null) { + if (encl.method_index != 0) + throw new IllegalStateException("Invalid EnclosingMethod.method_index: " + + encl.method_index + "."); + } + } + InnerClasses_attribute attr = + (InnerClasses_attribute) cf.getAttribute(Attribute.InnerClasses); + if (attr != null) { + for (InnerClasses_attribute.Info info : attr.classes) { + if (cf.major_version < 51) + throw new IllegalStateException(); + if (info.inner_name_index == 0 && info.outer_class_info_index != 0) + throw new IllegalStateException("Invalid outer_class_info_index=" + + info.outer_class_info_index + + "; inner_name_index=" + + info.inner_name_index + "."); + } + } + } + } +} + +class SyntheticConstructorAccessTag { + + private static class A { + private A(){} + } + + public void test() { + new A(); + } +} + +class SyntheticEnumMapping { + private int convert(E e) { + switch (e) { + case A: return 0; + default: return -1; + } + } + enum E { A } +} + +interface SyntheticAssertionsDisabled { + public default void test() { + assert false; + } +} From 18c3f81053e9b26565510e8cc5ecc11712b22c3c Mon Sep 17 00:00:00 2001 From: Erik Joelsson Date: Fri, 7 Mar 2014 14:56:08 +0100 Subject: [PATCH 042/116] 8036611: Cleanup of handling of properties and other java resources in the build Reviewed-by: tbell, ihse --- make/common/JavaCompilation.gmk | 45 +++++++++++++++++++++++---------- 1 file changed, 31 insertions(+), 14 deletions(-) diff --git a/make/common/JavaCompilation.gmk b/make/common/JavaCompilation.gmk index c2dd54b2be5..5eed2ff701c 100644 --- a/make/common/JavaCompilation.gmk +++ b/make/common/JavaCompilation.gmk @@ -336,7 +336,20 @@ endef # Previously this was inconsistently done in different repositories. # This is the new clean standard. Though it is to be superseded by # a standard annotation processor from with sjavac. -define add_file_to_copy_and_clean +# +# The sed expression does this: +# 1. Add a backslash before any :, = or ! that do not have a backslash already. +# 2. Apply the file unicode2x.sed which does a whole bunch of \u00XX to \xXX +# conversions. +# 3. Delete all lines starting with #. +# 4. Delete empty lines. +# 5. Append lines ending with \ with the next line. +# 6. Remove leading and trailing white space. +# 7. Replace the first \= with just =. +# 8. Finally it's all sorted to create a stable output. +# +# It is assumed that = is the character used for separating names and values. +define add_file_to_clean # param 1 = BUILD_MYPACKAGE # parma 2 = The source file to copy and clean. $2_TARGET:=$2 @@ -345,7 +358,8 @@ define add_file_to_copy_and_clean # Now we can setup the depency that will trigger the copying. $$($1_BIN)$$($2_TARGET) : $2 $(MKDIR) -p $$(@D) - $(CAT) $$< | $(SED) -e 's/\([^\\]\):/\1\\:/g' -e 's/\([^\\]\)=/\1\\=/g' -e 's/#.*/#/g' \ + $(CAT) $$< | $(SED) -e 's/\([^\\]\):/\1\\:/g' -e 's/\([^\\]\)=/\1\\=/g' \ + -e 's/\([^\\]\)!/\1\\!/g' -e 's/#.*/#/g' \ | $(SED) -f "$(SRC_ROOT)/make/common/support/unicode2x.sed" \ | $(SED) -e '/^#/d' -e '/^$$$$/d' \ -e :a -e '/\\$$$$/N; s/\\\n//; ta' \ @@ -376,8 +390,9 @@ define SetupJavaCompilation # INCLUDES:=myapp.foo means will only compile java files in myapp.foo or any of its sub-packages. # EXCLUDES:=myapp.foo means will do not compile java files in myapp.foo or any of its sub-packages. # COPY:=.prp means copy all prp files to the corresponding package in BIN. - # CLEAN:=.properties means copy and clean all properties file to the corresponding package in BIN. # COPY_FILES:=myapp/foo/setting.txt means copy this file over to the package myapp/foo + # CLEAN:=.properties means copy and clean all properties file to the corresponding package in BIN. + # CLEAN_FILES:=myapp/foo/setting.txt means clean this file over to the package myapp/foo # SRCZIP:=Create a src.zip based on the found sources and copied files. # INCLUDE_FILES:="com/sun/SolarisFoobar.java" means only compile this file! # EXCLUDE_FILES:="com/sun/SolarisFoobar.java" means do not compile this particular file! @@ -437,7 +452,7 @@ define SetupJavaCompilation endif # Find all files to be copied from source to bin. - ifneq (,$$($1_COPY)) + ifneq (,$$($1_COPY)$$($1_COPY_FILES)) # Search for all files to be copied. $1_ALL_COPIES := $$(filter $$(addprefix %,$$($1_COPY)),$$($1_ALL_SRCS)) # Copy these explicitly @@ -452,20 +467,22 @@ define SetupJavaCompilation ifneq (,$$($1_EXCLUDE_FILES)) $1_ALL_COPIES := $$(filter-out $$($1_EXCLUDE_FILES_PATTERN),$$($1_ALL_COPIES)) endif - # All files below META-INF are always copied. - $1_ALL_COPIES += $$(filter $$(addsuffix /META-INF%,$$($1_SRC)),$$($1_ALL_SRCS)) - ifneq (,$$($1_ALL_COPIES)) - # Yep, there are files to be copied! - $1_ALL_COPY_TARGETS:= - $$(foreach i,$$($1_ALL_COPIES),$$(eval $$(call add_file_to_copy,$1,$$i))) - # Now we can depend on $$($1_ALL_COPY_TARGETS) to copy all files! - endif + endif + # All files below META-INF are always copied. + $1_ALL_COPIES += $$(filter $$(addsuffix /META-INF%,$$($1_SRC)),$$($1_ALL_SRCS)) + ifneq (,$$($1_ALL_COPIES)) + # Yep, there are files to be copied! + $1_ALL_COPY_TARGETS:= + $$(foreach i,$$($1_ALL_COPIES),$$(eval $$(call add_file_to_copy,$1,$$i))) + # Now we can depend on $$($1_ALL_COPY_TARGETS) to copy all files! endif # Find all property files to be copied and cleaned from source to bin. - ifneq (,$$($1_CLEAN)) + ifneq (,$$($1_CLEAN)$$($1_CLEAN_FILES)) # Search for all files to be copied. $1_ALL_CLEANS := $$(filter $$(addprefix %,$$($1_CLEAN)),$$($1_ALL_SRCS)) + # Clean these explicitly + $1_ALL_CLEANS += $$($1_CLEAN_FILES) # Copy and clean must also respect filters. ifneq (,$$($1_INCLUDES)) $1_ALL_CLEANS := $$(filter $$($1_SRC_INCLUDES),$$($1_ALL_CLEANS)) @@ -479,7 +496,7 @@ define SetupJavaCompilation ifneq (,$$($1_ALL_CLEANS)) # Yep, there are files to be copied and cleaned! $1_ALL_COPY_CLEAN_TARGETS:= - $$(foreach i,$$($1_ALL_CLEANS),$$(eval $$(call add_file_to_copy_and_clean,$1,$$i))) + $$(foreach i,$$($1_ALL_CLEANS),$$(eval $$(call add_file_to_clean,$1,$$i))) # Now we can depend on $$($1_ALL_COPY_CLEAN_TARGETS) to copy all files! endif endif From d4486816f5a971dfb1721898ec6749c4b49de761 Mon Sep 17 00:00:00 2001 From: Erik Joelsson Date: Fri, 7 Mar 2014 14:57:08 +0100 Subject: [PATCH 043/116] 8036611: Cleanup of handling of properties and other java resources in the build Reviewed-by: tbell, ihse --- jaxp/make/BuildJaxp.gmk | 22 +++------------------- 1 file changed, 3 insertions(+), 19 deletions(-) diff --git a/jaxp/make/BuildJaxp.gmk b/jaxp/make/BuildJaxp.gmk index 7950b0cf8a1..57c184bc4ee 100644 --- a/jaxp/make/BuildJaxp.gmk +++ b/jaxp/make/BuildJaxp.gmk @@ -45,27 +45,11 @@ $(eval $(call SetupJavaCompiler,GENERATE_NEWBYTECODE_DEBUG, \ $(eval $(call SetupJavaCompilation,BUILD_JAXP, \ SETUP := GENERATE_NEWBYTECODE_DEBUG, \ SRC := $(JAXP_TOPDIR)/src, \ + CLEAN := .properties, \ BIN := $(JAXP_OUTPUTDIR)/classes, \ - SRCZIP := $(JAXP_OUTPUTDIR)/dist/lib/src.zip)) - -# Imitate the property cleaning mechanism in the old build. This will likely be replaced -# by the unified functionality in JavaCompilation.gmk, but keep it the same as old build -# for now, even though it actually breaks properties containing # in the value. -# Using nawk to avoid solaris sed. -$(JAXP_OUTPUTDIR)/classes/%.properties: $(JAXP_TOPDIR)/src/%.properties - $(MKDIR) -p $(@D) - $(RM) $@ $@.tmp - $(CAT) $< | LANG=C $(NAWK) '{ sub(/#.*$$/,"#"); print }' > $@.tmp - $(MV) $@.tmp $@ - -SRC_PROP_FILES := $(shell $(FIND) $(JAXP_TOPDIR)/src -name "*.properties") -TARGET_PROP_FILES := $(patsubst $(JAXP_TOPDIR)/src/%, $(JAXP_OUTPUTDIR)/classes/%, $(SRC_PROP_FILES)) - -$(eval $(call SetupArchive,ARCHIVE_JAXP, $(BUILD_JAXP) $(TARGET_PROP_FILES), \ - SRCS := $(JAXP_OUTPUTDIR)/classes, \ - SUFFIXES := .class .properties, \ + SRCZIP := $(JAXP_OUTPUTDIR)/dist/lib/src.zip, \ JAR := $(JAXP_OUTPUTDIR)/dist/lib/classes.jar)) -all: $(JAXP_OUTPUTDIR)/dist/lib/classes.jar $(JAXP_OUTPUTDIR)/dist/lib/src.zip +all: $(BUILD_JAXP) .PHONY: default all From 93e8215def82e58f5eb1d02ed2be9119f1d95840 Mon Sep 17 00:00:00 2001 From: Erik Joelsson Date: Fri, 7 Mar 2014 14:57:16 +0100 Subject: [PATCH 044/116] 8036611: Cleanup of handling of properties and other java resources in the build Reviewed-by: tbell, ihse --- jaxws/make/BuildJaxws.gmk | 28 ++-------------------------- 1 file changed, 2 insertions(+), 26 deletions(-) diff --git a/jaxws/make/BuildJaxws.gmk b/jaxws/make/BuildJaxws.gmk index 204dd47fb53..1c159965dd3 100644 --- a/jaxws/make/BuildJaxws.gmk +++ b/jaxws/make/BuildJaxws.gmk @@ -42,11 +42,10 @@ $(eval $(call SetupJavaCompiler,GENERATE_NEWBYTECODE_DEBUG, \ SERVER_DIR := $(SJAVAC_SERVER_DIR), \ SERVER_JVM := $(SJAVAC_SERVER_JAVA))) -# Dummy here is needed to trigger copying of META-INF $(eval $(call SetupJavaCompilation,BUILD_JAF, \ SETUP := GENERATE_NEWBYTECODE_DEBUG, \ SRC := $(JAXWS_TOPDIR)/src/share/jaf_classes, \ - COPY := "dummy", \ + CLEAN := .properties, \ BIN := $(JAXWS_OUTPUTDIR)/jaf_classes)) $(eval $(call SetupJavaCompilation,BUILD_JAXWS, \ @@ -57,6 +56,7 @@ $(eval $(call SetupJavaCompilation,BUILD_JAXWS, \ COPY_FILES := $(JAXWS_TOPDIR)/src/share/jaxws_classes/com/sun/tools/internal/xjc/runtime/JAXBContextFactory.java \ $(JAXWS_TOPDIR)/src/share/jaxws_classes/com/sun/tools/internal/xjc/runtime/ZeroOneBooleanAdapter.java \ $(JAXWS_TOPDIR)/src/share/jaxws_classes/com/sun/xml/internal/ws/assembler/jaxws-tubes-default.xml, \ + CLEAN := .properties, \ ADD_JAVAC_FLAGS = -Xbootclasspath/p:$(OUTPUT_ROOT)/jaxp/dist/lib/classes.jar)) $(JAXWS_OUTPUTDIR)/jaxws_classes/META-INF/services/com.sun.tools.internal.ws.wscompile.Plugin: \ @@ -73,30 +73,6 @@ $(JAXWS_OUTPUTDIR)/jaxws_classes/META-INF/services/com.sun.tools.internal.xjc.Pl BUILD_JAXWS += $(JAXWS_OUTPUTDIR)/jaxws_classes/META-INF/services/com.sun.tools.internal.ws.wscompile.Plugin \ $(JAXWS_OUTPUTDIR)/jaxws_classes/META-INF/services/com.sun.tools.internal.xjc.Plugin -# Imitate the property cleaning mechanism in the old build. This will likely be replaced -# by the unified functionality in JavaCompilation.gmk, but keep it the same as old build -# for now, even though it actually breaks properties containing # in the value. -# Using nawk to avoid solaris sed. -$(JAXWS_OUTPUTDIR)/jaxws_classes/%.properties: $(JAXWS_TOPDIR)/src/share/jaxws_classes/%.properties - $(MKDIR) -p $(@D) - $(RM) $@ $@.tmp - $(CAT) $< | LANG=C $(NAWK) '{ sub(/#.*$$/,"#"); print }' > $@.tmp - $(MV) $@.tmp $@ - -JAXWS_SRC_PROP_FILES := $(shell $(FIND) $(JAXWS_TOPDIR)/src/share/jaxws_classes -name "*.properties") -TARGET_PROP_FILES := $(patsubst $(JAXWS_TOPDIR)/src/share/jaxws_classes/%, \ - $(JAXWS_OUTPUTDIR)/jaxws_classes/%, $(JAXWS_SRC_PROP_FILES)) - -$(JAXWS_OUTPUTDIR)/jaf_classes/%.properties: $(JAXWS_TOPDIR)/src/share/jaf_classes/%.properties - $(MKDIR) -p $(@D) - $(RM) $@ $@.tmp - $(CAT) $< | LANG=C $(NAWK) '{ sub(/#.*$$/,"#"); print }' > $@.tmp - $(MV) $@.tmp $@ - -JAF_SRC_PROP_FILES := $(shell $(FIND) $(JAXWS_TOPDIR)/src/share/jaf_classes -name "*.properties") -TARGET_PROP_FILES += $(patsubst $(JAXWS_TOPDIR)/src/share/jaf_classes/%, \ - $(JAXWS_OUTPUTDIR)/jaf_classes/%, $(JAF_SRC_PROP_FILES)) - $(eval $(call SetupArchive,ARCHIVE_JAXWS, $(BUILD_JAXWS) $(BUILD_JAF) $(TARGET_PROP_FILES), \ SRCS := $(JAXWS_OUTPUTDIR)/jaxws_classes $(JAXWS_OUTPUTDIR)/jaf_classes, \ SUFFIXES := .class .properties .xsd .xml .java \ From 0a87e0cbbfafdbbff9c27e86f99f8ffa6c0cefe1 Mon Sep 17 00:00:00 2001 From: Erik Joelsson Date: Fri, 7 Mar 2014 15:02:55 +0100 Subject: [PATCH 045/116] 8036611: Cleanup of handling of properties and other java resources in the build Reviewed-by: tbell, ihse --- corba/make/CompileCorba.gmk | 8 +- corba/make/GensrcCorba.gmk | 30 +- .../stripproperties/StripPropertiesCorba.java | 288 ------------------ 3 files changed, 11 insertions(+), 315 deletions(-) delete mode 100644 corba/make/src/classes/build/tools/stripproperties/StripPropertiesCorba.java diff --git a/corba/make/CompileCorba.gmk b/corba/make/CompileCorba.gmk index f50d4ca4687..225258c2080 100644 --- a/corba/make/CompileCorba.gmk +++ b/corba/make/CompileCorba.gmk @@ -45,16 +45,18 @@ $(eval $(call SetupJavaCompilation,BUILD_CORBA, \ org/omg/PortableInterceptor/UNKNOWN.java \ com/sun/tools/corba/se/idl/ResourceBundleUtil.java \ com/sun/corba/se/impl/presentation/rmi/jndi.properties, \ - COPY := .prp LogStrings.properties, \ + COPY := .prp, \ + CLEAN := .properties, \ BIN := $(CORBA_OUTPUTDIR)/classes, \ JAR := $(CORBA_OUTPUTDIR)/dist/lib/classes.jar)) +# For the interim version, don't bother cleaning the properties. $(eval $(call SetupJavaCompilation,BUILD_INTERIM_CORBA, \ SETUP := GENERATE_OLDBYTECODE, \ SRC := $(BUILD_CORBA_SRC), \ EXCLUDES := $(BUILD_CORBA_EXCLUDES), \ EXCLUDE_FILES := $(BUILD_CORBA_EXCLUDE_FILES), \ - COPY := $(BUILD_CORBA_COPY), \ + COPY := $(BUILD_CORBA_COPY) $(BUILD_CORBA_CLEAN), \ BIN := $(CORBA_OUTPUTDIR)/interim_classes, \ JAR := $(INTERIM_CORBA_JAR))) @@ -63,7 +65,6 @@ $(eval $(call SetupJavaCompilation,BUILD_INTERIM_CORBA, \ $(eval $(call SetupZipArchive,ARCHIVE_CORBA_SRC, \ SRC := $(CORBA_TOPDIR)/src/share/classes $(CORBA_OUTPUTDIR)/gensrc, \ ZIP := $(CORBA_OUTPUTDIR)/dist/lib/src.zip)) - JAR := $(CORBA_OUTPUTDIR)/dist/lib/classes.jar)) ################################################################################ # Create bin.zip containing the corba specific binaries: orb.idl, ir.idl @@ -81,6 +82,5 @@ $(CORBA_OUTPUTDIR)/dist/lib/bin.zip: $(BIN_FILES) ################################################################################ - all: $(BUILD_CORBA) $(BUILD_INTERIM_CORBA) $(ARCHIVE_CORBA_SRC) \ $(CORBA_OUTPUTDIR)/dist/lib/bin.zip diff --git a/corba/make/GensrcCorba.gmk b/corba/make/GensrcCorba.gmk index 8dbf5102eda..4d078a56bb2 100644 --- a/corba/make/GensrcCorba.gmk +++ b/corba/make/GensrcCorba.gmk @@ -39,9 +39,6 @@ $(eval $(call SetupJavaCompilation,BUILD_TOOLS, \ SRC := $(CORBA_TOPDIR)/make/src/classes, \ BIN := $(CORBA_OUTPUTDIR)/tools_classes)) -TOOL_STRIPPROP_CMD := $(JAVA) -cp $(CORBA_OUTPUTDIR)/tools_classes \ - build.tools.stripproperties.StripPropertiesCorba - TOOL_LOGUTIL_CMD := $(JAVA) -cp $(CORBA_OUTPUTDIR)/tools_classes \ build.tools.logutil.MC @@ -230,27 +227,14 @@ $(eval $(call SetupIdlCompilation,BUILD_IDLS, \ $(BUILD_IDLS): $(BUILD_IDLJ) ################################################################################ -# Run stripproperties on all sunorb resource files. +# zh_HK is just a copy of zh_TW -STRIP_PROP_SRC_FILES := $(shell $(FIND) $(CORBA_TOPDIR)/src/share/classes -name "sunorb*.properties") -STRIP_PROP_FILES := $(patsubst $(CORBA_TOPDIR)/src/share/classes/%, $(CORBA_OUTPUTDIR)/classes/%, \ - $(STRIP_PROP_SRC_FILES)) -# Simple delivery of zh_HK properties files just copies zh_TW properties files -STRIP_PROP_SRC_FILE_ZH_TW := $(shell $(FIND) $(CORBA_TOPDIR)/src/share/classes -name "sunorb_zh_TW.properties") -STRIP_PROP_SRC_FILES += $(STRIP_PROP_SRC_FILE_ZH_TW) -STRIP_PROP_FILES += $(patsubst $(CORBA_TOPDIR)/src/share/classes/%_zh_TW.properties, \ - $(CORBA_OUTPUTDIR)/classes/%_zh_HK.properties, $(STRIP_PROP_SRC_FILE_ZH_TW)) -STRIP_PROP_CMDLINE := $(subst _SPACE_, $(SPACE), \ - $(join $(addprefix -clean_SPACE_, $(STRIP_PROP_SRC_FILES)), \ - $(addprefix _SPACE_, $(STRIP_PROP_FILES)))) - -$(CORBA_OUTPUTDIR)/_the.stripped_properties: $(STRIP_PROP_SRC_FILES) \ - $(BUILD_TOOLS) - $(MKDIR) -p $(sort $(dir $(STRIP_PROP_FILES))) - $(call ListPathsSafely,STRIP_PROP_CMDLINE,\n, >> $(CORBA_OUTPUTDIR)/_the.strip_prop.cmdline) - $(TOOL_STRIPPROP_CMD) @$(CORBA_OUTPUTDIR)/_the.strip_prop.cmdline - $(TOUCH) $@ +$(CORBA_OUTPUTDIR)/gensrc/com/sun/corba/se/impl/orbutil/resources/sunorb_zh_HK.properties: \ + $(CORBA_TOPDIR)/src/share/classes/com/sun/corba/se/impl/orbutil/resources/sunorb_zh_TW.properties + $(install-file) ################################################################################ -all: $(BUILD_IDLS) $(CORBA_OUTPUTDIR)/_the.stripped_properties $(LOGWRAPPER_TARGETS) +all: $(BUILD_IDLS) $(LOGWRAPPER_TARGETS) \ + $(CORBA_OUTPUTDIR)/gensrc/com/sun/corba/se/impl/orbutil/resources/sunorb_zh_HK.properties + diff --git a/corba/make/src/classes/build/tools/stripproperties/StripPropertiesCorba.java b/corba/make/src/classes/build/tools/stripproperties/StripPropertiesCorba.java deleted file mode 100644 index b5c7ecb253b..00000000000 --- a/corba/make/src/classes/build/tools/stripproperties/StripPropertiesCorba.java +++ /dev/null @@ -1,288 +0,0 @@ -/* - * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -package build.tools.stripproperties; - -import java.io.BufferedInputStream; -import java.io.BufferedWriter; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.FileOutputStream; -import java.io.OutputStream; -import java.io.OutputStreamWriter; -import java.io.IOException; -import java.io.InputStream; -import java.util.ArrayList; -import java.util.Enumeration; -import java.util.Iterator; -import java.util.List; -import java.util.Properties; - -/** - * Reads a properties file from standard input and writes an equivalent - * properties file without comments to standard output. - */ -public class StripPropertiesCorba { - - private static void error(String msg, Exception e) { - System.err.println("ERROR: stripproperties: " + msg); - if ( e != null ) { - System.err.println("EXCEPTION: " + e.toString()); - e.printStackTrace(); - } - } - - private static List infiles = new ArrayList(); - private static List outfiles = new ArrayList(); - - private static boolean parseOptions(String args[]) { - boolean ok = true; - - for ( int i = 0; i < args.length ; i++ ) { - if ( "-clean".equals(args[i]) && i+2 < args.length ) { - infiles.add(args[++i]); - outfiles.add(args[++i]); - } else if ( args[i].charAt(0)=='@') { - String filename = args[i].substring(1); - FileInputStream finput = null; - byte contents[] = null; - try { - finput = new FileInputStream(filename); - int byteCount = finput.available(); - if ( byteCount <= 0 ) { - error("The @file is empty", null); - ok = false; - } else { - contents = new byte[byteCount]; - int bytesRead = finput.read(contents); - if ( byteCount != bytesRead ) { - error("Cannot read all of @file", null); - ok = false; - } - } - } catch ( IOException e ) { - error("cannot open " + filename, e); - ok = false; - } - if ( finput != null ) { - try { - finput.close(); - } catch ( IOException e ) { - ok = false; - error("cannot close " + filename, e); - } - } - if ( ok && contents != null ) { - String tokens[] = (new String(contents)).split("\\s+"); - if ( tokens.length > 0 ) { - ok = parseOptions(tokens); - } - } - if ( !ok ) { - break; - } - } else { - infiles.add(args[i]); - outfiles.add(args[i]); - } - } - return ok; - } - - private static boolean stripFiles(List infiles, List outfiles) { - boolean ok = true; - Iterator inIter = infiles.iterator(); - Iterator outIter = outfiles.iterator(); - - for (; inIter.hasNext(); ) { - String infile = inIter.next(); - String outfile = outIter.next(); - - Properties prop = new Properties(); - InputStream in = null; - try { - in = new BufferedInputStream(new FileInputStream(infile)); - prop.load(in); - } catch ( FileNotFoundException e ) { - error("Cannot access file " + infile, e); - ok = false; - } catch ( IOException e ) { - error("IO exception processing file " + infile, e); - ok = false; - } - if ( in != null ) { - try { - in.close(); - } catch ( IOException e ) { - error("IO exception closing file " + infile, e); - ok = false; - } - } - if ( !ok ) { - break; - } - - OutputStream out = null; - try { - out = new FileOutputStream(outfile); - storeProperties(prop, out); - out.flush(); - } catch ( IOException e ) { - error("IO exception processing file " + outfile, e); - ok = false; - } - if ( out != null ) { - try { - out.close(); - } catch ( IOException e ) { - error("IO exception closing file " + outfile, e); - ok = false; - } - } - if ( !ok ) { - break; - } - - } - return ok; - } - - /** - * Strip the properties filenames supplied, replacing their contents. - * @param args Names of properties files to process and replace contents - */ - public static void main(String args[]) { - boolean ok = parseOptions(args); - if ( !ok || !stripFiles(infiles, outfiles) ) { - System.exit(1); - } - } - - // --- code below here is adapted from java.util.Properties --- - - private static final String specialSaveChars = "=: \t\r\n\f#!"; - - /* - * Converts unicodes to encoded \uxxxx - * and writes out any of the characters in specialSaveChars - * with a preceding slash - */ - private static String saveConvert(String theString, boolean escapeSpace) { - int len = theString.length(); - StringBuffer outBuffer = new StringBuffer(len*2); - - for(int x=0; x 0x00ff)) { - outBuffer.append('\\'); - outBuffer.append('u'); - outBuffer.append(toHex((aChar >> 12) & 0xF)); - outBuffer.append(toHex((aChar >> 8) & 0xF)); - outBuffer.append(toHex((aChar >> 4) & 0xF)); - outBuffer.append(toHex( aChar & 0xF)); - } else { - if (specialSaveChars.indexOf(aChar) != -1) { - outBuffer.append('\\'); - } - outBuffer.append(aChar); - } - } - } - return outBuffer.toString(); - } - - /** - * Writes the content of properties to out. - * The format is that of Properties.store with the following modifications: - *
    - *
  • No header or date is written - *
  • Latin-1 characters are written as single bytes, not escape sequences - *
  • Line breaks are indicated by a single \n independent of platform - *
      - */ - private static void storeProperties(Properties properties, OutputStream out) - throws IOException { - BufferedWriter awriter; - awriter = new BufferedWriter(new OutputStreamWriter(out, "8859_1")); - for (Enumeration e = properties.keys(); e.hasMoreElements();) { - String key = (String)e.nextElement(); - String val = (String)properties.get(key); - key = saveConvert(key, true); - - /* No need to escape embedded and trailing spaces for value, hence - * pass false to flag. - */ - val = saveConvert(val, false); - writeln(awriter, key + "=" + val); - } - awriter.flush(); - } - - private static void writeln(BufferedWriter bw, String s) throws IOException { - bw.write(s); - bw.write("\n"); - } - - /** - * Convert a nibble to a hex character - * @param nibble the nibble to convert. - */ - private static char toHex(int nibble) { - return hexDigit[(nibble & 0xF)]; - } - - /** A table of hex digits */ - private static final char[] hexDigit = { - '0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F' - }; -} From e5fb7f77d601805527b8c79c26e63643bb6fa305 Mon Sep 17 00:00:00 2001 From: Joe Darcy Date: Fri, 7 Mar 2014 13:30:23 -0800 Subject: [PATCH 046/116] 8036842: Remove unneeded/obsolete -source/-target options in javac tests, part 2 Reviewed-by: jjg, sogoel --- .../test/tools/javac/6464451/BigFinally.java | 245 -- .../javac/6464451/DeepNestedFinally.java | 76 - .../tools/javac/6464451/ManyExitsInTry.java | 2051 ----------------- .../test/tools/javac/ArrayCloneCodeGen.java | 43 - langtools/test/tools/javac/ClassLit.java | 5 +- .../tools/javac/ConditionalArgTypes_2.java | 3 +- .../test/tools/javac/ConditionalClass.java | 49 - langtools/test/tools/javac/JsrRet.java | 2 +- .../javac/NoNoClassDefFoundErrorError.java | 36 - langtools/test/tools/javac/T6266772.java | 5 +- langtools/test/tools/javac/T6557865.java | 45 - .../javac/UplevelFromAnonInSuperCall.java | 1 - .../test/tools/javac/annotations/neg/Dep.java | 1 - .../javac/annotations/neg/MixedSource.java | 35 - .../classfile/ClassfileTestHelper.java | 4 +- .../classfile/NoTargetAnnotations.java | 4 +- .../referenceinfos/Driver.java | 1 - langtools/test/tools/javac/api/T6265137.java | 2 +- .../test/tools/javac/boxing/NoBoxingBool.java | 34 - .../test/tools/javac/boxing/NoBoxingByte.java | 34 - .../test/tools/javac/boxing/NoBoxingChar.java | 34 - .../tools/javac/boxing/NoBoxingDouble.java | 34 - .../tools/javac/boxing/NoBoxingFloat.java | 34 - .../test/tools/javac/boxing/NoBoxingInt.java | 34 - .../test/tools/javac/boxing/NoBoxingLong.java | 34 - .../tools/javac/boxing/NoBoxingShort.java | 34 - .../javac/classfiles/ClassVersionChecker.java | 18 +- .../tools/javac/enum/6384542/T6384542.java | 24 - .../tools/javac/enum/6384542/T6384542.out | 9 - .../tools/javac/enum/6384542/T6384542a.java | 14 - .../javac/enum/6384542/T6384542a_1_4.out | 2 - .../tools/javac/enum/6384542/T6384542a_5.out | 2 - .../tools/javac/enum/EnumAsIdentifier.java | 2 - .../tools/javac/enum/EnumAsIdentifier.out | 2 +- .../tools/javac/enum/EnumAsIdentifier4.out | 6 - .../tools/javac/enum/EnumAsIdentifier5.out | 6 - .../test/tools/javac/enum/FauxEnum2.java | 37 - .../test/tools/javac/foreach/T6682380.java | 45 - .../tools/javac/generics/BridgeRestype.java | 42 - .../test/tools/javac/generics/RefEqual.java | 3 +- .../test/tools/javac/generics/T5094318.java | 4 +- .../generics/compat/CovariantCompat1.java | 41 - .../generics/compat/CovariantCompat2.java | 29 - .../generics/compat/OverrideBridge1.java | 50 - .../generics/compat/OverrideBridge2.java | 28 - .../generics/compat/OverrideBridge3.java | 27 - .../javac/generics/compat/VisibleBridge.java | 41 - .../tools/javac/limits/FinallyNesting.java | 68 - langtools/test/tools/javac/meth/InvokeMH.java | 4 +- .../test/tools/javac/miranda/T4711325.java | 3 +- .../tools/javac/proprietary/WarnClass.java | 3 +- .../tools/javac/proprietary/WarnImport.java | 3 +- .../tools/javac/proprietary/WarnMethod.java | 3 +- .../javac/proprietary/WarnStaticImport.java | 3 +- .../tools/javac/proprietary/WarnVariable.java | 3 +- .../tools/javac/proprietary/WarnWildcard.java | 3 +- .../types/CastObjectToPrimitiveTest.java | 1 - .../javac/types/CastObjectToPrimitiveTest.out | 2 +- 58 files changed, 29 insertions(+), 3379 deletions(-) delete mode 100644 langtools/test/tools/javac/6464451/BigFinally.java delete mode 100644 langtools/test/tools/javac/6464451/DeepNestedFinally.java delete mode 100644 langtools/test/tools/javac/6464451/ManyExitsInTry.java delete mode 100644 langtools/test/tools/javac/ArrayCloneCodeGen.java delete mode 100644 langtools/test/tools/javac/ConditionalClass.java delete mode 100644 langtools/test/tools/javac/NoNoClassDefFoundErrorError.java delete mode 100644 langtools/test/tools/javac/T6557865.java delete mode 100644 langtools/test/tools/javac/annotations/neg/MixedSource.java delete mode 100644 langtools/test/tools/javac/boxing/NoBoxingBool.java delete mode 100644 langtools/test/tools/javac/boxing/NoBoxingByte.java delete mode 100644 langtools/test/tools/javac/boxing/NoBoxingChar.java delete mode 100644 langtools/test/tools/javac/boxing/NoBoxingDouble.java delete mode 100644 langtools/test/tools/javac/boxing/NoBoxingFloat.java delete mode 100644 langtools/test/tools/javac/boxing/NoBoxingInt.java delete mode 100644 langtools/test/tools/javac/boxing/NoBoxingLong.java delete mode 100644 langtools/test/tools/javac/boxing/NoBoxingShort.java delete mode 100644 langtools/test/tools/javac/enum/6384542/T6384542.java delete mode 100644 langtools/test/tools/javac/enum/6384542/T6384542.out delete mode 100644 langtools/test/tools/javac/enum/6384542/T6384542a.java delete mode 100644 langtools/test/tools/javac/enum/6384542/T6384542a_1_4.out delete mode 100644 langtools/test/tools/javac/enum/6384542/T6384542a_5.out delete mode 100644 langtools/test/tools/javac/enum/EnumAsIdentifier4.out delete mode 100644 langtools/test/tools/javac/enum/EnumAsIdentifier5.out delete mode 100644 langtools/test/tools/javac/enum/FauxEnum2.java delete mode 100644 langtools/test/tools/javac/foreach/T6682380.java delete mode 100644 langtools/test/tools/javac/generics/BridgeRestype.java delete mode 100644 langtools/test/tools/javac/generics/compat/CovariantCompat1.java delete mode 100644 langtools/test/tools/javac/generics/compat/CovariantCompat2.java delete mode 100644 langtools/test/tools/javac/generics/compat/OverrideBridge1.java delete mode 100644 langtools/test/tools/javac/generics/compat/OverrideBridge2.java delete mode 100644 langtools/test/tools/javac/generics/compat/OverrideBridge3.java delete mode 100644 langtools/test/tools/javac/generics/compat/VisibleBridge.java delete mode 100644 langtools/test/tools/javac/limits/FinallyNesting.java diff --git a/langtools/test/tools/javac/6464451/BigFinally.java b/langtools/test/tools/javac/6464451/BigFinally.java deleted file mode 100644 index 8f89e7d870f..00000000000 --- a/langtools/test/tools/javac/6464451/BigFinally.java +++ /dev/null @@ -1,245 +0,0 @@ -/* - * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -/** - * @test - * @bug 6464451 - * @summary javac in 5.0ux can not compile try-finally block which has a lot of "return" - * @author Wei Tao - * @compile -source 5 -target 5 BigFinally.java - * @clean BigFinally - * @compile/fail BigFinally.java - */ - -public class BigFinally { - static public int func(int i) { - try { - if(i == 1) return 1; - } finally { - try { - if(i == 2) return 2; - if(i == 3 ) return 3; - if(i == 4 ) return 4; - if(i == 5 ) return 5; - if(i == 6 ) return 6; - if(i == 7 ) return 7; - if(i == 8 ) return 8; - if(i == 9 ) return 9; - if(i == 10 ) return 10; - if(i == 11 ) return 11; - if(i == 12 ) return 12; - if(i == 13 ) return 13; - if(i == 14 ) return 14; - if(i == 15 ) return 15; - if(i == 16 ) return 16; - if(i == 17 ) return 17; - if(i == 18 ) return 18; - if(i == 19 ) return 19; - if(i == 20 ) return 20; - if(i == 21 ) return 21; - if(i == 22 ) return 22; - if(i == 23 ) return 23; - if(i == 24 ) return 24; - if(i == 25 ) return 25; - if(i == 26 ) return 26; - if(i == 27 ) return 27; - if(i == 28 ) return 28; - if(i == 29 ) return 29; - if(i == 30 ) return 30; - if(i == 31 ) return 31; - if(i == 32 ) return 32; - if(i == 33 ) return 33; - if(i == 34 ) return 34; - if(i == 35 ) return 35; - if(i == 36 ) return 36; - if(i == 37 ) return 37; - if(i == 38 ) return 38; - if(i == 39 ) return 39; - if(i == 40 ) return 40; - if(i == 41 ) return 41; - if(i == 42 ) return 42; - if(i == 43 ) return 43; - if(i == 44 ) return 44; - if(i == 45 ) return 45; - if(i == 46 ) return 46; - if(i == 47 ) return 47; - if(i == 48 ) return 48; - if(i == 49 ) return 49; - if(i == 50 ) return 50; - if(i == 51 ) return 51; - if(i == 52 ) return 52; - if(i == 53 ) return 53; - if(i == 54 ) return 54; - if(i == 55 ) return 55; - if(i == 56 ) return 56; - if(i == 57 ) return 57; - if(i == 58 ) return 58; - if(i == 59 ) return 59; - if(i == 60 ) return 60; - if(i == 61 ) return 61; - if(i == 62 ) return 62; - if(i == 63 ) return 63; - if(i == 64 ) return 64; - if(i == 65 ) return 65; - if(i == 66 ) return 66; - if(i == 67 ) return 67; - if(i == 68 ) return 68; - if(i == 69 ) return 69; - if(i == 70 ) return 70; - if(i == 71 ) return 71; - if(i == 72 ) return 72; - if(i == 73 ) return 73; - if(i == 74 ) return 74; - if(i == 75 ) return 75; - if(i == 76 ) return 76; - if(i == 77 ) return 77; - if(i == 78 ) return 78; - if(i == 79 ) return 79; - if(i == 80 ) return 80; - if(i == 81 ) return 81; - if(i == 82 ) return 82; - if(i == 83 ) return 83; - if(i == 84 ) return 84; - if(i == 85 ) return 85; - if(i == 86 ) return 86; - if(i == 87 ) return 87; - if(i == 88 ) return 88; - if(i == 89 ) return 89; - if(i == 90 ) return 90; - if(i == 91 ) return 91; - if(i == 92 ) return 92; - if(i == 93 ) return 93; - if(i == 94 ) return 94; - if(i == 95 ) return 95; - if(i == 96 ) return 96; - if(i == 97 ) return 97; - if(i == 98 ) return 98; - if(i == 99 ) return 99; - if(i == 100 ) return 100; - } finally { - int x = 0; - x += 1; - x += 2; - x += 3; - x += 4; - x += 5; - x += 6; - x += 7; - x += 8; - x += 9; - x += 10; - x += 11; - x += 12; - x += 13; - x += 14; - x += 15; - x += 16; - x += 17; - x += 18; - x += 19; - x += 20; - x += 21; - x += 22; - x += 23; - x += 24; - x += 25; - x += 26; - x += 27; - x += 28; - x += 29; - x += 30; - x += 31; - x += 32; - x += 33; - x += 34; - x += 35; - x += 36; - x += 37; - x += 38; - x += 39; - x += 40; - x += 41; - x += 42; - x += 43; - x += 44; - x += 45; - x += 46; - x += 47; - x += 48; - x += 49; - x += 50; - x += 51; - x += 52; - x += 53; - x += 54; - x += 55; - x += 56; - x += 57; - x += 58; - x += 59; - x += 60; - x += 61; - x += 62; - x += 63; - x += 64; - x += 65; - x += 66; - x += 67; - x += 68; - x += 69; - x += 70; - x += 71; - x += 72; - x += 73; - x += 74; - x += 75; - x += 76; - x += 77; - x += 78; - x += 79; - x += 80; - x += 81; - x += 82; - x += 83; - x += 84; - x += 85; - x += 86; - x += 87; - x += 88; - x += 89; - x += 90; - x += 91; - x += 92; - x += 93; - x += 94; - x += 95; - x += 96; - x += 97; - x += 98; - x += 99; - x += 100; - } - } - return 0; - } -} diff --git a/langtools/test/tools/javac/6464451/DeepNestedFinally.java b/langtools/test/tools/javac/6464451/DeepNestedFinally.java deleted file mode 100644 index fc6253cd975..00000000000 --- a/langtools/test/tools/javac/6464451/DeepNestedFinally.java +++ /dev/null @@ -1,76 +0,0 @@ -/* - * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -/** - * @test - * @bug 6464451 - * @summary javac in 5.0ux can not compile try-finally block which has a lot of "return" - * @author Wei Tao - * @compile -source 5 -target 5 DeepNestedFinally.java - * @clean DeepNestedFinally - * @compile/fail DeepNestedFinally.java - */ - -public class DeepNestedFinally { - static public int func(int i) { - try { - if(i == 1) return 1; - } finally { - try { - if(i == 2) return 2; - } finally { - try { - if(i == 3) return 3; - } finally { - try { - if(i == 4) return 4; - } finally { - try { - if(i == 5) return 5; - } finally { - try { - if(i == 6) return 6; - } finally { - try { - if (i == 7) return 7; - } finally { - int x = 0; - x += 1; - x += 2; - x += 3; - x += 4; - x += 5; - x += 6; - x += 7; - x += 8; - x += 9; - } - } - } - } - } - } - } - return 0; - } -} diff --git a/langtools/test/tools/javac/6464451/ManyExitsInTry.java b/langtools/test/tools/javac/6464451/ManyExitsInTry.java deleted file mode 100644 index 95eb2ffadef..00000000000 --- a/langtools/test/tools/javac/6464451/ManyExitsInTry.java +++ /dev/null @@ -1,2051 +0,0 @@ -/* - * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -/** - * @test - * @bug 6464451 - * @summary javac in 5.0ux can not compile try-finally block which has a lot of "return" - * @author Wei Tao - * @compile -source 5 -target 5 ManyExitsInTry.java - * @clean ManyExitsInTry - * @compile/fail ManyExitsInTry.java - */ - -public class ManyExitsInTry { - static public int func(int i) { - try { - if(i == 0 ) return 0; - if(i == 1 ) return 1; - if(i == 2 ) return 2; - if(i == 3 ) return 3; - if(i == 4 ) return 4; - if(i == 5 ) return 5; - if(i == 6 ) return 6; - if(i == 7 ) return 7; - if(i == 8 ) return 8; - if(i == 9 ) return 9; - if(i == 10 ) return 10; - if(i == 11 ) return 11; - if(i == 12 ) return 12; - if(i == 13 ) return 13; - if(i == 14 ) return 14; - if(i == 15 ) return 15; - if(i == 16 ) return 16; - if(i == 17 ) return 17; - if(i == 18 ) return 18; - if(i == 19 ) return 19; - if(i == 20 ) return 20; - if(i == 21 ) return 21; - if(i == 22 ) return 22; - if(i == 23 ) return 23; - if(i == 24 ) return 24; - if(i == 25 ) return 25; - if(i == 26 ) return 26; - if(i == 27 ) return 27; - if(i == 28 ) return 28; - if(i == 29 ) return 29; - if(i == 30 ) return 30; - if(i == 31 ) return 31; - if(i == 32 ) return 32; - if(i == 33 ) return 33; - if(i == 34 ) return 34; - if(i == 35 ) return 35; - if(i == 36 ) return 36; - if(i == 37 ) return 37; - if(i == 38 ) return 38; - if(i == 39 ) return 39; - if(i == 40 ) return 40; - if(i == 41 ) return 41; - if(i == 42 ) return 42; - if(i == 43 ) return 43; - if(i == 44 ) return 44; - if(i == 45 ) return 45; - if(i == 46 ) return 46; - if(i == 47 ) return 47; - if(i == 48 ) return 48; - if(i == 49 ) return 49; - if(i == 50 ) return 50; - if(i == 51 ) return 51; - if(i == 52 ) return 52; - if(i == 53 ) return 53; - if(i == 54 ) return 54; - if(i == 55 ) return 55; - if(i == 56 ) return 56; - if(i == 57 ) return 57; - if(i == 58 ) return 58; - if(i == 59 ) return 59; - if(i == 60 ) return 60; - if(i == 61 ) return 61; - if(i == 62 ) return 62; - if(i == 63 ) return 63; - if(i == 64 ) return 64; - if(i == 65 ) return 65; - if(i == 66 ) return 66; - if(i == 67 ) return 67; - if(i == 68 ) return 68; - if(i == 69 ) return 69; - if(i == 70 ) return 70; - if(i == 71 ) return 71; - if(i == 72 ) return 72; - if(i == 73 ) return 73; - if(i == 74 ) return 74; - if(i == 75 ) return 75; - if(i == 76 ) return 76; - if(i == 77 ) return 77; - if(i == 78 ) return 78; - if(i == 79 ) return 79; - if(i == 80 ) return 80; - if(i == 81 ) return 81; - if(i == 82 ) return 82; - if(i == 83 ) return 83; - if(i == 84 ) return 84; - if(i == 85 ) return 85; - if(i == 86 ) return 86; - if(i == 87 ) return 87; - if(i == 88 ) return 88; - if(i == 89 ) return 89; - if(i == 90 ) return 90; - if(i == 91 ) return 91; - if(i == 92 ) return 92; - if(i == 93 ) return 93; - if(i == 94 ) return 94; - if(i == 95 ) return 95; - if(i == 96 ) return 96; - if(i == 97 ) return 97; - if(i == 98 ) return 98; - if(i == 99 ) return 99; - if(i == 100 ) return 100; - if(i == 101 ) return 101; - if(i == 102 ) return 102; - if(i == 103 ) return 103; - if(i == 104 ) return 104; - if(i == 105 ) return 105; - if(i == 106 ) return 106; - if(i == 107 ) return 107; - if(i == 108 ) return 108; - if(i == 109 ) return 109; - if(i == 110 ) return 110; - if(i == 111 ) return 111; - if(i == 112 ) return 112; - if(i == 113 ) return 113; - if(i == 114 ) return 114; - if(i == 115 ) return 115; - if(i == 116 ) return 116; - if(i == 117 ) return 117; - if(i == 118 ) return 118; - if(i == 119 ) return 119; - if(i == 120 ) return 120; - if(i == 121 ) return 121; - if(i == 122 ) return 122; - if(i == 123 ) return 123; - if(i == 124 ) return 124; - if(i == 125 ) return 125; - if(i == 126 ) return 126; - if(i == 127 ) return 127; - if(i == 128 ) return 128; - if(i == 129 ) return 129; - if(i == 130 ) return 130; - if(i == 131 ) return 131; - if(i == 132 ) return 132; - if(i == 133 ) return 133; - if(i == 134 ) return 134; - if(i == 135 ) return 135; - if(i == 136 ) return 136; - if(i == 137 ) return 137; - if(i == 138 ) return 138; - if(i == 139 ) return 139; - if(i == 140 ) return 140; - if(i == 141 ) return 141; - if(i == 142 ) return 142; - if(i == 143 ) return 143; - if(i == 144 ) return 144; - if(i == 145 ) return 145; - if(i == 146 ) return 146; - if(i == 147 ) return 147; - if(i == 148 ) return 148; - if(i == 149 ) return 149; - if(i == 150 ) return 150; - if(i == 151 ) return 151; - if(i == 152 ) return 152; - if(i == 153 ) return 153; - if(i == 154 ) return 154; - if(i == 155 ) return 155; - if(i == 156 ) return 156; - if(i == 157 ) return 157; - if(i == 158 ) return 158; - if(i == 159 ) return 159; - if(i == 160 ) return 160; - if(i == 161 ) return 161; - if(i == 162 ) return 162; - if(i == 163 ) return 163; - if(i == 164 ) return 164; - if(i == 165 ) return 165; - if(i == 166 ) return 166; - if(i == 167 ) return 167; - if(i == 168 ) return 168; - if(i == 169 ) return 169; - if(i == 170 ) return 170; - if(i == 171 ) return 171; - if(i == 172 ) return 172; - if(i == 173 ) return 173; - if(i == 174 ) return 174; - if(i == 175 ) return 175; - if(i == 176 ) return 176; - if(i == 177 ) return 177; - if(i == 178 ) return 178; - if(i == 179 ) return 179; - if(i == 180 ) return 180; - if(i == 181 ) return 181; - if(i == 182 ) return 182; - if(i == 183 ) return 183; - if(i == 184 ) return 184; - if(i == 185 ) return 185; - if(i == 186 ) return 186; - if(i == 187 ) return 187; - if(i == 188 ) return 188; - if(i == 189 ) return 189; - if(i == 190 ) return 190; - if(i == 191 ) return 191; - if(i == 192 ) return 192; - if(i == 193 ) return 193; - if(i == 194 ) return 194; - if(i == 195 ) return 195; - if(i == 196 ) return 196; - if(i == 197 ) return 197; - if(i == 198 ) return 198; - if(i == 199 ) return 199; - if(i == 200 ) return 200; - if(i == 201 ) return 201; - if(i == 202 ) return 202; - if(i == 203 ) return 203; - if(i == 204 ) return 204; - if(i == 205 ) return 205; - if(i == 206 ) return 206; - if(i == 207 ) return 207; - if(i == 208 ) return 208; - if(i == 209 ) return 209; - if(i == 210 ) return 210; - if(i == 211 ) return 211; - if(i == 212 ) return 212; - if(i == 213 ) return 213; - if(i == 214 ) return 214; - if(i == 215 ) return 215; - if(i == 216 ) return 216; - if(i == 217 ) return 217; - if(i == 218 ) return 218; - if(i == 219 ) return 219; - if(i == 220 ) return 220; - if(i == 221 ) return 221; - if(i == 222 ) return 222; - if(i == 223 ) return 223; - if(i == 224 ) return 224; - if(i == 225 ) return 225; - if(i == 226 ) return 226; - if(i == 227 ) return 227; - if(i == 228 ) return 228; - if(i == 229 ) return 229; - if(i == 230 ) return 230; - if(i == 231 ) return 231; - if(i == 232 ) return 232; - if(i == 233 ) return 233; - if(i == 234 ) return 234; - if(i == 235 ) return 235; - if(i == 236 ) return 236; - if(i == 237 ) return 237; - if(i == 238 ) return 238; - if(i == 239 ) return 239; - if(i == 240 ) return 240; - if(i == 241 ) return 241; - if(i == 242 ) return 242; - if(i == 243 ) return 243; - if(i == 244 ) return 244; - if(i == 245 ) return 245; - if(i == 246 ) return 246; - if(i == 247 ) return 247; - if(i == 248 ) return 248; - if(i == 249 ) return 249; - if(i == 250 ) return 250; - if(i == 251 ) return 251; - if(i == 252 ) return 252; - if(i == 253 ) return 253; - if(i == 254 ) return 254; - if(i == 255 ) return 255; - if(i == 256 ) return 256; - if(i == 257 ) return 257; - if(i == 258 ) return 258; - if(i == 259 ) return 259; - if(i == 260 ) return 260; - if(i == 261 ) return 261; - if(i == 262 ) return 262; - if(i == 263 ) return 263; - if(i == 264 ) return 264; - if(i == 265 ) return 265; - if(i == 266 ) return 266; - if(i == 267 ) return 267; - if(i == 268 ) return 268; - if(i == 269 ) return 269; - if(i == 270 ) return 270; - if(i == 271 ) return 271; - if(i == 272 ) return 272; - if(i == 273 ) return 273; - if(i == 274 ) return 274; - if(i == 275 ) return 275; - if(i == 276 ) return 276; - if(i == 277 ) return 277; - if(i == 278 ) return 278; - if(i == 279 ) return 279; - if(i == 280 ) return 280; - if(i == 281 ) return 281; - if(i == 282 ) return 282; - if(i == 283 ) return 283; - if(i == 284 ) return 284; - if(i == 285 ) return 285; - if(i == 286 ) return 286; - if(i == 287 ) return 287; - if(i == 288 ) return 288; - if(i == 289 ) return 289; - if(i == 290 ) return 290; - if(i == 291 ) return 291; - if(i == 292 ) return 292; - if(i == 293 ) return 293; - if(i == 294 ) return 294; - if(i == 295 ) return 295; - if(i == 296 ) return 296; - if(i == 297 ) return 297; - if(i == 298 ) return 298; - if(i == 299 ) return 299; - if(i == 300 ) return 300; - if(i == 301 ) return 301; - if(i == 302 ) return 302; - if(i == 303 ) return 303; - if(i == 304 ) return 304; - if(i == 305 ) return 305; - if(i == 306 ) return 306; - if(i == 307 ) return 307; - if(i == 308 ) return 308; - if(i == 309 ) return 309; - if(i == 310 ) return 310; - if(i == 311 ) return 311; - if(i == 312 ) return 312; - if(i == 313 ) return 313; - if(i == 314 ) return 314; - if(i == 315 ) return 315; - if(i == 316 ) return 316; - if(i == 317 ) return 317; - if(i == 318 ) return 318; - if(i == 319 ) return 319; - if(i == 320 ) return 320; - if(i == 321 ) return 321; - if(i == 322 ) return 322; - if(i == 323 ) return 323; - if(i == 324 ) return 324; - if(i == 325 ) return 325; - if(i == 326 ) return 326; - if(i == 327 ) return 327; - if(i == 328 ) return 328; - if(i == 329 ) return 329; - if(i == 330 ) return 330; - if(i == 331 ) return 331; - if(i == 332 ) return 332; - if(i == 333 ) return 333; - if(i == 334 ) return 334; - if(i == 335 ) return 335; - if(i == 336 ) return 336; - if(i == 337 ) return 337; - if(i == 338 ) return 338; - if(i == 339 ) return 339; - if(i == 340 ) return 340; - if(i == 341 ) return 341; - if(i == 342 ) return 342; - if(i == 343 ) return 343; - if(i == 344 ) return 344; - if(i == 345 ) return 345; - if(i == 346 ) return 346; - if(i == 347 ) return 347; - if(i == 348 ) return 348; - if(i == 349 ) return 349; - if(i == 350 ) return 350; - if(i == 351 ) return 351; - if(i == 352 ) return 352; - if(i == 353 ) return 353; - if(i == 354 ) return 354; - if(i == 355 ) return 355; - if(i == 356 ) return 356; - if(i == 357 ) return 357; - if(i == 358 ) return 358; - if(i == 359 ) return 359; - if(i == 360 ) return 360; - if(i == 361 ) return 361; - if(i == 362 ) return 362; - if(i == 363 ) return 363; - if(i == 364 ) return 364; - if(i == 365 ) return 365; - if(i == 366 ) return 366; - if(i == 367 ) return 367; - if(i == 368 ) return 368; - if(i == 369 ) return 369; - if(i == 370 ) return 370; - if(i == 371 ) return 371; - if(i == 372 ) return 372; - if(i == 373 ) return 373; - if(i == 374 ) return 374; - if(i == 375 ) return 375; - if(i == 376 ) return 376; - if(i == 377 ) return 377; - if(i == 378 ) return 378; - if(i == 379 ) return 379; - if(i == 380 ) return 380; - if(i == 381 ) return 381; - if(i == 382 ) return 382; - if(i == 383 ) return 383; - if(i == 384 ) return 384; - if(i == 385 ) return 385; - if(i == 386 ) return 386; - if(i == 387 ) return 387; - if(i == 388 ) return 388; - if(i == 389 ) return 389; - if(i == 390 ) return 390; - if(i == 391 ) return 391; - if(i == 392 ) return 392; - if(i == 393 ) return 393; - if(i == 394 ) return 394; - if(i == 395 ) return 395; - if(i == 396 ) return 396; - if(i == 397 ) return 397; - if(i == 398 ) return 398; - if(i == 399 ) return 399; - if(i == 400 ) return 400; - if(i == 401 ) return 401; - if(i == 402 ) return 402; - if(i == 403 ) return 403; - if(i == 404 ) return 404; - if(i == 405 ) return 405; - if(i == 406 ) return 406; - if(i == 407 ) return 407; - if(i == 408 ) return 408; - if(i == 409 ) return 409; - if(i == 410 ) return 410; - if(i == 411 ) return 411; - if(i == 412 ) return 412; - if(i == 413 ) return 413; - if(i == 414 ) return 414; - if(i == 415 ) return 415; - if(i == 416 ) return 416; - if(i == 417 ) return 417; - if(i == 418 ) return 418; - if(i == 419 ) return 419; - if(i == 420 ) return 420; - if(i == 421 ) return 421; - if(i == 422 ) return 422; - if(i == 423 ) return 423; - if(i == 424 ) return 424; - if(i == 425 ) return 425; - if(i == 426 ) return 426; - if(i == 427 ) return 427; - if(i == 428 ) return 428; - if(i == 429 ) return 429; - if(i == 430 ) return 430; - if(i == 431 ) return 431; - if(i == 432 ) return 432; - if(i == 433 ) return 433; - if(i == 434 ) return 434; - if(i == 435 ) return 435; - if(i == 436 ) return 436; - if(i == 437 ) return 437; - if(i == 438 ) return 438; - if(i == 439 ) return 439; - if(i == 440 ) return 440; - if(i == 441 ) return 441; - if(i == 442 ) return 442; - if(i == 443 ) return 443; - if(i == 444 ) return 444; - if(i == 445 ) return 445; - if(i == 446 ) return 446; - if(i == 447 ) return 447; - if(i == 448 ) return 448; - if(i == 449 ) return 449; - if(i == 450 ) return 450; - if(i == 451 ) return 451; - if(i == 452 ) return 452; - if(i == 453 ) return 453; - if(i == 454 ) return 454; - if(i == 455 ) return 455; - if(i == 456 ) return 456; - if(i == 457 ) return 457; - if(i == 458 ) return 458; - if(i == 459 ) return 459; - if(i == 460 ) return 460; - if(i == 461 ) return 461; - if(i == 462 ) return 462; - if(i == 463 ) return 463; - if(i == 464 ) return 464; - if(i == 465 ) return 465; - if(i == 466 ) return 466; - if(i == 467 ) return 467; - if(i == 468 ) return 468; - if(i == 469 ) return 469; - if(i == 470 ) return 470; - if(i == 471 ) return 471; - if(i == 472 ) return 472; - if(i == 473 ) return 473; - if(i == 474 ) return 474; - if(i == 475 ) return 475; - if(i == 476 ) return 476; - if(i == 477 ) return 477; - if(i == 478 ) return 478; - if(i == 479 ) return 479; - if(i == 480 ) return 480; - if(i == 481 ) return 481; - if(i == 482 ) return 482; - if(i == 483 ) return 483; - if(i == 484 ) return 484; - if(i == 485 ) return 485; - if(i == 486 ) return 486; - if(i == 487 ) return 487; - if(i == 488 ) return 488; - if(i == 489 ) return 489; - if(i == 490 ) return 490; - if(i == 491 ) return 491; - if(i == 492 ) return 492; - if(i == 493 ) return 493; - if(i == 494 ) return 494; - if(i == 495 ) return 495; - if(i == 496 ) return 496; - if(i == 497 ) return 497; - if(i == 498 ) return 498; - if(i == 499 ) return 499; - if(i == 500 ) return 500; - if(i == 501 ) return 501; - if(i == 502 ) return 502; - if(i == 503 ) return 503; - if(i == 504 ) return 504; - if(i == 505 ) return 505; - if(i == 506 ) return 506; - if(i == 507 ) return 507; - if(i == 508 ) return 508; - if(i == 509 ) return 509; - if(i == 510 ) return 510; - if(i == 511 ) return 511; - if(i == 512 ) return 512; - if(i == 513 ) return 513; - if(i == 514 ) return 514; - if(i == 515 ) return 515; - if(i == 516 ) return 516; - if(i == 517 ) return 517; - if(i == 518 ) return 518; - if(i == 519 ) return 519; - if(i == 520 ) return 520; - if(i == 521 ) return 521; - if(i == 522 ) return 522; - if(i == 523 ) return 523; - if(i == 524 ) return 524; - if(i == 525 ) return 525; - if(i == 526 ) return 526; - if(i == 527 ) return 527; - if(i == 528 ) return 528; - if(i == 529 ) return 529; - if(i == 530 ) return 530; - if(i == 531 ) return 531; - if(i == 532 ) return 532; - if(i == 533 ) return 533; - if(i == 534 ) return 534; - if(i == 535 ) return 535; - if(i == 536 ) return 536; - if(i == 537 ) return 537; - if(i == 538 ) return 538; - if(i == 539 ) return 539; - if(i == 540 ) return 540; - if(i == 541 ) return 541; - if(i == 542 ) return 542; - if(i == 543 ) return 543; - if(i == 544 ) return 544; - if(i == 545 ) return 545; - if(i == 546 ) return 546; - if(i == 547 ) return 547; - if(i == 548 ) return 548; - if(i == 549 ) return 549; - if(i == 550 ) return 550; - if(i == 551 ) return 551; - if(i == 552 ) return 552; - if(i == 553 ) return 553; - if(i == 554 ) return 554; - if(i == 555 ) return 555; - if(i == 556 ) return 556; - if(i == 557 ) return 557; - if(i == 558 ) return 558; - if(i == 559 ) return 559; - if(i == 560 ) return 560; - if(i == 561 ) return 561; - if(i == 562 ) return 562; - if(i == 563 ) return 563; - if(i == 564 ) return 564; - if(i == 565 ) return 565; - if(i == 566 ) return 566; - if(i == 567 ) return 567; - if(i == 568 ) return 568; - if(i == 569 ) return 569; - if(i == 570 ) return 570; - if(i == 571 ) return 571; - if(i == 572 ) return 572; - if(i == 573 ) return 573; - if(i == 574 ) return 574; - if(i == 575 ) return 575; - if(i == 576 ) return 576; - if(i == 577 ) return 577; - if(i == 578 ) return 578; - if(i == 579 ) return 579; - if(i == 580 ) return 580; - if(i == 581 ) return 581; - if(i == 582 ) return 582; - if(i == 583 ) return 583; - if(i == 584 ) return 584; - if(i == 585 ) return 585; - if(i == 586 ) return 586; - if(i == 587 ) return 587; - if(i == 588 ) return 588; - if(i == 589 ) return 589; - if(i == 590 ) return 590; - if(i == 591 ) return 591; - if(i == 592 ) return 592; - if(i == 593 ) return 593; - if(i == 594 ) return 594; - if(i == 595 ) return 595; - if(i == 596 ) return 596; - if(i == 597 ) return 597; - if(i == 598 ) return 598; - if(i == 599 ) return 599; - if(i == 600 ) return 600; - if(i == 601 ) return 601; - if(i == 602 ) return 602; - if(i == 603 ) return 603; - if(i == 604 ) return 604; - if(i == 605 ) return 605; - if(i == 606 ) return 606; - if(i == 607 ) return 607; - if(i == 608 ) return 608; - if(i == 609 ) return 609; - if(i == 610 ) return 610; - if(i == 611 ) return 611; - if(i == 612 ) return 612; - if(i == 613 ) return 613; - if(i == 614 ) return 614; - if(i == 615 ) return 615; - if(i == 616 ) return 616; - if(i == 617 ) return 617; - if(i == 618 ) return 618; - if(i == 619 ) return 619; - if(i == 620 ) return 620; - if(i == 621 ) return 621; - if(i == 622 ) return 622; - if(i == 623 ) return 623; - if(i == 624 ) return 624; - if(i == 625 ) return 625; - if(i == 626 ) return 626; - if(i == 627 ) return 627; - if(i == 628 ) return 628; - if(i == 629 ) return 629; - if(i == 630 ) return 630; - if(i == 631 ) return 631; - if(i == 632 ) return 632; - if(i == 633 ) return 633; - if(i == 634 ) return 634; - if(i == 635 ) return 635; - if(i == 636 ) return 636; - if(i == 637 ) return 637; - if(i == 638 ) return 638; - if(i == 639 ) return 639; - if(i == 640 ) return 640; - if(i == 641 ) return 641; - if(i == 642 ) return 642; - if(i == 643 ) return 643; - if(i == 644 ) return 644; - if(i == 645 ) return 645; - if(i == 646 ) return 646; - if(i == 647 ) return 647; - if(i == 648 ) return 648; - if(i == 649 ) return 649; - if(i == 650 ) return 650; - if(i == 651 ) return 651; - if(i == 652 ) return 652; - if(i == 653 ) return 653; - if(i == 654 ) return 654; - if(i == 655 ) return 655; - if(i == 656 ) return 656; - if(i == 657 ) return 657; - if(i == 658 ) return 658; - if(i == 659 ) return 659; - if(i == 660 ) return 660; - if(i == 661 ) return 661; - if(i == 662 ) return 662; - if(i == 663 ) return 663; - if(i == 664 ) return 664; - if(i == 665 ) return 665; - if(i == 666 ) return 666; - if(i == 667 ) return 667; - if(i == 668 ) return 668; - if(i == 669 ) return 669; - if(i == 670 ) return 670; - if(i == 671 ) return 671; - if(i == 672 ) return 672; - if(i == 673 ) return 673; - if(i == 674 ) return 674; - if(i == 675 ) return 675; - if(i == 676 ) return 676; - if(i == 677 ) return 677; - if(i == 678 ) return 678; - if(i == 679 ) return 679; - if(i == 680 ) return 680; - if(i == 681 ) return 681; - if(i == 682 ) return 682; - if(i == 683 ) return 683; - if(i == 684 ) return 684; - if(i == 685 ) return 685; - if(i == 686 ) return 686; - if(i == 687 ) return 687; - if(i == 688 ) return 688; - if(i == 689 ) return 689; - if(i == 690 ) return 690; - if(i == 691 ) return 691; - if(i == 692 ) return 692; - if(i == 693 ) return 693; - if(i == 694 ) return 694; - if(i == 695 ) return 695; - if(i == 696 ) return 696; - if(i == 697 ) return 697; - if(i == 698 ) return 698; - if(i == 699 ) return 699; - if(i == 700 ) return 700; - if(i == 701 ) return 701; - if(i == 702 ) return 702; - if(i == 703 ) return 703; - if(i == 704 ) return 704; - if(i == 705 ) return 705; - if(i == 706 ) return 706; - if(i == 707 ) return 707; - if(i == 708 ) return 708; - if(i == 709 ) return 709; - if(i == 710 ) return 710; - if(i == 711 ) return 711; - if(i == 712 ) return 712; - if(i == 713 ) return 713; - if(i == 714 ) return 714; - if(i == 715 ) return 715; - if(i == 716 ) return 716; - if(i == 717 ) return 717; - if(i == 718 ) return 718; - if(i == 719 ) return 719; - if(i == 720 ) return 720; - if(i == 721 ) return 721; - if(i == 722 ) return 722; - if(i == 723 ) return 723; - if(i == 724 ) return 724; - if(i == 725 ) return 725; - if(i == 726 ) return 726; - if(i == 727 ) return 727; - if(i == 728 ) return 728; - if(i == 729 ) return 729; - if(i == 730 ) return 730; - if(i == 731 ) return 731; - if(i == 732 ) return 732; - if(i == 733 ) return 733; - if(i == 734 ) return 734; - if(i == 735 ) return 735; - if(i == 736 ) return 736; - if(i == 737 ) return 737; - if(i == 738 ) return 738; - if(i == 739 ) return 739; - if(i == 740 ) return 740; - if(i == 741 ) return 741; - if(i == 742 ) return 742; - if(i == 743 ) return 743; - if(i == 744 ) return 744; - if(i == 745 ) return 745; - if(i == 746 ) return 746; - if(i == 747 ) return 747; - if(i == 748 ) return 748; - if(i == 749 ) return 749; - if(i == 750 ) return 750; - if(i == 751 ) return 751; - if(i == 752 ) return 752; - if(i == 753 ) return 753; - if(i == 754 ) return 754; - if(i == 755 ) return 755; - if(i == 756 ) return 756; - if(i == 757 ) return 757; - if(i == 758 ) return 758; - if(i == 759 ) return 759; - if(i == 760 ) return 760; - if(i == 761 ) return 761; - if(i == 762 ) return 762; - if(i == 763 ) return 763; - if(i == 764 ) return 764; - if(i == 765 ) return 765; - if(i == 766 ) return 766; - if(i == 767 ) return 767; - if(i == 768 ) return 768; - if(i == 769 ) return 769; - if(i == 770 ) return 770; - if(i == 771 ) return 771; - if(i == 772 ) return 772; - if(i == 773 ) return 773; - if(i == 774 ) return 774; - if(i == 775 ) return 775; - if(i == 776 ) return 776; - if(i == 777 ) return 777; - if(i == 778 ) return 778; - if(i == 779 ) return 779; - if(i == 780 ) return 780; - if(i == 781 ) return 781; - if(i == 782 ) return 782; - if(i == 783 ) return 783; - if(i == 784 ) return 784; - if(i == 785 ) return 785; - if(i == 786 ) return 786; - if(i == 787 ) return 787; - if(i == 788 ) return 788; - if(i == 789 ) return 789; - if(i == 790 ) return 790; - if(i == 791 ) return 791; - if(i == 792 ) return 792; - if(i == 793 ) return 793; - if(i == 794 ) return 794; - if(i == 795 ) return 795; - if(i == 796 ) return 796; - if(i == 797 ) return 797; - if(i == 798 ) return 798; - if(i == 799 ) return 799; - if(i == 800 ) return 800; - if(i == 801 ) return 801; - if(i == 802 ) return 802; - if(i == 803 ) return 803; - if(i == 804 ) return 804; - if(i == 805 ) return 805; - if(i == 806 ) return 806; - if(i == 807 ) return 807; - if(i == 808 ) return 808; - if(i == 809 ) return 809; - if(i == 810 ) return 810; - if(i == 811 ) return 811; - if(i == 812 ) return 812; - if(i == 813 ) return 813; - if(i == 814 ) return 814; - if(i == 815 ) return 815; - if(i == 816 ) return 816; - if(i == 817 ) return 817; - if(i == 818 ) return 818; - if(i == 819 ) return 819; - if(i == 820 ) return 820; - if(i == 821 ) return 821; - if(i == 822 ) return 822; - if(i == 823 ) return 823; - if(i == 824 ) return 824; - if(i == 825 ) return 825; - if(i == 826 ) return 826; - if(i == 827 ) return 827; - if(i == 828 ) return 828; - if(i == 829 ) return 829; - if(i == 830 ) return 830; - if(i == 831 ) return 831; - if(i == 832 ) return 832; - if(i == 833 ) return 833; - if(i == 834 ) return 834; - if(i == 835 ) return 835; - if(i == 836 ) return 836; - if(i == 837 ) return 837; - if(i == 838 ) return 838; - if(i == 839 ) return 839; - if(i == 840 ) return 840; - if(i == 841 ) return 841; - if(i == 842 ) return 842; - if(i == 843 ) return 843; - if(i == 844 ) return 844; - if(i == 845 ) return 845; - if(i == 846 ) return 846; - if(i == 847 ) return 847; - if(i == 848 ) return 848; - if(i == 849 ) return 849; - if(i == 850 ) return 850; - if(i == 851 ) return 851; - if(i == 852 ) return 852; - if(i == 853 ) return 853; - if(i == 854 ) return 854; - if(i == 855 ) return 855; - if(i == 856 ) return 856; - if(i == 857 ) return 857; - if(i == 858 ) return 858; - if(i == 859 ) return 859; - if(i == 860 ) return 860; - if(i == 861 ) return 861; - if(i == 862 ) return 862; - if(i == 863 ) return 863; - if(i == 864 ) return 864; - if(i == 865 ) return 865; - if(i == 866 ) return 866; - if(i == 867 ) return 867; - if(i == 868 ) return 868; - if(i == 869 ) return 869; - if(i == 870 ) return 870; - if(i == 871 ) return 871; - if(i == 872 ) return 872; - if(i == 873 ) return 873; - if(i == 874 ) return 874; - if(i == 875 ) return 875; - if(i == 876 ) return 876; - if(i == 877 ) return 877; - if(i == 878 ) return 878; - if(i == 879 ) return 879; - if(i == 880 ) return 880; - if(i == 881 ) return 881; - if(i == 882 ) return 882; - if(i == 883 ) return 883; - if(i == 884 ) return 884; - if(i == 885 ) return 885; - if(i == 886 ) return 886; - if(i == 887 ) return 887; - if(i == 888 ) return 888; - if(i == 889 ) return 889; - if(i == 890 ) return 890; - if(i == 891 ) return 891; - if(i == 892 ) return 892; - if(i == 893 ) return 893; - if(i == 894 ) return 894; - if(i == 895 ) return 895; - if(i == 896 ) return 896; - if(i == 897 ) return 897; - if(i == 898 ) return 898; - if(i == 899 ) return 899; - if(i == 900 ) return 900; - if(i == 901 ) return 901; - if(i == 902 ) return 902; - if(i == 903 ) return 903; - if(i == 904 ) return 904; - if(i == 905 ) return 905; - if(i == 906 ) return 906; - if(i == 907 ) return 907; - if(i == 908 ) return 908; - if(i == 909 ) return 909; - if(i == 910 ) return 910; - if(i == 911 ) return 911; - if(i == 912 ) return 912; - if(i == 913 ) return 913; - if(i == 914 ) return 914; - if(i == 915 ) return 915; - if(i == 916 ) return 916; - if(i == 917 ) return 917; - if(i == 918 ) return 918; - if(i == 919 ) return 919; - if(i == 920 ) return 920; - if(i == 921 ) return 921; - if(i == 922 ) return 922; - if(i == 923 ) return 923; - if(i == 924 ) return 924; - if(i == 925 ) return 925; - if(i == 926 ) return 926; - if(i == 927 ) return 927; - if(i == 928 ) return 928; - if(i == 929 ) return 929; - if(i == 930 ) return 930; - if(i == 931 ) return 931; - if(i == 932 ) return 932; - if(i == 933 ) return 933; - if(i == 934 ) return 934; - if(i == 935 ) return 935; - if(i == 936 ) return 936; - if(i == 937 ) return 937; - if(i == 938 ) return 938; - if(i == 939 ) return 939; - if(i == 940 ) return 940; - if(i == 941 ) return 941; - if(i == 942 ) return 942; - if(i == 943 ) return 943; - if(i == 944 ) return 944; - if(i == 945 ) return 945; - if(i == 946 ) return 946; - if(i == 947 ) return 947; - if(i == 948 ) return 948; - if(i == 949 ) return 949; - if(i == 950 ) return 950; - if(i == 951 ) return 951; - if(i == 952 ) return 952; - if(i == 953 ) return 953; - if(i == 954 ) return 954; - if(i == 955 ) return 955; - if(i == 956 ) return 956; - if(i == 957 ) return 957; - if(i == 958 ) return 958; - if(i == 959 ) return 959; - if(i == 960 ) return 960; - if(i == 961 ) return 961; - if(i == 962 ) return 962; - if(i == 963 ) return 963; - if(i == 964 ) return 964; - if(i == 965 ) return 965; - if(i == 966 ) return 966; - if(i == 967 ) return 967; - if(i == 968 ) return 968; - if(i == 969 ) return 969; - if(i == 970 ) return 970; - if(i == 971 ) return 971; - if(i == 972 ) return 972; - if(i == 973 ) return 973; - if(i == 974 ) return 974; - if(i == 975 ) return 975; - if(i == 976 ) return 976; - if(i == 977 ) return 977; - if(i == 978 ) return 978; - if(i == 979 ) return 979; - if(i == 980 ) return 980; - if(i == 981 ) return 981; - if(i == 982 ) return 982; - if(i == 983 ) return 983; - if(i == 984 ) return 984; - if(i == 985 ) return 985; - if(i == 986 ) return 986; - if(i == 987 ) return 987; - if(i == 988 ) return 988; - if(i == 989 ) return 989; - if(i == 990 ) return 990; - if(i == 991 ) return 991; - if(i == 992 ) return 992; - if(i == 993 ) return 993; - if(i == 994 ) return 994; - if(i == 995 ) return 995; - if(i == 996 ) return 996; - if(i == 997 ) return 997; - if(i == 998 ) return 998; - if(i == 999 ) return 999; - if(i == 1000 ) return 1000; - if(i == 1001 ) return 1001; - if(i == 1002 ) return 1002; - if(i == 1003 ) return 1003; - if(i == 1004 ) return 1004; - if(i == 1005 ) return 1005; - if(i == 1006 ) return 1006; - if(i == 1007 ) return 1007; - if(i == 1008 ) return 1008; - if(i == 1009 ) return 1009; - if(i == 1010 ) return 1010; - if(i == 1011 ) return 1011; - if(i == 1012 ) return 1012; - if(i == 1013 ) return 1013; - if(i == 1014 ) return 1014; - if(i == 1015 ) return 1015; - if(i == 1016 ) return 1016; - if(i == 1017 ) return 1017; - if(i == 1018 ) return 1018; - if(i == 1019 ) return 1019; - if(i == 1020 ) return 1020; - if(i == 1021 ) return 1021; - if(i == 1022 ) return 1022; - if(i == 1023 ) return 1023; - if(i == 1024 ) return 1024; - if(i == 1025 ) return 1025; - if(i == 1026 ) return 1026; - if(i == 1027 ) return 1027; - if(i == 1028 ) return 1028; - if(i == 1029 ) return 1029; - if(i == 1030 ) return 1030; - if(i == 1031 ) return 1031; - if(i == 1032 ) return 1032; - if(i == 1033 ) return 1033; - if(i == 1034 ) return 1034; - if(i == 1035 ) return 1035; - if(i == 1036 ) return 1036; - if(i == 1037 ) return 1037; - if(i == 1038 ) return 1038; - if(i == 1039 ) return 1039; - if(i == 1040 ) return 1040; - if(i == 1041 ) return 1041; - if(i == 1042 ) return 1042; - if(i == 1043 ) return 1043; - if(i == 1044 ) return 1044; - if(i == 1045 ) return 1045; - if(i == 1046 ) return 1046; - if(i == 1047 ) return 1047; - if(i == 1048 ) return 1048; - if(i == 1049 ) return 1049; - if(i == 1050 ) return 1050; - if(i == 1051 ) return 1051; - if(i == 1052 ) return 1052; - if(i == 1053 ) return 1053; - if(i == 1054 ) return 1054; - if(i == 1055 ) return 1055; - if(i == 1056 ) return 1056; - if(i == 1057 ) return 1057; - if(i == 1058 ) return 1058; - if(i == 1059 ) return 1059; - if(i == 1060 ) return 1060; - if(i == 1061 ) return 1061; - if(i == 1062 ) return 1062; - if(i == 1063 ) return 1063; - if(i == 1064 ) return 1064; - if(i == 1065 ) return 1065; - if(i == 1066 ) return 1066; - if(i == 1067 ) return 1067; - if(i == 1068 ) return 1068; - if(i == 1069 ) return 1069; - if(i == 1070 ) return 1070; - if(i == 1071 ) return 1071; - if(i == 1072 ) return 1072; - if(i == 1073 ) return 1073; - if(i == 1074 ) return 1074; - if(i == 1075 ) return 1075; - if(i == 1076 ) return 1076; - if(i == 1077 ) return 1077; - if(i == 1078 ) return 1078; - if(i == 1079 ) return 1079; - if(i == 1080 ) return 1080; - if(i == 1081 ) return 1081; - if(i == 1082 ) return 1082; - if(i == 1083 ) return 1083; - if(i == 1084 ) return 1084; - if(i == 1085 ) return 1085; - if(i == 1086 ) return 1086; - if(i == 1087 ) return 1087; - if(i == 1088 ) return 1088; - if(i == 1089 ) return 1089; - if(i == 1090 ) return 1090; - if(i == 1091 ) return 1091; - if(i == 1092 ) return 1092; - if(i == 1093 ) return 1093; - if(i == 1094 ) return 1094; - if(i == 1095 ) return 1095; - if(i == 1096 ) return 1096; - if(i == 1097 ) return 1097; - if(i == 1098 ) return 1098; - if(i == 1099 ) return 1099; - if(i == 1100 ) return 1100; - if(i == 1101 ) return 1101; - if(i == 1102 ) return 1102; - if(i == 1103 ) return 1103; - if(i == 1104 ) return 1104; - if(i == 1105 ) return 1105; - if(i == 1106 ) return 1106; - if(i == 1107 ) return 1107; - if(i == 1108 ) return 1108; - if(i == 1109 ) return 1109; - if(i == 1110 ) return 1110; - if(i == 1111 ) return 1111; - if(i == 1112 ) return 1112; - if(i == 1113 ) return 1113; - if(i == 1114 ) return 1114; - if(i == 1115 ) return 1115; - if(i == 1116 ) return 1116; - if(i == 1117 ) return 1117; - if(i == 1118 ) return 1118; - if(i == 1119 ) return 1119; - if(i == 1120 ) return 1120; - if(i == 1121 ) return 1121; - if(i == 1122 ) return 1122; - if(i == 1123 ) return 1123; - if(i == 1124 ) return 1124; - if(i == 1125 ) return 1125; - if(i == 1126 ) return 1126; - if(i == 1127 ) return 1127; - if(i == 1128 ) return 1128; - if(i == 1129 ) return 1129; - if(i == 1130 ) return 1130; - if(i == 1131 ) return 1131; - if(i == 1132 ) return 1132; - if(i == 1133 ) return 1133; - if(i == 1134 ) return 1134; - if(i == 1135 ) return 1135; - if(i == 1136 ) return 1136; - if(i == 1137 ) return 1137; - if(i == 1138 ) return 1138; - if(i == 1139 ) return 1139; - if(i == 1140 ) return 1140; - if(i == 1141 ) return 1141; - if(i == 1142 ) return 1142; - if(i == 1143 ) return 1143; - if(i == 1144 ) return 1144; - if(i == 1145 ) return 1145; - if(i == 1146 ) return 1146; - if(i == 1147 ) return 1147; - if(i == 1148 ) return 1148; - if(i == 1149 ) return 1149; - if(i == 1150 ) return 1150; - if(i == 1151 ) return 1151; - if(i == 1152 ) return 1152; - if(i == 1153 ) return 1153; - if(i == 1154 ) return 1154; - if(i == 1155 ) return 1155; - if(i == 1156 ) return 1156; - if(i == 1157 ) return 1157; - if(i == 1158 ) return 1158; - if(i == 1159 ) return 1159; - if(i == 1160 ) return 1160; - if(i == 1161 ) return 1161; - if(i == 1162 ) return 1162; - if(i == 1163 ) return 1163; - if(i == 1164 ) return 1164; - if(i == 1165 ) return 1165; - if(i == 1166 ) return 1166; - if(i == 1167 ) return 1167; - if(i == 1168 ) return 1168; - if(i == 1169 ) return 1169; - if(i == 1170 ) return 1170; - if(i == 1171 ) return 1171; - if(i == 1172 ) return 1172; - if(i == 1173 ) return 1173; - if(i == 1174 ) return 1174; - if(i == 1175 ) return 1175; - if(i == 1176 ) return 1176; - if(i == 1177 ) return 1177; - if(i == 1178 ) return 1178; - if(i == 1179 ) return 1179; - if(i == 1180 ) return 1180; - if(i == 1181 ) return 1181; - if(i == 1182 ) return 1182; - if(i == 1183 ) return 1183; - if(i == 1184 ) return 1184; - if(i == 1185 ) return 1185; - if(i == 1186 ) return 1186; - if(i == 1187 ) return 1187; - if(i == 1188 ) return 1188; - if(i == 1189 ) return 1189; - if(i == 1190 ) return 1190; - if(i == 1191 ) return 1191; - if(i == 1192 ) return 1192; - if(i == 1193 ) return 1193; - if(i == 1194 ) return 1194; - if(i == 1195 ) return 1195; - if(i == 1196 ) return 1196; - if(i == 1197 ) return 1197; - if(i == 1198 ) return 1198; - if(i == 1199 ) return 1199; - if(i == 1200 ) return 1200; - if(i == 1201 ) return 1201; - if(i == 1202 ) return 1202; - if(i == 1203 ) return 1203; - if(i == 1204 ) return 1204; - if(i == 1205 ) return 1205; - if(i == 1206 ) return 1206; - if(i == 1207 ) return 1207; - if(i == 1208 ) return 1208; - if(i == 1209 ) return 1209; - if(i == 1210 ) return 1210; - if(i == 1211 ) return 1211; - if(i == 1212 ) return 1212; - if(i == 1213 ) return 1213; - if(i == 1214 ) return 1214; - if(i == 1215 ) return 1215; - if(i == 1216 ) return 1216; - if(i == 1217 ) return 1217; - if(i == 1218 ) return 1218; - if(i == 1219 ) return 1219; - if(i == 1220 ) return 1220; - if(i == 1221 ) return 1221; - if(i == 1222 ) return 1222; - if(i == 1223 ) return 1223; - if(i == 1224 ) return 1224; - if(i == 1225 ) return 1225; - if(i == 1226 ) return 1226; - if(i == 1227 ) return 1227; - if(i == 1228 ) return 1228; - if(i == 1229 ) return 1229; - if(i == 1230 ) return 1230; - if(i == 1231 ) return 1231; - if(i == 1232 ) return 1232; - if(i == 1233 ) return 1233; - if(i == 1234 ) return 1234; - if(i == 1235 ) return 1235; - if(i == 1236 ) return 1236; - if(i == 1237 ) return 1237; - if(i == 1238 ) return 1238; - if(i == 1239 ) return 1239; - if(i == 1240 ) return 1240; - if(i == 1241 ) return 1241; - if(i == 1242 ) return 1242; - if(i == 1243 ) return 1243; - if(i == 1244 ) return 1244; - if(i == 1245 ) return 1245; - if(i == 1246 ) return 1246; - if(i == 1247 ) return 1247; - if(i == 1248 ) return 1248; - if(i == 1249 ) return 1249; - if(i == 1250 ) return 1250; - if(i == 1251 ) return 1251; - if(i == 1252 ) return 1252; - if(i == 1253 ) return 1253; - if(i == 1254 ) return 1254; - if(i == 1255 ) return 1255; - if(i == 1256 ) return 1256; - if(i == 1257 ) return 1257; - if(i == 1258 ) return 1258; - if(i == 1259 ) return 1259; - if(i == 1260 ) return 1260; - if(i == 1261 ) return 1261; - if(i == 1262 ) return 1262; - if(i == 1263 ) return 1263; - if(i == 1264 ) return 1264; - if(i == 1265 ) return 1265; - if(i == 1266 ) return 1266; - if(i == 1267 ) return 1267; - if(i == 1268 ) return 1268; - if(i == 1269 ) return 1269; - if(i == 1270 ) return 1270; - if(i == 1271 ) return 1271; - if(i == 1272 ) return 1272; - if(i == 1273 ) return 1273; - if(i == 1274 ) return 1274; - if(i == 1275 ) return 1275; - if(i == 1276 ) return 1276; - if(i == 1277 ) return 1277; - if(i == 1278 ) return 1278; - if(i == 1279 ) return 1279; - if(i == 1280 ) return 1280; - if(i == 1281 ) return 1281; - if(i == 1282 ) return 1282; - if(i == 1283 ) return 1283; - if(i == 1284 ) return 1284; - if(i == 1285 ) return 1285; - if(i == 1286 ) return 1286; - if(i == 1287 ) return 1287; - if(i == 1288 ) return 1288; - if(i == 1289 ) return 1289; - if(i == 1290 ) return 1290; - if(i == 1291 ) return 1291; - if(i == 1292 ) return 1292; - if(i == 1293 ) return 1293; - if(i == 1294 ) return 1294; - if(i == 1295 ) return 1295; - if(i == 1296 ) return 1296; - if(i == 1297 ) return 1297; - if(i == 1298 ) return 1298; - if(i == 1299 ) return 1299; - if(i == 1300 ) return 1300; - if(i == 1301 ) return 1301; - if(i == 1302 ) return 1302; - if(i == 1303 ) return 1303; - if(i == 1304 ) return 1304; - if(i == 1305 ) return 1305; - if(i == 1306 ) return 1306; - if(i == 1307 ) return 1307; - if(i == 1308 ) return 1308; - if(i == 1309 ) return 1309; - if(i == 1310 ) return 1310; - if(i == 1311 ) return 1311; - if(i == 1312 ) return 1312; - if(i == 1313 ) return 1313; - if(i == 1314 ) return 1314; - if(i == 1315 ) return 1315; - if(i == 1316 ) return 1316; - if(i == 1317 ) return 1317; - if(i == 1318 ) return 1318; - if(i == 1319 ) return 1319; - if(i == 1320 ) return 1320; - if(i == 1321 ) return 1321; - if(i == 1322 ) return 1322; - if(i == 1323 ) return 1323; - if(i == 1324 ) return 1324; - if(i == 1325 ) return 1325; - if(i == 1326 ) return 1326; - if(i == 1327 ) return 1327; - if(i == 1328 ) return 1328; - if(i == 1329 ) return 1329; - if(i == 1330 ) return 1330; - if(i == 1331 ) return 1331; - if(i == 1332 ) return 1332; - if(i == 1333 ) return 1333; - if(i == 1334 ) return 1334; - if(i == 1335 ) return 1335; - if(i == 1336 ) return 1336; - if(i == 1337 ) return 1337; - if(i == 1338 ) return 1338; - if(i == 1339 ) return 1339; - if(i == 1340 ) return 1340; - if(i == 1341 ) return 1341; - if(i == 1342 ) return 1342; - if(i == 1343 ) return 1343; - if(i == 1344 ) return 1344; - if(i == 1345 ) return 1345; - if(i == 1346 ) return 1346; - if(i == 1347 ) return 1347; - if(i == 1348 ) return 1348; - if(i == 1349 ) return 1349; - if(i == 1350 ) return 1350; - if(i == 1351 ) return 1351; - if(i == 1352 ) return 1352; - if(i == 1353 ) return 1353; - if(i == 1354 ) return 1354; - if(i == 1355 ) return 1355; - if(i == 1356 ) return 1356; - if(i == 1357 ) return 1357; - if(i == 1358 ) return 1358; - if(i == 1359 ) return 1359; - if(i == 1360 ) return 1360; - if(i == 1361 ) return 1361; - if(i == 1362 ) return 1362; - if(i == 1363 ) return 1363; - if(i == 1364 ) return 1364; - if(i == 1365 ) return 1365; - if(i == 1366 ) return 1366; - if(i == 1367 ) return 1367; - if(i == 1368 ) return 1368; - if(i == 1369 ) return 1369; - if(i == 1370 ) return 1370; - if(i == 1371 ) return 1371; - if(i == 1372 ) return 1372; - if(i == 1373 ) return 1373; - if(i == 1374 ) return 1374; - if(i == 1375 ) return 1375; - if(i == 1376 ) return 1376; - if(i == 1377 ) return 1377; - if(i == 1378 ) return 1378; - if(i == 1379 ) return 1379; - if(i == 1380 ) return 1380; - if(i == 1381 ) return 1381; - if(i == 1382 ) return 1382; - if(i == 1383 ) return 1383; - if(i == 1384 ) return 1384; - if(i == 1385 ) return 1385; - if(i == 1386 ) return 1386; - if(i == 1387 ) return 1387; - if(i == 1388 ) return 1388; - if(i == 1389 ) return 1389; - if(i == 1390 ) return 1390; - if(i == 1391 ) return 1391; - if(i == 1392 ) return 1392; - if(i == 1393 ) return 1393; - if(i == 1394 ) return 1394; - if(i == 1395 ) return 1395; - if(i == 1396 ) return 1396; - if(i == 1397 ) return 1397; - if(i == 1398 ) return 1398; - if(i == 1399 ) return 1399; - if(i == 1400 ) return 1400; - if(i == 1401 ) return 1401; - if(i == 1402 ) return 1402; - if(i == 1403 ) return 1403; - if(i == 1404 ) return 1404; - if(i == 1405 ) return 1405; - if(i == 1406 ) return 1406; - if(i == 1407 ) return 1407; - if(i == 1408 ) return 1408; - if(i == 1409 ) return 1409; - if(i == 1410 ) return 1410; - if(i == 1411 ) return 1411; - if(i == 1412 ) return 1412; - if(i == 1413 ) return 1413; - if(i == 1414 ) return 1414; - if(i == 1415 ) return 1415; - if(i == 1416 ) return 1416; - if(i == 1417 ) return 1417; - if(i == 1418 ) return 1418; - if(i == 1419 ) return 1419; - if(i == 1420 ) return 1420; - if(i == 1421 ) return 1421; - if(i == 1422 ) return 1422; - if(i == 1423 ) return 1423; - if(i == 1424 ) return 1424; - if(i == 1425 ) return 1425; - if(i == 1426 ) return 1426; - if(i == 1427 ) return 1427; - if(i == 1428 ) return 1428; - if(i == 1429 ) return 1429; - if(i == 1430 ) return 1430; - if(i == 1431 ) return 1431; - if(i == 1432 ) return 1432; - if(i == 1433 ) return 1433; - if(i == 1434 ) return 1434; - if(i == 1435 ) return 1435; - if(i == 1436 ) return 1436; - if(i == 1437 ) return 1437; - if(i == 1438 ) return 1438; - if(i == 1439 ) return 1439; - if(i == 1440 ) return 1440; - if(i == 1441 ) return 1441; - if(i == 1442 ) return 1442; - if(i == 1443 ) return 1443; - if(i == 1444 ) return 1444; - if(i == 1445 ) return 1445; - if(i == 1446 ) return 1446; - if(i == 1447 ) return 1447; - if(i == 1448 ) return 1448; - if(i == 1449 ) return 1449; - if(i == 1450 ) return 1450; - if(i == 1451 ) return 1451; - if(i == 1452 ) return 1452; - if(i == 1453 ) return 1453; - if(i == 1454 ) return 1454; - if(i == 1455 ) return 1455; - if(i == 1456 ) return 1456; - if(i == 1457 ) return 1457; - if(i == 1458 ) return 1458; - if(i == 1459 ) return 1459; - if(i == 1460 ) return 1460; - if(i == 1461 ) return 1461; - if(i == 1462 ) return 1462; - if(i == 1463 ) return 1463; - if(i == 1464 ) return 1464; - if(i == 1465 ) return 1465; - if(i == 1466 ) return 1466; - if(i == 1467 ) return 1467; - if(i == 1468 ) return 1468; - if(i == 1469 ) return 1469; - if(i == 1470 ) return 1470; - if(i == 1471 ) return 1471; - if(i == 1472 ) return 1472; - if(i == 1473 ) return 1473; - if(i == 1474 ) return 1474; - if(i == 1475 ) return 1475; - if(i == 1476 ) return 1476; - if(i == 1477 ) return 1477; - if(i == 1478 ) return 1478; - if(i == 1479 ) return 1479; - if(i == 1480 ) return 1480; - if(i == 1481 ) return 1481; - if(i == 1482 ) return 1482; - if(i == 1483 ) return 1483; - if(i == 1484 ) return 1484; - if(i == 1485 ) return 1485; - if(i == 1486 ) return 1486; - if(i == 1487 ) return 1487; - if(i == 1488 ) return 1488; - if(i == 1489 ) return 1489; - if(i == 1490 ) return 1490; - if(i == 1491 ) return 1491; - if(i == 1492 ) return 1492; - if(i == 1493 ) return 1493; - if(i == 1494 ) return 1494; - if(i == 1495 ) return 1495; - if(i == 1496 ) return 1496; - if(i == 1497 ) return 1497; - if(i == 1498 ) return 1498; - if(i == 1499 ) return 1499; - if(i == 1500 ) return 1500; - if(i == 1501 ) return 1501; - if(i == 1502 ) return 1502; - if(i == 1503 ) return 1503; - if(i == 1504 ) return 1504; - if(i == 1505 ) return 1505; - if(i == 1506 ) return 1506; - if(i == 1507 ) return 1507; - if(i == 1508 ) return 1508; - if(i == 1509 ) return 1509; - if(i == 1510 ) return 1510; - if(i == 1511 ) return 1511; - if(i == 1512 ) return 1512; - if(i == 1513 ) return 1513; - if(i == 1514 ) return 1514; - if(i == 1515 ) return 1515; - if(i == 1516 ) return 1516; - if(i == 1517 ) return 1517; - if(i == 1518 ) return 1518; - if(i == 1519 ) return 1519; - if(i == 1520 ) return 1520; - if(i == 1521 ) return 1521; - if(i == 1522 ) return 1522; - if(i == 1523 ) return 1523; - if(i == 1524 ) return 1524; - if(i == 1525 ) return 1525; - if(i == 1526 ) return 1526; - if(i == 1527 ) return 1527; - if(i == 1528 ) return 1528; - if(i == 1529 ) return 1529; - if(i == 1530 ) return 1530; - if(i == 1531 ) return 1531; - if(i == 1532 ) return 1532; - if(i == 1533 ) return 1533; - if(i == 1534 ) return 1534; - if(i == 1535 ) return 1535; - if(i == 1536 ) return 1536; - if(i == 1537 ) return 1537; - if(i == 1538 ) return 1538; - if(i == 1539 ) return 1539; - if(i == 1540 ) return 1540; - if(i == 1541 ) return 1541; - if(i == 1542 ) return 1542; - if(i == 1543 ) return 1543; - if(i == 1544 ) return 1544; - if(i == 1545 ) return 1545; - if(i == 1546 ) return 1546; - if(i == 1547 ) return 1547; - if(i == 1548 ) return 1548; - if(i == 1549 ) return 1549; - if(i == 1550 ) return 1550; - if(i == 1551 ) return 1551; - if(i == 1552 ) return 1552; - if(i == 1553 ) return 1553; - if(i == 1554 ) return 1554; - if(i == 1555 ) return 1555; - if(i == 1556 ) return 1556; - if(i == 1557 ) return 1557; - if(i == 1558 ) return 1558; - if(i == 1559 ) return 1559; - if(i == 1560 ) return 1560; - if(i == 1561 ) return 1561; - if(i == 1562 ) return 1562; - if(i == 1563 ) return 1563; - if(i == 1564 ) return 1564; - if(i == 1565 ) return 1565; - if(i == 1566 ) return 1566; - if(i == 1567 ) return 1567; - if(i == 1568 ) return 1568; - if(i == 1569 ) return 1569; - if(i == 1570 ) return 1570; - if(i == 1571 ) return 1571; - if(i == 1572 ) return 1572; - if(i == 1573 ) return 1573; - if(i == 1574 ) return 1574; - if(i == 1575 ) return 1575; - if(i == 1576 ) return 1576; - if(i == 1577 ) return 1577; - if(i == 1578 ) return 1578; - if(i == 1579 ) return 1579; - if(i == 1580 ) return 1580; - if(i == 1581 ) return 1581; - if(i == 1582 ) return 1582; - if(i == 1583 ) return 1583; - if(i == 1584 ) return 1584; - if(i == 1585 ) return 1585; - if(i == 1586 ) return 1586; - if(i == 1587 ) return 1587; - if(i == 1588 ) return 1588; - if(i == 1589 ) return 1589; - if(i == 1590 ) return 1590; - if(i == 1591 ) return 1591; - if(i == 1592 ) return 1592; - if(i == 1593 ) return 1593; - if(i == 1594 ) return 1594; - if(i == 1595 ) return 1595; - if(i == 1596 ) return 1596; - if(i == 1597 ) return 1597; - if(i == 1598 ) return 1598; - if(i == 1599 ) return 1599; - if(i == 1600 ) return 1600; - if(i == 1601 ) return 1601; - if(i == 1602 ) return 1602; - if(i == 1603 ) return 1603; - if(i == 1604 ) return 1604; - if(i == 1605 ) return 1605; - if(i == 1606 ) return 1606; - if(i == 1607 ) return 1607; - if(i == 1608 ) return 1608; - if(i == 1609 ) return 1609; - if(i == 1610 ) return 1610; - if(i == 1611 ) return 1611; - if(i == 1612 ) return 1612; - if(i == 1613 ) return 1613; - if(i == 1614 ) return 1614; - if(i == 1615 ) return 1615; - if(i == 1616 ) return 1616; - if(i == 1617 ) return 1617; - if(i == 1618 ) return 1618; - if(i == 1619 ) return 1619; - if(i == 1620 ) return 1620; - if(i == 1621 ) return 1621; - if(i == 1622 ) return 1622; - if(i == 1623 ) return 1623; - if(i == 1624 ) return 1624; - if(i == 1625 ) return 1625; - if(i == 1626 ) return 1626; - if(i == 1627 ) return 1627; - if(i == 1628 ) return 1628; - if(i == 1629 ) return 1629; - if(i == 1630 ) return 1630; - if(i == 1631 ) return 1631; - if(i == 1632 ) return 1632; - if(i == 1633 ) return 1633; - if(i == 1634 ) return 1634; - if(i == 1635 ) return 1635; - if(i == 1636 ) return 1636; - if(i == 1637 ) return 1637; - if(i == 1638 ) return 1638; - if(i == 1639 ) return 1639; - if(i == 1640 ) return 1640; - if(i == 1641 ) return 1641; - if(i == 1642 ) return 1642; - if(i == 1643 ) return 1643; - if(i == 1644 ) return 1644; - if(i == 1645 ) return 1645; - if(i == 1646 ) return 1646; - if(i == 1647 ) return 1647; - if(i == 1648 ) return 1648; - if(i == 1649 ) return 1649; - if(i == 1650 ) return 1650; - if(i == 1651 ) return 1651; - if(i == 1652 ) return 1652; - if(i == 1653 ) return 1653; - if(i == 1654 ) return 1654; - if(i == 1655 ) return 1655; - if(i == 1656 ) return 1656; - if(i == 1657 ) return 1657; - if(i == 1658 ) return 1658; - if(i == 1659 ) return 1659; - if(i == 1660 ) return 1660; - if(i == 1661 ) return 1661; - if(i == 1662 ) return 1662; - if(i == 1663 ) return 1663; - if(i == 1664 ) return 1664; - if(i == 1665 ) return 1665; - if(i == 1666 ) return 1666; - if(i == 1667 ) return 1667; - if(i == 1668 ) return 1668; - if(i == 1669 ) return 1669; - if(i == 1670 ) return 1670; - if(i == 1671 ) return 1671; - if(i == 1672 ) return 1672; - if(i == 1673 ) return 1673; - if(i == 1674 ) return 1674; - if(i == 1675 ) return 1675; - if(i == 1676 ) return 1676; - if(i == 1677 ) return 1677; - if(i == 1678 ) return 1678; - if(i == 1679 ) return 1679; - if(i == 1680 ) return 1680; - if(i == 1681 ) return 1681; - if(i == 1682 ) return 1682; - if(i == 1683 ) return 1683; - if(i == 1684 ) return 1684; - if(i == 1685 ) return 1685; - if(i == 1686 ) return 1686; - if(i == 1687 ) return 1687; - if(i == 1688 ) return 1688; - if(i == 1689 ) return 1689; - if(i == 1690 ) return 1690; - if(i == 1691 ) return 1691; - if(i == 1692 ) return 1692; - if(i == 1693 ) return 1693; - if(i == 1694 ) return 1694; - if(i == 1695 ) return 1695; - if(i == 1696 ) return 1696; - if(i == 1697 ) return 1697; - if(i == 1698 ) return 1698; - if(i == 1699 ) return 1699; - if(i == 1700 ) return 1700; - if(i == 1701 ) return 1701; - if(i == 1702 ) return 1702; - if(i == 1703 ) return 1703; - if(i == 1704 ) return 1704; - if(i == 1705 ) return 1705; - if(i == 1706 ) return 1706; - if(i == 1707 ) return 1707; - if(i == 1708 ) return 1708; - if(i == 1709 ) return 1709; - if(i == 1710 ) return 1710; - if(i == 1711 ) return 1711; - if(i == 1712 ) return 1712; - if(i == 1713 ) return 1713; - if(i == 1714 ) return 1714; - if(i == 1715 ) return 1715; - if(i == 1716 ) return 1716; - if(i == 1717 ) return 1717; - if(i == 1718 ) return 1718; - if(i == 1719 ) return 1719; - if(i == 1720 ) return 1720; - if(i == 1721 ) return 1721; - if(i == 1722 ) return 1722; - if(i == 1723 ) return 1723; - if(i == 1724 ) return 1724; - if(i == 1725 ) return 1725; - if(i == 1726 ) return 1726; - if(i == 1727 ) return 1727; - if(i == 1728 ) return 1728; - if(i == 1729 ) return 1729; - if(i == 1730 ) return 1730; - if(i == 1731 ) return 1731; - if(i == 1732 ) return 1732; - if(i == 1733 ) return 1733; - if(i == 1734 ) return 1734; - if(i == 1735 ) return 1735; - if(i == 1736 ) return 1736; - if(i == 1737 ) return 1737; - if(i == 1738 ) return 1738; - if(i == 1739 ) return 1739; - if(i == 1740 ) return 1740; - if(i == 1741 ) return 1741; - if(i == 1742 ) return 1742; - if(i == 1743 ) return 1743; - if(i == 1744 ) return 1744; - if(i == 1745 ) return 1745; - if(i == 1746 ) return 1746; - if(i == 1747 ) return 1747; - if(i == 1748 ) return 1748; - if(i == 1749 ) return 1749; - if(i == 1750 ) return 1750; - if(i == 1751 ) return 1751; - if(i == 1752 ) return 1752; - if(i == 1753 ) return 1753; - if(i == 1754 ) return 1754; - if(i == 1755 ) return 1755; - if(i == 1756 ) return 1756; - if(i == 1757 ) return 1757; - if(i == 1758 ) return 1758; - if(i == 1759 ) return 1759; - if(i == 1760 ) return 1760; - if(i == 1761 ) return 1761; - if(i == 1762 ) return 1762; - if(i == 1763 ) return 1763; - if(i == 1764 ) return 1764; - if(i == 1765 ) return 1765; - if(i == 1766 ) return 1766; - if(i == 1767 ) return 1767; - if(i == 1768 ) return 1768; - if(i == 1769 ) return 1769; - if(i == 1770 ) return 1770; - if(i == 1771 ) return 1771; - if(i == 1772 ) return 1772; - if(i == 1773 ) return 1773; - if(i == 1774 ) return 1774; - if(i == 1775 ) return 1775; - if(i == 1776 ) return 1776; - if(i == 1777 ) return 1777; - if(i == 1778 ) return 1778; - if(i == 1779 ) return 1779; - if(i == 1780 ) return 1780; - if(i == 1781 ) return 1781; - if(i == 1782 ) return 1782; - if(i == 1783 ) return 1783; - if(i == 1784 ) return 1784; - if(i == 1785 ) return 1785; - if(i == 1786 ) return 1786; - if(i == 1787 ) return 1787; - if(i == 1788 ) return 1788; - if(i == 1789 ) return 1789; - if(i == 1790 ) return 1790; - if(i == 1791 ) return 1791; - if(i == 1792 ) return 1792; - if(i == 1793 ) return 1793; - if(i == 1794 ) return 1794; - if(i == 1795 ) return 1795; - if(i == 1796 ) return 1796; - if(i == 1797 ) return 1797; - if(i == 1798 ) return 1798; - if(i == 1799 ) return 1799; - if(i == 1800 ) return 1800; - if(i == 1801 ) return 1801; - if(i == 1802 ) return 1802; - if(i == 1803 ) return 1803; - if(i == 1804 ) return 1804; - if(i == 1805 ) return 1805; - if(i == 1806 ) return 1806; - if(i == 1807 ) return 1807; - if(i == 1808 ) return 1808; - if(i == 1809 ) return 1809; - if(i == 1810 ) return 1810; - if(i == 1811 ) return 1811; - if(i == 1812 ) return 1812; - if(i == 1813 ) return 1813; - if(i == 1814 ) return 1814; - if(i == 1815 ) return 1815; - if(i == 1816 ) return 1816; - if(i == 1817 ) return 1817; - if(i == 1818 ) return 1818; - if(i == 1819 ) return 1819; - if(i == 1820 ) return 1820; - if(i == 1821 ) return 1821; - if(i == 1822 ) return 1822; - if(i == 1823 ) return 1823; - if(i == 1824 ) return 1824; - if(i == 1825 ) return 1825; - if(i == 1826 ) return 1826; - if(i == 1827 ) return 1827; - if(i == 1828 ) return 1828; - if(i == 1829 ) return 1829; - if(i == 1830 ) return 1830; - if(i == 1831 ) return 1831; - if(i == 1832 ) return 1832; - if(i == 1833 ) return 1833; - if(i == 1834 ) return 1834; - if(i == 1835 ) return 1835; - if(i == 1836 ) return 1836; - if(i == 1837 ) return 1837; - if(i == 1838 ) return 1838; - if(i == 1839 ) return 1839; - if(i == 1840 ) return 1840; - if(i == 1841 ) return 1841; - if(i == 1842 ) return 1842; - if(i == 1843 ) return 1843; - if(i == 1844 ) return 1844; - if(i == 1845 ) return 1845; - if(i == 1846 ) return 1846; - if(i == 1847 ) return 1847; - if(i == 1848 ) return 1848; - if(i == 1849 ) return 1849; - if(i == 1850 ) return 1850; - if(i == 1851 ) return 1851; - if(i == 1852 ) return 1852; - if(i == 1853 ) return 1853; - if(i == 1854 ) return 1854; - if(i == 1855 ) return 1855; - if(i == 1856 ) return 1856; - if(i == 1857 ) return 1857; - if(i == 1858 ) return 1858; - if(i == 1859 ) return 1859; - if(i == 1860 ) return 1860; - if(i == 1861 ) return 1861; - if(i == 1862 ) return 1862; - if(i == 1863 ) return 1863; - if(i == 1864 ) return 1864; - if(i == 1865 ) return 1865; - if(i == 1866 ) return 1866; - if(i == 1867 ) return 1867; - if(i == 1868 ) return 1868; - if(i == 1869 ) return 1869; - if(i == 1870 ) return 1870; - if(i == 1871 ) return 1871; - if(i == 1872 ) return 1872; - if(i == 1873 ) return 1873; - if(i == 1874 ) return 1874; - if(i == 1875 ) return 1875; - if(i == 1876 ) return 1876; - if(i == 1877 ) return 1877; - if(i == 1878 ) return 1878; - if(i == 1879 ) return 1879; - if(i == 1880 ) return 1880; - if(i == 1881 ) return 1881; - if(i == 1882 ) return 1882; - if(i == 1883 ) return 1883; - if(i == 1884 ) return 1884; - if(i == 1885 ) return 1885; - if(i == 1886 ) return 1886; - if(i == 1887 ) return 1887; - if(i == 1888 ) return 1888; - if(i == 1889 ) return 1889; - if(i == 1890 ) return 1890; - if(i == 1891 ) return 1891; - if(i == 1892 ) return 1892; - if(i == 1893 ) return 1893; - if(i == 1894 ) return 1894; - if(i == 1895 ) return 1895; - if(i == 1896 ) return 1896; - if(i == 1897 ) return 1897; - if(i == 1898 ) return 1898; - if(i == 1899 ) return 1899; - if(i == 1900 ) return 1900; - if(i == 1901 ) return 1901; - if(i == 1902 ) return 1902; - if(i == 1903 ) return 1903; - if(i == 1904 ) return 1904; - if(i == 1905 ) return 1905; - if(i == 1906 ) return 1906; - if(i == 1907 ) return 1907; - if(i == 1908 ) return 1908; - if(i == 1909 ) return 1909; - if(i == 1910 ) return 1910; - if(i == 1911 ) return 1911; - if(i == 1912 ) return 1912; - if(i == 1913 ) return 1913; - if(i == 1914 ) return 1914; - if(i == 1915 ) return 1915; - if(i == 1916 ) return 1916; - if(i == 1917 ) return 1917; - if(i == 1918 ) return 1918; - if(i == 1919 ) return 1919; - if(i == 1920 ) return 1920; - if(i == 1921 ) return 1921; - if(i == 1922 ) return 1922; - if(i == 1923 ) return 1923; - if(i == 1924 ) return 1924; - if(i == 1925 ) return 1925; - if(i == 1926 ) return 1926; - if(i == 1927 ) return 1927; - if(i == 1928 ) return 1928; - if(i == 1929 ) return 1929; - if(i == 1930 ) return 1930; - if(i == 1931 ) return 1931; - if(i == 1932 ) return 1932; - if(i == 1933 ) return 1933; - if(i == 1934 ) return 1934; - if(i == 1935 ) return 1935; - if(i == 1936 ) return 1936; - if(i == 1937 ) return 1937; - if(i == 1938 ) return 1938; - if(i == 1939 ) return 1939; - if(i == 1940 ) return 1940; - if(i == 1941 ) return 1941; - if(i == 1942 ) return 1942; - if(i == 1943 ) return 1943; - if(i == 1944 ) return 1944; - if(i == 1945 ) return 1945; - if(i == 1946 ) return 1946; - if(i == 1947 ) return 1947; - if(i == 1948 ) return 1948; - if(i == 1949 ) return 1949; - if(i == 1950 ) return 1950; - if(i == 1951 ) return 1951; - if(i == 1952 ) return 1952; - if(i == 1953 ) return 1953; - if(i == 1954 ) return 1954; - if(i == 1955 ) return 1955; - if(i == 1956 ) return 1956; - if(i == 1957 ) return 1957; - if(i == 1958 ) return 1958; - if(i == 1959 ) return 1959; - if(i == 1960 ) return 1960; - if(i == 1961 ) return 1961; - if(i == 1962 ) return 1962; - if(i == 1963 ) return 1963; - if(i == 1964 ) return 1964; - if(i == 1965 ) return 1965; - if(i == 1966 ) return 1966; - if(i == 1967 ) return 1967; - if(i == 1968 ) return 1968; - if(i == 1969 ) return 1969; - if(i == 1970 ) return 1970; - if(i == 1971 ) return 1971; - if(i == 1972 ) return 1972; - if(i == 1973 ) return 1973; - if(i == 1974 ) return 1974; - if(i == 1975 ) return 1975; - if(i == 1976 ) return 1976; - if(i == 1977 ) return 1977; - if(i == 1978 ) return 1978; - if(i == 1979 ) return 1979; - if(i == 1980 ) return 1980; - if(i == 1981 ) return 1981; - if(i == 1982 ) return 1982; - if(i == 1983 ) return 1983; - if(i == 1984 ) return 1984; - if(i == 1985 ) return 1985; - if(i == 1986 ) return 1986; - if(i == 1987 ) return 1987; - if(i == 1988 ) return 1988; - if(i == 1989 ) return 1989; - if(i == 1990 ) return 1990; - if(i == 1991 ) return 1991; - if(i == 1992 ) return 1992; - if(i == 1993 ) return 1993; - if(i == 1994 ) return 1994; - if(i == 1995 ) return 1995; - if(i == 1996 ) return 1996; - if(i == 1997 ) return 1997; - if(i == 1998 ) return 1998; - if(i == 1999 ) return 1999; - } finally { - int x = 0; - x += 1; - x += 2; - x += 3; - x += 4; - x += 5; - x += 6; - x += 7; - x += 8; - x += 9; - } - return 0; - } -} diff --git a/langtools/test/tools/javac/ArrayCloneCodeGen.java b/langtools/test/tools/javac/ArrayCloneCodeGen.java deleted file mode 100644 index ae496ef706a..00000000000 --- a/langtools/test/tools/javac/ArrayCloneCodeGen.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright (c) 1999, 2001, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -/* - * @test - * @bug 4267335 - * @summary Verify that code generated for Array.clone() with -target 1.2 passes verifier. - * @author maddox - * - * @run compile -source 1.3 -target 1.2 ArrayCloneCodeGen.java - * @run main/othervm -Xverify:all ArrayCloneCodeGen - */ - -public class ArrayCloneCodeGen { - - public static void main(String[] args) {} - - private String[] args = null; - - public String[] getArgs() { - return (String []) (args.clone()); - } -} diff --git a/langtools/test/tools/javac/ClassLit.java b/langtools/test/tools/javac/ClassLit.java index 4e26c9c43eb..9145ae23c6e 100644 --- a/langtools/test/tools/javac/ClassLit.java +++ b/langtools/test/tools/javac/ClassLit.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -26,9 +26,6 @@ * @bug 4884387 * @summary Use ldc instruction for class literals * @author gafter - * - * @compile -source 1.5 -target 1.5 ClassLit.java - * @run main ClassLit */ public class ClassLit { diff --git a/langtools/test/tools/javac/ConditionalArgTypes_2.java b/langtools/test/tools/javac/ConditionalArgTypes_2.java index b0fc6759b01..e5f5b0b7d69 100644 --- a/langtools/test/tools/javac/ConditionalArgTypes_2.java +++ b/langtools/test/tools/javac/ConditionalArgTypes_2.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -27,7 +27,6 @@ * @summary Verify that both branches of a conditional expression must agree in type. * @author maddox * - * @compile/fail -source 1.4 ConditionalArgTypes_2.java * @compile ConditionalArgTypes_2.java */ diff --git a/langtools/test/tools/javac/ConditionalClass.java b/langtools/test/tools/javac/ConditionalClass.java deleted file mode 100644 index 4628e4f3b3f..00000000000 --- a/langtools/test/tools/javac/ConditionalClass.java +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -/* - * @test - * @bug 4949627 - * @summary javac crashes on code for new rule for semantics of ? without -source 1.5 - * @author gafter - * - * @compile -source 1.4 ConditionalClass.java - */ - -package conditional.clazz; - -class A{} -class B{} - -public class ConditionalClass { - void foo(){ - boolean b = false; - Class a = b ? A.class : B.class; - System.out.println("a is " + a.getName()); - } - - public static void main(String[] args) - { - new ConditionalClass().foo(); - } -} diff --git a/langtools/test/tools/javac/JsrRet.java b/langtools/test/tools/javac/JsrRet.java index 5158b6ac49e..576f9b3b83a 100644 --- a/langtools/test/tools/javac/JsrRet.java +++ b/langtools/test/tools/javac/JsrRet.java @@ -27,7 +27,7 @@ * @summary StackOverflowError from javac * @author gafter * - * @compile -source 1.5 -target 1.5 JsrRet.java + * @compile JsrRet.java */ package jsr.ret; diff --git a/langtools/test/tools/javac/NoNoClassDefFoundErrorError.java b/langtools/test/tools/javac/NoNoClassDefFoundErrorError.java deleted file mode 100644 index 1ad32d142a2..00000000000 --- a/langtools/test/tools/javac/NoNoClassDefFoundErrorError.java +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright (c) 2001, 2004, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -/* - * @test - * @bug 4313429 - * @summary Compiling .class on CLDC crashed the compiler. - * - * @compile/fail -source 1.4 -target 1.4 -XDfailcomplete=java.lang.NoClassDefFoundError NoNoClassDefFoundErrorError.java - */ - -class NoNoClassDefFoundErrorError { - public static void main() { - Class self = NoNoClassDefFoundErrorError.class; - } -} diff --git a/langtools/test/tools/javac/T6266772.java b/langtools/test/tools/javac/T6266772.java index 76f2f39fd88..8a5e5133766 100644 --- a/langtools/test/tools/javac/T6266772.java +++ b/langtools/test/tools/javac/T6266772.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -26,9 +26,6 @@ * @bug 6266772 * @summary javac crashes, assertion failure in Lower.java * @author Peter von der Ah\u00e9 - * @compile/fail -source 1.4 T6266772.java - * @compile T6266772.java - * @run main T6266772 */ public class T6266772 { diff --git a/langtools/test/tools/javac/T6557865.java b/langtools/test/tools/javac/T6557865.java deleted file mode 100644 index 3ac154b52b2..00000000000 --- a/langtools/test/tools/javac/T6557865.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -/* - * @test - * @bug 6557865 - * @summary -source 5 -target 5 should not put ACC_SYNTHETIC on package-info - * @author Wei Tao - * @compile T6557865.java - * @compile -source 5 -target 5 T6232928/package-info.java - * @run main T6557865 - */ - -import java.io.*; -import java.lang.reflect.Modifier; - -public class T6557865 { - public static void main(String... args) throws Exception { - Class pkginfo_cls = Class.forName("T6232928.package-info"); - int mod = pkginfo_cls.getModifiers(); - if ((mod & 0x1000) != 0) { - throw new AssertionError("Test failed: interface package-info shouldn't be synthetic in -target 5."); - } - } -} diff --git a/langtools/test/tools/javac/UplevelFromAnonInSuperCall.java b/langtools/test/tools/javac/UplevelFromAnonInSuperCall.java index c17fd3eb6fd..bd40fc7426d 100644 --- a/langtools/test/tools/javac/UplevelFromAnonInSuperCall.java +++ b/langtools/test/tools/javac/UplevelFromAnonInSuperCall.java @@ -29,7 +29,6 @@ * @author maddox (cribbed from bracha/lillibridge) gafter * * @compile UplevelFromAnonInSuperCall.java - * @compile/fail -source 1.4 UplevelFromAnonInSuperCall.java */ class UplevelFromAnonInSuperCall { diff --git a/langtools/test/tools/javac/annotations/neg/Dep.java b/langtools/test/tools/javac/annotations/neg/Dep.java index 4493366af78..ff83dc761fd 100644 --- a/langtools/test/tools/javac/annotations/neg/Dep.java +++ b/langtools/test/tools/javac/annotations/neg/Dep.java @@ -27,7 +27,6 @@ * @summary Please add annotation Deprecated to supplant the javadoc tag * @author gafter * - * @compile -source 1.4 -Xlint:-options -Xlint:dep-ann -Werror Dep.java * @compile/fail -Xlint:dep-ann -Werror Dep.java * @compile -Xlint:dep-ann Dep.java */ diff --git a/langtools/test/tools/javac/annotations/neg/MixedSource.java b/langtools/test/tools/javac/annotations/neg/MixedSource.java deleted file mode 100644 index 30df4391289..00000000000 --- a/langtools/test/tools/javac/annotations/neg/MixedSource.java +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright (c) 2004, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -/* - * @test - * @bug 5036565 - * @summary Annotations definitions are allowed using -source 1.4 but not annotations - * @author gafter - * - * @compile/fail -source 1.4 MixedSource.java - */ - -package mixed.source; - -@interface foo {} diff --git a/langtools/test/tools/javac/annotations/typeAnnotations/classfile/ClassfileTestHelper.java b/langtools/test/tools/javac/annotations/typeAnnotations/classfile/ClassfileTestHelper.java index 22280b44109..6beae3afd8f 100644 --- a/langtools/test/tools/javac/annotations/typeAnnotations/classfile/ClassfileTestHelper.java +++ b/langtools/test/tools/javac/annotations/typeAnnotations/classfile/ClassfileTestHelper.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -49,7 +49,7 @@ public class ClassfileTestHelper { File compile(File f) { int rc = com.sun.tools.javac.Main.compile(new String[] { - "-source", "1.8", "-g", f.getPath() }); + "-g", f.getPath() }); if (rc != 0) throw new Error("compilation failed. rc=" + rc); String path = f.getPath(); diff --git a/langtools/test/tools/javac/annotations/typeAnnotations/classfile/NoTargetAnnotations.java b/langtools/test/tools/javac/annotations/typeAnnotations/classfile/NoTargetAnnotations.java index ccc3a0db1a5..d33e3d9ebe0 100644 --- a/langtools/test/tools/javac/annotations/typeAnnotations/classfile/NoTargetAnnotations.java +++ b/langtools/test/tools/javac/annotations/typeAnnotations/classfile/NoTargetAnnotations.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -146,7 +146,7 @@ public class NoTargetAnnotations { } File compileTestFile(File f) { - int rc = com.sun.tools.javac.Main.compile(new String[] { "-XDTA:writer", "-source", "1.8", "-g", f.getPath() }); + int rc = com.sun.tools.javac.Main.compile(new String[] { "-XDTA:writer", "-g", f.getPath() }); if (rc != 0) throw new Error("compilation failed. rc=" + rc); String path = f.getPath(); diff --git a/langtools/test/tools/javac/annotations/typeAnnotations/referenceinfos/Driver.java b/langtools/test/tools/javac/annotations/typeAnnotations/referenceinfos/Driver.java index cb1ceafaa53..c1d226a3b78 100644 --- a/langtools/test/tools/javac/annotations/typeAnnotations/referenceinfos/Driver.java +++ b/langtools/test/tools/javac/annotations/typeAnnotations/referenceinfos/Driver.java @@ -180,7 +180,6 @@ public class Driver { protected File compileTestFile(File f, String testClass, String... extraParams) { List options = new ArrayList<>(); - options.addAll(Arrays.asList("-source", "1.8")); options.addAll(Arrays.asList(extraParams)); options.add(f.getPath()); int rc = com.sun.tools.javac.Main.compile(options.toArray(new String[options.size()])); diff --git a/langtools/test/tools/javac/api/T6265137.java b/langtools/test/tools/javac/api/T6265137.java index 9eabaf6b605..1b86c565359 100644 --- a/langtools/test/tools/javac/api/T6265137.java +++ b/langtools/test/tools/javac/api/T6265137.java @@ -49,6 +49,6 @@ public class T6265137 { String srcdir = System.getProperty("test.src"); Iterable files = fm.getJavaFileObjectsFromFiles(Arrays.asList(new File(srcdir, "T6265137a.java"))); - javac.getTask(null, fm, dl, Arrays.asList("-target","1.5"), null, files).call(); + javac.getTask(null, fm, dl, Arrays.asList("-target","9"), null, files).call(); } } diff --git a/langtools/test/tools/javac/boxing/NoBoxingBool.java b/langtools/test/tools/javac/boxing/NoBoxingBool.java deleted file mode 100644 index 5fc1d6dfb1d..00000000000 --- a/langtools/test/tools/javac/boxing/NoBoxingBool.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright (c) 2004, 2006, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -/* - * @test - * @bug 6177400 - * @summary Boxing allowed with -source 1.4 - * @author Peter von der Ah\u00e9 - * @compile/fail -source 1.4 NoBoxingBool.java - */ - -public class NoBoxingBool { - Boolean b = false; -} diff --git a/langtools/test/tools/javac/boxing/NoBoxingByte.java b/langtools/test/tools/javac/boxing/NoBoxingByte.java deleted file mode 100644 index b4bbf41aa64..00000000000 --- a/langtools/test/tools/javac/boxing/NoBoxingByte.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright (c) 2004, 2006, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -/* - * @test - * @bug 6177400 - * @summary Boxing allowed with -source 1.4 - * @author Peter von der Ah\u00e9 - * @compile/fail -source 1.4 NoBoxingByte.java - */ - -public class NoBoxingByte { - Byte b = 0; -} diff --git a/langtools/test/tools/javac/boxing/NoBoxingChar.java b/langtools/test/tools/javac/boxing/NoBoxingChar.java deleted file mode 100644 index f8b757e4bb5..00000000000 --- a/langtools/test/tools/javac/boxing/NoBoxingChar.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright (c) 2004, 2006, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -/* - * @test - * @bug 6177400 - * @summary Boxing allowed with -source 1.4 - * @author Peter von der Ah\u00e9 - * @compile/fail -source 1.4 NoBoxingChar.java - */ - -public class NoBoxingChar { - Character c = '\u0000'; -} diff --git a/langtools/test/tools/javac/boxing/NoBoxingDouble.java b/langtools/test/tools/javac/boxing/NoBoxingDouble.java deleted file mode 100644 index faac03163e1..00000000000 --- a/langtools/test/tools/javac/boxing/NoBoxingDouble.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright (c) 2004, 2006, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -/* - * @test - * @bug 6177400 - * @summary Boxing allowed with -source 1.4 - * @author Peter von der Ah\u00e9 - * @compile/fail -source 1.4 NoBoxingDouble.java - */ - -public class NoBoxingDouble { - Double d = 0D; -} diff --git a/langtools/test/tools/javac/boxing/NoBoxingFloat.java b/langtools/test/tools/javac/boxing/NoBoxingFloat.java deleted file mode 100644 index 8c81b985aa9..00000000000 --- a/langtools/test/tools/javac/boxing/NoBoxingFloat.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright (c) 2004, 2006, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -/* - * @test - * @bug 6177400 - * @summary Boxing allowed with -source 1.4 - * @author Peter von der Ah\u00e9 - * @compile/fail -source 1.4 NoBoxingFloat.java - */ - -public class NoBoxingFloat { - Float f = 0F; -} diff --git a/langtools/test/tools/javac/boxing/NoBoxingInt.java b/langtools/test/tools/javac/boxing/NoBoxingInt.java deleted file mode 100644 index c66b6e33a11..00000000000 --- a/langtools/test/tools/javac/boxing/NoBoxingInt.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright (c) 2004, 2006, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -/* - * @test - * @bug 6177400 - * @summary Boxing allowed with -source 1.4 - * @author Peter von der Ah\u00e9 - * @compile/fail -source 1.4 NoBoxingInt.java - */ - -public class NoBoxingInt { - Integer i = 0; -} diff --git a/langtools/test/tools/javac/boxing/NoBoxingLong.java b/langtools/test/tools/javac/boxing/NoBoxingLong.java deleted file mode 100644 index afc51498105..00000000000 --- a/langtools/test/tools/javac/boxing/NoBoxingLong.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright (c) 2004, 2006, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -/* - * @test - * @bug 6177400 - * @summary Boxing allowed with -source 1.4 - * @author Peter von der Ah\u00e9 - * @compile/fail -source 1.4 NoBoxingLong.java - */ - -public class NoBoxingLong { - Long l = 0L; -} diff --git a/langtools/test/tools/javac/boxing/NoBoxingShort.java b/langtools/test/tools/javac/boxing/NoBoxingShort.java deleted file mode 100644 index 70c50f8defd..00000000000 --- a/langtools/test/tools/javac/boxing/NoBoxingShort.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright (c) 2004, 2006, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -/* - * @test - * @bug 6177400 - * @summary Boxing allowed with -source 1.4 - * @author Peter von der Ah\u00e9 - * @compile/fail -source 1.4 NoBoxingShort.java - */ - -public class NoBoxingShort { - Short s = 0; -} diff --git a/langtools/test/tools/javac/classfiles/ClassVersionChecker.java b/langtools/test/tools/javac/classfiles/ClassVersionChecker.java index f08d850d035..2fa5a7ed799 100644 --- a/langtools/test/tools/javac/classfiles/ClassVersionChecker.java +++ b/langtools/test/tools/javac/classfiles/ClassVersionChecker.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -37,7 +37,7 @@ import java.util.regex.*; public class ClassVersionChecker { int errors; - String[] jdk = {"","1.2","1.3","1.4","1.5","1.6","1.7","1.8"}; + String[] jdk = {"","1.6","1.7","1.8"}; File javaFile = null; public static void main(String[] args) throws Throwable { @@ -47,7 +47,7 @@ public class ClassVersionChecker { void run() throws Exception { writeTestFile(); /* Rules applicable for -source and -target combinations - * 1. If both empty, version num is for 1.7 + * 1. If both empty, version num is for the current release * 2. If source is not empty and target is empty, version is based on source * 3. If both non-empty, version is based on target */ @@ -57,14 +57,10 @@ public class ClassVersionChecker { * -1 => invalid combinations */ int[][] ver = - {{52, -1, -1, -1, -1, -1, -1, -1}, - {48, 46, 47, 48, 49, 50, 51, 52}, - {48, 46, 47, 48, 49, 50, 51, 52}, - {48, -1, -1, 48, 49, 50, 51, 52}, - {52, -1, -1, -1, 49, 50, 51, 52}, - {52, -1, -1, -1, -1, 50, 51, 52}, - {52, -1, -1, -1, -1, -1, 51, 52}, - {52, -1, -1, -1, -1, -1, -1, 52}}; + {{52, -1, -1, -1}, + {52, 50, 51, 52}, + {52, -1, 51, 52}, + {52, -1, -1, 52}}; // Loop to run all possible combinations of source/target values for (int i = 0; i< ver.length; i++) { diff --git a/langtools/test/tools/javac/enum/6384542/T6384542.java b/langtools/test/tools/javac/enum/6384542/T6384542.java deleted file mode 100644 index 234ba485864..00000000000 --- a/langtools/test/tools/javac/enum/6384542/T6384542.java +++ /dev/null @@ -1,24 +0,0 @@ -/** - * @test /nodynamiccopyright/ - * @bug 6384542 - * @summary crash: test/tools/javac/versions/check.sh - * @author Peter von der Ah\u00e9 - * @compile/fail -source 1.4 -Xlint:-options T6384542.java - * @compile/fail/ref=T6384542.out -source 1.4 -Xlint:-options -XDrawDiagnostics T6384542.java - */ - -import static java.lang.Math.sin; - -public enum A { } -class B { - int i = 0xCafe.BabeP1; - List l; - public static void main(String... args) { - for (String arg : args) { - System.out.println(arg); - } - } - @Override - public String toString() { return null; } -} -public klass C { } diff --git a/langtools/test/tools/javac/enum/6384542/T6384542.out b/langtools/test/tools/javac/enum/6384542/T6384542.out deleted file mode 100644 index 98480841e69..00000000000 --- a/langtools/test/tools/javac/enum/6384542/T6384542.out +++ /dev/null @@ -1,9 +0,0 @@ -T6384542.java:10:8: compiler.err.static.import.not.supported.in.source: 1.4 -T6384542.java:12:8: compiler.err.enums.not.supported.in.source: 1.4 -T6384542.java:14:13: compiler.err.unsupported.fp.lit: 1.4 -T6384542.java:15:9: compiler.err.generics.not.supported.in.source: 1.4 -T6384542.java:16:35: compiler.err.varargs.not.supported.in.source: 1.4 -T6384542.java:17:25: compiler.err.foreach.not.supported.in.source: 1.4 -T6384542.java:21:6: compiler.err.annotations.not.supported.in.source: 1.4 -T6384542.java:24:8: compiler.err.expected3: class, interface, enum -8 errors diff --git a/langtools/test/tools/javac/enum/6384542/T6384542a.java b/langtools/test/tools/javac/enum/6384542/T6384542a.java deleted file mode 100644 index f313b73f167..00000000000 --- a/langtools/test/tools/javac/enum/6384542/T6384542a.java +++ /dev/null @@ -1,14 +0,0 @@ -/** - * @test /nodynamiccopyright/ - * @bug 6384542 - * @summary crash: test/tools/javac/versions/check.sh - * @author Peter von der Ah\u00e9 - * @compile/fail -source 5 T6384542a.java - * @compile -source 1.4 T6384542a.java - * @compile/fail/ref=T6384542a_5.out -source 5 -Xlint:-options -XDrawDiagnostics T6384542a.java - * @compile/ref=T6384542a_1_4.out -source 1.4 -Xlint:-options -XDrawDiagnostics T6384542a.java - */ - -public class T6384542a { - T6384542a enum = null; -} diff --git a/langtools/test/tools/javac/enum/6384542/T6384542a_1_4.out b/langtools/test/tools/javac/enum/6384542/T6384542a_1_4.out deleted file mode 100644 index 85671926d23..00000000000 --- a/langtools/test/tools/javac/enum/6384542/T6384542a_1_4.out +++ /dev/null @@ -1,2 +0,0 @@ -T6384542a.java:13:15: compiler.warn.enum.as.identifier -1 warning diff --git a/langtools/test/tools/javac/enum/6384542/T6384542a_5.out b/langtools/test/tools/javac/enum/6384542/T6384542a_5.out deleted file mode 100644 index 0ed7fa6a530..00000000000 --- a/langtools/test/tools/javac/enum/6384542/T6384542a_5.out +++ /dev/null @@ -1,2 +0,0 @@ -T6384542a.java:13:15: compiler.err.enum.as.identifier -1 error diff --git a/langtools/test/tools/javac/enum/EnumAsIdentifier.java b/langtools/test/tools/javac/enum/EnumAsIdentifier.java index 30bc822e49b..65392ba1a95 100644 --- a/langtools/test/tools/javac/enum/EnumAsIdentifier.java +++ b/langtools/test/tools/javac/enum/EnumAsIdentifier.java @@ -3,8 +3,6 @@ * @bug 8025537 * @author sogoel * @summary enum keyword used as an identifier - * @compile/ref=EnumAsIdentifier4.out -XDrawDiagnostics -source 1.4 EnumAsIdentifier.java - * @compile/fail/ref=EnumAsIdentifier5.out -XDrawDiagnostics -source 1.5 EnumAsIdentifier.java * @compile/fail/ref=EnumAsIdentifier.out -XDrawDiagnostics EnumAsIdentifier.java */ diff --git a/langtools/test/tools/javac/enum/EnumAsIdentifier.out b/langtools/test/tools/javac/enum/EnumAsIdentifier.out index eeb9e842600..35051fd092c 100644 --- a/langtools/test/tools/javac/enum/EnumAsIdentifier.out +++ b/langtools/test/tools/javac/enum/EnumAsIdentifier.out @@ -1,2 +1,2 @@ -EnumAsIdentifier.java:13:9: compiler.err.enum.as.identifier +EnumAsIdentifier.java:11:9: compiler.err.enum.as.identifier 1 error diff --git a/langtools/test/tools/javac/enum/EnumAsIdentifier4.out b/langtools/test/tools/javac/enum/EnumAsIdentifier4.out deleted file mode 100644 index 40c72a84629..00000000000 --- a/langtools/test/tools/javac/enum/EnumAsIdentifier4.out +++ /dev/null @@ -1,6 +0,0 @@ -- compiler.warn.source.no.bootclasspath: 1.4 -- compiler.warn.option.obsolete.source: 1.4 -- compiler.warn.option.obsolete.target: 1.4 -- compiler.warn.option.obsolete.suppression -EnumAsIdentifier.java:13:9: compiler.warn.enum.as.identifier -5 warnings diff --git a/langtools/test/tools/javac/enum/EnumAsIdentifier5.out b/langtools/test/tools/javac/enum/EnumAsIdentifier5.out deleted file mode 100644 index dead5c41a2b..00000000000 --- a/langtools/test/tools/javac/enum/EnumAsIdentifier5.out +++ /dev/null @@ -1,6 +0,0 @@ -- compiler.warn.source.no.bootclasspath: 1.5 -- compiler.warn.option.obsolete.source: 1.5 -- compiler.warn.option.obsolete.suppression -EnumAsIdentifier.java:13:9: compiler.err.enum.as.identifier -1 error -3 warnings diff --git a/langtools/test/tools/javac/enum/FauxEnum2.java b/langtools/test/tools/javac/enum/FauxEnum2.java deleted file mode 100644 index dea62615a83..00000000000 --- a/langtools/test/tools/javac/enum/FauxEnum2.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright (c) 2004, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -/* - * @test - * @bug 5009574 - * @summary verify java.lang.Enum can't be directly subclassed - * @author Joseph D. Darcy - * - * @compile/fail -source 1.4 FauxEnum2.java - */ - -public class FauxEnum2 extends java.lang.Enum { - FauxEnum2() { - super("", 0); - } -} diff --git a/langtools/test/tools/javac/foreach/T6682380.java b/langtools/test/tools/javac/foreach/T6682380.java deleted file mode 100644 index 7c3eb84074a..00000000000 --- a/langtools/test/tools/javac/foreach/T6682380.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright (c) 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. - */ - -/* - * @test - * @bug 6682380 6679509 - * @summary Foreach loop with generics inside finally block crashes javac with -target 1.5 - * @author Jan Lahoda, Maurizio Cimadamore - * @compile -source 1.5 -target 1.5 T6682380.java - */ - -import java.util.List; - -public class T6682380 { - - public static void main(String[] args) { - try { - } finally { - List> l = null; - T6682380[] a = null; - for (T6682380 e1 : l); - for (T6682380 e2 : a); - } - } -} diff --git a/langtools/test/tools/javac/generics/BridgeRestype.java b/langtools/test/tools/javac/generics/BridgeRestype.java deleted file mode 100644 index 2107efa4260..00000000000 --- a/langtools/test/tools/javac/generics/BridgeRestype.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright (c) 2003, 2004, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -/* - * @test - * @bug 4902704 - * @summary javac generates inappropriate bridge methods in -source 1.4 - * @author gafter - * - * @compile -source 1.4 -target 1.4 BridgeRestype.java - * @run main BridgeRestype - */ - -import java.util.*; - -public class BridgeRestype extends Vector { - public static void main(String[] args) { - BridgeRestype t = new BridgeRestype(); - for (int i=0; i { - public void foo(T t) { } - } - static class B extends A { - public void foo(String t) { } - } -} diff --git a/langtools/test/tools/javac/generics/compat/OverrideBridge2.java b/langtools/test/tools/javac/generics/compat/OverrideBridge2.java deleted file mode 100644 index 57edb5348a7..00000000000 --- a/langtools/test/tools/javac/generics/compat/OverrideBridge2.java +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * 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. - */ - -class OverrideBridge2 { - static class B extends OverrideBridge1.B { - public void foo(Object o) { } - } -} diff --git a/langtools/test/tools/javac/generics/compat/OverrideBridge3.java b/langtools/test/tools/javac/generics/compat/OverrideBridge3.java deleted file mode 100644 index 87a9e2cb251..00000000000 --- a/langtools/test/tools/javac/generics/compat/OverrideBridge3.java +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright (c) 2004, Oracle and/or its affiliates. All rights reserved. - * 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. - */ - -class OverrideBridge3 { - static class C extends OverrideBridge2.B { - } -} diff --git a/langtools/test/tools/javac/generics/compat/VisibleBridge.java b/langtools/test/tools/javac/generics/compat/VisibleBridge.java deleted file mode 100644 index 334eb251529..00000000000 --- a/langtools/test/tools/javac/generics/compat/VisibleBridge.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -/* - * @test - * @bug 4830291 - * @summary javac makes String non-backward compatible - * @author gafter - * - * @compile -source 1.4 VisibleBridge.java - */ - -// Ensure that bridge methods are visible for maximum -// backward compatibility. - -class VisibleBridge { - static { - Object o = "b"; - if ("a".compareTo(o) > 0) {} - } -} diff --git a/langtools/test/tools/javac/limits/FinallyNesting.java b/langtools/test/tools/javac/limits/FinallyNesting.java deleted file mode 100644 index baabd698fa5..00000000000 --- a/langtools/test/tools/javac/limits/FinallyNesting.java +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Copyright (c) 2002, 2004, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -/* - * @test - * @bug 4739388 - * @summary regression: javac generates too much bytecode for deply nested try-finally - * @author gafter - * - * @compile -source 1.4 -target 1.4 FinallyNesting.java - */ -// Source and target 1.4 are needed for the test to pass with default memory sizes. -class FinallyNesting { - public static void main(String[] args) { - int x; - try { x = 1; } finally { - try { x = 1; } finally { - try { x = 1; } finally { - try { x = 1; } finally { - try { x = 1; } finally { - try { x = 1; } finally { - try { x = 1; } finally { - try { x = 1; } finally { - try { x = 1; } finally { - try { x = 1; } finally { - try { x = 1; } finally { - try { x = 1; } finally { - try { x = 1; } finally { - try { x = 1; } finally { - try { x = 1; } finally { - x = 2; - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } -} diff --git a/langtools/test/tools/javac/meth/InvokeMH.java b/langtools/test/tools/javac/meth/InvokeMH.java index 4d72b71c992..d96532825c8 100644 --- a/langtools/test/tools/javac/meth/InvokeMH.java +++ b/langtools/test/tools/javac/meth/InvokeMH.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -27,7 +27,7 @@ * @summary Generate call sites for method handle * @author jrose * - * @compile -source 7 -target 7 -XDallowTransitionalJSR292=no InvokeMH.java + * @compile InvokeMH.java */ /* diff --git a/langtools/test/tools/javac/miranda/T4711325.java b/langtools/test/tools/javac/miranda/T4711325.java index 4989debc58a..8889989563c 100644 --- a/langtools/test/tools/javac/miranda/T4711325.java +++ b/langtools/test/tools/javac/miranda/T4711325.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -28,7 +28,6 @@ * @author gafter * * @compile T4711325.java - * @compile/fail -source 1.4 T4711325.java */ interface A { diff --git a/langtools/test/tools/javac/proprietary/WarnClass.java b/langtools/test/tools/javac/proprietary/WarnClass.java index a3333c54104..ceeea45649e 100644 --- a/langtools/test/tools/javac/proprietary/WarnClass.java +++ b/langtools/test/tools/javac/proprietary/WarnClass.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2006, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -28,7 +28,6 @@ * @author Peter von der Ah\u00e9 * @compile WarnClass.java * @compile/fail -Werror WarnClass.java - * @compile/fail -Werror -source 1.4 -nowarn WarnClass.java * @compile/fail -Werror -nowarn WarnClass.java * @compile/fail -Werror -Xlint:none WarnClass.java */ diff --git a/langtools/test/tools/javac/proprietary/WarnImport.java b/langtools/test/tools/javac/proprietary/WarnImport.java index 7d5d66a3906..7a0c25960eb 100644 --- a/langtools/test/tools/javac/proprietary/WarnImport.java +++ b/langtools/test/tools/javac/proprietary/WarnImport.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2006, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -28,7 +28,6 @@ * @author Peter von der Ah\u00e9 * @compile WarnImport.java * @compile/fail -Werror WarnImport.java - * @compile/fail -Werror -source 1.4 -nowarn WarnImport.java * @compile/fail -Werror -nowarn WarnImport.java * @compile/fail -Werror -Xlint:none WarnImport.java */ diff --git a/langtools/test/tools/javac/proprietary/WarnMethod.java b/langtools/test/tools/javac/proprietary/WarnMethod.java index 76218abf3d6..4e06100676e 100644 --- a/langtools/test/tools/javac/proprietary/WarnMethod.java +++ b/langtools/test/tools/javac/proprietary/WarnMethod.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2006, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -28,7 +28,6 @@ * @author Peter von der Ah\u00e9 * @compile WarnMethod.java * @compile/fail -Werror WarnMethod.java - * @compile/fail -Werror -source 1.4 -nowarn WarnMethod.java * @compile/fail -Werror -nowarn WarnMethod.java * @compile/fail -Werror -Xlint:none WarnMethod.java */ diff --git a/langtools/test/tools/javac/proprietary/WarnStaticImport.java b/langtools/test/tools/javac/proprietary/WarnStaticImport.java index a5ff4442bd4..43ce3afd8fc 100644 --- a/langtools/test/tools/javac/proprietary/WarnStaticImport.java +++ b/langtools/test/tools/javac/proprietary/WarnStaticImport.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2006, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -28,7 +28,6 @@ * @author Peter von der Ah\u00e9 * @compile WarnStaticImport.java * @compile/fail -Werror WarnStaticImport.java - * @compile/fail -Werror -source 1.4 -nowarn WarnStaticImport.java * @compile/fail -Werror -nowarn WarnStaticImport.java * @compile/fail -Werror -Xlint:none WarnStaticImport.java */ diff --git a/langtools/test/tools/javac/proprietary/WarnVariable.java b/langtools/test/tools/javac/proprietary/WarnVariable.java index 0061b1c766f..8dda29aee39 100644 --- a/langtools/test/tools/javac/proprietary/WarnVariable.java +++ b/langtools/test/tools/javac/proprietary/WarnVariable.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2006, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -28,7 +28,6 @@ * @author Peter von der Ah\u00e9 * @compile WarnVariable.java * @compile/fail -Werror WarnVariable.java - * @compile/fail -Werror -source 1.4 -nowarn WarnVariable.java * @compile/fail -Werror -nowarn WarnVariable.java * @compile/fail -Werror -Xlint:none WarnVariable.java */ diff --git a/langtools/test/tools/javac/proprietary/WarnWildcard.java b/langtools/test/tools/javac/proprietary/WarnWildcard.java index 509815eb5c5..1fee47632a2 100644 --- a/langtools/test/tools/javac/proprietary/WarnWildcard.java +++ b/langtools/test/tools/javac/proprietary/WarnWildcard.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2006, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -28,7 +28,6 @@ * @author Peter von der Ah\u00e9 * @compile WarnWildcard.java * @compile/fail -Werror WarnWildcard.java - * @compile/fail -Werror -source 1.4 -nowarn WarnWildcard.java * @compile/fail -Werror -nowarn WarnWildcard.java * @compile/fail -Werror -Xlint:none WarnWildcard.java */ diff --git a/langtools/test/tools/javac/types/CastObjectToPrimitiveTest.java b/langtools/test/tools/javac/types/CastObjectToPrimitiveTest.java index f8e61e1afb4..ae6c15790c4 100644 --- a/langtools/test/tools/javac/types/CastObjectToPrimitiveTest.java +++ b/langtools/test/tools/javac/types/CastObjectToPrimitiveTest.java @@ -25,7 +25,6 @@ * @test * @bug 7038363 * @summary cast from object to primitive should be for source >= 1.7 - * @compile/fail/ref=CastObjectToPrimitiveTest.out -XDrawDiagnostics -Xlint:-options -source 5 CastObjectToPrimitiveTest.java * @compile/fail/ref=CastObjectToPrimitiveTest.out -XDrawDiagnostics -Xlint:-options -source 6 CastObjectToPrimitiveTest.java * @compile CastObjectToPrimitiveTest.java */ diff --git a/langtools/test/tools/javac/types/CastObjectToPrimitiveTest.out b/langtools/test/tools/javac/types/CastObjectToPrimitiveTest.out index f57047f99d9..80f12654b24 100644 --- a/langtools/test/tools/javac/types/CastObjectToPrimitiveTest.out +++ b/langtools/test/tools/javac/types/CastObjectToPrimitiveTest.out @@ -1,2 +1,2 @@ -CastObjectToPrimitiveTest.java:36:23: compiler.err.prob.found.req: (compiler.misc.inconvertible.types: java.lang.Object, int) +CastObjectToPrimitiveTest.java:35:23: compiler.err.prob.found.req: (compiler.misc.inconvertible.types: java.lang.Object, int) 1 error From 35f1475d20c2d4fd43929b65740cd84471ac160b Mon Sep 17 00:00:00 2001 From: Igor Veresov Date: Mon, 10 Mar 2014 11:09:02 -0700 Subject: [PATCH 047/116] 8025644: java/util/stream/test/org/openjdk/tests/java/util/stream/ToArrayOpTest.java fails with TestData$OfRef): failure java.lang.AssertionError: expected [true] but found [false] In GraphKit::gen_checkcast() provide only exact superklass to GraphKit::maybe_cast_profiled_receiver() Reviewed-by: kvn, roland --- hotspot/src/share/vm/opto/graphKit.cpp | 38 +++++++++++++++----------- 1 file changed, 22 insertions(+), 16 deletions(-) diff --git a/hotspot/src/share/vm/opto/graphKit.cpp b/hotspot/src/share/vm/opto/graphKit.cpp index d11e4ff5ccf..d9fcfb2cb91 100644 --- a/hotspot/src/share/vm/opto/graphKit.cpp +++ b/hotspot/src/share/vm/opto/graphKit.cpp @@ -3007,22 +3007,28 @@ Node* GraphKit::gen_checkcast(Node *obj, Node* superklass, } Node* cast_obj = NULL; - const TypeOopPtr* obj_type = _gvn.type(obj)->is_oopptr(); - // We may not have profiling here or it may not help us. If we have - // a speculative type use it to perform an exact cast. - ciKlass* spec_obj_type = obj_type->speculative_type(); - if (spec_obj_type != NULL || - (data != NULL && - // Counter has never been decremented (due to cast failure). - // ...This is a reasonable thing to expect. It is true of - // all casts inserted by javac to implement generic types. - data->as_CounterData()->count() >= 0)) { - cast_obj = maybe_cast_profiled_receiver(not_null_obj, tk->klass(), spec_obj_type, safe_for_replace); - if (cast_obj != NULL) { - if (failure_control != NULL) // failure is now impossible - (*failure_control) = top(); - // adjust the type of the phi to the exact klass: - phi->raise_bottom_type(_gvn.type(cast_obj)->meet_speculative(TypePtr::NULL_PTR)); + if (tk->klass_is_exact()) { + // The following optimization tries to statically cast the speculative type of the object + // (for example obtained during profiling) to the type of the superklass and then do a + // dynamic check that the type of the object is what we expect. To work correctly + // for checkcast and aastore the type of superklass should be exact. + const TypeOopPtr* obj_type = _gvn.type(obj)->is_oopptr(); + // We may not have profiling here or it may not help us. If we have + // a speculative type use it to perform an exact cast. + ciKlass* spec_obj_type = obj_type->speculative_type(); + if (spec_obj_type != NULL || + (data != NULL && + // Counter has never been decremented (due to cast failure). + // ...This is a reasonable thing to expect. It is true of + // all casts inserted by javac to implement generic types. + data->as_CounterData()->count() >= 0)) { + cast_obj = maybe_cast_profiled_receiver(not_null_obj, tk->klass(), spec_obj_type, safe_for_replace); + if (cast_obj != NULL) { + if (failure_control != NULL) // failure is now impossible + (*failure_control) = top(); + // adjust the type of the phi to the exact klass: + phi->raise_bottom_type(_gvn.type(cast_obj)->meet_speculative(TypePtr::NULL_PTR)); + } } } From 13a70d932e0a9a3282d01f0aaf9dc8a876a737e4 Mon Sep 17 00:00:00 2001 From: David Chase Date: Tue, 11 Mar 2014 13:38:32 -0400 Subject: [PATCH 048/116] 8028037: [parfait] warnings from b114 for hotspot.src.share.vm Insert null check for one warning; other warning handled in parfait config Reviewed-by: kvn --- hotspot/src/share/vm/opto/multnode.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/hotspot/src/share/vm/opto/multnode.cpp b/hotspot/src/share/vm/opto/multnode.cpp index 300f6246369..1da4b7789f4 100644 --- a/hotspot/src/share/vm/opto/multnode.cpp +++ b/hotspot/src/share/vm/opto/multnode.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -194,7 +194,9 @@ bool ProjNode::is_uncommon_trap_if_pattern(Deoptimization::DeoptReason reason) { } } - ProjNode* other_proj = iff->proj_out(1-_con)->as_Proj(); + ProjNode* other_proj = iff->proj_out(1-_con); + if (other_proj == NULL) // Should never happen, but make Parfait happy. + return false; if (other_proj->is_uncommon_trap_proj(reason)) { assert(reason == Deoptimization::Reason_none || Compile::current()->is_predicate_opaq(iff->in(1)->in(1)), "should be on the list"); From 1a1f9f0871d36fc5ae320d000348a0772733e082 Mon Sep 17 00:00:00 2001 From: Christian Thalinger Date: Tue, 11 Mar 2014 14:54:47 -0700 Subject: [PATCH 049/116] 8037043: put Method flag bits in predictable positions Reviewed-by: kvn, coleenp --- hotspot/src/share/vm/oops/method.hpp | 61 ++++++++++++++++------ hotspot/src/share/vm/runtime/vmStructs.cpp | 6 +++ 2 files changed, 51 insertions(+), 16 deletions(-) diff --git a/hotspot/src/share/vm/oops/method.hpp b/hotspot/src/share/vm/oops/method.hpp index 931b08b5264..98598dbeeff 100644 --- a/hotspot/src/share/vm/oops/method.hpp +++ b/hotspot/src/share/vm/oops/method.hpp @@ -108,12 +108,16 @@ class Method : public Metadata { #endif u2 _method_size; // size of this object u1 _intrinsic_id; // vmSymbols::intrinsic_id (0 == _none) - u1 _jfr_towrite : 1, // Flags - _caller_sensitive : 1, - _force_inline : 1, - _hidden : 1, - _dont_inline : 1, - : 3; + + // Flags + enum Flags { + _jfr_towrite = 1 << 0, + _caller_sensitive = 1 << 1, + _force_inline = 1 << 2, + _dont_inline = 1 << 3, + _hidden = 1 << 4 + }; + u1 _flags; #ifndef PRODUCT int _compiled_invocation_count; // Number of nmethod invocations so far (for perf. debugging) @@ -759,16 +763,41 @@ class Method : public Metadata { void init_intrinsic_id(); // updates from _none if a match static vmSymbols::SID klass_id_for_intrinsics(Klass* holder); - bool jfr_towrite() { return _jfr_towrite; } - void set_jfr_towrite(bool x) { _jfr_towrite = x; } - bool caller_sensitive() { return _caller_sensitive; } - void set_caller_sensitive(bool x) { _caller_sensitive = x; } - bool force_inline() { return _force_inline; } - void set_force_inline(bool x) { _force_inline = x; } - bool dont_inline() { return _dont_inline; } - void set_dont_inline(bool x) { _dont_inline = x; } - bool is_hidden() { return _hidden; } - void set_hidden(bool x) { _hidden = x; } + bool jfr_towrite() { + return (_flags & _jfr_towrite) != 0; + } + void set_jfr_towrite(bool x) { + _flags = x ? (_flags | _jfr_towrite) : (_flags & ~_jfr_towrite); + } + + bool caller_sensitive() { + return (_flags & _caller_sensitive) != 0; + } + void set_caller_sensitive(bool x) { + _flags = x ? (_flags | _caller_sensitive) : (_flags & ~_caller_sensitive); + } + + bool force_inline() { + return (_flags & _force_inline) != 0; + } + void set_force_inline(bool x) { + _flags = x ? (_flags | _force_inline) : (_flags & ~_force_inline); + } + + bool dont_inline() { + return (_flags & _dont_inline) != 0; + } + void set_dont_inline(bool x) { + _flags = x ? (_flags | _dont_inline) : (_flags & ~_dont_inline); + } + + bool is_hidden() { + return (_flags & _hidden) != 0; + } + void set_hidden(bool x) { + _flags = x ? (_flags | _hidden) : (_flags & ~_hidden); + } + ConstMethod::MethodType method_type() const { return _constMethod->method_type(); } diff --git a/hotspot/src/share/vm/runtime/vmStructs.cpp b/hotspot/src/share/vm/runtime/vmStructs.cpp index 7044dc9b2b7..2475de0480a 100644 --- a/hotspot/src/share/vm/runtime/vmStructs.cpp +++ b/hotspot/src/share/vm/runtime/vmStructs.cpp @@ -2336,6 +2336,12 @@ typedef TwoOopHashtable SymbolTwoOopHashtable; /* ConstMethod anon-enum */ \ /********************************/ \ \ + declare_constant(Method::_jfr_towrite) \ + declare_constant(Method::_caller_sensitive) \ + declare_constant(Method::_force_inline) \ + declare_constant(Method::_dont_inline) \ + declare_constant(Method::_hidden) \ + \ declare_constant(ConstMethod::_has_linenumber_table) \ declare_constant(ConstMethod::_has_checked_exceptions) \ declare_constant(ConstMethod::_has_localvariable_table) \ From 768beb9a23d3d82a04c8c8bf323b33309e256493 Mon Sep 17 00:00:00 2001 From: Igor Veresov Date: Wed, 12 Mar 2014 11:24:26 -0700 Subject: [PATCH 050/116] 8031321: Support Intel bit manipulation instructions Add support for BMI1 instructions Reviewed-by: kvn, roland --- hotspot/src/cpu/x86/vm/assembler_x86.cpp | 138 +++++++++ hotspot/src/cpu/x86/vm/assembler_x86.hpp | 49 +++ hotspot/src/cpu/x86/vm/globals_x86.hpp | 6 + hotspot/src/cpu/x86/vm/vm_version_x86.cpp | 42 ++- hotspot/src/cpu/x86/vm/vm_version_x86.hpp | 19 +- hotspot/src/cpu/x86/vm/x86_32.ad | 358 ++++++++++++++++++++++ hotspot/src/cpu/x86/vm/x86_64.ad | 258 ++++++++++++++++ hotspot/src/share/vm/adlc/formssel.cpp | 12 +- hotspot/src/share/vm/opto/matcher.cpp | 107 +++++++ hotspot/src/share/vm/opto/matcher.hpp | 3 + hotspot/test/compiler/codegen/BMI1.java | 301 ++++++++++++++++++ 11 files changed, 1280 insertions(+), 13 deletions(-) create mode 100644 hotspot/test/compiler/codegen/BMI1.java diff --git a/hotspot/src/cpu/x86/vm/assembler_x86.cpp b/hotspot/src/cpu/x86/vm/assembler_x86.cpp index 49cc9ed65cf..d305ac18537 100644 --- a/hotspot/src/cpu/x86/vm/assembler_x86.cpp +++ b/hotspot/src/cpu/x86/vm/assembler_x86.cpp @@ -1089,6 +1089,21 @@ void Assembler::andl(Register dst, Register src) { emit_arith(0x23, 0xC0, dst, src); } +void Assembler::andnl(Register dst, Register src1, Register src2) { + assert(VM_Version::supports_bmi1(), "bit manipulation instructions not supported"); + int encode = vex_prefix_0F38_and_encode(dst, src1, src2); + emit_int8((unsigned char)0xF2); + emit_int8((unsigned char)(0xC0 | encode)); +} + +void Assembler::andnl(Register dst, Register src1, Address src2) { + InstructionMark im(this); + assert(VM_Version::supports_bmi1(), "bit manipulation instructions not supported"); + vex_prefix_0F38(dst, src1, src2); + emit_int8((unsigned char)0xF2); + emit_operand(dst, src2); +} + void Assembler::bsfl(Register dst, Register src) { int encode = prefix_and_encode(dst->encoding(), src->encoding()); emit_int8(0x0F); @@ -1110,6 +1125,51 @@ void Assembler::bswapl(Register reg) { // bswap emit_int8((unsigned char)(0xC8 | encode)); } +void Assembler::blsil(Register dst, Register src) { + assert(VM_Version::supports_bmi1(), "bit manipulation instructions not supported"); + int encode = vex_prefix_0F38_and_encode(rbx, dst, src); + emit_int8((unsigned char)0xF3); + emit_int8((unsigned char)(0xC0 | encode)); +} + +void Assembler::blsil(Register dst, Address src) { + InstructionMark im(this); + assert(VM_Version::supports_bmi1(), "bit manipulation instructions not supported"); + vex_prefix_0F38(rbx, dst, src); + emit_int8((unsigned char)0xF3); + emit_operand(rbx, src); +} + +void Assembler::blsmskl(Register dst, Register src) { + assert(VM_Version::supports_bmi1(), "bit manipulation instructions not supported"); + int encode = vex_prefix_0F38_and_encode(rdx, dst, src); + emit_int8((unsigned char)0xF3); + emit_int8((unsigned char)(0xC0 | encode)); +} + +void Assembler::blsmskl(Register dst, Address src) { + InstructionMark im(this); + assert(VM_Version::supports_bmi1(), "bit manipulation instructions not supported"); + vex_prefix_0F38(rdx, dst, src); + emit_int8((unsigned char)0xF3); + emit_operand(rdx, src); +} + +void Assembler::blsrl(Register dst, Register src) { + assert(VM_Version::supports_bmi1(), "bit manipulation instructions not supported"); + int encode = vex_prefix_0F38_and_encode(rcx, dst, src); + emit_int8((unsigned char)0xF3); + emit_int8((unsigned char)(0xC0 | encode)); +} + +void Assembler::blsrl(Register dst, Address src) { + InstructionMark im(this); + assert(VM_Version::supports_bmi1(), "bit manipulation instructions not supported"); + vex_prefix_0F38(rcx, dst, src); + emit_int8((unsigned char)0xF3); + emit_operand(rcx, src); +} + void Assembler::call(Label& L, relocInfo::relocType rtype) { // suspect disp32 is always good int operand = LP64_ONLY(disp32_operand) NOT_LP64(imm_operand); @@ -2878,6 +2938,24 @@ void Assembler::testl(Register dst, Address src) { emit_operand(dst, src); } +void Assembler::tzcntl(Register dst, Register src) { + assert(VM_Version::supports_bmi1(), "tzcnt instruction not supported"); + emit_int8((unsigned char)0xF3); + int encode = prefix_and_encode(dst->encoding(), src->encoding()); + emit_int8(0x0F); + emit_int8((unsigned char)0xBC); + emit_int8((unsigned char)0xC0 | encode); +} + +void Assembler::tzcntq(Register dst, Register src) { + assert(VM_Version::supports_bmi1(), "tzcnt instruction not supported"); + emit_int8((unsigned char)0xF3); + int encode = prefixq_and_encode(dst->encoding(), src->encoding()); + emit_int8(0x0F); + emit_int8((unsigned char)0xBC); + emit_int8((unsigned char)(0xC0 | encode)); +} + void Assembler::ucomisd(XMMRegister dst, Address src) { NOT_LP64(assert(VM_Version::supports_sse2(), "")); emit_simd_arith_nonds(0x2E, dst, src, VEX_SIMD_66); @@ -4837,6 +4915,21 @@ void Assembler::andq(Register dst, Register src) { emit_arith(0x23, 0xC0, dst, src); } +void Assembler::andnq(Register dst, Register src1, Register src2) { + assert(VM_Version::supports_bmi1(), "bit manipulation instructions not supported"); + int encode = vex_prefix_0F38_and_encode_q(dst, src1, src2); + emit_int8((unsigned char)0xF2); + emit_int8((unsigned char)(0xC0 | encode)); +} + +void Assembler::andnq(Register dst, Register src1, Address src2) { + InstructionMark im(this); + assert(VM_Version::supports_bmi1(), "bit manipulation instructions not supported"); + vex_prefix_0F38_q(dst, src1, src2); + emit_int8((unsigned char)0xF2); + emit_operand(dst, src2); +} + void Assembler::bsfq(Register dst, Register src) { int encode = prefixq_and_encode(dst->encoding(), src->encoding()); emit_int8(0x0F); @@ -4858,6 +4951,51 @@ void Assembler::bswapq(Register reg) { emit_int8((unsigned char)(0xC8 | encode)); } +void Assembler::blsiq(Register dst, Register src) { + assert(VM_Version::supports_bmi1(), "bit manipulation instructions not supported"); + int encode = vex_prefix_0F38_and_encode_q(rbx, dst, src); + emit_int8((unsigned char)0xF3); + emit_int8((unsigned char)(0xC0 | encode)); +} + +void Assembler::blsiq(Register dst, Address src) { + InstructionMark im(this); + assert(VM_Version::supports_bmi1(), "bit manipulation instructions not supported"); + vex_prefix_0F38_q(rbx, dst, src); + emit_int8((unsigned char)0xF3); + emit_operand(rbx, src); +} + +void Assembler::blsmskq(Register dst, Register src) { + assert(VM_Version::supports_bmi1(), "bit manipulation instructions not supported"); + int encode = vex_prefix_0F38_and_encode_q(rdx, dst, src); + emit_int8((unsigned char)0xF3); + emit_int8((unsigned char)(0xC0 | encode)); +} + +void Assembler::blsmskq(Register dst, Address src) { + InstructionMark im(this); + assert(VM_Version::supports_bmi1(), "bit manipulation instructions not supported"); + vex_prefix_0F38_q(rdx, dst, src); + emit_int8((unsigned char)0xF3); + emit_operand(rdx, src); +} + +void Assembler::blsrq(Register dst, Register src) { + assert(VM_Version::supports_bmi1(), "bit manipulation instructions not supported"); + int encode = vex_prefix_0F38_and_encode_q(rcx, dst, src); + emit_int8((unsigned char)0xF3); + emit_int8((unsigned char)(0xC0 | encode)); +} + +void Assembler::blsrq(Register dst, Address src) { + InstructionMark im(this); + assert(VM_Version::supports_bmi1(), "bit manipulation instructions not supported"); + vex_prefix_0F38_q(rcx, dst, src); + emit_int8((unsigned char)0xF3); + emit_operand(rcx, src); +} + void Assembler::cdqq() { prefix(REX_W); emit_int8((unsigned char)0x99); diff --git a/hotspot/src/cpu/x86/vm/assembler_x86.hpp b/hotspot/src/cpu/x86/vm/assembler_x86.hpp index 1ad66bd6a95..95ca231cef4 100644 --- a/hotspot/src/cpu/x86/vm/assembler_x86.hpp +++ b/hotspot/src/cpu/x86/vm/assembler_x86.hpp @@ -590,10 +590,35 @@ private: vex_prefix(src, nds_enc, dst_enc, pre, VEX_OPCODE_0F, false, vector256); } + void vex_prefix_0F38(Register dst, Register nds, Address src) { + bool vex_w = false; + bool vector256 = false; + vex_prefix(src, nds->encoding(), dst->encoding(), + VEX_SIMD_NONE, VEX_OPCODE_0F_38, vex_w, vector256); + } + + void vex_prefix_0F38_q(Register dst, Register nds, Address src) { + bool vex_w = true; + bool vector256 = false; + vex_prefix(src, nds->encoding(), dst->encoding(), + VEX_SIMD_NONE, VEX_OPCODE_0F_38, vex_w, vector256); + } int vex_prefix_and_encode(int dst_enc, int nds_enc, int src_enc, VexSimdPrefix pre, VexOpcode opc, bool vex_w, bool vector256); + int vex_prefix_0F38_and_encode(Register dst, Register nds, Register src) { + bool vex_w = false; + bool vector256 = false; + return vex_prefix_and_encode(dst->encoding(), nds->encoding(), src->encoding(), + VEX_SIMD_NONE, VEX_OPCODE_0F_38, vex_w, vector256); + } + int vex_prefix_0F38_and_encode_q(Register dst, Register nds, Register src) { + bool vex_w = true; + bool vector256 = false; + return vex_prefix_and_encode(dst->encoding(), nds->encoding(), src->encoding(), + VEX_SIMD_NONE, VEX_OPCODE_0F_38, vex_w, vector256); + } int vex_prefix_and_encode(XMMRegister dst, XMMRegister nds, XMMRegister src, VexSimdPrefix pre, bool vector256 = false, VexOpcode opc = VEX_OPCODE_0F) { @@ -897,6 +922,27 @@ private: void andq(Register dst, Address src); void andq(Register dst, Register src); + // BMI instructions + void andnl(Register dst, Register src1, Register src2); + void andnl(Register dst, Register src1, Address src2); + void andnq(Register dst, Register src1, Register src2); + void andnq(Register dst, Register src1, Address src2); + + void blsil(Register dst, Register src); + void blsil(Register dst, Address src); + void blsiq(Register dst, Register src); + void blsiq(Register dst, Address src); + + void blsmskl(Register dst, Register src); + void blsmskl(Register dst, Address src); + void blsmskq(Register dst, Register src); + void blsmskq(Register dst, Address src); + + void blsrl(Register dst, Register src); + void blsrl(Register dst, Address src); + void blsrq(Register dst, Register src); + void blsrq(Register dst, Address src); + void bsfl(Register dst, Register src); void bsrl(Register dst, Register src); @@ -1574,6 +1620,9 @@ private: void testq(Register dst, int32_t imm32); void testq(Register dst, Register src); + // BMI - count trailing zeros + void tzcntl(Register dst, Register src); + void tzcntq(Register dst, Register src); // Unordered Compare Scalar Double-Precision Floating-Point Values and set EFLAGS void ucomisd(XMMRegister dst, Address src); diff --git a/hotspot/src/cpu/x86/vm/globals_x86.hpp b/hotspot/src/cpu/x86/vm/globals_x86.hpp index e82c192901b..f29e5d6e322 100644 --- a/hotspot/src/cpu/x86/vm/globals_x86.hpp +++ b/hotspot/src/cpu/x86/vm/globals_x86.hpp @@ -135,5 +135,11 @@ define_pd_global(uintx, TypeProfileLevel, 111); \ product(bool, UseCountLeadingZerosInstruction, false, \ "Use count leading zeros instruction") \ + \ + product(bool, UseCountTrailingZerosInstruction, false, \ + "Use count trailing zeros instruction") \ + \ + product(bool, UseBMI1Instructions, false, \ + "Use BMI instructions") #endif // CPU_X86_VM_GLOBALS_X86_HPP diff --git a/hotspot/src/cpu/x86/vm/vm_version_x86.cpp b/hotspot/src/cpu/x86/vm/vm_version_x86.cpp index de38b4a3a53..b949e4e2998 100644 --- a/hotspot/src/cpu/x86/vm/vm_version_x86.cpp +++ b/hotspot/src/cpu/x86/vm/vm_version_x86.cpp @@ -429,7 +429,7 @@ void VM_Version::get_processor_features() { } char buf[256]; - jio_snprintf(buf, sizeof(buf), "(%u cores per cpu, %u threads per core) family %d model %d stepping %d%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s", + jio_snprintf(buf, sizeof(buf), "(%u cores per cpu, %u threads per core) family %d model %d stepping %d%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s", cores_per_cpu(), threads_per_core(), cpu_family(), _model, _stepping, (supports_cmov() ? ", cmov" : ""), @@ -455,7 +455,9 @@ void VM_Version::get_processor_features() { (supports_ht() ? ", ht": ""), (supports_tsc() ? ", tsc": ""), (supports_tscinv_bit() ? ", tscinvbit": ""), - (supports_tscinv() ? ", tscinv": "")); + (supports_tscinv() ? ", tscinv": ""), + (supports_bmi1() ? ", bmi1" : ""), + (supports_bmi2() ? ", bmi2" : "")); _features_str = strdup(buf); // UseSSE is set to the smaller of what hardware supports and what @@ -600,13 +602,6 @@ void VM_Version::get_processor_features() { } } - // Use count leading zeros count instruction if available. - if (supports_lzcnt()) { - if (FLAG_IS_DEFAULT(UseCountLeadingZerosInstruction)) { - UseCountLeadingZerosInstruction = true; - } - } - // some defaults for AMD family 15h if ( cpu_family() == 0x15 ) { // On family 15h processors default is no sw prefetch @@ -692,6 +687,35 @@ void VM_Version::get_processor_features() { } #endif // COMPILER2 + // Use count leading zeros count instruction if available. + if (supports_lzcnt()) { + if (FLAG_IS_DEFAULT(UseCountLeadingZerosInstruction)) { + UseCountLeadingZerosInstruction = true; + } + } else if (UseCountLeadingZerosInstruction) { + warning("lzcnt instruction is not available on this CPU"); + FLAG_SET_DEFAULT(UseCountLeadingZerosInstruction, false); + } + + if (supports_bmi1()) { + if (FLAG_IS_DEFAULT(UseBMI1Instructions)) { + UseBMI1Instructions = true; + } + } else if (UseBMI1Instructions) { + warning("BMI1 instructions are not available on this CPU"); + FLAG_SET_DEFAULT(UseBMI1Instructions, false); + } + + // Use count trailing zeros instruction if available + if (supports_bmi1()) { + if (FLAG_IS_DEFAULT(UseCountTrailingZerosInstruction)) { + UseCountTrailingZerosInstruction = UseBMI1Instructions; + } + } else if (UseCountTrailingZerosInstruction) { + warning("tzcnt instruction is not available on this CPU"); + FLAG_SET_DEFAULT(UseCountTrailingZerosInstruction, false); + } + // Use population count instruction if available. if (supports_popcnt()) { if (FLAG_IS_DEFAULT(UsePopCountInstruction)) { diff --git a/hotspot/src/cpu/x86/vm/vm_version_x86.hpp b/hotspot/src/cpu/x86/vm/vm_version_x86.hpp index 86e9b662d52..07d64451870 100644 --- a/hotspot/src/cpu/x86/vm/vm_version_x86.hpp +++ b/hotspot/src/cpu/x86/vm/vm_version_x86.hpp @@ -141,7 +141,8 @@ public: struct { uint32_t LahfSahf : 1, CmpLegacy : 1, - : 4, + : 3, + lzcnt_intel : 1, lzcnt : 1, sse4a : 1, misalignsse : 1, @@ -251,7 +252,9 @@ protected: CPU_AVX2 = (1 << 18), CPU_AES = (1 << 19), CPU_ERMS = (1 << 20), // enhanced 'rep movsb/stosb' instructions - CPU_CLMUL = (1 << 21) // carryless multiply for CRC + CPU_CLMUL = (1 << 21), // carryless multiply for CRC + CPU_BMI1 = (1 << 22), + CPU_BMI2 = (1 << 23) } cpuFeatureFlags; enum { @@ -423,6 +426,8 @@ protected: if (_cpuid_info.sef_cpuid7_ebx.bits.avx2 != 0) result |= CPU_AVX2; } + if(_cpuid_info.sef_cpuid7_ebx.bits.bmi1 != 0) + result |= CPU_BMI1; if (_cpuid_info.std_cpuid1_edx.bits.tsc != 0) result |= CPU_TSC; if (_cpuid_info.ext_cpuid7_edx.bits.tsc_invariance != 0) @@ -444,6 +449,13 @@ protected: if (_cpuid_info.ext_cpuid1_ecx.bits.sse4a != 0) result |= CPU_SSE4A; } + // Intel features. + if(is_intel()) { + if(_cpuid_info.sef_cpuid7_ebx.bits.bmi2 != 0) + result |= CPU_BMI2; + if(_cpuid_info.ext_cpuid1_ecx.bits.lzcnt_intel != 0) + result |= CPU_LZCNT; + } return result; } @@ -560,7 +572,8 @@ public: static bool supports_aes() { return (_cpuFeatures & CPU_AES) != 0; } static bool supports_erms() { return (_cpuFeatures & CPU_ERMS) != 0; } static bool supports_clmul() { return (_cpuFeatures & CPU_CLMUL) != 0; } - + static bool supports_bmi1() { return (_cpuFeatures & CPU_BMI1) != 0; } + static bool supports_bmi2() { return (_cpuFeatures & CPU_BMI2) != 0; } // Intel features static bool is_intel_family_core() { return is_intel() && extended_cpu_family() == CPU_FAMILY_INTEL_CORE; } diff --git a/hotspot/src/cpu/x86/vm/x86_32.ad b/hotspot/src/cpu/x86/vm/x86_32.ad index 8948682a99f..c4820db3b07 100644 --- a/hotspot/src/cpu/x86/vm/x86_32.ad +++ b/hotspot/src/cpu/x86/vm/x86_32.ad @@ -5163,6 +5163,19 @@ instruct countLeadingZerosL_bsr(rRegI dst, eRegL src, eFlagsReg cr) %{ %} instruct countTrailingZerosI(rRegI dst, rRegI src, eFlagsReg cr) %{ + predicate(UseCountTrailingZerosInstruction); + match(Set dst (CountTrailingZerosI src)); + effect(KILL cr); + + format %{ "TZCNT $dst, $src\t# count trailing zeros (int)" %} + ins_encode %{ + __ tzcntl($dst$$Register, $src$$Register); + %} + ins_pipe(ialu_reg); +%} + +instruct countTrailingZerosI_bsf(rRegI dst, rRegI src, eFlagsReg cr) %{ + predicate(!UseCountTrailingZerosInstruction); match(Set dst (CountTrailingZerosI src)); effect(KILL cr); @@ -5182,6 +5195,30 @@ instruct countTrailingZerosI(rRegI dst, rRegI src, eFlagsReg cr) %{ %} instruct countTrailingZerosL(rRegI dst, eRegL src, eFlagsReg cr) %{ + predicate(UseCountTrailingZerosInstruction); + match(Set dst (CountTrailingZerosL src)); + effect(TEMP dst, KILL cr); + + format %{ "TZCNT $dst, $src.lo\t# count trailing zeros (long) \n\t" + "JNC done\n\t" + "TZCNT $dst, $src.hi\n\t" + "ADD $dst, 32\n" + "done:" %} + ins_encode %{ + Register Rdst = $dst$$Register; + Register Rsrc = $src$$Register; + Label done; + __ tzcntl(Rdst, Rsrc); + __ jccb(Assembler::carryClear, done); + __ tzcntl(Rdst, HIGH_FROM_LOW(Rsrc)); + __ addl(Rdst, BitsPerInt); + __ bind(done); + %} + ins_pipe(ialu_reg); +%} + +instruct countTrailingZerosL_bsf(rRegI dst, eRegL src, eFlagsReg cr) %{ + predicate(!UseCountTrailingZerosInstruction); match(Set dst (CountTrailingZerosL src)); effect(TEMP dst, KILL cr); @@ -8027,6 +8064,123 @@ instruct andI_mem_imm(memory dst, immI src, eFlagsReg cr) %{ ins_pipe( ialu_mem_imm ); %} +// BMI1 instructions +instruct andnI_rReg_rReg_rReg(rRegI dst, rRegI src1, rRegI src2, immI_M1 minus_1, eFlagsReg cr) %{ + match(Set dst (AndI (XorI src1 minus_1) src2)); + predicate(UseBMI1Instructions); + effect(KILL cr); + + format %{ "ANDNL $dst, $src1, $src2" %} + + ins_encode %{ + __ andnl($dst$$Register, $src1$$Register, $src2$$Register); + %} + ins_pipe(ialu_reg); +%} + +instruct andnI_rReg_rReg_mem(rRegI dst, rRegI src1, memory src2, immI_M1 minus_1, eFlagsReg cr) %{ + match(Set dst (AndI (XorI src1 minus_1) (LoadI src2) )); + predicate(UseBMI1Instructions); + effect(KILL cr); + + ins_cost(125); + format %{ "ANDNL $dst, $src1, $src2" %} + + ins_encode %{ + __ andnl($dst$$Register, $src1$$Register, $src2$$Address); + %} + ins_pipe(ialu_reg_mem); +%} + +instruct blsiI_rReg_rReg(rRegI dst, rRegI src, immI0 imm_zero, eFlagsReg cr) %{ + match(Set dst (AndI (SubI imm_zero src) src)); + predicate(UseBMI1Instructions); + effect(KILL cr); + + format %{ "BLSIL $dst, $src" %} + + ins_encode %{ + __ blsil($dst$$Register, $src$$Register); + %} + ins_pipe(ialu_reg); +%} + +instruct blsiI_rReg_mem(rRegI dst, memory src, immI0 imm_zero, eFlagsReg cr) %{ + match(Set dst (AndI (SubI imm_zero (LoadI src) ) (LoadI src) )); + predicate(UseBMI1Instructions); + effect(KILL cr); + + ins_cost(125); + format %{ "BLSIL $dst, $src" %} + + ins_encode %{ + __ blsil($dst$$Register, $src$$Address); + %} + ins_pipe(ialu_reg_mem); +%} + +instruct blsmskI_rReg_rReg(rRegI dst, rRegI src, immI_M1 minus_1, eFlagsReg cr) +%{ + match(Set dst (XorI (AddI src minus_1) src)); + predicate(UseBMI1Instructions); + effect(KILL cr); + + format %{ "BLSMSKL $dst, $src" %} + + ins_encode %{ + __ blsmskl($dst$$Register, $src$$Register); + %} + + ins_pipe(ialu_reg); +%} + +instruct blsmskI_rReg_mem(rRegI dst, memory src, immI_M1 minus_1, eFlagsReg cr) +%{ + match(Set dst (XorI (AddI (LoadI src) minus_1) (LoadI src) )); + predicate(UseBMI1Instructions); + effect(KILL cr); + + ins_cost(125); + format %{ "BLSMSKL $dst, $src" %} + + ins_encode %{ + __ blsmskl($dst$$Register, $src$$Address); + %} + + ins_pipe(ialu_reg_mem); +%} + +instruct blsrI_rReg_rReg(rRegI dst, rRegI src, immI_M1 minus_1, eFlagsReg cr) +%{ + match(Set dst (AndI (AddI src minus_1) src) ); + predicate(UseBMI1Instructions); + effect(KILL cr); + + format %{ "BLSRL $dst, $src" %} + + ins_encode %{ + __ blsrl($dst$$Register, $src$$Register); + %} + + ins_pipe(ialu_reg); +%} + +instruct blsrI_rReg_mem(rRegI dst, memory src, immI_M1 minus_1, eFlagsReg cr) +%{ + match(Set dst (AndI (AddI (LoadI src) minus_1) (LoadI src) )); + predicate(UseBMI1Instructions); + effect(KILL cr); + + ins_cost(125); + format %{ "BLSRL $dst, $src" %} + + ins_encode %{ + __ blsrl($dst$$Register, $src$$Address); + %} + + ins_pipe(ialu_reg_mem); +%} + // Or Instructions // Or Register with Register instruct orI_eReg(rRegI dst, rRegI src, eFlagsReg cr) %{ @@ -8649,6 +8803,210 @@ instruct andL_eReg_mem(eRegL dst, load_long_memory mem, eFlagsReg cr) %{ ins_pipe( ialu_reg_long_mem ); %} +// BMI1 instructions +instruct andnL_eReg_eReg_eReg(eRegL dst, eRegL src1, eRegL src2, immL_M1 minus_1, eFlagsReg cr) %{ + match(Set dst (AndL (XorL src1 minus_1) src2)); + predicate(UseBMI1Instructions); + effect(KILL cr, TEMP dst); + + format %{ "ANDNL $dst.lo, $src1.lo, $src2.lo\n\t" + "ANDNL $dst.hi, $src1.hi, $src2.hi" + %} + + ins_encode %{ + Register Rdst = $dst$$Register; + Register Rsrc1 = $src1$$Register; + Register Rsrc2 = $src2$$Register; + __ andnl(Rdst, Rsrc1, Rsrc2); + __ andnl(HIGH_FROM_LOW(Rdst), HIGH_FROM_LOW(Rsrc1), HIGH_FROM_LOW(Rsrc2)); + %} + ins_pipe(ialu_reg_reg_long); +%} + +instruct andnL_eReg_eReg_mem(eRegL dst, eRegL src1, memory src2, immL_M1 minus_1, eFlagsReg cr) %{ + match(Set dst (AndL (XorL src1 minus_1) (LoadL src2) )); + predicate(UseBMI1Instructions); + effect(KILL cr, TEMP dst); + + ins_cost(125); + format %{ "ANDNL $dst.lo, $src1.lo, $src2\n\t" + "ANDNL $dst.hi, $src1.hi, $src2+4" + %} + + ins_encode %{ + Register Rdst = $dst$$Register; + Register Rsrc1 = $src1$$Register; + Address src2_hi = Address::make_raw($src2$$base, $src2$$index, $src2$$scale, $src2$$disp + 4, relocInfo::none); + + __ andnl(Rdst, Rsrc1, $src2$$Address); + __ andnl(HIGH_FROM_LOW(Rdst), HIGH_FROM_LOW(Rsrc1), src2_hi); + %} + ins_pipe(ialu_reg_mem); +%} + +instruct blsiL_eReg_eReg(eRegL dst, eRegL src, immL0 imm_zero, eFlagsReg cr) %{ + match(Set dst (AndL (SubL imm_zero src) src)); + predicate(UseBMI1Instructions); + effect(KILL cr, TEMP dst); + + format %{ "MOVL $dst.hi, 0\n\t" + "BLSIL $dst.lo, $src.lo\n\t" + "JNZ done\n\t" + "BLSIL $dst.hi, $src.hi\n" + "done:" + %} + + ins_encode %{ + Label done; + Register Rdst = $dst$$Register; + Register Rsrc = $src$$Register; + __ movl(HIGH_FROM_LOW(Rdst), 0); + __ blsil(Rdst, Rsrc); + __ jccb(Assembler::notZero, done); + __ blsil(HIGH_FROM_LOW(Rdst), HIGH_FROM_LOW(Rsrc)); + __ bind(done); + %} + ins_pipe(ialu_reg); +%} + +instruct blsiL_eReg_mem(eRegL dst, memory src, immL0 imm_zero, eFlagsReg cr) %{ + match(Set dst (AndL (SubL imm_zero (LoadL src) ) (LoadL src) )); + predicate(UseBMI1Instructions); + effect(KILL cr, TEMP dst); + + ins_cost(125); + format %{ "MOVL $dst.hi, 0\n\t" + "BLSIL $dst.lo, $src\n\t" + "JNZ done\n\t" + "BLSIL $dst.hi, $src+4\n" + "done:" + %} + + ins_encode %{ + Label done; + Register Rdst = $dst$$Register; + Address src_hi = Address::make_raw($src$$base, $src$$index, $src$$scale, $src$$disp + 4, relocInfo::none); + + __ movl(HIGH_FROM_LOW(Rdst), 0); + __ blsil(Rdst, $src$$Address); + __ jccb(Assembler::notZero, done); + __ blsil(HIGH_FROM_LOW(Rdst), src_hi); + __ bind(done); + %} + ins_pipe(ialu_reg_mem); +%} + +instruct blsmskL_eReg_eReg(eRegL dst, eRegL src, immL_M1 minus_1, eFlagsReg cr) +%{ + match(Set dst (XorL (AddL src minus_1) src)); + predicate(UseBMI1Instructions); + effect(KILL cr, TEMP dst); + + format %{ "MOVL $dst.hi, 0\n\t" + "BLSMSKL $dst.lo, $src.lo\n\t" + "JNC done\n\t" + "BLSMSKL $dst.hi, $src.hi\n" + "done:" + %} + + ins_encode %{ + Label done; + Register Rdst = $dst$$Register; + Register Rsrc = $src$$Register; + __ movl(HIGH_FROM_LOW(Rdst), 0); + __ blsmskl(Rdst, Rsrc); + __ jccb(Assembler::carryClear, done); + __ blsmskl(HIGH_FROM_LOW(Rdst), HIGH_FROM_LOW(Rsrc)); + __ bind(done); + %} + + ins_pipe(ialu_reg); +%} + +instruct blsmskL_eReg_mem(eRegL dst, memory src, immL_M1 minus_1, eFlagsReg cr) +%{ + match(Set dst (XorL (AddL (LoadL src) minus_1) (LoadL src) )); + predicate(UseBMI1Instructions); + effect(KILL cr, TEMP dst); + + ins_cost(125); + format %{ "MOVL $dst.hi, 0\n\t" + "BLSMSKL $dst.lo, $src\n\t" + "JNC done\n\t" + "BLSMSKL $dst.hi, $src+4\n" + "done:" + %} + + ins_encode %{ + Label done; + Register Rdst = $dst$$Register; + Address src_hi = Address::make_raw($src$$base, $src$$index, $src$$scale, $src$$disp + 4, relocInfo::none); + + __ movl(HIGH_FROM_LOW(Rdst), 0); + __ blsmskl(Rdst, $src$$Address); + __ jccb(Assembler::carryClear, done); + __ blsmskl(HIGH_FROM_LOW(Rdst), src_hi); + __ bind(done); + %} + + ins_pipe(ialu_reg_mem); +%} + +instruct blsrL_eReg_eReg(eRegL dst, eRegL src, immL_M1 minus_1, eFlagsReg cr) +%{ + match(Set dst (AndL (AddL src minus_1) src) ); + predicate(UseBMI1Instructions); + effect(KILL cr, TEMP dst); + + format %{ "MOVL $dst.hi, $src.hi\n\t" + "BLSRL $dst.lo, $src.lo\n\t" + "JNC done\n\t" + "BLSRL $dst.hi, $src.hi\n" + "done:" + %} + + ins_encode %{ + Label done; + Register Rdst = $dst$$Register; + Register Rsrc = $src$$Register; + __ movl(HIGH_FROM_LOW(Rdst), HIGH_FROM_LOW(Rsrc)); + __ blsrl(Rdst, Rsrc); + __ jccb(Assembler::carryClear, done); + __ blsrl(HIGH_FROM_LOW(Rdst), HIGH_FROM_LOW(Rsrc)); + __ bind(done); + %} + + ins_pipe(ialu_reg); +%} + +instruct blsrL_eReg_mem(eRegL dst, memory src, immL_M1 minus_1, eFlagsReg cr) +%{ + match(Set dst (AndL (AddL (LoadL src) minus_1) (LoadL src) )); + predicate(UseBMI1Instructions); + effect(KILL cr, TEMP dst); + + ins_cost(125); + format %{ "MOVL $dst.hi, $src+4\n\t" + "BLSRL $dst.lo, $src\n\t" + "JNC done\n\t" + "BLSRL $dst.hi, $src+4\n" + "done:" + %} + + ins_encode %{ + Label done; + Register Rdst = $dst$$Register; + Address src_hi = Address::make_raw($src$$base, $src$$index, $src$$scale, $src$$disp + 4, relocInfo::none); + __ movl(HIGH_FROM_LOW(Rdst), src_hi); + __ blsrl(Rdst, $src$$Address); + __ jccb(Assembler::carryClear, done); + __ blsrl(HIGH_FROM_LOW(Rdst), src_hi); + __ bind(done); + %} + + ins_pipe(ialu_reg_mem); +%} + // Or Long Register with Register instruct orl_eReg(eRegL dst, eRegL src, eFlagsReg cr) %{ match(Set dst (OrL dst src)); diff --git a/hotspot/src/cpu/x86/vm/x86_64.ad b/hotspot/src/cpu/x86/vm/x86_64.ad index b10f920793e..cebc37cc25c 100644 --- a/hotspot/src/cpu/x86/vm/x86_64.ad +++ b/hotspot/src/cpu/x86/vm/x86_64.ad @@ -6022,6 +6022,19 @@ instruct countLeadingZerosL_bsr(rRegI dst, rRegL src, rFlagsReg cr) %{ %} instruct countTrailingZerosI(rRegI dst, rRegI src, rFlagsReg cr) %{ + predicate(UseCountTrailingZerosInstruction); + match(Set dst (CountTrailingZerosI src)); + effect(KILL cr); + + format %{ "tzcntl $dst, $src\t# count trailing zeros (int)" %} + ins_encode %{ + __ tzcntl($dst$$Register, $src$$Register); + %} + ins_pipe(ialu_reg); +%} + +instruct countTrailingZerosI_bsf(rRegI dst, rRegI src, rFlagsReg cr) %{ + predicate(!UseCountTrailingZerosInstruction); match(Set dst (CountTrailingZerosI src)); effect(KILL cr); @@ -6041,6 +6054,19 @@ instruct countTrailingZerosI(rRegI dst, rRegI src, rFlagsReg cr) %{ %} instruct countTrailingZerosL(rRegI dst, rRegL src, rFlagsReg cr) %{ + predicate(UseCountTrailingZerosInstruction); + match(Set dst (CountTrailingZerosL src)); + effect(KILL cr); + + format %{ "tzcntq $dst, $src\t# count trailing zeros (long)" %} + ins_encode %{ + __ tzcntq($dst$$Register, $src$$Register); + %} + ins_pipe(ialu_reg); +%} + +instruct countTrailingZerosL_bsf(rRegI dst, rRegL src, rFlagsReg cr) %{ + predicate(!UseCountTrailingZerosInstruction); match(Set dst (CountTrailingZerosL src)); effect(KILL cr); @@ -8622,6 +8648,122 @@ instruct andI_mem_imm(memory dst, immI src, rFlagsReg cr) ins_pipe(ialu_mem_imm); %} +// BMI1 instructions +instruct andnI_rReg_rReg_mem(rRegI dst, rRegI src1, memory src2, immI_M1 minus_1, rFlagsReg cr) %{ + match(Set dst (AndI (XorI src1 minus_1) (LoadI src2))); + predicate(UseBMI1Instructions); + effect(KILL cr); + + ins_cost(125); + format %{ "andnl $dst, $src1, $src2" %} + + ins_encode %{ + __ andnl($dst$$Register, $src1$$Register, $src2$$Address); + %} + ins_pipe(ialu_reg_mem); +%} + +instruct andnI_rReg_rReg_rReg(rRegI dst, rRegI src1, rRegI src2, immI_M1 minus_1, rFlagsReg cr) %{ + match(Set dst (AndI (XorI src1 minus_1) src2)); + predicate(UseBMI1Instructions); + effect(KILL cr); + + format %{ "andnl $dst, $src1, $src2" %} + + ins_encode %{ + __ andnl($dst$$Register, $src1$$Register, $src2$$Register); + %} + ins_pipe(ialu_reg); +%} + +instruct blsiI_rReg_rReg(rRegI dst, rRegI src, immI0 imm_zero, rFlagsReg cr) %{ + match(Set dst (AndI (SubI imm_zero src) src)); + predicate(UseBMI1Instructions); + effect(KILL cr); + + format %{ "blsil $dst, $src" %} + + ins_encode %{ + __ blsil($dst$$Register, $src$$Register); + %} + ins_pipe(ialu_reg); +%} + +instruct blsiI_rReg_mem(rRegI dst, memory src, immI0 imm_zero, rFlagsReg cr) %{ + match(Set dst (AndI (SubI imm_zero (LoadI src) ) (LoadI src) )); + predicate(UseBMI1Instructions); + effect(KILL cr); + + ins_cost(125); + format %{ "blsil $dst, $src" %} + + ins_encode %{ + __ blsil($dst$$Register, $src$$Address); + %} + ins_pipe(ialu_reg_mem); +%} + +instruct blsmskI_rReg_mem(rRegI dst, memory src, immI_M1 minus_1, rFlagsReg cr) +%{ + match(Set dst (XorI (AddI (LoadI src) minus_1) (LoadI src) ) ); + predicate(UseBMI1Instructions); + effect(KILL cr); + + ins_cost(125); + format %{ "blsmskl $dst, $src" %} + + ins_encode %{ + __ blsmskl($dst$$Register, $src$$Address); + %} + ins_pipe(ialu_reg_mem); +%} + +instruct blsmskI_rReg_rReg(rRegI dst, rRegI src, immI_M1 minus_1, rFlagsReg cr) +%{ + match(Set dst (XorI (AddI src minus_1) src)); + predicate(UseBMI1Instructions); + effect(KILL cr); + + format %{ "blsmskl $dst, $src" %} + + ins_encode %{ + __ blsmskl($dst$$Register, $src$$Register); + %} + + ins_pipe(ialu_reg); +%} + +instruct blsrI_rReg_rReg(rRegI dst, rRegI src, immI_M1 minus_1, rFlagsReg cr) +%{ + match(Set dst (AndI (AddI src minus_1) src) ); + predicate(UseBMI1Instructions); + effect(KILL cr); + + format %{ "blsrl $dst, $src" %} + + ins_encode %{ + __ blsrl($dst$$Register, $src$$Register); + %} + + ins_pipe(ialu_reg_mem); +%} + +instruct blsrI_rReg_mem(rRegI dst, memory src, immI_M1 minus_1, rFlagsReg cr) +%{ + match(Set dst (AndI (AddI (LoadI src) minus_1) (LoadI src) ) ); + predicate(UseBMI1Instructions); + effect(KILL cr); + + ins_cost(125); + format %{ "blsrl $dst, $src" %} + + ins_encode %{ + __ blsrl($dst$$Register, $src$$Address); + %} + + ins_pipe(ialu_reg); +%} + // Or Instructions // Or Register with Register instruct orI_rReg(rRegI dst, rRegI src, rFlagsReg cr) @@ -8853,6 +8995,122 @@ instruct andL_mem_imm(memory dst, immL32 src, rFlagsReg cr) ins_pipe(ialu_mem_imm); %} +// BMI1 instructions +instruct andnL_rReg_rReg_mem(rRegL dst, rRegL src1, memory src2, immL_M1 minus_1, rFlagsReg cr) %{ + match(Set dst (AndL (XorL src1 minus_1) (LoadL src2))); + predicate(UseBMI1Instructions); + effect(KILL cr); + + ins_cost(125); + format %{ "andnq $dst, $src1, $src2" %} + + ins_encode %{ + __ andnq($dst$$Register, $src1$$Register, $src2$$Address); + %} + ins_pipe(ialu_reg_mem); +%} + +instruct andnL_rReg_rReg_rReg(rRegL dst, rRegL src1, rRegL src2, immL_M1 minus_1, rFlagsReg cr) %{ + match(Set dst (AndL (XorL src1 minus_1) src2)); + predicate(UseBMI1Instructions); + effect(KILL cr); + + format %{ "andnq $dst, $src1, $src2" %} + + ins_encode %{ + __ andnq($dst$$Register, $src1$$Register, $src2$$Register); + %} + ins_pipe(ialu_reg_mem); +%} + +instruct blsiL_rReg_rReg(rRegL dst, rRegL src, immL0 imm_zero, rFlagsReg cr) %{ + match(Set dst (AndL (SubL imm_zero src) src)); + predicate(UseBMI1Instructions); + effect(KILL cr); + + format %{ "blsiq $dst, $src" %} + + ins_encode %{ + __ blsiq($dst$$Register, $src$$Register); + %} + ins_pipe(ialu_reg); +%} + +instruct blsiL_rReg_mem(rRegL dst, memory src, immL0 imm_zero, rFlagsReg cr) %{ + match(Set dst (AndL (SubL imm_zero (LoadL src) ) (LoadL src) )); + predicate(UseBMI1Instructions); + effect(KILL cr); + + ins_cost(125); + format %{ "blsiq $dst, $src" %} + + ins_encode %{ + __ blsiq($dst$$Register, $src$$Address); + %} + ins_pipe(ialu_reg_mem); +%} + +instruct blsmskL_rReg_mem(rRegL dst, memory src, immL_M1 minus_1, rFlagsReg cr) +%{ + match(Set dst (XorL (AddL (LoadL src) minus_1) (LoadL src) ) ); + predicate(UseBMI1Instructions); + effect(KILL cr); + + ins_cost(125); + format %{ "blsmskq $dst, $src" %} + + ins_encode %{ + __ blsmskq($dst$$Register, $src$$Address); + %} + ins_pipe(ialu_reg_mem); +%} + +instruct blsmskL_rReg_rReg(rRegL dst, rRegL src, immL_M1 minus_1, rFlagsReg cr) +%{ + match(Set dst (XorL (AddL src minus_1) src)); + predicate(UseBMI1Instructions); + effect(KILL cr); + + format %{ "blsmskq $dst, $src" %} + + ins_encode %{ + __ blsmskq($dst$$Register, $src$$Register); + %} + + ins_pipe(ialu_reg); +%} + +instruct blsrL_rReg_rReg(rRegL dst, rRegL src, immL_M1 minus_1, rFlagsReg cr) +%{ + match(Set dst (AndL (AddL src minus_1) src) ); + predicate(UseBMI1Instructions); + effect(KILL cr); + + format %{ "blsrq $dst, $src" %} + + ins_encode %{ + __ blsrq($dst$$Register, $src$$Register); + %} + + ins_pipe(ialu_reg); +%} + +instruct blsrL_rReg_mem(rRegL dst, memory src, immL_M1 minus_1, rFlagsReg cr) +%{ + match(Set dst (AndL (AddL (LoadL src) minus_1) (LoadL src)) ); + predicate(UseBMI1Instructions); + effect(KILL cr); + + ins_cost(125); + format %{ "blsrq $dst, $src" %} + + ins_encode %{ + __ blsrq($dst$$Register, $src$$Address); + %} + + ins_pipe(ialu_reg); +%} + // Or Instructions // Or Register with Register instruct orL_rReg(rRegL dst, rRegL src, rFlagsReg cr) diff --git a/hotspot/src/share/vm/adlc/formssel.cpp b/hotspot/src/share/vm/adlc/formssel.cpp index 614aaf1553a..df58c5746de 100644 --- a/hotspot/src/share/vm/adlc/formssel.cpp +++ b/hotspot/src/share/vm/adlc/formssel.cpp @@ -660,6 +660,7 @@ int InstructForm::memory_operand(FormDict &globals) const { int USE_of_memory = 0; int DEF_of_memory = 0; const char* last_memory_DEF = NULL; // to test DEF/USE pairing in asserts + const char* last_memory_USE = NULL; Component *unique = NULL; Component *comp = NULL; ComponentList &components = (ComponentList &)_components; @@ -681,7 +682,16 @@ int InstructForm::memory_operand(FormDict &globals) const { assert(0 == strcmp(last_memory_DEF, comp->_name), "every memory DEF is followed by a USE of the same name"); last_memory_DEF = NULL; } - USE_of_memory++; + // Handles same memory being used multiple times in the case of BMI1 instructions. + if (last_memory_USE != NULL) { + if (strcmp(comp->_name, last_memory_USE) != 0) { + USE_of_memory++; + } + } else { + USE_of_memory++; + } + last_memory_USE = comp->_name; + if (DEF_of_memory == 0) // defs take precedence unique = comp; } else { diff --git a/hotspot/src/share/vm/opto/matcher.cpp b/hotspot/src/share/vm/opto/matcher.cpp index 03ee1dc8086..f263a3c5044 100644 --- a/hotspot/src/share/vm/opto/matcher.cpp +++ b/hotspot/src/share/vm/opto/matcher.cpp @@ -1922,6 +1922,105 @@ OptoReg::Name Matcher::find_receiver( bool is_outgoing ) { return OptoReg::as_OptoReg(regs.first()); } +// This function identifies sub-graphs in which a 'load' node is +// input to two different nodes, and such that it can be matched +// with BMI instructions like blsi, blsr, etc. +// Example : for b = -a[i] & a[i] can be matched to blsi r32, m32. +// The graph is (AndL (SubL Con0 LoadL*) LoadL*), where LoadL* +// refers to the same node. +#ifdef X86 +// Match the generic fused operations pattern (op1 (op2 Con{ConType} mop) mop) +// This is a temporary solution until we make DAGs expressible in ADL. +template +class FusedPatternMatcher { + Node* _op1_node; + Node* _mop_node; + int _con_op; + + static int match_next(Node* n, int next_op, int next_op_idx) { + if (n->in(1) == NULL || n->in(2) == NULL) { + return -1; + } + + if (next_op_idx == -1) { // n is commutative, try rotations + if (n->in(1)->Opcode() == next_op) { + return 1; + } else if (n->in(2)->Opcode() == next_op) { + return 2; + } + } else { + assert(next_op_idx > 0 && next_op_idx <= 2, "Bad argument index"); + if (n->in(next_op_idx)->Opcode() == next_op) { + return next_op_idx; + } + } + return -1; + } +public: + FusedPatternMatcher(Node* op1_node, Node *mop_node, int con_op) : + _op1_node(op1_node), _mop_node(mop_node), _con_op(con_op) { } + + bool match(int op1, int op1_op2_idx, // op1 and the index of the op1->op2 edge, -1 if op1 is commutative + int op2, int op2_con_idx, // op2 and the index of the op2->con edge, -1 if op2 is commutative + typename ConType::NativeType con_value) { + if (_op1_node->Opcode() != op1) { + return false; + } + if (_mop_node->outcnt() > 2) { + return false; + } + op1_op2_idx = match_next(_op1_node, op2, op1_op2_idx); + if (op1_op2_idx == -1) { + return false; + } + // Memory operation must be the other edge + int op1_mop_idx = (op1_op2_idx & 1) + 1; + + // Check that the mop node is really what we want + if (_op1_node->in(op1_mop_idx) == _mop_node) { + Node *op2_node = _op1_node->in(op1_op2_idx); + if (op2_node->outcnt() > 1) { + return false; + } + assert(op2_node->Opcode() == op2, "Should be"); + op2_con_idx = match_next(op2_node, _con_op, op2_con_idx); + if (op2_con_idx == -1) { + return false; + } + // Memory operation must be the other edge + int op2_mop_idx = (op2_con_idx & 1) + 1; + // Check that the memory operation is the same node + if (op2_node->in(op2_mop_idx) == _mop_node) { + // Now check the constant + const Type* con_type = op2_node->in(op2_con_idx)->bottom_type(); + if (con_type != Type::TOP && ConType::as_self(con_type)->get_con() == con_value) { + return true; + } + } + } + return false; + } +}; + + +bool Matcher::is_bmi_pattern(Node *n, Node *m) { + if (n != NULL && m != NULL) { + if (m->Opcode() == Op_LoadI) { + FusedPatternMatcher bmii(n, m, Op_ConI); + return bmii.match(Op_AndI, -1, Op_SubI, 1, 0) || + bmii.match(Op_AndI, -1, Op_AddI, -1, -1) || + bmii.match(Op_XorI, -1, Op_AddI, -1, -1); + } else if (m->Opcode() == Op_LoadL) { + FusedPatternMatcher bmil(n, m, Op_ConL); + return bmil.match(Op_AndL, -1, Op_SubL, 1, 0) || + bmil.match(Op_AndL, -1, Op_AddL, -1, -1) || + bmil.match(Op_XorL, -1, Op_AddL, -1, -1); + } + } + return false; +} +#endif // X86 + // A method-klass-holder may be passed in the inline_cache_reg // and then expanded into the inline_cache_reg and a method_oop register // defined in ad_.cpp @@ -2077,6 +2176,14 @@ void Matcher::find_shared( Node *n ) { set_shared(m->in(AddPNode::Base)->in(1)); } + // if 'n' and 'm' are part of a graph for BMI instruction, clone this node. +#ifdef X86 + if (UseBMI1Instructions && is_bmi_pattern(n, m)) { + mstack.push(m, Visit); + continue; + } +#endif + // Clone addressing expressions as they are "free" in memory access instructions if( mem_op && i == MemNode::Address && mop == Op_AddP ) { // Some inputs for address expression are not put on stack diff --git a/hotspot/src/share/vm/opto/matcher.hpp b/hotspot/src/share/vm/opto/matcher.hpp index 38eeca40290..66d4a0adab9 100644 --- a/hotspot/src/share/vm/opto/matcher.hpp +++ b/hotspot/src/share/vm/opto/matcher.hpp @@ -79,6 +79,9 @@ class Matcher : public PhaseTransform { // Find shared Nodes, or Nodes that otherwise are Matcher roots void find_shared( Node *n ); +#ifdef X86 + bool is_bmi_pattern(Node *n, Node *m); +#endif // Debug and profile information for nodes in old space: GrowableArray* _old_node_note_array; diff --git a/hotspot/test/compiler/codegen/BMI1.java b/hotspot/test/compiler/codegen/BMI1.java new file mode 100644 index 00000000000..ada9cf06c34 --- /dev/null +++ b/hotspot/test/compiler/codegen/BMI1.java @@ -0,0 +1,301 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 8031321 + * @summary Support BMI1 instructions on x86/x64 + * @run main/othervm -Xbatch -XX:-TieredCompilation -XX:CompileCommand=compileonly,BMITests.* BMI1 + * + */ + +class MemI { + public int x; + public MemI(int x) { this.x = x; } +} + +class MemL { + public long x; + public MemL(long x) { this.x = x; } +} + +class BMITests { + static int andnl(int src1, int src2) { + return ~src1 & src2; + } + static long andnq(long src1, long src2) { + return ~src1 & src2; + } + static int andnl(int src1, MemI src2) { + return ~src1 & src2.x; + } + static long andnq(long src1, MemL src2) { + return ~src1 & src2.x; + } + static int blsil(int src1) { + return src1 & -src1; + } + static long blsiq(long src1) { + return src1 & -src1; + } + static int blsil(MemI src1) { + return src1.x & -src1.x; + } + static long blsiq(MemL src1) { + return src1.x & -src1.x; + } + static int blsmskl(int src1) { + return (src1 - 1) ^ src1; + } + static long blsmskq(long src1) { + return (src1 - 1) ^ src1; + } + static int blsmskl(MemI src1) { + return (src1.x - 1) ^ src1.x; + } + static long blsmskq(MemL src1) { + return (src1.x - 1) ^ src1.x; + } + static int blsrl(int src1) { + return (src1 - 1) & src1; + } + static long blsrq(long src1) { + return (src1 - 1) & src1; + } + static int blsrl(MemI src1) { + return (src1.x - 1) & src1.x; + } + static long blsrq(MemL src1) { + return (src1.x - 1) & src1.x; + } + static int lzcntl(int src1) { + return Integer.numberOfLeadingZeros(src1); + } + static int lzcntq(long src1) { + return Long.numberOfLeadingZeros(src1); + } + static int tzcntl(int src1) { + return Integer.numberOfTrailingZeros(src1); + } + static int tzcntq(long src1) { + return Long.numberOfTrailingZeros(src1); + } +} + +public class BMI1 { + private final static int ITERATIONS = 1000000; + + public static void main(String[] args) { + int ix = 0x01234567; + int iy = 0x89abcdef; + MemI imy = new MemI(iy); + long lx = 0x0123456701234567L; + long ly = 0x89abcdef89abcdefL; + MemL lmy = new MemL(ly); + + { // match(Set dst (AndI (XorI src1 minus_1) src2)) + int z = BMITests.andnl(ix, iy); + for (int i = 0; i < ITERATIONS; i++) { + int ii = BMITests.andnl(ix, iy); + if (ii != z) { + throw new Error("andnl with register failed"); + } + } + } + { // match(Set dst (AndL (XorL src1 minus_1) src2)) + long z = BMITests.andnq(lx, ly); + for (int i = 0; i < ITERATIONS; i++) { + long ll = BMITests.andnq(lx, ly); + if (ll != z) { + throw new Error("andnq with register failed"); + } + } + } + { // match(Set dst (AndI (XorI src1 minus_1) (LoadI src2))) + int z = BMITests.andnl(ix, imy); + for (int i = 0; i < ITERATIONS; i++) { + int ii = BMITests.andnl(ix, imy); + if (ii != z) { + throw new Error("andnl with memory failed"); + } + } + } + { // match(Set dst (AndL (XorL src1 minus_1) (LoadL src2))) + long z = BMITests.andnq(lx, lmy); + for (int i = 0; i < ITERATIONS; i++) { + long ll = BMITests.andnq(lx, lmy); + if (ll != z) { + throw new Error("andnq with memory failed"); + } + } + } + { // match(Set dst (AndI (SubI imm_zero src) src)) + int z = BMITests.blsil(ix); + for (int i = 0; i < ITERATIONS; i++) { + int ii = BMITests.blsil(ix); + if (ii != z) { + throw new Error("blsil with register failed"); + } + } + } + { // match(Set dst (AndL (SubL imm_zero src) src)) + long z = BMITests.blsiq(lx); + for (int i = 0; i < ITERATIONS; i++) { + long ll = BMITests.blsiq(lx); + if (ll != z) { + throw new Error("blsiq with register failed"); + } + } + } + { // match(Set dst (AndI (SubI imm_zero (LoadI src) ) (LoadI src) )) + int z = BMITests.blsil(imy); + for (int i = 0; i < ITERATIONS; i++) { + int ii = BMITests.blsil(imy); + if (ii != z) { + throw new Error("blsil with memory failed"); + } + } + } + { // match(Set dst (AndL (SubL imm_zero (LoadL src) ) (LoadL src) )) + long z = BMITests.blsiq(lmy); + for (int i = 0; i < ITERATIONS; i++) { + long ll = BMITests.blsiq(lmy); + if (ll != z) { + throw new Error("blsiq with memory failed"); + } + } + } + + { // match(Set dst (XorI (AddI src minus_1) src)) + int z = BMITests.blsmskl(ix); + for (int i = 0; i < ITERATIONS; i++) { + int ii = BMITests.blsmskl(ix); + if (ii != z) { + throw new Error("blsmskl with register failed"); + } + } + } + { // match(Set dst (XorL (AddL src minus_1) src)) + long z = BMITests.blsmskq(lx); + for (int i = 0; i < ITERATIONS; i++) { + long ll = BMITests.blsmskq(lx); + if (ll != z) { + throw new Error("blsmskq with register failed"); + } + } + } + { // match(Set dst (XorI (AddI (LoadI src) minus_1) (LoadI src) ) ) + int z = BMITests.blsmskl(imy); + for (int i = 0; i < ITERATIONS; i++) { + int ii = BMITests.blsmskl(imy); + if (ii != z) { + throw new Error("blsmskl with memory failed"); + } + } + } + { // match(Set dst (XorL (AddL (LoadL src) minus_1) (LoadL src) ) ) + long z = BMITests.blsmskq(lmy); + for (int i = 0; i < ITERATIONS; i++) { + long ll = BMITests.blsmskq(lmy); + if (ll != z) { + throw new Error("blsmskq with memory failed"); + } + } + } + + { // match(Set dst (AndI (AddI src minus_1) src) ) + int z = BMITests.blsrl(ix); + for (int i = 0; i < ITERATIONS; i++) { + int ii = BMITests.blsrl(ix); + if (ii != z) { + throw new Error("blsrl with register failed"); + } + } + } + { // match(Set dst (AndL (AddL src minus_1) src) ) + long z = BMITests.blsrq(lx); + for (int i = 0; i < ITERATIONS; i++) { + long ll = BMITests.blsrq(lx); + if (ll != z) { + throw new Error("blsrq with register failed"); + } + } + } + { // match(Set dst (AndI (AddI (LoadI src) minus_1) (LoadI src) ) ) + int z = BMITests.blsrl(imy); + for (int i = 0; i < ITERATIONS; i++) { + int ii = BMITests.blsrl(imy); + if (ii != z) { + throw new Error("blsrl with memory failed"); + } + } + } + { // match(Set dst (AndL (AddL (LoadL src) minus_1) (LoadL src)) ) + long z = BMITests.blsrq(lmy); + for (int i = 0; i < ITERATIONS; i++) { + long ll = BMITests.blsrq(lmy); + if (ll != z) { + throw new Error("blsrq with memory failed"); + } + } + } + + { + int z = BMITests.lzcntl(ix); + for (int i = 0; i < ITERATIONS; i++) { + int ii = BMITests.lzcntl(ix); + if (ii != z) { + throw new Error("lzcntl failed"); + } + } + } + { + int z = BMITests.lzcntq(lx); + for (int i = 0; i < ITERATIONS; i++) { + int ii = BMITests.lzcntq(lx); + if (ii != z) { + throw new Error("lzcntq failed"); + } + } + } + + { + int z = BMITests.tzcntl(ix); + for (int i = 0; i < ITERATIONS; i++) { + int ii = BMITests.tzcntl(ix); + if (ii != z) { + throw new Error("tzcntl failed"); + } + } + } + { + int z = BMITests.tzcntq(lx); + for (int i = 0; i < ITERATIONS; i++) { + int ii = BMITests.tzcntq(lx); + if (ii != z) { + throw new Error("tzcntq failed"); + } + } + } + } +} From faad7883f26dcc7b43efc99cc417844f2142e823 Mon Sep 17 00:00:00 2001 From: Axel Siebenborn Date: Mon, 10 Mar 2014 12:58:02 +0100 Subject: [PATCH 051/116] 8036976: PPC64: implement the template interpreter Co-authored-by: Martin Doerr Reviewed-by: kvn, coleenp --- hotspot/make/aix/Makefile | 4 + hotspot/make/linux/Makefile | 4 + hotspot/src/cpu/ppc/vm/cppInterpreter_ppc.cpp | 6 +- hotspot/src/cpu/ppc/vm/frame_ppc.cpp | 30 +- hotspot/src/cpu/ppc/vm/frame_ppc.hpp | 96 +- hotspot/src/cpu/ppc/vm/frame_ppc.inline.hpp | 75 +- hotspot/src/cpu/ppc/vm/interp_masm_ppc_64.cpp | 1731 ++++++- hotspot/src/cpu/ppc/vm/interp_masm_ppc_64.hpp | 218 +- hotspot/src/cpu/ppc/vm/interpreter_ppc.cpp | 58 +- hotspot/src/cpu/ppc/vm/interpreter_ppc.hpp | 14 +- .../src/cpu/ppc/vm/javaFrameAnchor_ppc.hpp | 6 +- hotspot/src/cpu/ppc/vm/macroAssembler_ppc.cpp | 25 +- hotspot/src/cpu/ppc/vm/macroAssembler_ppc.hpp | 24 +- .../cpu/ppc/vm/macroAssembler_ppc.inline.hpp | 21 +- hotspot/src/cpu/ppc/vm/register_ppc.hpp | 32 +- hotspot/src/cpu/ppc/vm/sharedRuntime_ppc.cpp | 43 +- hotspot/src/cpu/ppc/vm/stubGenerator_ppc.cpp | 22 +- .../vm/templateInterpreterGenerator_ppc.hpp | 44 + .../cpu/ppc/vm/templateInterpreter_ppc.cpp | 1813 ++++++++ .../cpu/ppc/vm/templateInterpreter_ppc.hpp | 41 + .../src/cpu/ppc/vm/templateTable_ppc_64.cpp | 4082 +++++++++++++++++ .../src/cpu/ppc/vm/templateTable_ppc_64.hpp | 38 + .../share/vm/interpreter/templateTable.hpp | 3 + 23 files changed, 8327 insertions(+), 103 deletions(-) create mode 100644 hotspot/src/cpu/ppc/vm/templateInterpreterGenerator_ppc.hpp create mode 100644 hotspot/src/cpu/ppc/vm/templateInterpreter_ppc.cpp create mode 100644 hotspot/src/cpu/ppc/vm/templateInterpreter_ppc.hpp create mode 100644 hotspot/src/cpu/ppc/vm/templateTable_ppc_64.cpp create mode 100644 hotspot/src/cpu/ppc/vm/templateTable_ppc_64.hpp diff --git a/hotspot/make/aix/Makefile b/hotspot/make/aix/Makefile index 19bab5494bc..79bcf7880ac 100644 --- a/hotspot/make/aix/Makefile +++ b/hotspot/make/aix/Makefile @@ -70,6 +70,10 @@ ifndef CC_INTERP FORCE_TIERED=1 endif endif +# C1 is not ported on ppc64(le), so we cannot build a tiered VM: +ifneq (,$(filter $(ARCH),ppc64 pp64le)) + FORCE_TIERED=0 +endif ifdef LP64 ifeq ("$(filter $(LP64_ARCH),$(BUILDARCH))","") diff --git a/hotspot/make/linux/Makefile b/hotspot/make/linux/Makefile index 0820c254612..8321f8e15db 100644 --- a/hotspot/make/linux/Makefile +++ b/hotspot/make/linux/Makefile @@ -66,6 +66,10 @@ ifndef CC_INTERP FORCE_TIERED=1 endif endif +# C1 is not ported on ppc64(le), so we cannot build a tiered VM: +ifneq (,$(filter $(ARCH),ppc64 pp64le)) + FORCE_TIERED=0 +endif ifdef LP64 ifeq ("$(filter $(LP64_ARCH),$(BUILDARCH))","") diff --git a/hotspot/src/cpu/ppc/vm/cppInterpreter_ppc.cpp b/hotspot/src/cpu/ppc/vm/cppInterpreter_ppc.cpp index 44c09d9c30a..5cf5a6a6573 100644 --- a/hotspot/src/cpu/ppc/vm/cppInterpreter_ppc.cpp +++ b/hotspot/src/cpu/ppc/vm/cppInterpreter_ppc.cpp @@ -1353,9 +1353,9 @@ address CppInterpreterGenerator::generate_native_entry(void) { // notify here, we'll drop it on the floor. __ notify_method_exit(true/*native method*/, - ilgl /*illegal state (not used for native methods)*/); - - + ilgl /*illegal state (not used for native methods)*/, + InterpreterMacroAssembler::NotifyJVMTI, + false /*check_exceptions*/); //============================================================================= // Handle exceptions diff --git a/hotspot/src/cpu/ppc/vm/frame_ppc.cpp b/hotspot/src/cpu/ppc/vm/frame_ppc.cpp index 1cd2c6a0a5b..6df316d1b87 100644 --- a/hotspot/src/cpu/ppc/vm/frame_ppc.cpp +++ b/hotspot/src/cpu/ppc/vm/frame_ppc.cpp @@ -1,6 +1,6 @@ /* * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. - * Copyright 2012, 2013 SAP AG. All rights reserved. + * Copyright 2012, 2014 SAP AG. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -42,10 +42,6 @@ #include "runtime/vframeArray.hpp" #endif -#ifndef CC_INTERP -#error "CC_INTERP must be defined on PPC64" -#endif - #ifdef ASSERT void RegisterMap::check_location_valid() { } @@ -89,7 +85,10 @@ frame frame::sender_for_entry_frame(RegisterMap *map) const { frame frame::sender_for_interpreter_frame(RegisterMap *map) const { // Pass callers initial_caller_sp as unextended_sp. - return frame(sender_sp(), sender_pc(), (intptr_t*)((parent_ijava_frame_abi *)callers_abi())->initial_caller_sp); + return frame(sender_sp(), sender_pc(), + CC_INTERP_ONLY((intptr_t*)((parent_ijava_frame_abi *)callers_abi())->initial_caller_sp) + NOT_CC_INTERP((intptr_t*)get_ijava_state()->sender_sp) + ); } frame frame::sender_for_compiled_frame(RegisterMap *map) const { @@ -183,6 +182,9 @@ BasicType frame::interpreter_frame_result(oop* oop_result, jvalue* value_result) interpreterState istate = get_interpreterState(); address lresult = (address)istate + in_bytes(BytecodeInterpreter::native_lresult_offset()); address fresult = (address)istate + in_bytes(BytecodeInterpreter::native_fresult_offset()); +#else + address lresult = (address)&(get_ijava_state()->lresult); + address fresult = (address)&(get_ijava_state()->fresult); #endif switch (method->result_type()) { @@ -259,7 +261,21 @@ void frame::describe_pd(FrameValues& values, int frame_no) { values.describe(frame_no, (intptr_t*)&(istate->_native_fresult), " native_fresult"); values.describe(frame_no, (intptr_t*)&(istate->_native_lresult), " native_lresult"); #else - Unimplemented(); +#define DESCRIBE_ADDRESS(name) \ + values.describe(frame_no, (intptr_t*)&(get_ijava_state()->name), #name); + + DESCRIBE_ADDRESS(method); + DESCRIBE_ADDRESS(locals); + DESCRIBE_ADDRESS(monitors); + DESCRIBE_ADDRESS(cpoolCache); + DESCRIBE_ADDRESS(bcp); + DESCRIBE_ADDRESS(esp); + DESCRIBE_ADDRESS(mdx); + DESCRIBE_ADDRESS(top_frame_sp); + DESCRIBE_ADDRESS(sender_sp); + DESCRIBE_ADDRESS(oop_tmp); + DESCRIBE_ADDRESS(lresult); + DESCRIBE_ADDRESS(fresult); #endif } } diff --git a/hotspot/src/cpu/ppc/vm/frame_ppc.hpp b/hotspot/src/cpu/ppc/vm/frame_ppc.hpp index b0a350252ad..f327d2ce424 100644 --- a/hotspot/src/cpu/ppc/vm/frame_ppc.hpp +++ b/hotspot/src/cpu/ppc/vm/frame_ppc.hpp @@ -1,6 +1,6 @@ /* * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. - * Copyright 2012, 2013 SAP AG. All rights reserved. + * Copyright 2012, 2014 SAP AG. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -29,10 +29,6 @@ #include "runtime/synchronizer.hpp" #include "utilities/top.hpp" -#ifndef CC_INTERP -#error "CC_INTERP must be defined on PPC64" -#endif - // C frame layout on PPC-64. // // In this figure the stack grows upwards, while memory grows @@ -197,7 +193,85 @@ #define _spill_nonvolatiles_neg(_component) \ (int)(-frame::spill_nonvolatiles_size + offset_of(frame::spill_nonvolatiles, _component)) - // Frame layout for the Java interpreter on PPC64. + + +#ifndef CC_INTERP + // Frame layout for the Java template interpreter on PPC64. + // + // Diffs to the CC_INTERP are marked with 'X'. + // + // TOP_IJAVA_FRAME: + // + // 0 [TOP_IJAVA_FRAME_ABI] + // alignment (optional) + // [operand stack] + // [monitors] (optional) + // X[IJAVA_STATE] + // note: own locals are located in the caller frame. + // + // PARENT_IJAVA_FRAME: + // + // 0 [PARENT_IJAVA_FRAME_ABI] + // alignment (optional) + // [callee's Java result] + // [callee's locals w/o arguments] + // [outgoing arguments] + // [used part of operand stack w/o arguments] + // [monitors] (optional) + // X[IJAVA_STATE] + // + + struct parent_ijava_frame_abi : abi_minframe { + }; + + enum { + parent_ijava_frame_abi_size = sizeof(parent_ijava_frame_abi) + }; + +#define _parent_ijava_frame_abi(_component) \ + (offset_of(frame::parent_ijava_frame_abi, _component)) + + struct top_ijava_frame_abi : abi_reg_args { + }; + + enum { + top_ijava_frame_abi_size = sizeof(top_ijava_frame_abi) + }; + +#define _top_ijava_frame_abi(_component) \ + (offset_of(frame::top_ijava_frame_abi, _component)) + + struct ijava_state { +#ifdef ASSERT + uint64_t ijava_reserved; // Used for assertion. + uint64_t ijava_reserved2; // Inserted for alignment. +#endif + uint64_t method; + uint64_t locals; + uint64_t monitors; + uint64_t cpoolCache; + uint64_t bcp; + uint64_t esp; + uint64_t mdx; + uint64_t top_frame_sp; // Maybe define parent_frame_abi and move there. + uint64_t sender_sp; + // Slots only needed for native calls. Maybe better to move elsewhere. + uint64_t oop_tmp; + uint64_t lresult; + uint64_t fresult; + // Aligned to frame::alignment_in_bytes (16). + }; + + enum { + ijava_state_size = sizeof(ijava_state) + }; + +#define _ijava_state_neg(_component) \ + (int) (-frame::ijava_state_size + offset_of(frame::ijava_state, _component)) + +#else // CC_INTERP: + + // Frame layout for the Java C++ interpreter on PPC64. // // This frame layout provides a C-like frame for every Java frame. // @@ -300,6 +374,8 @@ #define _top_ijava_frame_abi(_component) \ (offset_of(frame::top_ijava_frame_abi, _component)) +#endif // CC_INTERP + // ENTRY_FRAME struct entry_frame_locals { @@ -423,6 +499,14 @@ #ifdef CC_INTERP // Additional interface for interpreter frames: inline interpreterState get_interpreterState() const; +#else + inline ijava_state* get_ijava_state() const; + // Some convenient register frame setters/getters for deoptimization. + inline intptr_t* interpreter_frame_esp() const; + inline void interpreter_frame_set_cpcache(ConstantPoolCache* cp); + inline void interpreter_frame_set_esp(intptr_t* esp); + inline void interpreter_frame_set_top_frame_sp(intptr_t* top_frame_sp); + inline void interpreter_frame_set_sender_sp(intptr_t* sender_sp); #endif // CC_INTERP // Size of a monitor in bytes. diff --git a/hotspot/src/cpu/ppc/vm/frame_ppc.inline.hpp b/hotspot/src/cpu/ppc/vm/frame_ppc.inline.hpp index 2dadd6c69eb..8e46363eac9 100644 --- a/hotspot/src/cpu/ppc/vm/frame_ppc.inline.hpp +++ b/hotspot/src/cpu/ppc/vm/frame_ppc.inline.hpp @@ -1,6 +1,6 @@ /* * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. - * Copyright 2012, 2013 SAP AG. All rights reserved. + * Copyright 2012, 2014 SAP AG. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -26,10 +26,6 @@ #ifndef CPU_PPC_VM_FRAME_PPC_INLINE_HPP #define CPU_PPC_VM_FRAME_PPC_INLINE_HPP -#ifndef CC_INTERP -#error "CC_INTERP must be defined on PPC64" -#endif - // Inline functions for ppc64 frames: // Find codeblob and set deopt_state. @@ -199,6 +195,75 @@ inline ConstantPoolCache** frame::interpreter_frame_cache_addr() const { interpreterState istate = get_interpreterState(); return &istate->_constants; } + +#else // !CC_INTERP + +// Template Interpreter frame value accessors. + +inline frame::ijava_state* frame::get_ijava_state() const { + return (ijava_state*) ((uintptr_t)fp() - ijava_state_size); +} + +inline intptr_t** frame::interpreter_frame_locals_addr() const { + return (intptr_t**) &(get_ijava_state()->locals); +} +inline intptr_t* frame::interpreter_frame_bcx_addr() const { + return (intptr_t*) &(get_ijava_state()->bcp); +} +inline intptr_t* frame::interpreter_frame_mdx_addr() const { + return (intptr_t*) &(get_ijava_state()->mdx); +} +// Pointer beyond the "oldest/deepest" BasicObjectLock on stack. +inline BasicObjectLock* frame::interpreter_frame_monitor_end() const { + return (BasicObjectLock *) get_ijava_state()->monitors; +} + +inline BasicObjectLock* frame::interpreter_frame_monitor_begin() const { + return (BasicObjectLock *) get_ijava_state(); +} + +// SAPJVM ASc 2012-11-21. Return register stack slot addr at which currently interpreted method is found +inline Method** frame::interpreter_frame_method_addr() const { + return (Method**) &(get_ijava_state()->method); +} +inline ConstantPoolCache** frame::interpreter_frame_cpoolcache_addr() const { + return (ConstantPoolCache**) &(get_ijava_state()->cpoolCache); +} +inline ConstantPoolCache** frame::interpreter_frame_cache_addr() const { + return (ConstantPoolCache**) &(get_ijava_state()->cpoolCache); +} + +inline oop* frame::interpreter_frame_temp_oop_addr() const { + return (oop *) &(get_ijava_state()->oop_tmp); +} +inline intptr_t* frame::interpreter_frame_esp() const { + return (intptr_t*) get_ijava_state()->esp; +} + +// Convenient setters +inline void frame::interpreter_frame_set_monitor_end(BasicObjectLock* end) { get_ijava_state()->monitors = (intptr_t) end;} +inline void frame::interpreter_frame_set_cpcache(ConstantPoolCache* cp) { *frame::interpreter_frame_cpoolcache_addr() = cp; } +inline void frame::interpreter_frame_set_esp(intptr_t* esp) { get_ijava_state()->esp = (intptr_t) esp; } +inline void frame::interpreter_frame_set_top_frame_sp(intptr_t* top_frame_sp) { get_ijava_state()->top_frame_sp = (intptr_t) top_frame_sp; } +inline void frame::interpreter_frame_set_sender_sp(intptr_t* sender_sp) { get_ijava_state()->sender_sp = (intptr_t) sender_sp; } + +inline intptr_t* frame::interpreter_frame_expression_stack() const { + return (intptr_t*)interpreter_frame_monitor_end() - 1; +} + +inline jint frame::interpreter_frame_expression_stack_direction() { + return -1; +} + +// top of expression stack +inline intptr_t* frame::interpreter_frame_tos_address() const { + return ((intptr_t*) get_ijava_state()->esp) + Interpreter::stackElementWords; +} + +inline intptr_t* frame::interpreter_frame_tos_at(jint offset) const { + return &interpreter_frame_tos_address()[offset]; +} + #endif // CC_INTERP inline int frame::interpreter_frame_monitor_size() { diff --git a/hotspot/src/cpu/ppc/vm/interp_masm_ppc_64.cpp b/hotspot/src/cpu/ppc/vm/interp_masm_ppc_64.cpp index 5d135199b7e..f71acaca095 100644 --- a/hotspot/src/cpu/ppc/vm/interp_masm_ppc_64.cpp +++ b/hotspot/src/cpu/ppc/vm/interp_masm_ppc_64.cpp @@ -1,6 +1,6 @@ /* * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved. - * Copyright 2012, 2013 SAP AG. All rights reserved. + * Copyright 2012, 2014 SAP AG. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -29,6 +29,7 @@ #include "asm/macroAssembler.inline.hpp" #include "interp_masm_ppc_64.hpp" #include "interpreter/interpreterRuntime.hpp" +#include "prims/jvmtiThreadState.hpp" #ifdef PRODUCT #define BLOCK_COMMENT(str) // nothing @@ -45,6 +46,691 @@ void InterpreterMacroAssembler::null_check_throw(Register a, int offset, Registe MacroAssembler::null_check_throw(a, offset, temp_reg, exception_entry); } +void InterpreterMacroAssembler::branch_to_entry(address entry, Register Rscratch) { + assert(entry, "Entry must have been generated by now"); + if (is_within_range_of_b(entry, pc())) { + b(entry); + } else { + load_const_optimized(Rscratch, entry, R0); + mtctr(Rscratch); + bctr(); + } +} + +#ifndef CC_INTERP + +void InterpreterMacroAssembler::dispatch_next(TosState state, int bcp_incr) { + Register bytecode = R12_scratch2; + if (bcp_incr != 0) { + lbzu(bytecode, bcp_incr, R14_bcp); + } else { + lbz(bytecode, 0, R14_bcp); + } + + dispatch_Lbyte_code(state, bytecode, Interpreter::dispatch_table(state)); +} + +void InterpreterMacroAssembler::dispatch_via(TosState state, address* table) { + // Load current bytecode. + Register bytecode = R12_scratch2; + lbz(bytecode, 0, R14_bcp); + dispatch_Lbyte_code(state, bytecode, table); +} + +// Dispatch code executed in the prolog of a bytecode which does not do it's +// own dispatch. The dispatch address is computed and placed in R24_dispatch_addr. +void InterpreterMacroAssembler::dispatch_prolog(TosState state, int bcp_incr) { + Register bytecode = R12_scratch2; + lbz(bytecode, bcp_incr, R14_bcp); + + load_dispatch_table(R24_dispatch_addr, Interpreter::dispatch_table(state)); + + sldi(bytecode, bytecode, LogBytesPerWord); + ldx(R24_dispatch_addr, R24_dispatch_addr, bytecode); +} + +// Dispatch code executed in the epilog of a bytecode which does not do it's +// own dispatch. The dispatch address in R24_dispatch_addr is used for the +// dispatch. +void InterpreterMacroAssembler::dispatch_epilog(TosState state, int bcp_incr) { + mtctr(R24_dispatch_addr); + addi(R14_bcp, R14_bcp, bcp_incr); + bctr(); +} + +void InterpreterMacroAssembler::check_and_handle_popframe(Register scratch_reg) { + assert(scratch_reg != R0, "can't use R0 as scratch_reg here"); + if (JvmtiExport::can_pop_frame()) { + Label L; + + // Check the "pending popframe condition" flag in the current thread. + lwz(scratch_reg, in_bytes(JavaThread::popframe_condition_offset()), R16_thread); + + // Initiate popframe handling only if it is not already being + // processed. If the flag has the popframe_processing bit set, it + // means that this code is called *during* popframe handling - we + // don't want to reenter. + andi_(R0, scratch_reg, JavaThread::popframe_pending_bit); + beq(CCR0, L); + + andi_(R0, scratch_reg, JavaThread::popframe_processing_bit); + bne(CCR0, L); + + // Call the Interpreter::remove_activation_preserving_args_entry() + // func to get the address of the same-named entrypoint in the + // generated interpreter code. + call_c(CAST_FROM_FN_PTR(FunctionDescriptor*, + Interpreter::remove_activation_preserving_args_entry), + relocInfo::none); + + // Jump to Interpreter::_remove_activation_preserving_args_entry. + mtctr(R3_RET); + bctr(); + + align(32, 12); + bind(L); + } +} + +void InterpreterMacroAssembler::check_and_handle_earlyret(Register scratch_reg) { + const Register Rthr_state_addr = scratch_reg; + if (JvmtiExport::can_force_early_return()) { + Label Lno_early_ret; + ld(Rthr_state_addr, in_bytes(JavaThread::jvmti_thread_state_offset()), R16_thread); + cmpdi(CCR0, Rthr_state_addr, 0); + beq(CCR0, Lno_early_ret); + + lwz(R0, in_bytes(JvmtiThreadState::earlyret_state_offset()), Rthr_state_addr); + cmpwi(CCR0, R0, JvmtiThreadState::earlyret_pending); + bne(CCR0, Lno_early_ret); + + // Jump to Interpreter::_earlyret_entry. + lwz(R3_ARG1, in_bytes(JvmtiThreadState::earlyret_tos_offset()), Rthr_state_addr); + call_VM_leaf(CAST_FROM_FN_PTR(address, Interpreter::remove_activation_early_entry)); + mtlr(R3_RET); + blr(); + + align(32, 12); + bind(Lno_early_ret); + } +} + +void InterpreterMacroAssembler::load_earlyret_value(TosState state, Register Rscratch1) { + const Register RjvmtiState = Rscratch1; + const Register Rscratch2 = R0; + + ld(RjvmtiState, in_bytes(JavaThread::jvmti_thread_state_offset()), R16_thread); + li(Rscratch2, 0); + + switch (state) { + case atos: ld(R17_tos, in_bytes(JvmtiThreadState::earlyret_oop_offset()), RjvmtiState); + std(Rscratch2, in_bytes(JvmtiThreadState::earlyret_oop_offset()), RjvmtiState); + break; + case ltos: ld(R17_tos, in_bytes(JvmtiThreadState::earlyret_value_offset()), RjvmtiState); + break; + case btos: // fall through + case ctos: // fall through + case stos: // fall through + case itos: lwz(R17_tos, in_bytes(JvmtiThreadState::earlyret_value_offset()), RjvmtiState); + break; + case ftos: lfs(F15_ftos, in_bytes(JvmtiThreadState::earlyret_value_offset()), RjvmtiState); + break; + case dtos: lfd(F15_ftos, in_bytes(JvmtiThreadState::earlyret_value_offset()), RjvmtiState); + break; + case vtos: break; + default : ShouldNotReachHere(); + } + + // Clean up tos value in the jvmti thread state. + std(Rscratch2, in_bytes(JvmtiThreadState::earlyret_value_offset()), RjvmtiState); + // Set tos state field to illegal value. + li(Rscratch2, ilgl); + stw(Rscratch2, in_bytes(JvmtiThreadState::earlyret_tos_offset()), RjvmtiState); +} + +// Common code to dispatch and dispatch_only. +// Dispatch value in Lbyte_code and increment Lbcp. + +void InterpreterMacroAssembler::load_dispatch_table(Register dst, address* table) { + address table_base = (address)Interpreter::dispatch_table((TosState)0); + intptr_t table_offs = (intptr_t)table - (intptr_t)table_base; + if (is_simm16(table_offs)) { + addi(dst, R25_templateTableBase, (int)table_offs); + } else { + load_const_optimized(dst, table, R0); + } +} + +void InterpreterMacroAssembler::dispatch_Lbyte_code(TosState state, Register bytecode, address* table, bool verify) { + if (verify) { + unimplemented("dispatch_Lbyte_code: verify"); // See Sparc Implementation to implement this + } + +#ifdef FAST_DISPATCH + unimplemented("dispatch_Lbyte_code FAST_DISPATCH"); +#else + assert_different_registers(bytecode, R11_scratch1); + + // Calc dispatch table address. + load_dispatch_table(R11_scratch1, table); + + sldi(R12_scratch2, bytecode, LogBytesPerWord); + ldx(R11_scratch1, R11_scratch1, R12_scratch2); + + // Jump off! + mtctr(R11_scratch1); + bctr(); +#endif +} + +void InterpreterMacroAssembler::load_receiver(Register Rparam_count, Register Rrecv_dst) { + sldi(Rrecv_dst, Rparam_count, Interpreter::logStackElementSize); + ldx(Rrecv_dst, Rrecv_dst, R15_esp); +} + +// helpers for expression stack + +void InterpreterMacroAssembler::pop_i(Register r) { + lwzu(r, Interpreter::stackElementSize, R15_esp); +} + +void InterpreterMacroAssembler::pop_ptr(Register r) { + ldu(r, Interpreter::stackElementSize, R15_esp); +} + +void InterpreterMacroAssembler::pop_l(Register r) { + ld(r, Interpreter::stackElementSize, R15_esp); + addi(R15_esp, R15_esp, 2 * Interpreter::stackElementSize); +} + +void InterpreterMacroAssembler::pop_f(FloatRegister f) { + lfsu(f, Interpreter::stackElementSize, R15_esp); +} + +void InterpreterMacroAssembler::pop_d(FloatRegister f) { + lfd(f, Interpreter::stackElementSize, R15_esp); + addi(R15_esp, R15_esp, 2 * Interpreter::stackElementSize); +} + +void InterpreterMacroAssembler::push_i(Register r) { + stw(r, 0, R15_esp); + addi(R15_esp, R15_esp, - Interpreter::stackElementSize ); +} + +void InterpreterMacroAssembler::push_ptr(Register r) { + std(r, 0, R15_esp); + addi(R15_esp, R15_esp, - Interpreter::stackElementSize ); +} + +void InterpreterMacroAssembler::push_l(Register r) { + std(r, - Interpreter::stackElementSize, R15_esp); + addi(R15_esp, R15_esp, - 2 * Interpreter::stackElementSize ); +} + +void InterpreterMacroAssembler::push_f(FloatRegister f) { + stfs(f, 0, R15_esp); + addi(R15_esp, R15_esp, - Interpreter::stackElementSize ); +} + +void InterpreterMacroAssembler::push_d(FloatRegister f) { + stfd(f, - Interpreter::stackElementSize, R15_esp); + addi(R15_esp, R15_esp, - 2 * Interpreter::stackElementSize ); +} + +void InterpreterMacroAssembler::push_2ptrs(Register first, Register second) { + std(first, 0, R15_esp); + std(second, -Interpreter::stackElementSize, R15_esp); + addi(R15_esp, R15_esp, - 2 * Interpreter::stackElementSize ); +} + +void InterpreterMacroAssembler::push_l_pop_d(Register l, FloatRegister d) { + std(l, 0, R15_esp); + lfd(d, 0, R15_esp); +} + +void InterpreterMacroAssembler::push_d_pop_l(FloatRegister d, Register l) { + stfd(d, 0, R15_esp); + ld(l, 0, R15_esp); +} + +void InterpreterMacroAssembler::push(TosState state) { + switch (state) { + case atos: push_ptr(); break; + case btos: + case ctos: + case stos: + case itos: push_i(); break; + case ltos: push_l(); break; + case ftos: push_f(); break; + case dtos: push_d(); break; + case vtos: /* nothing to do */ break; + default : ShouldNotReachHere(); + } +} + +void InterpreterMacroAssembler::pop(TosState state) { + switch (state) { + case atos: pop_ptr(); break; + case btos: + case ctos: + case stos: + case itos: pop_i(); break; + case ltos: pop_l(); break; + case ftos: pop_f(); break; + case dtos: pop_d(); break; + case vtos: /* nothing to do */ break; + default : ShouldNotReachHere(); + } + verify_oop(R17_tos, state); +} + +void InterpreterMacroAssembler::empty_expression_stack() { + addi(R15_esp, R26_monitor, - Interpreter::stackElementSize); +} + +void InterpreterMacroAssembler::get_2_byte_integer_at_bcp(int bcp_offset, + Register Rdst, + signedOrNot is_signed) { + // Read Java big endian format. + if (is_signed == Signed) { + lha(Rdst, bcp_offset, R14_bcp); + } else { + lhz(Rdst, bcp_offset, R14_bcp); + } +#if 0 + assert(Rtmp != Rdst, "need separate temp register"); + Register Rfirst = Rtmp; + lbz(Rfirst, bcp_offset, R14_bcp); // first byte + lbz(Rdst, bcp_offset+1, R14_bcp); // second byte + + // Rdst = ((Rfirst<<8) & 0xFF00) | (Rdst &~ 0xFF00) + rldimi(/*RA=*/Rdst, /*RS=*/Rfirst, /*sh=*/8, /*mb=*/48); + if (is_signed == Signed) { + extsh(Rdst, Rdst); + } +#endif +} + +void InterpreterMacroAssembler::get_4_byte_integer_at_bcp(int bcp_offset, + Register Rdst, + signedOrNot is_signed) { + // Read Java big endian format. + if (bcp_offset & 3) { // Offset unaligned? + load_const_optimized(Rdst, bcp_offset); + if (is_signed == Signed) { + lwax(Rdst, R14_bcp, Rdst); + } else { + lwzx(Rdst, R14_bcp, Rdst); + } + } else { + if (is_signed == Signed) { + lwa(Rdst, bcp_offset, R14_bcp); + } else { + lwz(Rdst, bcp_offset, R14_bcp); + } + } +} + +// Load the constant pool cache index from the bytecode stream. +// +// Kills / writes: +// - Rdst, Rscratch +void InterpreterMacroAssembler::get_cache_index_at_bcp(Register Rdst, int bcp_offset, size_t index_size) { + assert(bcp_offset > 0, "bcp is still pointing to start of bytecode"); + if (index_size == sizeof(u2)) { + get_2_byte_integer_at_bcp(bcp_offset, Rdst, Unsigned); + } else if (index_size == sizeof(u4)) { + assert(EnableInvokeDynamic, "giant index used only for JSR 292"); + get_4_byte_integer_at_bcp(bcp_offset, Rdst, Signed); + assert(ConstantPool::decode_invokedynamic_index(~123) == 123, "else change next line"); + nand(Rdst, Rdst, Rdst); // convert to plain index + } else if (index_size == sizeof(u1)) { + lbz(Rdst, bcp_offset, R14_bcp); + } else { + ShouldNotReachHere(); + } + // Rdst now contains cp cache index. +} + +void InterpreterMacroAssembler::get_cache_and_index_at_bcp(Register cache, int bcp_offset, size_t index_size) { + get_cache_index_at_bcp(cache, bcp_offset, index_size); + sldi(cache, cache, exact_log2(in_words(ConstantPoolCacheEntry::size()) * BytesPerWord)); + add(cache, R27_constPoolCache, cache); +} + +// Load object from cpool->resolved_references(index). +void InterpreterMacroAssembler::load_resolved_reference_at_index(Register result, Register index) { + assert_different_registers(result, index); + get_constant_pool(result); + + // Convert from field index to resolved_references() index and from + // word index to byte offset. Since this is a java object, it can be compressed. + Register tmp = index; // reuse + sldi(tmp, index, LogBytesPerHeapOop); + // Load pointer for resolved_references[] objArray. + ld(result, ConstantPool::resolved_references_offset_in_bytes(), result); + // JNIHandles::resolve(result) + ld(result, 0, result); +#ifdef ASSERT + Label index_ok; + lwa(R0, arrayOopDesc::length_offset_in_bytes(), result); + sldi(R0, R0, LogBytesPerHeapOop); + cmpd(CCR0, tmp, R0); + blt(CCR0, index_ok); + stop("resolved reference index out of bounds", 0x09256); + bind(index_ok); +#endif + // Add in the index. + add(result, tmp, result); + load_heap_oop(result, arrayOopDesc::base_offset_in_bytes(T_OBJECT), result); +} + +// Generate a subtype check: branch to ok_is_subtype if sub_klass is +// a subtype of super_klass. Blows registers Rsub_klass, tmp1, tmp2. +void InterpreterMacroAssembler::gen_subtype_check(Register Rsub_klass, Register Rsuper_klass, Register Rtmp1, + Register Rtmp2, Register Rtmp3, Label &ok_is_subtype) { + // Profile the not-null value's klass. + profile_typecheck(Rsub_klass, Rtmp1, Rtmp2); + check_klass_subtype(Rsub_klass, Rsuper_klass, Rtmp1, Rtmp2, ok_is_subtype); + profile_typecheck_failed(Rtmp1, Rtmp2); +} + +void InterpreterMacroAssembler::generate_stack_overflow_check_with_compare_and_throw(Register Rmem_frame_size, Register Rscratch1) { + Label done; + sub(Rmem_frame_size, R1_SP, Rmem_frame_size); + ld(Rscratch1, thread_(stack_overflow_limit)); + cmpld(CCR0/*is_stack_overflow*/, Rmem_frame_size, Rscratch1); + bgt(CCR0/*is_stack_overflow*/, done); + + // Load target address of the runtime stub. + assert(StubRoutines::throw_StackOverflowError_entry() != NULL, "generated in wrong order"); + load_const_optimized(Rscratch1, (StubRoutines::throw_StackOverflowError_entry()), R0); + mtctr(Rscratch1); + // Restore caller_sp. +#ifdef ASSERT + ld(Rscratch1, 0, R1_SP); + ld(R0, 0, R21_sender_SP); + cmpd(CCR0, R0, Rscratch1); + asm_assert_eq("backlink", 0x547); +#endif // ASSERT + mr(R1_SP, R21_sender_SP); + bctr(); + + align(32, 12); + bind(done); +} + +// Separate these two to allow for delay slot in middle. +// These are used to do a test and full jump to exception-throwing code. + +// Check that index is in range for array, then shift index by index_shift, +// and put arrayOop + shifted_index into res. +// Note: res is still shy of address by array offset into object. + +void InterpreterMacroAssembler::index_check_without_pop(Register Rarray, Register Rindex, int index_shift, Register Rtmp, Register Rres) { + // Check that index is in range for array, then shift index by index_shift, + // and put arrayOop + shifted_index into res. + // Note: res is still shy of address by array offset into object. + // Kills: + // - Rindex + // Writes: + // - Rres: Address that corresponds to the array index if check was successful. + verify_oop(Rarray); + const Register Rlength = R0; + const Register RsxtIndex = Rtmp; + Label LisNull, LnotOOR; + + // Array nullcheck + if (!ImplicitNullChecks) { + cmpdi(CCR0, Rarray, 0); + beq(CCR0, LisNull); + } else { + null_check_throw(Rarray, arrayOopDesc::length_offset_in_bytes(), /*temp*/RsxtIndex); + } + + // Rindex might contain garbage in upper bits (remember that we don't sign extend + // during integer arithmetic operations). So kill them and put value into same register + // where ArrayIndexOutOfBounds would expect the index in. + rldicl(RsxtIndex, Rindex, 0, 32); // zero extend 32 bit -> 64 bit + + // Index check + lwz(Rlength, arrayOopDesc::length_offset_in_bytes(), Rarray); + cmplw(CCR0, Rindex, Rlength); + sldi(RsxtIndex, RsxtIndex, index_shift); + blt(CCR0, LnotOOR); + load_dispatch_table(Rtmp, (address*)Interpreter::_throw_ArrayIndexOutOfBoundsException_entry); + mtctr(Rtmp); + bctr(); + + if (!ImplicitNullChecks) { + bind(LisNull); + load_dispatch_table(Rtmp, (address*)Interpreter::_throw_NullPointerException_entry); + mtctr(Rtmp); + bctr(); + } + + align(32, 16); + bind(LnotOOR); + + // Calc address + add(Rres, RsxtIndex, Rarray); +} + +void InterpreterMacroAssembler::index_check(Register array, Register index, int index_shift, Register tmp, Register res) { + // pop array + pop_ptr(array); + + // check array + index_check_without_pop(array, index, index_shift, tmp, res); +} + +void InterpreterMacroAssembler::get_const(Register Rdst) { + ld(Rdst, in_bytes(Method::const_offset()), R19_method); +} + +void InterpreterMacroAssembler::get_constant_pool(Register Rdst) { + get_const(Rdst); + ld(Rdst, in_bytes(ConstMethod::constants_offset()), Rdst); +} + +void InterpreterMacroAssembler::get_constant_pool_cache(Register Rdst) { + get_constant_pool(Rdst); + ld(Rdst, ConstantPool::cache_offset_in_bytes(), Rdst); +} + +void InterpreterMacroAssembler::get_cpool_and_tags(Register Rcpool, Register Rtags) { + get_constant_pool(Rcpool); + ld(Rtags, ConstantPool::tags_offset_in_bytes(), Rcpool); +} + +// Unlock if synchronized method. +// +// Unlock the receiver if this is a synchronized method. +// Unlock any Java monitors from synchronized blocks. +// +// If there are locked Java monitors +// If throw_monitor_exception +// throws IllegalMonitorStateException +// Else if install_monitor_exception +// installs IllegalMonitorStateException +// Else +// no error processing +void InterpreterMacroAssembler::unlock_if_synchronized_method(TosState state, + bool throw_monitor_exception, + bool install_monitor_exception) { + Label Lunlocked, Lno_unlock; + { + Register Rdo_not_unlock_flag = R11_scratch1; + Register Raccess_flags = R12_scratch2; + + // Check if synchronized method or unlocking prevented by + // JavaThread::do_not_unlock_if_synchronized flag. + lbz(Rdo_not_unlock_flag, in_bytes(JavaThread::do_not_unlock_if_synchronized_offset()), R16_thread); + lwz(Raccess_flags, in_bytes(Method::access_flags_offset()), R19_method); + li(R0, 0); + stb(R0, in_bytes(JavaThread::do_not_unlock_if_synchronized_offset()), R16_thread); // reset flag + + push(state); + + // Skip if we don't have to unlock. + rldicl_(R0, Raccess_flags, 64-JVM_ACC_SYNCHRONIZED_BIT, 63); // Extract bit and compare to 0. + beq(CCR0, Lunlocked); + + cmpwi(CCR0, Rdo_not_unlock_flag, 0); + bne(CCR0, Lno_unlock); + } + + // Unlock + { + Register Rmonitor_base = R11_scratch1; + + Label Lunlock; + // If it's still locked, everything is ok, unlock it. + ld(Rmonitor_base, 0, R1_SP); + addi(Rmonitor_base, Rmonitor_base, - (frame::ijava_state_size + frame::interpreter_frame_monitor_size_in_bytes())); // Monitor base + + ld(R0, BasicObjectLock::obj_offset_in_bytes(), Rmonitor_base); + cmpdi(CCR0, R0, 0); + bne(CCR0, Lunlock); + + // If it's already unlocked, throw exception. + if (throw_monitor_exception) { + call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::throw_illegal_monitor_state_exception)); + should_not_reach_here(); + } else { + if (install_monitor_exception) { + call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::new_illegal_monitor_state_exception)); + b(Lunlocked); + } + } + + bind(Lunlock); + unlock_object(Rmonitor_base); + } + + // Check that all other monitors are unlocked. Throw IllegelMonitorState exception if not. + bind(Lunlocked); + { + Label Lexception, Lrestart; + Register Rcurrent_obj_addr = R11_scratch1; + const int delta = frame::interpreter_frame_monitor_size_in_bytes(); + assert((delta & LongAlignmentMask) == 0, "sizeof BasicObjectLock must be even number of doublewords"); + + bind(Lrestart); + // Set up search loop: Calc num of iterations. + { + Register Riterations = R12_scratch2; + Register Rmonitor_base = Rcurrent_obj_addr; + ld(Rmonitor_base, 0, R1_SP); + addi(Rmonitor_base, Rmonitor_base, - frame::ijava_state_size); // Monitor base + + subf_(Riterations, R26_monitor, Rmonitor_base); + ble(CCR0, Lno_unlock); + + addi(Rcurrent_obj_addr, Rmonitor_base, BasicObjectLock::obj_offset_in_bytes() - frame::interpreter_frame_monitor_size_in_bytes()); + // Check if any monitor is on stack, bail out if not + srdi(Riterations, Riterations, exact_log2(delta)); + mtctr(Riterations); + } + + // The search loop: Look for locked monitors. + { + const Register Rcurrent_obj = R0; + Label Lloop; + + ld(Rcurrent_obj, 0, Rcurrent_obj_addr); + addi(Rcurrent_obj_addr, Rcurrent_obj_addr, -delta); + bind(Lloop); + + // Check if current entry is used. + cmpdi(CCR0, Rcurrent_obj, 0); + bne(CCR0, Lexception); + // Preload next iteration's compare value. + ld(Rcurrent_obj, 0, Rcurrent_obj_addr); + addi(Rcurrent_obj_addr, Rcurrent_obj_addr, -delta); + bdnz(Lloop); + } + // Fell through: Everything's unlocked => finish. + b(Lno_unlock); + + // An object is still locked => need to throw exception. + bind(Lexception); + if (throw_monitor_exception) { + call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::throw_illegal_monitor_state_exception)); + should_not_reach_here(); + } else { + // Stack unrolling. Unlock object and if requested, install illegal_monitor_exception. + // Unlock does not block, so don't have to worry about the frame. + Register Rmonitor_addr = R11_scratch1; + addi(Rmonitor_addr, Rcurrent_obj_addr, -BasicObjectLock::obj_offset_in_bytes() + delta); + unlock_object(Rmonitor_addr); + if (install_monitor_exception) { + call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::new_illegal_monitor_state_exception)); + } + b(Lrestart); + } + } + + align(32, 12); + bind(Lno_unlock); + pop(state); +} + +// Support function for remove_activation & Co. +void InterpreterMacroAssembler::merge_frames(Register Rsender_sp, Register return_pc, Register Rscratch1, Register Rscratch2) { + // Pop interpreter frame. + ld(Rscratch1, 0, R1_SP); // *SP + ld(Rsender_sp, _ijava_state_neg(sender_sp), Rscratch1); // top_frame_sp + ld(Rscratch2, 0, Rscratch1); // **SP +#ifdef ASSERT + { + Label Lok; + ld(R0, _ijava_state_neg(ijava_reserved), Rscratch1); + cmpdi(CCR0, R0, 0x5afe); + beq(CCR0, Lok); + stop("frame corrupted (remove activation)", 0x5afe); + bind(Lok); + } +#endif + if (return_pc!=noreg) { + ld(return_pc, _abi(lr), Rscratch1); // LR + } + + // Merge top frames. + subf(Rscratch1, R1_SP, Rsender_sp); // top_frame_sp - SP + stdux(Rscratch2, R1_SP, Rscratch1); // atomically set *(SP = top_frame_sp) = **SP +} + +// Remove activation. +// +// Unlock the receiver if this is a synchronized method. +// Unlock any Java monitors from synchronized blocks. +// Remove the activation from the stack. +// +// If there are locked Java monitors +// If throw_monitor_exception +// throws IllegalMonitorStateException +// Else if install_monitor_exception +// installs IllegalMonitorStateException +// Else +// no error processing +void InterpreterMacroAssembler::remove_activation(TosState state, + bool throw_monitor_exception, + bool install_monitor_exception) { + unlock_if_synchronized_method(state, throw_monitor_exception, install_monitor_exception); + + // Save result (push state before jvmti call and pop it afterwards) and notify jvmti. + notify_method_exit(false, state, NotifyJVMTI, true); + + verify_oop(R17_tos, state); + verify_thread(); + + merge_frames(/*top_frame_sp*/ R21_sender_SP, /*return_pc*/ R0, R11_scratch1, R12_scratch2); + mtlr(R0); +} + +#endif // !CC_INTERP + // Lock object // // Registers alive @@ -81,7 +767,6 @@ void InterpreterMacroAssembler::lock_object(Register monitor, Register object) { assert_different_registers(displaced_header, object_mark_addr, current_header, tmp); - // markOop displaced_header = obj->mark().set_unlocked(); // Load markOop from object into displaced_header. @@ -94,7 +779,6 @@ void InterpreterMacroAssembler::lock_object(Register monitor, Register object) { // Set displaced_header to be (markOop of object | UNLOCK_VALUE). ori(displaced_header, displaced_header, markOopDesc::unlocked_value); - // monitor->lock()->set_displaced_header(displaced_header); // Initialize the box (Must happen before we update the object mark!). @@ -147,7 +831,6 @@ void InterpreterMacroAssembler::lock_object(Register monitor, Register object) { BasicLock::displaced_header_offset_in_bytes(), monitor); b(done); - // } else { // // Slow path. // InterpreterRuntime::monitorenter(THREAD, monitor); @@ -158,7 +841,7 @@ void InterpreterMacroAssembler::lock_object(Register monitor, Register object) { call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::monitorenter), monitor, /*check_for_exceptions=*/true CC_INTERP_ONLY(&& false)); // } - + align(32, 12); bind(done); } } @@ -173,13 +856,13 @@ void InterpreterMacroAssembler::lock_object(Register monitor, Register object) { void InterpreterMacroAssembler::unlock_object(Register monitor, bool check_for_exceptions) { if (UseHeavyMonitors) { call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::monitorexit), - monitor, /*check_for_exceptions=*/false); + monitor, check_for_exceptions CC_INTERP_ONLY(&& false)); } else { // template code: // // if ((displaced_header = monitor->displaced_header()) == NULL) { - // // Recursive unlock. Mark the monitor unlocked by setting the object field to NULL. + // // Recursive unlock. Mark the monitor unlocked by setting the object field to NULL. // monitor->set_obj(NULL); // } else if (Atomic::cmpxchg_ptr(displaced_header, obj->mark_addr(), monitor) == monitor) { // // We swapped the unlocked mark in displaced_header into the object's mark word. @@ -221,7 +904,7 @@ void InterpreterMacroAssembler::unlock_object(Register monitor, bool check_for_e // If we still have a lightweight lock, unlock the object and be done. // The object address from the monitor is in object. - if (!UseBiasedLocking) ld(object, BasicObjectLock::obj_offset_in_bytes(), monitor); + if (!UseBiasedLocking) { ld(object, BasicObjectLock::obj_offset_in_bytes(), monitor); } addi(object_mark_addr, object, oopDesc::mark_offset_in_bytes()); // We have the displaced header in displaced_header. If the lock is still @@ -261,6 +944,959 @@ void InterpreterMacroAssembler::unlock_object(Register monitor, bool check_for_e } } +#ifndef CC_INTERP + +// Load compiled (i2c) or interpreter entry when calling from interpreted and +// do the call. Centralized so that all interpreter calls will do the same actions. +// If jvmti single stepping is on for a thread we must not call compiled code. +// +// Input: +// - Rtarget_method: method to call +// - Rret_addr: return address +// - 2 scratch regs +// +void InterpreterMacroAssembler::call_from_interpreter(Register Rtarget_method, Register Rret_addr, Register Rscratch1, Register Rscratch2) { + assert_different_registers(Rscratch1, Rscratch2, Rtarget_method, Rret_addr); + // Assume we want to go compiled if available. + const Register Rtarget_addr = Rscratch1; + const Register Rinterp_only = Rscratch2; + + ld(Rtarget_addr, in_bytes(Method::from_interpreted_offset()), Rtarget_method); + + if (JvmtiExport::can_post_interpreter_events()) { + lwz(Rinterp_only, in_bytes(JavaThread::interp_only_mode_offset()), R16_thread); + + // JVMTI events, such as single-stepping, are implemented partly by avoiding running + // compiled code in threads for which the event is enabled. Check here for + // interp_only_mode if these events CAN be enabled. + Label done; + verify_thread(); + cmpwi(CCR0, Rinterp_only, 0); + beq(CCR0, done); + ld(Rtarget_addr, in_bytes(Method::interpreter_entry_offset()), Rtarget_method); + align(32, 12); + bind(done); + } + +#ifdef ASSERT + { + Label Lok; + cmpdi(CCR0, Rtarget_addr, 0); + bne(CCR0, Lok); + stop("null entry point"); + bind(Lok); + } +#endif // ASSERT + + mr(R21_sender_SP, R1_SP); + + // Calc a precise SP for the call. The SP value we calculated in + // generate_fixed_frame() is based on the max_stack() value, so we would waste stack space + // if esp is not max. Also, the i2c adapter extends the stack space without restoring + // our pre-calced value, so repeating calls via i2c would result in stack overflow. + // Since esp already points to an empty slot, we just have to sub 1 additional slot + // to meet the abi scratch requirements. + // The max_stack pointer will get restored by means of the GR_Lmax_stack local in + // the return entry of the interpreter. + addi(Rscratch2, R15_esp, Interpreter::stackElementSize - frame::abi_reg_args_size); + clrrdi(Rscratch2, Rscratch2, exact_log2(frame::alignment_in_bytes)); // round towards smaller address + resize_frame_absolute(Rscratch2, Rscratch2, R0); + + mr_if_needed(R19_method, Rtarget_method); + mtctr(Rtarget_addr); + mtlr(Rret_addr); + + save_interpreter_state(Rscratch2); +#ifdef ASSERT + ld(Rscratch1, _ijava_state_neg(top_frame_sp), Rscratch2); // Rscratch2 contains fp + cmpd(CCR0, R21_sender_SP, Rscratch1); + asm_assert_eq("top_frame_sp incorrect", 0x951); +#endif + + bctr(); +} + +// Set the method data pointer for the current bcp. +void InterpreterMacroAssembler::set_method_data_pointer_for_bcp() { + assert(ProfileInterpreter, "must be profiling interpreter"); + Label get_continue; + ld(R28_mdx, in_bytes(Method::method_data_offset()), R19_method); + test_method_data_pointer(get_continue); + call_VM_leaf(CAST_FROM_FN_PTR(address, InterpreterRuntime::bcp_to_di), R19_method, R14_bcp); + + addi(R28_mdx, R28_mdx, in_bytes(MethodData::data_offset())); + add(R28_mdx, R28_mdx, R3_RET); + bind(get_continue); +} + +// Test ImethodDataPtr. If it is null, continue at the specified label. +void InterpreterMacroAssembler::test_method_data_pointer(Label& zero_continue) { + assert(ProfileInterpreter, "must be profiling interpreter"); + cmpdi(CCR0, R28_mdx, 0); + beq(CCR0, zero_continue); +} + +void InterpreterMacroAssembler::verify_method_data_pointer() { + assert(ProfileInterpreter, "must be profiling interpreter"); +#ifdef ASSERT + Label verify_continue; + test_method_data_pointer(verify_continue); + + // If the mdp is valid, it will point to a DataLayout header which is + // consistent with the bcp. The converse is highly probable also. + lhz(R11_scratch1, in_bytes(DataLayout::bci_offset()), R28_mdx); + ld(R12_scratch2, in_bytes(Method::const_offset()), R19_method); + addi(R11_scratch1, R11_scratch1, in_bytes(ConstMethod::codes_offset())); + add(R11_scratch1, R12_scratch2, R12_scratch2); + cmpd(CCR0, R11_scratch1, R14_bcp); + beq(CCR0, verify_continue); + + call_VM_leaf(CAST_FROM_FN_PTR(address, InterpreterRuntime::verify_mdp ), R19_method, R14_bcp, R28_mdx); + + bind(verify_continue); +#endif +} + +void InterpreterMacroAssembler::test_invocation_counter_for_mdp(Register invocation_count, + Register Rscratch, + Label &profile_continue) { + assert(ProfileInterpreter, "must be profiling interpreter"); + // Control will flow to "profile_continue" if the counter is less than the + // limit or if we call profile_method(). + Label done; + + // If no method data exists, and the counter is high enough, make one. + int ipl_offs = load_const_optimized(Rscratch, &InvocationCounter::InterpreterProfileLimit, R0, true); + lwz(Rscratch, ipl_offs, Rscratch); + + cmpdi(CCR0, R28_mdx, 0); + // Test to see if we should create a method data oop. + cmpd(CCR1, Rscratch /* InterpreterProfileLimit */, invocation_count); + bne(CCR0, done); + bge(CCR1, profile_continue); + + // Build it now. + call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::profile_method)); + set_method_data_pointer_for_bcp(); + b(profile_continue); + + align(32, 12); + bind(done); +} + +void InterpreterMacroAssembler::test_backedge_count_for_osr(Register backedge_count, Register branch_bcp, Register Rtmp) { + assert_different_registers(backedge_count, Rtmp, branch_bcp); + assert(UseOnStackReplacement,"Must UseOnStackReplacement to test_backedge_count_for_osr"); + + Label did_not_overflow; + Label overflow_with_error; + + int ibbl_offs = load_const_optimized(Rtmp, &InvocationCounter::InterpreterBackwardBranchLimit, R0, true); + lwz(Rtmp, ibbl_offs, Rtmp); + cmpw(CCR0, backedge_count, Rtmp); + + blt(CCR0, did_not_overflow); + + // When ProfileInterpreter is on, the backedge_count comes from the + // methodDataOop, which value does not get reset on the call to + // frequency_counter_overflow(). To avoid excessive calls to the overflow + // routine while the method is being compiled, add a second test to make sure + // the overflow function is called only once every overflow_frequency. + if (ProfileInterpreter) { + const int overflow_frequency = 1024; + li(Rtmp, overflow_frequency-1); + andr(Rtmp, Rtmp, backedge_count); + cmpwi(CCR0, Rtmp, 0); + bne(CCR0, did_not_overflow); + } + + // Overflow in loop, pass branch bytecode. + call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::frequency_counter_overflow), branch_bcp, true); + + // Was an OSR adapter generated? + // O0 = osr nmethod + cmpdi(CCR0, R3_RET, 0); + beq(CCR0, overflow_with_error); + + // Has the nmethod been invalidated already? + lwz(Rtmp, nmethod::entry_bci_offset(), R3_RET); + cmpwi(CCR0, Rtmp, InvalidOSREntryBci); + beq(CCR0, overflow_with_error); + + // Migrate the interpreter frame off of the stack. + // We can use all registers because we will not return to interpreter from this point. + + // Save nmethod. + const Register osr_nmethod = R31; + mr(osr_nmethod, R3_RET); + set_top_ijava_frame_at_SP_as_last_Java_frame(R1_SP, R11_scratch1); + call_VM_leaf(CAST_FROM_FN_PTR(address, SharedRuntime::OSR_migration_begin), R16_thread); + reset_last_Java_frame(); + // OSR buffer is in ARG1 + + // Remove the interpreter frame. + merge_frames(/*top_frame_sp*/ R21_sender_SP, /*return_pc*/ R0, R11_scratch1, R12_scratch2); + + // Jump to the osr code. + ld(R11_scratch1, nmethod::osr_entry_point_offset(), osr_nmethod); + mtlr(R0); + mtctr(R11_scratch1); + bctr(); + + align(32, 12); + bind(overflow_with_error); + bind(did_not_overflow); +} + +// Store a value at some constant offset from the method data pointer. +void InterpreterMacroAssembler::set_mdp_data_at(int constant, Register value) { + assert(ProfileInterpreter, "must be profiling interpreter"); + + std(value, constant, R28_mdx); +} + +// Increment the value at some constant offset from the method data pointer. +void InterpreterMacroAssembler::increment_mdp_data_at(int constant, + Register counter_addr, + Register Rbumped_count, + bool decrement) { + // Locate the counter at a fixed offset from the mdp: + addi(counter_addr, R28_mdx, constant); + increment_mdp_data_at(counter_addr, Rbumped_count, decrement); +} + +// Increment the value at some non-fixed (reg + constant) offset from +// the method data pointer. +void InterpreterMacroAssembler::increment_mdp_data_at(Register reg, + int constant, + Register scratch, + Register Rbumped_count, + bool decrement) { + // Add the constant to reg to get the offset. + add(scratch, R28_mdx, reg); + // Then calculate the counter address. + addi(scratch, scratch, constant); + increment_mdp_data_at(scratch, Rbumped_count, decrement); +} + +void InterpreterMacroAssembler::increment_mdp_data_at(Register counter_addr, + Register Rbumped_count, + bool decrement) { + assert(ProfileInterpreter, "must be profiling interpreter"); + + // Load the counter. + ld(Rbumped_count, 0, counter_addr); + + if (decrement) { + // Decrement the register. Set condition codes. + addi(Rbumped_count, Rbumped_count, - DataLayout::counter_increment); + // Store the decremented counter, if it is still negative. + std(Rbumped_count, 0, counter_addr); + // Note: add/sub overflow check are not ported, since 64 bit + // calculation should never overflow. + } else { + // Increment the register. Set carry flag. + addi(Rbumped_count, Rbumped_count, DataLayout::counter_increment); + // Store the incremented counter. + std(Rbumped_count, 0, counter_addr); + } +} + +// Set a flag value at the current method data pointer position. +void InterpreterMacroAssembler::set_mdp_flag_at(int flag_constant, + Register scratch) { + assert(ProfileInterpreter, "must be profiling interpreter"); + // Load the data header. + lbz(scratch, in_bytes(DataLayout::flags_offset()), R28_mdx); + // Set the flag. + ori(scratch, scratch, flag_constant); + // Store the modified header. + stb(scratch, in_bytes(DataLayout::flags_offset()), R28_mdx); +} + +// Test the location at some offset from the method data pointer. +// If it is not equal to value, branch to the not_equal_continue Label. +void InterpreterMacroAssembler::test_mdp_data_at(int offset, + Register value, + Label& not_equal_continue, + Register test_out) { + assert(ProfileInterpreter, "must be profiling interpreter"); + + ld(test_out, offset, R28_mdx); + cmpd(CCR0, value, test_out); + bne(CCR0, not_equal_continue); +} + +// Update the method data pointer by the displacement located at some fixed +// offset from the method data pointer. +void InterpreterMacroAssembler::update_mdp_by_offset(int offset_of_disp, + Register scratch) { + assert(ProfileInterpreter, "must be profiling interpreter"); + + ld(scratch, offset_of_disp, R28_mdx); + add(R28_mdx, scratch, R28_mdx); +} + +// Update the method data pointer by the displacement located at the +// offset (reg + offset_of_disp). +void InterpreterMacroAssembler::update_mdp_by_offset(Register reg, + int offset_of_disp, + Register scratch) { + assert(ProfileInterpreter, "must be profiling interpreter"); + + add(scratch, reg, R28_mdx); + ld(scratch, offset_of_disp, scratch); + add(R28_mdx, scratch, R28_mdx); +} + +// Update the method data pointer by a simple constant displacement. +void InterpreterMacroAssembler::update_mdp_by_constant(int constant) { + assert(ProfileInterpreter, "must be profiling interpreter"); + addi(R28_mdx, R28_mdx, constant); +} + +// Update the method data pointer for a _ret bytecode whose target +// was not among our cached targets. +void InterpreterMacroAssembler::update_mdp_for_ret(TosState state, + Register return_bci) { + assert(ProfileInterpreter, "must be profiling interpreter"); + + push(state); + assert(return_bci->is_nonvolatile(), "need to protect return_bci"); + call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::update_mdp_for_ret), return_bci); + pop(state); +} + +// Increments the backedge counter. +// Returns backedge counter + invocation counter in Rdst. +void InterpreterMacroAssembler::increment_backedge_counter(const Register Rcounters, const Register Rdst, + const Register Rtmp1, Register Rscratch) { + assert(UseCompiler, "incrementing must be useful"); + assert_different_registers(Rdst, Rtmp1); + const Register invocation_counter = Rtmp1; + const Register counter = Rdst; + // TODO ppc port assert(4 == InvocationCounter::sz_counter(), "unexpected field size."); + + // Load backedge counter. + lwz(counter, in_bytes(MethodCounters::backedge_counter_offset()) + + in_bytes(InvocationCounter::counter_offset()), Rcounters); + // Load invocation counter. + lwz(invocation_counter, in_bytes(MethodCounters::invocation_counter_offset()) + + in_bytes(InvocationCounter::counter_offset()), Rcounters); + + // Add the delta to the backedge counter. + addi(counter, counter, InvocationCounter::count_increment); + + // Mask the invocation counter. + li(Rscratch, InvocationCounter::count_mask_value); + andr(invocation_counter, invocation_counter, Rscratch); + + // Store new counter value. + stw(counter, in_bytes(MethodCounters::backedge_counter_offset()) + + in_bytes(InvocationCounter::counter_offset()), Rcounters); + // Return invocation counter + backedge counter. + add(counter, counter, invocation_counter); +} + +// Count a taken branch in the bytecodes. +void InterpreterMacroAssembler::profile_taken_branch(Register scratch, Register bumped_count) { + if (ProfileInterpreter) { + Label profile_continue; + + // If no method data exists, go to profile_continue. + test_method_data_pointer(profile_continue); + + // We are taking a branch. Increment the taken count. + increment_mdp_data_at(in_bytes(JumpData::taken_offset()), scratch, bumped_count); + + // The method data pointer needs to be updated to reflect the new target. + update_mdp_by_offset(in_bytes(JumpData::displacement_offset()), scratch); + bind (profile_continue); + } +} + +// Count a not-taken branch in the bytecodes. +void InterpreterMacroAssembler::profile_not_taken_branch(Register scratch1, Register scratch2) { + if (ProfileInterpreter) { + Label profile_continue; + + // If no method data exists, go to profile_continue. + test_method_data_pointer(profile_continue); + + // We are taking a branch. Increment the not taken count. + increment_mdp_data_at(in_bytes(BranchData::not_taken_offset()), scratch1, scratch2); + + // The method data pointer needs to be updated to correspond to the + // next bytecode. + update_mdp_by_constant(in_bytes(BranchData::branch_data_size())); + bind (profile_continue); + } +} + +// Count a non-virtual call in the bytecodes. +void InterpreterMacroAssembler::profile_call(Register scratch1, Register scratch2) { + if (ProfileInterpreter) { + Label profile_continue; + + // If no method data exists, go to profile_continue. + test_method_data_pointer(profile_continue); + + // We are making a call. Increment the count. + increment_mdp_data_at(in_bytes(CounterData::count_offset()), scratch1, scratch2); + + // The method data pointer needs to be updated to reflect the new target. + update_mdp_by_constant(in_bytes(CounterData::counter_data_size())); + bind (profile_continue); + } +} + +// Count a final call in the bytecodes. +void InterpreterMacroAssembler::profile_final_call(Register scratch1, Register scratch2) { + if (ProfileInterpreter) { + Label profile_continue; + + // If no method data exists, go to profile_continue. + test_method_data_pointer(profile_continue); + + // We are making a call. Increment the count. + increment_mdp_data_at(in_bytes(CounterData::count_offset()), scratch1, scratch2); + + // The method data pointer needs to be updated to reflect the new target. + update_mdp_by_constant(in_bytes(VirtualCallData::virtual_call_data_size())); + bind (profile_continue); + } +} + +// Count a virtual call in the bytecodes. +void InterpreterMacroAssembler::profile_virtual_call(Register Rreceiver, + Register Rscratch1, + Register Rscratch2, + bool receiver_can_be_null) { + if (!ProfileInterpreter) { return; } + Label profile_continue; + + // If no method data exists, go to profile_continue. + test_method_data_pointer(profile_continue); + + Label skip_receiver_profile; + if (receiver_can_be_null) { + Label not_null; + cmpdi(CCR0, Rreceiver, 0); + bne(CCR0, not_null); + // We are making a call. Increment the count for null receiver. + increment_mdp_data_at(in_bytes(CounterData::count_offset()), Rscratch1, Rscratch2); + b(skip_receiver_profile); + bind(not_null); + } + + // Record the receiver type. + record_klass_in_profile(Rreceiver, Rscratch1, Rscratch2, true); + bind(skip_receiver_profile); + + // The method data pointer needs to be updated to reflect the new target. + update_mdp_by_constant(in_bytes(VirtualCallData::virtual_call_data_size())); + bind (profile_continue); +} + +void InterpreterMacroAssembler::profile_typecheck(Register Rklass, Register Rscratch1, Register Rscratch2) { + if (ProfileInterpreter) { + Label profile_continue; + + // If no method data exists, go to profile_continue. + test_method_data_pointer(profile_continue); + + int mdp_delta = in_bytes(BitData::bit_data_size()); + if (TypeProfileCasts) { + mdp_delta = in_bytes(VirtualCallData::virtual_call_data_size()); + + // Record the object type. + record_klass_in_profile(Rklass, Rscratch1, Rscratch2, false); + } + + // The method data pointer needs to be updated. + update_mdp_by_constant(mdp_delta); + + bind (profile_continue); + } +} + +void InterpreterMacroAssembler::profile_typecheck_failed(Register Rscratch1, Register Rscratch2) { + if (ProfileInterpreter && TypeProfileCasts) { + Label profile_continue; + + // If no method data exists, go to profile_continue. + test_method_data_pointer(profile_continue); + + int count_offset = in_bytes(CounterData::count_offset()); + // Back up the address, since we have already bumped the mdp. + count_offset -= in_bytes(VirtualCallData::virtual_call_data_size()); + + // *Decrement* the counter. We expect to see zero or small negatives. + increment_mdp_data_at(count_offset, Rscratch1, Rscratch2, true); + + bind (profile_continue); + } +} + +// Count a ret in the bytecodes. +void InterpreterMacroAssembler::profile_ret(TosState state, Register return_bci, Register scratch1, Register scratch2) { + if (ProfileInterpreter) { + Label profile_continue; + uint row; + + // If no method data exists, go to profile_continue. + test_method_data_pointer(profile_continue); + + // Update the total ret count. + increment_mdp_data_at(in_bytes(CounterData::count_offset()), scratch1, scratch2 ); + + for (row = 0; row < RetData::row_limit(); row++) { + Label next_test; + + // See if return_bci is equal to bci[n]: + test_mdp_data_at(in_bytes(RetData::bci_offset(row)), return_bci, next_test, scratch1); + + // return_bci is equal to bci[n]. Increment the count. + increment_mdp_data_at(in_bytes(RetData::bci_count_offset(row)), scratch1, scratch2); + + // The method data pointer needs to be updated to reflect the new target. + update_mdp_by_offset(in_bytes(RetData::bci_displacement_offset(row)), scratch1); + b(profile_continue); + bind(next_test); + } + + update_mdp_for_ret(state, return_bci); + + bind (profile_continue); + } +} + +// Count the default case of a switch construct. +void InterpreterMacroAssembler::profile_switch_default(Register scratch1, Register scratch2) { + if (ProfileInterpreter) { + Label profile_continue; + + // If no method data exists, go to profile_continue. + test_method_data_pointer(profile_continue); + + // Update the default case count + increment_mdp_data_at(in_bytes(MultiBranchData::default_count_offset()), + scratch1, scratch2); + + // The method data pointer needs to be updated. + update_mdp_by_offset(in_bytes(MultiBranchData::default_displacement_offset()), + scratch1); + + bind (profile_continue); + } +} + +// Count the index'th case of a switch construct. +void InterpreterMacroAssembler::profile_switch_case(Register index, + Register scratch1, + Register scratch2, + Register scratch3) { + if (ProfileInterpreter) { + assert_different_registers(index, scratch1, scratch2, scratch3); + Label profile_continue; + + // If no method data exists, go to profile_continue. + test_method_data_pointer(profile_continue); + + // Build the base (index * per_case_size_in_bytes()) + case_array_offset_in_bytes(). + li(scratch3, in_bytes(MultiBranchData::case_array_offset())); + + assert (in_bytes(MultiBranchData::per_case_size()) == 16, "so that shladd works"); + sldi(scratch1, index, exact_log2(in_bytes(MultiBranchData::per_case_size()))); + add(scratch1, scratch1, scratch3); + + // Update the case count. + increment_mdp_data_at(scratch1, in_bytes(MultiBranchData::relative_count_offset()), scratch2, scratch3); + + // The method data pointer needs to be updated. + update_mdp_by_offset(scratch1, in_bytes(MultiBranchData::relative_displacement_offset()), scratch2); + + bind (profile_continue); + } +} + +void InterpreterMacroAssembler::profile_null_seen(Register Rscratch1, Register Rscratch2) { + if (ProfileInterpreter) { + assert_different_registers(Rscratch1, Rscratch2); + Label profile_continue; + + // If no method data exists, go to profile_continue. + test_method_data_pointer(profile_continue); + + set_mdp_flag_at(BitData::null_seen_byte_constant(), Rscratch1); + + // The method data pointer needs to be updated. + int mdp_delta = in_bytes(BitData::bit_data_size()); + if (TypeProfileCasts) { + mdp_delta = in_bytes(VirtualCallData::virtual_call_data_size()); + } + update_mdp_by_constant(mdp_delta); + + bind (profile_continue); + } +} + +void InterpreterMacroAssembler::record_klass_in_profile(Register Rreceiver, + Register Rscratch1, Register Rscratch2, + bool is_virtual_call) { + assert(ProfileInterpreter, "must be profiling"); + assert_different_registers(Rreceiver, Rscratch1, Rscratch2); + + Label done; + record_klass_in_profile_helper(Rreceiver, Rscratch1, Rscratch2, 0, done, is_virtual_call); + bind (done); +} + +void InterpreterMacroAssembler::record_klass_in_profile_helper( + Register receiver, Register scratch1, Register scratch2, + int start_row, Label& done, bool is_virtual_call) { + if (TypeProfileWidth == 0) { + if (is_virtual_call) { + increment_mdp_data_at(in_bytes(CounterData::count_offset()), scratch1, scratch2); + } + return; + } + + int last_row = VirtualCallData::row_limit() - 1; + assert(start_row <= last_row, "must be work left to do"); + // Test this row for both the receiver and for null. + // Take any of three different outcomes: + // 1. found receiver => increment count and goto done + // 2. found null => keep looking for case 1, maybe allocate this cell + // 3. found something else => keep looking for cases 1 and 2 + // Case 3 is handled by a recursive call. + for (int row = start_row; row <= last_row; row++) { + Label next_test; + bool test_for_null_also = (row == start_row); + + // See if the receiver is receiver[n]. + int recvr_offset = in_bytes(VirtualCallData::receiver_offset(row)); + test_mdp_data_at(recvr_offset, receiver, next_test, scratch1); + // delayed()->tst(scratch); + + // The receiver is receiver[n]. Increment count[n]. + int count_offset = in_bytes(VirtualCallData::receiver_count_offset(row)); + increment_mdp_data_at(count_offset, scratch1, scratch2); + b(done); + bind(next_test); + + if (test_for_null_also) { + Label found_null; + // Failed the equality check on receiver[n]... Test for null. + if (start_row == last_row) { + // The only thing left to do is handle the null case. + if (is_virtual_call) { + // Scratch1 contains test_out from test_mdp_data_at. + cmpdi(CCR0, scratch1, 0); + beq(CCR0, found_null); + // Receiver did not match any saved receiver and there is no empty row for it. + // Increment total counter to indicate polymorphic case. + increment_mdp_data_at(in_bytes(CounterData::count_offset()), scratch1, scratch2); + b(done); + bind(found_null); + } else { + cmpdi(CCR0, scratch1, 0); + bne(CCR0, done); + } + break; + } + // Since null is rare, make it be the branch-taken case. + cmpdi(CCR0, scratch1, 0); + beq(CCR0, found_null); + + // Put all the "Case 3" tests here. + record_klass_in_profile_helper(receiver, scratch1, scratch2, start_row + 1, done, is_virtual_call); + + // Found a null. Keep searching for a matching receiver, + // but remember that this is an empty (unused) slot. + bind(found_null); + } + } + + // In the fall-through case, we found no matching receiver, but we + // observed the receiver[start_row] is NULL. + + // Fill in the receiver field and increment the count. + int recvr_offset = in_bytes(VirtualCallData::receiver_offset(start_row)); + set_mdp_data_at(recvr_offset, receiver); + int count_offset = in_bytes(VirtualCallData::receiver_count_offset(start_row)); + li(scratch1, DataLayout::counter_increment); + set_mdp_data_at(count_offset, scratch1); + if (start_row > 0) { + b(done); + } +} + +// Add a InterpMonitorElem to stack (see frame_sparc.hpp). +void InterpreterMacroAssembler::add_monitor_to_stack(bool stack_is_empty, Register Rtemp1, Register Rtemp2) { + + // Very-local scratch registers. + const Register esp = Rtemp1; + const Register slot = Rtemp2; + + // Extracted monitor_size. + int monitor_size = frame::interpreter_frame_monitor_size_in_bytes(); + assert(Assembler::is_aligned((unsigned int)monitor_size, + (unsigned int)frame::alignment_in_bytes), + "size of a monitor must respect alignment of SP"); + + resize_frame(-monitor_size, /*temp*/esp); // Allocate space for new monitor + std(R1_SP, _ijava_state_neg(top_frame_sp), esp); // esp contains fp + + // Shuffle expression stack down. Recall that stack_base points + // just above the new expression stack bottom. Old_tos and new_tos + // are used to scan thru the old and new expression stacks. + if (!stack_is_empty) { + Label copy_slot, copy_slot_finished; + const Register n_slots = slot; + + addi(esp, R15_esp, Interpreter::stackElementSize); // Point to first element (pre-pushed stack). + subf(n_slots, esp, R26_monitor); + srdi_(n_slots, n_slots, LogBytesPerWord); // Compute number of slots to copy. + assert(LogBytesPerWord == 3, "conflicts assembler instructions"); + beq(CCR0, copy_slot_finished); // Nothing to copy. + + mtctr(n_slots); + + // loop + bind(copy_slot); + ld(slot, 0, esp); // Move expression stack down. + std(slot, -monitor_size, esp); // distance = monitor_size + addi(esp, esp, BytesPerWord); + bdnz(copy_slot); + + bind(copy_slot_finished); + } + + addi(R15_esp, R15_esp, -monitor_size); + addi(R26_monitor, R26_monitor, -monitor_size); + + // Restart interpreter +} + +// ============================================================================ +// Java locals access + +// Load a local variable at index in Rindex into register Rdst_value. +// Also puts address of local into Rdst_address as a service. +// Kills: +// - Rdst_value +// - Rdst_address +void InterpreterMacroAssembler::load_local_int(Register Rdst_value, Register Rdst_address, Register Rindex) { + sldi(Rdst_address, Rindex, Interpreter::logStackElementSize); + subf(Rdst_address, Rdst_address, R18_locals); + lwz(Rdst_value, 0, Rdst_address); +} + +// Load a local variable at index in Rindex into register Rdst_value. +// Also puts address of local into Rdst_address as a service. +// Kills: +// - Rdst_value +// - Rdst_address +void InterpreterMacroAssembler::load_local_long(Register Rdst_value, Register Rdst_address, Register Rindex) { + sldi(Rdst_address, Rindex, Interpreter::logStackElementSize); + subf(Rdst_address, Rdst_address, R18_locals); + ld(Rdst_value, -8, Rdst_address); +} + +// Load a local variable at index in Rindex into register Rdst_value. +// Also puts address of local into Rdst_address as a service. +// Input: +// - Rindex: slot nr of local variable +// Kills: +// - Rdst_value +// - Rdst_address +void InterpreterMacroAssembler::load_local_ptr(Register Rdst_value, Register Rdst_address, Register Rindex) { + sldi(Rdst_address, Rindex, Interpreter::logStackElementSize); + subf(Rdst_address, Rdst_address, R18_locals); + ld(Rdst_value, 0, Rdst_address); +} + +// Load a local variable at index in Rindex into register Rdst_value. +// Also puts address of local into Rdst_address as a service. +// Kills: +// - Rdst_value +// - Rdst_address +void InterpreterMacroAssembler::load_local_float(FloatRegister Rdst_value, Register Rdst_address, Register Rindex) { + sldi(Rdst_address, Rindex, Interpreter::logStackElementSize); + subf(Rdst_address, Rdst_address, R18_locals); + lfs(Rdst_value, 0, Rdst_address); +} + +// Load a local variable at index in Rindex into register Rdst_value. +// Also puts address of local into Rdst_address as a service. +// Kills: +// - Rdst_value +// - Rdst_address +void InterpreterMacroAssembler::load_local_double(FloatRegister Rdst_value, Register Rdst_address, Register Rindex) { + sldi(Rdst_address, Rindex, Interpreter::logStackElementSize); + subf(Rdst_address, Rdst_address, R18_locals); + lfd(Rdst_value, -8, Rdst_address); +} + +// Store an int value at local variable slot Rindex. +// Kills: +// - Rindex +void InterpreterMacroAssembler::store_local_int(Register Rvalue, Register Rindex) { + sldi(Rindex, Rindex, Interpreter::logStackElementSize); + subf(Rindex, Rindex, R18_locals); + stw(Rvalue, 0, Rindex); +} + +// Store a long value at local variable slot Rindex. +// Kills: +// - Rindex +void InterpreterMacroAssembler::store_local_long(Register Rvalue, Register Rindex) { + sldi(Rindex, Rindex, Interpreter::logStackElementSize); + subf(Rindex, Rindex, R18_locals); + std(Rvalue, -8, Rindex); +} + +// Store an oop value at local variable slot Rindex. +// Kills: +// - Rindex +void InterpreterMacroAssembler::store_local_ptr(Register Rvalue, Register Rindex) { + sldi(Rindex, Rindex, Interpreter::logStackElementSize); + subf(Rindex, Rindex, R18_locals); + std(Rvalue, 0, Rindex); +} + +// Store an int value at local variable slot Rindex. +// Kills: +// - Rindex +void InterpreterMacroAssembler::store_local_float(FloatRegister Rvalue, Register Rindex) { + sldi(Rindex, Rindex, Interpreter::logStackElementSize); + subf(Rindex, Rindex, R18_locals); + stfs(Rvalue, 0, Rindex); +} + +// Store an int value at local variable slot Rindex. +// Kills: +// - Rindex +void InterpreterMacroAssembler::store_local_double(FloatRegister Rvalue, Register Rindex) { + sldi(Rindex, Rindex, Interpreter::logStackElementSize); + subf(Rindex, Rindex, R18_locals); + stfd(Rvalue, -8, Rindex); +} + +// Read pending exception from thread and jump to interpreter. +// Throw exception entry if one if pending. Fall through otherwise. +void InterpreterMacroAssembler::check_and_forward_exception(Register Rscratch1, Register Rscratch2) { + assert_different_registers(Rscratch1, Rscratch2, R3); + Register Rexception = Rscratch1; + Register Rtmp = Rscratch2; + Label Ldone; + // Get pending exception oop. + ld(Rexception, thread_(pending_exception)); + cmpdi(CCR0, Rexception, 0); + beq(CCR0, Ldone); + li(Rtmp, 0); + mr_if_needed(R3, Rexception); + std(Rtmp, thread_(pending_exception)); // Clear exception in thread + if (Interpreter::rethrow_exception_entry() != NULL) { + // Already got entry address. + load_dispatch_table(Rtmp, (address*)Interpreter::rethrow_exception_entry()); + } else { + // Dynamically load entry address. + int simm16_rest = load_const_optimized(Rtmp, &Interpreter::_rethrow_exception_entry, R0, true); + ld(Rtmp, simm16_rest, Rtmp); + } + mtctr(Rtmp); + save_interpreter_state(Rtmp); + bctr(); + + align(32, 12); + bind(Ldone); +} + +void InterpreterMacroAssembler::call_VM(Register oop_result, address entry_point, bool check_exceptions) { + save_interpreter_state(R11_scratch1); + + MacroAssembler::call_VM(oop_result, entry_point, false); + + restore_interpreter_state(R11_scratch1, /*bcp_and_mdx_only*/ true); + + check_and_handle_popframe(R11_scratch1); + check_and_handle_earlyret(R11_scratch1); + // Now check exceptions manually. + if (check_exceptions) { + check_and_forward_exception(R11_scratch1, R12_scratch2); + } +} + +void InterpreterMacroAssembler::call_VM(Register oop_result, address entry_point, Register arg_1, bool check_exceptions) { + // ARG1 is reserved for the thread. + mr_if_needed(R4_ARG2, arg_1); + call_VM(oop_result, entry_point, check_exceptions); +} + +void InterpreterMacroAssembler::call_VM(Register oop_result, address entry_point, Register arg_1, Register arg_2, bool check_exceptions) { + // ARG1 is reserved for the thread. + mr_if_needed(R4_ARG2, arg_1); + assert(arg_2 != R4_ARG2, "smashed argument"); + mr_if_needed(R5_ARG3, arg_2); + call_VM(oop_result, entry_point, check_exceptions); +} + +void InterpreterMacroAssembler::call_VM(Register oop_result, address entry_point, Register arg_1, Register arg_2, Register arg_3, bool check_exceptions) { + // ARG1 is reserved for the thread. + mr_if_needed(R4_ARG2, arg_1); + assert(arg_2 != R4_ARG2, "smashed argument"); + mr_if_needed(R5_ARG3, arg_2); + assert(arg_3 != R4_ARG2 && arg_3 != R5_ARG3, "smashed argument"); + mr_if_needed(R6_ARG4, arg_3); + call_VM(oop_result, entry_point, check_exceptions); +} + +void InterpreterMacroAssembler::save_interpreter_state(Register scratch) { + ld(scratch, 0, R1_SP); + std(R15_esp, _ijava_state_neg(esp), scratch); + std(R14_bcp, _ijava_state_neg(bcp), scratch); + std(R26_monitor, _ijava_state_neg(monitors), scratch); + if (ProfileInterpreter) { std(R28_mdx, _ijava_state_neg(mdx), scratch); } + // Other entries should be unchanged. +} + +void InterpreterMacroAssembler::restore_interpreter_state(Register scratch, bool bcp_and_mdx_only) { + ld(scratch, 0, R1_SP); + ld(R14_bcp, _ijava_state_neg(bcp), scratch); // Changed by VM code (exception). + if (ProfileInterpreter) { ld(R28_mdx, _ijava_state_neg(mdx), scratch); } // Changed by VM code. + if (!bcp_and_mdx_only) { + // Following ones are Metadata. + ld(R19_method, _ijava_state_neg(method), scratch); + ld(R27_constPoolCache, _ijava_state_neg(cpoolCache), scratch); + // Following ones are stack addresses and don't require reload. + ld(R15_esp, _ijava_state_neg(esp), scratch); + ld(R18_locals, _ijava_state_neg(locals), scratch); + ld(R26_monitor, _ijava_state_neg(monitors), scratch); + } +#ifdef ASSERT + { + Label Lok; + subf(R0, R1_SP, scratch); + cmpdi(CCR0, R0, frame::abi_reg_args_size + frame::ijava_state_size); + bge(CCR0, Lok); + stop("frame too small (restore istate)", 0x5432); + bind(Lok); + } + { + Label Lok; + ld(R0, _ijava_state_neg(ijava_reserved), scratch); + cmpdi(CCR0, R0, 0x5afe); + beq(CCR0, Lok); + stop("frame corrupted (restore istate)", 0x5afe); + bind(Lok); + } +#endif +} + +#endif // !CC_INTERP + void InterpreterMacroAssembler::get_method_counters(Register method, Register Rcounters, Label& skip) { @@ -321,6 +1957,66 @@ void InterpreterMacroAssembler::verify_oop(Register reg, TosState state) { if (state == atos) { MacroAssembler::verify_oop(reg); } } +#ifndef CC_INTERP +// Local helper function for the verify_oop_or_return_address macro. +static bool verify_return_address(Method* m, int bci) { +#ifndef PRODUCT + address pc = (address)(m->constMethod()) + in_bytes(ConstMethod::codes_offset()) + bci; + // Assume it is a valid return address if it is inside m and is preceded by a jsr. + if (!m->contains(pc)) return false; + address jsr_pc; + jsr_pc = pc - Bytecodes::length_for(Bytecodes::_jsr); + if (*jsr_pc == Bytecodes::_jsr && jsr_pc >= m->code_base()) return true; + jsr_pc = pc - Bytecodes::length_for(Bytecodes::_jsr_w); + if (*jsr_pc == Bytecodes::_jsr_w && jsr_pc >= m->code_base()) return true; +#endif // PRODUCT + return false; +} + +void InterpreterMacroAssembler::verify_FPU(int stack_depth, TosState state) { + if (VerifyFPU) { + unimplemented("verfiyFPU"); + } +} + +void InterpreterMacroAssembler::verify_oop_or_return_address(Register reg, Register Rtmp) { + if (!VerifyOops) return; + + // The VM documentation for the astore[_wide] bytecode allows + // the TOS to be not only an oop but also a return address. + Label test; + Label skip; + // See if it is an address (in the current method): + + const int log2_bytecode_size_limit = 16; + srdi_(Rtmp, reg, log2_bytecode_size_limit); + bne(CCR0, test); + + address fd = CAST_FROM_FN_PTR(address, verify_return_address); + unsigned int nbytes_save = 10*8; // 10 volatile gprs + + save_LR_CR(Rtmp); + push_frame_reg_args(nbytes_save, Rtmp); + save_volatile_gprs(R1_SP, 112); // except R0 + + load_const_optimized(Rtmp, fd, R0); + mr_if_needed(R4_ARG2, reg); + mr(R3_ARG1, R19_method); + call_c(Rtmp); // call C + + restore_volatile_gprs(R1_SP, 112); // except R0 + pop_frame(); + restore_LR_CR(Rtmp); + b(skip); + + // Perform a more elaborate out-of-line call. + // Not an address; verify it: + bind(test); + verify_oop(reg); + bind(skip); +} +#endif // !CC_INTERP + // Inline assembly for: // // if (thread is in interp_only_mode) { @@ -343,13 +2039,12 @@ void InterpreterMacroAssembler::notify_method_entry() { cmpwi(CCR0, R0, 0); beq(CCR0, jvmti_post_done); call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::post_method_entry), - /*check_exceptions=*/false); + /*check_exceptions=*/true CC_INTERP_ONLY(&& false)); bind(jvmti_post_done); } } - // Inline assembly for: // // if (thread is in interp_only_mode) { @@ -365,26 +2060,33 @@ void InterpreterMacroAssembler::notify_method_entry() { // // Native methods have their result stored in d_tmp and l_tmp. // Java methods have their result stored in the expression stack. -void InterpreterMacroAssembler::notify_method_exit(bool is_native_method, TosState state) { +void InterpreterMacroAssembler::notify_method_exit(bool is_native_method, TosState state, + NotifyMethodExitMode mode, bool check_exceptions) { // JVMTI // Whenever JVMTI puts a thread in interp_only_mode, method // entry/exit events are sent for that thread to track stack // depth. If it is possible to enter interp_only_mode we add // the code to check if the event should be sent. - if (JvmtiExport::can_post_interpreter_events()) { + if (mode == NotifyJVMTI && JvmtiExport::can_post_interpreter_events()) { Label jvmti_post_done; lwz(R0, in_bytes(JavaThread::interp_only_mode_offset()), R16_thread); cmpwi(CCR0, R0, 0); beq(CCR0, jvmti_post_done); + CC_INTERP_ONLY(assert(is_native_method && !check_exceptions, "must not push state")); + if (!is_native_method) push(state); // Expose tos to GC. call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::post_method_exit), - /*check_exceptions=*/false); + /*check_exceptions=*/check_exceptions); + if (!is_native_method) pop(state); align(32, 12); bind(jvmti_post_done); } + + // Dtrace support not implemented. } +#ifdef CC_INTERP // Convert the current TOP_IJAVA_FRAME into a PARENT_IJAVA_FRAME // (using parent_frame_resize) and push a new interpreter // TOP_IJAVA_FRAME (using frame_size). @@ -442,7 +2144,6 @@ void InterpreterMacroAssembler::pop_interpreter_frame(Register tmp1, Register tm std(R1_SP, _top_ijava_frame_abi(top_frame_sp), R1_SP); } -#ifdef CC_INTERP // Turn state's interpreter frame into the current TOP_IJAVA_FRAME. void InterpreterMacroAssembler::pop_interpreter_frame_to_state(Register state, Register tmp1, Register tmp2, Register tmp3) { assert_different_registers(R14_state, R15_prev_state, tmp1, tmp2, tmp3); @@ -471,7 +2172,6 @@ void InterpreterMacroAssembler::pop_interpreter_frame_to_state(Register state, R // Used for non-initial callers by unextended_sp(). std(R1_SP, _top_ijava_frame_abi(initial_caller_sp), R1_SP); } -#endif // CC_INTERP // Set SP to initial caller's sp, but before fix the back chain. void InterpreterMacroAssembler::resize_frame_to_initial_caller(Register tmp1, Register tmp2) { @@ -481,7 +2181,6 @@ void InterpreterMacroAssembler::resize_frame_to_initial_caller(Register tmp1, Re mr(R1_SP, tmp1); // ... and resize to initial caller. } -#ifdef CC_INTERP // Pop the current interpreter state (without popping the correspoding // frame) and restore R14_state and R15_prev_state accordingly. // Use prev_state_may_be_0 to indicate whether prev_state may be 0 diff --git a/hotspot/src/cpu/ppc/vm/interp_masm_ppc_64.hpp b/hotspot/src/cpu/ppc/vm/interp_masm_ppc_64.hpp index a189e30043c..9846bb5113e 100644 --- a/hotspot/src/cpu/ppc/vm/interp_masm_ppc_64.hpp +++ b/hotspot/src/cpu/ppc/vm/interp_masm_ppc_64.hpp @@ -1,6 +1,6 @@ /* * Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved. - * Copyright 2012, 2013 SAP AG. All rights reserved. + * Copyright 2012, 2014 SAP AG. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -29,7 +29,7 @@ #include "assembler_ppc.inline.hpp" #include "interpreter/invocationCounter.hpp" -// This file specializes the assembler with interpreter-specific macros +// This file specializes the assembler with interpreter-specific macros. class InterpreterMacroAssembler: public MacroAssembler { @@ -39,15 +39,176 @@ class InterpreterMacroAssembler: public MacroAssembler { void null_check_throw(Register a, int offset, Register temp_reg); - // Handy address generation macros + void branch_to_entry(address entry, Register Rscratch); + + // Handy address generation macros. #define thread_(field_name) in_bytes(JavaThread::field_name ## _offset()), R16_thread #define method_(field_name) in_bytes(Method::field_name ## _offset()), R19_method #ifdef CC_INTERP #define state_(field_name) in_bytes(byte_offset_of(BytecodeInterpreter, field_name)), R14_state #define prev_state_(field_name) in_bytes(byte_offset_of(BytecodeInterpreter, field_name)), R15_prev_state + void pop (TosState state) {}; // Not needed. + void push(TosState state) {}; // Not needed. #endif +#ifndef CC_INTERP + virtual void check_and_handle_popframe(Register java_thread); + virtual void check_and_handle_earlyret(Register java_thread); + + // Base routine for all dispatches. + void dispatch_base(TosState state, address* table); + + void load_earlyret_value(TosState state, Register Rscratch1); + + static const Address l_tmp; + static const Address d_tmp; + + // dispatch routines + void dispatch_next(TosState state, int step = 0); + void dispatch_via (TosState state, address* table); + void load_dispatch_table(Register dst, address* table); + void dispatch_Lbyte_code(TosState state, Register bytecode, address* table, bool verify = false); + + // Called by shared interpreter generator. + void dispatch_prolog(TosState state, int step = 0); + void dispatch_epilog(TosState state, int step = 0); + + // Super call_VM calls - correspond to MacroAssembler::call_VM(_leaf) calls. + void super_call_VM_leaf(Register thread_cache, address entry_point, Register arg_1); + void super_call_VM(Register thread_cache, Register oop_result, Register last_java_sp, + address entry_point, Register arg_1, Register arg_2, bool check_exception = true); + + // Generate a subtype check: branch to ok_is_subtype if sub_klass is + // a subtype of super_klass. Blows registers tmp1, tmp2 and tmp3. + void gen_subtype_check(Register sub_klass, Register super_klass, + Register tmp1, Register tmp2, Register tmp3, Label &ok_is_subtype); + + // Load object from cpool->resolved_references(index). + void load_resolved_reference_at_index(Register result, Register index); + + void generate_stack_overflow_check_with_compare_and_throw(Register Rmem_frame_size, Register Rscratch1); + void load_receiver(Register Rparam_count, Register Rrecv_dst); + + // helpers for expression stack + void pop_i( Register r = R17_tos); + void pop_ptr( Register r = R17_tos); + void pop_l( Register r = R17_tos); + void pop_f(FloatRegister f = F15_ftos); + void pop_d(FloatRegister f = F15_ftos ); + + void push_i( Register r = R17_tos); + void push_ptr( Register r = R17_tos); + void push_l( Register r = R17_tos); + void push_f(FloatRegister f = F15_ftos ); + void push_d(FloatRegister f = F15_ftos); + + void push_2ptrs(Register first, Register second); + + void push_l_pop_d(Register l = R17_tos, FloatRegister d = F15_ftos); + void push_d_pop_l(FloatRegister d = F15_ftos, Register l = R17_tos); + + void pop (TosState state); // transition vtos -> state + void push(TosState state); // transition state -> vtos + void empty_expression_stack(); // Resets both Lesp and SP. + + public: + // Load values from bytecode stream: + + enum signedOrNot { Signed, Unsigned }; + enum setCCOrNot { set_CC, dont_set_CC }; + + void get_2_byte_integer_at_bcp(int bcp_offset, + Register Rdst, + signedOrNot is_signed); + + void get_4_byte_integer_at_bcp(int bcp_offset, + Register Rdst, + signedOrNot is_signed = Unsigned); + + void get_cache_index_at_bcp(Register Rdst, int bcp_offset, size_t index_size); + + void get_cache_and_index_at_bcp(Register cache, int bcp_offset, size_t index_size = sizeof(u2)); + + + // common code + + void field_offset_at(int n, Register tmp, Register dest, Register base); + int field_offset_at(Register object, address bcp, int offset); + void fast_iaaccess(int n, address bcp); + void fast_iagetfield(address bcp); + void fast_iaputfield(address bcp, bool do_store_check); + + void index_check(Register array, Register index, int index_shift, Register tmp, Register res); + void index_check_without_pop(Register array, Register index, int index_shift, Register tmp, Register res); + + void get_const(Register Rdst); + void get_constant_pool(Register Rdst); + void get_constant_pool_cache(Register Rdst); + void get_cpool_and_tags(Register Rcpool, Register Rtags); + void is_a(Label& L); + + // Java Call Helpers + void call_from_interpreter(Register Rtarget_method, Register Rret_addr, Register Rscratch1, Register Rscratch2); + + // -------------------------------------------------- + + void unlock_if_synchronized_method(TosState state, bool throw_monitor_exception = true, + bool install_monitor_exception = true); + + // Removes the current activation (incl. unlocking of monitors). + // Additionally this code is used for earlyReturn in which case we + // want to skip throwing an exception and installing an exception. + void remove_activation(TosState state, + bool throw_monitor_exception = true, + bool install_monitor_exception = true); + void merge_frames(Register Rtop_frame_sp, Register return_pc, Register Rscratch1, Register Rscratch2); // merge top frames + + void add_monitor_to_stack(bool stack_is_empty, Register Rtemp1, Register Rtemp2); + + // Local variable access helpers + void load_local_int(Register Rdst_value, Register Rdst_address, Register Rindex); + void load_local_long(Register Rdst_value, Register Rdst_address, Register Rindex); + void load_local_ptr(Register Rdst_value, Register Rdst_address, Register Rindex); + void load_local_float(FloatRegister Rdst_value, Register Rdst_address, Register Rindex); + void load_local_double(FloatRegister Rdst_value, Register Rdst_address, Register Rindex); + void store_local_int(Register Rvalue, Register Rindex); + void store_local_long(Register Rvalue, Register Rindex); + void store_local_ptr(Register Rvalue, Register Rindex); + void store_local_float(FloatRegister Rvalue, Register Rindex); + void store_local_double(FloatRegister Rvalue, Register Rindex); + + // Call VM for std frames + // Special call VM versions that check for exceptions and forward exception + // via short cut (not via expensive forward exception stub). + void check_and_forward_exception(Register Rscratch1, Register Rscratch2); + void call_VM(Register oop_result, address entry_point, bool check_exceptions = true); + void call_VM(Register oop_result, address entry_point, Register arg_1, bool check_exceptions = true); + void call_VM(Register oop_result, address entry_point, Register arg_1, Register arg_2, bool check_exceptions = true); + void call_VM(Register oop_result, address entry_point, Register arg_1, Register arg_2, Register arg_3, bool check_exceptions = true); + // Should not be used: + void call_VM(Register oop_result, Register last_java_sp, address entry_point, bool check_exceptions = true) {ShouldNotReachHere();} + void call_VM(Register oop_result, Register last_java_sp, address entry_point, Register arg_1, bool check_exceptions = true) {ShouldNotReachHere();} + void call_VM(Register oop_result, Register last_java_sp, address entry_point, Register arg_1, Register arg_2, bool check_exceptions = true) {ShouldNotReachHere();} + void call_VM(Register oop_result, Register last_java_sp, address entry_point, Register arg_1, Register arg_2, Register arg_3, bool check_exceptions = true) {ShouldNotReachHere();} + + Address first_local_in_stack(); + + enum LoadOrStore { load, store }; + void static_iload_or_store(int which_local, LoadOrStore direction, Register Rtmp); + void static_aload_or_store(int which_local, LoadOrStore direction, Register Rtmp); + void static_dload_or_store(int which_local, LoadOrStore direction); + + void save_interpreter_state(Register scratch); + void restore_interpreter_state(Register scratch, bool bcp_and_mdx_only = false); + + void increment_backedge_counter(const Register Rcounters, Register Rtmp, Register Rtmp2, Register Rscratch); + void test_backedge_count_for_osr(Register backedge_count, Register branch_bcp, Register Rtmp); + + void record_static_call_in_profile(Register Rentry, Register Rtmp); + void record_receiver_call_in_profile(Register Rklass, Register Rentry, Register Rtmp); +#endif // !CC_INTERP + void get_method_counters(Register method, Register Rcounters, Label& skip); void increment_invocation_counter(Register iv_be_count, Register Rtmp1, Register Rtmp2_r0); @@ -55,12 +216,59 @@ class InterpreterMacroAssembler: public MacroAssembler { void lock_object (Register lock_reg, Register obj_reg); void unlock_object(Register lock_reg, bool check_for_exceptions = true); +#ifndef CC_INTERP + + // Interpreter profiling operations + void set_method_data_pointer_for_bcp(); + void test_method_data_pointer(Label& zero_continue); + void verify_method_data_pointer(); + void test_invocation_counter_for_mdp(Register invocation_count, Register Rscratch, Label &profile_continue); + + void set_mdp_data_at(int constant, Register value); + + void increment_mdp_data_at(int constant, Register counter_addr, Register Rbumped_count, bool decrement = false); + + void increment_mdp_data_at(Register counter_addr, Register Rbumped_count, bool decrement = false); + void increment_mdp_data_at(Register reg, int constant, Register scratch, Register Rbumped_count, bool decrement = false); + + void set_mdp_flag_at(int flag_constant, Register scratch); + void test_mdp_data_at(int offset, Register value, Label& not_equal_continue, Register test_out); + + void update_mdp_by_offset(int offset_of_disp, Register scratch); + void update_mdp_by_offset(Register reg, int offset_of_disp, + Register scratch); + void update_mdp_by_constant(int constant); + void update_mdp_for_ret(TosState state, Register return_bci); + + void profile_taken_branch(Register scratch, Register bumped_count); + void profile_not_taken_branch(Register scratch1, Register scratch2); + void profile_call(Register scratch1, Register scratch2); + void profile_final_call(Register scratch1, Register scratch2); + void profile_virtual_call(Register Rreceiver, Register Rscratch1, Register Rscratch2, bool receiver_can_be_null); + void profile_typecheck(Register Rklass, Register Rscratch1, Register Rscratch2); + void profile_typecheck_failed(Register Rscratch1, Register Rscratch2); + void profile_ret(TosState state, Register return_bci, Register scratch1, Register scratch2); + void profile_switch_default(Register scratch1, Register scratch2); + void profile_switch_case(Register index, Register scratch1,Register scratch2, Register scratch3); + void profile_null_seen(Register Rscratch1, Register Rscratch2); + void record_klass_in_profile(Register receiver, Register scratch1, Register scratch2, bool is_virtual_call); + void record_klass_in_profile_helper(Register receiver, Register scratch1, Register scratch2, int start_row, Label& done, bool is_virtual_call); + +#endif // !CC_INTERP + // Debugging void verify_oop(Register reg, TosState state = atos); // only if +VerifyOops && state == atos +#ifndef CC_INTERP + void verify_oop_or_return_address(Register reg, Register rtmp); // for astore + void verify_FPU(int stack_depth, TosState state = ftos); +#endif // !CC_INTERP - // support for jvmdi/jvmpi + typedef enum { NotifyJVMTI, SkipNotifyJVMTI } NotifyMethodExitMode; + + // Support for jvmdi/jvmpi. void notify_method_entry(); - void notify_method_exit(bool is_native_method, TosState state); + void notify_method_exit(bool is_native_method, TosState state, + NotifyMethodExitMode mode, bool check_exceptions); #ifdef CC_INTERP // Convert the current TOP_IJAVA_FRAME into a PARENT_IJAVA_FRAME diff --git a/hotspot/src/cpu/ppc/vm/interpreter_ppc.cpp b/hotspot/src/cpu/ppc/vm/interpreter_ppc.cpp index 03e1b1e7d54..80bfc2d2918 100644 --- a/hotspot/src/cpu/ppc/vm/interpreter_ppc.cpp +++ b/hotspot/src/cpu/ppc/vm/interpreter_ppc.cpp @@ -1,6 +1,6 @@ /* - * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. - * Copyright 2012, 2013 SAP AG. All rights reserved. + * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright 2012, 2014 SAP AG. All rights reserved. * 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,10 +51,6 @@ #include "c1/c1_Runtime1.hpp" #endif -#ifndef CC_INTERP -#error "CC_INTERP must be defined on PPC" -#endif - #define __ _masm-> #ifdef PRODUCT @@ -147,7 +143,8 @@ address AbstractInterpreterGenerator::generate_slow_signature_handler() { #ifdef CC_INTERP __ ld(R19_method, state_(_method)); #else - __ unimplemented("slow signature handler 1"); + __ ld(R19_method, 0, target_sp); + __ ld(R19_method, _ijava_state_neg(method), R19_method); #endif // Get the result handler. @@ -157,7 +154,8 @@ address AbstractInterpreterGenerator::generate_slow_signature_handler() { #ifdef CC_INTERP __ ld(R19_method, state_(_method)); #else - __ unimplemented("slow signature handler 2"); + __ ld(R19_method, 0, target_sp); + __ ld(R19_method, _ijava_state_neg(method), R19_method); #endif { @@ -453,7 +451,7 @@ address InterpreterGenerator::generate_abstract_entry(void) { // // Registers alive // R16_thread - JavaThread* - // R19_method - callee's methodOop (method to be invoked) + // R19_method - callee's method (method to be invoked) // R1_SP - SP prepared such that caller's outgoing args are near top // LR - return address to caller // @@ -491,7 +489,12 @@ address InterpreterGenerator::generate_abstract_entry(void) { // Return to frame manager, it will handle the pending exception. __ blr(); #else - Unimplemented(); + // We don't know our caller, so jump to the general forward exception stub, + // which will also pop our full frame off. Satisfy the interface of + // SharedRuntime::generate_forward_exception() + __ load_const_optimized(R11_scratch1, StubRoutines::forward_exception_entry(), R0); + __ mtctr(R11_scratch1); + __ bctr(); #endif return entry; @@ -500,8 +503,9 @@ address InterpreterGenerator::generate_abstract_entry(void) { // Call an accessor method (assuming it is resolved, otherwise drop into // vanilla (slow path) entry. address InterpreterGenerator::generate_accessor_entry(void) { - if(!UseFastAccessorMethods && (!FLAG_IS_ERGO(UseFastAccessorMethods))) + if (!UseFastAccessorMethods && (!FLAG_IS_ERGO(UseFastAccessorMethods))) { return NULL; + } Label Lslow_path, Lacquire; @@ -586,10 +590,14 @@ address InterpreterGenerator::generate_accessor_entry(void) { // Load from branch table and dispatch (volatile case: one instruction ahead) __ sldi(Rflags, Rflags, LogBytesPerWord); __ cmpwi(CCR6, Rscratch, 1); // volatile? - __ sldi(Rscratch, Rscratch, exact_log2(BytesPerInstWord)); // volatile ? size of 1 instruction : 0 + if (support_IRIW_for_not_multiple_copy_atomic_cpu) { + __ sldi(Rscratch, Rscratch, exact_log2(BytesPerInstWord)); // volatile ? size of 1 instruction : 0 + } __ ldx(Rbtable, Rbtable, Rflags); - __ subf(Rbtable, Rscratch, Rbtable); // point to volatile/non-volatile entry point + if (support_IRIW_for_not_multiple_copy_atomic_cpu) { + __ subf(Rbtable, Rscratch, Rbtable); // point to volatile/non-volatile entry point + } __ mtctr(Rbtable); __ bctr(); @@ -605,7 +613,7 @@ address InterpreterGenerator::generate_accessor_entry(void) { } assert(all_uninitialized != all_initialized, "consistency"); // either or - __ sync(); // volatile entry point (one instruction before non-volatile_entry point) + __ fence(); // volatile entry point (one instruction before non-volatile_entry point) if (branch_table[vtos] == 0) branch_table[vtos] = __ pc(); // non-volatile_entry point if (branch_table[dtos] == 0) branch_table[dtos] = __ pc(); // non-volatile_entry point if (branch_table[ftos] == 0) branch_table[ftos] = __ pc(); // non-volatile_entry point @@ -614,7 +622,7 @@ address InterpreterGenerator::generate_accessor_entry(void) { if (branch_table[itos] == 0) { // generate only once __ align(32, 28, 28); // align load - __ sync(); // volatile entry point (one instruction before non-volatile_entry point) + __ fence(); // volatile entry point (one instruction before non-volatile_entry point) branch_table[itos] = __ pc(); // non-volatile_entry point __ lwax(R3_RET, Rclass_or_obj, Roffset); __ beq(CCR6, Lacquire); @@ -623,7 +631,7 @@ address InterpreterGenerator::generate_accessor_entry(void) { if (branch_table[ltos] == 0) { // generate only once __ align(32, 28, 28); // align load - __ sync(); // volatile entry point (one instruction before non-volatile_entry point) + __ fence(); // volatile entry point (one instruction before non-volatile_entry point) branch_table[ltos] = __ pc(); // non-volatile_entry point __ ldx(R3_RET, Rclass_or_obj, Roffset); __ beq(CCR6, Lacquire); @@ -632,7 +640,7 @@ address InterpreterGenerator::generate_accessor_entry(void) { if (branch_table[btos] == 0) { // generate only once __ align(32, 28, 28); // align load - __ sync(); // volatile entry point (one instruction before non-volatile_entry point) + __ fence(); // volatile entry point (one instruction before non-volatile_entry point) branch_table[btos] = __ pc(); // non-volatile_entry point __ lbzx(R3_RET, Rclass_or_obj, Roffset); __ extsb(R3_RET, R3_RET); @@ -642,7 +650,7 @@ address InterpreterGenerator::generate_accessor_entry(void) { if (branch_table[ctos] == 0) { // generate only once __ align(32, 28, 28); // align load - __ sync(); // volatile entry point (one instruction before non-volatile_entry point) + __ fence(); // volatile entry point (one instruction before non-volatile_entry point) branch_table[ctos] = __ pc(); // non-volatile_entry point __ lhzx(R3_RET, Rclass_or_obj, Roffset); __ beq(CCR6, Lacquire); @@ -651,7 +659,7 @@ address InterpreterGenerator::generate_accessor_entry(void) { if (branch_table[stos] == 0) { // generate only once __ align(32, 28, 28); // align load - __ sync(); // volatile entry point (one instruction before non-volatile_entry point) + __ fence(); // volatile entry point (one instruction before non-volatile_entry point) branch_table[stos] = __ pc(); // non-volatile_entry point __ lhax(R3_RET, Rclass_or_obj, Roffset); __ beq(CCR6, Lacquire); @@ -660,7 +668,7 @@ address InterpreterGenerator::generate_accessor_entry(void) { if (branch_table[atos] == 0) { // generate only once __ align(32, 28, 28); // align load - __ sync(); // volatile entry point (one instruction before non-volatile_entry point) + __ fence(); // volatile entry point (one instruction before non-volatile_entry point) branch_table[atos] = __ pc(); // non-volatile_entry point __ load_heap_oop(R3_RET, (RegisterOrConstant)Roffset, Rclass_or_obj); __ verify_oop(R3_RET); @@ -683,10 +691,7 @@ address InterpreterGenerator::generate_accessor_entry(void) { #endif __ bind(Lslow_path); - assert(Interpreter::entry_for_kind(Interpreter::zerolocals), "Normal entry must have been generated by now"); - __ load_const_optimized(Rscratch, Interpreter::entry_for_kind(Interpreter::zerolocals), R0); - __ mtctr(Rscratch); - __ bctr(); + __ branch_to_entry(Interpreter::entry_for_kind(Interpreter::zerolocals), Rscratch); __ flush(); return entry; @@ -773,10 +778,7 @@ address InterpreterGenerator::generate_Reference_get_entry(void) { // Generate regular method entry. __ bind(slow_path); - assert(Interpreter::entry_for_kind(Interpreter::zerolocals), "Normal entry must have been generated by now"); - __ load_const_optimized(R11_scratch1, Interpreter::entry_for_kind(Interpreter::zerolocals), R0); - __ mtctr(R11_scratch1); - __ bctr(); + __ branch_to_entry(Interpreter::entry_for_kind(Interpreter::zerolocals), R11_scratch1); __ flush(); return entry; diff --git a/hotspot/src/cpu/ppc/vm/interpreter_ppc.hpp b/hotspot/src/cpu/ppc/vm/interpreter_ppc.hpp index 37bf8e9fe6b..48864ae7213 100644 --- a/hotspot/src/cpu/ppc/vm/interpreter_ppc.hpp +++ b/hotspot/src/cpu/ppc/vm/interpreter_ppc.hpp @@ -1,6 +1,6 @@ /* * Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved. - * Copyright 2012, 2013 SAP AG. All rights reserved. + * Copyright 2012, 2014 SAP AG. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -28,15 +28,23 @@ public: - // Stack index relative to tos (which points at value) + // Stack index relative to tos (which points at value). static int expr_index_at(int i) { return stackElementWords * i; } - // Already negated by c++ interpreter + // Already negated by c++ interpreter. static int local_index_at(int i) { assert(i <= 0, "local direction already negated"); return stackElementWords * i; } +#ifndef CC_INTERP + // The offset in bytes to access a expression stack slot + // relative to the esp pointer. + static int expr_offset_in_bytes(int slot) { + return stackElementSize * slot + wordSize; + } +#endif + #endif // CPU_PPC_VM_INTERPRETER_PPC_PP diff --git a/hotspot/src/cpu/ppc/vm/javaFrameAnchor_ppc.hpp b/hotspot/src/cpu/ppc/vm/javaFrameAnchor_ppc.hpp index f12df9cbe76..26ca0dbf181 100644 --- a/hotspot/src/cpu/ppc/vm/javaFrameAnchor_ppc.hpp +++ b/hotspot/src/cpu/ppc/vm/javaFrameAnchor_ppc.hpp @@ -1,6 +1,6 @@ /* * Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved. - * Copyright 2012, 2013 SAP AG. All rights reserved. + * Copyright 2012, 2014 SAP AG. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -26,10 +26,6 @@ #ifndef CPU_PPC_VM_JAVAFRAMEANCHOR_PPC_HPP #define CPU_PPC_VM_JAVAFRAMEANCHOR_PPC_HPP -#ifndef CC_INTERP -#error "CC_INTERP must be defined on PPC64" -#endif - public: // Each arch must define reset, save, restore // These are used by objects that only care about: diff --git a/hotspot/src/cpu/ppc/vm/macroAssembler_ppc.cpp b/hotspot/src/cpu/ppc/vm/macroAssembler_ppc.cpp index 603e3ed2592..2d3d9cf9713 100644 --- a/hotspot/src/cpu/ppc/vm/macroAssembler_ppc.cpp +++ b/hotspot/src/cpu/ppc/vm/macroAssembler_ppc.cpp @@ -2412,7 +2412,8 @@ void MacroAssembler::set_top_ijava_frame_at_SP_as_last_Java_frame(Register sp, R #ifdef CC_INTERP ld(tmp1/*pc*/, _top_ijava_frame_abi(frame_manager_lr), sp); #else - Unimplemented(); + address entry = pc(); + load_const_optimized(tmp1, entry); #endif set_last_Java_frame(/*sp=*/sp, /*pc=*/tmp1); @@ -2472,6 +2473,16 @@ void MacroAssembler::store_klass(Register dst_oop, Register klass, Register ck) } } +void MacroAssembler::store_klass_gap(Register dst_oop, Register val) { + if (UseCompressedClassPointers) { + if (val == noreg) { + val = R0; + li(val, 0); + } + stw(val, oopDesc::klass_gap_offset_in_bytes(), dst_oop); // klass gap if compressed + } +} + int MacroAssembler::instr_size_for_decode_klass_not_null() { if (!UseCompressedClassPointers) return 0; int num_instrs = 1; // shift or move @@ -3143,3 +3154,15 @@ void MacroAssembler::zap_from_to(Register low, int before, Register high, int af } #endif // !PRODUCT + +SkipIfEqualZero::SkipIfEqualZero(MacroAssembler* masm, Register temp, const bool* flag_addr) : _masm(masm), _label() { + int simm16_offset = masm->load_const_optimized(temp, (address)flag_addr, R0, true); + assert(sizeof(bool) == 1, "PowerPC ABI"); + masm->lbz(temp, simm16_offset, temp); + masm->cmpwi(CCR0, temp, 0); + masm->beq(CCR0, _label); +} + +SkipIfEqualZero::~SkipIfEqualZero() { + _masm->bind(_label); +} diff --git a/hotspot/src/cpu/ppc/vm/macroAssembler_ppc.hpp b/hotspot/src/cpu/ppc/vm/macroAssembler_ppc.hpp index 9b793ef1547..a6576a4c472 100644 --- a/hotspot/src/cpu/ppc/vm/macroAssembler_ppc.hpp +++ b/hotspot/src/cpu/ppc/vm/macroAssembler_ppc.hpp @@ -1,6 +1,6 @@ /* * Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved. - * Copyright 2012, 2013 SAP AG. All rights reserved. + * Copyright 2012, 2014 SAP AG. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -566,12 +566,14 @@ class MacroAssembler: public Assembler { // Load heap oop and decompress. Loaded oop may not be null. inline void load_heap_oop_not_null(Register d, RegisterOrConstant offs, Register s1 = noreg); + inline void store_heap_oop_not_null(Register d, RegisterOrConstant offs, Register s1, + /*specify if d must stay uncompressed*/ Register tmp = noreg); // Null allowed. inline void load_heap_oop(Register d, RegisterOrConstant offs, Register s1 = noreg); // Encode/decode heap oop. Oop may not be null, else en/decoding goes wrong. - inline void encode_heap_oop_not_null(Register d); + inline Register encode_heap_oop_not_null(Register d, Register src = noreg); inline void decode_heap_oop_not_null(Register d); // Null allowed. @@ -581,6 +583,7 @@ class MacroAssembler: public Assembler { void load_klass(Register dst, Register src); void load_klass_with_trap_null_check(Register dst, Register src); void store_klass(Register dst_oop, Register klass, Register tmp = R0); + void store_klass_gap(Register dst_oop, Register val = noreg); // Will store 0 if val not specified. static int instr_size_for_decode_klass_not_null(); void decode_klass_not_null(Register dst, Register src = noreg); void encode_klass_not_null(Register dst, Register src = noreg); @@ -693,4 +696,21 @@ class MacroAssembler: public Assembler { void zap_from_to(Register low, int before, Register high, int after, Register val, Register addr) PRODUCT_RETURN; }; +// class SkipIfEqualZero: +// +// Instantiating this class will result in assembly code being output that will +// jump around any code emitted between the creation of the instance and it's +// automatic destruction at the end of a scope block, depending on the value of +// the flag passed to the constructor, which will be checked at run-time. +class SkipIfEqualZero : public StackObj { + private: + MacroAssembler* _masm; + Label _label; + + public: + // 'Temp' is a temp register that this object can use (and trash). + explicit SkipIfEqualZero(MacroAssembler*, Register temp, const bool* flag_addr); + ~SkipIfEqualZero(); +}; + #endif // CPU_PPC_VM_MACROASSEMBLER_PPC_HPP diff --git a/hotspot/src/cpu/ppc/vm/macroAssembler_ppc.inline.hpp b/hotspot/src/cpu/ppc/vm/macroAssembler_ppc.inline.hpp index bebfb4b6305..84485d4f6af 100644 --- a/hotspot/src/cpu/ppc/vm/macroAssembler_ppc.inline.hpp +++ b/hotspot/src/cpu/ppc/vm/macroAssembler_ppc.inline.hpp @@ -1,6 +1,6 @@ /* * Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved. - * Copyright 2012, 2013 SAP AG. All rights reserved. + * Copyright 2012, 2014 SAP AG. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -321,6 +321,15 @@ inline void MacroAssembler::load_heap_oop_not_null(Register d, RegisterOrConstan } } +inline void MacroAssembler::store_heap_oop_not_null(Register d, RegisterOrConstant offs, Register s1, Register tmp) { + if (UseCompressedOops) { + Register compressedOop = encode_heap_oop_not_null((tmp != noreg) ? tmp : d, d); + stw(compressedOop, offs, s1); + } else { + std(d, offs, s1); + } +} + inline void MacroAssembler::load_heap_oop(Register d, RegisterOrConstant offs, Register s1) { if (UseCompressedOops) { lwz(d, offs, s1); @@ -330,13 +339,17 @@ inline void MacroAssembler::load_heap_oop(Register d, RegisterOrConstant offs, R } } -inline void MacroAssembler::encode_heap_oop_not_null(Register d) { +inline Register MacroAssembler::encode_heap_oop_not_null(Register d, Register src) { + Register current = (src!=noreg) ? src : d; // Compressed oop is in d if no src provided. if (Universe::narrow_oop_base() != NULL) { - sub(d, d, R30); + sub(d, current, R30); + current = d; } if (Universe::narrow_oop_shift() != 0) { - srdi(d, d, LogMinObjAlignmentInBytes); + srdi(d, current, LogMinObjAlignmentInBytes); + current = d; } + return current; // Encoded oop is in this register. } inline void MacroAssembler::decode_heap_oop_not_null(Register d) { diff --git a/hotspot/src/cpu/ppc/vm/register_ppc.hpp b/hotspot/src/cpu/ppc/vm/register_ppc.hpp index bc04d8d2c16..107c5bab8b8 100644 --- a/hotspot/src/cpu/ppc/vm/register_ppc.hpp +++ b/hotspot/src/cpu/ppc/vm/register_ppc.hpp @@ -1,6 +1,6 @@ /* * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. - * Copyright 2012, 2013 SAP AG. All rights reserved. + * Copyright 2012, 2014 SAP AG. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -579,15 +579,27 @@ REGISTER_DECLARATION(FloatRegister, F13_ARG13, F13); // volatile // Register declarations to be used in frame manager assembly code. // Use only non-volatile registers in order to keep values across C-calls. +#ifdef CC_INTERP REGISTER_DECLARATION(Register, R14_state, R14); // address of new cInterpreter. REGISTER_DECLARATION(Register, R15_prev_state, R15); // address of old cInterpreter +#else // CC_INTERP +REGISTER_DECLARATION(Register, R14_bcp, R14); +REGISTER_DECLARATION(Register, R15_esp, R15); +REGISTER_DECLARATION(FloatRegister, F15_ftos, F15); +#endif // CC_INTERP REGISTER_DECLARATION(Register, R16_thread, R16); // address of current thread REGISTER_DECLARATION(Register, R17_tos, R17); // address of Java tos (prepushed). REGISTER_DECLARATION(Register, R18_locals, R18); // address of first param slot (receiver). REGISTER_DECLARATION(Register, R19_method, R19); // address of current method #ifndef DONT_USE_REGISTER_DEFINES +#ifdef CC_INTERP #define R14_state AS_REGISTER(Register, R14) #define R15_prev_state AS_REGISTER(Register, R15) +#else // CC_INTERP +#define R14_bcp AS_REGISTER(Register, R14) +#define R15_esp AS_REGISTER(Register, R15) +#define F15_ftos AS_REGISTER(FloatRegister, F15) +#endif // CC_INTERP #define R16_thread AS_REGISTER(Register, R16) #define R17_tos AS_REGISTER(Register, R17) #define R18_locals AS_REGISTER(Register, R18) @@ -608,6 +620,14 @@ REGISTER_DECLARATION(Register, R26_tmp6, R26); REGISTER_DECLARATION(Register, R27_tmp7, R27); REGISTER_DECLARATION(Register, R28_tmp8, R28); REGISTER_DECLARATION(Register, R29_tmp9, R29); +#ifndef CC_INTERP +REGISTER_DECLARATION(Register, R24_dispatch_addr, R24); +REGISTER_DECLARATION(Register, R25_templateTableBase, R25); +REGISTER_DECLARATION(Register, R26_monitor, R26); +REGISTER_DECLARATION(Register, R27_constPoolCache, R27); +REGISTER_DECLARATION(Register, R28_mdx, R28); +#endif // CC_INTERP + #ifndef DONT_USE_REGISTER_DEFINES #define R21_tmp1 AS_REGISTER(Register, R21) #define R22_tmp2 AS_REGISTER(Register, R22) @@ -618,6 +638,16 @@ REGISTER_DECLARATION(Register, R29_tmp9, R29); #define R27_tmp7 AS_REGISTER(Register, R27) #define R28_tmp8 AS_REGISTER(Register, R28) #define R29_tmp9 AS_REGISTER(Register, R29) +#ifndef CC_INTERP +// Lmonitors : monitor pointer +// LcpoolCache: constant pool cache +// mdx: method data index +#define R24_dispatch_addr AS_REGISTER(Register, R24) +#define R25_templateTableBase AS_REGISTER(Register, R25) +#define R26_monitor AS_REGISTER(Register, R26) +#define R27_constPoolCache AS_REGISTER(Register, R27) +#define R28_mdx AS_REGISTER(Register, R28) +#endif #define CCR4_is_synced AS_REGISTER(ConditionRegister, CCR4) #endif diff --git a/hotspot/src/cpu/ppc/vm/sharedRuntime_ppc.cpp b/hotspot/src/cpu/ppc/vm/sharedRuntime_ppc.cpp index 323bdf46771..d556d7009fa 100644 --- a/hotspot/src/cpu/ppc/vm/sharedRuntime_ppc.cpp +++ b/hotspot/src/cpu/ppc/vm/sharedRuntime_ppc.cpp @@ -1,6 +1,6 @@ /* * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. - * Copyright 2012, 2013 SAP AG. All rights reserved. + * Copyright 2012, 2014 SAP AG. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -957,6 +957,9 @@ static address gen_c2i_adapter(MacroAssembler *masm, #ifdef CC_INTERP const Register tos = R17_tos; +#else + const Register tos = R15_esp; + __ load_const_optimized(R25_templateTableBase, (address)Interpreter::dispatch_table((TosState)0), R11_scratch1); #endif // load TOS @@ -975,7 +978,7 @@ static void gen_i2c_adapter(MacroAssembler *masm, const BasicType *sig_bt, const VMRegPair *regs) { - // Load method's entry-point from methodOop. + // Load method's entry-point from method. __ ld(R12_scratch2, in_bytes(Method::from_compiled_offset()), R19_method); __ mtctr(R12_scratch2); @@ -996,7 +999,10 @@ static void gen_i2c_adapter(MacroAssembler *masm, #ifdef CC_INTERP const Register ld_ptr = R17_tos; +#else + const Register ld_ptr = R15_esp; #endif + const Register value_regs[] = { R22_tmp2, R23_tmp3, R24_tmp4, R25_tmp5, R26_tmp6 }; const int num_value_regs = sizeof(value_regs) / sizeof(Register); int value_regs_index = 0; @@ -1087,8 +1093,8 @@ static void gen_i2c_adapter(MacroAssembler *masm, } } - BLOCK_COMMENT("Store method oop"); - // Store method oop into thread->callee_target. + BLOCK_COMMENT("Store method"); + // Store method into thread->callee_target. // We might end up in handle_wrong_method if the callee is // deoptimized as we race thru here. If that happens we don't want // to take a safepoint because the caller frame will look @@ -2617,8 +2623,12 @@ static void push_skeleton_frame(MacroAssembler* masm, bool deopt, #ifdef CC_INTERP __ std(R1_SP, _parent_ijava_frame_abi(initial_caller_sp), R1_SP); #else - Unimplemented(); +#ifdef ASSERT + __ load_const_optimized(pc_reg, 0x5afe); + __ std(pc_reg, _ijava_state_neg(ijava_reserved), R1_SP); #endif + __ std(R1_SP, _ijava_state_neg(sender_sp), R1_SP); +#endif // CC_INTERP __ addi(number_of_frames_reg, number_of_frames_reg, -1); __ addi(frame_sizes_reg, frame_sizes_reg, wordSize); __ addi(pcs_reg, pcs_reg, wordSize); @@ -2690,7 +2700,15 @@ static void push_skeleton_frames(MacroAssembler* masm, bool deopt, __ std(R12_scratch2, _abi(lr), R1_SP); // Initialize initial_caller_sp. +#ifdef CC_INTERP __ std(frame_size_reg/*old_sp*/, _parent_ijava_frame_abi(initial_caller_sp), R1_SP); +#else +#ifdef ASSERT + __ load_const_optimized(pc_reg, 0x5afe); + __ std(pc_reg, _ijava_state_neg(ijava_reserved), R1_SP); +#endif + __ std(frame_size_reg, _ijava_state_neg(sender_sp), R1_SP); +#endif // CC_INTERP #ifdef ASSERT // Make sure that there is at least one entry in the array. @@ -2911,10 +2929,16 @@ void SharedRuntime::generate_deopt_blob() { // optional c2i, caller of deoptee, ...). // Initialize R14_state. +#ifdef CC_INTERP __ ld(R14_state, 0, R1_SP); __ addi(R14_state, R14_state, -frame::interpreter_frame_cinterpreterstate_size_in_bytes()); // Also inititialize R15_prev_state. __ restore_prev_state(); +#else + __ restore_interpreter_state(R11_scratch1); + __ load_const_optimized(R25_templateTableBase, (address)Interpreter::dispatch_table((TosState)0), R11_scratch1); +#endif // CC_INTERP + // Return to the interpreter entry point. __ blr(); @@ -3033,11 +3057,17 @@ void SharedRuntime::generate_uncommon_trap_blob() { // stack: (top interpreter frame, ..., optional interpreter frame, // optional c2i, caller of deoptee, ...). +#ifdef CC_INTERP // Initialize R14_state, ... __ ld(R11_scratch1, 0, R1_SP); __ addi(R14_state, R11_scratch1, -frame::interpreter_frame_cinterpreterstate_size_in_bytes()); // also initialize R15_prev_state. __ restore_prev_state(); +#else + __ restore_interpreter_state(R11_scratch1); + __ load_const_optimized(R25_templateTableBase, (address)Interpreter::dispatch_table((TosState)0), R11_scratch1); +#endif // CC_INTERP + // Return to the interpreter entry point. __ blr(); @@ -3115,7 +3145,6 @@ SafepointBlob* SharedRuntime::generate_handler_blob(address call_ptr, int poll_t frame_size_in_bytes, /*restore_ctr=*/true); - BLOCK_COMMENT(" Jump to forward_exception_entry."); // Jump to forward_exception_entry, with the issuing PC in LR // so it looks like the original nmethod called forward_exception_entry. @@ -3200,7 +3229,7 @@ RuntimeStub* SharedRuntime::generate_resolve_blob(address destination, const cha RegisterSaver::restore_live_registers_and_pop_frame(masm, frame_size_in_bytes, /*restore_ctr*/ false); - // Get the returned methodOop. + // Get the returned method. __ get_vm_result_2(R19_method); __ bctr(); diff --git a/hotspot/src/cpu/ppc/vm/stubGenerator_ppc.cpp b/hotspot/src/cpu/ppc/vm/stubGenerator_ppc.cpp index 96c3ae94648..d452b27038c 100644 --- a/hotspot/src/cpu/ppc/vm/stubGenerator_ppc.cpp +++ b/hotspot/src/cpu/ppc/vm/stubGenerator_ppc.cpp @@ -1,6 +1,6 @@ /* * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. - * Copyright 2012, 2013 SAP AG. All rights reserved. + * Copyright 2012, 2014 SAP AG. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -39,15 +39,10 @@ #include "runtime/stubCodeGenerator.hpp" #include "runtime/stubRoutines.hpp" #include "utilities/top.hpp" -#ifdef TARGET_OS_FAMILY_aix -# include "thread_aix.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_linux -# include "thread_linux.inline.hpp" -#endif #ifdef COMPILER2 #include "opto/runtime.hpp" #endif +#include "runtime/thread.inline.hpp" #define __ _masm-> @@ -221,7 +216,7 @@ class StubGenerator: public StubCodeGenerator { { BLOCK_COMMENT("Call frame manager or native entry."); // Call frame manager or native entry. - Register r_new_arg_entry = R14_state; + Register r_new_arg_entry = R14; // PPC_state; assert_different_registers(r_new_arg_entry, r_top_of_arguments_addr, r_arg_method, r_arg_thread); @@ -234,7 +229,11 @@ class StubGenerator: public StubCodeGenerator { // R16_thread - JavaThread* // Tos must point to last argument - element_size. +#ifdef CC_INTERP const Register tos = R17_tos; +#else + const Register tos = R15_esp; +#endif __ addi(tos, r_top_of_arguments_addr, -Interpreter::stackElementSize); // initialize call_stub locals (step 2) @@ -248,8 +247,11 @@ class StubGenerator: public StubCodeGenerator { assert(tos != r_arg_thread && R19_method != r_arg_thread, "trashed r_arg_thread"); // Set R15_prev_state to 0 for simplifying checks in callee. +#ifdef CC_INTERP __ li(R15_prev_state, 0); - +#else + __ load_const_optimized(R25_templateTableBase, (address)Interpreter::dispatch_table((TosState)0), R11_scratch1); +#endif // Stack on entry to frame manager / native entry: // // F0 [TOP_IJAVA_FRAME_ABI] @@ -2089,7 +2091,7 @@ class StubGenerator: public StubCodeGenerator { guarantee(!UseAESIntrinsics, "not yet implemented."); } - // PPC uses stubs for safefetch. + // Safefetch stubs. generate_safefetch("SafeFetch32", sizeof(int), &StubRoutines::_safefetch32_entry, &StubRoutines::_safefetch32_fault_pc, &StubRoutines::_safefetch32_continuation_pc); diff --git a/hotspot/src/cpu/ppc/vm/templateInterpreterGenerator_ppc.hpp b/hotspot/src/cpu/ppc/vm/templateInterpreterGenerator_ppc.hpp new file mode 100644 index 00000000000..051ed26e728 --- /dev/null +++ b/hotspot/src/cpu/ppc/vm/templateInterpreterGenerator_ppc.hpp @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright 2013, 2014 SAP AG. All rights reserved. + * 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 CPU_PPC_VM_TEMPLATEINTERPRETERGENERATOR_PPC_HPP +#define CPU_PPC_VM_TEMPLATEINTERPRETERGENERATOR_PPC_HPP + + protected: + address generate_normal_entry(bool synchronized); + address generate_native_entry(bool synchronized); + address generate_math_entry(AbstractInterpreter::MethodKind kind); + address generate_empty_entry(void); + + void lock_method(Register Rflags, Register Rscratch1, Register Rscratch2, bool flags_preloaded=false); + void unlock_method(bool check_exceptions = true); + + void generate_counter_incr(Label* overflow, Label* profile_method, Label* profile_method_continue); + void generate_counter_overflow(Label& continue_entry); + + void generate_fixed_frame(bool native_call, Register Rsize_of_parameters, Register Rsize_of_locals); + void generate_stack_overflow_check(Register Rframe_size, Register Rscratch1); + +#endif // CPU_PPC_VM_TEMPLATEINTERPRETERGENERATOR_PPC_HPP diff --git a/hotspot/src/cpu/ppc/vm/templateInterpreter_ppc.cpp b/hotspot/src/cpu/ppc/vm/templateInterpreter_ppc.cpp new file mode 100644 index 00000000000..2e19fca081d --- /dev/null +++ b/hotspot/src/cpu/ppc/vm/templateInterpreter_ppc.cpp @@ -0,0 +1,1813 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright 2013, 2014 SAP AG. All rights reserved. + * 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" +#ifndef CC_INTERP +#include "asm/macroAssembler.inline.hpp" +#include "interpreter/bytecodeHistogram.hpp" +#include "interpreter/interpreter.hpp" +#include "interpreter/interpreterGenerator.hpp" +#include "interpreter/interpreterRuntime.hpp" +#include "interpreter/templateTable.hpp" +#include "oops/arrayOop.hpp" +#include "oops/methodData.hpp" +#include "oops/method.hpp" +#include "oops/oop.inline.hpp" +#include "prims/jvmtiExport.hpp" +#include "prims/jvmtiThreadState.hpp" +#include "runtime/arguments.hpp" +#include "runtime/deoptimization.hpp" +#include "runtime/frame.inline.hpp" +#include "runtime/sharedRuntime.hpp" +#include "runtime/stubRoutines.hpp" +#include "runtime/synchronizer.hpp" +#include "runtime/timer.hpp" +#include "runtime/vframeArray.hpp" +#include "utilities/debug.hpp" +#include "utilities/macros.hpp" + +#undef __ +#define __ _masm-> + +#ifdef PRODUCT +#define BLOCK_COMMENT(str) /* nothing */ +#else +#define BLOCK_COMMENT(str) __ block_comment(str) +#endif + +#define BIND(label) bind(label); BLOCK_COMMENT(#label ":") + +//----------------------------------------------------------------------------- + +// Actually we should never reach here since we do stack overflow checks before pushing any frame. +address TemplateInterpreterGenerator::generate_StackOverflowError_handler() { + address entry = __ pc(); + __ unimplemented("generate_StackOverflowError_handler"); + return entry; +} + +address TemplateInterpreterGenerator::generate_ArrayIndexOutOfBounds_handler(const char* name) { + address entry = __ pc(); + __ empty_expression_stack(); + __ load_const_optimized(R4_ARG2, (address) name); + // Index is in R17_tos. + __ mr(R5_ARG3, R17_tos); + __ call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::throw_ArrayIndexOutOfBoundsException)); + return entry; +} + +#if 0 +// Call special ClassCastException constructor taking object to cast +// and target class as arguments. +address TemplateInterpreterGenerator::generate_ClassCastException_verbose_handler(const char* name) { + address entry = __ pc(); + + // Target class oop is in register R6_ARG4 by convention! + + // Expression stack must be empty before entering the VM if an + // exception happened. + __ empty_expression_stack(); + // Setup parameters. + // Thread will be loaded to R3_ARG1. + __ load_const_optimized(R4_ARG2, (address) name); + __ mr(R5_ARG3, R17_tos); + // R6_ARG4 contains specified class. + __ call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::throw_ClassCastException_verbose)); +#ifdef ASSERT + // Above call must not return here since exception pending. + __ should_not_reach_here(); +#endif + return entry; +} +#endif + +address TemplateInterpreterGenerator::generate_ClassCastException_handler() { + address entry = __ pc(); + // Expression stack must be empty before entering the VM if an + // exception happened. + __ empty_expression_stack(); + + // Load exception object. + // Thread will be loaded to R3_ARG1. + __ call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::throw_ClassCastException), R17_tos); +#ifdef ASSERT + // Above call must not return here since exception pending. + __ should_not_reach_here(); +#endif + return entry; +} + +address TemplateInterpreterGenerator::generate_exception_handler_common(const char* name, const char* message, bool pass_oop) { + address entry = __ pc(); + //__ untested("generate_exception_handler_common"); + Register Rexception = R17_tos; + + // Expression stack must be empty before entering the VM if an exception happened. + __ empty_expression_stack(); + + __ load_const_optimized(R4_ARG2, (address) name, R11_scratch1); + if (pass_oop) { + __ mr(R5_ARG3, Rexception); + __ call_VM(Rexception, CAST_FROM_FN_PTR(address, InterpreterRuntime::create_klass_exception), false); + } else { + __ load_const_optimized(R5_ARG3, (address) message, R11_scratch1); + __ call_VM(Rexception, CAST_FROM_FN_PTR(address, InterpreterRuntime::create_exception), false); + } + + // Throw exception. + __ mr(R3_ARG1, Rexception); + __ load_const_optimized(R11_scratch1, Interpreter::throw_exception_entry(), R12_scratch2); + __ mtctr(R11_scratch1); + __ bctr(); + + return entry; +} + +address TemplateInterpreterGenerator::generate_continuation_for(TosState state) { + address entry = __ pc(); + __ unimplemented("generate_continuation_for"); + return entry; +} + +// This entry is returned to when a call returns to the interpreter. +// When we arrive here, we expect that the callee stack frame is already popped. +address TemplateInterpreterGenerator::generate_return_entry_for(TosState state, int step, size_t index_size) { + address entry = __ pc(); + + // Move the value out of the return register back to the TOS cache of current frame. + switch (state) { + case ltos: + case btos: + case ctos: + case stos: + case atos: + case itos: __ mr(R17_tos, R3_RET); break; // RET -> TOS cache + case ftos: + case dtos: __ fmr(F15_ftos, F1_RET); break; // TOS cache -> GR_FRET + case vtos: break; // Nothing to do, this was a void return. + default : ShouldNotReachHere(); + } + + __ restore_interpreter_state(R11_scratch1); // Sets R11_scratch1 = fp. + __ ld(R12_scratch2, _ijava_state_neg(top_frame_sp), R11_scratch1); + __ resize_frame_absolute(R12_scratch2, R11_scratch1, R0); + + // Compiled code destroys templateTableBase, reload. + __ load_const_optimized(R25_templateTableBase, (address)Interpreter::dispatch_table((TosState)0), R12_scratch2); + + const Register cache = R11_scratch1; + const Register size = R12_scratch2; + __ get_cache_and_index_at_bcp(cache, 1, index_size); + + // Big Endian (get least significant byte of 64 bit value): + __ lbz(size, in_bytes(ConstantPoolCache::base_offset() + ConstantPoolCacheEntry::flags_offset()) + 7, cache); + __ sldi(size, size, Interpreter::logStackElementSize); + __ add(R15_esp, R15_esp, size); + __ dispatch_next(state, step); + return entry; +} + +address TemplateInterpreterGenerator::generate_deopt_entry_for(TosState state, int step) { + address entry = __ pc(); + // If state != vtos, we're returning from a native method, which put it's result + // into the result register. So move the value out of the return register back + // to the TOS cache of current frame. + + switch (state) { + case ltos: + case btos: + case ctos: + case stos: + case atos: + case itos: __ mr(R17_tos, R3_RET); break; // GR_RET -> TOS cache + case ftos: + case dtos: __ fmr(F15_ftos, F1_RET); break; // TOS cache -> GR_FRET + case vtos: break; // Nothing to do, this was a void return. + default : ShouldNotReachHere(); + } + + // Load LcpoolCache @@@ should be already set! + __ get_constant_pool_cache(R27_constPoolCache); + + // Handle a pending exception, fall through if none. + __ check_and_forward_exception(R11_scratch1, R12_scratch2); + + // Start executing bytecodes. + __ dispatch_next(state, step); + + return entry; +} + +// A result handler converts the native result into java format. +// Use the shared code between c++ and template interpreter. +address TemplateInterpreterGenerator::generate_result_handler_for(BasicType type) { + return AbstractInterpreterGenerator::generate_result_handler_for(type); +} + +address TemplateInterpreterGenerator::generate_safept_entry_for(TosState state, address runtime_entry) { + address entry = __ pc(); + + __ push(state); + __ call_VM(noreg, runtime_entry); + __ dispatch_via(vtos, Interpreter::_normal_table.table_for(vtos)); + + return entry; +} + +// Helpers for commoning out cases in the various type of method entries. + +// Increment invocation count & check for overflow. +// +// Note: checking for negative value instead of overflow +// so we have a 'sticky' overflow test. +// +void TemplateInterpreterGenerator::generate_counter_incr(Label* overflow, Label* profile_method, Label* profile_method_continue) { + // Note: In tiered we increment either counters in method or in MDO depending if we're profiling or not. + Register Rscratch1 = R11_scratch1; + Register Rscratch2 = R12_scratch2; + Register R3_counters = R3_ARG1; + Label done; + + if (TieredCompilation) { + const int increment = InvocationCounter::count_increment; + const int mask = ((1 << Tier0InvokeNotifyFreqLog) - 1) << InvocationCounter::count_shift; + Label no_mdo; + if (ProfileInterpreter) { + const Register Rmdo = Rscratch1; + // If no method data exists, go to profile_continue. + __ ld(Rmdo, in_bytes(Method::method_data_offset()), R19_method); + __ cmpdi(CCR0, Rmdo, 0); + __ beq(CCR0, no_mdo); + + // Increment backedge counter in the MDO. + const int mdo_bc_offs = in_bytes(MethodData::backedge_counter_offset()) + in_bytes(InvocationCounter::counter_offset()); + __ lwz(Rscratch2, mdo_bc_offs, Rmdo); + __ addi(Rscratch2, Rscratch2, increment); + __ stw(Rscratch2, mdo_bc_offs, Rmdo); + __ load_const_optimized(Rscratch1, mask, R0); + __ and_(Rscratch1, Rscratch2, Rscratch1); + __ bne(CCR0, done); + __ b(*overflow); + } + + // Increment counter in MethodCounters*. + const int mo_bc_offs = in_bytes(MethodCounters::backedge_counter_offset()) + in_bytes(InvocationCounter::counter_offset()); + __ bind(no_mdo); + __ get_method_counters(R19_method, R3_counters, done); + __ lwz(Rscratch2, mo_bc_offs, R3_counters); + __ addi(Rscratch2, Rscratch2, increment); + __ stw(Rscratch2, mo_bc_offs, R3_counters); + __ load_const_optimized(Rscratch1, mask, R0); + __ and_(Rscratch1, Rscratch2, Rscratch1); + __ beq(CCR0, *overflow); + + __ bind(done); + + } else { + + // Update standard invocation counters. + Register Rsum_ivc_bec = R4_ARG2; + __ get_method_counters(R19_method, R3_counters, done); + __ increment_invocation_counter(R3_counters, Rsum_ivc_bec, R12_scratch2); + // Increment interpreter invocation counter. + if (ProfileInterpreter) { // %%% Merge this into methodDataOop. + __ lwz(R12_scratch2, in_bytes(MethodCounters::interpreter_invocation_counter_offset()), R3_counters); + __ addi(R12_scratch2, R12_scratch2, 1); + __ stw(R12_scratch2, in_bytes(MethodCounters::interpreter_invocation_counter_offset()), R3_counters); + } + // Check if we must create a method data obj. + if (ProfileInterpreter && profile_method != NULL) { + const Register profile_limit = Rscratch1; + int pl_offs = __ load_const_optimized(profile_limit, &InvocationCounter::InterpreterProfileLimit, R0, true); + __ lwz(profile_limit, pl_offs, profile_limit); + // Test to see if we should create a method data oop. + __ cmpw(CCR0, Rsum_ivc_bec, profile_limit); + __ blt(CCR0, *profile_method_continue); + // If no method data exists, go to profile_method. + __ test_method_data_pointer(*profile_method); + } + // Finally check for counter overflow. + if (overflow) { + const Register invocation_limit = Rscratch1; + int il_offs = __ load_const_optimized(invocation_limit, &InvocationCounter::InterpreterInvocationLimit, R0, true); + __ lwz(invocation_limit, il_offs, invocation_limit); + assert(4 == sizeof(InvocationCounter::InterpreterInvocationLimit), "unexpected field size"); + __ cmpw(CCR0, Rsum_ivc_bec, invocation_limit); + __ bge(CCR0, *overflow); + } + + __ bind(done); + } +} + +// Generate code to initiate compilation on invocation counter overflow. +void TemplateInterpreterGenerator::generate_counter_overflow(Label& continue_entry) { + // Generate code to initiate compilation on the counter overflow. + + // InterpreterRuntime::frequency_counter_overflow takes one arguments, + // which indicates if the counter overflow occurs at a backwards branch (NULL bcp) + // We pass zero in. + // The call returns the address of the verified entry point for the method or NULL + // if the compilation did not complete (either went background or bailed out). + // + // Unlike the C++ interpreter above: Check exceptions! + // Assumption: Caller must set the flag "do_not_unlock_if_sychronized" if the monitor of a sync'ed + // method has not yet been created. Thus, no unlocking of a non-existing monitor can occur. + + __ li(R4_ARG2, 0); + __ call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::frequency_counter_overflow), R4_ARG2, true); + + // Returns verified_entry_point or NULL. + // We ignore it in any case. + __ b(continue_entry); +} + +void TemplateInterpreterGenerator::generate_stack_overflow_check(Register Rmem_frame_size, Register Rscratch1) { + assert_different_registers(Rmem_frame_size, Rscratch1); + __ generate_stack_overflow_check_with_compare_and_throw(Rmem_frame_size, Rscratch1); +} + +void TemplateInterpreterGenerator::unlock_method(bool check_exceptions) { + __ unlock_object(R26_monitor, check_exceptions); +} + +// Lock the current method, interpreter register window must be set up! +void TemplateInterpreterGenerator::lock_method(Register Rflags, Register Rscratch1, Register Rscratch2, bool flags_preloaded) { + const Register Robj_to_lock = Rscratch2; + + { + if (!flags_preloaded) { + __ lwz(Rflags, method_(access_flags)); + } + +#ifdef ASSERT + // Check if methods needs synchronization. + { + Label Lok; + __ testbitdi(CCR0, R0, Rflags, JVM_ACC_SYNCHRONIZED_BIT); + __ btrue(CCR0,Lok); + __ stop("method doesn't need synchronization"); + __ bind(Lok); + } +#endif // ASSERT + } + + // Get synchronization object to Rscratch2. + { + const int mirror_offset = in_bytes(Klass::java_mirror_offset()); + Label Lstatic; + Label Ldone; + + __ testbitdi(CCR0, R0, Rflags, JVM_ACC_STATIC_BIT); + __ btrue(CCR0, Lstatic); + + // Non-static case: load receiver obj from stack and we're done. + __ ld(Robj_to_lock, R18_locals); + __ b(Ldone); + + __ bind(Lstatic); // Static case: Lock the java mirror + __ ld(Robj_to_lock, in_bytes(Method::const_offset()), R19_method); + __ ld(Robj_to_lock, in_bytes(ConstMethod::constants_offset()), Robj_to_lock); + __ ld(Robj_to_lock, ConstantPool::pool_holder_offset_in_bytes(), Robj_to_lock); + __ ld(Robj_to_lock, mirror_offset, Robj_to_lock); + + __ bind(Ldone); + __ verify_oop(Robj_to_lock); + } + + // Got the oop to lock => execute! + __ add_monitor_to_stack(true, Rscratch1, R0); + + __ std(Robj_to_lock, BasicObjectLock::obj_offset_in_bytes(), R26_monitor); + __ lock_object(R26_monitor, Robj_to_lock); +} + +// Generate a fixed interpreter frame for pure interpreter +// and I2N native transition frames. +// +// Before (stack grows downwards): +// +// | ... | +// |------------- | +// | java arg0 | +// | ... | +// | java argn | +// | | <- R15_esp +// | | +// |--------------| +// | abi_112 | +// | | <- R1_SP +// |==============| +// +// +// After: +// +// | ... | +// | java arg0 |<- R18_locals +// | ... | +// | java argn | +// |--------------| +// | | +// | java locals | +// | | +// |--------------| +// | abi_48 | +// |==============| +// | | +// | istate | +// | | +// |--------------| +// | monitor |<- R26_monitor +// |--------------| +// | |<- R15_esp +// | expression | +// | stack | +// | | +// |--------------| +// | | +// | abi_112 |<- R1_SP +// |==============| +// +// The top most frame needs an abi space of 112 bytes. This space is needed, +// since we call to c. The c function may spill their arguments to the caller +// frame. When we call to java, we don't need these spill slots. In order to save +// space on the stack, we resize the caller. However, java local reside in +// the caller frame and the frame has to be increased. The frame_size for the +// current frame was calculated based on max_stack as size for the expression +// stack. At the call, just a part of the expression stack might be used. +// We don't want to waste this space and cut the frame back accordingly. +// The resulting amount for resizing is calculated as follows: +// resize = (number_of_locals - number_of_arguments) * slot_size +// + (R1_SP - R15_esp) + 48 +// +// The size for the callee frame is calculated: +// framesize = 112 + max_stack + monitor + state_size +// +// maxstack: Max number of slots on the expression stack, loaded from the method. +// monitor: We statically reserve room for one monitor object. +// state_size: We save the current state of the interpreter to this area. +// +void TemplateInterpreterGenerator::generate_fixed_frame(bool native_call, Register Rsize_of_parameters, Register Rsize_of_locals) { + Register parent_frame_resize = R6_ARG4, // Frame will grow by this number of bytes. + top_frame_size = R7_ARG5, + Rconst_method = R8_ARG6; + + assert_different_registers(Rsize_of_parameters, Rsize_of_locals, parent_frame_resize, top_frame_size); + + __ ld(Rconst_method, method_(const)); + __ lhz(Rsize_of_parameters /* number of params */, + in_bytes(ConstMethod::size_of_parameters_offset()), Rconst_method); + if (native_call) { + // If we're calling a native method, we reserve space for the worst-case signature + // handler varargs vector, which is max(Argument::n_register_parameters, parameter_count+2). + // We add two slots to the parameter_count, one for the jni + // environment and one for a possible native mirror. + Label skip_native_calculate_max_stack; + __ addi(top_frame_size, Rsize_of_parameters, 2); + __ cmpwi(CCR0, top_frame_size, Argument::n_register_parameters); + __ bge(CCR0, skip_native_calculate_max_stack); + __ li(top_frame_size, Argument::n_register_parameters); + __ bind(skip_native_calculate_max_stack); + __ sldi(Rsize_of_parameters, Rsize_of_parameters, Interpreter::logStackElementSize); + __ sldi(top_frame_size, top_frame_size, Interpreter::logStackElementSize); + __ sub(parent_frame_resize, R1_SP, R15_esp); // <0, off by Interpreter::stackElementSize! + assert(Rsize_of_locals == noreg, "Rsize_of_locals not initialized"); // Only relevant value is Rsize_of_parameters. + } else { + __ lhz(Rsize_of_locals /* number of params */, in_bytes(ConstMethod::size_of_locals_offset()), Rconst_method); + __ sldi(Rsize_of_parameters, Rsize_of_parameters, Interpreter::logStackElementSize); + __ sldi(Rsize_of_locals, Rsize_of_locals, Interpreter::logStackElementSize); + __ lhz(top_frame_size, in_bytes(ConstMethod::max_stack_offset()), Rconst_method); + __ sub(R11_scratch1, Rsize_of_locals, Rsize_of_parameters); // >=0 + __ sub(parent_frame_resize, R1_SP, R15_esp); // <0, off by Interpreter::stackElementSize! + __ sldi(top_frame_size, top_frame_size, Interpreter::logStackElementSize); + __ add(parent_frame_resize, parent_frame_resize, R11_scratch1); + } + + // Compute top frame size. + __ addi(top_frame_size, top_frame_size, frame::abi_reg_args_size + frame::ijava_state_size); + + // Cut back area between esp and max_stack. + __ addi(parent_frame_resize, parent_frame_resize, frame::abi_minframe_size - Interpreter::stackElementSize); + + __ round_to(top_frame_size, frame::alignment_in_bytes); + __ round_to(parent_frame_resize, frame::alignment_in_bytes); + // parent_frame_resize = (locals-parameters) - (ESP-SP-ABI48) Rounded to frame alignment size. + // Enlarge by locals-parameters (not in case of native_call), shrink by ESP-SP-ABI48. + + { + // -------------------------------------------------------------------------- + // Stack overflow check + + Label cont; + __ add(R11_scratch1, parent_frame_resize, top_frame_size); + generate_stack_overflow_check(R11_scratch1, R12_scratch2); + } + + // Set up interpreter state registers. + + __ add(R18_locals, R15_esp, Rsize_of_parameters); + __ ld(R27_constPoolCache, in_bytes(ConstMethod::constants_offset()), Rconst_method); + __ ld(R27_constPoolCache, ConstantPool::cache_offset_in_bytes(), R27_constPoolCache); + + // Set method data pointer. + if (ProfileInterpreter) { + Label zero_continue; + __ ld(R28_mdx, method_(method_data)); + __ cmpdi(CCR0, R28_mdx, 0); + __ beq(CCR0, zero_continue); + __ addi(R28_mdx, R28_mdx, in_bytes(MethodData::data_offset())); + __ bind(zero_continue); + } + + if (native_call) { + __ li(R14_bcp, 0); // Must initialize. + } else { + __ add(R14_bcp, in_bytes(ConstMethod::codes_offset()), Rconst_method); + } + + // Resize parent frame. + __ mflr(R12_scratch2); + __ neg(parent_frame_resize, parent_frame_resize); + __ resize_frame(parent_frame_resize, R11_scratch1); + __ std(R12_scratch2, _abi(lr), R1_SP); + + __ addi(R26_monitor, R1_SP, - frame::ijava_state_size); + __ addi(R15_esp, R26_monitor, - Interpreter::stackElementSize); + + // Store values. + // R15_esp, R14_bcp, R26_monitor, R28_mdx are saved at java calls + // in InterpreterMacroAssembler::call_from_interpreter. + __ std(R19_method, _ijava_state_neg(method), R1_SP); + __ std(R21_sender_SP, _ijava_state_neg(sender_sp), R1_SP); + __ std(R27_constPoolCache, _ijava_state_neg(cpoolCache), R1_SP); + __ std(R18_locals, _ijava_state_neg(locals), R1_SP); + + // Note: esp, bcp, monitor, mdx live in registers. Hence, the correct version can only + // be found in the frame after save_interpreter_state is done. This is always true + // for non-top frames. But when a signal occurs, dumping the top frame can go wrong, + // because e.g. frame::interpreter_frame_bcp() will not access the correct value + // (Enhanced Stack Trace). + // The signal handler does not save the interpreter state into the frame. + __ li(R0, 0); +#ifdef ASSERT + // Fill remaining slots with constants. + __ load_const_optimized(R11_scratch1, 0x5afe); + __ load_const_optimized(R12_scratch2, 0xdead); +#endif + // We have to initialize some frame slots for native calls (accessed by GC). + if (native_call) { + __ std(R26_monitor, _ijava_state_neg(monitors), R1_SP); + __ std(R14_bcp, _ijava_state_neg(bcp), R1_SP); + if (ProfileInterpreter) { __ std(R28_mdx, _ijava_state_neg(mdx), R1_SP); } + } +#ifdef ASSERT + else { + __ std(R12_scratch2, _ijava_state_neg(monitors), R1_SP); + __ std(R12_scratch2, _ijava_state_neg(bcp), R1_SP); + __ std(R12_scratch2, _ijava_state_neg(mdx), R1_SP); + } + __ std(R11_scratch1, _ijava_state_neg(ijava_reserved), R1_SP); + __ std(R12_scratch2, _ijava_state_neg(esp), R1_SP); + __ std(R12_scratch2, _ijava_state_neg(lresult), R1_SP); + __ std(R12_scratch2, _ijava_state_neg(fresult), R1_SP); +#endif + __ subf(R12_scratch2, top_frame_size, R1_SP); + __ std(R0, _ijava_state_neg(oop_tmp), R1_SP); + __ std(R12_scratch2, _ijava_state_neg(top_frame_sp), R1_SP); + + // Push top frame. + __ push_frame(top_frame_size, R11_scratch1); +} + +// End of helpers + +// ============================================================================ +// Various method entries +// + +// Empty method, generate a very fast return. We must skip this entry if +// someone's debugging, indicated by the flag +// "interp_mode" in the Thread obj. +// Note: empty methods are generated mostly methods that do assertions, which are +// disabled in the "java opt build". +address TemplateInterpreterGenerator::generate_empty_entry(void) { + if (!UseFastEmptyMethods) { + NOT_PRODUCT(__ should_not_reach_here();) + return Interpreter::entry_for_kind(Interpreter::zerolocals); + } + + Label Lslow_path; + const Register Rjvmti_mode = R11_scratch1; + address entry = __ pc(); + + __ lwz(Rjvmti_mode, thread_(interp_only_mode)); + __ cmpwi(CCR0, Rjvmti_mode, 0); + __ bne(CCR0, Lslow_path); // jvmti_mode!=0 + + // Noone's debuggin: Simply return. + // Pop c2i arguments (if any) off when we return. +#ifdef ASSERT + __ ld(R9_ARG7, 0, R1_SP); + __ ld(R10_ARG8, 0, R21_sender_SP); + __ cmpd(CCR0, R9_ARG7, R10_ARG8); + __ asm_assert_eq("backlink", 0x545); +#endif // ASSERT + __ mr(R1_SP, R21_sender_SP); // Cut the stack back to where the caller started. + + // And we're done. + __ blr(); + + __ bind(Lslow_path); + __ branch_to_entry(Interpreter::entry_for_kind(Interpreter::zerolocals), R11_scratch1); + __ flush(); + + return entry; +} + +// Support abs and sqrt like in compiler. +// For others we can use a normal (native) entry. + +inline bool math_entry_available(AbstractInterpreter::MethodKind kind) { + // Provide math entry with debugging on demand. + // Note: Debugging changes which code will get executed: + // Debugging or disabled InlineIntrinsics: java method will get interpreted and performs a native call. + // Not debugging and enabled InlineIntrinics: processor instruction will get used. + // Result might differ slightly due to rounding etc. + if (!InlineIntrinsics && (!FLAG_IS_ERGO(InlineIntrinsics))) return false; // Generate a vanilla entry. + + return ((kind==Interpreter::java_lang_math_sqrt && VM_Version::has_fsqrt()) || + (kind==Interpreter::java_lang_math_abs)); +} + +address TemplateInterpreterGenerator::generate_math_entry(AbstractInterpreter::MethodKind kind) { + if (!math_entry_available(kind)) { + NOT_PRODUCT(__ should_not_reach_here();) + return Interpreter::entry_for_kind(Interpreter::zerolocals); + } + + Label Lslow_path; + const Register Rjvmti_mode = R11_scratch1; + address entry = __ pc(); + + // Provide math entry with debugging on demand. + __ lwz(Rjvmti_mode, thread_(interp_only_mode)); + __ cmpwi(CCR0, Rjvmti_mode, 0); + __ bne(CCR0, Lslow_path); // jvmti_mode!=0 + + __ lfd(F1_RET, Interpreter::stackElementSize, R15_esp); + + // Pop c2i arguments (if any) off when we return. +#ifdef ASSERT + __ ld(R9_ARG7, 0, R1_SP); + __ ld(R10_ARG8, 0, R21_sender_SP); + __ cmpd(CCR0, R9_ARG7, R10_ARG8); + __ asm_assert_eq("backlink", 0x545); +#endif // ASSERT + __ mr(R1_SP, R21_sender_SP); // Cut the stack back to where the caller started. + + if (kind == Interpreter::java_lang_math_sqrt) { + __ fsqrt(F1_RET, F1_RET); + } else if (kind == Interpreter::java_lang_math_abs) { + __ fabs(F1_RET, F1_RET); + } else { + ShouldNotReachHere(); + } + + // And we're done. + __ blr(); + + // Provide slow path for JVMTI case. + __ bind(Lslow_path); + __ branch_to_entry(Interpreter::entry_for_kind(Interpreter::zerolocals), R12_scratch2); + __ flush(); + + return entry; +} + +// Interpreter stub for calling a native method. (asm interpreter) +// This sets up a somewhat different looking stack for calling the +// native method than the typical interpreter frame setup. +// +// On entry: +// R19_method - method +// R16_thread - JavaThread* +// R15_esp - intptr_t* sender tos +// +// abstract stack (grows up) +// [ IJava (caller of JNI callee) ] <-- ASP +// ... +address TemplateInterpreterGenerator::generate_native_entry(bool synchronized) { + + address entry = __ pc(); + + const bool inc_counter = UseCompiler || CountCompiledCalls; + + // ----------------------------------------------------------------------------- + // Allocate a new frame that represents the native callee (i2n frame). + // This is not a full-blown interpreter frame, but in particular, the + // following registers are valid after this: + // - R19_method + // - R18_local (points to start of argumuments to native function) + // + // abstract stack (grows up) + // [ IJava (caller of JNI callee) ] <-- ASP + // ... + + const Register signature_handler_fd = R11_scratch1; + const Register pending_exception = R0; + const Register result_handler_addr = R31; + const Register native_method_fd = R11_scratch1; + const Register access_flags = R22_tmp2; + const Register active_handles = R11_scratch1; // R26_monitor saved to state. + const Register sync_state = R12_scratch2; + const Register sync_state_addr = sync_state; // Address is dead after use. + const Register suspend_flags = R11_scratch1; + + //============================================================================= + // Allocate new frame and initialize interpreter state. + + Label exception_return; + Label exception_return_sync_check; + Label stack_overflow_return; + + // Generate new interpreter state and jump to stack_overflow_return in case of + // a stack overflow. + //generate_compute_interpreter_state(stack_overflow_return); + + Register size_of_parameters = R22_tmp2; + + generate_fixed_frame(true, size_of_parameters, noreg /* unused */); + + //============================================================================= + // Increment invocation counter. On overflow, entry to JNI method + // will be compiled. + Label invocation_counter_overflow, continue_after_compile; + if (inc_counter) { + if (synchronized) { + // Since at this point in the method invocation the exception handler + // would try to exit the monitor of synchronized methods which hasn't + // been entered yet, we set the thread local variable + // _do_not_unlock_if_synchronized to true. If any exception was thrown by + // runtime, exception handling i.e. unlock_if_synchronized_method will + // check this thread local flag. + // This flag has two effects, one is to force an unwind in the topmost + // interpreter frame and not perform an unlock while doing so. + __ li(R0, 1); + __ stb(R0, in_bytes(JavaThread::do_not_unlock_if_synchronized_offset()), R16_thread); + } + generate_counter_incr(&invocation_counter_overflow, NULL, NULL); + + __ BIND(continue_after_compile); + // Reset the _do_not_unlock_if_synchronized flag. + if (synchronized) { + __ li(R0, 0); + __ stb(R0, in_bytes(JavaThread::do_not_unlock_if_synchronized_offset()), R16_thread); + } + } + + // access_flags = method->access_flags(); + // Load access flags. + assert(access_flags->is_nonvolatile(), + "access_flags must be in a non-volatile register"); + // Type check. + assert(4 == sizeof(AccessFlags), "unexpected field size"); + __ lwz(access_flags, method_(access_flags)); + + // We don't want to reload R19_method and access_flags after calls + // to some helper functions. + assert(R19_method->is_nonvolatile(), + "R19_method must be a non-volatile register"); + + // Check for synchronized methods. Must happen AFTER invocation counter + // check, so method is not locked if counter overflows. + + if (synchronized) { + lock_method(access_flags, R11_scratch1, R12_scratch2, true); + + // Update monitor in state. + __ ld(R11_scratch1, 0, R1_SP); + __ std(R26_monitor, _ijava_state_neg(monitors), R11_scratch1); + } + + // jvmti/jvmpi support + __ notify_method_entry(); + + //============================================================================= + // Get and call the signature handler. + + __ ld(signature_handler_fd, method_(signature_handler)); + Label call_signature_handler; + + __ cmpdi(CCR0, signature_handler_fd, 0); + __ bne(CCR0, call_signature_handler); + + // Method has never been called. Either generate a specialized + // handler or point to the slow one. + // + // Pass parameter 'false' to avoid exception check in call_VM. + __ call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::prepare_native_call), R19_method, false); + + // Check for an exception while looking up the target method. If we + // incurred one, bail. + __ ld(pending_exception, thread_(pending_exception)); + __ cmpdi(CCR0, pending_exception, 0); + __ bne(CCR0, exception_return_sync_check); // Has pending exception. + + // Reload signature handler, it may have been created/assigned in the meanwhile. + __ ld(signature_handler_fd, method_(signature_handler)); + __ twi_0(signature_handler_fd); // Order wrt. load of klass mirror and entry point (isync is below). + + __ BIND(call_signature_handler); + + // Before we call the signature handler we push a new frame to + // protect the interpreter frame volatile registers when we return + // from jni but before we can get back to Java. + + // First set the frame anchor while the SP/FP registers are + // convenient and the slow signature handler can use this same frame + // anchor. + + // We have a TOP_IJAVA_FRAME here, which belongs to us. + __ set_top_ijava_frame_at_SP_as_last_Java_frame(R1_SP, R12_scratch2/*tmp*/); + + // Now the interpreter frame (and its call chain) have been + // invalidated and flushed. We are now protected against eager + // being enabled in native code. Even if it goes eager the + // registers will be reloaded as clean and we will invalidate after + // the call so no spurious flush should be possible. + + // Call signature handler and pass locals address. + // + // Our signature handlers copy required arguments to the C stack + // (outgoing C args), R3_ARG1 to R10_ARG8, and FARG1 to FARG13. + __ mr(R3_ARG1, R18_locals); + __ ld(signature_handler_fd, 0, signature_handler_fd); + + __ call_stub(signature_handler_fd); + + // Remove the register parameter varargs slots we allocated in + // compute_interpreter_state. SP+16 ends up pointing to the ABI + // outgoing argument area. + // + // Not needed on PPC64. + //__ add(SP, SP, Argument::n_register_parameters*BytesPerWord); + + assert(result_handler_addr->is_nonvolatile(), "result_handler_addr must be in a non-volatile register"); + // Save across call to native method. + __ mr(result_handler_addr, R3_RET); + + __ isync(); // Acquire signature handler before trying to fetch the native entry point and klass mirror. + + // Set up fixed parameters and call the native method. + // If the method is static, get mirror into R4_ARG2. + { + Label method_is_not_static; + // Access_flags is non-volatile and still, no need to restore it. + + // Restore access flags. + __ testbitdi(CCR0, R0, access_flags, JVM_ACC_STATIC_BIT); + __ bfalse(CCR0, method_is_not_static); + + // constants = method->constants(); + __ ld(R11_scratch1, in_bytes(Method::const_offset()), R19_method); + __ ld(R11_scratch1, in_bytes(ConstMethod::constants_offset()), R11_scratch1); + // pool_holder = method->constants()->pool_holder(); + __ ld(R11_scratch1/*pool_holder*/, ConstantPool::pool_holder_offset_in_bytes(), + R11_scratch1/*constants*/); + + const int mirror_offset = in_bytes(Klass::java_mirror_offset()); + + // mirror = pool_holder->klass_part()->java_mirror(); + __ ld(R0/*mirror*/, mirror_offset, R11_scratch1/*pool_holder*/); + // state->_native_mirror = mirror; + + __ ld(R11_scratch1, 0, R1_SP); + __ std(R0/*mirror*/, _ijava_state_neg(oop_tmp), R11_scratch1); + // R4_ARG2 = &state->_oop_temp; + __ addi(R4_ARG2, R11_scratch1, _ijava_state_neg(oop_tmp)); + __ BIND(method_is_not_static); + } + + // At this point, arguments have been copied off the stack into + // their JNI positions. Oops are boxed in-place on the stack, with + // handles copied to arguments. The result handler address is in a + // register. + + // Pass JNIEnv address as first parameter. + __ addir(R3_ARG1, thread_(jni_environment)); + + // Load the native_method entry before we change the thread state. + __ ld(native_method_fd, method_(native_function)); + + //============================================================================= + // Transition from _thread_in_Java to _thread_in_native. As soon as + // we make this change the safepoint code needs to be certain that + // the last Java frame we established is good. The pc in that frame + // just needs to be near here not an actual return address. + + // We use release_store_fence to update values like the thread state, where + // we don't want the current thread to continue until all our prior memory + // accesses (including the new thread state) are visible to other threads. + __ li(R0, _thread_in_native); + __ release(); + + // TODO PPC port assert(4 == JavaThread::sz_thread_state(), "unexpected field size"); + __ stw(R0, thread_(thread_state)); + + if (UseMembar) { + __ fence(); + } + + //============================================================================= + // Call the native method. Argument registers must not have been + // overwritten since "__ call_stub(signature_handler);" (except for + // ARG1 and ARG2 for static methods). + __ call_c(native_method_fd); + + __ li(R0, 0); + __ ld(R11_scratch1, 0, R1_SP); + __ std(R3_RET, _ijava_state_neg(lresult), R11_scratch1); + __ stfd(F1_RET, _ijava_state_neg(fresult), R11_scratch1); + __ std(R0/*mirror*/, _ijava_state_neg(oop_tmp), R11_scratch1); // reset + + // Note: C++ interpreter needs the following here: + // The frame_manager_lr field, which we use for setting the last + // java frame, gets overwritten by the signature handler. Restore + // it now. + //__ get_PC_trash_LR(R11_scratch1); + //__ std(R11_scratch1, _top_ijava_frame_abi(frame_manager_lr), R1_SP); + + // Because of GC R19_method may no longer be valid. + + // Block, if necessary, before resuming in _thread_in_Java state. + // In order for GC to work, don't clear the last_Java_sp until after + // blocking. + + //============================================================================= + // Switch thread to "native transition" state before reading the + // synchronization state. This additional state is necessary + // because reading and testing the synchronization state is not + // atomic w.r.t. GC, as this scenario demonstrates: Java thread A, + // in _thread_in_native state, loads _not_synchronized and is + // preempted. VM thread changes sync state to synchronizing and + // suspends threads for GC. Thread A is resumed to finish this + // native method, but doesn't block here since it didn't see any + // synchronization in progress, and escapes. + + // We use release_store_fence to update values like the thread state, where + // we don't want the current thread to continue until all our prior memory + // accesses (including the new thread state) are visible to other threads. + __ li(R0/*thread_state*/, _thread_in_native_trans); + __ release(); + __ stw(R0/*thread_state*/, thread_(thread_state)); + if (UseMembar) { + __ fence(); + } + // Write serialization page so that the VM thread can do a pseudo remote + // membar. We use the current thread pointer to calculate a thread + // specific offset to write to within the page. This minimizes bus + // traffic due to cache line collision. + else { + __ serialize_memory(R16_thread, R11_scratch1, R12_scratch2); + } + + // Now before we return to java we must look for a current safepoint + // (a new safepoint can not start since we entered native_trans). + // We must check here because a current safepoint could be modifying + // the callers registers right this moment. + + // Acquire isn't strictly necessary here because of the fence, but + // sync_state is declared to be volatile, so we do it anyway + // (cmp-br-isync on one path, release (same as acquire on PPC64) on the other path). + int sync_state_offs = __ load_const_optimized(sync_state_addr, SafepointSynchronize::address_of_state(), /*temp*/R0, true); + + // TODO PPC port assert(4 == SafepointSynchronize::sz_state(), "unexpected field size"); + __ lwz(sync_state, sync_state_offs, sync_state_addr); + + // TODO PPC port assert(4 == Thread::sz_suspend_flags(), "unexpected field size"); + __ lwz(suspend_flags, thread_(suspend_flags)); + + Label sync_check_done; + Label do_safepoint; + // No synchronization in progress nor yet synchronized. + __ cmpwi(CCR0, sync_state, SafepointSynchronize::_not_synchronized); + // Not suspended. + __ cmpwi(CCR1, suspend_flags, 0); + + __ bne(CCR0, do_safepoint); + __ beq(CCR1, sync_check_done); + __ bind(do_safepoint); + __ isync(); + // Block. We do the call directly and leave the current + // last_Java_frame setup undisturbed. We must save any possible + // native result across the call. No oop is present. + + __ mr(R3_ARG1, R16_thread); + __ call_c(CAST_FROM_FN_PTR(FunctionDescriptor*, JavaThread::check_special_condition_for_native_trans), + relocInfo::none); + + __ bind(sync_check_done); + + //============================================================================= + // <<<<<< Back in Interpreter Frame >>>>> + + // We are in thread_in_native_trans here and back in the normal + // interpreter frame. We don't have to do anything special about + // safepoints and we can switch to Java mode anytime we are ready. + + // Note: frame::interpreter_frame_result has a dependency on how the + // method result is saved across the call to post_method_exit. For + // native methods it assumes that the non-FPU/non-void result is + // saved in _native_lresult and a FPU result in _native_fresult. If + // this changes then the interpreter_frame_result implementation + // will need to be updated too. + + // On PPC64, we have stored the result directly after the native call. + + //============================================================================= + // Back in Java + + // We use release_store_fence to update values like the thread state, where + // we don't want the current thread to continue until all our prior memory + // accesses (including the new thread state) are visible to other threads. + __ li(R0/*thread_state*/, _thread_in_Java); + __ release(); + __ stw(R0/*thread_state*/, thread_(thread_state)); + if (UseMembar) { + __ fence(); + } + + __ reset_last_Java_frame(); + + // Jvmdi/jvmpi support. Whether we've got an exception pending or + // not, and whether unlocking throws an exception or not, we notify + // on native method exit. If we do have an exception, we'll end up + // in the caller's context to handle it, so if we don't do the + // notify here, we'll drop it on the floor. + __ notify_method_exit(true/*native method*/, + ilgl /*illegal state (not used for native methods)*/, + InterpreterMacroAssembler::NotifyJVMTI, + false /*check_exceptions*/); + + //============================================================================= + // Handle exceptions + + if (synchronized) { + // Don't check for exceptions since we're still in the i2n frame. Do that + // manually afterwards. + unlock_method(false); + } + + // Reset active handles after returning from native. + // thread->active_handles()->clear(); + __ ld(active_handles, thread_(active_handles)); + // TODO PPC port assert(4 == JNIHandleBlock::top_size_in_bytes(), "unexpected field size"); + __ li(R0, 0); + __ stw(R0, JNIHandleBlock::top_offset_in_bytes(), active_handles); + + Label exception_return_sync_check_already_unlocked; + __ ld(R0/*pending_exception*/, thread_(pending_exception)); + __ cmpdi(CCR0, R0/*pending_exception*/, 0); + __ bne(CCR0, exception_return_sync_check_already_unlocked); + + //----------------------------------------------------------------------------- + // No exception pending. + + // Move native method result back into proper registers and return. + // Invoke result handler (may unbox/promote). + __ ld(R11_scratch1, 0, R1_SP); + __ ld(R3_RET, _ijava_state_neg(lresult), R11_scratch1); + __ lfd(F1_RET, _ijava_state_neg(fresult), R11_scratch1); + __ call_stub(result_handler_addr); + + __ merge_frames(/*top_frame_sp*/ R21_sender_SP, /*return_pc*/ R0, R11_scratch1, R12_scratch2); + + // Must use the return pc which was loaded from the caller's frame + // as the VM uses return-pc-patching for deoptimization. + __ mtlr(R0); + __ blr(); + + //----------------------------------------------------------------------------- + // An exception is pending. We call into the runtime only if the + // caller was not interpreted. If it was interpreted the + // interpreter will do the correct thing. If it isn't interpreted + // (call stub/compiled code) we will change our return and continue. + + __ BIND(exception_return_sync_check); + + if (synchronized) { + // Don't check for exceptions since we're still in the i2n frame. Do that + // manually afterwards. + unlock_method(false); + } + __ BIND(exception_return_sync_check_already_unlocked); + + const Register return_pc = R31; + + __ ld(return_pc, 0, R1_SP); + __ ld(return_pc, _abi(lr), return_pc); + + // Get the address of the exception handler. + __ call_VM_leaf(CAST_FROM_FN_PTR(address, SharedRuntime::exception_handler_for_return_address), + R16_thread, + return_pc /* return pc */); + __ merge_frames(/*top_frame_sp*/ R21_sender_SP, noreg, R11_scratch1, R12_scratch2); + + // Load the PC of the the exception handler into LR. + __ mtlr(R3_RET); + + // Load exception into R3_ARG1 and clear pending exception in thread. + __ ld(R3_ARG1/*exception*/, thread_(pending_exception)); + __ li(R4_ARG2, 0); + __ std(R4_ARG2, thread_(pending_exception)); + + // Load the original return pc into R4_ARG2. + __ mr(R4_ARG2/*issuing_pc*/, return_pc); + + // Return to exception handler. + __ blr(); + + //============================================================================= + // Counter overflow. + + if (inc_counter) { + // Handle invocation counter overflow. + __ bind(invocation_counter_overflow); + + generate_counter_overflow(continue_after_compile); + } + + return entry; +} + +// Generic interpreted method entry to (asm) interpreter. +// +address TemplateInterpreterGenerator::generate_normal_entry(bool synchronized) { + bool inc_counter = UseCompiler || CountCompiledCalls; + address entry = __ pc(); + // Generate the code to allocate the interpreter stack frame. + Register Rsize_of_parameters = R4_ARG2, // Written by generate_fixed_frame. + Rsize_of_locals = R5_ARG3; // Written by generate_fixed_frame. + + generate_fixed_frame(false, Rsize_of_parameters, Rsize_of_locals); + +#ifdef FAST_DISPATCH + __ unimplemented("Fast dispatch in generate_normal_entry"); +#if 0 + __ set((intptr_t)Interpreter::dispatch_table(), IdispatchTables); + // Set bytecode dispatch table base. +#endif +#endif + + // -------------------------------------------------------------------------- + // Zero out non-parameter locals. + // Note: *Always* zero out non-parameter locals as Sparc does. It's not + // worth to ask the flag, just do it. + Register Rslot_addr = R6_ARG4, + Rnum = R7_ARG5; + Label Lno_locals, Lzero_loop; + + // Set up the zeroing loop. + __ subf(Rnum, Rsize_of_parameters, Rsize_of_locals); + __ subf(Rslot_addr, Rsize_of_parameters, R18_locals); + __ srdi_(Rnum, Rnum, Interpreter::logStackElementSize); + __ beq(CCR0, Lno_locals); + __ li(R0, 0); + __ mtctr(Rnum); + + // The zero locals loop. + __ bind(Lzero_loop); + __ std(R0, 0, Rslot_addr); + __ addi(Rslot_addr, Rslot_addr, -Interpreter::stackElementSize); + __ bdnz(Lzero_loop); + + __ bind(Lno_locals); + + // -------------------------------------------------------------------------- + // Counter increment and overflow check. + Label invocation_counter_overflow, + profile_method, + profile_method_continue; + if (inc_counter || ProfileInterpreter) { + + Register Rdo_not_unlock_if_synchronized_addr = R11_scratch1; + if (synchronized) { + // Since at this point in the method invocation the exception handler + // would try to exit the monitor of synchronized methods which hasn't + // been entered yet, we set the thread local variable + // _do_not_unlock_if_synchronized to true. If any exception was thrown by + // runtime, exception handling i.e. unlock_if_synchronized_method will + // check this thread local flag. + // This flag has two effects, one is to force an unwind in the topmost + // interpreter frame and not perform an unlock while doing so. + __ li(R0, 1); + __ stb(R0, in_bytes(JavaThread::do_not_unlock_if_synchronized_offset()), R16_thread); + } + // Increment invocation counter and check for overflow. + if (inc_counter) { + generate_counter_incr(&invocation_counter_overflow, &profile_method, &profile_method_continue); + } + + __ bind(profile_method_continue); + + // Reset the _do_not_unlock_if_synchronized flag. + if (synchronized) { + __ li(R0, 0); + __ stb(R0, in_bytes(JavaThread::do_not_unlock_if_synchronized_offset()), R16_thread); + } + } + + // -------------------------------------------------------------------------- + // Locking of synchronized methods. Must happen AFTER invocation_counter + // check and stack overflow check, so method is not locked if overflows. + if (synchronized) { + lock_method(R3_ARG1, R4_ARG2, R5_ARG3); + } +#ifdef ASSERT + else { + Label Lok; + __ lwz(R0, in_bytes(Method::access_flags_offset()), R19_method); + __ andi_(R0, R0, JVM_ACC_SYNCHRONIZED); + __ asm_assert_eq("method needs synchronization", 0x8521); + __ bind(Lok); + } +#endif // ASSERT + + __ verify_thread(); + + // -------------------------------------------------------------------------- + // JVMTI support + __ notify_method_entry(); + + // -------------------------------------------------------------------------- + // Start executing instructions. + __ dispatch_next(vtos); + + // -------------------------------------------------------------------------- + // Out of line counter overflow and MDO creation code. + if (ProfileInterpreter) { + // We have decided to profile this method in the interpreter. + __ bind(profile_method); + __ call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::profile_method)); + __ set_method_data_pointer_for_bcp(); + __ b(profile_method_continue); + } + + if (inc_counter) { + // Handle invocation counter overflow. + __ bind(invocation_counter_overflow); + generate_counter_overflow(profile_method_continue); + } + return entry; +} + +// ============================================================================= +// Entry points + +address AbstractInterpreterGenerator::generate_method_entry( + AbstractInterpreter::MethodKind kind) { + // Determine code generation flags. + bool synchronized = false; + address entry_point = NULL; + + switch (kind) { + case Interpreter::zerolocals : break; + case Interpreter::zerolocals_synchronized: synchronized = true; break; + case Interpreter::native : entry_point = ((InterpreterGenerator*) this)->generate_native_entry(false); break; + case Interpreter::native_synchronized : entry_point = ((InterpreterGenerator*) this)->generate_native_entry(true); break; + case Interpreter::empty : entry_point = ((InterpreterGenerator*) this)->generate_empty_entry(); break; + case Interpreter::accessor : entry_point = ((InterpreterGenerator*) this)->generate_accessor_entry(); break; + case Interpreter::abstract : entry_point = ((InterpreterGenerator*) this)->generate_abstract_entry(); break; + + case Interpreter::java_lang_math_sin : // fall thru + case Interpreter::java_lang_math_cos : // fall thru + case Interpreter::java_lang_math_tan : // fall thru + case Interpreter::java_lang_math_abs : // fall thru + case Interpreter::java_lang_math_log : // fall thru + case Interpreter::java_lang_math_log10 : // fall thru + case Interpreter::java_lang_math_sqrt : // fall thru + case Interpreter::java_lang_math_pow : // fall thru + case Interpreter::java_lang_math_exp : entry_point = ((InterpreterGenerator*) this)->generate_math_entry(kind); break; + case Interpreter::java_lang_ref_reference_get + : entry_point = ((InterpreterGenerator*)this)->generate_Reference_get_entry(); break; + default : ShouldNotReachHere(); break; + } + + if (entry_point) { + return entry_point; + } + + return ((InterpreterGenerator*) this)->generate_normal_entry(synchronized); +} + +// These should never be compiled since the interpreter will prefer +// the compiled version to the intrinsic version. +bool AbstractInterpreter::can_be_compiled(methodHandle m) { + return !math_entry_available(method_kind(m)); +} + +// How much stack a method activation needs in stack slots. +// We must calc this exactly like in generate_fixed_frame. +// Note: This returns the conservative size assuming maximum alignment. +int AbstractInterpreter::size_top_interpreter_activation(Method* method) { + const int max_alignment_size = 2; + const int abi_scratch = frame::abi_reg_args_size; + return method->max_locals() + method->max_stack() + frame::interpreter_frame_monitor_size() + max_alignment_size + abi_scratch; +} + +// Fills a sceletal interpreter frame generated during deoptimizations +// and returns the frame size in slots. +// +// Parameters: +// +// interpreter_frame == NULL: +// Only calculate the size of an interpreter activation, no actual layout. +// Note: This calculation must exactly parallel the frame setup +// in TemplateInterpreter::generate_normal_entry. But it does not +// account for the SP alignment, that might further enhance the +// frame size, depending on FP. +// +// interpreter_frame != NULL: +// set up the method, locals, and monitors. +// The frame interpreter_frame, if not NULL, is guaranteed to be the +// right size, as determined by a previous call to this method. +// It is also guaranteed to be walkable even though it is in a skeletal state +// +// is_top_frame == true: +// We're processing the *oldest* interpreter frame! +// +// pop_frame_extra_args: +// If this is != 0 we are returning to a deoptimized frame by popping +// off the callee frame. We want to re-execute the call that called the +// callee interpreted, but since the return to the interpreter would pop +// the arguments off advance the esp by dummy popframe_extra_args slots. +// Popping off those will establish the stack layout as it was before the call. +// +int AbstractInterpreter::layout_activation(Method* method, + int tempcount, + int popframe_extra_args, + int moncount, + int caller_actual_parameters, + int callee_param_count, + int callee_locals, + frame* caller, + frame* interpreter_frame, + bool is_top_frame, + bool is_bottom_frame) { + + const int max_alignment_space = 2; + const int abi_scratch = is_top_frame ? (frame::abi_reg_args_size / Interpreter::stackElementSize) : + (frame::abi_minframe_size / Interpreter::stackElementSize) ; + const int conservative_framesize_in_slots = + method->max_stack() + callee_locals - callee_param_count + + (moncount * frame::interpreter_frame_monitor_size()) + max_alignment_space + + abi_scratch + frame::ijava_state_size / Interpreter::stackElementSize; + + assert(!is_top_frame || conservative_framesize_in_slots * 8 > frame::abi_reg_args_size + frame::ijava_state_size, "frame too small"); + + if (interpreter_frame == NULL) { + // Since we don't know the exact alignment, we return the conservative size. + return (conservative_framesize_in_slots & -2); + } else { + // Now we know our caller, calc the exact frame layout and size. + intptr_t* locals_base = (caller->is_interpreted_frame()) ? + caller->interpreter_frame_esp() + caller_actual_parameters : + caller->sp() + method->max_locals() - 1 + (frame::abi_minframe_size / Interpreter::stackElementSize) ; + + intptr_t* monitor_base = caller->sp() - frame::ijava_state_size / Interpreter::stackElementSize ; + intptr_t* monitor = monitor_base - (moncount * frame::interpreter_frame_monitor_size()); + intptr_t* esp_base = monitor - 1; + intptr_t* esp = esp_base - tempcount - popframe_extra_args; + intptr_t* sp = (intptr_t *) (((intptr_t) (esp_base- callee_locals + callee_param_count - method->max_stack()- abi_scratch)) & -StackAlignmentInBytes); + intptr_t* sender_sp = caller->sp() + (frame::abi_minframe_size - frame::abi_reg_args_size) / Interpreter::stackElementSize; + intptr_t* top_frame_sp = is_top_frame ? sp : sp + (frame::abi_minframe_size - frame::abi_reg_args_size) / Interpreter::stackElementSize; + + interpreter_frame->interpreter_frame_set_method(method); + interpreter_frame->interpreter_frame_set_locals(locals_base); + interpreter_frame->interpreter_frame_set_cpcache(method->constants()->cache()); + interpreter_frame->interpreter_frame_set_esp(esp); + interpreter_frame->interpreter_frame_set_monitor_end((BasicObjectLock *)monitor); + interpreter_frame->interpreter_frame_set_top_frame_sp(top_frame_sp); + if (!is_bottom_frame) { + interpreter_frame->interpreter_frame_set_sender_sp(sender_sp); + } + + int framesize_in_slots = caller->sp() - sp; + assert(!is_top_frame ||framesize_in_slots >= (frame::abi_reg_args_size / Interpreter::stackElementSize) + frame::ijava_state_size / Interpreter::stackElementSize, "frame too small"); + assert(framesize_in_slots <= conservative_framesize_in_slots, "exact frame size must be smaller than the convervative size!"); + return framesize_in_slots; + } +} + +// ============================================================================= +// Exceptions + +void TemplateInterpreterGenerator::generate_throw_exception() { + Register Rexception = R17_tos, + Rcontinuation = R3_RET; + + // -------------------------------------------------------------------------- + // Entry point if an method returns with a pending exception (rethrow). + Interpreter::_rethrow_exception_entry = __ pc(); + { + __ restore_interpreter_state(R11_scratch1); // Sets R11_scratch1 = fp. + __ ld(R12_scratch2, _ijava_state_neg(top_frame_sp), R11_scratch1); + __ resize_frame_absolute(R12_scratch2, R11_scratch1, R0); + + // Compiled code destroys templateTableBase, reload. + __ load_const_optimized(R25_templateTableBase, (address)Interpreter::dispatch_table((TosState)0), R11_scratch1); + } + + // Entry point if a interpreted method throws an exception (throw). + Interpreter::_throw_exception_entry = __ pc(); + { + __ mr(Rexception, R3_RET); + + __ verify_thread(); + __ verify_oop(Rexception); + + // Expression stack must be empty before entering the VM in case of an exception. + __ empty_expression_stack(); + // Find exception handler address and preserve exception oop. + // Call C routine to find handler and jump to it. + __ call_VM(Rexception, CAST_FROM_FN_PTR(address, InterpreterRuntime::exception_handler_for_exception), Rexception); + __ mtctr(Rcontinuation); + // Push exception for exception handler bytecodes. + __ push_ptr(Rexception); + + // Jump to exception handler (may be remove activation entry!). + __ bctr(); + } + + // If the exception is not handled in the current frame the frame is + // removed and the exception is rethrown (i.e. exception + // continuation is _rethrow_exception). + // + // Note: At this point the bci is still the bxi for the instruction + // which caused the exception and the expression stack is + // empty. Thus, for any VM calls at this point, GC will find a legal + // oop map (with empty expression stack). + + // In current activation + // tos: exception + // bcp: exception bcp + + // -------------------------------------------------------------------------- + // JVMTI PopFrame support + + Interpreter::_remove_activation_preserving_args_entry = __ pc(); + { + // Set the popframe_processing bit in popframe_condition indicating that we are + // currently handling popframe, so that call_VMs that may happen later do not + // trigger new popframe handling cycles. + __ lwz(R11_scratch1, in_bytes(JavaThread::popframe_condition_offset()), R16_thread); + __ ori(R11_scratch1, R11_scratch1, JavaThread::popframe_processing_bit); + __ stw(R11_scratch1, in_bytes(JavaThread::popframe_condition_offset()), R16_thread); + + // Empty the expression stack, as in normal exception handling. + __ empty_expression_stack(); + __ unlock_if_synchronized_method(vtos, /* throw_monitor_exception */ false, /* install_monitor_exception */ false); + + // Check to see whether we are returning to a deoptimized frame. + // (The PopFrame call ensures that the caller of the popped frame is + // either interpreted or compiled and deoptimizes it if compiled.) + // Note that we don't compare the return PC against the + // deoptimization blob's unpack entry because of the presence of + // adapter frames in C2. + Label Lcaller_not_deoptimized; + Register return_pc = R3_ARG1; + __ ld(return_pc, 0, R1_SP); + __ ld(return_pc, _abi(lr), return_pc); + __ call_VM_leaf(CAST_FROM_FN_PTR(address, InterpreterRuntime::interpreter_contains), return_pc); + __ cmpdi(CCR0, R3_RET, 0); + __ bne(CCR0, Lcaller_not_deoptimized); + + // The deoptimized case. + // In this case, we can't call dispatch_next() after the frame is + // popped, but instead must save the incoming arguments and restore + // them after deoptimization has occurred. + __ ld(R4_ARG2, in_bytes(Method::const_offset()), R19_method); + __ lhz(R4_ARG2 /* number of params */, in_bytes(ConstMethod::size_of_parameters_offset()), R4_ARG2); + __ slwi(R4_ARG2, R4_ARG2, Interpreter::logStackElementSize); + __ addi(R5_ARG3, R18_locals, Interpreter::stackElementSize); + __ subf(R5_ARG3, R4_ARG2, R5_ARG3); + // Save these arguments. + __ call_VM_leaf(CAST_FROM_FN_PTR(address, Deoptimization::popframe_preserve_args), R16_thread, R4_ARG2, R5_ARG3); + + // Inform deoptimization that it is responsible for restoring these arguments. + __ load_const_optimized(R11_scratch1, JavaThread::popframe_force_deopt_reexecution_bit); + __ stw(R11_scratch1, in_bytes(JavaThread::popframe_condition_offset()), R16_thread); + + // Return from the current method into the deoptimization blob. Will eventually + // end up in the deopt interpeter entry, deoptimization prepared everything that + // we will reexecute the call that called us. + __ merge_frames(/*top_frame_sp*/ R21_sender_SP, /*reload return_pc*/ return_pc, R11_scratch1, R12_scratch2); + __ mtlr(return_pc); + __ blr(); + + // The non-deoptimized case. + __ bind(Lcaller_not_deoptimized); + + // Clear the popframe condition flag. + __ li(R0, 0); + __ stw(R0, in_bytes(JavaThread::popframe_condition_offset()), R16_thread); + + // Get out of the current method and re-execute the call that called us. + __ merge_frames(/*top_frame_sp*/ R21_sender_SP, /*return_pc*/ return_pc, R11_scratch1, R12_scratch2); + __ restore_interpreter_state(R11_scratch1); + __ ld(R12_scratch2, _ijava_state_neg(top_frame_sp), R11_scratch1); + __ resize_frame_absolute(R12_scratch2, R11_scratch1, R0); + __ mtlr(return_pc); + if (ProfileInterpreter) { + __ set_method_data_pointer_for_bcp(); + } + __ dispatch_next(vtos); + } + // end of JVMTI PopFrame support + + // -------------------------------------------------------------------------- + // Remove activation exception entry. + // This is jumped to if an interpreted method can't handle an exception itself + // (we come from the throw/rethrow exception entry above). We're going to call + // into the VM to find the exception handler in the caller, pop the current + // frame and return the handler we calculated. + Interpreter::_remove_activation_entry = __ pc(); + { + __ pop_ptr(Rexception); + __ verify_thread(); + __ verify_oop(Rexception); + __ std(Rexception, in_bytes(JavaThread::vm_result_offset()), R16_thread); + + __ unlock_if_synchronized_method(vtos, /* throw_monitor_exception */ false, true); + __ notify_method_exit(false, vtos, InterpreterMacroAssembler::SkipNotifyJVMTI, false); + + __ get_vm_result(Rexception); + + // We are done with this activation frame; find out where to go next. + // The continuation point will be an exception handler, which expects + // the following registers set up: + // + // RET: exception oop + // ARG2: Issuing PC (see generate_exception_blob()), only used if the caller is compiled. + + Register return_pc = R31; // Needs to survive the runtime call. + __ ld(return_pc, 0, R1_SP); + __ ld(return_pc, _abi(lr), return_pc); + __ call_VM_leaf(CAST_FROM_FN_PTR(address, SharedRuntime::exception_handler_for_return_address), R16_thread, return_pc); + + // Remove the current activation. + __ merge_frames(/*top_frame_sp*/ R21_sender_SP, /*return_pc*/ noreg, R11_scratch1, R12_scratch2); + + __ mr(R4_ARG2, return_pc); + __ mtlr(R3_RET); + __ mr(R3_RET, Rexception); + __ blr(); + } +} + +// JVMTI ForceEarlyReturn support. +// Returns "in the middle" of a method with a "fake" return value. +address TemplateInterpreterGenerator::generate_earlyret_entry_for(TosState state) { + + Register Rscratch1 = R11_scratch1, + Rscratch2 = R12_scratch2; + + address entry = __ pc(); + __ empty_expression_stack(); + + __ load_earlyret_value(state, Rscratch1); + + __ ld(Rscratch1, in_bytes(JavaThread::jvmti_thread_state_offset()), R16_thread); + // Clear the earlyret state. + __ li(R0, 0); + __ stw(R0, in_bytes(JvmtiThreadState::earlyret_state_offset()), Rscratch1); + + __ remove_activation(state, false, false); + // Copied from TemplateTable::_return. + // Restoration of lr done by remove_activation. + switch (state) { + case ltos: + case btos: + case ctos: + case stos: + case atos: + case itos: __ mr(R3_RET, R17_tos); break; + case ftos: + case dtos: __ fmr(F1_RET, F15_ftos); break; + case vtos: // This might be a constructor. Final fields (and volatile fields on PPC64) need + // to get visible before the reference to the object gets stored anywhere. + __ membar(Assembler::StoreStore); break; + default : ShouldNotReachHere(); + } + __ blr(); + + return entry; +} // end of ForceEarlyReturn support + +//----------------------------------------------------------------------------- +// Helper for vtos entry point generation + +void TemplateInterpreterGenerator::set_vtos_entry_points(Template* t, + address& bep, + address& cep, + address& sep, + address& aep, + address& iep, + address& lep, + address& fep, + address& dep, + address& vep) { + assert(t->is_valid() && t->tos_in() == vtos, "illegal template"); + Label L; + + aep = __ pc(); __ push_ptr(); __ b(L); + fep = __ pc(); __ push_f(); __ b(L); + dep = __ pc(); __ push_d(); __ b(L); + lep = __ pc(); __ push_l(); __ b(L); + __ align(32, 12, 24); // align L + bep = cep = sep = + iep = __ pc(); __ push_i(); + vep = __ pc(); + __ bind(L); + generate_and_dispatch(t); +} + +//----------------------------------------------------------------------------- +// Generation of individual instructions + +// helpers for generate_and_dispatch + +InterpreterGenerator::InterpreterGenerator(StubQueue* code) + : TemplateInterpreterGenerator(code) { + generate_all(); // Down here so it can be "virtual". +} + +//----------------------------------------------------------------------------- + +// Non-product code +#ifndef PRODUCT +address TemplateInterpreterGenerator::generate_trace_code(TosState state) { + //__ flush_bundle(); + address entry = __ pc(); + + char *bname = NULL; + uint tsize = 0; + switch(state) { + case ftos: + bname = "trace_code_ftos {"; + tsize = 2; + break; + case btos: + bname = "trace_code_btos {"; + tsize = 2; + break; + case ctos: + bname = "trace_code_ctos {"; + tsize = 2; + break; + case stos: + bname = "trace_code_stos {"; + tsize = 2; + break; + case itos: + bname = "trace_code_itos {"; + tsize = 2; + break; + case ltos: + bname = "trace_code_ltos {"; + tsize = 3; + break; + case atos: + bname = "trace_code_atos {"; + tsize = 2; + break; + case vtos: + // Note: In case of vtos, the topmost of stack value could be a int or doubl + // In case of a double (2 slots) we won't see the 2nd stack value. + // Maybe we simply should print the topmost 3 stack slots to cope with the problem. + bname = "trace_code_vtos {"; + tsize = 2; + + break; + case dtos: + bname = "trace_code_dtos {"; + tsize = 3; + break; + default: + ShouldNotReachHere(); + } + BLOCK_COMMENT(bname); + + // Support short-cut for TraceBytecodesAt. + // Don't call into the VM if we don't want to trace to speed up things. + Label Lskip_vm_call; + if (TraceBytecodesAt > 0 && TraceBytecodesAt < max_intx) { + int offs1 = __ load_const_optimized(R11_scratch1, (address) &TraceBytecodesAt, R0, true); + int offs2 = __ load_const_optimized(R12_scratch2, (address) &BytecodeCounter::_counter_value, R0, true); + __ ld(R11_scratch1, offs1, R11_scratch1); + __ lwa(R12_scratch2, offs2, R12_scratch2); + __ cmpd(CCR0, R12_scratch2, R11_scratch1); + __ blt(CCR0, Lskip_vm_call); + } + + __ push(state); + // Load 2 topmost expression stack values. + __ ld(R6_ARG4, tsize*Interpreter::stackElementSize, R15_esp); + __ ld(R5_ARG3, Interpreter::stackElementSize, R15_esp); + __ mflr(R31); + __ call_VM(noreg, CAST_FROM_FN_PTR(address, SharedRuntime::trace_bytecode), /* unused */ R4_ARG2, R5_ARG3, R6_ARG4, false); + __ mtlr(R31); + __ pop(state); + + if (TraceBytecodesAt > 0 && TraceBytecodesAt < max_intx) { + __ bind(Lskip_vm_call); + } + __ blr(); + BLOCK_COMMENT("} trace_code"); + return entry; +} + +void TemplateInterpreterGenerator::count_bytecode() { + int offs = __ load_const_optimized(R11_scratch1, (address) &BytecodeCounter::_counter_value, R12_scratch2, true); + __ lwz(R12_scratch2, offs, R11_scratch1); + __ addi(R12_scratch2, R12_scratch2, 1); + __ stw(R12_scratch2, offs, R11_scratch1); +} + +void TemplateInterpreterGenerator::histogram_bytecode(Template* t) { + int offs = __ load_const_optimized(R11_scratch1, (address) &BytecodeHistogram::_counters[t->bytecode()], R12_scratch2, true); + __ lwz(R12_scratch2, offs, R11_scratch1); + __ addi(R12_scratch2, R12_scratch2, 1); + __ stw(R12_scratch2, offs, R11_scratch1); +} + +void TemplateInterpreterGenerator::histogram_bytecode_pair(Template* t) { + const Register addr = R11_scratch1, + tmp = R12_scratch2; + // Get index, shift out old bytecode, bring in new bytecode, and store it. + // _index = (_index >> log2_number_of_codes) | + // (bytecode << log2_number_of_codes); + int offs1 = __ load_const_optimized(addr, (address)&BytecodePairHistogram::_index, tmp, true); + __ lwz(tmp, offs1, addr); + __ srwi(tmp, tmp, BytecodePairHistogram::log2_number_of_codes); + __ ori(tmp, tmp, ((int) t->bytecode()) << BytecodePairHistogram::log2_number_of_codes); + __ stw(tmp, offs1, addr); + + // Bump bucket contents. + // _counters[_index] ++; + int offs2 = __ load_const_optimized(addr, (address)&BytecodePairHistogram::_counters, R0, true); + __ sldi(tmp, tmp, LogBytesPerInt); + __ add(addr, tmp, addr); + __ lwz(tmp, offs2, addr); + __ addi(tmp, tmp, 1); + __ stw(tmp, offs2, addr); +} + +void TemplateInterpreterGenerator::trace_bytecode(Template* t) { + // Call a little run-time stub to avoid blow-up for each bytecode. + // The run-time runtime saves the right registers, depending on + // the tosca in-state for the given template. + + assert(Interpreter::trace_code(t->tos_in()) != NULL, + "entry must have been generated"); + + // Note: we destroy LR here. + __ bl(Interpreter::trace_code(t->tos_in())); +} + +void TemplateInterpreterGenerator::stop_interpreter_at() { + Label L; + int offs1 = __ load_const_optimized(R11_scratch1, (address) &StopInterpreterAt, R0, true); + int offs2 = __ load_const_optimized(R12_scratch2, (address) &BytecodeCounter::_counter_value, R0, true); + __ ld(R11_scratch1, offs1, R11_scratch1); + __ lwa(R12_scratch2, offs2, R12_scratch2); + __ cmpd(CCR0, R12_scratch2, R11_scratch1); + __ bne(CCR0, L); + __ illtrap(); + __ bind(L); +} + +#endif // !PRODUCT +#endif // !CC_INTERP diff --git a/hotspot/src/cpu/ppc/vm/templateInterpreter_ppc.hpp b/hotspot/src/cpu/ppc/vm/templateInterpreter_ppc.hpp new file mode 100644 index 00000000000..eb817b0a256 --- /dev/null +++ b/hotspot/src/cpu/ppc/vm/templateInterpreter_ppc.hpp @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright 2013, 2014 SAP AG. All rights reserved. + * 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 CPU_PPC_VM_TEMPLATEINTERPRETER_PPC_HPP +#define CPU_PPC_VM_TEMPLATEINTERPRETER_PPC_HPP + + protected: + + // Size of interpreter code. Increase if too small. Interpreter will + // fail with a guarantee ("not enough space for interpreter generation"); + // if too small. + // Run with +PrintInterpreter to get the VM to print out the size. + // Max size with JVMTI + + const static int InterpreterCodeSize = 210*K; + +#endif // CPU_PPC_VM_TEMPLATEINTERPRETER_PPC_HPP + + diff --git a/hotspot/src/cpu/ppc/vm/templateTable_ppc_64.cpp b/hotspot/src/cpu/ppc/vm/templateTable_ppc_64.cpp new file mode 100644 index 00000000000..e7846bc2859 --- /dev/null +++ b/hotspot/src/cpu/ppc/vm/templateTable_ppc_64.cpp @@ -0,0 +1,4082 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright 2013, 2014 SAP AG. All rights reserved. + * 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 "asm/macroAssembler.inline.hpp" +#include "interpreter/interpreter.hpp" +#include "interpreter/interpreterRuntime.hpp" +#include "interpreter/templateInterpreter.hpp" +#include "interpreter/templateTable.hpp" +#include "memory/universe.inline.hpp" +#include "oops/objArrayKlass.hpp" +#include "oops/oop.inline.hpp" +#include "prims/methodHandles.hpp" +#include "runtime/sharedRuntime.hpp" +#include "runtime/stubRoutines.hpp" +#include "runtime/synchronizer.hpp" +#include "utilities/macros.hpp" + +#ifndef CC_INTERP + +#undef __ +#define __ _masm-> + +// ============================================================================ +// Misc helpers + +// Do an oop store like *(base + index) = val OR *(base + offset) = val +// (only one of both variants is possible at the same time). +// Index can be noreg. +// Kills: +// Rbase, Rtmp +static void do_oop_store(InterpreterMacroAssembler* _masm, + Register Rbase, + RegisterOrConstant offset, + Register Rval, // Noreg means always null. + Register Rtmp1, + Register Rtmp2, + Register Rtmp3, + BarrierSet::Name barrier, + bool precise, + bool check_null) { + assert_different_registers(Rtmp1, Rtmp2, Rtmp3, Rval, Rbase); + + switch (barrier) { +#ifndef SERIALGC + case BarrierSet::G1SATBCT: + case BarrierSet::G1SATBCTLogging: + { + // Load and record the previous value. + __ g1_write_barrier_pre(Rbase, offset, + Rtmp3, /* holder of pre_val ? */ + Rtmp1, Rtmp2, false /* frame */); + + Label Lnull, Ldone; + if (Rval != noreg) { + if (check_null) { + __ cmpdi(CCR0, Rval, 0); + __ beq(CCR0, Lnull); + } + __ store_heap_oop_not_null(Rval, offset, Rbase, /*Rval must stay uncompressed.*/ Rtmp1); + // Mark the card. + if (!(offset.is_constant() && offset.as_constant() == 0) && precise) { + __ add(Rbase, offset, Rbase); + } + __ g1_write_barrier_post(Rbase, Rval, Rtmp1, Rtmp2, Rtmp3, /*filtered (fast path)*/ &Ldone); + if (check_null) { __ b(Ldone); } + } + + if (Rval == noreg || check_null) { // Store null oop. + Register Rnull = Rval; + __ bind(Lnull); + if (Rval == noreg) { + Rnull = Rtmp1; + __ li(Rnull, 0); + } + if (UseCompressedOops) { + __ stw(Rnull, offset, Rbase); + } else { + __ std(Rnull, offset, Rbase); + } + } + __ bind(Ldone); + } + break; +#endif // SERIALGC + case BarrierSet::CardTableModRef: + case BarrierSet::CardTableExtension: + { + Label Lnull, Ldone; + if (Rval != noreg) { + if (check_null) { + __ cmpdi(CCR0, Rval, 0); + __ beq(CCR0, Lnull); + } + __ store_heap_oop_not_null(Rval, offset, Rbase, /*Rval should better stay uncompressed.*/ Rtmp1); + // Mark the card. + if (!(offset.is_constant() && offset.as_constant() == 0) && precise) { + __ add(Rbase, offset, Rbase); + } + __ card_write_barrier_post(Rbase, Rval, Rtmp1); + if (check_null) { + __ b(Ldone); + } + } + + if (Rval == noreg || check_null) { // Store null oop. + Register Rnull = Rval; + __ bind(Lnull); + if (Rval == noreg) { + Rnull = Rtmp1; + __ li(Rnull, 0); + } + if (UseCompressedOops) { + __ stw(Rnull, offset, Rbase); + } else { + __ std(Rnull, offset, Rbase); + } + } + __ bind(Ldone); + } + break; + case BarrierSet::ModRef: + case BarrierSet::Other: + ShouldNotReachHere(); + break; + default: + ShouldNotReachHere(); + } +} + +// ============================================================================ +// Platform-dependent initialization + +void TemplateTable::pd_initialize() { + // No ppc64 specific initialization. +} + +Address TemplateTable::at_bcp(int offset) { + // Not used on ppc. + ShouldNotReachHere(); + return Address(); +} + +// Patches the current bytecode (ptr to it located in bcp) +// in the bytecode stream with a new one. +void TemplateTable::patch_bytecode(Bytecodes::Code new_bc, Register Rnew_bc, Register Rtemp, bool load_bc_into_bc_reg /*=true*/, int byte_no) { + // With sharing on, may need to test method flag. + if (!RewriteBytecodes) return; + Label L_patch_done; + + switch (new_bc) { + case Bytecodes::_fast_aputfield: + case Bytecodes::_fast_bputfield: + case Bytecodes::_fast_cputfield: + case Bytecodes::_fast_dputfield: + case Bytecodes::_fast_fputfield: + case Bytecodes::_fast_iputfield: + case Bytecodes::_fast_lputfield: + case Bytecodes::_fast_sputfield: + { + // We skip bytecode quickening for putfield instructions when + // the put_code written to the constant pool cache is zero. + // This is required so that every execution of this instruction + // calls out to InterpreterRuntime::resolve_get_put to do + // additional, required work. + assert(byte_no == f1_byte || byte_no == f2_byte, "byte_no out of range"); + assert(load_bc_into_bc_reg, "we use bc_reg as temp"); + __ get_cache_and_index_at_bcp(Rtemp /* dst = cache */, 1); + // Big Endian: ((*(cache+indices))>>((1+byte_no)*8))&0xFF + __ lbz(Rnew_bc, in_bytes(ConstantPoolCache::base_offset() + ConstantPoolCacheEntry::indices_offset()) + 7 - (1 + byte_no), Rtemp); + __ cmpwi(CCR0, Rnew_bc, 0); + __ li(Rnew_bc, (unsigned int)(unsigned char)new_bc); + __ beq(CCR0, L_patch_done); + // __ isync(); // acquire not needed + break; + } + + default: + assert(byte_no == -1, "sanity"); + if (load_bc_into_bc_reg) { + __ li(Rnew_bc, (unsigned int)(unsigned char)new_bc); + } + } + + if (JvmtiExport::can_post_breakpoint()) { + Label L_fast_patch; + __ lbz(Rtemp, 0, R14_bcp); + __ cmpwi(CCR0, Rtemp, (unsigned int)(unsigned char)Bytecodes::_breakpoint); + __ bne(CCR0, L_fast_patch); + // Perform the quickening, slowly, in the bowels of the breakpoint table. + __ call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::set_original_bytecode_at), R19_method, R14_bcp, Rnew_bc); + __ b(L_patch_done); + __ bind(L_fast_patch); + } + + // Patch bytecode. + __ stb(Rnew_bc, 0, R14_bcp); + + __ bind(L_patch_done); +} + +// ============================================================================ +// Individual instructions + +void TemplateTable::nop() { + transition(vtos, vtos); + // Nothing to do. +} + +void TemplateTable::shouldnotreachhere() { + transition(vtos, vtos); + __ stop("shouldnotreachhere bytecode"); +} + +void TemplateTable::aconst_null() { + transition(vtos, atos); + __ li(R17_tos, 0); +} + +void TemplateTable::iconst(int value) { + transition(vtos, itos); + assert(value >= -1 && value <= 5, ""); + __ li(R17_tos, value); +} + +void TemplateTable::lconst(int value) { + transition(vtos, ltos); + assert(value >= -1 && value <= 5, ""); + __ li(R17_tos, value); +} + +void TemplateTable::fconst(int value) { + transition(vtos, ftos); + static float zero = 0.0; + static float one = 1.0; + static float two = 2.0; + switch (value) { + default: ShouldNotReachHere(); + case 0: { + int simm16_offset = __ load_const_optimized(R11_scratch1, (address*)&zero, R0); + __ lfs(F15_ftos, simm16_offset, R11_scratch1); + break; + } + case 1: { + int simm16_offset = __ load_const_optimized(R11_scratch1, (address*)&one, R0); + __ lfs(F15_ftos, simm16_offset, R11_scratch1); + break; + } + case 2: { + int simm16_offset = __ load_const_optimized(R11_scratch1, (address*)&two, R0); + __ lfs(F15_ftos, simm16_offset, R11_scratch1); + break; + } + } +} + +void TemplateTable::dconst(int value) { + transition(vtos, dtos); + static double zero = 0.0; + static double one = 1.0; + switch (value) { + case 0: { + int simm16_offset = __ load_const_optimized(R11_scratch1, (address*)&zero, R0); + __ lfd(F15_ftos, simm16_offset, R11_scratch1); + break; + } + case 1: { + int simm16_offset = __ load_const_optimized(R11_scratch1, (address*)&one, R0); + __ lfd(F15_ftos, simm16_offset, R11_scratch1); + break; + } + default: ShouldNotReachHere(); + } +} + +void TemplateTable::bipush() { + transition(vtos, itos); + __ lbz(R17_tos, 1, R14_bcp); + __ extsb(R17_tos, R17_tos); +} + +void TemplateTable::sipush() { + transition(vtos, itos); + __ get_2_byte_integer_at_bcp(1, R17_tos, InterpreterMacroAssembler::Signed); +} + +void TemplateTable::ldc(bool wide) { + Register Rscratch1 = R11_scratch1, + Rscratch2 = R12_scratch2, + Rcpool = R3_ARG1; + + transition(vtos, vtos); + Label notInt, notClass, exit; + + __ get_cpool_and_tags(Rcpool, Rscratch2); // Set Rscratch2 = &tags. + if (wide) { // Read index. + __ get_2_byte_integer_at_bcp(1, Rscratch1, InterpreterMacroAssembler::Unsigned); + } else { + __ lbz(Rscratch1, 1, R14_bcp); + } + + const int base_offset = ConstantPool::header_size() * wordSize; + const int tags_offset = Array::base_offset_in_bytes(); + + // Get type from tags. + __ addi(Rscratch2, Rscratch2, tags_offset); + __ lbzx(Rscratch2, Rscratch2, Rscratch1); + + __ cmpwi(CCR0, Rscratch2, JVM_CONSTANT_UnresolvedClass); // Unresolved class? + __ cmpwi(CCR1, Rscratch2, JVM_CONSTANT_UnresolvedClassInError); // Unresolved class in error state? + __ cror(/*CR0 eq*/2, /*CR1 eq*/4+2, /*CR0 eq*/2); + + // Resolved class - need to call vm to get java mirror of the class. + __ cmpwi(CCR1, Rscratch2, JVM_CONSTANT_Class); + __ crnor(/*CR0 eq*/2, /*CR1 eq*/4+2, /*CR0 eq*/2); // Neither resolved class nor unresolved case from above? + __ beq(CCR0, notClass); + + __ li(R4, wide ? 1 : 0); + call_VM(R17_tos, CAST_FROM_FN_PTR(address, InterpreterRuntime::ldc), R4); + __ push(atos); + __ b(exit); + + __ align(32, 12); + __ bind(notClass); + __ addi(Rcpool, Rcpool, base_offset); + __ sldi(Rscratch1, Rscratch1, LogBytesPerWord); + __ cmpdi(CCR0, Rscratch2, JVM_CONSTANT_Integer); + __ bne(CCR0, notInt); + __ isync(); // Order load of constant wrt. tags. + __ lwax(R17_tos, Rcpool, Rscratch1); + __ push(itos); + __ b(exit); + + __ align(32, 12); + __ bind(notInt); +#ifdef ASSERT + // String and Object are rewritten to fast_aldc + __ cmpdi(CCR0, Rscratch2, JVM_CONSTANT_Float); + __ asm_assert_eq("unexpected type", 0x8765); +#endif + __ isync(); // Order load of constant wrt. tags. + __ lfsx(F15_ftos, Rcpool, Rscratch1); + __ push(ftos); + + __ align(32, 12); + __ bind(exit); +} + +// Fast path for caching oop constants. +void TemplateTable::fast_aldc(bool wide) { + transition(vtos, atos); + + int index_size = wide ? sizeof(u2) : sizeof(u1); + const Register Rscratch = R11_scratch1; + Label resolved; + + // We are resolved if the resolved reference cache entry contains a + // non-null object (CallSite, etc.) + __ get_cache_index_at_bcp(Rscratch, 1, index_size); // Load index. + __ load_resolved_reference_at_index(R17_tos, Rscratch); + __ cmpdi(CCR0, R17_tos, 0); + __ bne(CCR0, resolved); + __ load_const_optimized(R3_ARG1, (int)bytecode()); + + address entry = CAST_FROM_FN_PTR(address, InterpreterRuntime::resolve_ldc); + + // First time invocation - must resolve first. + __ call_VM(R17_tos, entry, R3_ARG1); + + __ align(32, 12); + __ bind(resolved); + __ verify_oop(R17_tos); +} + +void TemplateTable::ldc2_w() { + transition(vtos, vtos); + Label Llong, Lexit; + + Register Rindex = R11_scratch1, + Rcpool = R12_scratch2, + Rtag = R3_ARG1; + __ get_cpool_and_tags(Rcpool, Rtag); + __ get_2_byte_integer_at_bcp(1, Rindex, InterpreterMacroAssembler::Unsigned); + + const int base_offset = ConstantPool::header_size() * wordSize; + const int tags_offset = Array::base_offset_in_bytes(); + // Get type from tags. + __ addi(Rcpool, Rcpool, base_offset); + __ addi(Rtag, Rtag, tags_offset); + + __ lbzx(Rtag, Rtag, Rindex); + + __ sldi(Rindex, Rindex, LogBytesPerWord); + __ cmpdi(CCR0, Rtag, JVM_CONSTANT_Double); + __ bne(CCR0, Llong); + // A double can be placed at word-aligned locations in the constant pool. + // Check out Conversions.java for an example. + // Also ConstantPool::header_size() is 20, which makes it very difficult + // to double-align double on the constant pool. SG, 11/7/97 + __ isync(); // Order load of constant wrt. tags. + __ lfdx(F15_ftos, Rcpool, Rindex); + __ push(dtos); + __ b(Lexit); + + __ bind(Llong); + __ isync(); // Order load of constant wrt. tags. + __ ldx(R17_tos, Rcpool, Rindex); + __ push(ltos); + + __ bind(Lexit); +} + +// Get the locals index located in the bytecode stream at bcp + offset. +void TemplateTable::locals_index(Register Rdst, int offset) { + __ lbz(Rdst, offset, R14_bcp); +} + +void TemplateTable::iload() { + transition(vtos, itos); + + // Get the local value into tos + const Register Rindex = R22_tmp2; + locals_index(Rindex); + + // Rewrite iload,iload pair into fast_iload2 + // iload,caload pair into fast_icaload + if (RewriteFrequentPairs) { + Label Lrewrite, Ldone; + Register Rnext_byte = R3_ARG1, + Rrewrite_to = R6_ARG4, + Rscratch = R11_scratch1; + + // get next byte + __ lbz(Rnext_byte, Bytecodes::length_for(Bytecodes::_iload), R14_bcp); + + // if _iload, wait to rewrite to iload2. We only want to rewrite the + // last two iloads in a pair. Comparing against fast_iload means that + // the next bytecode is neither an iload or a caload, and therefore + // an iload pair. + __ cmpwi(CCR0, Rnext_byte, (unsigned int)(unsigned char)Bytecodes::_iload); + __ beq(CCR0, Ldone); + + __ cmpwi(CCR1, Rnext_byte, (unsigned int)(unsigned char)Bytecodes::_fast_iload); + __ li(Rrewrite_to, (unsigned int)(unsigned char)Bytecodes::_fast_iload2); + __ beq(CCR1, Lrewrite); + + __ cmpwi(CCR0, Rnext_byte, (unsigned int)(unsigned char)Bytecodes::_caload); + __ li(Rrewrite_to, (unsigned int)(unsigned char)Bytecodes::_fast_icaload); + __ beq(CCR0, Lrewrite); + + __ li(Rrewrite_to, (unsigned int)(unsigned char)Bytecodes::_fast_iload); + + __ bind(Lrewrite); + patch_bytecode(Bytecodes::_iload, Rrewrite_to, Rscratch, false); + __ bind(Ldone); + } + + __ load_local_int(R17_tos, Rindex, Rindex); +} + +// Load 2 integers in a row without dispatching +void TemplateTable::fast_iload2() { + transition(vtos, itos); + + __ lbz(R3_ARG1, 1, R14_bcp); + __ lbz(R17_tos, Bytecodes::length_for(Bytecodes::_iload) + 1, R14_bcp); + + __ load_local_int(R3_ARG1, R11_scratch1, R3_ARG1); + __ load_local_int(R17_tos, R12_scratch2, R17_tos); + __ push_i(R3_ARG1); +} + +void TemplateTable::fast_iload() { + transition(vtos, itos); + // Get the local value into tos + + const Register Rindex = R11_scratch1; + locals_index(Rindex); + __ load_local_int(R17_tos, Rindex, Rindex); +} + +// Load a local variable type long from locals area to TOS cache register. +// Local index resides in bytecodestream. +void TemplateTable::lload() { + transition(vtos, ltos); + + const Register Rindex = R11_scratch1; + locals_index(Rindex); + __ load_local_long(R17_tos, Rindex, Rindex); +} + +void TemplateTable::fload() { + transition(vtos, ftos); + + const Register Rindex = R11_scratch1; + locals_index(Rindex); + __ load_local_float(F15_ftos, Rindex, Rindex); +} + +void TemplateTable::dload() { + transition(vtos, dtos); + + const Register Rindex = R11_scratch1; + locals_index(Rindex); + __ load_local_double(F15_ftos, Rindex, Rindex); +} + +void TemplateTable::aload() { + transition(vtos, atos); + + const Register Rindex = R11_scratch1; + locals_index(Rindex); + __ load_local_ptr(R17_tos, Rindex, Rindex); +} + +void TemplateTable::locals_index_wide(Register Rdst) { + // Offset is 2, not 1, because Lbcp points to wide prefix code. + __ get_2_byte_integer_at_bcp(2, Rdst, InterpreterMacroAssembler::Unsigned); +} + +void TemplateTable::wide_iload() { + // Get the local value into tos. + + const Register Rindex = R11_scratch1; + locals_index_wide(Rindex); + __ load_local_int(R17_tos, Rindex, Rindex); +} + +void TemplateTable::wide_lload() { + transition(vtos, ltos); + + const Register Rindex = R11_scratch1; + locals_index_wide(Rindex); + __ load_local_long(R17_tos, Rindex, Rindex); +} + +void TemplateTable::wide_fload() { + transition(vtos, ftos); + + const Register Rindex = R11_scratch1; + locals_index_wide(Rindex); + __ load_local_float(F15_ftos, Rindex, Rindex); +} + +void TemplateTable::wide_dload() { + transition(vtos, dtos); + + const Register Rindex = R11_scratch1; + locals_index_wide(Rindex); + __ load_local_double(F15_ftos, Rindex, Rindex); +} + +void TemplateTable::wide_aload() { + transition(vtos, atos); + + const Register Rindex = R11_scratch1; + locals_index_wide(Rindex); + __ load_local_ptr(R17_tos, Rindex, Rindex); +} + +void TemplateTable::iaload() { + transition(itos, itos); + + const Register Rload_addr = R3_ARG1, + Rarray = R4_ARG2, + Rtemp = R5_ARG3; + __ index_check(Rarray, R17_tos /* index */, LogBytesPerInt, Rtemp, Rload_addr); + __ lwa(R17_tos, arrayOopDesc::base_offset_in_bytes(T_INT), Rload_addr); +} + +void TemplateTable::laload() { + transition(itos, ltos); + + const Register Rload_addr = R3_ARG1, + Rarray = R4_ARG2, + Rtemp = R5_ARG3; + __ index_check(Rarray, R17_tos /* index */, LogBytesPerLong, Rtemp, Rload_addr); + __ ld(R17_tos, arrayOopDesc::base_offset_in_bytes(T_LONG), Rload_addr); +} + +void TemplateTable::faload() { + transition(itos, ftos); + + const Register Rload_addr = R3_ARG1, + Rarray = R4_ARG2, + Rtemp = R5_ARG3; + __ index_check(Rarray, R17_tos /* index */, LogBytesPerInt, Rtemp, Rload_addr); + __ lfs(F15_ftos, arrayOopDesc::base_offset_in_bytes(T_FLOAT), Rload_addr); +} + +void TemplateTable::daload() { + transition(itos, dtos); + + const Register Rload_addr = R3_ARG1, + Rarray = R4_ARG2, + Rtemp = R5_ARG3; + __ index_check(Rarray, R17_tos /* index */, LogBytesPerLong, Rtemp, Rload_addr); + __ lfd(F15_ftos, arrayOopDesc::base_offset_in_bytes(T_DOUBLE), Rload_addr); +} + +void TemplateTable::aaload() { + transition(itos, atos); + + // tos: index + // result tos: array + const Register Rload_addr = R3_ARG1, + Rarray = R4_ARG2, + Rtemp = R5_ARG3; + __ index_check(Rarray, R17_tos /* index */, UseCompressedOops ? 2 : LogBytesPerWord, Rtemp, Rload_addr); + __ load_heap_oop(R17_tos, arrayOopDesc::base_offset_in_bytes(T_OBJECT), Rload_addr); + __ verify_oop(R17_tos); + //__ dcbt(R17_tos); // prefetch +} + +void TemplateTable::baload() { + transition(itos, itos); + + const Register Rload_addr = R3_ARG1, + Rarray = R4_ARG2, + Rtemp = R5_ARG3; + __ index_check(Rarray, R17_tos /* index */, 0, Rtemp, Rload_addr); + __ lbz(R17_tos, arrayOopDesc::base_offset_in_bytes(T_BYTE), Rload_addr); + __ extsb(R17_tos, R17_tos); +} + +void TemplateTable::caload() { + transition(itos, itos); + + const Register Rload_addr = R3_ARG1, + Rarray = R4_ARG2, + Rtemp = R5_ARG3; + __ index_check(Rarray, R17_tos /* index */, LogBytesPerShort, Rtemp, Rload_addr); + __ lhz(R17_tos, arrayOopDesc::base_offset_in_bytes(T_CHAR), Rload_addr); +} + +// Iload followed by caload frequent pair. +void TemplateTable::fast_icaload() { + transition(vtos, itos); + + const Register Rload_addr = R3_ARG1, + Rarray = R4_ARG2, + Rtemp = R11_scratch1; + + locals_index(R17_tos); + __ load_local_int(R17_tos, Rtemp, R17_tos); + __ index_check(Rarray, R17_tos /* index */, LogBytesPerShort, Rtemp, Rload_addr); + __ lhz(R17_tos, arrayOopDesc::base_offset_in_bytes(T_CHAR), Rload_addr); +} + +void TemplateTable::saload() { + transition(itos, itos); + + const Register Rload_addr = R11_scratch1, + Rarray = R12_scratch2, + Rtemp = R3_ARG1; + __ index_check(Rarray, R17_tos /* index */, LogBytesPerShort, Rtemp, Rload_addr); + __ lha(R17_tos, arrayOopDesc::base_offset_in_bytes(T_SHORT), Rload_addr); +} + +void TemplateTable::iload(int n) { + transition(vtos, itos); + + __ lwz(R17_tos, Interpreter::local_offset_in_bytes(n), R18_locals); +} + +void TemplateTable::lload(int n) { + transition(vtos, ltos); + + __ ld(R17_tos, Interpreter::local_offset_in_bytes(n + 1), R18_locals); +} + +void TemplateTable::fload(int n) { + transition(vtos, ftos); + + __ lfs(F15_ftos, Interpreter::local_offset_in_bytes(n), R18_locals); +} + +void TemplateTable::dload(int n) { + transition(vtos, dtos); + + __ lfd(F15_ftos, Interpreter::local_offset_in_bytes(n + 1), R18_locals); +} + +void TemplateTable::aload(int n) { + transition(vtos, atos); + + __ ld(R17_tos, Interpreter::local_offset_in_bytes(n), R18_locals); +} + +void TemplateTable::aload_0() { + transition(vtos, atos); + // According to bytecode histograms, the pairs: + // + // _aload_0, _fast_igetfield + // _aload_0, _fast_agetfield + // _aload_0, _fast_fgetfield + // + // occur frequently. If RewriteFrequentPairs is set, the (slow) + // _aload_0 bytecode checks if the next bytecode is either + // _fast_igetfield, _fast_agetfield or _fast_fgetfield and then + // rewrites the current bytecode into a pair bytecode; otherwise it + // rewrites the current bytecode into _0 that doesn't do + // the pair check anymore. + // + // Note: If the next bytecode is _getfield, the rewrite must be + // delayed, otherwise we may miss an opportunity for a pair. + // + // Also rewrite frequent pairs + // aload_0, aload_1 + // aload_0, iload_1 + // These bytecodes with a small amount of code are most profitable + // to rewrite. + + if (RewriteFrequentPairs) { + + Label Lrewrite, Ldont_rewrite; + Register Rnext_byte = R3_ARG1, + Rrewrite_to = R6_ARG4, + Rscratch = R11_scratch1; + + // Get next byte. + __ lbz(Rnext_byte, Bytecodes::length_for(Bytecodes::_aload_0), R14_bcp); + + // If _getfield, wait to rewrite. We only want to rewrite the last two bytecodes in a pair. + __ cmpwi(CCR0, Rnext_byte, (unsigned int)(unsigned char)Bytecodes::_getfield); + __ beq(CCR0, Ldont_rewrite); + + __ cmpwi(CCR1, Rnext_byte, (unsigned int)(unsigned char)Bytecodes::_fast_igetfield); + __ li(Rrewrite_to, (unsigned int)(unsigned char)Bytecodes::_fast_iaccess_0); + __ beq(CCR1, Lrewrite); + + __ cmpwi(CCR0, Rnext_byte, (unsigned int)(unsigned char)Bytecodes::_fast_agetfield); + __ li(Rrewrite_to, (unsigned int)(unsigned char)Bytecodes::_fast_aaccess_0); + __ beq(CCR0, Lrewrite); + + __ cmpwi(CCR1, Rnext_byte, (unsigned int)(unsigned char)Bytecodes::_fast_fgetfield); + __ li(Rrewrite_to, (unsigned int)(unsigned char)Bytecodes::_fast_faccess_0); + __ beq(CCR1, Lrewrite); + + __ li(Rrewrite_to, (unsigned int)(unsigned char)Bytecodes::_fast_aload_0); + + __ bind(Lrewrite); + patch_bytecode(Bytecodes::_aload_0, Rrewrite_to, Rscratch, false); + __ bind(Ldont_rewrite); + } + + // Do actual aload_0 (must do this after patch_bytecode which might call VM and GC might change oop). + aload(0); +} + +void TemplateTable::istore() { + transition(itos, vtos); + + const Register Rindex = R11_scratch1; + locals_index(Rindex); + __ store_local_int(R17_tos, Rindex); +} + +void TemplateTable::lstore() { + transition(ltos, vtos); + const Register Rindex = R11_scratch1; + locals_index(Rindex); + __ store_local_long(R17_tos, Rindex); +} + +void TemplateTable::fstore() { + transition(ftos, vtos); + + const Register Rindex = R11_scratch1; + locals_index(Rindex); + __ store_local_float(F15_ftos, Rindex); +} + +void TemplateTable::dstore() { + transition(dtos, vtos); + + const Register Rindex = R11_scratch1; + locals_index(Rindex); + __ store_local_double(F15_ftos, Rindex); +} + +void TemplateTable::astore() { + transition(vtos, vtos); + + const Register Rindex = R11_scratch1; + __ pop_ptr(); + __ verify_oop_or_return_address(R17_tos, Rindex); + locals_index(Rindex); + __ store_local_ptr(R17_tos, Rindex); +} + +void TemplateTable::wide_istore() { + transition(vtos, vtos); + + const Register Rindex = R11_scratch1; + __ pop_i(); + locals_index_wide(Rindex); + __ store_local_int(R17_tos, Rindex); +} + +void TemplateTable::wide_lstore() { + transition(vtos, vtos); + + const Register Rindex = R11_scratch1; + __ pop_l(); + locals_index_wide(Rindex); + __ store_local_long(R17_tos, Rindex); +} + +void TemplateTable::wide_fstore() { + transition(vtos, vtos); + + const Register Rindex = R11_scratch1; + __ pop_f(); + locals_index_wide(Rindex); + __ store_local_float(F15_ftos, Rindex); +} + +void TemplateTable::wide_dstore() { + transition(vtos, vtos); + + const Register Rindex = R11_scratch1; + __ pop_d(); + locals_index_wide(Rindex); + __ store_local_double(F15_ftos, Rindex); +} + +void TemplateTable::wide_astore() { + transition(vtos, vtos); + + const Register Rindex = R11_scratch1; + __ pop_ptr(); + __ verify_oop_or_return_address(R17_tos, Rindex); + locals_index_wide(Rindex); + __ store_local_ptr(R17_tos, Rindex); +} + +void TemplateTable::iastore() { + transition(itos, vtos); + + const Register Rindex = R3_ARG1, + Rstore_addr = R4_ARG2, + Rarray = R5_ARG3, + Rtemp = R6_ARG4; + __ pop_i(Rindex); + __ index_check(Rarray, Rindex, LogBytesPerInt, Rtemp, Rstore_addr); + __ stw(R17_tos, arrayOopDesc::base_offset_in_bytes(T_INT), Rstore_addr); + } + +void TemplateTable::lastore() { + transition(ltos, vtos); + + const Register Rindex = R3_ARG1, + Rstore_addr = R4_ARG2, + Rarray = R5_ARG3, + Rtemp = R6_ARG4; + __ pop_i(Rindex); + __ index_check(Rarray, Rindex, LogBytesPerLong, Rtemp, Rstore_addr); + __ std(R17_tos, arrayOopDesc::base_offset_in_bytes(T_LONG), Rstore_addr); + } + +void TemplateTable::fastore() { + transition(ftos, vtos); + + const Register Rindex = R3_ARG1, + Rstore_addr = R4_ARG2, + Rarray = R5_ARG3, + Rtemp = R6_ARG4; + __ pop_i(Rindex); + __ index_check(Rarray, Rindex, LogBytesPerInt, Rtemp, Rstore_addr); + __ stfs(F15_ftos, arrayOopDesc::base_offset_in_bytes(T_FLOAT), Rstore_addr); + } + +void TemplateTable::dastore() { + transition(dtos, vtos); + + const Register Rindex = R3_ARG1, + Rstore_addr = R4_ARG2, + Rarray = R5_ARG3, + Rtemp = R6_ARG4; + __ pop_i(Rindex); + __ index_check(Rarray, Rindex, LogBytesPerLong, Rtemp, Rstore_addr); + __ stfd(F15_ftos, arrayOopDesc::base_offset_in_bytes(T_DOUBLE), Rstore_addr); + } + +// Pop 3 values from the stack and... +void TemplateTable::aastore() { + transition(vtos, vtos); + + Label Lstore_ok, Lis_null, Ldone; + const Register Rindex = R3_ARG1, + Rarray = R4_ARG2, + Rscratch = R11_scratch1, + Rscratch2 = R12_scratch2, + Rarray_klass = R5_ARG3, + Rarray_element_klass = Rarray_klass, + Rvalue_klass = R6_ARG4, + Rstore_addr = R31; // Use register which survives VM call. + + __ ld(R17_tos, Interpreter::expr_offset_in_bytes(0), R15_esp); // Get value to store. + __ lwz(Rindex, Interpreter::expr_offset_in_bytes(1), R15_esp); // Get index. + __ ld(Rarray, Interpreter::expr_offset_in_bytes(2), R15_esp); // Get array. + + __ verify_oop(R17_tos); + __ index_check_without_pop(Rarray, Rindex, UseCompressedOops ? 2 : LogBytesPerWord, Rscratch, Rstore_addr); + // Rindex is dead! + Register Rscratch3 = Rindex; + + // Do array store check - check for NULL value first. + __ cmpdi(CCR0, R17_tos, 0); + __ beq(CCR0, Lis_null); + + __ load_klass(Rarray_klass, Rarray); + __ load_klass(Rvalue_klass, R17_tos); + + // Do fast instanceof cache test. + __ ld(Rarray_element_klass, in_bytes(ObjArrayKlass::element_klass_offset()), Rarray_klass); + + // Generate a fast subtype check. Branch to store_ok if no failure. Throw if failure. + __ gen_subtype_check(Rvalue_klass /*subklass*/, Rarray_element_klass /*superklass*/, Rscratch, Rscratch2, Rscratch3, Lstore_ok); + + // Fell through: subtype check failed => throw an exception. + __ load_dispatch_table(R11_scratch1, (address*)Interpreter::_throw_ArrayStoreException_entry); + __ mtctr(R11_scratch1); + __ bctr(); + + __ bind(Lis_null); + do_oop_store(_masm, Rstore_addr, arrayOopDesc::base_offset_in_bytes(T_OBJECT), noreg /* 0 */, + Rscratch, Rscratch2, Rscratch3, _bs->kind(), true /* precise */, false /* check_null */); + __ profile_null_seen(Rscratch, Rscratch2); + __ b(Ldone); + + // Store is OK. + __ bind(Lstore_ok); + do_oop_store(_masm, Rstore_addr, arrayOopDesc::base_offset_in_bytes(T_OBJECT), R17_tos /* value */, + Rscratch, Rscratch2, Rscratch3, _bs->kind(), true /* precise */, false /* check_null */); + + __ bind(Ldone); + // Adjust sp (pops array, index and value). + __ addi(R15_esp, R15_esp, 3 * Interpreter::stackElementSize); +} + +void TemplateTable::bastore() { + transition(itos, vtos); + + const Register Rindex = R11_scratch1, + Rarray = R12_scratch2, + Rscratch = R3_ARG1; + __ pop_i(Rindex); + // tos: val + // Rarray: array ptr (popped by index_check) + __ index_check(Rarray, Rindex, 0, Rscratch, Rarray); + __ stb(R17_tos, arrayOopDesc::base_offset_in_bytes(T_BYTE), Rarray); +} + +void TemplateTable::castore() { + transition(itos, vtos); + + const Register Rindex = R11_scratch1, + Rarray = R12_scratch2, + Rscratch = R3_ARG1; + __ pop_i(Rindex); + // tos: val + // Rarray: array ptr (popped by index_check) + __ index_check(Rarray, Rindex, LogBytesPerShort, Rscratch, Rarray); + __ sth(R17_tos, arrayOopDesc::base_offset_in_bytes(T_CHAR), Rarray); +} + +void TemplateTable::sastore() { + castore(); +} + +void TemplateTable::istore(int n) { + transition(itos, vtos); + __ stw(R17_tos, Interpreter::local_offset_in_bytes(n), R18_locals); +} + +void TemplateTable::lstore(int n) { + transition(ltos, vtos); + __ std(R17_tos, Interpreter::local_offset_in_bytes(n + 1), R18_locals); +} + +void TemplateTable::fstore(int n) { + transition(ftos, vtos); + __ stfs(F15_ftos, Interpreter::local_offset_in_bytes(n), R18_locals); +} + +void TemplateTable::dstore(int n) { + transition(dtos, vtos); + __ stfd(F15_ftos, Interpreter::local_offset_in_bytes(n + 1), R18_locals); +} + +void TemplateTable::astore(int n) { + transition(vtos, vtos); + + __ pop_ptr(); + __ verify_oop_or_return_address(R17_tos, R11_scratch1); + __ std(R17_tos, Interpreter::local_offset_in_bytes(n), R18_locals); +} + +void TemplateTable::pop() { + transition(vtos, vtos); + + __ addi(R15_esp, R15_esp, Interpreter::stackElementSize); +} + +void TemplateTable::pop2() { + transition(vtos, vtos); + + __ addi(R15_esp, R15_esp, Interpreter::stackElementSize * 2); +} + +void TemplateTable::dup() { + transition(vtos, vtos); + + __ ld(R11_scratch1, Interpreter::stackElementSize, R15_esp); + __ push_ptr(R11_scratch1); +} + +void TemplateTable::dup_x1() { + transition(vtos, vtos); + + Register Ra = R11_scratch1, + Rb = R12_scratch2; + // stack: ..., a, b + __ ld(Rb, Interpreter::stackElementSize, R15_esp); + __ ld(Ra, Interpreter::stackElementSize * 2, R15_esp); + __ std(Rb, Interpreter::stackElementSize * 2, R15_esp); + __ std(Ra, Interpreter::stackElementSize, R15_esp); + __ push_ptr(Rb); + // stack: ..., b, a, b +} + +void TemplateTable::dup_x2() { + transition(vtos, vtos); + + Register Ra = R11_scratch1, + Rb = R12_scratch2, + Rc = R3_ARG1; + + // stack: ..., a, b, c + __ ld(Rc, Interpreter::stackElementSize, R15_esp); // load c + __ ld(Ra, Interpreter::stackElementSize * 3, R15_esp); // load a + __ std(Rc, Interpreter::stackElementSize * 3, R15_esp); // store c in a + __ ld(Rb, Interpreter::stackElementSize * 2, R15_esp); // load b + // stack: ..., c, b, c + __ std(Ra, Interpreter::stackElementSize * 2, R15_esp); // store a in b + // stack: ..., c, a, c + __ std(Rb, Interpreter::stackElementSize, R15_esp); // store b in c + __ push_ptr(Rc); // push c + // stack: ..., c, a, b, c +} + +void TemplateTable::dup2() { + transition(vtos, vtos); + + Register Ra = R11_scratch1, + Rb = R12_scratch2; + // stack: ..., a, b + __ ld(Rb, Interpreter::stackElementSize, R15_esp); + __ ld(Ra, Interpreter::stackElementSize * 2, R15_esp); + __ push_2ptrs(Ra, Rb); + // stack: ..., a, b, a, b +} + +void TemplateTable::dup2_x1() { + transition(vtos, vtos); + + Register Ra = R11_scratch1, + Rb = R12_scratch2, + Rc = R3_ARG1; + // stack: ..., a, b, c + __ ld(Rc, Interpreter::stackElementSize, R15_esp); + __ ld(Rb, Interpreter::stackElementSize * 2, R15_esp); + __ std(Rc, Interpreter::stackElementSize * 2, R15_esp); + __ ld(Ra, Interpreter::stackElementSize * 3, R15_esp); + __ std(Ra, Interpreter::stackElementSize, R15_esp); + __ std(Rb, Interpreter::stackElementSize * 3, R15_esp); + // stack: ..., b, c, a + __ push_2ptrs(Rb, Rc); + // stack: ..., b, c, a, b, c +} + +void TemplateTable::dup2_x2() { + transition(vtos, vtos); + + Register Ra = R11_scratch1, + Rb = R12_scratch2, + Rc = R3_ARG1, + Rd = R4_ARG2; + // stack: ..., a, b, c, d + __ ld(Rb, Interpreter::stackElementSize * 3, R15_esp); + __ ld(Rd, Interpreter::stackElementSize, R15_esp); + __ std(Rb, Interpreter::stackElementSize, R15_esp); // store b in d + __ std(Rd, Interpreter::stackElementSize * 3, R15_esp); // store d in b + __ ld(Ra, Interpreter::stackElementSize * 4, R15_esp); + __ ld(Rc, Interpreter::stackElementSize * 2, R15_esp); + __ std(Ra, Interpreter::stackElementSize * 2, R15_esp); // store a in c + __ std(Rc, Interpreter::stackElementSize * 4, R15_esp); // store c in a + // stack: ..., c, d, a, b + __ push_2ptrs(Rc, Rd); + // stack: ..., c, d, a, b, c, d +} + +void TemplateTable::swap() { + transition(vtos, vtos); + // stack: ..., a, b + + Register Ra = R11_scratch1, + Rb = R12_scratch2; + // stack: ..., a, b + __ ld(Rb, Interpreter::stackElementSize, R15_esp); + __ ld(Ra, Interpreter::stackElementSize * 2, R15_esp); + __ std(Rb, Interpreter::stackElementSize * 2, R15_esp); + __ std(Ra, Interpreter::stackElementSize, R15_esp); + // stack: ..., b, a +} + +void TemplateTable::iop2(Operation op) { + transition(itos, itos); + + Register Rscratch = R11_scratch1; + + __ pop_i(Rscratch); + // tos = number of bits to shift + // Rscratch = value to shift + switch (op) { + case add: __ add(R17_tos, Rscratch, R17_tos); break; + case sub: __ sub(R17_tos, Rscratch, R17_tos); break; + case mul: __ mullw(R17_tos, Rscratch, R17_tos); break; + case _and: __ andr(R17_tos, Rscratch, R17_tos); break; + case _or: __ orr(R17_tos, Rscratch, R17_tos); break; + case _xor: __ xorr(R17_tos, Rscratch, R17_tos); break; + case shl: __ rldicl(R17_tos, R17_tos, 0, 64-5); __ slw(R17_tos, Rscratch, R17_tos); break; + case shr: __ rldicl(R17_tos, R17_tos, 0, 64-5); __ sraw(R17_tos, Rscratch, R17_tos); break; + case ushr: __ rldicl(R17_tos, R17_tos, 0, 64-5); __ srw(R17_tos, Rscratch, R17_tos); break; + default: ShouldNotReachHere(); + } +} + +void TemplateTable::lop2(Operation op) { + transition(ltos, ltos); + + Register Rscratch = R11_scratch1; + __ pop_l(Rscratch); + switch (op) { + case add: __ add(R17_tos, Rscratch, R17_tos); break; + case sub: __ sub(R17_tos, Rscratch, R17_tos); break; + case _and: __ andr(R17_tos, Rscratch, R17_tos); break; + case _or: __ orr(R17_tos, Rscratch, R17_tos); break; + case _xor: __ xorr(R17_tos, Rscratch, R17_tos); break; + default: ShouldNotReachHere(); + } +} + +void TemplateTable::idiv() { + transition(itos, itos); + + Label Lnormal, Lexception, Ldone; + Register Rdividend = R11_scratch1; // Used by irem. + + __ addi(R0, R17_tos, 1); + __ cmplwi(CCR0, R0, 2); + __ bgt(CCR0, Lnormal); // divisor <-1 or >1 + + __ cmpwi(CCR1, R17_tos, 0); + __ beq(CCR1, Lexception); // divisor == 0 + + __ pop_i(Rdividend); + __ mullw(R17_tos, Rdividend, R17_tos); // div by +/-1 + __ b(Ldone); + + __ bind(Lexception); + __ load_dispatch_table(R11_scratch1, (address*)Interpreter::_throw_ArithmeticException_entry); + __ mtctr(R11_scratch1); + __ bctr(); + + __ align(32, 12); + __ bind(Lnormal); + __ pop_i(Rdividend); + __ divw(R17_tos, Rdividend, R17_tos); // Can't divide minint/-1. + __ bind(Ldone); +} + +void TemplateTable::irem() { + transition(itos, itos); + + __ mr(R12_scratch2, R17_tos); + idiv(); + __ mullw(R17_tos, R17_tos, R12_scratch2); + __ subf(R17_tos, R17_tos, R11_scratch1); // Dividend set by idiv. +} + +void TemplateTable::lmul() { + transition(ltos, ltos); + + __ pop_l(R11_scratch1); + __ mulld(R17_tos, R11_scratch1, R17_tos); +} + +void TemplateTable::ldiv() { + transition(ltos, ltos); + + Label Lnormal, Lexception, Ldone; + Register Rdividend = R11_scratch1; // Used by lrem. + + __ addi(R0, R17_tos, 1); + __ cmpldi(CCR0, R0, 2); + __ bgt(CCR0, Lnormal); // divisor <-1 or >1 + + __ cmpdi(CCR1, R17_tos, 0); + __ beq(CCR1, Lexception); // divisor == 0 + + __ pop_l(Rdividend); + __ mulld(R17_tos, Rdividend, R17_tos); // div by +/-1 + __ b(Ldone); + + __ bind(Lexception); + __ load_dispatch_table(R11_scratch1, (address*)Interpreter::_throw_ArithmeticException_entry); + __ mtctr(R11_scratch1); + __ bctr(); + + __ align(32, 12); + __ bind(Lnormal); + __ pop_l(Rdividend); + __ divd(R17_tos, Rdividend, R17_tos); // Can't divide minint/-1. + __ bind(Ldone); +} + +void TemplateTable::lrem() { + transition(ltos, ltos); + + __ mr(R12_scratch2, R17_tos); + ldiv(); + __ mulld(R17_tos, R17_tos, R12_scratch2); + __ subf(R17_tos, R17_tos, R11_scratch1); // Dividend set by ldiv. +} + +void TemplateTable::lshl() { + transition(itos, ltos); + + __ rldicl(R17_tos, R17_tos, 0, 64-6); // Extract least significant bits. + __ pop_l(R11_scratch1); + __ sld(R17_tos, R11_scratch1, R17_tos); +} + +void TemplateTable::lshr() { + transition(itos, ltos); + + __ rldicl(R17_tos, R17_tos, 0, 64-6); // Extract least significant bits. + __ pop_l(R11_scratch1); + __ srad(R17_tos, R11_scratch1, R17_tos); +} + +void TemplateTable::lushr() { + transition(itos, ltos); + + __ rldicl(R17_tos, R17_tos, 0, 64-6); // Extract least significant bits. + __ pop_l(R11_scratch1); + __ srd(R17_tos, R11_scratch1, R17_tos); +} + +void TemplateTable::fop2(Operation op) { + transition(ftos, ftos); + + switch (op) { + case add: __ pop_f(F0_SCRATCH); __ fadds(F15_ftos, F0_SCRATCH, F15_ftos); break; + case sub: __ pop_f(F0_SCRATCH); __ fsubs(F15_ftos, F0_SCRATCH, F15_ftos); break; + case mul: __ pop_f(F0_SCRATCH); __ fmuls(F15_ftos, F0_SCRATCH, F15_ftos); break; + case div: __ pop_f(F0_SCRATCH); __ fdivs(F15_ftos, F0_SCRATCH, F15_ftos); break; + case rem: + __ pop_f(F1_ARG1); + __ fmr(F2_ARG2, F15_ftos); + __ call_VM_leaf(CAST_FROM_FN_PTR(address, SharedRuntime::frem)); + __ fmr(F15_ftos, F1_RET); + break; + + default: ShouldNotReachHere(); + } +} + +void TemplateTable::dop2(Operation op) { + transition(dtos, dtos); + + switch (op) { + case add: __ pop_d(F0_SCRATCH); __ fadd(F15_ftos, F0_SCRATCH, F15_ftos); break; + case sub: __ pop_d(F0_SCRATCH); __ fsub(F15_ftos, F0_SCRATCH, F15_ftos); break; + case mul: __ pop_d(F0_SCRATCH); __ fmul(F15_ftos, F0_SCRATCH, F15_ftos); break; + case div: __ pop_d(F0_SCRATCH); __ fdiv(F15_ftos, F0_SCRATCH, F15_ftos); break; + case rem: + __ pop_d(F1_ARG1); + __ fmr(F2_ARG2, F15_ftos); + __ call_VM_leaf(CAST_FROM_FN_PTR(address, SharedRuntime::drem)); + __ fmr(F15_ftos, F1_RET); + break; + + default: ShouldNotReachHere(); + } +} + +// Negate the value in the TOS cache. +void TemplateTable::ineg() { + transition(itos, itos); + + __ neg(R17_tos, R17_tos); +} + +// Negate the value in the TOS cache. +void TemplateTable::lneg() { + transition(ltos, ltos); + + __ neg(R17_tos, R17_tos); +} + +void TemplateTable::fneg() { + transition(ftos, ftos); + + __ fneg(F15_ftos, F15_ftos); +} + +void TemplateTable::dneg() { + transition(dtos, dtos); + + __ fneg(F15_ftos, F15_ftos); +} + +// Increments a local variable in place. +void TemplateTable::iinc() { + transition(vtos, vtos); + + const Register Rindex = R11_scratch1, + Rincrement = R0, + Rvalue = R12_scratch2; + + locals_index(Rindex); // Load locals index from bytecode stream. + __ lbz(Rincrement, 2, R14_bcp); // Load increment from the bytecode stream. + __ extsb(Rincrement, Rincrement); + + __ load_local_int(Rvalue, Rindex, Rindex); // Puts address of local into Rindex. + + __ add(Rvalue, Rincrement, Rvalue); + __ stw(Rvalue, 0, Rindex); +} + +void TemplateTable::wide_iinc() { + transition(vtos, vtos); + + Register Rindex = R11_scratch1, + Rlocals_addr = Rindex, + Rincr = R12_scratch2; + locals_index_wide(Rindex); + __ get_2_byte_integer_at_bcp(4, Rincr, InterpreterMacroAssembler::Signed); + __ load_local_int(R17_tos, Rlocals_addr, Rindex); + __ add(R17_tos, Rincr, R17_tos); + __ stw(R17_tos, 0, Rlocals_addr); +} + +void TemplateTable::convert() { + // %%%%% Factor this first part accross platforms +#ifdef ASSERT + TosState tos_in = ilgl; + TosState tos_out = ilgl; + switch (bytecode()) { + case Bytecodes::_i2l: // fall through + case Bytecodes::_i2f: // fall through + case Bytecodes::_i2d: // fall through + case Bytecodes::_i2b: // fall through + case Bytecodes::_i2c: // fall through + case Bytecodes::_i2s: tos_in = itos; break; + case Bytecodes::_l2i: // fall through + case Bytecodes::_l2f: // fall through + case Bytecodes::_l2d: tos_in = ltos; break; + case Bytecodes::_f2i: // fall through + case Bytecodes::_f2l: // fall through + case Bytecodes::_f2d: tos_in = ftos; break; + case Bytecodes::_d2i: // fall through + case Bytecodes::_d2l: // fall through + case Bytecodes::_d2f: tos_in = dtos; break; + default : ShouldNotReachHere(); + } + switch (bytecode()) { + case Bytecodes::_l2i: // fall through + case Bytecodes::_f2i: // fall through + case Bytecodes::_d2i: // fall through + case Bytecodes::_i2b: // fall through + case Bytecodes::_i2c: // fall through + case Bytecodes::_i2s: tos_out = itos; break; + case Bytecodes::_i2l: // fall through + case Bytecodes::_f2l: // fall through + case Bytecodes::_d2l: tos_out = ltos; break; + case Bytecodes::_i2f: // fall through + case Bytecodes::_l2f: // fall through + case Bytecodes::_d2f: tos_out = ftos; break; + case Bytecodes::_i2d: // fall through + case Bytecodes::_l2d: // fall through + case Bytecodes::_f2d: tos_out = dtos; break; + default : ShouldNotReachHere(); + } + transition(tos_in, tos_out); +#endif + + // Conversion + Label done; + switch (bytecode()) { + case Bytecodes::_i2l: + __ extsw(R17_tos, R17_tos); + break; + + case Bytecodes::_l2i: + // Nothing to do, we'll continue to work with the lower bits. + break; + + case Bytecodes::_i2b: + __ extsb(R17_tos, R17_tos); + break; + + case Bytecodes::_i2c: + __ rldicl(R17_tos, R17_tos, 0, 64-2*8); + break; + + case Bytecodes::_i2s: + __ extsh(R17_tos, R17_tos); + break; + + case Bytecodes::_i2d: + __ extsw(R17_tos, R17_tos); + case Bytecodes::_l2d: + __ push_l_pop_d(); + __ fcfid(F15_ftos, F15_ftos); + break; + + case Bytecodes::_i2f: + __ extsw(R17_tos, R17_tos); + __ push_l_pop_d(); + if (VM_Version::has_fcfids()) { // fcfids is >= Power7 only + // Comment: alternatively, load with sign extend could be done by lfiwax. + __ fcfids(F15_ftos, F15_ftos); + } else { + __ fcfid(F15_ftos, F15_ftos); + __ frsp(F15_ftos, F15_ftos); + } + break; + + case Bytecodes::_l2f: + if (VM_Version::has_fcfids()) { // fcfids is >= Power7 only + __ push_l_pop_d(); + __ fcfids(F15_ftos, F15_ftos); + } else { + // Avoid rounding problem when result should be 0x3f800001: need fixup code before fcfid+frsp. + __ mr(R3_ARG1, R17_tos); + __ call_VM_leaf(CAST_FROM_FN_PTR(address, SharedRuntime::l2f)); + __ fmr(F15_ftos, F1_RET); + } + break; + + case Bytecodes::_f2d: + // empty + break; + + case Bytecodes::_d2f: + __ frsp(F15_ftos, F15_ftos); + break; + + case Bytecodes::_d2i: + case Bytecodes::_f2i: + __ fcmpu(CCR0, F15_ftos, F15_ftos); + __ li(R17_tos, 0); // 0 in case of NAN + __ bso(CCR0, done); + __ fctiwz(F15_ftos, F15_ftos); + __ push_d_pop_l(); + break; + + case Bytecodes::_d2l: + case Bytecodes::_f2l: + __ fcmpu(CCR0, F15_ftos, F15_ftos); + __ li(R17_tos, 0); // 0 in case of NAN + __ bso(CCR0, done); + __ fctidz(F15_ftos, F15_ftos); + __ push_d_pop_l(); + break; + + default: ShouldNotReachHere(); + } + __ bind(done); +} + +// Long compare +void TemplateTable::lcmp() { + transition(ltos, itos); + + const Register Rscratch = R11_scratch1; + __ pop_l(Rscratch); // first operand, deeper in stack + + __ cmpd(CCR0, Rscratch, R17_tos); // compare + __ mfcr(R17_tos); // set bit 32..33 as follows: <: 0b10, =: 0b00, >: 0b01 + __ srwi(Rscratch, R17_tos, 30); + __ srawi(R17_tos, R17_tos, 31); + __ orr(R17_tos, Rscratch, R17_tos); // set result as follows: <: -1, =: 0, >: 1 +} + +// fcmpl/fcmpg and dcmpl/dcmpg bytecodes +// unordered_result == -1 => fcmpl or dcmpl +// unordered_result == 1 => fcmpg or dcmpg +void TemplateTable::float_cmp(bool is_float, int unordered_result) { + const FloatRegister Rfirst = F0_SCRATCH, + Rsecond = F15_ftos; + const Register Rscratch = R11_scratch1; + + if (is_float) { + __ pop_f(Rfirst); + } else { + __ pop_d(Rfirst); + } + + Label Lunordered, Ldone; + __ fcmpu(CCR0, Rfirst, Rsecond); // compare + if (unordered_result) { + __ bso(CCR0, Lunordered); + } + __ mfcr(R17_tos); // set bit 32..33 as follows: <: 0b10, =: 0b00, >: 0b01 + __ srwi(Rscratch, R17_tos, 30); + __ srawi(R17_tos, R17_tos, 31); + __ orr(R17_tos, Rscratch, R17_tos); // set result as follows: <: -1, =: 0, >: 1 + if (unordered_result) { + __ b(Ldone); + __ bind(Lunordered); + __ load_const_optimized(R17_tos, unordered_result); + } + __ bind(Ldone); +} + +// Branch_conditional which takes TemplateTable::Condition. +void TemplateTable::branch_conditional(ConditionRegister crx, TemplateTable::Condition cc, Label& L, bool invert) { + bool positive = false; + Assembler::Condition cond = Assembler::equal; + switch (cc) { + case TemplateTable::equal: positive = true ; cond = Assembler::equal ; break; + case TemplateTable::not_equal: positive = false; cond = Assembler::equal ; break; + case TemplateTable::less: positive = true ; cond = Assembler::less ; break; + case TemplateTable::less_equal: positive = false; cond = Assembler::greater; break; + case TemplateTable::greater: positive = true ; cond = Assembler::greater; break; + case TemplateTable::greater_equal: positive = false; cond = Assembler::less ; break; + default: ShouldNotReachHere(); + } + int bo = (positive != invert) ? Assembler::bcondCRbiIs1 : Assembler::bcondCRbiIs0; + int bi = Assembler::bi0(crx, cond); + __ bc(bo, bi, L); +} + +void TemplateTable::branch(bool is_jsr, bool is_wide) { + + // Note: on SPARC, we use InterpreterMacroAssembler::if_cmp also. + __ verify_thread(); + + const Register Rscratch1 = R11_scratch1, + Rscratch2 = R12_scratch2, + Rscratch3 = R3_ARG1, + R4_counters = R4_ARG2, + bumped_count = R31, + Rdisp = R22_tmp2; + + __ profile_taken_branch(Rscratch1, bumped_count); + + // Get (wide) offset. + if (is_wide) { + __ get_4_byte_integer_at_bcp(1, Rdisp, InterpreterMacroAssembler::Signed); + } else { + __ get_2_byte_integer_at_bcp(1, Rdisp, InterpreterMacroAssembler::Signed); + } + + // -------------------------------------------------------------------------- + // Handle all the JSR stuff here, then exit. + // It's much shorter and cleaner than intermingling with the + // non-JSR normal-branch stuff occurring below. + if (is_jsr) { + // Compute return address as bci in Otos_i. + __ ld(Rscratch1, in_bytes(Method::const_offset()), R19_method); + __ addi(Rscratch2, R14_bcp, -in_bytes(ConstMethod::codes_offset()) + (is_wide ? 5 : 3)); + __ subf(R17_tos, Rscratch1, Rscratch2); + + // Bump bcp to target of JSR. + __ add(R14_bcp, Rdisp, R14_bcp); + // Push returnAddress for "ret" on stack. + __ push_ptr(R17_tos); + // And away we go! + __ dispatch_next(vtos); + return; + } + + // -------------------------------------------------------------------------- + // Normal (non-jsr) branch handling + + const bool increment_invocation_counter_for_backward_branches = UseCompiler && UseLoopCounter; + if (increment_invocation_counter_for_backward_branches) { + //__ unimplemented("branch invocation counter"); + + Label Lforward; + __ add(R14_bcp, Rdisp, R14_bcp); // Add to bc addr. + + // Check branch direction. + __ cmpdi(CCR0, Rdisp, 0); + __ bgt(CCR0, Lforward); + + __ get_method_counters(R19_method, R4_counters, Lforward); + + if (TieredCompilation) { + Label Lno_mdo, Loverflow; + const int increment = InvocationCounter::count_increment; + const int mask = ((1 << Tier0BackedgeNotifyFreqLog) - 1) << InvocationCounter::count_shift; + if (ProfileInterpreter) { + Register Rmdo = Rscratch1; + + // If no method data exists, go to profile_continue. + __ ld(Rmdo, in_bytes(Method::method_data_offset()), R19_method); + __ cmpdi(CCR0, Rmdo, 0); + __ beq(CCR0, Lno_mdo); + + // Increment backedge counter in the MDO. + const int mdo_bc_offs = in_bytes(MethodData::backedge_counter_offset()) + in_bytes(InvocationCounter::counter_offset()); + __ lwz(Rscratch2, mdo_bc_offs, Rmdo); + __ load_const_optimized(Rscratch3, mask, R0); + __ addi(Rscratch2, Rscratch2, increment); + __ stw(Rscratch2, mdo_bc_offs, Rmdo); + __ and_(Rscratch3, Rscratch2, Rscratch3); + __ bne(CCR0, Lforward); + __ b(Loverflow); + } + + // If there's no MDO, increment counter in method. + const int mo_bc_offs = in_bytes(MethodCounters::backedge_counter_offset()) + in_bytes(InvocationCounter::counter_offset()); + __ bind(Lno_mdo); + __ lwz(Rscratch2, mo_bc_offs, R4_counters); + __ load_const_optimized(Rscratch3, mask, R0); + __ addi(Rscratch2, Rscratch2, increment); + __ stw(Rscratch2, mo_bc_offs, R19_method); + __ and_(Rscratch3, Rscratch2, Rscratch3); + __ bne(CCR0, Lforward); + + __ bind(Loverflow); + + // Notify point for loop, pass branch bytecode. + __ call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::frequency_counter_overflow), R14_bcp, true); + + // Was an OSR adapter generated? + // O0 = osr nmethod + __ cmpdi(CCR0, R3_RET, 0); + __ beq(CCR0, Lforward); + + // Has the nmethod been invalidated already? + __ lwz(R0, nmethod::entry_bci_offset(), R3_RET); + __ cmpwi(CCR0, R0, InvalidOSREntryBci); + __ beq(CCR0, Lforward); + + // Migrate the interpreter frame off of the stack. + // We can use all registers because we will not return to interpreter from this point. + + // Save nmethod. + const Register osr_nmethod = R31; + __ mr(osr_nmethod, R3_RET); + __ set_top_ijava_frame_at_SP_as_last_Java_frame(R1_SP, R11_scratch1); + __ call_VM_leaf(CAST_FROM_FN_PTR(address, SharedRuntime::OSR_migration_begin), R16_thread); + __ reset_last_Java_frame(); + // OSR buffer is in ARG1. + + // Remove the interpreter frame. + __ merge_frames(/*top_frame_sp*/ R21_sender_SP, /*return_pc*/ R0, R11_scratch1, R12_scratch2); + + // Jump to the osr code. + __ ld(R11_scratch1, nmethod::osr_entry_point_offset(), osr_nmethod); + __ mtlr(R0); + __ mtctr(R11_scratch1); + __ bctr(); + + } else { + + const Register invoke_ctr = Rscratch1; + // Update Backedge branch separately from invocations. + __ increment_backedge_counter(R4_counters, invoke_ctr, Rscratch2, Rscratch3); + + if (ProfileInterpreter) { + __ test_invocation_counter_for_mdp(invoke_ctr, Rscratch2, Lforward); + if (UseOnStackReplacement) { + __ test_backedge_count_for_osr(bumped_count, R14_bcp, Rscratch2); + } + } else { + if (UseOnStackReplacement) { + __ test_backedge_count_for_osr(invoke_ctr, R14_bcp, Rscratch2); + } + } + } + + __ bind(Lforward); + + } else { + // Bump bytecode pointer by displacement (take the branch). + __ add(R14_bcp, Rdisp, R14_bcp); // Add to bc addr. + } + // Continue with bytecode @ target. + // %%%%% Like Intel, could speed things up by moving bytecode fetch to code above, + // %%%%% and changing dispatch_next to dispatch_only. + __ dispatch_next(vtos); +} + +// Helper function for if_cmp* methods below. +// Factored out common compare and branch code. +void TemplateTable::if_cmp_common(Register Rfirst, Register Rsecond, Register Rscratch1, Register Rscratch2, Condition cc, bool is_jint, bool cmp0) { + Label Lnot_taken; + // Note: The condition code we get is the condition under which we + // *fall through*! So we have to inverse the CC here. + + if (is_jint) { + if (cmp0) { + __ cmpwi(CCR0, Rfirst, 0); + } else { + __ cmpw(CCR0, Rfirst, Rsecond); + } + } else { + if (cmp0) { + __ cmpdi(CCR0, Rfirst, 0); + } else { + __ cmpd(CCR0, Rfirst, Rsecond); + } + } + branch_conditional(CCR0, cc, Lnot_taken, /*invert*/ true); + + // Conition is false => Jump! + branch(false, false); + + // Condition is not true => Continue. + __ align(32, 12); + __ bind(Lnot_taken); + __ profile_not_taken_branch(Rscratch1, Rscratch2); +} + +// Compare integer values with zero and fall through if CC holds, branch away otherwise. +void TemplateTable::if_0cmp(Condition cc) { + transition(itos, vtos); + + if_cmp_common(R17_tos, noreg, R11_scratch1, R12_scratch2, cc, true, true); +} + +// Compare integer values and fall through if CC holds, branch away otherwise. +// +// Interface: +// - Rfirst: First operand (older stack value) +// - tos: Second operand (younger stack value) +void TemplateTable::if_icmp(Condition cc) { + transition(itos, vtos); + + const Register Rfirst = R0, + Rsecond = R17_tos; + + __ pop_i(Rfirst); + if_cmp_common(Rfirst, Rsecond, R11_scratch1, R12_scratch2, cc, true, false); +} + +void TemplateTable::if_nullcmp(Condition cc) { + transition(atos, vtos); + + if_cmp_common(R17_tos, noreg, R11_scratch1, R12_scratch2, cc, false, true); +} + +void TemplateTable::if_acmp(Condition cc) { + transition(atos, vtos); + + const Register Rfirst = R0, + Rsecond = R17_tos; + + __ pop_ptr(Rfirst); + if_cmp_common(Rfirst, Rsecond, R11_scratch1, R12_scratch2, cc, false, false); +} + +void TemplateTable::ret() { + locals_index(R11_scratch1); + __ load_local_ptr(R17_tos, R11_scratch1, R11_scratch1); + + __ profile_ret(vtos, R17_tos, R11_scratch1, R12_scratch2); + + __ ld(R11_scratch1, in_bytes(Method::const_offset()), R19_method); + __ add(R11_scratch1, R17_tos, R11_scratch1); + __ addi(R14_bcp, R11_scratch1, in_bytes(ConstMethod::codes_offset())); + __ dispatch_next(vtos); +} + +void TemplateTable::wide_ret() { + transition(vtos, vtos); + + const Register Rindex = R3_ARG1, + Rscratch1 = R11_scratch1, + Rscratch2 = R12_scratch2; + + locals_index_wide(Rindex); + __ load_local_ptr(R17_tos, R17_tos, Rindex); + __ profile_ret(vtos, R17_tos, Rscratch1, R12_scratch2); + // Tos now contains the bci, compute the bcp from that. + __ ld(Rscratch1, in_bytes(Method::const_offset()), R19_method); + __ addi(Rscratch2, R17_tos, in_bytes(ConstMethod::codes_offset())); + __ add(R14_bcp, Rscratch1, Rscratch2); + __ dispatch_next(vtos); +} + +void TemplateTable::tableswitch() { + transition(itos, vtos); + + Label Ldispatch, Ldefault_case; + Register Rlow_byte = R3_ARG1, + Rindex = Rlow_byte, + Rhigh_byte = R4_ARG2, + Rdef_offset_addr = R5_ARG3, // is going to contain address of default offset + Rscratch1 = R11_scratch1, + Rscratch2 = R12_scratch2, + Roffset = R6_ARG4; + + // Align bcp. + __ addi(Rdef_offset_addr, R14_bcp, BytesPerInt); + __ clrrdi(Rdef_offset_addr, Rdef_offset_addr, log2_long((jlong)BytesPerInt)); + + // Load lo & hi. + __ lwz(Rlow_byte, BytesPerInt, Rdef_offset_addr); + __ lwz(Rhigh_byte, BytesPerInt * 2, Rdef_offset_addr); + + // Check for default case (=index outside [low,high]). + __ cmpw(CCR0, R17_tos, Rlow_byte); + __ cmpw(CCR1, R17_tos, Rhigh_byte); + __ blt(CCR0, Ldefault_case); + __ bgt(CCR1, Ldefault_case); + + // Lookup dispatch offset. + __ sub(Rindex, R17_tos, Rlow_byte); + __ extsw(Rindex, Rindex); + __ profile_switch_case(Rindex, Rhigh_byte /* scratch */, Rscratch1, Rscratch2); + __ sldi(Rindex, Rindex, LogBytesPerInt); + __ addi(Rindex, Rindex, 3 * BytesPerInt); + __ lwax(Roffset, Rdef_offset_addr, Rindex); + __ b(Ldispatch); + + __ bind(Ldefault_case); + __ profile_switch_default(Rhigh_byte, Rscratch1); + __ lwa(Roffset, 0, Rdef_offset_addr); + + __ bind(Ldispatch); + + __ add(R14_bcp, Roffset, R14_bcp); + __ dispatch_next(vtos); +} + +void TemplateTable::lookupswitch() { + transition(itos, itos); + __ stop("lookupswitch bytecode should have been rewritten"); +} + +// Table switch using linear search through cases. +// Bytecode stream format: +// Bytecode (1) | 4-byte padding | default offset (4) | count (4) | value/offset pair1 (8) | value/offset pair2 (8) | ... +// Note: Everything is big-endian format here. So on little endian machines, we have to revers offset and count and cmp value. +void TemplateTable::fast_linearswitch() { + transition(itos, vtos); + + Label Lloop_entry, Lsearch_loop, Lfound, Lcontinue_execution, Ldefault_case; + + Register Rcount = R3_ARG1, + Rcurrent_pair = R4_ARG2, + Rdef_offset_addr = R5_ARG3, // Is going to contain address of default offset. + Roffset = R31, // Might need to survive C call. + Rvalue = R12_scratch2, + Rscratch = R11_scratch1, + Rcmp_value = R17_tos; + + // Align bcp. + __ addi(Rdef_offset_addr, R14_bcp, BytesPerInt); + __ clrrdi(Rdef_offset_addr, Rdef_offset_addr, log2_long((jlong)BytesPerInt)); + + // Setup loop counter and limit. + __ lwz(Rcount, BytesPerInt, Rdef_offset_addr); // Load count. + __ addi(Rcurrent_pair, Rdef_offset_addr, 2 * BytesPerInt); // Rcurrent_pair now points to first pair. + + // Set up search loop. + __ cmpwi(CCR0, Rcount, 0); + __ beq(CCR0, Ldefault_case); + + __ mtctr(Rcount); + + // linear table search + __ bind(Lsearch_loop); + + __ lwz(Rvalue, 0, Rcurrent_pair); + __ lwa(Roffset, 1 * BytesPerInt, Rcurrent_pair); + + __ cmpw(CCR0, Rvalue, Rcmp_value); + __ beq(CCR0, Lfound); + + __ addi(Rcurrent_pair, Rcurrent_pair, 2 * BytesPerInt); + __ bdnz(Lsearch_loop); + + // default case + __ bind(Ldefault_case); + + __ lwa(Roffset, 0, Rdef_offset_addr); + if (ProfileInterpreter) { + __ profile_switch_default(Rdef_offset_addr, Rcount/* scratch */); + __ b(Lcontinue_execution); + } + + // Entry found, skip Roffset bytecodes and continue. + __ bind(Lfound); + if (ProfileInterpreter) { + // Calc the num of the pair we hit. Careful, Rcurrent_pair points 2 ints + // beyond the actual current pair due to the auto update load above! + __ sub(Rcurrent_pair, Rcurrent_pair, Rdef_offset_addr); + __ addi(Rcurrent_pair, Rcurrent_pair, - 2 * BytesPerInt); + __ srdi(Rcurrent_pair, Rcurrent_pair, LogBytesPerInt + 1); + __ profile_switch_case(Rcurrent_pair, Rcount /*scratch*/, Rdef_offset_addr/*scratch*/, Rscratch); + __ bind(Lcontinue_execution); + } + __ add(R14_bcp, Roffset, R14_bcp); + __ dispatch_next(vtos); +} + +// Table switch using binary search (value/offset pairs are ordered). +// Bytecode stream format: +// Bytecode (1) | 4-byte padding | default offset (4) | count (4) | value/offset pair1 (8) | value/offset pair2 (8) | ... +// Note: Everything is big-endian format here. So on little endian machines, we have to revers offset and count and cmp value. +void TemplateTable::fast_binaryswitch() { + + transition(itos, vtos); + // Implementation using the following core algorithm: (copied from Intel) + // + // int binary_search(int key, LookupswitchPair* array, int n) { + // // Binary search according to "Methodik des Programmierens" by + // // Edsger W. Dijkstra and W.H.J. Feijen, Addison Wesley Germany 1985. + // int i = 0; + // int j = n; + // while (i+1 < j) { + // // invariant P: 0 <= i < j <= n and (a[i] <= key < a[j] or Q) + // // with Q: for all i: 0 <= i < n: key < a[i] + // // where a stands for the array and assuming that the (inexisting) + // // element a[n] is infinitely big. + // int h = (i + j) >> 1; + // // i < h < j + // if (key < array[h].fast_match()) { + // j = h; + // } else { + // i = h; + // } + // } + // // R: a[i] <= key < a[i+1] or Q + // // (i.e., if key is within array, i is the correct index) + // return i; + // } + + // register allocation + const Register Rkey = R17_tos; // already set (tosca) + const Register Rarray = R3_ARG1; + const Register Ri = R4_ARG2; + const Register Rj = R5_ARG3; + const Register Rh = R6_ARG4; + const Register Rscratch = R11_scratch1; + + const int log_entry_size = 3; + const int entry_size = 1 << log_entry_size; + + Label found; + + // Find Array start, + __ addi(Rarray, R14_bcp, 3 * BytesPerInt); + __ clrrdi(Rarray, Rarray, log2_long((jlong)BytesPerInt)); + + // initialize i & j + __ li(Ri,0); + __ lwz(Rj, -BytesPerInt, Rarray); + + // and start. + Label entry; + __ b(entry); + + // binary search loop + { Label loop; + __ bind(loop); + // int h = (i + j) >> 1; + __ srdi(Rh, Rh, 1); + // if (key < array[h].fast_match()) { + // j = h; + // } else { + // i = h; + // } + __ sldi(Rscratch, Rh, log_entry_size); + __ lwzx(Rscratch, Rscratch, Rarray); + + // if (key < current value) + // Rh = Rj + // else + // Rh = Ri + Label Lgreater; + __ cmpw(CCR0, Rkey, Rscratch); + __ bge(CCR0, Lgreater); + __ mr(Rj, Rh); + __ b(entry); + __ bind(Lgreater); + __ mr(Ri, Rh); + + // while (i+1 < j) + __ bind(entry); + __ addi(Rscratch, Ri, 1); + __ cmpw(CCR0, Rscratch, Rj); + __ add(Rh, Ri, Rj); // start h = i + j >> 1; + + __ blt(CCR0, loop); + } + + // End of binary search, result index is i (must check again!). + Label default_case; + Label continue_execution; + if (ProfileInterpreter) { + __ mr(Rh, Ri); // Save index in i for profiling. + } + // Ri = value offset + __ sldi(Ri, Ri, log_entry_size); + __ add(Ri, Ri, Rarray); + __ lwz(Rscratch, 0, Ri); + + Label not_found; + // Ri = offset offset + __ cmpw(CCR0, Rkey, Rscratch); + __ beq(CCR0, not_found); + // entry not found -> j = default offset + __ lwz(Rj, -2 * BytesPerInt, Rarray); + __ b(default_case); + + __ bind(not_found); + // entry found -> j = offset + __ profile_switch_case(Rh, Rj, Rscratch, Rkey); + __ lwz(Rj, BytesPerInt, Ri); + + if (ProfileInterpreter) { + __ b(continue_execution); + } + + __ bind(default_case); // fall through (if not profiling) + __ profile_switch_default(Ri, Rscratch); + + __ bind(continue_execution); + + __ extsw(Rj, Rj); + __ add(R14_bcp, Rj, R14_bcp); + __ dispatch_next(vtos); +} + +void TemplateTable::_return(TosState state) { + transition(state, state); + assert(_desc->calls_vm(), + "inconsistent calls_vm information"); // call in remove_activation + + if (_desc->bytecode() == Bytecodes::_return_register_finalizer) { + + Register Rscratch = R11_scratch1, + Rklass = R12_scratch2, + Rklass_flags = Rklass; + Label Lskip_register_finalizer; + + // Check if the method has the FINALIZER flag set and call into the VM to finalize in this case. + assert(state == vtos, "only valid state"); + __ ld(R17_tos, 0, R18_locals); + + // Load klass of this obj. + __ load_klass(Rklass, R17_tos); + __ lwz(Rklass_flags, in_bytes(Klass::access_flags_offset()), Rklass); + __ testbitdi(CCR0, R0, Rklass_flags, exact_log2(JVM_ACC_HAS_FINALIZER)); + __ bfalse(CCR0, Lskip_register_finalizer); + + __ call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::register_finalizer), R17_tos /* obj */); + + __ align(32, 12); + __ bind(Lskip_register_finalizer); + } + + // Move the result value into the correct register and remove memory stack frame. + __ remove_activation(state, /* throw_monitor_exception */ true); + // Restoration of lr done by remove_activation. + switch (state) { + case ltos: + case btos: + case ctos: + case stos: + case atos: + case itos: __ mr(R3_RET, R17_tos); break; + case ftos: + case dtos: __ fmr(F1_RET, F15_ftos); break; + case vtos: // This might be a constructor. Final fields (and volatile fields on PPC64) need + // to get visible before the reference to the object gets stored anywhere. + __ membar(Assembler::StoreStore); break; + default : ShouldNotReachHere(); + } + __ blr(); +} + +// ============================================================================ +// Constant pool cache access +// +// Memory ordering: +// +// Like done in C++ interpreter, we load the fields +// - _indices +// - _f12_oop +// acquired, because these are asked if the cache is already resolved. We don't +// want to float loads above this check. +// See also comments in ConstantPoolCacheEntry::bytecode_1(), +// ConstantPoolCacheEntry::bytecode_2() and ConstantPoolCacheEntry::f1(); + +// Call into the VM if call site is not yet resolved +// +// Input regs: +// - None, all passed regs are outputs. +// +// Returns: +// - Rcache: The const pool cache entry that contains the resolved result. +// - Rresult: Either noreg or output for f1/f2. +// +// Kills: +// - Rscratch +void TemplateTable::resolve_cache_and_index(int byte_no, Register Rcache, Register Rscratch, size_t index_size) { + + __ get_cache_and_index_at_bcp(Rcache, 1, index_size); + Label Lresolved, Ldone; + + assert(byte_no == f1_byte || byte_no == f2_byte, "byte_no out of range"); + // We are resolved if the indices offset contains the current bytecode. + // Big Endian: + __ lbz(Rscratch, in_bytes(ConstantPoolCache::base_offset() + ConstantPoolCacheEntry::indices_offset()) + 7 - (byte_no + 1), Rcache); + // Acquire by cmp-br-isync (see below). + __ cmpdi(CCR0, Rscratch, (int)bytecode()); + __ beq(CCR0, Lresolved); + + address entry = NULL; + switch (bytecode()) { + case Bytecodes::_getstatic : // fall through + case Bytecodes::_putstatic : // fall through + case Bytecodes::_getfield : // fall through + case Bytecodes::_putfield : entry = CAST_FROM_FN_PTR(address, InterpreterRuntime::resolve_get_put); break; + case Bytecodes::_invokevirtual : // fall through + case Bytecodes::_invokespecial : // fall through + case Bytecodes::_invokestatic : // fall through + case Bytecodes::_invokeinterface: entry = CAST_FROM_FN_PTR(address, InterpreterRuntime::resolve_invoke); break; + case Bytecodes::_invokehandle : entry = CAST_FROM_FN_PTR(address, InterpreterRuntime::resolve_invokehandle); break; + case Bytecodes::_invokedynamic : entry = CAST_FROM_FN_PTR(address, InterpreterRuntime::resolve_invokedynamic); break; + default : ShouldNotReachHere(); break; + } + __ li(R4_ARG2, (int)bytecode()); + __ call_VM(noreg, entry, R4_ARG2, true); + + // Update registers with resolved info. + __ get_cache_and_index_at_bcp(Rcache, 1, index_size); + __ b(Ldone); + + __ bind(Lresolved); + __ isync(); // Order load wrt. succeeding loads. + __ bind(Ldone); +} + +// Load the constant pool cache entry at field accesses into registers. +// The Rcache and Rindex registers must be set before call. +// Input: +// - Rcache, Rindex +// Output: +// - Robj, Roffset, Rflags +void TemplateTable::load_field_cp_cache_entry(Register Robj, + Register Rcache, + Register Rindex /* unused on PPC64 */, + Register Roffset, + Register Rflags, + bool is_static = false) { + assert_different_registers(Rcache, Rflags, Roffset); + // assert(Rindex == noreg, "parameter not used on PPC64"); + + ByteSize cp_base_offset = ConstantPoolCache::base_offset(); + __ ld(Rflags, in_bytes(cp_base_offset) + in_bytes(ConstantPoolCacheEntry::flags_offset()), Rcache); + __ ld(Roffset, in_bytes(cp_base_offset) + in_bytes(ConstantPoolCacheEntry::f2_offset()), Rcache); + if (is_static) { + __ ld(Robj, in_bytes(cp_base_offset) + in_bytes(ConstantPoolCacheEntry::f1_offset()), Rcache); + __ ld(Robj, in_bytes(Klass::java_mirror_offset()), Robj); + // Acquire not needed here. Following access has an address dependency on this value. + } +} + +// Load the constant pool cache entry at invokes into registers. +// Resolve if necessary. + +// Input Registers: +// - None, bcp is used, though +// +// Return registers: +// - Rmethod (f1 field or f2 if invokevirtual) +// - Ritable_index (f2 field) +// - Rflags (flags field) +// +// Kills: +// - R21 +// +void TemplateTable::load_invoke_cp_cache_entry(int byte_no, + Register Rmethod, + Register Ritable_index, + Register Rflags, + bool is_invokevirtual, + bool is_invokevfinal, + bool is_invokedynamic) { + + ByteSize cp_base_offset = ConstantPoolCache::base_offset(); + // Determine constant pool cache field offsets. + assert(is_invokevirtual == (byte_no == f2_byte), "is_invokevirtual flag redundant"); + const int method_offset = in_bytes(cp_base_offset + (is_invokevirtual ? ConstantPoolCacheEntry::f2_offset() : ConstantPoolCacheEntry::f1_offset())); + const int flags_offset = in_bytes(cp_base_offset + ConstantPoolCacheEntry::flags_offset()); + // Access constant pool cache fields. + const int index_offset = in_bytes(cp_base_offset + ConstantPoolCacheEntry::f2_offset()); + + Register Rcache = R21_tmp1; // Note: same register as R21_sender_SP. + + if (is_invokevfinal) { + assert(Ritable_index == noreg, "register not used"); + // Already resolved. + __ get_cache_and_index_at_bcp(Rcache, 1); + } else { + resolve_cache_and_index(byte_no, Rcache, R0, is_invokedynamic ? sizeof(u4) : sizeof(u2)); + } + + __ ld(Rmethod, method_offset, Rcache); + __ ld(Rflags, flags_offset, Rcache); + + if (Ritable_index != noreg) { + __ ld(Ritable_index, index_offset, Rcache); + } +} + +// ============================================================================ +// Field access + +// Volatile variables demand their effects be made known to all CPU's +// in order. Store buffers on most chips allow reads & writes to +// reorder; the JMM's ReadAfterWrite.java test fails in -Xint mode +// without some kind of memory barrier (i.e., it's not sufficient that +// the interpreter does not reorder volatile references, the hardware +// also must not reorder them). +// +// According to the new Java Memory Model (JMM): +// (1) All volatiles are serialized wrt to each other. ALSO reads & +// writes act as aquire & release, so: +// (2) A read cannot let unrelated NON-volatile memory refs that +// happen after the read float up to before the read. It's OK for +// non-volatile memory refs that happen before the volatile read to +// float down below it. +// (3) Similar a volatile write cannot let unrelated NON-volatile +// memory refs that happen BEFORE the write float down to after the +// write. It's OK for non-volatile memory refs that happen after the +// volatile write to float up before it. +// +// We only put in barriers around volatile refs (they are expensive), +// not _between_ memory refs (that would require us to track the +// flavor of the previous memory refs). Requirements (2) and (3) +// require some barriers before volatile stores and after volatile +// loads. These nearly cover requirement (1) but miss the +// volatile-store-volatile-load case. This final case is placed after +// volatile-stores although it could just as well go before +// volatile-loads. + +// The registers cache and index expected to be set before call. +// Correct values of the cache and index registers are preserved. +// Kills: +// Rcache (if has_tos) +// Rscratch +void TemplateTable::jvmti_post_field_access(Register Rcache, Register Rscratch, bool is_static, bool has_tos) { + + assert_different_registers(Rcache, Rscratch); + + if (JvmtiExport::can_post_field_access()) { + ByteSize cp_base_offset = ConstantPoolCache::base_offset(); + Label Lno_field_access_post; + + // Check if post field access in enabled. + int offs = __ load_const_optimized(Rscratch, JvmtiExport::get_field_access_count_addr(), R0, true); + __ lwz(Rscratch, offs, Rscratch); + + __ cmpwi(CCR0, Rscratch, 0); + __ beq(CCR0, Lno_field_access_post); + + // Post access enabled - do it! + __ addi(Rcache, Rcache, in_bytes(cp_base_offset)); + if (is_static) { + __ li(R17_tos, 0); + } else { + if (has_tos) { + // The fast bytecode versions have obj ptr in register. + // Thus, save object pointer before call_VM() clobbers it + // put object on tos where GC wants it. + __ push_ptr(R17_tos); + } else { + // Load top of stack (do not pop the value off the stack). + __ ld(R17_tos, Interpreter::expr_offset_in_bytes(0), R15_esp); + } + __ verify_oop(R17_tos); + } + // tos: object pointer or NULL if static + // cache: cache entry pointer + __ call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::post_field_access), R17_tos, Rcache); + if (!is_static && has_tos) { + // Restore object pointer. + __ pop_ptr(R17_tos); + __ verify_oop(R17_tos); + } else { + // Cache is still needed to get class or obj. + __ get_cache_and_index_at_bcp(Rcache, 1); + } + + __ align(32, 12); + __ bind(Lno_field_access_post); + } +} + +// kills R11_scratch1 +void TemplateTable::pop_and_check_object(Register Roop) { + Register Rtmp = R11_scratch1; + + assert_different_registers(Rtmp, Roop); + __ pop_ptr(Roop); + // For field access must check obj. + __ null_check_throw(Roop, -1, Rtmp); + __ verify_oop(Roop); +} + +// PPC64: implement volatile loads as fence-store-acquire. +void TemplateTable::getfield_or_static(int byte_no, bool is_static) { + transition(vtos, vtos); + + Label Lacquire, Lisync; + + const Register Rcache = R3_ARG1, + Rclass_or_obj = R22_tmp2, + Roffset = R23_tmp3, + Rflags = R31, + Rbtable = R5_ARG3, + Rbc = R6_ARG4, + Rscratch = R12_scratch2; + + static address field_branch_table[number_of_states], + static_branch_table[number_of_states]; + + address* branch_table = is_static ? static_branch_table : field_branch_table; + + // Get field offset. + resolve_cache_and_index(byte_no, Rcache, Rscratch, sizeof(u2)); + + // JVMTI support + jvmti_post_field_access(Rcache, Rscratch, is_static, false); + + // Load after possible GC. + load_field_cp_cache_entry(Rclass_or_obj, Rcache, noreg, Roffset, Rflags, is_static); + + // Load pointer to branch table. + __ load_const_optimized(Rbtable, (address)branch_table, Rscratch); + + // Get volatile flag. + __ rldicl(Rscratch, Rflags, 64-ConstantPoolCacheEntry::is_volatile_shift, 63); // Extract volatile bit. + // Note: sync is needed before volatile load on PPC64. + + // Check field type. + __ rldicl(Rflags, Rflags, 64-ConstantPoolCacheEntry::tos_state_shift, 64-ConstantPoolCacheEntry::tos_state_bits); + +#ifdef ASSERT + Label LFlagInvalid; + __ cmpldi(CCR0, Rflags, number_of_states); + __ bge(CCR0, LFlagInvalid); +#endif + + // Load from branch table and dispatch (volatile case: one instruction ahead). + __ sldi(Rflags, Rflags, LogBytesPerWord); + __ cmpwi(CCR6, Rscratch, 1); // Volatile? + if (support_IRIW_for_not_multiple_copy_atomic_cpu) { + __ sldi(Rscratch, Rscratch, exact_log2(BytesPerInstWord)); // Volatile ? size of 1 instruction : 0. + } + __ ldx(Rbtable, Rbtable, Rflags); + + // Get the obj from stack. + if (!is_static) { + pop_and_check_object(Rclass_or_obj); // Kills R11_scratch1. + } else { + __ verify_oop(Rclass_or_obj); + } + + if (support_IRIW_for_not_multiple_copy_atomic_cpu) { + __ subf(Rbtable, Rscratch, Rbtable); // Point to volatile/non-volatile entry point. + } + __ mtctr(Rbtable); + __ bctr(); + +#ifdef ASSERT + __ bind(LFlagInvalid); + __ stop("got invalid flag", 0x654); + + // __ bind(Lvtos); + address pc_before_fence = __ pc(); + __ fence(); // Volatile entry point (one instruction before non-volatile_entry point). + assert(__ pc() - pc_before_fence == (ptrdiff_t)BytesPerInstWord, "must be single instruction"); + assert(branch_table[vtos] == 0, "can't compute twice"); + branch_table[vtos] = __ pc(); // non-volatile_entry point + __ stop("vtos unexpected", 0x655); +#endif + + __ align(32, 28, 28); // Align load. + // __ bind(Ldtos); + __ fence(); // Volatile entry point (one instruction before non-volatile_entry point). + assert(branch_table[dtos] == 0, "can't compute twice"); + branch_table[dtos] = __ pc(); // non-volatile_entry point + __ lfdx(F15_ftos, Rclass_or_obj, Roffset); + __ push(dtos); + if (!is_static) patch_bytecode(Bytecodes::_fast_dgetfield, Rbc, Rscratch); + { + Label acquire_double; + __ beq(CCR6, acquire_double); // Volatile? + __ dispatch_epilog(vtos, Bytecodes::length_for(bytecode())); + + __ bind(acquire_double); + __ fcmpu(CCR0, F15_ftos, F15_ftos); // Acquire by cmp-br-isync. + __ beq_predict_taken(CCR0, Lisync); + __ b(Lisync); // In case of NAN. + } + + __ align(32, 28, 28); // Align load. + // __ bind(Lftos); + __ fence(); // Volatile entry point (one instruction before non-volatile_entry point). + assert(branch_table[ftos] == 0, "can't compute twice"); + branch_table[ftos] = __ pc(); // non-volatile_entry point + __ lfsx(F15_ftos, Rclass_or_obj, Roffset); + __ push(ftos); + if (!is_static) { patch_bytecode(Bytecodes::_fast_fgetfield, Rbc, Rscratch); } + { + Label acquire_float; + __ beq(CCR6, acquire_float); // Volatile? + __ dispatch_epilog(vtos, Bytecodes::length_for(bytecode())); + + __ bind(acquire_float); + __ fcmpu(CCR0, F15_ftos, F15_ftos); // Acquire by cmp-br-isync. + __ beq_predict_taken(CCR0, Lisync); + __ b(Lisync); // In case of NAN. + } + + __ align(32, 28, 28); // Align load. + // __ bind(Litos); + __ fence(); // Volatile entry point (one instruction before non-volatile_entry point). + assert(branch_table[itos] == 0, "can't compute twice"); + branch_table[itos] = __ pc(); // non-volatile_entry point + __ lwax(R17_tos, Rclass_or_obj, Roffset); + __ push(itos); + if (!is_static) patch_bytecode(Bytecodes::_fast_igetfield, Rbc, Rscratch); + __ beq(CCR6, Lacquire); // Volatile? + __ dispatch_epilog(vtos, Bytecodes::length_for(bytecode())); + + __ align(32, 28, 28); // Align load. + // __ bind(Lltos); + __ fence(); // Volatile entry point (one instruction before non-volatile_entry point). + assert(branch_table[ltos] == 0, "can't compute twice"); + branch_table[ltos] = __ pc(); // non-volatile_entry point + __ ldx(R17_tos, Rclass_or_obj, Roffset); + __ push(ltos); + if (!is_static) patch_bytecode(Bytecodes::_fast_lgetfield, Rbc, Rscratch); + __ beq(CCR6, Lacquire); // Volatile? + __ dispatch_epilog(vtos, Bytecodes::length_for(bytecode())); + + __ align(32, 28, 28); // Align load. + // __ bind(Lbtos); + __ fence(); // Volatile entry point (one instruction before non-volatile_entry point). + assert(branch_table[btos] == 0, "can't compute twice"); + branch_table[btos] = __ pc(); // non-volatile_entry point + __ lbzx(R17_tos, Rclass_or_obj, Roffset); + __ extsb(R17_tos, R17_tos); + __ push(btos); + if (!is_static) patch_bytecode(Bytecodes::_fast_bgetfield, Rbc, Rscratch); + __ beq(CCR6, Lacquire); // Volatile? + __ dispatch_epilog(vtos, Bytecodes::length_for(bytecode())); + + __ align(32, 28, 28); // Align load. + // __ bind(Lctos); + __ fence(); // Volatile entry point (one instruction before non-volatile_entry point). + assert(branch_table[ctos] == 0, "can't compute twice"); + branch_table[ctos] = __ pc(); // non-volatile_entry point + __ lhzx(R17_tos, Rclass_or_obj, Roffset); + __ push(ctos); + if (!is_static) patch_bytecode(Bytecodes::_fast_cgetfield, Rbc, Rscratch); + __ beq(CCR6, Lacquire); // Volatile? + __ dispatch_epilog(vtos, Bytecodes::length_for(bytecode())); + + __ align(32, 28, 28); // Align load. + // __ bind(Lstos); + __ fence(); // Volatile entry point (one instruction before non-volatile_entry point). + assert(branch_table[stos] == 0, "can't compute twice"); + branch_table[stos] = __ pc(); // non-volatile_entry point + __ lhax(R17_tos, Rclass_or_obj, Roffset); + __ push(stos); + if (!is_static) patch_bytecode(Bytecodes::_fast_sgetfield, Rbc, Rscratch); + __ beq(CCR6, Lacquire); // Volatile? + __ dispatch_epilog(vtos, Bytecodes::length_for(bytecode())); + + __ align(32, 28, 28); // Align load. + // __ bind(Latos); + __ fence(); // Volatile entry point (one instruction before non-volatile_entry point). + assert(branch_table[atos] == 0, "can't compute twice"); + branch_table[atos] = __ pc(); // non-volatile_entry point + __ load_heap_oop(R17_tos, (RegisterOrConstant)Roffset, Rclass_or_obj); + __ verify_oop(R17_tos); + __ push(atos); + //__ dcbt(R17_tos); // prefetch + if (!is_static) patch_bytecode(Bytecodes::_fast_agetfield, Rbc, Rscratch); + __ beq(CCR6, Lacquire); // Volatile? + __ dispatch_epilog(vtos, Bytecodes::length_for(bytecode())); + + __ align(32, 12); + __ bind(Lacquire); + __ twi_0(R17_tos); + __ bind(Lisync); + __ isync(); // acquire + +#ifdef ASSERT + for (int i = 0; iprint_cr("get: %s_branch_table[%d] = 0x%llx (opcode 0x%llx)", + // is_static ? "static" : "field", i, branch_table[i], *((unsigned int*)branch_table[i])); + } +#endif +} + +void TemplateTable::getfield(int byte_no) { + getfield_or_static(byte_no, false); +} + +void TemplateTable::getstatic(int byte_no) { + getfield_or_static(byte_no, true); +} + +// The registers cache and index expected to be set before call. +// The function may destroy various registers, just not the cache and index registers. +void TemplateTable::jvmti_post_field_mod(Register Rcache, Register Rscratch, bool is_static) { + + assert_different_registers(Rcache, Rscratch, R6_ARG4); + + if (JvmtiExport::can_post_field_modification()) { + Label Lno_field_mod_post; + + // Check if post field access in enabled. + int offs = __ load_const_optimized(Rscratch, JvmtiExport::get_field_modification_count_addr(), R0, true); + __ lwz(Rscratch, offs, Rscratch); + + __ cmpwi(CCR0, Rscratch, 0); + __ beq(CCR0, Lno_field_mod_post); + + // Do the post + ByteSize cp_base_offset = ConstantPoolCache::base_offset(); + const Register Robj = Rscratch; + + __ addi(Rcache, Rcache, in_bytes(cp_base_offset)); + if (is_static) { + // Life is simple. Null out the object pointer. + __ li(Robj, 0); + } else { + // In case of the fast versions, value lives in registers => put it back on tos. + int offs = Interpreter::expr_offset_in_bytes(0); + Register base = R15_esp; + switch(bytecode()) { + case Bytecodes::_fast_aputfield: __ push_ptr(); offs+= Interpreter::stackElementSize; break; + case Bytecodes::_fast_iputfield: // Fall through + case Bytecodes::_fast_bputfield: // Fall through + case Bytecodes::_fast_cputfield: // Fall through + case Bytecodes::_fast_sputfield: __ push_i(); offs+= Interpreter::stackElementSize; break; + case Bytecodes::_fast_lputfield: __ push_l(); offs+=2*Interpreter::stackElementSize; break; + case Bytecodes::_fast_fputfield: __ push_f(); offs+= Interpreter::stackElementSize; break; + case Bytecodes::_fast_dputfield: __ push_d(); offs+=2*Interpreter::stackElementSize; break; + default: { + offs = 0; + base = Robj; + const Register Rflags = Robj; + Label is_one_slot; + // Life is harder. The stack holds the value on top, followed by the + // object. We don't know the size of the value, though; it could be + // one or two words depending on its type. As a result, we must find + // the type to determine where the object is. + __ ld(Rflags, in_bytes(ConstantPoolCacheEntry::flags_offset()), Rcache); // Big Endian + __ rldicl(Rflags, Rflags, 64-ConstantPoolCacheEntry::tos_state_shift, 64-ConstantPoolCacheEntry::tos_state_bits); + + __ cmpwi(CCR0, Rflags, ltos); + __ cmpwi(CCR1, Rflags, dtos); + __ addi(base, R15_esp, Interpreter::expr_offset_in_bytes(1)); + __ crnor(/*CR0 eq*/2, /*CR1 eq*/4+2, /*CR0 eq*/2); + __ beq(CCR0, is_one_slot); + __ addi(base, R15_esp, Interpreter::expr_offset_in_bytes(2)); + __ bind(is_one_slot); + break; + } + } + __ ld(Robj, offs, base); + __ verify_oop(Robj); + } + + __ addi(R6_ARG4, R15_esp, Interpreter::expr_offset_in_bytes(0)); + __ call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::post_field_modification), Robj, Rcache, R6_ARG4); + __ get_cache_and_index_at_bcp(Rcache, 1); + + // In case of the fast versions, value lives in registers => put it back on tos. + switch(bytecode()) { + case Bytecodes::_fast_aputfield: __ pop_ptr(); break; + case Bytecodes::_fast_iputfield: // Fall through + case Bytecodes::_fast_bputfield: // Fall through + case Bytecodes::_fast_cputfield: // Fall through + case Bytecodes::_fast_sputfield: __ pop_i(); break; + case Bytecodes::_fast_lputfield: __ pop_l(); break; + case Bytecodes::_fast_fputfield: __ pop_f(); break; + case Bytecodes::_fast_dputfield: __ pop_d(); break; + default: break; // Nothin' to do. + } + + __ align(32, 12); + __ bind(Lno_field_mod_post); + } +} + +// PPC64: implement volatile stores as release-store (return bytecode contains an additional release). +void TemplateTable::putfield_or_static(int byte_no, bool is_static) { + Label Lvolatile; + + const Register Rcache = R5_ARG3, // Do not use ARG1/2 (causes trouble in jvmti_post_field_mod). + Rclass_or_obj = R31, // Needs to survive C call. + Roffset = R22_tmp2, // Needs to survive C call. + Rflags = R3_ARG1, + Rbtable = R4_ARG2, + Rscratch = R11_scratch1, + Rscratch2 = R12_scratch2, + Rscratch3 = R6_ARG4, + Rbc = Rscratch3; + const ConditionRegister CR_is_vol = CCR2; // Non-volatile condition register (survives runtime call in do_oop_store). + + static address field_branch_table[number_of_states], + static_branch_table[number_of_states]; + + address* branch_table = is_static ? static_branch_table : field_branch_table; + + // Stack (grows up): + // value + // obj + + // Load the field offset. + resolve_cache_and_index(byte_no, Rcache, Rscratch, sizeof(u2)); + jvmti_post_field_mod(Rcache, Rscratch, is_static); + load_field_cp_cache_entry(Rclass_or_obj, Rcache, noreg, Roffset, Rflags, is_static); + + // Load pointer to branch table. + __ load_const_optimized(Rbtable, (address)branch_table, Rscratch); + + // Get volatile flag. + __ rldicl(Rscratch, Rflags, 64-ConstantPoolCacheEntry::is_volatile_shift, 63); // Extract volatile bit. + + // Check the field type. + __ rldicl(Rflags, Rflags, 64-ConstantPoolCacheEntry::tos_state_shift, 64-ConstantPoolCacheEntry::tos_state_bits); + +#ifdef ASSERT + Label LFlagInvalid; + __ cmpldi(CCR0, Rflags, number_of_states); + __ bge(CCR0, LFlagInvalid); +#endif + + // Load from branch table and dispatch (volatile case: one instruction ahead). + __ sldi(Rflags, Rflags, LogBytesPerWord); + if (!support_IRIW_for_not_multiple_copy_atomic_cpu) { __ cmpwi(CR_is_vol, Rscratch, 1); } // Volatile? + __ sldi(Rscratch, Rscratch, exact_log2(BytesPerInstWord)); // Volatile? size of instruction 1 : 0. + __ ldx(Rbtable, Rbtable, Rflags); + + __ subf(Rbtable, Rscratch, Rbtable); // Point to volatile/non-volatile entry point. + __ mtctr(Rbtable); + __ bctr(); + +#ifdef ASSERT + __ bind(LFlagInvalid); + __ stop("got invalid flag", 0x656); + + // __ bind(Lvtos); + address pc_before_release = __ pc(); + __ release(); // Volatile entry point (one instruction before non-volatile_entry point). + assert(__ pc() - pc_before_release == (ptrdiff_t)BytesPerInstWord, "must be single instruction"); + assert(branch_table[vtos] == 0, "can't compute twice"); + branch_table[vtos] = __ pc(); // non-volatile_entry point + __ stop("vtos unexpected", 0x657); +#endif + + __ align(32, 28, 28); // Align pop. + // __ bind(Ldtos); + __ release(); // Volatile entry point (one instruction before non-volatile_entry point). + assert(branch_table[dtos] == 0, "can't compute twice"); + branch_table[dtos] = __ pc(); // non-volatile_entry point + __ pop(dtos); + if (!is_static) { pop_and_check_object(Rclass_or_obj); } // Kills R11_scratch1. + __ stfdx(F15_ftos, Rclass_or_obj, Roffset); + if (!is_static) { patch_bytecode(Bytecodes::_fast_dputfield, Rbc, Rscratch, true, byte_no); } + if (!support_IRIW_for_not_multiple_copy_atomic_cpu) { + __ beq(CR_is_vol, Lvolatile); // Volatile? + } + __ dispatch_epilog(vtos, Bytecodes::length_for(bytecode())); + + __ align(32, 28, 28); // Align pop. + // __ bind(Lftos); + __ release(); // Volatile entry point (one instruction before non-volatile_entry point). + assert(branch_table[ftos] == 0, "can't compute twice"); + branch_table[ftos] = __ pc(); // non-volatile_entry point + __ pop(ftos); + if (!is_static) { pop_and_check_object(Rclass_or_obj); } // Kills R11_scratch1. + __ stfsx(F15_ftos, Rclass_or_obj, Roffset); + if (!is_static) { patch_bytecode(Bytecodes::_fast_fputfield, Rbc, Rscratch, true, byte_no); } + if (!support_IRIW_for_not_multiple_copy_atomic_cpu) { + __ beq(CR_is_vol, Lvolatile); // Volatile? + } + __ dispatch_epilog(vtos, Bytecodes::length_for(bytecode())); + + __ align(32, 28, 28); // Align pop. + // __ bind(Litos); + __ release(); // Volatile entry point (one instruction before non-volatile_entry point). + assert(branch_table[itos] == 0, "can't compute twice"); + branch_table[itos] = __ pc(); // non-volatile_entry point + __ pop(itos); + if (!is_static) { pop_and_check_object(Rclass_or_obj); } // Kills R11_scratch1. + __ stwx(R17_tos, Rclass_or_obj, Roffset); + if (!is_static) { patch_bytecode(Bytecodes::_fast_iputfield, Rbc, Rscratch, true, byte_no); } + if (!support_IRIW_for_not_multiple_copy_atomic_cpu) { + __ beq(CR_is_vol, Lvolatile); // Volatile? + } + __ dispatch_epilog(vtos, Bytecodes::length_for(bytecode())); + + __ align(32, 28, 28); // Align pop. + // __ bind(Lltos); + __ release(); // Volatile entry point (one instruction before non-volatile_entry point). + assert(branch_table[ltos] == 0, "can't compute twice"); + branch_table[ltos] = __ pc(); // non-volatile_entry point + __ pop(ltos); + if (!is_static) { pop_and_check_object(Rclass_or_obj); } // Kills R11_scratch1. + __ stdx(R17_tos, Rclass_or_obj, Roffset); + if (!is_static) { patch_bytecode(Bytecodes::_fast_lputfield, Rbc, Rscratch, true, byte_no); } + if (!support_IRIW_for_not_multiple_copy_atomic_cpu) { + __ beq(CR_is_vol, Lvolatile); // Volatile? + } + __ dispatch_epilog(vtos, Bytecodes::length_for(bytecode())); + + __ align(32, 28, 28); // Align pop. + // __ bind(Lbtos); + __ release(); // Volatile entry point (one instruction before non-volatile_entry point). + assert(branch_table[btos] == 0, "can't compute twice"); + branch_table[btos] = __ pc(); // non-volatile_entry point + __ pop(btos); + if (!is_static) { pop_and_check_object(Rclass_or_obj); } // Kills R11_scratch1. + __ stbx(R17_tos, Rclass_or_obj, Roffset); + if (!is_static) { patch_bytecode(Bytecodes::_fast_bputfield, Rbc, Rscratch, true, byte_no); } + if (!support_IRIW_for_not_multiple_copy_atomic_cpu) { + __ beq(CR_is_vol, Lvolatile); // Volatile? + } + __ dispatch_epilog(vtos, Bytecodes::length_for(bytecode())); + + __ align(32, 28, 28); // Align pop. + // __ bind(Lctos); + __ release(); // Volatile entry point (one instruction before non-volatile_entry point). + assert(branch_table[ctos] == 0, "can't compute twice"); + branch_table[ctos] = __ pc(); // non-volatile_entry point + __ pop(ctos); + if (!is_static) { pop_and_check_object(Rclass_or_obj); } // Kills R11_scratch1.. + __ sthx(R17_tos, Rclass_or_obj, Roffset); + if (!is_static) { patch_bytecode(Bytecodes::_fast_cputfield, Rbc, Rscratch, true, byte_no); } + if (!support_IRIW_for_not_multiple_copy_atomic_cpu) { + __ beq(CR_is_vol, Lvolatile); // Volatile? + } + __ dispatch_epilog(vtos, Bytecodes::length_for(bytecode())); + + __ align(32, 28, 28); // Align pop. + // __ bind(Lstos); + __ release(); // Volatile entry point (one instruction before non-volatile_entry point). + assert(branch_table[stos] == 0, "can't compute twice"); + branch_table[stos] = __ pc(); // non-volatile_entry point + __ pop(stos); + if (!is_static) { pop_and_check_object(Rclass_or_obj); } // Kills R11_scratch1. + __ sthx(R17_tos, Rclass_or_obj, Roffset); + if (!is_static) { patch_bytecode(Bytecodes::_fast_sputfield, Rbc, Rscratch, true, byte_no); } + if (!support_IRIW_for_not_multiple_copy_atomic_cpu) { + __ beq(CR_is_vol, Lvolatile); // Volatile? + } + __ dispatch_epilog(vtos, Bytecodes::length_for(bytecode())); + + __ align(32, 28, 28); // Align pop. + // __ bind(Latos); + __ release(); // Volatile entry point (one instruction before non-volatile_entry point). + assert(branch_table[atos] == 0, "can't compute twice"); + branch_table[atos] = __ pc(); // non-volatile_entry point + __ pop(atos); + if (!is_static) { pop_and_check_object(Rclass_or_obj); } // kills R11_scratch1 + do_oop_store(_masm, Rclass_or_obj, Roffset, R17_tos, Rscratch, Rscratch2, Rscratch3, _bs->kind(), false /* precise */, true /* check null */); + if (!is_static) { patch_bytecode(Bytecodes::_fast_aputfield, Rbc, Rscratch, true, byte_no); } + if (!support_IRIW_for_not_multiple_copy_atomic_cpu) { + __ beq(CR_is_vol, Lvolatile); // Volatile? + __ dispatch_epilog(vtos, Bytecodes::length_for(bytecode())); + + __ align(32, 12); + __ bind(Lvolatile); + __ fence(); + } + // fallthru: __ b(Lexit); + +#ifdef ASSERT + for (int i = 0; iprint_cr("put: %s_branch_table[%d] = 0x%llx (opcode 0x%llx)", + // is_static ? "static" : "field", i, branch_table[i], *((unsigned int*)branch_table[i])); + } +#endif +} + +void TemplateTable::putfield(int byte_no) { + putfield_or_static(byte_no, false); +} + +void TemplateTable::putstatic(int byte_no) { + putfield_or_static(byte_no, true); +} + +// See SPARC. On PPC64, we have a different jvmti_post_field_mod which does the job. +void TemplateTable::jvmti_post_fast_field_mod() { + __ should_not_reach_here(); +} + +void TemplateTable::fast_storefield(TosState state) { + transition(state, vtos); + + const Register Rcache = R5_ARG3, // Do not use ARG1/2 (causes trouble in jvmti_post_field_mod). + Rclass_or_obj = R31, // Needs to survive C call. + Roffset = R22_tmp2, // Needs to survive C call. + Rflags = R3_ARG1, + Rscratch = R11_scratch1, + Rscratch2 = R12_scratch2, + Rscratch3 = R4_ARG2; + const ConditionRegister CR_is_vol = CCR2; // Non-volatile condition register (survives runtime call in do_oop_store). + + // Constant pool already resolved => Load flags and offset of field. + __ get_cache_and_index_at_bcp(Rcache, 1); + jvmti_post_field_mod(Rcache, Rscratch, false /* not static */); + load_field_cp_cache_entry(noreg, Rcache, noreg, Roffset, Rflags, false); + + // Get the obj and the final store addr. + pop_and_check_object(Rclass_or_obj); // Kills R11_scratch1. + + // Get volatile flag. + __ rldicl_(Rscratch, Rflags, 64-ConstantPoolCacheEntry::is_volatile_shift, 63); // Extract volatile bit. + if (!support_IRIW_for_not_multiple_copy_atomic_cpu) { __ cmpdi(CR_is_vol, Rscratch, 1); } + { + Label LnotVolatile; + __ beq(CCR0, LnotVolatile); + __ release(); + __ align(32, 12); + __ bind(LnotVolatile); + } + + // Do the store and fencing. + switch(bytecode()) { + case Bytecodes::_fast_aputfield: + // Store into the field. + do_oop_store(_masm, Rclass_or_obj, Roffset, R17_tos, Rscratch, Rscratch2, Rscratch3, _bs->kind(), false /* precise */, true /* check null */); + break; + + case Bytecodes::_fast_iputfield: + __ stwx(R17_tos, Rclass_or_obj, Roffset); + break; + + case Bytecodes::_fast_lputfield: + __ stdx(R17_tos, Rclass_or_obj, Roffset); + break; + + case Bytecodes::_fast_bputfield: + __ stbx(R17_tos, Rclass_or_obj, Roffset); + break; + + case Bytecodes::_fast_cputfield: + case Bytecodes::_fast_sputfield: + __ sthx(R17_tos, Rclass_or_obj, Roffset); + break; + + case Bytecodes::_fast_fputfield: + __ stfsx(F15_ftos, Rclass_or_obj, Roffset); + break; + + case Bytecodes::_fast_dputfield: + __ stfdx(F15_ftos, Rclass_or_obj, Roffset); + break; + + default: ShouldNotReachHere(); + } + + if (!support_IRIW_for_not_multiple_copy_atomic_cpu) { + Label LVolatile; + __ beq(CR_is_vol, LVolatile); + __ dispatch_epilog(vtos, Bytecodes::length_for(bytecode())); + + __ align(32, 12); + __ bind(LVolatile); + __ fence(); + } +} + +void TemplateTable::fast_accessfield(TosState state) { + transition(atos, state); + + Label LisVolatile; + ByteSize cp_base_offset = ConstantPoolCache::base_offset(); + + const Register Rcache = R3_ARG1, + Rclass_or_obj = R17_tos, + Roffset = R22_tmp2, + Rflags = R23_tmp3, + Rscratch = R12_scratch2; + + // Constant pool already resolved. Get the field offset. + __ get_cache_and_index_at_bcp(Rcache, 1); + load_field_cp_cache_entry(noreg, Rcache, noreg, Roffset, Rflags, false); + + // JVMTI support + jvmti_post_field_access(Rcache, Rscratch, false, true); + + // Get the load address. + __ null_check_throw(Rclass_or_obj, -1, Rscratch); + + // Get volatile flag. + __ rldicl_(Rscratch, Rflags, 64-ConstantPoolCacheEntry::is_volatile_shift, 63); // Extract volatile bit. + __ bne(CCR0, LisVolatile); + + switch(bytecode()) { + case Bytecodes::_fast_agetfield: + { + __ load_heap_oop(R17_tos, (RegisterOrConstant)Roffset, Rclass_or_obj); + __ verify_oop(R17_tos); + __ dispatch_epilog(state, Bytecodes::length_for(bytecode())); + + __ bind(LisVolatile); + if (support_IRIW_for_not_multiple_copy_atomic_cpu) { __ fence(); } + __ load_heap_oop(R17_tos, (RegisterOrConstant)Roffset, Rclass_or_obj); + __ verify_oop(R17_tos); + __ twi_0(R17_tos); + __ isync(); + break; + } + case Bytecodes::_fast_igetfield: + { + __ lwax(R17_tos, Rclass_or_obj, Roffset); + __ dispatch_epilog(state, Bytecodes::length_for(bytecode())); + + __ bind(LisVolatile); + if (support_IRIW_for_not_multiple_copy_atomic_cpu) { __ fence(); } + __ lwax(R17_tos, Rclass_or_obj, Roffset); + __ twi_0(R17_tos); + __ isync(); + break; + } + case Bytecodes::_fast_lgetfield: + { + __ ldx(R17_tos, Rclass_or_obj, Roffset); + __ dispatch_epilog(state, Bytecodes::length_for(bytecode())); + + __ bind(LisVolatile); + if (support_IRIW_for_not_multiple_copy_atomic_cpu) { __ fence(); } + __ ldx(R17_tos, Rclass_or_obj, Roffset); + __ twi_0(R17_tos); + __ isync(); + break; + } + case Bytecodes::_fast_bgetfield: + { + __ lbzx(R17_tos, Rclass_or_obj, Roffset); + __ extsb(R17_tos, R17_tos); + __ dispatch_epilog(state, Bytecodes::length_for(bytecode())); + + __ bind(LisVolatile); + if (support_IRIW_for_not_multiple_copy_atomic_cpu) { __ fence(); } + __ lbzx(R17_tos, Rclass_or_obj, Roffset); + __ twi_0(R17_tos); + __ extsb(R17_tos, R17_tos); + __ isync(); + break; + } + case Bytecodes::_fast_cgetfield: + { + __ lhzx(R17_tos, Rclass_or_obj, Roffset); + __ dispatch_epilog(state, Bytecodes::length_for(bytecode())); + + __ bind(LisVolatile); + if (support_IRIW_for_not_multiple_copy_atomic_cpu) { __ fence(); } + __ lhzx(R17_tos, Rclass_or_obj, Roffset); + __ twi_0(R17_tos); + __ isync(); + break; + } + case Bytecodes::_fast_sgetfield: + { + __ lhax(R17_tos, Rclass_or_obj, Roffset); + __ dispatch_epilog(state, Bytecodes::length_for(bytecode())); + + __ bind(LisVolatile); + if (support_IRIW_for_not_multiple_copy_atomic_cpu) { __ fence(); } + __ lhax(R17_tos, Rclass_or_obj, Roffset); + __ twi_0(R17_tos); + __ isync(); + break; + } + case Bytecodes::_fast_fgetfield: + { + __ lfsx(F15_ftos, Rclass_or_obj, Roffset); + __ dispatch_epilog(state, Bytecodes::length_for(bytecode())); + + __ bind(LisVolatile); + Label Ldummy; + if (support_IRIW_for_not_multiple_copy_atomic_cpu) { __ fence(); } + __ lfsx(F15_ftos, Rclass_or_obj, Roffset); + __ fcmpu(CCR0, F15_ftos, F15_ftos); // Acquire by cmp-br-isync. + __ bne_predict_not_taken(CCR0, Ldummy); + __ bind(Ldummy); + __ isync(); + break; + } + case Bytecodes::_fast_dgetfield: + { + __ lfdx(F15_ftos, Rclass_or_obj, Roffset); + __ dispatch_epilog(state, Bytecodes::length_for(bytecode())); + + __ bind(LisVolatile); + Label Ldummy; + if (support_IRIW_for_not_multiple_copy_atomic_cpu) { __ fence(); } + __ lfdx(F15_ftos, Rclass_or_obj, Roffset); + __ fcmpu(CCR0, F15_ftos, F15_ftos); // Acquire by cmp-br-isync. + __ bne_predict_not_taken(CCR0, Ldummy); + __ bind(Ldummy); + __ isync(); + break; + } + default: ShouldNotReachHere(); + } +} + +void TemplateTable::fast_xaccess(TosState state) { + transition(vtos, state); + + Label LisVolatile; + ByteSize cp_base_offset = ConstantPoolCache::base_offset(); + const Register Rcache = R3_ARG1, + Rclass_or_obj = R17_tos, + Roffset = R22_tmp2, + Rflags = R23_tmp3, + Rscratch = R12_scratch2; + + __ ld(Rclass_or_obj, 0, R18_locals); + + // Constant pool already resolved. Get the field offset. + __ get_cache_and_index_at_bcp(Rcache, 2); + load_field_cp_cache_entry(noreg, Rcache, noreg, Roffset, Rflags, false); + + // JVMTI support not needed, since we switch back to single bytecode as soon as debugger attaches. + + // Needed to report exception at the correct bcp. + __ addi(R14_bcp, R14_bcp, 1); + + // Get the load address. + __ null_check_throw(Rclass_or_obj, -1, Rscratch); + + // Get volatile flag. + __ rldicl_(Rscratch, Rflags, 64-ConstantPoolCacheEntry::is_volatile_shift, 63); // Extract volatile bit. + __ bne(CCR0, LisVolatile); + + switch(state) { + case atos: + { + __ load_heap_oop(R17_tos, (RegisterOrConstant)Roffset, Rclass_or_obj); + __ verify_oop(R17_tos); + __ dispatch_epilog(state, Bytecodes::length_for(bytecode()) - 1); // Undo bcp increment. + + __ bind(LisVolatile); + if (support_IRIW_for_not_multiple_copy_atomic_cpu) { __ fence(); } + __ load_heap_oop(R17_tos, (RegisterOrConstant)Roffset, Rclass_or_obj); + __ verify_oop(R17_tos); + __ twi_0(R17_tos); + __ isync(); + break; + } + case itos: + { + __ lwax(R17_tos, Rclass_or_obj, Roffset); + __ dispatch_epilog(state, Bytecodes::length_for(bytecode()) - 1); // Undo bcp increment. + + __ bind(LisVolatile); + if (support_IRIW_for_not_multiple_copy_atomic_cpu) { __ fence(); } + __ lwax(R17_tos, Rclass_or_obj, Roffset); + __ twi_0(R17_tos); + __ isync(); + break; + } + case ftos: + { + __ lfsx(F15_ftos, Rclass_or_obj, Roffset); + __ dispatch_epilog(state, Bytecodes::length_for(bytecode()) - 1); // Undo bcp increment. + + __ bind(LisVolatile); + Label Ldummy; + if (support_IRIW_for_not_multiple_copy_atomic_cpu) { __ fence(); } + __ lfsx(F15_ftos, Rclass_or_obj, Roffset); + __ fcmpu(CCR0, F15_ftos, F15_ftos); // Acquire by cmp-br-isync. + __ bne_predict_not_taken(CCR0, Ldummy); + __ bind(Ldummy); + __ isync(); + break; + } + default: ShouldNotReachHere(); + } + __ addi(R14_bcp, R14_bcp, -1); +} + +// ============================================================================ +// Calls + +// Common code for invoke +// +// Input: +// - byte_no +// +// Output: +// - Rmethod: The method to invoke next. +// - Rret_addr: The return address to return to. +// - Rindex: MethodType (invokehandle) or CallSite obj (invokedynamic) +// - Rrecv: Cache for "this" pointer, might be noreg if static call. +// - Rflags: Method flags from const pool cache. +// +// Kills: +// - Rscratch1 +// +void TemplateTable::prepare_invoke(int byte_no, + Register Rmethod, // linked method (or i-klass) + Register Rret_addr,// return address + Register Rindex, // itable index, MethodType, etc. + Register Rrecv, // If caller wants to see it. + Register Rflags, // If caller wants to test it. + Register Rscratch + ) { + // Determine flags. + const Bytecodes::Code code = bytecode(); + const bool is_invokeinterface = code == Bytecodes::_invokeinterface; + const bool is_invokedynamic = code == Bytecodes::_invokedynamic; + const bool is_invokehandle = code == Bytecodes::_invokehandle; + const bool is_invokevirtual = code == Bytecodes::_invokevirtual; + const bool is_invokespecial = code == Bytecodes::_invokespecial; + const bool load_receiver = (Rrecv != noreg); + assert(load_receiver == (code != Bytecodes::_invokestatic && code != Bytecodes::_invokedynamic), ""); + + assert_different_registers(Rmethod, Rindex, Rflags, Rscratch); + assert_different_registers(Rmethod, Rrecv, Rflags, Rscratch); + assert_different_registers(Rret_addr, Rscratch); + + load_invoke_cp_cache_entry(byte_no, Rmethod, Rindex, Rflags, is_invokevirtual, false, is_invokedynamic); + + // Saving of SP done in call_from_interpreter. + + // Maybe push "appendix" to arguments. + if (is_invokedynamic || is_invokehandle) { + Label Ldone; + __ rldicl_(R0, Rflags, 64-ConstantPoolCacheEntry::has_appendix_shift, 63); + __ beq(CCR0, Ldone); + // Push "appendix" (MethodType, CallSite, etc.). + // This must be done before we get the receiver, + // since the parameter_size includes it. + __ load_resolved_reference_at_index(Rscratch, Rindex); + __ verify_oop(Rscratch); + __ push_ptr(Rscratch); + __ bind(Ldone); + } + + // Load receiver if needed (after appendix is pushed so parameter size is correct). + if (load_receiver) { + const Register Rparam_count = Rscratch; + __ andi(Rparam_count, Rflags, ConstantPoolCacheEntry::parameter_size_mask); + __ load_receiver(Rparam_count, Rrecv); + __ verify_oop(Rrecv); + } + + // Get return address. + { + Register Rtable_addr = Rscratch; + Register Rret_type = Rret_addr; + address table_addr = (address) Interpreter::invoke_return_entry_table_for(code); + + // Get return type. It's coded into the upper 4 bits of the lower half of the 64 bit value. + __ rldicl(Rret_type, Rflags, 64-ConstantPoolCacheEntry::tos_state_shift, 64-ConstantPoolCacheEntry::tos_state_bits); + __ load_dispatch_table(Rtable_addr, (address*)table_addr); + __ sldi(Rret_type, Rret_type, LogBytesPerWord); + // Get return address. + __ ldx(Rret_addr, Rtable_addr, Rret_type); + } +} + +// Helper for virtual calls. Load target out of vtable and jump off! +// Kills all passed registers. +void TemplateTable::generate_vtable_call(Register Rrecv_klass, Register Rindex, Register Rret, Register Rtemp) { + + assert_different_registers(Rrecv_klass, Rtemp, Rret); + const Register Rtarget_method = Rindex; + + // Get target method & entry point. + const int base = InstanceKlass::vtable_start_offset() * wordSize; + // Calc vtable addr scale the vtable index by 8. + __ sldi(Rindex, Rindex, exact_log2(vtableEntry::size() * wordSize)); + // Load target. + __ addi(Rrecv_klass, Rrecv_klass, base + vtableEntry::method_offset_in_bytes()); + __ ldx(Rtarget_method, Rindex, Rrecv_klass); + __ call_from_interpreter(Rtarget_method, Rret, Rrecv_klass /* scratch1 */, Rtemp /* scratch2 */); +} + +// Virtual or final call. Final calls are rewritten on the fly to run through "fast_finalcall" next time. +void TemplateTable::invokevirtual(int byte_no) { + transition(vtos, vtos); + + Register Rtable_addr = R11_scratch1, + Rret_type = R12_scratch2, + Rret_addr = R5_ARG3, + Rflags = R22_tmp2, // Should survive C call. + Rrecv = R3_ARG1, + Rrecv_klass = Rrecv, + Rvtableindex_or_method = R31, // Should survive C call. + Rnum_params = R4_ARG2, + Rnew_bc = R6_ARG4; + + Label LnotFinal; + + load_invoke_cp_cache_entry(byte_no, Rvtableindex_or_method, noreg, Rflags, /*virtual*/ true, false, false); + + __ testbitdi(CCR0, R0, Rflags, ConstantPoolCacheEntry::is_vfinal_shift); + __ bfalse(CCR0, LnotFinal); + + patch_bytecode(Bytecodes::_fast_invokevfinal, Rnew_bc, R12_scratch2); + invokevfinal_helper(Rvtableindex_or_method, Rflags, R11_scratch1, R12_scratch2); + + __ align(32, 12); + __ bind(LnotFinal); + // Load "this" pointer (receiver). + __ rldicl(Rnum_params, Rflags, 64, 48); + __ load_receiver(Rnum_params, Rrecv); + __ verify_oop(Rrecv); + + // Get return type. It's coded into the upper 4 bits of the lower half of the 64 bit value. + __ rldicl(Rret_type, Rflags, 64-ConstantPoolCacheEntry::tos_state_shift, 64-ConstantPoolCacheEntry::tos_state_bits); + __ load_dispatch_table(Rtable_addr, Interpreter::invoke_return_entry_table()); + __ sldi(Rret_type, Rret_type, LogBytesPerWord); + __ ldx(Rret_addr, Rret_type, Rtable_addr); + __ null_check_throw(Rrecv, oopDesc::klass_offset_in_bytes(), R11_scratch1); + __ load_klass(Rrecv_klass, Rrecv); + __ verify_klass_ptr(Rrecv_klass); + __ profile_virtual_call(Rrecv_klass, R11_scratch1, R12_scratch2, false); + + generate_vtable_call(Rrecv_klass, Rvtableindex_or_method, Rret_addr, R11_scratch1); +} + +void TemplateTable::fast_invokevfinal(int byte_no) { + transition(vtos, vtos); + + assert(byte_no == f2_byte, "use this argument"); + Register Rflags = R22_tmp2, + Rmethod = R31; + load_invoke_cp_cache_entry(byte_no, Rmethod, noreg, Rflags, /*virtual*/ true, /*is_invokevfinal*/ true, false); + invokevfinal_helper(Rmethod, Rflags, R11_scratch1, R12_scratch2); +} + +void TemplateTable::invokevfinal_helper(Register Rmethod, Register Rflags, Register Rscratch1, Register Rscratch2) { + + assert_different_registers(Rmethod, Rflags, Rscratch1, Rscratch2); + + // Load receiver from stack slot. + Register Rrecv = Rscratch2; + Register Rnum_params = Rrecv; + + __ ld(Rnum_params, in_bytes(Method::const_offset()), Rmethod); + __ lhz(Rnum_params /* number of params */, in_bytes(ConstMethod::size_of_parameters_offset()), Rnum_params); + + // Get return address. + Register Rtable_addr = Rscratch1, + Rret_addr = Rflags, + Rret_type = Rret_addr; + // Get return type. It's coded into the upper 4 bits of the lower half of the 64 bit value. + __ rldicl(Rret_type, Rflags, 64-ConstantPoolCacheEntry::tos_state_shift, 64-ConstantPoolCacheEntry::tos_state_bits); + __ load_dispatch_table(Rtable_addr, Interpreter::invoke_return_entry_table()); + __ sldi(Rret_type, Rret_type, LogBytesPerWord); + __ ldx(Rret_addr, Rret_type, Rtable_addr); + + // Load receiver and receiver NULL check. + __ load_receiver(Rnum_params, Rrecv); + __ null_check_throw(Rrecv, -1, Rscratch1); + + __ profile_final_call(Rrecv, Rscratch1); + + // Do the call. + __ call_from_interpreter(Rmethod, Rret_addr, Rscratch1, Rscratch2); +} + +void TemplateTable::invokespecial(int byte_no) { + assert(byte_no == f1_byte, "use this argument"); + transition(vtos, vtos); + + Register Rtable_addr = R3_ARG1, + Rret_addr = R4_ARG2, + Rflags = R5_ARG3, + Rreceiver = R6_ARG4, + Rmethod = R31; + + prepare_invoke(byte_no, Rmethod, Rret_addr, noreg, Rreceiver, Rflags, R11_scratch1); + + // Receiver NULL check. + __ null_check_throw(Rreceiver, -1, R11_scratch1); + + __ profile_call(R11_scratch1, R12_scratch2); + __ call_from_interpreter(Rmethod, Rret_addr, R11_scratch1, R12_scratch2); +} + +void TemplateTable::invokestatic(int byte_no) { + assert(byte_no == f1_byte, "use this argument"); + transition(vtos, vtos); + + Register Rtable_addr = R3_ARG1, + Rret_addr = R4_ARG2, + Rflags = R5_ARG3; + + prepare_invoke(byte_no, R19_method, Rret_addr, noreg, noreg, Rflags, R11_scratch1); + + __ profile_call(R11_scratch1, R12_scratch2); + __ call_from_interpreter(R19_method, Rret_addr, R11_scratch1, R12_scratch2); +} + +void TemplateTable::invokeinterface_object_method(Register Rrecv_klass, + Register Rret, + Register Rflags, + Register Rindex, + Register Rtemp1, + Register Rtemp2) { + + assert_different_registers(Rindex, Rret, Rrecv_klass, Rflags, Rtemp1, Rtemp2); + Label LnotFinal; + + // Check for vfinal. + __ testbitdi(CCR0, R0, Rflags, ConstantPoolCacheEntry::is_vfinal_shift); + __ bfalse(CCR0, LnotFinal); + + Register Rscratch = Rflags; // Rflags is dead now. + + // Final call case. + __ profile_final_call(Rtemp1, Rscratch); + // Do the final call - the index (f2) contains the method. + __ call_from_interpreter(Rindex, Rret, Rscratch, Rrecv_klass /* scratch */); + + // Non-final callc case. + __ bind(LnotFinal); + __ profile_virtual_call(Rrecv_klass, Rtemp1, Rscratch, false); + generate_vtable_call(Rrecv_klass, Rindex, Rret, Rscratch); +} + +void TemplateTable::invokeinterface(int byte_no) { + assert(byte_no == f1_byte, "use this argument"); + transition(vtos, vtos); + + const Register Rscratch1 = R11_scratch1, + Rscratch2 = R12_scratch2, + Rscratch3 = R9_ARG7, + Rscratch4 = R10_ARG8, + Rtable_addr = Rscratch2, + Rinterface_klass = R5_ARG3, + Rret_type = R8_ARG6, + Rret_addr = Rret_type, + Rindex = R6_ARG4, + Rreceiver = R4_ARG2, + Rrecv_klass = Rreceiver, + Rflags = R7_ARG5; + + prepare_invoke(byte_no, Rinterface_klass, Rret_addr, Rindex, Rreceiver, Rflags, Rscratch1); + + // Get receiver klass. + __ null_check_throw(Rreceiver, oopDesc::klass_offset_in_bytes(), Rscratch3); + __ load_klass(Rrecv_klass, Rreceiver); + + // Check corner case object method. + Label LobjectMethod; + + __ testbitdi(CCR0, R0, Rflags, ConstantPoolCacheEntry::is_forced_virtual_shift); + __ btrue(CCR0, LobjectMethod); + + // Fallthrough: The normal invokeinterface case. + __ profile_virtual_call(Rrecv_klass, Rscratch1, Rscratch2, false); + + // Find entry point to call. + Label Lthrow_icc, Lthrow_ame; + // Result will be returned in Rindex. + __ mr(Rscratch4, Rrecv_klass); + __ mr(Rscratch3, Rindex); + __ lookup_interface_method(Rrecv_klass, Rinterface_klass, Rindex, Rindex, Rscratch1, Rscratch2, Lthrow_icc); + + __ cmpdi(CCR0, Rindex, 0); + __ beq(CCR0, Lthrow_ame); + // Found entry. Jump off! + __ call_from_interpreter(Rindex, Rret_addr, Rscratch1, Rscratch2); + + // Vtable entry was NULL => Throw abstract method error. + __ bind(Lthrow_ame); + __ mr(Rrecv_klass, Rscratch4); + __ mr(Rindex, Rscratch3); + call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::throw_AbstractMethodError)); + + // Interface was not found => Throw incompatible class change error. + __ bind(Lthrow_icc); + __ mr(Rrecv_klass, Rscratch4); + call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::throw_IncompatibleClassChangeError)); + + __ should_not_reach_here(); + + // Special case of invokeinterface called for virtual method of + // java.lang.Object. See ConstantPoolCacheEntry::set_method() for details: + // The invokeinterface was rewritten to a invokevirtual, hence we have + // to handle this corner case. This code isn't produced by javac, but could + // be produced by another compliant java compiler. + __ bind(LobjectMethod); + invokeinterface_object_method(Rrecv_klass, Rret_addr, Rflags, Rindex, Rscratch1, Rscratch2); +} + +void TemplateTable::invokedynamic(int byte_no) { + transition(vtos, vtos); + + const Register Rret_addr = R3_ARG1, + Rflags = R4_ARG2, + Rmethod = R22_tmp2, + Rscratch1 = R11_scratch1, + Rscratch2 = R12_scratch2; + + if (!EnableInvokeDynamic) { + // We should not encounter this bytecode if !EnableInvokeDynamic. + // The verifier will stop it. However, if we get past the verifier, + // this will stop the thread in a reasonable way, without crashing the JVM. + __ call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::throw_IncompatibleClassChangeError)); + // The call_VM checks for exception, so we should never return here. + __ should_not_reach_here(); + return; + } + + prepare_invoke(byte_no, Rmethod, Rret_addr, Rscratch1, noreg, Rflags, Rscratch2); + + // Profile this call. + __ profile_call(Rscratch1, Rscratch2); + + // Off we go. With the new method handles, we don't jump to a method handle + // entry any more. Instead, we pushed an "appendix" in prepare invoke, which happens + // to be the callsite object the bootstrap method returned. This is passed to a + // "link" method which does the dispatch (Most likely just grabs the MH stored + // inside the callsite and does an invokehandle). + __ call_from_interpreter(Rmethod, Rret_addr, Rscratch1 /* scratch1 */, Rscratch2 /* scratch2 */); +} + +void TemplateTable::invokehandle(int byte_no) { + transition(vtos, vtos); + + const Register Rret_addr = R3_ARG1, + Rflags = R4_ARG2, + Rrecv = R5_ARG3, + Rmethod = R22_tmp2, + Rscratch1 = R11_scratch1, + Rscratch2 = R12_scratch2; + + if (!EnableInvokeDynamic) { + // Rewriter does not generate this bytecode. + __ should_not_reach_here(); + return; + } + + prepare_invoke(byte_no, Rmethod, Rret_addr, Rscratch1, Rrecv, Rflags, Rscratch2); + __ verify_method_ptr(Rmethod); + __ null_check_throw(Rrecv, -1, Rscratch2); + + __ profile_final_call(Rrecv, Rscratch1); + + // Still no call from handle => We call the method handle interpreter here. + __ call_from_interpreter(Rmethod, Rret_addr, Rscratch1 /* scratch1 */, Rscratch2 /* scratch2 */); +} + +// ============================================================================= +// Allocation + +// Puts allocated obj ref onto the expression stack. +void TemplateTable::_new() { + transition(vtos, atos); + + Label Lslow_case, + Ldone, + Linitialize_header, + Lallocate_shared, + Linitialize_object; // Including clearing the fields. + + const Register RallocatedObject = R17_tos, + RinstanceKlass = R9_ARG7, + Rscratch = R11_scratch1, + Roffset = R8_ARG6, + Rinstance_size = Roffset, + Rcpool = R4_ARG2, + Rtags = R3_ARG1, + Rindex = R5_ARG3; + + const bool allow_shared_alloc = Universe::heap()->supports_inline_contig_alloc() && !CMSIncrementalMode; + + // -------------------------------------------------------------------------- + // Check if fast case is possible. + + // Load pointers to const pool and const pool's tags array. + __ get_cpool_and_tags(Rcpool, Rtags); + // Load index of constant pool entry. + __ get_2_byte_integer_at_bcp(1, Rindex, InterpreterMacroAssembler::Unsigned); + + if (UseTLAB) { + // Make sure the class we're about to instantiate has been resolved + // This is done before loading instanceKlass to be consistent with the order + // how Constant Pool is updated (see ConstantPoolCache::klass_at_put). + __ addi(Rtags, Rtags, Array::base_offset_in_bytes()); + __ lbzx(Rtags, Rindex, Rtags); + + __ cmpdi(CCR0, Rtags, JVM_CONSTANT_Class); + __ bne(CCR0, Lslow_case); + + // Get instanceKlass (load from Rcpool + sizeof(ConstantPool) + Rindex*BytesPerWord). + __ sldi(Roffset, Rindex, LogBytesPerWord); + __ addi(Rscratch, Rcpool, sizeof(ConstantPool)); + __ isync(); // Order load of instance Klass wrt. tags. + __ ldx(RinstanceKlass, Roffset, Rscratch); + + // Make sure klass is fully initialized and get instance_size. + __ lbz(Rscratch, in_bytes(InstanceKlass::init_state_offset()), RinstanceKlass); + __ lwz(Rinstance_size, in_bytes(Klass::layout_helper_offset()), RinstanceKlass); + + __ cmpdi(CCR1, Rscratch, InstanceKlass::fully_initialized); + // Make sure klass does not have has_finalizer, or is abstract, or interface or java/lang/Class. + __ andi_(R0, Rinstance_size, Klass::_lh_instance_slow_path_bit); // slow path bit equals 0? + + __ crnand(/*CR0 eq*/2, /*CR1 eq*/4+2, /*CR0 eq*/2); // slow path bit set or not fully initialized? + __ beq(CCR0, Lslow_case); + + // -------------------------------------------------------------------------- + // Fast case: + // Allocate the instance. + // 1) Try to allocate in the TLAB. + // 2) If fail, and the TLAB is not full enough to discard, allocate in the shared Eden. + // 3) If the above fails (or is not applicable), go to a slow case (creates a new TLAB, etc.). + + Register RoldTopValue = RallocatedObject; // Object will be allocated here if it fits. + Register RnewTopValue = R6_ARG4; + Register RendValue = R7_ARG5; + + // Check if we can allocate in the TLAB. + __ ld(RoldTopValue, in_bytes(JavaThread::tlab_top_offset()), R16_thread); + __ ld(RendValue, in_bytes(JavaThread::tlab_end_offset()), R16_thread); + + __ add(RnewTopValue, Rinstance_size, RoldTopValue); + + // If there is enough space, we do not CAS and do not clear. + __ cmpld(CCR0, RnewTopValue, RendValue); + __ bgt(CCR0, allow_shared_alloc ? Lallocate_shared : Lslow_case); + + __ std(RnewTopValue, in_bytes(JavaThread::tlab_top_offset()), R16_thread); + + if (ZeroTLAB) { + // The fields have already been cleared. + __ b(Linitialize_header); + } else { + // Initialize both the header and fields. + __ b(Linitialize_object); + } + + // Fall through: TLAB was too small. + if (allow_shared_alloc) { + Register RtlabWasteLimitValue = R10_ARG8; + Register RfreeValue = RnewTopValue; + + __ bind(Lallocate_shared); + // Check if tlab should be discarded (refill_waste_limit >= free). + __ ld(RtlabWasteLimitValue, in_bytes(JavaThread::tlab_refill_waste_limit_offset()), R16_thread); + __ subf(RfreeValue, RoldTopValue, RendValue); + __ srdi(RfreeValue, RfreeValue, LogHeapWordSize); // in dwords + __ cmpld(CCR0, RtlabWasteLimitValue, RfreeValue); + __ bge(CCR0, Lslow_case); + + // Increment waste limit to prevent getting stuck on this slow path. + __ addi(RtlabWasteLimitValue, RtlabWasteLimitValue, (int)ThreadLocalAllocBuffer::refill_waste_limit_increment()); + __ std(RtlabWasteLimitValue, in_bytes(JavaThread::tlab_refill_waste_limit_offset()), R16_thread); + } + // else: No allocation in the shared eden. // fallthru: __ b(Lslow_case); + } + // else: Always go the slow path. + + // -------------------------------------------------------------------------- + // slow case + __ bind(Lslow_case); + call_VM(R17_tos, CAST_FROM_FN_PTR(address, InterpreterRuntime::_new), Rcpool, Rindex); + + if (UseTLAB) { + __ b(Ldone); + // -------------------------------------------------------------------------- + // Init1: Zero out newly allocated memory. + + if (!ZeroTLAB || allow_shared_alloc) { + // Clear object fields. + __ bind(Linitialize_object); + + // Initialize remaining object fields. + Register Rbase = Rtags; + __ addi(Rinstance_size, Rinstance_size, 7 - (int)sizeof(oopDesc)); + __ addi(Rbase, RallocatedObject, sizeof(oopDesc)); + __ srdi(Rinstance_size, Rinstance_size, 3); + + // Clear out object skipping header. Takes also care of the zero length case. + __ clear_memory_doubleword(Rbase, Rinstance_size); + // fallthru: __ b(Linitialize_header); + } + + // -------------------------------------------------------------------------- + // Init2: Initialize the header: mark, klass + __ bind(Linitialize_header); + + // Init mark. + if (UseBiasedLocking) { + __ ld(Rscratch, in_bytes(Klass::prototype_header_offset()), RinstanceKlass); + } else { + __ load_const_optimized(Rscratch, markOopDesc::prototype(), R0); + } + __ std(Rscratch, oopDesc::mark_offset_in_bytes(), RallocatedObject); + + // Init klass. + __ store_klass_gap(RallocatedObject); + __ store_klass(RallocatedObject, RinstanceKlass, Rscratch); // klass (last for cms) + + // Check and trigger dtrace event. + { + SkipIfEqualZero skip_if(_masm, Rscratch, &DTraceAllocProbes); + __ push(atos); + __ call_VM_leaf(CAST_FROM_FN_PTR(address, SharedRuntime::dtrace_object_alloc)); + __ pop(atos); + } + } + + // continue + __ bind(Ldone); + + // Must prevent reordering of stores for object initialization with stores that publish the new object. + __ membar(Assembler::StoreStore); +} + +void TemplateTable::newarray() { + transition(itos, atos); + + __ lbz(R4, 1, R14_bcp); + __ extsw(R5, R17_tos); + call_VM(R17_tos, CAST_FROM_FN_PTR(address, InterpreterRuntime::newarray), R4, R5 /* size */); + + // Must prevent reordering of stores for object initialization with stores that publish the new object. + __ membar(Assembler::StoreStore); +} + +void TemplateTable::anewarray() { + transition(itos, atos); + + __ get_constant_pool(R4); + __ get_2_byte_integer_at_bcp(1, R5, InterpreterMacroAssembler::Unsigned); + __ extsw(R6, R17_tos); // size + call_VM(R17_tos, CAST_FROM_FN_PTR(address, InterpreterRuntime::anewarray), R4 /* pool */, R5 /* index */, R6 /* size */); + + // Must prevent reordering of stores for object initialization with stores that publish the new object. + __ membar(Assembler::StoreStore); +} + +// Allocate a multi dimensional array +void TemplateTable::multianewarray() { + transition(vtos, atos); + + Register Rptr = R31; // Needs to survive C call. + + // Put ndims * wordSize into frame temp slot + __ lbz(Rptr, 3, R14_bcp); + __ sldi(Rptr, Rptr, Interpreter::logStackElementSize); + // Esp points past last_dim, so set to R4 to first_dim address. + __ add(R4, Rptr, R15_esp); + call_VM(R17_tos, CAST_FROM_FN_PTR(address, InterpreterRuntime::multianewarray), R4 /* first_size_address */); + // Pop all dimensions off the stack. + __ add(R15_esp, Rptr, R15_esp); + + // Must prevent reordering of stores for object initialization with stores that publish the new object. + __ membar(Assembler::StoreStore); +} + +void TemplateTable::arraylength() { + transition(atos, itos); + + Label LnoException; + __ verify_oop(R17_tos); + __ null_check_throw(R17_tos, arrayOopDesc::length_offset_in_bytes(), R11_scratch1); + __ lwa(R17_tos, arrayOopDesc::length_offset_in_bytes(), R17_tos); +} + +// ============================================================================ +// Typechecks + +void TemplateTable::checkcast() { + transition(atos, atos); + + Label Ldone, Lis_null, Lquicked, Lresolved; + Register Roffset = R5_ARG3, + RobjKlass = R4_ARG2, + RspecifiedKlass = R6_ARG4, // Generate_ClassCastException_verbose_handler will expect this register. + Rcpool = R11_scratch1, + Rtags = R12_scratch2; + + // Null does not pass. + __ cmpdi(CCR0, R17_tos, 0); + __ beq(CCR0, Lis_null); + + // Get constant pool tag to find out if the bytecode has already been "quickened". + __ get_cpool_and_tags(Rcpool, Rtags); + + __ get_2_byte_integer_at_bcp(1, Roffset, InterpreterMacroAssembler::Unsigned); + + __ addi(Rtags, Rtags, Array::base_offset_in_bytes()); + __ lbzx(Rtags, Rtags, Roffset); + + __ cmpdi(CCR0, Rtags, JVM_CONSTANT_Class); + __ beq(CCR0, Lquicked); + + // Call into the VM to "quicken" instanceof. + __ push_ptr(); // for GC + call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::quicken_io_cc)); + __ get_vm_result_2(RspecifiedKlass); + __ pop_ptr(); // Restore receiver. + __ b(Lresolved); + + // Extract target class from constant pool. + __ bind(Lquicked); + __ sldi(Roffset, Roffset, LogBytesPerWord); + __ addi(Rcpool, Rcpool, sizeof(ConstantPool)); + __ isync(); // Order load of specified Klass wrt. tags. + __ ldx(RspecifiedKlass, Rcpool, Roffset); + + // Do the checkcast. + __ bind(Lresolved); + // Get value klass in RobjKlass. + __ load_klass(RobjKlass, R17_tos); + // Generate a fast subtype check. Branch to cast_ok if no failure. Return 0 if failure. + __ gen_subtype_check(RobjKlass, RspecifiedKlass, /*3 temp regs*/ Roffset, Rcpool, Rtags, /*target if subtype*/ Ldone); + + // Not a subtype; so must throw exception + // Target class oop is in register R6_ARG4 == RspecifiedKlass by convention. + __ load_dispatch_table(R11_scratch1, (address*)Interpreter::_throw_ClassCastException_entry); + __ mtctr(R11_scratch1); + __ bctr(); + + // Profile the null case. + __ align(32, 12); + __ bind(Lis_null); + __ profile_null_seen(R11_scratch1, Rtags); // Rtags used as scratch. + + __ align(32, 12); + __ bind(Ldone); +} + +// Output: +// - tos == 0: Obj was null or not an instance of class. +// - tos == 1: Obj was an instance of class. +void TemplateTable::instanceof() { + transition(atos, itos); + + Label Ldone, Lis_null, Lquicked, Lresolved; + Register Roffset = R5_ARG3, + RobjKlass = R4_ARG2, + RspecifiedKlass = R6_ARG4, // Generate_ClassCastException_verbose_handler will expect the value in this register. + Rcpool = R11_scratch1, + Rtags = R12_scratch2; + + // Null does not pass. + __ cmpdi(CCR0, R17_tos, 0); + __ beq(CCR0, Lis_null); + + // Get constant pool tag to find out if the bytecode has already been "quickened". + __ get_cpool_and_tags(Rcpool, Rtags); + + __ get_2_byte_integer_at_bcp(1, Roffset, InterpreterMacroAssembler::Unsigned); + + __ addi(Rtags, Rtags, Array::base_offset_in_bytes()); + __ lbzx(Rtags, Rtags, Roffset); + + __ cmpdi(CCR0, Rtags, JVM_CONSTANT_Class); + __ beq(CCR0, Lquicked); + + // Call into the VM to "quicken" instanceof. + __ push_ptr(); // for GC + call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::quicken_io_cc)); + __ get_vm_result_2(RspecifiedKlass); + __ pop_ptr(); // Restore receiver. + __ b(Lresolved); + + // Extract target class from constant pool. + __ bind(Lquicked); + __ sldi(Roffset, Roffset, LogBytesPerWord); + __ addi(Rcpool, Rcpool, sizeof(ConstantPool)); + __ isync(); // Order load of specified Klass wrt. tags. + __ ldx(RspecifiedKlass, Rcpool, Roffset); + + // Do the checkcast. + __ bind(Lresolved); + // Get value klass in RobjKlass. + __ load_klass(RobjKlass, R17_tos); + // Generate a fast subtype check. Branch to cast_ok if no failure. Return 0 if failure. + __ li(R17_tos, 1); + __ gen_subtype_check(RobjKlass, RspecifiedKlass, /*3 temp regs*/ Roffset, Rcpool, Rtags, /*target if subtype*/ Ldone); + __ li(R17_tos, 0); + + if (ProfileInterpreter) { + __ b(Ldone); + } + + // Profile the null case. + __ align(32, 12); + __ bind(Lis_null); + __ profile_null_seen(Rcpool, Rtags); // Rcpool and Rtags used as scratch. + + __ align(32, 12); + __ bind(Ldone); +} + +// ============================================================================= +// Breakpoints + +void TemplateTable::_breakpoint() { + transition(vtos, vtos); + + // Get the unpatched byte code. + __ call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::get_original_bytecode_at), R19_method, R14_bcp); + __ mr(R31, R3_RET); + + // Post the breakpoint event. + __ call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::_breakpoint), R19_method, R14_bcp); + + // Complete the execution of original bytecode. + __ dispatch_Lbyte_code(vtos, R31, Interpreter::normal_table(vtos)); +} + +// ============================================================================= +// Exceptions + +void TemplateTable::athrow() { + transition(atos, vtos); + + // Exception oop is in tos + __ verify_oop(R17_tos); + + __ null_check_throw(R17_tos, -1, R11_scratch1); + + // Throw exception interpreter entry expects exception oop to be in R3. + __ mr(R3_RET, R17_tos); + __ load_dispatch_table(R11_scratch1, (address*)Interpreter::throw_exception_entry()); + __ mtctr(R11_scratch1); + __ bctr(); +} + +// ============================================================================= +// Synchronization +// Searches the basic object lock list on the stack for a free slot +// and uses it to lock the obect in tos. +// +// Recursive locking is enabled by exiting the search if the same +// object is already found in the list. Thus, a new basic lock obj lock +// is allocated "higher up" in the stack and thus is found first +// at next monitor exit. +void TemplateTable::monitorenter() { + transition(atos, vtos); + + __ verify_oop(R17_tos); + + Register Rcurrent_monitor = R11_scratch1, + Rcurrent_obj = R12_scratch2, + Robj_to_lock = R17_tos, + Rscratch1 = R3_ARG1, + Rscratch2 = R4_ARG2, + Rscratch3 = R5_ARG3, + Rcurrent_obj_addr = R6_ARG4; + + // ------------------------------------------------------------------------------ + // Null pointer exception. + __ null_check_throw(Robj_to_lock, -1, R11_scratch1); + + // Try to acquire a lock on the object. + // Repeat until succeeded (i.e., until monitorenter returns true). + + // ------------------------------------------------------------------------------ + // Find a free slot in the monitor block. + Label Lfound, Lexit, Lallocate_new; + ConditionRegister found_free_slot = CCR0, + found_same_obj = CCR1, + reached_limit = CCR6; + { + Label Lloop, Lentry; + Register Rlimit = Rcurrent_monitor; + + // Set up search loop - start with topmost monitor. + __ add(Rcurrent_obj_addr, BasicObjectLock::obj_offset_in_bytes(), R26_monitor); + + __ ld(Rlimit, 0, R1_SP); + __ addi(Rlimit, Rlimit, - (frame::ijava_state_size + frame::interpreter_frame_monitor_size_in_bytes() - BasicObjectLock::obj_offset_in_bytes())); // Monitor base + + // Check if any slot is present => short cut to allocation if not. + __ cmpld(reached_limit, Rcurrent_obj_addr, Rlimit); + __ bgt(reached_limit, Lallocate_new); + + // Pre-load topmost slot. + __ ld(Rcurrent_obj, 0, Rcurrent_obj_addr); + __ addi(Rcurrent_obj_addr, Rcurrent_obj_addr, frame::interpreter_frame_monitor_size() * wordSize); + // The search loop. + __ bind(Lloop); + // Found free slot? + __ cmpdi(found_free_slot, Rcurrent_obj, 0); + // Is this entry for same obj? If so, stop the search and take the found + // free slot or allocate a new one to enable recursive locking. + __ cmpd(found_same_obj, Rcurrent_obj, Robj_to_lock); + __ cmpld(reached_limit, Rcurrent_obj_addr, Rlimit); + __ beq(found_free_slot, Lexit); + __ beq(found_same_obj, Lallocate_new); + __ bgt(reached_limit, Lallocate_new); + // Check if last allocated BasicLockObj reached. + __ ld(Rcurrent_obj, 0, Rcurrent_obj_addr); + __ addi(Rcurrent_obj_addr, Rcurrent_obj_addr, frame::interpreter_frame_monitor_size() * wordSize); + // Next iteration if unchecked BasicObjectLocks exist on the stack. + __ b(Lloop); + } + + // ------------------------------------------------------------------------------ + // Check if we found a free slot. + __ bind(Lexit); + + __ addi(Rcurrent_monitor, Rcurrent_obj_addr, -(frame::interpreter_frame_monitor_size() * wordSize) - BasicObjectLock::obj_offset_in_bytes()); + __ addi(Rcurrent_obj_addr, Rcurrent_obj_addr, - frame::interpreter_frame_monitor_size() * wordSize); + __ b(Lfound); + + // We didn't find a free BasicObjLock => allocate one. + __ align(32, 12); + __ bind(Lallocate_new); + __ add_monitor_to_stack(false, Rscratch1, Rscratch2); + __ mr(Rcurrent_monitor, R26_monitor); + __ addi(Rcurrent_obj_addr, R26_monitor, BasicObjectLock::obj_offset_in_bytes()); + + // ------------------------------------------------------------------------------ + // We now have a slot to lock. + __ bind(Lfound); + + // Increment bcp to point to the next bytecode, so exception handling for async. exceptions work correctly. + // The object has already been poped from the stack, so the expression stack looks correct. + __ addi(R14_bcp, R14_bcp, 1); + + __ std(Robj_to_lock, 0, Rcurrent_obj_addr); + __ lock_object(Rcurrent_monitor, Robj_to_lock); + + // Check if there's enough space on the stack for the monitors after locking. + Label Lskip_stack_check; + // Optimization: If the monitors stack section is less then a std page size (4K) don't run + // the stack check. There should be enough shadow pages to fit that in. + __ ld(Rscratch3, 0, R1_SP); + __ sub(Rscratch3, Rscratch3, R26_monitor); + __ cmpdi(CCR0, Rscratch3, 4*K); + __ blt(CCR0, Lskip_stack_check); + + DEBUG_ONLY(__ untested("stack overflow check during monitor enter");) + __ li(Rscratch1, 0); + __ generate_stack_overflow_check_with_compare_and_throw(Rscratch1, Rscratch2); + + __ align(32, 12); + __ bind(Lskip_stack_check); + + // The bcp has already been incremented. Just need to dispatch to next instruction. + __ dispatch_next(vtos); +} + +void TemplateTable::monitorexit() { + transition(atos, vtos); + __ verify_oop(R17_tos); + + Register Rcurrent_monitor = R11_scratch1, + Rcurrent_obj = R12_scratch2, + Robj_to_lock = R17_tos, + Rcurrent_obj_addr = R3_ARG1, + Rlimit = R4_ARG2; + Label Lfound, Lillegal_monitor_state; + + // Check corner case: unbalanced monitorEnter / Exit. + __ ld(Rlimit, 0, R1_SP); + __ addi(Rlimit, Rlimit, - (frame::ijava_state_size + frame::interpreter_frame_monitor_size_in_bytes())); // Monitor base + + // Null pointer check. + __ null_check_throw(Robj_to_lock, -1, R11_scratch1); + + __ cmpld(CCR0, R26_monitor, Rlimit); + __ bgt(CCR0, Lillegal_monitor_state); + + // Find the corresponding slot in the monitors stack section. + { + Label Lloop; + + // Start with topmost monitor. + __ addi(Rcurrent_obj_addr, R26_monitor, BasicObjectLock::obj_offset_in_bytes()); + __ addi(Rlimit, Rlimit, BasicObjectLock::obj_offset_in_bytes()); + __ ld(Rcurrent_obj, 0, Rcurrent_obj_addr); + __ addi(Rcurrent_obj_addr, Rcurrent_obj_addr, frame::interpreter_frame_monitor_size() * wordSize); + + __ bind(Lloop); + // Is this entry for same obj? + __ cmpd(CCR0, Rcurrent_obj, Robj_to_lock); + __ beq(CCR0, Lfound); + + // Check if last allocated BasicLockObj reached. + + __ ld(Rcurrent_obj, 0, Rcurrent_obj_addr); + __ cmpld(CCR0, Rcurrent_obj_addr, Rlimit); + __ addi(Rcurrent_obj_addr, Rcurrent_obj_addr, frame::interpreter_frame_monitor_size() * wordSize); + + // Next iteration if unchecked BasicObjectLocks exist on the stack. + __ ble(CCR0, Lloop); + } + + // Fell through without finding the basic obj lock => throw up! + __ bind(Lillegal_monitor_state); + call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::throw_illegal_monitor_state_exception)); + __ should_not_reach_here(); + + __ align(32, 12); + __ bind(Lfound); + __ addi(Rcurrent_monitor, Rcurrent_obj_addr, + -(frame::interpreter_frame_monitor_size() * wordSize) - BasicObjectLock::obj_offset_in_bytes()); + __ unlock_object(Rcurrent_monitor); +} + +// ============================================================================ +// Wide bytecodes + +// Wide instructions. Simply redirects to the wide entry point for that instruction. +void TemplateTable::wide() { + transition(vtos, vtos); + + const Register Rtable = R11_scratch1, + Rindex = R12_scratch2, + Rtmp = R0; + + __ lbz(Rindex, 1, R14_bcp); + + __ load_dispatch_table(Rtable, Interpreter::_wentry_point); + + __ slwi(Rindex, Rindex, LogBytesPerWord); + __ ldx(Rtmp, Rtable, Rindex); + __ mtctr(Rtmp); + __ bctr(); + // Note: the bcp increment step is part of the individual wide bytecode implementations. +} +#endif // !CC_INTERP diff --git a/hotspot/src/cpu/ppc/vm/templateTable_ppc_64.hpp b/hotspot/src/cpu/ppc/vm/templateTable_ppc_64.hpp new file mode 100644 index 00000000000..1dfa8841c64 --- /dev/null +++ b/hotspot/src/cpu/ppc/vm/templateTable_ppc_64.hpp @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright 2013, 2014 SAP AG. All rights reserved. + * 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 CPU_PPC_VM_TEMPLATETABLE_PPC_64_HPP +#define CPU_PPC_VM_TEMPLATETABLE_PPC_64_HPP + + static void prepare_invoke(int byte_no, Register Rmethod, Register Rret_addr, Register Rindex, Register Rrecv, Register Rflags, Register Rscratch); + static void invokevfinal_helper(Register Rmethod, Register Rflags, Register Rscratch1, Register Rscratch2); + static void generate_vtable_call(Register Rrecv_klass, Register Rindex, Register Rret, Register Rtemp); + static void invokeinterface_object_method(Register Rrecv_klass, Register Rret, Register Rflags, Register Rindex, Register Rtemp, Register Rtemp2); + + // Branch_conditional which takes TemplateTable::Condition. + static void branch_conditional(ConditionRegister crx, TemplateTable::Condition cc, Label& L, bool invert = false); + static void if_cmp_common(Register Rfirst, Register Rsecond, Register Rscratch1, Register Rscratch2, Condition cc, bool is_jint, bool cmp0); + +#endif // CPU_PPC_VM_TEMPLATETABLE_PPC_64_HPP diff --git a/hotspot/src/share/vm/interpreter/templateTable.hpp b/hotspot/src/share/vm/interpreter/templateTable.hpp index bb5169a6ccb..c6ea51537a2 100644 --- a/hotspot/src/share/vm/interpreter/templateTable.hpp +++ b/hotspot/src/share/vm/interpreter/templateTable.hpp @@ -376,6 +376,9 @@ class TemplateTable: AllStatic { #ifdef TARGET_ARCH_MODEL_ppc_32 # include "templateTable_ppc_32.hpp" #endif +#ifdef TARGET_ARCH_MODEL_ppc_64 +# include "templateTable_ppc_64.hpp" +#endif }; #endif /* !CC_INTERP */ From 405bc140c090a1f20af6d630dbe8e46efb8c6347 Mon Sep 17 00:00:00 2001 From: Erik Joelsson Date: Tue, 11 Mar 2014 12:04:27 +0100 Subject: [PATCH 052/116] 8036965: 9-dev solaris builds failed: sort: can't read STDIN: Illegal byte sequence Reviewed-by: henryjen, tbell, ihse --- make/common/JavaCompilation.gmk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/make/common/JavaCompilation.gmk b/make/common/JavaCompilation.gmk index 5eed2ff701c..5ee8fdf301c 100644 --- a/make/common/JavaCompilation.gmk +++ b/make/common/JavaCompilation.gmk @@ -364,7 +364,7 @@ define add_file_to_clean | $(SED) -e '/^#/d' -e '/^$$$$/d' \ -e :a -e '/\\$$$$/N; s/\\\n//; ta' \ -e 's/^[ \t]*//;s/[ \t]*$$$$//' \ - -e 's/\\=/=/' | LANG=C $(SORT) > $$@ + -e 's/\\=/=/' | LC_ALL=C $(SORT) > $$@ $(CHMOD) -f ug+w $$@ # And do not forget this target From 3cd6a66a8f1a55ab195384d7ddef2d4a83f29321 Mon Sep 17 00:00:00 2001 From: Erik Joelsson Date: Tue, 11 Mar 2014 12:04:50 +0100 Subject: [PATCH 053/116] 8036948: Solaris builds broken by fix for 8036611: Cleanup of handling of properties .. Reviewed-by: ihse --- make/common/MakeBase.gmk | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/make/common/MakeBase.gmk b/make/common/MakeBase.gmk index 2b276c6f1fb..586d68ab937 100644 --- a/make/common/MakeBase.gmk +++ b/make/common/MakeBase.gmk @@ -380,11 +380,23 @@ ifeq ($(OPENJDK_TARGET_OS),solaris) # On Solaris, if the target is a symlink and exists, cp won't overwrite. # Cp has to operate in recursive mode to allow for -P flag, to preserve soft links. If the # name of the target file differs from the source file, rename after copy. + # If the source and target parent directories are the same, recursive copy doesn't work + # so we fall back on regular copy, which isn't preserving symlinks. define install-file $(MKDIR) -p $(@D) $(RM) '$@' - $(CP) -f -r -P '$<' '$(@D)' - if [ "$(@F)" != "$( Date: Tue, 11 Mar 2014 15:03:26 -0700 Subject: [PATCH 054/116] Added tag jdk9-b04 for changeset 63e429dcac32 --- .hgtags-top-repo | 1 + 1 file changed, 1 insertion(+) diff --git a/.hgtags-top-repo b/.hgtags-top-repo index 45398d20075..c1b1c04b6d6 100644 --- a/.hgtags-top-repo +++ b/.hgtags-top-repo @@ -246,3 +246,4 @@ cd3825b2983045784d6fc6d1729c799b08215752 jdk8-b120 50669e45cec4491de0d921d3118a3fe2e767020a jdk9-b01 135f0c7af57ebace31383d8877f47e32172759ff jdk9-b02 fd8d51bdf9aadf7ae83e65e8655c53581017c363 jdk9-b03 +cb4c3440bc2748101923e2488506e61009ab1bf5 jdk9-b04 From 8d93dcb8bc6e29ae68d33be77345e22e62fe772b Mon Sep 17 00:00:00 2001 From: David Katleman Date: Tue, 11 Mar 2014 15:41:35 -0700 Subject: [PATCH 055/116] Added tag jdk9-b04 for changeset cf836c6f207d --- corba/.hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/corba/.hgtags b/corba/.hgtags index 13a64cfd8b1..e2c211437d6 100644 --- a/corba/.hgtags +++ b/corba/.hgtags @@ -246,3 +246,4 @@ a7d3638deb2f4e33217b1ecf889479e90f9e5b50 jdk9-b00 79a8136b18c1c6848f500088f5a4b39f262f082d jdk9-b01 8394993063135a42b63a94473280399fb2a13aa7 jdk9-b02 d338b892a13db19b093f85cf5f949a4504e4d31f jdk9-b03 +1ed19de263e1e0772da0269118cdd9deeb9fff04 jdk9-b04 From 6d3d6f745634719a6dfcfe8e6af35c4a00a476f9 Mon Sep 17 00:00:00 2001 From: David Katleman Date: Tue, 11 Mar 2014 15:41:45 -0700 Subject: [PATCH 056/116] Added tag jdk9-b04 for changeset 7a33ca900ff0 --- hotspot/.hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/hotspot/.hgtags b/hotspot/.hgtags index 71ad9311d10..7b77a830353 100644 --- a/hotspot/.hgtags +++ b/hotspot/.hgtags @@ -406,3 +406,4 @@ ce2d7e46f3c7e41241f3b407705a4071323a11ab jdk9-b00 050a626a88951140df874f7b163e304d07b6c296 jdk9-b01 b188446de75bda5fc52d102cddf242c3ef5ecbdf jdk9-b02 b2fee789d23f3cdabb3db4e51af43038e5692d3a jdk9-b03 +3812c088b9456ee22c933e88aee1ece71f4e783a jdk9-b04 From 09deb6906d7ff055e30a0fbeb4bbd89485e25a15 Mon Sep 17 00:00:00 2001 From: David Katleman Date: Tue, 11 Mar 2014 15:41:51 -0700 Subject: [PATCH 057/116] Added tag jdk9-b04 for changeset 4489a70abccd --- jaxp/.hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/jaxp/.hgtags b/jaxp/.hgtags index 89dfe4cfb54..235b496363e 100644 --- a/jaxp/.hgtags +++ b/jaxp/.hgtags @@ -246,3 +246,4 @@ e4e5069250e717defcb556e2f6be291460988c51 jdk8-b118 e5256f530a9b5f2d677ca245de44a617ffb58f52 jdk9-b01 02f60a253e15240087c043bad77a106792e4d56a jdk9-b02 fb92ed0399424193f444489ad49a16748816dc12 jdk9-b03 +2846d8fc31490897817a122a668af4f44fc913d0 jdk9-b04 From fe36912657aac4149d3a8afc7d9ab1f075e5e24a Mon Sep 17 00:00:00 2001 From: David Katleman Date: Tue, 11 Mar 2014 15:41:53 -0700 Subject: [PATCH 058/116] Added tag jdk9-b04 for changeset c78b6c3c5e48 --- jaxws/.hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/jaxws/.hgtags b/jaxws/.hgtags index 8e843fe4b59..5de247bd72f 100644 --- a/jaxws/.hgtags +++ b/jaxws/.hgtags @@ -249,3 +249,4 @@ bc622ba563f9316f981c11c3a260f4c3fdc5ef07 jdk8-b122 9c9fabbcd3d526d7ca29165169155f49a107533a jdk9-b01 efe2bc258c78af49de9517a4a5699d3a2e630c44 jdk9-b02 1cd9786257ed4f82a3371fd606b162e5bb6fcd81 jdk9-b03 +da44a8bdf1f3fdd518e7d785d60cc1b15983b176 jdk9-b04 From 60774dc46b1a932c45d80cdf27282027a4a966b6 Mon Sep 17 00:00:00 2001 From: David Katleman Date: Tue, 11 Mar 2014 15:42:01 -0700 Subject: [PATCH 059/116] Added tag jdk9-b04 for changeset e16d4c844e76 --- jdk/.hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/jdk/.hgtags b/jdk/.hgtags index 950784a2233..d4558dabdae 100644 --- a/jdk/.hgtags +++ b/jdk/.hgtags @@ -246,3 +246,4 @@ d31cd980e1da31fa496a359caaf1a165aeb5791a jdk8-b120 3b4ac8d1b76fc6bec9815f0ab714f15b552e4c7b jdk9-b01 8c8275426a3207d91393354f7a7f9bc362ec25cf jdk9-b02 4111af6151ed8ca8e3f5603c69729a68427e1d5b jdk9-b03 +627deed79b595a4789fc9151455b663a47381257 jdk9-b04 From 060f4862a7b94f0debdcbf0322e8f1e613820bd6 Mon Sep 17 00:00:00 2001 From: David Katleman Date: Tue, 11 Mar 2014 15:42:05 -0700 Subject: [PATCH 060/116] Added tag jdk9-b04 for changeset 612191246a7d --- langtools/.hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/langtools/.hgtags b/langtools/.hgtags index ab6c1e2e32a..3dc1cdd6b60 100644 --- a/langtools/.hgtags +++ b/langtools/.hgtags @@ -246,3 +246,4 @@ afe63d41c699e0e2ee910ef20c41b60603c852a1 jdk9-b00 077c12d527fb5531c59666c1f84000fc1245a260 jdk9-b01 f2c58a337c8aaa1ce84dfa8a8e8c5d4c8c1e12fa jdk9-b02 151222468d1d04ce6613d33efa3d45bfaf53e3e5 jdk9-b03 +fa2ec6b6b1697ae4a78b03b609664dc6b47dee86 jdk9-b04 From bcc0d72114ad0270e1f2bb370617899d835fe5fe Mon Sep 17 00:00:00 2001 From: David Katleman Date: Tue, 11 Mar 2014 15:42:07 -0700 Subject: [PATCH 061/116] Added tag jdk9-b04 for changeset 7825ce9a8228 --- nashorn/.hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/nashorn/.hgtags b/nashorn/.hgtags index f2335745fca..6e7c8e3a43d 100644 --- a/nashorn/.hgtags +++ b/nashorn/.hgtags @@ -237,3 +237,4 @@ c3343930c73c58a22c1d58719bb988aeb25a871f jdk8-b119 65347535840f045f2cd4341d7466c51009b1b06f jdk9-b01 b3517e51f40477f10db8bc30a557aa0ea712c274 jdk9-b02 832f89ff25d903c45cfc994553f1ade8821a4398 jdk9-b03 +3f6ef92cd7823372c45e79125adba4cbf1c9f7b2 jdk9-b04 From 07cc98bb1a8a5de32ee9c4fc39d5f3fd15121dea Mon Sep 17 00:00:00 2001 From: Joe Darcy Date: Tue, 11 Mar 2014 17:52:45 -0700 Subject: [PATCH 062/116] 8037120: Fix doclint warnings in javax.lang.model exception types Reviewed-by: jjg --- .../javax/lang/model/type/MirroredTypeException.java | 6 +++++- .../javax/lang/model/type/MirroredTypesException.java | 6 +++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/langtools/src/share/classes/javax/lang/model/type/MirroredTypeException.java b/langtools/src/share/classes/javax/lang/model/type/MirroredTypeException.java index fd79f04e62d..21af5070a76 100644 --- a/langtools/src/share/classes/javax/lang/model/type/MirroredTypeException.java +++ b/langtools/src/share/classes/javax/lang/model/type/MirroredTypeException.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -70,6 +70,10 @@ public class MirroredTypeException extends MirroredTypesException { /** * Explicitly set all transient fields. + * @param s the serial stream + * @throws ClassNotFoundException for a missing class during + * deserialization + * @throws IOException for an IO problem during deserialization */ private void readObject(ObjectInputStream s) throws IOException, ClassNotFoundException { diff --git a/langtools/src/share/classes/javax/lang/model/type/MirroredTypesException.java b/langtools/src/share/classes/javax/lang/model/type/MirroredTypesException.java index e385241a378..2cff3ffdaf6 100644 --- a/langtools/src/share/classes/javax/lang/model/type/MirroredTypesException.java +++ b/langtools/src/share/classes/javax/lang/model/type/MirroredTypesException.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -85,6 +85,10 @@ public class MirroredTypesException extends RuntimeException { /** * Explicitly set all transient fields. + * @param s the serial stream + * @throws ClassNotFoundException for a missing class during + * deserialization + * @throws IOException for an IO problem during deserialization */ private void readObject(ObjectInputStream s) throws IOException, ClassNotFoundException { From 5c683d18a4d7e5868f0e1480626054481d4f8a48 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hannes=20Walln=C3=B6fer?= Date: Wed, 12 Mar 2014 11:26:00 +0100 Subject: [PATCH 063/116] 8021350: Share script classes between threads/globals within context Reviewed-by: lagergren, sundar --- nashorn/make/build.xml | 4 + nashorn/make/project.properties | 2 +- .../jdk/nashorn/internal/codegen/Attr.java | 9 +- .../internal/codegen/CodeGenerator.java | 4 +- .../internal/codegen/SharedScopeCall.java | 2 +- .../jdk/nashorn/internal/ir/FunctionNode.java | 16 +- .../jdk/nashorn/internal/objects/Global.java | 73 +--- .../internal/objects/NativeBoolean.java | 17 +- .../internal/objects/NativeJSAdapter.java | 4 +- .../internal/objects/NativeNumber.java | 17 +- .../internal/objects/NativeString.java | 17 +- .../internal/objects/ScriptFunctionImpl.java | 22 +- .../jdk/nashorn/internal/parser/Parser.java | 1 + .../internal/runtime/AccessorProperty.java | 12 +- .../jdk/nashorn/internal/runtime/Context.java | 88 ++++- .../runtime/FinalScriptFunctionData.java | 30 +- .../internal/runtime/GlobalObject.java | 16 - .../nashorn/internal/runtime/Property.java | 16 +- .../RecompilableScriptFunctionData.java | 84 +++-- .../internal/runtime/ScriptFunction.java | 46 +-- .../internal/runtime/ScriptFunctionData.java | 71 ++-- .../internal/runtime/ScriptObject.java | 79 +++-- .../internal/runtime/SetMethodCreator.java | 22 +- .../nashorn/internal/runtime/WithObject.java | 7 +- .../runtime/linker/NashornGuards.java | 60 ++++ .../runtime/linker/PrimitiveLookup.java | 25 +- .../jdk/nashorn/api/scripting/ScopeTest.java | 316 ++++++++++++++++++ .../nashorn/api/scripting/resources/func.js | 42 +++ .../api/scripting/resources/gettersetter.js | 38 +++ .../api/scripting/resources/witheval.js | 60 ++++ 30 files changed, 902 insertions(+), 298 deletions(-) create mode 100644 nashorn/test/src/jdk/nashorn/api/scripting/resources/func.js create mode 100644 nashorn/test/src/jdk/nashorn/api/scripting/resources/gettersetter.js create mode 100644 nashorn/test/src/jdk/nashorn/api/scripting/resources/witheval.js diff --git a/nashorn/make/build.xml b/nashorn/make/build.xml index 78a713bfc46..a33e355ce91 100644 --- a/nashorn/make/build.xml +++ b/nashorn/make/build.xml @@ -253,6 +253,10 @@ + + + + diff --git a/nashorn/make/project.properties b/nashorn/make/project.properties index d51e72e4180..5af728794e2 100644 --- a/nashorn/make/project.properties +++ b/nashorn/make/project.properties @@ -206,7 +206,7 @@ test262-test-sys-prop.test.failed.list.file=${build.dir}/test/failedTests # test262 test frameworks test262-test-sys-prop.test.js.framework=\ - --class-cache-size=0 \ + --class-cache-size=10 \ --no-java \ --no-typed-arrays \ -timezone=PST \ diff --git a/nashorn/src/jdk/nashorn/internal/codegen/Attr.java b/nashorn/src/jdk/nashorn/internal/codegen/Attr.java index 177cfef4e4b..61ccb712772 100644 --- a/nashorn/src/jdk/nashorn/internal/codegen/Attr.java +++ b/nashorn/src/jdk/nashorn/internal/codegen/Attr.java @@ -375,10 +375,11 @@ final class Attr extends NodeOperatorVisitor { * @return Symbol for given name or null for redefinition. */ private Symbol defineSymbol(final Block block, final String name, final int symbolFlags) { - int flags = symbolFlags; - Symbol symbol = findSymbol(block, name); // Locate symbol. + int flags = symbolFlags; + Symbol symbol = findSymbol(block, name); // Locate symbol. + boolean isGlobal = (flags & KINDMASK) == IS_GLOBAL; - if ((flags & KINDMASK) == IS_GLOBAL) { + if (isGlobal) { flags |= IS_SCOPE; } @@ -414,6 +415,8 @@ final class Attr extends NodeOperatorVisitor { // Determine where to create it. if ((flags & Symbol.KINDMASK) == IS_VAR && ((flags & IS_INTERNAL) == IS_INTERNAL || (flags & IS_LET) == IS_LET)) { symbolBlock = block; //internal vars are always defined in the block closest to them + } else if (isGlobal) { + symbolBlock = lc.getOutermostFunction().getBody(); } else { symbolBlock = lc.getFunctionBody(function); } diff --git a/nashorn/src/jdk/nashorn/internal/codegen/CodeGenerator.java b/nashorn/src/jdk/nashorn/internal/codegen/CodeGenerator.java index 6ad92829bfe..e0ca67a4a92 100644 --- a/nashorn/src/jdk/nashorn/internal/codegen/CodeGenerator.java +++ b/nashorn/src/jdk/nashorn/internal/codegen/CodeGenerator.java @@ -685,7 +685,7 @@ final class CodeGenerator extends NodeOperatorVisitor 0) { - classCache = new ClassCache(cacheSize); - } } /** @@ -488,7 +477,7 @@ public final class Global extends ScriptObject implements GlobalObject, Scope { @Override public ScriptFunction newScriptFunction(final String name, final MethodHandle handle, final ScriptObject scope, final boolean strict) { - return new ScriptFunctionImpl(name, handle, scope, null, strict, false, true); + return new ScriptFunctionImpl(name, handle, scope, null, strict ? ScriptFunctionData.IS_STRICT_CONSTRUCTOR : ScriptFunctionData.IS_CONSTRUCTOR); } @Override @@ -664,62 +653,6 @@ public final class Global extends ScriptObject implements GlobalObject, Scope { } - /** - * Cache for compiled script classes. - */ - @SuppressWarnings("serial") - private static class ClassCache extends LinkedHashMap { - private final int size; - private final ReferenceQueue> queue; - - ClassCache(int size) { - super(size, 0.75f, true); - this.size = size; - this.queue = new ReferenceQueue<>(); - } - - void cache(final Source source, final Class clazz) { - put(source, new ClassReference(clazz, queue, source)); - } - - @Override - protected boolean removeEldestEntry(final Map.Entry eldest) { - return size() > size; - } - - @Override - public ClassReference get(Object key) { - for (ClassReference ref; (ref = (ClassReference)queue.poll()) != null; ) { - remove(ref.source); - } - return super.get(key); - } - - } - - private static class ClassReference extends SoftReference> { - private final Source source; - - ClassReference(final Class clazz, final ReferenceQueue> queue, final Source source) { - super(clazz, queue); - this.source = source; - } - } - - // Class cache management - @Override - public Class findCachedClass(final Source source) { - assert classCache != null : "Class cache used without being initialized"; - ClassReference ref = classCache.get(source); - return ref != null ? ref.get() : null; - } - - @Override - public void cacheClass(final Source source, final Class clazz) { - assert classCache != null : "Class cache used without being initialized"; - classCache.cache(source, clazz); - } - private static T getLazilyCreatedValue(final Object key, final Callable creator, final Map map) { final T obj = map.get(key); if (obj != null) { @@ -1838,7 +1771,7 @@ public final class Global extends ScriptObject implements GlobalObject, Scope { anon.deleteOwnProperty(anon.getMap().findProperty("prototype")); // use "getter" so that [[ThrowTypeError]] function's arity is 0 - as specified in step 10 of section 13.2.3 - this.typeErrorThrower = new ScriptFunctionImpl("TypeErrorThrower", Lookup.TYPE_ERROR_THROWER_GETTER, null, null, false, false, false); + this.typeErrorThrower = new ScriptFunctionImpl("TypeErrorThrower", Lookup.TYPE_ERROR_THROWER_GETTER, null, null, 0); typeErrorThrower.setPrototype(UNDEFINED); // Non-constructor built-in functions do not have "prototype" property typeErrorThrower.deleteOwnProperty(typeErrorThrower.getMap().findProperty("prototype")); diff --git a/nashorn/src/jdk/nashorn/internal/objects/NativeBoolean.java b/nashorn/src/jdk/nashorn/internal/objects/NativeBoolean.java index bd955079830..bde6c608519 100644 --- a/nashorn/src/jdk/nashorn/internal/objects/NativeBoolean.java +++ b/nashorn/src/jdk/nashorn/internal/objects/NativeBoolean.java @@ -30,6 +30,7 @@ import static jdk.nashorn.internal.lookup.Lookup.MH; import java.lang.invoke.MethodHandle; import java.lang.invoke.MethodHandles; +import java.lang.invoke.MethodType; import jdk.internal.dynalink.linker.GuardedInvocation; import jdk.internal.dynalink.linker.LinkRequest; import jdk.nashorn.internal.objects.annotations.Attribute; @@ -50,7 +51,10 @@ import jdk.nashorn.internal.runtime.linker.PrimitiveLookup; public final class NativeBoolean extends ScriptObject { private final boolean value; - final static MethodHandle WRAPFILTER = findWrapFilter(); + // Method handle to create an object wrapper for a primitive boolean + private static final MethodHandle WRAPFILTER = findOwnMH("wrapFilter", MH.type(NativeBoolean.class, Object.class)); + // Method handle to retrieve the Boolean prototype object + private static final MethodHandle PROTOFILTER = findOwnMH("protoFilter", MH.type(Object.class, Object.class)); // initialized by nasgen private static PropertyMap $nasgenmap$; @@ -164,7 +168,7 @@ public final class NativeBoolean extends ScriptObject { * @return Link to be invoked at call site. */ public static GuardedInvocation lookupPrimitive(final LinkRequest request, final Object receiver) { - return PrimitiveLookup.lookupPrimitive(request, Boolean.class, new NativeBoolean((Boolean)receiver), WRAPFILTER); + return PrimitiveLookup.lookupPrimitive(request, Boolean.class, new NativeBoolean((Boolean)receiver), WRAPFILTER, PROTOFILTER); } /** @@ -178,7 +182,12 @@ public final class NativeBoolean extends ScriptObject { return new NativeBoolean((Boolean)receiver); } - private static MethodHandle findWrapFilter() { - return MH.findStatic(MethodHandles.lookup(), NativeBoolean.class, "wrapFilter", MH.type(NativeBoolean.class, Object.class)); + @SuppressWarnings("unused") + private static Object protoFilter(final Object object) { + return Global.instance().getBooleanPrototype(); + } + + private static MethodHandle findOwnMH(final String name, final MethodType type) { + return MH.findStatic(MethodHandles.lookup(), NativeBoolean.class, name, type); } } diff --git a/nashorn/src/jdk/nashorn/internal/objects/NativeJSAdapter.java b/nashorn/src/jdk/nashorn/internal/objects/NativeJSAdapter.java index c77b2fe0fa9..ed879dc69b5 100644 --- a/nashorn/src/jdk/nashorn/internal/objects/NativeJSAdapter.java +++ b/nashorn/src/jdk/nashorn/internal/objects/NativeJSAdapter.java @@ -622,7 +622,7 @@ public final class NativeJSAdapter extends ScriptObject { case "getMethod": final FindProperty find = adaptee.findProperty(__call__, true); if (find != null) { - final Object value = getObjectValue(find); + final Object value = find.getObjectValue(); if (value instanceof ScriptFunction) { final ScriptFunctionImpl func = (ScriptFunctionImpl)value; // TODO: It's a shame we need to produce a function bound to this and name, when we'd only need it bound @@ -691,7 +691,7 @@ public final class NativeJSAdapter extends ScriptObject { final MethodType type = desc.getMethodType(); if (findData != null) { final String name = desc.getNameTokenCount() > 2 ? desc.getNameToken(2) : null; - final Object value = getObjectValue(findData); + final Object value = findData.getObjectValue(); if (value instanceof ScriptFunction) { final ScriptFunction func = (ScriptFunction)value; diff --git a/nashorn/src/jdk/nashorn/internal/objects/NativeNumber.java b/nashorn/src/jdk/nashorn/internal/objects/NativeNumber.java index 09289a015d0..02d9b99efdc 100644 --- a/nashorn/src/jdk/nashorn/internal/objects/NativeNumber.java +++ b/nashorn/src/jdk/nashorn/internal/objects/NativeNumber.java @@ -34,6 +34,7 @@ import static jdk.nashorn.internal.lookup.Lookup.MH; import java.lang.invoke.MethodHandle; import java.lang.invoke.MethodHandles; +import java.lang.invoke.MethodType; import java.text.NumberFormat; import java.util.Locale; import jdk.internal.dynalink.linker.GuardedInvocation; @@ -57,7 +58,10 @@ import jdk.nashorn.internal.runtime.linker.PrimitiveLookup; @ScriptClass("Number") public final class NativeNumber extends ScriptObject { - static final MethodHandle WRAPFILTER = findWrapFilter(); + // Method handle to create an object wrapper for a primitive number + private static final MethodHandle WRAPFILTER = findOwnMH("wrapFilter", MH.type(NativeNumber.class, Object.class)); + // Method handle to retrieve the Number prototype object + private static final MethodHandle PROTOFILTER = findOwnMH("protoFilter", MH.type(Object.class, Object.class)); /** ECMA 15.7.3.2 largest positive finite value */ @Property(attributes = Attribute.NON_ENUMERABLE_CONSTANT, where = Where.CONSTRUCTOR) @@ -322,7 +326,7 @@ public final class NativeNumber extends ScriptObject { * @return Link to be invoked at call site. */ public static GuardedInvocation lookupPrimitive(final LinkRequest request, final Object receiver) { - return PrimitiveLookup.lookupPrimitive(request, Number.class, new NativeNumber(((Number)receiver).doubleValue()), WRAPFILTER); + return PrimitiveLookup.lookupPrimitive(request, Number.class, new NativeNumber(((Number)receiver).doubleValue()), WRAPFILTER, PROTOFILTER); } @SuppressWarnings("unused") @@ -330,6 +334,11 @@ public final class NativeNumber extends ScriptObject { return new NativeNumber(((Number)receiver).doubleValue()); } + @SuppressWarnings("unused") + private static Object protoFilter(final Object object) { + return Global.instance().getNumberPrototype(); + } + private static double getNumberValue(final Object self) { if (self instanceof Number) { return ((Number)self).doubleValue(); @@ -378,7 +387,7 @@ public final class NativeNumber extends ScriptObject { return str; } - private static MethodHandle findWrapFilter() { - return MH.findStatic(MethodHandles.lookup(), NativeNumber.class, "wrapFilter", MH.type(NativeNumber.class, Object.class)); + private static MethodHandle findOwnMH(final String name, final MethodType type) { + return MH.findStatic(MethodHandles.lookup(), NativeNumber.class, name, type); } } diff --git a/nashorn/src/jdk/nashorn/internal/objects/NativeString.java b/nashorn/src/jdk/nashorn/internal/objects/NativeString.java index 2370f514518..53ae9a23004 100644 --- a/nashorn/src/jdk/nashorn/internal/objects/NativeString.java +++ b/nashorn/src/jdk/nashorn/internal/objects/NativeString.java @@ -32,6 +32,7 @@ import static jdk.nashorn.internal.runtime.ScriptRuntime.UNDEFINED; import java.lang.invoke.MethodHandle; import java.lang.invoke.MethodHandles; +import java.lang.invoke.MethodType; import java.text.Collator; import java.util.ArrayList; import java.util.Arrays; @@ -69,7 +70,10 @@ public final class NativeString extends ScriptObject { private final CharSequence value; - static final MethodHandle WRAPFILTER = findWrapFilter(); + // Method handle to create an object wrapper for a primitive string + private static final MethodHandle WRAPFILTER = findOwnMH("wrapFilter", MH.type(NativeString.class, Object.class)); + // Method handle to retrieve the String prototype object + private static final MethodHandle PROTOFILTER = findOwnMH("protoFilter", MH.type(Object.class, Object.class)); // initialized by nasgen private static PropertyMap $nasgenmap$; @@ -1199,7 +1203,7 @@ public final class NativeString extends ScriptObject { */ public static GuardedInvocation lookupPrimitive(final LinkRequest request, final Object receiver) { final MethodHandle guard = NashornGuards.getInstanceOf2Guard(String.class, ConsString.class); - return PrimitiveLookup.lookupPrimitive(request, guard, new NativeString((CharSequence)receiver), WRAPFILTER); + return PrimitiveLookup.lookupPrimitive(request, guard, new NativeString((CharSequence)receiver), WRAPFILTER, PROTOFILTER); } @SuppressWarnings("unused") @@ -1207,6 +1211,11 @@ public final class NativeString extends ScriptObject { return new NativeString((CharSequence)receiver); } + @SuppressWarnings("unused") + private static Object protoFilter(final Object object) { + return Global.instance().getStringPrototype(); + } + private static CharSequence getCharSequence(final Object self) { if (self instanceof String || self instanceof ConsString) { return (CharSequence)self; @@ -1254,7 +1263,7 @@ public final class NativeString extends ScriptObject { return key >= 0 && key < value.length(); } - private static MethodHandle findWrapFilter() { - return MH.findStatic(MethodHandles.lookup(), NativeString.class, "wrapFilter", MH.type(NativeString.class, Object.class)); + private static MethodHandle findOwnMH(final String name, final MethodType type) { + return MH.findStatic(MethodHandles.lookup(), NativeString.class, name, type); } } diff --git a/nashorn/src/jdk/nashorn/internal/objects/ScriptFunctionImpl.java b/nashorn/src/jdk/nashorn/internal/objects/ScriptFunctionImpl.java index 9852c96273d..fe18be990b3 100644 --- a/nashorn/src/jdk/nashorn/internal/objects/ScriptFunctionImpl.java +++ b/nashorn/src/jdk/nashorn/internal/objects/ScriptFunctionImpl.java @@ -75,7 +75,7 @@ public class ScriptFunctionImpl extends ScriptFunction { private static final Object LAZY_PROTOTYPE = new Object(); private ScriptFunctionImpl(final String name, final MethodHandle invokeHandle, final MethodHandle[] specs, final Global global) { - super(name, invokeHandle, getInitialMap(), null, specs, false, true, true); + super(name, invokeHandle, getInitialMap(), null, specs, ScriptFunctionData.IS_BUILTIN_CONSTRUCTOR); init(global); } @@ -92,7 +92,7 @@ public class ScriptFunctionImpl extends ScriptFunction { } private ScriptFunctionImpl(final String name, final MethodHandle invokeHandle, final PropertyMap map, final MethodHandle[] specs, final Global global) { - super(name, invokeHandle, map.addAll(getInitialMap()), null, specs, false, true, true); + super(name, invokeHandle, map.addAll(getInitialMap()), null, specs, ScriptFunctionData.IS_BUILTIN_CONSTRUCTOR); init(global); } @@ -109,8 +109,8 @@ public class ScriptFunctionImpl extends ScriptFunction { this(name, invokeHandle, map, specs, Global.instance()); } - private ScriptFunctionImpl(final String name, final MethodHandle methodHandle, final ScriptObject scope, final MethodHandle[] specs, final boolean isStrict, final boolean isBuiltin, final boolean isConstructor, final Global global) { - super(name, methodHandle, getMap(global, isStrict), scope, specs, isStrict, isBuiltin, isConstructor); + private ScriptFunctionImpl(final String name, final MethodHandle methodHandle, final ScriptObject scope, final MethodHandle[] specs, final int flags, final Global global) { + super(name, methodHandle, getMap(global, isStrict(flags)), scope, specs, flags); init(global); } @@ -121,12 +121,10 @@ public class ScriptFunctionImpl extends ScriptFunction { * @param methodHandle handle for invocation * @param scope scope object * @param specs specialized versions of this method, if available, null otherwise - * @param isStrict are we in strict mode - * @param isBuiltin is this a built-in function - * @param isConstructor can the function be used as a constructor (most can; some built-ins are restricted). + * @param flags {@link ScriptFunctionData} flags */ - ScriptFunctionImpl(final String name, final MethodHandle methodHandle, final ScriptObject scope, final MethodHandle[] specs, final boolean isStrict, final boolean isBuiltin, final boolean isConstructor) { - this(name, methodHandle, scope, specs, isStrict, isBuiltin, isConstructor, Global.instance()); + ScriptFunctionImpl(final String name, final MethodHandle methodHandle, final ScriptObject scope, final MethodHandle[] specs, final int flags) { + this(name, methodHandle, scope, specs, flags, Global.instance()); } private ScriptFunctionImpl(final RecompilableScriptFunctionData data, final ScriptObject scope, final Global global) { @@ -173,6 +171,10 @@ public class ScriptFunctionImpl extends ScriptFunction { return newMap; } + private static boolean isStrict(final int flags) { + return (flags & ScriptFunctionData.IS_STRICT) != 0; + } + // Choose the map based on strict mode! private static PropertyMap getMap(final Global global, final boolean strict) { return strict ? getInitialStrictMap() : getInitialMap(); @@ -211,7 +213,7 @@ public class ScriptFunctionImpl extends ScriptFunction { * @return new ScriptFunction */ static ScriptFunction makeFunction(final String name, final MethodHandle methodHandle, final MethodHandle[] specs) { - final ScriptFunctionImpl func = new ScriptFunctionImpl(name, methodHandle, null, specs, false, true, false); + final ScriptFunctionImpl func = new ScriptFunctionImpl(name, methodHandle, null, specs, ScriptFunctionData.IS_BUILTIN); func.setPrototype(UNDEFINED); // Non-constructor built-in functions do not have "prototype" property func.deleteOwnProperty(func.getMap().findProperty("prototype")); diff --git a/nashorn/src/jdk/nashorn/internal/parser/Parser.java b/nashorn/src/jdk/nashorn/internal/parser/Parser.java index 60cbaccb68e..f6b962a93e1 100644 --- a/nashorn/src/jdk/nashorn/internal/parser/Parser.java +++ b/nashorn/src/jdk/nashorn/internal/parser/Parser.java @@ -1799,6 +1799,7 @@ loop: case THIS: final String name = type.getName(); next(); + lc.setFlag(lc.getCurrentFunction(), FunctionNode.USES_THIS); return new IdentNode(primaryToken, finish, name); case IDENT: final IdentNode ident = getIdent(); diff --git a/nashorn/src/jdk/nashorn/internal/runtime/AccessorProperty.java b/nashorn/src/jdk/nashorn/internal/runtime/AccessorProperty.java index 702ca76ba1f..d22a956760b 100644 --- a/nashorn/src/jdk/nashorn/internal/runtime/AccessorProperty.java +++ b/nashorn/src/jdk/nashorn/internal/runtime/AccessorProperty.java @@ -141,10 +141,12 @@ public final class AccessorProperty extends Property { private Class currentType; /** - * Delegate constructor. This is used when adding properties to the Global scope, which - * is necessary for outermost levels in a script (the ScriptObject is represented by - * a JO-prefixed ScriptObject class, but the properties need to be in the Global scope - * and are thus rebound with that as receiver + * Delegate constructor for bound properties. This is used for properties created by + * {@link ScriptRuntime#mergeScope} and the Nashorn {@code Object.bindProperties} method. + * The former is used to add a script's defined globals to the current global scope while + * still storing them in a JO-prefixed ScriptObject class. + * + *

      All properties created by this constructor have the {@link #IS_BOUND} flag set.

      * * @param property accessor property to rebind * @param delegate delegate object to rebind receiver to @@ -157,6 +159,8 @@ public final class AccessorProperty extends Property { this.objectGetter = bindTo(property.ensureObjectGetter(), delegate); this.objectSetter = bindTo(property.ensureObjectSetter(), delegate); + // Properties created this way are bound to a delegate + this.flags |= IS_BOUND; setCurrentType(property.getCurrentType()); } diff --git a/nashorn/src/jdk/nashorn/internal/runtime/Context.java b/nashorn/src/jdk/nashorn/internal/runtime/Context.java index 3e6a1488fa3..51287affc71 100644 --- a/nashorn/src/jdk/nashorn/internal/runtime/Context.java +++ b/nashorn/src/jdk/nashorn/internal/runtime/Context.java @@ -36,6 +36,8 @@ import java.io.IOException; import java.io.PrintWriter; import java.lang.invoke.MethodHandle; import java.lang.invoke.MethodHandles; +import java.lang.ref.ReferenceQueue; +import java.lang.ref.SoftReference; import java.lang.reflect.Modifier; import java.net.MalformedURLException; import java.net.URL; @@ -46,6 +48,7 @@ import java.security.CodeSource; import java.security.Permissions; import java.security.PrivilegedAction; import java.security.ProtectionDomain; +import java.util.LinkedHashMap; import java.util.Map; import java.util.concurrent.atomic.AtomicLong; import jdk.internal.org.objectweb.asm.ClassReader; @@ -155,6 +158,9 @@ public final class Context { private static final ThreadLocal currentGlobal = new ThreadLocal<>(); + // class cache + private ClassCache classCache; + /** * Get the current global scope * @return the current global scope @@ -348,6 +354,11 @@ public final class Context { this.classPathLoader = null; } + final int cacheSize = env._class_cache_size; + if (cacheSize > 0) { + classCache = new ClassCache(cacheSize); + } + // print version info if asked. if (env._version) { getErr().println("nashorn " + Version.version()); @@ -659,7 +670,7 @@ public final class Context { public static void checkPackageAccess(final String pkgName) { final SecurityManager sm = System.getSecurityManager(); if (sm != null) { - checkPackageAccess(sm, pkgName.endsWith(".")? pkgName : pkgName + "."); + checkPackageAccess(sm, pkgName.endsWith(".") ? pkgName : pkgName + "."); } } @@ -925,16 +936,10 @@ public final class Context { // start with no errors, no warnings. errMan.reset(); - GlobalObject global = null; - Class script; - - if (env._class_cache_size > 0) { - global = (GlobalObject)Context.getGlobalTrusted(); - script = global.findCachedClass(source); - if (script != null) { - Compiler.LOG.fine("Code cache hit for ", source, " avoiding recompile."); - return script; - } + Class script = findCachedClass(source); + if (script != null) { + Compiler.LOG.fine("Code cache hit for ", source, " avoiding recompile."); + return script; } final FunctionNode functionNode = new Parser(env, source, errMan, strict).parse(); @@ -963,10 +968,7 @@ public final class Context { final FunctionNode newFunctionNode = compiler.compile(functionNode); script = compiler.install(newFunctionNode); - - if (global != null) { - global.cacheClass(source, script); - } + cacheClass(source, script); return script; } @@ -988,4 +990,60 @@ public final class Context { private long getUniqueScriptId() { return uniqueScriptId.getAndIncrement(); } + + /** + * Cache for compiled script classes. + */ + @SuppressWarnings("serial") + private static class ClassCache extends LinkedHashMap { + private final int size; + private final ReferenceQueue> queue; + + ClassCache(int size) { + super(size, 0.75f, true); + this.size = size; + this.queue = new ReferenceQueue<>(); + } + + void cache(final Source source, final Class clazz) { + put(source, new ClassReference(clazz, queue, source)); + } + + @Override + protected boolean removeEldestEntry(final Map.Entry eldest) { + return size() > size; + } + + @Override + public ClassReference get(Object key) { + for (ClassReference ref; (ref = (ClassReference)queue.poll()) != null; ) { + remove(ref.source); + } + return super.get(key); + } + + } + + private static class ClassReference extends SoftReference> { + private final Source source; + + ClassReference(final Class clazz, final ReferenceQueue> queue, final Source source) { + super(clazz, queue); + this.source = source; + } + } + + // Class cache management + private Class findCachedClass(final Source source) { + ClassReference ref = classCache == null ? null : classCache.get(source); + return ref != null ? ref.get() : null; + } + + private void cacheClass(final Source source, final Class clazz) { + if (classCache != null) { + classCache.cache(source, clazz); + } + } + + } diff --git a/nashorn/src/jdk/nashorn/internal/runtime/FinalScriptFunctionData.java b/nashorn/src/jdk/nashorn/internal/runtime/FinalScriptFunctionData.java index c7a410ea821..f16cf41c3ab 100644 --- a/nashorn/src/jdk/nashorn/internal/runtime/FinalScriptFunctionData.java +++ b/nashorn/src/jdk/nashorn/internal/runtime/FinalScriptFunctionData.java @@ -38,31 +38,27 @@ final class FinalScriptFunctionData extends ScriptFunctionData { /** * Constructor - used for bind * - * @param name name - * @param arity arity - * @param functions precompiled code - * @param isStrict strict - * @param isBuiltin builtin - * @param isConstructor constructor + * @param name name + * @param arity arity + * @param functions precompiled code + * @param flags {@link ScriptFunctionData} flags */ - FinalScriptFunctionData(final String name, int arity, CompiledFunctions functions, final boolean isStrict, final boolean isBuiltin, final boolean isConstructor) { - super(name, arity, isStrict, isBuiltin, isConstructor); + FinalScriptFunctionData(final String name, final int arity, final CompiledFunctions functions, final int flags) { + super(name, arity, flags); code.addAll(functions); } /** - * Constructor - used from ScriptFunction. This assumes that we have code alraedy for the + * Constructor - used from ScriptFunction. This assumes that we have code already for the * method (typically a native method) and possibly specializations. * - * @param name name - * @param mh method handle for generic version of method - * @param specs specializations - * @param isStrict strict - * @param isBuiltin builtin - * @param isConstructor constructor + * @param name name + * @param mh method handle for generic version of method + * @param specs specializations + * @param flags {@link ScriptFunctionData} flags */ - FinalScriptFunctionData(final String name, final MethodHandle mh, final MethodHandle[] specs, final boolean isStrict, final boolean isBuiltin, final boolean isConstructor) { - super(name, arity(mh), isStrict, isBuiltin, isConstructor); + FinalScriptFunctionData(final String name, final MethodHandle mh, final MethodHandle[] specs, final int flags) { + super(name, arity(mh), flags); addInvoker(mh); if (specs != null) { diff --git a/nashorn/src/jdk/nashorn/internal/runtime/GlobalObject.java b/nashorn/src/jdk/nashorn/internal/runtime/GlobalObject.java index 3779f3bda9c..20046388292 100644 --- a/nashorn/src/jdk/nashorn/internal/runtime/GlobalObject.java +++ b/nashorn/src/jdk/nashorn/internal/runtime/GlobalObject.java @@ -210,22 +210,6 @@ public interface GlobalObject { */ public Object getDefaultValue(ScriptObject sobj, Class typeHint); - /** - * Find the compiled Class for the given script source, if available - * - * @param source Source object of the script - * @return compiled Class object or null - */ - public Class findCachedClass(Source source); - - /** - * Put the Source associated Class object in the Source-to-Class cache - * - * @param source Source of the script - * @param clazz compiled Class object for the source - */ - public void cacheClass(Source source, Class clazz); - /** * Get cached InvokeByName object for the given key * @param key key to be associated with InvokeByName object diff --git a/nashorn/src/jdk/nashorn/internal/runtime/Property.java b/nashorn/src/jdk/nashorn/internal/runtime/Property.java index d1dbe2adb4b..885fa712a13 100644 --- a/nashorn/src/jdk/nashorn/internal/runtime/Property.java +++ b/nashorn/src/jdk/nashorn/internal/runtime/Property.java @@ -84,9 +84,13 @@ public abstract class Property { /** Can this property be undefined? */ public static final int CAN_BE_UNDEFINED = 1 << 8; - /* Is this a function declaration property ? */ + /** Is this a function declaration property ? */ public static final int IS_FUNCTION_DECLARATION = 1 << 9; + /** Is this property bound to a receiver? This means get/set operations will be delegated to + * a statically defined object instead of the object passed as callsite parameter. */ + public static final int IS_BOUND = 1 << 10; + /** Property key. */ private final String key; @@ -251,6 +255,16 @@ public abstract class Property { return (flags & IS_SPILL) == IS_SPILL; } + /** + * Is this property bound to a receiver? If this method returns {@code true} get and set operations + * will be delegated to a statically bound object instead of the object passed as parameter. + * + * @return true if this is a bound property + */ + public boolean isBound() { + return (flags & IS_BOUND) == IS_BOUND; + } + /** * Does this property use any slots in the spill array described in * {@link Property#isSpill}? In that case how many. Currently a property diff --git a/nashorn/src/jdk/nashorn/internal/runtime/RecompilableScriptFunctionData.java b/nashorn/src/jdk/nashorn/internal/runtime/RecompilableScriptFunctionData.java index 2b18cbc87b6..7e1a516aa6d 100644 --- a/nashorn/src/jdk/nashorn/internal/runtime/RecompilableScriptFunctionData.java +++ b/nashorn/src/jdk/nashorn/internal/runtime/RecompilableScriptFunctionData.java @@ -103,9 +103,7 @@ public final class RecompilableScriptFunctionData extends ScriptFunctionData { public RecompilableScriptFunctionData(final FunctionNode functionNode, final CodeInstaller installer, final String allocatorClassName, final PropertyMap allocatorMap) { super(functionName(functionNode), functionNode.getParameters().size(), - functionNode.isStrict(), - false, - true); + getFlags(functionNode)); this.functionNode = functionNode; this.source = functionNode.getSource(); @@ -129,10 +127,11 @@ public final class RecompilableScriptFunctionData extends ScriptFunctionData { final StringBuilder sb = new StringBuilder(); if (source != null) { - sb.append(source.getName()) - .append(':') - .append(functionNode.getLineNumber()) - .append(' '); + sb.append(source.getName()); + if (functionNode != null) { + sb.append(':').append(functionNode.getLineNumber()); + } + sb.append(' '); } return sb.toString() + super.toString(); @@ -159,6 +158,20 @@ public final class RecompilableScriptFunctionData extends ScriptFunctionData { return Token.toDesc(TokenType.FUNCTION, position, length); } + private static int getFlags(final FunctionNode functionNode) { + int flags = IS_CONSTRUCTOR; + if (functionNode.isStrict()) { + flags |= IS_STRICT; + } + if (functionNode.needsCallee()) { + flags |= NEEDS_CALLEE; + } + if (functionNode.usesThis() || functionNode.hasEval()) { + flags |= USES_THIS; + } + return flags; + } + @Override ScriptObject allocate(final PropertyMap map) { try { @@ -182,41 +195,42 @@ public final class RecompilableScriptFunctionData extends ScriptFunctionData { return allocatorMap; } + + @Override + protected void ensureCompiled() { + if (functionNode != null && functionNode.isLazy()) { + Compiler.LOG.info("Trampoline hit: need to do lazy compilation of '", functionNode.getName(), "'"); + final Compiler compiler = new Compiler(installer); + functionNode = compiler.compile(functionNode); + assert !functionNode.isLazy(); + compiler.install(functionNode); + flags = getFlags(functionNode); + } + } + @Override protected synchronized void ensureCodeGenerated() { - if (!code.isEmpty()) { - return; // nothing to do, we have code, at least some. - } + if (!code.isEmpty()) { + return; // nothing to do, we have code, at least some. + } - if (functionNode.isLazy()) { - Compiler.LOG.info("Trampoline hit: need to do lazy compilation of '", functionNode.getName(), "'"); - final Compiler compiler = new Compiler(installer); - functionNode = compiler.compile(functionNode); - assert !functionNode.isLazy(); - compiler.install(functionNode); + ensureCompiled(); - /* - * We don't need to update any flags - varArgs and needsCallee are instrincic - * in the function world we need to get a destination node from the compile instead - * and replace it with our function node. TODO - */ - } + /* + * We can't get to this program point unless we have bytecode, either from + * eager compilation or from running a lazy compile on the lines above + */ - /* - * We can't get to this program point unless we have bytecode, either from - * eager compilation or from running a lazy compile on the lines above - */ + assert functionNode.hasState(CompilationState.EMITTED) : functionNode.getName() + " " + functionNode.getState() + " " + Debug.id(functionNode); - assert functionNode.hasState(CompilationState.EMITTED) : functionNode.getName() + " " + functionNode.getState() + " " + Debug.id(functionNode); + // code exists - look it up and add it into the automatically sorted invoker list + addCode(functionNode); - // code exists - look it up and add it into the automatically sorted invoker list - addCode(functionNode); - - if (! functionNode.canSpecialize()) { - // allow GC to claim IR stuff that is not needed anymore - functionNode = null; - installer = null; - } + if (! functionNode.canSpecialize()) { + // allow GC to claim IR stuff that is not needed anymore + functionNode = null; + installer = null; + } } private MethodHandle addCode(final FunctionNode fn) { diff --git a/nashorn/src/jdk/nashorn/internal/runtime/ScriptFunction.java b/nashorn/src/jdk/nashorn/internal/runtime/ScriptFunction.java index 0f5174ea15b..d0c6989b14a 100644 --- a/nashorn/src/jdk/nashorn/internal/runtime/ScriptFunction.java +++ b/nashorn/src/jdk/nashorn/internal/runtime/ScriptFunction.java @@ -66,6 +66,8 @@ public abstract class ScriptFunction extends ScriptObject { private static final MethodHandle WRAPFILTER = findOwnMH("wrapFilter", Object.class, Object.class); + private static final MethodHandle GLOBALFILTER = findOwnMH("globalFilter", Object.class, Object.class); + /** method handle to scope getter for this ScriptFunction */ public static final Call GET_SCOPE = virtualCallNoLookup(ScriptFunction.class, "getScope", ScriptObject.class); @@ -91,9 +93,7 @@ public abstract class ScriptFunction extends ScriptObject { * @param map property map * @param scope scope * @param specs specialized version of this function - other method handles - * @param strict is this a strict mode function? - * @param builtin is this a built in function? - * @param isConstructor is this a constructor? + * @param flags {@link ScriptFunctionData} flags */ protected ScriptFunction( final String name, @@ -101,11 +101,9 @@ public abstract class ScriptFunction extends ScriptObject { final PropertyMap map, final ScriptObject scope, final MethodHandle[] specs, - final boolean strict, - final boolean builtin, - final boolean isConstructor) { + final int flags) { - this(new FinalScriptFunctionData(name, methodHandle, specs, strict, builtin, isConstructor), map, scope); + this(new FinalScriptFunctionData(name, methodHandle, specs, flags), map, scope); } /** @@ -480,6 +478,13 @@ public abstract class ScriptFunction extends ScriptObject { return ((GlobalObject)Context.getGlobalTrusted()).wrapAsObject(obj); } + + @SuppressWarnings("unused") + private static Object globalFilter(final Object object) { + // replace whatever we get with the current global object + return Context.getGlobalTrusted(); + } + /** * dyn:call call site signature: (callee, thiz, [args...]) * generated method signature: (callee, thiz, [args...]) @@ -495,11 +500,11 @@ public abstract class ScriptFunction extends ScriptObject { @Override protected GuardedInvocation findCallMethod(final CallSiteDescriptor desc, final LinkRequest request) { final MethodType type = desc.getMethodType(); + final boolean scopeCall = NashornCallSiteDescriptor.isScope(desc); if (request.isCallSiteUnstable()) { - // (this, callee, args...) => (this, callee, args[]) - final MethodHandle collector = MH.asCollector(ScriptRuntime.APPLY.methodHandle(), Object[].class, - type.parameterCount() - 2); + // (callee, this, args...) => (callee, this, args[]) + final MethodHandle collector = MH.asCollector(ScriptRuntime.APPLY.methodHandle(), Object[].class, type.parameterCount() - 2); // If call site is statically typed to take a ScriptFunction, we don't need a guard, otherwise we need a // generic "is this a ScriptFunction?" guard. @@ -510,17 +515,12 @@ public abstract class ScriptFunction extends ScriptObject { MethodHandle boundHandle; MethodHandle guard = null; - final boolean scopeCall = NashornCallSiteDescriptor.isScope(desc); - if (data.needsCallee()) { final MethodHandle callHandle = getBestInvoker(type, request.getArguments()); - if (scopeCall) { + if (scopeCall && needsWrappedThis()) { // Make a handle that drops the passed "this" argument and substitutes either Global or Undefined - // (callee, this, args...) => (callee, args...) - boundHandle = MH.insertArguments(callHandle, 1, needsWrappedThis() ? Context.getGlobalTrusted() : ScriptRuntime.UNDEFINED); - // (callee, args...) => (callee, [this], args...) - boundHandle = MH.dropArguments(boundHandle, 1, Object.class); - + // (callee, this, args...) => (callee, [this], args...) + boundHandle = MH.filterArguments(callHandle, 1, GLOBALFILTER); } else { // It's already (callee, this, args...), just what we need boundHandle = callHandle; @@ -531,12 +531,12 @@ public abstract class ScriptFunction extends ScriptObject { // NOTE: the only built-in named "extend" is NativeJava.extend. As a special-case we're binding the // current lookup as its "this" so it can do security-sensitive creation of adapter classes. boundHandle = MH.dropArguments(MH.bindTo(callHandle, desc.getLookup()), 0, Object.class, Object.class); - } else if (scopeCall) { + } else if (scopeCall && needsWrappedThis()) { // Make a handle that drops the passed "this" argument and substitutes either Global or Undefined - // (this, args...) => (args...) - boundHandle = MH.bindTo(callHandle, needsWrappedThis() ? Context.getGlobalTrusted() : ScriptRuntime.UNDEFINED); - // (args...) => ([callee], [this], args...) - boundHandle = MH.dropArguments(boundHandle, 0, Object.class, Object.class); + // (this, args...) => ([this], args...) + boundHandle = MH.filterArguments(callHandle, 0, GLOBALFILTER); + // ([this], args...) => ([callee], [this], args...) + boundHandle = MH.dropArguments(boundHandle, 0, Object.class); } else { // (this, args...) => ([callee], this, args...) boundHandle = MH.dropArguments(callHandle, 0, Object.class); diff --git a/nashorn/src/jdk/nashorn/internal/runtime/ScriptFunctionData.java b/nashorn/src/jdk/nashorn/internal/runtime/ScriptFunctionData.java index f0569937dd0..de39449b81b 100644 --- a/nashorn/src/jdk/nashorn/internal/runtime/ScriptFunctionData.java +++ b/nashorn/src/jdk/nashorn/internal/runtime/ScriptFunctionData.java @@ -47,33 +47,44 @@ public abstract class ScriptFunctionData { /** All versions of this function that have been generated to code */ protected final CompiledFunctions code; + /** Function flags */ + protected int flags; + private int arity; - private final boolean isStrict; - - private final boolean isBuiltin; - - private final boolean isConstructor; - private static final MethodHandle NEWFILTER = findOwnMH("newFilter", Object.class, Object.class, Object.class); private static final MethodHandle BIND_VAR_ARGS = findOwnMH("bindVarArgs", Object[].class, Object[].class, Object[].class); + /** Is this a strict mode function? */ + public static final int IS_STRICT = 1 << 0; + /** Is this a built-in function? */ + public static final int IS_BUILTIN = 1 << 1; + /** Is this a constructor function? */ + public static final int IS_CONSTRUCTOR = 1 << 2; + /** Does this function expect a callee argument? */ + public static final int NEEDS_CALLEE = 1 << 3; + /** Does this function make use of the this-object argument? */ + public static final int USES_THIS = 1 << 4; + + /** Flag for strict or built-in functions */ + public static final int IS_STRICT_OR_BUILTIN = IS_STRICT | IS_BUILTIN; + /** Flag for built-in constructors */ + public static final int IS_BUILTIN_CONSTRUCTOR = IS_BUILTIN | IS_CONSTRUCTOR; + /** Flag for strict constructors */ + public static final int IS_STRICT_CONSTRUCTOR = IS_STRICT | IS_CONSTRUCTOR; + /** * Constructor * * @param name script function name * @param arity arity - * @param isStrict is the function strict - * @param isBuiltin is the function built in - * @param isConstructor is the function a constructor + * @param flags the function flags */ - ScriptFunctionData(final String name, final int arity, final boolean isStrict, final boolean isBuiltin, final boolean isConstructor) { - this.name = name; - this.arity = arity; - this.code = new CompiledFunctions(); - this.isStrict = isStrict; - this.isBuiltin = isBuiltin; - this.isConstructor = isConstructor; + ScriptFunctionData(final String name, final int arity, final int flags) { + this.name = name; + this.arity = arity; + this.code = new CompiledFunctions(); + this.flags = flags; } final int getArity() { @@ -105,21 +116,21 @@ public abstract class ScriptFunctionData { * @return true if strict, false otherwise */ public boolean isStrict() { - return isStrict; + return (flags & IS_STRICT) != 0; } boolean isBuiltin() { - return isBuiltin; + return (flags & IS_BUILTIN) != 0; } boolean isConstructor() { - return isConstructor; + return (flags & IS_CONSTRUCTOR) != 0; } boolean needsCallee() { - // we don't know if we need a callee or not unless we are generated - ensureCodeGenerated(); - return code.needsCallee(); + // we don't know if we need a callee or not unless code has been compiled + ensureCompiled(); + return (flags & NEEDS_CALLEE) != 0; } /** @@ -128,7 +139,7 @@ public abstract class ScriptFunctionData { * @return true if this argument must be an object */ boolean needsWrappedThis() { - return !isStrict && !isBuiltin; + return (flags & USES_THIS) != 0 && (flags & IS_STRICT_OR_BUILTIN) == 0; } String toSource() { @@ -201,6 +212,15 @@ public abstract class ScriptFunctionData { //empty } + /** + * If we can have lazy code generation, this is a hook to ensure that the code has been compiled. + * This does not guarantee the code been installed in this {@code ScriptFunctionData} instance; + * use {@link #ensureCodeGenerated()} to install the actual method handles. + */ + protected void ensureCompiled() { + //empty + } + /** * Return a generic Object/Object invoker for this method. It will ensure code * is generated, get the most generic of all versions of this function and adapt it @@ -259,6 +279,8 @@ public abstract class ScriptFunctionData { final Object[] allArgs = args == null ? ScriptRuntime.EMPTY_ARRAY : args; final int length = args == null ? 0 : args.length; + // Clear the callee and this flags + final int boundFlags = flags & ~NEEDS_CALLEE & ~USES_THIS; CompiledFunctions boundList = new CompiledFunctions(); if (code.size() == 1) { @@ -273,8 +295,7 @@ public abstract class ScriptFunctionData { boundList.add(bind(inv, fn, self, allArgs)); } - ScriptFunctionData boundData = new FinalScriptFunctionData(name, arity == -1 ? -1 : Math.max(0, arity - length), boundList, isStrict(), isBuiltin(), isConstructor()); - return boundData; + return new FinalScriptFunctionData(name, arity == -1 ? -1 : Math.max(0, arity - length), boundList, boundFlags); } /** diff --git a/nashorn/src/jdk/nashorn/internal/runtime/ScriptObject.java b/nashorn/src/jdk/nashorn/internal/runtime/ScriptObject.java index b7f9c4c1ed0..4696bdeacad 100644 --- a/nashorn/src/jdk/nashorn/internal/runtime/ScriptObject.java +++ b/nashorn/src/jdk/nashorn/internal/runtime/ScriptObject.java @@ -66,6 +66,7 @@ import jdk.nashorn.internal.lookup.Lookup; import jdk.nashorn.internal.lookup.MethodHandleFactory; import jdk.nashorn.internal.objects.AccessorPropertyDescriptor; import jdk.nashorn.internal.objects.DataPropertyDescriptor; +import jdk.nashorn.internal.objects.Global; import jdk.nashorn.internal.runtime.arrays.ArrayData; import jdk.nashorn.internal.runtime.arrays.ArrayIndex; import jdk.nashorn.internal.runtime.linker.Bootstrap; @@ -131,7 +132,8 @@ public abstract class ScriptObject implements PropertyAccess { static final MethodHandle GETPROTO = findOwnMH("getProto", ScriptObject.class); static final MethodHandle SETPROTOCHECK = findOwnMH("setProtoCheck", void.class, Object.class); - static final MethodHandle MEGAMORPHIC_GET = findOwnMH("megamorphicGet", Object.class, String.class, boolean.class); + static final MethodHandle MEGAMORPHIC_GET = findOwnMH("megamorphicGet", Object.class, String.class, boolean.class, boolean.class); + static final MethodHandle GLOBALFILTER = findOwnMH("globalFilter", Object.class, Object.class); static final MethodHandle SETFIELD = findOwnMH("setField", void.class, CallSiteDescriptor.class, PropertyMap.class, PropertyMap.class, MethodHandle.class, Object.class, Object.class); static final MethodHandle SETSPILL = findOwnMH("setSpill", void.class, CallSiteDescriptor.class, PropertyMap.class, PropertyMap.class, int.class, Object.class, Object.class); @@ -225,6 +227,7 @@ public abstract class ScriptObject implements PropertyAccess { final Property oldProp = newMap.findProperty(key); if (oldProp == null) { if (property instanceof UserAccessorProperty) { + // Note: we copy accessor functions to this object which is semantically different from binding. final UserAccessorProperty prop = this.newUserAccessors(key, property.getFlags(), property.getGetterFunction(source), property.getSetterFunction(source)); newMap = newMap.addPropertyNoHistory(prop); } else { @@ -974,17 +977,6 @@ public abstract class ScriptObject implements PropertyAccess { return ObjectClassGenerator.UNDEFINED_DOUBLE; } - /** - * Get the object value of a property - * - * @param find {@link FindProperty} lookup result - * - * @return the value of the property - */ - protected static Object getObjectValue(final FindProperty find) { - return find.getObjectValue(); - } - /** * Return methodHandle of value function for call. * @@ -995,7 +987,7 @@ public abstract class ScriptObject implements PropertyAccess { * @return value of property as a MethodHandle or null. */ protected MethodHandle getCallMethodHandle(final FindProperty find, final MethodType type, final String bindName) { - return getCallMethodHandle(getObjectValue(find), type, bindName); + return getCallMethodHandle(find.getObjectValue(), type, bindName); } /** @@ -1019,7 +1011,7 @@ public abstract class ScriptObject implements PropertyAccess { * @return Value of property. */ public final Object getWithProperty(final Property property) { - return getObjectValue(new FindProperty(this, this, property)); + return new FindProperty(this, this, property).getObjectValue(); } /** @@ -1740,7 +1732,7 @@ public abstract class ScriptObject implements PropertyAccess { protected GuardedInvocation findGetMethod(final CallSiteDescriptor desc, final LinkRequest request, final String operator) { final String name = desc.getNameToken(CallSiteDescriptor.NAME_OPERAND); if (request.isCallSiteUnstable() || hasWithScope()) { - return findMegaMorphicGetMethod(desc, name, "getMethod".equals(operator)); + return findMegaMorphicGetMethod(desc, name, "getMethod".equals(operator), isScope() && NashornCallSiteDescriptor.isScope(desc)); } final FindProperty find = findProperty(name, true); @@ -1765,9 +1757,8 @@ public abstract class ScriptObject implements PropertyAccess { final Property property = find.getProperty(); methodHandle = find.getGetter(returnType); - final boolean noGuard = ObjectClassGenerator.OBJECT_FIELDS_ONLY && NashornCallSiteDescriptor.isFastScope(desc) && !property.canChangeType(); - // getMap() is fine as we have the prototype switchpoint depending on where the property was found - final MethodHandle guard = noGuard ? null : NashornGuards.getMapGuard(getMap()); + // Get the appropriate guard for this callsite and property. + final MethodHandle guard = NashornGuards.getGuard(this, property, desc); final ScriptObject owner = find.getOwner(); if (methodHandle != null) { @@ -1777,31 +1768,32 @@ public abstract class ScriptObject implements PropertyAccess { } if (!property.hasGetterFunction(owner)) { - // If not a scope bind to actual prototype as changing prototype will change the property map. - // For scopes we install a filter that replaces the self object with the prototype owning the property. - methodHandle = isScope() ? - addProtoFilter(methodHandle, find.getProtoChainLength()) : - bindTo(methodHandle, owner); + // Add a filter that replaces the self object with the prototype owning the property. + methodHandle = addProtoFilter(methodHandle, find.getProtoChainLength()); } - return new GuardedInvocation(methodHandle, noGuard ? null : getProtoSwitchPoint(name, owner), guard); + return new GuardedInvocation(methodHandle, guard == null ? null : getProtoSwitchPoint(name, owner), guard); } assert !NashornCallSiteDescriptor.isFastScope(desc); return new GuardedInvocation(Lookup.emptyGetter(returnType), getProtoSwitchPoint(name, owner), guard); } - private static GuardedInvocation findMegaMorphicGetMethod(final CallSiteDescriptor desc, final String name, final boolean isMethod) { - final MethodHandle invoker = MH.insertArguments(MEGAMORPHIC_GET, 1, name, isMethod); + private static GuardedInvocation findMegaMorphicGetMethod(final CallSiteDescriptor desc, final String name, + final boolean isMethod, final boolean isScope) { + final MethodHandle invoker = MH.insertArguments(MEGAMORPHIC_GET, 1, name, isMethod, isScope); final MethodHandle guard = getScriptObjectGuard(desc.getMethodType()); return new GuardedInvocation(invoker, guard); } @SuppressWarnings("unused") - private Object megamorphicGet(final String key, final boolean isMethod) { + private Object megamorphicGet(final String key, final boolean isMethod, final boolean isScope) { final FindProperty find = findProperty(key, true); if (find != null) { - return getObjectValue(find); + return find.getObjectValue(); + } + if (isScope) { + throw referenceError("not.defined", key); } return isMethod ? getNoSuchMethod(key) : invokeNoSuchProperty(key); @@ -1996,6 +1988,15 @@ public abstract class ScriptObject implements PropertyAccess { } } + @SuppressWarnings("unused") + private static Object globalFilter(final Object object) { + ScriptObject sobj = (ScriptObject) object; + while (sobj != null && !(sobj instanceof Global)) { + sobj = sobj.getProto(); + } + return sobj; + } + private static GuardedInvocation findMegaMorphicSetMethod(final CallSiteDescriptor desc, final String name) { final MethodType type = desc.getMethodType().insertParameterTypes(1, Object.class); final GuardedInvocation inv = findSetIndexMethod(type, NashornCallSiteDescriptor.isStrict(desc)); @@ -2041,7 +2042,7 @@ public abstract class ScriptObject implements PropertyAccess { return noSuchProperty(desc, request); } - final Object value = getObjectValue(find); + final Object value = find.getObjectValue(); if (! (value instanceof ScriptFunction)) { return createEmptyGetter(desc, name); } @@ -2067,7 +2068,7 @@ public abstract class ScriptObject implements PropertyAccess { final boolean scopeAccess = isScope() && NashornCallSiteDescriptor.isScope(desc); if (find != null) { - final Object value = getObjectValue(find); + final Object value = find.getObjectValue(); ScriptFunction func = null; MethodHandle methodHandle = null; @@ -2102,7 +2103,7 @@ public abstract class ScriptObject implements PropertyAccess { final FindProperty find = findProperty(NO_SUCH_PROPERTY_NAME, true); if (find != null) { - final Object func = getObjectValue(find); + final Object func = find.getObjectValue(); if (func instanceof ScriptFunction) { return ScriptRuntime.apply((ScriptFunction)func, this, name); @@ -2124,7 +2125,7 @@ public abstract class ScriptObject implements PropertyAccess { return invokeNoSuchProperty(name); } - final Object value = getObjectValue(find); + final Object value = find.getObjectValue(); if (! (value instanceof ScriptFunction)) { return UNDEFINED; } @@ -2664,7 +2665,7 @@ public abstract class ScriptObject implements PropertyAccess { final FindProperty find = object.findProperty(key, false, false, this); if (find != null) { - return getObjectValue(find); + return find.getObjectValue(); } } @@ -2682,7 +2683,7 @@ public abstract class ScriptObject implements PropertyAccess { final FindProperty find = findProperty(key, true); if (find != null) { - return getObjectValue(find); + return find.getObjectValue(); } } @@ -2823,7 +2824,15 @@ public abstract class ScriptObject implements PropertyAccess { throw typeError("object.non.extensible", key, ScriptRuntime.safeToString(this)); } } else { - spill(key, value); + ScriptObject sobj = this; + // undefined scope properties are set in the global object. + if (isScope()) { + while (sobj != null && !(sobj instanceof Global)) { + sobj = sobj.getProto(); + } + assert sobj != null : "no parent global object in scope"; + } + sobj.spill(key, value); } } diff --git a/nashorn/src/jdk/nashorn/internal/runtime/SetMethodCreator.java b/nashorn/src/jdk/nashorn/internal/runtime/SetMethodCreator.java index bdbc8ec8b9a..2c01b6d3617 100644 --- a/nashorn/src/jdk/nashorn/internal/runtime/SetMethodCreator.java +++ b/nashorn/src/jdk/nashorn/internal/runtime/SetMethodCreator.java @@ -31,7 +31,6 @@ import static jdk.nashorn.internal.lookup.Lookup.MH; import java.lang.invoke.MethodHandle; import jdk.internal.dynalink.CallSiteDescriptor; import jdk.internal.dynalink.linker.GuardedInvocation; -import jdk.nashorn.internal.codegen.ObjectClassGenerator; import jdk.nashorn.internal.lookup.Lookup; import jdk.nashorn.internal.runtime.linker.NashornCallSiteDescriptor; import jdk.nashorn.internal.runtime.linker.NashornGuards; @@ -104,21 +103,9 @@ final class SetMethodCreator { * @return the composed guarded invocation that represents the dynamic setter method for the property. */ GuardedInvocation createGuardedInvocation() { - return new GuardedInvocation(methodHandle, getGuard()); + return new GuardedInvocation(methodHandle, NashornGuards.getGuard(sobj, property, desc)); } - private MethodHandle getGuard() { - return needsNoGuard() ? null : NashornGuards.getMapGuard(getMap()); - } - - private boolean needsNoGuard() { - return NashornCallSiteDescriptor.isFastScope(desc) && - (ObjectClassGenerator.OBJECT_FIELDS_ONLY || isPropertyTypeStable()); - } - - private boolean isPropertyTypeStable() { - return property == null || !property.canChangeType(); - } } private SetMethod createSetMethod() { @@ -153,10 +140,7 @@ final class SetMethodCreator { final MethodHandle boundHandle; if (!property.hasSetterFunction(find.getOwner()) && find.isInherited()) { - // Bind or add prototype filter depending on whether this is a scope object. - boundHandle = sobj.isScope() ? - ScriptObject.addProtoFilter(methodHandle, find.getProtoChainLength()): - ScriptObject.bindTo(methodHandle, find.getOwner()); + boundHandle = ScriptObject.addProtoFilter(methodHandle, find.getProtoChainLength()); } else { boundHandle = methodHandle; } @@ -165,7 +149,7 @@ final class SetMethodCreator { private SetMethod createGlobalPropertySetter() { final ScriptObject global = Context.getGlobalTrusted(); - return new SetMethod(ScriptObject.bindTo(global.addSpill(getName()), global), null); + return new SetMethod(MH.filterArguments(global.addSpill(getName()), 0, ScriptObject.GLOBALFILTER), null); } private SetMethod createNewPropertySetter() { diff --git a/nashorn/src/jdk/nashorn/internal/runtime/WithObject.java b/nashorn/src/jdk/nashorn/internal/runtime/WithObject.java index d4a28cd7fb4..dc48d727e48 100644 --- a/nashorn/src/jdk/nashorn/internal/runtime/WithObject.java +++ b/nashorn/src/jdk/nashorn/internal/runtime/WithObject.java @@ -88,6 +88,11 @@ public final class WithObject extends ScriptObject implements Scope { @Override public GuardedInvocation lookup(final CallSiteDescriptor desc, final LinkRequest request) { + if (request.isCallSiteUnstable()) { + // Fall back to megamorphic invocation which performs a complete lookup each time without further relinking. + return super.lookup(desc, request); + } + // With scopes can never be observed outside of Nashorn code, so all call sites that can address it will of // necessity have a Nashorn descriptor - it is safe to cast. final NashornCallSiteDescriptor ndesc = (NashornCallSiteDescriptor)desc; @@ -265,7 +270,7 @@ public final class WithObject extends ScriptObject implements Scope { } private static MethodHandle filter(final MethodHandle mh, final MethodHandle filter) { - return MH.filterArguments(mh, 0, filter); + return MH.filterArguments(mh, 0, filter.asType(filter.type().changeReturnType(mh.type().parameterType(0)))); } /** diff --git a/nashorn/src/jdk/nashorn/internal/runtime/linker/NashornGuards.java b/nashorn/src/jdk/nashorn/internal/runtime/linker/NashornGuards.java index 0b720be2740..ca3e10c48d4 100644 --- a/nashorn/src/jdk/nashorn/internal/runtime/linker/NashornGuards.java +++ b/nashorn/src/jdk/nashorn/internal/runtime/linker/NashornGuards.java @@ -29,6 +29,11 @@ import static jdk.nashorn.internal.lookup.Lookup.MH; import java.lang.invoke.MethodHandle; import java.lang.invoke.MethodHandles; +import java.lang.ref.WeakReference; +import jdk.internal.dynalink.CallSiteDescriptor; +import jdk.nashorn.internal.codegen.ObjectClassGenerator; +import jdk.nashorn.internal.objects.Global; +import jdk.nashorn.internal.runtime.Property; import jdk.nashorn.internal.runtime.PropertyMap; import jdk.nashorn.internal.runtime.ScriptFunction; import jdk.nashorn.internal.runtime.ScriptObject; @@ -40,6 +45,7 @@ public final class NashornGuards { private static final MethodHandle IS_SCRIPTOBJECT = findOwnMH("isScriptObject", boolean.class, Object.class); private static final MethodHandle IS_SCRIPTFUNCTION = findOwnMH("isScriptFunction", boolean.class, Object.class); private static final MethodHandle IS_MAP = findOwnMH("isMap", boolean.class, Object.class, PropertyMap.class); + private static final MethodHandle SAME_OBJECT = findOwnMH("sameObject", boolean.class, Object.class, WeakReference.class); private static final MethodHandle IS_INSTANCEOF_2 = findOwnMH("isInstanceOf2", boolean.class, Object.class, Class.class, Class.class); // don't create me! @@ -74,6 +80,55 @@ public final class NashornGuards { return MH.insertArguments(IS_MAP, 1, map); } + /** + * Determine whether the given callsite needs a guard. + * @param property the property, or null + * @param desc the callsite descriptor + * @return true if a guard should be used for this callsite + */ + static boolean needsGuard(final Property property, final CallSiteDescriptor desc) { + return property == null || property.isConfigurable() + || property.isBound() || !ObjectClassGenerator.OBJECT_FIELDS_ONLY + || !NashornCallSiteDescriptor.isFastScope(desc) || property.canChangeType(); + } + + /** + * Get the guard for a property access. This returns an identity guard for non-configurable global properties + * and a map guard for everything else. + * + * @param sobj the first object in the prototype chain + * @param property the property + * @param desc the callsite descriptor + * @return method handle for guard + */ + public static MethodHandle getGuard(final ScriptObject sobj, final Property property, final CallSiteDescriptor desc) { + if (!needsGuard(property, desc)) { + return null; + } + if (NashornCallSiteDescriptor.isScope(desc)) { + if (property != null && property.isBound()) { + // This is a declared top level variables in main script or eval, use identity guard. + return getIdentityGuard(sobj); + } + if (!(sobj instanceof Global) && (property == null || property.isConfigurable())) { + // Undeclared variables in nested evals need stronger guards + return combineGuards(getIdentityGuard(sobj), getMapGuard(sobj.getMap())); + } + } + return getMapGuard(sobj.getMap()); + } + + + /** + * Get a guard that checks referential identity of the current object. + * + * @param sobj the self object + * @return true if same self object instance + */ + public static MethodHandle getIdentityGuard(final ScriptObject sobj) { + return MH.insertArguments(SAME_OBJECT, 1, new WeakReference<>(sobj)); + } + /** * Get a guard that checks if in item is an instance of either of two classes. * @@ -111,6 +166,11 @@ public final class NashornGuards { return self instanceof ScriptObject && ((ScriptObject)self).getMap() == map; } + @SuppressWarnings("unused") + private static boolean sameObject(final Object self, final WeakReference ref) { + return self == ref.get(); + } + @SuppressWarnings("unused") private static boolean isInstanceOf2(final Object self, final Class class1, final Class class2) { return class1.isInstance(self) || class2.isInstance(self); diff --git a/nashorn/src/jdk/nashorn/internal/runtime/linker/PrimitiveLookup.java b/nashorn/src/jdk/nashorn/internal/runtime/linker/PrimitiveLookup.java index c9b5eaa3fa9..7665be7fcb3 100644 --- a/nashorn/src/jdk/nashorn/internal/runtime/linker/PrimitiveLookup.java +++ b/nashorn/src/jdk/nashorn/internal/runtime/linker/PrimitiveLookup.java @@ -35,6 +35,7 @@ import jdk.internal.dynalink.linker.LinkRequest; import jdk.internal.dynalink.support.CallSiteDescriptorFactory; import jdk.internal.dynalink.support.Guards; import jdk.nashorn.internal.lookup.Lookup; +import jdk.nashorn.internal.runtime.FindProperty; import jdk.nashorn.internal.runtime.ScriptObject; /** @@ -61,8 +62,9 @@ public final class PrimitiveLookup { * type {@code receiverClass}. */ public static GuardedInvocation lookupPrimitive(final LinkRequest request, final Class receiverClass, - final ScriptObject wrappedReceiver, final MethodHandle wrapFilter) { - return lookupPrimitive(request, Guards.getInstanceOfGuard(receiverClass), wrappedReceiver, wrapFilter); + final ScriptObject wrappedReceiver, final MethodHandle wrapFilter, + final MethodHandle protoFilter) { + return lookupPrimitive(request, Guards.getInstanceOfGuard(receiverClass), wrappedReceiver, wrapFilter, protoFilter); } /** @@ -79,7 +81,8 @@ public final class PrimitiveLookup { * type (that is implied by both {@code guard} and {@code wrappedReceiver}). */ public static GuardedInvocation lookupPrimitive(final LinkRequest request, final MethodHandle guard, - final ScriptObject wrappedReceiver, final MethodHandle wrapFilter) { + final ScriptObject wrappedReceiver, final MethodHandle wrapFilter, + final MethodHandle protoFilter) { final CallSiteDescriptor desc = request.getCallSiteDescriptor(); final String operator = CallSiteDescriptorFactory.tokenizeOperators(desc).get(0); if ("setProp".equals(operator) || "setElem".equals(operator)) { @@ -93,9 +96,23 @@ public final class PrimitiveLookup { if(desc.getNameTokenCount() > 2) { final String name = desc.getNameToken(CallSiteDescriptor.NAME_OPERAND); - if(wrappedReceiver.findProperty(name, true) == null) { + final FindProperty find = wrappedReceiver.findProperty(name, true); + if(find == null) { // Give up early, give chance to BeanLinker and NashornBottomLinker to deal with it. return null; + } else if (find.isInherited() && !find.getProperty().hasGetterFunction(find.getOwner())) { + // If property is found in the prototype object bind the method handle directly to + // the proto filter instead of going through wrapper instantiation below. + final ScriptObject proto = wrappedReceiver.getProto(); + final GuardedInvocation link = proto.lookup(desc, request); + + if (link != null) { + final MethodHandle invocation = link.getInvocation(); + final MethodHandle adaptedInvocation = MH.asType(invocation, invocation.type().changeParameterType(0, Object.class)); + final MethodHandle method = MH.filterArguments(adaptedInvocation, 0, protoFilter); + final MethodHandle protoGuard = MH.filterArguments(link.getGuard(), 0, protoFilter); + return new GuardedInvocation(method, NashornGuards.combineGuards(guard, protoGuard)); + } } } final GuardedInvocation link = wrappedReceiver.lookup(desc, request); diff --git a/nashorn/test/src/jdk/nashorn/api/scripting/ScopeTest.java b/nashorn/test/src/jdk/nashorn/api/scripting/ScopeTest.java index a18055bb602..dc27d826402 100644 --- a/nashorn/test/src/jdk/nashorn/api/scripting/ScopeTest.java +++ b/nashorn/test/src/jdk/nashorn/api/scripting/ScopeTest.java @@ -245,4 +245,320 @@ public class ScopeTest { sb.put("x", "newX"); assertTrue(e.eval("x", ctx).equals("newX")); } + + /** + * Test multi-threaded access to defined global variables for shared script classes with multiple globals. + */ + @Test + public static void multiThreadedVarTest() throws ScriptException, InterruptedException { + final ScriptEngineManager m = new ScriptEngineManager(); + final ScriptEngine e = m.getEngineByName("nashorn"); + final Bindings b = e.createBindings(); + final ScriptContext origContext = e.getContext(); + final ScriptContext newCtxt = new SimpleScriptContext(); + newCtxt.setBindings(b, ScriptContext.ENGINE_SCOPE); + final String sharedScript = "foo"; + + assertEquals(e.eval("var foo = 'original context';", origContext), null); + assertEquals(e.eval("var foo = 'new context';", newCtxt), null); + + final Thread t1 = new Thread(new ScriptRunner(e, origContext, sharedScript, "original context", 1000)); + final Thread t2 = new Thread(new ScriptRunner(e, newCtxt, sharedScript, "new context", 1000)); + t1.start(); + t2.start(); + t1.join(); + t2.join(); + + assertEquals(e.eval("var foo = 'newer context';", newCtxt), null); + final Thread t3 = new Thread(new ScriptRunner(e, origContext, sharedScript, "original context", 1000)); + final Thread t4 = new Thread(new ScriptRunner(e, newCtxt, sharedScript, "newer context", 1000)); + + t3.start(); + t4.start(); + t3.join(); + t4.join(); + + assertEquals(e.eval(sharedScript), "original context"); + assertEquals(e.eval(sharedScript, newCtxt), "newer context"); + } + + /** + * Test multi-threaded access to undefined global variables for shared script classes with multiple globals. + */ + @Test + public static void multiThreadedGlobalTest() throws ScriptException, InterruptedException { + final ScriptEngineManager m = new ScriptEngineManager(); + final ScriptEngine e = m.getEngineByName("nashorn"); + final Bindings b = e.createBindings(); + final ScriptContext origContext = e.getContext(); + final ScriptContext newCtxt = new SimpleScriptContext(); + newCtxt.setBindings(b, ScriptContext.ENGINE_SCOPE); + + assertEquals(e.eval("foo = 'original context';", origContext), "original context"); + assertEquals(e.eval("foo = 'new context';", newCtxt), "new context"); + final String sharedScript = "foo"; + + final Thread t1 = new Thread(new ScriptRunner(e, origContext, sharedScript, "original context", 1000)); + final Thread t2 = new Thread(new ScriptRunner(e, newCtxt, sharedScript, "new context", 1000)); + t1.start(); + t2.start(); + t1.join(); + t2.join(); + + Object obj3 = e.eval("delete foo; foo = 'newer context';", newCtxt); + assertEquals(obj3, "newer context"); + final Thread t3 = new Thread(new ScriptRunner(e, origContext, sharedScript, "original context", 1000)); + final Thread t4 = new Thread(new ScriptRunner(e, newCtxt, sharedScript, "newer context", 1000)); + + t3.start(); + t4.start(); + t3.join(); + t4.join(); + + Assert.assertEquals(e.eval(sharedScript), "original context"); + Assert.assertEquals(e.eval(sharedScript, newCtxt), "newer context"); + } + + /** + * Test multi-threaded access using the postfix ++ operator for shared script classes with multiple globals. + */ + @Test + public static void multiThreadedIncTest() throws ScriptException, InterruptedException { + final ScriptEngineManager m = new ScriptEngineManager(); + final ScriptEngine e = m.getEngineByName("nashorn"); + final Bindings b = e.createBindings(); + final ScriptContext origContext = e.getContext(); + final ScriptContext newCtxt = new SimpleScriptContext(); + newCtxt.setBindings(b, ScriptContext.ENGINE_SCOPE); + + assertEquals(e.eval("var x = 0;", origContext), null); + assertEquals(e.eval("var x = 2;", newCtxt), null); + final String sharedScript = "x++;"; + + final Thread t1 = new Thread(new Runnable() { + @Override + public void run() { + try { + for (int i = 0; i < 1000; i++) { + assertEquals(e.eval(sharedScript, origContext), (double)i); + } + } catch (ScriptException se) { + fail(se.toString()); + } + } + }); + final Thread t2 = new Thread(new Runnable() { + @Override + public void run() { + try { + for (int i = 2; i < 1000; i++) { + assertEquals(e.eval(sharedScript, newCtxt), (double)i); + } + } catch (ScriptException se) { + fail(se.toString()); + } + } + }); + t1.start(); + t2.start(); + t1.join(); + t2.join(); + } + + /** + * Test multi-threaded access to primitive prototype properties for shared script classes with multiple globals. + */ + @Test + public static void multiThreadedPrimitiveTest() throws ScriptException, InterruptedException { + final ScriptEngineManager m = new ScriptEngineManager(); + final ScriptEngine e = m.getEngineByName("nashorn"); + final Bindings b = e.createBindings(); + final ScriptContext origContext = e.getContext(); + final ScriptContext newCtxt = new SimpleScriptContext(); + newCtxt.setBindings(b, ScriptContext.ENGINE_SCOPE); + + Object obj1 = e.eval("String.prototype.foo = 'original context';", origContext); + Object obj2 = e.eval("String.prototype.foo = 'new context';", newCtxt); + assertEquals(obj1, "original context"); + assertEquals(obj2, "new context"); + final String sharedScript = "''.foo"; + + final Thread t1 = new Thread(new ScriptRunner(e, origContext, sharedScript, "original context", 1000)); + final Thread t2 = new Thread(new ScriptRunner(e, newCtxt, sharedScript, "new context", 1000)); + t1.start(); + t2.start(); + t1.join(); + t2.join(); + + Object obj3 = e.eval("delete String.prototype.foo; Object.prototype.foo = 'newer context';", newCtxt); + assertEquals(obj3, "newer context"); + final Thread t3 = new Thread(new ScriptRunner(e, origContext, sharedScript, "original context", 1000)); + final Thread t4 = new Thread(new ScriptRunner(e, newCtxt, sharedScript, "newer context", 1000)); + + t3.start(); + t4.start(); + t3.join(); + t4.join(); + + Assert.assertEquals(e.eval(sharedScript), "original context"); + Assert.assertEquals(e.eval(sharedScript, newCtxt), "newer context"); + } + + /** + * Test multi-threaded scope function invocation for shared script classes with multiple globals. + */ + @Test + public static void multiThreadedFunctionTest() throws ScriptException, InterruptedException { + final ScriptEngineManager m = new ScriptEngineManager(); + final ScriptEngine e = m.getEngineByName("nashorn"); + final Bindings b = e.createBindings(); + final ScriptContext origContext = e.getContext(); + final ScriptContext newCtxt = new SimpleScriptContext(); + newCtxt.setBindings(b, ScriptContext.ENGINE_SCOPE); + + e.eval(new URLReader(ScopeTest.class.getResource("resources/func.js")), origContext); + assertEquals(origContext.getAttribute("scopeVar"), 1); + assertEquals(e.eval("scopeTest()"), 1); + + e.eval(new URLReader(ScopeTest.class.getResource("resources/func.js")), newCtxt); + assertEquals(newCtxt.getAttribute("scopeVar"), 1); + assertEquals(e.eval("scopeTest();", newCtxt), 1); + + assertEquals(e.eval("scopeVar = 3;", newCtxt), 3); + assertEquals(newCtxt.getAttribute("scopeVar"), 3); + + + final Thread t1 = new Thread(new ScriptRunner(e, origContext, "scopeTest()", 1, 1000)); + final Thread t2 = new Thread(new ScriptRunner(e, newCtxt, "scopeTest()", 3, 1000)); + + t1.start(); + t2.start(); + t1.join(); + t2.join(); + + } + + /** + * Test multi-threaded access to global getters and setters for shared script classes with multiple globals. + */ + @Test + public static void getterSetterTest() throws ScriptException, InterruptedException { + final ScriptEngineManager m = new ScriptEngineManager(); + final ScriptEngine e = m.getEngineByName("nashorn"); + final Bindings b = e.createBindings(); + final ScriptContext origContext = e.getContext(); + final ScriptContext newCtxt = new SimpleScriptContext(); + newCtxt.setBindings(b, ScriptContext.ENGINE_SCOPE); + final String sharedScript = "accessor1"; + + e.eval(new URLReader(ScopeTest.class.getResource("resources/gettersetter.js")), origContext); + assertEquals(e.eval("accessor1 = 1;"), 1); + assertEquals(e.eval(sharedScript), 1); + + e.eval(new URLReader(ScopeTest.class.getResource("resources/gettersetter.js")), newCtxt); + assertEquals(e.eval("accessor1 = 2;", newCtxt), 2); + assertEquals(e.eval(sharedScript, newCtxt), 2); + + + final Thread t1 = new Thread(new ScriptRunner(e, origContext, sharedScript, 1, 1000)); + final Thread t2 = new Thread(new ScriptRunner(e, newCtxt, sharedScript, 2, 1000)); + + t1.start(); + t2.start(); + t1.join(); + t2.join(); + + assertEquals(e.eval(sharedScript), 1); + assertEquals(e.eval(sharedScript, newCtxt), 2); + assertEquals(e.eval("v"), 1); + assertEquals(e.eval("v", newCtxt), 2); + } + + /** + * Test multi-threaded access to global getters and setters for shared script classes with multiple globals. + */ + @Test + public static void getterSetter2Test() throws ScriptException, InterruptedException { + final ScriptEngineManager m = new ScriptEngineManager(); + final ScriptEngine e = m.getEngineByName("nashorn"); + final Bindings b = e.createBindings(); + final ScriptContext origContext = e.getContext(); + final ScriptContext newCtxt = new SimpleScriptContext(); + newCtxt.setBindings(b, ScriptContext.ENGINE_SCOPE); + final String sharedScript = "accessor2"; + + e.eval(new URLReader(ScopeTest.class.getResource("resources/gettersetter.js")), origContext); + assertEquals(e.eval("accessor2 = 1;"), 1); + assertEquals(e.eval(sharedScript), 1); + + e.eval(new URLReader(ScopeTest.class.getResource("resources/gettersetter.js")), newCtxt); + assertEquals(e.eval("accessor2 = 2;", newCtxt), 2); + assertEquals(e.eval(sharedScript, newCtxt), 2); + + + final Thread t1 = new Thread(new ScriptRunner(e, origContext, sharedScript, 1, 1000)); + final Thread t2 = new Thread(new ScriptRunner(e, newCtxt, sharedScript, 2, 1000)); + + t1.start(); + t2.start(); + t1.join(); + t2.join(); + + assertEquals(e.eval(sharedScript), 1); + assertEquals(e.eval(sharedScript, newCtxt), 2); + assertEquals(e.eval("x"), 1); + assertEquals(e.eval("x", newCtxt), 2); + } + + /** + * Test "slow" scopes involving {@code with} and {@code eval} statements for shared script classes with multiple globals. + */ + @Test + public static void testSlowScope() throws ScriptException, InterruptedException { + final ScriptEngineManager m = new ScriptEngineManager(); + final ScriptEngine e = m.getEngineByName("nashorn"); + + for (int i = 0; i < 100; i++) { + final Bindings b = e.createBindings(); + final ScriptContext ctxt = new SimpleScriptContext(); + ctxt.setBindings(b, ScriptContext.ENGINE_SCOPE); + + e.eval(new URLReader(ScopeTest.class.getResource("resources/witheval.js")), ctxt); + assertEquals(e.eval("a", ctxt), 1); + assertEquals(b.get("a"), 1); + assertEquals(e.eval("b", ctxt), 3); + assertEquals(b.get("b"), 3); + assertEquals(e.eval("c", ctxt), 10); + assertEquals(b.get("c"), 10); + } + } + + private static class ScriptRunner implements Runnable { + + final ScriptEngine engine; + final ScriptContext context; + final String source; + final Object expected; + final int iterations; + + ScriptRunner(final ScriptEngine engine, final ScriptContext context, final String source, final Object expected, final int iterations) { + this.engine = engine; + this.context = context; + this.source = source; + this.expected = expected; + this.iterations = iterations; + } + + @Override + public void run() { + try { + for (int i = 0; i < iterations; i++) { + assertEquals(engine.eval(source, context), expected); + } + } catch (ScriptException se) { + throw new RuntimeException(se); + } + } + } + } diff --git a/nashorn/test/src/jdk/nashorn/api/scripting/resources/func.js b/nashorn/test/src/jdk/nashorn/api/scripting/resources/func.js new file mode 100644 index 00000000000..477bd1a64be --- /dev/null +++ b/nashorn/test/src/jdk/nashorn/api/scripting/resources/func.js @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2010, 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +// This script is loaded from jdk.nashorn.api.scripting.ScopeTest to test script class sharing and reuse. + +var scopeVar = 1; +var global = this; +undefGlobal = this; + +function scopeTest() { + if (this !== global) { + throw new Error("this !== global"); + } + if (this !== undefGlobal) { + throw new Error("this !== undefinedGlobal") + } + return scopeVar; +} + +scopeTest(); diff --git a/nashorn/test/src/jdk/nashorn/api/scripting/resources/gettersetter.js b/nashorn/test/src/jdk/nashorn/api/scripting/resources/gettersetter.js new file mode 100644 index 00000000000..51e24727466 --- /dev/null +++ b/nashorn/test/src/jdk/nashorn/api/scripting/resources/gettersetter.js @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2010, 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +// This script is loaded from jdk.nashorn.api.scripting.ScopeTest to test script class sharing and reuse. + +var v; + +Object.defineProperty(this, "accessor1", { + get: function() { return v; }, + set: function(n) { v = n; } +}); + +Object.defineProperty(this, "accessor2", { + get: function() { return x; }, + set: function(n) { x = n; } +}); diff --git a/nashorn/test/src/jdk/nashorn/api/scripting/resources/witheval.js b/nashorn/test/src/jdk/nashorn/api/scripting/resources/witheval.js new file mode 100644 index 00000000000..6041d5b4928 --- /dev/null +++ b/nashorn/test/src/jdk/nashorn/api/scripting/resources/witheval.js @@ -0,0 +1,60 @@ +/* + * Copyright (c) 2010, 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +// This script is loaded from jdk.nashorn.api.scripting.ScopeTest to test script class sharing and reuse. + +var a; + +function outer(p, e) { + eval(e); + with(p) { + function inner() { + a = 1; + c = 10; + if (a !== 1) { + throw new Error("a !== 1"); + } + if (b !== 3) { + throw new Error("b !== 3"); + } + if (c !== 10) { + throw new Error("c !== 10"); + } + } + inner(); + } +} + +outer({}, "b = 3;"); + +if (a !== 1) { + throw new Error("a !== 1"); +} +if (b !== 3) { + throw new Error("b !== 3"); +} +if (c !== 10) { + throw new Error("c !== 10"); +} From 6f1436baa2dc8b91b82bb00b3296931f002f2bdf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hannes=20Walln=C3=B6fer?= Date: Wed, 12 Mar 2014 16:33:28 +0100 Subject: [PATCH 064/116] 8034055: delete on global object not properly guarded Reviewed-by: sundar, lagergren --- nashorn/test/script/basic/JDK-8034055.js | 55 +++++++++++++++++++ .../test/script/basic/JDK-8034055.js.EXPECTED | 16 ++++++ 2 files changed, 71 insertions(+) create mode 100644 nashorn/test/script/basic/JDK-8034055.js create mode 100644 nashorn/test/script/basic/JDK-8034055.js.EXPECTED diff --git a/nashorn/test/script/basic/JDK-8034055.js b/nashorn/test/script/basic/JDK-8034055.js new file mode 100644 index 00000000000..0a21d9f915a --- /dev/null +++ b/nashorn/test/script/basic/JDK-8034055.js @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2010, 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/** + * JDK-8034055: delete on global object not properly guarded + * + * @test + * @run + */ + + +var global = this; +var x; + +function test(defineGlobals) { + if (defineGlobals) { + global.x = 1; + global.y = 2; + } + try { + print(x); + print(y); + } catch (e) { + print(e); + } finally { + print(delete global.x); + print(delete global.y); + } +} + +// Repeatedly set and delete global variables +test(true); +test(false); +test(true); +test(false); diff --git a/nashorn/test/script/basic/JDK-8034055.js.EXPECTED b/nashorn/test/script/basic/JDK-8034055.js.EXPECTED new file mode 100644 index 00000000000..c947f4aeb23 --- /dev/null +++ b/nashorn/test/script/basic/JDK-8034055.js.EXPECTED @@ -0,0 +1,16 @@ +1 +2 +false +true +1 +ReferenceError: "y" is not defined +false +true +1 +2 +false +true +1 +ReferenceError: "y" is not defined +false +true From 572d5812621ede533953f482a94ebdc7533e1470 Mon Sep 17 00:00:00 2001 From: Athijegannathan Sundararajan Date: Thu, 13 Mar 2014 15:58:24 +0530 Subject: [PATCH 065/116] 8015958: DataView constructor is not defined Reviewed-by: attila, hannesw, lagergren --- .../jdk/nashorn/internal/objects/Global.java | 11 + .../internal/objects/NativeArrayBuffer.java | 13 + .../internal/objects/NativeDataView.java | 1015 +++++++++++++++++ .../jdk/nashorn/internal/runtime/Context.java | 4 +- .../runtime/resources/Messages.properties | 4 + nashorn/test/script/basic/dataview_endian.js | 70 ++ nashorn/test/script/basic/dataview_getset.js | 93 ++ nashorn/test/script/basic/dataview_new.js | 71 ++ 8 files changed, 1279 insertions(+), 2 deletions(-) create mode 100644 nashorn/src/jdk/nashorn/internal/objects/NativeDataView.java create mode 100644 nashorn/test/script/basic/dataview_endian.js create mode 100644 nashorn/test/script/basic/dataview_getset.js create mode 100644 nashorn/test/script/basic/dataview_new.js diff --git a/nashorn/src/jdk/nashorn/internal/objects/Global.java b/nashorn/src/jdk/nashorn/internal/objects/Global.java index 82f2db4576b..0d8ac5caf6a 100644 --- a/nashorn/src/jdk/nashorn/internal/objects/Global.java +++ b/nashorn/src/jdk/nashorn/internal/objects/Global.java @@ -226,6 +226,10 @@ public final class Global extends ScriptObject implements GlobalObject, Scope { @Property(name = "ArrayBuffer", attributes = Attribute.NOT_ENUMERABLE) public volatile Object arrayBuffer; + /** DataView object */ + @Property(name = "DataView", attributes = Attribute.NOT_ENUMERABLE) + public volatile Object dataView; + /** TypedArray (int8) */ @Property(name = "Int8Array", attributes = Attribute.NOT_ENUMERABLE) public volatile Object int8Array; @@ -352,6 +356,7 @@ public final class Global extends ScriptObject implements GlobalObject, Scope { private ScriptObject builtinJavaImporter; private ScriptObject builtinJavaApi; private ScriptObject builtinArrayBuffer; + private ScriptObject builtinDataView; private ScriptObject builtinInt8Array; private ScriptObject builtinUint8Array; private ScriptObject builtinUint8ClampedArray; @@ -866,6 +871,10 @@ public final class Global extends ScriptObject implements GlobalObject, Scope { return ScriptFunction.getPrototype(builtinArrayBuffer); } + ScriptObject getDataViewPrototype() { + return ScriptFunction.getPrototype(builtinDataView); + } + ScriptObject getInt8ArrayPrototype() { return ScriptFunction.getPrototype(builtinInt8Array); } @@ -1634,6 +1643,7 @@ public final class Global extends ScriptObject implements GlobalObject, Scope { private void initTypedArray() { this.builtinArrayBuffer = initConstructor("ArrayBuffer"); + this.builtinDataView = initConstructor("DataView"); this.builtinInt8Array = initConstructor("Int8Array"); this.builtinUint8Array = initConstructor("Uint8Array"); this.builtinUint8ClampedArray = initConstructor("Uint8ClampedArray"); @@ -1674,6 +1684,7 @@ public final class Global extends ScriptObject implements GlobalObject, Scope { this.typeError = this.builtinTypeError; this.uriError = this.builtinURIError; this.arrayBuffer = this.builtinArrayBuffer; + this.dataView = this.builtinDataView; this.int8Array = this.builtinInt8Array; this.uint8Array = this.builtinUint8Array; this.uint8ClampedArray = this.builtinUint8ClampedArray; diff --git a/nashorn/src/jdk/nashorn/internal/objects/NativeArrayBuffer.java b/nashorn/src/jdk/nashorn/internal/objects/NativeArrayBuffer.java index dbc1b24b2cb..49082498b57 100644 --- a/nashorn/src/jdk/nashorn/internal/objects/NativeArrayBuffer.java +++ b/nashorn/src/jdk/nashorn/internal/objects/NativeArrayBuffer.java @@ -25,6 +25,7 @@ package jdk.nashorn.internal.objects; +import java.nio.ByteBuffer; import java.util.Arrays; import jdk.nashorn.internal.objects.annotations.Attribute; import jdk.nashorn.internal.objects.annotations.Constructor; @@ -128,4 +129,16 @@ final class NativeArrayBuffer extends ScriptObject { public int getByteLength() { return buffer.length; } + + ByteBuffer getBuffer() { + return ByteBuffer.wrap(buffer); + } + + ByteBuffer getBuffer(final int offset) { + return ByteBuffer.wrap(buffer, offset, buffer.length - offset); + } + + ByteBuffer getBuffer(final int offset, final int length) { + return ByteBuffer.wrap(buffer, offset, length); + } } diff --git a/nashorn/src/jdk/nashorn/internal/objects/NativeDataView.java b/nashorn/src/jdk/nashorn/internal/objects/NativeDataView.java new file mode 100644 index 00000000000..93b5f09f90c --- /dev/null +++ b/nashorn/src/jdk/nashorn/internal/objects/NativeDataView.java @@ -0,0 +1,1015 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +package jdk.nashorn.internal.objects; + +import static jdk.nashorn.internal.runtime.ScriptRuntime.UNDEFINED; +import static jdk.nashorn.internal.runtime.ECMAErrors.rangeError; +import static jdk.nashorn.internal.runtime.ECMAErrors.typeError; + +import java.nio.ByteBuffer; +import java.nio.ByteOrder; +import jdk.nashorn.internal.objects.annotations.Attribute; +import jdk.nashorn.internal.objects.annotations.Constructor; +import jdk.nashorn.internal.objects.annotations.Function; +import jdk.nashorn.internal.objects.annotations.Property; +import jdk.nashorn.internal.objects.annotations.ScriptClass; +import jdk.nashorn.internal.objects.annotations.SpecializedConstructor; +import jdk.nashorn.internal.objects.annotations.SpecializedFunction; +import jdk.nashorn.internal.runtime.JSType; +import jdk.nashorn.internal.runtime.PropertyMap; +import jdk.nashorn.internal.runtime.ScriptObject; +import jdk.nashorn.internal.runtime.ScriptRuntime; + +/** + *

      + * DataView builtin constructor. Based on the specification here: + * http://www.khronos.org/registry/typedarray/specs/latest/#8 + *

      + *

      + * An ArrayBuffer is a useful object for representing an arbitrary chunk of data. + * In many cases, such data will be read from disk or from the network, and will + * not follow the alignment restrictions that are imposed on the typed array views + * described earlier. In addition, the data will often be heterogeneous in nature + * and have a defined byte order. The DataView view provides a low-level interface + * for reading such data from and writing it to an ArrayBuffer. + *

      + *

      + * Regardless of the host computer's endianness, DataView reads or writes values + * to or from main memory with a specified endianness: big or little. + *

      + */ +@ScriptClass("DataView") +public class NativeDataView extends ScriptObject { + // initialized by nasgen + private static PropertyMap $nasgenmap$; + + // inherited ArrayBufferView properties + + /** + * Underlying ArrayBuffer storage object + */ + @Property(attributes = Attribute.NON_ENUMERABLE_CONSTANT) + public final Object buffer; + + /** + * The offset in bytes from the start of the ArrayBuffer + */ + @Property(attributes = Attribute.NON_ENUMERABLE_CONSTANT) + public final int byteOffset; + + /** + * The number of bytes from the offset that this DataView will reference + */ + @Property(attributes = Attribute.NON_ENUMERABLE_CONSTANT) + public final int byteLength; + + // underlying ByteBuffer + private final ByteBuffer buf; + + private NativeDataView(NativeArrayBuffer arrBuf) { + this(arrBuf, arrBuf.getBuffer(), 0); + } + + private NativeDataView(NativeArrayBuffer arrBuf, int offset) { + this(arrBuf, bufferFrom(arrBuf, offset), offset); + } + + private NativeDataView(NativeArrayBuffer arrBuf, int offset, int length) { + this(arrBuf, bufferFrom(arrBuf, offset, length), offset, length); + } + + private NativeDataView(final NativeArrayBuffer arrBuf, final ByteBuffer buf, final int offset) { + this(arrBuf, buf, offset, buf.capacity() - offset); + } + + private NativeDataView(final NativeArrayBuffer arrBuf, final ByteBuffer buf, final int offset, final int length) { + super(Global.instance().getDataViewPrototype(), $nasgenmap$); + this.buffer = arrBuf; + this.byteOffset = offset; + this.byteLength = length; + this.buf = buf; + } + + /** + * Create a new DataView object using the passed ArrayBuffer for its + * storage. Optional byteOffset and byteLength can be used to limit the + * section of the buffer referenced. The byteOffset indicates the offset in + * bytes from the start of the ArrayBuffer, and the byteLength is the number + * of bytes from the offset that this DataView will reference. If both + * byteOffset and byteLength are omitted, the DataView spans the entire + * ArrayBuffer range. If the byteLength is omitted, the DataView extends from + * the given byteOffset until the end of the ArrayBuffer. + * + * If the given byteOffset and byteLength references an area beyond the end + * of the ArrayBuffer an exception is raised. + + * @param newObj if this constructor was invoked with 'new' or not + * @param self constructor function object + * @param args arguments to the constructor + * @return newly constructed DataView object + */ + @Constructor(arity = 1) + public static Object constructor(final boolean newObj, final Object self, final Object... args) { + if (args.length == 0 || !(args[0] instanceof NativeArrayBuffer)) { + throw typeError("not.an.arraybuffer.in.dataview"); + } + + final NativeArrayBuffer arrBuf = (NativeArrayBuffer) args[0]; + switch (args.length) { + case 1: + return new NativeDataView(arrBuf); + case 2: + return new NativeDataView(arrBuf, JSType.toInt32(args[1])); + default: + return new NativeDataView(arrBuf, JSType.toInt32(args[1]), JSType.toInt32(args[2])); + } + } + + /** + * Specialized version of DataView constructor + * + * @param newObj if this constructor was invoked with 'new' or not + * @param self constructor function object + * @param arrBuf underlying ArrayBuffer storage object + * @param offset offset in bytes from the start of the ArrayBuffer + * @return newly constructed DataView object + */ + @SpecializedConstructor + public static Object constructor(final boolean newObj, final Object self, final Object arrBuf, final int offset) { + if (!(arrBuf instanceof NativeArrayBuffer)) { + throw typeError("not.an.arraybuffer.in.dataview"); + } + return new NativeDataView((NativeArrayBuffer) arrBuf, offset); + } + + /** + * Specialized version of DataView constructor + * + * @param newObj if this constructor was invoked with 'new' or not + * @param self constructor function object + * @param arrBuf underlying ArrayBuffer storage object + * @param offset in bytes from the start of the ArrayBuffer + * @param length is the number of bytes from the offset that this DataView will reference + * @return newly constructed DataView object + */ + @SpecializedConstructor + public static Object constructor(final boolean newObj, final Object self, final Object arrBuf, final int offset, final int length) { + if (!(arrBuf instanceof NativeArrayBuffer)) { + throw typeError("not.an.arraybuffer.in.dataview"); + } + return new NativeDataView((NativeArrayBuffer) arrBuf, offset, length); + } + + // Gets the value of the given type at the specified byte offset + // from the start of the view. There is no alignment constraint; + // multi-byte values may be fetched from any offset. + // + // For multi-byte values, the optional littleEndian argument + // indicates whether a big-endian or little-endian value should be + // read. If false or undefined, a big-endian value is read. + // + // These methods raise an exception if they would read + // beyond the end of the view. + + /** + * Get 8-bit signed int from given byteOffset + * + * @param self DataView object + * @param byteOffset byte offset to read from + * @return 8-bit signed int value at the byteOffset + */ + @Function(attributes = Attribute.NOT_ENUMERABLE) + public static int getInt8(final Object self, final Object byteOffset) { + try { + return getBuffer(self).get(JSType.toInt32(byteOffset)); + } catch (final IndexOutOfBoundsException ioe) { + throw rangeError(ioe, "dataview.offset"); + } + } + + /** + * Get 8-bit signed int from given byteOffset + * + * @param self DataView object + * @param byteOffset byte offset to read from + * @return 8-bit signed int value at the byteOffset + */ + @SpecializedFunction + public static int getInt8(final Object self, final int byteOffset) { + try { + return getBuffer(self).get(byteOffset); + } catch (final IndexOutOfBoundsException ioe) { + throw rangeError(ioe, "dataview.offset"); + } + } + + /** + * Get 8-bit unsigned int from given byteOffset + * + * @param self DataView object + * @param byteOffset byte offset to read from + * @return 8-bit unsigned int value at the byteOffset + */ + @Function(attributes = Attribute.NOT_ENUMERABLE) + public static int getUint8(final Object self, final Object byteOffset) { + try { + return (0xFF & getBuffer(self).get(JSType.toInt32(byteOffset))); + } catch (final IndexOutOfBoundsException ioe) { + throw rangeError(ioe, "dataview.offset"); + } + } + + /** + * Get 8-bit unsigned int from given byteOffset + * + * @param self DataView object + * @param byteOffset byte offset to read from + * @return 8-bit unsigned int value at the byteOffset + */ + @SpecializedFunction + public static int getUint8(final Object self, final int byteOffset) { + try { + return (0xFF & getBuffer(self).get(byteOffset)); + } catch (final IndexOutOfBoundsException ioe) { + throw rangeError(ioe, "dataview.offset"); + } + } + + /** + * Get 16-bit signed int from given byteOffset + * + * @param self DataView object + * @param byteOffset byte offset to read from + * @param littleEndian (optional) flag indicating whether to read in little endian order + * @return 16-bit signed int value at the byteOffset + */ + @Function(attributes = Attribute.NOT_ENUMERABLE, arity = 1) + public static int getInt16(final Object self, final Object byteOffset, final Object littleEndian) { + try { + return getBuffer(self, littleEndian).getShort(JSType.toInt32(byteOffset)); + } catch (final IndexOutOfBoundsException ioe) { + throw rangeError(ioe, "dataview.offset"); + } + } + + /** + * Get 16-bit signed int from given byteOffset + * + * @param self DataView object + * @param byteOffset byte offset to read from + * @return 16-bit signed int value at the byteOffset + */ + @SpecializedFunction + public static int getInt16(final Object self, final int byteOffset) { + try { + return getBuffer(self, false).getShort(byteOffset); + } catch (final IndexOutOfBoundsException ioe) { + throw rangeError(ioe, "dataview.offset"); + } + } + + /** + * Get 16-bit signed int from given byteOffset + * + * @param self DataView object + * @param byteOffset byte offset to read from + * @param littleEndian (optional) flag indicating whether to read in little endian order + * @return 16-bit signed int value at the byteOffset + */ + @SpecializedFunction + public static int getInt16(final Object self, final int byteOffset, final boolean littleEndian) { + try { + return getBuffer(self, littleEndian).getShort(byteOffset); + } catch (final IndexOutOfBoundsException ioe) { + throw rangeError(ioe, "dataview.offset"); + } + } + + /** + * Get 16-bit unsigned int from given byteOffset + * + * @param self DataView object + * @param byteOffset byte offset to read from + * @param littleEndian (optional) flag indicating whether to read in little endian order + * @return 16-bit unsigned int value at the byteOffset + */ + @Function(attributes = Attribute.NOT_ENUMERABLE, arity = 1) + public static int getUint16(final Object self, final Object byteOffset, final Object littleEndian) { + try { + return (int) (0xFFFF & getBuffer(self, littleEndian).getShort(JSType.toInt32(byteOffset))); + } catch (final IndexOutOfBoundsException ioe) { + throw rangeError(ioe, "dataview.offset"); + } + } + + /** + * Get 16-bit unsigned int from given byteOffset + * + * @param self DataView object + * @param byteOffset byte offset to read from + * @return 16-bit unsigned int value at the byteOffset + */ + @SpecializedFunction + public static int getUint16(final Object self, final int byteOffset) { + try { + return (int) (0xFFFF & getBuffer(self, false).getShort(byteOffset)); + } catch (final IndexOutOfBoundsException ioe) { + throw rangeError(ioe, "dataview.offset"); + } + } + + /** + * Get 16-bit unsigned int from given byteOffset + * + * @param self DataView object + * @param byteOffset byte offset to read from + * @param littleEndian (optional) flag indicating whether to read in little endian order + * @return 16-bit unsigned int value at the byteOffset + */ + @SpecializedFunction + public static int getUint16(final Object self, final int byteOffset, final boolean littleEndian) { + try { + return (int) (0xFFFF & getBuffer(self, littleEndian).getShort(byteOffset)); + } catch (final IndexOutOfBoundsException ioe) { + throw rangeError(ioe, "dataview.offset"); + } + } + + /** + * Get 32-bit signed int from given byteOffset + * + * @param self DataView object + * @param byteOffset byte offset to read from + * @param littleEndian (optional) flag indicating whether to read in little endian order + * @return 32-bit signed int value at the byteOffset + */ + @Function(attributes = Attribute.NOT_ENUMERABLE, arity = 1) + public static int getInt32(final Object self, final Object byteOffset, final Object littleEndian) { + try { + return getBuffer(self, littleEndian).getInt(JSType.toInt32(byteOffset)); + } catch (final IndexOutOfBoundsException ioe) { + throw rangeError(ioe, "dataview.offset"); + } + } + + /** + * Get 32-bit signed int from given byteOffset + * + * @param self DataView object + * @param byteOffset byte offset to read from + * @return 32-bit signed int value at the byteOffset + */ + @SpecializedFunction + public static int getInt32(final Object self, final int byteOffset) { + try { + return getBuffer(self, false).getInt(byteOffset); + } catch (final IndexOutOfBoundsException ioe) { + throw rangeError(ioe, "dataview.offset"); + } + } + + /** + * Get 32-bit signed int from given byteOffset + * + * @param self DataView object + * @param byteOffset byte offset to read from + * @param littleEndian (optional) flag indicating whether to read in little endian order + * @return 32-bit signed int value at the byteOffset + */ + @SpecializedFunction + public static int getInt32(final Object self, final int byteOffset, final boolean littleEndian) { + try { + return getBuffer(self, littleEndian).getInt(byteOffset); + } catch (final IndexOutOfBoundsException ioe) { + throw rangeError(ioe, "dataview.offset"); + } + } + + /** + * Get 32-bit unsigned int from given byteOffset + * + * @param self DataView object + * @param byteOffset byte offset to read from + * @param littleEndian (optional) flag indicating whether to read in little endian order + * @return 32-bit unsigned int value at the byteOffset + */ + @Function(attributes = Attribute.NOT_ENUMERABLE, arity = 1) + public static long getUint32(final Object self, final Object byteOffset, final Object littleEndian) { + try { + return (long) (0xFFFFFFFFL & getBuffer(self, littleEndian).getInt(JSType.toInt32(byteOffset))); + } catch (final IndexOutOfBoundsException ioe) { + throw rangeError(ioe, "dataview.offset"); + } + } + + /** + * Get 32-bit unsigned int from given byteOffset + * + * @param self DataView object + * @param byteOffset byte offset to read from + * @return 32-bit unsigned int value at the byteOffset + */ + @SpecializedFunction + public static long getUint32(final Object self, final int byteOffset) { + try { + return (long) (0xFFFFFFFFL & getBuffer(self, false).getInt(JSType.toInt32(byteOffset))); + } catch (final IndexOutOfBoundsException ioe) { + throw rangeError(ioe, "dataview.offset"); + } + } + + /** + * Get 32-bit unsigned int from given byteOffset + * + * @param self DataView object + * @param byteOffset byte offset to read from + * @param littleEndian (optional) flag indicating whether to read in little endian order + * @return 32-bit unsigned int value at the byteOffset + */ + @SpecializedFunction + public static long getUint32(final Object self, final int byteOffset, final boolean littleEndian) { + try { + return (long) (0xFFFFFFFFL & getBuffer(self, littleEndian).getInt(JSType.toInt32(byteOffset))); + } catch (final IndexOutOfBoundsException ioe) { + throw rangeError(ioe, "dataview.offset"); + } + } + + /** + * Get 32-bit float value from given byteOffset + * + * @param self DataView object + * @param byteOffset byte offset to read from + * @param littleEndian (optional) flag indicating whether to read in little endian order + * @return 32-bit float value at the byteOffset + */ + @Function(attributes = Attribute.NOT_ENUMERABLE, arity = 1) + public static double getFloat32(final Object self, final Object byteOffset, final Object littleEndian) { + try { + return getBuffer(self, littleEndian).getFloat(JSType.toInt32(byteOffset)); + } catch (final IndexOutOfBoundsException ioe) { + throw rangeError(ioe, "dataview.offset"); + } + } + + /** + * Get 32-bit float value from given byteOffset + * + * @param self DataView object + * @param byteOffset byte offset to read from + * @return 32-bit float value at the byteOffset + */ + @SpecializedFunction + public static double getFloat32(final Object self, final int byteOffset) { + try { + return getBuffer(self, false).getFloat(byteOffset); + } catch (final IndexOutOfBoundsException ioe) { + throw rangeError(ioe, "dataview.offset"); + } + } + + /** + * Get 32-bit float value from given byteOffset + * + * @param self DataView object + * @param byteOffset byte offset to read from + * @param littleEndian (optional) flag indicating whether to read in little endian order + * @return 32-bit float value at the byteOffset + */ + @SpecializedFunction + public static double getFloat32(final Object self, final int byteOffset, final boolean littleEndian) { + try { + return getBuffer(self, littleEndian).getFloat(byteOffset); + } catch (final IndexOutOfBoundsException ioe) { + throw rangeError(ioe, "dataview.offset"); + } + } + + /** + * Get 64-bit float value from given byteOffset + * + * @param self DataView object + * @param byteOffset byte offset to read from + * @param littleEndian (optional) flag indicating whether to read in little endian order + * @return 64-bit float value at the byteOffset + */ + @Function(attributes = Attribute.NOT_ENUMERABLE, arity = 1) + public static double getFloat64(final Object self, final Object byteOffset, final Object littleEndian) { + try { + return getBuffer(self, littleEndian).getDouble(JSType.toInt32(byteOffset)); + } catch (final IndexOutOfBoundsException ioe) { + throw rangeError(ioe, "dataview.offset"); + } + } + + /** + * Get 64-bit float value from given byteOffset + * + * @param self DataView object + * @param byteOffset byte offset to read from + * @return 64-bit float value at the byteOffset + */ + @SpecializedFunction + public static double getFloat64(final Object self, final int byteOffset) { + try { + return getBuffer(self, false).getDouble(byteOffset); + } catch (final IndexOutOfBoundsException ioe) { + throw rangeError(ioe, "dataview.offset"); + } + } + + /** + * Get 64-bit float value from given byteOffset + * + * @param self DataView object + * @param byteOffset byte offset to read from + * @param littleEndian (optional) flag indicating whether to read in little endian order + * @return 64-bit float value at the byteOffset + */ + @SpecializedFunction + public static double getFloat64(final Object self, final int byteOffset, final boolean littleEndian) { + try { + return getBuffer(self, littleEndian).getDouble(byteOffset); + } catch (final IndexOutOfBoundsException ioe) { + throw rangeError(ioe, "dataview.offset"); + } + } + + // Stores a value of the given type at the specified byte offset + // from the start of the view. There is no alignment constraint; + // multi-byte values may be stored at any offset. + // + // For multi-byte values, the optional littleEndian argument + // indicates whether the value should be stored in big-endian or + // little-endian byte order. If false or undefined, the value is + // stored in big-endian byte order. + // + // These methods raise an exception if they would write + // beyond the end of the view. + + /** + * Set 8-bit signed int at the given byteOffset + * + * @param self DataView object + * @param byteOffset byte offset to read from + * @param value byte value to set + * @return undefined + */ + @Function(attributes = Attribute.NOT_ENUMERABLE, arity = 2) + public static Object setInt8(final Object self, final Object byteOffset, final Object value) { + try { + getBuffer(self).put(JSType.toInt32(byteOffset), (byte)JSType.toInt32(value)); + return UNDEFINED; + } catch (final IndexOutOfBoundsException ioe) { + throw rangeError(ioe, "dataview.offset"); + } + } + + /** + * Set 8-bit signed int at the given byteOffset + * + * @param self DataView object + * @param byteOffset byte offset to read from + * @param value byte value to set + * @return undefined + */ + @SpecializedFunction + public static Object setInt8(final Object self, final int byteOffset, final int value) { + try { + getBuffer(self).put(byteOffset, (byte)value); + return UNDEFINED; + } catch (final IndexOutOfBoundsException ioe) { + throw rangeError(ioe, "dataview.offset"); + } + } + + /** + * Set 8-bit unsigned int at the given byteOffset + * + * @param self DataView object + * @param byteOffset byte offset to write at + * @param value byte value to set + * @return undefined + */ + @Function(attributes = Attribute.NOT_ENUMERABLE, arity = 2) + public static Object setUint8(final Object self, final Object byteOffset, final Object value) { + try { + getBuffer(self).put(JSType.toInt32(byteOffset), (byte)JSType.toInt32(value)); + return UNDEFINED; + } catch (final IndexOutOfBoundsException ioe) { + throw rangeError(ioe, "dataview.offset"); + } + } + + /** + * Set 8-bit unsigned int at the given byteOffset + * + * @param self DataView object + * @param byteOffset byte offset to write at + * @param value byte value to set + * @return undefined + */ + @SpecializedFunction + public static Object setUint8(final Object self, final int byteOffset, final int value) { + try { + getBuffer(self).put(byteOffset, (byte)value); + return UNDEFINED; + } catch (final IndexOutOfBoundsException ioe) { + throw rangeError(ioe, "dataview.offset"); + } + } + + /** + * Set 16-bit signed int at the given byteOffset + * + * @param self DataView object + * @param byteOffset byte offset to write at + * @param value short value to set + * @param littleEndian (optional) flag indicating whether to write in little endian order + * @return undefined + */ + @Function(attributes = Attribute.NOT_ENUMERABLE, arity = 2) + public static Object setInt16(final Object self, final Object byteOffset, final Object value, final Object littleEndian) { + try { + getBuffer(self, littleEndian).putShort(JSType.toInt32(byteOffset), (short)JSType.toInt32(value)); + return UNDEFINED; + } catch (final IndexOutOfBoundsException ioe) { + throw rangeError(ioe, "dataview.offset"); + } + } + + /** + * Set 16-bit signed int at the given byteOffset + * + * @param self DataView object + * @param byteOffset byte offset to write at + * @param value short value to set + * @return undefined + */ + @SpecializedFunction + public static Object setInt16(final Object self, final int byteOffset, final int value) { + try { + getBuffer(self, false).putShort(byteOffset, (short)value); + return UNDEFINED; + } catch (final IndexOutOfBoundsException ioe) { + throw rangeError(ioe, "dataview.offset"); + } + } + + /** + * Set 16-bit signed int at the given byteOffset + * + * @param self DataView object + * @param byteOffset byte offset to write at + * @param value short value to set + * @param littleEndian (optional) flag indicating whether to write in little endian order + * @return undefined + */ + @SpecializedFunction + public static Object setInt16(final Object self, final int byteOffset, final int value, final boolean littleEndian) { + try { + getBuffer(self, littleEndian).putShort(byteOffset, (short)value); + return UNDEFINED; + } catch (final IndexOutOfBoundsException ioe) { + throw rangeError(ioe, "dataview.offset"); + } + } + + /** + * Set 16-bit unsigned int at the given byteOffset + * + * @param self DataView object + * @param byteOffset byte offset to write at + * @param value short value to set + * @param littleEndian (optional) flag indicating whether to write in little endian order + * @return undefined + */ + @Function(attributes = Attribute.NOT_ENUMERABLE, arity = 2) + public static Object setUint16(final Object self, final Object byteOffset, final Object value, final Object littleEndian) { + try { + getBuffer(self, littleEndian).putShort(JSType.toInt32(byteOffset), (short)JSType.toInt32(value)); + return UNDEFINED; + } catch (final IndexOutOfBoundsException ioe) { + throw rangeError(ioe, "dataview.offset"); + } + } + + /** + * Set 16-bit unsigned int at the given byteOffset + * + * @param self DataView object + * @param byteOffset byte offset to write at + * @param value short value to set + * @return undefined + */ + @SpecializedFunction + public static Object setUint16(final Object self, final int byteOffset, final int value) { + try { + getBuffer(self, false).putShort(byteOffset, (short)value); + return UNDEFINED; + } catch (final IndexOutOfBoundsException ioe) { + throw rangeError(ioe, "dataview.offset"); + } + } + + /** + * Set 16-bit unsigned int at the given byteOffset + * + * @param self DataView object + * @param byteOffset byte offset to write at + * @param value short value to set + * @param littleEndian (optional) flag indicating whether to write in little endian order + * @return undefined + */ + @SpecializedFunction + public static Object setUint16(final Object self, final int byteOffset, final int value, final boolean littleEndian) { + try { + getBuffer(self, littleEndian).putShort(byteOffset, (short)value); + return UNDEFINED; + } catch (final IndexOutOfBoundsException ioe) { + throw rangeError(ioe, "dataview.offset"); + } + } + + /** + * Set 32-bit signed int at the given byteOffset + * + * @param self DataView object + * @param byteOffset byte offset to write at + * @param value int value to set + * @param littleEndian (optional) flag indicating whether to write in little endian order + * @return undefined + */ + @Function(attributes = Attribute.NOT_ENUMERABLE, arity = 2) + public static Object setInt32(final Object self, final Object byteOffset, final Object value, final Object littleEndian) { + try { + getBuffer(self, littleEndian).putInt(JSType.toInt32(byteOffset), (int)JSType.toInt32(value)); + return UNDEFINED; + } catch (final IndexOutOfBoundsException ioe) { + throw rangeError(ioe, "dataview.offset"); + } + } + + /** + * Set 32-bit signed int at the given byteOffset + * + * @param self DataView object + * @param byteOffset byte offset to write at + * @param value int value to set + * @return undefined + */ + @SpecializedFunction + public static Object setInt32(final Object self, final int byteOffset, final int value) { + try { + getBuffer(self, false).putInt(byteOffset, value); + return UNDEFINED; + } catch (final IndexOutOfBoundsException ioe) { + throw rangeError(ioe, "dataview.offset"); + } + } + + /** + * Set 32-bit signed int at the given byteOffset + * + * @param self DataView object + * @param byteOffset byte offset to write at + * @param value int value to set + * @param littleEndian (optional) flag indicating whether to write in little endian order + * @return undefined + */ + @SpecializedFunction + public static Object setInt32(final Object self, final int byteOffset, final int value, final boolean littleEndian) { + try { + getBuffer(self, littleEndian).putInt(byteOffset, value); + return UNDEFINED; + } catch (final IndexOutOfBoundsException ioe) { + throw rangeError(ioe, "dataview.offset"); + } + } + + /** + * Set 32-bit unsigned int at the given byteOffset + * + * @param self DataView object + * @param byteOffset byte offset to write at + * @param value int value to set + * @param littleEndian (optional) flag indicating whether to write in little endian order + * @return undefined + */ + @Function(attributes = Attribute.NOT_ENUMERABLE, arity = 2) + public static Object setUint32(final Object self, final Object byteOffset, final Object value, final Object littleEndian) { + try { + getBuffer(self, littleEndian).putInt(JSType.toInt32(byteOffset), (int)JSType.toUint32(value)); + return UNDEFINED; + } catch (final IndexOutOfBoundsException ioe) { + throw rangeError(ioe, "dataview.offset"); + } + } + + /** + * Set 32-bit unsigned int at the given byteOffset + * + * @param self DataView object + * @param byteOffset byte offset to write at + * @param value int value to set + * @return undefined + */ + @SpecializedFunction + public static Object setUint32(final Object self, final int byteOffset, final long value) { + try { + getBuffer(self, false).putInt(byteOffset, (int)value); + return UNDEFINED; + } catch (final IndexOutOfBoundsException ioe) { + throw rangeError(ioe, "dataview.offset"); + } + } + + /** + * Set 32-bit unsigned int at the given byteOffset + * + * @param self DataView object + * @param byteOffset byte offset to write at + * @param value int value to set + * @param littleEndian (optional) flag indicating whether to write in little endian order + * @return undefined + */ + @SpecializedFunction + public static Object setUint32(final Object self, final int byteOffset, final long value, final boolean littleEndian) { + try { + getBuffer(self, littleEndian).putInt(byteOffset, (int)value); + return UNDEFINED; + } catch (final IndexOutOfBoundsException ioe) { + throw rangeError(ioe, "dataview.offset"); + } + } + + /** + * Set 32-bit float at the given byteOffset + * + * @param self DataView object + * @param byteOffset byte offset to write at + * @param value float value to set + * @param littleEndian (optional) flag indicating whether to write in little endian order + * @return undefined + */ + @Function(attributes = Attribute.NOT_ENUMERABLE, arity = 2) + public static Object setFloat32(final Object self, final Object byteOffset, final Object value, final Object littleEndian) { + try { + getBuffer(self, littleEndian).putFloat((int)JSType.toUint32(byteOffset), (float)JSType.toNumber(value)); + return UNDEFINED; + } catch (final IndexOutOfBoundsException ioe) { + throw rangeError(ioe, "dataview.offset"); + } + } + + /** + * Set 32-bit float at the given byteOffset + * + * @param self DataView object + * @param byteOffset byte offset to write at + * @param value float value to set + * @return undefined + */ + @SpecializedFunction + public static Object setFloat32(final Object self, final int byteOffset, final double value) { + try { + getBuffer(self, false).putFloat(byteOffset, (float)value); + return UNDEFINED; + } catch (final IndexOutOfBoundsException ioe) { + throw rangeError(ioe, "dataview.offset"); + } + } + + /** + * Set 32-bit float at the given byteOffset + * + * @param self DataView object + * @param byteOffset byte offset to write at + * @param value float value to set + * @param littleEndian (optional) flag indicating whether to write in little endian order + * @return undefined + */ + @SpecializedFunction + public static Object setFloat32(final Object self, final int byteOffset, final double value, final boolean littleEndian) { + try { + getBuffer(self, littleEndian).putFloat(byteOffset, (float)value); + return UNDEFINED; + } catch (final IndexOutOfBoundsException ioe) { + throw rangeError(ioe, "dataview.offset"); + } + } + + /** + * Set 64-bit float at the given byteOffset + * + * @param self DataView object + * @param byteOffset byte offset to write at + * @param value double value to set + * @param littleEndian (optional) flag indicating whether to write in little endian order + * @return undefined + */ + @Function(attributes = Attribute.NOT_ENUMERABLE, arity = 2) + public static Object setFloat64(final Object self, final Object byteOffset, final Object value, final Object littleEndian) { + try { + getBuffer(self, littleEndian).putDouble((int)JSType.toUint32(byteOffset), JSType.toNumber(value)); + return UNDEFINED; + } catch (final IndexOutOfBoundsException ioe) { + throw rangeError(ioe, "dataview.offset"); + } + } + + /** + * Set 64-bit float at the given byteOffset + * + * @param self DataView object + * @param byteOffset byte offset to write at + * @param value double value to set + * @return undefined + */ + @SpecializedFunction + public static Object setFloat64(final Object self, final int byteOffset, final double value) { + try { + getBuffer(self, false).putDouble(byteOffset, value); + return UNDEFINED; + } catch (final IndexOutOfBoundsException ioe) { + throw rangeError(ioe, "dataview.offset"); + } + } + + /** + * Set 64-bit float at the given byteOffset + * + * @param self DataView object + * @param byteOffset byte offset to write at + * @param value double value to set + * @param littleEndian (optional) flag indicating whether to write in little endian order + * @return undefined + */ + @SpecializedFunction + public static Object setFloat64(final Object self, final int byteOffset, final double value, final boolean littleEndian) { + try { + getBuffer(self, littleEndian).putDouble(byteOffset, value); + return UNDEFINED; + } catch (final IndexOutOfBoundsException ioe) { + throw rangeError(ioe, "dataview.offset"); + } + } + + // internals only below this point + private static ByteBuffer bufferFrom(final NativeArrayBuffer nab, final int offset) { + try { + return nab.getBuffer(offset); + } catch (final IndexOutOfBoundsException ioe) { + throw rangeError(ioe, "dataview.constructor.offset"); + } + } + + private static ByteBuffer bufferFrom(final NativeArrayBuffer nab, final int offset, final int length) { + try { + return nab.getBuffer(offset, length); + } catch (final IndexOutOfBoundsException ioe) { + throw rangeError(ioe, "dataview.constructor.offset"); + } + } + + private static NativeDataView checkSelf(final Object self) { + if (!(self instanceof NativeDataView)) { + throw typeError("not.an.arraybuffer", ScriptRuntime.safeToString(self)); + } + return (NativeDataView)self; + } + + private static ByteBuffer getBuffer(final Object self) { + return checkSelf(self).buf; + } + + private static ByteBuffer getBuffer(final Object self, final Object littleEndian) { + return getBuffer(self, JSType.toBoolean(littleEndian)); + } + + private static ByteBuffer getBuffer(final Object self, final boolean littleEndian) { + return getBuffer(self).order(littleEndian? ByteOrder.LITTLE_ENDIAN : ByteOrder.BIG_ENDIAN); + } +} diff --git a/nashorn/src/jdk/nashorn/internal/runtime/Context.java b/nashorn/src/jdk/nashorn/internal/runtime/Context.java index 51287affc71..aaf9bbdd35d 100644 --- a/nashorn/src/jdk/nashorn/internal/runtime/Context.java +++ b/nashorn/src/jdk/nashorn/internal/runtime/Context.java @@ -648,7 +648,7 @@ public final class Context { * Checks that the given Class can be accessed from no permissions context. * * @param clazz Class object - * @throw SecurityException if not accessible + * @throws SecurityException if not accessible */ public static void checkPackageAccess(final Class clazz) { final SecurityManager sm = System.getSecurityManager(); @@ -665,7 +665,7 @@ public final class Context { * Checks that the given package name can be accessed from no permissions context. * * @param pkgName package name - * @throw SecurityException if not accessible + * @throws SecurityException if not accessible */ public static void checkPackageAccess(final String pkgName) { final SecurityManager sm = System.getSecurityManager(); diff --git a/nashorn/src/jdk/nashorn/internal/runtime/resources/Messages.properties b/nashorn/src/jdk/nashorn/internal/runtime/resources/Messages.properties index e1c4d1f1f8a..47248fce715 100644 --- a/nashorn/src/jdk/nashorn/internal/runtime/resources/Messages.properties +++ b/nashorn/src/jdk/nashorn/internal/runtime/resources/Messages.properties @@ -79,6 +79,7 @@ type.error.not.a.function={0} is not a function type.error.not.a.constructor={0} is not a constructor function type.error.not.a.file={0} is not a File type.error.not.a.bytebuffer={0} is not a java.nio.ByteBuffer +type.error.not.an.arraybuffer.in.dataview=First arg to DataView constructor must be an ArrayBuffer # operations not permitted on undefined type.error.cant.call.undefined=Cannot call undefined @@ -137,6 +138,9 @@ type.error.no.method.matches.args=Can not invoke method {0} with the passed argu type.error.method.not.constructor=Java method {0} can't be used as a constructor. type.error.env.not.object=$ENV must be an Object. type.error.unsupported.java.to.type=Unsupported Java.to target type {0}. + +range.error.dataview.constructor.offset=Wrong offset or length in DataView constructor +range.error.dataview.offset=Offset is outside the bounds of the DataView range.error.inappropriate.array.length=inappropriate array length: {0} range.error.inappropriate.array.buffer.length=inappropriate array buffer length: {0} range.error.invalid.fraction.digits=fractionDigits argument to {0} must be in [0, 20] diff --git a/nashorn/test/script/basic/dataview_endian.js b/nashorn/test/script/basic/dataview_endian.js new file mode 100644 index 00000000000..f7607c0ee05 --- /dev/null +++ b/nashorn/test/script/basic/dataview_endian.js @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/** + * JDK-8015958: DataView constructor is not defined + * + * @test + * @run + */ + +// set/get endianess checks + +var buffer = new ArrayBuffer(4); +var dv = new DataView(buffer); + +// write (default) big endian, read big/little endian +dv.setUint16(0, 0xABCD); +Assert.assertEquals(dv.getUint16(0), 0xABCD); +Assert.assertEquals(dv.getUint16(0, false), 0xABCD); +Assert.assertEquals(dv.getUint16(0, true), 0xCDAB); + +// write little endian, read big/little endian +dv.setUint16(0, 0xABCD, true); +Assert.assertEquals(dv.getUint16(0), 0xCDAB); +Assert.assertEquals(dv.getUint16(0, false), 0xCDAB); +Assert.assertEquals(dv.getUint16(0, true), 0xABCD); + +// write explicit big endian, read big/little endian +dv.setUint16(0, 0xABCD, false); +Assert.assertEquals(dv.getUint16(0), 0xABCD); +Assert.assertEquals(dv.getUint16(0, false), 0xABCD); +Assert.assertEquals(dv.getUint16(0, true), 0xCDAB); + +// write (default) big endian, read big/little endian +dv.setUint32(0, 0xABCDEF89); +Assert.assertEquals(dv.getUint32(0), 0xABCDEF89); +Assert.assertEquals(dv.getUint32(0, false), 0xABCDEF89); +Assert.assertEquals(dv.getUint32(0, true), 0x89EFCDAB); + +// write little endian, read big/little endian +dv.setUint32(0, 0xABCDEF89, true); +Assert.assertEquals(dv.getUint32(0), 0x89EFCDAB); +Assert.assertEquals(dv.getUint32(0, false), 0x89EFCDAB); +Assert.assertEquals(dv.getUint32(0, true), 0xABCDEF89); + +// write explicit big endian, read big/little endian +dv.setUint32(0, 0xABCDEF89, false); +Assert.assertEquals(dv.getUint32(0), 0xABCDEF89); +Assert.assertEquals(dv.getUint32(0, false), 0xABCDEF89); +Assert.assertEquals(dv.getUint32(0, true), 0x89EFCDAB); diff --git a/nashorn/test/script/basic/dataview_getset.js b/nashorn/test/script/basic/dataview_getset.js new file mode 100644 index 00000000000..8c7a994c1d0 --- /dev/null +++ b/nashorn/test/script/basic/dataview_getset.js @@ -0,0 +1,93 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/** + * JDK-8015958: DataView constructor is not defined + * + * @test + * @run + */ + +// checking get/set of values of various types +// Also basic endianess check. + +var Float = Java.type("java.lang.Float"); +var Double = Java.type("java.lang.Double"); + +var DOUBLE_MIN = Double.MIN_VALUE; +var DOUBLE_MIN_NORMAL = Double.MIN_NORMAL; +var FLOAT_MIN = Float.MIN_VALUE; +var FLOAT_MIN_NORMAL = Float.MIN_NORMAL; + +var buffer = new ArrayBuffer(12); +var dv = new DataView(buffer); + +dv.setInt8(1, 123); +Assert.assertEquals(dv.getInt8(1), 123); +dv.setInt8(1, 123, true); +Assert.assertEquals(dv.getInt8(1, true), 123); + +dv.setUint8(1, 255); +Assert.assertEquals(dv.getUint8(1), 255); +dv.setUint8(1, 255, true); +Assert.assertEquals(dv.getUint8(1, true), 255); + +dv.setInt16(1, 1234); +Assert.assertEquals(dv.getInt16(1), 1234); +dv.setInt16(1, 1234, true); +Assert.assertEquals(dv.getInt16(1, true), 1234); + +dv.setUint16(1, 65535); +Assert.assertEquals(dv.getUint16(1), 65535); +dv.setUint16(1, 65535, true); +Assert.assertEquals(dv.getUint16(1, true), 65535); + +dv.setInt32(1, 1234); +Assert.assertEquals(dv.getInt32(1), 1234); +dv.setInt32(1, 1234, true); +Assert.assertEquals(dv.getInt32(1, true), 1234); + +dv.setUint32(1, 4294967295); +Assert.assertEquals(dv.getUint32(1), 4294967295); +dv.setUint32(1, 4294967295, true); +Assert.assertEquals(dv.getUint32(1, true), 4294967295); + +dv.setFloat64(1, Math.PI); +Assert.assertEquals(dv.getFloat64(1), Math.PI, DOUBLE_MIN); +dv.setFloat64(1, Math.PI, true); +Assert.assertEquals(dv.getFloat64(1, true), Math.PI, DOUBLE_MIN); + +dv.setFloat64(1, DOUBLE_MIN_NORMAL); +Assert.assertEquals(dv.getFloat64(1), DOUBLE_MIN_NORMAL, DOUBLE_MIN); +dv.setFloat64(1, DOUBLE_MIN_NORMAL, true); +Assert.assertEquals(dv.getFloat64(1, true), DOUBLE_MIN_NORMAL, DOUBLE_MIN); + +dv.setFloat32(1, 1.414); +Assert["assertEquals(float, float, float)"](dv.getFloat32(1), 1.414, FLOAT_MIN); +dv.setFloat32(1, 1.414, true); +Assert["assertEquals(float, float, float)"](dv.getFloat32(1, true), 1.414, FLOAT_MIN); + +dv.setFloat32(1, FLOAT_MIN_NORMAL); +Assert["assertEquals(float, float, float)"](dv.getFloat32(1), FLOAT_MIN_NORMAL, FLOAT_MIN); +dv.setFloat32(1, FLOAT_MIN_NORMAL, true); +Assert["assertEquals(float, float, float)"](dv.getFloat32(1, true), FLOAT_MIN_NORMAL, FLOAT_MIN); diff --git a/nashorn/test/script/basic/dataview_new.js b/nashorn/test/script/basic/dataview_new.js new file mode 100644 index 00000000000..78f8183d52a --- /dev/null +++ b/nashorn/test/script/basic/dataview_new.js @@ -0,0 +1,71 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/** + * JDK-8015958: DataView constructor is not defined + * + * @test + * @run + */ + +// basic DataView constructor checks. + +// check ArrayBufferView property values of DataView instance +function check(dv, buf, offset, length) { + if (dv.buffer !== buf) { + fail("DataView.buffer is wrong"); + } + + if (dv.byteOffset != offset) { + fail("DataView.byteOffset = " + dv.byteOffset + ", expected " + offset); + } + + if (dv.byteLength != length) { + fail("DataView.byteLength = " + dv.byteLength + ", expected " + length); + } +} + +var buffer = new ArrayBuffer(12); +check(new DataView(buffer), buffer, 0, 12); +check(new DataView(buffer, 2), buffer, 2, 10); +check(new DataView(buffer, 4, 8), buffer, 4, 8); + +// make sure expected error is thrown +function checkError(callback, ErrorType) { + try { + callback(); + fail("Should have thrown " + ErrorType.name); + } catch (e) { + if (! (e instanceof ErrorType)) { + fail("Expected " + ErrorType.name + " got " + e); + } + } +} + +// non ArrayBuffer as first arg +checkError(function() { new DataView(344) }, TypeError); + +// illegal offset/length values +checkError(function() { new DataView(buffer, -1) }, RangeError); +checkError(function() { new DataView(buffer, 15) }, RangeError); +checkError(function() { new DataView(buffer, 1, 32) }, RangeError); From 29a22468e265db38cac053543a6195f18529be8d Mon Sep 17 00:00:00 2001 From: Erik Joelsson Date: Thu, 13 Mar 2014 17:18:11 +0100 Subject: [PATCH 066/116] 8037238: JDK 9 images don't rebuild when access bridge jars rebuild Reviewed-by: tbell --- make/common/JavaCompilation.gmk | 4 ++++ make/common/MakeBase.gmk | 5 +++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/make/common/JavaCompilation.gmk b/make/common/JavaCompilation.gmk index 5ee8fdf301c..9cfed4a9a35 100644 --- a/make/common/JavaCompilation.gmk +++ b/make/common/JavaCompilation.gmk @@ -158,6 +158,10 @@ define SetupArchive $1_DEPS+=$$(call CacheFind,$$(wildcard $$(addsuffix /META-INF,$$($1_SRCS)))) endif endif + # The dependency list should never be empty + ifeq ($$(strip $$($1_DEPS)), ) + $$(warning No dependencies found for $1) + endif # Utility macros, to make the shell script receipt somewhat easier to decipher. diff --git a/make/common/MakeBase.gmk b/make/common/MakeBase.gmk index 586d68ab937..869937431a2 100644 --- a/make/common/MakeBase.gmk +++ b/make/common/MakeBase.gmk @@ -436,7 +436,8 @@ not-containing = $(foreach v,$2,$(if $(findstring $1,$v),,$v)) # Param 1 - Dir to find in ifeq ($(OPENJDK_BUILD_OS),windows) define FillCacheFind - FIND_CACHE_DIR += $1 + # Remove any trailing slash from dirs in the cache dir list + FIND_CACHE_DIR += $$(patsubst %/,%, $1) FIND_CACHE := $$(sort $$(FIND_CACHE) $$(shell $(FIND) $1 -type f -o -type l)) endef else @@ -451,7 +452,7 @@ endif # The extra - is needed when FIND_CACHE_DIR is empty but should be harmless. # Param 1 - Dirs to find in define CacheFind - $(if $(filter-out $(addsuffix %,- $(FIND_CACHE_DIR)),$1), \ + $(if $(filter-out $(addsuffix /%,- $(FIND_CACHE_DIR)) $(FIND_CACHE_DIR),$1), \ $(shell $(FIND) $1 -type f -o -type l), \ $(filter $(addsuffix %,$1),$(FIND_CACHE))) endef From 73e0ab9b7fcab16802611685c5b16dd44edcd71b Mon Sep 17 00:00:00 2001 From: Vicente Romero Date: Thu, 13 Mar 2014 17:36:51 +0000 Subject: [PATCH 067/116] 8034127: javac provide debug oriented toString() methods to InferenceContext and UndetVar Reviewed-by: jjg --- .../com/sun/tools/javac/code/Type.java | 22 ++++++++++++++----- .../com/sun/tools/javac/comp/Infer.java | 6 +++++ 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/langtools/src/share/classes/com/sun/tools/javac/code/Type.java b/langtools/src/share/classes/com/sun/tools/javac/code/Type.java index da87eee67e0..0b57e21cbae 100644 --- a/langtools/src/share/classes/com/sun/tools/javac/code/Type.java +++ b/langtools/src/share/classes/com/sun/tools/javac/code/Type.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -1481,8 +1481,21 @@ public abstract class Type extends AnnoConstruct implements TypeMirror { } public String toString() { - if (inst != null) return inst.toString(); - else return qtype + "?"; + return (inst == null) ? qtype + "?" : inst.toString(); + } + + public String debugString() { + String result = "inference var = " + qtype + "\n"; + if (inst != null) { + result += "inst = " + inst + '\n'; + } + for (InferenceBound bound: InferenceBound.values()) { + List aboundList = bounds.get(bound); + if (aboundList.size() > 0) { + result += bound + " = " + aboundList + '\n'; + } + } + return result; } @Override @@ -1492,8 +1505,7 @@ public abstract class Type extends AnnoConstruct implements TypeMirror { @Override public Type baseType() { - if (inst != null) return inst.baseType(); - else return this; + return (inst == null) ? this : inst.baseType(); } /** get all bounds of a given kind */ diff --git a/langtools/src/share/classes/com/sun/tools/javac/comp/Infer.java b/langtools/src/share/classes/com/sun/tools/javac/comp/Infer.java index 7fa54fc374c..1fe49587172 100644 --- a/langtools/src/share/classes/com/sun/tools/javac/comp/Infer.java +++ b/langtools/src/share/classes/com/sun/tools/javac/comp/Infer.java @@ -2173,6 +2173,12 @@ public class Infer { //back-door to infer return Infer.this; } + + @Override + public String toString() { + return "Inference vars: " + inferencevars + '\n' + + "Undet vars: " + undetvars; + } } final InferenceContext emptyContext = new InferenceContext(List.nil()); From 2564e82ad177c5c093d8033e33b3778439c779f6 Mon Sep 17 00:00:00 2001 From: Vicente Romero Date: Thu, 13 Mar 2014 20:13:43 +0000 Subject: [PATCH 068/116] 8034924: Incorrect inheritance of inaccessible static method Reviewed-by: jjg, jlahoda --- .../com/sun/tools/javac/code/Symbol.java | 36 +++++++--- .../IncorrectInheritanceTest.java | 68 +++++++++++++++++++ 2 files changed, 93 insertions(+), 11 deletions(-) create mode 100644 langtools/test/tools/javac/IncorrectInheritance/IncorrectInheritanceTest.java diff --git a/langtools/src/share/classes/com/sun/tools/javac/code/Symbol.java b/langtools/src/share/classes/com/sun/tools/javac/code/Symbol.java index a5195caa8ee..1af2b332cc0 100644 --- a/langtools/src/share/classes/com/sun/tools/javac/code/Symbol.java +++ b/langtools/src/share/classes/com/sun/tools/javac/code/Symbol.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -467,11 +467,24 @@ public abstract class Symbol extends AnnoConstruct implements Element { private boolean hiddenIn(ClassSymbol clazz, Types types) { Symbol sym = hiddenInInternal(clazz, types); - return sym != null && sym != this; + Assert.check(sym != null, "the result of hiddenInInternal() can't be null"); + /* If we find the current symbol then there is no symbol hiding it + */ + return sym != this; } - private Symbol hiddenInInternal(ClassSymbol c, Types types) { - Scope.Entry e = c.members().lookup(name); + /** This method looks in the supertypes graph that has the current class as the + * initial node, till it finds the current symbol or another symbol that hides it. + * If the current class has more than one supertype (extends one class and + * implements one or more interfaces) then null can be returned, meaning that + * a wrong path in the supertypes graph was selected. Null can only be returned + * as a temporary value, as a result of the recursive call. + */ + private Symbol hiddenInInternal(ClassSymbol currentClass, Types types) { + if (currentClass == owner) { + return this; + } + Scope.Entry e = currentClass.members().lookup(name); while (e.scope != null) { if (e.sym.kind == kind && (kind != MTH || @@ -481,18 +494,19 @@ public abstract class Symbol extends AnnoConstruct implements Element { } e = e.next(); } - List hiddenSyms = List.nil(); - for (Type st : types.interfaces(c.type).prepend(types.supertype(c.type))) { + Symbol hiddenSym = null; + for (Type st : types.interfaces(currentClass.type) + .prepend(types.supertype(currentClass.type))) { if (st != null && (st.hasTag(CLASS))) { Symbol sym = hiddenInInternal((ClassSymbol)st.tsym, types); - if (sym != null) { - hiddenSyms = hiddenSyms.prepend(hiddenInInternal((ClassSymbol)st.tsym, types)); + if (sym == this) { + return this; + } else if (sym != null) { + hiddenSym = sym; } } } - return hiddenSyms.contains(this) ? - this : - (hiddenSyms.isEmpty() ? null : hiddenSyms.head); + return hiddenSym; } /** Is this symbol inherited into a given class? diff --git a/langtools/test/tools/javac/IncorrectInheritance/IncorrectInheritanceTest.java b/langtools/test/tools/javac/IncorrectInheritance/IncorrectInheritanceTest.java new file mode 100644 index 00000000000..a447d22fe15 --- /dev/null +++ b/langtools/test/tools/javac/IncorrectInheritance/IncorrectInheritanceTest.java @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 8034924 + * @summary Incorrect inheritance of inaccessible static method + * @library /tools/javac/lib + * @build ToolBox + * @run main IncorrectInheritanceTest + */ + +public class IncorrectInheritanceTest { + private static final String ASrc = + "package pkg;\n" + + "\n" + + "public class A {\n" + + " static void foo(Object o) {}\n" + + " private static void bar(Object o) {}\n" + + "}"; + + private static final String BSrc = + "import pkg.A;\n" + + "class B extends A {\n" + + " public void foo(Object o) {}\n" + + " public void bar(Object o) {}\n" + + "}"; + + private static final String CSrc = + "class C extends B {\n" + + " public void m(Object o) {\n" + + " foo(o);\n" + + " bar(o);\n" + + " }\n" + + "}"; + + public static void main(String[] args) throws Exception { + new IncorrectInheritanceTest().test(); + } + + public void test() throws Exception { + ToolBox.JavaToolArgs javacParams = + new ToolBox.JavaToolArgs() + .setSources(ASrc, BSrc, CSrc); + ToolBox.javac(javacParams); + } + +} From 6151bfe1cb6faa8924731397adddadfdc9c54876 Mon Sep 17 00:00:00 2001 From: Erik Joelsson Date: Fri, 14 Mar 2014 12:31:08 +0100 Subject: [PATCH 069/116] 8037281: Improve CacheFind and enable on all platforms Reviewed-by: tbell, ihse --- make/common/JavaCompilation.gmk | 6 ++++++ make/common/MakeBase.gmk | 31 ++++++++++++++++++++++--------- 2 files changed, 28 insertions(+), 9 deletions(-) diff --git a/make/common/JavaCompilation.gmk b/make/common/JavaCompilation.gmk index 9cfed4a9a35..5b3f23741dd 100644 --- a/make/common/JavaCompilation.gmk +++ b/make/common/JavaCompilation.gmk @@ -143,6 +143,9 @@ define SetupArchive ifneq (,$2) $1_DEPS:=$2 else + # Add all source roots to the find cache since we are likely going to run find + # on these more than once. The cache will only be updated if necessary. + $$(eval $$(call FillCacheFind, $$($1_FIND_LIST))) $1_DEPS:=$$(filter $$(addprefix %,$$($1_SUFFIXES)), \ $$(call CacheFind,$$($1_SRCS))) ifneq (,$$($1_GREP_INCLUDE_PATTERNS)) @@ -424,6 +427,9 @@ define SetupJavaCompilation # Make sure the dirs exist. $$(foreach d,$$($1_SRC), $$(if $$(wildcard $$d),,$$(error SRC specified to SetupJavaCompilation $1 contains missing directory $$d))) $$(eval $$(call MakeDir,$$($1_BIN))) + # Add all source roots to the find cache since we are likely going to run find + # on these more than once. The cache will only be updated if necessary. + $$(eval $$(call FillCacheFind,$$($1_SRC))) # Find all files in the source trees. $1_ALL_SRCS += $$(filter-out $(OVR_SRCS),$$(call CacheFind,$$($1_SRC))) # Extract the java files. diff --git a/make/common/MakeBase.gmk b/make/common/MakeBase.gmk index 869937431a2..ca183ad3b86 100644 --- a/make/common/MakeBase.gmk +++ b/make/common/MakeBase.gmk @@ -420,6 +420,7 @@ endif containing = $(foreach v,$2,$(if $(findstring $1,$v),$v)) not-containing = $(foreach v,$2,$(if $(findstring $1,$v),,$v)) +ifneq ($(DISABLE_CACHE_FIND), true) ################################################################################ # In Cygwin, finds are very costly, both because of expensive forks and because # of bad file system caching. Find is used extensively in $(shell) commands to @@ -433,17 +434,23 @@ not-containing = $(foreach v,$2,$(if $(findstring $1,$v),,$v)) # # Needs to be called with $(eval ) # + # Even if the performance benifit is negligible on other platforms, keep the + # functionality active unless explicitly disabled to exercise it more. + # + # Initialize FIND_CACHE_DIRS with := to make it a non recursively-expanded variable + FIND_CACHE_DIRS := # Param 1 - Dir to find in -ifeq ($(OPENJDK_BUILD_OS),windows) define FillCacheFind - # Remove any trailing slash from dirs in the cache dir list - FIND_CACHE_DIR += $$(patsubst %/,%, $1) - FIND_CACHE := $$(sort $$(FIND_CACHE) $$(shell $(FIND) $1 -type f -o -type l)) + # Filter out already cached dirs. The - is needed when FIND_CACHE_DIR is empty + # since filter out will then return empty. + FIND_CACHE_NEW_DIRS := $$(filter-out $$(addsuffix /%,\ + - $(FIND_CACHE_DIRS)) $(FIND_CACHE_DIRS), $1) + ifneq ($$(FIND_CACHE_NEW_DIRS), ) + # Remove any trailing slash from dirs in the cache dir list + FIND_CACHE_DIRS += $$(patsubst %/,%, $$(FIND_CACHE_NEW_DIRS)) + FIND_CACHE := $$(sort $$(FIND_CACHE) $$(shell $(FIND) $$(FIND_CACHE_NEW_DIRS) -type f -o -type l)) + endif endef -else - define FillCacheFind - endef -endif # Mimics find by looking in the cache if all of the directories have been cached. # Otherwise reverts to shell find. This is safe to call on all platforms, even if @@ -452,10 +459,16 @@ endif # The extra - is needed when FIND_CACHE_DIR is empty but should be harmless. # Param 1 - Dirs to find in define CacheFind - $(if $(filter-out $(addsuffix /%,- $(FIND_CACHE_DIR)) $(FIND_CACHE_DIR),$1), \ + $(if $(filter-out $(addsuffix /%,- $(FIND_CACHE_DIRS)) $(FIND_CACHE_DIRS),$1), \ $(shell $(FIND) $1 -type f -o -type l), \ $(filter $(addsuffix %,$1),$(FIND_CACHE))) endef +else + # If CacheFind is disabled, just run the find command. + define CacheFind + $(shell $(FIND) $1 -type f -o -type l) + endef +endif ################################################################################ From ac1be38a4c434fb567a5c9798b4072094dfe354e Mon Sep 17 00:00:00 2001 From: Erik Joelsson Date: Fri, 14 Mar 2014 13:16:46 +0100 Subject: [PATCH 070/116] 8010767: Build fails on OEL6 with 16 cores Reviewed-by: tbell, ihse --- common/autoconf/boot-jdk.m4 | 43 ++++-- common/autoconf/generated-configure.sh | 194 ++++++++++++++++--------- common/autoconf/spec.gmk.in | 8 +- 3 files changed, 165 insertions(+), 80 deletions(-) diff --git a/common/autoconf/boot-jdk.m4 b/common/autoconf/boot-jdk.m4 index 170049731dc..edd6cec4ffb 100644 --- a/common/autoconf/boot-jdk.m4 +++ b/common/autoconf/boot-jdk.m4 @@ -350,8 +350,23 @@ AC_DEFUN_ONCE([BOOTJDK_SETUP_BOOT_JDK_ARGUMENTS], AC_MSG_CHECKING([flags for boot jdk java command] ) + # Disable special log output when a debug build is used as Boot JDK... + ADD_JVM_ARG_IF_OK([-XX:-PrintVMOptions -XX:-UnlockDiagnosticVMOptions -XX:-LogVMOutput],boot_jdk_jvmargs,[$JAVA]) + + # Apply user provided options. + ADD_JVM_ARG_IF_OK([$with_boot_jdk_jvmargs],boot_jdk_jvmargs,[$JAVA]) + + AC_MSG_RESULT([$boot_jdk_jvmargs]) + + # For now, general JAVA_FLAGS are the same as the boot jdk jvmargs + JAVA_FLAGS=$boot_jdk_jvmargs + AC_SUBST(JAVA_FLAGS) + + + AC_MSG_CHECKING([flags for boot jdk java command for big workloads]) + # Starting amount of heap memory. - ADD_JVM_ARG_IF_OK([-Xms64M],boot_jdk_jvmargs,[$JAVA]) + ADD_JVM_ARG_IF_OK([-Xms64M],boot_jdk_jvmargs_big,[$JAVA]) # Maximum amount of heap memory. # Maximum stack size. @@ -366,20 +381,24 @@ AC_DEFUN_ONCE([BOOTJDK_SETUP_BOOT_JDK_ARGUMENTS], JVM_MAX_HEAP=1600M STACK_SIZE=1536 fi - ADD_JVM_ARG_IF_OK([-Xmx$JVM_MAX_HEAP],boot_jdk_jvmargs,[$JAVA]) - ADD_JVM_ARG_IF_OK([-XX:ThreadStackSize=$STACK_SIZE],boot_jdk_jvmargs,[$JAVA]) + ADD_JVM_ARG_IF_OK([-Xmx$JVM_MAX_HEAP],boot_jdk_jvmargs_big,[$JAVA]) + ADD_JVM_ARG_IF_OK([-XX:ThreadStackSize=$STACK_SIZE],boot_jdk_jvmargs_big,[$JAVA]) - # Disable special log output when a debug build is used as Boot JDK... - ADD_JVM_ARG_IF_OK([-XX:-PrintVMOptions -XX:-UnlockDiagnosticVMOptions -XX:-LogVMOutput],boot_jdk_jvmargs,[$JAVA]) + AC_MSG_RESULT([$boot_jdk_jvmargs_big]) - # Apply user provided options. - ADD_JVM_ARG_IF_OK([$with_boot_jdk_jvmargs],boot_jdk_jvmargs,[$JAVA]) + JAVA_FLAGS_BIG=$boot_jdk_jvmargs_big + AC_SUBST(JAVA_FLAGS_BIG) - AC_MSG_RESULT([$boot_jdk_jvmargs]) - # For now, general JAVA_FLAGS are the same as the boot jdk jvmargs - JAVA_FLAGS=$boot_jdk_jvmargs + AC_MSG_CHECKING([flags for boot jdk java command for small workloads]) - AC_SUBST(BOOT_JDK_JVMARGS, $boot_jdk_jvmargs) - AC_SUBST(JAVA_FLAGS, $JAVA_FLAGS) + # Use serial gc for small short lived tools if possible + ADD_JVM_ARG_IF_OK([-XX:+UseSerialGC],boot_jdk_jvmargs_small,[$JAVA]) + ADD_JVM_ARG_IF_OK([-Xms32M],boot_jdk_jvmargs_small,[$JAVA]) + ADD_JVM_ARG_IF_OK([-Xmx512M],boot_jdk_jvmargs_small,[$JAVA]) + + AC_MSG_RESULT([$boot_jdk_jvmargs_small]) + + JAVA_FLAGS_SMALL=$boot_jdk_jvmargs_small + AC_SUBST(JAVA_FLAGS_SMALL) ]) diff --git a/common/autoconf/generated-configure.sh b/common/autoconf/generated-configure.sh index 262655be633..b3d823b29ed 100644 --- a/common/autoconf/generated-configure.sh +++ b/common/autoconf/generated-configure.sh @@ -796,8 +796,9 @@ JAXWS_TOPDIR JAXP_TOPDIR CORBA_TOPDIR LANGTOOLS_TOPDIR +JAVA_FLAGS_SMALL +JAVA_FLAGS_BIG JAVA_FLAGS -BOOT_JDK_JVMARGS JAVAC_FLAGS BOOT_JDK_SOURCETARGET JARSIGNER @@ -4231,7 +4232,7 @@ TOOLCHAIN_DESCRIPTION_xlc="IBM XL C/C++" #CUSTOM_AUTOCONF_INCLUDE # Do not change or remove the following line, it is needed for consistency checks: -DATE_WHEN_GENERATED=1394150589 +DATE_WHEN_GENERATED=1394794899 ############################################################################### # @@ -25866,67 +25867,6 @@ fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking flags for boot jdk java command " >&5 $as_echo_n "checking flags for boot jdk java command ... " >&6; } - # Starting amount of heap memory. - - $ECHO "Check if jvm arg is ok: -Xms64M" >&5 - $ECHO "Command: $JAVA -Xms64M -version" >&5 - OUTPUT=`$JAVA -Xms64M -version 2>&1` - FOUND_WARN=`$ECHO "$OUTPUT" | grep -i warn` - FOUND_VERSION=`$ECHO $OUTPUT | grep " version \""` - if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then - boot_jdk_jvmargs="$boot_jdk_jvmargs -Xms64M" - JVM_ARG_OK=true - else - $ECHO "Arg failed:" >&5 - $ECHO "$OUTPUT" >&5 - JVM_ARG_OK=false - fi - - - # Maximum amount of heap memory. - # Maximum stack size. - if test "x$BUILD_NUM_BITS" = x32; then - JVM_MAX_HEAP=1100M - STACK_SIZE=768 - else - # Running Javac on a JVM on a 64-bit machine, takes more space since 64-bit - # pointers are used. Apparently, we need to increase the heap and stack - # space for the jvm. More specifically, when running javac to build huge - # jdk batch - JVM_MAX_HEAP=1600M - STACK_SIZE=1536 - fi - - $ECHO "Check if jvm arg is ok: -Xmx$JVM_MAX_HEAP" >&5 - $ECHO "Command: $JAVA -Xmx$JVM_MAX_HEAP -version" >&5 - OUTPUT=`$JAVA -Xmx$JVM_MAX_HEAP -version 2>&1` - FOUND_WARN=`$ECHO "$OUTPUT" | grep -i warn` - FOUND_VERSION=`$ECHO $OUTPUT | grep " version \""` - if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then - boot_jdk_jvmargs="$boot_jdk_jvmargs -Xmx$JVM_MAX_HEAP" - JVM_ARG_OK=true - else - $ECHO "Arg failed:" >&5 - $ECHO "$OUTPUT" >&5 - JVM_ARG_OK=false - fi - - - $ECHO "Check if jvm arg is ok: -XX:ThreadStackSize=$STACK_SIZE" >&5 - $ECHO "Command: $JAVA -XX:ThreadStackSize=$STACK_SIZE -version" >&5 - OUTPUT=`$JAVA -XX:ThreadStackSize=$STACK_SIZE -version 2>&1` - FOUND_WARN=`$ECHO "$OUTPUT" | grep -i warn` - FOUND_VERSION=`$ECHO $OUTPUT | grep " version \""` - if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then - boot_jdk_jvmargs="$boot_jdk_jvmargs -XX:ThreadStackSize=$STACK_SIZE" - JVM_ARG_OK=true - else - $ECHO "Arg failed:" >&5 - $ECHO "$OUTPUT" >&5 - JVM_ARG_OK=false - fi - - # Disable special log output when a debug build is used as Boot JDK... $ECHO "Check if jvm arg is ok: -XX:-PrintVMOptions -XX:-UnlockDiagnosticVMOptions -XX:-LogVMOutput" >&5 @@ -25967,9 +25907,133 @@ $as_echo "$boot_jdk_jvmargs" >&6; } # For now, general JAVA_FLAGS are the same as the boot jdk jvmargs JAVA_FLAGS=$boot_jdk_jvmargs - BOOT_JDK_JVMARGS=$boot_jdk_jvmargs - JAVA_FLAGS=$JAVA_FLAGS + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking flags for boot jdk java command for big workloads" >&5 +$as_echo_n "checking flags for boot jdk java command for big workloads... " >&6; } + + # Starting amount of heap memory. + + $ECHO "Check if jvm arg is ok: -Xms64M" >&5 + $ECHO "Command: $JAVA -Xms64M -version" >&5 + OUTPUT=`$JAVA -Xms64M -version 2>&1` + FOUND_WARN=`$ECHO "$OUTPUT" | grep -i warn` + FOUND_VERSION=`$ECHO $OUTPUT | grep " version \""` + if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then + boot_jdk_jvmargs_big="$boot_jdk_jvmargs_big -Xms64M" + JVM_ARG_OK=true + else + $ECHO "Arg failed:" >&5 + $ECHO "$OUTPUT" >&5 + JVM_ARG_OK=false + fi + + + # Maximum amount of heap memory. + # Maximum stack size. + if test "x$BUILD_NUM_BITS" = x32; then + JVM_MAX_HEAP=1100M + STACK_SIZE=768 + else + # Running Javac on a JVM on a 64-bit machine, takes more space since 64-bit + # pointers are used. Apparently, we need to increase the heap and stack + # space for the jvm. More specifically, when running javac to build huge + # jdk batch + JVM_MAX_HEAP=1600M + STACK_SIZE=1536 + fi + + $ECHO "Check if jvm arg is ok: -Xmx$JVM_MAX_HEAP" >&5 + $ECHO "Command: $JAVA -Xmx$JVM_MAX_HEAP -version" >&5 + OUTPUT=`$JAVA -Xmx$JVM_MAX_HEAP -version 2>&1` + FOUND_WARN=`$ECHO "$OUTPUT" | grep -i warn` + FOUND_VERSION=`$ECHO $OUTPUT | grep " version \""` + if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then + boot_jdk_jvmargs_big="$boot_jdk_jvmargs_big -Xmx$JVM_MAX_HEAP" + JVM_ARG_OK=true + else + $ECHO "Arg failed:" >&5 + $ECHO "$OUTPUT" >&5 + JVM_ARG_OK=false + fi + + + $ECHO "Check if jvm arg is ok: -XX:ThreadStackSize=$STACK_SIZE" >&5 + $ECHO "Command: $JAVA -XX:ThreadStackSize=$STACK_SIZE -version" >&5 + OUTPUT=`$JAVA -XX:ThreadStackSize=$STACK_SIZE -version 2>&1` + FOUND_WARN=`$ECHO "$OUTPUT" | grep -i warn` + FOUND_VERSION=`$ECHO $OUTPUT | grep " version \""` + if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then + boot_jdk_jvmargs_big="$boot_jdk_jvmargs_big -XX:ThreadStackSize=$STACK_SIZE" + JVM_ARG_OK=true + else + $ECHO "Arg failed:" >&5 + $ECHO "$OUTPUT" >&5 + JVM_ARG_OK=false + fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $boot_jdk_jvmargs_big" >&5 +$as_echo "$boot_jdk_jvmargs_big" >&6; } + + JAVA_FLAGS_BIG=$boot_jdk_jvmargs_big + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking flags for boot jdk java command for small workloads" >&5 +$as_echo_n "checking flags for boot jdk java command for small workloads... " >&6; } + + # Use serial gc for small short lived tools if possible + + $ECHO "Check if jvm arg is ok: -XX:+UseSerialGC" >&5 + $ECHO "Command: $JAVA -XX:+UseSerialGC -version" >&5 + OUTPUT=`$JAVA -XX:+UseSerialGC -version 2>&1` + FOUND_WARN=`$ECHO "$OUTPUT" | grep -i warn` + FOUND_VERSION=`$ECHO $OUTPUT | grep " version \""` + if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then + boot_jdk_jvmargs_small="$boot_jdk_jvmargs_small -XX:+UseSerialGC" + JVM_ARG_OK=true + else + $ECHO "Arg failed:" >&5 + $ECHO "$OUTPUT" >&5 + JVM_ARG_OK=false + fi + + + $ECHO "Check if jvm arg is ok: -Xms32M" >&5 + $ECHO "Command: $JAVA -Xms32M -version" >&5 + OUTPUT=`$JAVA -Xms32M -version 2>&1` + FOUND_WARN=`$ECHO "$OUTPUT" | grep -i warn` + FOUND_VERSION=`$ECHO $OUTPUT | grep " version \""` + if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then + boot_jdk_jvmargs_small="$boot_jdk_jvmargs_small -Xms32M" + JVM_ARG_OK=true + else + $ECHO "Arg failed:" >&5 + $ECHO "$OUTPUT" >&5 + JVM_ARG_OK=false + fi + + + $ECHO "Check if jvm arg is ok: -Xmx512M" >&5 + $ECHO "Command: $JAVA -Xmx512M -version" >&5 + OUTPUT=`$JAVA -Xmx512M -version 2>&1` + FOUND_WARN=`$ECHO "$OUTPUT" | grep -i warn` + FOUND_VERSION=`$ECHO $OUTPUT | grep " version \""` + if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then + boot_jdk_jvmargs_small="$boot_jdk_jvmargs_small -Xmx512M" + JVM_ARG_OK=true + else + $ECHO "Arg failed:" >&5 + $ECHO "$OUTPUT" >&5 + JVM_ARG_OK=false + fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $boot_jdk_jvmargs_small" >&5 +$as_echo "$boot_jdk_jvmargs_small" >&6; } + + JAVA_FLAGS_SMALL=$boot_jdk_jvmargs_small diff --git a/common/autoconf/spec.gmk.in b/common/autoconf/spec.gmk.in index 46874b09633..fe5fb1be8d8 100644 --- a/common/autoconf/spec.gmk.in +++ b/common/autoconf/spec.gmk.in @@ -254,7 +254,6 @@ BUILD_HOTSPOT=@BUILD_HOTSPOT@ # The boot jdk to use BOOT_JDK:=@BOOT_JDK@ -BOOT_JDK_JVMARGS:=@BOOT_JDK_JVMARGS@ BOOT_RTJAR:=@BOOT_RTJAR@ BOOT_TOOLSJAR=$(BOOT_JDK)/lib/tools.jar @@ -442,8 +441,11 @@ POST_STRIP_CMD:=@POST_STRIP_CMD@ POST_MCS_CMD:=@POST_MCS_CMD@ JAVA_FLAGS:=@JAVA_FLAGS@ +JAVA_FLAGS_BIG:=@JAVA_FLAGS_BIG@ +JAVA_FLAGS_SMALL:=@JAVA_FLAGS_SMALL@ -JAVA=@FIXPATH@ @JAVA@ $(JAVA_FLAGS) +JAVA=@FIXPATH@ @JAVA@ $(JAVA_FLAGS_BIG) $(JAVA_FLAGS) +JAVA_SMALL=@FIXPATH@ @JAVA@ $(JAVA_FLAGS_SMALL) $(JAVA_FLAGS) JAVAC:=@FIXPATH@ @JAVAC@ # Hotspot sets this variable before reading the SPEC when compiling sa-jdi.jar. Avoid @@ -454,7 +456,7 @@ JAVAH:=@FIXPATH@ @JAVAH@ JAR:=@FIXPATH@ @JAR@ -NATIVE2ASCII:=@FIXPATH@ @NATIVE2ASCII@ +NATIVE2ASCII:=@FIXPATH@ @NATIVE2ASCII@ $(addprefix -J, $(JAVA_FLAGS_SMALL)) JARSIGNER:=@FIXPATH@ @JARSIGNER@ From 53e3990b7cc0d50b201d2d34b0d1b090fabc81ab Mon Sep 17 00:00:00 2001 From: Eric McCorkle Date: Fri, 14 Mar 2014 15:35:13 -0400 Subject: [PATCH 071/116] 8037420: Silent failures in Annotate.actualEnterTypeAnnotations Remove two silent failures Reviewed-by: jjg --- .../classes/com/sun/tools/javac/comp/Annotate.java | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/langtools/src/share/classes/com/sun/tools/javac/comp/Annotate.java b/langtools/src/share/classes/com/sun/tools/javac/comp/Annotate.java index cd1383b3b0a..1a9e0626b1c 100644 --- a/langtools/src/share/classes/com/sun/tools/javac/comp/Annotate.java +++ b/langtools/src/share/classes/com/sun/tools/javac/comp/Annotate.java @@ -808,9 +808,7 @@ public class Annotate { Attribute.TypeCompound tc = enterTypeAnnotation(a, syms.annotationType, env); - if (tc == null) { - continue; - } + Assert.checkNonNull(tc, "Failed to create type annotation"); if (annotated.containsKey(a.type.tsym)) { if (!allowRepeatedAnnos) { @@ -827,10 +825,9 @@ public class Annotate { } } - if (s != null) { - s.appendTypeAttributesWithCompletion( - new AnnotateRepeatedContext<>(env, annotated, pos, log, true)); - } + Assert.checkNonNull(s, "Symbol argument to actualEnterTypeAnnotations is null"); + s.appendTypeAttributesWithCompletion( + new AnnotateRepeatedContext<>(env, annotated, pos, log, true)); } finally { if (prevLintPos != null) deferredLintHandler.setPos(prevLintPos); From e34f74421a2b3e4a571f6d89f7b996fcf4e4ad30 Mon Sep 17 00:00:00 2001 From: Athijegannathan Sundararajan Date: Mon, 17 Mar 2014 18:02:00 +0530 Subject: [PATCH 072/116] 8037400: Remove getInitialMap getters and GlobalObject interface Reviewed-by: lagergren, jlaskey, attila --- nashorn/make/build.xml | 2 + .../api/scripting/NashornScriptEngine.java | 67 +++-- .../api/scripting/ScriptObjectMirror.java | 22 +- .../objects/AccessorPropertyDescriptor.java | 6 +- .../internal/objects/ArrayBufferView.java | 6 +- .../objects/DataPropertyDescriptor.java | 6 +- .../objects/GenericPropertyDescriptor.java | 6 +- .../jdk/nashorn/internal/objects/Global.java | 170 ++++++++++--- .../nashorn/internal/objects/NativeArray.java | 6 +- .../internal/objects/NativeArrayBuffer.java | 6 +- .../internal/objects/NativeBoolean.java | 6 +- .../nashorn/internal/objects/NativeDate.java | 6 +- .../nashorn/internal/objects/NativeError.java | 6 +- .../internal/objects/NativeEvalError.java | 6 +- .../internal/objects/NativeJSAdapter.java | 6 +- .../internal/objects/NativeJavaImporter.java | 6 +- .../internal/objects/NativeNumber.java | 6 +- .../internal/objects/NativeRangeError.java | 6 +- .../objects/NativeReferenceError.java | 6 +- .../internal/objects/NativeRegExp.java | 6 +- .../objects/NativeRegExpExecResult.java | 6 +- .../internal/objects/NativeString.java | 6 +- .../internal/objects/NativeSyntaxError.java | 6 +- .../internal/objects/NativeTypeError.java | 6 +- .../internal/objects/NativeURIError.java | 6 +- .../internal/objects/PrototypeObject.java | 4 - .../internal/objects/ScriptFunctionImpl.java | 36 +-- .../jdk/nashorn/internal/runtime/Context.java | 78 +++--- .../internal/runtime/DebuggerSupport.java | 4 +- .../nashorn/internal/runtime/ECMAErrors.java | 57 ++--- .../internal/runtime/GlobalObject.java | 228 ------------------ .../internal/runtime/JSONFunctions.java | 21 +- .../jdk/nashorn/internal/runtime/JSType.java | 9 +- .../nashorn/internal/runtime/ListAdapter.java | 13 +- .../internal/runtime/NativeJavaPackage.java | 3 +- .../internal/runtime/ParserException.java | 3 +- .../internal/runtime/ScriptFunction.java | 5 +- .../internal/runtime/ScriptFunctionData.java | 5 +- .../internal/runtime/ScriptObject.java | 20 +- .../internal/runtime/ScriptRuntime.java | 2 +- .../internal/runtime/SetMethodCreator.java | 2 +- .../runtime/UserAccessorProperty.java | 5 +- .../internal/runtime/arrays/ArrayData.java | 4 +- .../runtime/arrays/ByteBufferArrayData.java | 5 +- .../runtime/arrays/FrozenArrayFilter.java | 4 +- .../runtime/arrays/SealedArrayFilter.java | 4 +- .../linker/JavaAdapterBytecodeGenerator.java | 22 +- .../runtime/linker/JavaAdapterFactory.java | 6 +- .../linker/NashornPrimitiveLinker.java | 4 +- nashorn/src/jdk/nashorn/tools/Shell.java | 19 +- .../internal/codegen/CompilerTest.java | 5 +- .../performance/PerformanceWrapper.java | 4 +- .../nashorn/internal/runtime/ContextTest.java | 5 +- .../framework/SharedContextEvaluator.java | 6 +- 54 files changed, 376 insertions(+), 594 deletions(-) delete mode 100644 nashorn/src/jdk/nashorn/internal/runtime/GlobalObject.java diff --git a/nashorn/make/build.xml b/nashorn/make/build.xml index a33e355ce91..74eae86a588 100644 --- a/nashorn/make/build.xml +++ b/nashorn/make/build.xml @@ -125,6 +125,7 @@ + @@ -243,6 +244,7 @@ + diff --git a/nashorn/src/jdk/nashorn/api/scripting/NashornScriptEngine.java b/nashorn/src/jdk/nashorn/api/scripting/NashornScriptEngine.java index 3c4d29fc025..9c14359ec4e 100644 --- a/nashorn/src/jdk/nashorn/api/scripting/NashornScriptEngine.java +++ b/nashorn/src/jdk/nashorn/api/scripting/NashornScriptEngine.java @@ -57,9 +57,9 @@ import javax.script.ScriptEngine; import javax.script.ScriptEngineFactory; import javax.script.ScriptException; import javax.script.SimpleBindings; +import jdk.nashorn.internal.objects.Global; import jdk.nashorn.internal.runtime.Context; import jdk.nashorn.internal.runtime.ErrorManager; -import jdk.nashorn.internal.runtime.GlobalObject; import jdk.nashorn.internal.runtime.Property; import jdk.nashorn.internal.runtime.ScriptFunction; import jdk.nashorn.internal.runtime.ScriptObject; @@ -99,7 +99,7 @@ public final class NashornScriptEngine extends AbstractScriptEngine implements C private final boolean _global_per_engine; // This is the initial default Nashorn global object. // This is used as "shared" global if above option is true. - private final ScriptObject global; + private final Global global; // initialized bit late to be made 'final'. // Property object for "context" property of global object. private volatile Property contextProperty; @@ -264,7 +264,7 @@ public final class NashornScriptEngine extends AbstractScriptEngine implements C public Object __noSuchProperty__(final Object self, final ScriptContext ctxt, final String name) { if (ctxt != null) { final int scope = ctxt.getAttributesScope(name); - final ScriptObject ctxtGlobal = getNashornGlobalFrom(ctxt); + final Global ctxtGlobal = getNashornGlobalFrom(ctxt); if (scope != -1) { return ScriptObjectMirror.unwrap(ctxt.getAttribute(name, scope), ctxtGlobal); } @@ -317,7 +317,7 @@ public final class NashornScriptEngine extends AbstractScriptEngine implements C } ScriptObject realSelf = null; - ScriptObject realGlobal = null; + Global realGlobal = null; if(thiz == null) { // making interface out of global functions realSelf = realGlobal = getNashornGlobalFrom(context); @@ -346,7 +346,7 @@ public final class NashornScriptEngine extends AbstractScriptEngine implements C } try { - final ScriptObject oldGlobal = Context.getGlobal(); + final Global oldGlobal = Context.getGlobal(); final boolean globalChanged = (oldGlobal != realGlobal); try { if (globalChanged) { @@ -371,7 +371,7 @@ public final class NashornScriptEngine extends AbstractScriptEngine implements C } // Retrieve nashorn Global object for a given ScriptContext object - private ScriptObject getNashornGlobalFrom(final ScriptContext ctxt) { + private Global getNashornGlobalFrom(final ScriptContext ctxt) { if (_global_per_engine) { // shared single global object for all ENGINE_SCOPE Bindings return global; @@ -380,18 +380,18 @@ public final class NashornScriptEngine extends AbstractScriptEngine implements C final Bindings bindings = ctxt.getBindings(ScriptContext.ENGINE_SCOPE); // is this Nashorn's own Bindings implementation? if (bindings instanceof ScriptObjectMirror) { - final ScriptObject sobj = globalFromMirror((ScriptObjectMirror)bindings); - if (sobj != null) { - return sobj; + final Global glob = globalFromMirror((ScriptObjectMirror)bindings); + if (glob != null) { + return glob; } } // Arbitrary user Bindings implementation. Look for NASHORN_GLOBAL in it! Object scope = bindings.get(NASHORN_GLOBAL); if (scope instanceof ScriptObjectMirror) { - final ScriptObject sobj = globalFromMirror((ScriptObjectMirror)scope); - if (sobj != null) { - return sobj; + final Global glob = globalFromMirror((ScriptObjectMirror)scope); + if (glob != null) { + return glob; } } @@ -399,14 +399,14 @@ public final class NashornScriptEngine extends AbstractScriptEngine implements C // Create new global instance mirror and associate with the Bindings. final ScriptObjectMirror mirror = createGlobalMirror(ctxt); bindings.put(NASHORN_GLOBAL, mirror); - return mirror.getScriptObject(); + return mirror.getHomeGlobal(); } // Retrieve nashorn Global object from a given ScriptObjectMirror - private ScriptObject globalFromMirror(final ScriptObjectMirror mirror) { + private Global globalFromMirror(final ScriptObjectMirror mirror) { ScriptObject sobj = mirror.getScriptObject(); - if (sobj instanceof GlobalObject && isOfContext(sobj, nashornContext)) { - return sobj; + if (sobj instanceof Global && isOfContext((Global)sobj, nashornContext)) { + return (Global)sobj; } return null; @@ -414,15 +414,15 @@ public final class NashornScriptEngine extends AbstractScriptEngine implements C // Create a new ScriptObjectMirror wrapping a newly created Nashorn Global object private ScriptObjectMirror createGlobalMirror(final ScriptContext ctxt) { - final ScriptObject newGlobal = createNashornGlobal(ctxt); + final Global newGlobal = createNashornGlobal(ctxt); return new ScriptObjectMirror(newGlobal, newGlobal); } // Create a new Nashorn Global object - private ScriptObject createNashornGlobal(final ScriptContext ctxt) { - final ScriptObject newGlobal = AccessController.doPrivileged(new PrivilegedAction() { + private Global createNashornGlobal(final ScriptContext ctxt) { + final Global newGlobal = AccessController.doPrivileged(new PrivilegedAction() { @Override - public ScriptObject run() { + public Global run() { try { return nashornContext.newGlobal(); } catch (final RuntimeException e) { @@ -460,7 +460,7 @@ public final class NashornScriptEngine extends AbstractScriptEngine implements C } // scripts should see "context" and "engine" as variables in the given global object - private void setContextVariables(final ScriptObject ctxtGlobal, final ScriptContext ctxt) { + private void setContextVariables(final Global ctxtGlobal, final ScriptContext ctxt) { // set "context" global variable via contextProperty - because this // property is non-writable contextProperty.setObjectValue(ctxtGlobal, ctxtGlobal, ctxt, false); @@ -470,7 +470,7 @@ public final class NashornScriptEngine extends AbstractScriptEngine implements C } // if no arguments passed, expose it if (! (args instanceof ScriptObject)) { - args = ((GlobalObject)ctxtGlobal).wrapAsObject(args); + args = ctxtGlobal.wrapAsObject(args); ctxtGlobal.set("arguments", args, false); } } @@ -478,7 +478,7 @@ public final class NashornScriptEngine extends AbstractScriptEngine implements C private Object invokeImpl(final Object selfObject, final String name, final Object... args) throws ScriptException, NoSuchMethodException { name.getClass(); // null check - ScriptObject invokeGlobal = null; + Global invokeGlobal = null; ScriptObjectMirror selfMirror = null; if (selfObject instanceof ScriptObjectMirror) { selfMirror = (ScriptObjectMirror)selfObject; @@ -489,7 +489,7 @@ public final class NashornScriptEngine extends AbstractScriptEngine implements C } else if (selfObject instanceof ScriptObject) { // invokeMethod called from script code - in which case we may get 'naked' ScriptObject // Wrap it with oldGlobal to make a ScriptObjectMirror for the same. - final ScriptObject oldGlobal = Context.getGlobal(); + final Global oldGlobal = Context.getGlobal(); invokeGlobal = oldGlobal; if (oldGlobal == null) { throw new IllegalArgumentException(getMessage("no.current.nashorn.global")); @@ -502,7 +502,7 @@ public final class NashornScriptEngine extends AbstractScriptEngine implements C selfMirror = (ScriptObjectMirror)ScriptObjectMirror.wrap(selfObject, oldGlobal); } else if (selfObject == null) { // selfObject is null => global function call - final ScriptObject ctxtGlobal = getNashornGlobalFrom(context); + final Global ctxtGlobal = getNashornGlobalFrom(context); invokeGlobal = ctxtGlobal; selfMirror = (ScriptObjectMirror)ScriptObjectMirror.wrap(ctxtGlobal, ctxtGlobal); } @@ -532,11 +532,11 @@ public final class NashornScriptEngine extends AbstractScriptEngine implements C return evalImpl(script, ctxt, getNashornGlobalFrom(ctxt)); } - private Object evalImpl(final ScriptFunction script, final ScriptContext ctxt, final ScriptObject ctxtGlobal) throws ScriptException { + private Object evalImpl(final ScriptFunction script, final ScriptContext ctxt, final Global ctxtGlobal) throws ScriptException { if (script == null) { return null; } - final ScriptObject oldGlobal = Context.getGlobal(); + final Global oldGlobal = Context.getGlobal(); final boolean globalChanged = (oldGlobal != ctxtGlobal); try { if (globalChanged) { @@ -558,7 +558,7 @@ public final class NashornScriptEngine extends AbstractScriptEngine implements C } } - private static void throwAsScriptException(final Exception e, final ScriptObject global) throws ScriptException { + private static void throwAsScriptException(final Exception e, final Global global) throws ScriptException { if (e instanceof ScriptException) { throw (ScriptException)e; } else if (e instanceof NashornException) { @@ -582,7 +582,7 @@ public final class NashornScriptEngine extends AbstractScriptEngine implements C return new CompiledScript() { @Override public Object eval(final ScriptContext ctxt) throws ScriptException { - final ScriptObject globalObject = getNashornGlobalFrom(ctxt); + final Global globalObject = getNashornGlobalFrom(ctxt); // Are we running the script in the correct global? if (func.getScope() == globalObject) { return evalImpl(func, ctxt, globalObject); @@ -602,8 +602,8 @@ public final class NashornScriptEngine extends AbstractScriptEngine implements C return compileImpl(source, getNashornGlobalFrom(ctxt)); } - private ScriptFunction compileImpl(final Source source, final ScriptObject newGlobal) throws ScriptException { - final ScriptObject oldGlobal = Context.getGlobal(); + private ScriptFunction compileImpl(final Source source, final Global newGlobal) throws ScriptException { + final Global oldGlobal = Context.getGlobal(); final boolean globalChanged = (oldGlobal != newGlobal); try { if (globalChanged) { @@ -641,8 +641,7 @@ public final class NashornScriptEngine extends AbstractScriptEngine implements C return true; } - private static boolean isOfContext(final ScriptObject global, final Context context) { - assert global instanceof GlobalObject: "Not a Global object"; - return ((GlobalObject)global).isOfContext(context); + private static boolean isOfContext(final Global global, final Context context) { + return global.isOfContext(context); } } diff --git a/nashorn/src/jdk/nashorn/api/scripting/ScriptObjectMirror.java b/nashorn/src/jdk/nashorn/api/scripting/ScriptObjectMirror.java index 7a9792df19c..b12553369d4 100644 --- a/nashorn/src/jdk/nashorn/api/scripting/ScriptObjectMirror.java +++ b/nashorn/src/jdk/nashorn/api/scripting/ScriptObjectMirror.java @@ -42,10 +42,10 @@ import java.util.Map; import java.util.Set; import java.util.concurrent.Callable; import javax.script.Bindings; +import jdk.nashorn.internal.objects.Global; import jdk.nashorn.internal.runtime.arrays.ArrayData; import jdk.nashorn.internal.runtime.ConsString; import jdk.nashorn.internal.runtime.Context; -import jdk.nashorn.internal.runtime.GlobalObject; import jdk.nashorn.internal.runtime.JSType; import jdk.nashorn.internal.runtime.ScriptFunction; import jdk.nashorn.internal.runtime.ScriptObject; @@ -64,7 +64,7 @@ public final class ScriptObjectMirror extends AbstractJSObject implements Bindin private static final AccessControlContext GET_CONTEXT_ACC_CTXT = getContextAccCtxt(); private final ScriptObject sobj; - private final ScriptObject global; + private final Global global; private final boolean strict; @Override @@ -95,7 +95,7 @@ public final class ScriptObjectMirror extends AbstractJSObject implements Bindin @Override public Object call(final Object thiz, final Object... args) { - final ScriptObject oldGlobal = Context.getGlobal(); + final Global oldGlobal = Context.getGlobal(); final boolean globalChanged = (oldGlobal != global); try { @@ -125,7 +125,7 @@ public final class ScriptObjectMirror extends AbstractJSObject implements Bindin @Override public Object newObject(final Object... args) { - final ScriptObject oldGlobal = Context.getGlobal(); + final Global oldGlobal = Context.getGlobal(); final boolean globalChanged = (oldGlobal != global); try { @@ -171,7 +171,7 @@ public final class ScriptObjectMirror extends AbstractJSObject implements Bindin public Object callMember(final String functionName, final Object... args) { functionName.getClass(); // null check - final ScriptObject oldGlobal = Context.getGlobal(); + final Global oldGlobal = Context.getGlobal(); final boolean globalChanged = (oldGlobal != global); try { @@ -642,7 +642,7 @@ public final class ScriptObjectMirror extends AbstractJSObject implements Bindin */ public static Object wrap(final Object obj, final Object homeGlobal) { if(obj instanceof ScriptObject) { - return homeGlobal instanceof ScriptObject ? new ScriptObjectMirror((ScriptObject)obj, (ScriptObject)homeGlobal) : obj; + return homeGlobal instanceof Global ? new ScriptObjectMirror((ScriptObject)obj, (Global)homeGlobal) : obj; } if(obj instanceof ConsString) { return obj.toString(); @@ -710,13 +710,13 @@ public final class ScriptObjectMirror extends AbstractJSObject implements Bindin // package-privates below this. - ScriptObjectMirror(final ScriptObject sobj, final ScriptObject global) { + ScriptObjectMirror(final ScriptObject sobj, final Global global) { assert sobj != null : "ScriptObjectMirror on null!"; - assert global instanceof GlobalObject : "global is not a GlobalObject"; + assert global != null : "home Global is null"; this.sobj = sobj; this.global = global; - this.strict = ((GlobalObject)global).isStrictContext(); + this.strict = global.isStrictContext(); } // accessors for script engine @@ -724,7 +724,7 @@ public final class ScriptObjectMirror extends AbstractJSObject implements Bindin return sobj; } - ScriptObject getHomeGlobal() { + Global getHomeGlobal() { return global; } @@ -734,7 +734,7 @@ public final class ScriptObjectMirror extends AbstractJSObject implements Bindin // internals only below this. private V inGlobal(final Callable callable) { - final ScriptObject oldGlobal = Context.getGlobal(); + final Global oldGlobal = Context.getGlobal(); final boolean globalChanged = (oldGlobal != global); if (globalChanged) { Context.setGlobal(global); diff --git a/nashorn/src/jdk/nashorn/internal/objects/AccessorPropertyDescriptor.java b/nashorn/src/jdk/nashorn/internal/objects/AccessorPropertyDescriptor.java index b3388eb0813..e39c521724c 100644 --- a/nashorn/src/jdk/nashorn/internal/objects/AccessorPropertyDescriptor.java +++ b/nashorn/src/jdk/nashorn/internal/objects/AccessorPropertyDescriptor.java @@ -67,12 +67,8 @@ public final class AccessorPropertyDescriptor extends ScriptObject implements Pr // initialized by nasgen private static PropertyMap $nasgenmap$; - static PropertyMap getInitialMap() { - return $nasgenmap$; - } - AccessorPropertyDescriptor(final boolean configurable, final boolean enumerable, final Object get, final Object set, final Global global) { - super(global.getObjectPrototype(), getInitialMap()); + super(global.getObjectPrototype(), $nasgenmap$); this.configurable = configurable; this.enumerable = enumerable; this.get = get; diff --git a/nashorn/src/jdk/nashorn/internal/objects/ArrayBufferView.java b/nashorn/src/jdk/nashorn/internal/objects/ArrayBufferView.java index a7252fcc606..7bd1d2f91dd 100644 --- a/nashorn/src/jdk/nashorn/internal/objects/ArrayBufferView.java +++ b/nashorn/src/jdk/nashorn/internal/objects/ArrayBufferView.java @@ -42,12 +42,8 @@ abstract class ArrayBufferView extends ScriptObject { // initialized by nasgen private static PropertyMap $nasgenmap$; - static PropertyMap getInitialMap() { - return $nasgenmap$; - } - private ArrayBufferView(final NativeArrayBuffer buffer, final int byteOffset, final int elementLength, final Global global) { - super(getInitialMap()); + super($nasgenmap$); checkConstructorArgs(buffer, byteOffset, elementLength); this.setProto(getPrototype(global)); this.setArray(factory().createArrayData(buffer, byteOffset, elementLength)); diff --git a/nashorn/src/jdk/nashorn/internal/objects/DataPropertyDescriptor.java b/nashorn/src/jdk/nashorn/internal/objects/DataPropertyDescriptor.java index 9f7d2e4f8e8..e117c7ed2f2 100644 --- a/nashorn/src/jdk/nashorn/internal/objects/DataPropertyDescriptor.java +++ b/nashorn/src/jdk/nashorn/internal/objects/DataPropertyDescriptor.java @@ -64,12 +64,8 @@ public final class DataPropertyDescriptor extends ScriptObject implements Proper // initialized by nasgen private static PropertyMap $nasgenmap$; - static PropertyMap getInitialMap() { - return $nasgenmap$; - } - DataPropertyDescriptor(final boolean configurable, final boolean enumerable, final boolean writable, final Object value, final Global global) { - super(global.getObjectPrototype(), getInitialMap()); + super(global.getObjectPrototype(), $nasgenmap$); this.configurable = configurable; this.enumerable = enumerable; this.writable = writable; diff --git a/nashorn/src/jdk/nashorn/internal/objects/GenericPropertyDescriptor.java b/nashorn/src/jdk/nashorn/internal/objects/GenericPropertyDescriptor.java index bfa06cb3b35..19cc8b6fd29 100644 --- a/nashorn/src/jdk/nashorn/internal/objects/GenericPropertyDescriptor.java +++ b/nashorn/src/jdk/nashorn/internal/objects/GenericPropertyDescriptor.java @@ -55,12 +55,8 @@ public final class GenericPropertyDescriptor extends ScriptObject implements Pro // initialized by nasgen private static PropertyMap $nasgenmap$; - static PropertyMap getInitialMap() { - return $nasgenmap$; - } - GenericPropertyDescriptor(final boolean configurable, final boolean enumerable, final Global global) { - super(global.getObjectPrototype(), getInitialMap()); + super(global.getObjectPrototype(), $nasgenmap$); this.configurable = configurable; this.enumerable = enumerable; } diff --git a/nashorn/src/jdk/nashorn/internal/objects/Global.java b/nashorn/src/jdk/nashorn/internal/objects/Global.java index 0d8ac5caf6a..9e40dbeb1c2 100644 --- a/nashorn/src/jdk/nashorn/internal/objects/Global.java +++ b/nashorn/src/jdk/nashorn/internal/objects/Global.java @@ -48,7 +48,6 @@ import jdk.nashorn.internal.objects.annotations.ScriptClass; import jdk.nashorn.internal.runtime.ConsString; import jdk.nashorn.internal.runtime.Context; import jdk.nashorn.internal.runtime.GlobalFunctions; -import jdk.nashorn.internal.runtime.GlobalObject; import jdk.nashorn.internal.runtime.JSType; import jdk.nashorn.internal.runtime.NativeJavaPackage; import jdk.nashorn.internal.runtime.PropertyDescriptor; @@ -70,7 +69,7 @@ import jdk.nashorn.internal.scripts.JO; * Representation of global scope. */ @ScriptClass("Global") -public final class Global extends ScriptObject implements GlobalObject, Scope { +public final class Global extends ScriptObject implements Scope { private final InvokeByName TO_STRING = new InvokeByName("toString", ScriptObject.class); private final InvokeByName VALUE_OF = new InvokeByName("valueOf", ScriptObject.class); @@ -433,11 +432,9 @@ public final class Global extends ScriptObject implements GlobalObject, Scope { * @return the global singleton */ public static Global instance() { - ScriptObject global = Context.getGlobal(); - if (! (global instanceof Global)) { - throw new IllegalStateException("no current global instance"); - } - return (Global)global; + Global global = Context.getGlobal(); + global.getClass(); // null check + return global; } /** @@ -458,19 +455,30 @@ public final class Global extends ScriptObject implements GlobalObject, Scope { return instance().getContext(); } - // GlobalObject interface implementation + // Runtime interface to Global - @Override + /** + * Is this global of the given Context? + * @param ctxt the context + * @return true if this global belongs to the given Context + */ public boolean isOfContext(final Context ctxt) { return this.context == ctxt; } - @Override + /** + * Does this global belong to a strict Context? + * @return true if this global belongs to a strict Context + */ public boolean isStrictContext() { return context.getEnv()._strict; } - @Override + /** + * Initialize standard builtin objects like "Object", "Array", "Function" etc. + * as well as our extension builtin objects like "Java", "JSAdapter" as properties + * of the global scope object. + */ public void initBuiltinObjects() { if (this.builtinObject != null) { // already initialized, just return @@ -480,12 +488,26 @@ public final class Global extends ScriptObject implements GlobalObject, Scope { init(); } - @Override + /** + * Create a new ScriptFunction object + * + * @param name function name + * @param handle invocation handle for function + * @param scope the scope + * @param strict are we in strict mode + * + * @return new script function + */ public ScriptFunction newScriptFunction(final String name, final MethodHandle handle, final ScriptObject scope, final boolean strict) { return new ScriptFunctionImpl(name, handle, scope, null, strict ? ScriptFunctionData.IS_STRICT_CONSTRUCTOR : ScriptFunctionData.IS_CONSTRUCTOR); } - @Override + /** + * Wrap a Java object as corresponding script object + * + * @param obj object to wrap + * @return wrapped object + */ public Object wrapAsObject(final Object obj) { if (obj instanceof Boolean) { return new NativeBoolean((Boolean)obj, this); @@ -507,7 +529,14 @@ public final class Global extends ScriptObject implements GlobalObject, Scope { } } - @Override + /** + * Lookup helper for JS primitive types + * + * @param request the link request for the dynamic call site. + * @param self self reference + * + * @return guarded invocation + */ public GuardedInvocation primitiveLookup(final LinkRequest request, final Object self) { if (self instanceof String || self instanceof ConsString) { return NativeString.lookupPrimitive(request, self); @@ -519,12 +548,23 @@ public final class Global extends ScriptObject implements GlobalObject, Scope { throw new IllegalArgumentException("Unsupported primitive: " + self); } - @Override + /** + * Create a new empty script object + * + * @return the new ScriptObject + */ public ScriptObject newObject() { return new JO(getObjectPrototype(), JO.getInitialMap()); } - @Override + /** + * Default value of given type + * + * @param sobj script object + * @param typeHint type hint + * + * @return default value + */ public Object getDefaultValue(final ScriptObject sobj, final Class typeHint) { // When the [[DefaultValue]] internal method of O is called with no hint, // then it behaves as if the hint were Number, unless O is a Date object @@ -584,7 +624,12 @@ public final class Global extends ScriptObject implements GlobalObject, Scope { return UNDEFINED; } - @Override + /** + * Is the given ScriptObject an ECMAScript Error object? + * + * @param sobj the object being checked + * @return true if sobj is an Error object + */ public boolean isError(final ScriptObject sobj) { final ScriptObject errorProto = getErrorPrototype(); ScriptObject proto = sobj.getProto(); @@ -597,52 +642,108 @@ public final class Global extends ScriptObject implements GlobalObject, Scope { return false; } - @Override + /** + * Create a new ECMAScript Error object. + * + * @param msg error message + * @return newly created Error object + */ public ScriptObject newError(final String msg) { return new NativeError(msg, this); } - @Override + /** + * Create a new ECMAScript EvalError object. + * + * @param msg error message + * @return newly created EvalError object + */ public ScriptObject newEvalError(final String msg) { return new NativeEvalError(msg, this); } - @Override + /** + * Create a new ECMAScript RangeError object. + * + * @param msg error message + * @return newly created RangeError object + */ public ScriptObject newRangeError(final String msg) { return new NativeRangeError(msg, this); } - @Override + /** + * Create a new ECMAScript ReferenceError object. + * + * @param msg error message + * @return newly created ReferenceError object + */ public ScriptObject newReferenceError(final String msg) { return new NativeReferenceError(msg, this); } - @Override + /** + * Create a new ECMAScript SyntaxError object. + * + * @param msg error message + * @return newly created SyntaxError object + */ public ScriptObject newSyntaxError(final String msg) { return new NativeSyntaxError(msg, this); } - @Override + /** + * Create a new ECMAScript TypeError object. + * + * @param msg error message + * @return newly created TypeError object + */ public ScriptObject newTypeError(final String msg) { return new NativeTypeError(msg, this); } - @Override + /** + * Create a new ECMAScript URIError object. + * + * @param msg error message + * @return newly created URIError object + */ public ScriptObject newURIError(final String msg) { return new NativeURIError(msg, this); } - @Override + /** + * Create a new ECMAScript GenericDescriptor object. + * + * @param configurable is the property configurable? + * @param enumerable is the property enumerable? + * @return newly created GenericDescriptor object + */ public PropertyDescriptor newGenericDescriptor(final boolean configurable, final boolean enumerable) { return new GenericPropertyDescriptor(configurable, enumerable, this); } - @Override + /** + * Create a new ECMAScript DatePropertyDescriptor object. + * + * @param value of the data property + * @param configurable is the property configurable? + * @param enumerable is the property enumerable? + * @return newly created DataPropertyDescriptor object + */ public PropertyDescriptor newDataDescriptor(final Object value, final boolean configurable, final boolean enumerable, final boolean writable) { return new DataPropertyDescriptor(configurable, enumerable, writable, value, this); } - @Override + /** + * Create a new ECMAScript AccessorPropertyDescriptor object. + * + * @param get getter function of the user accessor property + * @param set setter function of the user accessor property + * @param configurable is the property configurable? + * @param enumerable is the property enumerable? + * @return newly created AccessorPropertyDescriptor object + */ public PropertyDescriptor newAccessorDescriptor(final Object get, final Object set, final boolean configurable, final boolean enumerable) { final AccessorPropertyDescriptor desc = new AccessorPropertyDescriptor(configurable, enumerable, get == null ? UNDEFINED : get, set == null ? UNDEFINED : set, this); @@ -675,14 +776,25 @@ public final class Global extends ScriptObject implements GlobalObject, Scope { private final Map namedInvokers = new ConcurrentHashMap<>(); - @Override + + /** + * Get cached InvokeByName object for the given key + * @param key key to be associated with InvokeByName object + * @param creator if InvokeByName is absent 'creator' is called to make one (lazy init) + * @return InvokeByName object associated with the key. + */ public InvokeByName getInvokeByName(final Object key, final Callable creator) { return getLazilyCreatedValue(key, creator, namedInvokers); } private final Map dynamicInvokers = new ConcurrentHashMap<>(); - @Override + /** + * Get cached dynamic method handle for the given key + * @param key key to be associated with dynamic method handle + * @param creator if method handle is absent 'creator' is called to make one (lazy init) + * @return dynamic method handle associated with the key. + */ public MethodHandle getDynamicInvoker(final Object key, final Callable creator) { return getLazilyCreatedValue(key, creator, dynamicInvokers); } diff --git a/nashorn/src/jdk/nashorn/internal/objects/NativeArray.java b/nashorn/src/jdk/nashorn/internal/objects/NativeArray.java index cc62d23cc1f..168a2f8a9ec 100644 --- a/nashorn/src/jdk/nashorn/internal/objects/NativeArray.java +++ b/nashorn/src/jdk/nashorn/internal/objects/NativeArray.java @@ -156,10 +156,6 @@ public final class NativeArray extends ScriptObject { // initialized by nasgen private static PropertyMap $nasgenmap$; - static PropertyMap getInitialMap() { - return $nasgenmap$; - } - /* * Constructors. */ @@ -208,7 +204,7 @@ public final class NativeArray extends ScriptObject { } NativeArray(final ArrayData arrayData, final Global global) { - super(global.getArrayPrototype(), getInitialMap()); + super(global.getArrayPrototype(), $nasgenmap$); this.setArray(arrayData); this.setIsArray(); } diff --git a/nashorn/src/jdk/nashorn/internal/objects/NativeArrayBuffer.java b/nashorn/src/jdk/nashorn/internal/objects/NativeArrayBuffer.java index 49082498b57..49a61c96df3 100644 --- a/nashorn/src/jdk/nashorn/internal/objects/NativeArrayBuffer.java +++ b/nashorn/src/jdk/nashorn/internal/objects/NativeArrayBuffer.java @@ -44,10 +44,6 @@ final class NativeArrayBuffer extends ScriptObject { // initialized by nasgen private static PropertyMap $nasgenmap$; - static PropertyMap getInitialMap() { - return $nasgenmap$; - } - @Constructor(arity = 1) public static Object constructor(final boolean newObj, final Object self, final Object... args) { if (args.length == 0) { @@ -58,7 +54,7 @@ final class NativeArrayBuffer extends ScriptObject { } protected NativeArrayBuffer(final byte[] byteArray, final Global global) { - super(global.getArrayBufferPrototype(), getInitialMap()); + super(global.getArrayBufferPrototype(), $nasgenmap$); this.buffer = byteArray; } diff --git a/nashorn/src/jdk/nashorn/internal/objects/NativeBoolean.java b/nashorn/src/jdk/nashorn/internal/objects/NativeBoolean.java index bde6c608519..f737a6c898b 100644 --- a/nashorn/src/jdk/nashorn/internal/objects/NativeBoolean.java +++ b/nashorn/src/jdk/nashorn/internal/objects/NativeBoolean.java @@ -59,17 +59,13 @@ public final class NativeBoolean extends ScriptObject { // initialized by nasgen private static PropertyMap $nasgenmap$; - static PropertyMap getInitialMap() { - return $nasgenmap$; - } - private NativeBoolean(final boolean value, final ScriptObject proto, final PropertyMap map) { super(proto, map); this.value = value; } NativeBoolean(final boolean flag, final Global global) { - this(flag, global.getBooleanPrototype(), getInitialMap()); + this(flag, global.getBooleanPrototype(), $nasgenmap$); } NativeBoolean(final boolean flag) { diff --git a/nashorn/src/jdk/nashorn/internal/objects/NativeDate.java b/nashorn/src/jdk/nashorn/internal/objects/NativeDate.java index b0d120222a9..34e27f173ac 100644 --- a/nashorn/src/jdk/nashorn/internal/objects/NativeDate.java +++ b/nashorn/src/jdk/nashorn/internal/objects/NativeDate.java @@ -114,10 +114,6 @@ public final class NativeDate extends ScriptObject { // initialized by nasgen private static PropertyMap $nasgenmap$; - static PropertyMap getInitialMap() { - return $nasgenmap$; - } - private NativeDate(final double time, final ScriptObject proto, final PropertyMap map) { super(proto, map); final ScriptEnvironment env = Global.getEnv(); @@ -127,7 +123,7 @@ public final class NativeDate extends ScriptObject { } NativeDate(final double time, final Global global) { - this(time, global.getDatePrototype(), getInitialMap()); + this(time, global.getDatePrototype(), $nasgenmap$); } private NativeDate (final double time) { diff --git a/nashorn/src/jdk/nashorn/internal/objects/NativeError.java b/nashorn/src/jdk/nashorn/internal/objects/NativeError.java index e1a4730d553..3dea27288b0 100644 --- a/nashorn/src/jdk/nashorn/internal/objects/NativeError.java +++ b/nashorn/src/jdk/nashorn/internal/objects/NativeError.java @@ -92,10 +92,6 @@ public final class NativeError extends ScriptObject { // initialized by nasgen private static PropertyMap $nasgenmap$; - static PropertyMap getInitialMap() { - return $nasgenmap$; - } - @SuppressWarnings("LeakingThisInConstructor") private NativeError(final Object msg, final ScriptObject proto, final PropertyMap map) { super(proto, map); @@ -108,7 +104,7 @@ public final class NativeError extends ScriptObject { } NativeError(final Object msg, final Global global) { - this(msg, global.getErrorPrototype(), getInitialMap()); + this(msg, global.getErrorPrototype(), $nasgenmap$); } private NativeError(final Object msg) { diff --git a/nashorn/src/jdk/nashorn/internal/objects/NativeEvalError.java b/nashorn/src/jdk/nashorn/internal/objects/NativeEvalError.java index bb11ef6c354..2b343ede673 100644 --- a/nashorn/src/jdk/nashorn/internal/objects/NativeEvalError.java +++ b/nashorn/src/jdk/nashorn/internal/objects/NativeEvalError.java @@ -62,10 +62,6 @@ public final class NativeEvalError extends ScriptObject { // initialized by nasgen private static PropertyMap $nasgenmap$; - static PropertyMap getInitialMap() { - return $nasgenmap$; - } - @SuppressWarnings("LeakingThisInConstructor") private NativeEvalError(final Object msg, final ScriptObject proto, final PropertyMap map) { super(proto, map); @@ -78,7 +74,7 @@ public final class NativeEvalError extends ScriptObject { } NativeEvalError(final Object msg, final Global global) { - this(msg, global.getEvalErrorPrototype(), getInitialMap()); + this(msg, global.getEvalErrorPrototype(), $nasgenmap$); } private NativeEvalError(final Object msg) { diff --git a/nashorn/src/jdk/nashorn/internal/objects/NativeJSAdapter.java b/nashorn/src/jdk/nashorn/internal/objects/NativeJSAdapter.java index ed879dc69b5..b71b4276cd8 100644 --- a/nashorn/src/jdk/nashorn/internal/objects/NativeJSAdapter.java +++ b/nashorn/src/jdk/nashorn/internal/objects/NativeJSAdapter.java @@ -146,10 +146,6 @@ public final class NativeJSAdapter extends ScriptObject { // initialized by nasgen private static PropertyMap $nasgenmap$; - static PropertyMap getInitialMap() { - return $nasgenmap$; - } - NativeJSAdapter(final Object overrides, final ScriptObject adaptee, final ScriptObject proto, final PropertyMap map) { super(proto, map); this.adaptee = wrapAdaptee(adaptee); @@ -577,7 +573,7 @@ public final class NativeJSAdapter extends ScriptObject { proto = global.getJSAdapterPrototype(); } - return new NativeJSAdapter(overrides, (ScriptObject)adaptee, (ScriptObject)proto, getInitialMap()); + return new NativeJSAdapter(overrides, (ScriptObject)adaptee, (ScriptObject)proto, $nasgenmap$); } @Override diff --git a/nashorn/src/jdk/nashorn/internal/objects/NativeJavaImporter.java b/nashorn/src/jdk/nashorn/internal/objects/NativeJavaImporter.java index c86f3053526..49be8a7c473 100644 --- a/nashorn/src/jdk/nashorn/internal/objects/NativeJavaImporter.java +++ b/nashorn/src/jdk/nashorn/internal/objects/NativeJavaImporter.java @@ -60,17 +60,13 @@ public final class NativeJavaImporter extends ScriptObject { // initialized by nasgen private static PropertyMap $nasgenmap$; - static PropertyMap getInitialMap() { - return $nasgenmap$; - } - private NativeJavaImporter(final Object[] args, final ScriptObject proto, final PropertyMap map) { super(proto, map); this.args = args; } private NativeJavaImporter(final Object[] args, final Global global) { - this(args, global.getJavaImporterPrototype(), getInitialMap()); + this(args, global.getJavaImporterPrototype(), $nasgenmap$); } private NativeJavaImporter(final Object[] args) { diff --git a/nashorn/src/jdk/nashorn/internal/objects/NativeNumber.java b/nashorn/src/jdk/nashorn/internal/objects/NativeNumber.java index 02d9b99efdc..4181d205051 100644 --- a/nashorn/src/jdk/nashorn/internal/objects/NativeNumber.java +++ b/nashorn/src/jdk/nashorn/internal/objects/NativeNumber.java @@ -90,10 +90,6 @@ public final class NativeNumber extends ScriptObject { // initialized by nasgen private static PropertyMap $nasgenmap$; - static PropertyMap getInitialMap() { - return $nasgenmap$; - } - private NativeNumber(final double value, final ScriptObject proto, final PropertyMap map) { super(proto, map); this.value = value; @@ -102,7 +98,7 @@ public final class NativeNumber extends ScriptObject { } NativeNumber(final double value, final Global global) { - this(value, global.getNumberPrototype(), getInitialMap()); + this(value, global.getNumberPrototype(), $nasgenmap$); } private NativeNumber(final double value) { diff --git a/nashorn/src/jdk/nashorn/internal/objects/NativeRangeError.java b/nashorn/src/jdk/nashorn/internal/objects/NativeRangeError.java index 6e0d954bc7c..4b2bebcfd2d 100644 --- a/nashorn/src/jdk/nashorn/internal/objects/NativeRangeError.java +++ b/nashorn/src/jdk/nashorn/internal/objects/NativeRangeError.java @@ -62,10 +62,6 @@ public final class NativeRangeError extends ScriptObject { // initialized by nasgen private static PropertyMap $nasgenmap$; - static PropertyMap getInitialMap() { - return $nasgenmap$; - } - @SuppressWarnings("LeakingThisInConstructor") private NativeRangeError(final Object msg, final ScriptObject proto, final PropertyMap map) { super(proto, map); @@ -78,7 +74,7 @@ public final class NativeRangeError extends ScriptObject { } NativeRangeError(final Object msg, final Global global) { - this(msg, global.getRangeErrorPrototype(), getInitialMap()); + this(msg, global.getRangeErrorPrototype(), $nasgenmap$); } private NativeRangeError(final Object msg) { diff --git a/nashorn/src/jdk/nashorn/internal/objects/NativeReferenceError.java b/nashorn/src/jdk/nashorn/internal/objects/NativeReferenceError.java index 052950c6d24..504f16ecd6c 100644 --- a/nashorn/src/jdk/nashorn/internal/objects/NativeReferenceError.java +++ b/nashorn/src/jdk/nashorn/internal/objects/NativeReferenceError.java @@ -62,10 +62,6 @@ public final class NativeReferenceError extends ScriptObject { // initialized by nasgen private static PropertyMap $nasgenmap$; - static PropertyMap getInitialMap() { - return $nasgenmap$; - } - @SuppressWarnings("LeakingThisInConstructor") private NativeReferenceError(final Object msg, final ScriptObject proto, final PropertyMap map) { super(proto, map); @@ -78,7 +74,7 @@ public final class NativeReferenceError extends ScriptObject { } NativeReferenceError(final Object msg, final Global global) { - this(msg, global.getReferenceErrorPrototype(), getInitialMap()); + this(msg, global.getReferenceErrorPrototype(), $nasgenmap$); } private NativeReferenceError(final Object msg) { diff --git a/nashorn/src/jdk/nashorn/internal/objects/NativeRegExp.java b/nashorn/src/jdk/nashorn/internal/objects/NativeRegExp.java index abc3366d353..04b828bfc21 100644 --- a/nashorn/src/jdk/nashorn/internal/objects/NativeRegExp.java +++ b/nashorn/src/jdk/nashorn/internal/objects/NativeRegExp.java @@ -70,12 +70,8 @@ public final class NativeRegExp extends ScriptObject { // initialized by nasgen private static PropertyMap $nasgenmap$; - static PropertyMap getInitialMap() { - return $nasgenmap$; - } - private NativeRegExp(final Global global) { - super(global.getRegExpPrototype(), getInitialMap()); + super(global.getRegExpPrototype(), $nasgenmap$); this.globalObject = global; } diff --git a/nashorn/src/jdk/nashorn/internal/objects/NativeRegExpExecResult.java b/nashorn/src/jdk/nashorn/internal/objects/NativeRegExpExecResult.java index 5d79699e2ae..f12cea12c13 100644 --- a/nashorn/src/jdk/nashorn/internal/objects/NativeRegExpExecResult.java +++ b/nashorn/src/jdk/nashorn/internal/objects/NativeRegExpExecResult.java @@ -53,12 +53,8 @@ public final class NativeRegExpExecResult extends ScriptObject { // initialized by nasgen private static PropertyMap $nasgenmap$; - static PropertyMap getInitialMap() { - return $nasgenmap$; - } - NativeRegExpExecResult(final RegExpResult result, final Global global) { - super(global.getArrayPrototype(), getInitialMap()); + super(global.getArrayPrototype(), $nasgenmap$); setIsArray(); this.setArray(ArrayData.allocate(result.getGroups().clone())); this.index = result.getIndex(); diff --git a/nashorn/src/jdk/nashorn/internal/objects/NativeString.java b/nashorn/src/jdk/nashorn/internal/objects/NativeString.java index 53ae9a23004..c75b2b00362 100644 --- a/nashorn/src/jdk/nashorn/internal/objects/NativeString.java +++ b/nashorn/src/jdk/nashorn/internal/objects/NativeString.java @@ -78,16 +78,12 @@ public final class NativeString extends ScriptObject { // initialized by nasgen private static PropertyMap $nasgenmap$; - static PropertyMap getInitialMap() { - return $nasgenmap$; - } - private NativeString(final CharSequence value) { this(value, Global.instance()); } NativeString(final CharSequence value, final Global global) { - this(value, global.getStringPrototype(), getInitialMap()); + this(value, global.getStringPrototype(), $nasgenmap$); } private NativeString(final CharSequence value, final ScriptObject proto, final PropertyMap map) { diff --git a/nashorn/src/jdk/nashorn/internal/objects/NativeSyntaxError.java b/nashorn/src/jdk/nashorn/internal/objects/NativeSyntaxError.java index ffe1b0a7432..6515f3cc2e6 100644 --- a/nashorn/src/jdk/nashorn/internal/objects/NativeSyntaxError.java +++ b/nashorn/src/jdk/nashorn/internal/objects/NativeSyntaxError.java @@ -62,13 +62,9 @@ public final class NativeSyntaxError extends ScriptObject { // initialized by nasgen private static PropertyMap $nasgenmap$; - static PropertyMap getInitialMap() { - return $nasgenmap$; - } - @SuppressWarnings("LeakingThisInConstructor") NativeSyntaxError(final Object msg, final Global global) { - super(global.getSyntaxErrorPrototype(), getInitialMap()); + super(global.getSyntaxErrorPrototype(), $nasgenmap$); if (msg != UNDEFINED) { this.instMessage = JSType.toString(msg); } else { diff --git a/nashorn/src/jdk/nashorn/internal/objects/NativeTypeError.java b/nashorn/src/jdk/nashorn/internal/objects/NativeTypeError.java index 067139cda3d..f799b1767d0 100644 --- a/nashorn/src/jdk/nashorn/internal/objects/NativeTypeError.java +++ b/nashorn/src/jdk/nashorn/internal/objects/NativeTypeError.java @@ -62,13 +62,9 @@ public final class NativeTypeError extends ScriptObject { // initialized by nasgen private static PropertyMap $nasgenmap$; - static PropertyMap getInitialMap() { - return $nasgenmap$; - } - @SuppressWarnings("LeakingThisInConstructor") NativeTypeError(final Object msg, final Global global) { - super(global.getTypeErrorPrototype(), getInitialMap()); + super(global.getTypeErrorPrototype(), $nasgenmap$); if (msg != UNDEFINED) { this.instMessage = JSType.toString(msg); } else { diff --git a/nashorn/src/jdk/nashorn/internal/objects/NativeURIError.java b/nashorn/src/jdk/nashorn/internal/objects/NativeURIError.java index 382e23f4b65..fd59bc8a209 100644 --- a/nashorn/src/jdk/nashorn/internal/objects/NativeURIError.java +++ b/nashorn/src/jdk/nashorn/internal/objects/NativeURIError.java @@ -61,13 +61,9 @@ public final class NativeURIError extends ScriptObject { // initialized by nasgen private static PropertyMap $nasgenmap$; - static PropertyMap getInitialMap() { - return $nasgenmap$; - } - @SuppressWarnings("LeakingThisInConstructor") NativeURIError(final Object msg, final Global global) { - super(global.getURIErrorPrototype(), getInitialMap()); + super(global.getURIErrorPrototype(), $nasgenmap$); if (msg != UNDEFINED) { this.instMessage = JSType.toString(msg); } else { diff --git a/nashorn/src/jdk/nashorn/internal/objects/PrototypeObject.java b/nashorn/src/jdk/nashorn/internal/objects/PrototypeObject.java index 1fd4f60d5a0..483f6174702 100644 --- a/nashorn/src/jdk/nashorn/internal/objects/PrototypeObject.java +++ b/nashorn/src/jdk/nashorn/internal/objects/PrototypeObject.java @@ -57,10 +57,6 @@ public class PrototypeObject extends ScriptObject { map$ = PropertyMap.newMap(properties); } - static PropertyMap getInitialMap() { - return map$; - } - private PrototypeObject(final Global global, final PropertyMap map) { super(global.getObjectPrototype(), map != map$? map.addAll(map$) : map$); } diff --git a/nashorn/src/jdk/nashorn/internal/objects/ScriptFunctionImpl.java b/nashorn/src/jdk/nashorn/internal/objects/ScriptFunctionImpl.java index fe18be990b3..dcbc7da99c8 100644 --- a/nashorn/src/jdk/nashorn/internal/objects/ScriptFunctionImpl.java +++ b/nashorn/src/jdk/nashorn/internal/objects/ScriptFunctionImpl.java @@ -55,27 +55,11 @@ public class ScriptFunctionImpl extends ScriptFunction { // property map for non-strict, non-bound functions. private static final PropertyMap map$; - static PropertyMap getInitialMap() { - return map$; - } - - static PropertyMap getInitialAnonymousMap() { - return AnonymousFunction.getInitialMap(); - } - - static PropertyMap getInitialStrictMap() { - return strictmodemap$; - } - - static PropertyMap getInitialBoundMap() { - return boundfunctionmap$; - } - // Marker object for lazily initialized prototype object private static final Object LAZY_PROTOTYPE = new Object(); private ScriptFunctionImpl(final String name, final MethodHandle invokeHandle, final MethodHandle[] specs, final Global global) { - super(name, invokeHandle, getInitialMap(), null, specs, ScriptFunctionData.IS_BUILTIN_CONSTRUCTOR); + super(name, invokeHandle, map$, null, specs, ScriptFunctionData.IS_BUILTIN_CONSTRUCTOR); init(global); } @@ -92,7 +76,7 @@ public class ScriptFunctionImpl extends ScriptFunction { } private ScriptFunctionImpl(final String name, final MethodHandle invokeHandle, final PropertyMap map, final MethodHandle[] specs, final Global global) { - super(name, invokeHandle, map.addAll(getInitialMap()), null, specs, ScriptFunctionData.IS_BUILTIN_CONSTRUCTOR); + super(name, invokeHandle, map.addAll(map$), null, specs, ScriptFunctionData.IS_BUILTIN_CONSTRUCTOR); init(global); } @@ -110,7 +94,7 @@ public class ScriptFunctionImpl extends ScriptFunction { } private ScriptFunctionImpl(final String name, final MethodHandle methodHandle, final ScriptObject scope, final MethodHandle[] specs, final int flags, final Global global) { - super(name, methodHandle, getMap(global, isStrict(flags)), scope, specs, flags); + super(name, methodHandle, getMap(isStrict(flags)), scope, specs, flags); init(global); } @@ -128,7 +112,7 @@ public class ScriptFunctionImpl extends ScriptFunction { } private ScriptFunctionImpl(final RecompilableScriptFunctionData data, final ScriptObject scope, final Global global) { - super(data, getMap(global, data.isStrict()), scope); + super(data, getMap(data.isStrict()), scope); init(global); } @@ -148,7 +132,7 @@ public class ScriptFunctionImpl extends ScriptFunction { * @param global the global object */ ScriptFunctionImpl(final ScriptFunctionData data, final Global global) { - super(data, getInitialBoundMap(), null); + super(data, boundfunctionmap$, null); init(global); } @@ -176,8 +160,8 @@ public class ScriptFunctionImpl extends ScriptFunction { } // Choose the map based on strict mode! - private static PropertyMap getMap(final Global global, final boolean strict) { - return strict ? getInitialStrictMap() : getInitialMap(); + private static PropertyMap getMap(final boolean strict) { + return strict ? strictmodemap$ : map$; } private static PropertyMap createBoundFunctionMap(final PropertyMap strictModeMap) { @@ -191,12 +175,8 @@ public class ScriptFunctionImpl extends ScriptFunction { private static class AnonymousFunction extends ScriptFunctionImpl { private static final PropertyMap anonmap$ = PropertyMap.newMap(); - static PropertyMap getInitialMap() { - return anonmap$; - } - AnonymousFunction(final Global global) { - super("", GlobalFunctions.ANONYMOUS, getInitialAnonymousMap(), null); + super("", GlobalFunctions.ANONYMOUS, anonmap$, null); } } diff --git a/nashorn/src/jdk/nashorn/internal/runtime/Context.java b/nashorn/src/jdk/nashorn/internal/runtime/Context.java index aaf9bbdd35d..f3ec08757d1 100644 --- a/nashorn/src/jdk/nashorn/internal/runtime/Context.java +++ b/nashorn/src/jdk/nashorn/internal/runtime/Context.java @@ -156,7 +156,7 @@ public final class Context { /** Is Context global debug mode enabled ? */ public static final boolean DEBUG = Options.getBooleanProperty("nashorn.debug"); - private static final ThreadLocal currentGlobal = new ThreadLocal<>(); + private static final ThreadLocal currentGlobal = new ThreadLocal<>(); // class cache private ClassCache classCache; @@ -165,10 +165,10 @@ public final class Context { * Get the current global scope * @return the current global scope */ - public static ScriptObject getGlobal() { + public static Global getGlobal() { // This class in a package.access protected package. // Trusted code only can call this method. - return getGlobalTrusted(); + return currentGlobal.get(); } /** @@ -177,10 +177,19 @@ public final class Context { */ public static void setGlobal(final ScriptObject global) { if (global != null && !(global instanceof Global)) { - throw new IllegalArgumentException("global is not an instance of Global!"); + throw new IllegalArgumentException("not a global!"); } + setGlobal((Global)global); + } - setGlobalTrusted(global); + /** + * Set the current global scope + * @param global the global scope + */ + public static void setGlobal(final Global global) { + // This class in a package.access protected package. + // Trusted code only can call this method. + currentGlobal.set(global); } /** @@ -201,7 +210,7 @@ public final class Context { * @return error writer of the current context */ public static PrintWriter getCurrentErr() { - final ScriptObject global = getGlobalTrusted(); + final ScriptObject global = getGlobal(); return (global != null)? global.getContext().getErr() : new PrintWriter(System.err); } @@ -406,7 +415,7 @@ public final class Context { * @return the property map of the current global scope */ public static PropertyMap getGlobalMap() { - return Context.getGlobalTrusted().getMap(); + return Context.getGlobal().getMap(); } /** @@ -436,7 +445,7 @@ public final class Context { final String file = (location == UNDEFINED || location == null) ? "" : location.toString(); final Source source = new Source(file, string); final boolean directEval = location != UNDEFINED; // is this direct 'eval' call or indirectly invoked eval? - final ScriptObject global = Context.getGlobalTrusted(); + final Global global = Context.getGlobal(); ScriptObject scope = initialScope; @@ -468,7 +477,7 @@ public final class Context { // in the caller's environment. A new environment is created! if (strictFlag) { // Create a new scope object - final ScriptObject strictEvalScope = ((GlobalObject)global).newObject(); + final ScriptObject strictEvalScope = global.newObject(); // bless it as a "scope" strictEvalScope.setIsScope(); @@ -593,10 +602,10 @@ public final class Context { * @throws IOException if source cannot be found or loaded */ public Object loadWithNewGlobal(final Object from, final Object...args) throws IOException { - final ScriptObject oldGlobal = getGlobalTrusted(); - final ScriptObject newGlobal = AccessController.doPrivileged(new PrivilegedAction() { + final Global oldGlobal = getGlobal(); + final Global newGlobal = AccessController.doPrivileged(new PrivilegedAction() { @Override - public ScriptObject run() { + public Global run() { try { return newGlobal(); } catch (final RuntimeException e) { @@ -609,17 +618,17 @@ public final class Context { }, CREATE_GLOBAL_ACC_CTXT); // initialize newly created Global instance initGlobal(newGlobal); - setGlobalTrusted(newGlobal); + setGlobal(newGlobal); final Object[] wrapped = args == null? ScriptRuntime.EMPTY_ARRAY : ScriptObjectMirror.wrapArray(args, oldGlobal); - newGlobal.put("arguments", ((GlobalObject)newGlobal).wrapAsObject(wrapped), env._strict); + newGlobal.put("arguments", newGlobal.wrapAsObject(wrapped), env._strict); try { // wrap objects from newGlobal's world as mirrors - but if result // is from oldGlobal's world, unwrap it! return ScriptObjectMirror.unwrap(ScriptObjectMirror.wrap(load(newGlobal, from), newGlobal), oldGlobal); } finally { - setGlobalTrusted(oldGlobal); + setGlobal(oldGlobal); } } @@ -794,7 +803,7 @@ public final class Context { * * @return the initialized global scope object. */ - public ScriptObject createGlobal() { + public Global createGlobal() { return initGlobal(newGlobal()); } @@ -802,7 +811,7 @@ public final class Context { * Create a new uninitialized global scope object * @return the global script object */ - public ScriptObject newGlobal() { + public Global newGlobal() { return new Global(this); } @@ -812,20 +821,16 @@ public final class Context { * @param global the global * @return the initialized global scope object. */ - public ScriptObject initGlobal(final ScriptObject global) { - if (! (global instanceof GlobalObject)) { - throw new IllegalArgumentException("not a global object!"); - } - + public Global initGlobal(final Global global) { // Need only minimal global object, if we are just compiling. if (!env._compile_only) { - final ScriptObject oldGlobal = Context.getGlobalTrusted(); + final Global oldGlobal = Context.getGlobal(); try { - Context.setGlobalTrusted(global); + Context.setGlobal(global); // initialize global scope with builtin global objects - ((GlobalObject)global).initBuiltinObjects(); + global.initBuiltinObjects(); } finally { - Context.setGlobalTrusted(oldGlobal); + Context.setGlobal(oldGlobal); } } @@ -833,30 +838,15 @@ public final class Context { } /** - * Trusted variants - package-private + * Trusted variant - package-private */ - /** - * Return the current global scope - * @return current global scope - */ - static ScriptObject getGlobalTrusted() { - return currentGlobal.get(); - } - - /** - * Set the current global scope - */ - static void setGlobalTrusted(ScriptObject global) { - currentGlobal.set(global); - } - /** * Return the current global's context * @return current global's context */ static Context getContextTrusted() { - return Context.getGlobalTrusted().getContext(); + return ((ScriptObject)Context.getGlobal()).getContext(); } /** @@ -925,7 +915,7 @@ public final class Context { } // Package as a JavaScript function and pass function back to shell. - return ((GlobalObject)Context.getGlobalTrusted()).newScriptFunction(RUN_SCRIPT.symbolName(), runMethodHandle, scope, strict); + return Context.getGlobal().newScriptFunction(RUN_SCRIPT.symbolName(), runMethodHandle, scope, strict); } private ScriptFunction compileScript(final Source source, final ScriptObject scope, final ErrorManager errMan) { diff --git a/nashorn/src/jdk/nashorn/internal/runtime/DebuggerSupport.java b/nashorn/src/jdk/nashorn/internal/runtime/DebuggerSupport.java index c288a963321..261bc0200aa 100644 --- a/nashorn/src/jdk/nashorn/internal/runtime/DebuggerSupport.java +++ b/nashorn/src/jdk/nashorn/internal/runtime/DebuggerSupport.java @@ -75,7 +75,7 @@ final class DebuggerSupport { * @return context global. */ static Object getGlobal() { - return Context.getGlobalTrusted(); + return Context.getGlobal(); } /** @@ -87,7 +87,7 @@ final class DebuggerSupport { * @return Result of eval as string, or, an exception or null depending on returnException. */ static Object eval(final ScriptObject scope, final Object self, final String string, final boolean returnException) { - final ScriptObject global = Context.getGlobalTrusted(); + final ScriptObject global = Context.getGlobal(); final ScriptObject initialScope = scope != null ? scope : global; final Object callThis = self != null ? self : global; final Context context = global.getContext(); diff --git a/nashorn/src/jdk/nashorn/internal/runtime/ECMAErrors.java b/nashorn/src/jdk/nashorn/internal/runtime/ECMAErrors.java index 754ebbf955f..affba497b18 100644 --- a/nashorn/src/jdk/nashorn/internal/runtime/ECMAErrors.java +++ b/nashorn/src/jdk/nashorn/internal/runtime/ECMAErrors.java @@ -31,6 +31,7 @@ import java.util.ResourceBundle; import jdk.nashorn.api.scripting.NashornException; import jdk.nashorn.internal.scripts.JS; import jdk.nashorn.internal.codegen.CompilerConstants; +import jdk.nashorn.internal.objects.Global; /** * Helper class to throw various standard "ECMA error" exceptions such as Error, ReferenceError, TypeError etc. @@ -66,7 +67,7 @@ public final class ECMAErrors { * @return the resulting {@link ECMAException} */ public static ECMAException asEcmaException(final ParserException e) { - return asEcmaException(Context.getGlobalTrusted(), e); + return asEcmaException(Context.getGlobal(), e); } /** @@ -78,11 +79,11 @@ public final class ECMAErrors { * * @return the resulting {@link ECMAException} */ - public static ECMAException asEcmaException(final ScriptObject global, final ParserException e) { + public static ECMAException asEcmaException(final Global global, final ParserException e) { final JSErrorType errorType = e.getErrorType(); assert errorType != null : "error type for " + e + " was null"; - final GlobalObject globalObj = (GlobalObject)global; + final Global globalObj = global; final String msg = e.getMessage(); // translate to ECMAScript Error object using error type @@ -116,7 +117,7 @@ public final class ECMAErrors { * @return the resulting {@link ECMAException} */ public static ECMAException syntaxError(final String msgId, final String... args) { - return syntaxError(Context.getGlobalTrusted(), msgId, args); + return syntaxError(Context.getGlobal(), msgId, args); } /** @@ -128,7 +129,7 @@ public final class ECMAErrors { * * @return the resulting {@link ECMAException} */ - public static ECMAException syntaxError(final ScriptObject global, final String msgId, final String... args) { + public static ECMAException syntaxError(final Global global, final String msgId, final String... args) { return syntaxError(global, null, msgId, args); } @@ -142,7 +143,7 @@ public final class ECMAErrors { * @return the resulting {@link ECMAException} */ public static ECMAException syntaxError(final Throwable cause, final String msgId, final String... args) { - return syntaxError(Context.getGlobalTrusted(), cause, msgId, args); + return syntaxError(Context.getGlobal(), cause, msgId, args); } /** @@ -155,9 +156,9 @@ public final class ECMAErrors { * * @return the resulting {@link ECMAException} */ - public static ECMAException syntaxError(final ScriptObject global, final Throwable cause, final String msgId, final String... args) { + public static ECMAException syntaxError(final Global global, final Throwable cause, final String msgId, final String... args) { final String msg = getMessage("syntax.error." + msgId, args); - return error(((GlobalObject)global).newSyntaxError(msg), cause); + return error(global.newSyntaxError(msg), cause); } /** @@ -169,7 +170,7 @@ public final class ECMAErrors { * @return the resulting {@link ECMAException} */ public static ECMAException typeError(final String msgId, final String... args) { - return typeError(Context.getGlobalTrusted(), msgId, args); + return typeError(Context.getGlobal(), msgId, args); } /** @@ -181,7 +182,7 @@ public final class ECMAErrors { * * @return the resulting {@link ECMAException} */ - public static ECMAException typeError(final ScriptObject global, final String msgId, final String... args) { + public static ECMAException typeError(final Global global, final String msgId, final String... args) { return typeError(global, null, msgId, args); } @@ -195,7 +196,7 @@ public final class ECMAErrors { * @return the resulting {@link ECMAException} */ public static ECMAException typeError(final Throwable cause, final String msgId, final String... args) { - return typeError(Context.getGlobalTrusted(), cause, msgId, args); + return typeError(Context.getGlobal(), cause, msgId, args); } /** @@ -208,9 +209,9 @@ public final class ECMAErrors { * * @return the resulting {@link ECMAException} */ - public static ECMAException typeError(final ScriptObject global, final Throwable cause, final String msgId, final String... args) { + public static ECMAException typeError(final Global global, final Throwable cause, final String msgId, final String... args) { final String msg = getMessage("type.error." + msgId, args); - return error(((GlobalObject)global).newTypeError(msg), cause); + return error(global.newTypeError(msg), cause); } /** @@ -222,7 +223,7 @@ public final class ECMAErrors { * @return the resulting {@link ECMAException} */ public static ECMAException rangeError(final String msgId, final String... args) { - return rangeError(Context.getGlobalTrusted(), msgId, args); + return rangeError(Context.getGlobal(), msgId, args); } /** @@ -234,7 +235,7 @@ public final class ECMAErrors { * * @return the resulting {@link ECMAException} */ - public static ECMAException rangeError(final ScriptObject global, final String msgId, final String... args) { + public static ECMAException rangeError(final Global global, final String msgId, final String... args) { return rangeError(global, null, msgId, args); } @@ -248,7 +249,7 @@ public final class ECMAErrors { * @return the resulting {@link ECMAException} */ public static ECMAException rangeError(final Throwable cause, final String msgId, final String... args) { - return rangeError(Context.getGlobalTrusted(), cause, msgId, args); + return rangeError(Context.getGlobal(), cause, msgId, args); } /** @@ -261,9 +262,9 @@ public final class ECMAErrors { * * @return the resulting {@link ECMAException} */ - public static ECMAException rangeError(final ScriptObject global, final Throwable cause, final String msgId, final String... args) { + public static ECMAException rangeError(final Global global, final Throwable cause, final String msgId, final String... args) { final String msg = getMessage("range.error." + msgId, args); - return error(((GlobalObject)global).newRangeError(msg), cause); + return error(global.newRangeError(msg), cause); } /** @@ -275,7 +276,7 @@ public final class ECMAErrors { * @return the resulting {@link ECMAException} */ public static ECMAException referenceError(final String msgId, final String... args) { - return referenceError(Context.getGlobalTrusted(), msgId, args); + return referenceError(Context.getGlobal(), msgId, args); } /** @@ -287,7 +288,7 @@ public final class ECMAErrors { * * @return the resulting {@link ECMAException} */ - public static ECMAException referenceError(final ScriptObject global, final String msgId, final String... args) { + public static ECMAException referenceError(final Global global, final String msgId, final String... args) { return referenceError(global, null, msgId, args); } @@ -301,7 +302,7 @@ public final class ECMAErrors { * @return the resulting {@link ECMAException} */ public static ECMAException referenceError(final Throwable cause, final String msgId, final String... args) { - return referenceError(Context.getGlobalTrusted(), cause, msgId, args); + return referenceError(Context.getGlobal(), cause, msgId, args); } /** @@ -314,9 +315,9 @@ public final class ECMAErrors { * * @return the resulting {@link ECMAException} */ - public static ECMAException referenceError(final ScriptObject global, final Throwable cause, final String msgId, final String... args) { + public static ECMAException referenceError(final Global global, final Throwable cause, final String msgId, final String... args) { final String msg = getMessage("reference.error." + msgId, args); - return error(((GlobalObject)global).newReferenceError(msg), cause); + return error(global.newReferenceError(msg), cause); } /** @@ -328,7 +329,7 @@ public final class ECMAErrors { * @return the resulting {@link ECMAException} */ public static ECMAException uriError(final String msgId, final String... args) { - return uriError(Context.getGlobalTrusted(), msgId, args); + return uriError(Context.getGlobal(), msgId, args); } /** @@ -340,7 +341,7 @@ public final class ECMAErrors { * * @return the resulting {@link ECMAException} */ - public static ECMAException uriError(final ScriptObject global, final String msgId, final String... args) { + public static ECMAException uriError(final Global global, final String msgId, final String... args) { return uriError(global, null, msgId, args); } @@ -354,7 +355,7 @@ public final class ECMAErrors { * @return the resulting {@link ECMAException} */ public static ECMAException uriError(final Throwable cause, final String msgId, final String... args) { - return uriError(Context.getGlobalTrusted(), cause, msgId, args); + return uriError(Context.getGlobal(), cause, msgId, args); } /** @@ -367,9 +368,9 @@ public final class ECMAErrors { * * @return the resulting {@link ECMAException} */ - public static ECMAException uriError(final ScriptObject global, final Throwable cause, final String msgId, final String... args) { + public static ECMAException uriError(final Global global, final Throwable cause, final String msgId, final String... args) { final String msg = getMessage("uri.error." + msgId, args); - return error(((GlobalObject)global).newURIError(msg), cause); + return error(global.newURIError(msg), cause); } /** diff --git a/nashorn/src/jdk/nashorn/internal/runtime/GlobalObject.java b/nashorn/src/jdk/nashorn/internal/runtime/GlobalObject.java deleted file mode 100644 index 20046388292..00000000000 --- a/nashorn/src/jdk/nashorn/internal/runtime/GlobalObject.java +++ /dev/null @@ -1,228 +0,0 @@ -/* - * Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -package jdk.nashorn.internal.runtime; - -import java.lang.invoke.MethodHandle; -import java.util.concurrent.Callable; -import jdk.internal.dynalink.linker.GuardedInvocation; -import jdk.internal.dynalink.linker.LinkRequest; -import jdk.nashorn.internal.runtime.linker.InvokeByName; - -/** - * Runtime interface to the global scope objects. - */ - -public interface GlobalObject { - /** - * Is this global of the given Context? - * @param ctxt the context - * @return true if this global belongs to the given Context - */ - public boolean isOfContext(final Context ctxt); - - /** - * Does this global belong to a strict Context? - * @return true if this global belongs to a strict Context - */ - public boolean isStrictContext(); - - /** - * Initialize standard builtin objects like "Object", "Array", "Function" etc. - * as well as our extension builtin objects like "Java", "JSAdapter" as properties - * of the global scope object. - */ - public void initBuiltinObjects(); - - /** - * Wrapper for {@link jdk.nashorn.internal.objects.Global#newScriptFunction(String, MethodHandle, ScriptObject, boolean)} - * - * @param name function name - * @param handle invocation handle for function - * @param scope the scope - * @param strict are we in strict mode - * - * @return new script function - */ - public ScriptFunction newScriptFunction(String name, MethodHandle handle, ScriptObject scope, boolean strict); - - /** - * Wrapper for {@link jdk.nashorn.internal.objects.Global#wrapAsObject(Object)} - * - * @param obj object to wrap - * @return wrapped object - */ - public Object wrapAsObject(Object obj); - - - /** - * Wrapper for {@link jdk.nashorn.internal.objects.Global#primitiveLookup(LinkRequest, Object)} - * - * @param request the link request for the dynamic call site. - * @param self self reference - * - * @return guarded invocation - */ - public GuardedInvocation primitiveLookup(LinkRequest request, Object self); - - - /** - * Wrapper for {@link jdk.nashorn.internal.objects.Global#newObject()} - * - * @return the new ScriptObject - */ - public ScriptObject newObject(); - - /** - * Wrapper for {@link jdk.nashorn.internal.objects.Global#isError(ScriptObject)} - * - * @param sobj to check if it is an error object - * @return true if error object - */ - public boolean isError(ScriptObject sobj); - - /** - * Wrapper for {@link jdk.nashorn.internal.objects.Global#newError(String)} - * - * @param msg the error message - * - * @return the new ScriptObject representing the error - */ - public ScriptObject newError(String msg); - - /** - * Wrapper for {@link jdk.nashorn.internal.objects.Global#newEvalError(String)} - * - * @param msg the error message - * - * @return the new ScriptObject representing the eval error - */ - public ScriptObject newEvalError(String msg); - - /** - * Wrapper for {@link jdk.nashorn.internal.objects.Global#newRangeError(String)} - * - * @param msg the error message - * - * @return the new ScriptObject representing the range error - */ - public ScriptObject newRangeError(String msg); - - /** - * Wrapper for {@link jdk.nashorn.internal.objects.Global#newReferenceError(String)} - * - * @param msg the error message - * - * @return the new ScriptObject representing the reference error - */ - public ScriptObject newReferenceError(String msg); - - /** - * Wrapper for {@link jdk.nashorn.internal.objects.Global#newSyntaxError(String)} - * - * @param msg the error message - * - * @return the new ScriptObject representing the syntax error - */ - public ScriptObject newSyntaxError(String msg); - - /** - * Wrapper for {@link jdk.nashorn.internal.objects.Global#newTypeError(String)} - * - * @param msg the error message - * - * @return the new ScriptObject representing the type error - */ - public ScriptObject newTypeError(String msg); - - /** - * Wrapper for {@link jdk.nashorn.internal.objects.Global#newURIError(String)} - * - * @param msg the error message - * - * @return the new ScriptObject representing the URI error - */ - public ScriptObject newURIError(String msg); - - /** - * Wrapper for {@link jdk.nashorn.internal.objects.Global#newGenericDescriptor(boolean, boolean)} - * - * @param configurable is the described property configurable - * @param enumerable is the described property enumerable - * - * @return property descriptor - */ - public PropertyDescriptor newGenericDescriptor(boolean configurable, boolean enumerable); - - /** - * Wrapper for {@link jdk.nashorn.internal.objects.Global#newDataDescriptor(Object, boolean, boolean, boolean)} - * - * @param value data value - * @param configurable is the described property configurable - * @param enumerable is the described property enumerable - * @param writable is the described property writable - * - * @return property descriptor - */ - public PropertyDescriptor newDataDescriptor(Object value, boolean configurable, boolean enumerable, boolean writable); - - /** - * Wrapper for {@link jdk.nashorn.internal.objects.Global#newAccessorDescriptor(Object, Object, boolean, boolean)} - * - * @param get property getter, or null if none - * @param set property setter, or null if none - * @param configurable is the described property configurable - * @param enumerable is the described property enumerable - * - * @return property descriptor - */ - public PropertyDescriptor newAccessorDescriptor(Object get, Object set, boolean configurable, boolean enumerable); - - /** - * Wrapper for {@link jdk.nashorn.internal.objects.Global#getDefaultValue(ScriptObject, Class)} - * - * @param sobj script object - * @param typeHint type hint - * - * @return default value - */ - public Object getDefaultValue(ScriptObject sobj, Class typeHint); - - /** - * Get cached InvokeByName object for the given key - * @param key key to be associated with InvokeByName object - * @param creator if InvokeByName is absent 'creator' is called to make one (lazy init) - * @return InvokeByName object associated with the key. - */ - public InvokeByName getInvokeByName(final Object key, final Callable creator); - - /** - * Get cached dynamic method handle for the given key - * @param key key to be associated with dynamic method handle - * @param creator if method handle is absent 'creator' is called to make one (lazy init) - * @return dynamic method handle associated with the key. - */ - public MethodHandle getDynamicInvoker(final Object key, final Callable creator); -} diff --git a/nashorn/src/jdk/nashorn/internal/runtime/JSONFunctions.java b/nashorn/src/jdk/nashorn/internal/runtime/JSONFunctions.java index 73552cb10df..64863184759 100644 --- a/nashorn/src/jdk/nashorn/internal/runtime/JSONFunctions.java +++ b/nashorn/src/jdk/nashorn/internal/runtime/JSONFunctions.java @@ -33,6 +33,7 @@ import jdk.nashorn.internal.ir.Node; import jdk.nashorn.internal.ir.ObjectNode; import jdk.nashorn.internal.ir.PropertyNode; import jdk.nashorn.internal.ir.UnaryNode; +import jdk.nashorn.internal.objects.Global; import jdk.nashorn.internal.parser.JSONParser; import jdk.nashorn.internal.parser.TokenType; import jdk.nashorn.internal.runtime.arrays.ArrayIndex; @@ -47,7 +48,7 @@ public final class JSONFunctions { private static final Object REVIVER_INVOKER = new Object(); private static MethodHandle getREVIVER_INVOKER() { - return ((GlobalObject)Context.getGlobal()).getDynamicInvoker(REVIVER_INVOKER, + return Context.getGlobal().getDynamicInvoker(REVIVER_INVOKER, new Callable() { @Override public MethodHandle call() { @@ -88,7 +89,7 @@ public final class JSONFunctions { throw ECMAErrors.syntaxError(e, "invalid.json", e.getMessage()); } - final ScriptObject global = Context.getGlobalTrusted(); + final Global global = Context.getGlobal(); Object unfiltered = convertNode(global, node); return applyReviver(global, unfiltered, reviver); } @@ -98,10 +99,10 @@ public final class JSONFunctions { // parse helpers // apply 'reviver' function if available - private static Object applyReviver(final ScriptObject global, final Object unfiltered, final Object reviver) { + private static Object applyReviver(final Global global, final Object unfiltered, final Object reviver) { if (reviver instanceof ScriptFunction) { - assert global instanceof GlobalObject; - final ScriptObject root = ((GlobalObject)global).newObject(); + assert global instanceof Global; + final ScriptObject root = global.newObject(); root.addOwnProperty("", Property.WRITABLE_ENUMERABLE_CONFIGURABLE, unfiltered); return walk(root, "", (ScriptFunction)reviver); } @@ -138,8 +139,8 @@ public final class JSONFunctions { } // Converts IR node to runtime value - private static Object convertNode(final ScriptObject global, final Node node) { - assert global instanceof GlobalObject; + private static Object convertNode(final Global global, final Node node) { + assert global instanceof Global; if (node instanceof LiteralNode) { // check for array literal @@ -157,7 +158,7 @@ public final class JSONFunctions { for (final Node elem : elements) { values[index++] = JSType.toNumber(convertNode(global, elem)); } - return ((GlobalObject)global).wrapAsObject(values); + return global.wrapAsObject(values); } final Object[] values = new Object[elements.length]; @@ -167,14 +168,14 @@ public final class JSONFunctions { values[index++] = convertNode(global, elem); } - return ((GlobalObject)global).wrapAsObject(values); + return global.wrapAsObject(values); } return ((LiteralNode)node).getValue(); } else if (node instanceof ObjectNode) { final ObjectNode objNode = (ObjectNode) node; - final ScriptObject object = ((GlobalObject)global).newObject(); + final ScriptObject object = global.newObject(); for (final PropertyNode pNode: objNode.getElements()) { final Node valueNode = pNode.getValue(); diff --git a/nashorn/src/jdk/nashorn/internal/runtime/JSType.java b/nashorn/src/jdk/nashorn/internal/runtime/JSType.java index 541301960c9..c49de9cf4e6 100644 --- a/nashorn/src/jdk/nashorn/internal/runtime/JSType.java +++ b/nashorn/src/jdk/nashorn/internal/runtime/JSType.java @@ -36,6 +36,7 @@ import java.util.List; import jdk.internal.dynalink.beans.StaticClass; import jdk.nashorn.api.scripting.JSObject; import jdk.nashorn.internal.codegen.CompilerConstants.Call; +import jdk.nashorn.internal.objects.Global; import jdk.nashorn.internal.parser.Lexer; import jdk.nashorn.internal.runtime.arrays.ArrayLikeIterator; import jdk.nashorn.internal.runtime.linker.Bootstrap; @@ -852,7 +853,7 @@ public enum JSType { * @return the wrapped object */ public static Object toScriptObject(final Object obj) { - return toScriptObject(Context.getGlobalTrusted(), obj); + return toScriptObject(Context.getGlobal(), obj); } /** @@ -865,7 +866,7 @@ public enum JSType { * * @return the wrapped object */ - public static Object toScriptObject(final ScriptObject global, final Object obj) { + public static Object toScriptObject(final Global global, final Object obj) { if (nullOrUndefined(obj)) { throw typeError(global, "not.an.object", ScriptRuntime.safeToString(obj)); } @@ -874,7 +875,7 @@ public enum JSType { return obj; } - return ((GlobalObject)global).wrapAsObject(obj); + return global.wrapAsObject(obj); } /** @@ -984,7 +985,7 @@ public enum JSType { if (obj instanceof ScriptObject) { if (safe) { final ScriptObject sobj = (ScriptObject)obj; - final GlobalObject gobj = (GlobalObject)Context.getGlobalTrusted(); + final Global gobj = Context.getGlobal(); return gobj.isError(sobj) ? ECMAException.safeToString(sobj) : sobj.safeToString(); diff --git a/nashorn/src/jdk/nashorn/internal/runtime/ListAdapter.java b/nashorn/src/jdk/nashorn/internal/runtime/ListAdapter.java index 26c22c390b9..9a3408fbbd6 100644 --- a/nashorn/src/jdk/nashorn/internal/runtime/ListAdapter.java +++ b/nashorn/src/jdk/nashorn/internal/runtime/ListAdapter.java @@ -34,6 +34,7 @@ import java.util.RandomAccess; import java.util.concurrent.Callable; import jdk.nashorn.api.scripting.JSObject; import jdk.nashorn.api.scripting.ScriptObjectMirror; +import jdk.nashorn.internal.objects.Global; import jdk.nashorn.internal.runtime.linker.Bootstrap; import jdk.nashorn.internal.runtime.linker.InvokeByName; @@ -54,7 +55,7 @@ public abstract class ListAdapter extends AbstractList implements Random // These add to the back and front of the list private static final Object PUSH = new Object(); private static InvokeByName getPUSH() { - return ((GlobalObject)Context.getGlobal()).getInvokeByName(PUSH, + return Context.getGlobal().getInvokeByName(PUSH, new Callable() { @Override public InvokeByName call() { @@ -65,7 +66,7 @@ public abstract class ListAdapter extends AbstractList implements Random private static final Object UNSHIFT = new Object(); private static InvokeByName getUNSHIFT() { - return ((GlobalObject)Context.getGlobal()).getInvokeByName(UNSHIFT, + return Context.getGlobal().getInvokeByName(UNSHIFT, new Callable() { @Override public InvokeByName call() { @@ -77,7 +78,7 @@ public abstract class ListAdapter extends AbstractList implements Random // These remove from the back and front of the list private static final Object POP = new Object(); private static InvokeByName getPOP() { - return ((GlobalObject)Context.getGlobal()).getInvokeByName(POP, + return Context.getGlobal().getInvokeByName(POP, new Callable() { @Override public InvokeByName call() { @@ -88,7 +89,7 @@ public abstract class ListAdapter extends AbstractList implements Random private static final Object SHIFT = new Object(); private static InvokeByName getSHIFT() { - return ((GlobalObject)Context.getGlobal()).getInvokeByName(SHIFT, + return Context.getGlobal().getInvokeByName(SHIFT, new Callable() { @Override public InvokeByName call() { @@ -100,7 +101,7 @@ public abstract class ListAdapter extends AbstractList implements Random // These insert and remove in the middle of the list private static final Object SPLICE_ADD = new Object(); private static InvokeByName getSPLICE_ADD() { - return ((GlobalObject)Context.getGlobal()).getInvokeByName(SPLICE_ADD, + return Context.getGlobal().getInvokeByName(SPLICE_ADD, new Callable() { @Override public InvokeByName call() { @@ -111,7 +112,7 @@ public abstract class ListAdapter extends AbstractList implements Random private static final Object SPLICE_REMOVE = new Object(); private static InvokeByName getSPLICE_REMOVE() { - return ((GlobalObject)Context.getGlobal()).getInvokeByName(SPLICE_REMOVE, + return Context.getGlobal().getInvokeByName(SPLICE_REMOVE, new Callable() { @Override public InvokeByName call() { diff --git a/nashorn/src/jdk/nashorn/internal/runtime/NativeJavaPackage.java b/nashorn/src/jdk/nashorn/internal/runtime/NativeJavaPackage.java index 591fd327c64..fbca1c340bd 100644 --- a/nashorn/src/jdk/nashorn/internal/runtime/NativeJavaPackage.java +++ b/nashorn/src/jdk/nashorn/internal/runtime/NativeJavaPackage.java @@ -35,7 +35,6 @@ import jdk.internal.dynalink.linker.LinkRequest; import jdk.internal.dynalink.support.Guards; import jdk.nashorn.internal.lookup.MethodHandleFactory; import jdk.nashorn.internal.lookup.MethodHandleFunctionality; -import jdk.nashorn.internal.objects.NativeJava; import jdk.nashorn.internal.objects.annotations.Attribute; import jdk.nashorn.internal.objects.annotations.Function; @@ -52,7 +51,7 @@ import jdk.nashorn.internal.objects.annotations.Function; * var ArrayList = java.util.ArrayList * var list = new ArrayList * - * You can also use {@link NativeJava#type(Object, Object)} to access Java classes. These two statements are mostly + * You can also use {@link jdk.nashorn.internal.objects.NativeJava#type(Object, Object)} to access Java classes. These two statements are mostly * equivalent: *
        * var listType1 = java.util.ArrayList
      diff --git a/nashorn/src/jdk/nashorn/internal/runtime/ParserException.java b/nashorn/src/jdk/nashorn/internal/runtime/ParserException.java
      index 2424bc3f1be..5137d596ee7 100644
      --- a/nashorn/src/jdk/nashorn/internal/runtime/ParserException.java
      +++ b/nashorn/src/jdk/nashorn/internal/runtime/ParserException.java
      @@ -26,6 +26,7 @@
       package jdk.nashorn.internal.runtime;
       
       import jdk.nashorn.api.scripting.NashornException;
      +import jdk.nashorn.internal.objects.Global;
       import jdk.nashorn.internal.parser.Token;
       
       /**
      @@ -110,7 +111,7 @@ public final class ParserException extends NashornException {
            * Throw this {@code ParserException} as one of the 7 native JavaScript errors
            * @param global global scope object
            */
      -    public void throwAsEcmaException(final ScriptObject global) {
      +    public void throwAsEcmaException(final Global global) {
               throw ECMAErrors.asEcmaException(global, this);
           }
       }
      diff --git a/nashorn/src/jdk/nashorn/internal/runtime/ScriptFunction.java b/nashorn/src/jdk/nashorn/internal/runtime/ScriptFunction.java
      index d0c6989b14a..3d8b4ff288b 100644
      --- a/nashorn/src/jdk/nashorn/internal/runtime/ScriptFunction.java
      +++ b/nashorn/src/jdk/nashorn/internal/runtime/ScriptFunction.java
      @@ -38,6 +38,7 @@ import jdk.internal.dynalink.linker.GuardedInvocation;
       import jdk.internal.dynalink.linker.LinkRequest;
       import jdk.nashorn.internal.codegen.CompilerConstants.Call;
       import jdk.nashorn.internal.lookup.MethodHandleFactory;
      +import jdk.nashorn.internal.objects.Global;
       import jdk.nashorn.internal.runtime.linker.NashornCallSiteDescriptor;
       import jdk.nashorn.internal.runtime.linker.NashornGuards;
       
      @@ -475,14 +476,14 @@ public abstract class ScriptFunction extends ScriptObject {
               if (obj instanceof ScriptObject || !ScriptFunctionData.isPrimitiveThis(obj)) {
                   return obj;
               }
      -        return ((GlobalObject)Context.getGlobalTrusted()).wrapAsObject(obj);
      +        return Context.getGlobal().wrapAsObject(obj);
           }
       
       
           @SuppressWarnings("unused")
           private static Object globalFilter(final Object object) {
               // replace whatever we get with the current global object
      -        return Context.getGlobalTrusted();
      +        return Context.getGlobal();
           }
       
           /**
      diff --git a/nashorn/src/jdk/nashorn/internal/runtime/ScriptFunctionData.java b/nashorn/src/jdk/nashorn/internal/runtime/ScriptFunctionData.java
      index de39449b81b..aee367d65ba 100644
      --- a/nashorn/src/jdk/nashorn/internal/runtime/ScriptFunctionData.java
      +++ b/nashorn/src/jdk/nashorn/internal/runtime/ScriptFunctionData.java
      @@ -32,6 +32,7 @@ import static jdk.nashorn.internal.runtime.ScriptRuntime.UNDEFINED;
       import java.lang.invoke.MethodHandle;
       import java.lang.invoke.MethodHandles;
       import java.lang.invoke.MethodType;
      +import jdk.nashorn.internal.objects.Global;
       import jdk.nashorn.internal.runtime.linker.JavaAdapterFactory;
       
       /**
      @@ -372,11 +373,11 @@ public abstract class ScriptFunctionData {
           private Object convertThisObject(final Object thiz) {
               if (!(thiz instanceof ScriptObject) && needsWrappedThis()) {
                   if (JSType.nullOrUndefined(thiz)) {
      -                return Context.getGlobalTrusted();
      +                return Context.getGlobal();
                   }
       
                   if (isPrimitiveThis(thiz)) {
      -                return ((GlobalObject)Context.getGlobalTrusted()).wrapAsObject(thiz);
      +                return Context.getGlobal().wrapAsObject(thiz);
                   }
               }
       
      diff --git a/nashorn/src/jdk/nashorn/internal/runtime/ScriptObject.java b/nashorn/src/jdk/nashorn/internal/runtime/ScriptObject.java
      index 4696bdeacad..05e236e3bd6 100644
      --- a/nashorn/src/jdk/nashorn/internal/runtime/ScriptObject.java
      +++ b/nashorn/src/jdk/nashorn/internal/runtime/ScriptObject.java
      @@ -325,18 +325,18 @@ public abstract class ScriptObject implements PropertyAccess {
             * @return property descriptor
             */
           public final PropertyDescriptor toPropertyDescriptor() {
      -        final GlobalObject global = (GlobalObject) Context.getGlobalTrusted();
      +        final Global global = Context.getGlobal();
       
               final PropertyDescriptor desc;
               if (isDataDescriptor()) {
                   if (has(SET) || has(GET)) {
      -                throw typeError((ScriptObject)global, "inconsistent.property.descriptor");
      +                throw typeError(global, "inconsistent.property.descriptor");
                   }
       
                   desc = global.newDataDescriptor(UNDEFINED, false, false, false);
               } else if (isAccessorDescriptor()) {
                   if (has(VALUE) || has(WRITABLE)) {
      -                throw typeError((ScriptObject)global, "inconsistent.property.descriptor");
      +                throw typeError(global, "inconsistent.property.descriptor");
                   }
       
                   desc = global.newAccessorDescriptor(UNDEFINED, UNDEFINED, false, false);
      @@ -355,7 +355,7 @@ public abstract class ScriptObject implements PropertyAccess {
            *
            * @return property descriptor
            */
      -    public static PropertyDescriptor toPropertyDescriptor(final ScriptObject global, final Object obj) {
      +    public static PropertyDescriptor toPropertyDescriptor(final Global global, final Object obj) {
               if (obj instanceof ScriptObject) {
                   return ((ScriptObject)obj).toPropertyDescriptor();
               }
      @@ -374,7 +374,7 @@ public abstract class ScriptObject implements PropertyAccess {
           public Object getOwnPropertyDescriptor(final String key) {
               final Property property = getMap().findProperty(key);
       
      -        final GlobalObject global = (GlobalObject)Context.getGlobalTrusted();
      +        final Global global = Context.getGlobal();
       
               if (property != null) {
                   final ScriptFunction get   = property.getGetterFunction(this);
      @@ -439,7 +439,7 @@ public abstract class ScriptObject implements PropertyAccess {
            * @return true if property was successfully defined
            */
           public boolean defineOwnProperty(final String key, final Object propertyDesc, final boolean reject) {
      -        final ScriptObject       global  = Context.getGlobalTrusted();
      +        final Global             global  = Context.getGlobal();
               final PropertyDescriptor desc    = toPropertyDescriptor(global, propertyDesc);
               final Object             current = getOwnPropertyDescriptor(key);
               final String             name    = JSType.toString(key);
      @@ -637,7 +637,7 @@ public abstract class ScriptObject implements PropertyAccess {
               final int propFlags = Property.toFlags(pdesc);
       
               if (pdesc.type() == PropertyDescriptor.GENERIC) {
      -            final GlobalObject global = (GlobalObject) Context.getGlobalTrusted();
      +            final Global global = Context.getGlobal();
                   final PropertyDescriptor dDesc = global.newDataDescriptor(UNDEFINED, false, false, false);
       
                   dDesc.fillFrom((ScriptObject)pdesc);
      @@ -1150,7 +1150,7 @@ public abstract class ScriptObject implements PropertyAccess {
                   }
                   setProto((ScriptObject)newProto);
               } else {
      -            final ScriptObject global = Context.getGlobalTrusted();
      +            final Global global = Context.getGlobal();
                   final Object  newProtoObject = JSType.toScriptObject(global, newProto);
       
                   if (newProtoObject instanceof ScriptObject) {
      @@ -1240,11 +1240,11 @@ public abstract class ScriptObject implements PropertyAccess {
            * @return the default value
            */
           public Object getDefaultValue(final Class typeHint) {
      -        // We delegate to GlobalObject, as the implementation uses dynamic call sites to invoke object's "toString" and
      +        // We delegate to Global, as the implementation uses dynamic call sites to invoke object's "toString" and
               // "valueOf" methods, and in order to avoid those call sites from becoming megamorphic when multiple contexts
               // are being executed in a long-running program, we move the code and their associated dynamic call sites
               // (Global.TO_STRING and Global.VALUE_OF) into per-context code.
      -        return ((GlobalObject)Context.getGlobalTrusted()).getDefaultValue(this, typeHint);
      +        return Context.getGlobal().getDefaultValue(this, typeHint);
           }
       
           /**
      diff --git a/nashorn/src/jdk/nashorn/internal/runtime/ScriptRuntime.java b/nashorn/src/jdk/nashorn/internal/runtime/ScriptRuntime.java
      index d9705676111..6df047d85a5 100644
      --- a/nashorn/src/jdk/nashorn/internal/runtime/ScriptRuntime.java
      +++ b/nashorn/src/jdk/nashorn/internal/runtime/ScriptRuntime.java
      @@ -474,7 +474,7 @@ public final class ScriptRuntime {
            * @return {@link WithObject} that is the new scope
            */
           public static ScriptObject openWith(final ScriptObject scope, final Object expression) {
      -        final ScriptObject global = Context.getGlobalTrusted();
      +        final Global global = Context.getGlobal();
               if (expression == UNDEFINED) {
                   throw typeError(global, "cant.apply.with.to.undefined");
               } else if (expression == null) {
      diff --git a/nashorn/src/jdk/nashorn/internal/runtime/SetMethodCreator.java b/nashorn/src/jdk/nashorn/internal/runtime/SetMethodCreator.java
      index 2c01b6d3617..edee3748b7a 100644
      --- a/nashorn/src/jdk/nashorn/internal/runtime/SetMethodCreator.java
      +++ b/nashorn/src/jdk/nashorn/internal/runtime/SetMethodCreator.java
      @@ -148,7 +148,7 @@ final class SetMethodCreator {
           }
       
           private SetMethod createGlobalPropertySetter() {
      -        final ScriptObject global = Context.getGlobalTrusted();
      +        final ScriptObject global = Context.getGlobal();
               return new SetMethod(MH.filterArguments(global.addSpill(getName()), 0, ScriptObject.GLOBALFILTER), null);
           }
       
      diff --git a/nashorn/src/jdk/nashorn/internal/runtime/UserAccessorProperty.java b/nashorn/src/jdk/nashorn/internal/runtime/UserAccessorProperty.java
      index 931d712b9aa..a69de45ca3d 100644
      --- a/nashorn/src/jdk/nashorn/internal/runtime/UserAccessorProperty.java
      +++ b/nashorn/src/jdk/nashorn/internal/runtime/UserAccessorProperty.java
      @@ -34,6 +34,7 @@ import jdk.nashorn.internal.lookup.Lookup;
       import jdk.nashorn.internal.runtime.linker.Bootstrap;
       
       import static jdk.nashorn.internal.codegen.CompilerConstants.staticCall;
      +import jdk.nashorn.internal.objects.Global;
       import static jdk.nashorn.internal.runtime.ECMAErrors.typeError;
       import static jdk.nashorn.internal.runtime.ScriptRuntime.UNDEFINED;
       
      @@ -73,7 +74,7 @@ public final class UserAccessorProperty extends Property {
       
           private static MethodHandle getINVOKE_UA_GETTER() {
       
      -        return ((GlobalObject)Context.getGlobal()).getDynamicInvoker(INVOKE_UA_GETTER,
      +        return Context.getGlobal().getDynamicInvoker(INVOKE_UA_GETTER,
                       new Callable() {
                           @Override
                           public MethodHandle call() {
      @@ -86,7 +87,7 @@ public final class UserAccessorProperty extends Property {
           /** Dynamic invoker for setter */
           private static Object INVOKE_UA_SETTER = new Object();
           private static MethodHandle getINVOKE_UA_SETTER() {
      -        return ((GlobalObject)Context.getGlobal()).getDynamicInvoker(INVOKE_UA_SETTER,
      +        return Context.getGlobal().getDynamicInvoker(INVOKE_UA_SETTER,
                       new Callable() {
                           @Override
                           public MethodHandle call() {
      diff --git a/nashorn/src/jdk/nashorn/internal/runtime/arrays/ArrayData.java b/nashorn/src/jdk/nashorn/internal/runtime/arrays/ArrayData.java
      index 0aa1d9ebfcc..58f329682e0 100644
      --- a/nashorn/src/jdk/nashorn/internal/runtime/arrays/ArrayData.java
      +++ b/nashorn/src/jdk/nashorn/internal/runtime/arrays/ArrayData.java
      @@ -27,7 +27,7 @@ package jdk.nashorn.internal.runtime.arrays;
       
       import java.lang.invoke.MethodHandle;
       import java.nio.ByteBuffer;
      -import jdk.nashorn.internal.runtime.GlobalObject;
      +import jdk.nashorn.internal.objects.Global;
       import jdk.nashorn.internal.runtime.JSType;
       import jdk.nashorn.internal.runtime.PropertyDescriptor;
       
      @@ -399,7 +399,7 @@ public abstract class ArrayData {
            *
            * @return property descriptor for element
            */
      -    public PropertyDescriptor getDescriptor(final GlobalObject global, final int index) {
      +    public PropertyDescriptor getDescriptor(final Global global, final int index) {
               return global.newDataDescriptor(getObject(index), true, true, true);
           }
       
      diff --git a/nashorn/src/jdk/nashorn/internal/runtime/arrays/ByteBufferArrayData.java b/nashorn/src/jdk/nashorn/internal/runtime/arrays/ByteBufferArrayData.java
      index 58ea1318f53..33c8679f7f7 100644
      --- a/nashorn/src/jdk/nashorn/internal/runtime/arrays/ByteBufferArrayData.java
      +++ b/nashorn/src/jdk/nashorn/internal/runtime/arrays/ByteBufferArrayData.java
      @@ -27,7 +27,7 @@ package jdk.nashorn.internal.runtime.arrays;
       import static jdk.nashorn.internal.runtime.ECMAErrors.typeError;
       
       import java.nio.ByteBuffer;
      -import jdk.nashorn.internal.runtime.GlobalObject;
      +import jdk.nashorn.internal.objects.Global;
       import jdk.nashorn.internal.runtime.PropertyDescriptor;
       import jdk.nashorn.internal.runtime.ScriptRuntime;
       
      @@ -60,7 +60,8 @@ final class ByteBufferArrayData extends ArrayData {
            *
            * @return property descriptor for element
            */
      -    public PropertyDescriptor getDescriptor(final GlobalObject global, final int index) {
      +    @Override
      +    public PropertyDescriptor getDescriptor(final Global global, final int index) {
               // make the index properties not configurable
               return global.newDataDescriptor(getObject(index), false, true, true);
           }
      diff --git a/nashorn/src/jdk/nashorn/internal/runtime/arrays/FrozenArrayFilter.java b/nashorn/src/jdk/nashorn/internal/runtime/arrays/FrozenArrayFilter.java
      index a1f772b8bae..e15541db95f 100644
      --- a/nashorn/src/jdk/nashorn/internal/runtime/arrays/FrozenArrayFilter.java
      +++ b/nashorn/src/jdk/nashorn/internal/runtime/arrays/FrozenArrayFilter.java
      @@ -25,9 +25,9 @@
       
       package jdk.nashorn.internal.runtime.arrays;
       
      +import jdk.nashorn.internal.objects.Global;
       import static jdk.nashorn.internal.runtime.ECMAErrors.typeError;
       
      -import jdk.nashorn.internal.runtime.GlobalObject;
       import jdk.nashorn.internal.runtime.PropertyDescriptor;
       
       /**
      @@ -44,7 +44,7 @@ final class FrozenArrayFilter extends SealedArrayFilter {
           }
       
           @Override
      -    public PropertyDescriptor getDescriptor(final GlobalObject global, final int index) {
      +    public PropertyDescriptor getDescriptor(final Global global, final int index) {
               return global.newDataDescriptor(getObject(index), false, true, false);
           }
       
      diff --git a/nashorn/src/jdk/nashorn/internal/runtime/arrays/SealedArrayFilter.java b/nashorn/src/jdk/nashorn/internal/runtime/arrays/SealedArrayFilter.java
      index 6f77ddc02e6..bc6de9f04ac 100644
      --- a/nashorn/src/jdk/nashorn/internal/runtime/arrays/SealedArrayFilter.java
      +++ b/nashorn/src/jdk/nashorn/internal/runtime/arrays/SealedArrayFilter.java
      @@ -25,9 +25,9 @@
       
       package jdk.nashorn.internal.runtime.arrays;
       
      +import jdk.nashorn.internal.objects.Global;
       import static jdk.nashorn.internal.runtime.ECMAErrors.typeError;
       
      -import jdk.nashorn.internal.runtime.GlobalObject;
       import jdk.nashorn.internal.runtime.PropertyDescriptor;
       
       /**
      @@ -62,7 +62,7 @@ class SealedArrayFilter extends ArrayFilter {
           }
       
           @Override
      -    public PropertyDescriptor getDescriptor(final GlobalObject global, final int index) {
      +    public PropertyDescriptor getDescriptor(final Global global, final int index) {
               return global.newDataDescriptor(getObject(index), false, true, true);
           }
       }
      diff --git a/nashorn/src/jdk/nashorn/internal/runtime/linker/JavaAdapterBytecodeGenerator.java b/nashorn/src/jdk/nashorn/internal/runtime/linker/JavaAdapterBytecodeGenerator.java
      index 5aceb206331..4951dad6cf1 100644
      --- a/nashorn/src/jdk/nashorn/internal/runtime/linker/JavaAdapterBytecodeGenerator.java
      +++ b/nashorn/src/jdk/nashorn/internal/runtime/linker/JavaAdapterBytecodeGenerator.java
      @@ -64,6 +64,7 @@ import jdk.internal.org.objectweb.asm.Label;
       import jdk.internal.org.objectweb.asm.Opcodes;
       import jdk.internal.org.objectweb.asm.Type;
       import jdk.internal.org.objectweb.asm.commons.InstructionAdapter;
      +import jdk.nashorn.internal.objects.Global;
       import jdk.nashorn.internal.runtime.Context;
       import jdk.nashorn.internal.runtime.ScriptFunction;
       import jdk.nashorn.internal.runtime.ScriptObject;
      @@ -134,6 +135,7 @@ final class JavaAdapterBytecodeGenerator {
           static final Type CONTEXT_TYPE       = Type.getType(Context.class);
           static final Type OBJECT_TYPE        = Type.getType(Object.class);
           static final Type SCRIPT_OBJECT_TYPE = Type.getType(ScriptObject.class);
      +    static final Type GLOBAL_TYPE        = Type.getType(Global.class);
       
           static final String CONTEXT_TYPE_NAME = CONTEXT_TYPE.getInternalName();
           static final String OBJECT_TYPE_NAME  = OBJECT_TYPE.getInternalName();
      @@ -143,8 +145,10 @@ final class JavaAdapterBytecodeGenerator {
           static final String GLOBAL_FIELD_NAME = "global";
       
           static final String SCRIPT_OBJECT_TYPE_DESCRIPTOR = SCRIPT_OBJECT_TYPE.getDescriptor();
      +    static final String GLOBAL_TYPE_DESCRIPTOR = GLOBAL_TYPE.getDescriptor();
       
      -    static final String SET_GLOBAL_METHOD_DESCRIPTOR = Type.getMethodDescriptor(Type.VOID_TYPE, SCRIPT_OBJECT_TYPE);
      +
      +    static final String SET_GLOBAL_METHOD_DESCRIPTOR = Type.getMethodDescriptor(Type.VOID_TYPE, GLOBAL_TYPE);
           static final String VOID_NOARG_METHOD_DESCRIPTOR = Type.getMethodDescriptor(Type.VOID_TYPE);
       
           private static final Type SCRIPT_FUNCTION_TYPE = Type.getType(ScriptFunction.class);
      @@ -167,7 +171,7 @@ final class JavaAdapterBytecodeGenerator {
           private static final String UNSUPPORTED_OPERATION_TYPE_NAME = UNSUPPORTED_OPERATION_TYPE.getInternalName();
       
           private static final String METHOD_HANDLE_TYPE_DESCRIPTOR = METHOD_HANDLE_TYPE.getDescriptor();
      -    private static final String GET_GLOBAL_METHOD_DESCRIPTOR = Type.getMethodDescriptor(SCRIPT_OBJECT_TYPE);
      +    private static final String GET_GLOBAL_METHOD_DESCRIPTOR = Type.getMethodDescriptor(GLOBAL_TYPE);
           private static final String GET_CLASS_METHOD_DESCRIPTOR = Type.getMethodDescriptor(Type.getType(Class.class));
       
           // Package used when the adapter can't be defined in the adaptee's package (either because it's sealed, or because
      @@ -259,7 +263,7 @@ final class JavaAdapterBytecodeGenerator {
           }
       
           private void generateGlobalFields() {
      -        cw.visitField(ACC_PRIVATE | ACC_FINAL | (classOverride ? ACC_STATIC : 0), GLOBAL_FIELD_NAME, SCRIPT_OBJECT_TYPE_DESCRIPTOR, null, null).visitEnd();
      +        cw.visitField(ACC_PRIVATE | ACC_FINAL | (classOverride ? ACC_STATIC : 0), GLOBAL_FIELD_NAME, GLOBAL_TYPE_DESCRIPTOR, null, null).visitEnd();
               usedFieldNames.add(GLOBAL_FIELD_NAME);
           }
       
      @@ -363,7 +367,7 @@ final class JavaAdapterBytecodeGenerator {
               }
               // Assign "global = Context.getGlobal()"
               invokeGetGlobalWithNullCheck(mv);
      -        mv.putstatic(generatedClassName, GLOBAL_FIELD_NAME, SCRIPT_OBJECT_TYPE_DESCRIPTOR);
      +        mv.putstatic(generatedClassName, GLOBAL_FIELD_NAME, GLOBAL_TYPE_DESCRIPTOR);
       
               endInitMethod(mv);
           }
      @@ -508,7 +512,7 @@ final class JavaAdapterBytecodeGenerator {
               // Assign "this.global = Context.getGlobal()"
               mv.visitVarInsn(ALOAD, 0);
               invokeGetGlobalWithNullCheck(mv);
      -        mv.putfield(generatedClassName, GLOBAL_FIELD_NAME, SCRIPT_OBJECT_TYPE_DESCRIPTOR);
      +        mv.putfield(generatedClassName, GLOBAL_FIELD_NAME, GLOBAL_TYPE_DESCRIPTOR);
       
               endInitMethod(mv);
           }
      @@ -652,10 +656,10 @@ final class JavaAdapterBytecodeGenerator {
               // Load the creatingGlobal object
               if(classOverride) {
                   // If class handle is defined, load the static defining global
      -            mv.getstatic(generatedClassName, GLOBAL_FIELD_NAME, SCRIPT_OBJECT_TYPE_DESCRIPTOR);
      +            mv.getstatic(generatedClassName, GLOBAL_FIELD_NAME, GLOBAL_TYPE_DESCRIPTOR);
               } else {
                   mv.visitVarInsn(ALOAD, 0);
      -            mv.getfield(generatedClassName, GLOBAL_FIELD_NAME, SCRIPT_OBJECT_TYPE_DESCRIPTOR);
      +            mv.getfield(generatedClassName, GLOBAL_FIELD_NAME, GLOBAL_TYPE_DESCRIPTOR);
               }
               // stack: [creatingGlobal, handle]
               final Label setupGlobal = new Label();
      @@ -674,7 +678,7 @@ final class JavaAdapterBytecodeGenerator {
               // stack: [creatingGlobal, creatingGlobal, handle]
       
               // Emit code for switching to the creating global
      -        // ScriptObject currentGlobal = Context.getGlobal();
      +        // Global currentGlobal = Context.getGlobal();
               invokeGetGlobal(mv);
               mv.dup();
       
      @@ -744,7 +748,7 @@ final class JavaAdapterBytecodeGenerator {
               final Label methodEnd = new Label();
               mv.visitLabel(methodEnd);
       
      -        mv.visitLocalVariable("currentGlobal", SCRIPT_OBJECT_TYPE_DESCRIPTOR, null, setupGlobal, methodEnd, currentGlobalVar);
      +        mv.visitLocalVariable("currentGlobal", GLOBAL_TYPE_DESCRIPTOR, null, setupGlobal, methodEnd, currentGlobalVar);
               mv.visitLocalVariable("globalsDiffer", Type.INT_TYPE.getDescriptor(), null, setupGlobal, methodEnd, globalsDifferVar);
       
               if(throwableDeclared) {
      diff --git a/nashorn/src/jdk/nashorn/internal/runtime/linker/JavaAdapterFactory.java b/nashorn/src/jdk/nashorn/internal/runtime/linker/JavaAdapterFactory.java
      index 5e0b890a6d2..475ab08c369 100644
      --- a/nashorn/src/jdk/nashorn/internal/runtime/linker/JavaAdapterFactory.java
      +++ b/nashorn/src/jdk/nashorn/internal/runtime/linker/JavaAdapterFactory.java
      @@ -48,7 +48,6 @@ import java.util.Map;
       import java.util.concurrent.ConcurrentHashMap;
       import jdk.internal.dynalink.beans.StaticClass;
       import jdk.internal.dynalink.support.LinkRequestImpl;
      -import jdk.nashorn.internal.objects.NativeJava;
       import jdk.nashorn.internal.runtime.Context;
       import jdk.nashorn.internal.runtime.ECMAException;
       import jdk.nashorn.internal.runtime.ScriptFunction;
      @@ -68,8 +67,8 @@ import jdk.nashorn.internal.runtime.ScriptObject;
        * generate the adapter class itself; see its documentation for details about the generated class.
        * 

      * You normally don't use this class directly, but rather either create adapters from script using - * {@link NativeJava#extend(Object, Object...)}, using the {@code new} operator on abstract classes and interfaces (see - * {@link NativeJava#type(Object, Object)}), or implicitly when passing script functions to Java methods expecting SAM + * {@link jdk.nashorn.internal.objects.NativeJava#extend(Object, Object...)}, using the {@code new} operator on abstract classes and interfaces (see + * {@link jdk.nashorn.internal.objects.NativeJava#type(Object, Object)}), or implicitly when passing script functions to Java methods expecting SAM * types. *

      */ @@ -337,6 +336,7 @@ public final class JavaAdapterFactory { private static ProtectionDomain createMinimalPermissionDomain() { // Generated classes need to have at least the permission to access Nashorn runtime and runtime.linker packages. final Permissions permissions = new Permissions(); + permissions.add(new RuntimePermission("accessClassInPackage.jdk.nashorn.internal.objects")); permissions.add(new RuntimePermission("accessClassInPackage.jdk.nashorn.internal.runtime")); permissions.add(new RuntimePermission("accessClassInPackage.jdk.nashorn.internal.runtime.linker")); return new ProtectionDomain(new CodeSource(null, (CodeSigner[])null), permissions); diff --git a/nashorn/src/jdk/nashorn/internal/runtime/linker/NashornPrimitiveLinker.java b/nashorn/src/jdk/nashorn/internal/runtime/linker/NashornPrimitiveLinker.java index 5cc1cd2c632..22135bc15bc 100644 --- a/nashorn/src/jdk/nashorn/internal/runtime/linker/NashornPrimitiveLinker.java +++ b/nashorn/src/jdk/nashorn/internal/runtime/linker/NashornPrimitiveLinker.java @@ -37,9 +37,9 @@ import jdk.internal.dynalink.linker.LinkRequest; import jdk.internal.dynalink.linker.LinkerServices; import jdk.internal.dynalink.linker.TypeBasedGuardingDynamicLinker; import jdk.internal.dynalink.support.TypeUtilities; +import jdk.nashorn.internal.objects.Global; import jdk.nashorn.internal.runtime.ConsString; import jdk.nashorn.internal.runtime.Context; -import jdk.nashorn.internal.runtime.GlobalObject; /** * Internal linker for String, Boolean, and Number objects, only ever used by Nashorn engine and not exposed to other @@ -62,7 +62,7 @@ final class NashornPrimitiveLinker implements TypeBasedGuardingDynamicLinker, Gu final LinkRequest request = origRequest.withoutRuntimeContext(); // Nashorn has no runtime context final Object self = request.getReceiver(); - final GlobalObject global = (GlobalObject) Context.getGlobal(); + final Global global = Context.getGlobal(); final NashornCallSiteDescriptor desc = (NashornCallSiteDescriptor) request.getCallSiteDescriptor(); return Bootstrap.asType(global.primitiveLookup(request, self), linkerServices, desc); diff --git a/nashorn/src/jdk/nashorn/tools/Shell.java b/nashorn/src/jdk/nashorn/tools/Shell.java index ad19484ceb8..ad833d8171b 100644 --- a/nashorn/src/jdk/nashorn/tools/Shell.java +++ b/nashorn/src/jdk/nashorn/tools/Shell.java @@ -42,6 +42,7 @@ import jdk.nashorn.internal.codegen.Compiler; import jdk.nashorn.internal.ir.FunctionNode; import jdk.nashorn.internal.ir.debug.ASTWriter; import jdk.nashorn.internal.ir.debug.PrintVisitor; +import jdk.nashorn.internal.objects.Global; import jdk.nashorn.internal.parser.Parser; import jdk.nashorn.internal.runtime.Context; import jdk.nashorn.internal.runtime.ErrorManager; @@ -148,7 +149,7 @@ public class Shell { return COMMANDLINE_ERROR; } - final ScriptObject global = context.createGlobal(); + final Global global = context.createGlobal(); final ScriptEnvironment env = context.getEnv(); final List files = env.getFiles(); if (files.isEmpty()) { @@ -231,8 +232,8 @@ public class Shell { * @return error code * @throws IOException when any script file read results in I/O error */ - private static int compileScripts(final Context context, final ScriptObject global, final List files) throws IOException { - final ScriptObject oldGlobal = Context.getGlobal(); + private static int compileScripts(final Context context, final Global global, final List files) throws IOException { + final Global oldGlobal = Context.getGlobal(); final boolean globalChanged = (oldGlobal != global); final ScriptEnvironment env = context.getEnv(); try { @@ -281,8 +282,8 @@ public class Shell { * @return error code * @throws IOException when any script file read results in I/O error */ - private int runScripts(final Context context, final ScriptObject global, final List files) throws IOException { - final ScriptObject oldGlobal = Context.getGlobal(); + private int runScripts(final Context context, final Global global, final List files) throws IOException { + final Global oldGlobal = Context.getGlobal(); final boolean globalChanged = (oldGlobal != global); try { if (globalChanged) { @@ -339,8 +340,8 @@ public class Shell { * @return error code * @throws IOException when any script file read results in I/O error */ - private static int runFXScripts(final Context context, final ScriptObject global, final List files) throws IOException { - final ScriptObject oldGlobal = Context.getGlobal(); + private static int runFXScripts(final Context context, final Global global, final List files) throws IOException { + final Global oldGlobal = Context.getGlobal(); final boolean globalChanged = (oldGlobal != global); try { if (globalChanged) { @@ -389,11 +390,11 @@ public class Shell { * @return return code */ @SuppressWarnings("resource") - private static int readEvalPrint(final Context context, final ScriptObject global) { + private static int readEvalPrint(final Context context, final Global global) { final String prompt = bundle.getString("shell.prompt"); final BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); final PrintWriter err = context.getErr(); - final ScriptObject oldGlobal = Context.getGlobal(); + final Global oldGlobal = Context.getGlobal(); final boolean globalChanged = (oldGlobal != global); final ScriptEnvironment env = context.getEnv(); diff --git a/nashorn/test/src/jdk/nashorn/internal/codegen/CompilerTest.java b/nashorn/test/src/jdk/nashorn/internal/codegen/CompilerTest.java index 00d79acbda9..ac438101e67 100644 --- a/nashorn/test/src/jdk/nashorn/internal/codegen/CompilerTest.java +++ b/nashorn/test/src/jdk/nashorn/internal/codegen/CompilerTest.java @@ -28,6 +28,7 @@ package jdk.nashorn.internal.codegen; import java.io.File; import java.io.PrintWriter; import java.io.StringWriter; +import jdk.nashorn.internal.objects.Global; import jdk.nashorn.internal.runtime.Context; import jdk.nashorn.internal.runtime.ErrorManager; import jdk.nashorn.internal.runtime.ScriptFunction; @@ -58,7 +59,7 @@ public class CompilerTest { } private Context context; - private ScriptObject global; + private Global global; @BeforeClass public void setupTest() { @@ -146,7 +147,7 @@ public class CompilerTest { log("Begin compiling " + file.getAbsolutePath()); } - final ScriptObject oldGlobal = Context.getGlobal(); + final Global oldGlobal = Context.getGlobal(); final boolean globalChanged = (oldGlobal != global); try { diff --git a/nashorn/test/src/jdk/nashorn/internal/performance/PerformanceWrapper.java b/nashorn/test/src/jdk/nashorn/internal/performance/PerformanceWrapper.java index 999f6fa4529..ce969210053 100644 --- a/nashorn/test/src/jdk/nashorn/internal/performance/PerformanceWrapper.java +++ b/nashorn/test/src/jdk/nashorn/internal/performance/PerformanceWrapper.java @@ -31,9 +31,9 @@ import java.util.concurrent.ExecutionException; import java.util.concurrent.Future; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; +import jdk.nashorn.internal.objects.Global; import jdk.nashorn.internal.runtime.Context; import jdk.nashorn.internal.runtime.ScriptFunction; -import jdk.nashorn.internal.runtime.ScriptObject; import jdk.nashorn.internal.runtime.ScriptRuntime; /** @@ -89,7 +89,7 @@ public class PerformanceWrapper extends jdk.nashorn.tools.Shell { @Override protected Object apply(final ScriptFunction target, final Object self) { if (_runsPerIteration == 0 && _numberOfIterations == 0) { - final ScriptObject global = jdk.nashorn.internal.runtime.Context.getGlobal(); + final Global global = jdk.nashorn.internal.runtime.Context.getGlobal(); final ScriptFunction _target = target; final Object _self = self; diff --git a/nashorn/test/src/jdk/nashorn/internal/runtime/ContextTest.java b/nashorn/test/src/jdk/nashorn/internal/runtime/ContextTest.java index 1b21c23f404..1ec416951a3 100644 --- a/nashorn/test/src/jdk/nashorn/internal/runtime/ContextTest.java +++ b/nashorn/test/src/jdk/nashorn/internal/runtime/ContextTest.java @@ -29,6 +29,7 @@ import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertTrue; import java.util.Map; +import jdk.nashorn.internal.objects.Global; import jdk.nashorn.internal.runtime.options.Options; import org.testng.annotations.Test; @@ -45,7 +46,7 @@ public class ContextTest { final Options options = new Options(""); final ErrorManager errors = new ErrorManager(); final Context cx = new Context(options, errors, Thread.currentThread().getContextClassLoader()); - final ScriptObject oldGlobal = Context.getGlobal(); + final Global oldGlobal = Context.getGlobal(); Context.setGlobal(cx.createGlobal()); try { String code = "22 + 10"; @@ -65,7 +66,7 @@ public class ContextTest { final ErrorManager errors = new ErrorManager(); final Context cx = new Context(options, errors, Thread.currentThread().getContextClassLoader()); final boolean strict = cx.getEnv()._strict; - final ScriptObject oldGlobal = Context.getGlobal(); + final Global oldGlobal = Context.getGlobal(); Context.setGlobal(cx.createGlobal()); try { diff --git a/nashorn/test/src/jdk/nashorn/internal/test/framework/SharedContextEvaluator.java b/nashorn/test/src/jdk/nashorn/internal/test/framework/SharedContextEvaluator.java index ac2dc17293c..83d057f327f 100644 --- a/nashorn/test/src/jdk/nashorn/internal/test/framework/SharedContextEvaluator.java +++ b/nashorn/test/src/jdk/nashorn/internal/test/framework/SharedContextEvaluator.java @@ -34,10 +34,10 @@ import java.io.IOException; import java.io.OutputStream; import java.io.PrintWriter; import jdk.nashorn.api.scripting.NashornException; +import jdk.nashorn.internal.objects.Global; import jdk.nashorn.internal.runtime.Context; import jdk.nashorn.internal.runtime.ErrorManager; import jdk.nashorn.internal.runtime.ScriptFunction; -import jdk.nashorn.internal.runtime.ScriptObject; import jdk.nashorn.internal.runtime.ScriptRuntime; import jdk.nashorn.internal.runtime.Source; import jdk.nashorn.internal.runtime.options.Options; @@ -110,12 +110,12 @@ public final class SharedContextEvaluator implements ScriptEvaluator { @Override public int run(final OutputStream out, final OutputStream err, final String[] args) throws IOException { - final ScriptObject oldGlobal = Context.getGlobal(); + final Global oldGlobal = Context.getGlobal(); try { ctxOut.setDelegatee(out); ctxErr.setDelegatee(err); final ErrorManager errors = context.getErrorManager(); - final ScriptObject global = context.createGlobal(); + final Global global = context.createGlobal(); Context.setGlobal(global); // For each file on the command line. From 293709450829a95c7ddf8a3176207f45da22c2c8 Mon Sep 17 00:00:00 2001 From: Matherey Nunez Date: Mon, 17 Mar 2014 18:27:30 +0100 Subject: [PATCH 073/116] 8037378: Write sanity tests for bytecode persistence feature Reviewed-by: sundar, hannesw --- .../runtime/NoPersistenceCachingTest.java | 133 ++++++++++++++++++ 1 file changed, 133 insertions(+) create mode 100644 nashorn/test/src/jdk/nashorn/internal/runtime/NoPersistenceCachingTest.java diff --git a/nashorn/test/src/jdk/nashorn/internal/runtime/NoPersistenceCachingTest.java b/nashorn/test/src/jdk/nashorn/internal/runtime/NoPersistenceCachingTest.java new file mode 100644 index 00000000000..aefa828b470 --- /dev/null +++ b/nashorn/test/src/jdk/nashorn/internal/runtime/NoPersistenceCachingTest.java @@ -0,0 +1,133 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +package jdk.nashorn.internal.runtime; + +import java.io.ByteArrayOutputStream; +import java.io.PrintStream; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import static org.testng.Assert.fail; +import org.testng.annotations.Test; + +import javax.script.ScriptContext; +import javax.script.ScriptEngine; +import javax.script.ScriptEngineFactory; +import javax.script.ScriptEngineManager; +import javax.script.SimpleScriptContext; +import jdk.nashorn.api.scripting.NashornScriptEngineFactory; + +/** + * @test + * @bug 8037378 + * @summary Sanity tests for no persistence caching + * @run testng/othervm jdk.nashorn.internal.runtime.NoPersistenceCachingTest + */ +public class NoPersistenceCachingTest { + + private ScriptEngine engine; + private ScriptContext context1, context2, context3; + private ByteArrayOutputStream stderr; + private PrintStream prevStderr; + private final String script = "print('Hello')"; + + public void setupTest() { + stderr = new ByteArrayOutputStream(); + prevStderr = System.err; + System.setErr(new PrintStream(stderr)); + NashornScriptEngineFactory nashornFactory = null; + ScriptEngineManager sm = new ScriptEngineManager(); + for (ScriptEngineFactory fac : sm.getEngineFactories()) { + if (fac instanceof NashornScriptEngineFactory) { + nashornFactory = (NashornScriptEngineFactory) fac; + break; + } + } + if (nashornFactory == null) { + fail("Cannot find nashorn factory!"); + } + String[] options = new String[]{"--log=compiler:finest"}; + engine = nashornFactory.getScriptEngine(options); + } + + public void setErrTest() { + System.setErr(prevStderr); + } + + public void runTest(int numberOfContext, String expectedOutputPattern, + int expectedPatternOccurrence) { + setupTest(); + try { + switch (numberOfContext) { + case 2: + context1 = engine.getContext(); + context2 = new SimpleScriptContext(); + context2.setBindings(engine.createBindings(), ScriptContext.ENGINE_SCOPE); + engine.eval(script, context1); + engine.eval(script, context2); + break; + case 3: + context1 = engine.getContext(); + context2 = new SimpleScriptContext(); + context2.setBindings(engine.createBindings(), ScriptContext.ENGINE_SCOPE); + context3 = new SimpleScriptContext(); + context3.setBindings(engine.createBindings(), ScriptContext.ENGINE_SCOPE); + engine.eval(script, context1); + engine.eval(script, context2); + engine.eval(script, context3); + break; + } + } catch (final Exception se) { + se.printStackTrace(); + fail(se.getMessage()); + } + Pattern deoptimizing = Pattern.compile(expectedOutputPattern); + Matcher matcher = deoptimizing.matcher(stderr.toString()); + int matches = 0; + while (matcher.find()) { + matches++; + } + if (matches != expectedPatternOccurrence) { + fail("Number of cache hit is not correct, expected: " + + expectedPatternOccurrence + " and found: " + matches + "\n" + + stderr); + } + setErrTest(); + } + + private static String getCodeCachePattern() { + return ("\\[compiler\\]\\sCode\\scache\\shit\\sfor\\s\\savoiding\\srecompile."); + } + + @Test + public void twoContextTest() { + runTest(2, getCodeCachePattern(), 1); + + } + + @Test + public void threeContextTest() { + runTest(3, getCodeCachePattern(), 2); + } +} From d9e857f304d81f4f6de538f023e6bf932a7591e7 Mon Sep 17 00:00:00 2001 From: Dan Smith Date: Mon, 17 Mar 2014 14:03:59 -0600 Subject: [PATCH 074/116] 8034980: Fix @summary tag of test/tools/javac/parser/T4910483.java Reviewed-by: vromero --- langtools/test/tools/javac/parser/T4910483.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/langtools/test/tools/javac/parser/T4910483.java b/langtools/test/tools/javac/parser/T4910483.java index 7d80e0ade5d..b29115518a9 100644 --- a/langtools/test/tools/javac/parser/T4910483.java +++ b/langtools/test/tools/javac/parser/T4910483.java @@ -21,10 +21,10 @@ * questions. */ -/** +/* * @test * @bug 4910483 - * @summary javac shouldn't throw NPE while compiling invalid RuntimeInvisibleParameterAnnotations + * @summary Javadoc renders the string ".*\\.pdf" as ".\*\.pdf" * @run main T4910483 */ From 03c0b0a11e5816f25fb509869f5756eb3883a462 Mon Sep 17 00:00:00 2001 From: Paul Govereau Date: Tue, 18 Mar 2014 22:12:46 +0000 Subject: [PATCH 075/116] 8036007: javac crashes when encountering an unresolvable interface Reviewed-by: vromero, jlahoda --- .../com/sun/tools/javac/code/Types.java | 1 + .../MissingInterfaceTest.java | 15 +++++++++++ .../MissingInterfaceTest.out | 3 +++ .../MissingInterfaceTestDep.java | 26 +++++++++++++++++++ 4 files changed, 45 insertions(+) create mode 100644 langtools/test/tools/javac/missingSuperRecovery/MissingInterfaceTest.java create mode 100644 langtools/test/tools/javac/missingSuperRecovery/MissingInterfaceTest.out create mode 100644 langtools/test/tools/javac/missingSuperRecovery/MissingInterfaceTestDep.java diff --git a/langtools/src/share/classes/com/sun/tools/javac/code/Types.java b/langtools/src/share/classes/com/sun/tools/javac/code/Types.java index acc3ccbff29..4e011f04368 100644 --- a/langtools/src/share/classes/com/sun/tools/javac/code/Types.java +++ b/langtools/src/share/classes/com/sun/tools/javac/code/Types.java @@ -3208,6 +3208,7 @@ public class Types { return tvar.rank_field; } case ERROR: + case NONE: return 0; default: throw new AssertionError(); diff --git a/langtools/test/tools/javac/missingSuperRecovery/MissingInterfaceTest.java b/langtools/test/tools/javac/missingSuperRecovery/MissingInterfaceTest.java new file mode 100644 index 00000000000..d71df0664ea --- /dev/null +++ b/langtools/test/tools/javac/missingSuperRecovery/MissingInterfaceTest.java @@ -0,0 +1,15 @@ +/* + * @test /nodynamiccopyright/ + * @bug 8036007 + * @summary javac crashes when encountering an unresolvable interface + * @build MissingInterfaceTestDep + * @clean Closeable + * @compile/fail/ref=MissingInterfaceTest.out -XDrawDiagnostics MissingInterfaceTest.java + */ + +public class MissingInterfaceTest { + void test(MissingInterfaceTestDep s) { + s.call(); + s.another(); + } +} diff --git a/langtools/test/tools/javac/missingSuperRecovery/MissingInterfaceTest.out b/langtools/test/tools/javac/missingSuperRecovery/MissingInterfaceTest.out new file mode 100644 index 00000000000..0956ba6fb05 --- /dev/null +++ b/langtools/test/tools/javac/missingSuperRecovery/MissingInterfaceTest.out @@ -0,0 +1,3 @@ +MissingInterfaceTest.java:12:10: compiler.err.cant.access: Closeable, (compiler.misc.class.file.not.found: Closeable) +MissingInterfaceTest.java:13:10: compiler.err.cant.resolve.location.args: kindname.method, another, , , (compiler.misc.location.1: kindname.variable, s, MissingInterfaceTestDep) +2 errors diff --git a/langtools/test/tools/javac/missingSuperRecovery/MissingInterfaceTestDep.java b/langtools/test/tools/javac/missingSuperRecovery/MissingInterfaceTestDep.java new file mode 100644 index 00000000000..b8379d9fbe1 --- /dev/null +++ b/langtools/test/tools/javac/missingSuperRecovery/MissingInterfaceTestDep.java @@ -0,0 +1,26 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +public class MissingInterfaceTestDep implements Intermediate {} +interface Intermediate extends Closeable { } +interface Closeable {} From 405bbf7a4d82ecd67c4eb6f388ca42b36b347f91 Mon Sep 17 00:00:00 2001 From: David Katleman Date: Thu, 20 Mar 2014 13:43:52 -0700 Subject: [PATCH 076/116] Added tag jdk9-b05 for changeset 2d573a30fd59 --- .hgtags-top-repo | 1 + 1 file changed, 1 insertion(+) diff --git a/.hgtags-top-repo b/.hgtags-top-repo index c1b1c04b6d6..4119c1cfd65 100644 --- a/.hgtags-top-repo +++ b/.hgtags-top-repo @@ -247,3 +247,4 @@ cd3825b2983045784d6fc6d1729c799b08215752 jdk8-b120 135f0c7af57ebace31383d8877f47e32172759ff jdk9-b02 fd8d51bdf9aadf7ae83e65e8655c53581017c363 jdk9-b03 cb4c3440bc2748101923e2488506e61009ab1bf5 jdk9-b04 +8c63f0b6ada282f27e3a80125e53c3be603f9af7 jdk9-b05 From c9fcec7f2df9c0e7eb3386e35bdb8b4c100a1775 Mon Sep 17 00:00:00 2001 From: David Katleman Date: Thu, 20 Mar 2014 13:43:54 -0700 Subject: [PATCH 077/116] Added tag jdk9-b05 for changeset 42d16b6cadb0 --- corba/.hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/corba/.hgtags b/corba/.hgtags index e2c211437d6..ab5e3f09588 100644 --- a/corba/.hgtags +++ b/corba/.hgtags @@ -247,3 +247,4 @@ a7d3638deb2f4e33217b1ecf889479e90f9e5b50 jdk9-b00 8394993063135a42b63a94473280399fb2a13aa7 jdk9-b02 d338b892a13db19b093f85cf5f949a4504e4d31f jdk9-b03 1ed19de263e1e0772da0269118cdd9deeb9fff04 jdk9-b04 +167c39eb44731a5d66770d0f00e231164653a2ff jdk9-b05 From 7011d0972471100b528e78ac91641f3ca464593f Mon Sep 17 00:00:00 2001 From: David Katleman Date: Thu, 20 Mar 2014 13:44:05 -0700 Subject: [PATCH 078/116] Added tag jdk9-b05 for changeset 911cca83c115 --- hotspot/.hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/hotspot/.hgtags b/hotspot/.hgtags index 7b77a830353..880948aef94 100644 --- a/hotspot/.hgtags +++ b/hotspot/.hgtags @@ -407,3 +407,4 @@ ce2d7e46f3c7e41241f3b407705a4071323a11ab jdk9-b00 b188446de75bda5fc52d102cddf242c3ef5ecbdf jdk9-b02 b2fee789d23f3cdabb3db4e51af43038e5692d3a jdk9-b03 3812c088b9456ee22c933e88aee1ece71f4e783a jdk9-b04 +bdc5311e1db7598589b77015119b821bf8c828bd jdk9-b05 From 68df72b0a067eeea96f80480f10b5c85872bd5e3 Mon Sep 17 00:00:00 2001 From: David Katleman Date: Thu, 20 Mar 2014 13:44:11 -0700 Subject: [PATCH 079/116] Added tag jdk9-b05 for changeset be03513558fc --- jaxp/.hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/jaxp/.hgtags b/jaxp/.hgtags index 235b496363e..81af574266a 100644 --- a/jaxp/.hgtags +++ b/jaxp/.hgtags @@ -247,3 +247,4 @@ e5256f530a9b5f2d677ca245de44a617ffb58f52 jdk9-b01 02f60a253e15240087c043bad77a106792e4d56a jdk9-b02 fb92ed0399424193f444489ad49a16748816dc12 jdk9-b03 2846d8fc31490897817a122a668af4f44fc913d0 jdk9-b04 +b92a20e303d24c74078888cd7084b14d7626d48f jdk9-b05 From 610c251a87a1b8a5c9509f44209ba88233be2a35 Mon Sep 17 00:00:00 2001 From: David Katleman Date: Thu, 20 Mar 2014 13:44:13 -0700 Subject: [PATCH 080/116] Added tag jdk9-b05 for changeset 820ef263f93a --- jaxws/.hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/jaxws/.hgtags b/jaxws/.hgtags index 5de247bd72f..27f4734f0bd 100644 --- a/jaxws/.hgtags +++ b/jaxws/.hgtags @@ -250,3 +250,4 @@ bc622ba563f9316f981c11c3a260f4c3fdc5ef07 jdk8-b122 efe2bc258c78af49de9517a4a5699d3a2e630c44 jdk9-b02 1cd9786257ed4f82a3371fd606b162e5bb6fcd81 jdk9-b03 da44a8bdf1f3fdd518e7d785d60cc1b15983b176 jdk9-b04 +eae966c8133fec0a8bf9e16d1274a4ede3c0fb52 jdk9-b05 From 01cf229bac4d44e711372c81dc4d11cbc954fa8f Mon Sep 17 00:00:00 2001 From: David Katleman Date: Thu, 20 Mar 2014 13:44:28 -0700 Subject: [PATCH 081/116] Added tag jdk9-b05 for changeset da7dce5b111a --- jdk/.hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/jdk/.hgtags b/jdk/.hgtags index d4558dabdae..e4c040d37a1 100644 --- a/jdk/.hgtags +++ b/jdk/.hgtags @@ -247,3 +247,4 @@ d31cd980e1da31fa496a359caaf1a165aeb5791a jdk8-b120 8c8275426a3207d91393354f7a7f9bc362ec25cf jdk9-b02 4111af6151ed8ca8e3f5603c69729a68427e1d5b jdk9-b03 627deed79b595a4789fc9151455b663a47381257 jdk9-b04 +263198a1d8f1f4cb97d35f40c61704b08ebd3686 jdk9-b05 From d705db594aa72f9f5d36d3cd0b92c2824d886893 Mon Sep 17 00:00:00 2001 From: David Katleman Date: Thu, 20 Mar 2014 13:44:52 -0700 Subject: [PATCH 082/116] Added tag jdk9-b05 for changeset a127d7bb1c30 --- langtools/.hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/langtools/.hgtags b/langtools/.hgtags index 3dc1cdd6b60..6488f7e10e4 100644 --- a/langtools/.hgtags +++ b/langtools/.hgtags @@ -247,3 +247,4 @@ afe63d41c699e0e2ee910ef20c41b60603c852a1 jdk9-b00 f2c58a337c8aaa1ce84dfa8a8e8c5d4c8c1e12fa jdk9-b02 151222468d1d04ce6613d33efa3d45bfaf53e3e5 jdk9-b03 fa2ec6b6b1697ae4a78b03b609664dc6b47dee86 jdk9-b04 +1d5e6fc88a4cca287090c16b0530a0d5849a5603 jdk9-b05 From c17681a17e230c9a24d8351a85d06fba7ac38382 Mon Sep 17 00:00:00 2001 From: David Katleman Date: Thu, 20 Mar 2014 13:44:54 -0700 Subject: [PATCH 083/116] Added tag jdk9-b05 for changeset 9471aad8444f --- nashorn/.hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/nashorn/.hgtags b/nashorn/.hgtags index 6e7c8e3a43d..70638d2436d 100644 --- a/nashorn/.hgtags +++ b/nashorn/.hgtags @@ -238,3 +238,4 @@ c3343930c73c58a22c1d58719bb988aeb25a871f jdk8-b119 b3517e51f40477f10db8bc30a557aa0ea712c274 jdk9-b02 832f89ff25d903c45cfc994553f1ade8821a4398 jdk9-b03 3f6ef92cd7823372c45e79125adba4cbf1c9f7b2 jdk9-b04 +2a1cac93c33317d828d4a5b81239204a9927cc4a jdk9-b05 From a25bcf0ac065983cf9d831ce9bdb059163d80842 Mon Sep 17 00:00:00 2001 From: Stephen Colebourne Date: Mon, 24 Mar 2014 12:47:02 -0700 Subject: [PATCH 084/116] 8033662: DateTimeFormatter parsing ignores withZone() To include the set "zone" in resolved result Reviewed-by: sherman, chegar --- .../java/time/format/DateTimeFormatter.java | 24 +- .../time/format/DateTimeParseContext.java | 27 +- .../classes/java/time/format/Parsed.java | 13 +- .../time/format/TCKDateTimeParseResolver.java | 450 ++++++++++-------- 4 files changed, 300 insertions(+), 214 deletions(-) diff --git a/jdk/src/share/classes/java/time/format/DateTimeFormatter.java b/jdk/src/share/classes/java/time/format/DateTimeFormatter.java index 39d91986f86..e92f3e9a122 100644 --- a/jdk/src/share/classes/java/time/format/DateTimeFormatter.java +++ b/jdk/src/share/classes/java/time/format/DateTimeFormatter.java @@ -1932,8 +1932,8 @@ public final class DateTimeFormatter { */ private TemporalAccessor parseResolved0(final CharSequence text, final ParsePosition position) { ParsePosition pos = (position != null ? position : new ParsePosition(0)); - Parsed unresolved = parseUnresolved0(text, pos); - if (unresolved == null || pos.getErrorIndex() >= 0 || (position == null && pos.getIndex() < text.length())) { + DateTimeParseContext context = parseUnresolved0(text, pos); + if (context == null || pos.getErrorIndex() >= 0 || (position == null && pos.getIndex() < text.length())) { String abbr; if (text.length() > 64) { abbr = text.subSequence(0, 64).toString() + "..."; @@ -1948,7 +1948,7 @@ public final class DateTimeFormatter { pos.getIndex(), text, pos.getIndex()); } } - return unresolved.resolve(resolverStyle, resolverFields); + return context.toResolved(resolverStyle, resolverFields); } /** @@ -1991,10 +1991,14 @@ public final class DateTimeFormatter { * @throws IndexOutOfBoundsException if the position is invalid */ public TemporalAccessor parseUnresolved(CharSequence text, ParsePosition position) { - return parseUnresolved0(text, position); + DateTimeParseContext context = parseUnresolved0(text, position); + if (context == null) { + return null; + } + return context.toUnresolved(); } - private Parsed parseUnresolved0(CharSequence text, ParsePosition position) { + private DateTimeParseContext parseUnresolved0(CharSequence text, ParsePosition position) { Objects.requireNonNull(text, "text"); Objects.requireNonNull(position, "position"); DateTimeParseContext context = new DateTimeParseContext(this); @@ -2005,7 +2009,7 @@ public final class DateTimeFormatter { return null; } position.setIndex(pos); // errorIndex not updated from input - return context.toParsed(); + return context; } //----------------------------------------------------------------------- @@ -2126,23 +2130,23 @@ public final class DateTimeFormatter { @Override public Object parseObject(String text, ParsePosition pos) { Objects.requireNonNull(text, "text"); - Parsed unresolved; + DateTimeParseContext context; try { - unresolved = formatter.parseUnresolved0(text, pos); + context = formatter.parseUnresolved0(text, pos); } catch (IndexOutOfBoundsException ex) { if (pos.getErrorIndex() < 0) { pos.setErrorIndex(0); } return null; } - if (unresolved == null) { + if (context == null) { if (pos.getErrorIndex() < 0) { pos.setErrorIndex(0); } return null; } try { - TemporalAccessor resolved = unresolved.resolve(formatter.resolverStyle, formatter.resolverFields); + TemporalAccessor resolved = context.toResolved(formatter.resolverStyle, formatter.resolverFields); if (parseType == null) { return resolved; } diff --git a/jdk/src/share/classes/java/time/format/DateTimeParseContext.java b/jdk/src/share/classes/java/time/format/DateTimeParseContext.java index 026a595896c..e3ca5e981a5 100644 --- a/jdk/src/share/classes/java/time/format/DateTimeParseContext.java +++ b/jdk/src/share/classes/java/time/format/DateTimeParseContext.java @@ -64,10 +64,12 @@ package java.time.format; import java.time.ZoneId; import java.time.chrono.Chronology; import java.time.chrono.IsoChronology; +import java.time.temporal.TemporalAccessor; import java.time.temporal.TemporalField; import java.util.ArrayList; import java.util.Locale; import java.util.Objects; +import java.util.Set; import java.util.function.Consumer; /** @@ -77,8 +79,8 @@ import java.util.function.Consumer; * It has the ability to store and retrieve the parsed values and manage optional segments. * It also provides key information to the parsing methods. *

      - * Once parsing is complete, the {@link #toParsed()} is used to obtain the data. - * It contains a method to resolve the separate parsed fields into meaningful values. + * Once parsing is complete, the {@link #toUnresolved()} is used to obtain the unresolved + * result data. The {@link #toResolved()} is used to obtain the resolved result. * * @implSpec * This class is a mutable context intended for use from a single thread. @@ -309,16 +311,27 @@ final class DateTimeParseContext { } /** - * Gets the result of the parse. + * Gets the unresolved result of the parse. * * @return the result of the parse, not null */ - Parsed toParsed() { - Parsed parsed = currentParsed(); - parsed.effectiveChrono = getEffectiveChronology(); - return parsed; + Parsed toUnresolved() { + return currentParsed(); } + /** + * Gets the resolved result of the parse. + * + * @return the result of the parse, not null + */ + TemporalAccessor toResolved(ResolverStyle resolverStyle, Set resolverFields) { + Parsed parsed = currentParsed(); + parsed.chrono = getEffectiveChronology(); + parsed.zone = (parsed.zone != null ? parsed.zone : formatter.getZone()); + return parsed.resolve(resolverStyle, resolverFields); + } + + //----------------------------------------------------------------------- /** * Gets the first value that was parsed for the specified field. diff --git a/jdk/src/share/classes/java/time/format/Parsed.java b/jdk/src/share/classes/java/time/format/Parsed.java index f9878bbb580..1ae19b58a73 100644 --- a/jdk/src/share/classes/java/time/format/Parsed.java +++ b/jdk/src/share/classes/java/time/format/Parsed.java @@ -135,10 +135,6 @@ final class Parsed implements TemporalAccessor { * Whether a leap-second is parsed. */ boolean leapSecond; - /** - * The effective chronology. - */ - Chronology effectiveChrono; /** * The resolver style to use. */ @@ -241,7 +237,6 @@ final class Parsed implements TemporalAccessor { fieldValues.keySet().retainAll(resolverFields); } this.resolverStyle = resolverStyle; - chrono = effectiveChrono; resolveFields(); resolveTimeLenient(); crossCheck(); @@ -266,14 +261,16 @@ final class Parsed implements TemporalAccessor { TemporalAccessor resolvedObject = targetField.resolve(fieldValues, this, resolverStyle); if (resolvedObject != null) { if (resolvedObject instanceof ChronoZonedDateTime) { - ChronoZonedDateTime czdt = (ChronoZonedDateTime) resolvedObject; - if (zone.equals(czdt.getZone()) == false) { + ChronoZonedDateTime czdt = (ChronoZonedDateTime) resolvedObject; + if (zone == null) { + zone = czdt.getZone(); + } else if (zone.equals(czdt.getZone()) == false) { throw new DateTimeException("ChronoZonedDateTime must use the effective parsed zone: " + zone); } resolvedObject = czdt.toLocalDateTime(); } if (resolvedObject instanceof ChronoLocalDateTime) { - ChronoLocalDateTime cldt = (ChronoLocalDateTime) resolvedObject; + ChronoLocalDateTime cldt = (ChronoLocalDateTime) resolvedObject; updateCheckConflict(cldt.toLocalTime(), Period.ZERO); updateCheckConflict(cldt.toLocalDate()); changedCount++; diff --git a/jdk/test/java/time/tck/java/time/format/TCKDateTimeParseResolver.java b/jdk/test/java/time/tck/java/time/format/TCKDateTimeParseResolver.java index 2efd8cd4641..75b51a3802f 100644 --- a/jdk/test/java/time/tck/java/time/format/TCKDateTimeParseResolver.java +++ b/jdk/test/java/time/tck/java/time/format/TCKDateTimeParseResolver.java @@ -90,9 +90,6 @@ import static java.time.temporal.ChronoField.SECOND_OF_DAY; import static java.time.temporal.ChronoField.SECOND_OF_MINUTE; import static java.time.temporal.ChronoField.YEAR; import static java.time.temporal.ChronoField.YEAR_OF_ERA; -import static java.time.temporal.ChronoUnit.DAYS; -import static java.time.temporal.ChronoUnit.FOREVER; -import static java.time.temporal.ChronoUnit.NANOS; import static org.testng.Assert.assertEquals; import static org.testng.Assert.fail; @@ -102,13 +99,17 @@ import java.time.LocalTime; import java.time.Period; import java.time.ZoneId; import java.time.ZonedDateTime; -import java.time.chrono.Chronology; +import java.time.chrono.ChronoLocalDate; +import java.time.chrono.ChronoLocalDateTime; +import java.time.chrono.ChronoZonedDateTime; +import java.time.chrono.IsoChronology; +import java.time.chrono.MinguoChronology; +import java.time.chrono.MinguoDate; import java.time.chrono.ThaiBuddhistChronology; import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatterBuilder; import java.time.format.DateTimeParseException; import java.time.format.ResolverStyle; -import java.time.temporal.ChronoUnit; import java.time.temporal.IsoFields; import java.time.temporal.Temporal; import java.time.temporal.TemporalAccessor; @@ -129,6 +130,9 @@ public class TCKDateTimeParseResolver { // TODO: tests with weird TenporalField implementations // TODO: tests with non-ISO chronologies + private static final ZoneId EUROPE_ATHENS = ZoneId.of("Europe/Athens"); + private static final ZoneId EUROPE_PARIS = ZoneId.of("Europe/Paris"); + //----------------------------------------------------------------------- @DataProvider(name="resolveOneNoChange") Object[][] data_resolveOneNoChange() { @@ -886,205 +890,273 @@ public class TCKDateTimeParseResolver { } //----------------------------------------------------------------------- + // SPEC: DateTimeFormatter.withChronology() @Test - public void test_fieldResolvesToLocalTime() { - TemporalField field = new TemporalField() { - @Override - public TemporalUnit getBaseUnit() { - throw new UnsupportedOperationException(); - } - @Override - public TemporalUnit getRangeUnit() { - throw new UnsupportedOperationException(); - } - @Override - public ValueRange range() { - throw new UnsupportedOperationException(); - } - @Override - public boolean isDateBased() { - throw new UnsupportedOperationException(); - } - @Override - public boolean isTimeBased() { - throw new UnsupportedOperationException(); - } - @Override - public boolean isSupportedBy(TemporalAccessor temporal) { - throw new UnsupportedOperationException(); - } - @Override - public ValueRange rangeRefinedBy(TemporalAccessor temporal) { - throw new UnsupportedOperationException(); - } - @Override - public long getFrom(TemporalAccessor temporal) { - throw new UnsupportedOperationException(); - } - @Override - public R adjustInto(R temporal, long newValue) { - throw new UnsupportedOperationException(); - } - @Override - public TemporalAccessor resolve( - Map fieldValues, TemporalAccessor partialTemporal, ResolverStyle resolverStyle) { - return LocalTime.MIDNIGHT.plusNanos(fieldValues.remove(this)); - } - }; - DateTimeFormatter f = new DateTimeFormatterBuilder().appendValue(field).toFormatter(); - TemporalAccessor accessor = f.parse("1234567890"); - assertEquals(accessor.query(TemporalQueries.localDate()), null); - assertEquals(accessor.query(TemporalQueries.localTime()), LocalTime.of(0, 0, 1, 234_567_890)); + public void test_withChronology_noOverride() { + DateTimeFormatter f = new DateTimeFormatterBuilder().parseDefaulting(EPOCH_DAY, 2).toFormatter(); + TemporalAccessor accessor = f.parse(""); + assertEquals(accessor.query(TemporalQueries.localDate()), LocalDate.of(1970, 1, 3)); + assertEquals(accessor.query(TemporalQueries.localTime()), null); + assertEquals(accessor.query(TemporalQueries.chronology()), IsoChronology.INSTANCE); } @Test - public void test_fieldResolvesToChronoLocalDateTime() { - TemporalField field = new TemporalField() { - @Override - public TemporalUnit getBaseUnit() { - throw new UnsupportedOperationException(); - } - @Override - public TemporalUnit getRangeUnit() { - throw new UnsupportedOperationException(); - } - @Override - public ValueRange range() { - throw new UnsupportedOperationException(); - } - @Override - public boolean isDateBased() { - throw new UnsupportedOperationException(); - } - @Override - public boolean isTimeBased() { - throw new UnsupportedOperationException(); - } - @Override - public boolean isSupportedBy(TemporalAccessor temporal) { - throw new UnsupportedOperationException(); - } - @Override - public ValueRange rangeRefinedBy(TemporalAccessor temporal) { - throw new UnsupportedOperationException(); - } - @Override - public long getFrom(TemporalAccessor temporal) { - throw new UnsupportedOperationException(); - } - @Override - public R adjustInto(R temporal, long newValue) { - throw new UnsupportedOperationException(); - } - @Override - public TemporalAccessor resolve( - Map fieldValues, TemporalAccessor partialTemporal, ResolverStyle resolverStyle) { - fieldValues.remove(this); - return LocalDateTime.of(2010, 6, 30, 12, 30); - } - }; - DateTimeFormatter f = new DateTimeFormatterBuilder().appendValue(field).toFormatter(); + public void test_withChronology_override() { + DateTimeFormatter f = new DateTimeFormatterBuilder().parseDefaulting(EPOCH_DAY, 2).toFormatter(); + f = f.withChronology(MinguoChronology.INSTANCE); + TemporalAccessor accessor = f.parse(""); + assertEquals(accessor.query(TemporalQueries.localDate()), LocalDate.of(1970, 1, 3)); + assertEquals(accessor.query(TemporalQueries.localTime()), null); + assertEquals(accessor.query(TemporalQueries.chronology()), MinguoChronology.INSTANCE); + } + + @Test + public void test_withChronology_parsedChronology_noOverride() { + DateTimeFormatter f = new DateTimeFormatterBuilder().parseDefaulting(EPOCH_DAY, 2).appendChronologyId().toFormatter(); + TemporalAccessor accessor = f.parse("ThaiBuddhist"); + assertEquals(accessor.query(TemporalQueries.localDate()), LocalDate.of(1970, 1, 3)); + assertEquals(accessor.query(TemporalQueries.localTime()), null); + assertEquals(accessor.query(TemporalQueries.chronology()), ThaiBuddhistChronology.INSTANCE); + } + + @Test + public void test_withChronology_parsedChronology_override() { + DateTimeFormatter f = new DateTimeFormatterBuilder().parseDefaulting(EPOCH_DAY, 2).appendChronologyId().toFormatter(); + f = f.withChronology(MinguoChronology.INSTANCE); + TemporalAccessor accessor = f.parse("ThaiBuddhist"); + assertEquals(accessor.query(TemporalQueries.localDate()), LocalDate.of(1970, 1, 3)); + assertEquals(accessor.query(TemporalQueries.localTime()), null); + assertEquals(accessor.query(TemporalQueries.chronology()), ThaiBuddhistChronology.INSTANCE); + } + + //----------------------------------------------------------------------- + // SPEC: DateTimeFormatter.withZone() + @Test + public void test_withZone_noOverride() { + DateTimeFormatter f = new DateTimeFormatterBuilder().parseDefaulting(EPOCH_DAY, 2).toFormatter(); + TemporalAccessor accessor = f.parse(""); + assertEquals(accessor.query(TemporalQueries.localDate()), LocalDate.of(1970, 1, 3)); + assertEquals(accessor.query(TemporalQueries.localTime()), null); + assertEquals(accessor.query(TemporalQueries.zoneId()), null); + } + + @Test + public void test_withZone_override() { + DateTimeFormatter f = new DateTimeFormatterBuilder().parseDefaulting(EPOCH_DAY, 2).toFormatter(); + f = f.withZone(EUROPE_ATHENS); + TemporalAccessor accessor = f.parse(""); + assertEquals(accessor.query(TemporalQueries.localDate()), LocalDate.of(1970, 1, 3)); + assertEquals(accessor.query(TemporalQueries.localTime()), null); + assertEquals(accessor.query(TemporalQueries.zoneId()), EUROPE_ATHENS); + } + + @Test + public void test_withZone_parsedZone_noOverride() { + DateTimeFormatter f = new DateTimeFormatterBuilder().parseDefaulting(EPOCH_DAY, 2).appendZoneId().toFormatter(); + TemporalAccessor accessor = f.parse("Europe/Paris"); + assertEquals(accessor.query(TemporalQueries.localDate()), LocalDate.of(1970, 1, 3)); + assertEquals(accessor.query(TemporalQueries.localTime()), null); + assertEquals(accessor.query(TemporalQueries.zoneId()), EUROPE_PARIS); + } + + @Test + public void test_withZone_parsedZone_override() { + DateTimeFormatter f = new DateTimeFormatterBuilder().parseDefaulting(EPOCH_DAY, 2).appendZoneId().toFormatter(); + f = f.withZone(EUROPE_ATHENS); + TemporalAccessor accessor = f.parse("Europe/Paris"); + assertEquals(accessor.query(TemporalQueries.localDate()), LocalDate.of(1970, 1, 3)); + assertEquals(accessor.query(TemporalQueries.localTime()), null); + assertEquals(accessor.query(TemporalQueries.zoneId()), EUROPE_PARIS); + } + + //----------------------------------------------------------------------- + @Test + public void test_fieldResolvesToLocalTime() { + LocalTime lt = LocalTime.of(12, 30, 40); + DateTimeFormatter f = new DateTimeFormatterBuilder().appendValue(new ResolvingField(lt)).toFormatter(); + TemporalAccessor accessor = f.parse("1234567890"); + assertEquals(accessor.query(TemporalQueries.localDate()), null); + assertEquals(accessor.query(TemporalQueries.localTime()), lt); + } + + //------------------------------------------------------------------------- + @Test + public void test_fieldResolvesToChronoLocalDate_noOverrideChrono_matches() { + LocalDate ldt = LocalDate.of(2010, 6, 30); + DateTimeFormatter f = new DateTimeFormatterBuilder().appendValue(new ResolvingField(ldt)).toFormatter(); + TemporalAccessor accessor = f.parse("1234567890"); + assertEquals(accessor.query(TemporalQueries.localDate()), LocalDate.of(2010, 6, 30)); + assertEquals(accessor.query(TemporalQueries.localTime()), null); + assertEquals(accessor.query(TemporalQueries.chronology()), IsoChronology.INSTANCE); + } + + @Test + public void test_fieldResolvesToChronoLocalDate_overrideChrono_matches() { + MinguoDate mdt = MinguoDate.of(100, 6, 30); + DateTimeFormatter f = new DateTimeFormatterBuilder().appendValue(new ResolvingField(mdt)).toFormatter(); + f = f.withChronology(MinguoChronology.INSTANCE); + TemporalAccessor accessor = f.parse("1234567890"); + assertEquals(accessor.query(TemporalQueries.localDate()), LocalDate.from(mdt)); + assertEquals(accessor.query(TemporalQueries.localTime()), null); + assertEquals(accessor.query(TemporalQueries.chronology()), MinguoChronology.INSTANCE); + } + + @Test(expectedExceptions = DateTimeParseException.class) + public void test_fieldResolvesToChronoLocalDate_noOverrideChrono_wrongChrono() { + ChronoLocalDate cld = ThaiBuddhistChronology.INSTANCE.dateNow(); + DateTimeFormatter f = new DateTimeFormatterBuilder().appendValue(new ResolvingField(cld)).toFormatter(); + f.parse("1234567890"); + } + + @Test(expectedExceptions = DateTimeParseException.class) + public void test_fieldResolvesToChronoLocalDate_overrideChrono_wrongChrono() { + ChronoLocalDate cld = ThaiBuddhistChronology.INSTANCE.dateNow(); + DateTimeFormatter f = new DateTimeFormatterBuilder().appendValue(new ResolvingField(cld)).toFormatter(); + f = f.withChronology(MinguoChronology.INSTANCE); + f.parse("1234567890"); + } + + //------------------------------------------------------------------------- + @Test + public void test_fieldResolvesToChronoLocalDateTime_noOverrideChrono_matches() { + LocalDateTime ldt = LocalDateTime.of(2010, 6, 30, 12, 30); + DateTimeFormatter f = new DateTimeFormatterBuilder().appendValue(new ResolvingField(ldt)).toFormatter(); TemporalAccessor accessor = f.parse("1234567890"); assertEquals(accessor.query(TemporalQueries.localDate()), LocalDate.of(2010, 6, 30)); assertEquals(accessor.query(TemporalQueries.localTime()), LocalTime.of(12, 30)); + assertEquals(accessor.query(TemporalQueries.chronology()), IsoChronology.INSTANCE); + } + + @Test + public void test_fieldResolvesToChronoLocalDateTime_overrideChrono_matches() { + MinguoDate mdt = MinguoDate.of(100, 6, 30); + DateTimeFormatter f = new DateTimeFormatterBuilder().appendValue(new ResolvingField(mdt.atTime(LocalTime.NOON))).toFormatter(); + f = f.withChronology(MinguoChronology.INSTANCE); + TemporalAccessor accessor = f.parse("1234567890"); + assertEquals(accessor.query(TemporalQueries.localDate()), LocalDate.from(mdt)); + assertEquals(accessor.query(TemporalQueries.localTime()), LocalTime.NOON); + assertEquals(accessor.query(TemporalQueries.chronology()), MinguoChronology.INSTANCE); } @Test(expectedExceptions = DateTimeParseException.class) - public void test_fieldResolvesWrongChrono() { - TemporalField field = new TemporalField() { - @Override - public TemporalUnit getBaseUnit() { - throw new UnsupportedOperationException(); - } - @Override - public TemporalUnit getRangeUnit() { - throw new UnsupportedOperationException(); - } - @Override - public ValueRange range() { - throw new UnsupportedOperationException(); - } - @Override - public boolean isDateBased() { - throw new UnsupportedOperationException(); - } - @Override - public boolean isTimeBased() { - throw new UnsupportedOperationException(); - } - @Override - public boolean isSupportedBy(TemporalAccessor temporal) { - throw new UnsupportedOperationException(); - } - @Override - public ValueRange rangeRefinedBy(TemporalAccessor temporal) { - throw new UnsupportedOperationException(); - } - @Override - public long getFrom(TemporalAccessor temporal) { - throw new UnsupportedOperationException(); - } - @Override - public R adjustInto(R temporal, long newValue) { - throw new UnsupportedOperationException(); - } - @Override - public TemporalAccessor resolve( - Map fieldValues, TemporalAccessor partialTemporal, ResolverStyle resolverStyle) { - return ThaiBuddhistChronology.INSTANCE.dateNow(); - } - }; - DateTimeFormatter f = new DateTimeFormatterBuilder().appendValue(field).toFormatter(); + public void test_fieldResolvesToChronoLocalDateTime_noOverrideChrono_wrongChrono() { + ChronoLocalDateTime cldt = ThaiBuddhistChronology.INSTANCE.dateNow().atTime(LocalTime.NOON); + DateTimeFormatter f = new DateTimeFormatterBuilder().appendValue(new ResolvingField(cldt)).toFormatter(); f.parse("1234567890"); } @Test(expectedExceptions = DateTimeParseException.class) - public void test_fieldResolvesWrongZone() { - TemporalField field = new TemporalField() { - @Override - public TemporalUnit getBaseUnit() { - throw new UnsupportedOperationException(); - } - @Override - public TemporalUnit getRangeUnit() { - throw new UnsupportedOperationException(); - } - @Override - public ValueRange range() { - throw new UnsupportedOperationException(); - } - @Override - public boolean isDateBased() { - throw new UnsupportedOperationException(); - } - @Override - public boolean isTimeBased() { - throw new UnsupportedOperationException(); - } - @Override - public boolean isSupportedBy(TemporalAccessor temporal) { - throw new UnsupportedOperationException(); - } - @Override - public ValueRange rangeRefinedBy(TemporalAccessor temporal) { - throw new UnsupportedOperationException(); - } - @Override - public long getFrom(TemporalAccessor temporal) { - throw new UnsupportedOperationException(); - } - @Override - public R adjustInto(R temporal, long newValue) { - throw new UnsupportedOperationException(); - } - @Override - public TemporalAccessor resolve( - Map fieldValues, TemporalAccessor partialTemporal, ResolverStyle resolverStyle) { - return ZonedDateTime.of(2010, 6, 30, 12, 30, 0, 0, ZoneId.of("Europe/Paris")); - } - }; - DateTimeFormatter f = new DateTimeFormatterBuilder().appendValue(field).toFormatter().withZone(ZoneId.of("Europe/London")); + public void test_fieldResolvesToChronoLocalDateTime_overrideChrono_wrongChrono() { + ChronoLocalDateTime cldt = ThaiBuddhistChronology.INSTANCE.dateNow().atTime(LocalTime.NOON); + DateTimeFormatter f = new DateTimeFormatterBuilder().appendValue(new ResolvingField(cldt)).toFormatter(); + f = f.withChronology(MinguoChronology.INSTANCE); f.parse("1234567890"); } + //------------------------------------------------------------------------- + @Test + public void test_fieldResolvesToChronoZonedDateTime_noOverrideChrono_matches() { + ZonedDateTime zdt = ZonedDateTime.of(2010, 6, 30, 12, 30, 0, 0, EUROPE_PARIS); + DateTimeFormatter f = new DateTimeFormatterBuilder().appendValue(new ResolvingField(zdt)).toFormatter(); + TemporalAccessor accessor = f.parse("1234567890"); + assertEquals(accessor.query(TemporalQueries.localDate()), LocalDate.of(2010, 6, 30)); + assertEquals(accessor.query(TemporalQueries.localTime()), LocalTime.of(12, 30)); + assertEquals(accessor.query(TemporalQueries.chronology()), IsoChronology.INSTANCE); + assertEquals(accessor.query(TemporalQueries.zoneId()), EUROPE_PARIS); + } + + @Test + public void test_fieldResolvesToChronoZonedDateTime_overrideChrono_matches() { + MinguoDate mdt = MinguoDate.of(100, 6, 30); + ChronoZonedDateTime mzdt = mdt.atTime(LocalTime.NOON).atZone(EUROPE_PARIS); + DateTimeFormatter f = new DateTimeFormatterBuilder().appendValue(new ResolvingField(mzdt)).toFormatter(); + f = f.withChronology(MinguoChronology.INSTANCE); + TemporalAccessor accessor = f.parse("1234567890"); + assertEquals(accessor.query(TemporalQueries.localDate()), LocalDate.from(mdt)); + assertEquals(accessor.query(TemporalQueries.localTime()), LocalTime.NOON); + assertEquals(accessor.query(TemporalQueries.chronology()), MinguoChronology.INSTANCE); + assertEquals(accessor.query(TemporalQueries.zoneId()), EUROPE_PARIS); + } + + @Test(expectedExceptions = DateTimeParseException.class) + public void test_fieldResolvesToChronoZonedDateTime_noOverrideChrono_wrongChrono() { + ChronoZonedDateTime cldt = ThaiBuddhistChronology.INSTANCE.dateNow().atTime(LocalTime.NOON).atZone(EUROPE_PARIS); + DateTimeFormatter f = new DateTimeFormatterBuilder().appendValue(new ResolvingField(cldt)).toFormatter(); + f.parse("1234567890"); + } + + @Test(expectedExceptions = DateTimeParseException.class) + public void test_fieldResolvesToChronoZonedDateTime_overrideChrono_wrongChrono() { + ChronoZonedDateTime cldt = ThaiBuddhistChronology.INSTANCE.dateNow().atTime(LocalTime.NOON).atZone(EUROPE_PARIS); + DateTimeFormatter f = new DateTimeFormatterBuilder().appendValue(new ResolvingField(cldt)).toFormatter(); + f = f.withChronology(MinguoChronology.INSTANCE); + f.parse("1234567890"); + } + + @Test + public void test_fieldResolvesToChronoZonedDateTime_overrideZone_matches() { + ZonedDateTime zdt = ZonedDateTime.of(2010, 6, 30, 12, 30, 0, 0, EUROPE_PARIS); + DateTimeFormatter f = new DateTimeFormatterBuilder().appendValue(new ResolvingField(zdt)).toFormatter(); + f = f.withZone(EUROPE_PARIS); + assertEquals(f.parse("1234567890", ZonedDateTime::from), zdt); + } + + @Test(expectedExceptions = DateTimeParseException.class) + public void test_fieldResolvesToChronoZonedDateTime_overrideZone_wrongZone() { + ZonedDateTime zdt = ZonedDateTime.of(2010, 6, 30, 12, 30, 0, 0, EUROPE_PARIS); + DateTimeFormatter f = new DateTimeFormatterBuilder().appendValue(new ResolvingField(zdt)).toFormatter(); + f = f.withZone(ZoneId.of("Europe/London")); + f.parse("1234567890"); + } + + //------------------------------------------------------------------------- + private static class ResolvingField implements TemporalField { + private final TemporalAccessor resolvedValue; + ResolvingField(TemporalAccessor resolvedValue) { + this.resolvedValue = resolvedValue; + } + @Override + public TemporalUnit getBaseUnit() { + throw new UnsupportedOperationException(); + } + @Override + public TemporalUnit getRangeUnit() { + throw new UnsupportedOperationException(); + } + @Override + public ValueRange range() { + throw new UnsupportedOperationException(); + } + @Override + public boolean isDateBased() { + throw new UnsupportedOperationException(); + } + @Override + public boolean isTimeBased() { + throw new UnsupportedOperationException(); + } + @Override + public boolean isSupportedBy(TemporalAccessor temporal) { + throw new UnsupportedOperationException(); + } + @Override + public ValueRange rangeRefinedBy(TemporalAccessor temporal) { + throw new UnsupportedOperationException(); + } + @Override + public long getFrom(TemporalAccessor temporal) { + throw new UnsupportedOperationException(); + } + @Override + public R adjustInto(R temporal, long newValue) { + throw new UnsupportedOperationException(); + } + @Override + public TemporalAccessor resolve( + Map fieldValues, TemporalAccessor partialTemporal, ResolverStyle resolverStyle) { + fieldValues.remove(this); + return resolvedValue; + } + }; + } From a9f20cb4c7e252b365db481d6f81691c8cced85f Mon Sep 17 00:00:00 2001 From: Pavel Rappo Date: Mon, 24 Mar 2014 14:35:32 -0700 Subject: [PATCH 085/116] 8038163: Build failure on Mac OS 10.9.2 (Mavericks) due to warning treated as error Add parentheses to conditional expression to appease compiler. Reviewed-by: sla, alanb --- jdk/src/share/back/eventFilter.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jdk/src/share/back/eventFilter.c b/jdk/src/share/back/eventFilter.c index bbb344594bc..d3eeb4d077c 100644 --- a/jdk/src/share/back/eventFilter.c +++ b/jdk/src/share/back/eventFilter.c @@ -288,7 +288,7 @@ static jboolean isVersionGte12x() { >> JVMTI_VERSION_SHIFT_MAJOR; minor = (version & JVMTI_VERSION_MASK_MINOR) >> JVMTI_VERSION_SHIFT_MINOR; - return (major > 1 || major == 1 && minor >= 2); + return (major > 1 || (major == 1 && minor >= 2)) ? JNI_TRUE : JNI_FALSE; } else { return JNI_FALSE; } From 6f3216994cd8eeaa4786b63479e60453f24d2913 Mon Sep 17 00:00:00 2001 From: Chris Hegarty Date: Tue, 25 Mar 2014 09:31:37 +0000 Subject: [PATCH 086/116] 8034181: SIGBUS in SctpChannelImpl receive Reviewed-by: alanb, dsamersoff --- .../native/sun/nio/ch/sctp/SctpChannelImpl.c | 49 +++- .../sctp/SctpChannel/ReceiveIntoDirect.java | 273 ++++++++++++++++++ 2 files changed, 314 insertions(+), 8 deletions(-) create mode 100644 jdk/test/com/sun/nio/sctp/SctpChannel/ReceiveIntoDirect.java diff --git a/jdk/src/solaris/native/sun/nio/ch/sctp/SctpChannelImpl.c b/jdk/src/solaris/native/sun/nio/ch/sctp/SctpChannelImpl.c index 54e16af7f6b..c74af9607f1 100644 --- a/jdk/src/solaris/native/sun/nio/ch/sctp/SctpChannelImpl.c +++ b/jdk/src/solaris/native/sun/nio/ch/sctp/SctpChannelImpl.c @@ -38,8 +38,7 @@ #include "sun_nio_ch_sctp_ResultContainer.h" #include "sun_nio_ch_sctp_PeerAddrChange.h" -/* sizeof(union sctp_notification */ -#define NOTIFICATION_BUFFER_SIZE 280 +static int SCTP_NOTIFICATION_SIZE = sizeof(union sctp_notification); #define MESSAGE_IMPL_CLASS "sun/nio/ch/sctp/MessageInfoImpl" #define RESULT_CONTAINER_CLASS "sun/nio/ch/sctp/ResultContainer" @@ -463,20 +462,47 @@ JNIEXPORT jint JNICALL Java_sun_nio_ch_sctp_SctpChannelImpl_receive0 if (msg->msg_flags & MSG_NOTIFICATION) { char *bufp = (char*)addr; union sctp_notification *snp; + jboolean allocated = JNI_FALSE; - if (!(msg->msg_flags & MSG_EOR) && length < NOTIFICATION_BUFFER_SIZE) { - char buf[NOTIFICATION_BUFFER_SIZE]; + if (rv > SCTP_NOTIFICATION_SIZE) { + JNU_ThrowInternalError(env, "should not reach here"); + return -1; + } + + if (!(msg->msg_flags & MSG_EOR) && length < SCTP_NOTIFICATION_SIZE) { + char* newBuf; int rvSAVE = rv; - memcpy(buf, addr, rv); - iov->iov_base = buf + rv; - iov->iov_len = NOTIFICATION_BUFFER_SIZE - rv; + + if ((newBuf = malloc(SCTP_NOTIFICATION_SIZE)) == NULL) { + JNU_ThrowOutOfMemoryError(env, "Out of native heap space."); + return -1; + } + allocated = JNI_TRUE; + + memcpy(newBuf, addr, rv); + iov->iov_base = newBuf + rv; + iov->iov_len = SCTP_NOTIFICATION_SIZE - rv; if ((rv = recvmsg(fd, msg, flags)) < 0) { handleSocketError(env, errno); return 0; } - bufp = buf; + bufp = newBuf; rv += rvSAVE; } +#ifdef __sparc + else if ((intptr_t)addr & 0x3) { + /* the given buffer is not 4 byte aligned */ + char* newBuf; + if ((newBuf = malloc(SCTP_NOTIFICATION_SIZE)) == NULL) { + JNU_ThrowOutOfMemoryError(env, "Out of native heap space."); + return -1; + } + allocated = JNI_TRUE; + + memcpy(newBuf, addr, rv); + bufp = newBuf; + } +#endif snp = (union sctp_notification *) bufp; if (handleNotification(env, fd, resultContainerObj, snp, rv, (msg->msg_flags & MSG_EOR), @@ -484,9 +510,16 @@ JNIEXPORT jint JNICALL Java_sun_nio_ch_sctp_SctpChannelImpl_receive0 /* We have received a notification that is of interest to to the Java API. The appropriate notification will be set in the result container. */ + if (allocated == JNI_TRUE) { + free(bufp); + } return 0; } + if (allocated == JNI_TRUE) { + free(bufp); + } + // set iov back to addr, and reset msg_controllen iov->iov_base = addr; iov->iov_len = length; diff --git a/jdk/test/com/sun/nio/sctp/SctpChannel/ReceiveIntoDirect.java b/jdk/test/com/sun/nio/sctp/SctpChannel/ReceiveIntoDirect.java new file mode 100644 index 00000000000..00810cb5991 --- /dev/null +++ b/jdk/test/com/sun/nio/sctp/SctpChannel/ReceiveIntoDirect.java @@ -0,0 +1,273 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* @test + * @bug 8034181 + * @summary SIGBUS at Java_sun_nio_ch_SctpChannelImpl_receive0 + * @author chegar + */ + +import java.net.InetSocketAddress; +import java.net.SocketAddress; +import java.io.IOException; +import java.nio.ByteBuffer; +import com.sun.nio.sctp.AbstractNotificationHandler; +import com.sun.nio.sctp.AssociationChangeNotification; +import com.sun.nio.sctp.AssociationChangeNotification.AssocChangeEvent; +import com.sun.nio.sctp.HandlerResult; +import com.sun.nio.sctp.MessageInfo; +import com.sun.nio.sctp.Notification; +import com.sun.nio.sctp.PeerAddressChangeNotification; +import com.sun.nio.sctp.SctpChannel; +import com.sun.nio.sctp.SctpServerChannel; +import com.sun.nio.sctp.ShutdownNotification; +import static java.lang.System.out; +import static java.lang.System.err; +import static java.nio.charset.StandardCharsets.US_ASCII; + +public class ReceiveIntoDirect { + /* suitably small message to NOT overrun small buffers */ + final byte[] msgBytes = "Hello".getBytes(US_ASCII); + + void test(String[] args) throws IOException { + SocketAddress address = null; + Server server; + + if (!Util.isSCTPSupported()) { + out.println("SCTP protocol is not supported"); + out.println("Test cannot be run"); + return; + } + + if (args.length == 2) { + /* requested to connecct to a specific address */ + try { + int port = Integer.valueOf(args[1]); + address = new InetSocketAddress(args[0], port); + } catch (NumberFormatException nfe) { + err.println(nfe); + } + } else { + /* start server on local machine, default */ + server = new Server(); + server.start(); + address = server.address(); + debug("Server started and listening on " + address); + } + + /* many combinations with varing buffer sizes, and offsets */ + runWithManyOffsets(address, 20); + runWithManyOffsets(address, 49); + runWithManyOffsets(address, 50); + runWithManyOffsets(address, 51); + runWithManyOffsets(address, 1024); + } + + void runWithManyOffsets(SocketAddress addr, int bufferSize) + throws IOException + { + doTest(addr, bufferSize, 1); + doTest(addr, bufferSize, 2); + doTest(addr, bufferSize, 3); + doTest(addr, bufferSize, 4); + doTest(addr, bufferSize, 5); + doTest(addr, bufferSize, 6); + doTest(addr, bufferSize, 7); + doTest(addr, bufferSize, 8); + doTest(addr, bufferSize, 9); + doTest(addr, bufferSize, 10); + doTest(addr, bufferSize, 11); + doTest(addr, bufferSize, 12); + doTest(addr, bufferSize, 13); + doTest(addr, bufferSize, 14); + doTest(addr, bufferSize, 15); + } + + void doTest(SocketAddress peerAddress, int bufferSize, int bufferOffset) + throws IOException + { + debug("\n\nTesting with bufferSize " + bufferSize + " and offset " + bufferOffset); + assert bufferOffset + msgBytes.length <= bufferSize : + "buffer offset + message length greater than buffer size "; + + ByteBuffer buffer = ByteBuffer.allocateDirect(bufferSize); + MessageInfo info; + + try (SctpChannel channel = SctpChannel.open()) { + channel.connect(peerAddress); + + ReceiveNotificationHandler handler = + new ReceiveNotificationHandler(); + + /* TEST 1: Assoc/peer change notif into direct buffer with offest */ + do { + debug("Test 1: Assoc/peer change with offset " + bufferOffset); + buffer.position(bufferOffset); + info = channel.receive(buffer, null, handler); + if (info == null) { + fail("unexpected null from receive"); + return; + } + } while (!info.isComplete()); + + buffer.flip().position(bufferOffset); + check(handler.receivedCommUp(), "SCTP_COMM_UP not received"); + check(info != null, "info is null"); + check(info.address() != null, "address is null"); + check(info.association() != null, "association is null"); + check(info.isComplete(), "message is not complete"); + check(info.isUnordered() != true, + "message should not be unordered"); + check(info.streamNumber() >= 0, "invalid stream number"); + check(info.bytes() == msgBytes.length, + "bytes received not equal to message length"); + check(info.bytes() == buffer.remaining(), "bytes != remaining"); + check(Util.compare(buffer, msgBytes), + "received message not the same as sent message"); + + /* TEST 2: shutdown notification with offset */ + debug("Test 2: shutdown notif with offset " + bufferOffset); + buffer.clear().position(bufferOffset); + while ((info = channel.receive(buffer, null, handler )) != null && + info.bytes() != -1 ); + } + } + + class Server implements Runnable + { + private final InetSocketAddress serverAddr; + private final SctpServerChannel ssc; + + public Server() throws IOException { + ssc = SctpServerChannel.open().bind(null); + java.util.Set addrs = ssc.getAllLocalAddresses(); + if (addrs.isEmpty()) + debug("addrs should not be empty"); + + serverAddr = (InetSocketAddress) addrs.iterator().next(); + } + + public void start() { + (new Thread(this, "Server-" + serverAddr.getPort())).start(); + } + + public InetSocketAddress address() { + return serverAddr; + } + + @Override + public void run() { + try { + for (int i=0; i<75; i++) { // there are 75 client combinations + SctpChannel sc = ssc.accept(); + + /* send a small message */ + MessageInfo info = MessageInfo.createOutgoing(null, 0); + ByteBuffer buf = ByteBuffer.allocateDirect(Util.SMALL_BUFFER); + buf.put(msgBytes); + buf.flip(); + + debug("sending small message: " + buf); + sc.send(buf, info); + + sc.shutdown(); + sc.close(); + } + } catch (IOException x) { + unexpected(x); + } finally { + try { ssc.close(); } + catch (IOException x) { unexpected(x); } + } + } + } + + class ReceiveNotificationHandler extends AbstractNotificationHandler + { + boolean receivedCommUp; // false + + public ReceiveNotificationHandler() { } + + public boolean receivedCommUp() { + return receivedCommUp; + } + + @Override + public HandlerResult handleNotification( + Notification notification, Object attachment) { + fail("Unknown notification type"); + return HandlerResult.CONTINUE; + } + + @Override + public HandlerResult handleNotification( + AssociationChangeNotification notification, Object attachment) { + AssocChangeEvent event = notification.event(); + debug("AssociationChangeNotification"); + debug(" Association: " + notification.association()); + debug(" Event: " + event); + + if (event.equals(AssocChangeEvent.COMM_UP)) + receivedCommUp = true; + + return HandlerResult.CONTINUE; + } + + @Override + public HandlerResult handleNotification( + PeerAddressChangeNotification pacn, Object unused) + { + debug("PeerAddressChangeNotification: " + pacn); + return HandlerResult.CONTINUE; + } + + @Override + public HandlerResult handleNotification( + ShutdownNotification notification, Object attachment) { + debug("ShutdownNotification"); + debug(" Association: " + notification.association()); + return HandlerResult.CONTINUE; + } + } + //--------------------- Infrastructure --------------------------- + boolean debug = true; + volatile int passed = 0, failed = 0; + void pass() {passed++;} + void fail() {failed++; Thread.dumpStack();} + void fail(String msg) {System.err.println(msg); fail();} + void unexpected(Throwable t) {failed++; t.printStackTrace();} + void check(boolean cond) {if (cond) pass(); else fail();} + void check(boolean cond, String failMessage) {if (cond) pass(); else fail(failMessage);} + void debug(String message) {if(debug) { + System.out.println(Thread.currentThread() + " " + message); } } + public static void main(String[] args) throws Throwable { + Class k = new Object(){}.getClass().getEnclosingClass(); + try {k.getMethod("instanceMain",String[].class) + .invoke( k.newInstance(), (Object) args);} + catch (Throwable e) {throw e.getCause();}} + public void instanceMain(String[] args) throws Throwable { + try {test(args);} catch (Throwable t) {unexpected(t);} + System.out.printf("%nPassed = %d, failed = %d%n%n", passed, failed); + if (failed > 0) throw new AssertionError("Some tests failed");} + +} From df046b387e9f75db1d48fa13662a7a33d4356a41 Mon Sep 17 00:00:00 2001 From: Michael Cui Date: Tue, 25 Mar 2014 10:14:09 +0000 Subject: [PATCH 087/116] 8031563: TEST_BUG: java/nio/channels/Selector/ChangingInterests.java failed once Reviewed-by: alanb --- jdk/test/java/nio/channels/Selector/ChangingInterests.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/jdk/test/java/nio/channels/Selector/ChangingInterests.java b/jdk/test/java/nio/channels/Selector/ChangingInterests.java index 59f62100676..c3e1dbd0964 100644 --- a/jdk/test/java/nio/channels/Selector/ChangingInterests.java +++ b/jdk/test/java/nio/channels/Selector/ChangingInterests.java @@ -138,8 +138,10 @@ public class ChangingInterests { ServerSocketChannel.open().bind(new InetSocketAddress(0)); final SocketChannel sc = SocketChannel.open(); + sc.setOption(StandardSocketOptions.TCP_NODELAY, true); sc.connect(new InetSocketAddress(lh, ssc.socket().getLocalPort())); SocketChannel peer = ssc.accept(); + peer.setOption(StandardSocketOptions.TCP_NODELAY, true); sc.configureBlocking(false); From dacbf835c233fc1f1e7112ebe101c87a98725bfe Mon Sep 17 00:00:00 2001 From: "J. Duke" Date: Wed, 5 Jul 2017 19:32:12 +0200 Subject: [PATCH 088/116] Added tag jdk9-b04 for changeset 099891b1d86f --- .hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/.hgtags b/.hgtags index 49424e043a0..eff3e6958c3 100644 --- a/.hgtags +++ b/.hgtags @@ -246,3 +246,4 @@ a1ee9743f4ee165eae59389a020f2552f895dac8 jdk8-b120 f130ca87de6637acae7d99fcd7a8573eea1cbaed jdk9-b01 b32e2219736e42baaf45daf0ad67ed34f6033799 jdk9-b02 7f655f31f9bcee618cf832f08176ad8c1ed3fdd3 jdk9-b03 +099891b1d86f3719e116ac717ffdafc90d037fb7 jdk9-b04 From 199b5e559802de4167b11f6f76d2af6cf1b96e4a Mon Sep 17 00:00:00 2001 From: "J. Duke" Date: Wed, 5 Jul 2017 19:32:44 +0200 Subject: [PATCH 089/116] Added tag jdk9-b05 for changeset dd311791ad68 --- .hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/.hgtags b/.hgtags index eff3e6958c3..82b9404a86c 100644 --- a/.hgtags +++ b/.hgtags @@ -247,3 +247,4 @@ f130ca87de6637acae7d99fcd7a8573eea1cbaed jdk9-b01 b32e2219736e42baaf45daf0ad67ed34f6033799 jdk9-b02 7f655f31f9bcee618cf832f08176ad8c1ed3fdd3 jdk9-b03 099891b1d86f3719e116ac717ffdafc90d037fb7 jdk9-b04 +dd311791ad6895a3989020dd6c6c46db87972ab8 jdk9-b05 From 3092f76b6ede80a3796d1fc0c84346e0f5ad24ff Mon Sep 17 00:00:00 2001 From: Rajan Halade Date: Tue, 25 Mar 2014 20:32:07 -0400 Subject: [PATCH 090/116] 8037258: AIOB while parsing CRL for revoked certificate Reviewed-by: mullan --- .../security/x509/CRLReasonCodeExtension.java | 42 +++---------------- 1 file changed, 5 insertions(+), 37 deletions(-) diff --git a/jdk/src/share/classes/sun/security/x509/CRLReasonCodeExtension.java b/jdk/src/share/classes/sun/security/x509/CRLReasonCodeExtension.java index 0016bc18cd3..5212b0e78b5 100644 --- a/jdk/src/share/classes/sun/security/x509/CRLReasonCodeExtension.java +++ b/jdk/src/share/classes/sun/security/x509/CRLReasonCodeExtension.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -34,29 +34,9 @@ import sun.security.util.*; /** * The reasonCode is a non-critical CRL entry extension that identifies - * the reason for the certificate revocation. CAs are strongly - * encouraged to include reason codes in CRL entries; however, the - * reason code CRL entry extension should be absent instead of using the - * unspecified (0) reasonCode value. - *

      The ASN.1 syntax for this is: - *

      - *  id-ce-cRLReason OBJECT IDENTIFIER ::= { id-ce 21 }
      - *
      - *  -- reasonCode ::= { CRLReason }
      - *
      - * CRLReason ::= ENUMERATED {
      - *    unspecified             (0),
      - *    keyCompromise           (1),
      - *    cACompromise            (2),
      - *    affiliationChanged      (3),
      - *    superseded              (4),
      - *    cessationOfOperation    (5),
      - *    certificateHold         (6),
      - *    removeFromCRL           (8),
      - *    privilegeWithdrawn      (9),
      - *    aACompromise           (10) }
      - * 
      + * the reason for the certificate revocation. * @author Hemma Prafullchandra + * @see java.security.cert.CRLReason * @see Extension * @see CertAttrSet */ @@ -64,23 +44,11 @@ public class CRLReasonCodeExtension extends Extension implements CertAttrSet { /** - * Attribute name and Reason codes + * Attribute name */ public static final String NAME = "CRLReasonCode"; public static final String REASON = "reason"; - public static final int UNSPECIFIED = 0; - public static final int KEY_COMPROMISE = 1; - public static final int CA_COMPROMISE = 2; - public static final int AFFLIATION_CHANGED = 3; - public static final int SUPERSEDED = 4; - public static final int CESSATION_OF_OPERATION = 5; - public static final int CERTIFICATE_HOLD = 6; - // note 7 missing in syntax - public static final int REMOVE_FROM_CRL = 8; - public static final int PRIVILEGE_WITHDRAWN = 9; - public static final int AA_COMPROMISE = 10; - private static CRLReason[] values = CRLReason.values(); private int reasonCode = 0; @@ -181,7 +149,7 @@ public class CRLReasonCodeExtension extends Extension * Returns a printable representation of the Reason code. */ public String toString() { - return super.toString() + " Reason Code: " + values[reasonCode]; + return super.toString() + " Reason Code: " + getReasonCode(); } /** From 0c0e4775d4a3da8c2f87dcf1d4ea1447b27703ff Mon Sep 17 00:00:00 2001 From: Ivan Gerasimov Date: Wed, 26 Mar 2014 15:58:37 +0400 Subject: [PATCH 091/116] 8014066: Remove redundant restriction from ArrayList#removeRange() spec Reviewed-by: chegar, dholmes, martin, mduigou --- .../share/classes/java/util/ArrayList.java | 12 +++++++++- jdk/test/java/util/Collection/MOAT.java | 23 +++++++++++++++++++ 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/jdk/src/share/classes/java/util/ArrayList.java b/jdk/src/share/classes/java/util/ArrayList.java index b06c8fd1913..cdae99d0534 100644 --- a/jdk/src/share/classes/java/util/ArrayList.java +++ b/jdk/src/share/classes/java/util/ArrayList.java @@ -609,11 +609,14 @@ public class ArrayList extends AbstractList * @throws IndexOutOfBoundsException if {@code fromIndex} or * {@code toIndex} is out of range * ({@code fromIndex < 0 || - * fromIndex >= size() || * toIndex > size() || * toIndex < fromIndex}) */ protected void removeRange(int fromIndex, int toIndex) { + if (fromIndex > toIndex) { + throw new IndexOutOfBoundsException( + outOfBoundsMsg(fromIndex, toIndex)); + } modCount++; int numMoved = size - toIndex; System.arraycopy(elementData, toIndex, elementData, fromIndex, @@ -655,6 +658,13 @@ public class ArrayList extends AbstractList return "Index: "+index+", Size: "+size; } + /** + * A version used in checking (fromIndex > toIndex) condition + */ + private static String outOfBoundsMsg(int fromIndex, int toIndex) { + return "From Index: " + fromIndex + " > To Index: " + toIndex; + } + /** * Removes from this list all of its elements that are contained in the * specified collection. diff --git a/jdk/test/java/util/Collection/MOAT.java b/jdk/test/java/util/Collection/MOAT.java index 88914952799..f50682fea24 100644 --- a/jdk/test/java/util/Collection/MOAT.java +++ b/jdk/test/java/util/Collection/MOAT.java @@ -54,6 +54,7 @@ import java.io.*; import java.util.*; import java.util.concurrent.*; import static java.util.Collections.*; +import java.lang.reflect.*; public class MOAT { public static void realMain(String[] args) { @@ -721,6 +722,28 @@ public class MOAT { equal(l instanceof RandomAccess, l.subList(0,0) instanceof RandomAccess); + + l.iterator(); + l.listIterator(); + l.listIterator(0); + l.listIterator(l.size()); + THROWS(IndexOutOfBoundsException.class, + new Fun(){void f(){l.listIterator(-1);}}, + new Fun(){void f(){l.listIterator(l.size() + 1);}}); + + if (l instanceof AbstractList) { + try { + int size = l.size(); + AbstractList abList = (AbstractList) l; + Method m = AbstractList.class.getDeclaredMethod("removeRange", new Class[] { int.class, int.class }); + m.setAccessible(true); + m.invoke(abList, new Object[] { 0, 0 }); + m.invoke(abList, new Object[] { size, size }); + equal(size, l.size()); + } + catch (UnsupportedOperationException ignored) {/* OK */} + catch (Throwable t) { unexpected(t); } + } } private static void testCollection(Collection c) { From b7a4487e548e6d9a2daa216743b4b79158ed8d0d Mon Sep 17 00:00:00 2001 From: Alan Bateman Date: Wed, 26 Mar 2014 12:25:09 +0000 Subject: [PATCH 092/116] 8038343: Eliminate use of reflection to access JavaBeans Introspector Reviewed-by: mchung, malenkov --- .../com/sun/jmx/mbeanserver/Introspector.java | 157 ++++-------------- .../classes/java/beans/Introspector.java | 16 ++ .../sun/misc/JavaBeansIntrospectorAccess.java | 32 ++++ .../share/classes/sun/misc/SharedSecrets.java | 9 + 4 files changed, 87 insertions(+), 127 deletions(-) create mode 100644 jdk/src/share/classes/sun/misc/JavaBeansIntrospectorAccess.java diff --git a/jdk/src/share/classes/com/sun/jmx/mbeanserver/Introspector.java b/jdk/src/share/classes/com/sun/jmx/mbeanserver/Introspector.java index 89d325d695c..076b49cec63 100644 --- a/jdk/src/share/classes/com/sun/jmx/mbeanserver/Introspector.java +++ b/jdk/src/share/classes/com/sun/jmx/mbeanserver/Introspector.java @@ -55,6 +55,9 @@ import java.lang.reflect.InvocationTargetException; import java.security.AccessController; import javax.management.AttributeNotFoundException; import javax.management.openmbean.CompositeData; + +import sun.misc.JavaBeansIntrospectorAccess; +import sun.misc.SharedSecrets; import sun.reflect.misc.MethodUtil; import sun.reflect.misc.ReflectUtil; @@ -549,16 +552,9 @@ public class Introspector { // Java Beans introspection // Class clazz = complex.getClass(); - Method readMethod = null; - if (BeansHelper.isAvailable()) { - Object bi = BeansHelper.getBeanInfo(clazz); - Object[] pds = BeansHelper.getPropertyDescriptors(bi); - for (Object pd: pds) { - if (BeansHelper.getPropertyName(pd).equals(element)) { - readMethod = BeansHelper.getReadMethod(pd); - break; - } - } + Method readMethod; + if (BeansIntrospector.isAvailable()) { + readMethod = BeansIntrospector.getReadMethod(clazz, element); } else { // Java Beans not available so use simple introspection // to locate method @@ -583,6 +579,30 @@ public class Introspector { } } + /** + * Provides access to java.beans.Introspector if available. + */ + private static class BeansIntrospector { + private static final JavaBeansIntrospectorAccess JBIA; + static { + // ensure that java.beans.Introspector is initialized (if present) + try { + Class.forName("java.beans.Introspector", true, + BeansIntrospector.class.getClassLoader()); + } catch (ClassNotFoundException ignore) { } + + JBIA = SharedSecrets.getJavaBeansIntrospectorAccess(); + } + + static boolean isAvailable() { + return JBIA != null; + } + + static Method getReadMethod(Class clazz, String property) throws Exception { + return JBIA.getReadMethod(clazz, property); + } + } + /** * A simple introspector that uses reflection to analyze a class and * identify its "getter" methods. This class is intended for use only when @@ -696,121 +716,4 @@ public class Introspector { return null; } } - - /** - * A class that provides access to the JavaBeans Introspector and - * PropertyDescriptors without creating a static dependency on java.beans. - */ - private static class BeansHelper { - private static final Class introspectorClass = - getClass("java.beans.Introspector"); - private static final Class beanInfoClass = - (introspectorClass == null) ? null : getClass("java.beans.BeanInfo"); - private static final Class getPropertyDescriptorClass = - (beanInfoClass == null) ? null : getClass("java.beans.PropertyDescriptor"); - - private static final Method getBeanInfo = - getMethod(introspectorClass, "getBeanInfo", Class.class); - private static final Method getPropertyDescriptors = - getMethod(beanInfoClass, "getPropertyDescriptors"); - private static final Method getPropertyName = - getMethod(getPropertyDescriptorClass, "getName"); - private static final Method getReadMethod = - getMethod(getPropertyDescriptorClass, "getReadMethod"); - - private static Class getClass(String name) { - try { - return Class.forName(name, true, null); - } catch (ClassNotFoundException e) { - return null; - } - } - private static Method getMethod(Class clazz, - String name, - Class... paramTypes) - { - if (clazz != null) { - try { - return clazz.getMethod(name, paramTypes); - } catch (NoSuchMethodException e) { - throw new AssertionError(e); - } - } else { - return null; - } - } - - private BeansHelper() { } - - /** - * Returns {@code true} if java.beans is available. - */ - static boolean isAvailable() { - return introspectorClass != null; - } - - /** - * Invokes java.beans.Introspector.getBeanInfo(Class) - */ - static Object getBeanInfo(Class clazz) throws Exception { - try { - return getBeanInfo.invoke(null, clazz); - } catch (InvocationTargetException e) { - Throwable cause = e.getCause(); - if (cause instanceof Exception) - throw (Exception)cause; - throw new AssertionError(e); - } catch (IllegalAccessException iae) { - throw new AssertionError(iae); - } - } - - /** - * Invokes java.beans.BeanInfo.getPropertyDescriptors() - */ - static Object[] getPropertyDescriptors(Object bi) { - try { - return (Object[])getPropertyDescriptors.invoke(bi); - } catch (InvocationTargetException e) { - Throwable cause = e.getCause(); - if (cause instanceof RuntimeException) - throw (RuntimeException)cause; - throw new AssertionError(e); - } catch (IllegalAccessException iae) { - throw new AssertionError(iae); - } - } - - /** - * Invokes java.beans.PropertyDescriptor.getName() - */ - static String getPropertyName(Object pd) { - try { - return (String)getPropertyName.invoke(pd); - } catch (InvocationTargetException e) { - Throwable cause = e.getCause(); - if (cause instanceof RuntimeException) - throw (RuntimeException)cause; - throw new AssertionError(e); - } catch (IllegalAccessException iae) { - throw new AssertionError(iae); - } - } - - /** - * Invokes java.beans.PropertyDescriptor.getReadMethod() - */ - static Method getReadMethod(Object pd) { - try { - return (Method)getReadMethod.invoke(pd); - } catch (InvocationTargetException e) { - Throwable cause = e.getCause(); - if (cause instanceof RuntimeException) - throw (RuntimeException)cause; - throw new AssertionError(e); - } catch (IllegalAccessException iae) { - throw new AssertionError(iae); - } - } - } } diff --git a/jdk/src/share/classes/java/beans/Introspector.java b/jdk/src/share/classes/java/beans/Introspector.java index 01b24ada112..38169518386 100644 --- a/jdk/src/share/classes/java/beans/Introspector.java +++ b/jdk/src/share/classes/java/beans/Introspector.java @@ -47,6 +47,8 @@ import java.util.EventObject; import java.util.List; import java.util.TreeMap; +import sun.misc.JavaBeansIntrospectorAccess; +import sun.misc.SharedSecrets; import sun.reflect.misc.ReflectUtil; /** @@ -140,6 +142,20 @@ public class Introspector { static final String SET_PREFIX = "set"; static final String IS_PREFIX = "is"; + // register with SharedSecrets for JMX usage + static { + SharedSecrets.setJavaBeansIntrospectorAccess((clazz, property) -> { + BeanInfo bi = Introspector.getBeanInfo(clazz); + PropertyDescriptor[] pds = bi.getPropertyDescriptors(); + for (PropertyDescriptor pd: pds) { + if (pd.getName().equals(property)) { + return pd.getReadMethod(); + } + } + return null; + }); + } + //====================================================================== // Public methods //====================================================================== diff --git a/jdk/src/share/classes/sun/misc/JavaBeansIntrospectorAccess.java b/jdk/src/share/classes/sun/misc/JavaBeansIntrospectorAccess.java new file mode 100644 index 00000000000..c32f24c655f --- /dev/null +++ b/jdk/src/share/classes/sun/misc/JavaBeansIntrospectorAccess.java @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package sun.misc; + +import java.lang.reflect.Method; + +public interface JavaBeansIntrospectorAccess { + Method getReadMethod(Class clazz, String property) throws Exception; +} diff --git a/jdk/src/share/classes/sun/misc/SharedSecrets.java b/jdk/src/share/classes/sun/misc/SharedSecrets.java index bfb7c5b6203..3e268759bc7 100644 --- a/jdk/src/share/classes/sun/misc/SharedSecrets.java +++ b/jdk/src/share/classes/sun/misc/SharedSecrets.java @@ -55,6 +55,7 @@ public class SharedSecrets { private static JavaSecurityAccess javaSecurityAccess; private static JavaUtilZipFileAccess javaUtilZipFileAccess; private static JavaAWTAccess javaAWTAccess; + private static JavaBeansIntrospectorAccess javaBeansIntrospectorAccess; public static JavaUtilJarAccess javaUtilJarAccess() { if (javaUtilJarAccess == null) { @@ -184,4 +185,12 @@ public class SharedSecrets { } return javaAWTAccess; } + + public static JavaBeansIntrospectorAccess getJavaBeansIntrospectorAccess() { + return javaBeansIntrospectorAccess; + } + + public static void setJavaBeansIntrospectorAccess(JavaBeansIntrospectorAccess access) { + javaBeansIntrospectorAccess = access; + } } From ee93384db3dba4cdaec9127d5dd623b2d195cfe1 Mon Sep 17 00:00:00 2001 From: Mandy Chung Date: Wed, 26 Mar 2014 09:00:49 -0700 Subject: [PATCH 093/116] 8038177: Eliminate unnecessary dependency to sun.security.action Reviewed-by: chegar, alanb --- .../classes/com/sun/java/browser/dom/DOMService.java | 8 ++++++-- .../share/classes/sun/nio/cs/ext/ExtendedCharsets.java | 7 +++---- .../share/classes/sun/nio/cs/ext/JISAutoDetect.java | 9 ++++----- .../security/provider/certpath/ldap/LDAPCertStore.java | 6 ++---- .../classes/sun/security/smartcardio/ChannelImpl.java | 6 +++--- .../classes/java/util/prefs/FileSystemPreferences.java | 6 ++---- jdk/src/solaris/classes/sun/nio/ch/sctp/SctpNet.java | 6 +++--- .../windows/classes/sun/security/mscapi/KeyStore.java | 8 +++----- .../windows/classes/sun/security/mscapi/SunMSCAPI.java | 10 ++++++---- 9 files changed, 32 insertions(+), 34 deletions(-) diff --git a/jdk/src/share/classes/com/sun/java/browser/dom/DOMService.java b/jdk/src/share/classes/com/sun/java/browser/dom/DOMService.java index b30d618cd75..9a418cf5edc 100644 --- a/jdk/src/share/classes/com/sun/java/browser/dom/DOMService.java +++ b/jdk/src/share/classes/com/sun/java/browser/dom/DOMService.java @@ -25,6 +25,9 @@ package com.sun.java.browser.dom; +import java.security.AccessController; +import java.security.PrivilegedAction; + public abstract class DOMService { /** @@ -43,8 +46,9 @@ public abstract class DOMService { try { - String provider = java.security.AccessController.doPrivileged( - new sun.security.action.GetPropertyAction("com.sun.java.browser.dom.DOMServiceProvider")); + String provider = AccessController.doPrivileged( + (PrivilegedAction) () -> + System.getProperty("com.sun.java.browser.dom.DOMServiceProvider")); Class clazz = Class.forName("sun.plugin.dom.DOMService"); diff --git a/jdk/src/share/classes/sun/nio/cs/ext/ExtendedCharsets.java b/jdk/src/share/classes/sun/nio/cs/ext/ExtendedCharsets.java index 1d46e46d0ad..91b676c2c0c 100644 --- a/jdk/src/share/classes/sun/nio/cs/ext/ExtendedCharsets.java +++ b/jdk/src/share/classes/sun/nio/cs/ext/ExtendedCharsets.java @@ -30,8 +30,7 @@ import java.nio.charset.Charset; import java.nio.charset.spi.CharsetProvider; import sun.nio.cs.AbstractCharsetProvider; import java.security.AccessController; -import sun.security.action.GetPropertyAction; - +import java.security.PrivilegedAction; /** * Provider for extended charsets. @@ -1175,7 +1174,7 @@ public class ExtendedCharsets return; String map = AccessController.doPrivileged( - new GetPropertyAction("sun.nio.cs.map")); + (PrivilegedAction) () -> System.getProperty("sun.nio.cs.map")); boolean sjisIsMS932 = false; boolean iso2022jpIsMS50221 = false; boolean iso2022jpIsMS50220 = false; @@ -1296,7 +1295,7 @@ public class ExtendedCharsets } } String osName = AccessController.doPrivileged( - new GetPropertyAction("os.name")); + (PrivilegedAction) () -> System.getProperty("os.name")); if ("SunOS".equals(osName) || "Linux".equals(osName) || "AIX".equals(osName) || osName.contains("OS X")) { charset("x-COMPOUND_TEXT", "COMPOUND_TEXT", diff --git a/jdk/src/share/classes/sun/nio/cs/ext/JISAutoDetect.java b/jdk/src/share/classes/sun/nio/cs/ext/JISAutoDetect.java index 27a9cf8a07c..9b346de6751 100644 --- a/jdk/src/share/classes/sun/nio/cs/ext/JISAutoDetect.java +++ b/jdk/src/share/classes/sun/nio/cs/ext/JISAutoDetect.java @@ -35,7 +35,7 @@ import java.nio.charset.CharacterCodingException; import java.nio.charset.MalformedInputException; import sun.nio.cs.HistoricallyNamedCharset; import java.security.AccessController; -import sun.security.action.GetPropertyAction; +import java.security.PrivilegedAction; import static java.lang.Character.UnicodeBlock; @@ -239,12 +239,13 @@ public class JISAutoDetect return ((CharsetDecoder) detectedDecoder).charset(); } + private static final String osName = AccessController.doPrivileged( + (PrivilegedAction) () -> System.getProperty("os.name")); + /** * Returned Shift_JIS Charset name is OS dependent */ private static String getSJISName() { - String osName = AccessController.doPrivileged( - new GetPropertyAction("os.name")); if (osName.equals("Solaris") || osName.equals("SunOS")) return("PCK"); else if (osName.startsWith("Windows")) @@ -258,8 +259,6 @@ public class JISAutoDetect */ private static String getEUCJPName() { - String osName = AccessController.doPrivileged( - new GetPropertyAction("os.name")); if (osName.equals("Solaris") || osName.equals("SunOS")) return("x-eucjp-open"); else diff --git a/jdk/src/share/classes/sun/security/provider/certpath/ldap/LDAPCertStore.java b/jdk/src/share/classes/sun/security/provider/certpath/ldap/LDAPCertStore.java index 5a24a694b3d..05499ead984 100644 --- a/jdk/src/share/classes/sun/security/provider/certpath/ldap/LDAPCertStore.java +++ b/jdk/src/share/classes/sun/security/provider/certpath/ldap/LDAPCertStore.java @@ -50,8 +50,6 @@ import sun.security.provider.certpath.X509CertificatePair; import sun.security.util.Cache; import sun.security.util.Debug; import sun.security.x509.X500Name; -import sun.security.action.GetBooleanAction; -import sun.security.action.GetPropertyAction; /** * A CertStore that retrieves Certificates and @@ -146,7 +144,7 @@ public final class LDAPCertStore extends CertStoreSpi { static { String s = AccessController.doPrivileged( - new GetPropertyAction(PROP_LIFETIME)); + (PrivilegedAction) () -> System.getProperty(PROP_LIFETIME)); if (s != null) { LIFETIME = Integer.parseInt(s); // throws NumberFormatException } else { @@ -249,7 +247,7 @@ public final class LDAPCertStore extends CertStoreSpi { // If property is set to true, disable application resource file lookup. boolean disableAppResourceFiles = AccessController.doPrivileged( - new GetBooleanAction(PROP_DISABLE_APP_RESOURCE_FILES)); + (PrivilegedAction) () -> Boolean.getBoolean(PROP_DISABLE_APP_RESOURCE_FILES)); if (disableAppResourceFiles) { if (debug != null) { debug.println("LDAPCertStore disabling app resource files"); diff --git a/jdk/src/share/classes/sun/security/smartcardio/ChannelImpl.java b/jdk/src/share/classes/sun/security/smartcardio/ChannelImpl.java index b1c355e55f3..1d3ec88d1df 100644 --- a/jdk/src/share/classes/sun/security/smartcardio/ChannelImpl.java +++ b/jdk/src/share/classes/sun/security/smartcardio/ChannelImpl.java @@ -27,13 +27,12 @@ package sun.security.smartcardio; import java.nio.*; import java.security.AccessController; +import java.security.PrivilegedAction; import javax.smartcardio.*; import static sun.security.smartcardio.PCSC.*; -import sun.security.action.GetPropertyAction; - /** * CardChannel implementation. * @@ -125,7 +124,8 @@ final class ChannelImpl extends CardChannel { getBooleanProperty("sun.security.smartcardio.t1StripLe", false); private static boolean getBooleanProperty(String name, boolean def) { - String val = AccessController.doPrivileged(new GetPropertyAction(name)); + String val = AccessController.doPrivileged( + (PrivilegedAction) () -> System.getProperty(name)); if (val == null) { return def; } diff --git a/jdk/src/solaris/classes/java/util/prefs/FileSystemPreferences.java b/jdk/src/solaris/classes/java/util/prefs/FileSystemPreferences.java index 6ca10d10c93..18af8c7830d 100644 --- a/jdk/src/solaris/classes/java/util/prefs/FileSystemPreferences.java +++ b/jdk/src/solaris/classes/java/util/prefs/FileSystemPreferences.java @@ -61,10 +61,8 @@ class FileSystemPreferences extends AbstractPreferences { * Sync interval in seconds. */ private static final int SYNC_INTERVAL = Math.max(1, - Integer.parseInt( - AccessController.doPrivileged( - new sun.security.action.GetPropertyAction( - "java.util.prefs.syncInterval", "30")))); + AccessController.doPrivileged((PrivilegedAction) () -> + Integer.getInteger("java.util.prefs.syncInterval", 30))); /** * Returns logger for error messages. Backing store exceptions are logged at diff --git a/jdk/src/solaris/classes/sun/nio/ch/sctp/SctpNet.java b/jdk/src/solaris/classes/sun/nio/ch/sctp/SctpNet.java index 2eb89b987d0..367ab1f1e4d 100644 --- a/jdk/src/solaris/classes/sun/nio/ch/sctp/SctpNet.java +++ b/jdk/src/solaris/classes/sun/nio/ch/sctp/SctpNet.java @@ -33,15 +33,15 @@ import java.nio.channels.AlreadyBoundException; import java.util.Set; import java.util.HashSet; import java.security.AccessController; -import sun.security.action.GetPropertyAction; +import java.security.PrivilegedAction; import sun.nio.ch.IOUtil; import sun.nio.ch.Net; import com.sun.nio.sctp.SctpSocketOption; import static com.sun.nio.sctp.SctpStandardSocketOptions.*; public class SctpNet { - static final String osName = AccessController.doPrivileged( - new GetPropertyAction("os.name")); + private static final String osName = AccessController.doPrivileged( + (PrivilegedAction) () -> System.getProperty("os.name")); /* -- Miscellaneous SCTP utilities -- */ diff --git a/jdk/src/windows/classes/sun/security/mscapi/KeyStore.java b/jdk/src/windows/classes/sun/security/mscapi/KeyStore.java index 05db5dbd7a6..b055c900b69 100644 --- a/jdk/src/windows/classes/sun/security/mscapi/KeyStore.java +++ b/jdk/src/windows/classes/sun/security/mscapi/KeyStore.java @@ -33,6 +33,7 @@ import java.security.AccessController; import java.security.InvalidKeyException; import java.security.KeyStoreSpi; import java.security.KeyStoreException; +import java.security.PrivilegedAction; import java.security.UnrecoverableKeyException; import java.security.NoSuchAlgorithmException; import java.security.SecurityPermission; @@ -48,8 +49,6 @@ import java.util.Enumeration; import java.util.Iterator; import java.util.UUID; -import sun.security.action.GetPropertyAction; - /** * Implementation of key store for Windows using the Microsoft Crypto API. * @@ -205,9 +204,8 @@ abstract class KeyStore extends KeyStoreSpi { KeyStore(String storeName) { // Get the compatibility mode - String prop = - AccessController.doPrivileged( - new GetPropertyAction(KEYSTORE_COMPATIBILITY_MODE_PROP)); + String prop = AccessController.doPrivileged( + (PrivilegedAction) () -> System.getProperty(KEYSTORE_COMPATIBILITY_MODE_PROP)); if ("false".equalsIgnoreCase(prop)) { keyStoreCompatibilityMode = false; diff --git a/jdk/src/windows/classes/sun/security/mscapi/SunMSCAPI.java b/jdk/src/windows/classes/sun/security/mscapi/SunMSCAPI.java index fb1ce9194a3..37a5d2350ad 100644 --- a/jdk/src/windows/classes/sun/security/mscapi/SunMSCAPI.java +++ b/jdk/src/windows/classes/sun/security/mscapi/SunMSCAPI.java @@ -31,9 +31,6 @@ import java.security.Provider; import java.util.HashMap; import java.util.Map; -import sun.security.action.PutAllAction; - - /** * A Cryptographic Service Provider for the Microsoft Crypto API. * @@ -140,7 +137,12 @@ public final class SunMSCAPI extends Provider { map.put("Cipher.RSA SupportedKeyClasses", "sun.security.mscapi.Key"); if (map != this) { - AccessController.doPrivileged(new PutAllAction(this, map)); + final Provider provider = this; + PrivilegedAction putAllAction = () -> { + provider.putAll(map); + return null; + }; + AccessController.doPrivileged(putAllAction); } } } From ea02a62024b8bf99a82fb288f08dad0609ceb098 Mon Sep 17 00:00:00 2001 From: Pavel Rappo Date: Wed, 26 Mar 2014 19:53:07 +0000 Subject: [PATCH 094/116] 8035158: Remove dependency on sun.misc.RegexpPool and friends Reviewed-by: chegar, michaelm --- .../sun/net/spi/DefaultProxySelector.java | 73 +++-- jdk/test/java/net/ProxySelector/B8035158.java | 260 ++++++++++++++++++ 2 files changed, 315 insertions(+), 18 deletions(-) create mode 100644 jdk/test/java/net/ProxySelector/B8035158.java diff --git a/jdk/src/share/classes/sun/net/spi/DefaultProxySelector.java b/jdk/src/share/classes/sun/net/spi/DefaultProxySelector.java index f7018ed023f..36db753365a 100644 --- a/jdk/src/share/classes/sun/net/spi/DefaultProxySelector.java +++ b/jdk/src/share/classes/sun/net/spi/DefaultProxySelector.java @@ -32,13 +32,14 @@ import java.net.SocketAddress; import java.net.URI; import java.util.ArrayList; import java.util.List; -import java.util.StringTokenizer; import java.io.IOException; -import sun.misc.RegexpPool; import java.security.AccessController; import java.security.PrivilegedAction; +import java.util.StringJoiner; +import java.util.regex.Pattern; import sun.net.NetProperties; import sun.net.SocksProxy; +import static java.util.regex.Pattern.quote; /** * Supports proxy settings using system properties This proxy selector @@ -107,7 +108,7 @@ public class DefaultProxySelector extends ProxySelector { /** * How to deal with "non proxy hosts": - * since we do have to generate a RegexpPool we don't want to do that if + * since we do have to generate a pattern we don't want to do that if * it's not necessary. Therefore we do cache the result, on a per-protocol * basis, and change it only when the "source", i.e. the system property, * did change. @@ -119,17 +120,17 @@ public class DefaultProxySelector extends ProxySelector { static final String defStringVal = "localhost|127.*|[::1]|0.0.0.0|[::0]"; String hostsSource; - RegexpPool hostsPool; + Pattern pattern; final String property; final String defaultVal; static NonProxyInfo ftpNonProxyInfo = new NonProxyInfo("ftp.nonProxyHosts", null, null, defStringVal); static NonProxyInfo httpNonProxyInfo = new NonProxyInfo("http.nonProxyHosts", null, null, defStringVal); static NonProxyInfo socksNonProxyInfo = new NonProxyInfo("socksNonProxyHosts", null, null, defStringVal); - NonProxyInfo(String p, String s, RegexpPool pool, String d) { + NonProxyInfo(String p, String s, Pattern pattern, String d) { property = p; hostsSource = s; - hostsPool = pool; + this.pattern = pattern; defaultVal = d; } } @@ -255,7 +256,7 @@ public class DefaultProxySelector extends ProxySelector { nphosts = nprop.defaultVal; } else { nprop.hostsSource = null; - nprop.hostsPool = null; + nprop.pattern = null; } } else if (nphosts.length() != 0) { // add the required default patterns @@ -266,20 +267,11 @@ public class DefaultProxySelector extends ProxySelector { } if (nphosts != null) { if (!nphosts.equals(nprop.hostsSource)) { - RegexpPool pool = new RegexpPool(); - StringTokenizer st = new StringTokenizer(nphosts, "|", false); - try { - while (st.hasMoreTokens()) { - pool.add(st.nextToken().toLowerCase(), Boolean.TRUE); - } - } catch (sun.misc.REException ex) { - } - nprop.hostsPool = pool; + nprop.pattern = toPattern(nphosts); nprop.hostsSource = nphosts; } } - if (nprop.hostsPool != null && - nprop.hostsPool.match(urlhost) != null) { + if (shouldNotUseProxyFor(nprop.pattern, urlhost)) { return Proxy.NO_PROXY; } } @@ -355,4 +347,49 @@ public class DefaultProxySelector extends ProxySelector { private native static boolean init(); private synchronized native Proxy getSystemProxy(String protocol, String host); + + /** + * @return {@code true} if given this pattern for non-proxy hosts and this + * urlhost the proxy should NOT be used to access this urlhost + */ + static boolean shouldNotUseProxyFor(Pattern pattern, String urlhost) { + if (pattern == null || urlhost.isEmpty()) + return false; + boolean matches = pattern.matcher(urlhost).matches(); + return matches; + } + + /** + * @param mask non-null mask + * @return {@link java.util.regex.Pattern} corresponding to this mask + * or {@code null} in case mask should not match anything + */ + static Pattern toPattern(String mask) { + boolean disjunctionEmpty = true; + StringJoiner joiner = new StringJoiner("|"); + for (String disjunct : mask.split("\\|")) { + if (disjunct.isEmpty()) + continue; + disjunctionEmpty = false; + String regex = disjunctToRegex(disjunct.toLowerCase()); + joiner.add(regex); + } + return disjunctionEmpty ? null : Pattern.compile(joiner.toString()); + } + + /** + * @param disjunct non-null mask disjunct + * @return java regex string corresponding to this mask + */ + static String disjunctToRegex(String disjunct) { + String regex; + if (disjunct.startsWith("*")) { + regex = ".*" + quote(disjunct.substring(1)); + } else if (disjunct.endsWith("*")) { + regex = quote(disjunct.substring(0, disjunct.length() - 1)) + ".*"; + } else { + regex = quote(disjunct); + } + return regex; + } } diff --git a/jdk/test/java/net/ProxySelector/B8035158.java b/jdk/test/java/net/ProxySelector/B8035158.java new file mode 100644 index 00000000000..bc498923d0f --- /dev/null +++ b/jdk/test/java/net/ProxySelector/B8035158.java @@ -0,0 +1,260 @@ +/* + * Copyright (c) 2014 Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +/* + * @test + * @bug 8035158 + * @run main/othervm B8035158 + */ + +import java.net.Proxy; +import java.net.ProxySelector; +import java.net.URI; +import java.util.*; +import java.util.concurrent.Callable; + +public class B8035158 { + + public static void main(String[] args) { + for (TestCase t : emptyNonProxiesHosts()) t.run(); + for (TestCase t : nonEmptyNonProxiesHosts()) t.run(); + for (TestCase t : misc()) t.run(); + } + + // Setting http.nonProxyHosts to an empty string has an effect of + // not including default hosts to the list of exceptions + // (i.e. if you want everything to be connected directly rather than + // through proxy, you should set this property to an empty string) + private static Collection emptyNonProxiesHosts() { + List tests = new LinkedList<>(); + String[] loopbacks = {"localhost", "[::1]", "[::0]", "0.0.0.0", + "127.0.0.0", "127.0.0.1", "127.0.1.0", "127.0.1.1", + "127.1.0.0", "127.1.0.1", "127.1.1.0", "127.1.1.1"}; + Map properties = new HashMap<>(); + properties.put("http.proxyHost", "http://proxy.example.com"); + properties.put("http.nonProxyHosts", ""); + for (String s : loopbacks) { + tests.add(new TestCase(properties, "http://" + s, true)); + } + return tests; + } + + // No matter what is set into the http.nonProxyHosts (as far as it is not + // an empty string) loopback address aliases must be always connected + // directly + private static Collection nonEmptyNonProxiesHosts() { + List tests = new LinkedList<>(); + String[] nonProxyHosts = { + "google.com", + "localhost", "[::1]", "[::0]", "0.0.0.0", + "127.0.0.0", "127.0.0.1", "127.0.1.0", "127.0.1.1", + "127.1.0.0", "127.1.0.1", "127.1.1.0", "127.1.1.1"}; + String[] loopbacks = {"localhost", "[::1]", "[::0]", "0.0.0.0", + "127.0.0.0", "127.0.0.1", "127.0.1.0", "127.0.1.1", + "127.1.0.0", "127.1.0.1", "127.1.1.0", "127.1.1.1"}; + for (String h : nonProxyHosts) { + for (String s : loopbacks) { + Map properties = new HashMap<>(); + properties.put("http.proxyHost", "http://proxy.example.com"); + properties.put("http.nonProxyHosts", h); + tests.add(new TestCase(properties, "http://" + s, false)); + } + } + return tests; + } + + // unsorted tests + private static Collection misc() { + List t = new LinkedList<>(); + t.add(new TestCase("oracle.com", "http://137.254.16.101", true)); + t.add(new TestCase("google.com", "http://74.125.200.101", true)); + + t.add(new TestCase("google.com|google.ie", "http://google.co.uk", + true)); + t.add(new TestCase("google.com|google.ie", "http://google.com", + false)); + t.add(new TestCase("google.com|google.ie", "http://google.ie", + false)); + + t.add(new TestCase("google.com|bing.com|yahoo.com", + "http://127.0.0.1", false)); + t.add(new TestCase("google.com|bing.com|yahoo.com", + "http://google.com", false)); + t.add(new TestCase("google.com|bing.com|yahoo.com", + "http://bing.com", false)); + t.add(new TestCase("google.com|bing.com|yahoo.com", + "http://yahoo.com", false)); + + t.add(new TestCase("google.com|bing.com", "http://google.com", false)); + t.add(new TestCase("google.com|bing.com", "http://bing.com", false)); + t.add(new TestCase("google.com|bing.com", "http://yahoo.com", + true)); + t.add(new TestCase("google.com|bing.co*", "http://google.com", false)); + t.add(new TestCase("google.com|bing.co*", "http://bing.com", false)); + t.add(new TestCase("google.com|bing.co*", "http://yahoo.com", + true)); + t.add(new TestCase("google.com|*ing.com", "http://google.com", false)); + t.add(new TestCase("google.com|*ing.com", "http://bing.com", false)); + t.add(new TestCase("google.com|*ing.com", "http://yahoo.com", + true)); + t.add(new TestCase("google.co*|bing.com", "http://google.com", false)); + t.add(new TestCase("google.co*|bing.com", "http://bing.com", false)); + t.add(new TestCase("google.co*|bing.com", "http://yahoo.com", + true)); + t.add(new TestCase("google.co*|bing.co*", "http://google.com", false)); + t.add(new TestCase("google.co*|bing.co*", "http://bing.com", false)); + t.add(new TestCase("google.co*|bing.co*", "http://yahoo.com", + true)); + t.add(new TestCase("google.co*|*ing.com", "http://google.com", false)); + t.add(new TestCase("google.co*|*ing.com", "http://bing.com", false)); + t.add(new TestCase("google.co*|*ing.com", "http://yahoo.com", + true)); + t.add(new TestCase("*oogle.com|bing.com", "http://google.com", false)); + t.add(new TestCase("*oogle.com|bing.com", "http://bing.com", false)); + t.add(new TestCase("*oogle.com|bing.com", "http://yahoo.com", + true)); + t.add(new TestCase("*oogle.com|bing.co*", "http://google.com", false)); + t.add(new TestCase("*oogle.com|bing.co*", "http://bing.com", false)); + t.add(new TestCase("*oogle.com|bing.co*", "http://yahoo.com", + true)); + t.add(new TestCase("*oogle.com|*ing.com", "http://google.com", false)); + t.add(new TestCase("*oogle.com|*ing.com", "http://bing.com", false)); + t.add(new TestCase("*oogle.com|*ing.com", "http://yahoo.com", + true)); + + t.add(new TestCase("google.com|bing.com|yahoo.com", "http://google.com", false)); + t.add(new TestCase("google.com|bing.com|yahoo.com", "http://bing.com", false)); + t.add(new TestCase("google.com|bing.com|yahoo.com", "http://yahoo.com", false)); + t.add(new TestCase("google.com|bing.com|yahoo.com", + "http://duckduckgo.com", true)); + + t.add(new TestCase("p-proxy.com", "http://p-proxy.com", false)); + t.add(new TestCase("google.co*|google.ie", "http://google.co.uk", + false)); + + t.add(new TestCase("*oracle.com", "http://my.oracle.com", false)); + t.add(new TestCase("google.com|bing.com|yahoo.com", "http://127.0.0.1", false)); + t.add(new TestCase("google.com|bing.com|yahoo.com", "http://yahoo.com", false)); + + // example from + // http://docs.oracle.com/javase/7/docs/technotes/guides/net/proxies.html + t.add(new TestCase("localhost|host.example.com", "http://localhost", + false)); + t.add(new TestCase("localhost|host.example.com", + "http://host.example.com", false)); + t.add(new TestCase("localhost|host.example.com", + "http://google.com", true)); + return t; + } + + + private static T withSystemPropertiesSet( + Map localProperties, + Callable code) { + Map backup = new HashMap<>(); + try { + backupAndSetProperties(localProperties, backup); + return code.call(); + } catch (Exception e) { + throw new RuntimeException(e); + } finally { + restoreProperties(backup); + } + } + + private static void backupAndSetProperties( + Map localProperties, + Map oldProperties) { + for (Map.Entry e : localProperties.entrySet()) { + String oldValue = System.setProperty(e.getKey(), e.getValue()); + oldProperties.put(e.getKey(), oldValue); + } + } + + private static void restoreProperties(Map oldProperties) { + for (Map.Entry e : oldProperties.entrySet()) { + String oldValue = e.getValue(); + String key = e.getKey(); + if (oldValue == null) + System.getProperties().remove(key); + else + System.setProperty(key, oldValue); + } + } + + private static class TestCase { + + final Map localProperties; + final String urlhost; + final boolean expectedProxying; + + TestCase(String nonProxyHosts, String urlhost, + boolean expectedProxying) { + this(nonProxyHosts, "proxy.example.com", urlhost, + expectedProxying); + } + + TestCase(String nonProxyHosts, String proxyHost, String urlhost, + boolean expectedProxying) { + this(new HashMap() { + { + put("http.nonProxyHosts", nonProxyHosts); + put("http.proxyHost", proxyHost); + } + }, urlhost, expectedProxying); + } + + TestCase(Map localProperties, String urlhost, + boolean expectedProxying) { + this.localProperties = localProperties; + this.urlhost = urlhost; + this.expectedProxying = expectedProxying; + } + + void run() { + System.out.printf("urlhost=%s properties=%s: proxied? %s%n", + urlhost, localProperties, expectedProxying); + + List proxies = withSystemPropertiesSet(localProperties, + () -> ProxySelector.getDefault().select( + URI.create(urlhost)) + ); + + verify(proxies); + } + + void verify(List proxies) { + + boolean actualProxying = !(proxies.size() == 1 && + proxies.get(0).type() == Proxy.Type.DIRECT); + + if (actualProxying != expectedProxying) + throw new AssertionError(String.format( + "Expected %s connection for %s (given " + + "properties=%s). Here's the list of proxies " + + "returned: %s", + expectedProxying ? "proxied" : "direct", urlhost, + localProperties, proxies + )); + } + } +} From efd4316d452b009d875a619ecc962b638047c0d4 Mon Sep 17 00:00:00 2001 From: Chris Hegarty Date: Wed, 26 Mar 2014 20:57:49 +0000 Subject: [PATCH 095/116] 8038438: Review comments from 8034181 Reviewed-by: alanb --- .../com/sun/nio/sctp/SctpChannel/ReceiveIntoDirect.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/jdk/test/com/sun/nio/sctp/SctpChannel/ReceiveIntoDirect.java b/jdk/test/com/sun/nio/sctp/SctpChannel/ReceiveIntoDirect.java index 00810cb5991..e7b23d0aaed 100644 --- a/jdk/test/com/sun/nio/sctp/SctpChannel/ReceiveIntoDirect.java +++ b/jdk/test/com/sun/nio/sctp/SctpChannel/ReceiveIntoDirect.java @@ -23,7 +23,7 @@ /* @test * @bug 8034181 - * @summary SIGBUS at Java_sun_nio_ch_SctpChannelImpl_receive0 + * @summary SIGBUS in SctpChannelImpl receive * @author chegar */ @@ -49,6 +49,9 @@ public class ReceiveIntoDirect { /* suitably small message to NOT overrun small buffers */ final byte[] msgBytes = "Hello".getBytes(US_ASCII); + /* number of client connections/combinations (accepted by the server) */ + final int NUM_CONNECTIONS = 75; + void test(String[] args) throws IOException { SocketAddress address = null; Server server; @@ -178,7 +181,7 @@ public class ReceiveIntoDirect { @Override public void run() { try { - for (int i=0; i<75; i++) { // there are 75 client combinations + for (int i=0; i Date: Wed, 26 Mar 2014 23:53:22 +0000 Subject: [PATCH 096/116] 8031003: [Parfait] warnings from jdk/src/share/native/sun/security/jgss/wrapper: JNI exception pending Fix pending exception errors found by parfait. Reviewed-by: weijun --- .../sun/security/jgss/wrapper/GSSLibStub.java | 7 +- .../jgss/wrapper/SunNativeProvider.java | 2 +- .../sun/security/jgss/wrapper/GSSLibStub.c | 789 ++++++++++-------- .../sun/security/jgss/wrapper/NativeUtil.c | 228 ++--- .../sun/security/jgss/wrapper/NativeUtil.h | 20 +- 5 files changed, 602 insertions(+), 444 deletions(-) diff --git a/jdk/src/share/classes/sun/security/jgss/wrapper/GSSLibStub.java b/jdk/src/share/classes/sun/security/jgss/wrapper/GSSLibStub.java index 47861f8081e..900532459bf 100644 --- a/jdk/src/share/classes/sun/security/jgss/wrapper/GSSLibStub.java +++ b/jdk/src/share/classes/sun/security/jgss/wrapper/GSSLibStub.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -48,10 +48,11 @@ class GSSLibStub { /** * Initialization routine to dynamically load function pointers. * - * @param library name to dlopen + * @param lib library name to dlopen + * @param debug set to true for reporting native debugging info * @return true if succeeded, false otherwise. */ - static native boolean init(String lib); + static native boolean init(String lib, boolean debug); private static native long getMechPtr(byte[] oidDerEncoding); // Miscellaneous routines diff --git a/jdk/src/share/classes/sun/security/jgss/wrapper/SunNativeProvider.java b/jdk/src/share/classes/sun/security/jgss/wrapper/SunNativeProvider.java index 238e12bc326..94ca2c669bf 100644 --- a/jdk/src/share/classes/sun/security/jgss/wrapper/SunNativeProvider.java +++ b/jdk/src/share/classes/sun/security/jgss/wrapper/SunNativeProvider.java @@ -100,7 +100,7 @@ public final class SunNativeProvider extends Provider { gssLibs = new String[]{ defaultLib }; } for (String libName: gssLibs) { - if (GSSLibStub.init(libName)) { + if (GSSLibStub.init(libName, DEBUG)) { debug("Loaded GSS library: " + libName); Oid[] mechs = GSSLibStub.indicateMechs(); HashMap map = diff --git a/jdk/src/share/native/sun/security/jgss/wrapper/GSSLibStub.c b/jdk/src/share/native/sun/security/jgss/wrapper/GSSLibStub.c index 15fd41794e3..e14036b899c 100644 --- a/jdk/src/share/native/sun/security/jgss/wrapper/GSSLibStub.c +++ b/jdk/src/share/native/sun/security/jgss/wrapper/GSSLibStub.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -28,20 +28,6 @@ #include "NativeFunc.h" #include "jlong.h" #include -#include "jni_util.h" - -/* Throws a Java Exception by name */ - -void throwByName(JNIEnv *env, const char *name, const char *msg) { - jclass cls = (*env)->FindClass(env, name); - - if (cls != 0) /* Otherwise an exception has already been thrown */ - (*env)->ThrowNew(env, cls, msg); -} - -void throwOutOfMemoryError(JNIEnv *env, const char *message) { - throwByName(env, "java/lang/OutOfMemoryError", message); -} /* Constants for indicating what type of info is needed for inquiries */ const int TYPE_CRED_NAME = 10; @@ -51,29 +37,32 @@ const int TYPE_CRED_USAGE = 12; /* * Class: sun_security_jgss_wrapper_GSSLibStub * Method: init - * Signature: (Ljava/lang/String;)Z + * Signature: (Ljava/lang/String;Z)Z */ JNIEXPORT jboolean JNICALL Java_sun_security_jgss_wrapper_GSSLibStub_init(JNIEnv *env, jclass jcls, - jstring jlibName) { + jstring jlibName, + jboolean jDebug) { const char *libName; char *error = NULL; + if (!jDebug) { + JGSS_DEBUG = 0; + } else { + JGSS_DEBUG = 1; + } + if (jlibName == NULL) { - debug(env, "[GSSLibStub_init] GSS lib name is NULL"); + TRACE0("[GSSLibStub_init] GSS lib name is NULL"); return JNI_FALSE; } libName = (*env)->GetStringUTFChars(env, jlibName, NULL); if (libName == NULL) { - if (!(*env)->ExceptionCheck(env)) { - throwOutOfMemoryError(env, NULL); - } return JNI_FALSE; } - sprintf(debugBuf, "[GSSLibStub_init] libName=%s", libName); - debug(env, debugBuf); + TRACE1("[GSSLibStub_init] libName=%s", libName); /* initialize global function table */ error = loadNative(libName); @@ -82,7 +71,7 @@ Java_sun_security_jgss_wrapper_GSSLibStub_init(JNIEnv *env, if (error == NULL) { return JNI_TRUE; } else { - debug(env, error); + TRACE0(error); return JNI_FALSE; } } @@ -100,136 +89,139 @@ Java_sun_security_jgss_wrapper_GSSLibStub_getMechPtr(JNIEnv *env, unsigned int i, len; jbyte* bytes; jthrowable gssEx; - jboolean found; + int found; if (jbytes != NULL) { - found = JNI_FALSE; + found = 0; len = (unsigned int)((*env)->GetArrayLength(env, jbytes) - 2); bytes = (*env)->GetByteArrayElements(env, jbytes, NULL); - if (bytes != NULL) { - for (i = 0; i < ftab->mechs->count; i++) { - cOid = &(ftab->mechs->elements[i]); - if (len == cOid->length && - (memcmp(cOid->elements, (bytes + 2), len) == 0)) { - // Found a match - found = JNI_TRUE; - break; - } - } - (*env)->ReleaseByteArrayElements(env, jbytes, bytes, 0); - } else { - JNU_CHECK_EXCEPTION_RETURN(env, jlong_zero); + if (bytes == NULL) { + return ptr_to_jlong(NULL); } - if (found != JNI_TRUE) { + for (i = 0; i < ftab->mechs->count; i++) { + cOid = &(ftab->mechs->elements[i]); + if (len == cOid->length && + (memcmp(cOid->elements, (bytes + 2), len) == 0)) { + // Found a match + found = 1; + break; + } + } + (*env)->ReleaseByteArrayElements(env, jbytes, bytes, 0); + + if (found != 1) { checkStatus(env, NULL, GSS_S_BAD_MECH, 0, "[GSSLibStub_getMechPtr]"); return ptr_to_jlong(NULL); - } else return ptr_to_jlong(cOid); - } else return ptr_to_jlong(GSS_C_NO_OID); -} - - -/* - * Utility routine which creates a gss_channel_bindings_t structure - * using the specified org.ietf.jgss.ChannelBinding object. - */ -gss_channel_bindings_t getGSSCB(JNIEnv *env, jobject jcb) { - gss_channel_bindings_t cb; - jobject jinetAddr; - jbyteArray value; - - if (jcb == NULL) { - return GSS_C_NO_CHANNEL_BINDINGS; - } - - cb = malloc(sizeof(struct gss_channel_bindings_struct)); - - if (cb == NULL) { - throwOutOfMemoryError(env,NULL); - return NULL; - } - - /* set up initiator address */ - jinetAddr = - (*env)->CallObjectMethod(env, jcb, - MID_ChannelBinding_getInitiatorAddr); - if (jinetAddr != NULL) { - cb->initiator_addrtype = GSS_C_AF_INET; - value = (*env)->CallObjectMethod(env, jinetAddr, - MID_InetAddress_getAddr); - if (!initGSSBuffer(env, value, &(cb->initiator_address))) { - return NULL; + } else { + return ptr_to_jlong(cOid); } } else { - cb->initiator_addrtype = GSS_C_AF_NULLADDR; - cb->initiator_address.length = 0; - cb->initiator_address.value = NULL; + return ptr_to_jlong(GSS_C_NO_OID); } - /* set up acceptor address */ - jinetAddr = - (*env)->CallObjectMethod(env, jcb, - MID_ChannelBinding_getAcceptorAddr); - if (jinetAddr != NULL) { - cb->acceptor_addrtype = GSS_C_AF_INET; - value = (*env)->CallObjectMethod(env, jinetAddr, - MID_InetAddress_getAddr); - if (!initGSSBuffer(env, value, &(cb->acceptor_address))) { - return NULL; - } - } else { - cb->acceptor_addrtype = GSS_C_AF_NULLADDR; - cb->acceptor_address.length = 0; - cb->acceptor_address.value = NULL; - } - /* set up application data */ - value = (*env)->CallObjectMethod(env, jcb, - MID_ChannelBinding_getAppData); - if (value != NULL) { - if (!initGSSBuffer(env, value, &(cb->application_data))) { - return NULL; - } - } else { - cb->application_data.length = 0; - cb->application_data.value = NULL; - } - return cb; } /* * Utility routine which releases the specified gss_channel_bindings_t * structure. */ -void releaseGSSCB(JNIEnv *env, jobject jcb, gss_channel_bindings_t cb) { +void deleteGSSCB(gss_channel_bindings_t cb) { jobject jinetAddr; jbyteArray value; if (cb == GSS_C_NO_CHANNEL_BINDINGS) return; + /* release initiator address */ if (cb->initiator_addrtype != GSS_C_AF_NULLADDR) { - jinetAddr = - (*env)->CallObjectMethod(env, jcb, - MID_ChannelBinding_getInitiatorAddr); - value = (*env)->CallObjectMethod(env, jinetAddr, - MID_InetAddress_getAddr); - resetGSSBuffer(env, value, &(cb->initiator_address)); + resetGSSBuffer(&(cb->initiator_address)); } /* release acceptor address */ if (cb->acceptor_addrtype != GSS_C_AF_NULLADDR) { - jinetAddr = - (*env)->CallObjectMethod(env, jcb, - MID_ChannelBinding_getAcceptorAddr); - value = (*env)->CallObjectMethod(env, jinetAddr, - MID_InetAddress_getAddr); - resetGSSBuffer(env, value, &(cb->acceptor_address)); + resetGSSBuffer(&(cb->acceptor_address)); } /* release application data */ if (cb->application_data.length != 0) { - value = (*env)->CallObjectMethod(env, jcb, - MID_ChannelBinding_getAppData); - resetGSSBuffer(env, value, &(cb->application_data)); + resetGSSBuffer(&(cb->application_data)); } free(cb); } +/* + * Utility routine which creates a gss_channel_bindings_t structure + * using the specified org.ietf.jgss.ChannelBinding object. + * NOTE: must call deleteGSSCB() to free up the resources. + */ +gss_channel_bindings_t newGSSCB(JNIEnv *env, jobject jcb) { + gss_channel_bindings_t cb; + jobject jinetAddr; + jbyteArray value; + int i; + + if (jcb == NULL) { + return GSS_C_NO_CHANNEL_BINDINGS; + } + + cb = malloc(sizeof(struct gss_channel_bindings_struct)); + if (cb == NULL) { + throwOutOfMemoryError(env,NULL); + return NULL; + } + + // initialize addrtype in CB first + cb->initiator_addrtype = GSS_C_AF_NULLADDR; + cb->acceptor_addrtype = GSS_C_AF_NULLADDR; + + /* set up initiator address */ + jinetAddr = (*env)->CallObjectMethod(env, jcb, + MID_ChannelBinding_getInitiatorAddr); + if ((*env)->ExceptionCheck(env)) { + goto cleanup; + } + if (jinetAddr != NULL) { + value = (*env)->CallObjectMethod(env, jinetAddr, + MID_InetAddress_getAddr); + if ((*env)->ExceptionCheck(env)) { + goto cleanup; + } + cb->initiator_addrtype = GSS_C_AF_INET; + initGSSBuffer(env, value, &(cb->initiator_address)); + if ((*env)->ExceptionCheck(env)) { + goto cleanup; + } + } + /* set up acceptor address */ + jinetAddr = (*env)->CallObjectMethod(env, jcb, + MID_ChannelBinding_getAcceptorAddr); + if ((*env)->ExceptionCheck(env)) { + goto cleanup; + } + if (jinetAddr != NULL) { + value = (*env)->CallObjectMethod(env, jinetAddr, + MID_InetAddress_getAddr); + if ((*env)->ExceptionCheck(env)) { + goto cleanup; + } + cb->acceptor_addrtype = GSS_C_AF_INET; + initGSSBuffer(env, value, &(cb->acceptor_address)); + if ((*env)->ExceptionCheck(env)) { + goto cleanup; + } + } + /* set up application data */ + value = (*env)->CallObjectMethod(env, jcb, + MID_ChannelBinding_getAppData); + if ((*env)->ExceptionCheck(env)) { + goto cleanup; + } + initGSSBuffer(env, value, &(cb->application_data)); + if ((*env)->ExceptionCheck(env)) { + goto cleanup; + } + return cb; +cleanup: + deleteGSSCB(cb); + return NULL; +} + /* * Utility routine for storing the supplementary information * into the specified org.ietf.jgss.MessageProp object. @@ -245,7 +237,9 @@ void setSupplementaryInfo(JNIEnv *env, jobject jstub, jobject jprop, isUnseq = ((suppInfo & GSS_S_UNSEQ_TOKEN) != 0); hasGap = ((suppInfo & GSS_S_GAP_TOKEN) != 0); minorMsg = getMinorMessage(env, jstub, minor); - CHECK_NULL(minorMsg); + if ((*env)->ExceptionCheck(env)) { + return; + } (*env)->CallVoidMethod(env, jprop, MID_MessageProp_setSupplementaryStates, isDuplicate, isOld, isUnseq, hasGap, minor, minorMsg); @@ -281,22 +275,26 @@ Java_sun_security_jgss_wrapper_GSSLibStub_inquireNamesForMech(JNIEnv *env, jobjectArray result; if (ftab->inquireNamesForMech != NULL) { + mech = (gss_OID)jlong_to_ptr((*env)->GetLongField(env, jobj, FID_GSSLibStub_pMech)); + nameTypes = GSS_C_NO_OID_SET; - mech = (gss_OID)jlong_to_ptr((*env)->GetLongField(env, jobj, FID_GSSLibStub_pMech)); - nameTypes = GSS_C_NO_OID_SET; + /* gss_inquire_names_for_mech(...) => N/A */ + major = (*ftab->inquireNamesForMech)(&minor, mech, &nameTypes); - /* gss_inquire_names_for_mech(...) => N/A */ - major = (*ftab->inquireNamesForMech)(&minor, mech, &nameTypes); + /* release intermediate buffers before checking status */ + result = getJavaOIDArray(env, nameTypes); + deleteGSSOIDSet(nameTypes); + if ((*env)->ExceptionCheck(env)) { + return NULL; + } - result = getJavaOIDArray(env, nameTypes); - - /* release intermediate buffers */ - deleteGSSOIDSet(nameTypes); - - CHECK_NULL_RETURN(result, NULL); - checkStatus(env, jobj, major, minor, "[GSSLibStub_inquireNamesForMech]"); - return result; - } else return NULL; + checkStatus(env, jobj, major, minor, "[GSSLibStub_inquireNamesForMech]"); + if ((*env)->ExceptionCheck(env)) { + return NULL; + } + return result; + } + return NULL; } /* @@ -314,8 +312,7 @@ Java_sun_security_jgss_wrapper_GSSLibStub_releaseName(JNIEnv *env, nameHdl = (gss_name_t) jlong_to_ptr(pName); - sprintf(debugBuf, "[GSSLibStub_releaseName] %ld", (long) pName); - debug(env, debugBuf); + TRACE1("[GSSLibStub_releaseName] %ld", (long) pName); if (nameHdl != GSS_C_NO_NAME) { /* gss_release_name(...) => GSS_S_BAD_NAME */ @@ -341,15 +338,16 @@ Java_sun_security_jgss_wrapper_GSSLibStub_importName(JNIEnv *env, gss_name_t nameHdl; nameHdl = GSS_C_NO_NAME; - debug(env, "[GSSLibStub_importName]"); + TRACE0("[GSSLibStub_importName]"); - if (!initGSSBuffer(env, jnameVal, &nameVal)) { - return jlong_zero; + initGSSBuffer(env, jnameVal, &nameVal); + if ((*env)->ExceptionCheck(env)) { + return jlong_zero; } + nameType = newGSSOID(env, jnameType); if ((*env)->ExceptionCheck(env)) { - deleteGSSOID(nameType); - resetGSSBuffer(env, jnameVal, &nameVal); + resetGSSBuffer(&nameVal); return jlong_zero; } @@ -357,14 +355,16 @@ Java_sun_security_jgss_wrapper_GSSLibStub_importName(JNIEnv *env, GSS_S_BAD_MECH */ major = (*ftab->importName)(&minor, &nameVal, nameType, &nameHdl); - sprintf(debugBuf, "[GSSLibStub_importName] %ld", (long) nameHdl); - debug(env, debugBuf); + TRACE1("[GSSLibStub_importName] %ld", (long) nameHdl); /* release intermediate buffers */ deleteGSSOID(nameType); - resetGSSBuffer(env, jnameVal, &nameVal); + resetGSSBuffer(&nameVal); checkStatus(env, jobj, major, minor, "[GSSLibStub_importName]"); + if ((*env)->ExceptionCheck(env)) { + return jlong_zero; + } return ptr_to_jlong(nameHdl); } @@ -388,9 +388,7 @@ Java_sun_security_jgss_wrapper_GSSLibStub_compareName(JNIEnv *env, nameHdl1 = (gss_name_t) jlong_to_ptr(pName1); nameHdl2 = (gss_name_t) jlong_to_ptr(pName2); - sprintf(debugBuf, "[GSSLibStub_compareName] %ld %ld", (long) pName1, - (long) pName2); - debug(env, debugBuf); + TRACE2("[GSSLibStub_compareName] %ld %ld", (long)pName1, (long)pName2); if ((nameHdl1 != GSS_C_NO_NAME) && (nameHdl2 != GSS_C_NO_NAME)) { @@ -417,8 +415,8 @@ Java_sun_security_jgss_wrapper_GSSLibStub_canonicalizeName(JNIEnv *env, gss_OID mech; nameHdl = (gss_name_t) jlong_to_ptr(pName); - sprintf(debugBuf, "[GSSLibStub_canonicalizeName] %ld", (long) pName); - debug(env, debugBuf); + + TRACE1("[GSSLibStub_canonicalizeName] %ld", (long) pName); if (nameHdl != GSS_C_NO_NAME) { mech = (gss_OID) jlong_to_ptr((*env)->GetLongField(env, jobj, FID_GSSLibStub_pMech)); @@ -428,16 +426,15 @@ Java_sun_security_jgss_wrapper_GSSLibStub_canonicalizeName(JNIEnv *env, GSS_S_BAD_NAME, GSS_S_BAD_MECH */ major = (*ftab->canonicalizeName)(&minor, nameHdl, mech, &mnNameHdl); - sprintf(debugBuf, "[GSSLibStub_canonicalizeName] MN=%ld", - (long)mnNameHdl); - debug(env, debugBuf); - - /* release intermediate buffers */ + TRACE1("[GSSLibStub_canonicalizeName] MN=%ld", (long)mnNameHdl); checkStatus(env, jobj, major, minor, "[GSSLibStub_canonicalizeName]"); - } else mnNameHdl = GSS_C_NO_NAME; - - return ptr_to_jlong(mnNameHdl); + if ((*env)->ExceptionCheck(env)) { + return (jlong) GSS_C_NO_NAME; + } + return ptr_to_jlong(mnNameHdl); + } + return (jlong) GSS_C_NO_NAME; } /* @@ -455,8 +452,8 @@ Java_sun_security_jgss_wrapper_GSSLibStub_exportName(JNIEnv *env, jbyteArray jresult; nameHdl = (gss_name_t) jlong_to_ptr(pName); - sprintf(debugBuf, "[GSSLibStub_exportName] %ld", (long) pName); - debug(env, debugBuf); + + TRACE1("[GSSLibStub_exportName] %ld", (long) pName); /* gss_export_name(...) => GSS_S_NAME_NOT_MN, GSS_S_BAD_NAMETYPE, GSS_S_BAD_NAME */ @@ -464,28 +461,38 @@ Java_sun_security_jgss_wrapper_GSSLibStub_exportName(JNIEnv *env, /* canonicalize the internal name to MN and retry */ if (major == GSS_S_NAME_NOT_MN) { - debug(env, "[GSSLibStub_exportName] canonicalize and re-try"); + /* release intermediate buffers before retrying */ + (*ftab->releaseBuffer)(&minor, &outBuf); + + TRACE0("[GSSLibStub_exportName] canonicalize and re-try"); mNameHdl = (gss_name_t)jlong_to_ptr( Java_sun_security_jgss_wrapper_GSSLibStub_canonicalizeName (env, jobj, pName)); - /* return immediately if an exception has occurred */ if ((*env)->ExceptionCheck(env)) { - return NULL; + return NULL; } + major = (*ftab->exportName)(&minor, mNameHdl, &outBuf); Java_sun_security_jgss_wrapper_GSSLibStub_releaseName (env, jobj, ptr_to_jlong(mNameHdl)); - /* return immediately if an exception has occurred */ if ((*env)->ExceptionCheck(env)) { + /* release intermediate buffers */ + (*ftab->releaseBuffer)(&minor, &outBuf); return NULL; } } - /* release intermediate buffers */ + /* release intermediate buffers before checking status */ jresult = getJavaBuffer(env, &outBuf); + if ((*env)->ExceptionCheck(env)) { + return NULL; + } checkStatus(env, jobj, major, minor, "[GSSLibStub_exportName]"); + if ((*env)->ExceptionCheck(env)) { + return NULL; + } return jresult; } @@ -507,8 +514,8 @@ Java_sun_security_jgss_wrapper_GSSLibStub_displayName(JNIEnv *env, jobjectArray jresult; nameHdl = (gss_name_t) jlong_to_ptr(pName); - sprintf(debugBuf, "[GSSLibStub_displayName] %ld", (long) pName); - debug(env, debugBuf); + + TRACE1("[GSSLibStub_displayName] %ld", (long) pName); if (nameHdl == GSS_C_NO_NAME) { checkStatus(env, jobj, GSS_S_BAD_NAME, 0, "[GSSLibStub_displayName]"); @@ -518,26 +525,37 @@ Java_sun_security_jgss_wrapper_GSSLibStub_displayName(JNIEnv *env, /* gss_display_name(...) => GSS_S_BAD_NAME */ major = (*ftab->displayName)(&minor, nameHdl, &outNameBuf, &outNameType); - /* release intermediate buffers */ + /* release intermediate buffers before checking status */ jname = getJavaString(env, &outNameBuf); - if (jname == NULL && !(*env)->ExceptionCheck(env)) { - throwOutOfMemoryError(env, NULL); + if ((*env)->ExceptionCheck(env)) { + return NULL; + } + + checkStatus(env, jobj, major, minor, "[GSSLibStub_displayName]"); + if ((*env)->ExceptionCheck(env)) { return NULL; } jtype = getJavaOID(env, outNameType); - jresult = (*env)->NewObjectArray(env, 2, CLS_Object, NULL); - CHECK_NULL_RETURN(jresult, NULL); + if ((*env)->ExceptionCheck(env)) { + return NULL; + } + jresult = (*env)->NewObjectArray(env, 2, CLS_Object, NULL); /* return immediately if an exception has occurred */ if ((*env)->ExceptionCheck(env)) { return NULL; } (*env)->SetObjectArrayElement(env, jresult, 0, jname); + if ((*env)->ExceptionCheck(env)) { + return NULL; + } (*env)->SetObjectArrayElement(env, jresult, 1, jtype); + if ((*env)->ExceptionCheck(env)) { + return NULL; + } - checkStatus(env, jobj, major, minor, "[GSSLibStub_displayName]"); return jresult; } @@ -561,20 +579,14 @@ Java_sun_security_jgss_wrapper_GSSLibStub_acquireCred(JNIEnv *env, gss_cred_id_t credHdl; credHdl = GSS_C_NO_CREDENTIAL; - debug(env, "[GSSLibStub_acquireCred]"); - + TRACE0("[GSSLibStub_acquireCred]"); mech = (gss_OID) jlong_to_ptr((*env)->GetLongField(env, jobj, FID_GSSLibStub_pMech)); - mechs = newGSSOIDSet(env, mech); - if ((*env)->ExceptionCheck(env)) { - return jlong_zero; - } + mechs = newGSSOIDSet(mech); credUsage = (gss_cred_usage_t) usage; nameHdl = (gss_name_t) jlong_to_ptr(pName); - sprintf(debugBuf, "[GSSLibStub_acquireCred] pName=%ld, usage=%d", - (long) pName, usage); - debug(env, debugBuf); + TRACE2("[GSSLibStub_acquireCred] pName=%ld, usage=%d", (long)pName, usage); /* gss_acquire_cred(...) => GSS_S_BAD_MECH, GSS_S_BAD_NAMETYPE, GSS_S_BAD_NAME, GSS_S_CREDENTIALS_EXPIRED, GSS_S_NO_CRED */ @@ -584,10 +596,12 @@ Java_sun_security_jgss_wrapper_GSSLibStub_acquireCred(JNIEnv *env, /* release intermediate buffers */ deleteGSSOIDSet(mechs); - sprintf(debugBuf, "[GSSLibStub_acquireCred] pCred=%ld", (long) credHdl); - debug(env, debugBuf); + TRACE1("[GSSLibStub_acquireCred] pCred=%ld", (long) credHdl); checkStatus(env, jobj, major, minor, "[GSSLibStub_acquireCred]"); + if ((*env)->ExceptionCheck(env)) { + return jlong_zero; + } return ptr_to_jlong(credHdl); } @@ -606,15 +620,16 @@ Java_sun_security_jgss_wrapper_GSSLibStub_releaseCred(JNIEnv *env, credHdl = (gss_cred_id_t) jlong_to_ptr(pCred); - sprintf(debugBuf, "[GSSLibStub_releaseCred] %ld", (long int)pCred); - debug(env, debugBuf); + TRACE1("[GSSLibStub_releaseCred] %ld", (long int)pCred); if (credHdl != GSS_C_NO_CREDENTIAL) { - /* gss_release_cred(...) => GSS_S_NO_CRED(!) */ major = (*ftab->releaseCred)(&minor, &credHdl); checkStatus(env, jobj, major, minor, "[GSSLibStub_releaseCred]"); + if ((*env)->ExceptionCheck(env)) { + return jlong_zero; + } } return ptr_to_jlong(credHdl); } @@ -630,8 +645,7 @@ void inquireCred(JNIEnv *env, jobject jobj, gss_cred_id_t pCred, credHdl = pCred; - sprintf(debugBuf, "[gss_inquire_cred] %ld", (long) pCred); - debug(env, debugBuf); + TRACE1("[gss_inquire_cred] %ld", (long) pCred); /* gss_inquire_cred(...) => GSS_S_DEFECTIVE_CREDENTIAL(!), GSS_S_CREDENTIALS_EXPIRED(!), GSS_S_NO_CRED(!) */ @@ -643,8 +657,6 @@ void inquireCred(JNIEnv *env, jobject jobj, gss_cred_id_t pCred, major = (*ftab->inquireCred)(&minor, credHdl, NULL, NULL, result, NULL); } - /* release intermediate buffers */ - routineErr = GSS_ROUTINE_ERROR(major); if (routineErr == GSS_S_CREDENTIALS_EXPIRED) { /* ignore GSS_S_CREDENTIALS_EXPIRED for query */ @@ -673,20 +685,16 @@ Java_sun_security_jgss_wrapper_GSSLibStub_getCredName(JNIEnv *env, credHdl = (gss_cred_id_t) jlong_to_ptr(pCred); - sprintf(debugBuf, "[GSSLibStub_getCredName] %ld", (long int)pCred); - debug(env, debugBuf); + TRACE1("[GSSLibStub_getCredName] %ld", (long int)pCred); nameHdl = GSS_C_NO_NAME; inquireCred(env, jobj, credHdl, TYPE_CRED_NAME, &nameHdl); - /* return immediately if an exception has occurred */ if ((*env)->ExceptionCheck(env)) { return jlong_zero; } - sprintf(debugBuf, "[GSSLibStub_getCredName] pName=%ld", (long) nameHdl); - debug(env, debugBuf); - + TRACE1("[GSSLibStub_getCredName] pName=%ld", (long) nameHdl); return ptr_to_jlong(nameHdl); } @@ -705,12 +713,10 @@ Java_sun_security_jgss_wrapper_GSSLibStub_getCredTime(JNIEnv *env, credHdl = (gss_cred_id_t) jlong_to_ptr(pCred); - sprintf(debugBuf, "[GSSLibStub_getCredTime] %ld", (long int)pCred); - debug(env, debugBuf); + TRACE1("[GSSLibStub_getCredTime] %ld", (long int)pCred); lifetime = 0; inquireCred(env, jobj, credHdl, TYPE_CRED_TIME, &lifetime); - /* return immediately if an exception has occurred */ if ((*env)->ExceptionCheck(env)) { return 0; @@ -733,11 +739,9 @@ Java_sun_security_jgss_wrapper_GSSLibStub_getCredUsage(JNIEnv *env, credHdl = (gss_cred_id_t) jlong_to_ptr(pCred); - sprintf(debugBuf, "[GSSLibStub_getCredUsage] %ld", (long int)pCred); - debug(env, debugBuf); + TRACE1("[GSSLibStub_getCredUsage] %ld", (long int)pCred); inquireCred(env, jobj, credHdl, TYPE_CRED_USAGE, &usage); - /* return immediately if an exception has occurred */ if ((*env)->ExceptionCheck(env)) { return -1; @@ -759,10 +763,11 @@ Java_sun_security_jgss_wrapper_GSSLibStub_importContext(JNIEnv *env, gss_ctx_id_t contextHdl; gss_OID mech, mech2; - debug(env, "[GSSLibStub_importContext]"); + TRACE0("[GSSLibStub_importContext]"); contextHdl = GSS_C_NO_CONTEXT; - if (!initGSSBuffer(env, jctxtToken, &ctxtToken)) { + initGSSBuffer(env, jctxtToken, &ctxtToken); + if ((*env)->ExceptionCheck(env)) { return NULL; } @@ -770,12 +775,10 @@ Java_sun_security_jgss_wrapper_GSSLibStub_importContext(JNIEnv *env, GSS_S_UNAVAILABLE, GSS_S_UNAUTHORIZED */ major = (*ftab->importSecContext)(&minor, &ctxtToken, &contextHdl); - sprintf(debugBuf, "[GSSLibStub_importContext] pContext=%ld", - (long) contextHdl); - debug(env, debugBuf); + TRACE1("[GSSLibStub_importContext] pContext=%ld", (long) contextHdl); /* release intermediate buffers */ - resetGSSBuffer(env, jctxtToken, &ctxtToken); + resetGSSBuffer(&ctxtToken); checkStatus(env, jobj, major, minor, "[GSSLibStub_importContext]"); /* return immediately if an exception has occurred */ @@ -794,9 +797,10 @@ Java_sun_security_jgss_wrapper_GSSLibStub_importContext(JNIEnv *env, return NULL; } - mech2 = (gss_OID) jlong_to_ptr((*env)->GetLongField(env, jobj, FID_GSSLibStub_pMech)); + mech2 = (gss_OID) jlong_to_ptr((*env)->GetLongField(env, jobj, + FID_GSSLibStub_pMech)); - if (sameMech(env, mech, mech2) == JNI_TRUE) { + if (sameMech(mech, mech2) == JNI_TRUE) { /* mech match - return the context object */ return (*env)->NewObject(env, CLS_NativeGSSContext, MID_NativeGSSContext_ctor, @@ -805,10 +809,11 @@ Java_sun_security_jgss_wrapper_GSSLibStub_importContext(JNIEnv *env, /* mech mismatch - clean up then return null */ major = (*ftab->deleteSecContext)(&minor, &contextHdl, GSS_C_NO_BUFFER); checkStatus(env, jobj, major, minor, - "[GSSLibStub_importContext] cleanup"); + "[GSSLibStub_importContext] cleanup"); return NULL; } } + /* * Class: sun_security_jgss_wrapper_GSSLibStub * Method: initContext @@ -838,7 +843,8 @@ Java_sun_security_jgss_wrapper_GSSLibStub_initContext(JNIEnv *env, gss_OID aMech; jobject jMech; */ - debug(env, "[GSSLibStub_initContext]"); + + TRACE0("[GSSLibStub_initContext]"); credHdl = (gss_cred_id_t) jlong_to_ptr(pCred); contextHdl = (gss_ctx_id_t) jlong_to_ptr( @@ -849,20 +855,19 @@ Java_sun_security_jgss_wrapper_GSSLibStub_initContext(JNIEnv *env, FID_NativeGSSContext_flags); time = getGSSTime((*env)->GetIntField(env, jcontextSpi, FID_NativeGSSContext_lifetime)); - cb = getGSSCB(env, jcb); + cb = newGSSCB(env, jcb); if ((*env)->ExceptionCheck(env)) { - free(cb); return NULL; } - if (!initGSSBuffer(env, jinToken, &inToken)) { + initGSSBuffer(env, jinToken, &inToken); + if ((*env)->ExceptionCheck(env)) { + deleteGSSCB(cb); return NULL; } - sprintf(debugBuf, - "[GSSLibStub_initContext] before: pCred=%ld, pContext=%ld", + TRACE2( "[GSSLibStub_initContext] before: pCred=%ld, pContext=%ld", (long)credHdl, (long)contextHdl); - debug(env, debugBuf); /* gss_init_sec_context(...) => GSS_S_CONTINUE_NEEDED(!), GSS_S_DEFECTIVE_TOKEN, GSS_S_NO_CRED, GSS_S_DEFECTIVE_CREDENTIAL(!), @@ -870,29 +875,24 @@ Java_sun_security_jgss_wrapper_GSSLibStub_initContext(JNIEnv *env, GSS_S_OLD_TOKEN, GSS_S_DUPLICATE_TOKEN, GSS_S_NO_CONTEXT(!), GSS_S_BAD_NAMETYPE, GSS_S_BAD_NAME(!), GSS_S_BAD_MECH */ major = (*ftab->initSecContext)(&minor, credHdl, - &contextHdl, targetName, mech, - flags, time, cb, &inToken, NULL /*aMech*/, - &outToken, &aFlags, &aTime); + &contextHdl, targetName, mech, + flags, time, cb, &inToken, NULL /*aMech*/, + &outToken, &aFlags, &aTime); - sprintf(debugBuf, "[GSSLibStub_initContext] after: pContext=%ld", - (long)contextHdl); - debug(env, debugBuf); - sprintf(debugBuf, "[GSSLibStub_initContext] outToken len=%ld", - (long)outToken.length); - debug(env, debugBuf); + TRACE2("[GSSLibStub_initContext] after: pContext=%ld, outToken len=%ld", + (long)contextHdl, (long)outToken.length); if (GSS_ERROR(major) == GSS_S_COMPLETE) { /* update member values if needed */ (*env)->SetLongField(env, jcontextSpi, FID_NativeGSSContext_pContext, ptr_to_jlong(contextHdl)); (*env)->SetIntField(env, jcontextSpi, FID_NativeGSSContext_flags, aFlags); - sprintf(debugBuf, "[GSSLibStub_initContext] set flags=0x%x", aFlags); - debug(env, debugBuf); + TRACE1("[GSSLibStub_initContext] set flags=0x%x", aFlags); if (major == GSS_S_COMPLETE) { (*env)->SetIntField(env, jcontextSpi, FID_NativeGSSContext_lifetime, getJavaTime(aTime)); - debug(env, "[GSSLibStub_initContext] context established"); + TRACE0("[GSSLibStub_initContext] context established"); (*env)->SetBooleanField(env, jcontextSpi, FID_NativeGSSContext_isEstablished, @@ -904,16 +904,23 @@ Java_sun_security_jgss_wrapper_GSSLibStub_initContext(JNIEnv *env, FID_NativeGSSContext_actualMech, jMech); */ } else if (major & GSS_S_CONTINUE_NEEDED) { - debug(env, "[GSSLibStub_initContext] context not established"); + TRACE0("[GSSLibStub_initContext] context not established"); major -= GSS_S_CONTINUE_NEEDED; } } - /* release intermediate buffers */ - releaseGSSCB(env, jcb, cb); - resetGSSBuffer(env, jinToken, &inToken); + + /* release intermediate buffers before checking status */ + deleteGSSCB(cb); + resetGSSBuffer(&inToken); jresult = getJavaBuffer(env, &outToken); + if ((*env)->ExceptionCheck(env)) { + return NULL; + } checkStatus(env, jobj, major, minor, "[GSSLibStub_initContext]"); + if ((*env)->ExceptionCheck(env)) { + return NULL; + } return jresult; } @@ -950,29 +957,27 @@ Java_sun_security_jgss_wrapper_GSSLibStub_acceptContext(JNIEnv *env, gss_name_t targetName; jobject jtargetName; - debug(env, "[GSSLibStub_acceptContext]"); + TRACE0("[GSSLibStub_acceptContext]"); contextHdl = (gss_ctx_id_t)jlong_to_ptr( (*env)->GetLongField(env, jcontextSpi, FID_NativeGSSContext_pContext)); credHdl = (gss_cred_id_t) jlong_to_ptr(pCred); - if (!initGSSBuffer(env, jinToken, &inToken)) { - return NULL; - } - cb = getGSSCB(env, jcb); + initGSSBuffer(env, jinToken, &inToken); if ((*env)->ExceptionCheck(env)) { - free(cb); - resetGSSBuffer(env, jinToken, &inToken); return NULL; } - srcName = GSS_C_NO_NAME; + cb = newGSSCB(env, jcb); + if ((*env)->ExceptionCheck(env)) { + resetGSSBuffer(&inToken); + return NULL; + } + srcName = targetName = GSS_C_NO_NAME; delCred = GSS_C_NO_CREDENTIAL; setTarget = (credHdl == GSS_C_NO_CREDENTIAL); aFlags = 0; - sprintf(debugBuf, - "[GSSLibStub_acceptContext] before: pCred=%ld, pContext=%ld", + TRACE2( "[GSSLibStub_acceptContext] before: pCred=%ld, pContext=%ld", (long) credHdl, (long) contextHdl); - debug(env, debugBuf); /* gss_accept_sec_context(...) => GSS_S_CONTINUE_NEEDED(!), GSS_S_DEFECTIVE_TOKEN, GSS_S_DEFECTIVE_CREDENTIAL(!), @@ -983,91 +988,107 @@ Java_sun_security_jgss_wrapper_GSSLibStub_acceptContext(JNIEnv *env, (*ftab->acceptSecContext)(&minor, &contextHdl, credHdl, &inToken, cb, &srcName, &aMech, &outToken, &aFlags, &aTime, &delCred); + /* release intermediate buffers before checking status */ - sprintf(debugBuf, - "[GSSLibStub_acceptContext] after: pCred=%ld, pContext=%ld, pDelegCred=%ld", + deleteGSSCB(cb); + resetGSSBuffer(&inToken); + + TRACE3("[GSSLibStub_acceptContext] after: pCred=%ld, pContext=%ld, pDelegCred=%ld", (long)credHdl, (long)contextHdl, (long) delCred); - debug(env, debugBuf); if (GSS_ERROR(major) == GSS_S_COMPLETE) { /* update member values if needed */ (*env)->SetLongField(env, jcontextSpi, FID_NativeGSSContext_pContext, ptr_to_jlong(contextHdl)); - sprintf(debugBuf, "[GSSLibStub_acceptContext] set pContext=%ld", + TRACE1("[GSSLibStub_acceptContext] set pContext=%ld", (long)contextHdl); - debug(env, debugBuf); + // WORKAROUND for a Heimdal bug if (delCred == GSS_C_NO_CREDENTIAL) { aFlags &= 0xfffffffe; } (*env)->SetIntField(env, jcontextSpi, FID_NativeGSSContext_flags, aFlags); - sprintf(debugBuf, "[GSSLibStub_acceptContext] set flags=0x%x", - aFlags); - debug(env, debugBuf); + + TRACE1("[GSSLibStub_acceptContext] set flags=0x%x", aFlags); + if (setTarget) { major2 = (*ftab->inquireContext)(&minor2, contextHdl, NULL, &targetName, NULL, NULL, NULL, NULL, NULL); + checkStatus(env, jobj, major2, minor2, + "[GSSLibStub_acceptContext] inquire"); + if ((*env)->ExceptionCheck(env)) { + goto error; + } + jtargetName = (*env)->NewObject(env, CLS_GSSNameElement, MID_GSSNameElement_ctor, ptr_to_jlong(targetName), jobj); - - /* return immediately if an exception has occurred */ if ((*env)->ExceptionCheck(env)) { - resetGSSBuffer(env, jinToken, &inToken); - return NULL; + goto error; } - sprintf(debugBuf, "[GSSLibStub_acceptContext] set targetName=%ld", + + TRACE1("[GSSLibStub_acceptContext] set targetName=%ld", (long)targetName); - debug(env, debugBuf); + (*env)->SetObjectField(env, jcontextSpi, FID_NativeGSSContext_targetName, jtargetName); + if ((*env)->ExceptionCheck(env)) { + goto error; + } } if (srcName != GSS_C_NO_NAME) { jsrcName = (*env)->NewObject(env, CLS_GSSNameElement, MID_GSSNameElement_ctor, ptr_to_jlong(srcName), jobj); - /* return immediately if an exception has occurred */ if ((*env)->ExceptionCheck(env)) { - resetGSSBuffer(env, jinToken, &inToken); - return NULL; + goto error; } - sprintf(debugBuf, "[GSSLibStub_acceptContext] set srcName=%ld", - (long)srcName); - debug(env, debugBuf); + + TRACE1("[GSSLibStub_acceptContext] set srcName=%ld", (long)srcName); + (*env)->SetObjectField(env, jcontextSpi, FID_NativeGSSContext_srcName, jsrcName); + if ((*env)->ExceptionCheck(env)) { + goto error; + } } if (major == GSS_S_COMPLETE) { - debug(env, "[GSSLibStub_acceptContext] context established"); + TRACE0("[GSSLibStub_acceptContext] context established"); (*env)->SetIntField(env, jcontextSpi, FID_NativeGSSContext_lifetime, getJavaTime(aTime)); - (*env)->SetBooleanField(env, jcontextSpi, FID_NativeGSSContext_isEstablished, JNI_TRUE); jMech = getJavaOID(env, aMech); + if ((*env)->ExceptionCheck(env)) { + goto error; + } (*env)->SetObjectField(env, jcontextSpi, FID_NativeGSSContext_actualMech, jMech); + if ((*env)->ExceptionCheck(env)) { + goto error; + } if (delCred != GSS_C_NO_CREDENTIAL) { jdelCred = (*env)->NewObject(env, CLS_GSSCredElement, MID_GSSCredElement_ctor, ptr_to_jlong(delCred), jsrcName, jMech); - /* return immediately if an exception has occurred */ if ((*env)->ExceptionCheck(env)) { - resetGSSBuffer(env, jinToken, &inToken); - return NULL; + goto error; } (*env)->SetObjectField(env, jcontextSpi, FID_NativeGSSContext_delegatedCred, jdelCred); - sprintf(debugBuf, "[GSSLibStub_acceptContext] set delegatedCred=%ld", + TRACE1("[GSSLibStub_acceptContext] set delegatedCred=%ld", (long) delCred); - debug(env, debugBuf); + + if ((*env)->ExceptionCheck(env)) { + goto error; + } } } else if (major & GSS_S_CONTINUE_NEEDED) { - debug(env, "[GSSLibStub_acceptContext] context not established"); + TRACE0("[GSSLibStub_acceptContext] context not established"); if (aFlags & GSS_C_PROT_READY_FLAG) { (*env)->SetIntField(env, jcontextSpi, FID_NativeGSSContext_lifetime, @@ -1076,13 +1097,20 @@ Java_sun_security_jgss_wrapper_GSSLibStub_acceptContext(JNIEnv *env, major -= GSS_S_CONTINUE_NEEDED; } } - /* release intermediate buffers */ - releaseGSSCB(env, jcb, cb); - resetGSSBuffer(env, jinToken, &inToken); - jresult = getJavaBuffer(env, &outToken); + return getJavaBuffer(env, &outToken); - checkStatus(env, jobj, major, minor, "[GSSLibStub_acceptContext]"); - return jresult; +error: + (*ftab->releaseBuffer)(&minor, &outToken); + if (srcName != GSS_C_NO_NAME) { + (*ftab->releaseName)(&minor, &srcName); + } + if (targetName != GSS_C_NO_NAME) { + (*ftab->releaseName)(&minor, &targetName); + } + if (delCred != GSS_C_NO_CREDENTIAL) { + (*ftab->releaseCred) (&minor, &delCred); + } + return NULL; } /* @@ -1106,8 +1134,7 @@ Java_sun_security_jgss_wrapper_GSSLibStub_inquireContext(JNIEnv *env, contextHdl = (gss_ctx_id_t) jlong_to_ptr(pContext); - sprintf(debugBuf, "[GSSLibStub_inquireContext] %ld", (long)contextHdl); - debug(env, debugBuf); + TRACE1("[GSSLibStub_inquireContext] %ld", (long)contextHdl); srcName = targetName = GSS_C_NO_NAME; time = 0; @@ -1118,12 +1145,13 @@ Java_sun_security_jgss_wrapper_GSSLibStub_inquireContext(JNIEnv *env, &targetName, &time, NULL, &flags, &isInitiator, &isEstablished); /* update member values if needed */ - sprintf(debugBuf, "[GSSLibStub_inquireContext] srcName %ld", (long)srcName); - debug(env, debugBuf); - sprintf(debugBuf, "[GSSLibStub_inquireContext] targetName %ld", - (long)targetName); - debug(env, debugBuf); + TRACE2("[GSSLibStub_inquireContext] srcName %ld, targetName %ld", + (long)srcName, (long)targetName); + checkStatus(env, jobj, major, minor, "[GSSLibStub_inquireContext]"); + if ((*env)->ExceptionCheck(env)) { + return NULL; + } result[0] = ptr_to_jlong(srcName); result[1] = ptr_to_jlong(targetName); result[2] = (jlong) isInitiator; @@ -1132,12 +1160,13 @@ Java_sun_security_jgss_wrapper_GSSLibStub_inquireContext(JNIEnv *env, result[5] = (jlong) getJavaTime(time); jresult = (*env)->NewLongArray(env, 6); - CHECK_NULL_RETURN(jresult, NULL); + if (jresult == NULL) { + return NULL; + } (*env)->SetLongArrayRegion(env, jresult, 0, 6, result); - - /* release intermediate buffers */ - - checkStatus(env, jobj, major, minor, "[GSSLibStub_inquireContext]"); + if ((*env)->ExceptionCheck(env)) { + return NULL; + } return jresult; } @@ -1157,8 +1186,7 @@ Java_sun_security_jgss_wrapper_GSSLibStub_getContextMech(JNIEnv *env, contextHdl = (gss_ctx_id_t) jlong_to_ptr(pContext); - sprintf(debugBuf, "[GSSLibStub_getContextMech] %ld", (long int)pContext); - debug(env, debugBuf); + TRACE1("[GSSLibStub_getContextMech] %ld", (long int)pContext); major = (*ftab->inquireContext)(&minor, contextHdl, NULL, NULL, NULL, &mech, NULL, NULL, NULL); @@ -1187,9 +1215,8 @@ Java_sun_security_jgss_wrapper_GSSLibStub_getContextName(JNIEnv *env, contextHdl = (gss_ctx_id_t) jlong_to_ptr(pContext); - sprintf(debugBuf, "[GSSLibStub_getContextName] %ld, isSrc=%d", + TRACE2("[GSSLibStub_getContextName] %ld, isSrc=%d", (long)contextHdl, isSrc); - debug(env, debugBuf); nameHdl = GSS_C_NO_NAME; if (isSrc == JNI_TRUE) { @@ -1206,8 +1233,7 @@ Java_sun_security_jgss_wrapper_GSSLibStub_getContextName(JNIEnv *env, return jlong_zero; } - sprintf(debugBuf, "[GSSLibStub_getContextName] pName=%ld", (long) nameHdl); - debug(env, debugBuf); + TRACE1("[GSSLibStub_getContextName] pName=%ld", (long) nameHdl); return ptr_to_jlong(nameHdl); } @@ -1226,8 +1252,8 @@ Java_sun_security_jgss_wrapper_GSSLibStub_getContextTime(JNIEnv *env, OM_uint32 time; contextHdl = (gss_ctx_id_t) jlong_to_ptr(pContext); - sprintf(debugBuf, "[GSSLibStub_getContextTime] %ld", (long)contextHdl); - debug(env, debugBuf); + + TRACE1("[GSSLibStub_getContextTime] %ld", (long)contextHdl); if (contextHdl == GSS_C_NO_CONTEXT) return 0; @@ -1238,6 +1264,9 @@ Java_sun_security_jgss_wrapper_GSSLibStub_getContextTime(JNIEnv *env, major = GSS_CALLING_ERROR(major) | GSS_SUPPLEMENTARY_INFO(major); } checkStatus(env, jobj, major, minor, "[GSSLibStub_getContextTime]"); + if ((*env)->ExceptionCheck(env)) { + return 0; + } return getJavaTime(time); } @@ -1255,8 +1284,8 @@ Java_sun_security_jgss_wrapper_GSSLibStub_deleteContext(JNIEnv *env, gss_ctx_id_t contextHdl; contextHdl = (gss_ctx_id_t) jlong_to_ptr(pContext); - sprintf(debugBuf, "[GSSLibStub_deleteContext] %ld", (long)contextHdl); - debug(env, debugBuf); + + TRACE1("[GSSLibStub_deleteContext] %ld", (long)contextHdl); if (contextHdl == GSS_C_NO_CONTEXT) return ptr_to_jlong(GSS_C_NO_CONTEXT); @@ -1264,6 +1293,9 @@ Java_sun_security_jgss_wrapper_GSSLibStub_deleteContext(JNIEnv *env, major = (*ftab->deleteSecContext)(&minor, &contextHdl, GSS_C_NO_BUFFER); checkStatus(env, jobj, major, minor, "[GSSLibStub_deleteContext]"); + if ((*env)->ExceptionCheck(env)) { + return jlong_zero; + } return (jlong) ptr_to_jlong(contextHdl); } @@ -1286,20 +1318,27 @@ Java_sun_security_jgss_wrapper_GSSLibStub_wrapSizeLimit(JNIEnv *env, gss_qop_t qop; contextHdl = (gss_ctx_id_t) jlong_to_ptr(pContext); - sprintf(debugBuf, "[GSSLibStub_wrapSizeLimit] %ld", (long)contextHdl); - debug(env, debugBuf); - // Check context handle?? + TRACE1("[GSSLibStub_wrapSizeLimit] %ld", (long)contextHdl); + + if (contextHdl == GSS_C_NO_CONTEXT) { + // Twik per javadoc + checkStatus(env, jobj, GSS_S_NO_CONTEXT, 0, + "[GSSLibStub_wrapSizeLimit]"); + return 0; + } qop = (gss_qop_t) jqop; outSize = (OM_uint32) joutSize; - maxInSize = 0; /* gss_wrap_size_limit(...) => GSS_S_NO_CONTEXT(!), GSS_S_CONTEXT_EXPIRED, GSS_S_BAD_QOP */ major = (*ftab->wrapSizeLimit)(&minor, contextHdl, reqFlag, qop, outSize, &maxInSize); checkStatus(env, jobj, major, minor, "[GSSLibStub_wrapSizeLimit]"); + if ((*env)->ExceptionCheck(env)) { + return 0; + } return (jint) maxInSize; } @@ -1319,8 +1358,8 @@ Java_sun_security_jgss_wrapper_GSSLibStub_exportContext(JNIEnv *env, jbyteArray jresult; contextHdl = (gss_ctx_id_t) jlong_to_ptr(pContext); - sprintf(debugBuf, "[GSSLibStub_exportContext] %ld", (long)contextHdl); - debug(env, debugBuf); + + TRACE1("[GSSLibStub_exportContext] %ld", (long)contextHdl); if (contextHdl == GSS_C_NO_CONTEXT) { // Twik per javadoc @@ -1334,7 +1373,14 @@ Java_sun_security_jgss_wrapper_GSSLibStub_exportContext(JNIEnv *env, /* release intermediate buffers */ jresult = getJavaBuffer(env, &interProcToken); + if ((*env)->ExceptionCheck(env)) { + return NULL; + } checkStatus(env, jobj, major, minor, "[GSSLibStub_exportContext]"); + if ((*env)->ExceptionCheck(env)) { + return NULL; + } + return jresult; } @@ -1356,8 +1402,8 @@ Java_sun_security_jgss_wrapper_GSSLibStub_getMic(JNIEnv *env, jobject jobj, jbyteArray jresult; contextHdl = (gss_ctx_id_t) jlong_to_ptr(pContext); - sprintf(debugBuf, "[GSSLibStub_getMic] %ld", (long)contextHdl); - debug(env, debugBuf); + + TRACE1("[GSSLibStub_getMic] %ld", (long)contextHdl); if (contextHdl == GSS_C_NO_CONTEXT) { // Twik per javadoc @@ -1366,7 +1412,8 @@ Java_sun_security_jgss_wrapper_GSSLibStub_getMic(JNIEnv *env, jobject jobj, } contextHdl = (gss_ctx_id_t) jlong_to_ptr(pContext); qop = (gss_qop_t) jqop; - if (!initGSSBuffer(env, jmsg, &msg)) { + initGSSBuffer(env, jmsg, &msg); + if ((*env)->ExceptionCheck(env)) { return NULL; } @@ -1376,10 +1423,16 @@ Java_sun_security_jgss_wrapper_GSSLibStub_getMic(JNIEnv *env, jobject jobj, (*ftab->getMic)(&minor, contextHdl, qop, &msg, &msgToken); /* release intermediate buffers */ - resetGSSBuffer(env, jmsg, &msg); + resetGSSBuffer(&msg); jresult = getJavaBuffer(env, &msgToken); - + if ((*env)->ExceptionCheck(env)) { + return NULL; + } checkStatus(env, jobj, major, minor, "[GSSLibStub_getMic]"); + if ((*env)->ExceptionCheck(env)) { + return NULL; + } + return jresult; } @@ -1403,8 +1456,8 @@ Java_sun_security_jgss_wrapper_GSSLibStub_verifyMic(JNIEnv *env, gss_qop_t qop; contextHdl = (gss_ctx_id_t) jlong_to_ptr(pContext); - sprintf(debugBuf, "[GSSLibStub_verifyMic] %ld", (long)contextHdl); - debug(env, debugBuf); + + TRACE1("[GSSLibStub_verifyMic] %ld", (long)contextHdl); if (contextHdl == GSS_C_NO_CONTEXT) { // Twik per javadoc @@ -1413,12 +1466,18 @@ Java_sun_security_jgss_wrapper_GSSLibStub_verifyMic(JNIEnv *env, return; } - if (!initGSSBuffer(env, jmsg, &msg) || - !initGSSBuffer(env, jmsgToken, &msgToken)) { + qop = (gss_qop_t) (*env)->CallIntMethod(env, jprop, MID_MessageProp_getQOP); + if ((*env)->ExceptionCheck(env)) { return; } + + initGSSBuffer(env, jmsg, &msg); + if ((*env)->ExceptionCheck(env)) { return; } + + initGSSBuffer(env, jmsgToken, &msgToken); + if ((*env)->ExceptionCheck(env)) { + resetGSSBuffer(&msg); return; } - qop = (gss_qop_t) (*env)->CallIntMethod(env, jprop, MID_MessageProp_getQOP); /* gss_verify_mic(...) => GSS_S_DEFECTIVE_TOKEN, GSS_S_BAD_MIC, GSS_S_CONTEXT_EXPIRED, GSS_S_DUPLICATE_TOKEN(!), GSS_S_OLD_TOKEN(!), GSS_S_UNSEQ_TOKEN(!), GSS_S_GAP_TOKEN(!), GSS_S_NO_CONTEXT(!) */ @@ -1426,13 +1485,24 @@ Java_sun_security_jgss_wrapper_GSSLibStub_verifyMic(JNIEnv *env, (*ftab->verifyMic)(&minor, contextHdl, &msg, &msgToken, &qop); /* release intermediate buffers */ - resetGSSBuffer(env, jmsg, &msg); - resetGSSBuffer(env, jmsgToken, &msgToken); + resetGSSBuffer(&msg); + resetGSSBuffer(&msgToken); + + checkStatus(env, jobj, GSS_ERROR(major), minor, "[GSSLibStub_verifyMic]"); + if ((*env)->ExceptionCheck(env)) { + return; + } (*env)->CallVoidMethod(env, jprop, MID_MessageProp_setQOP, qop); + if ((*env)->ExceptionCheck(env)) { + return; + } + setSupplementaryInfo(env, jobj, jprop, GSS_SUPPLEMENTARY_INFO(major), minor); - checkStatus(env, jobj, GSS_ERROR(major), minor, "[GSSLibStub_verifyMic]"); + if ((*env)->ExceptionCheck(env)) { + return; + } } /* @@ -1457,8 +1527,8 @@ Java_sun_security_jgss_wrapper_GSSLibStub_wrap(JNIEnv *env, jbyteArray jresult; contextHdl = (gss_ctx_id_t) jlong_to_ptr(pContext); - sprintf(debugBuf, "[GSSLibStub_wrap] %ld", (long)contextHdl); - debug(env, debugBuf); + + TRACE1("[GSSLibStub_wrap] %ld", (long)contextHdl); if (contextHdl == GSS_C_NO_CONTEXT) { // Twik per javadoc @@ -1468,24 +1538,43 @@ Java_sun_security_jgss_wrapper_GSSLibStub_wrap(JNIEnv *env, confFlag = (*env)->CallBooleanMethod(env, jprop, MID_MessageProp_getPrivacy); - qop = (gss_qop_t) - (*env)->CallIntMethod(env, jprop, MID_MessageProp_getQOP); - if (!initGSSBuffer(env, jmsg, &msg)) { + if ((*env)->ExceptionCheck(env)) { return NULL; } + + qop = (gss_qop_t) + (*env)->CallIntMethod(env, jprop, MID_MessageProp_getQOP); + if ((*env)->ExceptionCheck(env)) { + return NULL; + } + + initGSSBuffer(env, jmsg, &msg); + if ((*env)->ExceptionCheck(env)) { + return NULL; + } + /* gss_wrap(...) => GSS_S_CONTEXT_EXPIRED, GSS_S_NO_CONTEXT(!), GSS_S_BAD_QOP */ major = (*ftab->wrap)(&minor, contextHdl, confFlag, qop, &msg, &confState, &msgToken); - (*env)->CallVoidMethod(env, jprop, MID_MessageProp_setPrivacy, - (confState? JNI_TRUE:JNI_FALSE)); - /* release intermediate buffers */ - resetGSSBuffer(env, jmsg, &msg); + resetGSSBuffer(&msg); jresult = getJavaBuffer(env, &msgToken); + if ((*env)->ExceptionCheck(env)) { + return NULL; + } checkStatus(env, jobj, major, minor, "[GSSLibStub_wrap]"); + if ((*env)->ExceptionCheck(env)) { + return NULL; + } + + (*env)->CallVoidMethod(env, jprop, MID_MessageProp_setPrivacy, + (confState? JNI_TRUE:JNI_FALSE)); + if ((*env)->ExceptionCheck(env)) { + return NULL; + } return jresult; } @@ -1510,17 +1599,20 @@ Java_sun_security_jgss_wrapper_GSSLibStub_unwrap(JNIEnv *env, jbyteArray jresult; contextHdl = (gss_ctx_id_t) jlong_to_ptr(pContext); - sprintf(debugBuf, "[GSSLibStub_unwrap] %ld", (long)contextHdl); - debug(env, debugBuf); + + TRACE1("[GSSLibStub_unwrap] %ld", (long)contextHdl); if (contextHdl == GSS_C_NO_CONTEXT) { // Twik per javadoc checkStatus(env, jobj, GSS_S_CONTEXT_EXPIRED, 0, "[GSSLibStub_unwrap]"); return NULL; } - if (!initGSSBuffer(env, jmsgToken, &msgToken)) { + + initGSSBuffer(env, jmsgToken, &msgToken); + if ((*env)->ExceptionCheck(env)) { return NULL; } + confState = 0; qop = GSS_C_QOP_DEFAULT; /* gss_unwrap(...) => GSS_S_DEFECTIVE_TOKEN, GSS_S_BAD_MIC, @@ -1528,17 +1620,34 @@ Java_sun_security_jgss_wrapper_GSSLibStub_unwrap(JNIEnv *env, GSS_S_UNSEQ_TOKEN(!), GSS_S_GAP_TOKEN(!), GSS_S_NO_CONTEXT(!) */ major = (*ftab->unwrap)(&minor, contextHdl, &msgToken, &msg, &confState, &qop); + + /* release intermediate buffers */ + resetGSSBuffer(&msgToken); + jresult = getJavaBuffer(env, &msg); + if ((*env)->ExceptionCheck(env)) { + return NULL; + } + + checkStatus(env, jobj, GSS_ERROR(major), minor, "[GSSLibStub_unwrap]"); + if ((*env)->ExceptionCheck(env)) { + return NULL; + } + /* update the message prop with relevant info */ (*env)->CallVoidMethod(env, jprop, MID_MessageProp_setPrivacy, (confState != 0)); + if ((*env)->ExceptionCheck(env)) { + return NULL; + } (*env)->CallVoidMethod(env, jprop, MID_MessageProp_setQOP, qop); + if ((*env)->ExceptionCheck(env)) { + return NULL; + } setSupplementaryInfo(env, jobj, jprop, GSS_SUPPLEMENTARY_INFO(major), - minor); + minor); + if ((*env)->ExceptionCheck(env)) { + return NULL; + } - /* release intermediate buffers */ - resetGSSBuffer(env, jmsgToken, &msgToken); - jresult = getJavaBuffer(env, &msg); - - checkStatus(env, jobj, GSS_ERROR(major), minor, "[GSSLibStub_unwrap]"); return jresult; } diff --git a/jdk/src/share/native/sun/security/jgss/wrapper/NativeUtil.c b/jdk/src/share/native/sun/security/jgss/wrapper/NativeUtil.c index e3a8be9ffc2..7095af4e17e 100644 --- a/jdk/src/share/native/sun/security/jgss/wrapper/NativeUtil.c +++ b/jdk/src/share/native/sun/security/jgss/wrapper/NativeUtil.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -27,9 +27,6 @@ #include "NativeFunc.h" #include "jlong.h" #include -#include "jni_util.h" - -extern void throwOutOfMemoryError(JNIEnv *env, const char *message); const int JAVA_DUPLICATE_TOKEN_CODE = 19; /* DUPLICATE_TOKEN */ const int JAVA_OLD_TOKEN_CODE = 20; /* OLD_TOKEN */ @@ -83,7 +80,6 @@ jmethodID MID_InetAddress_getAddr; jmethodID MID_GSSNameElement_ctor; jmethodID MID_GSSCredElement_ctor; jmethodID MID_NativeGSSContext_ctor; -jmethodID MID_SunNativeProvider_debug; jfieldID FID_GSSLibStub_pMech; jfieldID FID_NativeGSSContext_pContext; jfieldID FID_NativeGSSContext_srcName; @@ -94,7 +90,8 @@ jfieldID FID_NativeGSSContext_delegatedCred; jfieldID FID_NativeGSSContext_flags; jfieldID FID_NativeGSSContext_lifetime; jfieldID FID_NativeGSSContext_actualMech; -char debugBuf[256]; + +int JGSS_DEBUG; JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *jvm, void *reserved) { @@ -292,13 +289,6 @@ JNI_OnLoad(JavaVM *jvm, void *reserved) { printf("Couldn't find NativeGSSContext(long, GSSLibStub) constructor\n"); return JNI_ERR; } - MID_SunNativeProvider_debug = - (*env)->GetStaticMethodID(env, CLS_SunNativeProvider, "debug", - "(Ljava/lang/String;)V"); - if (MID_SunNativeProvider_debug == NULL) { - printf("Couldn't find SunNativeProvider.debug(String) method\n"); - return JNI_ERR; - } /* Compute and cache the field ID */ cls = (*env)->FindClass(env, "sun/security/jgss/wrapper/GSSLibStub"); if (cls == NULL) { @@ -449,14 +439,28 @@ jint getJavaErrorCode(int cNonCallingErr) { } return GSS_S_COMPLETE; } + + +/* Throws a Java Exception by name */ +void throwByName(JNIEnv *env, const char *name, const char *msg) { + jclass cls = (*env)->FindClass(env, name); + + if (cls != NULL) { + (*env)->ThrowNew(env, cls, msg); + } +} + +void throwOutOfMemoryError(JNIEnv *env, const char *message) { + throwByName(env, "java/lang/OutOfMemoryError", message); +} + /* * Utility routine for creating a java.lang.String object - * using the specified gss_buffer_t structure. After the, - * String object is created, the specified gss_buffer_t - * structure is released. + * using the specified gss_buffer_t structure. The specified + * gss_buffer_t structure is always released. */ jstring getJavaString(JNIEnv *env, gss_buffer_t bytes) { - jstring result; + jstring result = NULL; OM_uint32 minor; int len; jbyteArray jbytes; @@ -466,9 +470,18 @@ jstring getJavaString(JNIEnv *env, gss_buffer_t bytes) { NOTE: do NOT include the trailing NULL */ len = bytes->length; jbytes = (*env)->NewByteArray(env, len); + if (jbytes == NULL) { + goto finish; + } + (*env)->SetByteArrayRegion(env, jbytes, 0, len, (jbyte *) bytes->value); + if ((*env)->ExceptionCheck(env)) { + goto finish; + } + result = (*env)->NewObject(env, CLS_String, MID_String_ctor, jbytes); + finish: (*env)->DeleteLocalRef(env, jbytes); (*ftab->releaseBuffer)(&minor, bytes); return result; @@ -491,17 +504,15 @@ jstring getMinorMessage(JNIEnv *env, jobject jstub, OM_uint32 statusValue) { } else { mech = GSS_C_NO_OID; } + /* gss_display_status(...) => GSS_S_BAD_MECH, GSS_S_BAD_STATUS */ + // TBD: check messageContext value and repeat the call if necessary major = (*ftab->displayStatus)(&minor, statusValue, GSS_C_MECH_CODE, mech, - &messageContext, &statusString); - /* release intermediate buffers */ - msg = getJavaString(env, &statusString); - if (msg == NULL && !(*env)->ExceptionCheck(env)) { - throwOutOfMemoryError(env, NULL); - } - (*ftab->releaseBuffer)(&minor, &statusString); - return msg; + &messageContext, &statusString); + + return getJavaString(env, &statusString); } + /* * Utility routine checking the specified major and minor * status codes. GSSExceptions will be thrown if they are @@ -521,11 +532,9 @@ void checkStatus(JNIEnv *env, jobject jstub, OM_uint32 major, routineErr = GSS_ROUTINE_ERROR(major); supplementaryInfo = GSS_SUPPLEMENTARY_INFO(major); - sprintf(debugBuf, "%s Status major/minor = %x/%d", methodName, major, minor); - debug(env, debugBuf); - sprintf(debugBuf, "%s Status c/r/s = %d/%d/%d ", methodName, callingErr>>24, - routineErr>>16, supplementaryInfo); - debug(env, debugBuf); + TRACE3("%s Status major/minor = %x/%d", methodName, major, minor); + TRACE3("c/r/s = %d/%d/%d ", callingErr>>24, routineErr>>16, + supplementaryInfo); jmajor = getJavaErrorCode(routineErr | supplementaryInfo); jminor = minor; @@ -533,12 +542,17 @@ void checkStatus(JNIEnv *env, jobject jstub, OM_uint32 major, jmsg = NULL; if (minor != 0) { jmsg = getMinorMessage(env, jstub, minor); - CHECK_NULL(jmsg); + if ((*env)->ExceptionCheck(env)) { + return; + } } + gssEx = (*env)->NewObject(env, CLS_GSSException, MID_GSSException_ctor3, jmajor, jminor, jmsg); - (*env)->Throw(env, gssEx); + if (gssEx != NULL) { + (*env)->Throw(env, gssEx); + } } else { /* Error in calling the GSS api */ if (callingErr == GSS_S_CALL_INACCESSIBLE_READ) { @@ -550,70 +564,88 @@ void checkStatus(JNIEnv *env, jobject jstub, OM_uint32 major, } jmajor = 13; /* use GSSException.FAILURE for now */ jmsg = (*env)->NewStringUTF(env, msg); - CHECK_NULL(jmsg); + if (jmsg == NULL) { + return; + } gssEx = (*env)->NewObject(env, CLS_GSSException, MID_GSSException_ctor3, jmajor, jminor, jmsg); - CHECK_NULL(gssEx); - (*env)->Throw(env, gssEx); + if (gssEx != NULL) { + (*env)->Throw(env, gssEx); + } } } /* * Utility routine for initializing gss_buffer_t structure * with the byte[] in the specified jbyteArray object. - * NOTE: need to call resetGSSBuffer(...) to free up - * the resources. - * Return JNI_TRUE if GetByteArrayElements() returns ok, JNI_FALSE otherwise - * If JNI_FALSE returned, then an exception has been thrown. + * NOTE: must call resetGSSBuffer() to free up the resources + * inside the gss_buffer_t structure. */ -int initGSSBuffer(JNIEnv *env, jbyteArray jbytes, - gss_buffer_t cbytes) { +void initGSSBuffer(JNIEnv *env, jbyteArray jbytes, + gss_buffer_t cbytes) { + + int len; + void* value; + if (jbytes != NULL) { - cbytes->length = (*env)->GetArrayLength(env, jbytes); - cbytes->value = (*env)->GetByteArrayElements(env, jbytes, NULL); - if (cbytes->value == NULL) { - if (!(*env)->ExceptionCheck(env)) { - throwOutOfMemoryError(env, NULL); - } - return JNI_FALSE; + len = (*env)->GetArrayLength(env, jbytes); + value = malloc(len); + if (value == NULL) { + throwOutOfMemoryError(env, NULL); + return; + } else { + (*env)->GetByteArrayRegion(env, jbytes, 0, len, value); + if ((*env)->ExceptionCheck(env)) { + free(value); + return; + } else { + cbytes->length = len; + cbytes->value = value; + } } } else { cbytes->length = 0; cbytes->value = NULL; } - return JNI_TRUE; } /* - * Utility routine for unpinning/releasing the byte[] - * associated with the specified jbyteArray object. + * Utility routine for freeing the bytes malloc'ed + * in initGSSBuffer() method. * NOTE: used in conjunction with initGSSBuffer(...). */ -void resetGSSBuffer(JNIEnv *env, jbyteArray jbytes, - gss_buffer_t cbytes) { - if ((cbytes != NULL) && (cbytes != GSS_C_NO_BUFFER) && - (cbytes->length != 0)) { - (*env)->ReleaseByteArrayElements(env, jbytes, cbytes->value, - JNI_ABORT); +void resetGSSBuffer(gss_buffer_t cbytes) { + if ((cbytes != NULL) && (cbytes != GSS_C_NO_BUFFER)) { + free(cbytes->value); + cbytes->length = 0; + cbytes->value = NULL; } } + /* * Utility routine for creating a jbyteArray object using * the byte[] value in specified gss_buffer_t structure. - * NOTE: the specified gss_buffer_t structure will be - * released in this routine. + * NOTE: the specified gss_buffer_t structure is always + * released. */ jbyteArray getJavaBuffer(JNIEnv *env, gss_buffer_t cbytes) { - jbyteArray result; + jbyteArray result = NULL; OM_uint32 minor; // don't care, just so it compiles - if ((cbytes != NULL) && (cbytes != GSS_C_NO_BUFFER) && - (cbytes->length != 0)) { - result = (*env)->NewByteArray(env, cbytes->length); - if (result != NULL) - (*env)->SetByteArrayRegion(env, result, 0, cbytes->length, - cbytes->value); + if (cbytes != NULL) { + if ((cbytes != GSS_C_NO_BUFFER) && (cbytes->length != 0)) { + result = (*env)->NewByteArray(env, cbytes->length); + if (result == NULL) { + goto finish; + } + (*env)->SetByteArrayRegion(env, result, 0, cbytes->length, + cbytes->value); + if ((*env)->ExceptionCheck(env)) { + result = NULL; + } + } + finish: (*ftab->releaseBuffer)(&minor, cbytes); return result; } @@ -623,8 +655,7 @@ jbyteArray getJavaBuffer(JNIEnv *env, gss_buffer_t cbytes) { /* * Utility routine for creating a non-mech gss_OID using * the specified org.ietf.jgss.Oid object. - * NOTE: need to call deleteGSSOID(...) afterwards to - * release the created gss_OID structure. + * NOTE: must call deleteGSSOID(...) to free up the gss_OID. */ gss_OID newGSSOID(JNIEnv *env, jobject jOid) { jbyteArray jbytes; @@ -633,8 +664,6 @@ gss_OID newGSSOID(JNIEnv *env, jobject jOid) { if (jOid != NULL) { jbytes = (*env)->CallObjectMethod(env, jOid, MID_Oid_getDER); if ((*env)->ExceptionCheck(env)) { - gssEx = (*env)->ExceptionOccurred(env); - (*env)->Throw(env, gssEx); return GSS_C_NO_OID; } cOid = malloc(sizeof(struct gss_OID_desc_struct)); @@ -646,17 +675,24 @@ gss_OID newGSSOID(JNIEnv *env, jobject jOid) { cOid->elements = malloc(cOid->length); if (cOid->elements == NULL) { throwOutOfMemoryError(env,NULL); - free(cOid); - return GSS_C_NO_OID; + goto cleanup; } (*env)->GetByteArrayRegion(env, jbytes, 2, cOid->length, cOid->elements); - (*env)->DeleteLocalRef(env, jbytes); + if ((*env)->ExceptionCheck(env)) { + goto cleanup; + } return cOid; } else { return GSS_C_NO_OID; } + cleanup: + (*env)->DeleteLocalRef(env, jbytes); + free(cOid->elements); + free(cOid); + return GSS_C_NO_OID; } + /* * Utility routine for releasing the specified gss_OID * structure. @@ -668,6 +704,7 @@ void deleteGSSOID(gss_OID oid) { free(oid); } } + /* * Utility routine for creating a org.ietf.jgss.Oid * object using the specified gss_OID structure. @@ -676,7 +713,7 @@ jobject getJavaOID(JNIEnv *env, gss_OID cOid) { int cLen; char oidHdr[2]; jbyteArray jbytes; - jobject result; + jobject result = NULL; if ((cOid == NULL) || (cOid == GSS_C_NO_OID)) { return NULL; @@ -685,12 +722,21 @@ jobject getJavaOID(JNIEnv *env, gss_OID cOid) { oidHdr[0] = 6; oidHdr[1] = cLen; jbytes = (*env)->NewByteArray(env, cLen+2); - CHECK_NULL_RETURN(jbytes, NULL); + if (jbytes == NULL) { + return NULL; + } (*env)->SetByteArrayRegion(env, jbytes, 0, 2, (jbyte *) oidHdr); + if ((*env)->ExceptionCheck(env)) { + return NULL; + } (*env)->SetByteArrayRegion(env, jbytes, 2, cLen, (jbyte *) cOid->elements); - + if ((*env)->ExceptionCheck(env)) { + return NULL; + } result = (*env)->NewObject(env, CLS_Oid, MID_Oid_ctor1, jbytes); - JNU_CHECK_EXCEPTION_RETURN(env, NULL); + if ((*env)->ExceptionCheck(env)) { + return NULL; + } (*env)->DeleteLocalRef(env, jbytes); return result; } @@ -700,7 +746,7 @@ jobject getJavaOID(JNIEnv *env, gss_OID cOid) { * NOTE: need to call deleteGSSOIDSet(...) afterwards * to release the created gss_OID_set structure. */ -gss_OID_set newGSSOIDSet(JNIEnv *env, gss_OID oid) { +gss_OID_set newGSSOIDSet(gss_OID oid) { gss_OID_set oidSet; OM_uint32 minor; // don't care; just so it compiles @@ -741,30 +787,26 @@ jobjectArray getJavaOIDArray(JNIEnv *env, gss_OID_set cOidSet) { if (cOidSet != NULL && cOidSet != GSS_C_NO_OID_SET) { numOfOids = cOidSet->count; jOidSet = (*env)->NewObjectArray(env, numOfOids, CLS_Oid, NULL); - if (jOidSet == NULL) { + if ((*env)->ExceptionCheck(env)) { return NULL; } - if (jOidSet != NULL) { - for (i = 0; i < numOfOids; i++) { - jOid = getJavaOID(env, &(cOidSet->elements[i])); - (*env)->SetObjectArrayElement(env, jOidSet, i, jOid); - (*env)->DeleteLocalRef(env, jOid); + for (i = 0; i < numOfOids; i++) { + jOid = getJavaOID(env, &(cOidSet->elements[i])); + if ((*env)->ExceptionCheck(env)) { + return NULL; } + (*env)->SetObjectArrayElement(env, jOidSet, i, jOid); + if ((*env)->ExceptionCheck(env)) { + return NULL; + } + (*env)->DeleteLocalRef(env, jOid); } return jOidSet; } return NULL; } -void debug(JNIEnv *env, char *msg) { - jstring jmsg = (*env)->NewStringUTF(env, msg); - CHECK_NULL(jmsg); - (*env)->CallStaticVoidMethod(env, CLS_SunNativeProvider, - MID_SunNativeProvider_debug, jmsg); - (*env)->DeleteLocalRef(env, jmsg); -} - -int sameMech(JNIEnv *env, gss_OID mech, gss_OID mech2) { +int sameMech(gss_OID mech, gss_OID mech2) { int result = JNI_FALSE; // default to not equal if (mech->length == mech2->length) { diff --git a/jdk/src/share/native/sun/security/jgss/wrapper/NativeUtil.h b/jdk/src/share/native/sun/security/jgss/wrapper/NativeUtil.h index 58334a38989..26c0b6477c5 100644 --- a/jdk/src/share/native/sun/security/jgss/wrapper/NativeUtil.h +++ b/jdk/src/share/native/sun/security/jgss/wrapper/NativeUtil.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -37,12 +37,13 @@ extern "C" { extern OM_uint32 getGSSTime(jint); extern void checkStatus(JNIEnv *, jobject, OM_uint32, OM_uint32, char*); extern jint checkTime(OM_uint32); - extern jint initGSSBuffer(JNIEnv *, jbyteArray, gss_buffer_t); - extern void resetGSSBuffer(JNIEnv *, jbyteArray, gss_buffer_t); + extern void throwOutOfMemoryError(JNIEnv *, const char*); + extern void initGSSBuffer(JNIEnv *, jbyteArray, gss_buffer_t); + extern void resetGSSBuffer(gss_buffer_t); extern gss_OID newGSSOID(JNIEnv *, jobject); extern void deleteGSSOID(gss_OID); - extern gss_OID_set newGSSOIDSet(JNIEnv *, gss_OID); + extern gss_OID_set newGSSOIDSet(gss_OID); extern void deleteGSSOIDSet(gss_OID_set); extern jbyteArray getJavaBuffer(JNIEnv *, gss_buffer_t); @@ -51,13 +52,12 @@ extern "C" { extern jobjectArray getJavaOIDArray(JNIEnv *, gss_OID_set); extern jstring getMinorMessage(JNIEnv *, jobject, OM_uint32); - extern void debug(JNIEnv *, char *); - extern int sameMech(JNIEnv *, gss_OID, gss_OID); + extern int sameMech(gss_OID, gss_OID); JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *, void *); JNIEXPORT void JNICALL JNI_OnUnload(JavaVM *, void *); - extern char debugBuf[]; + extern int JGSS_DEBUG; extern jclass CLS_Object; extern jclass CLS_GSSNameElement; @@ -85,6 +85,12 @@ extern "C" { extern jfieldID FID_NativeGSSContext_flags; extern jfieldID FID_NativeGSSContext_lifetime; extern jfieldID FID_NativeGSSContext_actualMech; + #define TRACE0(s) { if (JGSS_DEBUG) { puts(s); fflush(stdout); }} + #define TRACE1(s, p1) { if (JGSS_DEBUG) { printf(s, p1); fflush(stdout); }} + #define TRACE2(s, p1, p2) { if (JGSS_DEBUG) { printf(s, p1, p2); fflush(stdout); }} + #define TRACE3(s, p1, p2, p3) { if (JGSS_DEBUG) { printf(s, p1, p2, p3); fflush(stdout); }} + + #ifdef __cplusplus } #endif From d7853cdac77112dd3b9b2376f34f3abe6196d89f Mon Sep 17 00:00:00 2001 From: Chris Hegarty Date: Thu, 27 Mar 2014 13:42:39 +0000 Subject: [PATCH 097/116] 8038459: Remove superflous classes on platforms without an implementation [macosx, aix] Reviewed-by: erikj --- jdk/make/CompileJavaClasses.gmk | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/jdk/make/CompileJavaClasses.gmk b/jdk/make/CompileJavaClasses.gmk index 3221f4ad9fa..ec003f58c20 100644 --- a/jdk/make/CompileJavaClasses.gmk +++ b/jdk/make/CompileJavaClasses.gmk @@ -267,6 +267,20 @@ ifndef OPENJDK $(JDK_TOPDIR)/src/closed/$(OPENJDK_TARGET_OS_API_DIR)/classes endif +# No SCTP implementation on Mac OS X or AIX. These classes should be excluded. +SCTP_IMPL_CLASSES = \ + $(JDK_TOPDIR)/src/solaris/classes/sun/nio/ch/sctp/AssociationChange.java\ + $(JDK_TOPDIR)/src/solaris/classes/sun/nio/ch/sctp/AssociationImpl.java \ + $(JDK_TOPDIR)/src/solaris/classes/sun/nio/ch/sctp/PeerAddrChange.java \ + $(JDK_TOPDIR)/src/solaris/classes/sun/nio/ch/sctp/ResultContainer.java \ + $(JDK_TOPDIR)/src/solaris/classes/sun/nio/ch/sctp/SctpChannelImpl.java \ + $(JDK_TOPDIR)/src/solaris/classes/sun/nio/ch/sctp/SctpMultiChannelImpl.java \ + $(JDK_TOPDIR)/src/solaris/classes/sun/nio/ch/sctp/SctpNet.java \ + $(JDK_TOPDIR)/src/solaris/classes/sun/nio/ch/sctp/SctpNotification.java \ + $(JDK_TOPDIR)/src/solaris/classes/sun/nio/ch/sctp/SctpServerChannelImpl.java \ + $(JDK_TOPDIR)/src/solaris/classes/sun/nio/ch/sctp/SendFailed.java \ + $(JDK_TOPDIR)/src/solaris/classes/sun/nio/ch/sctp/Shutdown.java + MACOSX_SRC_DIRS := ifeq ($(OPENJDK_TARGET_OS), macosx) MACOSX_SRC_DIRS += $(JDK_TOPDIR)/src/macosx/classes @@ -278,9 +292,7 @@ ifeq ($(OPENJDK_TARGET_OS), macosx) $(JDK_TOPDIR)/src/solaris/classes/java/lang/ClassLoaderHelper.java \ $(JDK_TOPDIR)/src/solaris/classes/sun/util/locale/provider/HostLocaleProviderAdapterImpl.java \ $(JDK_TOPDIR)/src/solaris/classes/sun/nio/fs/GnomeFileTypeDetector.java \ - $(JDK_TOPDIR)/src/solaris/classes/sun/nio/ch/sctp/SctpChannelImpl.java \ - $(JDK_TOPDIR)/src/solaris/classes/sun/nio/ch/sctp/SctpMultiChannelImpl.java \ - $(JDK_TOPDIR)/src/solaris/classes/sun/nio/ch/sctp/SctpServerChannelImpl.java + EXFILES += $(SCTP_IMPL_CLASSES) endif @@ -302,9 +314,7 @@ ifeq ($(OPENJDK_TARGET_OS),aix) AIX_SRC_DIRS += $(JDK_TOPDIR)/src/aix/classes # these files are duplicated in AIX_SRC_DIRS - EXFILES += $(JDK_TOPDIR)/src/solaris/classes/sun/nio/ch/sctp/SctpChannelImpl.java \ - $(JDK_TOPDIR)/src/solaris/classes/sun/nio/ch/sctp/SctpMultiChannelImpl.java \ - $(JDK_TOPDIR)/src/solaris/classes/sun/nio/ch/sctp/SctpServerChannelImpl.java + EXFILES += $(SCTP_IMPL_CLASSES) endif # The JDK_USER_DEFINED_FILTER is a poor man's incremental build: by specifying From d056456ee847273373aa13600466a44006297def Mon Sep 17 00:00:00 2001 From: Mandy Chung Date: Thu, 27 Mar 2014 17:11:28 -0700 Subject: [PATCH 098/116] 8038451: Incorrect initialization order of static fields in sun.nio.cs.ext.JISAutoDetect$Decoder Reviewed-by: alanb, sherman --- jdk/src/share/classes/sun/nio/cs/ext/JISAutoDetect.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/jdk/src/share/classes/sun/nio/cs/ext/JISAutoDetect.java b/jdk/src/share/classes/sun/nio/cs/ext/JISAutoDetect.java index 9b346de6751..a3bedd9ab8e 100644 --- a/jdk/src/share/classes/sun/nio/cs/ext/JISAutoDetect.java +++ b/jdk/src/share/classes/sun/nio/cs/ext/JISAutoDetect.java @@ -117,6 +117,8 @@ public class JISAutoDetect } private static class Decoder extends CharsetDecoder { + private final static String osName = AccessController.doPrivileged( + (PrivilegedAction) () -> System.getProperty("os.name")); private final static String SJISName = getSJISName(); private final static String EUCJPName = getEUCJPName(); @@ -239,8 +241,6 @@ public class JISAutoDetect return ((CharsetDecoder) detectedDecoder).charset(); } - private static final String osName = AccessController.doPrivileged( - (PrivilegedAction) () -> System.getProperty("os.name")); /** * Returned Shift_JIS Charset name is OS dependent From a916ed751a6f96b2f5ce3e6dd404647397eb44d8 Mon Sep 17 00:00:00 2001 From: Alexander Stepanov Date: Fri, 28 Mar 2014 14:33:53 +0400 Subject: [PATCH 099/116] 8038242: Tidy warnings cleanup for java.awt.datatransfer, java.awt.dnd, java.awt.event Reviewed-by: pchelko, serb --- .../java/awt/datatransfer/FlavorListener.java | 2 +- .../awt/datatransfer/SystemFlavorMap.java | 1 - .../classes/java/awt/dnd/Autoscroll.java | 4 +- .../java/awt/dnd/DragGestureEvent.java | 32 +++++++------- .../java/awt/dnd/DragGestureListener.java | 2 +- .../java/awt/dnd/DragGestureRecognizer.java | 44 +++++++++---------- .../classes/java/awt/dnd/DragSource.java | 30 ++++++------- .../java/awt/dnd/DragSourceContext.java | 6 +-- .../java/awt/dnd/DragSourceDropEvent.java | 2 +- .../classes/java/awt/dnd/DragSourceEvent.java | 2 +- .../classes/java/awt/dnd/DropTarget.java | 36 +++++++-------- .../java/awt/dnd/DropTargetContext.java | 38 ++++++++-------- .../java/awt/dnd/DropTargetDragEvent.java | 12 ++--- .../java/awt/dnd/DropTargetDropEvent.java | 22 +++++----- .../classes/java/awt/dnd/DropTargetEvent.java | 4 +- .../java/awt/dnd/DropTargetListener.java | 4 +- .../awt/dnd/InvalidDnDOperationException.java | 2 +- .../awt/dnd/MouseDragGestureRecognizer.java | 22 +++++----- .../classes/java/awt/event/MouseEvent.java | 2 +- 19 files changed, 133 insertions(+), 134 deletions(-) diff --git a/jdk/src/share/classes/java/awt/datatransfer/FlavorListener.java b/jdk/src/share/classes/java/awt/datatransfer/FlavorListener.java index 280d96f9b35..cc048335f7a 100644 --- a/jdk/src/share/classes/java/awt/datatransfer/FlavorListener.java +++ b/jdk/src/share/classes/java/awt/datatransfer/FlavorListener.java @@ -38,7 +38,7 @@ public interface FlavorListener extends EventListener { * Invoked when the target {@link Clipboard} of the listener * has changed its available {@link DataFlavor}s. *

      - * Some notifications may be redundant — they are not + * Some notifications may be redundant — they are not * caused by a change of the set of DataFlavors available * on the clipboard. * For example, if the clipboard subsystem supposes that diff --git a/jdk/src/share/classes/java/awt/datatransfer/SystemFlavorMap.java b/jdk/src/share/classes/java/awt/datatransfer/SystemFlavorMap.java index 4fd4c8163cd..1b8390eccf2 100644 --- a/jdk/src/share/classes/java/awt/datatransfer/SystemFlavorMap.java +++ b/jdk/src/share/classes/java/awt/datatransfer/SystemFlavorMap.java @@ -54,7 +54,6 @@ import sun.awt.datatransfer.DataTransferer; * which correspond to platform-independent MIME types. This mapping is used * by the data transfer subsystem to transfer data between Java and native * applications, and between Java applications in separate VMs. - *

      * * @since 1.2 */ diff --git a/jdk/src/share/classes/java/awt/dnd/Autoscroll.java b/jdk/src/share/classes/java/awt/dnd/Autoscroll.java index 203826e0337..0e3f0fb459a 100644 --- a/jdk/src/share/classes/java/awt/dnd/Autoscroll.java +++ b/jdk/src/share/classes/java/awt/dnd/Autoscroll.java @@ -62,7 +62,7 @@ public interface Autoscroll { * This value is read once by the DropTarget * upon entry of the drag Cursor * into the associated Component. - *

      + * * @return the Insets */ @@ -70,7 +70,7 @@ public interface Autoscroll { /** * notify the Component to autoscroll - *

      + * * @param cursorLocn A Point indicating the * location of the cursor that triggered this operation. */ diff --git a/jdk/src/share/classes/java/awt/dnd/DragGestureEvent.java b/jdk/src/share/classes/java/awt/dnd/DragGestureEvent.java index 3c9eadd6e56..e8827f44358 100644 --- a/jdk/src/share/classes/java/awt/dnd/DragGestureEvent.java +++ b/jdk/src/share/classes/java/awt/dnd/DragGestureEvent.java @@ -82,14 +82,14 @@ public class DragGestureEvent extends EventObject { * the user's preferred action, an {@code ori} parameter * indicating the origin of the drag, and a {@code List} of * events that comprise the gesture({@code evs} parameter). - *

      + * * @param dgr The DragGestureRecognizer firing this event * @param act The user's preferred action. * For information on allowable values, see * the class description for {@link DragGestureEvent} * @param ori The origin of the drag * @param evs The List of events that comprise the gesture - *

      + * * @throws IllegalArgumentException if any parameter equals {@code null} * @throws IllegalArgumentException if the act parameter does not comply with * the values given in the class @@ -124,7 +124,7 @@ public class DragGestureEvent extends EventObject { /** * Returns the source as a DragGestureRecognizer. - *

      + * * @return the source as a DragGestureRecognizer */ @@ -135,7 +135,7 @@ public class DragGestureEvent extends EventObject { /** * Returns the Component associated * with this DragGestureEvent. - *

      + * * @return the Component */ @@ -143,7 +143,7 @@ public class DragGestureEvent extends EventObject { /** * Returns the DragSource. - *

      + * * @return the DragSource */ @@ -152,7 +152,7 @@ public class DragGestureEvent extends EventObject { /** * Returns a Point in the coordinates * of the Component over which the drag originated. - *

      + * * @return the Point where the drag originated in Component coords. */ @@ -163,7 +163,7 @@ public class DragGestureEvent extends EventObject { /** * Returns an Iterator for the events * comprising the gesture. - *

      + * * @return an Iterator for the events comprising the gesture */ @SuppressWarnings("unchecked") @@ -172,7 +172,7 @@ public class DragGestureEvent extends EventObject { /** * Returns an Object array of the * events comprising the drag gesture. - *

      + * * @return an array of the events comprising the gesture */ @@ -180,9 +180,9 @@ public class DragGestureEvent extends EventObject { /** * Returns an array of the events comprising the drag gesture. - *

      + * * @param array the array of EventObject sub(types) - *

      + * * @return an array of the events comprising the gesture */ @SuppressWarnings("unchecked") @@ -191,7 +191,7 @@ public class DragGestureEvent extends EventObject { /** * Returns an int representing the * action selected by the user. - *

      + * * @return the action selected by the user */ @@ -199,7 +199,7 @@ public class DragGestureEvent extends EventObject { /** * Returns the initial event that triggered the gesture. - *

      + * * @return the first "triggering" event in the sequence of the gesture */ @@ -242,7 +242,7 @@ public class DragGestureEvent extends EventObject { * Starts the drag given the initial Cursor to display, * the Transferable object, * and the DragSourceListener to use. - *

      + * * @param dragCursor The initial {@code Cursor} for this drag operation * or {@code null} for the default cursor handling; * see @@ -251,7 +251,7 @@ public class DragGestureEvent extends EventObject { * during drag and drop * @param transferable The source's Transferable * @param dsl The source's DragSourceListener - *

      + * * @throws InvalidDnDOperationException if * the Drag and Drop system is unable to * initiate a drag operation, or if the user @@ -269,7 +269,7 @@ public class DragGestureEvent extends EventObject { * the Image, * the Transferable object, and * the DragSourceListener to use. - *

      + * * @param dragCursor The initial {@code Cursor} for this drag operation * or {@code null} for the default cursor handling; * see @@ -280,7 +280,7 @@ public class DragGestureEvent extends EventObject { * @param imageOffset The dragImage's offset * @param transferable The source's Transferable * @param dsl The source's DragSourceListener - *

      + * * @throws InvalidDnDOperationException if * the Drag and Drop system is unable to * initiate a drag operation, or if the user diff --git a/jdk/src/share/classes/java/awt/dnd/DragGestureListener.java b/jdk/src/share/classes/java/awt/dnd/DragGestureListener.java index 5adb328b6e3..f3e600e6cd4 100644 --- a/jdk/src/share/classes/java/awt/dnd/DragGestureListener.java +++ b/jdk/src/share/classes/java/awt/dnd/DragGestureListener.java @@ -53,7 +53,7 @@ import java.util.EventListener; * drag initiating gesture. To initiate the drag and drop operation, * if appropriate, {@link DragGestureEvent#startDrag startDrag()} method on * the {@code DragGestureEvent} has to be invoked. - *

      + * * @see java.awt.dnd.DragGestureRecognizer * @see java.awt.dnd.DragGestureEvent * @param dge the DragGestureEvent describing diff --git a/jdk/src/share/classes/java/awt/dnd/DragGestureRecognizer.java b/jdk/src/share/classes/java/awt/dnd/DragGestureRecognizer.java index 18f2e2a813d..b3dbeb5f477 100644 --- a/jdk/src/share/classes/java/awt/dnd/DragGestureRecognizer.java +++ b/jdk/src/share/classes/java/awt/dnd/DragGestureRecognizer.java @@ -76,7 +76,7 @@ import java.io.Serializable; * for causing the associated * DragSource to start the Drag and Drop operation (if * appropriate). - *

      + * * @author Laurence P. G. Cable * @see java.awt.dnd.DragGestureListener * @see java.awt.dnd.DragGestureEvent @@ -96,7 +96,7 @@ public abstract class DragGestureRecognizer implements Serializable { * for this Drag and Drop operation, and the * DragGestureListener to notify * once a drag initiating gesture has been detected. - *

      + * * @param ds the DragSource this * DragGestureRecognizer * will use to process the Drag and Drop operation @@ -115,7 +115,7 @@ public abstract class DragGestureRecognizer implements Serializable { * * @param dgl the DragGestureRecognizer * to notify when a drag gesture is detected - *

      + * * @throws IllegalArgumentException * if ds is null. */ @@ -144,7 +144,7 @@ public abstract class DragGestureRecognizer implements Serializable { * DragGestureRecognizer should "observe" * for drag initiating gestures, and the action(s) * supported for this Drag and Drop operation. - *

      + * * @param ds the DragSource this * DragGestureRecognizer will use to * process the Drag and Drop operation @@ -158,7 +158,7 @@ public abstract class DragGestureRecognizer implements Serializable { * * @param sa the set (logical OR) of the DnDConstants * that this Drag and Drop operation will support - *

      + * * @throws IllegalArgumentException * if ds is null. */ @@ -174,7 +174,7 @@ public abstract class DragGestureRecognizer implements Serializable { * the Component this * DragGestureRecognizer * should "observe" for drag initiating gestures. - *

      + * * @param ds the DragSource this * DragGestureRecognizer * will use to process the Drag and Drop operation @@ -186,7 +186,7 @@ public abstract class DragGestureRecognizer implements Serializable { * If this value is null, * the DragGestureRecognizer * is not associated with any Component. - *

      + * * @throws IllegalArgumentException * if ds is null. */ @@ -199,11 +199,11 @@ public abstract class DragGestureRecognizer implements Serializable { * Construct a new DragGestureRecognizer * given the DragSource to be used in this * Drag and Drop operation. - *

      + * * @param ds the DragSource this * DragGestureRecognizer will * use to process the Drag and Drop operation - *

      + * * @throws IllegalArgumentException * if ds is null. */ @@ -233,7 +233,7 @@ public abstract class DragGestureRecognizer implements Serializable { * this DragGestureRecognizer * will use in order to process the Drag and Drop * operation. - *

      + * * @return the DragSource */ @@ -244,7 +244,7 @@ public abstract class DragGestureRecognizer implements Serializable { * that is to be "observed" by the * DragGestureRecognizer * for drag initiating gestures. - *

      + * * @return The Component this DragGestureRecognizer * is associated with */ @@ -256,7 +256,7 @@ public abstract class DragGestureRecognizer implements Serializable { * * registerListeners() and unregisterListeners() are called as a side * effect as appropriate. - *

      + * * @param c The Component or null */ @@ -274,7 +274,7 @@ public abstract class DragGestureRecognizer implements Serializable { * This method returns an int representing the * type of action(s) this Drag and Drop * operation will support. - *

      + * * @return the currently permitted source action(s) */ @@ -283,7 +283,7 @@ public abstract class DragGestureRecognizer implements Serializable { /** * This method sets the permitted source drag action(s) * for this Drag and Drop operation. - *

      + * * @param actions the permitted source drag action(s) */ @@ -295,7 +295,7 @@ public abstract class DragGestureRecognizer implements Serializable { * This method returns the first event in the * series of events that initiated * the Drag and Drop operation. - *

      + * * @return the initial event that triggered the drag gesture */ @@ -310,10 +310,10 @@ public abstract class DragGestureRecognizer implements Serializable { /** * Register a new DragGestureListener. - *

      + * * @param dgl the DragGestureListener to register * with this DragGestureRecognizer. - *

      + * * @throws java.util.TooManyListenersException if a * DragGestureListener has already been added. */ @@ -330,10 +330,10 @@ public abstract class DragGestureRecognizer implements Serializable { /** * unregister the current DragGestureListener - *

      + * * @param dgl the DragGestureListener to unregister * from this DragGestureRecognizer - *

      + * * @throws IllegalArgumentException if * dgl is not (equal to) the currently registered DragGestureListener. */ @@ -351,7 +351,7 @@ public abstract class DragGestureRecognizer implements Serializable { /** * Notify the DragGestureListener that a Drag and Drop initiating * gesture has occurred. Then reset the state of the Recognizer. - *

      + * * @param dragAction The action initially selected by the users gesture * @param p The point (in Component coords) where the gesture originated */ @@ -369,14 +369,14 @@ public abstract class DragGestureRecognizer implements Serializable { * Listeners registered on the Component by this Recognizer shall record * all Events that are recognized as part of the series of Events that go * to comprise a Drag and Drop initiating gesture via this API. - *

      + *

      * This method is used by a DragGestureRecognizer * implementation to add an InputEvent * subclass (that it believes is one in a series * of events that comprise a Drag and Drop operation) * to the array of events that this * DragGestureRecognizer maintains internally. - *

      + * * @param awtie the InputEvent * to add to this DragGestureRecognizer's * internal array of events. Note that null diff --git a/jdk/src/share/classes/java/awt/dnd/DragSource.java b/jdk/src/share/classes/java/awt/dnd/DragSource.java index 2b32b87da14..3236ca241f5 100644 --- a/jdk/src/share/classes/java/awt/dnd/DragSource.java +++ b/jdk/src/share/classes/java/awt/dnd/DragSource.java @@ -228,7 +228,7 @@ public class DragSource implements Serializable { * whether or not drag * Image support * is available on the underlying platform. - *

      + * * @return if the Drag Image support is available on this platform */ @@ -270,7 +270,7 @@ public class DragSource implements Serializable { * the Transferable subject data * of the drag, the DragSourceListener, * and the FlavorMap. - *

      + * * @param trigger the DragGestureEvent that initiated the drag * @param dragCursor the initial {@code Cursor} for this drag operation * or {@code null} for the default cursor handling; @@ -282,7 +282,7 @@ public class DragSource implements Serializable { * @param transferable the subject data of the drag * @param dsl the DragSourceListener * @param flavorMap the FlavorMap to use, or null - *

      + * * @throws java.awt.dnd.InvalidDnDOperationException * if the Drag and Drop * system is unable to initiate a drag operation, or if the user @@ -332,7 +332,7 @@ public class DragSource implements Serializable { * the Transferable subject data * of the drag, the DragSourceListener, * and the FlavorMap. - *

      + * * @param trigger the DragGestureEvent that * initiated the drag * @param dragCursor the initial {@code Cursor} for this drag operation @@ -342,7 +342,7 @@ public class DragSource implements Serializable { * @param transferable the subject data of the drag * @param dsl the DragSourceListener * @param flavorMap the FlavorMap to use or null - *

      + * * @throws java.awt.dnd.InvalidDnDOperationException * if the Drag and Drop * system is unable to initiate a drag operation, or if the user @@ -368,7 +368,7 @@ public class DragSource implements Serializable { * at the instant of the trigger, * the subject data of the drag, and * the DragSourceListener. - *

      + * * @param trigger the DragGestureEvent that initiated the drag * @param dragCursor the initial {@code Cursor} for this drag operation * or {@code null} for the default cursor handling; @@ -379,7 +379,7 @@ public class DragSource implements Serializable { * of the Cursor at the instant of the trigger * @param transferable the subject data of the drag * @param dsl the DragSourceListener - *

      + * * @throws java.awt.dnd.InvalidDnDOperationException * if the Drag and Drop * system is unable to initiate a drag operation, or if the user @@ -403,15 +403,15 @@ public class DragSource implements Serializable { * use, * the Transferable subject data * of the drag, and the DragSourceListener. - *

      - * @param trigger the DragGestureEvent that initiated the drag + * + * @param trigger the DragGestureEvent that initiated the drag * @param dragCursor the initial {@code Cursor} for this drag operation * or {@code null} for the default cursor handling; * see DragSourceContext class * for more details on the cursor handling mechanism during drag and drop * @param transferable the subject data of the drag * @param dsl the DragSourceListener - *

      + * * @throws java.awt.dnd.InvalidDnDOperationException * if the Drag and Drop * system is unable to initiate a drag operation, or if the user @@ -480,7 +480,7 @@ public class DragSource implements Serializable { /** * This method returns the * FlavorMap for this DragSource. - *

      + * * @return the FlavorMap for this DragSource */ @@ -494,13 +494,13 @@ public class DragSource implements Serializable { * sets the specified Component * and DragGestureListener on * the newly created object. - *

      + * * @param the type of {@code DragGestureRecognizer} to create * @param recognizerAbstractClass the requested abstract type * @param actions the permitted source drag actions * @param c the Component target * @param dgl the DragGestureListener to notify - *

      + * * @return the new DragGestureRecognizer or null * if the Toolkit.createDragGestureRecognizer method * has no implementation available for @@ -528,11 +528,11 @@ public class DragSource implements Serializable { * * For this DragSource * the default is MouseDragGestureRecognizer. - *

      + * * @param c the Component target for the recognizer * @param actions the permitted source actions * @param dgl the DragGestureListener to notify - *

      + * * @return the new DragGestureRecognizer or null * if the Toolkit.createDragGestureRecognizer method * has no implementation available for diff --git a/jdk/src/share/classes/java/awt/dnd/DragSourceContext.java b/jdk/src/share/classes/java/awt/dnd/DragSourceContext.java index cbc4c83b148..58e43ff3d89 100644 --- a/jdk/src/share/classes/java/awt/dnd/DragSourceContext.java +++ b/jdk/src/share/classes/java/awt/dnd/DragSourceContext.java @@ -289,7 +289,7 @@ public class DragSourceContext /** * Returns the current drag Cursor. - *

      + * * @return the current drag Cursor */ @@ -300,11 +300,11 @@ public class DragSourceContext * DragSourceContext if one has not already been added. * If a DragSourceListener already exists, * this method throws a TooManyListenersException. - *

      + * * @param dsl the DragSourceListener to add. * Note that while null is not prohibited, * it is not acceptable as a parameter. - *

      + * * @throws TooManyListenersException if * a DragSourceListener has already been added */ diff --git a/jdk/src/share/classes/java/awt/dnd/DragSourceDropEvent.java b/jdk/src/share/classes/java/awt/dnd/DragSourceDropEvent.java index 5cc3c8f6694..f31e3d233dc 100644 --- a/jdk/src/share/classes/java/awt/dnd/DragSourceDropEvent.java +++ b/jdk/src/share/classes/java/awt/dnd/DragSourceDropEvent.java @@ -36,7 +36,7 @@ package java.awt.dnd; * originator of the operation * to provide appropriate feedback to the end user * when the operation completes. - *

      + * * @since 1.2 */ diff --git a/jdk/src/share/classes/java/awt/dnd/DragSourceEvent.java b/jdk/src/share/classes/java/awt/dnd/DragSourceEvent.java index 3effe4f07ad..b9f55e15170 100644 --- a/jdk/src/share/classes/java/awt/dnd/DragSourceEvent.java +++ b/jdk/src/share/classes/java/awt/dnd/DragSourceEvent.java @@ -131,7 +131,7 @@ public class DragSourceEvent extends EventObject { /** * This method returns the DragSourceContext that * originated the event. - *

      + * * @return the DragSourceContext that originated the event */ diff --git a/jdk/src/share/classes/java/awt/dnd/DropTarget.java b/jdk/src/share/classes/java/awt/dnd/DropTarget.java index 9f5462a320b..a6939b924a7 100644 --- a/jdk/src/share/classes/java/awt/dnd/DropTarget.java +++ b/jdk/src/share/classes/java/awt/dnd/DropTarget.java @@ -234,7 +234,7 @@ public class DropTarget implements DropTargetListener, Serializable { /** * Gets the Component associated * with this DropTarget. - *

      + * * @return the current Component */ @@ -244,7 +244,7 @@ public class DropTarget implements DropTargetListener, Serializable { /** * Sets the default acceptable actions for this DropTarget - *

      + * * @param ops the default actions * @see java.awt.dnd.DnDConstants */ @@ -264,7 +264,7 @@ public class DropTarget implements DropTargetListener, Serializable { /** * Gets an int representing the * current action(s) supported by this DropTarget. - *

      + * * @return the current default actions */ @@ -275,7 +275,7 @@ public class DropTarget implements DropTargetListener, Serializable { /** * Sets the DropTarget active if true, * inactive if false. - *

      + * * @param isActive sets the DropTarget (in)active. */ @@ -291,7 +291,7 @@ public class DropTarget implements DropTargetListener, Serializable { * Reports whether or not * this DropTarget * is currently active (ready to accept drops). - *

      + * * @return true if active, false if not */ @@ -301,9 +301,9 @@ public class DropTarget implements DropTargetListener, Serializable { /** * Adds a new DropTargetListener (UNICAST SOURCE). - *

      + * * @param dtl The new DropTargetListener - *

      + * * @throws TooManyListenersException if a * DropTargetListener is already added to this * DropTarget. @@ -322,7 +322,7 @@ public class DropTarget implements DropTargetListener, Serializable { /** * Removes the current DropTargetListener (UNICAST SOURCE). - *

      + * * @param dtl the DropTargetListener to deregister. */ @@ -464,7 +464,7 @@ public class DropTarget implements DropTargetListener, Serializable { * If no FlavorMap has been set for this * DropTarget, it is associated with the default * FlavorMap. - *

      + * * @return the FlavorMap for this DropTarget */ @@ -473,7 +473,7 @@ public class DropTarget implements DropTargetListener, Serializable { /** * Sets the FlavorMap associated * with this DropTarget. - *

      + * * @param fm the new FlavorMap, or null to * associate the default FlavorMap with this DropTarget. */ @@ -494,7 +494,7 @@ public class DropTarget implements DropTargetListener, Serializable { * association of the ComponentPeer with the Component may result in * a malfunction of the DnD system. ********************************************************************** - *

      + * * @param peer The Peer of the Component we are associated with! * */ @@ -529,7 +529,7 @@ public class DropTarget implements DropTargetListener, Serializable { * disassociation of the ComponentPeer from the Component may result in * a malfunction of the DnD system. ********************************************************************** - *

      + * * @param peer The Peer of the Component we are being disassociated from! */ @@ -549,7 +549,7 @@ public class DropTarget implements DropTargetListener, Serializable { /** * Gets the DropTargetContext associated * with this DropTarget. - *

      + * * @return the DropTargetContext associated with this DropTarget. */ @@ -641,7 +641,7 @@ public class DropTarget implements DropTargetListener, Serializable { /** * construct a DropTargetAutoScroller - *

      + * * @param c the Component * @param p the Point */ @@ -710,7 +710,7 @@ public class DropTarget implements DropTargetListener, Serializable { /** * cause autoscroll to occur - *

      + * * @param newLocn the Point */ @@ -734,7 +734,7 @@ public class DropTarget implements DropTargetListener, Serializable { /** * cause autoscroll to occur - *

      + * * @param e the ActionEvent */ @@ -779,7 +779,7 @@ public class DropTarget implements DropTargetListener, Serializable { /** * initialize autoscrolling - *

      + * * @param p the Point */ @@ -791,7 +791,7 @@ public class DropTarget implements DropTargetListener, Serializable { /** * update autoscrolling with current cursor location - *

      + * * @param dragCursorLocn the Point */ diff --git a/jdk/src/share/classes/java/awt/dnd/DropTargetContext.java b/jdk/src/share/classes/java/awt/dnd/DropTargetContext.java index 5a55c844df2..43e71180c86 100644 --- a/jdk/src/share/classes/java/awt/dnd/DropTargetContext.java +++ b/jdk/src/share/classes/java/awt/dnd/DropTargetContext.java @@ -61,7 +61,7 @@ public class DropTargetContext implements Serializable { /** * Construct a DropTargetContext * given a specified DropTarget. - *

      + * * @param dt the DropTarget to associate with */ @@ -74,7 +74,7 @@ public class DropTargetContext implements Serializable { /** * This method returns the DropTarget associated with this * DropTargetContext. - *

      + * * @return the DropTarget associated with this DropTargetContext */ @@ -83,7 +83,7 @@ public class DropTargetContext implements Serializable { /** * This method returns the Component associated with * this DropTargetContext. - *

      + * * @return the Component associated with this Context */ @@ -91,7 +91,7 @@ public class DropTargetContext implements Serializable { /** * Called when associated with the DropTargetContextPeer. - *

      + * * @param dtcp the DropTargetContextPeer */ @@ -111,7 +111,7 @@ public class DropTargetContext implements Serializable { /** * This method sets the current actions acceptable to * this DropTarget. - *

      + * * @param actions an int representing the supported action(s) */ @@ -130,7 +130,7 @@ public class DropTargetContext implements Serializable { /** * This method returns an int representing the * current actions this DropTarget will accept. - *

      + * * @return the current actions acceptable to this DropTarget */ @@ -145,9 +145,9 @@ public class DropTargetContext implements Serializable { /** * This method signals that the drop is completed and * if it was successful or not. - *

      + * * @param success true for success, false if not - *

      + * * @throws InvalidDnDOperationException if a drop is not outstanding/extant */ @@ -160,7 +160,7 @@ public class DropTargetContext implements Serializable { /** * accept the Drag. - *

      + * * @param dragOperation the supported action(s) */ @@ -186,7 +186,7 @@ public class DropTargetContext implements Serializable { * called to signal that the drop is acceptable * using the specified operation. * must be called during DropTargetListener.drop method invocation. - *

      + * * @param dropOperation the supported action(s) */ @@ -212,7 +212,7 @@ public class DropTargetContext implements Serializable { /** * get the available DataFlavors of the * Transferable operand of this operation. - *

      + * * @return a DataFlavor[] containing the * supported DataFlavors of the * Transferable operand. @@ -227,7 +227,7 @@ public class DropTargetContext implements Serializable { * This method returns a the currently available DataFlavors * of the Transferable operand * as a java.util.List. - *

      + * * @return the currently available * DataFlavors as a java.util.List */ @@ -240,9 +240,9 @@ public class DropTargetContext implements Serializable { * This method returns a boolean * indicating if the given DataFlavor is * supported by this DropTargetContext. - *

      + * * @param df the DataFlavor - *

      + * * @return if the DataFlavor specified is supported */ @@ -252,9 +252,9 @@ public class DropTargetContext implements Serializable { /** * get the Transferable (proxy) operand of this operation - *

      + * * @throws InvalidDnDOperationException if a drag is not outstanding/extant - *

      + * * @return the Transferable */ @@ -279,7 +279,7 @@ public class DropTargetContext implements Serializable { /** * Get the DropTargetContextPeer - *

      + * * @return the platform peer */ @@ -322,7 +322,7 @@ public class DropTargetContext implements Serializable { * data transfer for a particular drag-n-drop operation and * a boolean which indicates whether the * drag-n-drop operation is local (within the same JVM). - *

      + * * @param t the Transferable object * @param local true, if t represents * the result of local drag-n-drop operation @@ -336,7 +336,7 @@ public class DropTargetContext implements Serializable { /** * Returns an array of DataFlavor objects indicating the flavors * the data can be provided in by the encapsulated transferable. - *

      + * * @return an array of data flavors in which the data can be * provided by the encapsulated transferable */ diff --git a/jdk/src/share/classes/java/awt/dnd/DropTargetDragEvent.java b/jdk/src/share/classes/java/awt/dnd/DropTargetDragEvent.java index daa5487a1ad..00639cf9043 100644 --- a/jdk/src/share/classes/java/awt/dnd/DropTargetDragEvent.java +++ b/jdk/src/share/classes/java/awt/dnd/DropTargetDragEvent.java @@ -80,7 +80,7 @@ public class DropTargetDragEvent extends DropTargetEvent { * the location of the "Drag" Cursor's hotspot * in the Component's coordinates, the * user drop action, and the source drop actions. - *

      + * * @param dtc The DropTargetContext for this operation * @param cursorLocn The location of the "Drag" Cursor's * hotspot in Component coordinates @@ -118,7 +118,7 @@ public class DropTargetDragEvent extends DropTargetEvent { * indicating the Cursor's current * location within the Component's * coordinates. - *

      + * * @return the current cursor location in * Component's coords. */ @@ -131,7 +131,7 @@ public class DropTargetDragEvent extends DropTargetEvent { /** * This method returns the current DataFlavors from the * DropTargetContext. - *

      + * * @return current DataFlavors from the DropTargetContext */ @@ -142,7 +142,7 @@ public class DropTargetDragEvent extends DropTargetEvent { /** * This method returns the current DataFlavors * as a java.util.List - *

      + * * @return a java.util.List of the Current DataFlavors */ @@ -153,9 +153,9 @@ public class DropTargetDragEvent extends DropTargetEvent { /** * This method returns a boolean indicating * if the specified DataFlavor is supported. - *

      + * * @param df the DataFlavor to test - *

      + * * @return if a particular DataFlavor is supported */ diff --git a/jdk/src/share/classes/java/awt/dnd/DropTargetDropEvent.java b/jdk/src/share/classes/java/awt/dnd/DropTargetDropEvent.java index e6ad6844aa8..32b16e16169 100644 --- a/jdk/src/share/classes/java/awt/dnd/DropTargetDropEvent.java +++ b/jdk/src/share/classes/java/awt/dnd/DropTargetDropEvent.java @@ -85,7 +85,7 @@ public class DropTargetDropEvent extends DropTargetEvent { * assumes that the target is not in the same virtual machine as * the source; that is, {@link #isLocalTransfer()} will * return false. - *

      + * * @param dtc The DropTargetContext for this operation * @param cursorLocn The location of the "Drag" Cursor's * hotspot in Component coordinates @@ -128,7 +128,7 @@ public class DropTargetDropEvent extends DropTargetEvent { * the current set of actions supported by the source, * and a boolean indicating if the source is in the same JVM * as the target. - *

      + * * @param dtc The DropTargetContext for this operation * @param cursorLocn The location of the "Drag" Cursor's * hotspot in Component's coordinates @@ -154,7 +154,7 @@ public class DropTargetDropEvent extends DropTargetEvent { * This method returns a Point * indicating the Cursor's current * location in the Component's coordinates. - *

      + * * @return the current Cursor location in Component's coords. */ @@ -165,7 +165,7 @@ public class DropTargetDropEvent extends DropTargetEvent { /** * This method returns the current DataFlavors. - *

      + * * @return current DataFlavors */ @@ -176,7 +176,7 @@ public class DropTargetDropEvent extends DropTargetEvent { /** * This method returns the currently available * DataFlavors as a java.util.List. - *

      + * * @return the currently available DataFlavors as a java.util.List */ @@ -188,9 +188,9 @@ public class DropTargetDropEvent extends DropTargetEvent { * This method returns a boolean indicating if the * specified DataFlavor is available * from the source. - *

      + * * @param df the DataFlavor to test - *

      + * * @return if the DataFlavor specified is available from the source */ @@ -215,7 +215,7 @@ public class DropTargetDropEvent extends DropTargetEvent { /** * This method returns the Transferable object * associated with the drop. - *

      + * * @return the Transferable associated with the drop */ @@ -225,7 +225,7 @@ public class DropTargetDropEvent extends DropTargetEvent { /** * accept the drop, using the specified action. - *

      + * * @param dropAction the specified action */ @@ -244,7 +244,7 @@ public class DropTargetDropEvent extends DropTargetEvent { /** * This method notifies the DragSource * that the drop transfer(s) are completed. - *

      + * * @param success a boolean indicating that the drop transfer(s) are completed. */ @@ -255,7 +255,7 @@ public class DropTargetDropEvent extends DropTargetEvent { /** * This method returns an int indicating if * the source is in the same JVM as the target. - *

      + * * @return if the Source is in the same JVM */ diff --git a/jdk/src/share/classes/java/awt/dnd/DropTargetEvent.java b/jdk/src/share/classes/java/awt/dnd/DropTargetEvent.java index 326ba939a3f..e7911ab8cbb 100644 --- a/jdk/src/share/classes/java/awt/dnd/DropTargetEvent.java +++ b/jdk/src/share/classes/java/awt/dnd/DropTargetEvent.java @@ -47,7 +47,7 @@ public class DropTargetEvent extends java.util.EventObject { /** * Construct a DropTargetEvent object with * the specified DropTargetContext. - *

      + * * @param dtc The DropTargetContext * @throws NullPointerException if {@code dtc} equals {@code null}. * @see #getSource() @@ -63,7 +63,7 @@ public class DropTargetEvent extends java.util.EventObject { /** * This method returns the DropTargetContext * associated with this DropTargetEvent. - *

      + * * @return the DropTargetContext */ diff --git a/jdk/src/share/classes/java/awt/dnd/DropTargetListener.java b/jdk/src/share/classes/java/awt/dnd/DropTargetListener.java index 03659845580..60676f99b0d 100644 --- a/jdk/src/share/classes/java/awt/dnd/DropTargetListener.java +++ b/jdk/src/share/classes/java/awt/dnd/DropTargetListener.java @@ -91,7 +91,7 @@ public interface DropTargetListener extends EventListener { /** * Called if the user has modified * the current drop gesture. - *

      + * * @param dtde the DropTargetDragEvent */ @@ -144,7 +144,7 @@ public interface DropTargetListener extends EventListener { * DropTargetDropEvent.isLocalTransfer() returns * true. Otherwise, the behavior of the call is * implementation-dependent. - *

      + * * @param dtde the DropTargetDropEvent */ diff --git a/jdk/src/share/classes/java/awt/dnd/InvalidDnDOperationException.java b/jdk/src/share/classes/java/awt/dnd/InvalidDnDOperationException.java index 1f9368e5899..e0727aba3b5 100644 --- a/jdk/src/share/classes/java/awt/dnd/InvalidDnDOperationException.java +++ b/jdk/src/share/classes/java/awt/dnd/InvalidDnDOperationException.java @@ -48,7 +48,7 @@ public class InvalidDnDOperationException extends IllegalStateException { /** * Create an Exception with its own descriptive message - *

      + * * @param msg the detail message */ diff --git a/jdk/src/share/classes/java/awt/dnd/MouseDragGestureRecognizer.java b/jdk/src/share/classes/java/awt/dnd/MouseDragGestureRecognizer.java index 1fc0e0bd8a0..cf975835f22 100644 --- a/jdk/src/share/classes/java/awt/dnd/MouseDragGestureRecognizer.java +++ b/jdk/src/share/classes/java/awt/dnd/MouseDragGestureRecognizer.java @@ -74,7 +74,7 @@ public abstract class MouseDragGestureRecognizer extends DragGestureRecognizer i * permitted for this drag operation, and * the DragGestureListener to * notify when a drag gesture is detected. - *

      + * * @param ds The DragSource for the Component c * @param c The Component to observe * @param act The actions permitted for this Drag @@ -92,7 +92,7 @@ public abstract class MouseDragGestureRecognizer extends DragGestureRecognizer i * the Component c, * the Component to observe, and the action(s) * permitted for this drag operation. - *

      + * * @param ds The DragSource for the Component c * @param c The Component to observe * @param act The actions permitted for this drag @@ -107,7 +107,7 @@ public abstract class MouseDragGestureRecognizer extends DragGestureRecognizer i * given the DragSource for the * Component c, and the * Component to observe. - *

      + * * @param ds The DragSource for the Component c * @param c The Component to observe */ @@ -119,7 +119,7 @@ public abstract class MouseDragGestureRecognizer extends DragGestureRecognizer i /** * Construct a new MouseDragGestureRecognizer * given the DragSource for the Component. - *

      + * * @param ds The DragSource for the Component */ @@ -150,7 +150,7 @@ public abstract class MouseDragGestureRecognizer extends DragGestureRecognizer i /** * Invoked when the mouse has been clicked on a component. - *

      + * * @param e the MouseEvent */ @@ -159,7 +159,7 @@ public abstract class MouseDragGestureRecognizer extends DragGestureRecognizer i /** * Invoked when a mouse button has been * pressed on a Component. - *

      + * * @param e the MouseEvent */ @@ -167,7 +167,7 @@ public abstract class MouseDragGestureRecognizer extends DragGestureRecognizer i /** * Invoked when a mouse button has been released on a component. - *

      + * * @param e the MouseEvent */ @@ -175,7 +175,7 @@ public abstract class MouseDragGestureRecognizer extends DragGestureRecognizer i /** * Invoked when the mouse enters a component. - *

      + * * @param e the MouseEvent */ @@ -183,7 +183,7 @@ public abstract class MouseDragGestureRecognizer extends DragGestureRecognizer i /** * Invoked when the mouse exits a component. - *

      + * * @param e the MouseEvent */ @@ -191,7 +191,7 @@ public abstract class MouseDragGestureRecognizer extends DragGestureRecognizer i /** * Invoked when a mouse button is pressed on a component. - *

      + * * @param e the MouseEvent */ @@ -200,7 +200,7 @@ public abstract class MouseDragGestureRecognizer extends DragGestureRecognizer i /** * Invoked when the mouse button has been moved on a component * (with no buttons no down). - *

      + * * @param e the MouseEvent */ diff --git a/jdk/src/share/classes/java/awt/event/MouseEvent.java b/jdk/src/share/classes/java/awt/event/MouseEvent.java index 89c950aff1f..65a8626f872 100644 --- a/jdk/src/share/classes/java/awt/event/MouseEvent.java +++ b/jdk/src/share/classes/java/awt/event/MouseEvent.java @@ -930,7 +930,7 @@ public class MouseEvent extends InputEvent { * and will cause the returning an unspecified string. * Zero parameter means that no modifiers were passed and will * cause the returning an empty string. - *

      + * * @param modifiers A modifier mask describing the modifier keys and * mouse buttons that were down during the event * @return string string text description of the combination of modifier From dc7ab2363cd9e336db6b39b58a72f8610ba6ade0 Mon Sep 17 00:00:00 2001 From: Volker Simonis Date: Fri, 28 Mar 2014 11:57:02 +0100 Subject: [PATCH 100/116] 8038233: Fix unsafe strcpy in Java_sun_tools_attach_{Aix,Bsd,Linux}VirtualMachine_connect() Reviewed-by: alanb --- .../aix/native/sun/tools/attach/AixVirtualMachine.c | 10 +++++----- .../native/sun/tools/attach/BsdVirtualMachine.c | 4 +++- .../native/sun/tools/attach/LinuxVirtualMachine.c | 6 ++++-- 3 files changed, 12 insertions(+), 8 deletions(-) diff --git a/jdk/src/aix/native/sun/tools/attach/AixVirtualMachine.c b/jdk/src/aix/native/sun/tools/attach/AixVirtualMachine.c index a5ba1605132..7422427803f 100644 --- a/jdk/src/aix/native/sun/tools/attach/AixVirtualMachine.c +++ b/jdk/src/aix/native/sun/tools/attach/AixVirtualMachine.c @@ -1,6 +1,6 @@ /* - * Copyright (c) 2008, 2013, Oracle and/or its affiliates. All rights reserved. - * Copyright 2013 SAP AG. All rights reserved. + * Copyright (c) 2008, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright 2014 SAP AG. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -92,10 +92,10 @@ JNIEXPORT void JNICALL Java_sun_tools_attach_AixVirtualMachine_connect struct sockaddr_un addr; int err = 0; - /* added missing structure initialization */ - memset(&addr,0, sizeof(addr)); + memset(&addr, 0, sizeof(addr)); addr.sun_family = AF_UNIX; - strcpy(addr.sun_path, p); + /* strncpy is safe because addr.sun_path was zero-initialized before. */ + strncpy(addr.sun_path, p, sizeof(addr.sun_path) - 1); /* We must call bind with the actual socketaddr length. This is obligatory for AS400. */ if (connect(fd, (struct sockaddr*)&addr, SUN_LEN(&addr)) == -1) { err = errno; diff --git a/jdk/src/solaris/native/sun/tools/attach/BsdVirtualMachine.c b/jdk/src/solaris/native/sun/tools/attach/BsdVirtualMachine.c index cf3ff20300f..dbc751fa366 100644 --- a/jdk/src/solaris/native/sun/tools/attach/BsdVirtualMachine.c +++ b/jdk/src/solaris/native/sun/tools/attach/BsdVirtualMachine.c @@ -78,8 +78,10 @@ JNIEXPORT void JNICALL Java_sun_tools_attach_BsdVirtualMachine_connect struct sockaddr_un addr; int err = 0; + memset(&addr, 0, sizeof(addr)); addr.sun_family = AF_UNIX; - strcpy(addr.sun_path, p); + /* strncpy is safe because addr.sun_path was zero-initialized before. */ + strncpy(addr.sun_path, p, sizeof(addr.sun_path) - 1); if (connect(fd, (struct sockaddr*)&addr, sizeof(addr)) == -1) { err = errno; diff --git a/jdk/src/solaris/native/sun/tools/attach/LinuxVirtualMachine.c b/jdk/src/solaris/native/sun/tools/attach/LinuxVirtualMachine.c index 8c8c4eb1d69..5646a326542 100644 --- a/jdk/src/solaris/native/sun/tools/attach/LinuxVirtualMachine.c +++ b/jdk/src/solaris/native/sun/tools/attach/LinuxVirtualMachine.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -156,8 +156,10 @@ JNIEXPORT void JNICALL Java_sun_tools_attach_LinuxVirtualMachine_connect struct sockaddr_un addr; int err = 0; + memset(&addr, 0, sizeof(addr)); addr.sun_family = AF_UNIX; - strcpy(addr.sun_path, p); + /* strncpy is safe because addr.sun_path was zero-initialized before. */ + strncpy(addr.sun_path, p, sizeof(addr.sun_path) - 1); if (connect(fd, (struct sockaddr*)&addr, sizeof(addr)) == -1) { err = errno; From 5611388a3dca2adfdfad537bbe3dcdac7d5e710f Mon Sep 17 00:00:00 2001 From: Alexander Stepanov Date: Fri, 28 Mar 2014 15:56:24 +0400 Subject: [PATCH 101/116] 8038493: Tidy warnings cleanup for java.sql Reviewed-by: lancea, chegar --- jdk/src/share/classes/java/sql/Array.java | 3 +- .../java/sql/BatchUpdateException.java | 7 +-- jdk/src/share/classes/java/sql/Blob.java | 3 +- .../classes/java/sql/CallableStatement.java | 6 +- jdk/src/share/classes/java/sql/Clob.java | 2 +- .../share/classes/java/sql/Connection.java | 39 +++++++------ .../classes/java/sql/DataTruncation.java | 2 - .../classes/java/sql/DatabaseMetaData.java | 21 ++++--- jdk/src/share/classes/java/sql/Date.java | 2 +- jdk/src/share/classes/java/sql/JDBCType.java | 2 +- .../classes/java/sql/PreparedStatement.java | 1 - jdk/src/share/classes/java/sql/ResultSet.java | 3 - .../java/sql/SQLClientInfoException.java | 55 ++++++++----------- .../classes/java/sql/SQLDataException.java | 14 ++--- .../share/classes/java/sql/SQLException.java | 14 ++--- .../sql/SQLFeatureNotSupportedException.java | 16 +++--- ...IntegrityConstraintViolationException.java | 18 +++--- .../SQLInvalidAuthorizationSpecException.java | 22 ++++---- .../SQLNonTransientConnectionException.java | 23 ++++---- .../java/sql/SQLNonTransientException.java | 17 +++--- .../share/classes/java/sql/SQLPermission.java | 2 +- .../java/sql/SQLRecoverableException.java | 17 +++--- .../java/sql/SQLSyntaxErrorException.java | 16 +++--- .../classes/java/sql/SQLTimeoutException.java | 16 +++--- .../sql/SQLTransactionRollbackException.java | 16 +++--- .../sql/SQLTransientConnectionException.java | 16 +++--- .../java/sql/SQLTransientException.java | 17 +++--- .../share/classes/java/sql/SQLWarning.java | 14 ++--- jdk/src/share/classes/java/sql/Statement.java | 16 +++--- jdk/src/share/classes/java/sql/Timestamp.java | 2 +- jdk/src/share/classes/java/sql/package.html | 27 +++++---- 31 files changed, 199 insertions(+), 230 deletions(-) diff --git a/jdk/src/share/classes/java/sql/Array.java b/jdk/src/share/classes/java/sql/Array.java index 9e2c210353e..fdc243663ce 100644 --- a/jdk/src/share/classes/java/sql/Array.java +++ b/jdk/src/share/classes/java/sql/Array.java @@ -348,12 +348,11 @@ public interface Array { * This method frees the Array object and releases the resources that * it holds. The object is invalid once the free * method is called. - *

      + *

      * After free has been called, any attempt to invoke a * method other than free will result in a SQLException * being thrown. If free is called multiple times, the subsequent * calls to free are treated as a no-op. - *

      * * @throws SQLException if an error occurs releasing * the Array's resources diff --git a/jdk/src/share/classes/java/sql/BatchUpdateException.java b/jdk/src/share/classes/java/sql/BatchUpdateException.java index 9c0c072140c..fd5fb2242a9 100644 --- a/jdk/src/share/classes/java/sql/BatchUpdateException.java +++ b/jdk/src/share/classes/java/sql/BatchUpdateException.java @@ -203,7 +203,6 @@ public class BatchUpdateException extends SQLException { * The cause is not initialized, and may subsequently be * initialized by a call to the * {@link Throwable#initCause(java.lang.Throwable)} method. - *

      * * @since 1.2 * @see #BatchUpdateException(java.lang.String, java.lang.String, int, long[], @@ -378,7 +377,7 @@ public class BatchUpdateException extends SQLException { * there are commands in the batch; otherwise, it will contain an * update count for each command that executed successfully before * the BatchUpdateException was thrown. - *

      + *

      * The possible return values for this method were modified for * the Java 2 SDK, Standard Edition, version 1.3. This was done to * accommodate the new option of continuing to process commands @@ -410,7 +409,7 @@ public class BatchUpdateException extends SQLException { *

      * This constructor should be used when the returned update count may exceed * {@link Integer#MAX_VALUE}. - *

      + * * @param reason a description of the error * @param SQLState an XOPEN or SQL:2003 code identifying the exception * @param vendorCode an exception code used by a particular @@ -448,7 +447,7 @@ public class BatchUpdateException extends SQLException { *

      * This method should be used when {@code Statement.executeLargeBatch} is * invoked and the returned update count may exceed {@link Integer#MAX_VALUE}. - *

      + * * @return an array of long containing the update counts * for the updates that were executed successfully before this error * occurred. Or, if the driver continues to process commands after an diff --git a/jdk/src/share/classes/java/sql/Blob.java b/jdk/src/share/classes/java/sql/Blob.java index ba65c4027d6..090e89b6750 100644 --- a/jdk/src/share/classes/java/sql/Blob.java +++ b/jdk/src/share/classes/java/sql/Blob.java @@ -269,12 +269,11 @@ public interface Blob { * This method frees the Blob object and releases the resources that * it holds. The object is invalid once the free * method is called. - *

      + *

      * After free has been called, any attempt to invoke a * method other than free will result in a SQLException * being thrown. If free is called multiple times, the subsequent * calls to free are treated as a no-op. - *

      * * @throws SQLException if an error occurs releasing * the Blob's resources diff --git a/jdk/src/share/classes/java/sql/CallableStatement.java b/jdk/src/share/classes/java/sql/CallableStatement.java index a830b63ea8b..20da9aae6a9 100644 --- a/jdk/src/share/classes/java/sql/CallableStatement.java +++ b/jdk/src/share/classes/java/sql/CallableStatement.java @@ -1160,13 +1160,13 @@ public interface CallableStatement extends PreparedStatement { *

      * This method throws an exception if there is an ambiguity, for example, if the * object is of a class implementing more than one of the interfaces named above. - *

      + *

      *Note: Not all databases allow for a non-typed Null to be sent to * the backend. For maximum portability, the setNull or the * setObject(String parameterName, Object x, int sqlType) * method should be used * instead of setObject(String parameterName, Object x). - *

      + * * @param parameterName the name of the parameter * @param x the object containing the input parameter value * @exception SQLException if parameterName does not correspond to a named @@ -2025,7 +2025,7 @@ public interface CallableStatement extends PreparedStatement { * NVARCHAR * or LONGNVARCHAR parameter as * a String in the Java programming language. - *

      + *

      * For the fixed-length type JDBC NCHAR, * the String object * returned has exactly the same value the SQL diff --git a/jdk/src/share/classes/java/sql/Clob.java b/jdk/src/share/classes/java/sql/Clob.java index 2cfd4e47018..b074ac604c0 100644 --- a/jdk/src/share/classes/java/sql/Clob.java +++ b/jdk/src/share/classes/java/sql/Clob.java @@ -317,7 +317,7 @@ public interface Clob { * method other than free will result in a SQLException * being thrown. If free is called multiple times, the subsequent * calls to free are treated as a no-op. - *

      + * * @throws SQLException if an error occurs releasing * the Clob's resources * diff --git a/jdk/src/share/classes/java/sql/Connection.java b/jdk/src/share/classes/java/sql/Connection.java index 4cedd13dc3b..ea191cd2dba 100644 --- a/jdk/src/share/classes/java/sql/Connection.java +++ b/jdk/src/share/classes/java/sql/Connection.java @@ -273,7 +273,6 @@ public interface Connection extends Wrapper, AutoCloseable { * commits or rolls back an active transaction prior to calling the * close method. If the close method is called * and there is an active transaction, the results are implementation-defined. - *

      * * @exception SQLException SQLException if a database access error occurs */ @@ -632,7 +631,7 @@ public interface Connection extends Wrapper, AutoCloseable { * Installs the given TypeMap object as the type map for * this Connection object. The type map will be used for the * custom mapping of SQL structured types and distinct types. - *

      + *

      * You must set the the values for the TypeMap prior to * callng setMap as a JDBC driver may create an internal copy * of the TypeMap: @@ -1114,7 +1113,7 @@ public interface Connection extends Wrapper, AutoCloseable { * completes, this method returns false. A value of * 0 indicates a timeout is not applied to the * database operation. - *

      + * * @return true if the connection is valid, false otherwise * @exception SQLException if the value supplied for timeout * is less then 0 @@ -1165,16 +1164,16 @@ public interface Connection extends Wrapper, AutoCloseable { *

    • ClientHostname - The hostname of the computer the application * using the connection is running on.
    • * - *

      + * * @param name The name of the client info property to set * @param value The value to set the client info property to. If the * value is null, the current value of the specified * property is cleared. - *

      + * * @throws SQLClientInfoException if the database server returns an error while * setting the client info value on the database server or this method * is called on a closed connection - *

      + * * @since 1.6 */ void setClientInfo(String name, String value) @@ -1198,13 +1197,13 @@ public interface Connection extends Wrapper, AutoCloseable { * some databases do not allow multiple client info properties to be set * atomically. For those databases, one or more properties may have been * set before the error occurred. - *

      + * * * @param properties the list of client info properties to set - *

      + * * @see java.sql.Connection#setClientInfo(String, String) setClientInfo(String, String) * @since 1.6 - *

      + * * @throws SQLClientInfoException if the database server returns an error while * setting the clientInfo values on the database server or this method * is called on a closed connection @@ -1222,15 +1221,15 @@ public interface Connection extends Wrapper, AutoCloseable { *

      * Applications may use the DatabaseMetaData.getClientInfoProperties * method to determine the client info properties supported by the driver. - *

      + * * @param name The name of the client info property to retrieve - *

      + * * @return The value of the client info property specified - *

      + * * @throws SQLException if the database server returns an error when - * fetching the client info value from the database - *or this method is called on a closed connection - *

      + * fetching the client info value from the database + * or this method is called on a closed connection + * * @since 1.6 * * @see java.sql.DatabaseMetaData#getClientInfoProperties @@ -1243,14 +1242,14 @@ public interface Connection extends Wrapper, AutoCloseable { * property supported by the driver. The value of a client info property * may be null if the property has not been set and does not have a * default value. - *

      + * * @return A Properties object that contains the name and current value of * each of the client info properties supported by the driver. - *

      + * * @throws SQLException if the database server returns an error when * fetching the client info values from the database * or this method is called on a closed connection - *

      + * * @since 1.6 */ Properties getClientInfo() @@ -1294,7 +1293,7 @@ SQLException; * Struct.getSQLTypeName. * @param attributes the attributes that populate the returned object - * @return a Struct object that maps to the given SQL type and is populated with the given attributes + * @return a Struct object that maps to the given SQL type and is populated with the given attributes * @throws SQLException if a database error occurs, the typeName is null or this method is called on a closed connection * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this data type * @since 1.6 @@ -1426,7 +1425,7 @@ throws SQLException; * problems, the connection will be marked as closed, any resources held by * the connection will be released and both the connection and * statement will be unusable. - *

      + *

      * When the driver determines that the {@code setNetworkTimeout} timeout * value has expired, the JDBC driver marks the connection * closed and releases any resources held by the connection. diff --git a/jdk/src/share/classes/java/sql/DataTruncation.java b/jdk/src/share/classes/java/sql/DataTruncation.java index 3a00c439f9f..5aef67c2af1 100644 --- a/jdk/src/share/classes/java/sql/DataTruncation.java +++ b/jdk/src/share/classes/java/sql/DataTruncation.java @@ -49,7 +49,6 @@ public class DataTruncation extends SQLWarning { * The cause is not initialized, and may subsequently be * initialized by a call to the * {@link Throwable#initCause(java.lang.Throwable)} method. - *

      * * @param index The index of the parameter or column value * @param parameter true if a parameter value was truncated @@ -77,7 +76,6 @@ public class DataTruncation extends SQLWarning { * the reason set to "Data truncation", the * vendor code set to 0, and * the other fields set to the given values. - *

      * * @param index The index of the parameter or column value * @param parameter true if a parameter value was truncated diff --git a/jdk/src/share/classes/java/sql/DatabaseMetaData.java b/jdk/src/share/classes/java/sql/DatabaseMetaData.java index 11b013df863..07b7475c4b3 100644 --- a/jdk/src/share/classes/java/sql/DatabaseMetaData.java +++ b/jdk/src/share/classes/java/sql/DatabaseMetaData.java @@ -1417,7 +1417,7 @@ public interface DatabaseMetaData extends Wrapper { * A possible value for the column * COLUMN_TYPE * in the ResultSet - * returned by the method getProcedureColumns. + * returned by the method getProcedureColumns. */ int procedureColumnOut = 4; /** @@ -2367,7 +2367,6 @@ public interface DatabaseMetaData extends Wrapper { *

      If SQL distinct or structured types are supported, then information on the * individual types may be obtained from the getUDTs() method. * - * *

      Each type description has the following columns: *

        @@ -2377,7 +2376,7 @@ public interface DatabaseMetaData extends Wrapper { *
      1. LITERAL_PREFIX String {@code =>} prefix used to quote a literal * (may be null) *
      2. LITERAL_SUFFIX String {@code =>} suffix used to quote a literal - (may be null) + * (may be null) *
      3. CREATE_PARAMS String {@code =>} parameters used in creating * the type (may be null) *
      4. NULLABLE short {@code =>} can you use NULL for this type. @@ -2821,7 +2820,7 @@ public interface DatabaseMetaData extends Wrapper { /** * Retrieves the connection that produced this metadata object. - *

        + * * @return the connection that produced this metadata object * @exception SQLException if a database access error occurs * @since 1.2 @@ -2870,9 +2869,9 @@ public interface DatabaseMetaData extends Wrapper { * * @return true if auto-generated keys can be retrieved * after a statement has executed; false otherwise - *

        If true is returned, the JDBC driver must support the + *

        If true is returned, the JDBC driver must support the * returning of auto-generated keys for at least SQL INSERT statements - *

        + * * @exception SQLException if a database access error occurs * @since 1.4 */ @@ -3138,7 +3137,7 @@ public interface DatabaseMetaData extends Wrapper { * whether the value returned by the method * SQLException.getSQLState is an * X/Open (now know as Open Group) SQL CLI SQLSTATE value. - *

        + * * @since 1.4 */ int sqlStateXOpen = 1; @@ -3148,7 +3147,7 @@ public interface DatabaseMetaData extends Wrapper { * DatabaseMetaData.getSQLStateType which is used to indicate * whether the value returned by the method * SQLException.getSQLState is an SQLSTATE value. - *

        + * * @since 1.6 */ int sqlStateSQL = 2; @@ -3282,12 +3281,12 @@ public interface DatabaseMetaData extends Wrapper { *

      *

      * The ResultSet is sorted by the NAME column - *

      + * * @return A ResultSet object; each row is a supported client info * property - *

      + * * @exception SQLException if a database access error occurs - *

      + * * @since 1.6 */ ResultSet getClientInfoProperties() diff --git a/jdk/src/share/classes/java/sql/Date.java b/jdk/src/share/classes/java/sql/Date.java index 9ac1e1c6f74..ab5121fca21 100644 --- a/jdk/src/share/classes/java/sql/Date.java +++ b/jdk/src/share/classes/java/sql/Date.java @@ -150,7 +150,7 @@ public class Date extends java.util.Date { /** * Formats a date in the date escape format yyyy-mm-dd. - *

      + * * @return a String in yyyy-mm-dd format */ @SuppressWarnings("deprecation") diff --git a/jdk/src/share/classes/java/sql/JDBCType.java b/jdk/src/share/classes/java/sql/JDBCType.java index 89db37bbf59..1ca4b3d0286 100644 --- a/jdk/src/share/classes/java/sql/JDBCType.java +++ b/jdk/src/share/classes/java/sql/JDBCType.java @@ -27,7 +27,7 @@ package java.sql; /** *

      Defines the constants that are used to identify generic * SQL types, called JDBC types. - *

      + * * @see SQLType * @since 1.8 */ diff --git a/jdk/src/share/classes/java/sql/PreparedStatement.java b/jdk/src/share/classes/java/sql/PreparedStatement.java index 2b2e7f3374b..f33fd10aae9 100644 --- a/jdk/src/share/classes/java/sql/PreparedStatement.java +++ b/jdk/src/share/classes/java/sql/PreparedStatement.java @@ -892,7 +892,6 @@ public interface PreparedStatement extends Statement { * Sets the designated parameter to the given java.sql.SQLXML object. * The driver converts this to an * SQL XML value when it sends it to the database. - *

      * * @param parameterIndex index of the first parameter is 1, the second is 2, ... * @param xmlObject a SQLXML object that maps an SQL XML value diff --git a/jdk/src/share/classes/java/sql/ResultSet.java b/jdk/src/share/classes/java/sql/ResultSet.java index d939a9a582e..656fa535528 100644 --- a/jdk/src/share/classes/java/sql/ResultSet.java +++ b/jdk/src/share/classes/java/sql/ResultSet.java @@ -1259,7 +1259,6 @@ public interface ResultSet extends Wrapper, AutoCloseable { * If an input stream is open for the current row, a call to the method * previous will implicitly close it. A ResultSet * object's warning change is cleared when a new row is read. - *

      * * @return true if the cursor is now positioned on a valid row; * false if the cursor is positioned before the first row @@ -3206,7 +3205,6 @@ public interface ResultSet extends Wrapper, AutoCloseable { * row. The updater methods do not update the underlying database; instead * the updateRow or insertRow methods are called * to update the database. - *

      * * @param columnIndex the first column is 1, the second 2, ... * @param xmlObject the value for the column to be updated @@ -3232,7 +3230,6 @@ public interface ResultSet extends Wrapper, AutoCloseable { * row. The updater methods do not update the underlying database; instead * the updateRow or insertRow methods are called * to update the database. - *

      * * @param columnLabel the label for the column specified with the SQL AS clause. If the SQL AS clause was not specified, then the label is the name of the column * @param xmlObject the column value diff --git a/jdk/src/share/classes/java/sql/SQLClientInfoException.java b/jdk/src/share/classes/java/sql/SQLClientInfoException.java index 131e407824f..8c8e8c867ff 100644 --- a/jdk/src/share/classes/java/sql/SQLClientInfoException.java +++ b/jdk/src/share/classes/java/sql/SQLClientInfoException.java @@ -40,7 +40,7 @@ import java.util.Map; * properties are identified by passing a * Map<String,ClientInfoStatus> to * the appropriate SQLClientInfoException constructor. - *

      + * * @see ClientInfoStatus * @see Connection#setClientInfo * @since 1.6 @@ -60,7 +60,6 @@ public class SQLClientInfoException extends SQLException { * The cause is not initialized, and may subsequently be * initialized by a call to the * {@link Throwable#initCause(java.lang.Throwable)} method. - *

      * * @since 1.6 */ @@ -78,7 +77,6 @@ public class SQLClientInfoException extends SQLException { * The cause is not initialized, and may subsequently be * initialized by a call to the * {@link Throwable#initCause(java.lang.Throwable)} method. - *

      * * @param failedProperties A Map containing the property values that could not * be set. The keys in the Map @@ -86,7 +84,7 @@ public class SQLClientInfoException extends SQLException { * properties that could not be set and * the values contain one of the reason codes * defined in ClientInfoStatus - *

      + * * @since 1.6 */ public SQLClientInfoException(Map failedProperties) { @@ -102,8 +100,6 @@ public class SQLClientInfoException extends SQLException { * cause==null or to cause.toString() if * cause!=null and the vendor code is initialized to 0. * - *

      - * * @param failedProperties A Map containing the property values that could not * be set. The keys in the Map * contain the names of the client info @@ -112,7 +108,7 @@ public class SQLClientInfoException extends SQLException { * defined in ClientInfoStatus * @param cause the (which is saved for later retrieval by the getCause() method); may be null indicating * the cause is non-existent or unknown. - *

      + * * @since 1.6 */ public SQLClientInfoException(Map failedProperties, @@ -132,7 +128,6 @@ public class SQLClientInfoException extends SQLException { * The cause is not initialized, and may subsequently be * initialized by a call to the * {@link Throwable#initCause(java.lang.Throwable)} method. - *

      * * @param reason a description of the exception * @param failedProperties A Map containing the property values that could not @@ -141,7 +136,7 @@ public class SQLClientInfoException extends SQLException { * properties that could not be set and * the values contain one of the reason codes * defined in ClientInfoStatus - *

      + * * @since 1.6 */ public SQLClientInfoException(String reason, @@ -157,7 +152,6 @@ public class SQLClientInfoException extends SQLException { * failedProperties. * The SQLState is initialized * to null and the vendor code is initialized to 0. - *

      * * @param reason a description of the exception * @param failedProperties A Map containing the property values that could not @@ -168,7 +162,7 @@ public class SQLClientInfoException extends SQLException { * defined in ClientInfoStatus * @param cause the underlying reason for this SQLException (which is saved for later retrieval by the getCause() method); may be null indicating * the cause is non-existent or unknown. - *

      + * * @since 1.6 */ public SQLClientInfoException(String reason, @@ -188,17 +182,16 @@ public class SQLClientInfoException extends SQLException { * initialized by a call to the * {@link Throwable#initCause(java.lang.Throwable)} method. The vendor code * is initialized to 0. - *

      * - * @param reason a description of the exception - * @param SQLState an XOPEN or SQL:2003 code identifying the exception + * @param reason a description of the exception + * @param SQLState an XOPEN or SQL:2003 code identifying the exception * @param failedProperties A Map containing the property values that could not * be set. The keys in the Map * contain the names of the client info * properties that could not be set and * the values contain one of the reason codes * defined in ClientInfoStatus - *

      + * * @since 1.6 */ public SQLClientInfoException(String reason, @@ -213,19 +206,18 @@ public class SQLClientInfoException extends SQLException { * Constructs a SQLClientInfoException object initialized with a * given reason, SQLState, cause * and failedProperties. The vendor code is initialized to 0. - *

      * - * @param reason a description of the exception - * @param SQLState an XOPEN or SQL:2003 code identifying the exception + * @param reason a description of the exception + * @param SQLState an XOPEN or SQL:2003 code identifying the exception * @param failedProperties A Map containing the property values that could not * be set. The keys in the Map * contain the names of the client info * properties that could not be set and * the values contain one of the reason codes * defined in ClientInfoStatus - * @param cause the underlying reason for this SQLException (which is saved for later retrieval by the getCause() method); may be null indicating + * @param cause the underlying reason for this SQLException (which is saved for later retrieval by the getCause() method); may be null indicating * the cause is non-existent or unknown. - *

      + * * @since 1.6 */ public SQLClientInfoException(String reason, @@ -245,18 +237,17 @@ public class SQLClientInfoException extends SQLException { * The cause is not initialized, and may subsequently be * initialized by a call to the * {@link Throwable#initCause(java.lang.Throwable)} method. - *

      * - * @param reason a description of the exception - * @param SQLState an XOPEN or SQL:2003 code identifying the exception - * @param vendorCode a database vendor-specific exception code + * @param reason a description of the exception + * @param SQLState an XOPEN or SQL:2003 code identifying the exception + * @param vendorCode a database vendor-specific exception code * @param failedProperties A Map containing the property values that could not * be set. The keys in the Map * contain the names of the client info * properties that could not be set and * the values contain one of the reason codes * defined in ClientInfoStatus - *

      + * * @since 1.6 */ public SQLClientInfoException(String reason, @@ -273,11 +264,10 @@ public class SQLClientInfoException extends SQLException { * given reason, SQLState, * cause, vendorCode and * failedProperties. - *

      * - * @param reason a description of the exception - * @param SQLState an XOPEN or SQL:2003 code identifying the exception - * @param vendorCode a database vendor-specific exception code + * @param reason a description of the exception + * @param SQLState an XOPEN or SQL:2003 code identifying the exception + * @param vendorCode a database vendor-specific exception code * @param failedProperties A Map containing the property values that could not * be set. The keys in the Map * contain the names of the client info @@ -285,8 +275,8 @@ public class SQLClientInfoException extends SQLException { * the values contain one of the reason codes * defined in ClientInfoStatus * @param cause the underlying reason for this SQLException (which is saved for later retrieval by the getCause() method); may be null indicating - * the cause is non-existent or unknown. - *

      + * the cause is non-existent or unknown. + * * @since 1.6 */ public SQLClientInfoException(String reason, @@ -305,11 +295,10 @@ public class SQLClientInfoException extends SQLException { * keys in the Map contain the names of the client info * properties that could not be set and the values contain one of the * reason codes defined in ClientInfoStatus - *

      * * @return Map list containing the client info properties that could * not be set - *

      + * * @since 1.6 */ public Map getFailedProperties() { diff --git a/jdk/src/share/classes/java/sql/SQLDataException.java b/jdk/src/share/classes/java/sql/SQLDataException.java index 8dc1753a6b7..5d193b410e0 100644 --- a/jdk/src/share/classes/java/sql/SQLDataException.java +++ b/jdk/src/share/classes/java/sql/SQLDataException.java @@ -45,7 +45,6 @@ public class SQLDataException extends SQLNonTransientException { * The cause is not initialized, and may subsequently be * initialized by a call to * {@link Throwable#initCause(java.lang.Throwable)} method. - *

      * * @since 1.6 */ @@ -62,7 +61,6 @@ public class SQLDataException extends SQLNonTransientException { * The cause is not initialized, and may subsequently be * initialized by a call to * {@link Throwable#initCause(java.lang.Throwable)} method. - *

      * * @param reason a description of the exception * @since 1.6 @@ -79,7 +77,7 @@ public class SQLDataException extends SQLNonTransientException { * The cause is not initialized, and may subsequently be * initialized by a call to * {@link Throwable#initCause(java.lang.Throwable)} method. - *

      + * * @param reason a description of the exception * @param SQLState an XOPEN or SQL:2003 code identifying the exception * @since 1.6 @@ -96,7 +94,7 @@ public class SQLDataException extends SQLNonTransientException { * The cause is not initialized, and may subsequently be * initialized by a call to * {@link Throwable#initCause(java.lang.Throwable)} method. - *

      + * * @param reason a description of the exception * @param SQLState an XOPEN or SQL:2003 code identifying the exception * @param vendorCode a database vendor specific exception code @@ -114,7 +112,7 @@ public class SQLDataException extends SQLNonTransientException { * The reason is initialized to null if * cause==null or to cause.toString() if * cause!=null. - *

      + * * @param cause the underlying reason for this SQLException (which is saved for later retrieval by the getCause() method); may be null indicating * the cause is non-existent or unknown. * @since 1.6 @@ -128,7 +126,7 @@ public class SQLDataException extends SQLNonTransientException { * reason and cause. * The SQLState is initialized to null * and the vendor code is initialized to 0. - *

      + * * @param reason a description of the exception. * @param cause the underlying reason for this SQLException (which is saved for later retrieval by the getCause() method); may be null indicating * the cause is non-existent or unknown. @@ -142,7 +140,7 @@ public class SQLDataException extends SQLNonTransientException { * Constructs a SQLDataException object with a given * reason, SQLState and cause. * The vendor code is initialized to 0. - *

      + * * @param reason a description of the exception. * @param SQLState an XOPEN or SQL:2003 code identifying the exception * @param cause the underlying reason for this SQLException (which is saved for later retrieval by the getCause() method); may be null indicating @@ -157,7 +155,7 @@ public class SQLDataException extends SQLNonTransientException { * Constructs a SQLDataException object with a given * reason, SQLState, vendorCode * and cause. - *

      + * * @param reason a description of the exception * @param SQLState an XOPEN or SQL:2003 code identifying the exception * @param vendorCode a database vendor-specific exception code diff --git a/jdk/src/share/classes/java/sql/SQLException.java b/jdk/src/share/classes/java/sql/SQLException.java index d6c9bd2e05c..0076679fdb1 100644 --- a/jdk/src/share/classes/java/sql/SQLException.java +++ b/jdk/src/share/classes/java/sql/SQLException.java @@ -61,7 +61,7 @@ public class SQLException extends java.lang.Exception * The cause is not initialized, and may subsequently be * initialized by a call to the * {@link Throwable#initCause(java.lang.Throwable)} method. - *

      + * * @param reason a description of the exception * @param SQLState an XOPEN or SQL:2003 code identifying the exception * @param vendorCode a database vendor-specific exception code @@ -88,7 +88,7 @@ public class SQLException extends java.lang.Exception * initialized by a call to the * {@link Throwable#initCause(java.lang.Throwable)} method. The vendor code * is initialized to 0. - *

      + * * @param reason a description of the exception * @param SQLState an XOPEN or SQL:2003 code identifying the exception */ @@ -112,7 +112,7 @@ public class SQLException extends java.lang.Exception * The cause is not initialized, and may subsequently be * initialized by a call to the * {@link Throwable#initCause(java.lang.Throwable)} method. - *

      + * * @param reason a description of the exception */ public SQLException(String reason) { @@ -155,7 +155,7 @@ public class SQLException extends java.lang.Exception * The reason is initialized to null if * cause==null or to cause.toString() if * cause!=null. - *

      + * * @param cause the underlying reason for this SQLException * (which is saved for later retrieval by the getCause() method); * may be null indicating the cause is non-existent or unknown. @@ -176,7 +176,7 @@ public class SQLException extends java.lang.Exception * reason and cause. * The SQLState is initialized to null * and the vendor code is initialized to 0. - *

      + * * @param reason a description of the exception. * @param cause the underlying reason for this SQLException * (which is saved for later retrieval by the getCause() method); @@ -197,7 +197,7 @@ public class SQLException extends java.lang.Exception * Constructs a SQLException object with a given * reason, SQLState and cause. * The vendor code is initialized to 0. - *

      + * * @param reason a description of the exception. * @param sqlState an XOPEN or SQL:2003 code identifying the exception * @param cause the underlying reason for this SQLException @@ -223,7 +223,7 @@ public class SQLException extends java.lang.Exception * Constructs a SQLException object with a given * reason, SQLState, vendorCode * and cause. - *

      + * * @param reason a description of the exception * @param sqlState an XOPEN or SQL:2003 code identifying the exception * @param vendorCode a database vendor-specific exception code diff --git a/jdk/src/share/classes/java/sql/SQLFeatureNotSupportedException.java b/jdk/src/share/classes/java/sql/SQLFeatureNotSupportedException.java index 98900fb4d26..88d82aa8cca 100644 --- a/jdk/src/share/classes/java/sql/SQLFeatureNotSupportedException.java +++ b/jdk/src/share/classes/java/sql/SQLFeatureNotSupportedException.java @@ -50,7 +50,7 @@ public class SQLFeatureNotSupportedException extends SQLNonTransientException { * The cause is not initialized, and may subsequently be * initialized by a call to the * {@link Throwable#initCause(java.lang.Throwable)} method. - *

      + * * @since 1.6 */ public SQLFeatureNotSupportedException() { @@ -66,7 +66,7 @@ public class SQLFeatureNotSupportedException extends SQLNonTransientException { * The cause is not initialized, and may subsequently be * initialized by a call to the * {@link Throwable#initCause(java.lang.Throwable)} method. - *

      + * * @param reason a description of the exception * @since 1.6 */ @@ -82,7 +82,7 @@ public class SQLFeatureNotSupportedException extends SQLNonTransientException { * initialized by a call to the * {@link Throwable#initCause(java.lang.Throwable)} method. The vendor code * is initialized to 0. - *

      + * * @param reason a description of the exception * @param SQLState an XOPEN or SQL:2003 code identifying the exception * @since 1.6 @@ -99,7 +99,7 @@ public class SQLFeatureNotSupportedException extends SQLNonTransientException { * The cause is not initialized, and may subsequently be * initialized by a call to the * {@link Throwable#initCause(java.lang.Throwable)} method. - *

      + * * @param reason a description of the exception * @param SQLState an XOPEN or SQL:2003 code identifying the exception * @param vendorCode a database vendor specific exception code @@ -117,7 +117,7 @@ public class SQLFeatureNotSupportedException extends SQLNonTransientException { * The reason is initialized to null if * cause==null or to cause.toString() if * cause!=null. - *

      + * * @param cause the underlying reason for this SQLException (which is saved for later retrieval by the getCause() method); may be null indicating * the cause is non-existent or unknown. * @since 1.6 @@ -132,7 +132,7 @@ public class SQLFeatureNotSupportedException extends SQLNonTransientException { * reason and cause. * The SQLState is initialized to null * and the vendor code is initialized to 0. - *

      + * * @param reason a description of the exception. * @param cause the underlying reason for this SQLException (which is saved for later retrieval by the getCause() method); may be null indicating * the cause is non-existent or unknown. @@ -147,7 +147,7 @@ public class SQLFeatureNotSupportedException extends SQLNonTransientException { * with a given * reason, SQLState and cause. * The vendor code is initialized to 0. - *

      + * * @param reason a description of the exception. * @param SQLState an XOPEN or SQL:2003 code identifying the exception * @param cause the (which is saved for later retrieval by the getCause() method); may be null indicating @@ -163,7 +163,7 @@ public class SQLFeatureNotSupportedException extends SQLNonTransientException { * with a given * reason, SQLState, vendorCode * and cause. - *

      + * * @param reason a description of the exception * @param SQLState an XOPEN or SQL:2003 code identifying the exception * @param vendorCode a database vendor-specific exception code diff --git a/jdk/src/share/classes/java/sql/SQLIntegrityConstraintViolationException.java b/jdk/src/share/classes/java/sql/SQLIntegrityConstraintViolationException.java index 86b4e8f91d3..3a6b1cc1f0f 100644 --- a/jdk/src/share/classes/java/sql/SQLIntegrityConstraintViolationException.java +++ b/jdk/src/share/classes/java/sql/SQLIntegrityConstraintViolationException.java @@ -45,7 +45,7 @@ public class SQLIntegrityConstraintViolationException extends SQLNonTransientExc * The cause is not initialized, and may subsequently be * initialized by a call to the * {@link Throwable#initCause(java.lang.Throwable)} method. - *

      + * * @since 1.6 */ public SQLIntegrityConstraintViolationException() { @@ -61,7 +61,7 @@ public class SQLIntegrityConstraintViolationException extends SQLNonTransientExc * The cause is not initialized, and may subsequently be * initialized by a call to the * {@link Throwable#initCause(java.lang.Throwable)} method. - *

      + * * @param reason a description of the exception * @since 1.6 */ @@ -77,7 +77,7 @@ public class SQLIntegrityConstraintViolationException extends SQLNonTransientExc * initialized by a call to the * {@link Throwable#initCause(java.lang.Throwable)} method. The vendor code * is initialized to 0. - *

      + * * @param reason a description of the exception * @param SQLState an XOPEN or SQL:2003 code identifying the exception * @since 1.6 @@ -94,7 +94,7 @@ public class SQLIntegrityConstraintViolationException extends SQLNonTransientExc * The cause is not initialized, and may subsequently be * initialized by a call to the * {@link Throwable#initCause(java.lang.Throwable)} method. - *

      + * * @param reason a description of the exception * @param SQLState an XOPEN or SQL:2003 code identifying the exception * @param vendorCode a database vendor specific exception code @@ -112,11 +112,11 @@ public class SQLIntegrityConstraintViolationException extends SQLNonTransientExc * The reason is initialized to null if * cause==null or to cause.toString() if * cause!=null. - *

      + * * @param cause the underlying reason for this SQLException (which is saved for later retrieval by the getCause() method); may be null indicating * the cause is non-existent or unknown. * @since 1.6 - */ + */ public SQLIntegrityConstraintViolationException(Throwable cause) { super(cause); } @@ -127,7 +127,7 @@ public class SQLIntegrityConstraintViolationException extends SQLNonTransientExc * reason and cause. * The SQLState is initialized to null * and the vendor code is initialized to 0. - *

      + * * @param reason a description of the exception. * @param cause the (which is saved for later retrieval by the getCause() method); may be null indicating * the cause is non-existent or unknown. @@ -142,7 +142,7 @@ public class SQLIntegrityConstraintViolationException extends SQLNonTransientExc * with a given * reason, SQLState and cause. * The vendor code is initialized to 0. - *

      + * * @param reason a description of the exception. * @param SQLState an XOPEN or SQL:2003 code identifying the exception * @param cause the underlying reason for this SQLException (which is saved for later retrieval by the getCause() method); may be null indicating @@ -158,7 +158,7 @@ public class SQLIntegrityConstraintViolationException extends SQLNonTransientExc * with a given * reason, SQLState, vendorCode * and cause. - *

      + * * @param reason a description of the exception * @param SQLState an XOPEN or SQL:2003 code identifying the exception * @param vendorCode a database vendor-specific exception code diff --git a/jdk/src/share/classes/java/sql/SQLInvalidAuthorizationSpecException.java b/jdk/src/share/classes/java/sql/SQLInvalidAuthorizationSpecException.java index 63009d98acb..97cdfba993c 100644 --- a/jdk/src/share/classes/java/sql/SQLInvalidAuthorizationSpecException.java +++ b/jdk/src/share/classes/java/sql/SQLInvalidAuthorizationSpecException.java @@ -45,7 +45,7 @@ public class SQLInvalidAuthorizationSpecException extends SQLNonTransientExcepti * The cause is not initialized, and may subsequently be * initialized by a call to the * {@link Throwable#initCause(java.lang.Throwable)} method. - *

      + * * @since 1.6 */ public SQLInvalidAuthorizationSpecException() { @@ -61,7 +61,7 @@ public class SQLInvalidAuthorizationSpecException extends SQLNonTransientExcepti * The cause is not initialized, and may subsequently be * initialized by a call to the * {@link Throwable#initCause(java.lang.Throwable)} method. - *

      + * * @param reason a description of the exception * @since 1.6 */ @@ -77,7 +77,7 @@ public class SQLInvalidAuthorizationSpecException extends SQLNonTransientExcepti * initialized by a call to the * {@link Throwable#initCause(java.lang.Throwable)} method. The vendor code * is initialized to 0. - *

      + * * @param reason a description of the exception * @param SQLState an XOPEN or SQL:2003 code identifying the exception * @since 1.6 @@ -94,7 +94,7 @@ public class SQLInvalidAuthorizationSpecException extends SQLNonTransientExcepti * The cause is not initialized, and may subsequently be * initialized by a call to the * {@link Throwable#initCause(java.lang.Throwable)} method. - *

      + * * @param reason a description of the exception * @param SQLState an XOPEN or SQL:2003 code identifying the exception * @param vendorCode a database vendor specific exception code @@ -104,19 +104,19 @@ public class SQLInvalidAuthorizationSpecException extends SQLNonTransientExcepti super(reason,SQLState,vendorCode); } - /** + /** * Constructs a SQLInvalidAuthorizationSpecException object - * with a given cause. + * with a given cause. * The SQLState is initialized * to null and the vendor code is initialized to 0. * The reason is initialized to null if * cause==null or to cause.toString() if * cause!=null. - *

      + * * @param cause the underlying reason for this SQLException (which is saved for later retrieval by the getCause() method); may be null indicating * the cause is non-existent or unknown. * @since 1.6 - */ + */ public SQLInvalidAuthorizationSpecException(Throwable cause) { super(cause); } @@ -127,7 +127,7 @@ public class SQLInvalidAuthorizationSpecException extends SQLNonTransientExcepti * reason and cause. * The SQLState is initialized to null * and the vendor code is initialized to 0. - *

      + * * @param reason a description of the exception. * @param cause the underlying reason for this SQLException (which is saved for later retrieval by the getCause() method); may be null indicating * the cause is non-existent or unknown. @@ -142,7 +142,7 @@ public class SQLInvalidAuthorizationSpecException extends SQLNonTransientExcepti * with a given * reason, SQLState and cause. * The vendor code is initialized to 0. - *

      + * * @param reason a description of the exception. * @param SQLState an XOPEN or SQL:2003 code identifying the exception * @param cause the underlying reason for this SQLException (which is saved for later retrieval by the getCause() method); may be null indicating @@ -158,7 +158,7 @@ public class SQLInvalidAuthorizationSpecException extends SQLNonTransientExcepti * with a given * reason, SQLState, vendorCode * and cause. - *

      + * * @param reason a description of the exception * @param SQLState an XOPEN or SQL:2003 code identifying the exception * @param vendorCode a database vendor-specific exception code diff --git a/jdk/src/share/classes/java/sql/SQLNonTransientConnectionException.java b/jdk/src/share/classes/java/sql/SQLNonTransientConnectionException.java index f28252af18d..a712cef50aa 100644 --- a/jdk/src/share/classes/java/sql/SQLNonTransientConnectionException.java +++ b/jdk/src/share/classes/java/sql/SQLNonTransientConnectionException.java @@ -45,7 +45,6 @@ public class SQLNonTransientConnectionException extends java.sql.SQLNonTransient * The cause is not initialized, and may subsequently be * initialized by a call to the * {@link Throwable#initCause(java.lang.Throwable)} method. - *

      * * @since 1.6 */ @@ -62,7 +61,7 @@ public class SQLNonTransientConnectionException extends java.sql.SQLNonTransient * The cause is not initialized, and may subsequently be * initialized by a call to the * {@link Throwable#initCause(java.lang.Throwable)} method. - *

      + * * @param reason a description of the exception * @since 1.6 */ @@ -78,7 +77,7 @@ public class SQLNonTransientConnectionException extends java.sql.SQLNonTransient * initialized by a call to the * {@link Throwable#initCause(java.lang.Throwable)} method. The vendor code * is initialized to 0. - *

      + * * @param reason a description of the exception * @param SQLState an XOPEN or SQL:2003 code identifying the exception * @since 1.6 @@ -95,7 +94,7 @@ public class SQLNonTransientConnectionException extends java.sql.SQLNonTransient * The cause is not initialized, and may subsequently be * initialized by a call to the * {@link Throwable#initCause(java.lang.Throwable)} method. - *

      + * * @param reason a description of the exception * @param SQLState an XOPEN or SQL:2003 code identifying the exception * @param vendorCode a database vendor specific exception code @@ -105,15 +104,15 @@ public class SQLNonTransientConnectionException extends java.sql.SQLNonTransient super(reason,SQLState,vendorCode); } - /** + /** * Constructs a SQLNonTransientConnectionException object - * with a given cause. - * The SQLState is initialized + * with a given cause. + * The SQLState is initialized * to null and the vendor code is initialized to 0. * The reason is initialized to null if * cause==null or to cause.toString() if * cause!=null. - *

      + * * @param cause the underlying reason for this SQLException (which is saved for later retrieval by the getCause() method); may be null indicating * the cause is non-existent or unknown. * @since 1.6 @@ -128,7 +127,7 @@ public class SQLNonTransientConnectionException extends java.sql.SQLNonTransient * reason and cause. * The SQLState is initialized to null * and the vendor code is initialized to 0. - *

      + * * @param reason a description of the exception. * @param cause the underlying reason for this SQLException (which is saved for later retrieval by the getCause() method); may be null indicating * the cause is non-existent or unknown. @@ -143,7 +142,7 @@ public class SQLNonTransientConnectionException extends java.sql.SQLNonTransient * with a given * reason, SQLState and cause. * The vendor code is initialized to 0. - *

      + * * @param reason a description of the exception. * @param SQLState an XOPEN or SQL:2003 code identifying the exception * @param cause the (which is saved for later retrieval by the getCause() method); may be null indicating @@ -155,11 +154,11 @@ public class SQLNonTransientConnectionException extends java.sql.SQLNonTransient } /** - * Constructs a SQLNonTransientConnectionException object + * Constructs a SQLNonTransientConnectionException object * with a given * reason, SQLState, vendorCode * and cause. - *

      + * * @param reason a description of the exception * @param SQLState an XOPEN or SQL:2003 code identifying the exception * @param vendorCode a database vendor-specific exception code diff --git a/jdk/src/share/classes/java/sql/SQLNonTransientException.java b/jdk/src/share/classes/java/sql/SQLNonTransientException.java index 9d1a636ee49..db16e68b18e 100644 --- a/jdk/src/share/classes/java/sql/SQLNonTransientException.java +++ b/jdk/src/share/classes/java/sql/SQLNonTransientException.java @@ -29,7 +29,6 @@ package java.sql; * The subclass of {@link SQLException} thrown when an instance where a retry * of the same operation would fail unless the cause of the SQLException * is corrected. - *

      * * @since 1.6 */ @@ -43,7 +42,6 @@ public class SQLNonTransientException extends java.sql.SQLException { * The cause is not initialized, and may subsequently be * initialized by a call to the * {@link Throwable#initCause(java.lang.Throwable)} method. - *

      * * @since 1.6 */ @@ -60,7 +58,6 @@ public class SQLNonTransientException extends java.sql.SQLException { * The cause is not initialized, and may subsequently be * initialized by a call to the * {@link Throwable#initCause(java.lang.Throwable)} method. - *

      * * @param reason a description of the exception * @since 1.6 @@ -77,7 +74,7 @@ public class SQLNonTransientException extends java.sql.SQLException { * initialized by a call to the * {@link Throwable#initCause(java.lang.Throwable)} method. The vendor code * is initialized to 0. - *

      + * * @param reason a description of the exception * @param SQLState an XOPEN or SQL:2003 code identifying the exception * @since 1.6 @@ -94,7 +91,7 @@ public class SQLNonTransientException extends java.sql.SQLException { * The cause is not initialized, and may subsequently be * initialized by a call to the * {@link Throwable#initCause(java.lang.Throwable)} method. - *

      + * * @param reason a description of the exception * @param SQLState an XOPEN or SQL:2003 code identifying the exception * @param vendorCode a database vendor specific exception code @@ -112,7 +109,7 @@ public class SQLNonTransientException extends java.sql.SQLException { * The reason is initialized to null if * cause==null or to cause.toString() if * cause!=null. - *

      + * * @param cause the underlying reason for this SQLException (which is saved for later retrieval by the getCause() method); may be null indicating * the cause is non-existent or unknown. * @since 1.6 @@ -127,7 +124,7 @@ public class SQLNonTransientException extends java.sql.SQLException { * reason and cause. * The SQLState is initialized to null * and the vendor code is initialized to 0. - *

      + * * @param reason a description of the exception. * @param cause the underlying reason for this SQLException (which is saved for later retrieval by the getCause() method); may be null indicating * the cause is non-existent or unknown. @@ -143,7 +140,7 @@ public class SQLNonTransientException extends java.sql.SQLException { * with a given * reason, SQLState and cause. * The vendor code is initialized to 0. - *

      + * * @param reason a description of the exception. * @param SQLState an XOPEN or SQL:2003 code identifying the exception * @param cause the underlying reason for this SQLException (which is saved for later retrieval by the getCause() method); may be null indicating @@ -155,11 +152,11 @@ public class SQLNonTransientException extends java.sql.SQLException { } /** - * Constructs a SQLNonTransientException object + * Constructs a SQLNonTransientException object * with a given * reason, SQLState, vendorCode * and cause. - *

      + * * @param reason a description of the exception * @param SQLState an XOPEN or SQL:2003 code identifying the exception * @param vendorCode a database vendor-specific exception code diff --git a/jdk/src/share/classes/java/sql/SQLPermission.java b/jdk/src/share/classes/java/sql/SQLPermission.java index 951430d90cc..1224738a887 100644 --- a/jdk/src/share/classes/java/sql/SQLPermission.java +++ b/jdk/src/share/classes/java/sql/SQLPermission.java @@ -104,7 +104,7 @@ import java.security.*; * registered Drivers and release its resources. * * - *

      + * * @since 1.3 * @see java.security.BasicPermission * @see java.security.Permission diff --git a/jdk/src/share/classes/java/sql/SQLRecoverableException.java b/jdk/src/share/classes/java/sql/SQLRecoverableException.java index 76b32a412c1..5c21cb20b75 100644 --- a/jdk/src/share/classes/java/sql/SQLRecoverableException.java +++ b/jdk/src/share/classes/java/sql/SQLRecoverableException.java @@ -32,7 +32,6 @@ package java.sql; * distributed transaction, the transaction branch. At a minimum, * the recovery operation must include closing the current connection and getting * a new connection. - *

      * * @since 1.6 */ @@ -46,7 +45,7 @@ public class SQLRecoverableException extends java.sql.SQLException { * The cause is not initialized, and may subsequently be * initialized by a call to the * {@link Throwable#initCause(java.lang.Throwable)} method. - *

      + * * @since 1.6 */ public SQLRecoverableException() { @@ -62,7 +61,7 @@ public class SQLRecoverableException extends java.sql.SQLException { * The cause is not initialized, and may subsequently be * initialized by a call to the * {@link Throwable#initCause(java.lang.Throwable)} method. - *

      + * * @param reason a description of the exception * @since 1.6 */ @@ -78,7 +77,7 @@ public class SQLRecoverableException extends java.sql.SQLException { * initialized by a call to the * {@link Throwable#initCause(java.lang.Throwable)} method. The vendor code * is initialized to 0. - *

      + * * @param reason a description of the exception * @param SQLState an XOPEN or SQL:2003 code identifying the exception * @since 1.6 @@ -95,7 +94,7 @@ public class SQLRecoverableException extends java.sql.SQLException { * The cause is not initialized, and may subsequently be * initialized by a call to the * {@link Throwable#initCause(java.lang.Throwable)} method. - *

      + * * @param reason a description of the exception * @param SQLState an XOPEN or SQL:2003 code identifying the exception * @param vendorCode a database vendor specific exception code @@ -113,7 +112,7 @@ public class SQLRecoverableException extends java.sql.SQLException { * The reason is initialized to null if * cause==null or to cause.toString() if * cause!=null. - *

      + * * @param cause the underlying reason for this SQLException (which is saved for later retrieval by the getCause() method); may be null indicating * the cause is non-existent or unknown. * @since 1.6 @@ -128,7 +127,7 @@ public class SQLRecoverableException extends java.sql.SQLException { * reason and cause. * The SQLState is initialized to null * and the vendor code is initialized to 0. - *

      + * * @param reason a description of the exception. * @param cause the underlying reason for this SQLException (which is saved for later retrieval by the getCause() method); may be null indicating * the cause is non-existent or unknown. @@ -143,7 +142,7 @@ public class SQLRecoverableException extends java.sql.SQLException { * with a given * reason, SQLState and cause. * The vendor code is initialized to 0. - *

      + * * @param reason a description of the exception. * @param SQLState an XOPEN or SQL:2003 code identifying the exception * @param cause the underlying reason for this SQLException (which is saved for later retrieval by the getCause() method); may be null indicating @@ -159,7 +158,7 @@ public class SQLRecoverableException extends java.sql.SQLException { * with a given * reason, SQLState, vendorCode * and cause. - *

      + * * @param reason a description of the exception * @param SQLState an XOPEN or SQL:2003 code identifying the exception * @param vendorCode a database vendor-specific exception code diff --git a/jdk/src/share/classes/java/sql/SQLSyntaxErrorException.java b/jdk/src/share/classes/java/sql/SQLSyntaxErrorException.java index 2b3142fa6b5..bf7efc286f9 100644 --- a/jdk/src/share/classes/java/sql/SQLSyntaxErrorException.java +++ b/jdk/src/share/classes/java/sql/SQLSyntaxErrorException.java @@ -44,7 +44,7 @@ public class SQLSyntaxErrorException extends SQLNonTransientException { * The cause is not initialized, and may subsequently be * initialized by a call to the * {@link Throwable#initCause(java.lang.Throwable)} method. - *

      + * * @since 1.6 */ public SQLSyntaxErrorException() { @@ -60,7 +60,7 @@ public class SQLSyntaxErrorException extends SQLNonTransientException { * The cause is not initialized, and may subsequently be * initialized by a call to the * {@link Throwable#initCause(java.lang.Throwable)} method. - *

      + * * @param reason a description of the exception * @since 1.6 */ @@ -76,7 +76,7 @@ public class SQLSyntaxErrorException extends SQLNonTransientException { * initialized by a call to the * {@link Throwable#initCause(java.lang.Throwable)} method. The vendor code * is initialized to 0. - *

      + * * @param reason a description of the exception * @param SQLState an XOPEN or SQL:2003 code identifying the exception * @since 1.6 @@ -93,7 +93,7 @@ public class SQLSyntaxErrorException extends SQLNonTransientException { * The cause is not initialized, and may subsequently be * initialized by a call to the * {@link Throwable#initCause(java.lang.Throwable)} method. - *

      + * * @param reason a description of the exception * @param SQLState an XOPEN or SQL:2003 code identifying the exception * @param vendorCode a database vendor specific exception code @@ -111,7 +111,7 @@ public class SQLSyntaxErrorException extends SQLNonTransientException { * The reason is initialized to null if * cause==null or to cause.toString() if * cause!=null. - *

      + * * @param cause the underlying reason for this SQLException (which is saved for later retrieval by the getCause() method); may be null indicating * the cause is non-existent or unknown. * @since 1.6 @@ -126,7 +126,7 @@ public class SQLSyntaxErrorException extends SQLNonTransientException { * reason and cause. * The SQLState is initialized to null * and the vendor code is initialized to 0. - *

      + * * @param reason a description of the exception. * @param cause the underlying reason for this SQLException (which is saved for later retrieval by the getCause() method); may be null indicating * the cause is non-existent or unknown. @@ -141,7 +141,7 @@ public class SQLSyntaxErrorException extends SQLNonTransientException { * with a given * reason, SQLState and cause. * The vendor code is initialized to 0. - *

      + * * @param reason a description of the exception. * @param SQLState an XOPEN or SQL:2003 code identifying the exception * @param cause the (which is saved for later retrieval by the getCause() method); may be null indicating @@ -157,7 +157,7 @@ public class SQLSyntaxErrorException extends SQLNonTransientException { * with a given * reason, SQLState, vendorCode * and cause. - *

      + * * @param reason a description of the exception * @param SQLState an XOPEN or SQL:2003 code identifying the exception * @param vendorCode a database vendor-specific exception code diff --git a/jdk/src/share/classes/java/sql/SQLTimeoutException.java b/jdk/src/share/classes/java/sql/SQLTimeoutException.java index 3f9ed357d30..2e0dfecac4d 100644 --- a/jdk/src/share/classes/java/sql/SQLTimeoutException.java +++ b/jdk/src/share/classes/java/sql/SQLTimeoutException.java @@ -44,7 +44,7 @@ public class SQLTimeoutException extends SQLTransientException { * The cause is not initialized, and may subsequently be * initialized by a call to the * {@link Throwable#initCause(java.lang.Throwable)} method. - *

      + * * @since 1.6 */ public SQLTimeoutException() { @@ -60,7 +60,7 @@ public class SQLTimeoutException extends SQLTransientException { * The cause is not initialized, and may subsequently be * initialized by a call to the * {@link Throwable#initCause(java.lang.Throwable)} method. - *

      + * * @param reason a description of the exception * @since 1.6 */ @@ -76,7 +76,7 @@ public class SQLTimeoutException extends SQLTransientException { * initialized by a call to the * {@link Throwable#initCause(java.lang.Throwable)} method. The vendor code * is initialized to 0. - *

      + * * @param reason a description of the exception * @param SQLState an XOPEN or SQL:2003 code identifying the exception * @since 1.6 @@ -93,7 +93,7 @@ public class SQLTimeoutException extends SQLTransientException { * The cause is not initialized, and may subsequently be * initialized by a call to the * {@link Throwable#initCause(java.lang.Throwable)} method. - *

      + * * @param reason a description of the exception * @param SQLState an XOPEN or SQL:2003 code identifying the exception * @param vendorCode a database vendor specific exception code @@ -111,7 +111,7 @@ public class SQLTimeoutException extends SQLTransientException { * The reason is initialized to null if * cause==null or to cause.toString() if * cause!=null. - *

      + * * @param cause the underlying reason for this SQLException (which is saved for later retrieval by the getCause() method); may be null indicating * the cause is non-existent or unknown. * @since 1.6 @@ -126,7 +126,7 @@ public class SQLTimeoutException extends SQLTransientException { * reason and cause. * The SQLState is initialized to null * and the vendor code is initialized to 0. - *

      + * * @param reason a description of the exception. * @param cause the underlying reason for this SQLException (which is saved for later retrieval by the getCause() method); may be null indicating * the cause is non-existent or unknown. @@ -141,7 +141,7 @@ public class SQLTimeoutException extends SQLTransientException { * with a given * reason, SQLState and cause. * The vendor code is initialized to 0. - *

      + * * @param reason a description of the exception. * @param SQLState an XOPEN or SQL:2003 code identifying the exception * @param cause the underlying reason for this SQLException (which is saved for later retrieval by the getCause() method); may be null indicating @@ -157,7 +157,7 @@ public class SQLTimeoutException extends SQLTransientException { * with a given * reason, SQLState, vendorCode * and cause. - *

      + * * @param reason a description of the exception * @param SQLState an XOPEN or SQL:2003 code identifying the exception * @param vendorCode a database vendor-specific exception code diff --git a/jdk/src/share/classes/java/sql/SQLTransactionRollbackException.java b/jdk/src/share/classes/java/sql/SQLTransactionRollbackException.java index 910f8b40827..2aa2fdba3f3 100644 --- a/jdk/src/share/classes/java/sql/SQLTransactionRollbackException.java +++ b/jdk/src/share/classes/java/sql/SQLTransactionRollbackException.java @@ -44,7 +44,7 @@ public class SQLTransactionRollbackException extends SQLTransientException { * The cause is not initialized, and may subsequently be * initialized by a call to the * {@link Throwable#initCause(java.lang.Throwable)} method. - *

      + * * @since 1.6 */ public SQLTransactionRollbackException() { @@ -60,7 +60,7 @@ public class SQLTransactionRollbackException extends SQLTransientException { * The cause is not initialized, and may subsequently be * initialized by a call to the * {@link Throwable#initCause(java.lang.Throwable)} method. - *

      + * * @param reason a description of the exception * @since 1.6 */ @@ -76,7 +76,7 @@ public class SQLTransactionRollbackException extends SQLTransientException { * initialized by a call to the * {@link Throwable#initCause(java.lang.Throwable)} method. The vendor code * is initialized to 0. - *

      + * * @param reason a description of the exception * @param SQLState an XOPEN or SQL:2003 code identifying the exception * @since 1.6 @@ -93,7 +93,7 @@ public class SQLTransactionRollbackException extends SQLTransientException { * The cause is not initialized, and may subsequently be * initialized by a call to the * {@link Throwable#initCause(java.lang.Throwable)} method. - *

      + * * @param reason a description of the exception * @param SQLState an XOPEN or SQL:2003 code identifying the exception * @param vendorCode a database vendor specific exception code @@ -111,7 +111,7 @@ public class SQLTransactionRollbackException extends SQLTransientException { * The reason is initialized to null if * cause==null or to cause.toString() if * cause!=null. - *

      + * * @param cause the underlying reason for this SQLException (which is saved for later retrieval by the getCause() method); may be null indicating * the cause is non-existent or unknown. * @since 1.6 @@ -126,7 +126,7 @@ public class SQLTransactionRollbackException extends SQLTransientException { * reason and cause. * The SQLState is initialized to null * and the vendor code is initialized to 0. - *

      + * * @param reason a description of the exception. * @param cause the underlying reason for this SQLException (which is saved for later retrieval by the getCause() method); may be null indicating * the cause is non-existent or unknown. @@ -141,7 +141,7 @@ public class SQLTransactionRollbackException extends SQLTransientException { * with a given * reason, SQLState and cause. * The vendor code is initialized to 0. - *

      + * * @param reason a description of the exception. * @param SQLState an XOPEN or SQL:2003 code identifying the exception * @param cause the underlying reason for this SQLException (which is saved for later retrieval by the getCause() method); may be null indicating @@ -157,7 +157,7 @@ public class SQLTransactionRollbackException extends SQLTransientException { * with a given * reason, SQLState, vendorCode * and cause. - *

      + * * @param reason a description of the exception * @param SQLState an XOPEN or SQL:2003 code identifying the exception * @param vendorCode a database vendor-specific exception code diff --git a/jdk/src/share/classes/java/sql/SQLTransientConnectionException.java b/jdk/src/share/classes/java/sql/SQLTransientConnectionException.java index e1c9bef15f4..d585bfbe98f 100644 --- a/jdk/src/share/classes/java/sql/SQLTransientConnectionException.java +++ b/jdk/src/share/classes/java/sql/SQLTransientConnectionException.java @@ -45,7 +45,7 @@ public class SQLTransientConnectionException extends java.sql.SQLTransientExcept * The cause is not initialized, and may subsequently be * initialized by a call to the * {@link Throwable#initCause(java.lang.Throwable)} method. - *

      + * * @since 1.6 */ public SQLTransientConnectionException() { @@ -61,7 +61,7 @@ public class SQLTransientConnectionException extends java.sql.SQLTransientExcept * The cause is not initialized, and may subsequently be * initialized by a call to the * {@link Throwable#initCause(java.lang.Throwable)} method. - *

      + * * @param reason a description of the exception * @since 1.6 */ @@ -77,7 +77,7 @@ public class SQLTransientConnectionException extends java.sql.SQLTransientExcept * initialized by a call to the * {@link Throwable#initCause(java.lang.Throwable)} method. The vendor code * is initialized to 0. - *

      + * * @param reason a description of the exception * @param SQLState an XOPEN or SQL:2003 code identifying the exception * @since 1.6 @@ -94,7 +94,7 @@ public class SQLTransientConnectionException extends java.sql.SQLTransientExcept * The cause is not initialized, and may subsequently be * initialized by a call to the * {@link Throwable#initCause(java.lang.Throwable)} method. - *

      + * * @param reason a description of the exception * @param SQLState an XOPEN or SQL:2003 code identifying the exception * @param vendorCode a database vendor specific exception code @@ -112,7 +112,7 @@ public class SQLTransientConnectionException extends java.sql.SQLTransientExcept * The reason is initialized to null if * cause==null or to cause.toString() if * cause!=null. - *

      + * * @param cause the underlying reason for this SQLException (which is saved for later retrieval by the getCause() method); may be null indicating * the cause is non-existent or unknown. * @since 1.6 @@ -127,7 +127,7 @@ public class SQLTransientConnectionException extends java.sql.SQLTransientExcept * reason and cause. * The SQLState is initialized to null * and the vendor code is initialized to 0. - *

      + * * @param reason a description of the exception. * @param cause the underlying reason for this SQLException(which is saved for later retrieval by the getCause() method); may be null indicating * the cause is non-existent or unknown. @@ -142,7 +142,7 @@ public class SQLTransientConnectionException extends java.sql.SQLTransientExcept * with a given * reason, SQLState and cause. * The vendor code is initialized to 0. - *

      + * * @param reason a description of the exception. * @param SQLState an XOPEN or SQL:2003 code identifying the exception * @param cause the underlying reason for this SQLException (which is saved for later retrieval by the getCause() method); may be null indicating @@ -158,7 +158,7 @@ public class SQLTransientConnectionException extends java.sql.SQLTransientExcept * with a given * reason, SQLState, vendorCode * and cause. - *

      + * * @param reason a description of the exception * @param SQLState an XOPEN or SQL:2003 code identifying the exception * @param vendorCode a database vendor-specific exception code diff --git a/jdk/src/share/classes/java/sql/SQLTransientException.java b/jdk/src/share/classes/java/sql/SQLTransientException.java index 4271df92623..df5a1ed23c7 100644 --- a/jdk/src/share/classes/java/sql/SQLTransientException.java +++ b/jdk/src/share/classes/java/sql/SQLTransientException.java @@ -29,7 +29,6 @@ package java.sql; * The subclass of {@link SQLException} is thrown in situations where a * previously failed operation might be able to succeed when the operation is * retried without any intervention by application-level functionality. - *

      * * @since 1.6 */ @@ -43,7 +42,7 @@ public class SQLTransientException extends java.sql.SQLException { * The cause is not initialized, and may subsequently be * initialized by a call to the * {@link Throwable#initCause(java.lang.Throwable)} method. - *

      + * * @since 1.6 */ public SQLTransientException() { @@ -59,7 +58,7 @@ public class SQLTransientException extends java.sql.SQLException { * The cause is not initialized, and may subsequently be * initialized by a call to the * {@link Throwable#initCause(java.lang.Throwable)} method. - *

      + * * @param reason a description of the exception * @since 1.6 */ @@ -75,7 +74,7 @@ public class SQLTransientException extends java.sql.SQLException { * initialized by a call to the * {@link Throwable#initCause(java.lang.Throwable)} method. The vendor code * is initialized to 0. - *

      + * * @param reason a description of the exception * @param SQLState an XOPEN or SQL:2003 code identifying the exception * @since 1.6 @@ -92,7 +91,7 @@ public class SQLTransientException extends java.sql.SQLException { * The cause is not initialized, and may subsequently be * initialized by a call to the * {@link Throwable#initCause(java.lang.Throwable)} method. - *

      + * * @param reason a description of the exception * @param SQLState an XOPEN or SQL:2003 code identifying the exception * @param vendorCode a database vendor specific exception code @@ -110,7 +109,7 @@ public class SQLTransientException extends java.sql.SQLException { * The reason is initialized to null if * cause==null or to cause.toString() if * cause!=null. - *

      + * * @param cause the underlying reason for this SQLException (which is saved for later retrieval by the getCause() method); may be null indicating * the cause is non-existent or unknown. * @since 1.6 @@ -125,7 +124,7 @@ public class SQLTransientException extends java.sql.SQLException { * reason and cause. * The SQLState is initialized to null * and the vendor code is initialized to 0. - *

      + * * @param reason a description of the exception. * @param cause the underlying reason for this SQLException (which is saved for later retrieval by the getCause() method); may be null indicating * the cause is non-existent or unknown. @@ -140,7 +139,7 @@ public class SQLTransientException extends java.sql.SQLException { * with a given * reason, SQLState and cause. * The vendor code is initialized to 0. - *

      + * * @param reason a description of the exception. * @param SQLState an XOPEN or SQL:2003 code identifying the exception * @param cause the underlying reason for this SQLException (which is saved for later retrieval by the getCause() method); may be null indicating @@ -156,7 +155,7 @@ public class SQLTransientException extends java.sql.SQLException { * with a given * reason, SQLState, vendorCode * and cause. - *

      + * * @param reason a description of the exception * @param SQLState an XOPEN or SQL:2003 code identifying the exception * @param vendorCode a database vendor-specific exception code diff --git a/jdk/src/share/classes/java/sql/SQLWarning.java b/jdk/src/share/classes/java/sql/SQLWarning.java index 3dd334821fb..37d3bfc61a3 100644 --- a/jdk/src/share/classes/java/sql/SQLWarning.java +++ b/jdk/src/share/classes/java/sql/SQLWarning.java @@ -52,7 +52,7 @@ public class SQLWarning extends SQLException { * The cause is not initialized, and may subsequently be * initialized by a call to the * {@link Throwable#initCause(java.lang.Throwable)} method. - *

      + * * @param reason a description of the warning * @param SQLState an XOPEN or SQL:2003 code identifying the warning * @param vendorCode a database vendor-specific warning code @@ -73,7 +73,7 @@ public class SQLWarning extends SQLException { * initialized by a call to the * {@link Throwable#initCause(java.lang.Throwable)} method. The vendor code * is initialized to 0. - *

      + * * @param reason a description of the warning * @param SQLState an XOPEN or SQL:2003 code identifying the warning */ @@ -92,7 +92,7 @@ public class SQLWarning extends SQLException { * The cause is not initialized, and may subsequently be * initialized by a call to the * {@link Throwable#initCause(java.lang.Throwable)} method. - *

      + * * @param reason a description of the warning */ public SQLWarning(String reason) { @@ -123,7 +123,7 @@ public class SQLWarning extends SQLException { * The reason is initialized to null if * cause==null or to cause.toString() if * cause!=null. - *

      + * * @param cause the underlying reason for this SQLWarning (which is saved for later retrieval by the getCause() method); may be null indicating * the cause is non-existent or unknown. */ @@ -138,7 +138,7 @@ public class SQLWarning extends SQLException { * reason and cause. * The SQLState is initialized to null * and the vendor code is initialized to 0. - *

      + * * @param reason a description of the warning * @param cause the underlying reason for this SQLWarning * (which is saved for later retrieval by the getCause() method); @@ -154,7 +154,7 @@ public class SQLWarning extends SQLException { * with a given * reason, SQLState and cause. * The vendor code is initialized to 0. - *

      + * * @param reason a description of the warning * @param SQLState an XOPEN or SQL:2003 code identifying the warning * @param cause the underlying reason for this SQLWarning (which is saved for later retrieval by the getCause() method); may be null indicating @@ -171,7 +171,7 @@ public class SQLWarning extends SQLException { * with a given * reason, SQLState, vendorCode * and cause. - *

      + * * @param reason a description of the warning * @param SQLState an XOPEN or SQL:2003 code identifying the warning * @param vendorCode a database vendor-specific warning code diff --git a/jdk/src/share/classes/java/sql/Statement.java b/jdk/src/share/classes/java/sql/Statement.java index 7c8cff8185d..cf60bffc4f4 100644 --- a/jdk/src/share/classes/java/sql/Statement.java +++ b/jdk/src/share/classes/java/sql/Statement.java @@ -522,7 +522,7 @@ public interface Statement extends Wrapper, AutoCloseable { /** * Empties this Statement object's current list of * SQL commands. - *

      + * * @exception SQLException if a database access error occurs, * this method is called on a closed Statement or the * driver does not support batch updates @@ -1009,13 +1009,13 @@ public interface Statement extends Wrapper, AutoCloseable { * By default, a Statement is not poolable when created, and * a PreparedStatement and CallableStatement * are poolable when created. - *

      + * * @param poolable requests that the statement be pooled if true and * that the statement not be pooled if false - *

      + * * @throws SQLException if this method is called on a closed * Statement - *

      + * * @since 1.6 */ void setPoolable(boolean poolable) @@ -1024,15 +1024,15 @@ public interface Statement extends Wrapper, AutoCloseable { /** * Returns a value indicating whether the Statement * is poolable or not. - *

      + * * @return true if the Statement * is poolable; false otherwise - *

      + * * @throws SQLException if this method is called on a closed * Statement - *

      + * * @since 1.6 - *

      + * * @see java.sql.Statement#setPoolable(boolean) setPoolable(boolean) */ boolean isPoolable() diff --git a/jdk/src/share/classes/java/sql/Timestamp.java b/jdk/src/share/classes/java/sql/Timestamp.java index f4a527ab958..71c5a3e80a5 100644 --- a/jdk/src/share/classes/java/sql/Timestamp.java +++ b/jdk/src/share/classes/java/sql/Timestamp.java @@ -269,7 +269,7 @@ public class Timestamp extends java.util.Date { * Formats a timestamp in JDBC timestamp escape format. * yyyy-mm-dd hh:mm:ss.fffffffff, * where ffffffffff indicates nanoseconds. - *

      + * * @return a String object in * yyyy-mm-dd hh:mm:ss.fffffffff format */ diff --git a/jdk/src/share/classes/java/sql/package.html b/jdk/src/share/classes/java/sql/package.html index d60cb5354ce..ce13ffa9dca 100644 --- a/jdk/src/share/classes/java/sql/package.html +++ b/jdk/src/share/classes/java/sql/package.html @@ -44,7 +44,7 @@ The reader/writer facility, available through the javax.sql.RowSet group of interfaces, can be customized to use and update data from a spread sheet, flat file, or any other tabular data source. -

      +

      What the JDBCTM 4.2 API Includes

      The JDBCTM 4.2 API includes both the java.sql package, referred to as the JDBC core API, @@ -56,7 +56,7 @@ The javax.sql package extends the functionality of the JDBC API from a client-side API to a server-side API, and it is an essential part of the JavaTM Enterprise Edition (Java EETM) technology. -

      +

      Versions

      The JDBC 4.2 API incorporates all of the previous JDBC API versions:
        @@ -101,7 +101,6 @@ JavaTM 2 SDK, Standard Edition, version 1.3 release. This class is used to prevent unauthorized access to the logging stream associated with the DriverManager, which may contain information such as table names, column data, and so on. -

        What the java.sql Package Contains

        The java.sql package contains API for the following: @@ -181,7 +180,7 @@ The java.sql package contains API for the following: commands in a batch update executed successfully
      -

      +

      java.sql and javax.sql Features Introduced in the JDBC 4.2 API

      • Added JDBCType enum and SQLType interface
      • @@ -192,7 +191,7 @@ The java.sql package contains API for the following:
      • Added support for large update counts
      -

      +

      java.sql and javax.sql Features Introduced in the JDBC 4.1 API

      • Allow Connection, @@ -231,8 +230,8 @@ The java.sql package contains API for the following:
      -

      -

      + +

      java.sql and javax.sql Features Introduced in the JDBC 3.0 API

      • Pooled statements -- reuse of statements associated with a pooled @@ -258,7 +257,7 @@ The java.sql package contains API for the following: allows JDBC drivers access to objects stored outside a data source
      • Addition of metadata for retrieving SQL type hierarchies
      -

      +

      java.sql Features Introduced in the JDBC 2.1 Core API

      • Scrollable result sets--using new methods in the ResultSet @@ -273,7 +272,7 @@ The java.sql package contains API for the following: additional security, and support for time zones in date, time, and timestamp values.
      -

      +

      javax.sql Features Introduced in the JDBC 2.0 Optional Package API

        @@ -287,8 +286,8 @@ Package API
      • RowSet technology -- providing a convenient means of handling and passing data
      -

      -

      + +

      Custom Mapping of UDTs

      A user-defined type (UDT) defined in SQL can be mapped to a class in the Java programming language. An SQL structured type or an SQL DISTINCT @@ -325,16 +324,16 @@ object back to its SQL type to store it in the data source. -

      + @since 1.1 From 2ab9ecf5d99af42fac3e2836db8576ce7ebbb8fe Mon Sep 17 00:00:00 2001 From: Erik Joelsson Date: Fri, 28 Mar 2014 15:00:07 +0100 Subject: [PATCH 102/116] 8038340: Cleanup and fix sysroot and devkit handling on Linux and Solaris Reviewed-by: ihse --- jdk/make/lib/Awt2dLibraries.gmk | 30 ++++++------------------------ 1 file changed, 6 insertions(+), 24 deletions(-) diff --git a/jdk/make/lib/Awt2dLibraries.gmk b/jdk/make/lib/Awt2dLibraries.gmk index 9f384731b4b..de86e3f86a4 100644 --- a/jdk/make/lib/Awt2dLibraries.gmk +++ b/jdk/make/lib/Awt2dLibraries.gmk @@ -26,9 +26,6 @@ # Hook to include the corresponding custom file, if present. $(eval $(call IncludeCustomExtension, jdk, lib/Awt2dLibraries.gmk)) -# Openwin is defined on Solaris. -OPENWIN_LIB := $(OPENWIN_HOME)/lib - WIN_AWT_LIB := $(JDK_OUTPUTDIR)/objs/libawt/awt.lib ########################################################################################## @@ -481,7 +478,6 @@ $(eval $(call SetupNativeCompilation,BUILD_LIBAWT, \ ASFLAGS := $(LIBAWT_ASFLAGS), \ MAPFILE := $(LIBAWT_MAPFILE), \ LDFLAGS := $(LDFLAGS_JDKLIB) $(call SET_SHARED_LIBRARY_ORIGIN), \ - LDFLAGS_solaris := -R/usr/dt/lib$(OPENJDK_TARGET_CPU_ISADIR) -R$(OPENWIN_LIB)$(OPENJDK_TARGET_CPU_ISADIR), \ LDFLAGS_SUFFIX_linux := -ljvm $(LIBM) $(LIBDL) -ljava, \ LDFLAGS_SUFFIX_solaris := -ljvm $(LIBM) $(LIBDL) -ljava -lc, \ LDFLAGS_SUFFIX_aix :=-ljvm $(LIBM) $(LIBDL) -ljava -lm,\ @@ -638,14 +634,7 @@ ifeq ($(findstring $(OPENJDK_TARGET_OS),windows macosx),) $(X_CFLAGS), \ MAPFILE := $(JDK_TOPDIR)/make/mapfiles/libawt_xawt/mapfile-vers, \ LDFLAGS := $(LDFLAGS_JDKLIB) \ - $(X_LIBS) $(LIBAWT_XAWT_LDFLAGS), \ - LDFLAGS_linux := $(call SET_SHARED_LIBRARY_ORIGIN) \ - $(call SET_SHARED_LIBRARY_ORIGIN,/..), \ - LDFLAGS_solaris := -L$(OPENWIN_HOME)/sfw/lib$(OPENJDK_TARGET_CPU_ISADIR) \ - -L$(OPENWIN_LIB)$(OPENJDK_TARGET_CPU_ISADIR) \ - -R$(OPENWIN_HOME)/sfw/lib$(OPENJDK_TARGET_CPU_ISADIR) \ - -R$(OPENWIN_LIB)$(OPENJDK_TARGET_CPU_ISADIR) \ - -R/usr/dt/lib$(OPENJDK_TARGET_CPU_ISADIR) \ + $(X_LIBS) $(LIBAWT_XAWT_LDFLAGS) \ $(call SET_SHARED_LIBRARY_ORIGIN) \ $(call SET_SHARED_LIBRARY_ORIGIN,/..), \ LDFLAGS_SUFFIX := $(LIBAWT_XAWT_LDFLAGS_SUFFIX), \ @@ -976,7 +965,7 @@ else # OPENJDK_TARGET_OS not windows MAPFILE := $(JDK_TOPDIR)/make/mapfiles/libjawt/mapfile-vers, \ LDFLAGS := $(LDFLAGS_JDKLIB) \ $(call SET_SHARED_LIBRARY_ORIGIN), \ - LDFLAGS_solaris := -L$(OPENWIN_HOME)/sfw/lib$(OPENJDK_TARGET_CPU_ISADIR) -L$(OPENWIN_LIB)$(OPENJDK_TARGET_CPU_ISADIR), \ + LDFLAGS_solaris := $(X_LIBS), \ LDFLAGS_SUFFIX_linux := $(JAWT_LIBS) $(LDFLAGS_JDKLIB_SUFFIX), \ LDFLAGS_SUFFIX_aix := $(JAWT_LIBS) $(LDFLAGS_JDKLIB_SUFFIX),\ LDFLAGS_SUFFIX_solaris := $(JAWT_LIBS) $(LDFLAGS_JDKLIB_SUFFIX) -lXrender, \ @@ -1074,11 +1063,11 @@ ifndef OPENJDK CFLAGS := $(CFLAGS_JDKLIB) \ -I$(JDK_TOPDIR)/src/share/javavm/export \ -I$(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/javavm/export \ - -I$(OPENWIN_HOME)/include, \ + $(X_CFLAGS), \ MAPFILE := $(SUNWJDGA_MAPFILE), \ LDFLAGS := $(LDFLAGS_JDKLIB) \ $(call SET_SHARED_LIBRARY_ORIGIN), \ - LDFLAGS_SUFFIX := -L$(OPENWIN_LIB)$(OPENJDK_TARGET_CPU_ISADIR) -R$(OPENWIN_LIB)$(OPENJDK_TARGET_CPU_ISADIR) -ldga -lX11 $(LIBDL) -lc, \ + LDFLAGS_SUFFIX := $(X_LIBS) -ldga -lX11 $(LIBDL) -lc, \ OBJECT_DIR := $(JDK_OUTPUTDIR)/objs/libsunwjdga, \ DEBUG_SYMBOLS := $(DEBUG_ALL_BINARIES))) @@ -1173,9 +1162,7 @@ ifeq ($(BUILD_HEADLESS), true) LDFLAGS := $(LDFLAGS_JDKLIB) \ $(call SET_SHARED_LIBRARY_ORIGIN), \ LDFLAGS_linux := $(call SET_SHARED_LIBRARY_ORIGIN,/..), \ - LDFLAGS_solaris := $(call SET_SHARED_LIBRARY_ORIGIN,/..) \ - -R/usr/dt/lib$(OPENJDK_TARGET_CPU_ISADIR) \ - -R$(OPENWIN_LIB)$(OPENJDK_TARGET_CPU_ISADIR), \ + LDFLAGS_solaris := $(call SET_SHARED_LIBRARY_ORIGIN,/..), \ LDFLAGS_macosx := $(call SET_SHARED_LIBRARY_ORIGIN)., \ REORDER := $(LIBAWT_HEADLESS_REORDER), \ LDFLAGS_SUFFIX_linux := -ljvm -lawt -lm $(LIBDL) -ljava, \ @@ -1236,8 +1223,6 @@ ifndef BUILD_HEADLESS_ONLY else ifeq ($(OPENJDK_TARGET_OS), windows) LIBSPLASHSCREEN_CFLAGS += -DWITH_WIN32 - else ifeq ($(OPENJDK_TARGET_OS), solaris) - LIBSPLASHSCREEN_CFLAGS += -DWITH_X11 -I$(OPENWIN_HOME)/include -I$(OPENWIN_HOME)/include/X11/extensions else LIBSPLASHSCREEN_CFLAGS += -DWITH_X11 $(X_CFLAGS) endif @@ -1258,10 +1243,7 @@ ifndef BUILD_HEADLESS_ONLY -framework JavaNativeFoundation else ifeq ($(OPENJDK_TARGET_OS), windows) LIBSPLASHSCREEN_LDFLAGS_SUFFIX += kernel32.lib user32.lib gdi32.lib delayimp.lib -DELAYLOAD:user32.dll - else ifeq ($(OPENJDK_TARGET_OS), solaris) - # Solaris still uses OPENWIN_LIB .. - LIBSPLASHSCREEN_LDFLAGS_SUFFIX += -L$(OPENWIN_LIB)$(OPENJDK_TARGET_CPU_ISADIR) -lX11 -lXext $(LIBM) -lpthread - else # .. all other Unixes can use X_LIBS + else LIBSPLASHSCREEN_LDFLAGS_SUFFIX += $(X_LIBS) -lX11 -lXext $(LIBM) -lpthread endif From cbaa56fdf70d25b21e3e2597cb71997b9c87ec1a Mon Sep 17 00:00:00 2001 From: Amanda Jiang Date: Fri, 28 Mar 2014 16:59:19 +0000 Subject: [PATCH 103/116] 8038276: java/net/NetworkInterface/Test.java fails on Windows intermittently for Teredo Interface Reviewed-by: chegar --- jdk/test/java/net/NetworkInterface/Test.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/jdk/test/java/net/NetworkInterface/Test.java b/jdk/test/java/net/NetworkInterface/Test.java index 66ecbed5631..6db3079992d 100644 --- a/jdk/test/java/net/NetworkInterface/Test.java +++ b/jdk/test/java/net/NetworkInterface/Test.java @@ -30,6 +30,7 @@ import java.net.InetAddress; import java.util.Enumeration; public class Test { + static final boolean isWindows = System.getProperty("os.name").startsWith("Windows"); public static void main(String args[]) throws Exception { @@ -38,6 +39,11 @@ public class Test { while (nifs.hasMoreElements()) { NetworkInterface ni = (NetworkInterface)nifs.nextElement(); + //JDK-8038276: Should not test on Windows with Teredo Tunneling Pseudo-Interface + String dName = ni.getDisplayName(); + if (isWindows && dName != null && dName.contains("Teredo")) + continue; + String name = ni.getName(); System.out.println("\n" + name); From 4fdcaf04d8abdd07bc4679c65d3f473aafecfb93 Mon Sep 17 00:00:00 2001 From: Igor Ignatyev Date: Sat, 29 Mar 2014 12:29:21 +0400 Subject: [PATCH 104/116] 8038186: [TESTBUG] improvements of test j.l.i.MethodHandles Reviewed-by: iveresov, twisti, vlivanov --- .../MethodHandles/CatchExceptionTest.java | 542 ++++++++++++++++++ .../java/lang/invoke/MethodHandlesTest.java | 102 ---- .../testlibrary/jdk/testlibrary/Asserts.java | 28 + .../com/oracle/testlibrary/jsr292/Helper.java | 276 +++++++++ 4 files changed, 846 insertions(+), 102 deletions(-) create mode 100644 jdk/test/java/lang/invoke/MethodHandles/CatchExceptionTest.java create mode 100644 jdk/test/lib/testlibrary/jsr292/com/oracle/testlibrary/jsr292/Helper.java diff --git a/jdk/test/java/lang/invoke/MethodHandles/CatchExceptionTest.java b/jdk/test/java/lang/invoke/MethodHandles/CatchExceptionTest.java new file mode 100644 index 00000000000..739ca6dc255 --- /dev/null +++ b/jdk/test/java/lang/invoke/MethodHandles/CatchExceptionTest.java @@ -0,0 +1,542 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +package test.java.lang.invoke.MethodHandles; + +import com.oracle.testlibrary.jsr292.Helper; +import jdk.testlibrary.Asserts; + +import java.lang.invoke.MethodHandle; +import java.lang.invoke.MethodHandles; +import java.lang.invoke.MethodType; +import java.lang.reflect.Array; +import java.util.*; +import java.util.function.BiFunction; +import java.util.function.Function; +import java.util.function.Supplier; + +/* @test + * @library /lib/testlibrary/jsr292 /lib/testlibrary/ + * @compile CatchExceptionTest.java + * @run main/othervm -esa test.java.lang.invoke.MethodHandles.CatchExceptionTest + */ +public class CatchExceptionTest { + private static final List> ARGS_CLASSES; + protected static final int MAX_ARITY = Helper.MAX_ARITY - 1; + static { + Class classes[] = { + Object.class, + long.class, + int.class, + byte.class, + Integer[].class, + double[].class, + String.class, + }; + List> list = new ArrayList<>(MAX_ARITY); + for (int i = 0; i < MAX_ARITY; ++i) { + list.add(classes[Helper.RNG.nextInt(classes.length)]); + } + ARGS_CLASSES = Collections.unmodifiableList(list); + } + + private final TestCase testCase; + private final int nargs; + private final int argsCount; + private final MethodHandle catcher; + private int dropped; + private MethodHandle thrower; + + + public CatchExceptionTest(TestCase testCase, final boolean isVararg, final int argsCount, + final int catchDrops) { + this.testCase = testCase; + this.dropped = catchDrops; + if (Helper.IS_VERBOSE) { + System.out.printf("CatchException::CatchException(%s, isVararg=%b " + + "argsCount=%d catchDrops=%d)%n", + testCase, isVararg, argsCount, catchDrops + ); + } + MethodHandle thrower = testCase.thrower; + int throwerLen = thrower.type().parameterCount(); + List> classes; + int extra = Math.max(0, argsCount - throwerLen); + classes = getThrowerParams(isVararg, extra); + this.argsCount = throwerLen + classes.size(); + thrower = Helper.addTrailingArgs(thrower, this.argsCount, classes); + if (isVararg && argsCount > throwerLen) { + MethodType mt = thrower.type(); + Class lastParam = mt.parameterType(mt.parameterCount() - 1); + thrower = thrower.asVarargsCollector(lastParam); + } + this.thrower = thrower; + this.dropped = Math.min(this.argsCount, catchDrops); + catcher = testCase.getCatcher(getCatcherParams()); + nargs = Math.max(2, this.argsCount); + } + + public static void main(String[] args) throws Throwable { + for (CatchExceptionTest test : TestFactory.MANDATORY_TEST_CASES) { + test.runTest(); + } + TestFactory factory = new TestFactory(); + CatchExceptionTest test; + while ((test = factory.nextTest()) != null ) { + test.runTest(); + } + } + + private List> getThrowerParams(boolean isVararg, int argsCount) { + boolean unmodifiable = true; + List> classes; + classes = ARGS_CLASSES.subList(0, + Math.min(argsCount, (MAX_ARITY / 2) - 1)); + int extra = 0; + if (argsCount >= MAX_ARITY / 2) { + classes = new ArrayList<>(classes); + unmodifiable = false; + extra = (int) classes.stream().filter(Helper::isDoubleCost).count(); + int i = classes.size(); + while (classes.size() + extra < argsCount) { + Class aClass = ARGS_CLASSES.get(i); + if (Helper.isDoubleCost(aClass)) { + ++extra; + if (classes.size() + extra >= argsCount) { + break; + } + } + classes.add(aClass); + } + } + if (isVararg && classes.size() > 0) { + if (unmodifiable) { + classes = new ArrayList<>(classes); + } + int last = classes.size() - 1; + Class aClass = classes.get(classes.size() - 1); + aClass = Array.newInstance(aClass, 2).getClass(); + classes.set(last, aClass); + } + return classes; + } + + + private List> getCatcherParams() { + int catchArgc = 1 + this.argsCount - dropped; + List> result = new ArrayList<>( + thrower.type().parameterList().subList(0, catchArgc - 1)); + // prepend throwable + result.add(0, testCase.throwableClass); + return result; + } + + private void runTest() { + Helper.clear(); + + Object[] args = Helper.randomArgs( + argsCount, thrower.type().parameterArray()); + Object arg0 = Helper.MISSING_ARG; + Object arg1 = testCase.thrown; + if (argsCount > 0) { + arg0 = args[0]; + } + if (argsCount > 1) { + args[1] = arg1; + } + Asserts.assertEQ(nargs, thrower.type().parameterCount()); + if (argsCount < nargs) { + Object[] appendArgs = {arg0, arg1}; + appendArgs = Arrays.copyOfRange(appendArgs, argsCount, nargs); + thrower = MethodHandles.insertArguments( + thrower, argsCount, appendArgs); + } + Asserts.assertEQ(argsCount, thrower.type().parameterCount()); + + MethodHandle target = MethodHandles.catchException( + testCase.filter(thrower), testCase.throwableClass, + testCase.filter(catcher)); + + Asserts.assertEQ(thrower.type(), target.type()); + Asserts.assertEQ(argsCount, target.type().parameterCount()); + + Object returned; + try { + returned = target.invokeWithArguments(args); + } catch (Throwable ex) { + testCase.assertCatch(ex); + returned = ex; + } + + testCase.assertReturn(returned, arg0, arg1, dropped, args); + } +} + +class TestFactory { + public static final List MANDATORY_TEST_CASES = new ArrayList<>(); + + private static final int MIN_TESTED_ARITY = 10; + + static { + for (int[] args : new int[][]{ + {0, 0}, + {MIN_TESTED_ARITY, 0}, + {MIN_TESTED_ARITY, MIN_TESTED_ARITY}, + {CatchExceptionTest.MAX_ARITY, 0}, + {CatchExceptionTest.MAX_ARITY, CatchExceptionTest.MAX_ARITY}, + }) { + MANDATORY_TEST_CASES.addAll(createTests(args[0], args[1])); + } + } + + private int count; + private int args; + private int dropArgs; + private int currentMaxDrops; + private int maxArgs; + private int maxDrops; + private int constructor; + private int constructorSize; + private boolean isVararg; + + public TestFactory() { + if (Helper.IS_THOROUGH) { + maxArgs = maxDrops = CatchExceptionTest.MAX_ARITY; + } else { + maxArgs = MIN_TESTED_ARITY + + Helper.RNG.nextInt(CatchExceptionTest.MAX_ARITY + - MIN_TESTED_ARITY) + + 1; + maxDrops = MIN_TESTED_ARITY + + Helper.RNG.nextInt(maxArgs - MIN_TESTED_ARITY) + + 1; + args = 1; + } + + if (Helper.IS_VERBOSE) { + System.out.printf("maxArgs = %d%nmaxDrops = %d%n", + maxArgs, maxDrops); + } + constructorSize = TestCase.CONSTRUCTORS.size(); + } + + private static List createTests(int argsCount, + int catchDrops) { + if (catchDrops > argsCount || argsCount < 0 || catchDrops < 0) { + throw new IllegalArgumentException("argsCount = " + argsCount + + ", catchDrops = " + catchDrops + ); + } + List result = new ArrayList<>( + TestCase.CONSTRUCTORS.size()); + for (Supplier constructor : TestCase.CONSTRUCTORS) { + result.add(new CatchExceptionTest(constructor.get(), + /* isVararg = */ true, + argsCount, + catchDrops)); + result.add(new CatchExceptionTest(constructor.get(), + /* isVararg = */ false, + argsCount, + catchDrops)); + } + return result; + } + + /** + * @return next test from test matrix: + * {varArgs, noVarArgs} x TestCase.rtypes x TestCase.THROWABLES x {1, .., maxArgs } x {1, .., maxDrops} + */ + public CatchExceptionTest nextTest() { + if (constructor < constructorSize) { + return createTest(); + } + constructor = 0; + count++; + if (!Helper.IS_THOROUGH && count > Helper.TEST_LIMIT) { + System.out.println("test limit is exceeded"); + return null; + } + if (dropArgs <= currentMaxDrops) { + if (dropArgs == 1) { + if (Helper.IS_THOROUGH || Helper.RNG.nextBoolean()) { + ++dropArgs; + return createTest(); + } else if (Helper.IS_VERBOSE) { + System.out.printf( + "argsCount=%d : \"drop\" scenarios are skipped%n", + args); + } + } else { + ++dropArgs; + return createTest(); + } + } + + if (args <= maxArgs) { + dropArgs = 1; + currentMaxDrops = Math.min(args, maxDrops); + ++args; + return createTest(); + } + return null; + } + + private CatchExceptionTest createTest() { + if (!Helper.IS_THOROUGH) { + return new CatchExceptionTest( + TestCase.CONSTRUCTORS.get(constructor++).get(), + Helper.RNG.nextBoolean(), args, dropArgs); + } else { + if (isVararg) { + isVararg = false; + return new CatchExceptionTest( + TestCase.CONSTRUCTORS.get(constructor++).get(), + isVararg, args, dropArgs); + } else { + isVararg = true; + return new CatchExceptionTest( + TestCase.CONSTRUCTORS.get(constructor).get(), + isVararg, args, dropArgs); + } + } + } +} + +class TestCase { + private static enum ThrowMode { + NOTHING, + CAUGHT, + UNCAUGHT, + ADAPTER + } + + @SuppressWarnings("unchecked") + public static final List> CONSTRUCTORS; + private static final MethodHandle FAKE_IDENTITY; + private static final MethodHandle THROW_OR_RETURN; + private static final MethodHandle CATCHER; + + static { + try { + MethodHandles.Lookup lookup = MethodHandles.lookup(); + THROW_OR_RETURN = lookup.findStatic( + TestCase.class, + "throwOrReturn", + MethodType.methodType(Object.class, Object.class, + Throwable.class) + ); + CATCHER = lookup.findStatic( + TestCase.class, + "catcher", + MethodType.methodType(Object.class, Object.class)); + FAKE_IDENTITY = lookup.findVirtual( + TestCase.class, "fakeIdentity", + MethodType.methodType(Object.class, Object.class)); + + } catch (NoSuchMethodException | IllegalAccessException e) { + throw new Error(e); + } + PartialConstructor[] constructors = { + create(Object.class, Object.class::cast), + create(String.class, Objects::toString), + create(int[].class, x -> new int[]{Objects.hashCode(x)}), + create(long.class, + x -> Objects.hashCode(x) & (-1L >>> 32)), + create(void.class, TestCase::noop)}; + Throwable[] throwables = { + new ClassCastException("testing"), + new java.io.IOException("testing"), + new LinkageError("testing")}; + List> list = new ArrayList<>(constructors.length * + throwables.length * ThrowMode.values().length); + //noinspection unchecked + for (PartialConstructor f : constructors) { + for (ThrowMode mode : ThrowMode.values()) { + for (Throwable t : throwables) { + list.add(f.apply(mode, t)); + } + } + } + CONSTRUCTORS = Collections.unmodifiableList(list); + } + + public final Class rtype; + public final ThrowMode throwMode; + public final Throwable thrown; + public final Class throwableClass; + /** + * MH which takes 2 args (Object,Throwable), 1st is the return value, + * 2nd is the exception which will be thrown, if it's supposed in current + * {@link #throwMode}. + */ + public final MethodHandle thrower; + private final Function cast; + protected MethodHandle filter; + private int fakeIdentityCount; + + private TestCase(Class rtype, Function cast, + ThrowMode throwMode, Throwable thrown) + throws NoSuchMethodException, IllegalAccessException { + this.cast = cast; + filter = MethodHandles.lookup().findVirtual( + Function.class, + "apply", + MethodType.methodType(Object.class, Object.class)) + .bindTo(cast); + this.rtype = rtype; + this.throwMode = throwMode; + this.throwableClass = thrown.getClass(); + switch (throwMode) { + case NOTHING: + this.thrown = null; + break; + case ADAPTER: + case UNCAUGHT: + this.thrown = new Error("do not catch this"); + break; + default: + this.thrown = thrown; + } + + MethodHandle throwOrReturn = THROW_OR_RETURN; + if (throwMode == ThrowMode.ADAPTER) { + MethodHandle fakeIdentity = FAKE_IDENTITY.bindTo(this); + for (int i = 0; i < 10; ++i) { + throwOrReturn = MethodHandles.filterReturnValue( + throwOrReturn, fakeIdentity); + } + } + thrower = throwOrReturn.asType(MethodType.genericMethodType(2)); + } + + private static Void noop(Object x) { + return null; + } + + private static PartialConstructor create( + Class rtype, Function cast) { + return (t, u) -> () -> { + try { + return new TestCase<>(rtype, cast, t, u); + } catch (NoSuchMethodException | IllegalAccessException e) { + throw new Error(e); + } + }; + } + + private static + Object throwOrReturn(Object normal, T exception) throws T { + if (exception != null) { + Helper.called("throwOrReturn/throw", normal, exception); + throw exception; + } + Helper.called("throwOrReturn/normal", normal, exception); + return normal; + } + + private static + Object catcher(Object o) { + Helper.called("catcher", o); + return o; + } + + public MethodHandle filter(MethodHandle target) { + return MethodHandles.filterReturnValue(target, filter); + } + + public MethodHandle getCatcher(List> classes) { + return MethodHandles.filterReturnValue(Helper.AS_LIST.asType( + MethodType.methodType(Object.class, classes)), + CATCHER + ); + } + + @Override + public String toString() { + return "TestCase{" + + "rtype=" + rtype + + ", throwMode=" + throwMode + + ", throwableClass=" + throwableClass + + '}'; + } + + public String callName() { + return "throwOrReturn/" + + (throwMode == ThrowMode.NOTHING + ? "normal" + : "throw"); + } + + public void assertReturn(Object returned, Object arg0, Object arg1, + int catchDrops, Object... args) { + int lag = 0; + if (throwMode == ThrowMode.CAUGHT) { + lag = 1; + } + Helper.assertCalled(lag, callName(), arg0, arg1); + + if (throwMode == ThrowMode.NOTHING) { + assertEQ(cast.apply(arg0), returned); + } else if (throwMode == ThrowMode.CAUGHT) { + List catchArgs = new ArrayList<>(Arrays.asList(args)); + // catcher receives an initial subsequence of target arguments: + catchArgs.subList(args.length - catchDrops, args.length).clear(); + // catcher also receives the exception, prepended: + catchArgs.add(0, thrown); + Helper.assertCalled("catcher", catchArgs); + assertEQ(cast.apply(catchArgs), returned); + } + Asserts.assertEQ(0, fakeIdentityCount); + } + + private void assertEQ(T t, Object returned) { + if (rtype.isArray()) { + Asserts.assertEQ(t.getClass(), returned.getClass()); + int n = Array.getLength(t); + Asserts.assertEQ(n, Array.getLength(returned)); + for (int i = 0; i < n; ++i) { + Asserts.assertEQ(Array.get(t, i), Array.get(returned, i)); + } + } else { + Asserts.assertEQ(t, returned); + } + } + + private Object fakeIdentity(Object x) { + System.out.println("should throw through this!"); + ++fakeIdentityCount; + return x; + } + + public void assertCatch(Throwable ex) { + try { + Asserts.assertSame(thrown, ex, + "must get the out-of-band exception"); + } catch (Throwable t) { + ex.printStackTrace(); + } + } + + public interface PartialConstructor + extends BiFunction> { + } +} diff --git a/jdk/test/java/lang/invoke/MethodHandlesTest.java b/jdk/test/java/lang/invoke/MethodHandlesTest.java index a16adc236d9..d607e06aad2 100644 --- a/jdk/test/java/lang/invoke/MethodHandlesTest.java +++ b/jdk/test/java/lang/invoke/MethodHandlesTest.java @@ -2405,108 +2405,6 @@ public class MethodHandlesTest { } } - @Test - public void testCatchException() throws Throwable { - if (CAN_SKIP_WORKING) return; - startTest("catchException"); - for (int nargs = 0; nargs < 40; nargs++) { - if (CAN_TEST_LIGHTLY && nargs > 11) break; - for (int throwMode = 0; throwMode < THROW_MODE_LIMIT; throwMode++) { - testCatchException(int.class, new ClassCastException("testing"), throwMode, nargs); - if (CAN_TEST_LIGHTLY && nargs > 3) continue; - testCatchException(void.class, new java.io.IOException("testing"), throwMode, nargs); - testCatchException(String.class, new LinkageError("testing"), throwMode, nargs); - } - } - } - - static final int THROW_NOTHING = 0, THROW_CAUGHT = 1, THROW_UNCAUGHT = 2, THROW_THROUGH_ADAPTER = 3, THROW_MODE_LIMIT = 4; - - void testCatchException(Class returnType, Throwable thrown, int throwMode, int nargs) throws Throwable { - testCatchException(returnType, thrown, throwMode, nargs, 0); - if (nargs <= 5 || nargs % 10 == 3) { - for (int catchDrops = 1; catchDrops <= nargs; catchDrops++) - testCatchException(returnType, thrown, throwMode, nargs, catchDrops); - } - } - - private static - Object throwOrReturn(Object normal, T exception) throws T { - if (exception != null) { - called("throwOrReturn/throw", normal, exception); - throw exception; - } - called("throwOrReturn/normal", normal, exception); - return normal; - } - private int fakeIdentityCount; - private Object fakeIdentity(Object x) { - System.out.println("should throw through this!"); - fakeIdentityCount++; - return x; - } - - void testCatchException(Class returnType, Throwable thrown, int throwMode, int nargs, int catchDrops) throws Throwable { - countTest(); - if (verbosity >= 3) - System.out.println("catchException rt="+returnType+" throw="+throwMode+" nargs="+nargs+" drops="+catchDrops); - Class exType = thrown.getClass(); - if (throwMode > THROW_CAUGHT) thrown = new UnsupportedOperationException("do not catch this"); - MethodHandle throwOrReturn - = PRIVATE.findStatic(MethodHandlesTest.class, "throwOrReturn", - MethodType.methodType(Object.class, Object.class, Throwable.class)); - if (throwMode == THROW_THROUGH_ADAPTER) { - MethodHandle fakeIdentity - = PRIVATE.findVirtual(MethodHandlesTest.class, "fakeIdentity", - MethodType.methodType(Object.class, Object.class)).bindTo(this); - for (int i = 0; i < 10; i++) - throwOrReturn = MethodHandles.filterReturnValue(throwOrReturn, fakeIdentity); - } - int nargs1 = Math.max(2, nargs); - MethodHandle thrower = throwOrReturn.asType(MethodType.genericMethodType(2)); - thrower = addTrailingArgs(thrower, nargs, Object.class); - int catchArgc = 1 + nargs - catchDrops; - MethodHandle catcher = varargsList(catchArgc).asType(MethodType.genericMethodType(catchArgc)); - Object[] args = randomArgs(nargs, Object.class); - Object arg0 = MISSING_ARG; - Object arg1 = (throwMode == THROW_NOTHING) ? (Throwable) null : thrown; - if (nargs > 0) arg0 = args[0]; - if (nargs > 1) args[1] = arg1; - assertEquals(nargs1, thrower.type().parameterCount()); - if (nargs < nargs1) { - Object[] appendArgs = { arg0, arg1 }; - appendArgs = Arrays.copyOfRange(appendArgs, nargs, nargs1); - thrower = MethodHandles.insertArguments(thrower, nargs, appendArgs); - } - assertEquals(nargs, thrower.type().parameterCount()); - MethodHandle target = MethodHandles.catchException(thrower, exType, catcher); - assertEquals(thrower.type(), target.type()); - assertEquals(nargs, target.type().parameterCount()); - //System.out.println("catching with "+target+" : "+throwOrReturn); - Object returned; - try { - returned = target.invokeWithArguments(args); - } catch (Throwable ex) { - assertSame("must get the out-of-band exception", thrown, ex); - if (throwMode <= THROW_CAUGHT) - assertEquals(THROW_UNCAUGHT, throwMode); - returned = ex; - } - assertCalled("throwOrReturn/"+(throwMode == THROW_NOTHING ? "normal" : "throw"), arg0, arg1); - //System.out.println("return from "+target+" : "+returned); - if (throwMode == THROW_NOTHING) { - assertSame(arg0, returned); - } else if (throwMode == THROW_CAUGHT) { - List catchArgs = new ArrayList<>(Arrays.asList(args)); - // catcher receives an initial subsequence of target arguments: - catchArgs.subList(nargs - catchDrops, nargs).clear(); - // catcher also receives the exception, prepended: - catchArgs.add(0, thrown); - assertEquals(catchArgs, returned); - } - assertEquals(0, fakeIdentityCount); - } - @Test public void testThrowException() throws Throwable { if (CAN_SKIP_WORKING) return; diff --git a/jdk/test/lib/testlibrary/jdk/testlibrary/Asserts.java b/jdk/test/lib/testlibrary/jdk/testlibrary/Asserts.java index 573fde935f9..52b8fb0103c 100644 --- a/jdk/test/lib/testlibrary/jdk/testlibrary/Asserts.java +++ b/jdk/test/lib/testlibrary/jdk/testlibrary/Asserts.java @@ -206,6 +206,34 @@ public class Asserts { } } + /** + * Calls {@link #assertSame(java.lang.Object, java.lang.Object, java.lang.String)} with a default message. + * + * @param lhs The left hand side of the comparison. + * @param rhs The right hand side of the comparison. + * @see #assertSame(Object, Object, String) + */ + public static void assertSame(Object lhs, Object rhs) { + assertSame(lhs, rhs, null); + } + + /** + * Asserts that {@code lhs} is the same as {@code rhs}. + * + * @param lhs The left hand side of the comparison. + * @param rhs The right hand side of the comparison. + * @param msg A description of the assumption; {@code null} for a default message. + * @throws RuntimeException if the assertion is not true. + */ + public static void assertSame(Object lhs, Object rhs, String msg) { + if (lhs != rhs) { + msg = Objects.toString(msg, "assertSame") + + ": expected " + Objects.toString(lhs) + + " to equal " + Objects.toString(rhs); + fail(msg); + } + } + /** * Shorthand for {@link #assertGreaterThanOrEqual(Comparable, Comparable)}. * diff --git a/jdk/test/lib/testlibrary/jsr292/com/oracle/testlibrary/jsr292/Helper.java b/jdk/test/lib/testlibrary/jsr292/com/oracle/testlibrary/jsr292/Helper.java new file mode 100644 index 00000000000..bbed7f42185 --- /dev/null +++ b/jdk/test/lib/testlibrary/jsr292/com/oracle/testlibrary/jsr292/Helper.java @@ -0,0 +1,276 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +package com.oracle.testlibrary.jsr292; + +import jdk.testlibrary.Asserts; + +import java.lang.invoke.MethodHandle; +import java.lang.invoke.MethodHandles; +import java.lang.invoke.MethodType; +import java.lang.reflect.Array; +import java.util.*; + +public class Helper { + /** Flag for verbose output, true if {@code -Dverbose} specified */ + public static final boolean IS_VERBOSE + = System.getProperty("verbose") != null; + /** + * Flag for thorough testing -- all test will be executed, + * true if {@code -Dthorough} specified. */ + public static final boolean IS_THOROUGH + = System.getProperty("thorough") != null; + /** Random number generator w/ initial seed equal to {@code -Dseed} */ + public static final Random RNG; + + static { + String str = System.getProperty("seed"); + long seed = str != null ? Long.parseLong(str) : new Random().nextLong(); + RNG = new Random(seed); + System.out.printf("-Dseed=%d%n", seed); + } + + public static final long TEST_LIMIT; + static { + String str = System.getProperty("testLimit"); + TEST_LIMIT = str != null ? Long.parseUnsignedLong(str) : 2_000L; + System.out.printf("-DtestLimit=%d%n", TEST_LIMIT); + } + + public static final int MAX_ARITY = 254; + public static final String MISSING_ARG = "missingArg"; + public static final String MISSING_ARG_2 = "missingArg#2"; + + private static final int + // first int value + ONE_MILLION = (1000 * 1000), + // scale factor to reach upper 32 bits + TEN_BILLION = (10 * 1000 * 1000 * 1000), + // <<1 makes space for sign bit; + INITIAL_ARG_VAL = ONE_MILLION << 1; + + public static final MethodHandle AS_LIST; + + static { + try { + AS_LIST = MethodHandles.lookup().findStatic( + Arrays.class, "asList", + MethodType.methodType(List.class, Object[].class)); + } catch (NoSuchMethodException | IllegalAccessException ex) { + throw new Error(ex); + } + } + + public static boolean isDoubleCost(Class aClass) { + return aClass == double.class || aClass == long.class; + } + + private static List> calledLog = new ArrayList<>(); + private static long nextArgVal; + + public static void assertCalled(String name, Object... args) { + assertCalled(0, name, args); + } + + public static void assertCalled(int lag, String name, Object... args) { + Object expected = logEntry(name, args); + Object actual = getCalled(lag); + Asserts.assertEQ(expected, actual, "method call w/ lag = " + lag); + } + + public static Object called(String name, Object... args) { + List entry = logEntry(name, args); + calledLog.add(entry); + return entry; + } + + private static List logEntry(String name, Object... args) { + return Arrays.asList(name, Arrays.asList(args)); + } + + public static void clear() { + calledLog.clear(); + } + + public static List getCalled(int lag) { + int size = calledLog.size(); + return size <= lag ? null : calledLog.get(size - lag - 1); + } + + public static MethodHandle addTrailingArgs(MethodHandle target, int nargs, + List> classes) { + int targetLen = target.type().parameterCount(); + int extra = (nargs - targetLen); + if (extra <= 0) { + return target; + } + List> fakeArgs = new ArrayList<>(extra); + for (int i = 0; i < extra; ++i) { + fakeArgs.add(classes.get(i % classes.size())); + } + return MethodHandles.dropArguments(target, targetLen, fakeArgs); + } + + public static MethodHandle varargsList(int arity) { + return AS_LIST.asCollector(Object[].class, arity); + } + + private static long nextArg(boolean moreBits) { + long val = nextArgVal++; + long sign = -(val & 1); // alternate signs + val >>= 1; + if (moreBits) + // Guarantee some bits in the high word. + // In any case keep the decimal representation simple-looking, + // with lots of zeroes, so as not to make the printed decimal + // strings unnecessarily noisy. + { + val += (val % ONE_MILLION) * TEN_BILLION; + } + return val ^ sign; + } + + private static int nextArg() { + // Produce a 32-bit result something like ONE_MILLION+(smallint). + // Example: 1_000_042. + return (int) nextArg(false); + } + + private static long nextArg(Class kind) { + if (kind == long.class || kind == Long.class || + kind == double.class || kind == Double.class) + // produce a 64-bit result something like + // ((TEN_BILLION+1) * (ONE_MILLION+(smallint))) + // Example: 10_000_420_001_000_042. + { + return nextArg(true); + } + return (long) nextArg(); + } + + private static Object randomArg(Class param) { + Object wrap = castToWrapperOrNull(nextArg(param), param); + if (wrap != null) { + return wrap; + } + + if (param.isInterface()) { + for (Class c : param.getClasses()) { + if (param.isAssignableFrom(c) && !c.isInterface()) { + param = c; + break; + } + } + } + if (param.isArray()) { + Class ctype = param.getComponentType(); + Object arg = Array.newInstance(ctype, 2); + Array.set(arg, 0, randomArg(ctype)); + return arg; + } + if (param.isInterface() && param.isAssignableFrom(List.class)) { + return Arrays.asList("#" + nextArg()); + } + if (param.isInterface() || param.isAssignableFrom(String.class)) { + return "#" + nextArg(); + } + + try { + return param.newInstance(); + } catch (InstantiationException | IllegalAccessException ex) { + } + return null; // random class not Object, String, Integer, etc. + } + + public static Object[] randomArgs(Class... params) { + Object[] args = new Object[params.length]; + for (int i = 0; i < args.length; i++) { + args[i] = randomArg(params[i]); + } + return args; + } + + public static Object[] randomArgs(int nargs, Class param) { + Object[] args = new Object[nargs]; + for (int i = 0; i < args.length; i++) { + args[i] = randomArg(param); + } + return args; + } + + public static Object[] randomArgs(int nargs, Class... params) { + Object[] args = new Object[nargs]; + for (int i = 0; i < args.length; i++) { + Class param = params[i % params.length]; + args[i] = randomArg(param); + } + return args; + } + + public static Object[] randomArgs(List> params) { + return randomArgs(params.toArray(new Class[params.size()])); + } + + private static Object castToWrapper(Object value, Class dst) { + Object wrap = null; + if (value instanceof Number) { + wrap = castToWrapperOrNull(((Number) value).longValue(), dst); + } + if (value instanceof Character) { + wrap = castToWrapperOrNull((char) (Character) value, dst); + } + if (wrap != null) { + return wrap; + } + return dst.cast(value); + } + + @SuppressWarnings("cast") + // primitive cast to (long) is part of the pattern + private static Object castToWrapperOrNull(long value, Class dst) { + if (dst == int.class || dst == Integer.class) { + return (int) (value); + } + if (dst == long.class || dst == Long.class) { + return (long) (value); + } + if (dst == char.class || dst == Character.class) { + return (char) (value); + } + if (dst == short.class || dst == Short.class) { + return (short) (value); + } + if (dst == float.class || dst == Float.class) { + return (float) (value); + } + if (dst == double.class || dst == Double.class) { + return (double) (value); + } + if (dst == byte.class || dst == Byte.class) { + return (byte) (value); + } + if (dst == boolean.class || dst == boolean.class) { + return ((value % 29) & 1) == 0; + } + return null; + } +} From 88af481e9099637aff580cd9a92062ffe44b1999 Mon Sep 17 00:00:00 2001 From: Stephen Colebourne Date: Sat, 29 Mar 2014 15:01:47 -0400 Subject: [PATCH 105/116] 8032491: DateTimeFormatter fixed width adjacent value parsing does not match spec Reviewed-by: lancea, rriggs --- .../time/format/DateTimeFormatterBuilder.java | 31 +++- .../format/TCKDateTimeFormatterBuilder.java | 150 ++++++++++++++++++ .../java/time/format/TestReducedParser.java | 2 +- 3 files changed, 178 insertions(+), 5 deletions(-) diff --git a/jdk/src/share/classes/java/time/format/DateTimeFormatterBuilder.java b/jdk/src/share/classes/java/time/format/DateTimeFormatterBuilder.java index 9b9d9637a6c..f04d59b2303 100644 --- a/jdk/src/share/classes/java/time/format/DateTimeFormatterBuilder.java +++ b/jdk/src/share/classes/java/time/format/DateTimeFormatterBuilder.java @@ -2596,8 +2596,16 @@ public final class DateTimeFormatterBuilder { return value; } - boolean isFixedWidth() { - return subsequentWidth == -1; + /** + * For NumberPrinterParser, the width is fixed depending on the + * minWidth, maxWidth, signStyle and whether subsequent fields are fixed. + * @param context the context + * @return true if the field is fixed width + * @see DateTimeFormatterBuilder#appendValue(java.time.temporal.TemporalField, int) + */ + boolean isFixedWidth(DateTimeParseContext context) { + return subsequentWidth == -1 || + (subsequentWidth > 0 && minWidth == maxWidth && signStyle == SignStyle.NOT_NEGATIVE); } @Override @@ -2626,12 +2634,12 @@ public final class DateTimeFormatterBuilder { return ~position; } } - int effMinWidth = (context.isStrict() || isFixedWidth() ? minWidth : 1); + int effMinWidth = (context.isStrict() || isFixedWidth(context) ? minWidth : 1); int minEndPos = position + effMinWidth; if (minEndPos > length) { return ~position; } - int effMaxWidth = (context.isStrict() || isFixedWidth() ? maxWidth : 9) + Math.max(subsequentWidth, 0); + int effMaxWidth = (context.isStrict() || isFixedWidth(context) ? maxWidth : 9) + Math.max(subsequentWidth, 0); long total = 0; BigInteger totalBig = null; int pos = position; @@ -2866,6 +2874,21 @@ public final class DateTimeFormatterBuilder { this.subsequentWidth + subsequentWidth); } + /** + * For a ReducedPrinterParser, fixed width is false if the mode is strict, + * otherwise it is set as for NumberPrinterParser. + * @param context the context + * @return if the field is fixed width + * @see DateTimeFormatterBuilder#appendValueReduced(java.time.temporal.TemporalField, int, int, int) + */ + @Override + boolean isFixedWidth(DateTimeParseContext context) { + if (context.isStrict() == false) { + return false; + } + return super.isFixedWidth(context); + } + @Override public String toString() { return "ReducedValue(" + field + "," + minWidth + "," + maxWidth + "," + (baseDate != null ? baseDate : baseValue) + ")"; diff --git a/jdk/test/java/time/tck/java/time/format/TCKDateTimeFormatterBuilder.java b/jdk/test/java/time/tck/java/time/format/TCKDateTimeFormatterBuilder.java index 59d2ca15b98..c5a017c911e 100644 --- a/jdk/test/java/time/tck/java/time/format/TCKDateTimeFormatterBuilder.java +++ b/jdk/test/java/time/tck/java/time/format/TCKDateTimeFormatterBuilder.java @@ -60,11 +60,14 @@ package tck.java.time.format; import static java.time.temporal.ChronoField.DAY_OF_MONTH; +import static java.time.temporal.ChronoField.HOUR_OF_DAY; import static java.time.temporal.ChronoField.MINUTE_OF_HOUR; import static java.time.temporal.ChronoField.MONTH_OF_YEAR; +import static java.time.temporal.ChronoField.NANO_OF_SECOND; import static java.time.temporal.ChronoField.YEAR; import static org.testng.Assert.assertEquals; +import java.text.ParsePosition; import java.time.LocalDate; import java.time.YearMonth; import java.time.ZoneOffset; @@ -73,6 +76,7 @@ import java.time.format.DateTimeFormatterBuilder; import java.time.format.SignStyle; import java.time.format.TextStyle; import java.time.temporal.Temporal; +import java.time.temporal.TemporalAccessor; import java.util.HashMap; import java.util.Locale; import java.util.Map; @@ -728,4 +732,150 @@ public class TCKDateTimeFormatterBuilder { return LocalDate.of(y, m, d); } + //----------------------------------------------------------------------- + @Test + public void test_adjacent_strict_firstFixedWidth() throws Exception { + // succeeds because both number elements are fixed width + DateTimeFormatter f = builder.appendValue(HOUR_OF_DAY, 2).appendValue(MINUTE_OF_HOUR, 2).appendLiteral('9').toFormatter(Locale.UK); + ParsePosition pp = new ParsePosition(0); + TemporalAccessor parsed = f.parseUnresolved("12309", pp); + assertEquals(pp.getErrorIndex(), -1); + assertEquals(pp.getIndex(), 5); + assertEquals(parsed.getLong(HOUR_OF_DAY), 12L); + assertEquals(parsed.getLong(MINUTE_OF_HOUR), 30L); + } + + @Test + public void test_adjacent_strict_firstVariableWidth_success() throws Exception { + // succeeds greedily parsing variable width, then fixed width, to non-numeric Z + DateTimeFormatter f = builder.appendValue(HOUR_OF_DAY).appendValue(MINUTE_OF_HOUR, 2).appendLiteral('Z').toFormatter(Locale.UK); + ParsePosition pp = new ParsePosition(0); + TemporalAccessor parsed = f.parseUnresolved("12309Z", pp); + assertEquals(pp.getErrorIndex(), -1); + assertEquals(pp.getIndex(), 6); + assertEquals(parsed.getLong(HOUR_OF_DAY), 123L); + assertEquals(parsed.getLong(MINUTE_OF_HOUR), 9L); + } + + @Test + public void test_adjacent_strict_firstVariableWidth_fails() throws Exception { + // fails because literal is a number and variable width parse greedily absorbs it + DateTimeFormatter f = builder.appendValue(HOUR_OF_DAY).appendValue(MINUTE_OF_HOUR, 2).appendLiteral('9').toFormatter(Locale.UK); + ParsePosition pp = new ParsePosition(0); + TemporalAccessor parsed = f.parseUnresolved("12309", pp); + assertEquals(pp.getErrorIndex(), 5); + assertEquals(parsed, null); + } + + @Test + public void test_adjacent_lenient() throws Exception { + // succeeds because both number elements are fixed width even in lenient mode + DateTimeFormatter f = builder.parseLenient().appendValue(HOUR_OF_DAY, 2).appendValue(MINUTE_OF_HOUR, 2).appendLiteral('9').toFormatter(Locale.UK); + ParsePosition pp = new ParsePosition(0); + TemporalAccessor parsed = f.parseUnresolved("12309", pp); + assertEquals(pp.getErrorIndex(), -1); + assertEquals(pp.getIndex(), 5); + assertEquals(parsed.getLong(HOUR_OF_DAY), 12L); + assertEquals(parsed.getLong(MINUTE_OF_HOUR), 30L); + } + + @Test + public void test_adjacent_lenient_firstVariableWidth_success() throws Exception { + // succeeds greedily parsing variable width, then fixed width, to non-numeric Z + DateTimeFormatter f = builder.parseLenient().appendValue(HOUR_OF_DAY).appendValue(MINUTE_OF_HOUR, 2).appendLiteral('Z').toFormatter(Locale.UK); + ParsePosition pp = new ParsePosition(0); + TemporalAccessor parsed = f.parseUnresolved("12309Z", pp); + assertEquals(pp.getErrorIndex(), -1); + assertEquals(pp.getIndex(), 6); + assertEquals(parsed.getLong(HOUR_OF_DAY), 123L); + assertEquals(parsed.getLong(MINUTE_OF_HOUR), 9L); + } + + @Test + public void test_adjacent_lenient_firstVariableWidth_fails() throws Exception { + // fails because literal is a number and variable width parse greedily absorbs it + DateTimeFormatter f = builder.parseLenient().appendValue(HOUR_OF_DAY).appendValue(MINUTE_OF_HOUR, 2).appendLiteral('9').toFormatter(Locale.UK); + ParsePosition pp = new ParsePosition(0); + TemporalAccessor parsed = f.parseUnresolved("12309", pp); + assertEquals(pp.getErrorIndex(), 5); + assertEquals(parsed, null); + } + + //----------------------------------------------------------------------- + @Test + public void test_adjacent_strict_fractionFollows() throws Exception { + // succeeds because hour/min are fixed width + DateTimeFormatter f = builder.appendValue(HOUR_OF_DAY, 2).appendValue(MINUTE_OF_HOUR, 2).appendFraction(NANO_OF_SECOND, 0, 3, false).toFormatter(Locale.UK); + ParsePosition pp = new ParsePosition(0); + TemporalAccessor parsed = f.parseUnresolved("1230567", pp); + assertEquals(pp.getErrorIndex(), -1); + assertEquals(pp.getIndex(), 7); + assertEquals(parsed.getLong(HOUR_OF_DAY), 12L); + assertEquals(parsed.getLong(MINUTE_OF_HOUR), 30L); + assertEquals(parsed.getLong(NANO_OF_SECOND), 567_000_000L); + } + + @Test + public void test_adjacent_strict_fractionFollows_2digit() throws Exception { + // succeeds because hour/min are fixed width + DateTimeFormatter f = builder.appendValue(HOUR_OF_DAY, 2).appendValue(MINUTE_OF_HOUR, 2).appendFraction(NANO_OF_SECOND, 0, 3, false).toFormatter(Locale.UK); + ParsePosition pp = new ParsePosition(0); + TemporalAccessor parsed = f.parseUnresolved("123056", pp); + assertEquals(pp.getErrorIndex(), -1); + assertEquals(pp.getIndex(), 6); + assertEquals(parsed.getLong(HOUR_OF_DAY), 12L); + assertEquals(parsed.getLong(MINUTE_OF_HOUR), 30L); + assertEquals(parsed.getLong(NANO_OF_SECOND), 560_000_000L); + } + + @Test + public void test_adjacent_strict_fractionFollows_0digit() throws Exception { + // succeeds because hour/min are fixed width + DateTimeFormatter f = builder.appendValue(HOUR_OF_DAY, 2).appendValue(MINUTE_OF_HOUR, 2).appendFraction(NANO_OF_SECOND, 0, 3, false).toFormatter(Locale.UK); + ParsePosition pp = new ParsePosition(0); + TemporalAccessor parsed = f.parseUnresolved("1230", pp); + assertEquals(pp.getErrorIndex(), -1); + assertEquals(pp.getIndex(), 4); + assertEquals(parsed.getLong(HOUR_OF_DAY), 12L); + assertEquals(parsed.getLong(MINUTE_OF_HOUR), 30L); + } + + @Test + public void test_adjacent_lenient_fractionFollows() throws Exception { + // succeeds because hour/min are fixed width + DateTimeFormatter f = builder.parseLenient().appendValue(HOUR_OF_DAY, 2).appendValue(MINUTE_OF_HOUR, 2).appendFraction(NANO_OF_SECOND, 3, 3, false).toFormatter(Locale.UK); + ParsePosition pp = new ParsePosition(0); + TemporalAccessor parsed = f.parseUnresolved("1230567", pp); + assertEquals(pp.getErrorIndex(), -1); + assertEquals(pp.getIndex(), 7); + assertEquals(parsed.getLong(HOUR_OF_DAY), 12L); + assertEquals(parsed.getLong(MINUTE_OF_HOUR), 30L); + assertEquals(parsed.getLong(NANO_OF_SECOND), 567_000_000L); + } + + @Test + public void test_adjacent_lenient_fractionFollows_2digit() throws Exception { + // succeeds because hour/min are fixed width + DateTimeFormatter f = builder.parseLenient().appendValue(HOUR_OF_DAY, 2).appendValue(MINUTE_OF_HOUR, 2).appendFraction(NANO_OF_SECOND, 3, 3, false).toFormatter(Locale.UK); + ParsePosition pp = new ParsePosition(0); + TemporalAccessor parsed = f.parseUnresolved("123056", pp); + assertEquals(pp.getErrorIndex(), -1); + assertEquals(pp.getIndex(), 6); + assertEquals(parsed.getLong(HOUR_OF_DAY), 12L); + assertEquals(parsed.getLong(MINUTE_OF_HOUR), 30L); + assertEquals(parsed.getLong(NANO_OF_SECOND), 560_000_000L); + } + + @Test + public void test_adjacent_lenient_fractionFollows_0digit() throws Exception { + // succeeds because hour/min are fixed width + DateTimeFormatter f = builder.parseLenient().appendValue(HOUR_OF_DAY, 2).appendValue(MINUTE_OF_HOUR, 2).appendFraction(NANO_OF_SECOND, 3, 3, false).toFormatter(Locale.UK); + ParsePosition pp = new ParsePosition(0); + TemporalAccessor parsed = f.parseUnresolved("1230", pp); + assertEquals(pp.getErrorIndex(), -1); + assertEquals(pp.getIndex(), 4); + assertEquals(parsed.getLong(HOUR_OF_DAY), 12L); + assertEquals(parsed.getLong(MINUTE_OF_HOUR), 30L); + } + } diff --git a/jdk/test/java/time/test/java/time/format/TestReducedParser.java b/jdk/test/java/time/test/java/time/format/TestReducedParser.java index e9df91fdc8e..3bf806563e8 100644 --- a/jdk/test/java/time/test/java/time/format/TestReducedParser.java +++ b/jdk/test/java/time/test/java/time/format/TestReducedParser.java @@ -356,7 +356,7 @@ public class TestReducedParser extends AbstractTestPrinterParser { {"yyMMdd", "200703", STRICT, 0, 6, 2020, 7, 3}, {"ddMMyy", "230714", LENIENT, 0, 6, 2014, 7, 23}, {"ddMMyy", "230714", STRICT, 0, 6, 2014, 7, 23}, - {"ddMMyy", "25062001", LENIENT, 0, 8, 2001, 20, 2506}, + {"ddMMyy", "25062001", LENIENT, 0, 8, 2001, 6, 25}, {"ddMMyy", "25062001", STRICT, 0, 6, 2020, 6, 25}, {"ddMMy", "27052002", LENIENT, 0, 8, 2002, 5, 27}, {"ddMMy", "27052002", STRICT, 0, 8, 2002, 5, 27}, From 236cccdef90ab09b017cc364c931a31bb3583bc4 Mon Sep 17 00:00:00 2001 From: Stephen Colebourne Date: Thu, 6 Mar 2014 17:46:12 +0000 Subject: [PATCH 106/116] 8036785: ChronoLocalDate refers to generics that have been removed Reviewed-by: alanb, rriggs --- .../java/time/chrono/ChronoLocalDate.java | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) diff --git a/jdk/src/share/classes/java/time/chrono/ChronoLocalDate.java b/jdk/src/share/classes/java/time/chrono/ChronoLocalDate.java index baa7b69348c..6fe6a4578a9 100644 --- a/jdk/src/share/classes/java/time/chrono/ChronoLocalDate.java +++ b/jdk/src/share/classes/java/time/chrono/ChronoLocalDate.java @@ -101,19 +101,12 @@ import java.util.Objects; *

      When to use this interface

      * The design of the API encourages the use of {@code LocalDate} rather than this * interface, even in the case where the application needs to deal with multiple - * calendar systems. The rationale for this is explored in the following documentation. + * calendar systems. *

      - * The primary use case where this interface should be used is where the generic - * type parameter {@code } is fully defined as a specific chronology. - * In that case, the assumptions of that chronology are known at development - * time and specified in the code. - *

      - * When the chronology is defined in the generic type parameter as ? or otherwise - * unknown at development time, the rest of the discussion below applies. - *

      - * To emphasize the point, declaring a method signature, field or variable as this - * interface type can initially seem like the sensible way to globalize an application, - * however it is usually the wrong approach. + * This concept can seem surprising at first, as the natural way to globalize an + * application might initially appear to be to abstract the calendar system. + * However, as explored below, abstracting the calendar system is usually the wrong + * approach, resulting in logic errors and hard to find bugs. * As such, it should be considered an application-wide architectural decision to choose * to use this interface as opposed to {@code LocalDate}. * From eb34c3be0ce1f2ed1de21b4d623547528c9bdce6 Mon Sep 17 00:00:00 2001 From: Stephen Colebourne Date: Thu, 6 Mar 2014 17:16:20 +0000 Subject: [PATCH 107/116] 8035099: LocalTime.with(MILLI_OF_DAY/MICRO_OF_DAY) incorrect Correctly zeros low order bits of time when setting milli/micro Reviewed-by: alanb, rriggs --- .../share/classes/java/time/LocalTime.java | 4 +- .../java/time/tck/java/time/TCKLocalTime.java | 331 +++++++++++++++++- 2 files changed, 330 insertions(+), 5 deletions(-) diff --git a/jdk/src/share/classes/java/time/LocalTime.java b/jdk/src/share/classes/java/time/LocalTime.java index 4cc12f74dc3..0fcf89d26a3 100644 --- a/jdk/src/share/classes/java/time/LocalTime.java +++ b/jdk/src/share/classes/java/time/LocalTime.java @@ -838,9 +838,9 @@ public final class LocalTime case NANO_OF_SECOND: return withNano((int) newValue); case NANO_OF_DAY: return LocalTime.ofNanoOfDay(newValue); case MICRO_OF_SECOND: return withNano((int) newValue * 1000); - case MICRO_OF_DAY: return plusNanos((newValue - toNanoOfDay() / 1000) * 1000); + case MICRO_OF_DAY: return LocalTime.ofNanoOfDay(newValue * 1000); case MILLI_OF_SECOND: return withNano((int) newValue * 1000_000); - case MILLI_OF_DAY: return plusNanos((newValue - toNanoOfDay() / 1000_000) * 1000_000); + case MILLI_OF_DAY: return LocalTime.ofNanoOfDay(newValue * 1000_000); case SECOND_OF_MINUTE: return withSecond((int) newValue); case SECOND_OF_DAY: return plusSeconds(newValue - toSecondOfDay()); case MINUTE_OF_HOUR: return withMinute((int) newValue); diff --git a/jdk/test/java/time/tck/java/time/TCKLocalTime.java b/jdk/test/java/time/tck/java/time/TCKLocalTime.java index 704533afca0..f79e8fc41f6 100644 --- a/jdk/test/java/time/tck/java/time/TCKLocalTime.java +++ b/jdk/test/java/time/tck/java/time/TCKLocalTime.java @@ -88,11 +88,10 @@ import static java.time.temporal.ChronoUnit.WEEKS; import static java.time.temporal.ChronoUnit.YEARS; import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertNotNull; +import static org.testng.Assert.assertSame; import static org.testng.Assert.assertTrue; import static org.testng.Assert.fail; -import java.io.ByteArrayOutputStream; -import java.io.DataOutputStream; import java.time.Clock; import java.time.DateTimeException; import java.time.Duration; @@ -120,6 +119,7 @@ import java.time.temporal.TemporalQueries; import java.time.temporal.TemporalQuery; import java.time.temporal.TemporalUnit; import java.time.temporal.UnsupportedTemporalTypeException; +import java.time.temporal.ValueRange; import java.util.ArrayList; import java.util.Arrays; import java.util.EnumSet; @@ -760,7 +760,7 @@ public class TCKLocalTime extends AbstractDateTimeTest { } //----------------------------------------------------------------------- - // with() + // with(TemporalAdjuster) //----------------------------------------------------------------------- @Test public void test_with_adjustment() { @@ -779,6 +779,331 @@ public class TCKLocalTime extends AbstractDateTimeTest { TEST_12_30_40_987654321.with((TemporalAdjuster) null); } + //----------------------------------------------------------------------- + // with(TemporalField, long) + //----------------------------------------------------------------------- + private long[] testPoints(long max) { + long[] points = new long[9]; + points[0] = 0; + points[1] = 1; + points[2] = 2; + points[3] = max / 7; + points[4] = (max / 7) * 2; + points[5] = (max / 2); + points[6] = (max / 7) * 6;; + points[7] = max - 2; + points[8] = max - 1; + return points; + } + + // Returns a {@code LocalTime} with the specified nano-of-second. + // The hour, minute and second will be unchanged. + @Test + public void test_with_longTemporalField_nanoOfSecond() { + for (long i : testPoints(1_000_000_000L)) { + LocalTime test = TEST_12_30_40_987654321.with(NANO_OF_SECOND, i); + assertEquals(test.get(NANO_OF_SECOND), i); + assertEquals(test.get(HOUR_OF_DAY), TEST_12_30_40_987654321.get(HOUR_OF_DAY)); + assertEquals(test.get(MINUTE_OF_HOUR), TEST_12_30_40_987654321.get(MINUTE_OF_HOUR)); + assertEquals(test.get(SECOND_OF_MINUTE), TEST_12_30_40_987654321.get(SECOND_OF_MINUTE)); + } + } + + // Returns a {@code LocalTime} with the specified nano-of-day. + // This completely replaces the time and is equivalent to {@link #ofNanoOfDay(long)}. + @Test + public void test_with_longTemporalField_nanoOfDay() { + for (long i : testPoints(86_400_000_000_000L)) { + LocalTime test = TEST_12_30_40_987654321.with(NANO_OF_DAY, i); + assertEquals(test, LocalTime.ofNanoOfDay(i)); + } + } + + // Returns a {@code LocalTime} with the nano-of-second replaced by the specified + // micro-of-second multiplied by 1,000. + // The hour, minute and second will be unchanged. + @Test + public void test_with_longTemporalField_microOfSecond() { + for (long i : testPoints(1_000_000L)) { + LocalTime test = TEST_12_30_40_987654321.with(MICRO_OF_SECOND, i); + assertEquals(test.get(NANO_OF_SECOND), i * 1_000); + assertEquals(test.get(HOUR_OF_DAY), TEST_12_30_40_987654321.get(HOUR_OF_DAY)); + assertEquals(test.get(MINUTE_OF_HOUR), TEST_12_30_40_987654321.get(MINUTE_OF_HOUR)); + assertEquals(test.get(SECOND_OF_MINUTE), TEST_12_30_40_987654321.get(SECOND_OF_MINUTE)); + } + } + + // Returns a {@code LocalTime} with the specified micro-of-day. + // This completely replaces the time and is equivalent to using {@link #ofNanoOfDay(long)} + // with the micro-of-day multiplied by 1,000. + @Test + public void test_with_longTemporalField_microOfDay() { + for (long i : testPoints(86_400_000_000L)) { + LocalTime test = TEST_12_30_40_987654321.with(MICRO_OF_DAY, i); + assertEquals(test, LocalTime.ofNanoOfDay(i * 1000)); + } + } + + // Returns a {@code LocalTime} with the nano-of-second replaced by the specified + // milli-of-second multiplied by 1,000,000. + // The hour, minute and second will be unchanged. + @Test + public void test_with_longTemporalField_milliOfSecond() { + for (long i : testPoints(1_000L)) { + LocalTime test = TEST_12_30_40_987654321.with(MILLI_OF_SECOND, i); + assertEquals(test.get(NANO_OF_SECOND), i * 1_000_000); + assertEquals(test.get(HOUR_OF_DAY), TEST_12_30_40_987654321.get(HOUR_OF_DAY)); + assertEquals(test.get(MINUTE_OF_HOUR), TEST_12_30_40_987654321.get(MINUTE_OF_HOUR)); + assertEquals(test.get(SECOND_OF_MINUTE), TEST_12_30_40_987654321.get(SECOND_OF_MINUTE)); + } + } + + // Returns a {@code LocalTime} with the specified milli-of-day. + // This completely replaces the time and is equivalent to using {@link #ofNanoOfDay(long)} + // with the milli-of-day multiplied by 1,000,000. + @Test + public void test_with_longTemporalField_milliOfDay() { + for (long i : testPoints(86_400_000L)) { + LocalTime test = TEST_12_30_40_987654321.with(MILLI_OF_DAY, i); + assertEquals(test, LocalTime.ofNanoOfDay(i * 1_000_000)); + } + } + + // Returns a {@code LocalTime} with the specified second-of-minute. + // The hour, minute and nano-of-second will be unchanged. + @Test + public void test_with_longTemporalField_secondOfMinute() { + for (long i : testPoints(60L)) { + LocalTime test = TEST_12_30_40_987654321.with(SECOND_OF_MINUTE, i); + assertEquals(test.get(SECOND_OF_MINUTE), i); + assertEquals(test.get(HOUR_OF_DAY), TEST_12_30_40_987654321.get(HOUR_OF_DAY)); + assertEquals(test.get(MINUTE_OF_HOUR), TEST_12_30_40_987654321.get(MINUTE_OF_HOUR)); + assertEquals(test.get(NANO_OF_SECOND), TEST_12_30_40_987654321.get(NANO_OF_SECOND)); + } + } + + // Returns a {@code LocalTime} with the specified second-of-day. + // The nano-of-second will be unchanged. + @Test + public void test_with_longTemporalField_secondOfDay() { + for (long i : testPoints(24 * 60 * 60)) { + LocalTime test = TEST_12_30_40_987654321.with(SECOND_OF_DAY, i); + assertEquals(test.get(SECOND_OF_DAY), i); + assertEquals(test.get(NANO_OF_SECOND), TEST_12_30_40_987654321.get(NANO_OF_SECOND)); + } + } + + // Returns a {@code LocalTime} with the specified minute-of-hour. + // The hour, second-of-minute and nano-of-second will be unchanged. + @Test + public void test_with_longTemporalField_minuteOfHour() { + for (long i : testPoints(60)) { + LocalTime test = TEST_12_30_40_987654321.with(MINUTE_OF_HOUR, i); + assertEquals(test.get(MINUTE_OF_HOUR), i); + assertEquals(test.get(HOUR_OF_DAY), TEST_12_30_40_987654321.get(HOUR_OF_DAY)); + assertEquals(test.get(SECOND_OF_MINUTE), TEST_12_30_40_987654321.get(SECOND_OF_MINUTE)); + assertEquals(test.get(NANO_OF_SECOND), TEST_12_30_40_987654321.get(NANO_OF_SECOND)); + } + } + + // Returns a {@code LocalTime} with the specified minute-of-day. + // The second-of-minute and nano-of-second will be unchanged. + @Test + public void test_with_longTemporalField_minuteOfDay() { + for (long i : testPoints(24 * 60)) { + LocalTime test = TEST_12_30_40_987654321.with(MINUTE_OF_DAY, i); + assertEquals(test.get(MINUTE_OF_DAY), i); + assertEquals(test.get(SECOND_OF_MINUTE), TEST_12_30_40_987654321.get(SECOND_OF_MINUTE)); + assertEquals(test.get(NANO_OF_SECOND), TEST_12_30_40_987654321.get(NANO_OF_SECOND)); + } + } + + // Returns a {@code LocalTime} with the specified hour-of-am-pm. + // The AM/PM, minute-of-hour, second-of-minute and nano-of-second will be unchanged. + @Test + public void test_with_longTemporalField_hourOfAmPm() { + for (int i = 0; i < 12; i++) { + LocalTime test = TEST_12_30_40_987654321.with(HOUR_OF_AMPM, i); + assertEquals(test.get(HOUR_OF_AMPM), i); + assertEquals(test.get(AMPM_OF_DAY), TEST_12_30_40_987654321.get(AMPM_OF_DAY)); + assertEquals(test.get(MINUTE_OF_HOUR), TEST_12_30_40_987654321.get(MINUTE_OF_HOUR)); + assertEquals(test.get(SECOND_OF_MINUTE), TEST_12_30_40_987654321.get(SECOND_OF_MINUTE)); + assertEquals(test.get(NANO_OF_SECOND), TEST_12_30_40_987654321.get(NANO_OF_SECOND)); + } + } + + // Returns a {@code LocalTime} with the specified clock-hour-of-am-pm. + // The AM/PM, minute-of-hour, second-of-minute and nano-of-second will be unchanged. + @Test + public void test_with_longTemporalField_clockHourOfAmPm() { + for (int i = 1; i <= 12; i++) { + LocalTime test = TEST_12_30_40_987654321.with(CLOCK_HOUR_OF_AMPM, i); + assertEquals(test.get(CLOCK_HOUR_OF_AMPM), i); + assertEquals(test.get(AMPM_OF_DAY), TEST_12_30_40_987654321.get(AMPM_OF_DAY)); + assertEquals(test.get(MINUTE_OF_HOUR), TEST_12_30_40_987654321.get(MINUTE_OF_HOUR)); + assertEquals(test.get(SECOND_OF_MINUTE), TEST_12_30_40_987654321.get(SECOND_OF_MINUTE)); + assertEquals(test.get(NANO_OF_SECOND), TEST_12_30_40_987654321.get(NANO_OF_SECOND)); + } + } + + // Returns a {@code LocalTime} with the specified hour-of-day. + // The minute-of-hour, second-of-minute and nano-of-second will be unchanged. + @Test + public void test_with_longTemporalField_hourOfDay() { + for (int i = 0; i < 24; i++) { + LocalTime test = TEST_12_30_40_987654321.with(HOUR_OF_DAY, i); + assertEquals(test.get(HOUR_OF_DAY), i); + assertEquals(test.get(MINUTE_OF_HOUR), TEST_12_30_40_987654321.get(MINUTE_OF_HOUR)); + assertEquals(test.get(SECOND_OF_MINUTE), TEST_12_30_40_987654321.get(SECOND_OF_MINUTE)); + assertEquals(test.get(NANO_OF_SECOND), TEST_12_30_40_987654321.get(NANO_OF_SECOND)); + } + } + + // Returns a {@code LocalTime} with the specified clock-hour-of-day. + // The minute-of-hour, second-of-minute and nano-of-second will be unchanged. + @Test + public void test_with_longTemporalField_clockHourOfDay() { + for (int i = 1; i <= 24; i++) { + LocalTime test = TEST_12_30_40_987654321.with(CLOCK_HOUR_OF_DAY, i); + assertEquals(test.get(CLOCK_HOUR_OF_DAY), i); + assertEquals(test.get(MINUTE_OF_HOUR), TEST_12_30_40_987654321.get(MINUTE_OF_HOUR)); + assertEquals(test.get(SECOND_OF_MINUTE), TEST_12_30_40_987654321.get(SECOND_OF_MINUTE)); + assertEquals(test.get(NANO_OF_SECOND), TEST_12_30_40_987654321.get(NANO_OF_SECOND)); + } + } + + // Returns a {@code LocalTime} with the specified AM/PM. + // The hour-of-am-pm, minute-of-hour, second-of-minute and nano-of-second will be unchanged. + @Test + public void test_with_longTemporalField_amPmOfDay() { + for (int i = 0; i <= 1; i++) { + LocalTime test = TEST_12_30_40_987654321.with(AMPM_OF_DAY, i); + assertEquals(test.get(AMPM_OF_DAY), i); + assertEquals(test.get(HOUR_OF_AMPM), TEST_12_30_40_987654321.get(HOUR_OF_AMPM)); + assertEquals(test.get(MINUTE_OF_HOUR), TEST_12_30_40_987654321.get(MINUTE_OF_HOUR)); + assertEquals(test.get(SECOND_OF_MINUTE), TEST_12_30_40_987654321.get(SECOND_OF_MINUTE)); + assertEquals(test.get(NANO_OF_SECOND), TEST_12_30_40_987654321.get(NANO_OF_SECOND)); + } + } + + // The supported fields behave as follows... + // In all cases, if the new value is outside the valid range of values for the field + // then a {@code DateTimeException} will be thrown. + @DataProvider(name = "withTemporalField_outOfRange") + Object[][] data_withTemporalField_outOfRange() { + return new Object[][] { + {NANO_OF_SECOND, time(0, 0, 0, 0), NANO_OF_SECOND.range().getMinimum() - 1}, + {NANO_OF_SECOND, time(0, 0, 0, 0), NANO_OF_SECOND.range().getMaximum() + 1}, + + {NANO_OF_DAY, time(0, 0, 0, 0), NANO_OF_DAY.range().getMinimum() - 1}, + {NANO_OF_DAY, time(0, 0, 0, 0), NANO_OF_DAY.range().getMaximum() + 1}, + + {MICRO_OF_SECOND, time(0, 0, 0, 0), MICRO_OF_SECOND.range().getMinimum() - 1}, + {MICRO_OF_SECOND, time(0, 0, 0, 0), MICRO_OF_SECOND.range().getMaximum() + 1}, + + {MICRO_OF_DAY, time(0, 0, 0, 0), MICRO_OF_DAY.range().getMinimum() - 1}, + {MICRO_OF_DAY, time(0, 0, 0, 0), MICRO_OF_DAY.range().getMaximum() + 1}, + + {MILLI_OF_SECOND, time(0, 0, 0, 0), MILLI_OF_SECOND.range().getMinimum() - 1}, + {MILLI_OF_SECOND, time(0, 0, 0, 0), MILLI_OF_SECOND.range().getMaximum() + 1}, + + {MILLI_OF_DAY, time(0, 0, 0, 0), MILLI_OF_DAY.range().getMinimum() - 1}, + {MILLI_OF_DAY, time(0, 0, 0, 0), MILLI_OF_DAY.range().getMaximum() + 1}, + + {SECOND_OF_MINUTE, time(0, 0, 0, 0), SECOND_OF_MINUTE.range().getMinimum() - 1}, + {SECOND_OF_MINUTE, time(0, 0, 0, 0), SECOND_OF_MINUTE.range().getMaximum() + 1}, + + {SECOND_OF_DAY, time(0, 0, 0, 0), SECOND_OF_DAY.range().getMinimum() - 1}, + {SECOND_OF_DAY, time(0, 0, 0, 0), SECOND_OF_DAY.range().getMaximum() + 1}, + + {MINUTE_OF_HOUR, time(0, 0, 0, 0), MINUTE_OF_HOUR.range().getMinimum() - 1}, + {MINUTE_OF_HOUR, time(0, 0, 0, 0), MINUTE_OF_HOUR.range().getMaximum() + 1}, + + {MINUTE_OF_DAY, time(0, 0, 0, 0), MINUTE_OF_DAY.range().getMinimum() - 1}, + {MINUTE_OF_DAY, time(0, 0, 0, 0), MINUTE_OF_DAY.range().getMaximum() + 1}, + + {HOUR_OF_AMPM, time(0, 0, 0, 0), HOUR_OF_AMPM.range().getMinimum() - 1}, + {HOUR_OF_AMPM, time(0, 0, 0, 0), HOUR_OF_AMPM.range().getMaximum() + 1}, + + {CLOCK_HOUR_OF_AMPM, time(0, 0, 0, 0), CLOCK_HOUR_OF_AMPM.range().getMinimum() - 1}, + {CLOCK_HOUR_OF_AMPM, time(0, 0, 0, 0), CLOCK_HOUR_OF_AMPM.range().getMaximum() + 1}, + + {HOUR_OF_DAY, time(0, 0, 0, 0), HOUR_OF_DAY.range().getMinimum() - 1}, + {HOUR_OF_DAY, time(0, 0, 0, 0), HOUR_OF_DAY.range().getMaximum() + 1}, + + {CLOCK_HOUR_OF_DAY, time(0, 0, 0, 0), CLOCK_HOUR_OF_DAY.range().getMinimum() - 1}, + {CLOCK_HOUR_OF_DAY, time(0, 0, 0, 0), CLOCK_HOUR_OF_DAY.range().getMaximum() + 1}, + + {AMPM_OF_DAY, time(0, 0, 0, 0), AMPM_OF_DAY.range().getMinimum() - 1}, + {AMPM_OF_DAY, time(0, 0, 0, 0), AMPM_OF_DAY.range().getMaximum() + 1}, + }; + } + + @Test(dataProvider = "withTemporalField_outOfRange") + public void test_with_longTemporalField_invalid(TemporalField field, LocalTime base, long newValue) { + try { + base.with(field, newValue); + fail("Field should not be allowed " + field); + } catch (DateTimeException ex) { + // expected + } + } + + // All other {@code ChronoField} instances will throw an {@code UnsupportedTemporalTypeException}. + @Test(expectedExceptions=UnsupportedTemporalTypeException.class) + public void test_with_longTemporalField_otherChronoField() { + TEST_12_30_40_987654321.with(ChronoField.DAY_OF_MONTH, 1); + } + + // If the field is not a {@code ChronoField}, then the result of this method + // is obtained by invoking {@code TemporalField.adjustInto(Temporal, long)} + // passing {@code this} as the argument. + @Test + public void test_with_longTemporalField_notChronoField() { + final LocalTime result = LocalTime.of(12, 30); + final LocalTime base = LocalTime.of(15, 45); + TemporalField field = new TemporalField() { + public ValueRange rangeRefinedBy(TemporalAccessor temporal) { + throw new UnsupportedOperationException(); + } + public ValueRange range() { + return null; + } + public boolean isTimeBased() { + throw new UnsupportedOperationException(); + } + public boolean isSupportedBy(TemporalAccessor temporal) { + throw new UnsupportedOperationException(); + } + public boolean isDateBased() { + throw new UnsupportedOperationException(); + } + public TemporalUnit getRangeUnit() { + throw new UnsupportedOperationException(); + } + public long getFrom(TemporalAccessor temporal) { + throw new UnsupportedOperationException(); + } + public TemporalUnit getBaseUnit() { + throw new UnsupportedOperationException(); + } + public R adjustInto(R temporal, long newValue) { + assertEquals(temporal, base); + assertEquals(newValue, 12L); + @SuppressWarnings("unchecked") + R r = (R) result; + return r; + } + }; + LocalTime test = base.with(field, 12L); + assertSame(test, result); + } + + @Test(expectedExceptions=NullPointerException.class) + public void test_with_longTemporalField_null() { + TEST_12_30_40_987654321.with((TemporalField) null, 1); + } + //----------------------------------------------------------------------- // withHour() //----------------------------------------------------------------------- From ae37055bc463df4b8ef6e3801ea0b7bb73b5b818 Mon Sep 17 00:00:00 2001 From: Pavel Rappo Date: Sat, 29 Mar 2014 20:20:04 +0000 Subject: [PATCH 108/116] 8037781: Remove sun.misc.Regexp* classes Reviewed-by: alanb, chegar --- .../share/classes/sun/misc/REException.java | 40 --- jdk/src/share/classes/sun/misc/Regexp.java | 141 -------- .../share/classes/sun/misc/RegexpPool.java | 319 ------------------ .../share/classes/sun/misc/RegexpTarget.java | 41 --- 4 files changed, 541 deletions(-) delete mode 100644 jdk/src/share/classes/sun/misc/REException.java delete mode 100644 jdk/src/share/classes/sun/misc/Regexp.java delete mode 100644 jdk/src/share/classes/sun/misc/RegexpPool.java delete mode 100644 jdk/src/share/classes/sun/misc/RegexpTarget.java diff --git a/jdk/src/share/classes/sun/misc/REException.java b/jdk/src/share/classes/sun/misc/REException.java deleted file mode 100644 index db68992d597..00000000000 --- a/jdk/src/share/classes/sun/misc/REException.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright (c) 1995, 2011, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -package sun.misc; - -/** - * A class to signal exception from the RegexpPool class. - * @author James Gosling - */ - -public class REException extends Exception { - - private static final long serialVersionUID = 4656584872733646963L; - - REException (String s) { - super(s); - } -} diff --git a/jdk/src/share/classes/sun/misc/Regexp.java b/jdk/src/share/classes/sun/misc/Regexp.java deleted file mode 100644 index 4d488363bb3..00000000000 --- a/jdk/src/share/classes/sun/misc/Regexp.java +++ /dev/null @@ -1,141 +0,0 @@ -/* - * Copyright (c) 1995, 2004, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -package sun.misc; - -/** - * A class to represent a regular expression. Only handles '*'s. - * @author James Gosling - */ - -public class Regexp { - /** if true then the matching process ignores case. */ - public boolean ignoreCase; - - /* - * regular expressions are carved into three regions: a constant string - * prefix, a constant string suffix, and a series of floating strings in - * between. In the input regular expression, they are separated by *s - */ - public String exp; - public String prefix, suffix; - public boolean exact; - public int prefixLen, suffixLen, totalLen; - public String mids[]; - - /** Create a new regular expression object. The regular expression - is a series of constant strings separated by *s. For example: -

      -
      *.gif
      Matches any string that ends in ".gif". -
      /tmp/*
      Matches any string that starts with "/tmp/". -
      /tmp/*.gif
      Matches any string that starts with "/tmp/" and ends - with ".gif". -
      /tmp/*new*.gif
      Matches any string that starts with "/tmp/" - and ends with ".gif" and has "new" somewhere in between. -
      - */ - public Regexp (String s) { - exp = s; - int firstst = s.indexOf('*'); - int lastst = s.lastIndexOf('*'); - if (firstst < 0) { - totalLen = s.length(); - exact = true; // no * s - } else { - prefixLen = firstst; - if (firstst == 0) - prefix = null; - else - prefix = s.substring(0, firstst); - suffixLen = s.length() - lastst - 1; - if (suffixLen == 0) - suffix = null; - else - suffix = s.substring(lastst + 1); - int nmids = 0; - int pos = firstst; - while (pos < lastst && pos >= 0) { - nmids++; - pos = s.indexOf('*', pos + 1); - } - totalLen = prefixLen + suffixLen; - if (nmids > 0) { - mids = new String[nmids]; - pos = firstst; - for (int i = 0; i < nmids; i++) { - pos++; - int npos = s.indexOf('*', pos); - if (pos < npos) { - mids[i] = s.substring(pos, npos); - totalLen += mids[i].length(); - } - pos = npos; - } - } - } - } - - /** Returns true iff the String s matches this regular expression. */ - final boolean matches(String s) { - return matches(s, 0, s.length()); - } - - /** Returns true iff the substring of s from offset for len characters - matches this regular expression. */ - boolean matches(String s, int offset, int len) { - if (exact) - return len == totalLen && - exp.regionMatches(ignoreCase, 0, s, offset, len); - if (len < totalLen) - return false; - if (prefixLen > 0 && - !prefix.regionMatches(ignoreCase, - 0, s, offset, prefixLen) - || - suffixLen > 0 && - !suffix.regionMatches(ignoreCase, - 0, s, offset + len - suffixLen, - suffixLen)) - return false; - if (mids == null) - return true; - int nmids = mids.length; - int spos = offset + prefixLen; - int limit = offset+len-suffixLen; - for (int i = 0; ilimit) - return false; - spos+=ml; - } - return true; - } - -} diff --git a/jdk/src/share/classes/sun/misc/RegexpPool.java b/jdk/src/share/classes/sun/misc/RegexpPool.java deleted file mode 100644 index c82c66fee13..00000000000 --- a/jdk/src/share/classes/sun/misc/RegexpPool.java +++ /dev/null @@ -1,319 +0,0 @@ -/* - * Copyright (c) 1995, 2001, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -package sun.misc; -import java.io.*; - -/** - * A class to represent a pool of regular expressions. A string - * can be matched against the whole pool all at once. It is much - * faster than doing individual regular expression matches one-by-one. - * - * @see java.misc.RegexpTarget - * @author James Gosling - */ - -public class RegexpPool { - private RegexpNode prefixMachine = new RegexpNode(); - private RegexpNode suffixMachine = new RegexpNode(); - private static final int BIG = 0x7FFFFFFF; - private int lastDepth = BIG; - - public RegexpPool () { - } - - /** - * Add a regular expression to the pool of regular expressions. - * @param re The regular expression to add to the pool. - For now, only handles strings that either begin or end with - a '*'. - * @param ret The object to be returned when this regular expression is - matched. If ret is an instance of the RegexpTarget class, ret.found - is called with the string fragment that matched the '*' as its - parameter. - * @exception REException error - */ - public void add(String re, Object ret) throws REException { - add(re, ret, false); - } - - /** - * Replace the target for the regular expression with a different - * target. - * - * @param re The regular expression to be replaced in the pool. - * For now, only handles strings that either begin or end with - * a '*'. - * @param ret The object to be returned when this regular expression is - * matched. If ret is an instance of the RegexpTarget class, ret.found - * is called with the string fragment that matched the '*' as its - * parameter. - */ - public void replace(String re, Object ret) { - try { - add(re, ret, true); - } catch(Exception e) { - // should never occur if replace is true - } - } - - /** - * Delete the regular expression and its target. - * @param re The regular expression to be deleted from the pool. - * must begin or end with a '*' - * @return target - the old target. - */ - public Object delete(String re) { - Object o = null; - RegexpNode p = prefixMachine; - RegexpNode best = p; - int len = re.length() - 1; - int i; - boolean prefix = true; - - if (!re.startsWith("*") || - !re.endsWith("*")) - len++; - - if (len <= 0) - return null; - - /* March forward through the prefix machine */ - for (i = 0; p != null; i++) { - if (p.result != null && p.depth < BIG - && (!p.exact || i == len)) { - best = p; - } - if (i >= len) - break; - p = p.find(re.charAt(i)); - } - - /* march backward through the suffix machine */ - p = suffixMachine; - for (i = len; --i >= 0 && p != null;) { - if (p.result != null && p.depth < BIG) { - prefix = false; - best = p; - } - p = p.find(re.charAt(i)); - } - - // delete only if there is an exact match - if (prefix) { - if (re.equals(best.re)) { - o = best.result; - best.result = null; - - } - } else { - if (re.equals(best.re)) { - o = best.result; - best.result = null; - } - } - return o; - } - - /** Search for a match to a string & return the object associated - with it with the match. When multiple regular expressions - would match the string, the best match is returned first. - The next best match is returned the next time matchNext is - called. - @param s The string to match against the regular expressions - in the pool. - @return null on failure, otherwise the object associated with - the regular expression when it was added to the pool. - If the object is an instance of RegexpTarget, then - the return value is the result from calling - return.found(string_that_matched_wildcard). - */ - public Object match(String s) { - return matchAfter(s, BIG); - } - - /** Identical to match except that it will only find matches to - regular expressions that were added to the pool after - the last regular expression that matched in the last call - to match() or matchNext() */ - public Object matchNext(String s) { - return matchAfter(s, lastDepth); - } - - private void add(String re, Object ret, boolean replace) throws REException { - int len = re.length(); - RegexpNode p; - if (re.charAt(0) == '*') { - p = suffixMachine; - while (len > 1) - p = p.add(re.charAt(--len)); - } else { - boolean exact = false; - if (re.charAt(len - 1) == '*') - len--; - else - exact = true; - p = prefixMachine; - for (int i = 0; i < len; i++) - p = p.add(re.charAt(i)); - p.exact = exact; - } - - if (p.result != null && !replace) - throw new REException(re + " is a duplicate"); - - p.re = re; - p.result = ret; - } - - private Object matchAfter(String s, int lastMatchDepth) { - RegexpNode p = prefixMachine; - RegexpNode best = p; - int bst = 0; - int bend = 0; - int len = s.length(); - int i; - if (len <= 0) - return null; - /* March forward through the prefix machine */ - for (i = 0; p != null; i++) { - if (p.result != null && p.depth < lastMatchDepth - && (!p.exact || i == len)) { - lastDepth = p.depth; - best = p; - bst = i; - bend = len; - } - if (i >= len) - break; - p = p.find(s.charAt(i)); - } - /* march backward through the suffix machine */ - p = suffixMachine; - for (i = len; --i >= 0 && p != null;) { - if (p.result != null && p.depth < lastMatchDepth) { - lastDepth = p.depth; - best = p; - bst = 0; - bend = i+1; - } - p = p.find(s.charAt(i)); - } - Object o = best.result; - if (o != null && o instanceof RegexpTarget) - o = ((RegexpTarget) o).found(s.substring(bst, bend)); - return o; - } - - /** Resets the pool so that the next call to matchNext looks - at all regular expressions in the pool. match(s); is equivalent - to reset(); matchNext(s); -

      Multithreading note: reset/nextMatch leave state in the - regular expression pool. If multiple threads could be using this - pool this way, they should be syncronized to avoid race hazards. - match() was done in such a way that there are no such race - hazards: multiple threads can be matching in the same pool - simultaneously. */ - public void reset() { - lastDepth = BIG; - } - - /** Print this pool to standard output */ - public void print(PrintStream out) { - out.print("Regexp pool:\n"); - if (suffixMachine.firstchild != null) { - out.print(" Suffix machine: "); - suffixMachine.firstchild.print(out); - out.print("\n"); - } - if (prefixMachine.firstchild != null) { - out.print(" Prefix machine: "); - prefixMachine.firstchild.print(out); - out.print("\n"); - } - } - -} - -/* A node in a regular expression finite state machine. */ -class RegexpNode { - char c; - RegexpNode firstchild; - RegexpNode nextsibling; - int depth; - boolean exact; - Object result; - String re = null; - - RegexpNode () { - c = '#'; - depth = 0; - } - RegexpNode (char C, int depth) { - c = C; - this.depth = depth; - } - RegexpNode add(char C) { - RegexpNode p = firstchild; - if (p == null) - p = new RegexpNode (C, depth+1); - else { - while (p != null) - if (p.c == C) - return p; - else - p = p.nextsibling; - p = new RegexpNode (C, depth+1); - p.nextsibling = firstchild; - } - firstchild = p; - return p; - } - RegexpNode find(char C) { - for (RegexpNode p = firstchild; - p != null; - p = p.nextsibling) - if (p.c == C) - return p; - return null; - } - void print(PrintStream out) { - if (nextsibling != null) { - RegexpNode p = this; - out.print("("); - while (p != null) { - out.write(p.c); - if (p.firstchild != null) - p.firstchild.print(out); - p = p.nextsibling; - out.write(p != null ? '|' : ')'); - } - } else { - out.write(c); - if (firstchild != null) - firstchild.print(out); - } - } -} diff --git a/jdk/src/share/classes/sun/misc/RegexpTarget.java b/jdk/src/share/classes/sun/misc/RegexpTarget.java deleted file mode 100644 index a44028acf7f..00000000000 --- a/jdk/src/share/classes/sun/misc/RegexpTarget.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright (c) 1995, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -package sun.misc; - -/** - * A class to define actions to be performed when a regular expression match - * occurs. - * @author James Gosling - */ - -public interface RegexpTarget { - /** Gets called when a pattern in a RegexpPool matches. - * This method is called by RegexpPool.match() who passes the return - * value from found() back to its caller. - * @param remainder the string that matched the * in the pattern. - */ - Object found(String remainder); -} From 3da9e45a5c34c770d51e488dc444bf88a9f31864 Mon Sep 17 00:00:00 2001 From: Weijun Wang Date: Mon, 31 Mar 2014 16:12:28 +0800 Subject: [PATCH 109/116] 8038754: ReplayCacheTestProc test fails with timeout Reviewed-by: alanb --- jdk/src/share/native/sun/security/jgss/wrapper/NativeUtil.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/jdk/src/share/native/sun/security/jgss/wrapper/NativeUtil.h b/jdk/src/share/native/sun/security/jgss/wrapper/NativeUtil.h index 26c0b6477c5..78f72269f8c 100644 --- a/jdk/src/share/native/sun/security/jgss/wrapper/NativeUtil.h +++ b/jdk/src/share/native/sun/security/jgss/wrapper/NativeUtil.h @@ -86,9 +86,9 @@ extern "C" { extern jfieldID FID_NativeGSSContext_lifetime; extern jfieldID FID_NativeGSSContext_actualMech; #define TRACE0(s) { if (JGSS_DEBUG) { puts(s); fflush(stdout); }} - #define TRACE1(s, p1) { if (JGSS_DEBUG) { printf(s, p1); fflush(stdout); }} - #define TRACE2(s, p1, p2) { if (JGSS_DEBUG) { printf(s, p1, p2); fflush(stdout); }} - #define TRACE3(s, p1, p2, p3) { if (JGSS_DEBUG) { printf(s, p1, p2, p3); fflush(stdout); }} + #define TRACE1(s, p1) { if (JGSS_DEBUG) { printf(s"\n", p1); fflush(stdout); }} + #define TRACE2(s, p1, p2) { if (JGSS_DEBUG) { printf(s"\n", p1, p2); fflush(stdout); }} + #define TRACE3(s, p1, p2, p3) { if (JGSS_DEBUG) { printf(s"\n", p1, p2, p3); fflush(stdout); }} #ifdef __cplusplus From 35c8ad651dea761e22638116408bfa4280a4c1a5 Mon Sep 17 00:00:00 2001 From: Michael Fang Date: Tue, 7 Jan 2014 22:04:03 -0800 Subject: [PATCH 110/116] 8026570: NLS: jdk8 man page update Reviewed-by: naoto, okutsu --- jdk/make/Images.gmk | 6 - jdk/src/linux/doc/man/ja/appletviewer.1 | 165 +- jdk/src/linux/doc/man/ja/extcheck.1 | 171 +- jdk/src/linux/doc/man/ja/idlj.1 | 1268 ++- jdk/src/linux/doc/man/ja/jar.1 | 1078 ++- jdk/src/linux/doc/man/ja/jarsigner.1 | 2637 +++--- jdk/src/linux/doc/man/ja/java.1 | 3030 +++++-- jdk/src/linux/doc/man/ja/javac.1 | 2629 +++--- jdk/src/linux/doc/man/ja/javadoc.1 | 7761 ++++++++--------- jdk/src/linux/doc/man/ja/javah.1 | 345 +- jdk/src/linux/doc/man/ja/javap.1 | 649 +- jdk/src/linux/doc/man/ja/javaws.1 | 434 +- jdk/src/linux/doc/man/ja/jcmd.1 | 154 + jdk/src/linux/doc/man/ja/jconsole.1 | 295 +- jdk/src/linux/doc/man/ja/jdb.1 | 670 +- jdk/src/linux/doc/man/ja/jdeps.1 | 367 + jdk/src/linux/doc/man/ja/jhat.1 | 355 +- jdk/src/linux/doc/man/ja/jinfo.1 | 326 +- jdk/src/linux/doc/man/ja/jjs.1 | 394 + jdk/src/linux/doc/man/ja/jmap.1 | 372 +- jdk/src/linux/doc/man/ja/jps.1 | 513 +- jdk/src/linux/doc/man/ja/jrunscript.1 | 378 +- jdk/src/linux/doc/man/ja/jsadebugd.1 | 291 +- jdk/src/linux/doc/man/ja/jstack.1 | 360 +- jdk/src/linux/doc/man/ja/jstat.1 | 6041 ++----------- jdk/src/linux/doc/man/ja/jstatd.1 | 528 +- jdk/src/linux/doc/man/ja/jvisualvm.1 | 237 +- jdk/src/linux/doc/man/ja/keytool.1 | 3368 ++++--- jdk/src/linux/doc/man/ja/native2ascii.1 | 164 +- jdk/src/linux/doc/man/ja/orbd.1 | 597 +- jdk/src/linux/doc/man/ja/pack200.1 | 667 +- jdk/src/linux/doc/man/ja/policytool.1 | 270 +- jdk/src/linux/doc/man/ja/rmic.1 | 561 +- jdk/src/linux/doc/man/ja/rmid.1 | 655 +- jdk/src/linux/doc/man/ja/rmiregistry.1 | 207 +- jdk/src/linux/doc/man/ja/schemagen.1 | 277 +- jdk/src/linux/doc/man/ja/serialver.1 | 225 +- jdk/src/linux/doc/man/ja/servertool.1 | 296 +- jdk/src/linux/doc/man/ja/tnameserv.1 | 882 +- jdk/src/linux/doc/man/ja/unpack200.1 | 371 +- jdk/src/linux/doc/man/ja/wsgen.1 | 856 +- jdk/src/linux/doc/man/ja/wsimport.1 | 1376 +-- jdk/src/linux/doc/man/ja/xjc.1 | 620 +- .../doc/sun/man/man1/ja/appletviewer.1 | 165 +- .../solaris/doc/sun/man/man1/ja/extcheck.1 | 171 +- jdk/src/solaris/doc/sun/man/man1/ja/idlj.1 | 1268 ++- jdk/src/solaris/doc/sun/man/man1/ja/jar.1 | 1078 ++- .../solaris/doc/sun/man/man1/ja/jarsigner.1 | 2637 +++--- jdk/src/solaris/doc/sun/man/man1/ja/java.1 | 3030 +++++-- jdk/src/solaris/doc/sun/man/man1/ja/javac.1 | 2629 +++--- jdk/src/solaris/doc/sun/man/man1/ja/javadoc.1 | 7761 ++++++++--------- jdk/src/solaris/doc/sun/man/man1/ja/javah.1 | 345 +- jdk/src/solaris/doc/sun/man/man1/ja/javap.1 | 649 +- jdk/src/solaris/doc/sun/man/man1/ja/jcmd.1 | 154 + .../solaris/doc/sun/man/man1/ja/jconsole.1 | 295 +- jdk/src/solaris/doc/sun/man/man1/ja/jdb.1 | 670 +- jdk/src/solaris/doc/sun/man/man1/ja/jdeps.1 | 367 + jdk/src/solaris/doc/sun/man/man1/ja/jhat.1 | 355 +- jdk/src/solaris/doc/sun/man/man1/ja/jinfo.1 | 326 +- jdk/src/solaris/doc/sun/man/man1/ja/jjs.1 | 394 + jdk/src/solaris/doc/sun/man/man1/ja/jmap.1 | 372 +- jdk/src/solaris/doc/sun/man/man1/ja/jps.1 | 513 +- .../solaris/doc/sun/man/man1/ja/jrunscript.1 | 378 +- .../solaris/doc/sun/man/man1/ja/jsadebugd.1 | 291 +- jdk/src/solaris/doc/sun/man/man1/ja/jstack.1 | 360 +- jdk/src/solaris/doc/sun/man/man1/ja/jstat.1 | 6041 ++----------- jdk/src/solaris/doc/sun/man/man1/ja/jstatd.1 | 528 +- .../solaris/doc/sun/man/man1/ja/jvisualvm.1 | 237 +- jdk/src/solaris/doc/sun/man/man1/ja/keytool.1 | 3368 ++++--- .../doc/sun/man/man1/ja/native2ascii.1 | 164 +- jdk/src/solaris/doc/sun/man/man1/ja/orbd.1 | 597 +- jdk/src/solaris/doc/sun/man/man1/ja/pack200.1 | 667 +- .../solaris/doc/sun/man/man1/ja/policytool.1 | 270 +- jdk/src/solaris/doc/sun/man/man1/ja/rmic.1 | 561 +- jdk/src/solaris/doc/sun/man/man1/ja/rmid.1 | 655 +- .../solaris/doc/sun/man/man1/ja/rmiregistry.1 | 207 +- .../solaris/doc/sun/man/man1/ja/schemagen.1 | 277 +- .../solaris/doc/sun/man/man1/ja/serialver.1 | 225 +- .../solaris/doc/sun/man/man1/ja/servertool.1 | 296 +- .../solaris/doc/sun/man/man1/ja/tnameserv.1 | 882 +- .../solaris/doc/sun/man/man1/ja/unpack200.1 | 371 +- jdk/src/solaris/doc/sun/man/man1/ja/wsgen.1 | 856 +- .../solaris/doc/sun/man/man1/ja/wsimport.1 | 1376 +-- jdk/src/solaris/doc/sun/man/man1/ja/xjc.1 | 620 +- 84 files changed, 39030 insertions(+), 46222 deletions(-) create mode 100644 jdk/src/linux/doc/man/ja/jcmd.1 create mode 100644 jdk/src/linux/doc/man/ja/jdeps.1 create mode 100644 jdk/src/linux/doc/man/ja/jjs.1 create mode 100644 jdk/src/solaris/doc/sun/man/man1/ja/jcmd.1 create mode 100644 jdk/src/solaris/doc/sun/man/man1/ja/jdeps.1 create mode 100644 jdk/src/solaris/doc/sun/man/man1/ja/jjs.1 diff --git a/jdk/make/Images.gmk b/jdk/make/Images.gmk index 97898672211..e7264b39622 100644 --- a/jdk/make/Images.gmk +++ b/jdk/make/Images.gmk @@ -426,12 +426,6 @@ ifneq ($(OPENJDK_TARGET_OS), windows) $(install-file) endif - # Old build creates empty man page for this, mimicing behaviour. - $(JDK_IMAGE_DIR)/man/ja_JP.UTF-8/man1/jcmd.1 $(JDK_IMAGE_DIR)/man/ja_JP.PCK/man1/jcmd.1 $(JDK_IMAGE_DIR)/man/ja/man1/jcmd.1: - $(ECHO) $(LOG_INFO) Creating dummy $(patsubst $(OUTPUT_ROOT)/%,%,$@) - $(MKDIR) -p $(@D) - $(TOUCH) $@ - ifeq ($(OPENJDK_TARGET_OS), linux) $(JRE_IMAGE_DIR)/man/ja: $(ECHO) $(LOG_INFO) Creating $(patsubst $(OUTPUT_ROOT)/%,%,$@) diff --git a/jdk/src/linux/doc/man/ja/appletviewer.1 b/jdk/src/linux/doc/man/ja/appletviewer.1 index 5aa0ad3d1fe..76609bfd263 100644 --- a/jdk/src/linux/doc/man/ja/appletviewer.1 +++ b/jdk/src/linux/doc/man/ja/appletviewer.1 @@ -1,66 +1,105 @@ -." Copyright (c) 1995, 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. -." -.TH appletviewer 1 "07 May 2011" - -.LP -.SH "名前" -appletviewer \- Java アプレットビューア -.LP -.LP -\f3appletviewer\fP コマンドは Web ブラウザの外でアプレットを実行させます。 -.LP -.SH "形式" -.LP -.LP -\f4appletviewer\fP \f2[\fP \f2options\fP \f2] \fP\f2urls\fP ... -.LP -.SH "説明" -.LP -.LP -\f3appletviewer\fP コマンドは \f2urls\fP に指定されたドキュメントあるいはリソースと接続して、そのドキュメントが参照するそれぞれのアプレットを独自のウィンドウで表示します。注: \f2urls\fP によって参照されたドキュメントが、\f2OBJECT\fP、\f2EMBED\fP、または \f2APPLET\fP タグでどのアプレットも参照していない場合、\f3appletviewer\fP は何も行いません。\f3appletviewer\fP でサポートされる HTML タグの詳細については、 -.na -\f2「アプレットビューアのタグ」\fP @ +'\" t +.\" Copyright (c) 1995, 2013, Oracle and/or its affiliates. All rights reserved. +.\" Title: appletviewer +.\" Language: English +.\" Date: 2013年11月21日 +.\" SectDesc: 基本ツール +.\" Software: JDK 8 +.\" Arch: 汎用 +.\" +.\" 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. +.\" +.pl 99999 +.TH "appletviewer" "1" "2013年11月21日" "JDK 8" "基本ツール" +.\" ----------------------------------------------------------------- +.\" * Define some portability stuff +.\" ----------------------------------------------------------------- +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.\" http://bugs.debian.org/507673 +.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" ----------------------------------------------------------------- +.\" * set default formatting +.\" ----------------------------------------------------------------- +.\" disable hyphenation +.nh +.\" disable justification (adjust text to left margin only) +.ad l +.\" ----------------------------------------------------------------- +.\" * MAIN CONTENT STARTS HERE * +.\" ----------------------------------------------------------------- +.SH "NAME" +appletviewer \- Webブラウザの外側でアプレットを実行します。 +.SH "概要" +.sp +.if n \{\ +.RS 4 +.\} +.nf +\fIappletviewer\fR [\fIoptions\fR] \fIurl\fR\&.\&.\&. .fi -http://java.sun.com/javase/6/docs/technotes/tools/appletviewertags.htmlを参照してください。 -.LP -.LP -\f3注:\fP \f3appletviewer\fP は、RFC2396 で規定されたエスケープ機構に従って符号化された URL を必要とします。サポートされるのは、符号化された URL だけです。ただし、ファイル名については、RFC2396 に指定された方法で符号化を解除しておく必要があります。 -.LP -.SH "オプション" -.LP -.RS 3 -.TP 3 -\-debug -Java デバッガ jdb(1) でアプレットビューアを開始します。これにより、ドキュメント中のアプレットをデバッグすることができます。 -.TP 3 -\-encoding \ \ encoding name -入力 HTML ファイルのエンコーディング名を指定します。 -.TP 3 -\-Jjavaoption -文字列 \f2javaoption\fP は、appletviewer を実行する Java インタプリタに 1 つの引数として渡されます。引数にスペースを含めてはいけません。複数の引数は、各引数のすべてを接頭辞 \f3\-J\fP で始めることにより区分する必要があります。これは、コンパイラの実行環境、またはメモリーの利用に有効です。 +.if n \{\ .RE +.\} +.PP +\fIoptions\fR +.RS 4 +空白で区切られたコマンドライン・オプション。オプションを参照してください。 +.RE +.PP +\fIurl\fR +.RS 4 +表示するドキュメントまたはリソースの場所。空白で区切られた複数のURLを指定できます。 +.RE +.SH "説明" +.PP +\fIappletviewer\fRコマンドは\fIurls\fRに指定されたドキュメントあるいはリソースと接続して、そのドキュメントが参照するそれぞれのアプレットを独自のウィンドウで表示します。urlsによって参照されたドキュメントが、\fIOBJECT\fR、\fIEMBED\fRまたは\fIAPPLET\fRタグでどのアプレットも参照していない場合、\fIappletviewer\fRコマンドは何も行いません。\fIappletviewer\fRコマンドでサポートされるHTMLタグの詳細は、http://docs\&.oracle\&.com/javase/8/docs/technotes/tools/appletviewertags\&.htmlにある +アプレット・ビューア・タグを参照してください。 +.PP +\fIappletviewer\fRコマンドは、RFC2396で定義されたエスケープ・メカニズムに従ってエンコードされたURLを必要とします。サポートされるのは、エンコードされたURLのみです。ただし、ファイル名については、RFC2396の仕様に従ってエンコードを解除しておく必要があります。 +.PP +\fB注意:\fR +The +\fIappletviewer\fRコマンドは開発専用です。詳細は、http://docs\&.oracle\&.com/javase/8/docs/technotes/samples/aboutCodeSamples\&.htmlにある +サンプル/テスト・アプリケーションおよびコードについてを参照してください。 +.SH "オプション" +.PP +\-debug +.RS 4 +\fIjdb\fRコマンドを使用してJavaデバッガでアプレット・ビューアを開始して、ドキュメント中のアプレットをデバッグします。 +.RE +.PP +\-encoding \fIencoding\-name\fR +.RS 4 +入力HTMLファイルのエンコーディング名を指定します。 +.RE +.PP +\-J\fIjavaoption\fR +.RS 4 +文字列\fIjavaoption\fRは、アプレット・ビューアを実行するJavaインタプリタに1つの引数として渡されます。引数にスペースを含めないでください。複数の引数は、すべてが接頭辞\fI\-J\fRで始まる必要があります。これは、コンパイラの実行環境またはメモリー使用の調整に有効です。 +.RE +.PP -.LP -.LP - -.LP - +.br +'pl 8.5i +'bp diff --git a/jdk/src/linux/doc/man/ja/extcheck.1 b/jdk/src/linux/doc/man/ja/extcheck.1 index d0a671568f8..fdd5a8e0cb2 100644 --- a/jdk/src/linux/doc/man/ja/extcheck.1 +++ b/jdk/src/linux/doc/man/ja/extcheck.1 @@ -1,73 +1,108 @@ -." 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 -." 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. -." -.TH extcheck 1 "07 May 2011" - -.LP -.SH "名前" -extcheck \- jar の競合検出ユーティリティー -.LP -.LP -\f3extcheck\fP は、ターゲットの jar ファイルと現在インストールされている拡張機能の jar ファイル間のバージョンの競合を検出します。 -.LP -.SH "形式" -.LP +'\" t +.\" Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved. +.\" Title: extcheck +.\" Language: English +.\" Date: 2013年11月21日 +.\" SectDesc: 基本ツール +.\" Software: JDK 8 +.\" Arch: 汎用 +.\" +.\" 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. +.\" +.pl 99999 +.TH "extcheck" "1" "2013年11月21日" "JDK 8" "基本ツール" +.\" ----------------------------------------------------------------- +.\" * Define some portability stuff +.\" ----------------------------------------------------------------- +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.\" http://bugs.debian.org/507673 +.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" ----------------------------------------------------------------- +.\" * set default formatting +.\" ----------------------------------------------------------------- +.\" disable hyphenation +.nh +.\" disable justification (adjust text to left margin only) +.ad l +.\" ----------------------------------------------------------------- +.\" * MAIN CONTENT STARTS HERE * +.\" ----------------------------------------------------------------- +.SH "NAME" +extcheck \- ターゲットのJavaアーカイブ(JAR)ファイルと現在インストールされている拡張機能のJARファイル間のバージョンの競合を検出します。 +.SH "概要" +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -extcheck [ \-verbose ] targetfile.jar -.fl -\fP +\fIextcheck\fR [\fIoptions\fR] \fItargetfile\&.jar\fR .fi - -.LP -.SH "説明" -.LP -.LP -\f3extcheck\fP ユーティリティーは、指定された Jar ファイルのタイトルおよびバージョンが Java(TM) 2 SDK にインストールされている拡張機能と競合していないかをチェックします。拡張機能をインストールする前に、このユーティリティーを使って、バージョンが同じか、より新しい拡張機能がすでにインストールされていないかどうかを調べることができます。 -.LP -.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 -.LP -競合が検出されない場合のリターンコードは \f20\fP です。 -.LP -.LP -拡張機能ディレクトリ内のいずれかの jar ファイルのマニフェストに、同一の \f2Specification\-title\fP 、および同一またはより新しい \f2Specification\-version\fP 番号がある場合は、ゼロでないエラーコードが返されます。 \f2targetfile.jar\fP のマニフェストに \f2Specification\-title\fP または \f2Specification\-version\fP 属性がない場合も、ゼロでないエラーコードが返されます。 -.LP -.SH "オプション" -.LP -.RS 3 -.TP 3 -\-verbose -拡張機能ディレクトリ内の Jar ファイルを、チェック時に一覧表示します。また、ターゲット jar ファイルのマニフェストの属性、および競合する jar ファイルについても報告します。 -.TP 3 -\-Joption -Java 仮想マシンに \f2option\fP を渡します。\f2option\fP には、java(1)のリファレンスページに記載されているオプションを 1 つ指定します。たとえば、\f3\-J\-Xms48m\fP と指定すると、スタートアップメモリーは 48M バイトに設定されます。 +.if n \{\ +.RE +.\} +.PP +\fIoptions\fR +.RS 4 +コマンドライン・オプション。オプションを参照してください。 +.RE +.PP +\fItargetfile\&.jar\fR +.RS 4 +バージョンの競合を検出するために、現在インストールされている拡張機能JARファイルと比較するターゲットJARファイル。 +.RE +.SH "説明" +.PP +\fIextcheck\fRコマンドは、指定されたJARファイルのタイトルおよびバージョンがJava SE SDKにインストールされている拡張機能と競合していないかをチェックします。拡張機能をインストールする前に、このユーティリティを使用して、同じバージョンまたはより新しいバージョンの拡張機能がすでにインストールされていないかどうかを調べることができます。 +.PP +\fIextcheck\fRコマンドは、\fItargetfile\&.jar\fRファイルのマニフェスト内のヘッダーSpecification\-titleおよびSpecification\-versionを、拡張機能ディレクトリ内に現在インストールされているすべてのJARファイル内の対応するヘッダーと比較します。デフォルトでは、拡張機能ディレクトリは、Oracle Solarisの場合は\fIjre/lib/ext\fR、Windowsの場合は\fI\ejre\elib\eext\fRです。\fIextcheck\fRコマンドは、\fIjava\&.lang\&.Package\&.isCompatibleWith\fRメソッドと同様の方法でバージョン番号を比較します。 +.PP +競合が検出されない場合、リターン・コードは0です。 +.PP +拡張機能ディレクトリ内のいずれかのJARファイルのマニフェストに、同一の\fISpecification\-title\fR、および同一またはより新しい\fISpecification\-version\fR番号がある場合は、ゼロでないエラー・コードが返されます。\fItargetfile\&.jar\fRのマニフェスト・ファイルに\fISpecification\-title\fRまたは\fISpecification\-version\fR属性がない場合も、ゼロでないエラー・コードが返されます。 +.SH "オプション" +.PP +\-verbose +.RS 4 +拡張機能ディレクトリ内のJARファイルを、チェック時に一覧表示します。また、ターゲットJARファイルのマニフェストの属性、および競合するJARファイルについても報告します。 +.RE +.PP +\-J\fIoption\fR +.RS 4 +Java仮想マシン(JVM)に\fIoption\fRを渡します。optionには、Java起動ツールのリファレンス・ページに記載されているオプションを1つ指定します。たとえば、\fI\-J\-Xms48m\fRと指定すると、スタートアップ・メモリーは48MBに設定されます。java(1)を参照してください。 .RE - -.LP .SH "関連項目" -.LP -.LP +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} jar(1) -.LP - +.RE +.br +'pl 8.5i +'bp diff --git a/jdk/src/linux/doc/man/ja/idlj.1 b/jdk/src/linux/doc/man/ja/idlj.1 index 96ce9478bdc..92b10e2e57d 100644 --- a/jdk/src/linux/doc/man/ja/idlj.1 +++ b/jdk/src/linux/doc/man/ja/idlj.1 @@ -1,738 +1,554 @@ -." 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 -." 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. -." -.TH idlj 1 "07 May 2011" - -.LP -.SH "名前" -idlj \- IDL\-to\-Java コンパイラ -.LP -\f3idlj\fP は、指定された IDL ファイルから Java バインディングを生成します。 -.SH "形式" -.LP +'\" t +.\" Copyright (c) 2001, 2013, Oracle and/or its affiliates. All rights reserved. +.\" Title: idlj +.\" Language: English +.\" Date: 2013年11月21日 +.\" SectDesc: Java IDLおよびRMI-IIOPツール +.\" Software: JDK 8 +.\" Arch: 汎用 +.\" +.\" 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. +.\" +.pl 99999 +.TH "idlj" "1" "2013年11月21日" "JDK 8" "Java IDLおよびRMI-IIOPツール" +.\" ----------------------------------------------------------------- +.\" * Define some portability stuff +.\" ----------------------------------------------------------------- +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.\" http://bugs.debian.org/507673 +.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" ----------------------------------------------------------------- +.\" * set default formatting +.\" ----------------------------------------------------------------- +.\" disable hyphenation +.nh +.\" disable justification (adjust text to left margin only) +.ad l +.\" ----------------------------------------------------------------- +.\" * MAIN CONTENT STARTS HERE * +.\" ----------------------------------------------------------------- +.SH "NAME" +idlj \- 指定されたインタフェース定義言語(IDL)ファイルに対してJavaバインディングを生成します。 +.SH "概要" +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -idlj [ \fP\f3options\fP\f3 ] \fP\f4idl\-file\fP\f3 -.fl -\fP +\fIidlj\fR [ \fIoptions\fR ] \fIidlfile\fR .fi - -.LP -.LP -\f2idl\-file\fP は、インタフェース定義言語 (IDL) による定義が入ったファイルの名前です。\f2options\fP の順番は任意ですが、\f2idl\-file\fP よりも前に指定しなければなりません。 -.LP +.if n \{\ +.RE +.\} +.PP +\fIoptions\fR +.RS 4 +コマンドライン・オプション。オプションを参照してください。optionsの順番は任意ですが、\fIidlfile\fRよりも前に指定する必要があります。 +.RE +.PP +\fIidlfile\fR +.RS 4 +インタフェース定義言語(IDL)による定義が含まれるファイルの名前。 +.RE .SH "説明" -.LP -.LP -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 という名前だったものがあります。 -.LP -.SS -クライアントバインディングおよびサーバーバインディングの発行 -.LP -.LP -My.idl という名前の IDL ファイルに対して Java バインディングを生成するには、次のコマンドを実行します。 -.LP +.PP +IDL\-to\-Javaコンパイラは、指定されたIDLファイルに対してJavaバインディングを生成します。バインディングの詳細は、http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/idl/mapping/jidlMapping\&.htmlにある +Java IDL: Java言語マッピングへのIDLを参照してください。 +.PP +IDL\-to\-Javaコンパイラの以前のリリースの中には、\fIidltojava\fRという名前だったものがあります。 +.SS "クライアント・バインディングおよびサーバー・バインディングの発行" +.PP +次の\fIidlj\fRコマンドは、クライアント側バインディングを含む\fIMy\&.idl\fRという名前のIDLファイルを生成します。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -idlj My.idl -.fl -\fP +idlj My\&.idl .fi - -.LP -.LP -これにより、クライアント側のバインディングが生成されます。このコマンドは、次のコマンドと等価です。 -.LP -.nf -\f3 -.fl -idlj \fP\f3\-fclient\fP My.idl -.fl -.fi - -.LP -.LP -クライアント側のバインディングには、サーバー側のスケルトンは組み込まれていません。インタフェースに対してサーバー側のバインディングを生成するには、次のコマンドを実行します。 -.LP -.nf -\f3 -.fl -idlj \fP\f3\-fserver\fP My.idl -.fl -.fi - -.LP -.LP -サーバー側のバインディングには、クライアント側のバインディングのほかに、スケルトンも含まれています。これらはすべて、 \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 -.LP -サーバー側で可能なモデルは 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 インタフェースとオペレーションインタフェースを実装します。 -.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 そのものによって呼び出され、サーバントの動作を制御するためにユーザーがオーバーライドできるメソッドも提供します。 -.LP -.LP -継承モデルのもう 1 つのオプションは、\f2\-oldImplBase\fP フラグを使用することで、J2SE 1.4 より前のバージョンの Java プログラミング言語と互換性のあるサーバー側バインディングを生成することです。ただし、\f2\-oldImplBase\fP フラグを使用するのは、標準的な手法ではありません。これらの API は今後非推奨になる予定です。このフラグを使用するのは、J2SE 1.3 で記述された既存のサーバーとの互換性が必要な場合だけです。その場合には既存の MAKEFILE を変更し、\f2idlj\fP コンパイラに \f2\-oldImplBase\fP フラグを追加する必要があります。そうしないと、POA ベースのサーバー側マッピングが生成されます。下位互換性のあるサーバー側バインディングを生成するには、次のコマンドを使用します。 -.LP -.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 -.LP -\f2My.idl\fP 内で \f2My\fP インタフェースが定義されている場合は、\f2_MyImplBase.java\fP というファイルが生成されます。\f2My\fP に対してその実装を提供し、この実装は \f2_MyImplBase\fP から継承しなければなりません。 -.LP -.LP -もう 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 - ORB orb = ORB.init(args, System.getProperties()); -.fl - -.fl - // Get reference to rootpoa & activate the POAManager -.fl - POA rootpoa = (POA)orb.resolve_initial_references("RootPOA"); -.fl - rootpoa.the_POAManager().activate(); -.fl - -.fl - // create servant and register it with the ORB -.fl - MyServant myDelegate = new MyServant(); -.fl - myDelegate.setORB(orb); -.fl - -.fl - // create a tie, with servant being the delegate. -.fl - MyPOATie tie = new MyPOATie(myDelegate, rootpoa); -.fl - -.fl - // obtain the objectRef for the tie -.fl - My ref = tie._this(orb); -.fl -\fP -.fi - -.LP -.LP -他の実装から継承しなければならない場合、標準の継承モデルではなく Tie モデルを使用することがあります。Java の場合は、インタフェースの継承の個数に制限はありませんが、クラスの継承に使用できるスロットは 1 つだけです。継承モデルを使用した場合は、そのスロットが占有されます。Tie モデルを使用した場合は、そのスロットが使用されず、ユーザーが独自の目的で使用することができます。ただし、この方法には、間接性のレベルが 1 つ導入されるという欠点があります。メソッドを呼び出すときに、余分なメソッド呼び出しが 1 回発生します。 -.LP -.LP -IDL のバージョンから J2SE 1.4 より前のバージョンの Java 言語へのマッピングと互換性のある、サーバー側の Tie モデルのバインディングを生成するには、次のコマンドを使用します。 -.LP -.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 -.fl - ORB orb = ORB.init(args, System.getProperties()); -.fl - -.fl - // create servant and register it with the ORB -.fl - MyServant myDelegate = new MyServant(); -.fl - myDelegate.setORB(orb); -.fl - -.fl - // create a tie, with servant being the delegate. -.fl - MyPOATie tie = new MyPOATie(myDelegate); -.fl - -.fl - // obtain the objectRef for the tie -.fl - My ref = tie._this(orb); -.fl -\fP -.fi - -.LP -.SS -発行されたファイルの代替位置の指定 -.LP -.LP -発行されたファイルをカレントディレクトリ以外のディレクトリに置くには、次のようなコマンドでコンパイラを呼び出します。 -.LP -.nf -\f3 -.fl -idlj \fP\f3\-td /altdir\fP My.idl -.fl -.fi - -.LP -.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 -.LP -また、もし \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 -.LP -このような形式でインクルードを指定すると、コマンドが長くて複雑になります。そこで、インクルードファイルを検索する場所をコンパイラに指示するための別の方法が用意されています。この方法は、環境変数の考え方と似ています。CLASSPATH にリストされているディレクトリ内に \f2idl.config\fP という名前のファイルを作成します。その \f2idl.config\fP の中に、次のような形式の行を入れます。 -.LP -.nf -\f3 -.fl -includes=/includes;/moreIncludes -.fl -\fP -.fi - -.LP -.LP -コンパイラは、このファイルを検索し、インクルードリストを読み込みます。この例では、ディレクトリの間の区切り文字はセミコロン (;) になっています。この区切り文字は、プラットフォームによって異なります。たとえば、Windows プラットフォームではセミコロンですが、Unix プラットフォームではコロンです。 \f2インクルード\fPの詳細については、 -.na -\f2CLASSPATH の設定\fP @ -.fi -http://java.sun.com/javase/6/docs/technotes/tools/index.html#general を参照してください。 -.LP -.SS -インクルードファイルに対するバインディングの発行 -.LP -.LP -デフォルトでは、コマンド行に指定した IDL ファイルで定義されているインタフェースや構造体などについてのみ、Java バインディングが生成されます。インクルードされたファイルで定義されている型については、Java バインディングは生成されません。たとえば、次の 2 つの IDL ファイルについて考えてみましょう。 -.LP - -.LP -.LP -\f4My.idl\fP -.LP -.nf -\f3 -.fl -#include -.fl -interface My -.fl -{ -.fl -}; -.fl -\fP -.fi - -.LP - -.LP -.LP -\f4MyOther.idl\fP -.LP -.nf -\f3 -.fl -interface MyOther -.fl -{ -.fl -}; -.fl -\fP -.fi - -.LP - -.LP -.LP -次のコマンドでは、\f2My\fP に対する Java バインディングだけが生成されます。 -.LP -.nf -\f3 -.fl -idlj My.idl -.fl -\fP -.fi - -.LP -.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 -.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 -.fl -interface My -.fl -{ -.fl - #include -.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.= -.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 ファイルに次のような行を追加した場合と等価です。 -.nf -\f3 -.fl -#define \fP\f4symbol\fP\f3 -.fl -\fP -.fi -.TP 3 -\-emitAll -#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 が指定されたものと見なされます。 -.TP 3 -\-i include\-path -デフォルトでは、インクルードファイルはカレントディレクトリから検索されます。このオプションを指定すると、ほかのディレクトリを追加できます。 -.TP 3 -\-keep -生成されるファイルがすでに存在している場合は、そのファイルが上書きされません。デフォルトでは、上書きされます。 -.TP 3 -\-noWarn -警告メッセージを表示しないようにします。 -.TP 3 -\-oldImplBase -v1.4 より前の JDK ORB と互換性のあるスケルトンを生成します。デフォルトでは、POA 継承モデルのサーバー側バインディングが生成されます。このオプションを指定すると、\f2ImplBase\fP 継承モデルのクラスであるサーバー側バインディングが生成されるので、古いバージョンの Java プログラミング言語との下位互換性が得られます。 -.TP 3 -\-pkgPrefix type prefix -\f2type\fP がファイルスコープで検出された場合は、その型に対して生成されるすべてのファイルについて、生成される Java パッケージ名に \f2prefix\fP という接頭辞が付加されます。\f2type\fP は、トップレベルモジュールの単純名か、どのモジュールよりも外側で定義された IDL 型の単純名のどちらかです。 -.TP 3 -\-pkgTranslate type package -識別子の中にモジュール名 type が検出されると、生成される Java パッケージ内のすべてのファイルについて、識別子の中のその名前が package で置き換えられます。最初に \f2pkgPrefix\fP を変更します。\f2type\fP は、トップレベルのモジュール、またはすべてのモジュールの外部で定義された IDL 型の単純名です。そして、完全なパッケージ名に正確に一致しなければなりません。 -.LP -1 つの識別子の中で複数の変換がマッチする場合は、もっとも長いマッチが選ばれます。たとえば、次のような引数が指定されている場合は、 -.nf -\f3 -.fl - \-pkgTranslate foo bar \-pkgTranslate foo.baz buzz.fizz -.fl -\fP -.fi -.LP -次のような変換が実施されます。 -.nf -\f3 -.fl -foo => bar -.fl -foo.boo => bar.boo -.fl -foo.baz => buzz.fizz -.fl -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 のサブパッケージ +.if n \{\ .RE -.LP -これらのパッケージ名を変換しようとすると、互換性のないコードが生成されます。そして、\f2\-pkgTranslate\fP のあとの最初の引数としてそれらのパッケージを使用すると、エラーとして扱われます。 -.TP 3 -\-skeletonName xxx%yyy -\f2xxx%yyy\fP が、スケルトンに名前を付けるパターンとして使用されます。デフォルトは次のとおりです。 -.RS 3 -.TP 2 -o -\f2POA\fP 基底クラスの場合は「%POA」(\f2\-fserver\fP または \f2\-fall\fP) -.TP 2 -o -\f2oldImplBase\fP クラスの場合は「_%ImplBase」(\f2\-oldImplBase\fP かつ (\f2\-fserver\fP または \f2\-fall\fP)) +.\} +.PP +前の構文は次と同等です。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +idlj \-fclient My\&.idl +.fi +.if n \{\ .RE -.TP 3 -\-td dir -出力ディレクトリとして、カレントディレクトリではなく、\f2dir\fP が使用されます。 -.TP 3 -\-tieName xxx%yyy -このパターンに従って Tie に名前が付けられます。デフォルトは次のとおりです。 -.RS 3 -.TP 2 -o -\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)) +.\} +.PP +次の例では、サーバー側バインディングを生成し、クライアント側バインディングおよびスケルトンを含めており、これらはすべて、POA (継承モデル)です。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +idlg \-fserver My\&.idl +.fi +.if n \{\ .RE -.TP 3 -\-nowarn, \-verbose -冗長モードになります。 -.TP 3 -\-version -バージョン情報を表示して終了します。 +.\} +.PP +クライアント側とサーバー側の両方のバインディングを生成する場合は、次のコマンド(どれも等価)のうちの1つを使用します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +idlj \-fclient \-fserver My\&.idl +idlj \-fall My\&.idl +.fi +.if n \{\ .RE - -.LP -各オプションの詳細については、「説明」のセクションを参照してください。 -.SH "制約" -.LP -.RS 3 -.TP 2 -o -グローバルスコープ内のエスケープされた識別子は、IDL プリミティブ型の \f2Object\fP または \f2ValueBase\fP と同じ綴りであってはなりません。これらの識別子については、シンボルテーブルが事前にロードされており、これらの識別子の再定義を許可すると元の定義が上書きされてしまいます。これは、おそらく恒久的な制約です。 -.TP 2 -o -\f2fixed\fP という IDL 型はサポートされていません。 +.\} +.PP +サーバー側で可能なモデルは2つあります。移殖可能サーバント継承モデルとTieモデルです。Tie委譲モデルを参照してください。 +.if n \{\ +.sp +.\} +.RS 4 +.it 1 an-trap +.nr an-no-space-flag 1 +.nr an-break-flag 1 +.br +.ps +1 +\fB移殖可能サーバント継承モデル\fR +.ps -1 +.br +.PP +デフォルトのサーバー側のモデルは、移殖可能サーバント継承モデルです。\fIMy\&.idl\fR内で\fIMy\fRインタフェースが定義されている場合は、\fIMyPOA\&.java\fRというファイルが生成されます。\fIMy\fRインタフェースの実装を提供する必要があり、\fIMy\fRインタフェースは\fIMyPOA\fRクラスから継承する必要があります。\fIMyPOA\&.java\fRは、http://docs\&.oracle\&.com/javase/8/docs/api/org/omg/PortableServer/Servant\&.htmlにある +\fIorg\&.omg\&.PortableServer\&.Servant\fRクラスを拡張するストリームベースのスケルトンです。 +.PP +\fIMy\fRインタフェースは、スケルトンが実装するIDLインタフェースに関連付けられている\fIcallHandler\fRインタフェースと操作インタフェースを実装します。 +.PP +ポータブル・オブジェクト・アダプタ(POA)の\fIPortableServer\fRモジュールは、ネイティブの\fIServant\fR型を定義します。http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/idl/POA\&.htmlにある +ポータブル・オブジェクト・アダプタ(POA)を参照してください。 +.PP +Javaプログラミング言語では、\fIServant\fR型はJavaの\fIorg\&.omg\&.PortableServer\&.Servant\fRクラスにマップされます。これは、すべてのPOAサーバント実装のベース・クラスとして機能し、アプリケーション・プログラマが呼び出すことのできるいくつかのメソッド、およびPOAによって呼び出され、サーバントの動作を制御するためにユーザーがオーバーライドできるメソッドを提供します。 +.PP +継承モデルのもう1つのオプションは、\fI\-oldImplBase\fRフラグを使用して、Java SE 1\&.4より前のリリースのJavaプログラミング言語と互換性のあるサーバー側バインディングを生成することです。\-\fIoldImplBase\fRフラグは非標準で、これらのAPIは非推奨です。このフラグを使用するのは、Java SE 1\&.3で記述された既存のサーバーとの互換性が必要な場合のみです。その場合、既存のmakeファイルを変更して、\fI\-oldImplBase\fRフラグを\fIidlj\fRコンパイラに追加する必要があります。それ以外の場合、POAベースのサーバー側マッピングが生成されます。下位互換性のあるサーバー側バインディングを生成するには、次を実行します。 +.sp .5v .RE - -.LP -.SH "既知の問題点" -.LP -.RS 3 -.TP 2 -o -グローバル識別子についてインポートが生成されません。予期されないローカル impl を呼び出すと、例外を受け取ります。 しかし、その原因は、\f2ServerDelegate\fP DSI コード内の \f2NullPointerException\fP にあるようです。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +idlj \-fclient \-fserver \-oldImplBase My\&.idl +idlj \-fall \-oldImplBase My\&.idl +.fi +.if n \{\ .RE - -.LP +.\} +.PP +\fIMy\&.idl\fR内で\fIMy\fRインタフェースが定義されている場合は、\fI_MyImplBase\&.java\fRというファイルが生成されます。\fIMy\fRインタフェースの実装を提供する必要があり、\fIMy\fRインタフェースは\fI_MyImplBase\fRクラスから継承する必要があります。 +.if n \{\ +.sp +.\} +.RS 4 +.it 1 an-trap +.nr an-no-space-flag 1 +.nr an-break-flag 1 +.br +.ps +1 +\fBTie委譲モデル\fR +.ps -1 +.br +.PP +もう1つのサーバー側モデルは、Tieモデルと呼ばれるものです。このサーバー側モデルは、委譲モデルです。Tieとスケルトンを同時に生成することはできないため、それらは別々に生成する必要があります。次のコマンドによって、Tieモデル用のバインディングが生成されます。 +.sp .5v +.RE +.sp +.if n \{\ +.RS 4 +.\} +.nf +idlj \-fall My\&.idl +idlj \-fallTIE My\&.idl +.fi +.if n \{\ +.RE +.\} +.PP +\fIMy\fRインタフェースの場合、2番目のコマンドにより、\fIMyPOATie\&.java\fRが生成されます。\fIMyPOATie\fRクラスへのコンストラクタは、delegateを取ります。この例では、デフォルトのPOAモデルを使用しているため、コンストラクタにもPOAが必要です。delegateに対して実装を提供する必要がありますが、この実装は\fIMyOperations\fRインタフェースから継承する必要があるのみで、その他のクラスから継承する必要はありません。これをORBと一緒に使用するには、たとえば次のように\fIMyPOATie\fRクラス内で実装をラップする必要があります。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +ORB orb = ORB\&.init(args, System\&.getProperties()); +// Get reference to rootpoa & activate the POAManager +POA rootpoa = (POA)orb\&.resolve_initial_references("RootPOA"); +rootpoa\&.the_POAManager()\&.activate(); + +// create servant and register it with the ORB +MyServant myDelegate = new MyServant(); +myDelegate\&.setORB(orb); + +// create a tie, with servant being the delegate\&. +MyPOATie tie = new MyPOATie(myDelegate, rootpoa); + +// obtain the objectRef for the tie +My ref = tie\&._this(orb); +.fi +.if n \{\ +.RE +.\} +.PP +他の実装から継承する必要がある場合、標準の継承モデルではなくTieモデルを使用することもできます。Javaの場合は、インタフェースの継承の個数に制限はありませんが、クラスの継承に使用できるスロットは1つのみです。継承モデルを使用した場合は、そのスロットが占有されます。Tieモデルを使用すると、そのスロットが使用されず、ユーザーが独自の目的で使用できます。この方法には、間接性のレベルが1つ導入されるという短所があります。メソッドを呼び出すときに、余分なメソッド呼出しが1回発生します。 +.PP +サーバー側の生成の場合、Java SE 1\&.4より前のバージョンのJava言語にマッピングするIDLのバージョンと互換性のある、Tieモデルのバインディングです。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +idlj \-oldImplBase \-fall My\&.idl +idlj \-oldImplBase \-fallTIE My\&.idl +.fi +.if n \{\ +.RE +.\} +.PP +\fIMy\fRインタフェースの場合、これにより、\fIMy_Tie\&.java\fRが生成されます。\fIMy_Tie\fRクラスへのコンストラクタは、\fIimpl\fRオブジェクトを取ります。\fIimpl\fRに対して実装を提供する必要がありますが、その実装は\fIHelloOperations\fRインタフェースから継承する必要があるのみで、その他のクラスから継承する必要はありません。しかし、これをORBと一緒に使用するには、たとえば次のように\fIMy_Tie\fR内で実装をラップする必要があります。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +ORB orb = ORB\&.init(args, System\&.getProperties()); + +// create servant and register it with the ORB +MyServant myDelegate = new MyServant(); +myDelegate\&.setORB(orb); + +// create a tie, with servant being the delegate\&. +MyPOATie tie = new MyPOATie(myDelegate); + +// obtain the objectRef for the tie +My ref = tie\&._this(orb); +.fi +.if n \{\ +.RE +.\} +.SS "発行されたファイルの代替位置の指定" +.PP +発行されたファイルを現在のディレクトリ以外のディレクトリに置くには、\fIi\fR\fIdlj \-td /altdir My\&.idl\fRのコマンドでコンパイラを呼び出します。 +.PP + +\fIMy\fRインタフェースの場合、バインディングは、\fI\&./My\&.java\fRではなく、\fI/altdir/My\&.java\fRなどに発行されます。 +.SS "インクルード・ファイルの代替位置の指定" +.PP +\fIMy\&.idl\fRファイルが別の\fIidl\fRファイルである\fIMyOther\&.idl\fRをインクルードする場合、コンパイラでは、\fIMyOther\&.idl\fRファイルがローカル・ディレクトリに存在することを前提としています。たとえば、それが\fI/includes\fRにある場合は、次のようなコマンドでコンパイラを呼び出します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +idlj \-i /includes My\&.idl +.fi +.if n \{\ +.RE +.\} +.PP +たとえば、\fI/moreIncludes\fRにある\fIAnother\&.idl\fRも\fIMy\&.idl\fRにインクルードされているのであれば、次のようなコマンドでコンパイラを呼び出します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +idlj \-i /includes \-i /moreIncludes My\&.idl +.fi +.if n \{\ +.RE +.\} +.PP +このような形式の\fIinclude\fRは長くなるため、インクルード・ファイルを検索する場所をコンパイラに指示するための別の方法が用意されています。この方法は、環境変数の考え方と似ています。\fICLASSPATH\fR変数に一覧表示されているディレクトリ内にidl\&.configという名前のファイルを作成します。その\fIidl\&.config\fRの中に、次のような形式の行を入れます。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +includes=/includes;/moreIncludes +.fi +.if n \{\ +.RE +.\} +.PP +コンパイラは、このファイルを検索し、インクルード・リストを読み込みます。この例では、ディレクトリの間の区切り文字はセミコロン(;)になっています。この区切り文字は、プラットフォームによって異なります。Windowsプラットフォームではセミコロンを使用し、UNIXプラットフォームではコロンを使用するなどです。 +.SS "インクルード・ファイルに対するバインディングの発行" +.PP +デフォルトでは、コマンドラインに指定した\fIidl\fRファイルで定義されているインタフェースや構造体などについてのみ、Javaバインディングが生成されます。インクルードされたファイルで定義されている型については生成されません。たとえば、次の2つの\fIidl\fRファイルについて考えてみます。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +My\&.idl file: + +#include +interface My +{ +}; + +MyOther\&.idl file: + +interface MyOther +{ +}; +.fi +.if n \{\ +.RE +.\} +.PP +デフォルトのルールに関して警告があります。グローバル・スコープに表示される\fI#include\fR文は、前述のとおりに処理されます。これらの\fI#include\fR文は、インポート文と見なすことができます。囲まれたスコープ内に表示される\fI#include\fR文は、本当の意味での\fI#include\fR文として処理されます。つまり、インクルードされたファイルにあるコードが、元のファイルにそのまま表示されているかのように処理され、それに対してJavaバインディングが発行されます。次はその例です。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +My\&.idl file: + +#include +interface My +{ + #include +}; + +MyOther\&.idl file: + +interface MyOther +{ +}; + +Embedded\&.idl + +enum E {one, two, three}; +.fi +.if n \{\ +.RE +.\} +.PP +\fI idlj My\&.idl \fRを実行して、Javaファイルの次のリストを生成します。インポート文とみなされる\fI#include\fRに定義されていたため、\fIMyOther\&.java\fRは生成されませんでした。ただし、本当の意味での\fI#include\fRで定義されていたため、\fIE\&.java\fRは生成されました。\fIEmbedded\&.idl\fRファイルが\fIMy\fRインタフェースのスコープ内にインクルードされているため、\fIMy\fRのスコープ内(つまり、\fIMyPackage\fR内)に生成されています。\fI\-emitAll\fRフラグを使用した場合、インクルードされたすべてのファイルにあるすべての型が発行されます。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\&./MyHolder\&.java +\&./MyHelper\&.java +\&./_MyStub\&.java +\&./MyPackage +\&./MyPackage/EHolder\&.java +\&./MyPackage/EHelper\&.java +\&./MyPackage/E\&.java +\&./My\&.java +.fi +.if n \{\ +.RE +.\} +.SS "パッケージの接頭辞の挿入" +.PP +ABCという名前の会社のために作業していて、次のようなIDLファイルを構築したとしましょう。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +Widgets\&.idl file: + +module Widgets +{ + interface W1 {\&.\&.\&.}; + interface W2 {\&.\&.\&.}; +}; +.fi +.if n \{\ +.RE +.\} +.PP +IDL\-to\-Javaコンパイラを介してこのファイルを実行した場合、W1およびW2に対するJavaバインディングは、\fIWidgets\fRパッケージ内に格納されます。業界の慣例によると、会社のパッケージは、\fIcom\&.\fRという名前のパッケージ内に置くことになっています。この慣例に従うには、パッケージ名を\fIcom\&.abc\&.Widgets\fRにする必要があります。このパッケージ接頭辞をWidgetsモジュールに付加するには、次のコマンドを実行します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +idlj \-pkgPrefix Widgets com\&.abc Widgets\&.idl +.fi +.if n \{\ +.RE +.\} +.PP +Widgets\&.idlをインクルードしているIDLファイルがある場合は、そのコマンドにも\fI\-pkgPrefix\fRフラグが必要です。このフラグを指定しないと、そのIDLファイルは、\fIcom\&.abc\&.Widgets\fRパッケージではなく、\fIWidgets\fRパッケージを検索することになります。 +.PP +接頭辞が必要なパッケージがいくつもある場合は、前述のidl\&.configファイルで接頭辞を指定するのが簡単です。パッケージ接頭辞の各行は、\fIPkgPrefix\&.=\fRの形式である必要があります。前述の例の行では、\fIPkgPrefix\&.Widgets=com\&.abc\fRになります。このオプションは、リポジトリIDには影響しません。 +.SS "コンパイル前のシンボルの定義" +.PP +コンパイル用のシンボルがIDLファイル内で定義されていない場合は、そのシンボルを定義する必要があります。これは、たとえば、バインディング内にデバッグ・コードを組み入れるときに使用します。コマンド\fIidlj \-d MYDEF My\&.idl \fRは、My\&.idl内に行\fI#define MYDEF\fRを配置した場合と同等になります。 +.SS "既存のバインディングの保持" +.PP +Javaバインディング・ファイルがすでに存在する場合は、\fI\-keep\fRフラグを指定すると、コンパイラによる上書きを回避できます。デフォルトでは、すでに存在するかどうかにかかわらず、すべてのファイルが生成されます。これらのファイルをカスタマイズした場合(ただし、それらの内容が正確であるとき以外はカスタマイズは避ける)、\fI\-keep\fRオプションは有用です。コマンド\fIidlj \-keep My\&.idl\fRは、すでに存在しないすべてのクライアント側バインディングを発行します。 +.SS "コンパイルの進捗状況の表示" +.PP +IDL\-to\-Javaコンパイラは、実行の各段階で状態メッセージを生成します。\fI\-v\fRオプションを使用して、\fIidlj \-v My\&.idl\fRのような冗長モードをアクティブ化します。 +.PP +デフォルトでは、コンパイラは冗長モードでは実行されません。 +.SS "バージョン情報の表示" +.PP +IDL\-to\-Javaコンパイラのビルド・バージョンを表示するには、コマンドライン\fIidlj \-version\fRで\fI\-version\fRオプションを指定します。 +.PP +バージョン情報は、コンパイラによって生成されたバインディング内にも書き込まれています。このオプションをコマンドラインに指定すると、それ以外のオプションを指定しても、すべて無視されます。 +.SH "オプション" +.PP +\-d \fIsymbol\fR +.RS 4 +このオプションは、IDLファイルに次のような行を追加した場合と等価です。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +#define \fIsymbol\fR +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\-demitAll +.RS 4 +\fI#include\fRファイル内で定義されているものも含めて、すべての型を発行します。 +.RE +.PP +\-fside +.RS 4 +発行するバインディングを定義します。\fIside\fRパラメータには、\fIclient\fR、\fIserver\fR、\fIserverTIE\fR、\fIall\fRまたは\fIallTIE\fRを指定できます。\fI\-fserverTIE\fRまたは\fI\-fallTIE\fRオプションを指定すると、委譲モデル・スケルトンが発行されます。フラグを指定しない場合、\fI\-fclient\fRにデフォルト設定されます。 +.RE +.PP +\-i \fIinclude\-path\fR +.RS 4 +デフォルトでは、インクルード・ファイルは現在のディレクトリから検索されます。このオプションを指定すると、他のディレクトリを追加できます。 +.RE +.PP +\-i \fIkeep\fR +.RS 4 +生成されるファイルがすでに存在している場合は、そのファイルが上書きされません。デフォルトでは、上書きされます。 +.RE +.PP +\-noWarn +.RS 4 +警告メッセージを表示しないようにします。 +.RE +.PP +\-oldImplBase +.RS 4 +1\&.4より前のJDK ORBと互換性のあるスケルトンを生成します。デフォルトでは、POA継承モデルのサーバー側バインディングが生成されます。このオプションを指定すると、\fIImplBase\fR継承モデルのクラスであるサーバー側バインディングが生成されるので、以前のリリースのJavaプログラミング言語との下位互換性が得られます。 +.RE +.PP +\-pkgPrefix \fItype\fR \fIprefix\fR +.RS 4 +\fItype\fRがファイル・スコープで検出された場合は、その型に対して生成されるすべてのファイルについて、生成されるJavaパッケージ名に\fIprefix\fRという接頭辞が付加されます。typeは、トップレベル・モジュールの単純名か、どのモジュールよりも外側で定義されたIDL型の単純名のどちらかです。 +.RE +.PP +\-pkgTranslate \fItype\fR \fIpackage\fR +.RS 4 +識別子の中にモジュール名typeが検出されると、生成されるJavaパッケージ内のすべてのファイルについて、識別子の中のその名前がpackageで置き換えられます。最初に\fIpkgPrefix\fRの変更が行われます。typeの値は、トップレベルのモジュールの単純名、またはすべてのモジュールの外部で定義されたIDL型の単純名で、完全なパッケージ名に正確に一致する必要があります。 +.sp +複数の変換が識別子に一致する場合、次の例に示すように、最も長い一致が選択されます。 +.sp +\fBコマンド\fR: +.sp +.if n \{\ +.RS 4 +.\} +.nf +pkgTranslate type pkg \-pkgTranslate type2\&.baz pkg2\&.fizz +.fi +.if n \{\ +.RE +.\} +\fB結果の変換\fR: +.sp +.if n \{\ +.RS 4 +.\} +.nf +type => pkg +type\&.ext => pkg\&.ext +type\&.baz => pkg2\&.fizz +type2\&.baz\&.pkg => pkg2\&.fizz\&.pkg +.fi +.if n \{\ +.RE +.\} +パッケージ名\fIorg\fR、\fIorg\fR\&.o\fImg\fR、または\fIorg\&.omg\fRのサブパッケージは、変換できません。これらのパッケージ名を変換しようとすると、互換性のないコードが生成され、\fI\-pkgTranslate\fRの後の最初の引数としてそれらのパッケージを使用すると、エラーとして扱われます。 +.RE +.PP +\-skeletonName \fIxxx%yyy\fR +.RS 4 +\fIxxx%yyy\fRが、スケルトンに名前を付けるパターンとして使用されます。デフォルトは次のとおりです。\fIPOA\fRベース・クラスの場合は\fI%POA\fR +(\fI\-fserver\fRまたは\fI\-fall\fR)、\fIoldImplBase\fRクラスの場合は\fI_%ImplBase\fR +(\-\fIoldImplBase\fR)および(\fI\-fserver\fRまたは\fI\-fall\fR))。 +.RE +.PP +\-td \fIdir\fR +.RS 4 +出力ディレクトリとして、現在のディレクトリではなく、\fIdir\fRが使用されます。 +.RE +.PP +\-tieName \fIxxx%yyy\fR +.RS 4 +パターンに従って、\fIxxx%yyy\fRを使用します。デフォルトは次のとおりです。\fIPOA\fRベース・クラスの場合は\fI%POA\fR +(\fI\-fserverTieまたは\-fallTie\fR)、\fIoldImplBase\fR +tieクラスの場合は\fI_%Tie\fR +(\-\fIoldImplBase\fR)および(\fI\-fserverTie\fRまたは\fI\-fallTie\fR))。 +.RE +.PP +\-nowarn、\-verbose +.RS 4 +リリース情報を表示して終了します。 +.RE +.PP +\-version +.RS 4 +リリース情報を表示して終了します。 +.RE +.SH "制限事項" +.PP +グローバル・スコープ内のエスケープされた識別子は、IDLプリミティブ型の\fIObject\fRまたは\fIValueBase\fRと同じ綴りにしないでください。これは、シンボル表がこれらの識別子でプリロードされているためです。これらの再定義を許可すると、元の定義が上書きされます。これは、おそらく恒久的な制約です。 +.PP +\fIfixed\fRというIDL型はサポートされていません。 +.SH "既知の問題" +.PP +グローバル識別子についてインポートが生成されません。予期されないローカル\fIimpl\fRオブジェクトを呼び出すと、例外を受け取ります。しかし、その原因は、\fIServerDelegate\fR +DSIコード内の\fINullPointerException\fRにあるようです。 +.br +'pl 8.5i +'bp diff --git a/jdk/src/linux/doc/man/ja/jar.1 b/jdk/src/linux/doc/man/ja/jar.1 index 0ce57f3ee56..dc1fc5869f7 100644 --- a/jdk/src/linux/doc/man/ja/jar.1 +++ b/jdk/src/linux/doc/man/ja/jar.1 @@ -1,601 +1,517 @@ -." Copyright (c) 1997, 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. -." -.TH jar 1 "07 May 2011" - -.LP -.SH "名前" -jar \- Java ARchive ツール -.LP -\f3jar\fP は複数のファイルを 1 つの JAR アーカイブファイルに結合します。 -.RS 3 -.TP 2 -o -形式 -.TP 2 -o -説明 -.TP 2 -o -オプション -.TP 2 -o -コマンド行引数ファイル -.TP 2 -o -例 -.TP 2 -o -関連項目 +'\" t +.\" Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. +.\" Title: jar +.\" Language: English +.\" Date: 2013年11月21日 +.\" SectDesc: 基本ツール +.\" Software: JDK 8 +.\" Arch: 汎用 +.\" +.\" 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. +.\" +.pl 99999 +.TH "jar" "1" "2013年11月21日" "JDK 8" "基本ツール" +.\" ----------------------------------------------------------------- +.\" * Define some portability stuff +.\" ----------------------------------------------------------------- +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.\" http://bugs.debian.org/507673 +.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" ----------------------------------------------------------------- +.\" * set default formatting +.\" ----------------------------------------------------------------- +.\" disable hyphenation +.nh +.\" disable justification (adjust text to left margin only) +.ad l +.\" ----------------------------------------------------------------- +.\" * MAIN CONTENT STARTS HERE * +.\" ----------------------------------------------------------------- +.SH "NAME" +jar \- Java Archive (JAR)ファイルを操作します。 +.SH "概要" +JARファイルの作成 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\fIjar c\fR[\fIefmMnv0\fR] [\fIentrypoint\fR] [\fIjarfile\fR] [\fImanifest\fR] [\fI\-C\fR \fIdir\fR] \fIfile\fR \&.\&.\&. [\-J\fIoption\fR \&.\&.\&.] [@\fIarg\-file\fR \&.\&.\&.] +.fi +.if n \{\ .RE - -.LP -.SH "形式" -.LP -.RS 3 -.TP 3 -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 ファイルの更新 -\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 ファイルの抽出 -\f4jar x\fP\f2[vf] [\fP\f2jarfile\fP\f2] [\fP\f2inputfiles\fP\f2] [\-J\fP\f2option\fP\f2]\fP -.TP 3 -JAR ファイルの内容の表形式による一覧表示 -\f4jar t\fP\f2[vf] [\fP\f2jarfile\fP\f2] [\fP\f2inputfiles\fP\f2] [\-J\fP\f2option\fP\f2]\fP -.TP 3 -JAR ファイルへのインデックスの追加 -\f4jar i\fP \f2jarfile\fP \f2[\-J\fP\f2option\fP\f2]\fP +.\} +JARファイルの更新 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\fIjar u\fR[\fIefmMnv0\fR] [\fIentrypoint\fR] [\fIjarfile\fR] [\fImanifest\fR] [\fI\-C\fR \fIdir\fR] \fIfile\fR \&.\&.\&. [\-J\fIoption\fR \&.\&.\&.] [@\fIarg\-file\fR \&.\&.\&.] +.fi +.if n \{\ .RE - -.LP -.LP -説明 -.LP -.RS 3 -.TP 3 -cuxtiv0Mmfe -\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 の場合)。 -.TP 3 -inputfiles -\f2jarfile\fP に結合されるか (c および u の場合)、\f2jarfile\fP から抽出 (x の場合) または一覧表示 (t の場合) される、空白で区切られたファイルまたはディレクトリ。すべてのディレクトリは再帰的に処理されます。このファイルは、オプション \f20\fP (ゼロ) を使用しないかぎり圧縮されます。 -.TP 3 -manifest -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 の出現順序と一致する必要があります。 -.TP 3 -\-C\ dir -これに続く \f2inputfiles\fP 引数を処理する間、ディレクトリを \f2dir\fP へ一時的に変更します。 \f2\-C\ \fP\f2\-\ dir\fP \f2inputfiles\fP のセットは複数使用できます。 -.TP 3 -\-Joption -Java 実行環境へ渡されるオプション。\f2\-J\fP と \f2option\fP の間には空白を入れないでください。 +.\} +JARファイルの抽出 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\fIjar\fR \fIx\fR[\fIvf\fR] [\fIjarfile\fR] \fIfile\fR \&.\&.\&. [\-J\fIoption\fR \&.\&.\&.] [@\fIarg\-file\fR \&.\&.\&.] +.fi +.if n \{\ .RE - -.LP +.\} +JARファイルのコンテンツのリスト +.sp +.if n \{\ +.RS 4 +.\} +.nf +\fIjar\fR \fIt\fR[\fIvf\fR] [\fIjarfile\fR] \fIfile\fR \&.\&.\&. [\-J\fIoption\fR \&.\&.\&.] [@\fIarg\-file\fR \&.\&.\&.] +.fi +.if n \{\ +.RE +.\} +JARファイルへの索引の追加 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\fIjar\fR \fIi\fR \fIjarfile\fR [\-J\fIoption\fR \&.\&.\&.] [@\fIarg\-file\fR \&.\&.\&.] +.fi +.if n \{\ +.RE +.\} .SH "説明" -.LP -\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 アーカイブは、圧縮されているかどうかにかかわらず、クラスパスのエントリとして使用できます。 -.LP -複数のファイルを JAR ファイルへ結合する一般的な使用法は次のとおりです。 -.LP -.nf -\f3 -.fl -% jar cf myFile.jar *.class -.fl -\fP -.fi - -.LP -この例では、現在のディレクトリにあるクラス (.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」を参照してください。 -.LP -既存のマニフェストファイル内に格納された \f2name\ :\ value\fP ペアを JAR ファイルに含める必要がある場合には、そのファイルを次のように \f2\-m\fP オプションを使って指定します。 -.LP -.nf -\f3 -.fl -% jar cmf myManifestFile myFile.jar *.class -.fl -\fP -.fi - -.LP -既存のマニフェストファイルは改行文字で終わっている必要があります。マニフェストファイルが改行文字で終わっていないと、\f3jar\fP はその最終行を解析しません。 -.br - -.LP -.br - -.LP -\f3注:\ \fPコマンド行に \f2cmf\fP ではなく \f2cfm\fP が指定された jar コマンド (m と \-f オプションの順番を逆にする) の場合、\f3jar\fP コマンド行にまず JAR アーカイブの名前を指定し、続いてマニフェストファイルの名前を指定する必要があります。 次に例を示します。 -.nf -\f3 -.fl -% jar cfm myFile.jar myManifestFile *.class -.fl -\fP -.fi - -.LP -マニフェストは、RFC822 ASCII 形式で規定されたテキスト形式であるため、マニフェストファイルの内容を簡単に表示および編集できます。 -.LP -JAR ファイルからファイルを抽出する場合は、 \f2x\fP を使用します。 -.LP -.nf -\f3 -.fl -% jar xf myFile.jar -.fl -\fP -.fi - -.LP -.LP -jar ファイルから個別のファイルを抽出する場合は、そのファイル名を指定します。 -.LP -.nf -\f3 -.fl -% jar xf myFile.jar foo bar -.fl -\fP -.fi - -.LP -.LP -JDK のバージョン 1.3 以降から、\f2jar\fP ユーティリティーで -.na -\f2JarIndex\fP @ -.fi -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 -.fl -% jar i main.jar -.fl -\fP -.fi - -.LP -.LP -この例では、 \f2INDEX.LIST\fP ファイルが \f2main.jar\fP の \f2META\-INF\fP ディレクトリ内に挿入されます。 -.br -.br -このファイルに格納されている情報を使用して、アプリケーションのクラスローダーは、効率的にクラスをロードします。インデックスファイルに位置情報を格納する方法の詳細は、「JarIndex 仕様」を参照してください。 -.br -.br -ディレクトリをコピーするには、まず \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) -.fl -\fP -.fi - -.LP -.LP -\f2jar\fP を使用して JAR ファイルや JAR マニフェストファイルを操作するサンプルコマンドを確認したい場合は、後述の「例」を参照してください。また、「 -.na -\f2Java Tutorial\fP @ -.fi -http://download.oracle.com/javase/tutorial/deployment/jar」の JAR コースも参照してください。 -.LP -.SH "オプション" -.LP -.RS 3 -.TP 3 -c -f が指定された場合は \f2jarfile\fP という名前の \f2新しい\fP アーカイブファイルを \f2作成し、\fP f と \f2jarfile\fP が省略された場合は標準出力に情報を出力します。\f2inputfiles\fP で指定されたファイルとディレクトリを、このアーカイブに追加します。 -.TP 3 -u -f が指定されている場合に、既存ファイル \f2jarfile\fP を \f2更新する目的で、\fP \f2inputfiles\fP に指定されたファイルやディレクトリを追加します。次に例を示します。 -.nf -\f3 -.fl -jar uf foo.jar foo.class -.fl -\fP -.fi -上のコマンドは、ファイル \f2foo.class\fP を既存の JAR ファイル \f2foo.jar\fP に追加します。次の例に示すように、\f2\-u\fP オプションは、マニフェストエントリも更新できます。 -.nf -\f3 -.fl -jar umf manifest foo.jar -.fl -\fP -.fi -\f2foo.jar\fP マニフェストをマニフェスト内の \f2name:value\fP ペアで更新します。 -.TP 3 -x -f が指定された場合は \f2jarfile\fP \f2から\fP 、 \f2f\fP と \f2jarfile\fP が省略された場合は標準入力から、ファイルやディレクトリを抽出します。\f2inputfiles\fP が指定されている場合は、その指定したファイルとディレクトリだけが抽出されます。指定されていなければ、すべてのファイルとディレクトリが抽出されます。抽出されたファイルの日時は、アーカイブ内で設定されたものです。 -.TP 3 -t -f が指定された場合は \f2jarfile\fP \f2から\fP 、 \f2f\fP と \f2jarfile\fP が省略された場合は標準入力から、目次を表示します。\f2inputfiles\fP が指定されている場合は、その指定したファイルとディレクトリだけが一覧表示されます。指定されていなければ、すべてのファイルとディレクトリが一覧表示されます。 -.TP 3 -i -指定された \f2jarfile\fP と、それに依存する JAR ファイルについて、インデックス情報を生成します。たとえば、 -.nf -\f3 -.fl -jar i foo.jar -.fl -\fP -.fi -.LP -上のコマンドは、\f2foo.jar\fP 内に \f2INDEX.LIST\fP ファイルを生成します。 このファイルには、\f2foo.jar\fP と、\f2foo.jar\fP の \f2Class\-Path\fP 属性に指定されたすべての JAR ファイルに入っている各パッケージの位置情報が書き込まれています。インデックスの例を参照してください。 -.TP 3 -f -次の各処理の対象となるファイル \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 による圧縮を使用せずに、保存します。 -.TP 3 -M -マニフェストファイルエントリを作成しません (c および u の場合)。または、マニフェストファイルエントリが存在する場合にそれを削除します (u の場合)。 -.TP 3 -m -\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 の入力順序と同じ順序で記述する必要があります。たとえば、次のようにして使います。 -.nf -\f3 -.fl -jar cmf myManifestFile myFile.jar *.class -.fl -\fP -.fi -デフォルトのマニフェストには含まれないマニフェストに、特別な目的の \f2name\ :\ value\fP の属性ペアを追加できます。たとえば、ベンダー情報、バージョン情報、パッケージシーリング、または JAR にバンドルされたアプリケーションを実行するための属性を追加できます。「Java Tutorial」の「 -.na -\f2JAR Files\fP @ -.fi -http://download.oracle.com/javase/tutorial/deployment/jar/」コースを参照し、 \f4\-m\fP オプションの使用例を確認してください。 -.TP 3 -e -実行可能 JAR ファイル内にバンドルされたスタンドアロンアプリケーションのアプリケーションエントリポイントとして、\f2entrypoint\fP を設定します。このオプションを使用すると、マニフェストファイル内の \f2Main\-Class\fP 属性値が作成または上書きされます。このオプションは、JAR ファイルの作成中または更新中に使用できます。このオプションを使えば、マニフェストファイルを編集または作成することなしに、アプリケーションのエントリポイントを指定できます。 -.br -.br -たとえば、次のコマンドでは \f2Main.jar\fP が作成されますが、その際、マニフェスト内の \f2Main\-Class\fP 属性値は \f2Main\fP に設定されます。 -.nf -\f3 -.fl -jar cfe Main.jar Main Main.class -.fl -\fP -.fi -.LP -次のコマンドを実行すると java ランタイムから直接このアプリケーションを起動できます。 -.nf -\f3 -.fl -java \-jar Main.jar -.fl -\fP -.fi -あるパッケージ内にエントリポイントのクラス名が含まれている場合、ドット (「.」) 、スラッシュ (「/」) のいずれかの文字をその区切り文字として使用できます。たとえば、 \f2Main.class\fP が \f2foo\fP という名前のパッケージに含まれている場合、エントリポイントは次のようにして指定できます。 -.nf -\f3 -.fl -jar \-cfe Main.jar foo/Main foo/Main.class -.fl -\fP -.fi -または -.nf -\f3 -.fl -jar \-cfe Main.jar foo.Main foo/Main.class -.fl -\fP -.fi -\f3注:\ \fP \f2\-m\fP オプションと \f2\-e\fP オプションの両方を同時に指定した場合、指定したマニフェストにも \f2Main\-Class\fP 属性が含まれていれば、 \f2Main.class\fP の指定があいまいになってエラーや発生し、JAR の作成処理や更新処理が異常終了します。 -.LP -.TP 3 -\-C \ dir -\f2jar\fP コマンドの実行中に後続の \f2inputfiles\fP 引数を処理するときに、一時的にディレクトリを変更します (cd \f2dir\fP)。この処理は、UNIX の \f2tar\fP ユーティリティーの \f2\-C\fP オプションの機能に類似しています。 -.br -.br -たとえば、次のコマンドは、\f2classes\fP ディレクトリに移動し、そのディレクトリから \f2bar.class\fP を \f2foo.jar\fP に追加します。 -.nf -\f3 -.fl -jar uf foo.jar \-C classes bar.class -.fl -\fP -.fi -次のコマンドでは、\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 -.fl -\fP -.fi -\f2classes\fP にファイル \f2bar1\fP と \f2bar2\fP が格納されている場合に、 \f2jar tf foo.jar\fP 使用したときの JAR ファイルの中身を、次に示します。 -.nf -\f3 -.fl -META\-INF/ -.fl -META\-INF/MANIFEST.MF -.fl -bar1 -.fl -bar2 -.fl -xyz.class -.fl -\fP -.fi -.LP -.TP 3 -\-Joption -Java 実行環境に \f2option\fP を渡します。 \f2option\fP には、「Java アプリケーション起動ツール」のリファレンスページに記載されているオプションを 1 つ指定します。たとえば、 \f4\-J\-Xmx48M\fP と指定すると、最大メモリーが 48M バイトに設定されます。\f2\-J\fP を使って背後の実行環境にオプションを渡すことはよく行われています。 +.PP +\fIjar\fRコマンドは、ZIPおよびZLIB圧縮形式に基づく汎用のアーカイブおよび圧縮ツールです。ただし、\fIjar\fRコマンドは、主にいくつかのJavaアプレットやアプリケーションを単一のアーカイブにパッケージ化するように設計されました。アプレットやアプリケーションのコンポーネント(ファイル、イメージ、およびサウンド)が1つのアーカイブに結合されていると、Javaエージェント(ブラウザなど)は、それらのコンポーネントを1回のHTTPトランザクションでダウンロードすることができ、コンポーネントごとに新しい接続が不要になります。これにより、ダウンロード時間が大幅に短縮されます。また、\fIjar\fRコマンドはファイルの圧縮も行うため、ダウンロード時間がさらに短縮されます。また、\fIjar\fRコマンドによって、ファイル内の個々のエントリにアプレット作成者による署名を書き込めるため、配布元の認証が可能になります。JARファイルは、圧縮されているかどうかにかかわらず、クラス・パスのエントリとして使用できます。 +.PP +\fIjar\fRコマンドの構文は、\fItar\fRコマンドの構文に似ています。必須の\fI操作の引数\fRの1つで定義された複数の操作モードがあります。他の引数は、操作の動作を変更する\fIオプション\fR、または操作を実行するために必要な\fIオペランド\fRを使用します。 +.SH "操作の引数" +.PP +\fIjar\fRコマンドを使用する場合は、次の操作の引数のいずれかを指定して実行される操作を選択する必要があります。コマンドラインで他の1文字のオプションと混在させることができますが、通常、操作の引数は指定される最初の引数です。 +.PP +c +.RS 4 +新しいJARアーカイブを作成します。 .RE - -.LP -.SH "コマンド行引数ファイル" -.LP -jar のコマンド行を短くしたり簡潔にしたりするために、jar コマンドに対する引数 (\-J オプションを除く) を含む 1 つ以上の \f2ファイルを\fP 指定することが \f2できます\fP 。これにより、任意の長さの jar コマンドを作成でき、オペレーティングシステムによるコマンド行の制限から解放されます。 -.LP -引数ファイルにはオプションとファイル名を含めることができます。ファイル内の各引数は、スペースまたは改行で区切ります。引数ファイル内のファイル名は、現在のディレクトリから見た相対パスになります。引数ファイルの位置から見た相対パスではありません。ワイルドカード (*) は、通常ならばオペレーティングシステムシェルによってあらゆる文字に解釈されますが、この場合はそのようには解釈されません。引数ファイル内の引数で \f2@\fP 文字を使用して、複数のファイルを再帰的に解釈することはサポートされていません。また、\f2\-J\fP オプションもサポートされていません。このオプションは起動ツールに渡されますが、起動ツールでは引数ファイルをサポートしていないからです。 -.LP -.LP -\f2jar\fP を実行するときに、各引数ファイルのパスとファイル名の先頭に \f2@\fP 文字を付けて渡します。 \f2jar\fP は、\f2@\fP 文字で始まる引数を見つけると、そのファイルの内容を展開して引数リストに挿入します。 +.PP +i +.RS 4 +JARアーカイブの索引情報を生成します。 +.RE +.PP +t +.RS 4 +JARアーカイブのコンテンツをリストします。 +.RE +.PP +u +.RS 4 +JARアーカイブを更新します。 +.RE +.PP +x +.RS 4 +JARアーカイブからファイルを抽出します。 +.RE +.SH "オプション" +.PP +次のオプションを使用して、JARファイルを作成、更新、抽出または表示する方法をカスタマイズします。 +.PP +e +.RS 4 +\fIentrypoint\fRオペランドで指定されるクラスを、実行可能JARファイルにバンドルされるスタンドアロンJavaアプリケーションのエントリ・ポイントに設定します。このオプションを使用すると、マニフェスト・ファイル内の\fIMain\-Class\fR属性値が作成またはオーバーライドされます。\fIe\fRオプションは、JARファイルの作成時(\fIc\fR)または更新時(\fIu\fR)に使用できます。 +.sp +たとえば、次のコマンドでは、\fIMain\&.jar\fRアーカイブが\fIMain\&.class\fRファイルとともに作成されますが、その際、マニフェスト内の\fIMain\-Class\fR属性値は\fIMain\fRに設定されます。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +jar cfe Main\&.jar Main Main\&.class +.fi +.if n \{\ +.RE +.\} +Java Runtime Environment (JRE)は、次のコマンドを実行して、このアプリケーションを直接呼び出すことができます。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +java \-jar Main\&.jar +.fi +.if n \{\ +.RE +.\} +あるパッケージ内にエントリ・ポイントのクラス名が含まれている場合、ドット(\&.)またはスラッシュ(/)のいずれかを区切り文字として使用できます。たとえば、\fIMain\&.class\fRが\fImydir\fRという名前のパッケージに含まれている場合、エントリ・ポイントは次のいずれかの方法で指定できます。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +jar \-cfe Main\&.jar mydir/Main mydir/Main\&.class +jar \-cfe Main\&.jar mydir\&.Main mydir/Main\&.class +.fi +.if n \{\ +.RE +.\} +.if n \{\ +.sp +.\} +.RS 4 +.it 1 an-trap +.nr an-no-space-flag 1 +.nr an-break-flag 1 .br +.ps +1 +\fBNote\fR +.ps -1 .br -次の例で、 \f2classes.list\fP には、 \f2find\fP コマンドによって出力されたファイルの名前が格納されます。 -.LP +.TS +allbox tab(:); +l. +T{ +注意 +特定のマニフェストにも\fIMain\-Class\fR属性が含まれている場合に\fIm\fRオプションと\fIe\fRオプションの両方を同時に指定すると、\fIMain\-Class\fRの指定があいまいになります。このあいまいさによってエラーが発生し、\fIjar\fRコマンドの作成や更新の操作が終了します。 +T} +.TE +.sp 1 +.sp .5v +.RE +.RE +.PP +f +.RS 4 +\fIjarfile\fRオペランドで指定されたファイルを、作成(\fIc\fR)、更新(\fIu\fR)、抽出(\fIx\fR)または表示(\fIt\fR)されるJARファイルの名前に設定します。\fIf\fRオプションおよび\fIjarfile\fRオペランドを省略すると、\fIjar\fRコマンドに、\fIstdin\fRからのJARファイル名を受け入れるか(\fIx\fRおよび\fIt\fRの場合)、JARファイルを\fIstdout\fRに送信すること(\fIc\fRおよび\fIu\fRの場合)が指示されます。 +.RE +.PP +m +.RS 4 +(\fIMETA\-INF/MANIFEST\&.MF\fRのアーカイブにある) +\fIjar\fRコマンドのマニフェスト・ファイルの\fImanifest\fRオペランドで指定されたファイルから、属性の名前と値のペアを含めます。\fIjar\fRコマンドは、同じ名前のエントリがすでに存在する場合を除き、属性の名前と値をJARファイルに追加します。同じ名前のエントリがすでに存在する場合、\fIjar\fRコマンドは属性の値を更新します。\fIm\fRオプションは、JARファイルの作成時(\fIc\fR)または更新時(\fIu\fR)に使用できます。 +.sp +デフォルトのマニフェスト・ファイルには含まれないマニフェストに、特別な目的の名前\-値の属性ペアを追加できます。たとえば、ベンダー情報、リリース情報、パッケージ・シーリングを指定する属性、またはJARにバンドルされたアプリケーションを実行可能にするための属性を追加できます。\fIm\fRオプションの使用例は、http://docs\&.oracle\&.com/javase/tutorial/deployment/jar/index\&.htmlにある +プログラムのパッケージ化に関する項を参照してください。 +.RE +.PP +M +.RS 4 +マニフェスト・ファイル・エントリを作成しない(\fIc\fRおよび\fIu\fRの場合)か、またはマニフェスト・ファイル・エントリが存在する場合は削除します(\fIu\fRの場合)。\fIM\fRオプションは、JARファイルの作成時(\fIc\fR)または更新時(\fIu\fR)に使用できます。 +.RE +.PP +n +.RS 4 +JARファイルの作成(\fIc\fR)時に、このオプションは、コンテンツがpack200(1)コマンドのパックおよびアンパック操作の影響を受けないようにアーカイブを正規化します。この正規化を使用しない場合、署名付きJARの署名は無効になります。 +.RE +.PP +v +.RS 4 +詳細な出力を標準出力に生成します。例を参照してください。 +.RE +.PP +0 +.RS 4 +(ゼロ) ZIP圧縮を使用しないでJARファイルを作成(\fIc\fR)または更新(\fIu\fR)します。 +.RE +.PP +\-C \fIdir\fR +.RS 4 +JARファイルの作成(\fIc\fR)または更新(\fIu\fR)時に、このオプションは\fIfile\fRオペランドで指定されたファイルの処理中にディレクトリを一時的に変更します。この操作は、UNIX +\fItar\fRユーティリティの\fI\-C\fRオプションと同様になることを目的としています。たとえば、次のコマンドによって、\fIclasses\fRディレクトリに変更され、そのディレクトリから\fImy\&.jar\fRに\fIBar\&.class\fRファイルが追加されます。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -% find \fP\f3.\fP \-name '*.class' \-print > classes.list -.fl +jar uf my\&.jar \-C classes Bar\&.class .fi - -.LP -.LP -次に、引数ファイル構文を使用して \f2classes.list\fP を jar に渡すことで、 \f2そのリスト\fP に対して \f2jar\fP コマンドを実行できます。 -.LP +.if n \{\ +.RE +.\} +次のコマンドでは、\fIclasses\fRディレクトリに移動し、classesディレクトリ内のすべてのファイルを\fImy\&.jar\fRに追加します(JARファイルには\fIclasses\fRディレクトリを作成しません)。次に元のディレクトリに戻ってから、\fIbin\fRディレクトリに移動し、\fIXyz\&.class\fRを\fImy\&.jar\fRに追加します。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -% jar cf my.jar @classes.list -.fl -\fP +jar uf my\&.jar \-C classes \&. \-C bin Xyz\&.class .fi - -.LP -引数ファイルはパスを指定できますが、相対パスが記述された引数ファイル内のすべてのファイル名は、渡されたパスに対して相対的ではなく、現在の作業ディレクトリに相対的となります。次はその例です。 +.if n \{\ +.RE +.\} +\fIclasses\fRに\fIbar1\fRファイルと\fIbar2\fRファイルが含まれている場合、前述のコマンドを実行した後、JARファイルには次のものが含まれます。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -% jar @path1/classes.list -.fl -\fP -.fi - -.LP -.LP - -.LP -.SH "例" -.LP -特定のディレクトリ内のすべてのファイルをアーカイブに追加する (そのアーカイブがすでに存在する場合は、その内容を上書きする) には、次のようにします。\f2\-v\fP オプションを使用して情報を詳細に列挙するように指定すると、サイズや最新の更新日など、アーカイブ内のファイルについての詳細情報が表示されます。 -.nf -\f3 -.fl -% ls -.fl -1.au Animator.class monkey.jpg -.fl -2.au Wave.class spacemusic.au -.fl -3.au at_work.gif -.fl - -.fl -% jar cvf bundle.jar * -.fl -added manifest -.fl -adding: 1.au(in = 2324) (out= 67)(deflated 97%) -.fl -adding: 2.au(in = 6970) (out= 90)(deflated 98%) -.fl -adding: 3.au(in = 11616) (out= 108)(deflated 99%) -.fl -adding: Animator.class(in = 2266) (out= 66)(deflated 97%) -.fl -adding: Wave.class(in = 3778) (out= 81)(deflated 97%) -.fl -adding: at_work.gif(in = 6621) (out= 89)(deflated 98%) -.fl -adding: monkey.jpg(in = 7667) (out= 91)(deflated 98%) -.fl -adding: spacemusic.au(in = 3079) (out= 73)(deflated 97%) -.fl -\fP -.fi - -.LP -すでに画像、オーディオファイル、およびクラス用のサブディレクトリに分けている場合は、これらを単一の JAR ファイルに結合できます。 -.nf -\f3 -.fl -% ls \-F -.fl -audio/ classes/ images/ -.fl - -.fl -% jar cvf bundle.jar audio classes images -.fl -added manifest -.fl -adding: audio/(in = 0) (out= 0)(stored 0%) -.fl -adding: audio/1.au(in = 2324) (out= 67)(deflated 97%) -.fl -adding: audio/2.au(in = 6970) (out= 90)(deflated 98%) -.fl -adding: audio/3.au(in = 11616) (out= 108)(deflated 99%) -.fl -adding: audio/spacemusic.au(in = 3079) (out= 73)(deflated 97%) -.fl -adding: classes/(in = 0) (out= 0)(stored 0%) -.fl -adding: classes/Animator.class(in = 2266) (out= 66)(deflated 97%) -.fl -adding: classes/Wave.class(in = 3778) (out= 81)(deflated 97%) -.fl -adding: images/(in = 0) (out= 0)(stored 0%) -.fl -adding: images/monkey.jpg(in = 7667) (out= 91)(deflated 98%) -.fl -adding: images/at_work.gif(in = 6621) (out= 89)(deflated 98%) -.fl - -.fl -% ls \-F -.fl -audio/ bundle.jar classes/ images/ -.fl -\fP -.fi - -.LP -JAR ファイルのエントリ名を表示するには、「\f2t\fP」オプションを使用します。 -.nf -\f3 -.fl -% jar tf bundle.jar -.fl +% \fIjar tf my\&.jar\fR META\-INF/ -.fl -META\-INF/MANIFEST.MF -.fl -audio/1.au -.fl -audio/2.au -.fl -audio/3.au -.fl -audio/spacemusic.au -.fl -classes/Animator.class -.fl -classes/Wave.class -.fl -images/monkey.jpg -.fl -images/at_work.gif -.fl -\fP +META\-INF/MANIFEST\&.MF +bar1 +bar2 +Xyz\&.class .fi - -.LP -.LP -クラスロードを高速にするためにインデックスファイルを JAR ファイルに追加するには、「\f2i\fP」オプションを使用します。 -.br -.br -例: -.br - -.LP -たとえば、株取引アプリケーションの内部依存しているクラスを、\f2main.jar\fP、\f2buy.jar\fP、および \f2sell.jar\fP という 3 つの JAR ファイルに分割したとします。 -.br - -.LP -.br - -.LP -\f2main.jar\fP のマニフェストの \f2Class\-path\fP 属性に次のように指定した場合、 +.if n \{\ +.RE +.\} +.RE +.PP +\-J\fIoption\fR +.RS 4 +指定したJVMオプションを、JREがJARファイルを実行する際に使用するように設定します。JVMオプションは、java(1)コマンドのリファレンス・ページで説明されています。たとえば、\fI\-J\-Xms48m\fRと指定すると、スタートアップ・メモリーは48MBに設定されます。 +.RE +.SH "オペランド" +.PP +次のオペランドは、\fIjar\fRコマンドで認識されます。 +.PP +\fIfile\fR +.RS 4 +JARファイルの作成(\fIc\fR)または更新(\fIu\fR)時に、\fIfile\fRオペランドは、アーカイブに追加する必要のあるファイルまたはディレクトリのパスと名前を定義します。JARファイルの抽出(\fIx\fR)またはコンテンツのリスト(\fIt\fR)時に、\fIfile\fRオペランドは抽出またはリストするファイルのパスと名前を定義します。少なくとも1つの有効なファイルまたはディレクトリを指定する必要があります。複数の\fIfile\fRオペランドを空白で区切ります。\fIentrypoint\fR、\fIjarfile\fRまたは\fImanifest\fRオペランドが使用される場合は、その後に\fIfile\fRオペランドを指定する必要があります。 +.RE +.PP +\fIentrypoint\fR +.RS 4 +JARファイルの作成(\fIc\fR)または更新(\fIu\fR)時に、\fIentrypoint\fRオペランドは、実行可能JARファイルにバンドルされているスタンドアロンJavaアプリケーションのエントリ・ポイントとなるクラスの名前を定義します。\fIe\fRオプションが存在する場合は\fIentrypoint\fRオペランドを指定する必要があります。 +.RE +.PP +\fIjarfile\fR +.RS 4 +作成(\fIc\fR)、更新(\fIu\fR)、抽出(\fIx\fR)または表示(\fIt\fR)するファイルの名前を定義します。\fIf\fRオプションが存在する場合は\fIjarfile\fRオペランドを指定する必要があります。\fIf\fRオプションおよび\fIjarfile\fRオペランドを省略すると、\fIjar\fRコマンドに、\fIstdin\fRからのJARファイル名を受け入れるか(\fIx\fRおよび\fIt\fRの場合)、JARファイルを\fIstdout\fRに送信すること(\fIc\fRおよび\fIu\fRの場合)が指示されます。 +.sp +JARファイルを索引付け(\fIi\fR)する場合は、\fIf\fRオプションを指定しないで\fIjarfile\fRオペランドを指定します。 +.RE +.PP +\fImanifest\fR +.RS 4 +JARファイルの作成(\fIc\fR)または更新(\fIu\fR)時に、\fImanifest\fRオペランドはJARファイルの\fIMANIFEST\&.MF\fRに含める属性の名前と値を持つ既存のマニフェスト・ファイルを定義します。\fIf\fRオプションが存在する場合は\fImanifest\fRオペランドを指定する必要があります。 +.RE +.PP +\fI@arg\-file\fR +.RS 4 +\fIjar\fRコマンドを短縮または簡素化するには、別のテキスト・ファイル内の引数を指定し、接頭辞としてアットマーク(@)を付けて\fIjar\fRコマンドに渡すことができます。\fIjar\fRコマンドは、アットマーク文字で始まる引数を見つけると、そのファイルの内容を展開して引数リストに挿入します。 +.sp +引数ファイルには、\fIjar\fRコマンドのオプションと引数(引数ファイルをサポートしない起動ツールに渡される\fI\-J\fRオプションを除く)を含めることができます。ファイル内の引数は、空白または改行文字で区切ることができます。引数ファイル内のファイル名は、\fIjar\fRコマンドを実行できる現在のディレクトリに対して相対的であり、引数ファイルの場所に対しては相対的ではありません。通常はオペレーティング・システム・シェルによって展開されるアスタリスク(*)などのワイルドカードは展開されません。 +.sp +次の例は、\fIfind\fRコマンドによる現在のディレクトリ出力からのファイル名で\fIclasses\&.list\fRファイルを作成する方法を示します。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -Class\-Path: buy.jar sell.jar -.fl -\fP +find \&. \-name \*(Aq*\&.class\*(Aq \-print > classes\&.list .fi - -.LP -\f2\-i\fP オプションを使用すれば、アプリケーションのクラスの 読み込みを高速化できます。 +.if n \{\ +.RE +.\} +\fIjar\fRコマンドを実行し、\fI@arg\-file\fR構文を使用して\fIclasses\&.list\fRファイルを渡すことができます。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -% jar i main.jar -.fl -\fP +jar cf my\&.jar @classes\&.list .fi +.if n \{\ +.RE +.\} +引数ファイルはパスを指定できますが、相対パスが記述された引数ファイル内のすべてのファイル名は、渡されたパスに対して相対的ではなく、\fIjar\fRコマンドの現在の作業ディレクトリに相対的となります。たとえば、次のようになります。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +jar @dir/classes\&.list +.fi +.if n \{\ +.RE +.\} +.RE +.SH "注意" +.PP +\fIe\fR、\fIf\fRおよび\fIm\fRオプションは、\fIentrypoint\fR、\fIjarfile\fRおよび\fImanifest\fRオペランドと同じ順序でコマンドラインに出現する必要があります。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +jar cmef myManifestFile MyMainClass myFile\&.jar *\&.class +.fi +.if n \{\ +.RE +.\} +.SH "例" +.PP +\fBExample 1\fR, 冗長な出力による現在のディレクトリからのすべてのファイルの追加 +.RS 4 +.sp +.if n \{\ +.RS 4 +.\} +.nf +% ls +1\&.au Animator\&.class monkey\&.jpg +2\&.au Wave\&.class spacemusic\&.au +3\&.au at_work\&.gif -.LP -\f2INDEX.LIST\fP ファイルが \f2META\-INF\fP ディレクトリに挿入されます。この結果、アプリケーションのクラスローダーによってクラスまたはリソースの検索が行われるときに、適切な jar ファイルがダウンロードされます。 +% jar cvf bundle\&.jar * +added manifest +adding: 1\&.au(in = 2324) (out= 67)(deflated 97%) +adding: 2\&.au(in = 6970) (out= 90)(deflated 98%) +adding: 3\&.au(in = 11616) (out= 108)(deflated 99%) +adding: Animator\&.class(in = 2266) (out= 66)(deflated 97%) +adding: Wave\&.class(in = 3778) (out= 81)(deflated 97%) +adding: at_work\&.gif(in = 6621) (out= 89)(deflated 98%) +adding: monkey\&.jpg(in = 7667) (out= 91)(deflated 98%) +adding: spacemusic\&.au(in = 3079) (out= 73)(deflated 97%) +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\fBExample 2\fR, サブディレクトリからのファイルの追加 +.RS 4 +.sp +.if n \{\ +.RS 4 +.\} +.nf +% ls \-F +audio/ classes/ images/ +% jar cvf bundle\&.jar audio classes images +added manifest +adding: audio/(in = 0) (out= 0)(stored 0%) +adding: audio/1\&.au(in = 2324) (out= 67)(deflated 97%) +adding: audio/2\&.au(in = 6970) (out= 90)(deflated 98%) +adding: audio/3\&.au(in = 11616) (out= 108)(deflated 99%) +adding: audio/spacemusic\&.au(in = 3079) (out= 73)(deflated 97%) +adding: classes/(in = 0) (out= 0)(stored 0%) +adding: classes/Animator\&.class(in = 2266) (out= 66)(deflated 97%) +adding: classes/Wave\&.class(in = 3778) (out= 81)(deflated 97%) +adding: images/(in = 0) (out= 0)(stored 0%) +adding: images/monkey\&.jpg(in = 7667) (out= 91)(deflated 98%) +adding: images/at_work\&.gif(in = 6621) (out= 89)(deflated 98%) + +% ls \-F +audio/ bundle\&.jar classes/ images/ +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\fBExample 3\fR, JARのコンテンツのリスト +.RS 4 +.sp +.if n \{\ +.RS 4 +.\} +.nf +% jar tf bundle\&.jar +.fi +.if n \{\ +.RE +.\} +.sp +.if n \{\ +.RS 4 +.\} +.nf +META\-INF/ +META\-INF/MANIFEST\&.MF +audio/1\&.au +audio/2\&.au +audio/3\&.au +audio/spacemusic\&.au +classes/Animator\&.class +classes/Wave\&.class +images/monkey\&.jpg +images/at_work\&.gif +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\fBExample 4\fR, 索引の追加 +.RS 4 +株式取引のアプリケーションの相互依存クラスを、\fImain\&.jar\fR、\fIbuy\&.jar\fRおよび\fIsell\&.jar\fRの3つのJARファイルに分割する場合、\fIi\fRオプションを使用します。\fImain\&.jar\fRマニフェスト内の\fIClass\-Path\fR属性を指定する場合、\fIi\fRオプションを使用して、アプリケーションのクラス・ロードの速度を向上できます。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +Class\-Path: buy\&.jar sell\&.jar +jar i main\&.jar +.fi +.if n \{\ +.RE +.\} +\fIINDEX\&.LIST\fRファイルが\fIMETA\-INF\fRディレクトリに挿入されます。これにより、アプリケーションのクラス・ローダーによってクラスまたはリソースの検索が行われるときに、指定したJARファイルがダウンロードされるようになります。 +.sp +アプリケーションのクラス・ローダーは、このファイルに格納されている情報を使用して、効率的にクラスをロードします。ディレクトリをコピーするには、最初に\fIdir1\fR内のファイルを\fIstdout\fRに圧縮してから、\fIstdin\fRから\fIdir2\fRにパイプラインを作成して抽出します(\fI\-f\fRオプションは両方の\fIjar\fRコマンドで省略します)。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +(cd dir1; jar c \&.) | (cd dir2; jar x) +.fi +.if n \{\ +.RE +.\} +.RE .SH "関連項目" -.LP -.LP -.na -\f2JAR ファイルの概要\fP @ -.fi -http://java.sun.com/javase/6/docs/technotes/guides/jar/jarGuide.html -.LP -.LP -.na -\f2JAR ファイルの仕様\fP @ -.fi -http://java.sun.com/javase/6/docs/technotes/guides/jar/jar.html -.LP -.LP -.na -\f2JarIndex の仕様\fP @ -.fi -http://java.sun.com/javase/6/docs/technotes/guides/jar/jar.html#JAR_Index -.LP -.LP -.na -\f2JAR チュートリアル\fP @ -.fi -http://download.oracle.com/javase/tutorial/deployment/jar/index.html -.LP -.LP -pack200(1) -.LP - +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +pack200(1)\&. +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +http://docs\&.oracle\&.com/javase/tutorial/deployment/jar/index\&.htmlにある +JavaチュートリアルのJARに関する項 +.RE +.br +'pl 8.5i +'bp diff --git a/jdk/src/linux/doc/man/ja/jarsigner.1 b/jdk/src/linux/doc/man/ja/jarsigner.1 index 739d051356e..fa0799a8c60 100644 --- a/jdk/src/linux/doc/man/ja/jarsigner.1 +++ b/jdk/src/linux/doc/man/ja/jarsigner.1 @@ -1,1660 +1,1071 @@ -." 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 -." 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. -." -.TH jarsigner 1 "07 May 2011" - -.LP -.SH "名前" -jarsigner \- JAR 署名および検証ツール -.LP -.LP -Java ARchive (JAR) ファイルの署名を生成し、署名付き JAR ファイルの署名を検証します。 -.LP -.SH "形式" -.LP +'\" t +.\" Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved. +.\" Title: jarsigner +.\" Language: English +.\" Date: 2013年11月21日 +.\" SectDesc: セキュリティ・ツール +.\" Software: JDK 8 +.\" Arch: 汎用 +.\" +.\" 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. +.\" +.pl 99999 +.TH "jarsigner" "1" "2013年11月21日" "JDK 8" "セキュリティ・ツール" +.\" ----------------------------------------------------------------- +.\" * Define some portability stuff +.\" ----------------------------------------------------------------- +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.\" http://bugs.debian.org/507673 +.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" ----------------------------------------------------------------- +.\" * set default formatting +.\" ----------------------------------------------------------------- +.\" disable hyphenation +.nh +.\" disable justification (adjust text to left margin only) +.ad l +.\" ----------------------------------------------------------------- +.\" * MAIN CONTENT STARTS HERE * +.\" ----------------------------------------------------------------- +.SH "NAME" +jarsigner \- Javaアーカイブ(JAR)ファイルに対して署名および検証を行います。 +.SH "概要" +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -\fP\f3jarsigner\fP [ options ] jar\-file alias -.fl -\f3jarsigner\fP \-verify [ options ] jar\-file [alias...] -.fl +\fIjarsigner\fR [ \fIoptions\fR ] \fIjar\-file\fR \fIalias\fR .fi - -.LP -.LP -jarsigner の \-verify コマンドでは、JAR ファイル名のあとに 0 個以上のキーストア別名を指定できます。キーストア別名が指定された場合、jarsigner は、JAR ファイル内の各署名付きエンティティーの検証に使用される証明書がキーストア別名のいずれかに一致することをチェックします。別名は、\-keystore で指定されたキーストア内またはデフォルトのキーストア内に定義されます。 -.LP +.if n \{\ +.RE +.\} +.sp +.if n \{\ +.RS 4 +.\} +.nf +\fIjarsigner\fR \fI\-verify\fR [ \fIoptions\fR ] \fIjar\-file\fR [\fIalias \&.\&.\&.\fR] +.fi +.if n \{\ +.RE +.\} +.PP +\fIoptions\fR +.RS 4 +コマンドライン・オプション。オプションを参照してください。 +.RE +.PP +\-verify +.RS 4 +\fI\-verify\fRオプションでは、JARファイル名の後に0個以上のキーストア別名を指定できます。\fI\-verify\fRオプションが指定された場合、\fIjarsigner\fRコマンドでは、JARファイル内の各署名付きエンティティの検証に使用される証明書が、いずれかのキーストア別名に一致することをチェックします。別名は、\fI\-keystore\fRで指定されたキーストア内またはデフォルトのキーストア内に定義されます。 +.sp +\fI\-strict\fRオプションも指定した場合、\fIjarsigner\fRコマンドにより重大な警告が検出されると、メッセージ「jarが検証されました。署名者エラー」が表示されます。 +.RE +.PP +\fIjar\-file\fR +.RS 4 +署名されるJARファイル。 +.sp +\fI\-strict\fRオプションも指定した場合、\fIjarsigner\fRコマンドにより重大な警告が検出されると、メッセージ「jarは署名されました \- 署名者エラーがあります。」というメッセージが表示されます。 +.RE +.PP +\fIalias\fR +.RS 4 +別名は、\fI\-keystore\fRで指定されたキーストア内またはデフォルトのキーストア内に定義されます。 +.RE .SH "説明" -.LP -.LP -\f3jarsigner\fP ツールは、次の 2 つの目的で使用します。 -.LP -.RS 3 -.TP 3 -1. -Java ARchive (JAR) ファイルに署名を付ける -.TP 3 -2. -署名付き JAR ファイルの署名と整合性を検証する +.PP +\fIjarsigner\fRツールには、次の2つの目的があります。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +Javaアーカイブ(JAR)ファイルに署名する目的。 .RE - -.LP -.LP -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 -署名付きのデータは変更できない。 データが変更された場合は、その署名によってデータが本物ではないことが検証される +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +署名付きJARファイルの署名と整合性を検証する目的。 .RE - -.LP -.LP -ファイルに対してエンティティーの署名を生成するには、まず、エンティティーは、そのエンティティーに関連する公開鍵と非公開鍵のペアを持つ必要があります。また、公開鍵を認証する 1 つまたは複数の証明書も必要です。「証明書」とは、あるエンティティーが発行したデジタル署名付きの文書で、別なエンティティーの公開鍵が特定の値であることを証明しています。 -.LP -.LP -\f3jarsigner\fP は、「キーストア」に含まれる鍵と証明書情報を使って、JAR ファイルのデジタル署名を生成します。キーストアは、非公開鍵と、非公開鍵に関連付けられた X.509 証明書チェーンが収められたデータベースです。キーストアの作成と管理には、keytool(1) ユーティリティーを使います。 -.LP -.LP -\f3jarsigner\fP は、エンティティーの非公開鍵を使って署名を生成します。署名付き JAR ファイルには特に、ファイルの署名に使用された非公開鍵に対応する公開鍵に対する、キーストア内の証明書のコピーが含まれています。\f3jarsigner\fP は、署名付き JAR ファイル内 (署名ブロックファイル内) にある証明書を使用してそのファイルのデジタル署名を検証できます。 -.LP -.LP -\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 ファイルに署名を付けるときに自動的に作成されます。 -.LP -.LP -デフォルトでは、\f3jarsigner\fP は JAR (または ZIP) ファイルに「署名」を付けます。署名付き JAR ファイルを「検証」する場合は、 \f2\-verify\fP オプションを指定します。 -.LP -.SS -キーストアの別名 -.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 \fP\f4<キーストアのパスワード>\fP\f3 -.fl - \-keypass \fP\f4<非公開鍵のパスワード>\fP\f3 MyJARFile.jar duke -.fl -\fP -.fi - -.LP -.LP -キーストアはパスワードで保護されているので、ストアのパスワードを指定する必要があります。コマンド行でストアのパスワードを指定しないと、パスワードの入力を求められます。同様に、非公開鍵もキーストア内でパスワードによって保護されているため、非公開鍵のパスワードを指定する必要があります。コマンド行で非公開鍵のパスワードを指定していない、また、指定したパスワートが保存されているパスワードと違っている場合には、非公開鍵のパスワードの入力を求められます。 -.LP -.SS -キーストアの場所 -.LP -.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 -\f2「Java 暗号化アーキテクチャー用プロバイダの実装方法」\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 -\f2「KeyTool 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 -SHA1 ダイジェストアルゴリズムを使った DSA (デジタル署名アルゴリズム) -.TP 2 -o -SHA256 ダイジェストアルゴリズムを使用した RSA アルゴリズム -.TP 2 -o -SHA256 と ECDSA (楕円曲線デジタル署名アルゴリズム) を使用した EC (楕円曲線) 暗号方式アルゴリズム +.PP +JAR機能を使用すると、クラス・ファイル、イメージ、サウンドおよびその他のデジタル・データを単一のファイルにパッケージ化できるので、ファイルを迅速かつ容易に配布できます。\fIjar\fRという名前のツールを使用して、開発者はJARファイルを作成できます。(技術的な観点から言えば、すべてのZIPファイルもJARファイルとみなすことができます。ただし、\fIjar\fRコマンドによって作成されたJARファイル、または\fIjarsigner\fRコマンドによって処理されたJARファイルには、\fIMETA\-INF/MANIFEST\&.MF\fRファイルも含まれています。) +.PP +デジタル署名は、なんらかのデータ(署名の対象となるデータ)、およびエンティティ(人、会社など)の秘密鍵から計算されるビットの文字列です。手書きの署名同様、デジタル署名には多くの利点があります。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +署名の生成に使用された秘密鍵に対応する公開鍵を使用する計算によって、それが本物であることを検証できます。 .RE - -.LP -.LP -具体的には、署名者の公開鍵と非公開鍵が 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 を拡張子に持つ署名ブロックファイル +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +秘密鍵が他人に知られない限り、デジタル署名の偽造は不可能です。 .RE - -.LP -.LP -これら 2 つのファイルのベースファイル名は、 \f2\-sigFile\fP オプションの値から作成されます。たとえば、次のようにオプションを指定したとします。 -.LP +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +これは、署名が付いたデータの機能であり、他のデータの署名となるように要求できません。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +署名付きデータは変更できません。データが変更された場合、署名によって本物であると検証できません。 +.RE +.PP +ファイルに対してエンティティの署名を生成するには、まず、エンティティは、そのエンティティに関連する公開鍵/秘密鍵のペアと、公開鍵を認証する1つ以上の証明書を持つ必要があります。証明書とは、あるエンティティからのデジタル署名付きの文書で、別のエンティティの公開鍵が特定の値を持つことを示しています。 +.PP +\fIjarsigner\fRコマンドは、キーストアからの鍵と証明書情報を使用して、JARファイルのデジタル署名を生成します。キーストアは、秘密鍵、および対応する公開鍵を認証する、秘密鍵に関連したX\&.509証明書チェーンのデータベースです。\fIkeytool\fRコマンドを使用して、キーストアを作成および管理します。 +.PP +\fIjarsigner\fRコマンドでは、エンティティの秘密鍵を使用して署名を生成します。署名付きJARファイルには、特に、ファイルへの署名に使用する秘密鍵に対応する公開鍵のキーストアからの証明書のコピーが含まれます。\fIjarsigner\fRコマンドでは、内部(署名ブロック・ファイル内)の証明書を使用して、署名付きJARファイルのデジタル署名を検証できます。 +.PP +\fIjarsigner\fRコマンドでは、署名証明書の有効期間中にJARファイルが署名されたされたかどうかをシステムやデプロイヤ(Java Plug\-inを含む)がチェックできる、タイムスタンプを含む署名を生成できます。さらに、APIを使用すると、アプリケーションでタイムスタンプ情報を取得できます。 +.PP +現時点では、\fIjarsigner\fRコマンドでは、\fIjar\fRコマンドまたはZIPファイルによって作成されたJARファイルのみに署名できます。JARファイルはZIPファイルと同じですが、JARファイルには\fIMETA\-INF/MANIFEST\&.MF\fRファイルも含まれている点が異なります。\fIMETA\-INF/MANIFEST\&.MF\fRファイルは、\fIjarsigner\fRコマンドによってZIPファイルに署名する際に作成されます。 +.PP +デフォルトの\fIjarsigner\fRコマンドの動作では、JARまたはZIPファイルに署名します。\fI\-verify\fRオプションを使用して、署名付きJARファイルを検証します。 +.PP +\fIjarsigner\fRコマンドは、署名または検証の後に署名者の証明書の検証も試行します。検証エラーまたはその他の問題が発生すると、コマンドにより警告メッセージが生成されます。\fI\-strict\fRオプションを指定した場合、コマンドにより重大な警告がエラーとして処理されます。エラーと警告を参照してください。 +.SS "キーストアの別名" +.PP +キーストアのすべてのエンティティは、一意の別名を使用してアクセスされます。 +.PP +\fIjarsigner\fRコマンドを使用してJARファイルに署名するときは、署名の生成に必要な秘密鍵を含むキーストア・エントリの別名を指定する必要があります。たとえば、次のコマンドでは、\fIworking\fRディレクトリの\fImystore\fRという名前のキーストアに含まれる別名\fIduke\fRに関連付けられた秘密鍵を使用して、\fIMyJARFile\&.jar\fRという名前のJARファイルに署名します。出力ファイルは指定されていないため、\fIMyJARFile\&.jar\fRは署名付きのJARファイルによって上書きされます。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -\-sigFile MKSIGN -.fl -\fP +jarsigner \-keystore /working/mystore \-storepass + \-keypass MyJARFile\&.jar duke .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 ダイジェストの値 +.if n \{\ .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 ファイル内にエントリを持つ各ファイルを読み込みます。読み込み中にファイルのダイジェストを計算し、結果をマニフェストセクション内の該当するファイルのダイジェストと比較します。2 つのダイジェストは同じでなければならず、そうでない場合は検証が失敗します。 -.RE - -.LP -.LP -検証プロセスの途中でなんらかの重大な検証エラーが発生した場合、検証プロセスは中止され、セキュリティー例外がスローされます。スローされたセキュリティー例外は、\f3jarsigner\fP がキャッチして表示します。 -.LP -.SS -1 つの JAR ファイルを対象とする複数の署名 -.LP -.LP -1 つの JAR ファイルに対して \f3jarsigner\fP ツールを複数回実行し、実行のたびに、異なるユーザーの別名を指定すれば、JAR ファイルに複数のユーザーの署名を付けることができます。 -.LP +.\} +.PP +キーストアはパスワードで保護されているので、ストアのパスワードを指定する必要があります。コマンドラインで指定しないと、入力を求められます。同様に、秘密鍵もキーストア内でパスワードによって保護されているため、秘密鍵のパスワードを指定する必要があります。コマンドラインでパスワードを指定していない場合、または指定したパスワートが保存されているパスワードと同じではない場合は、パスワードの入力を求められます。 +.SS "キーストアの場所" +.PP +\fIjarsigner\fRコマンドには、使用するキーストアのURLを指定する\fI\-keystore\fRオプションがあります。キーストアはデフォルトで、\fIuser\&.home\fRシステム・プロパティで決まるユーザーのホーム・ディレクトリの\fI\&.keystore\fRという名前のファイル内に格納されます。 +.PP +Oracle Solarisシステムの場合、\fIuser\&.home\fRは、ユーザーのホーム・ディレクトリにデフォルト設定されます。 +.PP +\fI\-keystore\fRオプションからの入力ストリームは、\fIKeyStore\&.load\fRメソッドに渡されます。URLとして\fINONE\fRが指定されている場合は、nullのストリームが\fIKeyStore\&.load\fRメソッドに渡されます。\fINONE\fRは、\fIKeyStore\fRクラスがファイルベースではない場合、たとえば、ハードウェア・トークン・デバイスに置かれている場合に指定します。 +.SS "キーストアの実装" +.PP +\fIjava\&.security package\fRで提供されている\fIKeyStore\fRクラスは、キーストア内の情報へのアクセスおよび情報の変更を行うための、明確に定義された多くのインタフェースを提供します。複数の異なる固定実装を指定することができ、各実装は特定のタイプのキーストアを対象とします。 +.PP +現在、キーストアの実装を使用する2つのコマンドライン・ツール(\fIkeytool\fRと\fIjarsigner\fR)、およびポリシー・ツールという名前の1つのGUIベースのツールがあります。\fIKeyStore\fRクラスは公開されているため、JDKユーザーは、それを使用する他のセキュリティ・アプリケーションを書き込むことができます。 +.PP +Oracleが提供する組込みのデフォルトの実装があります。これは、JKSという名前の独自のキーストア・タイプ(形式)を使用するもので、キーストアをファイルとして実装しています。組込みの実装では、各秘密鍵は個別のパスワードによって保護され、キーストア全体の整合性は(秘密鍵とは別の)パスワードによって保護されます。 +.PP +キーストアの実装はプロバイダベースで、つまり、\fIKeyStore\fRクラスにより提供されるアプリケーション・インタフェースは、サービス・プロバイダ・インタフェース(SPI)に関して実装されます。対応する\fIKeystoreSpi\fR抽象クラスがあり、これも\fIjava\&.security package\fRに含まれています。このクラスが、プロバイダが実装する必要のあるサービス・プロバイダ・インタフェースのメソッドを定義しています。ここで、プロバイダとは、Java Security APIによってアクセス可能なサービスのサブセットに対し、その固定実装を提供するパッケージまたはパッケージの集合のことです。キーストアの実装を提供するには、http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/security/crypto/HowToImplAProvider\&.htmlにある +Java暗号化アーキテクチャのプロバイダの実装方法で説明しているように、クライアントはプロバイダを実装し、\fIKeystoreSpi\fRサブクラスの実装を提供する必要があります。 +.PP +アプリケーションでは、\fIKeyStore\fRクラスの\fIgetInstance\fRファクトリ・メソッドを使用して、様々なプロバイダから異なるタイプのキーストアの実装を選択できます。キーストアのタイプは、キーストア情報の格納形式とデータ形式を定義するとともに、キーストア内の秘密鍵とキーストア自体の整合性を保護するために使用されるアルゴリズムを定義します。異なるタイプのキーストアの実装には、互換性はありません。 +.PP +\fIjarsigner\fRおよび\fIpolicytool\fRコマンドは、URLを使用して指定できる任意の場所からファイルベースのキーストアを読み取ることができます。また、これらのコマンドは、Windows上のMSCAPIおよびすべてのプラットフォーム上のPKCS11で提供されるような非ファイルベースのキーストアを読み取ることができます。 +.PP +\fIjarsigner\fRコマンドおよび\fIkeytool\fRコマンドの場合、\fI\-storetype\fRオプションを使用して、コマンドラインでキーストアのタイプを指定できます。ポリシー・ツールの場合、\fB「キーストア」\fRメニューの\fB「編集」\fRコマンドを使用して、キーストアのタイプを指定できます。 +.PP +ユーザーがキーストアのタイプを明示的に指定しなかった場合、セキュリティ・プロパティ・ファイルで指定された\fIkeystore\&.type\fRプロパティの値に基づいて、ツールによってキーストアの実装が選択されます。このセキュリティ・プロパティ・ファイルは\fIjava\&.security\fRと呼ばれ、JDKセキュリティ・プロパティ・ディレクトリ\fIjava\&.home/lib/security\fR内に存在しています。ここで、\fIjava\&.home\fRは実行時環境のディレクトリです。\fIjre\fRディレクトリは、JDKまたはJava Runtime Environment (JRE)の最上位のディレクトリにあります。 +.PP +各ツールは、\fIkeystore\&.type\fRの値を取得し、そのタイプのキーストアを実装しているプロバイダが見つかるまで、インストールされているすべてのプロバイダを調べます。目的のプロバイダが見つかると、そのプロバイダからのキーストアの実装を使用します。 +.PP +\fIKeyStore\fRクラスに定義されているstaticメソッド\fIgetDefaultType\fRを使用すると、アプリケーションやアプレットから\fIkeystore\&.type\fRプロパティの値を取得できます。次のコードの行では、\fIkeystore\&.type property\fRで指定された、デフォルトのキーストア・タイプのインスタンスを作成します。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl - jarsigner myBundle.jar susan -.fl - jarsigner myBundle.jar kevin -.fl -\fP +KeyStore keyStore = KeyStore\&.getInstance(KeyStore\&.getDefaultType()); .fi - -.LP -.LP -JAR ファイルが複数回署名されている場合、その JAR ファイルには .SF ファイルと .DSA ファイルの対が複数含まれることになります。 .SF ファイルと .DSA ファイルの対は、1 回の署名に対して 1 つ作成されます。したがって、上の例で出力される JAR ファイルには、次の名前を持つファイルが含まれます。 -.LP +.if n \{\ +.RE +.\} +.PP +デフォルトのキーストア・タイプは、\fIjks\fR +(Oracleが提供する独自のタイプのキーストアの実装)です。これは、セキュリティ・プロパティ・ファイル内の次の行によって指定されています。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl - SUSAN.SF -.fl - SUSAN.DSA -.fl - KEVIN.SF -.fl - KEVIN.DSA -.fl -\fP +keystore\&.type=jks .fi - -.LP -.LP -注: JAR ファイルでは、JDK 1.1 の \f3javakey\fP ツールで生成された署名と \f3jarsigner\fP で生成された署名が混在できます。つまり、すでに \f3javakey\fP を使って署名が付けられている JAR ファイルに、\f3jarsigner\fP を使って署名を付けることができます。 -.LP +.if n \{\ +.RE +.\} +.PP +キーストアのタイプの指定では、大文字と小文字は区別されません。たとえば、\fIJKS\fRは\fIjks\fRと同じになります。 +.PP +ツールでデフォルト以外のキーストアの実装を使用するには、その行を変更して別のキーストアのタイプを指定します。たとえば、\fIpkcs12\fRと呼ばれるキーストアのタイプのキーストアの実装を提供するプロバイダ・パッケージがある場合、行を次のように変更します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +keystore\&.type=pkcs12 +.fi +.if n \{\ +.RE +.\} +.PP +\fB注意:\fR +PKCS 11プロバイダ・パッケージを使用する場合、http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/security/p11guide\&.htmlにある +Java PKCS #11リファレンス・ガイドの「KeyTool」および「JarSigner」を参照してください。 +.SS "サポートされるアルゴリズム" +.PP +デフォルトで、\fIjarsigner\fRコマンドでは次のいずれかのアルゴリズムを使用してJARファイルに署名します。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +SHA1ダイジェスト・アルゴリズムを使用したデジタル署名アルゴリズム(DSA) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +SHA256ダイジェスト・アルゴリズムを使用したRSAアルゴリズム。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +SHA256と楕円曲線デジタル署名アルゴリズム(ECDSA)を使用した楕円曲線(EC)暗号方式アルゴリズム +.RE +.PP +署名者の公開鍵と秘密鍵がDSA鍵である場合、\fIjarsigner\fRは\fISHA1withDSA\fRアルゴリズムを使用してJARファイルに署名します。署名者の鍵がRSA鍵である場合、\fIjarsigner\fRは\fISHA256withRSA\fRアルゴリズムを使用してJARファイルに署名しようとします。署名者の鍵がEC鍵である場合、\fIjarsigner\fRは\fISHA256withECDSA\fRアルゴリズムを使用してJARファイルに署名します。 +.PP +これらのデフォルトの署名アルゴリズムは、\fI\-sigalg\fRオプションを使用してオーバーライドできます。 +.SS "署名付きJARファイル" +.PP +\fIjarsigner\fRコマンドを使用してJARファイルに署名する場合、出力される署名付きJARファイルは入力JARファイルと同じですが、次の2つの追加ファイルがMETA\-INFディレクトリに置かれる点が異なります。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fI\&.SF\fR拡張子の付いた署名ファイル +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fI\&.DSA\fR、\fI\&.RSA\fRまたは\fI\&.EC\fR拡張子の付いた署名ブロック・ファイル +.RE +.PP +これら2つのファイルのベース・ファイル名は、\fI\-sigFile\fRオプションの値から作成されます。たとえば、オプションが\fI\-sigFile MKSIGN\fRの場合、ファイルは\fIMKSIGN\&.SF\fRおよび\fIMKSIGN\&.DSA\fRという名前になります。 +.PP +コマンドラインで\fI\-sigfile\fRオプションを指定しなかった場合、\fI\&.SF\fRファイルと\fI\&.DSA\fRファイルのベース・ファイル名は、コマンドラインで指定された別名の先頭の8文字をすべて大文字に変換したものになります。別名が8文字未満の場合は、別名がそのまま使用されます。別名に、署名ファイル名で使用できない文字が含まれている場合、ファイル名の作成時に、該当する文字が下線(_)文字に変換されます。有効な文字は、アルファベット、数字、下線およびハイフンです。 +署名ファイル.PP +署名ファイル(\fI\&.SF\fRファイル)は、\fIjarsigner\fRコマンドを使用してファイルに署名する際にJARファイルに常に含まれるマニフェスト・ファイルと似ています。JARファイルに含まれているソース・ファイルごとに、\fI\&.SF\fRファイルには、マニフェスト・ファイルにあるような、次に示す3つの行があります。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +ファイル名 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +ダイジェスト・アルゴリズム(SHA)の名前 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +SHAダイジェストの値 +.RE +.PP +マニフェスト・ファイルでは、各ソース・ファイルのSHAダイジェストの値は、ソース・ファイルのバイナリ・データのダイジェスト(ハッシュ)になります。\fI\&.SF\fRファイルでは、指定されたソース・ファイルのダイジェストの値は、ソース・ファイルのマニフェスト・ファイル内のその3行のハッシュになります。 +.PP +署名ファイルには、デフォルトで、マニフェスト・ファイル全体のハッシュが格納されたヘッダーが含まれています。ヘッダーにはマニフェスト・ヘッダーのハッシュも含まれています。ヘッダーが存在すると、検証の最適化が有効になります。JARファイルの検証を参照してください。 +署名ブロック・ファイル.PP +\fI\&.SF\fRファイルには署名が付けられ、署名は署名ブロック・ファイルに置かれます。このファイルには、署名に使用された秘密鍵に対応する公開鍵を認証するキーストアからの証明書または証明書チェーンも、内部でエンコードされて含まれています。ファイルの拡張子は、使用されるダイジェスト・アルゴリズムに応じて、\fI\&.DSA\fR、\fI\&.RSA\fRまたは\fI\&.EC\fRになります。 +.SS "署名タイムスタンプ" +.PP +\fIjarsigner\fRコマンドでは、JARファイルの署名時に署名タイムスタンプを生成および保存できます。さらに、\fIjarsigner\fRは代替署名機構をサポートします。この動作は省略可能で、署名時に次の各オプションによって制御されます。オプションを参照してください。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-tsa \fIurl\fR +\-tsacert \fIalias\fR +\-altsigner \fIclass\fR +\-altsignerpath \fIclasspathlist\fR +\-tsapolicyid \fIpolicyid\fR +.fi +.if n \{\ +.RE +.\} +.SS "JARファイルの検証" +.PP +JARファイルの検証が成功するのは、署名が有効であり、かつ署名の生成以降にJARファイル内のどのファイルも変更されていない場合です。JARファイルの検証は、次の手順で行われます。 +.sp +.RS 4 +.ie n \{\ +\h'-04' 1.\h'+01'\c +.\} +.el \{\ +.sp -1 +.IP " 1." 4.2 +.\} +\fI\&.SF\fRファイルの署名を検証します。 +.sp +検証では、各署名ブロック(\fI\&.DSA\fR)ファイルに格納された署名が、証明書(または証明書チェーン)も\fI\&.DSA\fRファイルに示される公開鍵に対応する秘密鍵を使用して生成されたことを確認します。また、署名が対応する署名(\fI\&.SF\fR)ファイルの有効な署名であることが確認され、それにより、\fI\&.SF\fRファイルが改ざんされていないことも確認されます。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04' 2.\h'+01'\c +.\} +.el \{\ +.sp -1 +.IP " 2." 4.2 +.\} +\fI\&.SF\fRファイル内の各エントリに示されるダイジェストを、マニフェスト内の対応する各セクションと突きあわせて検証します。 +.sp +\fI\&.SF\fRファイルには、マニフェスト・ファイル全体のハッシュが格納されたヘッダーがデフォルトで含まれています。ヘッダーが存在する場合、検証では、ヘッダー内のハッシュがマニフェスト・ファイルのハッシュと一致するかどうかを確認するためにチェックできます。一致する場合、検証は次の手順に進みます。 +.sp +一致しない場合、\fI\&.SF\fRファイル内の各ソース・ファイル情報セクションのハッシュが、マニフェスト・ファイル内の対応するセクションのハッシュと一致することを確認するために、あまり最適化されていない検証が必要になります。署名ファイルを参照してください。 +.sp +\fI\&.SF\fRファイルのヘッダーに格納されたマニフェスト・ファイルのハッシュが、現在のマニフェスト・ファイルのハッシュに一致しない理由の1つは、署名および\fI\&.SF\fRファイルの生成後に、(\fIjar\fRツールを使用して)1つ以上のファイルがJARファイルに追加されたことです。\fIjar\fRツールを使用してファイルを追加した場合、新しいファイル用のセクションが追加されることにより、マニフェスト・ファイルは変更されますが、\fI\&.SF\fRファイルは変更されません。検証がまだ成功しているとみなされるのは、署名の生成以降にJARファイル内のどのファイルも変更されていない場合です。これが発生するのは、\fI\&.SF\fRファイルのヘッダー以外のセクションのハッシュが、マニフェスト・ファイル内の対応するセクションのハッシュと一致する場合です。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04' 3.\h'+01'\c +.\} +.el \{\ +.sp -1 +.IP " 3." 4.2 +.\} +\fI\&.SF\fRファイル内にエントリを持つJARファイル内の各ファイルを読み取ります。読取り中にファイルのダイジェストを計算し、結果をマニフェスト・セクション内のこのファイルのダイジェストと比較します。ダイジェストは同じである必要があり、そうでない場合は検証が失敗します。 +.sp +検証プロセス中になんらかの重大な検証エラーが発生した場合、そのプロセスは停止され、セキュリティ例外がスローされます。\fIjarsigner\fRコマンドでは、例外を捕捉および表示します。 +.RE +.PP +\fB注意:\fR +追加の警告(または、\fI\-strict\fRオプションを指定した場合はエラー)はすべて読む必要があります。同様に、証明が信頼できるかを決定するために、(\fI\-verbose\fRおよび\fI\-certs\fRオプションを指定して)証明書の内容も読む必要があります。 +.SS "1つのJARファイルを対象とする複数の署名" +.PP +次のように、\fIjarsigner\fRコマンドをファイルで複数回実行し、実行のたびに異なるユーザーの別名を指定することによって、1つのJARファイルに複数のユーザーの署名を付けることができます。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +jarsigner myBundle\&.jar susan +jarsigner myBundle\&.jar kevin +.fi +.if n \{\ +.RE +.\} +.PP +JARファイルが複数回署名されている場合、そのJARファイルには、複数の\fI\&.SF\fRファイルと\fI\&.DSA\fRファイルが含まれており、1回の署名に対して1つのペアとなります。前述の例では、出力JARファイルには、次の名前のファイルが含まれています。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +SUSAN\&.SF +SUSAN\&.DSA +KEVIN\&.SF +KEVIN\&.DSA +.fi +.if n \{\ +.RE +.\} .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 ファイルに署名を付ける場合だけである +.PP +次の各項では、様々な\fIjarsigner\fRオプションについて説明します。次の標準に注意してください。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +どのオプション名にも先頭にマイナス記号(\-)が付きます。 .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 として扱われます。たとえば、次のように指定できます。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +オプションは任意の順序で指定できます。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +イタリック体または下線付きの項目(オプションの値)の実際の値は、指定する必要があります。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fI\-storepass\fR、\fI\-keypass\fR、\fI\-sigfile\fR、\fI\-sigalg\fR、\fI\-digestalg\fR、\fI\-signedjar\fRおよびTSA関連のオプションを使用できるのは、JARファイルに署名する場合のみです。署名付きJARファイルを検証する場合ではありません。\fI\-keystore \fRオプションは、JARファイルの署名および検証に関連します。また、別名は、JARファイルの署名および検証時に指定します。 +.RE +.PP +\-keystore \fIurl\fR +.RS 4 +キーストアの場所を示すURLを指定します。これにより、\fIuser\&.home\fRシステム・プロパティで決定されたユーザーのホーム・ディレクトリ内のファイル\fI\&.keystore\fRにデフォルト設定されます。 +.sp +キーストアは署名時には必要です。デフォルトのキーストアが存在しない場合、またはデフォルト以外のキーストアを使用する場合は、キーストアを明示的に指定する必要があります。 +.sp +検証するときはキーストアは必要ありません。ただし、キーストアが指定されているか、あるいはデフォルトのキーストアが存在していて、さらに\fI\-verbose\fRオプションも指定されていた場合、JARファイルの検証に使用される証明書がそのキーストアに1つでも含まれているかどうかに関する追加情報が出力されます。 +.sp +\fI\-keystore\fR引数には、URLではなくファイル名とパスを指定でき、この場合、ファイル: URLと同じように処理されます。たとえば、次にように指定すると同等になります。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl - \-keystore \fP\f4filePathAndName\fP\f3 -.fl -\fP +\-keystore \fIfilePathAndName\fR +\-keystore file:\fIfilePathAndName\fR .fi -.LP -これは、次の指定と同じものとして扱われます。 +.if n \{\ +.RE +.\} +(JREの\fI$JAVA_HOME/lib/security directory\fRにある) +\fIjava\&.security\fRセキュリティ・プロパティ・ファイル内でSun PKCS #11プロバイダが構成された場合、\fIkeytool\fRおよび\fIjarsigner\fRツールはPKCS#11トークンに基づいて動作できます。次のオプションを指定します。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl - \-keystore file:\fP\f4filePathAndName\fP\f3 -.fl -\fP +\-keystore NONE +\-storetype PKCS11 .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 +.if n \{\ .RE -.LP -たとえば、次のコマンドは、設定された PKCS#11 トークンの内容を一覧表示します。 +.\} +たとえば、次のコマンドは、構成されたPKCS#11トークンの内容を一覧表示します。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl - jarsigner \-keystore NONE \-storetype PKCS11 \-list -.fl - -.fl -\fP +keytool \-keystore NONE \-storetype PKCS11 \-list .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 という名前のファイルからパスワードを取得する +.if n \{\ .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\-sigfile\fP オプションを指定しなかった場合、.SF ファイルと .DSA ファイルのベースファイル名は、コマンド行で指定された別名の先頭の 8 文字をすべて大文字に変換したものになります。別名が 8 文字未満の場合は、別名がそのまま使われます。別名の中に、署名ファイル名に使用できない文字が含まれている場合は、該当する文字を下線 (_) に置き換えてファイル名が作成されます。 -.TP 3 -\-sigalg algorithm -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、SHA256withRSA、SHA256withECDSA のいずれかが使用されます。指定されたアルゴリズムの実装を提供するプロバイダが静的にインストールされているか、あるいはユーザーがそのようなプロバイダを \f2\-providerClass\fP オプションを使って指定する必要があります。そうでない場合、コマンドの実行が失敗します。 -.TP 3 -\-digestalg algorithm -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を参照してください。このオプションを指定しなかった場合、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 のインスタンス) である場合は、署名者の識別名 +.PP +\-storetype \fIstoretype\fR +.RS 4 +インスタンスを生成するキーストアのタイプを指定します。デフォルトのキーストア・タイプは、セキュリティ・プロパティ・ファイル内の\fIkeystore\&.type\fRプロパティの値で指定されたタイプです。この値は、\fIjava\&.security\&.KeyStore\fRのstatic +\fIgetDefaultType\fRメソッドによって返されます。 +.sp +\fI\-storepass\fRオプションを使用して、PCKS #11トークンのPINを指定することもできます。何も指定しない場合、\fIkeytool\fRおよび\fIjarsigner\fRコマンドによって、トークンPINの指定を求められます。トークンに保護された認証パス(専用のPINパッドや生体読取り機など)がある場合、\fI\-protected\fRオプションを指定する必要がありますが、パスワード・オプションは指定できません。 .RE -.LP -キーストアの確認も行われます。コマンド行でキーストアの値が指定されていない場合、デフォルトのキーストアファイルがあれば、検査されます。署名者の公開鍵の証明書がキーストア内のエントリと一致した場合は、次の情報も表示されます。 -.RS 3 -.TP 2 -o -署名者に該当するキーストアエントリの別名。この別名は括弧で囲まれます。 ただし、キーストアではなく JDK 1.1 のアイデンティティーデータベースに由来する署名者の場合は、括弧ではなく大括弧で囲まれます。 +.PP +\-storepass[:env | :file] \fIargument\fR +.RS 4 +キーストアにアクセスするのに必要なパスワードを指定します。これが必要なのは、JARファイルに署名を付けるときのみです(検証するときには不要です)。その場合、\fI\-storepass\fRオプションをコマンドラインで指定しないと、パスワードの入力を求められます。 +.sp +修飾子\fIenv\fRまたは\fIfile\fRが指定されていない場合、パスワードの値は\fIargument\fRになります。それ以外の場合、パスワードは次のようにして取得されます。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fIenv\fR: +\fIargument\fRという名前の環境変数からパスワードを取得します。 .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 キーストアを一覧表示するコマンドの例を次に示します。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fIfile\fR: +\fIargument\fRという名前のファイルからパスワードを取得します。 +.RE +.sp +\fB注意:\fR +テストを目的とする場合またはセキュリティ保護されたシステムを使用している場合以外は、コマンドラインやスクリプトでパスワードを指定しないでください。 +.RE +.PP +\-keypass [:env | :file] \fIargument\fR +.RS 4 +コマンドラインで指定された別名に対応するキーストア・エントリの秘密鍵を保護するのに使用するパスワードを指定します。\fIjarsigner\fRを使用してJARファイルに署名を付けるときは、パスワードが必要です。コマンドラインでパスワードが指定されておらず、必要なパスワードがストアのパスワードと異なる場合は、パスワードの入力を求められます。 +.sp +修飾子\fIenv\fRまたは\fIfile\fRが指定されていない場合、パスワードの値は\fIargument\fRになります。それ以外の場合、パスワードは次のようにして取得されます。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fIenv\fR: +\fIargument\fRという名前の環境変数からパスワードを取得します。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fIfile\fR: +\fIargument\fRという名前のファイルからパスワードを取得します。 +.RE +.sp +\fB注意:\fR +テストを目的とする場合またはセキュリティ保護されたシステムを使用している場合以外は、コマンドラインやスクリプトでパスワードを指定しないでください。 +.RE +.PP +\-sigfile \fIfile\fR +.RS 4 +生成された\fI\&.SF\fRファイルおよび\fI\&.DSA\fRファイルに使用するベース・ファイル名を指定します。たとえば、ファイルが\fIDUKESIGN\fRの場合、生成される\fI\&.SF\fRおよび\fI\&.DSA\fRファイルは、\fIDUKESIGN\&.SF\fRおよび\fIDUKESIGN\&.DSA\fRという名前で、署名付きJARファイルの\fIMETA\-INF\fRディレクトリに格納されます。 +.sp +ファイル内の文字は、セット\fIa\-zA\-Z0\-9_\-\fRから指定される必要があります。アルファベット、数字、下線およびハイフン文字のみを使用できます。\fI\&.SF\fRおよび\fI\&.DSA\fRのファイル名では、小文字はすべて大文字に変換されます。 +.sp +コマンドラインで\fI\-sigfile\fRオプションを指定しなかった場合、\fI\&.SF\fRファイルと\fI\&.DSA\fRファイルのベース・ファイル名は、コマンドラインで指定された別名の先頭の8文字をすべて大文字に変換したものになります。別名が8文字未満の場合は、別名がそのまま使用されます。別名に、署名ファイル名で無効な文字が含まれている場合、ファイル名を作成するために、該当する文字が下線(_)文字に変換されます。 +.RE +.PP +\-sigalg \fIalgorithm\fR +.RS 4 +JARファイルの署名に使用する署名アルゴリズムの名前を指定します。 +.sp +標準的な署名アルゴリズム名のリストは、http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/security/crypto/CryptoSpec\&.html#AppAにある +Java Cryptography Architecture (JCA)リファレンス・ガイドの「付録A: 標準名」を参照してください。 +.sp +このアルゴリズムには、JARファイルの署名に使用する秘密鍵との互換性が必要です。このオプションを指定しない場合、秘密鍵のタイプに応じて、\fISHA1withDSA\fR、\fISHA256withRSA\fRまたは\fISHA256withECDSA\fRが使用されます。指定されたアルゴリズムの実装を提供するプロバイダが静的にインストールされているか、\fI\-providerClass\fRオプションを使用してそのようなプロバイダをユーザーが指定する必要があります。そうでない場合、コマンドは失敗します。 +.RE +.PP +\-digestalg \fIalgorithm\fR +.RS 4 +JARファイルのエントリをダイジェストする際に使用するメッセージ・ダイジェスト・アルゴリズムの名前を指定します。 +.sp +標準的なメッセージ・ダイジェスト・アルゴリズム名のリストは、http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/security/crypto/CryptoSpec\&.html#AppAにある +Java Cryptography Architecture (JCA)リファレンス・ガイドの「付録A: 標準名」を参照してください。 +.sp +このオプションを指定しない場合、\fISHA256\fRが使用されます。指定されたアルゴリズムの実装を提供するプロバイダが静的にインストールされているか、\fI\-providerClass\fRオプションを使用してそのようなプロバイダをユーザーが指定する必要があります。そうでない場合、コマンドは失敗します。 +.RE +.PP +\-certs +.RS 4 +コマンドラインで、\fI\-certs\fRオプションを\fI\-verify\fRおよび\fI\-verbose\fRオプションとともに指定した場合、JARファイルの各署名者の証明書情報が出力に含まれます。この情報には、署名者の公開鍵を証明する証明書(\fI\&.DSA\fRファイルに格納)のタイプの名前が含まれ、証明書がX\&.509証明書(\fIjava\&.security\&.cert\&.X509Certificate\fRのインスタンス)の場合、署名者の識別名が含まれます。 +.sp +キーストアの確認も行われます。コマンドラインでキーストアの値が指定されていない場合、デフォルトのキーストア・ファイル(ある場合)がチェックされます。署名者の公開鍵の証明書がキーストア内のエントリと一致する場合、その署名者のキーストアのエントリの別名が丸カッコ内に表示されます。 +.RE +.PP +\-certchain \fIfile\fR +.RS 4 +コマンドラインで指定した別名によって表されるキーストア・エントリの秘密鍵に関連付けられた証明書チェーンが完全ではない場合に、使用する証明書チェーンを指定します。これは、証明書チェーン全体を保持するのに十分な領域がないハードウェア・トークン上にキーストアが格納されている場合に発生します。このファイルは一連の連結されたX\&.509証明書、PKCS#7形式の単一データ・ブロックのいずれかとなり、そのエンコーディング形式はバイナリ・エンコーディング形式、Internet RFC 1421標準で規定される印刷可能エンコーディング形式(Base64エンコーディングとも呼ばれる)のいずれかになります。インターネットRFC 1421証明書符号化規格およびhttp://tools\&.ietf\&.org/html/rfc1421を参照してください。 +.RE +.PP +\-verbose +.RS 4 +コマンドラインで\fI\-verbose\fRオプションを指定した場合、冗長モードで動作し、このモードでは、\fIjarsigner\fRは、JARの署名または検証の進行状況に関する追加情報を出力します。 +.RE +.PP +\-internalsf +.RS 4 +以前は、JARファイルの署名時に生成された\fI\&.DSA\fR +(署名ブロック)ファイルに、生成された\fI\&.SF\fRファイル(署名ファイル)のエンコードされた完全なコピーが含まれていました。 この動作は変更されました。出力JARファイル全体のサイズを小さくするために、デフォルトでは\fI\&.DSA\fRファイルには\fI\&.SF\fRファイルのコピーが含まれないようになっています。コマンドラインで\fI\-internalsf\fRを指定した場合、以前と同じように動作します。このオプションは、テストを行う場合に便利です。実際には、\fI\-internalsf\fRオプションは、オーバーヘッドが大きくなるため、使用しないでください。 +.RE +.PP +\-sectionsonly +.RS 4 +コマンドラインで\fI\-sectionsonly\fRオプションを指定した場合、JARファイルの署名時に生成される\fI\&.SF\fRファイル(署名ファイル)には、マニフェスト・ファイル全体のハッシュを含むヘッダーは含まれません。これに含まれるのは、JARファイル内の各ソース・ファイルに関連する情報およびハッシュのみです。署名ファイルを参照してください。 +.sp +デフォルトでは、最適化のために、このヘッダーが追加されます。ヘッダーが存在する場合、JARファイルを検証するたびに、検証では、まずヘッダー内のハッシュがマニフェスト・ファイル全体のハッシュと一致するかどうかを確認するためにチェックできます。一致する場合、検証は次の手順に進みます。一致しない場合、\fI\&.SF\fRファイル内の各ソース・ファイル情報セクションのハッシュが、マニフェスト・ファイル内の対応するセクションのハッシュと一致するという、あまり最適化されていない検証を実行する必要があります。JARファイルの検証を参照してください。 +.sp +\fI\-sectionsonly\fRオプションは、主にテスト用に使用されます。これを使用するとオーバーヘッドが大きくなるため、テスト用以外では使用しないでください。 +.RE +.PP +\-protected +.RS 4 +\fItrue\fRまたは\fIfalse\fRのいずれかの値を指定できます。専用PINリーダーなどの保護された認証パスによってパスワードを指定する必要がある場合、\fItrue\fRを指定します。 +.RE +.PP +\-providerClass \fIprovider\-class\-name\fR +.RS 4 +暗号化サービス・プロバイダが\fIjava\&.security\fRセキュリティ・プロパティ・ファイルに指定されていないときは、そのマスター・クラス・ファイルの名前を指定するときに使用されます。 +.sp +\fI\-providerArg ConfigFilePath\fRオプションとともに使用し、\fIkeytool\fRおよび\fIjarsigner\fRツールは、プロバイダを動的にインストールし、トークン構成ファイルへのパスに\fIConfigFilePath\fRを使用します。次の例は、Oracle PKCS #11プロバイダがセキュリティ・プロパティ・ファイルに構成されていなかった場合に\fIPKCS #11\fRキーストアを一覧表示するコマンドを示しています。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -jarsigner \-keystore NONE \-storetype PKCS11 \\ -.fl - \-providerClass sun.security.pkcs11.SunPKCS11 \\ -.fl - \-providerArg /foo/bar/token.config \\ -.fl +jarsigner \-keystore NONE \-storetype PKCS11 \e + \-providerClass sun\&.security\&.pkcs11\&.SunPKCS11 \e + \-providerArg /mydir1/mydir2/token\&.config \e \-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 キーストアプロバイダインスタンスの内容をリストします。 +.if n \{\ +.RE +.\} +.RE +.PP +\-providerName \fIproviderName\fR +.RS 4 +\fIjava\&.security\fRセキュリティ・プロパティ・ファイル内で2つ以上のプロバイダが構成された場合、\fI\-providerName\fRオプションを使用して、特定のプロバイダ・インスタンスを対象にすることができます。このオプションの引数は、プロバイダの名前です。 +.sp +Oracle PKCS #11プロバイダの場合、\fIproviderName\fRは\fISunPKCS11\-\fR\fITokenName\fRという形式になります。ここで、構成属性の表で詳細に説明されているように、\fITokenName\fRは、プロバイダ・インスタンスが構成された名前の接尾辞です。たとえば、次のコマンドは、名前接尾辞\fISmartCard\fRの\fIPKCS #11\fRキーストア・プロバイダ・インスタンスの内容を一覧表示します。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -jarsigner \-keystore NONE \-storetype PKCS11 \\ -.fl - \-providerName SunPKCS11\-SmartCard \\ -.fl +jarsigner \-keystore NONE \-storetype PKCS11 \e + \-providerName SunPKCS11\-SmartCard \e \-list -.fl -\fP .fi -.TP 3 -できますjavaoption -指定された \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 ファイルへのパスを指定する例を示します。 +.if n \{\ +.RE +.\} +.RE +.PP +\-J\fIjavaoption\fR +.RS 4 +指定された\fIjavaoption\fR文字列をJavaインタプリタに直接渡します。\fIjarsigner\fRコマンドは、インタプリタに対するラッパーです。このオプションには、空白を含めることはできません。このオプションは、実行環境またはメモリー使用を調整する場合に便利です。指定できるインタプリタ・オプションを一覧表示するには、コマンドラインで\fIjava \-h\fRまたは\fIjava \-X\fRと入力してください。 +.RE +.PP +\-tsa \fIurl\fR +.RS 4 +\fI\-tsa http://example\&.tsa\&.url\fRがJARファイルの署名時にコマンドラインにある場合、署名のタイムスタンプが生成されます。URL +\fIhttp://example\&.tsa\&.url\fRは、Time Stamping Authority (TSA)の場所を特定し、\fI\-tsacert\fRオプションを指定して検出されたURLをオーバーライドします。\fI\-tsa\fRオプションでは、TSAの公開鍵証明書をキーストアに配置する必要はありません。 +.sp +タイムスタンプを生成するために、\fIjarsigner\fRは、RFC 3161で定義されているタイムスタンプ・プロトコル(TSP)を使用してTSAと通信します。成功すると、TSAによって返されたタイムスタンプ・トークンは、署名ブロック・ファイルの署名とともに保存されます。 +.RE +.PP +\-tsacert \fIalias\fR +.RS 4 +\fI\-tsacert alias\fRがJARファイルの署名時にコマンドラインにある場合、署名のタイムスタンプが生成されます。別名は、キーストア内の有効なTSAの公開鍵証明書を特定します。エントリの証明書で、TSAの場所を特定するURLを含むSubject Information Access拡張機能が確認されます。 +.sp +\fI\-tsacert\fRオプションを使用する場合は、TSAの公開鍵証明書がキーストアに配置されている必要があります。 +.RE +.PP +\-tsapolicyid \fIpolicyid\fR +.RS 4 +TSAサーバーに送信するポリシーIDを識別するオブジェクト識別子(OID)を指定します。このオプションを指定しない場合、ポリシーIDは送信されず、TSAサーバーはデフォルトのポリシーIDを選択します。 +.sp +オブジェクト識別子は、ITU Telecommunication Standardization Sector (ITU\-T)標準であるX\&.696によって定義されます。これらの識別子は、通常、\fI1\&.2\&.3\&.4\fRなどの、負ではない数字のピリオド区切りのセットです。 +.RE +.PP +\-altsigner \fIclass\fR +.RS 4 +このオプションは、代替署名メカニズムを指定します。完全修飾クラス名は、\fIcom\&.sun\&.jarsigner\&.ContentSigner\fR抽象クラスを拡張するクラス・ファイルを識別します。このクラス・ファイルへのパスは、\fI\-altsignerpath\fRオプションによって定義されます。\fI\-altsigner\fRオプションを使用した場合、\fIjarsigner\fRコマンドでは、指定されたクラスによって提供される署名メカニズムを使用します。それ以外の場合、\fIjarsigner\fRコマンドはデフォルトの署名メカニズムを使用します。 +.sp +たとえば、\fIcom\&.sun\&.sun\&.jarsigner\&.AuthSigner\fRという名前のクラスが提供する署名メカニズムを使用するには、jarsignerのオプション\fI\-altsigner com\&.sun\&.jarsigner\&.AuthSigner\fRを使用します。 +.RE +.PP +\-altsignerpath \fIclasspathlist\fR +.RS 4 +クラス・ファイルおよびそれが依存するJARファイルへのパスを指定します。\fI\-altsigner\fRオプションを使用して、クラス・ファイル名を指定します。クラス・ファイルがJARファイル内にある場合、このオプションでは、そのJARファイルへのパスを指定します。 +.sp +絶対パスまたは現在のディレクトリへの相対パスを指定できます。\fIclasspathlist\fRに複数のパスやJARファイルが含まれる場合、それらを、Oracle Solarisの場合はコロン(:)で、Windowsの場合はセミコロン(;)で、それぞれ区切ります。目的のクラスがすでに検索パス内にある場合は、このオプションは不要です。 +.sp +次の例では、クラス・ファイルを含むJARファイルへのパスを指定する方法を示します。JARファイル名を含めます。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -\-altsignerpath /home/user/lib/authsigner.jar -.fl -\fP +\-altsignerpath /home/user/lib/authsigner\&.jar .fi -.LP -JAR ファイル名が含まれていることに注意してください。 -.LP -クラスファイルを含む JAR ファイルへのパスを指定する例を示します。 +.if n \{\ +.RE +.\} +次の例では、クラス・ファイルを含むJARファイルへのパスを指定する方法を示します。JARファイル名を省略します。 +.sp +.if n \{\ +.RS 4 +.\} .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 つのエントリ (およびそれ以上)」として要約されて表示されます。詳細は例の項を参照してください。 +.if n \{\ +.RE +.\} +.RE +.PP +\-strict +.RS 4 +署名または検証処理中に、コマンドにより警告メッセージが発行される場合があります。このオプションを指定すると、コマンドにより検出された重大な警告メッセージがツールの終了コードに反映されます。エラーと警告を参照してください。 +.RE +.PP +\-verbose \fIsuboptions\fR +.RS 4 +検証処理の場合、\fI\-verbose\fRオプションには、表示する情報の量を決定するサブオプションを指定します。\fI\-certs\fRオプションも指定した場合、デフォルト・モード(またはサブオプション\fIall\fR)では、エントリが処理されるたびに各エントリが表示され、その後にJARファイルの各署名者の証明書情報も表示されます。\fI\-certs\fRおよび\fI\-verbose:grouped\fRサブオプションを指定した場合、同じ署名者情報を持つエントリが、その証明書情報とともに、グループ化されて表示されます。\fI\-certs\fRおよび\fI\-verbose:summary\fRサブオプションを指定した場合、同じ署名者情報を持つエントリが、その証明書情報とともに、グループ化されて表示されます。各エントリの詳細は、\fI1つのエントリ(以上)\fRにまとめられて表示されます。例を参照してください。 +.RE +.SH "エラーと警告" +.PP +署名または検証プロセス中に、\fIjarsigner\fRコマンドで、様々なエラーまたは警告が発行される可能性があります。 +.PP +障害がある場合、\fIjarsigner\fRコマンドはコード1で終了します。障害はないが、1つ以上の重大な警告がある場合、\fI\-strict\fRオプションが指定されて\fBいない\fR場合は、\fIjarsigner\fRコマンドはコード0で終了し、\fI\-strict\fRが指定されている場合は警告コードのOR値で終了します。情報警告のみがある、または警告がまったくない場合、コマンドは常にコード0で終了します。 +.PP +たとえば、エントリの署名に使用される証明書が期限切れで、ファイルの署名を許可しないKeyUsage拡張機能を使用している場合、\fI\-strict\fRオプションが指定されていると、\fIjarsigner\fRコマンドはコード12 (=4+8)で終了します。 +.PP +\fB注意:\fR +UNIXベースのオペレーティング・システムでは0から255までの値のみが有効のため、終了コードは再利用されます。 +.PP +次のセクションでは、\fIjarsigner\fRコマンドにより発行できるエラーおよび警告の名前、コード、説明を記述します。 +.SS "障害" +.PP +コマンドライン解析エラー、JARファイルに署名する鍵ペアを検索できない、または署名付きJARファイルの検証失敗など(限定されません)、\fIjarsigner\fRコマンドの失敗理由。 +.PP +failure +.RS 4 +コード1。署名または検証が失敗します。 +.RE +.SS "重大な警告" +.PP +\fB注意:\fR +\fI\-strict\fRオプションを指定した場合、重大な警告はエラーとして報告されます。 +.PP +JARファイルの署名に使用する証明書にエラーがある、または署名付きJARファイルに他の問題があるなど、\fIjarsigner\fRコマンドが重大な警告を発行する理由。 +.PP +hasExpiredCert +.RS 4 +コード4。このjarには、署名者証明書が期限切れのエントリが含まれています。 +.RE +.PP +notYetValidCert +.RS 4 +コード4。このjarには、署名者証明書がまだ有効になっていないエントリが含まれています。 +.RE +.PP +chainNotValidated +.RS 4 +コード4。このjarには、証明書チェーンが正しく検証できないエントリが含まれています。 +.RE +.PP +badKeyUsage +.RS 4 +コード8。このJARには、署名者証明書のKeyUsage拡張機能がコード署名を許可しないエントリが含まれています。 +.RE +.PP +badExtendedKeyUsage +.RS 4 +コード8。このjarには、署名者証明書のExtendedKeyUsage拡張機能がコード署名を許可しないエントリが含まれています。 +.RE +.PP +badNetscapeCertType +.RS 4 +コード8。このjarには、署名者証明書のNetscapeCertType拡張機能がコード署名を許可しないエントリが含まれています。 +.RE +.PP +hasUnsignedEntry +.RS 4 +コード16。このjarには、整合性チェックをしていない未署名のエントリが含まれています。 +.RE +.PP +notSignedByAlias +.RS 4 +コード32。このjarには、指定された別名によって署名されていない署名済エントリが含まれています。 +.RE +.PP +aliasNotInStore +.RS 4 +コード32。このjarには、このキーストア内の別名によって署名されていない署名済エントリが含まれます。 +.RE +.SS "情報警告" +.PP +情報警告には、エラーではないが不適切とみなされるものが含まれます。コードはありません。 +.PP +hasExpiringCert +.RS 4 +このjarには、署名者証明書が6か月以内に期限切れとなるエントリが含まれています。 +.RE +.PP +noTimestamp +.RS 4 +このjarには、タイムスタンプを含まない署名が含まれています。タイムスタンプなしでは、署名者証明書の有効期限(\fIYYYY\-MM\-DD\fR)後または将来の取消日後、ユーザーはこのJARファイルを検証できない場合があります。 .RE - -.LP .SH "例" -.LP -.SS -JAR ファイルの署名 -.LP -.LP -bundle.jar という名前の JAR ファイルがあるとします。このファイルに、キーストアの別名が jane であるユーザーの非公開鍵を使って、署名を付けるとします。この場合、次のコマンドを実行すると、JAR ファイルに署名を付けて sbundle.jar という署名付き JAR ファイルを作成できます。 -.LP +.SS "JARファイルの署名" +.PP +次のコマンドを使用して、キーストア別名が\fIworking\fRディレクトリの\fImystore\fRという名前のキーストアにある\fIjane\fRであるユーザーの秘密鍵でbundle\&.jarに署名し、署名付きJARファイルに\fIsbundle\&.jar\fRという名前を付けます。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl - jarsigner \-keystore /working/mystore \-storepass \fP\f4<キーストアのパスワード>\fP\f3 -.fl - \-keypass \fP\f4<非公開鍵のパスワード>\fP\f3 \-signedjar sbundle.jar bundle.jar jane -.fl -\fP +jarsigner \-keystore /working/mystore + \-storepass + \-keypass + \-signedjar sbundle\&.jar bundle\&.jar jane .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 のアイデンティティーデータベースからの署名者別名を認識し、これらを対象に処理を行うことができます。 +.if n \{\ .RE - -.LP -.LP -次の表は、JDK 1.1.x で署名された JAR ファイルが、Java 2 プラットフォームでどのように扱われるかを示しています。 -.LP -.LP -.TS -.if \n+(b.=1 .nr d. \n(.c-\n(c.-1 -.de 35 -.ps \n(.s -.vs \n(.vu -.in \n(.iu -.if \n(.u .fi -.if \n(.j .ad -.if \n(.j=0 .na -.. +.\} +.PP +前述のコマンドでは\fI\-sigfile\fRが指定されていないため、署名付きJARファイルに格納される生成された\fI\&.SF\fRファイルおよび\fI\&.DSA\fRファイルの名前は、別名に基づいたデフォルトの名前になります。これらは、名前付きの\fIJANE\&.SF\fRおよび\fIJANE\&.DSA\fRです。 +.PP +ストアのパスワードおよび秘密鍵のパスワードを求められる場合、前述のコマンドを短縮して、次のことを実行できます。 +.sp +.if n \{\ +.RS 4 +.\} .nf -.nr #~ 0 -.if n .nr #~ 0.6n -.ds #d .d -.if \(ts\n(.z\(ts\(ts .ds #d nl -.fc -.nr 33 \n(.s -.rm 80 81 82 83 84 -.nr 34 \n(.lu -.eo -.am 80 -.br -.di a+ -.35 -.ft \n(.f -.ll \n(34u*1u/6u -.if \n(.l<\n(80 .ll \n(80u -.in 0 -\f3JAR ファイルのタイプ\fP -.br -.di -.nr a| \n(dn -.nr a- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di b+ -.35 -.ft \n(.f -.ll \n(34u*1u/6u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -\f31.1 データベース内のアイデンティティー\fP -.br -.di -.nr b| \n(dn -.nr b- \n(dl -.. -.ec \ -.eo -.am 82 -.br -.di c+ -.35 -.ft \n(.f -.ll \n(34u*1u/6u -.if \n(.l<\n(82 .ll \n(82u -.in 0 -\f31.1 データベースから Java 2 Platform キーストアにインポートされる信頼できるアイデンティティー (4)\fP -.br -.di -.nr c| \n(dn -.nr c- \n(dl -.. -.ec \ -.eo -.am 83 -.br -.di d+ -.35 -.ft \n(.f -.ll \n(34u*1u/6u -.if \n(.l<\n(83 .ll \n(83u -.in 0 -\f3ポリシーファイルがアイデンティティー/別名に特権を与える\fP -.br -.di -.nr d| \n(dn -.nr d- \n(dl -.. -.ec \ -.eo -.am 84 -.br -.di e+ -.35 -.ft \n(.f -.ll \n(34u*1u/6u -.if \n(.l<\n(84 .ll \n(84u -.in 0 -すべてのコードに与えられるデフォルトの特権 -.br -.di -.nr e| \n(dn -.nr e- \n(dl -.. -.ec \ -.eo -.am 84 -.br -.di f+ -.35 -.ft \n(.f -.ll \n(34u*1u/6u -.if \n(.l<\n(84 .ll \n(84u -.in 0 -すべてのコードに与えられるデフォルトの特権 -.br -.di -.nr f| \n(dn -.nr f- \n(dl -.. -.ec \ -.eo -.am 84 -.br -.di g+ -.35 -.ft \n(.f -.ll \n(34u*1u/6u -.if \n(.l<\n(84 .ll \n(84u -.in 0 -すべてのコードに与えられるデフォルトの特権 -.br -.di -.nr g| \n(dn -.nr g- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di h+ -.35 -.ft \n(.f -.ll \n(34u*1u/6u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -あり/信頼できない -.br -.di -.nr h| \n(dn -.nr h- \n(dl -.. -.ec \ -.eo -.am 84 -.br -.di i+ -.35 -.ft \n(.f -.ll \n(34u*1u/6u -.if \n(.l<\n(84 .ll \n(84u -.in 0 -すべてのコードに与えられるデフォルトの特権(3) -.br -.di -.nr i| \n(dn -.nr i- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di j+ -.35 -.ft \n(.f -.ll \n(34u*1u/6u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -あり/信頼できない -.br -.di -.nr j| \n(dn -.nr j- \n(dl -.. -.ec \ -.eo -.am 84 -.br -.di k+ -.35 -.ft \n(.f -.ll \n(34u*1u/6u -.if \n(.l<\n(84 .ll \n(84u -.in 0 -すべてのコードに与えられるデフォルトの特権(1,3) -.br -.di -.nr k| \n(dn -.nr k- \n(dl -.. -.ec \ -.eo -.am 84 -.br -.di l+ -.35 -.ft \n(.f -.ll \n(34u*1u/6u -.if \n(.l<\n(84 .ll \n(84u -.in 0 -すべてのコードに与えられるデフォルトの特権とポリシーファイル内で与えられる特権 -.br -.di -.nr l| \n(dn -.nr l- \n(dl -.. -.ec \ -.eo -.am 84 -.br -.di m+ -.35 -.ft \n(.f -.ll \n(34u*1u/6u -.if \n(.l<\n(84 .ll \n(84u -.in 0 -すべてのコードに与えられるデフォルトの特権とポリシーファイル内で与えられる特権(2) -.br -.di -.nr m| \n(dn -.nr m- \n(dl -.. -.ec \ -.35 -.nf -.ll \n(34u -.nr 80 0 -.nr 38 \w署名付き JAR -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w署名のない JAR -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w署名付き JAR -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w署名付き JAR -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w署名付き JAR -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w署名付き JAR -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w署名付き JAR -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w署名付き JAR -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w署名付き JAR -.if \n(80<\n(38 .nr 80 \n(38 -.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なし -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \wなし -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \wなし -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \wなし -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \wあり/信頼できる -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \wあり/信頼できる -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \wあり/信頼できる -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \wあり/信頼できる -.if \n(81<\n(38 .nr 81 \n(38 -.81 -.rm 81 -.nr 38 \n(b- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(h- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(j- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 82 0 -.nr 38 \wなし -.if \n(82<\n(38 .nr 82 \n(38 -.nr 38 \wなし -.if \n(82<\n(38 .nr 82 \n(38 -.nr 38 \wあり -.if \n(82<\n(38 .nr 82 \n(38 -.nr 38 \wなし -.if \n(82<\n(38 .nr 82 \n(38 -.nr 38 \wなし -.if \n(82<\n(38 .nr 82 \n(38 -.nr 38 \wあり -.if \n(82<\n(38 .nr 82 \n(38 -.nr 38 \wあり -.if \n(82<\n(38 .nr 82 \n(38 -.nr 38 \wなし -.if \n(82<\n(38 .nr 82 \n(38 -.nr 38 \wあり -.if \n(82<\n(38 .nr 82 \n(38 -.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なし -.if \n(83<\n(38 .nr 83 \n(38 -.nr 38 \wなし -.if \n(83<\n(38 .nr 83 \n(38 -.nr 38 \wなし -.if \n(83<\n(38 .nr 83 \n(38 -.nr 38 \wなし -.if \n(83<\n(38 .nr 83 \n(38 -.nr 38 \wあり -.if \n(83<\n(38 .nr 83 \n(38 -.nr 38 \wあり -.if \n(83<\n(38 .nr 83 \n(38 -.nr 38 \wあり -.if \n(83<\n(38 .nr 83 \n(38 -.nr 38 \wなし -.if \n(83<\n(38 .nr 83 \n(38 -.nr 38 \wなし -.if \n(83<\n(38 .nr 83 \n(38 -.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 -.if \n(84<\n(38 .nr 84 \n(38 -.nr 38 \wすべての特権 -.if \n(84<\n(38 .nr 84 \n(38 -.nr 38 \wすべての特権 (1) -.if \n(84<\n(38 .nr 84 \n(38 -.nr 38 \wすべての特権 (1) -.if \n(84<\n(38 .nr 84 \n(38 -.84 -.rm 84 -.nr 38 \n(e- -.if \n(84<\n(38 .nr 84 \n(38 -.nr 38 \n(f- -.if \n(84<\n(38 .nr 84 \n(38 -.nr 38 \n(g- -.if \n(84<\n(38 .nr 84 \n(38 -.nr 38 \n(i- -.if \n(84<\n(38 .nr 84 \n(38 -.nr 38 \n(k- -.if \n(84<\n(38 .nr 84 \n(38 -.nr 38 \n(l- -.if \n(84<\n(38 .nr 84 \n(38 -.nr 38 \n(m- -.if \n(84<\n(38 .nr 84 \n(38 -.35 -.nf -.ll \n(34u -.nr 38 1n -.nr 79 0 -.nr 40 \n(79+(0*\n(38) -.nr 80 +\n(40 -.nr 41 \n(80+(3*\n(38) -.nr 81 +\n(41 -.nr 42 \n(81+(3*\n(38) -.nr 82 +\n(42 -.nr 43 \n(82+(3*\n(38) -.nr 83 +\n(43 -.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 1078 file Input is too wide - \n(TW units -.fc   -.nr #T 0-1 -.nr #a 0-1 -.eo -.de T# -.ds #d .d -.if \(ts\n(.z\(ts\(ts .ds #d nl -.mk ## -.nr ## -1v -.ls 1 -.ls -.. -.ec -.ne \n(a|u+\n(.Vu -.ne \n(b|u+\n(.Vu -.ne \n(c|u+\n(.Vu -.ne \n(d|u+\n(.Vu -.if (\n(a|+\n(#^-1v)>\n(#- .nr #- +(\n(a|+\n(#^-\n(#--1v) -.if (\n(b|+\n(#^-1v)>\n(#- .nr #- +(\n(b|+\n(#^-\n(#--1v) -.if (\n(c|+\n(#^-1v)>\n(#- .nr #- +(\n(c|+\n(#^-\n(#--1v) -.if (\n(d|+\n(#^-1v)>\n(#- .nr #- +(\n(d|+\n(#^-\n(#--1v) -.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 -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(40u -.in +\n(37u -.a+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.b+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(##u-1v -.nr 37 \n(42u -.in +\n(37u -.c+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(##u-1v -.nr 37 \n(43u -.in +\n(37u -.d+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(e|u+\n(.Vu -.if (\n(e|+\n(#^-1v)>\n(#- .nr #- +(\n(e|+\n(#^-\n(#--1v) -.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' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(44u -.in +\n(37u -.e+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(f|u+\n(.Vu -.if (\n(f|+\n(#^-1v)>\n(#- .nr #- +(\n(f|+\n(#^-\n(#--1v) -.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' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(44u -.in +\n(37u -.f+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(g|u+\n(.Vu -.if (\n(g|+\n(#^-1v)>\n(#- .nr #- +(\n(g|+\n(#^-\n(#--1v) -.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' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(44u -.in +\n(37u -.g+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(h|u+\n(.Vu -.ne \n(i|u+\n(.Vu -.if (\n(h|+\n(#^-1v)>\n(#- .nr #- +(\n(h|+\n(#^-\n(#--1v) -.if (\n(i|+\n(#^-1v)>\n(#- .nr #- +(\n(i|+\n(#^-\n(#--1v) -.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' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.h+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(##u-1v -.nr 37 \n(44u -.in +\n(37u -.i+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(j|u+\n(.Vu -.ne \n(k|u+\n(.Vu -.if (\n(j|+\n(#^-1v)>\n(#- .nr #- +(\n(j|+\n(#^-\n(#--1v) -.if (\n(k|+\n(#^-1v)>\n(#- .nr #- +(\n(k|+\n(#^-\n(#--1v) -.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' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.j+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(##u-1v -.nr 37 \n(44u -.in +\n(37u -.k+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(l|u+\n(.Vu -.if (\n(l|+\n(#^-1v)>\n(#- .nr #- +(\n(l|+\n(#^-\n(#--1v) -.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' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(44u -.in +\n(37u -.l+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(m|u+\n(.Vu -.if (\n(m|+\n(#^-1v)>\n(#- .nr #- +(\n(m|+\n(#^-\n(#--1v) -.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' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(44u -.in +\n(37u -.m+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.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'すべての特権 -.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) -.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) -.fc -.nr T. 1 -.T# 1 -.35 -.rm a+ -.rm b+ -.rm c+ -.rm d+ -.rm e+ -.rm f+ -.rm g+ -.rm h+ -.rm i+ -.rm j+ -.rm k+ -.rm l+ -.rm m+ -.TE -.if \n-(b.=0 .nr c. \n(.c-\n(d.-50 - -.LP -.LP -注 \- -.LP -.RS 3 -.TP 3 -1. -ポリシーファイル内にアイデンティティー/別名についての言及がある場合、それをキーストアにインポートして、ポリシーファイルの設定が与えられた特権に反映されるようにする必要があります。 -.TP 3 -2. -ポリシーファイル/キーストアの組み合わせは、アイデンティティーデータベース内の信頼できるアイデンティティーよりも優先されます。 -.TP 3 -3. -Java 2 プラットフォームでは、信頼できないアイデンティティーは無視されます。 -.TP 3 -4. -Java 2 SDK キーストアにインポートできるのは、信頼できるアイデンティティーだけです。 -.RE - -.LP -.SH "関連項目" -.LP -.RS 3 -.TP 2 -o -jar(1) ツールのドキュメント -.TP 2 -o -keytool(1) ツールのドキュメント -.TP 2 -o -.na -\f4jarsigner\fP\f2 ツールの使用例については、\fP @ +jarsigner \-keystore /working/mystore + \-signedjar sbundle\&.jar bundle\&.jar jane .fi -http://download.oracle.com/javase/tutorial/security/index.html -.na -\f2「Java チュートリアル」\fP\f4の\fP @ -.fi -http://download.oracle.com/javase/tutorial/index.html「Security」\f3を参照\fP +.if n \{\ .RE - -.LP +.\} +.PP +キーストアがデフォルトのキーストア(ホーム・ディレクトリ内の\&.keystore)である場合、次に示すように、キーストアを指定する必要がありません。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +jarsigner \-signedjar sbundle\&.jar bundle\&.jar jane +.fi +.if n \{\ +.RE +.\} +.PP +入力JARファイル(bundle\&.jar)を署名付きJARファイルで上書きする場合、次のように\fI\-signedjar\fRオプションを指定する必要はありません。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +jarsigner bundle\&.jar jane +.fi +.if n \{\ +.RE +.\} +.SS "署名付きJARファイルの検証" +.PP +署名付きJARファイルを検証して、署名が有効でJARファイルが改ざんされなかったことを確認するには、次のようなコマンドを使用します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +jarsigner \-verify sbundle\&.jar +.fi +.if n \{\ +.RE +.\} +.PP +検証が成功すると、\fIjar verified\fRが表示されます。そうでない場合は、エラー・メッセージが表示されます。\fI\-verbose\fRオプションを使用すると、詳細情報を取得できます。\fIjarsigner\fRを\fI\-verbose\fRオプションとともに使用するサンプルを、次に示します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +jarsigner \-verify \-verbose sbundle\&.jar + 198 Fri Sep 26 16:14:06 PDT 1997 META\-INF/MANIFEST\&.MF + 199 Fri Sep 26 16:22:10 PDT 1997 META\-INF/JANE\&.SF + 1013 Fri Sep 26 16:22:10 PDT 1997 META\-INF/JANE\&.DSA + smk 2752 Fri Sep 26 16:12:30 PDT 1997 AclEx\&.class + smk 849 Fri Sep 26 16:12:46 PDT 1997 test\&.class + + s = signature was verified + m = entry is listed in manifest + k = at least one certificate was found in keystore + + jar verified\&. +.fi +.if n \{\ +.RE +.\} +.SS "証明書情報を使用した検証" +.PP +\fI\-certs\fRオプションを\fI\-verify\fRおよび\fI\-verbose\fRオプションとともに指定した場合、JARファイルの各署名者の証明書情報が出力に含まれます。この情報には、証明書タイプ、署名者の識別名情報(X\&.509証明書の場合)が含まれ、丸カッコ内には、JARファイルの公開鍵証明書がキーストア・エントリの公開鍵証明書に一致する場合の署名者のキーストア別名が含まれます。たとえば、次のようになります。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +jarsigner \-keystore /working/mystore \-verify \-verbose \-certs myTest\&.jar + + 198 Fri Sep 26 16:14:06 PDT 1997 META\-INF/MANIFEST\&.MF + 199 Fri Sep 26 16:22:10 PDT 1997 META\-INF/JANE\&.SF + 1013 Fri Sep 26 16:22:10 PDT 1997 META\-INF/JANE\&.DSA + 208 Fri Sep 26 16:23:30 PDT 1997 META\-INF/JAVATEST\&.SF + 1087 Fri Sep 26 16:23:30 PDT 1997 META\-INF/JAVATEST\&.DSA + smk 2752 Fri Sep 26 16:12:30 PDT 1997 Tst\&.class + + X\&.509, CN=Test Group, OU=Java Software, O=Oracle, L=CUP, S=CA, C=US (javatest) + X\&.509, CN=Jane Smith, OU=Java Software, O=Oracle, L=cup, S=ca, C=us (jane) + + s = signature was verified + m = entry is listed in manifest + k = at least one certificate was found in keystore + + jar verified\&. +.fi +.if n \{\ +.RE +.\} +.PP +署名者の証明書がX\&.509証明書ではない場合、識別名情報は表示されません。その場合には、証明書のタイプと別名のみが表示されます。たとえば、証明書がPGP証明書で、別名が\fIbob\fRである場合、\fIPGP, (bob)\fRを取得します。 +.SH "関連項目" +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +jar(1) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +keytool(1) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +http://docs\&.oracle\&.com/javase/tutorial/security/index\&.htmlにある +「コース: Java SEのセキュリティ機能」 +.RE +.br +'pl 8.5i +'bp diff --git a/jdk/src/linux/doc/man/ja/java.1 b/jdk/src/linux/doc/man/ja/java.1 index 062d3209af8..f134a028e6c 100644 --- a/jdk/src/linux/doc/man/ja/java.1 +++ b/jdk/src/linux/doc/man/ja/java.1 @@ -1,509 +1,2553 @@ -." 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 -." 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. -." -.TH java 1 "07 May 2011" - -.LP -.SH "名前" -java \- Java アプリケーション起動ツール -.LP -.RS 3 -.TP 2 -o -形式 -.TP 2 -o -説明 -.TP 2 -o -オプション -.TP 2 -o -関連項目 -.RE - -.LP -.SH "形式" -.LP +'\" t +.\" Copyright (c) 1994, 2013, Oracle and/or its affiliates. All rights reserved. +.\" Title: java +.\" Language: English +.\" Date: 2013年11月21日 +.\" SectDesc: 基本ツール +.\" Software: JDK 8 +.\" Arch: 汎用 +.\" +.\" 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. +.\" +.pl 99999 +.TH "java" "1" "2013年11月21日" "JDK 8" "基本ツール" +.\" ----------------------------------------------------------------- +.\" * Define some portability stuff +.\" ----------------------------------------------------------------- +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.\" http://bugs.debian.org/507673 +.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" ----------------------------------------------------------------- +.\" * set default formatting +.\" ----------------------------------------------------------------- +.\" disable hyphenation +.nh +.\" disable justification (adjust text to left margin only) +.ad l +.\" ----------------------------------------------------------------- +.\" * MAIN CONTENT STARTS HERE * +.\" ----------------------------------------------------------------- +.SH "NAME" +java \- Javaアプリケーションを起動します。 +.SH "概要" +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl - \fP\f3java\fP [ options ] class [ argument ... ] -.fl - \f3java\fP [ options ] \f3\-jar\fP file.jar [ argument ... ] -.fl +\fIjava\fR [\fIoptions\fR] \fIclassname\fR [\fIargs\fR] .fi - -.LP -.RS 3 -.TP 3 -options -コマンド行オプション。 -.TP 3 -class -呼び出されるクラスの名前 -.TP 3 -file.jar -呼び出される JAR ファイルの名前。必ず \f2\-jar\fP とともに使用する -.TP 3 -argument -\f3main\fP 関数に渡される引数 +.if n \{\ +.RE +.\} +.sp +.if n \{\ +.RS 4 +.\} +.nf +\fIjava\fR [\fIoptions\fR] \fI\-jar\fR \fIfilename\fR [\fIargs\fR] +.fi +.if n \{\ +.RE +.\} +.PP +\fIoptions\fR +.RS 4 +空白で区切られたコマンドライン・オプション。オプションを参照してください。 +.RE +.PP +\fIclassname\fR +.RS 4 +起動するクラスの名前。 +.RE +.PP +\fIfilename\fR +.RS 4 +呼び出されるJavaアーカイブ(JAR)ファイルの名前。\fI\-jar\fRオプションと一緒にのみ使用します。 +.RE +.PP +\fIargs\fR +.RS 4 +空白で区切られた\fImain()\fRメソッドに渡される引数。 .RE - -.LP .SH "説明" -.LP -.LP -\f3java\fP ツールは、Java アプリケーションを起動します。java ツールは、Java Runtime Environment を起動したあと、指定されたクラスをロードし、そのクラスの \f3main\fP メソッドを呼び出すことにより、Java アプリケーションを起動します。 -.LP -.LP -このメソッドは、public および static として宣言する必要があります。 また、値を返してはいけません。 さらに、 \f2String\fP 配列をパラメータとして指定できなければなりません。メソッドの宣言は、次のようになっていなければなりません。 -.LP +.PP +\fIjava\fRコマンドはJavaアプリケーションを開始します。Java Runtime Environment (JRE)を起動した後、指定したクラスをロードし、そのクラスの\fImain()\fRメソッドを呼び出すことにより、これを行います。このメソッドは、\fIpublic\fRおよび\fIstatic\fRとして宣言する必要があります。また、値は返せません。さらに、\fIString\fR配列をパラメータとして指定できる必要があります。メソッド宣言は次の形式を含みます。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -public static void main(String args[]) -.fl -\fP +public static void main(String[] args) .fi - -.LP -.LP -デフォルトでは、コマンド行オプション以外の最初の引数が、呼び出されるクラスの名前になります。この名前には、完全指定のクラス名を使用する必要があります。\f3\-jar\fP オプションを指定した場合、コマンド行オプション以外の最初の引数が、アプリケーションのクラスファイルとリソースファイルを含む \f3JAR\fP アーカイブの名前になります。この場合、マニフェストの \f3Main\-Class\fP ヘッダーで指定されたクラスが起動クラスになります。 -.LP -.LP -Java Runtime は、ブートストラップクラスパス、インストール型拡張機能、およびユーザークラスパスの 3 箇所から起動クラスと他の使用されているクラスを検索します。 -.LP -.LP -クラス名または JAR ファイル名のあとにある、コマンド行オプション以外の引数は、\f3main\fP 関数に渡されます。 -.LP +.if n \{\ +.RE +.\} +.PP +\fIjava\fRコマンドを使用して、\fImain()\fRメソッドがあるか\fIjavafx\&.application\&.Application\fRを拡張するクラスをロードすることで、JavaFXアプリケーションを起動できます。後者の場合、起動ツールは\fIApplication\fRクラスのインスタンスを構成し、その\fIinit()\fRメソッドをコールし、\fIstart(javafx\&.stage\&.Stage)\fRメソッドをコールします。 +.PP +デフォルトでは、\fIjava\fRコマンドのオプションではない最初の引数は、呼び出されるクラスの完全修飾名です。\fI\-jar\fRオプションを指定した場合、その引数は、アプリケーションのクラス・ファイルとリソース・ファイルを含むJARファイルの名前になります。起動クラスは、ソース・コードの\fIMain\-Class\fRマニフェスト・ヘッダーによって指定される必要があります。 +.PP +JREは、ブートストラップ・クラス・パス、インストール済拡張機能およびユーザーのクラス・パスの3箇所から、起動クラス(およびアプリケーションで使用されている他のクラス)を検索します。 +.PP +クラス・ファイル名またはJARファイル名の後の引数は、\fImain()\fRメソッドに渡されます。 .SH "オプション" -.LP -.LP -起動ツールには、現在の実行環境および将来のリリースでサポートされる標準オプションがあります。また、仮想マシンの現在の実装では、非標準オプションのセットもサポートされます。これは、将来のリリースで変更される可能性があります。 -.LP -.SH "標準オプション" -.LP -.RS 3 -.TP 3 -\-client -.LP -Java HotSpot Client VM を選択します。64 ビット対応 JDK は現時点では、このオプションを無視し、代わりに Java Hotspot Server VM を使用します。 -.LP -デフォルトの VM の選択については、 -.na -\f2「サーバー \- クラスマシンの検出」\fP @ -.fi -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 オプションが暗黙的に選択されます。 -.LP -デフォルトの VM の選択については、 -.na -\f2「サーバー \- クラスマシンの検出」\fP @ -.fi -http://java.sun.com/javase/6/docs/technotes/guides/vm/server\-class.htmlを参照してください。 -.TP 3 -\-agentlib:libname[=options] -ネイティブエージェントライブラリ \f2libname\fP をロードします。たとえば次のように指定します。 -.LP -\-agentlib:hprof -.LP -\-agentlib:jdwp=help -.LP -\-agentlib:hprof=help -.LP -詳細については、 -.na -\f2「JVMTI エージェントのコマンド行オプション」\fP @ -.fi -http://java.sun.com/javase/6/docs/platform/jvmti/jvmti.html#startingを参照してください。 -.TP 3 -\-agentpath:pathname[=options] -フルパス名を使用して、ネーティブエージェントライブラリをロードします。詳細については、 -.na -\f2「JVMTI エージェントのコマンド行オプション」\fP @ -.fi -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 環境変数の設定がオーバーライドされます。 -.LP -\f3\-classpath\fP も \f3\-cp\fP も使用されず、\f3CLASSPATH\fP も設定されていない場合、ユーザークラスパスは現在のディレクトリ (\f4.\fP) になります。 -.LP -便宜上、 \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 プログラムが展開されていないワイルドカードを認識することはありません。 -.LP -クラスパスの詳細は、 -.na -\f2「クラスパスの設定」\fP @ -.fi -http://java.sun.com/javase/6/docs/technotes/tools/index.html#classpathを参照してください。 -.TP 3 -\-Dproperty=value -システムプロパティーの値を設定します。 -.TP 3 -\-d32 -.TP 3 -\-d64 -それぞれ 32 ビット環境、64 ビット環境でプログラムを実行することを要求します。要求された環境がインストールされていないかサポートされていない場合は、エラーが報告されます。 -.LP -現在のところ、Java HotSpot Server VM だけが 64 ビットの操作をサポートしており、\-server オプションを使用する場合は、\-d64 も一緒に使用する必要があります。したがって、\-d64 使用時には「\-client」オプションは無視されます。この仕様は、将来のリリースでは変更になる可能性があります。 -.LP -\f3\-d32\fP と \f3\-d64\fP がどちらも指定されていない場合は、デフォルトとして、32 ビット環境で実行されます。この仕様は、将来のリリースでは変更になる可能性があります。 -.TP 3 -\-enableassertions[:"..." | : ] -.TP 3 -\-ea[:"..." | : ] -アサーションを有効にします。アサーションは、デフォルトでは無効になっています。 -.LP -引数なしの \f3enableassertions\fP または \f3\-ea\fP を指定すると、アサーションが有効になります。「\f2...\fP」で終わる引数を 1 つ指定すると、指定したパッケージとそのサブパッケージ内でアサーションが有効になります。引数として「\f2...\fP」だけを指定すると、現在の作業ディレクトリにある名前のないパッケージ内でアサーションが有効になります。「\f2...\fP」で終わらない引数を 1 つ指定すると、指定したクラス内でアサーションが有効になります。 -.LP -単一コマンド行にこれらのスイッチのインスタンスを複数指定した場合は、指定したスイッチが順番に処理されてからクラスがロードされます。したがって、たとえば、パッケージ \f2com.wombat.fruitbat\fP (サブパッケージを含む) 内でのみアサーションを有効にしてプログラムを実行するには、次のようなコマンドを使用します。 -.nf -\f3 -.fl -java \-ea:com.wombat.fruitbat...

      -.fl -\fP -.fi -.LP -\f3\-enableassertions\fP および \f3\-ea\fP スイッチは、すべてのクラスローダおよびシステムクラスに適用されます。システムクラスにはクラスローダはありません。ただし、この規則には 1 つ例外があります。それは、引数なしの形式でこのスイッチを指定すると、その指定がシステムに適用されない、ということです。この例外を利用すれば、システムクラスを除くすべてのクラスでアサーションを簡単に有効にすることができます。すべてのシステムクラスでアサーションを有効にするために、別のスイッチが用意されています。このあとの \f3\-enablesystemassertions\fP を参照してください。 -.TP 3 -\-disableassertions[:"..." | : ] -.TP 3 -\-da[:"..." | : ] -アサーションを無効にします。これがデフォルトです。 -.LP -引数なしの \f3disableassertions\fP または \f3\-da\fP を指定すると、アサーションが無効になります。「\f2...\fP」で終わる引数を 1 つ指定すると、指定したパッケージとそのサブパッケージ内でアサーションが無効になります。引数として「\f2...\fP」だけを指定すると、現在の作業ディレクトリにある名前のないパッケージ内でアサーションが無効になります。「\f2...\fP」で終わらない引数を 1 つ指定すると、指定したクラス内でアサーションが無効になります。 -.LP -パッケージ \f2com.wombat.fruitbat\fP 内ではアサーションを有効にし、クラス \f2com.wombat.fruitbat.Brickbat\fP 内ではアサーションを無効にしたうえで、プログラムを実行するには、次のようなコマンドを使用します。 -.nf -\f3 -.fl -java \-ea:com.wombat.fruitbat... \-da:com.wombat.fruitbat.Brickbat \fP\f4
      \fP\f3 -.fl -\fP -.fi -.LP -\f3\-disableassertions\fP および \f3\-da\fP スイッチは、すべてのクラスローダおよびシステムクラスに適用されます。システムクラスにはクラスローダはありません。ただし、この規則には 1 つ例外があります。それは、引数なしの形式でこのスイッチを指定すると、その指定がシステムに適用されない、ということです。この例外を利用すれば、システムクラスを除くすべてのクラスでアサーションを簡単に有効にすることができます。すべてのシステムクラスでアサーションを無効にするために、別のスイッチが用意されています。このあとの \f3\-disablesystemassertions\fP を参照してください。 -.TP 3 -\-enablesystemassertions -.TP 3 -\-esa -すべてのシステムクラス内でアサーションを有効にします。つまり、システムクラスについてアサーションのデフォルトステータスを \f2true\fP に設定します。 -.TP 3 -\-disablesystemassertions -.TP 3 -\-dsa -すべてのシステムクラス内でアサーションを無効にします。 -.TP 3 -\-jar -JAR ファイルにカプセル化されたプログラムを実行します。最初の引数は、起動クラスの名前ではなく、JAR ファイルの名前にします。このオプションが機能するには、JAR ファイルのマニフェストに\f3「Main\-Class:\fP\f4classname\fP\f3」\fPという形式の行を指定する必要があります。\f2classname\fP には、アプリケーションの開始位置として機能する \f2public\ static\ void\ main(String[]\ args)\fP メソッドを含むクラスを指定します。JAR ファイルとそのマニフェストについては、jar(1)と、 -.na -\f2Java チュートリアル\fP @ -.fi -http://download.oracle.com/javase/tutorial/deployment/jarの「Trail: Jar Files」を参照してください。 -.LP -このオプションを使用すると、指定した JAR ファイルがすべてのユーザークラスのソースになり、ユーザークラスパスのほかの設定は無視されます。 -.LP -Solaris 8 では、「java \-jar」オプションで実行できる JAR ファイルは、実行権限のセットを保持しています。このため、「java \-jar」を使用しないで実行することも可能です。Java Archive (JAR) ファイル -.na - @ -.fi -http://java.sun.com/javase/6/docs/technotes/guides/jar/index.html -.TP 3 -\-javaagent:jarpath[=options] -Java プログラミング言語エージェントをロードします。 java.lang.instrument を参照してください。 -.na - @ -.fi -http://java.sun.com/javase/6/docs/api/java/lang/instrument/package\-summary.html -.TP 3 -\-jre\-restrict\-search -ユーザープライベートな JRE をバージョン検索に含めます。 -.TP 3 -\-no\-jre\-restrict\-search -ユーザープライベートな JRE をバージョン検索から除外します。 -.TP 3 -\-verbose -.TP 3 -\-verbose:class -クラスがロードされるたびにクラスに関する情報を表示します。 -.TP 3 -\-verbose:gc -ガベージコレクションイベントが発生するたびに報告します。 -.TP 3 -\-verbose:jni -ネイティブメソッドの使用およびその他の Java Native Interface (JNI) アクティビティーに関する情報を報告します。 -.TP 3 -\-version -バージョン情報を表示して終了します。 -.TP 3 -\-version:release -コマンド行に指定されたクラスまたは JAR ファイルが、\f2release\fP で指定されたバージョンを必要としていることを示します。起動された java コマンドのバージョンがこの指定内容を満たさず、かつ適切な実装がシステム上で見つかった場合には、その適切な実装が使用されます。 -.LP -\f2release\fP では、特定のバージョンを指定できるだけでなく、バージョン文字列と呼ばれるバージョンのリストを指定することもできます。バージョン文字列は、いくつかのバージョン範囲を空白で区切った形式の順序付きリストです。バージョン範囲は、バージョン ID、バージョン ID の後にアスタリスク (*) を付加したもの、バージョン ID の後にプラス記号 (+) を付加したもの、2 つのバージョン範囲をアンパサンド (&) で結合したもの、のいずれかになります。アスタリスクはプレフィックス一致を、プラス記号は指定されたバージョン以上を、アンパサンドは 2 つのバージョン範囲の論理積を、それぞれ意味します。次に例を示します。 -.nf -\f3 -.fl -\-version:"1.6.0_13 1.6*&1.6.0_10+" -.fl -\fP -.fi -上記の意味は、バージョン 1.6.0_13、1.6 をバージョン ID プレフィックスに持つ 1.6.0_10 以上のバージョン、のいずれかをクラスまたは JAR ファイルが必要としている、ということです。バージョン文字列の厳密な構文や定義については、「Java Network Launching Protocol & API Specification (JSR\-56)」の「Appendix A」を参照してください。 -.LP -JAR ファイルの場合は通常、バージョン要件をコマンド行に指定するよりも、JAR ファイルのマニフェスト内に指定することが推奨されています。 -.LP -このオプションの使用に関する重要なポリシー情報については、後述の「注」節を参照してください。 -.TP 3 -\-showversion -バージョン情報を表示して続行します。 -.TP 3 -\-? -.TP 3 -\-help -使用法を表示して終了します。 -.TP 3 -\-splash:imagepath -\f2imagepath\fP に指定された画像を含むスプラッシュ画面を表示します。 -.TP 3 -\-X -非標準オプションに関する情報を表示して終了します。 +.PP +\fIjava\fRコマンドは、次のカテゴリに分類できる広範なオプションをサポートしています。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +標準オプション .RE - -.LP -.SS +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} 非標準オプション -.LP -.RS 3 -.TP 3 -\-Xint -インタプリタ専用モードで動作します。ネイティブコードへのコンパイルは無効になり、すべてのバイトコードがインタプリタによって実行されます。Java HotSpot VM に対応するコンパイラが提供するパフォーマンス上の利点は、このモードでは実現されません。 -.TP 3 -\-Xbatch -バックグラウンドコンパイルを無効にします。通常、VM では、バックグラウンドコンパイルが終了するまで、メソッドをバックグラウンドタスクとしてコンパイルし、インタプリタモードでメソッドを実行します。\f2\-Xbatch\fP フラグを指定すると、バックグラウンドコンパイルが無効になり、すべてのメソッドのコンパイルが完了するまでフォアグラウンドタスクとして処理されます。 -.TP 3 -\-Xbootclasspath:bootclasspath -ブートクラスファイルを探すディレクトリ、JAR アーカイブ、および ZIP アーカイブをコロンで区切ったリストで指定します。指定したパスに存在するブートクラスファイルが、Java プラットフォーム JDK に含まれるブートクラスファイルの代わりに使用されます。\f2注: rt.jar 内のクラスをオーバーライドする目的でこのオプションを使用するアプリケーションは、システムに配置しないでください。Java Runtime Environment バイナリコードライセンス違反になります。\fP -.TP 3 -\-Xbootclasspath/a:path -ディレクトリ、JAR アーカイブ、および ZIP アーカイブのパスをコロンで区切って指定します。パスはデフォルトのブートストラップクラスパスのあとに追加されます。 -.TP 3 -\-Xbootclasspath/p:path -ディレクトリ、JAR アーカイブ、および ZIP アーカイブのパスをコロンで区切って指定します。パスはデフォルトのブートストラップクラスパスの前に追加されます。\f2注: rt.jar 内のクラスをオーバーライドする目的でこのオプションを使用するアプリケーションは、システムに配置しないでください。Java Runtime Environment バイナリコードライセンス違反になります。\fP -.TP 3 -\-Xcheck:jni -Java Native Interface (JNI) 機能に対して追加チェックを行います。具体的には、Java 仮想マシンは JNI 要求を処理する前に、JNI 関数に渡されるパラメータと、実行環境のデータを検証します。無効なデータが見つかった場合は、ネイティブコードに問題があることを示しているため、Java 仮想マシンは致命的エラーを発生して終了します。このオプションを使用すると、パフォーマンス低下が予想されます。 -.TP 3 -\-Xfuture -クラスとファイルの形式を厳密にチェックします。下位互換性を保つため、JDK の仮想マシンが実行するデフォルトの形式チェックは、JDK ソフトウェアのバージョン 1.1.x が実行するチェックと同程度の厳密さになっています。\f3\-Xfuture\fP フラグを指定すると、クラスファイル形式の仕様への準拠を強化するためのより厳密なチェックが有効になります。Java アプリケーション起動ツールの将来のリリースでは、より厳密なチェックがデフォルトになるため、新しいコードを開発するときにはこのフラグを使用することをお勧めします。 -.TP 3 -\-Xnoclassgc -クラスのガベージコレクションを無効にします。このオプションを使用すると、ロード済みクラスからメモリーが回復されることがなくなるため、全体的なメモリー使用量が増大します。この場合、アプリケーションによっては OutOfMemoryError がスローされる可能性があります。 -.TP 3 -\-Xincgc -インクリメンタルガーベジコレクタを有効にします。インクリメンタルガベージコレクタは、デフォルトでは無効になっています。 有効にすると、プログラムの実行中にガベージコレクションによる一時停止が発生しなくなります。インクリメンタルガベージコレクタは、プログラムと同時に実行することがあり、この場合、プログラムの利用できるプロセッサ能力が低下します。 -.TP 3 -\-Xloggc:file -\-verbose:gc と同様にガベージコレクションイベントが発生するたびに報告しますが、そのデータを \f2file\fP に記録します。\f2\-verbose:gc\fP を指定したときに報告される情報のほかに、報告される各イベントの先頭に、最初のガベージコレクションイベントからの経過時間 (秒単位) が付け加えられます。 -.LP -ネットワークの応答時間によって JVM の実行速度が低下するのを避けるため、このファイルの格納先は、常にローカルファイルシステムにしてください。ファイルシステムが満杯になると、ファイルは切り詰められ、そのファイルにデータが引き続き記録されます。このオプションと \f2\-verbose:gc\fP の両方がコマンド行に指定されている場合は、このオプションが優先されます。 -.TP 3 -\-Xmsn -メモリー割り当てプールの初期サイズをバイト数で指定します。指定する値は、1M バイトより大きい 1024 の倍数にしなければなりません。キロバイトを指定するには、文字 \f2k\fP または \f2K\fP を付けます。メガバイトを指定するには、文字 \f2m\fP または \f2M\fP を付けます。デフォルト値は、実行時にシステムの設定に基づいて選択されます。詳細については、「 -.na -\f2HotSpot Ergonomics\fP @ -.fi -http://java.sun.com/javase/6/docs/technotes/guides/vm/gc\-ergonomics.html」を参照してください。 -.LP -例: -.nf -\f3 -.fl - \-Xms6291456 -.fl - \-Xms6144k -.fl - \-Xms6m -.fl - -.fl -\fP -.fi -.TP 3 -\-Xmxn -メモリー割り当てプールの最大サイズをバイト数で指定します。指定する値は、2M バイトより大きい 1024 の倍数にしなければなりません。キロバイトを指定するには、文字 \f2k\fP または \f2K\fP を付けます。メガバイトを指定するには、文字 \f2m\fP または \f2M\fP を付けます。デフォルト値は、実行時にシステムの設定に基づいて選択されます。詳細については、「 -.na -\f2HotSpot Ergonomics\fP @ -.fi -http://java.sun.com/javase/6/docs/technotes/guides/vm/gc\-ergonomics.html」を参照してください。 -.br -例: -.nf -\f3 -.fl - \-Xmx83886080 -.fl - \-Xmx81920k -.fl - \-Xmx80m -.fl - -.fl -\fP -.fi -Solaris 7 および Solaris 8 SPARC プラットフォームの場合のこの値の上限は、およそ 4000m からオーバーヘッドの量を引いたものです。Solaris 2.6 および x86 プラットフォームの場合の上限は、およそ 2000m からオーバーヘッドの量を引いたものです。Linux プラットフォームの場合の上限は、およそ 2000m からオーバーヘッドの量を引いたものです。 -.TP 3 -\-Xprof -実行中のプログラムのプロファイルを生成し、プロファイルデータを標準出力に出力します。このオプションは、プログラム開発用のユーティリティーとして提供されています。 本番稼動システムでの使用を目的としたものではありません。 -.TP 3 -\-Xrs -Java 仮想マシン (JVM) によるオペレーティングシステムシグナルの使用を減らします。 -.LP -以前のリリースでは、Java アプリケーションを秩序正しくシャットダウンするためのシャットダウンフック機能が追加されました。この機能により、JVM が突然終了した場合でも、シャットダウン時にユーザークリーンアップコード (データベース接続のクローズなど) を実行できるようになりました。 -.LP -Sun の JVM は、シグナルをキャッチすることによって、JVM の異常終了のためのシャットダウンフックを実装します。JVM は、SIGHUP、SIGINT、および SIGTERM を使用して、シャットダウンフックの実行を開始します。 -.LP -JVM は、デバッグの目的でスレッドスタックをダンプするという、1.2 より前からある機能を実現するためにも、同様の機構を使用します。Sun の JVM は、スレッドダンプを実行するために SIGQUIT を使用します。 -.LP -JVM を埋め込んでいるアプリケーションが SIGINT や SIGTERM などのシグナルを頻繁にトラップする必要があると、JVM そのもののシグナルハンドラの処理に支障が出る可能性があります。\f3\-Xrs\fP コマンド行オプションを使用すると、この問題に対処できます。Sun の JVM に対して \f3\-Xrs\fP を使用すると、SIGINT、SIGTERM、SIGHUP、および SIGQUIT に対するシグナルマスクは JVM によって変更されず、これらのシグナルに対するシグナルハンドラはインストールされません。 -.LP -\f3\-Xrs\fP を指定した場合、次の 2 つの影響があります。 -.RS 3 -.TP 2 -o -SIGQUIT によるスレッドダンプを利用できない -.TP 2 -o -シャットダウンフック処理の実行は、JVM が終了しようとしている時点で System.exit() を呼び出すなどして、ユーザーコード側で行う必要がある .RE -.TP 3 -\-Xssn -スレッドのスタックサイズを設定します。 -.TP 3 -\-XX:+UseAltSigs -VM ではデフォルトで \f2SIGUSR1\fP および \f2SIGUSR2\fP を使用しますが、\f2SIGUSR1\fP および \f2SIGUSR2\fP をシグナル連鎖するアプリケーションと 競合する場合があります。\f2\-XX:+UseAltSigs\fP オプションは、VM にデフォルトとして \f2SIGUSR1\fP と \f2SIGUSR2\fP 以外のシグナルを使用させます。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +高度なランタイム・オプション .RE - -.LP -.SH "注" -.LP -.LP -\f3\-version:\fP\f2release\fP コマンド行オプションでは、どんなに複雑にリリースを指定してもかまいません。ただし、現実的なリリース指定の限られたサブセットを使用するだけでも適切なポリシーを表現できるため、それらのサブセットのみが完全にサポートされます。それらのポリシーを次に示します。 -.LP -.RS 3 -.TP 3 -1. -任意のバージョン。これは、このオプションを使用しないことで表現できます。 -.TP 3 -2. -ある特定のバージョン ID よりも大きい任意のバージョン。次に例を示します。 -.nf -\f3 -.fl -"1.6.0_10+" -.fl -\fP -.fi -この場合、 \f21.6.0_10\fP よりも大きい任意のバージョンが使用されます。これは、指定されたバージョンで特定のインタフェースが導入された (あるいはそのバグが修正された) 場合に便利です。 -.TP 3 -3. -ある特定のバージョン ID よりも大きいバージョン。ただし、そのリリースファミリの上限によって制限するもの。次に例を示します。 -.nf -\f3 -.fl -"1.6.0_10+&1.6*" -.fl -\fP -.fi -.TP 3 -4. -上の項目 2 と項目 3 の「OR」式。次に例を示します。 -.nf -\f3 -.fl -"1.6.0_10+&1.6* 1.7+" -.fl -\fP -.fi -これは項目 2 に似ていますが、ある変更が特定のリリース (1.7) で導入されたが、その同じ変更が以前のリリースのアップデートでも利用可能になった、という場合に便利です。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +高度なJITコンパイラ・オプション +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +高度なサービスアビリティ・オプション +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +高度なガベージ・コレクション・オプション +.RE +.PP +標準のオプションは、Java Virtual Machine (JVM)のすべての実装でサポートすることが保証されます。これらは、JREのバージョンの確認、クラス・パスの設定、冗長な出力の有効化などの一般的なアクションに使用されます。 +.PP +標準以外のオプションは、Java HotSpot仮想マシンに固有の汎用オプションであるため、すべてのJVM実装でサポートされることは保証されず、変更される可能性があります。これらのオプションは\fI\-X\fRで開始します。 +.PP +拡張オプションは、不用意に使用しないことをお薦めします。これらは、特定のシステム要件を持つことが多く、システム構成パラメータへの特権アクセスが必要な場合があるJava HotSpot仮想マシン操作の特定の領域を調整するために使用される開発者オプションです。これらは、すべてのJVM実装でサポートされることは保証されず、変更される可能性があります。拡張オプションは\fI\-XX\fRで始まります。 +.PP +最新リリースで非推奨または削除されるオプションを追跡するために、ドキュメントの最後に非推奨で削除されたオプションという名前のセクションがあります。 +.PP +ブール・オプションは、デフォルトで無効になっている機能を有効にしたり、デフォルトで有効になっている機能を無効にするために使用されます。このようなオプションは、パラメータを必要としません。ブール値\fI\-XX\fRオプションは、プラス記号(\fI\-XX:+\fR\fIOptionName\fR)を使用して有効にし、マイナス記号(\fI\-XX:\-\fR\fIOptionName\fR)を使用して無効にします。 +.PP +引数が必要なオプションの場合、引数は、オプション名を空白、コロン(:)または等号(=)で区切ったものになるか、あるいは引数がオプションの後に直接続く場合もあります(正確な構文は各オプションによって異なります)。サイズをバイト単位で指定するよう求められている場合、接尾辞を使用しないか、あるいはキロバイト(KB)には接尾辞\fIk\fRまたは\fIK\fR、メガバイト(MB)には接尾辞\fIm\fRまたは\fIM\fR、ギガバイト(GB)には接尾辞\fIg\fRまたは\fIG\fRを使用します。たとえば、サイズを8GBに設定するには、\fI8g\fR、\fI8192m\fR、\fI8388608k\fRまたは\fI8589934592\fRのいずれかを引数として指定できます。パーセントの指定が必要な場合は、0から1の数値を使用します(たとえば、25%の場合は\fI0\&.25\fRを指定します)。 +.SS "標準オプション" +.PP +これらは、JVMのすべての実装でサポートされる最も一般的に使用されるオプションです。 +.PP +\-agentlib:\fIlibname\fR[=\fIoptions\fR] +.RS 4 +指定したネイティブ・エージェント・ライブラリをロードします。ライブラリ名の後に、ライブラリに固有のオプションのカンマ区切りリストを使用できます。 +.sp +オプション\fI\-agentlib:foo\fRを指定した場合、JVMは、\fILD_LIBRARY_PATH\fRシステム変数(OS Xでは、この変数は\fIDYLD_LIBRARY_PATH\fRになります)で指定された場所に\fIlibfoo\&.so\fRという名前のライブラリをロードしようとします。 +.sp +次の例では、スタックの深さ3で、20ミリ秒ごとにヒープ・プロファイリング・ツール(HPROF)ライブラリをロードして、サンプルのCPU情報を取得する方法を示します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-agentlib:hprof=cpu=samples,interval=20,depth=3 +.fi +.if n \{\ +.RE +.\} +次の例では、メイン・クラスのロード前にJVMを一時停止して、Javaデバッグ・ワイヤ・プロトコル(JDWP)ライブラリをロードして、ポート8000でのソケット接続用にリスニングする方法を示します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-agentlib:jdwp=transport=dt_socket,server=y,address=8000 +.fi +.if n \{\ +.RE +.\} +ネイティブ・エージェント・ライブラリの詳細は、次を参照してください。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +http://docs\&.oracle\&.com/javase/8/docs/api/java/lang/instrument/package\-summary\&.htmlにある\fIjava\&.lang\&.instrument\fRパッケージの説明 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +http://docs\&.oracle\&.com/javase/8/docs/platform/jvmti/jvmti\&.html#startingにあるJVMツール・インタフェース・ガイドのエージェントのコマンドライン・オプションに関する項 +.RE +.RE +.PP +\-agentpath:\fIpathname\fR[=\fIoptions\fR] +.RS 4 +絶対パス名で指定されたネイティブ・エージェント・ライブラリをロードします。このオプションは\fI\-agentlib\fRと同等ですが、ライブラリのフル・パスおよびファイル名を使用します。 +.RE +.PP +\-client +.RS 4 +Java HotSpot Client VMを選択します。64ビット・バージョンのJava SE Development Kit (JDK)では、現在、このオプションは無視され、かわりにServer JVMが使用されます。 +.sp +デフォルトのJVM選択は、http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/vm/server\-class\&.htmlにある +サーバークラス・マシンの検出を参照してください。 +.RE +.PP +\-D\fIproperty\fR=\fIvalue\fR +.RS 4 +システム・プロパティの値を設定します。\fIproperty\fR変数は、プロパティの名前を表す、空白のない文字列です。\fIvalue\fR変数は、プロパティの値を表す文字列です。\fIvalue\fRが空白を含む文字列の場合、それを引用符で囲みます(例: +\fI\-Dfoo="foo bar"\fR)。 +.RE +.PP +\-d32 +.RS 4 +アプリケーションを32ビット環境で実行します。32ビット環境がインストールされていないかサポートされていない場合は、エラーが報告されます。デフォルトでは、64ビット・システムが使用されている場合を除き、アプリケーションは32ビット環境で実行されます。 +.RE +.PP +\-d64 +.RS 4 +アプリケーションを64ビット環境で実行します。64ビット環境がインストールされていないかサポートされていない場合は、エラーが報告されます。デフォルトでは、64ビット・システムが使用されている場合を除き、アプリケーションは32ビット環境で実行されます。 +.sp +現在のところ、Java HotSpot Server VMのみが64ビットの操作をサポートしているため、\fI\-d64\fR使用時には\fI\-server\fRオプションが暗黙的に使用されます。\fI\-d64\fR使用時には、\fI\-client\fRオプションは無視されます。この仕様は、将来のリリースでは変更になる可能性があります。 +.RE +.PP +\-disableassertions[:[\fIpackagename\fR]\&.\&.\&.|:\fIclassname\fR], \-da[:[\fIpackagename\fR]\&.\&.\&.|:\fIclassname\fR] +.RS 4 +アサーションを無効にします。デフォルトでは、アサーションはすべてのパッケージおよびクラスで無効になっています。 +.sp +引数なしの\fI\-disableassertions\fR +(\fI\-da\fR)を指定すると、すべてのパッケージおよびクラスでアサーションが無効になります。\fI\&.\&.\&.\fRで終わる\fIpackagename\fR引数を指定すると、指定したパッケージとそのサブパッケージ内でアサーションが無効になります。引数として\fI\&.\&.\&.\fRのみを指定すると、現在の作業ディレクトリにある名前のないパッケージ内でアサーションが無効になります。\fIclassname\fR引数を指定すると、切替えによって、指定したクラス内でアサーションが無効になります。 +.sp +\fI\-disableassertions\fR +(\fI\-da\fR)オプションは、すべてのクラス・ローダーおよびシステム・クラスに適用されます(システム・クラスにはクラス・ローダーはありません)。このルールには1つ例外があります。オプションの引数が指定されていない場合は、システム・クラスに適用されません。これにより、システム・クラスを除くすべてのクラスでアサーションを簡単に無効にすることができます。\fI\-disablesystemassertions\fRオプションを使用すると、すべてのシステム・クラスでアサーションを無効にすることができます。 +.sp +特定のパッケージやクラスでアサーションを明示的に有効にするには、\fI\-enableassertions\fR +(\fI\-ea\fR)オプションを使用します。両方のオプションを同時に使用できます。たとえば、パッケージ\fIcom\&.wombat\&.fruitbat\fR +(およびそのサブパッケージ)ではアサーションを有効にして、クラス\fIcom\&.wombat\&.fruitbat\&.Brickbat\fRではアサーションを無効にして、\fIMyClass\fRアプリケーションを実行するには、次のコマンドを使用します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +java \-ea:com\&.wombat\&.fruitbat\&.\&.\&. \-da:com\&.wombat\&.fruitbat\&.Brickbat MyClass +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\-disablesystemassertions, \-dsa +.RS 4 +すべてのシステム・クラス内でアサーションを無効にします。 +.RE +.PP +\-enableassertions[:[\fIpackagename\fR]\&.\&.\&.|:\fIclassname\fR], \-ea[:[\fIpackagename\fR]\&.\&.\&.|:\fIclassname\fR] +.RS 4 +アサーションを有効にします。デフォルトでは、アサーションはすべてのパッケージおよびクラスで無効になっています。 +.sp +引数なしの\fI\-enableassertions\fR +(\fI\-ea\fR)を指定すると、すべてのパッケージおよびクラスでアサーションが有効になります。\fI\&.\&.\&.\fRで終わる\fIpackagename\fR引数を指定すると、指定したパッケージとそのサブパッケージ内でアサーションが有効になります。引数として\fI\&.\&.\&.\fRのみを指定すると、現在の作業ディレクトリにある名前のないパッケージ内でアサーションが有効になります。\fIclassname\fR引数を指定すると、切替えによって、指定したクラス内でアサーションが有効になります。 +.sp +\fI\-enableassertions\fR +(\fI\-ea\fR)オプションは、すべてのクラス・ローダーおよびシステム・クラスに適用されます(システム・クラスにはクラス・ローダーはありません)。このルールには1つ例外があります。オプションの引数が指定されていない場合は、システム・クラスに適用されません。これにより、システム・クラスを除くすべてのクラスでアサーションを簡単に有効にすることができます。\fI\-enablesystemassertions\fRオプションは、すべてのシステム・クラスでアサーションを有効にする別のスイッチを提供します。 +.sp +特定のパッケージやクラスでアサーションを明示的に無効にするには、\fI\-disableassertions\fR +(\fI\-da\fR)オプションを使用します。単一コマンドにこれらのスイッチのインスタンスを複数指定した場合は、指定したスイッチが順番に処理されてからクラスがロードされます。たとえば、パッケージ\fIcom\&.wombat\&.fruitbat\fR +(およびそのサブパッケージ)でのみアサーションを有効にして、クラス\fIcom\&.wombat\&.fruitbat\&.Brickbat\fRではアサーションを無効にして、\fIMyClass\fRアプリケーションを実行するには、次のコマンドを使用します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +java \-ea:com\&.wombat\&.fruitbat\&.\&.\&. \-da:com\&.wombat\&.fruitbat\&.Brickbat MyClass +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\-enablesystemassertions, \-esa +.RS 4 +すべてのシステム・クラス内でアサーションを有効にします。 +.RE +.PP +\-help, \-? +.RS 4 +実際にJVMを実行せずに、\fIjava\fRコマンドの使用状況情報を表示します。 +.RE +.PP +\-jar \fIfilename\fR +.RS 4 +JARファイルにカプセル化されたプログラムを実行します。\fIfilename\fR引数は、使用するアプリケーションの開始点として機能する\fIpublic static void main(String[] args)\fRメソッドを定義する、\fIMain\-Class:\fR\fIclassname\fRという形式の1行を含むマニフェストを持つJARファイルの名前です。 +.sp +\fI\-jar\fRオプションを使用すると、指定したJARファイルがすべてのユーザー・クラスのソースになり、クラス・パスの他の設定は無視されます。 +.sp +JARファイルの詳細は、次のリソースを参照してください。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +jar(1) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/jar/index\&.htmlにあるJavaアーカイブ(JAR)ファイルのガイド +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +http://docs\&.oracle\&.com/javase/tutorial/deployment/jar/index\&.htmlにある +「レッスン: JARファイルのプログラムのパッケージ化」 +.RE +.RE +.PP +\-javaagent:\fIjarpath\fR[=\fIoptions\fR] +.RS 4 +指定したJavaプログラミング言語エージェントをロードします。Javaアプリケーションのインストゥルメントの詳細は、http://docs\&.oracle\&.com/javase/8/docs/api/java/lang/instrument/package\-summary\&.htmlにあるJava APIドキュメントの\fIjava\&.lang\&.instrument\fRパッケージの説明を参照してください。 +.RE +.PP +\-jre\-restrict\-search +.RS 4 +ユーザー・プライベートなJREをバージョン検索に含めます。 +.RE +.PP +\-no\-jre\-restrict\-search +.RS 4 +ユーザー・プライベートなJREをバージョン検索から除外します。 +.RE +.PP +\-server +.RS 4 +Java HotSpot Server VMを選択します。64ビット・バージョンのJDKでは、Server VMのみをサポートしているため、その場合、このオプションは暗黙的です。 +.sp +デフォルトのJVM選択は、http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/vm/server\-class\&.htmlにある +サーバークラス・マシンの検出を参照してください。 +.RE +.PP +\-showversion +.RS 4 +バージョン情報を表示し、アプリケーションの実行を続行します。このオプションは\fI\-version\fRオプションと同等ですが、\-versionはバージョン情報の表示後にJVMに終了を指示する点が異なります。 +.RE +.PP +\-splash:\fIimgname\fR +.RS 4 +\fIimgname\fRで指定されたイメージを含むスプラッシュ画面を表示します。たとえば、アプリケーションの起動時に\fIimages\fRディレクトリの\fIsplash\&.gif\fRファイルを表示するには、次のオプションを使用します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-splash:images/splash\&.gif +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\-verbose:class +.RS 4 +ロードされた各クラスに関する情報を表示します。 +.RE +.PP +\-verbose:gc +.RS 4 +各ガベージ・コレクション(GC)イベントに関する情報を表示します。 +.RE +.PP +\-verbose:jni +.RS 4 +ネイティブ・メソッドの使用およびその他のJava Native Interface (JNI)アクティビティに関する情報を表示します。 +.RE +.PP +\-version +.RS 4 +バージョン情報を表示してから終了します。このオプションは\fI\-showversion\fRオプションと同等ですが、\-showversionはバージョン情報の表示後にJVMに終了を指示しない点が異なります。 +.RE +.PP +\-version:\fIrelease\fR +.RS 4 +アプリケーションの実行に使用するリリース・バージョンを指定します。コールされた\fIjava\fRコマンドのバージョンがこの指定内容を満たさず、かつ適切な実装がシステム上で見つかった場合には、その適切な実装が使用されます。 +.sp +\fIrelease\fR引数は、正確なバージョン文字列、または空白で区切られたバージョン文字列とバージョン範囲のリストを指定します。\fIバージョン文字列\fRは、次の形式で、開発者のバージョン番号を指定します: +\fI1\&.\fR\fIx\fR\fI\&.0_\fR\fIu\fR +(\fIx\fRはメジャー・バージョン番号、\fIu\fRは更新バージョン番号です)。\fIバージョン範囲\fRは、このバージョン以降を指定するにはバージョン文字列の後にプラス記号(\fI+\fR)を続けたもの、または一致する接頭辞を含む任意のバージョン文字列を指定するには一部のバージョン文字列の後にアスタリスク(\fI*\fR)を続けたもので構成されます。論理\fIOR\fRの組合せには空白、2つのバージョンの文字列/範囲の論理\fIAND\fRの組合せにはアンパサンド(\fI&\fR)を使用して、バージョン文字列とバージョン範囲を組み合せることができます。たとえば、クラスまたはJARファイルの実行にJRE 6u13 (1\&.6\&.0_13)または6u10 (1\&.6\&.0_10)以降の任意のJRE 6のいずれかを必要とする場合、次を指定します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-version:"1\&.6\&.0_13 1\&.6* & 1\&.6\&.0_10+" +.fi +.if n \{\ +.RE +.\} +引用符が必要なのは、\fIrelease\fRパラメータに空白がある場合のみです。 +.sp +JARファイルの場合は、バージョン要件をコマンドラインに指定するよりも、JARファイルのマニフェスト内に指定することが推奨されています。 +.RE +.SS "非標準オプション" +.PP +これらのオプションは、Java HotSpot仮想マシンに固有の汎用オプションです。 +.PP +\-X +.RS 4 +使用可能なすべての\fI\-X\fRオプションのヘルプを表示します。 +.RE +.PP +\-Xbatch +.RS 4 +バックグラウンド・コンパイルを無効にします。デフォルトでは、JVMでは、バックグラウンド・コンパイルが終了するまで、メソッドをバックグラウンド・タスクとしてコンパイルし、インタプリタ・モードでメソッドを実行します。\fI\-Xbatch\fRフラグを指定すると、バックグラウンド・コンパイルが無効になり、すべてのメソッドのコンパイルが完了するまでフォアグラウンド・タスクとして処理されます。 +.sp +このオプションは\fI\-XX:\-BackgroundCompilation\fRと同等です。 +.RE +.PP +\-Xbootclasspath:\fIpath\fR +.RS 4 +ブート・クラス・ファイルを検索するディレクトリ、JARファイルおよびZIPアーカイブの、コロン(:)で区切られたリストを指定します。これらは、JDKに含まれるブート・クラス・ファイルのかわりに使用されます。 +.sp +JREバイナリ・コード・ライセンスに違反するため、\fIrt\&.jar\fRでクラスをオーバーライドする目的で、このオプションを使用するアプリケーションをデプロイしないでください。 +.RE +.PP +\-Xbootclasspath/a:\fIpath\fR +.RS 4 +デフォルトのブートストラップ・クラス・パスの最後に追加するディレクトリ、JARファイルおよびZIPアーカイブの、コロン(:)で区切られたリストを指定します。 +.sp +JREバイナリ・コード・ライセンスに違反するため、\fIrt\&.jar\fRでクラスをオーバーライドする目的で、このオプションを使用するアプリケーションをデプロイしないでください。 +.RE +.PP +\-Xbootclasspath/p:\fIpath\fR +.RS 4 +デフォルトのブートストラップ・クラス・パスの先頭に追加するディレクトリ、JARファイルおよびZIPアーカイブの、コロン(:)で区切られたリストを指定します。 +.sp +JREバイナリ・コード・ライセンスに違反するため、\fIrt\&.jar\fRでクラスをオーバーライドする目的で、このオプションを使用するアプリケーションをデプロイしないでください。 +.RE +.PP +\-Xboundthreads +.RS 4 +ユーザー・レベルのスレッドをカーネル・スレッドにバインドします。 +.RE +.PP +\-Xcheck:jni +.RS 4 +Java Native Interface (JNI)機能に対して追加チェックを行います。具体的には、これは、JNIリクエストを処理する前に、JNI関数に渡されるパラメータと実行環境のデータを検証します。無効なデータが見つかった場合は、ネイティブ・コードに問題があることを示しているため、JVMはリカバリ不能なエラーを発生して終了します。このオプションを使用すると、パフォーマンス低下が予想されます。 +.RE +.PP +\-Xcomp +.RS 4 +最初の呼出しでJavaコードおよびコンパイル・メソッドの解釈を無効にします。デフォルトでは、JITコンパイラは、10,000の解釈されたメソッド呼出しを実行して、効率的なコンパイルのための情報を収集します。効率を犠牲にしてコンパイルのパフォーマンスを向上させるには、\fI\-Xcomp\fRフラグを使用して、解釈されたメソッド呼出しを無効にします。 +.sp +\fI\-XX:CompileThreshold\fRオプションを使用して、コンパイルの前に、解釈されたメソッド呼出しの数を変更することもできます。 +.RE +.PP +\-Xdebug +.RS 4 +何も行いません。下位互換性のために用意されています。 +.RE +.PP +\-Xdiag +.RS 4 +追加の診断メッセージを表示します。 +.RE +.PP +\-Xfuture +.RS 4 +クラス・ファイル形式の仕様への準拠を強化する、厳密なクラス・ファイル形式のチェックが有効になります。将来のリリースでは、より厳密なチェックがデフォルトになるため、新しいコードを開発するときには、開発者はこのフラグを使用することをお薦めします。 +.RE +.PP +\-Xincgc +.RS 4 +増分GCを有効にします。 +.RE +.PP +\-Xint +.RS 4 +インタプリタ専用モードでアプリケーションを実行します。ネイティブ・コードへのコンパイルは無効になり、すべてのバイトコードがインタプリタによって実行されます。ジャスト・イン・タイム(JIT)コンパイラが提供するパフォーマンス上の利点は、このモードでは実現されません。 +.RE +.PP +\-Xinternalversion +.RS 4 +\fI\-version\fRオプションより詳細なJVMバージョン情報を表示してから終了します。 +.RE +.PP +\-Xloggc:\fIfilename\fR +.RS 4 +詳細なGCイベント情報をロギング用にリダイレクトするファイルを設定します。このファイルに書き込まれる情報は、記録された各イベントの前に行われる最初のGCイベント以降に経過した時間を指定した\fI\-verbose:gc\fRの出力と類似しています。\fI\-Xloggc\fRオプションは\fI\-verbose:gc\fRをオーバーライドします(これらの両方が同じ\fIjava\fRコマンドで指定された場合)。 +.sp +例: +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-Xloggc:garbage\-collection\&.log +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\-Xmaxjitcodesize=\fIsize\fR +.RS 4 +JITコンパイルされたコードの最大コード・キャッシュ・サイズ(バイト単位)を指定します。キロバイトを示す場合は文字\fIk\fRまたは\fIK\fR、メガバイトを示す場合は文字\fIm\fRまたは\fIM\fR、ギガバイトを示す場合は文字\fIg\fRまたは\fIG\fRを追加します。デフォルトでは、この値は48MBに設定されています。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-Xmaxjitcodesize=48m +.fi +.if n \{\ +.RE +.\} +このオプションは\fI\-XX:ReservedCodeCacheSize\fRと同等です。 +.RE +.PP +\-Xmixed +.RS 4 +ネイティブ・コードにコンパイルされたホット・メソッドを除き、インタプリタによってすべてのバイトコードを実行します。 +.RE +.PP +\-Xmn\fIsize\fR +.RS 4 +若い世代(ナーサリ)のヒープの初期サイズおよび最大サイズ(バイト単位)を設定します。キロバイトを示す場合は文字\fIk\fRまたは\fIK\fR、メガバイトを示す場合は文字\fIm\fRまたは\fIM\fR、ギガバイトを示す場合は文字\fIg\fRまたは\fIG\fRを追加します。 +.sp +ヒープの若い世代リージョンは新しいオブジェクトに使用されます。GCは、他のリージョンよりこのリージョンで、より頻繁に実行されます。若い世代のサイズが小さすぎる場合、多数のマイナー・ガベージ・コレクションが実行されます。サイズが大きすぎる場合、フル・ガベージ・コレクションのみが実行されますが、完了までに時間がかかることがあります。若い世代のサイズは、全体のヒープ・サイズの半分から4分の1の間にしておくことをお薦めします。 +.sp +次の例では、若い世代の初期サイズおよび最大サイズを様々な単位を使用して256MBに設定する方法を示します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-Xmn256m +\-Xmn262144k +\-Xmn268435456 +.fi +.if n \{\ +.RE +.\} +若い世代のヒープの初期サイズと最大サイズの両方を設定する\fI\-Xmn\fRオプションのかわりに、初期サイズの設定には\fI\-XX:NewSize\fRを、最大サイズの設定には\fI\-XX:MaxNewSize\fRを使用できます。 +.RE +.PP +\-Xms\fIsize\fR +.RS 4 +ヒープの初期サイズ(バイト単位)を設定します。指定する値は、1MBより大きい1024の倍数にする必要があります。キロバイトを示す場合は文字\fIk\fRまたは\fIK\fR、メガバイトを示す場合は文字\fIm\fRまたは\fIM\fR、ギガバイトを示す場合は文字\fIg\fRまたは\fIG\fRを追加します。 +.sp +次の例では、割り当てられたメモリーのサイズを様々な単位を使用して6MBに設定する方法を示します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-Xms6291456 +\-Xms6144k +\-Xms6m +.fi +.if n \{\ +.RE +.\} +このオプションを設定しない場合、初期サイズは、古い世代と若い世代に割り当てられたサイズの合計として設定されます。若い世代のヒープの初期サイズは、\fI\-Xmn\fRオプションまたは\fI\-XX:NewSize\fRオプションを使用して設定できます。 +.RE +.PP +\-Xmx\fIsize\fR +.RS 4 +メモリー割当てプールの最大サイズ(バイト単位)を指定します。指定する値は、2MBより大きい1024の倍数にする必要があります。キロバイトを示す場合は文字\fIk\fRまたは\fIK\fR、メガバイトを示す場合は文字\fIm\fRまたは\fIM\fR、ギガバイトを示す場合は文字\fIg\fRまたは\fIG\fRを追加します。デフォルト値は、実行時にシステム構成に基づいて選択されます。サーバー・デプロイメントでは、\fI\-Xms\fRおよび\fI\-Xmx\fRは通常同じ値に設定されます。詳細は、http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/vm/gc\-ergonomics\&.htmlにあるガベージ・コレクタ・エルゴノミックを参照してください。 +.sp +次の例では、割り当てられたメモリーの許可される最大サイズを様々な単位を使用して80MBに設定する方法を示します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-Xmx83886080 +\-Xmx81920k +\-Xmx80m +.fi +.if n \{\ +.RE +.\} +\fI\-Xmx\fRオプションは\fI\-XX:MaxHeapSize\fRと同等です。 +.RE +.PP +\-Xnoclassgc +.RS 4 +クラスのガベージ・コレクション(GC)を無効にします。これにより、GC時間を節約でき、アプリケーション実行中の中断が短縮されます。 +.sp +起動時に\fI\-Xnoclassgc\fRを指定すると、アプリケーション内のクラス・オブジェクトは、GCの間はそのまま残り、常にライブであるとみなされます。これにより、より多くのメモリーが永久に占有されることになり、注意して使用しないと、メモリー不足の例外がスローされます。 +.RE +.PP +\-Xprof +.RS 4 +実行中のプログラムのプロファイルを生成し、プロファイル・データを標準出力に送信します。このオプションは、プログラム開発用のユーティリティとして提供されています。本番稼働システムでの使用を目的としたものではありません。 +.RE +.PP +\-Xrs +.RS 4 +JVMによるオペレーティング・システム・シグナルの使用を減らします。 +.sp +シャットダウン・フックは、JVMが突然終了した場合でも、シャットダウン時にユーザー・クリーンアップ・コード(データベース接続のクローズなど)を実行することによって、Javaアプリケーションのシャットダウンを順番に有効にします。 +.sp +JVMは、予期しない終了のシャットダウン・フックを実装するためにシグナルをキャッチします。JVMは、\fISIGHUP\fR、\fISIGINT\fRおよび\fISIGTERM\fRを使用して、シャットダウン・フックの実行を開始します。 +.sp +JVMは、デバッグの目的でスレッド・スタックをダンプするという機能を実現するために、同様のメカニズムを使用します。JVMは、スレッド・ダンプを実行するために\fISIGQUIT\fRを使用します。 +.sp +JVMを埋め込んでいるアプリケーションは、\fISIGINT\fRや\fISIGTERM\fRなどのシグナルを頻繁にトラップする必要があり、その結果、JVMのシグナル・ハンドラと衝突する可能性があります。\fI\-Xrs\fRオプションは、この問題に対処するために使用できます。\fI\-Xrs\fRが使用されている場合、\fISIGINT\fR、\fISIGTERM\fR、\fISIGHUP\fRおよび\fISIGQUIT\fRのシグナル・マスクはJVMによって変更されず、これらのシグナルのシグナル・ハンドラはインストールされません。 +.sp +\fI\-Xrs\fRを指定すると、次の2つの結果が生じます: +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fISIGQUIT\fRによるスレッド・ダンプは使用できません。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +シャットダウン・フック処理の実行は、JVMが終了しようとしている時点で\fISystem\&.exit()\fRを呼び出すなどして、ユーザー・コード側で行う必要があります。 +.RE +.RE +.PP +\-Xshare:\fImode\fR +.RS 4 +クラス・データ共有モードを設定します。このオプションで使用可能な\fImode\fR引数は次のとおりです。 +.PP +auto +.RS 4 +可能な場合、共有クラスのデータを使用します。これは、Java HotSpot 32\-Bit Client VMの場合のデフォルト値です。 +.RE +.PP +on +.RS 4 +クラス・データ共有の使用が必要です。クラス・データ共有を使用できない場合、エラー・メッセージを出力して終了します。 +.RE +.PP +off +.RS 4 +共有クラス・データを使用しません。これは、Java HotSpot 32\-Bit Server VM、Java HotSpot 64\-Bit Client VMおよびJava HotSpot 64\-Bit Server VMの場合のデフォルト値です。 +.RE +.PP +dump +.RS 4 +クラス・データ共有アーカイブを手動で生成します。 +.RE +.RE +.PP +\-XshowSettings:\fIcategory\fR +.RS 4 +設定を表示して続行します。このオプションで使用可能な\fIcategory\fR引数は次のとおりです。 +.PP +all +.RS 4 +設定のすべてのカテゴリを表示します。これがデフォルト値です。 +.RE +.PP +locale +.RS 4 +ロケールに関連する設定を表示します。 +.RE +.PP +properties +.RS 4 +システム・プロパティに関連する設定を表示します。 +.RE +.PP +vm +.RS 4 +JVMの設定を表示します。 +.RE +.RE +.PP +\-Xss\fIsize\fR +.RS 4 +スレッドのスタック・サイズ(バイト単位)を設定します。KBを示す場合は文字\fIk\fRまたは\fIK\fR、MBを示す場合は文字\fIm\fRまたは\fIM\fR、GBを示す場合は文字\fIg\fRまたは\fIG\fRを追加します。デフォルト値はプラットフォームによって異なります。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +Linux/ARM (32ビット): 320KB +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +Linux/i386 (32ビット): 320KB +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +Linux/x64 (64ビット): 1024KB +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +OS X (64ビット): 1024KB +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +Oracle Solaris/i386 (32ビット): 320KB +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +Oracle Solaris/x64 (64ビット): 1024KB +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +Windows: 仮想メモリーによって異なります。 +.RE +.sp +次の例では、スレッド・スタック・サイズを異なる単位で1024KBに設定します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-Xss1m +\-Xss1024k +\-Xss1048576 +.fi +.if n \{\ +.RE +.\} +このオプションは\fI\-XX:ThreadStackSize\fRと同等です。 +.RE +.PP +\-Xusealtsigs +.RS 4 +JVM内部シグナルの\fISIGUSR1\fRおよび\fISIGUSR2\fRのかわりに、代替シグナルを使用します。このオプションは\fI\-XX:+UseAltSigs\fRと同等です。 +.RE +.PP +\-Xverify:\fImode\fR +.RS 4 +バイトコード・ベリファイアのモードを設定します。バイトコードの検証は一部の問題のトラブルシューティングに役立ちますが、実行中のアプリケーションへのオーバーヘッドを増大させます。このオプションで使用可能な\fImode\fR引数は次のとおりです。 +.PP +none +.RS 4 +バイトコードを検証しません。これにより、起動時間が短縮され、Javaによって提供される保護も軽減されます。 +.RE +.PP +remote +.RS 4 +ネットワークを介してリモートでロードされるクラスのみを検証します。これは、\fI\-Xverify\fRオプションを指定しない場合のデフォルトの動作です。 +.RE +.PP +all +.RS 4 +すべてのクラスを検証します。 +.RE +.RE +.SS "高度なランタイム・オプション" +.PP +これらのオプションは、Java HotSpot VMの実行時の動作を制御します。 +.PP +\-XX:+DisableAttachMechanism +.RS 4 +JVMにツールをアタッチするメカニズムを無効にするオプションを有効にします。デフォルトでは、このオプションは無効になっており、これは、アタッチ・メカニズムを有効にすると、\fIjcmd\fR、\fIjstack\fR、\fIjmap\fR、\fIjinfo\fRなどのツールを使用できることを意味します。 +.RE +.PP +\-XX:ErrorFile=\fIfilename\fR +.RS 4 +リカバリ不能なエラーが発生した場合にエラー・データが書き込まれるパスおよびファイル名を指定します。デフォルトでは、このファイルは、現在の作業ディレクトリに作成され、名前は\fIhs_err_pid\fR\fIpid\fR\fI\&.log\fR +(\fIpid\fRはエラーの原因となったプロセスの識別子)になります。次の例では、デフォルトのログ・ファイルを設定する方法を示します(プロセスの識別子は\fI%p\fRとして指定されます)。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-XX:ErrorFile=\&./hs_err_pid%p\&.log +.fi +.if n \{\ +.RE +.\} +次の例では、エラー・ログを\fI/var/log/java/java_error\&.log\fRに設定する方法を示します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-XX:ErrorFile=/var/log/java/java_error\&.log +.fi +.if n \{\ +.RE +.\} +(領域不足、権限の問題または別の問題により)指定したディレクトリにファイルを作成できない場合、ファイルはオペレーティング・システムの一時ディレクトリに作成されます。一時ディレクトリは\fI/tmp\fRです。 +.RE +.PP +\-XX:LargePageSizeInBytes=\fIsize\fR +.RS 4 +Javaヒープに使用される大きいページの最大サイズ(バイト単位)を設定します。\fIsize\fR引数は、2の累乗(2、4、8、16、\&.\&.\&.)である必要があります。キロバイトを示す場合は文字\fIk\fRまたは\fIK\fR、メガバイトを示す場合は文字\fIm\fRまたは\fIM\fR、ギガバイトを示す場合は文字\fIg\fRまたは\fIG\fRを追加します。デフォルトでは、サイズは0に設定され、これは、JVMでは大きいページのサイズが自動的に選択されていることを意味します。 +.sp +次の例では、大きいページのサイズを4メガバイト(MB)に設定する方法を示します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-XX:LargePageSizeInBytes=4m +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\-XX:MaxDirectMemorySize=\fIsize\fR +.RS 4 +新規I/O (\fIjava\&.nio\fRパッケージ)の直接バッファ割当ての最大合計サイズ(バイト単位)を設定します。キロバイトを示す場合は文字\fIk\fRまたは\fIK\fR、メガバイトを示す場合は文字\fIm\fRまたは\fIM\fR、ギガバイトを示す場合は文字\fIg\fRまたは\fIG\fRを追加します。デフォルトでは、サイズは0に設定され、これは、JVMではNIOの直接バッファ割当てのサイズが自動的に選択されていることを意味します。 +.sp +次の例では、NIOサイズを異なる単位で1024KBに設定する方法を示します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-XX:MaxDirectMemorySize=1m +\-XX:MaxDirectMemorySize=1024k +\-XX:MaxDirectMemorySize=1048576 +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\-XX:NativeMemoryTracking=\fImode\fR +.RS 4 +JVMのネイティブ・メモリー使用状況のトラッキングのモードを指定します。このオプションで使用可能な\fImode\fR引数は次のとおりです。 +.PP +off +.RS 4 +JVMのネイティブ・メモリー使用状況を追跡しません。これは、\fI\-XX:NativeMemoryTracking\fRオプションを指定しない場合のデフォルトの動作です。 +.RE +.PP +summary +.RS 4 +JVMサブシステム(Javaヒープ、クラス、コード、スレッドなど)によるメモリー使用状況のみ追跡します。 +.RE +.PP +detail +.RS 4 +JVMサブシステムによるメモリー使用状況のトラッキングに加えて、個々の\fICallSite\fR +(個々の仮想メモリー・リージョンおよびそのコミット済リージョン)によるメモリー使用状況を追跡します。 +.RE +.RE +.PP +\-XX:OnError=\fIstring\fR +.RS 4 +リカバリ不能なエラーが発生したときに実行する、カスタム・コマンドまたは一連のセミコロン区切りのコマンドを設定します。文字列に空白が含まれている場合は、引用符で囲む必要があります。 +.sp +次の例では、\fI\-XX:OnError\fRオプションを使用してコア・イメージを作成するために\fIgcore\fRコマンドを実行する方法、およびリカバリ不能なエラーの場合にデバッガを起動してプロセスに接続する方法を示します(\fI%p\fRは現在のプロセスを指定します)。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-XX:OnError="gcore %p;dbx \- %p" +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\-XX:OnOutOfMemoryError=\fIstring\fR +.RS 4 +\fIOutOfMemoryError\fR例外が最初にスローされたときに実行する、カスタム・コマンドまたは一連のセミコロン区切りのコマンドを設定します。文字列に空白が含まれている場合は、引用符で囲む必要があります。コマンド文字列の例は、\fI\-XX:OnError\fRオプションの説明を参照してください。 +.RE +.PP +\-XX:+PrintCommandLineFlags +.RS 4 +コマンドラインに表示された、人間工学的に選択したJVMフラグの印刷を有効にします。これは、ヒープ領域サイズや選択されたガベージ・コレクタなど、JVMによって設定されたエルゴノミック値を確認する場合に役立ちます。デフォルトでは、このオプションは無効であり、フラグは印刷されません。 +.RE +.PP +\-XX:+PrintNMTStatistics +.RS 4 +ネイティブ・メモリーのトラッキングが有効な場合に、JVMの終了時に収集されたネイティブ・メモリーのトラッキング・データの印刷を有効にします(\fI\-XX:NativeMemoryTracking\fRを参照してください)。デフォルトでは、このオプションは無効であり、ネイティブ・メモリーのトラッキング・データは印刷されません。 +.RE +.PP +\-XX:+ShowMessageBoxOnError +.RS 4 +JVMでリカバリ不能なエラーが発生した場合、ダイアログ・ボックスの表示を有効にします。これにより、JVMにデバッガを接続してエラーの原因を調査できるように、JVMを終了しないようにして、プロセスをアクティブなままにします。デフォルトでは、このオプションは無効です。 +.RE +.PP +\-XX:ThreadStackSize=\fIsize\fR +.RS 4 +スレッドのスタック・サイズ(バイト単位)を設定します。キロバイトを示す場合は文字\fIk\fRまたは\fIK\fR、メガバイトを示す場合は文字\fIm\fRまたは\fIM\fR、ギガバイトを示す場合は文字\fIg\fRまたは\fIG\fRを追加します。デフォルト値はプラットフォームによって異なります。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +Linux/ARM (32ビット): 320KB +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +Linux/i386 (32ビット): 320KB +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +Linux/x64 (64ビット): 1024KB +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +OS X (64ビット): 1024KB +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +Oracle Solaris/i386 (32ビット): 320KB +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +Oracle Solaris/x64 (64ビット): 1024KB +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +Windows: 仮想メモリーによって異なります。 +.RE +.sp +次の例では、スレッド・スタック・サイズを異なる単位で1024KBに設定する方法を示します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-XX:ThreadStackSize=1m +\-XX:ThreadStackSize=1024k +\-XX:ThreadStackSize=1048576 +.fi +.if n \{\ +.RE +.\} +このオプションは\fI\-Xss\fRと同等です。 +.RE +.PP +\-XX:+TraceClassLoading +.RS 4 +クラスがロードされるときのクラスのトレースを有効にします。デフォルトでは、このオプションは無効であり、クラスはトレースされません。 +.RE +.PP +\-XX:+TraceClassLoadingPreorder +.RS 4 +クラスが参照される順序で、ロードされたすべてのクラスのトレースを有効にします。デフォルトでは、このオプションは無効であり、クラスはトレースされません。 +.RE +.PP +\-XX:+TraceClassResolution +.RS 4 +定数プールの解決のトレースを有効にします。デフォルトでは、このオプションは無効であり、定数プールの解決はトレースされません。 +.RE +.PP +\-XX:+TraceClassUnloading +.RS 4 +クラスがアンロードされるときのクラスのトレースを有効にします。デフォルトでは、このオプションは無効であり、クラスはトレースされません。 +.RE +.PP +\-XX:+TraceLoaderConstraints +.RS 4 +ローダー制約の記録のトレースを有効にします。デフォルトでは、このオプションは無効であり、ローダー制約の記録は追跡されません。 +.RE +.PP +\-XX:+UseAltSigs +.RS 4 +JVM内部シグナルの\fISIGUSR1\fRおよび\fISIGUSR2\fRのかわりに、代替シグナルの使用を有効にします。デフォルトでは、このオプションは無効であり、代替シグナルは使用されません。このオプションは\fI\-Xusealtsigs\fRと同等です。 +.RE +.PP +\-XX:+UseBiasedLocking +.RS 4 +バイアス・ロックの使用を有効にします。かなりの量の非競合の同期化がある一部のアプリケーションは、このフラグを有効にすると大幅な高速化が実現しますが、特定のパターンのロックがあるアプリケーションは、速度が低下することがあります。バイアス・ロックの方法の詳細は、http://www\&.oracle\&.com/technetwork/java/tuning\-139912\&.html#section4\&.2\&.5にあるJavaチューニングのホワイト・ペーパーの例を参照してください。 +.sp +デフォルトでは、このオプションは無効であり、バイアス・ロックは使用されません。 +.RE +.PP +\-XX:+UseCompressedOops +.RS 4 +圧縮されたポインタの使用を有効にします。このオプションを有効にすると、オブジェクト参照は、64ビットのポインタではなく32ビットのオフセットとして表され、これにより、32GBより小さいJavaヒープ・サイズのアプリケーションの実行時に、通常、パフォーマンスが向上します。このオプションは、64ビットのJVMでのみ機能します。 +.sp +デフォルトでは、このオプションは無効であり、圧縮ポインタは使用されません。 +.RE +.PP +\-XX:+UseLargePages +.RS 4 +大きいページのメモリーの使用を有効にします。このオプションはデフォルトで有効になっています。大きいページのメモリーの使用を無効にするには、\fI\-XX:\-UseLargePages\fRを指定します。 +.sp +詳細は、http://www\&.oracle\&.com/technetwork/java/javase/tech/largememory\-jsp\-137182\&.htmlにある大きいメモリー・ページ用のJavaサポートを参照してください。 +.RE +.PP +\-XX:+UseMembar +.RS 4 +スレッドの状態の遷移でメンバーの発行を有効にします。このオプションは、有効になっているPower PCおよびARMサーバーを除くすべてのプラットフォーム上で、デフォルトでは無効になっています。Power PCとARMのスレッド状態遷移に対するメンバーの発行を無効にするには、\fI\-XX:\-UseMembar\fRを指定します。 +.RE +.PP +\-XX:+UsePerfData +.RS 4 +\fIperfdata\fR機能を有効にします。このオプションはデフォルトで有効になっており、JVMのモニタリングおよびパフォーマンス・テストが可能になります。これを無効にすると、\fIhsperfdata_userid\fRディレクトリの作成を抑制します。\fIperfdata\fR機能を無効にするには、\fI\-XX:\-UsePerfData\fRを指定します。 +.RE +.PP +\-XX:+AllowUserSignalHandlers +.RS 4 +アプリケーションによるシグナル・ハンドラのインストールを有効にします。デフォルトでは、このオプションは無効であり、アプリケーションはシグナル・ハンドラをインストールすることは許可されていません。 +.RE +.SS "高度なJITコンパイラ・オプション" +.PP +これらのオプションは、Java HotSpot VMで実行される動的なjust\-in\-time (JIT)コンパイラを制御します。 +.PP +\-XX:+AggressiveOpts +.RS 4 +積極的なパフォーマンス最適化機能の使用を有効にします。これは今後のリリースでデフォルトになる予定です。デフォルトでは、このオプションは無効であり、試験的なパフォーマンス機能は使用されません。 +.RE +.PP +\-XX:AllocateInstancePrefetchLines=\fIlines\fR +.RS 4 +インスタンス割当てポインタの前にプリフェッチする行数を設定します。デフォルトでは、プリフェッチする行数は1に設定されています。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-XX:AllocateInstancePrefetchLines=1 +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\-XX:AllocatePrefetchInstr=\fIinstruction\fR +.RS 4 +割当てポインタの前にプリフェッチするプリフェッチ命令を設定します。使用可能な値は0から3までです。値の背後にある実際の命令は、プラットフォームによって異なります。デフォルトでは、プリフェッチ命令は0に設定されています。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-XX:AllocatePrefetchInstr=0 +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\-XX:AllocatePrefetchStepSize=\fIsize\fR +.RS 4 +順次プリフェッチ命令のステップ・サイズ(バイト単位)を設定します。キロバイトを示す場合は文字\fIk\fRまたは\fIK\fR、メガバイトを示す場合は文字\fIm\fRまたは\fIM\fR、ギガバイトを示す場合は文字\fIg\fRまたは\fIG\fRを追加します。デフォルトでは、ステップ・サイズは16バイトに設定されています。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-XX:AllocatePrefetchStepSize=16 +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\-XX:+BackgroundCompilation +.RS 4 +バックグラウンド・コンパイルを有効にします。このオプションはデフォルトで有効になっています。バックグラウンド・コンパイルを無効にするには、\fI\-XX:\-BackgroundCompilation\fRを指定します(これは\fI\-Xbatch\fRを指定するのと同等です)。 +.RE +.PP +\-XX:CICompilerCount=\fIthreads\fR +.RS 4 +コンパイルに使用するコンパイラ・スレッドの数を設定します。デフォルトでは、スレッド数は、サーバーJVMの場合は2、クライアントJVMの場合は1に設定されており、層コンパイルが使用されている場合、コア数に合せて増減します。次の例では、スレッドの数を2に設定する方法を示します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-XX:CICompilerCount=2 +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\-XX:CodeCacheMinimumFreeSpace=\fIsize\fR +.RS 4 +コンパイルに必要な最小空き領域(バイト単位)を設定します。キロバイトを示す場合は文字\fIk\fRまたは\fIK\fR、メガバイトを示す場合は文字\fIm\fRまたは\fIM\fR、ギガバイトを示す場合は文字\fIg\fRまたは\fIG\fRを追加します。最小空き領域より少ない領域しか残っていない場合、コンパイルは停止します。デフォルトでは、このオプションは500KBに設定されています。次の例では、最小空き領域を1024MBに設定する方法を示します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-XX:CodeCacheMinimumFreeSpace=1024m +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\-XX:CompileCommand=\fIcommand\fR,\fImethod\fR[,\fIoption\fR] +.RS 4 +メソッドで実行するコマンドを指定します。たとえば、コンパイル元から\fIString\fRクラスの\fIindexOf()\fRメソッドを実行するには、次を使用します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-XX:CompileCommand=exclude,java/lang/String\&.indexOf +.fi +.if n \{\ +.RE +.\} +スラッシュ(\fI/\fR)で区切られたすべてのパッケージおよびサブパッケージを含む、完全クラス名を指定します。切取りと貼付けの操作を容易にするために、\fI\-XX:+PrintCompilation\fRオプションおよび\fI\-XX:+LogCompilation\fRオプションによって生成されるメソッド名の形式を使用することもできます。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-XX:CompileCommand=exclude,java\&.lang\&.String::indexOf +.fi +.if n \{\ +.RE +.\} +署名なしでメソッドを指定すると、コマンドは指定した名前を持つすべてのメソッドに適用されます。ただし、クラス・ファイル形式でメソッドの署名を指定することもできます。たとえば、コンパイル元から\fIString\fRクラスの\fIindexOf(String)\fRメソッドのみ除外するには、次を使用します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-XX:CompileCommand=exclude,java/lang/String\&.indexOf(Ljava/lang/String;)I +.fi +.if n \{\ +.RE +.\} +また、クラス名およびメソッド名にワイルドカードとしてアスタリスク(*)を使用できます。たとえば、コンパイル元からすべてのクラスのすべての\fIindexOf()\fRメソッドを除外するには、次を使用します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-XX:CompileCommand=exclude,*\&.indexOf +.fi +.if n \{\ +.RE +.\} +カンマとピリオドは空白の別名で、これにより、シェルを介してコンパイラ・コマンドを渡すことが容易になります。引数を引用符で囲むことで、空白をセパレータとして使用して\fI\-XX:CompileCommand\fRに引数を渡すことができます。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-XX:CompileCommand="exclude java/lang/String indexOf" +.fi +.if n \{\ +.RE +.\} +\fI\-XX:CompileCommand\fRオプションを使用してコマンドラインで渡されたコマンドを解析した後に、JITコンパイラは\fI\&.hotspot_compiler\fRファイルからコマンドを読み取ります。このファイルにコマンドを追加するか、または\fI\-XX:CompileCommandFile\fRオプションを使用して別のファイルを指定することができます。 +.sp +複数のコマンドを追加するには、\fI\-XX:CompileCommand\fRオプションを複数回指定するか、または改行セパレータ(\fI\en\fR)を使用して各引数を区切ります。次のコマンドを使用できます。 +.PP +break +.RS 4 +指定したメソッドのコンパイルの最初に停止するために、JVMのデバッグ時のブレークポイントを設定します。 +.RE +.PP +compileonly +.RS 4 +指定したメソッドを除いたすべてのメソッドを、コンパイルから除外します。別の方法として、\fI\-XX:CompileOnly\fRオプションを使用して複数のメソッドを指定できます。 +.RE +.PP +dontinline +.RS 4 +指定したメソッドをインライン化しないようにします。 +.RE +.PP +exclude +.RS 4 +指定したメソッドをコンパイルから除外します。 +.RE +.PP +help +.RS 4 +\fI\-XX:CompileCommand\fRオプションのヘルプ・メッセージを印刷します。 +.RE +.PP +inline +.RS 4 +指定したメソッドをインライン化しようとします。 +.RE +.PP +log +.RS 4 +指定したメソッドを除くすべてのメソッドに対して、(\fI\-XX:+LogCompilation\fRオプションを使用して)コンパイル・ロギングを除外します。デフォルトでは、コンパイルされたすべてのメソッドにロギングが実行されます。 +.RE +.PP +option +.RS 4 +このコマンドは、最後の引数(\fIoption\fR)のかわりに、指定したメソッドにJITコンパイル・オプションを渡すために使用できます。コンパイル・オプションは、メソッド名の後の末尾に設定されます。たとえば、\fIStringBuffer\fRクラスの\fIappend()\fRメソッドに対して\fIBlockLayoutByFrequency\fRオプションを有効にするには、次を使用します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-XX:CompileCommand=option,java/lang/StringBuffer\&.append,BlockLayoutByFrequency +.fi +.if n \{\ +.RE +.\} +カンマまたは空白で区切って、複数のコンパイル・オプションを指定できます。 +.RE +.PP +print +.RS 4 +指定したメソッドのコンパイル後に生成されたアセンブラ・コードを出力します。 +.RE +.PP +quiet +.RS 4 +コンパイル・コマンドを出力しません。デフォルトでは、\fI\-XX:CompileCommand\fRオプションを使用して指定したコマンドが出力されます。たとえば、\fIString\fRクラスの\fIindexOf()\fRメソッドのコンパイルから除外する場合、次が標準出力に出力されます。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +CompilerOracle: exclude java/lang/String\&.indexOf +.fi +.if n \{\ +.RE +.\} +他の\fI\-XX:CompileCommand\fRオプションの前に\fI\-XX:CompileCommand=quiet\fRオプションを指定することによって、これを抑制できます。 +.RE +.RE +.PP +\-XX:CompileCommandFile=\fIfilename\fR +.RS 4 +JITコンパイラ・コマンドの読取り元のファイルを設定します。デフォルトでは、JITコンパイラによって実行されるコマンドを格納するために、\fI\&.hotspot_compiler\fRファイルが使用されます。 +.sp +コマンド・ファイルの各行は、コマンドが使用されるコマンド、クラス名およびメソッド名を表します。たとえば、次の行は、\fIString\fRクラスの\fItoString()\fRメソッドに対してアセンブリ・コードを出力します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +print java/lang/String toString +.fi +.if n \{\ +.RE +.\} +メソッドで実行するJITコンパイラのコマンドの指定の詳細は、\fI\-XX:CompileCommand\fRオプションを参照してください。 +.RE +.PP +\-XX:CompileOnly=\fImethods\fR +.RS 4 +コンパイルを制限する(カンマで区切られた)メソッドのリストを設定します。指定したメソッドのみがコンパイルされます。完全クラス名(パッケージおよびサブパッケージを含む)で各メソッドを指定します。たとえば、\fIString\fRクラスの\fIlength()\fRメソッドおよび\fIList\fRクラスの\fIsize()\fRメソッドのみをコンパイルするには、次を使用します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-XX:CompileOnly=java/lang/String\&.length,java/util/List\&.size +.fi +.if n \{\ +.RE +.\} +スラッシュ(\fI/\fR)で区切られたすべてのパッケージおよびサブパッケージを含む、完全クラス名を指定します。切取りと貼付けの操作を容易にするために、\fI\-XX:+PrintCompilation\fRオプションおよび\fI\-XX:+LogCompilation\fRオプションによって生成されるメソッド名の形式を使用することもできます。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-XX:CompileOnly=java\&.lang\&.String::length,java\&.util\&.List::size +.fi +.if n \{\ +.RE +.\} +ワイルドカードはサポートされていませんが、クラス名またはパッケージ名だけを指定してクラスまたはパッケージのすべてのメソッドをコンパイルすることも、メソッドだけを指定して任意のクラスのこの名前を持つメソッドをコンパイルすることもできます。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-XX:CompileOnly=java/lang/String +\-XX:CompileOnly=java/lang +\-XX:CompileOnly=\&.length +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\-XX:CompileThreshold=\fIinvocations\fR +.RS 4 +コンパイル前に解釈されたメソッド呼出しの数を設定します。デフォルトでは、サーバーJVMでは、JITコンパイラは、10,000の解釈されたメソッド呼出しを実行して、効率的なコンパイルのための情報を収集します。クライアントJVMの場合、デフォルト設定は1,500呼出しです。次の例では、解釈されたメソッド呼出しの数を5,000に設定する方法を示します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-XX:CompileThreshold=5000 +.fi +.if n \{\ +.RE +.\} +\fI\-Xcomp\fRオプションを指定して、コンパイルの前に、Javaメソッドの解釈を完全に無効にすることができます。 +.RE +.PP +\-XX:+DoEscapeAnalysis +.RS 4 +エスケープ分析の使用を有効にします。このオプションはデフォルトで有効になっています。エスケープ分析の使用を無効にするには、\fI\-XX:\-DoEscapeAnalysis\fRを指定します。 +.RE +.PP +\-XX:+FailOverToOldVerifier +.RS 4 +新しいタイプ・チェッカが失敗した場合の、古いベリファイアへの自動フェイルオーバーを有効にします。デフォルトでは、このオプションは無効になっており、最近のバイトコード・バージョンを使用したクラスには、これは無視されます(つまり、無効として処理されます)。古いバージョンのバイトコードを使用したクラスには、これを有効化できます。 +.RE +.PP +\-XX:InitialCodeCacheSize=\fIsize\fR +.RS 4 +初期コード・キャッシュ・サイズ(バイト単位)を設定します。キロバイトを示す場合は文字\fIk\fRまたは\fIK\fR、メガバイトを示す場合は文字\fIm\fRまたは\fIM\fR、ギガバイトを示す場合は文字\fIg\fRまたは\fIG\fRを追加します。デフォルト値は500KBに設定されています。次の例では、初期コード・キャッシュ・サイズを32KBに設定する方法を示します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-XX:InitialCodeCacheSize=32k +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\-XX:+Inline +.RS 4 +メソッドのインライン化を有効にします。このオプションは、パフォーマンスを向上させるためにデフォルトで有効になっています。メソッドのインライン化を無効にするには、\fI\-XX:\-Inline\fRを指定します。 +.RE +.PP +\-XX:InlineSmallCode=\fIsize\fR +.RS 4 +インライン化が必要なコンパイルされたメソッドの最大コード・サイズ(バイト単位)を設定します。キロバイトを示す場合は文字\fIk\fRまたは\fIK\fR、メガバイトを示す場合は文字\fIm\fRまたは\fIM\fR、ギガバイトを示す場合は文字\fIg\fRまたは\fIG\fRを追加します。指定したサイズより小さいサイズのコンパイルされたメソッドのみが、インライン化されます。デフォルトでは、最大コード・サイズは1000バイトに設定されています。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-XX:InlineSmallCode=1000 +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\-XX:+LogCompilation +.RS 4 +現在の作業ディレクトリにある\fIhotspot\&.log\fRという名前のファイルへのコンパイル・アクティビティのロギングを有効にします。\fI\-XX:LogFile\fRオプションを使用して、異なるログ・ファイル・パスと名前を指定できます。 +.sp +デフォルトでは、このオプションは無効であり、コンパイル・アクティビティは記録されません。\fI\-XX:+LogCompilation\fRオプションは、診断JVMオプションのロックを解除する\fI\-XX:UnlockDiagnosticVMOptions\fRオプションとともに使用する必要があります。 +.sp +\fI\-XX:+PrintCompilation\fRオプションを使用して、メソッドをコンパイルするたびに、コンソールに出力されたメッセージを含む詳細な診断出力を有効化できます。 +.RE +.PP +\-XX:MaxInlineSize=\fIsize\fR +.RS 4 +インライン化するメソッドの最大バイトコード・サイズ(バイト単位)を設定します。キロバイトを示す場合は文字\fIk\fRまたは\fIK\fR、メガバイトを示す場合は文字\fIm\fRまたは\fIM\fR、ギガバイトを示す場合は文字\fIg\fRまたは\fIG\fRを追加します。デフォルトでは、最大バイトコード・サイズは35バイトに設定されています。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-XX:MaxInlineSize=35 +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\-XX:MaxNodeLimit=\fInodes\fR +.RS 4 +単一のメソッドのコンパイル時に使用されるノードの最大数を設定します。デフォルトでは、ノードの最大数は65,000に設定されています。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-XX:MaxNodeLimit=65000 +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\-XX:MaxTrivialSize=\fIsize\fR +.RS 4 +インライン化する単純メソッドの最大バイトコード・サイズ(バイト単位)を設定します。キロバイトを示す場合は文字\fIk\fRまたは\fIK\fR、メガバイトを示す場合は文字\fIm\fRまたは\fIM\fR、ギガバイトを示す場合は文字\fIg\fRまたは\fIG\fRを追加します。デフォルトでは、単純メソッドの最大バイトコード・サイズは6バイトに設定されています。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-XX:MaxTrivialSize=6 +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\-XX:+OptimizeStringConcat +.RS 4 +\fIString\fR連結操作の最適化を有効にします。このオプションはデフォルトで有効になっています。\fIString\fR連結操作の最適化を無効にするには、\fI\-XX:\-OptimizeStringConcat\fRを指定します。 +.RE +.PP +\-XX:+PrintAssembly +.RS 4 +外部の\fIdisassembler\&.so\fRライブラリを使用して、バイトコード化されたネイティブのメソッドのアセンブリ・コードの出力を有効にします。これにより、生成されたコードを表示することができ、パフォーマンスの問題の診断に役立ちます。 +.sp +デフォルトでは、このオプションは無効であり、アセンブリ・コードは印刷されません。\fI\-XX:+PrintAssembly\fRオプションは、診断JVMオプションのロックを解除する\fI\-XX:UnlockDiagnosticVMOptions\fRオプションとともに使用する必要があります。 +.RE +.PP +\-XX:+PrintCompilation +.RS 4 +メソッドをコンパイルするたびに、コンソールにメッセージを出力することによって、JVMからの詳細な診断出力を有効にします。これにより、実際にコンパイルされるメソッドを確認できます。デフォルトでは、このオプションは無効であり、診断出力は印刷されません。 +.sp +\fI\-XX:+LogCompilation\fRオプションを使用して、コンパイル・アクティビティをファイルに記録することもできます。 +.RE +.PP +\-XX:+PrintInlining +.RS 4 +インライン化の決定内容の出力を有効にします。これにより、インライン化されるメソッドを確認できます。 +.sp +デフォルトでは、このオプションは無効であり、インライン化情報は出力されません。\fI\-XX:+PrintInlining\fRオプションは、診断JVMオプションのロックを解除する\fI\-XX:+UnlockDiagnosticVMOptions\fRオプションとともに使用する必要があります。 +.RE +.PP +\-XX:+RelaxAccessControlCheck +.RS 4 +ベリファイア内のアクセス制御チェックの量を減らします。デフォルトでは、このオプションは無効になっており、最近のバイトコード・バージョンを使用したクラスには、これは無視されます(つまり、無効として処理されます)。古いバージョンのバイトコードを使用したクラスには、これを有効化できます。 +.RE +.PP +\-XX:ReservedCodeCacheSize=\fIsize\fR +.RS 4 +JITコンパイルされたコードの最大コード・キャッシュ・サイズ(バイト単位)を設定します。キロバイトを示す場合は文字\fIk\fRまたは\fIK\fR、メガバイトを示す場合は文字\fIm\fRまたは\fIM\fR、ギガバイトを示す場合は文字\fIg\fRまたは\fIG\fRを追加します。このオプションは\fI\-Xmaxjitcodesize\fRと同等です。 +.RE +.PP +\-XX:+TieredCompilation +.RS 4 +層コンパイルの使用を有効にします。デフォルトでは、このオプションは無効であり、層コンパイルは使用されません。 +.RE +.PP +\-XX:+UseCodeCacheFlushing +.RS 4 +コンパイラをシャットダウンする前に、コード・キャッシュのフラッシュを有効にします。このオプションはデフォルトで有効になっています。コンパイラをシャットダウンする前にコード・キャッシュのフラッシュを無効にするには\fI\-XX:\-UseCodeCacheFlushing\fRを指定します。 +.RE +.PP +\-XX:+UseCondCardMark +.RS 4 +カード表の更新前に、カードがすでにマークされているかどうかのチェックを有効にします。このオプションは、デフォルトでは無効になっており、複数のソケットを持つマシン上でのみ使用する必要があります。これにより、同時操作にかなり依存しているJavaアプリケーションのパフォーマンスが向上します。 +.RE +.PP +\-XX:+UseSuperWord +.RS 4 +スカラー演算のスーパーワード演算への変換を有効にします。このオプションはデフォルトで有効になっています。スカラー演算のスーパーワード演算への変換を無効にするには、\fI\-XX:\-UseSuperWord\fRを指定します。 +.RE +.SS "高度なサービスアビリティ・オプション" +.PP +これらのオプションは、システム情報を収集し、詳細なデバッグを実行する機能を提供します。 +.PP +\-XX:+ExtendedDTraceProbes +.RS 4 +パフォーマンスに影響を与える追加の\fIdtrace\fRツール・プローブを有効にします。デフォルトでは、このオプションは無効になっており、\fIdtrace\fRは標準プローブのみを実行します。 +.RE +.PP +\-XX:+HeapDumpOnOutOfMemory +.RS 4 +\fIjava\&.lang\&.OutOfMemoryError\fR例外がスローされた場合に、ヒープ・プロファイラ(HPROF)を使用して、現在のディレクトリ内のファイルへのJavaヒープのダンプを有効にします。\fI\-XX:HeapDumpPath\fRオプションを使用して、ヒープ・ダンプ・ファイルのパスおよび名前を明示的に設定できます。デフォルトでは、このオプションは無効であり、\fIOutOfMemoryError\fR例外がスローされた場合にヒープはダンプされません。 +.RE +.PP +\-XX:HeapDumpPath=\fIpath\fR +.RS 4 +\fI\-XX:+HeapDumpOnOutOfMemoryError\fRオプションが設定されている場合、ヒープ・プロファイラ(HPROF)が提供するヒープ・ダンプを書き込むパスおよびファイル名を設定します。デフォルトでは、このファイルは、現在の作業ディレクトリに作成され、名前は\fIjava_pid\fR\fIpid\fR\fI\&.hprof\fR +(\fIpid\fRはエラーの原因となったプロセスの識別子)になります。次の例では、デフォルトのファイルを明示的に設定する方法を示します(\fI%p\fRは現在のプロセスの識別子を表します)。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-XX:HeapDumpPath=\&./java_pid%p\&.hprof +.fi +.if n \{\ +.RE +.\} +次の例では、ヒープ・ダンプ・ファイルを\fI/var/log/java/java_heapdump\&.hprof\fRに設定する方法を示します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-XX:HeapDumpPath=/var/log/java/java_heapdump\&.hprof +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\-XX:LogFile=\fIpath\fR +.RS 4 +ログ・データが書き込まれるパスおよびファイル名を設定します。デフォルトでは、ファイルは現在の作業ディレクトリに作成され、名前は\fIhotspot\&.log\fRです。 +.sp +次の例では、ログ・ファイルを\fI/var/log/java/hotspot\&.log\fRに設定する方法を示します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-XX:LogFile=/var/log/java/hotspot\&.log +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\-XX:+PrintClassHistogram +.RS 4 +\fI[Control]+[C]\fRイベント(\fISIGTERM\fR)後にクラス・インスタンスのヒストグラムの印刷を有効にします。デフォルトでは、このオプションは無効です。 +.sp +このオプションを設定すると、\fIjmap \-histo\fRコマンド、または\fIjcmd \fR\fIpid\fR\fI GC\&.class_histogram\fRコマンド(\fIpid\fRは現在のJavaプロセスの識別子)を実行する場合と同じになります。 +.RE +.PP +\-XX:+PrintConcurrentLocks +.RS 4 +.sp +\fI[Control]+[C]\fRイベント(\fISIGTERM\fR)後に\fIjava\&.util\&.concurrent\fRロックの印刷を有効にします。デフォルトでは、このオプションは無効です。 +.sp +このオプションを設定すると、\fIjstack \-l\fRコマンド、または\fIjcmd \fR\fIpid\fR\fI Thread\&.print \-l\fRコマンド(\fIpid\fRは現在のJavaプロセスの識別子)を実行する場合と同じになります。 +.RE +.PP +\-XX:+UnlockDiagnosticVMOptions +.RS 4 +JVMの診断を目的としたオプションをアンロックします。デフォルトでは、このオプションは無効であり、診断オプションは使用できません。 +.RE +.SS "高度なガベージ・コレクション・オプション" +.PP +これらのオプションは、ガベージ・コレクション(GC)がJava HotSpot VMによってどのように実行されるかを制御します。 +.PP +\-XX:+AggressiveHeap +.RS 4 +Javaヒープの最適化を有効にします。これにより、コンピュータの構成(RAMおよびCPU)に基づいて、様々なパラメータが、メモリー割当てが集中した長時間実行ジョブに最適になるように設定されます。デフォルトでは、このオプションは無効であり、ヒープは最適化されません。 +.RE +.PP +\-XX:AllocatePrefetchDistance=\fIsize\fR +.RS 4 +オブジェクト割当てのプリフェッチ距離のサイズ(バイト単位)を設定します。新規オブジェクトの値で書き込もうとするメモリーは、最後に割り当てられたオブジェクトのアドレスから、この距離までプリフェッチされます。各Javaスレッドには独自の割当てポイントがあります。 +.sp +負の値は、プリフェッチ距離はプラットフォームに基づいて選択されることを示します。正の値は、プリフェッチするバイト数です。キロバイトを示す場合は文字\fIk\fRまたは\fIK\fR、メガバイトを示す場合は文字\fIm\fRまたは\fIM\fR、ギガバイトを示す場合は文字\fIg\fRまたは\fIG\fRを追加します。デフォルト値は\-1に設定されています。 +.sp +次の例では、プリフェッチ距離を1024バイトに設定する方法を示します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-XX:AllocatePrefetchDistance=1024 +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\-XX:AllocatePrefetchLines=\fIlines\fR +.RS 4 +コンパイルされたコードで生成されるプリフェッチ命令を使用して、最後のオブジェクト割当て後にロードするキャッシュ行数を設定します。最後に割り当てられたオブジェクトがインスタンスの場合は、デフォルト値は1になり、配列の場合は3になります。 +.sp +次の例では、ロードされるキャッシュ行数を5に設定する方法を示します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-XX:AllocatePrefetchLines=5 +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\-XX:AllocatePrefetchStyle=\fIstyle\fR +.RS 4 +プリフェッチ命令に生成されるコード・スタイルを設定します。\fIstyle\fR引数は、0から3までの整数です。 +.PP +0 +.RS 4 +プリフェッチ命令を生成しません。 +.RE +.PP +1 +.RS 4 +各割当ての後で、プリフェッチ命令を実行します。これはデフォルトのパラメータです。 +.RE +.PP +2 +.RS 4 +スレッド・ローカルな割当てブロック(TLAB)ウォーターマーク・ポインタを使用して、プリフェッチ命令を実行するタイミングを決定します。 +.RE +.PP +3 +.RS 4 +割当てプリフェッチ用のSPARCでBIS命令を使用します。 +.RE +.RE +.PP +\-XX:+AlwaysPreTouch +.RS 4 +JVMの初期化中にJavaヒープ上のすべてのページのタッチを有効にします。これにより、\fImain()\fRメソッドの入力前に、すべてのページがメモリーに取得されます。このオプションは、物理メモリーにマップされたすべての仮想メモリーを含む長時間実行のシステムをシミュレートするテストで使用できます。デフォルトでは、このオプションは無効になっており、JVMヒープ領域がいっぱいになると、すべてのページがコミットされます。 +.RE +.PP +\-XX:+CMSClassUnloadingEnabled +.RS 4 +並行マークスイープ(CMS)ガベージ・コレクタを使用する場合に、アンロードするクラスを有効にします。このオプションはデフォルトで有効になっています。CMSガベージ・コレクタのクラス・アンロードを無効にするには、\fI\-XX:\-CMSClassUnloadingEnabled\fRを指定します。 +.RE +.PP +\-XX:CMSExpAvgFactor=\fIpercent\fR +.RS 4 +並行コレクション統計の指数平均を計算する際に、現在のサンプルを重み付けするために使用される時間の割合(0から100まで)を設定します。デフォルトでは、指数平均係数は25%に設定されています。次の例では、係数を15%に設定する方法を示します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-XX:CMSExpAvgFactor=15 +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\-XX:CMSIncrementalDutyCycle=\fIpercent\fR +.RS 4 +並行コレクタの実行が許可されているマイナー・コレクション間の時間の割合(0から100まで)を設定します。\fI\-XX:+CMSIncrementalPacing\fRが有効な場合、デューティ・サイクルが自動的に設定され、このオプションは初期値のみを設定します。 +.sp +デフォルトでは、デューティ・サイクルは10%に設定されています。次の例では、デューティ・サイクルを20%に設定する方法を示します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-XX:CMSIncrementalDutyCycle=20 +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\-XX:CMSIncrementalDutyCycleMin=\fIpercent\fR +.RS 4 +\fI\-XX:+CMSIncrementalPacing\fRが有効な場合にデューティ・サイクルの下限であるマイナー・コレクション間の時間の割合(0から100まで)を設定します。デフォルトでは、デューティ・サイクルの下限は0%に設定されています。次の例では、下限を10%に設定する方法を示します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-XX:CMSIncrementalDutyCycleMin=10 +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\-XX:+CMSIncrementalMode +.RS 4 +CMSコレクタの増分モードを有効にします。このオプションはデフォルトで無効になっており、2つ以下のGCスレッドを持つ構成にのみ有効にする必要があります。\fICMSIncremental\fRで始まるすべてのオプションは、このオプションが有効な場合のみ、適用されます。 +.RE +.PP +\-XX:CMSIncrementalOffset=\fIpercent\fR +.RS 4 +増分モードのデューティ・サイクルをマイナー・コレクション間で期間内に右に移動する時間の割合(0から100まで)を設定します。デフォルトでは、オフセットは0%に設定されています。次の例では、デューティ・サイクルのオフセットを25%に設定する方法を示します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-XX:CMSIncrementalOffset=25 +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\-XX:+CMSIncrementalPacing +.RS 4 +JVMの実行中に収集された統計に基づいて、増分モードのデューティ・サイクルの自動調整を有効にします。このオプションはデフォルトで有効になっています。増分モード・デューティ・サイクルの自動調整を無効にするには、\fI\-XX:\-CMSIncrementalPacing\fRを指定します。 +.RE +.PP +\-XX:CMSIncrementalSafetyFactor=\fIpercent\fR +.RS 4 +デューティ・サイクルを計算する際に、保守を追加するために使用される時間の割合(0から100まで)を設定します。デフォルトでは、安全係数は10%に設定されています。次の例では、安全係数を5%に設定する方法を示します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-XX:CMSIncrementalSafetyFactor=5 +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\-XX:CMSInitiatingOccupancyFraction=\fIpercent\fR +.RS 4 +CMS収集サイクルを開始する古い世代の占有率(0から100まで)を設定します。デフォルト値は\-1に設定されています。負の値(デフォルトを含む)は、\fI\-XX:CMSTriggerRatio\fRが開始占有率の値を定義するために使用されることを意味します。 +.sp +次の例では、占有率を20%に設定する方法を示します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-XX:CMSInitiatingOccupancyFraction=20 +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\-XX:+CMSScavengeBeforeRemark +.RS 4 +CMSコメント・ステップの前にスカベンジの試行を有効にします。デフォルトでは、このオプションは無効です。 +.RE +.PP +\-XX:CMSTriggerRatio=\fIpercent\fR +.RS 4 +CMS収集サイクルが開始する前に割り当てられる\fI\-XX:MinHeapFreeRatio\fRによって指定される値の割合(0から100まで)を設定します。デフォルト値は80%に設定されています。 +.sp +次の例では、占有率を75%に設定する方法を示します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-XX:CMSTriggerRatio=75 +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\-XX:ConcGCThreads=\fIthreads\fR +.RS 4 +並行GCに使用されるスレッドの数を設定します。デフォルト値は、JVMに使用できるCPUの数によって異なります。 +.sp +たとえば、並行GCのスレッド数を2に設定するには、次のオプションを指定します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-XX:ConcGCThreads=2 +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\-XX:+DisableExplicitGC +.RS 4 +\fISystem\&.gc()\fRの呼出しの処理を無効にするオプションを有効にします。このオプションはデフォルトで無効になっており、これは\fISystem\&.gc()\fRへの呼出しが処理されることを意味します。\fISystem\&.gc()\fRの呼出しの処理が無効になっている場合、JVMは必要に応じてGCを実行します。 +.RE +.PP +\-XX:+ExplicitGCInvokesConcurrent +.RS 4 +\fISystem\&.gc()\fRリクエストを使用することによって、並行GCの呼出しを有効にします。このオプションはデフォルトで無効になっており、\fI\-XX:+UseConcMarkSweepGC\fRオプションとともに使用する場合のみ、有効にすることができます。 +.RE +.PP +\-XX:+ExplicitGCInvokesConcurrentAndUnloadsClasses +.RS 4 +\fISystem\&.gc()\fRリクエストを使用し、並行GCサイクル中にクラスをアンロードすることによって、並行GCの呼出しを有効にします。このオプションはデフォルトで無効になっており、\fI\-XX:+UseConcMarkSweepGC\fRオプションとともに使用する場合のみ、有効にすることができます。 +.RE +.PP +\-XX:G1HeapRegionSize=\fIsize\fR +.RS 4 +ガベージファースト(G1)コレクタを使用する際にJavaヒープを細分化するリージョンのサイズを設定します。値には、1MBから32MBまでを指定できます。デフォルトのリージョン・サイズは、ヒープ・サイズに基づいて人間工学的に決定されます。 +.sp +次の例では、細分化されたサイズを16MBに設定する方法を示します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-XX:G1HeapRegionSize=16m +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\-XX:+G1PrintHeapRegions +.RS 4 +割り当てられたリージョンおよびG1コレクタによって再要求されたものに関する情報の印刷を有効にします。デフォルトでは、このオプションは無効です。 +.RE +.PP +\-XX:G1ReservePercent=\fIpercent\fR +.RS 4 +G1コレクタの昇格が失敗する可能性を減らすためのfalseの上限として予約されたヒープの割合(0から50まで)を設定します。デフォルトでは、このオプションは10%に設定されています。 +.sp +次の例では、予約されたヒープを20%に設定する方法を示します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-XX:G1ReservePercent=20 +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\-XX:InitialHeapSize=\fIsize\fR +.RS 4 +メモリー割当てプールの初期サイズ(バイト単位)を設定します。指定する値は、0、または1MBより大きい1024の倍数のいずれかにする必要があります。キロバイトを示す場合は文字\fIk\fRまたは\fIK\fR、メガバイトを示す場合は文字\fIm\fRまたは\fIM\fR、ギガバイトを示す場合は文字\fIg\fRまたは\fIG\fRを追加します。デフォルト値は、実行時にシステム構成に基づいて選択されます。詳細は、http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/vm/gc\-ergonomics\&.htmlにあるガベージ・コレクタ・エルゴノミックを参照してください。 +.sp +次の例では、割り当てられたメモリーのサイズを様々な単位を使用して6MBに設定する方法を示します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-XX:InitialHeapSize=6291456 +\-XX:InitialHeapSize=6144k +\-XX:InitialHeapSize=6m +.fi +.if n \{\ +.RE +.\} +このオプションを0に設定した場合、初期サイズは、古い世代と若い世代に割り当てられたサイズの合計として設定されます。若い世代のヒープのサイズは、\fI\-XX:NewSize\fRオプションを使用して設定できます。 +.RE +.PP +\-XX:InitialSurvivorRatio=\fIratio\fR +.RS 4 +スループット・ガベージ・コレクタが使用するサバイバ領域の初期比を設定します(\fI\-XX:+UseParallelGC\fRおよび/または\fI\-XX:+UseParallelOldGC\fRオプションによって有効になります)。\fI\-XX:+UseParallelGC\fRオプションおよび\fI\-XX:+UseParallelOldGC\fRオプションを使用することによって、スループット・ガベージ・コレクタで適応サイズ指定をデフォルトで有効にします。初期値から始めて、アプリケーションの動作に従って、サバイバ領域がサイズ変更されます。(\fI\-XX:\-UseAdaptiveSizePolicy\fRオプションを使用して)適応サイズ指定を無効にした場合、\fI\-XX:SurvivorRatio\fRオプションを使用して、アプリケーションの実行全体のサバイバ領域のサイズを設定する必要があります。 +.sp +次の式を使用して、若い世代のサイズ(Y)およびサバイバ領域の初期比(R)に基づいて、サバイバ領域の初期サイズ(S)を計算できます。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +S=Y/(R+2) +.fi +.if n \{\ +.RE +.\} +等式内の2は、2つのサバイバ領域を示します。サバイバ領域の初期比に指定する値を大きくすると、サバイバ領域の初期サイズは小さくなります。 +.sp +デフォルトでは、サバイバ領域の初期比は8に設定されています。若い世代の領域サイズのデフォルト値(2MB)を使用した場合、サバイバ領域の初期サイズは0\&.2MBになります。 +.sp +次の例では、サバイバ領域の初期比を4に設定する方法を示します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-XX:InitialSurvivorRatio=4 +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\-XX:InitiatingHeapOccupancyPercent=\fIpercent\fR +.RS 4 +並行GCサイクルを開始するヒープ占有率(0から100まで)を設定します。これは、1つの世代のみ(たとえばG1ガベージ・コレクタなど)ではなく、ヒープ全体の占有に基づいて並行GCサイクルをトリガーするガベージ・コレクタによって使用されます。 +.sp +デフォルトでは、開始値は45%に設定されています。値0は、GCサイクルが停止しないことを意味します。次の例では、開始ヒープ占有率を75%に設定する方法を示します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-XX:InitiatingHeapOccupancyPercent=75 +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\-XX:MaxGCPauseMillis=\fItime\fR +.RS 4 +最大GC休止時間(ミリ秒単位)のターゲットを設定します。これはソフト・ゴールのため、JVMは実現のために最善の努力をします。デフォルトでは、休止時間の最大値はありません。 +.sp +次の例では、最大ターゲット休止時間を500ミリ秒に設定する方法を示します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-XX:MaxGCPauseMillis=500 +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\-XX:MaxHeapSize=\fIsize\fR +.RS 4 +メモリー割当てプールの最大サイズ(バイト単位)を設定します。指定する値は、2MBより大きい1024の倍数にする必要があります。キロバイトを示す場合は文字\fIk\fRまたは\fIK\fR、メガバイトを示す場合は文字\fIm\fRまたは\fIM\fR、ギガバイトを示す場合は文字\fIg\fRまたは\fIG\fRを追加します。デフォルト値は、実行時にシステム構成に基づいて選択されます。サーバー・デプロイメントでは、\fI\-XX:InitialHeapSize\fRおよび\fI\-XX:MaxHeapSize\fRは通常同じ値に設定されます。詳細は、http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/vm/gc\-ergonomics\&.htmlにあるガベージ・コレクタ・エルゴノミックを参照してください。 +.sp +次の例では、割り当てられたメモリーの許可される最大サイズを様々な単位を使用して80MBに設定する方法を示します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-XX:MaxHeapSize=83886080 +\-XX:MaxHeapSize=81920k +\-XX:MaxHeapSize=80m +.fi +.if n \{\ +.RE +.\} +Oracle Solaris 7およびOracle Solaris 8 SPARCプラットフォームの場合のこの値の上限は、およそ4,000MBからオーバーヘッドの量を引いたものです。Oracle Solaris 2\&.6およびx86プラットフォームの場合の上限は、およそ2,000MBからオーバーヘッドの量を引いたものです。Linuxプラットフォームの場合の上限は、およそ2,000MBからオーバーヘッドの量を引いたものです。 +.sp +\fI\-XX:MaxHeapSize\fRオプションは\fI\-Xmx\fRと同等です。 +.RE +.PP +\-XX:MaxHeapFreeRatio=\fIpercent\fR +.RS 4 +GCイベント後の空きヒープ領域の許可されている最大の割合(0から100まで)を設定します。空きヒープ領域がこの値を超えて拡大した場合、そのヒープは縮小します。デフォルトでは、この値は70%に設定されています。 +.sp +次の例では、空きヒープの最大比率を75%に設定する方法を示します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-XX:MaxHeapFreeRatio=75 +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\-XX:MaxMetaspaceSize=\fIsize\fR +.RS 4 +クラス・メタデータに割り当てることができるネイティブ・メモリーの最大量を設定します。デフォルトでは、このサイズは制限されていません。アプリケーションのメタデータの量は、アプリケーション自体、他の実行中アプリケーション、およびシステムで使用可能なメモリーの量によって異なります。 +.sp +次の例では、クラス・メタデータの最大サイズを256MBに設定する方法を示します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-XX:MaxMetaspaceSize=256m +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\-XX:MaxNewSize=\fIsize\fR +.RS 4 +若い世代(ナーサリ)のヒープの最大サイズ(バイト単位)を設定します。デフォルト値は人間工学的に設定されます。 +.RE +.PP +\-XX:MaxTenuringThreshold=\fIthreshold\fR +.RS 4 +適応GCサイズ指定で使用する最大殿堂入りしきい値を設定します。最大値は15です。デフォルト値は、パラレル(スループット)コレクタの場合は15、CMSコレクタの場合は6です。 +.sp +次の例では、最大殿堂入りしきい値を10に設定する方法を示します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-XX:MaxTenuringThreshold=10 +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\-XX:MetaspaceSize=\fIsize\fR +.RS 4 +最初に超えたときにガベージ・コレクションをトリガーする、割り当てられたクラス・メタデータ領域のサイズを設定します。このガベージ・コレクションのしきい値は、使用されるメタデータの量によって増加または減少します。デフォルトのサイズはプラットフォームによって異なります。 +.RE +.PP +\-XX:MinHeapFreeRatio=\fIpercent\fR +.RS 4 +GCイベント後の空きヒープ領域の許可されている最小の割合(0から100まで)を設定します。空きヒープ領域がこの値を下回った場合、そのヒープは拡大します。デフォルトでは、この値は40%に設定されています。 +.sp +次の例では、空きヒープの最小比率を25%に設定する方法を示します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-XX:MinHeapFreeRatio=25 +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\-XX:NewRatio=\fIratio\fR +.RS 4 +若い世代のサイズと古い世代のサイズとの比率を設定します。デフォルトでは、このオプションは2に設定されています。次の例では、若い/古いの比率を1に設定する方法を示します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-XX:NewRatio=1 +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\-XX:NewSize=\fIsize\fR +.RS 4 +若い世代(ナーサリ)のヒープの初期サイズ(バイト単位)を設定します。キロバイトを示す場合は文字\fIk\fRまたは\fIK\fR、メガバイトを示す場合は文字\fIm\fRまたは\fIM\fR、ギガバイトを示す場合は文字\fIg\fRまたは\fIG\fRを追加します。 +.sp +ヒープの若い世代リージョンは新しいオブジェクトに使用されます。GCは、他のリージョンよりこのリージョンで、より頻繁に実行されます。若い世代のサイズが小さすぎる場合、多数のマイナーGCが実行されます。サイズが大きすぎる場合、フルGCのみが実行されますが、完了までに時間がかかることがあります。若い世代のサイズは、全体のヒープ・サイズの半分から4分の1の間にしておくことをお薦めします。 +.sp +次の例では、若い世代の初期サイズを様々な単位を使用して256MBに設定する方法を示します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-XX:NewSize=256m +\-XX:NewSize=262144k +\-XX:NewSize=268435456 +.fi +.if n \{\ +.RE +.\} +\fI\-XX:NewSize\fRオプションは\fI\-Xmn\fRと同等です。 +.RE +.PP +\-XX:ParallelGCThreads=\fIthreads\fR +.RS 4 +若い世代と古い世代でパラレル・ガベージ・コレクションに使用するスレッドの数を設定します。デフォルト値は、JVMに使用できるCPUの数によって異なります。 +.sp +たとえば、パラレルGCのスレッド数を2に設定するには、次のオプションを指定します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-XX:ParallelGCThreads=2 +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\-XX:+ParallelRefProcEnabled +.RS 4 +パラレル参照処理を有効にします。デフォルトでは、このオプションは無効です。 +.RE +.PP +\-XX:+PrintAdaptiveSizePolicy +.RS 4 +適応世代サイズ指定に関する情報の出力を有効にします。デフォルトでは、このオプションは無効です。 +.RE +.PP +\-XX:+PrintGC +.RS 4 +GCごとのメッセージの出力を有効にします。デフォルトでは、このオプションは無効です。 +.RE +.PP +\-XX:+PrintGCApplicationConcurrentTime +.RS 4 +最後の休止(たとえばGC休止など)以降に経過した時間の出力を有効にします。デフォルトでは、このオプションは無効です。 +.RE +.PP +\-XX:+PrintGCApplicationStoppedTime +.RS 4 +休止(たとえばGC休止など)が継続した時間の出力を有効にします。デフォルトでは、このオプションは無効です。 +.RE +.PP +\-XX+PrintGCDateStamp +.RS 4 +GCごとの日付スタンプの出力を有効にします。デフォルトでは、このオプションは無効です。 +.RE +.PP +\-XX:+PrintGCDetails +.RS 4 +GCごとの詳細メッセージの出力を有効にします。デフォルトでは、このオプションは無効です。 +.RE +.PP +\-XX:+PrintGCTaskTimeStamps +.RS 4 +個々のGCワーカー・スレッド・タスクごとのタイムスタンプの出力を有効にします。デフォルトでは、このオプションは無効です。 +.RE +.PP +\-XX:+PrintGCTimeStamp +.RS 4 +GCごとのタイムスタンプの出力を有効にします。デフォルトでは、このオプションは無効です。 +.RE +.PP +\-XX:+PrintTenuringDistribution +.RS 4 +殿堂入り期間情報の出力を有効にします。次に、出力の例を示します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +Desired survivor size 48286924 bytes, new threshold 10 (max 10) +\- age 1: 28992024 bytes, 28992024 total +\- age 2: 1366864 bytes, 30358888 total +\- age 3: 1425912 bytes, 31784800 total +\&.\&.\&. +.fi +.if n \{\ +.RE +.\} +期間1オブジェクトは、最も若いサバイバです(前のスカベンジの後に作成され、最新のスカベンジで存続し、Eden領域からサバイバ領域に移動しました)。期間2オブジェクトは、2つのスカベンジで存続します(2番目のスカベンジ中に、あるサバイバ領域から次の領域にコピーされました)。このように続きます。 +.sp +前述の例では、28,992,024バイトが1つのスカベンジで存続し、Eden領域からサバイバ領域にコピーされました。1,366,864バイトは期間2オブジェクトなどにより占有されています。各行の3番目の値は、期間n以下のオブジェクトの累積サイズです。 +.sp +デフォルトでは、このオプションは無効です。 +.RE +.PP +\-XX:+ScavengeBeforeFullGC +.RS 4 +それぞれのフルGCの前に若い世代のGCを有効にします。このオプションはデフォルトで有効になっています。フルGCの前に若い世代のスカベンジを行うと、古い世代領域から若い世代領域へのアクセスが可能なオブジェクトの数を減らすことができるため、これを無効に\fIしない\fRことをお薦めします。各フルGCの前に若い世代のGCを無効にするには、\fI\-XX:\-ScavengeBeforeFullGC\fRを指定します。 +.RE +.PP +\-XX:SoftRefLRUPolicyMSPerMB=\fItime\fR +.RS 4 +ソフト・アクセスが可能なオブジェクトが最後に参照されてからヒープ上でアクティブなままになっている時間(ミリ秒単位)を設定します。デフォルト値は、ヒープ内の空きメガバイト当たりで1秒の存続期間です。\fI\-XX:SoftRefLRUPolicyMSPerMB\fRオプションは、現在のヒープ・サイズ(Java HotSpot Client VM用)または最大可能ヒープ・サイズ(Java HotSpot Server VM用)の1メガバイト当たりのミリ秒を表す整数値を受け入れます。この違いは、Client VMは、ヒープを大きくするのではなく、ソフト参照をフラッシュする傾向があるのに対し、Server VMは、ソフト参照をフラッシュするのではなく、ヒープを大きくする傾向があることを意味します。後者の場合、\fI\-Xmx\fRオプションの値は、ソフト参照がどのくらい迅速にガベージ・コレクションされるかに重要な影響を及ぼします。 +.sp +次の例では、値を2\&.5秒に設定する方法を示します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-XX:SoftRefLRUPolicyMSPerMB=2500 +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\-XX:SurvivorRatio=\fIratio\fR +.RS 4 +Eden領域のサイズとサバイバ領域のサイズとの比率を設定します。デフォルトでは、このオプションは8に設定されています。次の例では、Eden/サバイバ領域の比率を4に設定する方法を示します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-XX:SurvivorRatio=4 +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\-XX:TargetSurvivorRatio=\fIpercent\fR +.RS 4 +若いガベージ・コレクションの後に使用されるサバイバ領域の目的の割合(0から100まで)を設定します。デフォルトでは、このオプションは50%に設定されています。 +.sp +次の例では、ターゲットのサバイバ領域の比率を30%に設定する方法を示します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-XX:TargetSurvivorRatio=30 +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\-XX:TLABSize=\fIsize\fR +.RS 4 +スレッド・ローカルな割当てバッファ(TLAB)の初期サイズ(バイト単位)を設定します。キロバイトを示す場合は文字\fIk\fRまたは\fIK\fR、メガバイトを示す場合は文字\fIm\fRまたは\fIM\fR、ギガバイトを示す場合は文字\fIg\fRまたは\fIG\fRを追加します。このオプションが0に設定されている場合、JVMでは初期サイズが自動的に選択されます。 +.sp +次の例では、TLABの初期サイズを512KBに設定する方法を示します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-XX:TLABSize=512k +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\-XX:+UseAdaptiveSizePolicy +.RS 4 +適応世代サイズ指定の使用を有効にします。このオプションはデフォルトで有効になっています。適応世代サイズ指定を無効にするには、\fI\-XX:\-UseAdaptiveSizePolicy\fRを指定し、メモリー割当てプールのサイズを明示的に設定します(\fI\-XX:SurvivorRatio\fRオプションを参考にしてください)。 +.RE +.PP +\-XX:+UseCMSInitiatingOccupancyOnly +.RS 4 +CMSコレクタの開始のための唯一の基準としての占有値の使用を有効にします。デフォルトでは、このオプションは無効になっており、他の基準が使用されます。 +.RE +.PP +\-XX:+UseConcMarkSweepGC +.RS 4 +古い世代へのCMSガベージ・コレクタの使用を有効にします。アプリケーションの待機時間の要件を、スループット(\fI\-XX:+UseParallelGC\fR)ガベージ・コレクタによって満たすことができない場合、CMSガベージ・コレクタを使用することをお薦めします。G1ガベージ・コレクタ(\fI\-XX:+UseG1GC\fR)は別の代替となります。 +.sp +デフォルトでは、このオプションは無効になっており、コレクタは、マシンの構成およびJVMのタイプに基づいて、自動的に選択されます。このオプションを有効にすると、\fI\-XX:+UseParNewGC\fRオプションが自動的に設定されます。 +.RE +.PP +\-XX:+UseG1GC +.RS 4 +G1ガベージ・コレクタの使用を有効にします。これはサーバー形式のガベージ・コレクタで、大量のRAMを持つマルチプロセッサ・マシンを対象としています。高い確率でGC休止時間の目標を達成し、同時に適切なスループットも維持します。G1コレクタは、GC待機時間の限定された要件(安定した予測可能な0\&.5秒未満の休止時間)を持つ、大きいヒープ(約6GB以上のサイズ)が必要なアプリケーションに推奨されます。 +.sp +デフォルトでは、このオプションは無効になっており、コレクタは、マシンの構成およびJVMのタイプに基づいて、自動的に選択されます。 +.RE +.PP +\-XX:+UseGCOverheadLimit +.RS 4 +\fIOutOfMemoryError\fR例外がスローされるまでに、GCでJVMによって要した時間の割合を制限するポリシーの使用を有効にします。デフォルトでは、このオプションは有効になっており、ガベージ・コレクションに合計時間の98%より多く費やされ、ヒープのリカバリが2%未満である場合、パラレルGCによって\fIOutOfMemoryError\fRがスローされます。ヒープが小さい場合、この機能は、アプリケーションが長期間ほとんどまたはまったく進捗なく実行している状態を回避するために使用できます。このオプションを無効にするには、\fI\-XX:\-UseGCOverheadLimit\fRを指定します。 +.RE +.PP +\-XX:+UseNUMA +.RS 4 +アプリケーションで短い待機時間のメモリーの使用を増加させることで、不均一なメモリー・アーキテクチャ(NUMA)を使用したマシン上のアプリケーションのパフォーマンス最適化を有効にします。デフォルトでは、このオプションは無効になっており、NUMAに対する最適化は行われません。このオプションは、パラレル・ガベージ・コレクタ(\fI\-XX:+UseParallelGC\fR)が使用されている場合のみ使用可能です。 +.RE +.PP +\-XX:+UseParallelGC +.RS 4 +複数のプロセッサを利用してアプリケーションのパフォーマンスを向上させる、パラレル・スカベンジ・ガベージ・コレクタ(スループット・コレクタとも呼ばれる)の使用を有効にします。 +.sp +デフォルトでは、このオプションは無効になっており、コレクタは、マシンの構成およびJVMのタイプに基づいて、自動的に選択されます。これを有効にした場合、明示的に無効にしないかぎり、\fI\-XX:+UseParallelOldGC\fRオプションが自動的に有効になります。 +.RE +.PP +\-XX:+UseParallelOldGC +.RS 4 +フルGCへのパラレル・ガベージ・コレクタの使用を有効にします。デフォルトでは、このオプションは無効です。これを有効にすると、\fI\-XX:+UseParallelGC\fRオプションが自動的に有効になります。 +.RE +.PP +\-XX:+UseParNewGC +.RS 4 +若い世代でのコレクションへのパラレル・スレッドの使用を有効にします。デフォルトでは、このオプションは無効です。\fI\-XX:+UseConcMarkSweepGC\fRオプションを設定すると、これは自動的に有効になります。 +.RE +.PP +\-XX:+UseSerialGC +.RS 4 +シリアル・ガベージ・コレクタの使用を有効にします。ガベージ・コレクションから特別な機能を必要としない、小規模で単純なアプリケーションの場合には、これは一般に最適な選択です。デフォルトでは、このオプションは無効になっており、コレクタは、マシンの構成およびJVMのタイプに基づいて、自動的に選択されます。 +.RE +.PP +\-XX:+UseTLAB +.RS 4 +若い世代の領域でのスレッド・ローカルな割当てブロック(TLAB)の使用を有効にします。このオプションはデフォルトで有効になっています。TLABの使用を無効にするには、\fI\-XX:\-UseTLAB\fRを指定します。 +.RE +.SS "非推奨で削除されたオプション" +.PP +これらのオプションは、以前のリリースには含まれていましたが、以降は不要とみなされています。 +.PP +\-Xrun\fIlibname\fR +.RS 4 +指定したデバッグ/プロファイルのライブラリをロードします。このオプションは、\fI\-agentlib\fRオプションに取って代わられました。 +.RE +.PP +\-XX:CMSInitiatingPermOccupancyFraction=\fIpercent\fR +.RS 4 +GCを開始する永久世代占有率(0から100まで)を設定します。このオプションはJDK 8では非推奨で、それに代わるものはありません。 +.RE +.PP +\-XX:MaxPermSize=\fIsize\fR +.RS 4 +永久世代領域の最大サイズ(バイト単位)を設定します。このオプションは、JDK 8で非推奨になり、\fI\-XX:MaxMetaspaceSize\fRオプションに取って代わられました。 +.RE +.PP +\-XX:PermSize=\fIsize\fR +.RS 4 +超えた場合にはガベージ・コレクションをトリガーする、永久世代に割り当てられた領域(バイト単位)を設定します。このオプションは、JDK 8で非推奨になり、\fI\-XX:MetaspaceSize\fRオプションに取って代わられました。 +.RE +.PP +\-XX:+UseSplitVerifier +.RS 4 +検証プロセスの分割を有効にします。デフォルトでは、このオプションは以前のリリースでは有効になっており、検証は、タイプ参照(コンパイラによって実行)と、タイプ・チェック(JVMランタイムによって実行)の2つのフェーズに分割されていました。このオプションはJDK 8で非推奨となり、検証はデフォルトで分割され、無効にする方法はありません。 +.RE +.PP +\-XX:+UseStringCache +.RS 4 +一般に割り当てられた文字列のキャッシングを有効にします。このオプションはJDK 8から削除され、それに代わるものはありません。 +.RE +.SH "パフォーマンス・チューニングの例" +.PP +次の例では、スループットの最適化またはレスポンス時間の短縮化のいずれかを行うための、試験的なチューニング・フラグの使用方法を示します。 +.PP +\fBExample 1\fR, スループットを向上するためのチューニング +.RS 4 +.sp +.if n \{\ +.RS 4 +.\} +.nf +java \-d64 \-server \-XX:+AggressiveOpts \-XX:+UseLargePages \-Xmn10g \-Xms26g \-Xmx26g +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\fBExample 2\fR, レスポンス時間を速くするためのチューニング +.RS 4 +.sp +.if n \{\ +.RS 4 +.\} +.nf +java \-d64 \-XX:+UseG1GC \-Xms26g Xmx26g \-XX:MaxGCPauseMillis=500 \-XX:+PrintGCTimeStamp +.fi +.if n \{\ +.RE +.\} .RE - -.LP .SH "終了ステータス" -.LP -.LP -一般に、次の終了値が起動ツールから返されるのは通常、起動元が不正な引数で呼び出されたか、深刻なエラーが発生したか、あるいは Java 仮想マシンから例外がスローされた場合です。ただし Java アプリケーションは、API 呼び出し \f2System.exit(exitValue)\fP を使用して任意の値を返すことを選択することもできます。 -.LP -.RS 3 -.TP 2 -o -\f20\fP: 正常終了 -.TP 2 -o -\f2>0\fP: エラーが発生した +.PP +通常、次の終了値が起動ツールから返されるのは、起動元が不正な引数で呼び出されたか、深刻なエラーが発生したか、あるいはJVMにより例外がスローされた場合です。ただし、Javaアプリケーションは、API呼出し\fISystem\&.exit(exitValue)\fRを使用して任意の値を返すことを選択することもできます。値は次のとおりです。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fI0\fR: 正常終了 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fI>0\fR: エラー発生 .RE - -.LP .SH "関連項目" -.LP -.RS 3 -.TP 2 -o -javac(1) -.TP 2 -o -jdb(1) -.TP 2 -o -javah(1) -.TP 2 -o -jar(1) -.TP 2 -o -.na -\f2「Java 拡張機能フレームワーク」\fP @ -.fi -http://java.sun.com/javase/6/docs/technotes/guides/extensions/index.html -.TP 2 -o -.na -\f2「セキュリティー」\fP @ -.fi -http://java.sun.com/javase/6/docs/technotes/guides/security/index.html -.TP 2 -o -.na -\f2「HotSpot VM Specific Options」\fP @ -.fi -http://java.sun.com/docs/hotspot/VMOptions.html +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +javac(1) .RE - -.LP - +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +jdb(1) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +javah(1) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +jar(1) +.RE +.br +'pl 8.5i +'bp diff --git a/jdk/src/linux/doc/man/ja/javac.1 b/jdk/src/linux/doc/man/ja/javac.1 index cb107bfb9a1..5d829a38a81 100644 --- a/jdk/src/linux/doc/man/ja/javac.1 +++ b/jdk/src/linux/doc/man/ja/javac.1 @@ -1,1250 +1,1489 @@ -." 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 -." 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. -." -.TH javac 1 "07 May 2011" - -.LP -.SH "名前" -javac \- Java プログラミング言語コンパイラ -.LP -.RS 3 -.TP 2 -o -形式 -.TP 2 -o -説明 -.TP 2 -o -オプション -.TP 2 -o -コマンド行引数ファイル -.TP 2 -o -注釈処理 -.TP 2 -o -型の検索 -.TP 2 -o -プログラマティックインタフェース -.TP 2 -o -例 -.TP 2 -o -関連項目 -.RE - -.LP -.SH "形式" -.LP +'\" t +.\" Copyright (c) 1994, 2013, Oracle and/or its affiliates. All rights reserved. +.\" Title: javac +.\" Language: English +.\" Date: 2013年11月21日 +.\" SectDesc: 基本ツール +.\" Software: JDK 8 +.\" Arch: 汎用 +.\" +.\" 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. +.\" +.pl 99999 +.TH "javac" "1" "2013年11月21日" "JDK 8" "基本ツール" +.\" ----------------------------------------------------------------- +.\" * Define some portability stuff +.\" ----------------------------------------------------------------- +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.\" http://bugs.debian.org/507673 +.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" ----------------------------------------------------------------- +.\" * set default formatting +.\" ----------------------------------------------------------------- +.\" disable hyphenation +.nh +.\" disable justification (adjust text to left margin only) +.ad l +.\" ----------------------------------------------------------------- +.\" * MAIN CONTENT STARTS HERE * +.\" ----------------------------------------------------------------- +.SH "NAME" +javac \- Javaクラスおよびインタフェースの定義を読み取り、バイトコードおよびクラス・ファイルにコンパイルします。 +.SH "概要" +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl - \fP\f3javac\fP [ options ] [ sourcefiles ] [ classes ] [ @argfiles ] -.fl - -.fl +\fIjavac\fR [ \fIoptions\fR ] [ \fIsourcefiles\fR ] [ \fIclasses\fR] [ \fI@argfiles\fR ] .fi - -.LP -.LP -引数は順不同です。 -.LP -.RS 3 -.TP 3 -options -コマンド行オプション。 -.TP 3 -sourcefiles -コンパイルされる 1 つ以上のソースファイル (MyClass.java など) -.TP 3 -classes -注釈の処理対象となる 1 つ以上のクラス (MyPackage.MyClass など) -.TP 3 -@argfiles -オプションとソースファイルを列挙した 1 つ以上のファイル。このファイルの中では \f2\-J\fP オプションは指定できません。 +.if n \{\ +.RE +.\} +.PP +引数を指定する順序は任意です。 +.PP +\fIoptions\fR +.RS 4 +コマンドライン・オプション。オプションを参照してください。 +.RE +.PP +\fIsourcefiles\fR +.RS 4 +コンパイルされる1つ以上のソース・ファイル(\fIMyClass\&.java\fRなど)。 +.RE +.PP +\fIclasses\fR +.RS 4 +注釈の処理対象となる1つ以上のクラス(\fIMyPackage\&.MyClass\fRなど)。 +.RE +.PP +\fI@argfiles\fR +.RS 4 +オプションとソース・ファイルを一覧表示する1つ以上のファイル。このファイルの中では\fI\-J\fRオプションは指定できません。コマンドライン引数ファイルを参照してください。 .RE - -.LP .SH "説明" -.LP -.LP -\f3javac\fP ツールは、Java プログラミング言語で記述されたクラスとインタフェースの定義を読み取り、バイトコードのクラスファイルにコンパイルします。また、Java ソースファイルおよびクラス内の注釈の処理も行います。 -.LP -.LP -ソースコードのファイル名を \f3javac\fP に渡すには、次の 2 つの方法があります。 -.LP -.RS 3 -.TP 2 -o -ソースファイルの数が少ない場合は、ファイル名をコマンド行で直接指定します。 -.TP 2 -o -ソースファイルの数が多い場合は、ファイル名を空白または改行で区切って、1 つのファイルに列挙します。次に、このリストファイル名の先頭に \f3@\fP を付けて、\f3javac\fP のコマンド行で指定します。 +.PP +\fIjavac\fRコマンドは、Javaプログラミング言語で記述されたクラスとインタフェースの定義を読み取り、バイトコードのクラス・ファイルにコンパイルします。\fIjavac\fRコマンドでは、Javaソース・ファイルおよびクラス内の注釈の処理もできます。 +.PP +ソース・コードのファイル名を\fIjavac\fRに渡すには、2つの方法があります。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +ソース・ファイルの数が少ない場合は、ファイル名をコマンドラインで指定します。 .RE - -.LP -.LP -ソースコードのファイル名は \f2.java\fP 拡張子を、クラスのファイル名は \f2.class\fP 拡張子を持っていなければなりません。また、ソースファイルとクラスファイルのどちらも、該当するクラスに対応するルート名を持っていなければなりません。たとえば、 \f2MyClass\fP という名前のクラスは、 \f2MyClass.java\fP という名前のソースファイルに記述します。このソースファイルは、 \f2MyClass.class\fP という名前のバイトコードクラスファイルにコンパイルされます。 -.LP -.LP -内部クラスが定義されていると、追加のクラスファイルが生成されます。これらのクラスファイルの名前は、 \f2MyClass$MyInnerClass.class\fP のように、外部クラス名と内部クラス名を組み合わせたものになります。 -.LP -.LP -ソースファイルは、パッケージツリーを反映したディレクトリツリーに配置する必要があります。たとえば、すべてのソースファイルを \f3/workspace\fP に置いている場合、 \f2com.mysoft.mypack.MyClass\fP のソースコードは \f3/workspace/com/mysoft/mypack/MyClass.java\fP にある必要があります。 -.LP -.LP -デフォルトでは、コンパイラは、各クラスファイルを対応するソースファイルと同じディレクトリに置きます。別の出力先ディレクトリを指定するには、\f3\-d\fP を使用します (このあとのオプションを参照)。 -.LP +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +ソース・ファイルの数が多い場合は、ファイル内のファイル名を空白または改行で区切って指定します。\fIjavac\fRコマンドで、リスト・ファイル名の先頭にアットマーク(@)を使用します。 +.RE +.PP +ソース・コードのファイル名は\&.java拡張子を、クラスのファイル名は\&.class拡張子を持っている必要があります。また、ソース・ファイルとクラス・ファイルのどちらも、該当するクラスに対応するルート名を持っている必要があります。たとえば、\fIMyClass\fRという名前のクラスは、\fIMyClass\&.java\fRという名前のソース・ファイルに記述されます。このソース・ファイルは、\fIMyClass\&.class\fRという名前のバイトコード・クラス・ファイルにコンパイルされます。 +.PP +内部クラスが定義されていると、追加のクラス・ファイルが生成されます。これらのクラス・ファイルの名前は、\fIMyClass$MyInnerClass\&.class\fRのように、内部クラス名と外部クラス名を組み合せたものになります。 +.PP +ソース・ファイルは、パッケージ・ツリーを反映したディレクトリ・ツリーに配置します。たとえば、すべてのソース・ファイルが\fI/workspace\fRにある場合、\fIcom\&.mysoft\&.mypack\&.MyClass\fRのソース・コードを、\fI/workspace/com/mysoft/mypack/MyClass\&.java\fRに格納します。 +.PP +デフォルトでは、コンパイラは、各クラス・ファイルを対応するソース・ファイルと同じディレクトリに格納します。\fI\-d\fRオプションを使用して、別の出力先ディレクトリを指定できます。 .SH "オプション" -.LP -.LP -コンパイラには、現在の開発環境でサポートされており、将来のリリースでもサポートされる標準オプションのセットがあります。これ以外の非標準オプションは、現在の仮想マシンおよびコンパイラの実装に固有のオプションで、将来に変更される可能性があります。非標準オプションは、\f3\-X\fP で始まります。 -.LP -.SS -標準オプション -.LP -.RS 3 -.TP 3 -\-Akey[=value] -注釈プロセッサに渡されるオプション。これらは、javac によって直接解釈されず、個々のプロセッサによって使用されます。\f2key\fP には、1 つまたは複数の識別子を「.」で区切ったものを指定してください。 -.TP 3 -\-cp path または \-classpath path -ユーザーのクラスファイルおよび (場合によっては) 注釈プロセッサやソースファイルの検索場所を指定します。このクラスパスは \f3CLASSPATH\fP 環境変数のユーザークラスパスをオーバーライドします。\f3CLASSPATH\fP、\f3\-cp\fP、\f3\-classpath\fP のいずれも指定されていない場合、ユーザークラスパスは、現在のディレクトリになります。詳細は、「クラスパスの設定」を参照してください。 -.LP -\f3\-sourcepath\fP オプションが指定されていない場合は、ソースファイルもユーザークラスパスから検索されます。 -.LP -\f3\-processorpath\fP オプションが指定されていない場合は、注釈プロセッサもユーザークラスパスから検索されます。 -.TP 3 -\-Djava.ext.dirs=directories -インストール型拡張機能の位置をオーバーライドします。 -.TP 3 -\-Djava.endorsed.dirs=directories -承認された標準パスの位置をオーバーライドします。 -.TP 3 -\-d directory -クラスファイルの出力先ディレクトリを設定します。そのディレクトリはすでに存在している必要があります。\f3javac\fP は作成しません。クラスがパッケージの一部である場合、\f3javac\fP は、必要に応じてディレクトリを作成し、パッケージ名を反映したサブディレクトリにクラスファイルを置きます。たとえば、\f3\-d /home/myclasses\fP と指定し、クラスの名前が \f2com.mypackage.MyClass\fP である場合、クラスファイルは \f2/home/myclasses/com/mypackage/MyClass.class\fP になります。 -.LP -\f3\-d\fP が指定されなかった場合、\f3javac\fP は各クラスファイルを、その生成元となるソースファイルと同じディレクトリ内に格納します。 -.LP -\f3注:\fP \f3\-d\fP で指定したディレクトリはユーザークラスパスに自動的には追加されません。 -.TP 3 -\-deprecation -推奨されないメンバーやクラスが、使用またはオーバーライドされるたびに説明を表示します。\f3\-deprecation\fP が指定されていない場合、\f3javac\fP は、推奨されないメンバーやクラスを使用またはオーバーライドしているソースファイルの要約を表示します。\f3\-deprecation\fP は \f3\-Xlint:deprecation\fP の省略表記です。 -.TP 3 -\-encoding encoding -ソースファイルのエンコーディング名 ( \f2EUC\-JP や UTF\-8\fP など) を指定します。\f3\-encoding\fP が指定されていない場合は、プラットフォームのデフォルトコンバータが使われます。 -.TP 3 -\-endorseddirs directories -承認された標準パスの位置をオーバーライドします。 -.TP 3 -\-extdirs directories -\f2ext\fP ディレクトリの位置をオーバーライドします。\f2directories\fP 変数には、コロンで区切ったディレクトリのリストを指定します。指定したディレクトリ内の各 JAR アーカイブから、クラスファイルが検索されます。見つかったすべての JAR アーカイブは自動的にクラスパスの一部になります。 -.LP -クロスコンパイル (異なる Java プラットフォームに実装されたブートストラップクラスや拡張機能クラスに対してコンパイルを行う) を実行する場合、このオプションには拡張機能クラスを含むディレクトリを指定します。詳細は、「クロスコンパイルオプション」を参照してください。 -.TP 3 -\-g -局所変数を含むすべてのデバッグ情報を生成します。デフォルトでは、行番号およびソースファイル情報だけが生成されます。 -.TP 3 -\-g:none -デバッグ情報を生成しません。 -.TP 3 -\-g:{keyword list} -コンマで区切られたキーワードリストにより指定された、特定の種類のデバッグ情報だけを生成します。次のキーワードが有効です。 -.RS 3 -.TP 3 -source -ソースファイルのデバッグ情報 -.TP 3 -lines -行番号のデバッグ情報 -.TP 3 -vars -局所変数のデバッグ情報 +.PP +コンパイラには、現在の開発環境でサポートされる標準オプションのセットがあります。これ以外の非標準オプションは、現在の仮想マシンおよびコンパイラの実装に固有のオプションで、将来、変更される可能性があります。非標準オプションは、\fI\-X\fRオプションで始まります。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +クロスコンパイル・オプションを参照してください。 .RE -.TP 3 -\-help -標準オプションの形式を表示します。 -.TP 3 -\-implicit:{class,none} -暗黙的にロードされたソースファイルに対するクラスファイルの生成を制御します。クラスファイルを自動生成するには、\f3\-implicit:class\fP を使用します。クラスファイルの生成を抑制するには、\f3\-implicit:none\fP を使用します。このオプションが指定されなかった場合のデフォルト動作は、クラスファイルの自動生成になります。その場合、そのようなクラスファイルが生成された時に注釈処理も実行されると、コンパイラから警告が発行されます。このオプションが明示的に設定された場合には、警告は発行されません。「型の検索」を参照してください。 -.TP 3 -\-Joption -\f3javac\fP が呼び出す \f3java\fP 起動ツールに、\f2option\fP を渡します。たとえば、\f3\-J\-Xms48m\fP と指定すると、スタートアップメモリーは 48M バイトに設定されます。\f3\-J\fP を使って、Java で記述されたアプリケーションを実行する背後の VM にオプション渡すことは、よく行われています。 -.LP -\f3注:\fP \f3CLASSPATH\fP、\f3\-classpath\fP、\f3\-bootclasspath\fP、および \f3\-extdirs\fP は、\f3javac\fP を実行するために使うクラスを指定するものではありません。このような方法でコンパイラの実装を操作することは、通常は無意味であり、常に危険を伴います。このような方法を使う必要がある場合は、\f3\-J\fP オプションを使って、必要なオプションを背後の \f3java\fP 起動ツールに渡してください。 -.TP 3 -\-nowarn -警告メッセージを無効にします。これは \f3\-Xlint:none\fP と同じ意味です。 -.TP 3 -\-proc: {none,only} -注釈処理、コンパイル、その両方、のいずれを実行するかを制御します。\f3\-proc:none\fP は、注釈処理なしでコンパイルが実行されることを意味します。\f3\-proc:only\fP は、注釈処理だけが実行され、後続のコンパイルはまったく実行されないことを意味します。 -.TP 3 -\-processor class1[,class2,class3...] -実行する注釈プロセッサの名前。これを指定した場合、デフォルトの検索処理は省略されます。 -.TP 3 -\-processorpath path -注釈プロセッサの検索場所を指定します。このオプションを使用しなかった場合、クラスパス内でプロセッサの検索が行われます。 -.TP 3 -\-s dir -生成されたソースファイルの格納先となるディレクトリを指定します。そのディレクトリはすでに存在している必要があります。\f3javac\fP は作成しません。クラスがパッケージの一部になっていた場合、コンパイラはそのソースファイルを、パッケージ名を反映したサブディレクトリ内に格納します。その際、必要に応じてディレクトリを作成します。たとえば、ユーザーが \f3\-s /home/mysrc\fP と指定し、クラスの名前が \f2com.mypackage.MyClass\fP であった場合、そのソースファイルは \f2/home/mysrc/com/mypackage/MyClass.java\fP 内に格納されます。 -.TP 3 -\-source release -受け付けるソースコードのバージョンを指定します。\f2release\fP には次の値を指定できます。 -.RS 3 -.TP 3 -1.3 -このコンパイラでは、JDK 1.3 以降に導入されたアサーション、総称、または他の言語機能をサポートしません。 -.TP 3 -1.4 -JDK 1.4 で導入された、アサーションを含むコードを受け付けます。 -.TP 3 -1.5 -JDK 5 で導入された総称および他の言語機能を含んだコードを受け付けます。 -.TP 3 -5 -1.5 と同義です。 -.TP 3 -1.6 -これがデフォルト値です。Java SE 6 では言語に対する変更は導入されませんでしたが、ソースファイル内のエンコーディングエラーが、以前のような「警告」ではなく、「エラー」として報告されるようになりました。 -.TP 3 -6 -1.6 と同義です。 -.TP 3 -1.7 -JDK 7 で導入された機能を含むコードを受け付けます。 -.TP 3 -7 -1.7 と同義です。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +非標準オプションを参照してください。 .RE -.TP 3 -\-sourcepath sourcepath -クラスまたはインタフェースの定義を検索するソースコードパスを指定します。ユーザークラスパスと同様に、ソースパスの複数のエントリはコロン (\f3:\fP) で区切ります。ソースパスのエントリには、ディレクトリ、JAR アーカイブ、または ZIP アーカイブを指定できます。パッケージを使っている場合は、ディレクトリまたはアーカイブ内のローカルパス名がパッケージ名を反映していなければなりません。 -.LP -\f3注:\fP\ クラスパスからクラスだけでなくそのソースも見つかった場合、そのクラスは自動再コンパイルの対象になることがあります。「型の検索」を参照してください。 -.TP 3 -\-verbose -詳細な出力を表示します。ロードされるクラスおよびコンパイルされるソースファイルごとの情報が出力されます。 -.TP 3 -\-version -バージョン情報を出力します。 -.TP 3 -\-Werror -警告が発生した場合にコンパイルを終了します。 -.TP 3 -\-X -非標準オプションに関する情報を表示して終了します。 +.SS "標準オプション" +.PP +\-A\fIkey\fR[\fI=value\fR] +.RS 4 +注釈プロセッサに渡すオプションを指定します。これらのオプションは、\fIjavac\fRが直接解釈するのではなく、それぞれのプロセッサで使用できるようになります。\fIkey\fRの値は、1つまたは複数の識別子をドット(\&.)で区切る必要があります。 .RE - -.LP -.SS -クロスコンパイルオプション -.LP -.LP -デフォルトでは、クラスのコンパイルは、\f3javac\fP が添付されているプラットフォームのブートストラップクラスおよび拡張機能クラスに対して行われます。ただし、\f3javac\fP は、異なる Java プラットフォームに実装されたブートストラップクラスおよび拡張機能クラスに対してコンパイルを行う「クロスコンパイル」もサポートしています。クロスコンパイルを行う場合は、\f3\-bootclasspath\fP および \f3\-extdirs\fP を使うことが重要です。このあとの「クロスコンパイルの例」を参照してください。 -.LP -.RS 3 -.TP 3 -\-target version -指定されたバージョンの VM をターゲットにしたクラスファイルを生成します。このクラスファイルは、指定されたターゲット以降のバージョンでは動作しますが、それより前のバージョンの VM では動作しません。有効なターゲットは、\f31.1\fP、\f31.2\fP、\f31.3\fP、\f31.4\fP、\f31.5\fP (\f35\fP も可)、\f31.6\fP (\f36\fP も可)、および \f31.7\fP (\f37\fP も可) です。 -.LP -\f3\-target\fP のデフォルトは、次のように \f3\-source\fP の値によって決まります。 -.RS 3 -.TP 2 -o -\-source が\f3指定されなかった\fP場合、\-target の値は \f31.7\fP になります。 -.TP 2 -o -\-source が\f31.2\fP の場合、\-target の値は \f31.4\fP になります。 -.TP 2 -o -\-source が\f31.3\fP の場合、\-target の値は \f31.4\fP になります。 -.TP 2 -o -\-source が\f3それ以外の値の場合はすべて\fP、\f3\\\-target\fP の値は \f3\-source\fP の値になります。 +.PP +\-cp \fIpath\fR or \-classpath \fIpath\fR +.RS 4 +ユーザー・クラス・ファイル、および(オプションで)注釈プロセッサとソース・ファイルを検索する場所を指定します。このクラス・パスは\fICLASSPATH\fR環境変数のユーザー・クラス・パスをオーバーライドします。\fICLASSPATH\fR、\fI\-cp\fR、\fI\-classpath\fRのいずれも指定されていない場合、ユーザーの\fIクラス・パス\fRは、現在のディレクトリになります。Setting the Class Path を参照してください。 +.sp +\fI\-sourcepath\fRオプションが指定されていない場合、ソース・ファイルもユーザー・クラス・パスから検索されます。 +.sp +\fI\-processorpath\fRオプションが指定されていない場合、注釈プロセッサもクラス・パスから検索されます。 .RE -.TP 3 -\-bootclasspath bootclasspath -指定された一連のブートクラスに対してクロスコンパイルを行います。ユーザークラスパスと同様に、ブートクラスパスの複数のエントリはコロン (\f3:\fP) で区切ります。ブートクラスパスのエントリには、ディレクトリ、JAR アーカイブ、または ZIP アーカイブを指定できます。 +.PP +\-Djava\&.ext\&.dirs=\fIdirectories\fR +.RS 4 +インストール済拡張機能の位置をオーバーライドします。 .RE - -.LP -.SS -非標準オプション -.LP -.RS 3 -.TP 3 -\-Xbootclasspath/p:path -ブートストラップクラスパスの前に追加します。 -.TP 3 -\-Xbootclasspath/a:path -ブートストラップクラスパスの後ろに追加します。 -.TP 3 -\-Xbootclasspath/:path -ブートストラップクラスファイルの位置をオーバーライドします。 -.TP 3 -\-Xlint -推奨されるすべての警告を有効にします。このリリースでは、利用可能なすべての警告を有効にすることが推奨されています。 -.TP 3 -\-Xlint:all -推奨されるすべての警告を有効にします。このリリースでは、利用可能なすべての警告を有効にすることが推奨されています。 -.TP 3 -\-Xlint:none -すべての警告を無効にします。 -.TP 3 -\-Xlint:name -警告 \f2name\fP を有効にします。このオプションで有効にできる警告のリストについては、「\-Xlint オプションを使って有効または無効にできる警告」を参照してください。 -.TP 3 -\-Xlint:\-name -警告 \f2name\fP を無効にします。このオプションで無効にできる警告のリストについては、「\-Xlint オプションを使って有効または無効にできる警告」を参照してください。 -.TP 3 -\-Xmaxerrs number -印刷するエラーの最大数を設定します。 -.TP 3 -\-Xmaxwarns number -印刷する警告の最大数を設定します。 -.TP 3 -\-Xstdout filename -コンパイラのメッセージを、指定されたファイルに送ります。デフォルトでは、コンパイラのメッセージは \f2System.err\fP に送られます。 -.TP 3 -\-Xprefer:{newer,source} -ある型に対してソースファイルとクラスファイルの両方が見つかった場合、そのどちらのファイルを読み取るべきかを指定します (「型の検索」を参照)。\f2\-Xprefer:newer\fP を使用した場合、ある型に対するソースファイルとクラスファイルの新しい方が読み取られます (デフォルト)。\f2\-Xprefer:source\fP オプションを使用した場合、ソースファイルが読み取られます。SOURCE の保存ポリシーを使って宣言された注釈に任意の注釈プロセッサがアクセスできるようにする場合は、\f2\-Xprefer:source\fP \f2を使用してください\fP。 -.TP 3 -\-Xpkginfo:{always,legacy,nonempty} -パッケージ情報ファイルの処理を指定します。 -.TP 3 -\-Xprint -指定された型のテキスト表現をデバッグ目的で出力します。注釈処理、コンパイルのどちらも実行しません。出力形式は変更される可能性があります。 -.TP 3 -\-XprintProcessorInfo -ある特定のプロセッサが処理を依頼されている注釈に関する情報を出力します。 -.TP 3 -\-XprintRounds -初回および後続の注釈処理ラウンドに関する情報を出力します。 +.PP +\-Djava\&.endorsed\&.dirs=\fIdirectories\fR +.RS 4 +承認された標準パスの位置をオーバーライドします。 .RE - -.LP -.SS -\-Xlint オプションを使って有効または無効にできる警告 -.LP -.LP -\f3\-Xlint:\fP\f2name\fP オプションを使って警告 \f2name\fP を有効にします。ただし、\f2name\fP は次の警告名のいずれかになります。同様に、\f3\-Xlint:\-\fP\f2name\fP オプションを使って警告 \f2name\fP を無効にできます。 -.LP -.RS 3 -.TP 3 -cast -不要で冗長なキャストについて警告します。次に例を示します。 +.PP +\-d \fIdirectory\fR +.RS 4 +クラス・ファイルの出力先ディレクトリを設定します。そのディレクトリは\fIjavac\fRでは作成されないため、すでに存在している必要があります。クラスがパッケージの一部である場合、\fIjavac\fRは、パッケージ名を反映したサブディレクトリ内にクラス・ファイルを格納し、必要に応じてディレクトリを作成します。 +.sp +\fI\-d\fR +\fI/home/myclasses\fRと指定し、クラスの名前が\fIcom\&.mypackage\&.MyClass\fRである場合、クラス・ファイルは\fI/home/myclasses/com/mypackage/MyClass\&.class\fRになります。 +.sp +\fI\-d\fRオプションが指定されなかった場合、\fIjavac\fRは、各クラス・ファイルを、その生成元となるソース・ファイルと同じディレクトリ内に格納します。 +.sp +\fB注意:\fR +\fI\-d\fRオプションによって指定されたディレクトリは、ユーザー・クラス・パスに自動的に追加されません。 +.RE +.PP +\-deprecation +.RS 4 +非推奨のメンバーまたはクラスが使用またはオーバーライドされるたびに、説明を表示します。\fI\-deprecation\fRオプションが指定されていない場合、\fIjavac\fRは、非推奨のメンバーまたはクラスを使用またはオーバーライドしているソース・ファイルのサマリーを表示します。\fI\-deprecation\fRオプションは、\fI\-Xlint:deprecation\fRの省略表記です。 +.RE +.PP +\-encoding \fIencoding\fR +.RS 4 +ソース・ファイルのエンコーディング名(EUC\-JPやUTF\-8など)を設定します。\fI\-encoding\fRオプションが指定されていない場合は、プラットフォームのデフォルト・コンバータが使用されます。 +.RE +.PP +\-endorseddirs \fIdirectories\fR +.RS 4 +承認された標準パスの位置をオーバーライドします。 +.RE +.PP +\-extdirs \fIdirectories\fR +.RS 4 +\fIext\fRディレクトリの位置をオーバーライドします。directories変数には、コロンで区切ったディレクトリのリストを指定します。指定したディレクトリ内の各JARファイルから、クラス・ファイルが検索されます。検出されたすべてのJARファイルは、クラス・パスの一部になります。 +.sp +クロスコンパイル(異なるJavaプラットフォームに実装されたブートストラップ・クラスや拡張機能クラスに対してコンパイルを行う)を実行する場合、このオプションには拡張機能クラスを含むディレクトリを指定します。詳細はクロスコンパイル・オプションを参照してください。 +.RE +.PP +\-g +.RS 4 +ローカル変数を含むすべてのデバッグ情報を生成します。デフォルトでは、行番号およびソース・ファイル情報のみが生成されます。 +.RE +.PP +\-g:none +.RS 4 +デバッグ情報を生成しません。 +.RE +.PP +\-g:[\fIkeyword list\fR] +.RS 4 +カンマで区切られたキーワード・リストにより指定された、特定の種類のデバッグ情報のみを生成します。次のキーワードが有効です。 +.PP +source +.RS 4 +ソース・ファイルのデバッグ情報。 +.RE +.PP +lines +.RS 4 +行番号のデバッグ情報。 +.RE +.PP +vars +.RS 4 +ローカル変数のデバッグ情報。 +.RE +.RE +.PP +\-help +.RS 4 +標準オプションの概要を出力します。 +.RE +.PP +\-implicit:[\fIclass, none\fR] +.RS 4 +暗黙的にロードされたソース・ファイルに対するクラス・ファイルの生成を制御します。クラス・ファイルを自動生成するには、\fI\-implicit:class\fRを使用します。クラス・ファイルの生成を抑制するには、\fI\-implicit:none\fRを使用します。このオプションが指定されなかった場合のデフォルト動作は、クラス・ファイルの自動生成になります。その場合、そのようなクラス・ファイルが生成された時に注釈処理も実行されると、コンパイラから警告が発行されます。\fI\-implicit\fRオプションが明示的に設定された場合、警告は発行されません。型の検索を参照してください。 +.RE +.PP +\-J\fIoption\fR +.RS 4 +Java仮想マシン(JVM)に\fIoption\fRを渡します。optionには、Java起動ツールのリファレンス・ページに記載されているオプションを1つ指定します。たとえば、\fI\-J\-Xms48m\fRと指定すると、スタートアップ・メモリーは48MBに設定されます。java(1)を参照してください。 +.sp +\fB注意:\fR +\fICLASSPATH\fR、\fI\-classpath\fR、\fI\-bootclasspath\fRおよび\fI\-extdirs\fRオプションは、\fIjavac\fRの実行に使用されるクラスを指定しません。これらのオプションおよび変数を使用してコンパイラの実装をカスタマイズしようとすると、リスクが高く、多くの場合、必要な処理が実行されません。コンパイラの実装をカスタマイズする必要がある場合、\fI\-J\fRオプションを使用して、基礎となるJava起動ツールにオプションを渡します。 +.RE +.PP +\-nowarn +.RS 4 +警告メッセージを無効にします。このオプションは、\fI\-Xlint:none\fRオプションと同じように動作します。 +.RE +.PP +\-parameters +.RS 4 +リフレクションAPIのメソッド\fIjava\&.lang\&.reflect\&.Executable\&.getParameters\fRが取得できるように、生成されるクラス・ファイル内のコンストラクタとメソッドの仮パラメータ名を格納します。 +.RE +.PP +\-proc: [\fInone\fR, \fIonly\fR] +.RS 4 +注釈処理およびコンパイルを実行するかを制御します。\fI\-proc:none\fRは、注釈処理なしでコンパイルが実行されることを意味します。\fI\-proc:only\fRは、注釈処理のみが実行され、後続のコンパイルはまったく実行されないことを意味します。 +.RE +.PP +\-processor \fIclass1\fR [,\fIclass2\fR,\fIclass3\fR\&.\&.\&.] +.RS 4 +実行する注釈プロセッサの名前。これを指定した場合、デフォルトの検索処理は省略されます。 +.RE +.PP +\-processorpath \fIpath\fR +.RS 4 +注釈プロセッサを検索する場所を指定します。このオプションが使用されない場合、クラス・パスのプロセッサが検索されます。 +.RE +.PP +\-s \fIdir\fR +.RS 4 +生成されたソース・ファイルの格納先となるディレクトリを指定します。そのディレクトリは\fIjavac\fRでは作成されないため、すでに存在している必要があります。クラスがパッケージの一部である場合、コンパイラは、パッケージ名を反映したサブディレクトリ内にソース・ファイルを格納し、必要に応じてディレクトリを作成します。 +.sp +\fI\-s /home/mysrc\fRと指定し、クラスの名前が\fIcom\&.mypackage\&.MyClass\fRである場合、ソース・ファイルは\fI/home/mysrc/com/mypackage/MyClass\&.java\fRに格納されます。 +.RE +.PP +\-source \fIrelease\fR +.RS 4 +受け付けるソース・コードのバージョンを指定します。\fIrelease\fRには次の値を指定できます。 +.PP +1\&.3 +.RS 4 +このコンパイラでは、Java SE 1\&.3以降に導入されたアサーション、総称または他の言語機能をサポートしません。 +.RE +.PP +1\&.4 +.RS 4 +Java SE 1\&.4で導入された、アサーションを含むコードを受け付けます。 +.RE +.PP +1\&.5 +.RS 4 +Java SE 5で導入された総称および他の言語機能を含んだコードを受け付けます。 +.RE +.PP +5 +.RS 4 +1\&.5と同義です。 +.RE +.PP +1\&.6 +.RS 4 +Java SE 6では言語に対する変更は導入されませんでした。しかし、ソース・ファイル内のエンコーディング・エラーが、Java Platform, Standard Editionの以前のリリースような警告ではなく、エラーとして報告されるようになりました。 +.RE +.PP +6 +.RS 4 +1\&.6と同義です。 +.RE +.PP +1\&.7 +.RS 4 +これがデフォルト値です。Java SE 7で導入された機能を含むコードを受け付けます。 +.RE +.PP +7 +.RS 4 +1\&.7と同義です。 +.RE +.RE +.PP +\-sourcepath \fIsourcepath\fR +.RS 4 +クラスまたはインタフェースの定義を検索するソース・コード・パスを指定します。ユーザー・クラス・パスと同様に、ソース・パスのエントリは、Oracle Solarisではコロン(:)で、Windowsではセミコロンで区切り、ここには、ディレクトリ、JARアーカイブまたはZIPアーカイブを指定できます。パッケージを使用している場合は、ディレクトリまたはアーカイブ内のローカル・パス名がパッケージ名を反映している必要があります。 +.sp +\fB注意:\fR +ソース・ファイルも見つかった場合、クラス・パスにより見つかったクラスは再コンパイルされる可能性があります。型の検索を参照してください。 +.RE +.PP +\-verbose +.RS 4 +ロードされるクラスおよびコンパイルされるソース・ファイルごとの情報が出力される、詳細出力を使用します。 +.RE +.PP +\-version +.RS 4 +リリース情報を出力します。 +.RE +.PP +\-werror +.RS 4 +警告が発生した場合にコンパイルを終了します。 +.RE +.PP +\-X +.RS 4 +非標準オプションに関する情報を表示して終了します。 +.RE +.SS "クロスコンパイル・オプション" +.PP +デフォルトでは、クラスのコンパイルは、\fIjavac\fRが添付されているプラットフォームのブートストラップ・クラスおよび拡張機能クラスに対して行われます。ただし、\fIjavac\fRは、異なるJavaプラットフォームに実装されたブートストラップ・クラスおよび拡張機能クラスに対してコンパイルを行うクロスコンパイルもサポートしています。クロスコンパイルを行う場合は、\fI\-bootclasspath\fRおよび\fI\-extdirs\fRオプションを使用することが重要です。 +.PP +\-target \fIversion\fR +.RS 4 +仮想マシンの指定されたリリースを対象とするクラス・ファイルを生成します。クラス・ファイルは、指定されたターゲット以降のリリースでは動作しますが、それより前のリリースのJVMでは動作しません。有効なターゲットは、1\&.1、1\&.2、1\&.3、1\&.4、1\&.5 (5も可)、1\&.6 (6も可)および1\&.7 (7も可)です。 +.sp +\fI\-target\fRオプションのデフォルトは、\fI\-source\fRオプションの値によって異なります。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fI\-source\fRオプションが指定されていない場合、\fI\-target\fRオプションの値は1\&.7です。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fI\-source\fRオプションが1\&.2の場合、\fI\-target\fRオプションの値は1\&.4です。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fI\-source\fRオプションが1\&.3の場合、\fI\-target\fRオプションの値は1\&.4です。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fI\-source\fRオプションが1\&.5の場合、\fI\-target\fRオプションの値は1\&.7です。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fI\-source\fRオプションが1\&.6の場合、\fI\-target\fRオプションの値は1\&.7です。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fI\-source\fRオプションの他のすべての値の場合、\fI\-target\fRオプションの値は、\fI\-source\fRオプションの値になります。 +.RE +.RE +.PP +\-bootclasspath \fIbootclasspath\fR +.RS 4 +指定された一連のブート・クラスに対してクロスコンパイルを行います。ユーザー・クラス・パスと同様に、ブート・クラス・パスのエントリはコロン(:)で区切り、ここには、ディレクトリ、JARアーカイブまたはZIPアーカイブを指定できます。 +.RE +.SS "コンパクト・プロファイル・オプション" +.PP +JDK 8以降から、\fIjavac\fRコンパイラはコンパクト・プロファイルをサポートします。コンパクト・プロファイルを使用すると、Javaプラットフォーム全体を必要としないアプリケーションは、デプロイ可能で、小さいフットプリントで実行できます。コンパクト・プロファイル機能は、アプリケーション・ストアからのアプリケーションのダウンロード時間を短縮するのに使用できます。この機能は、JREをバンドルするJavaアプリケーションの、よりコンパクトなデプロイメントに役立ちます。この機能は、小さいデバイスでも役立ちます。 +.PP +サポートされているプロファイル値は、\fIcompact1\fR、\fIcompact2\fRおよび\fIcompact3\fRです。これらは、追加のレイヤーです。大きい番号の各コンパクト・プロファイルには、小さい番号の名前のプロファイル内のすべてのAPIが含まれます。 +.PP +\-profile +.RS 4 +コンパクト・プロファイルを使用する場合、このオプションは、コンパイル時にプロファイル名を指定します。次に例を示します。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -String s = (String)"Hello!" -.fl -\fP +javac \-profile compact1 Hello\&.java .fi -.TP 3 -classfile -クラスファイルの内容に関連した問題について警告します。 -.TP 3 -deprecation -非推奨項目の使用について警告します。次に例を示します。 +.if n \{\ +.RE +.\} +javacは、指定されたプロファイルにない任意のJava SE APIを使用するソース・コードをコンパイルしません。これは、そのようなソース・コードをコンパイルしようとすることによって生じるエラー・メッセージの例です。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl - java.util.Date myDate = new java.util.Date(); -.fl - int currentDay = myDate.getDay(); -.fl -\fP +cd jdk1\&.8\&.0/bin +\&./javac \-profile compact1 Paint\&.java +Paint\&.java:5: error: Applet is not available in profile \*(Aqcompact1\*(Aq +import java\&.applet\&.Applet; .fi -.LP -メソッド \f2java.util.Date.getDay\fP は JDK 1.1 以降は推奨されていません。 -.TP 3 -dep\-ann -\f2@deprecated\fP Javadoc コメントでドキュメント化されているが、 \f2@Deprecated\fP 注釈が付いていない項目について警告します。次に例を示します。 +.if n \{\ +.RE +.\} +この例では、\fIApplet\fRクラスを使用しないようにソースを変更することによって、エラーを修正できます。\-profileオプションを指定せずにコンパイルすることによって、エラーを修正することもできます。コンパイルは、Java SE APIの完全なセットに対して実行されます。(どのコンパクト・プロファイルにも、\fIApplet\fRクラスは含まれていません。) +.sp +コンパクト・プロファイルを使用してコンパイルするための別の方法として、\fI\-bootclasspath\fRオプションを使用して、プロファイルのイメージを指定する\fIrt\&.jar\fRファイルへのパスを指定します。かわりに\fI\-profile\fRオプションを使用すると、プロファイル・イメージは、コンパイル時にシステム上に存在する必要がありません。これは、クロスコンパイル時に役立ちます。 +.RE +.SS "非標準オプション" +.PP +\-Xbootclasspath/p:\fIpath\fR +.RS 4 +ブートストラップ・クラス・パスに接尾辞を追加します。 +.RE +.PP +\-Xbootclasspath/a:\fIpath\fR +.RS 4 +ブートストラップ・クラス・パスに接頭辞を追加します。 +.RE +.PP +\-Xbootclasspath/:\fIpath\fR +.RS 4 +ブートストラップ・クラス・ファイルの位置をオーバーライドします。 +.RE +.PP +\-Xdoclint:[\-]\fIgroup\fR [\fI/access\fR] +.RS 4 +\fIgroup\fRの値が\fIaccessibility\fR、\fIsyntax\fR、\fIreference\fR、\fIhtml\fRまたは\fImissing\fRのいずれかである特定のチェック・グループを有効または無効にします。これらのチェック・グループの詳細は、\fIjavadoc\fRコマンドの\fI\-Xdoclint\fRオプションを参照してください。\fI\-Xdoclint\fRオプションは、\fIjavac\fRコマンドではデフォルトで無効になります。 +.sp +変数\fIaccess\fRは、\fI\-Xdoclint\fRオプションがチェックするクラスとメンバーの最小の可視性レベルを指定します。\fIpublic\fR、\fIprotected\fR、\fIpackage\fRおよび\fIprivate\fRの値(可視性の高い順)の1つを持つことができます。たとえば、次のオプションは、(protected、package、publicを含む) protected以上のアクセス・レベルを持つクラスおよびメンバーを(すべてのチェック・グループで)チェックします。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl - /** -.fl - * @deprecated As of Java SE 7, replaced by {@link #newMethod()} -.fl - */ -.fl - -.fl - public static void deprecatedMethood() { } -.fl - -.fl - public static void newMethod() { } -.fl -\fP +\-Xdoclint:all/protected .fi -.TP 3 -divzero -一定の整数 0 で除算されることについて警告します。次に例を示します。 +.if n \{\ +.RE +.\} +次のオプションは、package以上のアクセス権(packageおよびpublicを含む)を持つクラスおよびメンバーに対するHTMLエラーをチェックしないことを除き、すべてのアクセス・レベルに対してすべてのチェック・グループを有効にします。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl - int divideByZero = 42 / 0; -.fl -\fP +\-Xdoclint:all,\-html/package .fi -.TP 3 -empty -\f2if\fP 文以降が空の文であることについて警告します。次に例を示します。 +.if n \{\ +.RE +.\} +.RE +.PP +\-Xdoclint:none +.RS 4 +すべてのチェック・グループを無効にします。 +.RE +.PP +\-Xdoclint:all[\fI/access\fR] +.RS 4 +すべてのチェック・グループを有効にします。 +.RE +.PP +\-Xlint +.RS 4 +推奨されるすべての警告を有効にします。このリリースでは、利用可能なすべての警告を有効にすることをお薦めします。 +.RE +.PP +\-Xlint:all +.RS 4 +推奨されるすべての警告を有効にします。このリリースでは、利用可能なすべての警告を有効にすることをお薦めします。 +.RE +.PP +\-Xlint:none +.RS 4 +すべての警告を無効にします。 +.RE +.PP +\-Xlint:\fIname\fR +.RS 4 +警告名を無効にします。このオプションで無効にできる警告のリストは、\-Xlintオプションを使用した警告の有効化または無効化を参照してください。 +.RE +.PP +\-Xlint:\fI\-name\fR +.RS 4 +警告名を無効にします。このオプションで無効にできる警告のリストを取得するには、\-Xlintオプションを使用した警告の有効化または無効化\-Xlint\fIオプションを使用した\fRを参照してください。 +.RE +.PP +\-Xmaxerrs \fInumber\fR +.RS 4 +印刷するエラーの最大数を設定します。 +.RE +.PP +\-Xmaxwarns \fInumber\fR +.RS 4 +印刷する警告の最大数を設定します。 +.RE +.PP +\-Xstdout \fIfilename\fR +.RS 4 +コンパイラのメッセージを、指定されたファイルに送信します。デフォルトでは、コンパイラのメッセージは\fISystem\&.err\fRに送られます。 +.RE +.PP +\-Xprefer:[\fInewer,source\fR] +.RS 4 +ある型に対してソース・ファイルとクラス・ファイルの両方が見つかった場合、そのどちらのファイルを読み取るかを指定します。(型の検索を参照してください)。\fI\-Xprefer:newer\fRオプションを使用した場合、ある型に対するソース・ファイルとクラス・ファイルのうち新しい方が読み取られます(デフォルト)。\fI\-Xprefer:source\fRオプションを使用した場合、ソース・ファイルが読み取られます。\fISOURCE\fRの保存ポリシーを使用して宣言された注釈に任意の注釈プロセッサがアクセスできるようにする場合は、\fI\-Xprefer:source\fRを使用してください。 +.RE +.PP +\-Xpkginfo:[\fIalways\fR,\fIlegacy\fR,\fInonempty\fR] +.RS 4 +javacがpackage\-info\&.javaファイルから\fIpackage\-info\&.class\fRファイルを生成するかどうかを制御します。このオプションで使用可能なmode引数は次のとおりです。 +.PP +always +.RS 4 +すべての\fIpackage\-info\&.java\fRファイルの\fIpackage\-info\&.class\fRファイルを常に生成します。このオプションは、各\fI\&.java\fRファイルに対応する\fI\&.class\fRファイルがあることを確認するAntなどのビルド・システムを使用する場合に役立つことがあります。 +.RE +.PP +legacy +.RS 4 +package\-info\&.javaに注釈が含まれる場合にのみ\fIpackage\-info\&.class\fRファイルを生成します。package\-info\&.javaにコメントのみ含まれる場合に\fIpackage\-info\&.class\fRファイルを生成しません。 +.sp +\fB注意:\fR +\fIpackage\-info\&.class\fRファイルは生成できますが、package\-info\&.javaファイル内のすべての注釈に\fIRetentionPolicy\&.SOURCE\fRがある場合は空になります。 +.RE +.PP +nonempty +.RS 4 +package\-info\&.javaに\fIRetentionPolicy\&.CLASS\fRまたは\fIRetentionPolicy\&.RUNTIME\fRとともに注釈が含まれる場合にのみ\fIpackage\-info\&.class\fRファイルを生成します。 +.RE +.RE +.PP +\-Xprint +.RS 4 +デバッグ目的で指定した型のテキスト表示を出力します。注釈処理もコンパイルも実行されません。出力形式は変更される可能性があります。 +.RE +.PP +\-XprintProcessorInfo +.RS 4 +ある特定のプロセッサが処理を依頼されている注釈に関する情報を出力します。 +.RE +.PP +\-XprintRounds +.RS 4 +初回および後続の注釈処理ラウンドに関する情報を出力します。 +.RE +.SH "-XLINTオプションを使用した警告の有効化または無効化" +.PP +\fI\-Xlint:name\fRオプションを使用して警告\fIname\fRを有効にします。ここで、\fIname\fRは次の警告名のいずれかになります。\fI\-Xlint:\-name:\fRオプションを使用して、警告を無効化できます。 +.PP +cast +.RS 4 +不要で冗長なキャストについて警告します。たとえば、次のようになります。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +String s = (String) "Hello!" +.fi +.if n \{\ +.RE +.\} +.RE +.PP +classfile +.RS 4 +クラス・ファイルの内容に関連した問題について警告します。 +.RE +.PP +deprecation +.RS 4 +非推奨の項目の使用について警告します。たとえば、次のようになります。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +java\&.util\&.Date myDate = new java\&.util\&.Date(); +int currentDay = myDate\&.getDay(); +.fi +.if n \{\ +.RE +.\} +メソッド\fIjava\&.util\&.Date\&.getDay\fRはJDK 1\&.1以降は非推奨になりました。 +.RE +.PP +dep\-ann +.RS 4 +\fI@deprecated\fR +Javadocコメントでドキュメント化されているが、\fI@Deprecated\fR注釈が付いていない項目について警告します。たとえば、次のようになります。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +/** + * @deprecated As of Java SE 7, replaced by {@link #newMethod()} + */ +public static void deprecatedMethood() { } +public static void newMethod() { } +.fi +.if n \{\ +.RE +.\} +.RE +.PP +divzero +.RS 4 +定整数0で除算されることについて警告します。たとえば、次のようになります。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +int divideByZero = 42 / 0; +.fi +.if n \{\ +.RE +.\} +.RE +.PP +empty +.RS 4 +\fIif \fR文以降が空の文であることについて警告します。たとえば、次のようになります。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl class E { -.fl void m() { -.fl - if (true) ; -.fl + if (true) ; } -.fl } -.fl -\fP .fi -.TP 3 -fallthrough -fall\-through ケースの \f2switch\fP ブロックをチェックし、検出されたものに対して警告メッセージを表示します。Fall\-through ケースは、\f2switch\fP ブロック内の最後のケースを除くケースです。このコードには \f2break\fP 文は含まれません。コードの実行をそのケースから次のケースへ移動します。たとえば、この \f2switch\fP ブロック内の \f2case 1\fP ラベルに続くコードは、\f2break\fP 文で終わっていません。 +.if n \{\ +.RE +.\} +.RE +.PP +fallthrough +.RS 4 +fall\-throughケースのswitchブロックをチェックし、検出されたものに対して警告メッセージを表示します。Fall\-throughケースは、switchブロック内の最後のケースを除くケースです。このコードにはbreak文は含まれません。コードの実行をそのケースから次のケースへ移動します。たとえば、このswitchブロック内のcase 1ラベルに続くコードは、break文で終わっていません。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl switch (x) { -.fl case 1: -.fl - System.out.println("1"); -.fl - // No break statement here. -.fl + System\&.out\&.println("1"); + // No break statement here\&. case 2: -.fl - System.out.println("2"); -.fl + System\&.out\&.println("2"); } -.fl -\fP .fi -.LP -このコードのコンパイル時に \f2\-Xlint:fallthrough\fP フラグが使用されていた場合、コンパイラは 当該ケースの行番号とともに、fall\-through ケースの可能性があることを示す警告を発行します。 -.TP 3 -finally -正常に完了できない \f2finally\fP 節について警告します。次に例を示します。 +.if n \{\ +.RE +.\} +このコードのコンパイル時に\fI\-Xlint:fallthrough\fRオプションが使用されていた場合、コンパイラは、問題になっているケースの行番号とともに、caseにfall\-throughする可能性があることを示す警告を発行します。 +.RE +.PP +finally +.RS 4 +正常に完了できない\fIfinally\fR句について警告します。たとえば、次のようになります。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl - public static int m() { -.fl - try { -.fl - throw new NullPointerException(); -.fl - } catch (NullPointerException e) { -.fl - System.err.println("Caught NullPointerException."); -.fl - return 1; -.fl - } finally { -.fl - return 0; -.fl - } -.fl +public static int m() { + try { + throw new NullPointerException(); + } catch (NullPointerException(); { + System\&.err\&.println("Caught NullPointerException\&."); + return 1; + } finally { + return 0; + } } -.fl -\fP .fi -.LP -この例では、コンパイラは \f2finally\fP ブロックに関する警告を生成します。このメソッドが呼び出されると、値 1 ではなく \f20\fP が \f2返されます\fP。 \f2finally\fP ブロックは、 \f2try\fP ブロックが終了すると必ず実行されます。この例では、制御が \f2catch\fP に移された場合、メソッドは終了します。ただし、 \f2finally\fP ブロックは実行される必要があるため、制御がすでにこのメソッドの外部に移されていても、このブロックは実行されます。 -.TP 3 -options -コマンド行オプションの使用に関する問題について警告します。この種の警告の例については、「クロスコンパイルの例」を参照してください。 -.TP 3 -overrides -メソッドのオーバーライドに関する問題について警告します。たとえば、次の 2 つのクラスがあるとします。 +.if n \{\ +.RE +.\} +この例では、コンパイラは\fIfinally\fRブロックに関する警告を生成します。\fIint\fRメソッドが呼び出されると、値0が返されます。\fIfinally\fRブロックは、\fItry\fRブロックが終了すると実行されます。この例では、制御が\fIcatch\fRブロックに移された場合、\fIint\fRメソッドは終了します。ただし、\fIfinally\fRブロックは実行される必要があるため、制御がメソッドの外部に移されていても、このブロックは実行されます。 +.RE +.PP +options +.RS 4 +コマンドライン・オプションの使用に関する問題について警告します。クロスコンパイル・オプションを参照してください。 +.RE +.PP +overrides +.RS 4 +メソッドのオーバーライドに関する問題について警告します。たとえば、次の2つのクラスがあるとします。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl public class ClassWithVarargsMethod { -.fl - void varargsMethod(String... s) { } -.fl + void varargsMethod(String\&.\&.\&. s) { } } -.fl -\fP -.fi -.nf -\f3 -.fl + public class ClassWithOverridingMethod extends ClassWithVarargsMethod { -.fl - @Override -.fl - void varargsMethod(String[] s) { } -.fl + @Override + void varargsMethod(String[] s) { } } -.fl -\fP .fi -.LP -コンパイラは次のような警告を生成します。 +.if n \{\ +.RE +.\} +コンパイラは、次のような警告を生成します。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -warning: [override] varargsMethod(String[]) in ClassWithOverridingMethod overrides varargsMethod(String...) in ClassWithVarargsMethod; overriding method is missing '...' -.fl -\fP +warning: [override] varargsMethod(String[]) in ClassWithOverridingMethod +overrides varargsMethod(String\&.\&.\&.) in ClassWithVarargsMethod; overriding +method is missing \*(Aq\&.\&.\&.\*(Aq .fi -.LP -コンパイラは、varargs メソッドを検出すると、varargs の仮パラメータを配列に変換します。メソッド \f2ClassWithVarargsMethod.varargsMethod\fP では、コンパイラは varargs の仮パラメータ \f2String... s\fP を仮パラメータ \f2String[] s\fP に変換します。String[] s は、メソッド \f2ClassWithOverridingMethod.varargsMethod\fP の仮パラメータに対応する配列です。その結果、この例ではコンパイルが行われます。 -.TP 3 -path -コマンド行での無効なパス要素と存在しないパスディレクトリについて警告します (クラスパス、ソースパスなどのパス関連)。このような警告を \f2@SuppressWarnings\fP 注釈で抑制することはできません。次に例を示します。 +.if n \{\ +.RE +.\} +コンパイラは、\fIvarargs\fRメソッドを検出すると、\fIvarargs\fRの仮パラメータを配列に変換します。メソッド\fIClassWithVarargsMethod\&.varargsMethod\fRでは、コンパイラは\fIvarargs\fRの仮パラメータ\fIString\&.\&.\&. s\fRを仮パラメータ\fIString[] s\fRに変換します。これは、メソッド\fIClassWithOverridingMethod\&.varargsMethod\fRの仮パラメータに対応する配列です。その結果、この例ではコンパイルが行われます。 +.RE +.PP +path +.RS 4 +コマンドラインでの無効なパス要素と存在しないパス・ディレクトリについて警告します(クラス・パス、ソース・パスなどのパス関連)。このような警告を\fI@SuppressWarnings\fR注釈で抑制することはできません。たとえば、次のようになります。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -javac \-Xlint:path \-classpath /nonexistentpath Example.java -.fl -\fP +javac \-Xlint:path \-classpath /nonexistentpath Example\&.java .fi -.TP 3 -processing -注釈処理に関する問題について警告します。コンパイラがこの警告を生成するのは、注釈を含むクラスがあるときに、使用している注釈プロセッサでその型の例外を処理できない場合です。単純な注釈プロセッサの例を次に示します。 -.LP -\f3ソースファイル \fP\f4AnnoProc.java\fP: +.if n \{\ +.RE +.\} +.RE +.PP +processing +.RS 4 +注釈処理に関する問題について警告します。コンパイラがこの警告を生成するのは、注釈を含むクラスがあるときに、使用している注釈プロセッサでそのタイプの例外を処理できない場合です。たとえば、単純な注釈プロセッサを次に示します。 +.sp +\fBソース・ファイルAnnocProc\&.java\fR: +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -import java.util.*; -.fl -import javax.annotation.processing.*; -.fl -import javax.lang.model.*; -.fl -import javax.lang.model.element.*; -.fl +import java\&.util\&.*; +import javax\&.annotation\&.processing\&.*; +import javax\&.lang\&.model\&.*; +import\&.javaz\&.lang\&.model\&.element\&.*; -.fl @SupportedAnnotationTypes("NotAnno") -.fl public class AnnoProc extends AbstractProcessor { -.fl - public boolean process(Set elems, RoundEnvironment renv) { -.fl - return true; -.fl - } -.fl - -.fl - public SourceVersion getSupportedSourceVersion() { -.fl - return SourceVersion.latest(); -.fl - } -.fl -} -.fl -\fP -.fi -.LP -\f3ソースファイル \fP\f4AnnosWithoutProcessors.java\fP\f3:\fP -.nf -\f3 -.fl -@interface Anno { } -.fl - -.fl -@Anno -.fl -class AnnosWithoutProcessors { } -.fl -\fP -.fi -.LP -次のコマンドは、注釈プロセッサ \f2AnnoProc\fP をコンパイルし、この注釈プロセッサをソースファイル \f2AnnosWithoutProcessors.java\fP に対して実行します。 -.nf -\f3 -.fl -% javac AnnoProc.java -.fl -% javac \-cp . \-Xlint:processing \-processor AnnoProc \-proc:only AnnosWithoutProcessors.java -.fl -\fP -.fi -.LP -コンパイラがソースファイル \f2AnnosWithoutProcessors.java\fP に対して注釈プロセッサを実行すると、次の警告が生成されます。 -.nf -\f3 -.fl -warning: [processing] No processor claimed any of these annotations: Anno -.fl -\fP -.fi -.LP -この問題を解決するには、クラス \f2AnnosWithoutProcessors\fP で定義および使用される注釈の名前を \f2Anno\fP から \f2NotAnno\fP に変更します。 -.TP 3 -rawtypes -raw 型に対する未検査操作について警告します。次の文では、 \f2rawtypes\fP 警告が生成されます。 -.nf -\f3 -.fl -void countElements(List l) { ... } -.fl -\fP -.fi -.LP -次の文では、 \f2rawtypes\fP 警告は生成されません。 -.nf -\f3 -.fl -void countElements(List l) { ... } -.fl -\fP -.fi -.LP -\f2List\fP は raw 型です。ただし、 \f2List\fP はアンバウンド形式のワイルドカードのパラメータ化された型です。 \f2List\fP はパラメータ化されたインタフェースなので、必ずその型引数を指定する必要があります。この例では、 \f2List\fP の仮引数はアンバウンド形式のワイルドカード (\f2?\fP) を使ってその仮型パラメータとして指定されます。つまり、 \f2countElements\fP メソッドは \f2List\fP インタフェースのどのインスタンス化も受け付けることができます。 -.TP 3 -serial -直列化可能クラスに \f2serialVersionUID\fP 定義がないことを警告します。次に例を示します。 -.nf -\f3 -.fl -public class PersistentTime implements Serializable -.fl -{ -.fl - private Date time; -.fl - -.fl - public PersistentTime() { -.fl - time = Calendar.getInstance().getTime(); -.fl - } -.fl - -.fl - public Date getTime() { -.fl - return time; -.fl - } -.fl -} -.fl -\fP -.fi -.LP -コンパイラは次の警告を生成します。 -.nf -\f3 -.fl -warning: [serial] serializable class PersistentTime has no definition of serialVersionUID -.fl -\fP -.fi -.LP -直列化可能クラスが \f2serialVersionUID\fP という名前のフィールドを明示的に宣言しない場合、直列化ランタイムは「Java オブジェクト直列化仕様」で説明されているように、クラスのさまざまな側面に基づいて、クラスの \f2serialVersionUID\fP のデフォルト値を計算します。ただし、すべての直列化可能クラスが \f2serialVersionUID\fP 値を明示的に宣言することを強くお勧めします。これは、 \f2serialVersionUID\fP 値を計算するデフォルトのプロセスが、コンパイラの実装によって異なる可能性のあるクラスの詳細にきわめて影響を受けやすく、直列化復元中に予期しない \f2InvalidClassExceptions\fP が発生する可能性があるためです。したがって、Java コンパイラの実装が異なっても \f2serialVersionUID\fP 値の一貫性を確保にするには、直列化可能クラスが \f2serialVersionUID\fP 値を明示的に宣言する必要があります。 -.TP 3 -static -static の使用に関する問題について警告します。次に例を示します。 -.nf -\f3 -.fl -class XLintStatic { -.fl - static void m1() { } -.fl - void m2() { this.m1(); } -.fl -} -.fl -\fP -.fi -.LP -コンパイラは次の警告を生成します。 -.nf -\f3 -.fl -warning: [static] static method should be qualified by type name, XLintStatic, instead of by an expression -.fl -\fP -.fi -.LP -この問題を解決するために、次のように static メソッド \f2m1\fP を呼び出すことができます。 -.nf -\f3 -.fl -XLintStatic.m1(); -.fl -\fP -.fi -.LP -あるいは、 \f2static\fP キーワードをメソッド \f2m1\fP の宣言から削除することもできます。 -.TP 3 -try -try\-with\-resources 文を含む、 \f2try\fP ブロックの使用に関する問題について警告します。たとえば、try 文で宣言されたリソース \f2ac\fP が使用されないために、 \f2次の文に対して警告が\fP 生成されます。 -.nf -\f3 -.fl -try ( AutoCloseable ac = getResource() ) { -.fl - // do nothing -.fl -} -.fl -\fP -.fi -.TP 3 -unchecked -Java 言語仕様で指定されている未検査変換警告の詳細を示します。次に例を示します。 -.nf -\f3 -.fl - List l = new ArrayList(); -.fl - List ls = l; // unchecked warning -.fl -\fP -.fi -.LP -型の消去中に、型 \f2ArrayList\fP および \f2List\fP はそれぞれ \f2ArrayList\fP および \f2List\fP になります。 -.LP -変数 \f2ls\fP にはパラメータ化された型 \f2List\fP が指定されています。l によって参照される \f2List\fP \f2が\fP \f2ls\fP に代入されると、コンパイラは未検査警告を生成します。コンパイラは \f2l\fP が \f2List\fP 型を参照するかどうかをコンパイル時に判断できません。また、JVM が実行時にそれを判断できないことも認識しています。l は List 型を参照しません。その結果、ヒープ汚染が発生します。 -.LP -詳しく説明すると、ヒープ汚染状態が発生するのは、 \f2List\fP オブジェクト \f2l\fP (その static 型は \f2List\fP) が別の \f2List\fP オブジェクト \f2ls\fP (異なる static 型 \f2List\fP を持つ) に代入される場合です。しかし、コンパイラではこの代入を未だに許可しています。総称をサポートしない Java SE のバージョンとの下位互換性を確保するために、この代入を許可する必要があります。型消去のために、 \f2List\fP と \f2List\fP は \f2List\fP になります。その結果、コンパイラはオブジェクト \f2l\fP ( \f2List\fP という raw 型を持つ) をオブジェクト \f2ls\fPに代入することを許可します。 -.TP 3 -varargs -可変引数 (varargs) メソッド、特に非具象化可能引数を含むものの使用が安全でないことを警告します。次に例を示します。 -.nf -\f3 -.fl -public class ArrayBuilder { -.fl - public static void addToList (List listArg, T... elements) { -.fl - for (T x : elements) { -.fl - listArg.add(x); -.fl - } -.fl + public boolean process(Set elems, RoundEnvironment renv){ + return true; } -.fl + + public SourceVersion getSupportedSourceVersion() { + return SourceVersion\&.latest(); + } } -.fl -\fP .fi -.LP -コンパイラは、メソッド \f2ArrayBuilder.addToList\fP の定義に関する次の警告を生成します。 -.nf -\f3 -.fl -warning: [varargs] Possible heap pollution from parameterized vararg type T -.fl -\fP -.fi -.LP -コンパイラは、varargs メソッドを検出すると、varargs の仮パラメータを配列に変換します。しかし、Java プログラミング言語では、パラメータ化された型の配列の作成を許可していません。メソッド \f2ArrayBuilder.addToList\fP では、コンパイラは varargs の仮パラメータ \f2T... elements\fP を仮パラメータ \f2T[] elements\fP(配列) に変換します。しかし、型消去のために、コンパイラは varargs の仮パラメータを \f2Object[] elements\fP に変換します。その結果、ヒープ汚染が発生する可能性があります。 +.if n \{\ .RE - -.LP -.SH "コマンド行引数ファイル" -.LP -.LP -javac のコマンド行を短くしたり簡潔にしたりするために、 \f2javac\fP コマンドに対する引数 ( \f2\-J\fP オプションを除く) を含む 1 つ以上のファイルを指定することができます。この方法を使うと、どのオペレーティングシステム上でも、任意の長さの javac コマンドを作成できます。 -.LP -.LP -引数ファイルには、javac のオプションとソースファイル名を自由に組み合わせて記述できます。ファイル内の各引数は、スペースまたは改行で区切ります。ファイル名に空白が含まれている場合は、そのファイル名全体を二重引用符で囲みます。 -.LP -.LP -引数ファイル内のファイル名は、現在のディレクトリから見た相対パスになります。引数ファイルの位置から見た相対パスではありません。引数ファイル内のファイル名リストでは、ワイルドカード (*) は使用できません。たとえば、 \f2*.java\fP とは指定できません。引数ファイル内の引数で \f2@\fP 文字を使用して、複数のファイルを再帰的に解釈することはサポートされていません。また、 \f2\-J\fP オプションもサポートされていません。このオプションは起動ツールに渡されますが、起動ツールでは引数ファイルをサポートしていないからです。 -.LP -.LP -javac を実行するときに、各引数ファイルのパスとファイル名の先頭に \f2@\fP 文字を付けて渡します。javac は、\f2@\fP 文字で始まる引数を見つけると、そのファイルの内容を展開して引数リストに挿入します。 -.LP -.SS -引数ファイルを 1 つ指定する例 -.LP -.LP -\f2「argfile」という名前の引数ファイルに\fPすべての javac 引数を格納する場合は、次のように指定します。 -.LP +.\} +\fBソース・ファイルAnnosWithoutProcessors\&.java\fR: +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -% \fP\f3javac @argfile\fP -.fl -.fi - -.LP -.LP -この引数ファイルには、次の例で示されている 2 つのファイルの内容を両方とも入れることができます。 -.LP -.SS -引数ファイルを 2 つ指定する例 -.LP -.LP -たとえば、javac オプション用に 1 ファイル、ソースファイル名用に 1 ファイルというように、2 つの引数ファイルを作成することもできます。なお、このあとのリストでは、行の継続文字を使用していません。 -.LP -.LP -以下の内容を含む \f2options\fP というファイルを作成します。 -.LP -.nf -\f3 -.fl - \-d classes -.fl - \-g -.fl - \-sourcepath /java/pubs/ws/1.3/src/share/classes -.fl - -.fl -\fP -.fi - -.LP -.LP -以下の内容を含む \f2classes\fP というファイルを作成します。 -.LP -.nf -\f3 -.fl - MyClass1.java -.fl - MyClass2.java -.fl - MyClass3.java -.fl - -.fl -\fP -.fi - -.LP -.LP -次のコマンドを使用して \f3javac\fP を実行します。 -.LP -.nf -\f3 -.fl - % \fP\f3javac @options @classes\fP -.fl - -.fl -.fi - -.LP -.SS -パス付きの引数ファイルの例 -.LP -.LP -引数ファイルには、パスを指定できます。ただし、そのファイル内に指定されたファイル名は、現在の作業ディレクトリから見た相対パスになります。つまり、下の例の場合は、 \f2path1\fP や \f2path2\fP から見た相対パスではありません。 -.LP -.nf -\f3 -.fl -% \fP\f3javac @path1/options @path2/classes\fP -.fl -.fi - -.LP -.SH "注釈処理" -.LP -.LP -\f3javac\fP が注釈処理を直接サポートしているため、独立した注釈処理ツールである \f3apt\fP を使用する必要がなくなりました。 -.LP -.LP -注釈処理の API は、 \f2javax.annotation.processing\fP および \f2javax.lang.model\fP パッケージとそのサブパッケージ内に定義されています。 -.LP -.SS -注釈処理の概要 -.LP -.LP -\f3\-proc:none\fP オプションによって注釈処理が無効化されないかぎり、コンパイラは使用可能なすべての注釈プロセッサを検索します。検索パスは \f3\-processorpath\fP オプションを使って指定できます。検索パスを指定しなかった場合は、ユーザークラスパスが使用されます。プロセッサの検索は、検索パス上の \f2META\-INF/services/javax.annotation.processing.Processor\fP という名前のサービスプロバイダ構成ファイルに基づいて行われます。このようなファイルには、使用するすべての注釈プロセッサの名前を、1 行に 1 つずつ含めてください。また、別の方法として、\f3\-processor\fP オプションを使ってプロセッサを明示的に指定することもできます。 -.LP -.LP -コンパイラは、コマンド行のソースファイルやクラスを走査することで、どのような注釈が存在しているかを確認し終わると、プロセッサに対して問い合わせを行い、それらのプロセッサがどの注釈を処理できるのかを確認します。一致するものが見つかった場合、そのプロセッサが呼び出されます。各プロセッサは、自身が処理する注釈を「要求」できます。その場合、それらの注釈に対する別のプロセッサを見つける試みは行われません。すべての注釈が要求されてしまうと、コンパイラはそれ以上プロセッサの検索を行いません。 -.LP -.LP -いずれかのプロセッサによって新しいソースファイルが生成されると、注釈処理の 2 回目のラウンドが開始されます。新しく生成されたすべてのソースファイルが走査され、前回と同様に注釈が処理されます。以前のラウンドで呼び出されたプロセッサはすべて、後続のどのラウンドでも呼び出されます。これが、新しいソースファイルが生成されなくなるまで続きます。 -.LP -.LP -あるラウンドで新しいソースファイルが生成されなかった場合、注釈プロセッサがあと 1 回だけ呼び出され、必要な処理を実行する機会が与えられます。最後に、\f3\-proc:only\fP オプションが使用されないかぎり、コンパイラは、元のソースファイルと生成されたすべてのソースファイルをコンパイルします。 -.LP -.SS -暗黙的にロードされたソースファイル -.LP -.LP -コンパイラは、一連のソースファイルをコンパイルする際に、別のソースファイルを暗黙的にロードすることが必要な場合があります (「型の検索」を参照)。そのようなファイルは、現時点では注釈処理の対象になりません。デフォルトでは、注釈処理が実行され、かつ暗黙的にロードされたソースファイルが 1 つでもコンパイルされた場合にコンパイラは警告を発行します。この警告を抑制する方法については、\-implicit オプションを参照してください。 -.LP -.SH "型の検索" -.LP -.LP -ソースファイルをコンパイルする場合、コマンド行で指定したソースファイルに型の定義が見つからないとき、コンパイラは通常、その型に関する情報を必要とします。コンパイラは、ソースファイルで使われているクラスまたはインタフェース、拡張されているクラスまたはインタフェース、あるいは実装されているクラスまたはインタフェースすべてについて、型の情報を必要とします。これには、ソースファイルで明示的には言及されていなくても、継承を通じて情報を提供するクラスとインタフェースも含まれます。 -.LP -.LP -たとえば、\f3java.applet.Applet\fP をサブクラスにした場合、\f3アプレットの\fP祖先のクラス(\f3java.awt.Panel\fP、\f3java.awt.Container\fP、\f3java.awt.Component\fP、\f3java.lang.Object\fP)を使用していることになります。 -.LP -.LP -コンパイラは、型の情報が必要になると、その型を定義しているソースファイルまたはクラスファイルを探します。まず、ブートストラップクラスと拡張機能クラスを検索し、続いてユーザークラスパス (デフォルトではカレントディレクトリ) を検索します。ユーザークラスパスは、\f3CLASSPATH\fP 環境変数を設定して定義するか、または \f3\-classpath\fP コマンド行オプションを使って設定します。詳細は、「クラスパスの設定」を参照してください。 -.LP -.LP -\-sourcepath オプションが指定されている場合、コンパイラは、指定されたパスからソースファイルを検索します。それ以外の場合は、ユーザークラスパスからクラスファイルとソースファイルの両方を検索します。 -.LP -.LP -\f3\-bootclasspath\fP オプションと \f3\-extdirs\fP オプションを使うと、別のブートストラップクラスや拡張機能クラスを指定できます。このあとの「クロスコンパイルオプション」を参照してください。 -.LP -.LP -型の検索に成功したときに得られる結果は、クラスファイル、ソースファイル、またはその両方である場合があります。両方が見つかった場合、そのどちらを使用すべきかを \-Xprefer オプションでコンパイラに指示できます。\f3newer\fP が指定された場合、コンパイラは 2 つのファイルの新しい方を使用します。\f3source\fP が指定された場合、コンパイラはソースファイルを使用します。デフォルトは \f3newer\fP です。 -.LP -.LP -型の検索自体によって、または \f3\-Xprefer\fP が設定された結果として必要な型のソースファイルが見つかった場合、コンパイラはそのソースファイルを読み取り、必要な情報を取得します。さらに、コンパイラはデフォルトで、そのソースファイルのコンパイルも行います。\-implicit オプションを使えばその動作を指定できます。\f3none\fP を指定した場合、そのソースファイルのクラスファイルは生成されません。\f3class\fP を指定した場合、そのソースファイルのクラスファイルが生成されます。 -.LP -.LP -コンパイラは、注釈処理の完了後に、ある型情報の必要性を認識しない場合があります。その型情報があるソースファイル内に見つかり、かつ \f3\-implicit\fP オプションが指定されていない場合は、そのファイルが注釈処理の対象とならずにコンパイルされることを、コンパイラがユーザーに警告します。この警告を無効にするには、(そのファイルが注釈処理の対象となるように) そのファイルをコマンド行に指定するか、あるいはそのようなソースファイルに対してクラスファイルを生成すべきかどうかを \f3\-implicit\fP オプションを使って指定します。 -.LP -.SH "プログラマティックインタフェース" -.LP -.LP -\f3javac\fP は、 \f2javax.tools\fP パッケージ内のクラスとインタフェースによって定義される新しい Java Compiler API をサポートします。 -.LP -.SS -例 -.LP -.LP -コマンド行から指定された引数を使ってコンパイルを実行するには、次のようなコードを使用します。 -.LP -.nf -\f3 -.fl -JavaCompiler javac = ToolProvider.getSystemJavaCompiler(); -.fl -int rc = javac.run(null, null, null, args); -.fl -\fP -.fi - -.LP -.LP -この場合、標準出力ストリームにすべての診断メッセージが書き出され、コマンド行から呼び出された \f3javac\fP が返すのと同じ終了コードが返されます。 -.LP -.LP -\f2javax.tools.JavaCompiler\fP インタフェース上のほかのメソッドを使えば、診断メッセージの処理やファイルの読み取り元/書き込み先の制御などを行えます。 -.LP -.SS -旧式のインタフェース -.LP -.LP -\f3注:\fP この API は、下位互換性を確保するためだけに残されています。新しいコードでは、必ず前述の Java Compiler API を使用してください。 -.LP -.LP -\f2com.sun.tools.javac.Main\fP クラスには、プログラム内からコンパイラを呼び出すための static メソッドが 2 つ用意されています。それらを次に示します。 -.LP -.nf -\f3 -.fl -public static int compile(String[] args); -.fl -public static int compile(String[] args, PrintWriter out); -.fl -\fP -.fi - -.LP -.LP -\f2args\fP パラメータは、javac プログラムに通常渡される任意のコマンド行引数を表しています。その概要については、前出の「形式」節を参照してください。 -.LP -.LP -\f2out\fP パラメータは、コンパイラの診断メッセージの出力先を示します。 -.LP -.LP -戻り値は、\f3javac\fP の終了値と同じです。 -.LP -.LP -名前が \f2com.sun.tools.javac\fP で始まるパッケージ (非公式には \f2com.sun.tools.javac\fP のサブパッケージとして知られる) に含まれるその他のクラスやメソッドは、どれも完全に内部用であり、いつでも変更される可能性があります。 -.LP -.SH "例" -.LP -.SS -簡単なプログラムのコンパイル -.LP -.LP -\f2Hello.java\fP というソースファイルで、\f3greetings.Hello\fP という名前のクラスを定義しているとします。 \f2greetings\fP ディレクトリは、ソースファイルとクラスファイルの両方があるパッケージディレクトリで、現在のディレクトリのすぐ下にあります。このため、この例では、デフォルトのユーザークラスパスを使用できます。また、\f3\-d\fP を使って別の出力先ディレクトリを指定する必要もありません。 -.LP -.nf -\f3 -.fl -% \fP\f3ls\fP -.fl -greetings/ -.fl -% \f3ls greetings\fP -.fl -Hello.java -.fl -% \f3cat greetings/Hello.java\fP -.fl -package greetings; -.fl - -.fl -public class Hello { -.fl - public static void main(String[] args) { -.fl - for (int i=0; i < args.length; i++) { -.fl - System.out.println("Hello " + args[i]); -.fl - } -.fl - } -.fl -} -.fl -% \f3javac greetings/Hello.java\fP -.fl -% \f3ls greetings\fP -.fl -Hello.class Hello.java -.fl -% \f3java greetings.Hello World Universe Everyone\fP -.fl -Hello World -.fl -Hello Universe -.fl -Hello Everyone -.fl -.fi - -.LP -.SS -複数のソースファイルのコンパイル -.LP -.LP -次の例では、パッケージ \f2greetings\fP 内のすべてのソースファイルをコンパイルします。 -.LP -.nf -\f3 -.fl -% \fP\f3ls\fP -.fl -greetings/ -.fl -% \f3ls greetings\fP -.fl -Aloha.java GutenTag.java Hello.java Hi.java -.fl -% \f3javac greetings/*.java\fP -.fl -% \f3ls greetings\fP -.fl -Aloha.class GutenTag.class Hello.class Hi.class -.fl -Aloha.java GutenTag.java Hello.java Hi.java -.fl -.fi - -.LP -.SS -ユーザークラスパスの指定 -.LP -.LP -上の例のソースファイルのうち 1 つを変更し、変更後のファイルを再コンパイルするとします。 -.LP -.nf -\f3 -.fl -% \fP\f3pwd\fP -.fl -/examples -.fl -% \f3javac greetings/Hi.java\fP -.fl -.fi - -.LP -.LP -\f2greetings.Hi\fP は、 \f2greetings\fP パッケージ内のほかのクラスを参照しているため、コンパイラはこれらのクラスを探す必要があります。上の例では、デフォルトのユーザークラスパスが、パッケージディレクトリを含むディレクトリと同じであるため、コンパイルは正常に実行されます。ただし、現在どのディレクトリにいるかに関係なく、このファイルを再コンパイルする場合は、ユーザークラスパスに \f2/examples\fP を追加する必要があります。ユーザークラスパスにエントリを追加するには、\f3CLASSPATH\fP を設定する方法もありますが、ここでは \f3\-classpath\fP オプションを使うことにします。 -.LP -.nf -\f3 -.fl -% \fP\f3javac \-classpath /examples /examples/greetings/Hi.java\fP -.fl -.fi - -.LP -.LP -再度 \f2greetings.Hi\fP を変更してバナーユーティリティーを使うようにした場合は、このバナーユーティリティーもユーザークラスパスを通じてアクセスできるようになっている必要があります。 -.LP -.nf -\f3 -.fl -% \fP\f3javac \-classpath /examples:/lib/Banners.jar \\ -.fl - /examples/greetings/Hi.java\fP -.fl -.fi - -.LP -.LP -\f2greetings\fP 内のクラスを実行するには、 \f2greetings\fP と、それが使うクラスの両方にアクセスできる必要があります。 -.LP -.nf -\f3 -.fl -% \fP\f3java \-classpath /examples:/lib/Banners.jar greetings.Hi\fP -.fl -.fi - -.LP -.SS -ソースファイルとクラスファイルの分離 -.LP -.LP -特に大規模プロジェクトの場合は、ソースファイルとクラスファイルを別々のディレクトリに置くと便利なことがあります。クラスファイルの出力先を別に指定するには、\f3\-d\fP を使います。ソースファイルはユーザークラスパスにはないので、\f3\-sourcepath\fP を使って、コンパイラがソースファイルを見つけることができるようにします。 -.LP -.nf -\f3 -.fl -% \fP\f3ls\fP -.fl -classes/ lib/ src/ -.fl -% \f3ls src\fP -.fl -farewells/ -.fl -% \f3ls src/farewells\fP -.fl -Base.java GoodBye.java -.fl -% \f3ls lib\fP -.fl -Banners.jar -.fl -% \f3ls classes\fP -.fl -% \f3javac \-sourcepath src \-classpath classes:lib/Banners.jar \\ -.fl - src/farewells/GoodBye.java \-d classes\fP -.fl -% \f3ls classes\fP -.fl -farewells/ -.fl -% \f3ls classes/farewells\fP -.fl -Base.class GoodBye.class -.fl -.fi - -.LP -.LP -\f3注:\fP コマンド行では \f2src/farewells/Base.java\fP を指定していませんが、このファイルもコンパイラによってコンパイルされています。自動コンパイルを監視するには、\f3\-verbose\fP オプションを使います。 -.LP -.SS -クロスコンパイルの例 -.LP -.LP -ここでは、\f3javac\fP を使って、1.6 VM 上で実行するコードをコンパイルします。 -.LP -.nf -\f3 -.fl -% \fP\f3javac \-source 1.6 \-target 1.6 \-bootclasspath jdk1.6.0/lib/rt.jar \\ -.fl - \-extdirs "" OldCode.java\fP -.fl -.fi - -.LP -.LP -\f2\-source 1.6\fP オプションにより、 \f2OldCode.java\fP のコンパイルにはバージョン 1.6 (または 6) の Java プログラミング言語が使用されます。\f3\-target 1.6\fP オプションにより、1.6 VM と互換性のあるクラスファイルが生成されます。ほとんどの場合、\f3\-target\fP オプションの値は \f3\-source\fP オプションの値になります。この例では、\f3\-target\fP オプションを省略できます。 -.LP -.LP -\f3\-bootclasspath\fP オプションを使用して、適切なバージョンのブートストラップクラス ( \f2rt.jar\fP ライブラリ) を指定する必要があります。指定しない場合は、コンパイラによって次の警告が生成されます。 -.LP -.nf -\f3 -.fl -% \fP\f3javac \-source 1.6 OldCode.java\fP -.fl -warning: [options] bootstrap class path not set in conjunction with \-source 1.6 -.fl -.fi - -.LP -.LP -適切なバージョンのブートストラップクラスを指定しない場合、コンパイラは古い言語仕様 (この例では、バージョン 1.6 の Java プログラミング言語) を新しいブートストラップクラスと組み合わせて使用します。その結果、存在しないメソッドへの参照が含まれていることがあるため、クラスファイルが古いプラットフォーム (この場合は Java SE 6) で動作しない可能性があります。 -.LP -.SH "関連項目" -.LP -.RS 3 -.TP 2 -o -.na -\f2「The javac Guide」\fP @ -.fi -http://java.sun.com/javase/6/docs/technotes/guides/javac/index.html -.TP 2 -o -「java(1) \- Java アプリケーション起動ツール」 -.TP 2 -o -「jdb(1) \- Java デバッガ」 -.TP 2 -o -「javah(1) \- C ヘッダーとスタブファイルジェネレータ」 -.TP 2 -o -「javap(1) \- クラスファイル逆アセンブラ」 -.TP 2 -o -「javadoc(1) \- Java API ドキュメントジェネレータ」 -.TP 2 -o -「jar(1) \- JAR アーカイブツール」 -.TP 2 -o -.na -\f2「Java 拡張機能フレームワーク」\fP @ -.fi -http://java.sun.com/javase/6/docs/technotes/guides/extensions/index.html -.RE - -.LP +@interface Anno { } +@Anno +class AnnosWithoutProcessors { } +.fi +.if n \{\ +.RE +.\} +次のコマンドは、注釈プロセッサ\fIAnnoProc\fRをコンパイルし、この注釈プロセッサをソース・ファイル\fIAnnosWithoutProcessors\&.java\fRに対して実行します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +javac AnnoProc\&.java +javac \-cp \&. \-Xlint:processing \-processor AnnoProc \-proc:only AnnosWithoutProcessors\&.java +.fi +.if n \{\ +.RE +.\} +コンパイラがソース・ファイル\fIAnnosWithoutProcessors\&.java\fRに対して注釈プロセッサを実行すると、次の警告が生成されます。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +warning: [processing] No processor claimed any of these annotations: Anno + +.fi +.if n \{\ +.RE +.\} +この問題を解決するために、クラス\fIAnnosWithoutProcessors\fRで定義および使用される注釈の名前を、\fIAnno\fRから\fINotAnno\fRに変更できます。 +.RE +.PP +rawtypes +.RS 4 +raw型に対する未検査操作について警告します。次の文では、\fIrawtypes\fR警告が生成されます。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +void countElements(List l) { \&.\&.\&. } +.fi +.if n \{\ +.RE +.\} +次の例では、\fIrawtypes\fR警告は生成されません。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +void countElements(List l) { \&.\&.\&. } +.fi +.if n \{\ +.RE +.\} +\fIList\fRはraw型です。ただし、\fIList\fRは、アンバウンド形式のワイルドカードのパラメータ化された型です。\fIList\fRはパラメータ化されたインタフェースであるため、常にその型引数を指定します。この例では、\fIList\fRの仮引数はアンバウンド形式のワイルドカード(\fI?\fR)を使用してその仮型パラメータとして指定されます。つまり、\fIcountElements\fRメソッドは\fIList\fRインタフェースのどのインスタンス化も受け付けることができます。 +.RE +.PP +Serial +.RS 4 +直列化可能クラスに\fIserialVersionUID\fR定義がないことを警告します。たとえば、次のようになります。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +public class PersistentTime implements Serializable +{ + private Date time; + + public PersistentTime() { + time = Calendar\&.getInstance()\&.getTime(); + } + + public Date getTime() { + return time; + } +} +.fi +.if n \{\ +.RE +.\} +コンパイラは次の警告を生成します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +warning: [serial] serializable class PersistentTime has no definition of +serialVersionUID +.fi +.if n \{\ +.RE +.\} +直列化可能クラスが\fIserialVersionUID\fRという名前のフィールドを明示的に宣言しない場合、直列化ランタイム環境では、「Javaオブジェクト直列化仕様」で説明されているように、クラスの様々な側面に基づいて、クラスの\fIserialVersionUID\fRのデフォルト値を計算します。ただし、すべての直列化可能クラスが\fIserialVersionUID\fR値を明示的に宣言することを強くお薦めします。 これは、\fIserialVersionUID\fR値を計算するデフォルトのプロセスが、コンパイラの実装によって異なる可能性のあるクラスの詳細にきわめて影響を受けやすく、その結果、直列化復元中に予期しない\fIInvalidClassExceptions\fRが発生する可能性があるためです。Javaコンパイラの実装が異なっても\fIserialVersionUID\fR値の一貫性を確保にするには、直列化可能クラスが\fIserialVersionUID\fR値を明示的に宣言する必要があります。 +.RE +.PP +static +.RS 4 +staticの使用に関する問題について警告します。たとえば、次のようになります。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +class XLintStatic { + static void m1() { } + void m2() { this\&.m1(); } +} +.fi +.if n \{\ +.RE +.\} +コンパイラは次の警告を生成します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +warning: [static] static method should be qualified by type name, +XLintStatic, instead of by an expression +.fi +.if n \{\ +.RE +.\} +この問題を解決するために、次のように\fIstatic\fRメソッド\fIm1\fRを呼び出すことができます。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +XLintStatic\&.m1(); +.fi +.if n \{\ +.RE +.\} +あるいは、\fIstatic\fRキーワードをメソッド\fIm1\fRの宣言から削除することもできます。 +.RE +.PP +try +.RS 4 +try\-with\-resources文を含む、\fItry\fRブロックの使用に関する問題について警告します。たとえば、\fItry\fRブロックで宣言されたリソース\fIac\fRが使用されないために、次の文に対して警告が生成されます。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +try ( AutoCloseable ac = getResource() ) { // do nothing} +.fi +.if n \{\ +.RE +.\} +.RE +.PP +unchecked +.RS 4 +Java言語仕様で指定されている未検査変換警告の詳細を示します。たとえば、次のようになります。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +List l = new ArrayList(); +List ls = l; // unchecked warning +.fi +.if n \{\ +.RE +.\} +型の消去中に、型\fIArrayList\fRおよび\fIList\fRは、それぞれ\fIArrayList\fRおよび\fIList\fRになります。 +.sp +\fIls\fRコマンドには、パラメータ化された型\fIList\fRが指定されています。\fIl\fRによって参照される\fIList\fRが\fIls\fRに割り当てられた場合、コンパイラは未検査警告を生成します。コンパイル時に、コンパイラおよびJVMは、\fIl\fRが\fIList\fR型を参照するかどうかを判別できません。この場合、\fIl\fRは、\fIList\fR型を参照しません。その結果、ヒープ汚染が発生します。 +.sp +ヒープ汚染状態が発生するのは、\fIList\fRオブジェクト\fIl\fR +(そのstatic型は\fIList\fR)が別の\fIList\fRオブジェクト\fIls\fR +(異なるstatic型\fIList\fRを持つ)に代入される場合です。しかし、コンパイラではこの代入をいまだに許可しています。総称をサポートしないJava SEのリリースとの下位互換性を確保するために、この代入を許可する必要があります。型消去により、\fIList\fRおよび\fIList\fRは、両方とも\fIList\fRになります。その結果、コンパイラはオブジェクト\fIl\fR +(\fIList\fRというraw型を持つ)をオブジェクト\fIls\fRに代入することを許可します。 +.RE +.PP +varargs +.RS 4 +可変引数(\fIvarargs\fR)メソッド、特に非具象化可能引数を含むものの使用が安全でないことを警告します。たとえば、次のようになります。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +public class ArrayBuilder { + public static void addToList (List listArg, T\&.\&.\&. elements) { + for (T x : elements) { + listArg\&.add(x); + } + } +} +.fi +.if n \{\ +.RE +.\} +\fB注意:\fR +非具象化可能型は、型情報が実行時に完全に使用不可能な型です。 +.sp +コンパイラは、メソッド\fIArrayBuilder\&.addToList\fRの定義に関する次の警告を生成します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +warning: [varargs] Possible heap pollution from parameterized vararg type T +.fi +.if n \{\ +.RE +.\} +コンパイラは、varargsメソッドを検出すると、\fIvarargs\fRの仮パラメータを配列に変換します。しかし、Javaプログラミング言語では、パラメータ化された型の配列の作成を許可していません。メソッド\fIArrayBuilder\&.addToList\fRでは、コンパイラは\fIvarargs\fRの仮パラメータ\fIT\&.\&.\&.\fR要素を仮パラメータ\fIT[]\fR要素(配列)に変換します。しかし、型消去により、コンパイラは\fIvarargs\fRの仮パラメータを\fIObject[]\fR要素に変換します。その結果、ヒープ汚染が発生する可能性があります。 +.RE +.SH "コマンドライン引数ファイル" +.PP +\fIjavac\fRコマンドを短くしたり簡潔にしたりするために、\fIjavac\fRコマンドに対する引数(\fI\-J\fRオプションを除く)を含む1つ以上のファイルを指定することができます。これにより、どのオペレーティング・システム上でも、任意の長さの\fIjavac\fRコマンドを作成できます。 +.PP +引数ファイルには、\fIjavac\fRのオプションとソース・ファイル名を自由に組み合せて記述できます。ファイル内の引数は、空白または改行文字で区切ることができます。ファイル名に埋め込まれた空白がある場合、ファイル名全体を二重引用符で囲みます。 +.PP +引数ファイル内のファイル名は、引数ファイルの位置ではなく、現在のディレクトリに相対的となります。これらのリストでは、ワイルドカード(*)は使用できません(たとえば、\fI*\&.java\fRとは指定できません)。アットマーク(@)を使用したファイルの再帰的な解釈はサポートされていません。また、\fI\-J\fRオプションもサポートされていません。このオプションは起動ツールに渡されますが、起動ツールでは引数ファイルをサポートしていないからです。 +.PP +\fIjavac\fRコマンドを実行するときに、各引数ファイルのパスと名前の先頭にアットマーク(@)文字を付けて渡します。\fIjavac\fRコマンドは、アットマーク(@)で始まる引数を見つけると、そのファイルの内容を展開して引数リストに挿入します。 +.PP +\fBExample 1\fR, 単一の引数ファイル +.RS 4 +\fIargfile\fRという名前の単一の引数ファイルを使用して、すべての\fIjavac\fR引数を格納する場合は、次のように指定します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +javac @argfile +.fi +.if n \{\ +.RE +.\} +この引数ファイルには、例2で示されている両方のファイルの内容を入れることができます。 +.RE +.PP +\fBExample 2\fR, 2つの引数ファイル +.RS 4 +\fIjavac\fRオプション用とソース・ファイル名用に、2つの引数ファイルを作成できます。次のリストには、行の継続文字はありません。 +.sp +次を含むoptionsという名前のファイルを作成します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-d classes +\-g +\-sourcepath /java/pubs/ws/1\&.3/src/share/classes +.fi +.if n \{\ +.RE +.\} +.sp +.if n \{\ +.RS 4 +.\} +.nf +.fi +.if n \{\ +.RE +.\} +次を含むclassesという名前のファイルを作成します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +MyClass1\&.java +MyClass2\&.java +MyClass3\&.java +.fi +.if n \{\ +.RE +.\} +それから、次のように\fIjavac\fRコマンドを実行します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +javac @options @classes +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\fBExample 3\fR, パスを使用した引数ファイル +.RS 4 +引数ファイルはパスを指定できますが、ファイル内のすべてのファイル名は、(\fIpath1\fRや\fIpath2\fRではなく)次のように現在の作業ディレクトリに相対的となります。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +javac @path1/options @path2/classes +.fi +.if n \{\ +.RE +.\} +.RE +.SH "注釈処理" +.PP +\fIjavac\fRコマンドが注釈処理を直接サポートしているため、独立した注釈処理コマンドである\fIapt\fRを使用する必要がなくなりました。 +.PP +注釈プロセッサのAPIは、\fIjavax\&.annotation\&.processing\fRおよび\fIjavax\&.lang\&.model\fRパッケージとそのサブパッケージ内に定義されています。 +.SS "注釈処理を行う方法" +.PP +\fI\-proc:none\fRオプションによって注釈処理が無効化されない限り、コンパイラは使用可能なすべての注釈プロセッサを検索します。検索パスは、\fI\-processorpath\fRオプションを使用して指定できます。パスを指定しない場合、ユーザー・クラス・パスが使用されます。プロセッサの検索は、検索パス上の\fIMETA\-INF/services/javax\&.annotation\&.processing\fR\&.Processorという名前のサービス・プロバイダ構成ファイルに基づいて行われます。このようなファイルには、使用するすべての注釈プロセッサの名前を、1行に1つずつ含めてください。また、別の方法として、\fI\-processor\fRオプションを使用してプロセッサを明示的に指定することもできます。 +.PP +コンパイラは、コマンドラインのソース・ファイルやクラスを走査することで、どのような注釈が存在しているかを確認し終わると、プロセッサに対して問合せを行い、それらのプロセッサがどの注釈を処理できるのかを確認します。一致するものが見つかった場合、そのプロセッサが呼び出されます。各プロセッサは、自身が処理する注釈を要求できます。その場合、それらの注釈に対する別のプロセッサを見つける試みは行われません。すべての注釈が要求されると、コンパイラはそれ以上プロセッサの検索を行いません。 +.PP +いずれかのプロセッサによって新しいソース・ファイルが生成されると、注釈処理の2回目のラウンドが開始されます。新しく生成されたすべてのソース・ファイルがスキャンされ、前回と同様に注釈が処理されます。以前のラウンドで呼び出されたプロセッサはすべて、後続のどのラウンドでも呼び出されます。これが、新しいソース・ファイルが生成されなくなるまで続きます。 +.PP +あるラウンドで新しいソース・ファイルが生成されなかった場合、注釈プロセッサがあと1回のみ呼び出され、残りの処理を実行する機会が与えられます。最後に、\fI\-proc:only\fRオプションが使用されないかぎり、コンパイラは、元のソース・ファイルと生成されたすべてのソース・ファイルをコンパイルします。 +.SS "暗黙的にロードされたソース・ファイル" +.PP +コンパイラは、一連のソース・ファイルをコンパイルする際に、別のソース・ファイルを暗黙的にロードすることが必要な場合があります。型の検索を参照してください。そのようなファイルは、現時点では注釈処理の対象になりません。デフォルトでは、注釈処理が実行され、かつ暗黙的にロードされた任意のソース・ファイルがコンパイルされた場合、コンパイラは警告を発行します。\fI\-implicit\fRオプションでは、警告を抑制する方法が提供されます。 +.SH "型の検索" +.PP +ソース・ファイルをコンパイルするために、コンパイラは通常、型に関する情報を必要としますが、その型の定義はコマンドラインで指定したソース・ファイルにありません。コンパイラは、ソース・ファイルで使用されているクラスまたはインタフェース、拡張されているクラスまたはインタフェース、あるいは実装されているクラスまたはインタフェースすべてについて、型の情報を必要とします。これには、ソース・ファイルで明示的には言及されていなくても、継承を通じて情報を提供するクラスとインタフェースも含まれます。 +.PP +たとえば、サブクラス\fIjava\&.applet\&.Applet\fRを作成すると、\fIアプレット\fRの祖先のクラス(\fIjava\&.awt\&.Panel\fR、\fIjava\&.awt\&.Container\fR、\fIjava\&.awt\&.Component\fRおよび\fIjava\&.lang\&.Object\fR)を使用していることにもなります。 +.PP +コンパイラは、型の情報が必要になると、その型を定義しているソース・ファイルまたはクラス・ファイルを検索します。まず、ブートストラップ・クラスと拡張機能クラスを検索し、続いてユーザー・クラス・パス(デフォルトでは現在のディレクトリ)を検索します。ユーザー・クラス・パスは、\fICLASSPATH\fR環境変数を設定して定義するか、または\fI\-classpath\fRオプションを使用して定義します。 +.PP +\fI\-sourcepath\fRオプションが設定されている場合、コンパイラは、指定されたパスからソース・ファイルを検索します。それ以外の場合、コンパイラは、ユーザー・クラス・パスからクラス・ファイルとソース・ファイルの両方を検索します。 +.PP +\fI\-bootclasspath\fRオプションおよび\fI\-extdirs\fRオプションを使用して、別のブートストラップ・クラスや拡張機能クラスを指定できます。クロスコンパイル・オプションを参照してください。 +.PP +型の検索に成功したときに得られる結果は、クラス・ファイル、ソース・ファイル、またはその両方である場合があります。両方が見つかった場合、そのどちらを使用するかを\fI\-Xprefer\fRオプションでコンパイラに指示できます。\fInewer\fRが指定された場合、コンパイラは2つのファイルのうち新しい方を使用します。\fIsource\fRが指定された場合、コンパイラはソース・ファイルを使用します。デフォルトは\fInewer\fRです。 +.PP +型の検索自体によって、または\fI\-Xprefer\fRオプションが設定された結果として必要な型のソース・ファイルが見つかった場合、コンパイラはそのソース・ファイルを読み取り、必要な情報を取得します。デフォルトでは、コンパイラはソース・ファイルのコンパイルも行います。\fI\-implicit\fRオプションを使用してその動作を指定できます。\fInone\fRが指定された場合、ソース・ファイルに対してクラス・ファイルは生成されません。\fIclass\fRが指定された場合、ソース・ファイルに対してクラス・ファイルが生成されます。 +.PP +コンパイラは、注釈処理が完了するまで、ある型情報の必要性を認識しない場合があります。型情報がソース・ファイル内に見つかり、かつ\fI\-implicit\fRオプションが指定されていない場合、コンパイラによって、そのファイルが注釈処理の対象とならずにコンパイルされることが警告されます。この警告を無効にするには、(そのファイルが注釈処理の対象となるように)そのファイルをコマンドラインに指定するか、あるいはそのようなソース・ファイルに対してクラス・ファイルを生成する必要があるかどうかを\fI\-implicit\fRオプションを使用して指定します。 +.SH "プログラマティック・インタフェース" +.PP +\fIjavac\fRコマンドは、\fIjavax\&.tools\fRパッケージ内のクラスとインタフェースによって定義される新しいJava Compiler APIをサポートします。 +.SS "例" +.PP +コマンドライン引数を指定するようにコンパイルするには、次の構文を使用します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +JavaCompiler javac = ToolProvider\&.getSystemJavaCompiler(); +JavaCompiler javac = ToolProvider\&.getSystemJavaCompiler(); +.fi +.if n \{\ +.RE +.\} +.PP +例では、診断を標準出力ストリームに書き込み、コマンドラインからの呼出し時に\fIjavac\fRが指定する終了コードを返します。 +.PP +\fIjavax\&.tools\&.JavaCompiler\fRインタフェースの他のメソッドを使用すると、診断の処理やファイルの読取り元/書込み先の制御などを行うことができます。 +.SS "旧式のインタフェース" +.PP +\fB注意:\fR +このAPIは、下位互換性のためにのみ保持されています。すべての新しいコードは、新しいJava Compiler APIを使用する必要があります。 +.PP +次のように、\fIcom\&.sun\&.tools\&.javac\&.Main\fRクラスには、プログラムからコンパイラを呼び出すためのstaticメソッドが2つ用意されています。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +public static int compile(String[] args); +public static int compile(String[] args, PrintWriter out); +.fi +.if n \{\ +.RE +.\} +.PP +\fIargs\fRパラメータは、通常コンパイラに渡される任意のコマンドライン引数を表しています。 +.PP +\fIout\fRパラメータは、コンパイラの診断出力の宛先を示します。 +.PP +\fIreturn\fR値は、\fIjavac\fRの\fIexit\fR値と同じです。 +.PP +\fB注意:\fR +名前が\fIcom\&.sun\&.tools\&.javac\fRで始まるパッケージ(\fIcom\&.sun\&.tools\&.javac\fRのサブパッケージ)で検出される他のすべてのクラスおよびメソッドは、完全に内部用であり、いつでも変更される可能性があります。 +.SH "例" +.PP +\fBExample 1\fR, 簡単なプログラムのコンパイル +.RS 4 +この例では、greetingsディレクトリで\fIHello\&.java\fRソース・ファイルをコンパイルする方法を示しています。\fIHello\&.java\fRで定義されたクラスは、\fIgreetings\&.Hello\fRと呼ばれます。greetingsディレクトリは、ソース・ファイルとクラス・ファイルの両方があるパッケージ・ディレクトリで、現在のディレクトリのすぐ下にあります。これにより、デフォルトのユーザー・クラス・パスを使用できるようになります。また、\fI\-d\fRオプションを使用して別の出力先ディレクトリを指定する必要もありません。 +.sp +\fIHello\&.java\fR内のソース・コードは次のとおりです。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +package greetings; + +public class Hello { + public static void main(String[] args) { + for (int i=0; i < args\&.length; i++) { + System\&.out\&.println("Hello " + args[i]); + } + } +} +.fi +.if n \{\ +.RE +.\} +greetings\&.Helloのコンパイル: +.sp +.if n \{\ +.RS 4 +.\} +.nf +javac greetings/Hello\&.java +.fi +.if n \{\ +.RE +.\} +\fIgreetings\&.Hello\fRの実行: +.sp +.if n \{\ +.RS 4 +.\} +.nf +java greetings\&.Hello World Universe Everyone +Hello World +Hello Universe +Hello Everyone +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\fBExample 2\fR, 複数のソース・ファイルのコンパイル +.RS 4 +この例では、\fIgreetings\fRパッケージのソース・ファイル\fIAloha\&.java\fR、\fIGutenTag\&.java\fR、\fIHello\&.java\fRおよび\fIHi\&.java\fRをコンパイルします。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +% javac greetings/*\&.java +% ls greetings +Aloha\&.class GutenTag\&.class Hello\&.class Hi\&.class +Aloha\&.java GutenTag\&.java Hello\&.java Hi\&.java +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\fBExample 3\fR, ユーザー・クラス・パスの指定 +.RS 4 +前述の例のソース・ファイルのうち1つを変更した後に、そのファイルを再コンパイルします。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +pwd +/examples +javac greetings/Hi\&.java +.fi +.if n \{\ +.RE +.\} +\fIgreetings\&.Hi\fRは\fIgreetings\fRパッケージ内の他のクラスを参照しているため、コンパイラはこれらの他のクラスを探す必要があります。デフォルトのユーザー・クラス・パスはパッケージ・ディレクトリを含むディレクトリであるため、前述の例は動作します。現在のディレクトリを気にせずにこのファイルを再コンパイルする場合、\fICLASSPATH\fRを設定して、ユーザー・クラス・パスに例のディレクトリを追加します。この例では、\fI\-classpath\fRオプションを使用しています。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +javac \-classpath /examples /examples/greetings/Hi\&.java +.fi +.if n \{\ +.RE +.\} +\fIgreetings\&.Hi\fRを変更してバナー・ユーティリティを使用するようにした場合、 そのユーティリティもユーザー・クラス・パスを通じてアクセスできるようになっている必要があります。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +javac \-classpath /examples:/lib/Banners\&.jar \e + /examples/greetings/Hi\&.java +.fi +.if n \{\ +.RE +.\} +\fIgreetings\fRパッケージでクラスを実行するには、プログラムは\fIgreetings\fRパッケージ、および\fIgreetings\fRクラスが使用するクラスにアクセスする必要があります。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +java \-classpath /examples:/lib/Banners\&.jar greetings\&.Hi +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\fBExample 4\fR, ソース・ファイルとクラス・ファイルの分離 +.RS 4 +次の例では、\fIjavac\fRを使用して、JVM 1\&.6上で実行するコードをコンパイルします。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +javac \-source 1\&.6 \-target 1\&.6 \-bootclasspath jdk1\&.6\&.0/lib/rt\&.jar \e +\-extdirs "" OldCode\&.java +.fi +.if n \{\ +.RE +.\} +\fI\-source 1\&.6\fRオプションにより、\fIOldCode\&.java\fRのコンパイルにはリリース1\&.6(または6)のJavaプログラミング言語が使用されます。\fI\-target 1\&.6\fRオプションにより、JVM 1\&.6と互換性のあるクラス・ファイルが生成されます。ほとんどの場合、\fI\-target\fRオプションの値は\fI\-source\fRオプションの値になります。この例では、\fI\-target\fRオプションを省略できます。 +.sp +\fI\-bootclasspath\fRオプションを使用して、適切なバージョンのブートストラップ・クラス(\fIrt\&.jar\fRライブラリ)を指定する必要があります。指定しない場合は、コンパイラによって次の警告が生成されます。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +javac \-source 1\&.6 OldCode\&.java +warning: [options] bootstrap class path not set in conjunction with +\-source 1\&.6 +.fi +.if n \{\ +.RE +.\} +適切なバージョンのブートストラップ・クラスを指定しない場合、コンパイラは古い言語仕様(この例では、バージョン1\&.6のJavaプログラミング言語)を新しいブートストラップ・クラスと組み合せて使用します。その結果、存在しないメソッドへの参照が含まれていることがあるため、クラス・ファイルが古いプラットフォーム(この場合はJava SE 6)で動作しない可能性があります。 +.RE +.PP +\fBExample 5\fR, クロス・コンパイル +.RS 4 +この例では、\fIjavac\fRを使用して、JVM 1\&.6上で実行するコードをコンパイルします。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +javac \-source 1\&.6 \-target 1\&.6 \-bootclasspath jdk1\&.6\&.0/lib/rt\&.jar \e + \-extdirs "" OldCode\&.java +.fi +.if n \{\ +.RE +.\} +The\fI \-source 1\&.6\fRオプションにより、OldCode\&.javaのコンパイルにはリリース1\&.6(または6)のJavaプログラミング言語が使用されます。\fI\-target 1\&.6\fRオプションにより、JVM 1\&.6と互換性のあるクラス・ファイルが生成されます。ほとんどの場合、\fI\-target\fRの値は\fI\-source\fRの値になります。この例では、\fI\-target\fRオプションは省略されます。 +.sp +\fI\-bootclasspath\fRオプションを使用して、適切なバージョンのブートストラップ・クラス(\fIrt\&.jar\fRライブラリ)を指定する必要があります。指定しない場合は、コンパイラによって次の警告が生成されます。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +javac \-source 1\&.6 OldCode\&.java +warning: [options] bootstrap class path not set in conjunction with \-source 1\&.6 +.fi +.if n \{\ +.RE +.\} +適切なバージョンのブートストラップ・クラスを指定しない場合、コンパイラは古い言語仕様を新しいブートストラップ・クラスと組み合せて使用します。この組合せは、存在しないメソッドへの参照が含まれていることがあるため、クラス・ファイルが古いプラットフォーム(この場合はJava SE 6)で動作しない可能性があります。この例では、コンパイラはJavaプログラミング言語のリリース1\&.6を使用します。 +.RE +.SH "関連項目" +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +java(1) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +jdb(1) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +javah(1) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +javadoc(1) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +jar(1) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +jdb(1) +.RE +.br +'pl 8.5i +'bp diff --git a/jdk/src/linux/doc/man/ja/javadoc.1 b/jdk/src/linux/doc/man/ja/javadoc.1 index e6374a63c67..74cdf8f655b 100644 --- a/jdk/src/linux/doc/man/ja/javadoc.1 +++ b/jdk/src/linux/doc/man/ja/javadoc.1 @@ -1,4236 +1,3839 @@ -." 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 -." 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. -." -.TH javadoc 1 "07 May 2011" -.SH "名前" -javadoc \- Java API ドキュメントジェネレータ -.LP -Java ソースファイルから、API ドキュメントの HTML ページを生成します。このドキュメントで紹介されている Javadoc の例は、 Solaris を使用した場合のものです。 -.SH "形式" -.LP -\f4javadoc\fP\f2\ [\ \fP\f2options\fP\f2\ ]\ [\ packagenames\ ]\ [\ sourcefilenames\ ]\ [\ \-subpackages\fP\ \f2pkg1:pkg2:...\fP\f2\ ]\ [\ \fP\f2@argfiles\fP\f2\ ]\fP -.LP -引数を指定する順序は任意です。Javadoc ツールでの、処理対象の .java ファイルを決定する方法の詳細については、「ソースファイルの処理」\f2を参照\fPしてください。 -.RS 3 -.TP 3 -options -このドキュメントで説明されているコマンド行オプションです。Javadoc オプションの標準的な使用法については、「使用例」を参照してください。 -.TP 3 -packagenames -スペースで区切られた一連のパッケージ名です。たとえば、 \f2java.lang\ java.lang.reflect\ java.awt のように指定します\fP。ドキュメント化するパッケージを個別に指定する必要があります。ワイルドカードは使用不可です。再帰的処理のためには、\-subpackages を使用します。Javadoc ツールは、\f2\-sourcepath\fP を使用してこれらのパッケージ名を検索します。「1 つ以上のパッケージのドキュメント化」の例を参照してください。 -.TP 3 -sourcefilenames -スペースで区切られた一連のソースファイル名です。 各ファイルは、パスで始まります。アスタリスク (*) などのワイルドカードを含めることができます。Javadoc ツールが処理するのは、ファイル名が「.java」という拡張子で終わり、その拡張子を除いた名前が実際に有効なクラス名であるすべてのファイルです (Java 言語仕様を参照)。したがって、ハイフンを含む名前 ( \f2X\-Buffer\fP など) や、その他の無効な文字を含む名前を付けることによって、それらのファイルをドキュメント化の対象から除外できます。これは、テスト用のファイルや、テンプレートから生成されたファイルの場合に便利です。ソースファイル名の前に指定したパスによって、javadoc がそのファイルを検索する場所が決まります。Javadoc ツールは、これらのソースファイル名を検索するときには \f2\-sourcepath\fP を使用しません。相対パスは現在のディレクトリを起点とするため、 \f2Button.java\fP を渡すことは、 \f2./Button.java\fP を渡すことと同じです。ソースファイル名をフルパスで指定すると、 \f2/home/src/java/awt/Graphics*.java のようになります\fP。 「1 つ以上のクラスのドキュメント化」の例を参照してください。また、「パッケージとクラスのドキュメント化」の例のように、パッケージ名とソースファイル名を混在させることもできます。 -.TP 3 -\-subpackages pkg1:pkg2:... -ソースファイルから指定されたパッケージおよびそのサブパッケージ内に再帰的にドキュメントを生成します。パッケージ名またはソースファイル名を指定する必要はありません。 -.TP 3 -@argfiles -Javadoc オプション、パッケージ名、およびソースファイル名を任意の順序で並べたリストが含まれる 1 つ以上のファイルです。ワイルドカード (*) や \f2\-J\fP オプションは、このファイルの中では指定できません。 -.RE -.SH " 説明" -.LP -\f3Javadoc\fP ツールは、一連の Java ソースファイルにある宣言およびドキュメンテーションコメントを解析し、デフォルトでは public クラス、protected クラス、入れ子にされたクラス (匿名の内部クラスは除く)、インタフェース、コンストラクタ、メソッド、およびフィールドについて説明した一連の HTML ページを生成します。また、API (アプリケーションプログラミングインタフェース) ドキュメントの生成や、一連のソースファイルの実装ドキュメントの生成に使用できます。 -.LP -Javadoc ツールは、パッケージ全体、個々のソースファイル、またはその両方に対して実行できます。パッケージ全体のドキュメント化を行うには、\f2\-subpackages\fP を使用して最上位ディレクトリから下方に再帰的にたどるか、パッケージ名の明示的なリストを渡します。個々ソースファイルに対して javadoc を実行する場合は、一連のソース (.\f2.java\fP) ファイル名を渡します。具体的な例は、このドキュメントの最後に紹介します。次に、Javadoc によるソースファイルの処理について説明します。 -.SS -ソースファイルの処理 -.LP -Javadoc ツールは、末尾が「\f2.java\fP」のファイルを処理するだけでなく、「ソースファイル」で説明するその他のファイルも処理します。個々のソースファイル名を明示的に渡すことによって Javadoc ツールを実行する場合、どの \f2.java\fP ファイルを処理するかを正確に指定できます。ただし、多くの開発者はこの方法では作業しません。パッケージ名を渡すほうが簡単だからです。ソースファイル名を明示的に指定しなくても、Javadoc ツールは 3 つの方法で実行できます。その方法とは、(1) パッケージ名を渡す、(2) \f2\-subpackages\fP を使用する、(3) ソースファイル名でワイルドカードを使用する (\f2*.java\fP)、の 3 つです。これらの場合、Javadoc ツールが「\f2.java\fP」ファイルの処理を行うのは、そのファイルが次のすべての要件を満たす場合だけです。 -.RS 3 -.TP 2 -o -名前から接尾辞「\f2.java\fP」を取り除くと、実際に有効なクラス名になっている (Java 言語仕様の有効な文字を参照) -.TP 2 -o -ソースツリーのルートから相対的なディレクトリパスが、区切り文字をドットに変換すると、実際に有効なパッケージ名になっている -.TP 2 -o -パッケージ文には有効なパッケージ名が含まれる (前項目で指定) -.RE -.LP -\f3リンクの処理\fP \- Javadoc ツールは、処理の実行中に、その実行でドキュメント化されるパッケージ、クラス、およびメンバーの名前に対して、自動的に相互参照リンクを追加します。このようなリンクは、次のような場所に追加されます。 -.RS 3 -.TP 2 -o -宣言 (戻り値の型、引数の型、フィールドの型) -.TP 2 -o -\f2@see\fP タグから生成された [関連項目] セクション -.TP 2 -o -\f2{@link}\fP タグから生成されたインラインテキスト -.TP 2 -o -\f2@throws\fP タグから生成された例外の名前 -.TP 2 -o -インタフェースのメンバーに対する「定義」リンクと、クラスのメンバーに対する「オーバーライド」リンク -.TP 2 -o -パッケージ、クラス、およびメンバーを列挙している概要テーブル -.TP 2 -o -パッケージおよびクラスの継承ツリー -.TP 2 -o -索引 -.RE -.LP -コマンド行で指定しなかったクラスについての既存のテキスト (別に生成したテキスト) に対してハイパーリンクを追加するには、\f2\-link\fP および \f2\-linkoffline\fP オプションを利用できます。 -.LP -\f3その他の処理についての詳細\fP \- Javadoc ツールは、実行するたびに 1 つの完全なドキュメントを作成します。ドキュメントを追加生成することはできません。つまり、Javadoc ツールの以前の実行結果を修正したり、その内容を直接組み入れたりすることはできません。ただし、前述のように、以前の実行結果に対してリンクを追加することはできます。 -.LP -実装上の理由から、Javadoc ツールは、処理を実行するために java コンパイラを必要とし、java コンパイラに依存しています。Javadoc ツールは、 \f2javac\fP の一部を呼び出して宣言をコンパイルしますが、メンバーの実装は無視します。Javadoc ツールは、クラス階層を含むクラスの豊富な内部表現とクラスの「使用」関係を構築し、その情報から HTML を生成します。さらに、Javadoc ツールは、ソースコードのドキュメンテーションコメントから、ユーザーの提供したドキュメントも取得します。 -.LP -実際には、Javadoc ツールは、メソッド本体を持たない純粋なスタブファイルであるような \f2.java\fP ソースファイルでも動作します。したがって、API の作成時には、実装を記述する前の設計の早い段階で、ドキュメンテーションコメントを記述して javadoc ツールを実行できます。 -.LP -コンパイラに依存することによって、HTML 出力は、実際の実装に正確に対応します。実際の実装は、明示的なソースコードにではなく、暗黙のソースコードに依存する場合があります。たとえば、Javadoc ツールは、.class ファイルには存在するがソースコードには存在しないデフォルトコンストラクタ (Java 言語仕様を参照) \f2をドキュメント化\fP します。 -.LP -通常、Javadoc ツールでは、ソースファイルのコードが不完全またはエラーを含んでいる場合でもドキュメントを生成できます。このため、デバッグやトラブルシューティングを完了する前にドキュメントを生成できます。たとえば、Java 言語仕様によると、抽象メソッドを含むクラスは、それ自体抽象として宣言されなければなりません。このエラーを検出すると、javac コンパイラは停止しますが、Javadoc ツールは警告を出さずに処理を続行します。Javadoc ツールはドキュメンテーションコメントの基本的なチェックを行います。ドキュメンテーションコメントをより詳しくチェックする必要がある場合は、DocCheck ドックレットを使用してください。 -.LP -Javadoc ツールは、ドキュメントの内部構造を構築する際、参照クラスをすべてロードします。このため、Javadoc ツールは、ブートストラップクラス、拡張機能、またはユーザークラスにかかわらず、すべての参照クラスを検索できなければなりません。詳細は、 -.na -\f2「クラスの検索方法」\fP @ -.fi -http://java.sun.com/javase/6/docs/technotes/tools/findingclasses.htmlを参照してください。通常、作成するクラスは、拡張機能としてロードするか、Javadoc ツールのクラスパス内に置く必要があります。 -.SS -Javadoc のドックレット -.LP -Javadoc ツールの出力の内容と形式は、ドックレットを使ってカスタマイズできます。Javadoc ツールには、標準ドックレットと呼ばれるデフォルトの「組み込み」ドックレットがあります。標準ドックレットは、HTML 形式の API ドキュメントを生成します。標準ドックレットを修正またはサブクラス化することや、HTML、XML、MIF、RTF などの好みの出力形式を生成する独自のドックレットを記述することも可能です。ドックレットとその使用法については、次の項目を参照してください。 -.RS 3 -.TP 2 -o -.na -\f2Javadoc のドックレット\fP @ -.fi -http://java.sun.com/javase/6/docs/technotes/guides/javadoc/index.html -.TP 2 -o -\f2\-doclet\fP コマンド行オプション -.RE -.LP -\f2\-doclet\fP コマンド行オプションでカスタムドックレットが指定されていない場合、Javadoc ツールは、デフォルトの標準ドックレットを使用します。javadoc ツールには、使用されているドックレットに関係なく使用できるコマンド行オプションがあります。標準ドックレットでは、これらのほかに、いくつかのコマンド行オプションが追加されます。どちらのオプションについても、このあとの「オプション」で説明します。 -.SS -関連ドキュメントおよびドックレット -.RS 3 -.TP 2 -o -.na -\f2Javadoc に施された拡張機能\fP @ -.fi -http://java.sun.com/javase/6/docs/technotes/guides/javadoc/index.html \- Javadoc 1.4 で追加された改良点の詳細 -.TP 2 -o -.na -\f2Javadoc FAQ\fP @ -.fi -http://java.sun.com/j2se/javadoc/faq/index.html \- 頻繁に寄せられる質問に対する回答、Javadoc 関連のツールについての情報、およびバグの回避方法 -.TP 2 -o -.na -\f2How to Write Doc Comments for Javadoc\fP @ -.fi -http://www.oracle.com/technetwork/java/javase/documentation/index\-137868.html \- ドキュメンテーションコメントの記述方法に関する Sun の規約 -.TP 2 -o -.na -\f2Requirements for Writing API Specifications\fP @ -.fi -http://java.sun.com/j2se/javadoc/writingapispecs/index.html \- Java SE プラットフォーム仕様を記述する際に使用された標準要件この情報は、ソースファイルのドキュメンテーションコメント形式で API 仕様を記述する場合にも、その他の形式で記述する場合にも役立ちます。検証可能なアサーションを満たすパッケージ、クラス、インタフェース、フィールド、およびメソッドについての要件を定めています。 -.TP 2 -o -.na -\f2ドキュメンテーションコメントの仕様\fP @ -.fi -http://java.sun.com/docs/books/jls/first_edition/html/18.doc.html \- ドキュメンテーションコメントのオリジナル仕様については、『Java Language Specification』 (James Gosling、Bill Joy、Guy Steele 共著) の初版の第 18 章「Documentation Comments」を参照してください。この章は、第 2 版では削除されました。 -.TP 2 -o -.na -\f2DocCheck ドックレット\fP @ -.fi -http://www.oracle.com/technetwork/java/javase/documentation/index\-141437.html \- ソースファイル内のドキュメンテーションコメントをチェックし、検出されたエラーや不正のレポートを生成します。Doc Check ユーティリティーの一部です。 -.TP 2 -o -.na -\f2MIF ドックレット\fP @ -.fi -http://java.sun.com/j2se/javadoc/mifdoclet/ \- MIF、FrameMaker、PDF の書式で API ドキュメントを自動生成します。MIF は Adobe FrameMaker の交換書式です。 -.RE -.SS -用語 -.LP -\f2「ドキュメンテーションコメント」\fP、\f2「doc コメント」\fP、\f2「主説明」\fP、\f2「タグ」\fP、\f2「ブロックタグ」\fP、および\f2「インラインタグ」\fPの用語については、「ドキュメンテーションコメント」で説明します以下のその他の用語は、Javadoc ツールのコンテキストで特定の意味を持ちます。 -.RS 3 -.TP 3 -生成ドキュメント (generated document) -javadoc ツールが Java ソースコード内のドキュメンテーションコメントから生成したドキュメントのことです。デフォルトの生成ドキュメントは HTML 形式で、標準ドックレットによって作成されます。 -.LP -.TP 3 -名前 (name) -Java 言語で書かれたプログラム要素の名前、つまりパッケージ、クラス、インタフェース、フィールド、コンストラクタ、またはメソッドの名前のことです。名前は、 \f2java.lang.String.equals(java.lang.Object)\fP のような完全修飾名にすることも、 \f2equals(Object)\fP のような部分修飾名にすることもできます。 -.LP -.TP 3 -ドキュメント化されるクラス (documented classes) -javadoc ツールの実行によって詳細なドキュメントが生成されるクラスおよびインタフェースのことです。ドキュメント化するには、ソースファイルが使用可能でなければならず、ソースファイル名またはパッケージ名を javadoc コマンドに渡され、アクセス修飾子 (public、protected、package\-private または private) によってフィルタ処理されないようにしなければなりません。ドキュメント化されるクラスは、javadoc ツールの出力に組み込まれるクラス、つまり「包含クラス」とも呼ばれます。 -.LP -.TP 3 -包含クラス (included classes) -ツールの実行によって詳細なドキュメントが生成されるクラスおよびインタフェースのことです。「ドキュメント化されるクラス」と同じ。 -.LP -.TP 3 -除外クラス (excluded classes) -ツールの実行によって詳細なドキュメントが生成されないクラスおよびインタフェースのことです。 -.LP -.TP 3 -参照クラス (referenced classes) -ドキュメント化されるクラスおよびインタフェースの定義 (実装) またはドキュメンテーションコメントの中で明示的に参照されているクラスおよびインタフェースのことです。参照の例としては、戻り値の型、パラメータの型、キャストの型、拡張されたクラス、実装されたインタフェース、インポートされたクラス、メソッド本体で使用されるクラス、@see、{@link}、{@linkplain}、{@inheritDoc} タグなどがあります。この定義は -.na -\f21.3\fP @ -.fi -http://download.oracle.com/javase/1.3/docs/tooldocs/solaris/javadoc.html#referencedclasses から変更されています。javadoc ツールを実行するときは、Javadoc のブートクラスパスおよびクラスパス内にあるすべての参照クラスをメモリーにロードする必要があります。参照クラスが見つからない場合は、「クラスが見つかりません」という警告が表示されます。Javadoc ツールは、クラスの存在とそのメンバーの完全指定の名前を判別するのに必要なすべての情報を、.class ファイルから引き出すことができます。 -.LP -.TP 3 -外部参照クラス (external referenced classes) -参照クラスのうち、javadoc ツールの実行中にドキュメントが生成されないクラスのことです。つまり、これらのクラスは、コマンド行で Javadoc ツールに渡されていません。生成ドキュメント内でこれらのクラスにリンクしている箇所は、「外部参照」または「外部リンク」と呼ばれます。たとえば、Javadoc ツールの実行対象が \f2java.awt\fP パッケージのみである場合、 \f2java.lang\fP 内のすべてのクラス ( \f2Object\fPなど) が外部参照クラスになります。外部参照クラスにリンクするには、 \f2\-link\fP および \f2\-linkoffline\fP オプションを使用します。外部参照クラスには、通常そのソースコメントを javadoc ツールの実行で利用できないという重要な特徴があります。この場合、それらのコメントを継承することはできません。 -.RE -.SH "ソースファイル" -.LP -Javadoc ツールは 4 種類の異なる「ソース」ファイルから出力を生成します。その 4 種類とは、クラスの Java 言語ソースファイル (\f2.java\fP)、パッケージコメントファイル、概要コメントファイル、およびその他の処理されないファイルです。また、ドキュメント化しないがソースツリーに存在する場合があるテストファイルやテンプレートファイルについても説明します。 -.SS -クラスソースコードファイル -.LP -それぞれのクラスまたはインタフェース、およびそのメンバーは、独自のドキュメンテーションコメントを持つことができ、それを \f2.java\fP ファイル内に保持します。ドキュメンテーションコメントの詳細は、「ドキュメンテーションコメント」を参照してください。 -.SS -パッケージコメントファイル -.LP -それぞれのパッケージは、独自のドキュメンテーションコメントを持つことができ、それを専用の「ソース」ファイルに保持します。その内容は、Javadoc ツールによって生成される概要ページに組み込まれます。このコメントには、通常、そのパッケージ全体に当てはまるドキュメントを記述します。 -.LP -パッケージコメントファイルを作成する場合、コメントの格納先として、次の 2 つのファイルのいずれかを選択できます。 -.RS 3 -.TP 2 -o -\f2package\-info.java\fP \- パッケージ宣言、パッケージ注釈、パッケージコメント、および Javadoc タグを格納できます。このファイルは一般に、package.html よりも推奨されます。 -.TP 2 -o -\f2package.html\fP \- 格納できるのはパッケージコメントと Javadoc タグだけです。パッケージ注釈は格納できません。 -.RE -.LP -各パッケージでは、単一の \f2package.html\fP ファイル、単一の \f2package\-info.java\fP ファイルのいずれかを選択できますが、その両方を選択することはできません。このどちらかのファイルを \f2.java\fP ファイルとともに、ソースツリー内のそのパッケージのディレクトリ内に配置してください。 -.LP -\f4package\-info.java\fP \- このファイルには、次の構造のパッケージコメントを格納できます。 コメントはパッケージ宣言の前に配置します。 -.LP -File: \f2java/applet/package\-info.java\fP +'\" t +.\" Copyright (c) 1994, 2013, Oracle and/or its affiliates. All rights reserved. +.\" Title: javadoc +.\" Language: English +.\" Date: 2011年5月10日 +.\" SectDesc: 基本ツール +.\" Software: JDK 8 +.\" Arch: 汎用 +.\" +.\" 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. +.\" +.pl 99999 +.TH "javadoc" "1" "2011年5月10日" "JDK 8" "基本ツール" +.\" ----------------------------------------------------------------- +.\" * Define some portability stuff +.\" ----------------------------------------------------------------- +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.\" http://bugs.debian.org/507673 +.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" ----------------------------------------------------------------- +.\" * set default formatting +.\" ----------------------------------------------------------------- +.\" disable hyphenation +.nh +.\" disable justification (adjust text to left margin only) +.ad l +.\" ----------------------------------------------------------------- +.\" * MAIN CONTENT STARTS HERE * +.\" ----------------------------------------------------------------- +.SH "NAME" +javadoc \- Javaソース・ファイルから、APIドキュメントのHTMLページを生成します。 +.SH "概要" +.sp +.if n \{\ +.RS 4 +.\} +.nf +\fIjavadoc\fR {\fIpackages\fR|\fIsource\-files\fR} [\fIoptions\fR] [\fI@argfiles\fR] +.fi +.if n \{\ +.RE +.\} +.PP +\fIpackages\fR +.RS 4 +\fIjava\&.lang java\&.lang\&.reflect java\&.awt\fRなど、空白で区切ってドキュメント化するパッケージの名前。サブパッケージもドキュメント化する場合は、\fI\-subpackages\fRオプションを使用してパッケージを指定します。 +.sp +デフォルトでは、\fIjavadoc\fRは、現在のディレクトリおよびサブディレクトリで指定されたパッケージを探します。\fI\-sourcepath\fRオプションを使用して、パッケージを探すディレクトリのリストを指定します。 +.RE +.PP +\fIsource\-files\fR +.RS 4 +\fIClass\&.java Object\&.java Button\&.java\fRのように空白で区切った、ドキュメント化するJavaソース・ファイルの名前。デフォルトでは、\fIjavadoc\fRは、現在のディレクトリで指定されたクラスを探します。ただし、\fI/home/src/java/awt/Graphics*\&.java\fRのように、クラス・ファイルのフルパスを指定し、ワイルドカード文字を使用できます。現在のディレクトリからの相対パスも指定できます。 +.RE +.PP +\fIoptions\fR +.RS 4 +空白で区切られたコマンドライン・オプション。オプションを参照してください。 +.RE +.PP +\fI@argfiles\fR +.RS 4 +\fIjavadoc\fRコマンド・オプション、パッケージ名およびソース・ファイル名のリストを任意の順序で含むファイルの名前。 +.RE +.SH "説明" +.PP +\fIjavadoc\fRコマンドは、一連のJavaソース・ファイルにある宣言およびドキュメンテーション・コメントを解析し、デフォルトでは、publicクラス、protectedクラス、ネストされたクラス(匿名の内部クラスは除く)、インタフェース、コンストラクタ、メソッド、およびフィールドについて記述した一連のHTMLページを生成します。\fIjavadoc\fRコマンドは、APIドキュメントの生成や、一連のソース・ファイルの実装ドキュメントの生成に使用できます。 +.PP +\fIjavadoc\fRコマンドは、パッケージ全体、個々のソース・ファイル、またはその両方に対して実行できます。パッケージ全体のドキュメント化を行うには、\fI\-subpackages\fRオプションを使用してディレクトリおよびそのサブディレクトリを再帰的にたどるか、パッケージ名の明示的なリストを渡します。個々のソース・ファイルをドキュメント化するには、Javaソース・ファイル名のリストを渡します。簡単な例を参照してください。 +.SS "ソース・ファイルの処理" +.PP +\fIjavadoc\fRコマンドは、ソースで終わるファイル、およびソース・ファイルで説明しているその他のファイルを処理します。個々のソース・ファイル名を渡して\fIjavadoc\fRを実行する場合、どのソース・ファイルを処理するかを正確に指定できます。ただし、多くの開発者はこの方法では作業しません。パッケージ名を渡すほうが簡単だからです。ソース・ファイル名を明示的に指定しなくても、\fIjavadoc\fRコマンドは3つの方法で実行できます。パッケージ名を渡し、\fI\-subpackages\fRオプションを使用するか、またはソース・ファイル名にワイルドカードを使用することができます。これらの場合、\fIjavadoc\fRコマンドがソース・ファイルの処理を行うのは、そのファイルが次のすべての要件を満たす場合のみです。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +ファイル名の接頭辞(\fI\&.java\fRを削除)が有効なクラス名である。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +ソース・ツリーのルートからの相対的なパス名が、区切り文字をドットに変換すると、有効なパッケージ名になる。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +パッケージ文に有効なパッケージ名が含まれている。 +.RE +リンクの処理.PP +処理の実行中に、\fIjavadoc\fRコマンドは、その実行でドキュメント化されるパッケージ、クラス、およびメンバーの名前に対して、相互参照リンクを追加します。リンクは、次の場所に表示されます。@タグの説明については、javadocタグを参照してください。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +宣言(戻り値の型、引数の型、フィールドの型)。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fI@see\fRタグから生成された「\fI関連項目\fR」セクション。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fI{@link}\fRタグから生成されたインライン・テキスト。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fI@throws\fRタグから生成された例外の名前。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +インタフェースのメンバーに対する「\fI定義\fR」リンクと、クラスのメンバーに対する「\fIオーバーライド\fR」リンク。メソッド・コメントの継承を参照してください。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +パッケージ、クラス、およびメンバーをリストしているサマリー表。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +パッケージおよびクラスの継承ツリー。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +索引。 +.RE +.PP +コマンドラインで指定しなかったクラスについての既存のテキスト(別に生成したテキスト)に対してリンクを追加するには、\fI\-link\fRおよび\fI\-linkoffline\fRオプションを利用できます。 +処理の詳細.PP +\fIjavadoc\fRコマンドは実行するたびに1つの完全なドキュメントを生成します。前の実行の結果を変更または直接取り込む、増分ビルドを行いません。ただし、\fIjavadoc\fRコマンドは、他の実行の結果にリンクできます。 +.PP +\fIjavadoc\fRコマンドの実装にはJavaコンパイラが必要で、Javaコンパイラに依存しています。\fIjavadoc\fRコマンドは\fIjavac\fRコマンドの一部を呼び出し、宣言をコンパイルして、メンバーの実装を無視します。\fIjavadoc\fRコマンドは、クラス階層を含むクラスの豊富な内部表現とクラスの「使用」関係を構築し、HTMLを生成します。さらに、J\fIjavadoc\fRコマンドは、ソース・コードのドキュメンテーション・コメントから、ユーザーの提供したドキュメントも取得します。ドキュメンテーション・コメントを参照してください。 +.PP +\fIjavadoc\fRコマンドは、メソッド本体を持たない純粋なスタブ・ファイルであるソース・ファイルに対して実行できます。したがって、APIの実装前の設計の早い段階で、ドキュメンテーション・コメントを記述して\fIjavadoc\fRコメントを実行できます。 +.PP +コンパイラに依存することによって、HTML出力は、実際の実装に正確に対応します。実際の実装は、明示的なソース・コードにではなく、暗黙のソース・コードに依存する場合があります。たとえば、\fIjavadoc\fRコマンドは、コンパイル済クラス・ファイルには存在するがソース・コードには存在しないデフォルト・コンストラクタをドキュメント化します。 +.PP +多くの場合、\fIjavadoc\fRコマンドでは、ソース・ファイルのコードが不完全またはエラーを含んでいる場合でもドキュメントを生成できます。すべてのデバッグやトラブルシューティングを完了する前にドキュメントを生成できます。\fIjavadoc\fRコマンドはドキュメンテーション・コメントの基本的なチェックを行います。 +.PP +\fIjavadoc\fRコマンドは、ドキュメントの内部構造を構築する際、参照クラスをすべてロードします。このため、 +\fIjavadoc\fRコマンドは、ブートストラップ・クラス、拡張機能、またはユーザー・クラスにかかわらず、すべての参照クラスを検索できる必要があります。クラスの検出方法 +(http://docs\&.oracle\&.com/javase/8/docs/technotes/tools/findingclasses\&.html)を参照してください +.PP +通常、作成するクラスは、拡張クラスとして、または\fIjavadoc\fRコマンドのクラス・パスでロードされる必要があります。 +.SS "Javadocのドックレット" +.PP +\fIjavadoc\fRコマンドの出力の内容と形式は、ドックレットを使用してカスタマイズできます。\fIjavadoc\fRコマンドには、標準ドックレットと呼ばれるデフォルトの組込みドックレットがあります。標準ドックレットは、HTML形式のAPIドキュメントを生成します。標準ドックレットを修正またはサブクラスを作成することや、HTML、XML、MIF、RTFなどの好みの出力形式を生成する独自のドックレットを記述することも可能です。 +.PP +\fI\-doclet\fRオプションでカスタム・ドックレットが指定されていない場合、\fIjavadoc\fRコマンドは、デフォルトの標準ドックレットを使用します。\fIjavadoc\fRコマンドには、使用されているドックレットに関係なく使用できるいくつかのオプションがあります。標準ドックレットでは、これらの他に、いくつかのコマンドライン・オプションが追加されます。オプションを参照してください。 +.SH "ソース・ファイル" +.PP +\fIjavadoc\fRコマンドは、次のタイプのソース・ファイルから出力を生成します。そのファイルは、クラスのJava言語ソース・ファイル(\fI\&.java\fR)、パッケージ・コメント・ファイル、概要コメント・ファイル、およびその他の未処理のファイルです。ここでは、ドキュメント化しないがソース・ツリーに存在する場合があるテスト・ファイルやテンプレート・ファイルについても説明します。 +.SS "クラスのソース・ファイル" +.PP +それぞれのクラスまたはインタフェース、およびそのメンバーは、独自のドキュメンテーション・コメントを持つことができ、それをソース・ファイル内に保持します。ドキュメンテーション・コメントを参照してください。 +.SS "パッケージ・コメント・ファイル" +.PP +それぞれのパッケージは、独自のドキュメンテーション・コメントを持つことができ、それを専用のソース・ファイルに保持します。その内容は、\fIjavadoc\fRコマンドによって生成されるパッケージのサマリー・ページに組み込まれます。このコメントには、通常、そのパッケージ全体に当てはまるドキュメントを記述します。 +.PP +パッケージ・コメント・ファイルを作成するには、次のいずれかのファイルにコメントを格納できます。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fIpackage\-info\&.java\fRファイルには、パッケージ宣言、パッケージ注釈、パッケージ・コメント、およびJavadocタグを格納できます。このファイルが優先されます。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fIpackage\&.html\fRファイルには、パッケージ・コメントとJavadocタグのみを格納できます。パッケージ注釈は格納できません。 +.RE +.PP +各パッケージは、\fIpackage\&.html\fRファイルまたは\fIpackage\-info\&.java\fRファイルのいずれかを1つ持つことができますが、その両方を持つことはできません。このどちらかのファイルをソース・ファイルとともに、ソース・ツリー内のそのパッケージ・ディレクトリ内に配置してください。 +package\-info\&.javaファイル.PP +\fIpackage\-info\&.java\fRファイルには、次の構造のパッケージ・コメントを含めることができます。コメントは、パッケージ宣言の前に配置されます。 +.PP +\fB注意:\fR +コメント区切り文字である\fI/**\fRおよび\fI*/\fRが存在する必要がありますが、中間の行の先頭のアスタリスクは省略可能です。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl /** -.fl * Provides the classes necessary to create an -.fl * applet and the classes an applet uses -.fl - * to communicate with its applet context. -.fl + * to communicate with its applet context\&. *

      -.fl * The applet framework involves two entities: -.fl - * the applet and the applet context. -.fl + * the applet and the applet context\&. * An applet is an embeddable window (see the -.fl - * {@link java.awt.Panel} class) with a few extra -.fl + * {@link java\&.awt\&.Panel} class) with a few extra * methods that the applet context can use to -.fl - * initialize, start, and stop the applet. -.fl + * initialize, start, and stop the applet\&. * -.fl - * @since 1.0 -.fl - * @see java.awt -.fl + * @since 1\&.0 + * @see java\&.awt */ -.fl -package java.lang.applet; -.fl -\fP +package java\&.lang\&.applet; .fi -.LP -コメント区切り文字の \f2/**\fP と \f2/*\fP は存在している必要がありますが、中間行の行頭のアスタリスクは省略してもかまいません。 -.LP -\f4package.html\fP \- このファイルには、次の構造のパッケージコメントを格納できます。コメントは \f2\fP 要素内に配置します。 -.LP -File: \f2java/applet/package.html\fP +.if n \{\ +.RE +.\} +package\&.htmlファイル.PP +\fIpackage\&.html\fRファイルには、次の構造のパッケージ・コメントを含めることができます。コメントは、\fI\fR要素に配置されます。 +.PP +ファイル: +\fIjava/applet/package\&.html\fR +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl - Provides the classes necessary to create an applet and the classes an applet uses to communicate with its applet context.

      -.fl + + +Provides the classes necessary to create an applet and the +classes an applet uses to communicate with its applet context\&. +

      The applet framework involves two entities: the applet -.fl -and the applet context. An applet is an embeddable window (see the {@link java.awt.Panel} class) with a few extra methods that the applet context can use to initialize, start, and stop the applet.@since 1.0 @see java.awt -.fl -\fP +and the applet context\&. An applet is an embeddable +window (see the {@link java\&.awt\&.Panel} class) with a +few extra methods that the applet context can use to +initialize, start, and stop the applet\&. + +@since 1\&.0 +@see java\&.awt + + .fi -.LP -これは単なる通常の HTML ファイルであり、パッケージ宣言を含んでいない点に注意してください。パッケージコメントファイルの内容は、ほかのすべてのコメントと同様に HTML で記述しますが、1 つだけ例外があります。それは、このドキュメンテーションコメントには、コメント区切り文字 である \f2/**\fP と \f2*/\fP 、および行頭のアスタリスクを含めてはならない、という点です。コメントを書く場合は、最初の文をパッケージの概要とし、 \f2\fP と最初の文の間にタイトルやその他のテキストを含めないようにします。パッケージタグを含めることはできますが、ほかのドキュメンテーションコメントと同様、すべてのブロックタグは、主説明のあとに置かなければなりません。 \f2@see\fP タグをパッケージコメントファイルに追加する場合には、完全修飾名を使用する必要があります。詳細は、 -.na -\f2package.html\fPの例 @ -.fi -http://www.oracle.com/technetwork/java/javase/documentation/index\-137868.html#packagecommentsを参照してください。 -.LP -\f3パッケージコメントファイルの処理\fP \- Javadoc ツールは、実行時にパッケージコメントファイルを自動的に検索し、このファイルを見つけると次の処理を行います。 -.RS 3 -.TP 2 -o -処理できるようにコメントをコピーする( \f2package.html\fP の場合であれば、 \f2\fP と \f2\fP HTML タグの間にある内容をすべてコピーする。 \f2\fP セクションを含め、そこに \f2\fP やソースファイルの著作権記述などの情報を配置することもできるが、生成後のドキュメンテーションにはそれらは一切表示されない) -.TP 2 -o -パッケージタグがあれば、すべて処理する -.TP 2 -o -生成したパッケージの概要ページの最後に、処理したテキストを挿入する (例: -.na -\f2パッケージの概要\fP @ -.fi -http://java.sun.com/javase/6/docs/api/java/applet/package\-summary.html) -.TP 2 -o -パッケージの概要ページの先頭に、パッケージコメントの最初の文をコピーする。さらに、概要ページのパッケージリストに、パッケージ名とパッケージコメントの最初の文を追加する (例: -.na -\f2概要の要約\fP @ -.fi -http://java.sun.com/javase/6/docs/api/overview\-summary.html)。文の末尾は、クラスやメンバーの主説明の最初の文の末尾と同じ規則によって判断される +.if n \{\ .RE -.SS -概要コメントファイル -.LP -ドキュメント化する各アプリケーションまたはパッケージセットは、独自の概要ドキュメンテーションコメントを持つことができ、それは専用の「ソース」ファイルに保持されます。その内容は、Javadoc ツールによって生成される概要ページに組み込まれます。このコメントには、通常、アプリケーションまたはパッケージセット全体に当てはまるドキュメントを記述します。 -.LP -概要コメントファイルを作成するには、ファイルに任意の名前 (通常は \f4overview.html\fP) を付け、それを任意の場所 (通常はソースツリーの最上位) に配置できます。たとえば、 \f2java.applet\fP パッケージのソースファイルが \f2/home/user/src/java/applet\fP ディレクトリに格納されていれば、概要コメントファイルは \f2/home/user/src/overview.html に作成できます\fP。 -.LP -異なるパッケージのセットに対して javadoc を複数回実行する場合は、同じ 1 つのソースファイルのセットに対して複数の概要コメントファイルを作成できます。たとえば、内部ドキュメンテーション用に \-private を指定して javadoc を 1 回実行したあと、公開ドキュメンテーション用にそのオプションを指定しないで再度実行することができます。この場合、各概要コメントファイルの 1 文目で、そのドキュメンテーションを公開用または内部用として記述できます。 -.LP -概要コメントファイルの内容は、前述のパッケージコメントファイルと同様、HTML で記述された 1 つの大きなドキュメンテーションコメントです。詳細は、前述の説明を参照してください。要点を繰り返すと、このコメントを記述する場合は、最初の文をアプリケーションまたはパッケージセットの要約とし、 \f2<body>\fP と最初の文の間にタイトルその他のテキストを含めないようにします。概要タグを含めることができます。ほかのドキュメンテーションコメントと同じく、 \f2{@link}\fP などのインラインタグを除くすべてのタグは、主説明のあとに配置する必要があります。 \f2@see\fP タグを追加する場合には、完全修飾名を使用する必要があります。 -.LP -Javadoc ツールの実行時に、\-overview オプションを使って概要コメントファイル名を指定します。このファイルは、パッケージコメントファイルと同じように処理されます。 -.RS 3 -.TP 2 -o -\f2<body>\fP と \f2</body>\fP タグの間にあるすべての内容を処理対象としてコピーする -.TP 2 -o -概要タグがあれば、すべて処理する -.TP 2 -o -生成した概要ページの最後に、処理したテキストを挿入する (例: -.na -\f2概要の要約\fP @ -.fi -http://java.sun.com/javase/6/docs/api/overview\-summary.html) -.TP 2 -o -概要ページの先頭に、概要コメントの最初の文をコピーする +.\} +.PP +\fIpackage\&.html\fRファイルは通常のHTMLファイルであり、パッケージ宣言を含んでいません。パッケージ・コメント・ファイルの内容はHTMLで記述しますが、例外が1つあります。このドキュメンテーション・コメントには、コメント区切り文字である\fI/**\fRと\fI*/\fR、または行頭のアスタリスクを含めない、という点です。コメントを書く場合は、最初の文をパッケージのサマリーとし、\fI<body>\fRタグと最初の文の間にタイトルやその他のテキストを含めないようにします。パッケージ・タグを含めることができます。すべてのブロック・タグは、主説明の後に配置する必要があります。\fI@see\fRタグをパッケージ・コメント・ファイルに追加する場合には、完全修飾名を使用する必要があります。 +コメント・ファイルの処理.PP +\fIjavadoc\fRコメントを実行すると、パッケージ・コメント・ファイルが検索されます。パッケージ・コメント・ファイルが見つかった場合は、\fIjavadoc\fRコマンドは次の手順を実行します。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +処理できるようにコメントをコピーします。package\&.htmlの場合、\fIjavadoc\fRコマンドは、\fI<body>\fRと\fI</body>\fR +HTMLタグ間のすべての内容をコピーします。\fI<head>\fRセクションを含め、そこに\fI<title>\fRタグやソース・ファイルの著作権記述などの情報を配置することもできますが、生成されたドキュメントにはそれらは一切表示されません。 .RE -.SS -その他の未処理のファイル -.LP -ソースには、Javadoc ツールによって生成先のディレクトリにコピーされる、その他の任意のファイルを含めることができます。一般に、このようなファイルには、グラフィックファイル、サンプルの Java ソース (.java) およびクラス (.class) ファイル、内容が通常の Java ソースファイルのドキュメンテーションコメントの影響を受けない独立した HTML ファイルなどがあります。 -.LP -処理されないファイルを含めるには、\f4doc\-files\fP という名前のディレクトリ内にそれらのファイルを配置します。このディレクトリは、ソースファイルが格納された任意のパッケージディレクトリのサブディレクトリにします。このようなサブディレクトリは、パッケージごとに 1 つ用意できます。イメージ、サンプルコード、ソースファイル、.class ファイル、アプレット、および HTML ファイルをこのディレクトリに格納できます。たとえば、ボタンの画像 \f2button.gif\fP を \f2java.awt.Button\fP クラスのドキュメンテーションに含める場合には、そのファイルを \f2/home/user/src/java/awt/doc\-files/\fP ディレクトリ内に配置します。なお、 \f2doc\-files\fP ディレクトリを \f2/home/user/src/java/doc\-files\fP に配置することはできません。なぜなら、 \f2java\fP はパッケージではないからです。つまり、java に直接含まれているソースファイルは 1 つも存在していません。 -.LP -これらの未処理のファイルへのリンクは、すべて明示的に記述する必要があります。これは、Javadoc ツールがそれらのファイルを見ずに、単にディレクトリとその内容を生成先にコピーするだけだからです。たとえば、 \f2Button.java\fP のドキュメンテーションコメント内のリンクは、次のようになります。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +パッケージ・タグを処理します。パッケージ・タグを参照してください。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +処理したテキストを生成されたパッケージのサマリー・ページの下部に挿入します。Javaプラットフォーム、Standard Edition API仕様の概要 +(http://docs\&.oracle\&.com/javase/8/docs/api/overview\-summary\&.html)を参照してください +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +パッケージのサマリー・ページの先頭に、パッケージ・コメントの最初の文をコピーします。さらに、\fIjavadoc\fRコマンドは、概要ページのパッケージ・リストに、パッケージ名とパッケージ・コメントの最初の文を追加します。Javaプラットフォーム、Standard Edition API仕様の概要 +(http://docs\&.oracle\&.com/javase/8/docs/api/overview\-summary\&.html)を参照してください +.sp +文の終わりは、クラスやメンバーの主説明の最初の文の終わりと同じルールによって判断されます。 +.RE +.SS "概要コメント・ファイル" +.PP +ドキュメント化する各アプリケーションまたはパッケージ・セットは、独自の概要ドキュメンテーション・コメントを持つことができ、それは専用のソース・ファイルに保持されます。その内容は、\fIjavadoc\fRコマンドによって生成される概要ページに組み込まれます。このコメントには、通常、アプリケーションまたはパッケージ・セット全体に当てはまるドキュメントを記述します。 +.PP +このファイルにはoverview\&.htmlなどの名前を付けることができ、どこに配置してもかまいません。一般的な場所は、ソース・ツリーの最上部です。 +.PP +たとえば、\fIjava\&.applet\fRパッケージのソース・ファイルが/home/user/src/java/appletディレクトリに格納されている場合、概要コメント・ファイルは/home/user/src/overview\&.htmlに作成できます。 +.PP +異なるパッケージのセットに対して\fIjavadoc\fRコマンドを複数回実行する場合は、同じ1つのソース・ファイルのセットに対して複数の概要コメント・ファイルを作成できます。たとえば、内部ドキュメント用に\fI\-private\fRを指定して\fIjavadoc\fRコマンドを1回実行した後、公開ドキュメント用にそのオプションを指定しないで再度実行することができます。この場合、各概要コメント・ファイルの1文目で、そのドキュメントを公開用または内部用として記述できます。 +.PP +概要コメント・ファイルの内容は、HTMLで記述された1つの大きなドキュメンテーション・コメントです。最初の文はアプリケーションまたはパッケージのセットのサマリーとします。\fI<body>\fRタグと最初の文の間にタイトルやその他のテキストを含めないようにします。{\fI@link}\fRなどのインライン・タグを除くすべてのタグは、主説明の後に配置する必要があります。\fI@see\fRタグを追加する場合には、完全修飾名を使用する必要があります。 +.PP +\fIjavadoc\fRコマンドの実行時に、\fI\-overview\fRオプションを使用して概要コメント・ファイル名を指定します。このファイルは、パッケージ・コメント・ファイルと同じように処理されます。\fIjavadoc\fRコマンドは次の手順を実行します。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fI<body>\fRと\fI</body>\fRタグの間にある内容をすべて処理対象としてコピーします。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +概要タグがあれば処理します。概要タグを参照してください。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +処理したテキストを生成された概要ページの下部に挿入します。JavaプラットフォームStandard Edition API仕様の概要 +(http://docs\&.oracle\&.com/javase/8/docs/api/overview\-summary\&.html)を参照してください +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +概要サマリー・ページの先頭に、概要コメントの最初の文をコピーします。 +.RE +.SS "未処理のファイル" +.PP +ソース・ファイルには、\fIjavadoc\fRコマンドによって宛先ディレクトリにコピーされる、任意のファイルを含めることができます。このようなファイルには、通常、グラフィック・ファイル、サンプルのJavaソースおよびクラス・ファイル、一般的なJavaソース・ファイルのドキュメンテーション・コメントの影響を受けない多くの内容を含む独立したHTMLファイルなどがあります。 +.PP +未処理のファイルを含めるには、doc\-filesというディレクトリにファイルを配置します。doc\-filesディレクトリは、ソース・ファイルを含む任意のパッケージ・ディレクトリのサブディレクトリになることができます。doc\-filesサブディレクトリは、パッケージごとに1つ用意できます。 +.PP +たとえば、ボタンのイメージを\fIjava\&.awt\&.Button\fRクラスのドキュメントに含める場合には、そのイメージ・ファイルを/home/user/src/java/awt/doc\-files/ディレクトリに置きます。doc\-filesディレクトリを/home/user/src/java/doc\-filesに置かないでください。javaはパッケージではないからです。ソース・ファイルを含めることもできません。 +.PP +\fIjavadoc\fRコマンドはファイルを参照しないので、未処理のファイルへのすべてのリンクは、コードに含まれている必要があります。\fIjavadoc\fRコマンドはディレクトリとそのすべての内容を宛先にコピーします。次の例では、Button\&.javaドキュメンテーション・コメントのリンクがどのように見えるかを示しています。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl - /** -.fl - * This button looks like this: -.fl - * <img src="doc\-files/Button.gif"> -.fl - */ -.fl -\fP +/** + * This button looks like this: + * <img src="doc\-files/Button\&.gif"> + */ .fi -.SS -テストファイルおよびテンプレートファイル -.LP -一部の開発者から、テストファイルおよびテンプレートファイルを対応するソースファイルの近くのソースツリーに保存したいという要望がありました。つまり、これらのソースファイルと同じディレクトリまたはサブディレクトリに保存したいということです。 -.LP -個別のソースファイル名で明示的に渡して Javadoc ツールを実行する場合は、テストファイルおよびテンプレートファイルを意図的に除外して、処理されないようにすることができます。ただし、パッケージ名またはワイルドカードで渡す場合は、以下のルールに従って、これらのテストファイルおよびテンプレートファイルが処理されないようにする必要があります。 -.LP -テストファイルとテンプレートファイルの違いは、テストファイルは、正当でコンパイル可能なソースファイルであるのに対して、テンプレートファイルは、そうではないという点です。ただし、テンプレートファイルも「.java」で終わることができます。 -.LP -\f3テストファイル\fP \- 開発者の多くは、あるパッケージのコンパイル可能で実行可能なテストファイルをそのパッケージのソースファイルと同じディレクトリに配置したいと考えています。しかしテストファイルは、名前なしパッケージなど、ソースファイルパッケージとは別のパッケージに属させたいとも考えています (そのため、テストファイルには package ステートメントがないか、またはソースとは別の package ステートメントがある)。このような状況では、コマンド行で指定されているソースのパッケージ名を指定してそのソースがドキュメント化されているときに、テストファイルは警告またはエラーを引き起こします。そのようなテストファイルはサブディレクトリに配置する必要があります。たとえば、 \f2com.package1\fP 内のソースファイルに対するテストファイルを追加する場合は次のように、ハイフンを含んでいるためにパッケージ名としては無効であるようなサブディレクトリ内に、それらのファイルを配置します。 +.if n \{\ +.RE +.\} +.SS "テストおよびテンプレート・ファイル" +.PP +ソース・ツリーのテストおよびテンプレート・ファイルを、ソース・ファイルが存在するディレクトリまたはサブディレクトリと同じディレクトリに格納できます。テストおよびテンプレート・ファイルが処理されるのを防ぐには、\fIjavadoc\fRコマンドを実行し、明示的に個別のソース・ファイル名を渡します。 +.PP +テスト・ファイルは、有効な、コンパイル可能なソース・ファイルです。テンプレート・ファイルは、有効な、互換性のあるソース・ファイルではありませんが、多くの場合、\fI\&.java\fR接尾辞を持っています。 +テスト・ファイル.PP +テスト・ファイルを、名前なしパッケージや、ソース・ファイルが存在するパッケージとは別のパッケージに属するようにする場合、テスト・ファイルをソース・ファイルの下のサブディレクトリに配置し、そのディレクトリに無効な名前を付けます。テスト・ファイルをソースと同じディレクトリに配置し、パッケージ名を示すコマンドライン引数を指定して\fIjavadoc\fRコマンドを呼び出すと、テスト・ファイルは警告またはエラーを引き起こします。ファイルが無効な名前を持つサブディレクトリ内に存在する場合、テスト・ファイル・ディレクトリはスキップされ、エラーまたは警告は発行されません。たとえば、ソース・ファイルのテスト・ファイルをcom\&.package1に追加するには、無効なパッケージ名のサブディレクトリに配置します。次のディレクトリ名にはハイフンが含まれているため無効です。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl - com/package1/test\-files/ -.fl -\fP +com/package1/test\-files/ .fi -.LP -こうすると、Javadoc ツールでは警告なしで test ディレクトリをスキップします。 -.LP -テストファイルに doc コメントが含まれる場合、次のようにワイルドカードを含んだテストソースファイル名で渡してテストファイルのドキュメントを生成するように、Javadoc ツールを別個に実行できるように設定できます。たとえば、 \f2com/package1/test\-files/*.java などです\fP。 -.LP -\f3ソースファイルのテンプレート\fP \- テンプレートファイルの名前は「.java」で終わることもありますが、テンプレートファイルはコンパイルできません。ソースディレクトリ内に保持したいソースファイルのテンプレートがある場合は、 \f2Buffer\-Template.java\fP のようにハイフンやその他の無効な Java 文字を名前に含めることで、テンプレートが処理されないようにします。これは、Javadoc ツールが処理するのは、「.java」接尾辞を除いた名前が 正規のクラス名であるソースファイルだけであるためです (Java 言語仕様の「Identifiers」に関する情報を参照)。 +.if n \{\ +.RE +.\} +.PP +テスト・ファイルにドキュメンテーション・コメントが含まれる場合、\fIjavadoc\fRコマンドの個別の実行で、ワイルドカードを含んだテスト・ソース・ファイル名(\fIcom/package1/test\-files/*\&.java\fRなど)を渡して、テスト・ファイルのドキュメントを生成するように設定できます。 +テンプレート・ファイル.PP +テンプレート・ファイルをソース・ディレクトリに配置するが、\fIjavadoc\fRコマンドを実行するときにエラーを生成しない場合、ファイルに\fIBuffer\-Template\&.java\fRなどの無効な名前を付けて、処理させないようにします。\fIjavadoc\fRコマンドは、接尾辞の\fI\&.java\fRが削除されると有効なクラス名になる名前を持つソース・ファイルのみを処理します。 .SH "生成されるファイル" -.LP -デフォルトでは、javadoc ツールは、HTML 形式のドキュメントを生成する標準ドックレットを使います。このドックレットは、以下の種類のファイルを生成します。それぞれの HTML ページは、個々のファイルに相当します。javadoc が生成するファイルの名前には、クラスやインタフェースの名前にちなんだものと、そうでないもの ( \f2package\-summary.html など\fP) の 2 種類があります。後者のグループのファイル名には、前者のグループとファイル名が競合しないように、ハイフンが含まれています。 -.LP -\f3基本内容ページ\fP -.RS 3 -.TP 2 -o -ドキュメント化するクラスまたはインタフェースごとに 1 つの\f3クラスページまたはインタフェースページ\fP (\f2クラス名\fP\f2.html\fP) -.TP 2 -o -ドキュメント化するパッケージごとに 1 つの\f3パッケージページ\fP (\f2package\-summary.html\fP)。Javadoc ツールは、 \f2package.html\fP または \f2package\-info.java\fP という名前のファイル内の HTML テキストをすべて組み入れます。 -.TP 2 -o -パッケージのセット全体に対して 1 つの\f3概要ページ\fP (\f2overview\-summary.html\fP)。これは、生成ドキュメントの先頭ページになります。Javadoc ツールは、\f2\-overview\fP オプションで指定されたファイル内の HTML テキストをすべて組み入れます。このページのファイルは、javadoc に複数のパッケージ名を渡した場合にだけ作成されます。詳細は、「HTML フレーム」を参照してください。 +.PP +デフォルトでは、\fIjavadoc\fRコマンドは、HTML形式のドキュメントを生成する標準ドックレットを使用します。標準ドックレットは、ここで説明する、基本内容ページ、相互参照ページ、サポート・ページを生成します。各HTMLページは個別のファイルに対応します。\fIjavadoc\fRコマンドは、2つのタイプのファイルを生成します。最初のタイプには、クラスおよびインタフェースに応じた名前が付けられます。2番目のタイプには、最初のタイプのファイルとの競合を防ぐために、ハイフンが含まれます(package\-summary\&.htmlなど)。 +.SS "基本内容ページ" +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +記載されているクラスまたはインタフェースごとに1つのクラスまたはインタフェース・ページ(classname\&.html)。 .RE -.LP -\f3相互参照ページ\fP -.RS 3 -.TP 2 -o -\f3パッケージのセット全体に対して 1 つのクラス階層ページ\fP (\f2overview\-tree.html\fP)。このページを表示するには、ナビゲーションバーの [概要] をクリックしてから、[階層ツリー] をクリックします。 -.TP 2 -o -\f3パッケージごとに 1 つのクラス階層ページ\fP (\f2package\-tree.html\fP)。これを表示するには、特定のパッケージ、クラス、またはインタフェースのページに移動し、[階層ツリー] をクリックしてそのパッケージの階層を表示させます。 -.TP 2 -o -\f3パッケージごとに 1 つの [使用] ページ\fP (\f2package\-use.html\fP) と、クラスおよびインタフェースごとに 1 つずつの [使用] ページ (\f2class\-use/\fP\f2クラス名\fP\f2.html\fP)。このページには、特定のクラス、インタフェース、またはパッケージの一部を使っているパッケージ、クラス、メソッド、コンストラクタ、およびフィールドについて記述されます。クラスまたはインタフェース A を例にして考えると、その [使用] ページには、A のサブクラス、A として宣言されたフィールド、A を返すメソッド、A 型のパラメータを持つメソッドおよびコンストラクタが表示されます。 このページを表示するには、まず、パッケージ、クラス、またはインタフェースのページに移動してから、ナビゲーションバーの [使用] リンクをクリックします。 -.TP 2 -o -\f3非推奨 API ページ\fP (\f2deprecated\-list.html\fP)。推奨されない名前がすべて一覧表示されます。非推奨名は、一般に改良された API が存在するために使用が推奨されていない API の名前であり、通常、それに置き換わる名前が提示されています。非推奨 API は、将来の実装では削除される可能性があります。 -.TP 2 -o -\f3定数フィールド値ページ\fP (\f2constant\-values.html\fP)。static フィールドの値用です。 -.TP 2 -o -\f3直列化された形式ページ\fP (\f2serialized\-form.html\fP)。直列化可能かつ外部化可能なクラスに関する情報用です。これらの各クラスには、直列化フィールドおよびメソッドに関する説明があります。これらの情報は、API を使う開発者ではなく、再実装を行う開発者に必要な情報です。ナビゲーションバーにこのページへのリンクはありませんが、直列化されたクラスに移動して、そのクラスの説明にある「関連項目」セクションで「直列化された形式」をクリックすると、この情報を取得できます。標準ドックレットは直列化された形式ページを自動生成します。Serializable を実装するすべてのクラス (public または 非 public) が含まれるほか、 \f2readObject\fP メソッドや \f2writeObject\fP メソッド、直列化されるフィールド、および \f2@serial\fP、\f2@serialField\fP、\f2@serialData\fP タグからのドキュメンテーションコメントも含まれます。public 直列化可能クラスを除外するには、そのクラス (またはそのパッケージ) を \f2@serial exclude\fP でマークします。package\-private 直列化可能クラスを含めるには、そのクラス (またはそのパッケージ) を \f2@serial include\fP でマークします。バージョン 1.4 では \f2\-private\fP オプションの指定なしで javadoc ツールを実行することにより、public クラスおよび private クラスの完全に直列化されたクラスを生成できます。 -.TP 2 -o -\f3索引\fP (\f2index\-*.html\fP)。すべてのクラス、インタフェース、コンストラクタ、フィールド、およびメソッドの名前がアルファベット順に並んでいます。索引は、Unicode を扱えるように国際化されています。1 つのファイルとして生成することも、先頭文字 (英語の場合 A ~ Z) ごとに別々のファイルとして生成することもできます。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +記載されているパッケージごとに1つのパッケージ・ページ(package\-summary\&.html)。\fIjavadoc\fRコマンドは、ソース・ツリーのパッケージ・ディレクトリ内にあるpackage\&.htmlまたはpackage\-info\&.javaという名前のファイル内のHTMLテキストをすべて組み入れます。 .RE -.LP -\f3サポートファイル\fP -.RS 3 -.TP 2 -o -\f3ヘルプページ\fP (\f2help\-doc.html\fP)。ナビゲーションバーや前述の各ページに関する説明が記載されています。デフォルトのヘルプファイルに代わる独自のカスタムヘルプファイルを提供するには、\f2\-helpfile\fP を使用します。 -.TP 2 -o -表示用の HTML フレームを作成する 1 つの \f3index.html ファイル\fP。このファイルは、フレーム付きの先頭ページを表示する場合にロードします。このファイル自体には、テキスト内容は含まれていません。 -.TP 2 -o -複数の\f3フレームファイル\fP (\f2*\-frame.html\fP)。パッケージ、クラス、およびインタフェースのリストが含まれています。HTML フレームを表示するときに使用されます。 -.TP 2 -o -\f3パッケージリスト\fPファイル (\f2package\-list\fP)。 \f2\-link\fP および \f2\-linkoffline\fP オプションで使用されます。これは、HTML ファイルではなくテキストファイルであり、どのリンクからもアクセスできません。 -.TP 2 -o -\f3スタイルシート\fPファイル (\f2stylesheet.css\fP)。生成されるページ上のいくつかの要素について、色、フォントファミリ、フォントサイズ、フォントのスタイル、および配置を制御します。 -.TP 2 -o -\f3doc\-files\fP ディレクトリ。生成先ディレクトリにコピーするイメージ、サンプルコード、ソースコードなどのファイルがすべて格納されます。これらのファイルは、Javadoc ツールによって処理されないため、ファイル内に javadoc タグがあっても無視されます。このディレクトリは、ソースツリーの中にある場合にのみ生成されます。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +パッケージのセット全体に対して1つの概要ページ(overview\-summary\&.html)。概要ページは、生成ドキュメントの先頭ページになります。\fIjavadoc\fRコマンドは、\fI\-overview\fRオプションで指定されたファイル内のHTMLテキストをすべて組み入れます。概要ページが作成されるのは、\fIjavadoc\fRコマンドに複数のパッケージ名を渡した場合のみです。HTMLフレームおよびオプションを参照してください。 .RE -.LP -\f3HTML フレーム\fP -.LP -Javadoc ツールは、下の図に示すように、2 ~ 3 つの HTML フレームを生成します。1 つのパッケージしかない場合 (またはパッケージがない場合) は、パッケージの一覧を省略することによって最低限必要な数のフレームを作成します。単一のパッケージに属するソースファイル (*.java) または単一のパッケージ名を引数として javadoc コマンドに渡す場合は、左側の列にクラスの一覧を表示するフレーム (C) 1 つだけが作成されます。Javadoc に複数のパッケージ名を渡した場合は、概要ページ (Detail) に加えて、すべてのパッケージを一覧表示する第 3 のフレーム (P) が作成されます。この概要ページのファイル名は、 \f2overview\-summary.html です\fP。したがって、このファイルは、2 つ以上のパッケージ名を渡した場合にだけ作成されます。「フレームなし」リンクをクリックするか、overview\-summary.html を最初に表示すると、フレームを省略できます。 -.LP -HTML フレームに慣れていない場合は、特定のフレームを印刷およびスクロールするには、そのフレームに「フォーカス」がなければならないことに注意してください。フレームにフォーカスを与えるには、そのフレームをクリックします。このようにすると、多くのブラウザでは、矢印キーやページキーを使ってそのフレームをスクロールしたり、「印刷」メニューコマンドを使ってそのフレームを印刷したりできます。 -.LP -HTML フレームが必要かどうかによって、次のどちらかのファイルを開始ページとしてロードします。 -.RS 3 -.TP 2 -o -\f2index.html\fP (フレームあり) -.TP 2 -o -\f2overview\-summary.html\fP (フレームなし) +.SS "相互参照ページ" +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +パッケージのセット全体に対して1つのクラス階層ページ(overview\-tree\&.html)。階層ページを表示するには、ナビゲーション・バーの「概要」をクリックしてから、「階層ツリー」をクリックします。 .RE -.LP -\f3生成されるファイルの構造\fP -.LP -生成されるクラスファイルおよびインタフェースファイルは、Java ソースファイルおよびクラスファイルと同じディレクトリ階層に編成されます。1 つのサブパッケージにつき 1 つのディレクトリ、という構造になります。 -.LP -たとえば、 \f2java.applet.Applet\fP クラス用に生成されたドキュメントは、 \f2java/applet/Applet.html\fP に格納されます。生成先のディレクトリの名前が \f2apidocs\fP だとすると、java.applet パッケージのファイル構造は、その下に構築されます。前述のように、「frame」という語を名前に含むファイルは、すべて左上または左下のフレームに表示されます。それ以外の HTML ファイルは、すべて右側のフレームに表示されます。 -.LP -注 \- 下の階層図で、ディレクトリは\f3太字\fP (bold) で示してあります。アスタリスク (\f2*\fP) は、javadoc への引数がパッケージ名ではなくソースファイル名 (*.java) である場合に省略されるファイルおよびディレクトリを示しています。また、引数がソースファイル名の場合、 \f2package\-list\fP は作成されますが、その中身は空です。doc\-files ディレクトリは、ソースツリー内に存在する場合にのみ、生成先に作成されます。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +パッケージごとに1つのクラス階層ページ(package\-tree\&.html)。階層ページを表示するには、特定のパッケージ、クラス、またはインタフェースのページに移動し、「階層ツリー」をクリックしてそのパッケージの階層を表示します。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +パッケージごとに1つの使用ページ(package\-use\&.html)と、クラスおよびインタフェースごとに1つずつの使用ページ(class\-use/classname\&.html)。使用ページでは、指定したクラス、インタフェース、またはパッケージの一部を使用しているパッケージ、クラス、メソッド、コンストラクタ、およびフィールドについて記述されます。たとえば、クラスまたはインタフェースAを例にすると、その使用ページには、Aのサブクラス、Aとして宣言されたフィールド、Aを返すメソッド、A型のパラメータを持つメソッドおよびコンストラクタが組み込まれます。使用ページを表示するには、パッケージ、クラス、またはインタフェースに移動し、ナビゲーション・バーの「使用」リンクをクリックします。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +すべての非推奨APIとその推奨する代替をリストする非推奨APIページ(deprecated\-list\&.html)。非推奨APIは将来の実装で削除される可能性があるので使用しないでください。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +定数フィールドの値用の定数フィールド値ページ(constant\-values\&.html)。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +直列化された形式ページ(serialized\-form\&.html)。フィールドおよびメソッドの説明を含む、直列化可能かつ外部化可能なクラスに関する情報用のページです。このページ内の情報は、APIを使用する開発者ではなく、再実装者に必要な情報です。直列化された形式ページへアクセスするには、直列化されたクラスに移動して、そのクラス・コメントにある「関連項目」セクションで「直列化された形式」をクリックします。標準ドックレットは直列化された形式ページを生成します。このページには、Serializableを実装するすべてのクラス(publicまたは非public)が、その\fIreadObject\fRや\fIwriteObject\fRメソッド、直列化されたフィールド、および\fI@serial\fR、\fI@serialField\fR、\fI@serialData\fRタグからのドキュメンテーション・コメントとともにリストされます。直列化可能なpublicクラスを除外するには、そのクラス(またはそのパッケージ)を\fI@serial\fR +excludeでマークします。直列化可能なpackage\-privateクラスを含めるには、そのクラス(またはそのパッケージ)を\fI@serial\fR +includeでマークします。リリース1\&.4では、\fI\-private\fRオプションを指定せずに\fIjavadoc\fRコマンドを実行することにより、publicクラスおよびprivateクラスの完全に直列化された形式を生成できます。オプションを参照してください。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +索引ページ(\fIindex\-*\&.html\fR)。すべてのクラス名、インタフェース名、コンストラクタ名、フィールド名、およびメソッド名がアルファベット順に並んでいます。索引ページは、Unicodeを扱えるように国際化されています。1つのファイルとして生成することも、先頭文字(英語の場合A\(enZ)ごとに別々のファイルとして生成することもできます。 +.RE +.SS "サポート・ページ" +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +ヘルプ・ページ(help\-doc\&.html)。ナビゲーション・バーや前述の各ページに関する説明が記載されています。デフォルトのヘルプ・ファイルを独自のカスタム・ヘルプ・ファイルでオーバーライドするには、\fI\-helpfile\fRを使用します。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +表示用のHTMLフレームを作成する1つのindex\&.htmlファイル。フレーム付きの先頭ページを表示するにはこのファイルをロードします。index\&.htmlファイルには、テキスト・コンテンツは含まれていません。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +複数のフレーム・ファイル(\fI*\-frame\&.html\fR)。パッケージ、クラス、およびインタフェースのリストが含まれています。フレーム・ファイルはHTMLフレームを表示します。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +パッケージ・リスト・ファイル(package\-list)。\fI\-link\fRおよび\fI\-linkoffline\fRオプションで使用されます。パッケージ・リスト・ファイルはテキスト・ファイルであり、どのリンクからもアクセスできません。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +スタイルシート・ファイル(stylesheet\&.css)。生成されるページの一部の要素について色、フォント・ファミリ、フォント・サイズ、フォント・スタイル、および配置を制御します。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +doc\-filesディレクトリ。宛先ディレクトリにコピーするイメージ、サンプル・コード、ソース・コードなどのファイルが格納されます。これらのファイルは、\fIjavadoc\fRコマンドによって処理されません。このディレクトリは、ソース・ツリーの中に存在する場合にのみ処理されます。 +.RE +.PP +オプションを参照してください。 +.SS "HTMLフレーム" +.PP +\fIjavadoc\fRコマンドは、コマンドに渡された値に基づき、最小限必要な数(2または3)のフレームを生成します。\fIjavadoc\fRコマンドに引数として1つのパッケージ名または1つのパッケージに含まれるソース・ファイルを渡す場合は、パッケージのリストが省略されます。そのかわりに、\fIjavadoc\fRコマンドは左側の列に1つのフレームを作成し、クラスのリストを表示します。複数のパッケージ名を渡した場合は、\fIjavadoc\fRコマンドは、すべてのパッケージをリストする第3のフレームと概要ページ(overview\-summary\&.html)を作成します。フレームを省略するには、「フレームなし」リンクをクリックするか、overview\-summary\&.htmlページからページ・セットを表示します。 +.SS "生成されるファイルの構造" +.PP +生成されるクラス・ファイルおよびインタフェース・ファイルは、Javaソース・ファイルおよびクラス・ファイルと同じディレクトリ階層に編成されます。1つのサブパッケージにつき1つのディレクトリ、という構造になります。 +.PP +たとえば、\fIjava\&.applet\&.Applet\fRクラス用に生成されるドキュメントは、java/applet/Applet\&.htmlに格納されます。 +.PP +生成先ディレクトリの名前が\fIapidocs\fRだとすると、\fIjava\&.applet\fRパッケージのファイルの構造は、次のとおりです。前述のように、\fIframe\fRという語を名前に含むファイルは、すべて左上または左下のフレームに表示されます。それ以外のHTMLファイルは、すべて右側のフレームに表示されます。 +.PP +ディレクトリは太字です。アスタリスク(*)は、\fIjavadoc\fRコマンドへの引数がパッケージ名ではなくソース・ファイル名である場合に省略されるファイルおよびディレクトリを示しています。引数がソース・ファイル名の場合、空のパッケージ・リストが作成されます。doc\-filesディレクトリは、ソース・ツリー内に存在する場合にのみ、生成先に作成されます。生成されるファイルを参照してください。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fBapidocs\fR: 最上位レベル・ディレクトリ +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +index\&.html: HTMLフレームを設定する初期ページ +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +*overview\-summary\&.html: パッケージ・リストとサマリー +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +overview\-tree\&.html: すべてのパッケージのクラス階層 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +deprecated\-list\&.html: すべてのパッケージの非推奨API +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +constant\-values\&.html: すべてのパッケージの静的フィールド値 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +serialized\-form\&.html: すべてのパッケージの直列化されたフォーム +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +*overview\-frame\&.html: 左上のフレームに表示するすべてのパッケージ +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +allclasses\-frame\&.html: 左下のフレームに表示するすべてのクラス +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +help\-doc\&.html: Javadocページの編成に関するヘルプ +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +index\-all\&.html: +\fI\-splitindex\fRオプションなしで作成されたデフォルトの索引 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fBindex\-files\fR: +\fI\-splitindex\fRオプションを指定して作成されたディレクトリ +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +index\-<number>\&.html: +\fI\-splitindex\fRオプションを指定して作成された索引ファイル +.RE +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +package\-list: 外部参照を解決するためのパッケージ名 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +stylesheet\&.css: フォント、色、位置などを定義します +.RE +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fBjava\fR: パッケージ・ディレクトリ +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fBapplet\fR: サブパッケージ・ディレクトリ +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +Applet\&.html: +\fIApplet\fRクラス・ページ +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +AppletContext\&.html: +\fIAppletContext\fRインタフェース +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +AppletStub\&.html: +\fIAppletStub\fRインタフェース +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +AudioClip\&.html: +\fIAudioClip\fRインタフェース +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +package\-summary\&.html: クラスとサマリー +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +package\-frame\&.html: 左下のフレームに表示するパッケージ・クラス +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +package\-tree\&.html: このパッケージのクラス階層 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +package\-use\&.html: このパッケージが使用される場所 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fBdoc\-files\fR: イメージおよびサンプル・ファイルのディレクトリ +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fBclass\-use\fR: イメージおよびサンプル・ファイルの場所 +.sp +\- Applet\&.html: Appletクラスの使用 +.sp +\- AppletContext\&.html: +\fIAppletContext\fRインタフェースの使用 +.sp +\- AppletStub\&.html: +\fIAppletStub\fRインタフェースの使用 +.sp +\- AudioClip\&.html: +\fIAudioClip\fRインタフェースの使用 +.RE +.RE +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fBsrc\-html\fR: ソース・コード・ディレクトリ +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fBjava\fR: パッケージ・ディレクトリ +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fBapplet\fR: サブパッケージ・ディレクトリ +.sp +\- Applet\&.html: Appletソース・コード +.sp +\- AppletContext\&.html: +\fIAppletContext\fRソース・コード +.sp +\- AppletStub\&.html: +\fIAppletStub\fRソース・コード +.sp +\- AudioClip\&.html: +\fIAudioClip\fRソース・コード +.RE +.RE +.RE +.SS "生成されるAPI宣言" +.PP +\fIjavadoc\fRコマンドは、それぞれのクラス、インタフェース、フィールド、コンストラクタ、およびメソッドの記述の最初に、そのAPI用の宣言を生成します。たとえば、\fIBoolean\fRクラスの宣言は、次のようになります。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl - -.fl -\fP\f3apidocs\fP 最上位ディレクトリ -.fl - index.html HTML フレームを設定する初期ページ -.fl - * overview\-summary.html 全パッケージのリスト。先頭文による要約付き -.fl - overview\-tree.html 全パッケージのクラス階層のリスト -.fl - deprecated\-list.html 全パッケージの非推奨 API のリスト -.fl - constant\-values.html 全パッケージの static フィールドの値のリスト -.fl - serialized\-form.html 全パッケージの直列化された形式のリスト -.fl - * overview\-frame.html 全パッケージのリスト。左上のフレームで使用される -.fl - allclasses\-frame.html 全パッケージの全クラスのリスト。左下のフレームで使用される -.fl - help\-doc.html これらのページの構成を示すユーザーヘルプのリスト -.fl - index\-all.html \-splitindex オプションを指定しなかった場合に作成されるデフォルトの索引 -.fl - \f3index\-files\fP \-splitindex オプションを指定した場合に作成されるディレクトリ -.fl - index\-<number>.html \-splitindex オプションを指定した場合に作成される索引ファイル -.fl - package\-list パッケージ名のリスト。外部参照を解決するためだけに使用される -.fl - stylesheet.css フォント、色、配置を定義する HTML スタイルシート -.fl - \f3java\fP パッケージディレクトリ -.fl - \f3applet\fP サブパッケージディレクトリ -.fl - Applet.html Applet クラスのページ -.fl - AppletContext.html AppletContext インタフェースのページ -.fl - AppletStub.html AppletStub インタフェースのページ -.fl - AudioClip.html AudioClip インタフェースのページ -.fl - * package\-summary.html このパッケージのクラスのリスト。先頭文による要約付き -.fl - * package\-frame.html このパッケージのクラスのリスト。左下のフレームで使用される -.fl - * package\-tree.html このパッケージのクラス階層のリスト -.fl - package\-use このパッケージが使用されている場所のリスト -.fl - \f3doc\-files\fP 画像やサンプルファイルを保持するディレクトリ -.fl - \f3class\-use\fP API が使用されている場所のページを保持するディレクトリ -.fl - Applet.html Applet クラスの使用に関するページ -.fl - AppletContext.html AppletContext インタフェースの使用に関するページ -.fl - AppletStub.html AppletStub インタフェースの使用に関するページ -.fl - AudioClip.html AudioClip インタフェースの使用に関するページ -.fl - \f3src\-html\fP ソースコードディレクトリ -.fl - \f3java\fP パッケージディレクトリ -.fl - \f3applet\fP サブパッケージディレクトリ -.fl - Applet.html Applet ソースコードのページ -.fl - AppletContext.html AppletContext ソースコードのページ -.fl - AppletStub.html AppletStub ソースコードのページ -.fl - AudioClip.html AudioClip ソースコードのページ -.fl +public final class Boolean +extends Object +implements Serializable .fi -.SS -生成される API 宣言 -.LP -Javadoc ツールは、それぞれのクラス、インタフェース、フィールド、コンストラクタ、およびメソッドの説明の最初に、その API 用の宣言を生成します。たとえば、 \f2Boolean\fP クラスの宣言は、次のようになります。 -.LP -\f2public final class Boolean\fP -.br -\f2extends Object\fP -.br -\f2implements Serializable\fP -.LP -また、 \f2Boolean.valueOf\fP メソッドの宣言は、次のようになります。 -.LP -\f2public static Boolean valueOf(String s)\fP -.LP -Javadoc ツールでは、修飾子 \f2public\fP、 \f2protected\fP、 \f2private\fP、 \f2abstract\fP、 \f2final\fP、 \f2static\fP、 \f2transient\fP、および \f2volatile\fP は組み込めますが、 \f2synchronized\fP と \f2native\fP は組み込めません。これら後者の 2 つの修飾子は、実装の詳細と見なされているため、API 仕様には含まれません。 -.LP -API では、並行性セマンティクスについて、キーワード \f2synchronized\fP に依存するのではなく、コメントの主説明としてドキュメント化すべきです。 \f2たとえば、「1 つの Enumeration を\fP 複数のスレッドから並行して使用することはできない」などと記述します。ドキュメントには、これらのセマンティクスを実現する方法を記述するべきではありません。たとえば、 \f2Hashtable\fP はスレッドに対して安全である必要がありますが、「エクスポートされるすべてのメソッドを同期化すればそれを実現できる」のようには指定する根拠はありません。バケットレベルで内部的に同期化する権利を残しておく必要があります。そうすれば、より高度な並行性が提供されます。 -.SH "ドキュメンテーションコメント" -.LP -オリジナルの「ドキュメンテーションコメントの仕様」は、「関連項目」を参照してください。 -.SS -ソースコードへのコメントの挿入 -.LP -ソースコードの任意のクラス、インタフェース、メソッド、コンストラクタ、またはフィールドの宣言の前に、ドキュメンテーションコメント ("doc comments") を記述することができます。各パッケージにドキュメンテーションコメントを作成できます。構文は若干異なりますが、概要にもドキュメンテーションコメントを作成できます。ドキュメンテーションコメントは、非公式に「Javadoc コメント」と呼ばれています (この用語は商標関連の使用法に違反)。ドキュメンテーションコメントは、コメントを始まりを示す文字列 \f2/**\fP と、コメントを終わりを示す文字列 \f2*/\fP の間にある文字から構成されます。行の先頭のアスタリスクは、各行に記述できます。詳細は、以下で説明します。コメントのテキストは、複数行にわたって記述できます。 +.if n \{\ +.RE +.\} +.PP +\fIBoolean\&.valueOf\fRメソッドの宣言は次のとおりです。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +public static Boolean valueOf(String s) +.fi +.if n \{\ +.RE +.\} +.PP +\fIjavadoc\fRコマンドは、修飾子\fIpublic\fR、\fIprotected\fR、\fIprivate\fR、\fIabstract\fR、\fIfinal\fR、\fIstatic\fR、\fItransient\fR、および\fIvolatile\fRを含めることができますが、\fIsynchronized\fRおよび\fInative\fRはできません。\fIsynchronized\fRおよび\fInative\fR修飾子は、実装の詳細とみなされているため、API仕様には含まれません。 +.PP +APIでは、並行性セマンティクスについて、キーワード\fIsynchronized\fRに依存するのではなく、コメントの主説明としてドキュメント化する必要があります。たとえば、「1つのenumerationを複数のスレッドから並行して使用することはできない」のように記述します。ドキュメントには、これらのセマンティクスを実現する方法を記述しないでください。たとえば、\fIHashtable\fRオプションはスレッドセーフである必要がありますが、「エクスポートされるすべてのメソッドを同期化してそれを実現する」のように指定する根拠はありません。より高度な並行性のために、バケット・レベルで内部的に同期化する権限を保有しておくことをお薦めします。 +.SH "ドキュメンテーション・コメント" +.PP +このセクションでは、ソース・コードのコメントとコメントの継承について説明します。 +.SS "ソース・コード・コメント" +.PP +ソース・コードの任意のクラス、インタフェース、メソッド、コンストラクタ、またはフィールドの宣言の前に、ドキュメンテーション・コメントを記述することができます。各パッケージにもドキュメンテーション・コメントを作成できます。構文は若干異なりますが、概要にもドキュメンテーション・コメントを作成できます。ドキュメンテーション・コメントは、\fI/**\fRと、終わりを表す\fI*/\fRの間にある文字から構成されます。先頭のアスタリスクは各行で使用でき、次の項で詳しく説明します。コメントのテキストは、複数行にわたって記述できます。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl /** -.fl * This is the typical format of a simple documentation comment -.fl - * that spans two lines. -.fl + * that spans two lines\&. */ -.fl -\fP .fi -.LP -次のようにして 1 行に記述すると、スペースを節約できます。 +.if n \{\ +.RE +.\} +.PP +スペースを節約するには、コメントを1行に入れます。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -/** This comment takes up only one line.*/ -.fl -\fP +/** This comment takes up only one line\&. */ .fi -.LP -\f3コメントの配置\fP \- ドキュメンテーションコメントは、クラス、インタフェース、コンストラクタ、メソッド、またはフィールドの宣言の直前に置かれているときにだけ認識されます。クラスの例、メソッドの例、およびフィールドの例を参照してください。メソッドの本体に置かれているドキュメンテーションコメントは無視されます。javadoc ツールでは、1 つの宣言文につき 1 つのドキュメンテーションコメントだけが認識されます。 -.LP -よくある間違いは、クラスコメントとクラス宣言の間に \f2import\fP 文を置いてしまうことです。このような記述はしないでください。このようなクラスコメントは無視されます。 +.if n \{\ +.RE +.\} +コメントの配置.PP +ドキュメンテーション・コメントは、クラス、インタフェース、コンストラクタ、メソッド、またはフィールド宣言の直前に配置される場合にのみ認識されます。メソッドの本体に置かれているドキュメンテーション・コメントは無視されます。\fIjavadoc\fRコマンドは、宣言文ごとに1つのドキュメンテーション・コメントしか認識しません。タグを使用できる場所を参照してください。 +.PP +よくある間違いは、クラス・コメントとクラス宣言の間に\fIimport\fR文を置いてしまうことです。\fIjavadoc\fRコマンドはクラス・コメントを無視するので、\fIimport\fR文をこの場所に配置しないでください。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl - /** -.fl - * This is the class comment for the class Whatever. -.fl - */ -.fl - -.fl - import com.sun; // MISTAKE \- Important not to put import statement here -.fl - -.fl - public class Whatever { -.fl - } -.fl -\fP -.fi -.LP -\f3ドキュメンテーションコメントは主説明のあとにタグセクションが続く \- コメントの開始区切り文字である\fP \f2/**\fP のあとからタグセクションまでが主説明になります。タグセクションは、行の先頭にある最初の \f2@\fP で定義される最初のブロックタグから始まります (先頭のアスタリスク、空白、先頭の区切り文字 \f2/**\fP は除く)。主説明を記述せず、タグセクションだけのコメントを記述することもできます。主説明は、タグセクション以降に続けることはできません。タグの引数は、複数行にわたって記述できます。タグの数に制限はありません。何回も記述できるタグと、1 回しか記述できないタグがあります。たとえば、次の \f2@see\fP は、タグセクションを開始しています。 -.nf -\f3 -.fl /** -.fl - * This sentence would hold the main description for this doc comment. -.fl - * @see java.lang.Object -.fl + * This is the class comment for the class Whatever\&. */ -.fl -\fP + +import com\&.example; // MISTAKE \- Important not to put import statement here + +public class Whatever{ } .fi -.LP -\f3ブロックタグとインラインタグ\fP \- \f2「タグ」\fPは、Javadoc が処理できる、ドキュメンテーションコメント内の特別なキーワードです。タグには 2 種類あります。1 つは @tag のように表記されるブロックタグ \f2(「標準タグ」とも呼ばれる)、\fP もう 1 つは {@tag} のように中括弧で囲まれるインラインタグ \f2です\fP。ブロックタグが正しく解釈されるためには、行の先頭のアスタリスク、空白、区切り文字 (\f2/**\fP) を除いて、行の先頭に置かなければなりません。これは、 \f2@\fP 文字をテキスト内の別の場所で使用した場合にはタグの開始として解釈されないことを意味しています。行の先頭で \f2@\fP 文字を使用してもそれが解釈されないようにするには、HTML エンティティー \f2@\fP を使用します。それぞれのブロックタグには、対応付けられたテキストがあります。このテキストは、タグのあとから、次のタグの前、またはドキュメンテーションコメントの最後までの間に記述されたテキスト (タグやコメント区切り文字を除く) です。この関連テキストは複数行にわたって記述できます。インラインタグは、テキストを記述できる場所であればどこにでも置くことができ、正しく解釈されます。次の例にはブロックタグ \f2@deprecated\fP とインラインタグ \f2{@link}\fP が含まれています。 +.if n \{\ +.RE +.\} +コメントのパーツ.PP +ドキュメンテーション・コメントには、主説明とその後に続くタグ・セクションが含まれます。主説明は、開始区切り文字\fI/**\fRで始まり、タグ・セクションまで続きます。タグ・セクションは、先頭文字が\fI@\fRの行で定義される最初のブロック・タグから始まります(先頭のアスタリスク、空白文字、先頭の区切り文字\fI/**\fRは除く)。主説明を記述せず、タグ・セクションのみのコメントを記述することもできます。主説明は、タグ・セクション以降に続けることはできません。タグの引数は、複数行にわたって記述できます。タグの数に制限はありません。何回も記述できるタグと、1回しか記述できないタグがあります。たとえば、次の\fI@see\fRタグからタグ・セクションは始まります。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl /** -.fl - * @deprecated As of JDK 1.1, replaced by {@link #setBounds(int,int,int,int)} -.fl + * This sentence holds the main description for this documentation comment\&. + * @see java\&.lang\&.Object */ -.fl -\fP .fi -.LP -\f3コメントは HTML で記述する\fP \- テキストは HTML 形式で記述しなければなりません。これは、HTML のエンティティーを使う必要があること、および HTML タグを使用できることを意味します。記述する HTML のバージョンとしては、使用するブラウザがサポートする任意のバージョンを使用できます。標準ドックレットは、カスケーディングスタイルシート (CSS) とフレームを含め、すべての部分 (ドキュメンテーションコメント以外の部分) で HTML 3.2 に準拠したコードを生成するように作成されています。ただし、フレームセット対応のため、生成される各ファイルには「HTML 4.0」と記述されます。 -.LP -たとえば、より小さい (\f2<\fP) 記号およびより大きい (\f2>\fP) 記号のエンティティーは、 \f2<\fP および \f2>\fP と記述すべきです。同様に、アンパサンド (\f2&\fP) は \f2&\fP と記述すべきです。次の例ではボールドの HTML タグ \f2<b>\fP が示されています。 -.LP -次に、ドキュメンテーションコメントを示します。 +.if n \{\ +.RE +.\} +ブロックおよびインライン・タグ.PP +タグは、\fIjavadoc\fRコマンドが処理するドキュメンテーション・コメント内の特殊なキーワードです。タグには2つのタイプがあります。1つは\fI@tag\fRタグのように表記されるブロック・タグ(スタンドアロン・タグとも呼ばれる)、もう1つは\fI{@tag}\fRタグのように中カッコで囲んで表記されるインライン・タグです。ブロック・タグが解釈されるには、行頭のアスタリスク、空白文字、区切り文字(\fI/**\fR)を除いて、行の先頭に置く必要があります。これは、\fI@\fR文字をテキスト内の別の場所で使用しても、タグの開始として解釈されないことを意味しています。\fI@\fR文字を使用して行を開始しても、それが解釈されないようにするには、HTMLエンティティ\fI@\fRを使用します。それぞれのブロック・タグには、関連付けられたテキストがあります。このテキストは、タグの後から、次のタグの前、またはドキュメンテーション・コメントの最後までの間に記述されたテキストです(タグまたはコメント区切り文字を除く)。この関連テキストは、複数行にわたって記述できます。インライン・タグは、テキストを記述できる場所であればどこにでも置くことができ、解釈されます。次の例にはブロック・タグ\fI@deprecated\fRとインライン・タグ\fI{@link}\fRが含まれています。javadocタグを参照してください。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl /** -.fl - * This is a <b>doc</b> comment. -.fl - * @see java.lang.Object -.fl + * @deprecated As of JDK 1\&.1, replaced by {@link #setBounds(int,int,int,int)} */ -.fl -\fP .fi -.LP -\f3行頭のアスタリスク\fP \- javadoc によるドキュメンテーションコメントの解析時に、各行の先頭にあるアスタリスク (\f2*\fP) 文字は破棄されます。最初のアスタリスク (\f2*\fP) 文字より前にある空白やタブも破棄されます。バージョン 1.4 からは、行の先頭のアスタリスクを省略しても、先頭の空白文字は削除されなくなりました。このため、コード例を直接ドキュメンテーションコメントの \f2<PRE>\fP タグ内にペーストしても、インデントが保持されます。通常、ブラウザは、空白文字をタブよりも一律に解釈します。インデントの起点は左マージンになります (区切り文字 \f2/**\fP または \f2<PRE>\fP タグではなく)。 -.LP -\f3最初の文\fP \- 各ドキュメンテーションコメントの最初の文は、宣言されているエンティティーに関する簡潔かつ完全な要約文である必要があります。この「最初の文」は、直後にスペース、タブ、または改行が続く最初のピリオド (ロケールが英語に設定されている場合)、または最初のタグがある位置で終わります。最初の文は、Javadoc ツールによって HTML ページの最初にあるメンバーの概要の部分にコピーされます。 -.LP -\f3複数フィールドの宣言\fP \- Java では、1 つの文で複数のフィールドを宣言できます。ただし、この文には、1 つのドキュメンテーションコメントしか記述できません。そのコメントが、すべてのフィールドに対してコピーされます。したがって、フィールドごとにドキュメンテーションコメントを記述する必要がある場合は、各フィールドを別々の文で宣言しなければなりません。たとえば、次のドキュメンテーションコメントは、1 つの宣言として記述すると不適切です。この場合は、宣言を 2 つに分けることをお勧めします。 +.if n \{\ +.RE +.\} +HTMLでのコメントの記述.PP +テキストはHTMLエンティティとHTMLタグを使用してHTMLで記述される必要があります。使用するブラウザがサポートする任意のHTMLのバージョンを使用できます。標準ドックレットは、カスケーディング・スタイル・シートおよびフレームを含め、ドキュメンテーション・コメント以外の部分でHTML 3\&.2に準拠したコードを生成します。フレーム・セットのため、生成されたファイルにはHTML 4\&.0が推奨されます。 +.PP +たとえば、より小さい記号(<)およびより大きい記号(>)のエンティティは、\fI<\fRおよび\fI>\fRと記述する必要があります。同様に、アンパサンド(&)は\fI&\fRと記述する必要があります。次の例では、太字のHTMLタグ\fI<b>\fRを使用しています。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +/** + * This is a <b>doc</b> comment\&. + * @see java\&.lang\&.Object + */ +.fi +.if n \{\ +.RE +.\} +先頭のアスタリスク.PP +\fIjavadoc\fRコマンドによるドキュメンテーション・コメントの解析時に、各行の先頭にあるアスタリスク(*)文字は破棄されます。最初のアスタリスク(*)文字より前にある空白やタブも破棄されます。行頭のアスタリスクを省略した場合、インデントを保持したままでサンプル・コードを\fI<PRE>\fRタグ内のドキュメンテーション・コメントに直接貼り付けられるように、先頭の空白文字は削除されなくなります。ブラウザは、空白文字をタブよりも一律に解釈します。インデントの起点は(区切り文字\fI/**\fRまたは\fI<PRE>\fRタグではなく)左マージンになります。 +最初の文.PP +各ドキュメンテーション・コメントの最初の文は、宣言されているエンティティに関する簡潔かつ完全なサマリー文である必要があります。この文は、空白、タブ、または行終了文字が続く最初のピリオド、または最初のブロック・タグがある位置で終わります。最初の文は、\fIjavadoc\fRコマンドによってHTMLページの先頭にあるメンバーのサマリーの部分にコピーされます。 +複数フィールドの宣言.PP +Javaプラットフォームでは、1つの文で複数のフィールドを宣言できます。ただし、この文には、1つのドキュメンテーション・コメントしか記述できません。そのコメントが、すべてのフィールドに対してコピーされます。フィールドごとにドキュメンテーション・コメントを記述する必要がある場合は、各フィールドを別々の文で宣言する必要があります。たとえば、次のドキュメンテーション・コメントは、1つの宣言として記述すると不適切です。この場合は、宣言を2つに分けることをお薦めします。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl /** -.fl * The horizontal and vertical distances of point (x,y) -.fl */ -.fl -public int x, y; // Avoid this -.fl -\fP +public int x, y; // Avoid this + .fi -.LP -上記のコードからは、次のようなドキュメントが生成されます。 +.if n \{\ +.RE +.\} +.PP +\fIjavadoc\fRコマンドは、上のコードから次のようなドキュメントを生成します。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -public int \fP\f3x\fP -.fl +public int x .fi -.RS 3 -The horizontal and vertical distances of point (x,y) +.if n \{\ .RE +.\} +.PP +The horizontal and vertical distances of point (x, y)\&. +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -public int \fP\f3y\fP -.fl +public int y .fi -.RS 3 -The horizontal and vertical distances of point (x,y) +.if n \{\ .RE -.LP -\f3見出しタグはなるべく使用しない\fP \- メンバーに対してドキュメンテーションコメントを記述するときには、<H1> や <H2> などの HTML 見出しタグは、なるべく使わないでください。 Javadoc ツールは、完全に構造化されたドキュメントを作成するので、このような構造化タグが使われていると、生成ドキュメントの形式が悪影響を受けることがあります。ただし、クラスやパッケージのコメントでは、これらの見出しタグを使って独自の構造を組み立ててかまいません。 -.SS -メソッドコメントの自動コピー -.LP -Javadoc ツールには、次の 2 つの場合に、クラスおよびインタフェースのメソッドコメントをコピーまたは「継承」する機能があります。コンストラクタ、フィールド、および入れ子のクラスは、ドキュメンテーションコメントを継承しません。 -.RS 3 -.TP 2 -o -\f3自動的にコメントを継承して見つからないテキストを埋める\fP \- 主説明、 \f2@return\fP タグ、 \f2@param\fP タグ、または \f2@throws\fP タグがメソッドコメントに見つからない場合、Javadoc ツールは、オーバーライドまたは実装している場合はその対象となるメソッドから、対応する主説明またはタグコメントを、次のアルゴリズムに従ってコピーします。 -.LP -厳密には、特定のパラメータの \f2@param\fP タグが見つからない場合、そのパラメータのコメントが、上位の継承階層のメソッドからコピーされます。特定の例外の \f2@throws\fP タグが見つからない場合、その例外が宣言されている場合にかぎり、 \f2@throws\fP タグがコピーされます。 -.LP -この動作はバージョン 1.3 以前の動作とは対照的です。これまでのバージョンでは、主説明またはタグが存在すれば、コメントは一切継承されませんでした。 -.TP 2 -o -\f3{@inheritDoc} タグを含むコメントを明示的に継承する\fP \- インラインタグ \f2{@inheritDoc}\fP を、メソッドの主説明内または \f2@return\fP タグ、 \f2@param\fP タグ、または \f2@throws\fP のいずれかのタグコメント内に挿入します。対応する継承された主説明またはタグコメントがその位置にコピーされます。 +.\} +.PP +The horizontal and vertical distances of point (x, y)\&. +ヘッダー・タグの使用.PP +メンバーに対してドキュメンテーション・コメントを記述するときには、\fI<H1>\fRや\fI<H2>\fRなどのHTML見出しタグを使用しないことをお薦めします。\fIjavadoc\fRコマンドは、完全な構造化ドキュメントを作成するので、このような構造化タグが使用されていると、生成ドキュメントの形式が悪影響を受けることがあります。ただし、クラスやパッケージのコメントでは、これらの見出しを使用して独自の構造を指定してかまいません。 +.SS "メソッド・コメントの継承" +.PP +\fIjavadoc\fRコマンドでは、クラスおよびインタフェースでメソッド・コメントを継承して、欠落したテキストを入力したり、明示的にメソッド・コメントを継承することができます。コンストラクタ、フィールド、およびネストされたクラスは、ドキュメンテーション・コメントを継承しません。 +.PP +\fB注意:\fR +ドキュメンテーション・コメントをコピーに利用するには、継承したメソッドのソース・ファイルが\fI\-sourcepath\fRオプションで指定したパスのみに置かれている必要があります。コマンドラインで、クラスもパッケージも渡す必要はありません。この点はリリース1\&.3\&.\fIn\fR以前とは対照的です。これまでは、クラスがドキュメント化されるクラスであることが必要でした。 +欠落テキストの入力.PP +主説明、または\fI@return\fR、\fI@param\fR、\fI@throws\fRタグがメソッド・コメントから欠落している場合、\fIjavadoc\fRコマンドは、対応する主説明またはタグ・コメントを、それがオーバーライドまたは実装しているメソッド(ある場合)からコピーします。メソッド・コメントの継承を参照してください。 +.PP +特定のパラメータの\fI@param\fRタグが見つからない場合、そのパラメータのコメントが、上位の継承階層のメソッドからコピーされます。特定の例外の\fI@throws\fRタグが見つからない場合、その例外が宣言されている場合にかぎり、\fI@throws\fRタグがコピーされます。 +.PP +この動作はリリース1\&.3以前の動作とは対照的です。これまでのバージョンでは、主説明またはタグが存在すれば、コメントは一切継承されませんでした。 +.PP +javadocタグおよびオプションを参照してください。 +明示的な継承.PP +\fI{@inheritDoc}\fRインライン・タグをメソッドの主説明または\fI@return\fR、\fI@param\fR、\fI@throws\fRタグ・コメントに挿入します。対応する継承された主説明またはタグ・コメントは、その場所にコピーされます。 +.SS "クラスおよびインタフェースの継承" +.PP +コメントの継承は、クラスおよびインタフェースからの継承の、考えられるすべての場合に発生します。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +クラスのメソッドがスーパークラスのメソッドをオーバーライドしている場合 .RE -.LP -ドキュメンテーションコメントを実際にコピーに利用するには、継承したメソッドのソースファイルが \-sourcepath で指定したパスだけに置かれていることが必要になります。コマンド行で、クラスもパッケージも渡す必要はありません。この点は、クラスがドキュメント化されるクラスでなければならなかった 1.3.x 以前のリリースと異なります。 -.LP -\f3クラスおよびインタフェースからの継承\fP \- クラスおよびインタフェースから継承する次の 3 つの場合に、コメントの継承が行われます。 -.RS 3 -.TP 2 -o -クラスのメソッドがスーパークラスのメソッドをオーバーライドしている -.TP 2 -o -インタフェースのメソッドがスーパーインタフェースのメソッドをオーバーライドしている -.TP 2 -o -クラスのメソッドがインタフェースのメソッドを実装している +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +インタフェースのメソッドがスーパーインタフェースのメソッドをオーバーライドしている場合 .RE -.LP -最初の 2 つのケース (メソッドがオーバーライドしている場合) では、Javadoc ツールは、そのコメントが継承されているかどうかにかかわらず、オーバーライドしているメソッドのドキュメント内に「オーバーライド」という小見出しを生成し、オーバーライドされているメソッドへのリンクを書き込みます。 -.LP -3 つ目のケース (特定のクラスのメソッドがインタフェースのメソッドを実装している場合) では、javadoc ツールは、オーバーライドしているメソッドのドキュメント内に「定義」という小見出しを生成し、実装されているメソッドへのリンクを書き込みます。これは、コメントが継承されているかどうかにかかわりません。 -.LP -\f3メソッドの説明が継承されるアルゴリズム\fP \- あるメソッドにドキュメンテーションコメントが記述されていない場合、または {@inheritDoc} タグがある場合、Javadoc ツールは、次のようなアルゴリズムを使用して適切なコメントを検索します。 このアルゴリズムは、もっとも適切なドキュメンテーションコメントを検索できるように設計されており、スーパークラスよりもインタフェースが優先されるようになっています。 -.RS 3 -.TP 3 -1. -直接に実装されている (または、拡張されている) インタフェースを、メソッドの宣言で implements (または extends) キーワードのあとに登場する順序で、1 つずつ調べる。このメソッドについて最初に見つかったドキュメンテーションコメントを採用する -.TP 3 -2. -手順 1 でドキュメンテーションコメントが見つからなかった場合は、直接実装されている (または、拡張されている) インタフェースのそれぞれに対して、このアルゴリズム全体を再帰的に適用する (その際の順序は、手順 1 でインタフェースを調べたときの順序と同じ) -.TP 3 -3. -手順 2 でドキュメンテーションコメントが見つからなかった場合で、このクラスが Object 以外のクラスである (インタフェースではない) 場合は、次のように処理する -.RS 3 -.TP 3 -a. -スーパークラスにこのメソッドについてのドキュメンテーションコメントが記述されていれば、そのコメントを採用する -.TP 3 -b. -手順 3a でドキュメンテーションコメントが見つからなかった場合は、スーパークラスに対して、このアルゴリズム全体を適用する +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +クラスのメソッドがインタフェースのメソッドを実装している場合 +.RE +.PP +最初の2つのケースでは、\fIjavadoc\fRコマンドは、オーバーライドしているメソッドのドキュメント内に\fI「オーバーライド」\fRという小見出しを生成します。コメントが継承されているかどうかにかかわらず、オーバーライドされているメソッドへのリンクが含まれます。 +.PP +3つ目のケース(特定のクラスのメソッドがインタフェースのメソッドを実装している場合)では、\fIjavadoc\fRコマンドは、オーバーライドしているメソッドのドキュメント内に\fI「定義」\fRという小見出しを生成します。コメントが継承されているかどうかにかかわらず、実装されているメソッドへのリンクが含まれます。 +.SS "メソッド・コメントのアルゴリズム" +.PP +メソッドにドキュメンテーション・コメントがない、または\fI{@inheritDoc}\fRタグがある場合、\fIjavadoc\fRコマンドは次のアルゴリズムを使用して適用できるコメントを検索します。アルゴリズムは、最も特定される適用可能なドキュメンテーション・コメントを探し、スーパークラスよりもインタフェースを優先するように設計されています。 +.sp +.RS 4 +.ie n \{\ +\h'-04' 1.\h'+01'\c +.\} +.el \{\ +.sp -1 +.IP " 1." 4.2 +.\} +直接に実装されている(または、拡張されている)インタフェースを、メソッドの宣言で\fIimplements\fR(または\fIextends\fR)という語の後に出現する順序で、1つずつ調べます。このメソッドについて最初に見つかったドキュメンテーション・コメントを採用します。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04' 2.\h'+01'\c +.\} +.el \{\ +.sp -1 +.IP " 2." 4.2 +.\} +手順1でドキュメンテーション・コメントが見つからなかった場合は、直接実装されている(または、拡張されている)インタフェースのそれぞれに対して、このアルゴリズム全体を再帰的に適用します(その際の順序は、手順1でインタフェースを調べたときの順序と同じ)。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04' 3.\h'+01'\c +.\} +.el \{\ +.sp -1 +.IP " 3." 4.2 +.\} +手順2でドキュメンテーション・コメントが見つからなかった場合で、このクラスが\fIObject\fR以外のクラスであるが、インタフェースではない場合は、次のように処理します。 +.sp +.RS 4 +.ie n \{\ +\h'-04' 1.\h'+01'\c +.\} +.el \{\ +.sp -1 +.IP " 1." 4.2 +.\} +スーパークラスにこのメソッドについてのドキュメンテーション・コメントが記述されている場合は、そのコメントを採用します。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04' 2.\h'+01'\c +.\} +.el \{\ +.sp -1 +.IP " 2." 4.2 +.\} +手順3aでドキュメンテーション・コメントが見つからなかった場合は、スーパークラスに対して、このアルゴリズム全体を再帰的に適用します。 .RE .RE -.SH "javadoc タグ" -.LP -Javadoc ツールは、Java のドキュメンテーションコメント内に埋め込まれた特別なタグを解析します。これらのドキュメンテーションタグを使うと、書式の整った完全な API ドキュメントをソースコードから自動的に生成できます。タグは「アットマーク」記号 (\f2@\fP) で始まり、大文字と小文字の区別があります。タグは、大文字と小文字を使用して、表示されているとおりに入力する必要があります。タグは、行の先頭 (先行する空白と省略可能なアスタリスクは除く) に置かなければなりません。慣例として、同じ名前のタグは 1 か所にまとめて記述するようにします。たとえば、 \f2@see\fP タグはすべて同じ場所に配置します。 -.LP -タグには 2 つのタイプがあります。 -.RS 3 -.TP 2 -o -\f3ブロックタグ\fP \- 主説明に続くタグセクション内にのみ記述可能。ブロックタグは、 \f2@tag\fP の形式をとります。 -.TP 2 -o -\f3インラインタグ\fP \- 主説明内、またはブロックタグのコメント内に記述可能。インラインタグは、 \f2{@tag}\fP.のように中括弧で囲みます。 +.SH "JAVADOCタグ" +.PP +\fIjavadoc\fRコマンドは、Javaのドキュメンテーション・コメント内に埋め込まれた特別なタグを解析します。\fIjavadoc\fRタグを使用すると、完全な整形式のAPIをソース・コードから自動的に生成できます。タグはアットマーク記号(\fI@\fR)で始まり、大文字と小文字が区別されます。これらのタグは、表示されているとおりに大文字と小文字を使用して入力する必要があります。タグは、行の先頭(先頭の空白文字と省略可能なアスタリスクの後)に置く必要があります。そうしないと、テキストとして扱われます。慣例として、同じ名前のタグは1箇所にまとめます。たとえば、\fI@see\fRタグが複数ある場合は、すべて同じ場所にまとめて配置します。詳細は、タグを使用できる場所を参照してください。 +.PP +タグには、次のタイプがあります。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +ブロック・タグ: ブロック・タグは主説明に続くタグ・セクション内にのみ配置します。ブロック・タグは、\fI@tag\fRの形式をとります。 .RE -.LP -今後のリリースで導入されるタグについては、 -.na -\f2「Proposed Javadoc Tags」\fP @ -.fi -http://java.sun.com/j2se/javadoc/proposed\-tags.htmlを参照してください。 -.LP -現時点で有効なタグは、次のとおりです。 -.LP -.TS -.if \n+(b.=1 .nr d. \n(.c-\n(c.-1 -.de 35 -.ps \n(.s -.vs \n(.vu -.in \n(.iu -.if \n(.u .fi -.if \n(.j .ad -.if \n(.j=0 .na -.. +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +インライン・タグ: インライン・タグは主説明内またはブロック・タグのコメント内の任意の場所に配置します。インライン・タグは\fI{@tag}\fRのように中カッコで囲みます。 +.RE +.PP +カスタム・タグについては、\-tag tagname:Xaoptcmf:"taghead"を参照してください。タグを使用できる場所も参照してください。 +.SS "タグの説明" +.PP +@author \fIname\-text\fR +.RS 4 +JDK 1\&.0で導入 +.sp +\fI\-author\fRオプションが使用されている場合、指定した名前のテキストの作成者エントリを生成されるドキュメントに追加します。1つのドキュメンテーション・コメントに複数の\fI@author\fRタグを含めることができます。1つの\fI@author\fRタグに1つの名前を指定することも、複数の名前を指定することもできます。前者の場合は、\fIjavadoc\fRコマンドによって名前と名前の間にカンマ(,)と空白文字が挿入されます。後者の場合は、テキスト全体が解析されることなく、生成ドキュメントにコピーされます。したがって、カンマではなく、各言語に対応した名前区切り文字を使用する必要があるときに、1行に複数の名前を指定できます。JavadocツールでのDocコメントの記述方法の@authorに関する項 +(http://www\&.oracle\&.com/technetwork/java/javase/documentation/index\-137868\&.html#@author)を参照してください。 +.RE +.PP +{@code \fItext\fR} +.RS 4 +JDK 1\&.5で導入 +.sp +\fI<code>{@literal}</code>\fRと同等です。 +.sp +テキストをHTMLマークアップまたはネストされたJavadocタグとして解釈せずに、textをコード・フォントで表示します。これにより、ドキュメンテーション・コメントでは、パラメータの型(\fI<Object>\fR)、不等号(\fI3 < 4\fR)、矢印(\fI<\-\fR)などで、通常の山カッコ(<および>)をHTMLエンティティ(\fI<\fRおよび\fI>\fR)のかわりに使用できます。たとえば、ドキュメンテーション・コメント\fI{@code A<B>C}\fRは\fIA<B>C\fRとして変更されずに生成されたHTMLページに表示されます。つまり、\fI<B>\fRが太字として解釈されず、そのフォントはコード・フォントになります。コード・フォントなしで同じ機能を実現するには、\fI{@literal}\fRタグを使用します。 +.RE +.PP +@deprecated \fIdeprecated\-text\fR +.RS 4 +JDK 1\&.0で導入 +.sp +このAPIは動作し続けますが、このAPIを使用しないことを薦めるコメントを追加します。\fIjavadoc\fRコマンドは、\fIdeprecated\-text\fRを主説明の前に移動してイタリックにし、その前に太字の警告「推奨されていません。」を追加します。このタグは、すべてのドキュメンテーション・コメント、つまり概要、パッケージ、クラス、インタフェース、コンストラクタ、メソッド、およびフィールドで有効です。 +.sp +非推奨テキストの最初の文では、そのAPIが推奨されなくなった時期と、代替として使用するAPIをユーザーに提示する必要があります。\fIjavadoc\fRコマンドは、この最初の文を、サマリー・セクションと索引にコピーします。その後の文で非推奨になった理由を説明することもできます。代替APIを指し示す\fI{@link}\fRタグ(Javadoc 1\&.2以降の場合)を含める必要があります。 +.sp +\fI@deprecated annotation\fRタグを使用してプログラム要素を非推奨にします。APIを非推奨にする方法と時期 +(http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/javadoc/deprecation/deprecation\&.html)を参照してください。 +.sp +JavadocツールでのDocコメントの記述方法の@deprecatedに関する項 + +(http://www\&.oracle\&.com/technetwork/java/javase/documentation/index\-137868\&.html#@deprecated)も参照してください。 +.RE +.PP +{@docRoot} +.RS 4 +JDK 1\&.3で導入 +.sp +生成されるページからの、生成ドキュメントの(生成先)ルート・ディレクトリへの相対パスを表します。このタグは、著作権のページや会社のロゴなど、生成されるすべてのページから参照するファイルを組み込むときに便利です。通常は、各ページの最下部から著作権のページにリンクします。 +.sp +この\fI{@docRoot}\fRタグは、コマンドラインでもドキュメンテーション・コメント内でも使用できます。このタグは、任意のタグ(\fI@return\fR、\fI@param\fRおよび\fI@deprecated\fRタグなど)のテキスト部分を含む、すべてのドキュメンテーション・コメント、つまり概要、パッケージ、クラス、インタフェース、コンストラクタ、メソッド、およびフィールドで有効です。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +コマンドラインで、ヘッダー、フッターまたは最下部が次のように定義されます。\fIjavadoc \-bottom \*(Aq<a href="{@docRoot}/copyright\&.html">Copyright</a>\*(Aq\fR +.sp +\fI{@docRoot}\fRタグをmakefile内でこのように利用する場合、一部の\fImakefile\fRプログラムでは、中カッコ\fI{}\fR文字を特別にエスケープする必要があります。たとえば、Inprise MAKEバージョン5\&.2をWindows上で実行する場合は、\fI{{@docRoot}}\fRのように、中カッコを二重にする必要があります。\fI\-bottom\fRオプションなどのオプションへの引数を囲むのに、二重(一重ではなく)引用符も必要です(\fIhref\fR引数を囲む引用符は省略)。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +ドキュメンテーション・コメントでは +.sp +.if n \{\ +.RS 4 +.\} .nf -.nr #~ 0 -.if n .nr #~ 0.6n -.ds #d .d -.if \(ts\n(.z\(ts\(ts .ds #d nl -.fc -.nr 33 \n(.s -.rm 80 81 -.nr 34 \n(.lu -.eo -.am 81 -.br -.di a+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -\f3導入された JDK/SDK のバージョン\fP -.br -.di -.nr a| \n(dn -.nr a- \n(dl -.. -.ec \ -.35 -.nf -.ll \n(34u -.nr 80 0 -.nr 38 \w\f3タグ\fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w\f2@author\fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w\f2{@code}\fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w\f2{@docRoot}\fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w\f2@deprecated\fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w\f2@exception\fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w\f2{@inheritDoc}\fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w\f2{@link}\fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w\f2{@linkplain}\fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w\f2{@literal}\fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w\f2@param\fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w\f2@return\fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w\f2@see\fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w\f2@serial\fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w\f2@serialData\fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w\f2@serialField\fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w\f2@since\fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w\f2@throws\fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w\f2{@value}\fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w\f2@version\fP -.if \n(80<\n(38 .nr 80 \n(38 -.80 -.rm 80 -.nr 81 0 -.nr 38 \w1.0 -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \w1.5 -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \w1.3 -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \w1.0 -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \w1.0 -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \w1.4 -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \w1.2 -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \w1.4 -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \w1.5 -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \w1.0 -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \w1.0 -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \w1.0 -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \w1.2 -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \w1.2 -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \w1.2 -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \w1.1 -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \w1.2 -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \w1.4 -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \w1.0 -.if \n(81<\n(38 .nr 81 \n(38 -.81 -.rm 81 -.nr 38 \n(a- -.if \n(81<\n(38 .nr 81 \n(38 -.35 -.nf -.ll \n(34u -.nr 38 1n -.nr 79 0 -.nr 40 \n(79+(0*\n(38) -.nr 80 +\n(40 -.nr 41 \n(80+(3*\n(38) -.nr 81 +\n(41 -.nr TW \n(81 -.if t .if \n(TW>\n(.li .tm Table at line 851 file Input is too wide - \n(TW units -.fc   -.nr #T 0-1 -.nr #a 0-1 -.eo -.de T# -.ds #d .d -.if \(ts\n(.z\(ts\(ts .ds #d nl -.mk ## -.nr ## -1v -.ls 1 -.ls -.. -.ec -.ne \n(a|u+\n(.Vu -.if (\n(a|+\n(#^-1v)>\n(#- .nr #- +(\n(a|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f3タグ\fP\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 (\n(41u+\n(81u-\n(a-u)/2u -.in +\n(37u -.a+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f2@author\fP\h'|\n(41u'1.0 -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f2{@code}\fP\h'|\n(41u'1.5 -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f2{@docRoot}\fP\h'|\n(41u'1.3 -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f2@deprecated\fP\h'|\n(41u'1.0 -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f2@exception\fP\h'|\n(41u'1.0 -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f2{@inheritDoc}\fP\h'|\n(41u'1.4 -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f2{@link}\fP\h'|\n(41u'1.2 -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f2{@linkplain}\fP\h'|\n(41u'1.4 -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f2{@literal}\fP\h'|\n(41u'1.5 -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f2@param\fP\h'|\n(41u'1.0 -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f2@return\fP\h'|\n(41u'1.0 -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f2@see\fP\h'|\n(41u'1.0 -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f2@serial\fP\h'|\n(41u'1.2 -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f2@serialData\fP\h'|\n(41u'1.2 -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f2@serialField\fP\h'|\n(41u'1.2 -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f2@since\fP\h'|\n(41u'1.1 -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f2@throws\fP\h'|\n(41u'1.2 -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f2{@value}\fP\h'|\n(41u'1.4 -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f2@version\fP\h'|\n(41u'1.0 -.fc -.nr T. 1 -.T# 1 -.35 -.rm a+ -.TE -.if \n-(b.=0 .nr c. \n(.c-\n(d.-44 -.LP -カスタムタグについては、\-tag オプションを参照してください。 -.RS 3 -.TP 3 -@author\ name\-text -\-author オプションが使用されている場合、指定された \f2name\-text\fP を含む [作成者] エントリを生成ドキュメントに追加します。1 つのドキュメンテーションコメントに複数の \f2@author\fP タグを含めることができます。1 つの \f2@author\fP タグに 1 つの名前を指定することも、複数の名前を指定することもできます。前者の場合は、Javadoc ツールによって名前と名前の間にコンマ (\f2,\fP) と空白が挿入されます。後者の場合は、テキスト全体が、解析されることなく、生成ドキュメントにそのままコピーされます。したがって、コンマではなく、各言語に対応した名前区切り文字を使う必要があるときは、1 つのタグに複数の名前を指定してください。 -.RE -.LP -詳細については、「タグを使用できる場所」および -.na -\f2@author タグのドキュメント\fP @ -.fi -http://www.oracle.com/technetwork/java/javase/documentation/index\-137868.html#@authorを参照してください。 -.LP -.RS 3 -.TP 3 -@deprecated\ deprecated\-text 注: @Deprecated 注釈を使って特定のプログラム要素を非推奨にできます。 -.RE -.LP -この API は動作し続けますが、この API を使用するべきではないことを示すコメントを追加します。Javadoc ツールは、 \f2deprecated\-text\fP を主説明の前に移動してイタリックにし、その前にボールドの警告「推奨されません。」を追加します。このタグは、すべてのドキュメンテーションコメント、つまり概要、パッケージ、クラス、インタフェース、コンストラクタ、メソッド、およびフィールドで有効です。 -.LP -\f2deprecated\-text\fP の最初の文では、少なくとも、その API が推奨されなくなった時期と、代替使用するべき API を読者に提示する必要があります。Javadoc ツールは、この最初の文だけを、概要セクションと索引にコピーします。そのあとの文では、その API が推奨されない理由を説明することもできます。代わりのAPI を指し示す \f2{@link}\fP タグ ( Javadoc 1.2 以降の場合) を含めるべきです。 -.LP -詳細については、 -.na -\f2@deprecated タグのドキュメント\fP @ -.fi -http://www.oracle.com/technetwork/java/javase/documentation/index\-137868.html#@deprecatedを参照してください。 -.RS 3 -.TP 2 -o -Javadoc 1.2 以降では \f2{@link}\fP タグを使用します。これにより、必要な場所にインラインでリンクを作成できます。次に例を示します。 -.nf -\f3 -.fl /** -.fl - * @deprecated As of JDK 1.1, replaced by {@link #setBounds(int,int,int,int)} -.fl + * See the <a href="{@docRoot}/copyright\&.html">Copyright</a>\&. */ -.fl - -.fl -\fP .fi -.TP 2 -o -Javadoc 1.1 の場合の標準形式は、 \f2@see\fP タグ (インラインは不可) を \f2@deprecated\fP タグごとに作成することです。 +.if n \{\ .RE -.LP -推奨されないタグについての詳細は、 -.na -\f2@deprecated タグ\fP @ -.fi -http://java.sun.com/javase/6/docs/technotes/guides/javadoc/deprecation/index.htmlのドキュメントを参照してください。 -.LP -.RS 3 -.TP 3 -{@code\ text} -\f2<code>{@literal}</code>\fP と同等です。 -.LP -テキストを \f2HTML マークアップ\fP または \f2入れ子になった javadoc タグ\fP として解釈せずに、text をコードフォントで表示します。このため、ドキュメンテーションコメント内で通常の山括弧 (\f2<\fP および \f2>\fP) を HTML エンティティー (\f2<\fP および \f2>\fP) の代わりに使用できます。たとえば、パラメータの型 (\f2<Object>\fP)、不等号 (\f23 < 4\fP)、矢印 (\f2<\-\fP) などです。たとえば、次のドキュメンテーションコメント -.nf -\f3 -.fl - \fP\f4{@code A<B>C}\fP\f3 -.fl - -.fl -\fP -.fi -.LP -は、生成された HTML ページで、次のようにそのまま表示されます。 -.nf -\f3 -.fl - \fP\f4A<B>C\fP\f3 -.fl - -.fl -\fP -.fi -.LP -ここで注目すべき点は、 \f2<B>\fP が太字として解釈されず、そのフォントはコードフォントになる、という点です。 -.LP -コードフォントなしで同じ機能を実現するには、\f2{@literal}\fP を使用します。 -.LP -.TP 3 -{@docRoot} -生成されるページから見た、生成ドキュメントの (生成先の) ルートディレクトリへの相対パスを表します。このタグは、著作権のページや会社のロゴなど、生成されるすべてのページから参照するファイルを組み込むときに便利です。通常は、各ページの下部から著作権のページにリンクします。 -.LP -この \f2{@docRoot}\fP タグは、コマンド行でもドキュメンテーションコメント内でも使用できます。このタグは、@return、@param、@deprecated などの任意のタグのテキスト部分を含む、すべてのドキュメンテーションコメント、つまり概要、パッケージ、クラス、インタフェース、コンストラクタ、メソッド、およびフィールドで有効です。 -.RS 3 -.TP 3 -1. -コマンド行では、ヘッダー、フッター、またはボトムノートは次のように定義します。 -.nf -\f3 -.fl - javadoc \-bottom '<a href="{@docRoot}/copyright.html">Copyright</a>' -.fl - -.fl -\fP -.fi -.LP -注 \- \f2{@docRoot}\fP を Makefile 内でこのように利用する場合、一部の Makefile プログラムでは、中括弧 { } 文字をエスケープする必要があります。たとえば、Inprise MAKE バージョン 5.2 を Windows 上で実行する場合は、 \f2{{@docRoot}} のように、中括弧を二重にする必要があります\fP。さらに、 \f2\-bottom\fP などのオプションに対する引数を、単一引用符ではなく二重引用符で囲む必要もあります ( \f2href\fP の引数を囲む引用符は省略)。 -.TP 3 -2. -ドキュメンテーションコメントの中では、次のように使用します。 -.nf -\f3 -.fl - /** -.fl - * See the <a href="{@docRoot}/copyright.html">Copyright</a>. -.fl - */ -.fl - -.fl -\fP -.fi -.RE -.LP -このタグが必要な理由は、生成ドキュメントが、サブパッケージと同じ深さを持つ階層構造のディレクトリに格納されるからです。次に例を示します。 -.nf -\f3 -.fl - <a href="{@docRoot}/copyright.html"> -.fl - -.fl -\fP -.fi -.LP -次のように解決されます。 -.nf -\f3 -.fl - <a href="../../copyright.html"> java/lang/Object.java の場合 -.fl - -.fl -\fP -.fi -.LP -かつ -.nf -\f3 -.fl - <a href="../../../copyright.html"> java/lang/ref/Reference.java の場合 -.fl - -.fl -\fP -.fi -.LP -.TP 3 -@exception\ class\-name\ description -\f2@exception\fP タグは \f2@throws\fP と同義です。 -.LP -.TP 3 -{@inheritDoc}\ -もっとも近い継承可能なクラスまたは実装可能なインタフェースから、このタグの現在のドキュメンテーションコメントに、ドキュメントを継承 (コピー) します。この機能により、より汎用的なコメントを継承ツリーの上位に記述し、コピーしたテキストを使って記述することができます。 -.LP -このタグは、ドキュメンテーションコメントの次の位置でのみ有効です。 -.RS 3 -.TP 2 -o -メソッドの主説明ブロック内。この場合、主説明は、上位階層のクラスまたはインタフェースからコピーされる -.TP 2 -o -メソッドの @return、@param、@throws タグのテキスト引数内。この場合、タグテキストは、上位階層の対応するタグからコピーされる -.RE -.LP -継承階層でコメントを見つける方法に関する正確な説明について、「メソッドコメントの自動コピー」を参照してください。このタグが見つからない場合、コメントは、この節で説明するルールに応じて、自動的に継承されるかどうかが決まります。 -.LP -.TP 3 -{@link\ package.class#member\ label} -表示テキスト \f2label\fP とのインラインリンクを挿入します。label は、参照クラスの指定されたパッケージ、クラス、またはメンバーの名前のドキュメンテーションを指し示します。このタグは、@return、@param、@deprecated などの任意のタグのテキスト部分を含む、すべてのドキュメンテーションコメント、つまり概要、パッケージ、クラス、インタフェース、コンストラクタ、メソッド、およびフィールドで有効です。 -.LP -このタグは \f2@see\fP と非常によく似ています。どちらも、\f2package.class\fP\f2#\fP\f2member\fP と \f2label\fP の参照の仕方が同じで、有効な構文もまったく同じです。大きな違いは、 \f2{@link}\fP では、[関連項目] セクションにリンクが配置される代わりに、インラインのリンクが生成されるという点です。また、インラインテキストのほかの部分と区別するために、 \f2{@link}\fP タグの最初と最後に中括弧を記述します。ラベルの中で「}」を使う必要がある場合は、HTML エンティティーの「}」を使います。 -.LP -1 文内で使用可能な \f2{@link}\fP タグの数に制限はありません。このタグは、ドキュメンテーションコメントの主説明部分、または @deprecated、@return、@param などの任意のタグのテキスト部分で使うことができます。 -.LP -たとえば、次のコメントでは \f2getComponentAt(int, int)\fP メソッドを参照しています。 -.nf -\f3 -.fl -{@link #getComponentAt(int, int) getComponentAt} メソッドを使用します。 -.fl - -.fl -\fP -.fi -.LP -標準ドックレットでは、上記のコメントから次の HTML が生成されます (このコメントが同じパッケージの別のクラスを参照している場合)。 -.nf -\f3 -.fl -<a href="Component.html#getComponentAt(int, int)">getComponentAt</a> メソッドを使用します。 -.fl - -.fl -\fP -.fi -.LP -この HTML は、Web ページ上では次のように表示されます。 -.nf -\f3 -.fl -getComponentAt メソッドを使用します。 -.fl - -.fl -\fP -.fi -.LP -\f2{@link}\fP を拡張してドキュメント化されないクラスへのリンクも可能にするには、\f2\-link\fP オプションを使用します。 -.LP -詳細については、 -.na -\f2{@link} タグのドキュメント\fP @ -.fi -http://www.oracle.com/technetwork/java/javase/documentation/index\-137868.html#{@link}を参照してください。 -.LP -.TP 3 -{@linkplain\ package.class#member\ label} -リンクのラベルがコードフォントではなくプレーンテキストで表示される点以外は \f2{@link}\fP と同じです。ラベルがプレーンテキストで記述されていると便利です。次の例を参照してください。例: -.nf -\f3 -.fl - {@linkplain add() the overridden method} を参照してください。 -.fl - -.fl -\fP -.fi -.LP -これは以下のように表示されます。 -.LP -the overridden method を参照してください。 -.LP -.TP 3 -{@literal\ text} -テキストを HTML マークアップまたは入れ子になった javadoc タグとして解釈せずに、 \f2text\fP を表示します。このため、ドキュメンテーションコメント内で通常の山括弧 (\f2<\fP および \f2>\fP) を HTML エンティティー (\f2<\fP および \f2>\fP) の代わりに使用できます。たとえば、パラメータの型 (\f2<Object>\fP)、不等号 (\f23 < 4\fP)、矢印 (\f2<\-\fP) などです。たとえば、次のドキュメンテーションコメント -.nf -\f3 -.fl - \fP\f4{@literal A<B>C}\fP\f3 -.fl - -.fl -\fP -.fi -.LP -は、生成された HTML ページはブラウザで次のようにそのまま表示されます。 -.LP -\f2\ \ \ \ \ \fPA<B>C -.LP -ここで注目すべき点は、 \f2<B>\fP が太字として解釈されず、そのフォントはコードフォントになる、という点です。 -.LP -コードフォントで同じ機能を実現するには、\f2{@code}\fP を使用します。 -.LP -.TP 3 -@param\ parameter\-name description -指定された \f2parameter\-name\fP のあとに指定された \f2description\fP が続くパラメータを、[パラメータ] セクションに追加します。ドキュメンテーションコメントを記述するときには、 \f2description\fP を複数行にわたって記述することもできます。このタグは、メソッド、コンストラクタ、またはクラスの doc コメント内でのみ有効です。 -.LP -\f2parameter\-name\fP は、メソッドまたはコンストラクタでのパラメータの名前か、クラス、メソッドまたはコンストラクタのタイプパラメータの名前になります。山括弧でパラメータ名を囲むと、型パラメータを使用することを 指定します。 -.LP -クラスの型パラメータの例: -.nf -\f3 -.fl - /** -.fl - * @param <E> Type of element stored in a list -.fl - */ -.fl - public interface List<E> extends Collection<E> { -.fl - } -.fl - -.fl -\fP -.fi -.LP -メソッドの型パラメータの例: -.nf -\f3 -.fl - /** -.fl - * @param string the string to be converted -.fl - * @param type the type to convert the string to -.fl - * @param <T> the type of the element -.fl - * @param <V> the value of the element -.fl - */ -.fl - <T, V extends T> V convert(String string, Class<T> type) { -.fl - } -.fl - -.fl -\fP -.fi -.LP -詳細については、 -.na -\f2@param タグのドキュメント\fP @ -.fi -http://www.oracle.com/technetwork/java/javase/documentation/index\-137868.html#@paramを参照してください。 -.LP -.TP 3 -@return\ description -[戻り値] セクションを追加して、 \f2description\fP のテキストを書き込みます。このテキストでは、戻り値の型と、取り得る値の範囲について記述する必要があります。このタグは、メソッドのドキュメンテーションコメントでのみ有効です。 -.LP -詳細については、 -.na -\f2@return タグのドキュメント\fP @ -.fi -http://www.oracle.com/technetwork/java/javase/documentation/index\-137868.html#@returnを参照してください。 -.LP -.TP 3 -@see\ reference -「関連項目」見出しを追加し、 \f2reference を指すリンクか、またはテキストエントリを書き込みます\fP。ドキュメンテーションコメントには任意の数の \f2@see\fP タグを含めることができますが、それらはすべて同じ見出しの下にグループ化されます。 \f2@see\fP タグには、次の 3 種類の形式があります。もっともよく使われるのは、3 番目の形式です。このタグは、すべてのドキュメンテーションコメント、つまり概要、パッケージ、クラス、インタフェース、コンストラクタ、メソッド、およびフィールドで有効です。パッケージ、クラス、またはメンバーに対するインラインリンクを文中に挿入する方法は、\f2{@link}\fP を参照してください。 -.RS 3 -.TP 3 -@see "string" -\f2string のテキストエントリを追加します\fP。リンクは生成されません。 \f2string\fP は、書籍または URL ではアクセスできない情報の参照先です。Javadoc ツールは、最初の文字が二重引用符 (\f2"\fP) かどうかを調べて、この形式をほかの 2 つの形式と区別します。たとえば、 -.nf -\f3 -.fl - @see "The Java Programming Language" -.fl - -.fl -\fP -.fi -.LP -これは次のようなテキストを生成します。 +.\} +このタグが必要な理由は、生成ドキュメントが、サブパッケージと同じ深さを持つ階層構造のディレクトリに格納されるからです。式\fI<a href="{@docRoot}/copyright\&.html">\fRは、\fIjava/lang/Object\&.java\fRに対しては\fI<a href="\&.\&./\&.\&./copyright\&.html">\fRに解決され、\fIjava/lang/ref/Reference\&.java\fRに対しては\fI<a href="\&.\&./\&.\&./\&.\&./copyright\&.html">\fRに解決されます。 .RE .RE -.RS 3 -.RS 3 -.RS 3 -.RS 3 -.TP 3 -関連項目: -The Java Programming Language +.PP +@exception \fIclass\-name description\fR +.RS 4 +JDK 1\&.0で導入 +.sp +\fI@throws\fRタグと同じです。@throws class\-name descriptionを参照してください。 .RE +.PP +{@inheritDoc} +.RS 4 +JDK 1\&.4で導入 +.sp +最も近い継承可能なクラスまたは実装可能なインタフェースから、このタグの位置にある現在のドキュメンテーション・コメントに、ドキュメントを継承(コピー)します。これにより、より汎用的なコメントを継承ツリーの上位に記述し、コピーしたテキストを使用して記述することができます。 +.sp +このタグは、ドキュメンテーション・コメントの次の位置でのみ有効です。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +メソッドの主説明ブロック内。この場合、主説明は、上位階層のクラスまたはインタフェースからコピーされます。 .RE -.TP 3 -@see <a href="URL#value">label</a> -\f2URL\fP#\f2value\fP で定義されたとおりにリンクを追加します。 \f2URL\fP#\f2value\fP は相対 URL または絶対 URL です。Javadoc ツールは、最初の文字が「より小さい」記号 (\f2<\fP) かどうかを調べて、この形式をほかの 2 つの形式と区別します。たとえば、 -.nf -\f3 -.fl - @see <a href="spec.html#section">Java Spec</a> -.fl -\fP -.fi -これは次のようなリンクを生成します。 -.RS 3 -.TP 3 -関連項目: -Java Spec +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +メソッドの\fI@return\fR、\fI@param\fR、\fI@throws\fRタグのテキスト引数内。この場合、タグ・テキストは、上位階層の対応するタグからコピーされます。 .RE -.TP 3 -@see\ package.class#member\ label -可視のテキスト \f2label\fP を持つリンクを追加します。このリンクは、参照先となる、指定された Java 言語の名前のドキュメンテーションを指します。 \f2label\fP は省略可能です。label を省略すると、リンク先のメンバーの名前が適切に短縮されて表示されます。 「名前が表示される方法」を参照してください。\-noqualifier を使用すると、表示テキストからパッケージ名が全体的に削除されます。ラベルは、自動生成される表示テキストとは異なる表示テキストを指定する場合に使います。 -.LP -バージョン 1.2 だけは、ラベルではなく、名前が <code> HTML タグ内に自動的に表示されます。 1.2.2 からは、ラベルを使用するか、しないかにかかわらず、<code> は常に表示テキストを囲むかたちで、含まれます。 -.LP -.RS 3 -.TP 2 -o -\f4package.class\fP\f4#\fP\f4member\fP には、参照されている任意の有効なプログラム要素の名前を指定します。つまり、パッケージ、クラス、インタフェース、コンストラクタ、メソッド、またはフィールドの名前です。ただし、メンバー名ーの前のドットは、シャープ記号 (\f2#\fP) で置き換えます。 \f2class\fP は、任意のトップレベルまたは入れ子にされたクラスまたはインタフェースを表します。 \f2member\fP は、任意のコンストラクタ、メソッドまたはフィールド (入れ子にされたクラスまたはインタフェースではない) を表します。指定した名前が、ドキュメント化されているクラスに含まれている場合、Javadoc ツールは、その名前へのリンクを自動的に作成します。外部参照クラスへのリンクを作成するには、\f2\-link\fP オプションを使います。参照先のクラスに属していない名前のドキュメンテーションを参照するには、残り 2 つの \f2@see\fP 形式のうちのどちらかを使用します。この引数については、このあとの「名前の指定」で詳しく説明します。 -.TP 2 -o -\f4label\fP は、省略可能なテキストで、リンクのラベルとして表示されます。 \f2label\fP には空白を含めることができます。 \f2label\fP を省略すると、\f2package.class.member\fP が、現在のクラスおよびパッケージに応じて適切に短縮されて表示されます。「名前が表示される方法」を参照してください。 -.TP 2 -o -空白が、 \f2package.class\fP\f2#\fP\f2member\fP と \f2label\fP の間の区切り文字になります。括弧の内側の空白文字はラベルの先頭とは解釈されないため、メソッドのパラメータ間に空白文字を入れてもかまいません。 +.sp +継承階層でコメントを見つける方法に関する説明は、メソッド・コメントの継承を参照してください。このタグが見つからない場合、コメントは、この項で説明するルールに応じて、自動的に継承されるかどうかが決まります。 .RE -.LP -\f3例\fP \- この例では、 \f2@see\fP タグ ( \f2Character\fP クラス内) が String クラスの \f2equals\fP メソッド \f2を参照\fP しています。このタグには名前「\f2String#equals(Object)\fP」とラベル「\f2equals\fP」の両方の引数が含まれています。 +.PP +{@link \fIpackage\&.class#member label\fR} +.RS 4 +JDK 1\&.2で導入 +.sp +表示テキストlabelとともにインライン・リンクを挿入します。labelは、参照クラスの指定されたパッケージ、クラス、またはメンバーの名前のドキュメントを指し示します。このタグは、\fI@return\fR、\fI@param\fRおよび\fI@deprecated\fRタグなどの任意のタグのテキスト部分を含む、すべてのドキュメンテーション・コメント、つまり概要、パッケージ、クラス、インタフェース、コンストラクタ、メソッド、およびフィールドで有効です。JavadocツールでのDocコメントの記述方法の@linkに関する項 +(http://www\&.oracle\&.com/technetwork/java/javase/documentation/index\-137868\&.html#{@link)を参照してください。 +.sp +このタグは\fI@see\fRタグに似ています。どちらのタグも、\fIpackage\&.class#member\fRと\fIlabel\fRの参照方法と、有効な構文が同じです。主な違いは、\fI{@link}\fRタグでは、「関連項目」セクションにリンクが配置されるかわりに、インライン・リンクが生成されるという点です。インライン・テキストの他の部分と区別するために、\fI{@link}\fRタグの最初と最後に中カッコを記述します。ラベル内で右中カッコ(\fI}\fR)を使用する必要がある場合、HTMLエンティティ記法\fI}\fRを使用します。 +.sp +1つ文の中で使用できる\fI{@link}\fRタグの数に制限はありません。このタグは、ドキュメンテーション・コメントの主説明部分、または\fI@deprecated\fR、\fI@return\fR、\fI@param\fRタグなどの任意のタグのテキスト部分で使用できます。 +.sp +たとえば、次のコメントでは\fIgetComponentAt(int,int)\fRメソッドを参照しています。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl - /** -.fl - * @see String#equals(Object) equals -.fl - */ -.fl -\fP +Use the {@link #getComponentAt(int, int) getComponentAt} method\&. .fi -標準ドックレットは、次のような HTML を生成します。 -.nf -\f3 -.fl -<dl> -.fl -<dt><b>See Also:</b> -.fl -<dd><a href="../../java/lang/String#equals(java.lang.Object)"><code>equals<code></a> -.fl -</dl> -.fl -\fP -.fi -これは、ブラウザでは次のように表示され、ラベルがリンクテキストになります。 -.RS 3 -.TP 3 -関連項目: -equals +.if n \{\ .RE -.LP -\f3名前の指定\fP \- この \f2package.class\fP\f2#\fP\f2member\fP という名前は、 \f2java.lang.String#toUpperCase()\fP のような完全修飾名にすることも、 \f2String#toUpperCase()\fP や \f2#toUpperCase()\fP のような非完全修飾名にすることもできます。名前が完全指定されていない場合、Javadoc ツールは、Java コンパイラの通常の検索順序でその名前を検索します。詳細は、このあとの「@see の検索順序」を参照してください。名前には、メソッドの複数の引数の間など、括弧の内側であれば空白を含めることができます。 -.LP -「部分的に指定」した短い名前を指定することの利点は、入力する文字数が減ることや、ソースコードが読みやすくなることです。次の表に、さまざまな形式の名前を示します。ここで、 \f2Class\fP にはクラスまたはインタフェースを、 \f2Type\fP にはクラス、インタフェース、配列、または基本データ型を、 \f2method\fP にはメソッドまたはコンストラクタを、それぞれ指定できます。 -.LP -.LP -.TS -.if \n+(b.=1 .nr d. \n(.c-\n(c.-1 -.de 35 -.ps \n(.s -.vs \n(.vu -.in \n(.iu -.if \n(.u .fi -.if \n(.j .ad -.if \n(.j=0 .na -.. +.\} +標準ドックレットでは、このコードから次のHTMLが生成されます(このコメントが同じパッケージの別のクラスを参照している場合)。 +.sp +.if n \{\ +.RS 4 +.\} .nf -.nr #~ 0 -.if n .nr #~ 0.6n -.ds #d .d -.if \(ts\n(.z\(ts\(ts .ds #d nl -.fc -.nr 33 \n(.s -.rm 80 -.nr 34 \n(.lu -.eo -.am 80 -.br -.di a+ -.35 -.ft \n(.f -.ll \n(34u*1u/2u -.if \n(.l<\n(80 .ll \n(80u -.in 0 -\f4@see\fP\f3\ \fP\f4package.class#member\fP\f3 の一般的な形式\fP -.br -.di -.nr a| \n(dn -.nr a- \n(dl -.. -.ec \ -.eo -.am 80 -.br -.di b+ -.35 -.ft \n(.f -.ll \n(34u*1u/2u -.if \n(.l<\n(80 .ll \n(80u -.in 0 -\f3現在のクラスのメンバーを参照する\fP -.br -\f2@see\fP\ \f2#\fP\f2フィールド\fP -.br -\f2@see\fP\ \f2#\fP\f2method(Type,\ Type,...)\fP -.br -\f2@see\fP\ \f2#\fP\f2method(Type\ argname,\ Type\ argname,...)\fP -.br -\f2@see\fP\ \f2#\fP\f2constructor(Type,\ Type,...)\fP -.br -\f2@see\fP\ \f2#\fP\f2constructor(Type\ argname,\ Type\ argname,...)\fP -.br -.di -.nr b| \n(dn -.nr b- \n(dl -.. -.ec \ -.eo -.am 80 -.br -.di c+ -.35 -.ft \n(.f -.ll \n(34u*1u/2u -.if \n(.l<\n(80 .ll \n(80u -.in 0 -\f3現在の、またはインポートされたパッケージの別のクラスを参照する\fP -.br -\f2@see\fP\ \f2クラス\fP\f2#\fP\f2フィールド\fP -.br -\f2@see\fP\ \f2クラス\fP\f2#\fP\f2method(Type,\ Type,...)\fP -.br -\f2@see\fP\ \f2クラス\fP\f2#\fP\f2method(Type\ argname,\ Type\ argname,...)\fP -.br -\f2@see\fP\ \f2クラス\fP\f2#\fP\f2constructor(Type,\ Type,...)\fP -.br -\f2@see\fP\ \f2クラス\fP\f2#\fP\f2constructor(Type\ argname,\ Type\ argname,...)\fP -.br -\f2@see\fP\ \f2Class.NestedClass\fP -.br -\f2@see\fP\ \f2クラス\fP -.br -.di -.nr c| \n(dn -.nr c- \n(dl -.. -.ec \ -.eo -.am 80 -.br -.di d+ -.35 -.ft \n(.f -.ll \n(34u*1u/2u -.if \n(.l<\n(80 .ll \n(80u -.in 0 -\f3別のパッケージの要素を参照する\fP\ (完全修飾) -.br -\f2@see\fP\ \f2package.Class\fP\f2#\fP\f2フィールド\fP -.br -\f2@see\fP\ \f2package.Class\fP\f2#\fP\f2method(Type,\ Type,...)\fP -.br -\f2@see\fP\ \f2package.Class\fP\f2#\fP\f2method(Type\ argname,\ Type\ argname,...)\fP -.br -\f2@see\fP\ \f2package.Class\fP\f2#\fP\f2constructor(Type,\ Type,...)\fP -.br -\f2@see\fP\ \f2package.Class\fP\f2#\fP\f2constructor(Type\ argname,\ Type\ argname,...)\fP -.br -\f2@see\fP\ \f2package.Class.NestedClass\fP -.br -\f2@see\fP\ \f2package.Class\fP -.br -\f2@see\fP\ \f2パッケージ\fP -.br -.di -.nr d| \n(dn -.nr d- \n(dl -.. -.ec \ -.35 -.nf -.ll \n(34u -.nr 80 0 -.80 -.rm 80 -.nr 38 \n(a- -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \n(b- -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \n(c- -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \n(d- -.if \n(80<\n(38 .nr 80 \n(38 -.35 -.nf -.ll \n(34u -.nr 38 1n -.nr 79 0 -.nr 40 \n(79+(0*\n(38) -.nr 80 +\n(40 -.nr TW \n(80 -.if t .if \n(TW>\n(.li .tm Table at line 1342 file Input is too wide - \n(TW units -.fc   -.nr #T 0-1 -.nr #a 0-1 -.eo -.de T# -.ds #d .d -.if \(ts\n(.z\(ts\(ts .ds #d nl -.mk ## -.nr ## -1v -.ls 1 -.ls -.. -.ec -.ne \n(a|u+\n(.Vu -.if (\n(a|+\n(#^-1v)>\n(#- .nr #- +(\n(a|+\n(#^-\n(#--1v) -.ta \n(80u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(40u -.in +\n(37u -.a+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(b|u+\n(.Vu -.if (\n(b|+\n(#^-1v)>\n(#- .nr #- +(\n(b|+\n(#^-\n(#--1v) -.ta \n(80u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(40u -.in +\n(37u -.b+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(c|u+\n(.Vu -.if (\n(c|+\n(#^-1v)>\n(#- .nr #- +(\n(c|+\n(#^-\n(#--1v) -.ta \n(80u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(40u -.in +\n(37u -.c+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(d|u+\n(.Vu -.if (\n(d|+\n(#^-1v)>\n(#- .nr #- +(\n(d|+\n(#^-\n(#--1v) -.ta \n(80u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(40u -.in +\n(37u -.d+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.fc -.nr T. 1 -.T# 1 -.35 -.rm a+ -.rm b+ -.rm c+ -.rm d+ -.TE -.if \n-(b.=0 .nr c. \n(.c-\n(d.-58 -.LP -上の表に対する補足事項を次に示します。 -.RS 3 -.TP 2 -o -最初の種類の形式 (パッケージとクラスを省略) の場合、Javadoc ツールは、現在のクラスの階層だけを検索します。つまり、現在のクラスかインタフェース、そのスーパークラスかスーパーインタフェース、または現在のクラスかインタフェースを囲んでいるクラスかインタフェースからメンバーを検索します (このあとの検索手順 1 ~ 3)。現在のパッケージのほかの部分や、ほかのパッケージは検索しません (検索手順 4 ~ 5)。 -.TP 2 -o -メソッドまたはコンストラクタの指定時に、 \f2getValue\fP のように括弧なしの名前を使用した場合、同じ名前のフィールドが存在していなければ、Javadoc ツールによってその名前へのリンクが正しく作成されますが、括弧や引数の追加をユーザーに促すための警告メッセージが表示されます。このメソッドがオーバーロードされている場合、Javadoc ツールは、検索で最初に見つかったメソッドにリンクします。結果は前もって特定できません。 -.TP 2 -o -入れ子になったクラスは、すべての形式について、 \f2outer\fP\f2.\fP\f2inner\fP として指定する必要があります。単純に \f2inner\fP とはしないでください。 -.TP 2 -o -すでに述べたように、\f2クラスとメンバーとの間の区切り文字としては、\fPドット (\f2.\fP) ではなくシャープ文字 (#) を使用します。このように指定すると、Javadoc ツールは、あいまいさを解決できます。ドットは、クラス、入れ子にされたクラス、パッケージ、およびサブパッケージを区切るためにも使用されます。ただし、Javadoc ツールでは一般に許容範囲が広く、あいまいさがなければ、ドットでも正しく解析されます。その場合でも警告は表示されます。 +Use the <a href="Component\&.html#getComponentAt(int, int)">getComponentAt</a> method\&. +.fi +.if n \{\ .RE -.LP -\f3@see の検索順序\fP \- Javadoc ツールは、ソースファイル (.java)、パッケージファイル (package.html または package\-info.java) または概要ファイル (overview.html) に含まれる \f2@see\fP タグを処理します。後者の 2 つのファイルでは、完全指定の名前を \f2@see\fP タグに指定しなければなりません。ソースファイルでは、完全指定の名前、または部分指定の名前を指定できます。 -.LP -Javadoc ツールは、完全指定でない名前が記述された \f2@see\fP タグを \f2.java ファイル内で見つけると、\fP Java コンパイラと同じ順序で指定された名前を検索します。 ただし、Javadoc ツールは、特定の名前空間のあいまいさを検出しません。 これは、ソースコードにこれらのエラーが存在していないことを前提としているためです。この検索順序は、\f2Java 言語仕様\fPで正式に定義されています。Javadoc ツールは、関連するクラスとパッケージ、およびインポートされたクラスとパッケージのすべてから名前を検索します。具体的には、次の順序で検索します。 -.RS 3 -.TP 3 -1. -現在のクラスまたはインタフェース -.TP 3 -2. -外側を囲んでいるクラスとインタフェース (もっとも近いものから検索) -.TP 3 -3. -スーパークラスとスーパーインタフェース (もっとも近いものから検索) -.TP 3 -4. -現在のパッケージ -.TP 3 -5. -インポートされているパッケージ、クラス、およびインタフェース (import 文の順序に従って検索) -.RE -.LP -Javadoc ツールは、各クラスについて手順 1 ~ 3 を再帰的に適用しながら、一致する名前が見つかるまで検索を続けます。つまり、まず現在のクラスを検索し、次にそのクラスを囲んでいるクラス E を検索し、その次に E のスーパークラスを検索し、さらにその次に E を囲んでいるクラスを検索します。 手順 4 と 5 では、1 つのパッケージ内のクラスまたはインタフェースを検索する順序は決まっていません。その順序は、個々のコンパイラによって異なります。手順 5 では、Javadoc ツールは、java.lang を検索します。このパッケージは、すべてのプログラムに自動的にインポートされるからです。 -.LP -Javadoc ツールは、必ずしもサブクラスを検索するとは限りません。また、javadoc の実行中にほかのパッケージのドキュメントが生成される場合でも、ほかのパッケージを検索しません。たとえば、 \f2@see\fP タグが \f2java.awt.event.KeyEvent\fP クラス内に含まれていて、 \f2java.awt\fP パッケージ内のある名前を参照していても、そのクラス内でそのパッケージがインポートされないかぎり、javadoc はそのパッケージ内での検索を行いません。 -.LP -\f3名前が表示される方法\fP \- \f2label\fP を省略した場合は、\f2package.class.member\fP が表示されます。一般に、package.class.member は、現在のクラスおよびパッケージに応じて適切に短縮されます。「短縮される」とは、必要最小限の名前だけが表示されるということです。たとえば、 \f2String.toUpperCase()\fP メソッドに、同じクラスのメンバーへの参照とほかのクラスのメンバーへの参照が含まれている場合、クラス名が表示されるのは後者のケースだけです (次の表を参照)。 -.LP -パッケージ名を広域的に削除するには、\-noqualifier を使用します。 -.br -.LP -.TS -.if \n+(b.=1 .nr d. \n(.c-\n(c.-1 -.de 35 -.ps \n(.s -.vs \n(.vu -.in \n(.iu -.if \n(.u .fi -.if \n(.j .ad -.if \n(.j=0 .na -.. +.\} +前の行は、次のようにWebページに表示されます。 +.sp +.if n \{\ +.RS 4 +.\} .nf -.nr #~ 0 -.if n .nr #~ 0.6n -.ds #d .d -.if \(ts\n(.z\(ts\(ts .ds #d nl -.fc -.nr 33 \n(.s -.rm 80 81 82 -.nr 34 \n(.lu -.eo -.am 81 -.br -.di a+ -.35 -.ft \n(.f -.ll \n(34u*1u/4u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -\f4String.toUpperCase() での例\fP -.br -.di -.nr a| \n(dn -.nr a- \n(dl -.. -.ec \ -.eo -.am 80 -.br -.di b+ -.35 -.ft \n(.f -.ll \n(34u*1u/4u -.if \n(.l<\n(80 .ll \n(80u -.in 0 -\f2@see\fP タグが同じクラス、同じパッケージのメンバーを参照している -.br -.di -.nr b| \n(dn -.nr b- \n(dl -.. -.ec \ -.eo -.am 82 -.br -.di c+ -.35 -.ft \n(.f -.ll \n(34u*1u/4u -.if \n(.l<\n(82 .ll \n(82u -.in 0 -\f2toLowerCase()\fP (クラス名は省略) -.br -.di -.nr c| \n(dn -.nr c- \n(dl -.. -.ec \ -.eo -.am 80 -.br -.di d+ -.35 -.ft \n(.f -.ll \n(34u*1u/4u -.if \n(.l<\n(80 .ll \n(80u -.in 0 -\f2@see\fP タグが異なるクラス、同じパッケージのメンバーを参照している -.br -.di -.nr d| \n(dn -.nr d- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di e+ -.35 -.ft \n(.f -.ll \n(34u*1u/4u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -\f2@see Character#toLowerCase(char)\fP -.br -.di -.nr e| \n(dn -.nr e- \n(dl -.. -.ec \ -.eo -.am 82 -.br -.di f+ -.35 -.ft \n(.f -.ll \n(34u*1u/4u -.if \n(.l<\n(82 .ll \n(82u -.in 0 -\f2Character.toLowerCase(char)\fP (パッケージ名は省略し、クラス名を含む) -.br -.di -.nr f| \n(dn -.nr f- \n(dl -.. -.ec \ -.eo -.am 80 -.br -.di g+ -.35 -.ft \n(.f -.ll \n(34u*1u/4u -.if \n(.l<\n(80 .ll \n(80u -.in 0 -\f2@see\fP タグが異なるクラス、異なるパッケージのメンバーを参照している -.br -.di -.nr g| \n(dn -.nr g- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di h+ -.35 -.ft \n(.f -.ll \n(34u*1u/4u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -\f2@see java.io.File#exists()\fP -.br -.di -.nr h| \n(dn -.nr h- \n(dl -.. -.ec \ -.eo -.am 82 -.br -.di i+ -.35 -.ft \n(.f -.ll \n(34u*1u/4u -.if \n(.l<\n(82 .ll \n(82u -.in 0 -\f2java.io.File.exists()\fP (パッケージ名とクラス名を含む) -.br -.di -.nr i| \n(dn -.nr i- \n(dl -.. -.ec \ -.35 -.nf -.ll \n(34u -.nr 80 0 -.nr 38 \w\f3参照の種類\fP -.if \n(80<\n(38 .nr 80 \n(38 -.80 -.rm 80 -.nr 38 \n(b- -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \n(d- -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \n(g- -.if \n(80<\n(38 .nr 80 \n(38 -.nr 81 0 -.nr 38 \w\f2@see String#toLowerCase()\fP -.if \n(81<\n(38 .nr 81 \n(38 -.81 -.rm 81 -.nr 38 \n(a- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(e- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(h- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 82 0 -.nr 38 \w\f3表示される名前\fP -.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 38 \n(f- -.if \n(82<\n(38 .nr 82 \n(38 -.nr 38 \n(i- -.if \n(82<\n(38 .nr 82 \n(38 -.35 -.nf -.ll \n(34u -.nr 38 1n -.nr 79 0 -.nr 40 \n(79+(0*\n(38) -.nr 80 +\n(40 -.nr 41 \n(80+(3*\n(38) -.nr 81 +\n(41 -.nr 42 \n(81+(3*\n(38) -.nr 82 +\n(42 -.nr TW \n(82 -.if t .if \n(TW>\n(.li .tm Table at line 1418 file Input is too wide - \n(TW units -.fc   -.nr #T 0-1 -.nr #a 0-1 -.eo -.de T# -.ds #d .d -.if \(ts\n(.z\(ts\(ts .ds #d nl -.mk ## -.nr ## -1v -.ls 1 -.ls -.. -.ec -.ne \n(a|u+\n(.Vu -.if (\n(a|+\n(#^-1v)>\n(#- .nr #- +(\n(a|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u \n(82u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f3参照の種類\fP\h'|\n(41u'\h'|\n(42u'\f3表示される名前\fP -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.a+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(b|u+\n(.Vu -.ne \n(c|u+\n(.Vu -.if (\n(b|+\n(#^-1v)>\n(#- .nr #- +(\n(b|+\n(#^-\n(#--1v) -.if (\n(c|+\n(#^-1v)>\n(#- .nr #- +(\n(c|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u \n(82u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\h'|\n(41u'\f2@see String#toLowerCase()\fP\h'|\n(42u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(40u -.in +\n(37u -.b+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(##u-1v -.nr 37 \n(42u -.in +\n(37u -.c+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(d|u+\n(.Vu -.ne \n(e|u+\n(.Vu -.ne \n(f|u+\n(.Vu -.if (\n(d|+\n(#^-1v)>\n(#- .nr #- +(\n(d|+\n(#^-\n(#--1v) -.if (\n(e|+\n(#^-1v)>\n(#- .nr #- +(\n(e|+\n(#^-\n(#--1v) -.if (\n(f|+\n(#^-1v)>\n(#- .nr #- +(\n(f|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u \n(82u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\h'|\n(41u'\h'|\n(42u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(40u -.in +\n(37u -.d+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.e+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(##u-1v -.nr 37 \n(42u -.in +\n(37u -.f+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(g|u+\n(.Vu -.ne \n(h|u+\n(.Vu -.ne \n(i|u+\n(.Vu -.if (\n(g|+\n(#^-1v)>\n(#- .nr #- +(\n(g|+\n(#^-\n(#--1v) -.if (\n(h|+\n(#^-1v)>\n(#- .nr #- +(\n(h|+\n(#^-\n(#--1v) -.if (\n(i|+\n(#^-1v)>\n(#- .nr #- +(\n(i|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u \n(82u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\h'|\n(41u'\h'|\n(42u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(40u -.in +\n(37u -.g+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.h+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(##u-1v -.nr 37 \n(42u -.in +\n(37u -.i+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.fc -.nr T. 1 -.T# 1 -.35 -.rm a+ -.rm b+ -.rm c+ -.rm d+ -.rm e+ -.rm f+ -.rm g+ -.rm h+ -.rm i+ -.TE -.if \n-(b.=0 .nr c. \n(.c-\n(d.-28 -.LP -\f3@see の例\fP -.br -右側のコメントは、 \f2@see\fP タグが \f2java.applet.Applet\fP などの別のパッケージのクラス内にある場合に、名前がどのように表示されるかを示しています。 -.nf -\f3 -.fl - 関連項目: -.fl -@see java.lang.String // String \fP\f3 -.fl -@see java.lang.String The String class // The String class \fP\f3 -.fl -@see String // String \fP\f3 -.fl -@see String#equals(Object) // String.equals(Object) \fP\f3 -.fl -@see String#equals // String.equals(java.lang.Object) \fP\f3 -.fl -@see java.lang.Object#wait(long) // java.lang.Object.wait(long) \fP\f3 -.fl -@see Character#MAX_RADIX // Character.MAX_RADIX \fP\f3 -.fl -@see <a href="spec.html">Java Spec</a> // Java Spec \fP\f3 -.fl -@see "The Java Programming Language" // "The Java Programming Language" \fP\f3 -.fl -\fP +Use the getComponentAt method\&. .fi -\f2@see\fP を拡張してドキュメント化されないクラスへのリンクも可能にするには、\f2\-link\fP オプションを使用します。 -.LP -詳細については、 -.na -\f2@see タグのドキュメント\fP @ -.fi -http://www.oracle.com/technetwork/java/javase/documentation/index\-137868.html#@seeを参照してください。 +.if n \{\ .RE +.\} .RE -.LP -.RS 3 -.TP 3 -@serial\ field\-description | include | exclude -デフォルトの直列化可能フィールドのドキュメンテーションコメントで使用します。 -.LP -\f2field\-description\fP (省略可能) では、フィールドの意味を説明し、取り得る値のリストを示す必要があります。必要に応じて、複数の行に渡って説明を記述できます。標準ドックレットは、この情報を、直列化された形式のページに追加します。 -.LP -クラスを直列化したあとしばらくしてから直列化可能フィールドをクラスに追加した場合、主説明に、追加したバージョンを識別する文を追加する必要があります。 -.LP -\f2include\fP および \f2exclude\fP 引数は、直列化された形式のページにクラスまたはパッケージを含めるか除外するかを示します。これらの引数には、次のような効果があります。 -.RS 3 -.TP 2 -o -\f2Serializable\fP を実装している public または protected クラスは、そのクラス (またはそのパッケージ) が \f2@serial exclude\fP としてマークされていないかぎり、含められます。 -.TP 2 -o -\f2Serializable\fP を実装している private または package\-private クラスは、そのクラス (またはそのパッケージ) が \f2@serial include\fP として マークされていないかぎり、除外されます。 +.PP +{@linkplain \fIpackage\&.class#member label\fR} +.RS 4 +JDK 1\&.4で導入 +.sp +\fI{@link}\fRタグと同じ動作をしますが、リンク・ラベルがコード・フォントではなくプレーン・テキストで表示される点が異なります。ラベルがプレーン・テキストで記述されていると便利です。たとえば、「\fIRefer to {@linkplain add() the overridden method}\fR\&.」は「Refer to the overridden method」と表示されます。 .RE -.LP -例: \f2javax.swing\fP パッケージは \f2@serial exclude\fP ( \f2package.html\fP または \f2package\-info.java\fP内) としてマークされています。public クラス \f2java.security.BasicPermission\fP は \f2@serial exclude\fP としてマークされています。package\-private クラス \f2java.util.PropertyPermissionCollection\fP は \f2@serial include\fP としてマークされています。 -.LP -クラスレベルで指定された @serial タグは、パッケージレベルで指定された @serial タグをオーバーライドします。 -.LP -これらのタグの使用法についての詳細と使用例は、「Java オブジェクト直列化仕様」の第 1.6 節 -.na -\f2「クラスの直列化可能なフィールドおよびデータの文書化」\fP @ -.fi -http://java.sun.com/javase/6/docs/platform/serialization/spec/serial\-arch.htmlを参照してください。また、 -.na -\f2「直列化の FAQ」\fP @ -.fi -http://java.sun.com/javase/technologies/core/basic/serializationFAQ.jsp#javadoc_warn_missingも参照してください。この FAQ には、「\-private スイッチを指定しないで javadoc を実行しているのに private フィールドの @serial タグが見つからないという javadoc の警告が表示される」などの一般的な質問への回答が記載されています。直列化形式仕様にクラスを含める場合には、 -.na -\f2「Sun の仕様」\fP @ -.fi -http://java.sun.com/j2se/javadoc/writingapispecs/serialized\-criteria.htmlも参照してください。 -.LP -.TP 3 -@serialField\ field\-name\ field\-type\ field\-description -Serializable \f2クラスの\fP serialPersistentFields \f2メンバーの\fP ObjectStreamField コンポーネント \f2をドキュメント化\fP します。1 つの \f2@serialField\fP タグを各 \f2ObjectStreamField\fP コンポーネントで使用すべきです。 -.LP -.TP 3 -@serialData\ data\-description -\f2data\-description\fP は、直列化された形式でのデータの型と順序を説明するテキストです。具体的に言うと、このデータには、 \f2writeObject\fP メソッドによって書き込まれる省略可能なデータ、および \f2Externalizable.writeExternal\fP メソッドによって書き込まれるすべてのデータ (基底クラスも含む) が含まれます。 -.LP -\f2@serialData\fP タグは、 \f2writeObject\fP、 \f2readObject\fP、 \f2writeExternal\fP、 \f2readExternal\fP、 \f2writeReplace\fP、および \f2readResolve\fP メソッドのドキュメンテーションコメント内で使用できます。 -.LP -.TP 3 -@since\ since\-text -生成ドキュメントに [導入されたバージョン] 見出しを追加し、指定された \f2since\-text\fP を書き込みます。このテキストには、特別な内部構造はありません。このタグは、すべてのドキュメンテーションコメント、つまり概要、パッケージ、クラス、インタフェース、コンストラクタ、メソッド、およびフィールドで有効です。このタグは、特定の変更または機能が、 \f2since\-text に示されたソフトウェアリリース以降、存在していることを意味します\fP。たとえば、 +.PP +{@literal \fItext\fR} +.RS 4 +JDK 1\&.5で導入 +.sp +テキストをHTMLマークアップまたはネストされたJavadocタグとして解釈せずに、textを表示します。これにより、ドキュメンテーション・コメントでは、パラメータの型(\fI<Object>\fR)、不等号(\fI3 < 4\fR)、矢印(<\-)などで、山カッコ(\fI<および>\fR)をHTMLエンティティ(\fI<\fRおよび\fI>\fR)のかわりに使用できます。たとえば、ドキュメンテーション・コメントのテキスト\fI{@literal A<B>C}\fRは\fIA<B>C\fRとして、ブラウザの生成されたHTMLページに変更されずに表示されます。\fI<B>\fRは太字として解釈されません(コード・フォントになりません)。コード・フォントで同じ機能を実現するには、\fI{@code}\fRタグを使用します。 +.RE +.PP +@param \fIparameter\-name description\fR +.RS 4 +JDK 1\&.0で導入 +.sp +「パラメータ」セクションに、指定された\fIparameter\-name\fRの後に指定されたdescriptionを続けてパラメータを追加します。ドキュメンテーション・コメントを記述するときには、descriptionを複数行にわたって記述することもできます。このタグは、メソッド、コンストラクタ、またはクラスのドキュメンテーション・コメント内でのみ有効です。JavadocツールでのDocコメントの記述方法の@paramに関する項 +(http://www\&.oracle\&.com/technetwork/java/javase/documentation/index\-137868\&.html#@param)を参照してください。 +.sp +\fIparameter\-name\fRは、メソッドまたはコンストラクタでのパラメータの名前か、クラス、メソッドまたはコンストラクタの型パラメータの名前になります。山カッコでこのパラメータ名を囲み、型パラメータを使用することを指定します。 +.sp +クラスの型パラメータの例: +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl - @since 1.5 -.fl - -.fl -\fP -.fi -.LP -Java プラットフォームのソースコードの場合、このタグは、Java プラットフォーム API 仕様のバージョンを示します。その変更や機能がリファレンス実装に追加された時期を示すとは限りません。複数の @since タグを使用でき、複数の @author タグのように扱われます。プログラム要素が複数の API で使用される場合、複数のタグを使用できます。 -.LP -.TP 3 -@throws\ class\-name\ description -\f2@throws\fP タグと \f2@exception\fP タグは同義です。生成ドキュメントに「例外」小見出しを追加して、 \f2class\-name\fP および \f2description\fP のテキストを書き込みます。 \f2class\-name\fP は、そのメソッドからスローされる可能性のある例外の名前です。このタグは、メソッド、コンストラクタの doc コメント内でのみ有効です。このクラスが完全指定の名前で記述されていない場合、Javadoc ツールは、検索順序に従ってクラスを探します。同じまたは異なる例外の doc コメントで、複数の \f2@throws\fP タグを使用できます。 -.LP -すべてのチェック済み例外がドキュメント化されるようにするために、 \f2@throws\fP タグが throws 節内の例外用に存在しない場合は、@throws タグのあるドキュメントであるかのように、Javadoc ツールによって例外が HTML 出力に説明なしで自動的に追加されます。 -.LP -オーバーライドされるメソッド内で例外が明示的に宣言されている場合のみ、 \f2@throws\fP ドキュメンテーションがそのメソッドからサブクラスにコピーされます。インタフェースメソッドから実装メソッドにコピーされる場合も同様です。@throws にドキュメンテーションを継承させるには、{@inheritDoc} を使用できます。 -.LP -詳細については、 -.na -\f2@throws タグのドキュメント\fP @ -.fi -http://www.oracle.com/technetwork/java/javase/documentation/index\-137868.html#@exceptionを参照してください。 -.LP -.TP 3 -{@value\ package.class#field} -\f2{@value}\fP が静的フィールドの doc コメントで 引数なしで使用されている場合、その定数の値が表示されます。 -.nf -\f3 -.fl - /** -.fl - * The value of this constant is {@value}. -.fl - */ -.fl - public static final String SCRIPT_START = "<script>" -.fl - -.fl -\fP -.fi -.LP -任意のドキュメンテーションコメント内で引数 \f2package.class#field\fP ありで使用された場合は、その指定された定数の値が表示されます。 -.nf -\f3 -.fl - /** -.fl - * Evaluates the script starting with {@value #SCRIPT_START}. -.fl - */ -.fl - public String evalScript(String script) { -.fl - } -.fl - -.fl -\fP -.fi -.LP -引数 \f2package.class#field\fP は、@see 引数と同一の形式になります。ただし、メンバーが静的フィールドになければならない点が異なります。 -.LP -これらの定数での値は、 -.na -\f2定数フィールド値\fP @ -.fi -http://java.sun.com/javase/6/docs/api/constant\-values.htmlページにも表示されます。 -.LP -.TP 3 -@version\ version\-text -\-version オプションが使用されると、生成ドキュメントに [バージョン] 小見出しを追加し、指定された \f2version\-text\fP を書き込みます。このタグは、このコードが含まれるソフトウェアの現在のバージョン番号を保持するように意図されています。これに対し、@since は、このコードが導入されたバージョン番号を保持します。 \f2version\-text\fP には、特別な内部構造はありません。バージョンタグを使用できる場所を調べるには、「タグを使用できる場所」を参照してください。 -.LP -1 つのドキュメンテーションコメントに複数の \f2@version\fP タグを含めることができます。意味が失われない範囲内で、1 つの \f2@version\fP タグに 1 つのバージョン番号を指定することも、複数のバージョン番号を指定することもできます。前者の場合は、Javadoc ツールによって名前と名前の間にコンマ (\f2,\fP) と空白が挿入されます。後者の場合は、テキスト全体が、解析されることなく、生成ドキュメントにそのままコピーされます。したがって、コンマではなく、各言語に対応した名前区切り文字を使う必要があるときは、1 つのタグに複数の名前を指定してください。 -.LP -詳細については、 -.na -\f2@version タグのドキュメント\fP @ -.fi -http://www.oracle.com/technetwork/java/javase/documentation/index\-137868.html#@versionを参照してください。 -.RE -.SS -タグを使用できる場所 -.LP -ここでは、タグを使用できる場所について説明します。すべてのドキュメンテーションコメントで使用可能なタグは次のとおりです。 \f2@see\fP、 \f2@since\fP、 \f2@deprecated\fP、 \f2{@link}\fP、 \f2{@linkplain}\fP、および \f2{@docroot}\fP。 -.SS -概要のドキュメンテーションタグ -.LP -概要タグは、概要ページのドキュメンテーションコメントで使用できるタグです。このドキュメンテーションコメントは、通常 \f2overview.html\fP という名前のソースファイル内にあります。 ほかのドキュメンテーションコメントの場合と同様に、これらのタグは、主説明のあとで使う必要があります。 -.LP -\f3注\fP \- バージョン 1.2 では、概要ドキュメント内の \f2{@link}\fP タグにバグがあります。テキストは正しく表示されますが、リンクが設定されません。現在のところ、 \f2{@docRoot}\fP タグは、概要ドキュメント内では動作しません。 -.LP -\f3概要タグ\fP -.RS 3 -.TP 2 -o -\f2@see\fP -.TP 2 -o -\f2@since\fP -.TP 2 -o -\f2@author\fP -.TP 2 -o -\f2@version\fP -.TP 2 -o -\f2{@link}\fP -.TP 2 -o -\f2{@linkplain}\fP -.TP 2 -o -\f2{@docRoot}\fP -.RE -.SS -パッケージドキュメンテーションタグ -.LP -パッケージタグは、パッケージのドキュメンテーションコメントで使用できるタグです。このドキュメンテーションコメントは \f2package.html\fP または \f2package\-info.java\fP という名前のソースファイル内にあります。ここで使用できる \f2@serial\fP タグは、 \f2include\fP または \f2exclude\fP 引数が指定されたものだけです。 -.LP -\f3パッケージタグ\fP -.RS 3 -.TP 2 -o -\f2@see\fP -.TP 2 -o -\f2@since\fP -.TP 2 -o -\f2@serial\fP -.TP 2 -o -\f2@author\fP -.TP 2 -o -\f2@version\fP -.TP 2 -o -\f2{@link}\fP -.TP 2 -o -\f2{@linkplain}\fP -.TP 2 -o -\f2{@docRoot}\fP -.RE -.SS -クラスおよびインタフェースドキュメンテーションタグ -.LP -次に、クラスまたはインタフェースのドキュメンテーションコメントで使用できるタグを示します。ここで使用できる \f2@serial\fP タグは、 \f2include\fP または \f2exclude\fP 引数が指定されたものだけです。 -.LP -\f3クラスおよびインタフェースタグ\fP -.RS 3 -.TP 2 -o -\f2@see\fP -.TP 2 -o -\f2@since\fP -.TP 2 -o -\f2@deprecated\fP -.TP 2 -o -\f2@serial\fP -.TP 2 -o -\f2@author\fP -.TP 2 -o -\f2@version\fP -.TP 2 -o -\f2{@link}\fP -.TP 2 -o -\f2{@linkplain}\fP -.TP 2 -o -\f2{@docRoot}\fP -.RE -\f3次にクラスコメントの例を示します。\fP -.nf -\f3 -.fl /** -.fl - * A class representing a window on the screen. -.fl - * For example: -.fl - * <pre> -.fl - * Window win = new Window(parent); -.fl - * win.show(); -.fl - * </pre> -.fl - * -.fl - * @author Sami Shaio -.fl - * @version 1.13, 06/08/06 -.fl - * @see java.awt.BaseWindow -.fl - * @see java.awt.Button -.fl + * @param <E> Type of element stored in a list */ -.fl -class Window extends BaseWindow { -.fl - ... -.fl +public interface List<E> extends Collection<E> { } -.fl -\fP .fi -.SS -フィールドドキュメンテーションタグ -.LP -次に、フィールドのドキュメンテーションコメントで使用できるタグを示します。 -.LP -\f3フィールドタグ\fP -.RS 3 -.TP 2 -o -\f2@see\fP -.TP 2 -o -\f2@since\fP -.TP 2 -o -\f2@deprecated\fP -.TP 2 -o -\f2@serial\fP -.TP 2 -o -\f2@serialField\fP -.TP 2 -o -\f2{@link}\fP -.TP 2 -o -\f2{@linkplain}\fP -.TP 2 -o -\f2{@docRoot}\fP -.TP 2 -o -\f2{@value}\fP +.if n \{\ .RE -\f3次にフィールドコメントの例を示します。\fP +.\} +メソッドの型パラメータの例: +.sp +.if n \{\ +.RS 4 +.\} +.nf +/** + * @param string the string to be converted + * @param type the type to convert the string to + * @param <T> the type of the element + * @param <V> the value of the element + */ +<T, V extends T> V convert(String string, Class<T> type) { +} +.fi +.if n \{\ +.RE +.\} +.RE +.PP +@return \fIdescription\fR +.RS 4 +JDK 1\&.0で導入 +.sp +「戻り値」セクションを追加して、descriptionのテキストを書き込みます。このテキストでは、戻り値の型と、取り得る値の範囲について記述する必要があります。このタグは、メソッドのドキュメンテーション・コメントでのみ有効です。JavadocツールでのDocコメントの記述方法の@returnに関する項 +(http://www\&.oracle\&.com/technetwork/java/javase/documentation/index\-137868\&.html#@return)を参照してください。 +.RE +.PP +@see \fIreference\fR +.RS 4 +JDK 1\&.0で導入 +.sp +\fI「関連項目」\fR見出しを追加して、referenceを指すリンク、またはテキスト・エントリを書き込みます。1つのドキュメンテーション・コメントには任意の数の\fI@see\fRタグを含めることができますが、それらはすべて同じ見出しの下にグループ化されます。\fI@see\fRタグには、3つのタイプの形式があります。この形式が最も一般的です。このタグは、すべてのドキュメンテーション・コメント、つまり概要、パッケージ、クラス、インタフェース、コンストラクタ、メソッド、またはフィールドで有効です。パッケージ、クラス、またはメンバーに対するインライン・リンクを文中に挿入する方法は、\fI{@link}\fRを参照してください。 +.sp +\fB形式1\fR。@see +\fIstring\fRタグ形式は、\fIstring\fRのテキスト・エントリを追加します。リンクは生成されません。stringは、書籍またはURLではアクセスできない情報の参照先です。\fIjavadoc\fRコマンドは、最初の文字として二重引用符(")を検索して、この形式を前述の形式と区別します。たとえば、\fI@see "The Java Programming Language"\fRは次のテキストを生成します。 +.sp +\fB関連項目\fR: +.sp +"The Java Programming Language" +.sp +\fB形式2\fR。\fI@see <a href="URL#value">label</a>\fR形式は、\fIURL#value\fRにより定義されたリンクを追加します。\fIURL#value\fRパラメータは、相対URLまたは絶対URLです。\fIjavadoc\fRコマンドは、最初の文字として「より小さい」記号(\fI<\fR)を検索して、この形式を他の形式と区別します。たとえば、\fI@see <a href="spec\&.html#section">Java Spec</a>\fRは次のリンクを生成します。 +.sp +\fB関連項目\fR: +.sp +Java Spec +.sp +\fB形式3\fR。\fI@see package\&.class#member label\fR形式は、表示テキスト・ラベルとともにリンクを追加します。このラベルは参照されているJava言語の指定された名前のドキュメントを指し示します。ラベルはオプションです。ラベルを省略した場合は、表示テキストのかわりに、名前が適切に短縮されて表示されます。\fI\-noqualifier\fRオプションを使用すると、この表示テキストからパッケージ名が全体的に削除されます。ラベルは、自動生成される表示テキストとは異なる表示テキストにする場合に使用します。「名前が表示される方法」を参照してください。 +.sp +Java SE 1\&.2だけは、ラベルではなく名前が\fI<code>\fR +HTMLタグ内に自動的に表示されます。Java SE 1\&.2\&.2からは、ラベルを使用するかしないかにかかわらず、\fI<code>\fRタグは常に表示テキストを囲むかたちで含まれます。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fIpackage\&.class#member\fRには、参照されている任意の有効なプログラム要素の名前を指定します。つまり、パッケージ、クラス、インタフェース、コンストラクタ、メソッド、またはフィールドの名前です。ただし、メンバー名の前の文字は、シャープ記号(\fI#\fR)にする必要があります。classは、任意のトップレベルまたはネストされたクラスか、インタフェースを表します。memberは、任意のコンストラクタ、メソッドまたはフィールドを表します(ネストされたクラスまたはインタフェースではありません)。この名前が、ドキュメント化されるクラスに含まれている場合、\fIjavadoc\fRコマンドは、その名前へのリンクを作成します。外部参照クラスへのリンクを作成するには、\fI\-link\fRオプションを使用します。参照クラスに属していない名前のドキュメントを参照するには、他の2つの\fI@see\fRタグ形式のどちらかを使用します。「名前の指定」を参照してください。 +.sp +\fB注意:\fR +外部参照クラスは、コマンドラインで\fIjavadoc\fRコマンドに渡されないクラスです。生成ドキュメント内で外部参照クラスにリンクしている箇所は、外部参照または外部リンクと呼ばれます。たとえば、\fIjava\&.awt package\fRに対してのみ\fIjavadoc\fRコマンドを実行した場合、\fIObject\fRなどの\fIjava\&.lang\fR内のすべてのクラスが外部参照クラスになります。\fI\-link\fRおよび\fI\-linkoffline\fRオプションを使用して、外部参照クラスへリンクします。外部参照クラスのソース・コメントは\fIjavadoc\fRコマンドの実行には使用できません。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fIlabel\fRは、省略可能なテキストで、リンクのラベルとして表示されます。ラベルには空白を含めることができます。\fIlabel\fRを省略すると、\fIpackage\&.class\&.member\fRが、現在のクラスおよびパッケージに応じて適切に短縮されて表示されます。「名前が表示される方法」を参照してください。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +空白文字が、\fIpackage\&.class#member\fRと\fIlabel\fRの間の区切り文字になります。カッコの内側の空白文字はラベルの先頭とは解釈されないため、メソッドのパラメータ間に空白文字を入れてもかまいません。 +.RE +.sp +この例では、\fI@see\fRタグ(\fICharacter\fRクラス内)が、\fIString\fRクラスのequalsメソッドを参照しています。タグには、名前\fIString#equals(Object)\fRとラベル\fIequals\fRの両方の引数が含まれています。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +/** + * @see String#equals(Object) equals + */ +.fi +.if n \{\ +.RE +.\} +標準ドックレットは、次のようなHTMLを生成します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +<dl> +<dt><b>See Also:</b> +<dd><a href="\&.\&./\&.\&./java/lang/String#equals(java\&.lang\&.Object)"><code>equals<code></a> +</dl> +.fi +.if n \{\ +.RE +.\} +前述のコードは、ブラウザに次のように表示され、ラベルは表示リンク・テキストになっています。 +.sp +\fB関連項目\fR: +.sp +equals +.RE +名前の指定.PP +この\fIpackage\&.class#member\fRという名前は、\fIjava\&.lang\&.String#toUpperCase()\fRのような完全修飾名にすることも、\fIString#toUpperCase()\fRや\fI#toUpperCase()\fRのような非完全修飾名にすることもできます。名前が完全修飾より短い場合は、\fIjavadoc\fRコマンドは、標準のJavaコンパイラの検索順序を使用して探します。「@seeタグの検索順序」を参照してください。名前は、メソッド引数の間など、カッコ内のスペースを含めることができます。部分的に修飾した短い名前を指定することの利点は、入力する文字数が減ることや、ソース・コードが読みやすくなることです。次のリストに様々な形式の名前を示します。ここで、\fIClass\fRにはクラスまたはインタフェースを、Typeにはクラス、インタフェース、配列、またはプリミティブを、methodにはメソッドまたはコンストラクタを、それぞれ指定できます。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\fBTypical forms for\fR\fB @see package\&.class#member\fR +\fBReferencing a member of the current class\fR +@see #field +@see #method(Type, Type,\&.\&.\&.) +@see #method(Type argname, Type argname,\&.\&.\&.) +@see #constructor(Type, Type,\&.\&.\&.) +@see #constructor(Type argname, Type argname,\&.\&.\&.) + +\fBReferencing another class in the current or imported packages\fR +@see Class#field +@see Class#method(Type, Type,\&.\&.\&.) +@see Class#method(Type argname, Type argname,\&.\&.\&.) +@see Class#constructor(Type, Type,\&.\&.\&.) +@see Class#constructor(Type argname, Type argname,\&.\&.\&.) +@see Class\&.NestedClass +@see Class + +\fBReferencing an element in another package (fully qualified)\fR +@see package\&.Class#field +@see package\&.Class#method(Type, Type,\&.\&.\&.) +@see package\&.Class#method(Type argname, Type argname,\&.\&.\&.) +@see package\&.Class#constructor(Type, Type,\&.\&.\&.) +@see package\&.Class#constructor(Type argname, Type argname,\&.\&.\&.) +@see package\&.Class\&.NestedClass +@see package\&.Class +@see package +.fi +.if n \{\ +.RE +.\} +.PP +前のリストに関するメモ: +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +最初のタイプの形式(パッケージとクラスを省略)の場合、\fIjavadoc\fRコマンドは、現在のクラスの階層のみを検索します。つまり、現在のクラスかインタフェース、そのスーパークラスかスーパーインタフェース、またはその外側を囲んでいるクラスかインタフェースからメンバーを検索します(検索項目1\(en3)。現在のパッケージの他の部分や、他のパッケージは検索しません(検索項目4\(en5)。「@seeタグの検索順序」を参照してください。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +メソッドまたはコンストラクタの入力時に、\fIgetValue\fRのようにカッコなしの名前を使用した場合、同じ名前のフィールドが存在していなければ、\fIjavadoc\fRコマンドはそのメソッドへのリンクを作成します。このメソッドがオーバーロードされている場合、\fIjavadoc\fRコマンドは、検索で最初に見つかったメソッドにリンクします。結果は前もって特定できません。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +ネストされたクラスは、すべての形式について、\fIouter\&.inner\fRとして指定する必要があります。単純に\fIinner\fRとはしないでください。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +すでに述べたように、クラスとメンバーとの間の区切り文字としては、ドット(\fI\&.\fR)ではなくシャープ記号(\fI#\fR)を使用します。このように指定すると、\fIjavadoc\fRコマンドは、あいまいさを解決できます。ドットは、クラス、ネストされたクラス、パッケージ、およびサブパッケージを区切るためにも使用されるからです。ただし、\fIjavadoc\fRコマンドでは、あいまいさがなければドットは正しく解析されますが、警告は表示されます。 +.RE +@seeタグの検索順序.PP +\fIjavadoc\fRコマンドは、ソース・ファイル、パッケージ・ファイル、概要ファイルに表示される\fI@see\fRタグを処理します。後者の2つのファイルでは、完全修飾の名前を\fI@see\fRタグに指定する必要があります。ソース・ファイルでは、完全修飾の名前、または部分修飾の名前を指定できます。 +.PP +次に、\fI@see\fRタグの検索順序を示します。 +.sp +.RS 4 +.ie n \{\ +\h'-04' 1.\h'+01'\c +.\} +.el \{\ +.sp -1 +.IP " 1." 4.2 +.\} +現在のクラスまたはインタフェース。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04' 2.\h'+01'\c +.\} +.el \{\ +.sp -1 +.IP " 2." 4.2 +.\} +外側を囲んでいるクラスとインタフェース(最も近いものから検索)。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04' 3.\h'+01'\c +.\} +.el \{\ +.sp -1 +.IP " 3." 4.2 +.\} +スーパークラスとスーパーインタフェース(最も近いものから検索)。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04' 4.\h'+01'\c +.\} +.el \{\ +.sp -1 +.IP " 4." 4.2 +.\} +現在のパッケージ。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04' 5.\h'+01'\c +.\} +.el \{\ +.sp -1 +.IP " 5." 4.2 +.\} +インポートされているパッケージ、クラス、およびインタフェース(\fIimport\fR文の順序に従って検索)。 +.RE +.PP +\fIjavadoc\fRコマンドは、各クラスについて項目1\-3を再帰的に適用しながら、一致する名前が見つかるまで検索を続けます。つまり、まず現在のクラスを検索し、次にその外側を囲んでいるクラスEを検索した後、Eのスーパークラスを検索してから、Eを囲んでいるクラスを検索します。項目4と5では、\fIjavadoc\fRコマンドが1つのパッケージ内のクラスまたはインタフェースを検索する順序は決まっていません(その順序は、個々のコンパイラによって異なります)。項目5では、\fIjavadoc\fRコマンドは、\fIjava\&.lang\fRを検索します。このパッケージは、すべてのプログラムに自動的にインポートされるからです。 +.PP +\fIjavadoc\fRコマンドは、完全修飾でないソース・ファイルで\fI@see\fRタグを見つけると、Javaコンパイラと同じ順序で指定された名前を検索します(ただし、\fIjavadoc\fRコマンドは、特定の名前空間のあいまいさを検出しません。これは、ソース・コードにこれらのエラーが存在していないことを前提としているためです)。この検索順序は、Java言語仕様で正式に定義されています。\fIjavadoc\fRコマンドは、関連するクラスとパッケージ、およびインポートされたクラスとパッケージのすべてからその名前を検索します。具体的には、次の順序で検索します。 +.sp +.RS 4 +.ie n \{\ +\h'-04' 1.\h'+01'\c +.\} +.el \{\ +.sp -1 +.IP " 1." 4.2 +.\} +現在のクラスまたはインタフェース。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04' 2.\h'+01'\c +.\} +.el \{\ +.sp -1 +.IP " 2." 4.2 +.\} +外側を囲んでいるクラスとインタフェース(最も近いものから検索)。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04' 3.\h'+01'\c +.\} +.el \{\ +.sp -1 +.IP " 3." 4.2 +.\} +スーパークラスとスーパーインタフェース(最も近いものから検索)。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04' 4.\h'+01'\c +.\} +.el \{\ +.sp -1 +.IP " 4." 4.2 +.\} +現在のパッケージ。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04' 5.\h'+01'\c +.\} +.el \{\ +.sp -1 +.IP " 5." 4.2 +.\} +インポートされているパッケージ、クラス、およびインタフェース(\fIimport\fR文の順序に従って検索)。 +.RE +.PP +\fIjavadoc\fRコマンドは、必ずしもサブクラスを検索するとは限りません。また、実行中に他のパッケージのドキュメントが生成される場合でも、他のパッケージを検索しません。たとえば、\fI@see\fRタグが\fIjava\&.awt\&.event\&.KeyEvent\fRクラス内に含まれていて、\fIjava\&.awt package\fR内のある名前を参照していても、そのクラスがインポートしないかぎり\fIjavadoc\fRコマンドはそのパッケージを検索しません。 +名前が表示される方法.PP +\fIlabel\fRを省略すると、\fIpackage\&.class\&.member\fRが表示されます。一般に、これは現在のクラスおよびパッケージに応じて適切に短縮されます。短縮されるとは、\fIjavadoc\fRコマンドにより必要最小限の名前のみが表示されるということです。たとえば、\fIString\&.toUpperCase()\fRメソッドに、同じクラスのメンバーへの参照と他のクラスのメンバーへの参照が含まれている場合、クラス名が表示されるのは後者のケースのみです(次のリストを参照)。パッケージ名を全体的に削除するには、\fI\-noqualifier\fRオプションを使用します。 +.RS 4 +\fB参照のタイプ\fR: \fI@see\fRタグは同じクラス、同じパッケージのメンバーを参照します +.RE +.RS 4 +\fB例\fR: \fI@see String#toLowerCase()\fR +.RE +.RS 4 +\fB表示\fR: \fItoLowerCase()\fR \- パッケージおよびクラス名を省略します +.RE +.RS 4 +.RE +.RS 4 +\fB参照のタイプ\fR: \fI@see\fRタグは別のクラス、同じパッケージのメンバーを参照します +.RE +.RS 4 +\fB例\fR: \fI@see Character#toLowerCase(char)\fR +.RE +.RS 4 +\fB表示\fR: \fICharacter\&.toLowerCase(char)\fR \- パッケージ名を省略し、クラス名を含みます +.RE +.RS 4 +.RE +.RS 4 +\fB参照のタイプ\fR: \fI@see\fRタグは異なるクラス、異なるパッケージのメンバーを参照します +.RE +.RS 4 +\fB例\fR: \fI@see java\&.io\&.File#exists()\fR +.RE +.RS 4 +\fB表示\fR: \fIjava\&.io\&.File\&.exists()\fR \- パッケージおよびクラス名を含みます +.RE +.RS 4 +.RE +@seeタグの例.PP +右側のコメントは、\fI@see\fRタグが\fIjava\&.applet\&.Applet\fRなどの別のパッケージのクラス内にある場合に、名前がどのように表示されるかを示しています。JavadocツールでのDocコメントの記述方法の@seeに関する項 +(http://www\&.oracle\&.com/technetwork/java/javase/documentation/index\-137868\&.html#@see)を参照してください。 +.sp +.if n \{\ +.RS 4 +.\} +.nf + See also: +@see java\&.lang\&.String // String +@see java\&.lang\&.String The String class // The String class +@see String // String +@see String#equals(Object) // String\&.equals(Object) +@see String#equals // String\&.equals(java\&.lang\&.Object) +@see java\&.lang\&.Object#wait(long) // java\&.lang\&.Object\&.wait(long) +@see Character#MAX_RADIX // Character\&.MAX_RADIX +@see <a href="spec\&.html">Java Spec</a> // Java Spec +@see "The Java Programming Language" // "The Java Programming Language" +.fi +.if n \{\ +.RE +.\} +.PP +\fB注意:\fR +\fI@se\fR\fIe\fRタグを拡張してドキュメント化されないクラスにリンクするには、\fI\-link\fRオプションを使用します。 +.PP +@serial \fIfield\-description\fR | include | exclude +.RS 4 +JDK 1\&.2で導入 +.sp +デフォルトの直列化可能フィールドのドキュメンテーション・コメントで使用します。クラスの直列化可能なフィールドおよびデータの文書化 +(http://docs\&.oracle\&.com/javase/8/docs/platform/serialization/spec/serial\-arch\&.html#5251)を参照してください +.sp +Oracleの直列化された形式の仕様にクラスを含める基準 +(http://www\&.oracle\&.com/technetwork/java/javase/documentation/serialized\-criteria\-137781\&.html)も参照してください +.sp +\fIfield\-description\fR(省略可能)では、フィールドの意味を説明し、取り得る値のリストを示す必要があります。必要な場合は、複数の行に渡って説明を記述できます。標準ドックレットは、この情報を、直列化された形式ページに追加します。相互参照ページを参照してください。 +.sp +クラスを直列化した後に直列化可能フィールドをクラスに追加した場合、主説明に、追加したバージョンを識別する文を追加する必要があります。 +.sp +\fIinclude\fRおよび\fIexclude\fR引数は、直列化された形式ページにクラスまたはパッケージを含めるか除外するかを示します。次のように機能します。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fISerializable\fRを実装しているpublicまたはprotectedクラスは、そのクラス(またはそのクラスが属するパッケージ)が\fI@serial exclude\fRタグでマークされていないかぎり、含められます。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fISerializable\fRを実装しているprivateまたはpackage\-privateクラスは、そのクラス(またはそのクラスが属するパッケージ)が\fI@serial include\fRタグでマークされていないかぎり、除外されます。 +.RE +.sp +たとえば、\fIjavax\&.swing\fRパッケージはpackage\&.htmlまたはpackage\-info\&.java内で\fI@serial\fR +\fIexclude\fRタグでマークされています。publicクラス\fIjava\&.security\&.BasicPermission\fRは\fI@serial exclude\fRタグでマークされています。package\-privateクラス\fIjava\&.util\&.PropertyPermissionCollection\fRは\fI@serial include\fRタグでマークされています。 +.sp +クラス・レベルの\fI@serial\fRタグはパッケージ・レベルの\fI@serial\fRタグをオーバーライドします。 +.RE +.PP +@serialData \fIdata\-description\fR +.RS 4 +JDK 1\&.2で導入 +.sp +データの説明値を使用して、直列化された形式でのデータの型と順序をドキュメント化します。このデータには、\fIwriteObject\fRメソッドによって書き込まれる省略可能なデータ、および\fIExternalizable\&.writeExternal\fRメソッドによって書き込まれるすべてのデータ(ベース・クラスを含む)が含まれます。 +.sp +\fI@serialData\fRタグは、\fIwriteObject\fR、\fIreadObject\fR、\fIwriteExternal\fR、\fIreadExternal\fR、\fIwriteReplace\fRおよび\fIreadResolve\fRメソッドのドキュメンテーション・コメントで使用できます。 +.RE +.PP +@serialField \fIfield\-name\fR \fIfield\-type\fR \fIfield\-description\fR +.RS 4 +JDK 1\&.2で導入 +.sp +\fISerializable\fRクラスの\fIserialPersistentFields\fRメンバーの\fIObjectStreamField\fRコンポーネントをドキュメント化します。\fIObjectStreamField\fRコンポーネントごとに1つの\fI@serialField\fRタグを使用します。 +.RE +.PP +@since \fIsince\-text\fR +.RS 4 +JDK 1\&.1で導入 +.sp +生成ドキュメントに、指定された\fIsince\-text\fRの値の\fI「導入されたバージョン」\fR見出しを追加します。このテキストには、特別な内部構造はありません。このタグは、すべてのドキュメンテーション・コメント、つまり概要、パッケージ、クラス、インタフェース、コンストラクタ、メソッド、またはフィールドで有効です。このタグは、特定の変更または機能が、\fIsince\-text\fRの値によって指定されたソフトウェア・リリース以降、存在していることを意味します。たとえば、\fI@since 1\&.5\fRです。 +.sp +Javaプラットフォームのソース・コードの場合、\fI@since\fRタグは、JavaプラットフォームAPI仕様のバージョンを示します。ソース・コードがリファレンス実装に追加された時期を示すとは限りません。複数の\fI@since\fRタグを使用でき、複数の\fI@author\fRタグのように扱われます。プログラム要素が複数のAPIで使用される場合、複数のタグを使用できます。 +.RE +.PP +@throws \fIclass\-name\fR \fIdescription\fR +.RS 4 +JDK 1\&.2で導入 +.sp +\fI@exception\fRタグと同じ動作をします。JavadocツールでのDocコメントの記述方法の@throwsに関する項 +(http://www\&.oracle\&.com/technetwork/java/javase/documentation/index\-137868\&.html#@exception)を参照してください +.sp +\fI@throws\fRタグは、生成ドキュメントに\fIThrows\fR小見出しを追加して、\fIclass\-name\fRおよび\fIdescription\fRテキストを書き込みます。\fIclass\-name\fRは、そのメソッドからスローされる可能性のある例外の名前です。このタグは、メソッド、コンストラクタのドキュメンテーション・コメント内でのみ有効です。このクラスが完全指定の名前で記述されていない場合、\fIjavadoc\fRコマンドは、検索順序に従ってクラスを探します。複数の\fI@throws\fRタグを、同じ例外または違う例外の指定したドキュメンテーション・コメントで使用できます。「@seeタグの検索順序」を参照してください。 +.sp +すべてのチェック済例外がドキュメント化されるようにするために、\fI@throws\fRタグがthrows節内の例外用に存在しない場合は、\fI@throws\fRタグでドキュメント化されたかのように、\fIjavadoc\fRコマンドによって例外がHTML出力に説明なしで追加されます。 +.sp +オーバーライドされるメソッド内で例外が明示的に宣言されている場合のみ、\fI@throws\fRのドキュメントがそのメソッドからサブクラスにコピーされます。インタフェース・メソッドから実装メソッドにコピーされる場合も同様です。\fI{@inheritDoc}\fRタグを使用して、\fI@throws\fRタグがドキュメンテーションを継承するように強制できます。 +.RE +.PP +{@value \fIpackage\&.class#field\fR} +.RS 4 +JDK 1\&.4で導入 +.sp +定数の値を表示します。\fI{@value}\fRタグが静的フィールドのドキュメンテーション・コメントで引数なしで使用されている場合、その定数の値を表示します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +/** + * The value of this constant is {@value}\&. + */ +public static final String SCRIPT_START = "<script>" +.fi +.if n \{\ +.RE +.\} +任意のドキュメンテーション・コメント内で引数\fIpackage\&.class#field\fRありで使用された場合、\fI{@value}\fRタグは指定された定数の値を表示します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +/** + * Evaluates the script starting with {@value #SCRIPT_START}\&. + */ +public String evalScript(String script) {} +.fi +.if n \{\ +.RE +.\} +引数\fIpackage\&.class#field\fRは、\fI@see\fRタグ引数と同一の形式になります。ただし、メンバーは静的フィールドである必要があります。 +.sp +これらの定数の値は「定数フィールド値」 +(http://docs\&.oracle\&.com/javase/8/docs/api/constant\-values\&.html)にも表示されます +.RE +.PP +@version \fIversion\-text\fR +.RS 4 +JDK 1\&.0で導入 +.sp +\fI\-version\fRオプションが使用されている場合、生成ドキュメントに\fI「バージョン」\fR小見出しを追加して、指定された\fIversion\-text\fRの値を書き込みます。このタグはこのコードが含まれるソフトウェアの現在のリリース番号を保持するためのものであるのに対し、\fI@since\fRタグは、このコードが導入されたリリース番号を保持します。\fIversion\-text\fRの値には、特別な内部構造はありません。JavadocツールでのDocコメントの記述方法の@versionに関する項 +(http://www\&.oracle\&.com/technetwork/java/javase/documentation/index\-137868\&.html#@version)を参照してください +.sp +1つのドキュメンテーション・コメントに複数の\fI@version\fRタグを含めることができます。必要に応じて、1つの\fI@version\fRタグに1つのリリース番号を指定することも、複数のリリース番号を指定することもできます。前者の場合は、\fIjavadoc\fRコマンドによって名前と名前の間にカンマ(,)と空白文字が挿入されます。後者の場合は、テキスト全体が解析されることなく、生成ドキュメントにコピーされます。したがって、カンマではなく、各言語に対応した名前区切り文字を使用する必要があるときに、1行に複数の名前を指定できます。 +.RE +.SH "タグを使用できる場所" +.PP +ここでは、タグを使用できる場所について説明します。次のタグがすべてのドキュメンテーション・コメントで使用できます。\fI@see\fR、\fI@since\fR、\fI@deprecated\fR、\fI{@link}\fR、\fI{@linkplain}\fRおよび\fI{@docroot}\fR。 +.SS "概要タグ" +.PP +概要タグは、概要ページのドキュメンテーション・コメントで使用できるタグです(このドキュメンテーション・コメントは、通常overview\&.htmlという名前のソース・ファイル内にあります)。他のドキュメンテーション・コメントの場合と同様に、これらのタグは、主説明の後で使用する必要があります。 +.PP +\fB注意:\fR +Java SE 1\&.2では、概要ドキュメント内の\fI{@link}\fRタグに不具合があります。テキストは正しく表示されますが、リンクが設定されません。現在のところ、\fI{@docRoot}\fRタグは、概要ドキュメント内では機能しません。 +.PP +概要タグは、次のとおりです。 +.PP +@see reference || @since since\-text || @serialField field\-name field\-type field\-description || @author name\-text || @version version\-text || {@link package\&.class#member label} || {@linkplain package\&.class#member label} || {@docRoot} || +.SS "パッケージ・タグ" +.PP +パッケージ・タグは、パッケージのドキュメンテーション・コメントで使用できるタグで、ドキュメンテーション・コメントはpackage\&.htmlまたはpackage\-info\&.javaという名前のソース・ファイル内にあります。ここで使用できる\fI@serial\fRタグは、\fIinclude\fRまたは\fIexclude\fR引数を指定したもののみです。 +.PP +パッケージ・タグは、次のとおりです。 +.PP +@see reference || @since since\-text || @serial field\-description | include | exclude || @author name\-text || @version version\-text || {@linkplain package\&.class#member label} || {@linkplain package\&.class#member label} || {@docRoot} || +.SS "クラスおよびインタフェース・タグ" +.PP +次に、クラスまたはインタフェースのドキュメンテーション・コメントで使用できるタグを示します。\fI@serial\fRタグは、\fIinclude\fRまたは\fIexclude\fR引数を指定して、クラスまたはインタフェースのドキュメンテーション内でのみ使用できます。 +.PP +@see reference || @since since\-text || @deprecated deprecated\-text || @serial field\-description | include | exclude || @author name\-text || @version version\-text || {@link package\&.class#member label} || {@linkplain package\&.class#member label} || {@docRoot} || +.PP +クラス・コメントの例: +.sp +.if n \{\ +.RS 4 +.\} +.nf +/** + * A class representing a window on the screen\&. + * For example: + * <pre> + * Window win = new Window(parent); + * win\&.show(); + * </pre> + * + * @author Sami Shaio + * @version 1\&.13, 06/08/06 + * @see java\&.awt\&.BaseWindow + * @see java\&.awt\&.Button + */ +class Window extends BaseWindow { + \&.\&.\&. +} +.fi +.if n \{\ +.RE +.\} +.SS "フィールド・タグ" +.PP +これらのタグは、フィールドに表示できます。 +.PP +@see reference || @since since\-text || @deprecated deprecated\-text || @serial field\-description | include | exclude || @serialField field\-name field\-type field\-description || {@link package\&.class#member label} || {@linkplain package\&.class#member label} || {@docRoot} || {@value package\&.class#field} +.PP +フィールド・コメントの例: +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl /** -.fl - * The X\-coordinate of the component. -.fl + * The X\-coordinate of the component\&. * -.fl * @see #getLocation() -.fl */ -.fl int x = 1263732; -.fl -\fP .fi -.SS -コンストラクタおよびメソッドドキュメンテーションタグ -.LP -次に、コンストラクタまたはメソッドのドキュメンテーションコメントで使用できるタグを示します。ただし、 \f2@return\fP はコンストラクタでは使用できず、 \f2{@inheritDoc}\fP には特定の制限があります。 \f2@serialData\fP タグは特定の直列化メソッドの doc コメントでのみ使用できます。 -.LP -\f3メソッドおよびコンストラクタタグ\fP -.RS 3 -.TP 2 -o -\f2@see\fP -.TP 2 -o -\f2@since\fP -.TP 2 -o -\f2@deprecated\fP -.TP 2 -o -\f2@param\fP -.TP 2 -o -\f2@return\fP -.TP 2 -o -\f2@throws\fP と \f2@exception\fP -.TP 2 -o -\f2@serialData\fP -.TP 2 -o -\f2{@link}\fP -.TP 2 -o -\f2{@linkplain}\fP -.TP 2 -o -\f2{@inheritDoc}\fP -.TP 2 -o -\f2{@docRoot}\fP +.if n \{\ .RE -\f3次にメソッドのドキュメンテーションコメントの例を示します。\fP +.\} +.SS "コンストラクタとメソッド・タグ" +.PP +次に、コンストラクタまたはメソッドのドキュメンテーション・コメントで使用できるタグを示します。ただし、\fI@return\fRはコンストラクタでは使用できず、 +\fI{@inheritDoc}\fRには制限があります。 +.PP +@see reference || @since since\-text || @deprecated deprecated\-text || @param parameter\-name description || @return description || @throws class\-name description || @exception class\-name description || @serialData data\-description || {@link package\&.class#member label} || {@linkplain package\&.class#member label} || {@inheritDoc} || {@docRoot} +.PP +\fB注意:\fR +\fI@serialData\fRタグは、\fIwriteObject\fR、\fIreadObject\fR、\fIwriteExternal\fR、\fIreadExternal\fR、\fIwriteReplace\fRおよび\fIreadResolve\fRメソッドのドキュメンテーション・コメントでのみ使用できます。 +.PP +メソッド・コメントの例: +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl - /** -.fl - * Returns the character at the specified index. An index -.fl - * ranges from <code>0</code> to <code>length() \- 1</code>. -.fl +/** + * Returns the character at the specified index\&. An index + * ranges from <code>0</code> to <code>length() \- 1</code> * -.fl - * @param index the index of the desired character. -.fl - * @return the desired character. -.fl + * @param index the index of the desired character\&. + * @return the desired character\&. * @exception StringIndexOutOfRangeException -.fl * if the index is not in the range <code>0</code> -.fl - * to <code>length()\-1</code>. -.fl - * @see java.lang.Character#charValue() -.fl + * to <code>length()\-1</code> + * @see java\&.lang\&.Character#charValue() */ -.fl public char charAt(int index) { -.fl - ... -.fl + \&.\&.\&. } -.fl -\fP .fi +.if n \{\ +.RE +.\} .SH "オプション" -.LP -javadoc ツールは、ドックレットを使って出力を決定します。Javadoc ツールは、\-doclet オプションでカスタムドックレットが指定されている場合以外は、デフォルトの標準ドックレットを使います。Javadoc ツールには、任意のドックレットとともに使用できるコマンド行オプションがあります。これらのオプションについては、このあとの「Javadoc オプション」で説明します。標準ドックレットでは、このほかに、いくつかの追加のコマンド行オプションが提供されます。これらのオプションについては、そのあとの「標準ドックレットが提供するオプション」で説明します。どのオプション名も、大文字と小文字が区別されません。ただし、オプションの引数では、大文字と小文字が区別されます。 -.LP +.PP +\fIjavadoc\fRコマンドは、ドックレットを使用して出力を決定します。\fIjavadoc\fRコマンドは、\fI\-doclet\fRオプションでカスタム・ドックレットが指定されている場合以外は、デフォルトの標準ドックレットを使用します。\fIjavadoc\fRコマンドには、任意のドックレットとともに使用できるコマンドライン・オプションがあります。これらのオプションについては、Javadocオプションで説明します。標準ドックレットでは、この他に、いくつかの追加のコマンドライン・オプションが提供されます。これらのオプションについては、標準ドックレットのオプションで説明します。どのオプション名も、大文字と小文字が区別されません。ただし、オプションの引数では、大文字と小文字が区別されます。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +Javadocオプションも参照してください +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +標準ドックレットのオプションも参照してください +.RE +.PP オプションは次のとおりです。 -.LP -.TS -.if \n+(b.=1 .nr d. \n(.c-\n(c.-1 -.de 35 -.ps \n(.s -.vs \n(.vu -.in \n(.iu -.if \n(.u .fi -.if \n(.j .ad -.if \n(.j=0 .na -.. +.PP +\-1\&.1 || \-author || \-bootclasspath classpathlist || \-bottom text || \-breakiterator || \-charset name || \-classpath classpathlist || \-d directory || \-docencoding name || \-docfilesubdirs || \-doclet class || \-docletpath classpathlist || \-doctitle title || \-encoding || \-exclude packagename1:packagename2:\&.\&.\&. || \-excludedocfilessubdir name1:name2 || \-extdirs dirist || \-footer footer || \-group groupheading packagepattern:packagepattern || \-header header || \-help || \-helpfile path\efilename || \-Jflag || \-keywords || \-link extdocURL || \-linkoffline extdocURL packagelistLoc || \-linksource || \-locale language_country_variant || \-nocomment || \-nodeprecated || \-nodeprecatedlist || \-nohelp || \-noindex || \-nonavbar || \-noqualifier all | packagename1:packagename2\&.\&.\&. || \-nosince || \-notimestamp || \-notree || +\fI\-overview path/filename || \fR\-package || \-private || \-protected || \-public || \-quiet || \-serialwarn || \-source release || \-sourcepath sourcepathlist || \-sourcetab tablength || \-splitindex || +\fI\-stylesheet path/filename || \fR\-subpackages package1:package2:\&.\&.\&. || \-tag tagname:Xaoptcmf:"taghead" || \-taglet class || \-tagletpath tagletpathlist || \-title title || \-top || \-use || \-verbose || \-version || \-windowtitle title +.PP +次のオプションは、すべてのドックレットに使用可能なコアのJavadocオプションです。標準ドックレットでは、ドックレットの他の部分を提供します。\fI\-bootclasspath\fR、\fI\-breakiterator\fR、\fI\-classpath\fR、\fI\-doclet\fR、\fI\-docletpath\fR、\fI\-encoding\fR、\-\fIexclude\fR、\fI\-extdirs\fR、\fI\-help\fR、\fI\-locale\fR、\fI\-\fR\fIoverview\fR、\fI\-package\fR、\fI\-private\fR、\fI\-protected\fR、\fI\-public\fR、\fI\-quiet\fR、\fI\-source\fR、\fI\-sourcepath\fR、\fI\-subpackages\fRおよび\fI\-verbose\fR。 +.SS "Javadocオプション" +.PP +\-overview \fIpath/filename \fR +.RS 4 + +\fIjavadoc\fRコマンドに対して、\fIpath/filename \fRで指定されたソース・ファイルから概要ドキュメント用のテキストを取得し、そのテキストを概要ページ(overview\-summary\&.html)に配置するように指定します。\fIpath/filename\fRは、現在のディレクトリからの相対パスです。 +.sp +\fIfilename\fRの値で任意の名前を使用し、pathで任意の配置先を指定できますが、通常はoverview\&.htmlという名前を付け、ソース・ツリー内の最上位パッケージ・ディレクトリを含むディレクトリに配置します。この場所に配置すると、パッケージをドキュメント化するときにpathを指定する必要がなくなります。これは、\fI\-sourcepath\fRオプションによってこのファイルが指し示されるからです。 +.sp +たとえば、\fIjava\&.lang\fRパッケージのソース・ツリーが/src/classes/java/lang/の場合、概要ファイルを/src/classes/overview\&.htmlに配置できます +.sp +実際の例を参照してください。 +.sp +\fIpath/filename\fRで指定するファイルについては、概要コメント・ファイルを参照してください。 +.sp +概要ページが作成されるのは、\fIjavadoc\fRコマンドに複数のパッケージ名を渡した場合のみです。詳細は、HTMLフレームを参照してください。概要ページのタイトルは、\fI\-doctitle\fRによって設定されます。 +.RE +.PP +\-Xdoclint:(all|none|[\-]\fI<group>\fR) +.RS 4 +不正な参照、アクセシビリティの欠落およびJavadocコメントの不足の警告をレポートし、無効なJavadoc構文および不足しているHTMLタグのエラーをレポートします。 +.sp +このオプションにより、\fIjavadoc\fRコマンドは生成された出力に含まれるすべてのドキュメント・コメントをチェックします。通常どおり、標準オプション\fI\-public\fR、\fI\-protected\fR、\fI\-package\fRおよび\fI\-private\fRで生成された出力に含む項目を選択できます。 +.sp +\fI\-Xdoclint\fRが有効になっている場合は、\fIjavac\fRコマンドと同様にメッセージで問題がレポートされます。\fIjavadoc\fRコマンドは、メッセージ、ソース・ファイルのコピーおよびエラーが検出された正確な位置を指すキャレットを出力します。メッセージは、重大度、および生成されたドキュメントがバリデータを使用して実行された場合にエラーが発生する可能性に応じて、警告またはエラーになります。たとえば、不正な参照またはJavadocコメントの欠落は、\fIjavadoc\fRコマンドが無効なHTMLを生成する原因にならないため、これらの問題は警告としてレポートされます。構文エラーまたはHTML終了タグの欠落は、\fIjavadoc\fRコマンドが無効なHTMLを生成する原因になるため、これらの問題はエラーとしてレポートされます。 +.sp +デフォルトでは、\fI\-Xdoclint\fRオプションは有効になっています。オプション\fI\-Xdoclint:none\fRで無効にします。 +.sp +\fI\-Xdoclint\fRオプションでレポートされる内容は次のオプションで変更します。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fI\-Xdoclint\fR\fI\fR\fI none\fR: +\fI\-Xdoclint\fRオプションを無効にします。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fI\-Xdoclint\fR\fI\fR\fI \fR\fIgroup\fR: +\fIgroup\fRチェックを有効にします。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fI\-Xdoclint\fR\fI\fR\fI all\fR: すべてのチェック・グループを有効にします。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fI\-Xdoclint\fR\fI\fR\fI all,\fR\fI\-group\fR: +\fIgroup\fRチェック以外のすべてを有効にします。 +.RE +.sp +変数\fIgroup\fRは次のいずれかの値を持ちます。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fIaccessibility\fR: アクセシビリティ・チェッカで検出する問題をチェックします(たとえば、\fI<table>\fRタグで指定されるno captionまたはsummary属性)。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fIhtml\fR: インライン要素へのブロック要素の挿入や終了タグを必要とする要素を終了しないなど、上位レベルHTMLの問題を検出します。ルールは、HTML 4\&.01仕様から導出されます。このタイプのチェックは、\fIjavadoc\fRコマンドを有効にして、ブラウザが受け入れる可能性のあるHTMLの問題を検出します。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fImissing\fR: 欠落しているJavadocコメントまたはタグをチェックします(たとえば、欠落しているコメントやクラス、または欠落している\fI@return\fRタグやメソッド上の同様のタグ)。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fIreference\fR: JavadocタグのJava API要素の参照に関連する問題をチェックします(たとえば、\fI@see\fRで見つからない項目、または\fI@param\fRの後の不正な名前)。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fIsyntax\fR: エスケープされていない山カッコ(\fI<\fRおよび\fI>\fR)やアンパサンド(\fI&\fR)、無効なJavadocタグなどの下位レベルの問題を確認します。 +.RE +.sp +\fI\-Xdoclint\fRオプションを複数回指定して、複数のカテゴリのエラーと警告をチェックするオプションを有効にできます。または、前のオプションを使用して、複数のエラーおよび警告カテゴリを指定できます。たとえば、次のコマンドのいずれかを使用して、\fIfilename\fRファイル内のHTML、構文およびアクセシビリティの問題をチェックします。 +.sp +.if n \{\ +.RS 4 +.\} .nf -.nr #~ 0 -.if n .nr #~ 0.6n -.ds #d .d -.if \(ts\n(.z\(ts\(ts .ds #d nl -.fc -.nr 33 \n(.s -.rm 80 81 82 -.nr 34 \n(.lu -.eo -.am 80 -.br -.di a+ -.35 -.ft \n(.f -.ll \n(34u*1u/4u -.if \n(.l<\n(80 .ll \n(80u -.in 0 -\-\f21.1\fP -.br -\-author -.br -\-\f2bootclasspath\fP -.br -\-bottom -.br -\-\f2breakiterator\fP -.br -\-charset -.br -\-\f2classpath\fP -.br -\-d -.br -\-docencoding -.br -\-docfilessubdirs -.br -\-\f2doclet\fP -.br -\-\f2docletpath\fP -.br -\-doctitle -.br -\-\f2encoding\fP -.br -\-\f2exclude\fP -.br -\-excludedocfilessubdir -.br -\-\f2extdirs\fP -.br -\-footer -.br -\-group -.br -.br -.di -.nr a| \n(dn -.nr a- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di b+ -.35 -.ft \n(.f -.ll \n(34u*1u/4u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -\-header -.br -\-\f2help\fP -.br -\-helpfile -.br -\-\f2J\fP -.br -\-keywords -.br -\-link -.br -\-linkoffline -.br -\-linksource -.br -\-\f2locale\fP -.br -\-nocomment -.br -\-nodeprecated -.br -\-nodeprecatedlist -.br -\-nohelp -.br -\-noindex -.br -\-nonavbar -.br -\-noqualifier -.br -\-nosince -.br -\-notimestamp -.br -\-notree -.br -\-\f2overview\fP -.br -\-\f2package\fP -.br -.br -.di -.nr b| \n(dn -.nr b- \n(dl -.. -.ec \ -.eo -.am 82 -.br -.di c+ -.35 -.ft \n(.f -.ll \n(34u*1u/4u -.if \n(.l<\n(82 .ll \n(82u -.in 0 -\-\f2private\fP -.br -\-\f2protected\fP -.br -\-\f2public\fP -.br -\-\f2quiet\fP -.br -\-serialwarn -.br -\-\f2source\fP -.br -\-\f2sourcepath\fP -.br -\-sourcetab -.br -\-splitindex -.br -\-stylesheetfile -.br -\-\f2subpackages\fP -.br -\-tag -.br -\-taglet -.br -\-tagletpath -.br -\-top -.br -\-title -.br +javadoc \-Xdoclint:html \-Xdoclint:syntax \-Xdoclint:accessibility \fIfilename\fR +javadoc \-Xdoclint:html,syntax,accessibility \fIfilename\fR +.fi +.if n \{\ +.RE +.\} +\fB注意:\fR +\fIjavadoc\fRコマンドでは、これらのチェックの完全性は保証されません。具体的には、完全なHTMLコンプライアンス・チェッカではありません。\-\fIXdoclint\fRオプションの目的は、\fIjavadoc\fRコマンドを有効にして一般的なエラーの大半をレポートすることです。 +.sp +\fIjavadoc\fRコマンドは、無効な入力の修正を試行せず、レポートのみ行います。 +.RE +.PP +\-public +.RS 4 +publicクラスおよびメンバーのみ表示します。 +.RE +.PP +\-protected +.RS 4 +protectedおよびpublicのクラスとメンバーのみを表示します。これがデフォルトです。 +.RE +.PP +\-package +.RS 4 +package、protected、およびpublicのクラスとメンバーのみ表示します。 +.RE +.PP +\-private +.RS 4 +すべてのクラスとメンバーを表示します。 +.RE +.PP +\-help +.RS 4 +オンライン・ヘルプを表示します。\fIjavadoc\fRと\fIドックレット\fRのコマンドライン・オプションがリストされます。 +.RE +.PP +\-doclet \fIclass\fR +.RS 4 +ドキュメントの生成に使用するドックレットを起動するためのクラス・ファイルを指定します。完全修飾名を使用します。このドックレットにより、出力の内容と形式が定義されます。\fI\-doclet\fRオプションが使用されていない場合、\fIjavadoc\fRコマンドは、標準ドックレットを使用してデフォルトのHTML形式を生成します。このクラスには\fIstart(Root)\fRメソッドが含まれている必要があります。この起動クラスへのパスは\fI\-docletpath\fRオプションによって定義されます。ドックレットの概要 +(http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/javadoc/doclet/overview\&.html)を参照してください +.RE +.PP +\-docletpath \fIclasspathlist\fR +.RS 4 +\fI\-doclet\fRオプションで指定されたドックレット開始クラス・ファイル、およびそのクラスが依存するすべてのJARファイルへのパスを指定します。開始クラス・ファイルがJARファイル内にある場合、このオプションでJARファイルへのパスを指定します。絶対パスまたは現在のディレクトリからの相対パスを指定できます。\fIclasspathlist\fRに複数のパスやJARファイルが含まれる場合には、それらをSolarisの場合はコロン(:)で、Windowsの場合はセミコロン(;)でそれぞれ区切ります。目的のドックレット開始クラスがすでに検索パス内にある場合は、このオプションは不要です。ドックレットの概要 +(http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/javadoc/doclet/overview\&.html)を参照してください +.RE +.PP +\-1\&.1 +.RS 4 +Javadoc 1\&.4から削除され、代替はありません。このオプションは、Javadoc 1\&.1によって生成されるのと同じ外見と機能を持つドキュメントを作成するためのものでした(ネストされたクラスはサポートされていません)。このオプションが必要な場合は、Javadoc 1\&.2または1\&.3をかわりに使用してください。 +.RE +.PP +\-source \fIrelease\fR +.RS 4 +受け付けるソース・コードのリリースを指定します。\fIrelease\fRパラメータには次の値を指定できます。\fIjavac\fRコマンドでコードをコンパイルするときに使用する値に対応する\fIリリース\fRの値を使用します。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fBリリース値: 1\&.5\fR。\fIjavadoc\fRコマンドは、JDK 1\&.5で導入された総称および他の言語機能を含むコードを受け付けます。\fI\-source\fRオプションが使用されなかった場合のコンパイラのデフォルト動作は、1\&.5のものになります。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fBリリース値: 1\&.4\fR。\fIjavadoc\fRコマンドは、JDK 1\&.4で導入されたアサーションを含むコードを受け付けます。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fBリリース値: 1\&.3\fR。\fIjavadoc\fRコマンドは、JDK 1\&.3以降に導入されたアサーション、総称、または他の言語機能をサポートしません。 +.RE +.RE +.PP +\-sourcepath \fIsourcepathlist\fR +.RS 4 +パッケージ名または\fI\-subpackages\fRオプションを\fIjavadoc\fRコマンドに渡すときに、ソース・ファイルを見つけるための検索パスを指定します。 +\fI複数のパスはコロン(:)で区切ります。\fR\fIjavadoc\fRコマンドは、指定されたパス以下のすべてのサブディレクトリを検索します。このオプションを使用して、ドキュメント化されるソース・ファイルの位置のみでなく、それ自体はドキュメント化されないがドキュメント化されるソース・ファイルから継承されたコメントを持つソース・ファイルの位置も確認できます。 +.sp +\fI\-sourcepath\fRオプションを使用できるのは、\fIjavadoc\fRコマンドにパッケージ名を渡す場合のみです。\fIjavadoc\fRコマンドに渡されるソース・ファイルは検索されません。ソース・ファイルを特定するには、そのディレクトリに移動するか、「1つ以上のクラスのドキュメント化」に示すように各ファイルの前にパスを含めます。\fI\-sourcepath\fRが省略された場合、\fIjavadoc\fRコマンドは、クラス・パスを使用してソース・ファイルを検索します(\fI\-classpath\fRを参照)。デフォルトの\fI\-sourcepath\fRは、クラス・パスの値です。\fI\-classpath\fRを省略してパッケージ名を\fIjavadoc\fRコマンドに渡すと、\fIjavadoc\fRコマンドは現在のディレクトリ(およびそのサブディレクトリ)からソース・ファイルを検索します。 +.sp +\fIsourcepathlist\fRには、ドキュメント化するパッケージのソース・ツリーのルート・ディレクトリを設定します。 +.sp +たとえば、\fIcom\&.mypackage\fRという名前のパッケージをドキュメント化する場合に、そのソース・ファイルが/home/user/src/com/mypackage/*\&.javaにあるとします。ソース・パスをcom\emypackageが含まれるディレクトリ/home/user/srcに指定してから、次のように、パッケージ名を指定します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +javadoc \-sourcepath /home/user/src/ com\&.mypackage +.fi +.if n \{\ +.RE +.\} +ソース・パスの値とパッケージ名を連結して、ドットをスラッシュ(/)に変更すると、次のように、パッケージのフルパスになります。 +.sp +/home/user/src/com/mypackage +.sp +2つのソース・パスを設定するには、次のようにします。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +javadoc \-sourcepath /home/user1/src:/home/user2/src com\&.mypackage +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\-classpath \fIclasspathlist\fR +.RS 4 +\fIjavadoc\fRコマンドが参照クラスの検索を行うときに使用するパスを指定します。参照クラスとは、ドキュメント化されるクラスと、それらのクラスによって参照されるすべてのクラスのことです。 +\fI複数のパスはコロン(:)で区切ります。\fR\fIjavadoc\fRコマンドは、指定されたパス以下のすべてのサブディレクトリを検索します。\fIclasspathlist\fRの値を指定するときは、クラス・パスのドキュメントにある指示に従ってください。 +.sp +\fI\-sourcepath\fRが省略された場合、\fIjavadoc\fRコマンドは\fI\-classpath\fRを使用して、ソース・ファイルおよびクラス・ファイルを検索します(下位互換性のため)。ソース・ファイルとクラス・ファイルを別々のパスから検索する必要がある場合は、\fI\-sourcepath\fRと\fI\-classpath\fRの両方を使用します。 +.sp +たとえば、\fIcom\&.mypackage\fRをドキュメント化する場合に、そのソース・ファイルがディレクトリ/home/user/src/com/mypackageにあり、このパッケージが/home/user/libthen内のライブラリに依存しているとき、次のように指定します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +javadoc \-sourcepath /home/user/lib \-classpath /home/user/src com\&.mypackage +.fi +.if n \{\ +.RE +.\} +他のツールと同様に、\fI\-classpath\fRが指定されていない場合、\fICLASSPATH\fR環境変数が設定されていれば、\fIjavadoc\fRコマンドはその環境変数を使用します。どちらも設定されていない場合、\fIjavadoc\fRコマンドは現在のディレクトリからクラスを検索します。 +.sp +\fIjavadoc\fRコマンドが\fI\-classpath\fRを使用してユーザー・クラスを検索する方法についての、拡張機能クラスやブートストラップ・クラスに関連した詳細は、クラスの検索方法 +(http://docs\&.oracle\&.com/javase/8/docs/technotes/tools/findingclasses\&.html)を参照してください。 +.sp +*のベース名を含むクラス・パス要素は、\fI\&.jar\fRまたは\fI\&.JAR\fRを拡張子に持つディレクトリ内のすべてのファイルのリストを指定するのと同等とみなされます。 +.sp +たとえば、ディレクトリ\fImydir\fRに\fIa\&.jar\fRと\fIb\&.JA\fRRが含まれている場合、クラス・パス要素\fIfoo/*\fRは\fIA\&.jar:b\&.JAR\fRに展開されますが、JARファイルの順番は未指定となります。非表示のファイルを含む、指定したディレクトリ内のすべてのJARファイルがリストに含まれます。*からなるクラス・パス・エントリは、現在のディレクトリ内のすべてのJARファイルのリストに展開されます。\fICLASSPATH\fR環境変数も同様に展開されます。クラス・パスのワイルドカードの展開は、Java仮想マシン(JVM)の開始前に行われます。Javaプログラムは、System\&.getenv(\fI"CLASSPATH"\fR)の呼び出しによってなど、環境を問い合せる場合を除き、展開されていないワイルドカードを参照しません。 +.RE +.PP +\-subpackages \fIpackage1:package2:\&.\&.\&.\fR +.RS 4 +ソース・ファイルから指定されたパッケージおよびそのサブパッケージ内に再帰的にドキュメントを生成します。このオプションは、ソース・コードに新しいサブパッケージを追加する際に便利です。新しいサブパッケージが自動的に組み込まれるからです。各package引数は、任意の最上位サブパッケージ(\fIjava\fRなど)または完全修飾パッケージ(\fIjavax\&.swing\fRなど)になります。ソース・ファイルを含める必要はありません。引数は、すべてのオペレーティング・システムで、コロンで区切られます。ワイルドカードは使用できません。パッケージの検索場所を指定するには、\fI\-sourcepath\fRを使用します。このオプションでは、ソース・ツリー内に存在するがパッケージに含まれないソース・ファイルを処理しません。ソース・ファイルの処理を参照してください。 +.sp +たとえば、次のコマンドは、\fIjava\fRおよび\fIjavax\&.swing\fRという名前のパッケージとこれらのサブパッケージ全部のドキュメントを生成します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +javadoc \-d docs \-sourcepath /home/user/src \-subpackages java:javax\&.swing +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\-exclude \fIpackagename1:packagename2:\&.\&.\&.\fR +.RS 4 +指定されたパッケージとそのサブパッケージを\fI\-subpackages\fRによって作成されたリストから無条件に除外します。過去または将来の\fI\-subpackages\fRオプションの指定によって組み込まれるパッケージも除外の対象となります。 +.sp +次の例では、\fIjava\&.io\fR、\fIjava\&.util\fR、\fIjava\&.math\fRなどは組み込まれますが、\fIjava\&.net\fRと\fIjava\&.lang\fRをルートに持つパッケージは除外されます。\fIjava\&.lang\fRのサブパッケージである\fIjava\&.lang\&.ref\fRが除外される点に注意してください。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +javadoc \-sourcepath /home/user/src \-subpackages java \-exclude + java\&.net:java\&.lang +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\-bootclasspath \fIclasspathlist\fR +.RS 4 +ブート・クラスが存在するパスを指定します。ブート・クラスとは、通常、Javaプラットフォーム・クラスのことです。\fIbootclasspath\fRは、\fIjavadoc\fRコマンドがソース・ファイルとクラス・ファイルを探すときに使用する検索パスの一部です。詳細は、クラスの検出方法 +(http://docs\&.oracle\&.com/javase/8/docs/technotes/tools/findingclasses\&.html)を参照してください +.sp +\fIclasspathlist\fRパラメータ内のディレクトリは、セミコロン(;)で区切る(Windowsの場合)か、コロン(:)で区切ります(Oracle Solarisの場合)。 +.RE +.PP +\-extdirs \fIdirist\fR +.RS 4 +拡張機能クラスが存在するディレクトリを指定します。拡張機能クラスとは、Java拡張機能機構を使用するすべてのクラスです。\fIextdirs\fRオプションは、\fIjavadoc\fRコマンドがソース・ファイルとクラス・ファイルを探すときに使用する検索パスの一部です。詳細は、\fI\-classpath\fRオプションを参照してください。\fIdirlist\fR内のディレクトリは、セミコロン(;)で区切る(Windowsの場合)か、コロン(:)で区切ります(Oracle Solarisの場合)。 +.RE +.PP +\-verbose +.RS 4 +\fIjavadoc\fRコマンドの実行中に詳細なメッセージを表示します。\fIverbose\fRオプションを指定しないと、ソース・ファイルのロード時、ドキュメントの生成時(ソース・ファイルごとに1つのメッセージ)、およびソート時にメッセージが表示されます。verboseオプションを指定すると、各Javaソース・ファイルの解析に要した時間(ミリ秒単位)を示す追加のメッセージが表示されます。 +.RE +.PP +\-quiet +.RS 4 +メッセージを抑制し、警告とエラーのみが表示されるようにして、これらを確認しやすくします。\fIversion\fR文字列も抑止します。 +.RE +.PP +\-breakiterator +.RS 4 +英語の場合、パッケージ、クラスまたはメンバーの主説明の最初の文の終わりを判断する際に、\fIjava\&.text\&.BreakIterator\fRの国際化された文境界を使用します。他のすべてのロケールは、英語言語というロケール固有のアルゴリズムではなく、すでに\fIBreakIterator\fRクラスを使用しています。最初の文は、パッケージ、クラス、またはメンバーのサマリーにコピーされ、アルファベット順の索引にコピーされます。JDK 1\&.2以降、\fIBreakIterator\fRクラスは、英語を除くすべての言語の文の終わりを判断するために、すでに使用されています。したがって、\fI\-breakiterator\fRオプションは、1\&.2以降では英文以外には効果がありません。英文には、次のような独自のデフォルトのアルゴリズムがあります。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +英文のデフォルトの文区切りアルゴリズム。空白文字またはHTMLブロック・タグ(\fI<P>\fRなど)が続くピリオドで停止します。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +breakiterator文区切りアルゴリズム。次の語が大文字で始まる場合、空白文字が続くピリオド、疑問符、または感嘆符で停止します。このアルゴリズムでは「The serial no\&. is valid」など、ほとんどの省略表記が処理されますが、「Mr\&. Smith」は処理されません。\fI\-breakiterator\fRオプションでは、HTMLタグや、数字または記号で始まる文では停止しません。HTMLタグに埋め込まれている場合でも、「\&.\&./filename」の最後のピリオドで停止します。 +.RE +.sp +Java SE 1\&.5では\fI\-breakiterator\fR警告メッセージが削除され、デフォルトの文区切りアルゴリズムは変更されていません。ソース・コードを変更せず、SE 1\&.4\&.xでの\fI\-breakiterator\fRオプションの警告を除去していない場合でも、何もする必要はありません。Java SE 1\&.5\&.0からは警告は消滅しています。 +.RE +.PP +\-locale \fIlanguage_country_variant\fR +.RS 4 +\fIjavadoc\fRコマンドがドキュメントを生成するときに使用するロケールを指定します。この引数は、\fIj\fR\fIava\&.util\&.Locale\fRドキュメントで説明しているように、\fIen_US\fR +(英語、米国)または\fIen_US_WIN\fR +(Windowsバリアント)などのロケールの名前です。 +.sp +\fB注意:\fR +\fI\-locale\fRオプションは、標準ドックレットが提供するすべてのオプション、またはその他の任意のドックレットが提供するすべてのオプションより前(左側)に指定する必要があります。そうしないと、ナビゲーション・バーが英語で表示されます。このコマンドライン・オプションのみ、指定する順序に依存します。標準ドックレットのオプションを参照してください。 +.sp +ロケールを指定すると、指定したロケールのリソース・ファイルが\fIjavadoc\fRコマンドによって選択されて、メッセージ(ナビゲーション・バー、リストと表の見出し、ヘルプ・ファイルの目次、stylesheet\&.cssのコメントなどの文字列)のために使用されます。また、アルファベット順にソートされるリストのソート順、および最初の文の終わりを判断するための文の区切り文字も、指定したロケールによって決まります。\fI\-locale\fRオプションは、ドキュメント化されるクラスのソース・ファイル内で指定されているドキュメンテーション・コメントのテキストのロケールを決定するものではありません。 +.RE +.PP +\-encoding +.RS 4 +ソース・ファイルのエンコーディングの名前(\fIEUCJIS/SJIS\fRなど)を指定します。このオプションが指定されていない場合は、プラットフォームのデフォルト・コンバータが使用されます。およびオプションも参照してください。 +.RE +.PP +\-J\fIflag\fR +.RS 4 +\fIjavadoc\fRコマンドを実行するJava Runtime Environment (JRE)に、\fIflag\fRを直接渡します。たとえば、生成ドキュメントを処理するためにシステムで32MBのメモリーを確保しておく必要がある場合は、\fI\-Xmx\fRオプションを次のように呼び出します。\fIjavadoc \-J\-Xmx32m \-J\-Xms32m com\&.mypackage\fR。\fI\-Xms\fRは省略可能で、これは初期メモリーのサイズを設定するのみのオプションで、必要なメモリーの最小量がわかっている場合に便利です。 +.sp +\fIJ\fRと\fIflag\fRの間に空白文字はありません。 +.sp +使用している\fIjavadoc\fRコマンドのバージョンを確認するには\fI\-version\fRオプションを使用します。出力ストリームには標準ドックレットのバージョン番号が含まれます。Javadocコマンドの実行を参照してください。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +javadoc \-J\-version +java version "1\&.7\&.0_09" +Java(TM) SE Runtime Environment (build 1\&.7\&.0_09\-b05) +Java HotSpot(TM) 64\-Bit Server VM (build 23\&.5\-b02, mixed mode) +.fi +.if n \{\ +.RE +.\} +.RE +.SS "標準ドックレットのオプション" +.PP +\-d \fIdirectory\fR +.RS 4 +\fIjavadoc\fRコマンドが生成されたHTMLファイルを保存する生成先ディレクトリを指定します。\fI\-d\fRオプションを省略すると、ファイルは現在のディレクトリに保存されます。\fIdirectory\fRの値には、絶対ディレクトリ、または現在の作業ディレクトリからの相対ディレクトリを指定できます。Java SE 1\&.4では、\fIjavadoc\fRコマンドを実行すると生成先ディレクトリが自動的に作成されます。 +.sp +たとえば、次の例では、\fIcom\&.mypackage\fRパッケージのドキュメントが生成され、その結果が\fI/user/doc/ \fRディレクトリに保存されます。\fIjavadoc \-d \fR\fI/user/doc/ \fR\fIcom\&.mypackage\fR +.RE +.PP \-use -.br -\-\f2verbose\fP -.br +.RS 4 +ドキュメント化されるクラスおよびパッケージごとに1つの使用ページを組み込みます。このページには、その特定のクラスまたはパッケージのAPIを使用しているパッケージ、クラス、メソッド、コンストラクタ、およびフィールドが記述されます。たとえば、クラスCを例にとると、クラスCを使用しているものとしては、Cのサブクラス、Cとして宣言されているフィールド、Cを返すメソッド、および型Cのパラメータを持つメソッドとコンストラクタがあります。たとえば、\fIString\fR型用の使用ページを表示できます。\fIjava\&.awt\&.Font\fRクラスの\fIgetName\fRメソッドは\fIString\fR型を戻すので、\fIgetName\fRメソッドは\fIString\fRを使用し、\fIgetName\fRメソッドが\fIString\fR用の使用ページに表示されます。これは実装ではなくAPIの使用のみをドキュメント化します。メソッドがその実装で\fIString\fRを使用するが、引数として文字列を取らない、または文字列を返さない場合、それは\fIString\fRの使用とはみなされません。生成された使用ページにアクセスするには、クラスまたはパッケージに移動し、ナビゲーション・バーの\fBリンクの使用\fRをクリックします。 +.RE +.PP \-version -.br -\-windowtitle -.br -.br -.di -.nr c| \n(dn -.nr c- \n(dl -.. -.ec \ -.35 -.nf -.ll \n(34u -.nr 80 0 -.80 -.rm 80 -.nr 38 \n(a- -.if \n(80<\n(38 .nr 80 \n(38 -.nr 81 0 -.81 -.rm 81 -.nr 38 \n(b- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 82 0 -.82 -.rm 82 -.nr 38 \n(c- -.if \n(82<\n(38 .nr 82 \n(38 -.35 -.nf -.ll \n(34u -.nr 38 1n -.nr 79 0 -.nr 40 \n(79+(0*\n(38) -.nr 80 +\n(40 -.nr 41 \n(80+(3*\n(38) -.nr 81 +\n(41 -.nr 42 \n(81+(3*\n(38) -.nr 82 +\n(42 -.nr TW \n(82 -.if t .if \n(TW>\n(.li .tm Table at line 1993 file Input is too wide - \n(TW units -.fc   -.nr #T 0-1 -.nr #a 0-1 -.eo -.de T# -.ds #d .d -.if \(ts\n(.z\(ts\(ts .ds #d nl -.mk ## -.nr ## -1v -.ls 1 -.ls -.. -.ec -.ne \n(a|u+\n(.Vu -.ne \n(b|u+\n(.Vu -.ne \n(c|u+\n(.Vu -.if (\n(a|+\n(#^-1v)>\n(#- .nr #- +(\n(a|+\n(#^-\n(#--1v) -.if (\n(b|+\n(#^-1v)>\n(#- .nr #- +(\n(b|+\n(#^-\n(#--1v) -.if (\n(c|+\n(#^-1v)>\n(#- .nr #- +(\n(c|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u \n(82u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\h'|\n(41u'\h'|\n(42u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(40u -.in +\n(37u -.a+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.b+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(##u-1v -.nr 37 \n(42u -.in +\n(37u -.c+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.fc -.nr T. 1 -.T# 1 -.35 -.rm a+ -.rm b+ -.rm c+ -.TE -.if \n-(b.=0 .nr c. \n(.c-\n(d.-127 -.LP -\f2イタリック\fP で示されたオプションは、Javadoc の基本オプションであり、Javadoc ツールのフロントエンドによって提供され、すべてのドックレットで使用できます。標準ドックレット自体は、イタリックでないオプションを提供します。 -.SS -Javadoc オプション -.RS 3 -.TP 3 -\-overview \ path/filename -Javadoc に対して、\f2path/filename\fP で指定された「ソース」ファイルから概要ドキュメント用のテキストを取得し、そのテキストを概要ページ (\f2overview\-summary.html\fP) に配置するように指定します。 \f2path/filename\fP は、カレントディレクトリからの相対パスです。 -.LP -\f2filename\fPで任意の名前を使用し、\f2path\fP で任意の配置先を選択することも可能ですが、通常は \f2overview.html\fP という名前を付け、ソースツリー内の最上位パッケージディレクトリを含むディレクトリ内に配置します。この場所に配置すると、パッケージをドキュメント化するときに \f2path\fP を指定する必要がなくなります。なぜなら、 \f2\-sourcepath\fP によってこのファイルが指し示されるからです。たとえば、 \f2java.lang\fP パッケージのソースツリーが \f2/src/classes/java/lang/\fP の場合、概要ファイルを \f2/src/classes/overview.html\fP に配置できます。「使用例」を参照してください。 -.LP -\f2path/filename\fP で指定するファイルについては、「概要コメントファイル」を参照してください。 -.LP -概要ページが作成されるのは、Javadoc に複数のパッケージ名を渡した場合だけです。詳細は、「HTML フレーム」を参照してください。 -.LP -概要ページのタイトルは、\f2\-doctitle\fP によって設定されます。 -.LP -.TP 3 -\-public -public クラスおよびメンバーだけを表示します。 -.LP -.TP 3 -\-protected -protected および public のクラスとメンバーだけを表示します。これがデフォルトです。 -.LP -.TP 3 -\-package -package、protected、および public のクラスとメンバーだけを表示します。 -.LP -.TP 3 -\-private -すべてのクラスとメンバーを表示します。 -.LP -.TP 3 -\-help -オンラインヘルプを表示します。Javadoc とドックレットのコマンド行オプションが一覧表示されます。 -.LP -.TP 3 -\-doclet\ class -ドキュメントの生成に使うドックレットを起動するためのクラスファイルを指定します。完全指定の名前を指定してください。このドックレットにより、出力の内容と形式が定義されます。\f4\-doclet\fP オプションが使われていない場合、Javadoc は、標準ドックレットを使ってデフォルトの HTML 形式を生成します。このクラスには \f2start(Root)\fP が含まれている必要があります。この起動クラスへのパスは \f2\-docletpath\fP オプションによって定義されます。 -.LP -たとえば、MIF ドックレットを呼び出すには、次のように指定します。 -.nf -\f3 -.fl - \-doclet com.sun.tools.doclets.mif.MIFDoclet -.fl -\fP -.fi -.LP -特定のドックレットを実行した完全な例については、 -.na -\f2MIF Doclet のドキュメント\fP @ -.fi -http://java.sun.com/j2se/javadoc/mifdoclet/docs/mifdoclet.htmlを参照してください。 -.LP -.TP 3 -\-docletpath\ classpathlist -\f2\-doclet\fP オプションで指定されたドックレット開始クラスファイル、 およびそのクラスが依存するすべての JAR ファイルへのパスを指定します。開始クラスファイルが jar ファイル内にある場合、以下の例のように jar ファイルのパスが指定されます。絶対パスまたは現在のディレクトリからの相対パスを指定できます。 \f2classpathlist\fP には、複数のパスまたは JAR ファイルを含めることができます。 その場合、各パスまたは JAR ファイルを、Solaris の場合にはコロン (:)、Windows の場合にはセミコロン (;) で区切ります。目的のドックレット開始クラスがすでに検索パス内にある場合は、このオプションは不要です。 -.LP -jar ファイルへのパスの例には、ドックレット開始クラスファイルが含まれています。jar ファイル名が含まれている点に注目してください。 -.nf -\f3 -.fl - \-docletpath /home/user/mifdoclet/lib/mifdoclet.jar -.fl -\fP -.fi -ドックレット開始クラスファイルのパスの例。クラスファイル名が省略されている点に注目してください。 -.nf -\f3 -.fl - \-docletpath /home/user/mifdoclet/classes/com/sun/tools/doclets/mif/ -.fl -\fP -.fi -特定のドックレットを実行した完全な例については、 -.na -\f2MIF Doclet のドキュメント\fP @ -.fi -http://java.sun.com/j2se/javadoc/mifdoclet/docs/mifdoclet.htmlを参照してください。 -.LP -.TP 3 -\-1.1 -\f2この機能は Javadoc 1.4 から削除されました。代替機能はありません。このオプションは、Javadoc 1.1 によって生成されるのと同じ外見と機能を持つドキュメントを作成するためのものでした。入れ子のクラスはサポートされていません。このオプションが必要な場合は、Javadoc 1.2 または 1.3 を使用してください。\fP -.LP -.TP 3 -\-source release -受け付けるソースコードのバージョンを指定します。\f2release\fP には次の値を指定できます。 -.RS 3 -.TP 2 -o -\f31.5\fP \- javadoc は、JDK 1.5 で導入された総称などの言語機能を含むコードを受け付けます。\f3\-source\fP フラグが使用されなかった場合のコンパイラのデフォルト動作は、1.5 のものになります。 -.TP 2 -o -\f31.4\fP Javadoc は、JDK 1.4 で導入された、アサーションを含むコードを受け付けます。 -.TP 2 -o -\f31.3\fP Javadoc は、JDK 1.3 以降に導入されたアサーション、総称、または他の言語機能をサポートしません。 +.RS 4 +生成ドキュメントに、@versionのテキストを組み込みます。このテキストは、デフォルトでは省略されます。使用している\fIjavadoc\fRコマンドのバージョンを確認するには\fI\-J\-version\fRオプションを使用します。 .RE -.LP -javac でコードをコンパイルするときに使用した値に対応する \f2release\fP の値を使用します。 -.LP -.TP 3 -\-sourcepath\ sourcepathlist -パッケージ名または \-subpackages を javadoc コマンドに渡すときは、ソースファイル (.\f2.java\fP) を見つけるための \f2検索パス\fP を指定 \f2します\fP 。\f2sourcepathlist\fP には、コロン (\f2:\fP) で区切って複数のパスを含めることができます。Javadoc ツールは、指定されたパス以下のすべてのサブディレクトリを検索します。このオプションを使って、ドキュメント化されるソースファイルの位置だけでなく、それ自体はドキュメント化されないがドキュメント化されるソースファイルから継承されたコメントを持つソースファイルの位置も確認できます。 -.LP -\f2\-sourcepath\fP オプションを使用できるのは、javadoc コマンドにパッケージ名を渡す場合だけです。このパスからは、javadoc コマンドに渡された \f2.java\fP ファイルは \f2検索\fP されません。 \f2.java\fP ファイルを検索するには、そのファイルのあるディレクトリに cd によって移動するか、または各ファイルの先頭にパスを含めます (「1 つ以上のクラスのドキュメント化」を参照)。 \f2\-sourcepath\fP が省略された場合、Javadoc は、クラスパスを使ってソースファイルを検索します (\-classpath を参照)。したがって、デフォルトの \-sourcepath は、クラスパスの値です。\-classpath も省略してパッケージ名を Javadoc に渡すと、Javadoc は現在のディレクトリおよびそのサブディレクトリからソースファイルを検索します。 -.LP -\f2sourcepathlist\fP には、ドキュメント化するパッケージ名のソースツリーのルートディレクトリを設定します。たとえば、 \f2com.mypackage\fP という名前のパッケージをドキュメント化する場合に、そのソースファイルが次の場所にあるとします。 -.nf -\f3 -.fl - /home/user/src/com/mypackage/*.java -.fl -\fP -.fi -このとき次のように、 \f2sourcepath\fP を、com/mypackage を含むディレクトリである \f2/home/user/src\fP に指定したあと、 パッケージ名 \f2com.mypackage\fP を指定します。 -.nf -\f3 -.fl - % \fP\f3javadoc \-sourcepath /home/user/src/ com.mypackage\fP -.fl -.fi -この方法は、ソースパスの値とパッケージ名を連結して、ドットを (円記号) 「\\」に変えると、パッケージのフルパス \f2/home/user/src/com/mypackage になることを理解すると簡単です\fP。 -.LP -2 つのソースパスを設定するには、次のようにします。 -.nf -\f3 -.fl - % \fP\f3javadoc \-sourcepath /home/user1/src:/home/user2/src com.mypackage\fP -.fl -.fi -.LP -.TP 3 -\-classpath\ classpathlist -javadoc が参照クラス (\f2.class\fP ファイル) の検索を行うときに使用するパスを指定します。参照クラスとは、ドキュメント化されるクラスと、それらのクラスから参照されるすべてのクラスを指します。\f2classpathlist\fP には、コロン (\f2:\fP) で区切って複数のパスを含めることができます。Javadoc ツールは、指定されたパス以下のすべてのサブディレクトリを検索します。classpathlist を指定するときは、 -.na -\f2クラスパス\fP @ -.fi -http://java.sun.com/javase/6/docs/technotes/tools/index.html#generalのドキュメントにある指示 \f2に従ってください\fP。 -.LP -\f2\-sourcepath\fP が省略されると、Javadoc ツールはクラスファイルを検索するときだけでなく、ソースファイルを検索するときにも \f2\-classpath\fP を使用します (下位互換性のため)。したがって、ソースファイルとクラスファイルを別々のパスから検索する必要がある場合は、 \f2\-sourcepath\fP と \f2\-classpath の両方を使います\fP.。 -.LP -たとえば、 \f2com.mypackage\fP をドキュメント化する場合に、そのソースファイルがディレクトリ \f2/home/user/src/com/mypackage\fP 内に格納されており、このパッケージが \f2/home/user/lib\fP 内のライブラリに依存しているとします。このとき次のように指定します。 -.nf -\f3 -.fl - % \fP\f3javadoc \-classpath /home/user/lib \-sourcepath /home/user/src com.mypackage\fP -.fl -.fi -\f2\-classpath\fP が指定されなかった場合、Javadoc ツールはほかのツールと同じく、CLASSPATH 環境変数が設定されていればその値を使用します。どちらも設定されていない場合、Javadoc ツールは現在のディレクトリからクラスを検索します。 -.LP -Javadoc ツールが \f2\-classpath\fP を使用してユーザークラスを検索する方法について、拡張クラスやブートストラップクラスと関連付けて説明している情報を入手するには、 -.na -\f2「クラスの検索方法」\fP @ -.fi -http://java.sun.com/javase/6/docs/technotes/tools/findingclasses.htmlを参照してください。 -.LP -便宜上、 \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 プログラムが展開されていないワイルドカードを認識することはありません。 -.LP -.TP 3 -\-subpackages\ \ package1:package2:... -ソースファイルから指定されたパッケージおよびそのサブパッケージ内に再帰的にドキュメントを生成します。このオプションは、ソースコードに新しいサブパッケージを追加する際に便利です。新しいサブパッケージは自動的に組み込まれます。各 \f2package\fP 引数は、任意の最上位サブパッケージ ( \f2java\fP など) または完全修飾パッケージ ( \f2javax.swing\fP など) になります。ソースファイルを含める必要はありません。引数は、コロンで区切られます (すべてのオペレーティングシステム)。ワイルドカードは不要です (使用不可)。パッケージの検索場所を指定するには、\f2\-sourcepath\fP を使用します。このオプションは、「ソースファイルの処理」で説明したとおり、ソースツリーにあるがパッケージには属していないソースファイルを処理しないので役立ちます。 -.LP -たとえば、 -.nf -\f3 -.fl - % \fP\f3javadoc \-d docs \-sourcepath /home/user/src \-subpackages java:javax.swing\fP -.fl -.fi -このコマンドは、「java」および「javax.swing」という名前のパッケージとこれらのサブパッケージ全部のドキュメントを生成します。 -.LP -\f2\-subpackages\fP と \f2\-exclude\fP を組み合わせて使用すると、特定のパッケージを除外できます。 -.LP -.TP 3 -\-exclude\ \ packagename1:packagename2:... -指定されたパッケージとそのサブパッケージを \f2\-subpackages\fP によって作成されたリストから無条件に除外します。 過去の \f2\-subpackages\fP オプションの指定によって組み込まれたパッケージ、または将来組み込まれるパッケージも除外の対象となります。 次に例を示します。 -.nf -\f3 -.fl - % \fP\f3javadoc \-sourcepath /home/user/src \-subpackages java \-exclude java.net:java.lang\fP -.fl -.fi -この場合、 \f2java.io\fP、 \f2java.util\fP、 \f2java.math\fP などが含められ、 \f2java.net\fP と \f2java.lang\fP をルートに持つパッケージが除外されます。この場合、 \f2java.lang\fP のサブパッケージである \f2java.lang.ref\fP も除外される点に注意してください。 -.LP -.TP 3 -\-bootclasspath\ classpathlist -ブートクラスが存在するパスを指定します。ブートクラスとは、通常、Java プラットフォームのコアクラスのことです。ブートクラスパスは、Javadoc ツールがソースファイルとクラスファイルを探すときに使う検索パスの一部です。詳細は、 -.na -\f2「クラスの検索方法」\fP @ -.fi -http://java.sun.com/javase/6/docs/technotes/tools/findingclasses.html#srcfilesを参照してください。コロン (:) を、 \f2classpathlist\fP 内のディレクトリ間の区切り文字として使用します。 -.LP -.TP 3 -\-extdirs\ dirlist -拡張機能クラスが存在するディレクトリを指定します。拡張機能クラスとは、Java 拡張機能機構を使うすべてのクラスです。extdirs は、Javadoc ツールがソースファイルとクラスファイルを探すときに使う検索パスの一部です。詳細は、前述の \f2\-classpath\fP を参照してください。コロン (:) を、 \f2dirlist\fP 内のディレクトリ間の区切り文字として使用します。 -.LP -.TP 3 -\-verbose -javadoc の実行中に詳細なメッセージを表示します。verbose オプションを指定しないと、ソースファイルのロード時、ドキュメントの生成時 (ソースファイルごとに 1 つのメッセージ)、およびソート時にメッセージが表示されます。verbose オプションを指定すると、各 Java ソースファイルの解析に要した時間 (ミリ秒単位) など、追加のメッセージが表示されます。 -.LP -.TP 3 -\-quiet -エラーメッセージまたは警告メッセージ以外のメッセージを抑制し、警告とエラーだけが表示されるようにして、これらを特定しやすくします。バージョン文字列も抑制します。 -.LP -.TP 3 -\-breakiterator\ -英語の最初の文の末尾を決定する際に、英語用のロケール固有のアルゴリズムではなく、 -.na -\f2java.text.BreakIterator\fP @ -.fi -http://java.sun.com/javase/6/docs/api/java/text/BreakIterator.html の国際化された文境界を使用します (ほかのすべてのロケールではすでに \f2BreakIterator\fP が使用されている)。\f2「最初の文」\fPとは、パッケージ、クラス、またはメンバーの主説明での最初の文のことです。この文は、パッケージ、クラス、またはメンバーの要約にコピーされ、アルファベット順のインデックスにコピーされます。 -.LP -JDK 1.2 以降、BreakIterator クラスは、英語を除くすべての言語の文の終わりを判断するために、すでに使用されています。したがって、 \f2\-breakiterator\fP オプションは、1.2 以降では英文以外には効果がありません。英文には、次のような独自のデフォルトのアルゴリズムがあります。 -.RS 3 -.TP 2 -o -英文のデフォルトの文区切りアルゴリズム \- 空白または HTML ブロックタグ ( \f2<P>\fP など) が続くピリオドで停止する -.TP 2 -o -breakiterator 文区切りアルゴリズム \- 一般に、次の語が大文字で始まる場合、空白文字が続くピリオド、疑問符、または感嘆符で停止する。このアルゴリズムでは「The serial no. is valid」など、ほとんどの省略表記が処理されますが、「Mr. Smith」などは処理されません。HTML タグや、数字または記号で始まる文では停止しない。HTML タグに埋め込まれている場合でも、「../filename」の最後のピリオドで停止する +.PP +\-author +.RS 4 +生成ドキュメントに、\fI@author\fRのテキストを組み込みます。 .RE -.LP -注: 1.5.0 からは、1.4.x に設けられていた breakiterator 警告メッセージを削除し、デフォルトの文区切りアルゴリズムを変更していません。つまり、\\\-breakiterator オプションは、1.5.0 ではデフォルトではなくなり、またデフォルトにするつもりもありません。これは、「次のメジャーリリース」(1.5.0) でデフォルトを変更するという、以前の目的とは逆になっています。つまり、ソースコードを変更せず、1.4.x での breakiterator 警告を除去していない場合でも、1.5.0 からは何もする必要がなく、警告は消滅しています。この逆戻りの理由は、breakiterator をデフォルトにするメリットよりも、デフォルトにするために必要となる、互換性のないソースの変更の方が負担が大きかったためです。この件で皆様に余分の手間をおかけし、混乱を招いたことをお詫びいたします。 -.TP 3 -\-locale\ language_country_variant -.LP -\f3重要\fP \- \f2\-locale\fP オプションは、\f2標準ドックレットが提供するすべてのオプション\fP、またはその他の任意のドックレットの提供するすべてのオプションより前 (左側) に指定する必要があります。そうしないと、ナビゲーションバーが英語で表示されます。このコマンド行オプションだけは、指定する順序に依存します。 -.LP -Javadoc がドキュメントを生成するときに使うロケールを指定します。この引数は次のような、java.util.Locale のドキュメンテーションで説明されているロケールの名前です。 \f2en_US\fP (英語、米国) または \f2en_US_WIN\fP (Windows で使用される英語)。 -.LP -ロケールを指定すると、指定したロケールのリソースファイルが Javadoc によって選択されて、メッセージ (ナビゲーションバー、リストと表の見出し、ヘルプファイルの目次、stylesheet.css のコメントなどの文字列) のために使われます。また、アルファベット順にソートされるリストのソート順、および最初の文の末尾を判別するための文の区切り文字も、指定したロケールによって決まります。ただし、このオプションは、ドキュメント化されるクラスのソースファイル内で指定されているドキュメンテーションコメントのテキストのロケールを決定するものではありません。 -.LP -.TP 3 -\-encoding\ name -ソースファイルのエンコーディングの名前 ( \f2EUCJIS/SJIS\fP など) を指定します。 このオプションが指定されていない場合は、プラットフォームのデフォルトコンバータが使われます。 -.LP -\-docencoding および \-charset も参照してください。 -.LP -.TP 3 -\-Jflag -javadoc を実行する実行時システム java に、\f2flag\fP を直接渡します。 \f2J\fP と \f2flag\fP の間に空白を入れないように注意してください。たとえば、生成ドキュメントの処理用として32M バイトのメモリーをシステムで確保しておく必要がある場合には、java の \f2\-Xmx\fP オプションを次のように呼び出します。\f2\-Xms\fP は省略可能です。これは、メモリーの初期サイズを設定するだけのオプションで、メモリーの最低必要量がわかっている場合に便利です。 -.nf -\f3 -.fl - % \fP\f3javadoc \-J\-Xmx32m \-J\-Xms32m\fP \f3com.mypackage\fP -.fl -.fi -使用している javadoc のバージョンを確認するには、次のように Java の\f2「\-version」\fPオプションを呼び出します。 -.nf -\f3 -.fl - % \fP\f3javadoc \-J\-version\fP -.fl - java version "1.2" -.fl - Classic VM (build JDK\-1.2\-V, green threads, sunwjit) -.fl -.fi -出力ストリームには標準ドックレットのバージョン番号が含まれます。 +.PP +\-splitindex +.RS 4 +索引ファイルをアルファベットごとに複数のファイルに分割し、文字ごとに1つのファイルと、アルファベット以外の記号で始まる索引エントリ用に1つのファイルを作成します。 .RE -.SS -標準ドックレットが提供するオプション -.RS 3 -.TP 3 -\-d\ directory -生成された HTML ファイルを保存する生成先ディレクトリを指定します(「d」は「生成先 (destination)」の意味)。このオプションを省略すると、生成されたファイルは現在のディレクトリに保存されます。値 \f2directory\fP には、絶対ディレクトリ、または現在の作業ディレクトリからの相対ディレクトリを指定できます。バージョン 1.4 では、javadoc を実行すると生成先ディレクトリが自動的に作成されます。 -.LP -たとえば次の場合、パッケージ \f2com.mypackage\fP のドキュメントが生成され、その結果が \f2/home/user/doc/\fP ディレクトリに保存されます。 -.nf -\f3 -.fl - % \fP\f3javadoc \-d /home/user/doc com.mypackage\fP -.fl -.fi -.LP -.TP 3 -\-use -ドキュメント化されるクラスおよびパッケージごとに 1 つの「使用」ページを組み込みます。このページには、その特定のクラスまたはパッケージの API を使っているパッケージ、クラス、メソッド、コンストラクタ、およびフィールドが記述されます。たとえば、クラス C を例にとると、クラス C を使っているものとしては、C のサブクラス、C として宣言されているフィールド、C を返すメソッド、および、型 C のパラメータを持つメソッドとコンストラクタがあります。 -.LP -たとえば、String の [使用] ページに何が表示されるかを見てみましょう。java.awt.Font クラスの \f2getName()\fP メソッドは、 \f2String\fP 型の値を \f2返します\fP。したがって、 \f2getName()\fP は \f2String\fP を使用しているので、String の [使用] ページに \f2このメソッドが表示されます\fP。 -.LP -ただし、ドキュメント化されるのは API の使用だけであって、実装はドキュメント化されません。あるメソッドが、その実装の中で \f2String\fP を使っていても、引数として文字列をとったり、文字列を返したりしない場合は、 \f2String\fP の「使用」とはみなされません。 -.LP -生成された [使用] ページにアクセスするには、目的のクラスまたはパッケージに移動し、ナビゲーションバーの [使用] リンクをクリックします。 -.TP 3 -\-version -生成ドキュメントに、@version のテキストを組み込みます。このテキストは、デフォルトでは省略されます。使用している Javadoc ツールのバージョンを確認するには \f2\-J\-version\fP オプションを使用します。 -.LP -.TP 3 -\-author -生成ドキュメントに、@author のテキストを組み込みます。 -.LP -.TP 3 -\-splitindex -索引ファイルをアルファベットごとに複数のファイルに分割し、文字ごとに 1 つのファイルと、アルファベット以外の文字で始まる索引エントリ用に 1 つのファイルを作成します。 -.LP -.TP 3 -\-windowtitle\ title -HTML の <title> タグに配置するタイトルを指定します。指定したタイトルは、ウィンドウのタイトルや、このページに対して作成されたブラウザのブックマーク (お気に入り) に表示されます。このタイトルには HTML タグを含めないでください。タイトルに HTML タグが含まれていると、ブラウザがタグを正しく解釈できません。\f2title\fP の中で引用符を使う場合は、引用符をエスケープする必要があります。\-windowtitle が省略されている場合、Javadoc ツールは、このオプションの代わりに \-doctitle の値を使います。 -.nf -\f3 -.fl - % \fP\f3javadoc \-windowtitle "Java SE Platform" com.mypackage\fP -.fl -.fi -.TP 3 -\-doctitle\ title -概要ファイルの最上部の近くに配置するタイトルを指定します。タイトルは中央揃えになり、レベル 1 の見出しとして、上部ナビゲーションバーのすぐ下に置かれます。\f2title\fP には、HTML タグと空白を含めることができますが、これらを含める場合は、全体を引用符で囲まなければなりません。\f2title\fP の中で引用符を使う場合は、引用符をエスケープする必要があります。 -.nf -\f3 -.fl - % \fP\f3javadoc \-doctitle "Java(TM)" com.mypackage\fP -.fl -.fi -.TP 3 -\-title\ title -\f3このオプションはもう存在していません。\fPこのオプションは Javadoc 1.2 のベータ版にしか存在していませんでした。このオプションの名前は \f2\-doctitle\fP に変更されました。名前を変更した理由は、このオプションが、ウィンドウのタイトルではなくドキュメントのタイトルを定義することを明確にするためです。 -.LP -.TP 3 -\-header\ header -各出力ファイルの上端に配置するヘッダーテキストを指定します。ヘッダーは、上部ナビゲーションバーの右側に配置されます。\f2header\fP には、HTML タグと空白を含めることができますが、これらを含める場合は、全体を引用符で囲まなければなりません。\f2header\fP の中で引用符を使う場合は、引用符をエスケープする必要があります。 -.nf -\f3 -.fl - % \fP\f3javadoc \-header "<b>Java 2 Platform </b><br>v1.4" com.mypackage\fP -.fl -.fi -.LP -.TP 3 -\-footer\ footer -各出力ファイルの下端に配置するフッターテキストを指定します。フッターは、下部ナビゲーションバーの右側に配置されます。\f2footer\fP には、HTML タグと空白を含めることができますが、これらを含める場合は、全体を引用符で囲まなければなりません。\f2footer\fP の中で引用符を使う場合は、引用符をエスケープする必要があります。 -.LP -.TP 3 -\-top -各出力ファイルの上端に配置するテキストを指定します。 -.LP -.TP 3 -\-bottom\ text -各出力ファイルの最下部に配置するテキストを指定します。このテキストは、下部ナビゲーションバーより下の、ページの最下部に配置されます。 \f2text\fP には、HTML タグと空白を含めることができますが、これらを含める場合は、全体を引用符で囲まなければなりません。引用符を \f2text\fP 内で使用する場合、引用符をエスケープしなければならない可能性があります。 -.LP -.TP 3 -\-link\ extdocURL -javadoc により生成された既存の外部参照クラスのドキュメンテーションへのリンクを作成します。引数を 1 つとります。 -.LP -.RS 3 -.TP 2 -o -\f4extdocURL\fP は、リンク先として指定する、javadoc によって生成された外部ドキュメントを含むディレクトリの絶対 URL または相対 URL です。あとで例を示します。このディレクトリ内にパッケージリストファイルが存在していなければなりません。 存在しない場合は、\f2\-linkoffline\fP を使用します。Javadoc ツールは、 \f2package\-list\fP ファイルからパッケージ名を読み取ったあと、その URL でそれらのパッケージにリンクします。Javadoc ツールの実行時に、\f2extdocURL\fP の値がそのまま、作成された \f2<A HREF>\fP リンク内にコピーされます。したがって、\f2extdocURL\fP はファイルへの URL ではなく「ディレクトリへの URL」でなければなりません。 -.LP -\f2extdocURL\fP への絶対リンクを使用すると、ユーザーのドキュメントを任意の Web サイト上のドキュメントにリンクできます。相対位置へリンクするだけでよい場合は相対リンクを使用できます。相対リンクの場合、ユーザーが渡す値は、( \f2\-d\fP で指定された) 生成先ディレクトリから、リンク先となるパッケージを含むディレクトリへの相対パスにすべきです。 -.LP -通常、絶対リンクを指定する場合は、 \f2http:\fP リンクを使用します。Web サーバーを持たないファイルシステムにリンクする場合は、 \f2file: リンクを使用できます。\fP ただし、この方法は、すべてのユーザーが生成された同じファイルシステムを共有するドキュメントにアクセスする必要がある場合以外は使用しないでください。 -.LP -すべての場合、すべてのオペレーティングシステムで、絶対 URL と相対 URL、「http:」ベースと「file:」ベースにかかわらず、スラッシュを区切り文字として使用します ( -.na -\f2URL Memo\fP @ -.fi -http://www.ietf.org/rfc/rfc1738.txt で指定)。 -.RS 3 -.TP 3 -http: ベースの絶対リンク: -\f2\-link http://<host>/<directory>/<directory>/.../<name>\fP -.TP 3 -file: ベースの絶対リンク: -\f2\-link file://<host>/<directory>/<directory>/.../<name>\fP -.TP 3 -相対リンク: -\f2\-link <directory>/<directory>/.../<name>\fP +.PP +\-windowtitle \fItitle\fR +.RS 4 +HTMLの\fI<title>\fRタグに配置するタイトルを指定します。\fItitle\fRタグに指定したテキストは、ウィンドウのタイトルや、このページに対して作成されたブラウザのブックマーク(お気に入り)に表示されます。このタイトルにはHTMLタグを含めないでください。タイトルにHTMLタグが含まれていると、ブラウザがタグを正しく解釈できません。\fItitle\fRタグ内の内部の二重引用符はエスケープ文字を使用してマークします。\fI\-windowtitle\fRオプションを省略すると、\fIjavadoc\fRコマンドは、\fI\-windowtitle\fRオプションのかわりに、\fI\-doctitle\fRオプションの値を使用します。たとえば、\fIjavadoc \-windowtitle "Java SE Platform" com\&.mypackage\fRです。 .RE +.PP +\-doctitle \fItitle\fR +.RS 4 +概要サマリー・ファイルの最上部の近くに配置するタイトルを指定します。\fItitle\fRタグに指定したテキストは中央揃えになり、レベル1の見出しとして、上部ナビゲーション・バーのすぐ下に置かれます。\fItitle\fRタグにはHTMLタグおよび空白文字を含めることができますが、その場合、タイトルを引用符で囲む必要があります。\fItitle\fRタグの内部で引用符を使用する場合は、エスケープする必要があります。たとえば、\fIjavadoc \-header "<b>Java Platform </b><br>v1\&.4" com\&.mypackage\fRです。 .RE -.LP -javadoc の 1 回の実行で複数の \f2\-link\fP オプションを指定すれば、複数のドキュメントへのリンクを作成できます。 \f3\-linkoffline または \-link の選択\fP -.br -\f2\-link\fPを使用する場合: -.RS 3 -.TP 2 -o -外部 API ドキュメントへの相対パスを使用する場合 -.TP 2 -o -外部 API ドキュメントへの絶対 URL を使用する場合 (プログラムがその URL に接続し、読み取りを行うことがシェルによって許可されている場合) +.PP +\-title \fItitle\fR +.RS 4 +すでに存在しません。Javadoc 1\&.2のベータ版にしか存在していませんでした。このオプションは、\fI\-doctitle\fRという名前に変更されました。名前を変更した理由は、このオプションが、ウィンドウのタイトルではなくドキュメントのタイトルを定義することを明確にするためです。 .RE -\f2\-linkoffline\fP を使用する場合: -.RS 3 -.TP 2 -o -外部 API ドキュメントへの絶対 URL を使用する場合 (プログラムがその URL に接続し、読み取りを行うことがシェルによって許可されていない場合)このような状況は、リンク先のドキュメントがファイアウォールの向こう側にある場合に発生します。 +.PP +\-header \fIheader\fR +.RS 4 +各出力ファイルの最上部に配置するヘッダー・テキストを指定します。ヘッダーは、ナビゲーション・バーの右上に配置されます。\fIheader\fRにはHTMLタグおよび空白文字を含めることができますが、その場合、\fIheader\fRを引用符で囲む必要があります。ヘッダー内部の引用符にはエスケープ文字を使用します。たとえば、\fIjavadoc \-header "<b>Java Platform </b><br>v1\&.4" com\&.mypackage\fRです。 .RE -.LP -\f3外部ドキュメントへの絶対リンクの使用例\fP \- \f2java.lang\fP、 \f2java.io\fP 、その他の Java プラットフォームパッケージ ( -.na -\f2http://download.oracle.com/javase/7/docs/api/\fP @ -.fi -http://download.oracle.com/javase/7/docs/api/ 内) にリンクしたい場合があります。次のコマンドは、Java SE プラットフォームパッケージへのリンクを含んだ、パッケージ \f2com.mypackage\fP のドキュメントを生成します。生成されたドキュメントには、たとえばクラスツリー内の \f2Object\fP クラスへのリンクが含まれています。なお、 \f2\-sourcepath\fP や \f2\-d\fP など、その他のオプションは示していません。 +.PP +\-footer \fIfooter\fR +.RS 4 +各出力ファイルの最下部に配置するフッター・テキストを指定します。\fIfooter\fRの値は、ナビゲーション・バーの右下に配置されます。\fIfooter\fRにはHTMLタグおよび空白文字を含めることができますが、その場合、\fIfooter\fRを引用符で囲む必要があります。フッター内部の引用符にはエスケープ文字を使用します。 +.RE +.PP +\-top +.RS 4 +各出力ファイルの最上部に配置するテキストを指定します。 +.RE +.PP +\-bottom \fItext\fR +.RS 4 +各出力ファイルの最下部に配置するテキストを指定します。このテキストは、下部ナビゲーション・バーより下の、ページの最下部に配置されます。テキストにはHTMLタグおよび空白文字を含めることができますが、その場合、テキストを引用符で囲む必要があります。テキスト内部の引用符にはエスケープ文字を使用します。 +.RE +.PP +\-link \fIextdocURL\fR +.RS 4 +既存のJavadocにより生成された外部参照クラスのドキュメントへのリンクを作成します。\fIextdocURL\fR引数は、リンク先として指定する、Javadocにより生成された外部ドキュメントを含むディレクトリの絶対URLまたは相対URLです。指定した\fIjavadoc\fRコマンドの実行で、複数の\fI\-link\fRオプションを指定して複数のドキュメントへのリンクを作成できます。 +.sp +このディレクトリ内にpackage\-listファイルが存在する必要があります(存在しない場合は、\fI\-linkoffline\fRオプションを使用します)。\fIjavadoc\fRコマンドは、package\-listファイルからパッケージ名を読み取った後、そのURLでこれらのパッケージにリンクします。\fIjavadoc\fRコマンドの実行時に、\fIextdocURL\fRの値が、作成された\fI<A HREF>\fRリンク内にコピーされます。したがって、\fIextdocURL\fRはファイルではなくディレクトリへのURLである必要があります。\fIextdocURL\fRに絶対リンクを使用すると、ユーザーのドキュメントを任意のWebサイト上のドキュメントにリンクできます。相対位置へリンクするのみの場合は相対リンクを使用できます。相対リンクを使用する場合、渡す値は宛先ディレクトリから、リンクされているパッケージを含むディレクトリへである必要があります(\fI\-d\fRオプションで指定)。絶対リンクを指定する場合、通常、HTTPリンクを使用します。ただし、Webサーバーを持たないファイル・システムにリンクする場合は、ファイル・リンクを使用できます。生成されたドキュメンテーションにアクセスする全員が同じファイル・システムを共有する場合にのみファイル・リンクを使用します。どの場合も、どのオペレーティング・システムでも、URLが絶対または相対のいずれでも、また\fIh\fR\fIttp:\fRまたは\fIf\fR\fIile:\fRのいずれでも、URLメモ: Uniform Resource Locators +(http://www\&.ietf\&.org/rfc/rfc1738\&.txt)に指定されているとおり、区切り文字としてスラッシュを使用します。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl - % \fP\f3javadoc \-link http://download.oracle.com/javase/7/docs/api/ com.mypackage\fP -.fl +\-link http://<host>/<directory>/<directory>/\&.\&.\&./<name> +\-link file://<host>/<directory>/<directory>/\&.\&.\&./<name> +\-link <directory>/<directory>/\&.\&.\&./<name> .fi -\f3外部ドキュメントへの相対リンクの使用例\fP \- 2 つのパッケージがあり、そのドキュメントが Javadoc ツールを複数回実行した結果生成されたものであるとします。さらに、これらのドキュメントが相対パスで分割されているとします。この例の場合、パッケージは、API である \f2com.apipackage\fP と、SPI (サービスプロバイダインタフェース) である \f2com.spipackage\fP です。ドキュメントの格納先は、 \f2docs/api/com/apipackage\fP と \f2docs/spi/com/spipackage\fP です。API パッケージのドキュメントはすでに生成済みで、 \f2docs\fP がカレントディレクトリになっていると仮定すると、API ドキュメントへのリンクを含む SPI パッケージをドキュメント化するには、次のコマンドを実行します。 +.if n \{\ +.RE +.\} +.RE +\-linkofflineおよび\-linkオプションの違い.PP +次の場合に、\fI\-link\fRオプションを使用します。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +外部APIドキュメントへの相対パスを使用する場合。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +外部APIドキュメントへの絶対URLを使用する場合(そのURLに接続し、読取りを行うことがシェルによって許可されている場合)。 +.RE +.PP +外部APIドキュメントへの絶対URLを使用する場合(そのURLに接続し、読取りを行うことがシェルによって許可されていない場合)は\fI\-linkoffline\fRオプションを使用します。このような状況は、ファイアウォールの内側からファイアウォールの外側にあるドキュメントにリンクしようとする場合に発生します。 +.PP +\fBExample 1\fR, 外部ドキュメントへの絶対リンク +.RS 4 +http://docs\&.oracle\&.com/javase/8/docs/api/index\&.htmlに示すような、\fIjava\&.lang\fR、\fIjava\&.io\fRおよびその他のJavaプラットフォーム・パッケージにリンクする場合、次のコマンドを使用します +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl - % \fP\f3javadoc \-d ./spi \-link ../api com.spipackage\fP -.fl +javadoc \-link http://docs\&.oracle\&.com/javase/8/docs/api/ com\&.mypackage .fi -.LP -\f2\-link\fP の引数は、生成先ディレクトリ (\f2docs/spi\fP) からの相対パスです。 -.LP -\f3詳細\fP \- \f2\-link\fP オプションを使うと、「コードからは参照されていても、Javadoc の今回の実行ではドキュメント化されない」というクラスにリンクできるようになります。リンクから有効なページに移動できるようにするには、それらの HTML ページがある場所を調べ、その場所を \f2extdocURL\fP に指定する必要があります。これにより、たとえば、サードパーティーのドキュメントから \f2http://java.sun.com 上の java.*\fP のドキュメントへのリンクが \f2可能となります\fP。 -.LP -今回の実行で Javadoc によって生成されるドキュメント内の API だけを対象に \f2リンクを作成する場合は、\fP \-link オプションを省略します。 \f2\-link\fP オプションが指定されていない場合、Javadoc ツールは、外部参照されたドキュメントへのリンクを作成しません。これは、そのドキュメントが存在するかどうか、および存在する場合はその場所を判別できないからです。 -.LP -このオプションでは、生成ドキュメント内の複数の場所にリンクを作成できます。 -.LP -もう 1 つの用途は、パッケージセット間でのクロスリンクです。一方のパッケージセットに対して javadoc を実行したあと、他方のパッケージセットに対して javadoc を再度実行することにより、両セット間で双方向のリンクを作成できます。 -.LP -\f3クラスの参照方法\fP \- 外部参照クラスへのリンクを、テキストラベルだけではなく実際に表示するには、次の方法でクラスを参照する必要があります。メソッドの本体でクラスを参照するだけでは十分ではありません。それらのクラスは、 \f2import\fP 文、宣言のいずれの場所で参照されている必要があります。Here are examples of how the class \f2java.io.File\fP can be referenced: -.RS 3 -.TP 2 -o -すべての種類の \f2import\fP 文の場合: ワイルドカードによるインポート、名前による明示的なインポート、または \f2java.lang.* に対する自動的なインポート\fP。たとえば、次のようにすれば十分です。 -.br -\f2import java.io.*;\fP -.br -1.3.x および 1.2.x では、名前による明示的なインポートだけです。ワイルドカードによるインポート文も、 \f2java.lang.* の自動インポートも使用できません\fP。 -.TP 2 -o +.if n \{\ +.RE +.\} +このコマンドは、Java SEプラットフォーム・パッケージへのリンク持つ\fIcom\&.mypackage\fRパッケージのドキュメントを生成します。生成ドキュメントには、たとえばクラス\fItrees\fR内の\fIObject\fRクラスへのリンクが含まれています。\fI\-sourcepath\fRや\fI\-d\fRなどの他のオプションは表示されません。 +.RE +.PP +\fBExample 2\fR, 外部ドキュメントへの相対リンク +.RS 4 +この例では、2つのパッケージがあり、そのドキュメントは\fIjavadoc\fRコマンドを複数回実行した結果生成されたものです。さらに、これらのドキュメントは相対パスで分割されています。パッケージは、APIである\fIcom\&.apipackage\fRと、SPI(サービス・プロバイダ・インタフェース)であるc\fIom\&.spipackage\fRです。ドキュメントの格納先は、docs/api/com/apipackageとdocs/spi/com/spipackageです。APIパッケージのドキュメントはすでに生成されていて、docsが現在のディレクトリである場合、APIドキュメントへのリンクを持つSPIパッケージをドキュメント化するには、次のコマンドを実行します。\fIjavadoc \-d \&./spi \-link \&.\&./api com\&.spipackage\fR +.sp +\fI\-link\fRオプションは、宛先ディレクトリ(docs/spi)からの相対パスです。 +.RE +注意.PP +\fI\-link\fRオプションを使用すると、コードからは参照されていても、今回の\fIjavadoc\fRの実行ではドキュメント化されないクラスにリンクできるようになります。リンクから有効なページに移動できるようにするには、それらのHTMLページがある場所を調べ、その場所を\fIextdocURL\fRに指定する必要があります。これにより、サードパーティのドキュメンテーションがjava\&.*ドキュメンテーション(http://docs\&.oracle\&.com)へリンクすることができます。\fIjavadoc\fRコマンドで、現在の実行で生成しているドキュメンテーション内のAPIへのリンクのみを作成する場合には、\fI\-link\fRオプションを省略します。\fI\-link\fRオプションを指定しないと、\fIjavadoc\fRコマンドは外部参照のためのドキュメンテーションへのリンクを作成しません。ドキュメンテーションが存在するのかどうか、またはどこに存在するのかがわからないからです。\fI\-link\fRオプションでは、生成ドキュメンテーション内の複数の場所にリンクを作成できます。ソース・ファイルの処理を参照してください。もう1つの用途は、パッケージ・セットの間にクロスリンクを作成することです。一方のパッケージ・セットに対して\fIjavadoc\fRコマンドを実行した後、他方のパッケージ・セットに対して\fIjavadoc\fRコマンドを再度実行すると、両セット間に双方向のリンクを作成できます。 +クラスの参照方法.PP +表示される外部参照クラスへのリンクの場合(およびそのテキスト・ラベルだけではなく)、クラスは次の方法で参照される必要があります。メソッドの本体でクラスを参照するのみでは十分ではありません。\fIimport\fR文、宣言のいずれかで参照する必要があります。次に、クラス\fIjava\&.io\&.File\fRを参照する方法の例を示します。 +.PP +すべてのタイプのimport文の場合。ワイルドカードによるインポート、名前による明示的なインポート、または\fIjava\&.lang\&.*\fRに対する自動インポート。 +.PP +Java SE 1\&.3\&.\fIn\fRおよび1\&.2\&.\fIn\fRでは、名前による明示的なインポートのみ機能します。ワイルドカードによる\fIimport\fR文も、\fIimport java\&.lang\&.*\fRの自動インポートも機能しません。 +.PP 宣言の場合: -.br -\f2void foo(File f) {}\fP -.br -この参照を使用し、メソッド、コンストラクタ、フィールド、クラス、またはインタフェースの戻り値の型またはパラメータの型に置くか、 \f2implements\fP、 \f2extends\fP 、または \f2throws\fP 文に置きます。 +\fIvoid mymethod(File f) {}\fR +.PP +参照は、メソッド、コンストラクタ、フィールド、クラスまたはインタフェースの戻り型またはパラメータ・タイプ、あるいは実装、拡張またはスロー文にあります。 +.PP +重要な結果として、\fI\-link\fRオプションを使用しても、この制限のために誤って表示されないリンクが多数発生する可能性があります。テキストはハイパーテキスト・リンクが付けられずに表示されます。リンクが表示する警告から、これらのリンクを認識できます。クラスを正しく参照し、それによってリンクを追加するための最も簡単な方法はそのクラスをインポートすることです。 +パッケージ・リスト.PP +\fI\-link\fRオプションには、\fIjavadoc\fRコマンドによって生成されるpackage\-listという名前のファイルが、\fI\-link\fRオプションに指定したURLに存在していることが必要です。package\-listファイルは、その場所にあるドキュメント化されたパッケージの名前のリストが入った単純なテキスト・ファイルです。前述の例では、\fIjavadoc\fRコマンドは、指定したURLでpackage\-listという名前のファイルを検索し、パッケージ名を読み取って、そのURLでこれらのパッケージにリンクします。 +.PP +たとえば、Java SE APIのパッケージ・リストは +http://docs\&.oracle\&.com/javase/8/docs/api/package\-listにあります。 +.PP +このパッケージ・リストは次のような内容で始まっています。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +java\&.applet +java\&.awt +java\&.awt\&.color +java\&.awt\&.datatransfer +java\&.awt\&.dnd +java\&.awt\&.event +java\&.awt\&.font +and so on \&.\&.\&.\&. +.fi +.if n \{\ .RE -.LP -重要な結果として、 \f2\-link\fP オプションの使用時に、この制限のために誤って表示されないリンクが多数発生する可能性があります。テキストはハイパーテキストリンクが付けられずに表示されます。これらのリンクが表示する警告から、このリンクを認識できます。クラスを正しく参照し、それによってリンクを追加するためのもっとも安全な方法は上で説明したとおり、当該のクラスをインポートすることです。 -.LP -\f3パッケージリスト\fP \- \f2\-link\fP オプションが正しく機能するには、Javadoc ツールによって生成される \f2package\-list\fP という名前のファイルが、ユーザーが \f2\-link\fP に指定した URL に存在している必要があります。 \f2package\-list\fP ファイルは、その場所にあるドキュメント化されたパッケージの名前のリストが入った単純なテキストファイルです。前の例では、Javadoc ツールは、指定された URL で \f2package\-list\fP という名前のファイルを検索し、パッケージ名を読み込んだあと、その URL にあるそれらのパッケージへのリンクを作成しました。 -.LP -たとえば、Java SE 6 API のパッケージリストは -.na -\f2http://download.oracle.com/javase/7/docs/api/package\-list\fP @ -.fi -http://download.oracle.com/javase/7/docs/api/package\-list にあり、次のような内容で始まっています。 -.nf -\f3 -.fl - java.applet -.fl - java.awt -.fl - java.awt.color -.fl - java.awt.datatransfer -.fl - java.awt.dnd -.fl - java.awt.event -.fl - java.awt.font -.fl - その他 -.fl -\fP -.fi -.LP -\f2\-link\fP オプションを指定せずに javadoc を実行した場合、外部参照クラスに属する名前を見つけると、javadoc はその名前をリンクを持たない形で出力します。一方、 \f2\-link\fP オプションが指定された場合、Javadoc ツールは、 \f2指定された\fP \f2extdocURL\fP の場所にある package\-list ファイル内で、そのパッケージ名を検索します。パッケージ名が見つかると、\f2extdocURL\fP が名前の前に付加されます。 -.LP -すべてのリンクが正しく機能するためには、外部参照のすべてのドキュメントが、指定した URL に存在していなければなりません。Javadoc ツールは、指定された package\-list が存在するかどうかを調べるだけで、指定された URL に目的のページが存在するかどうかはチェックしません。 -.LP -\f3複数のリンク\fP \- 複数の \f2\-link\fP オプションを指定すると、任意の数の外部生成ドキュメントへのリンクを作成できます。Javadoc 1.2 には、複数の \f2\-link\fP コマンドを指定できないというバグがあります。これは 1.2.2 で修正されました。 -.LP -リンクする外部ドキュメントごとに、次のように別々のリンクオプションを指定します。 -.LP -\ \ \f2% \fP\f4javadoc \-link\fP \f2extdocURL1\fP \f4\-link\fP \f2extdocURL2\fP \f2... \fP\f4\-link\fP \f2extdocURLn\fP \f4com.mypackage\fP -.LP -\f2extdocURL1\fP、\f2extdocURL2\fP、... \f2extdocURLn\fP は、それぞれ外部ドキュメントのルートを指し、各ルートには、 \f2package\-list\fP という名前のファイルが入っています。 -.LP -\f3クロスリンク\fP \- まだ生成されていない 2 つ以上のドキュメントをクロスリンクする場合は、「ブートストラップ」が必要になります。つまり、どのドキュメントについても \f2package\-list\fP が存在していない場合は、最初のドキュメントに対して Javadoc ツールを実行する時点で、2 番目のドキュメントの \f2package\-list\fP はまだ存在していません。したがって、外部リンクを作成するには、2 番目のドキュメントを生成したあとで、最初のドキュメントを生成し直す必要があります。 -.LP -この場合、最初のドキュメント生成の目的は、 \f2package\-list\fP を作成することです。パッケージ名をすべて把握している場合は、package\-list を手動で作成してもかまいません。次に、2 番目のドキュメントとその外部リンクを生成します。必要な外部の \f2package\-list\fP ファイルが存在しない場合は、Javadoc ツールから警告が出力されます。 -.LP -.TP 3 -\-linkoffline\ extdocURL\ packagelistLoc -このオプションは \f2\-link\fP のバリエーションの 1 つです。どちらも、外部参照クラスの javadoc 生成ドキュメントへのリンクを作成します。Javadoc \f2ツール自体が\fP オフラインになっているとき (Web 接続を使ってドキュメントにアクセスできないとき)、Web 上のドキュメントにリンクするには、\-linkoffline オプションを使用します。 -.LP -厳密には、 \f2外部\fP ドキュメントの \f2package\-list\fP ファイルにアクセスできないとき、またはこのファイルが \f2extdocURL\fP で指定された場所とは異なる場所 (通常、\f2packageListLoc\fP で指定可能なローカルな場所) に存在するとき、\-linkoffline を使用します。したがって、WWW 経由でしか \f2extdocURL\fP にアクセスできない場合、 \f2\-linkoffline\fP を指定することにより、ドキュメントの生成時に Javadoc ツールが Web に接続できなければならないという制約がなくなります。 -.LP -さらに、ドキュメントを更新するための「ハッキング」としての使用も可能です。パッケージのセット全体に対して javadoc を実行したあと、変更した一部のパッケージだけに対して javadoc を実行します。こうして、更新されたファイルを、オリジナルのファイルセットに挿入できるようにします。例をあとで示します。 -.LP -\f2\-linkoffline\fP オプションは引数を 2 つ取ります。1 つは、 \f2<a href>\fP リンクに組み込まれる文字列を表す引数、もう 1 つは \f2package\-list\fP の検索場所を示す引数です。 -.RS 3 -.TP 2 -o -\f4extdocURL\fP は、リンク先として指定する、javadoc によって生成された外部ドキュメントを含むディレクトリの絶対 URL または相対 URL です。相対リンクの場合、その値は、( \f2\-d\fP で指定された) 生成先ディレクトリからリンク先パッケージのルートへの相対パスにすべきです。詳細は、\-link オプションの \f2extdocURL\fP \f2を参照\fP してください。 -.TP 2 -o -\f4packagelistLoc\fP は、外部ドキュメントの \f2package\-list\fP ファイルを含むディレクトリへのパスまたは URL です。これは、URL (http: または file:) でもファイルパスでもかまいませんし、絶対パスでも相対パスでもかまいません。相対パスの場合は、javadoc が実行されるカレントディレクトリからの相対パスとして指定します。ファイル名 \f2package\-list\fP は含めないでください。 +.\} +.PP +\fI\-link\fRオプションを指定せずに\fIjavadoc\fRを実行した場合、外部参照クラスに属する名前を見つけると、その名前をリンクなしで出力します。一方、\fI\-link\fRオプションを指定した場合、\fIjavadoc\fRコマンドは、指定された\fIextdocURL\fRの場所にあるpackage\-listファイルでそのパッケージ名を検索します。パッケージ名が見つかると、\fIextdocURL\fRが名前の前に付加されます。 +.PP +すべてのリンクが正しく機能するためには、外部参照のすべてのドキュメントが、指定したURLに存在する必要があります。\fIjavadoc\fRコマンドは、指定されたpackage\-listが存在するかどうかのみをチェックし、これらのページが存在するかどうかはチェックしません。 +複数のリンク.PP +複数の\fI\-link\fRオプションを指定すると、任意の数の外部生成ドキュメントへのリンクを作成できます。Javadoc 1\&.2には、複数の\fI\-link\fRオプションを指定できないという既知の不具合があります。これはJavadoc 1\&.2\&.2で修正されました。リンクする外部ドキュメントごとに、次のように別々のリンク・オプションを指定します。\fIjavadoc \-link extdocURL1 \-link extdocURL2 \&.\&.\&. \-link extdocURLn com\&.mypackage\fR +\fIextdocURL1\fR、\fIextdocURL2\fR、\&.\fI\&.\&. extdocURLn\fRは、それぞれ外部ドキュメントのルートを指し、各ルートには、package\-listという名前のファイルが入っています。 +クロスリンク.PP +以前に作成された複数のドキュメントをクロスリンクする場合、ブートストラップが必要になることがあります。どのドキュメントについてもpackage\-listが存在していない場合は、最初のドキュメントに対して\fIjavadoc\fRコマンドを実行する時点で、2番目のドキュメントのpackage\-listはまだ存在していません。したがって、外部リンクを作成するには、2番目のドキュメントを生成した後で、最初のドキュメントを生成しなおす必要があります。 +.PP +この場合、最初のドキュメント生成の目的は、package\-listを作成することです(パッケージ名を把握している場合は手動で作成してもかまいません)。次に、2番目のドキュメントとその外部リンクを生成します。必要な外部のpackage\-listファイルが存在しない場合は、\fIjavadoc\fRコマンドから警告が出力されます。 +.PP +\-linkoffline \fIextdocURL packagelistLoc\fR +.RS 4 +このオプションは\fI\-link\fRオプションのバリエーションです。両方とも、Javadocにより生成された外部参照クラスのドキュメントへのリンクを作成します。\fIjavadoc\fRコマンドがWeb接続を使用してドキュメントにアクセスできないとき、Web上のドキュメントにリンクするには、\fI\-link\fRo\fIffline\fRオプションを使用します。外部ドキュメントのpackage\-listファイルにアクセスできないとき、またはこのファイルが\fIextdocURL\fRで指定された場所には存在せず、\fIpackageListLoc\fRで指定できる別の場所(通常ローカル)に存在するとき、\fI\-linkoffline\fRオプションを使用します。\fIextdocURL\fRにWorld Wide Web上でしかアクセスできない場合は、\fI\-linkoffline\fRオプションを指定することにより、ドキュメントの生成時に\fIjavadoc\fRコマンドがWebに接続する必要があるという制約がなくなります。もう1つの用途は、ドキュメントを更新するための回避策として使用することです。パッケージのセット全体に対して\fIjavadoc\fRコマンドを実行した後、変更した一部のパッケージに対してのみ\fIjavadoc\fRコマンドを再度実行して、更新されたファイルを、オリジナルのセットに挿入できるようにします。次に例を示します。\fI\-linkoffline\fRオプションは引数を2つ取ります。第1引数は\fI<a href>\fRリンクに組み込まれる文字列を指定し、第2引数はpackage\-listの検索場所を\fI\-linkoffline\fRに伝えます。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fIextdocURL\fRの値は、リンク先として指定する、Javadocにより生成された外部ドキュメントを含むディレクトリの絶対URLまたは相対URLです。相対URLの場合、値は、生成先ディレクトリ(\fI\-d\fRオプションで指定)からリンク先となるパッケージのルートへの相対パスにする必要があります。詳細は、\fI\-link\fRオプションの\fIextdocURL\fRを参照してください。 .RE -.LP -1 回の javadoc 実行で複数の \f2\-linkoffline\fP オプションを指定できます。1.2.2 より前は、複数のオプションを指定することはできませんでした。 -.LP -\f3外部ドキュメントへの絶対リンクの使用例\fP \- http://download.oracle.com/javase/7/docs/api/ 内の \f2java.lang\fP、 \f2java.io\fP 、およびその他の Java SE プラットフォームパッケージ \f2にリンクしたくても、\fPWeb にアクセスできない場合を考えます。ブラウザで \f2、\fP -.na -\f2http://download.oracle.com/javase/7/docs/api/package\-list\fP @ -.fi -http://download.oracle.com/javase/7/docs/api/package\-list にある package\-list ファイルを開き、それをローカルディレクトリに保存し、第 2 引数 \f2packagelistLoc\fP でこのローカルコピーへのパスを指定します。この例では、パッケージリストファイルはカレントディレクトリ "\f2.\fP" に保存されています。次のコマンドは、Java SE プラットフォームパッケージへのリンクを含んだ、パッケージ \f2com.mypackage\fP のドキュメントを生成します。生成されたドキュメントには、たとえばクラスツリー内の \f2Object\fP クラスへのリンクが含まれています。なお、 \f2\-sourcepath\fP など、その他のオプションは示していません。 -.nf -\f3 -.fl -% \fP\f3javadoc \-linkoffline http://download.oracle.com/javase/7/docs/api/ . com.mypackage\fP -.fl -.fi -.LP -\f3外部ドキュメントへの相対リンクの使用例\fP \- \f2\-linkoffline\fP で相対パスを使用することは、あまりありません。理由は単純で、通常は \f2\-link\fP で十分だからです。 \f2\-linkoffline\fP を使用する際、 \f2package\-list\fP には通常ローカルのファイルを指定します。 相対リンクを使用する際も、リンク先のファイルには通常ローカルのファイルを指定します。したがって、 \f2\-linkoffline の 2 つの引数に別々のパスを指定する必要はありません\fP。2 つの引数が同一である場合は、 \f2\-link\fP を使用できます。 \f2\-link\fP の相対リンクの例を参照してください。 -.LP -\f4package\-list\fP\f3 ファイルを手動で作成\fP \- \f2package\-list\fP ファイルがまだ存在しなくても、ドキュメントのリンク先のパッケージ名がわかっている場合は、このファイルを自分で作成し、packagelistLoc \f2でそのパスを指定することができます。\fPcom.apipackage が最初に生成される時点で \f2com.spipackage\fP のパッケージリストが存在していなかったという、 \f2前出のケースが\fP 一例として挙げられます。この方法は、パッケージ名はわかっているものの、まだ公開されていない、新しい外部ドキュメントにリンクするドキュメントを生成する必要がある場合に便利です。また、Javadoc 1.0 または 1.1 で生成されたパッケージの \f2package\-list\fP ファイルを作成する必要がある場合にも、この方法が使えます。これらのバージョンでは、 \f2package\-list\fP ファイルは生成されていませんでした。同様に、2 つの企業が未公開の \f2package\-list\fP ファイルを共有すれば、クロスリンクを含むドキュメントを同時にリリースすることも可能となります。 -.LP -\f3複数のドキュメントへのリンク\fP \- 参照先となる生成ドキュメントごとに \f2\-linkoffline\fP を 1 回ずつ含めることができます。わかりやすくするために、オプションごとに改行して示しています。 -.LP -\f2% \fP\f4javadoc \-linkoffline\fP \f2extdocURL1\fP \f2packagelistLoc1\fP \f2\\\fP -.br -\f2\ \ \ \ \ \ \ \ \ \ \fP\f4\-linkoffline\fP \f2extdocURL2\fP \f2packagelistLoc2\fP \f2\\\fP -.br -\f2\ \ \ \ \ \ \ \ \ \ ...\fP -.LP -\f3ドキュメントの更新\fP \- 前述の \f2\-linkoffline\fP オプションのもうひとつの用途は、プロジェクトに大量のパッケージが含まれていて、すでにツリー全体に対して javadoc の実行が完了している場合に、次の実行では、少量の変更を手早く加えたあと、ソースツリーのごく一部に対してだけ javadoc を再実行する場合に便利です。これは、ドキュメンテーションコメントに対してだけ変更を加え、宣言は変更しない場合にのみ正しく処理されるので、ハッキングのようなものです。ソースコードの宣言を追加、削除、または変更した場合は、索引、パッケージツリー、継承されるメンバーのリスト、「使用」ページなどの場所で、リンクが壊れることがあります。 -.LP -まず、この新しい小さな実行用として、新しい生成先ディレクトリ ( \f2update\fP と命名) を作成します。元の生成先ディレクトリの名前が \f2html\fP だったとします。もっとも単純な例では、 \f2html ディレクトリの親ディレクトリに移動 (cd) します\fP。 \f2\-linkoffline\fP の第 1 引数をカレントディレクトリ「.」に設定し、第 2 引数を、package\-list が含まれている \f2html\fP への相対パスに設定し、 \f2更新するパッケージのパッケージ名のみを\fP渡します。 -.nf -\f3 -.fl - % \fP\f3javadoc \-d update \-linkoffline . html com.mypackage\fP -.fl -.fi -Javadoc ツリーの終了後、 \f2update/com/package\fP 内の生成されたクラスのページをコピーし (概要や索引は除く)、 \f2html/com/package 内の元のファイルに上書きします\fP。 -.LP -.TP 3 -\-linksource\ -各ソースファイル (行番号付き) の HTML バージョンを作成し、標準 HTML ドキュメントからソースファイルへのリンクを追加します。リンクは、ソースファイル内に宣言されているクラス、インタフェース、コンストラクタ、メソッド、フィールドに対して作成されます。デフォルトコンストラクタ、生成されたクラスに対しては作成されません。 -.LP -\f3このオプションは、\fP\f4\-public\fP\f3、 \fP\f4\-package\fP\f3、 \fP\f4\-protected\fP\f3 、 \fP\f4\-private\fP\f3 の各オプションとは関係なく、非公開のクラス、フィールド、非公開のメソッドの本体をはじめとする組み込まれたソースファイル内のすべての非公開実装の詳細を公開します。\fP\f2\-private\fP オプションも併せて指定しないかぎり、非公開のすべてのクラスやインタフェースにリンク経由でアクセスできるとはかぎりません。 -.LP -各リンクは、その宣言内の識別子名の上に作成されます。たとえば、 \f2Button\fP クラスのソースコードへのリンクは、「Button」という語の上に作成されます。 -.nf -\f3 -.fl - public class Button -.fl - extends Component -.fl - implements Accessible -.fl -\fP -.fi -また、Button クラスの \f2getLabel()\fP メソッドのソースコードへのリンクは、「getLabel」という語の上に作成されます。 -.nf -\f3 -.fl - public String getLabel() -.fl -\fP -.fi -.LP -.TP 3 -\-group\ groupheading\ packagepattern:packagepattern:... -概要ページの複数のパッケージを、指定したグループに分けて、グループごとに表を作成します。各グループは、それぞれ別の \f2\-group\fP オプションで指定します。これらのグループは、コマンド行で指定した順序でページに表示されます。各グループ内では、パッケージがアルファベット順に並べられます。ある特定の \f2\-group\fP オプションでは、 \f2packagepattern\fP 式のリストに一致するパッケージが、 \f2groupheading\fP という見出しの表に表示されます。 -.RS 3 -.TP 2 -o -\f4groupheading\fP には、任意のテキストを指定でき、空白を含めることができます。指定したテキストは、グループの表見出しになります。 -.TP 2 -o -\f4packagepattern\fP には、任意のパッケージ名、または任意のパッケージ名の先頭部分とそれに続く 1 つのアスタリスク (\f2*\fP) を指定できます。 アスタリスクは、「任意の文字に一致する」という意味のワイルドカードです。ワイルドカードとして指定できるのは、アスタリスクだけです。1 つのグループには、コロン (\f2:\fP) で区切って複数のパターンを含めることができます。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fIpackagelistLoc\fRの値は、外部ドキュメントのpackage\-listファイルを含むディレクトリへのパスまたはURLです。これは、URL (http:またはfile:)でもファイル・パスでもかまいません。また、絶対パスと相対パスのどちらでもかまいません。相対パスの場合は、\fIjavadoc\fRコマンドが実行される現在のディレクトリからの相対パスとして指定します。package\-listファイル名を含めないでください。 +.sp +指定した\fIjavadoc\fRコマンドの実行で、複数の\fI\-link\fRオプションを指定できます。Javadoc 1\&.2\&.2より前では、\fI\-linkfile\fRオプションは1回しか指定できませんでした。 .RE -.LP -\f3注: パターンやパターンリスト内でアスタリスクを使う場合は、 \fP\f4"java.lang*:java.util" のように、パターンリストを引用符で囲む必要があります。\fP -.LP -ユーザーが \f2\-group\fP オプションを 1 つも指定しなかった場合、「パッケージ」という見出しの 1 つのグループ内に、すべてのパッケージが配置されます。ドキュメント化されるパッケージの中に、指定したグループのどのグループにも入らないパッケージがある場合、このようなパッケージは「その他のパッケージ」という見出しを持つ独立したグループに入れられます。 -.LP -たとえば、次のようにオプションを指定すると、ドキュメント化される 5 つのパッケージは、コアパッケージ、拡張機能パッケージ、およびその他のパッケージに分けられます。「java.lang*」では、最後のドットを指定していないことに注目してください。「java.lang.*」のようにドットを入れると、java.lang パッケージは除外されることになります。 -.nf -\f3 -.fl - % \fP\f3javadoc \-group "Core Packages" "java.lang*:java.util" -.fl - \-group "Extension Packages" "javax.*" -.fl - java.lang java.lang.reflect java.util javax.servlet java.new\fP -.fl -.fi -この結果、次のようなグループ化が行われます。 -.RS 3 -.TP 3 -コアパッケージ -\f2java.lang\fP -\f2java.lang.reflect\fP -\f2java.util\fP -.TP 3 -拡張機能パッケージ -\f2javax.servlet\fP -.TP 3 -その他のパッケージ -\f2java.new\fP .RE -.LP -.TP 3 -\-nodeprecated -推奨されない API をドキュメントに生成しないようにします。このオプションを指定すると、\-nodeprecatedlist オプションを指定した場合と同じ効果があることに加えて、ドキュメントのほかの部分全体でも、推奨されない API が生成されません。このオプションは、コードを記述しているとき、推奨されないコードによって気を散らされたくない場合に便利です。 -.LP -.TP 3 -\-nodeprecatedlist -推奨されない API のリストを含むファイル (deprecated\-list.html)、およびナビゲーションバーのそのページへのリンクが生成されないようにします。ただし、ドキュメントのほかの部分では、推奨されない API が生成されます。このオプションは、推奨されない API がソースコードに含まれておらず、ナビゲーションバーをすっきりと見せたい場合に便利です。 -.LP -.TP 3 -\-nosince -生成ドキュメントから、@since タグに対応する「導入されたバージョン」 セクションを省略します。 -.LP -.TP 3 -\-notree -生成されるドキュメントからクラスおよびインタフェースの階層ページを省略します。これらのページには、ナビゲーションバーの「ツリー」ボタンからアクセスできます。デフォルトでは、階層が生成されます。 -.LP -.TP 3 -\-noindex -生成ドキュメントから、索引を省略します。デフォルトでは、索引が生成されます。 -.LP -.TP 3 -\-nohelp -出力の各ページの最上部と最下部にあるナビゲーションバーから「ヘルプ」リンクを省略します。 -.LP -.TP 3 -\-nonavbar -生成されるページの最上部と最下部に表示されるナビゲーションバー、ヘッダー、およびフッターを生成しないようにします。このオプションは、bottom オプションには影響を与えません。 \f2\-nonavbar\fP オプションは、印刷するためだけにファイルを PostScript または PDF に変換する場合など、内容だけが重要で、ナビゲーションの必要がない場合に便利です。 -.LP -.TP 3 -\-helpfile\ path/filename -上部と下部のナビゲーションバーの「ヘルプ」リンクのリンク先となる代替ヘルプファイル \f2path/filename\fP のパスを指定します。このオプションが指定されないと、Javadoc ツールは、ツール内でハードコードされているヘルプファイル \f2help\-doc.html\fP を自動作成します。このオプションを使うと、そのデフォルトの動作をオーバーライドできます。\f2filename\fP にはどんなファイル名でも指定でき、 \f2help\-doc.html には限定されません。\fP Javadoc ツールは、ナビゲーションバー内のリンクを必要に応じて調整します。次に例を示します。 -.nf -\f3 -.fl - % \fP\f3javadoc \-helpfile /home/user/myhelp.html java.awt\fP -.fl -.fi -.TP 3 -\-stylesheetfile\ path/filename -代替 HTML スタイルシートファイルのパスを指定します。このオプションが指定されないと、Javadoc ツールは、ツール内でハードコードされているスタイルシートファイル \f2stylesheet.css\fP を自動作成します。このオプションを使うと、そのデフォルトの動作をオーバーライドできます。\f2filename\fP にはどんなファイル名でも指定でき、 \f2stylesheet.css には限定されません\fP。たとえば、 -.nf -\f3 -.fl - % \fP\f3javadoc \-stylesheetfile /home/user/mystylesheet.css com.mypackage\fP -.fl -.fi -.TP 3 -\-serialwarn -@serial タグがない場合は、コンパイル時に警告を生成します。デフォルトでは、Javadoc 1.2.2 以降のバージョンでは、直列化の警告は生成されません1.2.2 より前の初期バージョンでは、警告が生成されます。このオプションを使用すると、直列化の警告が表示されるので、デフォルトの直列化可能フィールドと \f2writeExternal\fP メソッドを適切にドキュメント化するのに役立ちます。 -.LP -.TP 3 -\-charset\ name -このドキュメント用の HTML 文字セットを指定します。この名前は、 -.na -\f2IANA Registry\fP @ -.fi -http://www.iana.org/assignments/character\-sets で与えられた、推奨される MIME 名でなければなりません。たとえば、 -.nf -\f3 -.fl - % \fP\f3javadoc \-charset "iso\-8859\-1" mypackage\fP -.fl -.fi -生成されるすべてのページの先頭に、次の行が挿入されます。 -.nf -\f3 -.fl - <META http\-equiv="Content\-Type" content="text/html; charset=ISO\-8859\-1"> -.fl -\fP -.fi -この META タグについては、 -.na -\f2HTML の標準\fP @ -.fi -http://www.w3.org/TR/REC\-html40/charset.html#h\-5.2.2 (4197265 および 4137321) を参照してください。 -.LP -\-encoding および \-docencoding も参照してください。 -.LP -.TP 3 -\-docencoding\ name -生成される HTML ファイルのエンコーディングを指定します。この名前は、 -.na -\f2IANA Registry\fP @ -.fi -http://www.iana.org/assignments/character\-sets で与えられた、推奨される MIME 名でなければなりません。このオプションを省略しながら \-encoding を使用した場合、生成される HTML ファイルのエンコードは、\-encoding によって決められます。例: -.nf -\f3 -.fl - % \fP\f3javadoc \-docencoding "ISO\-8859\-1" mypackage\fP -.fl -.fi -\-encoding および \-charset も参照してください。 -.LP -.TP 3 -\-keywords -HTML メタキーワードタグを、クラスごとに生成されるファイルに追加します。これらのタグは、メタタグを検索するサーチエンジンがページを見つける場合に役立ちます。インターネット全体を検索する多くのサーチエンジンは、ページがメタタグを誤用しているため、メタタグを調べません。一方、検索を自身の Web サイトに限定している企業では、サーチエンジンがメタタグを調べることによってメリットを得られます。 -.LP -メタタグには、クラスの完全修飾名と、フィールドおよびメソッドの修飾されていない名前が含まれます。コンストラクタは、クラス名と同じであるため含まれません。たとえば、クラス String は次のキーワードで開始します。 -.nf -\f3 -.fl - <META NAME="keywords" CONTENT="java.lang.String class"> -.fl - <META NAME="keywords" CONTENT="CASE_INSENSITIVE_ORDER"> -.fl - <META NAME="keywords" CONTENT="length()"> -.fl - <META NAME="keywords" CONTENT="charAt()"> -.fl -\fP -.fi -.LP -.TP 3 -\-tag\ \ tagname:Xaoptcmf:"taghead" -Javadoc ツールがドキュメンテーションコメント内の引数を 1 つ取る単純なカスタムブロックタグ \f2@\fP\f2tagname\fP を解釈できるようにします。Javadoc ツールはタグ名の「スペルチェック」を行うことができるので、ソースコード内に存在するすべてのカスタムタグについて、 \f2\-tag\fP オプションを含めることが重要です。今回の実行では出力されないタグは、X を付けて無効 \f2にします\fP。 -.LP -コロン (\f4:\fP) が常に区切り文字になります。tagname \f2でコロンを使用する方法については、\fP 「タグ名でのコロンの使用」を参照してください。 -.LP -\f2\-tag\fP オプションは、タグの見出し「taghead」を太字で出力します。 その次の行には、このオプションの引数で指定したテキストが続きます。 以下の例を参照してください。ブロックタグと同様、この引数のテキストにはインラインタグを含めることができます。このインラインタグも解釈されます。出力は、引数を 1 つ取る標準のタグ ( \f2@return\fP や \f2@author\fP など) の出力とよく似ています。\f2taghead\fP を省略すると、\f2tagname\fP が見出しとして表示されます。 -.LP -\f3タグの配置\fP \- 引数の \f4Xaoptcmf\fP 部分は、ソースコード内のタグを配置できる位置と、 を使ってこのタグを無効にできるかどうかを特定します。 \f2X\fP). タグの配置位置を制限しない場合は \f4a\fP を指定します。それ以外の文字の組み合わせも可能です。 \f4X\fP (タグの無効化) -.br -\f4a\fP (すべて) -.br -\f4o\fP (概要) -.br -\f4p\fP (パッケージ) -.br -\f4t\fP (型、つまりクラスとインタフェース) -.br -\f4c\fP (コンストラクタ) -.br -\f4m\fP (メソッド) -.br -\f4f\fP (フィールド) -.LP -\f3シングルタグの例\fP \- ソースコード内の任意の位置で使用できるタグのタグオプションの例を示します。 -.nf -\f3 -.fl - \-tag todo:a:"To Do:" -.fl -\fP -.fi -@todo をコンストラクタ、メソッド、フィールドのみで使用する場合は、以下のオプションを使用します。 -.nf -\f3 -.fl - \-tag todo:cmf:"To Do:" -.fl -\fP -.fi -上の例の最後のコロン (\f2:\fP) は、パラメータ区切り子ですが、見出しテキストの一部になっています (以下の例を参照)。次の例のように、 \f2@todo\fP タグを含むソースコードでは、いずれかのタグオプションを使用します。 -.nf -\f3 -.fl - @todo The documentation for this method needs work. -.fl -\fP -.fi -\f3タグ名にコロンを使用する\fP \- コロン (:) をバックスラッシュでエスケープすると、コロンをタグ名に使用することができます。このドキュメンテーションコメントの中では、次のように使用します。 -.nf -\f3 -.fl - /** -.fl - * @ejb:bean -.fl - */ -.fl -\fP -.fi -でこのタグオプションを使用すると、 -.nf -\f3 -.fl - \-tag ejb\\\\:bean:a:"EJB Bean:" -.fl -\fP -.fi -\f3タグ名のスペルチェック (タグの無効化)\fP \- ソースコード内に配置した一部のカスタムタグの出力を抑制したい場合があります。この場合も、ソースコード内にすべてのタグを配置し、出力を抑制しないタグを有効にし、出力を抑制するタグを無効にします。 \f2X\fP が存在する場合はタグが無効になり、存在しない場合はタグが有効になります。これにより、Javadoc ツールは、検出したタグが入力ミスなどによる未知のタグであるかどうかを特定できます。未知のタグを検出した場合、Javadoc ツールは警告を出力します。 -.LP -すでに配置されている値に \f2X\fP を追加できます。こうしておけば、 \f2X を削除するだけでタグを有効にすることができます\fP。たとえば、@todo タグの出力を抑制したい場合、次のように指定します。 -.nf -\f3 -.fl - \-tag todo:Xcmf:"To Do:" -.fl -\fP -.fi -さらに単純な指定方法もあります。 -.nf -\f3 -.fl - \-tag todo:X -.fl -\fP -.fi -.LP -構文 \f2\-tag todo:X\fP は、 \f2@todo\fP がタグレットで定義されていても有効です。 -.LP -\f3タグの順序\fP \- \f2\-tag\fP (および \f2\-taglet\fP) オプションの順序によって、タグの出力順が決まります。カスタムタグと標準タグを組み合わせて使用することもできます。標準タグのタグオプションは、順序を決定するためだけのプレースホルダです。これらは標準タグ名のみを使用します。(標準タグの小見出しは変更できません。)これについては、以下の例で説明します。 -.LP -\f2\-tag\fP が存在しない場合は、 \f2\-taglet\fP の位置によってその順序が決まります。タグが両方とも存在する場合、コマンド行の最後にあるほうがその順序を決定します。これは、タグやタグレットがコマンド行に指定された順番に処理されるためです。たとえば、 \f2\-taglet\fP と \f2\-tag\fP の両方が todo という名前を持っている場合、コマンド行の最後にあるほうが順序を決定します。 -.LP -\f3タグの完全セットの例\fP \- この例では、出力の「Parameters」と「Throws」の間に「To Do」を挿入します。X を使用して、@example が、ソースコード内の今回の実行では出力されないタグであることを指定します。@argfile を使用する場合は、次のように、引数ファイル内の別々の行にタグを配置できます。行の継続を示す文字は不要です。 -.nf -\f3 -.fl - \-tag param -.fl - \-tag return -.fl - \-tag todo:a:"To Do:" -.fl - \-tag throws -.fl - \-tag see -.fl - \-tag example:X -.fl -\fP -.fi -.LP -javadoc がドキュメンテーションコメントを解析する際に検索されたタグのうち、標準タグでも、 \f2\-tag\fP や \f2\-taglet\fP で渡されたタグでもないものはすべて未知のタグとみなされ、警告がスローされます。 -.LP -標準タグは、最初、デフォルトの順序でリスト内に内部的に格納されます。 \f2\-tag\fP オプションを使用すると、このリストに追加されるタグ、すなわち標準タグの位置がデフォルトの位置から移動します。つまり、標準タグに \f2\-tag\fP オプションを付けなければ、これらはデフォルトの位置に配置されたままになります。 -.LP -\f3競合の回避\fP \- 固有の名前空間を細かく分けるには、パッケージに使用されている \f2com.mycompany.todo という名前のように、ドット (.) を区切り記号とする名前を使います\fP。Oracle は、今後も名前にドットを含まない標準タグを作成します。ユーザーが作成したタグは、Oracle が提供する同じ名前のタグの動作をオーバーライドします。つまり、 \f2@todo\fP という名前のタグまたはタグレットをユーザーが作成した場合、Oracle がその後同じ名前の標準タグを作成したとしても、その動作は常にユーザーが定義した動作と同じになります。 -.LP -\f3注釈 vs. Javadoc タグ\fP \- 一般に、追加する必要のあるマークアップが、ドキュメンテーションに影響を与えたりドキュメンテーションを生成したりするためのものである場合、そのマークアップは javadoc タグにすべきです。それ以外の場合は注釈にすべきです。 -.na -\f2「Comparing Annotations and Javadoc Tags」\fP @ -.fi -http://www.oracle.com/technetwork/java/javase/documentation/index\-137868.html#annotationsを参照してください。 -.LP -\-taglet オプションを使用して、より複雑なブロックタグやカスタムインラインタグを 作成することができます。 -.LP -.TP 3 -\-taglet\ \ class -そのタグのドキュメントの生成に使うドックレットを起動するためのクラスファイルを指定します。クラスの完全指定名を指定してください。このタグレットは、カスタムタグのテキスト引数の数も定義します。タグレットは、これらの引数を受け付け、処理し、出力を生成します。外部ドキュメントとサンプルタグレットについては、以下を参照してください。 -.RS 3 -.TP 2 -o -.na -\f2「タグレットの概要」\fP @ -.fi -http://java.sun.com/javase/6/docs/technotes/guides/javadoc/taglet/overview.html +外部ドキュメントへの絶対リンク.PP +http://docs\&.oracle\&.com/javase/8/docs/api/index\&.htmlに示すような、\fIjava\&.lang\fR、 +\fIjava\&.io\fRおよびその他のJava SEパッケージにリンクする必要がある場合があります。 +.PP +ただし、シェルにはWebアクセス権がありません。この場合、次を行います。 +.sp +.RS 4 +.ie n \{\ +\h'-04' 1.\h'+01'\c +.\} +.el \{\ +.sp -1 +.IP " 1." 4.2 +.\} +ブラウザでpackage\-listファイルを開きます(http://docs\&.oracle\&.com/javase/8/docs/api/package\-list) .RE -.LP -タグレットは、ブロックタグまたはインラインタグで便利です。タグレットは任意の数の引数をとることができます。また、テキストを太字にする、箇条書きを作成する、テキストをファイルに書き出す、その他のプロセスを開始するなどのカスタム動作を実装できます。 -.LP -タグレットで指定できるのは、タグの配置場所と配置形式のみです。その他のすべての決定は、ドックレットによって行われます。タグレットを使用しても、包含クラスのリストからクラス名を削除するなどの処理は実行できません。ただし、タグのテキストをファイルに出力したり、別のプロセスをトリガーするなどの副作用は得られます。 -.LP -タグレットのパスを指定するには、\f2\-tagletpath\fP オプションを使用します。以下は、生成されるページの「Parameter」と「Throws」の間に「To Do」タグレットを挿入する例です。 -.nf -\f3 -.fl - \-taglet com.sun.tools.doclets.ToDoTaglet -.fl - \-tagletpath /home/taglets -.fl - \-tag return -.fl - \-tag param -.fl - \-tag todo -.fl - \-tag throws -.fl - \-tag see -.fl -\fP -.fi -.LP -また、 \f2\-taglet\fP オプションを \f2\-tag\fP オプションの代わりに使用することもできますが、そうすると可読性が低下する可能性があります。 -.LP -.TP 3 -\-tagletpath\ \ tagletpathlist -taglet クラスファイル (.class) の検索パスを指定します。\f2tagletpathlist\fP には、コロン (\f2:\fP) で区切って複数のパスを含めることができます。Javadoc ツールは、指定されたパス以下のすべてのサブディレクトリを検索します。 -.LP -.TP 3 -\-docfilessubdirs\ -「\f2doc\-files\fP」ディレクトリの深いコピーを有効にします。つまり、コピー先には、サブディレクトリとすべてのコンテンツがコピーされます。たとえば、ディレクトリ \f2doc\-files/example/images\fP とそのすべての内容がコピーされます。ここでも、サブディレクトリを除外する指定が可能です。 -.LP -.TP 3 -\-excludedocfilessubdir\ \ name1:name2... -「\f2doc\-files\fP」の、指定された名前のサブディレクトリをすべて除外します。これにより、SCCS とその他のソースコード制御サブディレクトリのコピーを防ぎます。 -.LP -.TP 3 -\-noqualifier\ \ all\ | \ packagename1:packagename2:... -出力されるクラス名の先頭のパッケージ名 (パッケージ修飾子) を省略します。 \f2\-noqualifier\fP の引数は、「\f2all\fP」(すべてのパッケージ修飾子が省略される)、修飾子として削除すべきパッケージのコロン区切りリスト (ワイルドカードも可)、のいずれかとなります。クラスまたはインタフェース名が表示される位置からパッケージ名が削除されます。 -.LP -次の例では、すべてのパッケージ修飾子を省略します。 -.nf -\f3 -.fl - \-noqualifier all -.fl -\fP -.fi -次の例では、パッケージ修飾子 java.lang および java.io を省略します。 -.nf -\f3 -.fl - \-noqualifier java.lang:java.io -.fl -\fP -.fi -次の例では、java で始まるパッケージ修飾子と com.sun というサブパッケージ (javax ではない) を省略します。 -.nf -\f3 -.fl - \-noqualifier java.*:com.sun.* -.fl -\fP -.fi -パッケージ修飾子が上記の動作に従って表示される場合、名前は適切に短くされます。詳細は「名前の表示方法」を参照してください。この規則は、 \f2\-noqualifier\fP を使用するかどうかにかかわらず有効です。 -.LP -.TP 3 -\-notimestamp\ -タイムスタンプが抑制されます。各ページ先頭近くにある、生成された HTML 内の HTML コメントでタイムスタンプが隠されます。Javadoc を 2 つのソースベースで実行し、それらに対して diff を実行するときにこのオプションを使用すると、タイムスタンプによって diff が発生しなくなるので便利です (このオプションを使用しないと、各ページで diff になります)。タイムスタンプには Javadoc のバージョン番号が含まれており、次のようになります。 -.nf -\f3 -.fl - <!\-\- Generated by javadoc (build 1.5.0_01) on Thu Apr 02 14:04:52 IST 2009 \-\-> -.fl -\fP -.fi -.LP -.TP 3 -\-nocomment\ -主説明およびすべてのタグを含むコメント本文全体を抑制し、宣言だけを生成します。このオプションにより、元は異なる目的のためだったソースファイルを再利用し、新しいプロジェクトの早い段階でスケルトン HTML ドキュメントを作成できるようになりました。 -.LP -.TP 3 -\-sourcetab tabLength -ソース内で各タブが獲得する空白の数を指定します。 +.sp +.RS 4 +.ie n \{\ +\h'-04' 2.\h'+01'\c +.\} +.el \{\ +.sp -1 +.IP " 2." 4.2 +.\} +ファイルをローカル・ディレクトリに保存し、このローカル・コピーを第2引数\fIpackagelistLoc\fRで指定します。この例では、パッケージ・リスト・ファイルはカレント・ディレクトリ(\&.)に保存されています。 .RE -.SH "コマンド行引数ファイル" -.LP -javadoc のコマンド行を短くしたり簡潔にしたりするために、 \f2javadoc\fP コマンドに対する引数 ( \f2\-J\fP オプションを除く) が入った 1 つ以上のファイルを指定することができます。このことを利用すれば、どのオペレーティングシステム上でも、任意の長さの javadoc コマンドを作成できます。 -.LP -引数ファイルには、javac のオプションとソースファイル名を自由に組み合わせて記述できます。ファイル内の各引数は、スペースまたは改行で区切ります。ファイル名に空白が含まれている場合は、そのファイル名全体を二重引用符で囲みます。 -.LP -引数ファイル内のファイル名は、現在のディレクトリから見た相対パスになります。引数ファイルの位置から見た相対パスではありません。引数ファイル内のファイル名リストでは、ワイルドカード (*) は使用できません。たとえば、 \f2*.java\fP とは指定できません。引数ファイル内の引数で \f2@\fP 文字を使用して、複数のファイルを再帰的に解釈することはサポートされていません。また、 \f2\-J\fP オプションもサポートされていません。 このオプションは起動ツールに渡されますが、起動ツールでは引数ファイルをサポートしていないからです。 -.LP -javadoc を実行するときに、各引数ファイルのパスとファイル名の先頭に \f2@\fP 文字を付けて渡します。javadoc は、\f2@\fP 文字で始まる引数を見つけると、そのファイルの内容を展開して引数リストに挿入します。 -.SS -引数ファイルを 1 つ指定する例 -.LP -次のように、「\f2argfile\fP」という名前の単一の引数ファイル内に、Javadoc のすべての引数を格納します。 +.PP +次のコマンドは、Java SEプラットフォーム・パッケージへのリンクを持つc\fIom\&.mypackage\fRパッケージのドキュメントを生成します。生成ドキュメントには、たとえばクラス\fItrees\fR内の\fIObject\fRクラスへのリンクが含まれています。\fI\-sourcepath\fRなど、他の必要なオプションは表示されません。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl - % \fP\f3javadoc @argfile\fP -.fl +javadoc \-linkoffline http://docs\&.oracle\&.com/javase/8/docs/api/ \&. com\&.mypackage .fi -.LP -この引数ファイルには、次の例で示されている 2 つのファイルの内容を両方とも入れることができます。 -.SS -引数ファイルを 2 つ指定する例 -.LP -2 つの引数ファイルを作成できます。1 つは Javadoc オプション用、もう 1 つはパッケージ名またはソースファイル名用です。なお、次のリストでは行継続文字を使用していません。 -.LP -次の内容を含む、「\f2options\fP」という名前のファイルを作成します。 +.if n \{\ +.RE +.\} +外部ドキュメントへの相対リンク.PP +\fI\-linkoffline\fRを相対パスとともに使用することはあまりありません。理由は単純で、通常は\fI\-link\fRで間に合うからです。\fI\-linkoffline\fRオプションを使用する場合、通常、package\-listファイルはローカルで、相対リンクを使用する場合はリンク先のファイルもローカルなので、通常は\fI\-linkoffline\fRオプションの2つの引数に、異なるパスを指定する必要はありません。2つの引数が同一の場合、\fI\-link\fRオプションを使用できます。 +package\-listファイルの手動での作成.PP +package\-listファイルがまだ存在しなくても、ドキュメントのリンク先のパッケージ名がわかっている場合は、このファイルのコピーを手動で作成し、\fIpackagelistLoc\fRでそのパスを指定することができます。\fIcom\&.apipackage\fRが最初に生成された時点で\fIcom\&.spipackage\fRのパッケージ・リストが存在しないという前出のケースが一例として挙げられます。この方法は、パッケージ名はわかっているものの、まだ公開されていない、新しい外部ドキュメントにリンクするドキュメントを生成する必要がある場合に便利です。また、package\-listファイルが生成されないJavadoc 1\&.0または1\&.1で生成されたパッケージ用にpackage\-listファイルを作成する場合にも、この方法が使用できます。同様に、2つの企業が未公開のpackage\-listファイルを共有できるため、クロスリンクを設定したドキュメントを同時にリリースすることも可能になります。 +複数ドキュメントへのリンク.PP +参照先の生成ドキュメントごとに1回、\fI\-linkoffline\fRオプションを含めることができます。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl - \-d docs\-filelist -.fl - \-use -.fl - \-splitindex -.fl - \-windowtitle 'Java SE 7 API Specification' -.fl - \-doctitle 'Java SE 7 API Specification' -.fl - \-header '<b>Java(TM) SE 7</b>' -.fl - \-bottom 'Copyright © 1993\-2011 Oracle and/or its affiliates. All rights reserved.' -.fl - \-group "Core Packages" "java.*" -.fl - \-overview /java/pubs/ws/1.7.0/src/share/classes/overview\-core.html -.fl - \-sourcepath /java/pubs/ws/1.7.0/src/share/classes -.fl -\fP +javadoc \-linkoffline extdocURL1 packagelistLoc1 \-linkoffline extdocURL2 +packagelistLoc2 \&.\&.\&. .fi -.LP -次の内容を含む、「\f2packages\fP」という名前のファイルを作成します。 +.if n \{\ +.RE +.\} +ドキュメントの更新.PP +プロジェクトに何十または何百のパッケージが含まれる場合にも、\fI\-linkoffline\fRオプションを使用できます。ソース・ツリー全体ですでに\fIjavadoc\fRコマンドを実行したことがある場合、ドキュメンテーション・コメントにわずかな変更を迅速に加え、ソース・ツリーの一部で\fIjavadoc\fRコマンドを再実行することができます。2回目の実行は、ドキュメンテーション・コメントを変更し、宣言は変更しない場合にのみ正しく処理されることに注意してください。ソース・コードに対して宣言を追加、削除、または変更した場合は、索引、パッケージ・ツリー、継承されるメンバーのリスト、使用ページなどの場所で、リンクが壊れることがあります。 +.PP +まず、この新しい小規模な実行で使用する、新しい生成先ディレクトリ(updateなど)を作成します。この例では、元の生成先ディレクトリの名前はhtmlです。最も単純な例では、htmlディレクトリの親ディレクトリに移動します。\fI\-linkoffline\fRオプションの第1引数にカレント・ディレクトリ(\&.)を設定し、第2引数にpackage\-listが検索されるhtmlへの相対パスを設定し、更新するパッケージのパッケージ名のみを渡します。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl - com.mypackage1 -.fl - com.mypackage2 -.fl - com.mypackage3 -.fl -\fP +javadoc \-d update \-linkoffline \&. html com\&.mypackage .fi -.LP -そのあと、次のコマンドを使用して javadoc を実行します。 +.if n \{\ +.RE +.\} +.PP +\fIjavadoc\fRコマンドの終了後、update/com/package内の生成されたクラスのページをコピーし(概要や索引は除く)、html/com/package内の元のファイルに上書きします。 +.PP +\-linksource +.RS 4 +各ソース・ファイル(行番号付き)のHTMLバージョンを作成し、標準HTMLドキュメントからソース・ファイルへのリンクを追加します。リンクは、ソース・ファイル内に宣言されているクラス、インタフェース、コンストラクタ、メソッド、フィールドに対して作成されます。そうでない場合、たとえばデフォルト・コンストラクタや生成されたクラスに対しては、リンクは作成されません。 +.sp +このオプションは、\fI\-public\fR、\fI\-package\fR、\fI\-protected\fRおよび\fI\-private\fRの各オプションとは関係なく、非公開のクラス、フィールド、非公開のメソッドの本体をはじめとする組み込まれたソース・ファイル内のすべての非公開実装の詳細を公開します。\fI\-private\fRオプションもあわせて指定しないかぎり、非公開のクラスやインタフェースの一部には、リンクを介してアクセスできないことがあります。 +.sp +各リンクは、その宣言内の識別子名の上に作成されます。たとえば、\fIButton\fRクラスのソース・コードへのリンクは、\fIButton\fRという語の上に作成されます。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl - % \fP\f3javadoc @options @packages\fP -.fl +public class Button extends Component implements Accessible .fi -.SS -パス付きの引数ファイルの例 -.LP -引数ファイルには、パスを指定できます。ただし、そのファイル内に指定されたファイル名は、現在の作業ディレクトリから見た相対パスになります。つまり、下の例の場合は、 \f2path1\fP や \f2path2\fP から見た相対パスではありません。 +.if n \{\ +.RE +.\} +\fIButton\fRクラスの\fIgetLabel\fRメソッドのソース・コードへのリンクは、\fIgetLabel\fRという語の上に作成されます。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl - % \fP\f3javadoc @path1/options @path2/packages\fP -.fl +public String getLabel() .fi -.SS -オプションの引数の例 -.LP -次に、Javadoc オプションに対する引数だけを引数ファイルに格納する例を示します。ここでは \f2\-bottom\fP オプションを使用します。というのも、引数が長くなる可能性があるからです。次のようなテキスト引数を含む、「\f2bottom\fP」という名前のファイルを作成できます。 +.if n \{\ +.RE +.\} +.RE +.PP +\-group groupheading \fIpackagepattern:packagepattern\fR +.RS 4 +概要ページの複数のパッケージを、指定したグループに分けて、グループごとに表を作成します。各グループは、それぞれ別の\fI\-group\fRオプションで指定します。グループは、コマンド行で指定された順序でページに表示されます。パッケージは、グループ内でアルファベット順になっています。指定した\fI\-group\fRオプションでは、\fIpackagepattern\fR式のリストに一致するパッケージが、見出しとして\fIgroupheading\fRを持つ1つの表に表示されます。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fIgroupheading\fRには、任意のテキストを指定でき、空白を含めることができます。指定したテキストは、グループの表見出しになります。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fIpackagepattern\fRの値には、任意のパッケージ名の先頭部分とそれに続く1つのアスタリスク(*)で任意のパッケージ名を指定できます。アスタリスクは使用できる唯一のワイルドカードで、任意の文字に一致する、という意味です。1つのグループには、コロン(:)で区切って複数のパターンを含めることができます。パターンまたはパターン・リストでアスタリスクを使用する場合、パターン・リストは\fI"java\&.lang*:java\&.util"\fRのように引用符で囲む必要があります。 +.RE +.sp +\fI\-group\fRオプションを指定しない場合は、見出し\fIPackages\fRおよび適切な小見出しを持つ1つのグループに配置されます。小見出しにすべてのドキュメント化されるパッケージ(すべてのグループ)が含まれるわけではない場合、残りのパッケージは「その他のパッケージ」というサブ見出しを持つ独立したグループに入れられます。 +.sp +たとえば、次の\fIjavadoc\fRコマンドでは、3つのドキュメント化されたパッケージが\fI「コア」\fR、\fI「拡張」\fRおよび\fI「その他のパッケージ」\fRに分けられます。\fIjava\&.lang*\fRでは、最後のドット(\&.)を指定していません。\fIjava\&.lang\&.*\fRのようにドットを入れると、\fI java\&.lang\fRパッケージは除外されることになります。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +javadoc \-group "Core Packages" "java\&.lang*:java\&.util" + \-group "Extension Packages" "javax\&.*" + java\&.lang java\&.lang\&.reflect java\&.util javax\&.servlet java\&.new +.fi +.if n \{\ +.RE +.\} +\fBコア・パッケージ\fR +.sp +\fIjava\&.lang\fR +.sp +\fIjava\&.lang\&.reflect\fR +.sp +\fIjava\&.util\fR +.sp +\fB拡張機能パッケージ\fR +.sp +\fIjavax\&.servlet\fR +.sp +\fBOther Packages\fR +.sp +\fIjava\&.new\fR +.RE +.PP +\-nodeprecated +.RS 4 +非推奨のAPIをドキュメントに生成しないようにします。このオプションを指定すると、\fI\-nodeprecatedlist\fRオプションを指定した場合と同じ効果があり、ドキュメントの他の部分全体でも、非推奨のAPIが生成されません。このオプションは、コードを記述しているとき、非推奨のコードによって気を散らされたくない場合に便利です。 +.RE +.PP +\-nodeprecatedlist +.RS 4 +非推奨のAPIのリストを含むファイル(deprecated\-list\&.html)、およびナビゲーション・バーのそのページへのリンクが生成されないようにします。\fIjavadoc\fRコマンドでは、引き続き、ドキュメントの他の部分では、非推奨のAPIが生成されます。このオプションは、非推奨のAPIがソース・コードに含まれておらず、ナビゲーション・バーをすっきりと見せる場合に便利です。 +.RE +.PP +\-nosince +.RS 4 +生成ドキュメントから、\fI@since\fRタグに関連付けられた\fI「導入されたバージョン」\fRセクションを省略します。 +.RE +.PP +\-notree +.RS 4 +生成ドキュメントから、クラスおよびインタフェースの階層ページを省略します。これらのページには、ナビゲーション・バーの「階層ツリー」ボタンからアクセスできます。デフォルトでは、階層が生成されます。 +.RE +.PP +\-noindex +.RS 4 +生成ドキュメントから、索引を省略します。デフォルトでは、索引が生成されます。 +.RE +.PP +\-nohelp +.RS 4 +出力の各ページの最上部と最下部にあるナビゲーション・バーから「ヘルプ」リンクを省略します。 +.RE +.PP +\-nonavbar +.RS 4 +通常、生成されるページの最上部と最下部に表示されるナビゲーション・バー、ヘッダー、およびフッターを生成しないようにします。\fI\-nonavbar\fRオプションは\fI\-bottom\fRオプションに影響を与えません。\fI\-nonavbar\fRオプションは、印刷するためにのみファイルをPostScriptやPDFに変換する場合など、内容のみが重要で、ナビゲーションの必要がない場合に便利です。 +.RE +.PP +\-helpfile \fIpath\efilename\fR +.RS 4 +最上部および最下部のナビゲーション・バーの「ヘルプ」リンクのリンク先となる代替ヘルプ・ファイルpath\efilenameのパスを指定します。このオプションが指定されていないと、\fIjavadoc\fRコマンドは、\fIjavadoc\fRコマンド内でハードコードされているヘルプ・ファイルhelp\-doc\&.htmlを自動作成します。このオプションを使用すると、デフォルトをオーバーライドできます。ファイル名にはどんな名前でも指定でき、help\-doc\&.htmlに限定されません。\fIjavadoc\fRコマンドは、次の例のように、ナビゲーション・バー内のリンクを必要に応じて調整します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +javadoc \-helpfile /home/user/myhelp\&.html java\&.awt\&. +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\-stylesheet \fIpath/filename \fR +.RS 4 +代替HTMLスタイルシート・ファイルのパスを指定します。このオプションが指定されていないと、\fIjavadoc\fRコマンドは、\fIjavadoc\fRコマンド内でハードコードされているスタイルシート・ファイルstylesheet\&.cssを自動作成します。このオプションを使用すると、デフォルトをオーバーライドできます。ファイル名にはどんな名前でも指定でき、stylesheet\&.cssに限定されません。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +javadoc \-stylesheet file /home/user/mystylesheet\&.css com\&.mypackage +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\-serialwarn +.RS 4 +\fI@serial\fRタグがない場合は、コンパイル時に警告を生成します。デフォルトでは、Javadoc 1\&.2\&.2以降では、直列化の警告は生成されません。以前のリリースとは逆の動作です。このオプションを使用すると、直列化の警告が表示されるので、デフォルトの直列化可能フィールドと\fIwriteExternal\fRメソッドを適切にドキュメント化するのに役立ちます。 +.RE +.PP +\-charset \fIname\fR +.RS 4 +このドキュメント用のHTML文字セットを指定します。この名前は、IANA RegistryのCharacter Sets +(http://www\&.iana\&.org/assignments/character\-sets)に示された、優先MIME名である必要があります。 +.sp +たとえば、\fIjavadoc \-charset "iso\-8859\-1" mypackage\fRは次の行を生成された各ページのヘッダーに挿入します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +<META http\-equiv="Content\-Type" content="text/html; charset=ISO\-8859\-1"> +.fi +.if n \{\ +.RE +.\} +この\fIMETA\fRタグは、HTML標準(4197265および4137321)のHTML Document Representation +(http://www\&.w3\&.org/TR/REC\-html40/charset\&.html#h\-5\&.2\&.2)に記載されています。 +.sp +およびオプションも参照してください。 +.RE +.PP +\-docencoding \fIname\fR +.RS 4 +生成されるHTMLファイルのエンコーディングを指定します。この名前は、IANA RegistryのCharacter Sets +(http://www\&.iana\&.org/assignments/character\-sets)に示された、優先MIME名である必要があります。 +.sp +\fI\-docencoding\fRオプションを省略し、\fI\-encoding\fRオプションを使用すると、生成されたHTMLファイルの暗号化は\fI\-encoding\fRオプションで特定されます。例: +\fIjavadoc \-docencoding"iso\-8859\-1" mypackage\fRおよびオプションも参照してください。 +.RE +.PP +\-keywords +.RS 4 +HTMLキーワード<META>タグを、クラスごとに生成されるファイルに追加します。これらのタグは、<META>タグを検索するサーチ・エンジンがページを見つける場合に役立ちます。インターネット全体を検索する検索エンジンのほとんどは<META>タグを参照しません。ページが誤用している可能性があるからです。自身のWebサイトへの検索を制限する、企業により提供される検索エンジンは、<META>タグを参照することで恩恵を受けることができます。<META>タグには、クラスの完全修飾名と、フィールドおよびメソッドの修飾されていない名前が含まれます。コンストラクタは、クラス名と同じであるため含まれません。たとえば、クラス\fIString\fRは次のキーワードで開始します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +<META NAME="keywords" CONTENT="java\&.lang\&.String class"> +<META NAME="keywords" CONTENT="CASE_INSENSITIVE_ORDER"> +<META NAME="keywords" CONTENT="length()"> +<META NAME="keywords" CONTENT="charAt()"> +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\-tag \fItagname\fR:Xaoptcmf:"\fItaghead\fR" +.RS 4 +\fIjavadoc\fRコマンドがドキュメンテーション・コメント内の引数を1つ取る単純なカスタム・ブロック・タグ\fI@tagname\fRを解釈できるようにします。これにより、\fIjavadoc\fRコマンドはタグ名のスペルチェックを行うことができるので、ソース・コード内に存在するすべてのカスタム・タグについて、\fI\-tag\fRオプションを組み込むことが重要です。今回の実行では出力されないタグは、\fIX\fRを付けて無効にします。\fI\-tag\fRオプションは、タグの見出し\fItaghead\fRを太字で出力します。その次の行には、このオプションの1つの引数で指定したテキストが続きます。ブロック・タグと同様、この引数のテキストにはインライン・タグを含めることができます。このインライン・タグも解釈されます。出力は、引数を1つ取る標準のタグ(\fI@return\fRや\fI@author\fRなど)の出力とよく似ています。\fItaghead\fRの値を省略すると、\fItagname\fRが見出しとして表示されます。 +.sp +\fBタグの配置\fR: +\fIXaoptcmf\fR引数により、ソース・コード内でタグを配置できる場所が決まり、タグを無効にできるかどうか(\fIX\fRを使用して)が決まります。タグの配置位置を制限しない場合は\fIa\fRを指定します。それ以外の文字の組合せも可能です。 +.sp +\fIX\fR +(タグの無効化) +.sp +\fIa\fR +(すべて) +.sp +\fIo\fR +(概要) +.sp +\fIp\fR +(パッケージ) +.sp +\fIt\fR +(タイプ、つまりクラスとインタフェース) +.sp +\fIc\fR +(コンストラクタ) +.sp +\fIm\fR +(メソッド) +.sp +\fIf\fR +(フィールド) +.sp +\fBシングル・タグの例\fR: ソース・コード内の任意の位置で使用できるタグのタグ・オプションの例を示します。\fI\-tag todo:a:"To Do:"\fR +.sp +\fI@todo\fRタグをコンストラクタ、メソッドおよびフィールドとのみ使用する場合、\fI\-tag todo:cmf:"To Do:"\fRを使用します。 +.sp +最後のコロン(:)は、パラメータ区切り文字ではなく、見出しテキストの一部になっています。\fI@todo\fRタグを含む、ソース・コード用のいずれかのタグ・オプションを使用します。たとえば、\fI@todo The documentation for this method needs work\fRです。 +.sp +\fBタグ名内のコロン\fR: タグ名内でコロンを使用する場合はバックスラッシュを使用してエスケープします。次のドキュメンテーション・コメントには、\fI\-tag ejb\e\e:bean:a:"EJB Bean:"\fRオプションを使用します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +/** + * @ejb:bean + */ +.fi +.if n \{\ +.RE +.\} +\fBタグ名のスペルチェック\fR: 一部の開発者が必ずしも出力しないカスタム・タグをソース・コード内に配置することがあります。この場合、ソース・コード内のすべてのタグをリストし、出力するタグを有効にし、出力しないタグを無効にする必要があります。\fIX\fRを指定するとタグは無効になります。指定しないと、タグは有効になります。これにより、\fIjavadoc\fRコマンドは、検出したタグが入力ミスなどによる不明タグであるかどうかを特定できます。このような場合に、\fIjavadoc\fRコマンドから警告が出力されます。すでに配置されている値に\fIX\fRを追加できます。こうしておけば、\fIX\fRを削除するのみでタグを有効にすることができます。たとえば、\fI@todo\fRタグを出力で抑制する場合、\fI\-tag todo:Xcmf:"To Do:"\fRを使用します。さらに簡単にする場合、\fI\-tag todo:X\fRを使用します。構文\fI\-tag todo:X\fRは、\fI@todo\fRタグがタグレットで定義されていても機能します。 +.sp +\fBタグの順序\fR: +\fI\-ta\fR\fIg\fRおよび\fI\-taglet\fRオプションの順序によって、タグの出力順が決まります。カスタム・タグと標準タグを組み合せて使用することもできます。標準タグのタグ・オプションは、順序を決定するためだけのプレースホルダです。標準タグの名前のみを取ります。標準タグの小見出しは変更できません。これを次の例に示します。\fI\-tag\fRオプションを指定しないと、\fI\-tagle\fR\fIt\fRオプションの位置により、順序が決まります。タグが両方とも存在する場合、コマンドラインの最後にある方がその順序を決定します。これは、タグやタグレットがコマンドラインに指定された順番に処理されるためです。たとえば、\fI\-taglet\fRおよび\fI\-tag\fRオプションが名前\fItodo\fR値を持つ場合、コマンドラインに最後に指定されたものが順序を決定します。 +.sp +\fBタグの完全セットの例\fR: この例では、出力のParametersとThrowsの間にTo Doを挿入します。\fIX\fRを使用して、\fI@example\fRタグが、ソース・コード内の今回の実行では出力されないタグであることも指定します。\fI@argfile\fRタグを使用する場合は、次のように、引数ファイル内の別々の行にタグを配置できます(行の継続を示す文字は不要)。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-tag param +\-tag return +\-tag todo:a:"To Do:" +\-tag throws +\-tag see +\-tag example:X +.fi +.if n \{\ +.RE +.\} +\fIjavadoc\fRコマンドがドキュメンテーション・コメントを解析する際に検索されたタグのうち、標準タグでも、\fI\-tag\fRや\fI\-taglet\fRオプションで渡されたタグでもないものはすべて不明タグとみなされ、警告がスローされます。 +.sp +標準タグは、最初、デフォルトの順序でリスト内に内部的に格納されます。\fI\-tag\fRオプションを使用すると、それらのタグはこのリストに追加されます。標準タグは、デフォルトの位置から移動されます。そのため、標準タグの\fI\-tag\fRオプションを省略すると、それはデフォルトの位置に配置されたままになります。 +.sp +\fB競合の回避\fR: 固有の名前空間を作成するには、パッケージに使用されている\fIcom\&.mycompany\&.todo\fRという名前のように、ドットで区切られた名前を使用します。Oracleは、今後も名前にドットを含まない標準タグを作成します。ユーザーが作成したタグは、Oracleが定義する同じ名前のタグの動作をオーバーライドします。\fI@todo\fRという名前のタグまたはタグレットをユーザーが作成した場合、その後にOracleが同じ名前の標準タグを作成しても、そのタグまたはタグレットは常にユーザーが定義したのと同じ動作を保持します。 +.sp +\fB注釈vs\&. Javadocタグ\fR: 一般に、追加する必要のあるマークアップが、ドキュメントに影響を与えたりドキュメントを生成したりするためのものである場合、そのマークアップはJavadocタグにします。それ以外の場合は注釈にします。JavadocツールでのDocコメントの記述方法のカスタム・タグと注釈に関する項 +(http://www\&.oracle\&.com/technetwork/java/javase/documentation/index\-137868\&.html#annotations)を参照してください。 +.sp +\fI\-taglet\fRオプションを使用して、より複雑なブロック・タグやカスタム・インライン・タグも作成できます。 +.RE +.PP +\-taglet \fIclass\fR +.RS 4 +そのタグのドキュメントの生成に使用するドックレットを起動するためのクラス・ファイルを指定します。\fIclass\fR値の完全修飾名を使用します。このタグレットは、カスタム・タグのテキスト引数の数も定義します。タグレットは、これらの引数を受け付け、処理し、出力を生成します。タグレットの例を使用した豊富なドキュメントについては、タグレットの概要 +(http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/javadoc/taglet/overview\&.html)を参照してください。 +.sp +タグレットは、ブロックタグまたはインライン・タグで便利です。タグレットは任意の数の引数をとることができます。また、テキストを太字にする、箇条書きを作成する、テキストをファイルに書き出す、その他のプロセスを開始するなどのカスタム動作を実装できます。タグレットで指定できるのは、タグの配置場所と配置形式のみです。その他のすべての決定は、ドックレットによって行われます。タグレットを使用しても、包含クラスのリストからクラス名を削除するなどの処理は実行できません。ただし、タグのテキストをファイルに出力したり、別のプロセスをトリガーするなどの副作用は得られます。タグレットへのパスを指定するには、\fI\-tagletpath\fRオプションを使用します。次に、生成されるページのParametersとThrowsの間にTo Doタグレットを挿入する例を示します。または、\fI\-taglet\fRオプションをその\fI\-tag\fRオプションのかわりに使用することができますが、読み取りが困難になる可能性があります。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-taglet com\&.sun\&.tools\&.doclets\&.ToDoTaglet +\-tagletpath /home/taglets +\-tag return +\-tag param +\-tag todo +\-tag throws +\-tag see +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\-tagletpath \fItagletpathlist\fR +.RS 4 +tagletクラス・ファイルを検索するための検索パスを指定します。\fItagletpathlist\fRには、コロン(:)で区切って複数のパスを含めることができます。\fIjavadoc\fRコマンドは、指定されたパス以下のすべてのサブディレクトリを検索します。 +.RE +.PP +\-docfilesubdirs +.RS 4 +doc\-filesディレクトリのディープ・コピーを有効にします。宛先には、サブディレクトリとそのすべて内容が再帰的にコピーされます。たとえば、ディレクトリoc\-files/example/imagesとその内容がすべてコピーされます。ここでも、サブディレクトリを除外する指定が可能です。 +.RE +.PP +\-excludedocfilessubdir \fIname1:name2\fR +.RS 4 +指定された名前のdoc\-filesサブディレクトリをすべて除外します。これにより、SCCSとその他のソース・コード制御サブディレクトリのコピーを防ぎます。 +.RE +.PP +\-noqualifier all | \fIpackagename1\fR:\fIpackagename2\&.\&.\&.\fR +.RS 4 +出力されるクラス名から修飾パッケージ名を省略します。\fI\-noqualifier\fRオプションの引数は、\fIall\fR(すべてのパッケージ修飾子を省略)、または修飾子として削除するパッケージのコロン区切りリスト(ワイルドカードも可)、のいずれかとなります。クラスまたはインタフェース名が表示される位置からパッケージ名が削除されます。ソース・ファイルの処理を参照してください。 +.sp +次の例では、すべてのパッケージ修飾子を省略します。\fI\-noqualifier all\fR +.sp +次の例では、\fIjava\&.lang\fRおよび\fIjava\&.io\fRパッケージ修飾子を省略します: +\fI\-noqualifier java\&.lang:java\&.io\fR。 +.sp +次の例では、\fIjava\fRで始まるパッケージ修飾子および\fIcom\&.sun\fRサブパッケージを省略しますが、\fIjavax\fRは省略しません。\fI\-noqualifier java\&.*:com\&.sun\&.*\fR +.sp +パッケージ修飾子が前述の動作に従って表示される場合、名前は適切に短縮されます。「名前が表示される方法」を参照してください。このルールは、\fI\-noqualifier\fRオプションを使用するかどうかにかかわらず有効です。 +.RE +.PP +\-notimestamp +.RS 4 +タイムスタンプが抑制されます。各ページの先頭近くにある、生成されたHTML内のHTMLコメントでタイムスタンプが隠されます。\fI\-notimestamp\fRオプションは、\fIjavadoc\fRコマンドを2つのソース・ベースで実行し、それらの間の差分\fIdiff\fRを取得する場合に役立ちます。タイムスタンプによる\fIdiff\fRの発生を防ぐからです(そうでないとすべてのページで\fIdiff\fRになります)。タイムスタンプには\fIjavadoc\fRコマンドのリリース番号が含まれ、現在では、\fI<!\-\- Generated by javadoc (build 1\&.5\&.0_01) on Thu Apr 02 14:04:52 IST 2009 \-\->\fRのように表示されます。 +.RE +.PP +\-nocomment +.RS 4 +主説明およびすべてのタグを含むコメント本文全体を抑制し、宣言のみを生成します。このオプションにより、元は異なる目的のためだったソース・ファイルを再利用し、新しいプロジェクトの早い段階でスケルトンHTMLドキュメントを作成できるようになります。 +.RE +.PP +\-sourcetab \fItablength\fR +.RS 4 +ソース内で各タブが使用する空白文字の数を指定します。 +.RE +.SH "コマンドライン引数ファイル" +.PP +\fIjavadoc\fRコマンドを短くしたり簡潔にしたりするために、\fIjavadoc\fRコマンドに対する引数(\fI\-J\fRオプションを除く)が入った1つ以上のファイルを指定することができます。このことを利用すれば、どのオペレーティング・システム上でも、任意の長さの\fIjavadoc\fRコマンドを作成できます。 +.PP +引数ファイルには、\fIjavac\fRのオプションとソース・ファイル名を自由に組み合せて記述できます。ファイル内の各引数は、スペースまたは改行で区切ります。ファイル名に埋め込まれた空白がある場合、ファイル名全体を二重引用符で囲みます。 +.PP +引数ファイル内のファイル名は、引数ファイルの位置ではなく、現在のディレクトリに相対的となります。これらのリストでは、ワイルドカード(\fI*\fR)は使用できません。たとえば、*\&.javaとは指定できません。アットマーク(@)を使用して、ファイルを再帰的に解釈することはできません。また、\fI\-J\fRオプションもサポートされていません。このオプションは起動ツールに渡されますが、起動ツールでは引数ファイルをサポートしていないからです。 +.PP +\fIjavadoc\fRを実行するときに、各引数ファイルのパスとファイル名の先頭に@文字を付けて渡します。\fIjavadoc\fRコマンドは、アットマーク(@)文字で始まる引数を見つけると、そのファイルの内容を展開して引数リストに挿入します。 +.PP +\fBExample 1\fR, 単一の引数ファイル +.RS 4 +\fIargfile\fRという名前の1つの引数ファイルを使用して、すべての\fIjavadoc\fRコマンド引数を保持できます。\fIjavadoc @argfile\fR次の例に示すように、この引数ファイルには両方のファイルの内容が含まれています。 +.RE +.PP +\fBExample 2\fR, 2つの引数ファイル +.RS 4 +次のように、2つの引数ファイルを作成できます。\fIjavadoc\fRコマンドのオプション用に1つ、パッケージ名またはソース・ファイル名用に1つです。次のリストでは行継続文字を使用していません。 +.sp +次の内容を含む、optionsという名前のファイルを作成します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-d docs\-filelist +\-use +\-splitindex +\-windowtitle \*(AqJava SE 7 API Specification\*(Aq +\-doctitle \*(AqJava SE 7 API Specification\*(Aq +\-header \*(Aq<b>Java(TM) SE 7</b>\*(Aq +\-bottom \*(AqCopyright © 1993\-2011 Oracle and/or its affiliates\&. All rights reserved\&.\*(Aq +\-group "Core Packages" "java\&.*" +\-overview /java/pubs/ws/1\&.7\&.0/src/share/classes/overview\-core\&.html +\-sourcepath /java/pubs/ws/1\&.7\&.0/src/share/classes +.fi +.if n \{\ +.RE +.\} +次の内容を含む、packagesという名前のファイルを作成します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +com\&.mypackage1 +com\&.mypackage2 +com\&.mypackage3 +.fi +.if n \{\ +.RE +.\} +次のように、\fIjavadoc\fRコマンドを実行します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +javadoc @options @packages +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\fBExample 3\fR, パスを使用した引数ファイル +.RS 4 +引数ファイルはパスを指定できますが、ファイル内のすべてのファイル名は、(\fIpath1\fRや\fIpath2\fRではなく)次のように現在の作業ディレクトリに相対的となります。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +javadoc @path1/options @path2/packages +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\fBExample 4\fR, オプション引数 +.RS 4 +次に、\fIjavadoc\fRコマンドのオプションに対する引数を引数ファイルに格納する例を示します。長い引数を指定できるので、\fI\-bottom\fRオプションを使用します。次のようなテキスト引数を含む、bottomという名前のファイルを作成できます。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl <font size="\-1"> -.fl - <a href="http://bugreport.sun.com/bugreport/">Submit a bug or feature</a><br/> -.fl - Copyright © 1993, 2011, Oracle and/or its affiliates. All rights reserved.<br/> -.fl - Oracle is a registered trademark of Oracle Corporation and/or its affiliates. -.fl - その他の名称は、それぞれの所有者の商標または登録商標です。</font> -.fl -\fP -.fi -.LP -そのあと、次のようにして Javadoc ツールを実行します。 -.nf -\f3 -.fl - % \fP\f3javadoc \-bottom @bottom @packages\fP -.fl -.fi -.LP -あるいは、引数ファイルの先頭に \f2\-bottom\fP オプションも組み込んだあと、次のように実行してもかまいません。 -.nf -\f3 -.fl - % \fP\f3javadoc @bottom @packages\fP -.fl -.fi -.SH "名前" -実行 -.SH "Javadoc の実行" -.LP -\f3バージョン番号\fP \- javadoc のバージョン番号を判別するには、\f3javadoc \-J\-version\fP を使用します。出力ストリームには標準ドックレットのバージョン番号が含まれます。その出力を無効にするには、 \f2\-quiet\fP を使用します。 -.LP -\f3公開プログラムインタフェース\fP \- Java 言語で記述されたプログラムから Javadoc ツールを起動するとき使用します。このインタフェースは \f2com.sun.tools.javadoc.Main にあります\fP (javadoc は再入可能)。詳細は、 -.na -\f2「標準ドックレット」\fP @ -.fi -http://java.sun.com/javase/6/docs/technotes/guides/javadoc/standard\-doclet.html#runningprogrammaticallyを参照してください。 -.LP -\f3ドックレットの実行\fP \- 下記の説明は、標準 HTML ドックレットを呼び出すためのものです。カスタムドックレットを呼び出すには、\-doclet および \-docletpath オプションを使用します。特定のドックレットを実行した完全な例については、 -.na -\f2MIF Doclet のドキュメント\fP @ -.fi -http://java.sun.com/j2se/javadoc/mifdoclet/docs/mifdoclet.htmlを参照してください。 -.SH "簡単な例" -.LP -javadoc は、パッケージ全体に対して実行することも、個々のソースファイルに対して実行することもできます。各パッケージ名は、それぞれのパッケージ名に対応するディレクトリ名を持ちます。次の例では、ソースファイルは \f2/home/src/java/awt/*.java にあります\fP。生成先ディレクトリは \f2/home/html です\fP。 -.SS -1 つ以上のパッケージのドキュメント化 -.LP -あるパッケージをドキュメント化するには、そのパッケージのソースファイル (\f2*.java\fP) を、そのパッケージと同じ名前のディレクトリ内に格納する必要があります。パッケージ名が ( \f2java.awt.color\fP のようにドットで区切られた) いくつかの識別子から構成されている場合、右側の識別子に進むたびに、その識別子がより深いサブディレクトリに対応している必要があります ( \f2java/awt/color\fP など)。 単一パッケージのソースファイルを 2 グループに分け、異なる場所にあるそのような 2 つのディレクトリツリー内にそれぞれ格納してもかまいません。ただし、その両方のディレクトリへのパスを、 \f2\-sourcepath\fP に設定する必要があります。例: \f2src1/java/awt/color\fP および \f2src2/java/awt/color\fP。 -.LP -javadoc を実行するには、 \f2cd\fP を使用してディレクトリを変更するか、 \f2\-sourcepath\fP オプションを使用します。以下の例では、両方の方法について説明します。 -.RS 3 -.TP 2 -o -\f3ケース 1 \- 1 つ以上のパッケージからの起動を再帰的に実行\fP \- この例では javadoc が任意のディレクトリから実行できるように、\-sourcepath を使用し、再帰的処理のために \-subpackages (1.4 の新オプション) を使用します。これは、 \f2java\fP ディレクトリのサブパッケージをたどりますが、その際に、 \f2java.net\fP と \f2java.lang\fP をルートに持つパッケージが除外されます。この場合、 \f2java.lang\fP のサブパッケージである \f2java.lang.ref\fP。 -.nf -\f3 -.fl - % \fP\f3javadoc \fP\f3\-d\fP\f3 /home/html \fP\f3\-sourcepath\fP\f3 /home/src \fP\f3\-subpackages\fP\f3 java \fP\f3\-exclude\fP\f3 java.net:java.lang\fP -.fl -.fi -.LP -ほかのパッケージツリーも下方にたどるには、 \f2java:javax:org.xml.sax のように、\fP それらのパッケージの名前を \-subpackages \f2の引数の末尾に追加します\fP。 -.TP 2 -o -\f3ケース 2 \- ルートソースディレクトリに移ってから明示的なパッケージに対して実行\fP \- 完全指定のパッケージ名の親ディレクトリに移ります。次に、ドキュメント化する 1 つ以上のパッケージ名を指定して javadoc を実行します。 -.nf -\f3 -.fl - % \fP\f3cd /home/src/\fP -.fl - % \f3javadoc \-d /home/html java.awt java.awt.event\fP -.fl -.fi -.TP 2 -o -\f3ケース 3 \- 任意のディレクトリから実行。ソースファイルは 1 つのディレクトリツリー内にある\fP \- このケースでは、現在のディレクトリがどこであってもかまいません。最上位パッケージの親ディレクトリを \f2\-sourcepath\fP に指定し、ドキュメント化する 1 つ以上のパッケージ名を指定して javadoc を実行します。 -.nf -\f3 -.fl - % \fP\f3javadoc \-d /home/html \-sourcepath /home/src java.awt java.awt.event\fP -.fl -.fi -.TP 2 -o -\f3ケース 4 \- 任意のディレクトリから実行。ソースファイルは複数のディレクトリツリー内にある\fP \- これはケース 3 と似ていますが、パッケージが複数のディレクトリツリーに存在します。それぞれのツリーのルートへのパスを \f2\-sourcepath\fP に指定し (コロンで区切る)、ドキュメント化する 1 つ以上のパッケージ名を指定して javadoc を実行します。1 つのパッケージのすべてのソースファイルが、1 つのルートディレクトリの下に存在しなければならない、ということはありません。ソースパスとして指定された場所のどこかで見つかれば十分です。 -.nf -\f3 -.fl - % \fP\f3javadoc \-d /home/html \-sourcepath /home/src1:/home/src2 java.awt java.awt.event\fP -.fl + <a href="http://bugreport\&.sun\&.com/bugreport/">Submit a bug or feature</a><br/> + Copyright © 1993, 2011, Oracle and/or its affiliates\&. All rights reserved\&. <br/> + Oracle is a registered trademark of Oracle Corporation and/or its affiliates\&. + Other names may be trademarks of their respective owners\&.</font> .fi +.if n \{\ .RE -.LP -結果: すべてのケースでパッケージ \f2java.awt\fP および \f2java.awt.event\fP 内の public および protected クラスとインタフェースについて、HTML 形式のドキュメントが生成され、指定された生成先ディレクトリ (\f2/home/html\fP) に HTML ファイルが保存されます。2 つ以上のパッケージが生成されているので、ドキュメントは、パッケージのリスト、クラスのリスト、およびメインのクラスページという 3 つのフレームを持つことになります。 -.SS -1 つ以上のクラスのドキュメント化 -.LP -また、1 つ以上のソースファイル (\f2.java\fP) を渡して、Javadoc ツールを実行することもできます。javadoc は、次の 2 つの方法のいずれかで実行できます。1 つは \f2cd\fP を使用してディレクトリを変更する方法、もう 1 つは \f2.java\fP ファイルへのパスを完全に指定する方法です。相対パスは、現在のディレクトリを起点とします。ソースファイル名を渡すときは、 \f2\-sourcepath\fP オプションは無視されます。アスタリスク (*) のようなコマンド行ワイルドカードを使用すると、クラスのグループを指定できます。 -.RS 3 -.TP 2 -o -\f3ケース 1 \- ソースディレクトリに移る\fP \- \f2.java\fP ファイルのあるディレクトリに移ります。次に、ドキュメント化する 1 つ以上のソースファイルの名前を指定して javadoc を実行します。 -.nf -\f3 -.fl - % \fP\f3cd /home/src/java/awt\fP -.fl - % \f3javadoc \-d /home/html Button.java Canvas.java Graphics*.java\fP -.fl -.fi -この例では、クラス \f2Button\fP と \f2Canvas\fP 、および名前が \f2Graphics で始まるクラスについて、HTML 形式のドキュメントが生成されます\fP。パッケージ名ではなくソースファイルが javadoc に引数として渡されているので、ドキュメントは、クラスのリストとメインページという 2 つのフレームを持つことになります。 -.TP 2 -o -\f3ケース 2 \- パッケージのルートディレクトリに移る\fP \- これは、同じルート内にある複数のサブパッケージの個々のソースファイルをドキュメント化する場合に便利です。パッケージのルートディレクトリに移り、各ソースファイルを、ルートからのパスとともに指定します。 -.nf -\f3 -.fl - % \fP\f3cd /home/src/\fP -.fl - % \f3javadoc \-d /home/html java/awt/Button.java java/applet/Applet.java\fP -.fl -.fi -この例では、クラス \f2Button\fP および \f2Applet について、HTML 形式のドキュメントが生成されます\fP。 -.TP 2 -o -\f3ケース 3 \- 任意のディレクトリから\fP \- このケースでは、現在のディレクトリがどこであってもかまいません。ドキュメント化する .java ファイルへの絶対パス (またはカレントディレクトリからの相対パス) を指定して \f2javadoc\fP を実行します。 -.nf -\f3 -.fl - % \fP\f3javadoc \-d /home/html /home/src/java/awt/Button.java /home/src/java/awt/Graphics*.java\fP -.fl -.fi -この例では、クラス \f2Button\fP と、名前が \f2Graphics で始まるクラスについて、HTML 形式のドキュメントが生成されます\fP。 +.\} +\fIjavadoc\fRコマンドを次のように実行します。\fI javadoc \-bottom @bottom @packages\fR +.sp +\fI\-bottom\fRオプションを引数ファイルの最初に含めて、次のように\fIjavadoc\fRコマンドを実行することもできます。\fIjavadoc @bottom @packages\fR .RE -.SS -パッケージとクラスのドキュメント化 -.LP -パッケージ全体と個々のクラスを同時に指定してドキュメント化することもできます。次に前述の 2 つの例を組み合わせた例を示します。 \f2\-sourcepath\fP は、パッケージへのパスに対しては使用できますが、個々のクラスのパスに対しては使用できません。 +.SH "JAVADOCコマンドの実行" +.PP +\fIjavadoc\fRコマンドのリリース番号は\fIjavadoc \-J\-version\fRオプションで特定できます。出力ストリームには標準ドックレットのリリース番号が含まれます。\fI\-quiet\fRオプションで無効にできます。 +.PP +Java言語で記述されたプログラムから\fIjavadoc\fRコマンドを起動するには公開プログラマティック・インタフェースを使用します。このインタフェースは\fIcom\&.sun\&.tools\&.javadoc\&.Main\fRにあります(また\fIjavadoc\fRコマンドは再入可能です)。詳細は、標準ドックレット +(http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/javadoc/standard\-doclet\&.html#runningprogrammatically)を参照してください。 +.PP +次の手順では、標準HTMLドックレットを呼び出します。カスタム・ドックレットを呼び出すには、\fI\-doclet\fRおよび\fI\-docletpath\fRオプションを使用しますドックレットの概要 +(http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/javadoc/doclet/overview\&.html)を参照してください +.SS "簡単な例" +.PP +\fIjavadoc\fRコマンドは、パッケージ全体に対して実行することも、個々のソース・ファイルに対して実行することもできます。各パッケージ名は、それぞれのパッケージ名に対応するディレクトリ名を持ちます。 +.PP +次の例では、ソース・ファイルは/home/src/java/awt/*\&.javaにあります。生成先ディレクトリは/home/htmlです。 +1つ以上のパッケージのドキュメント化.PP +パッケージをドキュメント化するには、そのパッケージのソース・ファイルを、そのパッケージと同じ名前のディレクトリ内に格納する必要があります。 +.PP +パッケージ名が(\fIjava\&.awt\&.color\fRのようにドットで区切られた)複数の識別子から構成されている場合、後続の各識別子が下位のサブディレクトリ(ava/awt/colorなど)に対応している必要があります。 +.PP +1つのパッケージのための複数のソース・ファイルを、異なる場所にあるそのような2つのディレクトリ・ツリーに分けて格納することもできます。ただし、その場合は\fI\-sourcepath\fRによってその両方の場所を指定する必要があります。たとえば、src1/java/awt/colorとsrc2/java/awt/color。 +.PP +ディレクトリの変更(\fIcd\fRコマンドを使用)または\fI\-sourcepath\fRオプションにより、\fIjavadoc\fRコマンドを実行できます。次の例で両方の選択肢を示します。 +.PP +\fBExample 1\fR, 1つ以上のパッケージから再帰的に実行 +.RS 4 +この例では\fIjavadoc\fRコマンドが任意のディレクトリから実行できるように、\fI\-sourcepath\fRを使用し、再帰的処理のために\fI\-subpackages\fR +(1\&.4の新オプション)を使用します。これは、javaディレクトリのサブパッケージをたどりますが、\fIjava\&.net\fRと\fIjava\&.lang\fRをルートに持つパッケージは除外されます。\fIjava\&.lang\fRのサブパッケージである\fIjava\&.lang\&.ref\fRが除外される点に注意してください。また、他のパッケージ・ツリーを下方にたどるには、\fIjava:javax:org\&.xml\&.sax\fRのように、それらのパッケージの名前を\fI\-subpackages\fRの引数に追加します。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl - % \fP\f3javadoc \-d /home/html \-sourcepath /home/src java.awt /home/src/java/applet/Applet.java\fP -.fl +javadoc \-d /home/html \-sourcepath /home/src \-subpackages java \-exclude .fi -.LP -この例では、パッケージ \f2java.awt\fP とクラス \f2Applet について、HTML 形式のドキュメントが生成されます\fP。Javadoc ツールは、 \f2Applet.java ソースファイル内にパッケージ宣言があれば、\fP その宣言に基づいて \f2Applet のパッケージ名を\fP 判定します。 -.SH "使用例" -.LP -Javadoc ツールには多くの便利なオプションがあり、その中にはほかのオプションよりも頻繁に使われるものがあります。ここで紹介するのは、Java プラットフォーム API に対して Javadoc ツールを実行するときに使用する実際のコマンドです。ここでは、Java SE Platform, Standard Edition, v1.2 の (約) 1500 個の public および protected クラスのドキュメントを生成するために、180M バイトのメモリーを使用します。 -.LP -同じ例を 2 回掲載します。最初の例はコマンド行から実行するもので、2 番目の例は Makefile から実行するものです。オプションの引数で絶対パスが使用されているため、同じ \f2javadoc\fP コマンドをどのディレクトリからでも実行できます。 -.SS -コマンド行の例 -.LP -次の例は、DOS などの一部のシェルでは長すぎる可能性があります。この制限を回避するには、コマンド行引数ファイルを使用します。または、シェルスクリプトを記述します。 +.if n \{\ +.RE +.\} +.RE +.PP +\fBExample 2\fR, ルートへの移動および明示的なパッケージの実行 +.RS 4 +完全修飾されたパッケージの親ディレクトリに移動します。次に、ドキュメント化する1つ以上のパッケージの名前を指定して\fIjavadoc\fRコマンドを実行します。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -% javadoc \-sourcepath /java/jdk/src/share/classes \\ -.fl - \-overview /java/jdk/src/share/classes/overview.html \\ -.fl - \-d /java/jdk/build/api \\ -.fl - \-use \\ -.fl - \-splitIndex \\ -.fl - \-windowtitle 'Java Platform, Standard Edition 7 API Specification' \\ -.fl - \-doctitle 'Java Platform, Standard Edition 7 API Specification' \\ -.fl - \-header '<b>Java(TM) SE 7</b>' \\ -.fl - \-bottom '<font size="\-1"> -.fl - <a href="http://bugreport.sun.com/bugreport/">Submit a bug or feature</a><br/> -.fl - Copyright © 1993, 2011, Oracle and/or its affiliates. All rights reserved.<br/> -.fl - Oracle is a registered trademark of Oracle Corporation and/or its affiliates. -.fl - その他の名称は、それぞれの所有者の商標または登録商標です。</font>' \\ -.fl - \-group "Core Packages" "java.*:com.sun.java.*:org.omg.*" \\ -.fl - \-group "Extension Packages" "javax.*" \\ -.fl - \-J\-Xmx180m \\ -.fl - @packages -.fl -\fP +cd /home/src/ +javadoc \-d /home/html java\&.awt java\&.awt\&.event .fi -.LP -ここで、 \f2packages\fP は、処理対象のパッケージ名 ( \f2java.applet java.lang\fP など) が入っているファイルの名前です。各オプションの、単一引用符で囲まれた引数の内側には、改行文字を挿入できません。たとえば、この例をコピー&ペーストする場合は、 \f2\-bottom\fP オプションから改行文字を削除してください。さらに、このあとの「注」も参照してください。 -.SS -Makefile の例 -.LP -ここでは、GNU Makefile の例を示します。Windows の Makefile の例については、 -.na -\f2Windows の Makefile の作成方法\fP @ -.fi -http://java.sun.com/j2se/javadoc/faq/index.html#makefilesを参照してください。 +.if n \{\ +.RE +.\} +また、他のパッケージ・ツリーを下方にたどるには、j\fIava:javax:org\&.xml\&.sax\fRのように、それらのパッケージの名前を\fI\-subpackages\fRの引数に追加します。 +.RE +.PP +\fBExample 3\fR, 1つのツリーの明示的なパッケージの任意のディレクトリから実行 +.RS 4 +この場合、現在のディレクトリがどこかは問題ではありません。\fIjavadoc\fRコマンドを実行し、最上位パッケージの親ディレクトリを指定して\fI\-sourcepath\fRオプションを使用します。ドキュメント化する1つ以上のパッケージの名前を指定します。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -javadoc \-\fP\f3sourcepath\fP\f3 $(SRCDIR) \\ /* Sets path for source files */ -.fl - \-\fP\f3overview\fP\f3 $(SRCDIR)/overview.html \\ /* Sets file for overview text */ -.fl - \-\fP\f3d\fP\f3 /java/jdk/build/api \\ /* Sets destination directory */ -.fl - \-\fP\f3use\fP\f3 \\ /* Adds "Use" files */ -.fl - \-\fP\f3splitIndex\fP\f3 \\ /* Splits index A\-Z */ -.fl - \-\fP\f3windowtitle\fP\f3 $(WINDOWTITLE) \\ /* Adds a window title */ -.fl - \-\fP\f3doctitle\fP\f3 $(DOCTITLE) \\ /* Adds a doc title */ -.fl - \-\fP\f3header\fP\f3 $(HEADER) \\ /* Adds running header text */ -.fl - \-\fP\f3bottom\fP\f3 $(BOTTOM) \\ /* Adds text at bottom */ -.fl - \-\fP\f3group\fP\f3 $(GROUPCORE) \\ /* 1st subhead on overview page */ -.fl - \-\fP\f3group\fP\f3 $(GROUPEXT) \\ /* 2nd subhead on overview page */ -.fl - \-\fP\f3J\fP\f3\-Xmx180m \\ /* Sets memory to 180MB */ -.fl - java.lang java.lang.reflect \\ /* Sets packages to document */ -.fl - java.util java.io java.net \\ -.fl - java.applet -.fl +javadoc \-d /home/html \-sourcepath /home/src java\&.awt java\&.awt\&.event +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\fBExample 4\fR, 複数のツリーの明示的なパッケージの任意のディレクトリから実行 +.RS 4 +\fIjavadoc\fRコマンドを実行し、各ツリーのルートへのパスのコロン区切りリストを指定して\fI\-sourcepath\fRオプションを使用します。ドキュメント化する1つ以上のパッケージの名前を指定します。指定したパッケージのすべてのソース・ファイルが、1つのルート・ディレクトリの下に存在する必要はありませんが、ソース・パスで指定された場所のどこかで見つかる必要があります。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +javadoc \-d /home/html \-sourcepath /home/src1:/home/src2 java\&.awt java\&.awt\&.event +.fi +.if n \{\ +.RE +.\} +すべてのケースでj\fIava\&.awt\fRおよび\fIjava\&.awt\&.even\fRtパッケージ内の\fIpublic\fRおよび\fIprotected\fRクラスとインタフェースについて、HTML形式のドキュメントが生成され、指定された生成先ディレクトリにHTMLファイルが保存されます。2つ以上のパッケージが生成されているので、ドキュメントは、パッケージのリスト、クラスのリスト、およびメインのクラス・ページという3つのHTMLフレームを持つことになります。 +.RE +1つ以上のクラスのドキュメント化.PP +また、1つ以上のソース・ファイルを渡して、\fIjavadoc\fRコマンドを実行することもできます。\fIjavadoc\fRは、次の2つの方法のいずれかで実行できます。1つはディレクトリを変更する方法(\fIcd\fRを使用)、もう1つはソース・ファイルへのパスを完全に指定する方法です。相対パスは、現在のディレクトリを起点とします。ソース・ファイルを渡すときは、\fI\-sourcepath\fRオプションは無視されます。アスタリスク(*)のようなコマンドライン・ワイルドカードを使用すると、クラスのグループを指定できます。 +.PP +\fBExample 1\fR, ソース・ディレクトリに変更 +.RS 4 +ソースを保持するディレクトリに変更します。次に、ドキュメント化する1つ以上のソース・ファイルの名前を指定して\fIjavadoc\fRコマンドを実行します。 +.sp +この例では、\fIButton\fRクラスと\fICanvas\fRクラス、および名前が\fIGraphics\fRで始まるクラスについて、HTML形式のドキュメントが生成されます。パッケージ名ではなくソース・ファイルが\fIjavadoc\fRコマンドに引数として渡されているので、ドキュメントは、クラスのリストとメイン・ページという2つのフレームを持つことになります。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +cd /home/src/java/awt +javadoc \-d /home/html Button\&.java Canvas\&.java Graphics*\&.java +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\fBExample 2\fR, パッケージのルート・ディレクトリに変更 +.RS 4 +これは、同じルートからの別のサブパッケージの個々のソース・ファイルをドキュメント化するのに役立ちます。パッケージのルート・ディレクトリに移り、各ソース・ファイルを、ルートからのパスとともに指定します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +cd /home/src/ +javadoc \-d /home/html java/awt/Button\&.java java/applet/Applet\&.java +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\fBExample 3\fR, 任意のディレクトリからのファイルのドキュメント化 +.RS 4 +この場合、現在のディレクトリがどこかは問題ではありません。ドキュメント化するソース・ファイルへの絶対パス(または現在のディレクトリからの相対パス)を指定して\fIjavadoc\fRコマンドを実行します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +javadoc \-d /home/html /home/src/java/awt/Button\&.java +/home/src/java/awt/Graphics*\&.java +.fi +.if n \{\ +.RE +.\} +.RE +パッケージおよびクラスのドキュメント化.PP +パッケージ全体と個々のクラスを同時に指定してドキュメント化することもできます。次に、前述の2つの例を組み合せた例を示します。\fI\-sourcepath\fRオプションは、パッケージへのパスに対しては使用できますが、個々のクラスへのパスに対しては使用できません。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +javadoc \-d /home/html \-sourcepath /home/src java\&.awt +/home/src/java/applet/Applet\&.java +.fi +.if n \{\ +.RE +.\} +.SS "実際の例" +.PP +次のコマンドラインおよび\fImakefile\fRバージョンの\fIjavadoc\fRコマンドをJavaプラットフォームAPIで実行します。Java SE 1\&.2で約1500個のpublicおよびprotectedクラスのドキュメントを生成するには、180MBのメモリーを使用します。どちらの例もオプションの引数で絶対パスが使用されているため、任意のディレクトリから同じ\fIjavadoc\fRコマンドを実行できます。 +コマンドラインの例.PP +次のコマンドは、一部のシェルに対して長すぎる可能性があります。この制限を回避するには、コマンドライン引数ファイルを使用します。または、シェル・スクリプトを記述します。 +.PP +この例では、\fIpackages\fRは処理するパッケージを含む名前で、\fIjava\&.applet\fR +\fIjava\&.lang\fRなどです。各オプションの、一重引用符で囲まれた引数の内側には、改行文字を挿入できません。たとえば、この例をコピー・アンド・ペーストする場合は、\fI\-bottom\fRオプションから改行文字を削除してください。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +javadoc \-sourcepath /java/jdk/src/share/classes \e +\-overview /java/jdk/src/share/classes/overview\&.html \e +\-d /java/jdk/build/api \e +\-use \e +\-splitIndex \e +\-windowtitle \*(AqJava Platform, Standard Edition 7 API Specification\*(Aq \e +\-doctitle \*(AqJava Platform, Standard Edition 7 API Specification\*(Aq \e +\-header \*(Aq<b>Java(TM) SE 7</b>\*(Aq \e +\-bottom \*(Aq<font size="\-1"> +<a href="http://bugreport\&.sun\&.com/bugreport/">Submit a bug or feature</a><br/> +Copyright © 1993, 2011, Oracle and/or its affiliates\&. All rights reserved\&.<br/> +Oracle is a registered trademark of Oracle Corporation and/or its affiliates\&. +Other names may be trademarks of their respective owners\&.</font>\*(Aq \e +\-group "Core Packages" "java\&.*:com\&.sun\&.java\&.*:org\&.omg\&.*" \e +\-group "Extension Packages" "javax\&.*" \e +\-J\-Xmx180m \e +@packages +.fi +.if n \{\ +.RE +.\} +プログラマティック・インタフェース.PP +Javadoc Access APIでは、新しいプロセスを実行しなくても、JavadocツールをJavaアプリケーションから直接起動できます。 +.PP +たとえば、次の文はコマンド\fIjavadoc \-d /home/html \-sourcepath /home/src \-subpackages java \-exclude java\&.net:java\&.lang com\&.example\fRと同等です。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +import javax\&.tools\&.DocumentationTool; +import javax\&.tools\&.ToolProvider; + +public class JavaAccessSample{ + public static void main(String[] args){ + DocumentationTool javadoc = ToolProvider\&.getSystemDocumentationTool(); + int rc = javadoc\&.run( null, null, null, + "\-d", "/home/html", + "\-sourcepath", "home/src", + "\-subpackages", "java", + "\-exclude", "java\&.net:java\&.lang", + "com\&.example"); + } + } +.fi +.if n \{\ +.RE +.\} +.PP +\fIrun\fRメソッドの最初の3つの引数は、入力、標準出力、および標準エラー・ストリームを指定します。\fINull\fRは\fISystem\&.in\fR、\fISystem\&.out\fRおよび\fISystem\&.err\fRそれぞれのデフォルト値です。 +.SS "makefileの例" +.PP +ここでは、GNU +\fImakefile\fRの例を示します。\fImakefile\fRの引数は、一重引用符で囲みます。Windows +\fImakefile\fRの例については、Javadoc FAQの\fImakefiles\fRに関する項 +(http://www\&.oracle\&.com/technetwork/java/javase/documentation/index\-137483\&.html#makefiles)を参照してください +.sp +.if n \{\ +.RS 4 +.\} +.nf +javadoc \-sourcepath $(SRCDIR) \e /* Sets path for source files */ + \-overview $(SRCDIR)/overview\&.html \e /* Sets file for overview text */ + \-d /java/jdk/build/api \e /* Sets destination directory */ + \-use \e /* Adds "Use" files */ + \-splitIndex \e /* Splits index A\-Z */ + \-windowtitle $(WINDOWTITLE) \e /* Adds a window title */ + \-doctitle $(DOCTITLE) \e /* Adds a doc title */ + \-header $(HEADER) \e /* Adds running header text */ + \-bottom $(BOTTOM) \e /* Adds text at bottom */ + \-group $(GROUPCORE) \e /* 1st subhead on overview page */ + \-group $(GROUPEXT) \e /* 2nd subhead on overview page */ + \-J\-Xmx180m \e /* Sets memory to 180MB */ + java\&.lang java\&.lang\&.reflect \e /* Sets packages to document */ + java\&.util java\&.io java\&.net \e + java\&.applet -.fl -WINDOWTITLE = 'Java(TM) SE 7 API Specification' -.fl -DOCTITLE = 'Java(TM) Platform Standard Edition 7 API Specification' -.fl -HEADER = '<b>Java(TM) SE 7</font>' -.fl -BOTTOM = '<font size="\-1"> -.fl - <a href="http://bugreport.sun.com/bugreport/">Submit a bug or feature</a><br/> -.fl - Copyright © 1993, 2011, Oracle and/or its affiliates. All rights reserved.<br/> -.fl - Oracle is a registered trademark of Oracle Corporation and/or its affiliates. -.fl - その他の名称は、それぞれの所有者の商標または登録商標です。</font>' -.fl -GROUPCORE = '"Core Packages" "java.*:com.sun.java.*:org.omg.*"' -.fl -GROUPEXT = '"Extension Packages" "javax.*"' -.fl -SRCDIR = '/java/jdk/1.7.0/src/share/classes' -.fl -\fP +WINDOWTITLE = \*(AqJava(TM) SE 7 API Specification\*(Aq +DOCTITLE = \*(AqJava(TM) Platform Standard Edition 7 API Specification\*(Aq +HEADER = \*(Aq<b>Java(TM) SE 7</font>\*(Aq +BOTTOM = \*(Aq<font size="\-1"> + <a href="http://bugreport\&.sun\&.com/bugreport/">Submit a bug or feature</a><br/> + Copyright © 1993, 2011, Oracle and/or its affiliates\&. All rights reserved\&.<br/> + Oracle is a registered trademark of Oracle Corporation and/or its affiliates\&. + Other names may be trademarks of their respective owners\&.</font>\*(Aq +GROUPCORE = \*(Aq"Core Packages" "java\&.*:com\&.sun\&.java\&.*:org\&.omg\&.*"\*(Aq +GROUPEXT = \*(Aq"Extension Packages" "javax\&.*"\*(Aq +SRCDIR = \*(Aq/java/jdk/1\&.7\&.0/src/share/classes\*(Aq .fi -.LP -Makefile の引数は、単一引用符で囲みます。 -.LP -\f3注\fP -.RS 3 -.TP 2 -o -\-windowtitle \f2オプションを省略すると、\fP Javadoc ツールによってドキュメントタイトルがウィンドウタイトルにコピーされます。 \f2\-windowtitle\fP のテキストは基本的に \f2\-doctitle\fP のものと同じですが、HTML タグを含まない点が異なります。これは、HTML タグが raw テキストとしてウィンドウタイトル内に表示されるのを防ぐためです。 -.TP 2 -o -ここで行っているように \f2\-footer\fP オプションを省略すると、Javadoc ツールによってヘッダーのテキストがフッターにコピーされます。 -.TP 2 -o -この例では必要ありませんが、\-\f2classpath\fP と \-\f2link\fP も重要なオプションです。 +.if n \{\ .RE -.SH "トラブルシューティング" -.SS -一般的なトラブルシューティング -.RS 3 -.TP 2 -o -\f3Javadoc FAQ\fP \- 一般的なバグおよびトラブルシューティングのヒントは、 -.na -\f2「Javadoc FAQ」\fP @ -.fi -http://java.sun.com/j2se/javadoc/faq/index.html#B で参照できます。 -.TP 2 -o -\f3バグおよび制限事項\fP \- バグの一部は、「Important Bug Fixes and Changes」 でも参照できます。 -.TP 2 -o -\f3バージョン番号\fP \- 「バージョン番号」を参照してください。 -.TP 2 -o -\f3有効なクラスだけをドキュメント化\fP \- パッケージをドキュメント化するとき、Javadoc は、有効なクラス名で構成されているファイルのみを読み込みます。たとえば、ファイル名にハイフン「\-」を含めることで、javadoc によるファイルの解析を防ぐことができます。 +.\} +.SS "注意" +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fI\-windowtitle\fRオプションを省略すると、\fIjavadoc\fRコマンドによってドキュメント・タイトルがウィンドウ・タイトルにコピーされます。\fI\-windowtitle\fRオプションのテキストは、\fI\-doctitle\fRオプションと同じですが、HTMLタグは含まれません。これは、HTMLタグが、ウィンドウ・タイトル内にそのままのテキストとして表示されるのを防ぐためです。 .RE -.SS -エラーと警告 -.LP -エラーおよび警告メッセージには、ファイル名と宣言行 (ドキュメンテーションコメント内の特定の行ではない) の行番号が含まれます。 -.RS 3 -.TP 2 -o -\f2"error: cannot read: Class1.java"\fP Javadoc ツールはカレントディレクトリに Class1.java クラスをロードしようとしています。絶対パスまたは相対パスとともに表示されるクラス名は、この例の場合 \f2./Class1.java と同じです\fP。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fI\-footer\fRオプションを省略すると、\fIjavadoc\fRコマンドによってヘッダー・テキストがフッターにコピーされます。 .RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +この例では必要ありませんが、\fI\-classpath\fRと\fI\-link\fRも重要なオプションです。 +.RE +.SH "一般的なトラブルシューティング" +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fIjavadoc\fRコマンドは有効なクラス名を含むファイルのみを読み取ります。\fIjavadoc\fRコマンドがファイルの内容を正しく読み取っていない場合は、クラス名が有効であることを確認します。ソース・ファイルの処理を参照してください。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +共通の不具合およびトラブルシューティングのヒントについては、Javadoc FAQ +(http://www\&.oracle\&.com/technetwork/java/javase/documentation/index\-137483\&.html)を参照してください。 +.RE +.SH "エラーと警告" +.PP +エラーおよび警告メッセージには、ファイル名と宣言行(ドキュメンテーション・コメント内の特定の行ではない)の行番号が含まれます。 +.PP +たとえば、メッセージ\fI「エラー: Class1\&.javaを読み込めません」\fRは、\fIjavadoc\fRコマンドが\fIClass1\&.jav\fR\fIa\fRを現在のディレクトリにロードしようとしていることを意味します。クラス名はそのパス(絶対または相対)で表示されます。 .SH "環境" -.RS 3 -.TP 3 -CLASSPATH -Javadoc がユーザークラスのファイルを探すときに使うパスを指定する環境変数です。この環境変数は、 \f2\-classpath\fP オプションによってオーバーライドされます。ディレクトリは、次のようにコロンで区切ります。 -.:/home/classes:/usr/local/java/classes +.PP +CLASSPATH +.RS 4 +\fICLASSPATH\fRは、\fIjavadoc\fRコマンドがユーザー・クラス・ファイルの検出に使用するパスを提供する環境変数です。この環境変数は、\fI\-classpath\fRオプションによってオーバーライドされます。ディレクトリはセミコロン(Windowsの場合)またはコロン(Oracle Solarisの場合)で区切ります。 +.sp +\fBWindowsの例\fR: +\fI\&.;C:\eclasses;C:\ehome\ejava\eclasses\fR +.sp +\fBOracle Solarisの例\fR: +\fI\&.:/home/classes:/usr/local/java/classes\fR .RE .SH "関連項目" -.RS 3 -.TP 2 -o -javac(1) -.TP 2 -o -java(1) -.TP 2 -o -jdb(1) -.TP 2 -o -javah(1) -.TP 2 -o -javap(1) -.TP 2 -o -.na -\f2Javadoc のホームページ\fP @ -.fi -http://www.oracle.com/technetwork/java/javase/documentation/index\-jsp\-135444.html -.TP 2 -o -.na -\f2How to Write Doc Comments for Javadoc\fP @ -.fi -http://www.oracle.com/technetwork/java/javase/documentation/index\-137868.html -.TP 2 -o -.na -\f2クラスパスの設定\fP @ -.fi -http://java.sun.com/javase/6/docs/technotes/tools/index.html#general -.TP 2 -o -.na -\f2javac と javadoc がクラスを検索する方法\fP @ -.fi -http://java.sun.com/javase/6/docs/technotes/tools/findingclasses.html#srcfiles (tools.jar) +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +javac(1) .RE - +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +java(1) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +jdb(1) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +javah(1) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +javap(1) +.RE +.SH "関連ドキュメント" +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +Javadocテクノロジ +(http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/javadoc/index\&.html) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +クラスの検出方法 +(http://docs\&.oracle\&.com/javase/8/docs/technotes/tools/findingclasses\&.html) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +JavadocツールでのDocコメントの記述方法 +(http://www\&.oracle\&.com/technetwork/java/javase/documentation/index\-137868\&.html) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +URLメモ、Uniform Resource Locators +(http://www\&.ietf\&.org/rfc/rfc1738\&.txt) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +HTML標準、HTML Document Representation (4197265および4137321) +(http://www\&.w3\&.org/TR/REC\-html40/charset\&.html#h\-5\&.2\&.2) +.RE +.br +'pl 8.5i +'bp diff --git a/jdk/src/linux/doc/man/ja/javah.1 b/jdk/src/linux/doc/man/ja/javah.1 index b9c445d6b80..e88dfbfaabd 100644 --- a/jdk/src/linux/doc/man/ja/javah.1 +++ b/jdk/src/linux/doc/man/ja/javah.1 @@ -1,139 +1,220 @@ -." 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 -." 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. -." -.TH javah 1 "07 May 2011" - -.LP -.SH "名前" -javah \- C ヘッダーとスタブファイルジェネレータ -.LP -.LP -\f3javah\fP は、Java クラスから C ヘッダーファイルと C ソースファイルを作成します。これらのファイルは、Java プログラミング言語で書かれたコードと、C などのその他の言語で書かれたコードを接続し、コードが相互に作用するようにします。 -.LP -.SH "形式" -.LP +'\" t +.\" Copyright (c) 1994, 2013, Oracle and/or its affiliates. All rights reserved. +.\" Title: javah +.\" Language: English +.\" Date: 2013年11月21日 +.\" SectDesc: 基本ツール +.\" Software: JDK 8 +.\" Arch: 汎用 +.\" +.\" 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. +.\" +.pl 99999 +.TH "javah" "1" "2013年11月21日" "JDK 8" "基本ツール" +.\" ----------------------------------------------------------------- +.\" * Define some portability stuff +.\" ----------------------------------------------------------------- +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.\" http://bugs.debian.org/507673 +.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" ----------------------------------------------------------------- +.\" * set default formatting +.\" ----------------------------------------------------------------- +.\" disable hyphenation +.nh +.\" disable justification (adjust text to left margin only) +.ad l +.\" ----------------------------------------------------------------- +.\" * MAIN CONTENT STARTS HERE * +.\" ----------------------------------------------------------------- +.SH "NAME" +javah \- JavaクラスからCヘッダーとソース・ファイルを生成します。 +.SH "概要" +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -javah [ \fP\f3options\fP\f3 ] fully\-qualified\-classname. . . -.fl -\fP +\fIjavah\fR [ \fIoptions\fR ] f\fIully\-qualified\-class\-name \&.\&.\&.\fR .fi - -.LP +.if n \{\ +.RE +.\} +.PP +\fIoptions\fR +.RS 4 +コマンドライン・オプション。オプションを参照してください。 +.RE +.PP +\fIfully\-qualified\-class\-name\fR +.RS 4 +Cヘッダーとソース・ファイルに変換されるクラスの完全修飾された場所。 +.RE .SH "説明" -.LP -.LP -\f3javah\fP は、ネイティブメソッドを実装するために必要な C ヘッダーとソースファイルを生成します。作成されたヘッダーとソースファイルは、ネイティブソースコードからオブジェクトのインスタンス変数を参照するために C プログラムによって使用されます。.h ファイルは、対応するクラスと一致する配置を持つ構造体定義を含みます。構造体のフィールドは、クラスのインスタンス変数に対応します。 -.LP -.LP -ヘッダーファイルとその中で宣言される構造体の名前はクラスの名前から派生します。\f3javah\fP に渡されるクラスがパッケージの中にある場合、パッケージ名はヘッダーファイル名と構造体名の両方に付加されます。下線 (_) が名前の区切り文字として使用されます。 -.LP -.LP -デフォルトでは \f3javah\fP は、コマンド行にリストされる各クラスのヘッダーファイルを作成し、現在のディレクトリにファイルを置きます。ソースファイルを作成するには、\f2\-stubs\fP オプションを使用してください。1 つのファイルの中に、リストされたすべてのクラスの結果を連結するには、\f2\-o\fP オプションを使用してください。 -.LP -.LP -新しいネイティブメソッドインタフェースである Java Native Interface (JNI) は、ヘッダー情報またはスタブファイルを必要としません。現在では、\f3javah\fP は、JNI 形式のネイティブメソッドに必要なネイティブメソッド機能プロトタイプを生成します。デフォルトでは、\f3javah\fP は JNI 形式で出力され、その結果は .h ファイルに格納されます。 -.LP +.PP +\fIjavah\fRコマンドは、ネイティブ・メソッドを実装するために必要なCヘッダーとソース・ファイルを生成します。作成されたヘッダーとソース・ファイルは、ネイティブ・ソース・コードからオブジェクトのインスタンス変数を参照するためにCプログラムによって使用されます。\fI\&.h\fRファイルは、対応するクラスと一致する配置を持つ\fIstruct\fR定義を含みます。\fIstruct\fRのフィールドは、クラスのインスタンス変数に対応します。 +.PP +ヘッダー・ファイルとその中で宣言される構造体の名前はクラスの名前から派生します。\fIjavah\fRコマンドに渡されるクラスがパッケージの中にある場合、パッケージ名はヘッダー・ファイル名と構造体名の両方の先頭に付加されます。下線(_)が名前の区切り文字として使用されます。 +.PP +デフォルトでは\fIjavah\fRコマンドは、コマンドラインにリストされる各クラスのヘッダー・ファイルを作成し、現在のディレクトリにファイルを置きます。ソース・ファイルを作成するには、\fI\-stubs\fRオプションを使用してください。1つのファイルの中に、リストされたすべてのクラスの結果を連結するには、\fI\-o\fRオプションを使用してください。 +.PP +Java Native Interface (JNI)はヘッダー情報またはスタブ・ファイルを必要としません。\fIjavah\fRコマンドは引き続きJNI形式のネイティブ・メソッドに必要なネイティブ・メソッド関数プロトタイプの生成に使用できます。\fIjavah\fRコマンドはデフォルトでJNI形式の出力を生成し、その結果を\fI\&.h\fRファイルに格納します。 .SH "オプション" -.LP -.RS 3 -.TP 3 -\-o outputfile -コマンド行にリストされたすべてのクラスに対して、結果のヘッダーまたはソースファイルを連結して \f2outputfile\fP に格納します。\f3\-o\fP または \f3\-d\fP のどちらか一方だけが使われます。 -.TP 3 -\-d directory -\f3javah\fP がヘッダーファイルまたはスタブファイルを保存する、ディレクトリを設定します。\f3\-d\fP または \f3\-o\fP のどちらか一方だけが使われます。 -.TP 3 -\-stubs -\f3javah\fP が、Java オブジェクトファイルから C 宣言を生成します。 -.TP 3 -\-verbose -詳細出力を指定し、作成ファイルの状態に関するメッセージを、\f3javah\fP が標準出力に出力します。 -.TP 3 -\-help -\f3javah\fP の使用法についてのヘルプメッセージを出力します。 -.TP 3 -\-version -\f3javah\fP のバージョン情報を出力します。 -.TP 3 -\-jni -JNI 形式のネイティブファイル機能プロトタイプを含む出力ファイルを、\f3javah\fP が作成します。これは標準出力であるため、\f3\-jni\fP の使用はオプションです。 -.TP 3 -\-classpath path -クラスを探すために \f3javah\fP が使用するパスを指定します。デフォルトまたは CLASSPATH 環境変数設定を上書きします。ディレクトリはコロンで分割します。したがって、\f2path\fP の一般形式は次のようになります。 -.nf -\f3 -.fl - .:<your_path> -.fl -\fP -.fi -次に例を示します。 -.nf -\f3 -.fl - .:/home/avh/classes:/usr/local/java/classes -.fl -\fP -.fi -.LP -便宜上、 \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 プログラムが展開されていないワイルドカードを認識することはありません。 -.TP 3 -\-bootclasspath path -ブートストラップクラスをロードするパスを指定します。ブートストラップクラスは、デフォルトでは \f2jre/lib/rt.jar\fP および他のいくつかの JAR ファイル にある、コア Java 2 プラットフォームを実装するクラスです。 -.TP 3 -\-old -古い JDK1.0 形式のヘッダーファイルを生成するように指定します。 -.TP 3 -\-force -出力ファイルが常に書き込まれるように指定します。 -.TP 3 -\-Joption -Java 仮想マシンに \f2option\fP を渡します。\f2option\fP には、java(1)のリファレンスページに記載されているオプションを 1 つ指定します。たとえば、\f3\-J\-Xms48m\fP と指定すると、スタートアップメモリーは 48M バイトに設定されます。 +.PP +\-o \fIoutputfile\fR +.RS 4 +コマンドラインにリストされたすべてのクラスに対して、結果のヘッダーまたはソース・ファイルを連結して出力ファイルに格納します。\fI\-o\fRまたは\fI\-d\fRのどちらかのみ使用できます。 .RE - -.LP -.SH "環境変数" -.LP -.RS 3 -.TP 3 -CLASSPATH -ユーザー定義クラスへのパスをシステムに指定します。ディレクトリはコロンで分割されています。 -.nf -\f3 -.fl -.:/home/avh/classes:/usr/local/java/classes -.fl -\fP -.fi +.PP +\-d \fIdirectory\fR +.RS 4 +\fIjavah\fRがヘッダー・ファイルまたはスタブ・ファイルを保存する、ディレクトリを設定します。\fI\-d\fRまたは\fI\-o\fRのどちらかのみ使用できます。 +.RE +.PP +\-stubs +.RS 4 +\fIjavah\fRコマンドが、Javaオブジェクト・ファイルからC宣言を生成します。 +.RE +.PP +\-verbose +.RS 4 +詳細出力を指定し、作成ファイルの状態に関するメッセージを、\fIjavah\fRコマンドが\fI標準出力\fRに出力します。 +.RE +.PP +\-help +.RS 4 +\fIjavah\fRの使用方法についてのヘルプ・メッセージを出力します。 +.RE +.PP +\-version +.RS 4 +\fIjavah\fRコマンドのリリース情報を出力します。 +.RE +.PP +\-jni +.RS 4 +JNI形式のネイティブ・メソッド機能プロトタイプを含む出力ファイルを、\fIjavah\fRコマンドが作成します。これは標準出力であるため、\fI\-jni\fRの使用はオプションです。 +.RE +.PP +\-classpath \fIpath\fR +.RS 4 +クラスを探すために\fIjavah\fRコマンドが使用するパスを指定します。デフォルトまたは\fICLASSPATH\fR環境変数の設定をオーバーライドします。ディレクトリはOracle Solarisの場合はコロンで、Windowsの場合はセミコロンで区切られます。パスの一般的な形式は次のようになります。 +.sp +\fBOracle Solaris\fRの場合: +.sp +\&.:\fIyour\-path\fR +.sp +例: +\fI\&.:/home/avh/classes:/usr/local/java/classes\fR +.sp +\fBWindows\fRの場合: +.sp +\&.;\fIyour\-path\fR +.sp +例: +\fI\&.;C:\eusers\edac\eclasses;C:\etools\ejava\eclasses\fR +.sp +便宜上、*のベース名を含むクラス・パス要素は、\fI\&.jar\fRまたは\fI\&.JAR\fRを拡張子に持つディレクトリ内のすべてのファイルのリストを指定するのと同等とみなされます。 +.sp +たとえば、ディレクトリ\fImydir\fRに\fIa\&.jar\fRと\fIb\&.JAR\fRが含まれている場合、クラス・パス要素\fImydir/*\fRは\fIA\fR\fI\&.jar:b\&.JAR\fRに展開されますが、JARファイルの順番は未指定となります。このリストには、隠しファイルも含め、指定されたディレクトリ内のすべてのJARファイルが含まれます。*からなるクラス・パス・エントリは、現在のディレクトリ内のすべてのJARファイルのリストに展開されます。\fICLASSPATH\fR環境変数も、定義時には同様に展開されます。クラス・パスのワイルドカードの展開は、Java仮想マシン(JVM)の開始前に行われます。Javaプログラムは、環境を問い合せる場合を除き、展開されていないワイルドカードを参照しません。たとえば、\fISystem\&.getenv("CLASSPATH")\fRをコールして問い合せる場合です。 +.RE +.PP +\-bootclasspath \fIpath\fR +.RS 4 +ブートストラップ・クラスをロードするパスを指定します。ブートストラップ・クラスは、デフォルトでは\fIjre\elib\ert\&.jar\fRおよび他のいくつかのJARファイルにある、コアJavaプラットフォームを実装するクラスです。 +.RE +.PP +\-old +.RS 4 +古いJDK 1\&.0形式のヘッダー・ファイルを生成するように指定します。 +.RE +.PP +\-force +.RS 4 +出力ファイルが常に書き込まれるように指定します。 +.RE +.PP +\-J\fIoption\fR +.RS 4 +Java仮想マシンに\fIoption\fRを渡します。\fIoption\fRには、Javaアプリケーション起動ツールのリファレンス・ページに記載されているオプションを1つ指定します。たとえば、\fI\-J\-Xms48m\fRと指定すると、スタートアップ・メモリーは48MBに設定されます。java(1)を参照してください。 .RE - -.LP .SH "関連項目" -.LP -.LP -javac(1)、java(1)、jdb(1)、javap(1)、javadoc(1) -.LP - +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +javah(1) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +java(1) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +jdb(1) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +javap(1) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +javadoc(1) +.RE +.br +'pl 8.5i +'bp diff --git a/jdk/src/linux/doc/man/ja/javap.1 b/jdk/src/linux/doc/man/ja/javap.1 index 1854f9d552e..152821dfebe 100644 --- a/jdk/src/linux/doc/man/ja/javap.1 +++ b/jdk/src/linux/doc/man/ja/javap.1 @@ -1,317 +1,344 @@ -." 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 -." 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. -." -.TH javap 1 "07 May 2011" - -.LP -.SH "名前" -javap \- Java クラスファイル逆アセンブラ -.LP -.LP -クラスファイルを逆アセンブルします。 -.LP -.SH "形式" -.LP +'\" t +.\" Copyright (c) 1994, 2013, Oracle and/or its affiliates. All rights reserved. +.\" Title: javap +.\" Language: English +.\" Date: 2013年11月21日 +.\" SectDesc: 基本ツール +.\" Software: JDK 8 +.\" Arch: 汎用 +.\" +.\" 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. +.\" +.pl 99999 +.TH "javap" "1" "2013年11月21日" "JDK 8" "基本ツール" +.\" ----------------------------------------------------------------- +.\" * Define some portability stuff +.\" ----------------------------------------------------------------- +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.\" http://bugs.debian.org/507673 +.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" ----------------------------------------------------------------- +.\" * set default formatting +.\" ----------------------------------------------------------------- +.\" disable hyphenation +.nh +.\" disable justification (adjust text to left margin only) +.ad l +.\" ----------------------------------------------------------------- +.\" * MAIN CONTENT STARTS HERE * +.\" ----------------------------------------------------------------- +.SH "NAME" +javap \- 1つ以上のクラス・ファイルを逆アセンブルします。 +.SH "概要" +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -javap [ \fP\f3options\fP\f3 ] classes -.fl -\fP +\fIjavap\fR [\fIoptions\fR] \fIclassfile\fR\&.\&.\&. .fi - -.LP +.if n \{\ +.RE +.\} +.PP +\fIoptions\fR +.RS 4 +コマンドライン・オプション。オプションを参照してください。 +.RE +.PP +\fIclassfile\fR +.RS 4 +注釈の処理対象となる、空白で区切った1つ以上のクラス(DocFooter\&.classなど)。クラス・パスで検出できるクラスを、ファイル名またはURL(\fIfile:///home/user/myproject/src/DocFooter\&.class\fRなど)で指定できます。 +.RE .SH "説明" -.LP -.LP -\f3javap\fP コマンドは、1 つまたは複数のクラスファイルを逆アセンブルします。その出力は指定するオプションにより異なります。オプションを指定しない場合、\f3javap\fP は、そのパッケージ、渡されたクラスの protected および public のフィールドとメソッドを出力します。\f3javap\fP はその出力を標準出力に表示します。 -.LP -.RS 3 -.TP 3 -options -コマンド行オプション。 -.TP 3 -classes -注釈の処理対象となる 1 つ以上のクラス \f2DocFooter.class\fP など) のリスト (空白区切り)。クラスパスで見つかるクラスは、ファイル名 ( \f2/home/user/myproject/src/DocFooter.class\fP など) または URL ( \f2file:///home/user/myproject/src/DocFooter.class\fP など) で指定できます。 -.RE - -.LP -.LP -たとえば、次のクラス宣言をコンパイルするとします。 -.LP -.nf -\f3 -.fl -import java.awt.*; -.fl -import java.applet.*; -.fl - -.fl -public class DocFooter extends Applet { -.fl - String date; -.fl - String email; -.fl - -.fl - public void init() { -.fl - resize(500,100); -.fl - date = getParameter("LAST_UPDATED"); -.fl - email = getParameter("EMAIL"); -.fl - } -.fl - -.fl - public void paint(Graphics g) { -.fl - g.drawString(date + " by ",100, 15); -.fl - g.drawString(email,290,15); -.fl - } -.fl -} -.fl -\fP -.fi - -.LP -.LP -\f3javap DocFooter.class\fP がもたらす出力は次のようになります。 -.LP -.nf -\f3 -.fl -Compiled from "DocFooter.java" -.fl -public class DocFooter extends java.applet.Applet { -.fl - java.lang.String date; -.fl - java.lang.String email; -.fl - public DocFooter(); -.fl - public void init(); -.fl - public void paint(java.awt.Graphics); -.fl -} -.fl -\fP -.fi - -.LP -.LP -\f3javap \-c DocFooter.class\fP がもたらす出力は次のようになります。 -.LP -.nf -\f3 -.fl -Compiled from "DocFooter.java" -.fl -public class DocFooter extends java.applet.Applet { -.fl - java.lang.String date; -.fl - -.fl - java.lang.String email; -.fl - -.fl - public DocFooter(); -.fl - Code: -.fl - 0: aload_0 -.fl - 1: invokespecial #1 // Method java/applet/Applet."<init>":()V -.fl - 4: return -.fl - -.fl - public void init(); -.fl - Code: -.fl - 0: aload_0 -.fl - 1: sipush 500 -.fl - 4: bipush 100 -.fl - 6: invokevirtual #2 // Method resize:(II)V -.fl - 9: aload_0 -.fl - 10: aload_0 -.fl - 11: ldc #3 // String LAST_UPDATED -.fl - 13: invokevirtual #4 // Method getParameter:(Ljava/lang/String;)Ljava/lang/String; -.fl - 16: putfield #5 // Field date:Ljava/lang/String; -.fl - 19: aload_0 -.fl - 20: aload_0 -.fl - 21: ldc #6 // String EMAIL -.fl - 23: invokevirtual #4 // Method getParameter:(Ljava/lang/String;)Ljava/lang/String; -.fl - 26: putfield #7 // Field email:Ljava/lang/String; -.fl - 29: return -.fl - -.fl - public void paint(java.awt.Graphics); -.fl - Code: -.fl - 0: aload_1 -.fl - 1: new #8 // class java/lang/StringBuilder -.fl - 4: dup -.fl - 5: invokespecial #9 // Method java/lang/StringBuilder."<init>":()V -.fl - 8: aload_0 -.fl - 9: getfield #5 // Field date:Ljava/lang/String; -.fl - 12: invokevirtual #10 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; -.fl - 15: ldc #11 // String by -.fl - 17: invokevirtual #10 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; -.fl - 20: invokevirtual #12 // Method java/lang/StringBuilder.toString:()Ljava/lang/String; -.fl - 23: bipush 100 -.fl - 25: bipush 15 -.fl - 27: invokevirtual #13 // Method java/awt/Graphics.drawString:(Ljava/lang/String;II)V -.fl - 30: aload_1 -.fl - 31: aload_0 -.fl - 32: getfield #7 // Field email:Ljava/lang/String; -.fl - 35: sipush 290 -.fl - 38: bipush 15 -.fl - 40: invokevirtual #13 // Method java/awt/Graphics.drawString:(Ljava/lang/String;II)V -.fl - 43: return -.fl -} -.fl -\fP -.fi - -.LP +.PP +\fIjavap\fRコマンドは、1つまたは複数のクラス・ファイルを逆アセンブルします。その出力は指定するオプションにより異なります。オプションを指定しない場合、\fIjavap\fRコマンドは、そのパッケージ、渡されたクラスのprotectedおよびpublicのフィールドとメソッドを出力します。\fIjavap\fRコマンドはその出力を\fI標準出力\fRに表示します。 .SH "オプション" -.LP -.RS 3 -.TP 3 -\-help \-\-help \-? -\f3javap\fP のヘルプメッセージを出力します。 -.TP 3 -\-version -バージョン情報を表示します。 -.TP 3 -\-l -行番号と局所変数テーブルを表示します。 -.TP 3 -\-public -public クラスおよびメンバーだけを表示します。 -.TP 3 -\-protected -protected および public のクラスとメンバーだけを表示します。 -.TP 3 -\-package -package、protected、および public のクラスとメンバーだけを表示します。これはデフォルトの設定です。 -.TP 3 -\-private \-p -すべてのクラスとメンバーを表示します。 -.TP 3 -\-Jflag -ランタイムシステムに直接 \f2flag\fP を渡します。使用例を次に示します。 -.nf -\f3 -.fl -javap \-J\-version -.fl -javap \-J\-Djava.security.manager \-J\-Djava.security.policy=MyPolicy MyClassName -.fl -\fP -.fi -.TP 3 -\-s -内部の型シグニチャーを出力します。 -.TP 3 -\-sysinfo -処理中のクラスのシステム情報 (パス、サイズ、日付、MD5 ハッシュ) を表示します。 -.TP 3 -\-constants -static final 定数を表示します。 -.TP 3 -\-c -クラスの各メソッドのために逆アセンブルされるコード、すなわち Java バイトコードから成る命令を表示します。これらは -.na -\f2「Java Virtual Machine Specification」\fP @ -.fi -http://java.sun.com/docs/books/vmspec/にドキュメント化されています。 -.TP 3 -\-verbose -メソッドのスタックサイズ、および \f2locals\fP と \f2args\fP の数を出力します。 -.TP 3 -\-classpath path -\f3javap\fP がクラスを探すために使用するパスを指定します。デフォルトまたは CLASSPATH 環境変数設定を上書きします。 -.TP 3 -\-bootclasspath path -ブートストラップクラスをロードするパスを指定します。ブートストラップクラスは、デフォルトでは \f2jre/lib/rt.jar\fP および他のいくつかの JAR ファイル にある、コア Java 2 プラットフォームを実装するクラスです。 -.TP 3 -\-extdirs dirs -インストールされた拡張機能を検索する場所をオーバーライドします。拡張機能は、デフォルトでは \f2java.ext.dirs\fP にあります。 +.PP +\-help, \-\-help, \-? +.RS 4 +\fIjavap\fRコマンドについてのヘルプ・メッセージを出力します。 .RE - -.LP -.SH "関連項目" -.LP -.LP -javac(1)、java(1)、jdb(1)、javah(1)、javadoc(1) -.LP +.PP +\-version +.RS 4 +リリース情報を出力します。 +.RE +.PP +\-l +.RS 4 +行番号とローカル変数表を出力します。 +.RE +.PP +\-public +.RS 4 +publicクラスおよびメンバーのみ表示します。 +.RE +.PP +\-protected +.RS 4 +protectedおよびpublicのクラスとメンバーのみを表示します。 +.RE +.PP +\-private, \-p +.RS 4 +すべてのクラスとメンバーを表示します。 +.RE +.PP +\-J\fIoption\fR +.RS 4 +指定されたオプションをJVMに渡します。次に例を示します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +javap \-J\-version +javap \-J\-Djava\&.security\&.manager \-J\-Djava\&.security\&.policy=MyPolicy MyClassName +.fi +.if n \{\ +.RE +.\} +JVMオプションの詳細は、コマンドのマニュアルを参照してください。 +.RE +.PP +\-s +.RS 4 +内部の型シグニチャを出力します。 +.RE +.PP +\-sysinfo +.RS 4 +処理中のクラスのシステム情報(パス、サイズ、日付、MD5ハッシュ)を表示します。 +.RE +.PP +\-constants +.RS 4 +\fIstatic final\fR定数を表示します。 +.RE +.PP +\-c +.RS 4 +クラスの各メソッドのために逆アセンブルされるコード、すなわちJavaバイトコードからなる命令を表示します。 +.RE +.PP +\-verbose +.RS 4 +メソッドのスタック・サイズ、localsとargumentsの数を出力します。 +.RE +.PP +\-classpath \fIpath\fR +.RS 4 +クラスを探すために\fIjavap\fRコマンドが使用するパスを指定します。デフォルトまたは\fICLASSPATH\fR環境変数の設定をオーバーライドします。 +.RE +.PP +\-bootclasspath \fIpath\fR +.RS 4 +ブートストラップ・クラスをロードするパスを指定します。ブートストラップ・クラスは、デフォルトでは\fIjre/lib/rt\&.jar\fRおよび他のいくつかのJARファイルにある、コアJavaプラットフォームを実装するクラスです。 +.RE +.PP +\-extdir \fIdirs\fR +.RS 4 +インストールされた拡張機能を検索する場所をオーバーライドします。拡張機能のデフォルト位置は\fIjava\&.ext\&.dirs\fRです。 +.RE +.SH "例" +.PP +次の\fIDocFooter\fRクラスをコンパイルします。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +import java\&.awt\&.*; +import java\&.applet\&.*; +public class DocFooter extends Applet { + String date; + String email; + + public void init() { + resize(500,100); + date = getParameter("LAST_UPDATED"); + email = getParameter("EMAIL"); + } + + public void paint(Graphics g) { + g\&.drawString(date + " by ",100, 15); + g\&.drawString(email,290,15); + } +} +.fi +.if n \{\ +.RE +.\} +.PP +\fIjavap DocFooter\&.class\fRコマンドからの出力は次を生成します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +Compiled from "DocFooter\&.java" +public class DocFooter extends java\&.applet\&.Applet { + java\&.lang\&.String date; + java\&.lang\&.String email; + public DocFooter(); + public void init(); + public void paint(java\&.awt\&.Graphics); +} +.fi +.if n \{\ +.RE +.\} +.PP +\fIjavap \-c DocFooter\&.class\fRコマンドからの出力は次を生成します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +Compiled from "DocFooter\&.java" +public class DocFooter extends java\&.applet\&.Applet { + java\&.lang\&.String date; + java\&.lang\&.String email; + + public DocFooter(); + Code: + 0: aload_0 + 1: invokespecial #1 // Method +java/applet/Applet\&."<init>":()V + 4: return + + public void init(); + Code: + 0: aload_0 + 1: sipush 500 + 4: bipush 100 + 6: invokevirtual #2 // Method resize:(II)V + 9: aload_0 + 10: aload_0 + 11: ldc #3 // String LAST_UPDATED + 13: invokevirtual #4 // Method + getParameter:(Ljava/lang/String;)Ljava/lang/String; + 16: putfield #5 // Field date:Ljava/lang/String; + 19: aload_0 + 20: aload_0 + 21: ldc #6 // String EMAIL + 23: invokevirtual #4 // Method + getParameter:(Ljava/lang/String;)Ljava/lang/String; + 26: putfield #7 // Field email:Ljava/lang/String; + 29: return + + public void paint(java\&.awt\&.Graphics); + Code: + 0: aload_1 + 1: new #8 // class java/lang/StringBuilder + 4: dup + 5: invokespecial #9 // Method + java/lang/StringBuilder\&."<init>":()V + 8: aload_0 + 9: getfield #5 // Field date:Ljava/lang/String; + 12: invokevirtual #10 // Method + java/lang/StringBuilder\&.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; + 15: ldc #11 // String by + 17: invokevirtual #10 // Method + java/lang/StringBuilder\&.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; + 20: invokevirtual #12 // Method + java/lang/StringBuilder\&.toString:()Ljava/lang/String; + 23: bipush 100 + 25: bipush 15 + 27: invokevirtual #13 // Method + java/awt/Graphics\&.drawString:(Ljava/lang/String;II)V + 30: aload_1 + 31: aload_0 + 32: getfield #7 // Field email:Ljava/lang/String; + 35: sipush 290 + 38: bipush 15 + 40: invokevirtual #13 // Method +java/awt/Graphics\&.drawString:(Ljava/lang/String;II)V + 43: return +} +.fi +.if n \{\ +.RE +.\} +.SH "関連項目" +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +javac(1) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +java(1) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +jdb(1) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +javah(1) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +javadoc(1) +.RE +.br +'pl 8.5i +'bp diff --git a/jdk/src/linux/doc/man/ja/javaws.1 b/jdk/src/linux/doc/man/ja/javaws.1 index 500e6a7cba8..fc32e88de73 100644 --- a/jdk/src/linux/doc/man/ja/javaws.1 +++ b/jdk/src/linux/doc/man/ja/javaws.1 @@ -1,222 +1,232 @@ -." Copyright (c) 2003, 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. -." -.TH javaws 1 "07 May 2011" - -.LP -.SH "名前" -\f2javaws\fP コマンド行 -.LP -.SH "名前" -.LP -.LP -\f2javaws\fP \- Java Web Start 起動コマンド -.LP -.SH "形式" -.LP -.LP -\f2javaws [run\-options] <jnlp>\fP -.LP -.LP -\f2javaws [control\-options]\fP -.LP -.SH "パラメータ" -.LP -.LP -\f2[run\-options]\fP -.LP -.LP -コマンド行実行オプション。実行オプションは任意の順序で指定できます。各種オプションについては、下の 「実行オプション」を参照してください。 -.LP -.LP -\f2<jnlp>\fP -.LP -.LP -JNLP (Java Network Launching Protocol) ファイルのパスまたは URL (Uniform Resource Locator) のどちらかです。 -.LP -.LP -\f2[control\-options]\fP -.LP -.LP -コマンド行制御オプション。制御オプションは任意の順序で指定できます。各種オプションについては、下の 「制御オプション」を参照してください。 -.LP +'\" t +.\" Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved. +.\" Title: javaws +.\" Language: English +.\" Date: 2013年11月21日 +.\" SectDesc: Java Web Startツール +.\" Software: JDK 8 +.\" Arch: 汎用 +.\" +.\" 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. +.\" +.pl 99999 +.TH "javaws" "1" "2013年11月21日" "JDK 8" "Java Web Startツール" +.\" ----------------------------------------------------------------- +.\" * Define some portability stuff +.\" ----------------------------------------------------------------- +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.\" http://bugs.debian.org/507673 +.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" ----------------------------------------------------------------- +.\" * set default formatting +.\" ----------------------------------------------------------------- +.\" disable hyphenation +.nh +.\" disable justification (adjust text to left margin only) +.ad l +.\" ----------------------------------------------------------------- +.\" * MAIN CONTENT STARTS HERE * +.\" ----------------------------------------------------------------- +.SH "NAME" +javaws \- Java Web Startを起動します。 +.SH "概要" +.sp +.if n \{\ +.RS 4 +.\} +.nf +\fIjavaws\fR [ \fIrun\-options\fR ] \fIjnlp\fR +.fi +.if n \{\ +.RE +.\} +.sp +.if n \{\ +.RS 4 +.\} +.nf +\fIjavaws\fR [ \fIcontrol\-options\fR ] +.fi +.if n \{\ +.RE +.\} +.PP +\fIrun\-options\fR +.RS 4 +コマンドライン\fI実行オプション\fR。\fI実行オプション\fRは任意の順序で指定できます。実行オプションを参照してください。 +.RE +.PP +\fIjnlp\fR +.RS 4 +JNLP (Java Network Launching Protocol)ファイルのパスまたはURL (Uniform Resource Locator)のどちらか。 +.RE +.PP +\fI制御オプション\fR +.RS 4 +コマンドライン\fI制御オプション\fR。\fI制御オプション\fRは任意の順序で指定できます。制御オプションを参照してください。 +.RE .SH "説明" -.LP -.LP -\f2javaws\fP コマンドは、JNLP (Java Network Launching Protocol) のリファレンス実装である Java Web Start を起動します。Java Web Start は、ネットワーク上で動作する Java アプリケーションまたはアプレットを起動します。 -.LP -.LP -JNLP ファイルが指定された場合、 \f2javaws\fP は、その JNLP ファイルで指定された Java アプリケーション/アプレットを起動します。 -.LP -.LP -\f2javaws\fP 起動ツールには、現在のリリースでサポートされている 1 組のオプションがあります。ただし、これらのオプションは将来のリリースでは削除される可能性があります。 -.LP +.PP +\fB注意:\fR +\fIjavaws\fRコマンドは、Oracle Solarisでは使用できません。 +.PP +\fIjavaws\fRコマンドは、JNLPのリファレンス実装であるJava Web Startを起動します。Java Web Startは、ネットワーク上で動作するJavaアプリケーションおよびアプレットを起動します。 +.PP +JNLPファイルが指定されると、\fIjavaws\fRコマンドはJNLPファイルで指定したJavaアプリケーションまたはアプレットを起動します。 +.PP +\fIjavaws\fR起動ツールには、現在のリリースでサポートされている1組のオプションがあります。ただし、これらのオプションは将来のリリースでは削除される可能性があります。 .SH "実行オプション" -.LP -.LP -\f2\-offline\fP -.LP -.LP -Java Web Start をオフラインモードで実行します。 -.LP -.LP -\f2\-Xnosplash\fP -.LP -.LP +.PP +\-offline +.RS 4 +Java Web Startをオフライン・モードで実行します。 +.RE +.PP +\-Xnosplash +.RS 4 初期スプラッシュ画面を表示しません。 -.LP -.LP -\f2\-open <arguments>\fP -.LP -.LP -このオプションを指定すると、JNLP ファイル内の引数が \f2\-open <arguments>\fP に置き換わります。 -.LP -.LP -\f2\-print <arguments>\fP -.LP -.LP -このオプションを指定すると、JNLP ファイル内の引数が \f2\-print <arguments>\fP に置き換わります。 -.LP -.LP -\f2\-online\fP -.LP -.LP -オンラインモードを使用します (デフォルトの動作)。 -.LP -.LP -\f2\-wait\fP -.LP -.LP -このオプションを指定した場合、 \f2javaws\fP プロセスは、アプリケーションが終了するまで終了しません。Windows プラットフォーム上では、このオプションは説明したとおりに機能しません。 -.LP -.LP -\f2\-verbose\fP -.LP -.LP +.RE +.PP +\-open \fIarguments\fR +.RS 4 +このオプションを指定すると、JNLPファイル内の引数が\fI\-open\fR +\fIarguments\fRに置き換わります。 +.RE +.PP +\-print \fIarguments\fR +.RS 4 +このオプションを指定すると、JNLPファイル内の引数が\fI\-print\fR +\fIarguments\fRに置き換わります。 +.RE +.PP +\-online +.RS 4 +オンライン・モードを使用します。これは、デフォルトの動作です。 +.RE +.PP +\-wait +.RS 4 +\fIjavaws\fRプロセスは、アプリケーションが終了するまで終了しません。Windowsプラットフォーム上では、このオプションは説明したとおりに機能しません。 +.RE +.PP +\-verbose +.RS 4 追加の出力を表示します。 -.LP -.LP -\f2\-J<option>\fP -.LP -.LP -vm にオプションを補います。 -.LP -.LP -\f2\-system\fP -.LP -.LP -アプリケーションをシステムキャッシュからのみ実行します。 -.LP +.RE +.PP +\-J\fIoption\fR +.RS 4 +Java仮想マシンにoptionを渡します。\fIoption\fRには、Javaアプリケーション起動ツールのリファレンス・ページに記載されているオプションを1つ指定します。たとえば、\fI\-J\-Xms48m\fRと指定すると、スタートアップ・メモリーは48MBに設定されます。java(1)を参照してください。 +.RE +.PP +\-system +.RS 4 +アプリケーションをシステム・キャッシュのみから実行します。 +.RE .SH "制御オプション" -.LP -.LP -\f2\-viewer\fP -.LP -.LP -Java コントロールパネルでキャッシュビューアを表示します。 -.LP -.LP -\f2\-clearcache\fP -.LP -.LP +.PP +\-viewer +.RS 4 +Javaコントロール・パネルでキャッシュ・ビューアを表示します。 +.RE +.PP +\-clearcache +.RS 4 インストールされていないすべてのアプリケーションをキャッシュから削除します。 -.LP -.LP -\f2\-userConfig <property name>\fP -.LP -.LP -指定された配備プロパティーをクリアします。 -.LP -.LP -\f2\-userConfig <property name> <property value>\fP -.LP -.LP -指定された配備プロパティーを指定された値に設定します。 -.LP -.LP -\f2\-uninstall\fP -.LP -.LP +.RE +.PP +\-userConfig \fIproperty\-name\fR +.RS 4 +指定されたデプロイメント・プロパティをクリアします。 +.RE +.PP +\-userConfig \fIproperty\-name property\-value\fR +.RS 4 +指定されたデプロイメント・プロパティを指定された値に設定します。 +.RE +.PP +\-uninstall +.RS 4 キャッシュからすべてのアプリケーションを削除します。 -.LP -.LP -\f2\-uninstall <jnlp>\fP -.LP -.LP +.RE +.PP +\-uninstall \fIjnlp\fR +.RS 4 キャッシュからアプリケーションを削除します。 -.LP -.LP -\f2\-import [import\-options] <jnlp>\fP -.LP -.LP +.RE +.PP +\-print \fIimport\-options \fRjnlp +.RS 4 キャッシュにアプリケーションをインポートします。 -.LP -.SH "インポートオプション" -.LP -.LP -\f2\-silent\fP -.LP -.LP -サイレントモードでインポートします (UI は表示されません)。 -.LP -.LP -\f2\-system\fP -.LP -.LP -システムキャッシュにアプリケーションをインポートします。 -.LP -.LP -\f2\-codebase <url>\fP -.LP -.LP -任意の codebase からリソースを取得します。 -.LP -.LP -\f2\-shortcut\fP -.LP -.LP -ユーザー許容プロンプトのようにショートカットをインストールします。このオプションは、 \f2\-silent\fP オプションも使用しないと効果がありません。 -.LP -.LP -\f2\-association\fP -.LP -.LP -ユーザー許容プロンプトのように関連付けをインストールします。このオプションは、 \f2\-silent\fP オプションも使用しないと効果がありません。 -.LP +.RE +.SH "インポート・オプション" +.PP +\-silent +.RS 4 +サイレント・モードでインポートします(ユーザー・インタフェースは表示されません)。 +.RE +.PP +\-system +.RS 4 +システム・キャッシュにアプリケーションをインポートします。 +.RE +.PP +\-codebase \fIurl\fR +.RS 4 +指定したコードベースからリソースを取得します。 +.RE +.PP +\-shortcut +.RS 4 +ユーザーがプロンプトを受け入れればショートカットをインストールします。このオプションは、 +\fI\-silent\fRオプションも使用しないと効果がありません。 +.RE +.PP +\-association +.RS 4 +ユーザーがプロンプトを受け入れればアソシエーションをインストールします。このオプションは、 +\fI\-silent\fRオプションも使用しないと効果がありません。 +.RE +.PP +\fB注意:\fR\fIjavaws \-shortcut \-uninstall\fR .SH "ファイル" -.LP -.LP -ユーザーキャッシュ、システムキャッシュ、および deployment.properties ファイルについては、 -.na -\f2システムレベルおよびユーザーレベルのプロパティー\fP @ -.fi -http://java.sun.com/javase/6/docs/technotes/guides/deployment/deployment\-guide/properties.htmlを参照してください。 -.LP -.SH "詳細情報" -.LP -.LP -Java Web Start の詳細は、 -.na -\f2「Java Web Start」\fP @ -.fi -http://java.sun.com/javase/6/docs/technotes/guides/javaws/index.htmlを参照してください。 -.LP - +.PP +ユーザーおよびシステム・キャッシュならびにdeployment\&.propertiesファイルの詳細は、構成ファイルおよびプロパティのデプロイメント +(http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/deployment/deployment\-guide/properties\&.html)を参照してください +.SH "関連項目" +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +Java Web Start +(http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/javaws/index\&.html) +.RE +.br +'pl 8.5i +'bp diff --git a/jdk/src/linux/doc/man/ja/jcmd.1 b/jdk/src/linux/doc/man/ja/jcmd.1 new file mode 100644 index 00000000000..d79de5a2d19 --- /dev/null +++ b/jdk/src/linux/doc/man/ja/jcmd.1 @@ -0,0 +1,154 @@ +'\" t +.\" Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved. +.\" Title: jcmd +.\" Language: English +.\" Date: 2013年11月21日 +.\" SectDesc: トラブルシューティング・ツール +.\" Software: JDK 8 +.\" Arch: 汎用 +.\" +.\" 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. +.\" +.pl 99999 +.TH "jcmd" "1" "2013年11月21日" "JDK 8" "トラブルシューティング・ツール" +.\" ----------------------------------------------------------------- +.\" * Define some portability stuff +.\" ----------------------------------------------------------------- +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.\" http://bugs.debian.org/507673 +.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" ----------------------------------------------------------------- +.\" * set default formatting +.\" ----------------------------------------------------------------- +.\" disable hyphenation +.nh +.\" disable justification (adjust text to left margin only) +.ad l +.\" ----------------------------------------------------------------- +.\" * MAIN CONTENT STARTS HERE * +.\" ----------------------------------------------------------------- +.SH "NAME" +jcmd \- 実行中のJava仮想マシン(JVM)に診断コマンド・リクエストを送信します。 +.SH "概要" +.sp +.if n \{\ +.RS 4 +.\} +.nf +\fIjcmd\fR [\fI\-l\fR|\fI\-h\fR|\fI\-help\fR] +.fi +.if n \{\ +.RE +.\} +.sp +.if n \{\ +.RS 4 +.\} +.nf +\fIjcmd\fR \fIpid\fR|\fImain\-class\fR \fIPerfCounter\&.print\fR +.fi +.if n \{\ +.RE +.\} +.sp +.if n \{\ +.RS 4 +.\} +.nf +\fIjcmd\fR \fIpid\fR|\fImain\-class\fR \fI\-f\fR \fIfilename\fR +.fi +.if n \{\ +.RE +.\} +.sp +.if n \{\ +.RS 4 +.\} +.nf +\fIjcmd\fR \fIpid\fR|\fImain\-class\fR \fIcommand\fR[ \fIarguments\fR] +.fi +.if n \{\ +.RE +.\} +.SH "説明" +.PP +\fIjcmd\fRユーティリティは、JVMに診断コマンド・リクエストを送信するために使用されます。これはJVMが稼働しているのと同じマシンで使用し、JVMの起動に使用したものと同じ有効ユーザーおよびグループ識別子を持っている必要があります。 +.PP +\fB注意:\fR +リモート・マシンから、または別の識別子で診断コマンドを起動するには、\fIcom\&.sun\&.management\&.DiagnosticCommandMBean\fRインタフェースを使用できます。\fIDiagnosticCommandMBean\fRインタフェースの詳細は、http://download\&.java\&.net/jdk8/docs/jre/api/management/extension/com/sun/management/DiagnosticCommandMBean\&.htmlにあるAPIドキュメントを参照してください。 +.PP +\fIjcmd\fRを引数なしまたは\fI\- l\fRオプションを指定して実行した場合は、実行中のJavaプロセス識別子のリストが、メイン・クラスおよびプロセスの起動に使用されたコマンドライン引数とともに出力されます。\fI\-h\fRまたは\fI\-help\fRオプションを指定して\fIjcmd\fRを実行すると、ツールのヘルプ・メッセージが出力されます。 +.PP +プロセス識別子(\fIpid\fR)またはメイン・クラス(\fImain\-class\fR)を最初の引数として指定した場合、\fIjcmd\fRは、識別子を指定した場合はJavaプロセスに、メイン・クラスの名前を指定した場合はすべてのJavaプロセスに診断コマンド・リクエストを送信します。プロセス識別子として\fI0\fRを指定して、すべての使用可能なJavaプロセスに診断コマンド・リクエストを送信することもできます。診断コマンド・リクエストとして、次のいずれかを使用します。 +.PP +Perfcounter\&.print +.RS 4 +指定したJavaプロセスで使用可能なパフォーマンス・カウンタが出力されます。パフォーマンス・カウンタのリストはJavaプロセスによって異なる場合があります。 +.RE +.PP +\-f \fIfilename\fR +.RS 4 +診断コマンドを読み取り、指定したJavaプロセスに送信するファイルの名前。\fI\-f\fRオプションでのみ使用します。ファイル内の各コマンドは、1行で記述する必要があります。番号記号(\fI#\fR)で始まる行は無視されます。すべての行が読み取られるか、\fIstop\fRキーワードを含む行が読み取られると、ファイルの処理が終了します。 +.RE +.PP +\fIcommand\fR [\fIarguments\fR] +.RS 4 +指定されたJavaプロセスに送信するコマンド。指定したプロセスで使用できる診断コマンドのリストは、このプロセスに対して\fIhelp\fRコマンドを送信すれば表示されます。各診断コマンドに独自の引数セットがあります。コマンドの説明、構文および使用可能な引数のリストを表示するには、\fIhelp\fRコマンドの引数としてコマンド名を使用します。 +.sp +\fB注意:\fR +引数にスペースが含まれている場合は、一重引用符または二重引用符(\fI\*(Aq\fRまたは\fI"\fR)で囲む必要があります。加えて、オペレーティング・システム・シェルが引用符を処理しないように、バックスラッシュ(\fI\e\fR)で一重引用符または二重引用符をエスケープする必要があります。または、これらの引数を一重引用符で囲んでから、二重引用符で囲むこともできます(または二重引用符で囲んでから、一重引用符で囲む)。 +.RE +.SH "オプション" +.PP +各オプションは互いに排他的です。 +.PP +\-f \fIfilename\fR +.RS 4 +指定されたファイルからコマンドを読み取ります。このオプションは、最初の引数としてプロセス識別子またはメイン・クラスを指定する場合にのみ使用できます。ファイル内の各コマンドは、1行で記述する必要があります。番号記号(\fI#\fR)で始まる行は無視されます。すべての行が読み取られるか、\fIstop\fRキーワードを含む行が読み取られると、ファイルの処理が終了します。 +.RE +.PP +\-h, \-help +.RS 4 +ヘルプ・メッセージが出力されます。 +.RE +.PP +\-l +.RS 4 +実行中のJavaプロセス識別子のリストをメイン・クラスおよびコマンドライン引数とともに出力します。 +.RE +.SH "関連項目" +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +jps(1) +.RE +.br +'pl 8.5i +'bp diff --git a/jdk/src/linux/doc/man/ja/jconsole.1 b/jdk/src/linux/doc/man/ja/jconsole.1 index fc9c17c2a59..426fb365ba8 100644 --- a/jdk/src/linux/doc/man/ja/jconsole.1 +++ b/jdk/src/linux/doc/man/ja/jconsole.1 @@ -1,157 +1,156 @@ -." Copyright (c) 2004, 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. -." -.TH jconsole 1 "07 May 2011" - -.LP -.SH "名前" -jconsole \- Java 監視および管理コンソール -.LP -.RS 3 -.TP 2 -o -形式 -.TP 2 -o -パラメータ -.TP 2 -o -説明 -.TP 2 -o -オプション -.TP 2 -o -関連項目 -.RE - -.LP -.SH "形式" -.LP +'\" t +.\" Copyright (c) 2004, 2013, Oracle and/or its affiliates. All rights reserved. +.\" Title: jconsole +.\" Language: English +.\" Date: 2013年11月21日 +.\" SectDesc: Javaトラブルシューティング、プロファイリング、モニタリングおよび管理ツール +.\" Software: JDK 8 +.\" Arch: 汎用 +.\" +.\" 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. +.\" +.pl 99999 +.TH "jconsole" "1" "2013年11月21日" "JDK 8" "Javaトラブルシューティング、プロファイリング、モニタリン" +.\" ----------------------------------------------------------------- +.\" * Define some portability stuff +.\" ----------------------------------------------------------------- +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.\" http://bugs.debian.org/507673 +.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" ----------------------------------------------------------------- +.\" * set default formatting +.\" ----------------------------------------------------------------- +.\" disable hyphenation +.nh +.\" disable justification (adjust text to left margin only) +.ad l +.\" ----------------------------------------------------------------- +.\" * MAIN CONTENT STARTS HERE * +.\" ----------------------------------------------------------------- +.SH "NAME" +jconsole \- Javaアプリケーションを監視および管理するためのグラフィカル・コンソールを開始します。 +.SH "概要" +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -\fP\f3jconsole\fP [ \f2options\fP ] [ connection ... ] -.fl - -.fl +\fIjconsole\fR [ \fIoptions\fR ] [ connection \&.\&.\&. ] .fi - -.LP -.SH "パラメータ" -.LP -.RS 3 -.TP 3 -options -オプションを使用する場合、コマンド名の直後に記述してください。 -.TP 3 -connection = pid | host:port | jmxUrl -.RS 3 -.TP 2 -o -\f2pid\fPローカルの Java VM のプロセス ID。Java VM は、jconsole を実行しているユーザー ID と同じユーザー ID を使用して実行する必要があります。詳細については、 -.na -\f2「JMX 監視および管理」\fP @ -.fi -http://java.sun.com/javase/6/docs/technotes/guides/management/agent.htmlを参照してください。 -.TP 2 -o -\f2host\fP:\f2port\fP Java VM が実行しているホストシステムの名前と、JVM を起動したときにシステムプロパティー \f2com.sun.management.jmxremote.port\fP で指定したポート番号。詳細については、 -.na -\f2「JMX 監視および管理」\fP @ -.fi -http://java.sun.com/javase/6/docs/technotes/guides/management/agent.htmlを参照してください。 -.TP 2 -o -\f2jmxUrl\fP 接続先の JMX エージェントのアドレス。これについては、 -.na -\f2JMXServiceURL\fP @ -.fi -http://java.sun.com/javase/6/docs/api/javax/management/remote/JMXServiceURL.html を参照してください。 +.if n \{\ .RE +.\} +.PP +\fIoptions\fR +.RS 4 +コマンドライン・オプション。オプションを参照してください。 .RE - -.LP -.SH " 説明" -.LP -.LP -\f3jconsole\fP コマンドは、ローカルマシンまたはリモートマシン上の Java アプリケーションと仮想マシンの監視と管理を行うグラフィカルコンソールツールを起動します。 -.LP -.LP -Windows 上では、\f3jconsole\fP はコンソールウィンドウと関連付けられていません。ただし、なんらかの理由で \f3jconsole\fP コマンドが失敗すると、エラー情報を示すダイアログボックスが表示されます。 -.LP +.PP +connection = \fIpid\fR | \fIhost\fR:\fIport\fR | \fIjmxURL\fR +.RS 4 +\fIpid\fR値はローカルのJava仮想マシン(JVM)のプロセスIDです。JVMは\fIjconsole\fRコマンドを実行しているユーザーIDと同じユーザーIDで実行する必要があります。\fIhost:port\fR値はJVMが動作しているホスト・システムの名前と、JVMが開始したときにシステム・プロパティ\fIcom\&.sun\&.management\&.jmxremote\&.port\fRで指定したポート番号です。\fIjmxUrl\fR値は、JMXServiceURLで記述されている、接続されるJMXエージェントのアドレスです。 +.sp +\fIconnection\fRパラメータの詳細は、JMXテクノロジを使用したモニタリングおよび管理 +(http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/management/agent\&.html)を参照してください +.sp +\fIJMXServiceURL\fRクラスの説明( +http://docs\&.oracle\&.com/javase/8/docs/api/javax/management/remote/JMXServiceURL\&.html)も参照してください +.RE +.SH "説明" +.PP +\fIjconsole\fRコマンドは、ローカル・マシンまたはリモート・マシン上のJavaアプリケーションと仮想マシンの監視と管理を行うグラフィカル・コンソール・ツールを起動します。 +.PP +Windows上では、\fIjconsole\fRコマンドはコンソール・ウィンドウと関連付けられていません。ただし、\fIjconsole\fRコマンドが失敗すると、エラー情報を示すダイアログ・ボックスが表示されます。 .SH "オプション" -.LP -.RS 3 -.TP 3 -\-interval=n -更新間隔を \f2n\fP 秒に設定します (デフォルトは 4 秒)。 -.TP 3 -\-notile -最初にウィンドウをタイリングしません (複数の接続のため)。 -.TP 3 -\-pluginpath plugins -JConsole プラグインの検索先となるディレクトリまたは JAR ファイルのリストを指定します。\f2plugins\fP パスには、次の名前のプロバイダ構成ファイルを含めてください。 -.br -.nf -\f3 -.fl - META\-INF/services/com.sun.tools.jconsole.JConsolePlugin -.fl -\fP -.fi -.LP -これには、 -.na -\f2com.sun.tools.jconsole.JConsolePlugin\fP @ -.fi -http://java.sun.com/javase/6/docs/jdk/api/jconsole/spec/com/sun/tools/jconsole/JConsolePlugin.html クラスを実装するクラスの完全修飾クラス名を指定する行が、プラグインごとに 1 行ずつ含まれています。 -.TP 3 -\-version -バージョン情報を出力して終了します。 -.TP 3 -\-help -ヘルプメッセージを出力して終了します。 -.TP 3 -\-J<flag> -jconsole が実行されている Java 仮想マシンに <flag> を渡します。 +.PP +\-interval\fI=n\fR +.RS 4 +更新間隔を\fIn\fR秒に設定します(デフォルトは4秒)。 +.RE +.PP +\-notile +.RS 4 +最初にウィンドウをタイリングしません(複数接続の場合)。 +.RE +.PP +\-pluginpath \fIplugins\fR +.RS 4 +\fIJConsole\fRプラグインを検索するディレクトリまたはJARファイルのリストを指定します。\fIplugins\fRパスには\fIMETA\-INF/services/com\&.sun\&.tools\&.jconsole\&.JConsolePlugin\fRという名前のプロバイダ構成ファイルを含んでいる必要があり、これにはプラグインごとに1行が含まれています。その行は\fIcom\&.sun\&.tools\&.jconsole\&.JConsolePlugin\fRクラスを実装しているクラスの完全修飾クラス名を指定します。 +.RE +.PP +\-version +.RS 4 +リリース情報を表示して終了します。 +.RE +.PP +\-help +.RS 4 +ヘルプ・メッセージを表示します。 +.RE +.PP +\-J\fIflag\fR +.RS 4 +\fIjconsole\fRコマンドを実行したJVMに\fIflag\fRを渡します。 .RE - -.LP .SH "関連項目" -.LP -.RS 3 -.TP 2 -o -.na -\f2JConsole の使用\fP @ -.fi -http://java.sun.com/javase/6/docs/technotes/guides/management/jconsole.html -.TP 2 -o -.na -\f2「Java プラットフォームの監視および管理」\fP @ -.fi -http://java.sun.com/javase/6/docs/technotes/guides/management/index.html +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +JConsoleの使用 +(http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/management/jconsole\&.html) .RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +JMXテクノロジを使用したモニタリングおよび管理 -.LP - +(http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/management/agent\&.html) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fIJMXServiceURL\fRクラスの説明( +http://docs\&.oracle\&.com/javase/8/docs/api/javax/management/remote/JMXServiceURL\&.html) +.RE +.br +'pl 8.5i +'bp diff --git a/jdk/src/linux/doc/man/ja/jdb.1 b/jdk/src/linux/doc/man/ja/jdb.1 index 4904c9d8eab..f7bcabdec2f 100644 --- a/jdk/src/linux/doc/man/ja/jdb.1 +++ b/jdk/src/linux/doc/man/ja/jdb.1 @@ -1,326 +1,382 @@ -." Copyright (c) 1995, 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. -." -.TH jdb 1 "07 May 2011" - -.LP -.SH "名前" -jdb \- Java デバッガ -.LP -.LP -\f3jdb\fP は、Java 言語プログラムのバグを見つけて修正するために使用するツールです。 -.LP -.SH "形式" -.LP +'\" t +.\" Copyright (c) 1995, 2013, Oracle and/or its affiliates. All rights reserved. +.\" Title: jdb +.\" Language: English +.\" Date: 2013年11月21日 +.\" SectDesc: 基本ツール +.\" Software: JDK 8 +.\" Arch: 汎用 +.\" +.\" 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. +.\" +.pl 99999 +.TH "jdb" "1" "2013年11月21日" "JDK 8" "基本ツール" +.\" ----------------------------------------------------------------- +.\" * Define some portability stuff +.\" ----------------------------------------------------------------- +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.\" http://bugs.debian.org/507673 +.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" ----------------------------------------------------------------- +.\" * set default formatting +.\" ----------------------------------------------------------------- +.\" disable hyphenation +.nh +.\" disable justification (adjust text to left margin only) +.ad l +.\" ----------------------------------------------------------------- +.\" * MAIN CONTENT STARTS HERE * +.\" ----------------------------------------------------------------- +.SH "NAME" +jdb \- Javaプラットフォーム・プログラムの不具合を検出および修正します。 +.SH "概要" +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -\fP\f3jdb\fP [ options ] [ class ] [ arguments ] -.fl +\fIjdb\fR [\fIoptions\fR] [\fIclassname\fR] [\fIarguments\fR] .fi - -.LP -.RS 3 -.TP 3 -options -次に示すコマンド行オプション -.TP 3 -class -デバッグを開始するクラスの名前 -.TP 3 -arguments -class の \f2main()\fP メソッドに渡す \f2引数\fP +.if n \{\ .RE - -.LP -.SH " 説明" -.LP -.LP -Java デバッガ \f3jdb\fP は、Java クラス用の簡単なコマンド行デバッガです。 -.na -\f2Java Platform Debugger Architecture\fP @ -.fi -http://java.sun.com/javase/6/docs/technotes/guides/jpda/index.html を視覚的に実行し、ローカルまたはリモートの Java Virtual Machine の検査とデバッグを行うことができます。 -.LP -.SS -jdb セッションの開始 -.LP -.LP -jdb セッションを開始するにはさまざまな方法があります。もっとも頻繁に使われるのは、デバッグするアプリケーションのメインクラスを使用して、\f3jdb\fP から新しい Java 仮想マシン (VM) を起動する方法です。コマンド行で、\f3java\fP の代わりに \f3jdb\fP コマンドを入力します。たとえば、アプリケーションのメインクラスが MyClass の場合は、JDB 環境でデバッグするときに次のコマンドを使用します。 -.LP +.\} +.PP +\fIoptions\fR +.RS 4 +コマンドライン・オプション。オプションを参照してください。 +.RE +.PP +\fIclass\fRname +.RS 4 +デバッグするメイン・クラスの名前。 +.RE +.PP +\fIarguments\fR +.RS 4 +classの\fImain()\fRメソッドに渡す引数。 +.RE +.SH "説明" +.PP +Javaデバッガ(JDB)は、Javaクラス用の簡単なコマンドライン・デバッガです。\fIjdb\fRコマンドとそのオプションはJDBを呼び出します。\fIjdb\fRコマンドは、JDBA (Java Platform Debugger Architecture)を視覚的に実行し、ローカルまたはリモートのJava仮想マシン(JVM)の検査とデバッグを行うことができます。Java Platform Debugger Architecture (JDBA) +(http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/jpda/index\&.html)を参照してください。 +.SS "JDBセッションの開始" +.PP +JDBセッションを開始するには様々な方法があります。最も頻繁に使用されるのは、デバッグするアプリケーションのメイン・クラスを使用して、JDBから新しいJVMを起動する方法です。コマンドラインで、\fIjava\fRコマンドのかわりに\fIjdb\fRコマンドを入力します。たとえば、アプリケーションのメイン・クラスが\fIMyClass\fRの場合は、JDB環境でデバッグするときに次のコマンドを使用します。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl - % jdb MyClass -.fl -\fP +jdb MyClass .fi - -.LP -.LP -この方法で起動すると、\f3jdb\fP は、指定されたパラメータを使って 2 つ目の Java VM を呼び出します。次に、指定されたクラスをロードして、クラスの最初の命令を実行する前に VM を停止させます。 -.LP -.LP -\f3jdb\fP のもう 1 つの使用方法は、すでに起動している Java VM に jdb を接続することです。jdb が接続する VM を、その実行中に起動するための構文を次に示します。これは、インプロセスデバッグ用ライブラリをロードし、接続の種類を指定します。 -.LP +.if n \{\ +.RE +.\} +.PP +この方法で起動すると、\fIjdb\fRコマンドは、指定されたパラメータを使用して2つ目のJVMを呼び出します。次に、指定されたクラスをロードして、クラスの最初の命令を実行する前にJVMを停止させます。 +.PP +\fIjdb\fRコマンドのもう1つの使用方法は、すでに実行中のJVMにjdbを接続することです。\fIjdb\fRコマンドが接続するVMを、その実行中に起動するための構文を次に示します。これは、インプロセス・デバッグ用ライブラリをロードし、接続の種類を指定します。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -\-agentlib:jdwp=transport=dt_socket,server=y,suspend=n -.fl -\fP +java \-agentlib:jdwp=transport=dt_socket,server=y,suspend=n MyClass .fi - -.LP -.LP -たとえば、次のコマンドは、MyClass アプリケーションを実行して、\f3jdb\fP があとでそのアプリケーションに接続できるようにします。 -.LP +.if n \{\ +.RE +.\} +.PP +次のコマンドを使用して、\fIjdb\fRコマンドをJVMに接続できます。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl - % java \-agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=n MyClass -.fl -\fP +jdb \-attach 8000 .fi - -.LP -.LP -次のコマンドを使用して、\f3jdb\fP を VM に接続できます。 -.LP +.if n \{\ +.RE +.\} +.PP +この場合、\fIjdb\fRコマンドは新しいJVMを起動するかわりに既存のJVMに接続されるため、\fIjdb\fRコマンドラインに\fIMyClass\fR引数は指定しません。 +.PP +デバッガをJVMに接続するには他にも様々な方法があり、すべて\fIjdb\fRコマンドでサポートされています。接続オプションについては、Java Platform Debugger Architectureのドキュメントを参照してください。 +.SS "基本jdbコマンド" +.PP +基本的な\fIjdb\fRコマンドの一覧を示します。JDBがサポートするコマンドはこれ以外にもあり、それらは\fI\-help\fRオプションを使用して表示できます。 +.PP +helpまたは? +.RS 4 +\fIhelp\fRまたは\fI?\fRコマンドは、認識されたコマンドのリストに簡潔な説明を付けて表示します。 +.RE +.PP +run +.RS 4 +JDBを起動してブレークポイントを設定したあとに、\fIrun\fRコマンドを使用して、デバッグするアプリケーションの実行を開始できます。\fIrun\fRコマンドは、既存のVMに接続している場合とは異なり、デバッグするアプリケーションが\fIjdb\fRから起動したときにのみ使用できます。 +.RE +.PP +cont +.RS 4 +ブレークポイント、例外、またはステップ実行の後で、デバッグするアプリケーションの実行を継続します。 +.RE +.PP +print +.RS 4 +Javaオブジェクトおよびプリミティブ値を表示します。プリミティブ型の変数またはフィールドの場合には、実際の値が出力されます。オブジェクトの場合には、短い説明が出力されます。オブジェクトの詳細を取得する方法を探すには、dumpコマンドを参照してください。 +.sp +\fB注意:\fR +ローカル変数を表示するには、含んでいるクラスが\fIjavac \-g\fRオプションを使用してコンパイルされている必要があります。 +.sp +\fIprint\fRコマンドは、次に示すような、メソッド呼出しを使用したものなど、多くの簡単なJava式をサポートします。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl - % jdb \-attach 8000 -.fl -\fP +print MyClass\&.myStaticField +print myObj\&.myInstanceField +print i + j + k (i, j, k are primities and either fields or local variables) +print myObj\&.myMethod() (if myMethod returns a non\-null) +print new java\&.lang\&.String("Hello")\&.length() .fi - -.LP -.LP -この場合、\f3jdb\fP は新しい VM を起動する代わりに既存の VM に接続されるため、\f3jdb\fP コマンド行には「MyClass」は指定しません。 -.LP -.LP -デバッガを VM に接続するにはほかにもさまざまな方法があり、すべて \f3jdb\fP でサポートされています。接続オプションについては、Java Platform Debugger Architecture の -.na -\f2ドキュメント\fP @ -.fi -http://java.sun.com/javase/6/docs/technotes/guides/jpda/conninv.htmlを参照してください。\f3jdb\fP で使用するために J2SE 1.4.2 以前の VM を起動する方法については、 -.na -\f21.4.2 のドキュメント\fP @ -.fi -http://java.sun.com/j2se/1.4.2/docs/guide/jpda/conninv.htmlを参照してください。 -.LP -.SS -基本 jdb コマンド -.LP -.LP -基本的な \f3jdb\fP コマンドの一覧を示します。Java デバッガがサポートするコマンドはこれ以外にもあり、それらは \f3jdb\fP の \f2help\fP コマンドを使用して表示できます。 -.LP -.RS 3 -.TP 3 -help または ? -もっとも重要な \f3jdb\fP コマンド \f2help\fP は、認識されたコマンドのリストに簡潔な説明を付けて表示します。 -.TP 3 -run -\f3jdb\fP を起動して必要なブレークポイントを設定したあとに、このコマンドを使用して、デバッグするアプリケーションの実行を開始できます。このコマンドは、既存の VM に接続している場合とは異なり、デバッグするアプリケーションが \f3jdb\fP から起動したときにだけ使用できます。 -.TP 3 -cont -ブレークポイント、例外、またはステップ実行のあとで、デバッグするアプリケーションの実行を継続します。 -.TP 3 -print -Java オブジェクトおよびプリミティブ値を表示します。プリミティブ型の変数またはフィールドの場合には、実際の値が出力されます。オブジェクトの場合には、短い説明が出力されます。オブジェクトについては、以降の \f2dump\fP コマンドの説明を参照してください。 -.LP -\f2注: 局所変数を表示するには、その変数を含むクラスが \fP\f2javac(1)\fP\f2 \fP\f2\-g\fP オプションでコンパイルされている必要があります。 -.LP -\f2print\fP では、メソッドの呼び出しを含む多数の簡単な Java 式がサポートされています。次に例を示します。 -.RS 3 -.TP 2 -o -\f2print MyClass.myStaticField\fP -.TP 2 -o -\f2print myObj.myInstanceField\fP -.TP 2 -o -\f2print i + j + k\fP (i、j、および k はプリミティブであり、フィールドまたは局所変数のいずれか) -.TP 2 -o -\f2print myObj.myMethod()\fP (myMethod が null 以外を返す場合) -.TP 2 -o -\f2print new java.lang.String("Hello").length()\fP +.if n \{\ .RE -.TP 3 -dump -プリミティブ値の場合には、このコマンドは \f2print\fP と同じです。オブジェクトの場合には、オブジェクト内に定義されている各フィールドの現在の値が出力されます。static フィールドと instance フィールドが出力されます。 -.LP -\f2dump\fP コマンドでは、\f2print\fP コマンドと同じ式がサポートされます。 -.TP 3 -threads -現在実行中のスレッドを一覧表示します。スレッドごとに、名前と現在の状態、およびほかのコマンドに使用できるインデックスが出力されます。次に例を示します。 +.\} +.RE +.PP +dump +.RS 4 +プリミティブ値の場合、\fIdump\fRコマンドは\fIprint\fRコマンドと同一です。オブジェクトの場合、\fIdump\fRコマンドでは、オブジェクト内に定義されている各フィールドの現在の値が出力されます。staticフィールドとinstanceフィールドが出力されます。\fIdump\fRコマンドでは、\fIprint\fRコマンドと同じ式がサポートされます。 +.RE +.PP +threads +.RS 4 +現在実行中のスレッドを一覧表示します。スレッドごとに、名前と現在の状態、および他のコマンドに使用できるインデックスが出力されます。この例では、スレッド・インデックスは4であり、スレッドは\fIjava\&.lang\&.Thread\fRのインスタンスで、スレッドの名前は\fImain\fRであり、現在実行中です。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -4. (java.lang.Thread)0x1 main running -.fl -\fP +4\&. (java\&.lang\&.Thread)0x1 main running .fi -この例では、スレッドインデックスは 4 であり、スレッドは java.lang.Thread のインスタンスです。スレッドの名前は「main」であり、現在実行中です。 -.TP 3 -thread -現在のスレッドにするスレッドを選択します。多くの \f3jdb\fP コマンドは、現在のスレッドの設定に基づいて実行されます。スレッドは、\f2threads\fP コマンドで説明したスレッドインデックスとともに指定します。 -.TP 3 -where -\f2引数を指定しないで\fP where を実行すると、現在のスレッドのスタックがダンプされます。 \f2where all\fP コマンドは、現在のスレッドグループにあるスレッドのスタックをすべてダンプします。 \f2where\fP \f2threadindex\fP は、指定されたスレッドのスタックをダンプします。 -.LP -現在のスレッドが (ブレークポイントか \f2suspend\fP コマンドによって) 中断している場合は、局所変数とフィールドは \f2print\fP コマンドと \f2dump\fP コマンドで表示できます。\f2up\fP コマンドと \f2down\fP コマンドで、どのスタックフレームをカレントにするかを選ぶことができます。 +.if n \{\ .RE - -.LP -.SS -ブレークポイント -.LP -.LP -ブレークポイントは、行番号またはメソッドの最初の命令で \f3jdb\fP に設定できます。次に例を示します。 -.LP -.RS 3 -.TP 2 -o -\f2stop at MyClass:22\fP (MyClass が含まれるソースファイルの 22 行目の最初の命令にブレークポイントを設定) -.TP 2 -o -\f2stop in java.lang.String.length\fP (\f2java.lang.String.length\fP メソッドの最初にブレークポイントを設定) -.TP 2 -o -\f2stop in MyClass.<init>\fP (<init> は MyClass コンストラクタを識別) -.TP 2 -o -\f2stop in MyClass.<clinit>\fP (<clinit> は MyClass の静的初期化コードを識別) +.\} .RE - -.LP -.LP -メソッドがオーバーロードされている場合には、メソッドの引数の型も指定して、ブレークポイントに対して適切なメソッドが選択されるようにしなければなりません。たとえば、「\f2MyClass.myMethod(int,java.lang.String)\fP」または「\f2MyClass.myMethod()\fP」と指定します。 -.LP -.LP -\f2clear\fP コマンドは、「\f2clear\ MyClass:45\fP」のような構文を使用してブレークポイントを削除します。\f2clear\fP を使用するか、引数を指定しないでコマンドを使用すると、現在設定されているすべてのブレークポイントが表示されます。\f2cont\fP コマンドは実行を継続します。 -.LP -.SS -ステップ実行 -.LP -.LP -\f2step\fP コマンドは、現在のスタックフレームまたは呼び出されたメソッド内で、次の行を実行します。\f2next\fP コマンドは、現在のスタックフレームの次の行を実行します。 -.LP -.SS -例外 -.LP -.LP -スローしているスレッドの呼び出しスタック上のどこにも catch 文がない場合に例外が発生すると、VM は通常、例外トレースを出力して終了します。ただし、\f3jdb\fP 環境で実行している場合は、例外が発生すると \f3jdb\fP に制御が戻ります。次に、\f3jdb\fP を使用して例外の原因を診断します。 -.LP -.LP -たとえば、「\f2catch java.io.FileNotFoundException\fP」または「\f2catch mypackage.BigTroubleException\fP」のように \f2catch\fP コマンドを使用すると、デバッグされたアプリケーションは、ほかの例外がスローされたときに停止します。例外が特定のクラス (またはサブクラス) のインスタンスの場合は、アプリケーションは例外がスローされた場所で停止します。 -.LP -.LP -\f2ignore\fP コマンドを使うと、以前の \f2catch\fP コマンドの効果が無効になります。 -.LP -.LP -\f2注: \fP\f2ignore\fP コマンドでは、デバッグされる VM は例外を無視せず、デバッガだけが例外を無視します。 -.LP -.SH "コマンド行オプション" -.LP -.LP -コマンド行で Java アプリケーション起動ツールの代わりに \f3jdb\fP を使用する場合、\f3jdb\fP は、\f2\-D\fP、\f2\-classpath\fP、\f2\-X<option>\fP など、java コマンドと同じ数のオプションを受け入れます。 -.LP -.LP -\f3jdb\fP は、そのほかに次のオプションを受け入れます。 -.LP -.RS 3 -.TP 3 -\-help -ヘルプメッセージを表示します。 -.TP 3 -\-sourcepath <dir1:dir2:...> -指定されたパスを使用して、ソースファイルを検索します。このオプションが指定されていない場合は、デフォルトパスの「.」が使われます。 -.TP 3 -\-attach <address> -デフォルトの接続機構を使用して、すでに実行中の VM にデバッガを接続します。 -.TP 3 -\-listen <address> -実行中の VM が標準のコネクタを使って指定されたアドレスに接続するのを待機します。 -.TP 3 -\-listenany -実行中の VM が標準のコネクタを使って利用可能な任意のアドレスに接続するのを待機します。 -.TP 3 -\-launch -デバッグするアプリケーションを jdb の起動後ただちに起動します。このオプションによって、\f2run\fP コマンドを使用する必要がなくなります。デバッグするアプリケーションは、起動後、初期アプリケーションクラスがロードされる直前に停止します。その時点で、必要なブレークポイントを設定し、\f2cont\fP を使用して実行を継続できます。 -.TP 3 -\-listconnectors -この VM で利用できるコネクタを一覧表示します。 -.TP 3 -\-connect <connector\-name>:<name1>=<value1>,... -一覧表示された引数の値と指定のコネクタを使ってターゲット VM に接続します。 -.TP 3 -\-dbgtrace [flags] -jdb のデバッグ情報を出力します。 -.TP 3 -\-tclient -Java HotSpot(tm) VM (クライアント) 内でアプリケーションを実行します。 -.TP 3 -\-tserver -Java HotSpot(tm) VM (サーバー) 内でアプリケーションを実行します。 -.TP 3 -\-Joption -jdb の実行に使用される Java 仮想マシンに \f2option\fP を渡します。(アプリケーション Java 仮想マシンに対するオプションは、\f3run\fP コマンドに渡される)。たとえば、\f3\-J\-Xms48m\fP と指定すると、スタートアップメモリーは 48M バイトに設定されます。 +.PP +thread +.RS 4 +現在のスレッドにするスレッドを選択します。多くの\fIjdb\fRコマンドは、現在のスレッドの設定に基づいて実行されます。スレッドは、threadsコマンドで説明したスレッド・インデックスとともに指定します。 .RE - -.LP -.LP -デバッガとデバッグを行う VM を接続するための代替機構に対して、その他のオプションがサポートされています。その他の接続オプションについては、Java Platform Debugger Architecture の -.na -\f2ドキュメント\fP @ -.fi -http://java.sun.com/javase/6/docs/technotes/guides/jpda/conninv.htmlを参照してください。 -.LP -.SS -デバッグ対象のプロセスに転送されるオプション -.LP -.RS 3 -.TP 3 -\-v \-verbose[:class|gc|jni] -冗長モードにします。 -.TP 3 -\-D<name>=<value> -システムプロパティーを設定します。 -.TP 3 -\-classpath <directories separated by ":"> -クラスを検索するディレクトリを一覧表示します。 -.TP 3 -\-X<option> -非標準ターゲット VM オプションです。 +.PP +where +.RS 4 +引数を指定しないで\fIwhere\fRコマンドを実行すると、現在のスレッドのスタックがダンプされます。\fIwhere\fR +\fIall\fRコマンドは、現在のスレッド・グループにあるスレッドのスタックをすべてダンプします。\fIwhere\fR +\fIthreadindex\fRコマンドは、指定されたスレッドのスタックをダンプします。 +.sp +現在のスレッドが(ブレークポイントか\fIsuspend\fRコマンドによって)中断している場合は、ローカル変数とフィールドは\fIprint\fRコマンドと\fIdump\fRコマンドで表示できます。\fIup\fRコマンドと\fIdown\fRコマンドで、どのスタック・フレームを現在のスタック・フレームにするかを選ぶことができます。 +.RE +.SS "ブレークポイント" +.PP +ブレークポイントは、行番号またはメソッドの最初の命令でJDBに設定できます。次に例を示します。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +コマンド\fIstop at MyClass:22\fRは、\fIMyClass\fRが含まれるソース・ファイルの22行目の最初の命令にブレークポイントを設定します。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +コマンド\fIstop in java\&.lang\&.String\&.length\fRは、メソッド\fIjava\&.lang\&.String\&.length\fRの先頭にブレークポイントを設定します。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +コマンド\fIstop in MyClass\&.<clinit>\fRは、\fI<clinit>\fRを使用して\fIMyClass\fRの静的初期化コードを特定します。 +.RE +.PP +メソッドがオーバーロードされている場合には、メソッドの引数の型も指定して、ブレークポイントに対して適切なメソッドが選択されるようにする必要があります。たとえば、\fIMyClass\&.myMethod(int,java\&.lang\&.String)\fRまたは\fIMyClass\&.myMethod()\fRと指定します。 +.PP +\fIclear\fRコマンドは、\fIclear MyClass:45\fRのような構文を使用してブレークポイントを削除します。\fIclear\fRを使用するか、引数を指定しないで\fIstop\fRコマンドを使用すると、現在設定されているすべてのブレークポイントが表示されます。\fIcont\fRコマンドは実行を継続します。 +.SS "ステップ実行" +.PP +\fIstep\fRコマンドは、現在のスタック・フレームまたは呼び出されたメソッド内で、次の行を実行します。\fInext\fRコマンドは、現在のスタック・フレームの次の行を実行します。 +.SS "例外" +.PP +スローしているスレッドの呼出しスタック上のどこにも\fIcatch\fR文がない場合に例外が発生すると、JVMは通常、例外トレースを出力して終了します。ただし、JDB環境で実行している場合は、違反のスロー時にJDBに制御が戻ります。次に、\fIjdb\fRコマンドを使用して例外の原因を診断します。 +.PP +たとえば、\fIcatch java\&.io\&.FileNotFoundException\fRまたは\fIcatch\fR +\fImypackage\&.BigTroubleException\fRのように\fIcatch\fRコマンドを使用すると、デバッグされたアプリケーションは、他の例外がスローされたときに停止します。例外が特定のクラスまたはサブクラスのインスタンスの場合は、アプリケーションは例外がスローされた場所で停止します。 +.PP +\fIignore\fRコマンドを使用すると、以前の\fIcatch\fRコマンドの効果が無効になります。\fIignore\fRコマンドでは、デバッグされるJVMは特定の例外を無視せず、デバッガのみを無視します。 +.SH "オプション" +.PP +コマンドラインで\fIjava\fRコマンドのかわりに\fIjdb\fRコマンドを使用する場合、\fIjdb\fRコマンドは、\fI\-D\fR、\fI\-classpath\fR、\fI\-X\fRなど、\fIjava\fRコマンドと同じ数のオプションを受け入れます。\fIjdb\fRコマンドは、その他に次のリストにあるオプションを受け入れます。 +.PP +デバッグを行うJVMにデバッガを接続するための代替機構を提供するために、その他のオプションがサポートされています。これらの接続の代替に関する詳細なドキュメントは、Java Platform Debugger Architecture (JPDA) +(http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/jpda/index\&.html)を参照してください +.PP +\-help +.RS 4 +ヘルプ・メッセージを表示します。 +.RE +.PP +\-sourcepath \fIdir1:dir2: \&. \&. \&.\fR +.RS 4 +指定されたパスを使用して、ソース・ファイルを検索します。このオプションが指定されていない場合は、デフォルト・パスのドット(\&.)が使用されます。 +.RE +.PP +\-attach \fIaddress\fR +.RS 4 +デフォルトの接続機構を使用して、実行中のJVMにデバッガを接続します。 +.RE +.PP +\-listen \fIaddress\fR +.RS 4 +実行中のJVMが標準のコネクタを使用して指定されたアドレスに接続するのを待機します。 +.RE +.PP +\-launch +.RS 4 +デバッグするアプリケーションをJDBの起動後ただちに起動します。\fI\-launch\fRオプションにより、\fIrun\fRコマンドが必要なくなります。デバッグするアプリケーションは、起動後、初期アプリケーション・クラスがロードされる直前に停止します。その時点で、必要なブレークポイントを設定し、\fIcont\fRコマンドを使用して実行を継続できます。 +.RE +.PP +\-listconnectors +.RS 4 +このJVMで利用できるコネクタを一覧表示します。 +.RE +.PP +\-connect connector\-name:\fIname1=value1\fR +.RS 4 +一覧表示された引数の値と指定のコネクタを使用してターゲットJVMに接続します。 +.RE +.PP +\-dbgtrace [\fIflags\fR] +.RS 4 +\fIjdb\fRコマンドのデバッグの情報を出力します。 +.RE +.PP +\-tclient +.RS 4 +Java HotSpot VMクライアント内でアプリケーションを実行します。 +.RE +.PP +\-tserver +.RS 4 +Java HotSpot VMサーバー内でアプリケーションを実行します。 +.RE +.PP +\-J\fIoption\fR +.RS 4 +JVMに\fIoption\fRを渡します。optionには、Javaアプリケーション起動ツールのリファレンス・ページに記載されているオプションを1つ指定します。たとえば、\fI\-J\-Xms48m\fRと指定すると、スタートアップ・メモリーは48MBに設定されます。java(1)を参照してください。 +.RE +.SH "デバッグ対象のプロセスに転送されるオプション" +.PP +\-v \-verbose[:\fIclass\fR|gc|jni] +.RS 4 +冗長モードにします。 +.RE +.PP +\-D\fIname\fR=\fIvalue\fR +.RS 4 +システム・プロパティを設定します。 +.RE +.PP +\-classpath \fIdir\fR +.RS 4 +クラスを検索するための、コロンで区切って指定されたディレクトリのリスト。 +.RE +.PP +\-X\fIoption\fR +.RS 4 +非標準ターゲットJVMオプションです。 .RE - -.LP .SH "関連項目" -.LP -.LP -javac(1)、java(1)、javah(1)、javap(1)、javadoc(1) -.LP - +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +javac(1) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +java(1) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +javah(1) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +javap(1) +.RE +.br +'pl 8.5i +'bp diff --git a/jdk/src/linux/doc/man/ja/jdeps.1 b/jdk/src/linux/doc/man/ja/jdeps.1 new file mode 100644 index 00000000000..9ab6f666e0c --- /dev/null +++ b/jdk/src/linux/doc/man/ja/jdeps.1 @@ -0,0 +1,367 @@ +'\" t +.\" Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. +.\" Title: jdeps +.\" Language: English +.\" Date: 2013年11月21日 +.\" SectDesc: 基本ツール +.\" Software: JDK 8 +.\" Arch: 汎用 +.\" +.\" 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. +.\" +.pl 99999 +.TH "jdeps" "1" "2013年11月21日" "JDK 8" "基本ツール" +.\" ----------------------------------------------------------------- +.\" * Define some portability stuff +.\" ----------------------------------------------------------------- +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.\" http://bugs.debian.org/507673 +.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" ----------------------------------------------------------------- +.\" * set default formatting +.\" ----------------------------------------------------------------- +.\" disable hyphenation +.nh +.\" disable justification (adjust text to left margin only) +.ad l +.\" ----------------------------------------------------------------- +.\" * MAIN CONTENT STARTS HERE * +.\" ----------------------------------------------------------------- +.SH "NAME" +jdeps \- Javaクラス依存性アナライザ。 +.SH "概要" +.sp +.if n \{\ +.RS 4 +.\} +.nf +\fIjdeps\fR [\fIoptions\fR] \fIclasses\fR \&.\&.\&. +.fi +.if n \{\ +.RE +.\} +.PP +\fIoptions\fR +.RS 4 +コマンドライン・オプション。オプションを参照してください。 +.RE +.PP +\fIclasses\fR +.RS 4 +分析するクラスの名前。クラス・パスで検出できるクラスを、ファイル名、ディレクトリまたはJARファイルで指定できます。 +.RE +.SH "説明" +.PP +\fIjdeps\fRコマンドは、Javaクラス・ファイルのパッケージレベルまたはクラスレベルの依存性を示します。入力クラスには、\fI\&.class\fRファイルのパス名、ディレクトリ、JARファイル、またはすべてのクラス・ファイルを分析するための完全修飾クラス名を指定できます。オプションにより出力が決定します。デフォルトでは、\fIjdeps\fRはシステム出力に依存関係を出力します。DOT言語で依存関係を生成できます(\fI\-dotoutput\fRオプションを参照)。 +.SH "オプション" +.PP +\-dotoutput <\fIdir\fR> +.RS 4 +DOTファイル出力の宛先ディレクトリ。指定した場合は\fIjdeps\fRは<\fIarchive\-file\-name\fR>\&.dotという名前の分析済みアーカイブごとに依存関係をリストする1つのdotファイルを生成し、アーカイブ間の依存関係をリストするsummary\&.dotという名前のサマリー・ファイルも生成します。 +.RE +.PP +\-s, \-summary +.RS 4 +依存関係のサマリーのみを出力します。 +.RE +.PP +\-v, \-verbose +.RS 4 +すべてのクラスレベルの依存関係を出力します。 +.RE +.PP +\-verbose:package +.RS 4 +同じアーカイブ内の依存関係を除き、パッケージレベルの依存関係を出力します。 +.RE +.PP +\-verbose:class +.RS 4 +同じアーカイブ内の依存関係を除き、クラスレベルの依存関係を出力します。 +.RE +.PP +\-cp <\fIpath\fR>, \-classpath <\fIpath\fR> +.RS 4 +クラス・ファイルの検索場所を指定します。 +.sp +Setting the Class Path も参照してください。 +.RE +.PP +\-p <\fIpkg name\fR>, \-package <\fIpkg name\fR> +.RS 4 +指定したパッケージの依存関係を検出します。異なるパッケージに対してこのオプションを複数回指定できます。\fI\-p\fRオプションと\fI\-e\fRオプションを同時に指定することはできません。 +.RE +.PP +\-e <\fIregex\fR>, \-regex <\fIregex\fR> +.RS 4 +指定した正規表現パターンと一致するパッケージの依存関係を検出します。\fI\-p\fRオプションと\fI\-e\fRオプションを同時に指定することはできません。 +.RE +.PP +\-include <\fIregex\fR> +.RS 4 +分析をパターンに一致するクラスに制限します。このオプションは、分析するクラスのリストをフィルタします。依存関係にパターンを適用する\fI\-p\fRおよび\fI\-e\fRとともに使用できます。 +.RE +.PP +\-jdkinternals +.RS 4 +JDKの内部APIのクラスレベルの依存関係を検出します。デフォルトでは、\fI\-include\fRオプションを指定しないかぎり、\fI\-classpath\fRオプションおよび入力ファイルに指定されたすべてのクラスを分析します。このオプションは、\fI\-p\fRオプション、\fI\-e\fRオプションおよび\fI\-s\fRオプションとともに使用できません。 +.sp +\fB警告\fR: JDKの内部APIは、今後のリリースでアクセスできなくなる可能性があります。 +.RE +.PP +\-P, \-profile +.RS 4 +パッケージを含むプロファイルまたはファイルを表示します。 +.RE +.PP +\-apionly +.RS 4 +フィールド・タイプ、メソッド・パラメータ・タイプ、戻りタイプ、チェックされた例外タイプを含むパブリック・クラスの\fIpublic\fRおよび\fIprotected\fRメンバーの署名からの依存関係など、分析をAPIに制限します。 +.RE +.PP +\-R, \-recursive +.RS 4 +すべての依存関係を再帰的に走査します。 +.RE +.PP +\-version +.RS 4 +バージョン情報を出力します。 +.RE +.PP +\-h, \-?, \-help +.RS 4 +\fIjdeps\fRに関するヘルプ・メッセージを出力します。 +.RE +.SH "例" +.PP +Notepad\&.jarの依存関係の分析。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +$ jdeps demo/jfc/Notepad/Notepad\&.jar + +demo/jfc/Notepad/Notepad\&.jar \-> /usr/java/jre/lib/rt\&.jar + <unnamed> (Notepad\&.jar) + \-> java\&.awt + \-> java\&.awt\&.event + \-> java\&.beans + \-> java\&.io + \-> java\&.lang + \-> java\&.net + \-> java\&.util + \-> java\&.util\&.logging + \-> javax\&.swing + \-> javax\&.swing\&.border + \-> javax\&.swing\&.event + \-> javax\&.swing\&.text + \-> javax\&.swing\&.tree + \-> javax\&.swing\&.undo +.fi +.if n \{\ +.RE +.\} +.PP +\-Pまたは\-profileオプションを使用して、メモ帳が依存するプロファイルを表示します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +$ jdeps \-profile demo/jfc/Notepad/Notepad\&.jar +demo/jfc/Notepad/Notepad\&.jar \-> /usr/java/jre/lib/rt\&.jar (Full JRE) + <unnamed> (Notepad\&.jar) + \-> java\&.awt Full JRE + \-> java\&.awt\&.event Full JRE + \-> java\&.beans Full JRE + \-> java\&.io compact1 + \-> java\&.lang compact1 + \-> java\&.net compact1 + \-> java\&.util compact1 + \-> java\&.util\&.logging compact1 + \-> javax\&.swing Full JRE + \-> javax\&.swing\&.border Full JRE + \-> javax\&.swing\&.event Full JRE + \-> javax\&.swing\&.text Full JRE + \-> javax\&.swing\&.tree Full JRE + \-> javax\&.swing\&.undo Full JRE +.fi +.if n \{\ +.RE +.\} +.PP +tools\&.jarファイル内の\fIcom\&.sun\&.tools\&.jdeps\&.Main\fRクラスなど、特定のクラスパス内の特定のクラスの直接依存関係の分析。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +$ jdeps \-cp lib/tools\&.jar com\&.sun\&.tools\&.jdeps\&.Main +lib/tools\&.jar \-> /usr/java/jre/lib/rt\&.jar + com\&.sun\&.tools\&.jdeps (tools\&.jar) + \-> java\&.io + \-> java\&.lang +.fi +.if n \{\ +.RE +.\} +.PP +\fI\-verbose:class\fRオプションを使用して、クラスレベル依存関係を検索するか\fI\-v\fRまたは\fI\-verbose\fRオプションを使用して同じJARファイルからの依存関係を含めます。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +$ jdeps \-verbose:class \-cp lib/tools\&.jar com\&.sun\&.tools\&.jdeps\&.Main + +lib/tools\&.jar \-> /usr/java/jre/lib/rt\&.jar + com\&.sun\&.tools\&.jdeps\&.Main (tools\&.jar) + \-> java\&.io\&.PrintWriter + \-> java\&.lang\&.Exception + \-> java\&.lang\&.Object + \-> java\&.lang\&.String + \-> java\&.lang\&.System +.fi +.if n \{\ +.RE +.\} +.PP +\fI\-R\fRまたは\fI\-recursive\fRオプションを使用して、\fIcom\&.sun\&.tools\&.jdeps\&.Main\fRクラスの推移的な依存関係を分析します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +$ jdeps \-R \-cp lib/tools\&.jar com\&.sun\&.tools\&.jdeps\&.Main +lib/tools\&.jar \-> /usr/java/jre/lib/rt\&.jar + com\&.sun\&.tools\&.classfile (tools\&.jar) + \-> java\&.io + \-> java\&.lang + \-> java\&.lang\&.reflect + \-> java\&.nio\&.charset + \-> java\&.nio\&.file + \-> java\&.util + \-> java\&.util\&.regex + com\&.sun\&.tools\&.jdeps (tools\&.jar) + \-> java\&.io + \-> java\&.lang + \-> java\&.nio\&.file + \-> java\&.nio\&.file\&.attribute + \-> java\&.text + \-> java\&.util + \-> java\&.util\&.jar + \-> java\&.util\&.regex + \-> java\&.util\&.zip +/usr/java/jre/lib/jce\&.jar \-> /usr/java/jre/lib/rt\&.jar + javax\&.crypto (jce\&.jar) + \-> java\&.io + \-> java\&.lang + \-> java\&.lang\&.reflect + \-> java\&.net + \-> java\&.nio + \-> java\&.security + \-> java\&.security\&.cert + \-> java\&.security\&.spec + \-> java\&.util + \-> java\&.util\&.concurrent + \-> java\&.util\&.jar + \-> java\&.util\&.regex + \-> java\&.util\&.zip + \-> javax\&.security\&.auth + \-> sun\&.security\&.jca JDK internal API (rt\&.jar) + \-> sun\&.security\&.util JDK internal API (rt\&.jar) + javax\&.crypto\&.spec (jce\&.jar) + \-> java\&.lang + \-> java\&.security\&.spec + \-> java\&.util +/usr/java/jre/lib/rt\&.jar \-> /usr/java/jre/lib/jce\&.jar + java\&.security (rt\&.jar) + \-> javax\&.crypto +.fi +.if n \{\ +.RE +.\} +.PP +メモ帳デモの依存関係のdotファイルを生成します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +$ jdeps \-dotoutput dot demo/jfc/Notepad/Notepad\&.jar +.fi +.if n \{\ +.RE +.\} +.PP +\fIjdeps\fRは、\fI\-dotoutput\fRオプションで指定されたdotディレクトリに<\fIfilename\fR>\&.dotという名前のdotファイルを特定のJARファイルごとに作成し、JARファイル間の依存関係をリストするsummary\&.dotという名前のサマリー・ファイルも作成します +.sp +.if n \{\ +.RS 4 +.\} +.nf +$ cat dot/Notepad\&.jar\&.dot +digraph "Notepad\&.jar" { + // Path: demo/jfc/Notepad/Notepad\&.jar + "<unnamed>" \-> "java\&.awt"; + "<unnamed>" \-> "java\&.awt\&.event"; + "<unnamed>" \-> "java\&.beans"; + "<unnamed>" \-> "java\&.io"; + "<unnamed>" \-> "java\&.lang"; + "<unnamed>" \-> "java\&.net"; + "<unnamed>" \-> "java\&.util"; + "<unnamed>" \-> "java\&.util\&.logging"; + "<unnamed>" \-> "javax\&.swing"; + "<unnamed>" \-> "javax\&.swing\&.border"; + "<unnamed>" \-> "javax\&.swing\&.event"; + "<unnamed>" \-> "javax\&.swing\&.text"; + "<unnamed>" \-> "javax\&.swing\&.tree"; + "<unnamed>" \-> "javax\&.swing\&.undo"; +} + +$ cat dot/summary\&.dot +digraph "summary" { + "Notepad\&.jar" \-> "rt\&.jar"; +} +.fi +.if n \{\ +.RE +.\} +.SH "関連項目" +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +javap(1) +.RE +.br +'pl 8.5i +'bp diff --git a/jdk/src/linux/doc/man/ja/jhat.1 b/jdk/src/linux/doc/man/ja/jhat.1 index 666b25229d2..63415d9a6da 100644 --- a/jdk/src/linux/doc/man/ja/jhat.1 +++ b/jdk/src/linux/doc/man/ja/jhat.1 @@ -1,159 +1,214 @@ -." Copyright (c) 2006, 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. -." -.TH jhat 1 "07 May 2011" - -.LP -.SH "名前" -jhat \- Java ヒープ解析ツール -.LP -.RS 3 -.TP 2 -o -形式 -.TP 2 -o -パラメータ -.TP 2 -o -説明 -.TP 2 -o -オプション -.TP 2 -o -関連項目 -.RE - -.LP -.SH "形式" -.LP +'\" t +.\" Copyright (c) 2006, 2013, Oracle and/or its affiliates. All rights reserved. +.\" Title: jhat +.\" Language: English +.\" Date: 2013年11月21日 +.\" SectDesc: トラブルシューティング・ツール +.\" Software: JDK 8 +.\" Arch: 汎用 +.\" +.\" 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. +.\" +.pl 99999 +.TH "jhat" "1" "2013年11月21日" "JDK 8" "トラブルシューティング・ツール" +.\" ----------------------------------------------------------------- +.\" * Define some portability stuff +.\" ----------------------------------------------------------------- +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.\" http://bugs.debian.org/507673 +.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" ----------------------------------------------------------------- +.\" * set default formatting +.\" ----------------------------------------------------------------- +.\" disable hyphenation +.nh +.\" disable justification (adjust text to left margin only) +.ad l +.\" ----------------------------------------------------------------- +.\" * MAIN CONTENT STARTS HERE * +.\" ----------------------------------------------------------------- +.SH "NAME" +jhat \- Javaヒープを分析します。このコマンドは試験的なもので、サポートされていません。 +.SH "概要" +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -\fP\f3jhat\fP [ \f2options\fP ] <heap\-dump\-file> -.fl - -.fl +\fIjhat\fR [ \fIoptions\fR ] \fIheap\-dump\-file\fR .fi - -.LP -.SH "パラメータ" -.LP -.RS 3 -.TP 3 -options -オプションを使用する場合、コマンド名の直後に記述してください。 -.TP 3 -heap\-dump\-file -ブラウズ対象となる Java バイナリヒープダンプファイル。複数のヒープダンプを含むダンプファイルの場合、「foo.hprof#3」のようにファイル名の後に「#<number>」を付加することで、ファイル内の特定のダンプを指定できます。 +.if n \{\ +.RE +.\} +.PP +\fIoptions\fR +.RS 4 +コマンドライン・オプション。オプションを参照してください。 +.RE +.PP +\fIheap\-dump\-file\fR +.RS 4 +ブラウズ対象となるJavaバイナリ・ヒープ・ダンプ・ファイル。複数のヒープ・ダンプを含むダンプ・ファイルの場合、\fImyfile\&.hprof#3\fRのようにファイル名の後に\fI#<number>\fRを付加することで、ファイル内の特定のダンプを指定できます。 .RE - -.LP .SH "説明" -.LP -.LP -\f3jhat\fP コマンドは、java ヒープダンプファイルを解析し、Web サーバーを起動します。jhat を使えば、お好みの Web ブラウザを使ってヒープダンプをブラウズできます。jhat は、「ある既知のクラス「Foo」のすべてのインスタンスを表示する」といった、事前に設計されたクエリのほか、\f3OQL\fP (\f3O\fPbject \f3Q\fPuery \f3L\fPanguage) もサポートします。OQL のヘルプには、jhat によって表示される OQL ヘルプページからアクセスできます。デフォルトポートを使用する場合、OQL のヘルプは http://localhost:7000/oqlhelp/ で利用可能です。 -.LP -.LP -Java のヒープダンプを生成するには、いくつかの方法があります。 -.LP -.RS 3 -.TP 2 -o -jmap(1) の \-dump オプションを使って実行時にヒープダンプを取得する。 -.TP 2 -o -jconsole(1) のオプションを使って -.na -\f2HotSpotDiagnosticMXBean\fP @ -.fi -http://java.sun.com/javase/6/docs/jre/api/management/extension/com/sun/management/HotSpotDiagnosticMXBean.html 経由で実行時にヒープダンプを取得する。 -.TP 2 -o -\-XX:+HeapDumpOnOutOfMemoryError VM オプションを指定すると、OutOfMemoryError のスロー時にヒープダンプが生成される。 -.TP 2 -o -.na -\f2hprof\fP @ -.fi -http://java.sun.com/developer/technicalArticles/Programming/HPROF.html を使用する。 +.PP +\fIjhat\fRコマンドはJavaヒープ・ダンプ・ファイルを解析し、Webサーバーを開始します。\fIjhat\fRコマンドを使用して、お気に入りのブラウザでヒープ・ダンプを参照できます。\fIjhat\fRコマンドは、既知のクラス\fIMyClass\fRのすべてのインスタンスを表示するなどの事前設計済の問合せやObject Query Language (OQL)をサポートします。ヒープ・ダンプの問合せを除き、OQLはSQLに似ています。OQLのヘルプには、\fIjhat\fRコマンドによって表示されるOQLヘルプ・ページからアクセスできます。デフォルト・ポートを使用する場合、OQLのヘルプはhttp://localhost:7000/oqlhelp/で利用可能です。 +.PP +Javaのヒープ・ダンプを生成するには、次のいくつかの方法があります。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fIjmap \-dump\fRオプションを使用して実行時にヒープ・ダンプを取得します。jmap(1)を参照してください。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fIjconsole\fRオプションを使用して\fIHotSpotDiagnosticMXBean\fR経由で実行時にヒープ・ダンプを取得します。jconsole(1)および\fIHotSpotDiagnosticMXBean\fRのインタフェースの説明( +http://docs\&.oracle\&.com/javase/8/docs/jre/api/management/extension/com/sun/management/HotSpotDiagnosticMXBean\&.html)を参照してください。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +ヒープ・ダンプは、\fI\-XX:+HeapDumpOnOutOfMemoryError\fR +Java仮想マシン(JVM)オプションを指定することで、\fIOutOfMemoryError\fRがスローされたときに生成されます。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fIhprof\fRコマンドを使用します。HPROF: Heap/CPUプロファイリング・ツール +(http://docs\&.oracle\&.com/javase/8/docs/technotes/samples/hprof\&.html)を参照してください .RE - -.LP -.LP -\f3注:\fP このツールは\f3試験的なもの\fPであり、将来の JDK のバージョンでは\f3利用できなくなる\fP可能性があります。 -.LP .SH "オプション" -.LP -.RS 3 -.TP 3 -\-stack false/true -オブジェクト割り当て呼び出しスタックの追跡を無効にします。ヒープダンプ内で割り当てサイト情報が使用できない場合、このフラグを false に設定する必要があります。デフォルトは true です。 -.TP 3 -\-refs false/true -オブジェクトへの参照の追跡を無効にします。デフォルトは true です。デフォルトでは、ヒープ内のすべてのオブジェクトについて、バックポインタ (指定されたオブジェクトをポイントしているオブジェクト。参照者または受信参照とも呼ばれる) が計算されます。 -.TP 3 -\-port port\-number -jhat の HTTP サーバーのポートを設定します。デフォルトは 7000 です。 -.TP 3 -\-exclude exclude\-file -「到達可能なオブジェクト」のクエリから除外すべきデータメンバーの一覧を含むファイルを指定します。たとえば、このファイルに \f2java.lang.String.value\fP が含まれていた場合、特定のオブジェクト「o」から到達可能なオブジェクトのリストを計算する際に、\f2java.lang.String.value\fP フィールドに関連する参照パスが考慮されなくなります。 -.TP 3 -\-baseline baseline\-dump\-file -ベースラインとなるヒープダンプを指定します。両方のヒープダンプ内で同じオブジェクト ID を持つオブジェクトは「新規ではない」としてマークされます。その他のオブジェクトは「新規」としてマークされます。これは、異なる 2 つのヒープダンプを比較する際に役立ちます。 -.TP 3 -\-debug int -このツールのデバッグレベルを設定します。0 は「デバッグ出力なし」を意味します。より大きな値を設定すると、より冗長なモードになります。 -.TP 3 -\-version -バージョン番号を報告したあと、終了します。 -.TP 3 -\-h -ヘルプメッセージを出力して終了します。 -.TP 3 -\-help -ヘルプメッセージを出力して終了します。 -.TP 3 -\-J<flag> -jhat が実行されている Java 仮想マシンに <flag> を渡します。たとえば、512M バイトの最大ヒープサイズを使用するには、\-J\-Xmx512m とします。 +.PP +\-stack false|true +.RS 4 +オブジェクト割当呼出しスタックの追跡を無効にします。ヒープ・ダンプ内で割当サイト情報が使用できない場合、このフラグを\fIfalse\fRに設定する必要があります。デフォルトは\fItrue\fRです。 +.RE +.PP +\-refs false|true +.RS 4 +オブジェクトへの参照の追跡を無効にします。デフォルトは\fItrue\fRです。デフォルトでは、ヒープ内のすべてのオブジェクトについて、バックポインタ(指定されたオブジェクトをポイントしているオブジェクト。参照者または受信参照とも呼ばれる)が計算されます。 +.RE +.PP +\-port \fIport\-number\fR +.RS 4 +\fIjhat\fRのHTTPサーバーのポートを設定します。デフォルトは7000です。 +.RE +.PP +\-exclude \fIexclude\-file\fR +.RS 4 +到達可能なオブジェクトの問合せから除外する必要があるデータ・メンバーの一覧を含むファイルを指定します。たとえば、このファイルに\fIjava\&.lang\&.String\&.value\fRが含まれていた場合、特定のオブジェクト\fIo\fRから到達可能なオブジェクトのリストを計算する際に、\fIjava\&.lang\&.String\&.value\fRフィールドに関連する参照パスが考慮されなくなります。 +.RE +.PP +\-baseline \fIexclude\-file\fR +.RS 4 +ベースラインとなるヒープ・ダンプを指定します。両方のヒープ・ダンプ内で同じオブジェクトIDを持つオブジェクトは新規ではないとしてマークされます。他のオブジェクトは新規としてマークされます。これは、異なる2つのヒープ・ダンプを比較する際に役立ちます。 +.RE +.PP +\-debug \fIint\fR +.RS 4 +このツールのデバッグ・レベルを設定します。レベル0はデバッグ出力がないことを意味します。より大きな値を設定すると、より冗長なモードになります。 +.RE +.PP +\-version +.RS 4 +リリース番号をレポートして終了します +.RE +.PP +\-h +.RS 4 +ヘルプ・メッセージを表示して終了します。 +.RE +.PP +\-help +.RS 4 +ヘルプ・メッセージを表示して終了します。 +.RE +.PP +\-J\fIflag\fR +.RS 4 +\fIjhat\fRコマンドを実行しているJava仮想マシンに\fIflag\fRを渡します。たとえば、512Mバイトの最大ヒープ・サイズを使用するには、\fI\-J\-Xmx512m\fRとします。 .RE - -.LP .SH "関連項目" -.LP -.RS 3 -.TP 2 -o -jmap(1) -.TP 2 -o -jconsole(1) -.TP 2 -o -.na -\f2hprof \- ヒープおよび CPU プロファイリングツール\fP @ -.fi -http://java.sun.com/developer/technicalArticles/Programming/HPROF.html +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +jmap(1) .RE - -.LP - +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +jconsole(1) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +HPROF: Heap/CPUプロファイリング・ツール +(http://docs\&.oracle\&.com/javase/8/docs/technotes/samples/hprof\&.html) +.RE +.br +'pl 8.5i +'bp diff --git a/jdk/src/linux/doc/man/ja/jinfo.1 b/jdk/src/linux/doc/man/ja/jinfo.1 index a1f639cfda9..f4e7ae9c4ec 100644 --- a/jdk/src/linux/doc/man/ja/jinfo.1 +++ b/jdk/src/linux/doc/man/ja/jinfo.1 @@ -1,166 +1,186 @@ -." Copyright (c) 2004, 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. -." -.TH jinfo 1 "07 May 2011" - -.LP -.SH "名前" -jinfo \- 構成情報 -.LP -.RS 3 -.TP 2 -o -形式 -.TP 2 -o -パラメータ -.TP 2 -o -説明 -.TP 2 -o -オプション -.TP 2 -o -関連項目 -.RE - -.LP -.SH "形式" -.LP +'\" t +.\" Copyright (c) 2004, 2013, Oracle and/or its affiliates. All rights reserved. +.\" Title: jinfo +.\" Language: English +.\" Date: 2013年11月21日 +.\" SectDesc: トラブルシューティング・ツール +.\" Software: JDK 8 +.\" Arch: 汎用 +.\" +.\" 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. +.\" +.pl 99999 +.TH "jinfo" "1" "2013年11月21日" "JDK 8" "トラブルシューティング・ツール" +.\" ----------------------------------------------------------------- +.\" * Define some portability stuff +.\" ----------------------------------------------------------------- +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.\" http://bugs.debian.org/507673 +.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" ----------------------------------------------------------------- +.\" * set default formatting +.\" ----------------------------------------------------------------- +.\" disable hyphenation +.nh +.\" disable justification (adjust text to left margin only) +.ad l +.\" ----------------------------------------------------------------- +.\" * MAIN CONTENT STARTS HERE * +.\" ----------------------------------------------------------------- +.SH "NAME" +jinfo \- 構成情報を生成します。このコマンドは試験的なもので、サポートされていません。 +.SH "概要" +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -\fP\f3jinfo\fP [ option ] pid -.fl -\f3jinfo\fP [ option ] executable core -.fl -\f3jinfo\fP [ option ] [server\-id@]remote\-hostname\-or\-IP -.fl +\fIjinfo\fR [ \fIoption\fR ] \fIpid\fR .fi - -.LP -.SH "パラメータ" -.LP -.RS 3 -.TP 3 -option -各オプションは互いに排他的です。オプションを使用する場合、コマンド名の直後に記述します。 +.if n \{\ .RE - -.LP -.RS 3 -.TP 3 -pid -出力する構成情報のプロセス ID。プロセスは Java プロセスである必要があります。マシン上で実行している Java プロセスの一覧を取得するには、jps(1) を使用します。 +.\} +.sp +.if n \{\ +.RS 4 +.\} +.nf +\fIjinfo\fR [ \fIoption \fR] \fIexecutable core\fR +.fi +.if n \{\ .RE - -.LP -.RS 3 -.TP 3 -executable -コアダンプの作成元の Java 実行可能ファイルです。 +.\} +.sp +.if n \{\ +.RS 4 +.\} +.nf +\fIjinfo\fR [ \fIoption \fR] \fI[ servier\-id ] remote\-hostname\-or\-IP\fR +.fi +.if n \{\ .RE - -.LP -.RS 3 -.TP 3 -core -出力する構成情報のコアファイル。 +.\} +.PP +\fIオプション\fR +.RS 4 +コマンドライン・オプション。オプションを参照してください。 .RE - -.LP -.RS 3 -.TP 3 -remote\-hostname\-or\-IP -リモートデバッグサーバー (jsadebugd(1) を参照) のホスト名または IP アドレスです。 +.PP +\fIpid\fR +.RS 4 +構成情報が出力されるプロセスID。プロセスはJavaプロセスである必要があります。マシン上で実行しているJavaプロセスの一覧を取得するには、jps(1)コマンドを使用します。 .RE - -.LP -.RS 3 -.TP 3 -server\-id -複数のデバッグサーバーが同一のリモートホストで実行している場合の、オプション固有の ID です。 +.PP +\fI実行可能ファイル\fR +.RS 4 +コア・ダンプの作成元のJava実行可能ファイル。 +.RE +.PP +\fIコア\fR +.RS 4 +構成情報が出力されるコア・ファイル。 +.RE +.PP +\fIremote\-hostname\-or\-IP\fR +.RS 4 +リモート・デバッグ・サーバーの\fIホスト名\fRまたは\fIIP\fRアドレス。jsadebugd(1)を参照してください。 +.RE +.PP +\fIserver\-id\fR +.RS 4 +複数のデバッグ・サーバーが同一のリモート・ホストで実行している場合の、オプション固有のID。 .RE - -.LP .SH "説明" -.LP -.LP -\f3jinfo\fP は、指定された Java プロセスやコアファイルまたはリモートデバッグサーバーの Java 構成情報を出力します。構成情報は、Java システムプロパティーと Java 仮想マシンのコマンド行フラグから構成されます。指定されたプロセスが 64 ビット VM 上で実行されている場合、\f2\-J\-d64\fP オプションを指定しなければならない場合があります。次に例を示します。 -.br -jinfo \-J\-d64 \-sysprops pid -.LP -.LP -\f3注 \- このユーティリティーはサポート対象外であり、将来の JDK のバージョンでは利用できなくなる可能性があります。dbgeng.dll が存在していない Windows システムでは、「Debugging Tools For Windows」をインストールしないとこれらのツールが正常に動作しません。また、 \fP\f4PATH\fP\f3 環境変数には、ターゲットプロセスによって使用される \fP\f4jvm.dll\fP\f3 の場所、またはクラッシュダンプファイルが生成された場所が含まれるようにしてください。\fP -.LP -.LP -\f3次に例を示します。 \fP\f4set PATH=<jdk>\\jre\\bin\\client;%PATH%\fP -.LP +.PP +\fIjinfo\fRコマンドは、指定されたJavaプロセスやコア・ファイルまたはリモート・デバッグ・サーバーのJava構成情報を出力します。構成情報には、Javaシステム・プロパティとJava仮想マシン(JVM)のコマンドライン・フラグが含まれています。指定されたプロセスが64ビットJVM上で実行されている場合、\fI\-J\-d64\fRオプションを指定する必要がある場合があります。次に例を示します。\fIjinfo\fR +\fI\-J\-d64 \-sysprops pid\fR。 +.PP +このユーティリティはサポート対象外であり、将来のJDKのリリースでは利用できなくなる可能性があります。\fIdbgeng\&.dll\fRが存在していないWindowsシステムでは、Debugging Tools For Windowsをインストールしないとこれらのツールが正常に動作しません。\fIPATH\fR環境変数には、ターゲット・プロセスによって使用されるjvm\&.dllの場所、またはクラッシュ・ダンプ・ファイルが生成された場所が含まれるようにしてください。たとえば、\fIset PATH=%JDK_HOME%\ejre\ebin\eclient;%PATH%\fRです。 .SH "オプション" -.LP -.RS 3 -.TP 3 -<オプションなし> -コマンド行フラグを、システムプロパティー名と値のペアとともに出力します。 -.br -.TP 3 -\-flag name -指定されたコマンド行フラグの名前と値を出力します。 -.br -.TP 3 -\-flag [+|\-]name -指定されたブール型のコマンド行フラグを有効または無効にします。 -.br -.TP 3 -\-flag name=value -指定されたコマンド行フラグを指定された値に設定します。 -.br -.TP 3 -\-flags -JVM に渡されるコマンド行フラグをペアで出力します。 -.br -.TP 3 -\-sysprops -Java システムプロパティーを名前と値のペアとして出力します。 -.br -.TP 3 -\-h -ヘルプメッセージを出力します。 -.TP 3 -\-help -ヘルプメッセージを出力します。 +.PP +no\-option +.RS 4 +コマンドライン・フラグを、システム・プロパティ名と値のペアとともに出力します。 +.RE +.PP +\-flag \fIname\fR +.RS 4 +指定されたコマンドライン・フラグの名前と値を出力します。 +.RE +.PP +\-flag \fI[+|\-]name\fR +.RS 4 +指定されたブール型のコマンドライン・フラグを有効または無効にします。 +.RE +.PP +\-flag \fIname=value\fR +.RS 4 +指定されたコマンドライン・フラグを指定された値に設定します。 +.RE +.PP +\-flags +.RS 4 +JVMに渡されるコマンドライン・フラグを出力します。 +.RE +.PP +\-sysprops +.RS 4 +Javaシステム・プロパティを名前と値のペアとして出力します。 +.RE +.PP +\-h +.RS 4 +ヘルプ・メッセージが出力されます。 +.RE +.PP +\-help +.RS 4 +ヘルプ・メッセージが出力されます。 .RE - -.LP .SH "関連項目" -.LP -.RS 3 -.TP 2 -o -jps(1) -.TP 2 -o -jsadebugd(1) +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +jps(1) .RE - -.LP - +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +jsadebugd(1) +.RE +.br +'pl 8.5i +'bp diff --git a/jdk/src/linux/doc/man/ja/jjs.1 b/jdk/src/linux/doc/man/ja/jjs.1 new file mode 100644 index 00000000000..bcf28254fe2 --- /dev/null +++ b/jdk/src/linux/doc/man/ja/jjs.1 @@ -0,0 +1,394 @@ +'\" t +.\" Copyright (c) 1994, 2013, Oracle and/or its affiliates. All rights reserved. +.\" Title: jjs +.\" Language: English +.\" Date: 2013年11月21日 +.\" SectDesc: 基本ツール +.\" Software: JDK 8 +.\" Arch: 汎用 +.\" +.\" 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. +.\" +.pl 99999 +.TH "jjs" "1" "2013年11月21日" "JDK 8" "基本ツール" +.\" ----------------------------------------------------------------- +.\" * Define some portability stuff +.\" ----------------------------------------------------------------- +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.\" http://bugs.debian.org/507673 +.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" ----------------------------------------------------------------- +.\" * set default formatting +.\" ----------------------------------------------------------------- +.\" disable hyphenation +.nh +.\" disable justification (adjust text to left margin only) +.ad l +.\" ----------------------------------------------------------------- +.\" * MAIN CONTENT STARTS HERE * +.\" ----------------------------------------------------------------- +.SH "NAME" +jjs \- Nashornエンジンを呼び出します。 +.SH "概要" +.sp +.if n \{\ +.RS 4 +.\} +.nf +\fIjjs\fR [\fIoptions\fR] [\fIscript\-files\fR] [\-\- \fIarguments\fR] +.fi +.if n \{\ +.RE +.\} +.PP +\fIoptions\fR +.RS 4 +空白文字で区切られた、\fIjjs\fRコマンドの1つ以上のオプション。詳細は、オプションを参照してください。 +.RE +.PP +\fIscript\-files\fR +.RS 4 +空白文字で区切られた、Nashornを使用して解釈する1つ以上のスクリプト・ファイル。ファイルが指定されない場合は、対話型シェルが起動されます。 +.RE +.PP +\fIarguments\fR +.RS 4 +二重ハイフン・マーカー(\fI\-\-\fR)の後のすべての値が、引数としてスクリプトまたは対話型シェルに渡されます。これらの値には\fIarguments\fRプロパティを使用してアクセスできます(Example 3を参照してください)。 +.RE +.SH "説明" +.PP +\fIjjs\fRコマンドライン・ツールを使用してNashornエンジンを呼び出します。これを使用して、1つまたは複数のスクリプト・ファイルを解釈したり、対話型シェルを実行することができます。 +.SH "オプション" +.PP +\fIjjs\fRコマンドのオプションはスクリプトがNashornによって解釈される条件を制御します。 +.PP +\-ccs=\fIsize\fR, \-\-class\-cache\-size=\fIsize\fR +.RS 4 +クラス・キャッシュ・サイズをバイト単位で設定します。キロバイト(KB)を示すために\fIk\fRまたは\fIK\fRの文字を追加し、メガバイト(MB)を示すために\fIm\fRまたは\fIM\fRの文字を追加し、ギガバイト(GB)を示すために\fIg\fRまたは\fIG\fRを追加します。デフォルトでは、クラス・キャッシュ・サイズは50バイトに設定されます。次の例は、1024バイト(1 KB)に設定する方法を示します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-css=100 +\-css=1k +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\-co, \-\-compile\-only +.RS 4 +スクリプトを実行せずにコンパイルします。 +.RE +.PP +\-cp \fIpath\fR, \-\-classpath \fIpath\fR +.RS 4 +サポートするクラスへのパスを指定します。複数のパスを設定するには、このオプションを繰り返すか、または各パスをコロン(:)で区切ります。 +.RE +.PP +\-D\fIname\fR=\fIvalue\fR +.RS 4 +プロパティ名に値を割り当てることで、スクリプトに渡すシステム・プロパティを設定します。次の例で、対話型モードでNashornを呼び出して、\fImyValue\fRを\fImyKey\fRという名前のプロパティに割り当てる方法を示します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +>> \fBjjs \-DmyKey=myValue\fR +jjs> \fBjava\&.lang\&.System\&.getProperty("myKey")\fR +myValue +jjs> +.fi +.if n \{\ +.RE +.\} +このオプションを繰り返し使用すると、複数のプロパティを設定できます。 +.RE +.PP +\-d=\fIpath\fR, \-\-dump\-debug\-dir=\fIpath\fR +.RS 4 +クラス・ファイルをダンプするディレクトリへのパスを指定します。 +.RE +.PP +\-\-debug\-lines +.RS 4 +クラス・ファイル内の行番号表を生成します。デフォルトでは、このオプションは有効になっています。無効にするには\fI\-\-debug\-lines=false\fRを指定します。 +.RE +.PP +\-\-debug\-locals +.RS 4 +クラス・ファイル内のローカル変数を生成します。 +.RE +.PP +\-doe, \-\-dump\-on\-error +.RS 4 +エラーが発生したときに、フル・スタック・トレースを提供します。デフォルトでは、簡単なエラー・メッセージのみが出力されます。 +.RE +.PP +\-\-early\-lvalue\-error +.RS 4 +無効な左辺値式が早期エラーとして(つまり、コードが解析されるときに)報告されます。デフォルトでは、このオプションは有効になっています。無効にするには\fI\-\-early\-lvalue\-error=false\fRを指定します。無効な場合、無効な左辺値式はコードが実行されるまで報告されません。 +.RE +.PP +\-\-empty\-statements +.RS 4 +空の文をJavaの抽象構文ツリーに保存します。 +.RE +.PP +\-fv, \-\-fullversion +.RS 4 +完全なNashornバージョン文字列を出力します。 +.RE +.PP +\-\-function\-statement\-error +.RS 4 +関数の宣言が文として使用されるとエラー・メッセージが出力されます。 +.RE +.PP +\-\-function\-statement\-warning +.RS 4 +関数の宣言が文として使用されると警告メッセージが出力されます。 +.RE +.PP +\-fx +.RS 4 +スクリプトをJavaFXアプリケーションとして起動します。 +.RE +.PP +\-h, \-help +.RS 4 +オプションのリストとその説明を出力します。 +.RE +.PP +\-J\fIoption\fR +.RS 4 +指定した\fIjava\fR起動オプションをJVMに渡します。次の例で、対話型モードでNashornを呼び出して、JVMによって使用される最大メモリーを4 GBに設定する方法を示します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +>> \fBjjs \-J\-Xmx4g\fR +jjs> \fBjava\&.lang\&.Runtime\&.getRuntime()\&.maxMemory()\fR +3817799680 +jjs> +.fi +.if n \{\ +.RE +.\} +このオプションを繰り返し使用すると、複数の\fIjava\fRコマンド・オプションを渡すことができます。 +.RE +.PP +\-\-lazy\-compilation +.RS 4 +レイジー・コード生成戦略(つまり、スクリプト全体が一度にコンパイルされない)を有効にします。このオプションは試験的なものです。 +.RE +.PP +\-\-loader\-per\-compile +.RS 4 +コンパイルごとに新しいクラス・ローダーを作成します。デフォルトでは、このオプションは有効になっています。無効にするには\fI\-\-loader\-per\-compile=false\fRを指定します。 +.RE +.PP +\-\-log=\fIsubsystem\fR:\fIlevel\fR +.RS 4 +指定されたサブシステムに対して、特定のレベルでロギングを実行します。カンマで区切って複数のサブシステムのロギング・レベルを指定できます。次に例を示します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-\-log=fields:finest,codegen:info +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\-\-package=\fIname\fR +.RS 4 +生成されたクラス・ファイルを追加するパッケージを指定します。 +.RE +.PP +\-\-parse\-only +.RS 4 +コンパイルせずにコードを解析します。 +.RE +.PP +\-\-print\-ast +.RS 4 +抽象構文ツリーを出力します。 +.RE +.PP +\-\-print\-code +.RS 4 +バイトコードを出力します。 +.RE +.PP +\-\-print\-lower\-ast +.RS 4 +掘り下げた抽象構文ツリーを出力します。 +.RE +.PP +\-\-print\-lower\-parse +.RS 4 +掘り下げた解析ツリーを出力します。 +.RE +.PP +\-\-print\-no\-newline +.RS 4 +その他の\fI\-\-print*\fRオプションで強制的に1行で出力します。 +.RE +.PP +\-\-print\-parse +.RS 4 +解析ツリーを出力します。 +.RE +.PP +\-\-print\-symbols +.RS 4 +記号表を出力します。 +.RE +.PP +\-pcs, \-\-profile\-callsites +.RS 4 +呼び出しサイトのプロファイル・データをダンプします。 +.RE +.PP +\-scripting +.RS 4 +シェルのスクリプト機能を有効にします。 +.RE +.PP +\-\-stderr=\fIfilename\fR|\fIstream\fR|\fItty\fR +.RS 4 +標準エラー・ストリームを指定したファイル、ストリーム(たとえば\fIstdout\fR)に、またはテキスト端末にリダイレクトします。 +.RE +.PP +\-\-stdout=\fIfilename\fR|\fIstream\fR|\fItty\fR +.RS 4 +標準出力ストリームを指定したファイル、ストリーム(たとえば\fIstderr\fR)に、またはテキスト端末にリダイレクトします。 +.RE +.PP +\-strict +.RS 4 +標準(ECMAScript Edition 5\&.1)への準拠を強化するstrictモードを有効にし、これにより共通のコーディング・エラーを簡単に検出できるようになります。 +.RE +.PP +\-t=\fIzone\fR, \-timezone=\fIzone\fR +.RS 4 +スクリプトの実行に対し指定したタイムゾーンを設定します。OSで設定されたタイムゾーンをオーバーライドし、\fIDate\fRオブジェクトで使用されます。 +.RE +.PP +\-tcs=\fIparameter\fR, \-\-trace\-callsites=\fIparameter\fR +.RS 4 +呼出しサイトのトレースのモードを有効にします。使用可能なパラメータは、次のとおりです。 +.PP +miss +.RS 4 +呼出しサイトのミスをトレースします。 +.RE +.PP +enterexit +.RS 4 +呼出しサイトへの出入りをトレースします。 +.RE +.PP +objects +.RS 4 +オブジェクトのプロパティを出力します。 +.RE +.RE +.PP +\-\-verify\-code +.RS 4 +バイトコードを実行する前に検証します。 +.RE +.PP +\-v, \-version +.RS 4 +Nashornバージョン文字列を出力します。 +.RE +.PP +\-xhelp +.RS 4 +コマンドライン・オプションの拡張ヘルプを出力します。 +.RE +.SH "例" +.PP +\fBExample 1\fR, Nashornを使用したスクリプトの実行 +.RS 4 +.sp +.if n \{\ +.RS 4 +.\} +.nf +jjs script\&.js +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\fBExample 2\fR, 対話型モードでのNashornの実行 +.RS 4 +.sp +.if n \{\ +.RS 4 +.\} +.nf +>> \fBjjs\fR +jjs> \fBprintln("Hello, World!")\fR +Hello, World! +jjs> \fBquit()\fR +>> +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\fBExample 3\fR, Nashornへの引数の渡し +.RS 4 +.sp +.if n \{\ +.RS 4 +.\} +.nf +>> \fBjjs \-\- a b c\fR +jjs> \fBarguments\&.join(", ")\fR +a, b, c +jjs> +.fi +.if n \{\ +.RE +.\} +.RE +.SH "関連項目" +.PP +\fIjrunscript\fR +.br +'pl 8.5i +'bp diff --git a/jdk/src/linux/doc/man/ja/jmap.1 b/jdk/src/linux/doc/man/ja/jmap.1 index 15ea13f6f2e..cc465a08b4e 100644 --- a/jdk/src/linux/doc/man/ja/jmap.1 +++ b/jdk/src/linux/doc/man/ja/jmap.1 @@ -1,179 +1,209 @@ -." Copyright (c) 2004, 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. -." -.TH jmap 1 "07 May 2011" - -.LP -.SH "名前" -jmap \- メモリーマップ -.LP -.RS 3 -.TP 2 -o -形式 -.TP 2 -o -パラメータ -.TP 2 -o -説明 -.TP 2 -o -オプション -.TP 2 -o -関連項目 -.RE - -.LP -.SH "形式" -.LP +'\" t +.\" Copyright (c) 2004, 2013, Oracle and/or its affiliates. All rights reserved. +.\" Title: jmap +.\" Language: English +.\" Date: 2013年11月21日 +.\" SectDesc: トラブルシューティング・ツール +.\" Software: JDK 8 +.\" Arch: 汎用 +.\" +.\" 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. +.\" +.pl 99999 +.TH "jmap" "1" "2013年11月21日" "JDK 8" "トラブルシューティング・ツール" +.\" ----------------------------------------------------------------- +.\" * Define some portability stuff +.\" ----------------------------------------------------------------- +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.\" http://bugs.debian.org/507673 +.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" ----------------------------------------------------------------- +.\" * set default formatting +.\" ----------------------------------------------------------------- +.\" disable hyphenation +.nh +.\" disable justification (adjust text to left margin only) +.ad l +.\" ----------------------------------------------------------------- +.\" * MAIN CONTENT STARTS HERE * +.\" ----------------------------------------------------------------- +.SH "NAME" +jmap \- プロセスやコア・ファイルまたはリモート・デバッグ・サーバーの、共用オブジェクト・メモリー・マップまたはヒープ・メモリーの詳細を出力します。このコマンドは試験的なもので、サポートされていません。 +.SH "概要" +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -\fP\f3jmap\fP [ option ] pid -.fl -\f3jmap\fP [ option ] executable core -.fl -\f3jmap\fP [ option ] [server\-id@]remote\-hostname\-or\-IP -.fl +\fIjmap\fR [ \fIoptions\fR ] \fIpid\fR .fi - -.LP -.SH "パラメータ" -.LP -.RS 3 -.TP 3 -option -各オプションは互いに排他的です。オプションを使用する場合、コマンド名の直後に記述します。 -.TP 3 -pid -印刷するメモリーマップのプロセス ID。プロセスは Java プロセスである必要があります。マシン上で実行している Java プロセスの一覧を取得するには、jps(1) を使用します。 -.br -.TP 3 -executable -コアダンプの作成元の Java 実行可能ファイルです。 -.br -.TP 3 -core -印刷するメモリーマップのコアファイル。 -.br -.TP 3 -remote\-hostname\-or\-IP -リモートデバッグサーバー (jsadebugd(1) を参照) のホスト名または IP アドレスです。 -.br -.TP 3 -server\-id -複数のデバッグサーバーが同一のリモートホストで実行している場合の、オプション固有の ID です。 -.br +.if n \{\ +.RE +.\} +.sp +.if n \{\ +.RS 4 +.\} +.nf +\fIjmap\fR [ \fIoptions\fR ] \fIexecutable\fR \fIcore\fR +.fi +.if n \{\ +.RE +.\} +.sp +.if n \{\ +.RS 4 +.\} +.nf +\fIjmap\fR [ \fIoptions\fR ] [ \fIpid\fR ] \fIserver\-id\fR@ ] \fIremote\-hostname\-or\-IP\fR +.fi +.if n \{\ +.RE +.\} +.PP +\fIoptions\fR +.RS 4 +コマンドライン・オプション。オプションを参照してください。 +.RE +.PP +\fIpid\fR +.RS 4 +出力するメモリー・マップのプロセスID。プロセスはJavaプロセスである必要があります。マシン上で実行しているJavaプロセスの一覧を取得するには、jps(1)コマンドを使用します。 +.RE +.PP +\fI実行可能ファイル\fR +.RS 4 +コア・ダンプの作成元のJava実行可能ファイル。 +.RE +.PP +\fIコア\fR +.RS 4 +出力するメモリー・マップのコア・ファイル。 +.RE +.PP +\fIremote\-hostname\-or\-IP\fR +.RS 4 +リモート・デバッグ・サーバーの\fIホスト名\fRまたは\fIIP\fRアドレス。jsadebugd(1)を参照してください。 +.RE +.PP +\fIserver\-id\fR +.RS 4 +複数のデバッグ・サーバーが同一のリモート・ホストで実行している場合の、オプション固有のID。 .RE - -.LP .SH "説明" -.LP -.LP -\f3jmap\fP は、指定されたプロセスやコアファイルまたはリモートデバッグサーバーの、共用オブジェクトメモリーマップまたはヒープメモリーの詳細を印刷します。指定されたプロセスが 64 ビット VM 上で実行されている場合、\f2\-J\-d64\fP オプションを指定しなければならない場合があります。次に例を示します。 -.LP -.nf -\f3 -.fl -jmap \-J\-d64 \-heap pid -.fl -\fP -.fi - -.LP -.LP -\f3注: このユーティリティーはサポート対象外であり、将来の JDK のバージョンでは利用できなくなる可能性があります。dbgeng.dll が存在していない Windows システムでは、「Debugging Tools For Windows」をインストールしないとこれらのツールが正常に動作しません。また、 \fP\f4PATH\fP\f3 環境変数には、ターゲットプロセスによって使用される \fP\f4jvm.dll\fP\f3 の場所、またはクラッシュダンプファイルが生成された場所が含まれるようにしてください。\fP -.LP -.LP -\f3次に例を示します。 \fP\f4set PATH=<jdk>\\jre\\bin\\client;%PATH%\fP -.LP -.br - -.LP +.PP +\fIjmap\fRコマンドは、指定されたプロセスやコア・ファイルまたはリモート・デバッグ・サーバーの、共用オブジェクト・メモリー・マップまたはヒープ・メモリーの詳細を出力します。指定されたプロセスが64ビットJava仮想マシン(JVM)上で実行されている場合、\fI\-J\-d64\fRオプションを指定する必要がある場合があります。次に例を示します。\fIjmap\fR +\fI\-J\-d64 \-heap pid\fR。 +.PP +\fB注意:\fR +このユーティリティはサポート対象外であり、将来のJDKのリリースでは利用できなくなる可能性があります。\fIdbgeng\&.dll\fRファイルが存在していないWindowsシステムでは、Debugging Tools For Windowsをインストールしないとこれらのツールが正常に動作しません。\fIPATH\fR環境変数には、ターゲット・プロセスによって使用される\fIjvm\&.dll\fRの場所、またはクラッシュ・ダンプ・ファイルが生成された場所が含まれるようにしてください。次に例を示します。\fIset PATH=%JDK_HOME%\ejre\ebin\eclient;%PATH%\fR。 .SH "オプション" -.LP -.RS 3 -.TP 3 -<オプションなし> -オプションを使用しない場合、jmap は共用オブジェクトマッピングを印刷します。ターゲット VM にロードされた共用オブジェクトごとに、開始アドレス、マッピングのサイズ、および共用オブジェクトファイルのフルパスが印刷されます。これは、Solaris \f3pmap\fP ユーティリティーと類似しています。 -.br -.TP 3 -\-dump:[live,]format=b,file=<filename> -Java ヒープを hprof バイナリ形式で filename にダンプします。\f2live\fP サブオプションは省略可能です。これが指定された場合、ヒープ内で生存中のオブジェクトのみがダンプされます。ヒープダンプを参照するには、生成されたファイルを jhat(1) (Java Heap Analysis Tool) を使って読み取ります。 -.br -.TP 3 -\-finalizerinfo -ファイナライズを待っているオブジェクトに関する情報を出力します。 -.br -.TP 3 -\-heap -ヒープサマリーを印刷します。使用される GC アルゴリズム、ヒープ構成、および世代ごとのヒープ使用率が印刷されます。 -.br -.TP 3 -\-histo[:live] -ヒープのヒストグラムを印刷します。Java クラスごとに、オブジェクトの数、バイト単位でのメモリーサイズ、および完全修飾クラス名が印刷されます。VM 内部クラス名は、「*」の接頭辞を付けて印刷されます。\f2live\fP サブオプションが指定された場合、生存中のオブジェクトのみがカウントされます。 -.br -.TP 3 -\-permstat -Permanent 世代の Java ヒープの、クラスローダー関連の統計データを印刷します。クラスローダーごとに、その名前、状態、アドレス、親クラスローダー、およびクラスローダーがロードしたクラスの数とサイズが印刷されます。さらに、intern された文字列の数とサイズも出力されます。 -.br -.TP 3 -\-F -強制 (Force)。pid が応答しない場合に、jmap \-dump または jmap \-histo オプションとともに使用します。このモードでは、\f2live\fP サブオプションはサポートされません。 -.br -.TP 3 -\-h -ヘルプメッセージを印刷します。 -.br -.br -.TP 3 -\-help -ヘルプメッセージを印刷します。 -.br -.br -.TP 3 -\-J<flag> -jmap が実行されている Java 仮想マシンに <flag> を渡します。 -.br +.PP +<オプションなし> +.RS 4 +オプションを使用しない場合、\fIjmap\fRコマンドは共用オブジェクト・マッピングを出力します。ターゲットJVMにロードされた共用オブジェクトごとに、開始アドレス、マッピングのサイズおよび共用オブジェクト・ファイルのフルパスが出力されます。この動作は、Oracle Solaris +\fIpmap\fRユーティリティと類似しています。 +.RE +.PP +\-dump:[live,] format=b, file=\fIfilename\fR +.RS 4 +Javaヒープを\fIhprof\fRバイナリ形式で\fIfilename\fRにダンプします。\fIlive\fRサブオプションはオプションですが、指定した場合、ヒープ内のアクティブなオブジェクトのみがダンプされます。ヒープ・ダンプを参照するには、jhat(1)コマンドを使用して生成されたファイルを読み取ります。 +.RE +.PP +\-finalizerinfo +.RS 4 +ファイナライズを待っているオブジェクトに関する情報を出力します。 +.RE +.PP +\-heap +.RS 4 +使用されているガベージ・コレクションのヒープ・サマリー、ヘッダー構成、および世代関連のヒープ使用状況を出力します。さらに、internされた文字列の数とサイズも出力されます。 +.RE +.PP +\-histo[:live] +.RS 4 +ヒープのヒストグラムを出力します。Javaクラスごとに、オブジェクトの数、バイト単位でのメモリー・サイズ、および完全修飾クラス名が出力されます。JVMの内部クラス名はアスタリスク(*)の接頭辞を付けて出力されます。\fIlive\fRサブオプションが指定された場合、アクティブなオブジェクトのみがカウントされます。 +.RE +.PP +\-clstats +.RS 4 +Javaヒープの、クラス・ローダー関連の統計データを出力します。クラス・ローダーごとに、その名前、状態、アドレス、親クラス・ローダー、およびクラス・ローダーがロードしたクラスの数とサイズが出力されます。 +.RE +.PP +\-F +.RS 4 +強制します。PIDが応答しないときに、このオプションを\fIjmap \-dump\fRまたは\fIjmap \-histo\fRオプションとともに使用します。このモードでは、\fIlive\fRサブオプションはサポートされません。 +.RE +.PP +\-h +.RS 4 +ヘルプ・メッセージが出力されます。 +.RE +.PP +\-help +.RS 4 +ヘルプ・メッセージが出力されます。 +.RE +.PP +\-J\fIflag\fR +.RS 4 +\fIjmap\fRコマンドを実行しているJava仮想マシンに\fIflag\fRを渡します。 .RE - -.LP .SH "関連項目" -.LP -.RS 3 -.TP 2 -o -pmap (1) -.TP 2 -o -jhat(1) -.TP 2 -o -jps(1) -.TP 2 -o -jsadebugd(1) +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +jhat(1) .RE - -.LP - +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +jps(1) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +jsadebugd(1) +.RE +.br +'pl 8.5i +'bp diff --git a/jdk/src/linux/doc/man/ja/jps.1 b/jdk/src/linux/doc/man/ja/jps.1 index bcfb9bed82e..d6a7ae886f9 100644 --- a/jdk/src/linux/doc/man/ja/jps.1 +++ b/jdk/src/linux/doc/man/ja/jps.1 @@ -1,278 +1,263 @@ -." Copyright (c) 2004, 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. -." -.TH jps 1 "07 May 2011" - -.LP -.SH "名前" -jps \- Java 仮想マシンプロセスステータスツール -.LP -.RS 3 -.TP 2 -o -形式 -.TP 2 -o -パラメータ -.TP 2 -o -説明 -.TP 2 -o -オプション -.TP 2 -o -ホスト識別子 -.TP 2 -o -出力形式 -.TP 2 -o -例 -.TP 2 -o -関連項目 -.RE - -.LP -.SH "形式" -.LP +'\" t +.\" Copyright (c) 2004, 2013, Oracle and/or its affiliates. All rights reserved. +.\" Title: jps +.\" Language: English +.\" Date: 2013年11月21日 +.\" SectDesc: モニタリング・ツール +.\" Software: JDK 8 +.\" Arch: 汎用 +.\" +.\" 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. +.\" +.pl 99999 +.TH "jps" "1" "2013年11月21日" "JDK 8" "モニタリング・ツール" +.\" ----------------------------------------------------------------- +.\" * Define some portability stuff +.\" ----------------------------------------------------------------- +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.\" http://bugs.debian.org/507673 +.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" ----------------------------------------------------------------- +.\" * set default formatting +.\" ----------------------------------------------------------------- +.\" disable hyphenation +.nh +.\" disable justification (adjust text to left margin only) +.ad l +.\" ----------------------------------------------------------------- +.\" * MAIN CONTENT STARTS HERE * +.\" ----------------------------------------------------------------- +.SH "NAME" +jps \- ターゲット・システム上で計測されたJava仮想マシン(JVM)を一覧表示します。このコマンドは試験的なもので、サポートされていません。 +.SH "概要" +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -\fP\f3jps\fP [ \f2options\fP ] [ \f2hostid\fP ] -.br - -.fl +\fIjps\fR [ \fIoptions\fR ] [ \fIhostid\fR ] .fi - -.LP -.SH "パラメータ" -.LP -.RS 3 -.TP 3 -options -コマンド行オプション。 -.TP 3 -hostid -プロセスレポートを生成するホストのホスト識別子。\f2hostid\fP には、通信プロトコル、ポート番号、実装に固有な他のデータを指定したオプションコンポーネントを含めることができます。 +.if n \{\ .RE - -.LP -.SH " 説明" -.LP -.LP -\f3jps\fP ツールは、ターゲットシステム上で計測された HotSpot Java 仮想マシン (JVM) を一覧表示します。このツールで表示できるレポート情報は、アクセス権を持った JVM に関するものに限定されます。 -.LP -.LP -\f2hostid\fP を指定せずに \f3jps\fP を実行した場合、ローカルホストで計測された JVM が検索されます。\f2hostid\fP を指定して起動した場合、指定されたプロトコルとポートを使用して、指定されたホスト上の JVM を検索します。\f3jstatd\fP プロセスがターゲットホスト上で実行されていると想定されます。 -.LP -.LP -\f3jps\fP コマンドは、ターゲットシステムで計測された各 JVM について、ローカル VM 識別子、つまり \f2lvmid\fP をレポートします。\f3lvmid\fP は、必須ではありませんが、一般的には JVM プロセスに対するオペレーティングシステムのプロセス識別子です。オプションを指定しない場合、\f3jps\fP によって、各 Java アプリケーションの \f2lvmid\fP が一覧表示され、それぞれにアプリケーションのクラス名または JAR ファイル名が簡単な形式で示されます。この簡単な形式のクラス名と JAR ファイル名では、クラスのパッケージ情報または JAR ファイルパス情報が省略されています。 -.LP -.LP -\f3jps\fP コマンドは、\f3Java\fP 起動ツールを使用して \f2main\fP メソッドに渡されるクラス名と引数を検索します。独自の起動ツールを使用してターゲット JVM を起動した場合は、 \f2main\fP メソッドに渡されるクラス名 (または JAR ファイル名) と引数は利用できません。この場合、\f3jps\fP コマンドは、main メソッドへ渡されるクラス名 (または JAR ファイル名) と引数に対して、文字列 \f2Unknown\fP を出力します。 -.LP -.LP -\f3jps\fP コマンドで生成される JVM のリストは、このコマンドを実行する主体に与えられたアクセス権に基づき、制限される場合があります。このコマンドは、オペレーティングシステム独自のアクセス制御機構による決定に基づいて、主体にアクセス権が与えられている JVM だけを一覧表示します。 -.LP -.LP -\f3注:\fP このユーティリティーはサポート対象外であり、将来の JDK のバージョンでは利用できなくなる可能性があります。現在、Windows 98 および Windows Me プラットフォームでは使用できません。 -.LP +.\} +.PP +\fIoptions\fR +.RS 4 +コマンドライン・オプション。オプションを参照してください。 +.RE +.PP +\fIhostid\fR +.RS 4 +プロセス・レポートを生成するホストの識別子。\fIhostid\fRには、通信プロトコル、ポート番号、実装に固有な他のデータを指定したオプション・コンポーネントを含めることができます。ホスト識別子を参照してください。 +.RE +.SH "説明" +.PP +\fIjps\fRコマンドは、ターゲット・システム上で計測されたJava HotSpot VMを一覧表示します。このコマンドで表示できるレポート情報は、アクセス権を持ったJVMに関するものに限定されます。 +.PP +\fIhostid\fRを指定せずに\fIjps\fRコマンドを実行した場合、ローカル・ホストで計測されたJVMが検索されます。\fIhostid\fRを指定して起動した場合、指定されたプロトコルとポートを使用して、指定されたホスト上のJVMを検索します。\fIjstatd\fRプロセスがターゲット・ホスト上で実行されていると想定されます。 +.PP +\fIjps\fRコマンドは、ターゲット・システムで計測された各JVMについて、ローカルVM識別子、つまり\fIlvmid\fRをレポートします。\fIlvmid\fRは、一般的にはJVMプロセスに対するオペレーティング・システムのプロセス識別子ですが、必ずしもそうであるとは限りません。オプションを指定しない場合、\fIjps\fRによって、各Javaアプリケーションの\fIlvmid\fRが一覧表示され、それぞれにアプリケーションのクラス名またはJARファイル名が簡単な形式で示されます。この簡単な形式のクラス名とJARファイル名では、クラスのパッケージ情報またはJARファイル・パス情報が省略されています。 +.PP +\fIjps\fRコマンドは、Java起動ツールを使用してmainメソッドに渡されるクラス名と引数を検索します。独自の起動ツールを使用してターゲットJVMを起動した場合は、\fImain\fRメソッドに渡されるクラス名またはJARファイル名と引数は利用できません。この場合、\fIjps\fRコマンドは、\fImain\fRメソッドに渡されるクラス名またはJARファイル名と引数に対して、文字列\fIUnknown\fRを出力します。 +.PP +\fIjps\fRコマンドで生成されるJVMのリストは、このコマンドを実行するプリンシパルに与えられたアクセス権に基づき、制限される場合があります。このコマンドは、オペレーティング・システム独自のアクセス制御機構による決定に基づいて、プリンシパルにアクセス権が与えられているJVMのみを一覧表示します。 .SH "オプション" -.LP -.LP -\f3jps\fP コマンドでは、コマンドの出力を変更するオプションが多数サポートされています。将来、これらのオプションは、変更または廃止される可能性があります。 -.LP -.RS 3 -.TP 3 -\-q -クラス名、JAR ファイル名、および \f2main\fP メソッドに渡された引数の出力を抑制し、ローカル VM 識別子の一覧のみを生成します。 -.TP 3 -\-m -main メソッドに渡される引数を出力します。この出力は、組み込まれている JVM に対して null になることもあります。 -.TP 3 -\-l -アプリケーションの主要なクラスのフルパッケージ名、またはアプリケーションの JAR ファイルへのフルパス名を出力します。 -.TP 3 -\-v -JVM に渡される引数を出力します。 -.TP 3 -\-V -フラグファイル (.hotspotrc ファイルまたは \-XX:Flags=<\f2filename\fP> の引数で指定されたファイル) を通じて JVM に渡される引数を出力します。 -.TP 3 -\-Joption -\f3jps\fP が呼び出す \f3java\fP 起動ツールに、\f2option\fP を渡します。たとえば、\f3\-J\-Xms48m\fP と指定すると、スタートアップメモリーは 48M バイトに設定されます。\f3\-J\fP を使って、Java で記述されたアプリケーションを実行する背後の VM にオプション渡すことは、よく行われています。 +.PP +\fIjps\fRコマンドでは、コマンドの出力を変更するオプションが多数サポートされています。将来、これらのオプションは、変更または廃止される可能性があります。 +.PP +\-q +.RS 4 +クラス名、JARファイル名、および\fImain\fRメソッドに渡された引数の出力を抑制し、ローカルVM識別子の一覧のみを生成します。 .RE - -.LP -.SS -ホスト識別子 -.LP -.LP -ホスト識別子、つまり \f2hostid\fP は、ターゲットシステムを示す文字列です。\f2hostid\fP 文字列の構文の大部分は、URI の構文に対応しています。 -.LP -.nf -\f3 -.fl -[\fP\f4protocol\fP\f3:][[//]\fP\f4hostname\fP\f3][:\fP\f4port\fP\f3][/\fP\f4servername\fP\f3]\fP -.br -\f3 -.fl -\fP -.fi - -.LP -.RS 3 -.TP 3 -protocol -通信プロトコルです。\f2protocol\fP が省略され、\f2hostname\fP が指定されていない場合、デフォルトのプロトコルが、プラットフォーム固有の最適化されたローカルプロトコルになります。\f2protocol\fP が省略され、\f2hostname\fP が指定されている場合は、デフォルトプロトコルは \f3rmi\fP になります。 -.TP 3 -hostname -ターゲットホストを示すホスト名または IP アドレスです。\f2hostname\fP が省略されている場合は、ターゲットホストはローカルホストになります。 -.TP 3 -port -リモートサーバーと通信するためのデフォルトポートです。\f2hostname\fP が省略されているか、\f2protocol\fP で最適化されたローカルプロトコルが指定されている場合、\f2port\fP は無視されます。そうでなければ、\f2port\fP パラメータの扱いは、実装によって異なります。デフォルトの \f3rmi\fP プロトコルの場合、\f2port\fP は、リモートホスト上の rmiregistry のポート番号を示します。\f2port\fP が省略され、\f2protocol\fP で \f3rmi\fP が指定されている場合、デフォルトの rmiregistry ポート (1099) が使用されます。 -.TP 3 -servername -このパラメータの扱いは、実装によって異なります。最適化されたローカルプロトコルの場合、このフィールドは無視されます。\f3rmi\fP プロトコルの場合、このパラメータは、リモートホスト上の RMI リモートオブジェクトの名前を示す文字列になります。jstatd(1) コマンドについては、\f3\-n\fP オプションを参照してください。 +.PP +\-m +.RS 4 +\fImain\fRメソッドに渡される引数を出力します。この出力は、組み込まれているJVMに対して\fInull\fRになることもあります。 .RE - -.LP -.SH "出力形式" -.LP -.LP -\f3jps\fP コマンドの出力は、次のパターンに従います。 -.LP +.PP +\-l +.RS 4 +アプリケーションの\fImain\fRクラスのフル・パッケージ名、またはアプリケーションのJARファイルへのフルパス名を出力します。 +.RE +.PP +\-v +.RS 4 +JVMに渡される引数を表示します。 +.RE +.PP +\-V +.RS 4 +クラス名、JARファイル名、およびmaiメソッドに渡された引数の出力を抑制し、ローカルVM識別子の一覧のみを生成します。 +.RE +.PP +\-J\fIoption\fR +.RS 4 +JVMに\fIoption\fRを渡します。optionには、Javaアプリケーション起動ツールのリファレンス・ページに記載されている\fIオプション\fRを1つ指定します。たとえば、\fI\-J\-Xms48m\fRと指定すると、スタートアップ・メモリーは48MBに設定されます。java(1)を参照してください。 +.RE +.SH "ホスト識別子" +.PP +ホスト識別子、つまり\fIhostid\fRは、ターゲット・システムを示す文字列です。\fIhostid\fR文字列の構文は、URIの構文に対応しています。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -\fP\f4lvmid\fP\f3 [ [ \fP\f4classname\fP\f3 | \fP\f4JARfilename\fP\f3 | "Unknown"] [ \fP\f4arg\fP\f3* ] [ \fP\f4jvmarg\fP\f3* ] ]\fP -.br -\f3 -.fl -\fP +[protocol:][[//]hostname][:port][/servername] .fi - -.LP -.LP -すべての出力トークンは空白で区切ります。\f2arg\fP の中で空白を使用すると、実際の定位置パラメータに引数をマッピングしようとするときに、あいまいになります。 -.br -.br -\f3注\fP: 将来のリリースでこの形式は変更される可能性があるため、\f3jps\fP の出力を解析するスクリプトは作成しないことをお勧めします。\f3jps\fP 出力を解析するスクリプトを作成すると、このツールの将来のリリースで、作成したスクリプトを変更する必要が予測されます。 -.br - -.LP +.if n \{\ +.RE +.\} +.PP +\fIprotocol\fR +.RS 4 +通信プロトコルです。\fIprotocol\fRが省略され、\fIhostname\fRが指定されていない場合、デフォルトのプロトコルが、プラットフォーム固有の最適化されたローカル・プロトコルになります。プロトコルが省略され、ホスト名が指定されている場合は、デフォルト・プロトコルは\fIrmi\fRになります。 +.RE +.PP +hostname +.RS 4 +ターゲット・ホストを示すホスト名またはIPアドレスです。\fIhostname\fRパラメータが省略されている場合は、ターゲット・ホストはローカル・ホストになります。 +.RE +.PP +port +.RS 4 +リモート・サーバーと通信するためのデフォルト・ポートです。\fIhostname\fRパラメータが省略されているか、\fIprotocol\fRパラメータが、最適化されたローカル・プロトコルを指定している場合、\fIport\fRパラメータは無視されます。それ以外の場合、\fIport\fRパラメータの扱いは、実装によって異なります。デフォルトの +\fIrmi\fRプロトコルの場合、\fIport\fRパラメータは、リモート・ホスト上のrmiregistryのポート番号を示します。\fIport\fRパラメータが省略されているか、\fIprotocol\fRパラメータが\fIrmi\fRを示している場合、デフォルトのrmiregistryポート(1099)が使用されます。 +.RE +.PP +servername +.RS 4 +このパラメータの扱いは、実装によって異なります。最適化されたローカル・プロトコルの場合、このフィールドは無視されます。\fIrmi\fRプロトコルの場合、このパラメータは、リモート・ホスト上のRMIリモート・オブジェクトの名前を示す文字列になります。詳細は、\fIjstatd\fRコマンドの\fI\-n\fRオプションを参照してください。 +.RE +.SH "出力フォーマット" +.PP +\fIjps\fRコマンドの出力は、次のパターンに従います。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +lvmid [ [ classname | JARfilename | "Unknown"] [ arg* ] [ jvmarg* ] ] +.fi +.if n \{\ +.RE +.\} +.PP +すべての出力トークンは空白文字で区切られます。\fIarg\fR値の中で空白を使用すると、実際の定位置パラメータに引数をマッピングしようとするときに、あいまいになります。 +.PP +\fB注意:\fR +将来のリリースでこの形式は変更される可能性があるため、\fIjps\fRの出力を解析するスクリプトは作成しないことをお薦めします。\fIjps\fR出力を解析するスクリプトを作成すると、このツールの将来のリリースで、作成したスクリプトの変更が必要になる可能性があります。 .SH "例" -.LP -.LP -この節では、\f3jps\fP コマンドの例を示します。 -.LP -.LP -ローカルホスト上で計測された JVM を一覧表示する場合: -.LP +.PP +この項では、\fIjps\fRコマンドの例を示します。 +.PP +ローカル・ホスト上で計測されたJVMを一覧表示する場合: +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -\fP\f3jps\fP -.br - -.fl -18027 Java2Demo.JAR -.br - -.fl +jps +18027 Java2Demo\&.JAR 18032 jps -.br - -.fl 18005 jstat -.br - -.fl .fi - -.LP -.LP -リモートホスト上で計測された JVM を一覧表示する場合: -.LP -.LP -この例では、\f3jstat\fP サーバーと、その内部 RMI レジストリまたは別の外部 \f3rmiregistry\fP プロセスのいずれかとが、リモートホストのデフォルトポート (ポート 1099) で実行されていると想定しています。また、ローカルホストが、リモートホストへの有効なアクセス権を持っていることも想定しています。この例には、\f2\-l\fP オプションも含まれ、クラス名または JAR ファイル名を詳細な形式で出力します。 -.LP -.nf -\f3 -.fl -\fP\f3jps \-l remote.domain\fP -.br - -.fl -3002 /opt/jdk1.7.0/demo/jfc/Java2D/Java2Demo.JAR -.br - -.fl -2857 sun.tools.jstatd.jstatd -.br - -.fl -.fi - -.LP -.LP -RMI レジストリにデフォルトではないポートを使用して、リモートホスト上で計測された JVM を一覧表示する場合: -.LP -.LP -この例では、内部 RMI レジストリがポート 2002 にバインドされた \f3jstatd\fP サーバーが、リモートホスト上で実行していると想定しています。また、\f2\-m\fP オプションを使用して、一覧表示されたそれぞれの Java アプリケーションの \f2main\fP メソッドに渡される引数を組み込んでいます。 -.LP -.nf -\f3 -.fl -\fP\f3jps \-m remote.domain:2002\fP -.br - -.fl -3002 /opt/jdk1.7.0/demo/jfc/Java2D/Java2Demo.JAR -.br - -.fl -3102 sun.tools.jstatd.jstatd \-p 2002 -.fl -.fi - -.LP -.SH "関連項目" -.LP -.RS 3 -.TP 2 -o -「java(1) \- Java アプリケーション起動ツール」 -.TP 2 -o -「jstat(1) \- Java 仮想マシン統計データ監視ツール」 -.TP 2 -o -「jstatd(1) \- 仮想マシン jstat デーモン」 -.TP 2 -o -「rmiregistry(1) \- Java リモートオブジェクトレジストリ」 +.if n \{\ .RE - -.LP - +.\} +.PP +次の例では、リモート・ホスト上で計測されたJVMを一覧表示します。この例では、\fIjstat\fRサーバーと、その内部RMIレジストリまたは別の外部rmiregistryプロセスのいずれかが、リモート・ホストのデフォルト・ポート(ポート1099)で実行されていると想定しています。また、ローカル・ホストが、リモート・ホストへの有効なアクセス権を持っていることも想定しています。この例には、\fI\-l\fRオプションも含まれ、クラス名またはJARファイル名を詳細な形式で出力します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +jps \-l remote\&.domain +3002 /opt/jdk1\&.7\&.0/demo/jfc/Java2D/Java2Demo\&.JAR +2857 sun\&.tools\&.jstatd\&.jstatd +.fi +.if n \{\ +.RE +.\} +.PP +次の例では、RMIレジストリにデフォルトではないポートを使用して、リモート・ホスト上で計測されたJVMを一覧表示します。この例では、内部RMIレジストリがポート2002にバインドされた\fIjstatd\fRサーバーが、リモート・ホスト上で実行されていると想定しています。また、\fI\-m\fRオプションを使用して、一覧表示されたそれぞれのJavaアプリケーションの\fImain\fRメソッドに渡される引数を組み込んでいます。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +jps \-m remote\&.domain:2002 +3002 /opt/jdk1\&.7\&.0/demo/jfc/Java2D/Java2Demo\&.JAR +3102 sun\&.tools\&.jstatd\&.jstatd \-p 2002 +.fi +.if n \{\ +.RE +.\} +.SH "関連項目" +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +java(1) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +jstat(1) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +jstatd(1) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +rmiregistry(1) +.RE +.br +'pl 8.5i +'bp diff --git a/jdk/src/linux/doc/man/ja/jrunscript.1 b/jdk/src/linux/doc/man/ja/jrunscript.1 index 3f83aa5c428..f53c29f59c7 100644 --- a/jdk/src/linux/doc/man/ja/jrunscript.1 +++ b/jdk/src/linux/doc/man/ja/jrunscript.1 @@ -1,208 +1,206 @@ -." Copyright (c) 2006, 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. -." -.TH jrunscript 1 "07 May 2011" - -.LP -.SH "名前" -jrunscript \- コマンド行スクリプトシェル -.LP -.RS 3 -.TP 2 -o -形式 -.TP 2 -o -パラメータ -.TP 2 -o -説明 -.TP 2 -o -オプション -.TP 2 -o -引数 -.TP 2 -o -例 -.TP 2 -o -関連項目 -.RE - -.LP -.SH "形式" -.LP +'\" t +.\" Copyright (c) 2006, 2013, Oracle and/or its affiliates. All rights reserved. +.\" Title: jrunscript +.\" Language: English +.\" Date: 2013年11月21日 +.\" SectDesc: スクリプティング・ツール +.\" Software: JDK 8 +.\" Arch: 汎用 +.\" +.\" 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. +.\" +.pl 99999 +.TH "jrunscript" "1" "2013年11月21日" "JDK 8" "スクリプティング・ツール" +.\" ----------------------------------------------------------------- +.\" * Define some portability stuff +.\" ----------------------------------------------------------------- +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.\" http://bugs.debian.org/507673 +.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" ----------------------------------------------------------------- +.\" * set default formatting +.\" ----------------------------------------------------------------- +.\" disable hyphenation +.nh +.\" disable justification (adjust text to left margin only) +.ad l +.\" ----------------------------------------------------------------- +.\" * MAIN CONTENT STARTS HERE * +.\" ----------------------------------------------------------------- +.SH "NAME" +jrunscript \- 対話型モードとバッチ・モードをサポートするコマンドライン・スクリプト・シェルを実行します。このコマンドは試験的なもので、サポートされていません。 +.SH "概要" +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -\fP\f3jrunscript\fP [ \f2options\fP ] [ arguments... ] -.fl +\fIjrunscript\fR [\fIoptions\fR] [\fIarguments\fR] .fi - -.LP -.SH "パラメータ" -.LP -.RS 3 -.TP 3 -options -オプションを使用する場合、コマンド名の直後に記述してください。 -.TP 3 -arguments -引数を使用する場合、オプションまたはコマンド名の直後に記述してください。 +.if n \{\ .RE - -.LP -.SH " 説明" -.LP -.LP -\f3jrunscript\fP はコマンド行スクリプトシェルです。jrunscript は、対話型 (読み取り \- 評価 \- 出力) モードとバッチ (\-f オプション) モードの両方のスクリプト実行をサポートします。これはスクリプト言語に依存しないシェルです。デフォルトの使用言語は JavaScript ですが、\-l オプションを使えばほかの言語も指定できます。jrunscript は、Java とスクリプト言語との通信によって「探求的なプログラミング」スタイルをサポートします。 -.LP -.LP -\f3注:\fP このツールは\f3試験的なもの\fPであり、将来の JDK のバージョンでは\f3利用できなくなる\fP可能性があります。 -.LP +.\} +.PP +\fIoptions\fR +.RS 4 +コマンドライン・オプション。オプションを参照してください。 +.RE +.PP +\fIarguments\fR +.RS 4 +引数を使用する場合、オプションまたはコマンド名の直後に記述してください。引数を参照してください。 +.RE +.SH "説明" +.PP +\fIjrunscript\fRコマンドは、言語に依存しないコマンドライン・スクリプト・シェルです。\fIjrunscript\fRは、対話型(read\-eval\-print)モードとバッチ(\fI\-f\fRオプション)・モードの両方のスクリプト実行をサポートします。デフォルトの使用言語はJavaScriptですが、\fI\-l\fRオプションを使用すれば他の言語も指定できます。\fIjrunscript\fRコマンドは、Javaとスクリプト言語との通信を使用して探求的なプログラミング・スタイルをサポートします。 .SH "オプション" -.LP -.RS 3 -.TP 3 -\-classpath path -スクリプトからのアクセス対象となるユーザーの .class ファイルの検索場所を指定します。 -.TP 3 -\-cp path -\-classpath \f2path\fP と同義です。 -.TP 3 -\-Dname=value -Java のシステムプロパティーを設定します。 -.TP 3 -\-J<flag> -jrunscript が実行されている Java 仮想マシンに <flag> を渡します。 -.TP 3 -\-l language -指定されたスクリプト言語を使用します。デフォルトでは JavaScript が使用されます。ほかのスクリプト言語を使用するには、対応するスクリプトエンジンの JAR ファイルも指定する必要があります。それには、\-cp、\-classpath のいずれかのオプションを使用します。 -.TP 3 -\-e script -指定されたスクリプトを評価します。このオプションを使えば、コマンド行にすべてが指定された「1 行」スクリプトを実行できます。 -.TP 3 -\-encoding encoding -スクリプトファイルの読み取り時に使用する文字エンコーディングを指定します。 -.TP 3 -\-f script\-file -指定されたスクリプトファイルを評価します (バッチモード)。 -.TP 3 -\-f \- -標準入力からスクリプトを読み取り、それを評価します (対話型モード)。 -.TP 3 -\-help\ -ヘルプメッセージを出力して終了します。 -.TP 3 -\-?\ -ヘルプメッセージを出力して終了します。 -.TP 3 -\-q\ -利用可能なすべてのスクリプトエンジンを一覧表示したあと、終了します。 +.PP +\-classpath \fIpath\fR +.RS 4 +スクリプトがアクセスする必要のあるクラス・ファイルの場所を示します。 +.RE +.PP +\-cp \fIpath\fR +.RS 4 +\fI\-classpath\fR +\fIpath\fRと同じです。 +.RE +.PP +\-D\fIname\fR=\fIvalue\fR +.RS 4 +Javaのシステム・プロパティを設定します。 +.RE +.PP +\-J\fIflag\fR +.RS 4 +\fIflag\fRを、\fIjrunscript\fRコマンドが実行されているJava仮想マシンに直接渡します。 +.RE +.PP +\-I \fIlanguage\fR +.RS 4 +指定されたスクリプト言語を使用します。デフォルトではJavaScriptが使用されます。他のスクリプト言語を使用するには、\fI\-cp\fRまたは\fI\-classpath\fRオプションを使用して、対応するスクリプト・エンジンのJARファイルを指定する必要があります。 +.RE +.PP +\-e \fIscript\fR +.RS 4 +指定されたスクリプトを評価します。このオプションを使用すれば、コマンドラインにすべてが指定された1行スクリプトを実行できます。 +.RE +.PP +\-encoding \fIencoding\fR +.RS 4 +スクリプト・ファイルの読取り時に使用する文字エンコーディングを指定します。 +.RE +.PP +\-f \fIscript\-file\fR +.RS 4 +指定されたスクリプト・ファイル(バッチ・モード)を評価します。 +.RE +.PP +\-f \- +.RS 4 +標準入力からスクリプトを読み取り、それを評価します(対話型モード)。 +.RE +.PP +\-help +.RS 4 +ヘルプ・メッセージを表示して終了します。 +.RE +.PP +\-? +.RS 4 +ヘルプ・メッセージを表示して終了します。 +.RE +.PP +\-q +.RS 4 +利用可能なすべてのスクリプト・エンジンを一覧表示したあと、終了します。 .RE - -.LP .SH "引数" -.LP -.LP -[arguments...] が存在していて、かつ \f3\-e\fP、\f3\-f\fP のいずれのオプションも使用されなかった場合、最初の引数がスクリプトファイルとなり、他の引数が存在する場合はスクリプト引数として渡されます。[arguments..] と、\f3\-e\fP または \f3\-f\fP が使用されている場合、すべての [arguments..] がスクリプト引数として渡されます。[arguments..]、\f3\-e\fP、\f3\-f\fP がどれも存在しなかった場合は、対話型モードが使用されます。スクリプトからスクリプト引数を使用するには、「arguments」という名前の String 配列型のエンジン変数を使用します。 -.LP +.PP +argumentsが存在していて、かつ\fI\-e\fR、\fI\-f\fRのいずれのオプションも使用されなかった場合、最初の引数がスクリプト・ファイルとなり、他の引数が存在する場合はスクリプトに渡されます。argumentsと、\fI\-e\fRまたは\fI\-f\fRオプションが使用されている場合、すべてのargumentsがスクリプトに渡されます。arguments、\fI\-e\fR、\fI\-f\fRがどれも存在しなかった場合は、対話型モードが使用されます。スクリプトからスクリプト引数を使用するには、\fIarguments\fRという名前の\fIString\fR配列型のエンジン変数を使用します。 .SH "例" -.LP -.SS -インラインスクリプトの実行 -.LP +.SS "インライン・スクリプトの実行" +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -jrunscript \-e "print('hello world')" -.fl -jrunscript \-e "cat('http://java.sun.com')" -.fl -\fP +jrunscript \-e "print(\*(Aqhello world\*(Aq)" +jrunscript \-e "cat(\*(Aqhttp://www\&.example\&.com\*(Aq)" .fi - -.LP -.SS -指定された言語を使用し、指定されたスクリプトファイルを評価する -.LP +.if n \{\ +.RE +.\} +.SS "指定された言語の使用およびスクリプト・ファイルの評価" +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -jrunscript \-l js \-f test.js -.fl -\fP +jrunscript \-l js \-f test\&.js .fi - -.LP -.SS -対話型モード -.LP +.if n \{\ +.RE +.\} +.SS "対話型モード" +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl jrunscript -.fl -js> print('Hello World\\n'); -.fl +js> print(\*(AqHello World\en\*(Aq); Hello World -.fl js> 34 + 55 -.fl -89.0 -.fl -js> t = new java.lang.Thread(function() { print('Hello World\\n'); }) -.fl +89\&.0 +js> t = new java\&.lang\&.Thread(function() { print(\*(AqHello World\en\*(Aq); }) Thread[Thread\-0,5,main] -.fl -js> t.start() -.fl +js> t\&.start() js> Hello World -.fl - -.fl -js> -.fl -\fP -.fi - -.LP -.SS -スクリプト引数を指定してスクリプトファイルを実行する -.LP -.nf -\f3 -.fl -jrunscript test.js arg1 arg2 arg3 -.fl -\fP -.fi - -.LP -test.js が実行対象となるスクリプトファイルであり、arg1、arg2、および arg3 はスクリプト引数としてスクリプトに渡されます。スクリプトは「arguments」配列を使ってこれらにアクセスできます。 -.SH "関連項目" -.LP -.LP -JavaScript が使用される場合、jrunscript は、最初のユーザー定義スクリプトを評価する前に、いくつかの組み込み関数や組み込みオブジェクトを初期化します。これらの JavaScript 組み込み機能については、jsdocs を参照してください。 -.LP +js> +.fi +.if n \{\ +.RE +.\} +.SS "スクリプト引数を指定したスクリプト・ファイルの実行" +.PP +test\&.jsファイルはスクリプト・ファイルです。\fIarg1\fR、\fIarg2\fRおよび\fIarg3\fRの各引数がスクリプトに渡されます。スクリプトはarguments配列を使用してこれらの引数にアクセスできます。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +jrunscript test\&.js arg1 arg2 arg3 +.fi +.if n \{\ +.RE +.\} +.SH "関連項目" +.PP +JavaScriptが使用される場合、ユーザー定義スクリプトを評価する前に、\fIjrunscript\fRコマンドはいくつかの組込み関数や組込みオブジェクトを初期化します。これらのJavaScriptの組込みについては、http://code\&.google\&.com/p/jsdoc\-toolkit/にある +JsDoc\-Toolkitを参照してください。 +.br +'pl 8.5i +'bp diff --git a/jdk/src/linux/doc/man/ja/jsadebugd.1 b/jdk/src/linux/doc/man/ja/jsadebugd.1 index 077543a2367..0425f1af70a 100644 --- a/jdk/src/linux/doc/man/ja/jsadebugd.1 +++ b/jdk/src/linux/doc/man/ja/jsadebugd.1 @@ -1,142 +1,171 @@ -." Copyright (c) 2004, 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. -." -.TH jsadebugd 1 "07 May 2011" - -.LP -.SH "名前" -jsadebugd \- サービスアビリティーエージェントデバッグデーモン -.LP -.RS 3 -.TP 2 -o -形式 -.TP 2 -o -パラメータ -.TP 2 -o -説明 -.TP 2 -o -関連項目 -.RE - -.LP -.SH "形式" -.LP +'\" t +.\" Copyright (c) 2004, 2013, Oracle and/or its affiliates. All rights reserved. +.\" Title: jsadebugd +.\" Language: English +.\" Date: 2013年11月21日 +.\" SectDesc: トラブルシューティング・ツール +.\" Software: JDK 8 +.\" Arch: 汎用 +.\" +.\" 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. +.\" +.pl 99999 +.TH "jsadebugd" "1" "2013年11月21日" "JDK 8" "トラブルシューティング・ツール" +.\" ----------------------------------------------------------------- +.\" * Define some portability stuff +.\" ----------------------------------------------------------------- +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.\" http://bugs.debian.org/507673 +.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" ----------------------------------------------------------------- +.\" * set default formatting +.\" ----------------------------------------------------------------- +.\" disable hyphenation +.nh +.\" disable justification (adjust text to left margin only) +.ad l +.\" ----------------------------------------------------------------- +.\" * MAIN CONTENT STARTS HERE * +.\" ----------------------------------------------------------------- +.SH "NAME" +jsadebugd \- Javaプロセスまたはコア・ファイルに接続し、デバッグ・サーバーとして機能します。このコマンドは試験的なもので、サポートされていません。 +.SH "概要" +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -\fP\f3jsadebugd\fP pid [ server\-id ] -.fl -\f3jsadebugd\fP executable core [ server\-id ] -.fl +\fIjsadebugd\fR \fIpid\fR [ \fIserver\-id\fR ] .fi - -.LP -.SH "パラメータ" -.LP -.RS 3 -.TP 3 -pid -デバッグサーバーが接続するプロセスのプロセス ID です。プロセスは Java プロセスである必要があります。マシン上で実行している Java プロセスの一覧を取得するには、jps(1) を使用します。単一のプロセスに接続できるデバッグサーバーのインスタンスは、1 つに制限されます。 +.if n \{\ .RE - -.LP -.RS 3 -.TP 3 -executable +.\} +.sp +.if n \{\ +.RS 4 +.\} +.nf +\fIjsadebugd\fR \fIexecutable\fR \fIcore\fR [ \fIserver\-id\fR ] +.fi +.if n \{\ .RE - -.LP -.RS 3 -.TP 3 -コアダンプの作成元になる Java 実行可能ファイルです。 +.\} +.PP +\fIpid\fR +.RS 4 +デバッグ・サーバーが接続するプロセスのプロセスIDです。プロセスはJavaプロセスである必要があります。マシン上で実行しているJavaプロセスの一覧を取得するには、jps(1)コマンドを使用します。単一のプロセスに接続できるデバッグ・サーバーのインスタンスは、1つに制限されます。 .RE - -.LP -.RS 3 -.TP 3 -core -デバッグサーバーを接続するコアファイルです。 +.PP +\fI実行可能ファイル\fR +.RS 4 +コア・ダンプの作成元のJava実行可能ファイル。 .RE - -.LP -.RS 3 -.TP 3 -server\-id -複数のデバッグサーバーが同一のマシン上で実行している場合に必要になる、オプション固有の ID です。この ID は、リモートクライアントが、接続先のデバッグサーバーを特定するために使用する必要があります。この ID は、単一のマシン内で一意でなければなりません。 +.PP +\fIコア\fR +.RS 4 +デバッグ・サーバーを接続するコア・ファイルです。 +.RE +.PP +\fIserver\-id\fR +.RS 4 +複数のデバッグ・サーバーが同一のマシン上で実行されている場合に必要になる、オプションの一意のIDです。このIDは、リモート・クライアントが、接続先のデバッグ・サーバーを特定するために使用する必要があります。このIDは、単一のマシン内で一意にする必要があります。 .RE - -.LP .SH "説明" -.LP -.LP -\f3jsadebugd\fP は、Java プロセスまたはコアファイルに接続し、デバッグサーバーとして機能します。jstack(1)、jmap(1)、および jinfo(1) などのリモートクライアントは、Java Remote Method Invocation (RMI) を使用しているサーバーに接続できます。 \f2jsadebugd\fP を起動する前に、次のようにして -.na -\f2rmiregistry\fP @ -.fi -http://java.sun.com/javase/6/docs/technotes/tools/index.html#rmi を起動する必要があります。 -.LP +.PP +\fIjsadebugd\fRコマンドは、Javaプロセスまたはコア・ファイルに接続し、デバッグ・サーバーとして機能します。\fIjstack\fR、\fIjmap\fRおよび\fIjinfo\fRなどのリモート・クライアントは、Java Remote Method Invocation (RMI)を使用しているサーバーに接続できます。\fIjsadebugd\fRコマンドを起動する前に、\fIrmiregistry\fRコマンドでRMIレジストリを次のように起動します。\fI$JAVA_HOME\fRはJDKのインストール・ディレクトリです。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -\fP\f4rmiregistry \-J\-Xbootclasspath/p:$JAVA_HOME/lib/sajdi.jar\fP\f3 -.fl -\fP +rmiregistry \-J\-Xbootclasspath/p:$JAVA_HOME/lib/sajdi\&.jar .fi - -.LP -.LP -ここで、 \f2$JAVA_HOME\fP は JDK インストールディレクトリです。rmiregistry が起動していない場合、jsadebugd は標準 (1099) ポートの rmiregistry を内部で起動します。デバッグサーバーは、SIGINT を送信する (Ctrl+C を押す) ことにより停止できます。 -.LP -.LP -\f3注\fP \- このユーティリティーはサポート対象外であり、将来の JDK のバージョンでは利用できなくなる可能性があります。dbgeng.dll が存在していない Windows システムでは、「Debugging Tools For Windows」をインストールしないとこれらのツールが正常に動作しません。また、 \f2PATH\fP 環境変数には、ターゲットプロセスによって使用される \f2jvm.dll\fP の場所、またはクラッシュダンプファイルが生成された場所が含まれるようにしてください。 -.LP -.LP -次に例を示します。 \f2set PATH=<jdk>\\jre\\bin\\client;%PATH%\fP -.LP -.SH "関連項目" -.LP -.RS 3 -.TP 2 -o -jinfo(1) -.TP 2 -o -jmap(1) -.TP 2 -o -jps(1) -.TP 2 -o -jstack(1) -.TP 2 -o -.na -\f2rmiregistry\fP @ -.fi -http://java.sun.com/javase/6/docs/technotes/tools/index.html#rmi +.if n \{\ .RE - -.LP - +.\} +.PP +RMIレジストリが起動していない場合、\fIjsadebugd\fRコマンドはRMIレジストリを標準(1099)ポートで内部で起動します。デバッグ・サーバーは、\fISIGINT\fRを送信することにより停止できます。SIGINTを送信するには、\fB[Ctrl] + [C]\fRを押します。 +.PP +\fB注意:\fR +このユーティリティはサポート対象外であり、将来のJDKのリリースでは利用できなくなる可能性があります。\fIdbgeng\&.dll\fRが存在していないWindowsシステムでは、Debugging Tools For Windowsをインストールしないとこれらのツールが正常に動作しません。\fIPATH\fR環境変数には、ターゲット・プロセスによって使用されるjvm\&.dllの場所、またはクラッシュ・ダンプ・ファイルが生成された場所が含まれるようにしてください。例: +\fIs\fR\fIet PATH=%JDK_HOME%\ejre\ebin\eclient;%PATH%\fR +.SH "関連項目" +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +jinfo(1) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +jmap(1) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +jps(1) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +jstack(1) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +rmiregistry(1) +.RE +.br +'pl 8.5i +'bp diff --git a/jdk/src/linux/doc/man/ja/jstack.1 b/jdk/src/linux/doc/man/ja/jstack.1 index 043a6fb72a3..0afbad29b1d 100644 --- a/jdk/src/linux/doc/man/ja/jstack.1 +++ b/jdk/src/linux/doc/man/ja/jstack.1 @@ -1,172 +1,210 @@ -." Copyright (c) 2004, 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. -." -.TH jstack 1 "07 May 2011" - -.LP -.SH "名前" -jstack \- スタックトレース -.br - -.LP -.RS 3 -.TP 2 -o -形式 -.TP 2 -o -パラメータ -.br -.TP 2 -o -説明 -.TP 2 -o -オプション -.TP 2 -o -関連項目 -.TP 2 -o -既知のバグ -.br -.RE - -.LP -.SH "形式" -.LP +'\" t +.\" Copyright (c) 2004, 2013, Oracle and/or its affiliates. All rights reserved. +.\" Title: jstack +.\" Language: English +.\" Date: 2013年11月21日 +.\" SectDesc: トラブルシューティング・ツール +.\" Software: JDK 8 +.\" Arch: 汎用 +.\" +.\" 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. +.\" +.pl 99999 +.TH "jstack" "1" "2013年11月21日" "JDK 8" "トラブルシューティング・ツール" +.\" ----------------------------------------------------------------- +.\" * Define some portability stuff +.\" ----------------------------------------------------------------- +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.\" http://bugs.debian.org/507673 +.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" ----------------------------------------------------------------- +.\" * set default formatting +.\" ----------------------------------------------------------------- +.\" disable hyphenation +.nh +.\" disable justification (adjust text to left margin only) +.ad l +.\" ----------------------------------------------------------------- +.\" * MAIN CONTENT STARTS HERE * +.\" ----------------------------------------------------------------- +.SH "NAME" +jstack \- Javaプロセス、コア・ファイルまたはリモート・デバッグ・サーバーに対するJavaスレッドのスタック・トレースを出力します。このコマンドは試験的なもので、サポートされていません。 +.SH "概要" +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -\fP\f3jstack\fP [ option ] pid -.fl -\f3jstack\fP [ option ] executable core -.fl -\f3jstack\fP [ option ] [server\-id@]remote\-hostname\-or\-IP -.fl +\fIjstack\fR [ \fIoptions\fR ] \fIpid\fR .fi - -.LP -.SH "パラメータ" -.LP -.LP -各オプションは互いに排他的です。オプションを使用する場合、コマンド名の直後に記述します。オプションを参照してください。 -.LP -.RS 3 -.TP 3 -pid -印刷するスタックトレースのプロセス ID です。プロセスは Java プロセスである必要があります。マシン上で実行している Java プロセスの一覧を取得するには、jps(1) を使用します。 +.if n \{\ .RE - -.LP -.RS 3 -.TP 3 -executable -コアダンプの作成元の Java 実行可能ファイルです。 -.br -.TP 3 -core -印刷するスタックトレースのコアファイルです。 -.br -.TP 3 -remote\-hostname\-or\-IP -リモートデバッグサーバー (jsadebugd(1) を参照) のホスト名または IP アドレスです。 -.br -.TP 3 -server\-id -複数のデバッグサーバーが同一のリモートホストで実行している場合の、オプション固有の ID です。 +.\} +.sp +.if n \{\ +.RS 4 +.\} +.nf +\fIjstack\fR [ \fIoptions\fR ] \fIexecutable\fR \fIcore\fR +.fi +.if n \{\ +.RE +.\} +.sp +.if n \{\ +.RS 4 +.\} +.nf +\fIjstack\fR [ \fIoptions\fR ] [ \fIserver\-id\fR@ ] \fIremote\-hostname\-or\-IP\fR +.fi +.if n \{\ +.RE +.\} +.PP +\fIoptions\fR +.RS 4 +コマンドライン・オプション。オプションを参照してください。 +.RE +.PP +\fIpid\fR +.RS 4 +出力するスタック・トレースのプロセスIDです。プロセスはJavaプロセスである必要があります。マシン上で実行しているJavaプロセスの一覧を取得するには、jps(1)コマンドを使用します。 +.RE +.PP +\fI実行可能ファイル\fR +.RS 4 +コア・ダンプの作成元のJava実行可能ファイル。 +.RE +.PP +\fIコア\fR +.RS 4 +出力するスタック・トレースのコア・ファイルです。 +.RE +.PP +\fIremote\-hostname\-or\-IP\fR +.RS 4 +リモート・デバッグ・サーバーの\fIホスト名\fRまたは\fIIP\fRアドレス。jsadebugd(1)を参照してください。 +.RE +.PP +\fIserver\-id\fR +.RS 4 +複数のデバッグ・サーバーが同一のリモート・ホストで実行している場合の、オプション固有のID。 .RE - -.LP .SH "説明" -.LP -.LP -\f3jstack\fP は、指定された Java プロセスやコアファイルまたはリモートデバッグサーバーに対する Java スレッドの Java スタックトレースを印刷します。Java フレームごとに、フルクラス名、メソッド名、「bci」(バイトコードインデックス)、および行番号 (利用可能な場合) が印刷されます。\-m オプションを使用すると、jstack は、すべてのスレッドの Java フレームとネイティブフレームの両方を、「pc」(プログラムカウンタ) とともに印刷します。ネイティブフレームごとに、「pc」にもっとも近いネイティブシンボル (利用可能な場合) が印刷されます。C++ 分解名は分解解除されません。C++ 名を分解解除するには、このコマンドの出力を \f3c++filt\fP にパイプします。指定されたプロセスが 64 ビット VM 上で実行されている場合、\f2\-J\-d64\fP オプションを指定しなければならない場合があります。次に例を示します。 -.br - -.LP +.PP +\fIjstack\fRコマンドは、指定されたJavaプロセス、コア・ファイルまたはリモート・デバッグ・サーバーに対するJavaスレッドのJavaスタック・トレースを出力します。Javaフレームごとに、フルクラス名、メソッド名、バイトコード・インデックス(bci)、および行番号(利用可能な場合)が出力されます。\fI\-m\fRオプションを使用すると、\fIjstack\fRコマンドは、すべてのスレッドのJavaフレームとネイティブ・フレームの両方を、プログラム・カウンタ(PC)とともに出力します。ネイティブ・フレームごとに、PCに最も近いネイティブ・シンボル(利用可能な場合)が出力されます。C++分解名は分解解除されません。C++名を分解解除するには、このコマンドの出力を\fIc++filt\fRにパイプします。指定されたプロセスが64ビットJava仮想マシン上で実行されている場合は、\fI\-J\-d64\fRオプションを指定する必要があります(例: +\fIjstack \-J\-d64 \-m pid\fR)。 +.PP +\fB注意\fR +このユーティリティはサポート対象外であり、将来のJDKのリリースでは利用できなくなる可能性があります。dbgeng\&.dllファイルが存在していないWindowsシステムでは、Debugging Tools For Windowsをインストールしないとこれらのツールが正常に動作しません。また、\fIPATH\fR環境変数には、ターゲット・プロセスによって使用されるjvm\&.dllの場所、またはクラッシュ・ダンプ・ファイルが生成された場所が含まれるようにしてください。次に例を示します。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -jstack \-J\-d64 \-m pid -.fl -\fP +set PATH=<jdk>\ejre\ebin\eclient;%PATH% .fi - -.LP -.LP -\f3注\fP \- このユーティリティーはサポート対象外であり、将来の JDK のバージョンでは利用できなくなる可能性があります。dbgeng.dll が存在していない Windows システムでは、「Debugging Tools For Windows」をインストールしないとこれらのツールが正常に動作しません。また、 \f2PATH\fP 環境変数には、ターゲットプロセスによって使用される \f2jvm.dll\fP の場所、またはクラッシュダンプファイルが生成された場所が含まれるようにしてください。 -.LP -.LP -次に例を示します。 \f2set PATH=<jdk>\\jre\\bin\\client;%PATH%\fP -.LP +.if n \{\ +.RE +.\} .SH "オプション" -.LP -.RS 3 -.TP 3 -\-F -「jstack [\-l] pid」が応答しない場合にスタックダンプを強制します。 -.TP 3 -\-l -長形式のリスト。所有 java.util.concurrent の -.na -\f2所有できるシンクロナイザ\fP @ -.fi -http://java.sun.com/javase/6/docs/api/java/util/concurrent/locks/AbstractOwnableSynchronizer.htmlの一覧など、ロックについての追加情報を印刷します。 -.TP 3 -\-m -混合モード (Java およびネイティブ C/C++ フレームの両方) のスタックトレースを印刷します。 -.TP 3 -\-h -ヘルプメッセージを印刷します。 -.br -.br -.TP 3 -\-help -ヘルプメッセージを出力します。 -.br +.PP +\-F +.RS 4 +\fIjstack\fR +[\fI\-l\fR] +\fIpid\fRが応答しない場合にスタック・ダンプを強制します。 .RE - -.LP +.PP +\-l +.RS 4 +長形式のリスト。所有\fIjava\&.util\&.concurrent\fRの所有できるシンクロナイザの一覧など、ロックについての追加情報を印刷します。http://docs\&.oracle\&.com/javase/8/docs/api/java/util/concurrent/locks/AbstractOwnableSynchronizer\&.htmlにある +\fIAbstractOwnableSynchronizer\fRクラス記述を参照してください +.RE +.PP +\-m +.RS 4 +JavaおよびネイティブC/C++フレームの両方を持つ混合モードのスタック・トレースを出力します。 +.RE +.PP +\-h +.RS 4 +ヘルプ・メッセージが出力されます。 +.RE +.PP +\-help +.RS 4 +ヘルプ・メッセージが出力されます。 +.RE +.SH "既知の不具合" +.PP +混合モードのスタック・トレースでは、\fI\-m\fRオプションはリモート・デバッグ・サーバーでは機能しません。 .SH "関連項目" -.LP -.RS 3 -.TP 2 -o -pstack(1) -.TP 2 -o -c++filt(1) -.TP 2 -o -jps(1) -.TP 2 -o -jsadebugd(1) +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +pstack(1) .RE - -.LP -.SH "既知のバグ" -.LP -.LP -混合モードのスタックトレース (\-m オプション使用) は、リモートデバッグサーバーでは機能しません。 -.LP - +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +C++filt(1) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +jps(1) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +jsadebugd(1) +.RE +.br +'pl 8.5i +'bp diff --git a/jdk/src/linux/doc/man/ja/jstat.1 b/jdk/src/linux/doc/man/ja/jstat.1 index 07e724add93..046a2f37b7f 100644 --- a/jdk/src/linux/doc/man/ja/jstat.1 +++ b/jdk/src/linux/doc/man/ja/jstat.1 @@ -1,5446 +1,619 @@ -." Copyright (c) 2004, 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. -." -.TH jstat 1 "07 May 2011" - -.LP -.SH "名前" -jstat \- Java 仮想マシン統計データ監視ツール -.LP -.RS 3 -.TP 2 -o -形式 -.TP 2 -o -パラメータ -.TP 2 -o -説明 -.TP 2 -o -仮想マシン識別子 -.TP 2 -o -オプション -.RS 3 -.TP 2 -* -一般的なオプション -.TP 2 -* -出力オプション -.RE -.TP 2 -o -例 -.TP 2 -o -関連項目 -.RE - -.LP -.SH "形式" -.LP +'\" t +.\" Copyright (c) 2004, 2013, Oracle and/or its affiliates. All rights reserved. +.\" Title: jstat +.\" Language: English +.\" Date: 2011年5月10日 +.\" SectDesc: モニタリング・ツール +.\" Software: JDK 8 +.\" Arch: 汎用 +.\" +.\" 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. +.\" +.pl 99999 +.TH "jstat" "1" "2011年5月10日" "JDK 8" "モニタリング・ツール" +.\" ----------------------------------------------------------------- +.\" * Define some portability stuff +.\" ----------------------------------------------------------------- +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.\" http://bugs.debian.org/507673 +.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" ----------------------------------------------------------------- +.\" * set default formatting +.\" ----------------------------------------------------------------- +.\" disable hyphenation +.nh +.\" disable justification (adjust text to left margin only) +.ad l +.\" ----------------------------------------------------------------- +.\" * MAIN CONTENT STARTS HERE * +.\" ----------------------------------------------------------------- +.SH "NAME" +jstat \- Java仮想マシン(JVM)の統計を監視します。このコマンドは試験的なもので、サポートされていません。 +.SH "概要" +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -\fP\f3jstat\fP [ \f2generalOption\fP | \f2outputOptions\fP \f2vmid\fP [\f2interval\fP[s|ms] [\f2count\fP]] ] -.fl +\fIjstat\fR [ \fIgeneralOption\fR | \fIoutputOptions vmid\fR [ \fIinterval\fR[s|ms] [ \fIcount \fR] ] .fi - -.LP -.SH "パラメータ" -.LP -.RS 3 -.TP 3 -generalOption -単独で使用する一般的なコマンド行オプションです (\-help、\-options、または \-version)。 -.TP 3 -outputOptions -単一の \f2statOption\fP と、\-t、\-h、および \-J オプションのいずれかを組み合わせた、1 つまたは複数の出力オプションです。 -.TP 3 -vmid -ターゲットの Java 仮想マシン (JVM) を示す文字列である仮想マシン識別子です。一般的な構文は次のようになります。 -.nf -\f3 -.fl -[\fP\f4protocol\fP\f3:][//]\fP\f4lvmid\fP[@\f2hostname\fP[:\f2port\fP]/\f2servername\fP] -.fl -.fi -vmid 文字列の構文の大部分は、URI の構文に対応しています。\f2vmid\fP は、ローカル JVM を表す単純な整数から、通信プロトコル、ポート番号、および他の実装固有の値を示す複雑な構造まで、さまざまに異なります。詳細は、「仮想マシン識別子」を参照してください。 -.TP 3 -interval[s|ms] -秒 (s) またはミリ秒 (ms) のうち指定した単位でのサンプリング間隔です。デフォルトの単位はミリ秒です。正の整数でなければなりません。これが指定された場合、\f3jstat\fP は interval ごとに出力を生成します。 -.TP 3 -count -表示するサンプル数です。デフォルト値は無限です。つまり、\f3jstat\fP は、ターゲット JVM が終了するまで、または \f3jstat\fP コマンドが終了するまで、統計データを表示します。正の整数でなければなりません。 +.if n \{\ .RE - -.LP -.SH " 説明" -.LP -.LP -\f3jstat\fP ツールは、設置されている HotSpot Java 仮想マシン (JVM) のパフォーマンス統計データを表示します。ターゲット JVM は、仮想マシン識別子、つまり下記の \f2vmid\fP オプションによって識別されます。 -.LP -.LP -\f3注\fP: このユーティリティーはサポート対象外であり、将来の JDK のバージョンでは利用できなくなる可能性があります。現在、Windows 98 および Windows Me プラットフォームでは使用できません。 -.br - -.LP -.SS -仮想マシン識別子 -.LP -.LP -\f2vmid\fP 文字列の構文の大部分は、URI の構文に対応しています。 -.LP -.nf -\f3 -.fl -[\fP\f4protocol\fP\f3:][//]\fP\f4lvmid\fP[@\f2hostname\fP][:\f2port\fP][/\f2servername\fP] -.fl -.fi - -.LP -.RS 3 -.TP 3 -protocol -通信プロトコルです。\f2protocol\fP が省略され、\f2hostname\fP が指定されていない場合、デフォルトのプロトコルが、プラットフォーム固有の最適化されたローカルプロトコルになります。\f2protocol\fP が省略され、\f2hostname\fP が指定されている場合は、デフォルトプロトコルは \f3rmi\fP になります。 -.TP 3 -lvmid -ターゲット JVM のローカル仮想マシン識別子です。\f2lvmid\fP は、システム上の JVM を一意に識別するプラットフォーム固有の値です。\f2lvmid\fP は、仮想マシン識別子の唯一の必須要素です。\f2lvmid\fP は、絶対というわけではありませんが、一般的にはターゲット JVM プロセスに対するオペレーティングシステムのプロセス識別子です。jps(1) コマンドを使用して、\f2lvmid\fP を指定できます。また、Unix プラットフォームでは\f3ps\fP コマンドを使用して、Windows では Windows タスクマネージャーを使用して、\f2lvmid\fP を指定できます。 -.TP 3 -hostname -ターゲットホストを示すホスト名または IP アドレスです。\f2hostname\fP が省略されている場合は、ターゲットホストはローカルホストになります。 -.TP 3 -port -リモートサーバーと通信するためのデフォルトポートです。\f2hostname\fP が省略されているか、\f2protocol\fP で最適化されたローカルプロトコルが指定されている場合、\f2port\fP は無視されます。そうでなければ、\f2port\fP パラメータの扱いは、実装によって異なります。デフォルトの \f3rmi\fP プロトコルの場合、\f2port\fP は、リモートホスト上の rmiregistry のポート番号を示します。\f2port\fP が省略され、\f2protocol\fP で \f3rmi\fP が指定されている場合、デフォルトの rmiregistry ポート (1099) が使用されます。 -.TP 3 -servername -このパラメータの扱いは、実装によって異なります。最適化されたローカルプロトコルの場合、このフィールドは無視されます。\f3rmi\fP プロトコルの場合は、このパラメータは、リモートホスト上の RMI リソースオブジェクトの名前を示します。 +.\} +.PP +\fIgeneralOption\fR +.RS 4 +単独で使用する一般的なコマンドライン・オプションです(\fI\-help\fRまたは\fI\-options\fR)。一般的なオプションを参照してください。 +.RE +.PP +\fIoutputOptions\fR +.RS 4 +単一の\fIstatOption\fRと\fI\-t\fR、\fI\-h\fRおよび\fI\-J\fRのいずれかのオプションで構成される1つ以上の出力オプション。出力オプションを参照してください。 +.RE +.PP +\fIvmid\fR +.RS 4 +ターゲットJVMを示す文字列である仮想マシン識別子です。一般的な構文は次のとおりです。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +[protocol:][//]lvmid[@hostname[:port]/servername] +.fi +.if n \{\ +.RE +.\} +\fIvmid\fR文字列の構文は、URIの構文に対応しています。\fIvmid\fR文字列は、ローカルJVMを表す単純な整数から、通信プロトコル、ポート番号、および他の実装固有の値を示す複雑な構造まで、様々に異なります。仮想マシン識別子を参照してください。 +.RE +.PP +\fIinterval\fR [s|ms] +.RS 4 +秒(s)またはミリ秒(ms)のうち指定した単位でのサンプリング間隔です。デフォルトの単位はミリ秒です。正の整数にする必要があります。指定した場合、\fIjstat\fRコマンドは各間隔で出力を生成します。 +.RE +.PP +\fIcount\fR +.RS 4 +表示するサンプル数です。デフォルト値は無限で、ターゲットJVMが終了するまで、または\fIjstat\fRコマンドが終了するまで、\fIjstat\fRコマンドは統計データを表示します。この値は、正の整数である必要があります。 +.RE +.SH "説明" +.PP +\fIjstat\fRコマンドは、設置されているJava HotSpot VMのパフォーマンス統計データを表示します。ターゲットJVMは、仮想マシン識別子または\fIvmid\fRオプションによって識別されます。 +.SH "仮想マシン識別子" +.PP +\fIvmid\fR文字列の構文は、URIの構文に対応しています。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +[protocol:][//]lvmid[@hostname[:port]/servername] +.fi +.if n \{\ +.RE +.\} +.PP +\fIprotocol\fR +.RS 4 +通信プロトコルです。\fIprotocol\fR値が省略され、ホスト名が指定されていない場合、デフォルトのプロトコルが、プラットフォーム固有の最適化されたローカル・プロトコルになります。\fIprotocol\fR値が省略され、ホスト名が指定されている場合は、デフォルト・プロトコルは\fIrmi\fRになります。 +.RE +.PP +\fIlvmid\fR +.RS 4 +ターゲットJVMのローカル仮想マシン識別子です。\fIlvmid\fRは、システム上のJVMを一意に識別するプラットフォーム固有の値です。\fIlvmid\fRは、仮想マシン識別子の唯一の必須要素です。\fIlvmid\fRは、一般的にはターゲットJVMプロセスに対するオペレーティング・システムのプロセス識別子ですが、必ずしもそうであるとは限りません。\fIjps\fRコマンドを使用して、\fIlvmid\fRを特定できます。また、UNIXプラットフォームでは\fIps\fRコマンドを使用して、WindowsではWindowsタスク・マネージャを使用して、\fIlvmid\fRを特定できます。 +.RE +.PP +\fIhostname\fR +.RS 4 +ターゲット・ホストを示すホスト名またはIPアドレスです。\fIhostname\fR値が省略されている場合は、ターゲット・ホストはローカル・ホストになります。 +.RE +.PP +\fIport\fR +.RS 4 +リモート・サーバーと通信するためのデフォルト・ポートです。\fIhostname\fR値が省略されているか、最適化されたローカル・プロトコルが\fIprotocol\fR値に指定されている場合、\fIport\fR値は無視されます。それ以外の場合、\fIport\fRパラメータの扱いは、実装によって異なります。デフォルトの\fIrmi\fRプロトコルの場合、ポート値は、リモート・ホスト上のrmiregistryのポート番号を示します。\fIport\fR値が省略され、\fIprotocol\fR値で\fIrmi\fRが指定されている場合、デフォルトのrmiregistryポート(1099)が使用されます。 +.RE +.PP +\fIservername\fR +.RS 4 +\fIservername\fRパラメータの扱いは、実装によって異なります。最適化されたローカル・プロトコルの場合、このフィールドは無視されます。\fIrmi\fRプロトコルの場合、これは、リモート・ホスト上のRMIリソース・オブジェクトの名前を表します。 .RE - -.LP .SH "オプション" -.LP -.LP -\f3jstat\fP コマンドは、一般的なオプションと出力オプションの 2 つのタイプのオプションをサポートしています。一般的なオプションを使用した場合、\f3jstat\fP は簡単な使用率およびバージョン情報を表示します。出力オプションでは、統計データ出力の内容と形式を指定します。 -.br - -.LP -.LP -\f3注\fP: すべてのオプションとその機能は、将来のリリースで変更または廃止される可能性があります。 -.LP -.SS -一般的なオプション -.LP -.LP +.PP +\fIjstat\fRコマンドは、一般的なオプションと出力オプションの2つのタイプのオプションをサポートしています。一般的なオプションを使用した場合、\fIjstat\fRコマンドは簡単な使用率およびバージョン情報を表示します。出力オプションによって、統計データ出力の内容と形式が決まります。 +.PP +すべてのオプションとその機能は、将来のリリースで変更または廃止される可能性があります。 +.SS "一般的なオプション" +.PP いずれかの一般的なオプションを指定した場合、他のオプションまたはパラメータは一切指定できません。 -.LP -.RS 3 -.TP 3 -\-help -ヘルプメッセージを表示します。 -.TP 3 -\-version -バージョン情報を表示します。 -.TP 3 -\-options -統計データオプションを一覧表示します。下記の「出力オプション」の節を参照してください。 +.PP +\-help +.RS 4 +ヘルプ・メッセージを表示します。 .RE - -.LP -.SS -出力オプション -.LP -.LP -一般的なオプションを指定しない場合に、出力オプションを指定できます。出力オプションは、\f3jstat\fP の出力の内容および形式を指定し、単一の \f2statOption\fP と、他のいずれかの出力オプション (\-h、\-t、および \-J) とで構成されます。\f2statOption\fP は最初に記述する必要があります。 -.LP -.LP -出力は、各列が空白で区切られたテーブルの形式で構成されます。タイトルを含むヘッダー行によって、各列の意味がわかります。ヘッダーの表示頻度を設定するには、\f3\-h\fP オプションを使用します。列のヘッダー名は一般に、オプション間で一貫性が保たれています。一般に、2 つのオプションで同じ名前の列が使用されていれば、2 つの列のデータソースは同じになります。 -.LP -.LP -\f3\-t\fP オプションを使用すると、 \f2Timestamp というラベルの付いたタイムスタンプの列が、\fP 出力の最初の列として表示されます。 \f2Timestamp\fP 列には、ターゲット JVM の起動からの経過時間が、秒単位で表示されます。タイムスタンプの精度は、さまざまな要因によって異なり、大量の負荷のかかったシステムでのスレッドスケジュールの遅延により変動します。 -.LP -.LP -\f2interval\fP および \f2count\fP パラメータを使用して、\f3jstat\fP がその出力を表示する頻度と回数をそれぞれ指定します。 -.LP -.LP -\f3注\fP: 将来のリリースでこの形式は変更される可能性があるため、\f3jstat\fP の出力を解析するスクリプトは作成しないことをお勧めします。\f3jstat\fP 出力を解析するスクリプトを作成する場合は、このツールの将来のリリースで、そのスクリプトを変更しなければならないことに留意してください。 -.LP -.RS 3 -.TP 3 -\-statOption -\f3jstat\fP が表示する統計データ情報を指定します。次の表に、利用可能なオプションの一覧を示します。ある特定のプラットフォームインストールのオプションを一覧表示するには、一般的なオプションの \f3\-options\fP を使用します。 -.br -.br -.LP -.TS -.if \n+(b.=1 .nr d. \n(.c-\n(c.-1 -.de 35 -.ps \n(.s -.vs \n(.vu -.in \n(.iu -.if \n(.u .fi -.if \n(.j .ad -.if \n(.j=0 .na -.. -.nf -.nr #~ 0 -.if n .nr #~ 0.6n -.ds #d .d -.if \(ts\n(.z\(ts\(ts .ds #d nl -.fc -.nr 33 \n(.s -.rm 80 81 -.nr 34 \n(.lu -.eo -.am 81 -.br -.di a+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -クラスローダーの動作に関する統計データ -.br -.di -.nr a| \n(dn -.nr a- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di b+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -HotSpot Just\-in\-Time コンパイラの動作に関する統計データ -.br -.di -.nr b| \n(dn -.nr b- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di c+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -ガベージコレクトされたヒープの動作に関する統計データ -.br -.di -.nr c| \n(dn -.nr c- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di d+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -世代ごとの容量と対応する領域に関する統計データ -.br -.di -.nr d| \n(dn -.nr d- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di e+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -ガベージコレクション統計データの概要 (\f3\-gcutil\fP と同じ) と、直前および現在 (適用可能な場合) のガベージコレクションイベントの原因 -.br -.di -.nr e| \n(dn -.nr e- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di f+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -New 世代の動作に関する統計データ -.br -.di -.nr f| \n(dn -.nr f- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di g+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -New 世代のサイズと対応する領域に関する統計データ -.br -.di -.nr g| \n(dn -.nr g- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di h+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -Old 世代および Permanent 世代の動作に関する統計データ -.br -.di -.nr h| \n(dn -.nr h- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di i+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -Old 世代のサイズに関する統計データ -.br -.di -.nr i| \n(dn -.nr i- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di j+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -Permanent 世代のサイズに関する統計データ -.br -.di -.nr j| \n(dn -.nr j- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di k+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -ガベージコレクション統計データの概要 -.br -.di -.nr k| \n(dn -.nr k- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di l+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -HotSpot コンパイル方法の統計データ -.br -.di -.nr l| \n(dn -.nr l- \n(dl -.. -.ec \ -.35 -.nf -.ll \n(34u -.nr 80 0 -.nr 38 \w\f3オプション\fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wclass -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wcompiler -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wgc -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wgccapacity -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wgccause -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wgcnew -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wgcnewcapacity -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wgcold -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wgcoldcapacity -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wgcpermcapacity -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wgcutil -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wprintcompilation -.if \n(80<\n(38 .nr 80 \n(38 -.80 -.rm 80 -.nr 81 0 -.nr 38 \w\f3表示内容\fP -.if \n(81<\n(38 .nr 81 \n(38 -.81 -.rm 81 -.nr 38 \n(a- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(b- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(c- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(d- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(e- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(f- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(g- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(h- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(i- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(j- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(k- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(l- -.if \n(81<\n(38 .nr 81 \n(38 -.35 -.nf -.ll \n(34u -.nr 38 1n -.nr 79 0 -.nr 40 \n(79+(0*\n(38) -.nr 80 +\n(40 -.nr 41 \n(80+(3*\n(38) -.nr 81 +\n(41 -.nr TW \n(81 -.if t .if \n(TW>\n(.li .tm Table at line 248 file Input is too wide - \n(TW units -.fc   -.nr #T 0-1 -.nr #a 0-1 -.eo -.de T# -.ds #d .d -.if \(ts\n(.z\(ts\(ts .ds #d nl -.mk ## -.nr ## -1v -.ls 1 -.ls -.. -.ec -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f3オプション\fP\h'|\n(41u'\f3表示内容\fP -.ne \n(a|u+\n(.Vu -.if (\n(a|+\n(#^-1v)>\n(#- .nr #- +(\n(a|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'class\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.a+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(b|u+\n(.Vu -.if (\n(b|+\n(#^-1v)>\n(#- .nr #- +(\n(b|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'compiler\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.b+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(c|u+\n(.Vu -.if (\n(c|+\n(#^-1v)>\n(#- .nr #- +(\n(c|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'gc\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.c+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(d|u+\n(.Vu -.if (\n(d|+\n(#^-1v)>\n(#- .nr #- +(\n(d|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'gccapacity\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.d+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(e|u+\n(.Vu -.if (\n(e|+\n(#^-1v)>\n(#- .nr #- +(\n(e|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'gccause\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.e+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(f|u+\n(.Vu -.if (\n(f|+\n(#^-1v)>\n(#- .nr #- +(\n(f|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'gcnew\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.f+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(g|u+\n(.Vu -.if (\n(g|+\n(#^-1v)>\n(#- .nr #- +(\n(g|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'gcnewcapacity\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.g+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(h|u+\n(.Vu -.if (\n(h|+\n(#^-1v)>\n(#- .nr #- +(\n(h|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'gcold\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.h+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(i|u+\n(.Vu -.if (\n(i|+\n(#^-1v)>\n(#- .nr #- +(\n(i|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'gcoldcapacity\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.i+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(j|u+\n(.Vu -.if (\n(j|+\n(#^-1v)>\n(#- .nr #- +(\n(j|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'gcpermcapacity\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.j+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(k|u+\n(.Vu -.if (\n(k|+\n(#^-1v)>\n(#- .nr #- +(\n(k|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'gcutil\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.k+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(l|u+\n(.Vu -.if (\n(l|+\n(#^-1v)>\n(#- .nr #- +(\n(l|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'printcompilation\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.l+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.fc -.nr T. 1 -.T# 1 -.35 -.rm a+ -.rm b+ -.rm c+ -.rm d+ -.rm e+ -.rm f+ -.rm g+ -.rm h+ -.rm i+ -.rm j+ -.rm k+ -.rm l+ -.TE -.if \n-(b.=0 .nr c. \n(.c-\n(d.-52 -.TP 3 -\-h n -\f2n\fP サンプル (出力行) ごとに列ヘッダーを表示。 ただし、\f2n\fP は正の整数値。デフォルト値は 0。 このとき、データの最初の行の上に列ヘッダーが表示される -.TP 3 -\-t n -タイムスタンプ列を出力の最初の列として表示。タイムスタンプは、ターゲット JVM の起動時からの経過時間 -.TP 3 -\-JjavaOption -\f2javaOption\fP を \f3java\fP アプリケーション起動ツールへ渡す。たとえば、\f3\-J\-Xms48m\fP と指定すると、スタートアップメモリーは 48M バイトに設定されます。オプションの完全なリストについては、「java(1)」のドキュメントを参照してください。 +.PP +\-options +.RS 4 +Staticオプションのリストを表示します。出力オプションを参照してください。 +.RE +.SS "出力オプション" +.PP +一般的なオプションを指定しない場合に、出力オプションを指定できます。出力オプションは、\fIjstat\fRコマンドの出力の内容と形式を決定し、単一の\fIstatOption\fRといずれかの出力オプション(\fI\-h\fR、\fI\-t\fRおよび\fI\-J\fR)で構成されます。\fIstatOption\fRは最初に記述する必要があります。 +.PP +出力は、各列が空白で区切られた表の形式になります。タイトルを含むヘッダー行によって、各列の意味がわかります。ヘッダーの表示頻度を設定するには、\fI\-h\fRオプションを使用します。列のヘッダー名は、様々なオプション間で一貫性が保たれています。一般に、2つのオプションで同じ名前の列が使用されていれば、2つの列のデータ・ソースは同じです。 +.PP +\fI\-t\fRオプションを使用すると、Timestampというラベルの付いたタイムスタンプの列が、出力の最初の列として表示されます。Timestamp列には、ターゲットJVMの起動からの経過時間が、秒単位で表示されます。タイムスタンプの精度は、様々な要因によって異なり、大量の負荷のかかったシステムでのスレッド・スケジュールの遅延により変動します。 +.PP +intervalおよびcountパラメータを使用して、\fIjstat\fRコマンドがその出力を表示する頻度と回数をそれぞれ指定します。 +.PP +\fB注意:\fR +将来のリリースでこの形式は変更される可能性があるため、\fIjstat\fRコマンドの出力を解析するスクリプトは作成しなでください。\fIjstat\fRコマンドの出力を解析するスクリプトを作成する場合は、このツールの将来のリリースで、そのスクリプトを変更する必要があることに留意してください。 +.PP +\-\fIstatOption\fR +.RS 4 +\fIjstat\fRコマンドが表示する統計データ情報を指定します。次に、利用可能なオプションの一覧を示します。特定のプラットフォーム・インストールのオプションを一覧表示するには、一般的なオプションの\fI\-options\fRを使用します。Statオプションおよび出力を参照してください。 +.sp +\fIclass\fR: クラス・ローダーの動作に関する統計データを表示します。 +.sp +\fIcompiler\fR: Java HotSpot VM Just\-in\-Timeコンパイラの動作に関する統計データを表示します。 +.sp +\fIgc\fR: ガベージ・コレクトされたヒープの動作に関する統計データを表示します。 +.sp +\fIgccapacity\fR: 世代ごとの容量と対応する領域に関する統計データを表示します。 +.sp +\fIgccause\fR: ガベージ・コレクション統計データのサマリー(\fI\-gcutil\fRと同じ)と、直前および現在(適用可能な場合)のガベージ・コレクション・イベントの原因を表示します。 +.sp +\fIgcnew\fR: New世代の動作に関する統計データを表示します。 +.sp +\fIgcnewcapacity\fR: New世代のサイズと対応する領域に関する統計データを表示します。 +.sp +\fIgcold\fR: Old世代の動作とメタスペースに関する統計データを表示します。 +.sp +\fIgcoldcapacity\fR: Old世代のサイズに関する統計データを表示します。 +.sp +\fIgcmetacapacity\fR: メタスペースのサイズに関する統計データを表示します。 +.sp +\fIgcutil\fR: ガベージ・コレクションのサマリーに関する統計データを表示します。 +.sp +\fIprintcompilation\fR: Java HotSpot VMコンパイル・メソッドの統計データを表示します。 +.RE +.PP +\-h \fIn\fR +.RS 4 +\fIn\fRサンプル(出力行)ごとに列ヘッダーを表示します。ここで、\fIn\fRは正の整数値です。デフォルト値は0です。この場合、データの最初の行の上に列ヘッダーが表示されます。 +.RE +.PP +\-t +.RS 4 +タイムスタンプ列を出力の最初の列として表示します。タイムスタンプは、ターゲットJVMの起動時からの経過時間です。 +.RE +.PP +\-J\fIjavaOption\fR +.RS 4 +\fIjavaOption\fRをJavaアプリケーション起動ツールに渡します。たとえば、\fI\-J\-Xms48m\fRと指定すると、スタートアップ・メモリーは48MBに設定されます。オプションの完全なリストについては、java(1)を参照してください。 +.RE +.SS "Statオプションおよび出力" +.PP +次の情報は、\fIjstat\fRコマンドが各\fIstatOption\fRについて出力する列をまとめたものです。 +.PP +\-class \fIoption\fR +.RS 4 +クラス・ローダーの統計データ。 +.sp +\fILoaded\fR: ロードされたクラスの数。 +.sp +\fIBytes\fR: ロードされたKBの数。 +.sp +\fIUnloaded\fR: アンロードされたクラスの数。 +.sp +\fIBytes\fR: アンロードされたKBの数。 +.sp +\fITime\fR: クラスのロードやアンロード処理に要した時間。 +.RE +.PP +\-compiler \fIoption\fR +.RS 4 +Java HotSpot VM Just\-in\-Timeコンパイラの統計データ。 +.sp +\fICompiled\fR: 実行されたコンパイル・タスクの数。 +.sp +\fIFailed\fR: 失敗したコンパイル・タスクの数。 +.sp +\fIInvalid\fR: 無効にされたコンパイル・タスクの数。 +.sp +\fITime\fR: コンパイル・タスクの実行に要した時間。 +.sp +\fIFailedType\fR: 最後に失敗したコンパイルのコンパイル・タイプ。 +.sp +\fIFailedMethod\fR: 最後に失敗したコンパイルのクラス名とメソッド。 +.RE +.PP +\-gc \fIoption\fR +.RS 4 +ガベージ・コレクトされたヒープの統計データ。 +.sp +\fIS0C\fR: Survivor領域0の現在の容量(KB)。 +.sp +\fIS1C\fR: Survivor領域1の現在の容量(KB)。 +.sp +\fIS0U\fR: Survivor領域0の使用率(KB)。 +.sp +\fIS1U\fR: Survivor領域1の使用率(KB)。 +.sp +\fIEC\fR: Eden領域の現在の容量(KB)。 +.sp +\fIEU\fR: Eden領域の使用率(KB)。 +.sp +\fIOC\fR: Old領域の現在の容量(KB)。 +.sp +\fIOU\fR: Old領域の使用率(KB)。 +.sp +\fIMC\fR: メタスペースの容量(KB)。 +.sp +\fIMU\fR: メタスペースの使用率(KB)。 +.sp +\fIYGC\fR: 若い世代のガベージ・コレクション・イベントの数。 +.sp +\fIYGCT\fR: 若い世代のガベージ・コレクション時間。 +.sp +\fIFGC\fR: フルGCイベント数。 +.sp +\fIFGCT\fR: フルガベージ・コレクション時間。 +.sp +\fIGCT\fR: ガベージ・コレクション総時間。 +.RE +.PP +\-gccapacity \fIoption\fR +.RS 4 +メモリー・プール世代および領域容量。 +.sp +\fINGCMN\fR: New世代の最小容量(KB)。 +.sp +\fINGCMX\fR: New世代の最大容量(KB)。 +.sp +\fINGC\fR: New世代の現在の容量(KB)。 +.sp +\fIS0C\fR: Survivor領域0の現在の容量(KB)。 +.sp +\fIS1C\fR: Survivor領域1の現在の容量(KB)。 +.sp +\fIEC\fR: Eden領域の現在の容量(KB)。 +.sp +\fIOGCMN\fR: Old世代の最小容量(KB)。 +.sp +\fIOGCMX\fR: Old世代の最大容量(KB)。 +.sp +\fIOGC\fR: Old世代の現在の容量(KB)。 +.sp +\fIOC\fR: Old領域の現在の容量(KB)。 +.sp +\fIMCMN\fR: メタスペースの最小容量(KB)。 +.sp +\fIMCMX\fR: メタスペースの最大容量(KB)。 +.sp +\fIMC\fR: メタスペースの容量(KB)。 +.sp +\fIYGC\fR: 若い世代のGCイベント数。 +.sp +\fIFGC\fR: フルGCイベント数。 +.RE +.PP +\-gccause \fIoption\fR +.RS 4 +このオプションは、\fI\-gcutil\fRオプションと同じガベージ・コレクション統計データのサマリーを表示しますが、最後のガベージ・コレクション・イベントと(適用可能な場合は)現在のガベージ・コレクション・イベントの原因が含まれます。\fI\-gcutil\fRで一覧表示される列のほか、このオプションでは次の列が追加されます。 +.sp +ガベージ・コレクション・イベントを含むガベージ・コレクション統計データ。 +.sp +\fILGCC\fR: 最後のガベージ・コレクションの原因。 +.sp +\fIGCC\fR: 現在のガベージ・コレクションの原因。 +.RE +.PP +\-gcnew \fIoption\fR +.RS 4 +New世代の統計データ。 +.sp +\fIS0C\fR: Survivor領域0の現在の容量(KB)。 +.sp +\fIS1C\fR: Survivor領域1の現在の容量(KB)。 +.sp +\fIS0U\fR: Survivor領域0の使用率(KB)。 +.sp +\fIS1U\fR: Survivor領域1の使用率(KB)。 +.sp +\fITT\fR: 殿堂入りしきい値。 +.sp +\fIMTT\fR: 最大殿堂入りしきい値。 +.sp +\fIDSS\fR: 適切なSurvivorサイズ(KB)。 +.sp +\fIEC\fR: Eden領域の現在の容量(KB)。 +.sp +\fIEU\fR: Eden領域の使用率(KB)。 +.sp +\fIYGC\fR: 若い世代のGCイベント数。 +.sp +\fIYGCT\fR: 若い世代のガベージ・コレクション時間。 +.RE +.PP +\-gcnewcapacity \fIoption\fR +.RS 4 +New世代領域サイズの統計データ。 +.sp +NGCMN: New世代の最小容量(KB)。 +.sp +\fINGCMX\fR: New世代の最大容量(KB)。 +.sp +\fINGC\fR: New世代の現在の容量(KB)。 +.sp +\fIS0CMX\fR: Survivor領域0の最大容量(KB)。 +.sp +\fIS0C\fR: Survivor領域0の現在の容量(KB)。 +.sp +\fIS1CMX\fR: Survivor領域1の最大容量(KB)。 +.sp +\fIS1C\fR: Survivor領域1の現在の容量(KB)。 +.sp +\fIECMX\fR: Eden領域の最大容量(KB)。 +.sp +\fIEC\fR: Eden領域の現在の容量(KB)。 +.sp +\fIYGC\fR: 若い世代のGCイベント数。 +.sp +\fIFGC\fR: フルGCイベント数。 +.RE +.PP +\-gcold \fIoption\fR +.RS 4 +OldおよびPermanent世代の統計データ。 +.sp +\fIMC\fR: メタスペースの容量(KB)。 +.sp +\fIMU\fR: メタスペースの使用率(KB)。 +.sp +\fIOC\fR: Old領域の現在の容量(KB)。 +.sp +\fIOU\fR: Old領域の使用率(KB)。 +.sp +\fIYGC\fR: 若い世代のGCイベント数。 +.sp +\fIFGC\fR: フルGCイベント数。 +.sp +\fIFGCT\fR: フルガベージ・コレクション時間。 +.sp +\fIGCT\fR: ガベージ・コレクション総時間。 +.RE +.PP +\-gcoldcapacity \fIoption\fR +.RS 4 +Old世代の統計データ。 +.sp +\fIOGCMN\fR: Old世代の最小容量(KB)。 +.sp +\fIOGCMX\fR: Old世代の最大容量(KB)。 +.sp +\fIOGC\fR: Old世代の現在の容量(KB)。 +.sp +\fIOC\fR: Old領域の現在の容量(KB)。 +.sp +\fIYGC\fR: 若い世代のGCイベント数。 +.sp +\fIFGC\fR: フルGCイベント数。 +.sp +\fIFGCT\fR: フルガベージ・コレクション時間。 +.sp +\fIGCT\fR: ガベージ・コレクション総時間。 +.RE +.PP +\-gcmetacapacity \fIoption\fR +.RS 4 +Permanent世代の統計データ。 +.sp +\fIMCMN\fR: メタスペースの最小容量(KB)。 +.sp +\fIMCMX\fR: メタスペースの最大容量(KB)。 +.sp +\fIMC\fR: メタスペースの容量(KB)。 +.sp +\fIYGC\fR: 若い世代のGCイベント数。 +.sp +\fIFGC\fR: フルGCイベント数。 +.sp +\fIFGCT\fR: フルガベージ・コレクション時間。 +.sp +\fIGCT\fR: ガベージ・コレクション総時間。 +.RE +.PP +\-gcutil \fIoption\fR +.RS 4 +ガベージ・コレクション統計データのサマリー +.sp +\fIS0\fR: Survivor領域0の使用率(現在の容量に対するパーセンテージ)。 +.sp +\fIS1\fR: Survivor領域1の使用率(現在の容量に対するパーセンテージ)。 +.sp +\fIE\fR: Eden領域の使用率(現在の容量に対するパーセンテージ)。 +.sp +\fIO\fR: Old領域の使用率(現在の容量に対するパーセンテージ)。 +.sp +\fIM\fR: メタスペースの使用率(領域の現在の容量に対するパーセンテージ)。 +.sp +\fIYGC\fR: 若い世代のGCイベント数。 +.sp +\fIYGCT\fR: 若い世代のガベージ・コレクション時間。 +.sp +\fIFGC\fR: フルGCイベント数。 +.sp +\fIFGCT\fR: フルガベージ・コレクション時間。 +.sp +\fIGCT\fR: ガベージ・コレクション総時間。 +.RE +.PP +\-printcompilation \fIoption\fR +.RS 4 +Java HotSpot VMコンパイル・メソッドの統計データ。 +.sp +\fICompiled\fR: 最近コンパイルされたメソッドで実行されたコンパイル・タスクの数。 +.sp +\fISize\fR: 最近コンパイルされたメソッドのバイト・コードのバイト数。 +.sp +\fIType\fR: 最近コンパイルされたメソッドのコンパイル・タイプ。 +.sp +\fIMethod\fR: 最近コンパイルされたメソッドを特定するクラス名とメソッド名。クラス名では、名前空間の区切り文字として、ドット(\&.)のかわりにスラッシュ(/)が使用されます。メソッド名は、指定されたクラス内のメソッドです。これらの2つのフィールドの形式は、HotSpot +\fI\-XX:+PrintComplation\fRオプションと対応しています。 .RE - -.LP -.SS -statOption と出力 -.LP -.LP -以降の表では、\f3jstat\fP が \f2statOption\fP ごとに出力する列について概要を示します。 -.br - -.LP -.SS -\-class オプション -.LP -.LP -.TS -.if \n+(b.=1 .nr d. \n(.c-\n(c.-1 -.de 35 -.ps \n(.s -.vs \n(.vu -.in \n(.iu -.if \n(.u .fi -.if \n(.j .ad -.if \n(.j=0 .na -.. -.nf -.nr #~ 0 -.if n .nr #~ 0.6n -.ds #d .d -.if \(ts\n(.z\(ts\(ts .ds #d nl -.fc -.nr 33 \n(.s -.rm 80 81 -.nr 34 \n(.lu -.eo -.am 81 -.br -.di a+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -ロードされたクラスの数 -.br -.di -.nr a| \n(dn -.nr a- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di b+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -ロードされた K バイト数 -.br -.di -.nr b| \n(dn -.nr b- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di c+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -アンロードされたクラスの数 -.br -.di -.nr c| \n(dn -.nr c- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di d+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -アンロードされた K バイト数 -.br -.di -.nr d| \n(dn -.nr d- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di e+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -クラスのロードやアンロード処理に要した時間 -.br -.di -.nr e| \n(dn -.nr e- \n(dl -.. -.ec \ -.35 -.nf -.ll \n(34u -.nr 80 0 -.nr 38 \wクラスローダーの統計データ -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w\f3列\fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wLoaded -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wBytes -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wUnloaded -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wBytes -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wTime -.if \n(80<\n(38 .nr 80 \n(38 -.80 -.rm 80 -.nr 81 0 -.nr 38 \w\f3説明\fP -.if \n(81<\n(38 .nr 81 \n(38 -.81 -.rm 81 -.nr 38 \n(a- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(b- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(c- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(d- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(e- -.if \n(81<\n(38 .nr 81 \n(38 -.35 -.nf -.ll \n(34u -.nr 38 1n -.nr 79 0 -.nr 40 \n(79+(0*\n(38) -.nr 80 +\n(40 -.nr 41 \n(80+(3*\n(38) -.nr 81 +\n(41 -.nr TW \n(81 -.if t .if \n(TW>\n(.li .tm Table at line 298 file Input is too wide - \n(TW units -.fc   -.nr #T 0-1 -.nr #a 0-1 -.eo -.de T# -.ds #d .d -.if \(ts\n(.z\(ts\(ts .ds #d nl -.mk ## -.nr ## -1v -.ls 1 -.ls -.. -.ec -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'クラスローダーの統計データ\h'|\n(41u' -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f3列\fP\h'|\n(41u'\f3説明\fP -.ne \n(a|u+\n(.Vu -.if (\n(a|+\n(#^-1v)>\n(#- .nr #- +(\n(a|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'Loaded\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.a+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(b|u+\n(.Vu -.if (\n(b|+\n(#^-1v)>\n(#- .nr #- +(\n(b|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'Bytes\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.b+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(c|u+\n(.Vu -.if (\n(c|+\n(#^-1v)>\n(#- .nr #- +(\n(c|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'Unloaded\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.c+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(d|u+\n(.Vu -.if (\n(d|+\n(#^-1v)>\n(#- .nr #- +(\n(d|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'Bytes\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.d+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(e|u+\n(.Vu -.if (\n(e|+\n(#^-1v)>\n(#- .nr #- +(\n(e|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'Time\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.e+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.fc -.nr T. 1 -.T# 1 -.35 -.rm a+ -.rm b+ -.rm c+ -.rm d+ -.rm e+ -.TE -.if \n-(b.=0 .nr c. \n(.c-\n(d.-25 - -.LP -.SS -\-compiler オプション -.LP -.LP -.TS -.if \n+(b.=1 .nr d. \n(.c-\n(c.-1 -.de 35 -.ps \n(.s -.vs \n(.vu -.in \n(.iu -.if \n(.u .fi -.if \n(.j .ad -.if \n(.j=0 .na -.. -.nf -.nr #~ 0 -.if n .nr #~ 0.6n -.ds #d .d -.if \(ts\n(.z\(ts\(ts .ds #d nl -.fc -.nr 33 \n(.s -.rm 80 81 -.nr 34 \n(.lu -.eo -.am 81 -.br -.di a+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -実行されたコンパイルタスクの数 -.br -.di -.nr a| \n(dn -.nr a- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di b+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -失敗したコンパイルタスクの数 -.br -.di -.nr b| \n(dn -.nr b- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di c+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -無効にされたコンパイルタスクの数 -.br -.di -.nr c| \n(dn -.nr c- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di d+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -コンパイルタスクの実行に要した時間 -.br -.di -.nr d| \n(dn -.nr d- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di e+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -最後に失敗したコンパイルのコンパイルタイプ -.br -.di -.nr e| \n(dn -.nr e- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di f+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -最後に失敗したコンパイルのクラス名とメソッド -.br -.di -.nr f| \n(dn -.nr f- \n(dl -.. -.ec \ -.35 -.nf -.ll \n(34u -.nr 80 0 -.nr 38 \wHotSpot Just\-In\-Time コンパイラの統計データ -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w\f3列\fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wCompiled -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wFailed -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wInvalid -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wTime -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wFailedType -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wFailedMethod -.if \n(80<\n(38 .nr 80 \n(38 -.80 -.rm 80 -.nr 81 0 -.nr 38 \w\f3説明\fP -.if \n(81<\n(38 .nr 81 \n(38 -.81 -.rm 81 -.nr 38 \n(a- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(b- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(c- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(d- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(e- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(f- -.if \n(81<\n(38 .nr 81 \n(38 -.35 -.nf -.ll \n(34u -.nr 38 1n -.nr 79 0 -.nr 40 \n(79+(0*\n(38) -.nr 80 +\n(40 -.nr 41 \n(80+(3*\n(38) -.nr 81 +\n(41 -.nr TW \n(81 -.if t .if \n(TW>\n(.li .tm Table at line 334 file Input is too wide - \n(TW units -.fc   -.nr #T 0-1 -.nr #a 0-1 -.eo -.de T# -.ds #d .d -.if \(ts\n(.z\(ts\(ts .ds #d nl -.mk ## -.nr ## -1v -.ls 1 -.ls -.. -.ec -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'HotSpot Just\-In\-Time コンパイラの統計データ\h'|\n(41u' -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f3列\fP\h'|\n(41u'\f3説明\fP -.ne \n(a|u+\n(.Vu -.if (\n(a|+\n(#^-1v)>\n(#- .nr #- +(\n(a|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'Compiled\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.a+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(b|u+\n(.Vu -.if (\n(b|+\n(#^-1v)>\n(#- .nr #- +(\n(b|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'Failed\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.b+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(c|u+\n(.Vu -.if (\n(c|+\n(#^-1v)>\n(#- .nr #- +(\n(c|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'Invalid\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.c+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(d|u+\n(.Vu -.if (\n(d|+\n(#^-1v)>\n(#- .nr #- +(\n(d|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'Time\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.d+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(e|u+\n(.Vu -.if (\n(e|+\n(#^-1v)>\n(#- .nr #- +(\n(e|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'FailedType\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.e+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(f|u+\n(.Vu -.if (\n(f|+\n(#^-1v)>\n(#- .nr #- +(\n(f|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'FailedMethod\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.f+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.fc -.nr T. 1 -.T# 1 -.35 -.rm a+ -.rm b+ -.rm c+ -.rm d+ -.rm e+ -.rm f+ -.TE -.if \n-(b.=0 .nr c. \n(.c-\n(d.-29 - -.LP -.SS -\-gc オプション -.LP -.LP -.TS -.if \n+(b.=1 .nr d. \n(.c-\n(c.-1 -.de 35 -.ps \n(.s -.vs \n(.vu -.in \n(.iu -.if \n(.u .fi -.if \n(.j .ad -.if \n(.j=0 .na -.. -.nf -.nr #~ 0 -.if n .nr #~ 0.6n -.ds #d .d -.if \(ts\n(.z\(ts\(ts .ds #d nl -.fc -.nr 33 \n(.s -.rm 80 81 -.nr 34 \n(.lu -.eo -.am 81 -.br -.di a+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -Survivor 領域 0 の現在の容量 (KB) -.br -.di -.nr a| \n(dn -.nr a- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di b+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -Survivor 領域 1 の現在の容量 (KB) -.br -.di -.nr b| \n(dn -.nr b- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di c+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -Survivor 領域 0 の使用率 (KB) -.br -.di -.nr c| \n(dn -.nr c- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di d+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -Survivor 領域 1 の使用率 (KB) -.br -.di -.nr d| \n(dn -.nr d- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di e+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -Eden 領域の現在の容量 (KB) -.br -.di -.nr e| \n(dn -.nr e- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di f+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -Eden 領域の使用率 (KB) -.br -.di -.nr f| \n(dn -.nr f- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di g+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -Old 領域の現在の容量 (KB) -.br -.di -.nr g| \n(dn -.nr g- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di h+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -Old 領域の使用率 (KB) -.br -.di -.nr h| \n(dn -.nr h- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di i+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -Permanent 領域の現在の容量 (KB) -.br -.di -.nr i| \n(dn -.nr i- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di j+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -Permanent 領域の使用率 (KB) -.br -.di -.nr j| \n(dn -.nr j- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di k+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -若い世代の GC イベント数 -.br -.di -.nr k| \n(dn -.nr k- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di l+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -若い世代のガベージコレクション時間 -.br -.di -.nr l| \n(dn -.nr l- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di m+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -フルガベージコレクション時間 -.br -.di -.nr m| \n(dn -.nr m- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di n+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -ガベージコレクション総時間 -.br -.di -.nr n| \n(dn -.nr n- \n(dl -.. -.ec \ -.35 -.nf -.ll \n(34u -.nr 80 0 -.nr 38 \wガベージコレクトされたヒープの統計データ -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w\f3列\fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wS0C -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wS1C -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wS0U -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wS1U -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wEC -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wEU -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wOC -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wOU -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wPC -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wPU -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wYGC -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wYGCT -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wFGC -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wFGCT -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wGCT -.if \n(80<\n(38 .nr 80 \n(38 -.80 -.rm 80 -.nr 81 0 -.nr 38 \w\f3説明\fP -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \wフル GC イベント数 -.if \n(81<\n(38 .nr 81 \n(38 -.81 -.rm 81 -.nr 38 \n(a- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(b- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(c- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(d- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(e- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(f- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(g- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(h- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(i- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(j- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(k- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(l- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(m- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(n- -.if \n(81<\n(38 .nr 81 \n(38 -.35 -.nf -.ll \n(34u -.nr 38 1n -.nr 79 0 -.nr 40 \n(79+(0*\n(38) -.nr 80 +\n(40 -.nr 41 \n(80+(3*\n(38) -.nr 81 +\n(41 -.nr TW \n(81 -.if t .if \n(TW>\n(.li .tm Table at line 404 file Input is too wide - \n(TW units -.fc   -.nr #T 0-1 -.nr #a 0-1 -.eo -.de T# -.ds #d .d -.if \(ts\n(.z\(ts\(ts .ds #d nl -.mk ## -.nr ## -1v -.ls 1 -.ls -.. -.ec -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'ガベージコレクトされたヒープの統計データ\h'|\n(41u' -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f3列\fP\h'|\n(41u'\f3説明\fP -.ne \n(a|u+\n(.Vu -.if (\n(a|+\n(#^-1v)>\n(#- .nr #- +(\n(a|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'S0C\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.a+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(b|u+\n(.Vu -.if (\n(b|+\n(#^-1v)>\n(#- .nr #- +(\n(b|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'S1C\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.b+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(c|u+\n(.Vu -.if (\n(c|+\n(#^-1v)>\n(#- .nr #- +(\n(c|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'S0U\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.c+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(d|u+\n(.Vu -.if (\n(d|+\n(#^-1v)>\n(#- .nr #- +(\n(d|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'S1U\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.d+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(e|u+\n(.Vu -.if (\n(e|+\n(#^-1v)>\n(#- .nr #- +(\n(e|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'EC\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.e+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(f|u+\n(.Vu -.if (\n(f|+\n(#^-1v)>\n(#- .nr #- +(\n(f|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'EU\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.f+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(g|u+\n(.Vu -.if (\n(g|+\n(#^-1v)>\n(#- .nr #- +(\n(g|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'OC\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.g+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(h|u+\n(.Vu -.if (\n(h|+\n(#^-1v)>\n(#- .nr #- +(\n(h|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'OU\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.h+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(i|u+\n(.Vu -.if (\n(i|+\n(#^-1v)>\n(#- .nr #- +(\n(i|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'PC\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.i+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(j|u+\n(.Vu -.if (\n(j|+\n(#^-1v)>\n(#- .nr #- +(\n(j|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'PU\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.j+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(k|u+\n(.Vu -.if (\n(k|+\n(#^-1v)>\n(#- .nr #- +(\n(k|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'YGC\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.k+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(l|u+\n(.Vu -.if (\n(l|+\n(#^-1v)>\n(#- .nr #- +(\n(l|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'YGCT\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.l+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'FGC\h'|\n(41u'フル GC イベント数 -.ne \n(m|u+\n(.Vu -.if (\n(m|+\n(#^-1v)>\n(#- .nr #- +(\n(m|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'FGCT\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.m+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(n|u+\n(.Vu -.if (\n(n|+\n(#^-1v)>\n(#- .nr #- +(\n(n|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'GCT\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.n+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.fc -.nr T. 1 -.T# 1 -.35 -.rm a+ -.rm b+ -.rm c+ -.rm d+ -.rm e+ -.rm f+ -.rm g+ -.rm h+ -.rm i+ -.rm j+ -.rm k+ -.rm l+ -.rm m+ -.rm n+ -.TE -.if \n-(b.=0 .nr c. \n(.c-\n(d.-63 - -.LP -.SS -\-gccapacity オプション -.LP -.LP -.TS -.if \n+(b.=1 .nr d. \n(.c-\n(c.-1 -.de 35 -.ps \n(.s -.vs \n(.vu -.in \n(.iu -.if \n(.u .fi -.if \n(.j .ad -.if \n(.j=0 .na -.. -.nf -.nr #~ 0 -.if n .nr #~ 0.6n -.ds #d .d -.if \(ts\n(.z\(ts\(ts .ds #d nl -.fc -.nr 33 \n(.s -.rm 80 81 -.nr 34 \n(.lu -.eo -.am 81 -.br -.di a+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -New 世代の最小容量 (KB) -.br -.di -.nr a| \n(dn -.nr a- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di b+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -New 世代の最大容量 (KB) -.br -.di -.nr b| \n(dn -.nr b- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di c+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -New 世代の現在の容量 (KB) -.br -.di -.nr c| \n(dn -.nr c- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di d+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -Survivor 領域 0 の現在の容量 (KB) -.br -.di -.nr d| \n(dn -.nr d- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di e+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -Survivor 領域 1 の現在の容量 (KB) -.br -.di -.nr e| \n(dn -.nr e- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di f+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -Eden 領域の現在の容量 (KB) -.br -.di -.nr f| \n(dn -.nr f- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di g+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -Old 世代の最小容量 (KB) -.br -.di -.nr g| \n(dn -.nr g- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di h+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -Old 世代の最大容量 (KB) -.br -.di -.nr h| \n(dn -.nr h- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di i+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -Old 世代の現在の容量 (KB) -.br -.di -.nr i| \n(dn -.nr i- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di j+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -Old 領域の現在の容量 (KB) -.br -.di -.nr j| \n(dn -.nr j- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di k+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -Permanent 世代の最小容量 (KB) -.br -.di -.nr k| \n(dn -.nr k- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di l+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -Permanent 世代の最大容量 (KB) -.br -.di -.nr l| \n(dn -.nr l- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di m+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -Permanent 世代の現在の容量 (KB) -.br -.di -.nr m| \n(dn -.nr m- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di n+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -Permanent 領域の現在の容量 (KB) -.br -.di -.nr n| \n(dn -.nr n- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di o+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -若い世代の GC イベント数 -.br -.di -.nr o| \n(dn -.nr o- \n(dl -.. -.ec \ -.35 -.nf -.ll \n(34u -.nr 80 0 -.nr 38 \wメモリープール世代および領域容量 -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w\f3列\fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wNGCMN -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wNGCMX -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wNGC -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wS0C -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wS1C -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wEC -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wOGCMN -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wOGCMX -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wOGC -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wOC -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wPGCMN -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wPGCMX -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wPGC -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wPC -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wYGC -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wFGC -.if \n(80<\n(38 .nr 80 \n(38 -.80 -.rm 80 -.nr 81 0 -.nr 38 \w\f3説明\fP -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \wフル GC イベント数 -.if \n(81<\n(38 .nr 81 \n(38 -.81 -.rm 81 -.nr 38 \n(a- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(b- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(c- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(d- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(e- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(f- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(g- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(h- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(i- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(j- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(k- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(l- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(m- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(n- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(o- -.if \n(81<\n(38 .nr 81 \n(38 -.35 -.nf -.ll \n(34u -.nr 38 1n -.nr 79 0 -.nr 40 \n(79+(0*\n(38) -.nr 80 +\n(40 -.nr 41 \n(80+(3*\n(38) -.nr 81 +\n(41 -.nr TW \n(81 -.if t .if \n(TW>\n(.li .tm Table at line 478 file Input is too wide - \n(TW units -.fc   -.nr #T 0-1 -.nr #a 0-1 -.eo -.de T# -.ds #d .d -.if \(ts\n(.z\(ts\(ts .ds #d nl -.mk ## -.nr ## -1v -.ls 1 -.ls -.. -.ec -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'メモリープール世代および領域容量\h'|\n(41u' -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f3列\fP\h'|\n(41u'\f3説明\fP -.ne \n(a|u+\n(.Vu -.if (\n(a|+\n(#^-1v)>\n(#- .nr #- +(\n(a|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'NGCMN\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.a+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(b|u+\n(.Vu -.if (\n(b|+\n(#^-1v)>\n(#- .nr #- +(\n(b|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'NGCMX\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.b+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(c|u+\n(.Vu -.if (\n(c|+\n(#^-1v)>\n(#- .nr #- +(\n(c|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'NGC\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.c+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(d|u+\n(.Vu -.if (\n(d|+\n(#^-1v)>\n(#- .nr #- +(\n(d|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'S0C\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.d+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(e|u+\n(.Vu -.if (\n(e|+\n(#^-1v)>\n(#- .nr #- +(\n(e|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'S1C\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.e+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(f|u+\n(.Vu -.if (\n(f|+\n(#^-1v)>\n(#- .nr #- +(\n(f|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'EC\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.f+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(g|u+\n(.Vu -.if (\n(g|+\n(#^-1v)>\n(#- .nr #- +(\n(g|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'OGCMN\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.g+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(h|u+\n(.Vu -.if (\n(h|+\n(#^-1v)>\n(#- .nr #- +(\n(h|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'OGCMX\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.h+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(i|u+\n(.Vu -.if (\n(i|+\n(#^-1v)>\n(#- .nr #- +(\n(i|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'OGC\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.i+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(j|u+\n(.Vu -.if (\n(j|+\n(#^-1v)>\n(#- .nr #- +(\n(j|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'OC\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.j+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(k|u+\n(.Vu -.if (\n(k|+\n(#^-1v)>\n(#- .nr #- +(\n(k|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'PGCMN\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.k+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(l|u+\n(.Vu -.if (\n(l|+\n(#^-1v)>\n(#- .nr #- +(\n(l|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'PGCMX\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.l+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(m|u+\n(.Vu -.if (\n(m|+\n(#^-1v)>\n(#- .nr #- +(\n(m|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'PGC\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.m+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(n|u+\n(.Vu -.if (\n(n|+\n(#^-1v)>\n(#- .nr #- +(\n(n|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'PC\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.n+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(o|u+\n(.Vu -.if (\n(o|+\n(#^-1v)>\n(#- .nr #- +(\n(o|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'YGC\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.o+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'FGC\h'|\n(41u'フル GC イベント数 -.fc -.nr T. 1 -.T# 1 -.35 -.rm a+ -.rm b+ -.rm c+ -.rm d+ -.rm e+ -.rm f+ -.rm g+ -.rm h+ -.rm i+ -.rm j+ -.rm k+ -.rm l+ -.rm m+ -.rm n+ -.rm o+ -.TE -.if \n-(b.=0 .nr c. \n(.c-\n(d.-67 - -.LP -.SS -\-gccause オプション -.LP -.LP -このオプションは、\f3\-gcutil\fP オプションと同じガベージコレクション統計データの概要を表示しますが、最後のガベージコレクションイベントと (適用可能な場合は) 現在のガベージコレクションイベントの原因が含まれます。\f3\-gcutil\fP で一覧表示される列の他に、このオプションでは次の列が追加されます。 -.LP -.LP -.TS -.if \n+(b.=1 .nr d. \n(.c-\n(c.-1 -.de 35 -.ps \n(.s -.vs \n(.vu -.in \n(.iu -.if \n(.u .fi -.if \n(.j .ad -.if \n(.j=0 .na -.. -.nf -.nr #~ 0 -.if n .nr #~ 0.6n -.ds #d .d -.if \(ts\n(.z\(ts\(ts .ds #d nl -.fc -.nr 33 \n(.s -.rm 80 81 -.nr 34 \n(.lu -.eo -.am 81 -.br -.di a+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -最後のガベージコレクションの原因 -.br -.di -.nr a| \n(dn -.nr a- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di b+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -現在のガベージコレクションの原因 -.br -.di -.nr b| \n(dn -.nr b- \n(dl -.. -.ec \ -.35 -.nf -.ll \n(34u -.nr 80 0 -.nr 38 \wGC イベントを含むガベージコレクション統計データ -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w\f3列\fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wLGCC -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wGCC -.if \n(80<\n(38 .nr 80 \n(38 -.80 -.rm 80 -.nr 81 0 -.nr 38 \w\f3説明\fP -.if \n(81<\n(38 .nr 81 \n(38 -.81 -.rm 81 -.nr 38 \n(a- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(b- -.if \n(81<\n(38 .nr 81 \n(38 -.35 -.nf -.ll \n(34u -.nr 38 1n -.nr 79 0 -.nr 40 \n(79+(0*\n(38) -.nr 80 +\n(40 -.nr 41 \n(80+(3*\n(38) -.nr 81 +\n(41 -.nr TW \n(81 -.if t .if \n(TW>\n(.li .tm Table at line 501 file Input is too wide - \n(TW units -.fc   -.nr #T 0-1 -.nr #a 0-1 -.eo -.de T# -.ds #d .d -.if \(ts\n(.z\(ts\(ts .ds #d nl -.mk ## -.nr ## -1v -.ls 1 -.ls -.. -.ec -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'GC イベントを含むガベージコレクション統計データ\h'|\n(41u' -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f3列\fP\h'|\n(41u'\f3説明\fP -.ne \n(a|u+\n(.Vu -.if (\n(a|+\n(#^-1v)>\n(#- .nr #- +(\n(a|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'LGCC\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.a+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(b|u+\n(.Vu -.if (\n(b|+\n(#^-1v)>\n(#- .nr #- +(\n(b|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'GCC\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.b+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.fc -.nr T. 1 -.T# 1 -.35 -.rm a+ -.rm b+ -.TE -.if \n-(b.=0 .nr c. \n(.c-\n(d.-13 - -.LP -.SS -\-gcnew オプション -.LP -.LP -.TS -.if \n+(b.=1 .nr d. \n(.c-\n(c.-1 -.de 35 -.ps \n(.s -.vs \n(.vu -.in \n(.iu -.if \n(.u .fi -.if \n(.j .ad -.if \n(.j=0 .na -.. -.nf -.nr #~ 0 -.if n .nr #~ 0.6n -.ds #d .d -.if \(ts\n(.z\(ts\(ts .ds #d nl -.fc -.nr 33 \n(.s -.rm 80 81 -.nr 34 \n(.lu -.eo -.am 81 -.br -.di a+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -Survivor 領域 0 の現在の容量 (KB) -.br -.di -.nr a| \n(dn -.nr a- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di b+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -Survivor 領域 1 の現在の容量 (KB) -.br -.di -.nr b| \n(dn -.nr b- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di c+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -Survivor 領域 0 の使用率 (KB) -.br -.di -.nr c| \n(dn -.nr c- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di d+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -Survivor 領域 1 の使用率 (KB) -.br -.di -.nr d| \n(dn -.nr d- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di e+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -最大殿堂入りしきい値 -.br -.di -.nr e| \n(dn -.nr e- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di f+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -適切な Survivor サイズ (KB) -.br -.di -.nr f| \n(dn -.nr f- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di g+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -Eden 領域の現在の容量 (KB) -.br -.di -.nr g| \n(dn -.nr g- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di h+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -Eden 領域の使用率 (KB) -.br -.di -.nr h| \n(dn -.nr h- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di i+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -若い世代の GC イベント数 -.br -.di -.nr i| \n(dn -.nr i- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di j+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -若い世代のガベージコレクション時間 -.br -.di -.nr j| \n(dn -.nr j- \n(dl -.. -.ec \ -.35 -.nf -.ll \n(34u -.nr 80 0 -.nr 38 \wNew 世代の統計データ -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w\f3列\fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wS0C -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wS1C -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wS0U -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wS1U -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wTT -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wMTT -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wDSS -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wEC -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wEU -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wYGC -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wYGCT -.if \n(80<\n(38 .nr 80 \n(38 -.80 -.rm 80 -.nr 81 0 -.nr 38 \w\f3説明\fP -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \w殿堂入りしきい値 -.if \n(81<\n(38 .nr 81 \n(38 -.81 -.rm 81 -.nr 38 \n(a- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(b- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(c- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(d- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(e- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(f- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(g- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(h- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(i- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(j- -.if \n(81<\n(38 .nr 81 \n(38 -.35 -.nf -.ll \n(34u -.nr 38 1n -.nr 79 0 -.nr 40 \n(79+(0*\n(38) -.nr 80 +\n(40 -.nr 41 \n(80+(3*\n(38) -.nr 81 +\n(41 -.nr TW \n(81 -.if t .if \n(TW>\n(.li .tm Table at line 555 file Input is too wide - \n(TW units -.fc   -.nr #T 0-1 -.nr #a 0-1 -.eo -.de T# -.ds #d .d -.if \(ts\n(.z\(ts\(ts .ds #d nl -.mk ## -.nr ## -1v -.ls 1 -.ls -.. -.ec -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'New 世代の統計データ\h'|\n(41u' -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f3列\fP\h'|\n(41u'\f3説明\fP -.ne \n(a|u+\n(.Vu -.if (\n(a|+\n(#^-1v)>\n(#- .nr #- +(\n(a|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'S0C\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.a+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(b|u+\n(.Vu -.if (\n(b|+\n(#^-1v)>\n(#- .nr #- +(\n(b|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'S1C\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.b+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(c|u+\n(.Vu -.if (\n(c|+\n(#^-1v)>\n(#- .nr #- +(\n(c|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'S0U\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.c+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(d|u+\n(.Vu -.if (\n(d|+\n(#^-1v)>\n(#- .nr #- +(\n(d|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'S1U\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.d+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'TT\h'|\n(41u'殿堂入りしきい値 -.ne \n(e|u+\n(.Vu -.if (\n(e|+\n(#^-1v)>\n(#- .nr #- +(\n(e|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'MTT\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.e+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(f|u+\n(.Vu -.if (\n(f|+\n(#^-1v)>\n(#- .nr #- +(\n(f|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'DSS\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.f+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(g|u+\n(.Vu -.if (\n(g|+\n(#^-1v)>\n(#- .nr #- +(\n(g|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'EC\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.g+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(h|u+\n(.Vu -.if (\n(h|+\n(#^-1v)>\n(#- .nr #- +(\n(h|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'EU\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.h+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(i|u+\n(.Vu -.if (\n(i|+\n(#^-1v)>\n(#- .nr #- +(\n(i|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'YGC\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.i+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(j|u+\n(.Vu -.if (\n(j|+\n(#^-1v)>\n(#- .nr #- +(\n(j|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'YGCT\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.j+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.fc -.nr T. 1 -.T# 1 -.35 -.rm a+ -.rm b+ -.rm c+ -.rm d+ -.rm e+ -.rm f+ -.rm g+ -.rm h+ -.rm i+ -.rm j+ -.TE -.if \n-(b.=0 .nr c. \n(.c-\n(d.-47 - -.LP -.SS -\-gcnewcapacity オプション -.LP -.LP -.TS -.if \n+(b.=1 .nr d. \n(.c-\n(c.-1 -.de 35 -.ps \n(.s -.vs \n(.vu -.in \n(.iu -.if \n(.u .fi -.if \n(.j .ad -.if \n(.j=0 .na -.. -.nf -.nr #~ 0 -.if n .nr #~ 0.6n -.ds #d .d -.if \(ts\n(.z\(ts\(ts .ds #d nl -.fc -.nr 33 \n(.s -.rm 80 81 -.nr 34 \n(.lu -.eo -.am 81 -.br -.di a+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -New 世代の最小容量 (KB) -.br -.di -.nr a| \n(dn -.nr a- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di b+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -New 世代の最大容量 (KB) -.br -.di -.nr b| \n(dn -.nr b- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di c+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -New 世代の現在の容量 (KB) -.br -.di -.nr c| \n(dn -.nr c- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di d+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -Survivor 領域 0 の最大容量 (KB) -.br -.di -.nr d| \n(dn -.nr d- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di e+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -Survivor 領域 0 の現在の容量 (KB) -.br -.di -.nr e| \n(dn -.nr e- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di f+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -Survivor 領域 1 の最大容量 (KB) -.br -.di -.nr f| \n(dn -.nr f- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di g+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -Survivor 領域 1 の現在の容量 (KB) -.br -.di -.nr g| \n(dn -.nr g- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di h+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -Eden 領域の最大容量 (KB) -.br -.di -.nr h| \n(dn -.nr h- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di i+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -Eden 領域の現在の容量 (KB) -.br -.di -.nr i| \n(dn -.nr i- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di j+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -若い世代の GC イベント数 -.br -.di -.nr j| \n(dn -.nr j- \n(dl -.. -.ec \ -.35 -.nf -.ll \n(34u -.nr 80 0 -.nr 38 \wNew 世代領域サイズの統計データ -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w\f3列\fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wNGCMN -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wNGCMX -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wNGC -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wS0CMX -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wS0C -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wS1CMX -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wS1C -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wECMX -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wEC -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wYGC -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wFGC -.if \n(80<\n(38 .nr 80 \n(38 -.80 -.rm 80 -.nr 81 0 -.nr 38 \w\f3説明\fP -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \wフル GC イベント数 -.if \n(81<\n(38 .nr 81 \n(38 -.81 -.rm 81 -.nr 38 \n(a- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(b- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(c- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(d- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(e- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(f- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(g- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(h- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(i- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(j- -.if \n(81<\n(38 .nr 81 \n(38 -.35 -.nf -.ll \n(34u -.nr 38 1n -.nr 79 0 -.nr 40 \n(79+(0*\n(38) -.nr 80 +\n(40 -.nr 41 \n(80+(3*\n(38) -.nr 81 +\n(41 -.nr TW \n(81 -.if t .if \n(TW>\n(.li .tm Table at line 609 file Input is too wide - \n(TW units -.fc   -.nr #T 0-1 -.nr #a 0-1 -.eo -.de T# -.ds #d .d -.if \(ts\n(.z\(ts\(ts .ds #d nl -.mk ## -.nr ## -1v -.ls 1 -.ls -.. -.ec -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'New 世代領域サイズの統計データ\h'|\n(41u' -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f3列\fP\h'|\n(41u'\f3説明\fP -.ne \n(a|u+\n(.Vu -.if (\n(a|+\n(#^-1v)>\n(#- .nr #- +(\n(a|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'NGCMN\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.a+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(b|u+\n(.Vu -.if (\n(b|+\n(#^-1v)>\n(#- .nr #- +(\n(b|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'NGCMX\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.b+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(c|u+\n(.Vu -.if (\n(c|+\n(#^-1v)>\n(#- .nr #- +(\n(c|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'NGC\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.c+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(d|u+\n(.Vu -.if (\n(d|+\n(#^-1v)>\n(#- .nr #- +(\n(d|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'S0CMX\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.d+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(e|u+\n(.Vu -.if (\n(e|+\n(#^-1v)>\n(#- .nr #- +(\n(e|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'S0C\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.e+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(f|u+\n(.Vu -.if (\n(f|+\n(#^-1v)>\n(#- .nr #- +(\n(f|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'S1CMX\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.f+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(g|u+\n(.Vu -.if (\n(g|+\n(#^-1v)>\n(#- .nr #- +(\n(g|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'S1C\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.g+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(h|u+\n(.Vu -.if (\n(h|+\n(#^-1v)>\n(#- .nr #- +(\n(h|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'ECMX\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.h+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(i|u+\n(.Vu -.if (\n(i|+\n(#^-1v)>\n(#- .nr #- +(\n(i|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'EC\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.i+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(j|u+\n(.Vu -.if (\n(j|+\n(#^-1v)>\n(#- .nr #- +(\n(j|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'YGC\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.j+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'FGC\h'|\n(41u'フル GC イベント数 -.fc -.nr T. 1 -.T# 1 -.35 -.rm a+ -.rm b+ -.rm c+ -.rm d+ -.rm e+ -.rm f+ -.rm g+ -.rm h+ -.rm i+ -.rm j+ -.TE -.if \n-(b.=0 .nr c. \n(.c-\n(d.-47 - -.LP -.SS -\-gcold オプション -.LP -.LP -.TS -.if \n+(b.=1 .nr d. \n(.c-\n(c.-1 -.de 35 -.ps \n(.s -.vs \n(.vu -.in \n(.iu -.if \n(.u .fi -.if \n(.j .ad -.if \n(.j=0 .na -.. -.nf -.nr #~ 0 -.if n .nr #~ 0.6n -.ds #d .d -.if \(ts\n(.z\(ts\(ts .ds #d nl -.fc -.nr 33 \n(.s -.rm 80 81 -.nr 34 \n(.lu -.eo -.am 81 -.br -.di a+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -Permanent 領域の現在の容量 (KB) -.br -.di -.nr a| \n(dn -.nr a- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di b+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -Permanent 領域の使用率 (KB) -.br -.di -.nr b| \n(dn -.nr b- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di c+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -Old 領域の現在の容量 (KB) -.br -.di -.nr c| \n(dn -.nr c- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di d+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -Old 領域の使用率 (KB) -.br -.di -.nr d| \n(dn -.nr d- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di e+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -若い世代の GC イベント数 -.br -.di -.nr e| \n(dn -.nr e- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di f+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -フルガベージコレクション時間 -.br -.di -.nr f| \n(dn -.nr f- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di g+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -ガベージコレクション総時間 -.br -.di -.nr g| \n(dn -.nr g- \n(dl -.. -.ec \ -.35 -.nf -.ll \n(34u -.nr 80 0 -.nr 38 \wOld および Permanent 世代の統計データ -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w\f3列\fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wPC -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wPU -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wOC -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wOU -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wYGC -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wFGC -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wFGCT -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wGCT -.if \n(80<\n(38 .nr 80 \n(38 -.80 -.rm 80 -.nr 81 0 -.nr 38 \w\f3説明\fP -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \wフル GC イベント数 -.if \n(81<\n(38 .nr 81 \n(38 -.81 -.rm 81 -.nr 38 \n(a- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(b- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(c- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(d- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(e- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(f- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(g- -.if \n(81<\n(38 .nr 81 \n(38 -.35 -.nf -.ll \n(34u -.nr 38 1n -.nr 79 0 -.nr 40 \n(79+(0*\n(38) -.nr 80 +\n(40 -.nr 41 \n(80+(3*\n(38) -.nr 81 +\n(41 -.nr TW \n(81 -.if t .if \n(TW>\n(.li .tm Table at line 651 file Input is too wide - \n(TW units -.fc   -.nr #T 0-1 -.nr #a 0-1 -.eo -.de T# -.ds #d .d -.if \(ts\n(.z\(ts\(ts .ds #d nl -.mk ## -.nr ## -1v -.ls 1 -.ls -.. -.ec -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'Old および Permanent 世代の統計データ\h'|\n(41u' -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f3列\fP\h'|\n(41u'\f3説明\fP -.ne \n(a|u+\n(.Vu -.if (\n(a|+\n(#^-1v)>\n(#- .nr #- +(\n(a|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'PC\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.a+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(b|u+\n(.Vu -.if (\n(b|+\n(#^-1v)>\n(#- .nr #- +(\n(b|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'PU\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.b+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(c|u+\n(.Vu -.if (\n(c|+\n(#^-1v)>\n(#- .nr #- +(\n(c|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'OC\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.c+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(d|u+\n(.Vu -.if (\n(d|+\n(#^-1v)>\n(#- .nr #- +(\n(d|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'OU\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.d+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(e|u+\n(.Vu -.if (\n(e|+\n(#^-1v)>\n(#- .nr #- +(\n(e|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'YGC\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.e+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'FGC\h'|\n(41u'フル GC イベント数 -.ne \n(f|u+\n(.Vu -.if (\n(f|+\n(#^-1v)>\n(#- .nr #- +(\n(f|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'FGCT\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.f+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(g|u+\n(.Vu -.if (\n(g|+\n(#^-1v)>\n(#- .nr #- +(\n(g|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'GCT\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.g+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.fc -.nr T. 1 -.T# 1 -.35 -.rm a+ -.rm b+ -.rm c+ -.rm d+ -.rm e+ -.rm f+ -.rm g+ -.TE -.if \n-(b.=0 .nr c. \n(.c-\n(d.-35 - -.LP -.SS -\-gcoldcapacity オプション -.LP -.LP -.TS -.if \n+(b.=1 .nr d. \n(.c-\n(c.-1 -.de 35 -.ps \n(.s -.vs \n(.vu -.in \n(.iu -.if \n(.u .fi -.if \n(.j .ad -.if \n(.j=0 .na -.. -.nf -.nr #~ 0 -.if n .nr #~ 0.6n -.ds #d .d -.if \(ts\n(.z\(ts\(ts .ds #d nl -.fc -.nr 33 \n(.s -.rm 80 81 -.nr 34 \n(.lu -.eo -.am 81 -.br -.di a+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -Old 世代の最小容量 (KB) -.br -.di -.nr a| \n(dn -.nr a- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di b+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -Old 世代の最大容量 (KB) -.br -.di -.nr b| \n(dn -.nr b- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di c+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -Old 世代の現在の容量 (KB) -.br -.di -.nr c| \n(dn -.nr c- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di d+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -Old 領域の現在の容量 (KB) -.br -.di -.nr d| \n(dn -.nr d- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di e+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -若い世代の GC イベント数 -.br -.di -.nr e| \n(dn -.nr e- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di f+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -フルガベージコレクション時間 -.br -.di -.nr f| \n(dn -.nr f- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di g+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -ガベージコレクション総時間 -.br -.di -.nr g| \n(dn -.nr g- \n(dl -.. -.ec \ -.35 -.nf -.ll \n(34u -.nr 80 0 -.nr 38 \wOld 世代の統計データ -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w\f3列\fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wOGCMN -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wOGCMX -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wOGC -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wOC -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wYGC -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wFGC -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wFGCT -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wGCT -.if \n(80<\n(38 .nr 80 \n(38 -.80 -.rm 80 -.nr 81 0 -.nr 38 \w\f3説明\fP -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \wフル GC イベント数 -.if \n(81<\n(38 .nr 81 \n(38 -.81 -.rm 81 -.nr 38 \n(a- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(b- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(c- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(d- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(e- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(f- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(g- -.if \n(81<\n(38 .nr 81 \n(38 -.35 -.nf -.ll \n(34u -.nr 38 1n -.nr 79 0 -.nr 40 \n(79+(0*\n(38) -.nr 80 +\n(40 -.nr 41 \n(80+(3*\n(38) -.nr 81 +\n(41 -.nr TW \n(81 -.if t .if \n(TW>\n(.li .tm Table at line 693 file Input is too wide - \n(TW units -.fc   -.nr #T 0-1 -.nr #a 0-1 -.eo -.de T# -.ds #d .d -.if \(ts\n(.z\(ts\(ts .ds #d nl -.mk ## -.nr ## -1v -.ls 1 -.ls -.. -.ec -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'Old 世代の統計データ\h'|\n(41u' -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f3列\fP\h'|\n(41u'\f3説明\fP -.ne \n(a|u+\n(.Vu -.if (\n(a|+\n(#^-1v)>\n(#- .nr #- +(\n(a|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'OGCMN\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.a+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(b|u+\n(.Vu -.if (\n(b|+\n(#^-1v)>\n(#- .nr #- +(\n(b|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'OGCMX\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.b+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(c|u+\n(.Vu -.if (\n(c|+\n(#^-1v)>\n(#- .nr #- +(\n(c|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'OGC\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.c+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(d|u+\n(.Vu -.if (\n(d|+\n(#^-1v)>\n(#- .nr #- +(\n(d|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'OC\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.d+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(e|u+\n(.Vu -.if (\n(e|+\n(#^-1v)>\n(#- .nr #- +(\n(e|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'YGC\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.e+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'FGC\h'|\n(41u'フル GC イベント数 -.ne \n(f|u+\n(.Vu -.if (\n(f|+\n(#^-1v)>\n(#- .nr #- +(\n(f|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'FGCT\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.f+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(g|u+\n(.Vu -.if (\n(g|+\n(#^-1v)>\n(#- .nr #- +(\n(g|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'GCT\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.g+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.fc -.nr T. 1 -.T# 1 -.35 -.rm a+ -.rm b+ -.rm c+ -.rm d+ -.rm e+ -.rm f+ -.rm g+ -.TE -.if \n-(b.=0 .nr c. \n(.c-\n(d.-35 - -.LP -.SS -\-gcpermcapacity オプション -.LP -.LP -.TS -.if \n+(b.=1 .nr d. \n(.c-\n(c.-1 -.de 35 -.ps \n(.s -.vs \n(.vu -.in \n(.iu -.if \n(.u .fi -.if \n(.j .ad -.if \n(.j=0 .na -.. -.nf -.nr #~ 0 -.if n .nr #~ 0.6n -.ds #d .d -.if \(ts\n(.z\(ts\(ts .ds #d nl -.fc -.nr 33 \n(.s -.rm 80 81 -.nr 34 \n(.lu -.eo -.am 81 -.br -.di a+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -Permanent 世代の最小容量 (KB) -.br -.di -.nr a| \n(dn -.nr a- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di b+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -Permanent 世代の最大容量 (KB) -.br -.di -.nr b| \n(dn -.nr b- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di c+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -Permanent 世代の現在の容量 (KB) -.br -.di -.nr c| \n(dn -.nr c- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di d+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -Permanent 領域の現在の容量 (KB) -.br -.di -.nr d| \n(dn -.nr d- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di e+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -若い世代の GC イベント数 -.br -.di -.nr e| \n(dn -.nr e- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di f+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -フルガベージコレクション時間 -.br -.di -.nr f| \n(dn -.nr f- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di g+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -ガベージコレクション総時間 -.br -.di -.nr g| \n(dn -.nr g- \n(dl -.. -.ec \ -.35 -.nf -.ll \n(34u -.nr 80 0 -.nr 38 \wPermanent 世代の統計データ -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w\f3列\fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wPGCMN -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wPGCMX -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wPGC -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wPC -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wYGC -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wFGC -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wFGCT -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wGCT -.if \n(80<\n(38 .nr 80 \n(38 -.80 -.rm 80 -.nr 81 0 -.nr 38 \w\f3説明\fP -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \wフル GC イベント数 -.if \n(81<\n(38 .nr 81 \n(38 -.81 -.rm 81 -.nr 38 \n(a- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(b- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(c- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(d- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(e- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(f- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(g- -.if \n(81<\n(38 .nr 81 \n(38 -.35 -.nf -.ll \n(34u -.nr 38 1n -.nr 79 0 -.nr 40 \n(79+(0*\n(38) -.nr 80 +\n(40 -.nr 41 \n(80+(3*\n(38) -.nr 81 +\n(41 -.nr TW \n(81 -.if t .if \n(TW>\n(.li .tm Table at line 735 file Input is too wide - \n(TW units -.fc   -.nr #T 0-1 -.nr #a 0-1 -.eo -.de T# -.ds #d .d -.if \(ts\n(.z\(ts\(ts .ds #d nl -.mk ## -.nr ## -1v -.ls 1 -.ls -.. -.ec -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'Permanent 世代の統計データ\h'|\n(41u' -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f3列\fP\h'|\n(41u'\f3説明\fP -.ne \n(a|u+\n(.Vu -.if (\n(a|+\n(#^-1v)>\n(#- .nr #- +(\n(a|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'PGCMN\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.a+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(b|u+\n(.Vu -.if (\n(b|+\n(#^-1v)>\n(#- .nr #- +(\n(b|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'PGCMX\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.b+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(c|u+\n(.Vu -.if (\n(c|+\n(#^-1v)>\n(#- .nr #- +(\n(c|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'PGC\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.c+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(d|u+\n(.Vu -.if (\n(d|+\n(#^-1v)>\n(#- .nr #- +(\n(d|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'PC\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.d+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(e|u+\n(.Vu -.if (\n(e|+\n(#^-1v)>\n(#- .nr #- +(\n(e|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'YGC\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.e+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'FGC\h'|\n(41u'フル GC イベント数 -.ne \n(f|u+\n(.Vu -.if (\n(f|+\n(#^-1v)>\n(#- .nr #- +(\n(f|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'FGCT\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.f+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(g|u+\n(.Vu -.if (\n(g|+\n(#^-1v)>\n(#- .nr #- +(\n(g|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'GCT\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.g+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.fc -.nr T. 1 -.T# 1 -.35 -.rm a+ -.rm b+ -.rm c+ -.rm d+ -.rm e+ -.rm f+ -.rm g+ -.TE -.if \n-(b.=0 .nr c. \n(.c-\n(d.-35 - -.LP -.SS -\-gcutil オプション -.LP -.LP -.TS -.if \n+(b.=1 .nr d. \n(.c-\n(c.-1 -.de 35 -.ps \n(.s -.vs \n(.vu -.in \n(.iu -.if \n(.u .fi -.if \n(.j .ad -.if \n(.j=0 .na -.. -.nf -.nr #~ 0 -.if n .nr #~ 0.6n -.ds #d .d -.if \(ts\n(.z\(ts\(ts .ds #d nl -.fc -.nr 33 \n(.s -.rm 80 81 -.nr 34 \n(.lu -.eo -.am 81 -.br -.di a+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -Survivor 領域 0 の使用率 (現在の容量に対するパーセンテージ) -.br -.di -.nr a| \n(dn -.nr a- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di b+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -Survivor 領域 1 の使用率 (現在の容量に対するパーセンテージ) -.br -.di -.nr b| \n(dn -.nr b- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di c+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -Eden 領域の使用率 (現在の容量に対するパーセンテージ) -.br -.di -.nr c| \n(dn -.nr c- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di d+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -Old 領域の使用率 (現在の容量に対するパーセンテージ) -.br -.di -.nr d| \n(dn -.nr d- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di e+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -Permanent 領域の使用率 (現在の容量に対するパーセンテージ) -.br -.di -.nr e| \n(dn -.nr e- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di f+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -若い世代の GC イベント数 -.br -.di -.nr f| \n(dn -.nr f- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di g+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -若い世代のガベージコレクション時間 -.br -.di -.nr g| \n(dn -.nr g- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di h+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -フルガベージコレクション時間 -.br -.di -.nr h| \n(dn -.nr h- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di i+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -ガベージコレクション総時間 -.br -.di -.nr i| \n(dn -.nr i- \n(dl -.. -.ec \ -.35 -.nf -.ll \n(34u -.nr 80 0 -.nr 38 \wガベージコレクション統計データの概要 -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w\f3列\fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wS0 -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wS1 -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wE -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wO -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wYGC -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wYGCT -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wFGC -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wFGCT -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wGCT -.if \n(80<\n(38 .nr 80 \n(38 -.80 -.rm 80 -.nr 81 0 -.nr 38 \w\f3説明\fP -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \wフル GC イベント数 -.if \n(81<\n(38 .nr 81 \n(38 -.81 -.rm 81 -.nr 38 \n(a- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(b- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(c- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(d- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(e- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(f- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(g- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(h- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(i- -.if \n(81<\n(38 .nr 81 \n(38 -.35 -.nf -.ll \n(34u -.nr 38 1n -.nr 79 0 -.nr 40 \n(79+(0*\n(38) -.nr 80 +\n(40 -.nr 41 \n(80+(3*\n(38) -.nr 81 +\n(41 -.nr TW \n(81 -.if t .if \n(TW>\n(.li .tm Table at line 785 file Input is too wide - \n(TW units -.fc   -.nr #T 0-1 -.nr #a 0-1 -.eo -.de T# -.ds #d .d -.if \(ts\n(.z\(ts\(ts .ds #d nl -.mk ## -.nr ## -1v -.ls 1 -.ls -.. -.ec -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'ガベージコレクション統計データの概要\h'|\n(41u' -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f3列\fP\h'|\n(41u'\f3説明\fP -.ne \n(a|u+\n(.Vu -.if (\n(a|+\n(#^-1v)>\n(#- .nr #- +(\n(a|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'S0\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.a+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(b|u+\n(.Vu -.if (\n(b|+\n(#^-1v)>\n(#- .nr #- +(\n(b|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'S1\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.b+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(c|u+\n(.Vu -.if (\n(c|+\n(#^-1v)>\n(#- .nr #- +(\n(c|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'E\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.c+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(d|u+\n(.Vu -.if (\n(d|+\n(#^-1v)>\n(#- .nr #- +(\n(d|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'O\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.d+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(e|u+\n(.Vu -.if (\n(e|+\n(#^-1v)>\n(#- .nr #- +(\n(e|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'P\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.e+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(f|u+\n(.Vu -.if (\n(f|+\n(#^-1v)>\n(#- .nr #- +(\n(f|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'YGC\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.f+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(g|u+\n(.Vu -.if (\n(g|+\n(#^-1v)>\n(#- .nr #- +(\n(g|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'YGCT\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.g+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'FGC\h'|\n(41u'フル GC イベント数 -.ne \n(h|u+\n(.Vu -.if (\n(h|+\n(#^-1v)>\n(#- .nr #- +(\n(h|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'FGCT\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.h+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(i|u+\n(.Vu -.if (\n(i|+\n(#^-1v)>\n(#- .nr #- +(\n(i|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'GCT\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.i+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.fc -.nr T. 1 -.T# 1 -.35 -.rm a+ -.rm b+ -.rm c+ -.rm d+ -.rm e+ -.rm f+ -.rm g+ -.rm h+ -.rm i+ -.TE -.if \n-(b.=0 .nr c. \n(.c-\n(d.-43 - -.LP -.SS -\-printcompilation オプション -.LP -.LP -.TS -.if \n+(b.=1 .nr d. \n(.c-\n(c.-1 -.de 35 -.ps \n(.s -.vs \n(.vu -.in \n(.iu -.if \n(.u .fi -.if \n(.j .ad -.if \n(.j=0 .na -.. -.nf -.nr #~ 0 -.if n .nr #~ 0.6n -.ds #d .d -.if \(ts\n(.z\(ts\(ts .ds #d nl -.fc -.nr 33 \n(.s -.rm 80 81 -.nr 34 \n(.lu -.eo -.am 81 -.br -.di a+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -実行されたコンパイルタスクの数 -.br -.di -.nr a| \n(dn -.nr a- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di b+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -メソッドのバイトコードのバイト数 -.br -.di -.nr b| \n(dn -.nr b- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di c+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -コンパイル方法を特定するクラス名とメソッド名。クラス名では、名前空間の区切り文字として、「.」の代わりに「/」が使用される。メソッド名は、指定されたクラス内のメソッドである。これらの 2 つのフィールドの形式は、HotSpot \- \f3XX:+PrintComplation\fP オプションと対応している -.br -.di -.nr c| \n(dn -.nr c- \n(dl -.. -.ec \ -.35 -.nf -.ll \n(34u -.nr 80 0 -.nr 38 \wHotSpot コンパイル方法の統計データ -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w\f3列\fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wCompiled -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wサイズ -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w型 -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wメソッド -.if \n(80<\n(38 .nr 80 \n(38 -.80 -.rm 80 -.nr 81 0 -.nr 38 \w\f3説明\fP -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \wコンパイルタイプ -.if \n(81<\n(38 .nr 81 \n(38 -.81 -.rm 81 -.nr 38 \n(a- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(b- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(c- -.if \n(81<\n(38 .nr 81 \n(38 -.35 -.nf -.ll \n(34u -.nr 38 1n -.nr 79 0 -.nr 40 \n(79+(0*\n(38) -.nr 80 +\n(40 -.nr 41 \n(80+(3*\n(38) -.nr 81 +\n(41 -.nr TW \n(81 -.if t .if \n(TW>\n(.li .tm Table at line 811 file Input is too wide - \n(TW units -.fc   -.nr #T 0-1 -.nr #a 0-1 -.eo -.de T# -.ds #d .d -.if \(ts\n(.z\(ts\(ts .ds #d nl -.mk ## -.nr ## -1v -.ls 1 -.ls -.. -.ec -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'HotSpot コンパイル方法の統計データ\h'|\n(41u' -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f3列\fP\h'|\n(41u'\f3説明\fP -.ne \n(a|u+\n(.Vu -.if (\n(a|+\n(#^-1v)>\n(#- .nr #- +(\n(a|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'Compiled\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.a+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(b|u+\n(.Vu -.if (\n(b|+\n(#^-1v)>\n(#- .nr #- +(\n(b|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'サイズ\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.b+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'型\h'|\n(41u'コンパイルタイプ -.ne \n(c|u+\n(.Vu -.if (\n(c|+\n(#^-1v)>\n(#- .nr #- +(\n(c|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'メソッド\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.c+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.fc -.nr T. 1 -.T# 1 -.35 -.rm a+ -.rm b+ -.rm c+ -.TE -.if \n-(b.=0 .nr c. \n(.c-\n(d.-19 - -.LP .SH "例" -.LP -.LP -この項では、21891 の \f2lvmid\fP を持つローカル JVM を監視する例を示します。 -.LP -.SS -gcutil オプションの使用 -.LP -.LP -この例は、\f2lvmid\fP 21891 に接続して、250 ミリ秒間隔で 7 つのサンプルを取得し、\f3\-gcutil\fP オプションでの指定に従って出力を表示します。 -.LP +.PP +この項では、21891の\fIlvmid\fRを持つローカルJVMをモニタリングする例を示します。 +.SS "gcutilオプション" +.PP +この例では、lvmid 21891に接続して、250ミリ秒間隔で7つのサンプルを取得し、\-\fIgcutil\fRオプションでの指定に従って出力を表示します。 +.PP +この例の出力は、若い世代のコレクションが3番目と4番目のサンプル間で行われたことを示しています。コレクションには0\&.001秒かかっており、オブジェクトがEden領域(E)からOld領域(O)に昇格したため、Old領域の使用率は9\&.49%から9\&.51%に増加しています。Survivor領域は、コレクション前は12\&.44%が使用されていましたが、コレクション後の使用は7\&.74%のみです。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -\fP\f3jstat \-gcutil 21891 250 7\fP -.br - -.fl - S0 S1 E O P YGC YGCT FGC FGCT GCT -.br - -.fl - 12.44 0.00 27.20 9.49 96.70 78 0.176 5 0.495 0.672 -.br - -.fl - 12.44 0.00 62.16 9.49 96.70 78 0.176 5 0.495 0.672 -.br - -.fl - 12.44 0.00 83.97 9.49 96.70 78 0.176 5 0.495 0.672 -.br - -.fl - 0.00 7.74 0.00 9.51 96.70 79 0.177 5 0.495 0.673 -.br - -.fl - 0.00 7.74 23.37 9.51 96.70 79 0.177 5 0.495 0.673 -.br - -.fl - 0.00 7.74 43.82 9.51 96.70 79 0.177 5 0.495 0.673 -.br - -.fl - 0.00 7.74 58.11 9.51 96.71 79 0.177 5 0.495 0.673 -.br - -.fl +jstat \-gcutil 21891 250 7 + S0 S1 E O M YGC YGCT FGC FGCT GCT +0\&.00 99\&.74 13\&.49 7\&.86 95\&.82 3 0\&.124 0 0\&.000 0\&.124 +0\&.00 99\&.74 13\&.49 7\&.86 95\&.82 3 0\&.124 0 0\&.000 0\&.124 +0\&.00 99\&.74 13\&.49 7\&.86 95\&.82 3 0\&.124 0 0\&.000 0\&.124 +0\&.00 99\&.74 13\&.49 7\&.86 95\&.82 3 0\&.124 0 0\&.000 0\&.124 +0\&.00 99\&.74 13\&.80 7\&.86 95\&.82 3 0\&.124 0 0\&.000 0\&.124 +0\&.00 99\&.74 13\&.80 7\&.86 95\&.82 3 0\&.124 0 0\&.000 0\&.124 +0\&.00 99\&.74 13\&.80 7\&.86 95\&.82 3 0\&.124 0 0\&.000 0\&.124 .fi - -.LP -.LP -この例の出力は、若い世代のコレクションが 3 番目と 4 番目のサンプル間で行われたことを示しています。コレクションには 0.001 秒かかっており、オブジェクトが Eden 領域 (E) から Old 領域 (O) に昇格したため、Old 領域の使用率は 9.49% から 9.51% に増加しています。Survivor 領域は、コレクション前は 12.44% が使用されていましたが、コレクション後は 7.74% しか使用されていません。 -.LP -.SS -列ヘッダー文字列の繰り返し -.LP -.LP -この例は、\f2lvmid\fP 21891 に接続して、250 ミリ秒間隔でサンプルを取得し、\f3\-gcutil\fP オプションでの指定に従って出力を表示します。さらに、\f3\-h3\fP オプションを使用して、データが 3 行表示されるごとに列ヘッダーを出力します。 -.LP -.nf -\f3 -.fl -\fP\f3jstat \-gcnew \-h3 21891 250\fP -.br - -.fl - S0C S1C S0U S1U TT MTT DSS EC EU YGC YGCT -.br - -.fl - 64.0 64.0 0.0 31.7 31 31 32.0 512.0 178.6 249 0.203 -.br - -.fl - 64.0 64.0 0.0 31.7 31 31 32.0 512.0 355.5 249 0.203 -.br - -.fl - 64.0 64.0 35.4 0.0 2 31 32.0 512.0 21.9 250 0.204 -.br - -.fl - S0C S1C S0U S1U TT MTT DSS EC EU YGC YGCT -.br - -.fl - 64.0 64.0 35.4 0.0 2 31 32.0 512.0 245.9 250 0.204 -.br - -.fl - 64.0 64.0 35.4 0.0 2 31 32.0 512.0 421.1 250 0.204 -.br - -.fl - 64.0 64.0 0.0 19.0 31 31 32.0 512.0 84.4 251 0.204 -.br - -.fl - S0C S1C S0U S1U TT MTT DSS EC EU YGC YGCT -.br - -.fl - 64.0 64.0 0.0 19.0 31 31 32.0 512.0 306.7 251 0.204 -.br - -.fl -.fi - -.LP -.LP -この例では、ヘッダー文字列の繰り返しが見られるほかにも、2 番目と 3 番目のサンプル間で Young GC が行われたことがわかります。この継続時間は 0.001 秒でした。このコレクションでは、Survivor 領域 0 の使用率 (S0U) が適切な Survivor サイズ (DSS) を超過することになるライブデータが検出されました。この結果、オブジェクトは、Old 世代 (この出力には非表示) へ昇格され、殿堂入りしきい値 (TT) が、31 から 2 へ降格されました。 -.LP -.LP -別のコレクションが、5 番目と 6 番目のサンプル間で行われています。このコレクションでは、Survivor がほとんど見られず、殿堂入りしきい値を 31 に戻しました。 -.LP -.SS -サンプルごとのタイムスタンプの挿入 -.LP -.LP -この例は、\f2lvmid\fP 21891 へ接続し、250 ミリ秒間隔で 3 つのサンプルを取得しています。\f3\-t\fP オプションを使用して、最初の列にサンプルごとのタイムスタンプを表示しています。 -.LP -.nf -\f3 -.fl -\fP\f3jstat \-gcoldcapacity \-t 21891 250 3\fP -.br - -.fl -Timestamp OGCMN OGCMX OGC OC YGC FGC FGCT GCT -.br - -.fl - 150.1 1408.0 60544.0 11696.0 11696.0 194 80 2.874 3.799 -.br - -.fl - 150.4 1408.0 60544.0 13820.0 13820.0 194 81 2.938 3.863 -.br - -.fl - 150.7 1408.0 60544.0 13820.0 13820.0 194 81 2.938 3.863 -.br - -.fl -.fi - -.LP -.LP -\f2Timestamp\fP 列には、ターゲット JVM の起動時からの経過時間が、秒単位でレポートされています。さらに、\f3\-gcoldcapacity\fP 出力では、割り当て要求または昇格要求あるいはその両方を満たすためにヒープが拡張するごとに、Old 世代の容量 (OGC) と Old 領域の容量 (OC) とが増加していることがわかります。Old 世代の容量 (OGC) は、81 番目のフル GC (FGC) 後に、11696 KB から 13820 KB へ増加しています。Old 世代 (および領域) の最大容量は、60544 KB (OGCMX) なので、まだ拡張できる余裕が残されています。 -.LP -.SS -リモート JVM のインストゥルメンテーションの監視 -.LP -.LP -この例は、\f3\-gcutil\fP オプションを使用して、\f2remote.domain\fP というシステム上の \f2lvmid\fP 40496 に接続し、サンプルを秒単位で無期限に取得しています。 -.LP -.nf -\f3 -.fl -\fP\f3jstat \-gcutil 40496@remote.domain 1000\fP -.br - -.fl -... \f2output omitted\fP -.br - -.fl -.fi - -.LP -.LP -\f2lvmid\fP は、リモートホストの名前と結合されて、\f240496@remote.domain\fP の \f2vmid\fP を構成しています。結果として、この \f2vmid\fP は、\f3rmi\fP プロトコルを使用して、リモートホスト上のデフォルトの \f3jstatd\fP サーバーと通信します。\f3jstatd\fP サーバーは、\f3rmiregistry\fP を使用して、デフォルトの \f3rmiregistry\fP ポート (ポート 1099) にバインドされた \f2remote.domain\fP に配置されれます。 -.LP -.SH "関連項目" -.LP -.RS 3 -.TP 2 -o -「java(1) \- Java アプリケーション起動ツール」 -.TP 2 -o -「jps(1) \- Java 仮想マシンプロセスステータスツール」 -.TP 2 -o -「jstatd(1) \- 仮想マシン jstat デーモン」 -.TP 2 -o -「rmiregistry(1) \- Java リモートオブジェクトレジストリ」 +.if n \{\ .RE - -.LP - +.\} +.SS "列ヘッダー文字列の繰返し" +.PP +この例では、lvmid 21891に接続して、250ミリ秒間隔でサンプルを取得し、\fI\-gcutil\fRオプションでの指定に従って出力を表示します。さらに、\fI\-h3\fRオプションを使用して、データが3行表示されるごとに列ヘッダーを出力します。 +.PP +この例では、ヘッダー文字列の繰返しが表示されているほか、2番目と3番目のサンプル間でYoung GCが行われたことがわかります。この継続時間は0\&.001秒でした。このコレクションでは、Survivor領域0の使用率(S0U)が適切なSurvivorサイズ(DSS)を超過することになるアクティブ・データが検出されました。この結果、オブジェクトは、Old世代(この出力には非表示)へ昇格され、殿堂入りしきい値(TT)が、31から2へ降格されました。 +.PP +別のコレクションが、5番目と6番目のサンプル間で行われています。このコレクションでは、Survivorがほとんど見られず、殿堂入りしきい値を31に戻しました。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +jstat \-gcnew \-h3 21891 250 + S0C S1C S0U S1U TT MTT DSS EC EU YGC YGCT + 64\&.0 64\&.0 0\&.0 31\&.7 31 31 32\&.0 512\&.0 178\&.6 249 0\&.203 + 64\&.0 64\&.0 0\&.0 31\&.7 31 31 32\&.0 512\&.0 355\&.5 249 0\&.203 + 64\&.0 64\&.0 35\&.4 0\&.0 2 31 32\&.0 512\&.0 21\&.9 250 0\&.204 + S0C S1C S0U S1U TT MTT DSS EC EU YGC YGCT + 64\&.0 64\&.0 35\&.4 0\&.0 2 31 32\&.0 512\&.0 245\&.9 250 0\&.204 + 64\&.0 64\&.0 35\&.4 0\&.0 2 31 32\&.0 512\&.0 421\&.1 250 0\&.204 + 64\&.0 64\&.0 0\&.0 19\&.0 31 31 32\&.0 512\&.0 84\&.4 251 0\&.204 + S0C S1C S0U S1U TT MTT DSS EC EU YGC YGCT + 64\&.0 64\&.0 0\&.0 19\&.0 31 31 32\&.0 512\&.0 306\&.7 251 0\&.204 +.fi +.if n \{\ +.RE +.\} +.SS "サンプルごとのタイムスタンプの挿入" +.PP +この例では、lvmid21891へ接続し、250ミリ秒間隔で3つのサンプルを取得しています。\fI\-t\fRオプションを使用して、最初の列にサンプルごとのタイムスタンプを表示しています。 +.PP +Timestamp列には、ターゲットJVMの起動時からの経過時間が、秒単位でレポートされています。さらに、\fI\-gcoldcapacity\fR出力では、割当リクエストまたは昇格リクエストあるいはその両方を満たすためにヒープが拡張するたびに、Old世代の容量(OGC)とOld領域の容量(OC)とが増加していることがわかります。81番目のフル・ガベージ・コレクション(FGC)の後、Old世代の容量(OGC)は11,696 KBから13820 KBに増加しました。この世代(および領域)の最大容量は、60,544 KB (OGCMX)なので、まだ拡張できる余裕が残されています。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +Timestamp OGCMN OGCMX OGC OC YGC FGC FGCT GCT + 150\&.1 1408\&.0 60544\&.0 11696\&.0 11696\&.0 194 80 2\&.874 3\&.799 + 150\&.4 1408\&.0 60544\&.0 13820\&.0 13820\&.0 194 81 2\&.938 3\&.863 + 150\&.7 1408\&.0 60544\&.0 13820\&.0 13820\&.0 194 81 2\&.938 3\&.863 +.fi +.if n \{\ +.RE +.\} +.SS "リモートJVMのインストゥルメンテーションの監視" +.PP +この例は、\fI\-gcutil\fRオプションを使用して、remote\&.domainというシステム上のlvmid 40496に接続し、サンプルを秒単位で無期限に取得しています。 +.PP +lvmidは、リモート・ホストの名前と結合されて、\fI40496@remote\&.domain\fRの\fIvmid\fRを構成しています。結果として、このvmidは、\fIrmi\fRプロトコルを使用して、リモート・ホスト上のデフォルトの\fIjstatd\fRサーバーと通信します。\fIjstatd\fRサーバーは、rmiregistryを使用して、デフォルトのrmiregistryポート(ポート1099)にバインドされた\fIremote\&.domain\fRに配置されます。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +jstat \-gcutil 40496@remote\&.domain 1000 +\fI\&.\&.\&. output omitted\fR +.fi +.if n \{\ +.RE +.\} +.SH "関連項目" +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +java(1) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +jps(1) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +jstatd(1) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +rmiregistry(1) +.RE +.br +'pl 8.5i +'bp diff --git a/jdk/src/linux/doc/man/ja/jstatd.1 b/jdk/src/linux/doc/man/ja/jstatd.1 index 9eeffc439d9..cfd8e4e4b82 100644 --- a/jdk/src/linux/doc/man/ja/jstatd.1 +++ b/jdk/src/linux/doc/man/ja/jstatd.1 @@ -1,286 +1,268 @@ -." Copyright (c) 2004, 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. -." -.TH jstatd 1 "07 May 2011" - -.LP -.SH "名前" -jstatd \- 仮想マシン jstat デーモン -.LP -.RS 3 -.TP 2 -o -形式 -.TP 2 -o -パラメータ -.TP 2 -o -説明 -.TP 2 -o -オプション -.TP 2 -o -セキュリティー -.TP 2 -o -リモートインタフェース -.TP 2 -o -例 -.TP 2 -o -関連項目 -.RE - -.LP -.SH "形式" -.LP +'\" t +.\" Copyright (c) 2004, 2013, Oracle and/or its affiliates. All rights reserved. +.\" Title: jstatd +.\" Language: English +.\" Date: 2013年11月21日 +.\" SectDesc: モニタリング・ツール +.\" Software: JDK 8 +.\" Arch: 汎用 +.\" +.\" 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. +.\" +.pl 99999 +.TH "jstatd" "1" "2013年11月21日" "JDK 8" "モニタリング・ツール" +.\" ----------------------------------------------------------------- +.\" * Define some portability stuff +.\" ----------------------------------------------------------------- +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.\" http://bugs.debian.org/507673 +.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" ----------------------------------------------------------------- +.\" * set default formatting +.\" ----------------------------------------------------------------- +.\" disable hyphenation +.nh +.\" disable justification (adjust text to left margin only) +.ad l +.\" ----------------------------------------------------------------- +.\" * MAIN CONTENT STARTS HERE * +.\" ----------------------------------------------------------------- +.SH "NAME" +jstatd \- Java仮想マシン(JVM)をモニターし、リモート・モニタリング・ツールがJVMに接続できるようにします。このコマンドは試験的なもので、サポートされていません。 +.SH "概要" +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -jstatd [ \fP\f4options\fP\f3 ]\fP -.br -\f3 -.fl -\fP +\fIjstatd\fR [ \fIoptions\fR ] .fi - -.LP -.SH "パラメータ" -.LP -.RS 3 -.TP 3 -options -コマンド行オプション。オプションは任意の順序で指定できます。重複または矛盾するオプションがある場合、最後に指定したオプションが優先されます。 +.if n \{\ .RE - -.LP -.SH " 説明" -.LP -.LP -\f3jstatd\fP ツールは、計測された HotSpot Java 仮想マシン (JVM) の作成と終了を監視し、ローカルシステム上で実行している Java 仮想マシンに、リモート監視ツールが接続できるようにするためのインタフェースを提供する RMI サーバーアプリケーションです。 -.LP -.LP -\f3jstatd\fP サーバーでは、ローカルホストに RMI レジストリが存在することが必要になります。\f3jstatd\fP サーバーは、デフォルトポートまたは \f2\-p port\fP オプションで指定されたポート上の RMI レジストリに接続しようとします。RMI レジストリが見つからない場合、\f2\-p port\fP オプションで指定されたポート、または \f2\-p port\fP が省略されている場合は、デフォルト RMI レジストリにバインドされた \f3jstatd\fP アプリケーション内に、1 つの RMI レジストリが作成されます。内部 RMI レジストリの作成は、\f2\-nr\fP オプションを指定することによって禁止することができます。 -.LP -.LP -\f3注:\fP このユーティリティーはサポート対象外であり、将来の JDK のバージョンでは利用できなくなる可能性があります。現在、Windows 98 および Windows Me プラットフォームでは使用できません。 -.LP +.\} +.PP +\fIoptions\fR +.RS 4 +コマンドライン・オプション。オプションを参照してください。 +.RE +.SH "説明" +.PP +\fIjstatd\fRコマンドは、計測されたJava HotSpot VMの作成と終了をモニターし、ローカル・システム上で実行されているJVMに、リモート・モニタリング・ツールが接続できるようにするためのインタフェースを提供するRMIサーバー・アプリケーションです。 +.PP +\fIjstatd\fRサーバーでは、ローカル・ホストにRMIレジストリが必要になります。\fIjstatd\fRサーバーはデフォルト・ポートで、または\fI\-p\fR +\fIport\fRオプションで指定したポートで、RMIレジストリに接続しようとします。RMIレジストリが見つからない場合、\fI\-p\fR +\fIport\fRオプションで指定されたポート、または\fI\-p\fR +\fIport\fRオプションが省略されている場合は、デフォルトRMIレジストリにバインドされた\fIjstatd\fRアプリケーション内に、1つのRMIレジストリが作成されます。内部RMIレジストリの作成は、\fI\-nr\fRオプションを指定することによって中止できます。 .SH "オプション" -.LP -.LP -\f3jstatd\fP コマンドは次のオプションをサポートしています。 -.LP -.RS 3 -.TP 3 -\-nr -既存の RMI レジストリが見つからない場合、\f2jstatd\fP プロセス内に内部 RMI レジストリを作成しないようにします。 -.TP 3 -\-p\ port -RMI レジストリがあると予想されるポート番号です。 見つからない場合は、\f2\-nr\fP が指定されていなければ作成されます。 -.TP 3 -\-n\ rminame -RMI レジストリにおいて、リモート RMI オブジェクトがバインドされる名前です。デフォルト名は \f2JStatRemoteHost\fP です。複数の \f3jstatd\fP サーバーが同じホスト上で起動している場合、各サーバーのエクスポートした RMI オブジェクトの名前は、このオプションを指定することによって、一意の名前にすることができます。ただし、このオプションを使用する場合、監視クライアントの \f2hostid\fP および \f2vmid\fP 文字列に、その一意のサーバー名を含める必要があります。 -.TP 3 -\-Joption -\f3javac\fP が呼び出す \f3java\fP 起動ツールに、\f2option\fP を渡します。たとえば、\f3\-J\-Xms48m\fP と指定すると、スタートアップメモリーは 48M バイトに設定されます。\f3\-J\fP を使って、Java で記述されたアプリケーションを実行する背後の VM にオプション渡すことは、よく行われています。 +.PP +\-nr +.RS 4 +既存のRMIレジストリが見つからない場合、\fIjstatd\fRプロセス内に内部RMIレジストリを作成しないようにします。 .RE - -.LP -.SH "セキュリティー" -.LP -.LP -\f3jstatd\fP サーバーは、有効なネイティブアクセス権を持つ JVM だけを監視できます。したがって、\f3jstatd\fP プロセスは、ターゲット JVM と同じユーザー資格で実行している必要があります。一部のユーザー資格は、UNIX(TM) ベースのシステムにおける \f2root\fP ユーザーのように、システム上の任意の JVM によってエクスポートされたインストゥルメンテーションへのアクセス権を持っています。このような資格で実行している \f3jstatd\fP プロセスは、システム上のすべての JVM を監視できますが、セキュリティー上の別の問題が起こります。 -.LP -.LP -\f3jstatd\fP サーバーは、リモートクライアントの認証を一切与えません。そのため、\f3jstatd\fP サーバープロセスを実行すると、\f3jstatd\fP プロセスがアクセス権を持つすべての JVM によるインストゥルメンテーションのエクスポートを、ネットワーク上のすべてのユーザーに公開することになります。この無防備な状態は、環境的に望ましくない場合があります。 特に実稼働環境または安全でないネットワークでは、\f3jstatd\fP プロセスを起動する前に、ローカルセキュリティーポリシーを検討する必要があります。 -.LP -.LP -\f3jstatd\fP サーバーは、他のセキュリティーマネージャーがインストールされていない場合には、RMISecurityPolicy のインスタンスをインストールします。 そのため、セキュリティーポリシーファイルを指定する必要があります。ポリシーファイルは、デフォルトポリシー実装の -.na -\f2ポリシーファイルの構文\fP @ -.fi -http://java.sun.com/javase/6/docs/technotes/guides/security/PolicyFiles.htmlに準拠する必要があります。 -.LP -.LP -次のポリシーファイルの場合、\f3jstatd\fP サーバーは一切のセキュリティー例外を使用せずに実行できます。このポリシーは、すべてのコードベースへのあらゆるアクセス権を認めるポリシーよりも自由度は低いですが、\f3jstatd\fP サーバーを実行するために最低限必要なアクセス権しか認めないポリシーよりも自由度は高くなっています。 -.LP +.PP +\-p \fIport\fR +.RS 4 +RMIレジストリがあると予想されるポート番号です。見つからない場合は、\fI\-nr\fRオプションが指定されていなければ作成されます。 +.RE +.PP +\-n \fIrminame\fR +.RS 4 +RMIレジストリにおいて、リモートRMIオブジェクトがバインドされる名前です。デフォルト名は\fIJStatRemoteHost\fRです。複数の\fIjstatd\fRサーバーが同じホスト上で起動している場合、各サーバーのエクスポートしたRMIオブジェクトの名前は、このオプションを指定することによって、一意の名前にすることができます。ただし、このオプションを使用する場合、モニタリング・クライアントの\fIhostid\fRおよび\fIvmid\fR文字列に、その一意のサーバー名を含める必要があります。 +.RE +.PP +\-J\fIoption\fR +.RS 4 +JVMに\fIoption\fRを渡します。optionには、Javaアプリケーション起動ツールのリファレンス・ページに記載されている\fIオプション\fRを1つ指定します。たとえば、\fI\-J\-Xms48m\fRと指定すると、スタートアップ・メモリーは48MBに設定されます。java(1)を参照してください。 +.RE +.SH "セキュリティ" +.PP +\fIjstatd\fRサーバーは、適切なネイティブ・アクセス権を持つJVMのみを監視できます。したがって、\fIjstatd\fRプロセスは、ターゲットJVMと同じユーザー資格で実行されている必要があります。UNIXベースのシステムにおけるrootユーザーなどの一部のユーザー資格は、システム上の任意のJVMによってエクスポートされたインストゥルメンテーションへのアクセス権を持っています。このような資格で実行されている\fIjstatd\fRプロセスは、システム上のすべてのJVMを監視できますが、セキュリティ上の別の問題が起こります。 +.PP +\fIjstatd\fRサーバーには、リモート・クライアントの認証機能がありません。そのため、\fIjstatd\fRサーバー・プロセスを実行すると、\fIjstatd\fRプロセスがアクセス権を持つすべてのJVMによるインストゥルメンテーションのエクスポートを、ネットワーク上のすべてのユーザーに公開することになります。この無防備な状態は、環境によっては望ましくない場合があるので、特に実稼働環境または安全でないネットワークでは、\fIjstatd\fRプロセスを起動する前に、ローカル・セキュリティ・ポリシーを検討する必要があります。 +.PP +\fIjstatd\fRサーバーは、他のセキュリティ・マネージャがインストールされていない場合には、\fIRMISecurityPolicy\fRのインスタンスをインストールします。そのため、セキュリティ・ポリシー・ファイルを指定する必要があります。ポリシー・ファイルは、http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/security/PolicyFiles\&.htmlにある +「デフォルトのPolicyの実装とポリシー・ファイルの構文」に準拠している必要があります +.PP +次のポリシー・ファイルでは、セキュリティ例外を発生せずに\fIjstatd\fRサーバーを実行できます。このポリシーは、すべてのコード・ベースへのあらゆるアクセス権を認めるポリシーよりも自由度が低いですが、\fIjstatd\fRサーバーを実行するために最低限必要なアクセス権のみを認めるポリシーよりも自由度が高くなっています。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -grant codebase "file:${java.home}/../lib/tools.jar" {\fP -.br -\f3 -.fl - permission java.security.AllPermission;\fP -.br -\f3 -.fl -};\fP -.br -\f3 -.fl -\fP +grant codebase "file:${java\&.home}/\&.\&./lib/tools\&.jar" { + permission java\&.security\&.AllPermission; +}; .fi - -.LP -.LP -このポリシーを使用するには、このテキストを \f2jstatd.all.policy\fP というファイルにコピーし、次のように \f3jstatd\fP サーバーを実行します。 -.LP +.if n \{\ +.RE +.\} +.PP +このポリシー設定を使用するには、このテキストを\fIjstatd\&.all\&.policy\fRというファイルにコピーし、次のように\fIjstatd\fRサーバーを実行します。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -jstatd \-J\-Djava.security.policy=jstatd.all.policy\fP -.br -\f3 -.fl -\fP +jstatd \-J\-Djava\&.security\&.policy=jstatd\&.all\&.policy .fi - -.LP -.LP -より厳しいセキュリティーを実施するサイトの場合、カスタムポリシーファイルを使用して、特定の信頼できるホストまたはネットワークにアクセスを制限することができます。 ただし、このような方法は、IP アドレスの盗聴攻撃を受けやすくなります。セキュリティーの問題について、カスタマイズしたポリシーファイルでも対処できない場合は、\f3jstatd\fP サーバーを実行せずに、\f3jstat\fP と \f3jps\fP ツールをローカルで使用することがもっとも安全な方法になります。 -.LP -.SH "リモートインタフェース" -.LP -.LP -\f3jstatd\fP プロセスがエクスポートするインタフェースは、独自に開発したものであり変更される予定です。ユーザーおよび開発者は、このインタフェースへの書き込みを行わないでください。 -.LP +.if n \{\ +.RE +.\} +.PP +より厳しいセキュリティを実施するサイトの場合、カスタム・ポリシー・ファイルを使用して、特定の信頼できるホストまたはネットワークにアクセスを制限することができます。ただし、このような方法は、IPアドレスの盗聴攻撃を受けやすくなります。セキュリティの問題について、カスタマイズしたポリシー・ファイルでも対処できない場合は、\fIjstatd\fRサーバーを実行せずに、\fIjstat\fRと\fIjps\fRツールをローカルで使用することが最も安全な方法になります。 +.SH "リモート・インタフェース" +.PP +\fIjstatd\fRプロセスがエクスポートするインタフェースは、独自に開発したものであり変更される予定です。ユーザーおよび開発者は、このインタフェースへの書込みを行わないでください。 .SH "例" -.LP -.LP -次に \f3jstatd\fP を起動する例を紹介します。\f3jstatd\fP スクリプトによって、サーバーはバックグラウンドで自動的に起動します。 -.LP -.SS -内部 RMI レジストリの使用 -.LP -.LP -この例は、内部 RMI レジストリを使用した \f3jstatd\fP の起動を表しています。この例では、デフォルトの RMI レジストリポート (ポート 1099) には、他のサーバーはバインドされていないと想定しています。 -.LP +.PP +次に、\fIjstatd\fRコマンドの例を示します。\fIjstatd\fRスクリプトによって、サーバーはバックグラウンドで自動的に起動します。 +.SS "内部RMIレジストリ" +.PP +この例は、内部RMIレジストリを使用したホストによる\fIjstatd\fRセッションの起動を表しています。この例では、デフォルトのRMIレジストリ・ポート(ポート1099)には、他のサーバーはバインドされていないと想定しています。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -jstatd \-J\-Djava.security.policy=all.policy -.fl -\fP +jstatd \-J\-Djava\&.security\&.policy=all\&.policy .fi - -.LP -.SS -外部 RMI レジストリの使用 -.LP -.LP -この例は、外部 RMI レジストリを使用した \f3jstatd\fP の起動を表しています。 -.LP -.nf -\f3 -.fl -rmiregistry& -.fl -jstatd \-J\-Djava.security.policy=all.policy -.fl -\fP -.fi - -.LP -.LP -この例は、ポート 2020 の外部 RMI レジストリを使用した \f3jstatd\fP の起動を表しています。 -.LP -.nf -\f3 -.fl -rmiregistry 2020& -.fl -jstatd \-J\-Djava.security.policy=all.policy \-p 2020 -.fl -\fP -.fi - -.LP -.LP -この例は、AlternateJstatdServerName の名前にバインドされた、ポート 2020 の外部 RMI レジストリを使用した \f3jstatd\fP の起動を表しています。 -.LP -.nf -\f3 -.fl -rmiregistry 2020& -.fl -jstatd \-J\-Djava.security.policy=all.policy \-p 2020 \-n AlternateJstatdServerName -.fl -\fP -.fi - -.LP -.SS -インプロセス RMI レジストリの作成の禁止 -.LP -.LP -この例は、RMI レジストリが見つからない場合に RMI レジストリを作成しない \f3jstatd\fP の起動を表しています。この例では、RMI レジストリがすでに実行していると想定しています。実行していない場合は、該当するエラーメッセージが表示されます。 -.LP -.nf -\f3 -.fl -jstatd \-J\-Djava.security.policy=all.policy \-nr -.fl -\fP -.fi - -.LP -.SS -RMI ログ機能の有効化 -.LP -.LP -この例は、RMI ログ機能を有効にした \f3jstatd\fP の起動を表しています。この方法は、トラブルシューティングまたはサーバー活動の監視に役立ちます。 -.LP -.nf -\f3 -.fl -jstatd \-J\-Djava.security.policy=all.policy \-J\-Djava.rmi.server.logCalls=true -.fl -\fP -.fi - -.LP -.SH "関連項目" -.LP -.RS 3 -.TP 2 -o -「java(1) \- Java アプリケーション起動ツール」 -.TP 2 -o -「jps(1) \- Java 仮想マシンプロセスステータスツール」 -.TP 2 -o -「jstat(1) \- Java 仮想マシン統計データ監視ツール」 -.TP 2 -o -「 -.na -\f2rmiregistry\fP @ -.fi -http://java.sun.com/javase/6/docs/technotes/tools/index.html#rmi \- Java リモートオブジェクトレジストリ」 +.if n \{\ .RE - -.LP - +.\} +.SS "外部RMIレジストリ" +.PP +この例は、外部RMIレジストリを使用した\fIjstatd\fRセッションの起動を表しています。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +rmiregistry& +jstatd \-J\-Djava\&.security\&.policy=all\&.policy +.fi +.if n \{\ +.RE +.\} +.PP +この例では、ポート2020の外部RMIレジストリを使用して\fIjstatd\fRセッションを起動します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +jrmiregistry 2020& +jstatd \-J\-Djava\&.security\&.policy=all\&.policy \-p 2020 +.fi +.if n \{\ +.RE +.\} +.PP +この例では、ポート2020の外部RMIレジストリを使用して、\fIAlternateJstatdServerName\fRにバインドされている\fIjstatd\fRセッションを起動します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +rmiregistry 2020& +jstatd \-J\-Djava\&.security\&.policy=all\&.policy \-p 2020 + \-n AlternateJstatdServerName +.fi +.if n \{\ +.RE +.\} +.SS "インプロセスRMIレジストリの作成の停止" +.PP +この例では、外部RMIレジストリがない場合に作成しない\fIjstatd\fRセッションを起動します。この例では、RMIレジストリがすでに実行されていると想定しています。RMIレジストリが実行されていない場合、エラー・メッセージが表示されます。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +jstatd \-J\-Djava\&.security\&.policy=all\&.policy \-nr +.fi +.if n \{\ +.RE +.\} +.SS "RMIロギングの有効化" +.PP +この例では、RMIロギング機能を有効化して\fIjstatd\fRセッションを起動します。この方法は、トラブルシューティングまたはサーバー活動のモニタリングに役立ちます。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +jstatd \-J\-Djava\&.security\&.policy=all\&.policy + \-J\-Djava\&.rmi\&.server\&.logCalls=true +.fi +.if n \{\ +.RE +.\} +.SH "関連項目" +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +java(1) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +jps(1) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +jstat(1) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +rmiregistry(1) +.RE +.br +'pl 8.5i +'bp diff --git a/jdk/src/linux/doc/man/ja/jvisualvm.1 b/jdk/src/linux/doc/man/ja/jvisualvm.1 index 25a29ca9610..d4d0d519bf6 100644 --- a/jdk/src/linux/doc/man/ja/jvisualvm.1 +++ b/jdk/src/linux/doc/man/ja/jvisualvm.1 @@ -1,126 +1,123 @@ -." Copyright (c) 2008, 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. -." -.TH jvisualvm 1 "07 May 2011" - -.LP -.SH "名前" -\f2jvisualvm\fP \- Java 仮想マシンの監視、トラブルシューティング、およびプロファイリングツール -.LP -.RS 3 -.TP 2 -o -形式 -.TP 2 -o -パラメータ -.TP 2 -o -説明 -.TP 2 -o -オプション -.TP 2 -o -使用方法 -.TP 2 -o -関連項目 -.RE - -.LP -.SH "形式" -.LP +'\" t +.\" Copyright (c) 2008, 2013, Oracle and/or its affiliates. All rights reserved. +.\" Title: jvisualvm +.\" Language: English +.\" Date: 2013年11月21日 +.\" SectDesc: Javaトラブルシューティング、プロファイリング、モニタリングおよび管理ツール +.\" Software: JDK 8 +.\" Arch: 汎用 +.\" +.\" 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. +.\" +.pl 99999 +.TH "jvisualvm" "1" "2013年11月21日" "JDK 8" "Javaトラブルシューティング、プロファイリング、モニタリン" +.\" ----------------------------------------------------------------- +.\" * Define some portability stuff +.\" ----------------------------------------------------------------- +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.\" http://bugs.debian.org/507673 +.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" ----------------------------------------------------------------- +.\" * set default formatting +.\" ----------------------------------------------------------------- +.\" disable hyphenation +.nh +.\" disable justification (adjust text to left margin only) +.ad l +.\" ----------------------------------------------------------------- +.\" * MAIN CONTENT STARTS HERE * +.\" ----------------------------------------------------------------- +.SH "NAME" +jvisualvm \- Javaアプリケーションを視覚的に監視、トラブルシュートおよびプロファイルします。 +.SH "概要" +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl - \fP\f3jvisualvm\fP [ \f2options\fP ] -.fl +\fIjvisualvm\fR [ \fIoptions\fR ] .fi - -.LP -.SH "パラメータ" -.LP -.LP -オプションを使用する場合、コマンド名の直後に記述してください。オプションの指定順序に決まりはありません。特定のオプションに適用されるパラメータについては、このあとの「オプション」を参照してください。 -.LP -.SH " 説明" -.LP -.LP -Java VisualVM は、指定された Java 仮想マシン (JVM(*)) で Java テクノロジベースのアプリケーション (Java アプリケーション) が実行されているときに、その Java アプリケーションに関する詳細な情報を提供する直感的なグラフィカルユーザーインタフェースです。Java VisualVM という名前は、Java VisualVM が JVM ソフトウェアに関する情報を「視覚的に」提供するという事実に由来しています。 -.LP -.LP -Java VisualVM は、いくつかの監視、トラブルシューティング、およびプロファイリングユーティリティーを 1 つのツールに統合します。たとえば、スタンドアロンツール \f2jmap\fP、 \f2jinfo\fP、 \f2jstat\fP 、および \f2jstack\fP で提供されている機能のほとんどが、Java VisualVM に組み込まれています。JConsole ツールによって提供される一部の機能など、ほかの機能はオプションのプラグインとして追加できます。 -.LP +.if n \{\ +.RE +.\} +.PP +\fIoptions\fR +.RS 4 +コマンドライン・オプション。オプションを参照してください。 +.RE +.SH "説明" +.PP +Java VisualVMは、指定されたJava仮想マシン(JVM)でJavaテクノロジ・ベースのアプリケーション(Javaアプリケーション)が実行されているときに、そのJavaアプリケーションに関する詳細な情報を提供する直感的なグラフィカル・ユーザー・インタフェースです。Java VisualVMという名前は、Java VisualVMがJVMソフトウェアに関する情報を視覚的に提供するという事実に由来しています。 +.PP +Java VisualVMは、いくつかのモニタリング、トラブルシューティングおよびプロファイリング・ユーティリティを1つのツールに統合します。たとえば、スタンドアロン・ツール\fIjmap\fR、\fIjinfo\fR、\fIjstat\fRおよび\fIjstack\fRで提供されている機能のほとんどが、Java VisualVMに組み込まれています。\fIjconsole\fRコマンドによって提供される一部の機能など、他の機能はオプションのプラグインとして追加できます。 +.PP +Java VisualVMは、Javaアプリケーションの開発者がアプリケーションのトラブルシューティングを行ったり、アプリケーションのパフォーマンスを監視および改善したりするのに役立ちます。Java VisualVMを使用すると、開発者はヒープ・ダンプの生成および解析、メモリー・リークの特定、ガベージ・コレクションの実行および監視、およびメモリーとCPUの簡易プロファイリングの実行が可能になります。プラグインでJava VisualVMの機能を拡張できます。たとえば、\fIjconsole\fRコマンドのほとんどの機能は、「MBean」タブおよびJConsole Plug\-in Wrapperプラグインを介して使用できます。標準のJava VisualVMプラグインのカタログから選択するには、Java VisualVMメニューの\fB「ツール」\fR、\fB「プラグイン」\fRを選択します。 +.PP +Java VisualVMを起動するには、次のコマンドを実行します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +% jvisualvm <options> +.fi +.if n \{\ +.RE +.\} .SH "オプション" -.LP -.LP -次のオプションは、Java VisualVM を起動したときに実行可能になります。 -.LP -.RS 3 -.TP 3 -\-J<jvm_option>\ -この \f2<jvm_option>\fP を JVM ソフトウェアに渡します。 +.PP +次のオプションは、Java VisualVMを起動したときに実行可能になります。 +.PP +\-J\fIjvm_option\fR +.RS 4 +この\fIjvm_option\fRをJVMソフトウェアに渡します。 .RE - -.LP -.SH "使用方法" -.LP -.LP -Java VisualVM は、Java アプリケーションの開発者がアプリケーションのトラブルシューティングを行なったり、アプリケーションのパフォーマンスを監視および改善したりするのに役立ちます。Java VisualVM を使用すると、開発者はヒープダンプの生成および解析、メモリーリークの特定、ガベージコレクションの実行および監視、およびメモリーと CPU の簡易プロファイリングの実行が可能になります。Java VisualVM の機能を拡張するプラグインもいくつかあります。たとえば、JConsole ツールのほとんどの機能は、MBeans タブおよび JConsole Plug\-in Wrapper プラグインを介して使用できます。標準の Java VisualVM プラグインのカタログから選択するには、Java VisualVM メニューの「ツール」>「プラグイン」を選択します。 -.LP -.LP -Java VisualVM を起動するには、次のコマンドを実行します。 -.LP -.nf -\f3 -.fl -% jvisualvm \fP\f4<options>\fP\f3 -.fl -\fP -.fi - -.LP .SH "関連項目" -.LP -.LP -Java VisualVM の詳細は、次のページを参照してください。 -.LP -.RS 3 -.TP 2 -o -.na -\f2Java VisualVM 開発者のサイト\fP @ -.fi -http://visualvm.java.net -.TP 2 -o -.na -\f2Java SE プラットフォームでの Java VisualVM のドキュメント\fP @ -.fi -http://java.sun.com/javase/6/docs/technotes/guides/visualvm/index.html +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +Java VisualVM開発者のサイト +http://visualvm\&.java\&.net/ .RE - -.LP -.LP -\f2(* 「Java 仮想マシン」と「JVM」という用語は、Java プラットフォームの仮想マシンを意味しています。)\fP -.LP - +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +Java SEドキュメントのJava VisualVM +(http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/visualvm/index\&.html) +.RE +.br +'pl 8.5i +'bp diff --git a/jdk/src/linux/doc/man/ja/keytool.1 b/jdk/src/linux/doc/man/ja/keytool.1 index aac06f6ba57..c19d4cf4e45 100644 --- a/jdk/src/linux/doc/man/ja/keytool.1 +++ b/jdk/src/linux/doc/man/ja/keytool.1 @@ -1,1845 +1,1579 @@ -." 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 -." 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. -." -.TH keytool 1 "07 May 2011" - -.LP -.SH "名前" -keytool \- 鍵と証明書の管理ツール -.LP -.LP -暗号化鍵、X.509 証明書チェーン、および信頼できる証明書を含むキーストア (データベース) を管理します。 -.LP -.SH "形式" -.LP +'\" t +.\" Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved. +.\" Title: keytool +.\" Language: English +.\" Date: 2013年8月6日 +.\" SectDesc: セキュリティ・ツール +.\" Software: JDK 8 +.\" Arch: 汎用 +.\" +.\" 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. +.\" +.pl 99999 +.TH "keytool" "1" "2013年8月6日" "JDK 8" "セキュリティ・ツール" +.\" ----------------------------------------------------------------- +.\" * Define some portability stuff +.\" ----------------------------------------------------------------- +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.\" http://bugs.debian.org/507673 +.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" ----------------------------------------------------------------- +.\" * set default formatting +.\" ----------------------------------------------------------------- +.\" disable hyphenation +.nh +.\" disable justification (adjust text to left margin only) +.ad l +.\" ----------------------------------------------------------------- +.\" * MAIN CONTENT STARTS HERE * +.\" ----------------------------------------------------------------- +.SH "NAME" +keytool \- 暗号化鍵、X\&.509証明書チェーンおよび信頼できる証明書を含むキーストア(データベース)を管理します。 +.SH "概要" +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -\fP\f3keytool\fP [ commands ] -.fl -.fi - -.LP -.LP -Java SE 6 で keytool のコマンドインタフェースが変更されました。詳細については「変更点」の節を参照してください。以前に定義されたコマンドも引き続きサポートされています。 -.LP -.SH "説明" -.LP -\f3keytool\fP は、鍵と証明書を管理するためのユーティリティーです。keytool を使うと、自分の公開鍵と非公開鍵のペア、および関連する証明書を管理し、デジタル署名を使った自己認証 (ほかのユーザーまたはサービスに対して自分自身を認証すること) や、データの整合性と証明書に関するサービスを利用することができます。keytool では、通信相手の公開鍵を (証明書の形で) キャッシュすることもできます。 -.LP -「証明書」とは、あるエンティティー (人物、会社など) からのデジタル署名付きの文書のことです。証明書には、ほかのあるエンティティーの公開鍵 (およびその他の情報) が特別な値を持っていることが書かれています(「証明書」を参照)。データにデジタル署名が付いている場合は、デジタル署名を検証することで、データの整合性およびデータが本物であることをチェックできます。データの「整合性」とは、データが変更されたり、改変されたりしていないことを意味します。 また、データが「本物である」とは、そのデータが、データを作成して署名したと称する人物から実際に渡されたデータであることを意味します。 -.LP -.LP -また、\f3keytool\fP を使えば、DES などの対称暗号化/復号化で使用される秘密鍵を管理することもできます。 -.LP -.LP -\f3keytool\fP は、鍵と証明書を\f2「キーストア」\fPに格納します。 -.LP -.SH "コマンドとオプションに関する注" -.LP -.LP -以下では、コマンドとそのオプションについて説明します。注: -.LP -.RS 3 -.TP 2 -o -どのコマンド名およびオプション名にも先頭にマイナス記号 (\-) が付く -.TP 2 -o -各コマンドのオプションは任意の順序で指定できる -.TP 2 -o -イタリック体になっていないすべての項目、または中括弧か角括弧で囲まれているすべての項目は、そのとおりに指定する必要がある -.TP 2 -o -オプションを囲む中括弧は、一般に、そのオプションをコマンド行で指定しなかった場合に、デフォルト値が使われることを意味する。中括弧は、 \f2\-v\fP、 \f2\-rfc\fP、および \f2\-J\fP オプションを囲むのにも使われるが、これらのオプションはコマンド行で指定された場合にのみ意味を持つ (つまり、これらのオプションには、オプション自体を指定しないこと以外に「デフォルト値」は存在しない) -.TP 2 -o -オプションを囲む角括弧は、そのオプションをコマンド行で指定しなかった場合に、値の入力を求められることを意味する。( \f2\-keypass\fP オプションの場合、オプションをコマンド行で指定しなかった場合は、\f3keytool\fP がまずキーストアのパスワードから非公開/秘密鍵の復元を試みる。 ユーザーは、この試みが失敗した場合に非公開/秘密鍵のパスワードの入力を求められる -.TP 2 -o -イタリック体の項目の実際の値 (オプションの値) は、ユーザーが指定する必要があるたとえば、 \f2\-printcert\fP コマンドの形式は次のとおりである -.nf -\f3 -.fl - keytool \-printcert {\-file \fP\f4cert_file\fP\f3} {\-v} -.fl -\fP -.fi -.LP -\f2\-printcert\fP コマンドを指定するときは、\f2cert_file\fP の代わりに実際のファイル名を指定する。次に例を示す -.nf -\f3 -.fl - keytool \-printcert \-file VScert.cer -.fl -\fP -.fi -.TP 2 -o -オプションの値に空白 (スペース) が含まれている場合は、値を引用符で囲む必要がある -.TP 2 -o -\f2\-help\fP コマンドはデフォルトのコマンドである。たとえば、次のようにコマンド行を指定したとする -.nf -\f3 -.fl - keytool -.fl -\fP -.fi -.LP -これは、次のように指定することと同じです。 -.nf -\f3 -.fl - keytool \-help -.fl -\fP +\fIkeytool\fR [\fIcommands\fR] .fi +.if n \{\ .RE - -.LP -.SS -オプションのデフォルト値 -.LP -.LP -オプションのデフォルト値は、次のとおりです。 -.LP -.nf -\f3 -.fl -\-alias "mykey" -.fl - -.fl -\-keyalg -.fl - "DSA" (\fP\f3\-genkeypair\fP\f3 を使用している場合) -.fl - "DES" (\fP\f3\-genseckey\fP\f3 を使用している場合) -.fl - -.fl -\-keysize -.fl - 2048 (\fP\f3\-genkeypair\fP\f3 を使用していて \-keyalg が "RSA" の場合) -.fl - 1024 (\fP\f3\-genkeypair\fP\f3 を使用していて \-keyalg が "DSA" の場合) -.fl - 256 (\fP\f3\-genkeypair\fP\f3 を使用していて \-keyalg が "EC" の場合) -.fl - 56 (\fP\f3\-genseckey\fP\f3 を使用していて \-keyalg が "DES" の場合) -.fl - 168 (\fP\f3\-genseckey\fP\f3 を使用していて \-keyalg が "DESede" の場合) -.fl - -.fl - -.fl -\-validity 90 -.fl - -.fl -\-keystore ユーザーのホームディレクトリの \fP\f4.keystore\fP\f3 というファイル -.fl - -.fl -\-storetype セキュリティープロパティーファイルの「keystore.type」プロパティーの値で、 -.fl - java.security.KeyStore の静的な getDefaultType メソッドから返される \fP\f4 \fP\f3 -.fl - \fP\f4 \fP\f3 -.fl - -.fl -\-file 読み込みの場合は標準入力、書き込みの場合は標準出力 -.fl - -.fl -\-protected false -.fl -\fP -.fi - -.LP -.LP -公開/非公開鍵ペアの生成において、署名アルゴリズム (\f2\-sigalg\fP オプション) は、基になる非公開鍵のアルゴリズムから派生します。 -.LP -.RS 3 -.TP 2 -o -基になる非公開鍵が DSA タイプである場合、\f2\-sigalg\fP オプションのデフォルト値は SHA1withDSA になり、 -.TP 2 -o -基になる非公開鍵が RSA タイプである場合は、\f2\-sigalg\fP オプションのデフォルト値は SHA256withRSA になり、 -.TP 2 -o -基になる非公開鍵が EC タイプである場合は、\f2\-sigalg\fP オプションのデフォルト値は SHA256withECDSA になります。 -.RE - -.LP -.LP -選択可能な \f2\-keyalg\fP および \f2\-sigalg\fP の完全な一覧については、 -.na -\f2「Java Cryptography Architecture API Specification & Reference」\fP @ -.fi -http://java.sun.com/javase/6/docs/technotes/guides/security/crypto/CryptoSpec.html#AppAを参照してください。 -.LP -.SS -一般オプション -.LP -.LP -\f2\-v\fP オプションは、 \f2\-help\fP コマンドを除くすべてのコマンドで使用できます。このオプションを指定した場合、コマンドは「冗長」モードで実行され、詳細な証明書情報が出力されます。 -.LP -.LP -また、 \f2\-J\fP\f2javaoption\fP オプションも、任意のコマンドで使用できます。このオプションを指定した場合、指定された \f2javaoption\fP 文字列が Java インタプリタに直接渡されます。このオプションには、空白を含めることはできません。このオプションは、実行環境またはメモリー使用を調整する場合に便利です。指定できるインタプリタオプションを一覧表示するには、コマンド行で \f2java \-h\fP または \f2java \-X\fP と入力してください。 -.LP -.LP -次のオプションは、キーストアに対する操作を行うすべてのコマンドで指定できます。 -.LP -.RS 3 -.TP 3 -\-storetype storetype -.LP -この修飾子は、インスタンスを生成するキーストアのタイプを指定します。 -.TP 3 -\-keystore keystore -.LP -キーストアの場所を指定します。 -.LP -特定の \f3keytool\fP コマンドを実行する際に、JKS ストアタイプが使用され、かつキーストアファイルがまだ存在していなかった場合、新しいキーストアファイルが作成されます。たとえば、 \f2keytool \-genkeypair\fP の実行時に \f2\-keystore\fP オプションが指定されなかった場合、 \f2.keystore\fP という名前のデフォルトキーストアファイルがユーザーのホームディレクトリ内にまだ存在していなければ、そこに作成されます。同様に、 \f2\-keystore \fP\f2ks_file\fP というオプションが指定されてもその \f2ks_file\fP が存在しなかった場合、そのファイルが作成されます。 -.LP -\f2\-keystore\fP オプションからの入力ストリームは、 \f2KeyStore.load\fP メソッドに渡されます。URL として \f2NONE\fP が指定されている場合は、null のストリームが \f2KeyStore.load\fP メソッドに渡されます。 \f2NONE\fP は、 \f2KeyStore\fP がファイルベースではなく、たとえば、ハードウェアトークンデバイスに置かれている場合に指定します。 -.TP 3 -\-storepass[:env|:file] argument -.LP -キーストアの整合性を保護するために使うパスワードを指定します。 -.LP -修飾子 \f2env\fP または \f2file\fP を指定しない場合、パスワードの値は \f2argument\fP になります。この値は、6 文字以上にする必要があります。それ以外の場合、パスワードは次のように取得されます。 -.RS 3 -.TP 2 -o -\f2env\fP: \f2argument\fP という名前の環境変数からパスワードを取得する -.TP 2 -o -\f2file\fP: \f2argument\fP という名前のファイルからパスワードを取得する -.RE -.LP -\f3注\fP: \f2\-keypass\fP、 \f2\-srckeypass\fP、 \f2\-destkeypass\fP \f2\-srcstorepass\fP、 \f2\-deststorepass\fP などのパスワードを必要とするその他のオプションはすべて、 \f2env\fP と \f2file\fP 修飾子を受け付けます。パスワードオプションと修飾子は、必ずコロン (\f2:\fP) で区切ってください。 -.LP -パスワードは、キーストアの内容にアクセスするすべてのコマンドで使われます。この種のコマンドを実行するときに、コマンド行で \f2\-storepass\fP オプションを指定しなかった場合は、パスワードの入力を求められます。 -.LP -キーストアから情報を取り出す場合は、パスワードを省略できます。 パスワードを省略すると、取り出す情報の整合性をチェックできないので、警告が表示されます。 -.TP 3 -\-providerName provider_name -.LP -セキュリティープロパティーファイル内に含まれる暗号化サービスプロバイダ名を特定するために使用されます。 -.TP 3 -\-providerClass provider_class_name -.LP -暗号化サービスプロバイダがセキュリティープロパティーファイルに指定されていないときは、そのマスタークラスファイルの名前を指定するときに使われます。 -.TP 3 -\-providerArg provider_arg -.LP -\f2\-providerClass\fP と組み合わせて使用します。\f2provider_class_name\fP のコンストラクタに対する省略可能な文字列入力引数を表します。 -.TP 3 -\-protected -.LP -\f2true\fP または \f2false\fP のいずれか。専用 PIN リーダーなどの保護された認証パスを介してパスワードを指定する必要がある場合には、この値に \f2true\fP を指定してください。 -.LP -注: \f2\-importkeystore\fP コマンドには 2 つのキーストアが関係しているため、2 つのオプション、つまり \f2\-srcprotected\fP と \f2\-destprotected\fP がソースキーストアとターゲットキーストアにそれぞれ指定されます。 -.TP 3 -\-ext {name{:critical}{=value}} -.LP -X.509 証明書エクステンションを示します。このオプションを \-genkeypair および \-gencert で使用して、生成される証明書または \f2\-certreq\fP にエクステンションを埋め込み、証明書要求で要求されるエクステンションを示すことができます。このオプションは、複数回使用できます。name には、サポートされているエクステンション名 (下記を参照) または任意の OID 番号を指定できます。value を指定した場合は、エクステンションのパラメータを示します。省略した場合は、エクステンションのデフォルト値 (定義されている場合) を示すか、またはエクステンションにパラメータは必要ありません。 \f2:critical\fP 修飾子を指定した場合は、エクステンションの isCritical 属性が true であることを示します。それ以外の場合は false であることを示します。:critical の代わりに : \f2:c\fP を使用できます。 . -.RE - -.LP -.LP -現在、keytool は次の名前のエクステンションをサポートしています (大文字と小文字は区別されない)。 -.LP -.LP -.TS -.if \n+(b.=1 .nr d. \n(.c-\n(c.-1 -.de 35 -.ps \n(.s -.vs \n(.vu -.in \n(.iu -.if \n(.u .fi -.if \n(.j .ad -.if \n(.j=0 .na -.. -.nf -.nr #~ 0 -.if n .nr #~ 0.6n -.ds #d .d -.if \(ts\n(.z\(ts\(ts .ds #d nl -.fc -.nr 33 \n(.s -.rm 80 81 -.nr 34 \n(.lu -.eo -.am 80 -.br -.di a+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(80 .ll \n(80u -.in 0 -BC または BasicConstraints -.br -.di -.nr a| \n(dn -.nr a- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di b+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -完全な形は「ca:{true|false}[,pathlen:<len>]」で、<len> は「ca:true,pathlen:<len>」の省略表記です。 省略すると、「ca:true」の意味になります -.br -.di -.nr b| \n(dn -.nr b- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di c+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -usage(,usage)*。usage には、digitalSignature、 nonRepudiation (contentCommitment)、keyEncipherment、dataEncipherment、keyAgreement、keyCertSign、cRLSign、encipherOnly、decipherOnly のいずれかを指定できます。Usage は、あいまいさがなければ、最初の数文字 (たとえば、digitalSignature を dig に) またはキャメルケーススタイル (たとえば、 digitalSignature を dS に、cRLSign を cRLS に) に 短縮できます。Usage の大文字と小文字は区別されません。 -.br -.di -.nr c| \n(dn -.nr c- \n(dl -.. -.ec \ -.eo -.am 80 -.br -.di d+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(80 .ll \n(80u -.in 0 -EKU または ExtendedkeyUsage -.br -.di -.nr d| \n(dn -.nr d- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di e+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -usage(,usage)*。usage には、anyExtendedKeyUsage、 serverAuth、clientAuth、codeSigning、emailProtection、 timeStamping、OCSPSigning、または任意の OID 文字列のいずれかを指定できます。 名前付きの usage は、あいまいさがなければ、 最初の数文字またはキャメルケーススタイルに 短縮できます。Usage の大文字と小文字は区別されません。 -.br -.di -.nr e| \n(dn -.nr e- \n(dl -.. -.ec \ -.eo -.am 80 -.br -.di f+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(80 .ll \n(80u -.in 0 -SAN または SubjectAlternativeName -.br -.di -.nr f| \n(dn -.nr f- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di g+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -type:value(,type:value)*。type には、EMAIL、URI、DNS、IP、または OID を指定できます。value は、type の文字列形式の値です。 -.br -.di -.nr g| \n(dn -.nr g- \n(dl -.. -.ec \ -.eo -.am 80 -.br -.di h+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(80 .ll \n(80u -.in 0 -IAN または IssuerAlternativeName -.br -.di -.nr h| \n(dn -.nr h- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di i+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -SubjectAlternativeName と同じです -.br -.di -.nr i| \n(dn -.nr i- \n(dl -.. -.ec \ -.eo -.am 80 -.br -.di j+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(80 .ll \n(80u -.in 0 -SIA または SubjectInfoAccess -.br -.di -.nr j| \n(dn -.nr j- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di k+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -method:location\-type:location\-value (,method:location\-type:location\-value)*。 method には、「timeStamping」、「caRepository」、または任意の OID を指定できます。location\-type および location\-value には、SubjectAlternativeName エクステンションでサポートされる任意の type:value を指定できます。 -.br -.di -.nr k| \n(dn -.nr k- \n(dl -.. -.ec \ -.eo -.am 80 -.br -.di l+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(80 .ll \n(80u -.in 0 -AIA または AuthorityInfoAccess -.br -.di -.nr l| \n(dn -.nr l- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di m+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -SubjectInfoAccess と同じです。method には、「ocsp」、「caIssuers」、または任意の OID を指定できます。 -.br -.di -.nr m| \n(dn -.nr m- \n(dl -.. -.ec \ -.35 -.nf -.ll \n(34u -.nr 80 0 -.nr 38 \w\f3名前\fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wKU または KeyUsage -.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 38 \n(d- -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \n(f- -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \n(h- -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \n(j- -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \n(l- -.if \n(80<\n(38 .nr 80 \n(38 -.nr 81 0 -.nr 38 \w\f3値\fP -.if \n(81<\n(38 .nr 81 \n(38 -.81 -.rm 81 -.nr 38 \n(b- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(c- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(e- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(g- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(i- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(k- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(m- -.if \n(81<\n(38 .nr 81 \n(38 -.35 -.nf -.ll \n(34u -.nr 38 1n -.nr 79 0 -.nr 40 \n(79+(0*\n(38) -.nr 80 +\n(40 -.nr 41 \n(80+(3*\n(38) -.nr 81 +\n(41 -.nr TW \n(81 -.if t .if \n(TW>\n(.li .tm Table at line 325 file Input is too wide - \n(TW units -.fc   -.nr #T 0-1 -.nr #a 0-1 -.eo -.de T# -.ds #d .d -.if \(ts\n(.z\(ts\(ts .ds #d nl -.mk ## -.nr ## -1v -.ls 1 -.ls -.. -.ec -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f3名前\fP\h'|\n(41u'\f3値\fP -.ne \n(a|u+\n(.Vu -.ne \n(b|u+\n(.Vu -.if (\n(a|+\n(#^-1v)>\n(#- .nr #- +(\n(a|+\n(#^-\n(#--1v) -.if (\n(b|+\n(#^-1v)>\n(#- .nr #- +(\n(b|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(40u -.in +\n(37u -.a+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.b+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(c|u+\n(.Vu -.if (\n(c|+\n(#^-1v)>\n(#- .nr #- +(\n(c|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'KU または KeyUsage\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.c+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(d|u+\n(.Vu -.ne \n(e|u+\n(.Vu -.if (\n(d|+\n(#^-1v)>\n(#- .nr #- +(\n(d|+\n(#^-\n(#--1v) -.if (\n(e|+\n(#^-1v)>\n(#- .nr #- +(\n(e|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(40u -.in +\n(37u -.d+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.e+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(f|u+\n(.Vu -.ne \n(g|u+\n(.Vu -.if (\n(f|+\n(#^-1v)>\n(#- .nr #- +(\n(f|+\n(#^-\n(#--1v) -.if (\n(g|+\n(#^-1v)>\n(#- .nr #- +(\n(g|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(40u -.in +\n(37u -.f+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.g+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(h|u+\n(.Vu -.ne \n(i|u+\n(.Vu -.if (\n(h|+\n(#^-1v)>\n(#- .nr #- +(\n(h|+\n(#^-\n(#--1v) -.if (\n(i|+\n(#^-1v)>\n(#- .nr #- +(\n(i|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(40u -.in +\n(37u -.h+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.i+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(j|u+\n(.Vu -.ne \n(k|u+\n(.Vu -.if (\n(j|+\n(#^-1v)>\n(#- .nr #- +(\n(j|+\n(#^-\n(#--1v) -.if (\n(k|+\n(#^-1v)>\n(#- .nr #- +(\n(k|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(40u -.in +\n(37u -.j+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.k+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(l|u+\n(.Vu -.ne \n(m|u+\n(.Vu -.if (\n(l|+\n(#^-1v)>\n(#- .nr #- +(\n(l|+\n(#^-\n(#--1v) -.if (\n(m|+\n(#^-1v)>\n(#- .nr #- +(\n(m|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(40u -.in +\n(37u -.l+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.m+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.fc -.nr T. 1 -.T# 1 -.35 -.rm a+ -.rm b+ -.rm c+ -.rm d+ -.rm e+ -.rm f+ -.rm g+ -.rm h+ -.rm i+ -.rm j+ -.rm k+ -.rm l+ -.rm m+ -.TE -.if \n-(b.=0 .nr c. \n(.c-\n(d.-44 - -.LP -.LP -OID 名の場合、OCTET STRING タイプと長さのバイトを除外したエクステンションについては、値は extnValue の HEX ダンプの DER エンコーディングです。HEX 文字列では、標準の HEX 数 (0\-9、a\-f、A\-F) 以外の文字は無視されます。したがって、 \f2「01:02:03:04」\fP と \f2「01020304」の両方とも\fP 同一の値として受け付けられます。値がない場合、エクステンションの値フィールドは空になります。 -.LP -.LP -\f2\-gencert\fP でのみ使用する「honored」という特別な名前は、証明書要求に含まれるエクステンションを優先する方法を示します。この名前の値は、 \f2「all」\fP (要求されるすべてのエクステンションが優先される)、 \f2「name{:[critical|non\-critical]}」\fP (名前付きのエクステンションが優先されるが、別の isCritical 属性を使用する)、および \f2「\-name」\fP (「all」とともに使用し、例外を示す) のコンマ区切りリストです。デフォルトでは、要求されるエクステンションは優先されません。 -.LP -.LP -\-ext 優先のオプションに加え、別の名前の、または OID \-ext のオプションを指定した場合は、このエクステンションが、すでに優先されているエクステンションに追加されます。ただし、この名前 (または OID) を優先される値でも使用した場合は、その値と重要性が要求に含まれるものをオーバーライドします。 -.LP -.LP -subjectKeyIdentifier エクステンションは常に作成されます。自己署名でない証明書の場合は、authorityKeyIdentifier が常に作成されます。 -.LP -.LP -\f3注:\fP ユーザーは、エクステンション (および証明書のほかのフィールド) の組み合わせによっては、インターネットの標準に準拠しない場合があることに注意してください。詳細については、「証明書の準拠に関する注意事項」を参照してください。 -.LP -.SH "コマンド" -.LP -.SS +.\} +.PP +\fIcommands\fR +.RS 4 +コマンドを参照してください。これらのコマンドは、次のようにタスク別に分類されます。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} キーストアへのデータの作成または追加 -.LP -.RS 3 -.TP 3 -\-gencert {\-rfc} {\-infile infile} {\-outfile outfile} {\-alias alias} {\-sigalg sigalg} {\-dname dname} {\-startdate startdate {\-ext ext}* {\-validity valDays} [\-keypass keypass] {\-keystore keystore} [\-storepass storepass] {\-storetype storetype} {\-providername provider_name} {\-providerClass provider_class_name {\-providerArg provider_arg}} {\-v} {\-protected} {\-Jjavaoption} -.LP -証明書要求ファイル ( \f2keytool \-certreq\fP コマンドで作成できる) に応答して証明書を生成します。このコマンドは、\f2infile\fP から (省略した場合は、標準入力から) 要求を読み込み、別名の非公開鍵を使ってその要求に署名して、X.509 証明書を \f2outfile\fP に (省略した場合は、標準出力に) 出力します。 \f2\-rfc\fP を指定した場合、出力形式は BASE64 符号化の PEM になります。それ以外の場合は、バイナリ DER が作成されます。 -.LP -\f2sigalg\fP には、証明書に署名を付けるときに使うアルゴリズムを指定します。\f2startdate\fP は、証明書が有効になる開始時刻/日付です。\f2valDays\fP には、証明書の有効日数を指定します。 -.LP -\f2dname\fP を指定すると、生成される証明書の主体として使用されます。それ以外の場合は、証明書要求からの名前が使用されます。 -.LP -\f2ext\fP は、証明書に埋め込まれる X.509 エクステンションを示します。\-ext の文法については、「一般オプション」を参照してください。 -.LP -\f2\-gencert\fP コマンドを使用すると、証明書チェーンを作成できます。次の例では、 \f2e1\fP という証明書を作成します。この証明書の証明書チェーンには、3 つの証明書が含まれています。 -.LP -次のコマンドは、ca、ca1、ca2、および e1 の 4 つの鍵ペアを作成します。 -.nf -\f3 -.fl -keytool \-alias ca \-dname CN=CA \-genkeypair -.fl -keytool \-alias ca1 \-dname CN=CA \-genkeypair -.fl -keytool \-alias ca2 \-dname CN=CA \-genkeypair -.fl -keytool \-alias e1 \-dname CN=E1 \-genkeypair -.fl -\fP -.fi -.LP -次の 2 つのコマンドは、署名付き証明書のチェーンを作成します。 \f2ca\fP は ca1 に署名し、 \f2ca1 signs ca2\fP に署名します。すべて自己発行です。 -.nf -\f3 -.fl -keytool \-alias ca1 \-certreq | keytool \-alias ca \-gencert \-ext san=dns:ca1 | keytool \-alias ca1 \-importcert -.fl -keytool \-alias ca2 \-certreq | $KT \-alias ca1 \-gencert \-ext san=dns:ca2 | $KT \-alias ca2 \-importcert -.fl -\fP -.fi -.LP -次のコマンドは、証明書 e1 を作成してファイル e1.cert に格納します。この証明書は ca2 によって署名されます。その結果、e1 の証明書チェーンには ca、ca1、および ca2 が含まれることになります。 -.nf -\f3 -.fl -keytool \-alias e1 \-certreq | keytool \-alias ca2 \-gencert > e1.cert -.fl -\fP -.fi -.TP 3 -\-genkeypair {\-alias alias} {\-keyalg keyalg} {\-keysize keysize} {\-sigalg sigalg} [\-dname dname] [\-keypass keypass] {\-startdate value} {\-ext ext}* {\-validity valDays} {\-storetype storetype} {\-keystore keystore} [\-storepass storepass] {\-providerClass provider_class_name {\-providerArg provider_arg}} {\-v} {\-protected} {\-Jjavaoption} -.LP -鍵のペア (公開鍵および関連する非公開鍵) を生成します。公開鍵は X.509 v3 自己署名証明書でラップされます。証明書は、単一の要素を持つ証明書チェーンとして格納されます。この証明書チェーンと非公開鍵は、\f2alias\fP で特定される新しいキーストアエントリに格納されます。 -.LP -\f2keyalg\fP は鍵のペアの生成に使用するアルゴリズムを、\f2keysize\fP は生成する各鍵のサイズを、それぞれ指定します。\f2sigalg\fP には、自己署名証明書に署名を付けるときに使うアルゴリズムを指定します。このアルゴリズムは、\f2keyalg\fP と互換性のあるものでなければなりません。 -.LP -\f2dname\fP には、\f2alias\fP に関連付け、自己署名証明書の issuer フィールドと subject フィールドとして使う X.500 識別名を指定します。 コマンド行で識別名を指定しなかった場合は、識別名の入力を求められます。 -.LP -\f2keypass\fP には、生成される鍵のペアのうち、非公開鍵を保護するのに使うパスワードを指定します。パスワードを指定しなかった場合は、パスワードの入力を求められます。このとき、Return キーを押すと、キーストアのパスワードと同じパスワードが鍵のパスワードに設定されます。\f2keypass\fP は、6 文字以上にする必要があります。 -.LP -\f2startdate\fP には、証明書の発行時刻を指定します。これは、X.509 証明書の「Validity」フィールドの「Not Before」値とも呼ばれます。 -.LP -オプションの値は、次の 2 つの形式のいずれかで設定できます。 -.RS 3 -.TP 3 -1. -([+\-]\f2nnn\fP[ymdHMS])+ -.TP 3 -2. -[yyyy/mm/dd] [HH:MM:SS] +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\-gencert .RE -.LP -最初の形式では、発行時刻は、指定される値だけ現在の時刻から移ります。指定される値は、一連の下位の値を連結したものになります。下位の各値で、プラス記号 (「+」) は時間が進むことを、マイナス記号 (「\-」) は時間が戻ることを意味しています。移る時間は \f2nnn\fP で、単位は年、月、日、時間、分、または秒です (それぞれ、1 文字の「y」、「m」、「d」、「H」、「M」、または「S」で示されている)。下位の各値で \f2java.util.GregorianCalendar.add(int field, int amount)\fP メソッドを使うことで、発行時刻の追加の値が左から右へ計算されます。たとえば、 \f2「\-startdate \-1y+1m\-1d」\fPと指定すると、開始時刻は次のようになります。 -.nf -\f3 -.fl - Calendar c = new GregorianCalendar(); -.fl - c.add(Calendar.YEAR, \-1); -.fl - c.add(Calendar.MONTH, 1); -.fl - c.add(Calendar.DATE, \-1); -.fl - return c.getTime() -.fl -\fP -.fi -.LP -2 番目の形式では、ユーザーは、年/月/日と時間:分:秒の 2 つの部分で厳密な開始時刻を設定します (地元の時間帯を使用)。ユーザーは、1 つの部分だけを指定できます。これは、もう 1 つの部分は現在の日付 (または時刻) と同じになるということです。ユーザーは、形式の定義に示されているように、桁数を厳密に指定する必要があります (短い場合は 0 で埋める)。日付と時刻の両方が指定された状態で、2 つの部分の間に空白文字が 1 つ (1 つだけ) あります。時間は常に 24 時間形式で指定してください。 -.LP -オプションを指定しないと、開始日付は現在の時刻になります。オプションは、最大で 1 回指定できます。 -.LP -\f2valDays\fP には、証明書の有効日数を指定します ( \f2\-startdate\fP で指定された日付、または \f2\-startdate\fP が指定されていない場合は現在の日付から始まる)。 -.LP -このコマンドは、以前のリリースでは \f2\-genkey\fP という名前でした。この古い名前は、このリリースでも引き続きサポートされており、今後のリリースでもサポートされる予定です。ただし、今後はわかりやすいように、新しい名前 \f2\-genkeypair\fP を使用することをお勧めします。 -.TP 3 -\-genseckey {\-alias alias} {\-keyalg keyalg} {\-keysize keysize} [\-keypass keypass] {\-storetype storetype} {\-keystore keystore} [\-storepass storepass] {\-providerClass provider_class_name {\-providerArg provider_arg}} {\-v} {\-protected} {\-Jjavaoption} -.LP -秘密鍵を生成し、それを新しい \f2KeyStore.SecretKeyEntry\fP (\f2alias\fP で特定される) 内に格納します。 -.LP -\f2keyalg\fP は秘密鍵の生成に使用するアルゴリズムを、\f2keysize\fP は生成する鍵のサイズを、それぞれ指定します。\f2keypass\fP は秘密鍵の保護に使用するパスワードです。パスワードを指定しなかった場合は、パスワードの入力を求められます。このとき、Return キーを押すと、キーストアのパスワードと同じパスワードが鍵のパスワードに設定されます。\f2keypass\fP は、6 文字以上にする必要があります。 -.TP 3 -\-importcert {\-alias alias} {\-file cert_file} [\-keypass keypass] {\-noprompt} {\-trustcacerts} {\-storetype storetype} {\-keystore keystore} [\-storepass storepass] {\-providerName provider_name} {\-providerClass provider_class_name {\-providerArg provider_arg}} {\-v} {\-protected} {\-Jjavaoption} -.LP -ファイル \f2cert_file\fP から証明書または証明書チェーン (証明書チェーンの場合は、PKCS#7 形式の応答または一連の X.509 証明書で提供されるもの) を読み込み、\f2alias\fP によって特定されるキーストアエントリに格納します。ファイルが指定されていない場合は、標準入力から証明書または証明書チェーンを読み込みます。 -.LP -\f3keytool\fP では、X.509 v1、v2、v3 の証明書、および、PKCS#7 形式の証明書から構成されている PKCS#7 形式の証明書チェーンをインポートできます。インポートするデータは、バイナリ符号化方式、または出力可能符号化方式 (Base64 符号化とも呼ばれる) のどちらかで提供する必要があります。 出力可能符号化方式は、インターネット RFC 1421 証明書符号化規格で定義されています。この符号化方式の場合、証明書は「\-\-\-\-\-BEGIN」で始まる文字列で開始され、「\-\-\-\-\-END」で始まる文字列で終了しなければなりません。 -.LP -証明書のインポートには、次の 2 つの目的があります。 -.RS 3 -.TP 3 -1. -信頼できる証明書のリストに証明書を追加する -.TP 3 -2. -CA に証明書署名要求 (\-certreq コマンドを参照) を送信した結果として、CA から受け取った証明応答をインポートする +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\-genkeypair .RE -.LP -どちらの種類のインポートを行うかは、 \f2\-alias\fP オプションの値によって指定します。 -.RS 3 -.TP 3 -1. -\f3別名がキーエントリをポイントしない場合\fP、\f3keytool\fP はユーザーが信頼できる証明書エントリを追加しようとしているものと見なします。この場合、別名がキーストア内にすでに存在していてはいけません。別名がすでに存在している場合、その別名の信頼できる証明書がすでに存在することになるので、\f3keytool\fP はエラーを出力し、証明書のインポートを行いません。 -.TP 3 -2. -.LP -\f3別名がキーエントリをポイントしない場合\fP、\f3keytool\fP はユーザーが信頼できる証明書エントリを追加しようとしているものと見なします。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\-genseckey .RE -\f3新しい信頼できる証明書のインポート\fP -.LP -\f3keytool\fP は、キーストアに証明書を追加する前に、キーストア内にすでに存在する信頼できる証明書を使って、インポートする証明書から (ルート CA の) 自己署名証明書に至るまでの信頼のチェーンの構築を試みます。 -.LP -\f2\-trustcacerts\fP オプションを指定した場合、追加の証明書は信頼できるすなわち cacerts という名前のファイルに含まれる証明書のチェーンと見なされます。 -.LP -\f3keytool\fP が、インポートする証明書から自己署名証明書 (キーストアまたは cacerts ファイルに含まれている自己署名証明書) に至るまでの信頼のパスの構築に失敗した場合は、インポートする証明書の情報を表示し、ユーザーに確認を求めます。 この場合は、表示された証明書のフィンガープリントと、ほかのなんらかの (信頼できる) 情報源 (証明書の所有者本人など) から入手したフィンガープリントとを比較します。「信頼できる証明書」として証明書をインポートするときは、証明書が有効であることを慎重に確認する必要があります。詳細は、「信頼できる証明書のインポートに関する注意事項」を参照してください。インポート操作は、証明書を確認する時点で中止できます。ただし、 \f2\-noprompt\fP オプションが指定されている場合、ユーザーとの対話は行われません。 -\f3証明応答のインポート\fP -.LP -「証明応答」をインポートするときは、キーストア内の信頼できる証明書、および (\-trustcacerts オプションが指定されている場合は) cacerts キーストアファイルで構成された証明書を使って証明応答が検査されます。 -.LP -証明応答が信頼できるかどうかを決定する方法は次のとおりです。 -.RS 3 -.TP 2 -o -\f3証明応答が単一の X.509 証明書である場合\fP、\f3keytool\fP は、証明応答から (ルート CA の) 自己署名証明書に至るまでの信頼チェーンの確立を試みます。証明応答と、証明応答の認証に使われる証明書の階層構造は、\f2alias\fP の新しい証明書チェーンを形成します。信頼チェーンが確立されない場合、証明応答はインポートされません。この場合、\f3keytool\fP は証明書を出力せず、ユーザーに検証を求めるプロンプトを表示します。ユーザーが証明応答の信頼性を判断するのは、不可能ではなくても非常に困難だからです。 -.TP 2 -o -\f3証明応答が PKCS#7 形式の証明書チェーンまたは一連の X.509 証明書である場合\fP、チェーンは、ユーザーの証明書が最初に、0 以上の CA 証明書がその次にくるように並べられます。チェーンが自己署名のルート CA 証明書で終わり、 \f2\-trustcacerts\fP オプションが指定されている場合、\f3keytool\fP は、その証明書と、キーストア内または「cacerts」キーストアファイル内の信頼できるすべての証明書を照合しようとします。チェーンが自己署名のルート CA 証明書で終わっておらず、 \f2\-trustcacerts\fP オプションが指定されている場合、\f3keytool\fP は、キーストア内または「cacerts」キーストアファイル内の信頼できる証明書から自己署名のルート CA 証明書を見つけてそれをチェーンの末尾に追加しようとします。その証明書が見つからず、 \f2\-noprompt\fP オプションが指定されていない場合は、チェーン内の最後の証明書の情報が出力され、ユーザーは確認を求められます。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\-importcert .RE -.LP -証明書応答内の公開鍵が \f2alias\fP の下にすでに格納されているユーザーの公開鍵に一致した場合、古い証明書チェーンが応答内の新しい証明書チェーンで置き換えられます。以前の証明書チェーンを新しい証明書チェーンで置き換えることができるのは、有効な \f2keypass\fP、つまり該当するエントリの非公開鍵を保護するためのパスワードを指定した場合だけです。パスワードを指定しておらず、非公開鍵のパスワードがキーストアのパスワードと異なる場合は、非公開鍵のパスワードの入力を求められます。 -.LP -このコマンドは、以前のリリースでは \f2\-import\fP という名前でした。この古い名前は、このリリースでも引き続きサポートされており、今後のリリースでもサポートされる予定です。ただし、今後はわかりやすいように、新しい名前 \f2\-importcert\fP を使用することをお勧めします。 -.TP 3 -\-importkeystore \-srckeystore srckeystore \-destkeystore destkeystore {\-srcstoretype srcstoretype} {\-deststoretype deststoretype} [\-srcstorepass srcstorepass] [\-deststorepass deststorepass] {\-srcprotected} {\-destprotected} {\-srcalias srcalias {\-destalias destalias} [\-srckeypass srckeypass] [\-destkeypass destkeypass] } {\-noprompt} {\-srcProviderName src_provider_name} {\-destProviderName dest_provider_name} {\-providerClass provider_class_name {\-providerArg provider_arg}} {\-v} {\-protected} {\-Jjavaoption} -.LP -ソースキーストアからターゲットキーストアへ、単一のエントリまたはすべてのエントリをインポートします。 -.LP -\f2srcalias\fP オプションが指定された場合、このコマンドは、その別名で特定される単一のエントリをターゲットキーストアにインポートします。\f2destalias\fP 経由でターゲット別名が指定されなかった場合、\f2srcalias\fP がターゲット別名として使用されます。ソースのエントリがパスワードで保護されていた場合、\f2srckeypass\fP を使ってそのエントリが回復されます。\f2srckeypass\fP が指定されなかった場合、\f3keytool\fP は \f2srcstorepass\fP を使ってそのエントリを回復しようとします。\f2srcstorepass\fP が指定されなかったか正しくなかった場合、ユーザーはパスワードの入力を求められます。ターゲットエントリは \f2destkeypass\fP によって保護されます。\f2destkeypass\fP が指定されなかった場合、ターゲットエントリはソースエントリのパスワードによって保護されます。 -.LP -\f2srcalias\fP オプションが指定されなかった場合、ソースキーストア内のすべてのエントリがターゲットキーストア内にインポートされます。各ターゲットエントリは対応するソースエントリの別名の下に格納されます。ソースのエントリがパスワードで保護されていた場合、\f2srcstorepass\fP を使ってそのエントリが回復されます。\f2srcstorepass\fP が指定されなかったか正しくなかった場合、ユーザーはパスワードの入力を求められます。ソースキーストア内のあるエントリタイプがターゲットキーストアでサポートされていない場合や、あるエントリをターゲットキーストアに格納する際にエラーが発生した場合、ユーザーはそのエントリをスキップして処理を続行するか、あるいは処理を中断するかの選択を求められます。ターゲットエントリはソースエントリのパスワードによって保護されます。 -.LP -ターゲット別名がターゲットキーストア内にすでに存在していた場合、ユーザーは、そのエントリを上書きするか、あるいは異なる別名の下で新しいエントリを作成するかの選択を求められます。 -.LP -\f2\-noprompt\fP を指定した場合、ユーザーは新しいターゲット別名の入力を求められません。既存のエントリはそのターゲット別名で自動的に上書きされます。最後に、インポートできないエントリは自動的にスキップされ、警告が出力されます。 -.TP 3 -\-printcertreq {\-file file} -.LP -PKCS #10 形式の証明書要求の内容を出力します。この要求は、keytool \-certreq コマンドで生成できます。このコマンドは、file から要求を読み込みます。file が省略されている場合は、標準入力から読み込みます。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\-importpassword .RE - -.LP -.SS +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +別のキーストアの内容のインポート +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\-importkeystore +.RE +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +証明書リクエストの生成 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\-certreq +.RE +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} データのエクスポート -.LP -.RS 3 -.TP 3 -\-certreq {\-alias alias} {\-dname dname} {\-sigalg sigalg} {\-file certreq_file} [\-keypass keypass] {\-storetype storetype} {\-keystore keystore} [\-storepass storepass] {\-providerName provider_name} {\-providerClass provider_class_name {\-providerArg provider_arg}} {\-v} {\-protected} {\-Jjavaoption} -.LP -PKCS#10 形式を使って証明書署名要求 (CSR) を生成します。 -.LP -CSR は、証明書発行局 (CA) に送信することを目的としたものです。CA は、証明書要求者を (通常はオフラインで) 認証し、証明書または証明書チェーンを送り返します。 この証明書または証明書チェーンは、キーストア内の既存の証明書チェーン (最初は 1 つの自己署名証明書から構成される) に置き換えて使います。 -.LP -\f2alias\fP に関連付けられた非公開鍵は、PKCS#10 証明書要求を作成するのに使われます。非公開鍵はキーストア内ではパスワードによって保護されているので、非公開鍵にアクセスするには、適切なパスワードを提供する必要があります。コマンド行で \f2keypass\fP を指定しておらず、非公開鍵のパスワードがキーストアのパスワードと異なる場合は、非公開鍵のパスワードの入力を求められます。dname が指定されている場合は、それが CSR で主体として使用されます。それ以外の場合は、別名に関連付けられた X.500 識別名が使用されます。 -.LP -\f2sigalg\fP には、CSR に署名を付けるときに使うアルゴリズムを指定します。 -.LP -CSR は、ファイル \f2certreq_file\fP に格納されます。ファイルが指定されていない場合は、標準出力に CSR が出力されます。 -.LP -CA からの応答をインポートするには、\f2importcert\fP コマンドを使います。 -.TP 3 -\-exportcert {\-alias alias} {\-file cert_file} {\-storetype storetype} {\-keystore keystore} [\-storepass storepass] {\-providerName provider_name} {\-providerClass provider_class_name {\-providerArg provider_arg}} {\-rfc} {\-v} {\-protected} {\-Jjavaoption} -.LP -\f2alias\fP に関連付けられた証明書を (キーストアから) 読み込み、ファイル \f2cert_file\fP に格納します。 -.LP -ファイルが指定されていない場合は、標準出力に証明書が出力されます。 -.LP -デフォルトでは、バイナリ符号化方式の証明書が出力されます。 ただし、\-rfc オプションを指定した場合は、出力可能符号化方式の証明書が出力されます。 出力可能符号化方式は、インターネット RFC 1421 証明書符号化規格で定義されています。 -.LP -\f2alias\fP が、信頼できる証明書を参照している場合は、該当する証明書が出力されます。それ以外の場合、\f2alias\fP は、関連付けられた証明書チェーンを持つ鍵エントリを参照します。この場合は、チェーン内の最初の証明書が返されます。この証明書は、\f2alias\fP によって表されるエンティティーの公開鍵を認証する証明書です。 -.LP -このコマンドは、以前のリリースでは \f2\-export\fP という名前でした。この古い名前は、このリリースでも引き続きサポートされており、今後のリリースでもサポートされる予定です。ただし、今後はわかりやすいように、新しい名前 \f2\-exportcert\fP を使用することをお勧めします。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\-exportcert .RE - -.LP -.SS +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} データの表示 -.LP -.RS 3 -.TP 3 -\-list {\-alias alias} {\-storetype storetype} {\-keystore keystore} [\-storepass storepass] {\-providerName provider_name} {\-providerClass provider_class_name {\-providerArg provider_arg}} {\-v | \-rfc} {\-protected} {\-Jjavaoption} -.LP -\f2alias\fP で特定されるキーストアエントリの内容を (標準出力に) 出力します。別名が指定されていない場合は、キーストア全体の内容が表示されます。 -.LP -このコマンドは、デフォルトでは証明書の SHA1 フィンガープリントを表示します。 \f2\-v\fP オプションが指定されている場合は、所有者、発行者、シリアル番号、拡張機能などの付加的な情報とともに、人間が読むことのできる形式で証明書が表示されます。 \f2\-rfc\fP オプションが指定されている場合は、出力可能符号化方式で証明書の内容が表示されます。 出力可能符号化方式は、インターネット RFC 1421 証明書符号化規格で定義されています。 -.LP -\f2\-v\fP オプションと \f2\-rfc\fP オプションを同時に指定することはできません。 -.TP 3 -\-printcert {\-file cert_file | \-sslserver host[:port]} {\-jarfile JAR_file {\-rfc} {\-v} {\-Jjavaoption} -.LP -ファイル \f2cert_file\fP、\f2host:port\fP にある SSL サーバー、または署名付き JAR ファイル \f2JAR_file\fP ( \f2\-jarfile\fP オプションを指定) から証明書を読み込み、人間が読むことのできる形式で証明書の内容を表示します。ポートが指定されていない場合は、標準の HTTPS ポート 443 が想定されます。 \f2\-sslserver\fP および \f2\-file\fP オプションを同時に指定することはできません。同時に指定すると、エラーが報告されます。オプションが指定されていない場合は、標準入力から証明書を読み込みます。 -.LP -\f2\-rfc\fP が指定されている場合、keytool は、インターネット RFC 1421 標準で定義されているように、PEM モードで証明書を出力します。 -.LP -ファイルまたは標準入力から証明書を読み込む場合、その証明書は、インターネット RFC 1421 標準で定義されているように、バイナリ符号化方式または出力可能符号化方式で表示できます。 -.LP -SSL サーバーがファイアウォールの背後にある場合は、 \f2\-J\-Dhttps.proxyHost=proxyhost\fP と \f2\-J\-Dhttps.proxyPort=proxyport\fP をコマンド行で指定して、プロキシトンネリングを使用できます。詳細は、 -.na -\f2「JSSE リファレンスガイド」\fP @ -.fi -http://java.sun.com/javase/6/docs/technotes/guides/security/jsse/JSSERefGuide.htmlを参照してください。 -.LP -\f3注\fP: このオプションはキーストアとは関係なく使用できます。 -.TP 3 -\-printcrl \-file crl_ {\-v} -.LP -ファイル \f2crl_file\fP から証明書の取り消しリスト (CRL) を読み込みます。 -.LP -証明書の取り消しリスト (CRL) は、デジタル証明書を発行した証明書発行局 (CA) によって取り消されたデジタル証明書のリストです。CA は、\f2crl_file\fP を生成します。 -.LP -\f3注\fP: このオプションはキーストアとは関係なく使用できます。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\-list .RE - -.LP -.SS +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\-printcert +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\-printcertreq +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\-printcrl +.RE +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} キーストアの管理 -.LP -.RS 3 -.TP 3 -\-storepasswd [\-new new_storepass] {\-storetype storetype} {\-keystore keystore} [\-storepass storepass] {\-providerName provider_name} {\-providerClass provider_class_name {\-providerArg provider_arg}} {\-v} {\-Jjavaoption} -.LP -キーストアの内容の整合性を保護するために使うパスワードを変更します。\f2new_storepass\fP には、新しいパスワードを指定します。new_storepass は、6 文字以上でなければなりません。 -.TP 3 -\-keypasswd {\-alias alias} [\-keypass old_keypass] [\-new new_keypass] {\-storetype storetype} {\-keystore keystore} [\-storepass storepass] {\-providerName provider_name} {\-providerClass provider_class_name {\-providerArg provider_arg}} {\-v} {\-Jjavaoption} -.LP -\f2alias\fP によって特定される非公開/秘密鍵を保護するためのパスワードを、\f2old_keypass\fP から \f2new_keypass\fP に変更します。new_keypass は、6 文字以上でなければなりません。 -.LP -コマンド行で \f2\-keypass\fP オプションを指定しておらず、鍵のパスワードがキーストアのパスワードと異なる場合は、鍵のパスワードの入力を求められます。 -.LP -コマンド行で \f2\-new\fP オプションを指定しなかった場合は、新しいパスワードの入力を求められます。 -.TP 3 -\-delete [\-alias alias] {\-storetype storetype} {\-keystore keystore} [\-storepass storepass] {\-providerName provider_name} {\-providerClass provider_class_name {\-providerArg provider_arg}} {\-v} {\-protected} {\-Jjavaoption} -.LP -\f2alias\fP によって特定されるエントリをキーストアから削除します。コマンド行で別名を指定しなかった場合は、別名の入力を求められます。 -.TP 3 -\-changealias {\-alias alias} [\-destalias destalias] [\-keypass keypass] {\-storetype storetype} {\-keystore keystore} [\-storepass storepass] {\-providerName provider_name} {\-providerClass provider_class_name {\-providerArg provider_arg}} {\-v} {\-protected} {\-Jjavaoption} -.LP -指定された \f2alias\fP から新しい別名 \f2destalias\fP へ、既存のキーストアエントリを移動します。ターゲット別名が指定されなかった場合、このコマンドはその入力を求めます。元のエントリがエントリパスワードで保護されていた場合、「\-keypass」オプション経由でそのパスワードを指定できます。鍵パスワードが指定されなかった場合、\f2storepass\fP (指定された場合) がまず試みられます。その試みが失敗すると、ユーザーはパスワードの入力を求められます。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\-storepasswd .RE - -.LP -.SS +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\-keypasswd +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\-delete +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\-changealias +.RE +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} ヘルプの表示 -.LP -.RS 3 -.TP 3 -\-help -.LP -基本的なコマンドとそのオプションの一覧を表示します。 -.LP -特定のコマンドの詳細については、次のように入力してください。 \f2command_name\fP はコマンドの名前です。 -.nf -\f3 -.fl - keytool \-\fP\f4command_name\fP\f3 \-help -.fl -\fP -.fi +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\-help .RE - -.LP -.SH "例" -.LP -.LP -ここでは、自分の鍵のペアおよび信頼できるエンティティーからの証明書を管理するためのキーストアを作成する場合を例として示します。 -.LP -.SS -鍵のペアの生成 -.LP -.LP -まず、キーストアを作成して鍵のペアを生成する必要があります。次に示すのは、実行するコマンドの例です。 -.LP -.nf -\f3 -.fl - keytool \-genkeypair \-dname "cn=Mark Jones, ou=Java, o=Oracle, c=US" -.fl - \-alias business \-keypass \fP\f4<非公開鍵の新しいパスワード>\fP\f3 \-keystore /working/mykeystore -.fl - \-storepass \fP\f4<キーストアの新しいパスワード>\fP\f3 \-validity 180 -.fl -\fP -.fi - -.LP -.LP -注: このコマンドは 1 行に入力しなければなりません。例で複数行に入力しているのは読みやすくするためです。 -.LP -.LP -この例では、working ディレクトリに mykeystore という名前のキーストアを作成し (キーストアはまだ存在していないと仮定する)、作成したキーストアに、\f2<キーストアの新しいパスワード>\fP で指定したパスワード を割り当てます。生成する公開鍵と非公開鍵のペアに対応するエンティティーの「識別名」は、通称が「Mark Jones」、組織単位が「Java」、組織が「Oracle」、2 文字の国番号が「US」です。公開鍵と非公開鍵のサイズはどちらも 1024 ビットで、鍵の作成にはデフォルトの DSA 鍵生成アルゴリズムを使用します。 -.LP -.LP -このコマンドは、公開鍵と識別名情報を含む自己署名証明書 (デフォルトの SHA1withDSA 署名アルゴリズムを使用) を作成します。証明書の有効期間は 180 日です。 証明書は、別名「business」で特定されるキーストアエントリ内の非公開鍵に関連付けられます。非公開鍵には、\f2<非公開鍵の新しいパスワード>\fP で指定したパスワードが割り当てられます。 -.LP -.LP -オプションのデフォルト値を使う場合は、上に示したコマンドを大幅に短くすることができます。実際には、オプションを 1 つも指定せずにコマンドを実行することも可能です。 デフォルト値を持つオプションでは、オプションを指定しなければデフォルト値が使われ、必要な値については入力を求められます。たとえば、単に次のように入力することもできます。 -.LP -.nf -\f3 -.fl - keytool \-genkeypair -.fl -\fP -.fi - -.LP -.LP -この場合は、mykey という別名でキーストアエントリが作成され、新しく生成された鍵のペア、および 90 日間有効な証明書がこのエントリに格納されます。このエントリは、ホームディレクトリ内の .keystore という名前のキーストアに置かれます。このキーストアがまだ存在していない場合は、作成されます。識別名情報、キーストアのパスワード、および非公開鍵のパスワードについては、入力を求められます。 -.LP -.LP -以下では、オプションを指定しないで \f2\-genkeypair\fP コマンドを実行したものとして例を示します。情報の入力を求められた場合は、最初に示した \f2\-genkeypair\fP コマンドの値を入力したものとします (たとえば、識別名には cn=Mark Jones, ou=Java, o=Oracle, c=US と指定)。 -.LP -.SS -証明書発行局に対する署名付き証明書の要求 -.LP -.LP -現時点で手元にあるのは、1 通の自己署名証明書だけです。証明書に証明書発行局 (CA) の署名が付いていれば、ほかのユーザーから証明書が信頼できる可能性も高くなります。CA の署名を取得するには、まず、証明書署名要求 (CSR) を生成します。 たとえば、次のようにします。 -.LP -.nf -\f3 -.fl - keytool \-certreq \-file MarkJ.csr -.fl -\fP -.fi - -.LP -.LP -CSR (デフォルト別名「mykey」によって特定されるエンティティーの CSR) が作成され、MarkJ.csr という名前のファイルに置かれます。このファイルは、VeriSign などの CA に提出します。 CA は要求者を (通常はオフラインで) 認証し、要求者の公開鍵を認証した署名付きの証明書を送り返します。場合によっては、CA が証明書のチェーンを返すこともあります。証明書のチェーンでは、各証明書がチェーン内のその前の署名者の公開鍵を認証します。 -.LP -.SS -CA からの証明書のインポート -.LP -.LP -作成した自己署名証明書は、証明書チェーンで置き換える必要があります。証明書チェーンでは、各証明書が、「ルート」CA を起点とするチェーン内の次の証明書の署名者の公開鍵を認証します。 -.LP -.LP -CA からの証明応答をインポートするには、キーストアか、 \f2cacerts\fP キーストアファイル (importcert コマンドで説明) 内に 1 つ以上の「信頼できる証明書」がある必要があります。 -.LP -.RS 3 -.TP 2 -o -証明応答が証明書チェーンの場合は、チェーンのトップの証明書 (その CA の公開鍵を認証する「ルート」CA の証明書) だけを必要とする -.TP 2 -o -証明応答が単一の証明書の場合は、証明書に署名した CA の発行用の証明書が必要で、その証明書が自己署名されない場合は、さらにその証明書の署名者用の証明書を必要とする。 このようにして自己署名される「ルート」CA の証明書までそれぞれ証明書を必要とする .RE - -.LP -.LP -cacerts キーストアファイルは、いくつかの VeriSign ルート CA 証明書を含んだ状態で出荷されているので、VeriSign の証明書を、信頼できる証明書としてキーストア内にインポートする必要はないかもしれません。ただし、ほかの CA に対して署名付き証明書を要求していて、この CA の公開鍵を認証する証明書が、cacerts にまだ追加されていない場合は、該当する CA からの証明書を、「信頼できる証明書」としてインポートする必要があります。 -.LP -.LP -通常、CA からの証明書は、自己署名証明書、またはほかの CA によって署名された証明書です (後者の場合は、該当するほかの CA の公開鍵を認証する証明書も必要)。たとえば、ABC という企業が CA だとします。このとき、この CA の公開鍵を認証する自己署名証明書と考えられる ABCCA.cer という名前のファイルを、ABC から入手したとします。 -.LP -.LP -「信頼できる証明書」として証明書をインポートするときは、証明書が有効であることを慎重に確認する必要があります。まず、証明書の内容を表示し (\f3keytool\fP \f2\-printcert\fP コマンドを使用するか、または \-noprompt オプションを指定しないで \f3keytool\fP \f2\-importcert\fP コマンドを使用し、 表示された証明書のフィンガープリントが、期待されるフィンガープリントと一致するかどうかを確認します。証明書を送信した人物に連絡し、この人物が提示した (または安全な公開鍵のリポジトリによって提示される) フィンガープリントと、上のコマンドで表示されたフィンガープリントとを比較します。フィンガープリントが一致すれば、送信途中でほかの何者か (攻撃者など) による証明書のすり替えが行われていないことを確認できます。送信途中でこの種の攻撃が行われていた場合、チェックを行わずに証明書をインポートすると、攻撃者によって署名されたすべてのものを信頼することになります。 -.LP -.LP -ABCCA.cer を有効な証明書として信頼する場合は、証明書をキーストアに追加できます。 たとえば、次のようにします。 -.LP -.nf -\f3 -.fl - keytool \-importcert \-alias abc \-file ABCCA.cer -.fl -\fP -.fi - -.LP -.LP -ABCCA.cer ファイルのデータを含む「信頼できる証明書」のエントリがキーストア内に作成され、該当するエントリに abc という別名が割り当てられます。 -.LP -.SS -CA からの証明応答のインポート -.LP -.LP -証明書署名要求の提出先の CA の公開鍵を認証する証明書をインポートしたあとは (または同種の証明書がすでに cacerts ファイル内に存在している場合は)、証明応答をインポートし、自己署名証明書を証明書チェーンで置き換えることができます。この証明書チェーンは、CA の応答がチェーンの場合、証明書署名要求に対する応答として CA から送り返された証明書チェーンです。 また、CA の応答が単一の証明書の場合は、この証明応答と、インポート先のキーストア内または cacerts キーストアファイル内にすでに存在する信頼できる証明書とを使って構築した証明書チェーンです。 -.LP -.LP -たとえば、証明書署名要求を VeriSign に送信したとします。送り返された証明書の名前が VSMarkJ.cer だとすると、次のようにして応答をインポートできます。 -.LP -.nf -\f3 -.fl - keytool \-importcert \-trustcacerts \-file VSMarkJ.cer -.fl -\fP -.fi - -.LP -.SS -公開鍵を認証する証明書のエクスポート -.LP -.LP -たとえば、jarsigner(1) ツールを使って Java ARchive (JAR) ファイルに署名を付けたとします。この JAR ファイルはクライアントによって使われますが、クライアント側では署名を認証したいと考えています。 -.LP -.LP -クライアントが署名を認証する方法の 1 つに、まず自分の公開鍵の証明書を「信頼できる」エントリとしてクライアントのキーストアにインポートする方法があります。そのためには、証明書をエクスポートして、クライアントに提供します。たとえば、次のようにして、証明書を \f2MJ.cer\fP という名前のファイルにコピーします。このエントリには「mykey」という別名が使われているとします。 -.LP -.nf -\f3 -.fl - keytool \-exportcert \-alias mykey \-file MJ.cer -.fl -\fP -.fi - -.LP -.LP -証明書と署名付き JAR ファイルを入手したクライアントは、\f3jarsigner\fP ツールを使って署名を認証できます。 -.LP -.SS -キーストアのインポート -.LP -.LP -コマンド「importkeystore」を使えば、あるキーストアの全体を別のキーストア内にインポートできます。これは、鍵や証明書といったソースキーストア内のすべてのエントリが、単一のコマンドを使ってターゲットキーストア内にインポートされることを意味します。このコマンドを使えば、異なるタイプのキーストア内に含まれるエントリをインポートすることができます。インポート時には、ターゲットキーストア内の新しいエントリはすべて、元と同じ別名および (秘密鍵や非公開鍵の場合は) 保護用パスワードを持ちます。ソースキーストア内の非公開鍵や秘密鍵の回復時に問題が発生した場合、\f3keytool\fP はユーザーにパスワードの入力を求めます。このコマンドは、別名の重複を検出すると、ユーザーに新しい別名の入力を求めます。ユーザーは、新しい別名を指定することも、単純に既存の別名の上書きを \f3keytool\fP に許可することもできます。 -.LP -.LP -たとえば、通常の JKS タイプのキーストア key.jks 内のエントリを PKCS #11 タイプのハードウェアベースのキーストア内にインポートするには、次のコマンドを使用できます。 -.LP -.nf -\f3 -.fl - keytool \-importkeystore -.fl - \-srckeystore key.jks \-destkeystore NONE -.fl - \-srcstoretype JKS \-deststoretype PKCS11 -.fl - \-srcstorepass \fP\f4<ソースキーストアのパスワード>\fP\f3 \-deststorepass \fP\f4<ターゲットキーストアのパスワード>\fP\f3 -.fl -\fP -.fi - -.LP -.LP -また、importkeystore コマンドを使えば、あるソースキーストア内の単一のエントリをターゲットキーストアにインポートすることもできます。この場合、上記の例で示したオプションに加え、インポート対象となる別名を指定する必要があります。srcalias オプションを指定する場合には、ターゲット別名もコマンド行から指定できるほか、秘密/非公開鍵の保護用パスワードやターゲット保護用パスワードも指定できます。その方法を示すコマンドを次に示します。 -.LP -.nf -\f3 -.fl - keytool \-importkeystore -.fl - \-srckeystore key.jks \-destkeystore NONE -.fl - \-srcstoretype JKS \-deststoretype PKCS11 -.fl - \-srcstorepass \fP\f4<ソースキーストアのパスワード>\fP\f3 \-deststorepass \fP\f4<ターゲットキーストアのパスワード>\fP\f3 -.fl - \-srcalias myprivatekey \-destalias myoldprivatekey -.fl - \-srckeypass \fP\f4<ソースエントリのパスワード>\fP\f3 \-destkeypass \fP\f4<ターゲットエントリのパスワード>\fP\f3 -.fl - \-noprompt -.fl -\fP -.fi - -.LP -.SS -一般的な SSL サーバー用の証明書の生成 -.LP -.LP -次に、3 つのエンティティー、つまりルート CA (root)、中間 CA (ca)、および SSL サーバー (server) 用の鍵ペアと証明書を生成する keytool コマンドを示します。すべての証明書を同じキーストアに格納するようにしてください。これらの例では、鍵のアルゴリズムとして RSA を指定することをお勧めします。 -.LP -.nf -\f3 -.fl -keytool \-genkeypair \-keystore root.jks \-alias root \-ext bc:c -.fl -keytool \-genkeypair \-keystore ca.jks \-alias ca \-ext bc:c -.fl -keytool \-genkeypair \-keystore server.jks \-alias server -.fl - -.fl -keytool \-keystore root.jks \-alias root \-exportcert \-rfc > root.pem -.fl - -.fl -keytool \-storepass \fP\f4<storepass>\fP\f3 \-keystore ca.jks \-certreq \-alias ca | keytool \-storepass \fP\f4<storepass>\fP\f3 \-keystore root.jks \-gencert \-alias root \-ext BC=0 \-rfc > ca.pem -.fl -keytool \-keystore ca.jks \-importcert \-alias ca \-file ca.pem -.fl - -.fl -keytool \-storepass \fP\f4<storepass>\fP\f3 \-keystore server.jks \-certreq \-alias server | keytool \-storepass \fP\f4<storepass>\fP\f3 \-keystore ca.jks \-gencert \-alias ca \-ext ku:c=dig,kE \-rfc > server.pem -.fl -cat root.pem ca.pem server.pem | keytool \-keystore server.jks \-importcert \-alias server -.fl -\fP -.fi - -.LP -.SH "用語と警告" -.LP -.SS -KeyStore -.LP -.LP -キーストアは、暗号化の鍵と証明書を格納するための機能です。 -.LP -.RS 3 -.TP 2 -o -\f3キーストアのエントリ\fP -.LP -キーストアには異なるタイプのエントリを含めることができます。\f3keytool\fP でもっとも適用範囲の広いエントリタイプは、次の 2 つです。 -.RS 3 -.TP 3 -1. -\f3鍵のエントリ\fP \- 各エントリは、非常に重要な暗号化の鍵の情報を保持します。この情報は、許可していないアクセスを防ぐために、保護された形で格納されます。 一般に、この種のエントリとして格納される鍵は、秘密鍵か、対応する公開鍵の証明書チェーンを伴う非公開鍵です。\f3keytool\fP がこの両方のタイプのエントリを処理できるのに対し、\f3jarsigner\fP ツールは後者のタイプのエントリ、つまり非公開鍵とそれに関連付けられた証明書チェーンのみを処理します。 -.TP 3 -2. -\f3信頼できる証明書のエントリ\fP \- 各エントリは、第三者からの公開鍵証明書を 1 つ含んでいます。この証明書は、「信頼できる証明書」と呼ばれます。 それは、証明書内の公開鍵が、証明書の「Subject」(所有者) によって特定されるアイデンティティーに由来するものであることを、キーストアの所有者が信頼するからです。証明書の発行者は、証明書に署名を付けることによって、その内容を保証します。 .RE -.TP 2 -o -\f3キーストアの別名\fP -.LP -キーストアのすべてのエントリ (鍵および信頼できる証明書) は、一意の「別名」を介してアクセスされます。 -.LP -別名を指定するのは、\-genseckey コマンドを使って秘密鍵を生成したり、\-genkeypair コマンドを使って鍵ペア (公開鍵と非公開鍵) を生成したり、\-importcert コマンドを使って証明書または証明書チェーンを信頼できる証明書のリストに追加したりするなど、特定のエンティティーをキーストアに追加する場合です。これ以後、\f3keytool\fP コマンドでエンティティーを参照する場合は、このときに指定した別名を使用する必要があります。 -.LP -たとえば、\f2duke\fP という別名を使って新しい公開鍵と非公開鍵のペアを生成し、公開鍵を自己署名証明書 (「証明書チェーン」を参照) でラップするとします。 この場合は、次のコマンドを実行します。 -.nf -\f3 -.fl - keytool \-genkeypair \-alias duke \-keypass dukekeypasswd -.fl -\fP -.fi -.LP -ここでは、初期パスワードとして dukekeypasswd を指定しています。 以後、別名 duke 連付けられた非公開鍵にアクセスするコマンドを実行するときは、このパスワードが必要になります。 duke の非公開鍵のパスワードをあとから変更するには、次のコマンドを実行します。 -.nf -\f3 -.fl - keytool \-keypasswd \-alias duke \-keypass dukekeypasswd \-new newpass -.fl -\fP -.fi -.LP -パスワードが、dukekeypasswd から newpass に変更されます。 -.LP -注: テストを目的とする場合、または安全であることがわかっているシステムで実行する場合以外は、コマンド行やスクリプトでパスワードを指定しないでください。必要なパスワードのオプションをコマンド行で指定しなかった場合は、パスワードの入力を求められます。 -.TP 2 -o -\f3キーストアの実装\fP -.LP -\f2KeyStore\fP クラス ( \f2java.security\fP パッケージで提供される) には、キーストア内の情報に対するアクセスと変更を行うための明確に定義されたインタフェースが用意されています。キーストアの固定実装としては、それぞれが特定の「タイプ」のキーストアを対象とする複数の異なる実装が存在可能です。 -.LP -現在、\f3keytool\fP と \f3jarsigner\fP の 2 つのコマンド行ツールと、\f3Policy Tool\fP という名前の 1 つの GUI ベースのツールが、キーストアの実装を使用しています。 \f2KeyStore\fP は public として使用可能なので、JDK ユーザーは KeyStore を使ったほかのセキュリティーアプリケーションも作成できます。 -.LP -キーストアには、Oracle が提供する組み込みのデフォルトの実装があります。これは、JKS という名前の独自のキーストアタイプ (形式) を利用するもので、キーストアをファイルとして実装しています。この実装では、個々の非公開鍵は個別のパスワードによって保護され、キーストア全体の整合性も (非公開鍵とは別の) パスワードによって保護されます。 -.LP -キーストアの実装は、プロバイダベースです。具体的には、 \f2KeyStore\fP が提供するアプリケーションインタフェースは、Service Provider Interface (SPI) という形で実装されています。つまり、対応する \f2KeystoreSpi\fP 抽象クラス (これも \f2java.security\fP パッケージに含まれている) があり、このクラスが、「プロバイダ」が実装する必要のある Service Provider Interface のメソッドを定義しています。ここで、「プロバイダ」とは、Java Security API によってアクセス可能なサービスのサブセットに対し、その固定実装を提供するパッケージまたはパッケージの集合のことです。したがって、キーストアの実装を提供するには、 -.na -\f2「Java(TM) 暗号化アーキテクチャー用プロバイダの実装方法」\fP @ -.fi -http://java.sun.com/javase/6/docs/technotes/guides/security/crypto/HowToImplAProvider.htmlで説明しているように、クライアントが「プロバイダ」を実装し、KeystoreSpi サブクラスの実装を提供する必要があります。 -.LP -アプリケーションでは、KeyStore クラスが提供する getInstance ファクトリメソッドを使うことで、さまざまなプロバイダから異なる「タイプ」のキーストアの実装を選択できます。 キーストアのタイプは、キーストア情報の格納形式とデータ形式を定義するとともに、キーストア内の非公開/秘密鍵とキーストア自体の整合性を保護するために使われるアルゴリズムを定義します。異なるタイプのキーストアの実装には、互換性はありません。 -.LP -\f3keytool\fP は、任意のファイルベースのキーストア実装で動作します。keytool は、コマンド行から渡されたキーストアの場所をファイル名として扱い、これを FileInputStream に変換して、FileInputStream からキーストアの情報をロードします。一方、\f3jarsigner\fP ツールと \f3policytool\fP ツールは、URL で指定可能な任意の場所からキーストアを読み込むことができます。 -.LP -\f3keytool\fP と \f3jarsigner\fP の場合、\f2\-storetype\fP オプションを使ってコマンド行でキーストアのタイプを指定できます。\f3Policy Tool\fPの場合は、「キーストア」メニューによってキーストアのタイプを指定できます。 -.LP -キーストアのタイプを明示的に指定しない場合、keytool、jarsigner、および policytool の各ツールは、セキュリティープロパティーファイル内で指定された \f2keystore.type\fP プロパティーの値に基づいてキーストアの実装を選択します。セキュリティープロパティーファイルは、\f2java.security\fP という名前でセキュリティープロパティーディレクトリ \f2java.home\fP/lib/security に置かれています。\f2java.home\fP は、実行環境のディレクトリ (SDK の \f2jre\fP ディレクトリまたは Java 2 Runtime Environment の最上位ディレクトリ) です。 -.LP -各ツールは、 \f2keystore.type\fP の値を取得し、この値で指定されたタイプのキーストアを実装しているプロバイダが見つかるまで、現在インストールされているすべてのプロバイダを調べます。目的のプロバイダが見つかると、そのプロバイダからのキーストアの実装を使います。 -.LP -\f2KeyStore\fP クラスでは \f2getDefaultType\fP という名前の static メソッドが定義されており、アプリケーションとアプレットはこのメソッドを使うことで \f2keystore.type\fP プロパティーの値を取得できます。次のコードは、デフォルトのキーストアタイプ ( \f2keystore.type\fP プロパティーで指定されたタイプ) のインスタンスを生成します。 -.nf -\f3 -.fl - KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType()); -.fl -\fP -.fi -.LP -デフォルトのキーストアタイプは JKS (Oracle が提供する独自のタイプのキーストアの実装) です。これは、セキュリティープロパティーファイル内の次の行によって指定されています。 -.nf -\f3 -.fl - keystore.type=jks -.fl -\fP -.fi -.LP -各ツールでデフォルト以外のキーストアの実装を使用するには、上の行を変更して別のキーストアのタイプを指定します。 -.LP -たとえば、pkcs12 と呼ばれるタイプのキーストアの実装を提供しているプロバイダパッケージを使用するには、上の行を次のように変更します。 -.nf -\f3 -.fl - keystore.type=pkcs12 -.fl -\fP -.fi -.LP -注: キーストアのタイプの指定では、大文字と小文字は区別されません。たとえば、JKS と jks は同じものとして扱われます。 +.SH "説明" +.PP +\fIkeytool\fRコマンドは、鍵と証明書を管理するためのユーティリティです。これにより、ユーザーは自分の公開鍵と秘密鍵のペアおよび関連する証明書を管理し、デジタル署名を使用した自己認証(他のユーザーまたはサービスに対して自分自身を認証すること)や、データの整合性と証明書に関するサービスを利用することができます。\fIkeytool\fRコマンドでは、通信しているピアの公開鍵をキャッシュすることもできます(証明書のフォームで)。 +.PP +証明書とは、あるエンティティ(人物、会社など)からのデジタル署名付きの文書のことです。証明書には、他のあるエンティティの公開鍵(およびその他の情報)が特別な値を持っていることが書かれています。(証明書を参照してください。)データにデジタル署名が付いている場合は、デジタル署名を検証することで、データの整合性およびデータが本物であることをチェックできます。データの整合性とは、データが変更されたり、改変されたりしていないことを意味します。また、データが本物であるとは、そのデータが、データを作成して署名したと称する人物から渡されたデータであることを意味します。 +.PP +また、\fIkeytool\fRコマンドを使用すれば、対称暗号化/復号化(DES)で使用される秘密鍵およびパスフレーズを管理することもできます。 +.PP +\fIkeytool\fRコマンドは、鍵と証明書をキーストアに格納します。キーストアの別名を参照してください。 +.SH "コマンドとオプションに関する注意" +.PP +様々なコマンドとその説明については、コマンドを参照してください。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +どのコマンド名およびオプション名にも先頭にマイナス記号(\-)が付きます。 .RE - -.LP -.SS -証明書 -.LP -\f3証明書\fP (\f3公開鍵証明書\fPとも呼ぶ) とは、あるエンティティー (「発行者」) からのデジタル署名付きの文書のことです。 証明書には、ほかのあるエンティティー (「署名者」) の公開鍵 (およびその他の情報) が特別な値を持っていることが書かれています。 -.RS 3 -.TP 2 -o -\f3証明書の用語\fP -.RS 3 -.TP 3 -公開鍵 -.LP -公開鍵は、特定のエンティティーに関連付けられた数です。公開鍵は、該当するエンティティーとの間に信頼できる関係を持つ必要があるすべての人に対して公開することを意図したものです。公開鍵は、署名を検証するのに使われます。 -.TP 3 -デジタル署名 -.LP -データが「デジタル署名」されると、そのデータは、エンティティーの「アイデンティティー」と、そのエンティティーがデータの内容について知っていることを証明する署名とともに格納されます。エンティティーの非公開鍵を使ってデータに署名を付けると、データの偽造は不可能になります。 -.TP 3 -アイデンティティー -.LP -エンティティーを特定するための既知の方法です。システムによっては、公開鍵をアイデンティティーにするものがあります。公開鍵のほかにも、Unix UID や電子メールアドレス、X.509 識別名など、さまざまなものをアイデンティティーとすることができます。 -.TP 3 -署名 -.LP -署名は、なんらかのデータを基にエンティティー (署名者。 証明書に関しては発行者とも呼ばれる) の非公開鍵を使って計算されます。 -.TP 3 -非公開鍵 -.LP -非公開鍵は特定のエンティティーだけが知っている数のことで、この数のことを、そのエンティティーの非公開鍵といいます。非公開鍵は、ほかに知られないように秘密にしておくことが前提になっています。非公開鍵と公開鍵は、すべての公開鍵暗号化システムで対になって存在しています。DSA などの典型的な公開鍵暗号化システムの場合、1 つの非公開鍵は正確に 1 つの公開鍵に対応します。非公開鍵は、署名を計算するのに使われます。 -.TP 3 -エンティティー -.LP -エンテンティーは、人、組織、プログラム、コンピュータ、企業、銀行など、一定の度合いで信頼の対象となるさまざまなものを指します。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +各コマンドのオプションは任意の順序で指定できます。 .RE -.LP -公開鍵暗号化では、その性質上、ユーザーの公開鍵にアクセスする必要があります。大規模なネットワーク環境では、互いに通信しているエンティティー間で以前の関係が引き続き確立されていると仮定したり、使われているすべての公開鍵を収めた信頼できるリポジトリが存在すると仮定したりすることは不可能です。このような公開鍵の配布に関する問題を解決するために証明書が考案されました。現在では、「証明書発行局 (CA)」が信頼できる第三者として機能します。CA は、ほかのエンティティーの証明書に署名する (発行する) 行為を、信頼して任されているエンティティー (企業など) です。CA は法律上の契約に拘束されるので、有効かつ信頼できる証明書だけを作成するものとして扱われます。 -.na -\f2VeriSign\fP @ -.fi -http://www.verisign.com/、 -.na -\f2Thawte\fP @ -.fi -http://www.thawte.com/、 -.na -\f2Entrust\fP @ -.fi -http://www.entrust.com/ をはじめ、多くの CA が存在します。Microsoft の認証サーバー、Entrust の CA 製品などを所属組織内で利用すれば、独自の証明書発行局を運営することも可能です。 -.LP -\f3keytool\fP を使うと、証明書の表示、インポート、およびエクスポートを行うことができます。また、自己署名証明書を生成することもできます。 -.LP -現在、\f3keytool\fP は X.509 証明書を対象にしています。 -.TP 2 -o -\f3X.509 証明書\fP -.LP -X.509 規格では、証明書に含める情報が定義されており、この情報を証明書に書き込む方法 (データ形式) についても記述されています。証明書のすべてのデータは、ASN.1/DER と呼ばれる 2 つの関連規格を使って符号化されます。\f2Abstract Syntax Notation 1\fP はデータについて記述しています。\f2Definite Encoding Rules\fP は、データの保存および転送の方法について記述しています。 -.LP -すべての X.509 証明書は、署名のほかに次のデータを含んでいます。 -.RS 3 -.TP 3 -バージョン -.LP -証明書に適用される X.509 規格のバージョンを特定します。証明書に指定できる情報は、バージョンによって異なります。これまでに、3 つのバージョンが定義されています。\f3keytool\fP では、v1、v2、および v3 の証明書のインポートとエクスポートが可能です。keytool が生成するのは、v3 の証明書です。 -.LP -「X.509 Version 1」は、1988 年から利用されて広く普及しており、もっとも一般的です。 -.LP -「X.509 Version 2」では、Subject や発行者の名前をあとで再利用できるようにするために、Subject と発行者の一意識別子の概念が導入されました。ほとんどの証明書プロファイル文書では、名前を再使用しないことと、証明書で一意な識別子を使わないことが、強く推奨されています。Version 2 の証明書は、広くは使われていません。 -.LP -「X.509 Version 3」はもっとも新しい (1996 年) 規格で、エクステンションの概念をサポートしています。エクステンションは誰でも定義することができ、証明書に含めることができます。現在使われている一般的なエクステンションとしては、KeyUsage (「署名専用」など、鍵の使用を特定の目的に制限する)、AlternativeNames (DNS 名、電子メールアドレス、IP アドレスなど、ほかのアイデンティティーを公開鍵に関連付けることができる) などがあります。エクステンションには、critical というマークを付けて、そのエクステンションのチェックと使用を義務づけることができます。たとえば、critical とマークされ、KeyCertSign が設定された KeyUsage エクステンションが証明書に含まれている場合、この証明書を SSL 通信中に提示すると、証明書が拒否されます。これは、証明書のエクステンションによって、関連する非公開鍵が証明書の署名専用として指定されており、SSL では使用できないためです。 -.TP 3 -シリアル番号 -.LP -証明書を作成したエンティティーは、そのエンティティーが発行するほかの証明書と区別するために、証明書にシリアル番号を割り当てます。この情報は、さまざまな方法で使われます。たとえば、証明書が取り消されると、シリアル番号が証明書の取り消しリスト (CRL) に格納されます。 -.TP 3 -署名アルゴリズム識別子 -.LP -証明書に署名を付けるときに CA が使ったアルゴリズムを特定します。 -.TP 3 -発行者名 -.LP -証明書に署名を付けたエンティティーの X.500 識別名です。エンティティーは、通常は CA です。この証明書を使うことは、証明書に署名を付けたエンティティーを信頼することを意味します。「ルート」つまり「トップレベル」の CA の証明書など、場合によっては発行者が自身の証明書に署名を付けることがある点に注意してください。 -.TP 3 -有効期間 -.LP -各証明書は、限られた期間だけ有効になります。この期間は開始の日時と終了の日時によって指定され、数秒の短い期間から 100 年という長期にわたることもあります。選択される有効期間は、証明書への署名に使われる非公開鍵の強度や証明書に支払う金額など、さまざまな要因で異なります。有効期間は、使用する非公開鍵が損なわれない場合に、エンティティーが公開鍵を信頼できると期待される期間です。 -.TP 3 -Subject 名 -.LP -証明書で公開鍵が識別されているエンティティーの名前です。この名前は X.500 標準を使うので、インターネット全体で一意なものと想定されます。これは、エンティティーの X.500 識別名 (DN) です。次に例を示します。 -.nf -\f3 -.fl - CN=Java Duke, OU=Java Software Division, O=Oracle Corporation, C=US -.fl -\fP -.fi -.LP -これらはそれぞれ主体の通称、組織単位、組織、国を表します。 -.TP 3 -Subject の公開鍵情報 -.LP -名前を付けられたエンティティーの公開鍵とアルゴリズム識別子です。アルゴリズム識別子では、公開鍵に対して使われている公開鍵暗号化システムおよび関連する鍵パラメータが指定されています。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +イタリック体になっていないすべての項目、または中カッコか角カッコで囲まれているすべての項目は、そのとおりに指定する必要があります。 .RE -.TP 2 -o -\f3証明書チェーン\fP -.LP -\f3keytool\fP では、非公開鍵および関連する証明書「チェーン」を含むキーストアの「鍵」エントリを作成し、管理することができます。このようなエントリでは、非公開鍵に対応する公開鍵は、チェーンの最初の証明書に含まれています。 -.LP -鍵を初めて作成すると (\-genkeypair コマンドを参照)、「自己署名証明書」という 1 つの要素だけを含むチェーンが開始されます。自己署名証明書は、発行者 (署名者) が主体 (証明書で認証されている公開鍵の持ち主) と同じである証明書のことです。 \f2\-genkeypair\fP コマンドを呼び出して新しい公開鍵と非公開鍵のペアを作成すると、公開鍵は常に自己署名証明書でラップされます。 -.LP -このあと、証明書署名要求 (CSR) が生成されて (\-certreq コマンドを参照)、CSR が証明書発行局 (CA) に送信されると、CA からの応答がインポートされ (\-importcert コマンドを参照)、元の自己署名証明書は証明書チェーンによって置き換えられます。チェーンの最後にあるのは、Subject の公開鍵を認証した CA が発行した証明書 (応答) です。チェーン内のその前の証明書は、「CA」の公開鍵を認証する証明書です。 -.LP -CA の公開鍵を認証する証明書は、多くの場合、自己署名証明書 (つまり CA が自身の公開鍵を認証した証明書) であり、これはチェーンの最初の証明書になります。場合によっては、CA が証明書のチェーンを返すこともあります。この場合、チェーン内の最後の証明書 (CA によって署名され、鍵エントリの公開鍵を認証する証明書) に変わりはありませんが、チェーン内のその前の証明書は、CSR の送信先の CA とは「別の」CA によって署名され、CSR の送信先の CA の公開鍵を認証する証明書になります。さらに、チェーン内のその前の証明書は、次の CA の鍵を認証する証明書になります。 以下同様に、自己署名された「ルート」証明書に達するまでチェーンが続きます。したがって、チェーン内の (最初の証明書以後の) 各証明書では、チェーン内の次の証明書の署名者の公開鍵が認証されていることになります。 -.LP -多くの CA は、チェーンをサポートせずに発行済みの証明書だけを返します。特に、中間の CA が存在しないフラットな階層構造の場合は、その傾向が顕著です。このような場合は、キーストアにすでに格納されている信頼できる証明書情報から、証明書チェーンを確立する必要があります。 -.LP -別の応答形式 (PKCS#7 で定義されている形式) でも、発行済み証明書に加え、証明書チェーンのサポートが含まれています。\f3keytool\fP では、どちらの応答形式も扱うことができます。 -.LP -トップレベル (ルート) CA の証明書は、自己署名証明書です。ただし、ルートの公開鍵に対する信頼は、ルートの証明書自体から導き出されるものではなく (たとえば、VeriSign ルート CA のような有名な識別名を使った自己署名証明書を作成すること自体は誰でも可能)、新聞などのほかの情報源に由来するものです。ルート CA の公開鍵は広く知られています。ルート CA の公開鍵を証明書に格納する理由は、証明書という形式にすることで多くのツールから利用できるようになるからにすぎません。 つまり、証明書は、ルート CA の公開鍵を運ぶ「媒体」として利用されるだけです。ルート CA の証明書をキーストアに追加するときは、その前に証明書の内容を表示し ( \f2\-printcert\fP オプションを使用)、表示されたフィンガープリントと、新聞やルート CA の Web ページなどから入手した既知のフィンガープリントとを比較する必要があります。 -.TP 2 -o -\f3cacerts 証明書ファイル\fP -.LP -\f3cacerts\fP という名前の証明書ファイルは、セキュリティープロパティーディレクトリ \f2java.home\fP/lib/security に置かれています。\f2java.home\fP は、実行環境のディレクトリ (SDK の \f2jre\fP ディレクトリまたは Java 2 Runtime Environment の最上位ディレクトリ) です。 -.LP -cacerts ファイルは、CA の証明書を含む、システム全体のキーストアです。システム管理者は、キーストアタイプに jks を指定することで、\f3keytool\fP を使ってこのファイルの構成と管理を行うことができます。cacerts キーストアファイルは、ルート CA 証明書のデフォルトセットを含んだ状態で出荷されています。それらの証明書を一覧表示するには、次のコマンドを使用します。 -.nf -\f3 -.fl -keytool \-list \-keystore \fP\f4java.home\fP\f3/lib/security/cacerts -.fl -\fP -.fi -.LP -cacerts キーストアファイルの初期パスワードは、changeit です。システム管理者は、SDK のインストール後、このファイルのパスワードとデフォルトアクセス権を変更する必要があります。 -.LP -\f3重要: \fP\f4cacerts\fP\f3 ファイルを確認してください\fP: \f2cacerts\fP ファイル内の CA は、署名および他のエンティティーへの証明書発行のためのエンティティーとして信頼されるため、 \f2cacerts\fP ファイルの管理は慎重に行う必要があります。 \f2cacerts\fP ファイルには、信頼する CA の証明書だけが含まれていなければなりません。ユーザーは、自身の責任において、 \f2cacerts\fP ファイルにバンドルされている信頼できるルート CA 証明書を検証し、信頼性に関する独自の決定を行います。信頼できない CA 証明書を \f2cacerts\fP ファイルから削除するには、 \f2keytool\fP コマンドの削除オプションを使用します。 \f2cacerts\fP ファイルは JRE のインストールディレクトリにあります。このファイルを編集するアクセス権がない場合は、システム管理者に連絡してください。 -.TP 2 -o -\f3インターネット RFC 1421 証明書符号化規格\fP -.LP -多くの場合、証明書は、バイナリ符号化ではなく、インターネット RFC 1421 規格で定義されている出力可能符号化方式を使って格納されます。「Base 64 符号化」とも呼ばれるこの証明書形式では、電子メールやその他の機構を通じて、ほかのアプリケーションに証明書を容易にエクスポートできます。 -.LP -\f2\-importcert\fP と \f2\-printcert\fP コマンドでは、この形式の証明書とバイナリ符号化の証明書を読み込むことができます。 -.LP -\f2\-exportcert\fP コマンドでは、デフォルトでバイナリ符号化の証明書が出力されます。 ただし、 \f2\-rfc\fP オプションを指定した場合は、出力可能符号化方式の証明書が出力されます。 -.LP -\f2\-list\fP コマンドでは、デフォルトで証明書の SHA1 フィンガープリントが出力されます。 \f2\-v\fP オプションを指定すると、人間が読むことのできる形式で証明書が出力されます。一方、 \f2\-rfc\fP オプションを指定すると、出力可能符号化方式で証明書が出力されます。 -.LP -出力可能符号化方式で符号化された証明書は、次の行で始まります。 -.nf -\f3 -.fl -\-\-\-\-\-BEGIN CERTIFICATE\-\-\-\-\- -.fl -\fP -.fi -.LP -最後は、次の行で終わります。 -.nf -\f3 -.fl -\-\-\-\-\-END CERTIFICATE\-\-\-\-\- -.fl -\fP -.fi +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +オプションを囲む中カッコは、そのオプションをコマンドラインで指定しなかった場合に、デフォルト値が使用されることを意味します。オプションのデフォルト値を参照してください。中カッコは、\fI\-v\fR、\fI\-rfc\fRおよび\fI\-J\fRオプションを囲むためにも使用されますが、これらのオプションはコマンドラインで指定された場合にのみ意味を持ちます。指定されていない場合以外、デフォルト値はありません。 .RE - -.LP -.SS -X.500 識別名 -.LP -.LP -X.500 識別名は、エンティティーを特定するために使われます。たとえば、X.509 証明書の \f2subject\fP フィールドと \f2issuer\fP (署名者) フィールドで指定される名前は、X.500 識別名です。\f3keytool\fP は、次のサブパートをサポートしています。 -.LP -.RS 3 -.TP 2 -o -\f2commonName\fP \- 人の通称。 「Susan Jones」など -.TP 2 -o -\f2organizationUnit\fP \- 小さな組織 (部、課など) の名称。 「仕入部」など -.TP 2 -o -\f2organizationName\fP \- 大きな組織の名称。 「ABCSystems, Inc.」など -.TP 2 -o -\f2localityName\fP \- 地域 (都市) 名。 「Palo Alto」など -.TP 2 -o -\f2stateName\fP \- 州名または地方名。 「California」など -.TP 2 -o -\f2country\fP \- 2 文字の国番号。 「CH」など +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +オプションを囲む角カッコは、そのオプションをコマンドラインで指定しなかった場合に、値の入力を求められることを意味します。\fI\-keypass\fRオプションの場合、オプションをコマンドラインで指定しなかった場合は、\fIkeytool\fRコマンドがまずキーストアのパスワードを使用して非公開/秘密鍵の復元を試みます。この試みが失敗した場合、\fIkeytool\fRコマンドにより、非公開/秘密鍵のパスワードの入力を求められます。 .RE - -.LP -.LP -\-genkeypair コマンドの \f2\-dname\fP オプションの値として識別名文字列を指定する場合は、 次の形式で指定する必要があります。 -.LP -.nf -\f3 -.fl -CN=\fP\f4cName\fP\f3, OU=\fP\f4orgUnit\fP\f3, O=\fP\f4org\fP\f3, L=\fP\f4city\fP\f3, S=\fP\f4state\fP\f3, C=\fP\f4countryCode\fP\f3 -.fl -\fP -.fi - -.LP -.LP -イタリック体の項目は、実際に指定する値を表します。 短縮形のキーワードの意味は、次のとおりです。 -.LP -.nf -\f3 -.fl - CN=commonName -.fl - OU=organizationUnit -.fl - O=organizationName -.fl - L=localityName -.fl - S=stateName -.fl - C=country -.fl -\fP -.fi - -.LP -.LP -次に示すのは、識別名文字列の例です。 -.LP -.nf -\f3 -.fl -CN=Mark Smith, OU=Java, O=Oracle, L=Cupertino, S=California, C=US -.fl -\fP -.fi - -.LP -.LP -次は、この文字列を使ったコマンドの例です。 -.LP -.nf -\f3 -.fl -keytool \-genkeypair \-dname "CN=Mark Smith, OU=Java, O=Oracle, L=Cupertino, -.fl -S=California, C=US" \-alias mark -.fl -\fP -.fi - -.LP -.LP -キーワードの短縮形では、大文字と小文字は区別されません。たとえば、CN、cn、および Cn は、どれも同じものとして扱われます。 -.LP -.LP -一方、キーワードの指定順序には意味があり、各サブコンポーネントは上に示した順序で指定する必要があります。ただし、サブコンポーネントをすべて指定する必要はありません。たとえば、次のように一部のサブコンポーネントだけを指定できます。 -.LP -.nf -\f3 -.fl -CN=Steve Meier, OU=Java, O=Oracle, C=US -.fl -\fP -.fi - -.LP -.LP -識別名文字列の値にコンマが含まれる場合に、コマンド行で文字列を指定するときには、次のようにコンマを文字 \\ でエスケープする必要があります。 -.LP -.nf -\f3 -.fl - cn=Peter Schuster, ou=Java\\, Product Development, o=Oracle, c=US -.fl -\fP -.fi - -.LP -.LP -識別名文字列をコマンド行で指定する必要はありません。識別名を必要とするコマンドを実行するときに、コマンド行で識別名を指定しなかった場合は、各サブコンポーネントの入力を求められます。この場合は、コンマを文字 \\ でエスケープする必要はありません。 -.LP -.SS -信頼できる証明書のインポートに関する注意事項 -.LP -.LP -重要: 信頼できる証明書として証明書をインポートする前に、証明書の内容を慎重に調べてください。 -.LP -.LP -まず、証明書の内容を表示し (\-printcert コマンドを使用するか、または \-noprompt オプションを指定しないで \-importcert コマンドを使用)、 コマンドを使用し、 表示された証明書のフィンガープリントが、期待されるフィンガープリントと一致するかどうかを確認します。たとえば、あるユーザーから証明書が送られてきて、この証明書を /tmp/cert という名前でファイルに格納しているとします。 この場合は、信頼できる証明書のリストにこの証明書を追加する前に、 \f2\-printcert\fP コマンドを実行してフィンガープリントを表示できます。たとえば、次のようにします。 -.LP -.nf -\f3 -.fl - keytool \-printcert \-file /tmp/cert -.fl - Owner: CN=ll, OU=ll, O=ll, L=ll, S=ll, C=ll -.fl - Issuer: CN=ll, OU=ll, O=ll, L=ll, S=ll, C=ll -.fl - Serial Number: 59092b34 -.fl - Valid from: Thu Sep 25 18:01:13 PDT 1997 until: Wed Dec 24 17:01:13 PST 1997 -.fl - Certificate Fingerprints: -.fl - MD5: 11:81:AD:92:C8:E5:0E:A2:01:2E:D4:7A:D7:5F:07:6F -.fl - SHA1: 20:B6:17:FA:EF:E5:55:8A:D0:71:1F:E8:D6:9D:C0:37:13:0E:5E:FE -.fl - SHA256: 90:7B:70:0A:EA:DC:16:79:92:99:41:FF:8A:FE:EB:90: -.fl - 17:75:E0:90:B2:24:4D:3A:2A:16:A6:E4:11:0F:67:A4 -.fl -\fP -.fi - -.LP -.LP -次に、証明書を送信した人物に連絡し、この人物が提示したフィンガープリントと、上のコマンドで表示されたフィンガープリントとを比較します。フィンガープリントが一致すれば、送信途中でほかの何者か (攻撃者など) による証明書のすり替えが行われていないことを確認できます。送信途中でこの種の攻撃が行われていた場合、チェックを行わずに証明書をインポートすると、攻撃者によって署名されたすべてのもの (攻撃的意図を持つクラスファイルを含んだ JAR ファイルなど) を信頼することになります。 -.LP -.LP -注: 証明書をインポートする前に必ず \f2\-printcert\fP コマンドを実行しなければならないわけではありません。キーストア内の信頼できる証明書のリストに証明書を追加する前に \f2\-importcert\fP コマンドを実行すると、証明書の情報が表示され、確認を求めるメッセージが表示されます。インポート操作は、この時点で中止できます。ただし、確認メッセージが表示されるのは、\-importcert コマンドを \-noprompt オプションを指定せずに実行した場合だけです。 コマンドを使用し、 \f2\-noprompt\fP オプションが指定されている場合、ユーザーとの対話は行われません。 -.LP -.SS -パスワードに関する注意事項 -.LP -.LP -キーストアに対する操作を行うほとんどのコマンドでは、ストアのパスワードが必要です。また、一部のコマンドでは、非公開/秘密鍵のパスワードが必要になることがあります。 -.LP -.LP -パスワードはコマンド行で指定できます (ストアのパスワードには \f2\-storepass\fP オプション、非公開鍵のパスワードには \f2\-keypass\fP オプションを使用)。ただし、テストを目的とする場合、または安全であることがわかっているシステムで実行する場合以外は、コマンド行やスクリプトでパスワードを指定しないでください。 -.LP -.LP -必要なパスワードのオプションをコマンド行で指定しなかった場合は、パスワードの入力を求められます。 -.LP -.SS -証明書の準拠に関する注意事項 -.LP -.LP -インターネット標準の -.na -\f2RFC 5280\fP @ -.fi -http://tools.ietf.org/rfc/rfc5280.txt では、X.509 証明書が準拠するプロファイルを定義しています。このプロファイルには、証明書のフィールドやエクステンションで有効な値や値の組み合わせが含まれています。\f3keytool\fP では、これらのすべての規則が適用されているわけではないので、標準に準拠しない証明書が生成される可能性があり、そのような証明書は JRE やほかのアプリケーションで拒否されることがあります。ユーザーは、 \f2\-dname\fP や \f2\-ext\fP などで適正なオプションを指定するようにしてください。 -.LP -.SH "関連項目" -.LP -.RS 3 -.TP 2 -o -jar(1) ツールのドキュメント -.TP 2 -o -jarsigner(1) ツールのドキュメント -.TP 2 -o -.na -\f4keytool\fP\f2 の使用例については、\fP @ -.fi -http://download.oracle.com/javase/tutorial/security/index.html -.na -\f2「Java Tutorial」\fP\f4の\fP @ -.fi -http://download.oracle.com/javase/tutorial/「Security」\f3を参照\fP +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +イタリック体の項目の実際の値(オプションの値)は、指定する必要があります。たとえば、\fI\-printcert\fRコマンドの形式は次のとおりです。 +.sp +\fIkeytool \-printcert {\-file cert_file} {\-v}\fR +.sp +\fI\-printcert\fRコマンドを指定する場合は、\fIcert_file\fRを実際のファイル名で置き換えます。例: +\fIkeytool \-printcert \-file VScert\&.cer\fR .RE - -.LP -.SH "変更点" -.LP -.LP -Java SE 6 で keytool のコマンドインタフェースが変更されました。 -.LP -.LP -\f3keytool\fP は、ユーザーがパスワードを入力する際にその入力内容を表示しなくなりました。ユーザーはパスワード入力時にその入力内容を確認できなくなったため、初期キーストアパスワードを設定したり鍵パスワードを変更したりするなど、パスワードの設定や変更を行うたびにパスワードの再入力を求められます。 -.LP -.LP -変更されたコマンドの中には、名前が変更されただけのものもあれば、廃止されてこのドキュメントに記載されなくなったものもあります。以前のすべてのコマンド (名前が変更されたものと廃止されたものの両方) は、このリリースでも引き続きサポートされており、今後のリリースでもサポートされる予定です。keytool のコマンドインタフェースに加えられたすべての変更点の概要を、次に示します。 -.LP -.LP -名前が変更されたコマンド: -.LP -.RS 3 -.TP 2 -o -\f2\-export\fP の名前が \f2\-exportcert に変更\fP -.TP 2 -o -\f2\-genkey\fP の名前が \f2\-genkeypair に変更\fP -.TP 2 -o -\f2\-import\fP の名前が \f2\-importcert に変更\fP +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +オプションの値に空白(スペース)が含まれている場合は、値を引用符で囲む必要があります。 .RE - -.LP -.LP -廃止されてドキュメントに記載されなくなったコマンド: -.LP -.RS 3 -.TP 2 -o -.na -\f2\-keyclone\fP @ -.fi -http://java.sun.com/j2se/1.5.0/docs/tooldocs/windows/keytool.html#keycloneCmd -.TP 2 -o -.na -\f2\-identitydb\fP @ -.fi -http://java.sun.com/j2se/1.5.0/docs/tooldocs/windows/keytool.html#identitydbCmd -.TP 2 -o -.na -\f2\-selfcert\fP @ -.fi -http://java.sun.com/j2se/1.5.0/docs/tooldocs/windows/keytool.html#selfcertCmd +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fI\-help\fRオプションがデフォルトです。\fIkeytool\fRコマンドは、\fIkeytool \-help\fRと同じです。 .RE - -.LP +.SH "オプションのデフォルト値" +.PP +次の例で、様々なオプション値のデフォルト値を示します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-alias "mykey" +\-keyalg + "DSA" (when using \-genkeypair) + "DES" (when using \-genseckey) + +\-keysize + 2048 (when using \-genkeypair and \-keyalg is "RSA") + 1024 (when using \-genkeypair and \-keyalg is "DSA") + 256 (when using \-genkeypair and \-keyalg is "EC") + 56 (when using \-genseckey and \-keyalg is "DES") + 168 (when using \-genseckey and \-keyalg is "DESede") + +\-validity 90 + +\-keystore <the file named \&.keystore in the user\*(Aqs home directory> + +\-storetype <the value of the "keystore\&.type" property in the + security properties file, which is returned by the static + getDefaultType method in java\&.security\&.KeyStore> + +\-file + stdin (if reading) + stdout (if writing) + +\-protected false +.fi +.if n \{\ +.RE +.\} +.PP +公開/秘密鍵ペアの生成において、署名アルゴリズム(\fI\-sigalg\fRオプション)は、基になる秘密鍵のアルゴリズムから派生します。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +基になる秘密鍵がDSAタイプである場合は、\fI\-sigalg\fRオプションのデフォルト値はSHA1withDSAになります。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +基になる秘密鍵がRSAタイプである場合は、\fI\-sigalg\fRオプションのデフォルト値はSHA256withRSAになります。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +基になる秘密鍵がECタイプである場合は、\fI\-sigalg\fRオプションのデフォルト値はSHA256withECDSAになります。 +.RE +.PP +\fI\-keyalg\fRおよび\fI\-sigalg\fR引数の完全なリストについては、 +http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/security/crypto/CryptoSpec\&.html#AppAの「Java Cryptography Architecture (JCA) Reference Guide」を参照してください。 +.SH "一般オプション" +.PP +\fI\-v\fRオプションは、\fI\-help\fRコマンドを除くすべてのコマンドで使用できます。\fI\-v\fRオプションを指定した場合、コマンドは冗長モードで実行され、詳細な情報が出力されます。 +.PP +任意のコマンドで指定できる\fI\-Jjavaoption\fR引数もあります。\fI\-Jjavaoption\fRを指定した場合、指定された\fIjavaoption\fR文字列がJavaインタプリタに直接渡されます。このオプションには、空白を含めることはできません。このオプションは、実行環境またはメモリー使用を調整する場合に便利です。指定できるインタプリタ・オプションを一覧表示するには、コマンドラインで\fIjava \-h\fRまたは\fIjava \-X\fRと入力してください。 +.PP +次のオプションは、キーストアに対する操作を行うすべてのコマンドで指定できます。 +.PP +\-storetype \fIstoretype\fR +.RS 4 +この修飾子は、インスタンスを生成するキーストアのタイプを指定します。 +.RE +.PP +\-keystore \fIkeystore\fR +.RS 4 +キーストアの場所を指定します。 +.sp +特定の\fIkeytool\fRコマンドを実行する際に、JKS +\fIstoretype\fRが使用され、かつキーストア・ファイルがまだ存在していなかった場合、新しいキーストア・ファイルが作成されます。たとえば、\fIkeytool \-genkeypair\fRの呼出し時に\fI\-keystore\fRオプションが指定されなかった場合、\fI\&.keystore\fRという名前のデフォルト・キーストア・ファイルがユーザーのホーム・ディレクトリ内にまだ存在していなければ、そこに作成されます。同様に、\fI\-keystore ks_file\fRというオプションが指定されてもそのks_fileが存在しなかった場合、そのファイルが作成されます。JKS +\fIstoretype\fRの詳細は、\fIの\fRKeyStoreの実装キーストアの別名に関する項を参照してください。 +.sp +\fI\-keystore\fRオプションからの入力ストリームは、\fIKeyStore\&.load\fRメソッドに渡されます。URLとして\fINONE\fRが指定されている場合は、nullのストリームが\fIKeyStore\&.load\fRメソッドに渡されます。\fINONE\fRは、KeyStoreがファイルベースではない場合に指定してください。たとえば、ハードウェア・トークン・デバイス上に存在している場合などです。 +.RE +.PP +\-storepass[:\fIenv\fR| :\fIfile\fR] argument +.RS 4 +キーストアの整合性を保護するために使用するパスワードを指定します。 +.sp +修飾子\fIenv\fRまたは\fIfile\fRを指定しない場合、パスワードの値は\fIargument\fRになります。この値は、6文字以上にする必要があります。それ以外の場合、パスワードは次のようにして取得されます。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fIenv\fR: +\fIargument\fRという名前の環境変数からパスワードを取得します。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fIfile\fR: argumentという名前のファイルからパスワードを取得します。 +.RE +.sp +\fB注意:\fR +\fI\-keypass\fR、\fI\-srckeypass\fR、\-\fIdestkeypass\fR、\fI\-srcstorepass\fR、\fI\-deststorepass\fRなどのパスワードを必要とするその他のオプションはすべて、\fIenv\fRおよび\fIfile\fR修飾子を受け付けます。パスワード・オプションと修飾子は、必ずコロン(:)で区切ってください。 +.sp +パスワードは、キーストアの内容にアクセスするすべてのコマンドで使用されます。この種のコマンドを実行するときに、コマンドラインで\fI\-storepass\fRオプションを指定しなかった場合は、パスワードの入力を求められます。 +.sp +キーストアから情報を取得する場合、パスワードは省略可能です。パスワードが指定されていない場合は、取得した情報の整合性を検証できず、警告が表示されます。 +.RE +.PP +\-providerName \fIprovider_name\fR +.RS 4 +セキュリティ・プロパティ・ファイル内に含まれる暗号化サービス・プロバイダ名を特定するために使用されます。 +.RE +.PP +\-providerClass \fIprovider_class_name\fR +.RS 4 +暗号化サービス・プロバイダがセキュリティ・プロパティ・ファイルに指定されていないときは、そのマスター・クラス・ファイルの名前を指定するときに使用されます。 +.RE +.PP +\-providerArg \fIprovider_arg\fR +.RS 4 +\fI\-providerClass\fRオプションとともに使用され、\fIprovider_class_name\fRのコンストラクタのオプションの文字列入力引数を表します。 +.RE +.PP +\-protected +.RS 4 +\fItrue\fRまたは\fIfalse\fRのいずれか。パスワードを専用PINリーダーなどの保護された認証パス経由で指定する必要がある場合は、この値を\fItrue\fRに指定する必要があります。\fI\-importkeystore\fRコマンドには2つのキーストアが関連しているため、ソース・キーストアと宛先キーストアにそれぞれ次の2つのオプション、\fI\-srcprotected\fRと\-\fIdestprotected\fRが用意されています。 +.RE +.PP +\-ext \fI{name{:critical} {=value}}\fR +.RS 4 +X\&.509証明書エクステンションを示します。このオプションを\fI\-genkeypair\fRおよび\fI\-gencert\fRで使用して、生成される証明書または\fI\-certreq\fRにエクステンションを埋め込み、証明書リクエストでリクエストされるエクステンションを示すことができます。このオプションは複数回指定できます。\fIname\fR引数には、サポートされているエクステンション名(名前付きエクステンションを参照)または任意のOID番号を指定できます。指定されている場合、\fIvalue\fR引数はエクステンションの引数を指します。\fIvalue\fRを省略した場合、エクステンションのデフォルト値またはエクステンションが引数を必要としないことを示します。\fI:critical\fR修飾子が指定された場合、エクステンションの\fIisCritical\fR属性は\fItrue\fRで、指定されない場合は\fIfalse\fRです。\fI:critical\fRのかわりに\fI:c\fRを使用できます。 +.RE +.SH "名前付きエクステンション" +.PP +\fIkeytool\fRコマンドは、次の名前のエクステンションをサポートしています。名前の大/小文字は区別されません。 +.PP +BCまたはBasicContraints +.RS 4 +\fB値\fR: 完全な形式は次のとおりです: +\fIca:{true|false}[,pathlen:<len>]\fRまたは\fI<len>\fR(これは、\fIca:true,pathlen:<len>\fRの短縮形です)。<\fIlen\fR>を省略すると、\fIca:true\fRの意味になります。 +.RE +.PP +KUまたはKeyUsage +.RS 4 +\fB値\fR: +\fIusage\fR(\fIusage\fR)*、\fIusage\fRには\fIdigitalSignature\fR、\fInonRepudiation\fR +(contentCommitment)、\fIkeyEncipherment\fR、\fIdataEncipherment\fR、\fIkeyAgreement\fR、\fIkeyCertSign\fR、\fIcRLSign\fR、\fIencipherOnly\fR、\fIdecipherOnly\fRのいずれかを指定できます。\fIusage\fR引数は、不明確にならないかぎり、最初の数文字(\fIdigitalSignature\fRの場合は\fIdig\fR)またはキャメルケース・スタイル(\fIdigitalSignature\fRの場合は\fIdS\fR、\fIcRLSign\fRの場合は\fIcRLS\fR)で省略表記できます。\fIusage\fR値は、大文字と小文字が区別されます。 +.RE +.PP +EKUまたはExtendedKeyUsage +.RS 4 +\fB値\fR: +\fIusage\fR(\fIusage\fR)*、\fIusage\fRには\fIanyExtendedKeyUsage\fR、\fIserverAuth\fR、\fIclientAuth\fR、\fIcodeSigning\fR、\fIemailProtection\fR、\fItimeStamping\fR、\fIOCSPSigning\fRまたは任意の\fIOID文字列\fRのいずれかを指定できます。\fIusage\fR引数は、不明確にならないかぎり、最初の数文字またはキャメルケース・スタイルで省略表記できます。\fIusage\fR値は、大文字と小文字が区別されます。 +.RE +.PP +SANまたはSubjectAlternativeName +.RS 4 +\fB値\fR: +\fItype\fR:\fIvalue\fR +(t\fIype:value\fR)*、\fItype\fRには\fIEMAIL\fR、\fIURI\fR、\fIDNS\fR、\fIIP\fRまたは\fIOID\fRを指定できます。\fIvalue\fR引数は、\fItype\fRの文字列形式の値です。 +.RE +.PP +IANまたはIssuerAlternativeName +.RS 4 +\fB値\fR: +\fISubjectAlternativeName\fRと同じです。 +.RE +.PP +SIAまたはSubjectInfoAccess +.RS 4 +\fB値\fR: +\fImethod\fR:\fIlocation\-type\fR:\fIlocation\-value\fR +(\fImethod:location\-type\fR:\fIlocation\-value\fR)*、\fImethod\fRには\fItimeStamping\fR、\fIcaRepository\fRまたは任意のOIDを指定できます。\fIlocation\-type\fRおよび\fIlocation\-value\fR引数には、\fISubjectAlternativeName\fRエクステンションでサポートされる任意の\fItype\fR:\fIvalue\fRを指定できます。 +.RE +.PP +AIAまたはAuthorityInfoAccess +.RS 4 +\fB値\fR: +\fISubjectInfoAccess\fRと同じです。\fImethod\fR引数には、\fIocsp\fR、\fIcaIssuers\fRまたは任意のOIDを指定できます。 +.RE +.PP +\fIname\fRがOIDの場合、OCTET STRINGタイプと長さのバイトを除外したエクステンションについては、値は\fIextnValue\fRの16進ダンプのDERエンコーディングです。HEX文字列では、標準の16進数(0\-9、a\-f、A\-F)以外の文字は無視されます。したがって、01:02:03:04と01020304の両方とも同一の値として受け付けられます。値がない場合、エクステンションの値フィールドは空になります。 +.PP +\fI\-gencert\fRでのみ使用する\fIhonored\fRという特別な名前は、証明書リクエストに含まれるエクステンションを優先する方法を示します。この名前の値は、\fIall\fR(リクエストされるすべてのエクステンションが優先される)、\fIname{:[critical|non\-critical]}\fR(名前付きのエクステンションが優先されるが、別の\fIisCritical\fR属性を使用する)、および\fI\-name\fR(\fIall\fRとともに使用し、例外を示す)のカンマ区切りリストです。デフォルトでは、リクエストされるエクステンションは優先されません。 +.PP +\fI\-ext honored\fRオプションに加え、別の名前の、またはOID +\fI\-ext\fRのオプションを指定した場合は、このエクステンションが、すでに優先されているエクステンションに追加されます。ただし、この名前(またはOID)を優先される値でも使用した場合は、その値と重要性がリクエストに含まれるものをオーバーライドします。 +.PP +\fIsubjectKeyIdentifier\fRエクステンションは常に作成されます。自己署名でない証明書の場合は、\fIauthorityKeyIdentifier\fRが作成されます。 +.PP +\fB注意:\fR +ユーザーは、エクステンション(および証明書の他のフィールド)の組合せによっては、インターネットの標準に準拠しない場合があることに注意してください。証明書の準拠に関する警告を参照してください。 +.SH "コマンド" +.PP +\-gencert +.RS 4 +\fI{\-rfc} {\-infile infile} {\-outfile outfile} {\-alias alias} {\-sigalg sigalg} {\-dname dname} {\-startdate startdate {\-ext ext}* {\-validity valDays} [\-keypass keypass] {\-keystore keystore} [\-storepass storepass] {\-storetype storetype} {\-providername provider_name} {\-providerClass provider_class_name {\-providerArg provider_arg}} {\-v} {\-protected} {\-Jjavaoption}\fR +.sp +証明書リクエスト・ファイル(\fIkeytool\fR +\fI\-certreq\fRコマンドで作成可能)に対するレスポンスとして証明書を生成します。このコマンドは、\fIinfile\fRから(省略した場合は、標準入力から)リクエストを読み込み、別名の秘密鍵を使用してそのリクエストに署名して、X\&.509証明書を\fIoutfile\fRに(省略した場合は、標準出力に)出力します。\fI\-rfc\fRを指定した場合、出力形式はBASE64符号化のPEMになります。それ以外の場合は、バイナリDERが作成されます。 +.sp +\fIsigalg\fR値には、証明書に署名を付けるときに使用するアルゴリズムを指定します。\fIstartdate\fR引数は、証明書の有効開始日時です。\fIvalDays\fR引数は、証明書の有効日数を示します。 +.sp +\fIdname\fRを指定すると、生成される証明書の主体として使用されます。それ以外の場合は、証明書リクエストからの名前が使用されます。 +.sp +\fIext\fR値は、証明書に埋め込まれるX\&.509エクステンションを示します。\fI\-ext\fRの構文については、一般オプションを参照してください。 +.sp +\fI\-gencert\fRオプションを使用すると、証明書チェーンを作成できます。次の例では、\fIe1\fRという証明書を作成します。この証明書の証明書チェーンには、3つの証明書が含まれています。 +.sp +次のコマンドは、\fIca\fR、\fIca1\fR、\fIca2\fRおよび\fIe1\fRの4つの鍵ペアを作成します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +keytool \-alias ca \-dname CN=CA \-genkeypair +keytool \-alias ca1 \-dname CN=CA \-genkeypair +keytool \-alias ca2 \-dname CN=CA \-genkeypair +keytool \-alias e1 \-dname CN=E1 \-genkeypair +.fi +.if n \{\ +.RE +.\} +次の2つのコマンドは、署名付き証明書のチェーンを作成します。\fIca\fRは\fIca1\fRに署名し、\fIca1\fRは\fIca2\fRに署名します。すべて自己発行です。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +keytool \-alias ca1 \-certreq | + keytool \-alias ca \-gencert \-ext san=dns:ca1 | + keytool \-alias ca1 \-importcert + +keytool \-alias ca2 \-certreq | + $KT \-alias ca1 \-gencert \-ext san=dns:ca2 | + $KT \-alias ca2 \-importcert +.fi +.if n \{\ +.RE +.\} +次のコマンドは、証明書\fIe1\fRを作成してファイル\fIe1\&.cert\fRに格納します。この証明書は\fIca2\fRによって署名されます。その結果、\fIe1\fRの証明書チェーンには\fIca\fR、\fIca1\fRおよび\fIca2\fRが含まれることになります。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +keytool \-alias e1 \-certreq | keytool \-alias ca2 \-gencert > e1\&.cert +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\-genkeypair +.RS 4 +\fI{\-alias alias} {\-keyalg keyalg} {\-keysize keysize} {\-sigalg sigalg} [\-dname dname] [\-keypass keypass] {\-startdate value} {\-ext ext}* {\-validity valDays} {\-storetype storetype} {\-keystore keystore} [\-storepass storepass] {\-providerClass provider_class_name {\-providerArg provider_arg}} {\-v} {\-protected} {\-Jjavaoption}\fR +.sp +鍵のペア(公開鍵および関連する秘密鍵)を生成します。公開鍵はX\&.509 v3自己署名証明書でラップされます。証明書は、単一の要素を持つ証明書チェーンとして格納されます。この証明書チェーンと秘密鍵は、aliasで特定される新しいキーストア・エントリに格納されます。 +.sp +\fIkeyalg\fR値は鍵ペアの生成に使用するアルゴリズムを、\fIkeysize\fR値は生成する各鍵のサイズを、それぞれ指定します。\fIsigalg\fR値は、自己署名証明書に署名を付けるために使用するアルゴリズムを指定します。このアルゴリズムは\fIkeyalg\fR値と互換性がある必要があります。 +.sp +\fIdname\fR値には、\fIalias\fR値に関連付け、自己署名証明書のissuerフィールドとsubjectフィールドとして使用するX\&.500識別名を指定します。コマンドラインで識別名を指定しなかった場合は、識別名の入力を求められます。 +.sp +\fIkeypass\fR値には、生成される鍵のペアのうち、秘密鍵を保護するのに使用するパスワードを指定します。パスワードを指定しなかった場合は、パスワードの入力を求められます。このとき、\fI[Return]キー\fRを押すと、キーストアのパスワードと同じパスワードが鍵のパスワードに設定されます。\fIkeypass\fR値は、6文字以上にする必要があります。 +.sp +\fIstartdate\fR値には、証明書の発行時刻を指定します。これは、X\&.509証明書の「Validity」フィールドの「Not Before」値とも呼ばれます。 +.sp +オプションの値は、次の2つの形式のいずれかで設定できます。 +.sp +\fI([+\-]nnn[ymdHMS])+\fR +.sp +\fI[yyyy/mm/dd] [HH:MM:SS]\fR +.sp +最初の形式では、発行時刻は、指定される値の分、現在の時刻から移ります。指定される値は、一連の下位の値を連結したものになります。下位の各値で、プラス記号(「+」)は時間が進むことを、マイナス記号(「\-」)は時間が戻ることを意味しています。移る時間は\fInnn\fRで、単位は年、月、日、時間、分または秒です(それぞれ、1文字の\fIy\fR、\fIm\fR、\fId\fR、\fIH\fR、\fIM\fRまたは\fIS\fR」で示されています)。下位の各値で\fIjava\&.util\&.GregorianCalendar\&.add(int field, int amount)\fRメソッドを使用することで、発行時刻の追加の値が左から右へ計算されます。たとえば、指定すると、発行時刻は次のようになります。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +Calendar c = new GregorianCalendar(); +c\&.add(Calendar\&.YEAR, \-1); +c\&.add(Calendar\&.MONTH, 1); +c\&.add(Calendar\&.DATE, \-1); +return c\&.getTime() +.fi +.if n \{\ +.RE +.\} +2番目の形式では、ユーザーは、年/月/日と時間:分:秒の2つの部分で厳密な開始時刻を設定します(地元の時間帯を使用)。ユーザーは、1つの部分のみを指定できます。これは、もう1つの部分は現在の日付(または時刻)と同じになるということです。ユーザーは、形式の定義に示されているように、桁数を厳密に指定する必要があります(短い場合は0で埋めます)。日付と時刻の両方が指定された状態で、2つの部分の間に空白文字が1つ(1つのみ)あります。時間は常に24時間形式で指定してください。 +.sp +オプションを指定しないと、開始日付は現在の時刻になります。オプションは、最大で1回指定できます。 +.sp +\fIvalDays\fRの値には、証明書の有効日数を指定します(\fI\-startdate\fRで指定された日付、または\fI\-startdate\fRが指定されていない場合は現在の日付から始まります)。 +.sp +このコマンドは、以前のリリースでは\fI\-genkey\fRという名前でした。このリリースでは、引き続き古い名前がサポートされています。今後は、新しい名前\fI\-genkeypair\fRが優先されます。 +.RE +.PP +\-genseckey +.RS 4 +\fI\-genseckey {\-alias alias} {\-keyalg keyalg} {\-keysize keysize} [\-keypass keypass] {\-storetype storetype} {\-keystore keystore} [\-storepass storepass] {\-providerClass provider_class_name {\-providerArg provider_arg}} {\-v} {\-protected} {\-Jjavaoption}\fR +.sp +秘密鍵を生成し、それを新しい\fIKeyStore\&.SecretKeyEntry\fR(\fIalias\fRで特定される)内に格納します。 +.sp +\fIkeyalg\fR値は鍵ペアの生成に使用するアルゴリズムを、\fIkeysize\fR値は生成する各鍵のサイズを、それぞれ指定します。\fIkeypass\fR値は、秘密鍵を保護するパスワードです。パスワードを指定しなかった場合は、パスワードの入力を求められます。このとき、[Return]キーを押すと、\fIkeystore\fRのパスワードと同じパスワードが鍵のパスワードに設定されます。\fIkeypass\fR値は、6文字以上にする必要があります。 +.RE +.PP +\-importcert +.RS 4 +\fI\-importcert {\-alias alias} {\-file cert_file} [\-keypass keypass] {\-noprompt} {\-trustcacerts} {\-storetype storetype} {\-keystore keystore} [\-storepass storepass] {\-providerName provider_name} {\-providerClass provider_class_name {\-providerArg provider_arg}} {\-v} {\-protected} {\-Jjavaoption}\fR +.sp +ファイル\fIcert_file\fRから証明書または証明書チェーン(証明書チェーンの場合は、PKCS#7形式の応答または一連のX\&.509証明書で提供されるもの)を読み込み、\fIalias\fRによって特定される\fIkeystore\fRエントリに格納します。ファイルが指定されていない場合は、\fIstdin\fRから証明書または証明書チェーンを読み込みます。 +.sp +\fIkeytool\fRコマンドでは、X\&.509 v1、v2、v3の証明書、およびPKCS#7形式の証明書から構成されているPKCS#7形式の証明書チェーンをインポートできます。インポートするデータは、バイナリ符号化方式、または出力可能符号化方式(Base64符号化とも呼ばれる)のどちらかで提供する必要があります。出力可能符号化方式は、インターネットRFC 1421証明書符号化規格で定義されています。この符号化方式の場合、証明書は\fI\-\fR\fI\-\-\-\-BEGIN\fRで始まる文字列で開始され、\fI\-\-\-\-\-END\fRで始まる文字列で終了する必要があります。 +.sp +証明書は、信頼できる証明書のリストに追加するため、および認証局(CA)に証明書署名リクエストを送信した結果としてCAから受信した証明書応答をインポートするため(コマンドの\fI\-certreq\fRオプションを参照)という2つの理由でインポートします。 +.sp +どちらのタイプのインポートを行うかは、\fI\-alias\fRオプションの値によって指定します。別名がキー・エントリをポイントしない場合、\fIkeytool\fRコマンドはユーザーが信頼できる証明書エントリを追加しようとしているものとみなします。この場合、別名がキーストア内に存在していないことが必要です。別名がすでに存在している場合、その別名の信頼できる証明書がすでに存在することになるので、\fIkeytool\fRコマンドはエラーを出力し、証明書のインポートを行いません。別名がキー・エントリをポイントする場合、\fIkeytool\fRコマンドはユーザーが証明書応答をインポートしようとしているものとみなします。 +.RE +.PP +\-importpassword +.RS 4 +\fI{\-alias alias} [\-keypass keypass] {\-storetype storetype} {\-keystore keystore} [\-storepass storepass] {\-providerClass provider_class_name {\-providerArg provider_arg}} {\-v} {\-protected} {\-Jjavaoption}\fR +.sp +パスフレーズをインポートし、\fIalias\fRで識別される新規\fIKeyStore\&.SecretKeyEntry\fRに格納します。パスフレーズは、標準入力ストリームを介して提供できます。または、ユーザーにそのプロンプトが表示されます。\fIkeypass\fRは、インポートされるパスフレーズの保護に使用されるパスワードです。パスワードを指定しなかった場合は、パスワードの入力を求められます。このとき、[Return]キーを押すと、\fIkeystore\fRのパスワードと同じパスワードが鍵のパスワードに設定されます。\fIkeypass\fRは、6文字以上にする必要があります。 +.RE +.PP +\-importkeystore +.RS 4 +\fI{\-srcstoretype srcstoretype} {\-deststoretype deststoretype} [\-srcstorepass srcstorepass] [\-deststorepass deststorepass] {\-srcprotected} {\-destprotected} {\-srcalias srcalias {\-destalias destalias} [\-srckeypass srckeypass] } [\-destkeypass destkeypass] {\-noprompt} {\-srcProviderName src_provider_name} {\-destProviderName dest_provider_name} {\-providerClass provider_class_name {\-providerArg provider_arg}} {\-v} {\-protected} {\-Jjavaoption}\fR +.sp +ソース・キーストアからターゲット・キーストアへ、単一のエントリまたはすべてのエントリをインポートします。 +.sp +\fI\-srcalias\fRオプションが指定された場合、このコマンドは、その別名で特定される単一のエントリをターゲット・キーストアにインポートします。\fIdestalias\fR経由でターゲット別名が指定されなかった場合、\fIsrcalias\fRがターゲット別名として使用されます。ソースのエントリがパスワードで保護されていた場合、\fIsrckeypass\fRを使用してそのエントリが回復されます。\fIsrckeypass\fRが指定されなかった場合、\fIkeytool\fRコマンドは\fIsrcstorepass\fRを使用してそのエントリを回復しようとします。\fIsrcstorepass\fRが指定されなかったか正しくなかった場合、ユーザーはパスワードの入力を求められます。ターゲットのエントリは\fIdestkeypass\fRによって保護されます。\fIdestkeypass\fRが指定されなかった場合、ターゲット・エントリはソース・エントリのパスワードによって保護されます。たとえば、ほとんどのサード・パーティ・ツールでは、PKCS #12キーストアで\fIstorepass\fRと\fIkeypass\fRが同じである必要があります。これらのツールのPKCS #12キーストアを作成する場合は、常に\fI\-destkeypass\fRと\fI\-deststorepass\fRが同じになるように指定します。 +.sp +\fI\-srcalias\fRオプションが指定されなかった場合、ソース・キーストア内のすべてのエントリがターゲット・キーストア内にインポートされます。各ターゲット・エントリは対応するソース・エントリの別名の下に格納されます。ソースのエントリがパスワードで保護されていた場合、\fIsrcstorepass\fRを使用してそのエントリが回復されます。\fIsrcstorepass\fRが指定されなかったか正しくなかった場合、ユーザーはパスワードの入力を求められます。ソース・キーストア内のあるエントリ・タイプがターゲット・キーストアでサポートされていない場合や、あるエントリをターゲット・キーストアに格納する際にエラーが発生した場合、ユーザーはそのエントリをスキップして処理を続行するか、あるいは処理を中断するかの選択を求められます。ターゲット・エントリはソース・エントリのパスワードによって保護されます。 +.sp +ターゲット別名がターゲット・キーストア内にすでに存在していた場合、ユーザーは、そのエントリを上書きするか、あるいは異なる別名の下で新しいエントリを作成するかの選択を求められます。 +.sp + +\fI\-noprompt\fRオプションを指定した場合、ユーザーは新しいターゲット別名の入力を求められません。既存のエントリがそのターゲット別名で上書きされます。インポートできないエントリはスキップされ、警告が出力されます。 +.RE +.PP +\-printcertreq +.RS 4 +\fI{\-file file}\fR +.sp +PKCS#10形式の証明書リクエストの内容を出力します。このリクエストは、\fIkeytool\fR +\fI\-certreq\fRコマンドで生成できます。このコマンドは、ファイルからリクエストを読み取ります。ファイルが存在しない場合、リクエストは標準入力から読み取られます。 +.RE +.PP +\-certreq +.RS 4 +\fI{\-alias alias} {\-dname dname} {\-sigalg sigalg} {\-file certreq_file} [\-keypass keypass] {\-storetype storetype} {\-keystore keystore} [\-storepass storepass] {\-providerName provider_name} {\-providerClass provider_class_name {\-providerArg provider_arg}} {\-v} {\-protected} {\-Jjavaoption}\fR +.sp +PKCS#10形式を使用して証明書署名リクエスト(CSR)を生成します。 +.sp +CSRは、証明書発行局(CA)に送信することを目的としたものです。CAは、証明書要求者を(通常はオフラインで)認証し、証明書または証明書チェーンを送り返します。この証明書または証明書チェーンは、キーストア内の既存の証明書チェーン(最初は1つの自己署名証明書から構成される)に置き換えて使用します。 +.sp +aliasに関連付けられた秘密鍵は、PKCS#10証明書リクエストを作成するのに使用されます。秘密鍵にアクセスするには、正しいパスワードを指定する必要があります。コマンドラインで\fIkeypass\fRを指定しておらず、秘密鍵のパスワードがキーストアのパスワードと異なる場合は、秘密鍵のパスワードの入力を求められます。\fIdname\fRが指定されている場合は、それがCSRで主体として使用されます。それ以外の場合は、別名に関連付けられたX\&.500識別名が使用されます。 +.sp +\fIsigalg\fR値には、CSRに署名を付けるときに使用するアルゴリズムを指定します。 +.sp +CSRは、ファイルcertreq_fileに格納されます。ファイルが指定されていない場合は、\fIstdout\fRにCSRが出力されます。 +.sp +CAからのレスポンスをインポートするには、\fIimportcert\fRコマンドを使用します。 +.RE +.PP +\-exportcert +.RS 4 +\fI{\-alias alias} {\-file cert_file} {\-storetype storetype} {\-keystore keystore} [\-storepass storepass] {\-providerName provider_name} {\-providerClass provider_class_name {\-providerArg provider_arg}} {\-rfc} {\-v} {\-protected} {\-Jjavaoption}\fR +.sp +\fIalias\fRに関連付けられた証明書をキーストアから読み込み、ファイルcert_fileに格納します。ファイルが指定されていない場合は、\fIstdout\fRに証明書が出力されます。 +.sp +デフォルトでは、証明書はバイナリ符号化で出力されます。\fI\-rfc\fRオプションが指定されている場合、出力可能符号化方式の出力はインターネットRFC 1421証明書符号化規格で定義されます。 +.sp +\fIalias\fRが、信頼できる証明書を参照している場合は、該当する証明書が出力されます。それ以外の場合、\fIalias\fRは、関連付けられた証明書チェーンを持つ鍵エントリを参照します。この場合は、チェーン内の最初の証明書が返されます。この証明書は、\fIalias\fRによって表されるエンティティの公開鍵を認証する証明書です。 +.sp +このコマンドは、以前のリリースでは\fI\-export\fRという名前でした。このリリースでは、引き続き古い名前がサポートされています。今後は、新しい名前\fI\-exportcert\fRが優先されます。 +.RE +.PP +\-list +.RS 4 +\fI{\-alias alias} {\-storetype storetype} {\-keystore keystore} [\-storepass storepass] {\-providerName provider_name} {\-providerClass provider_class_name {\-providerArg provider_arg}} {\-v | \-rfc} {\-protected} {\-Jjavaoption}\fR +.sp +\fIalias\fRで特定されるキーストア・エントリの内容を\fIstdout\fRに出力します。\fIalias\fRが指定されていない場合は、キーストア全体の内容が表示されます。 +.sp +このコマンドは、デフォルトでは証明書のSHA1フィンガープリントを表示します。 +\fI\-v\fRオプションが指定されている場合は、所有者、発行者、シリアル番号、拡張機能などの付加的な情報とともに、人間が読むことのできる形式で証明書が表示されます。\fI\-rfc\fRオプションが指定されている場合は、出力可能符号化方式で証明書の内容が出力されます。出力可能符号化方式は、インターネットRFC 1421証明書符号化規格で定義されています。 +.sp +\fI\-v\fRオプションと\fI\-rfc\fRオプションを同時に指定することはできません。 +.RE +.PP +\-printcert +.RS 4 +\fI{\-file cert_file | \-sslserver host[:port]} {\-jarfile JAR_file {\-rfc} {\-v} {\-Jjavaoption}\fR +.sp +ファイルcert_file、host:portにあるSSLサーバー、または署名付きJARファイル\fIJAR_file\fR(\fI\-jarfile\fRオプションを指定)から証明書を読み込み、人間が読むことのできる形式で証明書の内容を表示します。ポートが指定されていない場合は、標準のHTTPSポート443が想定されます。\fI\-sslserver\fRおよび\-fileオプションを同時に指定することはできません。これに反する場合、エラーが報告されます。オプションが指定されていない場合は、\fIstdin\fRから証明書を読み込みます。 +.sp +\fI\-rfc\fRが指定されている場合、\fIkeytool\fRコマンドは、インターネットRFC 1421証明書符号化標準で定義されているように、PEMモードで証明書を出力します。インターネットRFC 1421証明書符号化規格を参照してください。 +.sp +ファイルまたは\fIstdin\fRから証明書を読み込む場合、その証明書は、インターネットRFC 1421証明書符号化標準で定義されているように、バイナリ符号化方式または出力可能符号化方式で表示できます。 +.sp +SSLサーバーがファイアウォールの背後にある場合は、\fI\-J\-Dhttps\&.proxyHost=proxyhost\fRおよび\fI\-J\-Dhttps\&.proxyPort=proxyport\fRオプションをコマンドラインで指定して、プロキシ・トンネリングを使用できます。http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/security/jsse/JSSERefGuide\&.htmlの +「Java Secure Socket Extension (JSSE) Reference Guide」を参照してください +.sp +\fB注意:\fR +このオプションはキーストアとは関係なく使用できます。 +.RE +.PP +\-printcrl +.RS 4 +\fI\-file crl_ {\-v}\fR +.sp +ファイル\fIcrl_\fRから証明書失効リスト(CRL)を読み込みます。CRLは、発行したCAによって失効されたデジタル証明書のリストです。CAは、\fIcrl_\fRを生成します。 +.sp +\fB注意:\fR +このオプションはキーストアとは関係なく使用できます。 +.RE +.PP +\-storepasswd +.RS 4 +\fI[\-new new_storepass] {\-storetype storetype} {\-keystore keystore} [\-storepass storepass] {\-providerName provider_name} {\-providerClass provider_class_name {\-providerArg provider_arg}} {\-v} {\-Jjavaoption}\fR +.sp +キーストアの内容の整合性を保護するために使用するパスワードを変更します。\fInew_storepass\fRには、新しいパスワードを指定します。new_storepassは、6文字以上である必要があります。 +.RE +.PP +\-keypasswd +.RS 4 +\fI{\-alias alias} [\-keypass old_keypass] [\-new new_keypass] {\-storetype storetype} {\-keystore keystore} [\-storepass storepass] {\-providerName provider_name} {\-providerClass provider_class_name {\-providerArg provider_arg}} {\-v} {\-Jjavaoption}\fR +.sp +\fIalias\fRによって特定される非公開/秘密鍵を保護するためのパスワードを、\fIold_keypass\fRから\fInew_keypass\fRに変更します。new_keypassは、6文字以上である必要があります。 +.sp +コマンドラインで\fI\-keypass\fRオプションを指定しておらず、鍵のパスワードがキーストアのパスワードと異なる場合は、鍵のパスワードの入力を求められます。 +.sp +コマンドラインで\fI\-new\fRオプションを指定しなかった場合は、新しいパスワードの入力を求められます。 +.RE +.PP +\-delete +.RS 4 +\fI[\-alias alias] {\-storetype storetype} {\-keystore keystore} [\-storepass storepass] {\-providerName provider_name} {\-providerClass provider_class_name {\-providerArg provider_arg}} {\-v} {\-protected} {\-Jjavaoption}\fR +.sp +\fIalias\fRによって特定されるエントリをキーストアから削除します。コマンドラインで別名を指定しなかった場合は、別名の入力を求められます。 +.RE +.PP +\-changealias +.RS 4 +\fI{\-alias alias} [\-destalias destalias] [\-keypass keypass] {\-storetype storetype} {\-keystore keystore} [\-storepass storepass] {\-providerName provider_name} {\-providerClass provider_class_name {\-providerArg provider_arg}} {\-v} {\-protected} {\-Jjavaoption}\fR +.sp +指定された\fIalias\fRから新しい別名\fIdestalias\fRへ、既存のキーストア・エントリを移動します。ターゲット別名を指定しなかった場合、ターゲット別名の入力を求められます。元のエントリがエントリ・パスワードで保護されていた場合、\fI\-keypass\fRオプションでそのパスワードを指定できます。鍵パスワードが指定されなかった場合、\fIstorepass\fR(指定された場合)がまず試みられます。その試みが失敗すると、ユーザーはパスワードの入力を求められます。 +.RE +.PP +\-help +.RS 4 +基本的なコマンドとそのオプションの一覧を表示します。 +.sp +特定のコマンドの詳細を参照するには、次のように入力してください: +\fIkeytool \-command_name \-help\fR。\fIcommand_name\fRはコマンドの名前です。 +.RE +.SH "例" +.PP +この例では、公開/秘密鍵のペアおよび信頼できるエンティティからの証明書を管理するためのキーストアを作成する手順を示します。 +.SS "鍵のペアの生成" +.PP +まず、キーストアを作成して鍵のペアを生成します。単一行に入力する、次のようなコマンドを使用できます。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +keytool \-genkeypair \-dname "cn=Mark Jones, ou=Java, o=Oracle, c=US" + \-alias business \-keypass <new password for private key> + \-keystore /working/mykeystore + \-storepass <new password for keystore> \-validity 180 +.fi +.if n \{\ +.RE +.\} +.PP +コマンドは、workingディレクトリに\fImykeystore\fRという名前のキーストアを作成し(キーストアはまだ存在していないと仮定)、作成したキーストアに、\fI<new password for keystore>\fRで指定したパスワードを割り当てます。生成する公開鍵と秘密鍵のペアに対応するエンティティの「識別名」は、通称がMark Jones、組織単位がJava、組織がOracle、2文字の国番号がUSです。公開鍵と秘密鍵のサイズはどちらも1024ビットで、鍵の作成にはデフォルトのDSA鍵生成アルゴリズムを使用します。 +.PP +このコマンドは、デフォルトのSHA1withDSA署名アルゴリズムを使用して、公開鍵と識別名情報を含む自己署名証明書を作成します。証明書の有効期間は180日です。証明書は、別名\fIbusiness\fRで特定されるキーストア・エントリ内の秘密鍵に関連付けられます。秘密鍵には、\fI<new password for private key>\fRで指定したパスワードが割り当てられます。 +.PP +オプションのデフォルト値を使用する場合、コマンドは大幅に短くなります。この場合、オプションは不要です。デフォルト値を持つオプションでは、オプションを指定しなければデフォルト値が使用されます。必須値の入力を求められます。使用可能な値は次のとおりです。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +keytool \-genkeypair +.fi +.if n \{\ +.RE +.\} +.PP +この場合は、\fImykey\fRという別名でキーストア・エントリが作成され、新しく生成された鍵のペア、および90日間有効な証明書がこのエントリに格納されます。このエントリは、ホーム・ディレクトリ内の\fI\&.keystore\fRという名前のキーストアに置かれます。キーストアは、まだ存在していない場合に作成されます。識別名情報、キーストアのパスワードおよび秘密鍵のパスワードの入力を求められます。 +.PP +以降では、オプションを指定しないで\fI\-genkeypair\fRコマンドを実行したものとして例を示します。情報の入力を求められた場合は、最初に示した\fI\-genkeypair\fRコマンドの値を入力したものとします。たとえば識別名には\fIcn=Mark Jones\fR、\fIou=Java\fR、\fIo=Oracle\fR、\fIc=US\fRと指定します。 +.SS "CAからの署名付き証明書のリクエスト" +.PP +自己署名証明書を作成する鍵のペアの生成。証明書に証明書発行局(CA)の署名が付いていれば、他のユーザーから証明書が信頼される可能性も高くなります。CAの署名を取得するには、まず、証明書署名リクエスト(CSR)を生成します。たとえば、次のようにします。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +keytool \-certreq \-file MarkJ\&.csr +.fi +.if n \{\ +.RE +.\} +.PP +CSR(デフォルト別名\fImykey\fRによって特定されるエンティティのCSR)が作成され、MarkJ\&.csrという名前のファイルに置かれます。このファイルをCA (VeriSignなど)に提出します。CAは要求者を(通常はオフラインで)認証し、要求者の公開鍵を認証した署名付きの証明書を送り返します。場合によっては、CAが証明書のチェーンを返すこともあります。証明書のチェーンでは、各証明書がチェーン内のその前の署名者の公開鍵を認証します。 +.SS "CAからの証明書のインポート" +.PP +作成した自己署名証明書は、証明書チェーンで置き換える必要があります。証明書チェーンでは、各証明書が、「ルート」CAを起点とするチェーン内の次の証明書の署名者の公開鍵を認証します。 +.PP +CAからの証明書応答をインポートするには、キーストアか、\fIcacerts\fRキーストア・ファイル内に1つ以上の信頼できる証明書がある必要があります。\fIの\fR\-importcertコマンドを参照してください。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +証明応答が証明書チェーンの場合は、チェーンの最上位証明書が必要です。CAの公開鍵を認証するルートCA証明書。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +証明書応答が単一の証明書の場合は、発行CA(署名した)の証明書が必要です。その証明書が自己署名でない場合は、その署名者の証明書が必要であり、このようにして自己署名ルート証明書が必要になります。 +.RE +.PP +\fIcacerts\fRキーストア・ファイルは、いくつかのVeriSignルートCA証明書を含んだ状態で出荷されているので、VeriSignの証明書を、信頼できる証明書としてキーストア内にインポートする必要がない場合があります。ただし、他のCAに対して署名付き証明書をリクエストしていて、このCAの公開鍵を認証する証明書が、\fIcacerts\fRにまだ追加されていない場合は、該当するCAからの証明書を、「信頼できる証明書」としてインポートする必要があります。 +.PP +通常、CAからの証明書は、自己署名証明書、または他のCAによって署名された証明書です(後者の場合は、該当する他のCAの公開鍵を認証する証明書が必要)。ABC, Inc\&.,がCAで、ABCから自己署名証明書であるA\fIBCCA\&.cer\fRという名前のファイルを取得したとします(この証明書はCAの公開鍵を認証します)。信頼できる証明書として証明書をインポートするときは、証明書が有効であることを確認する必要があります。まず、\fIkeytool \-printcert\fRコマンドまたは\fI\-noprompt\fRオプションなしの\fIkeytool \-importcert\fRコマンドでそれを表示し、表示された証明書のフィンガープリントが期待されるものと一致するかどうかを確認します。証明書を送信した人物に連絡し、この人物が提示した(または安全な公開鍵のリポジトリによって提示される)フィンガープリントと、上のコマンドで表示されたフィンガープリントとを比較します。フィンガープリントが一致すれば、送信途中で他の何者か(攻撃者など)による証明書のすり替えが行われていないことを確認できます。送信途中でこの種の攻撃が行われていた場合、チェックを行わずに証明書をインポートすると、攻撃者によって署名されたすべてのものを信頼することになります。 +.PP +証明書が有効であると信頼する場合は、次のコマンドでキーストアに追加できます。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +keytool \-importcert \-alias abc \-file ABCCA\&.cer +.fi +.if n \{\ +.RE +.\} +.PP +ABCCA\&.cerファイルのデータを含む信頼できる証明書のエントリがキーストア内に作成され、該当するエントリに\fIabc\fRという別名が割り当てられます。 +.SS "CAからの証明書応答のインポート" +.PP +証明書署名リクエストの提出先のCAの公開鍵を認証する証明書をインポートした後は(または同種の証明書がすでにcacertsファイル内に存在している場合は)、証明応答をインポートし、自己署名証明書を証明書チェーンで置き換えることができます。このチェーンは、CAの応答がチェーンの場合に、リクエストに対するレスポンスとしてCAから送り返された証明書チェーンです。また、CAの応答が単一の証明書の場合は、この証明応答と、インポート先のキーストア内または\fIcacerts\fRキーストアファイル内にすでに存在する信頼できる証明書とを使用して構築した証明書チェーンです。 +.PP +たとえば、証明書署名リクエストをVeriSignに送信する場合、送り返された証明書の名前がVSMarkJ\&.cerだとすると、次のようにして応答をインポートできます。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +keytool \-importcert \-trustcacerts \-file VSMarkJ\&.cer +.fi +.if n \{\ +.RE +.\} +.SS "公開鍵を認証する証明書のエクスポート" +.PP +\fIjarsigner\fRコマンドを使用してJava Archive (JAR)ファイルに署名する場合、このファイルを使用するクライアントは署名を認証する必要があります。クライアントが署名を認証する方法の1つに、まず自分の公開鍵の証明書を信頼できるエントリとしてクライアントのキーストアにインポートする方法があります。 +.PP +そのためには、証明書をエクスポートして、クライアントに提供します。例として、次のコマンドを使用して、MJ\&.cerという名前のファイルに証明書をコピーできます。このコマンドでは、エントリに別名\fImykey\fRがあると仮定しています。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +keytool \-exportcert \-alias mykey \-file MJ\&.cer +.fi +.if n \{\ +.RE +.\} +.PP +証明書と署名付きJARファイルを入手したクライアントは、\fIjarsigner\fRコマンドを使用して署名を認証できます。 +.SS "キーストアのインポート" +.PP +コマンド\fIimportkeystore\fRを使用すれば、あるキーストアの全体を別のキーストア内にインポートできます。これは、鍵や証明書といったソースキーストア内のすべてのエントリが、単一のコマンドを使用してターゲットキーストア内にインポートされることを意味します。このコマンドを使用すれば、異なるタイプのキーストア内に含まれるエントリをインポートすることができます。インポート時には、ターゲット・キーストア内の新しいエントリはすべて、元と同じ別名および(秘密鍵や秘密鍵の場合は)保護用パスワードを持ちます。ソースキーストア内の非公開/秘密鍵をリカバリできない場合、\fIkeytool\fRコマンドはユーザーにパスワードの入力を求めます。このコマンドは、別名の重複を検出すると、ユーザーに新しい別名の入力を求めます。ユーザーは、新しい別名を指定することも、単純に既存の別名の上書きを\fIkeytool\fRコマンドに許可することもできます。 +.PP +たとえば、通常のJKSタイプのキーストアkey\&.jks内のエントリをPKCS#11タイプのハードウェア・ベースのキーストア内にインポートするには、次のコマンドを使用します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +keytool \-importkeystore + \-srckeystore key\&.jks \-destkeystore NONE + \-srcstoretype JKS \-deststoretype PKCS11 + \-srcstorepass <src keystore password> + \-deststorepass <destination keystore pwd> +.fi +.if n \{\ +.RE +.\} +.PP +また、\fIimportkeystore\fRコマンドを使用すれば、あるソース・キーストア内の単一のエントリをターゲット・キーストアにインポートすることもできます。この場合は、前例のオプションに加えて、インポートする別名を指定する必要があります。\fI\-srcalias\fRオプションを指定する場合には、ターゲット別名もコマンドラインから指定できるほか、秘密/秘密鍵の保護用パスワードやターゲット保護用パスワードも指定できます。その方法を示すコマンドを次に示します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +keytool \-importkeystore + \-srckeystore key\&.jks \-destkeystore NONE + \-srcstoretype JKS \-deststoretype PKCS11 + \-srcstorepass <src keystore password> + \-deststorepass <destination keystore pwd> + \-srcalias myprivatekey \-destalias myoldprivatekey + \-srckeypass <source entry password> + \-destkeypass <destination entry password> + \-noprompt +.fi +.if n \{\ +.RE +.\} +.SS "SSLサーバーの証明書の生成" +.PP +次に、3つのエンティティ、つまりルートCA(\fIroot\fR)、中間CA(\fIca\fR)およびSSLサーバー(\fIserver\fR)用の鍵ペアと証明書を生成する\fIkeytool\fRコマンドを示します。すべての証明書を同じキーストアに格納するようにしてください。これらの例では、RSAが推奨される鍵のアルゴリズムです。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +keytool \-genkeypair \-keystore root\&.jks \-alias root \-ext bc:c +keytool \-genkeypair \-keystore ca\&.jks \-alias ca \-ext bc:c +keytool \-genkeypair \-keystore server\&.jks \-alias server + +keytool \-keystore root\&.jks \-alias root \-exportcert \-rfc > root\&.pem + +keytool \-storepass <storepass> \-keystore ca\&.jks \-certreq \-alias ca | + keytool \-storepass <storepass> \-keystore root\&.jks + \-gencert \-alias root \-ext BC=0 \-rfc > ca\&.pem +keytool \-keystore ca\&.jks \-importcert \-alias ca \-file ca\&.pem + +keytool \-storepass <storepass> \-keystore server\&.jks \-certreq \-alias server | + keytool \-storepass <storepass> \-keystore ca\&.jks \-gencert \-alias ca + \-ext ku:c=dig,kE \-rfc > server\&.pem +cat root\&.pem ca\&.pem server\&.pem | + keytool \-keystore server\&.jks \-importcert \-alias server +.fi +.if n \{\ +.RE +.\} +.SH "用語" +.PP +キーストア +.RS 4 +キーストアは、暗号化の鍵と証明書を格納するための機能です。 +.RE +.PP +キーストアのエントリ +.RS 4 +キーストアには異なるタイプのエントリを含めることができます。\fIkeytool\fRコマンドで最も適用範囲の広いエントリ・タイプは、次の2つです。 +.sp +\fB鍵のエントリ\fR +\- 各エントリは、非常に重要な暗号化の鍵の情報を保持します。この情報は、許可していないアクセスを防ぐために、保護された形で格納されます。一般に、この種のエントリとして格納される鍵は、秘密鍵か、対応する公開鍵の証明書チェーンを伴う秘密鍵です。証明書チェーンを参照してください。\fIkeytool\fRコマンドがこの両方のタイプのエントリを処理できるのに対し、\fIjarsigner\fRツールは後者のタイプのエントリ、つまり秘密鍵とそれに関連付けられた証明書チェーンのみを処理します。 +.sp +\fB信頼できる証明書のエントリ\fR: 各エントリは、第三者からの公開鍵証明書を1つ含んでいます。このエントリは、信頼できる証明書と呼ばれます。それは、証明書内の公開鍵が、証明書のSubject(所有者)によって特定されるアイデンティティに由来するものであることを、キーストアの所有者が信頼するからです。証明書の発行者は、証明書に署名を付けることによって、その内容を保証します。 +.RE +.PP +キーストアの別名 +.RS 4 +キーストアのすべてのエントリ(鍵および信頼できる証明書エントリ)は、一意の別名を介してアクセスされます。 +.sp +別名を指定するのは、\fI\-genseckey\fRコマンドを使用して秘密鍵を生成したり、\fI\-genkeypair\fRコマンドを使用して鍵ペア(公開鍵と秘密鍵)を生成したり、\fI\-importcert\fRコマンドを使用して証明書または証明書チェーンを信頼できる証明書のリストに追加するなど、特定のエンティティをキーストアに追加する場合です。これ以後、\fIkeytool\fRコマンドでエンティティを参照する場合は、このときに指定した別名を使用する必要があります。 +.sp +たとえば、\fIduke\fRという別名を使用して新しい公開鍵と秘密鍵のペアを生成し、公開鍵を自己署名証明書でラップするとします。この場合は、次のコマンドを実行します。証明書チェーンを参照してください。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +keytool \-genkeypair \-alias duke \-keypass dukekeypasswd +.fi +.if n \{\ +.RE +.\} +この例では、初期パスワードとして\fIdukekeypasswd\fRを指定しています。以後、別名\fIduke\fRに関連付けられた秘密鍵にアクセスするコマンドを実行するときは、このパスワードが必要になります。Dukeの秘密鍵のパスワードをあとから変更するには、次のコマンドを実行します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +keytool \-keypasswd \-alias duke \-keypass dukekeypasswd \-new newpass +.fi +.if n \{\ +.RE +.\} +パスワードが、\fIdukekeypasswd\fRから\fInewpass\fRに変更されます。テストを目的とする場合、または安全であることがわかっているシステムで実行する場合以外は、コマンドラインやスクリプトでパスワードを指定しないでください。必要なパスワードのオプションをコマンドラインで指定しなかった場合は、パスワードの入力を求められます。 +.RE +.PP +キーストアの実装 +.RS 4 +\fIjava\&.security\fRパッケージで提供されている\fIKeyStore\fRクラスは、キーストア内の情報へのアクセスおよび情報の変更を行うための、明確に定義されたインタフェースを提供します。キーストアの固定実装としては、それぞれが特定のタイプのキーストアを対象とする複数の異なる実装が存在可能です。 +.sp +現在、\fIkeytool\fRと\fIjarsigner\fRの2つのコマンドライン・ツールと、Policy Toolという名前のGUIベースのツールが、キーストアの実装を使用しています。\fIKeyStore\fRクラスは\fIpublic\fRであるため、ユーザーはKeyStoreを使用した他のセキュリティ・アプリケーションも作成できます。 +.sp +キーストアには、Oracleが提供する組込みのデフォルトの実装があります。これは、JKSという名前の独自のキーストア・タイプ(形式)を利用するもので、キーストアをファイルとして実装しています。この実装では、個々の秘密鍵は個別のパスワードによって保護され、キーストア全体の整合性も(秘密鍵とは別の)パスワードによって保護されます。 +.sp +キーストアの実装は、プロバイダベースです。具体的には、\fIKeyStore\fRによって提供されるアプリケーション・インタフェースがサービス・プロバイダ・インタフェース(SPI)に基づいて実装されます。つまり、対応する\fIKeystoreSpi\fR抽象クラス(これも\fIjava\&.security\fRパッケージに含まれています)があり、このクラスが、プロバイダが実装する必要のあるService Provider Interfaceのメソッドを定義しています。ここで、\fIプロバイダ\fRとは、Java Security APIによってアクセス可能なサービスのサブセットに対し、その固定実装を提供するパッケージまたはパッケージの集合のことです。キーストアの実装を提供するには、http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/security/crypto/HowToImplAProvider\&.htmlにある +Java暗号化アーキテクチャのプロバイダの実装方法で説明しているように、クライアントはプロバイダを実装し、\fIKeystoreSpi\fRサブクラスの実装を提供する必要があります。 +.sp +アプリケーションでは、\fIKeyStore\fRクラスが提供する\fIgetInstance\fRファクトリ・メソッドを使用することで、様々なプロバイダから異なるタイプのキーストアの実装を選択できます。キーストアのタイプは、キーストア情報の格納形式とデータ形式を定義するとともに、キーストア内の非公開/秘密鍵とキーストアの整合性を保護するために使用されるアルゴリズムを定義します。異なるタイプのキーストアの実装には、互換性はありません。 +.sp +\fIkeytool\fRコマンドは、任意のファイルベースのキーストア実装で動作します。コマンド・ラインで渡されたキーストアの場所をファイル名として扱って、\fIFileInputStream\fRに変換し、ここからキーストア情報をロードします。\fIjarsigner\fRおよび\fIpolicytool\fRコマンドは、URLで指定できる任意の場所からキーストアを読み取ることができます。 +.sp +\fIkeytool\fRと\fIjarsigner\fRの場合、\fI\-storetype\fRオプションを使用してコマンドラインでキーストアのタイプを指定できます。Policy Toolの場合は、「キーストア」メニューによってキーストアのタイプを指定できます。 +.sp +ユーザーがキーストアのタイプを明示的に指定しなかった場合、セキュリティ・プロパティ・ファイルで指定された\fIkeystore\&.type\fRプロパティの値に基づいて、ツールによってキーストアの実装が選択されます。このセキュリティ・プロパティ・ファイルは\fIjava\&.security\fRと呼ばれ、Windowsではセキュリティ・プロパティ・ディレクトリ\fIjava\&.home\elib\esecurity\fR、Oracle Solarisでは\fIjava\&.home/lib/security\fRにあります。\fIjava\&.home\fRは、実行時環境のディレクトリです。\fIjre\fRディレクトリは、SDKまたはJava Runtime Environment (JRE)の最上位のディレクトリにあります。 +.sp +各ツールは、\fIkeystore\&.type\fRの値を取得し、この値で指定されたタイプのキーストアを実装しているプロバイダが見つかるまで、現在インストールされているすべてのプロバイダを調べます。そのプロバイダからのキーストアの実装を使用します。\fIKeyStore\fRクラスに定義されているstaticメソッド\fIgetDefaultType\fRを使用すると、アプリケーションやアプレットから\fIkeystore\&.type\fRプロパティの値を取得できます。次のコードは、デフォルトのキーストア・タイプ(\fIkeystore\&.type\fRプロパティで指定されたタイプ)のインスタンスを生成します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +KeyStore keyStore = KeyStore\&.getInstance(KeyStore\&.getDefaultType()); +.fi +.if n \{\ +.RE +.\} +デフォルトのキーストア・タイプは\fIjks\fRで、これはOracleが提供する独自のタイプのキーストアの実装です。これは、セキュリティ・プロパティ・ファイル内の次の行によって指定されています。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +keystore\&.type=jks +.fi +.if n \{\ +.RE +.\} +各ツールでデフォルト以外のキーストアの実装を使用するには、上の行を変更して別のキーストアのタイプを指定します。たとえば、\fIpkcs12\fRと呼ばれるキーストアのタイプのキーストアの実装を提供するプロバイダ・パッケージがある場合、行を次のように変更します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +keystore\&.type=pkcs12 +.fi +.if n \{\ +.RE +.\} +\fB注意:\fR +キーストアのタイプの指定では、大文字と小文字は区別されません。たとえば、JKSとjksは同じものとして扱われます。 +.RE +.PP +証明書 +.RS 4 +証明書(公開鍵証明書)とは、あるエンティティ(発行者)からのデジタル署名付きの文書のことです。証明書には、他のあるエンティティ(署名者)の公開鍵(およびその他の情報)が特別な値を持っていることが書かれています。次の用語は、証明書に関連しています。 +.sp +\fB公開鍵\fR: 公開鍵は、特定のエンティティに関連付けられた数です。公開鍵は、該当するエンティティとの間に信頼できる関係を持つ必要があるすべての人に対して公開することを意図したものです。公開鍵は、署名を検証するのに使用されます。 +.sp +\fBデジタル署名\fR: データがデジタル署名されると、そのデータは、エンティティのアイデンティティと、そのエンティティがデータの内容について知っていることを証明書する署名とともに格納されます。エンティティの秘密鍵を使用してデータに署名を付けると、データの偽造は不可能になります。 +.sp +\fBアイデンティティ\fR: エンティティをアドレス指定する既知の方法。システムによっては、公開鍵をアイデンティティにするものがあります。公開鍵の他にも、Oracle Solaris UIDや電子メール・アドレス、X\&.509識別名など、様々なものをアイデンティティとすることができます。 +.sp +\fB署名\fR: 署名は、なんらかのデータを基にエンティティの秘密鍵を使用して計算されます。署名者、証明書の場合は発行者とも呼ばれます。 +.sp +\fB秘密鍵\fR: 秘密鍵は特定のエンティティのみが知っている数のことで、この数のことを、そのエンティティの秘密鍵といいます。秘密鍵は、他に知られないように秘密にしておくことが前提になっています。秘密鍵と公開鍵は、すべての公開鍵暗号化システムで対になって存在しています。DSAなどの典型的な公開鍵暗号化システムの場合、1つの秘密鍵は正確に1つの公開鍵に対応します。秘密鍵は、署名を計算するのに使用されます。 +.sp +\fBエンティティ\fR: エンティティは、人、組織、プログラム、コンピュータ、企業、銀行など、一定の度合いで信頼の対象となる様々なものを指します。 +.sp +公開鍵暗号化では、ユーザーの公開鍵にアクセスする必要があります。大規模なネットワーク環境では、互いに通信しているエンティティ間で以前の関係が引続き確立されていると仮定したり、使用されているすべての公開鍵を収めた信頼できるリポジトリが存在すると仮定したりすることは不可能です。このような公開鍵の配布に関する問題を解決するために証明書が考案されました。現在では、証明書発行局(CA)が信頼できる第三者として機能します。CAは、他のエンティティの証明書に署名する(発行する)行為を、信頼して任されているエンティティ(企業など)です。CAは法律上の契約に拘束されるので、有効かつ信頼できる証明書のみを作成するものとして扱われます。VeriSign、Thawte、Entrustをはじめ、多くの公的な証明書発行局が存在します。 +.sp +Microsoftの認証サーバー、EntrustのCA製品などを所属組織内で利用すれば、独自の証明書発行局を運営することも可能です。\fIkeytool\fRコマンドを使用すると、証明書の表示、インポートおよびエクスポートを行うことができます。また、自己署名証明書を生成することもできます。 +.sp +現在、\fIkeytool\fRコマンドはX\&.509証明書を対象にしています。 +.RE +.PP +X\&.509証明書 +.RS 4 +X\&.509規格では、証明書に含める情報が定義されており、この情報を証明書に書き込む方法(データ形式)についても記述されています。証明書のすべてのデータは、ASN\&.1/DERと呼ばれる2つの関連規格を使用して符号化されます。Abstract Syntax Notation 1はデータについて記述しています。Definite Encoding Rulesは、データの保存および転送の方法について記述しています。 +.sp +すべてのX\&.509証明書は、署名の他に次のデータを含んでいます。 +.sp +\fBバージョン\fR: 証明書に適用されるX\&.509規格のバージョンを特定します。証明書に指定できる情報は、バージョンによって異なります。今のところ、3つのバージョンが定義されています。\fIkeytool\fRコマンドでは、v1、v2、v3の証明書をインポートおよびエクスポートできます。v3の証明書を生成します。 +.sp +X\&.509 Version 1は、1988年から利用されて広く普及しており、最も一般的です。 +.sp +X\&.509 Version 2では、Subjectや発行者の名前をあとで再利用できるようにするために、Subjectと発行者の一意識別子の概念が導入されました。ほとんどの証明書プロファイル文書では、名前を再使用しないことと、証明書で一意の識別子を使用しないことが、強く推奨されています。Version 2の証明書は、広くは使用されていません。 +.sp +X\&.509 Version 3は最も新しい(1996年)規格で、エクステンションの概念をサポートしています。エクステンションは誰でも定義することができ、証明書に含めることができます。一般的なエクステンションとしては、KeyUsage(\fI署名専用\fRなど、鍵の使用を特定の目的に制限する)、AlternativeNames(DNS名、電子メール・アドレス、IPアドレスなど、他のアイデンティティを公開鍵に関連付けることができる)などがあります。エクステンションには、criticalというマークを付けて、そのエクステンションのチェックと使用を義務づけることができます。たとえば、criticalとマークされ、\fIkeyCertSign\fRが設定されたKeyUsageエクステンションが証明書に含まれている場合、この証明書をSSL通信中に提示すると、証明書が拒否されます。これは、証明書のエクステンションによって、関連する秘密鍵が証明書の署名専用として指定されており、SSLでは使用できないためです。 +.sp +\fBシリアル番号\fR: 証明書を作成したエンティティは、そのエンティティが発行する他の証明書と区別するために、証明書にシリアル番号を割り当てます。この情報は、様々な方法で使用されます。たとえば、証明書が取り消されると、シリアル番号が証明書失効リスト(CRL)に格納されます。 +.sp +\fB証明書アルゴリズム識別子\fR: 証明書に署名を付けるときにCAが使用したアルゴリズムを特定します。 +.sp +\fB発行者名\fR: 証明書に署名を付けたエンティティのX\&.500識別名です。X\&.500識別名を参照してください。通常はCAです。この証明書を使用することは、証明書に署名を付けたエンティティを信頼することを意味します。ルートつまりトップレベルのCAの証明書など、場合によっては発行者が自身の証明書に署名を付けることがあります。 +.sp +\fB有効期間\fR: 各証明書は限られた期間のみ有効です。この期間は開始の日時と終了の日時によって指定され、数秒の短い期間から100年という長期にわたることもあります。選択される有効期間は、証明書への署名に使用される秘密鍵の強度や証明書に支払う金額など、様々な要因で異なります。有効期間は、関連する秘密鍵が損われない場合に、エンティティが公開鍵を信頼できると期待される期間です。 +.sp +\fB主体名\fR: 証明書で公開鍵を認証するエンティティの名前。この名前はX\&.500標準を使用するので、インターネット全体で一意なものと想定されます。これは、エンティティのX\&.500識別名(DN)です。X\&.500識別名を参照してください。次に例を示します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +CN=Java Duke, OU=Java Software Division, O=Oracle Corporation, C=US +.fi +.if n \{\ +.RE +.\} +これらはそれぞれ主体の通称(CN)、組織単位(OU)、組織(O)、国(C)を表します。 +.sp +\fB主体の公開鍵情報\fR: 名前を付けられたエンティティの公開鍵とアルゴリズム識別子です。アルゴリズム識別子では、公開鍵に対して使用されている公開鍵暗号化システムおよび関連する鍵パラメータが指定されています。 +.RE +.PP +証明書チェーン +.RS 4 +\fIkeytool\fRコマンドでは、秘密鍵および関連する証明書チェーンを含むキーストアの鍵エントリを作成し、管理することができます。このようなエントリでは、秘密鍵に対応する公開鍵は、チェーンの最初の証明書に含まれています。 +.sp +鍵を初めて作成すると、自己署名証明書という1つの要素のみを含むチェーンが開始されます。\fIの\fR\-genkeypairコマンドを参照してください。自己署名証明書は発行者(署名者)が主体と同じです。主体は、その公開鍵が証明書によって認証されるエンティティです。\fI\-genkeypair\fRコマンドを呼び出して新しい公開鍵と秘密鍵のペアを作成すると、公開鍵は常に自己署名証明書でラップされます。 +.sp +この後、証明書署名リクエスト(CSR)が\fI\-certreq\fRコマンドで生成されて、CSRが証明書発行局(CA)に送信されると、CAからのレスポンスが\fI\-importcert\fRでインポートされ、元の自己署名証明書は証明書チェーンによって置き換えられます。コマンドの\fI\-certreq\fRおよび\fI\-importcert\fRオプションを参照してください。チェーンの最後にあるのは、Subjectの公開鍵を認証したCAが発行した証明書(応答)です。チェーン内のその前の証明書は、CAの公開鍵を認証する証明書です。 +.sp +CAの公開鍵を認証する証明書は、多くの場合、自己署名証明書(つまりCAが自身の公開鍵を認証した証明書)であり、これはチェーンの最初の証明書になります。場合によっては、CAが証明書のチェーンを返すこともあります。この場合、チェーン内の最後の証明書(CAによって署名され、鍵エントリの公開鍵を認証する証明書)に変わりはありませんが、チェーン内のその前の証明書は、CSRの送信先のCAとは別のCAによって署名され、CSRの送信先のCAの公開鍵を認証する証明書になります。チェーン内のその前の証明書は、次のCAの鍵を認証する証明書になります。以下同様に、自己署名された「ルート」証明書に達するまでチェーンが続きます。したがって、チェーン内の(最初の証明書以後の)各証明書では、チェーン内の次の証明書の署名者の公開鍵が認証されていることになります。 +.sp +多くのCAは、チェーンをサポートせずに発行済の証明書のみを返します。特に、中間のCAが存在しないフラットな階層構造の場合は、その傾向が顕著です。このような場合は、キーストアにすでに格納されている信頼できる証明書情報から、証明書チェーンを確立する必要があります。 +.sp +別の応答形式(PKCS#7で定義されている形式)では、発行済証明書に加え、証明書チェーンのサポートが含まれています。\fIkeytool\fRコマンドでは、どちらの応答形式も扱うことができます。 +.sp +トップレベル(ルート)CAの証明書は、自己署名証明書です。ただし、ルートの公開鍵への信頼は、ルート証明書自体からではなく、新聞など他のソースから取得されます。これは、VeriSignルートCAなどの識別名を使用して、誰でも自己署名型証明書を生成できるためです。ルートCAの公開鍵は広く知られています。ルートCAの公開鍵を証明書に格納する理由は、証明書という形式にすることで多くのツールから利用できるようになるからにすぎません。つまり、証明書は、ルートCAの公開鍵を運ぶ「媒体」として利用されるのみです。ルートCAの証明書をキーストアに追加するときは、\fI\-printcert\fRオプションを使用して、その前に証明書の内容を表示し、表示されたフィンガープリントと、新聞やルートCAのWebページなどから入手した既知のフィンガープリントとを比較する必要があります。 +.RE +.PP +cacerts証明書ファイル +.RS 4 +\fIcacerts\fRという名前の証明書ファイルは、Windowsではセキュリティ・プロパティ・ディレクトリ\fIjava\&.home\elib\esecurity\fR、Oracle Solarisでは\fIjava\&.home/lib/security\fRに置かれています。\fIjava\&.home\fRは、実行環境のディレクトリ(SDKの\fIjre\fRディレクトリまたはJREの最上位ディレクトリ)です。 +.sp +\fIcacerts\fRファイルは、CAの証明書を含む、システム全体のキーストアです。システム管理者は、キーストア・タイプに\fIjks\fRを指定することで、\fIkeytool\fRコマンドを使用してこのファイルの構成と管理を行うことができます。\fIcacerts\fRキーストア・ファイルは、ルートCA証明書のデフォルト・セットを含んだ状態で出荷されています。デフォルトの証明書を一覧表示するには、次のコマンドを使用します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +keytool \-list \-keystore java\&.home/lib/security/cacerts +.fi +.if n \{\ +.RE +.\} +\fIcacerts\fRキーストア・ファイルの初期パスワードは、\fIchangeit\fRです。システム管理者は、SDKのインストール後、このファイルのパスワードとデフォルト・アクセス権を変更する必要があります。 +.sp +\fB注意:\fR +\fIcacerts\fRファイルを確認することが重要です。\fIcacerts\fRファイル内のCAは、署名および他のエンティティへの証明書発行のためのエンティティとして信頼されるため、\fIcacerts\fRファイルの管理は慎重に行う必要があります。\fIcacerts\fRファイルには、信頼するCAの証明書のみが含まれている必要があります。ユーザーは、自身の責任において、\fIcacerts\fRファイルにバンドルされている信頼できるルートCA証明書を検証し、信頼性に関する独自の決定を行います。 +.sp +信頼できないCA証明書を\fIcacerts\fRファイルから削除するには、\fIkeytool\fRコマンドの\fIdelete\fRオプションを使用します。\fIcacerts\fRファイルはJREのインストール・ディレクトリにあります。このファイルを編集するアクセス権がない場合は、システム管理者に連絡してください +.RE +.PP +インターネットRFC 1421証明書符号化規格 +.RS 4 +多くの場合、証明書は、バイナリ符号化ではなく、インターネットRFC 1421規格で定義されている出力可能符号化方式を使用して格納されます。Base 64符号化とも呼ばれるこの証明書形式では、電子メールやその他の機構を通じて、他のアプリケーションに証明書を容易にエクスポートできます。 +.sp +\fI\-importcert\fRと\fI\-printcert\fRコマンドでは、この形式の証明書とバイナリ符号化の証明書を読み込むことができます。\fI\-exportcert\fRコマンドでは、デフォルトでバイナリ符号化の証明書が出力されます。ただし、\fI\-rfc\fRオプションを指定した場合は、出力可能符号化方式の証明書が出力されます。 +.sp +\fI\-list\fRコマンドでは、デフォルトで証明書のSHA1フィンガープリントが出力されます。\fI\-v\fRオプションが指定されている場合、証明書は人が理解できる形式で出力されます。\fI\-rfc\fRオプションが指定されている場合、証明書は出力可能符号化方式で出力されます。 +.sp +出力可能符号化方式で符号化された証明書は、次のテキストで始まり、次のテキストで終了します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-\-\-\-\-BEGIN CERTIFICATE\-\-\-\-\- + +encoded certificate goes here\&. + +\-\-\-\-\-END CERTIFICATE\-\-\-\-\- +.fi +.if n \{\ +.RE +.\} +.RE +.PP +X\&.500識別名 +.RS 4 +X\&.500識別名は、エンティティを特定するために使用されます。たとえば、X\&.509証明書の\fIsubject\fRフィールドと\fIissuer\fR(署名者)フィールドで指定される名前は、X\&.500識別名です。\fIkeytool\fRコマンドは、次のサブパートをサポートしています。 +.sp +\fBcommonName\fR: Susan Jonesなど、人の通称。 +.sp +\fBorganizationUnit\fR: 小さな組織(部、課など)の名称。Purchasingなどです。 +.sp +\fBlocalityName\fR: 地域(都市)名。Palo Altoなど。 +.sp +\fBstateName\fR: 州名または地方名。Californiaなど。 +.sp +\fBcountry\fR: 2文字の国コード。CHなど。 +.sp +識別名文字列を\fI\-dname\fRオプションの値として指定する場合(たとえば\fI\-genkeypair\fRコマンドに)、文字列は次の形式にする必要があります。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +CN=cName, OU=orgUnit, O=org, L=city, S=state, C=countryCode +.fi +.if n \{\ +.RE +.\} +イタリック体の項目は、実際に指定する値を表します。短縮形のキーワードの意味は、次のとおりです。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +CN=commonName +OU=organizationUnit +O=organizationName +L=localityName +S=stateName +C=country +.fi +.if n \{\ +.RE +.\} +次に示すのは、識別名文字列の例です。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +CN=Mark Smith, OU=Java, O=Oracle, L=Cupertino, S=California, C=US +.fi +.if n \{\ +.RE +.\} +この文字列を使用したコマンドの例です。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +keytool \-genkeypair \-dname "CN=Mark Smith, OU=Java, O=Oracle, L=Cupertino, +S=California, C=US" \-alias mark +.fi +.if n \{\ +.RE +.\} +キーワードの短縮形では、大文字と小文字は区別されません。たとえば、CN、cnおよびCnは、どれも同じものとして扱われます。 +.sp +一方、キーワードの指定順序には意味があり、各サブコンポーネントは上に示した順序で指定する必要があります。ただし、サブコンポーネントをすべて指定する必要はありません。たとえば、次のように一部のサブコンポーネントのみを指定できます。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +CN=Steve Meier, OU=Java, O=Oracle, C=US +.fi +.if n \{\ +.RE +.\} +識別名文字列の値にカンマが含まれる場合に、コマンドラインで文字列を指定するときには、次のようにカンマをバックスラッシュ文字(\e)でエスケープする必要があります。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +cn=Peter Schuster, ou=Java\e, Product Development, o=Oracle, c=US +.fi +.if n \{\ +.RE +.\} +識別名文字列をコマンドラインで指定する必要はありません。識別名を必要とするコマンドを実行するときに、コマンドラインで識別名を指定しなかった場合は、各サブコンポーネントの入力を求められます。この場合は、カンマをバックスラッシュ(\e)でエスケープする必要はありません。 +.RE +.SH "警告" +.SS "信頼できる証明書のインポート警告" +.PP +\fB重要\fR: 信頼できる証明書として証明書をインポートする前に、証明書の内容を慎重に調べてください。 +Windowsの例:.PP +まず、\fI\-noprompt\fRオプションを指定せずに\fI\-printcert\fRコマンドまたは\fI\-importcert\fRコマンドを使用して、証明書を表示します。表示された証明書のフィンガープリントが、期待されるフィンガープリントと一致することを確認します。たとえば、証明書が送られてきて、この証明書を\fI\etmp\ecert\fRという名前でファイルに格納しているとします。この場合は、信頼できる証明書のリストにこの証明書を追加する前に、\fI\-printcert\fRコマンドを実行してフィンガープリントを表示できます。たとえば、次のようにします。 +.sp +.if n \{\ +.RS 4 +.\} +.nf + keytool \-printcert \-file \etmp\ecert + Owner: CN=ll, OU=ll, O=ll, L=ll, S=ll, C=ll + Issuer: CN=ll, OU=ll, O=ll, L=ll, S=ll, C=ll + Serial Number: 59092b34 + Valid from: Thu Sep 25 18:01:13 PDT 1997 until: Wed Dec 24 17:01:13 PST 1997 + Certificate Fingerprints: + MD5: 11:81:AD:92:C8:E5:0E:A2:01:2E:D4:7A:D7:5F:07:6F + SHA1: 20:B6:17:FA:EF:E5:55:8A:D0:71:1F:E8:D6:9D:C0:37:13:0E:5E:FE + SHA256: 90:7B:70:0A:EA:DC:16:79:92:99:41:FF:8A:FE:EB:90: + 17:75:E0:90:B2:24:4D:3A:2A:16:A6:E4:11:0F:67:A4 +.fi +.if n \{\ +.RE +.\} +Oracle Solarisの例:.PP +まず、\fI\-noprompt\fRオプションを指定せずに\fI\-printcert\fRコマンドまたは\fI\-importcert\fRコマンドを使用して、証明書を表示します。表示された証明書のフィンガープリントが、期待されるフィンガープリントと一致することを確認します。たとえば、あるユーザーから証明書が送られてきて、この証明書を\fI/tmp/cert\fRという名前でファイルに格納しているとします。この場合は、信頼できる証明書のリストにこの証明書を追加する前に、\fI\-printcert\fRコマンドを実行してフィンガープリントを表示できます。たとえば、次のようにします。 +.sp +.if n \{\ +.RS 4 +.\} +.nf + keytool \-printcert \-file /tmp/cert + Owner: CN=ll, OU=ll, O=ll, L=ll, S=ll, C=ll + Issuer: CN=ll, OU=ll, O=ll, L=ll, S=ll, C=ll + Serial Number: 59092b34 + Valid from: Thu Sep 25 18:01:13 PDT 1997 until: Wed Dec 24 17:01:13 PST 1997 + Certificate Fingerprints: + MD5: 11:81:AD:92:C8:E5:0E:A2:01:2E:D4:7A:D7:5F:07:6F + SHA1: 20:B6:17:FA:EF:E5:55:8A:D0:71:1F:E8:D6:9D:C0:37:13:0E:5E:FE + SHA256: 90:7B:70:0A:EA:DC:16:79:92:99:41:FF:8A:FE:EB:90: + 17:75:E0:90:B2:24:4D:3A:2A:16:A6:E4:11:0F:67:A4 +.fi +.if n \{\ +.RE +.\} +.PP +次に、証明書を送信した人物に連絡し、この人物が提示したフィンガープリントと、上のコマンドで表示されたフィンガープリントとを比較します。フィンガープリントが一致すれば、送信途中で他の何者か(攻撃者など)による証明書のすり替えが行われていないことを確認できます。送信途中でこの種の攻撃が行われていた場合、チェックを行わずに証明書をインポートすると、攻撃者によって署名されたすべてのもの(攻撃的意図を持つクラス・ファイルを含んだJARファイルなど)を信頼することになります。 +.PP +\fB注意:\fR +証明書をインポートする前に\fI\-printcert\fRコマンドを実行する必要はありません。キーストア内の信頼できる証明書のリストに証明書を追加する前に、\fI\-importcert\fRコマンドによって証明書の情報が表示され、確認を求めるメッセージが表示されるためです。ユーザーはインポート操作を停止できます。ただし、これを実行できるのは、\fI\-noprompt\fRオプションを指定せずに\fI\-importcert\fRコマンドを呼び出す場合のみです。\fI\-noprompt\fRオプションが指定されている場合、ユーザーとの対話は行われません。 +.SS "パスワード警告" +.PP +キーストアに対する操作を行うほとんどのコマンドでは、ストアのパスワードが必要です。また、一部のコマンドでは、非公開/秘密鍵のパスワードが必要になることがあります。パスワードはコマンドラインで指定できます(\fI\-storepass\fRオプションと\fI\-keypass\fRオプションを使用)。ただし、テストを目的とする場合、または安全であることがわかっているシステムで実行する場合以外は、コマンドラインやスクリプトでパスワードを指定しないでください。必要なパスワードのオプションをコマンドラインで指定しなかった場合は、パスワードの入力を求められます。 +.SS "証明書の準拠に関する警告" +.PP +インターネット標準RFC 5280では、X\&.509証明書の準拠に関するプロファイルが定義されており、証明書のフィールドおよびエクステンションに有効な値および値の組合せが記載されています。標準については、 +http://tools\&.ietf\&.org/rfc/rfc5280\&.txtを参照してください +.PP +\fIkeytool\fRコマンドでは、これらのルールすべてが適用されるわけではないため、標準に準拠しない証明書を生成できます。標準に準拠しない証明書は、JREや他のアプリケーションで拒否されることがあります。ユーザーは、\fI\-dname\fRや\fI\-ext\fRなどで適正なオプションを指定するようにしてください。 +.SH "注意" +.SS "新しい信頼できる証明書のインポート" +.PP +\fIkeytool\fRコマンドは、キーストアに証明書を追加する前に、キーストア内にすでに存在する信頼できる証明書を使用して、インポートする証明書から(ルートCAの)自己署名証明書に至るまでの信頼のチェーンの構築を試みます。 +.PP +\fI\-trustcacerts\fRオプションを指定した場合、追加の証明書は信頼できるすなわち\fIcacerts\fRという名前のファイルに含まれる証明書のチェーンとみなされます。 +.PP +\fIkeytool\fRコマンドが、インポートする証明書から自己署名証明書(キーストアまたは\fIcacerts\fRファイルに含まれている自己署名証明書)に至るまでの信頼のパスの構築に失敗した場合は、インポートする証明書の情報を表示し、ユーザーに確認を求めます。この場合は、表示された証明書のフィンガープリントと、他のなんらかの(信頼できる)情報源(証明書の所有者など)から入手したフィンガープリントとを比較します。信頼できる証明書として証明書をインポートするときは、証明書が有効であることを慎重に確認する必要があります。信頼できる証明書のインポート警告を参照してください。インポート操作は、証明書を確認する時点で中止できます。\fI\-noprompt\fRオプションが指定されている場合、ユーザーとの対話は行われません。 +.SS "証明書応答のインポート" +.PP +証明書応答をインポートするときは、キーストア内の信頼できる証明書、および(\fI\-trustcacert\fR\fIs\fRオプションが指定されている場合は)\fIcacerts\fRキーストア・ファイルで構成された証明書を使用して証明書応答が検査されます。cacerts証明書ファイルを参照してください。 +.PP +証明書応答が信頼できるかどうかを決定する方法は次のとおりです。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +証明書応答が単一のX\&.509証明書である場合、\fIkeytool\fRコマンドは、証明書応答から(ルートCAの)自己署名証明書に至るまでの信頼チェーンの確立を試みます。証明書応答と、証明書応答の認証に使用される証明書の階層構造は、aliasの新しい証明書チェーンを形成します。信頼チェーンが確立されない場合、証明書応答はインポートされません。この場合、\fIkeytool\fRコマンドは証明書を出力せず、ユーザーに検証を求めるプロンプトを表示します。ユーザーが証明書応答の信頼性を判断するのは非常に難しいためです。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +証明書応答がPKCS#7形式の証明書チェーンまたは一連のX\&.509証明書である場合、チェーンは、ユーザーの証明書が最初に、0以上のCA証明書がその次にくるように並べられます。チェーンが自己署名のルートCA証明書で終わり、\fI \-trustcacerts\fRオプションが指定されている場合、\fIkeytool\fRコマンドは、その証明書と、キーストア内または\fIcacerts\fRキーストア・ファイル内の信頼できるすべての証明書を照合しようとします。チェーンが自己署名のルートCA証明書で終わっておらず、\fI\-trustcacerts\fRオプションが指定されている場合、\fIkeytool\fRコマンドは、キーストア内または\fIcacerts\fRキーストア・ファイル内の信頼できる証明書から自己署名のルートCA証明書を見つけてそれをチェーンの末尾に追加しようとします。その証明書が見つからず、\fI\-noprompt\fRオプションが指定されていない場合は、チェーン内の最後の証明書の情報が出力され、ユーザーは確認を求められます。 +.RE +.PP +証明書応答内の公開鍵が\fIalias\fRですでに格納されているユーザーの公開鍵に一致した場合、古い証明書チェーンが応答内の新しい証明書チェーンで置き換えられます。以前の証明書チェーンを有効な\fIkeypass\fRで置き換えることができるのは、エントリの秘密鍵を保護するためのパスワードを指定した場合のみです。パスワードを指定しておらず、秘密鍵のパスワードがキーストアのパスワードと異なる場合は、秘密鍵のパスワードの入力を求められます。 +.PP +このコマンドは、以前のリリースでは\fI\-import\fRという名前でした。このリリースでは、引き続き古い名前がサポートされています。今後は、新しい名前\fI\-importcert\fRが優先されます。 +.SH "関連項目" +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +jar(1) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +jarsigner(1) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +http://docs\&.oracle\&.com/javase/tutorial/security/index\&.htmlにある +「コース: Java SEのセキュリティ機能」 +.RE +.br +'pl 8.5i +'bp diff --git a/jdk/src/linux/doc/man/ja/native2ascii.1 b/jdk/src/linux/doc/man/ja/native2ascii.1 index 89b6f6c3be4..f8bdb8ebd49 100644 --- a/jdk/src/linux/doc/man/ja/native2ascii.1 +++ b/jdk/src/linux/doc/man/ja/native2ascii.1 @@ -1,72 +1,98 @@ -." Copyright (c) 1997, 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. -." -.TH native2ascii 1 "07 May 2011" - -.LP -.SH "名前" -native2ascii \- ネイティブ \- ASCII コンバータ -.LP -.LP -サポートされる文字エンコーディングの文字のファイルを ASCII または Unicode エスケープあるいはその両方のファイルに変換します。その逆の変換も行います。 -.LP -.SH "形式" -.LP +'\" t +.\" Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. +.\" Title: native2ascii +.\" Language: English +.\" Date: 2013年11月21日 +.\" SectDesc: 国際化ツール +.\" Software: JDK 8 +.\" Arch: 汎用 +.\" +.\" 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. +.\" +.pl 99999 +.TH "native2ascii" "1" "2013年11月21日" "JDK 8" "国際化ツール" +.\" ----------------------------------------------------------------- +.\" * Define some portability stuff +.\" ----------------------------------------------------------------- +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.\" http://bugs.debian.org/507673 +.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" ----------------------------------------------------------------- +.\" * set default formatting +.\" ----------------------------------------------------------------- +.\" disable hyphenation +.nh +.\" disable justification (adjust text to left margin only) +.ad l +.\" ----------------------------------------------------------------- +.\" * MAIN CONTENT STARTS HERE * +.\" ----------------------------------------------------------------- +.SH "NAME" +native2ascii \- サポートされている任意の文字エンコーディングの文字を含むファイルを、ASCIIおよびUnicodeでエスケープされたファイルに変換して(またはその逆)、ローカライズ可能なアプリケーションを作成します。 +.SH "概要" +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -\fP\f4native2ascii\fP\f2 [options] [inputfile [outputfile]]\fP -.fl +\fInative2ascii\fR [ \fIinputfile\fR ] [ \fIoutputfile\fR ] .fi - -.LP -.SH "説明" -.LP -.LP -\f2native2ascii\fP Java 実行環境でサポートされる文字エンコーディングにエンコードされたファイルを、ASCII でエンコードされたファイルに変換します。ASCII 文字セットの一部でないすべての文字で Unicode エスケープ (「\\uxxxx」の表記) を使用します。このプロセスは、ISO\-8859\-1 文字セットに含まれない文字が含まれているプロパティーファイルで必要です。このツールは、その逆の変換を実行することもできます。 -.LP -.LP -\f2outputfile\fP を省略した場合、標準出力に出力されます。さらに、 \f2inputfile\fP を省略した場合、標準入力から入力されます。 -.LP -.SH "オプション" -.LP -.RS 3 -.TP 3 -\-reverse -逆の処理を行います。つまり、ISO\-8859\-1 で Unicode エスケープを使ってエンコードされたファイルを、Java 実行環境でサポートされる文字エンコーディングのファイルに変換します。 -.br -.br -.TP 3 -\-encoding encoding_name -変換処理で使用する文字エンコーディングの名前を指定します。このオプションが存在しない場合は、デフォルトの文字エンコーディング ( \f2java.nio.charset.Charset.defaultCharset\fP メソッドで定義される) が使用されます。 \f2encoding_name\fP 文字列は、 -.na -\f4「サポートされている文字列エンコーディング」\fP @ -.fi -http://java.sun.com/javase/6/docs/technotes/guides/intl/encoding.doc.htmlドキュメントに示されている、Java 実行環境でサポートされる文字エンコーディングの名前にする必要があります。 -.br -.br -.TP 3 -\-Joption -Java 仮想マシンに \f2option\fP を渡します。\f2option\fP には、java(1)のリファレンスページに記載されているオプションを 1 つ指定します。たとえば、\f3\-J\-Xms48m\fP と指定すると、スタートアップメモリーは 48M バイトに設定されます。 +.if n \{\ .RE - -.LP - +.\} +.PP +\fIinputfile\fR +.RS 4 +ASCIIに変換するエンコードされたファイル。 +.RE +.PP +\fIoutputfile\fR +.RS 4 +変換されたASCIIファイル。 +.RE +.SH "説明" +.PP +\fInative2ascii\fRコマンドは、ASCIIキャラクタ・セットに含まれないすべての文字にUnicodeエスケープ(\fI\eu\fR\fIxxxx\fR)表記法を使用して、Java Runtime Environment (JRE)でサポートされているエンコードされたファイルを、ASCIIでエンコードされたファイルに変換します。このプロセスは、ISO\-8859\-1文字セットに含まれない文字が含まれているプロパティ・ファイルで必要です。このツールは、その逆の変換を実行することもできます。 +.PP +\fIoutputfile\fR値を省略した場合、標準出力に出力されます。さらに、\fIinputfile\fR値を省略した場合、標準入力から入力されます。 +.SH "オプション" +.PP +\-reverse +.RS 4 +逆の処理を行います。つまり、ISO\-8859\-1でUnicodeエスケープを使用してエンコードされたファイルを、JREでサポートされる文字エンコーディングのファイルに変換します。 +.RE +.PP +\-encoding \fIencoding_name\fR +.RS 4 +変換処理で使用する文字エンコーディングの名前を指定します。このオプションが存在しない場合は、デフォルトの文字エンコーディング(\fIjava\&.nio\&.charset\&.Charset\&.defaultCharset\fRメソッドで定義された)が使用されます。\fIencoding_name\fR文字列は、JREでサポートされている文字エンコーディングの名前にする必要があります。http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/intl/encoding\&.doc\&.htmlにある +「サポートされているエンコーディング」を参照してください +.RE +.PP +\-J\fIoption\fR +.RS 4 +Java仮想マシン(JVM)に\fIoption\fRを渡します。optionには、Javaアプリケーション起動ツールのリファレンス・ページに記載されているオプションを1つ指定します。たとえば、\fI\-J\-Xms48m\fRと指定すると、スタートアップ・メモリーは48MBに設定されます。java(1)を参照してください。 +.RE +.br +'pl 8.5i +'bp diff --git a/jdk/src/linux/doc/man/ja/orbd.1 b/jdk/src/linux/doc/man/ja/orbd.1 index b78927f5655..849257b14e2 100644 --- a/jdk/src/linux/doc/man/ja/orbd.1 +++ b/jdk/src/linux/doc/man/ja/orbd.1 @@ -1,368 +1,277 @@ -." 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 -." 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. -." -.TH orbd 1 "07 May 2011" - -.LP -.SH "名前" -orbd \- The Object Request Broker Daemon -.LP -.LP -\f3orbd\fP は、クライアントから CORBA 環境のサーバーにある持続オブジェクトを透過的に検索して呼び出すために使用します。 -.LP -.LP -\f3関連項目:\fP -.na -\f2ネームサービス\fP @ -.fi -http://java.sun.com/javase/6/docs/technotes/guides/idl/jidlNaming.html -.LP -.SH "形式" -.LP +'\" t +.\" Copyright (c) 2001, 2013, Oracle and/or its affiliates. All rights reserved. +.\" Title: orbd +.\" Language: English +.\" Date: 2013年11月21日 +.\" SectDesc: Java IDLおよびRMI-IIOPツール +.\" Software: JDK 8 +.\" Arch: 汎用 +.\" +.\" 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. +.\" +.pl 99999 +.TH "orbd" "1" "2013年11月21日" "JDK 8" "Java IDLおよびRMI-IIOPツール" +.\" ----------------------------------------------------------------- +.\" * Define some portability stuff +.\" ----------------------------------------------------------------- +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.\" http://bugs.debian.org/507673 +.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" ----------------------------------------------------------------- +.\" * set default formatting +.\" ----------------------------------------------------------------- +.\" disable hyphenation +.nh +.\" disable justification (adjust text to left margin only) +.ad l +.\" ----------------------------------------------------------------- +.\" * MAIN CONTENT STARTS HERE * +.\" ----------------------------------------------------------------- +.SH "NAME" +orbd \- CORBA環境のサーバーにある永続オブジェクトをクライアントから検索して呼び出せるようにします。 +.SH "概要" +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -orbd <\fP\f3options\fP\f3> -.fl -\fP +\fIorbd\fR [ \fIoptions\fR ] .fi - -.LP +.if n \{\ +.RE +.\} +.PP +\fIoptions\fR +.RS 4 +コマンドライン・オプション。オプションを参照してください。 +.RE .SH "説明" -.LP -.LP -\f3orbd\fP ツールに含まれるサーバーマネージャーを使うと、クライアントは CORBA 環境でサーバー上にある持続オブジェクトを透過的に検索して呼び出すことができます。持続サーバーは、ネームサービスに持続オブジェクト参照を発行する際、サーバーのポート番号の代わりに OBRD のポート番号をオブジェクト参照に含めます。持続オブジェクト参照のオブジェクト参照に ORBD ポート番号を含めることには、次のような利点があります。 -.LP -.RS 3 -.TP 2 -o -ネームサービスにあるオブジェクト参照が、サーバーのライフタイムと無関係になる。オブジェクト参照は、始めてインストールされたときはネームサービスのサーバーによりネームサービスに発行されますが、その後は、サーバーの開始またはシャットダウンの回数にかかわらず、ORBD がいつでも呼び出したクライアントに正しいオブジェクト参照を返します。 -.TP 2 -o -クライアントは一度だけネーミングサービスのオブジェクト参照をルックアップする必要があるが、その後はサーバーのライフタイムによる変更とは無関係にこの参照を利用することができる +.PP +\fIorbd\fRコマンドを使用すると、CORBA環境のサーバーにある永続オブジェクトをクライアントから透過的に検索して呼び出すことができます。orbdツールに含まれるサーバー・マネージャを使用すると、クライアントはCORBA環境でサーバー上にある永続オブジェクトを透過的に検索して呼び出すことができます。永続サーバーは、ネーミング・サービスに永続オブジェクト参照を発行する際、サーバーのポート番号のかわりにORBDのポート番号をオブジェクト参照に含めます。永続オブジェクト参照のオブジェクト参照にORBDポート番号を含めることには、次のような利点があります。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +ネーミング・サービスにあるオブジェクト参照が、サーバーのライフ・サイクルと無関係になります。たとえば、オブジェクト参照は、初めてインストールされたときはネーミング・サービスのサーバーによってネーミング・サービスに発行されますが、その後は、サーバーの開始またはシャットダウンの回数にかかわらず、呼び出したクライアントにORBDが正しいオブジェクト参照を返します。 .RE - -.LP -.LP -ORBD のサーバーマネージャーにアクセスするには、servertool(1) を使用してサーバーを起動する必要があります。servertool は、アプリケーションプログラマが、持続サーバーの登録、登録解除、起動、およびシャットダウンを行うためのコマンド行インタフェースです。サーバーマネージャーの詳細については、このドキュメントの「サーバーマネージャー」を参照してください。 -.LP -.LP -\f2orbd\fP を起動すると、ネームサービスも起動されます。ネームサービスについては、 -.na -\f2「ネームサービス」\fP @ -.fi -http://java.sun.com/javase/6/docs/technotes/guides/idl/jidlNaming.htmlを参照してください。 -.LP +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +クライアントは一度のみネーミング・サービスのオブジェクト参照をルックアップする必要がありますが、その後はサーバーのライフ・サイクルによる変更とは無関係にこの参照を利用することができます。 +.RE +.PP +ORBDのサーバー・マネージャにアクセスするには、\fIservertool\fRを使用してサーバーを起動する必要があります。servertoolは、アプリケーション・プログラマが、永続サーバーの登録、登録解除、起動および停止を行うためのコマンドライン・インタフェースです。サーバー・マネージャの詳細は、サーバー・マネージャを参照してください。 +.PP +\fIorbd\fRを起動すると、ネーミング・サービスも起動されます。ネーミング・サービスの詳細。ネーミング・サービスの起動と停止を参照してください。 .SH "オプション" -.LP -.SS -必須オプション -.LP -.RS 3 -.TP 3 -\-ORBInitialPort nameserverport -ネームサーバーを起動するポートの番号を指定します。\f2orbd\fP は、起動されると、このポート上で着信要求を待機します。Solaris ソフトウェアを使用する場合、1024 より小さいポート上でプロセスを開始するには、root ユーザーになる必要があります。このため、1024 以上のポート番号を使用することをお勧めします。(必須) +.PP +\-ORBInitialPort \fInameserverport\fR +.RS 4 +必須。ネーム・サーバーを起動するポートの番号を指定します。\fIorbd\fRは、起動されると、このポート上で着信リクエストをリスニングします。Oracle Solarisソフトウェアでは、1024より小さいポートでプロセスを開始する場合、rootユーザーになる必要があります。このため、1024以上のポート番号を使用することをお薦めします。 .RE - -.LP -.LP - -.LP -.SS -その他のオプション -.LP -.RS 3 -.TP 3 -\-port port -ORBD を起動するポートを指定します。ORBD は、このポートで、持続オブジェクトに対する要求を受け取ります。このポートのデフォルト値は 1049 です。このポート番号が、持続 Interoperable Object References (IOR). のポートフィールドに追加されます。(省略可) +.SS "必須でないオプション" +.PP +\-port \fIport\fR +.RS 4 +ORBDを起動するポートを指定します。このポートで、永続オブジェクトに対するリクエストをORBDが受け取ります。このポートのデフォルト値は1049です。このポート番号は、永続Interoperable Object References (IOR)のポート・フィールドに追加されます。 .RE - -.LP -.RS 3 -.TP 3 -\-defaultdb directory -ORBD 持続格納ディレクトリ \f2orb.db\fP が作成されるベースディレクトリを指定します。このオプションが指定されていない場合、デフォルト値は「./orb.db」となります。(省略可) +.PP +\-defaultdb \fIdirectory\fR +.RS 4 +ORBD永続格納ディレクトリ\fIorb\&.db\fRが作成されるベース・ディレクトリを指定します。このオプションが指定されていない場合、デフォルト値は\fI\&./orb\&.db\fRになります。 .RE - -.LP -.RS 3 -.TP 3 -\-serverPollingTime milliseconds -\f2servertool\fP を使用して登録された持続サーバーが正常に動作していることを ORBD が確認する回数を指定します。デフォルト値は 1,000 ミリ秒です。\f2milliseconds\fP に指定する値は、有効な正の整数でなければなりません。(省略可) +.PP +\-serverPollingTime \fImilliseconds\fR +.RS 4 +\fIservertool\fRを使用して登録された永続サーバーのヘルス状態をORBDがチェックする間隔を指定します。デフォルト値は1000ミリ秒です。\fImilliseconds\fRに指定する値は、有効な正の整数にする必要があります。 .RE - -.LP -.RS 3 -.TP 3 -\-serverStartupDelay milliseconds -\f2servertool\fP を使用して登録された持続サーバーを再起動してから、位置転送の例外を送信するまでの ORBD の待機時間を指定します。デフォルト値は 1,000 ミリ秒です。\f2milliseconds\fP に指定する値は、有効な正の整数でなければなりません。(省略可) +.PP +\-serverStartupDelay milliseconds +.RS 4 +\fIservertool\fRを使用して登録された永続サーバーを再起動してから、位置転送の例外を送信するまでのORBDの待機時間を指定します。デフォルト値は1000ミリ秒です。\fImilliseconds\fRに指定する値は、有効な正の整数にする必要があります。 .RE - -.LP -.RS 3 -.TP 3 -\-Joption -Java 仮想マシンに \f2option\fP を渡します。\f2option\fP には、java(1)のリファレンスページに記載されているオプションを 1 つ指定します。たとえば、\f3\-J\-Xms48m\fP と指定すると、スタートアップメモリーは 48M バイトに設定されます。\f3\-J\fP を使って背後の実行環境にオプションを渡すことはよく行われています。 -.TP 3 - +.PP +\-J\fIoption\fR +.RS 4 +Java仮想マシンに\fIoption\fRを渡します。\fIoption\fRには、Javaアプリケーション起動ツールのリファレンス・ページに記載されているオプションを1つ指定します。たとえば、\fI\-J\-Xms48m\fRと指定すると、スタートアップ・メモリーは48MBに設定されます。java(1)を参照してください。 .RE - -.LP -.SH "ネームサービスの起動と停止" -.LP -.LP -ネームサービスは、 -.na -\f2CORBA オブジェクト\fP @ -.fi -http://java.sun.com/javase/6/docs/technotes/guides/idl/jidlGlossary.html#CORBA%20objectにネーミングを可能にする CORBA サービスです。ネーミングは名前をオブジェクト参照にバインドすることにより可能になります。 -.na -\f2「ネームバインディング」\fP @ -.fi -http://java.sun.com/javase/6/docs/technotes/guides/idl/jidlGlossary.html#name%20bindingはネームサービスに格納され、クライアントは名前を与えて目的のオブジェクト参照を取得できます。 -.LP -.LP -ORBD は、クライアントまたはサーバーを実行する前に起動します。ORBD には、持続ネームサービスおよび一時ネームサービスが組み込まれています。これらはどちらも COS ネームサービスの実装です。 -.LP -.LP -\f3「持続」ネームサービス\fPは、ネーミングコンテキストに対して持続性を提供します。つまり、この情報は、サービスの停止や起動後にも維持され、サービスに障害が発生した場合でも回復できます。ORBD を再起動すると、持続ネームサービスはネーミングコンテキストのグラフを復元し、すべてのクライアントとサーバーの名前のバインディングが保持されます。 -.LP -.LP -\ -.LP -.LP -下位互換性のため、旧バージョンの JDK に同梱されていた\f2一時ネームサービス\fPが、今回のリリースの J2SE にも同梱されています。一時ネームサービスでは、ネームサービスの実行中にのみネーミングコンテキストが保持されます。サービスが中断されると、ネーミングコンテキストは失われます。 -.LP -.LP -\f2\-ORBInitialPort\fP 引数は、\f2orbd\fP の必須のコマンド行引数で、ネームサービスが実行されるポートの番号を設定するために使われます。以下の説明では、JavaIDL Object Request Broker Daemon 用にポート 1050 を使用できることを前提としています。Solaris ソフトウェアを使用する場合、1024 より小さいポート上でプロセスを開始するには、root ユーザーになる必要があります。このため、1024 以上のポート番号を使用することをお勧めします。必要であれば別のポートに変更してください。 -.LP -.LP -UNIX コマンドシェルで \f2orbd\fP を起動するには、次のように入力します。 -.LP +.SS "ネーミング・サービスの起動と停止" +.PP +ネーミング・サービスは、CORBAオブジェクトにネーミングを可能にするCORBAサービスです。ネーミングは名前をオブジェクト参照にバインドすることにより可能になります。ネーム・バインディングをネーミング・サービスに格納すれば、クライアントが名前を指定して目的のオブジェクト参照を取得できるようになります。 +.PP +クライアントまたはサーバーを実行する前に、ORBDを起動します。ORBDには、永続ネーミング・サービスおよび一時ネーミング・サービスが組み込まれています。これらはどちらもCOSネーミング・サービスの実装です。 +.PP +永続ネーミング・サービスは、ネーミング・コンテキストに対して永続性を提供します。つまり、この情報は、サービスの停止や起動後にも維持され、サービスに障害が発生した場合でも回復できます。ORBDを再起動すると、永続ネーミング・サービスはネーミング・コンテキストのグラフを復元し、すべてのクライアントとサーバーの名前のバインディングがそのまま(永続的に)保持されるようにします。 +.PP +下位互換性のため、旧リリースのJDKに同梱されていた一時ネーミング・サービス\fItnameserv\fRが、今回のリリースのJava SEにも同梱されています。一時ネーム・サービスでは、ネーム・サービスの実行中にのみネーミング・コンテキストが保持されます。サービスが中断されると、ネーミング・コンテキスト・グラフは失われます。 +.PP +\fI\-ORBInitialPort\fR引数は、\fIorbd\fRの必須のコマンドライン引数で、ネーミング・サービスが実行されるポートの番号を設定するために使用されます。次の手順では、Java IDL Object Request Broker Daemon用にポート1050を使用できることを前提としています。Oracle Solarisソフトウェアを使用する場合、1024より小さいポートでプロセスを開始するには、rootユーザーになる必要があります。このため、1024以上のポート番号を使用することをお薦めします。必要であれば別のポートに変更してください。 +.PP +UNIXコマンド・シェルで\fIorbd\fRを起動するには、次のように入力します。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl - orbd \-ORBInitialPort 1050& -.fl -\fP +orbd \-ORBInitialPort 1050& .fi - -.LP -.LP -Windows の MS\-DOS システムプロンプトでは、次のように入力します。 -.LP +.if n \{\ +.RE +.\} +.PP +WindowsのMS\-DOSシステム・プロンプトでは、次のように入力します。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl - start orbd \-ORBInitialPort 1050 -.fl -\fP +start orbd \-ORBInitialPort 1050 .fi - -.LP -.LP -これで ORBD が実行され、サーバーとクライアントのアプリケーションを実行できるようになります。クライアントとサーバーのアプリケーションは、実行時に、ネームサービスが実行されているポートの番号 (必要な場合はさらにマシン名) を認識している必要があります。これを実現する 1 つの方法は、次のコードをアプリケーションに追加することです。 -.LP +.if n \{\ +.RE +.\} +.PP +これでORBDが実行され、サーバーとクライアントのアプリケーションを実行できるようになります。クライアントとサーバーのアプリケーションは、実行時に、ネーミング・サービスが実行されているポートの番号(必要な場合はさらにマシン名)を認識している必要があります。これを実現する1つの方法は、次のコードをアプリケーションに追加することです。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl - Properties props = new Properties(); -.fl - props.put("org.omg.CORBA.ORBInitialPort", "1050"); -.fl - props.put("org.omg.CORBA.ORBInitialHost", "MyHost"); -.fl - ORB orb = ORB.init(args, props); -.fl -\fP +Properties props = new Properties(); +props\&.put("org\&.omg\&.CORBA\&.ORBInitialPort", "1050"); +props\&.put("org\&.omg\&.CORBA\&.ORBInitialHost", "MyHost"); +ORB orb = ORB\&.init(args, props); .fi - -.LP -.LP -この例では、ネームサービスは、ホスト MyHost のポート 1050 上で実行されます。別の方法として、コマンド行からサーバーまたはクライアントのアプリケーションを実行するときに、ポート番号またはマシン名あるいはその両方を指定する方法もあります。たとえば、次のコマンド行オプションを使用して、「HelloApplication」を起動できます。 -.LP +.if n \{\ +.RE +.\} +.PP +この例では、ネーミング・サービスは、ホスト\fIMyHost\fRのポート1050上で実行されます。別の方法として、コマンドラインからサーバーまたはクライアントのアプリケーションを実行するときに、ポート番号またはマシン名あるいはその両方を指定する方法もあります。たとえば、次のコマンドライン・オプションを使用して、\fIHelloApplication\fRを起動できます。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl - java HelloApplication \-ORBInitialPort 1050 \-ORBInitialHost MyHost -.fl -\fP +java HelloApplication \-ORBInitialPort 1050 \-ORBInitialHost MyHost .fi - -.LP -.LP -ネームサービスを停止するには、適切なオペレーティングシステムコマンドを使用します。たとえば、Solaris 上で \f2pkill orbd\fP \f2を実行したり、\fP \f2orbd\fP が動作中の DOS ウィンドウで Ctrl+C キーを押したりします。一時ネームサービスの場合は、サービスが終了されると、ネームサービスに登録された名前が消去される場合があります。Java IDL ネームサービスは、明示的に停止されるまで実行されます。 -.LP -.LP -ORDB に含まれるネームサービスの詳細については、 -.na -\f2「ネームサービス」\fP @ -.fi -http://java.sun.com/javase/6/docs/technotes/guides/idl/jidlNaming.htmlを参照してください。 -.LP -.SH "サーバーマネージャー" -.LP -.LP -ORBD のサーバーマネージャーにアクセスして持続サーバーを実行するには、servertool(1) を使用してサーバーを起動する必要があります。servertool は、アプリケーションプログラマが、持続サーバーの登録、登録解除、起動、およびシャットダウンを行うためのコマンド行インタフェースです。\f2servertool\fP を使用してサーバーを起動する場合は、\f2orbd\fP が実行されている場所と同じポートとホストで起動する必要があります。サーバーを異なるポートで実行すると、ローカルコンテキスト用にデータベースに保存されている情報が無効になり、サービスが正しく動作しません。 -.LP -.SS -サーバーマネージャー: 例 -.LP -.LP -デモ用の -.na -\f2サンプルチュートリアル\fP @ -.fi -http://java.sun.com/javase/6/docs/technotes/guides/idl/jidlExample.htmlを使用し、チュートリアルの手順に従って、\f2idlj\fP コンパイラと \f2javac\fP コンパイラを実行します。サーバーマネージャーを実行するには、次の手順に従ってアプリケーションを実行します。 -.LP -.LP -\f2orbd\fP を起動します。 -.LP -.LP -UNIX コマンドシェルで \f2orbd\fP を起動するには、次のように入力します。 -.LP -.LP -\ -.LP +.if n \{\ +.RE +.\} +.PP +ネーミング・サービスを停止するには、適切なオペレーティング・システム・コマンドを使用します。たとえば、Oracle Solaris上で\fIpkill\fR +\fIorbd\fRを実行したり、\fIorbd\fRが動作中のDOSウィンドウで\fB[Ctrl]+[C]\fRキーを押します。一時ネーミング・サービスの場合は、サービスが終了されると、ネーミング・サービスに登録された名前が消去される場合があります。Java IDLネーム・サービスは、明示的に停止されるまで実行されます。 +.PP +ORBDに付属するネーミング・サービスの詳細は、 +http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/idl/jidlNaming\&.htmlの「Naming Service」を参照してください +.SH "サーバー・マネージャ" +.PP +ORBDのサーバー・マネージャにアクセスして、永続サーバーを実行するには、\fIservertool\fRを使用してサーバーを起動する必要があります。servertoolは、アプリケーション・プログラマが、永続サーバーの登録、登録解除、起動および停止を行うためのコマンドライン・インタフェースです。\fIservertool\fRを使用してサーバーを起動する場合は、\fIorbd\fRが実行されている場所と同じポートとホストで起動する必要があります。サーバーを異なるポートで実行すると、ローカル・コンテキスト用にデータベースに保存されている情報が無効になり、サービスが正しく動作しません。 +.PP +http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/idl/jidlExample\&.htmlの +「Java IDL: The "Hello World" Example」を参照してください +.PP +この例では、チュートリアルの手順に従って\fIidlj\fRコンパイラと\fIjavac\fRコンパイラを実行します。ORBDのサーバー・マネージャを実行するには、次の手順に従ってアプリケーションを実行します。 +.PP +\fIorbd\fRを起動します。 +.PP +UNIXコマンド・シェルで次のように入力します: +\fIorbd \-ORBInitialPort 1050\fR。 +.PP +MS\-DOSシステム・プロンプト(Windows)で次のように入力します: +\fIs\fR\fItart orbd \-ORBInitialPort 105\fR\fI0\fR +.PP +ポート1050はネーム・サーバーを実行するポートです。\fI\-ORBInitialPort\fRオプションは必須コマンドライン引数です。Oracle Solarisソフトウェアを使用する場合、1024より小さいポートでプロセスを開始するには、rootユーザーになる必要があります。このため、1024以上のポート番号を使用することをお薦めします。 +.PP +\fIservertool\fRを起動します: +\fIservertool \-ORBInitialPort 1050\fR。 +.PP +前回の手順とネーム・サーバー(\fIorbd\fR)のポートが同じであることを確認します。たとえば\fI\-ORBInitialPort 1050\&.\fRのようになります。\fIservertool\fRは、ネーム・サーバーと同じポート上で起動する必要があります。 +.PP +\fIservertool\fRコマンドライン・インタフェースで、\fIservertool\fRプロンプトから\fIHello\fRサーバーを起動します。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl - orbd \-ORBInitialPort 1050 -.fl -\fP -.fi - -.LP -.LP -Windows の MS\-DOS システムプロンプトでは、次のように入力します。 -.LP -.nf -\f3 -.fl - start orbd \-ORBInitialPort 1050 -.fl -\fP -.fi - -.LP -.LP -\f21050\fP はネームサーバーを実行するポートです。\f2\-ORBInitialPort\fP は必要なコマンド行の引数です。Solaris ソフトウェアを使用する場合、1024 より小さいポート上でプロセスを開始するには、root ユーザーになる必要があります。このため、1024 以上のポート番号を使用することをお勧めします。 -.LP -.LP -\f2servertool\fP を起動します。 -.LP -.LP -Hello サーバーを起動するには、次のように入力します。 -.LP -.nf -\f3 -.fl - servertool \-ORBInitialPort 1050 -.fl -\fP -.fi - -.LP -.LP -前回の手順と同様にネームサーバー (\f2orbd\fP) のポートを指定します。たとえば \f2\-ORBInitialPort 1050\fP のようになります。\f2servertool\fP は、ネームサーバーと同じポート上で起動する必要があります。 -.LP -.LP -\f2servertool\fP コマンド行インタフェースが表示されます。 -.LP -.LP - -.LP -.LP -\f2servertool\fP プロンプトから Hello サーバーを起動します。 -.LP -.nf -\f3 -.fl - servertool > register \-server HelloServer \-classpath .\-applicationName -.fl +servertool > register \-server HelloServer \-classpath \&. \-applicationName HelloServerApName -.fl -\fP .fi - -.LP -.LP -\f2servertool\fP によってサーバーが登録されて、「HelloServerApName」という名前がサーバーに割り当てられ、サーバー ID が表示されます。 -.LP -.LP - -.LP -.LP -別の端末ウィンドウまたはプロンプトからクライアントアプリケーションを実行します。 -.LP -.LP -\ -.LP -.nf -\f3 -.fl - java HelloClient \-ORBInitialPort 1050 \-ORBInitialHost localhost -.fl -\fP -.fi - -.LP -.LP -この例の \f2\-ORBInitialHost localhost\fP は省略することができます。ネームサーバーが Hello クライアントとして同一ホスト上で動作しているからです。ネームサーバーが別のホストで動作している場合は、IDL ネームサーバーが動作しているホストを \f2\-ORBInitialHost\fP \f2nameserverhost\fP で指定します。 -.LP -.LP -前回の手順と同様にネームサーバー (\f2orbd\fP) のポートを指定します。たとえば \f2\-ORBInitialPort 1050\fP のようになります。 -.LP -.LP -\ -.LP -.LP -\ -.LP -.LP -サーバーマネージャーの操作が終了したら、ネームサーバー (\f2orbd\fP) と \f2servertool\fP を停止するか終了してください。 -.LP -.LP -DOS プロンプトで \f2orbd\fP をシャットダウンするには、サーバーを実行しているウィンドウを選択して \f2Ctrl+C\fP と入力します。UNIX シェルで \f2orbd\fP をシャットダウンするには、プロセスを検出して終了 (kill) します。サーバーを明示的に停止するまでは、呼び出し待機状態が続きます。 -.LP -.LP -\f2servertool\fP をシャットダウンするには、 \f2quit\fP と入力してキーボードの \f2Enter\fP キーを押します。 -.LP -.SH "関連項目" -.LP -.RS 3 -.TP 2 -o -.na -\f2ネームサービス\fP @ -.fi -http://java.sun.com/javase/6/docs/technotes/guides/idl/jidlNaming.html -.br -.TP 2 -o -servertool(1) +.if n \{\ +.RE +.\} +.PP +\fIservertool\fRによってサーバーが登録されて、\fIHelloServerApName\fRという名前がサーバーに割り当てられ、登録されているすべてのサーバー一覧とともにサーバーIDが表示されます。他の端末ウィンドウまたはプロンプトからクライアント・アプリケーションを実行します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +java HelloClient \-ORBInitialPort 1050 \-ORBInitialHost localhost +.fi +.if n \{\ +.RE +.\} +.PP +この例の\fI\-ORBInitialHost localhost\fRは省略することができます。ネーム・サーバーが\fIHello\fRクライアントとして同一ホスト上で動作しているからです。ネーム・サーバーが別のホストで実行されている場合は、\-\fIORBInitialHost nameserverhost\fRオプションを使用してIDLネーム・サーバーが実行されているホストを指定します。前の手順で行われたとおりにネーム・サーバー(\fIorbd\fR)ポートを指定します(例: +\fI\-ORBInitialPort 1050\fR)。ORBDのサーバー・マネージャの操作が終了したら、ネーム・サーバー(\fIorbd\fR)と\fIservertool\fRを停止するか終了してください。MS\-DOSプロンプトで\fIorbd\fRをシャットダウンするには、サーバーを実行しているウィンドウを選択して\fB[Ctrl]+[C]\fRキーを押します。 +.PP +Oracle Solarisから\fIorbd\fRをシャットダウンするには、プロセスを検索して、\fIkill\fRコマンドで終了します。サーバーを明示的に停止するまでは、呼出し待機状態が続きます。\fIservertool\fRをシャットダウンするには、\fBquit\fRと入力してキーボードの\fB[Enter]\fRキーを押します。 +.SH "関連項目" +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +servertool(1) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/idl/jidlNaming\&.htmlの +「Naming Service」 .RE - -.LP .br - -.LP - +'pl 8.5i +'bp diff --git a/jdk/src/linux/doc/man/ja/pack200.1 b/jdk/src/linux/doc/man/ja/pack200.1 index b1bb4f0fe03..e4150ab54dd 100644 --- a/jdk/src/linux/doc/man/ja/pack200.1 +++ b/jdk/src/linux/doc/man/ja/pack200.1 @@ -1,362 +1,325 @@ -." Copyright (c) 2004, 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. -." -.TH pack200 1 "07 May 2011" - -.LP -.SH "名前" -pack200 \- JAR パックツール -.LP -.RS 3 -.TP 2 -o -形式 -.TP 2 -o -説明 -.TP 2 -o -オプション -.TP 2 -o -終了ステータス -.TP 2 -o -関連項目 -.TP 2 -o -注意事項 +'\" t +.\" Copyright (c) 2004, 2013, Oracle and/or its affiliates. All rights reserved. +.\" Title: pack200 +.\" Language: English +.\" Date: 2013年11月21日 +.\" SectDesc: Javaデプロイメント・ツール +.\" Software: JDK 8 +.\" Arch: 汎用 +.\" +.\" 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. +.\" +.pl 99999 +.TH "pack200" "1" "2013年11月21日" "JDK 8" "Javaデプロイメント・ツール" +.\" ----------------------------------------------------------------- +.\" * Define some portability stuff +.\" ----------------------------------------------------------------- +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.\" http://bugs.debian.org/507673 +.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" ----------------------------------------------------------------- +.\" * set default formatting +.\" ----------------------------------------------------------------- +.\" disable hyphenation +.nh +.\" disable justification (adjust text to left margin only) +.ad l +.\" ----------------------------------------------------------------- +.\" * MAIN CONTENT STARTS HERE * +.\" ----------------------------------------------------------------- +.SH "NAME" +pack200 \- WebデプロイメントのためにJARファイルをpack200圧縮ファイルにパッケージします。 +.SH "概要" +.sp +.if n \{\ +.RS 4 +.\} +.nf +\fIpack200\fR [\fIoptions\fR] \fIoutput\-file\fR \fIJAR\-file\fR +.fi +.if n \{\ .RE - -.LP -.SH "形式" -.LP -.LP -\f4pack200\fP\f2 [ \fP\f2options\fP ] \f2output\-file\fP \f2JAR\-file\fP -.LP -.LP -オプションの指定順序に決まりはありません。コマンド行または properties ファイルに指定された最後のオプションが、それ以前に指定されたすべてのオプションより優先されます。 -.LP -.RS 3 -.TP 3 -options -コマンド行オプション。 -.TP 3 -output\-file -出力ファイルの名前。 -.TP 3 -JAR\-file -入力ファイルの名前。 +.\} +.PP +オプションは任意の順序で指定できます。コマンドラインまたはpropertiesファイルに指定された最後のオプションが、それ以前に指定されたすべてのオプションより優先されます。 +.PP +\fIoptions\fR +.RS 4 +コマンドライン・オプション。オプションを参照してください。 .RE - -.LP -.SH " 説明" -.LP -.LP -\f2pack200\fP ツールは、Java gzip 圧縮プログラムを使用して JAR ファイルを \f2pack200\fP 圧縮ファイルに変換する \f2Java アプリケーション\fP です。 \f2pack200\fP ファイルは高圧縮のファイルで、帯域幅の節約やダウンロード時間の短縮や直接配備することができます。 -.LP -.LP -\f2pack200\fP ツールには、圧縮エンジンの設定や微調整を行うオプションが用意されています。 -.LP -.SS -一般的な使用方法: -.LP -.LP -\f2% pack200 myarchive.pack.gz myarchive.jar\fP -.LP -.LP -この例では、 \f2デフォルトの pack200 設定を使用して\fP myarchive.pack.gz \f2が生成されます\fP 。 -.LP +.PP +\fIoutput\-file\fR +.RS 4 +出力ファイルの名前。 +.RE +.PP +\fIJAR\-file\fR +.RS 4 +入力ファイルの名前。 +.RE +.SH "説明" +.PP +\fIpack200\fRコマンドは、Java gzipコンプレッサを使用してJARファイルをpack200圧縮ファイルに変換するJavaアプリケーションです。pack200ファイルは高圧縮のファイルで、直接デプロイでき、帯域幅の節約やダウンロード時間の短縮が可能です。 +.PP +\fIpack200\fRコマンドには、圧縮エンジンの設定や微調整を行うオプションがあります。一般的な使用方法を次の例に示します。\fImyarchive\&.pack\&.gz\fRがデフォルトの\fIpack200\fRコマンド設定で作成されます。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +pack200 myarchive\&.pack\&.gz myarchive\&.jar +.fi +.if n \{\ +.RE +.\} .SH "オプション" -.LP -.LP -\f4\-r \-\-repack\fP -.LP -.LP -ファイル \f2myarchive.jar\fP をパックしたあとアンパックすることで、JAR ファイルを生成します。生成されたファイルは \f2jarsigner(1)\fP ツールの入力ファイルとして使用できます。 -.LP -.LP -\f2% pack200 \-\-repack myarchive\-packer.jar myarchive.jar\fP -.LP -.LP -\f2% pack200 \-\-repack myarchive.jar\fP -.LP -.LP -\f4\-g \-\-no\-gzip\fP -.LP -.LP -\f2pack200\fP ファイルを生成します。このオプションを指定するときは、適切な圧縮ツールを使用する必要があります。また、ターゲットシステムでは、対応する圧縮解除ツールを使用する必要があります。 -.LP -.LP -\f2% pack200 \-\-no\-gzip myarchive.pack myarchive.jar\fP -.LP -.LP -\f4\-G \-\-strip\-debug\fP -.LP -.LP -出力からデバッグ用の属性を削除します。そうした属性としては、 \f2SourceFile\fP、 \f2LineNumberTable\fP、 \f2LocalVariableTable\fP 、 \f2LocalVariableTypeTable\fP などが挙げられます。これらの属性を削除すれば、ダウンロードとインストールのサイズは小さくなりますが、デバッガの機能は制限されます。 -.LP -.LP -\f4\-\-keep\-file\-order\fP -.LP -.LP -入力ファイル内のファイルの順序を維持します。これがデフォルトの動作です。 -.LP -.LP -\f4\-O \-\-no\-keep\-file\-order\fP -.LP -.LP -パックツールは、すべての要素を並べ替えて転送します。また、JAR ディレクトリ名を削除します。このため、ダウンロードのサイズは小さくなりますが、インデックスをはじめとする JAR ファイルの最適化機能は正常に動作しなくなることがあります。 -.LP -.LP -\f4\-Svalue \-\-segment\-limit=\fP\f2value\fP -.LP -.LP -この値は、各アーカイブセグメントの予想ターゲットサイズ N (バイト単位) です。単一の入力ファイルの必要サイズが -.br -N バイトを超えると、そのファイルには独立したアーカイブセグメントが割り当てられます。特殊なケースとして、値が \f2\-1\fP の場合は、すべての入力ファイルを含む大きな単一のセグメントが生成され、値が \f20\fP の場合は、クラスごとにセグメントが 1 つずつ生成されます。アーカイブセグメントが大きくなると、断片化が少なくなり圧縮率が高くなりますが、その処理には多くのメモリーが必要です。 -.LP -.LP -各セグメントのサイズは、セグメントに変換されるそれぞれの入力ファイルのサイズのほか、その名前とほかの送信されるプロパティーのサイズを計算して推測されます。 -.LP -.LP -デフォルトは \-1 です。つまり、パックツールは常に単一のセグメント出力ファイルを作成します。極端に大きな出力ファイルが生成される場合には、入力ファイルをセグメント化 (分割) してより小さな JAR にすることを強くお勧めします。 -.LP -.LP -この制限が課されていない 10M バイトの JAR パックファイルは通常、元の 10% 程度のサイズにパックされます。しかし、パックツールでより大きな Java ヒープ (セグメントの制限の約 10 倍) を必要とする場合もあります。 -.LP -.LP -\f4\-Evalue \-\-effort=\fP\f2value\fP -.LP -.LP -単一の 10 進数値を指定した場合、パックツールは、指定された圧縮率でアーカイブを圧縮します。レベル \f21\fP の場合は、比較的短い圧縮時間でやや大きめのファイルが生成されますが、レベル \f29\fP の場合は、非常に長い時間がかかるものの、より圧縮率の高いファイルが生成されます。特殊な値 \f20\fP を指定した場合は、元の JAR ファイルを圧縮なしで直接コピーします。JSR 200 標準では、すべての解凍プログラムが、この特別な場合をアーカイブ全体のパススルーと解釈するように規定しています。 -.LP -.LP -デフォルトは \f25\fPです。この場合、標準的な時間で適切な圧縮が行われます。 -.LP -.LP -\f4\-Hvalue \-\-deflate\-hint=\fP\f2value\fP -.LP -.LP -デフォルト値を上書きし、入力情報を保存します。転送されるアーカイブのサイズは大きくなります。返される値は次のどれかになります。 -.LP -.RS 3 -.TP 3 -true -.TP 3 -false -どちらの場合でも、パックツールはデフレーションヒントを出力アーカイブに設定します。アーカイブ要素の個々のデフレーションヒントは転送しません。 +.PP +\-r, \-\-repack +.RS 4 +JARファイルをパックした後アンパックして、JARファイルを生成します。生成されたファイルは\fIjarsigner\fR(1)ツールの入力ファイルとして使用できます。次の例では、myarchive\&.jarファイルをパックした後、アンパックします。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +pack200 \-\-repack myarchive\-packer\&.jar myarchive\&.jar +pack200 \-\-repack myarchive\&.jar +.fi +.if n \{\ .RE - -.LP -.RS 3 -.TP 3 -keep -入力 JAR.内で見つかったデフレーションヒントを維持します。(これがデフォルトです。) +.\} +次の例では、入力ファイル内のファイルの順序を保持します。 .RE - -.LP -.LP -\f4\-mvalue \-\-modification\-time=\fP\f2value\fP -.LP -.LP -返される値は次のどれかになります。 -.LP -.RS 3 -.TP 3 -latest -パックツールは、元のアーカイブの全エントリの最終更新時刻か、そのセグメントのすべてのエントリの最終更新時刻を特定しようとします。この単一の値はセグメントの一部として転送され、各セグメントの全エントリに適用されます。この場合、すべてのインストールファイルに単一の日付が設定されるという問題はありますが、アーカイブの転送サイズを少し小さくすることができます。 -.TP 3 -keep -入力 JAR. 内で見つかった変更時刻を維持します。(これがデフォルトです。) +.PP +\-g, \-\-no\-gzip +.RS 4 +\fIpack200\fRファイルを生成します。このオプションを指定するときは、適切な圧縮ツールを使用する必要があります。また、ターゲット・システムでは、対応する圧縮解除ツールを使用する必要があります。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +pack200 \-\-no\-gzip myarchive\&.pack myarchive\&.jar +.fi +.if n \{\ .RE - -.LP -.LP -\f4\-Pfile \-\-pass\-file=\fP\f2file\fP -.LP -.LP -ファイルを圧縮せず、バイト単位で転送するように指定します。このオプションを繰り返し使用して、複数のファイルを指定できます。システムファイルセパレータが JAR ファイルセパレータ「\f2/\fP」に置き換えられる点を除き、パス名の変換は行われません。 結果として得られるファイル名は、文字列として正確に JAR ファイルでの出現と一致している必要があります。file にディレクトリ名を指定した場合、そのディレクトリ内のすべてのファイルが転送されます。 -.LP -.LP -\f4\-Uaction \-\-unknown\-attribute=\fP\f2action\fP -.LP -.LP -デフォルトの動作を無効にします。たとえば、不明な属性を含むクラスファイルを指定したアクションで転送します。アクションとして指定可能な値: -.LP -.RS 3 -.TP 3 -error -\f2pack200\fP の操作に失敗し、適切な解説が表示されます。 -.TP 3 -strip -属性はドロップされます。注: VM 必須属性を削除するとクラスローダーの障害が発生することがあります。 -.TP 3 -pass -この属性が検出された場合、クラス全体が 1 つのリソースとして転送されます。 +.\} .RE - -.LP -.LP -\f4\-Cattribute\-name=\fP\f2layout\fP \f3\-\-class\-attribute=\fP\f2attribute\-name=action\fP -.br -\f4\-Fattribute\-name=\fP\f2layout\fP \f3\-\-field\-attribute=\fP\f2attribute\-name=action\fP -.br -\f4\-Mattribute\-name=\fP\f2layout\fP \f3\-\-method\-attribute=\fP\f2attribute\-name=action\fP -.br -\f4\-Dattribute\-name=\fP\f2layout\fP \f3\-\-code\-attribute=\fP\f2attribute\-name=action\fP -.LP -.LP -これら 4 つのオプションでは、クラスエンティティーに Class 属性、Field 属性、Method 属性、Code 属性などの属性のレイアウトを指定できます。attribute\-name には、これからレイアウトまたはアクションを定義する属性の名前を指定します。アクションとして指定可能な値: -.LP -.RS 3 -.TP 3 -some\-layout\-string -レイアウト言語は、JSR 200 仕様に定義されています。 -.LP -例: \f2\-\-class\-attribute=SourceFile=RUH\fP -.TP 3 -error -この属性が検出された場合、pack200 の操作に失敗し、適切な解説が表示されます。 -.TP 3 -strip -この属性が検出された場合、属性は出力から削除されます。注: VM 必須属性を削除するとクラスローダーの障害が発生することがあります。 +.PP +\-G, \-\-strip\-debug +.RS 4 +出力からデバッグ属性を削除します。これには、\fISourceFile\fR、\fILineNumberTable\fR、\fILocalVariableTable\fR、\fILocalVariableTypeTable\fRが含まれます。これらの属性を削除すれば、ダウンロードとインストールのサイズは小さくなりますが、デバッガの機能は制限されます。 .RE - -.LP -.LP -例: \f2\-\-class\-attribute=CompilationID=pass\fP というこの属性を含むクラスファイルを転送します。パックツールは、その他のアクションを行いません。 -.LP -.LP -\f4\-f\fP\f2 \fP\f2pack.properties\fP \f3\-\-config\-file=\fP\f2pack.properties\fP -.LP -.LP -コマンド行に、パックツールを初期化するための Java プロパティーが含まれている設定ファイルを指定できます。 -.LP -.LP -\f2% pack200 \-f pack.properties myarchive.pack.gz myarchive.jar\fP -.br -\f2% more pack.properties\fP -.br -\f2# Generic properties for the packer.\fP -.br -\f2modification.time=latest\fP -.br -\f2deflate.hint=false\fP -.br -\f2keep.file.order=false\fP -.br -\f2# This option will cause the files bearing new attributes to\fP -.br -\f2# be reported as an error rather than passed uncompressed.\fP -.br -\f2unknown.attribute=error\fP -.br -\f2# Change the segment limit to be unlimited.\fP -.br -\f2segment.limit=\-1\fP -.LP -.LP -\f4\-v \-\-verbose\fP -.LP -.LP -最小限のメッセージを出力します。このオプションを複数指定すると、より長いメッセージが出力されます。 -.LP -.LP -\f4\-q \-\-quiet\fP -.LP -.LP -メッセージを表示せずに動作します。 -.LP -.LP -\f4\-lfilename \-\-log\-file=\fP\f2filename\fP -.LP -.LP -出力メッセージのログファイルを指定します。 -.LP -.LP -\f4\-? \-h \-\-help\fP -.LP -.LP +.PP +\-\-keep\-file\-order +.RS 4 +入力ファイル内のファイルの順序を保持します。これは、デフォルトの動作です。 +.RE +.PP +\-O, \-\-no\-keep\-file\-order +.RS 4 +パック・ツールは、すべての要素を並べ替えて送信します。パック・ツールは、JARディレクトリ名を削除してダウンロード・サイズを削減することもできます。ただし、インデックスなど、特定のJARファイルの最適化機能が正常に動作しなくなることがあります。 +.RE +.PP +\-S\fIvalue\fR, \-\-segment\-limit=\fIvalue\fR +.RS 4 +この値は、各アーカイブ・セグメントの予想ターゲット・サイズ\fIN\fR +(バイト単位)です。単一の入力ファイルの必要サイズが\fIN\fRバイトを超えると、独立したセグメントが割り当てられます。特殊なケースとして、値が\fI\-1\fRの場合は、すべての入力ファイルを含む大きな単一のセグメントが生成され、値が0の場合は、クラスごとにセグメントが1つずつ生成されます。アーカイブ・セグメントが大きくなると、断片化が少なくなり圧縮率が高くなりますが、その処理には多くのメモリーが必要です。 +.sp +各セグメントのサイズは、セグメントに変換されるそれぞれの入力ファイルのサイズのほか、その名前と他の送信されるプロパティのサイズを計算して推測されます。 +.sp +デフォルトは\-1です。つまり、パック・ツールは単一のセグメント出力ファイルを作成します。極端に大きな出力ファイルが生成される場合には、入力ファイルをセグメント化(分割)してより小さなJARにすることを強くお薦めします。 +.sp +この制限が課されていない10 MBのJARパック・ファイルは通常、約10%小さくパックされます。しかし、パック・ツールでより大きなJavaヒープ(セグメントの制限の約10倍)を必要とする場合もあります。 +.RE +.PP +\-E\fIvalue\fR, \-\-effort=\fIvalue\fR +.RS 4 +単一の10進数値を指定した場合、パック・ツールは、指定された圧縮率でアーカイブを圧縮します。レベル1の場合は、比較的短い圧縮時間で多少大きめのファイルが生成されますが、レベル9の場合は、非常に長い時間がかかるものの、より圧縮率の高いファイルが生成されます。特殊な値0を指定した場合は、\fIpack200\fRコマンドは元のJARファイルを圧縮なしで直接コピーします。JSR 200標準では、すべての解凍プログラムが、この特別な場合をアーカイブ全体のパススルーと解釈するように規定しています。 +.sp +デフォルトは5です。この場合、標準的な時間で適切な圧縮が行われます。 +.RE +.PP +\-H\fIvalue\fR, \-\-deflate\-hint=\fIvalue\fR +.RS 4 +入力情報を保存するというデフォルト値をオーバーライドします。転送されるアーカイブのサイズは大きくなる場合があります。指定可能な値は、\fItrue\fR、\fIfalse\fRまたは\fIkeep\fRです。 +.sp +\fIvalue\fRが\fItrue\fRまたはfalseの場合、\fIpacker200\fRコマンドは指定に従ってデフレーション・ヒントを出力アーカイブに設定します。アーカイブ要素の個々のデフレーション・ヒントは転送されません。 +.sp +\fIkeep\fR値は、入力JARで確認されたデフレーション・ヒントを保持します。これがデフォルトです。 +.RE +.PP +\-m\fIvalue\fR, \-\-modification\-time=\fIvalue\fR +.RS 4 +指定可能な値は\fIlatest\fRと\fIkeep\fRです。 +.sp +値が最新の場合、パック・ツールは、元のアーカイブの使用可能なすべてのエントリのうちの最終更新時刻か、そのセグメントの使用可能なすべてのエントリの最終更新時刻を特定しようとします。この単一の値はセグメントの一部として転送され、各セグメントの全エントリに適用されます。この場合、すべてのインストール・ファイルに単一の日付が設定されるという問題はありますが、アーカイブの転送サイズを少し小さくすることができます。 +.sp +値が\fIkeep\fRの場合、入力JARで確認された変更時間が保持されます。これがデフォルトです。 +.RE +.PP +\-P\fIfile\fR, \-\-pass\-file=\fIfile\fR +.RS 4 +ファイルを圧縮せず、バイト単位で転送するように指定します。このオプションを繰返し使用して、複数のファイルを指定できます。システム・ファイル・セパレータがJARファイル・セパレータのスラッシュ(/)に置き換えられる点を除き、パス名の変換は行われません。結果として得られるファイル名は、文字列として正確にJARファイルでの出現と一致している必要があります。\fIfile\fRにディレクトリ名を指定した場合、そのディレクトリ内のすべてのファイルが転送されます。 +.RE +.PP +\-U\fIaction\fR, \-\-unknown\-attribute=\fIaction\fR +.RS 4 +デフォルトの動作をオーバーライドします。つまり、不明な属性を含むクラス・ファイルが、指定した\fIaction\fRによって渡されます。アクションとして指定可能な値は、\fIerror\fR、\fIstrip\fRまたは\fIpass\fRです。 +.sp +値が\fIerror\fRの場合、\fIpack200\fRコマンド操作全体が失敗して適切な説明が表示されます。 +.sp +値が\fIstrip\fRの場合、属性は削除されます。Java仮想マシン(JVM)必須属性を削除すると、クラス・ローダーの障害が発生することがあります。 +.sp +値が\fIpass\fRの場合、クラス全体が1つのリソースとして転送されます。 +.RE +.PP +\-C\fIattribute\-name\fR=\fIlayout\fR, \-\-class\-attribute=\fIattribute\-name\fR=\fIaction\fR +.RS 4 +次のオプションを参照してください。 +.RE +.PP +\-F\fIattribute\-name\fR=\fIlayout\fR, \-\-field\-attribute=\fIattribute\-name\fR=\fIaction\fR +.RS 4 +次のオプションを参照してください。 +.RE +.PP +\-M\fIattribute\-name\fR=\fIlayout\fR, \-\-method\-attribute=\fIattribute\-name\fR=\fIaction\fR +.RS 4 +次のオプションを参照してください。 +.RE +.PP +\-D\fIattribute\-name\fR=\fIlayout\fR, \-\-code\-attribute=\fIattribute\-name\fR=\fIaction\fR +.RS 4 +前述の4つのオプションでは、クラス・エンティティに\fIclass\-attribute\fR、\fIfield\-attribute\fR、\fImethod\-attribute\fRおよび\fIcode\-attribute\fRなどの属性のレイアウトを指定できます。\fIattribute\-name\fRには、これからレイアウトまたはアクションを定義する属性の名前を指定します。\fIaction\fRとして指定可能な値は、\fIsome\-layout\-string\fR、\fIerror\fR、\fIstrip\fR、\fIpass\fRです。 +.sp +\fIsome\-layout\-string\fR: レイアウト言語はJSR 200仕様で定義されています。例: +\fI\-\-class\-attribute=SourceFile=RUH\fR。 +.sp +値が\fIerror\fRの場合、\fIpack200\fR操作が失敗して説明が表示されます。 +.sp +値が\fIstrip\fRの場合、属性が出力から削除されます。VM必須属性を削除するとクラス・ローダーの障害が発生することがあります。たとえば、\fI\-\-class\-attribute=CompilationID=pass\fRというこの属性を含むクラス・ファイルを転送します。パック・ツールは、その他のアクションを行いません。 +.sp +値が\fIpass\fRの場合、クラス全体が1つのリソースとして転送されます。 +.RE +.PP +\-f \fIpack\&.properties\fR, \-\-config\-file=\fIpack\&.properties\fR +.RS 4 +コマンドラインに、パック・ツールを初期化するためのJavaプロパティが含まれている構成ファイルを指定できます。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +pack200 \-f pack\&.properties myarchive\&.pack\&.gz myarchive\&.jar +more pack\&.properties +# Generic properties for the packer\&. +modification\&.time=latest +deflate\&.hint=false +keep\&.file\&.order=false +# This option will cause the files bearing new attributes to +# be reported as an error rather than passed uncompressed\&. +unknown\&.attribute=error +# Change the segment limit to be unlimited\&. +segment\&.limit=\-1 +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\-v, \-\-verbose +.RS 4 +最小限のメッセージを出力します。このオプションを複数指定すると、より長いメッセージが作成されます。 +.RE +.PP +\-q, \-\-quiet +.RS 4 +メッセージを表示せずに動作するように指定します。 +.RE +.PP +\-l\fIfilename\fR, \-\-log\-file=\fIfilename\fR +.RS 4 +出力メッセージのログ・ファイルを指定します。 +.RE +.PP +\-?, \-h, \-\-help +.RS 4 このコマンドに関するヘルプ情報を出力します。 -.LP -.LP -\f4\-V \-\-version\fP -.LP -.LP -このコマンドに関するバージョン情報を出力します。 -.LP -.LP -\f4\-J\fP\f2option\fP -.LP -.LP -\f2option\fP を、 \f2pack200\fP から呼び出された Java 起動ツールに渡します。たとえば、 \f2\-J\-Xms48m\fP と指定すると、スタートアップメモリーが 48M バイトに設定されます。このオプションは \f2\-X\fP で始まっていませんが、 \f2pack200\fP の標準オプションではありません。 \f2\-J\fP を使って、Java で記述されたアプリケーションを実行する背後の VM にオプション渡すことは、よく行われています。 -.LP -.SH "終了ステータス" -.LP -.LP -次の終了値が返されます。 -.LP -.LP -\f2\ 0\fP 正常終了した場合 -.LP -.LP -\f2>0\fP エラーが発生した場合 -.LP -.SH "関連項目" -.LP -.RS 3 -.TP 2 -o -unpack200(1) -.TP 2 -o -.na -\f2Java SE のドキュメント\fP @ -.fi -http://java.sun.com/javase/6/docs/index.html -.TP 2 -o -.na -\f2「Java 配備ガイド \- Pack200」\fP @ -.fi -http://java.sun.com/javase/6/docs/technotes/guides/deployment/deployment\-guide/pack200.html -.TP 2 -o -jar(1) \- Java Archive ツール」 -.TP 2 -o -jarsigner(1) \- JAR 署名および検証ツール」 -.TP 2 -o -\f2attributes(5) の\fP マニュアルページ .RE - -.LP -.SH "注意事項" -.LP -.LP -このコマンドと \f2pack(1)\fP を混同しないでください。これらは別製品です。 -.LP -.LP -SDK に付属する Java SE API 仕様との相違が見つかった場合には、仕様を優先してください。 -.LP - +.PP +\-V, \-\-version +.RS 4 +このコマンドに関するバージョン情報を出力します。 +.RE +.PP +\-J\fIoption\fR +.RS 4 +指定されたオプションをJava仮想マシンに渡します。詳細は、java(1)コマンドのリファレンス・ページを参照してください。たとえば、\fI\-J\-Xms48m\fRと指定すると、スタートアップ・メモリーは48MBに設定されます。 +.RE +.SH "終了ステータス" +.PP +次の終了値が返されます: 正常終了の場合は0、エラーが発生した場合は0より大きい値。 +.SH "注意" +.PP +このコマンドと\fIpack\fR(1)を混同しないでください。\fIpack\fRおよび\fIpack200\fRコマンドは、別々の製品です。 +.PP +JDKに付属するJava SE API仕様との相違が見つかった場合には、仕様を優先してください。 +.SH "関連項目" +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +unpack200(1) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +jar(1) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +jarsigner(1) +.RE +.br +'pl 8.5i +'bp diff --git a/jdk/src/linux/doc/man/ja/policytool.1 b/jdk/src/linux/doc/man/ja/policytool.1 index b3de7eca294..c724f7893be 100644 --- a/jdk/src/linux/doc/man/ja/policytool.1 +++ b/jdk/src/linux/doc/man/ja/policytool.1 @@ -1,105 +1,173 @@ -." 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 -." 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. -." -.TH policytool 1 "07 May 2011" - -.LP -.SH "名前" -policytool \- PolicyTool 管理 GUI ユーティリティー -.LP -\f3policytool\fP は、ユーティリティー GUI 経由で取得したユーザー入力に基づいて、プレーンテキストのポリシーファイルを読み書きします。 -.RS 3 -.TP 2 -o -形式 -.TP 2 -o -説明 -.TP 2 -o -オプション -.TP 2 -o -関連項目 +'\" t +.\" Copyright (c) 2001, 2013, Oracle and/or its affiliates. All rights reserved. +.\" Title: policytool +.\" Language: English +.\" Date: 2013年11月21日 +.\" SectDesc: セキュリティ・ツール +.\" Software: JDK 8 +.\" Arch: 汎用 +.\" +.\" 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. +.\" +.pl 99999 +.TH "policytool" "1" "2013年11月21日" "JDK 8" "セキュリティ・ツール" +.\" ----------------------------------------------------------------- +.\" * Define some portability stuff +.\" ----------------------------------------------------------------- +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.\" http://bugs.debian.org/507673 +.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" ----------------------------------------------------------------- +.\" * set default formatting +.\" ----------------------------------------------------------------- +.\" disable hyphenation +.nh +.\" disable justification (adjust text to left margin only) +.ad l +.\" ----------------------------------------------------------------- +.\" * MAIN CONTENT STARTS HERE * +.\" ----------------------------------------------------------------- +.SH "NAME" +policytool \- ユーティリティGUI経由で取得したユーザー入力に基づいて、プレーン・テキストのポリシー・ファイルを読み書きします。 +.SH "概要" +.sp +.if n \{\ +.RS 4 +.\} +.nf +\fIpolicytool\fR [ \fI\-file\fR ] [ \fIfilename\fR ] +.fi +.if n \{\ .RE - -.LP -.SH "形式" -.LP -.RS 3 -.TP 3 -\ -.TP 3 -policytool 管理者ユーティリティーを実行します -\f4policytool\fP -.TP 3 -policytool を実行し、指定されたポリシーファイルを読み込みます -\f4policytool\fP\f2[\-file\ \fP\f2filename\fP\f2]\fP -.TP 3 -\ -.TP 3 -以下にそれぞれの意味を示します。 -.RS 3 -.TP 3 -file -ローカルポリシーファイルを読み込むように \f2policytool\fP に指示します -.TP 3 -filename -ファイル名 +.\} +.PP +\-file +.RS 4 +ポリシー・ファイルを読み込むように\fIpolicytool\fRに指示します。 .RE -.SH "説明" -.LP -\f3policytool\fP は、ユーザーがローカルポリシーファイルの内容を管理することを可能にする GUI です。詳細については、 -.na -\f2「ポリシーファイル作成および管理ツール」\fP @ -.fi -http://java.sun.com/javase/6/docs/technotes/guides/security/PolicyGuide.htmlを参照してください。 -.SH "オプション" -.RS 3 -.TP 3 -file -\f2filename\fP を読み込みます。 -.SH "関連項目" -.na -\f2「Default Policy Implementation and Syntax」\fP @ -.fi -http://java.sun.com/javase/6/docs/technotes/guides/security/PolicyFiles.html -.br -.na -\f2「Policy Tool Users' Guide」\fP @ -.fi -http://java.sun.com/javase/6/docs/technotes/guides/security/PolicyGuide.html -.br -.na -\f2「Security Permissions」\fP @ -.fi -http://java.sun.com/javase/6/docs/technotes/guides/security/permissions.html -.br -.na -\f2「Security Overview」\fP @ -.fi -http://java.sun.com/javase/6/docs/technotes/guides/security/overview/jsoverview.html -.br +.PP +\fIfilename\fR +.RS 4 +ロードするファイルの名前。 .RE +.PP +\fB例\fR: +.PP +ポリシー・ツール管理ユーティリティを実行します: +.sp +.if n \{\ +.RS 4 +.\} +.nf +policytool +.fi +.if n \{\ .RE - -.LP - +.\} +.PP +\fIpolicytool\fRコマンドを実行し、指定されたファイルをロードします: +.sp +.if n \{\ +.RS 4 +.\} +.nf +policytool\-file mypolicyfile +.fi +.if n \{\ +.RE +.\} +.SH "説明" +.PP +\fIpolicytool\fRコマンドは、管理者のGUIを呼び出します。これにより、システム管理者はローカル・ポリシー・ファイルの内容を管理できるようになります。ポリシー・ファイルは\fI\&.policy\fR拡張子を持つプレーンテキスト・ファイルで、ドメイン別にリモート・リクエスタを権限オブジェクトにマップします。詳細は、http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/security/PolicyFiles\&.htmlにある +「Default Policy Implementation and Policy File Syntax」を参照してください +.SH "オプション" +.PP +\-file +.RS 4 +ポリシー・ファイルを読み込むように\fIpolicytool\fRに指示します。 +.RE +.SH "関連項目" +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +「Default Policy Implementation and Policy File Syntax」 +(http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/security/PolicyFiles\&.html) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +「Policy File Creation and Management」 +(http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/security/PolicyGuide\&.html) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +「Permissions in Java SE Development Kit (JDK)」 +(http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/security/permissions\&.html) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +「Java Security Overview」 +(http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/security/overview/jsoverview\&.html) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +「Java Cryptography Architecture (JCA) Reference Guide」 +(http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/security/crypto/CryptoSpec\&.html) +.RE +.br +'pl 8.5i +'bp diff --git a/jdk/src/linux/doc/man/ja/rmic.1 b/jdk/src/linux/doc/man/ja/rmic.1 index 621cde4c028..bca3b844f7b 100644 --- a/jdk/src/linux/doc/man/ja/rmic.1 +++ b/jdk/src/linux/doc/man/ja/rmic.1 @@ -1,231 +1,360 @@ -." Copyright (c) 1997, 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. -." -.TH rmic 1 "07 May 2011" - -.LP -.SH "名前" -rmic \- Java RMI コンパイラ -.LP -.LP -\f3rmic\fP によって、JRMP または IIOP プロトコルを使用するリモートオブジェクトのスタブ、スケルトン、および Tie クラスが生成されます。また、OMG IDL も生成されます。 -.LP -.SH "形式" -.LP +'\" t +.\" Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. +.\" Title: rmic +.\" Language: English +.\" Date: 2013年11月21日 +.\" SectDesc: Remote Method Invocation (RMI)ツール +.\" Software: JDK 8 +.\" Arch: 汎用 +.\" +.\" 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. +.\" +.pl 99999 +.TH "rmic" "1" "2013年11月21日" "JDK 8" "Remote Method Invocation (RMI)" +.\" ----------------------------------------------------------------- +.\" * Define some portability stuff +.\" ----------------------------------------------------------------- +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.\" http://bugs.debian.org/507673 +.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" ----------------------------------------------------------------- +.\" * set default formatting +.\" ----------------------------------------------------------------- +.\" disable hyphenation +.nh +.\" disable justification (adjust text to left margin only) +.ad l +.\" ----------------------------------------------------------------- +.\" * MAIN CONTENT STARTS HERE * +.\" ----------------------------------------------------------------- +.SH "NAME" +rmic \- Java Remote Method Protocol (JRMP)またはInternet Inter\-Orb protocol (IIOP)を使用するリモート・オブジェクトのスタブ、スケルトンおよびTieクラスを生成します。Object Management Group (OMG)インタフェース定義言語(IDL)も生成します +.SH "概要" +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -rmic [ \fP\f3options\fP\f3 ] \fP\f4package\-qualified\-class\-name(s)\fP\f3 -.fl -\fP +\fIrmic\fR [ \fIoptions\fR ] \fIpackage\-qualified\-class\-names\fR .fi - -.LP +.if n \{\ +.RE +.\} +.PP +\fIoptions\fR +.RS 4 +コマンドライン・\fIオプション\fR。オプションを参照してください。 +.RE +.PP +\fIpackage\-qualified\-class\-names\fR +.RS 4 +パッケージを含むクラス名。例: +\fIjava\&.awt\&.Color\fR。 +.RE .SH "説明" -.LP -.LP -\f3rmic\fP コンパイラによって、リモートオブジェクトの、スタブ、スケルトンクラスファイル (JRMP プロトコル)、およびスタブと Tie クラスファイルの組み合わせ (IIOP プロトコル) が生成されます。リモートオブジェクトの実装クラスであるこれらのクラスファイルは、Java プログラミング言語のクラスをコンパイルしたときに生成されます。リモート実装クラスは、\f2java.rmi.Remote\fP インタフェースを実装するクラスです。\f3rmic\fP コマンドでのクラス名は、そのクラスが \f3javac\fP コマンドでコンパイルが成功していて、かつ完全なパッケージ名が指定されている必要があります。たとえば、クラスファイル名 \f2HelloImpl\fP で \f3rmic\fP を実行するには、次のようにします。 -.LP +.PP +\fB非推奨に関する注意:\fR +Java Remote Method Protocol (JRMP)スタブおよびスケルトンの静的な生成のサポートは非推奨になりました。動的に生成されるJRMPスタブをかわりに使用して、JRMPベースのアプリケーションにこのツールを使用する必要性をなくすことをお薦めします。詳細は、\fIjava\&.rmi\&.server\&.UnicastRemoteObject\fR仕様(http://docs\&.oracle\&.com/javase/8/docs/api/java/rmi/server/UnicastRemoteObject\&.html)を参照してください。 +.PP +\fIrmic\fRコンパイラは、Java Remote Method Protocol (JRMP)とスタブおよびTieクラス・ファイル(IIOPプロトコル)を使用して、リモート・オブジェクトのスタブおよびスケルトン・クラス・ファイルを生成します。リモート・オブジェクトの実装クラスであるこれらのクラス・ファイルは、Javaプログラミング言語のクラスをコンパイルしたときに生成されます。リモート実装クラスは、\fIjava\&.rmi\&.Remote\fRインタフェースを実装するクラスです。\fIrmic\fRコマンドでのクラス名は、そのクラスが\fIjavac\fRコマンドでコンパイルが成功していて、かつ完全修飾パッケージ名である必要があります。たとえば、次に示すクラス・ファイル名\fIHelloImpl\fRで\fIrmic\fRコマンドを実行すると、helloサブディレクトリ(クラスのパッケージの名前の付いた)に\fIHelloImpl_Stub\&.class \fRファイルが作成されます。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -rmic hello.HelloImpl -.fl -\fP +rmic hello\&.HelloImpl .fi - -.LP -.LP -\f2HelloImpl_Stub.class\fP ファイルが、クラスのパッケージ名が付いた \f2hello\fP サブディレクトリに作成されます。 -.LP -.LP -リモートオブジェクトの「スケルトン」は JRMP プロトコルサーバー側のエンティティーで、実際のリモートオブジェクト実装を呼び出すメソッドを含みます。 -.LP -.LP -リモートオブジェクトの「Tie」は、スケルトンと同様にサーバー側のエンティティーですが、IIOP プロトコルを使ってクライアントと通信します。 -.LP -.LP -「スタブ」とは、リモートオブジェクトのクライアント側での代理です。スタブは、リモートオブジェクトのメソッド呼び出しを、実物のリモートオブジェクトが常駐するサーバーと通信する役割を持ちます。したがって、クライアントのリモートオブジェクトへの参照は、実際はローカルスタブへの参照となります。 -.LP -.LP -デフォルトで \f3rmic\fP では、1.2 JRMP スタブプロトコルバージョンだけを使用するスタブクラスを生成します。これは、\f2\-v1.2\fP オプションを指定した場合と同じ動作です。(5.0 以前では \f2\-vcompat\fP オプションがデフォルトであったことに注意。IIOP プロトコル用のスタブおよび Tie クラスを生成するには \f2\-iiop\fP オプションを使用します。 -.LP -.LP -スタブはリモートインタフェースだけを実装し、リモートオブジェクトが実装する局所インタフェースは実装していません。JRMP スタブはリモートオブジェクト自体が実装するリモートインタフェースと同じものを実装しているので、クライアントは、キャストや型チェックに Java プログラミング言語に組み込まれた演算子を使用することができます。IIOP の場合は、\f2PortableRemoteObject.narrow\fP メソッドを使わなければなりません。 -.LP +.if n \{\ +.RE +.\} +.PP +リモート・オブジェクトのスケルトンはJRMPプロトコル・サーバー側のエンティティで、リモート・オブジェクト実装を呼び出すメソッドを含みます。 +.PP +リモート・オブジェクトのTieは、スケルトンと同様にサーバー側のエンティティですが、IIOPプロトコルを使用してクライアントと通信します。 +.PP +スタブとは、リモート・オブジェクトのクライアント側での代理です。スタブは、リモート・オブジェクトのメソッド呼出しを、実物のリモート・オブジェクトが常駐するサーバーと通信する役割を持ちます。したがって、クライアントのリモート・オブジェクトへの参照は、実際はローカル・スタブへの参照となります。 +.PP +デフォルトで\fIrmic\fRコマンドは、1\&.2 JRMPスタブ・プロトコル・バージョンのみを使用するスタブ・クラスを生成します。これは、\fI\-v1\&.2\fRオプションを指定した場合と同じ動作です。リリース5\&.0以前では\fI\-vcompat\fRオプションがデフォルトでした。IIOPプロトコル用のスタブおよびTieクラスを生成するには\fI\-iiop\fRオプションを使用します。オプションを参照してください。 +.PP +スタブはリモート・インタフェースのみを実装し、リモート・オブジェクトが実装するローカル・インタフェースは実装していません。JRMPスタブはリモート・オブジェクトが実装するリモート・インタフェースと同じものを実装しているので、クライアントは、キャストや型チェックにJavaプログラミング言語に組み込まれた演算子を使用することができます。IIOPの場合は、\fIPortableRemoteObject\&.narrow\fRメソッドを使用する必要があります。 .SH "オプション" -.LP -.RS 3 -.TP 3 -\-bootclasspath path -ブートストラップクラスファイルの位置をオーバーライドします。 -.TP 3 -\-classpath path -\f3rmic\fP がクラスを探すためのパスを指定します。このオプションは、デフォルトや CLASSPATH 環境変数設定を上書きします。ディレクトリはコロンで分割します。したがって、\f2path\fP の一般形式は次のようになります。 -.nf -\f3 -.fl -.:<your_path> -.fl -\fP -.fi -例を示します。 -.nf -\f3 -.fl -.:/usr/local/java/classes -.fl -\fP -.fi -.TP 3 -\-d directory -生成されたクラス階層の出力先ディレクトリのルートを指定します。このオプションを使えば、スタブ、スケルトン、および Tie ファイルを格納するディレクトリを指定できます。たとえば、次のようにして使います。 -.nf -\f3 -.fl -% rmic \-d /java/classes foo.MyClass -.fl -\fP -.fi -MyClass から取得した \f2スタブとスケルトンクラスを\fP \f2/java/classes/foo\fP ディレクトリに置きます。\f2\-d\fP オプションが指定されていない場合は、\f2「\-d\ .」\fPが指定されていると見なされます。ターゲットクラスのパッケージ階層が現在のディレクトリに作成され、スタブ、Tie、およびスケルトンファイルがそのディレクトリに格納されます。(以前のバージョンの \f3rmic\fP では、\f2\-d\fP が指定されていない場合は、パッケージ階層は作成されず、出力ファイルはすべて現在のディレクトリに直接格納されていた。) -.br -\ -.TP 3 -\-extdirs path -インストール型拡張機能の位置をオーバーライドします。 -.TP 3 -\-g -局所変数を含むすべてのデバッグ情報を生成します。デフォルトでは、行番号情報だけが生成されます。 -.TP 3 -\-idl -\f2rmic\fP によって、指定したクラスおよび参照されたクラスの OMG IDL が生成されます。IDL では、プログラミング言語に依存せずに、宣言するだけでオブジェクトの API を指定することができます。IDL は、メソッドおよびデータの仕様として使用します。CORBA バインディングを提供する任意の言語で、メソッドおよびデータの作成および呼び出しを行うことができます。これらの言語には、Java および C++ が含まれています。詳細は、 -.na -\f2Java Language to IDL Mapping\fP @ -.fi -http://www.omg.org/technology/documents/formal/java_language_mapping_to_omg_idl.htm (OMG) を参照してください。 -.LP -\f2\-idl\fP オプションを使うときは、ほかのオプションも指定できます。 -.RS 3 -.TP 3 -\-always または \-alwaysgenerate -既存のスタブ、Tie、および IDL が入力クラスより新しいときでも、強制的に生成し直します。 -.TP 3 -\-factory -生成された IDL で factory キーワードを使います。 -.TP 3 -\-idlModule\ fromJavaPackage[.class]\ toIDLModule -IDLEntity パッケージのマップを指定します。例を示します。 \f2\-idlModule foo.bar my::real::idlmod\fP -.TP 3 -\-idlFile\ fromJavaPackage[.class]\ toIDLFile -IDLEntity ファイルのマップを指定します。例を示します。 \f2\-idlFile test.pkg.X TEST16.idl\fP\ +.PP +\-bootclasspath \fIpath\fR +.RS 4 +ブートストラップ・クラス・ファイルの位置をオーバーライドします。 .RE -.TP 3 -\-iiop -\f2rmic\fP によって、JRMP のスタブとスケルトンクラスの代わりに、IIOP のスタブと Tie クラスが生成されます。スタブクラスは、リモートオブジェクトのローカルプロキシで、クライアントからサーバーに呼び出しを送信するときに使われます。各リモートインタフェースにはスタブクラスが必要です。スタブクラスによってリモートインタフェースが実装されます。クライアントでリモートオブジェクトを参照するときは、実際にはスタブを参照することになります。タイクラスは、サーバー側で着呼を処理し、その呼び出しを適切な実装クラスにディスパッチするときに使われます。各実装クラスには、タイクラスが必要です。 -.LP -\f2\-iiop\fP を使って \f2rmic\fP を呼び出すと、次の命名規約に準拠したスタブと Tie が生成されます。 +.PP +\-classpath path +.RS 4 +\fIrmic\fRコマンドがクラスを探すためのパスを指定します。このオプションは、デフォルトや\fICLASSPATH\fR環境変数設定をオーバーライドします。ディレクトリはコロンで分割します。パスの一般的な形式は\fI\&.;<your_path>\fRです。例: +\fI\&.;/usr/local/java/classes\fR +.RE +.PP +\-d \fIdirectory\fR +.RS 4 +生成されたクラス階層の出力先ディレクトリのルートを指定します。このオプションを使用すると、スタブ、スケルトン、およびTieファイルを格納するディレクトリを指定できます。たとえば、次のコマンドはMyClassから導出されたスタブおよびスケルトン・クラスをディレクトリ/java/classes/exampleclassに格納します。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -_<implementationName>_stub.class -.fl -\fP -.br -\f3 -.fl -_<interfaceName>_tie.class -.fl -\fP +rmic \-d /java/classes exampleclass\&.MyClass .fi -.LP -\f2\-iiop\fP オプションを使うときは、ほかのオプションも指定できます。 -.RS 3 -.TP 3 -\-always または \-alwaysgenerate -既存のスタブ、Tie、および IDL が入力クラスより新しいときでも、強制的に生成し直します。 -.TP 3 -\-nolocalstubs -同じプロセスのクライアントとサーバーに対して最適化されたスタブを作成しません。 -.TP 3 -\-noValueMethods -これは \f2\-idl\fP オプションとともに使われなければなりません。発行された IDL に、\f2valuetype\fP メソッドおよび初期化子を追加しません。このメソッドおよび初期化子は、\f2valuetype\fP の場合はオプションです。 \f2\-idl\fP オプションを使うときは、 \f2\-noValueMethods\fP オプションを指定しない限り生成されます。 -.TP 3 -\-poa -継承が \f2org.omg.CORBA_2_3.portable.ObjectImpl\fP から \f2org.omg.PortableServer.Servant\fP に変わります。 -.LP -.na -\f2Portable Object Adapter\fP @ +.if n \{\ +.RE +.\} +\fI\-d\fRオプションが指定されていない場合、デフォルトの動作は\fI\-d\fRが指定されていた場合と同じです。ターゲット・クラスのパッケージ階層が現在のディレクトリに作成され、stub/tie/skeletonファイルが格納されます。以前のリリースの\fIrmic\fRコマンドでは、\fI\-d\fRが指定されていない場合は、パッケージ階層は作成されず、出力ファイルはすべて現在のディレクトリに直接格納されていました。 +.RE +.PP +\-extdirs \fIpath\fR +.RS 4 +インストール済拡張機能の位置をオーバーライドします。 +.RE +.PP +\-g +.RS 4 +ローカル変数を含むすべてのデバッグ情報を生成します。デフォルトでは、行番号情報のみ生成されます。 +.RE +.PP +\-idl +.RS 4 +\fIrmic\fRコマンドによって、指定したクラスおよび参照されたクラスのOMG IDLが生成されます。IDLでは、プログラミング言語に依存せずに、宣言するだけでオブジェクトのAPIを指定することができます。IDLは、メソッドおよびデータの仕様として使用します。CORBAバインディングを提供する任意の言語で、メソッドおよびデータの作成および呼出しを行うことができます。これらの言語には、JavaおよびC++が含まれています。http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/idl/mapping/jidlMapping\&.htmlの +「Java IDL: IDL to Java Language Mapping」を参照してください +.sp +\fI\-idl\fRオプションを使用するときには、他のオプションも指定できます。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +既存のスタブ/Tie/IDLが入力クラスよりも新しい場合でも、\fI\-always\fRまたは\fI\-alwaysgenerate\fRオプションは再生成を強制します。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fI\-factory\fRオプションは、生成されたIDLで\fIfactory\fRキーワードを使用します。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +The +\fI\-idlModule\fR +from J\fIavaPackage[\&.class]\fR +\fItoIDLModule\fR +specifies +\fIIDLEntity\fR +package mapping, for example: +\fI\-idlModule\fR +\fImy\&.module my::real::idlmod\fR\&. +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fI\-idlFile\fR +\fIfromJavaPackage[\&.class] toIDLFile\fR +specifies +\fIIDLEntity\fR +file mapping, for example: +\fI\-idlFile test\&.pkg\&.X TEST16\&.idl\fR\&. +.RE +.RE +.PP +\-iiop +.RS 4 +\fIrmic\fRコマンドによって、JRMPのスタブとスケルトン・クラスのかわりに、IIOPのスタブとTieクラスが生成されます。スタブ・クラスは、リモート・オブジェクトのローカル・プロキシで、クライアントからサーバーに呼出しを送信するときに使用されます。各リモート・インタフェースにはスタブ・クラスが必要です。スタブ・クラスによってリモート・インタフェースが実装されます。クライアントでリモート・オブジェクトを参照するときは、スタブを参照することになります。タイ・クラスは、サーバー側で着呼を処理し、その呼出しを適切な実装クラスにディスパッチするときに使用されます。各実装クラスには、タイ・クラスが必要です。 +.sp +\fI\-iiop\fRを使用して\fIrmic\fRコマンドを呼び出すと、次の命名規則に準拠したスタブとTieが生成されます。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +_<implementationName>_stub\&.class +_<interfaceName>_tie\&.class .fi -http://java.sun.com/javase/6/docs/technotes/guides/idl/POA.html (POA) の \f2PortableServer\fP モジュールは、ネイティブの \f2Servant\fP 型を定義します。Java プログラミング言語では、\f2Servant\fP 型は Java の \f2org.omg.PortableServer.Servant\fP クラスにマップされます。このクラスは、すべての POA サーバント実装の基底クラスとして機能し、アプリケーションプログラマが呼び出すことのできるいくつかのメソッドのほかに、POA そのものによって呼び出され、サーバントの動作を制御するためにユーザーがオーバーライドできるメソッドも提供します。OMG IDL to Java Language Mapping Specification、CORBA V 2.3.1 ptc/00\-01\-08.pdf に準拠しています。 +.if n \{\ .RE -.TP 3 -\-J -\f2\-J\fP の後ろに続くオプションを \f2java\fP インタプリタに引き渡します。 \f2java\fP オプションと組み合わせて使います (\-J と java オプションの間にスペースは入れない)。 -.TP 3 -\-keep または \-keepgenerated -スタブ、スケルトン、または Tie クラスのための \f2.java\fP ソースファイルを \f2.class\fP ファイルと同じディレクトリに残します。 -.TP 3 -\-nowarn -警告をオフにします。このオプションを指定すると、コンパイラは警告を表示しません。 -.TP 3 -\-nowrite -コンパイルしたクラスをファイルシステムに書き込みません。 -.TP 3 -\-vcompat -1.1 と 1.2 の両方の JRMP スタブプロトコルバージョンと互換性のあるスタブおよびスケルトンクラスを作成します。(5.0 以前のリリースではこのオプションはデフォルト。)生成されたスタブクラスは、JDK 1.1 仮想マシンにロードされると 1.1 スタブプロトコルバージョンを使用し、JDK 1.2 以降の仮想マシンにロードされると 1.2 スタブプロトコルバージョンを使用します。生成されたスケルトンクラスでは、1.1 と 1.2 の両方のスタブプロトコルバージョンをサポートします。生成されたクラスは両方の操作モードをサポートするために、サイズが大きくなります。 -.TP 3 -\-verbose -コンパイラやリンカーが、コンパイルされているクラスやロードされているクラスファイルについてのメッセージを表示するようにします。 -.TP 3 -\-v1.1 -1.1 JRMP スタブプロトコルバージョンのみのスタブおよびスケルトンクラスを生成します。このオプションが使用できるのは、JDK 1.1 から \f3rmic\fP ツールで生成され、アップグレードできない (さらにダイナミッククラスローディングを使用していない) 、既存の静的配備されたスタブクラスに対し、直列化互換性のあるスタブクラスを生成場合だけです。 -.TP 3 -\-v1.2 -(デフォルト) 1.2 JRMP スタブプロトコルバージョンのみのスタブクラスを生成します。スケルトンクラスは 1.2 スタブプロトコルバージョンで使用できないため、このオプションではスケルトンクラスは生成されません。生成されたスタブクラスは、JDK 1.1 仮想マシンにロードされても動作しません。 +.\} +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fI\-iiop\fRオプションを使用するときには、他のオプションも指定できます。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +既存のスタブ/Tie/IDLが入力クラスよりも新しい場合でも、\fI\-always\fRまたは\fI\-alwaysgenerate\fRオプションは再生成を強制します。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fI\-nolocalstubs\fRオプションでは、同じプロセスのクライアントとサーバーに最適化されたスタブは作成されません。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fI\-noValueMethods\fRオプションは\fI\-idl\fRオプションとともに使用する必要があります。\fI\-noValueMethods\fRオプションは、送信されるIDLに\fIvaluetype\fRメソッドおよび初期化子を追加できないようにします。このメソッドおよび初期化子は、valuetypeの場合はオプションです。\fI\-idl\fRオプションとともに\fI\-noValueMethods\fRオプションを指定しないかぎり生成されます。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fI\-poa\fRオプションは継承を\fIorg\&.omg\&.CORBA_2_3\&.portable\&.ObjectImpl\fRから\fIorg\&.omg\&.PortableServer\&.Servant\fRに変更します。ポータブル・オブジェクト・アダプタ(POA)の\fIPortableServer\fRモジュールは、ネイティブの\fIServant\fR型を定義します。Javaプログラミング言語では、\fIServant\fR型はJavaの\fIorg\&.omg\&.PortableServer\&.Servant\fRクラスにマップされます。これは、すべてのPOAサーバント実装のベース・クラスとして機能し、アプリケーション・プログラマが呼び出すことのできるいくつかのメソッド、およびPOAによって呼び出され、サーバントの動作を制御するためにユーザーがオーバーライドできるメソッドを提供します。OMG IDL to Java Language Mapping Specification、CORBA V 2\&.3\&.1 ptc/00\-01\-08\&.pdfに準拠しています。 +.RE +.RE +.PP +\-J +.RS 4 +Javaコマンドとともに使用して、\fI\-J\fRオプションは\fI\-J\fRの後ろに続く引数をJavaインタプリタに渡します(\fI\-J\fRと引数の間にスペースは入れません)。 +.RE +.PP +\-keep or \-keepgenerated +.RS 4 +スタブ、スケルトン、またはTieクラスのために生成された\fI\&.java\fRソース・ファイルを保持し、\fI\&.class\fRファイルと同じディレクトリに書き込みます。 +.RE +.PP +\-nowarn +.RS 4 +警告をオフにします。\fI\-nowarn\fRオプションが使用される場合。コンパイラは警告を表示しません。 +.RE +.PP +\-nowrite +.RS 4 +コンパイルしたクラスをファイル・システムに書き込みません。 +.RE +.PP +\-vcompat (非推奨) +.RS 4 +1\&.1と1\&.2の両方のJRMPスタブ・プロトコル・バージョンと互換性のあるスタブおよびスケルトン・クラスを作成します。5\&.0以前のリリースではこのオプションがデフォルトでした。生成されたスタブ・クラスは、JDK 1\&.1仮想マシンにロードされると1\&.1スタブ・プロトコル・バージョンを使用し、JDK 1\&.2以降の仮想マシンにロードされると1\&.2スタブ・プロトコル・バージョンを使用します。生成されたスケルトン・クラスでは、1\&.1と1\&.2の両方のスタブ・プロトコル・バージョンをサポートします。生成されたクラスは両方の操作モードをサポートするために、サイズが大きくなります。注意:このオプションは非推奨になりました。説明を参照してください。 +.RE +.PP +\-verbose +.RS 4 +コンパイラやリンカーが、コンパイルされているクラスやロードされているクラス・ファイルについてのメッセージを表示するようにします。 +.RE +.PP +\-v1\&.1 (非推奨) +.RS 4 +1\&.1 JRMPスタブ・プロトコル・バージョンのみのスタブおよびスケルトン・クラスを生成します。\fI\-v1\&.1\fRオプションを使用できるのは、JDK 1\&.1から\fIrmic\fRコマンドで生成され、アップグレードできない(さらにダイナミック・クラス・ローディングを使用していない)、既存の静的デプロイされたスタブ・クラスに対し、直列化互換性のあるスタブ・クラスを生成する場合のみです。注意:このオプションは非推奨になりました。説明を参照してください。 +.RE +.PP +\-v1\&.2 (非推奨) +.RS 4 +(デフォルト)1\&.2 JRMPスタブ・プロトコル・バージョンのみのスタブ・クラスを生成します。スケルトン・クラスは1\&.2スタブ・プロトコル・バージョンで使用できないため、スケルトン・クラスは生成されません。生成されたスタブ・クラスは、JDK 1\&.1仮想マシンにロードされても動作しません。注意:このオプションは非推奨になりました。説明を参照してください。 .RE - -.LP .SH "環境変数" -.LP -.RS 3 -.TP 3 -CLASSPATH -ユーザー定義クラスへのパスをシステムに指定します。ディレクトリはコロンで分割します。次に例を示します。 -.nf -\f3 -.fl -.:/usr/local/java/classes -.fl -\fP -.fi +.PP +CLASSPATH +.RS 4 +ユーザー定義クラスへのパスをシステムに指定します。ディレクトリはコロンで区切られます。例: +\fI\&.:/usr/local/java/classes\fR .RE - -.LP .SH "関連項目" -.LP -.LP -java(1)、javac(1)、 -.na -\f2CLASSPATH\fP @ -.fi -http://java.sun.com/javase/6/docs/technotes/tools/index.html#classpath -.LP - +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +javac(1) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +java(1) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +Setting the Class Path +.RE +.br +'pl 8.5i +'bp diff --git a/jdk/src/linux/doc/man/ja/rmid.1 b/jdk/src/linux/doc/man/ja/rmid.1 index e229fbf1cdc..1ee27efb1a9 100644 --- a/jdk/src/linux/doc/man/ja/rmid.1 +++ b/jdk/src/linux/doc/man/ja/rmid.1 @@ -1,328 +1,365 @@ -." 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 -." 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. -." -.TH rmid 1 "07 May 2011" - -.LP -.SH "名前" -rmid \- Java RMI 起動システムデーモン -.LP -.LP -\f3rmid\fP で起動システムデーモンを開始すると、オブジェクトを仮想マシン (VM) に登録して起動できるようになります。 -.LP -.SH "形式" -.LP +'\" t +.\" Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved. +.\" Title: rmid +.\" Language: English +.\" Date: 2013年11月21日 +.\" SectDesc: Remote Method Invocation (RMI)ツール +.\" Software: JDK 8 +.\" Arch: 汎用 +.\" +.\" 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. +.\" +.pl 99999 +.TH "rmid" "1" "2013年11月21日" "JDK 8" "Remote Method Invocation (RMI)" +.\" ----------------------------------------------------------------- +.\" * Define some portability stuff +.\" ----------------------------------------------------------------- +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.\" http://bugs.debian.org/507673 +.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" ----------------------------------------------------------------- +.\" * set default formatting +.\" ----------------------------------------------------------------- +.\" disable hyphenation +.nh +.\" disable justification (adjust text to left margin only) +.ad l +.\" ----------------------------------------------------------------- +.\" * MAIN CONTENT STARTS HERE * +.\" ----------------------------------------------------------------- +.SH "NAME" +rmid \- 起動システム・デーモンを開始すると、オブジェクトをJava仮想マシン(VM)に登録してアクティブ化できるようになります。 +.SH "概要" +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -rmid [options] -.fl -\fP +\fIrmid\fR [\fIoptions\fR] .fi - -.LP +.if n \{\ +.RE +.\} +.PP +\fIoptions\fR +.RS 4 +コマンドライン・オプション。オプションを参照してください。 +.RE .SH "説明" -.LP -.LP -\f3rmid\fP ツールは、起動システムデーモンを開始します。起動システムデーモンを開始してからでないと、起動可能オブジェクトを起動システムに登録したり、VM 内で起動したりすることができません。起動可能なリモートオブジェクトを使ったプログラムの作成方法の詳細は、 -.na -\f2「Java RMI 仕様」\fP @ -.fi -http://java.sun.com/javase/6/docs/platform/rmi/spec/rmiTOC.htmlおよび -.na -\f2「起動のチュートリアル」\fP @ -.fi -http://java.sun.com/javase/6/docs/technotes/guides/rmi/activation/overview.htmlを参照してください。 -.LP -.LP -デーモンを起動するには、次のように、セキュリティーポリシーファイルを指定して \f2rmid\fP コマンドを実行します。 -.LP +.PP +\fIrmid\fRコマンドは、起動システム・デーモンを開始します。起動システム・デーモンを開始してからでないと、アクティブ化可能オブジェクトをアクティブ化システムに登録したり、JVM内でアクティブ化したりすることができません。アクティブ化可能なオブジェクトを使用するプログラムの作成方法の詳細は、\fIアクティブ化の使用\fRに関するチュートリアル(http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/rmi/activation/overview\&.html)を参照してください +.PP +\fIrmid\fRコマンドを実行し、次のようにセキュリティ・ポリシー・ファイルを指定して、デーモンを起動します。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl - rmid \-J\-Djava.security.policy=rmid.policy -.fl -\fP +rmid \-J\-Djava\&.security\&.policy=rmid\&.policy .fi - -.LP -.LP -\f3注:\fP \f2rmid\fP の Sun の 実装を実行する場合、デフォルトでは、セキュリティーポリシーファイルを指定する必要があります。それは、 \f2rmid\fP が起動グループ用に VM を起動するために各 \f2ActivationGroupDesc\fP 内の情報を使用できるかどうかを検証できるようにするためです。特に、ActivationGroupDesc のコンストラクタに渡される \f2CommandEnvironment\fP や任意の \f2Properties\fP によって指定される \f2コマンドおよび\fPオプションは、 \f2rmid\fP のセキュリティーポリシーファイルの中で明示的に許可することが必要になりました。\f2sun.rmi.activation.execPolicy\fP プロパティーの値は、 \f2起動グループ用に VM を\fP 起動するために \f2ActivationGroupDesc\fP 内の情報を使用できるかどうかを判断するときに rmid が使用するポリシーを決定します。 -.LP -.LP -\f2rmid\fP をデフォルト設定で実行すると、次のような処理が行われます。 -.LP -.RS 3 -.TP 2 -o -アクティベータを起動し、デフォルトポート 1098 で内部レジストリを起動する -.TP 2 -o -この内部レジストリの中で、 \f2ActivationSystem\fP を \f2java.rmi.activation.ActivationSystem という名前に\fP バインドする +.if n \{\ .RE - -.LP -.LP -レジストリにほかのポートを指定するには、rmid の起動時に \f2\-port\fP オプションを \f2指定しなければなりません\fP。次に例を示します。 -.LP +.\} +.PP +\fIrmid\fRコマンドのOracleの実装を実行する場合、デフォルトでは、セキュリティ・ポリシー・ファイルを指定する必要があります。それは、\fIrmid\fRコマンドが起動グループ用にJVMを起動するために各\fIActivationGroupDesc\fR内の情報を使用できるかどうかを検証できるようにするためです特に、\fIActivationGroupDesc\fRコンストラクタに渡される\fICommandEnvironment\fRや任意のプロパティによって指定されるコマンドおよびオプションは、\fIrmid\fRコマンドのセキュリティ・ポリシー・ファイルの中で明示的に許可することが必要になりました。\fIsun\&.rmi\&.activation\&.execPolicy\fRプロパティの値は、起動グループ用にJVMを起動するために\fIActivationGroupDesc\fR内の情報を使用できるかどうかを判断するときに\fIrmid\fRコマンドが使用するポリシーを決定します。詳細は、\-J\-Dsun\&.rmi\&.activation\&.execPolicy=policyオプションの説明を参照してください。 +.PP +\fIrmid\fRコマンドを実行すると、デフォルト・ポート1098でアクティベータと内部レジストリが起動され、\fIActivationSystem\fRがこの内部レジストリ内の名前\fIjava\&.rmi\&.activation\&.ActivationSystem\fRにバインドされます。 +.PP +レジストリに他のポートを指定するには、\fIrmid\fRコマンドの実行時に\fI\-port\fRオプションを指定する必要があります。たとえば、次のコマンドは、レジストリのデフォルト・ポート1099で、起動システム・デーモンとレジストリを起動します。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl - rmid \-J\-Djava.security.policy=rmid.policy \-port 1099 -.fl -\fP +rmid \-J\-Djava\&.security\&.policy=rmid\&.policy \-port 1099 .fi - -.LP -.LP -このコマンドは、起動システムデーモンを開始し、レジストリのデフォルトポート 1099 でレジストリを開始します。 -.LP -.SS -rmid を inetd/xinetd から開始する -.LP -.LP -\f2rmid\fP をコマンド行から開始するには、 \f2inetd\fP (Solaris の場合)、または \f2xinetd\fP (Linux の場合) を構成して \f2rmid\fP を必要に応じて開始する方法もあります。 -.LP -.LP -\f2rmid\fP を開始すると、System.inheritedChannel メソッドを呼び出して、継承されたチャンネル ( \f2inetd\fP/\f2xinetd\fP から継承) を取得しようとします。 継承されたチャンネルが \f2null\fP であるか、 \f2java.nio.channels.ServerSocketChannel\fP のインスタンスでなかった場合、 \f2rmid\fP rmid はそのチャンネルは \f2inetd\fP/\f2xinetd\fP によって起動されたものではないと判断し、前述のように起動します。 -.LP -.LP -継承されたチャンネルが \f2ServerSocketChannel\fP インスタンスである場合は、 \f2rmid\fP はエクスポートするリモートオブジェクト、つまり java.rmi.activation.ActivationSystem がバインドされているレジストリと java.rmi.activation.Activator リモートオブジェクトに対する要求を受信するサーバーソケットとして、ServerSocketChannel から取得した java.net.ServerSocket を使用します。 このモードでは、 \f2rmid\fP の動作は、次のことを除いて、 コマンド行から起動した場合と同じです。 -.LP -.RS 3 -.TP 2 -o -\f2System.err\fP に対する出力は、ファイルにリダイレクトされる。このファイルは \f2java.io.tmpdir\fP システムプロパティーで指定されるディレクトリ (通常は \f2/var/tmp\fP または \f2/tmp\fP) にある。ファイル名の接頭辞は \f2"rmid\-err"\fP で、接尾辞は \f2"tmp"\fP である -.TP 2 -o -\f2\-port\fP オプションは拒否される。このオプションを指定すると、 \f2rmid\fP はエラーメッセージを出して終了する -.TP 2 -o -\f2\-log\fP オプションは必須。このオプションを指定しないと、 \f2rmid\fP はエラーメッセージを出して終了する +.if n \{\ .RE - -.LP -.LP -必要に応じてサービスを開始するように設定する詳細については、 \f2inetd\fP (Solaris の場合)、または \f2xinetd\fP (Linux) のマニュアルページを参照してください。 -.LP +.\} +.SH "必要に応じてRMIDを開始" +.PP +\fIrmid\fRをコマンドラインから開始するには、\fIinetd\fR +(Oracle Solarisの場合)、または\fIxinetd\fR +(Linuxの場合)を構成して\fIrmid\fRを必要に応じて開始する方法もあります。 +.PP +RMIDを開始すると、\fISystem\&.inheritedChannel\fRメソッドを呼び出して、継承されたチャンネル(\fIinetd\fR/\fIxinetd\fRから継承)を取得しようとします。継承されたチャンネルがnullであるか、\fIjava\&.nio\&.channels\&.ServerSocketChannel\fRのインスタンスでなかった場合、RMIDはそのチャンネルは\fIinetd\fR/\fIxinetd\fRによって起動されたものではないと判断し、前述のように起動します。 +.PP +継承されたチャンネルが\fIServerSocketChannel\fRインスタンスである場合は、RMIDはエクスポートするリモート・オブジェクト、つまり\fIjava\&.rmi\&.activation\&.ActivationSystem\fRがバインドされているレジストリと\fIjava\&.rmi\&.activation\&.Activator\fRリモート・オブジェクトに対するリクエストを受信するサーバー・ソケットとして、\fIServerSocketChannel\fRから取得した\fIjava\&.net\&.ServerSocket\fRを使用します。このモードでは、RMIDの動作は、次のことを除いて、コマンドラインから起動した場合と同じです。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fISystem\&.err\fRに対する出力は、ファイルにリダイレクトされる。このファイルは\fIjava\&.io\&.tmpdir\fRシステム・プロパティで指定されるディレクトリ(通常は\fI/var/tmp\fRまたは\fI/tmp\fR)にある。ファイル名の接頭辞は\fIrmid\-err\fRで、接尾辞は\fItmp\fRである。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fI\-port\fRオプションは使用できません。このオプションが指定されている場合、RMIDはエラー・メッセージが表示されて終了します。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fI\-log\fRオプションは必須。このオプションが指定されていない場合、RMIDはエラー・メッセージが表示されて終了します。 +.RE +.PP +必要に応じてサービスを開始するように構成する方法の詳細は、\fIinetd\fR +(Oracle Solarisの場合)、または\fIxinetd\fR +(Linux)のマニュアル・ページを参照してください。 .SH "オプション" -.LP -.RS 3 -.TP 3 -\-C<someCommandLineOption> -\f2rmid\fP の子プロセス (起動グループ) が作成されたときに、それぞれの子プロセスにコマンド行引数として渡されるオプションを指定します。たとえば、次のように指定すると、起動システムデーモンによって生成される各仮想マシンにプロパティーを渡すことができます。 +.PP +\-C\fIオプション\fR +.RS 4 +\fIrmid\fRコマンドの子プロセス(起動グループ)が作成されたときに、それぞれの子プロセスにコマンドライン引数として渡されるオプションを指定します。たとえば、次のように指定すると、起動システム・デーモンによって生成される各仮想マシンにプロパティを渡すことができます。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl - rmid \-C\-Dsome.property=value -.fl -\fP +rmid \-C\-Dsome\&.property=value .fi -コマンド行引数を子プロセスに渡す機能は、デバッグを行う場合に便利です。たとえば、次のようなコマンドを実行できます。 +.if n \{\ +.RE +.\} +コマンドライン引数を子プロセスに渡す機能は、デバッグを行う場合に便利です。たとえば、次のコマンドでは、すべての子JVMでserver\-callロギングが可能です。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl - rmid \-C\-Djava.rmi.server.logCalls=true -.fl -\fP +rmid \-C\-Djava\&.rmi\&.server\&.logCalls=true .fi -このコマンドにより、すべての子 VM でサーバー呼び出しのログが作成されるようになります。 -.LP -.TP 3 -\-J<someCommandLineOption> -rmid を実行している \f2java\fP インタプリタに渡すオプションを指定します。 たとえば、 \f2rmid\fP が \f2rmid.policy\fP という名前のポリシーファイルを使用するように指定するには、rmid のコマンド行で \f2\-J\fP オプションを使って、 \f2java.security.policy\fP プロパティーを定義します。 次に例を示します。 +.if n \{\ +.RE +.\} +.RE +.PP +\-J\fIoption\fR +.RS 4 +RMIDを実行しているJavaインタプリタに渡すオプションを指定します。たとえば、\fIrmid\fRコマンドが\fIrmid\&.policy\fRという名前のポリシー・ファイルを使用するように指定するには、\fIrmid\fRのコマンドラインで\fI\-J\fRオプションを使用して、\fIjava\&.security\&.policy\fRプロパティを定義します。次に例を示します。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl - rmid \-J\-Djava.security.policy=rmid.policy -.fl -\fP +rmid \-J\-Djava\&.security\&.policy\-rmid\&.policy .fi -.TP 3 -\-J\-Dsun.rmi.activation.execPolicy=<policy> -起動グループが実行されることになる VM の起動に使用するコマンドおよびコマンド行オプションをチェックするために、 \f2rmid\fP が採用するポリシーを指定します。このオプションは、Java RMI 起動デーモンの Sun の実装だけに存在することに注意してください。コマンド行にこのプロパティーを指定しない場合、結果は \f2\-J\-Dsun.rmi.activation.execPolicy=default\fP を指定した場合と同じになります。\f2<policy>\fP に指定可能な値は、\f2default\fP、\f2<policyClassName>\fP、または \f2none\fP です。 -.RS 3 -.TP 2 -o -\f3default (または、このプロパティーが「指定されていない」場合)\fP -.LP -デフォルトの \f2execPolicy\fP の場合、 \f2rmid\fP が実行できるのは、 \f2rmid\fP が使用するセキュリティーポリシーファイルの中で、実行する権限が \f2rmid\fP に与えられているコマンドおよびコマンド行オプションだけです。「デフォルト」の実行ポリシーで使用できるのは、デフォルトの起動グループ実装だけです。 -.LP -\f2rmid は、\fP 起動グループ用の VM を起動するときに、そのグループについて登録された起動グループ記述子である \f2ActivationGroupDesc\fP 内の情報を使用します。グループ記述子は、 \f2ActivationGroupDesc.CommandEnvironment\fP を指定します (省略可能)。これには、起動グループを開始する「コマンド」と、そのコマンド行に追加できるコマンド行「オプション」が含まれています。デフォルトでは、 \f2rmid は\fP java.home にある \f2java\fP コマンドを使用します。 グループ記述子には、オプションとしてコマンド行に追加される「プロパティー」オーバーライドも含まれています。このプロパティーは、次のように定義します。 +.if n \{\ +.RE +.\} +.RE +.PP +\-J\-Dsun\&.rmi\&.activation\&.execPolicy=\fIpolicy\fR +.RS 4 +起動グループが実行されることになるJVMの起動に使用するコマンドおよびコマンドライン・オプションをチェックするために、RMIDが採用するポリシーを指定します。このオプションは、Java RMI起動デーモンのOracleの実装のみに存在することに注意してください。コマンドラインにこのプロパティを指定しない場合、結果は\fI\-J\-Dsun\&.rmi\&.activation\&.execPolicy=default\fRを指定した場合と同じになります。\fIpolicy\fRに指定可能な値は、\fIdefault\fR、\fIpolicyClassName\fRまたは\fInone\fRです。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +デフォルト +.sp +\fIdefault\fRまたは未指定値の\fIexecPolicy\fRの場合、\fIrmid\fRコマンドが実行できるのは、\fIrmid\fRコマンドが使用するセキュリティ・ポリシー・ファイルの中で、実行する権限が\fIrmid\fRに与えられているコマンドおよびコマンドライン・オプションのみです。デフォルトの実行ポリシーで使用できるのは、デフォルトの起動グループ実装のみです。 +.sp +\fIrmid\fRコマンドは、起動グループ用のJVMを起動するときに、そのグループについて登録された起動グループ記述子である\fIActivationGroupDesc\fR内の情報を使用します。グループ記述子は、\fIActivationGroupDesc\&.CommandEnvironment\fRを指定します(省略可能)。これには、起動グループを開始するコマンドと、そのコマンドラインに追加できるコマンドライン・オプションが含まれています。デフォルトでは、\fIrmid\fRコマンドは\fIjava\&.home\fRにある\fIjava\fRコマンドを使用します。グループ記述子には、コマンドラインにオプションとして追加されるプロパティ・オーバーライドも含まれます(\fI\-D<property>=<value>\fRとして定義されます)。\fIcom\&.sun\&.rmi\&.rmid\&.ExecPermission\fR権限は\fIrmid\fRコマンドに、起動グループを開始するためにグループ記述子の\fICommandEnvironment\fRで指定されたコマンドを実行する権限を付与します。\fIcom\&.sun\&.rmi\&.rmid\&.ExecOptionPermission\fR権限は起動グループの開始時に、グループ記述子でプロパティ・オーバーライドとして、または\fICommandEnvironment\fRでオプションとして指定されたコマンドライン・オプションを、\fIrmid\fRコマンドが使用することを許可します。\fIrmid\fRコマンドに様々なコマンドおよびオプションを実行する権限を付与する場合、権限\fIExecPermission\fRおよび\fIExecOptionPermission\fRをすべてのコード・ソースに付与する必要があります。 +.sp +\fBExecPermission\fR +.sp +\fIExecPermission\fRクラスは、起動グループを開始するために\fIrmid\fRコマンドが特定のコマンドを実行する権限を表します。 +.sp +\fB構文\fR: +\fIExecPermission\fRの名前は、\fIrmid\fRコマンドに実行を許可するコマンドのパス名です。スラッシュ(/)およびアスタリスク(*)で終わるパス名は、そのディレクトリに含まれるすべてのファイルを示します。スラッシュはファイル区切り文字\fIFile\&.separatorChar\fRです。スラッシュ(/)およびマイナス符号(\-)で終わるパス名は、そのディレクトリに含まれるすべてのファイルとサブディレクトリ(再帰的に)を示します。パス名に特別なトークン\fI<<ALL FILES>>\fRを指定した場合は、任意のファイルを示します。 +.sp +パス名にアスタリスク(*)を指定した場合は、現在のディレクトリ内のすべてのファイルを示します。パス名にマイナス符号(\-)を指定した場合は、現在のディレクトリ内のすべてのファイルおよび(再帰的に)現在のディレクトリに含まれるすべてのファイルとサブディレクトリを示します。 +.sp +\fBExecOptionPermission\fR +.sp +\fIExecOptionPermission\fRクラスは、起動グループを開始するときに\fIrmid\fRコマンドで特定のコマンドライン・オプションを使用できる権限を表します。\fIExecOptionPermission\fRの名前は、コマンドライン・オプションの値です。 +.sp +\fB構文\fR: オプションでは、ワイルドカードが限定的にサポートされます。アスタリスクは、ワイルドカード・マッチを表します。アスタリスク(*)は、オプション名そのものとして使用できます。つまり、任意のオプションを表すことができます。また、オプション名の末尾に使用することもできます。ただし、ドット(\&.)か等号(=)の直後にアスタリスク(*)を指定する必要があります。 +.sp +例: +\fI*\fRや\fI\-Dmydir\&.*\fRや\fI\-Da\&.b\&.c=*\fRは有効ですが、\fI*mydir\fRや\fI\-Da*b\fRや\fIab*\fRは無効です。 +.sp +\fBrmidのポリシー・ファイル\fR +.sp +\fIrmid\fRコマンドに様々なコマンドおよびオプションを実行する権限を許可する場合は、権限\fIExecPermission\fRおよび\fIExecOptionPermission\fRをすべてのコード・ソースに付与する必要があります(汎用的に)。これらの権限をチェックするのは\fIrmid\fRコマンドのみなので、これらの権限を汎用的に付与しても安全です。 +.sp +\fIrmid\fRコマンドに各種の実行権限を付与するポリシー・ファイルの例を、次に示します。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl - \-D\fP\f4<property>\fP\f3=\fP\f4<value>\fP\f3 -.fl -\fP -.fi -.LP -アクセス権 \f2com.sun.rmi.rmid.ExecPermission\fP を使用すると、 \f2rmid\fP に対して、グループ記述子の \f2CommandEnvironment\fP で指定されたコマンドを実行して起動グループを開始する権限を許可することができます。アクセス権 \f2com.sun.rmi.rmid.ExecOptionPermission\fP を使用すると、グループ記述子でプロパティーオーバーライドとして指定されたコマンド行オプション、または \f2CommandEnvironment\fP でオプションとして指定されたコマンド行オプションを、起動グループを開始するときに rmid が使用できるようになります。 -.LP -\f2rmid に\fP さまざまなコマンドおよびオプションを実行する権限を許可する場合は、アクセス権 \f2ExecPermission\fP および \f2ExecOptionPermission\fP を汎用的に許可する必要があります。つまり、すべてのコードソースに対して許可します。 -.RS 3 -.TP 3 -ExecPermission -\f2ExecPermission\fP クラスは、起動グループを開始するために \f2rmid が\fP 特定の「コマンド」を実行する権限を表します。 -.LP -\f3構文\fP -.br -\f2ExecPermission\fP の「名前」は、 \f2rmid\fP に実行を許可するコマンドのパス名です。「/*」 (「/」はファイル区切り文字 File.separatorChar) で終わるパス名は、そのディレクトリに含まれるすべてのファイルを示します。 「/\-」で終わるパス名は、そのディレクトリに含まれるすべてのファイルとサブディレクトリ (再帰的に) を示します。パス名に特別なトークン「<<ALL FILES>>」を指定した場合は、\f3任意の\fPファイルを示します。 -.LP -\f3注:\fP 「*」を 1 つ指定しただけのパス名は、現在のディレクトリ内のすべてのファイルを表します。また、「\-」を 1 つ指定しただけのパス名は、現在のディレクトリ内のすべてのファイルと、現在のディレクトリに含まれるすべてのファイルとサブディレクトリ (再帰的に) を表します。 -.TP 3 -ExecOptionPermission -\f2ExecOptionPermission\fP クラスは、起動グループを開始するときに \f2rmid は、起動グループを開始するコマンドをまったく検証しません。\fP 特定のコマンド行「オプション」を使用できる権限を表します。 \f2ExecOptionPermission\fP の「名前」は、コマンド行オプションの値です。 -.LP -\f3構文\fP -.br -オプションでは、ワイルドカードが限定的にサポートされます。アスタリスクは、ワイルドカードマッチを表します。 アスタリスクは、オプション名そのものとして使用できます。 つまり、任意のオプションを表すことができます。 また、オプション名の末尾に使用することもできます。 ただし、「.」か「=」の直後にアスタリスクを指定する必要があります。 -.LP -例を示します。「*」、「\-Dfoo.*」、「\-Da.b.c=*」は有効ですが、「*foo」、「\-Da*b」、「ab*」は無効です。 -.TP 3 -rmid のポリシーファイル -\f2rmid に\fP さまざまなコマンドおよびオプションを実行する権限を許可する場合は、アクセス権 \f2ExecPermission\fP および \f2ExecOptionPermission\fP を汎用的に許可する必要があります。つまり、すべてのコードソースに対して許可します。これらのアクセス権をチェックするのは \f2rmid\fP だけなので、これらのアクセス権を汎用的に許可しても安全です。 -.LP -rmid に各種の実行権限を許可するポリシーファイルの例を、次に示します。 -.nf -\f3 -.fl grant { -.fl - permission com.sun.rmi.rmid.ExecPermission -.fl - "/files/apps/java/jdk1.7.0/solaris/bin/java"; -.fl - -.fl - permission com.sun.rmi.rmid.ExecPermission -.fl - "/files/apps/rmidcmds/*"; -.fl - -.fl - permission com.sun.rmi.rmid.ExecOptionPermission -.fl - "\-Djava.security.policy=/files/policies/group.policy"; -.fl - -.fl - permission com.sun.rmi.rmid.ExecOptionPermission -.fl - "\-Djava.security.debug=*"; -.fl - -.fl - permission com.sun.rmi.rmid.ExecOptionPermission -.fl - "\-Dsun.rmi.*"; -.fl -}; -.fl -\fP -.fi -最初に付与されているアクセス権は、 \f2rmid\fP に対し、パス名により明示的に指定される \f2java\fP コマンドの 1.7.0 バージョンの実行を許可します。デフォルトでは、java.home にあるバージョンの \f2java\fP コマンドを使用します。 \f2rmid\fP が使用するのと同じバージョン) が使用されるため、そのコマンドは、ポリシーファイルで指定する必要はありません。2 番目のアクセス権は、 \f2rmid\fP に対して、ディレクトリ \f2/files/apps/rmidcmds\fP 内の任意のコマンドの実行権限を許可します。 -.LP -3 番目に付与されているアクセス権 \f2ExecOptionPermission\fP は、 \f2rmid\fP に対して、セキュリティーポリシーファイルを \f2/files/policies/group.policy\fP として定義している起動グループの開始を許可します。次のアクセス権は、起動グループが \f2java.security.debug\fP プロパティーを使用することを許可しています。最後のアクセス権は、起動グループが \f2sun.rmi\fP というプロパティー名の階層内の任意のプロパティーを使用することを許可しています。 -.LP -ポリシーファイルを指定して \f2rmid\fP を起動するには、rmid のコマンド行で \f2java.security.policy\fP プロパティーを指定する必要があります。 次に例を示します。 -.LP -\f2rmid \-J\-Djava.security.policy=rmid.policy\fP -.RE -.TP 2 -o -\f4<policyClassName>\fP -.LP -デフォルトの動作では十分な柔軟性が得られない場合、管理者は、 \f2rmid\fP の起動時に、 \f2checkExecCommand\fP メソッドが所属するクラスの名前を指定して、rmid が実行するコマンドをチェックすることができます。 -.LP -\f2policyClassName\fP には、引数なしのコンストラクタを持ち、次のような \f2checkExecCommand\fP メソッドを実装している public クラスを指定します。 -.nf -\f3 -.fl - public void checkExecCommand(ActivationGroupDesc desc, -.fl - String[] command) -.fl - throws SecurityException; -.fl -\fP -.fi -起動グループを開始する前に、 \f2rmid\fP は、ポリシーの \f2checkExecCommand\fP メソッドを呼び出します。このとき、起動グループの記述子と、起動グループを開始するための完全なコマンドを含む配列をそのメソッドに渡します。 \f2checkExecCommand\fP が \f2SecurityException\fP をスローすると、 \f2rmid\fP はその起動グループを開始せず、オブジェクトの起動を試行している呼び出し側には \f2ActivationException\fP がスローされます。 -.TP 2 -o -\f3none\fP -.LP -\f2sun.rmi.activation.execPolicy\fP プロパティーの値が「none」の場合、 \f2rmid\fP は、起動グループを開始するコマンドをまったく検証しません。 -.RE -.LP -.TP 3 -\-log dir -起動システムデーモンがデータベースおよび関連情報を書き込むのに使うディレクトリの名前を指定します。デフォルトでは、rmid コマンドを実行したディレクトリに、 \f2log\fP というログディレクトリが作成されます。 -.LP -.TP 3 -\-port port -\f2rmid\fP のレジストリが使うポートを指定します。起動システムデーモンは、このレジストリの中で、 \f2java.rmi.activation.ActivationSystem\fP という名前でActivationSystem をバインドします。したがって、ローカルマシン上の \f2ActivationSystem\fP は、次のように \f2Naming.lookup\fP メソッドを呼び出すことによって取得できます。 -.nf -\f3 -.fl - import java.rmi.*; -.fl - import java.rmi.activation.*; -.fl - -.fl - ActivationSystem system; system = (ActivationSystem) -.fl - Naming.lookup("//:\fP\f4port\fP/java.rmi.activation.ActivationSystem"); -.fl -.fi -.TP 3 -\-stop -\-port オプションによって指定されたポートの、現在の \f2rmid\fP 呼び出しを停止します。 ポートが指定されていない場合は、ポート 1098 で実行されている \f2rmid\fP を停止します。 -.RE - -.LP -.SH "環境変数" -.LP -.RS 3 -.TP 3 -CLASSPATH -ユーザー定義クラスへのパスをシステムに指定します。ディレクトリはコロンで分割します。例を示します。 -.nf -\f3 -.fl - .:/usr/local/java/classes -.fl -\fP -.fi -.RE - -.LP -.SH "関連項目" -.LP -.LP -rmic(1)、 -.na -\f2CLASSPATH\fP @ -.fi -http://java.sun.com/javase/6/docs/technotes/tools/index.html#classpath、java(1) -.LP + permission com\&.sun\&.rmi\&.rmid\&.ExecPermission + "/files/apps/java/jdk1\&.7\&.0/solaris/bin/java"; + permission com\&.sun\&.rmi\&.rmid\&.ExecPermission + "/files/apps/rmidcmds/*"; + + permission com\&.sun\&.rmi\&.rmid\&.ExecOptionPermission + "\-Djava\&.security\&.policy=/files/policies/group\&.policy"; + + permission com\&.sun\&.rmi\&.rmid\&.ExecOptionPermission + "\-Djava\&.security\&.debug=*"; + + permission com\&.sun\&.rmi\&.rmid\&.ExecOptionPermission + "\-Dsun\&.rmi\&.*"; +}; +.fi +.if n \{\ +.RE +.\} +最初に付与されている権限は、\fIrmid\fRコマンドに対し、パス名により明示的に指定される\fIjava\fRコマンドの1\&.7\&.0リリースの実行を許可します。デフォルトでは、\fIjava\&.home\fRにあるバージョンの\fIjava\fRコマンドを使用します。\fIrmid\fRコマンドが使用するのと同じバージョンが使用されるため、そのコマンドは、ポリシー・ファイルで指定する必要はありません。2番目の権限は、\fIrmid\fRコマンドに対して、ディレクトリ\fI/files/apps/rmidcmds\fR内の任意のコマンドの実行権限を許可します。 +.sp +3番目に付与されている権限\fIExecOptionPermission\fRは、\fIrmid\fRコマンドに対して、セキュリティ・ポリシー・ファイルを\fI/files/policies/group\&.policy\fRとして定義している起動グループの開始を許可します。次の権限は、起動グループが\fIjava\&.security\&.debug property\fRを使用することを許可しています。最後の権限は、起動グループが\fIsun\&.rmi property\fR名の階層内の任意のプロパティを使用することを許可しています。 +.sp +ポリシー・ファイルを指定して\fIrmid\fRコマンドを起動するには、\fIrmid\fRのコマンドラインで\fIjava\&.security\&.policy\fRプロパティを指定する必要があります。次に例を示します。 +.sp +\fIrmid \-J\-Djava\&.security\&.policy=rmid\&.policy\fR\&. +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +<policyClassName> +.sp +デフォルトの動作では十分な柔軟性が得られない場合、管理者は、\fIrmid\fRの起動時に、\fIcheckExecCommand\fRメソッドが所属するクラスの名前を指定して、\fIrmid\fRコマンドが実行するコマンドをチェックすることができます。 +.sp +\fIpolicyClassName\fRには、引数なしのコンストラクタを持ち、次のような\fIcheckExecCommand\fRメソッドを実装しているpublicクラスを指定します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf + public void checkExecCommand(ActivationGroupDesc desc, String[] command) + throws SecurityException; +.fi +.if n \{\ +.RE +.\} +起動グループを開始する前に、\fIrmid\fRコマンドは、ポリシーの\fIcheckExecCommand\fRメソッドを呼び出します。このとき、起動グループの記述子と、起動グループを開始するための完全なコマンドを含む配列をそのメソッドに渡します。\fIcheckExecCommand\fRが\fISecurityException\fRをスローすると、\fIrmid\fRコマンドはその起動グループを開始せず、オブジェクトの起動を試行している呼出し側には\fIActivationException\fRがスローされます。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +none +.sp +\fIsun\&.rmi\&.activation\&.execPolicy\fRプロパティの値が\fInone\fRの場合、\fIrmid\fRコマンドは、起動グループを開始するコマンドをまったく検証しません。 +.RE +.RE +.PP +\-log \fIdir\fR +.RS 4 +起動システム・デーモンがデータベースおよび関連情報を書き込むのに使用するディレクトリの名前を指定します。デフォルトでは、\fIrmid\fRコマンドを実行したディレクトリに、logというログ・ディレクトリが作成されます。 +.RE +.PP +\-port \fIport\fR +.RS 4 +レジストリが使用するポートを指定します。起動システム・デーモンは、このレジストリの中で、\fIjava\&.rmi\&.activation\&.ActivationSystem\fRという名前で\fIActivationSystem\fRをバインドします。ローカル・マシン上の\fIActivationSystem\fRは、次のように\fINaming\&.lookup\fRメソッドを呼び出すことによって取得できます。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +import java\&.rmi\&.*; + import java\&.rmi\&.activation\&.*; + + ActivationSystem system; system = (ActivationSystem) + Naming\&.lookup("//:port/java\&.rmi\&.activation\&.ActivationSystem"); +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\-stop +.RS 4 +\fI\-port\fRオプションによって指定されたポートの、現在の\fIrmid\fRコマンドの呼出しを停止します。ポートが指定されていない場合は、このオプションはポート1098で実行されている\fIrmid\fRの呼出しを停止します。 +.RE +.SH "環境変数" +.PP +CLASSPATH +.RS 4 +ユーザー定義クラスへのパスをシステムに指定します。ディレクトリはコロンで区切られます。例: +\fI\&.:/usr/local/java/classes\fR +.RE +.SH "関連項目" +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +java(1) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +Setting the Class Path +.RE +.br +'pl 8.5i +'bp diff --git a/jdk/src/linux/doc/man/ja/rmiregistry.1 b/jdk/src/linux/doc/man/ja/rmiregistry.1 index 264c3c1cfa6..2786a5b1a3c 100644 --- a/jdk/src/linux/doc/man/ja/rmiregistry.1 +++ b/jdk/src/linux/doc/man/ja/rmiregistry.1 @@ -1,83 +1,132 @@ -." Copyright (c) 1997, 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. -." -.TH rmiregistry 1 "07 May 2011" - -.LP -.SH "名前" -rmiregistry \- Java リモートオブジェクトレジストリ -.LP -.RS 3 -\f3rmiregistry\fP コマンドは、現在のホストの指定したポート上にリモートオブジェクトレジストリを開始します。 -.RE - -.LP -.SH "形式" -.LP +'\" t +.\" Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. +.\" Title: rmiregistry +.\" Language: English +.\" Date: 2013年11月21日 +.\" SectDesc: Remote Method Invocation (RMI)ツール +.\" Software: JDK 8 +.\" Arch: 汎用 +.\" +.\" 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. +.\" +.pl 99999 +.TH "rmiregistry" "1" "2013年11月21日" "JDK 8" "Remote Method Invocation (RMI)" +.\" ----------------------------------------------------------------- +.\" * Define some portability stuff +.\" ----------------------------------------------------------------- +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.\" http://bugs.debian.org/507673 +.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" ----------------------------------------------------------------- +.\" * set default formatting +.\" ----------------------------------------------------------------- +.\" disable hyphenation +.nh +.\" disable justification (adjust text to left margin only) +.ad l +.\" ----------------------------------------------------------------- +.\" * MAIN CONTENT STARTS HERE * +.\" ----------------------------------------------------------------- +.SH "NAME" +rmiregistry \- 現在のホストの指定したポート上にリモート・オブジェクト・レジストリを開始します。 +.SH "概要" +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -rmiregistry [\fP\f4port\fP\f3] -.fl -\fP +\fIrmiregistry\fR [ \fIport\fR ] .fi - -.LP -.SH "説明" -.LP -.LP -\f3rmiregistry\fP コマンドは、現在のホストの指定 \f2port\fP 上にリモートオブジェクトレジストリを作成し、開始します。\f2port\fP の指定を省略した場合、レジストリはポート 1099 で開始します。\f3rmiregistry\fP コマンドに、出力機能はありません。通常、これはバックグラウンドで実行されます。例を示します。 -.LP -.LP -\f2rmiregistry&\fP -.LP -.LP -リモートオブジェクトレジストリは、ブートストラップのネームサービスです。同一ホストの RMI サーバーが、リモートオブジェクトを名前にバインドするために使用されます。次に、ローカルおよびリモートホストのクライアントはリモートオブジェクトを検索し、リモートメソッドの呼び出しを行います。 -.LP -.LP -レジストリは、一般的に、最初のリモートオブジェクトの位置を指定します。 そこで、アプリケーションはメソッドを呼び出す必要があります。代わって、そのオブジェクトはアプリケーション指定のサポートを提供し、他のオブジェクトを探します。 -.LP -.LP -\f2java.rmi.registry.LocateRegistry\fP クラスのメソッドは、ローカルホスト、またはローカルホストとポートで動作するレジストリを取得するために使用されます。 -.LP -.LP -\f2java.rmi.Naming\fP クラスの URL ベースのメソッドは、レジストリで動作し、任意のホストおよびローカルホスト上のリモートオブジェクトの検索に使用されます。リモートオブジェクトに単純な (文字列) 名前をバインドしたり、新しい名前をリバインド (古いバインドにオーバーライド) します。またリモートオブジェクトをアンバインドしたり、レジストリにバインドされた URL を出力します。 -.LP -.SH "オプション" -.LP -.RS 3 -.TP 3 -\-J -\f2\-J\fP の後ろに続くオプションを \f2java\fP インタプリタに引き渡します。 \f2java\fP オプションと組み合わせて使います (\-J と java オプションの間にスペースは入れない)。 +.if n \{\ +.RE +.\} +.PP +\fIport\fR +.RS 4 +リモート・オブジェクト・レジストリを開始する現在のホスト上の\fIport\fRの数。 +.RE +.SH "説明" +.PP +\fIrmiregistry\fRコマンドは、現在のホストの指定したポート上にリモート・オブジェクト・レジストリを作成し、開始します。portの指定を省略した場合、レジストリはポート1099で開始します。\fIrmiregistry\fRコマンドに、出力機能はありません。通常、これはバックグラウンドで実行されます。次に例を示します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +rmiregistry & +.fi +.if n \{\ +.RE +.\} +.PP +リモート・オブジェクト・レジストリは、ブートストラップのネーム・サービスです。同一ホストのRMIサーバーが、リモート・オブジェクトを名前にバインドするために使用されます。次に、ローカルおよびリモート・ホストのクライアントはリモート・オブジェクトを検索し、リモート・メソッドの呼出しを行います。 +.PP +レジストリは、一般的に、最初のリモート・オブジェクトの位置を指定します。そこで、アプリケーションはメソッドを呼び出す必要があります。その後、そのオブジェクトはアプリケーション指定のサポートを提供し、他のオブジェクトを探します。 +.PP +\fIjava\&.rmi\&.registry\&.LocateRegistry\fRクラスのメソッドは、ローカル・ホスト、またはローカル・ホストとポートで動作するレジストリを取得するために使用されます。 +.PP +\fIjava\&.rmi\&.Naming\fRクラスのURLベース・メソッドはレジストリに対して操作を実行し、任意のホストおよびローカル・ホストでのリモート・オブジェクトの検索に使用できます。単純名(文字列)をリモート・オブジェクトにバインドし、新しい名前をリモート・オブジェクトに再バインドし(古いバインドをオーバーライド)、リモート・オブジェクトをアンバインドし、レジストリにバインドされているURLをリスト表示します。 +.SH "オプション" +.PP +\-J +.RS 4 +Javaオプションとともに使用して、\fI\-J\fRの後ろに続くオプションをJavaインタプリタに引き渡します(\fI\-J\fRとオプションの間にスペースは入れません)。 .RE - -.LP .SH "関連項目" -.LP -java(1)、 -.na -\f2java.rmi.registry.LocateRegistry\fP @ -.fi -http://java.sun.com/javase/6/docs/api/java/rmi/registry/LocateRegistry.html、および -.na -\f2java.rmi.Naming\fP @ -.fi -http://java.sun.com/javase/6/docs/api/java/rmi/Naming.html +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +java(1) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fI「java\&.rmi\&.registry\&.LocateRegistry」\fR(http://docs\&.oracle\&.com/javase/8/docs/api/java/rmi/registry/LocateRegistry\&.html) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fI「java\&.rmi\&.Naming class description」\fR(http://docs\&.oracle\&.com/javase/8/docs/api/java/rmi/Naming\&.html) +.RE +.br +'pl 8.5i +'bp diff --git a/jdk/src/linux/doc/man/ja/schemagen.1 b/jdk/src/linux/doc/man/ja/schemagen.1 index cb86632a14a..60deab8308d 100644 --- a/jdk/src/linux/doc/man/ja/schemagen.1 +++ b/jdk/src/linux/doc/man/ja/schemagen.1 @@ -1,127 +1,158 @@ -." Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. -." DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -." -." This code is free software; you can redistribute it and/or modify it -." under the terms of the GNU General Public License version 2 only, as -." published by the Free Software Foundation. -." -." 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. -." -.TH schemagen 1 "07 May 2011" - -.LP -.SH "名前" -schemagen \- XML バインドのための Java(TM) アーキテクチャースキーマジェネレータ -.LP -.LP -\f3仕様バージョン:\fP 2.1 -.br -\f3実装バージョン:\fP 2.1.3 -.LP -.SH "schemagen の起動" -.LP -.LP -スキーマジェネレータを起動するには、ユーザーのプラットフォームの bin ディレクトリ内にある \f2適切な schemagen シェルスクリプト\fP を使用 \f2します\fP 。 -.LP -.LP -現在のスキーマジェネレータは、Java ソースファイルとクラスファイルのいずれも処理できます。 -.LP -.LP -また、スキーマジェネレータを実行するための Ant タスクも用意されています。 -.na -\f2schemagen を Ant とともに使用する\fP @ -.fi -https://jaxb.dev.java.net/nonav/2.1.3/docs/schemagenTask.htmlための手順を参照してください。 -.LP +'\" t +.\" Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved. +.\" Title: schemagen +.\" Language: English +.\" Date: 2013年11月21日 +.\" SectDesc: Java Webサービス・ツール +.\" Software: JDK 8 +.\" Arch: 汎用 +.\" +.\" 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. +.\" +.pl 99999 +.TH "schemagen" "1" "2013年11月21日" "JDK 8" "Java Webサービス・ツール" +.\" ----------------------------------------------------------------- +.\" * Define some portability stuff +.\" ----------------------------------------------------------------- +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.\" http://bugs.debian.org/507673 +.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" ----------------------------------------------------------------- +.\" * set default formatting +.\" ----------------------------------------------------------------- +.\" disable hyphenation +.nh +.\" disable justification (adjust text to left margin only) +.ad l +.\" ----------------------------------------------------------------- +.\" * MAIN CONTENT STARTS HERE * +.\" ----------------------------------------------------------------- +.SH "NAME" +schemagen \- Javaクラス内で参照されているネームスペースごとにスキーマを生成します。 +.SH "概要" +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -% schemagen.sh Foo.java Bar.java ... -.fl -Note: Writing schema1.xsd -.fl -\fP +\fIschemagen\fR [ \fIoptions\fR ] \fIjava\-files\fR .fi - -.LP -.LP -ユーザーの Java ソース/クラスがほかのクラスを参照している場合、システムの 環境変数経由でそれらのクラスにアクセスできるようになっているか、あるいは \f2\-classpath\fP/\f2\-cp\fP を使ってそれらのクラスをツールに指定する必要があります。そうしないと、スキーマの生成時にエラーが発生します。 -.LP -.SS -コマンド行オプション -.LP -.nf -\f3 -.fl -使用方法: schemagen [\-options ...] <java files> -.fl - -.fl -オプション: -.fl - \-d <path> : プロセッサおよび javac によって生成されるクラスファイルの格納場所を指定します。 -.fl - \-cp <path> : ユーザー指定ファイルの検索場所を指定します。 -.fl - \-classpath <path> : ユーザー指定ファイルの検索場所を指定します。 -.fl - \-encoding <encoding> : apt/javac 呼び出しに使用されるエンコーディングを指定します。 -.fl - -.fl - \-episode <file> : 個別コンパイル用のエピソードファイルを生成します。 -.fl - \-version : バージョン情報を表示します。 -.fl - \-help : この使用方法に関するメッセージを表示します。 -.fl -\fP -.fi - -.LP -.SH "生成されるリソースファイル" -.LP -.LP -現在のスキーマジェネレータは単純に、Java クラス内で参照されている名前空間ごとに 1 つのスキーマファイルを作成します。生成されるスキーマファイルの名前を制御する方法は、現時点では存在しません。そうした目的には、 -.na -\f2スキーマジェネレータの ant タスク\fP @ -.fi -https://jaxb.dev.java.net/nonav/2.1.3/docs/schemagenTask.htmlを使用してください。 -.LP -.SH "名前" -関連項目 -.LP -.RS 3 -.TP 2 -o -スキーマジェネレータの実行 (schemagen): [ -.na -\f2コマンド行の命令\fP @ -.fi -https://jaxb.dev.java.net/nonav/2.1.3/docs/schemagen.html、 -.na -\f2SchemaGen を Ant とともに使用する\fP @ -.fi -https://jaxb.dev.java.net/nonav/2.1.3/docs/schemagenTask.html] -.TP 2 -o -.na -\f2XML バインドのための JavaTM アーキテクチャー (JAXB)\fP @ -.fi -http://java.sun.com/javase/6/docs/technotes/guides/xml/jaxb/index.html +.if n \{\ .RE +.\} +.PP +\fIoptions\fR +.RS 4 +コマンドライン・オプション。オプションを参照してください。 +.RE +.PP +\fIjava\-files\fR +.RS 4 +処理するJavaクラス・ファイル。 +.RE +.SH "説明" +.PP +スキーマ・ジェネレータは、Javaクラス内で参照されているネームスペースごとに1つのスキーマ・ファイルを作成します。現在、生成されるスキーマ・ファイルの名前は制御できません。スキーマ・ファイル名を制御する場合は、http://jaxb\&.java\&.net/nonav/2\&.2\&.3u1/docs/schemagenTask\&.htmlにある +「Using SchemaGen with Ant」を参照してください +.PP +プラットフォームのbinディレクトリにある適切な\fIschemagen\fRシェル・スクリプトを使用して、スキーマ・ジェネレータを起動します。現在のスキーマ・ジェネレータは、Javaソース・ファイルとクラス・ファイルのいずれも処理できます。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +schemagen\&.sh Foo\&.java Bar\&.java \&.\&.\&. +Note: Writing schema1\&.xsd +.fi +.if n \{\ +.RE +.\} +.PP +javaファイルが他のクラスを参照している場合、それらのクラスにシステム\fICLASSPATH\fR環境変数でアクセスできる必要があります。または、クラス・パス・オプションを指定して\fIschemagen\fRコマンド・ラインで指定する必要があります。オプションを参照してください。参照されるファイルにアクセスできない、または参照されるファイルが指定されていない場合、スキーマの生成時にエラーが表示されます。 +.SH "オプション" +.PP +\-d \fIpath\fR +.RS 4 +\fIschemagen\fRコマンドがプロセッサ生成および\fIjavac\fR生成クラス・ファイルを配置する場所。 +.RE +.PP +\-cp \fIpath\fR +.RS 4 +\fIschemagen\fRコマンドがユーザー指定ファイルを配置する場所。 +.RE +.PP +\-classpath \fIpath\fR +.RS 4 +\fIschemagen\fRコマンドがユーザー指定ファイルを配置する場所。 +.RE +.PP +\-encoding \fIencoding\fR +.RS 4 +\fIapt\fRまたは\fIjavac\fRコマンドの呼出しに使用するエンコーディングを指定します。 +.RE +.PP +\-episode \fIfile\fR +.RS 4 +コンパイルごとにエピソード・ファイルを生成します。 +.RE +.PP +\-version +.RS 4 +リリース情報を表示します。 +.RE +.PP +\-help +.RS 4 +ヘルプ・メッセージを表示します。 +.RE +.SH "関連項目" +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +Using SchemaGen with Ant -.LP - +(http://jaxb\&.java\&.net/nonav/2\&.2\&.3u1/docs/schemagenTask\&.html) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +Java Architecture for XML Binding (JAXB) + +(http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/xml/jaxb/index\&.html) +.RE +.br +'pl 8.5i +'bp diff --git a/jdk/src/linux/doc/man/ja/serialver.1 b/jdk/src/linux/doc/man/ja/serialver.1 index e06b12e9de1..e527c1694f4 100644 --- a/jdk/src/linux/doc/man/ja/serialver.1 +++ b/jdk/src/linux/doc/man/ja/serialver.1 @@ -1,97 +1,144 @@ -." Copyright (c) 1997, 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. -." -.TH serialver 1 "07 May 2011" - -.LP -.SH "名前" -serialver \- シリアルバージョンコマンド -.LP -.LP -\f3serialver\fP コマンドは \f2serialVersionUID\fP を返します。 -.LP -.SH "形式" -.LP +'\" t +.\" Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. +.\" Title: serialver +.\" Language: English +.\" Date: 2013年11月21日 +.\" SectDesc: Remote Method Invocation (RMI)ツール +.\" Software: JDK 8 +.\" Arch: 汎用 +.\" +.\" 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. +.\" +.pl 99999 +.TH "serialver" "1" "2013年11月21日" "JDK 8" "Remote Method Invocation (RMI)" +.\" ----------------------------------------------------------------- +.\" * Define some portability stuff +.\" ----------------------------------------------------------------- +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.\" http://bugs.debian.org/507673 +.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" ----------------------------------------------------------------- +.\" * set default formatting +.\" ----------------------------------------------------------------- +.\" disable hyphenation +.nh +.\" disable justification (adjust text to left margin only) +.ad l +.\" ----------------------------------------------------------------- +.\" * MAIN CONTENT STARTS HERE * +.\" ----------------------------------------------------------------- +.SH "NAME" +serialver \- 指定したクラスのシリアル・バージョンUIDを戻します。 +.SH "概要" +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -\fP\f3serialver\fP [ options ] [ classnames ] -.fl +\fIserialver\fR [ \fIoptions\fR ] [ \fIclassnames\fR ] .fi - -.LP -.RS 3 -.TP 3 -options -このドキュメントで説明されているコマンド行オプションです。 -.TP 3 -classnames -1 つ以上のクラス名です。 +.if n \{\ +.RE +.\} +.PP +\fIoptions\fR +.RS 4 +コマンドライン・オプション。オプションを参照してください。 +.RE +.PP +\fIclassnames\fR +.RS 4 +\fIserialVersionUID\fRを戻すクラスです。 .RE - -.LP .SH "説明" -.LP -.LP -\f3serialver\fP は、1 つ以上のクラスの \f2serialVersionUID\fP を、展開しているクラスへコピーするのに適した形式で返します。引数を指定しないで呼び出すと、使用方法が表示されます。 -.LP +.PP +\fIserialver\fRコマンドは、1つ以上のクラスの\fIserialVersionUID\fRを、展開しているクラスへコピーするのに適した形式で返します。引数なしで呼び出された場合、\fIserialver\fRコマンドは使用率行を出力します。 .SH "オプション" -.LP -.RS 3 -.TP 3 -\-classpath <: で区切られたディレクトリと zip や jar ファイル> -アプリケーションのクラスおよびリソースの検索パスを設定します。 +.PP +\-classpath \fIpath\-files\fR +.RS 4 +アプリケーションのクラスおよびリソースの検索パスを設定します。クラスとリソースをコロン(:)で区切ります。 .RE - -.LP -.RS 3 -.TP 3 -\-show -簡単なユーザーインタフェースを表示します。完全指定のクラス名を入力して、Enter キーか「Show」ボタンを押し、シリアルバージョン UID を表示します。 -.TP 3 -\-Joption -Java 仮想マシンに \f2option\fP を渡します。\f2option\fP には、java(1)のリファレンスページに記載されているオプションを 1 つ指定します。たとえば、\f3\-J\-Xms48m\fP と指定すると、スタートアップメモリーは 48M バイトに設定されます。 +.PP +\-show +.RS 4 +簡単なユーザー・インタフェースを表示します。完全指定のクラス名を入力して、Enterキーか「表示」ボタンを押し、\fIserialVersionUID\fRを表示します。 .RE - -.LP -.SH "注" -.LP -.LP -\f3serialver\fP コマンドは、指定されたクラスをその仮想マシン内に読み込んで初期化しますが、デフォルトではセキュリティーマネージャーの設定は行いません。信頼できないクラスとともに \f3serialver\fP を実行する場合には、次のオプションを使ってセキュリティーマネージャーを設定できます。 -.LP -.LP -\f2\-J\-Djava.security.manager\fP -.LP -.LP -また、必要であれば、次のオプションを使ってセキュリティーポリシーを指定できます。 -.LP -.LP -\f2\-J\-Djava.security.policy=<policy file>\fP -.LP -.SH "関連項目" -.LP -.LP -.na -\f2java.io.ObjectStreamClass\fP @ +.PP +\-J\fIoption\fR +.RS 4 +Java仮想マシンに\fIoption\fRを渡します。optionには、Javaアプリケーション起動ツールのリファレンス・ページに記載されているオプションを1つ指定します。たとえば、\fI\-J\-Xms48m\fRと指定すると、スタートアップ・メモリーは48MBに設定されます。java(1)を参照してください。 +.RE +.SH "注意" +.PP +\fIserialver\fRコマンドは、指定されたクラスをその仮想マシン内に読み込んで初期化しますが、デフォルトではセキュリティ・マネージャの設定は行いません。信頼できないクラスとともに\fIserialver\fRコマンドを実行する場合には、次のオプションを使用してセキュリティ・マネージャを設定できます。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-J\-Djava\&.security\&.manager .fi -http://java.sun.com/javase/6/docs/api/java/io/ObjectStreamClass.html -.LP - +.if n \{\ +.RE +.\} +.PP +必要であれば、次のオプションを使用してセキュリティ・ポリシーを指定できます。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-J\-Djava\&.security\&.policy=<policy file> +.fi +.if n \{\ +.RE +.\} +.SH "関連項目" +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +policytool(1) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +http://docs\&.oracle\&.com/javase/8/docs/api/java/io/ObjectStreamClass\&.htmlにある +\fIjava\&.io\&.ObjectStream\fRクラス記述 +.RE +.br +'pl 8.5i +'bp diff --git a/jdk/src/linux/doc/man/ja/servertool.1 b/jdk/src/linux/doc/man/ja/servertool.1 index 2e8fc6d97e3..71ab6b65ed1 100644 --- a/jdk/src/linux/doc/man/ja/servertool.1 +++ b/jdk/src/linux/doc/man/ja/servertool.1 @@ -1,113 +1,199 @@ -." 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 -." 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. -." -.TH servertool 1 "07 May 2011" - -.LP -.SH "名前" -servertool \- Java(TM) IDL サーバーツール -.LP -\f3servertool\fP はアプリケーションプログラマが、持続サーバーの登録、登録解除、起動、および停止を行うためのコマンド行インタフェースを提供します。 -.SH "形式" -.LP +'\" t +.\" Copyright (c) 2001, 2013, Oracle and/or its affiliates. All rights reserved. +.\" Title: servertool +.\" Language: English +.\" Date: 2013年11月21日 +.\" SectDesc: Java IDLおよびRMI-IIOPツール +.\" Software: JDK 8 +.\" Arch: 汎用 +.\" +.\" 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. +.\" +.pl 99999 +.TH "servertool" "1" "2013年11月21日" "JDK 8" "Java IDLおよびRMI-IIOPツール" +.\" ----------------------------------------------------------------- +.\" * Define some portability stuff +.\" ----------------------------------------------------------------- +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.\" http://bugs.debian.org/507673 +.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" ----------------------------------------------------------------- +.\" * set default formatting +.\" ----------------------------------------------------------------- +.\" disable hyphenation +.nh +.\" disable justification (adjust text to left margin only) +.ad l +.\" ----------------------------------------------------------------- +.\" * MAIN CONTENT STARTS HERE * +.\" ----------------------------------------------------------------- +.SH "NAME" +servertool \- 開発者が永続サーバーを登録、登録解除、起動、停止するための使いやすいユーザー・インタフェースを提供します。 +.SH "概要" +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -servertool \-ORBInitialPort \fP\f4nameserverport\fP\f3 \fP\f3options\fP\f3 [ \fP\f3commands\fP\f3 ] -.fl -\fP +\fIservertool\fR \-ORBInitialPort \fInameserverport\fR [ \fIoptions\fR ] [ \fIcommands \fR] .fi - -.LP -.LP -コマンドを入力しないで \f2servertool\fP を起動すると、コマンド行ツールとして \f2servertool >\fP プロンプトが表示されます。\f2servertool >\fP プロンプトにコマンドを入力します。 -.LP -.LP -コマンドを入力して \f2servertool\fP を起動すると、Java IDL サーバーツールが起動し、コマンドを実行して終了します。 -.LP -.LP -\f2\-ORBInitialPort\fP \f2nameserverport\fP オプションは\f3必須\fPです。 \f2nameserverport\fP の値には、\f2orbd\fP が実行され、着信要求を待機しているポートを指定する必要があります。Solaris ソフトウェアを使用する場合、1024 より小さいポート上でプロセスを開始するには、root ユーザーになる必要があります。このため、\f2nameserverport\fPとして 1024 以上のポート番号を使用することをお勧めします。 -.LP +.if n \{\ +.RE +.\} +.PP +\fIoptions\fR +.RS 4 +コマンドライン・オプション。オプションを参照してください。 +.RE +.PP +commands +.RS 4 +コマンドライン・コマンド。コマンドを参照してください。 +.RE +.PP +\fIservertool\fR\fIservertool >\fR\fIservertool >\fR .SH "説明" -.LP -.LP -\f2servertool\fP はアプリケーションプログラマが、持続サーバーの登録、登録解除、起動、および停止を行うためのコマンド行インタフェースを提供します。そのほかに、サーバーに関するさまざまな統計情報を取得するためのコマンドも提供します。 -.LP +.PP +\fIservertool\fRコマンドは、開発者が永続サーバーを登録、登録解除、起動、停止するためのコマンドライン・インタフェースを提供します。コマンドライン・コマンドを使用すると、サーバーに関する様々な統計情報を取得できます。コマンドを参照してください。 .SH "オプション" -.LP -.RS 3 -.TP 3 -\-ORBInitialHost nameserverhost -ネームサーバーが、実行され、着信要求を待機しているホストマシンを指定します。このオプションを指定しない場合、\f2nameserverhost\fP はデフォルトで \f2localhost\fP に設定されます。\f2orbd\fP と \f2servertool\fP が異なるマシン上で実行されている場合は、\f2orbd\fP が実行されているホストの名前と IP アドレスを指定する必要があります。 -.TP 3 -\-Joption -Java 仮想マシンに \f2option\fP を渡します。\f2option\fP には、java(1)のリファレンスページに記載されているオプションを 1 つ指定します。たとえば、\f3\-J\-Xms48m\fP と指定すると、スタートアップメモリーは 48M バイトに設定されます。\f3\-J\fP を使って背後の実行環境にオプションを渡すことはよく行われています。 +.PP +\-ORBInitialHost \fInameserverhost\fR +.RS 4 +このオプションは必須です。ネーム・サーバーが実行され、着信リクエストをリスニングするホスト・マシンを指定します。\fInameserverhost\fR値は、\fIorb\fRが実行され、リクエストをリスニングしているポートを指定する必要があります。このオプションを指定しない場合、値はデフォルトで\fIlocalhost\fRに設定されます。\fIorbd\fRと\fIservertool\fRが異なるマシン上で実行されている場合は、\fIorbd\fRが実行されているホストの名前またはIPアドレスを指定する必要があります。 +.sp +\fB注意:\fR +Oracle Solarisでは、1024より小さいポート上でプロセスを開始するには、rootユーザーになる必要があります。\fInameserverport\fR値には、1024以上のポート番号を使用することをお薦めします。 +.RE +.PP +\-J\fIoption\fR +.RS 4 +Java仮想マシンに\fIoption\fRを渡します。\fIoption\fRには、Javaアプリケーション起動ツールのリファレンス・ページに記載されているオプションを1つ指定します。たとえば、\fI\-J\-Xms48m\fRと指定すると、スタートアップ・メモリーは48MBに設定されます。java(1)を参照してください。 .RE - -.LP .SH "コマンド" -.LP -.RS 3 -.TP 3 -register \-server\ <server\ class\ name> \ \-classpath\ <classpath\ to\ server> [\ \-applicationName\ <application\ name> \-args\ <args\ to\ server> \-vmargs\ <flags\ to\ be\ passed\ to\ Java\ VM> \ ] -Object Request Broker Daemon (ORBD) に新規持続サーバーを登録します。サーバーが未登録の場合、登録して起動します。このコマンドによって、\f2\-server\fP オプションで識別されるサーバーのメインクラス内でインストールメソッドが呼び出されます。このインストールメソッドは、\f2public static void install(org.omg.CORBA.ORB)\fP になっている必要があります。インストールメソッドは、オプションであり、データベーススキーマの作成などの独自のサーバーインストール動作を開発者が指定できます。 -.TP 3 -unregister \-serverid\ <server\ id\ >\ | \-applicationName\ <application\ name> -サーバー ID またはアプリケーション名を使用して、ORBD のサーバーの登録を解除します。このコマンドによって、\f2\-server\fP オプションで識別されるサーバーのメインクラス内でアンインストールメソッドが呼び出されます。このアンインストールメソッドは、\f2public static void uninstall(org.omg.CORBA.ORB)\fP になっている必要があります。アンインストールメソッドは、オプションであり、インストールメソッドの動作の取り消しなどの独自のサーバーアンインストール動作を開発者が指定できます。 -.TP 3 -getserverid \-applicationName\ <application\ name> -アプリケーションに関連付けられているサーバー ID を返します。 -.TP 3 -list -ORBD に登録されているすべての持続サーバーに関する情報を一覧表示します。 -.TP 3 -listappnames -現在 ORBD に登録されているすべてのサーバーのアプリケーション名を一覧表示します。 -.TP 3 -listactive -ORDB によって起動され、現在実行されているすべての持続サーバーに関する情報を一覧表示します。 -.TP 3 -locate \-serverid\ <server\ id\ >\ | \-applicationName\ <application\ name> [\-endpointType\ <endpointType>\ ] -登録されたサーバーで作成したすべての ORB の特定の型について端点 (ポート) を検出します。サーバーが実行されていない場合、起動されます。端点の型が指定されていない場合、サーバーの ORB ごとに関連付けられている plain 型 または non\-protected 型の端点が返されます。 -.TP 3 -locateperorb \-serverid\ <server\ id\ >\ | \-applicationName\ <application\ name> [\-orbid\ <ORB\ name>\ ] -登録されたサーバーの特定の ORB で登録された端点 (ポート) を検出します。サーバーが実行されていない場合、起動されます。\f2orbid\fP が指定されていない場合は、デフォルト値の「""」が\f2orbid\fPに割り当てられます。ORB が空文字列の \f2orbid\fP で作成されている場合、登録したポートがすべて返されます。 -.TP 3 -orblist \-serverid\ <server\ id\ >\ | \-applicationName\ <application\ name> -サーバー上に定義された ORB の ORBId を一覧表示します。ORBId はサーバーで作成された ORB の文字列名です。サーバーが実行されていない場合、起動されます。 -.TP 3 -shutdown \-serverid\ <server\ id\ >\ | \-applicationName\ <application\ name> -ORBD に登録されたアクティブなサーバーを停止します。このコマンドの実行中に、\f2\-serverid\fP パラメータまたは \f2\-applicationName\fP パラメータで指定されたクラス内に定義された \f2shutdown()\fP メソッドも呼び出されてサーバープロセスを正しく停止します。 -.TP 3 -startup \-serverid\ <server\ id\ >\ | \-applicationName\ <application\ name> -ORBD に登録されたサーバーを起動します。サーバーが実行されていない場合は、このコマンドでサーバーを起動します。サーバーがすでに実行されている場合は、ユーザーにエラーメッセージが返されます。 -.TP 3 -help -サーバーがサーバーツールで使用できるすべてのコマンドを表示します。 -.TP 3 -quit -サーバーツールを終了します。 +.PP +\fIservertool\fRコマンドは、コマンドライン・コマンドを使用して、または使用せずに起動できます。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fIservertool\fRの起動時にコマンドを指定しなかった場合、コマンドライン・ツールにコマンド入力を求める\fIservertool\fRプロンプトが表示されます: +\fIservertool >\fR。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fIservertool\fRの起動時にコマンドを指定した場合、Java IDL Server Toolが起動してコマンドを実行し、終了します。 +.RE +.PP +register \-server \fIserver\-class\-name\fR \-classpath \fIclasspath\-to\-server\fR [ \-applicationName \fIapplication\-name\fR \-args \fIargs\-to\-server\fR \-vmargs \fIflags\-for\-JVM\fR ] +.RS 4 +Object Request Broker Daemon (ORBD)に新規永続サーバーを登録します。サーバーが未登録の場合、登録してアクティブ化します。このコマンドによって、\fI\-server\fRオプションで識別されるサーバーの\fIメイン\fR・クラス内でインストール・メソッドが呼び出されます。このインストール・メソッドは、\fIpublic static void install(org\&.omg\&.CORBA\&.ORB)\fRになっている必要があります。インストール・メソッドはオプションであり、開発者はデータベース・スキーマの作成など独自のサーバー・インストール動作を指定できます。 +.RE +.PP +unregister \-serverid \fIserver\-id\fR | \-applicationName \fIapplication\-name\fR +.RS 4 +サーバーIDまたはアプリケーション名で、サーバーをORBDから登録解除します。このコマンドによって、\fI\-server\fRオプションで識別されるサーバーの\fIメイン\fR・クラス内でアンインストール・メソッドが呼び出されます。 +\fIuninstall\fRメソッドは、\fIpublic static void uninstall(org\&.omg\&.CORBA\&.ORB)\fRになっている必要があります。\fIuninstall\fRメソッドはオプションであり、開発者は\fIinstall\fRメソッドの動作の取消など、独自のサーバー・アンインストール動作を指定できます。 +.RE +.PP +getserverid \-applicationName \fIapplication\-name\fR +.RS 4 +\fIapplication\-name\fR値に対応するサーバーIDを返します。 +.RE +.PP +list +.RS 4 +ORBDに登録されているすべての永続サーバーに関する情報を一覧表示します。 +.RE +.PP +listappnames +.RS 4 +現在ORBDに登録されているすべてのサーバーのアプリケーション名を一覧表示します。 +.RE +.PP +listactive +.RS 4 +ORBDによって起動され、現在実行されているすべての永続サーバーに関する情報を一覧表示します。 +.RE +.PP +locate \-serverid \fIserver\-id\fR | \-applicationName \fIapplication\-name\fR [ \-endpointType \fIendpointType\fR ] +.RS 4 +登録されたサーバーで作成したすべてのORBの特定のタイプについてエンドポイント(ポート)を検出します。サーバーが実行されていない場合、アクティブ化されます。\fIendpointType\fR値が指定されていない場合、サーバーのORBごとに関連付けられているplainタイプまたはnon\-protectedタイプのエンドポイントが返されます。 +.RE +.PP +locateperorb \-serverid \fIserver\-id\fR | \-applicationName \fIapplication\-name\fR [ \-orbid \fIORB\-name\fR ] +.RS 4 +登録されたサーバーの特定のObject Request Broker (ORB)で登録されたエンドポイント(ポート)を検出します。サーバーが実行されていない場合、アクティブ化されます。\fIorbid\fRが指定されていない場合、デフォルト値の\fI""\fRが\fIorbid\fRに割り当てられます。ORBが空文字列の\fIorbid\fRで作成されている場合、登録したポートがすべて返されます。 +.RE +.PP +orblist \-serverid \fIserver\-id\fR | \-applicationName \fIapplication\-name\fR +.RS 4 +サーバー上に定義されたORBの\fIORBId\fRを一覧表示します。\fIORBId\fRはサーバーで作成されたORBの文字列名です。サーバーが実行されていない場合、アクティブ化されます。 +.RE +.PP +shutdown \-serverid \fIserver\-id\fR | \-applicationName application\-name +.RS 4 +ORBDに登録されたアクティブなサーバーを停止します。このコマンドの実行中に、\fI\-serverid\fRパラメータまたは\fI\-applicationName\fRパラメータで指定されたクラス内に定義された\fIshutdown\fRメソッドも呼び出されてサーバー・プロセスを停止します。 +.RE +.PP +startup \-serverid \fIserver\-id\fR | \-applicationName application\-name +.RS 4 +ORBDに登録されたサーバーを起動またはアクティブ化します。サーバーが実行されていない場合、このコマンドがサーバーを起動します。サーバーがすでに実行されている場合は、エラー・メッセージが表示されます。 +.RE +.PP +help +.RS 4 +\fIservertool\fRコマンドを介してサーバーが利用できるすべてのコマンドをリストします。 +.RE +.PP +quit +.RS 4 +\fIservertool\fRコマンドを終了します。 .RE - -.LP .SH "関連項目" -.LP -orbd(1) +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +orbd(1) +.RE +.br +'pl 8.5i +'bp diff --git a/jdk/src/linux/doc/man/ja/tnameserv.1 b/jdk/src/linux/doc/man/ja/tnameserv.1 index 229c3af8300..7a924315f3b 100644 --- a/jdk/src/linux/doc/man/ja/tnameserv.1 +++ b/jdk/src/linux/doc/man/ja/tnameserv.1 @@ -1,495 +1,425 @@ -." Copyright (c) 1999, 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. -." -.TH tnameserv 1 "07 May 2011" - -.LP -.SH "名前" -Java IDL: 一時ネームサービス \- \f2tnameserv\fP -.LP -.LP -このドキュメントでは、Java IDL 一時ネームサービス \f2tnameserv\fP の使用方法について説明します。Java IDL には、Object Request Broker Daemon (ORBD) も含まれています。ORBD は、ブートストラップサービス、一時ネームサービス、\f3持続\fPネームサービス、およびサーバーマネージャーを含むデーモンプロセスです。Java IDL のすべてのチュートリアルでは ORBD を使用していますが、一時ネームサービスを使用する例では、\f2orbd\fP の代わりに \f2tnameserv\fP を使用できます。\f2orbd\fP ツールの詳細については、orbd の orbd(1)または -.na -\f2ORBD に含まれる Java IDL ネームサービス\fP @ +'\" t +.\" Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved. +.\" Title: tnameserv +.\" Language: English +.\" Date: 2013年11月21日 +.\" SectDesc: Java IDLおよびRMI-IIOPツール +.\" Software: JDK 8 +.\" Arch: 汎用 +.\" +.\" 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. +.\" +.pl 99999 +.TH "tnameserv" "1" "2013年11月21日" "JDK 8" "Java IDLおよびRMI-IIOPツール" +.\" ----------------------------------------------------------------- +.\" * Define some portability stuff +.\" ----------------------------------------------------------------- +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.\" http://bugs.debian.org/507673 +.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" ----------------------------------------------------------------- +.\" * set default formatting +.\" ----------------------------------------------------------------- +.\" disable hyphenation +.nh +.\" disable justification (adjust text to left margin only) +.ad l +.\" ----------------------------------------------------------------- +.\" * MAIN CONTENT STARTS HERE * +.\" ----------------------------------------------------------------- +.SH "NAME" +tnameserv \- インタフェース定義言語(IDL)。 +.SH "概要" +.sp +.if n \{\ +.RS 4 +.\} +.nf +\fItnameserve\fR \fI\-ORBInitialPort\fR [ \fInameserverport\fR ] .fi -http://java.sun.com/javase/6/docs/technotes/guides/idl/jidlNaming.htmlに関するトピックを参照してください。 -.LP -.LP -ここでは、以下の項目について説明します。 -.LP -.RS 3 -.TP 2 -o -Java\ IDL 一時ネームサービス -.TP 2 -o -Java\ IDL 一時ネームサービスの起動 -.TP 2 -o -Java\ IDL 一時ネームサービスの停止 -.TP 2 -o -サンプルクライアント: 名前空間へのオブジェクトの追加 -.TP 2 -o -サンプルクライアント: 名前空間のブラウズ +.if n \{\ .RE - -.LP -.SH "Java IDL 一時ネームサービス" -.LP -.LP -CORBA の COS (Common Object Services) ネームサービスは、ファイルシステムがファイルに対してディレクトリ構造を提供しているのと同じように、オブジェクト参照に対してツリー構造のディレクトリを提供します。Java IDL の一時ネームサービスである \f2tnameserv\fP は、COS ネームサービスの仕様を単純な形で実装したものです。 -.LP -.LP -オブジェクト参照は名前空間に名前で格納され、オブジェクト参照と名前のペアは、それぞれ「ネームバインディング」と呼ばれます。ネームバインディングは「ネーミングコンテキスト」に組み込むことができます。ネーミングコンテキストはそれ自体がネームバインディングであり、ファイルシステムのサブディレクトリと同じ編成機能を持ちます。すべてのバインディングは「初期ネーミングコンテキスト」に格納されます。名前空間において、初期ネーミングコンテキストは唯一の持続的バインディングです。それ以外のネーミングコンテキストは、Java IDL のネーミングサービスプロセスが停止し、再起動されると失われます。 -.LP -.LP -アプレットまたはアプリケーションから COS ネームサービスを使用するためには、その ORB はネームサービスが動作しているホストのポートを知っているか、そのネームサービスの文字列化された初期ネーミングコンテキストにアクセスできなければなりません。ネームサービスは、Java IDL のネームサービスでもその他の COS 準拠のネームサービスでもかまいません。 -.LP -.SH "Java IDL 一時ネームサービスの起動" -.LP -.LP -Java IDL ネームサービスは、ネームサービスを使用するアプリケーションまたはアプレットより前に起動しておく必要があります。Java\ IDL 製品をインストールすると、Java\ IDL ネームサービスを起動するスクリプト (Solaris: \f2tnameserv\fP) または実行可能ファイル (Windows NT: \f2tnameserv.exe\fP) が作成されます。バックグラウンドで動作するように、ネームサービスを起動してください。 -.LP -.LP -特に指定しない場合、Java IDL ネームサービスは、ORB の \f2resolve_initial_references()\fP メソッドと \f2list_initial_references()\fP メソッドの実装に使用するブートストラッププロトコルに対してポート 900 で待機します。 -.LP -.nf -\f3 -.fl - tnameserv \-ORBInitialPort \fP\f4nameserverport\fP\f3& -.fl -\fP -.fi - -.LP -.LP -ネームサーバーポートを指定しない場合、デフォルトでポート 900 が使用されます。Solaris ソフトウェアの実行時は、1024 より小さいポートでプロセスを開始する場合、root ユーザーになる必要があります。このため、1024 または 1024 よりも大きいポート番号を使用することをお勧めします。1050 のように別のポートを指定し、ネームサービスをバックグラウンドで実行するには、UNIX コマンドシェルで次のように入力します。 -.LP -.nf -\f3 -.fl - tnameserv \-ORBInitialPort 1050& -.fl -\fP -.fi - -.LP -.LP -Windows の MS\-DOS システムプロンプトでは、次のように入力します。 -.LP -.nf -\f3 -.fl - start tnameserv \-ORBInitialPort 1050 -.fl -\fP -.fi - -.LP -.LP -ネームサーバーのクライアントには、新しいポート番号を知らせる必要があります。このため、ORB オブジェクトの作成時に \f2org.omg.CORBA.ORBInitialPort\fP プロパティーに新しいポート番号を設定します。 -.LP -.SS -異なるマシン上でのクライアントとサーバーの実行 -.LP -.LP -Java IDL と RMI\-IIOP のほとんどのチュートリアルでは、ネームサービス、サーバー、およびクライアントはすべて開発用のマシン上で実行されます。実際に配備する場合には、クライアントとサーバーを、ネームサービスとは異なるホスト上で実行することが多くなります。 -.LP -.LP -クライアントとサーバーがネームサービスを見つけるには、クライアントとサーバーが、ネームサービスが実行されているポートの番号とホストを認識している必要があります。そのためには、クライアントとサーバーのファイル内の \f2org.omg.CORBA.ORBInitialPort\fP プロパティーと \f2org.omg.CORBA.ORBInitialHost\fP プロパティーをネームサービスが実行されているポートの番号とマシンの名前に設定します。この例は、 -.na -\f2「RMI\-IIOP を使った Hello World の例」に示されています。\fP @ -.fi -http://java.sun.com/javase/6/docs/technotes/guides/rmi\-iiop/rmiiiopexample.htmlコマンド行オプション \f2\-ORBInitialPort\fP \f2nameserverport#\fP と \f2\-ORBInitialHost\fP \f2nameserverhostname\fP を使用して、クライアントとサーバーに対してネームサービスを探す場所を指定することもできます。 -.na -\f2「Java IDL: 2 台のマシン上で実行する Hello World プログラム」\fP @ -.fi -http://java.sun.com/javase/6/docs/technotes/guides/idl/tutorial/jidl2machines.html には、コマンド行オプションを使用して指定する方法が示されています。 -.LP -.LP -たとえば、一時ネームサービス \f2tnameserv\fP が、ホスト \f2nameserverhost\fP のポート 1050 上で実行されているとします。さらに、クライアントがホスト \f2clienthost\fP 上で実行され、サーバーはホスト \f2serverhost\fP 上で実行されているとします。 -.LP -.RS 3 -.TP 2 -o -次のように、ホスト \f2nameserverhost\fP 上で \f2tnameserv\fP を起動します。 -.nf -\f3 -.fl - tnameserv \-ORBInitialPort 1050 -.fl - -.fl -\fP -.fi -.TP 2 -o -\f2serverhost\fP 上でサーバーを起動します。 -.nf -\f3 -.fl - java Server \-ORBInitialPort 1050 \-ORBInitialHost nameserverhost -.fl -\fP -.fi -.TP 2 -o -\f2clienthost\fP 上でクライアントを起動します。 -.nf -\f3 -.fl - java Client \-ORBInitialPort 1050 \-ORBInitialHost nameserverhost -.fl -\fP -.fi +.\} +.PP +\-ORBInitialPort \fInameserverport\fR +.RS 4 +ネーミング・サービスがORBの\fIresolve_initial_references\fRメソッドと\fIlist_initial_references\fRメソッドの実装に使用するブートストラップ・プロトコルをリスニングする初期ポートです。 .RE - -.LP -.SS -\-J オプション -.LP -このコマンド行オプションは、\f2tnameserve\fP とともに使用できます。 -.RS 3 -.TP 3 -\-Joption -Java 仮想マシンに \f2option\fP を渡します。\f2option\fP には、java(1)のリファレンスページに記載されているオプションを 1 つ指定します。たとえば、\f3\-J\-Xms48m\fP と指定すると、スタートアップメモリーは 48M バイトに設定されます。\f3\-J\fP を使って背後の実行環境にオプションを渡すことはよく行われています。 +.SH "説明" +.PP +Java IDLには、Object Request Broker Daemon (ORBD)が含まれます。ORBDは、ブートストラップ・サービス、一時ネーミング・サービス、永続ネーミング・サービスおよびサーバー・マネージャを含むデーモン・プロセスです。Java IDLのすべてのチュートリアルではORBDを使用していますが、一時ネーミング・サービスを使用する例では、\fIorbd\fRのかわりに\fItnameserv\fRを使用できます。 +.PP +http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/idl/jidlNaming\&.htmlにある +orbd(1)または「Naming Service」を参照してください。 +.PP +CORBAのCOS (Common Object Services)ネーミング・サービスは、ファイル・システムがファイルに対してディレクトリ構造を提供しているのと同じように、オブジェクト参照に対してツリー構造のディレクトリを提供します。Java IDLの一時ネーム・サービスである\fItnameserv\fRは、COSネーム・サービスの仕様を単純な形で実装したものです。 +.PP +オブジェクト参照はネームスペースに名前で格納され、オブジェクト参照と名前のペアは、それぞれネーム・バインディングと呼ばれます。ネーム・バインディングはネーミング・コンテキストに組み込むことができます。ネーミング・コンテキストはネーム・バインディングであり、ファイル・システムのサブディレクトリと同じ編成機能を持ちます。すべてのバインディングは初期ネーミング・コンテキストの下に格納されます。初期ネーミング・コンテキストは、ネームスペースの唯一の永続バインディングです。Java IDLネーミング・サービス・プロセスを停止して再起動すると、残りのネームスペースは失われます。 +.PP +アプレットまたはアプリケーションからCOSネーミング・サービスを使用するためには、そのORBがネーミング・サービスが動作しているホストのポートを知っているか、そのネーミング・サービスの初期ネーミング・コンテキスト文字列にアクセスできる必要があります。ネーム・サービスは、Java IDLのネーム・サービスでもその他のCOS準拠のネーム・サービスでもかまいません。 +.SS "ネーミング・サービスの起動" +.PP +Java IDLネーム・サービスは、ネーム・サービスを使用するアプリケーションまたはアプレットより前に起動しておく必要があります。Java IDL製品をインストールすると、Java IDLネーミング・サービスを起動するスクリプト(Oracle Solaris: +\fItnameserv\fR)または実行可能ファイル(Windows: +\fItnameserv\&.exe\fR)が作成されます。バックグラウンドで動作するように、ネーム・サービスを起動してください。 +.PP +特に指定しない場合、Java IDLネーミング・サービスは、ORBの\fIresolve_initial_references\fRメソッドと\fIlist_initial_references methods\fRメソッドの実装に使用するブートストラップ・プロトコルに対してポート900でリスニングします。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +tnameserv \-ORBInitialPort nameserverport& +.fi +.if n \{\ .RE - -.LP -.SH "Java IDL 一時ネームサービスの停止" -.LP -.LP -Java IDL ネームサービスを停止するには、Unix の場合は、\f2kill\fP などのオペレーティングシステムのコマンドを使い、Windows の場合は、\f2Ctrl\-C\fP を使います。ネームサービスを明示的に停止するまでは、呼び出し待機状態が続きます。なお、サービスを終了させると、Java IDL ネームサービスに登録されている名前は失われます。 -.LP -.SH "サンプルクライアント: 名前空間へのオブジェクトの追加" -.LP -.LP -次に示すサンプルプログラムは、名前を名前空間に追加する方法を示すものです。このサンプルプログラムは、このままの状態で完全に動作する一時ネームサービスクライアントで、次のような単純なツリーを作成するものです。 -.LP +.\} +.PP +ネーム・サーバー・ポートを指定しない場合、デフォルトでポート900が使用されます。Oracle Solarisソフトウェアの実行時、1024より小さいポートでプロセスを開始する場合は、rootユーザーになる必要があります。このため、1024以上のポート番号を使用することをお薦めします。1050のように別のポートを指定し、ネーム・サービスをバックグラウンドで実行するには、UNIXコマンド・シェルで次のように入力します。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -\fP\f3 -.fl - \fP\f4初期\fP\f3 -.fl - \fP\f4ネーミングコンテキスト\fP\f3 -.fl - / \\ -.fl - / \\ -.fl - plans \fP\f4Personal\fP\f3 -.fl - / \\ -.fl - / \\ -.fl - calendar schedule\fP -.fl +tnameserv \-ORBInitialPort 1050& .fi - -.LP -.LP -この例で、\f3plans\fP はオブジェクト参照、\f3Personal\fP は \f3calendar\fP と \f3schedule\fP の 2 つのオブジェクト参照を含むネーミングコンテキストです。 -.LP +.if n \{\ +.RE +.\} +.PP +WindowsのMS\-DOSシステム・プロンプトでは、次のように入力します。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -import java.util.Properties; -.fl -import org.omg.CORBA.*; -.fl -import org.omg.CosNaming.*; -.fl - -.fl -public class NameClient -.fl -{ -.fl - public static void main(String args[]) -.fl - { -.fl - try { -.fl -\fP +start tnameserv \-ORBInitialPort 1050 .fi - -.LP -前述の「Java IDL 一時ネームサービスの起動」で、ネームサーバーはポート 1050 を使用して起動しました。次のコードで、このポート番号をクライアントシステムに知らせます。 +.if n \{\ +.RE +.\} +.PP +ネーム・サーバーのクライアントには、新しいポート番号を知らせる必要があります。これを行うには、ORBオブジェクトの作成時に\fIorg\&.omg\&.CORBA\&.ORBInitialPort\fRプロパティに新しいポート番号を設定します。 +.SS "異なるホスト上でのサーバーとクライアントの実行" +.PP +Java IDLとRMI\-IIOPのほとんどのチュートリアルでは、ネーミング・サービス、サーバーおよびクライアントはすべて開発用のマシン上で実行されます。実際にデプロイメントする場合には、クライアントとサーバーを、ネーミング・サービスとは異なるホスト・マシン上で実行することが多くなります。 +.PP +クライアントとサーバーがネーム・サービスを見つけるには、クライアントとサーバーが、ネーム・サービスが実行されているポートの番号とホストを認識している必要があります。そのためには、クライアントとサーバーのファイル内の\fIorg\&.omg\&.CORBA\&.ORBInitialPort\fRプロパティと\fIorg\&.omg\&.CORBA\&.ORBInitialHost\fRプロパティをネーム・サービスが実行されているポートの番号とマシンの名前に設定します。この例は、「Getting Started Using RMI\-IIOP」 +(http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/rmi\-iiop/rmiiiopexample\&.html)に示されています +.PP +コマンドライン・オプション\fI\-ORBInitialPort nameserverport#\fRと\fI\-ORBInitialHost nameserverhostname\fRを使用して、クライアントとサーバーに対してネーミング・サービスを探す場所を指定することもできます。コマンドライン・オプションを使用してこれを行う方法の1つの例は、http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/idl/tutorial/jidl2machines\&.htmlの「Java IDL: The Hello World Example on Two Machines」 +を参照してください +.PP +たとえば、一時ネーム・サービス\fItnameserv\fRが、ホスト\fInameserverhost\fRのポート1050上で実行されているとします。さらに、クライアントがホスト\fIclienthost\fR上で実行され、サーバーはホスト\fIserverhost\fR上で実行されているとします。 +.PP +ホスト\fInameserverhost\fR上で\fItnameserv\fRを起動します。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl - Properties props = new Properties(); -.fl - props.put("org.omg.CORBA.ORBInitialPort", "1050"); -.fl - ORB orb = ORB.init(args, props); -.fl - -.fl -\fP +tnameserv \-ORBInitialPort 1050 .fi - -.LP -次のコードでは、初期ネーミングコンテキストを取得し、それを \f3ctx\fP に代入します。2 行目では、\f3ctx\fP をダミーのオブジェクト参照 \f3objref\fP にコピーします。この objref には、あとでさまざまな名前を割り当てて名前空間に追加します。 +.if n \{\ +.RE +.\} +.PP +\fIserverhost\fR上でサーバーを起動します。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl - NamingContext ctx = -.fl -NamingContextHelper.narrow(orb.resolve_initial_references("NameService")); -.fl - NamingContext objref = ctx; -.fl - -.fl -\fP +java Server \-ORBInitialPort 1050 \-ORBInitialHost nameserverhost .fi +.if n \{\ +.RE +.\} +.PP -.LP -次のコードでは、text 型の名前 plans を作成し、それをダミーのオブジェクト参照にバインドします。その後、rebind を使用して初期ネーミングコンテキストの下に \f2plans を追加しています\fP。 \f2rebind\fP メソッドを使用すれば、bind を使用した場合に発生する例外を発生させずに、 \f2このプログラムを何度も繰り返し実行できます\fP。 +\fIclienthost\fR上でクライアントを起動します。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl - NameComponent nc1 = new NameComponent("plans", "text"); -.fl - NameComponent[] name1 = {nc1}; -.fl - ctx.rebind(name1, objref); -.fl - System.out.println("plans rebind sucessful!"); -.fl - -.fl -\fP +java Client \-ORBInitialPort 1050 \-ORBInitialHost nameserverhost .fi - -.LP -次のコードでは、directory 型の Personal というネーミングコンテキストを作成します。その結果得られるオブジェクト参照 \f3ctx2\fP をこの名前にバインドし、初期ネーミングコンテキストに追加します。 +.if n \{\ +.RE +.\} +.SS "ネーミング・サービスの停止" +.PP +Java IDLネーミング・サービスを停止するには、Unixの場合は、\fIkill\fRなどのオペレーティング・システムのコマンドを使用し、Windowsの場合は、\fI[Ctrl]+[C]\fRキーを使用します。ネーミング・サービスを明示的に停止するまでは、呼出し待機状態が続きます。サービスを終了させると、Java IDLネーム・サービスに登録されている名前は失われます。 +.SH "オプション" +.PP +\-J\fIoption\fR +.RS 4 +Java仮想マシンに\fIoption\fRを渡します。\fIoption\fRには、Javaアプリケーション起動ツールのリファレンス・ページに記載されているオプションを1つ指定します。たとえば、\fI\-J\-Xms48m\fRと指定すると、スタートアップ・メモリーは48MBに設定されます。java(1)を参照してください。 +.RE +.SH "例" +.SS "ネームスペースへのオブジェクトの追加" +.PP +次の例では、ネームスペースに名前を追加する方法を示します。このサンプル・プログラムは、このままの状態で完全に動作する一時ネーム・サービス・クライアントで、次のような単純なツリーを作成するものです。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl - NameComponent nc2 = new NameComponent("Personal", "directory"); -.fl - NameComponent[] name2 = {nc2}; -.fl - NamingContext ctx2 = ctx.bind_new_context(name2); -.fl - System.out.println("new naming context added.."); -.fl - -.fl -\fP +Initial Naming Context + plans + Personal + calendar + schedule .fi - -.LP -残りのコードでは、ダミーのオブジェクト参照を schedule と calendar という名前でネーミングコンテキスト "Personal" (\f3ctx2\fP) にバインドします。 +.if n \{\ +.RE +.\} +.PP +この例で、\fIplans\fRはオブジェクト参照、\fIPersonal\fRは\fIcalendar\fRと\fIschedule\fRの2つのオブジェクト参照を含むネーミング・コンテキストです。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl - NameComponent nc3 = new NameComponent("schedule", "text"); -.fl - NameComponent[] name3 = {nc3}; -.fl - ctx2.rebind(name3, objref); -.fl - System.out.println("schedule rebind sucessful!"); -.fl - -.fl - NameComponent nc4 = new NameComponent("calender", "text"); -.fl - NameComponent[] name4 = {nc4}; -.fl - ctx2.rebind(name4, objref); -.fl - System.out.println("calender rebind sucessful!"); -.fl - -.fl - -.fl - } catch (Exception e) { -.fl - e.printStackTrace(System.err); -.fl - } -.fl - } -.fl -} -.fl -\fP -.fi - -.LP -.SH "サンプルクライアント: 名前空間のブラウズ" -.LP -.LP -次のサンプルプログラムでは、名前空間をブラウズする方法を示します。 -.LP -.nf -\f3 -.fl -import java.util.Properties; -.fl -import org.omg.CORBA.*; -.fl -import org.omg.CosNaming.*; -.fl - -.fl -public class NameClientList -.fl -{ -.fl - public static void main(String args[]) -.fl - { -.fl - try { -.fl -\fP -.fi - -.LP -前述の「Java IDL 一時ネームサービスの起動」で、ネームサーバーはポート 1050 を使用して起動しました。次のコードで、このポート番号をクライアントシステムに知らせます。 -.nf -\f3 -.fl - -.fl - Properties props = new Properties(); -.fl - props.put("org.omg.CORBA.ORBInitialPort", "1050"); -.fl - ORB orb = ORB.init(args, props); -.fl - -.fl - -.fl -\fP -.fi - -.LP -次のコードでは、初期ネーミングコンテキストを取得しています。 -.nf -\f3 -.fl - NamingContext nc = -.fl -NamingContextHelper.narrow(orb.resolve_initial_references("NameService")); -.fl - -.fl -\fP -.fi - -.LP -\f2list\fP メソッドは、ネーミングコンテキストに追加されているバインディングをリストします。この場合、最大 1000 個までのバインディングが初期ネーミングコンテキストから BindingListHolder に返されます。残りのバインディングは、BindingIteratorHolder に返されます。 -.nf -\f3 -.fl - BindingListHolder bl = new BindingListHolder(); -.fl - BindingIteratorHolder blIt= new BindingIteratorHolder(); -.fl - nc.list(1000, bl, blIt); -.fl - -.fl -\fP -.fi - -.LP -次のコードでは、返された BindingListHolder からバインディングの配列を取得します。バインディングがない場合は、プログラムは終了します。 -.nf -\f3 -.fl - Binding bindings[] = bl.value; -.fl - if (bindings.length == 0) return; -.fl - -.fl -\fP -.fi - -.LP -残りのコードでは、バインディングに対してループ処理を行い、名前を出力します。 -.nf -\f3 -.fl - for (int i=0; i < bindings.length; i++) { -.fl - -.fl - // get the object reference for each binding -.fl - org.omg.CORBA.Object obj = nc.resolve(bindings[i].binding_name); -.fl - String objStr = orb.object_to_string(obj); -.fl - int lastIx = bindings[i].binding_name.length\-1; -.fl - -.fl - // check to see if this is a naming context -.fl - if (bindings[i].binding_type == BindingType.ncontext) { -.fl - System.out.println( "Context: " + -.fl -bindings[i].binding_name[lastIx].id); -.fl - } else { -.fl - System.out.println("Object: " + -.fl -bindings[i].binding_name[lastIx].id); -.fl - } -.fl - } -.fl - -.fl - } catch (Exception e) { -.fl - e.printStackTrace(System.err); -.fl - } -.fl - } -.fl -} -.fl -\fP -.fi - -.LP +import java\&.util\&.Properties; +import org\&.omg\&.CORBA\&.*; +import org\&.omg\&.CosNaming\&.*; +public class NameClient { + + public static void main(String args[]) { + + try { +.fi +.if n \{\ +.RE +.\} +.PP +ネーミング・サービスの起動で、\fInameserver\fRはポート1050で起動されました。次のコードで、このポート番号をクライアント・システムに知らせます。 +.sp +.if n \{\ +.RS 4 +.\} +.nf + Properties props = new Properties(); + props\&.put("org\&.omg\&.CORBA\&.ORBInitialPort", "1050"); + ORB orb = ORB\&.init(args, props); +.fi +.if n \{\ +.RE +.\} +.PP +次のコードでは、初期ネーミング・コンテキストを取得し、それを\fIctx\fRに代入します。2行目では、\fIctx\fRをダミーのオブジェクト参照\fIobjref\fRにコピーします。このobjrefには、あとで様々な名前を割り当ててネームスペースに追加します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf + NamingContext ctx = + NamingContextHelper\&.narrow( + orb\&.resolve_initial_references("NameService")); + NamingContext objref = ctx; +.fi +.if n \{\ +.RE +.\} +.PP +次のコードでは、\fItext\fRタイプの名前\fIplans\fRを作成し、それをダミーのオブジェクト参照にバインドします。その後、\fIrebind\fRメソッドを使用して初期ネーミング・コンテキストの下に\fIplans\fRを追加しています。\fIrebind\fRメソッドを使用すれば、\fIbind\fRメソッドを使用した場合に発生する例外を発生させずに、このプログラムを何度も繰返し実行できます。 +.sp +.if n \{\ +.RS 4 +.\} +.nf + NameComponent nc1 = new NameComponent("plans", "text"); + NameComponent[] name1 = {nc1}; + ctx\&.rebind(name1, objref); + System\&.out\&.println("plans rebind successful!"); +.fi +.if n \{\ +.RE +.\} +.PP +次のコードでは、\fIdirectory\fRタイプの\fIPersonal\fRというネーミング・コンテキストを作成します。その結果得られるオブジェクト参照\fIctx2\fRを\fIname\fRにバインドし、初期ネーミング・コンテキストに追加します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf + NameComponent nc2 = new NameComponent("Personal", "directory"); + NameComponent[] name2 = {nc2}; + NamingContext ctx2 = ctx\&.bind_new_context(name2); + System\&.out\&.println("new naming context added\&.\&."); +.fi +.if n \{\ +.RE +.\} +.PP +残りのコードでは、ダミーのオブジェクト参照を\fIschedule\fRと\fIcalendar\fRという名前でネーミング・コンテキスト\fIPersonal\fR(\fIctx2\fR)にバインドします。 +.sp +.if n \{\ +.RS 4 +.\} +.nf + NameComponent nc3 = new NameComponent("schedule", "text"); + NameComponent[] name3 = {nc3}; + ctx2\&.rebind(name3, objref); + System\&.out\&.println("schedule rebind successful!"); + + NameComponent nc4 = new NameComponent("calender", "text"); + NameComponent[] name4 = {nc4}; + ctx2\&.rebind(name4, objref); + System\&.out\&.println("calender rebind successful!"); + } catch (Exception e) { + e\&.printStackTrace(System\&.err); + } + } +} +.fi +.if n \{\ +.RE +.\} +.SS "ネームスペースの参照" +.PP +次のサンプル・プログラムでは、ネームスペースをブラウズする方法を示します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +import java\&.util\&.Properties; +import org\&.omg\&.CORBA\&.*; +import org\&.omg\&.CosNaming\&.*; + +public class NameClientList { + + public static void main(String args[]) { + + try { +.fi +.if n \{\ +.RE +.\} +.PP +ネーミング・サービスの起動で、\fInameserver\fRはポート1050で起動されました。次のコードで、このポート番号をクライアント・システムに知らせます。 +.sp +.if n \{\ +.RS 4 +.\} +.nf + Properties props = new Properties(); + props\&.put("org\&.omg\&.CORBA\&.ORBInitialPort", "1050"); + ORB orb = ORB\&.init(args, props); +.fi +.if n \{\ +.RE +.\} +.PP +次のコードでは、初期ネーミング・コンテキストを取得しています。 +.sp +.if n \{\ +.RS 4 +.\} +.nf + NamingContext nc = + NamingContextHelper\&.narrow( + orb\&.resolve_initial_references("NameService")); +.fi +.if n \{\ +.RE +.\} +.PP +\fIlist\fRメソッドは、ネーミング・コンテキストのバインディングをリストします。この場合、最大1000個までのバインディングが初期ネーミング・コンテキストから\fIBindingListHolder\fRに返されます。残りのバインディングは、\fIBindingIteratorHolder\fRに返されます。 +.sp +.if n \{\ +.RS 4 +.\} +.nf + BindingListHolder bl = new BindingListHolder(); + BindingIteratorHolder blIt= new BindingIteratorHolder(); + nc\&.list(1000, bl, blIt); +.fi +.if n \{\ +.RE +.\} +.PP +次のコードでは、返された\fIBindingListHolder\fRからバインディングの配列を取得します。バインディングがない場合は、プログラムが終了します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf + Binding bindings[] = bl\&.value; + if (bindings\&.length == 0) return; +.fi +.if n \{\ +.RE +.\} +.PP +残りのコードでは、バインディングに対してループ処理を行い、名前を出力します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf + for (int i=0; i < bindings\&.length; i++) { + + // get the object reference for each binding + org\&.omg\&.CORBA\&.Object obj = nc\&.resolve(bindings[i]\&.binding_name); + String objStr = orb\&.object_to_string(obj); + int lastIx = bindings[i]\&.binding_name\&.length\-1; + + // check to see if this is a naming context + if (bindings[i]\&.binding_type == BindingType\&.ncontext) { + System\&.out\&.println("Context: " + + bindings[i]\&.binding_name[lastIx]\&.id); + } else { + System\&.out\&.println("Object: " + + bindings[i]\&.binding_name[lastIx]\&.id); + } + } + } catch (Exception e) { + e\&.printStackTrace(System\&.err) + } + } +} +.fi +.if n \{\ +.RE +.\} +.SH "関連項目" +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +orbd(1) +.RE +.br +'pl 8.5i +'bp diff --git a/jdk/src/linux/doc/man/ja/unpack200.1 b/jdk/src/linux/doc/man/ja/unpack200.1 index 96a85d8105e..0b940d494d2 100644 --- a/jdk/src/linux/doc/man/ja/unpack200.1 +++ b/jdk/src/linux/doc/man/ja/unpack200.1 @@ -1,178 +1,201 @@ -." Copyright (c) 2004, 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. -." -.TH unpack200 1 "07 May 2011" - -.LP -.SH "名前" -unpack200 \- JAR アンパックツール -.LP -.RS 3 -.TP 2 -o -形式 -.TP 2 -o -説明 -.TP 2 -o -オプション -.TP 2 -o -終了ステータス -.TP 2 -o -関連項目 -.TP 2 -o -注意事項 +'\" t +.\" Copyright (c) 2004, 2013, Oracle and/or its affiliates. All rights reserved. +.\" Title: unpack200 +.\" Language: English +.\" Date: 2013年11月21日 +.\" SectDesc: Javaデプロイメント・ツール +.\" Software: JDK 8 +.\" Arch: 汎用 +.\" +.\" 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. +.\" +.pl 99999 +.TH "unpack200" "1" "2013年11月21日" "JDK 8" "Javaデプロイメント・ツール" +.\" ----------------------------------------------------------------- +.\" * Define some portability stuff +.\" ----------------------------------------------------------------- +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.\" http://bugs.debian.org/507673 +.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" ----------------------------------------------------------------- +.\" * set default formatting +.\" ----------------------------------------------------------------- +.\" disable hyphenation +.nh +.\" disable justification (adjust text to left margin only) +.ad l +.\" ----------------------------------------------------------------- +.\" * MAIN CONTENT STARTS HERE * +.\" ----------------------------------------------------------------- +.SH "NAME" +unpack200 \- pack200(1)で作成されたパック・ファイルを、WebデプロイメントのためにJARファイルに変換します。 +.SH "概要" +.sp +.if n \{\ +.RS 4 +.\} +.nf +\fIunpack200\fR [ \fIoptions\fR ] input\-file \fIJAR\-file\fR +.fi +.if n \{\ .RE - -.LP -.SH "形式" -.LP -.LP -\f4unpack200\fP\f2 [ \fP\f2options\fP ] \f2input\-file\fP \f2JAR\-file\fP -.LP -.LP -オプションの指定順序に決まりはありません。コマンド行に指定された最後のオプションが、それ以前に指定されたすべてのオプションより優先されます。 -.LP -.RS 3 -.TP 3 -input\-file -入力ファイルの名前。入力ファイルは通常、pack200 gzip ファイルか pack200 ファイルです。このほかに、0 を設定すれば pack200(1) から作成された JAR ファイルも入力ファイルとして使用できます。この場合、入力ファイルの内容が Pack200 マーカーとともに出力 JAR ファイルにコピーされます。 -.TP 3 -JAR\-file -出力 JAR ファイル名。 +.\} +.PP +\fIoptions\fR +.RS 4 +コマンドライン・オプション。オプションを参照してください。 .RE - -.LP -.SH " 説明" -.LP -.LP -\f2unpack200\fP は、pack200(1) で作成されたパックファイルを JAR ファイルに変換する \f2ネイティブ実装\fPです。一般的な使用方法: -.LP -.LP -\f2% unpack200 myarchive.pack.gz myarchive.jar\fP -.LP -.LP -この例では、 \f2デフォルトの unpack200 設定で、myarchive.pack.gz\fP から \f2myarchive.jar\fP が \f2作成されます\fP 。 -.LP +.PP +\fIinput\-file\fR +.RS 4 +入力ファイルの名前。pack200 gzipファイルかpack200ファイルを指定できます。入力ファイルには、\fIpack200\fR(1)で作成されたJARファイルを指定することもできます(手間は\fI0\fRです)。この場合、入力ファイルの内容はPack2000マーカーで出力JARファイルにコピーされます。 +.RE +.PP +\fIJAR\-file\fR +.RS 4 +出力JARファイル名。 +.RE +.SH "説明" +.PP +\fIunpack200\fRコマンドは、\fIpack200\fR\fI(1)\fRで作成されたパック・ファイルをJARファイルに変換するネイティブ実装です。一般的な使用方法は次のとおりです。次の例では、デフォルトの\fIunpack200\fRコマンド設定で、\fImyarchive\&.jar\fRファイルが\fImyarchive\&.pack\&.gz\fRから作成されます。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +unpack200 myarchive\&.pack\&.gz myarchive\&.jar +.fi +.if n \{\ +.RE +.\} .SH "オプション" -.LP -.LP -\f4\-Hvalue \-\-deflate\-hint=\fP\f2value\fP -.LP -.LP -JAR ファイル内のすべてのエントリに \f2true\fP 、 \f2false\fP、 \f2keep\fP としてデフレーションを設定します。デフォルトモードは \f2keep\fP です。 \f2true\fP または \f2false 場合、\fPデフォルトの動作をオーバーライドして、出力 JAR ファイル内のすべてのエントリのデフレーションモードを設定します。 -.LP -.LP -\f4\-r \-\-remove\-pack\-file\fP -.LP -.LP -入力パックファイルを削除します。 -.LP -.LP -\f4\-v \-\-verbose\fP -.LP -.LP -最小限のメッセージを出力します。このオプションを複数指定すると、より長いメッセージが出力されます。 -.LP -.LP -\f4\-q \-\-quiet\fP -.LP -.LP -メッセージを表示せずに動作します。 -.LP -.LP -\f4\-lfilename \-\-log\-file=\fP\f2filename\fP -.LP -.LP -出力メッセージのログファイルを指定します。 -.LP -.LP -\f4\-? \-h \-\-help\fP -.LP -.LP -このコマンドに関するヘルプ情報を出力します。 -.LP -.LP -\f4\-V \-\-version\fP -.LP -.LP -このコマンドに関するバージョン情報を出力します。 -.LP -.LP -\f4\-J\fP\f2option\fP -.LP -.LP -unpack200 によって呼び出される Java 起動ツールに \f2オプション\fP を \f2渡します\fP。 -.LP -.SH "終了ステータス" -.LP -.LP -次の終了値が返されます。 -.LP -.LP -\f2\ 0\fP " 成功" -.LP -.LP -\f2>0\fP " エラー" -.LP -.SH "関連項目" -.LP -.RS 3 -.TP 2 -o -pack200(1) -.TP 2 -o -.na -\f2Java SE のドキュメント\fP @ -.fi -http://java.sun.com/javase/6/docs/index.html -.TP 2 -o -.na -\f2「Java 配備ガイド \- Pack200」\fP @ -.fi -http://java.sun.com/javase/6/docs/technotes/guides/deployment/deployment\-guide/pack200.html -.TP 2 -o -jar(1) \- Java Archive ツール」 -.TP 2 -o -jarsigner(1) \- JAR 署名および検証ツール」 -.TP 2 -o -\f2attributes(5)\fP のマニュアルページ +.PP +\-Hvalue \-\-deflate\-hint=\fIvalue\fR +.RS 4 +JARファイル内のすべてのエントリに\fItrue\fR、\fIfalse\fRまたは\fIkeep\fRのデフレーションを設定します。デフォルト・モードは\fIkeep\fRです。値が\fItrue\fRまたは\fIfalse\fR場合、\fI\-\-deflate=hint\fRオプションはデフォルトの動作をオーバーライドして、出力JARファイル内のすべてのエントリのデフレーション・モードが設定されます。 .RE - -.LP -.SH "注意事項" -.LP -.LP -このコマンドと \f2unpack(1) を\fP混同しないでください。これらは別製品です。 -.LP -.LP -SDK に付属する Java SE API 仕様との相違が見つかった場合には、仕様を優先してください。 -.LP - +.PP +\-r \-\-remove\-pack\-file +.RS 4 +入力パック・ファイルを削除します。 +.RE +.PP +\-v \-\-verbose +.RS 4 +最小限のメッセージが表示されます。このオプションの複数の仕様には、より詳細なメッセージが表示されます。 +.RE +.PP +\-q \-\-quiet +.RS 4 +メッセージを表示せずに動作するように指定します。 +.RE +.PP +\-lfilename \-\-log\-file=\fIfilename\fR +.RS 4 +出力メッセージが記録されるログ・ファイルを指定します。 +.RE +.PP +\-? \-h \-\-help +.RS 4 +\fIunpack200\fRコマンドに関するヘルプ情報を出力します。 +.RE +.PP +\-V \-\-version +.RS 4 +\fIunpack200\fRコマンドに関するバージョン情報を出力します。 +.RE +.PP +\-J\fIoption\fR +.RS 4 +Java仮想マシンにoptionを渡します。\fIoption\fRには、Javaアプリケーション起動ツールのリファレンス・ページに記載されているオプションを1つ指定します。たとえば、\fI\-J\-Xms48m\fRと指定すると、スタートアップ・メモリーは48MBに設定されます。java(1)を参照してください。 +.RE +.SH "注意" +.PP +このコマンドと\fIunpack\fRコマンドを混同しないでください。これらは別製品です。 +.PP +JDKに付属するJava SE API仕様との相違が見つかった場合には、仕様を優先してください。 +.SH "終了ステータス" +.PP +次の終了値が返されます: 正常終了の場合は0、エラーが発生した場合は0より大きい値。 +.SH "関連項目" +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +pack200(1) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +jar(1) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +jarsigner(1) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +「Pack200 and Compression」 +(http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/deployment/deployment\-guide/pack200\&.html) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +「Java SE Technical Documentation」 +(http://docs\&.oracle\&.com/javase/) +.RE +.br +'pl 8.5i +'bp diff --git a/jdk/src/linux/doc/man/ja/wsgen.1 b/jdk/src/linux/doc/man/ja/wsgen.1 index c85556ee16f..0f50de81de0 100644 --- a/jdk/src/linux/doc/man/ja/wsgen.1 +++ b/jdk/src/linux/doc/man/ja/wsgen.1 @@ -1,656 +1,228 @@ -." Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. -." DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -." -." This code is free software; you can redistribute it and/or modify it -." under the terms of the GNU General Public License version 2 only, as -." published by the Free Software Foundation. -." -." 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. -." -.TH wsgen 1 "07 May 2011" -.SH "名前" -wsgen \- XML Web Services (JAX\-WS) 2.0 のための Java(TM) API -.LP -\f3仕様バージョン:\fP 2.1 -.br -\f3実装バージョン:\fP 2.1.1 -.LP -\f2wsgen\fP ツールは、JAX\-WS Web サービスで使用される JAX\-WS ポータブルアーティファクトを生成します。このツールは、Web サービスのエンドポイント実装クラス (SEI) を読み取り、Web サービスの配備と呼び出しに必要なすべてのアーティファクトを生成します。 +'\" t +.\" Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved. +.\" Title: wsgen +.\" Language: English +.\" Date: 2013年11月21日 +.\" SectDesc: Java Webサービス・ツール +.\" Software: JDK 8 +.\" Arch: 汎用 +.\" +.\" 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. +.\" +.pl 99999 +.TH "wsgen" "1" "2013年11月21日" "JDK 8" "Java Webサービス・ツール" +.\" ----------------------------------------------------------------- +.\" * Define some portability stuff +.\" ----------------------------------------------------------------- +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.\" http://bugs.debian.org/507673 +.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" ----------------------------------------------------------------- +.\" * set default formatting +.\" ----------------------------------------------------------------- +.\" disable hyphenation +.nh +.\" disable justification (adjust text to left margin only) +.ad l +.\" ----------------------------------------------------------------- +.\" * MAIN CONTENT STARTS HERE * +.\" ----------------------------------------------------------------- +.SH "NAME" +wsgen \- Webサービスのエンドポイント実装(SEI)クラスを読取り、Webサービスのデプロイメントと呼出しに必要なすべてのアーティファクトを生成します。 .SH "概要" -.LP -\f2wsgen\fP ツールは、JAX\-WS Web サービスで使用される JAX\-WS ポータブルアーティファクトを生成します。このツールは、Web サービスのエンドポイントクラスを読み取り、Web サービスの配備と呼び出しに必要なすべてのアーティファクトを生成します。JAXWS 2.1.1 RI には wsgen Ant タスクも用意されています。詳細は、 -.na -\f2Wsgen Ant タスク\fP @ +.sp +.if n \{\ +.RS 4 +.\} +.nf +\fIwsgen\fR [ \fIoptions\fR ] \fISEI\fR .fi -https://jax\-ws.dev.java.net/nonav/2.1.1/docs/wsgenant.htmlを参照してください。 -.LP -.SH "wsgen の起動" -.RS 3 -.TP 2 -o -\f3Solaris/Linux\fP -.RS 3 -.TP 2 -* -\f2export JAXWS_HOME=/pathto/jaxws\-ri\fP -.TP 2 -* -\f2$JAXWS_HOME/bin/wsgen.sh \-help\fP +.if n \{\ .RE -.TP 2 -o -\f3Windows\fP -.RS 3 -.TP 2 -* -\f2set JAXWS_HOME=c:\\pathto\\jaxws\-ri\fP -.TP 2 -* -\f2%JAXWS_HOME%\\bin\\wsgen.bat \-help\fP +.\} +.PP +\fIoptions\fR +.RS 4 +コマンドライン・オプション。オプションを参照してください。 .RE +.PP +\fISEI\fR +.RS 4 +読み取るWebサービスのエンドポイント実装クラス(SEI)です。 .RE - -.LP -.SH "構文" +.SH "説明" +.PP +\fIwsgen\fRコマンドは、JAX\-WS Webサービスで使用されるJAX\-WSポータブル・アーティファクトを生成します。このツールは、Webサービスのエンドポイント・クラスを読取り、Webサービスのデプロイメントと呼出しに必要なすべてのアーティファクトを生成します。JAXWS 2\&.1\&.1 RIでは\fIwsgen\fR +Antタスクも提供されます。 +http://jax\-ws\&.java\&.net/nonav/2\&.1\&.1/docs/wsgenant\&.htmlのJAX\-WS (wsgen)ページのToolsタブを参照してください。 +.PP +\fIwsgen\fRコマンドを起動するには、次を行います。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -wsgen [options] <SEI>\fP -.br -\f3 -.fl -\fP +export JAXWS_HOME=/pathto/jaxws\-ri +$JAXWS_HOME/bin/wsgen\&.sh \-help .fi -.LP -次の表に、 \f2wsgen\fP のオプションを示します。 -.br -.LP -.TS -.if \n+(b.=1 .nr d. \n(.c-\n(c.-1 -.de 35 -.ps \n(.s -.vs \n(.vu -.in \n(.iu -.if \n(.u .fi -.if \n(.j .ad -.if \n(.j=0 .na -.. -.nf -.nr #~ 0 -.if n .nr #~ 0.6n -.ds #d .d -.if \(ts\n(.z\(ts\(ts .ds #d nl -.fc -.nr 33 \n(.s -.rm 80 81 -.nr 34 \n(.lu -.eo -.am 81 -.br -.di a+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -入力クラスファイルの検索場所を指定します -.br -.di -.nr a| \n(dn -.nr a- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di b+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -\-classpath <path> \f2と同じです\fP -.br -.di -.nr b| \n(dn -.nr b- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di c+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -生成される出力ファイルを格納する場所を指定します -.br -.di -.nr c| \n(dn -.nr c- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di d+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -ベンダー拡張 (仕様で規定されていない機能) を許可します。拡張を使用すると、アプリケーションの移植性が失われたり、ほかの実装との相互運用が行えなくなる可性があります -.br -.di -.nr d| \n(dn -.nr d- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di e+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -ヘルプを表示します -.br -.di -.nr e| \n(dn -.nr e- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di f+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -生成されたファイルを保持します -.br -.di -.nr f| \n(dn -.nr f- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di g+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -常に \-wsdl オプションと組み合わせて使用します。WSDL などの生成されたリソースファイルの格納場所を指定します -.br -.di -.nr g| \n(dn -.nr g- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di h+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -生成されるソースファイルを格納する場所を指定する -.br -.di -.nr h| \n(dn -.nr h- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di i+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -コンパイラが実行している処理に関するメッセージを出力します -.br -.di -.nr i| \n(dn -.nr i- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di j+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -バージョン情報を出力します。このオプションを使用した場合、バージョン情報が出力されるだけです。通常の処理は実行されません。 -.br -.di -.nr j| \n(dn -.nr j- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di k+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -デフォルトでは \f2wsgen\fP は WSDL ファイルを生成しません。このフラグは省略可能ですが、指定した場合は \f2wsgen\fP が WSDL ファイルを生成するようになります。このフラグは通常、エンドポイントの配備前に開発者が WSDL を参照できるようにするためだけに使用されます。 \f2protocol\fP は省略可能であり、wsdl:binding で使用すべきプロトコルを指定するために \f2使用されます\fP。有効なプロトコルは次のとおりです。 \f2soap1.1\fP と \f2Xsoap1.2\fP。デフォルトは \f2soap1.1\fP です。 \f2Xsoap1.2\fP は標準ではないため、 \f2\-extension\fP オプションと組み合わせないと使用できません。 -.br -.di -.nr k| \n(dn -.nr k- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di l+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -常に \f2\-wsdl\fP オプションと組み合わせて使用します。WSDL 内で生成されるべき \f2wsdl:service\fP の名前を指定するために使用します。例: \f2\-servicename "{http://mynamespace/}MyService"\fP -.br -.di -.nr l| \n(dn -.nr l- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di m+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -常に \f2\-wsdl\fP オプションと組み合わせて使用します。WSDL 内で生成されるべき \f2wsdl:port\fP の名前を指定するために使用します。例: \f2\-portname "{http://mynamespace/}MyPort"\fP -.br -.br -.di -.nr m| \n(dn -.nr m- \n(dl -.. -.ec \ -.35 -.nf -.ll \n(34u -.nr 80 0 -.nr 38 \w\f3オプション\fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w\f4\-classpath <path>\fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w\f4\-cp <path>\fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w\f4\-d <directory>\fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w\f4\-extension\fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w\f4\-help\fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w\f4\-keep\fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w\f4\-r <directory>\fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w\f4\-s <directory>\fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w\f4\-verbose\fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w\f4\-version\fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w\f4\-wsdl[:protocol]\fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w\f4\-servicename <name>\fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w\f4\-portname <name>\fP -.if \n(80<\n(38 .nr 80 \n(38 -.80 -.rm 80 -.nr 81 0 -.nr 38 \w\f3説明\fP -.if \n(81<\n(38 .nr 81 \n(38 -.81 -.rm 81 -.nr 38 \n(a- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(b- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(c- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(d- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(e- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(f- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(g- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(h- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(i- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(j- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(k- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(l- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(m- -.if \n(81<\n(38 .nr 81 \n(38 -.35 -.nf -.ll \n(34u -.nr 38 1n -.nr 79 0 -.nr 40 \n(79+(0*\n(38) -.nr 80 +\n(40 -.nr 41 \n(80+(3*\n(38) -.nr 81 +\n(41 -.nr TW \n(81 -.if t .if \n(TW>\n(.li .tm Table at line 137 file Input is too wide - \n(TW units -.fc   -.nr #T 0-1 -.nr #a 0-1 -.eo -.de T# -.ds #d .d -.if \(ts\n(.z\(ts\(ts .ds #d nl -.mk ## -.nr ## -1v -.ls 1 -.ls -.. -.ec -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f3オプション\fP\h'|\n(41u'\f3説明\fP -.ne \n(a|u+\n(.Vu -.if (\n(a|+\n(#^-1v)>\n(#- .nr #- +(\n(a|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f4\-classpath <path>\fP\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.a+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(b|u+\n(.Vu -.if (\n(b|+\n(#^-1v)>\n(#- .nr #- +(\n(b|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f4\-cp <path>\fP\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.b+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(c|u+\n(.Vu -.if (\n(c|+\n(#^-1v)>\n(#- .nr #- +(\n(c|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f4\-d <directory>\fP\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.c+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(d|u+\n(.Vu -.if (\n(d|+\n(#^-1v)>\n(#- .nr #- +(\n(d|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f4\-extension\fP\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.d+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(e|u+\n(.Vu -.if (\n(e|+\n(#^-1v)>\n(#- .nr #- +(\n(e|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f4\-help\fP\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.e+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(f|u+\n(.Vu -.if (\n(f|+\n(#^-1v)>\n(#- .nr #- +(\n(f|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f4\-keep\fP\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.f+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(g|u+\n(.Vu -.if (\n(g|+\n(#^-1v)>\n(#- .nr #- +(\n(g|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f4\-r <directory>\fP\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.g+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(h|u+\n(.Vu -.if (\n(h|+\n(#^-1v)>\n(#- .nr #- +(\n(h|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f4\-s <directory>\fP\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.h+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(i|u+\n(.Vu -.if (\n(i|+\n(#^-1v)>\n(#- .nr #- +(\n(i|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f4\-verbose\fP\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.i+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(j|u+\n(.Vu -.if (\n(j|+\n(#^-1v)>\n(#- .nr #- +(\n(j|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f4\-version\fP\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.j+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(k|u+\n(.Vu -.if (\n(k|+\n(#^-1v)>\n(#- .nr #- +(\n(k|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f4\-wsdl[:protocol]\fP\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.k+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(l|u+\n(.Vu -.if (\n(l|+\n(#^-1v)>\n(#- .nr #- +(\n(l|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f4\-servicename <name>\fP\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.l+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(m|u+\n(.Vu -.if (\n(m|+\n(#^-1v)>\n(#- .nr #- +(\n(m|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f4\-portname <name>\fP\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.m+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.fc -.nr T. 1 -.T# 1 -.35 -.rm a+ -.rm b+ -.rm c+ -.rm d+ -.rm e+ -.rm f+ -.rm g+ -.rm h+ -.rm i+ -.rm j+ -.rm k+ -.rm l+ -.rm m+ -.TE -.if \n-(b.=0 .nr c. \n(.c-\n(d.-57 - -.LP +.if n \{\ +.RE +.\} +.SH "オプション" +.PP +\-classpath \fIpath\fR +.RS 4 +入力クラス・ファイルの場所。 +.RE +.PP +\-cp \fIpath\fR +.RS 4 +入力クラス・ファイルの場所。 +.RE +.PP +\-d \fIdirectory\fR +.RS 4 +生成された出力ファイルを格納する場所。 +.RE +.PP +\-extension +.RS 4 +ベンダー拡張を使用可能にします。拡張を使用すると、アプリケーションの移植性が失われたり、他の実装と連携できなくなる可能性があります。 +.RE +.PP +\-help +.RS 4 +\fIwsgen\fRコマンドに関するヘルプ・メッセージを表示します。 +.RE +.PP +\-keep +.RS 4 +生成されたファイルを保存します。 +.RE +.PP +\-r \fIdirectory\fR +.RS 4 +このオプションを\fI\-wsdl\fRオプションとともに使用して、WSDLなど生成されたリソース・ファイルを配置する場所を指定します。 +.RE +.PP +\-s \fIdirectory\fR +.RS 4 +生成されたソース・ファイルを格納する場所。 +.RE +.PP +\-verbose +.RS 4 +コンパイラ・メッセージを表示します。 +.RE +.PP +\-version +.RS 4 +リリース情報を出力します。 +.RE +.PP +\-wsdl [ :protocol ] +.RS 4 +エンドポイントをデプロイする前に確認するWSDLファイルを生成するオプション・コマンド。WSDLファイルには、サービスを呼び出す方法、パラメータに必要な値、返されるデータ構造についてのコンピュータで読取り可能な記述が含まれます。 +.sp +デフォルトでは\fIwsgen\fRコマンドはWSDLファイルを生成しません。\fIprotocol\fR値は省略可能であり、WSDLバインディング(\fIwsdl:binding\fR)で使用するプロトコルを指定するために使用されます。有効なプロトコルは、\fIsoap1\&.1\fRと\fIXsoap1\&.2\fRです。デフォルトは\fIsoap1\&.1\fRです。\fIXsoap1\&.2\fRプロトコルは標準ではないため、\fI\-extension\fRオプションとともにのみ使用可能です。 +.RE +.PP +\-servicename \fIname\fR +.RS 4 +\fI\-wsdl\fRオプションとともにのみ使用して、WSDLで生成される特定のWSDLサービス(\fIwsdl:service\fR)名を指定します。例: +\fI\-servicename "{http://mynamespace/}MyService"\fR。 +.RE +.PP +\-portname \fIname\fR +.RS 4 +\fI\-wsdl\fRオプションとともにのみ使用して、WSDLで生成される特定のWSDLポート(\fIwsdl:port\fR)名を指定します。例: +\fI\-portname "{http://mynamespace/}MyPort"\fR。 +.RE .SH "例" +.PP +次の例では、Stockディレクトリ内に\fI@WebService\fR注釈を持つ\fIStockService\fRのラッパー・クラスを生成します。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -\fP\f3wsgen \-d stock \-cp myclasspath stock.StockService\fP -.fl +wsgen \-d stock \-cp myclasspath stock\&.StockService .fi -.LP -\f3stock\fP ディレクトリ内に @WebService 注釈が付けられた、StockService に必要なラッパークラスが生成されます。 +.if n \{\ +.RE +.\} +.PP +次の例では、SOAP 1\&.1 WSDLおよび\fI@WebService\fR注釈を持つ\fIstock\&.StockService\fRクラスのスキーマを生成します。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -\fP\f3wsgen \-wsdl \-d stock \-cp myclasspath stock.StockService\fP -.fl +wsgen \-wsdl \-d stock \-cp myclasspath stock\&.StockService .fi -.LP -SOAP 1.1 WSDL と、@WebService 注釈が付けられた Java クラス stock.StockService のスキーマが生成されます。 +.if n \{\ +.RE +.\} +.PP +次の例では、SOAP 1\&.2 WSDLを生成します。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -\fP\f3wsgen \-wsdl:Xsoap1.2 \-d stock \-cp myclasspath stock.StockService\fP -.fl +wsgen \-wsdl:Xsoap1\&.2 \-d stock \-cp myclasspath stock\&.StockService .fi -.LP -SOAP 1.2 WSDL が生成されます。 -.LP -サービスを配備するときに JAXWS ランタイムによって自動的に WSDL が生成されるため、開発時に WSDL を生成する必要はありません。 +.if n \{\ +.RE +.\} +.PP +\fB注意:\fR +サービスのデプロイ時にJAXWS実行時環境でWSDLが生成されるため、開発時にWSDLを生成する必要はありません。 +.SH "関連項目" +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +wsimport(1) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +http://jax\-ws\&.java\&.net/nonav/2\&.1\&.1/docs/wsgenant\&.htmlの +JAX\-WS (wsgen)ページのToolsタブを参照してください。 +.RE +.br +'pl 8.5i +'bp diff --git a/jdk/src/linux/doc/man/ja/wsimport.1 b/jdk/src/linux/doc/man/ja/wsimport.1 index a09204e86ba..feff3f3acca 100644 --- a/jdk/src/linux/doc/man/ja/wsimport.1 +++ b/jdk/src/linux/doc/man/ja/wsimport.1 @@ -1,1066 +1,332 @@ -." Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. -." DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -." -." This code is free software; you can redistribute it and/or modify it -." under the terms of the GNU General Public License version 2 only, as -." published by the Free Software Foundation. -." -." 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. -." -.TH wsimport 1 "07 May 2011" -.SH "名前" -wsimport \- XML Web Services (JAX\-WS) 2.0 のための Java(TM) API -.LP -\f3仕様バージョン:\fP 2.1 -.br -\f3実装バージョン:\fP 2.1.1 -.br +'\" t +.\" Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved. +.\" Title: wsimport +.\" Language: English +.\" Date: 2013年11月21日 +.\" SectDesc: Java Webサービス・ツール +.\" Software: JDK 8 +.\" Arch: 汎用 +.\" +.\" 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. +.\" +.pl 99999 +.TH "wsimport" "1" "2013年11月21日" "JDK 8" "Java Webサービス・ツール" +.\" ----------------------------------------------------------------- +.\" * Define some portability stuff +.\" ----------------------------------------------------------------- +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.\" http://bugs.debian.org/507673 +.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" ----------------------------------------------------------------- +.\" * set default formatting +.\" ----------------------------------------------------------------- +.\" disable hyphenation +.nh +.\" disable justification (adjust text to left margin only) +.ad l +.\" ----------------------------------------------------------------- +.\" * MAIN CONTENT STARTS HERE * +.\" ----------------------------------------------------------------- +.SH "NAME" +wsimport \- Webアプリケーション・アーカイブ(WAR)ファイルにパッケージできるJAX\-WSポータブル・アーティファクトを生成して、Antタスクを指定します。 .SH "概要" -.LP -\f2wsimport\fP ツールは、次のような JAX\-WS ポータブルアーティファクトを生成します。 -.RS 3 -.TP 2 -o -サービスエンドポイントインタフェース (SEI) -.TP 2 -o -サービス -.TP 2 -o -wsdl:fault からマップされる例外クラス (存在する場合) -.TP 2 -o -応答 wsdl:message から派生する非同期応答 Bean (存在する場合) -.TP 2 -o -JAX\-B が生成する値タイプ (スキーマの型からマップされた Java クラス) -.RE -.LP -これらのアーティファクトは、WSDL ドキュメント、スキーマドキュメント、およびエンドポイント実装とともに WAR ファイル内にパッケージ化して配備することができます。また、wsimport Ant タスクも用意されています。 -.na -\f2wsimport Ant タスク\fP @ -.fi -https://jax\-ws.dev.java.net/nonav/2.1.1/docs/wsimportant.htmlを参照してください。 -.br - -.LP -.SH "wsimport の起動" -.RS 3 -.TP 2 -o -\f3Solaris/Linux\fP -.RS 3 -.TP 2 -* -\f2/bin/wsimport.sh \-help\fP -.RE -.TP 2 -o -\f3Windows\fP -.RS 3 -.TP 2 -* -\f2\\bin\\wsimport.bat \-help\fP -.RE -.RE - -.LP -.SH "構文" +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -wsimport [options] <wsdl> -.fl -\fP +\fIwsimport\fR [ \fIoptions\fR ] \fIwsdl\fR .fi -.LP -次の表に、 \f2wsimport\fP のオプションを示します。 -.LP -.TS -.if \n+(b.=1 .nr d. \n(.c-\n(c.-1 -.de 35 -.ps \n(.s -.vs \n(.vu -.in \n(.iu -.if \n(.u .fi -.if \n(.j .ad -.if \n(.j=0 .na -.. +.if n \{\ +.RE +.\} +.PP +\fIoptions\fR +.RS 4 +コマンドライン・オプション。オプションを参照してください。 +.RE +.PP +\fIwsdl\fR +.RS 4 +Webサービスを呼び出す方法、パラメータに必要な値、返されるデータ構造についてのコンピュータで読取り可能な記述が含まれまるファイルです。 +.RE +.SH "説明" +.PP +\fIwsimport\fRコマンドは、次のJAX\-WSポータブル・アーティファクトを生成します。これらのアーティファクトは、デプロイするWSDLおよびスキーマ・ドキュメントおよびエンドポイント実装とともに、WARファイルにパッケージできます。\fIwsimport\fRコマンドでは\fIwsimport\fR +Antタスクも提供されます。 +http://jax\-ws\&.java\&.net/nonav/2\&.1\&.1/docs/wsimportant\&.htmlのWsimport Ant TaskページのToolsタブを参照してください。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +サービス・エンドポイント・インタフェース(SEI) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +サービス +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +例外クラスは\fIwsdl:fault\fRからマップされます(存在する場合) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +非同期レスポンスBeanはレスポンス\fIwsdl:message\fRから派生します(存在する場合) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +JAXBが生成する値タイプ(スキーマのタイプからマップされたJavaクラス) +.RE +.PP +\fIwsgen\fRコマンドを起動するには、次を行います。 +.PP +\fBOracle Solaris/Linux\fR: +.sp +.if n \{\ +.RS 4 +.\} .nf -.nr #~ 0 -.if n .nr #~ 0.6n -.ds #d .d -.if \(ts\n(.z\(ts\(ts .ds #d nl -.fc -.nr 33 \n(.s -.rm 80 81 -.nr 34 \n(.lu -.eo -.am 81 -.br -.di a+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -生成される出力ファイルを格納する場所を指定します -.br -.di -.nr a| \n(dn -.nr a- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di b+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -外部の JAX\-WS または JAXB バインディングファイルを指定します ( \f2<file>\fP ごとに \f2\-b\fP が必要となる) -.br -.di -.nr b| \n(dn -.nr b- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di c+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -このオプションを JAXB スキーマコンパイラに渡します -.br -.di -.nr c| \n(dn -.nr c- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di d+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -外部エンティティー参照を解決するためのカタログファイルを指定します。TR9401、XCatalog、OASIS XML Catalog の各形式がサポートされています。 -.na -\f2カタログ\fP @ +/bin/wsimport\&.sh \-help .fi -https://jax\-ws.dev.java.net/nonav/2.1.1/docs/catalog\-support.htmlのドキュメントをお読みになり、\f3カタログ\fPのサンプルを参照してください。 -.br -.di -.nr d| \n(dn -.nr d- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di e+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -ベンダー拡張 (仕様で規定されていない機能) を許可します。拡張を使用すると、アプリケーションの移植性が失われたり、ほかの実装との相互運用が行えなくなる可能性があります -.br -.di -.nr e| \n(dn -.nr e- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di f+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -ヘルプを表示します -.br -.di -.nr f| \n(dn -.nr f- \n(dl -.. -.ec \ -.eo -.am 80 -.br -.di g+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(80 .ll \n(80u -.in 0 -\f3\-httpproxy:<host>:<port> \fP -.br -.di -.nr g| \n(dn -.nr g- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di h+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -HTTP プロキシサーバーを指定します (デフォルトのポートは 8080) -.br -.di -.nr h| \n(dn -.nr h- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di i+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 +.if n \{\ +.RE +.\} +.PP +\fBWindows\fRの場合: +.sp +.if n \{\ +.RS 4 +.\} +.nf +\ebin\ewsimport\&.bat \-help +.fi +.if n \{\ +.RE +.\} +.SH "オプション" +.PP +\-d \fIdirectory\fR +.RS 4 +生成される出力ファイルを格納する場所を指定します。 +.RE +.PP +\-b \fIpath\fR +.RS 4 +外部JAX\-WSまたはJAXBバインディング・ファイルを指定します。\fI\-b\fRオプションで複数のJAX\-WSおよびJAXBバインディング・ファイルを指定できます。これらのファイルを使用して、パッケージ名、Bean名などをカスタマイズできます。JAX\-WSおよびJAXBバインディング・ファイルの詳細は、 +http://jax\-ws\&.java\&.net/nonav/2\&.1\&.1/docs/wsimportant\&.htmlのWSDL CustomizationのUsers Guideタブを参照してください +.RE +.PP +\-B \fIjaxbOption\fR +.RS 4 +JAXBスキーマ・コンパイラに\fIjaxbOption\fRオプションを渡します。 +.RE +.PP +\-catalog +.RS 4 +外部エンティティ参照を解決するカタログ・ファイルを指定します。\fI\-catalog\fRオプションは、TR9401、XCatalog、OASIS XML Catalogの各形式をサポートしています。http://jax\-ws\&.java\&.net/nonav/2\&.1\&.1/docs/catalog\-support\&.htmlの +Catalog SupportページのUsers Guideタブを参照してください。 +.RE +.PP +\-extension +.RS 4 +ベンダー拡張を使用可能にします。拡張を使用すると、アプリケーションの移植性が失われたり、他の実装と連携できなくなる可能性があります。 +.RE +.PP +\-help +.RS 4 +\fIwsimport\fRコマンドに関するヘルプ・メッセージを表示します。 +.RE +.PP +\-httpproxy: \fIhost\fR:\fIport\fR +.RS 4 +HTTPプロキシ・サーバーを指定します。デフォルトは8080です。 +.RE +.PP +\-keep +.RS 4 生成されたファイルを保持します -.br -.di -.nr i| \n(dn -.nr i- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di j+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -このコマンド行オプション経由でターゲットパッケージを指定した場合、その指定内容は、パッケージ名に対するすべての WSDL/スキーマバインディングカスタマイズや、 仕様で規定されているデフォルトのパッケージ名アルゴリズムよりも優先されます -.br -.di -.nr j| \n(dn -.nr j- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di k+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -生成されるソースファイルを格納する場所を指定する -.br -.di -.nr k| \n(dn -.nr k- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di l+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -コンパイラが実行している処理に関するメッセージを出力します -.br -.di -.nr l| \n(dn -.nr l- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di m+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -バージョン情報を出力します -.br -.di -.nr m| \n(dn -.nr m- \n(dl -.. -.ec \ -.eo -.am 80 -.br -.di n+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(80 .ll \n(80u -.in 0 -\f3\-wsdllocation <location>\fP -.br -.di -.nr n| \n(dn -.nr n- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di o+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -\f2@WebServiceClient.wsdlLocation\fP 値 -.br -.di -.nr o| \n(dn -.nr o- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di p+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -指定された JAX\-WS 仕様バージョンに従ってコードを生成します。バージョン 2.0 では、JAX\-WS 2.0 仕様に準拠したコードを生成します。 -.br -.di -.nr p| \n(dn -.nr p- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di q+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -wsimport 出力を抑制します -.br -.di -.nr q| \n(dn -.nr q- \n(dl -.. -.ec \ -.35 -.nf -.ll \n(34u -.nr 80 0 -.nr 38 \w\f3オプション\fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w\f3\-d <directory> \fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w\f3\-b <path> \fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w\f3\-B <jaxbOption>\fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w\f3\-catalog\fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w\f3\-extension \fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w\f3\-help \fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w\f3\-keep \fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w\f3\-p \fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w\f3\-s <directory> \fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w\f3\-verbose \fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w\f3\-version \fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w\f3\-target \fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w\f3\-quiet \fP -.if \n(80<\n(38 .nr 80 \n(38 -.80 -.rm 80 -.nr 38 \n(g- -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \n(n- -.if \n(80<\n(38 .nr 80 \n(38 -.nr 81 0 -.nr 38 \w\f3説明\fP -.if \n(81<\n(38 .nr 81 \n(38 -.81 -.rm 81 -.nr 38 \n(a- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(b- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(c- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(d- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(e- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(f- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(h- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(i- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(j- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(k- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(l- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(m- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(o- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(p- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(q- -.if \n(81<\n(38 .nr 81 \n(38 -.35 -.nf -.ll \n(34u -.nr 38 1n -.nr 79 0 -.nr 40 \n(79+(0*\n(38) -.nr 80 +\n(40 -.nr 41 \n(80+(3*\n(38) -.nr 81 +\n(41 -.nr TW \n(81 -.if t .if \n(TW>\n(.li .tm Table at line 163 file Input is too wide - \n(TW units -.fc   -.nr #T 0-1 -.nr #a 0-1 -.eo -.de T# -.ds #d .d -.if \(ts\n(.z\(ts\(ts .ds #d nl -.mk ## -.nr ## -1v -.ls 1 -.ls -.. -.ec -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f3オプション\fP\h'|\n(41u'\f3説明\fP -.ne \n(a|u+\n(.Vu -.if (\n(a|+\n(#^-1v)>\n(#- .nr #- +(\n(a|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f3\-d <directory> \fP\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.a+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(b|u+\n(.Vu -.if (\n(b|+\n(#^-1v)>\n(#- .nr #- +(\n(b|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f3\-b <path> \fP\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.b+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(c|u+\n(.Vu -.if (\n(c|+\n(#^-1v)>\n(#- .nr #- +(\n(c|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f3\-B <jaxbOption>\fP\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.c+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(d|u+\n(.Vu -.if (\n(d|+\n(#^-1v)>\n(#- .nr #- +(\n(d|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f3\-catalog\fP\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.d+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(e|u+\n(.Vu -.if (\n(e|+\n(#^-1v)>\n(#- .nr #- +(\n(e|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f3\-extension \fP\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.e+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(f|u+\n(.Vu -.if (\n(f|+\n(#^-1v)>\n(#- .nr #- +(\n(f|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f3\-help \fP\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.f+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(g|u+\n(.Vu -.ne \n(h|u+\n(.Vu -.if (\n(g|+\n(#^-1v)>\n(#- .nr #- +(\n(g|+\n(#^-\n(#--1v) -.if (\n(h|+\n(#^-1v)>\n(#- .nr #- +(\n(h|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(40u -.in +\n(37u -.g+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.h+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(i|u+\n(.Vu -.if (\n(i|+\n(#^-1v)>\n(#- .nr #- +(\n(i|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f3\-keep \fP\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.i+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(j|u+\n(.Vu -.if (\n(j|+\n(#^-1v)>\n(#- .nr #- +(\n(j|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f3\-p \fP\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.j+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(k|u+\n(.Vu -.if (\n(k|+\n(#^-1v)>\n(#- .nr #- +(\n(k|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f3\-s <directory> \fP\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.k+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(l|u+\n(.Vu -.if (\n(l|+\n(#^-1v)>\n(#- .nr #- +(\n(l|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f3\-verbose \fP\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.l+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(m|u+\n(.Vu -.if (\n(m|+\n(#^-1v)>\n(#- .nr #- +(\n(m|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f3\-version \fP\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.m+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(n|u+\n(.Vu -.ne \n(o|u+\n(.Vu -.if (\n(n|+\n(#^-1v)>\n(#- .nr #- +(\n(n|+\n(#^-\n(#--1v) -.if (\n(o|+\n(#^-1v)>\n(#- .nr #- +(\n(o|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(40u -.in +\n(37u -.n+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.o+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(p|u+\n(.Vu -.if (\n(p|+\n(#^-1v)>\n(#- .nr #- +(\n(p|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f3\-target \fP\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.p+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(q|u+\n(.Vu -.if (\n(q|+\n(#^-1v)>\n(#- .nr #- +(\n(q|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f3\-quiet \fP\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.q+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.fc -.nr T. 1 -.T# 1 -.35 -.rm a+ -.rm b+ -.rm c+ -.rm d+ -.rm e+ -.rm f+ -.rm g+ -.rm h+ -.rm i+ -.rm j+ -.rm k+ -.rm l+ -.rm m+ -.rm n+ -.rm o+ -.rm p+ -.rm q+ -.TE -.if \n-(b.=0 .nr c. \n(.c-\n(d.-72 -.LP -\-b オプションを使って、複数の JAX\-WS および JAXB バインディングファイル \f2を指定できます。\fP これらのファイルを使って、パッケージ名や Bean 名など、さまざまなカスタマイズが可能です。JAX\-WS および JAXB バインディングファイルの詳細は、 -.na -\f2カスタマイズマニュアル\fP @ -.fi -https://jax\-ws.dev.java.net/nonav/2.1.1/docs/customizations.htmlを参照してください。 -.LP -次の表に、 \f2wsimport\fP の非標準オプションを示します。 -.LP -.TS -.if \n+(b.=1 .nr d. \n(.c-\n(c.-1 -.de 35 -.ps \n(.s -.vs \n(.vu -.in \n(.iu -.if \n(.u .fi -.if \n(.j .ad -.if \n(.j=0 .na -.. -.nf -.nr #~ 0 -.if n .nr #~ 0.6n -.ds #d .d -.if \(ts\n(.z\(ts\(ts .ds #d nl -.fc -.nr 33 \n(.s -.rm 80 81 -.nr 34 \n(.lu -.eo -.am 81 -.br -.di a+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -要求または応答メッセージにバインドされないヘッダーを Java メソッドのパラメータにマップします -.br -.di -.nr a| \n(dn -.nr a- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di b+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -認証情報を含むファイルを指定する WSDL URI です。この URI の形式は次のとおりです http://\f2<ユーザー名>\fP:\f2<パスワード>\fP@\f2<ホスト名>\fP/\f2<Web サービス名>\fP?wsdl -.br -.di -.nr b| \n(dn -.nr b- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di c+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 +.RE +.PP +\-p \fIname\fR +.RS 4 +ターゲット・パッケージ\fIname\fRを指定して、WSDLおよびスキーマ・バインディングのカスタマイズ、および仕様部で定義されたデフォルトのアルゴリズムをオーバーライドします。 +.RE +.PP +\-s \fIdirectory\fR +.RS 4 +生成されるソース・ファイルを格納する場所を指定します +.RE +.PP +\-verbose +.RS 4 +コンパイラ・メッセージを表示します。 +.RE +.PP +\-version +.RS 4 +リリース情報を出力します。 +.RE +.PP +\-wsdllocation \fIlocation\fR +.RS 4 +\fI@WebServiceClient\&.wsdlLocation\fRの値を指定します。 +.RE +.PP +\-target +.RS 4 +指定されたJAX\-WS仕様バージョンに従って、コードを生成します。バージョン2\&.0では、JAX\-WS 2\&.0仕様に準拠したコードを生成します。 +.RE +.PP +\-quiet +.RS 4 +\fIwsimport\fRコマンド出力を抑制します。 +.RE +.PP +\fI\-b\fRオプションを使用して、複数の\fIJAX\-WS\fRおよび\fIJAXB\fRバインディング・ファイルを指定できます。これらのファイルを使用して、パッケージ名やBean名など、様々なものをカスタマイズできます。\fIJAX\-WS\fRおよび\fIJAXB\fRバインディング・ファイルの詳細は、 +https://jax\-ws\&.dev\&.java\&.net/nonav/2\&.1\&.1/docs/customizations\&.htmlのJAXBタブを参照してください +.SH "非標準オプション" +.PP +\-XadditionalHeaders +.RS 4 +リクエストまたはレスポンス・メッセージにバインドされないヘッダーをJavaメソッドのパラメータにマップします +.RE +.PP +\-Xauthfile \fIfile\fR +.RS 4 +認証情報を含むファイルを指定するWSDL URIです。このURIの形式は次のとおりです。 +.sp +http://\fIuser\-name\fR:\fIpassword\fR@\fIhost\-name\fR/\fIweb\-service\-name\fR>?wsdl +.RE +.PP +\-Xdebug +.RS 4 デバッグ情報を出力します -.br -.di -.nr c| \n(dn -.nr c- \n(dl -.. -.ec \ -.eo -.am 80 -.br -.di d+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(80 .ll \n(80u -.in 0 -\f3\-Xno\-addressing\-databinding\fP -.br -.di -.nr d| \n(dn -.nr d- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di e+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -W3C \f2EndpointReferenceType\fP と Java のバインディングを有効にします -.br -.di -.nr e| \n(dn -.nr e- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di f+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -生成された Java ファイルをコンパイルしません -.br -.di -.nr f| \n(dn -.nr f- \n(dl -.. -.ec \ -.35 -.nf -.ll \n(34u -.nr 80 0 -.nr 38 \w\f3オプション\fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w\f3\-XadditionalHeaders\fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w\f3\-Xauthfile <file>\fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w\f3\-Xdebug\fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w\f3\-Xnocompile\fP -.if \n(80<\n(38 .nr 80 \n(38 -.80 -.rm 80 -.nr 38 \n(d- -.if \n(80<\n(38 .nr 80 \n(38 -.nr 81 0 -.nr 38 \w\f3説明\fP -.if \n(81<\n(38 .nr 81 \n(38 -.81 -.rm 81 -.nr 38 \n(a- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(b- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(c- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(e- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(f- -.if \n(81<\n(38 .nr 81 \n(38 -.35 -.nf -.ll \n(34u -.nr 38 1n -.nr 79 0 -.nr 40 \n(79+(0*\n(38) -.nr 80 +\n(40 -.nr 41 \n(80+(3*\n(38) -.nr 81 +\n(41 -.nr TW \n(81 -.if t .if \n(TW>\n(.li .tm Table at line 199 file Input is too wide - \n(TW units -.fc   -.nr #T 0-1 -.nr #a 0-1 -.eo -.de T# -.ds #d .d -.if \(ts\n(.z\(ts\(ts .ds #d nl -.mk ## -.nr ## -1v -.ls 1 -.ls -.. -.ec -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f3オプション\fP\h'|\n(41u'\f3説明\fP -.ne \n(a|u+\n(.Vu -.if (\n(a|+\n(#^-1v)>\n(#- .nr #- +(\n(a|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f3\-XadditionalHeaders\fP\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.a+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(b|u+\n(.Vu -.if (\n(b|+\n(#^-1v)>\n(#- .nr #- +(\n(b|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f3\-Xauthfile <file>\fP\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.b+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(c|u+\n(.Vu -.if (\n(c|+\n(#^-1v)>\n(#- .nr #- +(\n(c|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f3\-Xdebug\fP\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.c+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(d|u+\n(.Vu -.ne \n(e|u+\n(.Vu -.if (\n(d|+\n(#^-1v)>\n(#- .nr #- +(\n(d|+\n(#^-\n(#--1v) -.if (\n(e|+\n(#^-1v)>\n(#- .nr #- +(\n(e|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(40u -.in +\n(37u -.d+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.e+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(f|u+\n(.Vu -.if (\n(f|+\n(#^-1v)>\n(#- .nr #- +(\n(f|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f3\-Xnocompile\fP\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.f+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.fc -.nr T. 1 -.T# 1 -.35 -.rm a+ -.rm b+ -.rm c+ -.rm d+ -.rm e+ -.rm f+ -.TE -.if \n-(b.=0 .nr c. \n(.c-\n(d.-26 - -.LP +.RE +.PP +\-Xno\-addressing\-databinding +.RS 4 +W3C EndpointReferenceTypeとJavaのバインディングを有効にします。 +.RE +.PP +\-Xnocompile +.RS 4 +生成されたJavaファイルをコンパイルしません +.RE .SH "例" +.PP +次の例では、Javaアーティファクトを生成し、\fIhttp://stockquote\&.example\&.com/quote?wsdl\fRをインポートしてアーティファクトをコンパイルします。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -\fP\f3wsimport \-p stockquote http://stockquote.example.com/quote?wsdl\fP -.fl +wsimport \-p stockquote http://stockquote\&.example\&.com/quote?wsdl .fi -.LP -Java アーティファクトを生成し、 \f2http://stockquote.example.com/quote?wsdl\fP をインポートしてその Java アーティファクトをコンパイルします +.if n \{\ +.RE +.\} +.SH "関連項目" +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +wsgen(1) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +http://jax\-ws\&.java\&.net/nonav/2\&.1\&.1/docs/wsimportant\&.htmlの +Wsimport Ant TaskページのToolsタブ +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +http://jax\-ws\&.java\&.net/nonav/2\&.1\&.1/docs/catalog\-support\&.htmlの +Catalog SupportページのUsers Guideタブ +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +http://jax\-ws\&.java\&.net/nonav/2\&.1\&.1/docs/wsimportant\&.htmlの +WSDL CustomizationページのUsers Guideタブ +.RE .br - +'pl 8.5i +'bp diff --git a/jdk/src/linux/doc/man/ja/xjc.1 b/jdk/src/linux/doc/man/ja/xjc.1 index 0b3baf84f0a..17a0efdd9ed 100644 --- a/jdk/src/linux/doc/man/ja/xjc.1 +++ b/jdk/src/linux/doc/man/ja/xjc.1 @@ -1,298 +1,342 @@ -." Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. -." DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -." -." This code is free software; you can redistribute it and/or modify it -." under the terms of the GNU General Public License version 2 only, as -." published by the Free Software Foundation. -." -." 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. -." -.TH xjc 1 "07 May 2011" - -.LP -.ad c -.SH "名前" -xjc \- XML バインドのための Java(TM) アーキテクチャー -.br -バインディングコンパイラ -.LP -\f3仕様バージョン:\fP 2.1 -.br -\f3リファレンス実装 (RI) バージョン:\fP 2.1.3 .ad l - -.LP -.SH "xjc の起動" -.LP -.LP -バインディングコンパイラを起動するには、使用するプラットフォームに応じた bin ディレクトリ内の \f2xjc\fP シェルスクリプト \f2を\fP 使用します。また、バインディングコンパイラを実行するための Ant タスクも用意されています。 -.na -\f2xjc を Ant とともに使用する\fP @ -.fi -https://jaxb.dev.java.net/nonav/2.1.3/docs/xjcTask.htmlための手順を参照してください。 -.LP -.LP -\f2% xjc \-help\fP -.LP -.SS -出力 -.LP +'\" t +.\" Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved. +.\" Title: xjc +.\" Language: English +.\" Date: 2013年11月21日 +.\" SectDesc: Java Webサービス・ツール +.\" Software: JDK 8 +.\" Arch: 汎用 +.\" +.\" 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. +.\" +.pl 99999 +.TH "xjc" "1" "2013年11月21日" "JDK 8" "Java Webサービス・ツール" +.\" ----------------------------------------------------------------- +.\" * Define some portability stuff +.\" ----------------------------------------------------------------- +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.\" http://bugs.debian.org/507673 +.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" ----------------------------------------------------------------- +.\" * set default formatting +.\" ----------------------------------------------------------------- +.\" disable hyphenation +.nh +.\" disable justification (adjust text to left margin only) +.ad l +.\" ----------------------------------------------------------------- +.\" * MAIN CONTENT STARTS HERE * +.\" ----------------------------------------------------------------- +.SH "NAME" +xjc \- XMLスキーマ・ファイルを完全注釈付きのJavaクラスにコンパイルします。 +.SH "概要" +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -Usage: xjc [\-options ...] <schema file/URL/dir/jar> ... [\-b <bindinfo>] ... -.fl -If dir is specified, all schema files in it will be compiled. -.fl -If jar is specified, /META\-INF/sun\-jaxb.episode binding file will be compiled. -.fl -Options: -.fl - \-nv : do not perform strict validation of the input schema(s) -.fl - \-extension : allow vendor extensions \- do not strictly follow the Compatibility Rules and App E.2 from the JAXB Spec -.fl - \-b <file/dir> : specify external bindings files (each <file> must have its own \-b); if a directory is given, **/*.xjb is searched -.fl - \-d <dir> : generated files will go into this directory -.fl - \-p <pkg> : specifies the target package -.fl - \-httpproxy <proxy> : set HTTP/HTTPS proxy; format is [user[:password]@]proxyHost:proxyPort -.fl - \-httpproxyfile <f> : works like \-httpproxy but takes the argument in a file to protect password -.fl - \-classpath <arg> : specify where to find user class files -.fl - \-catalog <file> : specify catalog files to resolve external entity references; support TR9401, XCatalog, and OASIS XML Catalog format -.fl - \-readOnly : generated files will be in read\-only mode -.fl - \-npa : suppress generation of package level annotations (**/package\-info.java) -.fl - \-no\-header : suppress generation of a file header with timestamp -.fl - \-target 2.0 : behave like XJC 2.0 and generate code that doesnt use any 2.1 features -.fl - \-xmlschema : treat input as W3C XML Schema (default) -.fl - \-relaxng : treat input as RELAX NG (experimental,unsupported) -.fl - \-relaxng\-compact : treat input as RELAX NG compact syntax (experimental,unsupported) -.fl - \-dtd : treat input as XML DTD (experimental,unsupported) -.fl - \-wsdl : treat input as WSDL and compile schemas inside it (experimental,unsupported) -.fl - \-verbose : be extra verbose -.fl - \-quiet : suppress compiler output -.fl - \-help : display this help message -.fl - \-version : display version information -.fl - -.fl - -.fl -Extensions: -.fl - \-Xlocator : enable source location support for generated code -.fl - \-Xsync\-methods : generate accessor methods with the 'synchronized' keyword -.fl - \-mark\-generated : mark the generated code as @javax.annotation.Generated -.fl - \-episode <FILE> : generate the episode file for separate compilation -.fl -\fP +\fIxjc\fR [ \fIoptions\fR ] \fIschema\fR \fIfile/URL/dir/jar\fR \&.\&.\&. [\fI\-b\fR \fIbindinfo\fR ] \&.\&.\&. .fi - -.LP +.if n \{\ +.RE +.\} +.PP +\fIoptions\fR +.RS 4 +コマンドライン・オプション。オプションを参照してください。 +.RE +.PP +schema \fIfile/URL/dir/jar \&.\&.\&.\fR +.RS 4 +XMLスキーマ・ファイルの場所。\fIdir\fRが指定されている場合は、すべてのスキーマ・ファイルがコンパイルされます。\fIjar\fRが指定されている場合は、\fI/META\-INF/sun\-jaxb\&.episode\fRバインディング・ファイルがコンパイルされます。 +.RE +.PP +\-b \fIbindinfo\fR +.RS 4 +バインディング・ファイルの場所。 +.RE +.SH "説明" +.PP +プラットフォームのbinディレクトリにある適切な\fIxjc\fRシェル・スクリプトを使用して、バインディング・コンパイラを起動します。バインディング・コンパイラを実行するAntタスクもあります。http://jaxb\&.java\&.net/nonav/2\&.1\&.3/docs/xjcTask\&.htmlの +Using the XJC with Antを参照してください .SH "オプション" -.LP -.RS 3 -.TP 3 -\-nv -デフォルトでは、XJC バインディングコンパイラは、ソーススキーマを処理する前に厳密な検証を実行します。このオプションを使用すると、厳密なスキーマ検証を無効にします。これは、バインディングコンパイラが検証を一切実行しないということではありません。より厳密でない検証を実行するということです。 -.TP 3 -\-extension -デフォルトでは、XJC バインディングコンパイラは、JAXB 仕様の「Compatibility」の章で説明されている規則を厳密に強制します。付録 E.2 には、JAXB v1.0 で完全にはサポートされていない一連の W3C XML スキーマ機能が定義されています。場合によっては、このスイッチで有効になる「\-extension」モードでそれらの機能が使用できるかもしれません。また、デフォルトの厳密なモードでは、仕様に定義されているバインディングカスタマイズのみが使用できます。「\-extension」スイッチを指定すれば、JAXB Vendor Extension を使用できます。 -.TP 3 -\-b <file> -処理する外部バインディングファイルを 1 つまたは複数指定します。(バインディングファイルごとに \f2「\-b」\fP スイッチを指定する必要があります。) 外部バインディングファイルの構文は非常に柔軟です。複数のスキーマのカスタマイズが含まれる 1 つのバインディングファイルを使用したり、それらのカスタマイズを複数のバインディングファイルに分割したりできます。次に例を示します。 \f2xjc schema1.xsd schema2.xsd schema3.xsd \-b bindings123.xjb\fP -.br -\f2xjc schema1.xsd schema2.xsd schema3.xsd \-b bindings1.xjb \-b bindings2.xjb \-b bindings3.xjb\fP また、コマンド行にスキーマファイルとバインディングファイルを指定する順番は任意です。 -.TP 3 -\-d <dir> -デフォルトでは、XJC バインディングコンパイラは、Java コンテンツクラスを現在のディレクトリに生成します。このオプションを使用すると、代替出力ディレクトリを指定できます。出力ディレクトリはあらかじめ存在している必要があります。XJC バインディングコンパイラは、このディレクトリを自動的に作成しません。 -.TP 3 -\-p <pkg> -このコマンド行オプション経由でターゲットパッケージを指定した場合、その指定内容は、パッケージ名に対するすべてのバインディングカスタマイズや、仕様で規定されているデフォルトのパッケージ名アルゴリズムよりも優先されます。 -.TP 3 -\-httpproxy <proxy> -HTTP/HTTPS プロキシを指定します。形式は [user[:password]@]proxyHost[:proxyPort] です。従来の \f2\-host\fP および \f2\-port\fP は、下位互換性のためにリファレンス実装でもサポートされていますが、推奨されなくなりました。このオプションで指定されたパスワードは、 \f2top\fP コマンドを使用するユーザーなど、ほかのユーザーが表示できる引数であることに注意してください。セキュリティーを高めるには、次の \f2\-httpproxyfile\fP を使用してください。 -.TP 3 -\-httpproxyfile <file> -HTTP/HTTPS プロキシをファイル経由で指定します。形式は上記と同じですが、このファイル内に指定されたパスワードをほかのユーザーが表示することはできません。 -.TP 3 -\-classpath <arg> -<jxb:javaType> および <xjc:superClass> \f2カスタマイズが使用する\fP クライアントアプリケーションの \f2クラスファイルの検索場所を\fP 指定します。 -.TP 3 -\-catalog <file> -外部エンティティー参照を解決するカタログファイルを指定します。TR9401、XCatalog、および OASIS XML Catalog 形式がサポートされます。詳細は、『XML Entity and URI Resolvers』ドキュメントを参照するか、 \f2カタログリゾルバの\fP サンプルアプリケーションを調べてください。 -.TP 3 -\-readOnly -デフォルトでは、XJC バインディングコンパイラは、生成する Java ソースファイルを書き込みから保護しません。このオプションを使用すると、XJC バインディングコンパイラは生成される Java ソースを強制的に読み取り専用にします。 -.TP 3 -\-npa -パッケージレベルの注釈を **/package\-info.java に生成することを抑制します。このスイッチを使用して生成するコードでは、これらの注釈がほかの生成済みクラスに内部化されます。 -.TP 3 -\-no\-header -多少のメモとタイムスタンプを含むファイルヘッダーコメントの生成を抑制します。このオプションを使用すると、生成されたコードがわかりにくくなります。 -.TP 3 -\-target 2.0 -なんらかの JAXB 2.1 機能に依存するコードを生成しないようにします。これにより、生成されたコードを JAXB 2.0 ランタイム (JavaSE 6 など) で実行できます。 -.TP 3 -\-xmlschema -入力スキーマを W3C XML スキーマ (デフォルト) と見なします。このスイッチを指定しなくても、入力スキーマは W3C XML スキーマと見なされます。 -.TP 3 -\-relaxng -入力スキーマを RELAX NG として扱います (試験的、未サポート)。RELAX NG スキーマのサポートは JAXB Vendor Extension として提供されています。 -.TP 3 -\-relaxng\-compact -入力スキーマを RELAX NG 圧縮構文として処理します (試験的、未サポート)。RELAX NG スキーマのサポートは JAXB Vendor Extension として提供されています。 -.TP 3 -\-dtd -入力スキーマを XML DTD として扱います (試験的、未サポート)。RELAX NG スキーマのサポートは JAXB Vendor Extension として提供されています。 -.TP 3 -\-wsdl -入力を WSDL として扱い、その内部のスキーマをコンパイルします (試験的、未サポート)。 -.TP 3 -\-quiet -進捗情報や警告など、コンパイラの出力を抑制します。 -.TP 3 -\-verbose -情報メッセージを出力したり特定のエラー発生時にスタックトレースを表示したりするなど、極めて冗長になります。 -.TP 3 -\-help -コンパイラスイッチの概要を表示します。 -.TP 3 -\-version -コンパイラのバージョン情報を表示します。 -.TP 3 -<schema file/URL/dir> -コンパイル対象となる 1 つまたは複数のスキーマファイルを指定します。ユーザーがディレクトリを指定した場合、xjc はそのディレクトリを走査し、そこで見つかったすべてのスキーマファイルをコンパイルします。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +非標準オプションも参照してください .RE - -.LP -.SS -非標準のコマンド行オプション -.LP -.RS 3 -.TP 3 -\-Xlocator -生成されたコードでは、非整列化のあとに Java Bean インスタンスに含まれるソース XML に関する SAX Locator 情報が公開されます。 -.TP 3 -\-Xsync\-methods -生成されたすべてのメソッドシグニチャーに \f2同期された\fP キーワードが含められます。 -.TP 3 -\-mark\-generated -生成されたコードに注釈 \f2@javax.annotation.Generated\fP を付けます。 -.TP 3 -\-episode <file> -コンパイルごとに指定されたエピソードファイルを生成します。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +非推奨で削除されたオプションも参照してください .RE - -.LP -.SS -非推奨コマンド行オプションおよび削除されたコマンド行オプション -.LP -.RS 3 -.TP 3 -\-host & \-port -これらのオプションは非推奨となり、\f3\-httpproxy\fP オプションで置き換えられました。これらのオプションは、下位互換性を確保する目的で引き続きサポートされますが、ドキュメントには記載されず、将来のリリースで削除される可能性もあります。 -.TP 3 -\-use\-runtime -JAXB 2.0 仕様で移植性のあるランタイムが規定されたため、JAXB RI が **/impl/runtime パッケージを生成する必要がなくなりました。このため、このスイッチは不要となり、削除されました。 -.TP 3 -\-source -\-source 互換性スイッチは、JAXB 2.0 の最初の Early Access 版で導入されました。このスイッチは、JAXB 2.0 の今後のリリースから削除されることになりました。1.0.x コードを生成する必要がある場合は、1.0.x コードベースのインストールを使用してください。 +.PP +\-nv +.RS 4 +デフォルトでは、XJCバインディング・コンパイラは、ソース・スキーマを処理する前に厳密な検証を実行します。このオプションを使用すると、厳密なスキーマ検証か無効になります。これは、バインディング・コンパイラが検証を一切実行しないということではありません。より厳密でない検証を実行するということです。 .RE - -.LP -.SS -コンパイラの制限 -.LP -.LP -通常は、関連するすべてのスキーマを、同じバインディングコンパイラスイッチを指定して 1 つの単位としてコンパイルするのがもっとも安全です。 -.LP -.LP -xjc を実行するときは、次に示す制限に注意してください。これらの制限のほとんどは、xjc を何度か呼び出して複数のスキーマをコンパイルする場合にのみ適用されます。 -.LP -.RS 3 -.TP 2 -o -複数のスキーマを同時にコンパイルする場合は、ターゲットの Java パッケージ名に次の優先順位の規則が適用されることに注意してください。 -.RS 3 -.TP 3 -1. -「\f2\-p\fP」コマンド行オプションがもっとも優先されます。 -.TP 3 -2. -<\f2jaxb:package\fP> のカスタマイズ -.TP 3 -3. -\f2targetNamespace\fP が宣言されている場合は、 \f2仕様に定義されている targetNamespace\fP \-> Java パッケージ名のアルゴリズムを適用します。 -.TP 3 -4. -\f2targetNamespace\fP が宣言されていない場合は、「generated」という名前のハードコードされたパッケージを使用します。 +.PP +\-extension +.RS 4 +デフォルトでは、XJCバインディング・コンパイラは、JAXB仕様のCompatibilityの章で説明されているルールを厳密に強制します。付録E\&.2には、JAXB v1\&.0で完全にはサポートされていない一連のW3C XMLスキーマ機能が定義されています。場合によっては、このスイッチで有効になる\fI\-extension\fRモードでそれらの機能が使用できる場合があります。また、デフォルトの厳密なモードでは、仕様に定義されているバインディング・カスタマイズのみが使用できます。\fI\-extension\fRスイッチを指定すれば、JAXB Vendor Extensionを使用できます。 .RE -.TP 2 -o -名前空間ごとに複数の <\f2jaxb:schemaBindings\fP> を持つことは不正です。このため、1 つのターゲット名前空間内の 2 つのスキーマを異なる Java パッケージにコンパイルすることはできません。 -.TP 2 -o -1 つの Java パッケージにコンパイルされるすべてのスキーマは、XJC バインディングコンパイラに同時に送信する必要があります。個別にコンパイルすることはできず、予期したとおりに動作しません。 -.TP 2 -o -複数のスキーマファイルにまたがる要素置換グループは、同時にコンパイルする必要があります。 +.PP +\-b \fIfile\fR +.RS 4 +処理する外部バインディング・ファイルを1つまたは複数指定します。バインディング・ファイルごとに\fI\-b\fRスイッチを指定する必要があります。外部バインディング・ファイルの構文は柔軟です。複数のスキーマのカスタマイズが含まれる1つのバインディング・ファイルを使用したり、それらのカスタマイズを複数のバインディング・ファイルに分割したりできます。次に例を示します。\fIxjc schema1\&.xsd schema2\&.xsd schema3\&.xsd \-b bindings123\&.xjb\fR +\fIxjc schema1\&.xsd schema2\&.xsd schema3\&.xsd \-b bindings1\&.xjb \-b bindings2\&.xjb \-b bindings3\&.xjb\fRまた、コマンドラインにスキーマ・ファイルとバインディング・ファイルを指定する順番は任意です。 .RE - -.LP +.PP +\-d \fIdir\fR +.RS 4 +デフォルトでは、XJCバインディング・コンパイラは、Javaコンテンツ・クラスを現在のディレクトリに生成します。このオプションを使用すると、代替出力ディレクトリを指定できます。出力ディレクトリはすでに存在している必要があります。XJCバインディング・コンパイラでは作成されません。 +.RE +.PP +\-p \fIpkg\fR +.RS 4 +このコマンドライン・オプションでターゲット・パッケージを指定した場合、その指定内容は、パッケージ名に対するすべてのバインディング・カスタマイズや、仕様で規定されているデフォルトのパッケージ名アルゴリズムよりも優先されます。 +.RE +.PP +\-httpproxy \fIproxy\fR +.RS 4 +\fI[user[:password]@]proxyHost[:proxyPort]\fR形式でHTTPまたはHTTPSプロキシを指定します。古い\fI\-host\fRおよび\fI\-port\fRオプションは、下位互換性のために引き続きRIでサポートされますが、非推奨となりました。このオプションで指定されたパスワードは、topコマンドを使用する他のユーザーが表示できる引数です。セキュリティを高めるには、\fI\-httpproxyfile\fRを使用してください。 +.RE +.PP +\-httpproxyfile file +.RS 4 +ファイルを使用して、HTTPまたはHTTPSプロキシを指定します。形式は\fI\-httpproxy\fRオプションと同じですが、このファイル内に指定されたパスワードを他のユーザーが表示することはできません。 +.RE +.PP +\-classpath arg +.RS 4 +\fIjxb:javaType\fRおよびxjc:\fIsuperClass\fRカスタマイズが使用するクライアント・アプリケーションのクラス・ファイルの検索場所を指定します。 +.RE +.PP +\-catalog file +.RS 4 +外部エンティティ参照を解決するカタログ・ファイルを指定します。TR9401、XCatalogおよびOASIS XML Catalogの各形式がサポートされます。http://xerces\&.apache\&.org/xml\-commons/components/resolver/resolver\-article\&.htmlの +XML Entity and URI Resolversを参照してください +.RE +.PP +\-readOnly +.RS 4 +デフォルトでは、XJCバインディング・コンパイラは、生成するJavaソース・ファイルを書込みから保護しません。このオプションを使用すると、XJCバインディング・コンパイラは生成されるJavaソースを強制的に読取り専用にします。 +.RE +.PP +\-npa +.RS 4 +\fI**/package\-info\&.java\fRへのパッケージ・レベルの注釈の生成を抑制します。このスイッチを使用して生成するコードでは、これらの注釈が他の生成済クラスに内部化されます。 +.RE +.PP +\-no\-header +.RS 4 +多少のメモとタイムスタンプを含むファイル・ヘッダー・コメントの生成を抑制します。これを使用すると、生成されたコードと\fIdiff\fRコマンドとの互換性がより強くなります。 +.RE +.PP +\-target 2\&.0 +.RS 4 +JAXB 2\&.1機能に依存するコードを生成しないようにします。これにより、生成されたコードをJAXB 2\&.0ランタイム環境(Java SE 6など)で実行できるようになります。 +.RE +.PP +\-xmlschema +.RS 4 +入力スキーマをW3C XMLスキーマとして扱います(デフォルト)。このスイッチを指定しない場合、入力スキーマはW3C XMLスキーマと同じように扱われます。 +.RE +.PP +\-relaxing +.RS 4 +入力スキーマをRELAX NGとして扱います(試験的および未サポート)。RELAX NGスキーマのサポートはJAXB Vendor Extensionとして提供されています。 +.RE +.PP +\-relaxing\-compact +.RS 4 +入力スキーマをRELAX NG圧縮構文として処理します(試験的および未サポート)。RELAX NGスキーマのサポートはJAXB Vendor Extensionとして提供されています。 +.RE +.PP +\-dtd +.RS 4 +入力スキーマをXML DTDとして扱います(試験的および未サポート)。RELAX NGスキーマのサポートはJAXB Vendor Extensionとして提供されています。 +.RE +.PP +\-wsdl +.RS 4 +入力をWSDLとして扱い、その内部のスキーマをコンパイルします(試験的および未サポート)。 +.RE +.PP +\-quiet +.RS 4 +進捗情報や警告など、コンパイラの出力を抑制します。 +.RE +.PP +\-verbose +.RS 4 +情報メッセージを出力したり特定のエラー発生時にスタック・トレースを表示したりするなど、きわめて冗長になります。 +.RE +.PP +\-help +.RS 4 +コンパイラ・スイッチのサマリーを表示します。 +.RE +.PP +\-version +.RS 4 +コンパイラのバージョン情報を表示します。 +.RE +.PP +\fIschema file/URL/dir\fR +.RS 4 +コンパイル対象となる1つまたは複数のスキーマ・ファイルを指定します。ディレクトリを指定する場合、\fIxjc\fRコマンドはすべてのスキーマ・ファイルをスキャンしてコンパイルします。 +.RE +.SS "非標準オプション" +.PP +\-XLocator +.RS 4 +生成されたコードでは、非整列化の後にJava Beanインスタンスに含まれるソースXMLに関するSAX Locator情報が公開されます。 +.RE +.PP +\-Xsync\-methods +.RS 4 +生成されたすべてのメソッド・シグニチャに\fIsynchronized\fRキーワードが含められます。 +.RE +.PP +\-mark\-generated +.RS 4 +生成されたコードに注釈\fI@javax\&.annotation\&.Generated\fRを付けます。 +.RE +.PP +\-episode file +.RS 4 +コンパイルごとに指定されたエピソード・ファイルを生成します。 +.RE +.SS "非推奨で削除されたオプション" +.PP +\-host & \-port +.RS 4 +これらのオプションは\fI\-httpproxy\fRオプションで置き換えられました。これらのオプションは、下位互換性を確保するためにサポートされますが、ドキュメントには記載されず、将来のリリースで削除される可能性もあります。 +.RE +.PP +\-use\-runtime +.RS 4 +JAXB 2\&.0仕様では、移植性のあるランタイム環境が定義されたため、JAXB RIが\fI**/impl/runtime \fRパッケージを生成する必要がなくなりました。このため、このスイッチは不要となり、削除されました。 +.RE +.PP +\-source +.RS 4 +\fI\-source\fR互換性スイッチは、JAXB 2\&.0の最初のEarly Access版で導入されました。このスイッチはJAXB 2\&.0の今後のリリースから削除されます。1\&.0\&.xコードを生成する必要がある場合は、1\&.0\&.xコード・ベースのインストールを使用してください。 +.RE +.SH "コンパイラの制限" +.PP +通常は、関連するすべてのスキーマを、同じバインディング・コンパイラ・スイッチを指定して1つの単位としてコンパイルするのが最も安全です。\fIxjc\fRコマンドの実行時には、次の制限リストに留意してください。これらの問題のほとんどは、\fIxjc\fRコマンドを何度か呼び出して複数のスキーマをコンパイルする場合にのみ当てはまります。 +.PP +複数のスキーマを同時にコンパイルする場合は、ターゲットのJavaパッケージ名に次の優先順位のルールが適用されることに注意してください。 +.sp +.RS 4 +.ie n \{\ +\h'-04' 1.\h'+01'\c +.\} +.el \{\ +.sp -1 +.IP " 1." 4.2 +.\} +\fI\-p\fRオプションが最も優先されます。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04' 2.\h'+01'\c +.\} +.el \{\ +.sp -1 +.IP " 2." 4.2 +.\} +\fIjaxb:package\fRのカスタマイズ。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04' 3.\h'+01'\c +.\} +.el \{\ +.sp -1 +.IP " 3." 4.2 +.\} +\fItargetNamespace\fRが宣言されている場合は、\fIt\fR\fIargetNamespace\fRを仕様で定義されているJavaパッケージ名のアルゴリズムに適用します。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04' 4.\h'+01'\c +.\} +.el \{\ +.sp -1 +.IP " 4." 4.2 +.\} +\fItargetNamespace\fRが宣言されていない場合は、\fIgenerated\fRという名前のハードコードされたパッケージを使用します。 +.RE +.PP +1つのネームスペースが複数の\fIjaxb:schemaBindings\fRを持つことはできないため、異なるJavaパッケージにコンパイラされる同一ターゲット・ネームスペースが2つのスキーマを持つことはできません。 +.PP +同じJavaパッケージにコンパイラされるスキーマはすべて、同時にXJCバインディング・コンパイラに送信される必要があります。別々にコンパイルすると、予想どおりに機能しません。 +.PP +複数のスキーマ・ファイルにまたがる要素置換グループは、同時にコンパイルする必要があります。 .SH "関連項目" -.LP -.RS 3 -.TP 2 -o -コマンド行でのコンバータの実行 (XJC): [ -.na -\f2コマンド行の命令\fP @ -.fi -https://jaxb.dev.java.net/nonav/2.1.3/docs/xjc.html、 -.na -\f2xjc を Ant とともに使用する\fP @ -.fi -https://jaxb.dev.java.net/nonav/2.1.3/docs/xjcTask.html] -.TP 2 -o -.na -\f2XML バインドのための Java アーキテクチャー (JAXB)\fP @ -.fi -http://java.sun.com/javase/6/docs/technotes/guides/xml/jaxb/index.html +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +http://jaxb\&.java\&.net/nonav/2\&.2\&.3u1/docs/xjc\&.htmlの +Binding Compiler (xjc) .RE - -.LP - +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +http://www\&.oracle\&.com/technetwork/articles/javase/index\-140168\&.htmlの +Java Architecture for XML Binding (JAXB) +.RE +.br +'pl 8.5i +'bp diff --git a/jdk/src/solaris/doc/sun/man/man1/ja/appletviewer.1 b/jdk/src/solaris/doc/sun/man/man1/ja/appletviewer.1 index 5aa0ad3d1fe..76609bfd263 100644 --- a/jdk/src/solaris/doc/sun/man/man1/ja/appletviewer.1 +++ b/jdk/src/solaris/doc/sun/man/man1/ja/appletviewer.1 @@ -1,66 +1,105 @@ -." Copyright (c) 1995, 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. -." -.TH appletviewer 1 "07 May 2011" - -.LP -.SH "名前" -appletviewer \- Java アプレットビューア -.LP -.LP -\f3appletviewer\fP コマンドは Web ブラウザの外でアプレットを実行させます。 -.LP -.SH "形式" -.LP -.LP -\f4appletviewer\fP \f2[\fP \f2options\fP \f2] \fP\f2urls\fP ... -.LP -.SH "説明" -.LP -.LP -\f3appletviewer\fP コマンドは \f2urls\fP に指定されたドキュメントあるいはリソースと接続して、そのドキュメントが参照するそれぞれのアプレットを独自のウィンドウで表示します。注: \f2urls\fP によって参照されたドキュメントが、\f2OBJECT\fP、\f2EMBED\fP、または \f2APPLET\fP タグでどのアプレットも参照していない場合、\f3appletviewer\fP は何も行いません。\f3appletviewer\fP でサポートされる HTML タグの詳細については、 -.na -\f2「アプレットビューアのタグ」\fP @ +'\" t +.\" Copyright (c) 1995, 2013, Oracle and/or its affiliates. All rights reserved. +.\" Title: appletviewer +.\" Language: English +.\" Date: 2013年11月21日 +.\" SectDesc: 基本ツール +.\" Software: JDK 8 +.\" Arch: 汎用 +.\" +.\" 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. +.\" +.pl 99999 +.TH "appletviewer" "1" "2013年11月21日" "JDK 8" "基本ツール" +.\" ----------------------------------------------------------------- +.\" * Define some portability stuff +.\" ----------------------------------------------------------------- +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.\" http://bugs.debian.org/507673 +.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" ----------------------------------------------------------------- +.\" * set default formatting +.\" ----------------------------------------------------------------- +.\" disable hyphenation +.nh +.\" disable justification (adjust text to left margin only) +.ad l +.\" ----------------------------------------------------------------- +.\" * MAIN CONTENT STARTS HERE * +.\" ----------------------------------------------------------------- +.SH "NAME" +appletviewer \- Webブラウザの外側でアプレットを実行します。 +.SH "概要" +.sp +.if n \{\ +.RS 4 +.\} +.nf +\fIappletviewer\fR [\fIoptions\fR] \fIurl\fR\&.\&.\&. .fi -http://java.sun.com/javase/6/docs/technotes/tools/appletviewertags.htmlを参照してください。 -.LP -.LP -\f3注:\fP \f3appletviewer\fP は、RFC2396 で規定されたエスケープ機構に従って符号化された URL を必要とします。サポートされるのは、符号化された URL だけです。ただし、ファイル名については、RFC2396 に指定された方法で符号化を解除しておく必要があります。 -.LP -.SH "オプション" -.LP -.RS 3 -.TP 3 -\-debug -Java デバッガ jdb(1) でアプレットビューアを開始します。これにより、ドキュメント中のアプレットをデバッグすることができます。 -.TP 3 -\-encoding \ \ encoding name -入力 HTML ファイルのエンコーディング名を指定します。 -.TP 3 -\-Jjavaoption -文字列 \f2javaoption\fP は、appletviewer を実行する Java インタプリタに 1 つの引数として渡されます。引数にスペースを含めてはいけません。複数の引数は、各引数のすべてを接頭辞 \f3\-J\fP で始めることにより区分する必要があります。これは、コンパイラの実行環境、またはメモリーの利用に有効です。 +.if n \{\ .RE +.\} +.PP +\fIoptions\fR +.RS 4 +空白で区切られたコマンドライン・オプション。オプションを参照してください。 +.RE +.PP +\fIurl\fR +.RS 4 +表示するドキュメントまたはリソースの場所。空白で区切られた複数のURLを指定できます。 +.RE +.SH "説明" +.PP +\fIappletviewer\fRコマンドは\fIurls\fRに指定されたドキュメントあるいはリソースと接続して、そのドキュメントが参照するそれぞれのアプレットを独自のウィンドウで表示します。urlsによって参照されたドキュメントが、\fIOBJECT\fR、\fIEMBED\fRまたは\fIAPPLET\fRタグでどのアプレットも参照していない場合、\fIappletviewer\fRコマンドは何も行いません。\fIappletviewer\fRコマンドでサポートされるHTMLタグの詳細は、http://docs\&.oracle\&.com/javase/8/docs/technotes/tools/appletviewertags\&.htmlにある +アプレット・ビューア・タグを参照してください。 +.PP +\fIappletviewer\fRコマンドは、RFC2396で定義されたエスケープ・メカニズムに従ってエンコードされたURLを必要とします。サポートされるのは、エンコードされたURLのみです。ただし、ファイル名については、RFC2396の仕様に従ってエンコードを解除しておく必要があります。 +.PP +\fB注意:\fR +The +\fIappletviewer\fRコマンドは開発専用です。詳細は、http://docs\&.oracle\&.com/javase/8/docs/technotes/samples/aboutCodeSamples\&.htmlにある +サンプル/テスト・アプリケーションおよびコードについてを参照してください。 +.SH "オプション" +.PP +\-debug +.RS 4 +\fIjdb\fRコマンドを使用してJavaデバッガでアプレット・ビューアを開始して、ドキュメント中のアプレットをデバッグします。 +.RE +.PP +\-encoding \fIencoding\-name\fR +.RS 4 +入力HTMLファイルのエンコーディング名を指定します。 +.RE +.PP +\-J\fIjavaoption\fR +.RS 4 +文字列\fIjavaoption\fRは、アプレット・ビューアを実行するJavaインタプリタに1つの引数として渡されます。引数にスペースを含めないでください。複数の引数は、すべてが接頭辞\fI\-J\fRで始まる必要があります。これは、コンパイラの実行環境またはメモリー使用の調整に有効です。 +.RE +.PP -.LP -.LP - -.LP - +.br +'pl 8.5i +'bp diff --git a/jdk/src/solaris/doc/sun/man/man1/ja/extcheck.1 b/jdk/src/solaris/doc/sun/man/man1/ja/extcheck.1 index d0a671568f8..fdd5a8e0cb2 100644 --- a/jdk/src/solaris/doc/sun/man/man1/ja/extcheck.1 +++ b/jdk/src/solaris/doc/sun/man/man1/ja/extcheck.1 @@ -1,73 +1,108 @@ -." 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 -." 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. -." -.TH extcheck 1 "07 May 2011" - -.LP -.SH "名前" -extcheck \- jar の競合検出ユーティリティー -.LP -.LP -\f3extcheck\fP は、ターゲットの jar ファイルと現在インストールされている拡張機能の jar ファイル間のバージョンの競合を検出します。 -.LP -.SH "形式" -.LP +'\" t +.\" Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved. +.\" Title: extcheck +.\" Language: English +.\" Date: 2013年11月21日 +.\" SectDesc: 基本ツール +.\" Software: JDK 8 +.\" Arch: 汎用 +.\" +.\" 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. +.\" +.pl 99999 +.TH "extcheck" "1" "2013年11月21日" "JDK 8" "基本ツール" +.\" ----------------------------------------------------------------- +.\" * Define some portability stuff +.\" ----------------------------------------------------------------- +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.\" http://bugs.debian.org/507673 +.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" ----------------------------------------------------------------- +.\" * set default formatting +.\" ----------------------------------------------------------------- +.\" disable hyphenation +.nh +.\" disable justification (adjust text to left margin only) +.ad l +.\" ----------------------------------------------------------------- +.\" * MAIN CONTENT STARTS HERE * +.\" ----------------------------------------------------------------- +.SH "NAME" +extcheck \- ターゲットのJavaアーカイブ(JAR)ファイルと現在インストールされている拡張機能のJARファイル間のバージョンの競合を検出します。 +.SH "概要" +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -extcheck [ \-verbose ] targetfile.jar -.fl -\fP +\fIextcheck\fR [\fIoptions\fR] \fItargetfile\&.jar\fR .fi - -.LP -.SH "説明" -.LP -.LP -\f3extcheck\fP ユーティリティーは、指定された Jar ファイルのタイトルおよびバージョンが Java(TM) 2 SDK にインストールされている拡張機能と競合していないかをチェックします。拡張機能をインストールする前に、このユーティリティーを使って、バージョンが同じか、より新しい拡張機能がすでにインストールされていないかどうかを調べることができます。 -.LP -.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 -.LP -競合が検出されない場合のリターンコードは \f20\fP です。 -.LP -.LP -拡張機能ディレクトリ内のいずれかの jar ファイルのマニフェストに、同一の \f2Specification\-title\fP 、および同一またはより新しい \f2Specification\-version\fP 番号がある場合は、ゼロでないエラーコードが返されます。 \f2targetfile.jar\fP のマニフェストに \f2Specification\-title\fP または \f2Specification\-version\fP 属性がない場合も、ゼロでないエラーコードが返されます。 -.LP -.SH "オプション" -.LP -.RS 3 -.TP 3 -\-verbose -拡張機能ディレクトリ内の Jar ファイルを、チェック時に一覧表示します。また、ターゲット jar ファイルのマニフェストの属性、および競合する jar ファイルについても報告します。 -.TP 3 -\-Joption -Java 仮想マシンに \f2option\fP を渡します。\f2option\fP には、java(1)のリファレンスページに記載されているオプションを 1 つ指定します。たとえば、\f3\-J\-Xms48m\fP と指定すると、スタートアップメモリーは 48M バイトに設定されます。 +.if n \{\ +.RE +.\} +.PP +\fIoptions\fR +.RS 4 +コマンドライン・オプション。オプションを参照してください。 +.RE +.PP +\fItargetfile\&.jar\fR +.RS 4 +バージョンの競合を検出するために、現在インストールされている拡張機能JARファイルと比較するターゲットJARファイル。 +.RE +.SH "説明" +.PP +\fIextcheck\fRコマンドは、指定されたJARファイルのタイトルおよびバージョンがJava SE SDKにインストールされている拡張機能と競合していないかをチェックします。拡張機能をインストールする前に、このユーティリティを使用して、同じバージョンまたはより新しいバージョンの拡張機能がすでにインストールされていないかどうかを調べることができます。 +.PP +\fIextcheck\fRコマンドは、\fItargetfile\&.jar\fRファイルのマニフェスト内のヘッダーSpecification\-titleおよびSpecification\-versionを、拡張機能ディレクトリ内に現在インストールされているすべてのJARファイル内の対応するヘッダーと比較します。デフォルトでは、拡張機能ディレクトリは、Oracle Solarisの場合は\fIjre/lib/ext\fR、Windowsの場合は\fI\ejre\elib\eext\fRです。\fIextcheck\fRコマンドは、\fIjava\&.lang\&.Package\&.isCompatibleWith\fRメソッドと同様の方法でバージョン番号を比較します。 +.PP +競合が検出されない場合、リターン・コードは0です。 +.PP +拡張機能ディレクトリ内のいずれかのJARファイルのマニフェストに、同一の\fISpecification\-title\fR、および同一またはより新しい\fISpecification\-version\fR番号がある場合は、ゼロでないエラー・コードが返されます。\fItargetfile\&.jar\fRのマニフェスト・ファイルに\fISpecification\-title\fRまたは\fISpecification\-version\fR属性がない場合も、ゼロでないエラー・コードが返されます。 +.SH "オプション" +.PP +\-verbose +.RS 4 +拡張機能ディレクトリ内のJARファイルを、チェック時に一覧表示します。また、ターゲットJARファイルのマニフェストの属性、および競合するJARファイルについても報告します。 +.RE +.PP +\-J\fIoption\fR +.RS 4 +Java仮想マシン(JVM)に\fIoption\fRを渡します。optionには、Java起動ツールのリファレンス・ページに記載されているオプションを1つ指定します。たとえば、\fI\-J\-Xms48m\fRと指定すると、スタートアップ・メモリーは48MBに設定されます。java(1)を参照してください。 .RE - -.LP .SH "関連項目" -.LP -.LP +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} jar(1) -.LP - +.RE +.br +'pl 8.5i +'bp diff --git a/jdk/src/solaris/doc/sun/man/man1/ja/idlj.1 b/jdk/src/solaris/doc/sun/man/man1/ja/idlj.1 index 96ce9478bdc..92b10e2e57d 100644 --- a/jdk/src/solaris/doc/sun/man/man1/ja/idlj.1 +++ b/jdk/src/solaris/doc/sun/man/man1/ja/idlj.1 @@ -1,738 +1,554 @@ -." 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 -." 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. -." -.TH idlj 1 "07 May 2011" - -.LP -.SH "名前" -idlj \- IDL\-to\-Java コンパイラ -.LP -\f3idlj\fP は、指定された IDL ファイルから Java バインディングを生成します。 -.SH "形式" -.LP +'\" t +.\" Copyright (c) 2001, 2013, Oracle and/or its affiliates. All rights reserved. +.\" Title: idlj +.\" Language: English +.\" Date: 2013年11月21日 +.\" SectDesc: Java IDLおよびRMI-IIOPツール +.\" Software: JDK 8 +.\" Arch: 汎用 +.\" +.\" 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. +.\" +.pl 99999 +.TH "idlj" "1" "2013年11月21日" "JDK 8" "Java IDLおよびRMI-IIOPツール" +.\" ----------------------------------------------------------------- +.\" * Define some portability stuff +.\" ----------------------------------------------------------------- +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.\" http://bugs.debian.org/507673 +.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" ----------------------------------------------------------------- +.\" * set default formatting +.\" ----------------------------------------------------------------- +.\" disable hyphenation +.nh +.\" disable justification (adjust text to left margin only) +.ad l +.\" ----------------------------------------------------------------- +.\" * MAIN CONTENT STARTS HERE * +.\" ----------------------------------------------------------------- +.SH "NAME" +idlj \- 指定されたインタフェース定義言語(IDL)ファイルに対してJavaバインディングを生成します。 +.SH "概要" +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -idlj [ \fP\f3options\fP\f3 ] \fP\f4idl\-file\fP\f3 -.fl -\fP +\fIidlj\fR [ \fIoptions\fR ] \fIidlfile\fR .fi - -.LP -.LP -\f2idl\-file\fP は、インタフェース定義言語 (IDL) による定義が入ったファイルの名前です。\f2options\fP の順番は任意ですが、\f2idl\-file\fP よりも前に指定しなければなりません。 -.LP +.if n \{\ +.RE +.\} +.PP +\fIoptions\fR +.RS 4 +コマンドライン・オプション。オプションを参照してください。optionsの順番は任意ですが、\fIidlfile\fRよりも前に指定する必要があります。 +.RE +.PP +\fIidlfile\fR +.RS 4 +インタフェース定義言語(IDL)による定義が含まれるファイルの名前。 +.RE .SH "説明" -.LP -.LP -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 という名前だったものがあります。 -.LP -.SS -クライアントバインディングおよびサーバーバインディングの発行 -.LP -.LP -My.idl という名前の IDL ファイルに対して Java バインディングを生成するには、次のコマンドを実行します。 -.LP +.PP +IDL\-to\-Javaコンパイラは、指定されたIDLファイルに対してJavaバインディングを生成します。バインディングの詳細は、http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/idl/mapping/jidlMapping\&.htmlにある +Java IDL: Java言語マッピングへのIDLを参照してください。 +.PP +IDL\-to\-Javaコンパイラの以前のリリースの中には、\fIidltojava\fRという名前だったものがあります。 +.SS "クライアント・バインディングおよびサーバー・バインディングの発行" +.PP +次の\fIidlj\fRコマンドは、クライアント側バインディングを含む\fIMy\&.idl\fRという名前のIDLファイルを生成します。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -idlj My.idl -.fl -\fP +idlj My\&.idl .fi - -.LP -.LP -これにより、クライアント側のバインディングが生成されます。このコマンドは、次のコマンドと等価です。 -.LP -.nf -\f3 -.fl -idlj \fP\f3\-fclient\fP My.idl -.fl -.fi - -.LP -.LP -クライアント側のバインディングには、サーバー側のスケルトンは組み込まれていません。インタフェースに対してサーバー側のバインディングを生成するには、次のコマンドを実行します。 -.LP -.nf -\f3 -.fl -idlj \fP\f3\-fserver\fP My.idl -.fl -.fi - -.LP -.LP -サーバー側のバインディングには、クライアント側のバインディングのほかに、スケルトンも含まれています。これらはすべて、 \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 -.LP -サーバー側で可能なモデルは 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 インタフェースとオペレーションインタフェースを実装します。 -.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 そのものによって呼び出され、サーバントの動作を制御するためにユーザーがオーバーライドできるメソッドも提供します。 -.LP -.LP -継承モデルのもう 1 つのオプションは、\f2\-oldImplBase\fP フラグを使用することで、J2SE 1.4 より前のバージョンの Java プログラミング言語と互換性のあるサーバー側バインディングを生成することです。ただし、\f2\-oldImplBase\fP フラグを使用するのは、標準的な手法ではありません。これらの API は今後非推奨になる予定です。このフラグを使用するのは、J2SE 1.3 で記述された既存のサーバーとの互換性が必要な場合だけです。その場合には既存の MAKEFILE を変更し、\f2idlj\fP コンパイラに \f2\-oldImplBase\fP フラグを追加する必要があります。そうしないと、POA ベースのサーバー側マッピングが生成されます。下位互換性のあるサーバー側バインディングを生成するには、次のコマンドを使用します。 -.LP -.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 -.LP -\f2My.idl\fP 内で \f2My\fP インタフェースが定義されている場合は、\f2_MyImplBase.java\fP というファイルが生成されます。\f2My\fP に対してその実装を提供し、この実装は \f2_MyImplBase\fP から継承しなければなりません。 -.LP -.LP -もう 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 - ORB orb = ORB.init(args, System.getProperties()); -.fl - -.fl - // Get reference to rootpoa & activate the POAManager -.fl - POA rootpoa = (POA)orb.resolve_initial_references("RootPOA"); -.fl - rootpoa.the_POAManager().activate(); -.fl - -.fl - // create servant and register it with the ORB -.fl - MyServant myDelegate = new MyServant(); -.fl - myDelegate.setORB(orb); -.fl - -.fl - // create a tie, with servant being the delegate. -.fl - MyPOATie tie = new MyPOATie(myDelegate, rootpoa); -.fl - -.fl - // obtain the objectRef for the tie -.fl - My ref = tie._this(orb); -.fl -\fP -.fi - -.LP -.LP -他の実装から継承しなければならない場合、標準の継承モデルではなく Tie モデルを使用することがあります。Java の場合は、インタフェースの継承の個数に制限はありませんが、クラスの継承に使用できるスロットは 1 つだけです。継承モデルを使用した場合は、そのスロットが占有されます。Tie モデルを使用した場合は、そのスロットが使用されず、ユーザーが独自の目的で使用することができます。ただし、この方法には、間接性のレベルが 1 つ導入されるという欠点があります。メソッドを呼び出すときに、余分なメソッド呼び出しが 1 回発生します。 -.LP -.LP -IDL のバージョンから J2SE 1.4 より前のバージョンの Java 言語へのマッピングと互換性のある、サーバー側の Tie モデルのバインディングを生成するには、次のコマンドを使用します。 -.LP -.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 -.fl - ORB orb = ORB.init(args, System.getProperties()); -.fl - -.fl - // create servant and register it with the ORB -.fl - MyServant myDelegate = new MyServant(); -.fl - myDelegate.setORB(orb); -.fl - -.fl - // create a tie, with servant being the delegate. -.fl - MyPOATie tie = new MyPOATie(myDelegate); -.fl - -.fl - // obtain the objectRef for the tie -.fl - My ref = tie._this(orb); -.fl -\fP -.fi - -.LP -.SS -発行されたファイルの代替位置の指定 -.LP -.LP -発行されたファイルをカレントディレクトリ以外のディレクトリに置くには、次のようなコマンドでコンパイラを呼び出します。 -.LP -.nf -\f3 -.fl -idlj \fP\f3\-td /altdir\fP My.idl -.fl -.fi - -.LP -.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 -.LP -また、もし \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 -.LP -このような形式でインクルードを指定すると、コマンドが長くて複雑になります。そこで、インクルードファイルを検索する場所をコンパイラに指示するための別の方法が用意されています。この方法は、環境変数の考え方と似ています。CLASSPATH にリストされているディレクトリ内に \f2idl.config\fP という名前のファイルを作成します。その \f2idl.config\fP の中に、次のような形式の行を入れます。 -.LP -.nf -\f3 -.fl -includes=/includes;/moreIncludes -.fl -\fP -.fi - -.LP -.LP -コンパイラは、このファイルを検索し、インクルードリストを読み込みます。この例では、ディレクトリの間の区切り文字はセミコロン (;) になっています。この区切り文字は、プラットフォームによって異なります。たとえば、Windows プラットフォームではセミコロンですが、Unix プラットフォームではコロンです。 \f2インクルード\fPの詳細については、 -.na -\f2CLASSPATH の設定\fP @ -.fi -http://java.sun.com/javase/6/docs/technotes/tools/index.html#general を参照してください。 -.LP -.SS -インクルードファイルに対するバインディングの発行 -.LP -.LP -デフォルトでは、コマンド行に指定した IDL ファイルで定義されているインタフェースや構造体などについてのみ、Java バインディングが生成されます。インクルードされたファイルで定義されている型については、Java バインディングは生成されません。たとえば、次の 2 つの IDL ファイルについて考えてみましょう。 -.LP - -.LP -.LP -\f4My.idl\fP -.LP -.nf -\f3 -.fl -#include <MyOther.idl> -.fl -interface My -.fl -{ -.fl -}; -.fl -\fP -.fi - -.LP - -.LP -.LP -\f4MyOther.idl\fP -.LP -.nf -\f3 -.fl -interface MyOther -.fl -{ -.fl -}; -.fl -\fP -.fi - -.LP - -.LP -.LP -次のコマンドでは、\f2My\fP に対する Java バインディングだけが生成されます。 -.LP -.nf -\f3 -.fl -idlj My.idl -.fl -\fP -.fi - -.LP -.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 -.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 ファイルに次のような行を追加した場合と等価です。 -.nf -\f3 -.fl -#define \fP\f4symbol\fP\f3 -.fl -\fP -.fi -.TP 3 -\-emitAll -#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 が指定されたものと見なされます。 -.TP 3 -\-i include\-path -デフォルトでは、インクルードファイルはカレントディレクトリから検索されます。このオプションを指定すると、ほかのディレクトリを追加できます。 -.TP 3 -\-keep -生成されるファイルがすでに存在している場合は、そのファイルが上書きされません。デフォルトでは、上書きされます。 -.TP 3 -\-noWarn -警告メッセージを表示しないようにします。 -.TP 3 -\-oldImplBase -v1.4 より前の JDK ORB と互換性のあるスケルトンを生成します。デフォルトでは、POA 継承モデルのサーバー側バインディングが生成されます。このオプションを指定すると、\f2ImplBase\fP 継承モデルのクラスであるサーバー側バインディングが生成されるので、古いバージョンの Java プログラミング言語との下位互換性が得られます。 -.TP 3 -\-pkgPrefix type prefix -\f2type\fP がファイルスコープで検出された場合は、その型に対して生成されるすべてのファイルについて、生成される Java パッケージ名に \f2prefix\fP という接頭辞が付加されます。\f2type\fP は、トップレベルモジュールの単純名か、どのモジュールよりも外側で定義された IDL 型の単純名のどちらかです。 -.TP 3 -\-pkgTranslate type package -識別子の中にモジュール名 type が検出されると、生成される Java パッケージ内のすべてのファイルについて、識別子の中のその名前が package で置き換えられます。最初に \f2pkgPrefix\fP を変更します。\f2type\fP は、トップレベルのモジュール、またはすべてのモジュールの外部で定義された IDL 型の単純名です。そして、完全なパッケージ名に正確に一致しなければなりません。 -.LP -1 つの識別子の中で複数の変換がマッチする場合は、もっとも長いマッチが選ばれます。たとえば、次のような引数が指定されている場合は、 -.nf -\f3 -.fl - \-pkgTranslate foo bar \-pkgTranslate foo.baz buzz.fizz -.fl -\fP -.fi -.LP -次のような変換が実施されます。 -.nf -\f3 -.fl -foo => bar -.fl -foo.boo => bar.boo -.fl -foo.baz => buzz.fizz -.fl -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 のサブパッケージ +.if n \{\ .RE -.LP -これらのパッケージ名を変換しようとすると、互換性のないコードが生成されます。そして、\f2\-pkgTranslate\fP のあとの最初の引数としてそれらのパッケージを使用すると、エラーとして扱われます。 -.TP 3 -\-skeletonName xxx%yyy -\f2xxx%yyy\fP が、スケルトンに名前を付けるパターンとして使用されます。デフォルトは次のとおりです。 -.RS 3 -.TP 2 -o -\f2POA\fP 基底クラスの場合は「%POA」(\f2\-fserver\fP または \f2\-fall\fP) -.TP 2 -o -\f2oldImplBase\fP クラスの場合は「_%ImplBase」(\f2\-oldImplBase\fP かつ (\f2\-fserver\fP または \f2\-fall\fP)) +.\} +.PP +前の構文は次と同等です。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +idlj \-fclient My\&.idl +.fi +.if n \{\ .RE -.TP 3 -\-td dir -出力ディレクトリとして、カレントディレクトリではなく、\f2dir\fP が使用されます。 -.TP 3 -\-tieName xxx%yyy -このパターンに従って Tie に名前が付けられます。デフォルトは次のとおりです。 -.RS 3 -.TP 2 -o -\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)) +.\} +.PP +次の例では、サーバー側バインディングを生成し、クライアント側バインディングおよびスケルトンを含めており、これらはすべて、POA (継承モデル)です。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +idlg \-fserver My\&.idl +.fi +.if n \{\ .RE -.TP 3 -\-nowarn, \-verbose -冗長モードになります。 -.TP 3 -\-version -バージョン情報を表示して終了します。 +.\} +.PP +クライアント側とサーバー側の両方のバインディングを生成する場合は、次のコマンド(どれも等価)のうちの1つを使用します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +idlj \-fclient \-fserver My\&.idl +idlj \-fall My\&.idl +.fi +.if n \{\ .RE - -.LP -各オプションの詳細については、「説明」のセクションを参照してください。 -.SH "制約" -.LP -.RS 3 -.TP 2 -o -グローバルスコープ内のエスケープされた識別子は、IDL プリミティブ型の \f2Object\fP または \f2ValueBase\fP と同じ綴りであってはなりません。これらの識別子については、シンボルテーブルが事前にロードされており、これらの識別子の再定義を許可すると元の定義が上書きされてしまいます。これは、おそらく恒久的な制約です。 -.TP 2 -o -\f2fixed\fP という IDL 型はサポートされていません。 +.\} +.PP +サーバー側で可能なモデルは2つあります。移殖可能サーバント継承モデルとTieモデルです。Tie委譲モデルを参照してください。 +.if n \{\ +.sp +.\} +.RS 4 +.it 1 an-trap +.nr an-no-space-flag 1 +.nr an-break-flag 1 +.br +.ps +1 +\fB移殖可能サーバント継承モデル\fR +.ps -1 +.br +.PP +デフォルトのサーバー側のモデルは、移殖可能サーバント継承モデルです。\fIMy\&.idl\fR内で\fIMy\fRインタフェースが定義されている場合は、\fIMyPOA\&.java\fRというファイルが生成されます。\fIMy\fRインタフェースの実装を提供する必要があり、\fIMy\fRインタフェースは\fIMyPOA\fRクラスから継承する必要があります。\fIMyPOA\&.java\fRは、http://docs\&.oracle\&.com/javase/8/docs/api/org/omg/PortableServer/Servant\&.htmlにある +\fIorg\&.omg\&.PortableServer\&.Servant\fRクラスを拡張するストリームベースのスケルトンです。 +.PP +\fIMy\fRインタフェースは、スケルトンが実装するIDLインタフェースに関連付けられている\fIcallHandler\fRインタフェースと操作インタフェースを実装します。 +.PP +ポータブル・オブジェクト・アダプタ(POA)の\fIPortableServer\fRモジュールは、ネイティブの\fIServant\fR型を定義します。http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/idl/POA\&.htmlにある +ポータブル・オブジェクト・アダプタ(POA)を参照してください。 +.PP +Javaプログラミング言語では、\fIServant\fR型はJavaの\fIorg\&.omg\&.PortableServer\&.Servant\fRクラスにマップされます。これは、すべてのPOAサーバント実装のベース・クラスとして機能し、アプリケーション・プログラマが呼び出すことのできるいくつかのメソッド、およびPOAによって呼び出され、サーバントの動作を制御するためにユーザーがオーバーライドできるメソッドを提供します。 +.PP +継承モデルのもう1つのオプションは、\fI\-oldImplBase\fRフラグを使用して、Java SE 1\&.4より前のリリースのJavaプログラミング言語と互換性のあるサーバー側バインディングを生成することです。\-\fIoldImplBase\fRフラグは非標準で、これらのAPIは非推奨です。このフラグを使用するのは、Java SE 1\&.3で記述された既存のサーバーとの互換性が必要な場合のみです。その場合、既存のmakeファイルを変更して、\fI\-oldImplBase\fRフラグを\fIidlj\fRコンパイラに追加する必要があります。それ以外の場合、POAベースのサーバー側マッピングが生成されます。下位互換性のあるサーバー側バインディングを生成するには、次を実行します。 +.sp .5v .RE - -.LP -.SH "既知の問題点" -.LP -.RS 3 -.TP 2 -o -グローバル識別子についてインポートが生成されません。予期されないローカル impl を呼び出すと、例外を受け取ります。 しかし、その原因は、\f2ServerDelegate\fP DSI コード内の \f2NullPointerException\fP にあるようです。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +idlj \-fclient \-fserver \-oldImplBase My\&.idl +idlj \-fall \-oldImplBase My\&.idl +.fi +.if n \{\ .RE - -.LP +.\} +.PP +\fIMy\&.idl\fR内で\fIMy\fRインタフェースが定義されている場合は、\fI_MyImplBase\&.java\fRというファイルが生成されます。\fIMy\fRインタフェースの実装を提供する必要があり、\fIMy\fRインタフェースは\fI_MyImplBase\fRクラスから継承する必要があります。 +.if n \{\ +.sp +.\} +.RS 4 +.it 1 an-trap +.nr an-no-space-flag 1 +.nr an-break-flag 1 +.br +.ps +1 +\fBTie委譲モデル\fR +.ps -1 +.br +.PP +もう1つのサーバー側モデルは、Tieモデルと呼ばれるものです。このサーバー側モデルは、委譲モデルです。Tieとスケルトンを同時に生成することはできないため、それらは別々に生成する必要があります。次のコマンドによって、Tieモデル用のバインディングが生成されます。 +.sp .5v +.RE +.sp +.if n \{\ +.RS 4 +.\} +.nf +idlj \-fall My\&.idl +idlj \-fallTIE My\&.idl +.fi +.if n \{\ +.RE +.\} +.PP +\fIMy\fRインタフェースの場合、2番目のコマンドにより、\fIMyPOATie\&.java\fRが生成されます。\fIMyPOATie\fRクラスへのコンストラクタは、delegateを取ります。この例では、デフォルトのPOAモデルを使用しているため、コンストラクタにもPOAが必要です。delegateに対して実装を提供する必要がありますが、この実装は\fIMyOperations\fRインタフェースから継承する必要があるのみで、その他のクラスから継承する必要はありません。これをORBと一緒に使用するには、たとえば次のように\fIMyPOATie\fRクラス内で実装をラップする必要があります。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +ORB orb = ORB\&.init(args, System\&.getProperties()); +// Get reference to rootpoa & activate the POAManager +POA rootpoa = (POA)orb\&.resolve_initial_references("RootPOA"); +rootpoa\&.the_POAManager()\&.activate(); + +// create servant and register it with the ORB +MyServant myDelegate = new MyServant(); +myDelegate\&.setORB(orb); + +// create a tie, with servant being the delegate\&. +MyPOATie tie = new MyPOATie(myDelegate, rootpoa); + +// obtain the objectRef for the tie +My ref = tie\&._this(orb); +.fi +.if n \{\ +.RE +.\} +.PP +他の実装から継承する必要がある場合、標準の継承モデルではなくTieモデルを使用することもできます。Javaの場合は、インタフェースの継承の個数に制限はありませんが、クラスの継承に使用できるスロットは1つのみです。継承モデルを使用した場合は、そのスロットが占有されます。Tieモデルを使用すると、そのスロットが使用されず、ユーザーが独自の目的で使用できます。この方法には、間接性のレベルが1つ導入されるという短所があります。メソッドを呼び出すときに、余分なメソッド呼出しが1回発生します。 +.PP +サーバー側の生成の場合、Java SE 1\&.4より前のバージョンのJava言語にマッピングするIDLのバージョンと互換性のある、Tieモデルのバインディングです。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +idlj \-oldImplBase \-fall My\&.idl +idlj \-oldImplBase \-fallTIE My\&.idl +.fi +.if n \{\ +.RE +.\} +.PP +\fIMy\fRインタフェースの場合、これにより、\fIMy_Tie\&.java\fRが生成されます。\fIMy_Tie\fRクラスへのコンストラクタは、\fIimpl\fRオブジェクトを取ります。\fIimpl\fRに対して実装を提供する必要がありますが、その実装は\fIHelloOperations\fRインタフェースから継承する必要があるのみで、その他のクラスから継承する必要はありません。しかし、これをORBと一緒に使用するには、たとえば次のように\fIMy_Tie\fR内で実装をラップする必要があります。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +ORB orb = ORB\&.init(args, System\&.getProperties()); + +// create servant and register it with the ORB +MyServant myDelegate = new MyServant(); +myDelegate\&.setORB(orb); + +// create a tie, with servant being the delegate\&. +MyPOATie tie = new MyPOATie(myDelegate); + +// obtain the objectRef for the tie +My ref = tie\&._this(orb); +.fi +.if n \{\ +.RE +.\} +.SS "発行されたファイルの代替位置の指定" +.PP +発行されたファイルを現在のディレクトリ以外のディレクトリに置くには、\fIi\fR\fIdlj \-td /altdir My\&.idl\fRのコマンドでコンパイラを呼び出します。 +.PP + +\fIMy\fRインタフェースの場合、バインディングは、\fI\&./My\&.java\fRではなく、\fI/altdir/My\&.java\fRなどに発行されます。 +.SS "インクルード・ファイルの代替位置の指定" +.PP +\fIMy\&.idl\fRファイルが別の\fIidl\fRファイルである\fIMyOther\&.idl\fRをインクルードする場合、コンパイラでは、\fIMyOther\&.idl\fRファイルがローカル・ディレクトリに存在することを前提としています。たとえば、それが\fI/includes\fRにある場合は、次のようなコマンドでコンパイラを呼び出します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +idlj \-i /includes My\&.idl +.fi +.if n \{\ +.RE +.\} +.PP +たとえば、\fI/moreIncludes\fRにある\fIAnother\&.idl\fRも\fIMy\&.idl\fRにインクルードされているのであれば、次のようなコマンドでコンパイラを呼び出します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +idlj \-i /includes \-i /moreIncludes My\&.idl +.fi +.if n \{\ +.RE +.\} +.PP +このような形式の\fIinclude\fRは長くなるため、インクルード・ファイルを検索する場所をコンパイラに指示するための別の方法が用意されています。この方法は、環境変数の考え方と似ています。\fICLASSPATH\fR変数に一覧表示されているディレクトリ内にidl\&.configという名前のファイルを作成します。その\fIidl\&.config\fRの中に、次のような形式の行を入れます。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +includes=/includes;/moreIncludes +.fi +.if n \{\ +.RE +.\} +.PP +コンパイラは、このファイルを検索し、インクルード・リストを読み込みます。この例では、ディレクトリの間の区切り文字はセミコロン(;)になっています。この区切り文字は、プラットフォームによって異なります。Windowsプラットフォームではセミコロンを使用し、UNIXプラットフォームではコロンを使用するなどです。 +.SS "インクルード・ファイルに対するバインディングの発行" +.PP +デフォルトでは、コマンドラインに指定した\fIidl\fRファイルで定義されているインタフェースや構造体などについてのみ、Javaバインディングが生成されます。インクルードされたファイルで定義されている型については生成されません。たとえば、次の2つの\fIidl\fRファイルについて考えてみます。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +My\&.idl file: + +#include <MyOther\&.idl> +interface My +{ +}; + +MyOther\&.idl file: + +interface MyOther +{ +}; +.fi +.if n \{\ +.RE +.\} +.PP +デフォルトのルールに関して警告があります。グローバル・スコープに表示される\fI#include\fR文は、前述のとおりに処理されます。これらの\fI#include\fR文は、インポート文と見なすことができます。囲まれたスコープ内に表示される\fI#include\fR文は、本当の意味での\fI#include\fR文として処理されます。つまり、インクルードされたファイルにあるコードが、元のファイルにそのまま表示されているかのように処理され、それに対してJavaバインディングが発行されます。次はその例です。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +My\&.idl file: + +#include <MyOther\&.idl> +interface My +{ + #include <Embedded\&.idl> +}; + +MyOther\&.idl file: + +interface MyOther +{ +}; + +Embedded\&.idl + +enum E {one, two, three}; +.fi +.if n \{\ +.RE +.\} +.PP +\fI idlj My\&.idl \fRを実行して、Javaファイルの次のリストを生成します。インポート文とみなされる\fI#include\fRに定義されていたため、\fIMyOther\&.java\fRは生成されませんでした。ただし、本当の意味での\fI#include\fRで定義されていたため、\fIE\&.java\fRは生成されました。\fIEmbedded\&.idl\fRファイルが\fIMy\fRインタフェースのスコープ内にインクルードされているため、\fIMy\fRのスコープ内(つまり、\fIMyPackage\fR内)に生成されています。\fI\-emitAll\fRフラグを使用した場合、インクルードされたすべてのファイルにあるすべての型が発行されます。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\&./MyHolder\&.java +\&./MyHelper\&.java +\&./_MyStub\&.java +\&./MyPackage +\&./MyPackage/EHolder\&.java +\&./MyPackage/EHelper\&.java +\&./MyPackage/E\&.java +\&./My\&.java +.fi +.if n \{\ +.RE +.\} +.SS "パッケージの接頭辞の挿入" +.PP +ABCという名前の会社のために作業していて、次のようなIDLファイルを構築したとしましょう。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +Widgets\&.idl file: + +module Widgets +{ + interface W1 {\&.\&.\&.}; + interface W2 {\&.\&.\&.}; +}; +.fi +.if n \{\ +.RE +.\} +.PP +IDL\-to\-Javaコンパイラを介してこのファイルを実行した場合、W1およびW2に対するJavaバインディングは、\fIWidgets\fRパッケージ内に格納されます。業界の慣例によると、会社のパッケージは、\fIcom\&.<company name>\fRという名前のパッケージ内に置くことになっています。この慣例に従うには、パッケージ名を\fIcom\&.abc\&.Widgets\fRにする必要があります。このパッケージ接頭辞をWidgetsモジュールに付加するには、次のコマンドを実行します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +idlj \-pkgPrefix Widgets com\&.abc Widgets\&.idl +.fi +.if n \{\ +.RE +.\} +.PP +Widgets\&.idlをインクルードしているIDLファイルがある場合は、そのコマンドにも\fI\-pkgPrefix\fRフラグが必要です。このフラグを指定しないと、そのIDLファイルは、\fIcom\&.abc\&.Widgets\fRパッケージではなく、\fIWidgets\fRパッケージを検索することになります。 +.PP +接頭辞が必要なパッケージがいくつもある場合は、前述のidl\&.configファイルで接頭辞を指定するのが簡単です。パッケージ接頭辞の各行は、\fIPkgPrefix\&.<type>=<prefix>\fRの形式である必要があります。前述の例の行では、\fIPkgPrefix\&.Widgets=com\&.abc\fRになります。このオプションは、リポジトリIDには影響しません。 +.SS "コンパイル前のシンボルの定義" +.PP +コンパイル用のシンボルがIDLファイル内で定義されていない場合は、そのシンボルを定義する必要があります。これは、たとえば、バインディング内にデバッグ・コードを組み入れるときに使用します。コマンド\fIidlj \-d MYDEF My\&.idl \fRは、My\&.idl内に行\fI#define MYDEF\fRを配置した場合と同等になります。 +.SS "既存のバインディングの保持" +.PP +Javaバインディング・ファイルがすでに存在する場合は、\fI\-keep\fRフラグを指定すると、コンパイラによる上書きを回避できます。デフォルトでは、すでに存在するかどうかにかかわらず、すべてのファイルが生成されます。これらのファイルをカスタマイズした場合(ただし、それらの内容が正確であるとき以外はカスタマイズは避ける)、\fI\-keep\fRオプションは有用です。コマンド\fIidlj \-keep My\&.idl\fRは、すでに存在しないすべてのクライアント側バインディングを発行します。 +.SS "コンパイルの進捗状況の表示" +.PP +IDL\-to\-Javaコンパイラは、実行の各段階で状態メッセージを生成します。\fI\-v\fRオプションを使用して、\fIidlj \-v My\&.idl\fRのような冗長モードをアクティブ化します。 +.PP +デフォルトでは、コンパイラは冗長モードでは実行されません。 +.SS "バージョン情報の表示" +.PP +IDL\-to\-Javaコンパイラのビルド・バージョンを表示するには、コマンドライン\fIidlj \-version\fRで\fI\-version\fRオプションを指定します。 +.PP +バージョン情報は、コンパイラによって生成されたバインディング内にも書き込まれています。このオプションをコマンドラインに指定すると、それ以外のオプションを指定しても、すべて無視されます。 +.SH "オプション" +.PP +\-d \fIsymbol\fR +.RS 4 +このオプションは、IDLファイルに次のような行を追加した場合と等価です。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +#define \fIsymbol\fR +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\-demitAll +.RS 4 +\fI#include\fRファイル内で定義されているものも含めて、すべての型を発行します。 +.RE +.PP +\-fside +.RS 4 +発行するバインディングを定義します。\fIside\fRパラメータには、\fIclient\fR、\fIserver\fR、\fIserverTIE\fR、\fIall\fRまたは\fIallTIE\fRを指定できます。\fI\-fserverTIE\fRまたは\fI\-fallTIE\fRオプションを指定すると、委譲モデル・スケルトンが発行されます。フラグを指定しない場合、\fI\-fclient\fRにデフォルト設定されます。 +.RE +.PP +\-i \fIinclude\-path\fR +.RS 4 +デフォルトでは、インクルード・ファイルは現在のディレクトリから検索されます。このオプションを指定すると、他のディレクトリを追加できます。 +.RE +.PP +\-i \fIkeep\fR +.RS 4 +生成されるファイルがすでに存在している場合は、そのファイルが上書きされません。デフォルトでは、上書きされます。 +.RE +.PP +\-noWarn +.RS 4 +警告メッセージを表示しないようにします。 +.RE +.PP +\-oldImplBase +.RS 4 +1\&.4より前のJDK ORBと互換性のあるスケルトンを生成します。デフォルトでは、POA継承モデルのサーバー側バインディングが生成されます。このオプションを指定すると、\fIImplBase\fR継承モデルのクラスであるサーバー側バインディングが生成されるので、以前のリリースのJavaプログラミング言語との下位互換性が得られます。 +.RE +.PP +\-pkgPrefix \fItype\fR \fIprefix\fR +.RS 4 +\fItype\fRがファイル・スコープで検出された場合は、その型に対して生成されるすべてのファイルについて、生成されるJavaパッケージ名に\fIprefix\fRという接頭辞が付加されます。typeは、トップレベル・モジュールの単純名か、どのモジュールよりも外側で定義されたIDL型の単純名のどちらかです。 +.RE +.PP +\-pkgTranslate \fItype\fR \fIpackage\fR +.RS 4 +識別子の中にモジュール名typeが検出されると、生成されるJavaパッケージ内のすべてのファイルについて、識別子の中のその名前がpackageで置き換えられます。最初に\fIpkgPrefix\fRの変更が行われます。typeの値は、トップレベルのモジュールの単純名、またはすべてのモジュールの外部で定義されたIDL型の単純名で、完全なパッケージ名に正確に一致する必要があります。 +.sp +複数の変換が識別子に一致する場合、次の例に示すように、最も長い一致が選択されます。 +.sp +\fBコマンド\fR: +.sp +.if n \{\ +.RS 4 +.\} +.nf +pkgTranslate type pkg \-pkgTranslate type2\&.baz pkg2\&.fizz +.fi +.if n \{\ +.RE +.\} +\fB結果の変換\fR: +.sp +.if n \{\ +.RS 4 +.\} +.nf +type => pkg +type\&.ext => pkg\&.ext +type\&.baz => pkg2\&.fizz +type2\&.baz\&.pkg => pkg2\&.fizz\&.pkg +.fi +.if n \{\ +.RE +.\} +パッケージ名\fIorg\fR、\fIorg\fR\&.o\fImg\fR、または\fIorg\&.omg\fRのサブパッケージは、変換できません。これらのパッケージ名を変換しようとすると、互換性のないコードが生成され、\fI\-pkgTranslate\fRの後の最初の引数としてそれらのパッケージを使用すると、エラーとして扱われます。 +.RE +.PP +\-skeletonName \fIxxx%yyy\fR +.RS 4 +\fIxxx%yyy\fRが、スケルトンに名前を付けるパターンとして使用されます。デフォルトは次のとおりです。\fIPOA\fRベース・クラスの場合は\fI%POA\fR +(\fI\-fserver\fRまたは\fI\-fall\fR)、\fIoldImplBase\fRクラスの場合は\fI_%ImplBase\fR +(\-\fIoldImplBase\fR)および(\fI\-fserver\fRまたは\fI\-fall\fR))。 +.RE +.PP +\-td \fIdir\fR +.RS 4 +出力ディレクトリとして、現在のディレクトリではなく、\fIdir\fRが使用されます。 +.RE +.PP +\-tieName \fIxxx%yyy\fR +.RS 4 +パターンに従って、\fIxxx%yyy\fRを使用します。デフォルトは次のとおりです。\fIPOA\fRベース・クラスの場合は\fI%POA\fR +(\fI\-fserverTieまたは\-fallTie\fR)、\fIoldImplBase\fR +tieクラスの場合は\fI_%Tie\fR +(\-\fIoldImplBase\fR)および(\fI\-fserverTie\fRまたは\fI\-fallTie\fR))。 +.RE +.PP +\-nowarn、\-verbose +.RS 4 +リリース情報を表示して終了します。 +.RE +.PP +\-version +.RS 4 +リリース情報を表示して終了します。 +.RE +.SH "制限事項" +.PP +グローバル・スコープ内のエスケープされた識別子は、IDLプリミティブ型の\fIObject\fRまたは\fIValueBase\fRと同じ綴りにしないでください。これは、シンボル表がこれらの識別子でプリロードされているためです。これらの再定義を許可すると、元の定義が上書きされます。これは、おそらく恒久的な制約です。 +.PP +\fIfixed\fRというIDL型はサポートされていません。 +.SH "既知の問題" +.PP +グローバル識別子についてインポートが生成されません。予期されないローカル\fIimpl\fRオブジェクトを呼び出すと、例外を受け取ります。しかし、その原因は、\fIServerDelegate\fR +DSIコード内の\fINullPointerException\fRにあるようです。 +.br +'pl 8.5i +'bp diff --git a/jdk/src/solaris/doc/sun/man/man1/ja/jar.1 b/jdk/src/solaris/doc/sun/man/man1/ja/jar.1 index 0ce57f3ee56..dc1fc5869f7 100644 --- a/jdk/src/solaris/doc/sun/man/man1/ja/jar.1 +++ b/jdk/src/solaris/doc/sun/man/man1/ja/jar.1 @@ -1,601 +1,517 @@ -." Copyright (c) 1997, 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. -." -.TH jar 1 "07 May 2011" - -.LP -.SH "名前" -jar \- Java ARchive ツール -.LP -\f3jar\fP は複数のファイルを 1 つの JAR アーカイブファイルに結合します。 -.RS 3 -.TP 2 -o -形式 -.TP 2 -o -説明 -.TP 2 -o -オプション -.TP 2 -o -コマンド行引数ファイル -.TP 2 -o -例 -.TP 2 -o -関連項目 +'\" t +.\" Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. +.\" Title: jar +.\" Language: English +.\" Date: 2013年11月21日 +.\" SectDesc: 基本ツール +.\" Software: JDK 8 +.\" Arch: 汎用 +.\" +.\" 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. +.\" +.pl 99999 +.TH "jar" "1" "2013年11月21日" "JDK 8" "基本ツール" +.\" ----------------------------------------------------------------- +.\" * Define some portability stuff +.\" ----------------------------------------------------------------- +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.\" http://bugs.debian.org/507673 +.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" ----------------------------------------------------------------- +.\" * set default formatting +.\" ----------------------------------------------------------------- +.\" disable hyphenation +.nh +.\" disable justification (adjust text to left margin only) +.ad l +.\" ----------------------------------------------------------------- +.\" * MAIN CONTENT STARTS HERE * +.\" ----------------------------------------------------------------- +.SH "NAME" +jar \- Java Archive (JAR)ファイルを操作します。 +.SH "概要" +JARファイルの作成 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\fIjar c\fR[\fIefmMnv0\fR] [\fIentrypoint\fR] [\fIjarfile\fR] [\fImanifest\fR] [\fI\-C\fR \fIdir\fR] \fIfile\fR \&.\&.\&. [\-J\fIoption\fR \&.\&.\&.] [@\fIarg\-file\fR \&.\&.\&.] +.fi +.if n \{\ .RE - -.LP -.SH "形式" -.LP -.RS 3 -.TP 3 -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 ファイルの更新 -\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 ファイルの抽出 -\f4jar x\fP\f2[vf] [\fP\f2jarfile\fP\f2] [\fP\f2inputfiles\fP\f2] [\-J\fP\f2option\fP\f2]\fP -.TP 3 -JAR ファイルの内容の表形式による一覧表示 -\f4jar t\fP\f2[vf] [\fP\f2jarfile\fP\f2] [\fP\f2inputfiles\fP\f2] [\-J\fP\f2option\fP\f2]\fP -.TP 3 -JAR ファイルへのインデックスの追加 -\f4jar i\fP \f2jarfile\fP \f2[\-J\fP\f2option\fP\f2]\fP +.\} +JARファイルの更新 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\fIjar u\fR[\fIefmMnv0\fR] [\fIentrypoint\fR] [\fIjarfile\fR] [\fImanifest\fR] [\fI\-C\fR \fIdir\fR] \fIfile\fR \&.\&.\&. [\-J\fIoption\fR \&.\&.\&.] [@\fIarg\-file\fR \&.\&.\&.] +.fi +.if n \{\ .RE - -.LP -.LP -説明 -.LP -.RS 3 -.TP 3 -cuxtiv0Mmfe -\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 の場合)。 -.TP 3 -inputfiles -\f2jarfile\fP に結合されるか (c および u の場合)、\f2jarfile\fP から抽出 (x の場合) または一覧表示 (t の場合) される、空白で区切られたファイルまたはディレクトリ。すべてのディレクトリは再帰的に処理されます。このファイルは、オプション \f20\fP (ゼロ) を使用しないかぎり圧縮されます。 -.TP 3 -manifest -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 の出現順序と一致する必要があります。 -.TP 3 -\-C\ dir -これに続く \f2inputfiles\fP 引数を処理する間、ディレクトリを \f2dir\fP へ一時的に変更します。 \f2\-C\ \fP\f2\-\ dir\fP \f2inputfiles\fP のセットは複数使用できます。 -.TP 3 -\-Joption -Java 実行環境へ渡されるオプション。\f2\-J\fP と \f2option\fP の間には空白を入れないでください。 +.\} +JARファイルの抽出 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\fIjar\fR \fIx\fR[\fIvf\fR] [\fIjarfile\fR] \fIfile\fR \&.\&.\&. [\-J\fIoption\fR \&.\&.\&.] [@\fIarg\-file\fR \&.\&.\&.] +.fi +.if n \{\ .RE - -.LP +.\} +JARファイルのコンテンツのリスト +.sp +.if n \{\ +.RS 4 +.\} +.nf +\fIjar\fR \fIt\fR[\fIvf\fR] [\fIjarfile\fR] \fIfile\fR \&.\&.\&. [\-J\fIoption\fR \&.\&.\&.] [@\fIarg\-file\fR \&.\&.\&.] +.fi +.if n \{\ +.RE +.\} +JARファイルへの索引の追加 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\fIjar\fR \fIi\fR \fIjarfile\fR [\-J\fIoption\fR \&.\&.\&.] [@\fIarg\-file\fR \&.\&.\&.] +.fi +.if n \{\ +.RE +.\} .SH "説明" -.LP -\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 アーカイブは、圧縮されているかどうかにかかわらず、クラスパスのエントリとして使用できます。 -.LP -複数のファイルを JAR ファイルへ結合する一般的な使用法は次のとおりです。 -.LP -.nf -\f3 -.fl -% jar cf myFile.jar *.class -.fl -\fP -.fi - -.LP -この例では、現在のディレクトリにあるクラス (.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」を参照してください。 -.LP -既存のマニフェストファイル内に格納された \f2name\ :\ value\fP ペアを JAR ファイルに含める必要がある場合には、そのファイルを次のように \f2\-m\fP オプションを使って指定します。 -.LP -.nf -\f3 -.fl -% jar cmf myManifestFile myFile.jar *.class -.fl -\fP -.fi - -.LP -既存のマニフェストファイルは改行文字で終わっている必要があります。マニフェストファイルが改行文字で終わっていないと、\f3jar\fP はその最終行を解析しません。 -.br - -.LP -.br - -.LP -\f3注:\ \fPコマンド行に \f2cmf\fP ではなく \f2cfm\fP が指定された jar コマンド (m と \-f オプションの順番を逆にする) の場合、\f3jar\fP コマンド行にまず JAR アーカイブの名前を指定し、続いてマニフェストファイルの名前を指定する必要があります。 次に例を示します。 -.nf -\f3 -.fl -% jar cfm myFile.jar myManifestFile *.class -.fl -\fP -.fi - -.LP -マニフェストは、RFC822 ASCII 形式で規定されたテキスト形式であるため、マニフェストファイルの内容を簡単に表示および編集できます。 -.LP -JAR ファイルからファイルを抽出する場合は、 \f2x\fP を使用します。 -.LP -.nf -\f3 -.fl -% jar xf myFile.jar -.fl -\fP -.fi - -.LP -.LP -jar ファイルから個別のファイルを抽出する場合は、そのファイル名を指定します。 -.LP -.nf -\f3 -.fl -% jar xf myFile.jar foo bar -.fl -\fP -.fi - -.LP -.LP -JDK のバージョン 1.3 以降から、\f2jar\fP ユーティリティーで -.na -\f2JarIndex\fP @ -.fi -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 -.fl -% jar i main.jar -.fl -\fP -.fi - -.LP -.LP -この例では、 \f2INDEX.LIST\fP ファイルが \f2main.jar\fP の \f2META\-INF\fP ディレクトリ内に挿入されます。 -.br -.br -このファイルに格納されている情報を使用して、アプリケーションのクラスローダーは、効率的にクラスをロードします。インデックスファイルに位置情報を格納する方法の詳細は、「JarIndex 仕様」を参照してください。 -.br -.br -ディレクトリをコピーするには、まず \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) -.fl -\fP -.fi - -.LP -.LP -\f2jar\fP を使用して JAR ファイルや JAR マニフェストファイルを操作するサンプルコマンドを確認したい場合は、後述の「例」を参照してください。また、「 -.na -\f2Java Tutorial\fP @ -.fi -http://download.oracle.com/javase/tutorial/deployment/jar」の JAR コースも参照してください。 -.LP -.SH "オプション" -.LP -.RS 3 -.TP 3 -c -f が指定された場合は \f2jarfile\fP という名前の \f2新しい\fP アーカイブファイルを \f2作成し、\fP f と \f2jarfile\fP が省略された場合は標準出力に情報を出力します。\f2inputfiles\fP で指定されたファイルとディレクトリを、このアーカイブに追加します。 -.TP 3 -u -f が指定されている場合に、既存ファイル \f2jarfile\fP を \f2更新する目的で、\fP \f2inputfiles\fP に指定されたファイルやディレクトリを追加します。次に例を示します。 -.nf -\f3 -.fl -jar uf foo.jar foo.class -.fl -\fP -.fi -上のコマンドは、ファイル \f2foo.class\fP を既存の JAR ファイル \f2foo.jar\fP に追加します。次の例に示すように、\f2\-u\fP オプションは、マニフェストエントリも更新できます。 -.nf -\f3 -.fl -jar umf manifest foo.jar -.fl -\fP -.fi -\f2foo.jar\fP マニフェストをマニフェスト内の \f2name:value\fP ペアで更新します。 -.TP 3 -x -f が指定された場合は \f2jarfile\fP \f2から\fP 、 \f2f\fP と \f2jarfile\fP が省略された場合は標準入力から、ファイルやディレクトリを抽出します。\f2inputfiles\fP が指定されている場合は、その指定したファイルとディレクトリだけが抽出されます。指定されていなければ、すべてのファイルとディレクトリが抽出されます。抽出されたファイルの日時は、アーカイブ内で設定されたものです。 -.TP 3 -t -f が指定された場合は \f2jarfile\fP \f2から\fP 、 \f2f\fP と \f2jarfile\fP が省略された場合は標準入力から、目次を表示します。\f2inputfiles\fP が指定されている場合は、その指定したファイルとディレクトリだけが一覧表示されます。指定されていなければ、すべてのファイルとディレクトリが一覧表示されます。 -.TP 3 -i -指定された \f2jarfile\fP と、それに依存する JAR ファイルについて、インデックス情報を生成します。たとえば、 -.nf -\f3 -.fl -jar i foo.jar -.fl -\fP -.fi -.LP -上のコマンドは、\f2foo.jar\fP 内に \f2INDEX.LIST\fP ファイルを生成します。 このファイルには、\f2foo.jar\fP と、\f2foo.jar\fP の \f2Class\-Path\fP 属性に指定されたすべての JAR ファイルに入っている各パッケージの位置情報が書き込まれています。インデックスの例を参照してください。 -.TP 3 -f -次の各処理の対象となるファイル \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 による圧縮を使用せずに、保存します。 -.TP 3 -M -マニフェストファイルエントリを作成しません (c および u の場合)。または、マニフェストファイルエントリが存在する場合にそれを削除します (u の場合)。 -.TP 3 -m -\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 の入力順序と同じ順序で記述する必要があります。たとえば、次のようにして使います。 -.nf -\f3 -.fl -jar cmf myManifestFile myFile.jar *.class -.fl -\fP -.fi -デフォルトのマニフェストには含まれないマニフェストに、特別な目的の \f2name\ :\ value\fP の属性ペアを追加できます。たとえば、ベンダー情報、バージョン情報、パッケージシーリング、または JAR にバンドルされたアプリケーションを実行するための属性を追加できます。「Java Tutorial」の「 -.na -\f2JAR Files\fP @ -.fi -http://download.oracle.com/javase/tutorial/deployment/jar/」コースを参照し、 \f4\-m\fP オプションの使用例を確認してください。 -.TP 3 -e -実行可能 JAR ファイル内にバンドルされたスタンドアロンアプリケーションのアプリケーションエントリポイントとして、\f2entrypoint\fP を設定します。このオプションを使用すると、マニフェストファイル内の \f2Main\-Class\fP 属性値が作成または上書きされます。このオプションは、JAR ファイルの作成中または更新中に使用できます。このオプションを使えば、マニフェストファイルを編集または作成することなしに、アプリケーションのエントリポイントを指定できます。 -.br -.br -たとえば、次のコマンドでは \f2Main.jar\fP が作成されますが、その際、マニフェスト内の \f2Main\-Class\fP 属性値は \f2Main\fP に設定されます。 -.nf -\f3 -.fl -jar cfe Main.jar Main Main.class -.fl -\fP -.fi -.LP -次のコマンドを実行すると java ランタイムから直接このアプリケーションを起動できます。 -.nf -\f3 -.fl -java \-jar Main.jar -.fl -\fP -.fi -あるパッケージ内にエントリポイントのクラス名が含まれている場合、ドット (「.」) 、スラッシュ (「/」) のいずれかの文字をその区切り文字として使用できます。たとえば、 \f2Main.class\fP が \f2foo\fP という名前のパッケージに含まれている場合、エントリポイントは次のようにして指定できます。 -.nf -\f3 -.fl -jar \-cfe Main.jar foo/Main foo/Main.class -.fl -\fP -.fi -または -.nf -\f3 -.fl -jar \-cfe Main.jar foo.Main foo/Main.class -.fl -\fP -.fi -\f3注:\ \fP \f2\-m\fP オプションと \f2\-e\fP オプションの両方を同時に指定した場合、指定したマニフェストにも \f2Main\-Class\fP 属性が含まれていれば、 \f2Main.class\fP の指定があいまいになってエラーや発生し、JAR の作成処理や更新処理が異常終了します。 -.LP -.TP 3 -\-C \ dir -\f2jar\fP コマンドの実行中に後続の \f2inputfiles\fP 引数を処理するときに、一時的にディレクトリを変更します (cd \f2dir\fP)。この処理は、UNIX の \f2tar\fP ユーティリティーの \f2\-C\fP オプションの機能に類似しています。 -.br -.br -たとえば、次のコマンドは、\f2classes\fP ディレクトリに移動し、そのディレクトリから \f2bar.class\fP を \f2foo.jar\fP に追加します。 -.nf -\f3 -.fl -jar uf foo.jar \-C classes bar.class -.fl -\fP -.fi -次のコマンドでは、\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 -.fl -\fP -.fi -\f2classes\fP にファイル \f2bar1\fP と \f2bar2\fP が格納されている場合に、 \f2jar tf foo.jar\fP 使用したときの JAR ファイルの中身を、次に示します。 -.nf -\f3 -.fl -META\-INF/ -.fl -META\-INF/MANIFEST.MF -.fl -bar1 -.fl -bar2 -.fl -xyz.class -.fl -\fP -.fi -.LP -.TP 3 -\-Joption -Java 実行環境に \f2option\fP を渡します。 \f2option\fP には、「Java アプリケーション起動ツール」のリファレンスページに記載されているオプションを 1 つ指定します。たとえば、 \f4\-J\-Xmx48M\fP と指定すると、最大メモリーが 48M バイトに設定されます。\f2\-J\fP を使って背後の実行環境にオプションを渡すことはよく行われています。 +.PP +\fIjar\fRコマンドは、ZIPおよびZLIB圧縮形式に基づく汎用のアーカイブおよび圧縮ツールです。ただし、\fIjar\fRコマンドは、主にいくつかのJavaアプレットやアプリケーションを単一のアーカイブにパッケージ化するように設計されました。アプレットやアプリケーションのコンポーネント(ファイル、イメージ、およびサウンド)が1つのアーカイブに結合されていると、Javaエージェント(ブラウザなど)は、それらのコンポーネントを1回のHTTPトランザクションでダウンロードすることができ、コンポーネントごとに新しい接続が不要になります。これにより、ダウンロード時間が大幅に短縮されます。また、\fIjar\fRコマンドはファイルの圧縮も行うため、ダウンロード時間がさらに短縮されます。また、\fIjar\fRコマンドによって、ファイル内の個々のエントリにアプレット作成者による署名を書き込めるため、配布元の認証が可能になります。JARファイルは、圧縮されているかどうかにかかわらず、クラス・パスのエントリとして使用できます。 +.PP +\fIjar\fRコマンドの構文は、\fItar\fRコマンドの構文に似ています。必須の\fI操作の引数\fRの1つで定義された複数の操作モードがあります。他の引数は、操作の動作を変更する\fIオプション\fR、または操作を実行するために必要な\fIオペランド\fRを使用します。 +.SH "操作の引数" +.PP +\fIjar\fRコマンドを使用する場合は、次の操作の引数のいずれかを指定して実行される操作を選択する必要があります。コマンドラインで他の1文字のオプションと混在させることができますが、通常、操作の引数は指定される最初の引数です。 +.PP +c +.RS 4 +新しいJARアーカイブを作成します。 .RE - -.LP -.SH "コマンド行引数ファイル" -.LP -jar のコマンド行を短くしたり簡潔にしたりするために、jar コマンドに対する引数 (\-J オプションを除く) を含む 1 つ以上の \f2ファイルを\fP 指定することが \f2できます\fP 。これにより、任意の長さの jar コマンドを作成でき、オペレーティングシステムによるコマンド行の制限から解放されます。 -.LP -引数ファイルにはオプションとファイル名を含めることができます。ファイル内の各引数は、スペースまたは改行で区切ります。引数ファイル内のファイル名は、現在のディレクトリから見た相対パスになります。引数ファイルの位置から見た相対パスではありません。ワイルドカード (*) は、通常ならばオペレーティングシステムシェルによってあらゆる文字に解釈されますが、この場合はそのようには解釈されません。引数ファイル内の引数で \f2@\fP 文字を使用して、複数のファイルを再帰的に解釈することはサポートされていません。また、\f2\-J\fP オプションもサポートされていません。このオプションは起動ツールに渡されますが、起動ツールでは引数ファイルをサポートしていないからです。 -.LP -.LP -\f2jar\fP を実行するときに、各引数ファイルのパスとファイル名の先頭に \f2@\fP 文字を付けて渡します。 \f2jar\fP は、\f2@\fP 文字で始まる引数を見つけると、そのファイルの内容を展開して引数リストに挿入します。 +.PP +i +.RS 4 +JARアーカイブの索引情報を生成します。 +.RE +.PP +t +.RS 4 +JARアーカイブのコンテンツをリストします。 +.RE +.PP +u +.RS 4 +JARアーカイブを更新します。 +.RE +.PP +x +.RS 4 +JARアーカイブからファイルを抽出します。 +.RE +.SH "オプション" +.PP +次のオプションを使用して、JARファイルを作成、更新、抽出または表示する方法をカスタマイズします。 +.PP +e +.RS 4 +\fIentrypoint\fRオペランドで指定されるクラスを、実行可能JARファイルにバンドルされるスタンドアロンJavaアプリケーションのエントリ・ポイントに設定します。このオプションを使用すると、マニフェスト・ファイル内の\fIMain\-Class\fR属性値が作成またはオーバーライドされます。\fIe\fRオプションは、JARファイルの作成時(\fIc\fR)または更新時(\fIu\fR)に使用できます。 +.sp +たとえば、次のコマンドでは、\fIMain\&.jar\fRアーカイブが\fIMain\&.class\fRファイルとともに作成されますが、その際、マニフェスト内の\fIMain\-Class\fR属性値は\fIMain\fRに設定されます。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +jar cfe Main\&.jar Main Main\&.class +.fi +.if n \{\ +.RE +.\} +Java Runtime Environment (JRE)は、次のコマンドを実行して、このアプリケーションを直接呼び出すことができます。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +java \-jar Main\&.jar +.fi +.if n \{\ +.RE +.\} +あるパッケージ内にエントリ・ポイントのクラス名が含まれている場合、ドット(\&.)またはスラッシュ(/)のいずれかを区切り文字として使用できます。たとえば、\fIMain\&.class\fRが\fImydir\fRという名前のパッケージに含まれている場合、エントリ・ポイントは次のいずれかの方法で指定できます。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +jar \-cfe Main\&.jar mydir/Main mydir/Main\&.class +jar \-cfe Main\&.jar mydir\&.Main mydir/Main\&.class +.fi +.if n \{\ +.RE +.\} +.if n \{\ +.sp +.\} +.RS 4 +.it 1 an-trap +.nr an-no-space-flag 1 +.nr an-break-flag 1 .br +.ps +1 +\fBNote\fR +.ps -1 .br -次の例で、 \f2classes.list\fP には、 \f2find\fP コマンドによって出力されたファイルの名前が格納されます。 -.LP +.TS +allbox tab(:); +l. +T{ +注意 +特定のマニフェストにも\fIMain\-Class\fR属性が含まれている場合に\fIm\fRオプションと\fIe\fRオプションの両方を同時に指定すると、\fIMain\-Class\fRの指定があいまいになります。このあいまいさによってエラーが発生し、\fIjar\fRコマンドの作成や更新の操作が終了します。 +T} +.TE +.sp 1 +.sp .5v +.RE +.RE +.PP +f +.RS 4 +\fIjarfile\fRオペランドで指定されたファイルを、作成(\fIc\fR)、更新(\fIu\fR)、抽出(\fIx\fR)または表示(\fIt\fR)されるJARファイルの名前に設定します。\fIf\fRオプションおよび\fIjarfile\fRオペランドを省略すると、\fIjar\fRコマンドに、\fIstdin\fRからのJARファイル名を受け入れるか(\fIx\fRおよび\fIt\fRの場合)、JARファイルを\fIstdout\fRに送信すること(\fIc\fRおよび\fIu\fRの場合)が指示されます。 +.RE +.PP +m +.RS 4 +(\fIMETA\-INF/MANIFEST\&.MF\fRのアーカイブにある) +\fIjar\fRコマンドのマニフェスト・ファイルの\fImanifest\fRオペランドで指定されたファイルから、属性の名前と値のペアを含めます。\fIjar\fRコマンドは、同じ名前のエントリがすでに存在する場合を除き、属性の名前と値をJARファイルに追加します。同じ名前のエントリがすでに存在する場合、\fIjar\fRコマンドは属性の値を更新します。\fIm\fRオプションは、JARファイルの作成時(\fIc\fR)または更新時(\fIu\fR)に使用できます。 +.sp +デフォルトのマニフェスト・ファイルには含まれないマニフェストに、特別な目的の名前\-値の属性ペアを追加できます。たとえば、ベンダー情報、リリース情報、パッケージ・シーリングを指定する属性、またはJARにバンドルされたアプリケーションを実行可能にするための属性を追加できます。\fIm\fRオプションの使用例は、http://docs\&.oracle\&.com/javase/tutorial/deployment/jar/index\&.htmlにある +プログラムのパッケージ化に関する項を参照してください。 +.RE +.PP +M +.RS 4 +マニフェスト・ファイル・エントリを作成しない(\fIc\fRおよび\fIu\fRの場合)か、またはマニフェスト・ファイル・エントリが存在する場合は削除します(\fIu\fRの場合)。\fIM\fRオプションは、JARファイルの作成時(\fIc\fR)または更新時(\fIu\fR)に使用できます。 +.RE +.PP +n +.RS 4 +JARファイルの作成(\fIc\fR)時に、このオプションは、コンテンツがpack200(1)コマンドのパックおよびアンパック操作の影響を受けないようにアーカイブを正規化します。この正規化を使用しない場合、署名付きJARの署名は無効になります。 +.RE +.PP +v +.RS 4 +詳細な出力を標準出力に生成します。例を参照してください。 +.RE +.PP +0 +.RS 4 +(ゼロ) ZIP圧縮を使用しないでJARファイルを作成(\fIc\fR)または更新(\fIu\fR)します。 +.RE +.PP +\-C \fIdir\fR +.RS 4 +JARファイルの作成(\fIc\fR)または更新(\fIu\fR)時に、このオプションは\fIfile\fRオペランドで指定されたファイルの処理中にディレクトリを一時的に変更します。この操作は、UNIX +\fItar\fRユーティリティの\fI\-C\fRオプションと同様になることを目的としています。たとえば、次のコマンドによって、\fIclasses\fRディレクトリに変更され、そのディレクトリから\fImy\&.jar\fRに\fIBar\&.class\fRファイルが追加されます。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -% find \fP\f3.\fP \-name '*.class' \-print > classes.list -.fl +jar uf my\&.jar \-C classes Bar\&.class .fi - -.LP -.LP -次に、引数ファイル構文を使用して \f2classes.list\fP を jar に渡すことで、 \f2そのリスト\fP に対して \f2jar\fP コマンドを実行できます。 -.LP +.if n \{\ +.RE +.\} +次のコマンドでは、\fIclasses\fRディレクトリに移動し、classesディレクトリ内のすべてのファイルを\fImy\&.jar\fRに追加します(JARファイルには\fIclasses\fRディレクトリを作成しません)。次に元のディレクトリに戻ってから、\fIbin\fRディレクトリに移動し、\fIXyz\&.class\fRを\fImy\&.jar\fRに追加します。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -% jar cf my.jar @classes.list -.fl -\fP +jar uf my\&.jar \-C classes \&. \-C bin Xyz\&.class .fi - -.LP -引数ファイルはパスを指定できますが、相対パスが記述された引数ファイル内のすべてのファイル名は、渡されたパスに対して相対的ではなく、現在の作業ディレクトリに相対的となります。次はその例です。 +.if n \{\ +.RE +.\} +\fIclasses\fRに\fIbar1\fRファイルと\fIbar2\fRファイルが含まれている場合、前述のコマンドを実行した後、JARファイルには次のものが含まれます。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -% jar @path1/classes.list -.fl -\fP -.fi - -.LP -.LP - -.LP -.SH "例" -.LP -特定のディレクトリ内のすべてのファイルをアーカイブに追加する (そのアーカイブがすでに存在する場合は、その内容を上書きする) には、次のようにします。\f2\-v\fP オプションを使用して情報を詳細に列挙するように指定すると、サイズや最新の更新日など、アーカイブ内のファイルについての詳細情報が表示されます。 -.nf -\f3 -.fl -% ls -.fl -1.au Animator.class monkey.jpg -.fl -2.au Wave.class spacemusic.au -.fl -3.au at_work.gif -.fl - -.fl -% jar cvf bundle.jar * -.fl -added manifest -.fl -adding: 1.au(in = 2324) (out= 67)(deflated 97%) -.fl -adding: 2.au(in = 6970) (out= 90)(deflated 98%) -.fl -adding: 3.au(in = 11616) (out= 108)(deflated 99%) -.fl -adding: Animator.class(in = 2266) (out= 66)(deflated 97%) -.fl -adding: Wave.class(in = 3778) (out= 81)(deflated 97%) -.fl -adding: at_work.gif(in = 6621) (out= 89)(deflated 98%) -.fl -adding: monkey.jpg(in = 7667) (out= 91)(deflated 98%) -.fl -adding: spacemusic.au(in = 3079) (out= 73)(deflated 97%) -.fl -\fP -.fi - -.LP -すでに画像、オーディオファイル、およびクラス用のサブディレクトリに分けている場合は、これらを単一の JAR ファイルに結合できます。 -.nf -\f3 -.fl -% ls \-F -.fl -audio/ classes/ images/ -.fl - -.fl -% jar cvf bundle.jar audio classes images -.fl -added manifest -.fl -adding: audio/(in = 0) (out= 0)(stored 0%) -.fl -adding: audio/1.au(in = 2324) (out= 67)(deflated 97%) -.fl -adding: audio/2.au(in = 6970) (out= 90)(deflated 98%) -.fl -adding: audio/3.au(in = 11616) (out= 108)(deflated 99%) -.fl -adding: audio/spacemusic.au(in = 3079) (out= 73)(deflated 97%) -.fl -adding: classes/(in = 0) (out= 0)(stored 0%) -.fl -adding: classes/Animator.class(in = 2266) (out= 66)(deflated 97%) -.fl -adding: classes/Wave.class(in = 3778) (out= 81)(deflated 97%) -.fl -adding: images/(in = 0) (out= 0)(stored 0%) -.fl -adding: images/monkey.jpg(in = 7667) (out= 91)(deflated 98%) -.fl -adding: images/at_work.gif(in = 6621) (out= 89)(deflated 98%) -.fl - -.fl -% ls \-F -.fl -audio/ bundle.jar classes/ images/ -.fl -\fP -.fi - -.LP -JAR ファイルのエントリ名を表示するには、「\f2t\fP」オプションを使用します。 -.nf -\f3 -.fl -% jar tf bundle.jar -.fl +% \fIjar tf my\&.jar\fR META\-INF/ -.fl -META\-INF/MANIFEST.MF -.fl -audio/1.au -.fl -audio/2.au -.fl -audio/3.au -.fl -audio/spacemusic.au -.fl -classes/Animator.class -.fl -classes/Wave.class -.fl -images/monkey.jpg -.fl -images/at_work.gif -.fl -\fP +META\-INF/MANIFEST\&.MF +bar1 +bar2 +Xyz\&.class .fi - -.LP -.LP -クラスロードを高速にするためにインデックスファイルを JAR ファイルに追加するには、「\f2i\fP」オプションを使用します。 -.br -.br -例: -.br - -.LP -たとえば、株取引アプリケーションの内部依存しているクラスを、\f2main.jar\fP、\f2buy.jar\fP、および \f2sell.jar\fP という 3 つの JAR ファイルに分割したとします。 -.br - -.LP -.br - -.LP -\f2main.jar\fP のマニフェストの \f2Class\-path\fP 属性に次のように指定した場合、 +.if n \{\ +.RE +.\} +.RE +.PP +\-J\fIoption\fR +.RS 4 +指定したJVMオプションを、JREがJARファイルを実行する際に使用するように設定します。JVMオプションは、java(1)コマンドのリファレンス・ページで説明されています。たとえば、\fI\-J\-Xms48m\fRと指定すると、スタートアップ・メモリーは48MBに設定されます。 +.RE +.SH "オペランド" +.PP +次のオペランドは、\fIjar\fRコマンドで認識されます。 +.PP +\fIfile\fR +.RS 4 +JARファイルの作成(\fIc\fR)または更新(\fIu\fR)時に、\fIfile\fRオペランドは、アーカイブに追加する必要のあるファイルまたはディレクトリのパスと名前を定義します。JARファイルの抽出(\fIx\fR)またはコンテンツのリスト(\fIt\fR)時に、\fIfile\fRオペランドは抽出またはリストするファイルのパスと名前を定義します。少なくとも1つの有効なファイルまたはディレクトリを指定する必要があります。複数の\fIfile\fRオペランドを空白で区切ります。\fIentrypoint\fR、\fIjarfile\fRまたは\fImanifest\fRオペランドが使用される場合は、その後に\fIfile\fRオペランドを指定する必要があります。 +.RE +.PP +\fIentrypoint\fR +.RS 4 +JARファイルの作成(\fIc\fR)または更新(\fIu\fR)時に、\fIentrypoint\fRオペランドは、実行可能JARファイルにバンドルされているスタンドアロンJavaアプリケーションのエントリ・ポイントとなるクラスの名前を定義します。\fIe\fRオプションが存在する場合は\fIentrypoint\fRオペランドを指定する必要があります。 +.RE +.PP +\fIjarfile\fR +.RS 4 +作成(\fIc\fR)、更新(\fIu\fR)、抽出(\fIx\fR)または表示(\fIt\fR)するファイルの名前を定義します。\fIf\fRオプションが存在する場合は\fIjarfile\fRオペランドを指定する必要があります。\fIf\fRオプションおよび\fIjarfile\fRオペランドを省略すると、\fIjar\fRコマンドに、\fIstdin\fRからのJARファイル名を受け入れるか(\fIx\fRおよび\fIt\fRの場合)、JARファイルを\fIstdout\fRに送信すること(\fIc\fRおよび\fIu\fRの場合)が指示されます。 +.sp +JARファイルを索引付け(\fIi\fR)する場合は、\fIf\fRオプションを指定しないで\fIjarfile\fRオペランドを指定します。 +.RE +.PP +\fImanifest\fR +.RS 4 +JARファイルの作成(\fIc\fR)または更新(\fIu\fR)時に、\fImanifest\fRオペランドはJARファイルの\fIMANIFEST\&.MF\fRに含める属性の名前と値を持つ既存のマニフェスト・ファイルを定義します。\fIf\fRオプションが存在する場合は\fImanifest\fRオペランドを指定する必要があります。 +.RE +.PP +\fI@arg\-file\fR +.RS 4 +\fIjar\fRコマンドを短縮または簡素化するには、別のテキスト・ファイル内の引数を指定し、接頭辞としてアットマーク(@)を付けて\fIjar\fRコマンドに渡すことができます。\fIjar\fRコマンドは、アットマーク文字で始まる引数を見つけると、そのファイルの内容を展開して引数リストに挿入します。 +.sp +引数ファイルには、\fIjar\fRコマンドのオプションと引数(引数ファイルをサポートしない起動ツールに渡される\fI\-J\fRオプションを除く)を含めることができます。ファイル内の引数は、空白または改行文字で区切ることができます。引数ファイル内のファイル名は、\fIjar\fRコマンドを実行できる現在のディレクトリに対して相対的であり、引数ファイルの場所に対しては相対的ではありません。通常はオペレーティング・システム・シェルによって展開されるアスタリスク(*)などのワイルドカードは展開されません。 +.sp +次の例は、\fIfind\fRコマンドによる現在のディレクトリ出力からのファイル名で\fIclasses\&.list\fRファイルを作成する方法を示します。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -Class\-Path: buy.jar sell.jar -.fl -\fP +find \&. \-name \*(Aq*\&.class\*(Aq \-print > classes\&.list .fi - -.LP -\f2\-i\fP オプションを使用すれば、アプリケーションのクラスの 読み込みを高速化できます。 +.if n \{\ +.RE +.\} +\fIjar\fRコマンドを実行し、\fI@arg\-file\fR構文を使用して\fIclasses\&.list\fRファイルを渡すことができます。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -% jar i main.jar -.fl -\fP +jar cf my\&.jar @classes\&.list .fi +.if n \{\ +.RE +.\} +引数ファイルはパスを指定できますが、相対パスが記述された引数ファイル内のすべてのファイル名は、渡されたパスに対して相対的ではなく、\fIjar\fRコマンドの現在の作業ディレクトリに相対的となります。たとえば、次のようになります。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +jar @dir/classes\&.list +.fi +.if n \{\ +.RE +.\} +.RE +.SH "注意" +.PP +\fIe\fR、\fIf\fRおよび\fIm\fRオプションは、\fIentrypoint\fR、\fIjarfile\fRおよび\fImanifest\fRオペランドと同じ順序でコマンドラインに出現する必要があります。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +jar cmef myManifestFile MyMainClass myFile\&.jar *\&.class +.fi +.if n \{\ +.RE +.\} +.SH "例" +.PP +\fBExample 1\fR, 冗長な出力による現在のディレクトリからのすべてのファイルの追加 +.RS 4 +.sp +.if n \{\ +.RS 4 +.\} +.nf +% ls +1\&.au Animator\&.class monkey\&.jpg +2\&.au Wave\&.class spacemusic\&.au +3\&.au at_work\&.gif -.LP -\f2INDEX.LIST\fP ファイルが \f2META\-INF\fP ディレクトリに挿入されます。この結果、アプリケーションのクラスローダーによってクラスまたはリソースの検索が行われるときに、適切な jar ファイルがダウンロードされます。 +% jar cvf bundle\&.jar * +added manifest +adding: 1\&.au(in = 2324) (out= 67)(deflated 97%) +adding: 2\&.au(in = 6970) (out= 90)(deflated 98%) +adding: 3\&.au(in = 11616) (out= 108)(deflated 99%) +adding: Animator\&.class(in = 2266) (out= 66)(deflated 97%) +adding: Wave\&.class(in = 3778) (out= 81)(deflated 97%) +adding: at_work\&.gif(in = 6621) (out= 89)(deflated 98%) +adding: monkey\&.jpg(in = 7667) (out= 91)(deflated 98%) +adding: spacemusic\&.au(in = 3079) (out= 73)(deflated 97%) +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\fBExample 2\fR, サブディレクトリからのファイルの追加 +.RS 4 +.sp +.if n \{\ +.RS 4 +.\} +.nf +% ls \-F +audio/ classes/ images/ +% jar cvf bundle\&.jar audio classes images +added manifest +adding: audio/(in = 0) (out= 0)(stored 0%) +adding: audio/1\&.au(in = 2324) (out= 67)(deflated 97%) +adding: audio/2\&.au(in = 6970) (out= 90)(deflated 98%) +adding: audio/3\&.au(in = 11616) (out= 108)(deflated 99%) +adding: audio/spacemusic\&.au(in = 3079) (out= 73)(deflated 97%) +adding: classes/(in = 0) (out= 0)(stored 0%) +adding: classes/Animator\&.class(in = 2266) (out= 66)(deflated 97%) +adding: classes/Wave\&.class(in = 3778) (out= 81)(deflated 97%) +adding: images/(in = 0) (out= 0)(stored 0%) +adding: images/monkey\&.jpg(in = 7667) (out= 91)(deflated 98%) +adding: images/at_work\&.gif(in = 6621) (out= 89)(deflated 98%) + +% ls \-F +audio/ bundle\&.jar classes/ images/ +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\fBExample 3\fR, JARのコンテンツのリスト +.RS 4 +.sp +.if n \{\ +.RS 4 +.\} +.nf +% jar tf bundle\&.jar +.fi +.if n \{\ +.RE +.\} +.sp +.if n \{\ +.RS 4 +.\} +.nf +META\-INF/ +META\-INF/MANIFEST\&.MF +audio/1\&.au +audio/2\&.au +audio/3\&.au +audio/spacemusic\&.au +classes/Animator\&.class +classes/Wave\&.class +images/monkey\&.jpg +images/at_work\&.gif +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\fBExample 4\fR, 索引の追加 +.RS 4 +株式取引のアプリケーションの相互依存クラスを、\fImain\&.jar\fR、\fIbuy\&.jar\fRおよび\fIsell\&.jar\fRの3つのJARファイルに分割する場合、\fIi\fRオプションを使用します。\fImain\&.jar\fRマニフェスト内の\fIClass\-Path\fR属性を指定する場合、\fIi\fRオプションを使用して、アプリケーションのクラス・ロードの速度を向上できます。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +Class\-Path: buy\&.jar sell\&.jar +jar i main\&.jar +.fi +.if n \{\ +.RE +.\} +\fIINDEX\&.LIST\fRファイルが\fIMETA\-INF\fRディレクトリに挿入されます。これにより、アプリケーションのクラス・ローダーによってクラスまたはリソースの検索が行われるときに、指定したJARファイルがダウンロードされるようになります。 +.sp +アプリケーションのクラス・ローダーは、このファイルに格納されている情報を使用して、効率的にクラスをロードします。ディレクトリをコピーするには、最初に\fIdir1\fR内のファイルを\fIstdout\fRに圧縮してから、\fIstdin\fRから\fIdir2\fRにパイプラインを作成して抽出します(\fI\-f\fRオプションは両方の\fIjar\fRコマンドで省略します)。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +(cd dir1; jar c \&.) | (cd dir2; jar x) +.fi +.if n \{\ +.RE +.\} +.RE .SH "関連項目" -.LP -.LP -.na -\f2JAR ファイルの概要\fP @ -.fi -http://java.sun.com/javase/6/docs/technotes/guides/jar/jarGuide.html -.LP -.LP -.na -\f2JAR ファイルの仕様\fP @ -.fi -http://java.sun.com/javase/6/docs/technotes/guides/jar/jar.html -.LP -.LP -.na -\f2JarIndex の仕様\fP @ -.fi -http://java.sun.com/javase/6/docs/technotes/guides/jar/jar.html#JAR_Index -.LP -.LP -.na -\f2JAR チュートリアル\fP @ -.fi -http://download.oracle.com/javase/tutorial/deployment/jar/index.html -.LP -.LP -pack200(1) -.LP - +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +pack200(1)\&. +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +http://docs\&.oracle\&.com/javase/tutorial/deployment/jar/index\&.htmlにある +JavaチュートリアルのJARに関する項 +.RE +.br +'pl 8.5i +'bp diff --git a/jdk/src/solaris/doc/sun/man/man1/ja/jarsigner.1 b/jdk/src/solaris/doc/sun/man/man1/ja/jarsigner.1 index 739d051356e..fa0799a8c60 100644 --- a/jdk/src/solaris/doc/sun/man/man1/ja/jarsigner.1 +++ b/jdk/src/solaris/doc/sun/man/man1/ja/jarsigner.1 @@ -1,1660 +1,1071 @@ -." 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 -." 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. -." -.TH jarsigner 1 "07 May 2011" - -.LP -.SH "名前" -jarsigner \- JAR 署名および検証ツール -.LP -.LP -Java ARchive (JAR) ファイルの署名を生成し、署名付き JAR ファイルの署名を検証します。 -.LP -.SH "形式" -.LP +'\" t +.\" Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved. +.\" Title: jarsigner +.\" Language: English +.\" Date: 2013年11月21日 +.\" SectDesc: セキュリティ・ツール +.\" Software: JDK 8 +.\" Arch: 汎用 +.\" +.\" 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. +.\" +.pl 99999 +.TH "jarsigner" "1" "2013年11月21日" "JDK 8" "セキュリティ・ツール" +.\" ----------------------------------------------------------------- +.\" * Define some portability stuff +.\" ----------------------------------------------------------------- +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.\" http://bugs.debian.org/507673 +.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" ----------------------------------------------------------------- +.\" * set default formatting +.\" ----------------------------------------------------------------- +.\" disable hyphenation +.nh +.\" disable justification (adjust text to left margin only) +.ad l +.\" ----------------------------------------------------------------- +.\" * MAIN CONTENT STARTS HERE * +.\" ----------------------------------------------------------------- +.SH "NAME" +jarsigner \- Javaアーカイブ(JAR)ファイルに対して署名および検証を行います。 +.SH "概要" +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -\fP\f3jarsigner\fP [ options ] jar\-file alias -.fl -\f3jarsigner\fP \-verify [ options ] jar\-file [alias...] -.fl +\fIjarsigner\fR [ \fIoptions\fR ] \fIjar\-file\fR \fIalias\fR .fi - -.LP -.LP -jarsigner の \-verify コマンドでは、JAR ファイル名のあとに 0 個以上のキーストア別名を指定できます。キーストア別名が指定された場合、jarsigner は、JAR ファイル内の各署名付きエンティティーの検証に使用される証明書がキーストア別名のいずれかに一致することをチェックします。別名は、\-keystore で指定されたキーストア内またはデフォルトのキーストア内に定義されます。 -.LP +.if n \{\ +.RE +.\} +.sp +.if n \{\ +.RS 4 +.\} +.nf +\fIjarsigner\fR \fI\-verify\fR [ \fIoptions\fR ] \fIjar\-file\fR [\fIalias \&.\&.\&.\fR] +.fi +.if n \{\ +.RE +.\} +.PP +\fIoptions\fR +.RS 4 +コマンドライン・オプション。オプションを参照してください。 +.RE +.PP +\-verify +.RS 4 +\fI\-verify\fRオプションでは、JARファイル名の後に0個以上のキーストア別名を指定できます。\fI\-verify\fRオプションが指定された場合、\fIjarsigner\fRコマンドでは、JARファイル内の各署名付きエンティティの検証に使用される証明書が、いずれかのキーストア別名に一致することをチェックします。別名は、\fI\-keystore\fRで指定されたキーストア内またはデフォルトのキーストア内に定義されます。 +.sp +\fI\-strict\fRオプションも指定した場合、\fIjarsigner\fRコマンドにより重大な警告が検出されると、メッセージ「jarが検証されました。署名者エラー」が表示されます。 +.RE +.PP +\fIjar\-file\fR +.RS 4 +署名されるJARファイル。 +.sp +\fI\-strict\fRオプションも指定した場合、\fIjarsigner\fRコマンドにより重大な警告が検出されると、メッセージ「jarは署名されました \- 署名者エラーがあります。」というメッセージが表示されます。 +.RE +.PP +\fIalias\fR +.RS 4 +別名は、\fI\-keystore\fRで指定されたキーストア内またはデフォルトのキーストア内に定義されます。 +.RE .SH "説明" -.LP -.LP -\f3jarsigner\fP ツールは、次の 2 つの目的で使用します。 -.LP -.RS 3 -.TP 3 -1. -Java ARchive (JAR) ファイルに署名を付ける -.TP 3 -2. -署名付き JAR ファイルの署名と整合性を検証する +.PP +\fIjarsigner\fRツールには、次の2つの目的があります。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +Javaアーカイブ(JAR)ファイルに署名する目的。 .RE - -.LP -.LP -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 -署名付きのデータは変更できない。 データが変更された場合は、その署名によってデータが本物ではないことが検証される +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +署名付きJARファイルの署名と整合性を検証する目的。 .RE - -.LP -.LP -ファイルに対してエンティティーの署名を生成するには、まず、エンティティーは、そのエンティティーに関連する公開鍵と非公開鍵のペアを持つ必要があります。また、公開鍵を認証する 1 つまたは複数の証明書も必要です。「証明書」とは、あるエンティティーが発行したデジタル署名付きの文書で、別なエンティティーの公開鍵が特定の値であることを証明しています。 -.LP -.LP -\f3jarsigner\fP は、「キーストア」に含まれる鍵と証明書情報を使って、JAR ファイルのデジタル署名を生成します。キーストアは、非公開鍵と、非公開鍵に関連付けられた X.509 証明書チェーンが収められたデータベースです。キーストアの作成と管理には、keytool(1) ユーティリティーを使います。 -.LP -.LP -\f3jarsigner\fP は、エンティティーの非公開鍵を使って署名を生成します。署名付き JAR ファイルには特に、ファイルの署名に使用された非公開鍵に対応する公開鍵に対する、キーストア内の証明書のコピーが含まれています。\f3jarsigner\fP は、署名付き JAR ファイル内 (署名ブロックファイル内) にある証明書を使用してそのファイルのデジタル署名を検証できます。 -.LP -.LP -\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 ファイルに署名を付けるときに自動的に作成されます。 -.LP -.LP -デフォルトでは、\f3jarsigner\fP は JAR (または ZIP) ファイルに「署名」を付けます。署名付き JAR ファイルを「検証」する場合は、 \f2\-verify\fP オプションを指定します。 -.LP -.SS -キーストアの別名 -.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 \fP\f4<キーストアのパスワード>\fP\f3 -.fl - \-keypass \fP\f4<非公開鍵のパスワード>\fP\f3 MyJARFile.jar duke -.fl -\fP -.fi - -.LP -.LP -キーストアはパスワードで保護されているので、ストアのパスワードを指定する必要があります。コマンド行でストアのパスワードを指定しないと、パスワードの入力を求められます。同様に、非公開鍵もキーストア内でパスワードによって保護されているため、非公開鍵のパスワードを指定する必要があります。コマンド行で非公開鍵のパスワードを指定していない、また、指定したパスワートが保存されているパスワードと違っている場合には、非公開鍵のパスワードの入力を求められます。 -.LP -.SS -キーストアの場所 -.LP -.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 -\f2「Java 暗号化アーキテクチャー用プロバイダの実装方法」\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 -\f2「KeyTool 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 -SHA1 ダイジェストアルゴリズムを使った DSA (デジタル署名アルゴリズム) -.TP 2 -o -SHA256 ダイジェストアルゴリズムを使用した RSA アルゴリズム -.TP 2 -o -SHA256 と ECDSA (楕円曲線デジタル署名アルゴリズム) を使用した EC (楕円曲線) 暗号方式アルゴリズム +.PP +JAR機能を使用すると、クラス・ファイル、イメージ、サウンドおよびその他のデジタル・データを単一のファイルにパッケージ化できるので、ファイルを迅速かつ容易に配布できます。\fIjar\fRという名前のツールを使用して、開発者はJARファイルを作成できます。(技術的な観点から言えば、すべてのZIPファイルもJARファイルとみなすことができます。ただし、\fIjar\fRコマンドによって作成されたJARファイル、または\fIjarsigner\fRコマンドによって処理されたJARファイルには、\fIMETA\-INF/MANIFEST\&.MF\fRファイルも含まれています。) +.PP +デジタル署名は、なんらかのデータ(署名の対象となるデータ)、およびエンティティ(人、会社など)の秘密鍵から計算されるビットの文字列です。手書きの署名同様、デジタル署名には多くの利点があります。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +署名の生成に使用された秘密鍵に対応する公開鍵を使用する計算によって、それが本物であることを検証できます。 .RE - -.LP -.LP -具体的には、署名者の公開鍵と非公開鍵が 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 を拡張子に持つ署名ブロックファイル +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +秘密鍵が他人に知られない限り、デジタル署名の偽造は不可能です。 .RE - -.LP -.LP -これら 2 つのファイルのベースファイル名は、 \f2\-sigFile\fP オプションの値から作成されます。たとえば、次のようにオプションを指定したとします。 -.LP +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +これは、署名が付いたデータの機能であり、他のデータの署名となるように要求できません。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +署名付きデータは変更できません。データが変更された場合、署名によって本物であると検証できません。 +.RE +.PP +ファイルに対してエンティティの署名を生成するには、まず、エンティティは、そのエンティティに関連する公開鍵/秘密鍵のペアと、公開鍵を認証する1つ以上の証明書を持つ必要があります。証明書とは、あるエンティティからのデジタル署名付きの文書で、別のエンティティの公開鍵が特定の値を持つことを示しています。 +.PP +\fIjarsigner\fRコマンドは、キーストアからの鍵と証明書情報を使用して、JARファイルのデジタル署名を生成します。キーストアは、秘密鍵、および対応する公開鍵を認証する、秘密鍵に関連したX\&.509証明書チェーンのデータベースです。\fIkeytool\fRコマンドを使用して、キーストアを作成および管理します。 +.PP +\fIjarsigner\fRコマンドでは、エンティティの秘密鍵を使用して署名を生成します。署名付きJARファイルには、特に、ファイルへの署名に使用する秘密鍵に対応する公開鍵のキーストアからの証明書のコピーが含まれます。\fIjarsigner\fRコマンドでは、内部(署名ブロック・ファイル内)の証明書を使用して、署名付きJARファイルのデジタル署名を検証できます。 +.PP +\fIjarsigner\fRコマンドでは、署名証明書の有効期間中にJARファイルが署名されたされたかどうかをシステムやデプロイヤ(Java Plug\-inを含む)がチェックできる、タイムスタンプを含む署名を生成できます。さらに、APIを使用すると、アプリケーションでタイムスタンプ情報を取得できます。 +.PP +現時点では、\fIjarsigner\fRコマンドでは、\fIjar\fRコマンドまたはZIPファイルによって作成されたJARファイルのみに署名できます。JARファイルはZIPファイルと同じですが、JARファイルには\fIMETA\-INF/MANIFEST\&.MF\fRファイルも含まれている点が異なります。\fIMETA\-INF/MANIFEST\&.MF\fRファイルは、\fIjarsigner\fRコマンドによってZIPファイルに署名する際に作成されます。 +.PP +デフォルトの\fIjarsigner\fRコマンドの動作では、JARまたはZIPファイルに署名します。\fI\-verify\fRオプションを使用して、署名付きJARファイルを検証します。 +.PP +\fIjarsigner\fRコマンドは、署名または検証の後に署名者の証明書の検証も試行します。検証エラーまたはその他の問題が発生すると、コマンドにより警告メッセージが生成されます。\fI\-strict\fRオプションを指定した場合、コマンドにより重大な警告がエラーとして処理されます。エラーと警告を参照してください。 +.SS "キーストアの別名" +.PP +キーストアのすべてのエンティティは、一意の別名を使用してアクセスされます。 +.PP +\fIjarsigner\fRコマンドを使用してJARファイルに署名するときは、署名の生成に必要な秘密鍵を含むキーストア・エントリの別名を指定する必要があります。たとえば、次のコマンドでは、\fIworking\fRディレクトリの\fImystore\fRという名前のキーストアに含まれる別名\fIduke\fRに関連付けられた秘密鍵を使用して、\fIMyJARFile\&.jar\fRという名前のJARファイルに署名します。出力ファイルは指定されていないため、\fIMyJARFile\&.jar\fRは署名付きのJARファイルによって上書きされます。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -\-sigFile MKSIGN -.fl -\fP +jarsigner \-keystore /working/mystore \-storepass <keystore password> + \-keypass <private key password> MyJARFile\&.jar duke .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 ダイジェストの値 +.if n \{\ .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 ファイル内にエントリを持つ各ファイルを読み込みます。読み込み中にファイルのダイジェストを計算し、結果をマニフェストセクション内の該当するファイルのダイジェストと比較します。2 つのダイジェストは同じでなければならず、そうでない場合は検証が失敗します。 -.RE - -.LP -.LP -検証プロセスの途中でなんらかの重大な検証エラーが発生した場合、検証プロセスは中止され、セキュリティー例外がスローされます。スローされたセキュリティー例外は、\f3jarsigner\fP がキャッチして表示します。 -.LP -.SS -1 つの JAR ファイルを対象とする複数の署名 -.LP -.LP -1 つの JAR ファイルに対して \f3jarsigner\fP ツールを複数回実行し、実行のたびに、異なるユーザーの別名を指定すれば、JAR ファイルに複数のユーザーの署名を付けることができます。 -.LP +.\} +.PP +キーストアはパスワードで保護されているので、ストアのパスワードを指定する必要があります。コマンドラインで指定しないと、入力を求められます。同様に、秘密鍵もキーストア内でパスワードによって保護されているため、秘密鍵のパスワードを指定する必要があります。コマンドラインでパスワードを指定していない場合、または指定したパスワートが保存されているパスワードと同じではない場合は、パスワードの入力を求められます。 +.SS "キーストアの場所" +.PP +\fIjarsigner\fRコマンドには、使用するキーストアのURLを指定する\fI\-keystore\fRオプションがあります。キーストアはデフォルトで、\fIuser\&.home\fRシステム・プロパティで決まるユーザーのホーム・ディレクトリの\fI\&.keystore\fRという名前のファイル内に格納されます。 +.PP +Oracle Solarisシステムの場合、\fIuser\&.home\fRは、ユーザーのホーム・ディレクトリにデフォルト設定されます。 +.PP +\fI\-keystore\fRオプションからの入力ストリームは、\fIKeyStore\&.load\fRメソッドに渡されます。URLとして\fINONE\fRが指定されている場合は、nullのストリームが\fIKeyStore\&.load\fRメソッドに渡されます。\fINONE\fRは、\fIKeyStore\fRクラスがファイルベースではない場合、たとえば、ハードウェア・トークン・デバイスに置かれている場合に指定します。 +.SS "キーストアの実装" +.PP +\fIjava\&.security package\fRで提供されている\fIKeyStore\fRクラスは、キーストア内の情報へのアクセスおよび情報の変更を行うための、明確に定義された多くのインタフェースを提供します。複数の異なる固定実装を指定することができ、各実装は特定のタイプのキーストアを対象とします。 +.PP +現在、キーストアの実装を使用する2つのコマンドライン・ツール(\fIkeytool\fRと\fIjarsigner\fR)、およびポリシー・ツールという名前の1つのGUIベースのツールがあります。\fIKeyStore\fRクラスは公開されているため、JDKユーザーは、それを使用する他のセキュリティ・アプリケーションを書き込むことができます。 +.PP +Oracleが提供する組込みのデフォルトの実装があります。これは、JKSという名前の独自のキーストア・タイプ(形式)を使用するもので、キーストアをファイルとして実装しています。組込みの実装では、各秘密鍵は個別のパスワードによって保護され、キーストア全体の整合性は(秘密鍵とは別の)パスワードによって保護されます。 +.PP +キーストアの実装はプロバイダベースで、つまり、\fIKeyStore\fRクラスにより提供されるアプリケーション・インタフェースは、サービス・プロバイダ・インタフェース(SPI)に関して実装されます。対応する\fIKeystoreSpi\fR抽象クラスがあり、これも\fIjava\&.security package\fRに含まれています。このクラスが、プロバイダが実装する必要のあるサービス・プロバイダ・インタフェースのメソッドを定義しています。ここで、プロバイダとは、Java Security APIによってアクセス可能なサービスのサブセットに対し、その固定実装を提供するパッケージまたはパッケージの集合のことです。キーストアの実装を提供するには、http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/security/crypto/HowToImplAProvider\&.htmlにある +Java暗号化アーキテクチャのプロバイダの実装方法で説明しているように、クライアントはプロバイダを実装し、\fIKeystoreSpi\fRサブクラスの実装を提供する必要があります。 +.PP +アプリケーションでは、\fIKeyStore\fRクラスの\fIgetInstance\fRファクトリ・メソッドを使用して、様々なプロバイダから異なるタイプのキーストアの実装を選択できます。キーストアのタイプは、キーストア情報の格納形式とデータ形式を定義するとともに、キーストア内の秘密鍵とキーストア自体の整合性を保護するために使用されるアルゴリズムを定義します。異なるタイプのキーストアの実装には、互換性はありません。 +.PP +\fIjarsigner\fRおよび\fIpolicytool\fRコマンドは、URLを使用して指定できる任意の場所からファイルベースのキーストアを読み取ることができます。また、これらのコマンドは、Windows上のMSCAPIおよびすべてのプラットフォーム上のPKCS11で提供されるような非ファイルベースのキーストアを読み取ることができます。 +.PP +\fIjarsigner\fRコマンドおよび\fIkeytool\fRコマンドの場合、\fI\-storetype\fRオプションを使用して、コマンドラインでキーストアのタイプを指定できます。ポリシー・ツールの場合、\fB「キーストア」\fRメニューの\fB「編集」\fRコマンドを使用して、キーストアのタイプを指定できます。 +.PP +ユーザーがキーストアのタイプを明示的に指定しなかった場合、セキュリティ・プロパティ・ファイルで指定された\fIkeystore\&.type\fRプロパティの値に基づいて、ツールによってキーストアの実装が選択されます。このセキュリティ・プロパティ・ファイルは\fIjava\&.security\fRと呼ばれ、JDKセキュリティ・プロパティ・ディレクトリ\fIjava\&.home/lib/security\fR内に存在しています。ここで、\fIjava\&.home\fRは実行時環境のディレクトリです。\fIjre\fRディレクトリは、JDKまたはJava Runtime Environment (JRE)の最上位のディレクトリにあります。 +.PP +各ツールは、\fIkeystore\&.type\fRの値を取得し、そのタイプのキーストアを実装しているプロバイダが見つかるまで、インストールされているすべてのプロバイダを調べます。目的のプロバイダが見つかると、そのプロバイダからのキーストアの実装を使用します。 +.PP +\fIKeyStore\fRクラスに定義されているstaticメソッド\fIgetDefaultType\fRを使用すると、アプリケーションやアプレットから\fIkeystore\&.type\fRプロパティの値を取得できます。次のコードの行では、\fIkeystore\&.type property\fRで指定された、デフォルトのキーストア・タイプのインスタンスを作成します。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl - jarsigner myBundle.jar susan -.fl - jarsigner myBundle.jar kevin -.fl -\fP +KeyStore keyStore = KeyStore\&.getInstance(KeyStore\&.getDefaultType()); .fi - -.LP -.LP -JAR ファイルが複数回署名されている場合、その JAR ファイルには .SF ファイルと .DSA ファイルの対が複数含まれることになります。 .SF ファイルと .DSA ファイルの対は、1 回の署名に対して 1 つ作成されます。したがって、上の例で出力される JAR ファイルには、次の名前を持つファイルが含まれます。 -.LP +.if n \{\ +.RE +.\} +.PP +デフォルトのキーストア・タイプは、\fIjks\fR +(Oracleが提供する独自のタイプのキーストアの実装)です。これは、セキュリティ・プロパティ・ファイル内の次の行によって指定されています。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl - SUSAN.SF -.fl - SUSAN.DSA -.fl - KEVIN.SF -.fl - KEVIN.DSA -.fl -\fP +keystore\&.type=jks .fi - -.LP -.LP -注: JAR ファイルでは、JDK 1.1 の \f3javakey\fP ツールで生成された署名と \f3jarsigner\fP で生成された署名が混在できます。つまり、すでに \f3javakey\fP を使って署名が付けられている JAR ファイルに、\f3jarsigner\fP を使って署名を付けることができます。 -.LP +.if n \{\ +.RE +.\} +.PP +キーストアのタイプの指定では、大文字と小文字は区別されません。たとえば、\fIJKS\fRは\fIjks\fRと同じになります。 +.PP +ツールでデフォルト以外のキーストアの実装を使用するには、その行を変更して別のキーストアのタイプを指定します。たとえば、\fIpkcs12\fRと呼ばれるキーストアのタイプのキーストアの実装を提供するプロバイダ・パッケージがある場合、行を次のように変更します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +keystore\&.type=pkcs12 +.fi +.if n \{\ +.RE +.\} +.PP +\fB注意:\fR +PKCS 11プロバイダ・パッケージを使用する場合、http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/security/p11guide\&.htmlにある +Java PKCS #11リファレンス・ガイドの「KeyTool」および「JarSigner」を参照してください。 +.SS "サポートされるアルゴリズム" +.PP +デフォルトで、\fIjarsigner\fRコマンドでは次のいずれかのアルゴリズムを使用してJARファイルに署名します。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +SHA1ダイジェスト・アルゴリズムを使用したデジタル署名アルゴリズム(DSA) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +SHA256ダイジェスト・アルゴリズムを使用したRSAアルゴリズム。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +SHA256と楕円曲線デジタル署名アルゴリズム(ECDSA)を使用した楕円曲線(EC)暗号方式アルゴリズム +.RE +.PP +署名者の公開鍵と秘密鍵がDSA鍵である場合、\fIjarsigner\fRは\fISHA1withDSA\fRアルゴリズムを使用してJARファイルに署名します。署名者の鍵がRSA鍵である場合、\fIjarsigner\fRは\fISHA256withRSA\fRアルゴリズムを使用してJARファイルに署名しようとします。署名者の鍵がEC鍵である場合、\fIjarsigner\fRは\fISHA256withECDSA\fRアルゴリズムを使用してJARファイルに署名します。 +.PP +これらのデフォルトの署名アルゴリズムは、\fI\-sigalg\fRオプションを使用してオーバーライドできます。 +.SS "署名付きJARファイル" +.PP +\fIjarsigner\fRコマンドを使用してJARファイルに署名する場合、出力される署名付きJARファイルは入力JARファイルと同じですが、次の2つの追加ファイルがMETA\-INFディレクトリに置かれる点が異なります。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fI\&.SF\fR拡張子の付いた署名ファイル +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fI\&.DSA\fR、\fI\&.RSA\fRまたは\fI\&.EC\fR拡張子の付いた署名ブロック・ファイル +.RE +.PP +これら2つのファイルのベース・ファイル名は、\fI\-sigFile\fRオプションの値から作成されます。たとえば、オプションが\fI\-sigFile MKSIGN\fRの場合、ファイルは\fIMKSIGN\&.SF\fRおよび\fIMKSIGN\&.DSA\fRという名前になります。 +.PP +コマンドラインで\fI\-sigfile\fRオプションを指定しなかった場合、\fI\&.SF\fRファイルと\fI\&.DSA\fRファイルのベース・ファイル名は、コマンドラインで指定された別名の先頭の8文字をすべて大文字に変換したものになります。別名が8文字未満の場合は、別名がそのまま使用されます。別名に、署名ファイル名で使用できない文字が含まれている場合、ファイル名の作成時に、該当する文字が下線(_)文字に変換されます。有効な文字は、アルファベット、数字、下線およびハイフンです。 +署名ファイル.PP +署名ファイル(\fI\&.SF\fRファイル)は、\fIjarsigner\fRコマンドを使用してファイルに署名する際にJARファイルに常に含まれるマニフェスト・ファイルと似ています。JARファイルに含まれているソース・ファイルごとに、\fI\&.SF\fRファイルには、マニフェスト・ファイルにあるような、次に示す3つの行があります。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +ファイル名 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +ダイジェスト・アルゴリズム(SHA)の名前 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +SHAダイジェストの値 +.RE +.PP +マニフェスト・ファイルでは、各ソース・ファイルのSHAダイジェストの値は、ソース・ファイルのバイナリ・データのダイジェスト(ハッシュ)になります。\fI\&.SF\fRファイルでは、指定されたソース・ファイルのダイジェストの値は、ソース・ファイルのマニフェスト・ファイル内のその3行のハッシュになります。 +.PP +署名ファイルには、デフォルトで、マニフェスト・ファイル全体のハッシュが格納されたヘッダーが含まれています。ヘッダーにはマニフェスト・ヘッダーのハッシュも含まれています。ヘッダーが存在すると、検証の最適化が有効になります。JARファイルの検証を参照してください。 +署名ブロック・ファイル.PP +\fI\&.SF\fRファイルには署名が付けられ、署名は署名ブロック・ファイルに置かれます。このファイルには、署名に使用された秘密鍵に対応する公開鍵を認証するキーストアからの証明書または証明書チェーンも、内部でエンコードされて含まれています。ファイルの拡張子は、使用されるダイジェスト・アルゴリズムに応じて、\fI\&.DSA\fR、\fI\&.RSA\fRまたは\fI\&.EC\fRになります。 +.SS "署名タイムスタンプ" +.PP +\fIjarsigner\fRコマンドでは、JARファイルの署名時に署名タイムスタンプを生成および保存できます。さらに、\fIjarsigner\fRは代替署名機構をサポートします。この動作は省略可能で、署名時に次の各オプションによって制御されます。オプションを参照してください。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-tsa \fIurl\fR +\-tsacert \fIalias\fR +\-altsigner \fIclass\fR +\-altsignerpath \fIclasspathlist\fR +\-tsapolicyid \fIpolicyid\fR +.fi +.if n \{\ +.RE +.\} +.SS "JARファイルの検証" +.PP +JARファイルの検証が成功するのは、署名が有効であり、かつ署名の生成以降にJARファイル内のどのファイルも変更されていない場合です。JARファイルの検証は、次の手順で行われます。 +.sp +.RS 4 +.ie n \{\ +\h'-04' 1.\h'+01'\c +.\} +.el \{\ +.sp -1 +.IP " 1." 4.2 +.\} +\fI\&.SF\fRファイルの署名を検証します。 +.sp +検証では、各署名ブロック(\fI\&.DSA\fR)ファイルに格納された署名が、証明書(または証明書チェーン)も\fI\&.DSA\fRファイルに示される公開鍵に対応する秘密鍵を使用して生成されたことを確認します。また、署名が対応する署名(\fI\&.SF\fR)ファイルの有効な署名であることが確認され、それにより、\fI\&.SF\fRファイルが改ざんされていないことも確認されます。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04' 2.\h'+01'\c +.\} +.el \{\ +.sp -1 +.IP " 2." 4.2 +.\} +\fI\&.SF\fRファイル内の各エントリに示されるダイジェストを、マニフェスト内の対応する各セクションと突きあわせて検証します。 +.sp +\fI\&.SF\fRファイルには、マニフェスト・ファイル全体のハッシュが格納されたヘッダーがデフォルトで含まれています。ヘッダーが存在する場合、検証では、ヘッダー内のハッシュがマニフェスト・ファイルのハッシュと一致するかどうかを確認するためにチェックできます。一致する場合、検証は次の手順に進みます。 +.sp +一致しない場合、\fI\&.SF\fRファイル内の各ソース・ファイル情報セクションのハッシュが、マニフェスト・ファイル内の対応するセクションのハッシュと一致することを確認するために、あまり最適化されていない検証が必要になります。署名ファイルを参照してください。 +.sp +\fI\&.SF\fRファイルのヘッダーに格納されたマニフェスト・ファイルのハッシュが、現在のマニフェスト・ファイルのハッシュに一致しない理由の1つは、署名および\fI\&.SF\fRファイルの生成後に、(\fIjar\fRツールを使用して)1つ以上のファイルがJARファイルに追加されたことです。\fIjar\fRツールを使用してファイルを追加した場合、新しいファイル用のセクションが追加されることにより、マニフェスト・ファイルは変更されますが、\fI\&.SF\fRファイルは変更されません。検証がまだ成功しているとみなされるのは、署名の生成以降にJARファイル内のどのファイルも変更されていない場合です。これが発生するのは、\fI\&.SF\fRファイルのヘッダー以外のセクションのハッシュが、マニフェスト・ファイル内の対応するセクションのハッシュと一致する場合です。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04' 3.\h'+01'\c +.\} +.el \{\ +.sp -1 +.IP " 3." 4.2 +.\} +\fI\&.SF\fRファイル内にエントリを持つJARファイル内の各ファイルを読み取ります。読取り中にファイルのダイジェストを計算し、結果をマニフェスト・セクション内のこのファイルのダイジェストと比較します。ダイジェストは同じである必要があり、そうでない場合は検証が失敗します。 +.sp +検証プロセス中になんらかの重大な検証エラーが発生した場合、そのプロセスは停止され、セキュリティ例外がスローされます。\fIjarsigner\fRコマンドでは、例外を捕捉および表示します。 +.RE +.PP +\fB注意:\fR +追加の警告(または、\fI\-strict\fRオプションを指定した場合はエラー)はすべて読む必要があります。同様に、証明が信頼できるかを決定するために、(\fI\-verbose\fRおよび\fI\-certs\fRオプションを指定して)証明書の内容も読む必要があります。 +.SS "1つのJARファイルを対象とする複数の署名" +.PP +次のように、\fIjarsigner\fRコマンドをファイルで複数回実行し、実行のたびに異なるユーザーの別名を指定することによって、1つのJARファイルに複数のユーザーの署名を付けることができます。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +jarsigner myBundle\&.jar susan +jarsigner myBundle\&.jar kevin +.fi +.if n \{\ +.RE +.\} +.PP +JARファイルが複数回署名されている場合、そのJARファイルには、複数の\fI\&.SF\fRファイルと\fI\&.DSA\fRファイルが含まれており、1回の署名に対して1つのペアとなります。前述の例では、出力JARファイルには、次の名前のファイルが含まれています。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +SUSAN\&.SF +SUSAN\&.DSA +KEVIN\&.SF +KEVIN\&.DSA +.fi +.if n \{\ +.RE +.\} .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 ファイルに署名を付ける場合だけである +.PP +次の各項では、様々な\fIjarsigner\fRオプションについて説明します。次の標準に注意してください。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +どのオプション名にも先頭にマイナス記号(\-)が付きます。 .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 として扱われます。たとえば、次のように指定できます。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +オプションは任意の順序で指定できます。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +イタリック体または下線付きの項目(オプションの値)の実際の値は、指定する必要があります。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fI\-storepass\fR、\fI\-keypass\fR、\fI\-sigfile\fR、\fI\-sigalg\fR、\fI\-digestalg\fR、\fI\-signedjar\fRおよびTSA関連のオプションを使用できるのは、JARファイルに署名する場合のみです。署名付きJARファイルを検証する場合ではありません。\fI\-keystore \fRオプションは、JARファイルの署名および検証に関連します。また、別名は、JARファイルの署名および検証時に指定します。 +.RE +.PP +\-keystore \fIurl\fR +.RS 4 +キーストアの場所を示すURLを指定します。これにより、\fIuser\&.home\fRシステム・プロパティで決定されたユーザーのホーム・ディレクトリ内のファイル\fI\&.keystore\fRにデフォルト設定されます。 +.sp +キーストアは署名時には必要です。デフォルトのキーストアが存在しない場合、またはデフォルト以外のキーストアを使用する場合は、キーストアを明示的に指定する必要があります。 +.sp +検証するときはキーストアは必要ありません。ただし、キーストアが指定されているか、あるいはデフォルトのキーストアが存在していて、さらに\fI\-verbose\fRオプションも指定されていた場合、JARファイルの検証に使用される証明書がそのキーストアに1つでも含まれているかどうかに関する追加情報が出力されます。 +.sp +\fI\-keystore\fR引数には、URLではなくファイル名とパスを指定でき、この場合、ファイル: URLと同じように処理されます。たとえば、次にように指定すると同等になります。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl - \-keystore \fP\f4filePathAndName\fP\f3 -.fl -\fP +\-keystore \fIfilePathAndName\fR +\-keystore file:\fIfilePathAndName\fR .fi -.LP -これは、次の指定と同じものとして扱われます。 +.if n \{\ +.RE +.\} +(JREの\fI$JAVA_HOME/lib/security directory\fRにある) +\fIjava\&.security\fRセキュリティ・プロパティ・ファイル内でSun PKCS #11プロバイダが構成された場合、\fIkeytool\fRおよび\fIjarsigner\fRツールはPKCS#11トークンに基づいて動作できます。次のオプションを指定します。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl - \-keystore file:\fP\f4filePathAndName\fP\f3 -.fl -\fP +\-keystore NONE +\-storetype PKCS11 .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 +.if n \{\ .RE -.LP -たとえば、次のコマンドは、設定された PKCS#11 トークンの内容を一覧表示します。 +.\} +たとえば、次のコマンドは、構成されたPKCS#11トークンの内容を一覧表示します。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl - jarsigner \-keystore NONE \-storetype PKCS11 \-list -.fl - -.fl -\fP +keytool \-keystore NONE \-storetype PKCS11 \-list .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 という名前のファイルからパスワードを取得する +.if n \{\ .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\-sigfile\fP オプションを指定しなかった場合、.SF ファイルと .DSA ファイルのベースファイル名は、コマンド行で指定された別名の先頭の 8 文字をすべて大文字に変換したものになります。別名が 8 文字未満の場合は、別名がそのまま使われます。別名の中に、署名ファイル名に使用できない文字が含まれている場合は、該当する文字を下線 (_) に置き換えてファイル名が作成されます。 -.TP 3 -\-sigalg algorithm -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、SHA256withRSA、SHA256withECDSA のいずれかが使用されます。指定されたアルゴリズムの実装を提供するプロバイダが静的にインストールされているか、あるいはユーザーがそのようなプロバイダを \f2\-providerClass\fP オプションを使って指定する必要があります。そうでない場合、コマンドの実行が失敗します。 -.TP 3 -\-digestalg algorithm -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を参照してください。このオプションを指定しなかった場合、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 のインスタンス) である場合は、署名者の識別名 +.PP +\-storetype \fIstoretype\fR +.RS 4 +インスタンスを生成するキーストアのタイプを指定します。デフォルトのキーストア・タイプは、セキュリティ・プロパティ・ファイル内の\fIkeystore\&.type\fRプロパティの値で指定されたタイプです。この値は、\fIjava\&.security\&.KeyStore\fRのstatic +\fIgetDefaultType\fRメソッドによって返されます。 +.sp +\fI\-storepass\fRオプションを使用して、PCKS #11トークンのPINを指定することもできます。何も指定しない場合、\fIkeytool\fRおよび\fIjarsigner\fRコマンドによって、トークンPINの指定を求められます。トークンに保護された認証パス(専用のPINパッドや生体読取り機など)がある場合、\fI\-protected\fRオプションを指定する必要がありますが、パスワード・オプションは指定できません。 .RE -.LP -キーストアの確認も行われます。コマンド行でキーストアの値が指定されていない場合、デフォルトのキーストアファイルがあれば、検査されます。署名者の公開鍵の証明書がキーストア内のエントリと一致した場合は、次の情報も表示されます。 -.RS 3 -.TP 2 -o -署名者に該当するキーストアエントリの別名。この別名は括弧で囲まれます。 ただし、キーストアではなく JDK 1.1 のアイデンティティーデータベースに由来する署名者の場合は、括弧ではなく大括弧で囲まれます。 +.PP +\-storepass[:env | :file] \fIargument\fR +.RS 4 +キーストアにアクセスするのに必要なパスワードを指定します。これが必要なのは、JARファイルに署名を付けるときのみです(検証するときには不要です)。その場合、\fI\-storepass\fRオプションをコマンドラインで指定しないと、パスワードの入力を求められます。 +.sp +修飾子\fIenv\fRまたは\fIfile\fRが指定されていない場合、パスワードの値は\fIargument\fRになります。それ以外の場合、パスワードは次のようにして取得されます。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fIenv\fR: +\fIargument\fRという名前の環境変数からパスワードを取得します。 .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 キーストアを一覧表示するコマンドの例を次に示します。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fIfile\fR: +\fIargument\fRという名前のファイルからパスワードを取得します。 +.RE +.sp +\fB注意:\fR +テストを目的とする場合またはセキュリティ保護されたシステムを使用している場合以外は、コマンドラインやスクリプトでパスワードを指定しないでください。 +.RE +.PP +\-keypass [:env | :file] \fIargument\fR +.RS 4 +コマンドラインで指定された別名に対応するキーストア・エントリの秘密鍵を保護するのに使用するパスワードを指定します。\fIjarsigner\fRを使用してJARファイルに署名を付けるときは、パスワードが必要です。コマンドラインでパスワードが指定されておらず、必要なパスワードがストアのパスワードと異なる場合は、パスワードの入力を求められます。 +.sp +修飾子\fIenv\fRまたは\fIfile\fRが指定されていない場合、パスワードの値は\fIargument\fRになります。それ以外の場合、パスワードは次のようにして取得されます。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fIenv\fR: +\fIargument\fRという名前の環境変数からパスワードを取得します。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fIfile\fR: +\fIargument\fRという名前のファイルからパスワードを取得します。 +.RE +.sp +\fB注意:\fR +テストを目的とする場合またはセキュリティ保護されたシステムを使用している場合以外は、コマンドラインやスクリプトでパスワードを指定しないでください。 +.RE +.PP +\-sigfile \fIfile\fR +.RS 4 +生成された\fI\&.SF\fRファイルおよび\fI\&.DSA\fRファイルに使用するベース・ファイル名を指定します。たとえば、ファイルが\fIDUKESIGN\fRの場合、生成される\fI\&.SF\fRおよび\fI\&.DSA\fRファイルは、\fIDUKESIGN\&.SF\fRおよび\fIDUKESIGN\&.DSA\fRという名前で、署名付きJARファイルの\fIMETA\-INF\fRディレクトリに格納されます。 +.sp +ファイル内の文字は、セット\fIa\-zA\-Z0\-9_\-\fRから指定される必要があります。アルファベット、数字、下線およびハイフン文字のみを使用できます。\fI\&.SF\fRおよび\fI\&.DSA\fRのファイル名では、小文字はすべて大文字に変換されます。 +.sp +コマンドラインで\fI\-sigfile\fRオプションを指定しなかった場合、\fI\&.SF\fRファイルと\fI\&.DSA\fRファイルのベース・ファイル名は、コマンドラインで指定された別名の先頭の8文字をすべて大文字に変換したものになります。別名が8文字未満の場合は、別名がそのまま使用されます。別名に、署名ファイル名で無効な文字が含まれている場合、ファイル名を作成するために、該当する文字が下線(_)文字に変換されます。 +.RE +.PP +\-sigalg \fIalgorithm\fR +.RS 4 +JARファイルの署名に使用する署名アルゴリズムの名前を指定します。 +.sp +標準的な署名アルゴリズム名のリストは、http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/security/crypto/CryptoSpec\&.html#AppAにある +Java Cryptography Architecture (JCA)リファレンス・ガイドの「付録A: 標準名」を参照してください。 +.sp +このアルゴリズムには、JARファイルの署名に使用する秘密鍵との互換性が必要です。このオプションを指定しない場合、秘密鍵のタイプに応じて、\fISHA1withDSA\fR、\fISHA256withRSA\fRまたは\fISHA256withECDSA\fRが使用されます。指定されたアルゴリズムの実装を提供するプロバイダが静的にインストールされているか、\fI\-providerClass\fRオプションを使用してそのようなプロバイダをユーザーが指定する必要があります。そうでない場合、コマンドは失敗します。 +.RE +.PP +\-digestalg \fIalgorithm\fR +.RS 4 +JARファイルのエントリをダイジェストする際に使用するメッセージ・ダイジェスト・アルゴリズムの名前を指定します。 +.sp +標準的なメッセージ・ダイジェスト・アルゴリズム名のリストは、http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/security/crypto/CryptoSpec\&.html#AppAにある +Java Cryptography Architecture (JCA)リファレンス・ガイドの「付録A: 標準名」を参照してください。 +.sp +このオプションを指定しない場合、\fISHA256\fRが使用されます。指定されたアルゴリズムの実装を提供するプロバイダが静的にインストールされているか、\fI\-providerClass\fRオプションを使用してそのようなプロバイダをユーザーが指定する必要があります。そうでない場合、コマンドは失敗します。 +.RE +.PP +\-certs +.RS 4 +コマンドラインで、\fI\-certs\fRオプションを\fI\-verify\fRおよび\fI\-verbose\fRオプションとともに指定した場合、JARファイルの各署名者の証明書情報が出力に含まれます。この情報には、署名者の公開鍵を証明する証明書(\fI\&.DSA\fRファイルに格納)のタイプの名前が含まれ、証明書がX\&.509証明書(\fIjava\&.security\&.cert\&.X509Certificate\fRのインスタンス)の場合、署名者の識別名が含まれます。 +.sp +キーストアの確認も行われます。コマンドラインでキーストアの値が指定されていない場合、デフォルトのキーストア・ファイル(ある場合)がチェックされます。署名者の公開鍵の証明書がキーストア内のエントリと一致する場合、その署名者のキーストアのエントリの別名が丸カッコ内に表示されます。 +.RE +.PP +\-certchain \fIfile\fR +.RS 4 +コマンドラインで指定した別名によって表されるキーストア・エントリの秘密鍵に関連付けられた証明書チェーンが完全ではない場合に、使用する証明書チェーンを指定します。これは、証明書チェーン全体を保持するのに十分な領域がないハードウェア・トークン上にキーストアが格納されている場合に発生します。このファイルは一連の連結されたX\&.509証明書、PKCS#7形式の単一データ・ブロックのいずれかとなり、そのエンコーディング形式はバイナリ・エンコーディング形式、Internet RFC 1421標準で規定される印刷可能エンコーディング形式(Base64エンコーディングとも呼ばれる)のいずれかになります。インターネットRFC 1421証明書符号化規格およびhttp://tools\&.ietf\&.org/html/rfc1421を参照してください。 +.RE +.PP +\-verbose +.RS 4 +コマンドラインで\fI\-verbose\fRオプションを指定した場合、冗長モードで動作し、このモードでは、\fIjarsigner\fRは、JARの署名または検証の進行状況に関する追加情報を出力します。 +.RE +.PP +\-internalsf +.RS 4 +以前は、JARファイルの署名時に生成された\fI\&.DSA\fR +(署名ブロック)ファイルに、生成された\fI\&.SF\fRファイル(署名ファイル)のエンコードされた完全なコピーが含まれていました。 この動作は変更されました。出力JARファイル全体のサイズを小さくするために、デフォルトでは\fI\&.DSA\fRファイルには\fI\&.SF\fRファイルのコピーが含まれないようになっています。コマンドラインで\fI\-internalsf\fRを指定した場合、以前と同じように動作します。このオプションは、テストを行う場合に便利です。実際には、\fI\-internalsf\fRオプションは、オーバーヘッドが大きくなるため、使用しないでください。 +.RE +.PP +\-sectionsonly +.RS 4 +コマンドラインで\fI\-sectionsonly\fRオプションを指定した場合、JARファイルの署名時に生成される\fI\&.SF\fRファイル(署名ファイル)には、マニフェスト・ファイル全体のハッシュを含むヘッダーは含まれません。これに含まれるのは、JARファイル内の各ソース・ファイルに関連する情報およびハッシュのみです。署名ファイルを参照してください。 +.sp +デフォルトでは、最適化のために、このヘッダーが追加されます。ヘッダーが存在する場合、JARファイルを検証するたびに、検証では、まずヘッダー内のハッシュがマニフェスト・ファイル全体のハッシュと一致するかどうかを確認するためにチェックできます。一致する場合、検証は次の手順に進みます。一致しない場合、\fI\&.SF\fRファイル内の各ソース・ファイル情報セクションのハッシュが、マニフェスト・ファイル内の対応するセクションのハッシュと一致するという、あまり最適化されていない検証を実行する必要があります。JARファイルの検証を参照してください。 +.sp +\fI\-sectionsonly\fRオプションは、主にテスト用に使用されます。これを使用するとオーバーヘッドが大きくなるため、テスト用以外では使用しないでください。 +.RE +.PP +\-protected +.RS 4 +\fItrue\fRまたは\fIfalse\fRのいずれかの値を指定できます。専用PINリーダーなどの保護された認証パスによってパスワードを指定する必要がある場合、\fItrue\fRを指定します。 +.RE +.PP +\-providerClass \fIprovider\-class\-name\fR +.RS 4 +暗号化サービス・プロバイダが\fIjava\&.security\fRセキュリティ・プロパティ・ファイルに指定されていないときは、そのマスター・クラス・ファイルの名前を指定するときに使用されます。 +.sp +\fI\-providerArg ConfigFilePath\fRオプションとともに使用し、\fIkeytool\fRおよび\fIjarsigner\fRツールは、プロバイダを動的にインストールし、トークン構成ファイルへのパスに\fIConfigFilePath\fRを使用します。次の例は、Oracle PKCS #11プロバイダがセキュリティ・プロパティ・ファイルに構成されていなかった場合に\fIPKCS #11\fRキーストアを一覧表示するコマンドを示しています。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -jarsigner \-keystore NONE \-storetype PKCS11 \\ -.fl - \-providerClass sun.security.pkcs11.SunPKCS11 \\ -.fl - \-providerArg /foo/bar/token.config \\ -.fl +jarsigner \-keystore NONE \-storetype PKCS11 \e + \-providerClass sun\&.security\&.pkcs11\&.SunPKCS11 \e + \-providerArg /mydir1/mydir2/token\&.config \e \-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 キーストアプロバイダインスタンスの内容をリストします。 +.if n \{\ +.RE +.\} +.RE +.PP +\-providerName \fIproviderName\fR +.RS 4 +\fIjava\&.security\fRセキュリティ・プロパティ・ファイル内で2つ以上のプロバイダが構成された場合、\fI\-providerName\fRオプションを使用して、特定のプロバイダ・インスタンスを対象にすることができます。このオプションの引数は、プロバイダの名前です。 +.sp +Oracle PKCS #11プロバイダの場合、\fIproviderName\fRは\fISunPKCS11\-\fR\fITokenName\fRという形式になります。ここで、構成属性の表で詳細に説明されているように、\fITokenName\fRは、プロバイダ・インスタンスが構成された名前の接尾辞です。たとえば、次のコマンドは、名前接尾辞\fISmartCard\fRの\fIPKCS #11\fRキーストア・プロバイダ・インスタンスの内容を一覧表示します。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -jarsigner \-keystore NONE \-storetype PKCS11 \\ -.fl - \-providerName SunPKCS11\-SmartCard \\ -.fl +jarsigner \-keystore NONE \-storetype PKCS11 \e + \-providerName SunPKCS11\-SmartCard \e \-list -.fl -\fP .fi -.TP 3 -できますjavaoption -指定された \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 ファイルへのパスを指定する例を示します。 +.if n \{\ +.RE +.\} +.RE +.PP +\-J\fIjavaoption\fR +.RS 4 +指定された\fIjavaoption\fR文字列をJavaインタプリタに直接渡します。\fIjarsigner\fRコマンドは、インタプリタに対するラッパーです。このオプションには、空白を含めることはできません。このオプションは、実行環境またはメモリー使用を調整する場合に便利です。指定できるインタプリタ・オプションを一覧表示するには、コマンドラインで\fIjava \-h\fRまたは\fIjava \-X\fRと入力してください。 +.RE +.PP +\-tsa \fIurl\fR +.RS 4 +\fI\-tsa http://example\&.tsa\&.url\fRがJARファイルの署名時にコマンドラインにある場合、署名のタイムスタンプが生成されます。URL +\fIhttp://example\&.tsa\&.url\fRは、Time Stamping Authority (TSA)の場所を特定し、\fI\-tsacert\fRオプションを指定して検出されたURLをオーバーライドします。\fI\-tsa\fRオプションでは、TSAの公開鍵証明書をキーストアに配置する必要はありません。 +.sp +タイムスタンプを生成するために、\fIjarsigner\fRは、RFC 3161で定義されているタイムスタンプ・プロトコル(TSP)を使用してTSAと通信します。成功すると、TSAによって返されたタイムスタンプ・トークンは、署名ブロック・ファイルの署名とともに保存されます。 +.RE +.PP +\-tsacert \fIalias\fR +.RS 4 +\fI\-tsacert alias\fRがJARファイルの署名時にコマンドラインにある場合、署名のタイムスタンプが生成されます。別名は、キーストア内の有効なTSAの公開鍵証明書を特定します。エントリの証明書で、TSAの場所を特定するURLを含むSubject Information Access拡張機能が確認されます。 +.sp +\fI\-tsacert\fRオプションを使用する場合は、TSAの公開鍵証明書がキーストアに配置されている必要があります。 +.RE +.PP +\-tsapolicyid \fIpolicyid\fR +.RS 4 +TSAサーバーに送信するポリシーIDを識別するオブジェクト識別子(OID)を指定します。このオプションを指定しない場合、ポリシーIDは送信されず、TSAサーバーはデフォルトのポリシーIDを選択します。 +.sp +オブジェクト識別子は、ITU Telecommunication Standardization Sector (ITU\-T)標準であるX\&.696によって定義されます。これらの識別子は、通常、\fI1\&.2\&.3\&.4\fRなどの、負ではない数字のピリオド区切りのセットです。 +.RE +.PP +\-altsigner \fIclass\fR +.RS 4 +このオプションは、代替署名メカニズムを指定します。完全修飾クラス名は、\fIcom\&.sun\&.jarsigner\&.ContentSigner\fR抽象クラスを拡張するクラス・ファイルを識別します。このクラス・ファイルへのパスは、\fI\-altsignerpath\fRオプションによって定義されます。\fI\-altsigner\fRオプションを使用した場合、\fIjarsigner\fRコマンドでは、指定されたクラスによって提供される署名メカニズムを使用します。それ以外の場合、\fIjarsigner\fRコマンドはデフォルトの署名メカニズムを使用します。 +.sp +たとえば、\fIcom\&.sun\&.sun\&.jarsigner\&.AuthSigner\fRという名前のクラスが提供する署名メカニズムを使用するには、jarsignerのオプション\fI\-altsigner com\&.sun\&.jarsigner\&.AuthSigner\fRを使用します。 +.RE +.PP +\-altsignerpath \fIclasspathlist\fR +.RS 4 +クラス・ファイルおよびそれが依存するJARファイルへのパスを指定します。\fI\-altsigner\fRオプションを使用して、クラス・ファイル名を指定します。クラス・ファイルがJARファイル内にある場合、このオプションでは、そのJARファイルへのパスを指定します。 +.sp +絶対パスまたは現在のディレクトリへの相対パスを指定できます。\fIclasspathlist\fRに複数のパスやJARファイルが含まれる場合、それらを、Oracle Solarisの場合はコロン(:)で、Windowsの場合はセミコロン(;)で、それぞれ区切ります。目的のクラスがすでに検索パス内にある場合は、このオプションは不要です。 +.sp +次の例では、クラス・ファイルを含むJARファイルへのパスを指定する方法を示します。JARファイル名を含めます。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -\-altsignerpath /home/user/lib/authsigner.jar -.fl -\fP +\-altsignerpath /home/user/lib/authsigner\&.jar .fi -.LP -JAR ファイル名が含まれていることに注意してください。 -.LP -クラスファイルを含む JAR ファイルへのパスを指定する例を示します。 +.if n \{\ +.RE +.\} +次の例では、クラス・ファイルを含むJARファイルへのパスを指定する方法を示します。JARファイル名を省略します。 +.sp +.if n \{\ +.RS 4 +.\} .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 つのエントリ (およびそれ以上)」として要約されて表示されます。詳細は例の項を参照してください。 +.if n \{\ +.RE +.\} +.RE +.PP +\-strict +.RS 4 +署名または検証処理中に、コマンドにより警告メッセージが発行される場合があります。このオプションを指定すると、コマンドにより検出された重大な警告メッセージがツールの終了コードに反映されます。エラーと警告を参照してください。 +.RE +.PP +\-verbose \fIsuboptions\fR +.RS 4 +検証処理の場合、\fI\-verbose\fRオプションには、表示する情報の量を決定するサブオプションを指定します。\fI\-certs\fRオプションも指定した場合、デフォルト・モード(またはサブオプション\fIall\fR)では、エントリが処理されるたびに各エントリが表示され、その後にJARファイルの各署名者の証明書情報も表示されます。\fI\-certs\fRおよび\fI\-verbose:grouped\fRサブオプションを指定した場合、同じ署名者情報を持つエントリが、その証明書情報とともに、グループ化されて表示されます。\fI\-certs\fRおよび\fI\-verbose:summary\fRサブオプションを指定した場合、同じ署名者情報を持つエントリが、その証明書情報とともに、グループ化されて表示されます。各エントリの詳細は、\fI1つのエントリ(以上)\fRにまとめられて表示されます。例を参照してください。 +.RE +.SH "エラーと警告" +.PP +署名または検証プロセス中に、\fIjarsigner\fRコマンドで、様々なエラーまたは警告が発行される可能性があります。 +.PP +障害がある場合、\fIjarsigner\fRコマンドはコード1で終了します。障害はないが、1つ以上の重大な警告がある場合、\fI\-strict\fRオプションが指定されて\fBいない\fR場合は、\fIjarsigner\fRコマンドはコード0で終了し、\fI\-strict\fRが指定されている場合は警告コードのOR値で終了します。情報警告のみがある、または警告がまったくない場合、コマンドは常にコード0で終了します。 +.PP +たとえば、エントリの署名に使用される証明書が期限切れで、ファイルの署名を許可しないKeyUsage拡張機能を使用している場合、\fI\-strict\fRオプションが指定されていると、\fIjarsigner\fRコマンドはコード12 (=4+8)で終了します。 +.PP +\fB注意:\fR +UNIXベースのオペレーティング・システムでは0から255までの値のみが有効のため、終了コードは再利用されます。 +.PP +次のセクションでは、\fIjarsigner\fRコマンドにより発行できるエラーおよび警告の名前、コード、説明を記述します。 +.SS "障害" +.PP +コマンドライン解析エラー、JARファイルに署名する鍵ペアを検索できない、または署名付きJARファイルの検証失敗など(限定されません)、\fIjarsigner\fRコマンドの失敗理由。 +.PP +failure +.RS 4 +コード1。署名または検証が失敗します。 +.RE +.SS "重大な警告" +.PP +\fB注意:\fR +\fI\-strict\fRオプションを指定した場合、重大な警告はエラーとして報告されます。 +.PP +JARファイルの署名に使用する証明書にエラーがある、または署名付きJARファイルに他の問題があるなど、\fIjarsigner\fRコマンドが重大な警告を発行する理由。 +.PP +hasExpiredCert +.RS 4 +コード4。このjarには、署名者証明書が期限切れのエントリが含まれています。 +.RE +.PP +notYetValidCert +.RS 4 +コード4。このjarには、署名者証明書がまだ有効になっていないエントリが含まれています。 +.RE +.PP +chainNotValidated +.RS 4 +コード4。このjarには、証明書チェーンが正しく検証できないエントリが含まれています。 +.RE +.PP +badKeyUsage +.RS 4 +コード8。このJARには、署名者証明書のKeyUsage拡張機能がコード署名を許可しないエントリが含まれています。 +.RE +.PP +badExtendedKeyUsage +.RS 4 +コード8。このjarには、署名者証明書のExtendedKeyUsage拡張機能がコード署名を許可しないエントリが含まれています。 +.RE +.PP +badNetscapeCertType +.RS 4 +コード8。このjarには、署名者証明書のNetscapeCertType拡張機能がコード署名を許可しないエントリが含まれています。 +.RE +.PP +hasUnsignedEntry +.RS 4 +コード16。このjarには、整合性チェックをしていない未署名のエントリが含まれています。 +.RE +.PP +notSignedByAlias +.RS 4 +コード32。このjarには、指定された別名によって署名されていない署名済エントリが含まれています。 +.RE +.PP +aliasNotInStore +.RS 4 +コード32。このjarには、このキーストア内の別名によって署名されていない署名済エントリが含まれます。 +.RE +.SS "情報警告" +.PP +情報警告には、エラーではないが不適切とみなされるものが含まれます。コードはありません。 +.PP +hasExpiringCert +.RS 4 +このjarには、署名者証明書が6か月以内に期限切れとなるエントリが含まれています。 +.RE +.PP +noTimestamp +.RS 4 +このjarには、タイムスタンプを含まない署名が含まれています。タイムスタンプなしでは、署名者証明書の有効期限(\fIYYYY\-MM\-DD\fR)後または将来の取消日後、ユーザーはこのJARファイルを検証できない場合があります。 .RE - -.LP .SH "例" -.LP -.SS -JAR ファイルの署名 -.LP -.LP -bundle.jar という名前の JAR ファイルがあるとします。このファイルに、キーストアの別名が jane であるユーザーの非公開鍵を使って、署名を付けるとします。この場合、次のコマンドを実行すると、JAR ファイルに署名を付けて sbundle.jar という署名付き JAR ファイルを作成できます。 -.LP +.SS "JARファイルの署名" +.PP +次のコマンドを使用して、キーストア別名が\fIworking\fRディレクトリの\fImystore\fRという名前のキーストアにある\fIjane\fRであるユーザーの秘密鍵でbundle\&.jarに署名し、署名付きJARファイルに\fIsbundle\&.jar\fRという名前を付けます。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl - jarsigner \-keystore /working/mystore \-storepass \fP\f4<キーストアのパスワード>\fP\f3 -.fl - \-keypass \fP\f4<非公開鍵のパスワード>\fP\f3 \-signedjar sbundle.jar bundle.jar jane -.fl -\fP +jarsigner \-keystore /working/mystore + \-storepass <keystore password> + \-keypass <private key password> + \-signedjar sbundle\&.jar bundle\&.jar jane .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 のアイデンティティーデータベースからの署名者別名を認識し、これらを対象に処理を行うことができます。 +.if n \{\ .RE - -.LP -.LP -次の表は、JDK 1.1.x で署名された JAR ファイルが、Java 2 プラットフォームでどのように扱われるかを示しています。 -.LP -.LP -.TS -.if \n+(b.=1 .nr d. \n(.c-\n(c.-1 -.de 35 -.ps \n(.s -.vs \n(.vu -.in \n(.iu -.if \n(.u .fi -.if \n(.j .ad -.if \n(.j=0 .na -.. +.\} +.PP +前述のコマンドでは\fI\-sigfile\fRが指定されていないため、署名付きJARファイルに格納される生成された\fI\&.SF\fRファイルおよび\fI\&.DSA\fRファイルの名前は、別名に基づいたデフォルトの名前になります。これらは、名前付きの\fIJANE\&.SF\fRおよび\fIJANE\&.DSA\fRです。 +.PP +ストアのパスワードおよび秘密鍵のパスワードを求められる場合、前述のコマンドを短縮して、次のことを実行できます。 +.sp +.if n \{\ +.RS 4 +.\} .nf -.nr #~ 0 -.if n .nr #~ 0.6n -.ds #d .d -.if \(ts\n(.z\(ts\(ts .ds #d nl -.fc -.nr 33 \n(.s -.rm 80 81 82 83 84 -.nr 34 \n(.lu -.eo -.am 80 -.br -.di a+ -.35 -.ft \n(.f -.ll \n(34u*1u/6u -.if \n(.l<\n(80 .ll \n(80u -.in 0 -\f3JAR ファイルのタイプ\fP -.br -.di -.nr a| \n(dn -.nr a- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di b+ -.35 -.ft \n(.f -.ll \n(34u*1u/6u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -\f31.1 データベース内のアイデンティティー\fP -.br -.di -.nr b| \n(dn -.nr b- \n(dl -.. -.ec \ -.eo -.am 82 -.br -.di c+ -.35 -.ft \n(.f -.ll \n(34u*1u/6u -.if \n(.l<\n(82 .ll \n(82u -.in 0 -\f31.1 データベースから Java 2 Platform キーストアにインポートされる信頼できるアイデンティティー (4)\fP -.br -.di -.nr c| \n(dn -.nr c- \n(dl -.. -.ec \ -.eo -.am 83 -.br -.di d+ -.35 -.ft \n(.f -.ll \n(34u*1u/6u -.if \n(.l<\n(83 .ll \n(83u -.in 0 -\f3ポリシーファイルがアイデンティティー/別名に特権を与える\fP -.br -.di -.nr d| \n(dn -.nr d- \n(dl -.. -.ec \ -.eo -.am 84 -.br -.di e+ -.35 -.ft \n(.f -.ll \n(34u*1u/6u -.if \n(.l<\n(84 .ll \n(84u -.in 0 -すべてのコードに与えられるデフォルトの特権 -.br -.di -.nr e| \n(dn -.nr e- \n(dl -.. -.ec \ -.eo -.am 84 -.br -.di f+ -.35 -.ft \n(.f -.ll \n(34u*1u/6u -.if \n(.l<\n(84 .ll \n(84u -.in 0 -すべてのコードに与えられるデフォルトの特権 -.br -.di -.nr f| \n(dn -.nr f- \n(dl -.. -.ec \ -.eo -.am 84 -.br -.di g+ -.35 -.ft \n(.f -.ll \n(34u*1u/6u -.if \n(.l<\n(84 .ll \n(84u -.in 0 -すべてのコードに与えられるデフォルトの特権 -.br -.di -.nr g| \n(dn -.nr g- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di h+ -.35 -.ft \n(.f -.ll \n(34u*1u/6u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -あり/信頼できない -.br -.di -.nr h| \n(dn -.nr h- \n(dl -.. -.ec \ -.eo -.am 84 -.br -.di i+ -.35 -.ft \n(.f -.ll \n(34u*1u/6u -.if \n(.l<\n(84 .ll \n(84u -.in 0 -すべてのコードに与えられるデフォルトの特権(3) -.br -.di -.nr i| \n(dn -.nr i- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di j+ -.35 -.ft \n(.f -.ll \n(34u*1u/6u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -あり/信頼できない -.br -.di -.nr j| \n(dn -.nr j- \n(dl -.. -.ec \ -.eo -.am 84 -.br -.di k+ -.35 -.ft \n(.f -.ll \n(34u*1u/6u -.if \n(.l<\n(84 .ll \n(84u -.in 0 -すべてのコードに与えられるデフォルトの特権(1,3) -.br -.di -.nr k| \n(dn -.nr k- \n(dl -.. -.ec \ -.eo -.am 84 -.br -.di l+ -.35 -.ft \n(.f -.ll \n(34u*1u/6u -.if \n(.l<\n(84 .ll \n(84u -.in 0 -すべてのコードに与えられるデフォルトの特権とポリシーファイル内で与えられる特権 -.br -.di -.nr l| \n(dn -.nr l- \n(dl -.. -.ec \ -.eo -.am 84 -.br -.di m+ -.35 -.ft \n(.f -.ll \n(34u*1u/6u -.if \n(.l<\n(84 .ll \n(84u -.in 0 -すべてのコードに与えられるデフォルトの特権とポリシーファイル内で与えられる特権(2) -.br -.di -.nr m| \n(dn -.nr m- \n(dl -.. -.ec \ -.35 -.nf -.ll \n(34u -.nr 80 0 -.nr 38 \w署名付き JAR -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w署名のない JAR -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w署名付き JAR -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w署名付き JAR -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w署名付き JAR -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w署名付き JAR -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w署名付き JAR -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w署名付き JAR -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w署名付き JAR -.if \n(80<\n(38 .nr 80 \n(38 -.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なし -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \wなし -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \wなし -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \wなし -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \wあり/信頼できる -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \wあり/信頼できる -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \wあり/信頼できる -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \wあり/信頼できる -.if \n(81<\n(38 .nr 81 \n(38 -.81 -.rm 81 -.nr 38 \n(b- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(h- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(j- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 82 0 -.nr 38 \wなし -.if \n(82<\n(38 .nr 82 \n(38 -.nr 38 \wなし -.if \n(82<\n(38 .nr 82 \n(38 -.nr 38 \wあり -.if \n(82<\n(38 .nr 82 \n(38 -.nr 38 \wなし -.if \n(82<\n(38 .nr 82 \n(38 -.nr 38 \wなし -.if \n(82<\n(38 .nr 82 \n(38 -.nr 38 \wあり -.if \n(82<\n(38 .nr 82 \n(38 -.nr 38 \wあり -.if \n(82<\n(38 .nr 82 \n(38 -.nr 38 \wなし -.if \n(82<\n(38 .nr 82 \n(38 -.nr 38 \wあり -.if \n(82<\n(38 .nr 82 \n(38 -.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なし -.if \n(83<\n(38 .nr 83 \n(38 -.nr 38 \wなし -.if \n(83<\n(38 .nr 83 \n(38 -.nr 38 \wなし -.if \n(83<\n(38 .nr 83 \n(38 -.nr 38 \wなし -.if \n(83<\n(38 .nr 83 \n(38 -.nr 38 \wあり -.if \n(83<\n(38 .nr 83 \n(38 -.nr 38 \wあり -.if \n(83<\n(38 .nr 83 \n(38 -.nr 38 \wあり -.if \n(83<\n(38 .nr 83 \n(38 -.nr 38 \wなし -.if \n(83<\n(38 .nr 83 \n(38 -.nr 38 \wなし -.if \n(83<\n(38 .nr 83 \n(38 -.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 -.if \n(84<\n(38 .nr 84 \n(38 -.nr 38 \wすべての特権 -.if \n(84<\n(38 .nr 84 \n(38 -.nr 38 \wすべての特権 (1) -.if \n(84<\n(38 .nr 84 \n(38 -.nr 38 \wすべての特権 (1) -.if \n(84<\n(38 .nr 84 \n(38 -.84 -.rm 84 -.nr 38 \n(e- -.if \n(84<\n(38 .nr 84 \n(38 -.nr 38 \n(f- -.if \n(84<\n(38 .nr 84 \n(38 -.nr 38 \n(g- -.if \n(84<\n(38 .nr 84 \n(38 -.nr 38 \n(i- -.if \n(84<\n(38 .nr 84 \n(38 -.nr 38 \n(k- -.if \n(84<\n(38 .nr 84 \n(38 -.nr 38 \n(l- -.if \n(84<\n(38 .nr 84 \n(38 -.nr 38 \n(m- -.if \n(84<\n(38 .nr 84 \n(38 -.35 -.nf -.ll \n(34u -.nr 38 1n -.nr 79 0 -.nr 40 \n(79+(0*\n(38) -.nr 80 +\n(40 -.nr 41 \n(80+(3*\n(38) -.nr 81 +\n(41 -.nr 42 \n(81+(3*\n(38) -.nr 82 +\n(42 -.nr 43 \n(82+(3*\n(38) -.nr 83 +\n(43 -.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 1078 file Input is too wide - \n(TW units -.fc   -.nr #T 0-1 -.nr #a 0-1 -.eo -.de T# -.ds #d .d -.if \(ts\n(.z\(ts\(ts .ds #d nl -.mk ## -.nr ## -1v -.ls 1 -.ls -.. -.ec -.ne \n(a|u+\n(.Vu -.ne \n(b|u+\n(.Vu -.ne \n(c|u+\n(.Vu -.ne \n(d|u+\n(.Vu -.if (\n(a|+\n(#^-1v)>\n(#- .nr #- +(\n(a|+\n(#^-\n(#--1v) -.if (\n(b|+\n(#^-1v)>\n(#- .nr #- +(\n(b|+\n(#^-\n(#--1v) -.if (\n(c|+\n(#^-1v)>\n(#- .nr #- +(\n(c|+\n(#^-\n(#--1v) -.if (\n(d|+\n(#^-1v)>\n(#- .nr #- +(\n(d|+\n(#^-\n(#--1v) -.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 -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(40u -.in +\n(37u -.a+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.b+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(##u-1v -.nr 37 \n(42u -.in +\n(37u -.c+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(##u-1v -.nr 37 \n(43u -.in +\n(37u -.d+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(e|u+\n(.Vu -.if (\n(e|+\n(#^-1v)>\n(#- .nr #- +(\n(e|+\n(#^-\n(#--1v) -.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' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(44u -.in +\n(37u -.e+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(f|u+\n(.Vu -.if (\n(f|+\n(#^-1v)>\n(#- .nr #- +(\n(f|+\n(#^-\n(#--1v) -.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' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(44u -.in +\n(37u -.f+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(g|u+\n(.Vu -.if (\n(g|+\n(#^-1v)>\n(#- .nr #- +(\n(g|+\n(#^-\n(#--1v) -.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' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(44u -.in +\n(37u -.g+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(h|u+\n(.Vu -.ne \n(i|u+\n(.Vu -.if (\n(h|+\n(#^-1v)>\n(#- .nr #- +(\n(h|+\n(#^-\n(#--1v) -.if (\n(i|+\n(#^-1v)>\n(#- .nr #- +(\n(i|+\n(#^-\n(#--1v) -.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' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.h+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(##u-1v -.nr 37 \n(44u -.in +\n(37u -.i+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(j|u+\n(.Vu -.ne \n(k|u+\n(.Vu -.if (\n(j|+\n(#^-1v)>\n(#- .nr #- +(\n(j|+\n(#^-\n(#--1v) -.if (\n(k|+\n(#^-1v)>\n(#- .nr #- +(\n(k|+\n(#^-\n(#--1v) -.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' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.j+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(##u-1v -.nr 37 \n(44u -.in +\n(37u -.k+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(l|u+\n(.Vu -.if (\n(l|+\n(#^-1v)>\n(#- .nr #- +(\n(l|+\n(#^-\n(#--1v) -.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' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(44u -.in +\n(37u -.l+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(m|u+\n(.Vu -.if (\n(m|+\n(#^-1v)>\n(#- .nr #- +(\n(m|+\n(#^-\n(#--1v) -.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' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(44u -.in +\n(37u -.m+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.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'すべての特権 -.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) -.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) -.fc -.nr T. 1 -.T# 1 -.35 -.rm a+ -.rm b+ -.rm c+ -.rm d+ -.rm e+ -.rm f+ -.rm g+ -.rm h+ -.rm i+ -.rm j+ -.rm k+ -.rm l+ -.rm m+ -.TE -.if \n-(b.=0 .nr c. \n(.c-\n(d.-50 - -.LP -.LP -注 \- -.LP -.RS 3 -.TP 3 -1. -ポリシーファイル内にアイデンティティー/別名についての言及がある場合、それをキーストアにインポートして、ポリシーファイルの設定が与えられた特権に反映されるようにする必要があります。 -.TP 3 -2. -ポリシーファイル/キーストアの組み合わせは、アイデンティティーデータベース内の信頼できるアイデンティティーよりも優先されます。 -.TP 3 -3. -Java 2 プラットフォームでは、信頼できないアイデンティティーは無視されます。 -.TP 3 -4. -Java 2 SDK キーストアにインポートできるのは、信頼できるアイデンティティーだけです。 -.RE - -.LP -.SH "関連項目" -.LP -.RS 3 -.TP 2 -o -jar(1) ツールのドキュメント -.TP 2 -o -keytool(1) ツールのドキュメント -.TP 2 -o -.na -\f4jarsigner\fP\f2 ツールの使用例については、\fP @ +jarsigner \-keystore /working/mystore + \-signedjar sbundle\&.jar bundle\&.jar jane .fi -http://download.oracle.com/javase/tutorial/security/index.html -.na -\f2「Java チュートリアル」\fP\f4の\fP @ -.fi -http://download.oracle.com/javase/tutorial/index.html「Security」\f3を参照\fP +.if n \{\ .RE - -.LP +.\} +.PP +キーストアがデフォルトのキーストア(ホーム・ディレクトリ内の\&.keystore)である場合、次に示すように、キーストアを指定する必要がありません。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +jarsigner \-signedjar sbundle\&.jar bundle\&.jar jane +.fi +.if n \{\ +.RE +.\} +.PP +入力JARファイル(bundle\&.jar)を署名付きJARファイルで上書きする場合、次のように\fI\-signedjar\fRオプションを指定する必要はありません。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +jarsigner bundle\&.jar jane +.fi +.if n \{\ +.RE +.\} +.SS "署名付きJARファイルの検証" +.PP +署名付きJARファイルを検証して、署名が有効でJARファイルが改ざんされなかったことを確認するには、次のようなコマンドを使用します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +jarsigner \-verify sbundle\&.jar +.fi +.if n \{\ +.RE +.\} +.PP +検証が成功すると、\fIjar verified\fRが表示されます。そうでない場合は、エラー・メッセージが表示されます。\fI\-verbose\fRオプションを使用すると、詳細情報を取得できます。\fIjarsigner\fRを\fI\-verbose\fRオプションとともに使用するサンプルを、次に示します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +jarsigner \-verify \-verbose sbundle\&.jar + 198 Fri Sep 26 16:14:06 PDT 1997 META\-INF/MANIFEST\&.MF + 199 Fri Sep 26 16:22:10 PDT 1997 META\-INF/JANE\&.SF + 1013 Fri Sep 26 16:22:10 PDT 1997 META\-INF/JANE\&.DSA + smk 2752 Fri Sep 26 16:12:30 PDT 1997 AclEx\&.class + smk 849 Fri Sep 26 16:12:46 PDT 1997 test\&.class + + s = signature was verified + m = entry is listed in manifest + k = at least one certificate was found in keystore + + jar verified\&. +.fi +.if n \{\ +.RE +.\} +.SS "証明書情報を使用した検証" +.PP +\fI\-certs\fRオプションを\fI\-verify\fRおよび\fI\-verbose\fRオプションとともに指定した場合、JARファイルの各署名者の証明書情報が出力に含まれます。この情報には、証明書タイプ、署名者の識別名情報(X\&.509証明書の場合)が含まれ、丸カッコ内には、JARファイルの公開鍵証明書がキーストア・エントリの公開鍵証明書に一致する場合の署名者のキーストア別名が含まれます。たとえば、次のようになります。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +jarsigner \-keystore /working/mystore \-verify \-verbose \-certs myTest\&.jar + + 198 Fri Sep 26 16:14:06 PDT 1997 META\-INF/MANIFEST\&.MF + 199 Fri Sep 26 16:22:10 PDT 1997 META\-INF/JANE\&.SF + 1013 Fri Sep 26 16:22:10 PDT 1997 META\-INF/JANE\&.DSA + 208 Fri Sep 26 16:23:30 PDT 1997 META\-INF/JAVATEST\&.SF + 1087 Fri Sep 26 16:23:30 PDT 1997 META\-INF/JAVATEST\&.DSA + smk 2752 Fri Sep 26 16:12:30 PDT 1997 Tst\&.class + + X\&.509, CN=Test Group, OU=Java Software, O=Oracle, L=CUP, S=CA, C=US (javatest) + X\&.509, CN=Jane Smith, OU=Java Software, O=Oracle, L=cup, S=ca, C=us (jane) + + s = signature was verified + m = entry is listed in manifest + k = at least one certificate was found in keystore + + jar verified\&. +.fi +.if n \{\ +.RE +.\} +.PP +署名者の証明書がX\&.509証明書ではない場合、識別名情報は表示されません。その場合には、証明書のタイプと別名のみが表示されます。たとえば、証明書がPGP証明書で、別名が\fIbob\fRである場合、\fIPGP, (bob)\fRを取得します。 +.SH "関連項目" +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +jar(1) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +keytool(1) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +http://docs\&.oracle\&.com/javase/tutorial/security/index\&.htmlにある +「コース: Java SEのセキュリティ機能」 +.RE +.br +'pl 8.5i +'bp diff --git a/jdk/src/solaris/doc/sun/man/man1/ja/java.1 b/jdk/src/solaris/doc/sun/man/man1/ja/java.1 index 062d3209af8..f134a028e6c 100644 --- a/jdk/src/solaris/doc/sun/man/man1/ja/java.1 +++ b/jdk/src/solaris/doc/sun/man/man1/ja/java.1 @@ -1,509 +1,2553 @@ -." 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 -." 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. -." -.TH java 1 "07 May 2011" - -.LP -.SH "名前" -java \- Java アプリケーション起動ツール -.LP -.RS 3 -.TP 2 -o -形式 -.TP 2 -o -説明 -.TP 2 -o -オプション -.TP 2 -o -関連項目 -.RE - -.LP -.SH "形式" -.LP +'\" t +.\" Copyright (c) 1994, 2013, Oracle and/or its affiliates. All rights reserved. +.\" Title: java +.\" Language: English +.\" Date: 2013年11月21日 +.\" SectDesc: 基本ツール +.\" Software: JDK 8 +.\" Arch: 汎用 +.\" +.\" 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. +.\" +.pl 99999 +.TH "java" "1" "2013年11月21日" "JDK 8" "基本ツール" +.\" ----------------------------------------------------------------- +.\" * Define some portability stuff +.\" ----------------------------------------------------------------- +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.\" http://bugs.debian.org/507673 +.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" ----------------------------------------------------------------- +.\" * set default formatting +.\" ----------------------------------------------------------------- +.\" disable hyphenation +.nh +.\" disable justification (adjust text to left margin only) +.ad l +.\" ----------------------------------------------------------------- +.\" * MAIN CONTENT STARTS HERE * +.\" ----------------------------------------------------------------- +.SH "NAME" +java \- Javaアプリケーションを起動します。 +.SH "概要" +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl - \fP\f3java\fP [ options ] class [ argument ... ] -.fl - \f3java\fP [ options ] \f3\-jar\fP file.jar [ argument ... ] -.fl +\fIjava\fR [\fIoptions\fR] \fIclassname\fR [\fIargs\fR] .fi - -.LP -.RS 3 -.TP 3 -options -コマンド行オプション。 -.TP 3 -class -呼び出されるクラスの名前 -.TP 3 -file.jar -呼び出される JAR ファイルの名前。必ず \f2\-jar\fP とともに使用する -.TP 3 -argument -\f3main\fP 関数に渡される引数 +.if n \{\ +.RE +.\} +.sp +.if n \{\ +.RS 4 +.\} +.nf +\fIjava\fR [\fIoptions\fR] \fI\-jar\fR \fIfilename\fR [\fIargs\fR] +.fi +.if n \{\ +.RE +.\} +.PP +\fIoptions\fR +.RS 4 +空白で区切られたコマンドライン・オプション。オプションを参照してください。 +.RE +.PP +\fIclassname\fR +.RS 4 +起動するクラスの名前。 +.RE +.PP +\fIfilename\fR +.RS 4 +呼び出されるJavaアーカイブ(JAR)ファイルの名前。\fI\-jar\fRオプションと一緒にのみ使用します。 +.RE +.PP +\fIargs\fR +.RS 4 +空白で区切られた\fImain()\fRメソッドに渡される引数。 .RE - -.LP .SH "説明" -.LP -.LP -\f3java\fP ツールは、Java アプリケーションを起動します。java ツールは、Java Runtime Environment を起動したあと、指定されたクラスをロードし、そのクラスの \f3main\fP メソッドを呼び出すことにより、Java アプリケーションを起動します。 -.LP -.LP -このメソッドは、public および static として宣言する必要があります。 また、値を返してはいけません。 さらに、 \f2String\fP 配列をパラメータとして指定できなければなりません。メソッドの宣言は、次のようになっていなければなりません。 -.LP +.PP +\fIjava\fRコマンドはJavaアプリケーションを開始します。Java Runtime Environment (JRE)を起動した後、指定したクラスをロードし、そのクラスの\fImain()\fRメソッドを呼び出すことにより、これを行います。このメソッドは、\fIpublic\fRおよび\fIstatic\fRとして宣言する必要があります。また、値は返せません。さらに、\fIString\fR配列をパラメータとして指定できる必要があります。メソッド宣言は次の形式を含みます。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -public static void main(String args[]) -.fl -\fP +public static void main(String[] args) .fi - -.LP -.LP -デフォルトでは、コマンド行オプション以外の最初の引数が、呼び出されるクラスの名前になります。この名前には、完全指定のクラス名を使用する必要があります。\f3\-jar\fP オプションを指定した場合、コマンド行オプション以外の最初の引数が、アプリケーションのクラスファイルとリソースファイルを含む \f3JAR\fP アーカイブの名前になります。この場合、マニフェストの \f3Main\-Class\fP ヘッダーで指定されたクラスが起動クラスになります。 -.LP -.LP -Java Runtime は、ブートストラップクラスパス、インストール型拡張機能、およびユーザークラスパスの 3 箇所から起動クラスと他の使用されているクラスを検索します。 -.LP -.LP -クラス名または JAR ファイル名のあとにある、コマンド行オプション以外の引数は、\f3main\fP 関数に渡されます。 -.LP +.if n \{\ +.RE +.\} +.PP +\fIjava\fRコマンドを使用して、\fImain()\fRメソッドがあるか\fIjavafx\&.application\&.Application\fRを拡張するクラスをロードすることで、JavaFXアプリケーションを起動できます。後者の場合、起動ツールは\fIApplication\fRクラスのインスタンスを構成し、その\fIinit()\fRメソッドをコールし、\fIstart(javafx\&.stage\&.Stage)\fRメソッドをコールします。 +.PP +デフォルトでは、\fIjava\fRコマンドのオプションではない最初の引数は、呼び出されるクラスの完全修飾名です。\fI\-jar\fRオプションを指定した場合、その引数は、アプリケーションのクラス・ファイルとリソース・ファイルを含むJARファイルの名前になります。起動クラスは、ソース・コードの\fIMain\-Class\fRマニフェスト・ヘッダーによって指定される必要があります。 +.PP +JREは、ブートストラップ・クラス・パス、インストール済拡張機能およびユーザーのクラス・パスの3箇所から、起動クラス(およびアプリケーションで使用されている他のクラス)を検索します。 +.PP +クラス・ファイル名またはJARファイル名の後の引数は、\fImain()\fRメソッドに渡されます。 .SH "オプション" -.LP -.LP -起動ツールには、現在の実行環境および将来のリリースでサポートされる標準オプションがあります。また、仮想マシンの現在の実装では、非標準オプションのセットもサポートされます。これは、将来のリリースで変更される可能性があります。 -.LP -.SH "標準オプション" -.LP -.RS 3 -.TP 3 -\-client -.LP -Java HotSpot Client VM を選択します。64 ビット対応 JDK は現時点では、このオプションを無視し、代わりに Java Hotspot Server VM を使用します。 -.LP -デフォルトの VM の選択については、 -.na -\f2「サーバー \- クラスマシンの検出」\fP @ -.fi -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 オプションが暗黙的に選択されます。 -.LP -デフォルトの VM の選択については、 -.na -\f2「サーバー \- クラスマシンの検出」\fP @ -.fi -http://java.sun.com/javase/6/docs/technotes/guides/vm/server\-class.htmlを参照してください。 -.TP 3 -\-agentlib:libname[=options] -ネイティブエージェントライブラリ \f2libname\fP をロードします。たとえば次のように指定します。 -.LP -\-agentlib:hprof -.LP -\-agentlib:jdwp=help -.LP -\-agentlib:hprof=help -.LP -詳細については、 -.na -\f2「JVMTI エージェントのコマンド行オプション」\fP @ -.fi -http://java.sun.com/javase/6/docs/platform/jvmti/jvmti.html#startingを参照してください。 -.TP 3 -\-agentpath:pathname[=options] -フルパス名を使用して、ネーティブエージェントライブラリをロードします。詳細については、 -.na -\f2「JVMTI エージェントのコマンド行オプション」\fP @ -.fi -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 環境変数の設定がオーバーライドされます。 -.LP -\f3\-classpath\fP も \f3\-cp\fP も使用されず、\f3CLASSPATH\fP も設定されていない場合、ユーザークラスパスは現在のディレクトリ (\f4.\fP) になります。 -.LP -便宜上、 \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 プログラムが展開されていないワイルドカードを認識することはありません。 -.LP -クラスパスの詳細は、 -.na -\f2「クラスパスの設定」\fP @ -.fi -http://java.sun.com/javase/6/docs/technotes/tools/index.html#classpathを参照してください。 -.TP 3 -\-Dproperty=value -システムプロパティーの値を設定します。 -.TP 3 -\-d32 -.TP 3 -\-d64 -それぞれ 32 ビット環境、64 ビット環境でプログラムを実行することを要求します。要求された環境がインストールされていないかサポートされていない場合は、エラーが報告されます。 -.LP -現在のところ、Java HotSpot Server VM だけが 64 ビットの操作をサポートしており、\-server オプションを使用する場合は、\-d64 も一緒に使用する必要があります。したがって、\-d64 使用時には「\-client」オプションは無視されます。この仕様は、将来のリリースでは変更になる可能性があります。 -.LP -\f3\-d32\fP と \f3\-d64\fP がどちらも指定されていない場合は、デフォルトとして、32 ビット環境で実行されます。この仕様は、将来のリリースでは変更になる可能性があります。 -.TP 3 -\-enableassertions[:<package name>"..." | :<class name> ] -.TP 3 -\-ea[:<package name>"..." | :<class name> ] -アサーションを有効にします。アサーションは、デフォルトでは無効になっています。 -.LP -引数なしの \f3enableassertions\fP または \f3\-ea\fP を指定すると、アサーションが有効になります。「\f2...\fP」で終わる引数を 1 つ指定すると、指定したパッケージとそのサブパッケージ内でアサーションが有効になります。引数として「\f2...\fP」だけを指定すると、現在の作業ディレクトリにある名前のないパッケージ内でアサーションが有効になります。「\f2...\fP」で終わらない引数を 1 つ指定すると、指定したクラス内でアサーションが有効になります。 -.LP -単一コマンド行にこれらのスイッチのインスタンスを複数指定した場合は、指定したスイッチが順番に処理されてからクラスがロードされます。したがって、たとえば、パッケージ \f2com.wombat.fruitbat\fP (サブパッケージを含む) 内でのみアサーションを有効にしてプログラムを実行するには、次のようなコマンドを使用します。 -.nf -\f3 -.fl -java \-ea:com.wombat.fruitbat... <Main Class> -.fl -\fP -.fi -.LP -\f3\-enableassertions\fP および \f3\-ea\fP スイッチは、すべてのクラスローダおよびシステムクラスに適用されます。システムクラスにはクラスローダはありません。ただし、この規則には 1 つ例外があります。それは、引数なしの形式でこのスイッチを指定すると、その指定がシステムに適用されない、ということです。この例外を利用すれば、システムクラスを除くすべてのクラスでアサーションを簡単に有効にすることができます。すべてのシステムクラスでアサーションを有効にするために、別のスイッチが用意されています。このあとの \f3\-enablesystemassertions\fP を参照してください。 -.TP 3 -\-disableassertions[:<package name>"..." | :<class name> ] -.TP 3 -\-da[:<package name>"..." | :<class name> ] -アサーションを無効にします。これがデフォルトです。 -.LP -引数なしの \f3disableassertions\fP または \f3\-da\fP を指定すると、アサーションが無効になります。「\f2...\fP」で終わる引数を 1 つ指定すると、指定したパッケージとそのサブパッケージ内でアサーションが無効になります。引数として「\f2...\fP」だけを指定すると、現在の作業ディレクトリにある名前のないパッケージ内でアサーションが無効になります。「\f2...\fP」で終わらない引数を 1 つ指定すると、指定したクラス内でアサーションが無効になります。 -.LP -パッケージ \f2com.wombat.fruitbat\fP 内ではアサーションを有効にし、クラス \f2com.wombat.fruitbat.Brickbat\fP 内ではアサーションを無効にしたうえで、プログラムを実行するには、次のようなコマンドを使用します。 -.nf -\f3 -.fl -java \-ea:com.wombat.fruitbat... \-da:com.wombat.fruitbat.Brickbat \fP\f4<Main Class>\fP\f3 -.fl -\fP -.fi -.LP -\f3\-disableassertions\fP および \f3\-da\fP スイッチは、すべてのクラスローダおよびシステムクラスに適用されます。システムクラスにはクラスローダはありません。ただし、この規則には 1 つ例外があります。それは、引数なしの形式でこのスイッチを指定すると、その指定がシステムに適用されない、ということです。この例外を利用すれば、システムクラスを除くすべてのクラスでアサーションを簡単に有効にすることができます。すべてのシステムクラスでアサーションを無効にするために、別のスイッチが用意されています。このあとの \f3\-disablesystemassertions\fP を参照してください。 -.TP 3 -\-enablesystemassertions -.TP 3 -\-esa -すべてのシステムクラス内でアサーションを有効にします。つまり、システムクラスについてアサーションのデフォルトステータスを \f2true\fP に設定します。 -.TP 3 -\-disablesystemassertions -.TP 3 -\-dsa -すべてのシステムクラス内でアサーションを無効にします。 -.TP 3 -\-jar -JAR ファイルにカプセル化されたプログラムを実行します。最初の引数は、起動クラスの名前ではなく、JAR ファイルの名前にします。このオプションが機能するには、JAR ファイルのマニフェストに\f3「Main\-Class:\fP\f4classname\fP\f3」\fPという形式の行を指定する必要があります。\f2classname\fP には、アプリケーションの開始位置として機能する \f2public\ static\ void\ main(String[]\ args)\fP メソッドを含むクラスを指定します。JAR ファイルとそのマニフェストについては、jar(1)と、 -.na -\f2Java チュートリアル\fP @ -.fi -http://download.oracle.com/javase/tutorial/deployment/jarの「Trail: Jar Files」を参照してください。 -.LP -このオプションを使用すると、指定した JAR ファイルがすべてのユーザークラスのソースになり、ユーザークラスパスのほかの設定は無視されます。 -.LP -Solaris 8 では、「java \-jar」オプションで実行できる JAR ファイルは、実行権限のセットを保持しています。このため、「java \-jar」を使用しないで実行することも可能です。Java Archive (JAR) ファイル -.na - @ -.fi -http://java.sun.com/javase/6/docs/technotes/guides/jar/index.html -.TP 3 -\-javaagent:jarpath[=options] -Java プログラミング言語エージェントをロードします。 java.lang.instrument を参照してください。 -.na - @ -.fi -http://java.sun.com/javase/6/docs/api/java/lang/instrument/package\-summary.html -.TP 3 -\-jre\-restrict\-search -ユーザープライベートな JRE をバージョン検索に含めます。 -.TP 3 -\-no\-jre\-restrict\-search -ユーザープライベートな JRE をバージョン検索から除外します。 -.TP 3 -\-verbose -.TP 3 -\-verbose:class -クラスがロードされるたびにクラスに関する情報を表示します。 -.TP 3 -\-verbose:gc -ガベージコレクションイベントが発生するたびに報告します。 -.TP 3 -\-verbose:jni -ネイティブメソッドの使用およびその他の Java Native Interface (JNI) アクティビティーに関する情報を報告します。 -.TP 3 -\-version -バージョン情報を表示して終了します。 -.TP 3 -\-version:release -コマンド行に指定されたクラスまたは JAR ファイルが、\f2release\fP で指定されたバージョンを必要としていることを示します。起動された java コマンドのバージョンがこの指定内容を満たさず、かつ適切な実装がシステム上で見つかった場合には、その適切な実装が使用されます。 -.LP -\f2release\fP では、特定のバージョンを指定できるだけでなく、バージョン文字列と呼ばれるバージョンのリストを指定することもできます。バージョン文字列は、いくつかのバージョン範囲を空白で区切った形式の順序付きリストです。バージョン範囲は、バージョン ID、バージョン ID の後にアスタリスク (*) を付加したもの、バージョン ID の後にプラス記号 (+) を付加したもの、2 つのバージョン範囲をアンパサンド (&) で結合したもの、のいずれかになります。アスタリスクはプレフィックス一致を、プラス記号は指定されたバージョン以上を、アンパサンドは 2 つのバージョン範囲の論理積を、それぞれ意味します。次に例を示します。 -.nf -\f3 -.fl -\-version:"1.6.0_13 1.6*&1.6.0_10+" -.fl -\fP -.fi -上記の意味は、バージョン 1.6.0_13、1.6 をバージョン ID プレフィックスに持つ 1.6.0_10 以上のバージョン、のいずれかをクラスまたは JAR ファイルが必要としている、ということです。バージョン文字列の厳密な構文や定義については、「Java Network Launching Protocol & API Specification (JSR\-56)」の「Appendix A」を参照してください。 -.LP -JAR ファイルの場合は通常、バージョン要件をコマンド行に指定するよりも、JAR ファイルのマニフェスト内に指定することが推奨されています。 -.LP -このオプションの使用に関する重要なポリシー情報については、後述の「注」節を参照してください。 -.TP 3 -\-showversion -バージョン情報を表示して続行します。 -.TP 3 -\-? -.TP 3 -\-help -使用法を表示して終了します。 -.TP 3 -\-splash:imagepath -\f2imagepath\fP に指定された画像を含むスプラッシュ画面を表示します。 -.TP 3 -\-X -非標準オプションに関する情報を表示して終了します。 +.PP +\fIjava\fRコマンドは、次のカテゴリに分類できる広範なオプションをサポートしています。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +標準オプション .RE - -.LP -.SS +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} 非標準オプション -.LP -.RS 3 -.TP 3 -\-Xint -インタプリタ専用モードで動作します。ネイティブコードへのコンパイルは無効になり、すべてのバイトコードがインタプリタによって実行されます。Java HotSpot VM に対応するコンパイラが提供するパフォーマンス上の利点は、このモードでは実現されません。 -.TP 3 -\-Xbatch -バックグラウンドコンパイルを無効にします。通常、VM では、バックグラウンドコンパイルが終了するまで、メソッドをバックグラウンドタスクとしてコンパイルし、インタプリタモードでメソッドを実行します。\f2\-Xbatch\fP フラグを指定すると、バックグラウンドコンパイルが無効になり、すべてのメソッドのコンパイルが完了するまでフォアグラウンドタスクとして処理されます。 -.TP 3 -\-Xbootclasspath:bootclasspath -ブートクラスファイルを探すディレクトリ、JAR アーカイブ、および ZIP アーカイブをコロンで区切ったリストで指定します。指定したパスに存在するブートクラスファイルが、Java プラットフォーム JDK に含まれるブートクラスファイルの代わりに使用されます。\f2注: rt.jar 内のクラスをオーバーライドする目的でこのオプションを使用するアプリケーションは、システムに配置しないでください。Java Runtime Environment バイナリコードライセンス違反になります。\fP -.TP 3 -\-Xbootclasspath/a:path -ディレクトリ、JAR アーカイブ、および ZIP アーカイブのパスをコロンで区切って指定します。パスはデフォルトのブートストラップクラスパスのあとに追加されます。 -.TP 3 -\-Xbootclasspath/p:path -ディレクトリ、JAR アーカイブ、および ZIP アーカイブのパスをコロンで区切って指定します。パスはデフォルトのブートストラップクラスパスの前に追加されます。\f2注: rt.jar 内のクラスをオーバーライドする目的でこのオプションを使用するアプリケーションは、システムに配置しないでください。Java Runtime Environment バイナリコードライセンス違反になります。\fP -.TP 3 -\-Xcheck:jni -Java Native Interface (JNI) 機能に対して追加チェックを行います。具体的には、Java 仮想マシンは JNI 要求を処理する前に、JNI 関数に渡されるパラメータと、実行環境のデータを検証します。無効なデータが見つかった場合は、ネイティブコードに問題があることを示しているため、Java 仮想マシンは致命的エラーを発生して終了します。このオプションを使用すると、パフォーマンス低下が予想されます。 -.TP 3 -\-Xfuture -クラスとファイルの形式を厳密にチェックします。下位互換性を保つため、JDK の仮想マシンが実行するデフォルトの形式チェックは、JDK ソフトウェアのバージョン 1.1.x が実行するチェックと同程度の厳密さになっています。\f3\-Xfuture\fP フラグを指定すると、クラスファイル形式の仕様への準拠を強化するためのより厳密なチェックが有効になります。Java アプリケーション起動ツールの将来のリリースでは、より厳密なチェックがデフォルトになるため、新しいコードを開発するときにはこのフラグを使用することをお勧めします。 -.TP 3 -\-Xnoclassgc -クラスのガベージコレクションを無効にします。このオプションを使用すると、ロード済みクラスからメモリーが回復されることがなくなるため、全体的なメモリー使用量が増大します。この場合、アプリケーションによっては OutOfMemoryError がスローされる可能性があります。 -.TP 3 -\-Xincgc -インクリメンタルガーベジコレクタを有効にします。インクリメンタルガベージコレクタは、デフォルトでは無効になっています。 有効にすると、プログラムの実行中にガベージコレクションによる一時停止が発生しなくなります。インクリメンタルガベージコレクタは、プログラムと同時に実行することがあり、この場合、プログラムの利用できるプロセッサ能力が低下します。 -.TP 3 -\-Xloggc:file -\-verbose:gc と同様にガベージコレクションイベントが発生するたびに報告しますが、そのデータを \f2file\fP に記録します。\f2\-verbose:gc\fP を指定したときに報告される情報のほかに、報告される各イベントの先頭に、最初のガベージコレクションイベントからの経過時間 (秒単位) が付け加えられます。 -.LP -ネットワークの応答時間によって JVM の実行速度が低下するのを避けるため、このファイルの格納先は、常にローカルファイルシステムにしてください。ファイルシステムが満杯になると、ファイルは切り詰められ、そのファイルにデータが引き続き記録されます。このオプションと \f2\-verbose:gc\fP の両方がコマンド行に指定されている場合は、このオプションが優先されます。 -.TP 3 -\-Xmsn -メモリー割り当てプールの初期サイズをバイト数で指定します。指定する値は、1M バイトより大きい 1024 の倍数にしなければなりません。キロバイトを指定するには、文字 \f2k\fP または \f2K\fP を付けます。メガバイトを指定するには、文字 \f2m\fP または \f2M\fP を付けます。デフォルト値は、実行時にシステムの設定に基づいて選択されます。詳細については、「 -.na -\f2HotSpot Ergonomics\fP @ -.fi -http://java.sun.com/javase/6/docs/technotes/guides/vm/gc\-ergonomics.html」を参照してください。 -.LP -例: -.nf -\f3 -.fl - \-Xms6291456 -.fl - \-Xms6144k -.fl - \-Xms6m -.fl - -.fl -\fP -.fi -.TP 3 -\-Xmxn -メモリー割り当てプールの最大サイズをバイト数で指定します。指定する値は、2M バイトより大きい 1024 の倍数にしなければなりません。キロバイトを指定するには、文字 \f2k\fP または \f2K\fP を付けます。メガバイトを指定するには、文字 \f2m\fP または \f2M\fP を付けます。デフォルト値は、実行時にシステムの設定に基づいて選択されます。詳細については、「 -.na -\f2HotSpot Ergonomics\fP @ -.fi -http://java.sun.com/javase/6/docs/technotes/guides/vm/gc\-ergonomics.html」を参照してください。 -.br -例: -.nf -\f3 -.fl - \-Xmx83886080 -.fl - \-Xmx81920k -.fl - \-Xmx80m -.fl - -.fl -\fP -.fi -Solaris 7 および Solaris 8 SPARC プラットフォームの場合のこの値の上限は、およそ 4000m からオーバーヘッドの量を引いたものです。Solaris 2.6 および x86 プラットフォームの場合の上限は、およそ 2000m からオーバーヘッドの量を引いたものです。Linux プラットフォームの場合の上限は、およそ 2000m からオーバーヘッドの量を引いたものです。 -.TP 3 -\-Xprof -実行中のプログラムのプロファイルを生成し、プロファイルデータを標準出力に出力します。このオプションは、プログラム開発用のユーティリティーとして提供されています。 本番稼動システムでの使用を目的としたものではありません。 -.TP 3 -\-Xrs -Java 仮想マシン (JVM) によるオペレーティングシステムシグナルの使用を減らします。 -.LP -以前のリリースでは、Java アプリケーションを秩序正しくシャットダウンするためのシャットダウンフック機能が追加されました。この機能により、JVM が突然終了した場合でも、シャットダウン時にユーザークリーンアップコード (データベース接続のクローズなど) を実行できるようになりました。 -.LP -Sun の JVM は、シグナルをキャッチすることによって、JVM の異常終了のためのシャットダウンフックを実装します。JVM は、SIGHUP、SIGINT、および SIGTERM を使用して、シャットダウンフックの実行を開始します。 -.LP -JVM は、デバッグの目的でスレッドスタックをダンプするという、1.2 より前からある機能を実現するためにも、同様の機構を使用します。Sun の JVM は、スレッドダンプを実行するために SIGQUIT を使用します。 -.LP -JVM を埋め込んでいるアプリケーションが SIGINT や SIGTERM などのシグナルを頻繁にトラップする必要があると、JVM そのもののシグナルハンドラの処理に支障が出る可能性があります。\f3\-Xrs\fP コマンド行オプションを使用すると、この問題に対処できます。Sun の JVM に対して \f3\-Xrs\fP を使用すると、SIGINT、SIGTERM、SIGHUP、および SIGQUIT に対するシグナルマスクは JVM によって変更されず、これらのシグナルに対するシグナルハンドラはインストールされません。 -.LP -\f3\-Xrs\fP を指定した場合、次の 2 つの影響があります。 -.RS 3 -.TP 2 -o -SIGQUIT によるスレッドダンプを利用できない -.TP 2 -o -シャットダウンフック処理の実行は、JVM が終了しようとしている時点で System.exit() を呼び出すなどして、ユーザーコード側で行う必要がある .RE -.TP 3 -\-Xssn -スレッドのスタックサイズを設定します。 -.TP 3 -\-XX:+UseAltSigs -VM ではデフォルトで \f2SIGUSR1\fP および \f2SIGUSR2\fP を使用しますが、\f2SIGUSR1\fP および \f2SIGUSR2\fP をシグナル連鎖するアプリケーションと 競合する場合があります。\f2\-XX:+UseAltSigs\fP オプションは、VM にデフォルトとして \f2SIGUSR1\fP と \f2SIGUSR2\fP 以外のシグナルを使用させます。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +高度なランタイム・オプション .RE - -.LP -.SH "注" -.LP -.LP -\f3\-version:\fP\f2release\fP コマンド行オプションでは、どんなに複雑にリリースを指定してもかまいません。ただし、現実的なリリース指定の限られたサブセットを使用するだけでも適切なポリシーを表現できるため、それらのサブセットのみが完全にサポートされます。それらのポリシーを次に示します。 -.LP -.RS 3 -.TP 3 -1. -任意のバージョン。これは、このオプションを使用しないことで表現できます。 -.TP 3 -2. -ある特定のバージョン ID よりも大きい任意のバージョン。次に例を示します。 -.nf -\f3 -.fl -"1.6.0_10+" -.fl -\fP -.fi -この場合、 \f21.6.0_10\fP よりも大きい任意のバージョンが使用されます。これは、指定されたバージョンで特定のインタフェースが導入された (あるいはそのバグが修正された) 場合に便利です。 -.TP 3 -3. -ある特定のバージョン ID よりも大きいバージョン。ただし、そのリリースファミリの上限によって制限するもの。次に例を示します。 -.nf -\f3 -.fl -"1.6.0_10+&1.6*" -.fl -\fP -.fi -.TP 3 -4. -上の項目 2 と項目 3 の「OR」式。次に例を示します。 -.nf -\f3 -.fl -"1.6.0_10+&1.6* 1.7+" -.fl -\fP -.fi -これは項目 2 に似ていますが、ある変更が特定のリリース (1.7) で導入されたが、その同じ変更が以前のリリースのアップデートでも利用可能になった、という場合に便利です。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +高度なJITコンパイラ・オプション +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +高度なサービスアビリティ・オプション +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +高度なガベージ・コレクション・オプション +.RE +.PP +標準のオプションは、Java Virtual Machine (JVM)のすべての実装でサポートすることが保証されます。これらは、JREのバージョンの確認、クラス・パスの設定、冗長な出力の有効化などの一般的なアクションに使用されます。 +.PP +標準以外のオプションは、Java HotSpot仮想マシンに固有の汎用オプションであるため、すべてのJVM実装でサポートされることは保証されず、変更される可能性があります。これらのオプションは\fI\-X\fRで開始します。 +.PP +拡張オプションは、不用意に使用しないことをお薦めします。これらは、特定のシステム要件を持つことが多く、システム構成パラメータへの特権アクセスが必要な場合があるJava HotSpot仮想マシン操作の特定の領域を調整するために使用される開発者オプションです。これらは、すべてのJVM実装でサポートされることは保証されず、変更される可能性があります。拡張オプションは\fI\-XX\fRで始まります。 +.PP +最新リリースで非推奨または削除されるオプションを追跡するために、ドキュメントの最後に非推奨で削除されたオプションという名前のセクションがあります。 +.PP +ブール・オプションは、デフォルトで無効になっている機能を有効にしたり、デフォルトで有効になっている機能を無効にするために使用されます。このようなオプションは、パラメータを必要としません。ブール値\fI\-XX\fRオプションは、プラス記号(\fI\-XX:+\fR\fIOptionName\fR)を使用して有効にし、マイナス記号(\fI\-XX:\-\fR\fIOptionName\fR)を使用して無効にします。 +.PP +引数が必要なオプションの場合、引数は、オプション名を空白、コロン(:)または等号(=)で区切ったものになるか、あるいは引数がオプションの後に直接続く場合もあります(正確な構文は各オプションによって異なります)。サイズをバイト単位で指定するよう求められている場合、接尾辞を使用しないか、あるいはキロバイト(KB)には接尾辞\fIk\fRまたは\fIK\fR、メガバイト(MB)には接尾辞\fIm\fRまたは\fIM\fR、ギガバイト(GB)には接尾辞\fIg\fRまたは\fIG\fRを使用します。たとえば、サイズを8GBに設定するには、\fI8g\fR、\fI8192m\fR、\fI8388608k\fRまたは\fI8589934592\fRのいずれかを引数として指定できます。パーセントの指定が必要な場合は、0から1の数値を使用します(たとえば、25%の場合は\fI0\&.25\fRを指定します)。 +.SS "標準オプション" +.PP +これらは、JVMのすべての実装でサポートされる最も一般的に使用されるオプションです。 +.PP +\-agentlib:\fIlibname\fR[=\fIoptions\fR] +.RS 4 +指定したネイティブ・エージェント・ライブラリをロードします。ライブラリ名の後に、ライブラリに固有のオプションのカンマ区切りリストを使用できます。 +.sp +オプション\fI\-agentlib:foo\fRを指定した場合、JVMは、\fILD_LIBRARY_PATH\fRシステム変数(OS Xでは、この変数は\fIDYLD_LIBRARY_PATH\fRになります)で指定された場所に\fIlibfoo\&.so\fRという名前のライブラリをロードしようとします。 +.sp +次の例では、スタックの深さ3で、20ミリ秒ごとにヒープ・プロファイリング・ツール(HPROF)ライブラリをロードして、サンプルのCPU情報を取得する方法を示します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-agentlib:hprof=cpu=samples,interval=20,depth=3 +.fi +.if n \{\ +.RE +.\} +次の例では、メイン・クラスのロード前にJVMを一時停止して、Javaデバッグ・ワイヤ・プロトコル(JDWP)ライブラリをロードして、ポート8000でのソケット接続用にリスニングする方法を示します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-agentlib:jdwp=transport=dt_socket,server=y,address=8000 +.fi +.if n \{\ +.RE +.\} +ネイティブ・エージェント・ライブラリの詳細は、次を参照してください。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +http://docs\&.oracle\&.com/javase/8/docs/api/java/lang/instrument/package\-summary\&.htmlにある\fIjava\&.lang\&.instrument\fRパッケージの説明 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +http://docs\&.oracle\&.com/javase/8/docs/platform/jvmti/jvmti\&.html#startingにあるJVMツール・インタフェース・ガイドのエージェントのコマンドライン・オプションに関する項 +.RE +.RE +.PP +\-agentpath:\fIpathname\fR[=\fIoptions\fR] +.RS 4 +絶対パス名で指定されたネイティブ・エージェント・ライブラリをロードします。このオプションは\fI\-agentlib\fRと同等ですが、ライブラリのフル・パスおよびファイル名を使用します。 +.RE +.PP +\-client +.RS 4 +Java HotSpot Client VMを選択します。64ビット・バージョンのJava SE Development Kit (JDK)では、現在、このオプションは無視され、かわりにServer JVMが使用されます。 +.sp +デフォルトのJVM選択は、http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/vm/server\-class\&.htmlにある +サーバークラス・マシンの検出を参照してください。 +.RE +.PP +\-D\fIproperty\fR=\fIvalue\fR +.RS 4 +システム・プロパティの値を設定します。\fIproperty\fR変数は、プロパティの名前を表す、空白のない文字列です。\fIvalue\fR変数は、プロパティの値を表す文字列です。\fIvalue\fRが空白を含む文字列の場合、それを引用符で囲みます(例: +\fI\-Dfoo="foo bar"\fR)。 +.RE +.PP +\-d32 +.RS 4 +アプリケーションを32ビット環境で実行します。32ビット環境がインストールされていないかサポートされていない場合は、エラーが報告されます。デフォルトでは、64ビット・システムが使用されている場合を除き、アプリケーションは32ビット環境で実行されます。 +.RE +.PP +\-d64 +.RS 4 +アプリケーションを64ビット環境で実行します。64ビット環境がインストールされていないかサポートされていない場合は、エラーが報告されます。デフォルトでは、64ビット・システムが使用されている場合を除き、アプリケーションは32ビット環境で実行されます。 +.sp +現在のところ、Java HotSpot Server VMのみが64ビットの操作をサポートしているため、\fI\-d64\fR使用時には\fI\-server\fRオプションが暗黙的に使用されます。\fI\-d64\fR使用時には、\fI\-client\fRオプションは無視されます。この仕様は、将来のリリースでは変更になる可能性があります。 +.RE +.PP +\-disableassertions[:[\fIpackagename\fR]\&.\&.\&.|:\fIclassname\fR], \-da[:[\fIpackagename\fR]\&.\&.\&.|:\fIclassname\fR] +.RS 4 +アサーションを無効にします。デフォルトでは、アサーションはすべてのパッケージおよびクラスで無効になっています。 +.sp +引数なしの\fI\-disableassertions\fR +(\fI\-da\fR)を指定すると、すべてのパッケージおよびクラスでアサーションが無効になります。\fI\&.\&.\&.\fRで終わる\fIpackagename\fR引数を指定すると、指定したパッケージとそのサブパッケージ内でアサーションが無効になります。引数として\fI\&.\&.\&.\fRのみを指定すると、現在の作業ディレクトリにある名前のないパッケージ内でアサーションが無効になります。\fIclassname\fR引数を指定すると、切替えによって、指定したクラス内でアサーションが無効になります。 +.sp +\fI\-disableassertions\fR +(\fI\-da\fR)オプションは、すべてのクラス・ローダーおよびシステム・クラスに適用されます(システム・クラスにはクラス・ローダーはありません)。このルールには1つ例外があります。オプションの引数が指定されていない場合は、システム・クラスに適用されません。これにより、システム・クラスを除くすべてのクラスでアサーションを簡単に無効にすることができます。\fI\-disablesystemassertions\fRオプションを使用すると、すべてのシステム・クラスでアサーションを無効にすることができます。 +.sp +特定のパッケージやクラスでアサーションを明示的に有効にするには、\fI\-enableassertions\fR +(\fI\-ea\fR)オプションを使用します。両方のオプションを同時に使用できます。たとえば、パッケージ\fIcom\&.wombat\&.fruitbat\fR +(およびそのサブパッケージ)ではアサーションを有効にして、クラス\fIcom\&.wombat\&.fruitbat\&.Brickbat\fRではアサーションを無効にして、\fIMyClass\fRアプリケーションを実行するには、次のコマンドを使用します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +java \-ea:com\&.wombat\&.fruitbat\&.\&.\&. \-da:com\&.wombat\&.fruitbat\&.Brickbat MyClass +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\-disablesystemassertions, \-dsa +.RS 4 +すべてのシステム・クラス内でアサーションを無効にします。 +.RE +.PP +\-enableassertions[:[\fIpackagename\fR]\&.\&.\&.|:\fIclassname\fR], \-ea[:[\fIpackagename\fR]\&.\&.\&.|:\fIclassname\fR] +.RS 4 +アサーションを有効にします。デフォルトでは、アサーションはすべてのパッケージおよびクラスで無効になっています。 +.sp +引数なしの\fI\-enableassertions\fR +(\fI\-ea\fR)を指定すると、すべてのパッケージおよびクラスでアサーションが有効になります。\fI\&.\&.\&.\fRで終わる\fIpackagename\fR引数を指定すると、指定したパッケージとそのサブパッケージ内でアサーションが有効になります。引数として\fI\&.\&.\&.\fRのみを指定すると、現在の作業ディレクトリにある名前のないパッケージ内でアサーションが有効になります。\fIclassname\fR引数を指定すると、切替えによって、指定したクラス内でアサーションが有効になります。 +.sp +\fI\-enableassertions\fR +(\fI\-ea\fR)オプションは、すべてのクラス・ローダーおよびシステム・クラスに適用されます(システム・クラスにはクラス・ローダーはありません)。このルールには1つ例外があります。オプションの引数が指定されていない場合は、システム・クラスに適用されません。これにより、システム・クラスを除くすべてのクラスでアサーションを簡単に有効にすることができます。\fI\-enablesystemassertions\fRオプションは、すべてのシステム・クラスでアサーションを有効にする別のスイッチを提供します。 +.sp +特定のパッケージやクラスでアサーションを明示的に無効にするには、\fI\-disableassertions\fR +(\fI\-da\fR)オプションを使用します。単一コマンドにこれらのスイッチのインスタンスを複数指定した場合は、指定したスイッチが順番に処理されてからクラスがロードされます。たとえば、パッケージ\fIcom\&.wombat\&.fruitbat\fR +(およびそのサブパッケージ)でのみアサーションを有効にして、クラス\fIcom\&.wombat\&.fruitbat\&.Brickbat\fRではアサーションを無効にして、\fIMyClass\fRアプリケーションを実行するには、次のコマンドを使用します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +java \-ea:com\&.wombat\&.fruitbat\&.\&.\&. \-da:com\&.wombat\&.fruitbat\&.Brickbat MyClass +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\-enablesystemassertions, \-esa +.RS 4 +すべてのシステム・クラス内でアサーションを有効にします。 +.RE +.PP +\-help, \-? +.RS 4 +実際にJVMを実行せずに、\fIjava\fRコマンドの使用状況情報を表示します。 +.RE +.PP +\-jar \fIfilename\fR +.RS 4 +JARファイルにカプセル化されたプログラムを実行します。\fIfilename\fR引数は、使用するアプリケーションの開始点として機能する\fIpublic static void main(String[] args)\fRメソッドを定義する、\fIMain\-Class:\fR\fIclassname\fRという形式の1行を含むマニフェストを持つJARファイルの名前です。 +.sp +\fI\-jar\fRオプションを使用すると、指定したJARファイルがすべてのユーザー・クラスのソースになり、クラス・パスの他の設定は無視されます。 +.sp +JARファイルの詳細は、次のリソースを参照してください。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +jar(1) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/jar/index\&.htmlにあるJavaアーカイブ(JAR)ファイルのガイド +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +http://docs\&.oracle\&.com/javase/tutorial/deployment/jar/index\&.htmlにある +「レッスン: JARファイルのプログラムのパッケージ化」 +.RE +.RE +.PP +\-javaagent:\fIjarpath\fR[=\fIoptions\fR] +.RS 4 +指定したJavaプログラミング言語エージェントをロードします。Javaアプリケーションのインストゥルメントの詳細は、http://docs\&.oracle\&.com/javase/8/docs/api/java/lang/instrument/package\-summary\&.htmlにあるJava APIドキュメントの\fIjava\&.lang\&.instrument\fRパッケージの説明を参照してください。 +.RE +.PP +\-jre\-restrict\-search +.RS 4 +ユーザー・プライベートなJREをバージョン検索に含めます。 +.RE +.PP +\-no\-jre\-restrict\-search +.RS 4 +ユーザー・プライベートなJREをバージョン検索から除外します。 +.RE +.PP +\-server +.RS 4 +Java HotSpot Server VMを選択します。64ビット・バージョンのJDKでは、Server VMのみをサポートしているため、その場合、このオプションは暗黙的です。 +.sp +デフォルトのJVM選択は、http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/vm/server\-class\&.htmlにある +サーバークラス・マシンの検出を参照してください。 +.RE +.PP +\-showversion +.RS 4 +バージョン情報を表示し、アプリケーションの実行を続行します。このオプションは\fI\-version\fRオプションと同等ですが、\-versionはバージョン情報の表示後にJVMに終了を指示する点が異なります。 +.RE +.PP +\-splash:\fIimgname\fR +.RS 4 +\fIimgname\fRで指定されたイメージを含むスプラッシュ画面を表示します。たとえば、アプリケーションの起動時に\fIimages\fRディレクトリの\fIsplash\&.gif\fRファイルを表示するには、次のオプションを使用します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-splash:images/splash\&.gif +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\-verbose:class +.RS 4 +ロードされた各クラスに関する情報を表示します。 +.RE +.PP +\-verbose:gc +.RS 4 +各ガベージ・コレクション(GC)イベントに関する情報を表示します。 +.RE +.PP +\-verbose:jni +.RS 4 +ネイティブ・メソッドの使用およびその他のJava Native Interface (JNI)アクティビティに関する情報を表示します。 +.RE +.PP +\-version +.RS 4 +バージョン情報を表示してから終了します。このオプションは\fI\-showversion\fRオプションと同等ですが、\-showversionはバージョン情報の表示後にJVMに終了を指示しない点が異なります。 +.RE +.PP +\-version:\fIrelease\fR +.RS 4 +アプリケーションの実行に使用するリリース・バージョンを指定します。コールされた\fIjava\fRコマンドのバージョンがこの指定内容を満たさず、かつ適切な実装がシステム上で見つかった場合には、その適切な実装が使用されます。 +.sp +\fIrelease\fR引数は、正確なバージョン文字列、または空白で区切られたバージョン文字列とバージョン範囲のリストを指定します。\fIバージョン文字列\fRは、次の形式で、開発者のバージョン番号を指定します: +\fI1\&.\fR\fIx\fR\fI\&.0_\fR\fIu\fR +(\fIx\fRはメジャー・バージョン番号、\fIu\fRは更新バージョン番号です)。\fIバージョン範囲\fRは、このバージョン以降を指定するにはバージョン文字列の後にプラス記号(\fI+\fR)を続けたもの、または一致する接頭辞を含む任意のバージョン文字列を指定するには一部のバージョン文字列の後にアスタリスク(\fI*\fR)を続けたもので構成されます。論理\fIOR\fRの組合せには空白、2つのバージョンの文字列/範囲の論理\fIAND\fRの組合せにはアンパサンド(\fI&\fR)を使用して、バージョン文字列とバージョン範囲を組み合せることができます。たとえば、クラスまたはJARファイルの実行にJRE 6u13 (1\&.6\&.0_13)または6u10 (1\&.6\&.0_10)以降の任意のJRE 6のいずれかを必要とする場合、次を指定します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-version:"1\&.6\&.0_13 1\&.6* & 1\&.6\&.0_10+" +.fi +.if n \{\ +.RE +.\} +引用符が必要なのは、\fIrelease\fRパラメータに空白がある場合のみです。 +.sp +JARファイルの場合は、バージョン要件をコマンドラインに指定するよりも、JARファイルのマニフェスト内に指定することが推奨されています。 +.RE +.SS "非標準オプション" +.PP +これらのオプションは、Java HotSpot仮想マシンに固有の汎用オプションです。 +.PP +\-X +.RS 4 +使用可能なすべての\fI\-X\fRオプションのヘルプを表示します。 +.RE +.PP +\-Xbatch +.RS 4 +バックグラウンド・コンパイルを無効にします。デフォルトでは、JVMでは、バックグラウンド・コンパイルが終了するまで、メソッドをバックグラウンド・タスクとしてコンパイルし、インタプリタ・モードでメソッドを実行します。\fI\-Xbatch\fRフラグを指定すると、バックグラウンド・コンパイルが無効になり、すべてのメソッドのコンパイルが完了するまでフォアグラウンド・タスクとして処理されます。 +.sp +このオプションは\fI\-XX:\-BackgroundCompilation\fRと同等です。 +.RE +.PP +\-Xbootclasspath:\fIpath\fR +.RS 4 +ブート・クラス・ファイルを検索するディレクトリ、JARファイルおよびZIPアーカイブの、コロン(:)で区切られたリストを指定します。これらは、JDKに含まれるブート・クラス・ファイルのかわりに使用されます。 +.sp +JREバイナリ・コード・ライセンスに違反するため、\fIrt\&.jar\fRでクラスをオーバーライドする目的で、このオプションを使用するアプリケーションをデプロイしないでください。 +.RE +.PP +\-Xbootclasspath/a:\fIpath\fR +.RS 4 +デフォルトのブートストラップ・クラス・パスの最後に追加するディレクトリ、JARファイルおよびZIPアーカイブの、コロン(:)で区切られたリストを指定します。 +.sp +JREバイナリ・コード・ライセンスに違反するため、\fIrt\&.jar\fRでクラスをオーバーライドする目的で、このオプションを使用するアプリケーションをデプロイしないでください。 +.RE +.PP +\-Xbootclasspath/p:\fIpath\fR +.RS 4 +デフォルトのブートストラップ・クラス・パスの先頭に追加するディレクトリ、JARファイルおよびZIPアーカイブの、コロン(:)で区切られたリストを指定します。 +.sp +JREバイナリ・コード・ライセンスに違反するため、\fIrt\&.jar\fRでクラスをオーバーライドする目的で、このオプションを使用するアプリケーションをデプロイしないでください。 +.RE +.PP +\-Xboundthreads +.RS 4 +ユーザー・レベルのスレッドをカーネル・スレッドにバインドします。 +.RE +.PP +\-Xcheck:jni +.RS 4 +Java Native Interface (JNI)機能に対して追加チェックを行います。具体的には、これは、JNIリクエストを処理する前に、JNI関数に渡されるパラメータと実行環境のデータを検証します。無効なデータが見つかった場合は、ネイティブ・コードに問題があることを示しているため、JVMはリカバリ不能なエラーを発生して終了します。このオプションを使用すると、パフォーマンス低下が予想されます。 +.RE +.PP +\-Xcomp +.RS 4 +最初の呼出しでJavaコードおよびコンパイル・メソッドの解釈を無効にします。デフォルトでは、JITコンパイラは、10,000の解釈されたメソッド呼出しを実行して、効率的なコンパイルのための情報を収集します。効率を犠牲にしてコンパイルのパフォーマンスを向上させるには、\fI\-Xcomp\fRフラグを使用して、解釈されたメソッド呼出しを無効にします。 +.sp +\fI\-XX:CompileThreshold\fRオプションを使用して、コンパイルの前に、解釈されたメソッド呼出しの数を変更することもできます。 +.RE +.PP +\-Xdebug +.RS 4 +何も行いません。下位互換性のために用意されています。 +.RE +.PP +\-Xdiag +.RS 4 +追加の診断メッセージを表示します。 +.RE +.PP +\-Xfuture +.RS 4 +クラス・ファイル形式の仕様への準拠を強化する、厳密なクラス・ファイル形式のチェックが有効になります。将来のリリースでは、より厳密なチェックがデフォルトになるため、新しいコードを開発するときには、開発者はこのフラグを使用することをお薦めします。 +.RE +.PP +\-Xincgc +.RS 4 +増分GCを有効にします。 +.RE +.PP +\-Xint +.RS 4 +インタプリタ専用モードでアプリケーションを実行します。ネイティブ・コードへのコンパイルは無効になり、すべてのバイトコードがインタプリタによって実行されます。ジャスト・イン・タイム(JIT)コンパイラが提供するパフォーマンス上の利点は、このモードでは実現されません。 +.RE +.PP +\-Xinternalversion +.RS 4 +\fI\-version\fRオプションより詳細なJVMバージョン情報を表示してから終了します。 +.RE +.PP +\-Xloggc:\fIfilename\fR +.RS 4 +詳細なGCイベント情報をロギング用にリダイレクトするファイルを設定します。このファイルに書き込まれる情報は、記録された各イベントの前に行われる最初のGCイベント以降に経過した時間を指定した\fI\-verbose:gc\fRの出力と類似しています。\fI\-Xloggc\fRオプションは\fI\-verbose:gc\fRをオーバーライドします(これらの両方が同じ\fIjava\fRコマンドで指定された場合)。 +.sp +例: +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-Xloggc:garbage\-collection\&.log +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\-Xmaxjitcodesize=\fIsize\fR +.RS 4 +JITコンパイルされたコードの最大コード・キャッシュ・サイズ(バイト単位)を指定します。キロバイトを示す場合は文字\fIk\fRまたは\fIK\fR、メガバイトを示す場合は文字\fIm\fRまたは\fIM\fR、ギガバイトを示す場合は文字\fIg\fRまたは\fIG\fRを追加します。デフォルトでは、この値は48MBに設定されています。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-Xmaxjitcodesize=48m +.fi +.if n \{\ +.RE +.\} +このオプションは\fI\-XX:ReservedCodeCacheSize\fRと同等です。 +.RE +.PP +\-Xmixed +.RS 4 +ネイティブ・コードにコンパイルされたホット・メソッドを除き、インタプリタによってすべてのバイトコードを実行します。 +.RE +.PP +\-Xmn\fIsize\fR +.RS 4 +若い世代(ナーサリ)のヒープの初期サイズおよび最大サイズ(バイト単位)を設定します。キロバイトを示す場合は文字\fIk\fRまたは\fIK\fR、メガバイトを示す場合は文字\fIm\fRまたは\fIM\fR、ギガバイトを示す場合は文字\fIg\fRまたは\fIG\fRを追加します。 +.sp +ヒープの若い世代リージョンは新しいオブジェクトに使用されます。GCは、他のリージョンよりこのリージョンで、より頻繁に実行されます。若い世代のサイズが小さすぎる場合、多数のマイナー・ガベージ・コレクションが実行されます。サイズが大きすぎる場合、フル・ガベージ・コレクションのみが実行されますが、完了までに時間がかかることがあります。若い世代のサイズは、全体のヒープ・サイズの半分から4分の1の間にしておくことをお薦めします。 +.sp +次の例では、若い世代の初期サイズおよび最大サイズを様々な単位を使用して256MBに設定する方法を示します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-Xmn256m +\-Xmn262144k +\-Xmn268435456 +.fi +.if n \{\ +.RE +.\} +若い世代のヒープの初期サイズと最大サイズの両方を設定する\fI\-Xmn\fRオプションのかわりに、初期サイズの設定には\fI\-XX:NewSize\fRを、最大サイズの設定には\fI\-XX:MaxNewSize\fRを使用できます。 +.RE +.PP +\-Xms\fIsize\fR +.RS 4 +ヒープの初期サイズ(バイト単位)を設定します。指定する値は、1MBより大きい1024の倍数にする必要があります。キロバイトを示す場合は文字\fIk\fRまたは\fIK\fR、メガバイトを示す場合は文字\fIm\fRまたは\fIM\fR、ギガバイトを示す場合は文字\fIg\fRまたは\fIG\fRを追加します。 +.sp +次の例では、割り当てられたメモリーのサイズを様々な単位を使用して6MBに設定する方法を示します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-Xms6291456 +\-Xms6144k +\-Xms6m +.fi +.if n \{\ +.RE +.\} +このオプションを設定しない場合、初期サイズは、古い世代と若い世代に割り当てられたサイズの合計として設定されます。若い世代のヒープの初期サイズは、\fI\-Xmn\fRオプションまたは\fI\-XX:NewSize\fRオプションを使用して設定できます。 +.RE +.PP +\-Xmx\fIsize\fR +.RS 4 +メモリー割当てプールの最大サイズ(バイト単位)を指定します。指定する値は、2MBより大きい1024の倍数にする必要があります。キロバイトを示す場合は文字\fIk\fRまたは\fIK\fR、メガバイトを示す場合は文字\fIm\fRまたは\fIM\fR、ギガバイトを示す場合は文字\fIg\fRまたは\fIG\fRを追加します。デフォルト値は、実行時にシステム構成に基づいて選択されます。サーバー・デプロイメントでは、\fI\-Xms\fRおよび\fI\-Xmx\fRは通常同じ値に設定されます。詳細は、http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/vm/gc\-ergonomics\&.htmlにあるガベージ・コレクタ・エルゴノミックを参照してください。 +.sp +次の例では、割り当てられたメモリーの許可される最大サイズを様々な単位を使用して80MBに設定する方法を示します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-Xmx83886080 +\-Xmx81920k +\-Xmx80m +.fi +.if n \{\ +.RE +.\} +\fI\-Xmx\fRオプションは\fI\-XX:MaxHeapSize\fRと同等です。 +.RE +.PP +\-Xnoclassgc +.RS 4 +クラスのガベージ・コレクション(GC)を無効にします。これにより、GC時間を節約でき、アプリケーション実行中の中断が短縮されます。 +.sp +起動時に\fI\-Xnoclassgc\fRを指定すると、アプリケーション内のクラス・オブジェクトは、GCの間はそのまま残り、常にライブであるとみなされます。これにより、より多くのメモリーが永久に占有されることになり、注意して使用しないと、メモリー不足の例外がスローされます。 +.RE +.PP +\-Xprof +.RS 4 +実行中のプログラムのプロファイルを生成し、プロファイル・データを標準出力に送信します。このオプションは、プログラム開発用のユーティリティとして提供されています。本番稼働システムでの使用を目的としたものではありません。 +.RE +.PP +\-Xrs +.RS 4 +JVMによるオペレーティング・システム・シグナルの使用を減らします。 +.sp +シャットダウン・フックは、JVMが突然終了した場合でも、シャットダウン時にユーザー・クリーンアップ・コード(データベース接続のクローズなど)を実行することによって、Javaアプリケーションのシャットダウンを順番に有効にします。 +.sp +JVMは、予期しない終了のシャットダウン・フックを実装するためにシグナルをキャッチします。JVMは、\fISIGHUP\fR、\fISIGINT\fRおよび\fISIGTERM\fRを使用して、シャットダウン・フックの実行を開始します。 +.sp +JVMは、デバッグの目的でスレッド・スタックをダンプするという機能を実現するために、同様のメカニズムを使用します。JVMは、スレッド・ダンプを実行するために\fISIGQUIT\fRを使用します。 +.sp +JVMを埋め込んでいるアプリケーションは、\fISIGINT\fRや\fISIGTERM\fRなどのシグナルを頻繁にトラップする必要があり、その結果、JVMのシグナル・ハンドラと衝突する可能性があります。\fI\-Xrs\fRオプションは、この問題に対処するために使用できます。\fI\-Xrs\fRが使用されている場合、\fISIGINT\fR、\fISIGTERM\fR、\fISIGHUP\fRおよび\fISIGQUIT\fRのシグナル・マスクはJVMによって変更されず、これらのシグナルのシグナル・ハンドラはインストールされません。 +.sp +\fI\-Xrs\fRを指定すると、次の2つの結果が生じます: +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fISIGQUIT\fRによるスレッド・ダンプは使用できません。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +シャットダウン・フック処理の実行は、JVMが終了しようとしている時点で\fISystem\&.exit()\fRを呼び出すなどして、ユーザー・コード側で行う必要があります。 +.RE +.RE +.PP +\-Xshare:\fImode\fR +.RS 4 +クラス・データ共有モードを設定します。このオプションで使用可能な\fImode\fR引数は次のとおりです。 +.PP +auto +.RS 4 +可能な場合、共有クラスのデータを使用します。これは、Java HotSpot 32\-Bit Client VMの場合のデフォルト値です。 +.RE +.PP +on +.RS 4 +クラス・データ共有の使用が必要です。クラス・データ共有を使用できない場合、エラー・メッセージを出力して終了します。 +.RE +.PP +off +.RS 4 +共有クラス・データを使用しません。これは、Java HotSpot 32\-Bit Server VM、Java HotSpot 64\-Bit Client VMおよびJava HotSpot 64\-Bit Server VMの場合のデフォルト値です。 +.RE +.PP +dump +.RS 4 +クラス・データ共有アーカイブを手動で生成します。 +.RE +.RE +.PP +\-XshowSettings:\fIcategory\fR +.RS 4 +設定を表示して続行します。このオプションで使用可能な\fIcategory\fR引数は次のとおりです。 +.PP +all +.RS 4 +設定のすべてのカテゴリを表示します。これがデフォルト値です。 +.RE +.PP +locale +.RS 4 +ロケールに関連する設定を表示します。 +.RE +.PP +properties +.RS 4 +システム・プロパティに関連する設定を表示します。 +.RE +.PP +vm +.RS 4 +JVMの設定を表示します。 +.RE +.RE +.PP +\-Xss\fIsize\fR +.RS 4 +スレッドのスタック・サイズ(バイト単位)を設定します。KBを示す場合は文字\fIk\fRまたは\fIK\fR、MBを示す場合は文字\fIm\fRまたは\fIM\fR、GBを示す場合は文字\fIg\fRまたは\fIG\fRを追加します。デフォルト値はプラットフォームによって異なります。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +Linux/ARM (32ビット): 320KB +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +Linux/i386 (32ビット): 320KB +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +Linux/x64 (64ビット): 1024KB +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +OS X (64ビット): 1024KB +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +Oracle Solaris/i386 (32ビット): 320KB +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +Oracle Solaris/x64 (64ビット): 1024KB +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +Windows: 仮想メモリーによって異なります。 +.RE +.sp +次の例では、スレッド・スタック・サイズを異なる単位で1024KBに設定します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-Xss1m +\-Xss1024k +\-Xss1048576 +.fi +.if n \{\ +.RE +.\} +このオプションは\fI\-XX:ThreadStackSize\fRと同等です。 +.RE +.PP +\-Xusealtsigs +.RS 4 +JVM内部シグナルの\fISIGUSR1\fRおよび\fISIGUSR2\fRのかわりに、代替シグナルを使用します。このオプションは\fI\-XX:+UseAltSigs\fRと同等です。 +.RE +.PP +\-Xverify:\fImode\fR +.RS 4 +バイトコード・ベリファイアのモードを設定します。バイトコードの検証は一部の問題のトラブルシューティングに役立ちますが、実行中のアプリケーションへのオーバーヘッドを増大させます。このオプションで使用可能な\fImode\fR引数は次のとおりです。 +.PP +none +.RS 4 +バイトコードを検証しません。これにより、起動時間が短縮され、Javaによって提供される保護も軽減されます。 +.RE +.PP +remote +.RS 4 +ネットワークを介してリモートでロードされるクラスのみを検証します。これは、\fI\-Xverify\fRオプションを指定しない場合のデフォルトの動作です。 +.RE +.PP +all +.RS 4 +すべてのクラスを検証します。 +.RE +.RE +.SS "高度なランタイム・オプション" +.PP +これらのオプションは、Java HotSpot VMの実行時の動作を制御します。 +.PP +\-XX:+DisableAttachMechanism +.RS 4 +JVMにツールをアタッチするメカニズムを無効にするオプションを有効にします。デフォルトでは、このオプションは無効になっており、これは、アタッチ・メカニズムを有効にすると、\fIjcmd\fR、\fIjstack\fR、\fIjmap\fR、\fIjinfo\fRなどのツールを使用できることを意味します。 +.RE +.PP +\-XX:ErrorFile=\fIfilename\fR +.RS 4 +リカバリ不能なエラーが発生した場合にエラー・データが書き込まれるパスおよびファイル名を指定します。デフォルトでは、このファイルは、現在の作業ディレクトリに作成され、名前は\fIhs_err_pid\fR\fIpid\fR\fI\&.log\fR +(\fIpid\fRはエラーの原因となったプロセスの識別子)になります。次の例では、デフォルトのログ・ファイルを設定する方法を示します(プロセスの識別子は\fI%p\fRとして指定されます)。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-XX:ErrorFile=\&./hs_err_pid%p\&.log +.fi +.if n \{\ +.RE +.\} +次の例では、エラー・ログを\fI/var/log/java/java_error\&.log\fRに設定する方法を示します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-XX:ErrorFile=/var/log/java/java_error\&.log +.fi +.if n \{\ +.RE +.\} +(領域不足、権限の問題または別の問題により)指定したディレクトリにファイルを作成できない場合、ファイルはオペレーティング・システムの一時ディレクトリに作成されます。一時ディレクトリは\fI/tmp\fRです。 +.RE +.PP +\-XX:LargePageSizeInBytes=\fIsize\fR +.RS 4 +Javaヒープに使用される大きいページの最大サイズ(バイト単位)を設定します。\fIsize\fR引数は、2の累乗(2、4、8、16、\&.\&.\&.)である必要があります。キロバイトを示す場合は文字\fIk\fRまたは\fIK\fR、メガバイトを示す場合は文字\fIm\fRまたは\fIM\fR、ギガバイトを示す場合は文字\fIg\fRまたは\fIG\fRを追加します。デフォルトでは、サイズは0に設定され、これは、JVMでは大きいページのサイズが自動的に選択されていることを意味します。 +.sp +次の例では、大きいページのサイズを4メガバイト(MB)に設定する方法を示します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-XX:LargePageSizeInBytes=4m +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\-XX:MaxDirectMemorySize=\fIsize\fR +.RS 4 +新規I/O (\fIjava\&.nio\fRパッケージ)の直接バッファ割当ての最大合計サイズ(バイト単位)を設定します。キロバイトを示す場合は文字\fIk\fRまたは\fIK\fR、メガバイトを示す場合は文字\fIm\fRまたは\fIM\fR、ギガバイトを示す場合は文字\fIg\fRまたは\fIG\fRを追加します。デフォルトでは、サイズは0に設定され、これは、JVMではNIOの直接バッファ割当てのサイズが自動的に選択されていることを意味します。 +.sp +次の例では、NIOサイズを異なる単位で1024KBに設定する方法を示します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-XX:MaxDirectMemorySize=1m +\-XX:MaxDirectMemorySize=1024k +\-XX:MaxDirectMemorySize=1048576 +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\-XX:NativeMemoryTracking=\fImode\fR +.RS 4 +JVMのネイティブ・メモリー使用状況のトラッキングのモードを指定します。このオプションで使用可能な\fImode\fR引数は次のとおりです。 +.PP +off +.RS 4 +JVMのネイティブ・メモリー使用状況を追跡しません。これは、\fI\-XX:NativeMemoryTracking\fRオプションを指定しない場合のデフォルトの動作です。 +.RE +.PP +summary +.RS 4 +JVMサブシステム(Javaヒープ、クラス、コード、スレッドなど)によるメモリー使用状況のみ追跡します。 +.RE +.PP +detail +.RS 4 +JVMサブシステムによるメモリー使用状況のトラッキングに加えて、個々の\fICallSite\fR +(個々の仮想メモリー・リージョンおよびそのコミット済リージョン)によるメモリー使用状況を追跡します。 +.RE +.RE +.PP +\-XX:OnError=\fIstring\fR +.RS 4 +リカバリ不能なエラーが発生したときに実行する、カスタム・コマンドまたは一連のセミコロン区切りのコマンドを設定します。文字列に空白が含まれている場合は、引用符で囲む必要があります。 +.sp +次の例では、\fI\-XX:OnError\fRオプションを使用してコア・イメージを作成するために\fIgcore\fRコマンドを実行する方法、およびリカバリ不能なエラーの場合にデバッガを起動してプロセスに接続する方法を示します(\fI%p\fRは現在のプロセスを指定します)。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-XX:OnError="gcore %p;dbx \- %p" +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\-XX:OnOutOfMemoryError=\fIstring\fR +.RS 4 +\fIOutOfMemoryError\fR例外が最初にスローされたときに実行する、カスタム・コマンドまたは一連のセミコロン区切りのコマンドを設定します。文字列に空白が含まれている場合は、引用符で囲む必要があります。コマンド文字列の例は、\fI\-XX:OnError\fRオプションの説明を参照してください。 +.RE +.PP +\-XX:+PrintCommandLineFlags +.RS 4 +コマンドラインに表示された、人間工学的に選択したJVMフラグの印刷を有効にします。これは、ヒープ領域サイズや選択されたガベージ・コレクタなど、JVMによって設定されたエルゴノミック値を確認する場合に役立ちます。デフォルトでは、このオプションは無効であり、フラグは印刷されません。 +.RE +.PP +\-XX:+PrintNMTStatistics +.RS 4 +ネイティブ・メモリーのトラッキングが有効な場合に、JVMの終了時に収集されたネイティブ・メモリーのトラッキング・データの印刷を有効にします(\fI\-XX:NativeMemoryTracking\fRを参照してください)。デフォルトでは、このオプションは無効であり、ネイティブ・メモリーのトラッキング・データは印刷されません。 +.RE +.PP +\-XX:+ShowMessageBoxOnError +.RS 4 +JVMでリカバリ不能なエラーが発生した場合、ダイアログ・ボックスの表示を有効にします。これにより、JVMにデバッガを接続してエラーの原因を調査できるように、JVMを終了しないようにして、プロセスをアクティブなままにします。デフォルトでは、このオプションは無効です。 +.RE +.PP +\-XX:ThreadStackSize=\fIsize\fR +.RS 4 +スレッドのスタック・サイズ(バイト単位)を設定します。キロバイトを示す場合は文字\fIk\fRまたは\fIK\fR、メガバイトを示す場合は文字\fIm\fRまたは\fIM\fR、ギガバイトを示す場合は文字\fIg\fRまたは\fIG\fRを追加します。デフォルト値はプラットフォームによって異なります。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +Linux/ARM (32ビット): 320KB +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +Linux/i386 (32ビット): 320KB +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +Linux/x64 (64ビット): 1024KB +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +OS X (64ビット): 1024KB +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +Oracle Solaris/i386 (32ビット): 320KB +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +Oracle Solaris/x64 (64ビット): 1024KB +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +Windows: 仮想メモリーによって異なります。 +.RE +.sp +次の例では、スレッド・スタック・サイズを異なる単位で1024KBに設定する方法を示します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-XX:ThreadStackSize=1m +\-XX:ThreadStackSize=1024k +\-XX:ThreadStackSize=1048576 +.fi +.if n \{\ +.RE +.\} +このオプションは\fI\-Xss\fRと同等です。 +.RE +.PP +\-XX:+TraceClassLoading +.RS 4 +クラスがロードされるときのクラスのトレースを有効にします。デフォルトでは、このオプションは無効であり、クラスはトレースされません。 +.RE +.PP +\-XX:+TraceClassLoadingPreorder +.RS 4 +クラスが参照される順序で、ロードされたすべてのクラスのトレースを有効にします。デフォルトでは、このオプションは無効であり、クラスはトレースされません。 +.RE +.PP +\-XX:+TraceClassResolution +.RS 4 +定数プールの解決のトレースを有効にします。デフォルトでは、このオプションは無効であり、定数プールの解決はトレースされません。 +.RE +.PP +\-XX:+TraceClassUnloading +.RS 4 +クラスがアンロードされるときのクラスのトレースを有効にします。デフォルトでは、このオプションは無効であり、クラスはトレースされません。 +.RE +.PP +\-XX:+TraceLoaderConstraints +.RS 4 +ローダー制約の記録のトレースを有効にします。デフォルトでは、このオプションは無効であり、ローダー制約の記録は追跡されません。 +.RE +.PP +\-XX:+UseAltSigs +.RS 4 +JVM内部シグナルの\fISIGUSR1\fRおよび\fISIGUSR2\fRのかわりに、代替シグナルの使用を有効にします。デフォルトでは、このオプションは無効であり、代替シグナルは使用されません。このオプションは\fI\-Xusealtsigs\fRと同等です。 +.RE +.PP +\-XX:+UseBiasedLocking +.RS 4 +バイアス・ロックの使用を有効にします。かなりの量の非競合の同期化がある一部のアプリケーションは、このフラグを有効にすると大幅な高速化が実現しますが、特定のパターンのロックがあるアプリケーションは、速度が低下することがあります。バイアス・ロックの方法の詳細は、http://www\&.oracle\&.com/technetwork/java/tuning\-139912\&.html#section4\&.2\&.5にあるJavaチューニングのホワイト・ペーパーの例を参照してください。 +.sp +デフォルトでは、このオプションは無効であり、バイアス・ロックは使用されません。 +.RE +.PP +\-XX:+UseCompressedOops +.RS 4 +圧縮されたポインタの使用を有効にします。このオプションを有効にすると、オブジェクト参照は、64ビットのポインタではなく32ビットのオフセットとして表され、これにより、32GBより小さいJavaヒープ・サイズのアプリケーションの実行時に、通常、パフォーマンスが向上します。このオプションは、64ビットのJVMでのみ機能します。 +.sp +デフォルトでは、このオプションは無効であり、圧縮ポインタは使用されません。 +.RE +.PP +\-XX:+UseLargePages +.RS 4 +大きいページのメモリーの使用を有効にします。このオプションはデフォルトで有効になっています。大きいページのメモリーの使用を無効にするには、\fI\-XX:\-UseLargePages\fRを指定します。 +.sp +詳細は、http://www\&.oracle\&.com/technetwork/java/javase/tech/largememory\-jsp\-137182\&.htmlにある大きいメモリー・ページ用のJavaサポートを参照してください。 +.RE +.PP +\-XX:+UseMembar +.RS 4 +スレッドの状態の遷移でメンバーの発行を有効にします。このオプションは、有効になっているPower PCおよびARMサーバーを除くすべてのプラットフォーム上で、デフォルトでは無効になっています。Power PCとARMのスレッド状態遷移に対するメンバーの発行を無効にするには、\fI\-XX:\-UseMembar\fRを指定します。 +.RE +.PP +\-XX:+UsePerfData +.RS 4 +\fIperfdata\fR機能を有効にします。このオプションはデフォルトで有効になっており、JVMのモニタリングおよびパフォーマンス・テストが可能になります。これを無効にすると、\fIhsperfdata_userid\fRディレクトリの作成を抑制します。\fIperfdata\fR機能を無効にするには、\fI\-XX:\-UsePerfData\fRを指定します。 +.RE +.PP +\-XX:+AllowUserSignalHandlers +.RS 4 +アプリケーションによるシグナル・ハンドラのインストールを有効にします。デフォルトでは、このオプションは無効であり、アプリケーションはシグナル・ハンドラをインストールすることは許可されていません。 +.RE +.SS "高度なJITコンパイラ・オプション" +.PP +これらのオプションは、Java HotSpot VMで実行される動的なjust\-in\-time (JIT)コンパイラを制御します。 +.PP +\-XX:+AggressiveOpts +.RS 4 +積極的なパフォーマンス最適化機能の使用を有効にします。これは今後のリリースでデフォルトになる予定です。デフォルトでは、このオプションは無効であり、試験的なパフォーマンス機能は使用されません。 +.RE +.PP +\-XX:AllocateInstancePrefetchLines=\fIlines\fR +.RS 4 +インスタンス割当てポインタの前にプリフェッチする行数を設定します。デフォルトでは、プリフェッチする行数は1に設定されています。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-XX:AllocateInstancePrefetchLines=1 +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\-XX:AllocatePrefetchInstr=\fIinstruction\fR +.RS 4 +割当てポインタの前にプリフェッチするプリフェッチ命令を設定します。使用可能な値は0から3までです。値の背後にある実際の命令は、プラットフォームによって異なります。デフォルトでは、プリフェッチ命令は0に設定されています。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-XX:AllocatePrefetchInstr=0 +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\-XX:AllocatePrefetchStepSize=\fIsize\fR +.RS 4 +順次プリフェッチ命令のステップ・サイズ(バイト単位)を設定します。キロバイトを示す場合は文字\fIk\fRまたは\fIK\fR、メガバイトを示す場合は文字\fIm\fRまたは\fIM\fR、ギガバイトを示す場合は文字\fIg\fRまたは\fIG\fRを追加します。デフォルトでは、ステップ・サイズは16バイトに設定されています。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-XX:AllocatePrefetchStepSize=16 +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\-XX:+BackgroundCompilation +.RS 4 +バックグラウンド・コンパイルを有効にします。このオプションはデフォルトで有効になっています。バックグラウンド・コンパイルを無効にするには、\fI\-XX:\-BackgroundCompilation\fRを指定します(これは\fI\-Xbatch\fRを指定するのと同等です)。 +.RE +.PP +\-XX:CICompilerCount=\fIthreads\fR +.RS 4 +コンパイルに使用するコンパイラ・スレッドの数を設定します。デフォルトでは、スレッド数は、サーバーJVMの場合は2、クライアントJVMの場合は1に設定されており、層コンパイルが使用されている場合、コア数に合せて増減します。次の例では、スレッドの数を2に設定する方法を示します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-XX:CICompilerCount=2 +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\-XX:CodeCacheMinimumFreeSpace=\fIsize\fR +.RS 4 +コンパイルに必要な最小空き領域(バイト単位)を設定します。キロバイトを示す場合は文字\fIk\fRまたは\fIK\fR、メガバイトを示す場合は文字\fIm\fRまたは\fIM\fR、ギガバイトを示す場合は文字\fIg\fRまたは\fIG\fRを追加します。最小空き領域より少ない領域しか残っていない場合、コンパイルは停止します。デフォルトでは、このオプションは500KBに設定されています。次の例では、最小空き領域を1024MBに設定する方法を示します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-XX:CodeCacheMinimumFreeSpace=1024m +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\-XX:CompileCommand=\fIcommand\fR,\fImethod\fR[,\fIoption\fR] +.RS 4 +メソッドで実行するコマンドを指定します。たとえば、コンパイル元から\fIString\fRクラスの\fIindexOf()\fRメソッドを実行するには、次を使用します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-XX:CompileCommand=exclude,java/lang/String\&.indexOf +.fi +.if n \{\ +.RE +.\} +スラッシュ(\fI/\fR)で区切られたすべてのパッケージおよびサブパッケージを含む、完全クラス名を指定します。切取りと貼付けの操作を容易にするために、\fI\-XX:+PrintCompilation\fRオプションおよび\fI\-XX:+LogCompilation\fRオプションによって生成されるメソッド名の形式を使用することもできます。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-XX:CompileCommand=exclude,java\&.lang\&.String::indexOf +.fi +.if n \{\ +.RE +.\} +署名なしでメソッドを指定すると、コマンドは指定した名前を持つすべてのメソッドに適用されます。ただし、クラス・ファイル形式でメソッドの署名を指定することもできます。たとえば、コンパイル元から\fIString\fRクラスの\fIindexOf(String)\fRメソッドのみ除外するには、次を使用します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-XX:CompileCommand=exclude,java/lang/String\&.indexOf(Ljava/lang/String;)I +.fi +.if n \{\ +.RE +.\} +また、クラス名およびメソッド名にワイルドカードとしてアスタリスク(*)を使用できます。たとえば、コンパイル元からすべてのクラスのすべての\fIindexOf()\fRメソッドを除外するには、次を使用します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-XX:CompileCommand=exclude,*\&.indexOf +.fi +.if n \{\ +.RE +.\} +カンマとピリオドは空白の別名で、これにより、シェルを介してコンパイラ・コマンドを渡すことが容易になります。引数を引用符で囲むことで、空白をセパレータとして使用して\fI\-XX:CompileCommand\fRに引数を渡すことができます。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-XX:CompileCommand="exclude java/lang/String indexOf" +.fi +.if n \{\ +.RE +.\} +\fI\-XX:CompileCommand\fRオプションを使用してコマンドラインで渡されたコマンドを解析した後に、JITコンパイラは\fI\&.hotspot_compiler\fRファイルからコマンドを読み取ります。このファイルにコマンドを追加するか、または\fI\-XX:CompileCommandFile\fRオプションを使用して別のファイルを指定することができます。 +.sp +複数のコマンドを追加するには、\fI\-XX:CompileCommand\fRオプションを複数回指定するか、または改行セパレータ(\fI\en\fR)を使用して各引数を区切ります。次のコマンドを使用できます。 +.PP +break +.RS 4 +指定したメソッドのコンパイルの最初に停止するために、JVMのデバッグ時のブレークポイントを設定します。 +.RE +.PP +compileonly +.RS 4 +指定したメソッドを除いたすべてのメソッドを、コンパイルから除外します。別の方法として、\fI\-XX:CompileOnly\fRオプションを使用して複数のメソッドを指定できます。 +.RE +.PP +dontinline +.RS 4 +指定したメソッドをインライン化しないようにします。 +.RE +.PP +exclude +.RS 4 +指定したメソッドをコンパイルから除外します。 +.RE +.PP +help +.RS 4 +\fI\-XX:CompileCommand\fRオプションのヘルプ・メッセージを印刷します。 +.RE +.PP +inline +.RS 4 +指定したメソッドをインライン化しようとします。 +.RE +.PP +log +.RS 4 +指定したメソッドを除くすべてのメソッドに対して、(\fI\-XX:+LogCompilation\fRオプションを使用して)コンパイル・ロギングを除外します。デフォルトでは、コンパイルされたすべてのメソッドにロギングが実行されます。 +.RE +.PP +option +.RS 4 +このコマンドは、最後の引数(\fIoption\fR)のかわりに、指定したメソッドにJITコンパイル・オプションを渡すために使用できます。コンパイル・オプションは、メソッド名の後の末尾に設定されます。たとえば、\fIStringBuffer\fRクラスの\fIappend()\fRメソッドに対して\fIBlockLayoutByFrequency\fRオプションを有効にするには、次を使用します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-XX:CompileCommand=option,java/lang/StringBuffer\&.append,BlockLayoutByFrequency +.fi +.if n \{\ +.RE +.\} +カンマまたは空白で区切って、複数のコンパイル・オプションを指定できます。 +.RE +.PP +print +.RS 4 +指定したメソッドのコンパイル後に生成されたアセンブラ・コードを出力します。 +.RE +.PP +quiet +.RS 4 +コンパイル・コマンドを出力しません。デフォルトでは、\fI\-XX:CompileCommand\fRオプションを使用して指定したコマンドが出力されます。たとえば、\fIString\fRクラスの\fIindexOf()\fRメソッドのコンパイルから除外する場合、次が標準出力に出力されます。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +CompilerOracle: exclude java/lang/String\&.indexOf +.fi +.if n \{\ +.RE +.\} +他の\fI\-XX:CompileCommand\fRオプションの前に\fI\-XX:CompileCommand=quiet\fRオプションを指定することによって、これを抑制できます。 +.RE +.RE +.PP +\-XX:CompileCommandFile=\fIfilename\fR +.RS 4 +JITコンパイラ・コマンドの読取り元のファイルを設定します。デフォルトでは、JITコンパイラによって実行されるコマンドを格納するために、\fI\&.hotspot_compiler\fRファイルが使用されます。 +.sp +コマンド・ファイルの各行は、コマンドが使用されるコマンド、クラス名およびメソッド名を表します。たとえば、次の行は、\fIString\fRクラスの\fItoString()\fRメソッドに対してアセンブリ・コードを出力します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +print java/lang/String toString +.fi +.if n \{\ +.RE +.\} +メソッドで実行するJITコンパイラのコマンドの指定の詳細は、\fI\-XX:CompileCommand\fRオプションを参照してください。 +.RE +.PP +\-XX:CompileOnly=\fImethods\fR +.RS 4 +コンパイルを制限する(カンマで区切られた)メソッドのリストを設定します。指定したメソッドのみがコンパイルされます。完全クラス名(パッケージおよびサブパッケージを含む)で各メソッドを指定します。たとえば、\fIString\fRクラスの\fIlength()\fRメソッドおよび\fIList\fRクラスの\fIsize()\fRメソッドのみをコンパイルするには、次を使用します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-XX:CompileOnly=java/lang/String\&.length,java/util/List\&.size +.fi +.if n \{\ +.RE +.\} +スラッシュ(\fI/\fR)で区切られたすべてのパッケージおよびサブパッケージを含む、完全クラス名を指定します。切取りと貼付けの操作を容易にするために、\fI\-XX:+PrintCompilation\fRオプションおよび\fI\-XX:+LogCompilation\fRオプションによって生成されるメソッド名の形式を使用することもできます。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-XX:CompileOnly=java\&.lang\&.String::length,java\&.util\&.List::size +.fi +.if n \{\ +.RE +.\} +ワイルドカードはサポートされていませんが、クラス名またはパッケージ名だけを指定してクラスまたはパッケージのすべてのメソッドをコンパイルすることも、メソッドだけを指定して任意のクラスのこの名前を持つメソッドをコンパイルすることもできます。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-XX:CompileOnly=java/lang/String +\-XX:CompileOnly=java/lang +\-XX:CompileOnly=\&.length +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\-XX:CompileThreshold=\fIinvocations\fR +.RS 4 +コンパイル前に解釈されたメソッド呼出しの数を設定します。デフォルトでは、サーバーJVMでは、JITコンパイラは、10,000の解釈されたメソッド呼出しを実行して、効率的なコンパイルのための情報を収集します。クライアントJVMの場合、デフォルト設定は1,500呼出しです。次の例では、解釈されたメソッド呼出しの数を5,000に設定する方法を示します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-XX:CompileThreshold=5000 +.fi +.if n \{\ +.RE +.\} +\fI\-Xcomp\fRオプションを指定して、コンパイルの前に、Javaメソッドの解釈を完全に無効にすることができます。 +.RE +.PP +\-XX:+DoEscapeAnalysis +.RS 4 +エスケープ分析の使用を有効にします。このオプションはデフォルトで有効になっています。エスケープ分析の使用を無効にするには、\fI\-XX:\-DoEscapeAnalysis\fRを指定します。 +.RE +.PP +\-XX:+FailOverToOldVerifier +.RS 4 +新しいタイプ・チェッカが失敗した場合の、古いベリファイアへの自動フェイルオーバーを有効にします。デフォルトでは、このオプションは無効になっており、最近のバイトコード・バージョンを使用したクラスには、これは無視されます(つまり、無効として処理されます)。古いバージョンのバイトコードを使用したクラスには、これを有効化できます。 +.RE +.PP +\-XX:InitialCodeCacheSize=\fIsize\fR +.RS 4 +初期コード・キャッシュ・サイズ(バイト単位)を設定します。キロバイトを示す場合は文字\fIk\fRまたは\fIK\fR、メガバイトを示す場合は文字\fIm\fRまたは\fIM\fR、ギガバイトを示す場合は文字\fIg\fRまたは\fIG\fRを追加します。デフォルト値は500KBに設定されています。次の例では、初期コード・キャッシュ・サイズを32KBに設定する方法を示します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-XX:InitialCodeCacheSize=32k +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\-XX:+Inline +.RS 4 +メソッドのインライン化を有効にします。このオプションは、パフォーマンスを向上させるためにデフォルトで有効になっています。メソッドのインライン化を無効にするには、\fI\-XX:\-Inline\fRを指定します。 +.RE +.PP +\-XX:InlineSmallCode=\fIsize\fR +.RS 4 +インライン化が必要なコンパイルされたメソッドの最大コード・サイズ(バイト単位)を設定します。キロバイトを示す場合は文字\fIk\fRまたは\fIK\fR、メガバイトを示す場合は文字\fIm\fRまたは\fIM\fR、ギガバイトを示す場合は文字\fIg\fRまたは\fIG\fRを追加します。指定したサイズより小さいサイズのコンパイルされたメソッドのみが、インライン化されます。デフォルトでは、最大コード・サイズは1000バイトに設定されています。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-XX:InlineSmallCode=1000 +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\-XX:+LogCompilation +.RS 4 +現在の作業ディレクトリにある\fIhotspot\&.log\fRという名前のファイルへのコンパイル・アクティビティのロギングを有効にします。\fI\-XX:LogFile\fRオプションを使用して、異なるログ・ファイル・パスと名前を指定できます。 +.sp +デフォルトでは、このオプションは無効であり、コンパイル・アクティビティは記録されません。\fI\-XX:+LogCompilation\fRオプションは、診断JVMオプションのロックを解除する\fI\-XX:UnlockDiagnosticVMOptions\fRオプションとともに使用する必要があります。 +.sp +\fI\-XX:+PrintCompilation\fRオプションを使用して、メソッドをコンパイルするたびに、コンソールに出力されたメッセージを含む詳細な診断出力を有効化できます。 +.RE +.PP +\-XX:MaxInlineSize=\fIsize\fR +.RS 4 +インライン化するメソッドの最大バイトコード・サイズ(バイト単位)を設定します。キロバイトを示す場合は文字\fIk\fRまたは\fIK\fR、メガバイトを示す場合は文字\fIm\fRまたは\fIM\fR、ギガバイトを示す場合は文字\fIg\fRまたは\fIG\fRを追加します。デフォルトでは、最大バイトコード・サイズは35バイトに設定されています。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-XX:MaxInlineSize=35 +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\-XX:MaxNodeLimit=\fInodes\fR +.RS 4 +単一のメソッドのコンパイル時に使用されるノードの最大数を設定します。デフォルトでは、ノードの最大数は65,000に設定されています。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-XX:MaxNodeLimit=65000 +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\-XX:MaxTrivialSize=\fIsize\fR +.RS 4 +インライン化する単純メソッドの最大バイトコード・サイズ(バイト単位)を設定します。キロバイトを示す場合は文字\fIk\fRまたは\fIK\fR、メガバイトを示す場合は文字\fIm\fRまたは\fIM\fR、ギガバイトを示す場合は文字\fIg\fRまたは\fIG\fRを追加します。デフォルトでは、単純メソッドの最大バイトコード・サイズは6バイトに設定されています。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-XX:MaxTrivialSize=6 +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\-XX:+OptimizeStringConcat +.RS 4 +\fIString\fR連結操作の最適化を有効にします。このオプションはデフォルトで有効になっています。\fIString\fR連結操作の最適化を無効にするには、\fI\-XX:\-OptimizeStringConcat\fRを指定します。 +.RE +.PP +\-XX:+PrintAssembly +.RS 4 +外部の\fIdisassembler\&.so\fRライブラリを使用して、バイトコード化されたネイティブのメソッドのアセンブリ・コードの出力を有効にします。これにより、生成されたコードを表示することができ、パフォーマンスの問題の診断に役立ちます。 +.sp +デフォルトでは、このオプションは無効であり、アセンブリ・コードは印刷されません。\fI\-XX:+PrintAssembly\fRオプションは、診断JVMオプションのロックを解除する\fI\-XX:UnlockDiagnosticVMOptions\fRオプションとともに使用する必要があります。 +.RE +.PP +\-XX:+PrintCompilation +.RS 4 +メソッドをコンパイルするたびに、コンソールにメッセージを出力することによって、JVMからの詳細な診断出力を有効にします。これにより、実際にコンパイルされるメソッドを確認できます。デフォルトでは、このオプションは無効であり、診断出力は印刷されません。 +.sp +\fI\-XX:+LogCompilation\fRオプションを使用して、コンパイル・アクティビティをファイルに記録することもできます。 +.RE +.PP +\-XX:+PrintInlining +.RS 4 +インライン化の決定内容の出力を有効にします。これにより、インライン化されるメソッドを確認できます。 +.sp +デフォルトでは、このオプションは無効であり、インライン化情報は出力されません。\fI\-XX:+PrintInlining\fRオプションは、診断JVMオプションのロックを解除する\fI\-XX:+UnlockDiagnosticVMOptions\fRオプションとともに使用する必要があります。 +.RE +.PP +\-XX:+RelaxAccessControlCheck +.RS 4 +ベリファイア内のアクセス制御チェックの量を減らします。デフォルトでは、このオプションは無効になっており、最近のバイトコード・バージョンを使用したクラスには、これは無視されます(つまり、無効として処理されます)。古いバージョンのバイトコードを使用したクラスには、これを有効化できます。 +.RE +.PP +\-XX:ReservedCodeCacheSize=\fIsize\fR +.RS 4 +JITコンパイルされたコードの最大コード・キャッシュ・サイズ(バイト単位)を設定します。キロバイトを示す場合は文字\fIk\fRまたは\fIK\fR、メガバイトを示す場合は文字\fIm\fRまたは\fIM\fR、ギガバイトを示す場合は文字\fIg\fRまたは\fIG\fRを追加します。このオプションは\fI\-Xmaxjitcodesize\fRと同等です。 +.RE +.PP +\-XX:+TieredCompilation +.RS 4 +層コンパイルの使用を有効にします。デフォルトでは、このオプションは無効であり、層コンパイルは使用されません。 +.RE +.PP +\-XX:+UseCodeCacheFlushing +.RS 4 +コンパイラをシャットダウンする前に、コード・キャッシュのフラッシュを有効にします。このオプションはデフォルトで有効になっています。コンパイラをシャットダウンする前にコード・キャッシュのフラッシュを無効にするには\fI\-XX:\-UseCodeCacheFlushing\fRを指定します。 +.RE +.PP +\-XX:+UseCondCardMark +.RS 4 +カード表の更新前に、カードがすでにマークされているかどうかのチェックを有効にします。このオプションは、デフォルトでは無効になっており、複数のソケットを持つマシン上でのみ使用する必要があります。これにより、同時操作にかなり依存しているJavaアプリケーションのパフォーマンスが向上します。 +.RE +.PP +\-XX:+UseSuperWord +.RS 4 +スカラー演算のスーパーワード演算への変換を有効にします。このオプションはデフォルトで有効になっています。スカラー演算のスーパーワード演算への変換を無効にするには、\fI\-XX:\-UseSuperWord\fRを指定します。 +.RE +.SS "高度なサービスアビリティ・オプション" +.PP +これらのオプションは、システム情報を収集し、詳細なデバッグを実行する機能を提供します。 +.PP +\-XX:+ExtendedDTraceProbes +.RS 4 +パフォーマンスに影響を与える追加の\fIdtrace\fRツール・プローブを有効にします。デフォルトでは、このオプションは無効になっており、\fIdtrace\fRは標準プローブのみを実行します。 +.RE +.PP +\-XX:+HeapDumpOnOutOfMemory +.RS 4 +\fIjava\&.lang\&.OutOfMemoryError\fR例外がスローされた場合に、ヒープ・プロファイラ(HPROF)を使用して、現在のディレクトリ内のファイルへのJavaヒープのダンプを有効にします。\fI\-XX:HeapDumpPath\fRオプションを使用して、ヒープ・ダンプ・ファイルのパスおよび名前を明示的に設定できます。デフォルトでは、このオプションは無効であり、\fIOutOfMemoryError\fR例外がスローされた場合にヒープはダンプされません。 +.RE +.PP +\-XX:HeapDumpPath=\fIpath\fR +.RS 4 +\fI\-XX:+HeapDumpOnOutOfMemoryError\fRオプションが設定されている場合、ヒープ・プロファイラ(HPROF)が提供するヒープ・ダンプを書き込むパスおよびファイル名を設定します。デフォルトでは、このファイルは、現在の作業ディレクトリに作成され、名前は\fIjava_pid\fR\fIpid\fR\fI\&.hprof\fR +(\fIpid\fRはエラーの原因となったプロセスの識別子)になります。次の例では、デフォルトのファイルを明示的に設定する方法を示します(\fI%p\fRは現在のプロセスの識別子を表します)。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-XX:HeapDumpPath=\&./java_pid%p\&.hprof +.fi +.if n \{\ +.RE +.\} +次の例では、ヒープ・ダンプ・ファイルを\fI/var/log/java/java_heapdump\&.hprof\fRに設定する方法を示します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-XX:HeapDumpPath=/var/log/java/java_heapdump\&.hprof +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\-XX:LogFile=\fIpath\fR +.RS 4 +ログ・データが書き込まれるパスおよびファイル名を設定します。デフォルトでは、ファイルは現在の作業ディレクトリに作成され、名前は\fIhotspot\&.log\fRです。 +.sp +次の例では、ログ・ファイルを\fI/var/log/java/hotspot\&.log\fRに設定する方法を示します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-XX:LogFile=/var/log/java/hotspot\&.log +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\-XX:+PrintClassHistogram +.RS 4 +\fI[Control]+[C]\fRイベント(\fISIGTERM\fR)後にクラス・インスタンスのヒストグラムの印刷を有効にします。デフォルトでは、このオプションは無効です。 +.sp +このオプションを設定すると、\fIjmap \-histo\fRコマンド、または\fIjcmd \fR\fIpid\fR\fI GC\&.class_histogram\fRコマンド(\fIpid\fRは現在のJavaプロセスの識別子)を実行する場合と同じになります。 +.RE +.PP +\-XX:+PrintConcurrentLocks +.RS 4 +.sp +\fI[Control]+[C]\fRイベント(\fISIGTERM\fR)後に\fIjava\&.util\&.concurrent\fRロックの印刷を有効にします。デフォルトでは、このオプションは無効です。 +.sp +このオプションを設定すると、\fIjstack \-l\fRコマンド、または\fIjcmd \fR\fIpid\fR\fI Thread\&.print \-l\fRコマンド(\fIpid\fRは現在のJavaプロセスの識別子)を実行する場合と同じになります。 +.RE +.PP +\-XX:+UnlockDiagnosticVMOptions +.RS 4 +JVMの診断を目的としたオプションをアンロックします。デフォルトでは、このオプションは無効であり、診断オプションは使用できません。 +.RE +.SS "高度なガベージ・コレクション・オプション" +.PP +これらのオプションは、ガベージ・コレクション(GC)がJava HotSpot VMによってどのように実行されるかを制御します。 +.PP +\-XX:+AggressiveHeap +.RS 4 +Javaヒープの最適化を有効にします。これにより、コンピュータの構成(RAMおよびCPU)に基づいて、様々なパラメータが、メモリー割当てが集中した長時間実行ジョブに最適になるように設定されます。デフォルトでは、このオプションは無効であり、ヒープは最適化されません。 +.RE +.PP +\-XX:AllocatePrefetchDistance=\fIsize\fR +.RS 4 +オブジェクト割当てのプリフェッチ距離のサイズ(バイト単位)を設定します。新規オブジェクトの値で書き込もうとするメモリーは、最後に割り当てられたオブジェクトのアドレスから、この距離までプリフェッチされます。各Javaスレッドには独自の割当てポイントがあります。 +.sp +負の値は、プリフェッチ距離はプラットフォームに基づいて選択されることを示します。正の値は、プリフェッチするバイト数です。キロバイトを示す場合は文字\fIk\fRまたは\fIK\fR、メガバイトを示す場合は文字\fIm\fRまたは\fIM\fR、ギガバイトを示す場合は文字\fIg\fRまたは\fIG\fRを追加します。デフォルト値は\-1に設定されています。 +.sp +次の例では、プリフェッチ距離を1024バイトに設定する方法を示します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-XX:AllocatePrefetchDistance=1024 +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\-XX:AllocatePrefetchLines=\fIlines\fR +.RS 4 +コンパイルされたコードで生成されるプリフェッチ命令を使用して、最後のオブジェクト割当て後にロードするキャッシュ行数を設定します。最後に割り当てられたオブジェクトがインスタンスの場合は、デフォルト値は1になり、配列の場合は3になります。 +.sp +次の例では、ロードされるキャッシュ行数を5に設定する方法を示します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-XX:AllocatePrefetchLines=5 +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\-XX:AllocatePrefetchStyle=\fIstyle\fR +.RS 4 +プリフェッチ命令に生成されるコード・スタイルを設定します。\fIstyle\fR引数は、0から3までの整数です。 +.PP +0 +.RS 4 +プリフェッチ命令を生成しません。 +.RE +.PP +1 +.RS 4 +各割当ての後で、プリフェッチ命令を実行します。これはデフォルトのパラメータです。 +.RE +.PP +2 +.RS 4 +スレッド・ローカルな割当てブロック(TLAB)ウォーターマーク・ポインタを使用して、プリフェッチ命令を実行するタイミングを決定します。 +.RE +.PP +3 +.RS 4 +割当てプリフェッチ用のSPARCでBIS命令を使用します。 +.RE +.RE +.PP +\-XX:+AlwaysPreTouch +.RS 4 +JVMの初期化中にJavaヒープ上のすべてのページのタッチを有効にします。これにより、\fImain()\fRメソッドの入力前に、すべてのページがメモリーに取得されます。このオプションは、物理メモリーにマップされたすべての仮想メモリーを含む長時間実行のシステムをシミュレートするテストで使用できます。デフォルトでは、このオプションは無効になっており、JVMヒープ領域がいっぱいになると、すべてのページがコミットされます。 +.RE +.PP +\-XX:+CMSClassUnloadingEnabled +.RS 4 +並行マークスイープ(CMS)ガベージ・コレクタを使用する場合に、アンロードするクラスを有効にします。このオプションはデフォルトで有効になっています。CMSガベージ・コレクタのクラス・アンロードを無効にするには、\fI\-XX:\-CMSClassUnloadingEnabled\fRを指定します。 +.RE +.PP +\-XX:CMSExpAvgFactor=\fIpercent\fR +.RS 4 +並行コレクション統計の指数平均を計算する際に、現在のサンプルを重み付けするために使用される時間の割合(0から100まで)を設定します。デフォルトでは、指数平均係数は25%に設定されています。次の例では、係数を15%に設定する方法を示します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-XX:CMSExpAvgFactor=15 +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\-XX:CMSIncrementalDutyCycle=\fIpercent\fR +.RS 4 +並行コレクタの実行が許可されているマイナー・コレクション間の時間の割合(0から100まで)を設定します。\fI\-XX:+CMSIncrementalPacing\fRが有効な場合、デューティ・サイクルが自動的に設定され、このオプションは初期値のみを設定します。 +.sp +デフォルトでは、デューティ・サイクルは10%に設定されています。次の例では、デューティ・サイクルを20%に設定する方法を示します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-XX:CMSIncrementalDutyCycle=20 +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\-XX:CMSIncrementalDutyCycleMin=\fIpercent\fR +.RS 4 +\fI\-XX:+CMSIncrementalPacing\fRが有効な場合にデューティ・サイクルの下限であるマイナー・コレクション間の時間の割合(0から100まで)を設定します。デフォルトでは、デューティ・サイクルの下限は0%に設定されています。次の例では、下限を10%に設定する方法を示します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-XX:CMSIncrementalDutyCycleMin=10 +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\-XX:+CMSIncrementalMode +.RS 4 +CMSコレクタの増分モードを有効にします。このオプションはデフォルトで無効になっており、2つ以下のGCスレッドを持つ構成にのみ有効にする必要があります。\fICMSIncremental\fRで始まるすべてのオプションは、このオプションが有効な場合のみ、適用されます。 +.RE +.PP +\-XX:CMSIncrementalOffset=\fIpercent\fR +.RS 4 +増分モードのデューティ・サイクルをマイナー・コレクション間で期間内に右に移動する時間の割合(0から100まで)を設定します。デフォルトでは、オフセットは0%に設定されています。次の例では、デューティ・サイクルのオフセットを25%に設定する方法を示します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-XX:CMSIncrementalOffset=25 +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\-XX:+CMSIncrementalPacing +.RS 4 +JVMの実行中に収集された統計に基づいて、増分モードのデューティ・サイクルの自動調整を有効にします。このオプションはデフォルトで有効になっています。増分モード・デューティ・サイクルの自動調整を無効にするには、\fI\-XX:\-CMSIncrementalPacing\fRを指定します。 +.RE +.PP +\-XX:CMSIncrementalSafetyFactor=\fIpercent\fR +.RS 4 +デューティ・サイクルを計算する際に、保守を追加するために使用される時間の割合(0から100まで)を設定します。デフォルトでは、安全係数は10%に設定されています。次の例では、安全係数を5%に設定する方法を示します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-XX:CMSIncrementalSafetyFactor=5 +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\-XX:CMSInitiatingOccupancyFraction=\fIpercent\fR +.RS 4 +CMS収集サイクルを開始する古い世代の占有率(0から100まで)を設定します。デフォルト値は\-1に設定されています。負の値(デフォルトを含む)は、\fI\-XX:CMSTriggerRatio\fRが開始占有率の値を定義するために使用されることを意味します。 +.sp +次の例では、占有率を20%に設定する方法を示します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-XX:CMSInitiatingOccupancyFraction=20 +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\-XX:+CMSScavengeBeforeRemark +.RS 4 +CMSコメント・ステップの前にスカベンジの試行を有効にします。デフォルトでは、このオプションは無効です。 +.RE +.PP +\-XX:CMSTriggerRatio=\fIpercent\fR +.RS 4 +CMS収集サイクルが開始する前に割り当てられる\fI\-XX:MinHeapFreeRatio\fRによって指定される値の割合(0から100まで)を設定します。デフォルト値は80%に設定されています。 +.sp +次の例では、占有率を75%に設定する方法を示します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-XX:CMSTriggerRatio=75 +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\-XX:ConcGCThreads=\fIthreads\fR +.RS 4 +並行GCに使用されるスレッドの数を設定します。デフォルト値は、JVMに使用できるCPUの数によって異なります。 +.sp +たとえば、並行GCのスレッド数を2に設定するには、次のオプションを指定します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-XX:ConcGCThreads=2 +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\-XX:+DisableExplicitGC +.RS 4 +\fISystem\&.gc()\fRの呼出しの処理を無効にするオプションを有効にします。このオプションはデフォルトで無効になっており、これは\fISystem\&.gc()\fRへの呼出しが処理されることを意味します。\fISystem\&.gc()\fRの呼出しの処理が無効になっている場合、JVMは必要に応じてGCを実行します。 +.RE +.PP +\-XX:+ExplicitGCInvokesConcurrent +.RS 4 +\fISystem\&.gc()\fRリクエストを使用することによって、並行GCの呼出しを有効にします。このオプションはデフォルトで無効になっており、\fI\-XX:+UseConcMarkSweepGC\fRオプションとともに使用する場合のみ、有効にすることができます。 +.RE +.PP +\-XX:+ExplicitGCInvokesConcurrentAndUnloadsClasses +.RS 4 +\fISystem\&.gc()\fRリクエストを使用し、並行GCサイクル中にクラスをアンロードすることによって、並行GCの呼出しを有効にします。このオプションはデフォルトで無効になっており、\fI\-XX:+UseConcMarkSweepGC\fRオプションとともに使用する場合のみ、有効にすることができます。 +.RE +.PP +\-XX:G1HeapRegionSize=\fIsize\fR +.RS 4 +ガベージファースト(G1)コレクタを使用する際にJavaヒープを細分化するリージョンのサイズを設定します。値には、1MBから32MBまでを指定できます。デフォルトのリージョン・サイズは、ヒープ・サイズに基づいて人間工学的に決定されます。 +.sp +次の例では、細分化されたサイズを16MBに設定する方法を示します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-XX:G1HeapRegionSize=16m +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\-XX:+G1PrintHeapRegions +.RS 4 +割り当てられたリージョンおよびG1コレクタによって再要求されたものに関する情報の印刷を有効にします。デフォルトでは、このオプションは無効です。 +.RE +.PP +\-XX:G1ReservePercent=\fIpercent\fR +.RS 4 +G1コレクタの昇格が失敗する可能性を減らすためのfalseの上限として予約されたヒープの割合(0から50まで)を設定します。デフォルトでは、このオプションは10%に設定されています。 +.sp +次の例では、予約されたヒープを20%に設定する方法を示します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-XX:G1ReservePercent=20 +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\-XX:InitialHeapSize=\fIsize\fR +.RS 4 +メモリー割当てプールの初期サイズ(バイト単位)を設定します。指定する値は、0、または1MBより大きい1024の倍数のいずれかにする必要があります。キロバイトを示す場合は文字\fIk\fRまたは\fIK\fR、メガバイトを示す場合は文字\fIm\fRまたは\fIM\fR、ギガバイトを示す場合は文字\fIg\fRまたは\fIG\fRを追加します。デフォルト値は、実行時にシステム構成に基づいて選択されます。詳細は、http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/vm/gc\-ergonomics\&.htmlにあるガベージ・コレクタ・エルゴノミックを参照してください。 +.sp +次の例では、割り当てられたメモリーのサイズを様々な単位を使用して6MBに設定する方法を示します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-XX:InitialHeapSize=6291456 +\-XX:InitialHeapSize=6144k +\-XX:InitialHeapSize=6m +.fi +.if n \{\ +.RE +.\} +このオプションを0に設定した場合、初期サイズは、古い世代と若い世代に割り当てられたサイズの合計として設定されます。若い世代のヒープのサイズは、\fI\-XX:NewSize\fRオプションを使用して設定できます。 +.RE +.PP +\-XX:InitialSurvivorRatio=\fIratio\fR +.RS 4 +スループット・ガベージ・コレクタが使用するサバイバ領域の初期比を設定します(\fI\-XX:+UseParallelGC\fRおよび/または\fI\-XX:+UseParallelOldGC\fRオプションによって有効になります)。\fI\-XX:+UseParallelGC\fRオプションおよび\fI\-XX:+UseParallelOldGC\fRオプションを使用することによって、スループット・ガベージ・コレクタで適応サイズ指定をデフォルトで有効にします。初期値から始めて、アプリケーションの動作に従って、サバイバ領域がサイズ変更されます。(\fI\-XX:\-UseAdaptiveSizePolicy\fRオプションを使用して)適応サイズ指定を無効にした場合、\fI\-XX:SurvivorRatio\fRオプションを使用して、アプリケーションの実行全体のサバイバ領域のサイズを設定する必要があります。 +.sp +次の式を使用して、若い世代のサイズ(Y)およびサバイバ領域の初期比(R)に基づいて、サバイバ領域の初期サイズ(S)を計算できます。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +S=Y/(R+2) +.fi +.if n \{\ +.RE +.\} +等式内の2は、2つのサバイバ領域を示します。サバイバ領域の初期比に指定する値を大きくすると、サバイバ領域の初期サイズは小さくなります。 +.sp +デフォルトでは、サバイバ領域の初期比は8に設定されています。若い世代の領域サイズのデフォルト値(2MB)を使用した場合、サバイバ領域の初期サイズは0\&.2MBになります。 +.sp +次の例では、サバイバ領域の初期比を4に設定する方法を示します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-XX:InitialSurvivorRatio=4 +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\-XX:InitiatingHeapOccupancyPercent=\fIpercent\fR +.RS 4 +並行GCサイクルを開始するヒープ占有率(0から100まで)を設定します。これは、1つの世代のみ(たとえばG1ガベージ・コレクタなど)ではなく、ヒープ全体の占有に基づいて並行GCサイクルをトリガーするガベージ・コレクタによって使用されます。 +.sp +デフォルトでは、開始値は45%に設定されています。値0は、GCサイクルが停止しないことを意味します。次の例では、開始ヒープ占有率を75%に設定する方法を示します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-XX:InitiatingHeapOccupancyPercent=75 +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\-XX:MaxGCPauseMillis=\fItime\fR +.RS 4 +最大GC休止時間(ミリ秒単位)のターゲットを設定します。これはソフト・ゴールのため、JVMは実現のために最善の努力をします。デフォルトでは、休止時間の最大値はありません。 +.sp +次の例では、最大ターゲット休止時間を500ミリ秒に設定する方法を示します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-XX:MaxGCPauseMillis=500 +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\-XX:MaxHeapSize=\fIsize\fR +.RS 4 +メモリー割当てプールの最大サイズ(バイト単位)を設定します。指定する値は、2MBより大きい1024の倍数にする必要があります。キロバイトを示す場合は文字\fIk\fRまたは\fIK\fR、メガバイトを示す場合は文字\fIm\fRまたは\fIM\fR、ギガバイトを示す場合は文字\fIg\fRまたは\fIG\fRを追加します。デフォルト値は、実行時にシステム構成に基づいて選択されます。サーバー・デプロイメントでは、\fI\-XX:InitialHeapSize\fRおよび\fI\-XX:MaxHeapSize\fRは通常同じ値に設定されます。詳細は、http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/vm/gc\-ergonomics\&.htmlにあるガベージ・コレクタ・エルゴノミックを参照してください。 +.sp +次の例では、割り当てられたメモリーの許可される最大サイズを様々な単位を使用して80MBに設定する方法を示します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-XX:MaxHeapSize=83886080 +\-XX:MaxHeapSize=81920k +\-XX:MaxHeapSize=80m +.fi +.if n \{\ +.RE +.\} +Oracle Solaris 7およびOracle Solaris 8 SPARCプラットフォームの場合のこの値の上限は、およそ4,000MBからオーバーヘッドの量を引いたものです。Oracle Solaris 2\&.6およびx86プラットフォームの場合の上限は、およそ2,000MBからオーバーヘッドの量を引いたものです。Linuxプラットフォームの場合の上限は、およそ2,000MBからオーバーヘッドの量を引いたものです。 +.sp +\fI\-XX:MaxHeapSize\fRオプションは\fI\-Xmx\fRと同等です。 +.RE +.PP +\-XX:MaxHeapFreeRatio=\fIpercent\fR +.RS 4 +GCイベント後の空きヒープ領域の許可されている最大の割合(0から100まで)を設定します。空きヒープ領域がこの値を超えて拡大した場合、そのヒープは縮小します。デフォルトでは、この値は70%に設定されています。 +.sp +次の例では、空きヒープの最大比率を75%に設定する方法を示します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-XX:MaxHeapFreeRatio=75 +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\-XX:MaxMetaspaceSize=\fIsize\fR +.RS 4 +クラス・メタデータに割り当てることができるネイティブ・メモリーの最大量を設定します。デフォルトでは、このサイズは制限されていません。アプリケーションのメタデータの量は、アプリケーション自体、他の実行中アプリケーション、およびシステムで使用可能なメモリーの量によって異なります。 +.sp +次の例では、クラス・メタデータの最大サイズを256MBに設定する方法を示します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-XX:MaxMetaspaceSize=256m +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\-XX:MaxNewSize=\fIsize\fR +.RS 4 +若い世代(ナーサリ)のヒープの最大サイズ(バイト単位)を設定します。デフォルト値は人間工学的に設定されます。 +.RE +.PP +\-XX:MaxTenuringThreshold=\fIthreshold\fR +.RS 4 +適応GCサイズ指定で使用する最大殿堂入りしきい値を設定します。最大値は15です。デフォルト値は、パラレル(スループット)コレクタの場合は15、CMSコレクタの場合は6です。 +.sp +次の例では、最大殿堂入りしきい値を10に設定する方法を示します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-XX:MaxTenuringThreshold=10 +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\-XX:MetaspaceSize=\fIsize\fR +.RS 4 +最初に超えたときにガベージ・コレクションをトリガーする、割り当てられたクラス・メタデータ領域のサイズを設定します。このガベージ・コレクションのしきい値は、使用されるメタデータの量によって増加または減少します。デフォルトのサイズはプラットフォームによって異なります。 +.RE +.PP +\-XX:MinHeapFreeRatio=\fIpercent\fR +.RS 4 +GCイベント後の空きヒープ領域の許可されている最小の割合(0から100まで)を設定します。空きヒープ領域がこの値を下回った場合、そのヒープは拡大します。デフォルトでは、この値は40%に設定されています。 +.sp +次の例では、空きヒープの最小比率を25%に設定する方法を示します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-XX:MinHeapFreeRatio=25 +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\-XX:NewRatio=\fIratio\fR +.RS 4 +若い世代のサイズと古い世代のサイズとの比率を設定します。デフォルトでは、このオプションは2に設定されています。次の例では、若い/古いの比率を1に設定する方法を示します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-XX:NewRatio=1 +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\-XX:NewSize=\fIsize\fR +.RS 4 +若い世代(ナーサリ)のヒープの初期サイズ(バイト単位)を設定します。キロバイトを示す場合は文字\fIk\fRまたは\fIK\fR、メガバイトを示す場合は文字\fIm\fRまたは\fIM\fR、ギガバイトを示す場合は文字\fIg\fRまたは\fIG\fRを追加します。 +.sp +ヒープの若い世代リージョンは新しいオブジェクトに使用されます。GCは、他のリージョンよりこのリージョンで、より頻繁に実行されます。若い世代のサイズが小さすぎる場合、多数のマイナーGCが実行されます。サイズが大きすぎる場合、フルGCのみが実行されますが、完了までに時間がかかることがあります。若い世代のサイズは、全体のヒープ・サイズの半分から4分の1の間にしておくことをお薦めします。 +.sp +次の例では、若い世代の初期サイズを様々な単位を使用して256MBに設定する方法を示します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-XX:NewSize=256m +\-XX:NewSize=262144k +\-XX:NewSize=268435456 +.fi +.if n \{\ +.RE +.\} +\fI\-XX:NewSize\fRオプションは\fI\-Xmn\fRと同等です。 +.RE +.PP +\-XX:ParallelGCThreads=\fIthreads\fR +.RS 4 +若い世代と古い世代でパラレル・ガベージ・コレクションに使用するスレッドの数を設定します。デフォルト値は、JVMに使用できるCPUの数によって異なります。 +.sp +たとえば、パラレルGCのスレッド数を2に設定するには、次のオプションを指定します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-XX:ParallelGCThreads=2 +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\-XX:+ParallelRefProcEnabled +.RS 4 +パラレル参照処理を有効にします。デフォルトでは、このオプションは無効です。 +.RE +.PP +\-XX:+PrintAdaptiveSizePolicy +.RS 4 +適応世代サイズ指定に関する情報の出力を有効にします。デフォルトでは、このオプションは無効です。 +.RE +.PP +\-XX:+PrintGC +.RS 4 +GCごとのメッセージの出力を有効にします。デフォルトでは、このオプションは無効です。 +.RE +.PP +\-XX:+PrintGCApplicationConcurrentTime +.RS 4 +最後の休止(たとえばGC休止など)以降に経過した時間の出力を有効にします。デフォルトでは、このオプションは無効です。 +.RE +.PP +\-XX:+PrintGCApplicationStoppedTime +.RS 4 +休止(たとえばGC休止など)が継続した時間の出力を有効にします。デフォルトでは、このオプションは無効です。 +.RE +.PP +\-XX+PrintGCDateStamp +.RS 4 +GCごとの日付スタンプの出力を有効にします。デフォルトでは、このオプションは無効です。 +.RE +.PP +\-XX:+PrintGCDetails +.RS 4 +GCごとの詳細メッセージの出力を有効にします。デフォルトでは、このオプションは無効です。 +.RE +.PP +\-XX:+PrintGCTaskTimeStamps +.RS 4 +個々のGCワーカー・スレッド・タスクごとのタイムスタンプの出力を有効にします。デフォルトでは、このオプションは無効です。 +.RE +.PP +\-XX:+PrintGCTimeStamp +.RS 4 +GCごとのタイムスタンプの出力を有効にします。デフォルトでは、このオプションは無効です。 +.RE +.PP +\-XX:+PrintTenuringDistribution +.RS 4 +殿堂入り期間情報の出力を有効にします。次に、出力の例を示します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +Desired survivor size 48286924 bytes, new threshold 10 (max 10) +\- age 1: 28992024 bytes, 28992024 total +\- age 2: 1366864 bytes, 30358888 total +\- age 3: 1425912 bytes, 31784800 total +\&.\&.\&. +.fi +.if n \{\ +.RE +.\} +期間1オブジェクトは、最も若いサバイバです(前のスカベンジの後に作成され、最新のスカベンジで存続し、Eden領域からサバイバ領域に移動しました)。期間2オブジェクトは、2つのスカベンジで存続します(2番目のスカベンジ中に、あるサバイバ領域から次の領域にコピーされました)。このように続きます。 +.sp +前述の例では、28,992,024バイトが1つのスカベンジで存続し、Eden領域からサバイバ領域にコピーされました。1,366,864バイトは期間2オブジェクトなどにより占有されています。各行の3番目の値は、期間n以下のオブジェクトの累積サイズです。 +.sp +デフォルトでは、このオプションは無効です。 +.RE +.PP +\-XX:+ScavengeBeforeFullGC +.RS 4 +それぞれのフルGCの前に若い世代のGCを有効にします。このオプションはデフォルトで有効になっています。フルGCの前に若い世代のスカベンジを行うと、古い世代領域から若い世代領域へのアクセスが可能なオブジェクトの数を減らすことができるため、これを無効に\fIしない\fRことをお薦めします。各フルGCの前に若い世代のGCを無効にするには、\fI\-XX:\-ScavengeBeforeFullGC\fRを指定します。 +.RE +.PP +\-XX:SoftRefLRUPolicyMSPerMB=\fItime\fR +.RS 4 +ソフト・アクセスが可能なオブジェクトが最後に参照されてからヒープ上でアクティブなままになっている時間(ミリ秒単位)を設定します。デフォルト値は、ヒープ内の空きメガバイト当たりで1秒の存続期間です。\fI\-XX:SoftRefLRUPolicyMSPerMB\fRオプションは、現在のヒープ・サイズ(Java HotSpot Client VM用)または最大可能ヒープ・サイズ(Java HotSpot Server VM用)の1メガバイト当たりのミリ秒を表す整数値を受け入れます。この違いは、Client VMは、ヒープを大きくするのではなく、ソフト参照をフラッシュする傾向があるのに対し、Server VMは、ソフト参照をフラッシュするのではなく、ヒープを大きくする傾向があることを意味します。後者の場合、\fI\-Xmx\fRオプションの値は、ソフト参照がどのくらい迅速にガベージ・コレクションされるかに重要な影響を及ぼします。 +.sp +次の例では、値を2\&.5秒に設定する方法を示します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-XX:SoftRefLRUPolicyMSPerMB=2500 +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\-XX:SurvivorRatio=\fIratio\fR +.RS 4 +Eden領域のサイズとサバイバ領域のサイズとの比率を設定します。デフォルトでは、このオプションは8に設定されています。次の例では、Eden/サバイバ領域の比率を4に設定する方法を示します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-XX:SurvivorRatio=4 +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\-XX:TargetSurvivorRatio=\fIpercent\fR +.RS 4 +若いガベージ・コレクションの後に使用されるサバイバ領域の目的の割合(0から100まで)を設定します。デフォルトでは、このオプションは50%に設定されています。 +.sp +次の例では、ターゲットのサバイバ領域の比率を30%に設定する方法を示します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-XX:TargetSurvivorRatio=30 +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\-XX:TLABSize=\fIsize\fR +.RS 4 +スレッド・ローカルな割当てバッファ(TLAB)の初期サイズ(バイト単位)を設定します。キロバイトを示す場合は文字\fIk\fRまたは\fIK\fR、メガバイトを示す場合は文字\fIm\fRまたは\fIM\fR、ギガバイトを示す場合は文字\fIg\fRまたは\fIG\fRを追加します。このオプションが0に設定されている場合、JVMでは初期サイズが自動的に選択されます。 +.sp +次の例では、TLABの初期サイズを512KBに設定する方法を示します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-XX:TLABSize=512k +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\-XX:+UseAdaptiveSizePolicy +.RS 4 +適応世代サイズ指定の使用を有効にします。このオプションはデフォルトで有効になっています。適応世代サイズ指定を無効にするには、\fI\-XX:\-UseAdaptiveSizePolicy\fRを指定し、メモリー割当てプールのサイズを明示的に設定します(\fI\-XX:SurvivorRatio\fRオプションを参考にしてください)。 +.RE +.PP +\-XX:+UseCMSInitiatingOccupancyOnly +.RS 4 +CMSコレクタの開始のための唯一の基準としての占有値の使用を有効にします。デフォルトでは、このオプションは無効になっており、他の基準が使用されます。 +.RE +.PP +\-XX:+UseConcMarkSweepGC +.RS 4 +古い世代へのCMSガベージ・コレクタの使用を有効にします。アプリケーションの待機時間の要件を、スループット(\fI\-XX:+UseParallelGC\fR)ガベージ・コレクタによって満たすことができない場合、CMSガベージ・コレクタを使用することをお薦めします。G1ガベージ・コレクタ(\fI\-XX:+UseG1GC\fR)は別の代替となります。 +.sp +デフォルトでは、このオプションは無効になっており、コレクタは、マシンの構成およびJVMのタイプに基づいて、自動的に選択されます。このオプションを有効にすると、\fI\-XX:+UseParNewGC\fRオプションが自動的に設定されます。 +.RE +.PP +\-XX:+UseG1GC +.RS 4 +G1ガベージ・コレクタの使用を有効にします。これはサーバー形式のガベージ・コレクタで、大量のRAMを持つマルチプロセッサ・マシンを対象としています。高い確率でGC休止時間の目標を達成し、同時に適切なスループットも維持します。G1コレクタは、GC待機時間の限定された要件(安定した予測可能な0\&.5秒未満の休止時間)を持つ、大きいヒープ(約6GB以上のサイズ)が必要なアプリケーションに推奨されます。 +.sp +デフォルトでは、このオプションは無効になっており、コレクタは、マシンの構成およびJVMのタイプに基づいて、自動的に選択されます。 +.RE +.PP +\-XX:+UseGCOverheadLimit +.RS 4 +\fIOutOfMemoryError\fR例外がスローされるまでに、GCでJVMによって要した時間の割合を制限するポリシーの使用を有効にします。デフォルトでは、このオプションは有効になっており、ガベージ・コレクションに合計時間の98%より多く費やされ、ヒープのリカバリが2%未満である場合、パラレルGCによって\fIOutOfMemoryError\fRがスローされます。ヒープが小さい場合、この機能は、アプリケーションが長期間ほとんどまたはまったく進捗なく実行している状態を回避するために使用できます。このオプションを無効にするには、\fI\-XX:\-UseGCOverheadLimit\fRを指定します。 +.RE +.PP +\-XX:+UseNUMA +.RS 4 +アプリケーションで短い待機時間のメモリーの使用を増加させることで、不均一なメモリー・アーキテクチャ(NUMA)を使用したマシン上のアプリケーションのパフォーマンス最適化を有効にします。デフォルトでは、このオプションは無効になっており、NUMAに対する最適化は行われません。このオプションは、パラレル・ガベージ・コレクタ(\fI\-XX:+UseParallelGC\fR)が使用されている場合のみ使用可能です。 +.RE +.PP +\-XX:+UseParallelGC +.RS 4 +複数のプロセッサを利用してアプリケーションのパフォーマンスを向上させる、パラレル・スカベンジ・ガベージ・コレクタ(スループット・コレクタとも呼ばれる)の使用を有効にします。 +.sp +デフォルトでは、このオプションは無効になっており、コレクタは、マシンの構成およびJVMのタイプに基づいて、自動的に選択されます。これを有効にした場合、明示的に無効にしないかぎり、\fI\-XX:+UseParallelOldGC\fRオプションが自動的に有効になります。 +.RE +.PP +\-XX:+UseParallelOldGC +.RS 4 +フルGCへのパラレル・ガベージ・コレクタの使用を有効にします。デフォルトでは、このオプションは無効です。これを有効にすると、\fI\-XX:+UseParallelGC\fRオプションが自動的に有効になります。 +.RE +.PP +\-XX:+UseParNewGC +.RS 4 +若い世代でのコレクションへのパラレル・スレッドの使用を有効にします。デフォルトでは、このオプションは無効です。\fI\-XX:+UseConcMarkSweepGC\fRオプションを設定すると、これは自動的に有効になります。 +.RE +.PP +\-XX:+UseSerialGC +.RS 4 +シリアル・ガベージ・コレクタの使用を有効にします。ガベージ・コレクションから特別な機能を必要としない、小規模で単純なアプリケーションの場合には、これは一般に最適な選択です。デフォルトでは、このオプションは無効になっており、コレクタは、マシンの構成およびJVMのタイプに基づいて、自動的に選択されます。 +.RE +.PP +\-XX:+UseTLAB +.RS 4 +若い世代の領域でのスレッド・ローカルな割当てブロック(TLAB)の使用を有効にします。このオプションはデフォルトで有効になっています。TLABの使用を無効にするには、\fI\-XX:\-UseTLAB\fRを指定します。 +.RE +.SS "非推奨で削除されたオプション" +.PP +これらのオプションは、以前のリリースには含まれていましたが、以降は不要とみなされています。 +.PP +\-Xrun\fIlibname\fR +.RS 4 +指定したデバッグ/プロファイルのライブラリをロードします。このオプションは、\fI\-agentlib\fRオプションに取って代わられました。 +.RE +.PP +\-XX:CMSInitiatingPermOccupancyFraction=\fIpercent\fR +.RS 4 +GCを開始する永久世代占有率(0から100まで)を設定します。このオプションはJDK 8では非推奨で、それに代わるものはありません。 +.RE +.PP +\-XX:MaxPermSize=\fIsize\fR +.RS 4 +永久世代領域の最大サイズ(バイト単位)を設定します。このオプションは、JDK 8で非推奨になり、\fI\-XX:MaxMetaspaceSize\fRオプションに取って代わられました。 +.RE +.PP +\-XX:PermSize=\fIsize\fR +.RS 4 +超えた場合にはガベージ・コレクションをトリガーする、永久世代に割り当てられた領域(バイト単位)を設定します。このオプションは、JDK 8で非推奨になり、\fI\-XX:MetaspaceSize\fRオプションに取って代わられました。 +.RE +.PP +\-XX:+UseSplitVerifier +.RS 4 +検証プロセスの分割を有効にします。デフォルトでは、このオプションは以前のリリースでは有効になっており、検証は、タイプ参照(コンパイラによって実行)と、タイプ・チェック(JVMランタイムによって実行)の2つのフェーズに分割されていました。このオプションはJDK 8で非推奨となり、検証はデフォルトで分割され、無効にする方法はありません。 +.RE +.PP +\-XX:+UseStringCache +.RS 4 +一般に割り当てられた文字列のキャッシングを有効にします。このオプションはJDK 8から削除され、それに代わるものはありません。 +.RE +.SH "パフォーマンス・チューニングの例" +.PP +次の例では、スループットの最適化またはレスポンス時間の短縮化のいずれかを行うための、試験的なチューニング・フラグの使用方法を示します。 +.PP +\fBExample 1\fR, スループットを向上するためのチューニング +.RS 4 +.sp +.if n \{\ +.RS 4 +.\} +.nf +java \-d64 \-server \-XX:+AggressiveOpts \-XX:+UseLargePages \-Xmn10g \-Xms26g \-Xmx26g +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\fBExample 2\fR, レスポンス時間を速くするためのチューニング +.RS 4 +.sp +.if n \{\ +.RS 4 +.\} +.nf +java \-d64 \-XX:+UseG1GC \-Xms26g Xmx26g \-XX:MaxGCPauseMillis=500 \-XX:+PrintGCTimeStamp +.fi +.if n \{\ +.RE +.\} .RE - -.LP .SH "終了ステータス" -.LP -.LP -一般に、次の終了値が起動ツールから返されるのは通常、起動元が不正な引数で呼び出されたか、深刻なエラーが発生したか、あるいは Java 仮想マシンから例外がスローされた場合です。ただし Java アプリケーションは、API 呼び出し \f2System.exit(exitValue)\fP を使用して任意の値を返すことを選択することもできます。 -.LP -.RS 3 -.TP 2 -o -\f20\fP: 正常終了 -.TP 2 -o -\f2>0\fP: エラーが発生した +.PP +通常、次の終了値が起動ツールから返されるのは、起動元が不正な引数で呼び出されたか、深刻なエラーが発生したか、あるいはJVMにより例外がスローされた場合です。ただし、Javaアプリケーションは、API呼出し\fISystem\&.exit(exitValue)\fRを使用して任意の値を返すことを選択することもできます。値は次のとおりです。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fI0\fR: 正常終了 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fI>0\fR: エラー発生 .RE - -.LP .SH "関連項目" -.LP -.RS 3 -.TP 2 -o -javac(1) -.TP 2 -o -jdb(1) -.TP 2 -o -javah(1) -.TP 2 -o -jar(1) -.TP 2 -o -.na -\f2「Java 拡張機能フレームワーク」\fP @ -.fi -http://java.sun.com/javase/6/docs/technotes/guides/extensions/index.html -.TP 2 -o -.na -\f2「セキュリティー」\fP @ -.fi -http://java.sun.com/javase/6/docs/technotes/guides/security/index.html -.TP 2 -o -.na -\f2「HotSpot VM Specific Options」\fP @ -.fi -http://java.sun.com/docs/hotspot/VMOptions.html +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +javac(1) .RE - -.LP - +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +jdb(1) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +javah(1) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +jar(1) +.RE +.br +'pl 8.5i +'bp diff --git a/jdk/src/solaris/doc/sun/man/man1/ja/javac.1 b/jdk/src/solaris/doc/sun/man/man1/ja/javac.1 index cb107bfb9a1..5d829a38a81 100644 --- a/jdk/src/solaris/doc/sun/man/man1/ja/javac.1 +++ b/jdk/src/solaris/doc/sun/man/man1/ja/javac.1 @@ -1,1250 +1,1489 @@ -." 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 -." 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. -." -.TH javac 1 "07 May 2011" - -.LP -.SH "名前" -javac \- Java プログラミング言語コンパイラ -.LP -.RS 3 -.TP 2 -o -形式 -.TP 2 -o -説明 -.TP 2 -o -オプション -.TP 2 -o -コマンド行引数ファイル -.TP 2 -o -注釈処理 -.TP 2 -o -型の検索 -.TP 2 -o -プログラマティックインタフェース -.TP 2 -o -例 -.TP 2 -o -関連項目 -.RE - -.LP -.SH "形式" -.LP +'\" t +.\" Copyright (c) 1994, 2013, Oracle and/or its affiliates. All rights reserved. +.\" Title: javac +.\" Language: English +.\" Date: 2013年11月21日 +.\" SectDesc: 基本ツール +.\" Software: JDK 8 +.\" Arch: 汎用 +.\" +.\" 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. +.\" +.pl 99999 +.TH "javac" "1" "2013年11月21日" "JDK 8" "基本ツール" +.\" ----------------------------------------------------------------- +.\" * Define some portability stuff +.\" ----------------------------------------------------------------- +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.\" http://bugs.debian.org/507673 +.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" ----------------------------------------------------------------- +.\" * set default formatting +.\" ----------------------------------------------------------------- +.\" disable hyphenation +.nh +.\" disable justification (adjust text to left margin only) +.ad l +.\" ----------------------------------------------------------------- +.\" * MAIN CONTENT STARTS HERE * +.\" ----------------------------------------------------------------- +.SH "NAME" +javac \- Javaクラスおよびインタフェースの定義を読み取り、バイトコードおよびクラス・ファイルにコンパイルします。 +.SH "概要" +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl - \fP\f3javac\fP [ options ] [ sourcefiles ] [ classes ] [ @argfiles ] -.fl - -.fl +\fIjavac\fR [ \fIoptions\fR ] [ \fIsourcefiles\fR ] [ \fIclasses\fR] [ \fI@argfiles\fR ] .fi - -.LP -.LP -引数は順不同です。 -.LP -.RS 3 -.TP 3 -options -コマンド行オプション。 -.TP 3 -sourcefiles -コンパイルされる 1 つ以上のソースファイル (MyClass.java など) -.TP 3 -classes -注釈の処理対象となる 1 つ以上のクラス (MyPackage.MyClass など) -.TP 3 -@argfiles -オプションとソースファイルを列挙した 1 つ以上のファイル。このファイルの中では \f2\-J\fP オプションは指定できません。 +.if n \{\ +.RE +.\} +.PP +引数を指定する順序は任意です。 +.PP +\fIoptions\fR +.RS 4 +コマンドライン・オプション。オプションを参照してください。 +.RE +.PP +\fIsourcefiles\fR +.RS 4 +コンパイルされる1つ以上のソース・ファイル(\fIMyClass\&.java\fRなど)。 +.RE +.PP +\fIclasses\fR +.RS 4 +注釈の処理対象となる1つ以上のクラス(\fIMyPackage\&.MyClass\fRなど)。 +.RE +.PP +\fI@argfiles\fR +.RS 4 +オプションとソース・ファイルを一覧表示する1つ以上のファイル。このファイルの中では\fI\-J\fRオプションは指定できません。コマンドライン引数ファイルを参照してください。 .RE - -.LP .SH "説明" -.LP -.LP -\f3javac\fP ツールは、Java プログラミング言語で記述されたクラスとインタフェースの定義を読み取り、バイトコードのクラスファイルにコンパイルします。また、Java ソースファイルおよびクラス内の注釈の処理も行います。 -.LP -.LP -ソースコードのファイル名を \f3javac\fP に渡すには、次の 2 つの方法があります。 -.LP -.RS 3 -.TP 2 -o -ソースファイルの数が少ない場合は、ファイル名をコマンド行で直接指定します。 -.TP 2 -o -ソースファイルの数が多い場合は、ファイル名を空白または改行で区切って、1 つのファイルに列挙します。次に、このリストファイル名の先頭に \f3@\fP を付けて、\f3javac\fP のコマンド行で指定します。 +.PP +\fIjavac\fRコマンドは、Javaプログラミング言語で記述されたクラスとインタフェースの定義を読み取り、バイトコードのクラス・ファイルにコンパイルします。\fIjavac\fRコマンドでは、Javaソース・ファイルおよびクラス内の注釈の処理もできます。 +.PP +ソース・コードのファイル名を\fIjavac\fRに渡すには、2つの方法があります。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +ソース・ファイルの数が少ない場合は、ファイル名をコマンドラインで指定します。 .RE - -.LP -.LP -ソースコードのファイル名は \f2.java\fP 拡張子を、クラスのファイル名は \f2.class\fP 拡張子を持っていなければなりません。また、ソースファイルとクラスファイルのどちらも、該当するクラスに対応するルート名を持っていなければなりません。たとえば、 \f2MyClass\fP という名前のクラスは、 \f2MyClass.java\fP という名前のソースファイルに記述します。このソースファイルは、 \f2MyClass.class\fP という名前のバイトコードクラスファイルにコンパイルされます。 -.LP -.LP -内部クラスが定義されていると、追加のクラスファイルが生成されます。これらのクラスファイルの名前は、 \f2MyClass$MyInnerClass.class\fP のように、外部クラス名と内部クラス名を組み合わせたものになります。 -.LP -.LP -ソースファイルは、パッケージツリーを反映したディレクトリツリーに配置する必要があります。たとえば、すべてのソースファイルを \f3/workspace\fP に置いている場合、 \f2com.mysoft.mypack.MyClass\fP のソースコードは \f3/workspace/com/mysoft/mypack/MyClass.java\fP にある必要があります。 -.LP -.LP -デフォルトでは、コンパイラは、各クラスファイルを対応するソースファイルと同じディレクトリに置きます。別の出力先ディレクトリを指定するには、\f3\-d\fP を使用します (このあとのオプションを参照)。 -.LP +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +ソース・ファイルの数が多い場合は、ファイル内のファイル名を空白または改行で区切って指定します。\fIjavac\fRコマンドで、リスト・ファイル名の先頭にアットマーク(@)を使用します。 +.RE +.PP +ソース・コードのファイル名は\&.java拡張子を、クラスのファイル名は\&.class拡張子を持っている必要があります。また、ソース・ファイルとクラス・ファイルのどちらも、該当するクラスに対応するルート名を持っている必要があります。たとえば、\fIMyClass\fRという名前のクラスは、\fIMyClass\&.java\fRという名前のソース・ファイルに記述されます。このソース・ファイルは、\fIMyClass\&.class\fRという名前のバイトコード・クラス・ファイルにコンパイルされます。 +.PP +内部クラスが定義されていると、追加のクラス・ファイルが生成されます。これらのクラス・ファイルの名前は、\fIMyClass$MyInnerClass\&.class\fRのように、内部クラス名と外部クラス名を組み合せたものになります。 +.PP +ソース・ファイルは、パッケージ・ツリーを反映したディレクトリ・ツリーに配置します。たとえば、すべてのソース・ファイルが\fI/workspace\fRにある場合、\fIcom\&.mysoft\&.mypack\&.MyClass\fRのソース・コードを、\fI/workspace/com/mysoft/mypack/MyClass\&.java\fRに格納します。 +.PP +デフォルトでは、コンパイラは、各クラス・ファイルを対応するソース・ファイルと同じディレクトリに格納します。\fI\-d\fRオプションを使用して、別の出力先ディレクトリを指定できます。 .SH "オプション" -.LP -.LP -コンパイラには、現在の開発環境でサポートされており、将来のリリースでもサポートされる標準オプションのセットがあります。これ以外の非標準オプションは、現在の仮想マシンおよびコンパイラの実装に固有のオプションで、将来に変更される可能性があります。非標準オプションは、\f3\-X\fP で始まります。 -.LP -.SS -標準オプション -.LP -.RS 3 -.TP 3 -\-Akey[=value] -注釈プロセッサに渡されるオプション。これらは、javac によって直接解釈されず、個々のプロセッサによって使用されます。\f2key\fP には、1 つまたは複数の識別子を「.」で区切ったものを指定してください。 -.TP 3 -\-cp path または \-classpath path -ユーザーのクラスファイルおよび (場合によっては) 注釈プロセッサやソースファイルの検索場所を指定します。このクラスパスは \f3CLASSPATH\fP 環境変数のユーザークラスパスをオーバーライドします。\f3CLASSPATH\fP、\f3\-cp\fP、\f3\-classpath\fP のいずれも指定されていない場合、ユーザークラスパスは、現在のディレクトリになります。詳細は、「クラスパスの設定」を参照してください。 -.LP -\f3\-sourcepath\fP オプションが指定されていない場合は、ソースファイルもユーザークラスパスから検索されます。 -.LP -\f3\-processorpath\fP オプションが指定されていない場合は、注釈プロセッサもユーザークラスパスから検索されます。 -.TP 3 -\-Djava.ext.dirs=directories -インストール型拡張機能の位置をオーバーライドします。 -.TP 3 -\-Djava.endorsed.dirs=directories -承認された標準パスの位置をオーバーライドします。 -.TP 3 -\-d directory -クラスファイルの出力先ディレクトリを設定します。そのディレクトリはすでに存在している必要があります。\f3javac\fP は作成しません。クラスがパッケージの一部である場合、\f3javac\fP は、必要に応じてディレクトリを作成し、パッケージ名を反映したサブディレクトリにクラスファイルを置きます。たとえば、\f3\-d /home/myclasses\fP と指定し、クラスの名前が \f2com.mypackage.MyClass\fP である場合、クラスファイルは \f2/home/myclasses/com/mypackage/MyClass.class\fP になります。 -.LP -\f3\-d\fP が指定されなかった場合、\f3javac\fP は各クラスファイルを、その生成元となるソースファイルと同じディレクトリ内に格納します。 -.LP -\f3注:\fP \f3\-d\fP で指定したディレクトリはユーザークラスパスに自動的には追加されません。 -.TP 3 -\-deprecation -推奨されないメンバーやクラスが、使用またはオーバーライドされるたびに説明を表示します。\f3\-deprecation\fP が指定されていない場合、\f3javac\fP は、推奨されないメンバーやクラスを使用またはオーバーライドしているソースファイルの要約を表示します。\f3\-deprecation\fP は \f3\-Xlint:deprecation\fP の省略表記です。 -.TP 3 -\-encoding encoding -ソースファイルのエンコーディング名 ( \f2EUC\-JP や UTF\-8\fP など) を指定します。\f3\-encoding\fP が指定されていない場合は、プラットフォームのデフォルトコンバータが使われます。 -.TP 3 -\-endorseddirs directories -承認された標準パスの位置をオーバーライドします。 -.TP 3 -\-extdirs directories -\f2ext\fP ディレクトリの位置をオーバーライドします。\f2directories\fP 変数には、コロンで区切ったディレクトリのリストを指定します。指定したディレクトリ内の各 JAR アーカイブから、クラスファイルが検索されます。見つかったすべての JAR アーカイブは自動的にクラスパスの一部になります。 -.LP -クロスコンパイル (異なる Java プラットフォームに実装されたブートストラップクラスや拡張機能クラスに対してコンパイルを行う) を実行する場合、このオプションには拡張機能クラスを含むディレクトリを指定します。詳細は、「クロスコンパイルオプション」を参照してください。 -.TP 3 -\-g -局所変数を含むすべてのデバッグ情報を生成します。デフォルトでは、行番号およびソースファイル情報だけが生成されます。 -.TP 3 -\-g:none -デバッグ情報を生成しません。 -.TP 3 -\-g:{keyword list} -コンマで区切られたキーワードリストにより指定された、特定の種類のデバッグ情報だけを生成します。次のキーワードが有効です。 -.RS 3 -.TP 3 -source -ソースファイルのデバッグ情報 -.TP 3 -lines -行番号のデバッグ情報 -.TP 3 -vars -局所変数のデバッグ情報 +.PP +コンパイラには、現在の開発環境でサポートされる標準オプションのセットがあります。これ以外の非標準オプションは、現在の仮想マシンおよびコンパイラの実装に固有のオプションで、将来、変更される可能性があります。非標準オプションは、\fI\-X\fRオプションで始まります。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +クロスコンパイル・オプションを参照してください。 .RE -.TP 3 -\-help -標準オプションの形式を表示します。 -.TP 3 -\-implicit:{class,none} -暗黙的にロードされたソースファイルに対するクラスファイルの生成を制御します。クラスファイルを自動生成するには、\f3\-implicit:class\fP を使用します。クラスファイルの生成を抑制するには、\f3\-implicit:none\fP を使用します。このオプションが指定されなかった場合のデフォルト動作は、クラスファイルの自動生成になります。その場合、そのようなクラスファイルが生成された時に注釈処理も実行されると、コンパイラから警告が発行されます。このオプションが明示的に設定された場合には、警告は発行されません。「型の検索」を参照してください。 -.TP 3 -\-Joption -\f3javac\fP が呼び出す \f3java\fP 起動ツールに、\f2option\fP を渡します。たとえば、\f3\-J\-Xms48m\fP と指定すると、スタートアップメモリーは 48M バイトに設定されます。\f3\-J\fP を使って、Java で記述されたアプリケーションを実行する背後の VM にオプション渡すことは、よく行われています。 -.LP -\f3注:\fP \f3CLASSPATH\fP、\f3\-classpath\fP、\f3\-bootclasspath\fP、および \f3\-extdirs\fP は、\f3javac\fP を実行するために使うクラスを指定するものではありません。このような方法でコンパイラの実装を操作することは、通常は無意味であり、常に危険を伴います。このような方法を使う必要がある場合は、\f3\-J\fP オプションを使って、必要なオプションを背後の \f3java\fP 起動ツールに渡してください。 -.TP 3 -\-nowarn -警告メッセージを無効にします。これは \f3\-Xlint:none\fP と同じ意味です。 -.TP 3 -\-proc: {none,only} -注釈処理、コンパイル、その両方、のいずれを実行するかを制御します。\f3\-proc:none\fP は、注釈処理なしでコンパイルが実行されることを意味します。\f3\-proc:only\fP は、注釈処理だけが実行され、後続のコンパイルはまったく実行されないことを意味します。 -.TP 3 -\-processor class1[,class2,class3...] -実行する注釈プロセッサの名前。これを指定した場合、デフォルトの検索処理は省略されます。 -.TP 3 -\-processorpath path -注釈プロセッサの検索場所を指定します。このオプションを使用しなかった場合、クラスパス内でプロセッサの検索が行われます。 -.TP 3 -\-s dir -生成されたソースファイルの格納先となるディレクトリを指定します。そのディレクトリはすでに存在している必要があります。\f3javac\fP は作成しません。クラスがパッケージの一部になっていた場合、コンパイラはそのソースファイルを、パッケージ名を反映したサブディレクトリ内に格納します。その際、必要に応じてディレクトリを作成します。たとえば、ユーザーが \f3\-s /home/mysrc\fP と指定し、クラスの名前が \f2com.mypackage.MyClass\fP であった場合、そのソースファイルは \f2/home/mysrc/com/mypackage/MyClass.java\fP 内に格納されます。 -.TP 3 -\-source release -受け付けるソースコードのバージョンを指定します。\f2release\fP には次の値を指定できます。 -.RS 3 -.TP 3 -1.3 -このコンパイラでは、JDK 1.3 以降に導入されたアサーション、総称、または他の言語機能をサポートしません。 -.TP 3 -1.4 -JDK 1.4 で導入された、アサーションを含むコードを受け付けます。 -.TP 3 -1.5 -JDK 5 で導入された総称および他の言語機能を含んだコードを受け付けます。 -.TP 3 -5 -1.5 と同義です。 -.TP 3 -1.6 -これがデフォルト値です。Java SE 6 では言語に対する変更は導入されませんでしたが、ソースファイル内のエンコーディングエラーが、以前のような「警告」ではなく、「エラー」として報告されるようになりました。 -.TP 3 -6 -1.6 と同義です。 -.TP 3 -1.7 -JDK 7 で導入された機能を含むコードを受け付けます。 -.TP 3 -7 -1.7 と同義です。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +非標準オプションを参照してください。 .RE -.TP 3 -\-sourcepath sourcepath -クラスまたはインタフェースの定義を検索するソースコードパスを指定します。ユーザークラスパスと同様に、ソースパスの複数のエントリはコロン (\f3:\fP) で区切ります。ソースパスのエントリには、ディレクトリ、JAR アーカイブ、または ZIP アーカイブを指定できます。パッケージを使っている場合は、ディレクトリまたはアーカイブ内のローカルパス名がパッケージ名を反映していなければなりません。 -.LP -\f3注:\fP\ クラスパスからクラスだけでなくそのソースも見つかった場合、そのクラスは自動再コンパイルの対象になることがあります。「型の検索」を参照してください。 -.TP 3 -\-verbose -詳細な出力を表示します。ロードされるクラスおよびコンパイルされるソースファイルごとの情報が出力されます。 -.TP 3 -\-version -バージョン情報を出力します。 -.TP 3 -\-Werror -警告が発生した場合にコンパイルを終了します。 -.TP 3 -\-X -非標準オプションに関する情報を表示して終了します。 +.SS "標準オプション" +.PP +\-A\fIkey\fR[\fI=value\fR] +.RS 4 +注釈プロセッサに渡すオプションを指定します。これらのオプションは、\fIjavac\fRが直接解釈するのではなく、それぞれのプロセッサで使用できるようになります。\fIkey\fRの値は、1つまたは複数の識別子をドット(\&.)で区切る必要があります。 .RE - -.LP -.SS -クロスコンパイルオプション -.LP -.LP -デフォルトでは、クラスのコンパイルは、\f3javac\fP が添付されているプラットフォームのブートストラップクラスおよび拡張機能クラスに対して行われます。ただし、\f3javac\fP は、異なる Java プラットフォームに実装されたブートストラップクラスおよび拡張機能クラスに対してコンパイルを行う「クロスコンパイル」もサポートしています。クロスコンパイルを行う場合は、\f3\-bootclasspath\fP および \f3\-extdirs\fP を使うことが重要です。このあとの「クロスコンパイルの例」を参照してください。 -.LP -.RS 3 -.TP 3 -\-target version -指定されたバージョンの VM をターゲットにしたクラスファイルを生成します。このクラスファイルは、指定されたターゲット以降のバージョンでは動作しますが、それより前のバージョンの VM では動作しません。有効なターゲットは、\f31.1\fP、\f31.2\fP、\f31.3\fP、\f31.4\fP、\f31.5\fP (\f35\fP も可)、\f31.6\fP (\f36\fP も可)、および \f31.7\fP (\f37\fP も可) です。 -.LP -\f3\-target\fP のデフォルトは、次のように \f3\-source\fP の値によって決まります。 -.RS 3 -.TP 2 -o -\-source が\f3指定されなかった\fP場合、\-target の値は \f31.7\fP になります。 -.TP 2 -o -\-source が\f31.2\fP の場合、\-target の値は \f31.4\fP になります。 -.TP 2 -o -\-source が\f31.3\fP の場合、\-target の値は \f31.4\fP になります。 -.TP 2 -o -\-source が\f3それ以外の値の場合はすべて\fP、\f3\\\-target\fP の値は \f3\-source\fP の値になります。 +.PP +\-cp \fIpath\fR or \-classpath \fIpath\fR +.RS 4 +ユーザー・クラス・ファイル、および(オプションで)注釈プロセッサとソース・ファイルを検索する場所を指定します。このクラス・パスは\fICLASSPATH\fR環境変数のユーザー・クラス・パスをオーバーライドします。\fICLASSPATH\fR、\fI\-cp\fR、\fI\-classpath\fRのいずれも指定されていない場合、ユーザーの\fIクラス・パス\fRは、現在のディレクトリになります。Setting the Class Path を参照してください。 +.sp +\fI\-sourcepath\fRオプションが指定されていない場合、ソース・ファイルもユーザー・クラス・パスから検索されます。 +.sp +\fI\-processorpath\fRオプションが指定されていない場合、注釈プロセッサもクラス・パスから検索されます。 .RE -.TP 3 -\-bootclasspath bootclasspath -指定された一連のブートクラスに対してクロスコンパイルを行います。ユーザークラスパスと同様に、ブートクラスパスの複数のエントリはコロン (\f3:\fP) で区切ります。ブートクラスパスのエントリには、ディレクトリ、JAR アーカイブ、または ZIP アーカイブを指定できます。 +.PP +\-Djava\&.ext\&.dirs=\fIdirectories\fR +.RS 4 +インストール済拡張機能の位置をオーバーライドします。 .RE - -.LP -.SS -非標準オプション -.LP -.RS 3 -.TP 3 -\-Xbootclasspath/p:path -ブートストラップクラスパスの前に追加します。 -.TP 3 -\-Xbootclasspath/a:path -ブートストラップクラスパスの後ろに追加します。 -.TP 3 -\-Xbootclasspath/:path -ブートストラップクラスファイルの位置をオーバーライドします。 -.TP 3 -\-Xlint -推奨されるすべての警告を有効にします。このリリースでは、利用可能なすべての警告を有効にすることが推奨されています。 -.TP 3 -\-Xlint:all -推奨されるすべての警告を有効にします。このリリースでは、利用可能なすべての警告を有効にすることが推奨されています。 -.TP 3 -\-Xlint:none -すべての警告を無効にします。 -.TP 3 -\-Xlint:name -警告 \f2name\fP を有効にします。このオプションで有効にできる警告のリストについては、「\-Xlint オプションを使って有効または無効にできる警告」を参照してください。 -.TP 3 -\-Xlint:\-name -警告 \f2name\fP を無効にします。このオプションで無効にできる警告のリストについては、「\-Xlint オプションを使って有効または無効にできる警告」を参照してください。 -.TP 3 -\-Xmaxerrs number -印刷するエラーの最大数を設定します。 -.TP 3 -\-Xmaxwarns number -印刷する警告の最大数を設定します。 -.TP 3 -\-Xstdout filename -コンパイラのメッセージを、指定されたファイルに送ります。デフォルトでは、コンパイラのメッセージは \f2System.err\fP に送られます。 -.TP 3 -\-Xprefer:{newer,source} -ある型に対してソースファイルとクラスファイルの両方が見つかった場合、そのどちらのファイルを読み取るべきかを指定します (「型の検索」を参照)。\f2\-Xprefer:newer\fP を使用した場合、ある型に対するソースファイルとクラスファイルの新しい方が読み取られます (デフォルト)。\f2\-Xprefer:source\fP オプションを使用した場合、ソースファイルが読み取られます。SOURCE の保存ポリシーを使って宣言された注釈に任意の注釈プロセッサがアクセスできるようにする場合は、\f2\-Xprefer:source\fP \f2を使用してください\fP。 -.TP 3 -\-Xpkginfo:{always,legacy,nonempty} -パッケージ情報ファイルの処理を指定します。 -.TP 3 -\-Xprint -指定された型のテキスト表現をデバッグ目的で出力します。注釈処理、コンパイルのどちらも実行しません。出力形式は変更される可能性があります。 -.TP 3 -\-XprintProcessorInfo -ある特定のプロセッサが処理を依頼されている注釈に関する情報を出力します。 -.TP 3 -\-XprintRounds -初回および後続の注釈処理ラウンドに関する情報を出力します。 +.PP +\-Djava\&.endorsed\&.dirs=\fIdirectories\fR +.RS 4 +承認された標準パスの位置をオーバーライドします。 .RE - -.LP -.SS -\-Xlint オプションを使って有効または無効にできる警告 -.LP -.LP -\f3\-Xlint:\fP\f2name\fP オプションを使って警告 \f2name\fP を有効にします。ただし、\f2name\fP は次の警告名のいずれかになります。同様に、\f3\-Xlint:\-\fP\f2name\fP オプションを使って警告 \f2name\fP を無効にできます。 -.LP -.RS 3 -.TP 3 -cast -不要で冗長なキャストについて警告します。次に例を示します。 +.PP +\-d \fIdirectory\fR +.RS 4 +クラス・ファイルの出力先ディレクトリを設定します。そのディレクトリは\fIjavac\fRでは作成されないため、すでに存在している必要があります。クラスがパッケージの一部である場合、\fIjavac\fRは、パッケージ名を反映したサブディレクトリ内にクラス・ファイルを格納し、必要に応じてディレクトリを作成します。 +.sp +\fI\-d\fR +\fI/home/myclasses\fRと指定し、クラスの名前が\fIcom\&.mypackage\&.MyClass\fRである場合、クラス・ファイルは\fI/home/myclasses/com/mypackage/MyClass\&.class\fRになります。 +.sp +\fI\-d\fRオプションが指定されなかった場合、\fIjavac\fRは、各クラス・ファイルを、その生成元となるソース・ファイルと同じディレクトリ内に格納します。 +.sp +\fB注意:\fR +\fI\-d\fRオプションによって指定されたディレクトリは、ユーザー・クラス・パスに自動的に追加されません。 +.RE +.PP +\-deprecation +.RS 4 +非推奨のメンバーまたはクラスが使用またはオーバーライドされるたびに、説明を表示します。\fI\-deprecation\fRオプションが指定されていない場合、\fIjavac\fRは、非推奨のメンバーまたはクラスを使用またはオーバーライドしているソース・ファイルのサマリーを表示します。\fI\-deprecation\fRオプションは、\fI\-Xlint:deprecation\fRの省略表記です。 +.RE +.PP +\-encoding \fIencoding\fR +.RS 4 +ソース・ファイルのエンコーディング名(EUC\-JPやUTF\-8など)を設定します。\fI\-encoding\fRオプションが指定されていない場合は、プラットフォームのデフォルト・コンバータが使用されます。 +.RE +.PP +\-endorseddirs \fIdirectories\fR +.RS 4 +承認された標準パスの位置をオーバーライドします。 +.RE +.PP +\-extdirs \fIdirectories\fR +.RS 4 +\fIext\fRディレクトリの位置をオーバーライドします。directories変数には、コロンで区切ったディレクトリのリストを指定します。指定したディレクトリ内の各JARファイルから、クラス・ファイルが検索されます。検出されたすべてのJARファイルは、クラス・パスの一部になります。 +.sp +クロスコンパイル(異なるJavaプラットフォームに実装されたブートストラップ・クラスや拡張機能クラスに対してコンパイルを行う)を実行する場合、このオプションには拡張機能クラスを含むディレクトリを指定します。詳細はクロスコンパイル・オプションを参照してください。 +.RE +.PP +\-g +.RS 4 +ローカル変数を含むすべてのデバッグ情報を生成します。デフォルトでは、行番号およびソース・ファイル情報のみが生成されます。 +.RE +.PP +\-g:none +.RS 4 +デバッグ情報を生成しません。 +.RE +.PP +\-g:[\fIkeyword list\fR] +.RS 4 +カンマで区切られたキーワード・リストにより指定された、特定の種類のデバッグ情報のみを生成します。次のキーワードが有効です。 +.PP +source +.RS 4 +ソース・ファイルのデバッグ情報。 +.RE +.PP +lines +.RS 4 +行番号のデバッグ情報。 +.RE +.PP +vars +.RS 4 +ローカル変数のデバッグ情報。 +.RE +.RE +.PP +\-help +.RS 4 +標準オプションの概要を出力します。 +.RE +.PP +\-implicit:[\fIclass, none\fR] +.RS 4 +暗黙的にロードされたソース・ファイルに対するクラス・ファイルの生成を制御します。クラス・ファイルを自動生成するには、\fI\-implicit:class\fRを使用します。クラス・ファイルの生成を抑制するには、\fI\-implicit:none\fRを使用します。このオプションが指定されなかった場合のデフォルト動作は、クラス・ファイルの自動生成になります。その場合、そのようなクラス・ファイルが生成された時に注釈処理も実行されると、コンパイラから警告が発行されます。\fI\-implicit\fRオプションが明示的に設定された場合、警告は発行されません。型の検索を参照してください。 +.RE +.PP +\-J\fIoption\fR +.RS 4 +Java仮想マシン(JVM)に\fIoption\fRを渡します。optionには、Java起動ツールのリファレンス・ページに記載されているオプションを1つ指定します。たとえば、\fI\-J\-Xms48m\fRと指定すると、スタートアップ・メモリーは48MBに設定されます。java(1)を参照してください。 +.sp +\fB注意:\fR +\fICLASSPATH\fR、\fI\-classpath\fR、\fI\-bootclasspath\fRおよび\fI\-extdirs\fRオプションは、\fIjavac\fRの実行に使用されるクラスを指定しません。これらのオプションおよび変数を使用してコンパイラの実装をカスタマイズしようとすると、リスクが高く、多くの場合、必要な処理が実行されません。コンパイラの実装をカスタマイズする必要がある場合、\fI\-J\fRオプションを使用して、基礎となるJava起動ツールにオプションを渡します。 +.RE +.PP +\-nowarn +.RS 4 +警告メッセージを無効にします。このオプションは、\fI\-Xlint:none\fRオプションと同じように動作します。 +.RE +.PP +\-parameters +.RS 4 +リフレクションAPIのメソッド\fIjava\&.lang\&.reflect\&.Executable\&.getParameters\fRが取得できるように、生成されるクラス・ファイル内のコンストラクタとメソッドの仮パラメータ名を格納します。 +.RE +.PP +\-proc: [\fInone\fR, \fIonly\fR] +.RS 4 +注釈処理およびコンパイルを実行するかを制御します。\fI\-proc:none\fRは、注釈処理なしでコンパイルが実行されることを意味します。\fI\-proc:only\fRは、注釈処理のみが実行され、後続のコンパイルはまったく実行されないことを意味します。 +.RE +.PP +\-processor \fIclass1\fR [,\fIclass2\fR,\fIclass3\fR\&.\&.\&.] +.RS 4 +実行する注釈プロセッサの名前。これを指定した場合、デフォルトの検索処理は省略されます。 +.RE +.PP +\-processorpath \fIpath\fR +.RS 4 +注釈プロセッサを検索する場所を指定します。このオプションが使用されない場合、クラス・パスのプロセッサが検索されます。 +.RE +.PP +\-s \fIdir\fR +.RS 4 +生成されたソース・ファイルの格納先となるディレクトリを指定します。そのディレクトリは\fIjavac\fRでは作成されないため、すでに存在している必要があります。クラスがパッケージの一部である場合、コンパイラは、パッケージ名を反映したサブディレクトリ内にソース・ファイルを格納し、必要に応じてディレクトリを作成します。 +.sp +\fI\-s /home/mysrc\fRと指定し、クラスの名前が\fIcom\&.mypackage\&.MyClass\fRである場合、ソース・ファイルは\fI/home/mysrc/com/mypackage/MyClass\&.java\fRに格納されます。 +.RE +.PP +\-source \fIrelease\fR +.RS 4 +受け付けるソース・コードのバージョンを指定します。\fIrelease\fRには次の値を指定できます。 +.PP +1\&.3 +.RS 4 +このコンパイラでは、Java SE 1\&.3以降に導入されたアサーション、総称または他の言語機能をサポートしません。 +.RE +.PP +1\&.4 +.RS 4 +Java SE 1\&.4で導入された、アサーションを含むコードを受け付けます。 +.RE +.PP +1\&.5 +.RS 4 +Java SE 5で導入された総称および他の言語機能を含んだコードを受け付けます。 +.RE +.PP +5 +.RS 4 +1\&.5と同義です。 +.RE +.PP +1\&.6 +.RS 4 +Java SE 6では言語に対する変更は導入されませんでした。しかし、ソース・ファイル内のエンコーディング・エラーが、Java Platform, Standard Editionの以前のリリースような警告ではなく、エラーとして報告されるようになりました。 +.RE +.PP +6 +.RS 4 +1\&.6と同義です。 +.RE +.PP +1\&.7 +.RS 4 +これがデフォルト値です。Java SE 7で導入された機能を含むコードを受け付けます。 +.RE +.PP +7 +.RS 4 +1\&.7と同義です。 +.RE +.RE +.PP +\-sourcepath \fIsourcepath\fR +.RS 4 +クラスまたはインタフェースの定義を検索するソース・コード・パスを指定します。ユーザー・クラス・パスと同様に、ソース・パスのエントリは、Oracle Solarisではコロン(:)で、Windowsではセミコロンで区切り、ここには、ディレクトリ、JARアーカイブまたはZIPアーカイブを指定できます。パッケージを使用している場合は、ディレクトリまたはアーカイブ内のローカル・パス名がパッケージ名を反映している必要があります。 +.sp +\fB注意:\fR +ソース・ファイルも見つかった場合、クラス・パスにより見つかったクラスは再コンパイルされる可能性があります。型の検索を参照してください。 +.RE +.PP +\-verbose +.RS 4 +ロードされるクラスおよびコンパイルされるソース・ファイルごとの情報が出力される、詳細出力を使用します。 +.RE +.PP +\-version +.RS 4 +リリース情報を出力します。 +.RE +.PP +\-werror +.RS 4 +警告が発生した場合にコンパイルを終了します。 +.RE +.PP +\-X +.RS 4 +非標準オプションに関する情報を表示して終了します。 +.RE +.SS "クロスコンパイル・オプション" +.PP +デフォルトでは、クラスのコンパイルは、\fIjavac\fRが添付されているプラットフォームのブートストラップ・クラスおよび拡張機能クラスに対して行われます。ただし、\fIjavac\fRは、異なるJavaプラットフォームに実装されたブートストラップ・クラスおよび拡張機能クラスに対してコンパイルを行うクロスコンパイルもサポートしています。クロスコンパイルを行う場合は、\fI\-bootclasspath\fRおよび\fI\-extdirs\fRオプションを使用することが重要です。 +.PP +\-target \fIversion\fR +.RS 4 +仮想マシンの指定されたリリースを対象とするクラス・ファイルを生成します。クラス・ファイルは、指定されたターゲット以降のリリースでは動作しますが、それより前のリリースのJVMでは動作しません。有効なターゲットは、1\&.1、1\&.2、1\&.3、1\&.4、1\&.5 (5も可)、1\&.6 (6も可)および1\&.7 (7も可)です。 +.sp +\fI\-target\fRオプションのデフォルトは、\fI\-source\fRオプションの値によって異なります。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fI\-source\fRオプションが指定されていない場合、\fI\-target\fRオプションの値は1\&.7です。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fI\-source\fRオプションが1\&.2の場合、\fI\-target\fRオプションの値は1\&.4です。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fI\-source\fRオプションが1\&.3の場合、\fI\-target\fRオプションの値は1\&.4です。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fI\-source\fRオプションが1\&.5の場合、\fI\-target\fRオプションの値は1\&.7です。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fI\-source\fRオプションが1\&.6の場合、\fI\-target\fRオプションの値は1\&.7です。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fI\-source\fRオプションの他のすべての値の場合、\fI\-target\fRオプションの値は、\fI\-source\fRオプションの値になります。 +.RE +.RE +.PP +\-bootclasspath \fIbootclasspath\fR +.RS 4 +指定された一連のブート・クラスに対してクロスコンパイルを行います。ユーザー・クラス・パスと同様に、ブート・クラス・パスのエントリはコロン(:)で区切り、ここには、ディレクトリ、JARアーカイブまたはZIPアーカイブを指定できます。 +.RE +.SS "コンパクト・プロファイル・オプション" +.PP +JDK 8以降から、\fIjavac\fRコンパイラはコンパクト・プロファイルをサポートします。コンパクト・プロファイルを使用すると、Javaプラットフォーム全体を必要としないアプリケーションは、デプロイ可能で、小さいフットプリントで実行できます。コンパクト・プロファイル機能は、アプリケーション・ストアからのアプリケーションのダウンロード時間を短縮するのに使用できます。この機能は、JREをバンドルするJavaアプリケーションの、よりコンパクトなデプロイメントに役立ちます。この機能は、小さいデバイスでも役立ちます。 +.PP +サポートされているプロファイル値は、\fIcompact1\fR、\fIcompact2\fRおよび\fIcompact3\fRです。これらは、追加のレイヤーです。大きい番号の各コンパクト・プロファイルには、小さい番号の名前のプロファイル内のすべてのAPIが含まれます。 +.PP +\-profile +.RS 4 +コンパクト・プロファイルを使用する場合、このオプションは、コンパイル時にプロファイル名を指定します。次に例を示します。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -String s = (String)"Hello!" -.fl -\fP +javac \-profile compact1 Hello\&.java .fi -.TP 3 -classfile -クラスファイルの内容に関連した問題について警告します。 -.TP 3 -deprecation -非推奨項目の使用について警告します。次に例を示します。 +.if n \{\ +.RE +.\} +javacは、指定されたプロファイルにない任意のJava SE APIを使用するソース・コードをコンパイルしません。これは、そのようなソース・コードをコンパイルしようとすることによって生じるエラー・メッセージの例です。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl - java.util.Date myDate = new java.util.Date(); -.fl - int currentDay = myDate.getDay(); -.fl -\fP +cd jdk1\&.8\&.0/bin +\&./javac \-profile compact1 Paint\&.java +Paint\&.java:5: error: Applet is not available in profile \*(Aqcompact1\*(Aq +import java\&.applet\&.Applet; .fi -.LP -メソッド \f2java.util.Date.getDay\fP は JDK 1.1 以降は推奨されていません。 -.TP 3 -dep\-ann -\f2@deprecated\fP Javadoc コメントでドキュメント化されているが、 \f2@Deprecated\fP 注釈が付いていない項目について警告します。次に例を示します。 +.if n \{\ +.RE +.\} +この例では、\fIApplet\fRクラスを使用しないようにソースを変更することによって、エラーを修正できます。\-profileオプションを指定せずにコンパイルすることによって、エラーを修正することもできます。コンパイルは、Java SE APIの完全なセットに対して実行されます。(どのコンパクト・プロファイルにも、\fIApplet\fRクラスは含まれていません。) +.sp +コンパクト・プロファイルを使用してコンパイルするための別の方法として、\fI\-bootclasspath\fRオプションを使用して、プロファイルのイメージを指定する\fIrt\&.jar\fRファイルへのパスを指定します。かわりに\fI\-profile\fRオプションを使用すると、プロファイル・イメージは、コンパイル時にシステム上に存在する必要がありません。これは、クロスコンパイル時に役立ちます。 +.RE +.SS "非標準オプション" +.PP +\-Xbootclasspath/p:\fIpath\fR +.RS 4 +ブートストラップ・クラス・パスに接尾辞を追加します。 +.RE +.PP +\-Xbootclasspath/a:\fIpath\fR +.RS 4 +ブートストラップ・クラス・パスに接頭辞を追加します。 +.RE +.PP +\-Xbootclasspath/:\fIpath\fR +.RS 4 +ブートストラップ・クラス・ファイルの位置をオーバーライドします。 +.RE +.PP +\-Xdoclint:[\-]\fIgroup\fR [\fI/access\fR] +.RS 4 +\fIgroup\fRの値が\fIaccessibility\fR、\fIsyntax\fR、\fIreference\fR、\fIhtml\fRまたは\fImissing\fRのいずれかである特定のチェック・グループを有効または無効にします。これらのチェック・グループの詳細は、\fIjavadoc\fRコマンドの\fI\-Xdoclint\fRオプションを参照してください。\fI\-Xdoclint\fRオプションは、\fIjavac\fRコマンドではデフォルトで無効になります。 +.sp +変数\fIaccess\fRは、\fI\-Xdoclint\fRオプションがチェックするクラスとメンバーの最小の可視性レベルを指定します。\fIpublic\fR、\fIprotected\fR、\fIpackage\fRおよび\fIprivate\fRの値(可視性の高い順)の1つを持つことができます。たとえば、次のオプションは、(protected、package、publicを含む) protected以上のアクセス・レベルを持つクラスおよびメンバーを(すべてのチェック・グループで)チェックします。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl - /** -.fl - * @deprecated As of Java SE 7, replaced by {@link #newMethod()} -.fl - */ -.fl - -.fl - public static void deprecatedMethood() { } -.fl - -.fl - public static void newMethod() { } -.fl -\fP +\-Xdoclint:all/protected .fi -.TP 3 -divzero -一定の整数 0 で除算されることについて警告します。次に例を示します。 +.if n \{\ +.RE +.\} +次のオプションは、package以上のアクセス権(packageおよびpublicを含む)を持つクラスおよびメンバーに対するHTMLエラーをチェックしないことを除き、すべてのアクセス・レベルに対してすべてのチェック・グループを有効にします。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl - int divideByZero = 42 / 0; -.fl -\fP +\-Xdoclint:all,\-html/package .fi -.TP 3 -empty -\f2if\fP 文以降が空の文であることについて警告します。次に例を示します。 +.if n \{\ +.RE +.\} +.RE +.PP +\-Xdoclint:none +.RS 4 +すべてのチェック・グループを無効にします。 +.RE +.PP +\-Xdoclint:all[\fI/access\fR] +.RS 4 +すべてのチェック・グループを有効にします。 +.RE +.PP +\-Xlint +.RS 4 +推奨されるすべての警告を有効にします。このリリースでは、利用可能なすべての警告を有効にすることをお薦めします。 +.RE +.PP +\-Xlint:all +.RS 4 +推奨されるすべての警告を有効にします。このリリースでは、利用可能なすべての警告を有効にすることをお薦めします。 +.RE +.PP +\-Xlint:none +.RS 4 +すべての警告を無効にします。 +.RE +.PP +\-Xlint:\fIname\fR +.RS 4 +警告名を無効にします。このオプションで無効にできる警告のリストは、\-Xlintオプションを使用した警告の有効化または無効化を参照してください。 +.RE +.PP +\-Xlint:\fI\-name\fR +.RS 4 +警告名を無効にします。このオプションで無効にできる警告のリストを取得するには、\-Xlintオプションを使用した警告の有効化または無効化\-Xlint\fIオプションを使用した\fRを参照してください。 +.RE +.PP +\-Xmaxerrs \fInumber\fR +.RS 4 +印刷するエラーの最大数を設定します。 +.RE +.PP +\-Xmaxwarns \fInumber\fR +.RS 4 +印刷する警告の最大数を設定します。 +.RE +.PP +\-Xstdout \fIfilename\fR +.RS 4 +コンパイラのメッセージを、指定されたファイルに送信します。デフォルトでは、コンパイラのメッセージは\fISystem\&.err\fRに送られます。 +.RE +.PP +\-Xprefer:[\fInewer,source\fR] +.RS 4 +ある型に対してソース・ファイルとクラス・ファイルの両方が見つかった場合、そのどちらのファイルを読み取るかを指定します。(型の検索を参照してください)。\fI\-Xprefer:newer\fRオプションを使用した場合、ある型に対するソース・ファイルとクラス・ファイルのうち新しい方が読み取られます(デフォルト)。\fI\-Xprefer:source\fRオプションを使用した場合、ソース・ファイルが読み取られます。\fISOURCE\fRの保存ポリシーを使用して宣言された注釈に任意の注釈プロセッサがアクセスできるようにする場合は、\fI\-Xprefer:source\fRを使用してください。 +.RE +.PP +\-Xpkginfo:[\fIalways\fR,\fIlegacy\fR,\fInonempty\fR] +.RS 4 +javacがpackage\-info\&.javaファイルから\fIpackage\-info\&.class\fRファイルを生成するかどうかを制御します。このオプションで使用可能なmode引数は次のとおりです。 +.PP +always +.RS 4 +すべての\fIpackage\-info\&.java\fRファイルの\fIpackage\-info\&.class\fRファイルを常に生成します。このオプションは、各\fI\&.java\fRファイルに対応する\fI\&.class\fRファイルがあることを確認するAntなどのビルド・システムを使用する場合に役立つことがあります。 +.RE +.PP +legacy +.RS 4 +package\-info\&.javaに注釈が含まれる場合にのみ\fIpackage\-info\&.class\fRファイルを生成します。package\-info\&.javaにコメントのみ含まれる場合に\fIpackage\-info\&.class\fRファイルを生成しません。 +.sp +\fB注意:\fR +\fIpackage\-info\&.class\fRファイルは生成できますが、package\-info\&.javaファイル内のすべての注釈に\fIRetentionPolicy\&.SOURCE\fRがある場合は空になります。 +.RE +.PP +nonempty +.RS 4 +package\-info\&.javaに\fIRetentionPolicy\&.CLASS\fRまたは\fIRetentionPolicy\&.RUNTIME\fRとともに注釈が含まれる場合にのみ\fIpackage\-info\&.class\fRファイルを生成します。 +.RE +.RE +.PP +\-Xprint +.RS 4 +デバッグ目的で指定した型のテキスト表示を出力します。注釈処理もコンパイルも実行されません。出力形式は変更される可能性があります。 +.RE +.PP +\-XprintProcessorInfo +.RS 4 +ある特定のプロセッサが処理を依頼されている注釈に関する情報を出力します。 +.RE +.PP +\-XprintRounds +.RS 4 +初回および後続の注釈処理ラウンドに関する情報を出力します。 +.RE +.SH "-XLINTオプションを使用した警告の有効化または無効化" +.PP +\fI\-Xlint:name\fRオプションを使用して警告\fIname\fRを有効にします。ここで、\fIname\fRは次の警告名のいずれかになります。\fI\-Xlint:\-name:\fRオプションを使用して、警告を無効化できます。 +.PP +cast +.RS 4 +不要で冗長なキャストについて警告します。たとえば、次のようになります。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +String s = (String) "Hello!" +.fi +.if n \{\ +.RE +.\} +.RE +.PP +classfile +.RS 4 +クラス・ファイルの内容に関連した問題について警告します。 +.RE +.PP +deprecation +.RS 4 +非推奨の項目の使用について警告します。たとえば、次のようになります。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +java\&.util\&.Date myDate = new java\&.util\&.Date(); +int currentDay = myDate\&.getDay(); +.fi +.if n \{\ +.RE +.\} +メソッド\fIjava\&.util\&.Date\&.getDay\fRはJDK 1\&.1以降は非推奨になりました。 +.RE +.PP +dep\-ann +.RS 4 +\fI@deprecated\fR +Javadocコメントでドキュメント化されているが、\fI@Deprecated\fR注釈が付いていない項目について警告します。たとえば、次のようになります。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +/** + * @deprecated As of Java SE 7, replaced by {@link #newMethod()} + */ +public static void deprecatedMethood() { } +public static void newMethod() { } +.fi +.if n \{\ +.RE +.\} +.RE +.PP +divzero +.RS 4 +定整数0で除算されることについて警告します。たとえば、次のようになります。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +int divideByZero = 42 / 0; +.fi +.if n \{\ +.RE +.\} +.RE +.PP +empty +.RS 4 +\fIif \fR文以降が空の文であることについて警告します。たとえば、次のようになります。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl class E { -.fl void m() { -.fl - if (true) ; -.fl + if (true) ; } -.fl } -.fl -\fP .fi -.TP 3 -fallthrough -fall\-through ケースの \f2switch\fP ブロックをチェックし、検出されたものに対して警告メッセージを表示します。Fall\-through ケースは、\f2switch\fP ブロック内の最後のケースを除くケースです。このコードには \f2break\fP 文は含まれません。コードの実行をそのケースから次のケースへ移動します。たとえば、この \f2switch\fP ブロック内の \f2case 1\fP ラベルに続くコードは、\f2break\fP 文で終わっていません。 +.if n \{\ +.RE +.\} +.RE +.PP +fallthrough +.RS 4 +fall\-throughケースのswitchブロックをチェックし、検出されたものに対して警告メッセージを表示します。Fall\-throughケースは、switchブロック内の最後のケースを除くケースです。このコードにはbreak文は含まれません。コードの実行をそのケースから次のケースへ移動します。たとえば、このswitchブロック内のcase 1ラベルに続くコードは、break文で終わっていません。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl switch (x) { -.fl case 1: -.fl - System.out.println("1"); -.fl - // No break statement here. -.fl + System\&.out\&.println("1"); + // No break statement here\&. case 2: -.fl - System.out.println("2"); -.fl + System\&.out\&.println("2"); } -.fl -\fP .fi -.LP -このコードのコンパイル時に \f2\-Xlint:fallthrough\fP フラグが使用されていた場合、コンパイラは 当該ケースの行番号とともに、fall\-through ケースの可能性があることを示す警告を発行します。 -.TP 3 -finally -正常に完了できない \f2finally\fP 節について警告します。次に例を示します。 +.if n \{\ +.RE +.\} +このコードのコンパイル時に\fI\-Xlint:fallthrough\fRオプションが使用されていた場合、コンパイラは、問題になっているケースの行番号とともに、caseにfall\-throughする可能性があることを示す警告を発行します。 +.RE +.PP +finally +.RS 4 +正常に完了できない\fIfinally\fR句について警告します。たとえば、次のようになります。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl - public static int m() { -.fl - try { -.fl - throw new NullPointerException(); -.fl - } catch (NullPointerException e) { -.fl - System.err.println("Caught NullPointerException."); -.fl - return 1; -.fl - } finally { -.fl - return 0; -.fl - } -.fl +public static int m() { + try { + throw new NullPointerException(); + } catch (NullPointerException(); { + System\&.err\&.println("Caught NullPointerException\&."); + return 1; + } finally { + return 0; + } } -.fl -\fP .fi -.LP -この例では、コンパイラは \f2finally\fP ブロックに関する警告を生成します。このメソッドが呼び出されると、値 1 ではなく \f20\fP が \f2返されます\fP。 \f2finally\fP ブロックは、 \f2try\fP ブロックが終了すると必ず実行されます。この例では、制御が \f2catch\fP に移された場合、メソッドは終了します。ただし、 \f2finally\fP ブロックは実行される必要があるため、制御がすでにこのメソッドの外部に移されていても、このブロックは実行されます。 -.TP 3 -options -コマンド行オプションの使用に関する問題について警告します。この種の警告の例については、「クロスコンパイルの例」を参照してください。 -.TP 3 -overrides -メソッドのオーバーライドに関する問題について警告します。たとえば、次の 2 つのクラスがあるとします。 +.if n \{\ +.RE +.\} +この例では、コンパイラは\fIfinally\fRブロックに関する警告を生成します。\fIint\fRメソッドが呼び出されると、値0が返されます。\fIfinally\fRブロックは、\fItry\fRブロックが終了すると実行されます。この例では、制御が\fIcatch\fRブロックに移された場合、\fIint\fRメソッドは終了します。ただし、\fIfinally\fRブロックは実行される必要があるため、制御がメソッドの外部に移されていても、このブロックは実行されます。 +.RE +.PP +options +.RS 4 +コマンドライン・オプションの使用に関する問題について警告します。クロスコンパイル・オプションを参照してください。 +.RE +.PP +overrides +.RS 4 +メソッドのオーバーライドに関する問題について警告します。たとえば、次の2つのクラスがあるとします。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl public class ClassWithVarargsMethod { -.fl - void varargsMethod(String... s) { } -.fl + void varargsMethod(String\&.\&.\&. s) { } } -.fl -\fP -.fi -.nf -\f3 -.fl + public class ClassWithOverridingMethod extends ClassWithVarargsMethod { -.fl - @Override -.fl - void varargsMethod(String[] s) { } -.fl + @Override + void varargsMethod(String[] s) { } } -.fl -\fP .fi -.LP -コンパイラは次のような警告を生成します。 +.if n \{\ +.RE +.\} +コンパイラは、次のような警告を生成します。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -warning: [override] varargsMethod(String[]) in ClassWithOverridingMethod overrides varargsMethod(String...) in ClassWithVarargsMethod; overriding method is missing '...' -.fl -\fP +warning: [override] varargsMethod(String[]) in ClassWithOverridingMethod +overrides varargsMethod(String\&.\&.\&.) in ClassWithVarargsMethod; overriding +method is missing \*(Aq\&.\&.\&.\*(Aq .fi -.LP -コンパイラは、varargs メソッドを検出すると、varargs の仮パラメータを配列に変換します。メソッド \f2ClassWithVarargsMethod.varargsMethod\fP では、コンパイラは varargs の仮パラメータ \f2String... s\fP を仮パラメータ \f2String[] s\fP に変換します。String[] s は、メソッド \f2ClassWithOverridingMethod.varargsMethod\fP の仮パラメータに対応する配列です。その結果、この例ではコンパイルが行われます。 -.TP 3 -path -コマンド行での無効なパス要素と存在しないパスディレクトリについて警告します (クラスパス、ソースパスなどのパス関連)。このような警告を \f2@SuppressWarnings\fP 注釈で抑制することはできません。次に例を示します。 +.if n \{\ +.RE +.\} +コンパイラは、\fIvarargs\fRメソッドを検出すると、\fIvarargs\fRの仮パラメータを配列に変換します。メソッド\fIClassWithVarargsMethod\&.varargsMethod\fRでは、コンパイラは\fIvarargs\fRの仮パラメータ\fIString\&.\&.\&. s\fRを仮パラメータ\fIString[] s\fRに変換します。これは、メソッド\fIClassWithOverridingMethod\&.varargsMethod\fRの仮パラメータに対応する配列です。その結果、この例ではコンパイルが行われます。 +.RE +.PP +path +.RS 4 +コマンドラインでの無効なパス要素と存在しないパス・ディレクトリについて警告します(クラス・パス、ソース・パスなどのパス関連)。このような警告を\fI@SuppressWarnings\fR注釈で抑制することはできません。たとえば、次のようになります。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -javac \-Xlint:path \-classpath /nonexistentpath Example.java -.fl -\fP +javac \-Xlint:path \-classpath /nonexistentpath Example\&.java .fi -.TP 3 -processing -注釈処理に関する問題について警告します。コンパイラがこの警告を生成するのは、注釈を含むクラスがあるときに、使用している注釈プロセッサでその型の例外を処理できない場合です。単純な注釈プロセッサの例を次に示します。 -.LP -\f3ソースファイル \fP\f4AnnoProc.java\fP: +.if n \{\ +.RE +.\} +.RE +.PP +processing +.RS 4 +注釈処理に関する問題について警告します。コンパイラがこの警告を生成するのは、注釈を含むクラスがあるときに、使用している注釈プロセッサでそのタイプの例外を処理できない場合です。たとえば、単純な注釈プロセッサを次に示します。 +.sp +\fBソース・ファイルAnnocProc\&.java\fR: +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -import java.util.*; -.fl -import javax.annotation.processing.*; -.fl -import javax.lang.model.*; -.fl -import javax.lang.model.element.*; -.fl +import java\&.util\&.*; +import javax\&.annotation\&.processing\&.*; +import javax\&.lang\&.model\&.*; +import\&.javaz\&.lang\&.model\&.element\&.*; -.fl @SupportedAnnotationTypes("NotAnno") -.fl public class AnnoProc extends AbstractProcessor { -.fl - public boolean process(Set<? extends TypeElement> elems, RoundEnvironment renv) { -.fl - return true; -.fl - } -.fl - -.fl - public SourceVersion getSupportedSourceVersion() { -.fl - return SourceVersion.latest(); -.fl - } -.fl -} -.fl -\fP -.fi -.LP -\f3ソースファイル \fP\f4AnnosWithoutProcessors.java\fP\f3:\fP -.nf -\f3 -.fl -@interface Anno { } -.fl - -.fl -@Anno -.fl -class AnnosWithoutProcessors { } -.fl -\fP -.fi -.LP -次のコマンドは、注釈プロセッサ \f2AnnoProc\fP をコンパイルし、この注釈プロセッサをソースファイル \f2AnnosWithoutProcessors.java\fP に対して実行します。 -.nf -\f3 -.fl -% javac AnnoProc.java -.fl -% javac \-cp . \-Xlint:processing \-processor AnnoProc \-proc:only AnnosWithoutProcessors.java -.fl -\fP -.fi -.LP -コンパイラがソースファイル \f2AnnosWithoutProcessors.java\fP に対して注釈プロセッサを実行すると、次の警告が生成されます。 -.nf -\f3 -.fl -warning: [processing] No processor claimed any of these annotations: Anno -.fl -\fP -.fi -.LP -この問題を解決するには、クラス \f2AnnosWithoutProcessors\fP で定義および使用される注釈の名前を \f2Anno\fP から \f2NotAnno\fP に変更します。 -.TP 3 -rawtypes -raw 型に対する未検査操作について警告します。次の文では、 \f2rawtypes\fP 警告が生成されます。 -.nf -\f3 -.fl -void countElements(List l) { ... } -.fl -\fP -.fi -.LP -次の文では、 \f2rawtypes\fP 警告は生成されません。 -.nf -\f3 -.fl -void countElements(List<?> l) { ... } -.fl -\fP -.fi -.LP -\f2List\fP は raw 型です。ただし、 \f2List<?>\fP はアンバウンド形式のワイルドカードのパラメータ化された型です。 \f2List\fP はパラメータ化されたインタフェースなので、必ずその型引数を指定する必要があります。この例では、 \f2List\fP の仮引数はアンバウンド形式のワイルドカード (\f2?\fP) を使ってその仮型パラメータとして指定されます。つまり、 \f2countElements\fP メソッドは \f2List\fP インタフェースのどのインスタンス化も受け付けることができます。 -.TP 3 -serial -直列化可能クラスに \f2serialVersionUID\fP 定義がないことを警告します。次に例を示します。 -.nf -\f3 -.fl -public class PersistentTime implements Serializable -.fl -{ -.fl - private Date time; -.fl - -.fl - public PersistentTime() { -.fl - time = Calendar.getInstance().getTime(); -.fl - } -.fl - -.fl - public Date getTime() { -.fl - return time; -.fl - } -.fl -} -.fl -\fP -.fi -.LP -コンパイラは次の警告を生成します。 -.nf -\f3 -.fl -warning: [serial] serializable class PersistentTime has no definition of serialVersionUID -.fl -\fP -.fi -.LP -直列化可能クラスが \f2serialVersionUID\fP という名前のフィールドを明示的に宣言しない場合、直列化ランタイムは「Java オブジェクト直列化仕様」で説明されているように、クラスのさまざまな側面に基づいて、クラスの \f2serialVersionUID\fP のデフォルト値を計算します。ただし、すべての直列化可能クラスが \f2serialVersionUID\fP 値を明示的に宣言することを強くお勧めします。これは、 \f2serialVersionUID\fP 値を計算するデフォルトのプロセスが、コンパイラの実装によって異なる可能性のあるクラスの詳細にきわめて影響を受けやすく、直列化復元中に予期しない \f2InvalidClassExceptions\fP が発生する可能性があるためです。したがって、Java コンパイラの実装が異なっても \f2serialVersionUID\fP 値の一貫性を確保にするには、直列化可能クラスが \f2serialVersionUID\fP 値を明示的に宣言する必要があります。 -.TP 3 -static -static の使用に関する問題について警告します。次に例を示します。 -.nf -\f3 -.fl -class XLintStatic { -.fl - static void m1() { } -.fl - void m2() { this.m1(); } -.fl -} -.fl -\fP -.fi -.LP -コンパイラは次の警告を生成します。 -.nf -\f3 -.fl -warning: [static] static method should be qualified by type name, XLintStatic, instead of by an expression -.fl -\fP -.fi -.LP -この問題を解決するために、次のように static メソッド \f2m1\fP を呼び出すことができます。 -.nf -\f3 -.fl -XLintStatic.m1(); -.fl -\fP -.fi -.LP -あるいは、 \f2static\fP キーワードをメソッド \f2m1\fP の宣言から削除することもできます。 -.TP 3 -try -try\-with\-resources 文を含む、 \f2try\fP ブロックの使用に関する問題について警告します。たとえば、try 文で宣言されたリソース \f2ac\fP が使用されないために、 \f2次の文に対して警告が\fP 生成されます。 -.nf -\f3 -.fl -try ( AutoCloseable ac = getResource() ) { -.fl - // do nothing -.fl -} -.fl -\fP -.fi -.TP 3 -unchecked -Java 言語仕様で指定されている未検査変換警告の詳細を示します。次に例を示します。 -.nf -\f3 -.fl - List l = new ArrayList<Number>(); -.fl - List<String> ls = l; // unchecked warning -.fl -\fP -.fi -.LP -型の消去中に、型 \f2ArrayList<Number>\fP および \f2List<String>\fP はそれぞれ \f2ArrayList\fP および \f2List\fP になります。 -.LP -変数 \f2ls\fP にはパラメータ化された型 \f2List<String>\fP が指定されています。l によって参照される \f2List\fP \f2が\fP \f2ls\fP に代入されると、コンパイラは未検査警告を生成します。コンパイラは \f2l\fP が \f2List<String>\fP 型を参照するかどうかをコンパイル時に判断できません。また、JVM が実行時にそれを判断できないことも認識しています。l は List<String> 型を参照しません。その結果、ヒープ汚染が発生します。 -.LP -詳しく説明すると、ヒープ汚染状態が発生するのは、 \f2List\fP オブジェクト \f2l\fP (その static 型は \f2List<Number>\fP) が別の \f2List\fP オブジェクト \f2ls\fP (異なる static 型 \f2List<String>\fP を持つ) に代入される場合です。しかし、コンパイラではこの代入を未だに許可しています。総称をサポートしない Java SE のバージョンとの下位互換性を確保するために、この代入を許可する必要があります。型消去のために、 \f2List<Number>\fP と \f2List<String>\fP は \f2List\fP になります。その結果、コンパイラはオブジェクト \f2l\fP ( \f2List\fP という raw 型を持つ) をオブジェクト \f2ls\fPに代入することを許可します。 -.TP 3 -varargs -可変引数 (varargs) メソッド、特に非具象化可能引数を含むものの使用が安全でないことを警告します。次に例を示します。 -.nf -\f3 -.fl -public class ArrayBuilder { -.fl - public static <T> void addToList (List<T> listArg, T... elements) { -.fl - for (T x : elements) { -.fl - listArg.add(x); -.fl - } -.fl + public boolean process(Set<? extends TypeElement> elems, RoundEnvironment renv){ + return true; } -.fl + + public SourceVersion getSupportedSourceVersion() { + return SourceVersion\&.latest(); + } } -.fl -\fP .fi -.LP -コンパイラは、メソッド \f2ArrayBuilder.addToList\fP の定義に関する次の警告を生成します。 -.nf -\f3 -.fl -warning: [varargs] Possible heap pollution from parameterized vararg type T -.fl -\fP -.fi -.LP -コンパイラは、varargs メソッドを検出すると、varargs の仮パラメータを配列に変換します。しかし、Java プログラミング言語では、パラメータ化された型の配列の作成を許可していません。メソッド \f2ArrayBuilder.addToList\fP では、コンパイラは varargs の仮パラメータ \f2T... elements\fP を仮パラメータ \f2T[] elements\fP(配列) に変換します。しかし、型消去のために、コンパイラは varargs の仮パラメータを \f2Object[] elements\fP に変換します。その結果、ヒープ汚染が発生する可能性があります。 +.if n \{\ .RE - -.LP -.SH "コマンド行引数ファイル" -.LP -.LP -javac のコマンド行を短くしたり簡潔にしたりするために、 \f2javac\fP コマンドに対する引数 ( \f2\-J\fP オプションを除く) を含む 1 つ以上のファイルを指定することができます。この方法を使うと、どのオペレーティングシステム上でも、任意の長さの javac コマンドを作成できます。 -.LP -.LP -引数ファイルには、javac のオプションとソースファイル名を自由に組み合わせて記述できます。ファイル内の各引数は、スペースまたは改行で区切ります。ファイル名に空白が含まれている場合は、そのファイル名全体を二重引用符で囲みます。 -.LP -.LP -引数ファイル内のファイル名は、現在のディレクトリから見た相対パスになります。引数ファイルの位置から見た相対パスではありません。引数ファイル内のファイル名リストでは、ワイルドカード (*) は使用できません。たとえば、 \f2*.java\fP とは指定できません。引数ファイル内の引数で \f2@\fP 文字を使用して、複数のファイルを再帰的に解釈することはサポートされていません。また、 \f2\-J\fP オプションもサポートされていません。このオプションは起動ツールに渡されますが、起動ツールでは引数ファイルをサポートしていないからです。 -.LP -.LP -javac を実行するときに、各引数ファイルのパスとファイル名の先頭に \f2@\fP 文字を付けて渡します。javac は、\f2@\fP 文字で始まる引数を見つけると、そのファイルの内容を展開して引数リストに挿入します。 -.LP -.SS -引数ファイルを 1 つ指定する例 -.LP -.LP -\f2「argfile」という名前の引数ファイルに\fPすべての javac 引数を格納する場合は、次のように指定します。 -.LP +.\} +\fBソース・ファイルAnnosWithoutProcessors\&.java\fR: +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -% \fP\f3javac @argfile\fP -.fl -.fi - -.LP -.LP -この引数ファイルには、次の例で示されている 2 つのファイルの内容を両方とも入れることができます。 -.LP -.SS -引数ファイルを 2 つ指定する例 -.LP -.LP -たとえば、javac オプション用に 1 ファイル、ソースファイル名用に 1 ファイルというように、2 つの引数ファイルを作成することもできます。なお、このあとのリストでは、行の継続文字を使用していません。 -.LP -.LP -以下の内容を含む \f2options\fP というファイルを作成します。 -.LP -.nf -\f3 -.fl - \-d classes -.fl - \-g -.fl - \-sourcepath /java/pubs/ws/1.3/src/share/classes -.fl - -.fl -\fP -.fi - -.LP -.LP -以下の内容を含む \f2classes\fP というファイルを作成します。 -.LP -.nf -\f3 -.fl - MyClass1.java -.fl - MyClass2.java -.fl - MyClass3.java -.fl - -.fl -\fP -.fi - -.LP -.LP -次のコマンドを使用して \f3javac\fP を実行します。 -.LP -.nf -\f3 -.fl - % \fP\f3javac @options @classes\fP -.fl - -.fl -.fi - -.LP -.SS -パス付きの引数ファイルの例 -.LP -.LP -引数ファイルには、パスを指定できます。ただし、そのファイル内に指定されたファイル名は、現在の作業ディレクトリから見た相対パスになります。つまり、下の例の場合は、 \f2path1\fP や \f2path2\fP から見た相対パスではありません。 -.LP -.nf -\f3 -.fl -% \fP\f3javac @path1/options @path2/classes\fP -.fl -.fi - -.LP -.SH "注釈処理" -.LP -.LP -\f3javac\fP が注釈処理を直接サポートしているため、独立した注釈処理ツールである \f3apt\fP を使用する必要がなくなりました。 -.LP -.LP -注釈処理の API は、 \f2javax.annotation.processing\fP および \f2javax.lang.model\fP パッケージとそのサブパッケージ内に定義されています。 -.LP -.SS -注釈処理の概要 -.LP -.LP -\f3\-proc:none\fP オプションによって注釈処理が無効化されないかぎり、コンパイラは使用可能なすべての注釈プロセッサを検索します。検索パスは \f3\-processorpath\fP オプションを使って指定できます。検索パスを指定しなかった場合は、ユーザークラスパスが使用されます。プロセッサの検索は、検索パス上の \f2META\-INF/services/javax.annotation.processing.Processor\fP という名前のサービスプロバイダ構成ファイルに基づいて行われます。このようなファイルには、使用するすべての注釈プロセッサの名前を、1 行に 1 つずつ含めてください。また、別の方法として、\f3\-processor\fP オプションを使ってプロセッサを明示的に指定することもできます。 -.LP -.LP -コンパイラは、コマンド行のソースファイルやクラスを走査することで、どのような注釈が存在しているかを確認し終わると、プロセッサに対して問い合わせを行い、それらのプロセッサがどの注釈を処理できるのかを確認します。一致するものが見つかった場合、そのプロセッサが呼び出されます。各プロセッサは、自身が処理する注釈を「要求」できます。その場合、それらの注釈に対する別のプロセッサを見つける試みは行われません。すべての注釈が要求されてしまうと、コンパイラはそれ以上プロセッサの検索を行いません。 -.LP -.LP -いずれかのプロセッサによって新しいソースファイルが生成されると、注釈処理の 2 回目のラウンドが開始されます。新しく生成されたすべてのソースファイルが走査され、前回と同様に注釈が処理されます。以前のラウンドで呼び出されたプロセッサはすべて、後続のどのラウンドでも呼び出されます。これが、新しいソースファイルが生成されなくなるまで続きます。 -.LP -.LP -あるラウンドで新しいソースファイルが生成されなかった場合、注釈プロセッサがあと 1 回だけ呼び出され、必要な処理を実行する機会が与えられます。最後に、\f3\-proc:only\fP オプションが使用されないかぎり、コンパイラは、元のソースファイルと生成されたすべてのソースファイルをコンパイルします。 -.LP -.SS -暗黙的にロードされたソースファイル -.LP -.LP -コンパイラは、一連のソースファイルをコンパイルする際に、別のソースファイルを暗黙的にロードすることが必要な場合があります (「型の検索」を参照)。そのようなファイルは、現時点では注釈処理の対象になりません。デフォルトでは、注釈処理が実行され、かつ暗黙的にロードされたソースファイルが 1 つでもコンパイルされた場合にコンパイラは警告を発行します。この警告を抑制する方法については、\-implicit オプションを参照してください。 -.LP -.SH "型の検索" -.LP -.LP -ソースファイルをコンパイルする場合、コマンド行で指定したソースファイルに型の定義が見つからないとき、コンパイラは通常、その型に関する情報を必要とします。コンパイラは、ソースファイルで使われているクラスまたはインタフェース、拡張されているクラスまたはインタフェース、あるいは実装されているクラスまたはインタフェースすべてについて、型の情報を必要とします。これには、ソースファイルで明示的には言及されていなくても、継承を通じて情報を提供するクラスとインタフェースも含まれます。 -.LP -.LP -たとえば、\f3java.applet.Applet\fP をサブクラスにした場合、\f3アプレットの\fP祖先のクラス(\f3java.awt.Panel\fP、\f3java.awt.Container\fP、\f3java.awt.Component\fP、\f3java.lang.Object\fP)を使用していることになります。 -.LP -.LP -コンパイラは、型の情報が必要になると、その型を定義しているソースファイルまたはクラスファイルを探します。まず、ブートストラップクラスと拡張機能クラスを検索し、続いてユーザークラスパス (デフォルトではカレントディレクトリ) を検索します。ユーザークラスパスは、\f3CLASSPATH\fP 環境変数を設定して定義するか、または \f3\-classpath\fP コマンド行オプションを使って設定します。詳細は、「クラスパスの設定」を参照してください。 -.LP -.LP -\-sourcepath オプションが指定されている場合、コンパイラは、指定されたパスからソースファイルを検索します。それ以外の場合は、ユーザークラスパスからクラスファイルとソースファイルの両方を検索します。 -.LP -.LP -\f3\-bootclasspath\fP オプションと \f3\-extdirs\fP オプションを使うと、別のブートストラップクラスや拡張機能クラスを指定できます。このあとの「クロスコンパイルオプション」を参照してください。 -.LP -.LP -型の検索に成功したときに得られる結果は、クラスファイル、ソースファイル、またはその両方である場合があります。両方が見つかった場合、そのどちらを使用すべきかを \-Xprefer オプションでコンパイラに指示できます。\f3newer\fP が指定された場合、コンパイラは 2 つのファイルの新しい方を使用します。\f3source\fP が指定された場合、コンパイラはソースファイルを使用します。デフォルトは \f3newer\fP です。 -.LP -.LP -型の検索自体によって、または \f3\-Xprefer\fP が設定された結果として必要な型のソースファイルが見つかった場合、コンパイラはそのソースファイルを読み取り、必要な情報を取得します。さらに、コンパイラはデフォルトで、そのソースファイルのコンパイルも行います。\-implicit オプションを使えばその動作を指定できます。\f3none\fP を指定した場合、そのソースファイルのクラスファイルは生成されません。\f3class\fP を指定した場合、そのソースファイルのクラスファイルが生成されます。 -.LP -.LP -コンパイラは、注釈処理の完了後に、ある型情報の必要性を認識しない場合があります。その型情報があるソースファイル内に見つかり、かつ \f3\-implicit\fP オプションが指定されていない場合は、そのファイルが注釈処理の対象とならずにコンパイルされることを、コンパイラがユーザーに警告します。この警告を無効にするには、(そのファイルが注釈処理の対象となるように) そのファイルをコマンド行に指定するか、あるいはそのようなソースファイルに対してクラスファイルを生成すべきかどうかを \f3\-implicit\fP オプションを使って指定します。 -.LP -.SH "プログラマティックインタフェース" -.LP -.LP -\f3javac\fP は、 \f2javax.tools\fP パッケージ内のクラスとインタフェースによって定義される新しい Java Compiler API をサポートします。 -.LP -.SS -例 -.LP -.LP -コマンド行から指定された引数を使ってコンパイルを実行するには、次のようなコードを使用します。 -.LP -.nf -\f3 -.fl -JavaCompiler javac = ToolProvider.getSystemJavaCompiler(); -.fl -int rc = javac.run(null, null, null, args); -.fl -\fP -.fi - -.LP -.LP -この場合、標準出力ストリームにすべての診断メッセージが書き出され、コマンド行から呼び出された \f3javac\fP が返すのと同じ終了コードが返されます。 -.LP -.LP -\f2javax.tools.JavaCompiler\fP インタフェース上のほかのメソッドを使えば、診断メッセージの処理やファイルの読み取り元/書き込み先の制御などを行えます。 -.LP -.SS -旧式のインタフェース -.LP -.LP -\f3注:\fP この API は、下位互換性を確保するためだけに残されています。新しいコードでは、必ず前述の Java Compiler API を使用してください。 -.LP -.LP -\f2com.sun.tools.javac.Main\fP クラスには、プログラム内からコンパイラを呼び出すための static メソッドが 2 つ用意されています。それらを次に示します。 -.LP -.nf -\f3 -.fl -public static int compile(String[] args); -.fl -public static int compile(String[] args, PrintWriter out); -.fl -\fP -.fi - -.LP -.LP -\f2args\fP パラメータは、javac プログラムに通常渡される任意のコマンド行引数を表しています。その概要については、前出の「形式」節を参照してください。 -.LP -.LP -\f2out\fP パラメータは、コンパイラの診断メッセージの出力先を示します。 -.LP -.LP -戻り値は、\f3javac\fP の終了値と同じです。 -.LP -.LP -名前が \f2com.sun.tools.javac\fP で始まるパッケージ (非公式には \f2com.sun.tools.javac\fP のサブパッケージとして知られる) に含まれるその他のクラスやメソッドは、どれも完全に内部用であり、いつでも変更される可能性があります。 -.LP -.SH "例" -.LP -.SS -簡単なプログラムのコンパイル -.LP -.LP -\f2Hello.java\fP というソースファイルで、\f3greetings.Hello\fP という名前のクラスを定義しているとします。 \f2greetings\fP ディレクトリは、ソースファイルとクラスファイルの両方があるパッケージディレクトリで、現在のディレクトリのすぐ下にあります。このため、この例では、デフォルトのユーザークラスパスを使用できます。また、\f3\-d\fP を使って別の出力先ディレクトリを指定する必要もありません。 -.LP -.nf -\f3 -.fl -% \fP\f3ls\fP -.fl -greetings/ -.fl -% \f3ls greetings\fP -.fl -Hello.java -.fl -% \f3cat greetings/Hello.java\fP -.fl -package greetings; -.fl - -.fl -public class Hello { -.fl - public static void main(String[] args) { -.fl - for (int i=0; i < args.length; i++) { -.fl - System.out.println("Hello " + args[i]); -.fl - } -.fl - } -.fl -} -.fl -% \f3javac greetings/Hello.java\fP -.fl -% \f3ls greetings\fP -.fl -Hello.class Hello.java -.fl -% \f3java greetings.Hello World Universe Everyone\fP -.fl -Hello World -.fl -Hello Universe -.fl -Hello Everyone -.fl -.fi - -.LP -.SS -複数のソースファイルのコンパイル -.LP -.LP -次の例では、パッケージ \f2greetings\fP 内のすべてのソースファイルをコンパイルします。 -.LP -.nf -\f3 -.fl -% \fP\f3ls\fP -.fl -greetings/ -.fl -% \f3ls greetings\fP -.fl -Aloha.java GutenTag.java Hello.java Hi.java -.fl -% \f3javac greetings/*.java\fP -.fl -% \f3ls greetings\fP -.fl -Aloha.class GutenTag.class Hello.class Hi.class -.fl -Aloha.java GutenTag.java Hello.java Hi.java -.fl -.fi - -.LP -.SS -ユーザークラスパスの指定 -.LP -.LP -上の例のソースファイルのうち 1 つを変更し、変更後のファイルを再コンパイルするとします。 -.LP -.nf -\f3 -.fl -% \fP\f3pwd\fP -.fl -/examples -.fl -% \f3javac greetings/Hi.java\fP -.fl -.fi - -.LP -.LP -\f2greetings.Hi\fP は、 \f2greetings\fP パッケージ内のほかのクラスを参照しているため、コンパイラはこれらのクラスを探す必要があります。上の例では、デフォルトのユーザークラスパスが、パッケージディレクトリを含むディレクトリと同じであるため、コンパイルは正常に実行されます。ただし、現在どのディレクトリにいるかに関係なく、このファイルを再コンパイルする場合は、ユーザークラスパスに \f2/examples\fP を追加する必要があります。ユーザークラスパスにエントリを追加するには、\f3CLASSPATH\fP を設定する方法もありますが、ここでは \f3\-classpath\fP オプションを使うことにします。 -.LP -.nf -\f3 -.fl -% \fP\f3javac \-classpath /examples /examples/greetings/Hi.java\fP -.fl -.fi - -.LP -.LP -再度 \f2greetings.Hi\fP を変更してバナーユーティリティーを使うようにした場合は、このバナーユーティリティーもユーザークラスパスを通じてアクセスできるようになっている必要があります。 -.LP -.nf -\f3 -.fl -% \fP\f3javac \-classpath /examples:/lib/Banners.jar \\ -.fl - /examples/greetings/Hi.java\fP -.fl -.fi - -.LP -.LP -\f2greetings\fP 内のクラスを実行するには、 \f2greetings\fP と、それが使うクラスの両方にアクセスできる必要があります。 -.LP -.nf -\f3 -.fl -% \fP\f3java \-classpath /examples:/lib/Banners.jar greetings.Hi\fP -.fl -.fi - -.LP -.SS -ソースファイルとクラスファイルの分離 -.LP -.LP -特に大規模プロジェクトの場合は、ソースファイルとクラスファイルを別々のディレクトリに置くと便利なことがあります。クラスファイルの出力先を別に指定するには、\f3\-d\fP を使います。ソースファイルはユーザークラスパスにはないので、\f3\-sourcepath\fP を使って、コンパイラがソースファイルを見つけることができるようにします。 -.LP -.nf -\f3 -.fl -% \fP\f3ls\fP -.fl -classes/ lib/ src/ -.fl -% \f3ls src\fP -.fl -farewells/ -.fl -% \f3ls src/farewells\fP -.fl -Base.java GoodBye.java -.fl -% \f3ls lib\fP -.fl -Banners.jar -.fl -% \f3ls classes\fP -.fl -% \f3javac \-sourcepath src \-classpath classes:lib/Banners.jar \\ -.fl - src/farewells/GoodBye.java \-d classes\fP -.fl -% \f3ls classes\fP -.fl -farewells/ -.fl -% \f3ls classes/farewells\fP -.fl -Base.class GoodBye.class -.fl -.fi - -.LP -.LP -\f3注:\fP コマンド行では \f2src/farewells/Base.java\fP を指定していませんが、このファイルもコンパイラによってコンパイルされています。自動コンパイルを監視するには、\f3\-verbose\fP オプションを使います。 -.LP -.SS -クロスコンパイルの例 -.LP -.LP -ここでは、\f3javac\fP を使って、1.6 VM 上で実行するコードをコンパイルします。 -.LP -.nf -\f3 -.fl -% \fP\f3javac \-source 1.6 \-target 1.6 \-bootclasspath jdk1.6.0/lib/rt.jar \\ -.fl - \-extdirs "" OldCode.java\fP -.fl -.fi - -.LP -.LP -\f2\-source 1.6\fP オプションにより、 \f2OldCode.java\fP のコンパイルにはバージョン 1.6 (または 6) の Java プログラミング言語が使用されます。\f3\-target 1.6\fP オプションにより、1.6 VM と互換性のあるクラスファイルが生成されます。ほとんどの場合、\f3\-target\fP オプションの値は \f3\-source\fP オプションの値になります。この例では、\f3\-target\fP オプションを省略できます。 -.LP -.LP -\f3\-bootclasspath\fP オプションを使用して、適切なバージョンのブートストラップクラス ( \f2rt.jar\fP ライブラリ) を指定する必要があります。指定しない場合は、コンパイラによって次の警告が生成されます。 -.LP -.nf -\f3 -.fl -% \fP\f3javac \-source 1.6 OldCode.java\fP -.fl -warning: [options] bootstrap class path not set in conjunction with \-source 1.6 -.fl -.fi - -.LP -.LP -適切なバージョンのブートストラップクラスを指定しない場合、コンパイラは古い言語仕様 (この例では、バージョン 1.6 の Java プログラミング言語) を新しいブートストラップクラスと組み合わせて使用します。その結果、存在しないメソッドへの参照が含まれていることがあるため、クラスファイルが古いプラットフォーム (この場合は Java SE 6) で動作しない可能性があります。 -.LP -.SH "関連項目" -.LP -.RS 3 -.TP 2 -o -.na -\f2「The javac Guide」\fP @ -.fi -http://java.sun.com/javase/6/docs/technotes/guides/javac/index.html -.TP 2 -o -「java(1) \- Java アプリケーション起動ツール」 -.TP 2 -o -「jdb(1) \- Java デバッガ」 -.TP 2 -o -「javah(1) \- C ヘッダーとスタブファイルジェネレータ」 -.TP 2 -o -「javap(1) \- クラスファイル逆アセンブラ」 -.TP 2 -o -「javadoc(1) \- Java API ドキュメントジェネレータ」 -.TP 2 -o -「jar(1) \- JAR アーカイブツール」 -.TP 2 -o -.na -\f2「Java 拡張機能フレームワーク」\fP @ -.fi -http://java.sun.com/javase/6/docs/technotes/guides/extensions/index.html -.RE - -.LP +@interface Anno { } +@Anno +class AnnosWithoutProcessors { } +.fi +.if n \{\ +.RE +.\} +次のコマンドは、注釈プロセッサ\fIAnnoProc\fRをコンパイルし、この注釈プロセッサをソース・ファイル\fIAnnosWithoutProcessors\&.java\fRに対して実行します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +javac AnnoProc\&.java +javac \-cp \&. \-Xlint:processing \-processor AnnoProc \-proc:only AnnosWithoutProcessors\&.java +.fi +.if n \{\ +.RE +.\} +コンパイラがソース・ファイル\fIAnnosWithoutProcessors\&.java\fRに対して注釈プロセッサを実行すると、次の警告が生成されます。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +warning: [processing] No processor claimed any of these annotations: Anno + +.fi +.if n \{\ +.RE +.\} +この問題を解決するために、クラス\fIAnnosWithoutProcessors\fRで定義および使用される注釈の名前を、\fIAnno\fRから\fINotAnno\fRに変更できます。 +.RE +.PP +rawtypes +.RS 4 +raw型に対する未検査操作について警告します。次の文では、\fIrawtypes\fR警告が生成されます。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +void countElements(List l) { \&.\&.\&. } +.fi +.if n \{\ +.RE +.\} +次の例では、\fIrawtypes\fR警告は生成されません。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +void countElements(List<?> l) { \&.\&.\&. } +.fi +.if n \{\ +.RE +.\} +\fIList\fRはraw型です。ただし、\fIList<?>\fRは、アンバウンド形式のワイルドカードのパラメータ化された型です。\fIList\fRはパラメータ化されたインタフェースであるため、常にその型引数を指定します。この例では、\fIList\fRの仮引数はアンバウンド形式のワイルドカード(\fI?\fR)を使用してその仮型パラメータとして指定されます。つまり、\fIcountElements\fRメソッドは\fIList\fRインタフェースのどのインスタンス化も受け付けることができます。 +.RE +.PP +Serial +.RS 4 +直列化可能クラスに\fIserialVersionUID\fR定義がないことを警告します。たとえば、次のようになります。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +public class PersistentTime implements Serializable +{ + private Date time; + + public PersistentTime() { + time = Calendar\&.getInstance()\&.getTime(); + } + + public Date getTime() { + return time; + } +} +.fi +.if n \{\ +.RE +.\} +コンパイラは次の警告を生成します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +warning: [serial] serializable class PersistentTime has no definition of +serialVersionUID +.fi +.if n \{\ +.RE +.\} +直列化可能クラスが\fIserialVersionUID\fRという名前のフィールドを明示的に宣言しない場合、直列化ランタイム環境では、「Javaオブジェクト直列化仕様」で説明されているように、クラスの様々な側面に基づいて、クラスの\fIserialVersionUID\fRのデフォルト値を計算します。ただし、すべての直列化可能クラスが\fIserialVersionUID\fR値を明示的に宣言することを強くお薦めします。 これは、\fIserialVersionUID\fR値を計算するデフォルトのプロセスが、コンパイラの実装によって異なる可能性のあるクラスの詳細にきわめて影響を受けやすく、その結果、直列化復元中に予期しない\fIInvalidClassExceptions\fRが発生する可能性があるためです。Javaコンパイラの実装が異なっても\fIserialVersionUID\fR値の一貫性を確保にするには、直列化可能クラスが\fIserialVersionUID\fR値を明示的に宣言する必要があります。 +.RE +.PP +static +.RS 4 +staticの使用に関する問題について警告します。たとえば、次のようになります。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +class XLintStatic { + static void m1() { } + void m2() { this\&.m1(); } +} +.fi +.if n \{\ +.RE +.\} +コンパイラは次の警告を生成します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +warning: [static] static method should be qualified by type name, +XLintStatic, instead of by an expression +.fi +.if n \{\ +.RE +.\} +この問題を解決するために、次のように\fIstatic\fRメソッド\fIm1\fRを呼び出すことができます。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +XLintStatic\&.m1(); +.fi +.if n \{\ +.RE +.\} +あるいは、\fIstatic\fRキーワードをメソッド\fIm1\fRの宣言から削除することもできます。 +.RE +.PP +try +.RS 4 +try\-with\-resources文を含む、\fItry\fRブロックの使用に関する問題について警告します。たとえば、\fItry\fRブロックで宣言されたリソース\fIac\fRが使用されないために、次の文に対して警告が生成されます。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +try ( AutoCloseable ac = getResource() ) { // do nothing} +.fi +.if n \{\ +.RE +.\} +.RE +.PP +unchecked +.RS 4 +Java言語仕様で指定されている未検査変換警告の詳細を示します。たとえば、次のようになります。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +List l = new ArrayList<Number>(); +List<String> ls = l; // unchecked warning +.fi +.if n \{\ +.RE +.\} +型の消去中に、型\fIArrayList<Number>\fRおよび\fIList<String>\fRは、それぞれ\fIArrayList\fRおよび\fIList\fRになります。 +.sp +\fIls\fRコマンドには、パラメータ化された型\fIList<String>\fRが指定されています。\fIl\fRによって参照される\fIList\fRが\fIls\fRに割り当てられた場合、コンパイラは未検査警告を生成します。コンパイル時に、コンパイラおよびJVMは、\fIl\fRが\fIList<String>\fR型を参照するかどうかを判別できません。この場合、\fIl\fRは、\fIList<String>\fR型を参照しません。その結果、ヒープ汚染が発生します。 +.sp +ヒープ汚染状態が発生するのは、\fIList\fRオブジェクト\fIl\fR +(そのstatic型は\fIList<Number>\fR)が別の\fIList\fRオブジェクト\fIls\fR +(異なるstatic型\fIList<String>\fRを持つ)に代入される場合です。しかし、コンパイラではこの代入をいまだに許可しています。総称をサポートしないJava SEのリリースとの下位互換性を確保するために、この代入を許可する必要があります。型消去により、\fIList<Number>\fRおよび\fIList<String>\fRは、両方とも\fIList\fRになります。その結果、コンパイラはオブジェクト\fIl\fR +(\fIList\fRというraw型を持つ)をオブジェクト\fIls\fRに代入することを許可します。 +.RE +.PP +varargs +.RS 4 +可変引数(\fIvarargs\fR)メソッド、特に非具象化可能引数を含むものの使用が安全でないことを警告します。たとえば、次のようになります。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +public class ArrayBuilder { + public static <T> void addToList (List<T> listArg, T\&.\&.\&. elements) { + for (T x : elements) { + listArg\&.add(x); + } + } +} +.fi +.if n \{\ +.RE +.\} +\fB注意:\fR +非具象化可能型は、型情報が実行時に完全に使用不可能な型です。 +.sp +コンパイラは、メソッド\fIArrayBuilder\&.addToList\fRの定義に関する次の警告を生成します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +warning: [varargs] Possible heap pollution from parameterized vararg type T +.fi +.if n \{\ +.RE +.\} +コンパイラは、varargsメソッドを検出すると、\fIvarargs\fRの仮パラメータを配列に変換します。しかし、Javaプログラミング言語では、パラメータ化された型の配列の作成を許可していません。メソッド\fIArrayBuilder\&.addToList\fRでは、コンパイラは\fIvarargs\fRの仮パラメータ\fIT\&.\&.\&.\fR要素を仮パラメータ\fIT[]\fR要素(配列)に変換します。しかし、型消去により、コンパイラは\fIvarargs\fRの仮パラメータを\fIObject[]\fR要素に変換します。その結果、ヒープ汚染が発生する可能性があります。 +.RE +.SH "コマンドライン引数ファイル" +.PP +\fIjavac\fRコマンドを短くしたり簡潔にしたりするために、\fIjavac\fRコマンドに対する引数(\fI\-J\fRオプションを除く)を含む1つ以上のファイルを指定することができます。これにより、どのオペレーティング・システム上でも、任意の長さの\fIjavac\fRコマンドを作成できます。 +.PP +引数ファイルには、\fIjavac\fRのオプションとソース・ファイル名を自由に組み合せて記述できます。ファイル内の引数は、空白または改行文字で区切ることができます。ファイル名に埋め込まれた空白がある場合、ファイル名全体を二重引用符で囲みます。 +.PP +引数ファイル内のファイル名は、引数ファイルの位置ではなく、現在のディレクトリに相対的となります。これらのリストでは、ワイルドカード(*)は使用できません(たとえば、\fI*\&.java\fRとは指定できません)。アットマーク(@)を使用したファイルの再帰的な解釈はサポートされていません。また、\fI\-J\fRオプションもサポートされていません。このオプションは起動ツールに渡されますが、起動ツールでは引数ファイルをサポートしていないからです。 +.PP +\fIjavac\fRコマンドを実行するときに、各引数ファイルのパスと名前の先頭にアットマーク(@)文字を付けて渡します。\fIjavac\fRコマンドは、アットマーク(@)で始まる引数を見つけると、そのファイルの内容を展開して引数リストに挿入します。 +.PP +\fBExample 1\fR, 単一の引数ファイル +.RS 4 +\fIargfile\fRという名前の単一の引数ファイルを使用して、すべての\fIjavac\fR引数を格納する場合は、次のように指定します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +javac @argfile +.fi +.if n \{\ +.RE +.\} +この引数ファイルには、例2で示されている両方のファイルの内容を入れることができます。 +.RE +.PP +\fBExample 2\fR, 2つの引数ファイル +.RS 4 +\fIjavac\fRオプション用とソース・ファイル名用に、2つの引数ファイルを作成できます。次のリストには、行の継続文字はありません。 +.sp +次を含むoptionsという名前のファイルを作成します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-d classes +\-g +\-sourcepath /java/pubs/ws/1\&.3/src/share/classes +.fi +.if n \{\ +.RE +.\} +.sp +.if n \{\ +.RS 4 +.\} +.nf +.fi +.if n \{\ +.RE +.\} +次を含むclassesという名前のファイルを作成します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +MyClass1\&.java +MyClass2\&.java +MyClass3\&.java +.fi +.if n \{\ +.RE +.\} +それから、次のように\fIjavac\fRコマンドを実行します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +javac @options @classes +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\fBExample 3\fR, パスを使用した引数ファイル +.RS 4 +引数ファイルはパスを指定できますが、ファイル内のすべてのファイル名は、(\fIpath1\fRや\fIpath2\fRではなく)次のように現在の作業ディレクトリに相対的となります。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +javac @path1/options @path2/classes +.fi +.if n \{\ +.RE +.\} +.RE +.SH "注釈処理" +.PP +\fIjavac\fRコマンドが注釈処理を直接サポートしているため、独立した注釈処理コマンドである\fIapt\fRを使用する必要がなくなりました。 +.PP +注釈プロセッサのAPIは、\fIjavax\&.annotation\&.processing\fRおよび\fIjavax\&.lang\&.model\fRパッケージとそのサブパッケージ内に定義されています。 +.SS "注釈処理を行う方法" +.PP +\fI\-proc:none\fRオプションによって注釈処理が無効化されない限り、コンパイラは使用可能なすべての注釈プロセッサを検索します。検索パスは、\fI\-processorpath\fRオプションを使用して指定できます。パスを指定しない場合、ユーザー・クラス・パスが使用されます。プロセッサの検索は、検索パス上の\fIMETA\-INF/services/javax\&.annotation\&.processing\fR\&.Processorという名前のサービス・プロバイダ構成ファイルに基づいて行われます。このようなファイルには、使用するすべての注釈プロセッサの名前を、1行に1つずつ含めてください。また、別の方法として、\fI\-processor\fRオプションを使用してプロセッサを明示的に指定することもできます。 +.PP +コンパイラは、コマンドラインのソース・ファイルやクラスを走査することで、どのような注釈が存在しているかを確認し終わると、プロセッサに対して問合せを行い、それらのプロセッサがどの注釈を処理できるのかを確認します。一致するものが見つかった場合、そのプロセッサが呼び出されます。各プロセッサは、自身が処理する注釈を要求できます。その場合、それらの注釈に対する別のプロセッサを見つける試みは行われません。すべての注釈が要求されると、コンパイラはそれ以上プロセッサの検索を行いません。 +.PP +いずれかのプロセッサによって新しいソース・ファイルが生成されると、注釈処理の2回目のラウンドが開始されます。新しく生成されたすべてのソース・ファイルがスキャンされ、前回と同様に注釈が処理されます。以前のラウンドで呼び出されたプロセッサはすべて、後続のどのラウンドでも呼び出されます。これが、新しいソース・ファイルが生成されなくなるまで続きます。 +.PP +あるラウンドで新しいソース・ファイルが生成されなかった場合、注釈プロセッサがあと1回のみ呼び出され、残りの処理を実行する機会が与えられます。最後に、\fI\-proc:only\fRオプションが使用されないかぎり、コンパイラは、元のソース・ファイルと生成されたすべてのソース・ファイルをコンパイルします。 +.SS "暗黙的にロードされたソース・ファイル" +.PP +コンパイラは、一連のソース・ファイルをコンパイルする際に、別のソース・ファイルを暗黙的にロードすることが必要な場合があります。型の検索を参照してください。そのようなファイルは、現時点では注釈処理の対象になりません。デフォルトでは、注釈処理が実行され、かつ暗黙的にロードされた任意のソース・ファイルがコンパイルされた場合、コンパイラは警告を発行します。\fI\-implicit\fRオプションでは、警告を抑制する方法が提供されます。 +.SH "型の検索" +.PP +ソース・ファイルをコンパイルするために、コンパイラは通常、型に関する情報を必要としますが、その型の定義はコマンドラインで指定したソース・ファイルにありません。コンパイラは、ソース・ファイルで使用されているクラスまたはインタフェース、拡張されているクラスまたはインタフェース、あるいは実装されているクラスまたはインタフェースすべてについて、型の情報を必要とします。これには、ソース・ファイルで明示的には言及されていなくても、継承を通じて情報を提供するクラスとインタフェースも含まれます。 +.PP +たとえば、サブクラス\fIjava\&.applet\&.Applet\fRを作成すると、\fIアプレット\fRの祖先のクラス(\fIjava\&.awt\&.Panel\fR、\fIjava\&.awt\&.Container\fR、\fIjava\&.awt\&.Component\fRおよび\fIjava\&.lang\&.Object\fR)を使用していることにもなります。 +.PP +コンパイラは、型の情報が必要になると、その型を定義しているソース・ファイルまたはクラス・ファイルを検索します。まず、ブートストラップ・クラスと拡張機能クラスを検索し、続いてユーザー・クラス・パス(デフォルトでは現在のディレクトリ)を検索します。ユーザー・クラス・パスは、\fICLASSPATH\fR環境変数を設定して定義するか、または\fI\-classpath\fRオプションを使用して定義します。 +.PP +\fI\-sourcepath\fRオプションが設定されている場合、コンパイラは、指定されたパスからソース・ファイルを検索します。それ以外の場合、コンパイラは、ユーザー・クラス・パスからクラス・ファイルとソース・ファイルの両方を検索します。 +.PP +\fI\-bootclasspath\fRオプションおよび\fI\-extdirs\fRオプションを使用して、別のブートストラップ・クラスや拡張機能クラスを指定できます。クロスコンパイル・オプションを参照してください。 +.PP +型の検索に成功したときに得られる結果は、クラス・ファイル、ソース・ファイル、またはその両方である場合があります。両方が見つかった場合、そのどちらを使用するかを\fI\-Xprefer\fRオプションでコンパイラに指示できます。\fInewer\fRが指定された場合、コンパイラは2つのファイルのうち新しい方を使用します。\fIsource\fRが指定された場合、コンパイラはソース・ファイルを使用します。デフォルトは\fInewer\fRです。 +.PP +型の検索自体によって、または\fI\-Xprefer\fRオプションが設定された結果として必要な型のソース・ファイルが見つかった場合、コンパイラはそのソース・ファイルを読み取り、必要な情報を取得します。デフォルトでは、コンパイラはソース・ファイルのコンパイルも行います。\fI\-implicit\fRオプションを使用してその動作を指定できます。\fInone\fRが指定された場合、ソース・ファイルに対してクラス・ファイルは生成されません。\fIclass\fRが指定された場合、ソース・ファイルに対してクラス・ファイルが生成されます。 +.PP +コンパイラは、注釈処理が完了するまで、ある型情報の必要性を認識しない場合があります。型情報がソース・ファイル内に見つかり、かつ\fI\-implicit\fRオプションが指定されていない場合、コンパイラによって、そのファイルが注釈処理の対象とならずにコンパイルされることが警告されます。この警告を無効にするには、(そのファイルが注釈処理の対象となるように)そのファイルをコマンドラインに指定するか、あるいはそのようなソース・ファイルに対してクラス・ファイルを生成する必要があるかどうかを\fI\-implicit\fRオプションを使用して指定します。 +.SH "プログラマティック・インタフェース" +.PP +\fIjavac\fRコマンドは、\fIjavax\&.tools\fRパッケージ内のクラスとインタフェースによって定義される新しいJava Compiler APIをサポートします。 +.SS "例" +.PP +コマンドライン引数を指定するようにコンパイルするには、次の構文を使用します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +JavaCompiler javac = ToolProvider\&.getSystemJavaCompiler(); +JavaCompiler javac = ToolProvider\&.getSystemJavaCompiler(); +.fi +.if n \{\ +.RE +.\} +.PP +例では、診断を標準出力ストリームに書き込み、コマンドラインからの呼出し時に\fIjavac\fRが指定する終了コードを返します。 +.PP +\fIjavax\&.tools\&.JavaCompiler\fRインタフェースの他のメソッドを使用すると、診断の処理やファイルの読取り元/書込み先の制御などを行うことができます。 +.SS "旧式のインタフェース" +.PP +\fB注意:\fR +このAPIは、下位互換性のためにのみ保持されています。すべての新しいコードは、新しいJava Compiler APIを使用する必要があります。 +.PP +次のように、\fIcom\&.sun\&.tools\&.javac\&.Main\fRクラスには、プログラムからコンパイラを呼び出すためのstaticメソッドが2つ用意されています。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +public static int compile(String[] args); +public static int compile(String[] args, PrintWriter out); +.fi +.if n \{\ +.RE +.\} +.PP +\fIargs\fRパラメータは、通常コンパイラに渡される任意のコマンドライン引数を表しています。 +.PP +\fIout\fRパラメータは、コンパイラの診断出力の宛先を示します。 +.PP +\fIreturn\fR値は、\fIjavac\fRの\fIexit\fR値と同じです。 +.PP +\fB注意:\fR +名前が\fIcom\&.sun\&.tools\&.javac\fRで始まるパッケージ(\fIcom\&.sun\&.tools\&.javac\fRのサブパッケージ)で検出される他のすべてのクラスおよびメソッドは、完全に内部用であり、いつでも変更される可能性があります。 +.SH "例" +.PP +\fBExample 1\fR, 簡単なプログラムのコンパイル +.RS 4 +この例では、greetingsディレクトリで\fIHello\&.java\fRソース・ファイルをコンパイルする方法を示しています。\fIHello\&.java\fRで定義されたクラスは、\fIgreetings\&.Hello\fRと呼ばれます。greetingsディレクトリは、ソース・ファイルとクラス・ファイルの両方があるパッケージ・ディレクトリで、現在のディレクトリのすぐ下にあります。これにより、デフォルトのユーザー・クラス・パスを使用できるようになります。また、\fI\-d\fRオプションを使用して別の出力先ディレクトリを指定する必要もありません。 +.sp +\fIHello\&.java\fR内のソース・コードは次のとおりです。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +package greetings; + +public class Hello { + public static void main(String[] args) { + for (int i=0; i < args\&.length; i++) { + System\&.out\&.println("Hello " + args[i]); + } + } +} +.fi +.if n \{\ +.RE +.\} +greetings\&.Helloのコンパイル: +.sp +.if n \{\ +.RS 4 +.\} +.nf +javac greetings/Hello\&.java +.fi +.if n \{\ +.RE +.\} +\fIgreetings\&.Hello\fRの実行: +.sp +.if n \{\ +.RS 4 +.\} +.nf +java greetings\&.Hello World Universe Everyone +Hello World +Hello Universe +Hello Everyone +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\fBExample 2\fR, 複数のソース・ファイルのコンパイル +.RS 4 +この例では、\fIgreetings\fRパッケージのソース・ファイル\fIAloha\&.java\fR、\fIGutenTag\&.java\fR、\fIHello\&.java\fRおよび\fIHi\&.java\fRをコンパイルします。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +% javac greetings/*\&.java +% ls greetings +Aloha\&.class GutenTag\&.class Hello\&.class Hi\&.class +Aloha\&.java GutenTag\&.java Hello\&.java Hi\&.java +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\fBExample 3\fR, ユーザー・クラス・パスの指定 +.RS 4 +前述の例のソース・ファイルのうち1つを変更した後に、そのファイルを再コンパイルします。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +pwd +/examples +javac greetings/Hi\&.java +.fi +.if n \{\ +.RE +.\} +\fIgreetings\&.Hi\fRは\fIgreetings\fRパッケージ内の他のクラスを参照しているため、コンパイラはこれらの他のクラスを探す必要があります。デフォルトのユーザー・クラス・パスはパッケージ・ディレクトリを含むディレクトリであるため、前述の例は動作します。現在のディレクトリを気にせずにこのファイルを再コンパイルする場合、\fICLASSPATH\fRを設定して、ユーザー・クラス・パスに例のディレクトリを追加します。この例では、\fI\-classpath\fRオプションを使用しています。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +javac \-classpath /examples /examples/greetings/Hi\&.java +.fi +.if n \{\ +.RE +.\} +\fIgreetings\&.Hi\fRを変更してバナー・ユーティリティを使用するようにした場合、 そのユーティリティもユーザー・クラス・パスを通じてアクセスできるようになっている必要があります。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +javac \-classpath /examples:/lib/Banners\&.jar \e + /examples/greetings/Hi\&.java +.fi +.if n \{\ +.RE +.\} +\fIgreetings\fRパッケージでクラスを実行するには、プログラムは\fIgreetings\fRパッケージ、および\fIgreetings\fRクラスが使用するクラスにアクセスする必要があります。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +java \-classpath /examples:/lib/Banners\&.jar greetings\&.Hi +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\fBExample 4\fR, ソース・ファイルとクラス・ファイルの分離 +.RS 4 +次の例では、\fIjavac\fRを使用して、JVM 1\&.6上で実行するコードをコンパイルします。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +javac \-source 1\&.6 \-target 1\&.6 \-bootclasspath jdk1\&.6\&.0/lib/rt\&.jar \e +\-extdirs "" OldCode\&.java +.fi +.if n \{\ +.RE +.\} +\fI\-source 1\&.6\fRオプションにより、\fIOldCode\&.java\fRのコンパイルにはリリース1\&.6(または6)のJavaプログラミング言語が使用されます。\fI\-target 1\&.6\fRオプションにより、JVM 1\&.6と互換性のあるクラス・ファイルが生成されます。ほとんどの場合、\fI\-target\fRオプションの値は\fI\-source\fRオプションの値になります。この例では、\fI\-target\fRオプションを省略できます。 +.sp +\fI\-bootclasspath\fRオプションを使用して、適切なバージョンのブートストラップ・クラス(\fIrt\&.jar\fRライブラリ)を指定する必要があります。指定しない場合は、コンパイラによって次の警告が生成されます。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +javac \-source 1\&.6 OldCode\&.java +warning: [options] bootstrap class path not set in conjunction with +\-source 1\&.6 +.fi +.if n \{\ +.RE +.\} +適切なバージョンのブートストラップ・クラスを指定しない場合、コンパイラは古い言語仕様(この例では、バージョン1\&.6のJavaプログラミング言語)を新しいブートストラップ・クラスと組み合せて使用します。その結果、存在しないメソッドへの参照が含まれていることがあるため、クラス・ファイルが古いプラットフォーム(この場合はJava SE 6)で動作しない可能性があります。 +.RE +.PP +\fBExample 5\fR, クロス・コンパイル +.RS 4 +この例では、\fIjavac\fRを使用して、JVM 1\&.6上で実行するコードをコンパイルします。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +javac \-source 1\&.6 \-target 1\&.6 \-bootclasspath jdk1\&.6\&.0/lib/rt\&.jar \e + \-extdirs "" OldCode\&.java +.fi +.if n \{\ +.RE +.\} +The\fI \-source 1\&.6\fRオプションにより、OldCode\&.javaのコンパイルにはリリース1\&.6(または6)のJavaプログラミング言語が使用されます。\fI\-target 1\&.6\fRオプションにより、JVM 1\&.6と互換性のあるクラス・ファイルが生成されます。ほとんどの場合、\fI\-target\fRの値は\fI\-source\fRの値になります。この例では、\fI\-target\fRオプションは省略されます。 +.sp +\fI\-bootclasspath\fRオプションを使用して、適切なバージョンのブートストラップ・クラス(\fIrt\&.jar\fRライブラリ)を指定する必要があります。指定しない場合は、コンパイラによって次の警告が生成されます。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +javac \-source 1\&.6 OldCode\&.java +warning: [options] bootstrap class path not set in conjunction with \-source 1\&.6 +.fi +.if n \{\ +.RE +.\} +適切なバージョンのブートストラップ・クラスを指定しない場合、コンパイラは古い言語仕様を新しいブートストラップ・クラスと組み合せて使用します。この組合せは、存在しないメソッドへの参照が含まれていることがあるため、クラス・ファイルが古いプラットフォーム(この場合はJava SE 6)で動作しない可能性があります。この例では、コンパイラはJavaプログラミング言語のリリース1\&.6を使用します。 +.RE +.SH "関連項目" +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +java(1) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +jdb(1) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +javah(1) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +javadoc(1) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +jar(1) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +jdb(1) +.RE +.br +'pl 8.5i +'bp diff --git a/jdk/src/solaris/doc/sun/man/man1/ja/javadoc.1 b/jdk/src/solaris/doc/sun/man/man1/ja/javadoc.1 index e6374a63c67..74cdf8f655b 100644 --- a/jdk/src/solaris/doc/sun/man/man1/ja/javadoc.1 +++ b/jdk/src/solaris/doc/sun/man/man1/ja/javadoc.1 @@ -1,4236 +1,3839 @@ -." 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 -." 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. -." -.TH javadoc 1 "07 May 2011" -.SH "名前" -javadoc \- Java API ドキュメントジェネレータ -.LP -Java ソースファイルから、API ドキュメントの HTML ページを生成します。このドキュメントで紹介されている Javadoc の例は、 Solaris を使用した場合のものです。 -.SH "形式" -.LP -\f4javadoc\fP\f2\ [\ \fP\f2options\fP\f2\ ]\ [\ packagenames\ ]\ [\ sourcefilenames\ ]\ [\ \-subpackages\fP\ \f2pkg1:pkg2:...\fP\f2\ ]\ [\ \fP\f2@argfiles\fP\f2\ ]\fP -.LP -引数を指定する順序は任意です。Javadoc ツールでの、処理対象の .java ファイルを決定する方法の詳細については、「ソースファイルの処理」\f2を参照\fPしてください。 -.RS 3 -.TP 3 -options -このドキュメントで説明されているコマンド行オプションです。Javadoc オプションの標準的な使用法については、「使用例」を参照してください。 -.TP 3 -packagenames -スペースで区切られた一連のパッケージ名です。たとえば、 \f2java.lang\ java.lang.reflect\ java.awt のように指定します\fP。ドキュメント化するパッケージを個別に指定する必要があります。ワイルドカードは使用不可です。再帰的処理のためには、\-subpackages を使用します。Javadoc ツールは、\f2\-sourcepath\fP を使用してこれらのパッケージ名を検索します。「1 つ以上のパッケージのドキュメント化」の例を参照してください。 -.TP 3 -sourcefilenames -スペースで区切られた一連のソースファイル名です。 各ファイルは、パスで始まります。アスタリスク (*) などのワイルドカードを含めることができます。Javadoc ツールが処理するのは、ファイル名が「.java」という拡張子で終わり、その拡張子を除いた名前が実際に有効なクラス名であるすべてのファイルです (Java 言語仕様を参照)。したがって、ハイフンを含む名前 ( \f2X\-Buffer\fP など) や、その他の無効な文字を含む名前を付けることによって、それらのファイルをドキュメント化の対象から除外できます。これは、テスト用のファイルや、テンプレートから生成されたファイルの場合に便利です。ソースファイル名の前に指定したパスによって、javadoc がそのファイルを検索する場所が決まります。Javadoc ツールは、これらのソースファイル名を検索するときには \f2\-sourcepath\fP を使用しません。相対パスは現在のディレクトリを起点とするため、 \f2Button.java\fP を渡すことは、 \f2./Button.java\fP を渡すことと同じです。ソースファイル名をフルパスで指定すると、 \f2/home/src/java/awt/Graphics*.java のようになります\fP。 「1 つ以上のクラスのドキュメント化」の例を参照してください。また、「パッケージとクラスのドキュメント化」の例のように、パッケージ名とソースファイル名を混在させることもできます。 -.TP 3 -\-subpackages pkg1:pkg2:... -ソースファイルから指定されたパッケージおよびそのサブパッケージ内に再帰的にドキュメントを生成します。パッケージ名またはソースファイル名を指定する必要はありません。 -.TP 3 -@argfiles -Javadoc オプション、パッケージ名、およびソースファイル名を任意の順序で並べたリストが含まれる 1 つ以上のファイルです。ワイルドカード (*) や \f2\-J\fP オプションは、このファイルの中では指定できません。 -.RE -.SH " 説明" -.LP -\f3Javadoc\fP ツールは、一連の Java ソースファイルにある宣言およびドキュメンテーションコメントを解析し、デフォルトでは public クラス、protected クラス、入れ子にされたクラス (匿名の内部クラスは除く)、インタフェース、コンストラクタ、メソッド、およびフィールドについて説明した一連の HTML ページを生成します。また、API (アプリケーションプログラミングインタフェース) ドキュメントの生成や、一連のソースファイルの実装ドキュメントの生成に使用できます。 -.LP -Javadoc ツールは、パッケージ全体、個々のソースファイル、またはその両方に対して実行できます。パッケージ全体のドキュメント化を行うには、\f2\-subpackages\fP を使用して最上位ディレクトリから下方に再帰的にたどるか、パッケージ名の明示的なリストを渡します。個々ソースファイルに対して javadoc を実行する場合は、一連のソース (.\f2.java\fP) ファイル名を渡します。具体的な例は、このドキュメントの最後に紹介します。次に、Javadoc によるソースファイルの処理について説明します。 -.SS -ソースファイルの処理 -.LP -Javadoc ツールは、末尾が「\f2.java\fP」のファイルを処理するだけでなく、「ソースファイル」で説明するその他のファイルも処理します。個々のソースファイル名を明示的に渡すことによって Javadoc ツールを実行する場合、どの \f2.java\fP ファイルを処理するかを正確に指定できます。ただし、多くの開発者はこの方法では作業しません。パッケージ名を渡すほうが簡単だからです。ソースファイル名を明示的に指定しなくても、Javadoc ツールは 3 つの方法で実行できます。その方法とは、(1) パッケージ名を渡す、(2) \f2\-subpackages\fP を使用する、(3) ソースファイル名でワイルドカードを使用する (\f2*.java\fP)、の 3 つです。これらの場合、Javadoc ツールが「\f2.java\fP」ファイルの処理を行うのは、そのファイルが次のすべての要件を満たす場合だけです。 -.RS 3 -.TP 2 -o -名前から接尾辞「\f2.java\fP」を取り除くと、実際に有効なクラス名になっている (Java 言語仕様の有効な文字を参照) -.TP 2 -o -ソースツリーのルートから相対的なディレクトリパスが、区切り文字をドットに変換すると、実際に有効なパッケージ名になっている -.TP 2 -o -パッケージ文には有効なパッケージ名が含まれる (前項目で指定) -.RE -.LP -\f3リンクの処理\fP \- Javadoc ツールは、処理の実行中に、その実行でドキュメント化されるパッケージ、クラス、およびメンバーの名前に対して、自動的に相互参照リンクを追加します。このようなリンクは、次のような場所に追加されます。 -.RS 3 -.TP 2 -o -宣言 (戻り値の型、引数の型、フィールドの型) -.TP 2 -o -\f2@see\fP タグから生成された [関連項目] セクション -.TP 2 -o -\f2{@link}\fP タグから生成されたインラインテキスト -.TP 2 -o -\f2@throws\fP タグから生成された例外の名前 -.TP 2 -o -インタフェースのメンバーに対する「定義」リンクと、クラスのメンバーに対する「オーバーライド」リンク -.TP 2 -o -パッケージ、クラス、およびメンバーを列挙している概要テーブル -.TP 2 -o -パッケージおよびクラスの継承ツリー -.TP 2 -o -索引 -.RE -.LP -コマンド行で指定しなかったクラスについての既存のテキスト (別に生成したテキスト) に対してハイパーリンクを追加するには、\f2\-link\fP および \f2\-linkoffline\fP オプションを利用できます。 -.LP -\f3その他の処理についての詳細\fP \- Javadoc ツールは、実行するたびに 1 つの完全なドキュメントを作成します。ドキュメントを追加生成することはできません。つまり、Javadoc ツールの以前の実行結果を修正したり、その内容を直接組み入れたりすることはできません。ただし、前述のように、以前の実行結果に対してリンクを追加することはできます。 -.LP -実装上の理由から、Javadoc ツールは、処理を実行するために java コンパイラを必要とし、java コンパイラに依存しています。Javadoc ツールは、 \f2javac\fP の一部を呼び出して宣言をコンパイルしますが、メンバーの実装は無視します。Javadoc ツールは、クラス階層を含むクラスの豊富な内部表現とクラスの「使用」関係を構築し、その情報から HTML を生成します。さらに、Javadoc ツールは、ソースコードのドキュメンテーションコメントから、ユーザーの提供したドキュメントも取得します。 -.LP -実際には、Javadoc ツールは、メソッド本体を持たない純粋なスタブファイルであるような \f2.java\fP ソースファイルでも動作します。したがって、API の作成時には、実装を記述する前の設計の早い段階で、ドキュメンテーションコメントを記述して javadoc ツールを実行できます。 -.LP -コンパイラに依存することによって、HTML 出力は、実際の実装に正確に対応します。実際の実装は、明示的なソースコードにではなく、暗黙のソースコードに依存する場合があります。たとえば、Javadoc ツールは、.class ファイルには存在するがソースコードには存在しないデフォルトコンストラクタ (Java 言語仕様を参照) \f2をドキュメント化\fP します。 -.LP -通常、Javadoc ツールでは、ソースファイルのコードが不完全またはエラーを含んでいる場合でもドキュメントを生成できます。このため、デバッグやトラブルシューティングを完了する前にドキュメントを生成できます。たとえば、Java 言語仕様によると、抽象メソッドを含むクラスは、それ自体抽象として宣言されなければなりません。このエラーを検出すると、javac コンパイラは停止しますが、Javadoc ツールは警告を出さずに処理を続行します。Javadoc ツールはドキュメンテーションコメントの基本的なチェックを行います。ドキュメンテーションコメントをより詳しくチェックする必要がある場合は、DocCheck ドックレットを使用してください。 -.LP -Javadoc ツールは、ドキュメントの内部構造を構築する際、参照クラスをすべてロードします。このため、Javadoc ツールは、ブートストラップクラス、拡張機能、またはユーザークラスにかかわらず、すべての参照クラスを検索できなければなりません。詳細は、 -.na -\f2「クラスの検索方法」\fP @ -.fi -http://java.sun.com/javase/6/docs/technotes/tools/findingclasses.htmlを参照してください。通常、作成するクラスは、拡張機能としてロードするか、Javadoc ツールのクラスパス内に置く必要があります。 -.SS -Javadoc のドックレット -.LP -Javadoc ツールの出力の内容と形式は、ドックレットを使ってカスタマイズできます。Javadoc ツールには、標準ドックレットと呼ばれるデフォルトの「組み込み」ドックレットがあります。標準ドックレットは、HTML 形式の API ドキュメントを生成します。標準ドックレットを修正またはサブクラス化することや、HTML、XML、MIF、RTF などの好みの出力形式を生成する独自のドックレットを記述することも可能です。ドックレットとその使用法については、次の項目を参照してください。 -.RS 3 -.TP 2 -o -.na -\f2Javadoc のドックレット\fP @ -.fi -http://java.sun.com/javase/6/docs/technotes/guides/javadoc/index.html -.TP 2 -o -\f2\-doclet\fP コマンド行オプション -.RE -.LP -\f2\-doclet\fP コマンド行オプションでカスタムドックレットが指定されていない場合、Javadoc ツールは、デフォルトの標準ドックレットを使用します。javadoc ツールには、使用されているドックレットに関係なく使用できるコマンド行オプションがあります。標準ドックレットでは、これらのほかに、いくつかのコマンド行オプションが追加されます。どちらのオプションについても、このあとの「オプション」で説明します。 -.SS -関連ドキュメントおよびドックレット -.RS 3 -.TP 2 -o -.na -\f2Javadoc に施された拡張機能\fP @ -.fi -http://java.sun.com/javase/6/docs/technotes/guides/javadoc/index.html \- Javadoc 1.4 で追加された改良点の詳細 -.TP 2 -o -.na -\f2Javadoc FAQ\fP @ -.fi -http://java.sun.com/j2se/javadoc/faq/index.html \- 頻繁に寄せられる質問に対する回答、Javadoc 関連のツールについての情報、およびバグの回避方法 -.TP 2 -o -.na -\f2How to Write Doc Comments for Javadoc\fP @ -.fi -http://www.oracle.com/technetwork/java/javase/documentation/index\-137868.html \- ドキュメンテーションコメントの記述方法に関する Sun の規約 -.TP 2 -o -.na -\f2Requirements for Writing API Specifications\fP @ -.fi -http://java.sun.com/j2se/javadoc/writingapispecs/index.html \- Java SE プラットフォーム仕様を記述する際に使用された標準要件この情報は、ソースファイルのドキュメンテーションコメント形式で API 仕様を記述する場合にも、その他の形式で記述する場合にも役立ちます。検証可能なアサーションを満たすパッケージ、クラス、インタフェース、フィールド、およびメソッドについての要件を定めています。 -.TP 2 -o -.na -\f2ドキュメンテーションコメントの仕様\fP @ -.fi -http://java.sun.com/docs/books/jls/first_edition/html/18.doc.html \- ドキュメンテーションコメントのオリジナル仕様については、『Java Language Specification』 (James Gosling、Bill Joy、Guy Steele 共著) の初版の第 18 章「Documentation Comments」を参照してください。この章は、第 2 版では削除されました。 -.TP 2 -o -.na -\f2DocCheck ドックレット\fP @ -.fi -http://www.oracle.com/technetwork/java/javase/documentation/index\-141437.html \- ソースファイル内のドキュメンテーションコメントをチェックし、検出されたエラーや不正のレポートを生成します。Doc Check ユーティリティーの一部です。 -.TP 2 -o -.na -\f2MIF ドックレット\fP @ -.fi -http://java.sun.com/j2se/javadoc/mifdoclet/ \- MIF、FrameMaker、PDF の書式で API ドキュメントを自動生成します。MIF は Adobe FrameMaker の交換書式です。 -.RE -.SS -用語 -.LP -\f2「ドキュメンテーションコメント」\fP、\f2「doc コメント」\fP、\f2「主説明」\fP、\f2「タグ」\fP、\f2「ブロックタグ」\fP、および\f2「インラインタグ」\fPの用語については、「ドキュメンテーションコメント」で説明します以下のその他の用語は、Javadoc ツールのコンテキストで特定の意味を持ちます。 -.RS 3 -.TP 3 -生成ドキュメント (generated document) -javadoc ツールが Java ソースコード内のドキュメンテーションコメントから生成したドキュメントのことです。デフォルトの生成ドキュメントは HTML 形式で、標準ドックレットによって作成されます。 -.LP -.TP 3 -名前 (name) -Java 言語で書かれたプログラム要素の名前、つまりパッケージ、クラス、インタフェース、フィールド、コンストラクタ、またはメソッドの名前のことです。名前は、 \f2java.lang.String.equals(java.lang.Object)\fP のような完全修飾名にすることも、 \f2equals(Object)\fP のような部分修飾名にすることもできます。 -.LP -.TP 3 -ドキュメント化されるクラス (documented classes) -javadoc ツールの実行によって詳細なドキュメントが生成されるクラスおよびインタフェースのことです。ドキュメント化するには、ソースファイルが使用可能でなければならず、ソースファイル名またはパッケージ名を javadoc コマンドに渡され、アクセス修飾子 (public、protected、package\-private または private) によってフィルタ処理されないようにしなければなりません。ドキュメント化されるクラスは、javadoc ツールの出力に組み込まれるクラス、つまり「包含クラス」とも呼ばれます。 -.LP -.TP 3 -包含クラス (included classes) -ツールの実行によって詳細なドキュメントが生成されるクラスおよびインタフェースのことです。「ドキュメント化されるクラス」と同じ。 -.LP -.TP 3 -除外クラス (excluded classes) -ツールの実行によって詳細なドキュメントが生成されないクラスおよびインタフェースのことです。 -.LP -.TP 3 -参照クラス (referenced classes) -ドキュメント化されるクラスおよびインタフェースの定義 (実装) またはドキュメンテーションコメントの中で明示的に参照されているクラスおよびインタフェースのことです。参照の例としては、戻り値の型、パラメータの型、キャストの型、拡張されたクラス、実装されたインタフェース、インポートされたクラス、メソッド本体で使用されるクラス、@see、{@link}、{@linkplain}、{@inheritDoc} タグなどがあります。この定義は -.na -\f21.3\fP @ -.fi -http://download.oracle.com/javase/1.3/docs/tooldocs/solaris/javadoc.html#referencedclasses から変更されています。javadoc ツールを実行するときは、Javadoc のブートクラスパスおよびクラスパス内にあるすべての参照クラスをメモリーにロードする必要があります。参照クラスが見つからない場合は、「クラスが見つかりません」という警告が表示されます。Javadoc ツールは、クラスの存在とそのメンバーの完全指定の名前を判別するのに必要なすべての情報を、.class ファイルから引き出すことができます。 -.LP -.TP 3 -外部参照クラス (external referenced classes) -参照クラスのうち、javadoc ツールの実行中にドキュメントが生成されないクラスのことです。つまり、これらのクラスは、コマンド行で Javadoc ツールに渡されていません。生成ドキュメント内でこれらのクラスにリンクしている箇所は、「外部参照」または「外部リンク」と呼ばれます。たとえば、Javadoc ツールの実行対象が \f2java.awt\fP パッケージのみである場合、 \f2java.lang\fP 内のすべてのクラス ( \f2Object\fPなど) が外部参照クラスになります。外部参照クラスにリンクするには、 \f2\-link\fP および \f2\-linkoffline\fP オプションを使用します。外部参照クラスには、通常そのソースコメントを javadoc ツールの実行で利用できないという重要な特徴があります。この場合、それらのコメントを継承することはできません。 -.RE -.SH "ソースファイル" -.LP -Javadoc ツールは 4 種類の異なる「ソース」ファイルから出力を生成します。その 4 種類とは、クラスの Java 言語ソースファイル (\f2.java\fP)、パッケージコメントファイル、概要コメントファイル、およびその他の処理されないファイルです。また、ドキュメント化しないがソースツリーに存在する場合があるテストファイルやテンプレートファイルについても説明します。 -.SS -クラスソースコードファイル -.LP -それぞれのクラスまたはインタフェース、およびそのメンバーは、独自のドキュメンテーションコメントを持つことができ、それを \f2.java\fP ファイル内に保持します。ドキュメンテーションコメントの詳細は、「ドキュメンテーションコメント」を参照してください。 -.SS -パッケージコメントファイル -.LP -それぞれのパッケージは、独自のドキュメンテーションコメントを持つことができ、それを専用の「ソース」ファイルに保持します。その内容は、Javadoc ツールによって生成される概要ページに組み込まれます。このコメントには、通常、そのパッケージ全体に当てはまるドキュメントを記述します。 -.LP -パッケージコメントファイルを作成する場合、コメントの格納先として、次の 2 つのファイルのいずれかを選択できます。 -.RS 3 -.TP 2 -o -\f2package\-info.java\fP \- パッケージ宣言、パッケージ注釈、パッケージコメント、および Javadoc タグを格納できます。このファイルは一般に、package.html よりも推奨されます。 -.TP 2 -o -\f2package.html\fP \- 格納できるのはパッケージコメントと Javadoc タグだけです。パッケージ注釈は格納できません。 -.RE -.LP -各パッケージでは、単一の \f2package.html\fP ファイル、単一の \f2package\-info.java\fP ファイルのいずれかを選択できますが、その両方を選択することはできません。このどちらかのファイルを \f2.java\fP ファイルとともに、ソースツリー内のそのパッケージのディレクトリ内に配置してください。 -.LP -\f4package\-info.java\fP \- このファイルには、次の構造のパッケージコメントを格納できます。 コメントはパッケージ宣言の前に配置します。 -.LP -File: \f2java/applet/package\-info.java\fP +'\" t +.\" Copyright (c) 1994, 2013, Oracle and/or its affiliates. All rights reserved. +.\" Title: javadoc +.\" Language: English +.\" Date: 2011年5月10日 +.\" SectDesc: 基本ツール +.\" Software: JDK 8 +.\" Arch: 汎用 +.\" +.\" 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. +.\" +.pl 99999 +.TH "javadoc" "1" "2011年5月10日" "JDK 8" "基本ツール" +.\" ----------------------------------------------------------------- +.\" * Define some portability stuff +.\" ----------------------------------------------------------------- +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.\" http://bugs.debian.org/507673 +.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" ----------------------------------------------------------------- +.\" * set default formatting +.\" ----------------------------------------------------------------- +.\" disable hyphenation +.nh +.\" disable justification (adjust text to left margin only) +.ad l +.\" ----------------------------------------------------------------- +.\" * MAIN CONTENT STARTS HERE * +.\" ----------------------------------------------------------------- +.SH "NAME" +javadoc \- Javaソース・ファイルから、APIドキュメントのHTMLページを生成します。 +.SH "概要" +.sp +.if n \{\ +.RS 4 +.\} +.nf +\fIjavadoc\fR {\fIpackages\fR|\fIsource\-files\fR} [\fIoptions\fR] [\fI@argfiles\fR] +.fi +.if n \{\ +.RE +.\} +.PP +\fIpackages\fR +.RS 4 +\fIjava\&.lang java\&.lang\&.reflect java\&.awt\fRなど、空白で区切ってドキュメント化するパッケージの名前。サブパッケージもドキュメント化する場合は、\fI\-subpackages\fRオプションを使用してパッケージを指定します。 +.sp +デフォルトでは、\fIjavadoc\fRは、現在のディレクトリおよびサブディレクトリで指定されたパッケージを探します。\fI\-sourcepath\fRオプションを使用して、パッケージを探すディレクトリのリストを指定します。 +.RE +.PP +\fIsource\-files\fR +.RS 4 +\fIClass\&.java Object\&.java Button\&.java\fRのように空白で区切った、ドキュメント化するJavaソース・ファイルの名前。デフォルトでは、\fIjavadoc\fRは、現在のディレクトリで指定されたクラスを探します。ただし、\fI/home/src/java/awt/Graphics*\&.java\fRのように、クラス・ファイルのフルパスを指定し、ワイルドカード文字を使用できます。現在のディレクトリからの相対パスも指定できます。 +.RE +.PP +\fIoptions\fR +.RS 4 +空白で区切られたコマンドライン・オプション。オプションを参照してください。 +.RE +.PP +\fI@argfiles\fR +.RS 4 +\fIjavadoc\fRコマンド・オプション、パッケージ名およびソース・ファイル名のリストを任意の順序で含むファイルの名前。 +.RE +.SH "説明" +.PP +\fIjavadoc\fRコマンドは、一連のJavaソース・ファイルにある宣言およびドキュメンテーション・コメントを解析し、デフォルトでは、publicクラス、protectedクラス、ネストされたクラス(匿名の内部クラスは除く)、インタフェース、コンストラクタ、メソッド、およびフィールドについて記述した一連のHTMLページを生成します。\fIjavadoc\fRコマンドは、APIドキュメントの生成や、一連のソース・ファイルの実装ドキュメントの生成に使用できます。 +.PP +\fIjavadoc\fRコマンドは、パッケージ全体、個々のソース・ファイル、またはその両方に対して実行できます。パッケージ全体のドキュメント化を行うには、\fI\-subpackages\fRオプションを使用してディレクトリおよびそのサブディレクトリを再帰的にたどるか、パッケージ名の明示的なリストを渡します。個々のソース・ファイルをドキュメント化するには、Javaソース・ファイル名のリストを渡します。簡単な例を参照してください。 +.SS "ソース・ファイルの処理" +.PP +\fIjavadoc\fRコマンドは、ソースで終わるファイル、およびソース・ファイルで説明しているその他のファイルを処理します。個々のソース・ファイル名を渡して\fIjavadoc\fRを実行する場合、どのソース・ファイルを処理するかを正確に指定できます。ただし、多くの開発者はこの方法では作業しません。パッケージ名を渡すほうが簡単だからです。ソース・ファイル名を明示的に指定しなくても、\fIjavadoc\fRコマンドは3つの方法で実行できます。パッケージ名を渡し、\fI\-subpackages\fRオプションを使用するか、またはソース・ファイル名にワイルドカードを使用することができます。これらの場合、\fIjavadoc\fRコマンドがソース・ファイルの処理を行うのは、そのファイルが次のすべての要件を満たす場合のみです。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +ファイル名の接頭辞(\fI\&.java\fRを削除)が有効なクラス名である。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +ソース・ツリーのルートからの相対的なパス名が、区切り文字をドットに変換すると、有効なパッケージ名になる。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +パッケージ文に有効なパッケージ名が含まれている。 +.RE +リンクの処理.PP +処理の実行中に、\fIjavadoc\fRコマンドは、その実行でドキュメント化されるパッケージ、クラス、およびメンバーの名前に対して、相互参照リンクを追加します。リンクは、次の場所に表示されます。@タグの説明については、javadocタグを参照してください。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +宣言(戻り値の型、引数の型、フィールドの型)。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fI@see\fRタグから生成された「\fI関連項目\fR」セクション。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fI{@link}\fRタグから生成されたインライン・テキスト。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fI@throws\fRタグから生成された例外の名前。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +インタフェースのメンバーに対する「\fI定義\fR」リンクと、クラスのメンバーに対する「\fIオーバーライド\fR」リンク。メソッド・コメントの継承を参照してください。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +パッケージ、クラス、およびメンバーをリストしているサマリー表。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +パッケージおよびクラスの継承ツリー。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +索引。 +.RE +.PP +コマンドラインで指定しなかったクラスについての既存のテキスト(別に生成したテキスト)に対してリンクを追加するには、\fI\-link\fRおよび\fI\-linkoffline\fRオプションを利用できます。 +処理の詳細.PP +\fIjavadoc\fRコマンドは実行するたびに1つの完全なドキュメントを生成します。前の実行の結果を変更または直接取り込む、増分ビルドを行いません。ただし、\fIjavadoc\fRコマンドは、他の実行の結果にリンクできます。 +.PP +\fIjavadoc\fRコマンドの実装にはJavaコンパイラが必要で、Javaコンパイラに依存しています。\fIjavadoc\fRコマンドは\fIjavac\fRコマンドの一部を呼び出し、宣言をコンパイルして、メンバーの実装を無視します。\fIjavadoc\fRコマンドは、クラス階層を含むクラスの豊富な内部表現とクラスの「使用」関係を構築し、HTMLを生成します。さらに、J\fIjavadoc\fRコマンドは、ソース・コードのドキュメンテーション・コメントから、ユーザーの提供したドキュメントも取得します。ドキュメンテーション・コメントを参照してください。 +.PP +\fIjavadoc\fRコマンドは、メソッド本体を持たない純粋なスタブ・ファイルであるソース・ファイルに対して実行できます。したがって、APIの実装前の設計の早い段階で、ドキュメンテーション・コメントを記述して\fIjavadoc\fRコメントを実行できます。 +.PP +コンパイラに依存することによって、HTML出力は、実際の実装に正確に対応します。実際の実装は、明示的なソース・コードにではなく、暗黙のソース・コードに依存する場合があります。たとえば、\fIjavadoc\fRコマンドは、コンパイル済クラス・ファイルには存在するがソース・コードには存在しないデフォルト・コンストラクタをドキュメント化します。 +.PP +多くの場合、\fIjavadoc\fRコマンドでは、ソース・ファイルのコードが不完全またはエラーを含んでいる場合でもドキュメントを生成できます。すべてのデバッグやトラブルシューティングを完了する前にドキュメントを生成できます。\fIjavadoc\fRコマンドはドキュメンテーション・コメントの基本的なチェックを行います。 +.PP +\fIjavadoc\fRコマンドは、ドキュメントの内部構造を構築する際、参照クラスをすべてロードします。このため、 +\fIjavadoc\fRコマンドは、ブートストラップ・クラス、拡張機能、またはユーザー・クラスにかかわらず、すべての参照クラスを検索できる必要があります。クラスの検出方法 +(http://docs\&.oracle\&.com/javase/8/docs/technotes/tools/findingclasses\&.html)を参照してください +.PP +通常、作成するクラスは、拡張クラスとして、または\fIjavadoc\fRコマンドのクラス・パスでロードされる必要があります。 +.SS "Javadocのドックレット" +.PP +\fIjavadoc\fRコマンドの出力の内容と形式は、ドックレットを使用してカスタマイズできます。\fIjavadoc\fRコマンドには、標準ドックレットと呼ばれるデフォルトの組込みドックレットがあります。標準ドックレットは、HTML形式のAPIドキュメントを生成します。標準ドックレットを修正またはサブクラスを作成することや、HTML、XML、MIF、RTFなどの好みの出力形式を生成する独自のドックレットを記述することも可能です。 +.PP +\fI\-doclet\fRオプションでカスタム・ドックレットが指定されていない場合、\fIjavadoc\fRコマンドは、デフォルトの標準ドックレットを使用します。\fIjavadoc\fRコマンドには、使用されているドックレットに関係なく使用できるいくつかのオプションがあります。標準ドックレットでは、これらの他に、いくつかのコマンドライン・オプションが追加されます。オプションを参照してください。 +.SH "ソース・ファイル" +.PP +\fIjavadoc\fRコマンドは、次のタイプのソース・ファイルから出力を生成します。そのファイルは、クラスのJava言語ソース・ファイル(\fI\&.java\fR)、パッケージ・コメント・ファイル、概要コメント・ファイル、およびその他の未処理のファイルです。ここでは、ドキュメント化しないがソース・ツリーに存在する場合があるテスト・ファイルやテンプレート・ファイルについても説明します。 +.SS "クラスのソース・ファイル" +.PP +それぞれのクラスまたはインタフェース、およびそのメンバーは、独自のドキュメンテーション・コメントを持つことができ、それをソース・ファイル内に保持します。ドキュメンテーション・コメントを参照してください。 +.SS "パッケージ・コメント・ファイル" +.PP +それぞれのパッケージは、独自のドキュメンテーション・コメントを持つことができ、それを専用のソース・ファイルに保持します。その内容は、\fIjavadoc\fRコマンドによって生成されるパッケージのサマリー・ページに組み込まれます。このコメントには、通常、そのパッケージ全体に当てはまるドキュメントを記述します。 +.PP +パッケージ・コメント・ファイルを作成するには、次のいずれかのファイルにコメントを格納できます。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fIpackage\-info\&.java\fRファイルには、パッケージ宣言、パッケージ注釈、パッケージ・コメント、およびJavadocタグを格納できます。このファイルが優先されます。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fIpackage\&.html\fRファイルには、パッケージ・コメントとJavadocタグのみを格納できます。パッケージ注釈は格納できません。 +.RE +.PP +各パッケージは、\fIpackage\&.html\fRファイルまたは\fIpackage\-info\&.java\fRファイルのいずれかを1つ持つことができますが、その両方を持つことはできません。このどちらかのファイルをソース・ファイルとともに、ソース・ツリー内のそのパッケージ・ディレクトリ内に配置してください。 +package\-info\&.javaファイル.PP +\fIpackage\-info\&.java\fRファイルには、次の構造のパッケージ・コメントを含めることができます。コメントは、パッケージ宣言の前に配置されます。 +.PP +\fB注意:\fR +コメント区切り文字である\fI/**\fRおよび\fI*/\fRが存在する必要がありますが、中間の行の先頭のアスタリスクは省略可能です。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl /** -.fl * Provides the classes necessary to create an -.fl * applet and the classes an applet uses -.fl - * to communicate with its applet context. -.fl + * to communicate with its applet context\&. * <p> -.fl * The applet framework involves two entities: -.fl - * the applet and the applet context. -.fl + * the applet and the applet context\&. * An applet is an embeddable window (see the -.fl - * {@link java.awt.Panel} class) with a few extra -.fl + * {@link java\&.awt\&.Panel} class) with a few extra * methods that the applet context can use to -.fl - * initialize, start, and stop the applet. -.fl + * initialize, start, and stop the applet\&. * -.fl - * @since 1.0 -.fl - * @see java.awt -.fl + * @since 1\&.0 + * @see java\&.awt */ -.fl -package java.lang.applet; -.fl -\fP +package java\&.lang\&.applet; .fi -.LP -コメント区切り文字の \f2/**\fP と \f2/*\fP は存在している必要がありますが、中間行の行頭のアスタリスクは省略してもかまいません。 -.LP -\f4package.html\fP \- このファイルには、次の構造のパッケージコメントを格納できます。コメントは \f2<body>\fP 要素内に配置します。 -.LP -File: \f2java/applet/package.html\fP +.if n \{\ +.RE +.\} +package\&.htmlファイル.PP +\fIpackage\&.html\fRファイルには、次の構造のパッケージ・コメントを含めることができます。コメントは、\fI<body>\fR要素に配置されます。 +.PP +ファイル: +\fIjava/applet/package\&.html\fR +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -<HTML> <BODY> Provides the classes necessary to create an applet and the classes an applet uses to communicate with its applet context.<p> -.fl +<HTML> +<BODY> +Provides the classes necessary to create an applet and the +classes an applet uses to communicate with its applet context\&. +<p> The applet framework involves two entities: the applet -.fl -and the applet context. An applet is an embeddable window (see the {@link java.awt.Panel} class) with a few extra methods that the applet context can use to initialize, start, and stop the applet.@since 1.0 @see java.awt </BODY> </HTML> -.fl -\fP +and the applet context\&. An applet is an embeddable +window (see the {@link java\&.awt\&.Panel} class) with a +few extra methods that the applet context can use to +initialize, start, and stop the applet\&. + +@since 1\&.0 +@see java\&.awt +</BODY> +</HTML> .fi -.LP -これは単なる通常の HTML ファイルであり、パッケージ宣言を含んでいない点に注意してください。パッケージコメントファイルの内容は、ほかのすべてのコメントと同様に HTML で記述しますが、1 つだけ例外があります。それは、このドキュメンテーションコメントには、コメント区切り文字 である \f2/**\fP と \f2*/\fP 、および行頭のアスタリスクを含めてはならない、という点です。コメントを書く場合は、最初の文をパッケージの概要とし、 \f2<body>\fP と最初の文の間にタイトルやその他のテキストを含めないようにします。パッケージタグを含めることはできますが、ほかのドキュメンテーションコメントと同様、すべてのブロックタグは、主説明のあとに置かなければなりません。 \f2@see\fP タグをパッケージコメントファイルに追加する場合には、完全修飾名を使用する必要があります。詳細は、 -.na -\f2package.html\fPの例 @ -.fi -http://www.oracle.com/technetwork/java/javase/documentation/index\-137868.html#packagecommentsを参照してください。 -.LP -\f3パッケージコメントファイルの処理\fP \- Javadoc ツールは、実行時にパッケージコメントファイルを自動的に検索し、このファイルを見つけると次の処理を行います。 -.RS 3 -.TP 2 -o -処理できるようにコメントをコピーする( \f2package.html\fP の場合であれば、 \f2<body>\fP と \f2</body>\fP HTML タグの間にある内容をすべてコピーする。 \f2<head>\fP セクションを含め、そこに \f2<title>\fP やソースファイルの著作権記述などの情報を配置することもできるが、生成後のドキュメンテーションにはそれらは一切表示されない) -.TP 2 -o -パッケージタグがあれば、すべて処理する -.TP 2 -o -生成したパッケージの概要ページの最後に、処理したテキストを挿入する (例: -.na -\f2パッケージの概要\fP @ -.fi -http://java.sun.com/javase/6/docs/api/java/applet/package\-summary.html) -.TP 2 -o -パッケージの概要ページの先頭に、パッケージコメントの最初の文をコピーする。さらに、概要ページのパッケージリストに、パッケージ名とパッケージコメントの最初の文を追加する (例: -.na -\f2概要の要約\fP @ -.fi -http://java.sun.com/javase/6/docs/api/overview\-summary.html)。文の末尾は、クラスやメンバーの主説明の最初の文の末尾と同じ規則によって判断される +.if n \{\ .RE -.SS -概要コメントファイル -.LP -ドキュメント化する各アプリケーションまたはパッケージセットは、独自の概要ドキュメンテーションコメントを持つことができ、それは専用の「ソース」ファイルに保持されます。その内容は、Javadoc ツールによって生成される概要ページに組み込まれます。このコメントには、通常、アプリケーションまたはパッケージセット全体に当てはまるドキュメントを記述します。 -.LP -概要コメントファイルを作成するには、ファイルに任意の名前 (通常は \f4overview.html\fP) を付け、それを任意の場所 (通常はソースツリーの最上位) に配置できます。たとえば、 \f2java.applet\fP パッケージのソースファイルが \f2/home/user/src/java/applet\fP ディレクトリに格納されていれば、概要コメントファイルは \f2/home/user/src/overview.html に作成できます\fP。 -.LP -異なるパッケージのセットに対して javadoc を複数回実行する場合は、同じ 1 つのソースファイルのセットに対して複数の概要コメントファイルを作成できます。たとえば、内部ドキュメンテーション用に \-private を指定して javadoc を 1 回実行したあと、公開ドキュメンテーション用にそのオプションを指定しないで再度実行することができます。この場合、各概要コメントファイルの 1 文目で、そのドキュメンテーションを公開用または内部用として記述できます。 -.LP -概要コメントファイルの内容は、前述のパッケージコメントファイルと同様、HTML で記述された 1 つの大きなドキュメンテーションコメントです。詳細は、前述の説明を参照してください。要点を繰り返すと、このコメントを記述する場合は、最初の文をアプリケーションまたはパッケージセットの要約とし、 \f2<body>\fP と最初の文の間にタイトルその他のテキストを含めないようにします。概要タグを含めることができます。ほかのドキュメンテーションコメントと同じく、 \f2{@link}\fP などのインラインタグを除くすべてのタグは、主説明のあとに配置する必要があります。 \f2@see\fP タグを追加する場合には、完全修飾名を使用する必要があります。 -.LP -Javadoc ツールの実行時に、\-overview オプションを使って概要コメントファイル名を指定します。このファイルは、パッケージコメントファイルと同じように処理されます。 -.RS 3 -.TP 2 -o -\f2<body>\fP と \f2</body>\fP タグの間にあるすべての内容を処理対象としてコピーする -.TP 2 -o -概要タグがあれば、すべて処理する -.TP 2 -o -生成した概要ページの最後に、処理したテキストを挿入する (例: -.na -\f2概要の要約\fP @ -.fi -http://java.sun.com/javase/6/docs/api/overview\-summary.html) -.TP 2 -o -概要ページの先頭に、概要コメントの最初の文をコピーする +.\} +.PP +\fIpackage\&.html\fRファイルは通常のHTMLファイルであり、パッケージ宣言を含んでいません。パッケージ・コメント・ファイルの内容はHTMLで記述しますが、例外が1つあります。このドキュメンテーション・コメントには、コメント区切り文字である\fI/**\fRと\fI*/\fR、または行頭のアスタリスクを含めない、という点です。コメントを書く場合は、最初の文をパッケージのサマリーとし、\fI<body>\fRタグと最初の文の間にタイトルやその他のテキストを含めないようにします。パッケージ・タグを含めることができます。すべてのブロック・タグは、主説明の後に配置する必要があります。\fI@see\fRタグをパッケージ・コメント・ファイルに追加する場合には、完全修飾名を使用する必要があります。 +コメント・ファイルの処理.PP +\fIjavadoc\fRコメントを実行すると、パッケージ・コメント・ファイルが検索されます。パッケージ・コメント・ファイルが見つかった場合は、\fIjavadoc\fRコマンドは次の手順を実行します。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +処理できるようにコメントをコピーします。package\&.htmlの場合、\fIjavadoc\fRコマンドは、\fI<body>\fRと\fI</body>\fR +HTMLタグ間のすべての内容をコピーします。\fI<head>\fRセクションを含め、そこに\fI<title>\fRタグやソース・ファイルの著作権記述などの情報を配置することもできますが、生成されたドキュメントにはそれらは一切表示されません。 .RE -.SS -その他の未処理のファイル -.LP -ソースには、Javadoc ツールによって生成先のディレクトリにコピーされる、その他の任意のファイルを含めることができます。一般に、このようなファイルには、グラフィックファイル、サンプルの Java ソース (.java) およびクラス (.class) ファイル、内容が通常の Java ソースファイルのドキュメンテーションコメントの影響を受けない独立した HTML ファイルなどがあります。 -.LP -処理されないファイルを含めるには、\f4doc\-files\fP という名前のディレクトリ内にそれらのファイルを配置します。このディレクトリは、ソースファイルが格納された任意のパッケージディレクトリのサブディレクトリにします。このようなサブディレクトリは、パッケージごとに 1 つ用意できます。イメージ、サンプルコード、ソースファイル、.class ファイル、アプレット、および HTML ファイルをこのディレクトリに格納できます。たとえば、ボタンの画像 \f2button.gif\fP を \f2java.awt.Button\fP クラスのドキュメンテーションに含める場合には、そのファイルを \f2/home/user/src/java/awt/doc\-files/\fP ディレクトリ内に配置します。なお、 \f2doc\-files\fP ディレクトリを \f2/home/user/src/java/doc\-files\fP に配置することはできません。なぜなら、 \f2java\fP はパッケージではないからです。つまり、java に直接含まれているソースファイルは 1 つも存在していません。 -.LP -これらの未処理のファイルへのリンクは、すべて明示的に記述する必要があります。これは、Javadoc ツールがそれらのファイルを見ずに、単にディレクトリとその内容を生成先にコピーするだけだからです。たとえば、 \f2Button.java\fP のドキュメンテーションコメント内のリンクは、次のようになります。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +パッケージ・タグを処理します。パッケージ・タグを参照してください。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +処理したテキストを生成されたパッケージのサマリー・ページの下部に挿入します。Javaプラットフォーム、Standard Edition API仕様の概要 +(http://docs\&.oracle\&.com/javase/8/docs/api/overview\-summary\&.html)を参照してください +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +パッケージのサマリー・ページの先頭に、パッケージ・コメントの最初の文をコピーします。さらに、\fIjavadoc\fRコマンドは、概要ページのパッケージ・リストに、パッケージ名とパッケージ・コメントの最初の文を追加します。Javaプラットフォーム、Standard Edition API仕様の概要 +(http://docs\&.oracle\&.com/javase/8/docs/api/overview\-summary\&.html)を参照してください +.sp +文の終わりは、クラスやメンバーの主説明の最初の文の終わりと同じルールによって判断されます。 +.RE +.SS "概要コメント・ファイル" +.PP +ドキュメント化する各アプリケーションまたはパッケージ・セットは、独自の概要ドキュメンテーション・コメントを持つことができ、それは専用のソース・ファイルに保持されます。その内容は、\fIjavadoc\fRコマンドによって生成される概要ページに組み込まれます。このコメントには、通常、アプリケーションまたはパッケージ・セット全体に当てはまるドキュメントを記述します。 +.PP +このファイルにはoverview\&.htmlなどの名前を付けることができ、どこに配置してもかまいません。一般的な場所は、ソース・ツリーの最上部です。 +.PP +たとえば、\fIjava\&.applet\fRパッケージのソース・ファイルが/home/user/src/java/appletディレクトリに格納されている場合、概要コメント・ファイルは/home/user/src/overview\&.htmlに作成できます。 +.PP +異なるパッケージのセットに対して\fIjavadoc\fRコマンドを複数回実行する場合は、同じ1つのソース・ファイルのセットに対して複数の概要コメント・ファイルを作成できます。たとえば、内部ドキュメント用に\fI\-private\fRを指定して\fIjavadoc\fRコマンドを1回実行した後、公開ドキュメント用にそのオプションを指定しないで再度実行することができます。この場合、各概要コメント・ファイルの1文目で、そのドキュメントを公開用または内部用として記述できます。 +.PP +概要コメント・ファイルの内容は、HTMLで記述された1つの大きなドキュメンテーション・コメントです。最初の文はアプリケーションまたはパッケージのセットのサマリーとします。\fI<body>\fRタグと最初の文の間にタイトルやその他のテキストを含めないようにします。{\fI@link}\fRなどのインライン・タグを除くすべてのタグは、主説明の後に配置する必要があります。\fI@see\fRタグを追加する場合には、完全修飾名を使用する必要があります。 +.PP +\fIjavadoc\fRコマンドの実行時に、\fI\-overview\fRオプションを使用して概要コメント・ファイル名を指定します。このファイルは、パッケージ・コメント・ファイルと同じように処理されます。\fIjavadoc\fRコマンドは次の手順を実行します。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fI<body>\fRと\fI</body>\fRタグの間にある内容をすべて処理対象としてコピーします。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +概要タグがあれば処理します。概要タグを参照してください。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +処理したテキストを生成された概要ページの下部に挿入します。JavaプラットフォームStandard Edition API仕様の概要 +(http://docs\&.oracle\&.com/javase/8/docs/api/overview\-summary\&.html)を参照してください +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +概要サマリー・ページの先頭に、概要コメントの最初の文をコピーします。 +.RE +.SS "未処理のファイル" +.PP +ソース・ファイルには、\fIjavadoc\fRコマンドによって宛先ディレクトリにコピーされる、任意のファイルを含めることができます。このようなファイルには、通常、グラフィック・ファイル、サンプルのJavaソースおよびクラス・ファイル、一般的なJavaソース・ファイルのドキュメンテーション・コメントの影響を受けない多くの内容を含む独立したHTMLファイルなどがあります。 +.PP +未処理のファイルを含めるには、doc\-filesというディレクトリにファイルを配置します。doc\-filesディレクトリは、ソース・ファイルを含む任意のパッケージ・ディレクトリのサブディレクトリになることができます。doc\-filesサブディレクトリは、パッケージごとに1つ用意できます。 +.PP +たとえば、ボタンのイメージを\fIjava\&.awt\&.Button\fRクラスのドキュメントに含める場合には、そのイメージ・ファイルを/home/user/src/java/awt/doc\-files/ディレクトリに置きます。doc\-filesディレクトリを/home/user/src/java/doc\-filesに置かないでください。javaはパッケージではないからです。ソース・ファイルを含めることもできません。 +.PP +\fIjavadoc\fRコマンドはファイルを参照しないので、未処理のファイルへのすべてのリンクは、コードに含まれている必要があります。\fIjavadoc\fRコマンドはディレクトリとそのすべての内容を宛先にコピーします。次の例では、Button\&.javaドキュメンテーション・コメントのリンクがどのように見えるかを示しています。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl - /** -.fl - * This button looks like this: -.fl - * <img src="doc\-files/Button.gif"> -.fl - */ -.fl -\fP +/** + * This button looks like this: + * <img src="doc\-files/Button\&.gif"> + */ .fi -.SS -テストファイルおよびテンプレートファイル -.LP -一部の開発者から、テストファイルおよびテンプレートファイルを対応するソースファイルの近くのソースツリーに保存したいという要望がありました。つまり、これらのソースファイルと同じディレクトリまたはサブディレクトリに保存したいということです。 -.LP -個別のソースファイル名で明示的に渡して Javadoc ツールを実行する場合は、テストファイルおよびテンプレートファイルを意図的に除外して、処理されないようにすることができます。ただし、パッケージ名またはワイルドカードで渡す場合は、以下のルールに従って、これらのテストファイルおよびテンプレートファイルが処理されないようにする必要があります。 -.LP -テストファイルとテンプレートファイルの違いは、テストファイルは、正当でコンパイル可能なソースファイルであるのに対して、テンプレートファイルは、そうではないという点です。ただし、テンプレートファイルも「.java」で終わることができます。 -.LP -\f3テストファイル\fP \- 開発者の多くは、あるパッケージのコンパイル可能で実行可能なテストファイルをそのパッケージのソースファイルと同じディレクトリに配置したいと考えています。しかしテストファイルは、名前なしパッケージなど、ソースファイルパッケージとは別のパッケージに属させたいとも考えています (そのため、テストファイルには package ステートメントがないか、またはソースとは別の package ステートメントがある)。このような状況では、コマンド行で指定されているソースのパッケージ名を指定してそのソースがドキュメント化されているときに、テストファイルは警告またはエラーを引き起こします。そのようなテストファイルはサブディレクトリに配置する必要があります。たとえば、 \f2com.package1\fP 内のソースファイルに対するテストファイルを追加する場合は次のように、ハイフンを含んでいるためにパッケージ名としては無効であるようなサブディレクトリ内に、それらのファイルを配置します。 +.if n \{\ +.RE +.\} +.SS "テストおよびテンプレート・ファイル" +.PP +ソース・ツリーのテストおよびテンプレート・ファイルを、ソース・ファイルが存在するディレクトリまたはサブディレクトリと同じディレクトリに格納できます。テストおよびテンプレート・ファイルが処理されるのを防ぐには、\fIjavadoc\fRコマンドを実行し、明示的に個別のソース・ファイル名を渡します。 +.PP +テスト・ファイルは、有効な、コンパイル可能なソース・ファイルです。テンプレート・ファイルは、有効な、互換性のあるソース・ファイルではありませんが、多くの場合、\fI\&.java\fR接尾辞を持っています。 +テスト・ファイル.PP +テスト・ファイルを、名前なしパッケージや、ソース・ファイルが存在するパッケージとは別のパッケージに属するようにする場合、テスト・ファイルをソース・ファイルの下のサブディレクトリに配置し、そのディレクトリに無効な名前を付けます。テスト・ファイルをソースと同じディレクトリに配置し、パッケージ名を示すコマンドライン引数を指定して\fIjavadoc\fRコマンドを呼び出すと、テスト・ファイルは警告またはエラーを引き起こします。ファイルが無効な名前を持つサブディレクトリ内に存在する場合、テスト・ファイル・ディレクトリはスキップされ、エラーまたは警告は発行されません。たとえば、ソース・ファイルのテスト・ファイルをcom\&.package1に追加するには、無効なパッケージ名のサブディレクトリに配置します。次のディレクトリ名にはハイフンが含まれているため無効です。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl - com/package1/test\-files/ -.fl -\fP +com/package1/test\-files/ .fi -.LP -こうすると、Javadoc ツールでは警告なしで test ディレクトリをスキップします。 -.LP -テストファイルに doc コメントが含まれる場合、次のようにワイルドカードを含んだテストソースファイル名で渡してテストファイルのドキュメントを生成するように、Javadoc ツールを別個に実行できるように設定できます。たとえば、 \f2com/package1/test\-files/*.java などです\fP。 -.LP -\f3ソースファイルのテンプレート\fP \- テンプレートファイルの名前は「.java」で終わることもありますが、テンプレートファイルはコンパイルできません。ソースディレクトリ内に保持したいソースファイルのテンプレートがある場合は、 \f2Buffer\-Template.java\fP のようにハイフンやその他の無効な Java 文字を名前に含めることで、テンプレートが処理されないようにします。これは、Javadoc ツールが処理するのは、「.java」接尾辞を除いた名前が 正規のクラス名であるソースファイルだけであるためです (Java 言語仕様の「Identifiers」に関する情報を参照)。 +.if n \{\ +.RE +.\} +.PP +テスト・ファイルにドキュメンテーション・コメントが含まれる場合、\fIjavadoc\fRコマンドの個別の実行で、ワイルドカードを含んだテスト・ソース・ファイル名(\fIcom/package1/test\-files/*\&.java\fRなど)を渡して、テスト・ファイルのドキュメントを生成するように設定できます。 +テンプレート・ファイル.PP +テンプレート・ファイルをソース・ディレクトリに配置するが、\fIjavadoc\fRコマンドを実行するときにエラーを生成しない場合、ファイルに\fIBuffer\-Template\&.java\fRなどの無効な名前を付けて、処理させないようにします。\fIjavadoc\fRコマンドは、接尾辞の\fI\&.java\fRが削除されると有効なクラス名になる名前を持つソース・ファイルのみを処理します。 .SH "生成されるファイル" -.LP -デフォルトでは、javadoc ツールは、HTML 形式のドキュメントを生成する標準ドックレットを使います。このドックレットは、以下の種類のファイルを生成します。それぞれの HTML ページは、個々のファイルに相当します。javadoc が生成するファイルの名前には、クラスやインタフェースの名前にちなんだものと、そうでないもの ( \f2package\-summary.html など\fP) の 2 種類があります。後者のグループのファイル名には、前者のグループとファイル名が競合しないように、ハイフンが含まれています。 -.LP -\f3基本内容ページ\fP -.RS 3 -.TP 2 -o -ドキュメント化するクラスまたはインタフェースごとに 1 つの\f3クラスページまたはインタフェースページ\fP (\f2クラス名\fP\f2.html\fP) -.TP 2 -o -ドキュメント化するパッケージごとに 1 つの\f3パッケージページ\fP (\f2package\-summary.html\fP)。Javadoc ツールは、 \f2package.html\fP または \f2package\-info.java\fP という名前のファイル内の HTML テキストをすべて組み入れます。 -.TP 2 -o -パッケージのセット全体に対して 1 つの\f3概要ページ\fP (\f2overview\-summary.html\fP)。これは、生成ドキュメントの先頭ページになります。Javadoc ツールは、\f2\-overview\fP オプションで指定されたファイル内の HTML テキストをすべて組み入れます。このページのファイルは、javadoc に複数のパッケージ名を渡した場合にだけ作成されます。詳細は、「HTML フレーム」を参照してください。 +.PP +デフォルトでは、\fIjavadoc\fRコマンドは、HTML形式のドキュメントを生成する標準ドックレットを使用します。標準ドックレットは、ここで説明する、基本内容ページ、相互参照ページ、サポート・ページを生成します。各HTMLページは個別のファイルに対応します。\fIjavadoc\fRコマンドは、2つのタイプのファイルを生成します。最初のタイプには、クラスおよびインタフェースに応じた名前が付けられます。2番目のタイプには、最初のタイプのファイルとの競合を防ぐために、ハイフンが含まれます(package\-summary\&.htmlなど)。 +.SS "基本内容ページ" +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +記載されているクラスまたはインタフェースごとに1つのクラスまたはインタフェース・ページ(classname\&.html)。 .RE -.LP -\f3相互参照ページ\fP -.RS 3 -.TP 2 -o -\f3パッケージのセット全体に対して 1 つのクラス階層ページ\fP (\f2overview\-tree.html\fP)。このページを表示するには、ナビゲーションバーの [概要] をクリックしてから、[階層ツリー] をクリックします。 -.TP 2 -o -\f3パッケージごとに 1 つのクラス階層ページ\fP (\f2package\-tree.html\fP)。これを表示するには、特定のパッケージ、クラス、またはインタフェースのページに移動し、[階層ツリー] をクリックしてそのパッケージの階層を表示させます。 -.TP 2 -o -\f3パッケージごとに 1 つの [使用] ページ\fP (\f2package\-use.html\fP) と、クラスおよびインタフェースごとに 1 つずつの [使用] ページ (\f2class\-use/\fP\f2クラス名\fP\f2.html\fP)。このページには、特定のクラス、インタフェース、またはパッケージの一部を使っているパッケージ、クラス、メソッド、コンストラクタ、およびフィールドについて記述されます。クラスまたはインタフェース A を例にして考えると、その [使用] ページには、A のサブクラス、A として宣言されたフィールド、A を返すメソッド、A 型のパラメータを持つメソッドおよびコンストラクタが表示されます。 このページを表示するには、まず、パッケージ、クラス、またはインタフェースのページに移動してから、ナビゲーションバーの [使用] リンクをクリックします。 -.TP 2 -o -\f3非推奨 API ページ\fP (\f2deprecated\-list.html\fP)。推奨されない名前がすべて一覧表示されます。非推奨名は、一般に改良された API が存在するために使用が推奨されていない API の名前であり、通常、それに置き換わる名前が提示されています。非推奨 API は、将来の実装では削除される可能性があります。 -.TP 2 -o -\f3定数フィールド値ページ\fP (\f2constant\-values.html\fP)。static フィールドの値用です。 -.TP 2 -o -\f3直列化された形式ページ\fP (\f2serialized\-form.html\fP)。直列化可能かつ外部化可能なクラスに関する情報用です。これらの各クラスには、直列化フィールドおよびメソッドに関する説明があります。これらの情報は、API を使う開発者ではなく、再実装を行う開発者に必要な情報です。ナビゲーションバーにこのページへのリンクはありませんが、直列化されたクラスに移動して、そのクラスの説明にある「関連項目」セクションで「直列化された形式」をクリックすると、この情報を取得できます。標準ドックレットは直列化された形式ページを自動生成します。Serializable を実装するすべてのクラス (public または 非 public) が含まれるほか、 \f2readObject\fP メソッドや \f2writeObject\fP メソッド、直列化されるフィールド、および \f2@serial\fP、\f2@serialField\fP、\f2@serialData\fP タグからのドキュメンテーションコメントも含まれます。public 直列化可能クラスを除外するには、そのクラス (またはそのパッケージ) を \f2@serial exclude\fP でマークします。package\-private 直列化可能クラスを含めるには、そのクラス (またはそのパッケージ) を \f2@serial include\fP でマークします。バージョン 1.4 では \f2\-private\fP オプションの指定なしで javadoc ツールを実行することにより、public クラスおよび private クラスの完全に直列化されたクラスを生成できます。 -.TP 2 -o -\f3索引\fP (\f2index\-*.html\fP)。すべてのクラス、インタフェース、コンストラクタ、フィールド、およびメソッドの名前がアルファベット順に並んでいます。索引は、Unicode を扱えるように国際化されています。1 つのファイルとして生成することも、先頭文字 (英語の場合 A ~ Z) ごとに別々のファイルとして生成することもできます。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +記載されているパッケージごとに1つのパッケージ・ページ(package\-summary\&.html)。\fIjavadoc\fRコマンドは、ソース・ツリーのパッケージ・ディレクトリ内にあるpackage\&.htmlまたはpackage\-info\&.javaという名前のファイル内のHTMLテキストをすべて組み入れます。 .RE -.LP -\f3サポートファイル\fP -.RS 3 -.TP 2 -o -\f3ヘルプページ\fP (\f2help\-doc.html\fP)。ナビゲーションバーや前述の各ページに関する説明が記載されています。デフォルトのヘルプファイルに代わる独自のカスタムヘルプファイルを提供するには、\f2\-helpfile\fP を使用します。 -.TP 2 -o -表示用の HTML フレームを作成する 1 つの \f3index.html ファイル\fP。このファイルは、フレーム付きの先頭ページを表示する場合にロードします。このファイル自体には、テキスト内容は含まれていません。 -.TP 2 -o -複数の\f3フレームファイル\fP (\f2*\-frame.html\fP)。パッケージ、クラス、およびインタフェースのリストが含まれています。HTML フレームを表示するときに使用されます。 -.TP 2 -o -\f3パッケージリスト\fPファイル (\f2package\-list\fP)。 \f2\-link\fP および \f2\-linkoffline\fP オプションで使用されます。これは、HTML ファイルではなくテキストファイルであり、どのリンクからもアクセスできません。 -.TP 2 -o -\f3スタイルシート\fPファイル (\f2stylesheet.css\fP)。生成されるページ上のいくつかの要素について、色、フォントファミリ、フォントサイズ、フォントのスタイル、および配置を制御します。 -.TP 2 -o -\f3doc\-files\fP ディレクトリ。生成先ディレクトリにコピーするイメージ、サンプルコード、ソースコードなどのファイルがすべて格納されます。これらのファイルは、Javadoc ツールによって処理されないため、ファイル内に javadoc タグがあっても無視されます。このディレクトリは、ソースツリーの中にある場合にのみ生成されます。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +パッケージのセット全体に対して1つの概要ページ(overview\-summary\&.html)。概要ページは、生成ドキュメントの先頭ページになります。\fIjavadoc\fRコマンドは、\fI\-overview\fRオプションで指定されたファイル内のHTMLテキストをすべて組み入れます。概要ページが作成されるのは、\fIjavadoc\fRコマンドに複数のパッケージ名を渡した場合のみです。HTMLフレームおよびオプションを参照してください。 .RE -.LP -\f3HTML フレーム\fP -.LP -Javadoc ツールは、下の図に示すように、2 ~ 3 つの HTML フレームを生成します。1 つのパッケージしかない場合 (またはパッケージがない場合) は、パッケージの一覧を省略することによって最低限必要な数のフレームを作成します。単一のパッケージに属するソースファイル (*.java) または単一のパッケージ名を引数として javadoc コマンドに渡す場合は、左側の列にクラスの一覧を表示するフレーム (C) 1 つだけが作成されます。Javadoc に複数のパッケージ名を渡した場合は、概要ページ (Detail) に加えて、すべてのパッケージを一覧表示する第 3 のフレーム (P) が作成されます。この概要ページのファイル名は、 \f2overview\-summary.html です\fP。したがって、このファイルは、2 つ以上のパッケージ名を渡した場合にだけ作成されます。「フレームなし」リンクをクリックするか、overview\-summary.html を最初に表示すると、フレームを省略できます。 -.LP -HTML フレームに慣れていない場合は、特定のフレームを印刷およびスクロールするには、そのフレームに「フォーカス」がなければならないことに注意してください。フレームにフォーカスを与えるには、そのフレームをクリックします。このようにすると、多くのブラウザでは、矢印キーやページキーを使ってそのフレームをスクロールしたり、「印刷」メニューコマンドを使ってそのフレームを印刷したりできます。 -.LP -HTML フレームが必要かどうかによって、次のどちらかのファイルを開始ページとしてロードします。 -.RS 3 -.TP 2 -o -\f2index.html\fP (フレームあり) -.TP 2 -o -\f2overview\-summary.html\fP (フレームなし) +.SS "相互参照ページ" +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +パッケージのセット全体に対して1つのクラス階層ページ(overview\-tree\&.html)。階層ページを表示するには、ナビゲーション・バーの「概要」をクリックしてから、「階層ツリー」をクリックします。 .RE -.LP -\f3生成されるファイルの構造\fP -.LP -生成されるクラスファイルおよびインタフェースファイルは、Java ソースファイルおよびクラスファイルと同じディレクトリ階層に編成されます。1 つのサブパッケージにつき 1 つのディレクトリ、という構造になります。 -.LP -たとえば、 \f2java.applet.Applet\fP クラス用に生成されたドキュメントは、 \f2java/applet/Applet.html\fP に格納されます。生成先のディレクトリの名前が \f2apidocs\fP だとすると、java.applet パッケージのファイル構造は、その下に構築されます。前述のように、「frame」という語を名前に含むファイルは、すべて左上または左下のフレームに表示されます。それ以外の HTML ファイルは、すべて右側のフレームに表示されます。 -.LP -注 \- 下の階層図で、ディレクトリは\f3太字\fP (bold) で示してあります。アスタリスク (\f2*\fP) は、javadoc への引数がパッケージ名ではなくソースファイル名 (*.java) である場合に省略されるファイルおよびディレクトリを示しています。また、引数がソースファイル名の場合、 \f2package\-list\fP は作成されますが、その中身は空です。doc\-files ディレクトリは、ソースツリー内に存在する場合にのみ、生成先に作成されます。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +パッケージごとに1つのクラス階層ページ(package\-tree\&.html)。階層ページを表示するには、特定のパッケージ、クラス、またはインタフェースのページに移動し、「階層ツリー」をクリックしてそのパッケージの階層を表示します。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +パッケージごとに1つの使用ページ(package\-use\&.html)と、クラスおよびインタフェースごとに1つずつの使用ページ(class\-use/classname\&.html)。使用ページでは、指定したクラス、インタフェース、またはパッケージの一部を使用しているパッケージ、クラス、メソッド、コンストラクタ、およびフィールドについて記述されます。たとえば、クラスまたはインタフェースAを例にすると、その使用ページには、Aのサブクラス、Aとして宣言されたフィールド、Aを返すメソッド、A型のパラメータを持つメソッドおよびコンストラクタが組み込まれます。使用ページを表示するには、パッケージ、クラス、またはインタフェースに移動し、ナビゲーション・バーの「使用」リンクをクリックします。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +すべての非推奨APIとその推奨する代替をリストする非推奨APIページ(deprecated\-list\&.html)。非推奨APIは将来の実装で削除される可能性があるので使用しないでください。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +定数フィールドの値用の定数フィールド値ページ(constant\-values\&.html)。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +直列化された形式ページ(serialized\-form\&.html)。フィールドおよびメソッドの説明を含む、直列化可能かつ外部化可能なクラスに関する情報用のページです。このページ内の情報は、APIを使用する開発者ではなく、再実装者に必要な情報です。直列化された形式ページへアクセスするには、直列化されたクラスに移動して、そのクラス・コメントにある「関連項目」セクションで「直列化された形式」をクリックします。標準ドックレットは直列化された形式ページを生成します。このページには、Serializableを実装するすべてのクラス(publicまたは非public)が、その\fIreadObject\fRや\fIwriteObject\fRメソッド、直列化されたフィールド、および\fI@serial\fR、\fI@serialField\fR、\fI@serialData\fRタグからのドキュメンテーション・コメントとともにリストされます。直列化可能なpublicクラスを除外するには、そのクラス(またはそのパッケージ)を\fI@serial\fR +excludeでマークします。直列化可能なpackage\-privateクラスを含めるには、そのクラス(またはそのパッケージ)を\fI@serial\fR +includeでマークします。リリース1\&.4では、\fI\-private\fRオプションを指定せずに\fIjavadoc\fRコマンドを実行することにより、publicクラスおよびprivateクラスの完全に直列化された形式を生成できます。オプションを参照してください。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +索引ページ(\fIindex\-*\&.html\fR)。すべてのクラス名、インタフェース名、コンストラクタ名、フィールド名、およびメソッド名がアルファベット順に並んでいます。索引ページは、Unicodeを扱えるように国際化されています。1つのファイルとして生成することも、先頭文字(英語の場合A\(enZ)ごとに別々のファイルとして生成することもできます。 +.RE +.SS "サポート・ページ" +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +ヘルプ・ページ(help\-doc\&.html)。ナビゲーション・バーや前述の各ページに関する説明が記載されています。デフォルトのヘルプ・ファイルを独自のカスタム・ヘルプ・ファイルでオーバーライドするには、\fI\-helpfile\fRを使用します。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +表示用のHTMLフレームを作成する1つのindex\&.htmlファイル。フレーム付きの先頭ページを表示するにはこのファイルをロードします。index\&.htmlファイルには、テキスト・コンテンツは含まれていません。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +複数のフレーム・ファイル(\fI*\-frame\&.html\fR)。パッケージ、クラス、およびインタフェースのリストが含まれています。フレーム・ファイルはHTMLフレームを表示します。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +パッケージ・リスト・ファイル(package\-list)。\fI\-link\fRおよび\fI\-linkoffline\fRオプションで使用されます。パッケージ・リスト・ファイルはテキスト・ファイルであり、どのリンクからもアクセスできません。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +スタイルシート・ファイル(stylesheet\&.css)。生成されるページの一部の要素について色、フォント・ファミリ、フォント・サイズ、フォント・スタイル、および配置を制御します。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +doc\-filesディレクトリ。宛先ディレクトリにコピーするイメージ、サンプル・コード、ソース・コードなどのファイルが格納されます。これらのファイルは、\fIjavadoc\fRコマンドによって処理されません。このディレクトリは、ソース・ツリーの中に存在する場合にのみ処理されます。 +.RE +.PP +オプションを参照してください。 +.SS "HTMLフレーム" +.PP +\fIjavadoc\fRコマンドは、コマンドに渡された値に基づき、最小限必要な数(2または3)のフレームを生成します。\fIjavadoc\fRコマンドに引数として1つのパッケージ名または1つのパッケージに含まれるソース・ファイルを渡す場合は、パッケージのリストが省略されます。そのかわりに、\fIjavadoc\fRコマンドは左側の列に1つのフレームを作成し、クラスのリストを表示します。複数のパッケージ名を渡した場合は、\fIjavadoc\fRコマンドは、すべてのパッケージをリストする第3のフレームと概要ページ(overview\-summary\&.html)を作成します。フレームを省略するには、「フレームなし」リンクをクリックするか、overview\-summary\&.htmlページからページ・セットを表示します。 +.SS "生成されるファイルの構造" +.PP +生成されるクラス・ファイルおよびインタフェース・ファイルは、Javaソース・ファイルおよびクラス・ファイルと同じディレクトリ階層に編成されます。1つのサブパッケージにつき1つのディレクトリ、という構造になります。 +.PP +たとえば、\fIjava\&.applet\&.Applet\fRクラス用に生成されるドキュメントは、java/applet/Applet\&.htmlに格納されます。 +.PP +生成先ディレクトリの名前が\fIapidocs\fRだとすると、\fIjava\&.applet\fRパッケージのファイルの構造は、次のとおりです。前述のように、\fIframe\fRという語を名前に含むファイルは、すべて左上または左下のフレームに表示されます。それ以外のHTMLファイルは、すべて右側のフレームに表示されます。 +.PP +ディレクトリは太字です。アスタリスク(*)は、\fIjavadoc\fRコマンドへの引数がパッケージ名ではなくソース・ファイル名である場合に省略されるファイルおよびディレクトリを示しています。引数がソース・ファイル名の場合、空のパッケージ・リストが作成されます。doc\-filesディレクトリは、ソース・ツリー内に存在する場合にのみ、生成先に作成されます。生成されるファイルを参照してください。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fBapidocs\fR: 最上位レベル・ディレクトリ +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +index\&.html: HTMLフレームを設定する初期ページ +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +*overview\-summary\&.html: パッケージ・リストとサマリー +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +overview\-tree\&.html: すべてのパッケージのクラス階層 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +deprecated\-list\&.html: すべてのパッケージの非推奨API +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +constant\-values\&.html: すべてのパッケージの静的フィールド値 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +serialized\-form\&.html: すべてのパッケージの直列化されたフォーム +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +*overview\-frame\&.html: 左上のフレームに表示するすべてのパッケージ +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +allclasses\-frame\&.html: 左下のフレームに表示するすべてのクラス +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +help\-doc\&.html: Javadocページの編成に関するヘルプ +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +index\-all\&.html: +\fI\-splitindex\fRオプションなしで作成されたデフォルトの索引 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fBindex\-files\fR: +\fI\-splitindex\fRオプションを指定して作成されたディレクトリ +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +index\-<number>\&.html: +\fI\-splitindex\fRオプションを指定して作成された索引ファイル +.RE +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +package\-list: 外部参照を解決するためのパッケージ名 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +stylesheet\&.css: フォント、色、位置などを定義します +.RE +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fBjava\fR: パッケージ・ディレクトリ +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fBapplet\fR: サブパッケージ・ディレクトリ +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +Applet\&.html: +\fIApplet\fRクラス・ページ +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +AppletContext\&.html: +\fIAppletContext\fRインタフェース +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +AppletStub\&.html: +\fIAppletStub\fRインタフェース +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +AudioClip\&.html: +\fIAudioClip\fRインタフェース +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +package\-summary\&.html: クラスとサマリー +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +package\-frame\&.html: 左下のフレームに表示するパッケージ・クラス +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +package\-tree\&.html: このパッケージのクラス階層 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +package\-use\&.html: このパッケージが使用される場所 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fBdoc\-files\fR: イメージおよびサンプル・ファイルのディレクトリ +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fBclass\-use\fR: イメージおよびサンプル・ファイルの場所 +.sp +\- Applet\&.html: Appletクラスの使用 +.sp +\- AppletContext\&.html: +\fIAppletContext\fRインタフェースの使用 +.sp +\- AppletStub\&.html: +\fIAppletStub\fRインタフェースの使用 +.sp +\- AudioClip\&.html: +\fIAudioClip\fRインタフェースの使用 +.RE +.RE +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fBsrc\-html\fR: ソース・コード・ディレクトリ +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fBjava\fR: パッケージ・ディレクトリ +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fBapplet\fR: サブパッケージ・ディレクトリ +.sp +\- Applet\&.html: Appletソース・コード +.sp +\- AppletContext\&.html: +\fIAppletContext\fRソース・コード +.sp +\- AppletStub\&.html: +\fIAppletStub\fRソース・コード +.sp +\- AudioClip\&.html: +\fIAudioClip\fRソース・コード +.RE +.RE +.RE +.SS "生成されるAPI宣言" +.PP +\fIjavadoc\fRコマンドは、それぞれのクラス、インタフェース、フィールド、コンストラクタ、およびメソッドの記述の最初に、そのAPI用の宣言を生成します。たとえば、\fIBoolean\fRクラスの宣言は、次のようになります。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl - -.fl -\fP\f3apidocs\fP 最上位ディレクトリ -.fl - index.html HTML フレームを設定する初期ページ -.fl - * overview\-summary.html 全パッケージのリスト。先頭文による要約付き -.fl - overview\-tree.html 全パッケージのクラス階層のリスト -.fl - deprecated\-list.html 全パッケージの非推奨 API のリスト -.fl - constant\-values.html 全パッケージの static フィールドの値のリスト -.fl - serialized\-form.html 全パッケージの直列化された形式のリスト -.fl - * overview\-frame.html 全パッケージのリスト。左上のフレームで使用される -.fl - allclasses\-frame.html 全パッケージの全クラスのリスト。左下のフレームで使用される -.fl - help\-doc.html これらのページの構成を示すユーザーヘルプのリスト -.fl - index\-all.html \-splitindex オプションを指定しなかった場合に作成されるデフォルトの索引 -.fl - \f3index\-files\fP \-splitindex オプションを指定した場合に作成されるディレクトリ -.fl - index\-<number>.html \-splitindex オプションを指定した場合に作成される索引ファイル -.fl - package\-list パッケージ名のリスト。外部参照を解決するためだけに使用される -.fl - stylesheet.css フォント、色、配置を定義する HTML スタイルシート -.fl - \f3java\fP パッケージディレクトリ -.fl - \f3applet\fP サブパッケージディレクトリ -.fl - Applet.html Applet クラスのページ -.fl - AppletContext.html AppletContext インタフェースのページ -.fl - AppletStub.html AppletStub インタフェースのページ -.fl - AudioClip.html AudioClip インタフェースのページ -.fl - * package\-summary.html このパッケージのクラスのリスト。先頭文による要約付き -.fl - * package\-frame.html このパッケージのクラスのリスト。左下のフレームで使用される -.fl - * package\-tree.html このパッケージのクラス階層のリスト -.fl - package\-use このパッケージが使用されている場所のリスト -.fl - \f3doc\-files\fP 画像やサンプルファイルを保持するディレクトリ -.fl - \f3class\-use\fP API が使用されている場所のページを保持するディレクトリ -.fl - Applet.html Applet クラスの使用に関するページ -.fl - AppletContext.html AppletContext インタフェースの使用に関するページ -.fl - AppletStub.html AppletStub インタフェースの使用に関するページ -.fl - AudioClip.html AudioClip インタフェースの使用に関するページ -.fl - \f3src\-html\fP ソースコードディレクトリ -.fl - \f3java\fP パッケージディレクトリ -.fl - \f3applet\fP サブパッケージディレクトリ -.fl - Applet.html Applet ソースコードのページ -.fl - AppletContext.html AppletContext ソースコードのページ -.fl - AppletStub.html AppletStub ソースコードのページ -.fl - AudioClip.html AudioClip ソースコードのページ -.fl +public final class Boolean +extends Object +implements Serializable .fi -.SS -生成される API 宣言 -.LP -Javadoc ツールは、それぞれのクラス、インタフェース、フィールド、コンストラクタ、およびメソッドの説明の最初に、その API 用の宣言を生成します。たとえば、 \f2Boolean\fP クラスの宣言は、次のようになります。 -.LP -\f2public final class Boolean\fP -.br -\f2extends Object\fP -.br -\f2implements Serializable\fP -.LP -また、 \f2Boolean.valueOf\fP メソッドの宣言は、次のようになります。 -.LP -\f2public static Boolean valueOf(String s)\fP -.LP -Javadoc ツールでは、修飾子 \f2public\fP、 \f2protected\fP、 \f2private\fP、 \f2abstract\fP、 \f2final\fP、 \f2static\fP、 \f2transient\fP、および \f2volatile\fP は組み込めますが、 \f2synchronized\fP と \f2native\fP は組み込めません。これら後者の 2 つの修飾子は、実装の詳細と見なされているため、API 仕様には含まれません。 -.LP -API では、並行性セマンティクスについて、キーワード \f2synchronized\fP に依存するのではなく、コメントの主説明としてドキュメント化すべきです。 \f2たとえば、「1 つの Enumeration を\fP 複数のスレッドから並行して使用することはできない」などと記述します。ドキュメントには、これらのセマンティクスを実現する方法を記述するべきではありません。たとえば、 \f2Hashtable\fP はスレッドに対して安全である必要がありますが、「エクスポートされるすべてのメソッドを同期化すればそれを実現できる」のようには指定する根拠はありません。バケットレベルで内部的に同期化する権利を残しておく必要があります。そうすれば、より高度な並行性が提供されます。 -.SH "ドキュメンテーションコメント" -.LP -オリジナルの「ドキュメンテーションコメントの仕様」は、「関連項目」を参照してください。 -.SS -ソースコードへのコメントの挿入 -.LP -ソースコードの任意のクラス、インタフェース、メソッド、コンストラクタ、またはフィールドの宣言の前に、ドキュメンテーションコメント ("doc comments") を記述することができます。各パッケージにドキュメンテーションコメントを作成できます。構文は若干異なりますが、概要にもドキュメンテーションコメントを作成できます。ドキュメンテーションコメントは、非公式に「Javadoc コメント」と呼ばれています (この用語は商標関連の使用法に違反)。ドキュメンテーションコメントは、コメントを始まりを示す文字列 \f2/**\fP と、コメントを終わりを示す文字列 \f2*/\fP の間にある文字から構成されます。行の先頭のアスタリスクは、各行に記述できます。詳細は、以下で説明します。コメントのテキストは、複数行にわたって記述できます。 +.if n \{\ +.RE +.\} +.PP +\fIBoolean\&.valueOf\fRメソッドの宣言は次のとおりです。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +public static Boolean valueOf(String s) +.fi +.if n \{\ +.RE +.\} +.PP +\fIjavadoc\fRコマンドは、修飾子\fIpublic\fR、\fIprotected\fR、\fIprivate\fR、\fIabstract\fR、\fIfinal\fR、\fIstatic\fR、\fItransient\fR、および\fIvolatile\fRを含めることができますが、\fIsynchronized\fRおよび\fInative\fRはできません。\fIsynchronized\fRおよび\fInative\fR修飾子は、実装の詳細とみなされているため、API仕様には含まれません。 +.PP +APIでは、並行性セマンティクスについて、キーワード\fIsynchronized\fRに依存するのではなく、コメントの主説明としてドキュメント化する必要があります。たとえば、「1つのenumerationを複数のスレッドから並行して使用することはできない」のように記述します。ドキュメントには、これらのセマンティクスを実現する方法を記述しないでください。たとえば、\fIHashtable\fRオプションはスレッドセーフである必要がありますが、「エクスポートされるすべてのメソッドを同期化してそれを実現する」のように指定する根拠はありません。より高度な並行性のために、バケット・レベルで内部的に同期化する権限を保有しておくことをお薦めします。 +.SH "ドキュメンテーション・コメント" +.PP +このセクションでは、ソース・コードのコメントとコメントの継承について説明します。 +.SS "ソース・コード・コメント" +.PP +ソース・コードの任意のクラス、インタフェース、メソッド、コンストラクタ、またはフィールドの宣言の前に、ドキュメンテーション・コメントを記述することができます。各パッケージにもドキュメンテーション・コメントを作成できます。構文は若干異なりますが、概要にもドキュメンテーション・コメントを作成できます。ドキュメンテーション・コメントは、\fI/**\fRと、終わりを表す\fI*/\fRの間にある文字から構成されます。先頭のアスタリスクは各行で使用でき、次の項で詳しく説明します。コメントのテキストは、複数行にわたって記述できます。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl /** -.fl * This is the typical format of a simple documentation comment -.fl - * that spans two lines. -.fl + * that spans two lines\&. */ -.fl -\fP .fi -.LP -次のようにして 1 行に記述すると、スペースを節約できます。 +.if n \{\ +.RE +.\} +.PP +スペースを節約するには、コメントを1行に入れます。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -/** This comment takes up only one line.*/ -.fl -\fP +/** This comment takes up only one line\&. */ .fi -.LP -\f3コメントの配置\fP \- ドキュメンテーションコメントは、クラス、インタフェース、コンストラクタ、メソッド、またはフィールドの宣言の直前に置かれているときにだけ認識されます。クラスの例、メソッドの例、およびフィールドの例を参照してください。メソッドの本体に置かれているドキュメンテーションコメントは無視されます。javadoc ツールでは、1 つの宣言文につき 1 つのドキュメンテーションコメントだけが認識されます。 -.LP -よくある間違いは、クラスコメントとクラス宣言の間に \f2import\fP 文を置いてしまうことです。このような記述はしないでください。このようなクラスコメントは無視されます。 +.if n \{\ +.RE +.\} +コメントの配置.PP +ドキュメンテーション・コメントは、クラス、インタフェース、コンストラクタ、メソッド、またはフィールド宣言の直前に配置される場合にのみ認識されます。メソッドの本体に置かれているドキュメンテーション・コメントは無視されます。\fIjavadoc\fRコマンドは、宣言文ごとに1つのドキュメンテーション・コメントしか認識しません。タグを使用できる場所を参照してください。 +.PP +よくある間違いは、クラス・コメントとクラス宣言の間に\fIimport\fR文を置いてしまうことです。\fIjavadoc\fRコマンドはクラス・コメントを無視するので、\fIimport\fR文をこの場所に配置しないでください。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl - /** -.fl - * This is the class comment for the class Whatever. -.fl - */ -.fl - -.fl - import com.sun; // MISTAKE \- Important not to put import statement here -.fl - -.fl - public class Whatever { -.fl - } -.fl -\fP -.fi -.LP -\f3ドキュメンテーションコメントは主説明のあとにタグセクションが続く \- コメントの開始区切り文字である\fP \f2/**\fP のあとからタグセクションまでが主説明になります。タグセクションは、行の先頭にある最初の \f2@\fP で定義される最初のブロックタグから始まります (先頭のアスタリスク、空白、先頭の区切り文字 \f2/**\fP は除く)。主説明を記述せず、タグセクションだけのコメントを記述することもできます。主説明は、タグセクション以降に続けることはできません。タグの引数は、複数行にわたって記述できます。タグの数に制限はありません。何回も記述できるタグと、1 回しか記述できないタグがあります。たとえば、次の \f2@see\fP は、タグセクションを開始しています。 -.nf -\f3 -.fl /** -.fl - * This sentence would hold the main description for this doc comment. -.fl - * @see java.lang.Object -.fl + * This is the class comment for the class Whatever\&. */ -.fl -\fP + +import com\&.example; // MISTAKE \- Important not to put import statement here + +public class Whatever{ } .fi -.LP -\f3ブロックタグとインラインタグ\fP \- \f2「タグ」\fPは、Javadoc が処理できる、ドキュメンテーションコメント内の特別なキーワードです。タグには 2 種類あります。1 つは @tag のように表記されるブロックタグ \f2(「標準タグ」とも呼ばれる)、\fP もう 1 つは {@tag} のように中括弧で囲まれるインラインタグ \f2です\fP。ブロックタグが正しく解釈されるためには、行の先頭のアスタリスク、空白、区切り文字 (\f2/**\fP) を除いて、行の先頭に置かなければなりません。これは、 \f2@\fP 文字をテキスト内の別の場所で使用した場合にはタグの開始として解釈されないことを意味しています。行の先頭で \f2@\fP 文字を使用してもそれが解釈されないようにするには、HTML エンティティー \f2@\fP を使用します。それぞれのブロックタグには、対応付けられたテキストがあります。このテキストは、タグのあとから、次のタグの前、またはドキュメンテーションコメントの最後までの間に記述されたテキスト (タグやコメント区切り文字を除く) です。この関連テキストは複数行にわたって記述できます。インラインタグは、テキストを記述できる場所であればどこにでも置くことができ、正しく解釈されます。次の例にはブロックタグ \f2@deprecated\fP とインラインタグ \f2{@link}\fP が含まれています。 +.if n \{\ +.RE +.\} +コメントのパーツ.PP +ドキュメンテーション・コメントには、主説明とその後に続くタグ・セクションが含まれます。主説明は、開始区切り文字\fI/**\fRで始まり、タグ・セクションまで続きます。タグ・セクションは、先頭文字が\fI@\fRの行で定義される最初のブロック・タグから始まります(先頭のアスタリスク、空白文字、先頭の区切り文字\fI/**\fRは除く)。主説明を記述せず、タグ・セクションのみのコメントを記述することもできます。主説明は、タグ・セクション以降に続けることはできません。タグの引数は、複数行にわたって記述できます。タグの数に制限はありません。何回も記述できるタグと、1回しか記述できないタグがあります。たとえば、次の\fI@see\fRタグからタグ・セクションは始まります。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl /** -.fl - * @deprecated As of JDK 1.1, replaced by {@link #setBounds(int,int,int,int)} -.fl + * This sentence holds the main description for this documentation comment\&. + * @see java\&.lang\&.Object */ -.fl -\fP .fi -.LP -\f3コメントは HTML で記述する\fP \- テキストは HTML 形式で記述しなければなりません。これは、HTML のエンティティーを使う必要があること、および HTML タグを使用できることを意味します。記述する HTML のバージョンとしては、使用するブラウザがサポートする任意のバージョンを使用できます。標準ドックレットは、カスケーディングスタイルシート (CSS) とフレームを含め、すべての部分 (ドキュメンテーションコメント以外の部分) で HTML 3.2 に準拠したコードを生成するように作成されています。ただし、フレームセット対応のため、生成される各ファイルには「HTML 4.0」と記述されます。 -.LP -たとえば、より小さい (\f2<\fP) 記号およびより大きい (\f2>\fP) 記号のエンティティーは、 \f2<\fP および \f2>\fP と記述すべきです。同様に、アンパサンド (\f2&\fP) は \f2&\fP と記述すべきです。次の例ではボールドの HTML タグ \f2<b>\fP が示されています。 -.LP -次に、ドキュメンテーションコメントを示します。 +.if n \{\ +.RE +.\} +ブロックおよびインライン・タグ.PP +タグは、\fIjavadoc\fRコマンドが処理するドキュメンテーション・コメント内の特殊なキーワードです。タグには2つのタイプがあります。1つは\fI@tag\fRタグのように表記されるブロック・タグ(スタンドアロン・タグとも呼ばれる)、もう1つは\fI{@tag}\fRタグのように中カッコで囲んで表記されるインライン・タグです。ブロック・タグが解釈されるには、行頭のアスタリスク、空白文字、区切り文字(\fI/**\fR)を除いて、行の先頭に置く必要があります。これは、\fI@\fR文字をテキスト内の別の場所で使用しても、タグの開始として解釈されないことを意味しています。\fI@\fR文字を使用して行を開始しても、それが解釈されないようにするには、HTMLエンティティ\fI@\fRを使用します。それぞれのブロック・タグには、関連付けられたテキストがあります。このテキストは、タグの後から、次のタグの前、またはドキュメンテーション・コメントの最後までの間に記述されたテキストです(タグまたはコメント区切り文字を除く)。この関連テキストは、複数行にわたって記述できます。インライン・タグは、テキストを記述できる場所であればどこにでも置くことができ、解釈されます。次の例にはブロック・タグ\fI@deprecated\fRとインライン・タグ\fI{@link}\fRが含まれています。javadocタグを参照してください。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl /** -.fl - * This is a <b>doc</b> comment. -.fl - * @see java.lang.Object -.fl + * @deprecated As of JDK 1\&.1, replaced by {@link #setBounds(int,int,int,int)} */ -.fl -\fP .fi -.LP -\f3行頭のアスタリスク\fP \- javadoc によるドキュメンテーションコメントの解析時に、各行の先頭にあるアスタリスク (\f2*\fP) 文字は破棄されます。最初のアスタリスク (\f2*\fP) 文字より前にある空白やタブも破棄されます。バージョン 1.4 からは、行の先頭のアスタリスクを省略しても、先頭の空白文字は削除されなくなりました。このため、コード例を直接ドキュメンテーションコメントの \f2<PRE>\fP タグ内にペーストしても、インデントが保持されます。通常、ブラウザは、空白文字をタブよりも一律に解釈します。インデントの起点は左マージンになります (区切り文字 \f2/**\fP または \f2<PRE>\fP タグではなく)。 -.LP -\f3最初の文\fP \- 各ドキュメンテーションコメントの最初の文は、宣言されているエンティティーに関する簡潔かつ完全な要約文である必要があります。この「最初の文」は、直後にスペース、タブ、または改行が続く最初のピリオド (ロケールが英語に設定されている場合)、または最初のタグがある位置で終わります。最初の文は、Javadoc ツールによって HTML ページの最初にあるメンバーの概要の部分にコピーされます。 -.LP -\f3複数フィールドの宣言\fP \- Java では、1 つの文で複数のフィールドを宣言できます。ただし、この文には、1 つのドキュメンテーションコメントしか記述できません。そのコメントが、すべてのフィールドに対してコピーされます。したがって、フィールドごとにドキュメンテーションコメントを記述する必要がある場合は、各フィールドを別々の文で宣言しなければなりません。たとえば、次のドキュメンテーションコメントは、1 つの宣言として記述すると不適切です。この場合は、宣言を 2 つに分けることをお勧めします。 +.if n \{\ +.RE +.\} +HTMLでのコメントの記述.PP +テキストはHTMLエンティティとHTMLタグを使用してHTMLで記述される必要があります。使用するブラウザがサポートする任意のHTMLのバージョンを使用できます。標準ドックレットは、カスケーディング・スタイル・シートおよびフレームを含め、ドキュメンテーション・コメント以外の部分でHTML 3\&.2に準拠したコードを生成します。フレーム・セットのため、生成されたファイルにはHTML 4\&.0が推奨されます。 +.PP +たとえば、より小さい記号(<)およびより大きい記号(>)のエンティティは、\fI<\fRおよび\fI>\fRと記述する必要があります。同様に、アンパサンド(&)は\fI&\fRと記述する必要があります。次の例では、太字のHTMLタグ\fI<b>\fRを使用しています。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +/** + * This is a <b>doc</b> comment\&. + * @see java\&.lang\&.Object + */ +.fi +.if n \{\ +.RE +.\} +先頭のアスタリスク.PP +\fIjavadoc\fRコマンドによるドキュメンテーション・コメントの解析時に、各行の先頭にあるアスタリスク(*)文字は破棄されます。最初のアスタリスク(*)文字より前にある空白やタブも破棄されます。行頭のアスタリスクを省略した場合、インデントを保持したままでサンプル・コードを\fI<PRE>\fRタグ内のドキュメンテーション・コメントに直接貼り付けられるように、先頭の空白文字は削除されなくなります。ブラウザは、空白文字をタブよりも一律に解釈します。インデントの起点は(区切り文字\fI/**\fRまたは\fI<PRE>\fRタグではなく)左マージンになります。 +最初の文.PP +各ドキュメンテーション・コメントの最初の文は、宣言されているエンティティに関する簡潔かつ完全なサマリー文である必要があります。この文は、空白、タブ、または行終了文字が続く最初のピリオド、または最初のブロック・タグがある位置で終わります。最初の文は、\fIjavadoc\fRコマンドによってHTMLページの先頭にあるメンバーのサマリーの部分にコピーされます。 +複数フィールドの宣言.PP +Javaプラットフォームでは、1つの文で複数のフィールドを宣言できます。ただし、この文には、1つのドキュメンテーション・コメントしか記述できません。そのコメントが、すべてのフィールドに対してコピーされます。フィールドごとにドキュメンテーション・コメントを記述する必要がある場合は、各フィールドを別々の文で宣言する必要があります。たとえば、次のドキュメンテーション・コメントは、1つの宣言として記述すると不適切です。この場合は、宣言を2つに分けることをお薦めします。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl /** -.fl * The horizontal and vertical distances of point (x,y) -.fl */ -.fl -public int x, y; // Avoid this -.fl -\fP +public int x, y; // Avoid this + .fi -.LP -上記のコードからは、次のようなドキュメントが生成されます。 +.if n \{\ +.RE +.\} +.PP +\fIjavadoc\fRコマンドは、上のコードから次のようなドキュメントを生成します。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -public int \fP\f3x\fP -.fl +public int x .fi -.RS 3 -The horizontal and vertical distances of point (x,y) +.if n \{\ .RE +.\} +.PP +The horizontal and vertical distances of point (x, y)\&. +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -public int \fP\f3y\fP -.fl +public int y .fi -.RS 3 -The horizontal and vertical distances of point (x,y) +.if n \{\ .RE -.LP -\f3見出しタグはなるべく使用しない\fP \- メンバーに対してドキュメンテーションコメントを記述するときには、<H1> や <H2> などの HTML 見出しタグは、なるべく使わないでください。 Javadoc ツールは、完全に構造化されたドキュメントを作成するので、このような構造化タグが使われていると、生成ドキュメントの形式が悪影響を受けることがあります。ただし、クラスやパッケージのコメントでは、これらの見出しタグを使って独自の構造を組み立ててかまいません。 -.SS -メソッドコメントの自動コピー -.LP -Javadoc ツールには、次の 2 つの場合に、クラスおよびインタフェースのメソッドコメントをコピーまたは「継承」する機能があります。コンストラクタ、フィールド、および入れ子のクラスは、ドキュメンテーションコメントを継承しません。 -.RS 3 -.TP 2 -o -\f3自動的にコメントを継承して見つからないテキストを埋める\fP \- 主説明、 \f2@return\fP タグ、 \f2@param\fP タグ、または \f2@throws\fP タグがメソッドコメントに見つからない場合、Javadoc ツールは、オーバーライドまたは実装している場合はその対象となるメソッドから、対応する主説明またはタグコメントを、次のアルゴリズムに従ってコピーします。 -.LP -厳密には、特定のパラメータの \f2@param\fP タグが見つからない場合、そのパラメータのコメントが、上位の継承階層のメソッドからコピーされます。特定の例外の \f2@throws\fP タグが見つからない場合、その例外が宣言されている場合にかぎり、 \f2@throws\fP タグがコピーされます。 -.LP -この動作はバージョン 1.3 以前の動作とは対照的です。これまでのバージョンでは、主説明またはタグが存在すれば、コメントは一切継承されませんでした。 -.TP 2 -o -\f3{@inheritDoc} タグを含むコメントを明示的に継承する\fP \- インラインタグ \f2{@inheritDoc}\fP を、メソッドの主説明内または \f2@return\fP タグ、 \f2@param\fP タグ、または \f2@throws\fP のいずれかのタグコメント内に挿入します。対応する継承された主説明またはタグコメントがその位置にコピーされます。 +.\} +.PP +The horizontal and vertical distances of point (x, y)\&. +ヘッダー・タグの使用.PP +メンバーに対してドキュメンテーション・コメントを記述するときには、\fI<H1>\fRや\fI<H2>\fRなどのHTML見出しタグを使用しないことをお薦めします。\fIjavadoc\fRコマンドは、完全な構造化ドキュメントを作成するので、このような構造化タグが使用されていると、生成ドキュメントの形式が悪影響を受けることがあります。ただし、クラスやパッケージのコメントでは、これらの見出しを使用して独自の構造を指定してかまいません。 +.SS "メソッド・コメントの継承" +.PP +\fIjavadoc\fRコマンドでは、クラスおよびインタフェースでメソッド・コメントを継承して、欠落したテキストを入力したり、明示的にメソッド・コメントを継承することができます。コンストラクタ、フィールド、およびネストされたクラスは、ドキュメンテーション・コメントを継承しません。 +.PP +\fB注意:\fR +ドキュメンテーション・コメントをコピーに利用するには、継承したメソッドのソース・ファイルが\fI\-sourcepath\fRオプションで指定したパスのみに置かれている必要があります。コマンドラインで、クラスもパッケージも渡す必要はありません。この点はリリース1\&.3\&.\fIn\fR以前とは対照的です。これまでは、クラスがドキュメント化されるクラスであることが必要でした。 +欠落テキストの入力.PP +主説明、または\fI@return\fR、\fI@param\fR、\fI@throws\fRタグがメソッド・コメントから欠落している場合、\fIjavadoc\fRコマンドは、対応する主説明またはタグ・コメントを、それがオーバーライドまたは実装しているメソッド(ある場合)からコピーします。メソッド・コメントの継承を参照してください。 +.PP +特定のパラメータの\fI@param\fRタグが見つからない場合、そのパラメータのコメントが、上位の継承階層のメソッドからコピーされます。特定の例外の\fI@throws\fRタグが見つからない場合、その例外が宣言されている場合にかぎり、\fI@throws\fRタグがコピーされます。 +.PP +この動作はリリース1\&.3以前の動作とは対照的です。これまでのバージョンでは、主説明またはタグが存在すれば、コメントは一切継承されませんでした。 +.PP +javadocタグおよびオプションを参照してください。 +明示的な継承.PP +\fI{@inheritDoc}\fRインライン・タグをメソッドの主説明または\fI@return\fR、\fI@param\fR、\fI@throws\fRタグ・コメントに挿入します。対応する継承された主説明またはタグ・コメントは、その場所にコピーされます。 +.SS "クラスおよびインタフェースの継承" +.PP +コメントの継承は、クラスおよびインタフェースからの継承の、考えられるすべての場合に発生します。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +クラスのメソッドがスーパークラスのメソッドをオーバーライドしている場合 .RE -.LP -ドキュメンテーションコメントを実際にコピーに利用するには、継承したメソッドのソースファイルが \-sourcepath で指定したパスだけに置かれていることが必要になります。コマンド行で、クラスもパッケージも渡す必要はありません。この点は、クラスがドキュメント化されるクラスでなければならなかった 1.3.x 以前のリリースと異なります。 -.LP -\f3クラスおよびインタフェースからの継承\fP \- クラスおよびインタフェースから継承する次の 3 つの場合に、コメントの継承が行われます。 -.RS 3 -.TP 2 -o -クラスのメソッドがスーパークラスのメソッドをオーバーライドしている -.TP 2 -o -インタフェースのメソッドがスーパーインタフェースのメソッドをオーバーライドしている -.TP 2 -o -クラスのメソッドがインタフェースのメソッドを実装している +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +インタフェースのメソッドがスーパーインタフェースのメソッドをオーバーライドしている場合 .RE -.LP -最初の 2 つのケース (メソッドがオーバーライドしている場合) では、Javadoc ツールは、そのコメントが継承されているかどうかにかかわらず、オーバーライドしているメソッドのドキュメント内に「オーバーライド」という小見出しを生成し、オーバーライドされているメソッドへのリンクを書き込みます。 -.LP -3 つ目のケース (特定のクラスのメソッドがインタフェースのメソッドを実装している場合) では、javadoc ツールは、オーバーライドしているメソッドのドキュメント内に「定義」という小見出しを生成し、実装されているメソッドへのリンクを書き込みます。これは、コメントが継承されているかどうかにかかわりません。 -.LP -\f3メソッドの説明が継承されるアルゴリズム\fP \- あるメソッドにドキュメンテーションコメントが記述されていない場合、または {@inheritDoc} タグがある場合、Javadoc ツールは、次のようなアルゴリズムを使用して適切なコメントを検索します。 このアルゴリズムは、もっとも適切なドキュメンテーションコメントを検索できるように設計されており、スーパークラスよりもインタフェースが優先されるようになっています。 -.RS 3 -.TP 3 -1. -直接に実装されている (または、拡張されている) インタフェースを、メソッドの宣言で implements (または extends) キーワードのあとに登場する順序で、1 つずつ調べる。このメソッドについて最初に見つかったドキュメンテーションコメントを採用する -.TP 3 -2. -手順 1 でドキュメンテーションコメントが見つからなかった場合は、直接実装されている (または、拡張されている) インタフェースのそれぞれに対して、このアルゴリズム全体を再帰的に適用する (その際の順序は、手順 1 でインタフェースを調べたときの順序と同じ) -.TP 3 -3. -手順 2 でドキュメンテーションコメントが見つからなかった場合で、このクラスが Object 以外のクラスである (インタフェースではない) 場合は、次のように処理する -.RS 3 -.TP 3 -a. -スーパークラスにこのメソッドについてのドキュメンテーションコメントが記述されていれば、そのコメントを採用する -.TP 3 -b. -手順 3a でドキュメンテーションコメントが見つからなかった場合は、スーパークラスに対して、このアルゴリズム全体を適用する +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +クラスのメソッドがインタフェースのメソッドを実装している場合 +.RE +.PP +最初の2つのケースでは、\fIjavadoc\fRコマンドは、オーバーライドしているメソッドのドキュメント内に\fI「オーバーライド」\fRという小見出しを生成します。コメントが継承されているかどうかにかかわらず、オーバーライドされているメソッドへのリンクが含まれます。 +.PP +3つ目のケース(特定のクラスのメソッドがインタフェースのメソッドを実装している場合)では、\fIjavadoc\fRコマンドは、オーバーライドしているメソッドのドキュメント内に\fI「定義」\fRという小見出しを生成します。コメントが継承されているかどうかにかかわらず、実装されているメソッドへのリンクが含まれます。 +.SS "メソッド・コメントのアルゴリズム" +.PP +メソッドにドキュメンテーション・コメントがない、または\fI{@inheritDoc}\fRタグがある場合、\fIjavadoc\fRコマンドは次のアルゴリズムを使用して適用できるコメントを検索します。アルゴリズムは、最も特定される適用可能なドキュメンテーション・コメントを探し、スーパークラスよりもインタフェースを優先するように設計されています。 +.sp +.RS 4 +.ie n \{\ +\h'-04' 1.\h'+01'\c +.\} +.el \{\ +.sp -1 +.IP " 1." 4.2 +.\} +直接に実装されている(または、拡張されている)インタフェースを、メソッドの宣言で\fIimplements\fR(または\fIextends\fR)という語の後に出現する順序で、1つずつ調べます。このメソッドについて最初に見つかったドキュメンテーション・コメントを採用します。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04' 2.\h'+01'\c +.\} +.el \{\ +.sp -1 +.IP " 2." 4.2 +.\} +手順1でドキュメンテーション・コメントが見つからなかった場合は、直接実装されている(または、拡張されている)インタフェースのそれぞれに対して、このアルゴリズム全体を再帰的に適用します(その際の順序は、手順1でインタフェースを調べたときの順序と同じ)。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04' 3.\h'+01'\c +.\} +.el \{\ +.sp -1 +.IP " 3." 4.2 +.\} +手順2でドキュメンテーション・コメントが見つからなかった場合で、このクラスが\fIObject\fR以外のクラスであるが、インタフェースではない場合は、次のように処理します。 +.sp +.RS 4 +.ie n \{\ +\h'-04' 1.\h'+01'\c +.\} +.el \{\ +.sp -1 +.IP " 1." 4.2 +.\} +スーパークラスにこのメソッドについてのドキュメンテーション・コメントが記述されている場合は、そのコメントを採用します。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04' 2.\h'+01'\c +.\} +.el \{\ +.sp -1 +.IP " 2." 4.2 +.\} +手順3aでドキュメンテーション・コメントが見つからなかった場合は、スーパークラスに対して、このアルゴリズム全体を再帰的に適用します。 .RE .RE -.SH "javadoc タグ" -.LP -Javadoc ツールは、Java のドキュメンテーションコメント内に埋め込まれた特別なタグを解析します。これらのドキュメンテーションタグを使うと、書式の整った完全な API ドキュメントをソースコードから自動的に生成できます。タグは「アットマーク」記号 (\f2@\fP) で始まり、大文字と小文字の区別があります。タグは、大文字と小文字を使用して、表示されているとおりに入力する必要があります。タグは、行の先頭 (先行する空白と省略可能なアスタリスクは除く) に置かなければなりません。慣例として、同じ名前のタグは 1 か所にまとめて記述するようにします。たとえば、 \f2@see\fP タグはすべて同じ場所に配置します。 -.LP -タグには 2 つのタイプがあります。 -.RS 3 -.TP 2 -o -\f3ブロックタグ\fP \- 主説明に続くタグセクション内にのみ記述可能。ブロックタグは、 \f2@tag\fP の形式をとります。 -.TP 2 -o -\f3インラインタグ\fP \- 主説明内、またはブロックタグのコメント内に記述可能。インラインタグは、 \f2{@tag}\fP.のように中括弧で囲みます。 +.SH "JAVADOCタグ" +.PP +\fIjavadoc\fRコマンドは、Javaのドキュメンテーション・コメント内に埋め込まれた特別なタグを解析します。\fIjavadoc\fRタグを使用すると、完全な整形式のAPIをソース・コードから自動的に生成できます。タグはアットマーク記号(\fI@\fR)で始まり、大文字と小文字が区別されます。これらのタグは、表示されているとおりに大文字と小文字を使用して入力する必要があります。タグは、行の先頭(先頭の空白文字と省略可能なアスタリスクの後)に置く必要があります。そうしないと、テキストとして扱われます。慣例として、同じ名前のタグは1箇所にまとめます。たとえば、\fI@see\fRタグが複数ある場合は、すべて同じ場所にまとめて配置します。詳細は、タグを使用できる場所を参照してください。 +.PP +タグには、次のタイプがあります。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +ブロック・タグ: ブロック・タグは主説明に続くタグ・セクション内にのみ配置します。ブロック・タグは、\fI@tag\fRの形式をとります。 .RE -.LP -今後のリリースで導入されるタグについては、 -.na -\f2「Proposed Javadoc Tags」\fP @ -.fi -http://java.sun.com/j2se/javadoc/proposed\-tags.htmlを参照してください。 -.LP -現時点で有効なタグは、次のとおりです。 -.LP -.TS -.if \n+(b.=1 .nr d. \n(.c-\n(c.-1 -.de 35 -.ps \n(.s -.vs \n(.vu -.in \n(.iu -.if \n(.u .fi -.if \n(.j .ad -.if \n(.j=0 .na -.. +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +インライン・タグ: インライン・タグは主説明内またはブロック・タグのコメント内の任意の場所に配置します。インライン・タグは\fI{@tag}\fRのように中カッコで囲みます。 +.RE +.PP +カスタム・タグについては、\-tag tagname:Xaoptcmf:"taghead"を参照してください。タグを使用できる場所も参照してください。 +.SS "タグの説明" +.PP +@author \fIname\-text\fR +.RS 4 +JDK 1\&.0で導入 +.sp +\fI\-author\fRオプションが使用されている場合、指定した名前のテキストの作成者エントリを生成されるドキュメントに追加します。1つのドキュメンテーション・コメントに複数の\fI@author\fRタグを含めることができます。1つの\fI@author\fRタグに1つの名前を指定することも、複数の名前を指定することもできます。前者の場合は、\fIjavadoc\fRコマンドによって名前と名前の間にカンマ(,)と空白文字が挿入されます。後者の場合は、テキスト全体が解析されることなく、生成ドキュメントにコピーされます。したがって、カンマではなく、各言語に対応した名前区切り文字を使用する必要があるときに、1行に複数の名前を指定できます。JavadocツールでのDocコメントの記述方法の@authorに関する項 +(http://www\&.oracle\&.com/technetwork/java/javase/documentation/index\-137868\&.html#@author)を参照してください。 +.RE +.PP +{@code \fItext\fR} +.RS 4 +JDK 1\&.5で導入 +.sp +\fI<code>{@literal}</code>\fRと同等です。 +.sp +テキストをHTMLマークアップまたはネストされたJavadocタグとして解釈せずに、textをコード・フォントで表示します。これにより、ドキュメンテーション・コメントでは、パラメータの型(\fI<Object>\fR)、不等号(\fI3 < 4\fR)、矢印(\fI<\-\fR)などで、通常の山カッコ(<および>)をHTMLエンティティ(\fI<\fRおよび\fI>\fR)のかわりに使用できます。たとえば、ドキュメンテーション・コメント\fI{@code A<B>C}\fRは\fIA<B>C\fRとして変更されずに生成されたHTMLページに表示されます。つまり、\fI<B>\fRが太字として解釈されず、そのフォントはコード・フォントになります。コード・フォントなしで同じ機能を実現するには、\fI{@literal}\fRタグを使用します。 +.RE +.PP +@deprecated \fIdeprecated\-text\fR +.RS 4 +JDK 1\&.0で導入 +.sp +このAPIは動作し続けますが、このAPIを使用しないことを薦めるコメントを追加します。\fIjavadoc\fRコマンドは、\fIdeprecated\-text\fRを主説明の前に移動してイタリックにし、その前に太字の警告「推奨されていません。」を追加します。このタグは、すべてのドキュメンテーション・コメント、つまり概要、パッケージ、クラス、インタフェース、コンストラクタ、メソッド、およびフィールドで有効です。 +.sp +非推奨テキストの最初の文では、そのAPIが推奨されなくなった時期と、代替として使用するAPIをユーザーに提示する必要があります。\fIjavadoc\fRコマンドは、この最初の文を、サマリー・セクションと索引にコピーします。その後の文で非推奨になった理由を説明することもできます。代替APIを指し示す\fI{@link}\fRタグ(Javadoc 1\&.2以降の場合)を含める必要があります。 +.sp +\fI@deprecated annotation\fRタグを使用してプログラム要素を非推奨にします。APIを非推奨にする方法と時期 +(http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/javadoc/deprecation/deprecation\&.html)を参照してください。 +.sp +JavadocツールでのDocコメントの記述方法の@deprecatedに関する項 + +(http://www\&.oracle\&.com/technetwork/java/javase/documentation/index\-137868\&.html#@deprecated)も参照してください。 +.RE +.PP +{@docRoot} +.RS 4 +JDK 1\&.3で導入 +.sp +生成されるページからの、生成ドキュメントの(生成先)ルート・ディレクトリへの相対パスを表します。このタグは、著作権のページや会社のロゴなど、生成されるすべてのページから参照するファイルを組み込むときに便利です。通常は、各ページの最下部から著作権のページにリンクします。 +.sp +この\fI{@docRoot}\fRタグは、コマンドラインでもドキュメンテーション・コメント内でも使用できます。このタグは、任意のタグ(\fI@return\fR、\fI@param\fRおよび\fI@deprecated\fRタグなど)のテキスト部分を含む、すべてのドキュメンテーション・コメント、つまり概要、パッケージ、クラス、インタフェース、コンストラクタ、メソッド、およびフィールドで有効です。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +コマンドラインで、ヘッダー、フッターまたは最下部が次のように定義されます。\fIjavadoc \-bottom \*(Aq<a href="{@docRoot}/copyright\&.html">Copyright</a>\*(Aq\fR +.sp +\fI{@docRoot}\fRタグをmakefile内でこのように利用する場合、一部の\fImakefile\fRプログラムでは、中カッコ\fI{}\fR文字を特別にエスケープする必要があります。たとえば、Inprise MAKEバージョン5\&.2をWindows上で実行する場合は、\fI{{@docRoot}}\fRのように、中カッコを二重にする必要があります。\fI\-bottom\fRオプションなどのオプションへの引数を囲むのに、二重(一重ではなく)引用符も必要です(\fIhref\fR引数を囲む引用符は省略)。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +ドキュメンテーション・コメントでは +.sp +.if n \{\ +.RS 4 +.\} .nf -.nr #~ 0 -.if n .nr #~ 0.6n -.ds #d .d -.if \(ts\n(.z\(ts\(ts .ds #d nl -.fc -.nr 33 \n(.s -.rm 80 81 -.nr 34 \n(.lu -.eo -.am 81 -.br -.di a+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -\f3導入された JDK/SDK のバージョン\fP -.br -.di -.nr a| \n(dn -.nr a- \n(dl -.. -.ec \ -.35 -.nf -.ll \n(34u -.nr 80 0 -.nr 38 \w\f3タグ\fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w\f2@author\fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w\f2{@code}\fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w\f2{@docRoot}\fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w\f2@deprecated\fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w\f2@exception\fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w\f2{@inheritDoc}\fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w\f2{@link}\fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w\f2{@linkplain}\fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w\f2{@literal}\fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w\f2@param\fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w\f2@return\fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w\f2@see\fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w\f2@serial\fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w\f2@serialData\fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w\f2@serialField\fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w\f2@since\fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w\f2@throws\fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w\f2{@value}\fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w\f2@version\fP -.if \n(80<\n(38 .nr 80 \n(38 -.80 -.rm 80 -.nr 81 0 -.nr 38 \w1.0 -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \w1.5 -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \w1.3 -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \w1.0 -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \w1.0 -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \w1.4 -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \w1.2 -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \w1.4 -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \w1.5 -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \w1.0 -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \w1.0 -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \w1.0 -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \w1.2 -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \w1.2 -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \w1.2 -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \w1.1 -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \w1.2 -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \w1.4 -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \w1.0 -.if \n(81<\n(38 .nr 81 \n(38 -.81 -.rm 81 -.nr 38 \n(a- -.if \n(81<\n(38 .nr 81 \n(38 -.35 -.nf -.ll \n(34u -.nr 38 1n -.nr 79 0 -.nr 40 \n(79+(0*\n(38) -.nr 80 +\n(40 -.nr 41 \n(80+(3*\n(38) -.nr 81 +\n(41 -.nr TW \n(81 -.if t .if \n(TW>\n(.li .tm Table at line 851 file Input is too wide - \n(TW units -.fc   -.nr #T 0-1 -.nr #a 0-1 -.eo -.de T# -.ds #d .d -.if \(ts\n(.z\(ts\(ts .ds #d nl -.mk ## -.nr ## -1v -.ls 1 -.ls -.. -.ec -.ne \n(a|u+\n(.Vu -.if (\n(a|+\n(#^-1v)>\n(#- .nr #- +(\n(a|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f3タグ\fP\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 (\n(41u+\n(81u-\n(a-u)/2u -.in +\n(37u -.a+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f2@author\fP\h'|\n(41u'1.0 -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f2{@code}\fP\h'|\n(41u'1.5 -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f2{@docRoot}\fP\h'|\n(41u'1.3 -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f2@deprecated\fP\h'|\n(41u'1.0 -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f2@exception\fP\h'|\n(41u'1.0 -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f2{@inheritDoc}\fP\h'|\n(41u'1.4 -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f2{@link}\fP\h'|\n(41u'1.2 -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f2{@linkplain}\fP\h'|\n(41u'1.4 -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f2{@literal}\fP\h'|\n(41u'1.5 -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f2@param\fP\h'|\n(41u'1.0 -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f2@return\fP\h'|\n(41u'1.0 -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f2@see\fP\h'|\n(41u'1.0 -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f2@serial\fP\h'|\n(41u'1.2 -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f2@serialData\fP\h'|\n(41u'1.2 -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f2@serialField\fP\h'|\n(41u'1.2 -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f2@since\fP\h'|\n(41u'1.1 -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f2@throws\fP\h'|\n(41u'1.2 -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f2{@value}\fP\h'|\n(41u'1.4 -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f2@version\fP\h'|\n(41u'1.0 -.fc -.nr T. 1 -.T# 1 -.35 -.rm a+ -.TE -.if \n-(b.=0 .nr c. \n(.c-\n(d.-44 -.LP -カスタムタグについては、\-tag オプションを参照してください。 -.RS 3 -.TP 3 -@author\ name\-text -\-author オプションが使用されている場合、指定された \f2name\-text\fP を含む [作成者] エントリを生成ドキュメントに追加します。1 つのドキュメンテーションコメントに複数の \f2@author\fP タグを含めることができます。1 つの \f2@author\fP タグに 1 つの名前を指定することも、複数の名前を指定することもできます。前者の場合は、Javadoc ツールによって名前と名前の間にコンマ (\f2,\fP) と空白が挿入されます。後者の場合は、テキスト全体が、解析されることなく、生成ドキュメントにそのままコピーされます。したがって、コンマではなく、各言語に対応した名前区切り文字を使う必要があるときは、1 つのタグに複数の名前を指定してください。 -.RE -.LP -詳細については、「タグを使用できる場所」および -.na -\f2@author タグのドキュメント\fP @ -.fi -http://www.oracle.com/technetwork/java/javase/documentation/index\-137868.html#@authorを参照してください。 -.LP -.RS 3 -.TP 3 -@deprecated\ deprecated\-text 注: @Deprecated 注釈を使って特定のプログラム要素を非推奨にできます。 -.RE -.LP -この API は動作し続けますが、この API を使用するべきではないことを示すコメントを追加します。Javadoc ツールは、 \f2deprecated\-text\fP を主説明の前に移動してイタリックにし、その前にボールドの警告「推奨されません。」を追加します。このタグは、すべてのドキュメンテーションコメント、つまり概要、パッケージ、クラス、インタフェース、コンストラクタ、メソッド、およびフィールドで有効です。 -.LP -\f2deprecated\-text\fP の最初の文では、少なくとも、その API が推奨されなくなった時期と、代替使用するべき API を読者に提示する必要があります。Javadoc ツールは、この最初の文だけを、概要セクションと索引にコピーします。そのあとの文では、その API が推奨されない理由を説明することもできます。代わりのAPI を指し示す \f2{@link}\fP タグ ( Javadoc 1.2 以降の場合) を含めるべきです。 -.LP -詳細については、 -.na -\f2@deprecated タグのドキュメント\fP @ -.fi -http://www.oracle.com/technetwork/java/javase/documentation/index\-137868.html#@deprecatedを参照してください。 -.RS 3 -.TP 2 -o -Javadoc 1.2 以降では \f2{@link}\fP タグを使用します。これにより、必要な場所にインラインでリンクを作成できます。次に例を示します。 -.nf -\f3 -.fl /** -.fl - * @deprecated As of JDK 1.1, replaced by {@link #setBounds(int,int,int,int)} -.fl + * See the <a href="{@docRoot}/copyright\&.html">Copyright</a>\&. */ -.fl - -.fl -\fP .fi -.TP 2 -o -Javadoc 1.1 の場合の標準形式は、 \f2@see\fP タグ (インラインは不可) を \f2@deprecated\fP タグごとに作成することです。 +.if n \{\ .RE -.LP -推奨されないタグについての詳細は、 -.na -\f2@deprecated タグ\fP @ -.fi -http://java.sun.com/javase/6/docs/technotes/guides/javadoc/deprecation/index.htmlのドキュメントを参照してください。 -.LP -.RS 3 -.TP 3 -{@code\ text} -\f2<code>{@literal}</code>\fP と同等です。 -.LP -テキストを \f2HTML マークアップ\fP または \f2入れ子になった javadoc タグ\fP として解釈せずに、text をコードフォントで表示します。このため、ドキュメンテーションコメント内で通常の山括弧 (\f2<\fP および \f2>\fP) を HTML エンティティー (\f2<\fP および \f2>\fP) の代わりに使用できます。たとえば、パラメータの型 (\f2<Object>\fP)、不等号 (\f23 < 4\fP)、矢印 (\f2<\-\fP) などです。たとえば、次のドキュメンテーションコメント -.nf -\f3 -.fl - \fP\f4{@code A<B>C}\fP\f3 -.fl - -.fl -\fP -.fi -.LP -は、生成された HTML ページで、次のようにそのまま表示されます。 -.nf -\f3 -.fl - \fP\f4A<B>C\fP\f3 -.fl - -.fl -\fP -.fi -.LP -ここで注目すべき点は、 \f2<B>\fP が太字として解釈されず、そのフォントはコードフォントになる、という点です。 -.LP -コードフォントなしで同じ機能を実現するには、\f2{@literal}\fP を使用します。 -.LP -.TP 3 -{@docRoot} -生成されるページから見た、生成ドキュメントの (生成先の) ルートディレクトリへの相対パスを表します。このタグは、著作権のページや会社のロゴなど、生成されるすべてのページから参照するファイルを組み込むときに便利です。通常は、各ページの下部から著作権のページにリンクします。 -.LP -この \f2{@docRoot}\fP タグは、コマンド行でもドキュメンテーションコメント内でも使用できます。このタグは、@return、@param、@deprecated などの任意のタグのテキスト部分を含む、すべてのドキュメンテーションコメント、つまり概要、パッケージ、クラス、インタフェース、コンストラクタ、メソッド、およびフィールドで有効です。 -.RS 3 -.TP 3 -1. -コマンド行では、ヘッダー、フッター、またはボトムノートは次のように定義します。 -.nf -\f3 -.fl - javadoc \-bottom '<a href="{@docRoot}/copyright.html">Copyright</a>' -.fl - -.fl -\fP -.fi -.LP -注 \- \f2{@docRoot}\fP を Makefile 内でこのように利用する場合、一部の Makefile プログラムでは、中括弧 { } 文字をエスケープする必要があります。たとえば、Inprise MAKE バージョン 5.2 を Windows 上で実行する場合は、 \f2{{@docRoot}} のように、中括弧を二重にする必要があります\fP。さらに、 \f2\-bottom\fP などのオプションに対する引数を、単一引用符ではなく二重引用符で囲む必要もあります ( \f2href\fP の引数を囲む引用符は省略)。 -.TP 3 -2. -ドキュメンテーションコメントの中では、次のように使用します。 -.nf -\f3 -.fl - /** -.fl - * See the <a href="{@docRoot}/copyright.html">Copyright</a>. -.fl - */ -.fl - -.fl -\fP -.fi -.RE -.LP -このタグが必要な理由は、生成ドキュメントが、サブパッケージと同じ深さを持つ階層構造のディレクトリに格納されるからです。次に例を示します。 -.nf -\f3 -.fl - <a href="{@docRoot}/copyright.html"> -.fl - -.fl -\fP -.fi -.LP -次のように解決されます。 -.nf -\f3 -.fl - <a href="../../copyright.html"> java/lang/Object.java の場合 -.fl - -.fl -\fP -.fi -.LP -かつ -.nf -\f3 -.fl - <a href="../../../copyright.html"> java/lang/ref/Reference.java の場合 -.fl - -.fl -\fP -.fi -.LP -.TP 3 -@exception\ class\-name\ description -\f2@exception\fP タグは \f2@throws\fP と同義です。 -.LP -.TP 3 -{@inheritDoc}\ -もっとも近い継承可能なクラスまたは実装可能なインタフェースから、このタグの現在のドキュメンテーションコメントに、ドキュメントを継承 (コピー) します。この機能により、より汎用的なコメントを継承ツリーの上位に記述し、コピーしたテキストを使って記述することができます。 -.LP -このタグは、ドキュメンテーションコメントの次の位置でのみ有効です。 -.RS 3 -.TP 2 -o -メソッドの主説明ブロック内。この場合、主説明は、上位階層のクラスまたはインタフェースからコピーされる -.TP 2 -o -メソッドの @return、@param、@throws タグのテキスト引数内。この場合、タグテキストは、上位階層の対応するタグからコピーされる -.RE -.LP -継承階層でコメントを見つける方法に関する正確な説明について、「メソッドコメントの自動コピー」を参照してください。このタグが見つからない場合、コメントは、この節で説明するルールに応じて、自動的に継承されるかどうかが決まります。 -.LP -.TP 3 -{@link\ package.class#member\ label} -表示テキスト \f2label\fP とのインラインリンクを挿入します。label は、参照クラスの指定されたパッケージ、クラス、またはメンバーの名前のドキュメンテーションを指し示します。このタグは、@return、@param、@deprecated などの任意のタグのテキスト部分を含む、すべてのドキュメンテーションコメント、つまり概要、パッケージ、クラス、インタフェース、コンストラクタ、メソッド、およびフィールドで有効です。 -.LP -このタグは \f2@see\fP と非常によく似ています。どちらも、\f2package.class\fP\f2#\fP\f2member\fP と \f2label\fP の参照の仕方が同じで、有効な構文もまったく同じです。大きな違いは、 \f2{@link}\fP では、[関連項目] セクションにリンクが配置される代わりに、インラインのリンクが生成されるという点です。また、インラインテキストのほかの部分と区別するために、 \f2{@link}\fP タグの最初と最後に中括弧を記述します。ラベルの中で「}」を使う必要がある場合は、HTML エンティティーの「}」を使います。 -.LP -1 文内で使用可能な \f2{@link}\fP タグの数に制限はありません。このタグは、ドキュメンテーションコメントの主説明部分、または @deprecated、@return、@param などの任意のタグのテキスト部分で使うことができます。 -.LP -たとえば、次のコメントでは \f2getComponentAt(int, int)\fP メソッドを参照しています。 -.nf -\f3 -.fl -{@link #getComponentAt(int, int) getComponentAt} メソッドを使用します。 -.fl - -.fl -\fP -.fi -.LP -標準ドックレットでは、上記のコメントから次の HTML が生成されます (このコメントが同じパッケージの別のクラスを参照している場合)。 -.nf -\f3 -.fl -<a href="Component.html#getComponentAt(int, int)">getComponentAt</a> メソッドを使用します。 -.fl - -.fl -\fP -.fi -.LP -この HTML は、Web ページ上では次のように表示されます。 -.nf -\f3 -.fl -getComponentAt メソッドを使用します。 -.fl - -.fl -\fP -.fi -.LP -\f2{@link}\fP を拡張してドキュメント化されないクラスへのリンクも可能にするには、\f2\-link\fP オプションを使用します。 -.LP -詳細については、 -.na -\f2{@link} タグのドキュメント\fP @ -.fi -http://www.oracle.com/technetwork/java/javase/documentation/index\-137868.html#{@link}を参照してください。 -.LP -.TP 3 -{@linkplain\ package.class#member\ label} -リンクのラベルがコードフォントではなくプレーンテキストで表示される点以外は \f2{@link}\fP と同じです。ラベルがプレーンテキストで記述されていると便利です。次の例を参照してください。例: -.nf -\f3 -.fl - {@linkplain add() the overridden method} を参照してください。 -.fl - -.fl -\fP -.fi -.LP -これは以下のように表示されます。 -.LP -the overridden method を参照してください。 -.LP -.TP 3 -{@literal\ text} -テキストを HTML マークアップまたは入れ子になった javadoc タグとして解釈せずに、 \f2text\fP を表示します。このため、ドキュメンテーションコメント内で通常の山括弧 (\f2<\fP および \f2>\fP) を HTML エンティティー (\f2<\fP および \f2>\fP) の代わりに使用できます。たとえば、パラメータの型 (\f2<Object>\fP)、不等号 (\f23 < 4\fP)、矢印 (\f2<\-\fP) などです。たとえば、次のドキュメンテーションコメント -.nf -\f3 -.fl - \fP\f4{@literal A<B>C}\fP\f3 -.fl - -.fl -\fP -.fi -.LP -は、生成された HTML ページはブラウザで次のようにそのまま表示されます。 -.LP -\f2\ \ \ \ \ \fPA<B>C -.LP -ここで注目すべき点は、 \f2<B>\fP が太字として解釈されず、そのフォントはコードフォントになる、という点です。 -.LP -コードフォントで同じ機能を実現するには、\f2{@code}\fP を使用します。 -.LP -.TP 3 -@param\ parameter\-name description -指定された \f2parameter\-name\fP のあとに指定された \f2description\fP が続くパラメータを、[パラメータ] セクションに追加します。ドキュメンテーションコメントを記述するときには、 \f2description\fP を複数行にわたって記述することもできます。このタグは、メソッド、コンストラクタ、またはクラスの doc コメント内でのみ有効です。 -.LP -\f2parameter\-name\fP は、メソッドまたはコンストラクタでのパラメータの名前か、クラス、メソッドまたはコンストラクタのタイプパラメータの名前になります。山括弧でパラメータ名を囲むと、型パラメータを使用することを 指定します。 -.LP -クラスの型パラメータの例: -.nf -\f3 -.fl - /** -.fl - * @param <E> Type of element stored in a list -.fl - */ -.fl - public interface List<E> extends Collection<E> { -.fl - } -.fl - -.fl -\fP -.fi -.LP -メソッドの型パラメータの例: -.nf -\f3 -.fl - /** -.fl - * @param string the string to be converted -.fl - * @param type the type to convert the string to -.fl - * @param <T> the type of the element -.fl - * @param <V> the value of the element -.fl - */ -.fl - <T, V extends T> V convert(String string, Class<T> type) { -.fl - } -.fl - -.fl -\fP -.fi -.LP -詳細については、 -.na -\f2@param タグのドキュメント\fP @ -.fi -http://www.oracle.com/technetwork/java/javase/documentation/index\-137868.html#@paramを参照してください。 -.LP -.TP 3 -@return\ description -[戻り値] セクションを追加して、 \f2description\fP のテキストを書き込みます。このテキストでは、戻り値の型と、取り得る値の範囲について記述する必要があります。このタグは、メソッドのドキュメンテーションコメントでのみ有効です。 -.LP -詳細については、 -.na -\f2@return タグのドキュメント\fP @ -.fi -http://www.oracle.com/technetwork/java/javase/documentation/index\-137868.html#@returnを参照してください。 -.LP -.TP 3 -@see\ reference -「関連項目」見出しを追加し、 \f2reference を指すリンクか、またはテキストエントリを書き込みます\fP。ドキュメンテーションコメントには任意の数の \f2@see\fP タグを含めることができますが、それらはすべて同じ見出しの下にグループ化されます。 \f2@see\fP タグには、次の 3 種類の形式があります。もっともよく使われるのは、3 番目の形式です。このタグは、すべてのドキュメンテーションコメント、つまり概要、パッケージ、クラス、インタフェース、コンストラクタ、メソッド、およびフィールドで有効です。パッケージ、クラス、またはメンバーに対するインラインリンクを文中に挿入する方法は、\f2{@link}\fP を参照してください。 -.RS 3 -.TP 3 -@see "string" -\f2string のテキストエントリを追加します\fP。リンクは生成されません。 \f2string\fP は、書籍または URL ではアクセスできない情報の参照先です。Javadoc ツールは、最初の文字が二重引用符 (\f2"\fP) かどうかを調べて、この形式をほかの 2 つの形式と区別します。たとえば、 -.nf -\f3 -.fl - @see "The Java Programming Language" -.fl - -.fl -\fP -.fi -.LP -これは次のようなテキストを生成します。 +.\} +このタグが必要な理由は、生成ドキュメントが、サブパッケージと同じ深さを持つ階層構造のディレクトリに格納されるからです。式\fI<a href="{@docRoot}/copyright\&.html">\fRは、\fIjava/lang/Object\&.java\fRに対しては\fI<a href="\&.\&./\&.\&./copyright\&.html">\fRに解決され、\fIjava/lang/ref/Reference\&.java\fRに対しては\fI<a href="\&.\&./\&.\&./\&.\&./copyright\&.html">\fRに解決されます。 .RE .RE -.RS 3 -.RS 3 -.RS 3 -.RS 3 -.TP 3 -関連項目: -The Java Programming Language +.PP +@exception \fIclass\-name description\fR +.RS 4 +JDK 1\&.0で導入 +.sp +\fI@throws\fRタグと同じです。@throws class\-name descriptionを参照してください。 .RE +.PP +{@inheritDoc} +.RS 4 +JDK 1\&.4で導入 +.sp +最も近い継承可能なクラスまたは実装可能なインタフェースから、このタグの位置にある現在のドキュメンテーション・コメントに、ドキュメントを継承(コピー)します。これにより、より汎用的なコメントを継承ツリーの上位に記述し、コピーしたテキストを使用して記述することができます。 +.sp +このタグは、ドキュメンテーション・コメントの次の位置でのみ有効です。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +メソッドの主説明ブロック内。この場合、主説明は、上位階層のクラスまたはインタフェースからコピーされます。 .RE -.TP 3 -@see <a href="URL#value">label</a> -\f2URL\fP#\f2value\fP で定義されたとおりにリンクを追加します。 \f2URL\fP#\f2value\fP は相対 URL または絶対 URL です。Javadoc ツールは、最初の文字が「より小さい」記号 (\f2<\fP) かどうかを調べて、この形式をほかの 2 つの形式と区別します。たとえば、 -.nf -\f3 -.fl - @see <a href="spec.html#section">Java Spec</a> -.fl -\fP -.fi -これは次のようなリンクを生成します。 -.RS 3 -.TP 3 -関連項目: -Java Spec +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +メソッドの\fI@return\fR、\fI@param\fR、\fI@throws\fRタグのテキスト引数内。この場合、タグ・テキストは、上位階層の対応するタグからコピーされます。 .RE -.TP 3 -@see\ package.class#member\ label -可視のテキスト \f2label\fP を持つリンクを追加します。このリンクは、参照先となる、指定された Java 言語の名前のドキュメンテーションを指します。 \f2label\fP は省略可能です。label を省略すると、リンク先のメンバーの名前が適切に短縮されて表示されます。 「名前が表示される方法」を参照してください。\-noqualifier を使用すると、表示テキストからパッケージ名が全体的に削除されます。ラベルは、自動生成される表示テキストとは異なる表示テキストを指定する場合に使います。 -.LP -バージョン 1.2 だけは、ラベルではなく、名前が <code> HTML タグ内に自動的に表示されます。 1.2.2 からは、ラベルを使用するか、しないかにかかわらず、<code> は常に表示テキストを囲むかたちで、含まれます。 -.LP -.RS 3 -.TP 2 -o -\f4package.class\fP\f4#\fP\f4member\fP には、参照されている任意の有効なプログラム要素の名前を指定します。つまり、パッケージ、クラス、インタフェース、コンストラクタ、メソッド、またはフィールドの名前です。ただし、メンバー名ーの前のドットは、シャープ記号 (\f2#\fP) で置き換えます。 \f2class\fP は、任意のトップレベルまたは入れ子にされたクラスまたはインタフェースを表します。 \f2member\fP は、任意のコンストラクタ、メソッドまたはフィールド (入れ子にされたクラスまたはインタフェースではない) を表します。指定した名前が、ドキュメント化されているクラスに含まれている場合、Javadoc ツールは、その名前へのリンクを自動的に作成します。外部参照クラスへのリンクを作成するには、\f2\-link\fP オプションを使います。参照先のクラスに属していない名前のドキュメンテーションを参照するには、残り 2 つの \f2@see\fP 形式のうちのどちらかを使用します。この引数については、このあとの「名前の指定」で詳しく説明します。 -.TP 2 -o -\f4label\fP は、省略可能なテキストで、リンクのラベルとして表示されます。 \f2label\fP には空白を含めることができます。 \f2label\fP を省略すると、\f2package.class.member\fP が、現在のクラスおよびパッケージに応じて適切に短縮されて表示されます。「名前が表示される方法」を参照してください。 -.TP 2 -o -空白が、 \f2package.class\fP\f2#\fP\f2member\fP と \f2label\fP の間の区切り文字になります。括弧の内側の空白文字はラベルの先頭とは解釈されないため、メソッドのパラメータ間に空白文字を入れてもかまいません。 +.sp +継承階層でコメントを見つける方法に関する説明は、メソッド・コメントの継承を参照してください。このタグが見つからない場合、コメントは、この項で説明するルールに応じて、自動的に継承されるかどうかが決まります。 .RE -.LP -\f3例\fP \- この例では、 \f2@see\fP タグ ( \f2Character\fP クラス内) が String クラスの \f2equals\fP メソッド \f2を参照\fP しています。このタグには名前「\f2String#equals(Object)\fP」とラベル「\f2equals\fP」の両方の引数が含まれています。 +.PP +{@link \fIpackage\&.class#member label\fR} +.RS 4 +JDK 1\&.2で導入 +.sp +表示テキストlabelとともにインライン・リンクを挿入します。labelは、参照クラスの指定されたパッケージ、クラス、またはメンバーの名前のドキュメントを指し示します。このタグは、\fI@return\fR、\fI@param\fRおよび\fI@deprecated\fRタグなどの任意のタグのテキスト部分を含む、すべてのドキュメンテーション・コメント、つまり概要、パッケージ、クラス、インタフェース、コンストラクタ、メソッド、およびフィールドで有効です。JavadocツールでのDocコメントの記述方法の@linkに関する項 +(http://www\&.oracle\&.com/technetwork/java/javase/documentation/index\-137868\&.html#{@link)を参照してください。 +.sp +このタグは\fI@see\fRタグに似ています。どちらのタグも、\fIpackage\&.class#member\fRと\fIlabel\fRの参照方法と、有効な構文が同じです。主な違いは、\fI{@link}\fRタグでは、「関連項目」セクションにリンクが配置されるかわりに、インライン・リンクが生成されるという点です。インライン・テキストの他の部分と区別するために、\fI{@link}\fRタグの最初と最後に中カッコを記述します。ラベル内で右中カッコ(\fI}\fR)を使用する必要がある場合、HTMLエンティティ記法\fI}\fRを使用します。 +.sp +1つ文の中で使用できる\fI{@link}\fRタグの数に制限はありません。このタグは、ドキュメンテーション・コメントの主説明部分、または\fI@deprecated\fR、\fI@return\fR、\fI@param\fRタグなどの任意のタグのテキスト部分で使用できます。 +.sp +たとえば、次のコメントでは\fIgetComponentAt(int,int)\fRメソッドを参照しています。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl - /** -.fl - * @see String#equals(Object) equals -.fl - */ -.fl -\fP +Use the {@link #getComponentAt(int, int) getComponentAt} method\&. .fi -標準ドックレットは、次のような HTML を生成します。 -.nf -\f3 -.fl -<dl> -.fl -<dt><b>See Also:</b> -.fl -<dd><a href="../../java/lang/String#equals(java.lang.Object)"><code>equals<code></a> -.fl -</dl> -.fl -\fP -.fi -これは、ブラウザでは次のように表示され、ラベルがリンクテキストになります。 -.RS 3 -.TP 3 -関連項目: -equals +.if n \{\ .RE -.LP -\f3名前の指定\fP \- この \f2package.class\fP\f2#\fP\f2member\fP という名前は、 \f2java.lang.String#toUpperCase()\fP のような完全修飾名にすることも、 \f2String#toUpperCase()\fP や \f2#toUpperCase()\fP のような非完全修飾名にすることもできます。名前が完全指定されていない場合、Javadoc ツールは、Java コンパイラの通常の検索順序でその名前を検索します。詳細は、このあとの「@see の検索順序」を参照してください。名前には、メソッドの複数の引数の間など、括弧の内側であれば空白を含めることができます。 -.LP -「部分的に指定」した短い名前を指定することの利点は、入力する文字数が減ることや、ソースコードが読みやすくなることです。次の表に、さまざまな形式の名前を示します。ここで、 \f2Class\fP にはクラスまたはインタフェースを、 \f2Type\fP にはクラス、インタフェース、配列、または基本データ型を、 \f2method\fP にはメソッドまたはコンストラクタを、それぞれ指定できます。 -.LP -.LP -.TS -.if \n+(b.=1 .nr d. \n(.c-\n(c.-1 -.de 35 -.ps \n(.s -.vs \n(.vu -.in \n(.iu -.if \n(.u .fi -.if \n(.j .ad -.if \n(.j=0 .na -.. +.\} +標準ドックレットでは、このコードから次のHTMLが生成されます(このコメントが同じパッケージの別のクラスを参照している場合)。 +.sp +.if n \{\ +.RS 4 +.\} .nf -.nr #~ 0 -.if n .nr #~ 0.6n -.ds #d .d -.if \(ts\n(.z\(ts\(ts .ds #d nl -.fc -.nr 33 \n(.s -.rm 80 -.nr 34 \n(.lu -.eo -.am 80 -.br -.di a+ -.35 -.ft \n(.f -.ll \n(34u*1u/2u -.if \n(.l<\n(80 .ll \n(80u -.in 0 -\f4@see\fP\f3\ \fP\f4package.class#member\fP\f3 の一般的な形式\fP -.br -.di -.nr a| \n(dn -.nr a- \n(dl -.. -.ec \ -.eo -.am 80 -.br -.di b+ -.35 -.ft \n(.f -.ll \n(34u*1u/2u -.if \n(.l<\n(80 .ll \n(80u -.in 0 -\f3現在のクラスのメンバーを参照する\fP -.br -\f2@see\fP\ \f2#\fP\f2フィールド\fP -.br -\f2@see\fP\ \f2#\fP\f2method(Type,\ Type,...)\fP -.br -\f2@see\fP\ \f2#\fP\f2method(Type\ argname,\ Type\ argname,...)\fP -.br -\f2@see\fP\ \f2#\fP\f2constructor(Type,\ Type,...)\fP -.br -\f2@see\fP\ \f2#\fP\f2constructor(Type\ argname,\ Type\ argname,...)\fP -.br -.di -.nr b| \n(dn -.nr b- \n(dl -.. -.ec \ -.eo -.am 80 -.br -.di c+ -.35 -.ft \n(.f -.ll \n(34u*1u/2u -.if \n(.l<\n(80 .ll \n(80u -.in 0 -\f3現在の、またはインポートされたパッケージの別のクラスを参照する\fP -.br -\f2@see\fP\ \f2クラス\fP\f2#\fP\f2フィールド\fP -.br -\f2@see\fP\ \f2クラス\fP\f2#\fP\f2method(Type,\ Type,...)\fP -.br -\f2@see\fP\ \f2クラス\fP\f2#\fP\f2method(Type\ argname,\ Type\ argname,...)\fP -.br -\f2@see\fP\ \f2クラス\fP\f2#\fP\f2constructor(Type,\ Type,...)\fP -.br -\f2@see\fP\ \f2クラス\fP\f2#\fP\f2constructor(Type\ argname,\ Type\ argname,...)\fP -.br -\f2@see\fP\ \f2Class.NestedClass\fP -.br -\f2@see\fP\ \f2クラス\fP -.br -.di -.nr c| \n(dn -.nr c- \n(dl -.. -.ec \ -.eo -.am 80 -.br -.di d+ -.35 -.ft \n(.f -.ll \n(34u*1u/2u -.if \n(.l<\n(80 .ll \n(80u -.in 0 -\f3別のパッケージの要素を参照する\fP\ (完全修飾) -.br -\f2@see\fP\ \f2package.Class\fP\f2#\fP\f2フィールド\fP -.br -\f2@see\fP\ \f2package.Class\fP\f2#\fP\f2method(Type,\ Type,...)\fP -.br -\f2@see\fP\ \f2package.Class\fP\f2#\fP\f2method(Type\ argname,\ Type\ argname,...)\fP -.br -\f2@see\fP\ \f2package.Class\fP\f2#\fP\f2constructor(Type,\ Type,...)\fP -.br -\f2@see\fP\ \f2package.Class\fP\f2#\fP\f2constructor(Type\ argname,\ Type\ argname,...)\fP -.br -\f2@see\fP\ \f2package.Class.NestedClass\fP -.br -\f2@see\fP\ \f2package.Class\fP -.br -\f2@see\fP\ \f2パッケージ\fP -.br -.di -.nr d| \n(dn -.nr d- \n(dl -.. -.ec \ -.35 -.nf -.ll \n(34u -.nr 80 0 -.80 -.rm 80 -.nr 38 \n(a- -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \n(b- -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \n(c- -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \n(d- -.if \n(80<\n(38 .nr 80 \n(38 -.35 -.nf -.ll \n(34u -.nr 38 1n -.nr 79 0 -.nr 40 \n(79+(0*\n(38) -.nr 80 +\n(40 -.nr TW \n(80 -.if t .if \n(TW>\n(.li .tm Table at line 1342 file Input is too wide - \n(TW units -.fc   -.nr #T 0-1 -.nr #a 0-1 -.eo -.de T# -.ds #d .d -.if \(ts\n(.z\(ts\(ts .ds #d nl -.mk ## -.nr ## -1v -.ls 1 -.ls -.. -.ec -.ne \n(a|u+\n(.Vu -.if (\n(a|+\n(#^-1v)>\n(#- .nr #- +(\n(a|+\n(#^-\n(#--1v) -.ta \n(80u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(40u -.in +\n(37u -.a+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(b|u+\n(.Vu -.if (\n(b|+\n(#^-1v)>\n(#- .nr #- +(\n(b|+\n(#^-\n(#--1v) -.ta \n(80u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(40u -.in +\n(37u -.b+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(c|u+\n(.Vu -.if (\n(c|+\n(#^-1v)>\n(#- .nr #- +(\n(c|+\n(#^-\n(#--1v) -.ta \n(80u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(40u -.in +\n(37u -.c+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(d|u+\n(.Vu -.if (\n(d|+\n(#^-1v)>\n(#- .nr #- +(\n(d|+\n(#^-\n(#--1v) -.ta \n(80u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(40u -.in +\n(37u -.d+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.fc -.nr T. 1 -.T# 1 -.35 -.rm a+ -.rm b+ -.rm c+ -.rm d+ -.TE -.if \n-(b.=0 .nr c. \n(.c-\n(d.-58 -.LP -上の表に対する補足事項を次に示します。 -.RS 3 -.TP 2 -o -最初の種類の形式 (パッケージとクラスを省略) の場合、Javadoc ツールは、現在のクラスの階層だけを検索します。つまり、現在のクラスかインタフェース、そのスーパークラスかスーパーインタフェース、または現在のクラスかインタフェースを囲んでいるクラスかインタフェースからメンバーを検索します (このあとの検索手順 1 ~ 3)。現在のパッケージのほかの部分や、ほかのパッケージは検索しません (検索手順 4 ~ 5)。 -.TP 2 -o -メソッドまたはコンストラクタの指定時に、 \f2getValue\fP のように括弧なしの名前を使用した場合、同じ名前のフィールドが存在していなければ、Javadoc ツールによってその名前へのリンクが正しく作成されますが、括弧や引数の追加をユーザーに促すための警告メッセージが表示されます。このメソッドがオーバーロードされている場合、Javadoc ツールは、検索で最初に見つかったメソッドにリンクします。結果は前もって特定できません。 -.TP 2 -o -入れ子になったクラスは、すべての形式について、 \f2outer\fP\f2.\fP\f2inner\fP として指定する必要があります。単純に \f2inner\fP とはしないでください。 -.TP 2 -o -すでに述べたように、\f2クラスとメンバーとの間の区切り文字としては、\fPドット (\f2.\fP) ではなくシャープ文字 (#) を使用します。このように指定すると、Javadoc ツールは、あいまいさを解決できます。ドットは、クラス、入れ子にされたクラス、パッケージ、およびサブパッケージを区切るためにも使用されます。ただし、Javadoc ツールでは一般に許容範囲が広く、あいまいさがなければ、ドットでも正しく解析されます。その場合でも警告は表示されます。 +Use the <a href="Component\&.html#getComponentAt(int, int)">getComponentAt</a> method\&. +.fi +.if n \{\ .RE -.LP -\f3@see の検索順序\fP \- Javadoc ツールは、ソースファイル (.java)、パッケージファイル (package.html または package\-info.java) または概要ファイル (overview.html) に含まれる \f2@see\fP タグを処理します。後者の 2 つのファイルでは、完全指定の名前を \f2@see\fP タグに指定しなければなりません。ソースファイルでは、完全指定の名前、または部分指定の名前を指定できます。 -.LP -Javadoc ツールは、完全指定でない名前が記述された \f2@see\fP タグを \f2.java ファイル内で見つけると、\fP Java コンパイラと同じ順序で指定された名前を検索します。 ただし、Javadoc ツールは、特定の名前空間のあいまいさを検出しません。 これは、ソースコードにこれらのエラーが存在していないことを前提としているためです。この検索順序は、\f2Java 言語仕様\fPで正式に定義されています。Javadoc ツールは、関連するクラスとパッケージ、およびインポートされたクラスとパッケージのすべてから名前を検索します。具体的には、次の順序で検索します。 -.RS 3 -.TP 3 -1. -現在のクラスまたはインタフェース -.TP 3 -2. -外側を囲んでいるクラスとインタフェース (もっとも近いものから検索) -.TP 3 -3. -スーパークラスとスーパーインタフェース (もっとも近いものから検索) -.TP 3 -4. -現在のパッケージ -.TP 3 -5. -インポートされているパッケージ、クラス、およびインタフェース (import 文の順序に従って検索) -.RE -.LP -Javadoc ツールは、各クラスについて手順 1 ~ 3 を再帰的に適用しながら、一致する名前が見つかるまで検索を続けます。つまり、まず現在のクラスを検索し、次にそのクラスを囲んでいるクラス E を検索し、その次に E のスーパークラスを検索し、さらにその次に E を囲んでいるクラスを検索します。 手順 4 と 5 では、1 つのパッケージ内のクラスまたはインタフェースを検索する順序は決まっていません。その順序は、個々のコンパイラによって異なります。手順 5 では、Javadoc ツールは、java.lang を検索します。このパッケージは、すべてのプログラムに自動的にインポートされるからです。 -.LP -Javadoc ツールは、必ずしもサブクラスを検索するとは限りません。また、javadoc の実行中にほかのパッケージのドキュメントが生成される場合でも、ほかのパッケージを検索しません。たとえば、 \f2@see\fP タグが \f2java.awt.event.KeyEvent\fP クラス内に含まれていて、 \f2java.awt\fP パッケージ内のある名前を参照していても、そのクラス内でそのパッケージがインポートされないかぎり、javadoc はそのパッケージ内での検索を行いません。 -.LP -\f3名前が表示される方法\fP \- \f2label\fP を省略した場合は、\f2package.class.member\fP が表示されます。一般に、package.class.member は、現在のクラスおよびパッケージに応じて適切に短縮されます。「短縮される」とは、必要最小限の名前だけが表示されるということです。たとえば、 \f2String.toUpperCase()\fP メソッドに、同じクラスのメンバーへの参照とほかのクラスのメンバーへの参照が含まれている場合、クラス名が表示されるのは後者のケースだけです (次の表を参照)。 -.LP -パッケージ名を広域的に削除するには、\-noqualifier を使用します。 -.br -.LP -.TS -.if \n+(b.=1 .nr d. \n(.c-\n(c.-1 -.de 35 -.ps \n(.s -.vs \n(.vu -.in \n(.iu -.if \n(.u .fi -.if \n(.j .ad -.if \n(.j=0 .na -.. +.\} +前の行は、次のようにWebページに表示されます。 +.sp +.if n \{\ +.RS 4 +.\} .nf -.nr #~ 0 -.if n .nr #~ 0.6n -.ds #d .d -.if \(ts\n(.z\(ts\(ts .ds #d nl -.fc -.nr 33 \n(.s -.rm 80 81 82 -.nr 34 \n(.lu -.eo -.am 81 -.br -.di a+ -.35 -.ft \n(.f -.ll \n(34u*1u/4u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -\f4String.toUpperCase() での例\fP -.br -.di -.nr a| \n(dn -.nr a- \n(dl -.. -.ec \ -.eo -.am 80 -.br -.di b+ -.35 -.ft \n(.f -.ll \n(34u*1u/4u -.if \n(.l<\n(80 .ll \n(80u -.in 0 -\f2@see\fP タグが同じクラス、同じパッケージのメンバーを参照している -.br -.di -.nr b| \n(dn -.nr b- \n(dl -.. -.ec \ -.eo -.am 82 -.br -.di c+ -.35 -.ft \n(.f -.ll \n(34u*1u/4u -.if \n(.l<\n(82 .ll \n(82u -.in 0 -\f2toLowerCase()\fP (クラス名は省略) -.br -.di -.nr c| \n(dn -.nr c- \n(dl -.. -.ec \ -.eo -.am 80 -.br -.di d+ -.35 -.ft \n(.f -.ll \n(34u*1u/4u -.if \n(.l<\n(80 .ll \n(80u -.in 0 -\f2@see\fP タグが異なるクラス、同じパッケージのメンバーを参照している -.br -.di -.nr d| \n(dn -.nr d- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di e+ -.35 -.ft \n(.f -.ll \n(34u*1u/4u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -\f2@see Character#toLowerCase(char)\fP -.br -.di -.nr e| \n(dn -.nr e- \n(dl -.. -.ec \ -.eo -.am 82 -.br -.di f+ -.35 -.ft \n(.f -.ll \n(34u*1u/4u -.if \n(.l<\n(82 .ll \n(82u -.in 0 -\f2Character.toLowerCase(char)\fP (パッケージ名は省略し、クラス名を含む) -.br -.di -.nr f| \n(dn -.nr f- \n(dl -.. -.ec \ -.eo -.am 80 -.br -.di g+ -.35 -.ft \n(.f -.ll \n(34u*1u/4u -.if \n(.l<\n(80 .ll \n(80u -.in 0 -\f2@see\fP タグが異なるクラス、異なるパッケージのメンバーを参照している -.br -.di -.nr g| \n(dn -.nr g- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di h+ -.35 -.ft \n(.f -.ll \n(34u*1u/4u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -\f2@see java.io.File#exists()\fP -.br -.di -.nr h| \n(dn -.nr h- \n(dl -.. -.ec \ -.eo -.am 82 -.br -.di i+ -.35 -.ft \n(.f -.ll \n(34u*1u/4u -.if \n(.l<\n(82 .ll \n(82u -.in 0 -\f2java.io.File.exists()\fP (パッケージ名とクラス名を含む) -.br -.di -.nr i| \n(dn -.nr i- \n(dl -.. -.ec \ -.35 -.nf -.ll \n(34u -.nr 80 0 -.nr 38 \w\f3参照の種類\fP -.if \n(80<\n(38 .nr 80 \n(38 -.80 -.rm 80 -.nr 38 \n(b- -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \n(d- -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \n(g- -.if \n(80<\n(38 .nr 80 \n(38 -.nr 81 0 -.nr 38 \w\f2@see String#toLowerCase()\fP -.if \n(81<\n(38 .nr 81 \n(38 -.81 -.rm 81 -.nr 38 \n(a- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(e- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(h- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 82 0 -.nr 38 \w\f3表示される名前\fP -.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 38 \n(f- -.if \n(82<\n(38 .nr 82 \n(38 -.nr 38 \n(i- -.if \n(82<\n(38 .nr 82 \n(38 -.35 -.nf -.ll \n(34u -.nr 38 1n -.nr 79 0 -.nr 40 \n(79+(0*\n(38) -.nr 80 +\n(40 -.nr 41 \n(80+(3*\n(38) -.nr 81 +\n(41 -.nr 42 \n(81+(3*\n(38) -.nr 82 +\n(42 -.nr TW \n(82 -.if t .if \n(TW>\n(.li .tm Table at line 1418 file Input is too wide - \n(TW units -.fc   -.nr #T 0-1 -.nr #a 0-1 -.eo -.de T# -.ds #d .d -.if \(ts\n(.z\(ts\(ts .ds #d nl -.mk ## -.nr ## -1v -.ls 1 -.ls -.. -.ec -.ne \n(a|u+\n(.Vu -.if (\n(a|+\n(#^-1v)>\n(#- .nr #- +(\n(a|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u \n(82u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f3参照の種類\fP\h'|\n(41u'\h'|\n(42u'\f3表示される名前\fP -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.a+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(b|u+\n(.Vu -.ne \n(c|u+\n(.Vu -.if (\n(b|+\n(#^-1v)>\n(#- .nr #- +(\n(b|+\n(#^-\n(#--1v) -.if (\n(c|+\n(#^-1v)>\n(#- .nr #- +(\n(c|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u \n(82u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\h'|\n(41u'\f2@see String#toLowerCase()\fP\h'|\n(42u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(40u -.in +\n(37u -.b+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(##u-1v -.nr 37 \n(42u -.in +\n(37u -.c+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(d|u+\n(.Vu -.ne \n(e|u+\n(.Vu -.ne \n(f|u+\n(.Vu -.if (\n(d|+\n(#^-1v)>\n(#- .nr #- +(\n(d|+\n(#^-\n(#--1v) -.if (\n(e|+\n(#^-1v)>\n(#- .nr #- +(\n(e|+\n(#^-\n(#--1v) -.if (\n(f|+\n(#^-1v)>\n(#- .nr #- +(\n(f|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u \n(82u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\h'|\n(41u'\h'|\n(42u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(40u -.in +\n(37u -.d+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.e+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(##u-1v -.nr 37 \n(42u -.in +\n(37u -.f+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(g|u+\n(.Vu -.ne \n(h|u+\n(.Vu -.ne \n(i|u+\n(.Vu -.if (\n(g|+\n(#^-1v)>\n(#- .nr #- +(\n(g|+\n(#^-\n(#--1v) -.if (\n(h|+\n(#^-1v)>\n(#- .nr #- +(\n(h|+\n(#^-\n(#--1v) -.if (\n(i|+\n(#^-1v)>\n(#- .nr #- +(\n(i|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u \n(82u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\h'|\n(41u'\h'|\n(42u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(40u -.in +\n(37u -.g+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.h+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(##u-1v -.nr 37 \n(42u -.in +\n(37u -.i+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.fc -.nr T. 1 -.T# 1 -.35 -.rm a+ -.rm b+ -.rm c+ -.rm d+ -.rm e+ -.rm f+ -.rm g+ -.rm h+ -.rm i+ -.TE -.if \n-(b.=0 .nr c. \n(.c-\n(d.-28 -.LP -\f3@see の例\fP -.br -右側のコメントは、 \f2@see\fP タグが \f2java.applet.Applet\fP などの別のパッケージのクラス内にある場合に、名前がどのように表示されるかを示しています。 -.nf -\f3 -.fl - 関連項目: -.fl -@see java.lang.String // String \fP\f3 -.fl -@see java.lang.String The String class // The String class \fP\f3 -.fl -@see String // String \fP\f3 -.fl -@see String#equals(Object) // String.equals(Object) \fP\f3 -.fl -@see String#equals // String.equals(java.lang.Object) \fP\f3 -.fl -@see java.lang.Object#wait(long) // java.lang.Object.wait(long) \fP\f3 -.fl -@see Character#MAX_RADIX // Character.MAX_RADIX \fP\f3 -.fl -@see <a href="spec.html">Java Spec</a> // Java Spec \fP\f3 -.fl -@see "The Java Programming Language" // "The Java Programming Language" \fP\f3 -.fl -\fP +Use the getComponentAt method\&. .fi -\f2@see\fP を拡張してドキュメント化されないクラスへのリンクも可能にするには、\f2\-link\fP オプションを使用します。 -.LP -詳細については、 -.na -\f2@see タグのドキュメント\fP @ -.fi -http://www.oracle.com/technetwork/java/javase/documentation/index\-137868.html#@seeを参照してください。 +.if n \{\ .RE +.\} .RE -.LP -.RS 3 -.TP 3 -@serial\ field\-description | include | exclude -デフォルトの直列化可能フィールドのドキュメンテーションコメントで使用します。 -.LP -\f2field\-description\fP (省略可能) では、フィールドの意味を説明し、取り得る値のリストを示す必要があります。必要に応じて、複数の行に渡って説明を記述できます。標準ドックレットは、この情報を、直列化された形式のページに追加します。 -.LP -クラスを直列化したあとしばらくしてから直列化可能フィールドをクラスに追加した場合、主説明に、追加したバージョンを識別する文を追加する必要があります。 -.LP -\f2include\fP および \f2exclude\fP 引数は、直列化された形式のページにクラスまたはパッケージを含めるか除外するかを示します。これらの引数には、次のような効果があります。 -.RS 3 -.TP 2 -o -\f2Serializable\fP を実装している public または protected クラスは、そのクラス (またはそのパッケージ) が \f2@serial exclude\fP としてマークされていないかぎり、含められます。 -.TP 2 -o -\f2Serializable\fP を実装している private または package\-private クラスは、そのクラス (またはそのパッケージ) が \f2@serial include\fP として マークされていないかぎり、除外されます。 +.PP +{@linkplain \fIpackage\&.class#member label\fR} +.RS 4 +JDK 1\&.4で導入 +.sp +\fI{@link}\fRタグと同じ動作をしますが、リンク・ラベルがコード・フォントではなくプレーン・テキストで表示される点が異なります。ラベルがプレーン・テキストで記述されていると便利です。たとえば、「\fIRefer to {@linkplain add() the overridden method}\fR\&.」は「Refer to the overridden method」と表示されます。 .RE -.LP -例: \f2javax.swing\fP パッケージは \f2@serial exclude\fP ( \f2package.html\fP または \f2package\-info.java\fP内) としてマークされています。public クラス \f2java.security.BasicPermission\fP は \f2@serial exclude\fP としてマークされています。package\-private クラス \f2java.util.PropertyPermissionCollection\fP は \f2@serial include\fP としてマークされています。 -.LP -クラスレベルで指定された @serial タグは、パッケージレベルで指定された @serial タグをオーバーライドします。 -.LP -これらのタグの使用法についての詳細と使用例は、「Java オブジェクト直列化仕様」の第 1.6 節 -.na -\f2「クラスの直列化可能なフィールドおよびデータの文書化」\fP @ -.fi -http://java.sun.com/javase/6/docs/platform/serialization/spec/serial\-arch.htmlを参照してください。また、 -.na -\f2「直列化の FAQ」\fP @ -.fi -http://java.sun.com/javase/technologies/core/basic/serializationFAQ.jsp#javadoc_warn_missingも参照してください。この FAQ には、「\-private スイッチを指定しないで javadoc を実行しているのに private フィールドの @serial タグが見つからないという javadoc の警告が表示される」などの一般的な質問への回答が記載されています。直列化形式仕様にクラスを含める場合には、 -.na -\f2「Sun の仕様」\fP @ -.fi -http://java.sun.com/j2se/javadoc/writingapispecs/serialized\-criteria.htmlも参照してください。 -.LP -.TP 3 -@serialField\ field\-name\ field\-type\ field\-description -Serializable \f2クラスの\fP serialPersistentFields \f2メンバーの\fP ObjectStreamField コンポーネント \f2をドキュメント化\fP します。1 つの \f2@serialField\fP タグを各 \f2ObjectStreamField\fP コンポーネントで使用すべきです。 -.LP -.TP 3 -@serialData\ data\-description -\f2data\-description\fP は、直列化された形式でのデータの型と順序を説明するテキストです。具体的に言うと、このデータには、 \f2writeObject\fP メソッドによって書き込まれる省略可能なデータ、および \f2Externalizable.writeExternal\fP メソッドによって書き込まれるすべてのデータ (基底クラスも含む) が含まれます。 -.LP -\f2@serialData\fP タグは、 \f2writeObject\fP、 \f2readObject\fP、 \f2writeExternal\fP、 \f2readExternal\fP、 \f2writeReplace\fP、および \f2readResolve\fP メソッドのドキュメンテーションコメント内で使用できます。 -.LP -.TP 3 -@since\ since\-text -生成ドキュメントに [導入されたバージョン] 見出しを追加し、指定された \f2since\-text\fP を書き込みます。このテキストには、特別な内部構造はありません。このタグは、すべてのドキュメンテーションコメント、つまり概要、パッケージ、クラス、インタフェース、コンストラクタ、メソッド、およびフィールドで有効です。このタグは、特定の変更または機能が、 \f2since\-text に示されたソフトウェアリリース以降、存在していることを意味します\fP。たとえば、 +.PP +{@literal \fItext\fR} +.RS 4 +JDK 1\&.5で導入 +.sp +テキストをHTMLマークアップまたはネストされたJavadocタグとして解釈せずに、textを表示します。これにより、ドキュメンテーション・コメントでは、パラメータの型(\fI<Object>\fR)、不等号(\fI3 < 4\fR)、矢印(<\-)などで、山カッコ(\fI<および>\fR)をHTMLエンティティ(\fI<\fRおよび\fI>\fR)のかわりに使用できます。たとえば、ドキュメンテーション・コメントのテキスト\fI{@literal A<B>C}\fRは\fIA<B>C\fRとして、ブラウザの生成されたHTMLページに変更されずに表示されます。\fI<B>\fRは太字として解釈されません(コード・フォントになりません)。コード・フォントで同じ機能を実現するには、\fI{@code}\fRタグを使用します。 +.RE +.PP +@param \fIparameter\-name description\fR +.RS 4 +JDK 1\&.0で導入 +.sp +「パラメータ」セクションに、指定された\fIparameter\-name\fRの後に指定されたdescriptionを続けてパラメータを追加します。ドキュメンテーション・コメントを記述するときには、descriptionを複数行にわたって記述することもできます。このタグは、メソッド、コンストラクタ、またはクラスのドキュメンテーション・コメント内でのみ有効です。JavadocツールでのDocコメントの記述方法の@paramに関する項 +(http://www\&.oracle\&.com/technetwork/java/javase/documentation/index\-137868\&.html#@param)を参照してください。 +.sp +\fIparameter\-name\fRは、メソッドまたはコンストラクタでのパラメータの名前か、クラス、メソッドまたはコンストラクタの型パラメータの名前になります。山カッコでこのパラメータ名を囲み、型パラメータを使用することを指定します。 +.sp +クラスの型パラメータの例: +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl - @since 1.5 -.fl - -.fl -\fP -.fi -.LP -Java プラットフォームのソースコードの場合、このタグは、Java プラットフォーム API 仕様のバージョンを示します。その変更や機能がリファレンス実装に追加された時期を示すとは限りません。複数の @since タグを使用でき、複数の @author タグのように扱われます。プログラム要素が複数の API で使用される場合、複数のタグを使用できます。 -.LP -.TP 3 -@throws\ class\-name\ description -\f2@throws\fP タグと \f2@exception\fP タグは同義です。生成ドキュメントに「例外」小見出しを追加して、 \f2class\-name\fP および \f2description\fP のテキストを書き込みます。 \f2class\-name\fP は、そのメソッドからスローされる可能性のある例外の名前です。このタグは、メソッド、コンストラクタの doc コメント内でのみ有効です。このクラスが完全指定の名前で記述されていない場合、Javadoc ツールは、検索順序に従ってクラスを探します。同じまたは異なる例外の doc コメントで、複数の \f2@throws\fP タグを使用できます。 -.LP -すべてのチェック済み例外がドキュメント化されるようにするために、 \f2@throws\fP タグが throws 節内の例外用に存在しない場合は、@throws タグのあるドキュメントであるかのように、Javadoc ツールによって例外が HTML 出力に説明なしで自動的に追加されます。 -.LP -オーバーライドされるメソッド内で例外が明示的に宣言されている場合のみ、 \f2@throws\fP ドキュメンテーションがそのメソッドからサブクラスにコピーされます。インタフェースメソッドから実装メソッドにコピーされる場合も同様です。@throws にドキュメンテーションを継承させるには、{@inheritDoc} を使用できます。 -.LP -詳細については、 -.na -\f2@throws タグのドキュメント\fP @ -.fi -http://www.oracle.com/technetwork/java/javase/documentation/index\-137868.html#@exceptionを参照してください。 -.LP -.TP 3 -{@value\ package.class#field} -\f2{@value}\fP が静的フィールドの doc コメントで 引数なしで使用されている場合、その定数の値が表示されます。 -.nf -\f3 -.fl - /** -.fl - * The value of this constant is {@value}. -.fl - */ -.fl - public static final String SCRIPT_START = "<script>" -.fl - -.fl -\fP -.fi -.LP -任意のドキュメンテーションコメント内で引数 \f2package.class#field\fP ありで使用された場合は、その指定された定数の値が表示されます。 -.nf -\f3 -.fl - /** -.fl - * Evaluates the script starting with {@value #SCRIPT_START}. -.fl - */ -.fl - public String evalScript(String script) { -.fl - } -.fl - -.fl -\fP -.fi -.LP -引数 \f2package.class#field\fP は、@see 引数と同一の形式になります。ただし、メンバーが静的フィールドになければならない点が異なります。 -.LP -これらの定数での値は、 -.na -\f2定数フィールド値\fP @ -.fi -http://java.sun.com/javase/6/docs/api/constant\-values.htmlページにも表示されます。 -.LP -.TP 3 -@version\ version\-text -\-version オプションが使用されると、生成ドキュメントに [バージョン] 小見出しを追加し、指定された \f2version\-text\fP を書き込みます。このタグは、このコードが含まれるソフトウェアの現在のバージョン番号を保持するように意図されています。これに対し、@since は、このコードが導入されたバージョン番号を保持します。 \f2version\-text\fP には、特別な内部構造はありません。バージョンタグを使用できる場所を調べるには、「タグを使用できる場所」を参照してください。 -.LP -1 つのドキュメンテーションコメントに複数の \f2@version\fP タグを含めることができます。意味が失われない範囲内で、1 つの \f2@version\fP タグに 1 つのバージョン番号を指定することも、複数のバージョン番号を指定することもできます。前者の場合は、Javadoc ツールによって名前と名前の間にコンマ (\f2,\fP) と空白が挿入されます。後者の場合は、テキスト全体が、解析されることなく、生成ドキュメントにそのままコピーされます。したがって、コンマではなく、各言語に対応した名前区切り文字を使う必要があるときは、1 つのタグに複数の名前を指定してください。 -.LP -詳細については、 -.na -\f2@version タグのドキュメント\fP @ -.fi -http://www.oracle.com/technetwork/java/javase/documentation/index\-137868.html#@versionを参照してください。 -.RE -.SS -タグを使用できる場所 -.LP -ここでは、タグを使用できる場所について説明します。すべてのドキュメンテーションコメントで使用可能なタグは次のとおりです。 \f2@see\fP、 \f2@since\fP、 \f2@deprecated\fP、 \f2{@link}\fP、 \f2{@linkplain}\fP、および \f2{@docroot}\fP。 -.SS -概要のドキュメンテーションタグ -.LP -概要タグは、概要ページのドキュメンテーションコメントで使用できるタグです。このドキュメンテーションコメントは、通常 \f2overview.html\fP という名前のソースファイル内にあります。 ほかのドキュメンテーションコメントの場合と同様に、これらのタグは、主説明のあとで使う必要があります。 -.LP -\f3注\fP \- バージョン 1.2 では、概要ドキュメント内の \f2{@link}\fP タグにバグがあります。テキストは正しく表示されますが、リンクが設定されません。現在のところ、 \f2{@docRoot}\fP タグは、概要ドキュメント内では動作しません。 -.LP -\f3概要タグ\fP -.RS 3 -.TP 2 -o -\f2@see\fP -.TP 2 -o -\f2@since\fP -.TP 2 -o -\f2@author\fP -.TP 2 -o -\f2@version\fP -.TP 2 -o -\f2{@link}\fP -.TP 2 -o -\f2{@linkplain}\fP -.TP 2 -o -\f2{@docRoot}\fP -.RE -.SS -パッケージドキュメンテーションタグ -.LP -パッケージタグは、パッケージのドキュメンテーションコメントで使用できるタグです。このドキュメンテーションコメントは \f2package.html\fP または \f2package\-info.java\fP という名前のソースファイル内にあります。ここで使用できる \f2@serial\fP タグは、 \f2include\fP または \f2exclude\fP 引数が指定されたものだけです。 -.LP -\f3パッケージタグ\fP -.RS 3 -.TP 2 -o -\f2@see\fP -.TP 2 -o -\f2@since\fP -.TP 2 -o -\f2@serial\fP -.TP 2 -o -\f2@author\fP -.TP 2 -o -\f2@version\fP -.TP 2 -o -\f2{@link}\fP -.TP 2 -o -\f2{@linkplain}\fP -.TP 2 -o -\f2{@docRoot}\fP -.RE -.SS -クラスおよびインタフェースドキュメンテーションタグ -.LP -次に、クラスまたはインタフェースのドキュメンテーションコメントで使用できるタグを示します。ここで使用できる \f2@serial\fP タグは、 \f2include\fP または \f2exclude\fP 引数が指定されたものだけです。 -.LP -\f3クラスおよびインタフェースタグ\fP -.RS 3 -.TP 2 -o -\f2@see\fP -.TP 2 -o -\f2@since\fP -.TP 2 -o -\f2@deprecated\fP -.TP 2 -o -\f2@serial\fP -.TP 2 -o -\f2@author\fP -.TP 2 -o -\f2@version\fP -.TP 2 -o -\f2{@link}\fP -.TP 2 -o -\f2{@linkplain}\fP -.TP 2 -o -\f2{@docRoot}\fP -.RE -\f3次にクラスコメントの例を示します。\fP -.nf -\f3 -.fl /** -.fl - * A class representing a window on the screen. -.fl - * For example: -.fl - * <pre> -.fl - * Window win = new Window(parent); -.fl - * win.show(); -.fl - * </pre> -.fl - * -.fl - * @author Sami Shaio -.fl - * @version 1.13, 06/08/06 -.fl - * @see java.awt.BaseWindow -.fl - * @see java.awt.Button -.fl + * @param <E> Type of element stored in a list */ -.fl -class Window extends BaseWindow { -.fl - ... -.fl +public interface List<E> extends Collection<E> { } -.fl -\fP .fi -.SS -フィールドドキュメンテーションタグ -.LP -次に、フィールドのドキュメンテーションコメントで使用できるタグを示します。 -.LP -\f3フィールドタグ\fP -.RS 3 -.TP 2 -o -\f2@see\fP -.TP 2 -o -\f2@since\fP -.TP 2 -o -\f2@deprecated\fP -.TP 2 -o -\f2@serial\fP -.TP 2 -o -\f2@serialField\fP -.TP 2 -o -\f2{@link}\fP -.TP 2 -o -\f2{@linkplain}\fP -.TP 2 -o -\f2{@docRoot}\fP -.TP 2 -o -\f2{@value}\fP +.if n \{\ .RE -\f3次にフィールドコメントの例を示します。\fP +.\} +メソッドの型パラメータの例: +.sp +.if n \{\ +.RS 4 +.\} +.nf +/** + * @param string the string to be converted + * @param type the type to convert the string to + * @param <T> the type of the element + * @param <V> the value of the element + */ +<T, V extends T> V convert(String string, Class<T> type) { +} +.fi +.if n \{\ +.RE +.\} +.RE +.PP +@return \fIdescription\fR +.RS 4 +JDK 1\&.0で導入 +.sp +「戻り値」セクションを追加して、descriptionのテキストを書き込みます。このテキストでは、戻り値の型と、取り得る値の範囲について記述する必要があります。このタグは、メソッドのドキュメンテーション・コメントでのみ有効です。JavadocツールでのDocコメントの記述方法の@returnに関する項 +(http://www\&.oracle\&.com/technetwork/java/javase/documentation/index\-137868\&.html#@return)を参照してください。 +.RE +.PP +@see \fIreference\fR +.RS 4 +JDK 1\&.0で導入 +.sp +\fI「関連項目」\fR見出しを追加して、referenceを指すリンク、またはテキスト・エントリを書き込みます。1つのドキュメンテーション・コメントには任意の数の\fI@see\fRタグを含めることができますが、それらはすべて同じ見出しの下にグループ化されます。\fI@see\fRタグには、3つのタイプの形式があります。この形式が最も一般的です。このタグは、すべてのドキュメンテーション・コメント、つまり概要、パッケージ、クラス、インタフェース、コンストラクタ、メソッド、またはフィールドで有効です。パッケージ、クラス、またはメンバーに対するインライン・リンクを文中に挿入する方法は、\fI{@link}\fRを参照してください。 +.sp +\fB形式1\fR。@see +\fIstring\fRタグ形式は、\fIstring\fRのテキスト・エントリを追加します。リンクは生成されません。stringは、書籍またはURLではアクセスできない情報の参照先です。\fIjavadoc\fRコマンドは、最初の文字として二重引用符(")を検索して、この形式を前述の形式と区別します。たとえば、\fI@see "The Java Programming Language"\fRは次のテキストを生成します。 +.sp +\fB関連項目\fR: +.sp +"The Java Programming Language" +.sp +\fB形式2\fR。\fI@see <a href="URL#value">label</a>\fR形式は、\fIURL#value\fRにより定義されたリンクを追加します。\fIURL#value\fRパラメータは、相対URLまたは絶対URLです。\fIjavadoc\fRコマンドは、最初の文字として「より小さい」記号(\fI<\fR)を検索して、この形式を他の形式と区別します。たとえば、\fI@see <a href="spec\&.html#section">Java Spec</a>\fRは次のリンクを生成します。 +.sp +\fB関連項目\fR: +.sp +Java Spec +.sp +\fB形式3\fR。\fI@see package\&.class#member label\fR形式は、表示テキスト・ラベルとともにリンクを追加します。このラベルは参照されているJava言語の指定された名前のドキュメントを指し示します。ラベルはオプションです。ラベルを省略した場合は、表示テキストのかわりに、名前が適切に短縮されて表示されます。\fI\-noqualifier\fRオプションを使用すると、この表示テキストからパッケージ名が全体的に削除されます。ラベルは、自動生成される表示テキストとは異なる表示テキストにする場合に使用します。「名前が表示される方法」を参照してください。 +.sp +Java SE 1\&.2だけは、ラベルではなく名前が\fI<code>\fR +HTMLタグ内に自動的に表示されます。Java SE 1\&.2\&.2からは、ラベルを使用するかしないかにかかわらず、\fI<code>\fRタグは常に表示テキストを囲むかたちで含まれます。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fIpackage\&.class#member\fRには、参照されている任意の有効なプログラム要素の名前を指定します。つまり、パッケージ、クラス、インタフェース、コンストラクタ、メソッド、またはフィールドの名前です。ただし、メンバー名の前の文字は、シャープ記号(\fI#\fR)にする必要があります。classは、任意のトップレベルまたはネストされたクラスか、インタフェースを表します。memberは、任意のコンストラクタ、メソッドまたはフィールドを表します(ネストされたクラスまたはインタフェースではありません)。この名前が、ドキュメント化されるクラスに含まれている場合、\fIjavadoc\fRコマンドは、その名前へのリンクを作成します。外部参照クラスへのリンクを作成するには、\fI\-link\fRオプションを使用します。参照クラスに属していない名前のドキュメントを参照するには、他の2つの\fI@see\fRタグ形式のどちらかを使用します。「名前の指定」を参照してください。 +.sp +\fB注意:\fR +外部参照クラスは、コマンドラインで\fIjavadoc\fRコマンドに渡されないクラスです。生成ドキュメント内で外部参照クラスにリンクしている箇所は、外部参照または外部リンクと呼ばれます。たとえば、\fIjava\&.awt package\fRに対してのみ\fIjavadoc\fRコマンドを実行した場合、\fIObject\fRなどの\fIjava\&.lang\fR内のすべてのクラスが外部参照クラスになります。\fI\-link\fRおよび\fI\-linkoffline\fRオプションを使用して、外部参照クラスへリンクします。外部参照クラスのソース・コメントは\fIjavadoc\fRコマンドの実行には使用できません。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fIlabel\fRは、省略可能なテキストで、リンクのラベルとして表示されます。ラベルには空白を含めることができます。\fIlabel\fRを省略すると、\fIpackage\&.class\&.member\fRが、現在のクラスおよびパッケージに応じて適切に短縮されて表示されます。「名前が表示される方法」を参照してください。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +空白文字が、\fIpackage\&.class#member\fRと\fIlabel\fRの間の区切り文字になります。カッコの内側の空白文字はラベルの先頭とは解釈されないため、メソッドのパラメータ間に空白文字を入れてもかまいません。 +.RE +.sp +この例では、\fI@see\fRタグ(\fICharacter\fRクラス内)が、\fIString\fRクラスのequalsメソッドを参照しています。タグには、名前\fIString#equals(Object)\fRとラベル\fIequals\fRの両方の引数が含まれています。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +/** + * @see String#equals(Object) equals + */ +.fi +.if n \{\ +.RE +.\} +標準ドックレットは、次のようなHTMLを生成します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +<dl> +<dt><b>See Also:</b> +<dd><a href="\&.\&./\&.\&./java/lang/String#equals(java\&.lang\&.Object)"><code>equals<code></a> +</dl> +.fi +.if n \{\ +.RE +.\} +前述のコードは、ブラウザに次のように表示され、ラベルは表示リンク・テキストになっています。 +.sp +\fB関連項目\fR: +.sp +equals +.RE +名前の指定.PP +この\fIpackage\&.class#member\fRという名前は、\fIjava\&.lang\&.String#toUpperCase()\fRのような完全修飾名にすることも、\fIString#toUpperCase()\fRや\fI#toUpperCase()\fRのような非完全修飾名にすることもできます。名前が完全修飾より短い場合は、\fIjavadoc\fRコマンドは、標準のJavaコンパイラの検索順序を使用して探します。「@seeタグの検索順序」を参照してください。名前は、メソッド引数の間など、カッコ内のスペースを含めることができます。部分的に修飾した短い名前を指定することの利点は、入力する文字数が減ることや、ソース・コードが読みやすくなることです。次のリストに様々な形式の名前を示します。ここで、\fIClass\fRにはクラスまたはインタフェースを、Typeにはクラス、インタフェース、配列、またはプリミティブを、methodにはメソッドまたはコンストラクタを、それぞれ指定できます。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\fBTypical forms for\fR\fB @see package\&.class#member\fR +\fBReferencing a member of the current class\fR +@see #field +@see #method(Type, Type,\&.\&.\&.) +@see #method(Type argname, Type argname,\&.\&.\&.) +@see #constructor(Type, Type,\&.\&.\&.) +@see #constructor(Type argname, Type argname,\&.\&.\&.) + +\fBReferencing another class in the current or imported packages\fR +@see Class#field +@see Class#method(Type, Type,\&.\&.\&.) +@see Class#method(Type argname, Type argname,\&.\&.\&.) +@see Class#constructor(Type, Type,\&.\&.\&.) +@see Class#constructor(Type argname, Type argname,\&.\&.\&.) +@see Class\&.NestedClass +@see Class + +\fBReferencing an element in another package (fully qualified)\fR +@see package\&.Class#field +@see package\&.Class#method(Type, Type,\&.\&.\&.) +@see package\&.Class#method(Type argname, Type argname,\&.\&.\&.) +@see package\&.Class#constructor(Type, Type,\&.\&.\&.) +@see package\&.Class#constructor(Type argname, Type argname,\&.\&.\&.) +@see package\&.Class\&.NestedClass +@see package\&.Class +@see package +.fi +.if n \{\ +.RE +.\} +.PP +前のリストに関するメモ: +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +最初のタイプの形式(パッケージとクラスを省略)の場合、\fIjavadoc\fRコマンドは、現在のクラスの階層のみを検索します。つまり、現在のクラスかインタフェース、そのスーパークラスかスーパーインタフェース、またはその外側を囲んでいるクラスかインタフェースからメンバーを検索します(検索項目1\(en3)。現在のパッケージの他の部分や、他のパッケージは検索しません(検索項目4\(en5)。「@seeタグの検索順序」を参照してください。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +メソッドまたはコンストラクタの入力時に、\fIgetValue\fRのようにカッコなしの名前を使用した場合、同じ名前のフィールドが存在していなければ、\fIjavadoc\fRコマンドはそのメソッドへのリンクを作成します。このメソッドがオーバーロードされている場合、\fIjavadoc\fRコマンドは、検索で最初に見つかったメソッドにリンクします。結果は前もって特定できません。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +ネストされたクラスは、すべての形式について、\fIouter\&.inner\fRとして指定する必要があります。単純に\fIinner\fRとはしないでください。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +すでに述べたように、クラスとメンバーとの間の区切り文字としては、ドット(\fI\&.\fR)ではなくシャープ記号(\fI#\fR)を使用します。このように指定すると、\fIjavadoc\fRコマンドは、あいまいさを解決できます。ドットは、クラス、ネストされたクラス、パッケージ、およびサブパッケージを区切るためにも使用されるからです。ただし、\fIjavadoc\fRコマンドでは、あいまいさがなければドットは正しく解析されますが、警告は表示されます。 +.RE +@seeタグの検索順序.PP +\fIjavadoc\fRコマンドは、ソース・ファイル、パッケージ・ファイル、概要ファイルに表示される\fI@see\fRタグを処理します。後者の2つのファイルでは、完全修飾の名前を\fI@see\fRタグに指定する必要があります。ソース・ファイルでは、完全修飾の名前、または部分修飾の名前を指定できます。 +.PP +次に、\fI@see\fRタグの検索順序を示します。 +.sp +.RS 4 +.ie n \{\ +\h'-04' 1.\h'+01'\c +.\} +.el \{\ +.sp -1 +.IP " 1." 4.2 +.\} +現在のクラスまたはインタフェース。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04' 2.\h'+01'\c +.\} +.el \{\ +.sp -1 +.IP " 2." 4.2 +.\} +外側を囲んでいるクラスとインタフェース(最も近いものから検索)。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04' 3.\h'+01'\c +.\} +.el \{\ +.sp -1 +.IP " 3." 4.2 +.\} +スーパークラスとスーパーインタフェース(最も近いものから検索)。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04' 4.\h'+01'\c +.\} +.el \{\ +.sp -1 +.IP " 4." 4.2 +.\} +現在のパッケージ。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04' 5.\h'+01'\c +.\} +.el \{\ +.sp -1 +.IP " 5." 4.2 +.\} +インポートされているパッケージ、クラス、およびインタフェース(\fIimport\fR文の順序に従って検索)。 +.RE +.PP +\fIjavadoc\fRコマンドは、各クラスについて項目1\-3を再帰的に適用しながら、一致する名前が見つかるまで検索を続けます。つまり、まず現在のクラスを検索し、次にその外側を囲んでいるクラスEを検索した後、Eのスーパークラスを検索してから、Eを囲んでいるクラスを検索します。項目4と5では、\fIjavadoc\fRコマンドが1つのパッケージ内のクラスまたはインタフェースを検索する順序は決まっていません(その順序は、個々のコンパイラによって異なります)。項目5では、\fIjavadoc\fRコマンドは、\fIjava\&.lang\fRを検索します。このパッケージは、すべてのプログラムに自動的にインポートされるからです。 +.PP +\fIjavadoc\fRコマンドは、完全修飾でないソース・ファイルで\fI@see\fRタグを見つけると、Javaコンパイラと同じ順序で指定された名前を検索します(ただし、\fIjavadoc\fRコマンドは、特定の名前空間のあいまいさを検出しません。これは、ソース・コードにこれらのエラーが存在していないことを前提としているためです)。この検索順序は、Java言語仕様で正式に定義されています。\fIjavadoc\fRコマンドは、関連するクラスとパッケージ、およびインポートされたクラスとパッケージのすべてからその名前を検索します。具体的には、次の順序で検索します。 +.sp +.RS 4 +.ie n \{\ +\h'-04' 1.\h'+01'\c +.\} +.el \{\ +.sp -1 +.IP " 1." 4.2 +.\} +現在のクラスまたはインタフェース。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04' 2.\h'+01'\c +.\} +.el \{\ +.sp -1 +.IP " 2." 4.2 +.\} +外側を囲んでいるクラスとインタフェース(最も近いものから検索)。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04' 3.\h'+01'\c +.\} +.el \{\ +.sp -1 +.IP " 3." 4.2 +.\} +スーパークラスとスーパーインタフェース(最も近いものから検索)。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04' 4.\h'+01'\c +.\} +.el \{\ +.sp -1 +.IP " 4." 4.2 +.\} +現在のパッケージ。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04' 5.\h'+01'\c +.\} +.el \{\ +.sp -1 +.IP " 5." 4.2 +.\} +インポートされているパッケージ、クラス、およびインタフェース(\fIimport\fR文の順序に従って検索)。 +.RE +.PP +\fIjavadoc\fRコマンドは、必ずしもサブクラスを検索するとは限りません。また、実行中に他のパッケージのドキュメントが生成される場合でも、他のパッケージを検索しません。たとえば、\fI@see\fRタグが\fIjava\&.awt\&.event\&.KeyEvent\fRクラス内に含まれていて、\fIjava\&.awt package\fR内のある名前を参照していても、そのクラスがインポートしないかぎり\fIjavadoc\fRコマンドはそのパッケージを検索しません。 +名前が表示される方法.PP +\fIlabel\fRを省略すると、\fIpackage\&.class\&.member\fRが表示されます。一般に、これは現在のクラスおよびパッケージに応じて適切に短縮されます。短縮されるとは、\fIjavadoc\fRコマンドにより必要最小限の名前のみが表示されるということです。たとえば、\fIString\&.toUpperCase()\fRメソッドに、同じクラスのメンバーへの参照と他のクラスのメンバーへの参照が含まれている場合、クラス名が表示されるのは後者のケースのみです(次のリストを参照)。パッケージ名を全体的に削除するには、\fI\-noqualifier\fRオプションを使用します。 +.RS 4 +\fB参照のタイプ\fR: \fI@see\fRタグは同じクラス、同じパッケージのメンバーを参照します +.RE +.RS 4 +\fB例\fR: \fI@see String#toLowerCase()\fR +.RE +.RS 4 +\fB表示\fR: \fItoLowerCase()\fR \- パッケージおよびクラス名を省略します +.RE +.RS 4 +.RE +.RS 4 +\fB参照のタイプ\fR: \fI@see\fRタグは別のクラス、同じパッケージのメンバーを参照します +.RE +.RS 4 +\fB例\fR: \fI@see Character#toLowerCase(char)\fR +.RE +.RS 4 +\fB表示\fR: \fICharacter\&.toLowerCase(char)\fR \- パッケージ名を省略し、クラス名を含みます +.RE +.RS 4 +.RE +.RS 4 +\fB参照のタイプ\fR: \fI@see\fRタグは異なるクラス、異なるパッケージのメンバーを参照します +.RE +.RS 4 +\fB例\fR: \fI@see java\&.io\&.File#exists()\fR +.RE +.RS 4 +\fB表示\fR: \fIjava\&.io\&.File\&.exists()\fR \- パッケージおよびクラス名を含みます +.RE +.RS 4 +.RE +@seeタグの例.PP +右側のコメントは、\fI@see\fRタグが\fIjava\&.applet\&.Applet\fRなどの別のパッケージのクラス内にある場合に、名前がどのように表示されるかを示しています。JavadocツールでのDocコメントの記述方法の@seeに関する項 +(http://www\&.oracle\&.com/technetwork/java/javase/documentation/index\-137868\&.html#@see)を参照してください。 +.sp +.if n \{\ +.RS 4 +.\} +.nf + See also: +@see java\&.lang\&.String // String +@see java\&.lang\&.String The String class // The String class +@see String // String +@see String#equals(Object) // String\&.equals(Object) +@see String#equals // String\&.equals(java\&.lang\&.Object) +@see java\&.lang\&.Object#wait(long) // java\&.lang\&.Object\&.wait(long) +@see Character#MAX_RADIX // Character\&.MAX_RADIX +@see <a href="spec\&.html">Java Spec</a> // Java Spec +@see "The Java Programming Language" // "The Java Programming Language" +.fi +.if n \{\ +.RE +.\} +.PP +\fB注意:\fR +\fI@se\fR\fIe\fRタグを拡張してドキュメント化されないクラスにリンクするには、\fI\-link\fRオプションを使用します。 +.PP +@serial \fIfield\-description\fR | include | exclude +.RS 4 +JDK 1\&.2で導入 +.sp +デフォルトの直列化可能フィールドのドキュメンテーション・コメントで使用します。クラスの直列化可能なフィールドおよびデータの文書化 +(http://docs\&.oracle\&.com/javase/8/docs/platform/serialization/spec/serial\-arch\&.html#5251)を参照してください +.sp +Oracleの直列化された形式の仕様にクラスを含める基準 +(http://www\&.oracle\&.com/technetwork/java/javase/documentation/serialized\-criteria\-137781\&.html)も参照してください +.sp +\fIfield\-description\fR(省略可能)では、フィールドの意味を説明し、取り得る値のリストを示す必要があります。必要な場合は、複数の行に渡って説明を記述できます。標準ドックレットは、この情報を、直列化された形式ページに追加します。相互参照ページを参照してください。 +.sp +クラスを直列化した後に直列化可能フィールドをクラスに追加した場合、主説明に、追加したバージョンを識別する文を追加する必要があります。 +.sp +\fIinclude\fRおよび\fIexclude\fR引数は、直列化された形式ページにクラスまたはパッケージを含めるか除外するかを示します。次のように機能します。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fISerializable\fRを実装しているpublicまたはprotectedクラスは、そのクラス(またはそのクラスが属するパッケージ)が\fI@serial exclude\fRタグでマークされていないかぎり、含められます。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fISerializable\fRを実装しているprivateまたはpackage\-privateクラスは、そのクラス(またはそのクラスが属するパッケージ)が\fI@serial include\fRタグでマークされていないかぎり、除外されます。 +.RE +.sp +たとえば、\fIjavax\&.swing\fRパッケージはpackage\&.htmlまたはpackage\-info\&.java内で\fI@serial\fR +\fIexclude\fRタグでマークされています。publicクラス\fIjava\&.security\&.BasicPermission\fRは\fI@serial exclude\fRタグでマークされています。package\-privateクラス\fIjava\&.util\&.PropertyPermissionCollection\fRは\fI@serial include\fRタグでマークされています。 +.sp +クラス・レベルの\fI@serial\fRタグはパッケージ・レベルの\fI@serial\fRタグをオーバーライドします。 +.RE +.PP +@serialData \fIdata\-description\fR +.RS 4 +JDK 1\&.2で導入 +.sp +データの説明値を使用して、直列化された形式でのデータの型と順序をドキュメント化します。このデータには、\fIwriteObject\fRメソッドによって書き込まれる省略可能なデータ、および\fIExternalizable\&.writeExternal\fRメソッドによって書き込まれるすべてのデータ(ベース・クラスを含む)が含まれます。 +.sp +\fI@serialData\fRタグは、\fIwriteObject\fR、\fIreadObject\fR、\fIwriteExternal\fR、\fIreadExternal\fR、\fIwriteReplace\fRおよび\fIreadResolve\fRメソッドのドキュメンテーション・コメントで使用できます。 +.RE +.PP +@serialField \fIfield\-name\fR \fIfield\-type\fR \fIfield\-description\fR +.RS 4 +JDK 1\&.2で導入 +.sp +\fISerializable\fRクラスの\fIserialPersistentFields\fRメンバーの\fIObjectStreamField\fRコンポーネントをドキュメント化します。\fIObjectStreamField\fRコンポーネントごとに1つの\fI@serialField\fRタグを使用します。 +.RE +.PP +@since \fIsince\-text\fR +.RS 4 +JDK 1\&.1で導入 +.sp +生成ドキュメントに、指定された\fIsince\-text\fRの値の\fI「導入されたバージョン」\fR見出しを追加します。このテキストには、特別な内部構造はありません。このタグは、すべてのドキュメンテーション・コメント、つまり概要、パッケージ、クラス、インタフェース、コンストラクタ、メソッド、またはフィールドで有効です。このタグは、特定の変更または機能が、\fIsince\-text\fRの値によって指定されたソフトウェア・リリース以降、存在していることを意味します。たとえば、\fI@since 1\&.5\fRです。 +.sp +Javaプラットフォームのソース・コードの場合、\fI@since\fRタグは、JavaプラットフォームAPI仕様のバージョンを示します。ソース・コードがリファレンス実装に追加された時期を示すとは限りません。複数の\fI@since\fRタグを使用でき、複数の\fI@author\fRタグのように扱われます。プログラム要素が複数のAPIで使用される場合、複数のタグを使用できます。 +.RE +.PP +@throws \fIclass\-name\fR \fIdescription\fR +.RS 4 +JDK 1\&.2で導入 +.sp +\fI@exception\fRタグと同じ動作をします。JavadocツールでのDocコメントの記述方法の@throwsに関する項 +(http://www\&.oracle\&.com/technetwork/java/javase/documentation/index\-137868\&.html#@exception)を参照してください +.sp +\fI@throws\fRタグは、生成ドキュメントに\fIThrows\fR小見出しを追加して、\fIclass\-name\fRおよび\fIdescription\fRテキストを書き込みます。\fIclass\-name\fRは、そのメソッドからスローされる可能性のある例外の名前です。このタグは、メソッド、コンストラクタのドキュメンテーション・コメント内でのみ有効です。このクラスが完全指定の名前で記述されていない場合、\fIjavadoc\fRコマンドは、検索順序に従ってクラスを探します。複数の\fI@throws\fRタグを、同じ例外または違う例外の指定したドキュメンテーション・コメントで使用できます。「@seeタグの検索順序」を参照してください。 +.sp +すべてのチェック済例外がドキュメント化されるようにするために、\fI@throws\fRタグがthrows節内の例外用に存在しない場合は、\fI@throws\fRタグでドキュメント化されたかのように、\fIjavadoc\fRコマンドによって例外がHTML出力に説明なしで追加されます。 +.sp +オーバーライドされるメソッド内で例外が明示的に宣言されている場合のみ、\fI@throws\fRのドキュメントがそのメソッドからサブクラスにコピーされます。インタフェース・メソッドから実装メソッドにコピーされる場合も同様です。\fI{@inheritDoc}\fRタグを使用して、\fI@throws\fRタグがドキュメンテーションを継承するように強制できます。 +.RE +.PP +{@value \fIpackage\&.class#field\fR} +.RS 4 +JDK 1\&.4で導入 +.sp +定数の値を表示します。\fI{@value}\fRタグが静的フィールドのドキュメンテーション・コメントで引数なしで使用されている場合、その定数の値を表示します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +/** + * The value of this constant is {@value}\&. + */ +public static final String SCRIPT_START = "<script>" +.fi +.if n \{\ +.RE +.\} +任意のドキュメンテーション・コメント内で引数\fIpackage\&.class#field\fRありで使用された場合、\fI{@value}\fRタグは指定された定数の値を表示します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +/** + * Evaluates the script starting with {@value #SCRIPT_START}\&. + */ +public String evalScript(String script) {} +.fi +.if n \{\ +.RE +.\} +引数\fIpackage\&.class#field\fRは、\fI@see\fRタグ引数と同一の形式になります。ただし、メンバーは静的フィールドである必要があります。 +.sp +これらの定数の値は「定数フィールド値」 +(http://docs\&.oracle\&.com/javase/8/docs/api/constant\-values\&.html)にも表示されます +.RE +.PP +@version \fIversion\-text\fR +.RS 4 +JDK 1\&.0で導入 +.sp +\fI\-version\fRオプションが使用されている場合、生成ドキュメントに\fI「バージョン」\fR小見出しを追加して、指定された\fIversion\-text\fRの値を書き込みます。このタグはこのコードが含まれるソフトウェアの現在のリリース番号を保持するためのものであるのに対し、\fI@since\fRタグは、このコードが導入されたリリース番号を保持します。\fIversion\-text\fRの値には、特別な内部構造はありません。JavadocツールでのDocコメントの記述方法の@versionに関する項 +(http://www\&.oracle\&.com/technetwork/java/javase/documentation/index\-137868\&.html#@version)を参照してください +.sp +1つのドキュメンテーション・コメントに複数の\fI@version\fRタグを含めることができます。必要に応じて、1つの\fI@version\fRタグに1つのリリース番号を指定することも、複数のリリース番号を指定することもできます。前者の場合は、\fIjavadoc\fRコマンドによって名前と名前の間にカンマ(,)と空白文字が挿入されます。後者の場合は、テキスト全体が解析されることなく、生成ドキュメントにコピーされます。したがって、カンマではなく、各言語に対応した名前区切り文字を使用する必要があるときに、1行に複数の名前を指定できます。 +.RE +.SH "タグを使用できる場所" +.PP +ここでは、タグを使用できる場所について説明します。次のタグがすべてのドキュメンテーション・コメントで使用できます。\fI@see\fR、\fI@since\fR、\fI@deprecated\fR、\fI{@link}\fR、\fI{@linkplain}\fRおよび\fI{@docroot}\fR。 +.SS "概要タグ" +.PP +概要タグは、概要ページのドキュメンテーション・コメントで使用できるタグです(このドキュメンテーション・コメントは、通常overview\&.htmlという名前のソース・ファイル内にあります)。他のドキュメンテーション・コメントの場合と同様に、これらのタグは、主説明の後で使用する必要があります。 +.PP +\fB注意:\fR +Java SE 1\&.2では、概要ドキュメント内の\fI{@link}\fRタグに不具合があります。テキストは正しく表示されますが、リンクが設定されません。現在のところ、\fI{@docRoot}\fRタグは、概要ドキュメント内では機能しません。 +.PP +概要タグは、次のとおりです。 +.PP +@see reference || @since since\-text || @serialField field\-name field\-type field\-description || @author name\-text || @version version\-text || {@link package\&.class#member label} || {@linkplain package\&.class#member label} || {@docRoot} || +.SS "パッケージ・タグ" +.PP +パッケージ・タグは、パッケージのドキュメンテーション・コメントで使用できるタグで、ドキュメンテーション・コメントはpackage\&.htmlまたはpackage\-info\&.javaという名前のソース・ファイル内にあります。ここで使用できる\fI@serial\fRタグは、\fIinclude\fRまたは\fIexclude\fR引数を指定したもののみです。 +.PP +パッケージ・タグは、次のとおりです。 +.PP +@see reference || @since since\-text || @serial field\-description | include | exclude || @author name\-text || @version version\-text || {@linkplain package\&.class#member label} || {@linkplain package\&.class#member label} || {@docRoot} || +.SS "クラスおよびインタフェース・タグ" +.PP +次に、クラスまたはインタフェースのドキュメンテーション・コメントで使用できるタグを示します。\fI@serial\fRタグは、\fIinclude\fRまたは\fIexclude\fR引数を指定して、クラスまたはインタフェースのドキュメンテーション内でのみ使用できます。 +.PP +@see reference || @since since\-text || @deprecated deprecated\-text || @serial field\-description | include | exclude || @author name\-text || @version version\-text || {@link package\&.class#member label} || {@linkplain package\&.class#member label} || {@docRoot} || +.PP +クラス・コメントの例: +.sp +.if n \{\ +.RS 4 +.\} +.nf +/** + * A class representing a window on the screen\&. + * For example: + * <pre> + * Window win = new Window(parent); + * win\&.show(); + * </pre> + * + * @author Sami Shaio + * @version 1\&.13, 06/08/06 + * @see java\&.awt\&.BaseWindow + * @see java\&.awt\&.Button + */ +class Window extends BaseWindow { + \&.\&.\&. +} +.fi +.if n \{\ +.RE +.\} +.SS "フィールド・タグ" +.PP +これらのタグは、フィールドに表示できます。 +.PP +@see reference || @since since\-text || @deprecated deprecated\-text || @serial field\-description | include | exclude || @serialField field\-name field\-type field\-description || {@link package\&.class#member label} || {@linkplain package\&.class#member label} || {@docRoot} || {@value package\&.class#field} +.PP +フィールド・コメントの例: +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl /** -.fl - * The X\-coordinate of the component. -.fl + * The X\-coordinate of the component\&. * -.fl * @see #getLocation() -.fl */ -.fl int x = 1263732; -.fl -\fP .fi -.SS -コンストラクタおよびメソッドドキュメンテーションタグ -.LP -次に、コンストラクタまたはメソッドのドキュメンテーションコメントで使用できるタグを示します。ただし、 \f2@return\fP はコンストラクタでは使用できず、 \f2{@inheritDoc}\fP には特定の制限があります。 \f2@serialData\fP タグは特定の直列化メソッドの doc コメントでのみ使用できます。 -.LP -\f3メソッドおよびコンストラクタタグ\fP -.RS 3 -.TP 2 -o -\f2@see\fP -.TP 2 -o -\f2@since\fP -.TP 2 -o -\f2@deprecated\fP -.TP 2 -o -\f2@param\fP -.TP 2 -o -\f2@return\fP -.TP 2 -o -\f2@throws\fP と \f2@exception\fP -.TP 2 -o -\f2@serialData\fP -.TP 2 -o -\f2{@link}\fP -.TP 2 -o -\f2{@linkplain}\fP -.TP 2 -o -\f2{@inheritDoc}\fP -.TP 2 -o -\f2{@docRoot}\fP +.if n \{\ .RE -\f3次にメソッドのドキュメンテーションコメントの例を示します。\fP +.\} +.SS "コンストラクタとメソッド・タグ" +.PP +次に、コンストラクタまたはメソッドのドキュメンテーション・コメントで使用できるタグを示します。ただし、\fI@return\fRはコンストラクタでは使用できず、 +\fI{@inheritDoc}\fRには制限があります。 +.PP +@see reference || @since since\-text || @deprecated deprecated\-text || @param parameter\-name description || @return description || @throws class\-name description || @exception class\-name description || @serialData data\-description || {@link package\&.class#member label} || {@linkplain package\&.class#member label} || {@inheritDoc} || {@docRoot} +.PP +\fB注意:\fR +\fI@serialData\fRタグは、\fIwriteObject\fR、\fIreadObject\fR、\fIwriteExternal\fR、\fIreadExternal\fR、\fIwriteReplace\fRおよび\fIreadResolve\fRメソッドのドキュメンテーション・コメントでのみ使用できます。 +.PP +メソッド・コメントの例: +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl - /** -.fl - * Returns the character at the specified index. An index -.fl - * ranges from <code>0</code> to <code>length() \- 1</code>. -.fl +/** + * Returns the character at the specified index\&. An index + * ranges from <code>0</code> to <code>length() \- 1</code> * -.fl - * @param index the index of the desired character. -.fl - * @return the desired character. -.fl + * @param index the index of the desired character\&. + * @return the desired character\&. * @exception StringIndexOutOfRangeException -.fl * if the index is not in the range <code>0</code> -.fl - * to <code>length()\-1</code>. -.fl - * @see java.lang.Character#charValue() -.fl + * to <code>length()\-1</code> + * @see java\&.lang\&.Character#charValue() */ -.fl public char charAt(int index) { -.fl - ... -.fl + \&.\&.\&. } -.fl -\fP .fi +.if n \{\ +.RE +.\} .SH "オプション" -.LP -javadoc ツールは、ドックレットを使って出力を決定します。Javadoc ツールは、\-doclet オプションでカスタムドックレットが指定されている場合以外は、デフォルトの標準ドックレットを使います。Javadoc ツールには、任意のドックレットとともに使用できるコマンド行オプションがあります。これらのオプションについては、このあとの「Javadoc オプション」で説明します。標準ドックレットでは、このほかに、いくつかの追加のコマンド行オプションが提供されます。これらのオプションについては、そのあとの「標準ドックレットが提供するオプション」で説明します。どのオプション名も、大文字と小文字が区別されません。ただし、オプションの引数では、大文字と小文字が区別されます。 -.LP +.PP +\fIjavadoc\fRコマンドは、ドックレットを使用して出力を決定します。\fIjavadoc\fRコマンドは、\fI\-doclet\fRオプションでカスタム・ドックレットが指定されている場合以外は、デフォルトの標準ドックレットを使用します。\fIjavadoc\fRコマンドには、任意のドックレットとともに使用できるコマンドライン・オプションがあります。これらのオプションについては、Javadocオプションで説明します。標準ドックレットでは、この他に、いくつかの追加のコマンドライン・オプションが提供されます。これらのオプションについては、標準ドックレットのオプションで説明します。どのオプション名も、大文字と小文字が区別されません。ただし、オプションの引数では、大文字と小文字が区別されます。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +Javadocオプションも参照してください +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +標準ドックレットのオプションも参照してください +.RE +.PP オプションは次のとおりです。 -.LP -.TS -.if \n+(b.=1 .nr d. \n(.c-\n(c.-1 -.de 35 -.ps \n(.s -.vs \n(.vu -.in \n(.iu -.if \n(.u .fi -.if \n(.j .ad -.if \n(.j=0 .na -.. +.PP +\-1\&.1 || \-author || \-bootclasspath classpathlist || \-bottom text || \-breakiterator || \-charset name || \-classpath classpathlist || \-d directory || \-docencoding name || \-docfilesubdirs || \-doclet class || \-docletpath classpathlist || \-doctitle title || \-encoding || \-exclude packagename1:packagename2:\&.\&.\&. || \-excludedocfilessubdir name1:name2 || \-extdirs dirist || \-footer footer || \-group groupheading packagepattern:packagepattern || \-header header || \-help || \-helpfile path\efilename || \-Jflag || \-keywords || \-link extdocURL || \-linkoffline extdocURL packagelistLoc || \-linksource || \-locale language_country_variant || \-nocomment || \-nodeprecated || \-nodeprecatedlist || \-nohelp || \-noindex || \-nonavbar || \-noqualifier all | packagename1:packagename2\&.\&.\&. || \-nosince || \-notimestamp || \-notree || +\fI\-overview path/filename || \fR\-package || \-private || \-protected || \-public || \-quiet || \-serialwarn || \-source release || \-sourcepath sourcepathlist || \-sourcetab tablength || \-splitindex || +\fI\-stylesheet path/filename || \fR\-subpackages package1:package2:\&.\&.\&. || \-tag tagname:Xaoptcmf:"taghead" || \-taglet class || \-tagletpath tagletpathlist || \-title title || \-top || \-use || \-verbose || \-version || \-windowtitle title +.PP +次のオプションは、すべてのドックレットに使用可能なコアのJavadocオプションです。標準ドックレットでは、ドックレットの他の部分を提供します。\fI\-bootclasspath\fR、\fI\-breakiterator\fR、\fI\-classpath\fR、\fI\-doclet\fR、\fI\-docletpath\fR、\fI\-encoding\fR、\-\fIexclude\fR、\fI\-extdirs\fR、\fI\-help\fR、\fI\-locale\fR、\fI\-\fR\fIoverview\fR、\fI\-package\fR、\fI\-private\fR、\fI\-protected\fR、\fI\-public\fR、\fI\-quiet\fR、\fI\-source\fR、\fI\-sourcepath\fR、\fI\-subpackages\fRおよび\fI\-verbose\fR。 +.SS "Javadocオプション" +.PP +\-overview \fIpath/filename \fR +.RS 4 + +\fIjavadoc\fRコマンドに対して、\fIpath/filename \fRで指定されたソース・ファイルから概要ドキュメント用のテキストを取得し、そのテキストを概要ページ(overview\-summary\&.html)に配置するように指定します。\fIpath/filename\fRは、現在のディレクトリからの相対パスです。 +.sp +\fIfilename\fRの値で任意の名前を使用し、pathで任意の配置先を指定できますが、通常はoverview\&.htmlという名前を付け、ソース・ツリー内の最上位パッケージ・ディレクトリを含むディレクトリに配置します。この場所に配置すると、パッケージをドキュメント化するときにpathを指定する必要がなくなります。これは、\fI\-sourcepath\fRオプションによってこのファイルが指し示されるからです。 +.sp +たとえば、\fIjava\&.lang\fRパッケージのソース・ツリーが/src/classes/java/lang/の場合、概要ファイルを/src/classes/overview\&.htmlに配置できます +.sp +実際の例を参照してください。 +.sp +\fIpath/filename\fRで指定するファイルについては、概要コメント・ファイルを参照してください。 +.sp +概要ページが作成されるのは、\fIjavadoc\fRコマンドに複数のパッケージ名を渡した場合のみです。詳細は、HTMLフレームを参照してください。概要ページのタイトルは、\fI\-doctitle\fRによって設定されます。 +.RE +.PP +\-Xdoclint:(all|none|[\-]\fI<group>\fR) +.RS 4 +不正な参照、アクセシビリティの欠落およびJavadocコメントの不足の警告をレポートし、無効なJavadoc構文および不足しているHTMLタグのエラーをレポートします。 +.sp +このオプションにより、\fIjavadoc\fRコマンドは生成された出力に含まれるすべてのドキュメント・コメントをチェックします。通常どおり、標準オプション\fI\-public\fR、\fI\-protected\fR、\fI\-package\fRおよび\fI\-private\fRで生成された出力に含む項目を選択できます。 +.sp +\fI\-Xdoclint\fRが有効になっている場合は、\fIjavac\fRコマンドと同様にメッセージで問題がレポートされます。\fIjavadoc\fRコマンドは、メッセージ、ソース・ファイルのコピーおよびエラーが検出された正確な位置を指すキャレットを出力します。メッセージは、重大度、および生成されたドキュメントがバリデータを使用して実行された場合にエラーが発生する可能性に応じて、警告またはエラーになります。たとえば、不正な参照またはJavadocコメントの欠落は、\fIjavadoc\fRコマンドが無効なHTMLを生成する原因にならないため、これらの問題は警告としてレポートされます。構文エラーまたはHTML終了タグの欠落は、\fIjavadoc\fRコマンドが無効なHTMLを生成する原因になるため、これらの問題はエラーとしてレポートされます。 +.sp +デフォルトでは、\fI\-Xdoclint\fRオプションは有効になっています。オプション\fI\-Xdoclint:none\fRで無効にします。 +.sp +\fI\-Xdoclint\fRオプションでレポートされる内容は次のオプションで変更します。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fI\-Xdoclint\fR\fI\fR\fI none\fR: +\fI\-Xdoclint\fRオプションを無効にします。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fI\-Xdoclint\fR\fI\fR\fI \fR\fIgroup\fR: +\fIgroup\fRチェックを有効にします。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fI\-Xdoclint\fR\fI\fR\fI all\fR: すべてのチェック・グループを有効にします。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fI\-Xdoclint\fR\fI\fR\fI all,\fR\fI\-group\fR: +\fIgroup\fRチェック以外のすべてを有効にします。 +.RE +.sp +変数\fIgroup\fRは次のいずれかの値を持ちます。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fIaccessibility\fR: アクセシビリティ・チェッカで検出する問題をチェックします(たとえば、\fI<table>\fRタグで指定されるno captionまたはsummary属性)。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fIhtml\fR: インライン要素へのブロック要素の挿入や終了タグを必要とする要素を終了しないなど、上位レベルHTMLの問題を検出します。ルールは、HTML 4\&.01仕様から導出されます。このタイプのチェックは、\fIjavadoc\fRコマンドを有効にして、ブラウザが受け入れる可能性のあるHTMLの問題を検出します。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fImissing\fR: 欠落しているJavadocコメントまたはタグをチェックします(たとえば、欠落しているコメントやクラス、または欠落している\fI@return\fRタグやメソッド上の同様のタグ)。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fIreference\fR: JavadocタグのJava API要素の参照に関連する問題をチェックします(たとえば、\fI@see\fRで見つからない項目、または\fI@param\fRの後の不正な名前)。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fIsyntax\fR: エスケープされていない山カッコ(\fI<\fRおよび\fI>\fR)やアンパサンド(\fI&\fR)、無効なJavadocタグなどの下位レベルの問題を確認します。 +.RE +.sp +\fI\-Xdoclint\fRオプションを複数回指定して、複数のカテゴリのエラーと警告をチェックするオプションを有効にできます。または、前のオプションを使用して、複数のエラーおよび警告カテゴリを指定できます。たとえば、次のコマンドのいずれかを使用して、\fIfilename\fRファイル内のHTML、構文およびアクセシビリティの問題をチェックします。 +.sp +.if n \{\ +.RS 4 +.\} .nf -.nr #~ 0 -.if n .nr #~ 0.6n -.ds #d .d -.if \(ts\n(.z\(ts\(ts .ds #d nl -.fc -.nr 33 \n(.s -.rm 80 81 82 -.nr 34 \n(.lu -.eo -.am 80 -.br -.di a+ -.35 -.ft \n(.f -.ll \n(34u*1u/4u -.if \n(.l<\n(80 .ll \n(80u -.in 0 -\-\f21.1\fP -.br -\-author -.br -\-\f2bootclasspath\fP -.br -\-bottom -.br -\-\f2breakiterator\fP -.br -\-charset -.br -\-\f2classpath\fP -.br -\-d -.br -\-docencoding -.br -\-docfilessubdirs -.br -\-\f2doclet\fP -.br -\-\f2docletpath\fP -.br -\-doctitle -.br -\-\f2encoding\fP -.br -\-\f2exclude\fP -.br -\-excludedocfilessubdir -.br -\-\f2extdirs\fP -.br -\-footer -.br -\-group -.br -.br -.di -.nr a| \n(dn -.nr a- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di b+ -.35 -.ft \n(.f -.ll \n(34u*1u/4u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -\-header -.br -\-\f2help\fP -.br -\-helpfile -.br -\-\f2J\fP -.br -\-keywords -.br -\-link -.br -\-linkoffline -.br -\-linksource -.br -\-\f2locale\fP -.br -\-nocomment -.br -\-nodeprecated -.br -\-nodeprecatedlist -.br -\-nohelp -.br -\-noindex -.br -\-nonavbar -.br -\-noqualifier -.br -\-nosince -.br -\-notimestamp -.br -\-notree -.br -\-\f2overview\fP -.br -\-\f2package\fP -.br -.br -.di -.nr b| \n(dn -.nr b- \n(dl -.. -.ec \ -.eo -.am 82 -.br -.di c+ -.35 -.ft \n(.f -.ll \n(34u*1u/4u -.if \n(.l<\n(82 .ll \n(82u -.in 0 -\-\f2private\fP -.br -\-\f2protected\fP -.br -\-\f2public\fP -.br -\-\f2quiet\fP -.br -\-serialwarn -.br -\-\f2source\fP -.br -\-\f2sourcepath\fP -.br -\-sourcetab -.br -\-splitindex -.br -\-stylesheetfile -.br -\-\f2subpackages\fP -.br -\-tag -.br -\-taglet -.br -\-tagletpath -.br -\-top -.br -\-title -.br +javadoc \-Xdoclint:html \-Xdoclint:syntax \-Xdoclint:accessibility \fIfilename\fR +javadoc \-Xdoclint:html,syntax,accessibility \fIfilename\fR +.fi +.if n \{\ +.RE +.\} +\fB注意:\fR +\fIjavadoc\fRコマンドでは、これらのチェックの完全性は保証されません。具体的には、完全なHTMLコンプライアンス・チェッカではありません。\-\fIXdoclint\fRオプションの目的は、\fIjavadoc\fRコマンドを有効にして一般的なエラーの大半をレポートすることです。 +.sp +\fIjavadoc\fRコマンドは、無効な入力の修正を試行せず、レポートのみ行います。 +.RE +.PP +\-public +.RS 4 +publicクラスおよびメンバーのみ表示します。 +.RE +.PP +\-protected +.RS 4 +protectedおよびpublicのクラスとメンバーのみを表示します。これがデフォルトです。 +.RE +.PP +\-package +.RS 4 +package、protected、およびpublicのクラスとメンバーのみ表示します。 +.RE +.PP +\-private +.RS 4 +すべてのクラスとメンバーを表示します。 +.RE +.PP +\-help +.RS 4 +オンライン・ヘルプを表示します。\fIjavadoc\fRと\fIドックレット\fRのコマンドライン・オプションがリストされます。 +.RE +.PP +\-doclet \fIclass\fR +.RS 4 +ドキュメントの生成に使用するドックレットを起動するためのクラス・ファイルを指定します。完全修飾名を使用します。このドックレットにより、出力の内容と形式が定義されます。\fI\-doclet\fRオプションが使用されていない場合、\fIjavadoc\fRコマンドは、標準ドックレットを使用してデフォルトのHTML形式を生成します。このクラスには\fIstart(Root)\fRメソッドが含まれている必要があります。この起動クラスへのパスは\fI\-docletpath\fRオプションによって定義されます。ドックレットの概要 +(http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/javadoc/doclet/overview\&.html)を参照してください +.RE +.PP +\-docletpath \fIclasspathlist\fR +.RS 4 +\fI\-doclet\fRオプションで指定されたドックレット開始クラス・ファイル、およびそのクラスが依存するすべてのJARファイルへのパスを指定します。開始クラス・ファイルがJARファイル内にある場合、このオプションでJARファイルへのパスを指定します。絶対パスまたは現在のディレクトリからの相対パスを指定できます。\fIclasspathlist\fRに複数のパスやJARファイルが含まれる場合には、それらをSolarisの場合はコロン(:)で、Windowsの場合はセミコロン(;)でそれぞれ区切ります。目的のドックレット開始クラスがすでに検索パス内にある場合は、このオプションは不要です。ドックレットの概要 +(http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/javadoc/doclet/overview\&.html)を参照してください +.RE +.PP +\-1\&.1 +.RS 4 +Javadoc 1\&.4から削除され、代替はありません。このオプションは、Javadoc 1\&.1によって生成されるのと同じ外見と機能を持つドキュメントを作成するためのものでした(ネストされたクラスはサポートされていません)。このオプションが必要な場合は、Javadoc 1\&.2または1\&.3をかわりに使用してください。 +.RE +.PP +\-source \fIrelease\fR +.RS 4 +受け付けるソース・コードのリリースを指定します。\fIrelease\fRパラメータには次の値を指定できます。\fIjavac\fRコマンドでコードをコンパイルするときに使用する値に対応する\fIリリース\fRの値を使用します。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fBリリース値: 1\&.5\fR。\fIjavadoc\fRコマンドは、JDK 1\&.5で導入された総称および他の言語機能を含むコードを受け付けます。\fI\-source\fRオプションが使用されなかった場合のコンパイラのデフォルト動作は、1\&.5のものになります。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fBリリース値: 1\&.4\fR。\fIjavadoc\fRコマンドは、JDK 1\&.4で導入されたアサーションを含むコードを受け付けます。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fBリリース値: 1\&.3\fR。\fIjavadoc\fRコマンドは、JDK 1\&.3以降に導入されたアサーション、総称、または他の言語機能をサポートしません。 +.RE +.RE +.PP +\-sourcepath \fIsourcepathlist\fR +.RS 4 +パッケージ名または\fI\-subpackages\fRオプションを\fIjavadoc\fRコマンドに渡すときに、ソース・ファイルを見つけるための検索パスを指定します。 +\fI複数のパスはコロン(:)で区切ります。\fR\fIjavadoc\fRコマンドは、指定されたパス以下のすべてのサブディレクトリを検索します。このオプションを使用して、ドキュメント化されるソース・ファイルの位置のみでなく、それ自体はドキュメント化されないがドキュメント化されるソース・ファイルから継承されたコメントを持つソース・ファイルの位置も確認できます。 +.sp +\fI\-sourcepath\fRオプションを使用できるのは、\fIjavadoc\fRコマンドにパッケージ名を渡す場合のみです。\fIjavadoc\fRコマンドに渡されるソース・ファイルは検索されません。ソース・ファイルを特定するには、そのディレクトリに移動するか、「1つ以上のクラスのドキュメント化」に示すように各ファイルの前にパスを含めます。\fI\-sourcepath\fRが省略された場合、\fIjavadoc\fRコマンドは、クラス・パスを使用してソース・ファイルを検索します(\fI\-classpath\fRを参照)。デフォルトの\fI\-sourcepath\fRは、クラス・パスの値です。\fI\-classpath\fRを省略してパッケージ名を\fIjavadoc\fRコマンドに渡すと、\fIjavadoc\fRコマンドは現在のディレクトリ(およびそのサブディレクトリ)からソース・ファイルを検索します。 +.sp +\fIsourcepathlist\fRには、ドキュメント化するパッケージのソース・ツリーのルート・ディレクトリを設定します。 +.sp +たとえば、\fIcom\&.mypackage\fRという名前のパッケージをドキュメント化する場合に、そのソース・ファイルが/home/user/src/com/mypackage/*\&.javaにあるとします。ソース・パスをcom\emypackageが含まれるディレクトリ/home/user/srcに指定してから、次のように、パッケージ名を指定します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +javadoc \-sourcepath /home/user/src/ com\&.mypackage +.fi +.if n \{\ +.RE +.\} +ソース・パスの値とパッケージ名を連結して、ドットをスラッシュ(/)に変更すると、次のように、パッケージのフルパスになります。 +.sp +/home/user/src/com/mypackage +.sp +2つのソース・パスを設定するには、次のようにします。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +javadoc \-sourcepath /home/user1/src:/home/user2/src com\&.mypackage +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\-classpath \fIclasspathlist\fR +.RS 4 +\fIjavadoc\fRコマンドが参照クラスの検索を行うときに使用するパスを指定します。参照クラスとは、ドキュメント化されるクラスと、それらのクラスによって参照されるすべてのクラスのことです。 +\fI複数のパスはコロン(:)で区切ります。\fR\fIjavadoc\fRコマンドは、指定されたパス以下のすべてのサブディレクトリを検索します。\fIclasspathlist\fRの値を指定するときは、クラス・パスのドキュメントにある指示に従ってください。 +.sp +\fI\-sourcepath\fRが省略された場合、\fIjavadoc\fRコマンドは\fI\-classpath\fRを使用して、ソース・ファイルおよびクラス・ファイルを検索します(下位互換性のため)。ソース・ファイルとクラス・ファイルを別々のパスから検索する必要がある場合は、\fI\-sourcepath\fRと\fI\-classpath\fRの両方を使用します。 +.sp +たとえば、\fIcom\&.mypackage\fRをドキュメント化する場合に、そのソース・ファイルがディレクトリ/home/user/src/com/mypackageにあり、このパッケージが/home/user/libthen内のライブラリに依存しているとき、次のように指定します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +javadoc \-sourcepath /home/user/lib \-classpath /home/user/src com\&.mypackage +.fi +.if n \{\ +.RE +.\} +他のツールと同様に、\fI\-classpath\fRが指定されていない場合、\fICLASSPATH\fR環境変数が設定されていれば、\fIjavadoc\fRコマンドはその環境変数を使用します。どちらも設定されていない場合、\fIjavadoc\fRコマンドは現在のディレクトリからクラスを検索します。 +.sp +\fIjavadoc\fRコマンドが\fI\-classpath\fRを使用してユーザー・クラスを検索する方法についての、拡張機能クラスやブートストラップ・クラスに関連した詳細は、クラスの検索方法 +(http://docs\&.oracle\&.com/javase/8/docs/technotes/tools/findingclasses\&.html)を参照してください。 +.sp +*のベース名を含むクラス・パス要素は、\fI\&.jar\fRまたは\fI\&.JAR\fRを拡張子に持つディレクトリ内のすべてのファイルのリストを指定するのと同等とみなされます。 +.sp +たとえば、ディレクトリ\fImydir\fRに\fIa\&.jar\fRと\fIb\&.JA\fRRが含まれている場合、クラス・パス要素\fIfoo/*\fRは\fIA\&.jar:b\&.JAR\fRに展開されますが、JARファイルの順番は未指定となります。非表示のファイルを含む、指定したディレクトリ内のすべてのJARファイルがリストに含まれます。*からなるクラス・パス・エントリは、現在のディレクトリ内のすべてのJARファイルのリストに展開されます。\fICLASSPATH\fR環境変数も同様に展開されます。クラス・パスのワイルドカードの展開は、Java仮想マシン(JVM)の開始前に行われます。Javaプログラムは、System\&.getenv(\fI"CLASSPATH"\fR)の呼び出しによってなど、環境を問い合せる場合を除き、展開されていないワイルドカードを参照しません。 +.RE +.PP +\-subpackages \fIpackage1:package2:\&.\&.\&.\fR +.RS 4 +ソース・ファイルから指定されたパッケージおよびそのサブパッケージ内に再帰的にドキュメントを生成します。このオプションは、ソース・コードに新しいサブパッケージを追加する際に便利です。新しいサブパッケージが自動的に組み込まれるからです。各package引数は、任意の最上位サブパッケージ(\fIjava\fRなど)または完全修飾パッケージ(\fIjavax\&.swing\fRなど)になります。ソース・ファイルを含める必要はありません。引数は、すべてのオペレーティング・システムで、コロンで区切られます。ワイルドカードは使用できません。パッケージの検索場所を指定するには、\fI\-sourcepath\fRを使用します。このオプションでは、ソース・ツリー内に存在するがパッケージに含まれないソース・ファイルを処理しません。ソース・ファイルの処理を参照してください。 +.sp +たとえば、次のコマンドは、\fIjava\fRおよび\fIjavax\&.swing\fRという名前のパッケージとこれらのサブパッケージ全部のドキュメントを生成します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +javadoc \-d docs \-sourcepath /home/user/src \-subpackages java:javax\&.swing +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\-exclude \fIpackagename1:packagename2:\&.\&.\&.\fR +.RS 4 +指定されたパッケージとそのサブパッケージを\fI\-subpackages\fRによって作成されたリストから無条件に除外します。過去または将来の\fI\-subpackages\fRオプションの指定によって組み込まれるパッケージも除外の対象となります。 +.sp +次の例では、\fIjava\&.io\fR、\fIjava\&.util\fR、\fIjava\&.math\fRなどは組み込まれますが、\fIjava\&.net\fRと\fIjava\&.lang\fRをルートに持つパッケージは除外されます。\fIjava\&.lang\fRのサブパッケージである\fIjava\&.lang\&.ref\fRが除外される点に注意してください。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +javadoc \-sourcepath /home/user/src \-subpackages java \-exclude + java\&.net:java\&.lang +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\-bootclasspath \fIclasspathlist\fR +.RS 4 +ブート・クラスが存在するパスを指定します。ブート・クラスとは、通常、Javaプラットフォーム・クラスのことです。\fIbootclasspath\fRは、\fIjavadoc\fRコマンドがソース・ファイルとクラス・ファイルを探すときに使用する検索パスの一部です。詳細は、クラスの検出方法 +(http://docs\&.oracle\&.com/javase/8/docs/technotes/tools/findingclasses\&.html)を参照してください +.sp +\fIclasspathlist\fRパラメータ内のディレクトリは、セミコロン(;)で区切る(Windowsの場合)か、コロン(:)で区切ります(Oracle Solarisの場合)。 +.RE +.PP +\-extdirs \fIdirist\fR +.RS 4 +拡張機能クラスが存在するディレクトリを指定します。拡張機能クラスとは、Java拡張機能機構を使用するすべてのクラスです。\fIextdirs\fRオプションは、\fIjavadoc\fRコマンドがソース・ファイルとクラス・ファイルを探すときに使用する検索パスの一部です。詳細は、\fI\-classpath\fRオプションを参照してください。\fIdirlist\fR内のディレクトリは、セミコロン(;)で区切る(Windowsの場合)か、コロン(:)で区切ります(Oracle Solarisの場合)。 +.RE +.PP +\-verbose +.RS 4 +\fIjavadoc\fRコマンドの実行中に詳細なメッセージを表示します。\fIverbose\fRオプションを指定しないと、ソース・ファイルのロード時、ドキュメントの生成時(ソース・ファイルごとに1つのメッセージ)、およびソート時にメッセージが表示されます。verboseオプションを指定すると、各Javaソース・ファイルの解析に要した時間(ミリ秒単位)を示す追加のメッセージが表示されます。 +.RE +.PP +\-quiet +.RS 4 +メッセージを抑制し、警告とエラーのみが表示されるようにして、これらを確認しやすくします。\fIversion\fR文字列も抑止します。 +.RE +.PP +\-breakiterator +.RS 4 +英語の場合、パッケージ、クラスまたはメンバーの主説明の最初の文の終わりを判断する際に、\fIjava\&.text\&.BreakIterator\fRの国際化された文境界を使用します。他のすべてのロケールは、英語言語というロケール固有のアルゴリズムではなく、すでに\fIBreakIterator\fRクラスを使用しています。最初の文は、パッケージ、クラス、またはメンバーのサマリーにコピーされ、アルファベット順の索引にコピーされます。JDK 1\&.2以降、\fIBreakIterator\fRクラスは、英語を除くすべての言語の文の終わりを判断するために、すでに使用されています。したがって、\fI\-breakiterator\fRオプションは、1\&.2以降では英文以外には効果がありません。英文には、次のような独自のデフォルトのアルゴリズムがあります。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +英文のデフォルトの文区切りアルゴリズム。空白文字またはHTMLブロック・タグ(\fI<P>\fRなど)が続くピリオドで停止します。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +breakiterator文区切りアルゴリズム。次の語が大文字で始まる場合、空白文字が続くピリオド、疑問符、または感嘆符で停止します。このアルゴリズムでは「The serial no\&. is valid」など、ほとんどの省略表記が処理されますが、「Mr\&. Smith」は処理されません。\fI\-breakiterator\fRオプションでは、HTMLタグや、数字または記号で始まる文では停止しません。HTMLタグに埋め込まれている場合でも、「\&.\&./filename」の最後のピリオドで停止します。 +.RE +.sp +Java SE 1\&.5では\fI\-breakiterator\fR警告メッセージが削除され、デフォルトの文区切りアルゴリズムは変更されていません。ソース・コードを変更せず、SE 1\&.4\&.xでの\fI\-breakiterator\fRオプションの警告を除去していない場合でも、何もする必要はありません。Java SE 1\&.5\&.0からは警告は消滅しています。 +.RE +.PP +\-locale \fIlanguage_country_variant\fR +.RS 4 +\fIjavadoc\fRコマンドがドキュメントを生成するときに使用するロケールを指定します。この引数は、\fIj\fR\fIava\&.util\&.Locale\fRドキュメントで説明しているように、\fIen_US\fR +(英語、米国)または\fIen_US_WIN\fR +(Windowsバリアント)などのロケールの名前です。 +.sp +\fB注意:\fR +\fI\-locale\fRオプションは、標準ドックレットが提供するすべてのオプション、またはその他の任意のドックレットが提供するすべてのオプションより前(左側)に指定する必要があります。そうしないと、ナビゲーション・バーが英語で表示されます。このコマンドライン・オプションのみ、指定する順序に依存します。標準ドックレットのオプションを参照してください。 +.sp +ロケールを指定すると、指定したロケールのリソース・ファイルが\fIjavadoc\fRコマンドによって選択されて、メッセージ(ナビゲーション・バー、リストと表の見出し、ヘルプ・ファイルの目次、stylesheet\&.cssのコメントなどの文字列)のために使用されます。また、アルファベット順にソートされるリストのソート順、および最初の文の終わりを判断するための文の区切り文字も、指定したロケールによって決まります。\fI\-locale\fRオプションは、ドキュメント化されるクラスのソース・ファイル内で指定されているドキュメンテーション・コメントのテキストのロケールを決定するものではありません。 +.RE +.PP +\-encoding +.RS 4 +ソース・ファイルのエンコーディングの名前(\fIEUCJIS/SJIS\fRなど)を指定します。このオプションが指定されていない場合は、プラットフォームのデフォルト・コンバータが使用されます。およびオプションも参照してください。 +.RE +.PP +\-J\fIflag\fR +.RS 4 +\fIjavadoc\fRコマンドを実行するJava Runtime Environment (JRE)に、\fIflag\fRを直接渡します。たとえば、生成ドキュメントを処理するためにシステムで32MBのメモリーを確保しておく必要がある場合は、\fI\-Xmx\fRオプションを次のように呼び出します。\fIjavadoc \-J\-Xmx32m \-J\-Xms32m com\&.mypackage\fR。\fI\-Xms\fRは省略可能で、これは初期メモリーのサイズを設定するのみのオプションで、必要なメモリーの最小量がわかっている場合に便利です。 +.sp +\fIJ\fRと\fIflag\fRの間に空白文字はありません。 +.sp +使用している\fIjavadoc\fRコマンドのバージョンを確認するには\fI\-version\fRオプションを使用します。出力ストリームには標準ドックレットのバージョン番号が含まれます。Javadocコマンドの実行を参照してください。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +javadoc \-J\-version +java version "1\&.7\&.0_09" +Java(TM) SE Runtime Environment (build 1\&.7\&.0_09\-b05) +Java HotSpot(TM) 64\-Bit Server VM (build 23\&.5\-b02, mixed mode) +.fi +.if n \{\ +.RE +.\} +.RE +.SS "標準ドックレットのオプション" +.PP +\-d \fIdirectory\fR +.RS 4 +\fIjavadoc\fRコマンドが生成されたHTMLファイルを保存する生成先ディレクトリを指定します。\fI\-d\fRオプションを省略すると、ファイルは現在のディレクトリに保存されます。\fIdirectory\fRの値には、絶対ディレクトリ、または現在の作業ディレクトリからの相対ディレクトリを指定できます。Java SE 1\&.4では、\fIjavadoc\fRコマンドを実行すると生成先ディレクトリが自動的に作成されます。 +.sp +たとえば、次の例では、\fIcom\&.mypackage\fRパッケージのドキュメントが生成され、その結果が\fI/user/doc/ \fRディレクトリに保存されます。\fIjavadoc \-d \fR\fI/user/doc/ \fR\fIcom\&.mypackage\fR +.RE +.PP \-use -.br -\-\f2verbose\fP -.br +.RS 4 +ドキュメント化されるクラスおよびパッケージごとに1つの使用ページを組み込みます。このページには、その特定のクラスまたはパッケージのAPIを使用しているパッケージ、クラス、メソッド、コンストラクタ、およびフィールドが記述されます。たとえば、クラスCを例にとると、クラスCを使用しているものとしては、Cのサブクラス、Cとして宣言されているフィールド、Cを返すメソッド、および型Cのパラメータを持つメソッドとコンストラクタがあります。たとえば、\fIString\fR型用の使用ページを表示できます。\fIjava\&.awt\&.Font\fRクラスの\fIgetName\fRメソッドは\fIString\fR型を戻すので、\fIgetName\fRメソッドは\fIString\fRを使用し、\fIgetName\fRメソッドが\fIString\fR用の使用ページに表示されます。これは実装ではなくAPIの使用のみをドキュメント化します。メソッドがその実装で\fIString\fRを使用するが、引数として文字列を取らない、または文字列を返さない場合、それは\fIString\fRの使用とはみなされません。生成された使用ページにアクセスするには、クラスまたはパッケージに移動し、ナビゲーション・バーの\fBリンクの使用\fRをクリックします。 +.RE +.PP \-version -.br -\-windowtitle -.br -.br -.di -.nr c| \n(dn -.nr c- \n(dl -.. -.ec \ -.35 -.nf -.ll \n(34u -.nr 80 0 -.80 -.rm 80 -.nr 38 \n(a- -.if \n(80<\n(38 .nr 80 \n(38 -.nr 81 0 -.81 -.rm 81 -.nr 38 \n(b- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 82 0 -.82 -.rm 82 -.nr 38 \n(c- -.if \n(82<\n(38 .nr 82 \n(38 -.35 -.nf -.ll \n(34u -.nr 38 1n -.nr 79 0 -.nr 40 \n(79+(0*\n(38) -.nr 80 +\n(40 -.nr 41 \n(80+(3*\n(38) -.nr 81 +\n(41 -.nr 42 \n(81+(3*\n(38) -.nr 82 +\n(42 -.nr TW \n(82 -.if t .if \n(TW>\n(.li .tm Table at line 1993 file Input is too wide - \n(TW units -.fc   -.nr #T 0-1 -.nr #a 0-1 -.eo -.de T# -.ds #d .d -.if \(ts\n(.z\(ts\(ts .ds #d nl -.mk ## -.nr ## -1v -.ls 1 -.ls -.. -.ec -.ne \n(a|u+\n(.Vu -.ne \n(b|u+\n(.Vu -.ne \n(c|u+\n(.Vu -.if (\n(a|+\n(#^-1v)>\n(#- .nr #- +(\n(a|+\n(#^-\n(#--1v) -.if (\n(b|+\n(#^-1v)>\n(#- .nr #- +(\n(b|+\n(#^-\n(#--1v) -.if (\n(c|+\n(#^-1v)>\n(#- .nr #- +(\n(c|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u \n(82u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\h'|\n(41u'\h'|\n(42u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(40u -.in +\n(37u -.a+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.b+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(##u-1v -.nr 37 \n(42u -.in +\n(37u -.c+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.fc -.nr T. 1 -.T# 1 -.35 -.rm a+ -.rm b+ -.rm c+ -.TE -.if \n-(b.=0 .nr c. \n(.c-\n(d.-127 -.LP -\f2イタリック\fP で示されたオプションは、Javadoc の基本オプションであり、Javadoc ツールのフロントエンドによって提供され、すべてのドックレットで使用できます。標準ドックレット自体は、イタリックでないオプションを提供します。 -.SS -Javadoc オプション -.RS 3 -.TP 3 -\-overview \ path/filename -Javadoc に対して、\f2path/filename\fP で指定された「ソース」ファイルから概要ドキュメント用のテキストを取得し、そのテキストを概要ページ (\f2overview\-summary.html\fP) に配置するように指定します。 \f2path/filename\fP は、カレントディレクトリからの相対パスです。 -.LP -\f2filename\fPで任意の名前を使用し、\f2path\fP で任意の配置先を選択することも可能ですが、通常は \f2overview.html\fP という名前を付け、ソースツリー内の最上位パッケージディレクトリを含むディレクトリ内に配置します。この場所に配置すると、パッケージをドキュメント化するときに \f2path\fP を指定する必要がなくなります。なぜなら、 \f2\-sourcepath\fP によってこのファイルが指し示されるからです。たとえば、 \f2java.lang\fP パッケージのソースツリーが \f2/src/classes/java/lang/\fP の場合、概要ファイルを \f2/src/classes/overview.html\fP に配置できます。「使用例」を参照してください。 -.LP -\f2path/filename\fP で指定するファイルについては、「概要コメントファイル」を参照してください。 -.LP -概要ページが作成されるのは、Javadoc に複数のパッケージ名を渡した場合だけです。詳細は、「HTML フレーム」を参照してください。 -.LP -概要ページのタイトルは、\f2\-doctitle\fP によって設定されます。 -.LP -.TP 3 -\-public -public クラスおよびメンバーだけを表示します。 -.LP -.TP 3 -\-protected -protected および public のクラスとメンバーだけを表示します。これがデフォルトです。 -.LP -.TP 3 -\-package -package、protected、および public のクラスとメンバーだけを表示します。 -.LP -.TP 3 -\-private -すべてのクラスとメンバーを表示します。 -.LP -.TP 3 -\-help -オンラインヘルプを表示します。Javadoc とドックレットのコマンド行オプションが一覧表示されます。 -.LP -.TP 3 -\-doclet\ class -ドキュメントの生成に使うドックレットを起動するためのクラスファイルを指定します。完全指定の名前を指定してください。このドックレットにより、出力の内容と形式が定義されます。\f4\-doclet\fP オプションが使われていない場合、Javadoc は、標準ドックレットを使ってデフォルトの HTML 形式を生成します。このクラスには \f2start(Root)\fP が含まれている必要があります。この起動クラスへのパスは \f2\-docletpath\fP オプションによって定義されます。 -.LP -たとえば、MIF ドックレットを呼び出すには、次のように指定します。 -.nf -\f3 -.fl - \-doclet com.sun.tools.doclets.mif.MIFDoclet -.fl -\fP -.fi -.LP -特定のドックレットを実行した完全な例については、 -.na -\f2MIF Doclet のドキュメント\fP @ -.fi -http://java.sun.com/j2se/javadoc/mifdoclet/docs/mifdoclet.htmlを参照してください。 -.LP -.TP 3 -\-docletpath\ classpathlist -\f2\-doclet\fP オプションで指定されたドックレット開始クラスファイル、 およびそのクラスが依存するすべての JAR ファイルへのパスを指定します。開始クラスファイルが jar ファイル内にある場合、以下の例のように jar ファイルのパスが指定されます。絶対パスまたは現在のディレクトリからの相対パスを指定できます。 \f2classpathlist\fP には、複数のパスまたは JAR ファイルを含めることができます。 その場合、各パスまたは JAR ファイルを、Solaris の場合にはコロン (:)、Windows の場合にはセミコロン (;) で区切ります。目的のドックレット開始クラスがすでに検索パス内にある場合は、このオプションは不要です。 -.LP -jar ファイルへのパスの例には、ドックレット開始クラスファイルが含まれています。jar ファイル名が含まれている点に注目してください。 -.nf -\f3 -.fl - \-docletpath /home/user/mifdoclet/lib/mifdoclet.jar -.fl -\fP -.fi -ドックレット開始クラスファイルのパスの例。クラスファイル名が省略されている点に注目してください。 -.nf -\f3 -.fl - \-docletpath /home/user/mifdoclet/classes/com/sun/tools/doclets/mif/ -.fl -\fP -.fi -特定のドックレットを実行した完全な例については、 -.na -\f2MIF Doclet のドキュメント\fP @ -.fi -http://java.sun.com/j2se/javadoc/mifdoclet/docs/mifdoclet.htmlを参照してください。 -.LP -.TP 3 -\-1.1 -\f2この機能は Javadoc 1.4 から削除されました。代替機能はありません。このオプションは、Javadoc 1.1 によって生成されるのと同じ外見と機能を持つドキュメントを作成するためのものでした。入れ子のクラスはサポートされていません。このオプションが必要な場合は、Javadoc 1.2 または 1.3 を使用してください。\fP -.LP -.TP 3 -\-source release -受け付けるソースコードのバージョンを指定します。\f2release\fP には次の値を指定できます。 -.RS 3 -.TP 2 -o -\f31.5\fP \- javadoc は、JDK 1.5 で導入された総称などの言語機能を含むコードを受け付けます。\f3\-source\fP フラグが使用されなかった場合のコンパイラのデフォルト動作は、1.5 のものになります。 -.TP 2 -o -\f31.4\fP Javadoc は、JDK 1.4 で導入された、アサーションを含むコードを受け付けます。 -.TP 2 -o -\f31.3\fP Javadoc は、JDK 1.3 以降に導入されたアサーション、総称、または他の言語機能をサポートしません。 +.RS 4 +生成ドキュメントに、@versionのテキストを組み込みます。このテキストは、デフォルトでは省略されます。使用している\fIjavadoc\fRコマンドのバージョンを確認するには\fI\-J\-version\fRオプションを使用します。 .RE -.LP -javac でコードをコンパイルするときに使用した値に対応する \f2release\fP の値を使用します。 -.LP -.TP 3 -\-sourcepath\ sourcepathlist -パッケージ名または \-subpackages を javadoc コマンドに渡すときは、ソースファイル (.\f2.java\fP) を見つけるための \f2検索パス\fP を指定 \f2します\fP 。\f2sourcepathlist\fP には、コロン (\f2:\fP) で区切って複数のパスを含めることができます。Javadoc ツールは、指定されたパス以下のすべてのサブディレクトリを検索します。このオプションを使って、ドキュメント化されるソースファイルの位置だけでなく、それ自体はドキュメント化されないがドキュメント化されるソースファイルから継承されたコメントを持つソースファイルの位置も確認できます。 -.LP -\f2\-sourcepath\fP オプションを使用できるのは、javadoc コマンドにパッケージ名を渡す場合だけです。このパスからは、javadoc コマンドに渡された \f2.java\fP ファイルは \f2検索\fP されません。 \f2.java\fP ファイルを検索するには、そのファイルのあるディレクトリに cd によって移動するか、または各ファイルの先頭にパスを含めます (「1 つ以上のクラスのドキュメント化」を参照)。 \f2\-sourcepath\fP が省略された場合、Javadoc は、クラスパスを使ってソースファイルを検索します (\-classpath を参照)。したがって、デフォルトの \-sourcepath は、クラスパスの値です。\-classpath も省略してパッケージ名を Javadoc に渡すと、Javadoc は現在のディレクトリおよびそのサブディレクトリからソースファイルを検索します。 -.LP -\f2sourcepathlist\fP には、ドキュメント化するパッケージ名のソースツリーのルートディレクトリを設定します。たとえば、 \f2com.mypackage\fP という名前のパッケージをドキュメント化する場合に、そのソースファイルが次の場所にあるとします。 -.nf -\f3 -.fl - /home/user/src/com/mypackage/*.java -.fl -\fP -.fi -このとき次のように、 \f2sourcepath\fP を、com/mypackage を含むディレクトリである \f2/home/user/src\fP に指定したあと、 パッケージ名 \f2com.mypackage\fP を指定します。 -.nf -\f3 -.fl - % \fP\f3javadoc \-sourcepath /home/user/src/ com.mypackage\fP -.fl -.fi -この方法は、ソースパスの値とパッケージ名を連結して、ドットを (円記号) 「\\」に変えると、パッケージのフルパス \f2/home/user/src/com/mypackage になることを理解すると簡単です\fP。 -.LP -2 つのソースパスを設定するには、次のようにします。 -.nf -\f3 -.fl - % \fP\f3javadoc \-sourcepath /home/user1/src:/home/user2/src com.mypackage\fP -.fl -.fi -.LP -.TP 3 -\-classpath\ classpathlist -javadoc が参照クラス (\f2.class\fP ファイル) の検索を行うときに使用するパスを指定します。参照クラスとは、ドキュメント化されるクラスと、それらのクラスから参照されるすべてのクラスを指します。\f2classpathlist\fP には、コロン (\f2:\fP) で区切って複数のパスを含めることができます。Javadoc ツールは、指定されたパス以下のすべてのサブディレクトリを検索します。classpathlist を指定するときは、 -.na -\f2クラスパス\fP @ -.fi -http://java.sun.com/javase/6/docs/technotes/tools/index.html#generalのドキュメントにある指示 \f2に従ってください\fP。 -.LP -\f2\-sourcepath\fP が省略されると、Javadoc ツールはクラスファイルを検索するときだけでなく、ソースファイルを検索するときにも \f2\-classpath\fP を使用します (下位互換性のため)。したがって、ソースファイルとクラスファイルを別々のパスから検索する必要がある場合は、 \f2\-sourcepath\fP と \f2\-classpath の両方を使います\fP.。 -.LP -たとえば、 \f2com.mypackage\fP をドキュメント化する場合に、そのソースファイルがディレクトリ \f2/home/user/src/com/mypackage\fP 内に格納されており、このパッケージが \f2/home/user/lib\fP 内のライブラリに依存しているとします。このとき次のように指定します。 -.nf -\f3 -.fl - % \fP\f3javadoc \-classpath /home/user/lib \-sourcepath /home/user/src com.mypackage\fP -.fl -.fi -\f2\-classpath\fP が指定されなかった場合、Javadoc ツールはほかのツールと同じく、CLASSPATH 環境変数が設定されていればその値を使用します。どちらも設定されていない場合、Javadoc ツールは現在のディレクトリからクラスを検索します。 -.LP -Javadoc ツールが \f2\-classpath\fP を使用してユーザークラスを検索する方法について、拡張クラスやブートストラップクラスと関連付けて説明している情報を入手するには、 -.na -\f2「クラスの検索方法」\fP @ -.fi -http://java.sun.com/javase/6/docs/technotes/tools/findingclasses.htmlを参照してください。 -.LP -便宜上、 \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 プログラムが展開されていないワイルドカードを認識することはありません。 -.LP -.TP 3 -\-subpackages\ \ package1:package2:... -ソースファイルから指定されたパッケージおよびそのサブパッケージ内に再帰的にドキュメントを生成します。このオプションは、ソースコードに新しいサブパッケージを追加する際に便利です。新しいサブパッケージは自動的に組み込まれます。各 \f2package\fP 引数は、任意の最上位サブパッケージ ( \f2java\fP など) または完全修飾パッケージ ( \f2javax.swing\fP など) になります。ソースファイルを含める必要はありません。引数は、コロンで区切られます (すべてのオペレーティングシステム)。ワイルドカードは不要です (使用不可)。パッケージの検索場所を指定するには、\f2\-sourcepath\fP を使用します。このオプションは、「ソースファイルの処理」で説明したとおり、ソースツリーにあるがパッケージには属していないソースファイルを処理しないので役立ちます。 -.LP -たとえば、 -.nf -\f3 -.fl - % \fP\f3javadoc \-d docs \-sourcepath /home/user/src \-subpackages java:javax.swing\fP -.fl -.fi -このコマンドは、「java」および「javax.swing」という名前のパッケージとこれらのサブパッケージ全部のドキュメントを生成します。 -.LP -\f2\-subpackages\fP と \f2\-exclude\fP を組み合わせて使用すると、特定のパッケージを除外できます。 -.LP -.TP 3 -\-exclude\ \ packagename1:packagename2:... -指定されたパッケージとそのサブパッケージを \f2\-subpackages\fP によって作成されたリストから無条件に除外します。 過去の \f2\-subpackages\fP オプションの指定によって組み込まれたパッケージ、または将来組み込まれるパッケージも除外の対象となります。 次に例を示します。 -.nf -\f3 -.fl - % \fP\f3javadoc \-sourcepath /home/user/src \-subpackages java \-exclude java.net:java.lang\fP -.fl -.fi -この場合、 \f2java.io\fP、 \f2java.util\fP、 \f2java.math\fP などが含められ、 \f2java.net\fP と \f2java.lang\fP をルートに持つパッケージが除外されます。この場合、 \f2java.lang\fP のサブパッケージである \f2java.lang.ref\fP も除外される点に注意してください。 -.LP -.TP 3 -\-bootclasspath\ classpathlist -ブートクラスが存在するパスを指定します。ブートクラスとは、通常、Java プラットフォームのコアクラスのことです。ブートクラスパスは、Javadoc ツールがソースファイルとクラスファイルを探すときに使う検索パスの一部です。詳細は、 -.na -\f2「クラスの検索方法」\fP @ -.fi -http://java.sun.com/javase/6/docs/technotes/tools/findingclasses.html#srcfilesを参照してください。コロン (:) を、 \f2classpathlist\fP 内のディレクトリ間の区切り文字として使用します。 -.LP -.TP 3 -\-extdirs\ dirlist -拡張機能クラスが存在するディレクトリを指定します。拡張機能クラスとは、Java 拡張機能機構を使うすべてのクラスです。extdirs は、Javadoc ツールがソースファイルとクラスファイルを探すときに使う検索パスの一部です。詳細は、前述の \f2\-classpath\fP を参照してください。コロン (:) を、 \f2dirlist\fP 内のディレクトリ間の区切り文字として使用します。 -.LP -.TP 3 -\-verbose -javadoc の実行中に詳細なメッセージを表示します。verbose オプションを指定しないと、ソースファイルのロード時、ドキュメントの生成時 (ソースファイルごとに 1 つのメッセージ)、およびソート時にメッセージが表示されます。verbose オプションを指定すると、各 Java ソースファイルの解析に要した時間 (ミリ秒単位) など、追加のメッセージが表示されます。 -.LP -.TP 3 -\-quiet -エラーメッセージまたは警告メッセージ以外のメッセージを抑制し、警告とエラーだけが表示されるようにして、これらを特定しやすくします。バージョン文字列も抑制します。 -.LP -.TP 3 -\-breakiterator\ -英語の最初の文の末尾を決定する際に、英語用のロケール固有のアルゴリズムではなく、 -.na -\f2java.text.BreakIterator\fP @ -.fi -http://java.sun.com/javase/6/docs/api/java/text/BreakIterator.html の国際化された文境界を使用します (ほかのすべてのロケールではすでに \f2BreakIterator\fP が使用されている)。\f2「最初の文」\fPとは、パッケージ、クラス、またはメンバーの主説明での最初の文のことです。この文は、パッケージ、クラス、またはメンバーの要約にコピーされ、アルファベット順のインデックスにコピーされます。 -.LP -JDK 1.2 以降、BreakIterator クラスは、英語を除くすべての言語の文の終わりを判断するために、すでに使用されています。したがって、 \f2\-breakiterator\fP オプションは、1.2 以降では英文以外には効果がありません。英文には、次のような独自のデフォルトのアルゴリズムがあります。 -.RS 3 -.TP 2 -o -英文のデフォルトの文区切りアルゴリズム \- 空白または HTML ブロックタグ ( \f2<P>\fP など) が続くピリオドで停止する -.TP 2 -o -breakiterator 文区切りアルゴリズム \- 一般に、次の語が大文字で始まる場合、空白文字が続くピリオド、疑問符、または感嘆符で停止する。このアルゴリズムでは「The serial no. is valid」など、ほとんどの省略表記が処理されますが、「Mr. Smith」などは処理されません。HTML タグや、数字または記号で始まる文では停止しない。HTML タグに埋め込まれている場合でも、「../filename」の最後のピリオドで停止する +.PP +\-author +.RS 4 +生成ドキュメントに、\fI@author\fRのテキストを組み込みます。 .RE -.LP -注: 1.5.0 からは、1.4.x に設けられていた breakiterator 警告メッセージを削除し、デフォルトの文区切りアルゴリズムを変更していません。つまり、\\\-breakiterator オプションは、1.5.0 ではデフォルトではなくなり、またデフォルトにするつもりもありません。これは、「次のメジャーリリース」(1.5.0) でデフォルトを変更するという、以前の目的とは逆になっています。つまり、ソースコードを変更せず、1.4.x での breakiterator 警告を除去していない場合でも、1.5.0 からは何もする必要がなく、警告は消滅しています。この逆戻りの理由は、breakiterator をデフォルトにするメリットよりも、デフォルトにするために必要となる、互換性のないソースの変更の方が負担が大きかったためです。この件で皆様に余分の手間をおかけし、混乱を招いたことをお詫びいたします。 -.TP 3 -\-locale\ language_country_variant -.LP -\f3重要\fP \- \f2\-locale\fP オプションは、\f2標準ドックレットが提供するすべてのオプション\fP、またはその他の任意のドックレットの提供するすべてのオプションより前 (左側) に指定する必要があります。そうしないと、ナビゲーションバーが英語で表示されます。このコマンド行オプションだけは、指定する順序に依存します。 -.LP -Javadoc がドキュメントを生成するときに使うロケールを指定します。この引数は次のような、java.util.Locale のドキュメンテーションで説明されているロケールの名前です。 \f2en_US\fP (英語、米国) または \f2en_US_WIN\fP (Windows で使用される英語)。 -.LP -ロケールを指定すると、指定したロケールのリソースファイルが Javadoc によって選択されて、メッセージ (ナビゲーションバー、リストと表の見出し、ヘルプファイルの目次、stylesheet.css のコメントなどの文字列) のために使われます。また、アルファベット順にソートされるリストのソート順、および最初の文の末尾を判別するための文の区切り文字も、指定したロケールによって決まります。ただし、このオプションは、ドキュメント化されるクラスのソースファイル内で指定されているドキュメンテーションコメントのテキストのロケールを決定するものではありません。 -.LP -.TP 3 -\-encoding\ name -ソースファイルのエンコーディングの名前 ( \f2EUCJIS/SJIS\fP など) を指定します。 このオプションが指定されていない場合は、プラットフォームのデフォルトコンバータが使われます。 -.LP -\-docencoding および \-charset も参照してください。 -.LP -.TP 3 -\-Jflag -javadoc を実行する実行時システム java に、\f2flag\fP を直接渡します。 \f2J\fP と \f2flag\fP の間に空白を入れないように注意してください。たとえば、生成ドキュメントの処理用として32M バイトのメモリーをシステムで確保しておく必要がある場合には、java の \f2\-Xmx\fP オプションを次のように呼び出します。\f2\-Xms\fP は省略可能です。これは、メモリーの初期サイズを設定するだけのオプションで、メモリーの最低必要量がわかっている場合に便利です。 -.nf -\f3 -.fl - % \fP\f3javadoc \-J\-Xmx32m \-J\-Xms32m\fP \f3com.mypackage\fP -.fl -.fi -使用している javadoc のバージョンを確認するには、次のように Java の\f2「\-version」\fPオプションを呼び出します。 -.nf -\f3 -.fl - % \fP\f3javadoc \-J\-version\fP -.fl - java version "1.2" -.fl - Classic VM (build JDK\-1.2\-V, green threads, sunwjit) -.fl -.fi -出力ストリームには標準ドックレットのバージョン番号が含まれます。 +.PP +\-splitindex +.RS 4 +索引ファイルをアルファベットごとに複数のファイルに分割し、文字ごとに1つのファイルと、アルファベット以外の記号で始まる索引エントリ用に1つのファイルを作成します。 .RE -.SS -標準ドックレットが提供するオプション -.RS 3 -.TP 3 -\-d\ directory -生成された HTML ファイルを保存する生成先ディレクトリを指定します(「d」は「生成先 (destination)」の意味)。このオプションを省略すると、生成されたファイルは現在のディレクトリに保存されます。値 \f2directory\fP には、絶対ディレクトリ、または現在の作業ディレクトリからの相対ディレクトリを指定できます。バージョン 1.4 では、javadoc を実行すると生成先ディレクトリが自動的に作成されます。 -.LP -たとえば次の場合、パッケージ \f2com.mypackage\fP のドキュメントが生成され、その結果が \f2/home/user/doc/\fP ディレクトリに保存されます。 -.nf -\f3 -.fl - % \fP\f3javadoc \-d /home/user/doc com.mypackage\fP -.fl -.fi -.LP -.TP 3 -\-use -ドキュメント化されるクラスおよびパッケージごとに 1 つの「使用」ページを組み込みます。このページには、その特定のクラスまたはパッケージの API を使っているパッケージ、クラス、メソッド、コンストラクタ、およびフィールドが記述されます。たとえば、クラス C を例にとると、クラス C を使っているものとしては、C のサブクラス、C として宣言されているフィールド、C を返すメソッド、および、型 C のパラメータを持つメソッドとコンストラクタがあります。 -.LP -たとえば、String の [使用] ページに何が表示されるかを見てみましょう。java.awt.Font クラスの \f2getName()\fP メソッドは、 \f2String\fP 型の値を \f2返します\fP。したがって、 \f2getName()\fP は \f2String\fP を使用しているので、String の [使用] ページに \f2このメソッドが表示されます\fP。 -.LP -ただし、ドキュメント化されるのは API の使用だけであって、実装はドキュメント化されません。あるメソッドが、その実装の中で \f2String\fP を使っていても、引数として文字列をとったり、文字列を返したりしない場合は、 \f2String\fP の「使用」とはみなされません。 -.LP -生成された [使用] ページにアクセスするには、目的のクラスまたはパッケージに移動し、ナビゲーションバーの [使用] リンクをクリックします。 -.TP 3 -\-version -生成ドキュメントに、@version のテキストを組み込みます。このテキストは、デフォルトでは省略されます。使用している Javadoc ツールのバージョンを確認するには \f2\-J\-version\fP オプションを使用します。 -.LP -.TP 3 -\-author -生成ドキュメントに、@author のテキストを組み込みます。 -.LP -.TP 3 -\-splitindex -索引ファイルをアルファベットごとに複数のファイルに分割し、文字ごとに 1 つのファイルと、アルファベット以外の文字で始まる索引エントリ用に 1 つのファイルを作成します。 -.LP -.TP 3 -\-windowtitle\ title -HTML の <title> タグに配置するタイトルを指定します。指定したタイトルは、ウィンドウのタイトルや、このページに対して作成されたブラウザのブックマーク (お気に入り) に表示されます。このタイトルには HTML タグを含めないでください。タイトルに HTML タグが含まれていると、ブラウザがタグを正しく解釈できません。\f2title\fP の中で引用符を使う場合は、引用符をエスケープする必要があります。\-windowtitle が省略されている場合、Javadoc ツールは、このオプションの代わりに \-doctitle の値を使います。 -.nf -\f3 -.fl - % \fP\f3javadoc \-windowtitle "Java SE Platform" com.mypackage\fP -.fl -.fi -.TP 3 -\-doctitle\ title -概要ファイルの最上部の近くに配置するタイトルを指定します。タイトルは中央揃えになり、レベル 1 の見出しとして、上部ナビゲーションバーのすぐ下に置かれます。\f2title\fP には、HTML タグと空白を含めることができますが、これらを含める場合は、全体を引用符で囲まなければなりません。\f2title\fP の中で引用符を使う場合は、引用符をエスケープする必要があります。 -.nf -\f3 -.fl - % \fP\f3javadoc \-doctitle "Java(TM)" com.mypackage\fP -.fl -.fi -.TP 3 -\-title\ title -\f3このオプションはもう存在していません。\fPこのオプションは Javadoc 1.2 のベータ版にしか存在していませんでした。このオプションの名前は \f2\-doctitle\fP に変更されました。名前を変更した理由は、このオプションが、ウィンドウのタイトルではなくドキュメントのタイトルを定義することを明確にするためです。 -.LP -.TP 3 -\-header\ header -各出力ファイルの上端に配置するヘッダーテキストを指定します。ヘッダーは、上部ナビゲーションバーの右側に配置されます。\f2header\fP には、HTML タグと空白を含めることができますが、これらを含める場合は、全体を引用符で囲まなければなりません。\f2header\fP の中で引用符を使う場合は、引用符をエスケープする必要があります。 -.nf -\f3 -.fl - % \fP\f3javadoc \-header "<b>Java 2 Platform </b><br>v1.4" com.mypackage\fP -.fl -.fi -.LP -.TP 3 -\-footer\ footer -各出力ファイルの下端に配置するフッターテキストを指定します。フッターは、下部ナビゲーションバーの右側に配置されます。\f2footer\fP には、HTML タグと空白を含めることができますが、これらを含める場合は、全体を引用符で囲まなければなりません。\f2footer\fP の中で引用符を使う場合は、引用符をエスケープする必要があります。 -.LP -.TP 3 -\-top -各出力ファイルの上端に配置するテキストを指定します。 -.LP -.TP 3 -\-bottom\ text -各出力ファイルの最下部に配置するテキストを指定します。このテキストは、下部ナビゲーションバーより下の、ページの最下部に配置されます。 \f2text\fP には、HTML タグと空白を含めることができますが、これらを含める場合は、全体を引用符で囲まなければなりません。引用符を \f2text\fP 内で使用する場合、引用符をエスケープしなければならない可能性があります。 -.LP -.TP 3 -\-link\ extdocURL -javadoc により生成された既存の外部参照クラスのドキュメンテーションへのリンクを作成します。引数を 1 つとります。 -.LP -.RS 3 -.TP 2 -o -\f4extdocURL\fP は、リンク先として指定する、javadoc によって生成された外部ドキュメントを含むディレクトリの絶対 URL または相対 URL です。あとで例を示します。このディレクトリ内にパッケージリストファイルが存在していなければなりません。 存在しない場合は、\f2\-linkoffline\fP を使用します。Javadoc ツールは、 \f2package\-list\fP ファイルからパッケージ名を読み取ったあと、その URL でそれらのパッケージにリンクします。Javadoc ツールの実行時に、\f2extdocURL\fP の値がそのまま、作成された \f2<A HREF>\fP リンク内にコピーされます。したがって、\f2extdocURL\fP はファイルへの URL ではなく「ディレクトリへの URL」でなければなりません。 -.LP -\f2extdocURL\fP への絶対リンクを使用すると、ユーザーのドキュメントを任意の Web サイト上のドキュメントにリンクできます。相対位置へリンクするだけでよい場合は相対リンクを使用できます。相対リンクの場合、ユーザーが渡す値は、( \f2\-d\fP で指定された) 生成先ディレクトリから、リンク先となるパッケージを含むディレクトリへの相対パスにすべきです。 -.LP -通常、絶対リンクを指定する場合は、 \f2http:\fP リンクを使用します。Web サーバーを持たないファイルシステムにリンクする場合は、 \f2file: リンクを使用できます。\fP ただし、この方法は、すべてのユーザーが生成された同じファイルシステムを共有するドキュメントにアクセスする必要がある場合以外は使用しないでください。 -.LP -すべての場合、すべてのオペレーティングシステムで、絶対 URL と相対 URL、「http:」ベースと「file:」ベースにかかわらず、スラッシュを区切り文字として使用します ( -.na -\f2URL Memo\fP @ -.fi -http://www.ietf.org/rfc/rfc1738.txt で指定)。 -.RS 3 -.TP 3 -http: ベースの絶対リンク: -\f2\-link http://<host>/<directory>/<directory>/.../<name>\fP -.TP 3 -file: ベースの絶対リンク: -\f2\-link file://<host>/<directory>/<directory>/.../<name>\fP -.TP 3 -相対リンク: -\f2\-link <directory>/<directory>/.../<name>\fP +.PP +\-windowtitle \fItitle\fR +.RS 4 +HTMLの\fI<title>\fRタグに配置するタイトルを指定します。\fItitle\fRタグに指定したテキストは、ウィンドウのタイトルや、このページに対して作成されたブラウザのブックマーク(お気に入り)に表示されます。このタイトルにはHTMLタグを含めないでください。タイトルにHTMLタグが含まれていると、ブラウザがタグを正しく解釈できません。\fItitle\fRタグ内の内部の二重引用符はエスケープ文字を使用してマークします。\fI\-windowtitle\fRオプションを省略すると、\fIjavadoc\fRコマンドは、\fI\-windowtitle\fRオプションのかわりに、\fI\-doctitle\fRオプションの値を使用します。たとえば、\fIjavadoc \-windowtitle "Java SE Platform" com\&.mypackage\fRです。 .RE +.PP +\-doctitle \fItitle\fR +.RS 4 +概要サマリー・ファイルの最上部の近くに配置するタイトルを指定します。\fItitle\fRタグに指定したテキストは中央揃えになり、レベル1の見出しとして、上部ナビゲーション・バーのすぐ下に置かれます。\fItitle\fRタグにはHTMLタグおよび空白文字を含めることができますが、その場合、タイトルを引用符で囲む必要があります。\fItitle\fRタグの内部で引用符を使用する場合は、エスケープする必要があります。たとえば、\fIjavadoc \-header "<b>Java Platform </b><br>v1\&.4" com\&.mypackage\fRです。 .RE -.LP -javadoc の 1 回の実行で複数の \f2\-link\fP オプションを指定すれば、複数のドキュメントへのリンクを作成できます。 \f3\-linkoffline または \-link の選択\fP -.br -\f2\-link\fPを使用する場合: -.RS 3 -.TP 2 -o -外部 API ドキュメントへの相対パスを使用する場合 -.TP 2 -o -外部 API ドキュメントへの絶対 URL を使用する場合 (プログラムがその URL に接続し、読み取りを行うことがシェルによって許可されている場合) +.PP +\-title \fItitle\fR +.RS 4 +すでに存在しません。Javadoc 1\&.2のベータ版にしか存在していませんでした。このオプションは、\fI\-doctitle\fRという名前に変更されました。名前を変更した理由は、このオプションが、ウィンドウのタイトルではなくドキュメントのタイトルを定義することを明確にするためです。 .RE -\f2\-linkoffline\fP を使用する場合: -.RS 3 -.TP 2 -o -外部 API ドキュメントへの絶対 URL を使用する場合 (プログラムがその URL に接続し、読み取りを行うことがシェルによって許可されていない場合)このような状況は、リンク先のドキュメントがファイアウォールの向こう側にある場合に発生します。 +.PP +\-header \fIheader\fR +.RS 4 +各出力ファイルの最上部に配置するヘッダー・テキストを指定します。ヘッダーは、ナビゲーション・バーの右上に配置されます。\fIheader\fRにはHTMLタグおよび空白文字を含めることができますが、その場合、\fIheader\fRを引用符で囲む必要があります。ヘッダー内部の引用符にはエスケープ文字を使用します。たとえば、\fIjavadoc \-header "<b>Java Platform </b><br>v1\&.4" com\&.mypackage\fRです。 .RE -.LP -\f3外部ドキュメントへの絶対リンクの使用例\fP \- \f2java.lang\fP、 \f2java.io\fP 、その他の Java プラットフォームパッケージ ( -.na -\f2http://download.oracle.com/javase/7/docs/api/\fP @ -.fi -http://download.oracle.com/javase/7/docs/api/ 内) にリンクしたい場合があります。次のコマンドは、Java SE プラットフォームパッケージへのリンクを含んだ、パッケージ \f2com.mypackage\fP のドキュメントを生成します。生成されたドキュメントには、たとえばクラスツリー内の \f2Object\fP クラスへのリンクが含まれています。なお、 \f2\-sourcepath\fP や \f2\-d\fP など、その他のオプションは示していません。 +.PP +\-footer \fIfooter\fR +.RS 4 +各出力ファイルの最下部に配置するフッター・テキストを指定します。\fIfooter\fRの値は、ナビゲーション・バーの右下に配置されます。\fIfooter\fRにはHTMLタグおよび空白文字を含めることができますが、その場合、\fIfooter\fRを引用符で囲む必要があります。フッター内部の引用符にはエスケープ文字を使用します。 +.RE +.PP +\-top +.RS 4 +各出力ファイルの最上部に配置するテキストを指定します。 +.RE +.PP +\-bottom \fItext\fR +.RS 4 +各出力ファイルの最下部に配置するテキストを指定します。このテキストは、下部ナビゲーション・バーより下の、ページの最下部に配置されます。テキストにはHTMLタグおよび空白文字を含めることができますが、その場合、テキストを引用符で囲む必要があります。テキスト内部の引用符にはエスケープ文字を使用します。 +.RE +.PP +\-link \fIextdocURL\fR +.RS 4 +既存のJavadocにより生成された外部参照クラスのドキュメントへのリンクを作成します。\fIextdocURL\fR引数は、リンク先として指定する、Javadocにより生成された外部ドキュメントを含むディレクトリの絶対URLまたは相対URLです。指定した\fIjavadoc\fRコマンドの実行で、複数の\fI\-link\fRオプションを指定して複数のドキュメントへのリンクを作成できます。 +.sp +このディレクトリ内にpackage\-listファイルが存在する必要があります(存在しない場合は、\fI\-linkoffline\fRオプションを使用します)。\fIjavadoc\fRコマンドは、package\-listファイルからパッケージ名を読み取った後、そのURLでこれらのパッケージにリンクします。\fIjavadoc\fRコマンドの実行時に、\fIextdocURL\fRの値が、作成された\fI<A HREF>\fRリンク内にコピーされます。したがって、\fIextdocURL\fRはファイルではなくディレクトリへのURLである必要があります。\fIextdocURL\fRに絶対リンクを使用すると、ユーザーのドキュメントを任意のWebサイト上のドキュメントにリンクできます。相対位置へリンクするのみの場合は相対リンクを使用できます。相対リンクを使用する場合、渡す値は宛先ディレクトリから、リンクされているパッケージを含むディレクトリへである必要があります(\fI\-d\fRオプションで指定)。絶対リンクを指定する場合、通常、HTTPリンクを使用します。ただし、Webサーバーを持たないファイル・システムにリンクする場合は、ファイル・リンクを使用できます。生成されたドキュメンテーションにアクセスする全員が同じファイル・システムを共有する場合にのみファイル・リンクを使用します。どの場合も、どのオペレーティング・システムでも、URLが絶対または相対のいずれでも、また\fIh\fR\fIttp:\fRまたは\fIf\fR\fIile:\fRのいずれでも、URLメモ: Uniform Resource Locators +(http://www\&.ietf\&.org/rfc/rfc1738\&.txt)に指定されているとおり、区切り文字としてスラッシュを使用します。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl - % \fP\f3javadoc \-link http://download.oracle.com/javase/7/docs/api/ com.mypackage\fP -.fl +\-link http://<host>/<directory>/<directory>/\&.\&.\&./<name> +\-link file://<host>/<directory>/<directory>/\&.\&.\&./<name> +\-link <directory>/<directory>/\&.\&.\&./<name> .fi -\f3外部ドキュメントへの相対リンクの使用例\fP \- 2 つのパッケージがあり、そのドキュメントが Javadoc ツールを複数回実行した結果生成されたものであるとします。さらに、これらのドキュメントが相対パスで分割されているとします。この例の場合、パッケージは、API である \f2com.apipackage\fP と、SPI (サービスプロバイダインタフェース) である \f2com.spipackage\fP です。ドキュメントの格納先は、 \f2docs/api/com/apipackage\fP と \f2docs/spi/com/spipackage\fP です。API パッケージのドキュメントはすでに生成済みで、 \f2docs\fP がカレントディレクトリになっていると仮定すると、API ドキュメントへのリンクを含む SPI パッケージをドキュメント化するには、次のコマンドを実行します。 +.if n \{\ +.RE +.\} +.RE +\-linkofflineおよび\-linkオプションの違い.PP +次の場合に、\fI\-link\fRオプションを使用します。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +外部APIドキュメントへの相対パスを使用する場合。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +外部APIドキュメントへの絶対URLを使用する場合(そのURLに接続し、読取りを行うことがシェルによって許可されている場合)。 +.RE +.PP +外部APIドキュメントへの絶対URLを使用する場合(そのURLに接続し、読取りを行うことがシェルによって許可されていない場合)は\fI\-linkoffline\fRオプションを使用します。このような状況は、ファイアウォールの内側からファイアウォールの外側にあるドキュメントにリンクしようとする場合に発生します。 +.PP +\fBExample 1\fR, 外部ドキュメントへの絶対リンク +.RS 4 +http://docs\&.oracle\&.com/javase/8/docs/api/index\&.htmlに示すような、\fIjava\&.lang\fR、\fIjava\&.io\fRおよびその他のJavaプラットフォーム・パッケージにリンクする場合、次のコマンドを使用します +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl - % \fP\f3javadoc \-d ./spi \-link ../api com.spipackage\fP -.fl +javadoc \-link http://docs\&.oracle\&.com/javase/8/docs/api/ com\&.mypackage .fi -.LP -\f2\-link\fP の引数は、生成先ディレクトリ (\f2docs/spi\fP) からの相対パスです。 -.LP -\f3詳細\fP \- \f2\-link\fP オプションを使うと、「コードからは参照されていても、Javadoc の今回の実行ではドキュメント化されない」というクラスにリンクできるようになります。リンクから有効なページに移動できるようにするには、それらの HTML ページがある場所を調べ、その場所を \f2extdocURL\fP に指定する必要があります。これにより、たとえば、サードパーティーのドキュメントから \f2http://java.sun.com 上の java.*\fP のドキュメントへのリンクが \f2可能となります\fP。 -.LP -今回の実行で Javadoc によって生成されるドキュメント内の API だけを対象に \f2リンクを作成する場合は、\fP \-link オプションを省略します。 \f2\-link\fP オプションが指定されていない場合、Javadoc ツールは、外部参照されたドキュメントへのリンクを作成しません。これは、そのドキュメントが存在するかどうか、および存在する場合はその場所を判別できないからです。 -.LP -このオプションでは、生成ドキュメント内の複数の場所にリンクを作成できます。 -.LP -もう 1 つの用途は、パッケージセット間でのクロスリンクです。一方のパッケージセットに対して javadoc を実行したあと、他方のパッケージセットに対して javadoc を再度実行することにより、両セット間で双方向のリンクを作成できます。 -.LP -\f3クラスの参照方法\fP \- 外部参照クラスへのリンクを、テキストラベルだけではなく実際に表示するには、次の方法でクラスを参照する必要があります。メソッドの本体でクラスを参照するだけでは十分ではありません。それらのクラスは、 \f2import\fP 文、宣言のいずれの場所で参照されている必要があります。Here are examples of how the class \f2java.io.File\fP can be referenced: -.RS 3 -.TP 2 -o -すべての種類の \f2import\fP 文の場合: ワイルドカードによるインポート、名前による明示的なインポート、または \f2java.lang.* に対する自動的なインポート\fP。たとえば、次のようにすれば十分です。 -.br -\f2import java.io.*;\fP -.br -1.3.x および 1.2.x では、名前による明示的なインポートだけです。ワイルドカードによるインポート文も、 \f2java.lang.* の自動インポートも使用できません\fP。 -.TP 2 -o +.if n \{\ +.RE +.\} +このコマンドは、Java SEプラットフォーム・パッケージへのリンク持つ\fIcom\&.mypackage\fRパッケージのドキュメントを生成します。生成ドキュメントには、たとえばクラス\fItrees\fR内の\fIObject\fRクラスへのリンクが含まれています。\fI\-sourcepath\fRや\fI\-d\fRなどの他のオプションは表示されません。 +.RE +.PP +\fBExample 2\fR, 外部ドキュメントへの相対リンク +.RS 4 +この例では、2つのパッケージがあり、そのドキュメントは\fIjavadoc\fRコマンドを複数回実行した結果生成されたものです。さらに、これらのドキュメントは相対パスで分割されています。パッケージは、APIである\fIcom\&.apipackage\fRと、SPI(サービス・プロバイダ・インタフェース)であるc\fIom\&.spipackage\fRです。ドキュメントの格納先は、docs/api/com/apipackageとdocs/spi/com/spipackageです。APIパッケージのドキュメントはすでに生成されていて、docsが現在のディレクトリである場合、APIドキュメントへのリンクを持つSPIパッケージをドキュメント化するには、次のコマンドを実行します。\fIjavadoc \-d \&./spi \-link \&.\&./api com\&.spipackage\fR +.sp +\fI\-link\fRオプションは、宛先ディレクトリ(docs/spi)からの相対パスです。 +.RE +注意.PP +\fI\-link\fRオプションを使用すると、コードからは参照されていても、今回の\fIjavadoc\fRの実行ではドキュメント化されないクラスにリンクできるようになります。リンクから有効なページに移動できるようにするには、それらのHTMLページがある場所を調べ、その場所を\fIextdocURL\fRに指定する必要があります。これにより、サードパーティのドキュメンテーションがjava\&.*ドキュメンテーション(http://docs\&.oracle\&.com)へリンクすることができます。\fIjavadoc\fRコマンドで、現在の実行で生成しているドキュメンテーション内のAPIへのリンクのみを作成する場合には、\fI\-link\fRオプションを省略します。\fI\-link\fRオプションを指定しないと、\fIjavadoc\fRコマンドは外部参照のためのドキュメンテーションへのリンクを作成しません。ドキュメンテーションが存在するのかどうか、またはどこに存在するのかがわからないからです。\fI\-link\fRオプションでは、生成ドキュメンテーション内の複数の場所にリンクを作成できます。ソース・ファイルの処理を参照してください。もう1つの用途は、パッケージ・セットの間にクロスリンクを作成することです。一方のパッケージ・セットに対して\fIjavadoc\fRコマンドを実行した後、他方のパッケージ・セットに対して\fIjavadoc\fRコマンドを再度実行すると、両セット間に双方向のリンクを作成できます。 +クラスの参照方法.PP +表示される外部参照クラスへのリンクの場合(およびそのテキスト・ラベルだけではなく)、クラスは次の方法で参照される必要があります。メソッドの本体でクラスを参照するのみでは十分ではありません。\fIimport\fR文、宣言のいずれかで参照する必要があります。次に、クラス\fIjava\&.io\&.File\fRを参照する方法の例を示します。 +.PP +すべてのタイプのimport文の場合。ワイルドカードによるインポート、名前による明示的なインポート、または\fIjava\&.lang\&.*\fRに対する自動インポート。 +.PP +Java SE 1\&.3\&.\fIn\fRおよび1\&.2\&.\fIn\fRでは、名前による明示的なインポートのみ機能します。ワイルドカードによる\fIimport\fR文も、\fIimport java\&.lang\&.*\fRの自動インポートも機能しません。 +.PP 宣言の場合: -.br -\f2void foo(File f) {}\fP -.br -この参照を使用し、メソッド、コンストラクタ、フィールド、クラス、またはインタフェースの戻り値の型またはパラメータの型に置くか、 \f2implements\fP、 \f2extends\fP 、または \f2throws\fP 文に置きます。 +\fIvoid mymethod(File f) {}\fR +.PP +参照は、メソッド、コンストラクタ、フィールド、クラスまたはインタフェースの戻り型またはパラメータ・タイプ、あるいは実装、拡張またはスロー文にあります。 +.PP +重要な結果として、\fI\-link\fRオプションを使用しても、この制限のために誤って表示されないリンクが多数発生する可能性があります。テキストはハイパーテキスト・リンクが付けられずに表示されます。リンクが表示する警告から、これらのリンクを認識できます。クラスを正しく参照し、それによってリンクを追加するための最も簡単な方法はそのクラスをインポートすることです。 +パッケージ・リスト.PP +\fI\-link\fRオプションには、\fIjavadoc\fRコマンドによって生成されるpackage\-listという名前のファイルが、\fI\-link\fRオプションに指定したURLに存在していることが必要です。package\-listファイルは、その場所にあるドキュメント化されたパッケージの名前のリストが入った単純なテキスト・ファイルです。前述の例では、\fIjavadoc\fRコマンドは、指定したURLでpackage\-listという名前のファイルを検索し、パッケージ名を読み取って、そのURLでこれらのパッケージにリンクします。 +.PP +たとえば、Java SE APIのパッケージ・リストは +http://docs\&.oracle\&.com/javase/8/docs/api/package\-listにあります。 +.PP +このパッケージ・リストは次のような内容で始まっています。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +java\&.applet +java\&.awt +java\&.awt\&.color +java\&.awt\&.datatransfer +java\&.awt\&.dnd +java\&.awt\&.event +java\&.awt\&.font +and so on \&.\&.\&.\&. +.fi +.if n \{\ .RE -.LP -重要な結果として、 \f2\-link\fP オプションの使用時に、この制限のために誤って表示されないリンクが多数発生する可能性があります。テキストはハイパーテキストリンクが付けられずに表示されます。これらのリンクが表示する警告から、このリンクを認識できます。クラスを正しく参照し、それによってリンクを追加するためのもっとも安全な方法は上で説明したとおり、当該のクラスをインポートすることです。 -.LP -\f3パッケージリスト\fP \- \f2\-link\fP オプションが正しく機能するには、Javadoc ツールによって生成される \f2package\-list\fP という名前のファイルが、ユーザーが \f2\-link\fP に指定した URL に存在している必要があります。 \f2package\-list\fP ファイルは、その場所にあるドキュメント化されたパッケージの名前のリストが入った単純なテキストファイルです。前の例では、Javadoc ツールは、指定された URL で \f2package\-list\fP という名前のファイルを検索し、パッケージ名を読み込んだあと、その URL にあるそれらのパッケージへのリンクを作成しました。 -.LP -たとえば、Java SE 6 API のパッケージリストは -.na -\f2http://download.oracle.com/javase/7/docs/api/package\-list\fP @ -.fi -http://download.oracle.com/javase/7/docs/api/package\-list にあり、次のような内容で始まっています。 -.nf -\f3 -.fl - java.applet -.fl - java.awt -.fl - java.awt.color -.fl - java.awt.datatransfer -.fl - java.awt.dnd -.fl - java.awt.event -.fl - java.awt.font -.fl - その他 -.fl -\fP -.fi -.LP -\f2\-link\fP オプションを指定せずに javadoc を実行した場合、外部参照クラスに属する名前を見つけると、javadoc はその名前をリンクを持たない形で出力します。一方、 \f2\-link\fP オプションが指定された場合、Javadoc ツールは、 \f2指定された\fP \f2extdocURL\fP の場所にある package\-list ファイル内で、そのパッケージ名を検索します。パッケージ名が見つかると、\f2extdocURL\fP が名前の前に付加されます。 -.LP -すべてのリンクが正しく機能するためには、外部参照のすべてのドキュメントが、指定した URL に存在していなければなりません。Javadoc ツールは、指定された package\-list が存在するかどうかを調べるだけで、指定された URL に目的のページが存在するかどうかはチェックしません。 -.LP -\f3複数のリンク\fP \- 複数の \f2\-link\fP オプションを指定すると、任意の数の外部生成ドキュメントへのリンクを作成できます。Javadoc 1.2 には、複数の \f2\-link\fP コマンドを指定できないというバグがあります。これは 1.2.2 で修正されました。 -.LP -リンクする外部ドキュメントごとに、次のように別々のリンクオプションを指定します。 -.LP -\ \ \f2% \fP\f4javadoc \-link\fP \f2extdocURL1\fP \f4\-link\fP \f2extdocURL2\fP \f2... \fP\f4\-link\fP \f2extdocURLn\fP \f4com.mypackage\fP -.LP -\f2extdocURL1\fP、\f2extdocURL2\fP、... \f2extdocURLn\fP は、それぞれ外部ドキュメントのルートを指し、各ルートには、 \f2package\-list\fP という名前のファイルが入っています。 -.LP -\f3クロスリンク\fP \- まだ生成されていない 2 つ以上のドキュメントをクロスリンクする場合は、「ブートストラップ」が必要になります。つまり、どのドキュメントについても \f2package\-list\fP が存在していない場合は、最初のドキュメントに対して Javadoc ツールを実行する時点で、2 番目のドキュメントの \f2package\-list\fP はまだ存在していません。したがって、外部リンクを作成するには、2 番目のドキュメントを生成したあとで、最初のドキュメントを生成し直す必要があります。 -.LP -この場合、最初のドキュメント生成の目的は、 \f2package\-list\fP を作成することです。パッケージ名をすべて把握している場合は、package\-list を手動で作成してもかまいません。次に、2 番目のドキュメントとその外部リンクを生成します。必要な外部の \f2package\-list\fP ファイルが存在しない場合は、Javadoc ツールから警告が出力されます。 -.LP -.TP 3 -\-linkoffline\ extdocURL\ packagelistLoc -このオプションは \f2\-link\fP のバリエーションの 1 つです。どちらも、外部参照クラスの javadoc 生成ドキュメントへのリンクを作成します。Javadoc \f2ツール自体が\fP オフラインになっているとき (Web 接続を使ってドキュメントにアクセスできないとき)、Web 上のドキュメントにリンクするには、\-linkoffline オプションを使用します。 -.LP -厳密には、 \f2外部\fP ドキュメントの \f2package\-list\fP ファイルにアクセスできないとき、またはこのファイルが \f2extdocURL\fP で指定された場所とは異なる場所 (通常、\f2packageListLoc\fP で指定可能なローカルな場所) に存在するとき、\-linkoffline を使用します。したがって、WWW 経由でしか \f2extdocURL\fP にアクセスできない場合、 \f2\-linkoffline\fP を指定することにより、ドキュメントの生成時に Javadoc ツールが Web に接続できなければならないという制約がなくなります。 -.LP -さらに、ドキュメントを更新するための「ハッキング」としての使用も可能です。パッケージのセット全体に対して javadoc を実行したあと、変更した一部のパッケージだけに対して javadoc を実行します。こうして、更新されたファイルを、オリジナルのファイルセットに挿入できるようにします。例をあとで示します。 -.LP -\f2\-linkoffline\fP オプションは引数を 2 つ取ります。1 つは、 \f2<a href>\fP リンクに組み込まれる文字列を表す引数、もう 1 つは \f2package\-list\fP の検索場所を示す引数です。 -.RS 3 -.TP 2 -o -\f4extdocURL\fP は、リンク先として指定する、javadoc によって生成された外部ドキュメントを含むディレクトリの絶対 URL または相対 URL です。相対リンクの場合、その値は、( \f2\-d\fP で指定された) 生成先ディレクトリからリンク先パッケージのルートへの相対パスにすべきです。詳細は、\-link オプションの \f2extdocURL\fP \f2を参照\fP してください。 -.TP 2 -o -\f4packagelistLoc\fP は、外部ドキュメントの \f2package\-list\fP ファイルを含むディレクトリへのパスまたは URL です。これは、URL (http: または file:) でもファイルパスでもかまいませんし、絶対パスでも相対パスでもかまいません。相対パスの場合は、javadoc が実行されるカレントディレクトリからの相対パスとして指定します。ファイル名 \f2package\-list\fP は含めないでください。 +.\} +.PP +\fI\-link\fRオプションを指定せずに\fIjavadoc\fRを実行した場合、外部参照クラスに属する名前を見つけると、その名前をリンクなしで出力します。一方、\fI\-link\fRオプションを指定した場合、\fIjavadoc\fRコマンドは、指定された\fIextdocURL\fRの場所にあるpackage\-listファイルでそのパッケージ名を検索します。パッケージ名が見つかると、\fIextdocURL\fRが名前の前に付加されます。 +.PP +すべてのリンクが正しく機能するためには、外部参照のすべてのドキュメントが、指定したURLに存在する必要があります。\fIjavadoc\fRコマンドは、指定されたpackage\-listが存在するかどうかのみをチェックし、これらのページが存在するかどうかはチェックしません。 +複数のリンク.PP +複数の\fI\-link\fRオプションを指定すると、任意の数の外部生成ドキュメントへのリンクを作成できます。Javadoc 1\&.2には、複数の\fI\-link\fRオプションを指定できないという既知の不具合があります。これはJavadoc 1\&.2\&.2で修正されました。リンクする外部ドキュメントごとに、次のように別々のリンク・オプションを指定します。\fIjavadoc \-link extdocURL1 \-link extdocURL2 \&.\&.\&. \-link extdocURLn com\&.mypackage\fR +\fIextdocURL1\fR、\fIextdocURL2\fR、\&.\fI\&.\&. extdocURLn\fRは、それぞれ外部ドキュメントのルートを指し、各ルートには、package\-listという名前のファイルが入っています。 +クロスリンク.PP +以前に作成された複数のドキュメントをクロスリンクする場合、ブートストラップが必要になることがあります。どのドキュメントについてもpackage\-listが存在していない場合は、最初のドキュメントに対して\fIjavadoc\fRコマンドを実行する時点で、2番目のドキュメントのpackage\-listはまだ存在していません。したがって、外部リンクを作成するには、2番目のドキュメントを生成した後で、最初のドキュメントを生成しなおす必要があります。 +.PP +この場合、最初のドキュメント生成の目的は、package\-listを作成することです(パッケージ名を把握している場合は手動で作成してもかまいません)。次に、2番目のドキュメントとその外部リンクを生成します。必要な外部のpackage\-listファイルが存在しない場合は、\fIjavadoc\fRコマンドから警告が出力されます。 +.PP +\-linkoffline \fIextdocURL packagelistLoc\fR +.RS 4 +このオプションは\fI\-link\fRオプションのバリエーションです。両方とも、Javadocにより生成された外部参照クラスのドキュメントへのリンクを作成します。\fIjavadoc\fRコマンドがWeb接続を使用してドキュメントにアクセスできないとき、Web上のドキュメントにリンクするには、\fI\-link\fRo\fIffline\fRオプションを使用します。外部ドキュメントのpackage\-listファイルにアクセスできないとき、またはこのファイルが\fIextdocURL\fRで指定された場所には存在せず、\fIpackageListLoc\fRで指定できる別の場所(通常ローカル)に存在するとき、\fI\-linkoffline\fRオプションを使用します。\fIextdocURL\fRにWorld Wide Web上でしかアクセスできない場合は、\fI\-linkoffline\fRオプションを指定することにより、ドキュメントの生成時に\fIjavadoc\fRコマンドがWebに接続する必要があるという制約がなくなります。もう1つの用途は、ドキュメントを更新するための回避策として使用することです。パッケージのセット全体に対して\fIjavadoc\fRコマンドを実行した後、変更した一部のパッケージに対してのみ\fIjavadoc\fRコマンドを再度実行して、更新されたファイルを、オリジナルのセットに挿入できるようにします。次に例を示します。\fI\-linkoffline\fRオプションは引数を2つ取ります。第1引数は\fI<a href>\fRリンクに組み込まれる文字列を指定し、第2引数はpackage\-listの検索場所を\fI\-linkoffline\fRに伝えます。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fIextdocURL\fRの値は、リンク先として指定する、Javadocにより生成された外部ドキュメントを含むディレクトリの絶対URLまたは相対URLです。相対URLの場合、値は、生成先ディレクトリ(\fI\-d\fRオプションで指定)からリンク先となるパッケージのルートへの相対パスにする必要があります。詳細は、\fI\-link\fRオプションの\fIextdocURL\fRを参照してください。 .RE -.LP -1 回の javadoc 実行で複数の \f2\-linkoffline\fP オプションを指定できます。1.2.2 より前は、複数のオプションを指定することはできませんでした。 -.LP -\f3外部ドキュメントへの絶対リンクの使用例\fP \- http://download.oracle.com/javase/7/docs/api/ 内の \f2java.lang\fP、 \f2java.io\fP 、およびその他の Java SE プラットフォームパッケージ \f2にリンクしたくても、\fPWeb にアクセスできない場合を考えます。ブラウザで \f2、\fP -.na -\f2http://download.oracle.com/javase/7/docs/api/package\-list\fP @ -.fi -http://download.oracle.com/javase/7/docs/api/package\-list にある package\-list ファイルを開き、それをローカルディレクトリに保存し、第 2 引数 \f2packagelistLoc\fP でこのローカルコピーへのパスを指定します。この例では、パッケージリストファイルはカレントディレクトリ "\f2.\fP" に保存されています。次のコマンドは、Java SE プラットフォームパッケージへのリンクを含んだ、パッケージ \f2com.mypackage\fP のドキュメントを生成します。生成されたドキュメントには、たとえばクラスツリー内の \f2Object\fP クラスへのリンクが含まれています。なお、 \f2\-sourcepath\fP など、その他のオプションは示していません。 -.nf -\f3 -.fl -% \fP\f3javadoc \-linkoffline http://download.oracle.com/javase/7/docs/api/ . com.mypackage\fP -.fl -.fi -.LP -\f3外部ドキュメントへの相対リンクの使用例\fP \- \f2\-linkoffline\fP で相対パスを使用することは、あまりありません。理由は単純で、通常は \f2\-link\fP で十分だからです。 \f2\-linkoffline\fP を使用する際、 \f2package\-list\fP には通常ローカルのファイルを指定します。 相対リンクを使用する際も、リンク先のファイルには通常ローカルのファイルを指定します。したがって、 \f2\-linkoffline の 2 つの引数に別々のパスを指定する必要はありません\fP。2 つの引数が同一である場合は、 \f2\-link\fP を使用できます。 \f2\-link\fP の相対リンクの例を参照してください。 -.LP -\f4package\-list\fP\f3 ファイルを手動で作成\fP \- \f2package\-list\fP ファイルがまだ存在しなくても、ドキュメントのリンク先のパッケージ名がわかっている場合は、このファイルを自分で作成し、packagelistLoc \f2でそのパスを指定することができます。\fPcom.apipackage が最初に生成される時点で \f2com.spipackage\fP のパッケージリストが存在していなかったという、 \f2前出のケースが\fP 一例として挙げられます。この方法は、パッケージ名はわかっているものの、まだ公開されていない、新しい外部ドキュメントにリンクするドキュメントを生成する必要がある場合に便利です。また、Javadoc 1.0 または 1.1 で生成されたパッケージの \f2package\-list\fP ファイルを作成する必要がある場合にも、この方法が使えます。これらのバージョンでは、 \f2package\-list\fP ファイルは生成されていませんでした。同様に、2 つの企業が未公開の \f2package\-list\fP ファイルを共有すれば、クロスリンクを含むドキュメントを同時にリリースすることも可能となります。 -.LP -\f3複数のドキュメントへのリンク\fP \- 参照先となる生成ドキュメントごとに \f2\-linkoffline\fP を 1 回ずつ含めることができます。わかりやすくするために、オプションごとに改行して示しています。 -.LP -\f2% \fP\f4javadoc \-linkoffline\fP \f2extdocURL1\fP \f2packagelistLoc1\fP \f2\\\fP -.br -\f2\ \ \ \ \ \ \ \ \ \ \fP\f4\-linkoffline\fP \f2extdocURL2\fP \f2packagelistLoc2\fP \f2\\\fP -.br -\f2\ \ \ \ \ \ \ \ \ \ ...\fP -.LP -\f3ドキュメントの更新\fP \- 前述の \f2\-linkoffline\fP オプションのもうひとつの用途は、プロジェクトに大量のパッケージが含まれていて、すでにツリー全体に対して javadoc の実行が完了している場合に、次の実行では、少量の変更を手早く加えたあと、ソースツリーのごく一部に対してだけ javadoc を再実行する場合に便利です。これは、ドキュメンテーションコメントに対してだけ変更を加え、宣言は変更しない場合にのみ正しく処理されるので、ハッキングのようなものです。ソースコードの宣言を追加、削除、または変更した場合は、索引、パッケージツリー、継承されるメンバーのリスト、「使用」ページなどの場所で、リンクが壊れることがあります。 -.LP -まず、この新しい小さな実行用として、新しい生成先ディレクトリ ( \f2update\fP と命名) を作成します。元の生成先ディレクトリの名前が \f2html\fP だったとします。もっとも単純な例では、 \f2html ディレクトリの親ディレクトリに移動 (cd) します\fP。 \f2\-linkoffline\fP の第 1 引数をカレントディレクトリ「.」に設定し、第 2 引数を、package\-list が含まれている \f2html\fP への相対パスに設定し、 \f2更新するパッケージのパッケージ名のみを\fP渡します。 -.nf -\f3 -.fl - % \fP\f3javadoc \-d update \-linkoffline . html com.mypackage\fP -.fl -.fi -Javadoc ツリーの終了後、 \f2update/com/package\fP 内の生成されたクラスのページをコピーし (概要や索引は除く)、 \f2html/com/package 内の元のファイルに上書きします\fP。 -.LP -.TP 3 -\-linksource\ -各ソースファイル (行番号付き) の HTML バージョンを作成し、標準 HTML ドキュメントからソースファイルへのリンクを追加します。リンクは、ソースファイル内に宣言されているクラス、インタフェース、コンストラクタ、メソッド、フィールドに対して作成されます。デフォルトコンストラクタ、生成されたクラスに対しては作成されません。 -.LP -\f3このオプションは、\fP\f4\-public\fP\f3、 \fP\f4\-package\fP\f3、 \fP\f4\-protected\fP\f3 、 \fP\f4\-private\fP\f3 の各オプションとは関係なく、非公開のクラス、フィールド、非公開のメソッドの本体をはじめとする組み込まれたソースファイル内のすべての非公開実装の詳細を公開します。\fP\f2\-private\fP オプションも併せて指定しないかぎり、非公開のすべてのクラスやインタフェースにリンク経由でアクセスできるとはかぎりません。 -.LP -各リンクは、その宣言内の識別子名の上に作成されます。たとえば、 \f2Button\fP クラスのソースコードへのリンクは、「Button」という語の上に作成されます。 -.nf -\f3 -.fl - public class Button -.fl - extends Component -.fl - implements Accessible -.fl -\fP -.fi -また、Button クラスの \f2getLabel()\fP メソッドのソースコードへのリンクは、「getLabel」という語の上に作成されます。 -.nf -\f3 -.fl - public String getLabel() -.fl -\fP -.fi -.LP -.TP 3 -\-group\ groupheading\ packagepattern:packagepattern:... -概要ページの複数のパッケージを、指定したグループに分けて、グループごとに表を作成します。各グループは、それぞれ別の \f2\-group\fP オプションで指定します。これらのグループは、コマンド行で指定した順序でページに表示されます。各グループ内では、パッケージがアルファベット順に並べられます。ある特定の \f2\-group\fP オプションでは、 \f2packagepattern\fP 式のリストに一致するパッケージが、 \f2groupheading\fP という見出しの表に表示されます。 -.RS 3 -.TP 2 -o -\f4groupheading\fP には、任意のテキストを指定でき、空白を含めることができます。指定したテキストは、グループの表見出しになります。 -.TP 2 -o -\f4packagepattern\fP には、任意のパッケージ名、または任意のパッケージ名の先頭部分とそれに続く 1 つのアスタリスク (\f2*\fP) を指定できます。 アスタリスクは、「任意の文字に一致する」という意味のワイルドカードです。ワイルドカードとして指定できるのは、アスタリスクだけです。1 つのグループには、コロン (\f2:\fP) で区切って複数のパターンを含めることができます。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fIpackagelistLoc\fRの値は、外部ドキュメントのpackage\-listファイルを含むディレクトリへのパスまたはURLです。これは、URL (http:またはfile:)でもファイル・パスでもかまいません。また、絶対パスと相対パスのどちらでもかまいません。相対パスの場合は、\fIjavadoc\fRコマンドが実行される現在のディレクトリからの相対パスとして指定します。package\-listファイル名を含めないでください。 +.sp +指定した\fIjavadoc\fRコマンドの実行で、複数の\fI\-link\fRオプションを指定できます。Javadoc 1\&.2\&.2より前では、\fI\-linkfile\fRオプションは1回しか指定できませんでした。 .RE -.LP -\f3注: パターンやパターンリスト内でアスタリスクを使う場合は、 \fP\f4"java.lang*:java.util" のように、パターンリストを引用符で囲む必要があります。\fP -.LP -ユーザーが \f2\-group\fP オプションを 1 つも指定しなかった場合、「パッケージ」という見出しの 1 つのグループ内に、すべてのパッケージが配置されます。ドキュメント化されるパッケージの中に、指定したグループのどのグループにも入らないパッケージがある場合、このようなパッケージは「その他のパッケージ」という見出しを持つ独立したグループに入れられます。 -.LP -たとえば、次のようにオプションを指定すると、ドキュメント化される 5 つのパッケージは、コアパッケージ、拡張機能パッケージ、およびその他のパッケージに分けられます。「java.lang*」では、最後のドットを指定していないことに注目してください。「java.lang.*」のようにドットを入れると、java.lang パッケージは除外されることになります。 -.nf -\f3 -.fl - % \fP\f3javadoc \-group "Core Packages" "java.lang*:java.util" -.fl - \-group "Extension Packages" "javax.*" -.fl - java.lang java.lang.reflect java.util javax.servlet java.new\fP -.fl -.fi -この結果、次のようなグループ化が行われます。 -.RS 3 -.TP 3 -コアパッケージ -\f2java.lang\fP -\f2java.lang.reflect\fP -\f2java.util\fP -.TP 3 -拡張機能パッケージ -\f2javax.servlet\fP -.TP 3 -その他のパッケージ -\f2java.new\fP .RE -.LP -.TP 3 -\-nodeprecated -推奨されない API をドキュメントに生成しないようにします。このオプションを指定すると、\-nodeprecatedlist オプションを指定した場合と同じ効果があることに加えて、ドキュメントのほかの部分全体でも、推奨されない API が生成されません。このオプションは、コードを記述しているとき、推奨されないコードによって気を散らされたくない場合に便利です。 -.LP -.TP 3 -\-nodeprecatedlist -推奨されない API のリストを含むファイル (deprecated\-list.html)、およびナビゲーションバーのそのページへのリンクが生成されないようにします。ただし、ドキュメントのほかの部分では、推奨されない API が生成されます。このオプションは、推奨されない API がソースコードに含まれておらず、ナビゲーションバーをすっきりと見せたい場合に便利です。 -.LP -.TP 3 -\-nosince -生成ドキュメントから、@since タグに対応する「導入されたバージョン」 セクションを省略します。 -.LP -.TP 3 -\-notree -生成されるドキュメントからクラスおよびインタフェースの階層ページを省略します。これらのページには、ナビゲーションバーの「ツリー」ボタンからアクセスできます。デフォルトでは、階層が生成されます。 -.LP -.TP 3 -\-noindex -生成ドキュメントから、索引を省略します。デフォルトでは、索引が生成されます。 -.LP -.TP 3 -\-nohelp -出力の各ページの最上部と最下部にあるナビゲーションバーから「ヘルプ」リンクを省略します。 -.LP -.TP 3 -\-nonavbar -生成されるページの最上部と最下部に表示されるナビゲーションバー、ヘッダー、およびフッターを生成しないようにします。このオプションは、bottom オプションには影響を与えません。 \f2\-nonavbar\fP オプションは、印刷するためだけにファイルを PostScript または PDF に変換する場合など、内容だけが重要で、ナビゲーションの必要がない場合に便利です。 -.LP -.TP 3 -\-helpfile\ path/filename -上部と下部のナビゲーションバーの「ヘルプ」リンクのリンク先となる代替ヘルプファイル \f2path/filename\fP のパスを指定します。このオプションが指定されないと、Javadoc ツールは、ツール内でハードコードされているヘルプファイル \f2help\-doc.html\fP を自動作成します。このオプションを使うと、そのデフォルトの動作をオーバーライドできます。\f2filename\fP にはどんなファイル名でも指定でき、 \f2help\-doc.html には限定されません。\fP Javadoc ツールは、ナビゲーションバー内のリンクを必要に応じて調整します。次に例を示します。 -.nf -\f3 -.fl - % \fP\f3javadoc \-helpfile /home/user/myhelp.html java.awt\fP -.fl -.fi -.TP 3 -\-stylesheetfile\ path/filename -代替 HTML スタイルシートファイルのパスを指定します。このオプションが指定されないと、Javadoc ツールは、ツール内でハードコードされているスタイルシートファイル \f2stylesheet.css\fP を自動作成します。このオプションを使うと、そのデフォルトの動作をオーバーライドできます。\f2filename\fP にはどんなファイル名でも指定でき、 \f2stylesheet.css には限定されません\fP。たとえば、 -.nf -\f3 -.fl - % \fP\f3javadoc \-stylesheetfile /home/user/mystylesheet.css com.mypackage\fP -.fl -.fi -.TP 3 -\-serialwarn -@serial タグがない場合は、コンパイル時に警告を生成します。デフォルトでは、Javadoc 1.2.2 以降のバージョンでは、直列化の警告は生成されません1.2.2 より前の初期バージョンでは、警告が生成されます。このオプションを使用すると、直列化の警告が表示されるので、デフォルトの直列化可能フィールドと \f2writeExternal\fP メソッドを適切にドキュメント化するのに役立ちます。 -.LP -.TP 3 -\-charset\ name -このドキュメント用の HTML 文字セットを指定します。この名前は、 -.na -\f2IANA Registry\fP @ -.fi -http://www.iana.org/assignments/character\-sets で与えられた、推奨される MIME 名でなければなりません。たとえば、 -.nf -\f3 -.fl - % \fP\f3javadoc \-charset "iso\-8859\-1" mypackage\fP -.fl -.fi -生成されるすべてのページの先頭に、次の行が挿入されます。 -.nf -\f3 -.fl - <META http\-equiv="Content\-Type" content="text/html; charset=ISO\-8859\-1"> -.fl -\fP -.fi -この META タグについては、 -.na -\f2HTML の標準\fP @ -.fi -http://www.w3.org/TR/REC\-html40/charset.html#h\-5.2.2 (4197265 および 4137321) を参照してください。 -.LP -\-encoding および \-docencoding も参照してください。 -.LP -.TP 3 -\-docencoding\ name -生成される HTML ファイルのエンコーディングを指定します。この名前は、 -.na -\f2IANA Registry\fP @ -.fi -http://www.iana.org/assignments/character\-sets で与えられた、推奨される MIME 名でなければなりません。このオプションを省略しながら \-encoding を使用した場合、生成される HTML ファイルのエンコードは、\-encoding によって決められます。例: -.nf -\f3 -.fl - % \fP\f3javadoc \-docencoding "ISO\-8859\-1" mypackage\fP -.fl -.fi -\-encoding および \-charset も参照してください。 -.LP -.TP 3 -\-keywords -HTML メタキーワードタグを、クラスごとに生成されるファイルに追加します。これらのタグは、メタタグを検索するサーチエンジンがページを見つける場合に役立ちます。インターネット全体を検索する多くのサーチエンジンは、ページがメタタグを誤用しているため、メタタグを調べません。一方、検索を自身の Web サイトに限定している企業では、サーチエンジンがメタタグを調べることによってメリットを得られます。 -.LP -メタタグには、クラスの完全修飾名と、フィールドおよびメソッドの修飾されていない名前が含まれます。コンストラクタは、クラス名と同じであるため含まれません。たとえば、クラス String は次のキーワードで開始します。 -.nf -\f3 -.fl - <META NAME="keywords" CONTENT="java.lang.String class"> -.fl - <META NAME="keywords" CONTENT="CASE_INSENSITIVE_ORDER"> -.fl - <META NAME="keywords" CONTENT="length()"> -.fl - <META NAME="keywords" CONTENT="charAt()"> -.fl -\fP -.fi -.LP -.TP 3 -\-tag\ \ tagname:Xaoptcmf:"taghead" -Javadoc ツールがドキュメンテーションコメント内の引数を 1 つ取る単純なカスタムブロックタグ \f2@\fP\f2tagname\fP を解釈できるようにします。Javadoc ツールはタグ名の「スペルチェック」を行うことができるので、ソースコード内に存在するすべてのカスタムタグについて、 \f2\-tag\fP オプションを含めることが重要です。今回の実行では出力されないタグは、X を付けて無効 \f2にします\fP。 -.LP -コロン (\f4:\fP) が常に区切り文字になります。tagname \f2でコロンを使用する方法については、\fP 「タグ名でのコロンの使用」を参照してください。 -.LP -\f2\-tag\fP オプションは、タグの見出し「taghead」を太字で出力します。 その次の行には、このオプションの引数で指定したテキストが続きます。 以下の例を参照してください。ブロックタグと同様、この引数のテキストにはインラインタグを含めることができます。このインラインタグも解釈されます。出力は、引数を 1 つ取る標準のタグ ( \f2@return\fP や \f2@author\fP など) の出力とよく似ています。\f2taghead\fP を省略すると、\f2tagname\fP が見出しとして表示されます。 -.LP -\f3タグの配置\fP \- 引数の \f4Xaoptcmf\fP 部分は、ソースコード内のタグを配置できる位置と、 を使ってこのタグを無効にできるかどうかを特定します。 \f2X\fP). タグの配置位置を制限しない場合は \f4a\fP を指定します。それ以外の文字の組み合わせも可能です。 \f4X\fP (タグの無効化) -.br -\f4a\fP (すべて) -.br -\f4o\fP (概要) -.br -\f4p\fP (パッケージ) -.br -\f4t\fP (型、つまりクラスとインタフェース) -.br -\f4c\fP (コンストラクタ) -.br -\f4m\fP (メソッド) -.br -\f4f\fP (フィールド) -.LP -\f3シングルタグの例\fP \- ソースコード内の任意の位置で使用できるタグのタグオプションの例を示します。 -.nf -\f3 -.fl - \-tag todo:a:"To Do:" -.fl -\fP -.fi -@todo をコンストラクタ、メソッド、フィールドのみで使用する場合は、以下のオプションを使用します。 -.nf -\f3 -.fl - \-tag todo:cmf:"To Do:" -.fl -\fP -.fi -上の例の最後のコロン (\f2:\fP) は、パラメータ区切り子ですが、見出しテキストの一部になっています (以下の例を参照)。次の例のように、 \f2@todo\fP タグを含むソースコードでは、いずれかのタグオプションを使用します。 -.nf -\f3 -.fl - @todo The documentation for this method needs work. -.fl -\fP -.fi -\f3タグ名にコロンを使用する\fP \- コロン (:) をバックスラッシュでエスケープすると、コロンをタグ名に使用することができます。このドキュメンテーションコメントの中では、次のように使用します。 -.nf -\f3 -.fl - /** -.fl - * @ejb:bean -.fl - */ -.fl -\fP -.fi -でこのタグオプションを使用すると、 -.nf -\f3 -.fl - \-tag ejb\\\\:bean:a:"EJB Bean:" -.fl -\fP -.fi -\f3タグ名のスペルチェック (タグの無効化)\fP \- ソースコード内に配置した一部のカスタムタグの出力を抑制したい場合があります。この場合も、ソースコード内にすべてのタグを配置し、出力を抑制しないタグを有効にし、出力を抑制するタグを無効にします。 \f2X\fP が存在する場合はタグが無効になり、存在しない場合はタグが有効になります。これにより、Javadoc ツールは、検出したタグが入力ミスなどによる未知のタグであるかどうかを特定できます。未知のタグを検出した場合、Javadoc ツールは警告を出力します。 -.LP -すでに配置されている値に \f2X\fP を追加できます。こうしておけば、 \f2X を削除するだけでタグを有効にすることができます\fP。たとえば、@todo タグの出力を抑制したい場合、次のように指定します。 -.nf -\f3 -.fl - \-tag todo:Xcmf:"To Do:" -.fl -\fP -.fi -さらに単純な指定方法もあります。 -.nf -\f3 -.fl - \-tag todo:X -.fl -\fP -.fi -.LP -構文 \f2\-tag todo:X\fP は、 \f2@todo\fP がタグレットで定義されていても有効です。 -.LP -\f3タグの順序\fP \- \f2\-tag\fP (および \f2\-taglet\fP) オプションの順序によって、タグの出力順が決まります。カスタムタグと標準タグを組み合わせて使用することもできます。標準タグのタグオプションは、順序を決定するためだけのプレースホルダです。これらは標準タグ名のみを使用します。(標準タグの小見出しは変更できません。)これについては、以下の例で説明します。 -.LP -\f2\-tag\fP が存在しない場合は、 \f2\-taglet\fP の位置によってその順序が決まります。タグが両方とも存在する場合、コマンド行の最後にあるほうがその順序を決定します。これは、タグやタグレットがコマンド行に指定された順番に処理されるためです。たとえば、 \f2\-taglet\fP と \f2\-tag\fP の両方が todo という名前を持っている場合、コマンド行の最後にあるほうが順序を決定します。 -.LP -\f3タグの完全セットの例\fP \- この例では、出力の「Parameters」と「Throws」の間に「To Do」を挿入します。X を使用して、@example が、ソースコード内の今回の実行では出力されないタグであることを指定します。@argfile を使用する場合は、次のように、引数ファイル内の別々の行にタグを配置できます。行の継続を示す文字は不要です。 -.nf -\f3 -.fl - \-tag param -.fl - \-tag return -.fl - \-tag todo:a:"To Do:" -.fl - \-tag throws -.fl - \-tag see -.fl - \-tag example:X -.fl -\fP -.fi -.LP -javadoc がドキュメンテーションコメントを解析する際に検索されたタグのうち、標準タグでも、 \f2\-tag\fP や \f2\-taglet\fP で渡されたタグでもないものはすべて未知のタグとみなされ、警告がスローされます。 -.LP -標準タグは、最初、デフォルトの順序でリスト内に内部的に格納されます。 \f2\-tag\fP オプションを使用すると、このリストに追加されるタグ、すなわち標準タグの位置がデフォルトの位置から移動します。つまり、標準タグに \f2\-tag\fP オプションを付けなければ、これらはデフォルトの位置に配置されたままになります。 -.LP -\f3競合の回避\fP \- 固有の名前空間を細かく分けるには、パッケージに使用されている \f2com.mycompany.todo という名前のように、ドット (.) を区切り記号とする名前を使います\fP。Oracle は、今後も名前にドットを含まない標準タグを作成します。ユーザーが作成したタグは、Oracle が提供する同じ名前のタグの動作をオーバーライドします。つまり、 \f2@todo\fP という名前のタグまたはタグレットをユーザーが作成した場合、Oracle がその後同じ名前の標準タグを作成したとしても、その動作は常にユーザーが定義した動作と同じになります。 -.LP -\f3注釈 vs. Javadoc タグ\fP \- 一般に、追加する必要のあるマークアップが、ドキュメンテーションに影響を与えたりドキュメンテーションを生成したりするためのものである場合、そのマークアップは javadoc タグにすべきです。それ以外の場合は注釈にすべきです。 -.na -\f2「Comparing Annotations and Javadoc Tags」\fP @ -.fi -http://www.oracle.com/technetwork/java/javase/documentation/index\-137868.html#annotationsを参照してください。 -.LP -\-taglet オプションを使用して、より複雑なブロックタグやカスタムインラインタグを 作成することができます。 -.LP -.TP 3 -\-taglet\ \ class -そのタグのドキュメントの生成に使うドックレットを起動するためのクラスファイルを指定します。クラスの完全指定名を指定してください。このタグレットは、カスタムタグのテキスト引数の数も定義します。タグレットは、これらの引数を受け付け、処理し、出力を生成します。外部ドキュメントとサンプルタグレットについては、以下を参照してください。 -.RS 3 -.TP 2 -o -.na -\f2「タグレットの概要」\fP @ -.fi -http://java.sun.com/javase/6/docs/technotes/guides/javadoc/taglet/overview.html +外部ドキュメントへの絶対リンク.PP +http://docs\&.oracle\&.com/javase/8/docs/api/index\&.htmlに示すような、\fIjava\&.lang\fR、 +\fIjava\&.io\fRおよびその他のJava SEパッケージにリンクする必要がある場合があります。 +.PP +ただし、シェルにはWebアクセス権がありません。この場合、次を行います。 +.sp +.RS 4 +.ie n \{\ +\h'-04' 1.\h'+01'\c +.\} +.el \{\ +.sp -1 +.IP " 1." 4.2 +.\} +ブラウザでpackage\-listファイルを開きます(http://docs\&.oracle\&.com/javase/8/docs/api/package\-list) .RE -.LP -タグレットは、ブロックタグまたはインラインタグで便利です。タグレットは任意の数の引数をとることができます。また、テキストを太字にする、箇条書きを作成する、テキストをファイルに書き出す、その他のプロセスを開始するなどのカスタム動作を実装できます。 -.LP -タグレットで指定できるのは、タグの配置場所と配置形式のみです。その他のすべての決定は、ドックレットによって行われます。タグレットを使用しても、包含クラスのリストからクラス名を削除するなどの処理は実行できません。ただし、タグのテキストをファイルに出力したり、別のプロセスをトリガーするなどの副作用は得られます。 -.LP -タグレットのパスを指定するには、\f2\-tagletpath\fP オプションを使用します。以下は、生成されるページの「Parameter」と「Throws」の間に「To Do」タグレットを挿入する例です。 -.nf -\f3 -.fl - \-taglet com.sun.tools.doclets.ToDoTaglet -.fl - \-tagletpath /home/taglets -.fl - \-tag return -.fl - \-tag param -.fl - \-tag todo -.fl - \-tag throws -.fl - \-tag see -.fl -\fP -.fi -.LP -また、 \f2\-taglet\fP オプションを \f2\-tag\fP オプションの代わりに使用することもできますが、そうすると可読性が低下する可能性があります。 -.LP -.TP 3 -\-tagletpath\ \ tagletpathlist -taglet クラスファイル (.class) の検索パスを指定します。\f2tagletpathlist\fP には、コロン (\f2:\fP) で区切って複数のパスを含めることができます。Javadoc ツールは、指定されたパス以下のすべてのサブディレクトリを検索します。 -.LP -.TP 3 -\-docfilessubdirs\ -「\f2doc\-files\fP」ディレクトリの深いコピーを有効にします。つまり、コピー先には、サブディレクトリとすべてのコンテンツがコピーされます。たとえば、ディレクトリ \f2doc\-files/example/images\fP とそのすべての内容がコピーされます。ここでも、サブディレクトリを除外する指定が可能です。 -.LP -.TP 3 -\-excludedocfilessubdir\ \ name1:name2... -「\f2doc\-files\fP」の、指定された名前のサブディレクトリをすべて除外します。これにより、SCCS とその他のソースコード制御サブディレクトリのコピーを防ぎます。 -.LP -.TP 3 -\-noqualifier\ \ all\ | \ packagename1:packagename2:... -出力されるクラス名の先頭のパッケージ名 (パッケージ修飾子) を省略します。 \f2\-noqualifier\fP の引数は、「\f2all\fP」(すべてのパッケージ修飾子が省略される)、修飾子として削除すべきパッケージのコロン区切りリスト (ワイルドカードも可)、のいずれかとなります。クラスまたはインタフェース名が表示される位置からパッケージ名が削除されます。 -.LP -次の例では、すべてのパッケージ修飾子を省略します。 -.nf -\f3 -.fl - \-noqualifier all -.fl -\fP -.fi -次の例では、パッケージ修飾子 java.lang および java.io を省略します。 -.nf -\f3 -.fl - \-noqualifier java.lang:java.io -.fl -\fP -.fi -次の例では、java で始まるパッケージ修飾子と com.sun というサブパッケージ (javax ではない) を省略します。 -.nf -\f3 -.fl - \-noqualifier java.*:com.sun.* -.fl -\fP -.fi -パッケージ修飾子が上記の動作に従って表示される場合、名前は適切に短くされます。詳細は「名前の表示方法」を参照してください。この規則は、 \f2\-noqualifier\fP を使用するかどうかにかかわらず有効です。 -.LP -.TP 3 -\-notimestamp\ -タイムスタンプが抑制されます。各ページ先頭近くにある、生成された HTML 内の HTML コメントでタイムスタンプが隠されます。Javadoc を 2 つのソースベースで実行し、それらに対して diff を実行するときにこのオプションを使用すると、タイムスタンプによって diff が発生しなくなるので便利です (このオプションを使用しないと、各ページで diff になります)。タイムスタンプには Javadoc のバージョン番号が含まれており、次のようになります。 -.nf -\f3 -.fl - <!\-\- Generated by javadoc (build 1.5.0_01) on Thu Apr 02 14:04:52 IST 2009 \-\-> -.fl -\fP -.fi -.LP -.TP 3 -\-nocomment\ -主説明およびすべてのタグを含むコメント本文全体を抑制し、宣言だけを生成します。このオプションにより、元は異なる目的のためだったソースファイルを再利用し、新しいプロジェクトの早い段階でスケルトン HTML ドキュメントを作成できるようになりました。 -.LP -.TP 3 -\-sourcetab tabLength -ソース内で各タブが獲得する空白の数を指定します。 +.sp +.RS 4 +.ie n \{\ +\h'-04' 2.\h'+01'\c +.\} +.el \{\ +.sp -1 +.IP " 2." 4.2 +.\} +ファイルをローカル・ディレクトリに保存し、このローカル・コピーを第2引数\fIpackagelistLoc\fRで指定します。この例では、パッケージ・リスト・ファイルはカレント・ディレクトリ(\&.)に保存されています。 .RE -.SH "コマンド行引数ファイル" -.LP -javadoc のコマンド行を短くしたり簡潔にしたりするために、 \f2javadoc\fP コマンドに対する引数 ( \f2\-J\fP オプションを除く) が入った 1 つ以上のファイルを指定することができます。このことを利用すれば、どのオペレーティングシステム上でも、任意の長さの javadoc コマンドを作成できます。 -.LP -引数ファイルには、javac のオプションとソースファイル名を自由に組み合わせて記述できます。ファイル内の各引数は、スペースまたは改行で区切ります。ファイル名に空白が含まれている場合は、そのファイル名全体を二重引用符で囲みます。 -.LP -引数ファイル内のファイル名は、現在のディレクトリから見た相対パスになります。引数ファイルの位置から見た相対パスではありません。引数ファイル内のファイル名リストでは、ワイルドカード (*) は使用できません。たとえば、 \f2*.java\fP とは指定できません。引数ファイル内の引数で \f2@\fP 文字を使用して、複数のファイルを再帰的に解釈することはサポートされていません。また、 \f2\-J\fP オプションもサポートされていません。 このオプションは起動ツールに渡されますが、起動ツールでは引数ファイルをサポートしていないからです。 -.LP -javadoc を実行するときに、各引数ファイルのパスとファイル名の先頭に \f2@\fP 文字を付けて渡します。javadoc は、\f2@\fP 文字で始まる引数を見つけると、そのファイルの内容を展開して引数リストに挿入します。 -.SS -引数ファイルを 1 つ指定する例 -.LP -次のように、「\f2argfile\fP」という名前の単一の引数ファイル内に、Javadoc のすべての引数を格納します。 +.PP +次のコマンドは、Java SEプラットフォーム・パッケージへのリンクを持つc\fIom\&.mypackage\fRパッケージのドキュメントを生成します。生成ドキュメントには、たとえばクラス\fItrees\fR内の\fIObject\fRクラスへのリンクが含まれています。\fI\-sourcepath\fRなど、他の必要なオプションは表示されません。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl - % \fP\f3javadoc @argfile\fP -.fl +javadoc \-linkoffline http://docs\&.oracle\&.com/javase/8/docs/api/ \&. com\&.mypackage .fi -.LP -この引数ファイルには、次の例で示されている 2 つのファイルの内容を両方とも入れることができます。 -.SS -引数ファイルを 2 つ指定する例 -.LP -2 つの引数ファイルを作成できます。1 つは Javadoc オプション用、もう 1 つはパッケージ名またはソースファイル名用です。なお、次のリストでは行継続文字を使用していません。 -.LP -次の内容を含む、「\f2options\fP」という名前のファイルを作成します。 +.if n \{\ +.RE +.\} +外部ドキュメントへの相対リンク.PP +\fI\-linkoffline\fRを相対パスとともに使用することはあまりありません。理由は単純で、通常は\fI\-link\fRで間に合うからです。\fI\-linkoffline\fRオプションを使用する場合、通常、package\-listファイルはローカルで、相対リンクを使用する場合はリンク先のファイルもローカルなので、通常は\fI\-linkoffline\fRオプションの2つの引数に、異なるパスを指定する必要はありません。2つの引数が同一の場合、\fI\-link\fRオプションを使用できます。 +package\-listファイルの手動での作成.PP +package\-listファイルがまだ存在しなくても、ドキュメントのリンク先のパッケージ名がわかっている場合は、このファイルのコピーを手動で作成し、\fIpackagelistLoc\fRでそのパスを指定することができます。\fIcom\&.apipackage\fRが最初に生成された時点で\fIcom\&.spipackage\fRのパッケージ・リストが存在しないという前出のケースが一例として挙げられます。この方法は、パッケージ名はわかっているものの、まだ公開されていない、新しい外部ドキュメントにリンクするドキュメントを生成する必要がある場合に便利です。また、package\-listファイルが生成されないJavadoc 1\&.0または1\&.1で生成されたパッケージ用にpackage\-listファイルを作成する場合にも、この方法が使用できます。同様に、2つの企業が未公開のpackage\-listファイルを共有できるため、クロスリンクを設定したドキュメントを同時にリリースすることも可能になります。 +複数ドキュメントへのリンク.PP +参照先の生成ドキュメントごとに1回、\fI\-linkoffline\fRオプションを含めることができます。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl - \-d docs\-filelist -.fl - \-use -.fl - \-splitindex -.fl - \-windowtitle 'Java SE 7 API Specification' -.fl - \-doctitle 'Java SE 7 API Specification' -.fl - \-header '<b>Java(TM) SE 7</b>' -.fl - \-bottom 'Copyright © 1993\-2011 Oracle and/or its affiliates. All rights reserved.' -.fl - \-group "Core Packages" "java.*" -.fl - \-overview /java/pubs/ws/1.7.0/src/share/classes/overview\-core.html -.fl - \-sourcepath /java/pubs/ws/1.7.0/src/share/classes -.fl -\fP +javadoc \-linkoffline extdocURL1 packagelistLoc1 \-linkoffline extdocURL2 +packagelistLoc2 \&.\&.\&. .fi -.LP -次の内容を含む、「\f2packages\fP」という名前のファイルを作成します。 +.if n \{\ +.RE +.\} +ドキュメントの更新.PP +プロジェクトに何十または何百のパッケージが含まれる場合にも、\fI\-linkoffline\fRオプションを使用できます。ソース・ツリー全体ですでに\fIjavadoc\fRコマンドを実行したことがある場合、ドキュメンテーション・コメントにわずかな変更を迅速に加え、ソース・ツリーの一部で\fIjavadoc\fRコマンドを再実行することができます。2回目の実行は、ドキュメンテーション・コメントを変更し、宣言は変更しない場合にのみ正しく処理されることに注意してください。ソース・コードに対して宣言を追加、削除、または変更した場合は、索引、パッケージ・ツリー、継承されるメンバーのリスト、使用ページなどの場所で、リンクが壊れることがあります。 +.PP +まず、この新しい小規模な実行で使用する、新しい生成先ディレクトリ(updateなど)を作成します。この例では、元の生成先ディレクトリの名前はhtmlです。最も単純な例では、htmlディレクトリの親ディレクトリに移動します。\fI\-linkoffline\fRオプションの第1引数にカレント・ディレクトリ(\&.)を設定し、第2引数にpackage\-listが検索されるhtmlへの相対パスを設定し、更新するパッケージのパッケージ名のみを渡します。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl - com.mypackage1 -.fl - com.mypackage2 -.fl - com.mypackage3 -.fl -\fP +javadoc \-d update \-linkoffline \&. html com\&.mypackage .fi -.LP -そのあと、次のコマンドを使用して javadoc を実行します。 +.if n \{\ +.RE +.\} +.PP +\fIjavadoc\fRコマンドの終了後、update/com/package内の生成されたクラスのページをコピーし(概要や索引は除く)、html/com/package内の元のファイルに上書きします。 +.PP +\-linksource +.RS 4 +各ソース・ファイル(行番号付き)のHTMLバージョンを作成し、標準HTMLドキュメントからソース・ファイルへのリンクを追加します。リンクは、ソース・ファイル内に宣言されているクラス、インタフェース、コンストラクタ、メソッド、フィールドに対して作成されます。そうでない場合、たとえばデフォルト・コンストラクタや生成されたクラスに対しては、リンクは作成されません。 +.sp +このオプションは、\fI\-public\fR、\fI\-package\fR、\fI\-protected\fRおよび\fI\-private\fRの各オプションとは関係なく、非公開のクラス、フィールド、非公開のメソッドの本体をはじめとする組み込まれたソース・ファイル内のすべての非公開実装の詳細を公開します。\fI\-private\fRオプションもあわせて指定しないかぎり、非公開のクラスやインタフェースの一部には、リンクを介してアクセスできないことがあります。 +.sp +各リンクは、その宣言内の識別子名の上に作成されます。たとえば、\fIButton\fRクラスのソース・コードへのリンクは、\fIButton\fRという語の上に作成されます。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl - % \fP\f3javadoc @options @packages\fP -.fl +public class Button extends Component implements Accessible .fi -.SS -パス付きの引数ファイルの例 -.LP -引数ファイルには、パスを指定できます。ただし、そのファイル内に指定されたファイル名は、現在の作業ディレクトリから見た相対パスになります。つまり、下の例の場合は、 \f2path1\fP や \f2path2\fP から見た相対パスではありません。 +.if n \{\ +.RE +.\} +\fIButton\fRクラスの\fIgetLabel\fRメソッドのソース・コードへのリンクは、\fIgetLabel\fRという語の上に作成されます。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl - % \fP\f3javadoc @path1/options @path2/packages\fP -.fl +public String getLabel() .fi -.SS -オプションの引数の例 -.LP -次に、Javadoc オプションに対する引数だけを引数ファイルに格納する例を示します。ここでは \f2\-bottom\fP オプションを使用します。というのも、引数が長くなる可能性があるからです。次のようなテキスト引数を含む、「\f2bottom\fP」という名前のファイルを作成できます。 +.if n \{\ +.RE +.\} +.RE +.PP +\-group groupheading \fIpackagepattern:packagepattern\fR +.RS 4 +概要ページの複数のパッケージを、指定したグループに分けて、グループごとに表を作成します。各グループは、それぞれ別の\fI\-group\fRオプションで指定します。グループは、コマンド行で指定された順序でページに表示されます。パッケージは、グループ内でアルファベット順になっています。指定した\fI\-group\fRオプションでは、\fIpackagepattern\fR式のリストに一致するパッケージが、見出しとして\fIgroupheading\fRを持つ1つの表に表示されます。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fIgroupheading\fRには、任意のテキストを指定でき、空白を含めることができます。指定したテキストは、グループの表見出しになります。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fIpackagepattern\fRの値には、任意のパッケージ名の先頭部分とそれに続く1つのアスタリスク(*)で任意のパッケージ名を指定できます。アスタリスクは使用できる唯一のワイルドカードで、任意の文字に一致する、という意味です。1つのグループには、コロン(:)で区切って複数のパターンを含めることができます。パターンまたはパターン・リストでアスタリスクを使用する場合、パターン・リストは\fI"java\&.lang*:java\&.util"\fRのように引用符で囲む必要があります。 +.RE +.sp +\fI\-group\fRオプションを指定しない場合は、見出し\fIPackages\fRおよび適切な小見出しを持つ1つのグループに配置されます。小見出しにすべてのドキュメント化されるパッケージ(すべてのグループ)が含まれるわけではない場合、残りのパッケージは「その他のパッケージ」というサブ見出しを持つ独立したグループに入れられます。 +.sp +たとえば、次の\fIjavadoc\fRコマンドでは、3つのドキュメント化されたパッケージが\fI「コア」\fR、\fI「拡張」\fRおよび\fI「その他のパッケージ」\fRに分けられます。\fIjava\&.lang*\fRでは、最後のドット(\&.)を指定していません。\fIjava\&.lang\&.*\fRのようにドットを入れると、\fI java\&.lang\fRパッケージは除外されることになります。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +javadoc \-group "Core Packages" "java\&.lang*:java\&.util" + \-group "Extension Packages" "javax\&.*" + java\&.lang java\&.lang\&.reflect java\&.util javax\&.servlet java\&.new +.fi +.if n \{\ +.RE +.\} +\fBコア・パッケージ\fR +.sp +\fIjava\&.lang\fR +.sp +\fIjava\&.lang\&.reflect\fR +.sp +\fIjava\&.util\fR +.sp +\fB拡張機能パッケージ\fR +.sp +\fIjavax\&.servlet\fR +.sp +\fBOther Packages\fR +.sp +\fIjava\&.new\fR +.RE +.PP +\-nodeprecated +.RS 4 +非推奨のAPIをドキュメントに生成しないようにします。このオプションを指定すると、\fI\-nodeprecatedlist\fRオプションを指定した場合と同じ効果があり、ドキュメントの他の部分全体でも、非推奨のAPIが生成されません。このオプションは、コードを記述しているとき、非推奨のコードによって気を散らされたくない場合に便利です。 +.RE +.PP +\-nodeprecatedlist +.RS 4 +非推奨のAPIのリストを含むファイル(deprecated\-list\&.html)、およびナビゲーション・バーのそのページへのリンクが生成されないようにします。\fIjavadoc\fRコマンドでは、引き続き、ドキュメントの他の部分では、非推奨のAPIが生成されます。このオプションは、非推奨のAPIがソース・コードに含まれておらず、ナビゲーション・バーをすっきりと見せる場合に便利です。 +.RE +.PP +\-nosince +.RS 4 +生成ドキュメントから、\fI@since\fRタグに関連付けられた\fI「導入されたバージョン」\fRセクションを省略します。 +.RE +.PP +\-notree +.RS 4 +生成ドキュメントから、クラスおよびインタフェースの階層ページを省略します。これらのページには、ナビゲーション・バーの「階層ツリー」ボタンからアクセスできます。デフォルトでは、階層が生成されます。 +.RE +.PP +\-noindex +.RS 4 +生成ドキュメントから、索引を省略します。デフォルトでは、索引が生成されます。 +.RE +.PP +\-nohelp +.RS 4 +出力の各ページの最上部と最下部にあるナビゲーション・バーから「ヘルプ」リンクを省略します。 +.RE +.PP +\-nonavbar +.RS 4 +通常、生成されるページの最上部と最下部に表示されるナビゲーション・バー、ヘッダー、およびフッターを生成しないようにします。\fI\-nonavbar\fRオプションは\fI\-bottom\fRオプションに影響を与えません。\fI\-nonavbar\fRオプションは、印刷するためにのみファイルをPostScriptやPDFに変換する場合など、内容のみが重要で、ナビゲーションの必要がない場合に便利です。 +.RE +.PP +\-helpfile \fIpath\efilename\fR +.RS 4 +最上部および最下部のナビゲーション・バーの「ヘルプ」リンクのリンク先となる代替ヘルプ・ファイルpath\efilenameのパスを指定します。このオプションが指定されていないと、\fIjavadoc\fRコマンドは、\fIjavadoc\fRコマンド内でハードコードされているヘルプ・ファイルhelp\-doc\&.htmlを自動作成します。このオプションを使用すると、デフォルトをオーバーライドできます。ファイル名にはどんな名前でも指定でき、help\-doc\&.htmlに限定されません。\fIjavadoc\fRコマンドは、次の例のように、ナビゲーション・バー内のリンクを必要に応じて調整します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +javadoc \-helpfile /home/user/myhelp\&.html java\&.awt\&. +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\-stylesheet \fIpath/filename \fR +.RS 4 +代替HTMLスタイルシート・ファイルのパスを指定します。このオプションが指定されていないと、\fIjavadoc\fRコマンドは、\fIjavadoc\fRコマンド内でハードコードされているスタイルシート・ファイルstylesheet\&.cssを自動作成します。このオプションを使用すると、デフォルトをオーバーライドできます。ファイル名にはどんな名前でも指定でき、stylesheet\&.cssに限定されません。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +javadoc \-stylesheet file /home/user/mystylesheet\&.css com\&.mypackage +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\-serialwarn +.RS 4 +\fI@serial\fRタグがない場合は、コンパイル時に警告を生成します。デフォルトでは、Javadoc 1\&.2\&.2以降では、直列化の警告は生成されません。以前のリリースとは逆の動作です。このオプションを使用すると、直列化の警告が表示されるので、デフォルトの直列化可能フィールドと\fIwriteExternal\fRメソッドを適切にドキュメント化するのに役立ちます。 +.RE +.PP +\-charset \fIname\fR +.RS 4 +このドキュメント用のHTML文字セットを指定します。この名前は、IANA RegistryのCharacter Sets +(http://www\&.iana\&.org/assignments/character\-sets)に示された、優先MIME名である必要があります。 +.sp +たとえば、\fIjavadoc \-charset "iso\-8859\-1" mypackage\fRは次の行を生成された各ページのヘッダーに挿入します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +<META http\-equiv="Content\-Type" content="text/html; charset=ISO\-8859\-1"> +.fi +.if n \{\ +.RE +.\} +この\fIMETA\fRタグは、HTML標準(4197265および4137321)のHTML Document Representation +(http://www\&.w3\&.org/TR/REC\-html40/charset\&.html#h\-5\&.2\&.2)に記載されています。 +.sp +およびオプションも参照してください。 +.RE +.PP +\-docencoding \fIname\fR +.RS 4 +生成されるHTMLファイルのエンコーディングを指定します。この名前は、IANA RegistryのCharacter Sets +(http://www\&.iana\&.org/assignments/character\-sets)に示された、優先MIME名である必要があります。 +.sp +\fI\-docencoding\fRオプションを省略し、\fI\-encoding\fRオプションを使用すると、生成されたHTMLファイルの暗号化は\fI\-encoding\fRオプションで特定されます。例: +\fIjavadoc \-docencoding"iso\-8859\-1" mypackage\fRおよびオプションも参照してください。 +.RE +.PP +\-keywords +.RS 4 +HTMLキーワード<META>タグを、クラスごとに生成されるファイルに追加します。これらのタグは、<META>タグを検索するサーチ・エンジンがページを見つける場合に役立ちます。インターネット全体を検索する検索エンジンのほとんどは<META>タグを参照しません。ページが誤用している可能性があるからです。自身のWebサイトへの検索を制限する、企業により提供される検索エンジンは、<META>タグを参照することで恩恵を受けることができます。<META>タグには、クラスの完全修飾名と、フィールドおよびメソッドの修飾されていない名前が含まれます。コンストラクタは、クラス名と同じであるため含まれません。たとえば、クラス\fIString\fRは次のキーワードで開始します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +<META NAME="keywords" CONTENT="java\&.lang\&.String class"> +<META NAME="keywords" CONTENT="CASE_INSENSITIVE_ORDER"> +<META NAME="keywords" CONTENT="length()"> +<META NAME="keywords" CONTENT="charAt()"> +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\-tag \fItagname\fR:Xaoptcmf:"\fItaghead\fR" +.RS 4 +\fIjavadoc\fRコマンドがドキュメンテーション・コメント内の引数を1つ取る単純なカスタム・ブロック・タグ\fI@tagname\fRを解釈できるようにします。これにより、\fIjavadoc\fRコマンドはタグ名のスペルチェックを行うことができるので、ソース・コード内に存在するすべてのカスタム・タグについて、\fI\-tag\fRオプションを組み込むことが重要です。今回の実行では出力されないタグは、\fIX\fRを付けて無効にします。\fI\-tag\fRオプションは、タグの見出し\fItaghead\fRを太字で出力します。その次の行には、このオプションの1つの引数で指定したテキストが続きます。ブロック・タグと同様、この引数のテキストにはインライン・タグを含めることができます。このインライン・タグも解釈されます。出力は、引数を1つ取る標準のタグ(\fI@return\fRや\fI@author\fRなど)の出力とよく似ています。\fItaghead\fRの値を省略すると、\fItagname\fRが見出しとして表示されます。 +.sp +\fBタグの配置\fR: +\fIXaoptcmf\fR引数により、ソース・コード内でタグを配置できる場所が決まり、タグを無効にできるかどうか(\fIX\fRを使用して)が決まります。タグの配置位置を制限しない場合は\fIa\fRを指定します。それ以外の文字の組合せも可能です。 +.sp +\fIX\fR +(タグの無効化) +.sp +\fIa\fR +(すべて) +.sp +\fIo\fR +(概要) +.sp +\fIp\fR +(パッケージ) +.sp +\fIt\fR +(タイプ、つまりクラスとインタフェース) +.sp +\fIc\fR +(コンストラクタ) +.sp +\fIm\fR +(メソッド) +.sp +\fIf\fR +(フィールド) +.sp +\fBシングル・タグの例\fR: ソース・コード内の任意の位置で使用できるタグのタグ・オプションの例を示します。\fI\-tag todo:a:"To Do:"\fR +.sp +\fI@todo\fRタグをコンストラクタ、メソッドおよびフィールドとのみ使用する場合、\fI\-tag todo:cmf:"To Do:"\fRを使用します。 +.sp +最後のコロン(:)は、パラメータ区切り文字ではなく、見出しテキストの一部になっています。\fI@todo\fRタグを含む、ソース・コード用のいずれかのタグ・オプションを使用します。たとえば、\fI@todo The documentation for this method needs work\fRです。 +.sp +\fBタグ名内のコロン\fR: タグ名内でコロンを使用する場合はバックスラッシュを使用してエスケープします。次のドキュメンテーション・コメントには、\fI\-tag ejb\e\e:bean:a:"EJB Bean:"\fRオプションを使用します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +/** + * @ejb:bean + */ +.fi +.if n \{\ +.RE +.\} +\fBタグ名のスペルチェック\fR: 一部の開発者が必ずしも出力しないカスタム・タグをソース・コード内に配置することがあります。この場合、ソース・コード内のすべてのタグをリストし、出力するタグを有効にし、出力しないタグを無効にする必要があります。\fIX\fRを指定するとタグは無効になります。指定しないと、タグは有効になります。これにより、\fIjavadoc\fRコマンドは、検出したタグが入力ミスなどによる不明タグであるかどうかを特定できます。このような場合に、\fIjavadoc\fRコマンドから警告が出力されます。すでに配置されている値に\fIX\fRを追加できます。こうしておけば、\fIX\fRを削除するのみでタグを有効にすることができます。たとえば、\fI@todo\fRタグを出力で抑制する場合、\fI\-tag todo:Xcmf:"To Do:"\fRを使用します。さらに簡単にする場合、\fI\-tag todo:X\fRを使用します。構文\fI\-tag todo:X\fRは、\fI@todo\fRタグがタグレットで定義されていても機能します。 +.sp +\fBタグの順序\fR: +\fI\-ta\fR\fIg\fRおよび\fI\-taglet\fRオプションの順序によって、タグの出力順が決まります。カスタム・タグと標準タグを組み合せて使用することもできます。標準タグのタグ・オプションは、順序を決定するためだけのプレースホルダです。標準タグの名前のみを取ります。標準タグの小見出しは変更できません。これを次の例に示します。\fI\-tag\fRオプションを指定しないと、\fI\-tagle\fR\fIt\fRオプションの位置により、順序が決まります。タグが両方とも存在する場合、コマンドラインの最後にある方がその順序を決定します。これは、タグやタグレットがコマンドラインに指定された順番に処理されるためです。たとえば、\fI\-taglet\fRおよび\fI\-tag\fRオプションが名前\fItodo\fR値を持つ場合、コマンドラインに最後に指定されたものが順序を決定します。 +.sp +\fBタグの完全セットの例\fR: この例では、出力のParametersとThrowsの間にTo Doを挿入します。\fIX\fRを使用して、\fI@example\fRタグが、ソース・コード内の今回の実行では出力されないタグであることも指定します。\fI@argfile\fRタグを使用する場合は、次のように、引数ファイル内の別々の行にタグを配置できます(行の継続を示す文字は不要)。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-tag param +\-tag return +\-tag todo:a:"To Do:" +\-tag throws +\-tag see +\-tag example:X +.fi +.if n \{\ +.RE +.\} +\fIjavadoc\fRコマンドがドキュメンテーション・コメントを解析する際に検索されたタグのうち、標準タグでも、\fI\-tag\fRや\fI\-taglet\fRオプションで渡されたタグでもないものはすべて不明タグとみなされ、警告がスローされます。 +.sp +標準タグは、最初、デフォルトの順序でリスト内に内部的に格納されます。\fI\-tag\fRオプションを使用すると、それらのタグはこのリストに追加されます。標準タグは、デフォルトの位置から移動されます。そのため、標準タグの\fI\-tag\fRオプションを省略すると、それはデフォルトの位置に配置されたままになります。 +.sp +\fB競合の回避\fR: 固有の名前空間を作成するには、パッケージに使用されている\fIcom\&.mycompany\&.todo\fRという名前のように、ドットで区切られた名前を使用します。Oracleは、今後も名前にドットを含まない標準タグを作成します。ユーザーが作成したタグは、Oracleが定義する同じ名前のタグの動作をオーバーライドします。\fI@todo\fRという名前のタグまたはタグレットをユーザーが作成した場合、その後にOracleが同じ名前の標準タグを作成しても、そのタグまたはタグレットは常にユーザーが定義したのと同じ動作を保持します。 +.sp +\fB注釈vs\&. Javadocタグ\fR: 一般に、追加する必要のあるマークアップが、ドキュメントに影響を与えたりドキュメントを生成したりするためのものである場合、そのマークアップはJavadocタグにします。それ以外の場合は注釈にします。JavadocツールでのDocコメントの記述方法のカスタム・タグと注釈に関する項 +(http://www\&.oracle\&.com/technetwork/java/javase/documentation/index\-137868\&.html#annotations)を参照してください。 +.sp +\fI\-taglet\fRオプションを使用して、より複雑なブロック・タグやカスタム・インライン・タグも作成できます。 +.RE +.PP +\-taglet \fIclass\fR +.RS 4 +そのタグのドキュメントの生成に使用するドックレットを起動するためのクラス・ファイルを指定します。\fIclass\fR値の完全修飾名を使用します。このタグレットは、カスタム・タグのテキスト引数の数も定義します。タグレットは、これらの引数を受け付け、処理し、出力を生成します。タグレットの例を使用した豊富なドキュメントについては、タグレットの概要 +(http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/javadoc/taglet/overview\&.html)を参照してください。 +.sp +タグレットは、ブロックタグまたはインライン・タグで便利です。タグレットは任意の数の引数をとることができます。また、テキストを太字にする、箇条書きを作成する、テキストをファイルに書き出す、その他のプロセスを開始するなどのカスタム動作を実装できます。タグレットで指定できるのは、タグの配置場所と配置形式のみです。その他のすべての決定は、ドックレットによって行われます。タグレットを使用しても、包含クラスのリストからクラス名を削除するなどの処理は実行できません。ただし、タグのテキストをファイルに出力したり、別のプロセスをトリガーするなどの副作用は得られます。タグレットへのパスを指定するには、\fI\-tagletpath\fRオプションを使用します。次に、生成されるページのParametersとThrowsの間にTo Doタグレットを挿入する例を示します。または、\fI\-taglet\fRオプションをその\fI\-tag\fRオプションのかわりに使用することができますが、読み取りが困難になる可能性があります。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-taglet com\&.sun\&.tools\&.doclets\&.ToDoTaglet +\-tagletpath /home/taglets +\-tag return +\-tag param +\-tag todo +\-tag throws +\-tag see +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\-tagletpath \fItagletpathlist\fR +.RS 4 +tagletクラス・ファイルを検索するための検索パスを指定します。\fItagletpathlist\fRには、コロン(:)で区切って複数のパスを含めることができます。\fIjavadoc\fRコマンドは、指定されたパス以下のすべてのサブディレクトリを検索します。 +.RE +.PP +\-docfilesubdirs +.RS 4 +doc\-filesディレクトリのディープ・コピーを有効にします。宛先には、サブディレクトリとそのすべて内容が再帰的にコピーされます。たとえば、ディレクトリoc\-files/example/imagesとその内容がすべてコピーされます。ここでも、サブディレクトリを除外する指定が可能です。 +.RE +.PP +\-excludedocfilessubdir \fIname1:name2\fR +.RS 4 +指定された名前のdoc\-filesサブディレクトリをすべて除外します。これにより、SCCSとその他のソース・コード制御サブディレクトリのコピーを防ぎます。 +.RE +.PP +\-noqualifier all | \fIpackagename1\fR:\fIpackagename2\&.\&.\&.\fR +.RS 4 +出力されるクラス名から修飾パッケージ名を省略します。\fI\-noqualifier\fRオプションの引数は、\fIall\fR(すべてのパッケージ修飾子を省略)、または修飾子として削除するパッケージのコロン区切りリスト(ワイルドカードも可)、のいずれかとなります。クラスまたはインタフェース名が表示される位置からパッケージ名が削除されます。ソース・ファイルの処理を参照してください。 +.sp +次の例では、すべてのパッケージ修飾子を省略します。\fI\-noqualifier all\fR +.sp +次の例では、\fIjava\&.lang\fRおよび\fIjava\&.io\fRパッケージ修飾子を省略します: +\fI\-noqualifier java\&.lang:java\&.io\fR。 +.sp +次の例では、\fIjava\fRで始まるパッケージ修飾子および\fIcom\&.sun\fRサブパッケージを省略しますが、\fIjavax\fRは省略しません。\fI\-noqualifier java\&.*:com\&.sun\&.*\fR +.sp +パッケージ修飾子が前述の動作に従って表示される場合、名前は適切に短縮されます。「名前が表示される方法」を参照してください。このルールは、\fI\-noqualifier\fRオプションを使用するかどうかにかかわらず有効です。 +.RE +.PP +\-notimestamp +.RS 4 +タイムスタンプが抑制されます。各ページの先頭近くにある、生成されたHTML内のHTMLコメントでタイムスタンプが隠されます。\fI\-notimestamp\fRオプションは、\fIjavadoc\fRコマンドを2つのソース・ベースで実行し、それらの間の差分\fIdiff\fRを取得する場合に役立ちます。タイムスタンプによる\fIdiff\fRの発生を防ぐからです(そうでないとすべてのページで\fIdiff\fRになります)。タイムスタンプには\fIjavadoc\fRコマンドのリリース番号が含まれ、現在では、\fI<!\-\- Generated by javadoc (build 1\&.5\&.0_01) on Thu Apr 02 14:04:52 IST 2009 \-\->\fRのように表示されます。 +.RE +.PP +\-nocomment +.RS 4 +主説明およびすべてのタグを含むコメント本文全体を抑制し、宣言のみを生成します。このオプションにより、元は異なる目的のためだったソース・ファイルを再利用し、新しいプロジェクトの早い段階でスケルトンHTMLドキュメントを作成できるようになります。 +.RE +.PP +\-sourcetab \fItablength\fR +.RS 4 +ソース内で各タブが使用する空白文字の数を指定します。 +.RE +.SH "コマンドライン引数ファイル" +.PP +\fIjavadoc\fRコマンドを短くしたり簡潔にしたりするために、\fIjavadoc\fRコマンドに対する引数(\fI\-J\fRオプションを除く)が入った1つ以上のファイルを指定することができます。このことを利用すれば、どのオペレーティング・システム上でも、任意の長さの\fIjavadoc\fRコマンドを作成できます。 +.PP +引数ファイルには、\fIjavac\fRのオプションとソース・ファイル名を自由に組み合せて記述できます。ファイル内の各引数は、スペースまたは改行で区切ります。ファイル名に埋め込まれた空白がある場合、ファイル名全体を二重引用符で囲みます。 +.PP +引数ファイル内のファイル名は、引数ファイルの位置ではなく、現在のディレクトリに相対的となります。これらのリストでは、ワイルドカード(\fI*\fR)は使用できません。たとえば、*\&.javaとは指定できません。アットマーク(@)を使用して、ファイルを再帰的に解釈することはできません。また、\fI\-J\fRオプションもサポートされていません。このオプションは起動ツールに渡されますが、起動ツールでは引数ファイルをサポートしていないからです。 +.PP +\fIjavadoc\fRを実行するときに、各引数ファイルのパスとファイル名の先頭に@文字を付けて渡します。\fIjavadoc\fRコマンドは、アットマーク(@)文字で始まる引数を見つけると、そのファイルの内容を展開して引数リストに挿入します。 +.PP +\fBExample 1\fR, 単一の引数ファイル +.RS 4 +\fIargfile\fRという名前の1つの引数ファイルを使用して、すべての\fIjavadoc\fRコマンド引数を保持できます。\fIjavadoc @argfile\fR次の例に示すように、この引数ファイルには両方のファイルの内容が含まれています。 +.RE +.PP +\fBExample 2\fR, 2つの引数ファイル +.RS 4 +次のように、2つの引数ファイルを作成できます。\fIjavadoc\fRコマンドのオプション用に1つ、パッケージ名またはソース・ファイル名用に1つです。次のリストでは行継続文字を使用していません。 +.sp +次の内容を含む、optionsという名前のファイルを作成します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-d docs\-filelist +\-use +\-splitindex +\-windowtitle \*(AqJava SE 7 API Specification\*(Aq +\-doctitle \*(AqJava SE 7 API Specification\*(Aq +\-header \*(Aq<b>Java(TM) SE 7</b>\*(Aq +\-bottom \*(AqCopyright © 1993\-2011 Oracle and/or its affiliates\&. All rights reserved\&.\*(Aq +\-group "Core Packages" "java\&.*" +\-overview /java/pubs/ws/1\&.7\&.0/src/share/classes/overview\-core\&.html +\-sourcepath /java/pubs/ws/1\&.7\&.0/src/share/classes +.fi +.if n \{\ +.RE +.\} +次の内容を含む、packagesという名前のファイルを作成します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +com\&.mypackage1 +com\&.mypackage2 +com\&.mypackage3 +.fi +.if n \{\ +.RE +.\} +次のように、\fIjavadoc\fRコマンドを実行します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +javadoc @options @packages +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\fBExample 3\fR, パスを使用した引数ファイル +.RS 4 +引数ファイルはパスを指定できますが、ファイル内のすべてのファイル名は、(\fIpath1\fRや\fIpath2\fRではなく)次のように現在の作業ディレクトリに相対的となります。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +javadoc @path1/options @path2/packages +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\fBExample 4\fR, オプション引数 +.RS 4 +次に、\fIjavadoc\fRコマンドのオプションに対する引数を引数ファイルに格納する例を示します。長い引数を指定できるので、\fI\-bottom\fRオプションを使用します。次のようなテキスト引数を含む、bottomという名前のファイルを作成できます。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl <font size="\-1"> -.fl - <a href="http://bugreport.sun.com/bugreport/">Submit a bug or feature</a><br/> -.fl - Copyright © 1993, 2011, Oracle and/or its affiliates. All rights reserved.<br/> -.fl - Oracle is a registered trademark of Oracle Corporation and/or its affiliates. -.fl - その他の名称は、それぞれの所有者の商標または登録商標です。</font> -.fl -\fP -.fi -.LP -そのあと、次のようにして Javadoc ツールを実行します。 -.nf -\f3 -.fl - % \fP\f3javadoc \-bottom @bottom @packages\fP -.fl -.fi -.LP -あるいは、引数ファイルの先頭に \f2\-bottom\fP オプションも組み込んだあと、次のように実行してもかまいません。 -.nf -\f3 -.fl - % \fP\f3javadoc @bottom @packages\fP -.fl -.fi -.SH "名前" -実行 -.SH "Javadoc の実行" -.LP -\f3バージョン番号\fP \- javadoc のバージョン番号を判別するには、\f3javadoc \-J\-version\fP を使用します。出力ストリームには標準ドックレットのバージョン番号が含まれます。その出力を無効にするには、 \f2\-quiet\fP を使用します。 -.LP -\f3公開プログラムインタフェース\fP \- Java 言語で記述されたプログラムから Javadoc ツールを起動するとき使用します。このインタフェースは \f2com.sun.tools.javadoc.Main にあります\fP (javadoc は再入可能)。詳細は、 -.na -\f2「標準ドックレット」\fP @ -.fi -http://java.sun.com/javase/6/docs/technotes/guides/javadoc/standard\-doclet.html#runningprogrammaticallyを参照してください。 -.LP -\f3ドックレットの実行\fP \- 下記の説明は、標準 HTML ドックレットを呼び出すためのものです。カスタムドックレットを呼び出すには、\-doclet および \-docletpath オプションを使用します。特定のドックレットを実行した完全な例については、 -.na -\f2MIF Doclet のドキュメント\fP @ -.fi -http://java.sun.com/j2se/javadoc/mifdoclet/docs/mifdoclet.htmlを参照してください。 -.SH "簡単な例" -.LP -javadoc は、パッケージ全体に対して実行することも、個々のソースファイルに対して実行することもできます。各パッケージ名は、それぞれのパッケージ名に対応するディレクトリ名を持ちます。次の例では、ソースファイルは \f2/home/src/java/awt/*.java にあります\fP。生成先ディレクトリは \f2/home/html です\fP。 -.SS -1 つ以上のパッケージのドキュメント化 -.LP -あるパッケージをドキュメント化するには、そのパッケージのソースファイル (\f2*.java\fP) を、そのパッケージと同じ名前のディレクトリ内に格納する必要があります。パッケージ名が ( \f2java.awt.color\fP のようにドットで区切られた) いくつかの識別子から構成されている場合、右側の識別子に進むたびに、その識別子がより深いサブディレクトリに対応している必要があります ( \f2java/awt/color\fP など)。 単一パッケージのソースファイルを 2 グループに分け、異なる場所にあるそのような 2 つのディレクトリツリー内にそれぞれ格納してもかまいません。ただし、その両方のディレクトリへのパスを、 \f2\-sourcepath\fP に設定する必要があります。例: \f2src1/java/awt/color\fP および \f2src2/java/awt/color\fP。 -.LP -javadoc を実行するには、 \f2cd\fP を使用してディレクトリを変更するか、 \f2\-sourcepath\fP オプションを使用します。以下の例では、両方の方法について説明します。 -.RS 3 -.TP 2 -o -\f3ケース 1 \- 1 つ以上のパッケージからの起動を再帰的に実行\fP \- この例では javadoc が任意のディレクトリから実行できるように、\-sourcepath を使用し、再帰的処理のために \-subpackages (1.4 の新オプション) を使用します。これは、 \f2java\fP ディレクトリのサブパッケージをたどりますが、その際に、 \f2java.net\fP と \f2java.lang\fP をルートに持つパッケージが除外されます。この場合、 \f2java.lang\fP のサブパッケージである \f2java.lang.ref\fP。 -.nf -\f3 -.fl - % \fP\f3javadoc \fP\f3\-d\fP\f3 /home/html \fP\f3\-sourcepath\fP\f3 /home/src \fP\f3\-subpackages\fP\f3 java \fP\f3\-exclude\fP\f3 java.net:java.lang\fP -.fl -.fi -.LP -ほかのパッケージツリーも下方にたどるには、 \f2java:javax:org.xml.sax のように、\fP それらのパッケージの名前を \-subpackages \f2の引数の末尾に追加します\fP。 -.TP 2 -o -\f3ケース 2 \- ルートソースディレクトリに移ってから明示的なパッケージに対して実行\fP \- 完全指定のパッケージ名の親ディレクトリに移ります。次に、ドキュメント化する 1 つ以上のパッケージ名を指定して javadoc を実行します。 -.nf -\f3 -.fl - % \fP\f3cd /home/src/\fP -.fl - % \f3javadoc \-d /home/html java.awt java.awt.event\fP -.fl -.fi -.TP 2 -o -\f3ケース 3 \- 任意のディレクトリから実行。ソースファイルは 1 つのディレクトリツリー内にある\fP \- このケースでは、現在のディレクトリがどこであってもかまいません。最上位パッケージの親ディレクトリを \f2\-sourcepath\fP に指定し、ドキュメント化する 1 つ以上のパッケージ名を指定して javadoc を実行します。 -.nf -\f3 -.fl - % \fP\f3javadoc \-d /home/html \-sourcepath /home/src java.awt java.awt.event\fP -.fl -.fi -.TP 2 -o -\f3ケース 4 \- 任意のディレクトリから実行。ソースファイルは複数のディレクトリツリー内にある\fP \- これはケース 3 と似ていますが、パッケージが複数のディレクトリツリーに存在します。それぞれのツリーのルートへのパスを \f2\-sourcepath\fP に指定し (コロンで区切る)、ドキュメント化する 1 つ以上のパッケージ名を指定して javadoc を実行します。1 つのパッケージのすべてのソースファイルが、1 つのルートディレクトリの下に存在しなければならない、ということはありません。ソースパスとして指定された場所のどこかで見つかれば十分です。 -.nf -\f3 -.fl - % \fP\f3javadoc \-d /home/html \-sourcepath /home/src1:/home/src2 java.awt java.awt.event\fP -.fl + <a href="http://bugreport\&.sun\&.com/bugreport/">Submit a bug or feature</a><br/> + Copyright © 1993, 2011, Oracle and/or its affiliates\&. All rights reserved\&. <br/> + Oracle is a registered trademark of Oracle Corporation and/or its affiliates\&. + Other names may be trademarks of their respective owners\&.</font> .fi +.if n \{\ .RE -.LP -結果: すべてのケースでパッケージ \f2java.awt\fP および \f2java.awt.event\fP 内の public および protected クラスとインタフェースについて、HTML 形式のドキュメントが生成され、指定された生成先ディレクトリ (\f2/home/html\fP) に HTML ファイルが保存されます。2 つ以上のパッケージが生成されているので、ドキュメントは、パッケージのリスト、クラスのリスト、およびメインのクラスページという 3 つのフレームを持つことになります。 -.SS -1 つ以上のクラスのドキュメント化 -.LP -また、1 つ以上のソースファイル (\f2.java\fP) を渡して、Javadoc ツールを実行することもできます。javadoc は、次の 2 つの方法のいずれかで実行できます。1 つは \f2cd\fP を使用してディレクトリを変更する方法、もう 1 つは \f2.java\fP ファイルへのパスを完全に指定する方法です。相対パスは、現在のディレクトリを起点とします。ソースファイル名を渡すときは、 \f2\-sourcepath\fP オプションは無視されます。アスタリスク (*) のようなコマンド行ワイルドカードを使用すると、クラスのグループを指定できます。 -.RS 3 -.TP 2 -o -\f3ケース 1 \- ソースディレクトリに移る\fP \- \f2.java\fP ファイルのあるディレクトリに移ります。次に、ドキュメント化する 1 つ以上のソースファイルの名前を指定して javadoc を実行します。 -.nf -\f3 -.fl - % \fP\f3cd /home/src/java/awt\fP -.fl - % \f3javadoc \-d /home/html Button.java Canvas.java Graphics*.java\fP -.fl -.fi -この例では、クラス \f2Button\fP と \f2Canvas\fP 、および名前が \f2Graphics で始まるクラスについて、HTML 形式のドキュメントが生成されます\fP。パッケージ名ではなくソースファイルが javadoc に引数として渡されているので、ドキュメントは、クラスのリストとメインページという 2 つのフレームを持つことになります。 -.TP 2 -o -\f3ケース 2 \- パッケージのルートディレクトリに移る\fP \- これは、同じルート内にある複数のサブパッケージの個々のソースファイルをドキュメント化する場合に便利です。パッケージのルートディレクトリに移り、各ソースファイルを、ルートからのパスとともに指定します。 -.nf -\f3 -.fl - % \fP\f3cd /home/src/\fP -.fl - % \f3javadoc \-d /home/html java/awt/Button.java java/applet/Applet.java\fP -.fl -.fi -この例では、クラス \f2Button\fP および \f2Applet について、HTML 形式のドキュメントが生成されます\fP。 -.TP 2 -o -\f3ケース 3 \- 任意のディレクトリから\fP \- このケースでは、現在のディレクトリがどこであってもかまいません。ドキュメント化する .java ファイルへの絶対パス (またはカレントディレクトリからの相対パス) を指定して \f2javadoc\fP を実行します。 -.nf -\f3 -.fl - % \fP\f3javadoc \-d /home/html /home/src/java/awt/Button.java /home/src/java/awt/Graphics*.java\fP -.fl -.fi -この例では、クラス \f2Button\fP と、名前が \f2Graphics で始まるクラスについて、HTML 形式のドキュメントが生成されます\fP。 +.\} +\fIjavadoc\fRコマンドを次のように実行します。\fI javadoc \-bottom @bottom @packages\fR +.sp +\fI\-bottom\fRオプションを引数ファイルの最初に含めて、次のように\fIjavadoc\fRコマンドを実行することもできます。\fIjavadoc @bottom @packages\fR .RE -.SS -パッケージとクラスのドキュメント化 -.LP -パッケージ全体と個々のクラスを同時に指定してドキュメント化することもできます。次に前述の 2 つの例を組み合わせた例を示します。 \f2\-sourcepath\fP は、パッケージへのパスに対しては使用できますが、個々のクラスのパスに対しては使用できません。 +.SH "JAVADOCコマンドの実行" +.PP +\fIjavadoc\fRコマンドのリリース番号は\fIjavadoc \-J\-version\fRオプションで特定できます。出力ストリームには標準ドックレットのリリース番号が含まれます。\fI\-quiet\fRオプションで無効にできます。 +.PP +Java言語で記述されたプログラムから\fIjavadoc\fRコマンドを起動するには公開プログラマティック・インタフェースを使用します。このインタフェースは\fIcom\&.sun\&.tools\&.javadoc\&.Main\fRにあります(また\fIjavadoc\fRコマンドは再入可能です)。詳細は、標準ドックレット +(http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/javadoc/standard\-doclet\&.html#runningprogrammatically)を参照してください。 +.PP +次の手順では、標準HTMLドックレットを呼び出します。カスタム・ドックレットを呼び出すには、\fI\-doclet\fRおよび\fI\-docletpath\fRオプションを使用しますドックレットの概要 +(http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/javadoc/doclet/overview\&.html)を参照してください +.SS "簡単な例" +.PP +\fIjavadoc\fRコマンドは、パッケージ全体に対して実行することも、個々のソース・ファイルに対して実行することもできます。各パッケージ名は、それぞれのパッケージ名に対応するディレクトリ名を持ちます。 +.PP +次の例では、ソース・ファイルは/home/src/java/awt/*\&.javaにあります。生成先ディレクトリは/home/htmlです。 +1つ以上のパッケージのドキュメント化.PP +パッケージをドキュメント化するには、そのパッケージのソース・ファイルを、そのパッケージと同じ名前のディレクトリ内に格納する必要があります。 +.PP +パッケージ名が(\fIjava\&.awt\&.color\fRのようにドットで区切られた)複数の識別子から構成されている場合、後続の各識別子が下位のサブディレクトリ(ava/awt/colorなど)に対応している必要があります。 +.PP +1つのパッケージのための複数のソース・ファイルを、異なる場所にあるそのような2つのディレクトリ・ツリーに分けて格納することもできます。ただし、その場合は\fI\-sourcepath\fRによってその両方の場所を指定する必要があります。たとえば、src1/java/awt/colorとsrc2/java/awt/color。 +.PP +ディレクトリの変更(\fIcd\fRコマンドを使用)または\fI\-sourcepath\fRオプションにより、\fIjavadoc\fRコマンドを実行できます。次の例で両方の選択肢を示します。 +.PP +\fBExample 1\fR, 1つ以上のパッケージから再帰的に実行 +.RS 4 +この例では\fIjavadoc\fRコマンドが任意のディレクトリから実行できるように、\fI\-sourcepath\fRを使用し、再帰的処理のために\fI\-subpackages\fR +(1\&.4の新オプション)を使用します。これは、javaディレクトリのサブパッケージをたどりますが、\fIjava\&.net\fRと\fIjava\&.lang\fRをルートに持つパッケージは除外されます。\fIjava\&.lang\fRのサブパッケージである\fIjava\&.lang\&.ref\fRが除外される点に注意してください。また、他のパッケージ・ツリーを下方にたどるには、\fIjava:javax:org\&.xml\&.sax\fRのように、それらのパッケージの名前を\fI\-subpackages\fRの引数に追加します。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl - % \fP\f3javadoc \-d /home/html \-sourcepath /home/src java.awt /home/src/java/applet/Applet.java\fP -.fl +javadoc \-d /home/html \-sourcepath /home/src \-subpackages java \-exclude .fi -.LP -この例では、パッケージ \f2java.awt\fP とクラス \f2Applet について、HTML 形式のドキュメントが生成されます\fP。Javadoc ツールは、 \f2Applet.java ソースファイル内にパッケージ宣言があれば、\fP その宣言に基づいて \f2Applet のパッケージ名を\fP 判定します。 -.SH "使用例" -.LP -Javadoc ツールには多くの便利なオプションがあり、その中にはほかのオプションよりも頻繁に使われるものがあります。ここで紹介するのは、Java プラットフォーム API に対して Javadoc ツールを実行するときに使用する実際のコマンドです。ここでは、Java SE Platform, Standard Edition, v1.2 の (約) 1500 個の public および protected クラスのドキュメントを生成するために、180M バイトのメモリーを使用します。 -.LP -同じ例を 2 回掲載します。最初の例はコマンド行から実行するもので、2 番目の例は Makefile から実行するものです。オプションの引数で絶対パスが使用されているため、同じ \f2javadoc\fP コマンドをどのディレクトリからでも実行できます。 -.SS -コマンド行の例 -.LP -次の例は、DOS などの一部のシェルでは長すぎる可能性があります。この制限を回避するには、コマンド行引数ファイルを使用します。または、シェルスクリプトを記述します。 +.if n \{\ +.RE +.\} +.RE +.PP +\fBExample 2\fR, ルートへの移動および明示的なパッケージの実行 +.RS 4 +完全修飾されたパッケージの親ディレクトリに移動します。次に、ドキュメント化する1つ以上のパッケージの名前を指定して\fIjavadoc\fRコマンドを実行します。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -% javadoc \-sourcepath /java/jdk/src/share/classes \\ -.fl - \-overview /java/jdk/src/share/classes/overview.html \\ -.fl - \-d /java/jdk/build/api \\ -.fl - \-use \\ -.fl - \-splitIndex \\ -.fl - \-windowtitle 'Java Platform, Standard Edition 7 API Specification' \\ -.fl - \-doctitle 'Java Platform, Standard Edition 7 API Specification' \\ -.fl - \-header '<b>Java(TM) SE 7</b>' \\ -.fl - \-bottom '<font size="\-1"> -.fl - <a href="http://bugreport.sun.com/bugreport/">Submit a bug or feature</a><br/> -.fl - Copyright © 1993, 2011, Oracle and/or its affiliates. All rights reserved.<br/> -.fl - Oracle is a registered trademark of Oracle Corporation and/or its affiliates. -.fl - その他の名称は、それぞれの所有者の商標または登録商標です。</font>' \\ -.fl - \-group "Core Packages" "java.*:com.sun.java.*:org.omg.*" \\ -.fl - \-group "Extension Packages" "javax.*" \\ -.fl - \-J\-Xmx180m \\ -.fl - @packages -.fl -\fP +cd /home/src/ +javadoc \-d /home/html java\&.awt java\&.awt\&.event .fi -.LP -ここで、 \f2packages\fP は、処理対象のパッケージ名 ( \f2java.applet java.lang\fP など) が入っているファイルの名前です。各オプションの、単一引用符で囲まれた引数の内側には、改行文字を挿入できません。たとえば、この例をコピー&ペーストする場合は、 \f2\-bottom\fP オプションから改行文字を削除してください。さらに、このあとの「注」も参照してください。 -.SS -Makefile の例 -.LP -ここでは、GNU Makefile の例を示します。Windows の Makefile の例については、 -.na -\f2Windows の Makefile の作成方法\fP @ -.fi -http://java.sun.com/j2se/javadoc/faq/index.html#makefilesを参照してください。 +.if n \{\ +.RE +.\} +また、他のパッケージ・ツリーを下方にたどるには、j\fIava:javax:org\&.xml\&.sax\fRのように、それらのパッケージの名前を\fI\-subpackages\fRの引数に追加します。 +.RE +.PP +\fBExample 3\fR, 1つのツリーの明示的なパッケージの任意のディレクトリから実行 +.RS 4 +この場合、現在のディレクトリがどこかは問題ではありません。\fIjavadoc\fRコマンドを実行し、最上位パッケージの親ディレクトリを指定して\fI\-sourcepath\fRオプションを使用します。ドキュメント化する1つ以上のパッケージの名前を指定します。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -javadoc \-\fP\f3sourcepath\fP\f3 $(SRCDIR) \\ /* Sets path for source files */ -.fl - \-\fP\f3overview\fP\f3 $(SRCDIR)/overview.html \\ /* Sets file for overview text */ -.fl - \-\fP\f3d\fP\f3 /java/jdk/build/api \\ /* Sets destination directory */ -.fl - \-\fP\f3use\fP\f3 \\ /* Adds "Use" files */ -.fl - \-\fP\f3splitIndex\fP\f3 \\ /* Splits index A\-Z */ -.fl - \-\fP\f3windowtitle\fP\f3 $(WINDOWTITLE) \\ /* Adds a window title */ -.fl - \-\fP\f3doctitle\fP\f3 $(DOCTITLE) \\ /* Adds a doc title */ -.fl - \-\fP\f3header\fP\f3 $(HEADER) \\ /* Adds running header text */ -.fl - \-\fP\f3bottom\fP\f3 $(BOTTOM) \\ /* Adds text at bottom */ -.fl - \-\fP\f3group\fP\f3 $(GROUPCORE) \\ /* 1st subhead on overview page */ -.fl - \-\fP\f3group\fP\f3 $(GROUPEXT) \\ /* 2nd subhead on overview page */ -.fl - \-\fP\f3J\fP\f3\-Xmx180m \\ /* Sets memory to 180MB */ -.fl - java.lang java.lang.reflect \\ /* Sets packages to document */ -.fl - java.util java.io java.net \\ -.fl - java.applet -.fl +javadoc \-d /home/html \-sourcepath /home/src java\&.awt java\&.awt\&.event +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\fBExample 4\fR, 複数のツリーの明示的なパッケージの任意のディレクトリから実行 +.RS 4 +\fIjavadoc\fRコマンドを実行し、各ツリーのルートへのパスのコロン区切りリストを指定して\fI\-sourcepath\fRオプションを使用します。ドキュメント化する1つ以上のパッケージの名前を指定します。指定したパッケージのすべてのソース・ファイルが、1つのルート・ディレクトリの下に存在する必要はありませんが、ソース・パスで指定された場所のどこかで見つかる必要があります。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +javadoc \-d /home/html \-sourcepath /home/src1:/home/src2 java\&.awt java\&.awt\&.event +.fi +.if n \{\ +.RE +.\} +すべてのケースでj\fIava\&.awt\fRおよび\fIjava\&.awt\&.even\fRtパッケージ内の\fIpublic\fRおよび\fIprotected\fRクラスとインタフェースについて、HTML形式のドキュメントが生成され、指定された生成先ディレクトリにHTMLファイルが保存されます。2つ以上のパッケージが生成されているので、ドキュメントは、パッケージのリスト、クラスのリスト、およびメインのクラス・ページという3つのHTMLフレームを持つことになります。 +.RE +1つ以上のクラスのドキュメント化.PP +また、1つ以上のソース・ファイルを渡して、\fIjavadoc\fRコマンドを実行することもできます。\fIjavadoc\fRは、次の2つの方法のいずれかで実行できます。1つはディレクトリを変更する方法(\fIcd\fRを使用)、もう1つはソース・ファイルへのパスを完全に指定する方法です。相対パスは、現在のディレクトリを起点とします。ソース・ファイルを渡すときは、\fI\-sourcepath\fRオプションは無視されます。アスタリスク(*)のようなコマンドライン・ワイルドカードを使用すると、クラスのグループを指定できます。 +.PP +\fBExample 1\fR, ソース・ディレクトリに変更 +.RS 4 +ソースを保持するディレクトリに変更します。次に、ドキュメント化する1つ以上のソース・ファイルの名前を指定して\fIjavadoc\fRコマンドを実行します。 +.sp +この例では、\fIButton\fRクラスと\fICanvas\fRクラス、および名前が\fIGraphics\fRで始まるクラスについて、HTML形式のドキュメントが生成されます。パッケージ名ではなくソース・ファイルが\fIjavadoc\fRコマンドに引数として渡されているので、ドキュメントは、クラスのリストとメイン・ページという2つのフレームを持つことになります。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +cd /home/src/java/awt +javadoc \-d /home/html Button\&.java Canvas\&.java Graphics*\&.java +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\fBExample 2\fR, パッケージのルート・ディレクトリに変更 +.RS 4 +これは、同じルートからの別のサブパッケージの個々のソース・ファイルをドキュメント化するのに役立ちます。パッケージのルート・ディレクトリに移り、各ソース・ファイルを、ルートからのパスとともに指定します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +cd /home/src/ +javadoc \-d /home/html java/awt/Button\&.java java/applet/Applet\&.java +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\fBExample 3\fR, 任意のディレクトリからのファイルのドキュメント化 +.RS 4 +この場合、現在のディレクトリがどこかは問題ではありません。ドキュメント化するソース・ファイルへの絶対パス(または現在のディレクトリからの相対パス)を指定して\fIjavadoc\fRコマンドを実行します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +javadoc \-d /home/html /home/src/java/awt/Button\&.java +/home/src/java/awt/Graphics*\&.java +.fi +.if n \{\ +.RE +.\} +.RE +パッケージおよびクラスのドキュメント化.PP +パッケージ全体と個々のクラスを同時に指定してドキュメント化することもできます。次に、前述の2つの例を組み合せた例を示します。\fI\-sourcepath\fRオプションは、パッケージへのパスに対しては使用できますが、個々のクラスへのパスに対しては使用できません。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +javadoc \-d /home/html \-sourcepath /home/src java\&.awt +/home/src/java/applet/Applet\&.java +.fi +.if n \{\ +.RE +.\} +.SS "実際の例" +.PP +次のコマンドラインおよび\fImakefile\fRバージョンの\fIjavadoc\fRコマンドをJavaプラットフォームAPIで実行します。Java SE 1\&.2で約1500個のpublicおよびprotectedクラスのドキュメントを生成するには、180MBのメモリーを使用します。どちらの例もオプションの引数で絶対パスが使用されているため、任意のディレクトリから同じ\fIjavadoc\fRコマンドを実行できます。 +コマンドラインの例.PP +次のコマンドは、一部のシェルに対して長すぎる可能性があります。この制限を回避するには、コマンドライン引数ファイルを使用します。または、シェル・スクリプトを記述します。 +.PP +この例では、\fIpackages\fRは処理するパッケージを含む名前で、\fIjava\&.applet\fR +\fIjava\&.lang\fRなどです。各オプションの、一重引用符で囲まれた引数の内側には、改行文字を挿入できません。たとえば、この例をコピー・アンド・ペーストする場合は、\fI\-bottom\fRオプションから改行文字を削除してください。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +javadoc \-sourcepath /java/jdk/src/share/classes \e +\-overview /java/jdk/src/share/classes/overview\&.html \e +\-d /java/jdk/build/api \e +\-use \e +\-splitIndex \e +\-windowtitle \*(AqJava Platform, Standard Edition 7 API Specification\*(Aq \e +\-doctitle \*(AqJava Platform, Standard Edition 7 API Specification\*(Aq \e +\-header \*(Aq<b>Java(TM) SE 7</b>\*(Aq \e +\-bottom \*(Aq<font size="\-1"> +<a href="http://bugreport\&.sun\&.com/bugreport/">Submit a bug or feature</a><br/> +Copyright © 1993, 2011, Oracle and/or its affiliates\&. All rights reserved\&.<br/> +Oracle is a registered trademark of Oracle Corporation and/or its affiliates\&. +Other names may be trademarks of their respective owners\&.</font>\*(Aq \e +\-group "Core Packages" "java\&.*:com\&.sun\&.java\&.*:org\&.omg\&.*" \e +\-group "Extension Packages" "javax\&.*" \e +\-J\-Xmx180m \e +@packages +.fi +.if n \{\ +.RE +.\} +プログラマティック・インタフェース.PP +Javadoc Access APIでは、新しいプロセスを実行しなくても、JavadocツールをJavaアプリケーションから直接起動できます。 +.PP +たとえば、次の文はコマンド\fIjavadoc \-d /home/html \-sourcepath /home/src \-subpackages java \-exclude java\&.net:java\&.lang com\&.example\fRと同等です。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +import javax\&.tools\&.DocumentationTool; +import javax\&.tools\&.ToolProvider; + +public class JavaAccessSample{ + public static void main(String[] args){ + DocumentationTool javadoc = ToolProvider\&.getSystemDocumentationTool(); + int rc = javadoc\&.run( null, null, null, + "\-d", "/home/html", + "\-sourcepath", "home/src", + "\-subpackages", "java", + "\-exclude", "java\&.net:java\&.lang", + "com\&.example"); + } + } +.fi +.if n \{\ +.RE +.\} +.PP +\fIrun\fRメソッドの最初の3つの引数は、入力、標準出力、および標準エラー・ストリームを指定します。\fINull\fRは\fISystem\&.in\fR、\fISystem\&.out\fRおよび\fISystem\&.err\fRそれぞれのデフォルト値です。 +.SS "makefileの例" +.PP +ここでは、GNU +\fImakefile\fRの例を示します。\fImakefile\fRの引数は、一重引用符で囲みます。Windows +\fImakefile\fRの例については、Javadoc FAQの\fImakefiles\fRに関する項 +(http://www\&.oracle\&.com/technetwork/java/javase/documentation/index\-137483\&.html#makefiles)を参照してください +.sp +.if n \{\ +.RS 4 +.\} +.nf +javadoc \-sourcepath $(SRCDIR) \e /* Sets path for source files */ + \-overview $(SRCDIR)/overview\&.html \e /* Sets file for overview text */ + \-d /java/jdk/build/api \e /* Sets destination directory */ + \-use \e /* Adds "Use" files */ + \-splitIndex \e /* Splits index A\-Z */ + \-windowtitle $(WINDOWTITLE) \e /* Adds a window title */ + \-doctitle $(DOCTITLE) \e /* Adds a doc title */ + \-header $(HEADER) \e /* Adds running header text */ + \-bottom $(BOTTOM) \e /* Adds text at bottom */ + \-group $(GROUPCORE) \e /* 1st subhead on overview page */ + \-group $(GROUPEXT) \e /* 2nd subhead on overview page */ + \-J\-Xmx180m \e /* Sets memory to 180MB */ + java\&.lang java\&.lang\&.reflect \e /* Sets packages to document */ + java\&.util java\&.io java\&.net \e + java\&.applet -.fl -WINDOWTITLE = 'Java(TM) SE 7 API Specification' -.fl -DOCTITLE = 'Java(TM) Platform Standard Edition 7 API Specification' -.fl -HEADER = '<b>Java(TM) SE 7</font>' -.fl -BOTTOM = '<font size="\-1"> -.fl - <a href="http://bugreport.sun.com/bugreport/">Submit a bug or feature</a><br/> -.fl - Copyright © 1993, 2011, Oracle and/or its affiliates. All rights reserved.<br/> -.fl - Oracle is a registered trademark of Oracle Corporation and/or its affiliates. -.fl - その他の名称は、それぞれの所有者の商標または登録商標です。</font>' -.fl -GROUPCORE = '"Core Packages" "java.*:com.sun.java.*:org.omg.*"' -.fl -GROUPEXT = '"Extension Packages" "javax.*"' -.fl -SRCDIR = '/java/jdk/1.7.0/src/share/classes' -.fl -\fP +WINDOWTITLE = \*(AqJava(TM) SE 7 API Specification\*(Aq +DOCTITLE = \*(AqJava(TM) Platform Standard Edition 7 API Specification\*(Aq +HEADER = \*(Aq<b>Java(TM) SE 7</font>\*(Aq +BOTTOM = \*(Aq<font size="\-1"> + <a href="http://bugreport\&.sun\&.com/bugreport/">Submit a bug or feature</a><br/> + Copyright © 1993, 2011, Oracle and/or its affiliates\&. All rights reserved\&.<br/> + Oracle is a registered trademark of Oracle Corporation and/or its affiliates\&. + Other names may be trademarks of their respective owners\&.</font>\*(Aq +GROUPCORE = \*(Aq"Core Packages" "java\&.*:com\&.sun\&.java\&.*:org\&.omg\&.*"\*(Aq +GROUPEXT = \*(Aq"Extension Packages" "javax\&.*"\*(Aq +SRCDIR = \*(Aq/java/jdk/1\&.7\&.0/src/share/classes\*(Aq .fi -.LP -Makefile の引数は、単一引用符で囲みます。 -.LP -\f3注\fP -.RS 3 -.TP 2 -o -\-windowtitle \f2オプションを省略すると、\fP Javadoc ツールによってドキュメントタイトルがウィンドウタイトルにコピーされます。 \f2\-windowtitle\fP のテキストは基本的に \f2\-doctitle\fP のものと同じですが、HTML タグを含まない点が異なります。これは、HTML タグが raw テキストとしてウィンドウタイトル内に表示されるのを防ぐためです。 -.TP 2 -o -ここで行っているように \f2\-footer\fP オプションを省略すると、Javadoc ツールによってヘッダーのテキストがフッターにコピーされます。 -.TP 2 -o -この例では必要ありませんが、\-\f2classpath\fP と \-\f2link\fP も重要なオプションです。 +.if n \{\ .RE -.SH "トラブルシューティング" -.SS -一般的なトラブルシューティング -.RS 3 -.TP 2 -o -\f3Javadoc FAQ\fP \- 一般的なバグおよびトラブルシューティングのヒントは、 -.na -\f2「Javadoc FAQ」\fP @ -.fi -http://java.sun.com/j2se/javadoc/faq/index.html#B で参照できます。 -.TP 2 -o -\f3バグおよび制限事項\fP \- バグの一部は、「Important Bug Fixes and Changes」 でも参照できます。 -.TP 2 -o -\f3バージョン番号\fP \- 「バージョン番号」を参照してください。 -.TP 2 -o -\f3有効なクラスだけをドキュメント化\fP \- パッケージをドキュメント化するとき、Javadoc は、有効なクラス名で構成されているファイルのみを読み込みます。たとえば、ファイル名にハイフン「\-」を含めることで、javadoc によるファイルの解析を防ぐことができます。 +.\} +.SS "注意" +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fI\-windowtitle\fRオプションを省略すると、\fIjavadoc\fRコマンドによってドキュメント・タイトルがウィンドウ・タイトルにコピーされます。\fI\-windowtitle\fRオプションのテキストは、\fI\-doctitle\fRオプションと同じですが、HTMLタグは含まれません。これは、HTMLタグが、ウィンドウ・タイトル内にそのままのテキストとして表示されるのを防ぐためです。 .RE -.SS -エラーと警告 -.LP -エラーおよび警告メッセージには、ファイル名と宣言行 (ドキュメンテーションコメント内の特定の行ではない) の行番号が含まれます。 -.RS 3 -.TP 2 -o -\f2"error: cannot read: Class1.java"\fP Javadoc ツールはカレントディレクトリに Class1.java クラスをロードしようとしています。絶対パスまたは相対パスとともに表示されるクラス名は、この例の場合 \f2./Class1.java と同じです\fP。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fI\-footer\fRオプションを省略すると、\fIjavadoc\fRコマンドによってヘッダー・テキストがフッターにコピーされます。 .RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +この例では必要ありませんが、\fI\-classpath\fRと\fI\-link\fRも重要なオプションです。 +.RE +.SH "一般的なトラブルシューティング" +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fIjavadoc\fRコマンドは有効なクラス名を含むファイルのみを読み取ります。\fIjavadoc\fRコマンドがファイルの内容を正しく読み取っていない場合は、クラス名が有効であることを確認します。ソース・ファイルの処理を参照してください。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +共通の不具合およびトラブルシューティングのヒントについては、Javadoc FAQ +(http://www\&.oracle\&.com/technetwork/java/javase/documentation/index\-137483\&.html)を参照してください。 +.RE +.SH "エラーと警告" +.PP +エラーおよび警告メッセージには、ファイル名と宣言行(ドキュメンテーション・コメント内の特定の行ではない)の行番号が含まれます。 +.PP +たとえば、メッセージ\fI「エラー: Class1\&.javaを読み込めません」\fRは、\fIjavadoc\fRコマンドが\fIClass1\&.jav\fR\fIa\fRを現在のディレクトリにロードしようとしていることを意味します。クラス名はそのパス(絶対または相対)で表示されます。 .SH "環境" -.RS 3 -.TP 3 -CLASSPATH -Javadoc がユーザークラスのファイルを探すときに使うパスを指定する環境変数です。この環境変数は、 \f2\-classpath\fP オプションによってオーバーライドされます。ディレクトリは、次のようにコロンで区切ります。 -.:/home/classes:/usr/local/java/classes +.PP +CLASSPATH +.RS 4 +\fICLASSPATH\fRは、\fIjavadoc\fRコマンドがユーザー・クラス・ファイルの検出に使用するパスを提供する環境変数です。この環境変数は、\fI\-classpath\fRオプションによってオーバーライドされます。ディレクトリはセミコロン(Windowsの場合)またはコロン(Oracle Solarisの場合)で区切ります。 +.sp +\fBWindowsの例\fR: +\fI\&.;C:\eclasses;C:\ehome\ejava\eclasses\fR +.sp +\fBOracle Solarisの例\fR: +\fI\&.:/home/classes:/usr/local/java/classes\fR .RE .SH "関連項目" -.RS 3 -.TP 2 -o -javac(1) -.TP 2 -o -java(1) -.TP 2 -o -jdb(1) -.TP 2 -o -javah(1) -.TP 2 -o -javap(1) -.TP 2 -o -.na -\f2Javadoc のホームページ\fP @ -.fi -http://www.oracle.com/technetwork/java/javase/documentation/index\-jsp\-135444.html -.TP 2 -o -.na -\f2How to Write Doc Comments for Javadoc\fP @ -.fi -http://www.oracle.com/technetwork/java/javase/documentation/index\-137868.html -.TP 2 -o -.na -\f2クラスパスの設定\fP @ -.fi -http://java.sun.com/javase/6/docs/technotes/tools/index.html#general -.TP 2 -o -.na -\f2javac と javadoc がクラスを検索する方法\fP @ -.fi -http://java.sun.com/javase/6/docs/technotes/tools/findingclasses.html#srcfiles (tools.jar) +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +javac(1) .RE - +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +java(1) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +jdb(1) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +javah(1) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +javap(1) +.RE +.SH "関連ドキュメント" +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +Javadocテクノロジ +(http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/javadoc/index\&.html) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +クラスの検出方法 +(http://docs\&.oracle\&.com/javase/8/docs/technotes/tools/findingclasses\&.html) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +JavadocツールでのDocコメントの記述方法 +(http://www\&.oracle\&.com/technetwork/java/javase/documentation/index\-137868\&.html) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +URLメモ、Uniform Resource Locators +(http://www\&.ietf\&.org/rfc/rfc1738\&.txt) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +HTML標準、HTML Document Representation (4197265および4137321) +(http://www\&.w3\&.org/TR/REC\-html40/charset\&.html#h\-5\&.2\&.2) +.RE +.br +'pl 8.5i +'bp diff --git a/jdk/src/solaris/doc/sun/man/man1/ja/javah.1 b/jdk/src/solaris/doc/sun/man/man1/ja/javah.1 index b9c445d6b80..e88dfbfaabd 100644 --- a/jdk/src/solaris/doc/sun/man/man1/ja/javah.1 +++ b/jdk/src/solaris/doc/sun/man/man1/ja/javah.1 @@ -1,139 +1,220 @@ -." 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 -." 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. -." -.TH javah 1 "07 May 2011" - -.LP -.SH "名前" -javah \- C ヘッダーとスタブファイルジェネレータ -.LP -.LP -\f3javah\fP は、Java クラスから C ヘッダーファイルと C ソースファイルを作成します。これらのファイルは、Java プログラミング言語で書かれたコードと、C などのその他の言語で書かれたコードを接続し、コードが相互に作用するようにします。 -.LP -.SH "形式" -.LP +'\" t +.\" Copyright (c) 1994, 2013, Oracle and/or its affiliates. All rights reserved. +.\" Title: javah +.\" Language: English +.\" Date: 2013年11月21日 +.\" SectDesc: 基本ツール +.\" Software: JDK 8 +.\" Arch: 汎用 +.\" +.\" 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. +.\" +.pl 99999 +.TH "javah" "1" "2013年11月21日" "JDK 8" "基本ツール" +.\" ----------------------------------------------------------------- +.\" * Define some portability stuff +.\" ----------------------------------------------------------------- +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.\" http://bugs.debian.org/507673 +.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" ----------------------------------------------------------------- +.\" * set default formatting +.\" ----------------------------------------------------------------- +.\" disable hyphenation +.nh +.\" disable justification (adjust text to left margin only) +.ad l +.\" ----------------------------------------------------------------- +.\" * MAIN CONTENT STARTS HERE * +.\" ----------------------------------------------------------------- +.SH "NAME" +javah \- JavaクラスからCヘッダーとソース・ファイルを生成します。 +.SH "概要" +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -javah [ \fP\f3options\fP\f3 ] fully\-qualified\-classname. . . -.fl -\fP +\fIjavah\fR [ \fIoptions\fR ] f\fIully\-qualified\-class\-name \&.\&.\&.\fR .fi - -.LP +.if n \{\ +.RE +.\} +.PP +\fIoptions\fR +.RS 4 +コマンドライン・オプション。オプションを参照してください。 +.RE +.PP +\fIfully\-qualified\-class\-name\fR +.RS 4 +Cヘッダーとソース・ファイルに変換されるクラスの完全修飾された場所。 +.RE .SH "説明" -.LP -.LP -\f3javah\fP は、ネイティブメソッドを実装するために必要な C ヘッダーとソースファイルを生成します。作成されたヘッダーとソースファイルは、ネイティブソースコードからオブジェクトのインスタンス変数を参照するために C プログラムによって使用されます。.h ファイルは、対応するクラスと一致する配置を持つ構造体定義を含みます。構造体のフィールドは、クラスのインスタンス変数に対応します。 -.LP -.LP -ヘッダーファイルとその中で宣言される構造体の名前はクラスの名前から派生します。\f3javah\fP に渡されるクラスがパッケージの中にある場合、パッケージ名はヘッダーファイル名と構造体名の両方に付加されます。下線 (_) が名前の区切り文字として使用されます。 -.LP -.LP -デフォルトでは \f3javah\fP は、コマンド行にリストされる各クラスのヘッダーファイルを作成し、現在のディレクトリにファイルを置きます。ソースファイルを作成するには、\f2\-stubs\fP オプションを使用してください。1 つのファイルの中に、リストされたすべてのクラスの結果を連結するには、\f2\-o\fP オプションを使用してください。 -.LP -.LP -新しいネイティブメソッドインタフェースである Java Native Interface (JNI) は、ヘッダー情報またはスタブファイルを必要としません。現在では、\f3javah\fP は、JNI 形式のネイティブメソッドに必要なネイティブメソッド機能プロトタイプを生成します。デフォルトでは、\f3javah\fP は JNI 形式で出力され、その結果は .h ファイルに格納されます。 -.LP +.PP +\fIjavah\fRコマンドは、ネイティブ・メソッドを実装するために必要なCヘッダーとソース・ファイルを生成します。作成されたヘッダーとソース・ファイルは、ネイティブ・ソース・コードからオブジェクトのインスタンス変数を参照するためにCプログラムによって使用されます。\fI\&.h\fRファイルは、対応するクラスと一致する配置を持つ\fIstruct\fR定義を含みます。\fIstruct\fRのフィールドは、クラスのインスタンス変数に対応します。 +.PP +ヘッダー・ファイルとその中で宣言される構造体の名前はクラスの名前から派生します。\fIjavah\fRコマンドに渡されるクラスがパッケージの中にある場合、パッケージ名はヘッダー・ファイル名と構造体名の両方の先頭に付加されます。下線(_)が名前の区切り文字として使用されます。 +.PP +デフォルトでは\fIjavah\fRコマンドは、コマンドラインにリストされる各クラスのヘッダー・ファイルを作成し、現在のディレクトリにファイルを置きます。ソース・ファイルを作成するには、\fI\-stubs\fRオプションを使用してください。1つのファイルの中に、リストされたすべてのクラスの結果を連結するには、\fI\-o\fRオプションを使用してください。 +.PP +Java Native Interface (JNI)はヘッダー情報またはスタブ・ファイルを必要としません。\fIjavah\fRコマンドは引き続きJNI形式のネイティブ・メソッドに必要なネイティブ・メソッド関数プロトタイプの生成に使用できます。\fIjavah\fRコマンドはデフォルトでJNI形式の出力を生成し、その結果を\fI\&.h\fRファイルに格納します。 .SH "オプション" -.LP -.RS 3 -.TP 3 -\-o outputfile -コマンド行にリストされたすべてのクラスに対して、結果のヘッダーまたはソースファイルを連結して \f2outputfile\fP に格納します。\f3\-o\fP または \f3\-d\fP のどちらか一方だけが使われます。 -.TP 3 -\-d directory -\f3javah\fP がヘッダーファイルまたはスタブファイルを保存する、ディレクトリを設定します。\f3\-d\fP または \f3\-o\fP のどちらか一方だけが使われます。 -.TP 3 -\-stubs -\f3javah\fP が、Java オブジェクトファイルから C 宣言を生成します。 -.TP 3 -\-verbose -詳細出力を指定し、作成ファイルの状態に関するメッセージを、\f3javah\fP が標準出力に出力します。 -.TP 3 -\-help -\f3javah\fP の使用法についてのヘルプメッセージを出力します。 -.TP 3 -\-version -\f3javah\fP のバージョン情報を出力します。 -.TP 3 -\-jni -JNI 形式のネイティブファイル機能プロトタイプを含む出力ファイルを、\f3javah\fP が作成します。これは標準出力であるため、\f3\-jni\fP の使用はオプションです。 -.TP 3 -\-classpath path -クラスを探すために \f3javah\fP が使用するパスを指定します。デフォルトまたは CLASSPATH 環境変数設定を上書きします。ディレクトリはコロンで分割します。したがって、\f2path\fP の一般形式は次のようになります。 -.nf -\f3 -.fl - .:<your_path> -.fl -\fP -.fi -次に例を示します。 -.nf -\f3 -.fl - .:/home/avh/classes:/usr/local/java/classes -.fl -\fP -.fi -.LP -便宜上、 \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 プログラムが展開されていないワイルドカードを認識することはありません。 -.TP 3 -\-bootclasspath path -ブートストラップクラスをロードするパスを指定します。ブートストラップクラスは、デフォルトでは \f2jre/lib/rt.jar\fP および他のいくつかの JAR ファイル にある、コア Java 2 プラットフォームを実装するクラスです。 -.TP 3 -\-old -古い JDK1.0 形式のヘッダーファイルを生成するように指定します。 -.TP 3 -\-force -出力ファイルが常に書き込まれるように指定します。 -.TP 3 -\-Joption -Java 仮想マシンに \f2option\fP を渡します。\f2option\fP には、java(1)のリファレンスページに記載されているオプションを 1 つ指定します。たとえば、\f3\-J\-Xms48m\fP と指定すると、スタートアップメモリーは 48M バイトに設定されます。 +.PP +\-o \fIoutputfile\fR +.RS 4 +コマンドラインにリストされたすべてのクラスに対して、結果のヘッダーまたはソース・ファイルを連結して出力ファイルに格納します。\fI\-o\fRまたは\fI\-d\fRのどちらかのみ使用できます。 .RE - -.LP -.SH "環境変数" -.LP -.RS 3 -.TP 3 -CLASSPATH -ユーザー定義クラスへのパスをシステムに指定します。ディレクトリはコロンで分割されています。 -.nf -\f3 -.fl -.:/home/avh/classes:/usr/local/java/classes -.fl -\fP -.fi +.PP +\-d \fIdirectory\fR +.RS 4 +\fIjavah\fRがヘッダー・ファイルまたはスタブ・ファイルを保存する、ディレクトリを設定します。\fI\-d\fRまたは\fI\-o\fRのどちらかのみ使用できます。 +.RE +.PP +\-stubs +.RS 4 +\fIjavah\fRコマンドが、Javaオブジェクト・ファイルからC宣言を生成します。 +.RE +.PP +\-verbose +.RS 4 +詳細出力を指定し、作成ファイルの状態に関するメッセージを、\fIjavah\fRコマンドが\fI標準出力\fRに出力します。 +.RE +.PP +\-help +.RS 4 +\fIjavah\fRの使用方法についてのヘルプ・メッセージを出力します。 +.RE +.PP +\-version +.RS 4 +\fIjavah\fRコマンドのリリース情報を出力します。 +.RE +.PP +\-jni +.RS 4 +JNI形式のネイティブ・メソッド機能プロトタイプを含む出力ファイルを、\fIjavah\fRコマンドが作成します。これは標準出力であるため、\fI\-jni\fRの使用はオプションです。 +.RE +.PP +\-classpath \fIpath\fR +.RS 4 +クラスを探すために\fIjavah\fRコマンドが使用するパスを指定します。デフォルトまたは\fICLASSPATH\fR環境変数の設定をオーバーライドします。ディレクトリはOracle Solarisの場合はコロンで、Windowsの場合はセミコロンで区切られます。パスの一般的な形式は次のようになります。 +.sp +\fBOracle Solaris\fRの場合: +.sp +\&.:\fIyour\-path\fR +.sp +例: +\fI\&.:/home/avh/classes:/usr/local/java/classes\fR +.sp +\fBWindows\fRの場合: +.sp +\&.;\fIyour\-path\fR +.sp +例: +\fI\&.;C:\eusers\edac\eclasses;C:\etools\ejava\eclasses\fR +.sp +便宜上、*のベース名を含むクラス・パス要素は、\fI\&.jar\fRまたは\fI\&.JAR\fRを拡張子に持つディレクトリ内のすべてのファイルのリストを指定するのと同等とみなされます。 +.sp +たとえば、ディレクトリ\fImydir\fRに\fIa\&.jar\fRと\fIb\&.JAR\fRが含まれている場合、クラス・パス要素\fImydir/*\fRは\fIA\fR\fI\&.jar:b\&.JAR\fRに展開されますが、JARファイルの順番は未指定となります。このリストには、隠しファイルも含め、指定されたディレクトリ内のすべてのJARファイルが含まれます。*からなるクラス・パス・エントリは、現在のディレクトリ内のすべてのJARファイルのリストに展開されます。\fICLASSPATH\fR環境変数も、定義時には同様に展開されます。クラス・パスのワイルドカードの展開は、Java仮想マシン(JVM)の開始前に行われます。Javaプログラムは、環境を問い合せる場合を除き、展開されていないワイルドカードを参照しません。たとえば、\fISystem\&.getenv("CLASSPATH")\fRをコールして問い合せる場合です。 +.RE +.PP +\-bootclasspath \fIpath\fR +.RS 4 +ブートストラップ・クラスをロードするパスを指定します。ブートストラップ・クラスは、デフォルトでは\fIjre\elib\ert\&.jar\fRおよび他のいくつかのJARファイルにある、コアJavaプラットフォームを実装するクラスです。 +.RE +.PP +\-old +.RS 4 +古いJDK 1\&.0形式のヘッダー・ファイルを生成するように指定します。 +.RE +.PP +\-force +.RS 4 +出力ファイルが常に書き込まれるように指定します。 +.RE +.PP +\-J\fIoption\fR +.RS 4 +Java仮想マシンに\fIoption\fRを渡します。\fIoption\fRには、Javaアプリケーション起動ツールのリファレンス・ページに記載されているオプションを1つ指定します。たとえば、\fI\-J\-Xms48m\fRと指定すると、スタートアップ・メモリーは48MBに設定されます。java(1)を参照してください。 .RE - -.LP .SH "関連項目" -.LP -.LP -javac(1)、java(1)、jdb(1)、javap(1)、javadoc(1) -.LP - +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +javah(1) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +java(1) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +jdb(1) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +javap(1) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +javadoc(1) +.RE +.br +'pl 8.5i +'bp diff --git a/jdk/src/solaris/doc/sun/man/man1/ja/javap.1 b/jdk/src/solaris/doc/sun/man/man1/ja/javap.1 index 1854f9d552e..152821dfebe 100644 --- a/jdk/src/solaris/doc/sun/man/man1/ja/javap.1 +++ b/jdk/src/solaris/doc/sun/man/man1/ja/javap.1 @@ -1,317 +1,344 @@ -." 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 -." 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. -." -.TH javap 1 "07 May 2011" - -.LP -.SH "名前" -javap \- Java クラスファイル逆アセンブラ -.LP -.LP -クラスファイルを逆アセンブルします。 -.LP -.SH "形式" -.LP +'\" t +.\" Copyright (c) 1994, 2013, Oracle and/or its affiliates. All rights reserved. +.\" Title: javap +.\" Language: English +.\" Date: 2013年11月21日 +.\" SectDesc: 基本ツール +.\" Software: JDK 8 +.\" Arch: 汎用 +.\" +.\" 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. +.\" +.pl 99999 +.TH "javap" "1" "2013年11月21日" "JDK 8" "基本ツール" +.\" ----------------------------------------------------------------- +.\" * Define some portability stuff +.\" ----------------------------------------------------------------- +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.\" http://bugs.debian.org/507673 +.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" ----------------------------------------------------------------- +.\" * set default formatting +.\" ----------------------------------------------------------------- +.\" disable hyphenation +.nh +.\" disable justification (adjust text to left margin only) +.ad l +.\" ----------------------------------------------------------------- +.\" * MAIN CONTENT STARTS HERE * +.\" ----------------------------------------------------------------- +.SH "NAME" +javap \- 1つ以上のクラス・ファイルを逆アセンブルします。 +.SH "概要" +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -javap [ \fP\f3options\fP\f3 ] classes -.fl -\fP +\fIjavap\fR [\fIoptions\fR] \fIclassfile\fR\&.\&.\&. .fi - -.LP +.if n \{\ +.RE +.\} +.PP +\fIoptions\fR +.RS 4 +コマンドライン・オプション。オプションを参照してください。 +.RE +.PP +\fIclassfile\fR +.RS 4 +注釈の処理対象となる、空白で区切った1つ以上のクラス(DocFooter\&.classなど)。クラス・パスで検出できるクラスを、ファイル名またはURL(\fIfile:///home/user/myproject/src/DocFooter\&.class\fRなど)で指定できます。 +.RE .SH "説明" -.LP -.LP -\f3javap\fP コマンドは、1 つまたは複数のクラスファイルを逆アセンブルします。その出力は指定するオプションにより異なります。オプションを指定しない場合、\f3javap\fP は、そのパッケージ、渡されたクラスの protected および public のフィールドとメソッドを出力します。\f3javap\fP はその出力を標準出力に表示します。 -.LP -.RS 3 -.TP 3 -options -コマンド行オプション。 -.TP 3 -classes -注釈の処理対象となる 1 つ以上のクラス \f2DocFooter.class\fP など) のリスト (空白区切り)。クラスパスで見つかるクラスは、ファイル名 ( \f2/home/user/myproject/src/DocFooter.class\fP など) または URL ( \f2file:///home/user/myproject/src/DocFooter.class\fP など) で指定できます。 -.RE - -.LP -.LP -たとえば、次のクラス宣言をコンパイルするとします。 -.LP -.nf -\f3 -.fl -import java.awt.*; -.fl -import java.applet.*; -.fl - -.fl -public class DocFooter extends Applet { -.fl - String date; -.fl - String email; -.fl - -.fl - public void init() { -.fl - resize(500,100); -.fl - date = getParameter("LAST_UPDATED"); -.fl - email = getParameter("EMAIL"); -.fl - } -.fl - -.fl - public void paint(Graphics g) { -.fl - g.drawString(date + " by ",100, 15); -.fl - g.drawString(email,290,15); -.fl - } -.fl -} -.fl -\fP -.fi - -.LP -.LP -\f3javap DocFooter.class\fP がもたらす出力は次のようになります。 -.LP -.nf -\f3 -.fl -Compiled from "DocFooter.java" -.fl -public class DocFooter extends java.applet.Applet { -.fl - java.lang.String date; -.fl - java.lang.String email; -.fl - public DocFooter(); -.fl - public void init(); -.fl - public void paint(java.awt.Graphics); -.fl -} -.fl -\fP -.fi - -.LP -.LP -\f3javap \-c DocFooter.class\fP がもたらす出力は次のようになります。 -.LP -.nf -\f3 -.fl -Compiled from "DocFooter.java" -.fl -public class DocFooter extends java.applet.Applet { -.fl - java.lang.String date; -.fl - -.fl - java.lang.String email; -.fl - -.fl - public DocFooter(); -.fl - Code: -.fl - 0: aload_0 -.fl - 1: invokespecial #1 // Method java/applet/Applet."<init>":()V -.fl - 4: return -.fl - -.fl - public void init(); -.fl - Code: -.fl - 0: aload_0 -.fl - 1: sipush 500 -.fl - 4: bipush 100 -.fl - 6: invokevirtual #2 // Method resize:(II)V -.fl - 9: aload_0 -.fl - 10: aload_0 -.fl - 11: ldc #3 // String LAST_UPDATED -.fl - 13: invokevirtual #4 // Method getParameter:(Ljava/lang/String;)Ljava/lang/String; -.fl - 16: putfield #5 // Field date:Ljava/lang/String; -.fl - 19: aload_0 -.fl - 20: aload_0 -.fl - 21: ldc #6 // String EMAIL -.fl - 23: invokevirtual #4 // Method getParameter:(Ljava/lang/String;)Ljava/lang/String; -.fl - 26: putfield #7 // Field email:Ljava/lang/String; -.fl - 29: return -.fl - -.fl - public void paint(java.awt.Graphics); -.fl - Code: -.fl - 0: aload_1 -.fl - 1: new #8 // class java/lang/StringBuilder -.fl - 4: dup -.fl - 5: invokespecial #9 // Method java/lang/StringBuilder."<init>":()V -.fl - 8: aload_0 -.fl - 9: getfield #5 // Field date:Ljava/lang/String; -.fl - 12: invokevirtual #10 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; -.fl - 15: ldc #11 // String by -.fl - 17: invokevirtual #10 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; -.fl - 20: invokevirtual #12 // Method java/lang/StringBuilder.toString:()Ljava/lang/String; -.fl - 23: bipush 100 -.fl - 25: bipush 15 -.fl - 27: invokevirtual #13 // Method java/awt/Graphics.drawString:(Ljava/lang/String;II)V -.fl - 30: aload_1 -.fl - 31: aload_0 -.fl - 32: getfield #7 // Field email:Ljava/lang/String; -.fl - 35: sipush 290 -.fl - 38: bipush 15 -.fl - 40: invokevirtual #13 // Method java/awt/Graphics.drawString:(Ljava/lang/String;II)V -.fl - 43: return -.fl -} -.fl -\fP -.fi - -.LP +.PP +\fIjavap\fRコマンドは、1つまたは複数のクラス・ファイルを逆アセンブルします。その出力は指定するオプションにより異なります。オプションを指定しない場合、\fIjavap\fRコマンドは、そのパッケージ、渡されたクラスのprotectedおよびpublicのフィールドとメソッドを出力します。\fIjavap\fRコマンドはその出力を\fI標準出力\fRに表示します。 .SH "オプション" -.LP -.RS 3 -.TP 3 -\-help \-\-help \-? -\f3javap\fP のヘルプメッセージを出力します。 -.TP 3 -\-version -バージョン情報を表示します。 -.TP 3 -\-l -行番号と局所変数テーブルを表示します。 -.TP 3 -\-public -public クラスおよびメンバーだけを表示します。 -.TP 3 -\-protected -protected および public のクラスとメンバーだけを表示します。 -.TP 3 -\-package -package、protected、および public のクラスとメンバーだけを表示します。これはデフォルトの設定です。 -.TP 3 -\-private \-p -すべてのクラスとメンバーを表示します。 -.TP 3 -\-Jflag -ランタイムシステムに直接 \f2flag\fP を渡します。使用例を次に示します。 -.nf -\f3 -.fl -javap \-J\-version -.fl -javap \-J\-Djava.security.manager \-J\-Djava.security.policy=MyPolicy MyClassName -.fl -\fP -.fi -.TP 3 -\-s -内部の型シグニチャーを出力します。 -.TP 3 -\-sysinfo -処理中のクラスのシステム情報 (パス、サイズ、日付、MD5 ハッシュ) を表示します。 -.TP 3 -\-constants -static final 定数を表示します。 -.TP 3 -\-c -クラスの各メソッドのために逆アセンブルされるコード、すなわち Java バイトコードから成る命令を表示します。これらは -.na -\f2「Java Virtual Machine Specification」\fP @ -.fi -http://java.sun.com/docs/books/vmspec/にドキュメント化されています。 -.TP 3 -\-verbose -メソッドのスタックサイズ、および \f2locals\fP と \f2args\fP の数を出力します。 -.TP 3 -\-classpath path -\f3javap\fP がクラスを探すために使用するパスを指定します。デフォルトまたは CLASSPATH 環境変数設定を上書きします。 -.TP 3 -\-bootclasspath path -ブートストラップクラスをロードするパスを指定します。ブートストラップクラスは、デフォルトでは \f2jre/lib/rt.jar\fP および他のいくつかの JAR ファイル にある、コア Java 2 プラットフォームを実装するクラスです。 -.TP 3 -\-extdirs dirs -インストールされた拡張機能を検索する場所をオーバーライドします。拡張機能は、デフォルトでは \f2java.ext.dirs\fP にあります。 +.PP +\-help, \-\-help, \-? +.RS 4 +\fIjavap\fRコマンドについてのヘルプ・メッセージを出力します。 .RE - -.LP -.SH "関連項目" -.LP -.LP -javac(1)、java(1)、jdb(1)、javah(1)、javadoc(1) -.LP +.PP +\-version +.RS 4 +リリース情報を出力します。 +.RE +.PP +\-l +.RS 4 +行番号とローカル変数表を出力します。 +.RE +.PP +\-public +.RS 4 +publicクラスおよびメンバーのみ表示します。 +.RE +.PP +\-protected +.RS 4 +protectedおよびpublicのクラスとメンバーのみを表示します。 +.RE +.PP +\-private, \-p +.RS 4 +すべてのクラスとメンバーを表示します。 +.RE +.PP +\-J\fIoption\fR +.RS 4 +指定されたオプションをJVMに渡します。次に例を示します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +javap \-J\-version +javap \-J\-Djava\&.security\&.manager \-J\-Djava\&.security\&.policy=MyPolicy MyClassName +.fi +.if n \{\ +.RE +.\} +JVMオプションの詳細は、コマンドのマニュアルを参照してください。 +.RE +.PP +\-s +.RS 4 +内部の型シグニチャを出力します。 +.RE +.PP +\-sysinfo +.RS 4 +処理中のクラスのシステム情報(パス、サイズ、日付、MD5ハッシュ)を表示します。 +.RE +.PP +\-constants +.RS 4 +\fIstatic final\fR定数を表示します。 +.RE +.PP +\-c +.RS 4 +クラスの各メソッドのために逆アセンブルされるコード、すなわちJavaバイトコードからなる命令を表示します。 +.RE +.PP +\-verbose +.RS 4 +メソッドのスタック・サイズ、localsとargumentsの数を出力します。 +.RE +.PP +\-classpath \fIpath\fR +.RS 4 +クラスを探すために\fIjavap\fRコマンドが使用するパスを指定します。デフォルトまたは\fICLASSPATH\fR環境変数の設定をオーバーライドします。 +.RE +.PP +\-bootclasspath \fIpath\fR +.RS 4 +ブートストラップ・クラスをロードするパスを指定します。ブートストラップ・クラスは、デフォルトでは\fIjre/lib/rt\&.jar\fRおよび他のいくつかのJARファイルにある、コアJavaプラットフォームを実装するクラスです。 +.RE +.PP +\-extdir \fIdirs\fR +.RS 4 +インストールされた拡張機能を検索する場所をオーバーライドします。拡張機能のデフォルト位置は\fIjava\&.ext\&.dirs\fRです。 +.RE +.SH "例" +.PP +次の\fIDocFooter\fRクラスをコンパイルします。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +import java\&.awt\&.*; +import java\&.applet\&.*; +public class DocFooter extends Applet { + String date; + String email; + + public void init() { + resize(500,100); + date = getParameter("LAST_UPDATED"); + email = getParameter("EMAIL"); + } + + public void paint(Graphics g) { + g\&.drawString(date + " by ",100, 15); + g\&.drawString(email,290,15); + } +} +.fi +.if n \{\ +.RE +.\} +.PP +\fIjavap DocFooter\&.class\fRコマンドからの出力は次を生成します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +Compiled from "DocFooter\&.java" +public class DocFooter extends java\&.applet\&.Applet { + java\&.lang\&.String date; + java\&.lang\&.String email; + public DocFooter(); + public void init(); + public void paint(java\&.awt\&.Graphics); +} +.fi +.if n \{\ +.RE +.\} +.PP +\fIjavap \-c DocFooter\&.class\fRコマンドからの出力は次を生成します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +Compiled from "DocFooter\&.java" +public class DocFooter extends java\&.applet\&.Applet { + java\&.lang\&.String date; + java\&.lang\&.String email; + + public DocFooter(); + Code: + 0: aload_0 + 1: invokespecial #1 // Method +java/applet/Applet\&."<init>":()V + 4: return + + public void init(); + Code: + 0: aload_0 + 1: sipush 500 + 4: bipush 100 + 6: invokevirtual #2 // Method resize:(II)V + 9: aload_0 + 10: aload_0 + 11: ldc #3 // String LAST_UPDATED + 13: invokevirtual #4 // Method + getParameter:(Ljava/lang/String;)Ljava/lang/String; + 16: putfield #5 // Field date:Ljava/lang/String; + 19: aload_0 + 20: aload_0 + 21: ldc #6 // String EMAIL + 23: invokevirtual #4 // Method + getParameter:(Ljava/lang/String;)Ljava/lang/String; + 26: putfield #7 // Field email:Ljava/lang/String; + 29: return + + public void paint(java\&.awt\&.Graphics); + Code: + 0: aload_1 + 1: new #8 // class java/lang/StringBuilder + 4: dup + 5: invokespecial #9 // Method + java/lang/StringBuilder\&."<init>":()V + 8: aload_0 + 9: getfield #5 // Field date:Ljava/lang/String; + 12: invokevirtual #10 // Method + java/lang/StringBuilder\&.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; + 15: ldc #11 // String by + 17: invokevirtual #10 // Method + java/lang/StringBuilder\&.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; + 20: invokevirtual #12 // Method + java/lang/StringBuilder\&.toString:()Ljava/lang/String; + 23: bipush 100 + 25: bipush 15 + 27: invokevirtual #13 // Method + java/awt/Graphics\&.drawString:(Ljava/lang/String;II)V + 30: aload_1 + 31: aload_0 + 32: getfield #7 // Field email:Ljava/lang/String; + 35: sipush 290 + 38: bipush 15 + 40: invokevirtual #13 // Method +java/awt/Graphics\&.drawString:(Ljava/lang/String;II)V + 43: return +} +.fi +.if n \{\ +.RE +.\} +.SH "関連項目" +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +javac(1) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +java(1) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +jdb(1) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +javah(1) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +javadoc(1) +.RE +.br +'pl 8.5i +'bp diff --git a/jdk/src/solaris/doc/sun/man/man1/ja/jcmd.1 b/jdk/src/solaris/doc/sun/man/man1/ja/jcmd.1 new file mode 100644 index 00000000000..d79de5a2d19 --- /dev/null +++ b/jdk/src/solaris/doc/sun/man/man1/ja/jcmd.1 @@ -0,0 +1,154 @@ +'\" t +.\" Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved. +.\" Title: jcmd +.\" Language: English +.\" Date: 2013年11月21日 +.\" SectDesc: トラブルシューティング・ツール +.\" Software: JDK 8 +.\" Arch: 汎用 +.\" +.\" 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. +.\" +.pl 99999 +.TH "jcmd" "1" "2013年11月21日" "JDK 8" "トラブルシューティング・ツール" +.\" ----------------------------------------------------------------- +.\" * Define some portability stuff +.\" ----------------------------------------------------------------- +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.\" http://bugs.debian.org/507673 +.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" ----------------------------------------------------------------- +.\" * set default formatting +.\" ----------------------------------------------------------------- +.\" disable hyphenation +.nh +.\" disable justification (adjust text to left margin only) +.ad l +.\" ----------------------------------------------------------------- +.\" * MAIN CONTENT STARTS HERE * +.\" ----------------------------------------------------------------- +.SH "NAME" +jcmd \- 実行中のJava仮想マシン(JVM)に診断コマンド・リクエストを送信します。 +.SH "概要" +.sp +.if n \{\ +.RS 4 +.\} +.nf +\fIjcmd\fR [\fI\-l\fR|\fI\-h\fR|\fI\-help\fR] +.fi +.if n \{\ +.RE +.\} +.sp +.if n \{\ +.RS 4 +.\} +.nf +\fIjcmd\fR \fIpid\fR|\fImain\-class\fR \fIPerfCounter\&.print\fR +.fi +.if n \{\ +.RE +.\} +.sp +.if n \{\ +.RS 4 +.\} +.nf +\fIjcmd\fR \fIpid\fR|\fImain\-class\fR \fI\-f\fR \fIfilename\fR +.fi +.if n \{\ +.RE +.\} +.sp +.if n \{\ +.RS 4 +.\} +.nf +\fIjcmd\fR \fIpid\fR|\fImain\-class\fR \fIcommand\fR[ \fIarguments\fR] +.fi +.if n \{\ +.RE +.\} +.SH "説明" +.PP +\fIjcmd\fRユーティリティは、JVMに診断コマンド・リクエストを送信するために使用されます。これはJVMが稼働しているのと同じマシンで使用し、JVMの起動に使用したものと同じ有効ユーザーおよびグループ識別子を持っている必要があります。 +.PP +\fB注意:\fR +リモート・マシンから、または別の識別子で診断コマンドを起動するには、\fIcom\&.sun\&.management\&.DiagnosticCommandMBean\fRインタフェースを使用できます。\fIDiagnosticCommandMBean\fRインタフェースの詳細は、http://download\&.java\&.net/jdk8/docs/jre/api/management/extension/com/sun/management/DiagnosticCommandMBean\&.htmlにあるAPIドキュメントを参照してください。 +.PP +\fIjcmd\fRを引数なしまたは\fI\- l\fRオプションを指定して実行した場合は、実行中のJavaプロセス識別子のリストが、メイン・クラスおよびプロセスの起動に使用されたコマンドライン引数とともに出力されます。\fI\-h\fRまたは\fI\-help\fRオプションを指定して\fIjcmd\fRを実行すると、ツールのヘルプ・メッセージが出力されます。 +.PP +プロセス識別子(\fIpid\fR)またはメイン・クラス(\fImain\-class\fR)を最初の引数として指定した場合、\fIjcmd\fRは、識別子を指定した場合はJavaプロセスに、メイン・クラスの名前を指定した場合はすべてのJavaプロセスに診断コマンド・リクエストを送信します。プロセス識別子として\fI0\fRを指定して、すべての使用可能なJavaプロセスに診断コマンド・リクエストを送信することもできます。診断コマンド・リクエストとして、次のいずれかを使用します。 +.PP +Perfcounter\&.print +.RS 4 +指定したJavaプロセスで使用可能なパフォーマンス・カウンタが出力されます。パフォーマンス・カウンタのリストはJavaプロセスによって異なる場合があります。 +.RE +.PP +\-f \fIfilename\fR +.RS 4 +診断コマンドを読み取り、指定したJavaプロセスに送信するファイルの名前。\fI\-f\fRオプションでのみ使用します。ファイル内の各コマンドは、1行で記述する必要があります。番号記号(\fI#\fR)で始まる行は無視されます。すべての行が読み取られるか、\fIstop\fRキーワードを含む行が読み取られると、ファイルの処理が終了します。 +.RE +.PP +\fIcommand\fR [\fIarguments\fR] +.RS 4 +指定されたJavaプロセスに送信するコマンド。指定したプロセスで使用できる診断コマンドのリストは、このプロセスに対して\fIhelp\fRコマンドを送信すれば表示されます。各診断コマンドに独自の引数セットがあります。コマンドの説明、構文および使用可能な引数のリストを表示するには、\fIhelp\fRコマンドの引数としてコマンド名を使用します。 +.sp +\fB注意:\fR +引数にスペースが含まれている場合は、一重引用符または二重引用符(\fI\*(Aq\fRまたは\fI"\fR)で囲む必要があります。加えて、オペレーティング・システム・シェルが引用符を処理しないように、バックスラッシュ(\fI\e\fR)で一重引用符または二重引用符をエスケープする必要があります。または、これらの引数を一重引用符で囲んでから、二重引用符で囲むこともできます(または二重引用符で囲んでから、一重引用符で囲む)。 +.RE +.SH "オプション" +.PP +各オプションは互いに排他的です。 +.PP +\-f \fIfilename\fR +.RS 4 +指定されたファイルからコマンドを読み取ります。このオプションは、最初の引数としてプロセス識別子またはメイン・クラスを指定する場合にのみ使用できます。ファイル内の各コマンドは、1行で記述する必要があります。番号記号(\fI#\fR)で始まる行は無視されます。すべての行が読み取られるか、\fIstop\fRキーワードを含む行が読み取られると、ファイルの処理が終了します。 +.RE +.PP +\-h, \-help +.RS 4 +ヘルプ・メッセージが出力されます。 +.RE +.PP +\-l +.RS 4 +実行中のJavaプロセス識別子のリストをメイン・クラスおよびコマンドライン引数とともに出力します。 +.RE +.SH "関連項目" +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +jps(1) +.RE +.br +'pl 8.5i +'bp diff --git a/jdk/src/solaris/doc/sun/man/man1/ja/jconsole.1 b/jdk/src/solaris/doc/sun/man/man1/ja/jconsole.1 index fc9c17c2a59..426fb365ba8 100644 --- a/jdk/src/solaris/doc/sun/man/man1/ja/jconsole.1 +++ b/jdk/src/solaris/doc/sun/man/man1/ja/jconsole.1 @@ -1,157 +1,156 @@ -." Copyright (c) 2004, 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. -." -.TH jconsole 1 "07 May 2011" - -.LP -.SH "名前" -jconsole \- Java 監視および管理コンソール -.LP -.RS 3 -.TP 2 -o -形式 -.TP 2 -o -パラメータ -.TP 2 -o -説明 -.TP 2 -o -オプション -.TP 2 -o -関連項目 -.RE - -.LP -.SH "形式" -.LP +'\" t +.\" Copyright (c) 2004, 2013, Oracle and/or its affiliates. All rights reserved. +.\" Title: jconsole +.\" Language: English +.\" Date: 2013年11月21日 +.\" SectDesc: Javaトラブルシューティング、プロファイリング、モニタリングおよび管理ツール +.\" Software: JDK 8 +.\" Arch: 汎用 +.\" +.\" 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. +.\" +.pl 99999 +.TH "jconsole" "1" "2013年11月21日" "JDK 8" "Javaトラブルシューティング、プロファイリング、モニタリン" +.\" ----------------------------------------------------------------- +.\" * Define some portability stuff +.\" ----------------------------------------------------------------- +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.\" http://bugs.debian.org/507673 +.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" ----------------------------------------------------------------- +.\" * set default formatting +.\" ----------------------------------------------------------------- +.\" disable hyphenation +.nh +.\" disable justification (adjust text to left margin only) +.ad l +.\" ----------------------------------------------------------------- +.\" * MAIN CONTENT STARTS HERE * +.\" ----------------------------------------------------------------- +.SH "NAME" +jconsole \- Javaアプリケーションを監視および管理するためのグラフィカル・コンソールを開始します。 +.SH "概要" +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -\fP\f3jconsole\fP [ \f2options\fP ] [ connection ... ] -.fl - -.fl +\fIjconsole\fR [ \fIoptions\fR ] [ connection \&.\&.\&. ] .fi - -.LP -.SH "パラメータ" -.LP -.RS 3 -.TP 3 -options -オプションを使用する場合、コマンド名の直後に記述してください。 -.TP 3 -connection = pid | host:port | jmxUrl -.RS 3 -.TP 2 -o -\f2pid\fPローカルの Java VM のプロセス ID。Java VM は、jconsole を実行しているユーザー ID と同じユーザー ID を使用して実行する必要があります。詳細については、 -.na -\f2「JMX 監視および管理」\fP @ -.fi -http://java.sun.com/javase/6/docs/technotes/guides/management/agent.htmlを参照してください。 -.TP 2 -o -\f2host\fP:\f2port\fP Java VM が実行しているホストシステムの名前と、JVM を起動したときにシステムプロパティー \f2com.sun.management.jmxremote.port\fP で指定したポート番号。詳細については、 -.na -\f2「JMX 監視および管理」\fP @ -.fi -http://java.sun.com/javase/6/docs/technotes/guides/management/agent.htmlを参照してください。 -.TP 2 -o -\f2jmxUrl\fP 接続先の JMX エージェントのアドレス。これについては、 -.na -\f2JMXServiceURL\fP @ -.fi -http://java.sun.com/javase/6/docs/api/javax/management/remote/JMXServiceURL.html を参照してください。 +.if n \{\ .RE +.\} +.PP +\fIoptions\fR +.RS 4 +コマンドライン・オプション。オプションを参照してください。 .RE - -.LP -.SH " 説明" -.LP -.LP -\f3jconsole\fP コマンドは、ローカルマシンまたはリモートマシン上の Java アプリケーションと仮想マシンの監視と管理を行うグラフィカルコンソールツールを起動します。 -.LP -.LP -Windows 上では、\f3jconsole\fP はコンソールウィンドウと関連付けられていません。ただし、なんらかの理由で \f3jconsole\fP コマンドが失敗すると、エラー情報を示すダイアログボックスが表示されます。 -.LP +.PP +connection = \fIpid\fR | \fIhost\fR:\fIport\fR | \fIjmxURL\fR +.RS 4 +\fIpid\fR値はローカルのJava仮想マシン(JVM)のプロセスIDです。JVMは\fIjconsole\fRコマンドを実行しているユーザーIDと同じユーザーIDで実行する必要があります。\fIhost:port\fR値はJVMが動作しているホスト・システムの名前と、JVMが開始したときにシステム・プロパティ\fIcom\&.sun\&.management\&.jmxremote\&.port\fRで指定したポート番号です。\fIjmxUrl\fR値は、JMXServiceURLで記述されている、接続されるJMXエージェントのアドレスです。 +.sp +\fIconnection\fRパラメータの詳細は、JMXテクノロジを使用したモニタリングおよび管理 +(http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/management/agent\&.html)を参照してください +.sp +\fIJMXServiceURL\fRクラスの説明( +http://docs\&.oracle\&.com/javase/8/docs/api/javax/management/remote/JMXServiceURL\&.html)も参照してください +.RE +.SH "説明" +.PP +\fIjconsole\fRコマンドは、ローカル・マシンまたはリモート・マシン上のJavaアプリケーションと仮想マシンの監視と管理を行うグラフィカル・コンソール・ツールを起動します。 +.PP +Windows上では、\fIjconsole\fRコマンドはコンソール・ウィンドウと関連付けられていません。ただし、\fIjconsole\fRコマンドが失敗すると、エラー情報を示すダイアログ・ボックスが表示されます。 .SH "オプション" -.LP -.RS 3 -.TP 3 -\-interval=n -更新間隔を \f2n\fP 秒に設定します (デフォルトは 4 秒)。 -.TP 3 -\-notile -最初にウィンドウをタイリングしません (複数の接続のため)。 -.TP 3 -\-pluginpath plugins -JConsole プラグインの検索先となるディレクトリまたは JAR ファイルのリストを指定します。\f2plugins\fP パスには、次の名前のプロバイダ構成ファイルを含めてください。 -.br -.nf -\f3 -.fl - META\-INF/services/com.sun.tools.jconsole.JConsolePlugin -.fl -\fP -.fi -.LP -これには、 -.na -\f2com.sun.tools.jconsole.JConsolePlugin\fP @ -.fi -http://java.sun.com/javase/6/docs/jdk/api/jconsole/spec/com/sun/tools/jconsole/JConsolePlugin.html クラスを実装するクラスの完全修飾クラス名を指定する行が、プラグインごとに 1 行ずつ含まれています。 -.TP 3 -\-version -バージョン情報を出力して終了します。 -.TP 3 -\-help -ヘルプメッセージを出力して終了します。 -.TP 3 -\-J<flag> -jconsole が実行されている Java 仮想マシンに <flag> を渡します。 +.PP +\-interval\fI=n\fR +.RS 4 +更新間隔を\fIn\fR秒に設定します(デフォルトは4秒)。 +.RE +.PP +\-notile +.RS 4 +最初にウィンドウをタイリングしません(複数接続の場合)。 +.RE +.PP +\-pluginpath \fIplugins\fR +.RS 4 +\fIJConsole\fRプラグインを検索するディレクトリまたはJARファイルのリストを指定します。\fIplugins\fRパスには\fIMETA\-INF/services/com\&.sun\&.tools\&.jconsole\&.JConsolePlugin\fRという名前のプロバイダ構成ファイルを含んでいる必要があり、これにはプラグインごとに1行が含まれています。その行は\fIcom\&.sun\&.tools\&.jconsole\&.JConsolePlugin\fRクラスを実装しているクラスの完全修飾クラス名を指定します。 +.RE +.PP +\-version +.RS 4 +リリース情報を表示して終了します。 +.RE +.PP +\-help +.RS 4 +ヘルプ・メッセージを表示します。 +.RE +.PP +\-J\fIflag\fR +.RS 4 +\fIjconsole\fRコマンドを実行したJVMに\fIflag\fRを渡します。 .RE - -.LP .SH "関連項目" -.LP -.RS 3 -.TP 2 -o -.na -\f2JConsole の使用\fP @ -.fi -http://java.sun.com/javase/6/docs/technotes/guides/management/jconsole.html -.TP 2 -o -.na -\f2「Java プラットフォームの監視および管理」\fP @ -.fi -http://java.sun.com/javase/6/docs/technotes/guides/management/index.html +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +JConsoleの使用 +(http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/management/jconsole\&.html) .RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +JMXテクノロジを使用したモニタリングおよび管理 -.LP - +(http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/management/agent\&.html) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fIJMXServiceURL\fRクラスの説明( +http://docs\&.oracle\&.com/javase/8/docs/api/javax/management/remote/JMXServiceURL\&.html) +.RE +.br +'pl 8.5i +'bp diff --git a/jdk/src/solaris/doc/sun/man/man1/ja/jdb.1 b/jdk/src/solaris/doc/sun/man/man1/ja/jdb.1 index 4904c9d8eab..f7bcabdec2f 100644 --- a/jdk/src/solaris/doc/sun/man/man1/ja/jdb.1 +++ b/jdk/src/solaris/doc/sun/man/man1/ja/jdb.1 @@ -1,326 +1,382 @@ -." Copyright (c) 1995, 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. -." -.TH jdb 1 "07 May 2011" - -.LP -.SH "名前" -jdb \- Java デバッガ -.LP -.LP -\f3jdb\fP は、Java 言語プログラムのバグを見つけて修正するために使用するツールです。 -.LP -.SH "形式" -.LP +'\" t +.\" Copyright (c) 1995, 2013, Oracle and/or its affiliates. All rights reserved. +.\" Title: jdb +.\" Language: English +.\" Date: 2013年11月21日 +.\" SectDesc: 基本ツール +.\" Software: JDK 8 +.\" Arch: 汎用 +.\" +.\" 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. +.\" +.pl 99999 +.TH "jdb" "1" "2013年11月21日" "JDK 8" "基本ツール" +.\" ----------------------------------------------------------------- +.\" * Define some portability stuff +.\" ----------------------------------------------------------------- +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.\" http://bugs.debian.org/507673 +.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" ----------------------------------------------------------------- +.\" * set default formatting +.\" ----------------------------------------------------------------- +.\" disable hyphenation +.nh +.\" disable justification (adjust text to left margin only) +.ad l +.\" ----------------------------------------------------------------- +.\" * MAIN CONTENT STARTS HERE * +.\" ----------------------------------------------------------------- +.SH "NAME" +jdb \- Javaプラットフォーム・プログラムの不具合を検出および修正します。 +.SH "概要" +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -\fP\f3jdb\fP [ options ] [ class ] [ arguments ] -.fl +\fIjdb\fR [\fIoptions\fR] [\fIclassname\fR] [\fIarguments\fR] .fi - -.LP -.RS 3 -.TP 3 -options -次に示すコマンド行オプション -.TP 3 -class -デバッグを開始するクラスの名前 -.TP 3 -arguments -class の \f2main()\fP メソッドに渡す \f2引数\fP +.if n \{\ .RE - -.LP -.SH " 説明" -.LP -.LP -Java デバッガ \f3jdb\fP は、Java クラス用の簡単なコマンド行デバッガです。 -.na -\f2Java Platform Debugger Architecture\fP @ -.fi -http://java.sun.com/javase/6/docs/technotes/guides/jpda/index.html を視覚的に実行し、ローカルまたはリモートの Java Virtual Machine の検査とデバッグを行うことができます。 -.LP -.SS -jdb セッションの開始 -.LP -.LP -jdb セッションを開始するにはさまざまな方法があります。もっとも頻繁に使われるのは、デバッグするアプリケーションのメインクラスを使用して、\f3jdb\fP から新しい Java 仮想マシン (VM) を起動する方法です。コマンド行で、\f3java\fP の代わりに \f3jdb\fP コマンドを入力します。たとえば、アプリケーションのメインクラスが MyClass の場合は、JDB 環境でデバッグするときに次のコマンドを使用します。 -.LP +.\} +.PP +\fIoptions\fR +.RS 4 +コマンドライン・オプション。オプションを参照してください。 +.RE +.PP +\fIclass\fRname +.RS 4 +デバッグするメイン・クラスの名前。 +.RE +.PP +\fIarguments\fR +.RS 4 +classの\fImain()\fRメソッドに渡す引数。 +.RE +.SH "説明" +.PP +Javaデバッガ(JDB)は、Javaクラス用の簡単なコマンドライン・デバッガです。\fIjdb\fRコマンドとそのオプションはJDBを呼び出します。\fIjdb\fRコマンドは、JDBA (Java Platform Debugger Architecture)を視覚的に実行し、ローカルまたはリモートのJava仮想マシン(JVM)の検査とデバッグを行うことができます。Java Platform Debugger Architecture (JDBA) +(http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/jpda/index\&.html)を参照してください。 +.SS "JDBセッションの開始" +.PP +JDBセッションを開始するには様々な方法があります。最も頻繁に使用されるのは、デバッグするアプリケーションのメイン・クラスを使用して、JDBから新しいJVMを起動する方法です。コマンドラインで、\fIjava\fRコマンドのかわりに\fIjdb\fRコマンドを入力します。たとえば、アプリケーションのメイン・クラスが\fIMyClass\fRの場合は、JDB環境でデバッグするときに次のコマンドを使用します。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl - % jdb MyClass -.fl -\fP +jdb MyClass .fi - -.LP -.LP -この方法で起動すると、\f3jdb\fP は、指定されたパラメータを使って 2 つ目の Java VM を呼び出します。次に、指定されたクラスをロードして、クラスの最初の命令を実行する前に VM を停止させます。 -.LP -.LP -\f3jdb\fP のもう 1 つの使用方法は、すでに起動している Java VM に jdb を接続することです。jdb が接続する VM を、その実行中に起動するための構文を次に示します。これは、インプロセスデバッグ用ライブラリをロードし、接続の種類を指定します。 -.LP +.if n \{\ +.RE +.\} +.PP +この方法で起動すると、\fIjdb\fRコマンドは、指定されたパラメータを使用して2つ目のJVMを呼び出します。次に、指定されたクラスをロードして、クラスの最初の命令を実行する前にJVMを停止させます。 +.PP +\fIjdb\fRコマンドのもう1つの使用方法は、すでに実行中のJVMにjdbを接続することです。\fIjdb\fRコマンドが接続するVMを、その実行中に起動するための構文を次に示します。これは、インプロセス・デバッグ用ライブラリをロードし、接続の種類を指定します。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -\-agentlib:jdwp=transport=dt_socket,server=y,suspend=n -.fl -\fP +java \-agentlib:jdwp=transport=dt_socket,server=y,suspend=n MyClass .fi - -.LP -.LP -たとえば、次のコマンドは、MyClass アプリケーションを実行して、\f3jdb\fP があとでそのアプリケーションに接続できるようにします。 -.LP +.if n \{\ +.RE +.\} +.PP +次のコマンドを使用して、\fIjdb\fRコマンドをJVMに接続できます。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl - % java \-agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=n MyClass -.fl -\fP +jdb \-attach 8000 .fi - -.LP -.LP -次のコマンドを使用して、\f3jdb\fP を VM に接続できます。 -.LP +.if n \{\ +.RE +.\} +.PP +この場合、\fIjdb\fRコマンドは新しいJVMを起動するかわりに既存のJVMに接続されるため、\fIjdb\fRコマンドラインに\fIMyClass\fR引数は指定しません。 +.PP +デバッガをJVMに接続するには他にも様々な方法があり、すべて\fIjdb\fRコマンドでサポートされています。接続オプションについては、Java Platform Debugger Architectureのドキュメントを参照してください。 +.SS "基本jdbコマンド" +.PP +基本的な\fIjdb\fRコマンドの一覧を示します。JDBがサポートするコマンドはこれ以外にもあり、それらは\fI\-help\fRオプションを使用して表示できます。 +.PP +helpまたは? +.RS 4 +\fIhelp\fRまたは\fI?\fRコマンドは、認識されたコマンドのリストに簡潔な説明を付けて表示します。 +.RE +.PP +run +.RS 4 +JDBを起動してブレークポイントを設定したあとに、\fIrun\fRコマンドを使用して、デバッグするアプリケーションの実行を開始できます。\fIrun\fRコマンドは、既存のVMに接続している場合とは異なり、デバッグするアプリケーションが\fIjdb\fRから起動したときにのみ使用できます。 +.RE +.PP +cont +.RS 4 +ブレークポイント、例外、またはステップ実行の後で、デバッグするアプリケーションの実行を継続します。 +.RE +.PP +print +.RS 4 +Javaオブジェクトおよびプリミティブ値を表示します。プリミティブ型の変数またはフィールドの場合には、実際の値が出力されます。オブジェクトの場合には、短い説明が出力されます。オブジェクトの詳細を取得する方法を探すには、dumpコマンドを参照してください。 +.sp +\fB注意:\fR +ローカル変数を表示するには、含んでいるクラスが\fIjavac \-g\fRオプションを使用してコンパイルされている必要があります。 +.sp +\fIprint\fRコマンドは、次に示すような、メソッド呼出しを使用したものなど、多くの簡単なJava式をサポートします。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl - % jdb \-attach 8000 -.fl -\fP +print MyClass\&.myStaticField +print myObj\&.myInstanceField +print i + j + k (i, j, k are primities and either fields or local variables) +print myObj\&.myMethod() (if myMethod returns a non\-null) +print new java\&.lang\&.String("Hello")\&.length() .fi - -.LP -.LP -この場合、\f3jdb\fP は新しい VM を起動する代わりに既存の VM に接続されるため、\f3jdb\fP コマンド行には「MyClass」は指定しません。 -.LP -.LP -デバッガを VM に接続するにはほかにもさまざまな方法があり、すべて \f3jdb\fP でサポートされています。接続オプションについては、Java Platform Debugger Architecture の -.na -\f2ドキュメント\fP @ -.fi -http://java.sun.com/javase/6/docs/technotes/guides/jpda/conninv.htmlを参照してください。\f3jdb\fP で使用するために J2SE 1.4.2 以前の VM を起動する方法については、 -.na -\f21.4.2 のドキュメント\fP @ -.fi -http://java.sun.com/j2se/1.4.2/docs/guide/jpda/conninv.htmlを参照してください。 -.LP -.SS -基本 jdb コマンド -.LP -.LP -基本的な \f3jdb\fP コマンドの一覧を示します。Java デバッガがサポートするコマンドはこれ以外にもあり、それらは \f3jdb\fP の \f2help\fP コマンドを使用して表示できます。 -.LP -.RS 3 -.TP 3 -help または ? -もっとも重要な \f3jdb\fP コマンド \f2help\fP は、認識されたコマンドのリストに簡潔な説明を付けて表示します。 -.TP 3 -run -\f3jdb\fP を起動して必要なブレークポイントを設定したあとに、このコマンドを使用して、デバッグするアプリケーションの実行を開始できます。このコマンドは、既存の VM に接続している場合とは異なり、デバッグするアプリケーションが \f3jdb\fP から起動したときにだけ使用できます。 -.TP 3 -cont -ブレークポイント、例外、またはステップ実行のあとで、デバッグするアプリケーションの実行を継続します。 -.TP 3 -print -Java オブジェクトおよびプリミティブ値を表示します。プリミティブ型の変数またはフィールドの場合には、実際の値が出力されます。オブジェクトの場合には、短い説明が出力されます。オブジェクトについては、以降の \f2dump\fP コマンドの説明を参照してください。 -.LP -\f2注: 局所変数を表示するには、その変数を含むクラスが \fP\f2javac(1)\fP\f2 \fP\f2\-g\fP オプションでコンパイルされている必要があります。 -.LP -\f2print\fP では、メソッドの呼び出しを含む多数の簡単な Java 式がサポートされています。次に例を示します。 -.RS 3 -.TP 2 -o -\f2print MyClass.myStaticField\fP -.TP 2 -o -\f2print myObj.myInstanceField\fP -.TP 2 -o -\f2print i + j + k\fP (i、j、および k はプリミティブであり、フィールドまたは局所変数のいずれか) -.TP 2 -o -\f2print myObj.myMethod()\fP (myMethod が null 以外を返す場合) -.TP 2 -o -\f2print new java.lang.String("Hello").length()\fP +.if n \{\ .RE -.TP 3 -dump -プリミティブ値の場合には、このコマンドは \f2print\fP と同じです。オブジェクトの場合には、オブジェクト内に定義されている各フィールドの現在の値が出力されます。static フィールドと instance フィールドが出力されます。 -.LP -\f2dump\fP コマンドでは、\f2print\fP コマンドと同じ式がサポートされます。 -.TP 3 -threads -現在実行中のスレッドを一覧表示します。スレッドごとに、名前と現在の状態、およびほかのコマンドに使用できるインデックスが出力されます。次に例を示します。 +.\} +.RE +.PP +dump +.RS 4 +プリミティブ値の場合、\fIdump\fRコマンドは\fIprint\fRコマンドと同一です。オブジェクトの場合、\fIdump\fRコマンドでは、オブジェクト内に定義されている各フィールドの現在の値が出力されます。staticフィールドとinstanceフィールドが出力されます。\fIdump\fRコマンドでは、\fIprint\fRコマンドと同じ式がサポートされます。 +.RE +.PP +threads +.RS 4 +現在実行中のスレッドを一覧表示します。スレッドごとに、名前と現在の状態、および他のコマンドに使用できるインデックスが出力されます。この例では、スレッド・インデックスは4であり、スレッドは\fIjava\&.lang\&.Thread\fRのインスタンスで、スレッドの名前は\fImain\fRであり、現在実行中です。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -4. (java.lang.Thread)0x1 main running -.fl -\fP +4\&. (java\&.lang\&.Thread)0x1 main running .fi -この例では、スレッドインデックスは 4 であり、スレッドは java.lang.Thread のインスタンスです。スレッドの名前は「main」であり、現在実行中です。 -.TP 3 -thread -現在のスレッドにするスレッドを選択します。多くの \f3jdb\fP コマンドは、現在のスレッドの設定に基づいて実行されます。スレッドは、\f2threads\fP コマンドで説明したスレッドインデックスとともに指定します。 -.TP 3 -where -\f2引数を指定しないで\fP where を実行すると、現在のスレッドのスタックがダンプされます。 \f2where all\fP コマンドは、現在のスレッドグループにあるスレッドのスタックをすべてダンプします。 \f2where\fP \f2threadindex\fP は、指定されたスレッドのスタックをダンプします。 -.LP -現在のスレッドが (ブレークポイントか \f2suspend\fP コマンドによって) 中断している場合は、局所変数とフィールドは \f2print\fP コマンドと \f2dump\fP コマンドで表示できます。\f2up\fP コマンドと \f2down\fP コマンドで、どのスタックフレームをカレントにするかを選ぶことができます。 +.if n \{\ .RE - -.LP -.SS -ブレークポイント -.LP -.LP -ブレークポイントは、行番号またはメソッドの最初の命令で \f3jdb\fP に設定できます。次に例を示します。 -.LP -.RS 3 -.TP 2 -o -\f2stop at MyClass:22\fP (MyClass が含まれるソースファイルの 22 行目の最初の命令にブレークポイントを設定) -.TP 2 -o -\f2stop in java.lang.String.length\fP (\f2java.lang.String.length\fP メソッドの最初にブレークポイントを設定) -.TP 2 -o -\f2stop in MyClass.<init>\fP (<init> は MyClass コンストラクタを識別) -.TP 2 -o -\f2stop in MyClass.<clinit>\fP (<clinit> は MyClass の静的初期化コードを識別) +.\} .RE - -.LP -.LP -メソッドがオーバーロードされている場合には、メソッドの引数の型も指定して、ブレークポイントに対して適切なメソッドが選択されるようにしなければなりません。たとえば、「\f2MyClass.myMethod(int,java.lang.String)\fP」または「\f2MyClass.myMethod()\fP」と指定します。 -.LP -.LP -\f2clear\fP コマンドは、「\f2clear\ MyClass:45\fP」のような構文を使用してブレークポイントを削除します。\f2clear\fP を使用するか、引数を指定しないでコマンドを使用すると、現在設定されているすべてのブレークポイントが表示されます。\f2cont\fP コマンドは実行を継続します。 -.LP -.SS -ステップ実行 -.LP -.LP -\f2step\fP コマンドは、現在のスタックフレームまたは呼び出されたメソッド内で、次の行を実行します。\f2next\fP コマンドは、現在のスタックフレームの次の行を実行します。 -.LP -.SS -例外 -.LP -.LP -スローしているスレッドの呼び出しスタック上のどこにも catch 文がない場合に例外が発生すると、VM は通常、例外トレースを出力して終了します。ただし、\f3jdb\fP 環境で実行している場合は、例外が発生すると \f3jdb\fP に制御が戻ります。次に、\f3jdb\fP を使用して例外の原因を診断します。 -.LP -.LP -たとえば、「\f2catch java.io.FileNotFoundException\fP」または「\f2catch mypackage.BigTroubleException\fP」のように \f2catch\fP コマンドを使用すると、デバッグされたアプリケーションは、ほかの例外がスローされたときに停止します。例外が特定のクラス (またはサブクラス) のインスタンスの場合は、アプリケーションは例外がスローされた場所で停止します。 -.LP -.LP -\f2ignore\fP コマンドを使うと、以前の \f2catch\fP コマンドの効果が無効になります。 -.LP -.LP -\f2注: \fP\f2ignore\fP コマンドでは、デバッグされる VM は例外を無視せず、デバッガだけが例外を無視します。 -.LP -.SH "コマンド行オプション" -.LP -.LP -コマンド行で Java アプリケーション起動ツールの代わりに \f3jdb\fP を使用する場合、\f3jdb\fP は、\f2\-D\fP、\f2\-classpath\fP、\f2\-X<option>\fP など、java コマンドと同じ数のオプションを受け入れます。 -.LP -.LP -\f3jdb\fP は、そのほかに次のオプションを受け入れます。 -.LP -.RS 3 -.TP 3 -\-help -ヘルプメッセージを表示します。 -.TP 3 -\-sourcepath <dir1:dir2:...> -指定されたパスを使用して、ソースファイルを検索します。このオプションが指定されていない場合は、デフォルトパスの「.」が使われます。 -.TP 3 -\-attach <address> -デフォルトの接続機構を使用して、すでに実行中の VM にデバッガを接続します。 -.TP 3 -\-listen <address> -実行中の VM が標準のコネクタを使って指定されたアドレスに接続するのを待機します。 -.TP 3 -\-listenany -実行中の VM が標準のコネクタを使って利用可能な任意のアドレスに接続するのを待機します。 -.TP 3 -\-launch -デバッグするアプリケーションを jdb の起動後ただちに起動します。このオプションによって、\f2run\fP コマンドを使用する必要がなくなります。デバッグするアプリケーションは、起動後、初期アプリケーションクラスがロードされる直前に停止します。その時点で、必要なブレークポイントを設定し、\f2cont\fP を使用して実行を継続できます。 -.TP 3 -\-listconnectors -この VM で利用できるコネクタを一覧表示します。 -.TP 3 -\-connect <connector\-name>:<name1>=<value1>,... -一覧表示された引数の値と指定のコネクタを使ってターゲット VM に接続します。 -.TP 3 -\-dbgtrace [flags] -jdb のデバッグ情報を出力します。 -.TP 3 -\-tclient -Java HotSpot(tm) VM (クライアント) 内でアプリケーションを実行します。 -.TP 3 -\-tserver -Java HotSpot(tm) VM (サーバー) 内でアプリケーションを実行します。 -.TP 3 -\-Joption -jdb の実行に使用される Java 仮想マシンに \f2option\fP を渡します。(アプリケーション Java 仮想マシンに対するオプションは、\f3run\fP コマンドに渡される)。たとえば、\f3\-J\-Xms48m\fP と指定すると、スタートアップメモリーは 48M バイトに設定されます。 +.PP +thread +.RS 4 +現在のスレッドにするスレッドを選択します。多くの\fIjdb\fRコマンドは、現在のスレッドの設定に基づいて実行されます。スレッドは、threadsコマンドで説明したスレッド・インデックスとともに指定します。 .RE - -.LP -.LP -デバッガとデバッグを行う VM を接続するための代替機構に対して、その他のオプションがサポートされています。その他の接続オプションについては、Java Platform Debugger Architecture の -.na -\f2ドキュメント\fP @ -.fi -http://java.sun.com/javase/6/docs/technotes/guides/jpda/conninv.htmlを参照してください。 -.LP -.SS -デバッグ対象のプロセスに転送されるオプション -.LP -.RS 3 -.TP 3 -\-v \-verbose[:class|gc|jni] -冗長モードにします。 -.TP 3 -\-D<name>=<value> -システムプロパティーを設定します。 -.TP 3 -\-classpath <directories separated by ":"> -クラスを検索するディレクトリを一覧表示します。 -.TP 3 -\-X<option> -非標準ターゲット VM オプションです。 +.PP +where +.RS 4 +引数を指定しないで\fIwhere\fRコマンドを実行すると、現在のスレッドのスタックがダンプされます。\fIwhere\fR +\fIall\fRコマンドは、現在のスレッド・グループにあるスレッドのスタックをすべてダンプします。\fIwhere\fR +\fIthreadindex\fRコマンドは、指定されたスレッドのスタックをダンプします。 +.sp +現在のスレッドが(ブレークポイントか\fIsuspend\fRコマンドによって)中断している場合は、ローカル変数とフィールドは\fIprint\fRコマンドと\fIdump\fRコマンドで表示できます。\fIup\fRコマンドと\fIdown\fRコマンドで、どのスタック・フレームを現在のスタック・フレームにするかを選ぶことができます。 +.RE +.SS "ブレークポイント" +.PP +ブレークポイントは、行番号またはメソッドの最初の命令でJDBに設定できます。次に例を示します。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +コマンド\fIstop at MyClass:22\fRは、\fIMyClass\fRが含まれるソース・ファイルの22行目の最初の命令にブレークポイントを設定します。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +コマンド\fIstop in java\&.lang\&.String\&.length\fRは、メソッド\fIjava\&.lang\&.String\&.length\fRの先頭にブレークポイントを設定します。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +コマンド\fIstop in MyClass\&.<clinit>\fRは、\fI<clinit>\fRを使用して\fIMyClass\fRの静的初期化コードを特定します。 +.RE +.PP +メソッドがオーバーロードされている場合には、メソッドの引数の型も指定して、ブレークポイントに対して適切なメソッドが選択されるようにする必要があります。たとえば、\fIMyClass\&.myMethod(int,java\&.lang\&.String)\fRまたは\fIMyClass\&.myMethod()\fRと指定します。 +.PP +\fIclear\fRコマンドは、\fIclear MyClass:45\fRのような構文を使用してブレークポイントを削除します。\fIclear\fRを使用するか、引数を指定しないで\fIstop\fRコマンドを使用すると、現在設定されているすべてのブレークポイントが表示されます。\fIcont\fRコマンドは実行を継続します。 +.SS "ステップ実行" +.PP +\fIstep\fRコマンドは、現在のスタック・フレームまたは呼び出されたメソッド内で、次の行を実行します。\fInext\fRコマンドは、現在のスタック・フレームの次の行を実行します。 +.SS "例外" +.PP +スローしているスレッドの呼出しスタック上のどこにも\fIcatch\fR文がない場合に例外が発生すると、JVMは通常、例外トレースを出力して終了します。ただし、JDB環境で実行している場合は、違反のスロー時にJDBに制御が戻ります。次に、\fIjdb\fRコマンドを使用して例外の原因を診断します。 +.PP +たとえば、\fIcatch java\&.io\&.FileNotFoundException\fRまたは\fIcatch\fR +\fImypackage\&.BigTroubleException\fRのように\fIcatch\fRコマンドを使用すると、デバッグされたアプリケーションは、他の例外がスローされたときに停止します。例外が特定のクラスまたはサブクラスのインスタンスの場合は、アプリケーションは例外がスローされた場所で停止します。 +.PP +\fIignore\fRコマンドを使用すると、以前の\fIcatch\fRコマンドの効果が無効になります。\fIignore\fRコマンドでは、デバッグされるJVMは特定の例外を無視せず、デバッガのみを無視します。 +.SH "オプション" +.PP +コマンドラインで\fIjava\fRコマンドのかわりに\fIjdb\fRコマンドを使用する場合、\fIjdb\fRコマンドは、\fI\-D\fR、\fI\-classpath\fR、\fI\-X\fRなど、\fIjava\fRコマンドと同じ数のオプションを受け入れます。\fIjdb\fRコマンドは、その他に次のリストにあるオプションを受け入れます。 +.PP +デバッグを行うJVMにデバッガを接続するための代替機構を提供するために、その他のオプションがサポートされています。これらの接続の代替に関する詳細なドキュメントは、Java Platform Debugger Architecture (JPDA) +(http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/jpda/index\&.html)を参照してください +.PP +\-help +.RS 4 +ヘルプ・メッセージを表示します。 +.RE +.PP +\-sourcepath \fIdir1:dir2: \&. \&. \&.\fR +.RS 4 +指定されたパスを使用して、ソース・ファイルを検索します。このオプションが指定されていない場合は、デフォルト・パスのドット(\&.)が使用されます。 +.RE +.PP +\-attach \fIaddress\fR +.RS 4 +デフォルトの接続機構を使用して、実行中のJVMにデバッガを接続します。 +.RE +.PP +\-listen \fIaddress\fR +.RS 4 +実行中のJVMが標準のコネクタを使用して指定されたアドレスに接続するのを待機します。 +.RE +.PP +\-launch +.RS 4 +デバッグするアプリケーションをJDBの起動後ただちに起動します。\fI\-launch\fRオプションにより、\fIrun\fRコマンドが必要なくなります。デバッグするアプリケーションは、起動後、初期アプリケーション・クラスがロードされる直前に停止します。その時点で、必要なブレークポイントを設定し、\fIcont\fRコマンドを使用して実行を継続できます。 +.RE +.PP +\-listconnectors +.RS 4 +このJVMで利用できるコネクタを一覧表示します。 +.RE +.PP +\-connect connector\-name:\fIname1=value1\fR +.RS 4 +一覧表示された引数の値と指定のコネクタを使用してターゲットJVMに接続します。 +.RE +.PP +\-dbgtrace [\fIflags\fR] +.RS 4 +\fIjdb\fRコマンドのデバッグの情報を出力します。 +.RE +.PP +\-tclient +.RS 4 +Java HotSpot VMクライアント内でアプリケーションを実行します。 +.RE +.PP +\-tserver +.RS 4 +Java HotSpot VMサーバー内でアプリケーションを実行します。 +.RE +.PP +\-J\fIoption\fR +.RS 4 +JVMに\fIoption\fRを渡します。optionには、Javaアプリケーション起動ツールのリファレンス・ページに記載されているオプションを1つ指定します。たとえば、\fI\-J\-Xms48m\fRと指定すると、スタートアップ・メモリーは48MBに設定されます。java(1)を参照してください。 +.RE +.SH "デバッグ対象のプロセスに転送されるオプション" +.PP +\-v \-verbose[:\fIclass\fR|gc|jni] +.RS 4 +冗長モードにします。 +.RE +.PP +\-D\fIname\fR=\fIvalue\fR +.RS 4 +システム・プロパティを設定します。 +.RE +.PP +\-classpath \fIdir\fR +.RS 4 +クラスを検索するための、コロンで区切って指定されたディレクトリのリスト。 +.RE +.PP +\-X\fIoption\fR +.RS 4 +非標準ターゲットJVMオプションです。 .RE - -.LP .SH "関連項目" -.LP -.LP -javac(1)、java(1)、javah(1)、javap(1)、javadoc(1) -.LP - +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +javac(1) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +java(1) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +javah(1) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +javap(1) +.RE +.br +'pl 8.5i +'bp diff --git a/jdk/src/solaris/doc/sun/man/man1/ja/jdeps.1 b/jdk/src/solaris/doc/sun/man/man1/ja/jdeps.1 new file mode 100644 index 00000000000..9ab6f666e0c --- /dev/null +++ b/jdk/src/solaris/doc/sun/man/man1/ja/jdeps.1 @@ -0,0 +1,367 @@ +'\" t +.\" Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. +.\" Title: jdeps +.\" Language: English +.\" Date: 2013年11月21日 +.\" SectDesc: 基本ツール +.\" Software: JDK 8 +.\" Arch: 汎用 +.\" +.\" 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. +.\" +.pl 99999 +.TH "jdeps" "1" "2013年11月21日" "JDK 8" "基本ツール" +.\" ----------------------------------------------------------------- +.\" * Define some portability stuff +.\" ----------------------------------------------------------------- +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.\" http://bugs.debian.org/507673 +.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" ----------------------------------------------------------------- +.\" * set default formatting +.\" ----------------------------------------------------------------- +.\" disable hyphenation +.nh +.\" disable justification (adjust text to left margin only) +.ad l +.\" ----------------------------------------------------------------- +.\" * MAIN CONTENT STARTS HERE * +.\" ----------------------------------------------------------------- +.SH "NAME" +jdeps \- Javaクラス依存性アナライザ。 +.SH "概要" +.sp +.if n \{\ +.RS 4 +.\} +.nf +\fIjdeps\fR [\fIoptions\fR] \fIclasses\fR \&.\&.\&. +.fi +.if n \{\ +.RE +.\} +.PP +\fIoptions\fR +.RS 4 +コマンドライン・オプション。オプションを参照してください。 +.RE +.PP +\fIclasses\fR +.RS 4 +分析するクラスの名前。クラス・パスで検出できるクラスを、ファイル名、ディレクトリまたはJARファイルで指定できます。 +.RE +.SH "説明" +.PP +\fIjdeps\fRコマンドは、Javaクラス・ファイルのパッケージレベルまたはクラスレベルの依存性を示します。入力クラスには、\fI\&.class\fRファイルのパス名、ディレクトリ、JARファイル、またはすべてのクラス・ファイルを分析するための完全修飾クラス名を指定できます。オプションにより出力が決定します。デフォルトでは、\fIjdeps\fRはシステム出力に依存関係を出力します。DOT言語で依存関係を生成できます(\fI\-dotoutput\fRオプションを参照)。 +.SH "オプション" +.PP +\-dotoutput <\fIdir\fR> +.RS 4 +DOTファイル出力の宛先ディレクトリ。指定した場合は\fIjdeps\fRは<\fIarchive\-file\-name\fR>\&.dotという名前の分析済みアーカイブごとに依存関係をリストする1つのdotファイルを生成し、アーカイブ間の依存関係をリストするsummary\&.dotという名前のサマリー・ファイルも生成します。 +.RE +.PP +\-s, \-summary +.RS 4 +依存関係のサマリーのみを出力します。 +.RE +.PP +\-v, \-verbose +.RS 4 +すべてのクラスレベルの依存関係を出力します。 +.RE +.PP +\-verbose:package +.RS 4 +同じアーカイブ内の依存関係を除き、パッケージレベルの依存関係を出力します。 +.RE +.PP +\-verbose:class +.RS 4 +同じアーカイブ内の依存関係を除き、クラスレベルの依存関係を出力します。 +.RE +.PP +\-cp <\fIpath\fR>, \-classpath <\fIpath\fR> +.RS 4 +クラス・ファイルの検索場所を指定します。 +.sp +Setting the Class Path も参照してください。 +.RE +.PP +\-p <\fIpkg name\fR>, \-package <\fIpkg name\fR> +.RS 4 +指定したパッケージの依存関係を検出します。異なるパッケージに対してこのオプションを複数回指定できます。\fI\-p\fRオプションと\fI\-e\fRオプションを同時に指定することはできません。 +.RE +.PP +\-e <\fIregex\fR>, \-regex <\fIregex\fR> +.RS 4 +指定した正規表現パターンと一致するパッケージの依存関係を検出します。\fI\-p\fRオプションと\fI\-e\fRオプションを同時に指定することはできません。 +.RE +.PP +\-include <\fIregex\fR> +.RS 4 +分析をパターンに一致するクラスに制限します。このオプションは、分析するクラスのリストをフィルタします。依存関係にパターンを適用する\fI\-p\fRおよび\fI\-e\fRとともに使用できます。 +.RE +.PP +\-jdkinternals +.RS 4 +JDKの内部APIのクラスレベルの依存関係を検出します。デフォルトでは、\fI\-include\fRオプションを指定しないかぎり、\fI\-classpath\fRオプションおよび入力ファイルに指定されたすべてのクラスを分析します。このオプションは、\fI\-p\fRオプション、\fI\-e\fRオプションおよび\fI\-s\fRオプションとともに使用できません。 +.sp +\fB警告\fR: JDKの内部APIは、今後のリリースでアクセスできなくなる可能性があります。 +.RE +.PP +\-P, \-profile +.RS 4 +パッケージを含むプロファイルまたはファイルを表示します。 +.RE +.PP +\-apionly +.RS 4 +フィールド・タイプ、メソッド・パラメータ・タイプ、戻りタイプ、チェックされた例外タイプを含むパブリック・クラスの\fIpublic\fRおよび\fIprotected\fRメンバーの署名からの依存関係など、分析をAPIに制限します。 +.RE +.PP +\-R, \-recursive +.RS 4 +すべての依存関係を再帰的に走査します。 +.RE +.PP +\-version +.RS 4 +バージョン情報を出力します。 +.RE +.PP +\-h, \-?, \-help +.RS 4 +\fIjdeps\fRに関するヘルプ・メッセージを出力します。 +.RE +.SH "例" +.PP +Notepad\&.jarの依存関係の分析。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +$ jdeps demo/jfc/Notepad/Notepad\&.jar + +demo/jfc/Notepad/Notepad\&.jar \-> /usr/java/jre/lib/rt\&.jar + <unnamed> (Notepad\&.jar) + \-> java\&.awt + \-> java\&.awt\&.event + \-> java\&.beans + \-> java\&.io + \-> java\&.lang + \-> java\&.net + \-> java\&.util + \-> java\&.util\&.logging + \-> javax\&.swing + \-> javax\&.swing\&.border + \-> javax\&.swing\&.event + \-> javax\&.swing\&.text + \-> javax\&.swing\&.tree + \-> javax\&.swing\&.undo +.fi +.if n \{\ +.RE +.\} +.PP +\-Pまたは\-profileオプションを使用して、メモ帳が依存するプロファイルを表示します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +$ jdeps \-profile demo/jfc/Notepad/Notepad\&.jar +demo/jfc/Notepad/Notepad\&.jar \-> /usr/java/jre/lib/rt\&.jar (Full JRE) + <unnamed> (Notepad\&.jar) + \-> java\&.awt Full JRE + \-> java\&.awt\&.event Full JRE + \-> java\&.beans Full JRE + \-> java\&.io compact1 + \-> java\&.lang compact1 + \-> java\&.net compact1 + \-> java\&.util compact1 + \-> java\&.util\&.logging compact1 + \-> javax\&.swing Full JRE + \-> javax\&.swing\&.border Full JRE + \-> javax\&.swing\&.event Full JRE + \-> javax\&.swing\&.text Full JRE + \-> javax\&.swing\&.tree Full JRE + \-> javax\&.swing\&.undo Full JRE +.fi +.if n \{\ +.RE +.\} +.PP +tools\&.jarファイル内の\fIcom\&.sun\&.tools\&.jdeps\&.Main\fRクラスなど、特定のクラスパス内の特定のクラスの直接依存関係の分析。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +$ jdeps \-cp lib/tools\&.jar com\&.sun\&.tools\&.jdeps\&.Main +lib/tools\&.jar \-> /usr/java/jre/lib/rt\&.jar + com\&.sun\&.tools\&.jdeps (tools\&.jar) + \-> java\&.io + \-> java\&.lang +.fi +.if n \{\ +.RE +.\} +.PP +\fI\-verbose:class\fRオプションを使用して、クラスレベル依存関係を検索するか\fI\-v\fRまたは\fI\-verbose\fRオプションを使用して同じJARファイルからの依存関係を含めます。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +$ jdeps \-verbose:class \-cp lib/tools\&.jar com\&.sun\&.tools\&.jdeps\&.Main + +lib/tools\&.jar \-> /usr/java/jre/lib/rt\&.jar + com\&.sun\&.tools\&.jdeps\&.Main (tools\&.jar) + \-> java\&.io\&.PrintWriter + \-> java\&.lang\&.Exception + \-> java\&.lang\&.Object + \-> java\&.lang\&.String + \-> java\&.lang\&.System +.fi +.if n \{\ +.RE +.\} +.PP +\fI\-R\fRまたは\fI\-recursive\fRオプションを使用して、\fIcom\&.sun\&.tools\&.jdeps\&.Main\fRクラスの推移的な依存関係を分析します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +$ jdeps \-R \-cp lib/tools\&.jar com\&.sun\&.tools\&.jdeps\&.Main +lib/tools\&.jar \-> /usr/java/jre/lib/rt\&.jar + com\&.sun\&.tools\&.classfile (tools\&.jar) + \-> java\&.io + \-> java\&.lang + \-> java\&.lang\&.reflect + \-> java\&.nio\&.charset + \-> java\&.nio\&.file + \-> java\&.util + \-> java\&.util\&.regex + com\&.sun\&.tools\&.jdeps (tools\&.jar) + \-> java\&.io + \-> java\&.lang + \-> java\&.nio\&.file + \-> java\&.nio\&.file\&.attribute + \-> java\&.text + \-> java\&.util + \-> java\&.util\&.jar + \-> java\&.util\&.regex + \-> java\&.util\&.zip +/usr/java/jre/lib/jce\&.jar \-> /usr/java/jre/lib/rt\&.jar + javax\&.crypto (jce\&.jar) + \-> java\&.io + \-> java\&.lang + \-> java\&.lang\&.reflect + \-> java\&.net + \-> java\&.nio + \-> java\&.security + \-> java\&.security\&.cert + \-> java\&.security\&.spec + \-> java\&.util + \-> java\&.util\&.concurrent + \-> java\&.util\&.jar + \-> java\&.util\&.regex + \-> java\&.util\&.zip + \-> javax\&.security\&.auth + \-> sun\&.security\&.jca JDK internal API (rt\&.jar) + \-> sun\&.security\&.util JDK internal API (rt\&.jar) + javax\&.crypto\&.spec (jce\&.jar) + \-> java\&.lang + \-> java\&.security\&.spec + \-> java\&.util +/usr/java/jre/lib/rt\&.jar \-> /usr/java/jre/lib/jce\&.jar + java\&.security (rt\&.jar) + \-> javax\&.crypto +.fi +.if n \{\ +.RE +.\} +.PP +メモ帳デモの依存関係のdotファイルを生成します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +$ jdeps \-dotoutput dot demo/jfc/Notepad/Notepad\&.jar +.fi +.if n \{\ +.RE +.\} +.PP +\fIjdeps\fRは、\fI\-dotoutput\fRオプションで指定されたdotディレクトリに<\fIfilename\fR>\&.dotという名前のdotファイルを特定のJARファイルごとに作成し、JARファイル間の依存関係をリストするsummary\&.dotという名前のサマリー・ファイルも作成します +.sp +.if n \{\ +.RS 4 +.\} +.nf +$ cat dot/Notepad\&.jar\&.dot +digraph "Notepad\&.jar" { + // Path: demo/jfc/Notepad/Notepad\&.jar + "<unnamed>" \-> "java\&.awt"; + "<unnamed>" \-> "java\&.awt\&.event"; + "<unnamed>" \-> "java\&.beans"; + "<unnamed>" \-> "java\&.io"; + "<unnamed>" \-> "java\&.lang"; + "<unnamed>" \-> "java\&.net"; + "<unnamed>" \-> "java\&.util"; + "<unnamed>" \-> "java\&.util\&.logging"; + "<unnamed>" \-> "javax\&.swing"; + "<unnamed>" \-> "javax\&.swing\&.border"; + "<unnamed>" \-> "javax\&.swing\&.event"; + "<unnamed>" \-> "javax\&.swing\&.text"; + "<unnamed>" \-> "javax\&.swing\&.tree"; + "<unnamed>" \-> "javax\&.swing\&.undo"; +} + +$ cat dot/summary\&.dot +digraph "summary" { + "Notepad\&.jar" \-> "rt\&.jar"; +} +.fi +.if n \{\ +.RE +.\} +.SH "関連項目" +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +javap(1) +.RE +.br +'pl 8.5i +'bp diff --git a/jdk/src/solaris/doc/sun/man/man1/ja/jhat.1 b/jdk/src/solaris/doc/sun/man/man1/ja/jhat.1 index 666b25229d2..63415d9a6da 100644 --- a/jdk/src/solaris/doc/sun/man/man1/ja/jhat.1 +++ b/jdk/src/solaris/doc/sun/man/man1/ja/jhat.1 @@ -1,159 +1,214 @@ -." Copyright (c) 2006, 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. -." -.TH jhat 1 "07 May 2011" - -.LP -.SH "名前" -jhat \- Java ヒープ解析ツール -.LP -.RS 3 -.TP 2 -o -形式 -.TP 2 -o -パラメータ -.TP 2 -o -説明 -.TP 2 -o -オプション -.TP 2 -o -関連項目 -.RE - -.LP -.SH "形式" -.LP +'\" t +.\" Copyright (c) 2006, 2013, Oracle and/or its affiliates. All rights reserved. +.\" Title: jhat +.\" Language: English +.\" Date: 2013年11月21日 +.\" SectDesc: トラブルシューティング・ツール +.\" Software: JDK 8 +.\" Arch: 汎用 +.\" +.\" 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. +.\" +.pl 99999 +.TH "jhat" "1" "2013年11月21日" "JDK 8" "トラブルシューティング・ツール" +.\" ----------------------------------------------------------------- +.\" * Define some portability stuff +.\" ----------------------------------------------------------------- +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.\" http://bugs.debian.org/507673 +.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" ----------------------------------------------------------------- +.\" * set default formatting +.\" ----------------------------------------------------------------- +.\" disable hyphenation +.nh +.\" disable justification (adjust text to left margin only) +.ad l +.\" ----------------------------------------------------------------- +.\" * MAIN CONTENT STARTS HERE * +.\" ----------------------------------------------------------------- +.SH "NAME" +jhat \- Javaヒープを分析します。このコマンドは試験的なもので、サポートされていません。 +.SH "概要" +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -\fP\f3jhat\fP [ \f2options\fP ] <heap\-dump\-file> -.fl - -.fl +\fIjhat\fR [ \fIoptions\fR ] \fIheap\-dump\-file\fR .fi - -.LP -.SH "パラメータ" -.LP -.RS 3 -.TP 3 -options -オプションを使用する場合、コマンド名の直後に記述してください。 -.TP 3 -heap\-dump\-file -ブラウズ対象となる Java バイナリヒープダンプファイル。複数のヒープダンプを含むダンプファイルの場合、「foo.hprof#3」のようにファイル名の後に「#<number>」を付加することで、ファイル内の特定のダンプを指定できます。 +.if n \{\ +.RE +.\} +.PP +\fIoptions\fR +.RS 4 +コマンドライン・オプション。オプションを参照してください。 +.RE +.PP +\fIheap\-dump\-file\fR +.RS 4 +ブラウズ対象となるJavaバイナリ・ヒープ・ダンプ・ファイル。複数のヒープ・ダンプを含むダンプ・ファイルの場合、\fImyfile\&.hprof#3\fRのようにファイル名の後に\fI#<number>\fRを付加することで、ファイル内の特定のダンプを指定できます。 .RE - -.LP .SH "説明" -.LP -.LP -\f3jhat\fP コマンドは、java ヒープダンプファイルを解析し、Web サーバーを起動します。jhat を使えば、お好みの Web ブラウザを使ってヒープダンプをブラウズできます。jhat は、「ある既知のクラス「Foo」のすべてのインスタンスを表示する」といった、事前に設計されたクエリのほか、\f3OQL\fP (\f3O\fPbject \f3Q\fPuery \f3L\fPanguage) もサポートします。OQL のヘルプには、jhat によって表示される OQL ヘルプページからアクセスできます。デフォルトポートを使用する場合、OQL のヘルプは http://localhost:7000/oqlhelp/ で利用可能です。 -.LP -.LP -Java のヒープダンプを生成するには、いくつかの方法があります。 -.LP -.RS 3 -.TP 2 -o -jmap(1) の \-dump オプションを使って実行時にヒープダンプを取得する。 -.TP 2 -o -jconsole(1) のオプションを使って -.na -\f2HotSpotDiagnosticMXBean\fP @ -.fi -http://java.sun.com/javase/6/docs/jre/api/management/extension/com/sun/management/HotSpotDiagnosticMXBean.html 経由で実行時にヒープダンプを取得する。 -.TP 2 -o -\-XX:+HeapDumpOnOutOfMemoryError VM オプションを指定すると、OutOfMemoryError のスロー時にヒープダンプが生成される。 -.TP 2 -o -.na -\f2hprof\fP @ -.fi -http://java.sun.com/developer/technicalArticles/Programming/HPROF.html を使用する。 +.PP +\fIjhat\fRコマンドはJavaヒープ・ダンプ・ファイルを解析し、Webサーバーを開始します。\fIjhat\fRコマンドを使用して、お気に入りのブラウザでヒープ・ダンプを参照できます。\fIjhat\fRコマンドは、既知のクラス\fIMyClass\fRのすべてのインスタンスを表示するなどの事前設計済の問合せやObject Query Language (OQL)をサポートします。ヒープ・ダンプの問合せを除き、OQLはSQLに似ています。OQLのヘルプには、\fIjhat\fRコマンドによって表示されるOQLヘルプ・ページからアクセスできます。デフォルト・ポートを使用する場合、OQLのヘルプはhttp://localhost:7000/oqlhelp/で利用可能です。 +.PP +Javaのヒープ・ダンプを生成するには、次のいくつかの方法があります。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fIjmap \-dump\fRオプションを使用して実行時にヒープ・ダンプを取得します。jmap(1)を参照してください。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fIjconsole\fRオプションを使用して\fIHotSpotDiagnosticMXBean\fR経由で実行時にヒープ・ダンプを取得します。jconsole(1)および\fIHotSpotDiagnosticMXBean\fRのインタフェースの説明( +http://docs\&.oracle\&.com/javase/8/docs/jre/api/management/extension/com/sun/management/HotSpotDiagnosticMXBean\&.html)を参照してください。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +ヒープ・ダンプは、\fI\-XX:+HeapDumpOnOutOfMemoryError\fR +Java仮想マシン(JVM)オプションを指定することで、\fIOutOfMemoryError\fRがスローされたときに生成されます。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fIhprof\fRコマンドを使用します。HPROF: Heap/CPUプロファイリング・ツール +(http://docs\&.oracle\&.com/javase/8/docs/technotes/samples/hprof\&.html)を参照してください .RE - -.LP -.LP -\f3注:\fP このツールは\f3試験的なもの\fPであり、将来の JDK のバージョンでは\f3利用できなくなる\fP可能性があります。 -.LP .SH "オプション" -.LP -.RS 3 -.TP 3 -\-stack false/true -オブジェクト割り当て呼び出しスタックの追跡を無効にします。ヒープダンプ内で割り当てサイト情報が使用できない場合、このフラグを false に設定する必要があります。デフォルトは true です。 -.TP 3 -\-refs false/true -オブジェクトへの参照の追跡を無効にします。デフォルトは true です。デフォルトでは、ヒープ内のすべてのオブジェクトについて、バックポインタ (指定されたオブジェクトをポイントしているオブジェクト。参照者または受信参照とも呼ばれる) が計算されます。 -.TP 3 -\-port port\-number -jhat の HTTP サーバーのポートを設定します。デフォルトは 7000 です。 -.TP 3 -\-exclude exclude\-file -「到達可能なオブジェクト」のクエリから除外すべきデータメンバーの一覧を含むファイルを指定します。たとえば、このファイルに \f2java.lang.String.value\fP が含まれていた場合、特定のオブジェクト「o」から到達可能なオブジェクトのリストを計算する際に、\f2java.lang.String.value\fP フィールドに関連する参照パスが考慮されなくなります。 -.TP 3 -\-baseline baseline\-dump\-file -ベースラインとなるヒープダンプを指定します。両方のヒープダンプ内で同じオブジェクト ID を持つオブジェクトは「新規ではない」としてマークされます。その他のオブジェクトは「新規」としてマークされます。これは、異なる 2 つのヒープダンプを比較する際に役立ちます。 -.TP 3 -\-debug int -このツールのデバッグレベルを設定します。0 は「デバッグ出力なし」を意味します。より大きな値を設定すると、より冗長なモードになります。 -.TP 3 -\-version -バージョン番号を報告したあと、終了します。 -.TP 3 -\-h -ヘルプメッセージを出力して終了します。 -.TP 3 -\-help -ヘルプメッセージを出力して終了します。 -.TP 3 -\-J<flag> -jhat が実行されている Java 仮想マシンに <flag> を渡します。たとえば、512M バイトの最大ヒープサイズを使用するには、\-J\-Xmx512m とします。 +.PP +\-stack false|true +.RS 4 +オブジェクト割当呼出しスタックの追跡を無効にします。ヒープ・ダンプ内で割当サイト情報が使用できない場合、このフラグを\fIfalse\fRに設定する必要があります。デフォルトは\fItrue\fRです。 +.RE +.PP +\-refs false|true +.RS 4 +オブジェクトへの参照の追跡を無効にします。デフォルトは\fItrue\fRです。デフォルトでは、ヒープ内のすべてのオブジェクトについて、バックポインタ(指定されたオブジェクトをポイントしているオブジェクト。参照者または受信参照とも呼ばれる)が計算されます。 +.RE +.PP +\-port \fIport\-number\fR +.RS 4 +\fIjhat\fRのHTTPサーバーのポートを設定します。デフォルトは7000です。 +.RE +.PP +\-exclude \fIexclude\-file\fR +.RS 4 +到達可能なオブジェクトの問合せから除外する必要があるデータ・メンバーの一覧を含むファイルを指定します。たとえば、このファイルに\fIjava\&.lang\&.String\&.value\fRが含まれていた場合、特定のオブジェクト\fIo\fRから到達可能なオブジェクトのリストを計算する際に、\fIjava\&.lang\&.String\&.value\fRフィールドに関連する参照パスが考慮されなくなります。 +.RE +.PP +\-baseline \fIexclude\-file\fR +.RS 4 +ベースラインとなるヒープ・ダンプを指定します。両方のヒープ・ダンプ内で同じオブジェクトIDを持つオブジェクトは新規ではないとしてマークされます。他のオブジェクトは新規としてマークされます。これは、異なる2つのヒープ・ダンプを比較する際に役立ちます。 +.RE +.PP +\-debug \fIint\fR +.RS 4 +このツールのデバッグ・レベルを設定します。レベル0はデバッグ出力がないことを意味します。より大きな値を設定すると、より冗長なモードになります。 +.RE +.PP +\-version +.RS 4 +リリース番号をレポートして終了します +.RE +.PP +\-h +.RS 4 +ヘルプ・メッセージを表示して終了します。 +.RE +.PP +\-help +.RS 4 +ヘルプ・メッセージを表示して終了します。 +.RE +.PP +\-J\fIflag\fR +.RS 4 +\fIjhat\fRコマンドを実行しているJava仮想マシンに\fIflag\fRを渡します。たとえば、512Mバイトの最大ヒープ・サイズを使用するには、\fI\-J\-Xmx512m\fRとします。 .RE - -.LP .SH "関連項目" -.LP -.RS 3 -.TP 2 -o -jmap(1) -.TP 2 -o -jconsole(1) -.TP 2 -o -.na -\f2hprof \- ヒープおよび CPU プロファイリングツール\fP @ -.fi -http://java.sun.com/developer/technicalArticles/Programming/HPROF.html +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +jmap(1) .RE - -.LP - +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +jconsole(1) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +HPROF: Heap/CPUプロファイリング・ツール +(http://docs\&.oracle\&.com/javase/8/docs/technotes/samples/hprof\&.html) +.RE +.br +'pl 8.5i +'bp diff --git a/jdk/src/solaris/doc/sun/man/man1/ja/jinfo.1 b/jdk/src/solaris/doc/sun/man/man1/ja/jinfo.1 index a1f639cfda9..f4e7ae9c4ec 100644 --- a/jdk/src/solaris/doc/sun/man/man1/ja/jinfo.1 +++ b/jdk/src/solaris/doc/sun/man/man1/ja/jinfo.1 @@ -1,166 +1,186 @@ -." Copyright (c) 2004, 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. -." -.TH jinfo 1 "07 May 2011" - -.LP -.SH "名前" -jinfo \- 構成情報 -.LP -.RS 3 -.TP 2 -o -形式 -.TP 2 -o -パラメータ -.TP 2 -o -説明 -.TP 2 -o -オプション -.TP 2 -o -関連項目 -.RE - -.LP -.SH "形式" -.LP +'\" t +.\" Copyright (c) 2004, 2013, Oracle and/or its affiliates. All rights reserved. +.\" Title: jinfo +.\" Language: English +.\" Date: 2013年11月21日 +.\" SectDesc: トラブルシューティング・ツール +.\" Software: JDK 8 +.\" Arch: 汎用 +.\" +.\" 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. +.\" +.pl 99999 +.TH "jinfo" "1" "2013年11月21日" "JDK 8" "トラブルシューティング・ツール" +.\" ----------------------------------------------------------------- +.\" * Define some portability stuff +.\" ----------------------------------------------------------------- +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.\" http://bugs.debian.org/507673 +.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" ----------------------------------------------------------------- +.\" * set default formatting +.\" ----------------------------------------------------------------- +.\" disable hyphenation +.nh +.\" disable justification (adjust text to left margin only) +.ad l +.\" ----------------------------------------------------------------- +.\" * MAIN CONTENT STARTS HERE * +.\" ----------------------------------------------------------------- +.SH "NAME" +jinfo \- 構成情報を生成します。このコマンドは試験的なもので、サポートされていません。 +.SH "概要" +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -\fP\f3jinfo\fP [ option ] pid -.fl -\f3jinfo\fP [ option ] executable core -.fl -\f3jinfo\fP [ option ] [server\-id@]remote\-hostname\-or\-IP -.fl +\fIjinfo\fR [ \fIoption\fR ] \fIpid\fR .fi - -.LP -.SH "パラメータ" -.LP -.RS 3 -.TP 3 -option -各オプションは互いに排他的です。オプションを使用する場合、コマンド名の直後に記述します。 +.if n \{\ .RE - -.LP -.RS 3 -.TP 3 -pid -出力する構成情報のプロセス ID。プロセスは Java プロセスである必要があります。マシン上で実行している Java プロセスの一覧を取得するには、jps(1) を使用します。 +.\} +.sp +.if n \{\ +.RS 4 +.\} +.nf +\fIjinfo\fR [ \fIoption \fR] \fIexecutable core\fR +.fi +.if n \{\ .RE - -.LP -.RS 3 -.TP 3 -executable -コアダンプの作成元の Java 実行可能ファイルです。 +.\} +.sp +.if n \{\ +.RS 4 +.\} +.nf +\fIjinfo\fR [ \fIoption \fR] \fI[ servier\-id ] remote\-hostname\-or\-IP\fR +.fi +.if n \{\ .RE - -.LP -.RS 3 -.TP 3 -core -出力する構成情報のコアファイル。 +.\} +.PP +\fIオプション\fR +.RS 4 +コマンドライン・オプション。オプションを参照してください。 .RE - -.LP -.RS 3 -.TP 3 -remote\-hostname\-or\-IP -リモートデバッグサーバー (jsadebugd(1) を参照) のホスト名または IP アドレスです。 +.PP +\fIpid\fR +.RS 4 +構成情報が出力されるプロセスID。プロセスはJavaプロセスである必要があります。マシン上で実行しているJavaプロセスの一覧を取得するには、jps(1)コマンドを使用します。 .RE - -.LP -.RS 3 -.TP 3 -server\-id -複数のデバッグサーバーが同一のリモートホストで実行している場合の、オプション固有の ID です。 +.PP +\fI実行可能ファイル\fR +.RS 4 +コア・ダンプの作成元のJava実行可能ファイル。 +.RE +.PP +\fIコア\fR +.RS 4 +構成情報が出力されるコア・ファイル。 +.RE +.PP +\fIremote\-hostname\-or\-IP\fR +.RS 4 +リモート・デバッグ・サーバーの\fIホスト名\fRまたは\fIIP\fRアドレス。jsadebugd(1)を参照してください。 +.RE +.PP +\fIserver\-id\fR +.RS 4 +複数のデバッグ・サーバーが同一のリモート・ホストで実行している場合の、オプション固有のID。 .RE - -.LP .SH "説明" -.LP -.LP -\f3jinfo\fP は、指定された Java プロセスやコアファイルまたはリモートデバッグサーバーの Java 構成情報を出力します。構成情報は、Java システムプロパティーと Java 仮想マシンのコマンド行フラグから構成されます。指定されたプロセスが 64 ビット VM 上で実行されている場合、\f2\-J\-d64\fP オプションを指定しなければならない場合があります。次に例を示します。 -.br -jinfo \-J\-d64 \-sysprops pid -.LP -.LP -\f3注 \- このユーティリティーはサポート対象外であり、将来の JDK のバージョンでは利用できなくなる可能性があります。dbgeng.dll が存在していない Windows システムでは、「Debugging Tools For Windows」をインストールしないとこれらのツールが正常に動作しません。また、 \fP\f4PATH\fP\f3 環境変数には、ターゲットプロセスによって使用される \fP\f4jvm.dll\fP\f3 の場所、またはクラッシュダンプファイルが生成された場所が含まれるようにしてください。\fP -.LP -.LP -\f3次に例を示します。 \fP\f4set PATH=<jdk>\\jre\\bin\\client;%PATH%\fP -.LP +.PP +\fIjinfo\fRコマンドは、指定されたJavaプロセスやコア・ファイルまたはリモート・デバッグ・サーバーのJava構成情報を出力します。構成情報には、Javaシステム・プロパティとJava仮想マシン(JVM)のコマンドライン・フラグが含まれています。指定されたプロセスが64ビットJVM上で実行されている場合、\fI\-J\-d64\fRオプションを指定する必要がある場合があります。次に例を示します。\fIjinfo\fR +\fI\-J\-d64 \-sysprops pid\fR。 +.PP +このユーティリティはサポート対象外であり、将来のJDKのリリースでは利用できなくなる可能性があります。\fIdbgeng\&.dll\fRが存在していないWindowsシステムでは、Debugging Tools For Windowsをインストールしないとこれらのツールが正常に動作しません。\fIPATH\fR環境変数には、ターゲット・プロセスによって使用されるjvm\&.dllの場所、またはクラッシュ・ダンプ・ファイルが生成された場所が含まれるようにしてください。たとえば、\fIset PATH=%JDK_HOME%\ejre\ebin\eclient;%PATH%\fRです。 .SH "オプション" -.LP -.RS 3 -.TP 3 -<オプションなし> -コマンド行フラグを、システムプロパティー名と値のペアとともに出力します。 -.br -.TP 3 -\-flag name -指定されたコマンド行フラグの名前と値を出力します。 -.br -.TP 3 -\-flag [+|\-]name -指定されたブール型のコマンド行フラグを有効または無効にします。 -.br -.TP 3 -\-flag name=value -指定されたコマンド行フラグを指定された値に設定します。 -.br -.TP 3 -\-flags -JVM に渡されるコマンド行フラグをペアで出力します。 -.br -.TP 3 -\-sysprops -Java システムプロパティーを名前と値のペアとして出力します。 -.br -.TP 3 -\-h -ヘルプメッセージを出力します。 -.TP 3 -\-help -ヘルプメッセージを出力します。 +.PP +no\-option +.RS 4 +コマンドライン・フラグを、システム・プロパティ名と値のペアとともに出力します。 +.RE +.PP +\-flag \fIname\fR +.RS 4 +指定されたコマンドライン・フラグの名前と値を出力します。 +.RE +.PP +\-flag \fI[+|\-]name\fR +.RS 4 +指定されたブール型のコマンドライン・フラグを有効または無効にします。 +.RE +.PP +\-flag \fIname=value\fR +.RS 4 +指定されたコマンドライン・フラグを指定された値に設定します。 +.RE +.PP +\-flags +.RS 4 +JVMに渡されるコマンドライン・フラグを出力します。 +.RE +.PP +\-sysprops +.RS 4 +Javaシステム・プロパティを名前と値のペアとして出力します。 +.RE +.PP +\-h +.RS 4 +ヘルプ・メッセージが出力されます。 +.RE +.PP +\-help +.RS 4 +ヘルプ・メッセージが出力されます。 .RE - -.LP .SH "関連項目" -.LP -.RS 3 -.TP 2 -o -jps(1) -.TP 2 -o -jsadebugd(1) +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +jps(1) .RE - -.LP - +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +jsadebugd(1) +.RE +.br +'pl 8.5i +'bp diff --git a/jdk/src/solaris/doc/sun/man/man1/ja/jjs.1 b/jdk/src/solaris/doc/sun/man/man1/ja/jjs.1 new file mode 100644 index 00000000000..bcf28254fe2 --- /dev/null +++ b/jdk/src/solaris/doc/sun/man/man1/ja/jjs.1 @@ -0,0 +1,394 @@ +'\" t +.\" Copyright (c) 1994, 2013, Oracle and/or its affiliates. All rights reserved. +.\" Title: jjs +.\" Language: English +.\" Date: 2013年11月21日 +.\" SectDesc: 基本ツール +.\" Software: JDK 8 +.\" Arch: 汎用 +.\" +.\" 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. +.\" +.pl 99999 +.TH "jjs" "1" "2013年11月21日" "JDK 8" "基本ツール" +.\" ----------------------------------------------------------------- +.\" * Define some portability stuff +.\" ----------------------------------------------------------------- +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.\" http://bugs.debian.org/507673 +.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" ----------------------------------------------------------------- +.\" * set default formatting +.\" ----------------------------------------------------------------- +.\" disable hyphenation +.nh +.\" disable justification (adjust text to left margin only) +.ad l +.\" ----------------------------------------------------------------- +.\" * MAIN CONTENT STARTS HERE * +.\" ----------------------------------------------------------------- +.SH "NAME" +jjs \- Nashornエンジンを呼び出します。 +.SH "概要" +.sp +.if n \{\ +.RS 4 +.\} +.nf +\fIjjs\fR [\fIoptions\fR] [\fIscript\-files\fR] [\-\- \fIarguments\fR] +.fi +.if n \{\ +.RE +.\} +.PP +\fIoptions\fR +.RS 4 +空白文字で区切られた、\fIjjs\fRコマンドの1つ以上のオプション。詳細は、オプションを参照してください。 +.RE +.PP +\fIscript\-files\fR +.RS 4 +空白文字で区切られた、Nashornを使用して解釈する1つ以上のスクリプト・ファイル。ファイルが指定されない場合は、対話型シェルが起動されます。 +.RE +.PP +\fIarguments\fR +.RS 4 +二重ハイフン・マーカー(\fI\-\-\fR)の後のすべての値が、引数としてスクリプトまたは対話型シェルに渡されます。これらの値には\fIarguments\fRプロパティを使用してアクセスできます(Example 3を参照してください)。 +.RE +.SH "説明" +.PP +\fIjjs\fRコマンドライン・ツールを使用してNashornエンジンを呼び出します。これを使用して、1つまたは複数のスクリプト・ファイルを解釈したり、対話型シェルを実行することができます。 +.SH "オプション" +.PP +\fIjjs\fRコマンドのオプションはスクリプトがNashornによって解釈される条件を制御します。 +.PP +\-ccs=\fIsize\fR, \-\-class\-cache\-size=\fIsize\fR +.RS 4 +クラス・キャッシュ・サイズをバイト単位で設定します。キロバイト(KB)を示すために\fIk\fRまたは\fIK\fRの文字を追加し、メガバイト(MB)を示すために\fIm\fRまたは\fIM\fRの文字を追加し、ギガバイト(GB)を示すために\fIg\fRまたは\fIG\fRを追加します。デフォルトでは、クラス・キャッシュ・サイズは50バイトに設定されます。次の例は、1024バイト(1 KB)に設定する方法を示します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-css=100 +\-css=1k +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\-co, \-\-compile\-only +.RS 4 +スクリプトを実行せずにコンパイルします。 +.RE +.PP +\-cp \fIpath\fR, \-\-classpath \fIpath\fR +.RS 4 +サポートするクラスへのパスを指定します。複数のパスを設定するには、このオプションを繰り返すか、または各パスをコロン(:)で区切ります。 +.RE +.PP +\-D\fIname\fR=\fIvalue\fR +.RS 4 +プロパティ名に値を割り当てることで、スクリプトに渡すシステム・プロパティを設定します。次の例で、対話型モードでNashornを呼び出して、\fImyValue\fRを\fImyKey\fRという名前のプロパティに割り当てる方法を示します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +>> \fBjjs \-DmyKey=myValue\fR +jjs> \fBjava\&.lang\&.System\&.getProperty("myKey")\fR +myValue +jjs> +.fi +.if n \{\ +.RE +.\} +このオプションを繰り返し使用すると、複数のプロパティを設定できます。 +.RE +.PP +\-d=\fIpath\fR, \-\-dump\-debug\-dir=\fIpath\fR +.RS 4 +クラス・ファイルをダンプするディレクトリへのパスを指定します。 +.RE +.PP +\-\-debug\-lines +.RS 4 +クラス・ファイル内の行番号表を生成します。デフォルトでは、このオプションは有効になっています。無効にするには\fI\-\-debug\-lines=false\fRを指定します。 +.RE +.PP +\-\-debug\-locals +.RS 4 +クラス・ファイル内のローカル変数を生成します。 +.RE +.PP +\-doe, \-\-dump\-on\-error +.RS 4 +エラーが発生したときに、フル・スタック・トレースを提供します。デフォルトでは、簡単なエラー・メッセージのみが出力されます。 +.RE +.PP +\-\-early\-lvalue\-error +.RS 4 +無効な左辺値式が早期エラーとして(つまり、コードが解析されるときに)報告されます。デフォルトでは、このオプションは有効になっています。無効にするには\fI\-\-early\-lvalue\-error=false\fRを指定します。無効な場合、無効な左辺値式はコードが実行されるまで報告されません。 +.RE +.PP +\-\-empty\-statements +.RS 4 +空の文をJavaの抽象構文ツリーに保存します。 +.RE +.PP +\-fv, \-\-fullversion +.RS 4 +完全なNashornバージョン文字列を出力します。 +.RE +.PP +\-\-function\-statement\-error +.RS 4 +関数の宣言が文として使用されるとエラー・メッセージが出力されます。 +.RE +.PP +\-\-function\-statement\-warning +.RS 4 +関数の宣言が文として使用されると警告メッセージが出力されます。 +.RE +.PP +\-fx +.RS 4 +スクリプトをJavaFXアプリケーションとして起動します。 +.RE +.PP +\-h, \-help +.RS 4 +オプションのリストとその説明を出力します。 +.RE +.PP +\-J\fIoption\fR +.RS 4 +指定した\fIjava\fR起動オプションをJVMに渡します。次の例で、対話型モードでNashornを呼び出して、JVMによって使用される最大メモリーを4 GBに設定する方法を示します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +>> \fBjjs \-J\-Xmx4g\fR +jjs> \fBjava\&.lang\&.Runtime\&.getRuntime()\&.maxMemory()\fR +3817799680 +jjs> +.fi +.if n \{\ +.RE +.\} +このオプションを繰り返し使用すると、複数の\fIjava\fRコマンド・オプションを渡すことができます。 +.RE +.PP +\-\-lazy\-compilation +.RS 4 +レイジー・コード生成戦略(つまり、スクリプト全体が一度にコンパイルされない)を有効にします。このオプションは試験的なものです。 +.RE +.PP +\-\-loader\-per\-compile +.RS 4 +コンパイルごとに新しいクラス・ローダーを作成します。デフォルトでは、このオプションは有効になっています。無効にするには\fI\-\-loader\-per\-compile=false\fRを指定します。 +.RE +.PP +\-\-log=\fIsubsystem\fR:\fIlevel\fR +.RS 4 +指定されたサブシステムに対して、特定のレベルでロギングを実行します。カンマで区切って複数のサブシステムのロギング・レベルを指定できます。次に例を示します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-\-log=fields:finest,codegen:info +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\-\-package=\fIname\fR +.RS 4 +生成されたクラス・ファイルを追加するパッケージを指定します。 +.RE +.PP +\-\-parse\-only +.RS 4 +コンパイルせずにコードを解析します。 +.RE +.PP +\-\-print\-ast +.RS 4 +抽象構文ツリーを出力します。 +.RE +.PP +\-\-print\-code +.RS 4 +バイトコードを出力します。 +.RE +.PP +\-\-print\-lower\-ast +.RS 4 +掘り下げた抽象構文ツリーを出力します。 +.RE +.PP +\-\-print\-lower\-parse +.RS 4 +掘り下げた解析ツリーを出力します。 +.RE +.PP +\-\-print\-no\-newline +.RS 4 +その他の\fI\-\-print*\fRオプションで強制的に1行で出力します。 +.RE +.PP +\-\-print\-parse +.RS 4 +解析ツリーを出力します。 +.RE +.PP +\-\-print\-symbols +.RS 4 +記号表を出力します。 +.RE +.PP +\-pcs, \-\-profile\-callsites +.RS 4 +呼び出しサイトのプロファイル・データをダンプします。 +.RE +.PP +\-scripting +.RS 4 +シェルのスクリプト機能を有効にします。 +.RE +.PP +\-\-stderr=\fIfilename\fR|\fIstream\fR|\fItty\fR +.RS 4 +標準エラー・ストリームを指定したファイル、ストリーム(たとえば\fIstdout\fR)に、またはテキスト端末にリダイレクトします。 +.RE +.PP +\-\-stdout=\fIfilename\fR|\fIstream\fR|\fItty\fR +.RS 4 +標準出力ストリームを指定したファイル、ストリーム(たとえば\fIstderr\fR)に、またはテキスト端末にリダイレクトします。 +.RE +.PP +\-strict +.RS 4 +標準(ECMAScript Edition 5\&.1)への準拠を強化するstrictモードを有効にし、これにより共通のコーディング・エラーを簡単に検出できるようになります。 +.RE +.PP +\-t=\fIzone\fR, \-timezone=\fIzone\fR +.RS 4 +スクリプトの実行に対し指定したタイムゾーンを設定します。OSで設定されたタイムゾーンをオーバーライドし、\fIDate\fRオブジェクトで使用されます。 +.RE +.PP +\-tcs=\fIparameter\fR, \-\-trace\-callsites=\fIparameter\fR +.RS 4 +呼出しサイトのトレースのモードを有効にします。使用可能なパラメータは、次のとおりです。 +.PP +miss +.RS 4 +呼出しサイトのミスをトレースします。 +.RE +.PP +enterexit +.RS 4 +呼出しサイトへの出入りをトレースします。 +.RE +.PP +objects +.RS 4 +オブジェクトのプロパティを出力します。 +.RE +.RE +.PP +\-\-verify\-code +.RS 4 +バイトコードを実行する前に検証します。 +.RE +.PP +\-v, \-version +.RS 4 +Nashornバージョン文字列を出力します。 +.RE +.PP +\-xhelp +.RS 4 +コマンドライン・オプションの拡張ヘルプを出力します。 +.RE +.SH "例" +.PP +\fBExample 1\fR, Nashornを使用したスクリプトの実行 +.RS 4 +.sp +.if n \{\ +.RS 4 +.\} +.nf +jjs script\&.js +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\fBExample 2\fR, 対話型モードでのNashornの実行 +.RS 4 +.sp +.if n \{\ +.RS 4 +.\} +.nf +>> \fBjjs\fR +jjs> \fBprintln("Hello, World!")\fR +Hello, World! +jjs> \fBquit()\fR +>> +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\fBExample 3\fR, Nashornへの引数の渡し +.RS 4 +.sp +.if n \{\ +.RS 4 +.\} +.nf +>> \fBjjs \-\- a b c\fR +jjs> \fBarguments\&.join(", ")\fR +a, b, c +jjs> +.fi +.if n \{\ +.RE +.\} +.RE +.SH "関連項目" +.PP +\fIjrunscript\fR +.br +'pl 8.5i +'bp diff --git a/jdk/src/solaris/doc/sun/man/man1/ja/jmap.1 b/jdk/src/solaris/doc/sun/man/man1/ja/jmap.1 index 15ea13f6f2e..cc465a08b4e 100644 --- a/jdk/src/solaris/doc/sun/man/man1/ja/jmap.1 +++ b/jdk/src/solaris/doc/sun/man/man1/ja/jmap.1 @@ -1,179 +1,209 @@ -." Copyright (c) 2004, 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. -." -.TH jmap 1 "07 May 2011" - -.LP -.SH "名前" -jmap \- メモリーマップ -.LP -.RS 3 -.TP 2 -o -形式 -.TP 2 -o -パラメータ -.TP 2 -o -説明 -.TP 2 -o -オプション -.TP 2 -o -関連項目 -.RE - -.LP -.SH "形式" -.LP +'\" t +.\" Copyright (c) 2004, 2013, Oracle and/or its affiliates. All rights reserved. +.\" Title: jmap +.\" Language: English +.\" Date: 2013年11月21日 +.\" SectDesc: トラブルシューティング・ツール +.\" Software: JDK 8 +.\" Arch: 汎用 +.\" +.\" 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. +.\" +.pl 99999 +.TH "jmap" "1" "2013年11月21日" "JDK 8" "トラブルシューティング・ツール" +.\" ----------------------------------------------------------------- +.\" * Define some portability stuff +.\" ----------------------------------------------------------------- +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.\" http://bugs.debian.org/507673 +.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" ----------------------------------------------------------------- +.\" * set default formatting +.\" ----------------------------------------------------------------- +.\" disable hyphenation +.nh +.\" disable justification (adjust text to left margin only) +.ad l +.\" ----------------------------------------------------------------- +.\" * MAIN CONTENT STARTS HERE * +.\" ----------------------------------------------------------------- +.SH "NAME" +jmap \- プロセスやコア・ファイルまたはリモート・デバッグ・サーバーの、共用オブジェクト・メモリー・マップまたはヒープ・メモリーの詳細を出力します。このコマンドは試験的なもので、サポートされていません。 +.SH "概要" +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -\fP\f3jmap\fP [ option ] pid -.fl -\f3jmap\fP [ option ] executable core -.fl -\f3jmap\fP [ option ] [server\-id@]remote\-hostname\-or\-IP -.fl +\fIjmap\fR [ \fIoptions\fR ] \fIpid\fR .fi - -.LP -.SH "パラメータ" -.LP -.RS 3 -.TP 3 -option -各オプションは互いに排他的です。オプションを使用する場合、コマンド名の直後に記述します。 -.TP 3 -pid -印刷するメモリーマップのプロセス ID。プロセスは Java プロセスである必要があります。マシン上で実行している Java プロセスの一覧を取得するには、jps(1) を使用します。 -.br -.TP 3 -executable -コアダンプの作成元の Java 実行可能ファイルです。 -.br -.TP 3 -core -印刷するメモリーマップのコアファイル。 -.br -.TP 3 -remote\-hostname\-or\-IP -リモートデバッグサーバー (jsadebugd(1) を参照) のホスト名または IP アドレスです。 -.br -.TP 3 -server\-id -複数のデバッグサーバーが同一のリモートホストで実行している場合の、オプション固有の ID です。 -.br +.if n \{\ +.RE +.\} +.sp +.if n \{\ +.RS 4 +.\} +.nf +\fIjmap\fR [ \fIoptions\fR ] \fIexecutable\fR \fIcore\fR +.fi +.if n \{\ +.RE +.\} +.sp +.if n \{\ +.RS 4 +.\} +.nf +\fIjmap\fR [ \fIoptions\fR ] [ \fIpid\fR ] \fIserver\-id\fR@ ] \fIremote\-hostname\-or\-IP\fR +.fi +.if n \{\ +.RE +.\} +.PP +\fIoptions\fR +.RS 4 +コマンドライン・オプション。オプションを参照してください。 +.RE +.PP +\fIpid\fR +.RS 4 +出力するメモリー・マップのプロセスID。プロセスはJavaプロセスである必要があります。マシン上で実行しているJavaプロセスの一覧を取得するには、jps(1)コマンドを使用します。 +.RE +.PP +\fI実行可能ファイル\fR +.RS 4 +コア・ダンプの作成元のJava実行可能ファイル。 +.RE +.PP +\fIコア\fR +.RS 4 +出力するメモリー・マップのコア・ファイル。 +.RE +.PP +\fIremote\-hostname\-or\-IP\fR +.RS 4 +リモート・デバッグ・サーバーの\fIホスト名\fRまたは\fIIP\fRアドレス。jsadebugd(1)を参照してください。 +.RE +.PP +\fIserver\-id\fR +.RS 4 +複数のデバッグ・サーバーが同一のリモート・ホストで実行している場合の、オプション固有のID。 .RE - -.LP .SH "説明" -.LP -.LP -\f3jmap\fP は、指定されたプロセスやコアファイルまたはリモートデバッグサーバーの、共用オブジェクトメモリーマップまたはヒープメモリーの詳細を印刷します。指定されたプロセスが 64 ビット VM 上で実行されている場合、\f2\-J\-d64\fP オプションを指定しなければならない場合があります。次に例を示します。 -.LP -.nf -\f3 -.fl -jmap \-J\-d64 \-heap pid -.fl -\fP -.fi - -.LP -.LP -\f3注: このユーティリティーはサポート対象外であり、将来の JDK のバージョンでは利用できなくなる可能性があります。dbgeng.dll が存在していない Windows システムでは、「Debugging Tools For Windows」をインストールしないとこれらのツールが正常に動作しません。また、 \fP\f4PATH\fP\f3 環境変数には、ターゲットプロセスによって使用される \fP\f4jvm.dll\fP\f3 の場所、またはクラッシュダンプファイルが生成された場所が含まれるようにしてください。\fP -.LP -.LP -\f3次に例を示します。 \fP\f4set PATH=<jdk>\\jre\\bin\\client;%PATH%\fP -.LP -.br - -.LP +.PP +\fIjmap\fRコマンドは、指定されたプロセスやコア・ファイルまたはリモート・デバッグ・サーバーの、共用オブジェクト・メモリー・マップまたはヒープ・メモリーの詳細を出力します。指定されたプロセスが64ビットJava仮想マシン(JVM)上で実行されている場合、\fI\-J\-d64\fRオプションを指定する必要がある場合があります。次に例を示します。\fIjmap\fR +\fI\-J\-d64 \-heap pid\fR。 +.PP +\fB注意:\fR +このユーティリティはサポート対象外であり、将来のJDKのリリースでは利用できなくなる可能性があります。\fIdbgeng\&.dll\fRファイルが存在していないWindowsシステムでは、Debugging Tools For Windowsをインストールしないとこれらのツールが正常に動作しません。\fIPATH\fR環境変数には、ターゲット・プロセスによって使用される\fIjvm\&.dll\fRの場所、またはクラッシュ・ダンプ・ファイルが生成された場所が含まれるようにしてください。次に例を示します。\fIset PATH=%JDK_HOME%\ejre\ebin\eclient;%PATH%\fR。 .SH "オプション" -.LP -.RS 3 -.TP 3 -<オプションなし> -オプションを使用しない場合、jmap は共用オブジェクトマッピングを印刷します。ターゲット VM にロードされた共用オブジェクトごとに、開始アドレス、マッピングのサイズ、および共用オブジェクトファイルのフルパスが印刷されます。これは、Solaris \f3pmap\fP ユーティリティーと類似しています。 -.br -.TP 3 -\-dump:[live,]format=b,file=<filename> -Java ヒープを hprof バイナリ形式で filename にダンプします。\f2live\fP サブオプションは省略可能です。これが指定された場合、ヒープ内で生存中のオブジェクトのみがダンプされます。ヒープダンプを参照するには、生成されたファイルを jhat(1) (Java Heap Analysis Tool) を使って読み取ります。 -.br -.TP 3 -\-finalizerinfo -ファイナライズを待っているオブジェクトに関する情報を出力します。 -.br -.TP 3 -\-heap -ヒープサマリーを印刷します。使用される GC アルゴリズム、ヒープ構成、および世代ごとのヒープ使用率が印刷されます。 -.br -.TP 3 -\-histo[:live] -ヒープのヒストグラムを印刷します。Java クラスごとに、オブジェクトの数、バイト単位でのメモリーサイズ、および完全修飾クラス名が印刷されます。VM 内部クラス名は、「*」の接頭辞を付けて印刷されます。\f2live\fP サブオプションが指定された場合、生存中のオブジェクトのみがカウントされます。 -.br -.TP 3 -\-permstat -Permanent 世代の Java ヒープの、クラスローダー関連の統計データを印刷します。クラスローダーごとに、その名前、状態、アドレス、親クラスローダー、およびクラスローダーがロードしたクラスの数とサイズが印刷されます。さらに、intern された文字列の数とサイズも出力されます。 -.br -.TP 3 -\-F -強制 (Force)。pid が応答しない場合に、jmap \-dump または jmap \-histo オプションとともに使用します。このモードでは、\f2live\fP サブオプションはサポートされません。 -.br -.TP 3 -\-h -ヘルプメッセージを印刷します。 -.br -.br -.TP 3 -\-help -ヘルプメッセージを印刷します。 -.br -.br -.TP 3 -\-J<flag> -jmap が実行されている Java 仮想マシンに <flag> を渡します。 -.br +.PP +<オプションなし> +.RS 4 +オプションを使用しない場合、\fIjmap\fRコマンドは共用オブジェクト・マッピングを出力します。ターゲットJVMにロードされた共用オブジェクトごとに、開始アドレス、マッピングのサイズおよび共用オブジェクト・ファイルのフルパスが出力されます。この動作は、Oracle Solaris +\fIpmap\fRユーティリティと類似しています。 +.RE +.PP +\-dump:[live,] format=b, file=\fIfilename\fR +.RS 4 +Javaヒープを\fIhprof\fRバイナリ形式で\fIfilename\fRにダンプします。\fIlive\fRサブオプションはオプションですが、指定した場合、ヒープ内のアクティブなオブジェクトのみがダンプされます。ヒープ・ダンプを参照するには、jhat(1)コマンドを使用して生成されたファイルを読み取ります。 +.RE +.PP +\-finalizerinfo +.RS 4 +ファイナライズを待っているオブジェクトに関する情報を出力します。 +.RE +.PP +\-heap +.RS 4 +使用されているガベージ・コレクションのヒープ・サマリー、ヘッダー構成、および世代関連のヒープ使用状況を出力します。さらに、internされた文字列の数とサイズも出力されます。 +.RE +.PP +\-histo[:live] +.RS 4 +ヒープのヒストグラムを出力します。Javaクラスごとに、オブジェクトの数、バイト単位でのメモリー・サイズ、および完全修飾クラス名が出力されます。JVMの内部クラス名はアスタリスク(*)の接頭辞を付けて出力されます。\fIlive\fRサブオプションが指定された場合、アクティブなオブジェクトのみがカウントされます。 +.RE +.PP +\-clstats +.RS 4 +Javaヒープの、クラス・ローダー関連の統計データを出力します。クラス・ローダーごとに、その名前、状態、アドレス、親クラス・ローダー、およびクラス・ローダーがロードしたクラスの数とサイズが出力されます。 +.RE +.PP +\-F +.RS 4 +強制します。PIDが応答しないときに、このオプションを\fIjmap \-dump\fRまたは\fIjmap \-histo\fRオプションとともに使用します。このモードでは、\fIlive\fRサブオプションはサポートされません。 +.RE +.PP +\-h +.RS 4 +ヘルプ・メッセージが出力されます。 +.RE +.PP +\-help +.RS 4 +ヘルプ・メッセージが出力されます。 +.RE +.PP +\-J\fIflag\fR +.RS 4 +\fIjmap\fRコマンドを実行しているJava仮想マシンに\fIflag\fRを渡します。 .RE - -.LP .SH "関連項目" -.LP -.RS 3 -.TP 2 -o -pmap (1) -.TP 2 -o -jhat(1) -.TP 2 -o -jps(1) -.TP 2 -o -jsadebugd(1) +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +jhat(1) .RE - -.LP - +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +jps(1) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +jsadebugd(1) +.RE +.br +'pl 8.5i +'bp diff --git a/jdk/src/solaris/doc/sun/man/man1/ja/jps.1 b/jdk/src/solaris/doc/sun/man/man1/ja/jps.1 index bcfb9bed82e..d6a7ae886f9 100644 --- a/jdk/src/solaris/doc/sun/man/man1/ja/jps.1 +++ b/jdk/src/solaris/doc/sun/man/man1/ja/jps.1 @@ -1,278 +1,263 @@ -." Copyright (c) 2004, 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. -." -.TH jps 1 "07 May 2011" - -.LP -.SH "名前" -jps \- Java 仮想マシンプロセスステータスツール -.LP -.RS 3 -.TP 2 -o -形式 -.TP 2 -o -パラメータ -.TP 2 -o -説明 -.TP 2 -o -オプション -.TP 2 -o -ホスト識別子 -.TP 2 -o -出力形式 -.TP 2 -o -例 -.TP 2 -o -関連項目 -.RE - -.LP -.SH "形式" -.LP +'\" t +.\" Copyright (c) 2004, 2013, Oracle and/or its affiliates. All rights reserved. +.\" Title: jps +.\" Language: English +.\" Date: 2013年11月21日 +.\" SectDesc: モニタリング・ツール +.\" Software: JDK 8 +.\" Arch: 汎用 +.\" +.\" 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. +.\" +.pl 99999 +.TH "jps" "1" "2013年11月21日" "JDK 8" "モニタリング・ツール" +.\" ----------------------------------------------------------------- +.\" * Define some portability stuff +.\" ----------------------------------------------------------------- +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.\" http://bugs.debian.org/507673 +.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" ----------------------------------------------------------------- +.\" * set default formatting +.\" ----------------------------------------------------------------- +.\" disable hyphenation +.nh +.\" disable justification (adjust text to left margin only) +.ad l +.\" ----------------------------------------------------------------- +.\" * MAIN CONTENT STARTS HERE * +.\" ----------------------------------------------------------------- +.SH "NAME" +jps \- ターゲット・システム上で計測されたJava仮想マシン(JVM)を一覧表示します。このコマンドは試験的なもので、サポートされていません。 +.SH "概要" +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -\fP\f3jps\fP [ \f2options\fP ] [ \f2hostid\fP ] -.br - -.fl +\fIjps\fR [ \fIoptions\fR ] [ \fIhostid\fR ] .fi - -.LP -.SH "パラメータ" -.LP -.RS 3 -.TP 3 -options -コマンド行オプション。 -.TP 3 -hostid -プロセスレポートを生成するホストのホスト識別子。\f2hostid\fP には、通信プロトコル、ポート番号、実装に固有な他のデータを指定したオプションコンポーネントを含めることができます。 +.if n \{\ .RE - -.LP -.SH " 説明" -.LP -.LP -\f3jps\fP ツールは、ターゲットシステム上で計測された HotSpot Java 仮想マシン (JVM) を一覧表示します。このツールで表示できるレポート情報は、アクセス権を持った JVM に関するものに限定されます。 -.LP -.LP -\f2hostid\fP を指定せずに \f3jps\fP を実行した場合、ローカルホストで計測された JVM が検索されます。\f2hostid\fP を指定して起動した場合、指定されたプロトコルとポートを使用して、指定されたホスト上の JVM を検索します。\f3jstatd\fP プロセスがターゲットホスト上で実行されていると想定されます。 -.LP -.LP -\f3jps\fP コマンドは、ターゲットシステムで計測された各 JVM について、ローカル VM 識別子、つまり \f2lvmid\fP をレポートします。\f3lvmid\fP は、必須ではありませんが、一般的には JVM プロセスに対するオペレーティングシステムのプロセス識別子です。オプションを指定しない場合、\f3jps\fP によって、各 Java アプリケーションの \f2lvmid\fP が一覧表示され、それぞれにアプリケーションのクラス名または JAR ファイル名が簡単な形式で示されます。この簡単な形式のクラス名と JAR ファイル名では、クラスのパッケージ情報または JAR ファイルパス情報が省略されています。 -.LP -.LP -\f3jps\fP コマンドは、\f3Java\fP 起動ツールを使用して \f2main\fP メソッドに渡されるクラス名と引数を検索します。独自の起動ツールを使用してターゲット JVM を起動した場合は、 \f2main\fP メソッドに渡されるクラス名 (または JAR ファイル名) と引数は利用できません。この場合、\f3jps\fP コマンドは、main メソッドへ渡されるクラス名 (または JAR ファイル名) と引数に対して、文字列 \f2Unknown\fP を出力します。 -.LP -.LP -\f3jps\fP コマンドで生成される JVM のリストは、このコマンドを実行する主体に与えられたアクセス権に基づき、制限される場合があります。このコマンドは、オペレーティングシステム独自のアクセス制御機構による決定に基づいて、主体にアクセス権が与えられている JVM だけを一覧表示します。 -.LP -.LP -\f3注:\fP このユーティリティーはサポート対象外であり、将来の JDK のバージョンでは利用できなくなる可能性があります。現在、Windows 98 および Windows Me プラットフォームでは使用できません。 -.LP +.\} +.PP +\fIoptions\fR +.RS 4 +コマンドライン・オプション。オプションを参照してください。 +.RE +.PP +\fIhostid\fR +.RS 4 +プロセス・レポートを生成するホストの識別子。\fIhostid\fRには、通信プロトコル、ポート番号、実装に固有な他のデータを指定したオプション・コンポーネントを含めることができます。ホスト識別子を参照してください。 +.RE +.SH "説明" +.PP +\fIjps\fRコマンドは、ターゲット・システム上で計測されたJava HotSpot VMを一覧表示します。このコマンドで表示できるレポート情報は、アクセス権を持ったJVMに関するものに限定されます。 +.PP +\fIhostid\fRを指定せずに\fIjps\fRコマンドを実行した場合、ローカル・ホストで計測されたJVMが検索されます。\fIhostid\fRを指定して起動した場合、指定されたプロトコルとポートを使用して、指定されたホスト上のJVMを検索します。\fIjstatd\fRプロセスがターゲット・ホスト上で実行されていると想定されます。 +.PP +\fIjps\fRコマンドは、ターゲット・システムで計測された各JVMについて、ローカルVM識別子、つまり\fIlvmid\fRをレポートします。\fIlvmid\fRは、一般的にはJVMプロセスに対するオペレーティング・システムのプロセス識別子ですが、必ずしもそうであるとは限りません。オプションを指定しない場合、\fIjps\fRによって、各Javaアプリケーションの\fIlvmid\fRが一覧表示され、それぞれにアプリケーションのクラス名またはJARファイル名が簡単な形式で示されます。この簡単な形式のクラス名とJARファイル名では、クラスのパッケージ情報またはJARファイル・パス情報が省略されています。 +.PP +\fIjps\fRコマンドは、Java起動ツールを使用してmainメソッドに渡されるクラス名と引数を検索します。独自の起動ツールを使用してターゲットJVMを起動した場合は、\fImain\fRメソッドに渡されるクラス名またはJARファイル名と引数は利用できません。この場合、\fIjps\fRコマンドは、\fImain\fRメソッドに渡されるクラス名またはJARファイル名と引数に対して、文字列\fIUnknown\fRを出力します。 +.PP +\fIjps\fRコマンドで生成されるJVMのリストは、このコマンドを実行するプリンシパルに与えられたアクセス権に基づき、制限される場合があります。このコマンドは、オペレーティング・システム独自のアクセス制御機構による決定に基づいて、プリンシパルにアクセス権が与えられているJVMのみを一覧表示します。 .SH "オプション" -.LP -.LP -\f3jps\fP コマンドでは、コマンドの出力を変更するオプションが多数サポートされています。将来、これらのオプションは、変更または廃止される可能性があります。 -.LP -.RS 3 -.TP 3 -\-q -クラス名、JAR ファイル名、および \f2main\fP メソッドに渡された引数の出力を抑制し、ローカル VM 識別子の一覧のみを生成します。 -.TP 3 -\-m -main メソッドに渡される引数を出力します。この出力は、組み込まれている JVM に対して null になることもあります。 -.TP 3 -\-l -アプリケーションの主要なクラスのフルパッケージ名、またはアプリケーションの JAR ファイルへのフルパス名を出力します。 -.TP 3 -\-v -JVM に渡される引数を出力します。 -.TP 3 -\-V -フラグファイル (.hotspotrc ファイルまたは \-XX:Flags=<\f2filename\fP> の引数で指定されたファイル) を通じて JVM に渡される引数を出力します。 -.TP 3 -\-Joption -\f3jps\fP が呼び出す \f3java\fP 起動ツールに、\f2option\fP を渡します。たとえば、\f3\-J\-Xms48m\fP と指定すると、スタートアップメモリーは 48M バイトに設定されます。\f3\-J\fP を使って、Java で記述されたアプリケーションを実行する背後の VM にオプション渡すことは、よく行われています。 +.PP +\fIjps\fRコマンドでは、コマンドの出力を変更するオプションが多数サポートされています。将来、これらのオプションは、変更または廃止される可能性があります。 +.PP +\-q +.RS 4 +クラス名、JARファイル名、および\fImain\fRメソッドに渡された引数の出力を抑制し、ローカルVM識別子の一覧のみを生成します。 .RE - -.LP -.SS -ホスト識別子 -.LP -.LP -ホスト識別子、つまり \f2hostid\fP は、ターゲットシステムを示す文字列です。\f2hostid\fP 文字列の構文の大部分は、URI の構文に対応しています。 -.LP -.nf -\f3 -.fl -[\fP\f4protocol\fP\f3:][[//]\fP\f4hostname\fP\f3][:\fP\f4port\fP\f3][/\fP\f4servername\fP\f3]\fP -.br -\f3 -.fl -\fP -.fi - -.LP -.RS 3 -.TP 3 -protocol -通信プロトコルです。\f2protocol\fP が省略され、\f2hostname\fP が指定されていない場合、デフォルトのプロトコルが、プラットフォーム固有の最適化されたローカルプロトコルになります。\f2protocol\fP が省略され、\f2hostname\fP が指定されている場合は、デフォルトプロトコルは \f3rmi\fP になります。 -.TP 3 -hostname -ターゲットホストを示すホスト名または IP アドレスです。\f2hostname\fP が省略されている場合は、ターゲットホストはローカルホストになります。 -.TP 3 -port -リモートサーバーと通信するためのデフォルトポートです。\f2hostname\fP が省略されているか、\f2protocol\fP で最適化されたローカルプロトコルが指定されている場合、\f2port\fP は無視されます。そうでなければ、\f2port\fP パラメータの扱いは、実装によって異なります。デフォルトの \f3rmi\fP プロトコルの場合、\f2port\fP は、リモートホスト上の rmiregistry のポート番号を示します。\f2port\fP が省略され、\f2protocol\fP で \f3rmi\fP が指定されている場合、デフォルトの rmiregistry ポート (1099) が使用されます。 -.TP 3 -servername -このパラメータの扱いは、実装によって異なります。最適化されたローカルプロトコルの場合、このフィールドは無視されます。\f3rmi\fP プロトコルの場合、このパラメータは、リモートホスト上の RMI リモートオブジェクトの名前を示す文字列になります。jstatd(1) コマンドについては、\f3\-n\fP オプションを参照してください。 +.PP +\-m +.RS 4 +\fImain\fRメソッドに渡される引数を出力します。この出力は、組み込まれているJVMに対して\fInull\fRになることもあります。 .RE - -.LP -.SH "出力形式" -.LP -.LP -\f3jps\fP コマンドの出力は、次のパターンに従います。 -.LP +.PP +\-l +.RS 4 +アプリケーションの\fImain\fRクラスのフル・パッケージ名、またはアプリケーションのJARファイルへのフルパス名を出力します。 +.RE +.PP +\-v +.RS 4 +JVMに渡される引数を表示します。 +.RE +.PP +\-V +.RS 4 +クラス名、JARファイル名、およびmaiメソッドに渡された引数の出力を抑制し、ローカルVM識別子の一覧のみを生成します。 +.RE +.PP +\-J\fIoption\fR +.RS 4 +JVMに\fIoption\fRを渡します。optionには、Javaアプリケーション起動ツールのリファレンス・ページに記載されている\fIオプション\fRを1つ指定します。たとえば、\fI\-J\-Xms48m\fRと指定すると、スタートアップ・メモリーは48MBに設定されます。java(1)を参照してください。 +.RE +.SH "ホスト識別子" +.PP +ホスト識別子、つまり\fIhostid\fRは、ターゲット・システムを示す文字列です。\fIhostid\fR文字列の構文は、URIの構文に対応しています。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -\fP\f4lvmid\fP\f3 [ [ \fP\f4classname\fP\f3 | \fP\f4JARfilename\fP\f3 | "Unknown"] [ \fP\f4arg\fP\f3* ] [ \fP\f4jvmarg\fP\f3* ] ]\fP -.br -\f3 -.fl -\fP +[protocol:][[//]hostname][:port][/servername] .fi - -.LP -.LP -すべての出力トークンは空白で区切ります。\f2arg\fP の中で空白を使用すると、実際の定位置パラメータに引数をマッピングしようとするときに、あいまいになります。 -.br -.br -\f3注\fP: 将来のリリースでこの形式は変更される可能性があるため、\f3jps\fP の出力を解析するスクリプトは作成しないことをお勧めします。\f3jps\fP 出力を解析するスクリプトを作成すると、このツールの将来のリリースで、作成したスクリプトを変更する必要が予測されます。 -.br - -.LP +.if n \{\ +.RE +.\} +.PP +\fIprotocol\fR +.RS 4 +通信プロトコルです。\fIprotocol\fRが省略され、\fIhostname\fRが指定されていない場合、デフォルトのプロトコルが、プラットフォーム固有の最適化されたローカル・プロトコルになります。プロトコルが省略され、ホスト名が指定されている場合は、デフォルト・プロトコルは\fIrmi\fRになります。 +.RE +.PP +hostname +.RS 4 +ターゲット・ホストを示すホスト名またはIPアドレスです。\fIhostname\fRパラメータが省略されている場合は、ターゲット・ホストはローカル・ホストになります。 +.RE +.PP +port +.RS 4 +リモート・サーバーと通信するためのデフォルト・ポートです。\fIhostname\fRパラメータが省略されているか、\fIprotocol\fRパラメータが、最適化されたローカル・プロトコルを指定している場合、\fIport\fRパラメータは無視されます。それ以外の場合、\fIport\fRパラメータの扱いは、実装によって異なります。デフォルトの +\fIrmi\fRプロトコルの場合、\fIport\fRパラメータは、リモート・ホスト上のrmiregistryのポート番号を示します。\fIport\fRパラメータが省略されているか、\fIprotocol\fRパラメータが\fIrmi\fRを示している場合、デフォルトのrmiregistryポート(1099)が使用されます。 +.RE +.PP +servername +.RS 4 +このパラメータの扱いは、実装によって異なります。最適化されたローカル・プロトコルの場合、このフィールドは無視されます。\fIrmi\fRプロトコルの場合、このパラメータは、リモート・ホスト上のRMIリモート・オブジェクトの名前を示す文字列になります。詳細は、\fIjstatd\fRコマンドの\fI\-n\fRオプションを参照してください。 +.RE +.SH "出力フォーマット" +.PP +\fIjps\fRコマンドの出力は、次のパターンに従います。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +lvmid [ [ classname | JARfilename | "Unknown"] [ arg* ] [ jvmarg* ] ] +.fi +.if n \{\ +.RE +.\} +.PP +すべての出力トークンは空白文字で区切られます。\fIarg\fR値の中で空白を使用すると、実際の定位置パラメータに引数をマッピングしようとするときに、あいまいになります。 +.PP +\fB注意:\fR +将来のリリースでこの形式は変更される可能性があるため、\fIjps\fRの出力を解析するスクリプトは作成しないことをお薦めします。\fIjps\fR出力を解析するスクリプトを作成すると、このツールの将来のリリースで、作成したスクリプトの変更が必要になる可能性があります。 .SH "例" -.LP -.LP -この節では、\f3jps\fP コマンドの例を示します。 -.LP -.LP -ローカルホスト上で計測された JVM を一覧表示する場合: -.LP +.PP +この項では、\fIjps\fRコマンドの例を示します。 +.PP +ローカル・ホスト上で計測されたJVMを一覧表示する場合: +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -\fP\f3jps\fP -.br - -.fl -18027 Java2Demo.JAR -.br - -.fl +jps +18027 Java2Demo\&.JAR 18032 jps -.br - -.fl 18005 jstat -.br - -.fl .fi - -.LP -.LP -リモートホスト上で計測された JVM を一覧表示する場合: -.LP -.LP -この例では、\f3jstat\fP サーバーと、その内部 RMI レジストリまたは別の外部 \f3rmiregistry\fP プロセスのいずれかとが、リモートホストのデフォルトポート (ポート 1099) で実行されていると想定しています。また、ローカルホストが、リモートホストへの有効なアクセス権を持っていることも想定しています。この例には、\f2\-l\fP オプションも含まれ、クラス名または JAR ファイル名を詳細な形式で出力します。 -.LP -.nf -\f3 -.fl -\fP\f3jps \-l remote.domain\fP -.br - -.fl -3002 /opt/jdk1.7.0/demo/jfc/Java2D/Java2Demo.JAR -.br - -.fl -2857 sun.tools.jstatd.jstatd -.br - -.fl -.fi - -.LP -.LP -RMI レジストリにデフォルトではないポートを使用して、リモートホスト上で計測された JVM を一覧表示する場合: -.LP -.LP -この例では、内部 RMI レジストリがポート 2002 にバインドされた \f3jstatd\fP サーバーが、リモートホスト上で実行していると想定しています。また、\f2\-m\fP オプションを使用して、一覧表示されたそれぞれの Java アプリケーションの \f2main\fP メソッドに渡される引数を組み込んでいます。 -.LP -.nf -\f3 -.fl -\fP\f3jps \-m remote.domain:2002\fP -.br - -.fl -3002 /opt/jdk1.7.0/demo/jfc/Java2D/Java2Demo.JAR -.br - -.fl -3102 sun.tools.jstatd.jstatd \-p 2002 -.fl -.fi - -.LP -.SH "関連項目" -.LP -.RS 3 -.TP 2 -o -「java(1) \- Java アプリケーション起動ツール」 -.TP 2 -o -「jstat(1) \- Java 仮想マシン統計データ監視ツール」 -.TP 2 -o -「jstatd(1) \- 仮想マシン jstat デーモン」 -.TP 2 -o -「rmiregistry(1) \- Java リモートオブジェクトレジストリ」 +.if n \{\ .RE - -.LP - +.\} +.PP +次の例では、リモート・ホスト上で計測されたJVMを一覧表示します。この例では、\fIjstat\fRサーバーと、その内部RMIレジストリまたは別の外部rmiregistryプロセスのいずれかが、リモート・ホストのデフォルト・ポート(ポート1099)で実行されていると想定しています。また、ローカル・ホストが、リモート・ホストへの有効なアクセス権を持っていることも想定しています。この例には、\fI\-l\fRオプションも含まれ、クラス名またはJARファイル名を詳細な形式で出力します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +jps \-l remote\&.domain +3002 /opt/jdk1\&.7\&.0/demo/jfc/Java2D/Java2Demo\&.JAR +2857 sun\&.tools\&.jstatd\&.jstatd +.fi +.if n \{\ +.RE +.\} +.PP +次の例では、RMIレジストリにデフォルトではないポートを使用して、リモート・ホスト上で計測されたJVMを一覧表示します。この例では、内部RMIレジストリがポート2002にバインドされた\fIjstatd\fRサーバーが、リモート・ホスト上で実行されていると想定しています。また、\fI\-m\fRオプションを使用して、一覧表示されたそれぞれのJavaアプリケーションの\fImain\fRメソッドに渡される引数を組み込んでいます。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +jps \-m remote\&.domain:2002 +3002 /opt/jdk1\&.7\&.0/demo/jfc/Java2D/Java2Demo\&.JAR +3102 sun\&.tools\&.jstatd\&.jstatd \-p 2002 +.fi +.if n \{\ +.RE +.\} +.SH "関連項目" +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +java(1) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +jstat(1) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +jstatd(1) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +rmiregistry(1) +.RE +.br +'pl 8.5i +'bp diff --git a/jdk/src/solaris/doc/sun/man/man1/ja/jrunscript.1 b/jdk/src/solaris/doc/sun/man/man1/ja/jrunscript.1 index 3f83aa5c428..f53c29f59c7 100644 --- a/jdk/src/solaris/doc/sun/man/man1/ja/jrunscript.1 +++ b/jdk/src/solaris/doc/sun/man/man1/ja/jrunscript.1 @@ -1,208 +1,206 @@ -." Copyright (c) 2006, 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. -." -.TH jrunscript 1 "07 May 2011" - -.LP -.SH "名前" -jrunscript \- コマンド行スクリプトシェル -.LP -.RS 3 -.TP 2 -o -形式 -.TP 2 -o -パラメータ -.TP 2 -o -説明 -.TP 2 -o -オプション -.TP 2 -o -引数 -.TP 2 -o -例 -.TP 2 -o -関連項目 -.RE - -.LP -.SH "形式" -.LP +'\" t +.\" Copyright (c) 2006, 2013, Oracle and/or its affiliates. All rights reserved. +.\" Title: jrunscript +.\" Language: English +.\" Date: 2013年11月21日 +.\" SectDesc: スクリプティング・ツール +.\" Software: JDK 8 +.\" Arch: 汎用 +.\" +.\" 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. +.\" +.pl 99999 +.TH "jrunscript" "1" "2013年11月21日" "JDK 8" "スクリプティング・ツール" +.\" ----------------------------------------------------------------- +.\" * Define some portability stuff +.\" ----------------------------------------------------------------- +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.\" http://bugs.debian.org/507673 +.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" ----------------------------------------------------------------- +.\" * set default formatting +.\" ----------------------------------------------------------------- +.\" disable hyphenation +.nh +.\" disable justification (adjust text to left margin only) +.ad l +.\" ----------------------------------------------------------------- +.\" * MAIN CONTENT STARTS HERE * +.\" ----------------------------------------------------------------- +.SH "NAME" +jrunscript \- 対話型モードとバッチ・モードをサポートするコマンドライン・スクリプト・シェルを実行します。このコマンドは試験的なもので、サポートされていません。 +.SH "概要" +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -\fP\f3jrunscript\fP [ \f2options\fP ] [ arguments... ] -.fl +\fIjrunscript\fR [\fIoptions\fR] [\fIarguments\fR] .fi - -.LP -.SH "パラメータ" -.LP -.RS 3 -.TP 3 -options -オプションを使用する場合、コマンド名の直後に記述してください。 -.TP 3 -arguments -引数を使用する場合、オプションまたはコマンド名の直後に記述してください。 +.if n \{\ .RE - -.LP -.SH " 説明" -.LP -.LP -\f3jrunscript\fP はコマンド行スクリプトシェルです。jrunscript は、対話型 (読み取り \- 評価 \- 出力) モードとバッチ (\-f オプション) モードの両方のスクリプト実行をサポートします。これはスクリプト言語に依存しないシェルです。デフォルトの使用言語は JavaScript ですが、\-l オプションを使えばほかの言語も指定できます。jrunscript は、Java とスクリプト言語との通信によって「探求的なプログラミング」スタイルをサポートします。 -.LP -.LP -\f3注:\fP このツールは\f3試験的なもの\fPであり、将来の JDK のバージョンでは\f3利用できなくなる\fP可能性があります。 -.LP +.\} +.PP +\fIoptions\fR +.RS 4 +コマンドライン・オプション。オプションを参照してください。 +.RE +.PP +\fIarguments\fR +.RS 4 +引数を使用する場合、オプションまたはコマンド名の直後に記述してください。引数を参照してください。 +.RE +.SH "説明" +.PP +\fIjrunscript\fRコマンドは、言語に依存しないコマンドライン・スクリプト・シェルです。\fIjrunscript\fRは、対話型(read\-eval\-print)モードとバッチ(\fI\-f\fRオプション)・モードの両方のスクリプト実行をサポートします。デフォルトの使用言語はJavaScriptですが、\fI\-l\fRオプションを使用すれば他の言語も指定できます。\fIjrunscript\fRコマンドは、Javaとスクリプト言語との通信を使用して探求的なプログラミング・スタイルをサポートします。 .SH "オプション" -.LP -.RS 3 -.TP 3 -\-classpath path -スクリプトからのアクセス対象となるユーザーの .class ファイルの検索場所を指定します。 -.TP 3 -\-cp path -\-classpath \f2path\fP と同義です。 -.TP 3 -\-Dname=value -Java のシステムプロパティーを設定します。 -.TP 3 -\-J<flag> -jrunscript が実行されている Java 仮想マシンに <flag> を渡します。 -.TP 3 -\-l language -指定されたスクリプト言語を使用します。デフォルトでは JavaScript が使用されます。ほかのスクリプト言語を使用するには、対応するスクリプトエンジンの JAR ファイルも指定する必要があります。それには、\-cp、\-classpath のいずれかのオプションを使用します。 -.TP 3 -\-e script -指定されたスクリプトを評価します。このオプションを使えば、コマンド行にすべてが指定された「1 行」スクリプトを実行できます。 -.TP 3 -\-encoding encoding -スクリプトファイルの読み取り時に使用する文字エンコーディングを指定します。 -.TP 3 -\-f script\-file -指定されたスクリプトファイルを評価します (バッチモード)。 -.TP 3 -\-f \- -標準入力からスクリプトを読み取り、それを評価します (対話型モード)。 -.TP 3 -\-help\ -ヘルプメッセージを出力して終了します。 -.TP 3 -\-?\ -ヘルプメッセージを出力して終了します。 -.TP 3 -\-q\ -利用可能なすべてのスクリプトエンジンを一覧表示したあと、終了します。 +.PP +\-classpath \fIpath\fR +.RS 4 +スクリプトがアクセスする必要のあるクラス・ファイルの場所を示します。 +.RE +.PP +\-cp \fIpath\fR +.RS 4 +\fI\-classpath\fR +\fIpath\fRと同じです。 +.RE +.PP +\-D\fIname\fR=\fIvalue\fR +.RS 4 +Javaのシステム・プロパティを設定します。 +.RE +.PP +\-J\fIflag\fR +.RS 4 +\fIflag\fRを、\fIjrunscript\fRコマンドが実行されているJava仮想マシンに直接渡します。 +.RE +.PP +\-I \fIlanguage\fR +.RS 4 +指定されたスクリプト言語を使用します。デフォルトではJavaScriptが使用されます。他のスクリプト言語を使用するには、\fI\-cp\fRまたは\fI\-classpath\fRオプションを使用して、対応するスクリプト・エンジンのJARファイルを指定する必要があります。 +.RE +.PP +\-e \fIscript\fR +.RS 4 +指定されたスクリプトを評価します。このオプションを使用すれば、コマンドラインにすべてが指定された1行スクリプトを実行できます。 +.RE +.PP +\-encoding \fIencoding\fR +.RS 4 +スクリプト・ファイルの読取り時に使用する文字エンコーディングを指定します。 +.RE +.PP +\-f \fIscript\-file\fR +.RS 4 +指定されたスクリプト・ファイル(バッチ・モード)を評価します。 +.RE +.PP +\-f \- +.RS 4 +標準入力からスクリプトを読み取り、それを評価します(対話型モード)。 +.RE +.PP +\-help +.RS 4 +ヘルプ・メッセージを表示して終了します。 +.RE +.PP +\-? +.RS 4 +ヘルプ・メッセージを表示して終了します。 +.RE +.PP +\-q +.RS 4 +利用可能なすべてのスクリプト・エンジンを一覧表示したあと、終了します。 .RE - -.LP .SH "引数" -.LP -.LP -[arguments...] が存在していて、かつ \f3\-e\fP、\f3\-f\fP のいずれのオプションも使用されなかった場合、最初の引数がスクリプトファイルとなり、他の引数が存在する場合はスクリプト引数として渡されます。[arguments..] と、\f3\-e\fP または \f3\-f\fP が使用されている場合、すべての [arguments..] がスクリプト引数として渡されます。[arguments..]、\f3\-e\fP、\f3\-f\fP がどれも存在しなかった場合は、対話型モードが使用されます。スクリプトからスクリプト引数を使用するには、「arguments」という名前の String 配列型のエンジン変数を使用します。 -.LP +.PP +argumentsが存在していて、かつ\fI\-e\fR、\fI\-f\fRのいずれのオプションも使用されなかった場合、最初の引数がスクリプト・ファイルとなり、他の引数が存在する場合はスクリプトに渡されます。argumentsと、\fI\-e\fRまたは\fI\-f\fRオプションが使用されている場合、すべてのargumentsがスクリプトに渡されます。arguments、\fI\-e\fR、\fI\-f\fRがどれも存在しなかった場合は、対話型モードが使用されます。スクリプトからスクリプト引数を使用するには、\fIarguments\fRという名前の\fIString\fR配列型のエンジン変数を使用します。 .SH "例" -.LP -.SS -インラインスクリプトの実行 -.LP +.SS "インライン・スクリプトの実行" +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -jrunscript \-e "print('hello world')" -.fl -jrunscript \-e "cat('http://java.sun.com')" -.fl -\fP +jrunscript \-e "print(\*(Aqhello world\*(Aq)" +jrunscript \-e "cat(\*(Aqhttp://www\&.example\&.com\*(Aq)" .fi - -.LP -.SS -指定された言語を使用し、指定されたスクリプトファイルを評価する -.LP +.if n \{\ +.RE +.\} +.SS "指定された言語の使用およびスクリプト・ファイルの評価" +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -jrunscript \-l js \-f test.js -.fl -\fP +jrunscript \-l js \-f test\&.js .fi - -.LP -.SS -対話型モード -.LP +.if n \{\ +.RE +.\} +.SS "対話型モード" +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl jrunscript -.fl -js> print('Hello World\\n'); -.fl +js> print(\*(AqHello World\en\*(Aq); Hello World -.fl js> 34 + 55 -.fl -89.0 -.fl -js> t = new java.lang.Thread(function() { print('Hello World\\n'); }) -.fl +89\&.0 +js> t = new java\&.lang\&.Thread(function() { print(\*(AqHello World\en\*(Aq); }) Thread[Thread\-0,5,main] -.fl -js> t.start() -.fl +js> t\&.start() js> Hello World -.fl - -.fl -js> -.fl -\fP -.fi - -.LP -.SS -スクリプト引数を指定してスクリプトファイルを実行する -.LP -.nf -\f3 -.fl -jrunscript test.js arg1 arg2 arg3 -.fl -\fP -.fi - -.LP -test.js が実行対象となるスクリプトファイルであり、arg1、arg2、および arg3 はスクリプト引数としてスクリプトに渡されます。スクリプトは「arguments」配列を使ってこれらにアクセスできます。 -.SH "関連項目" -.LP -.LP -JavaScript が使用される場合、jrunscript は、最初のユーザー定義スクリプトを評価する前に、いくつかの組み込み関数や組み込みオブジェクトを初期化します。これらの JavaScript 組み込み機能については、jsdocs を参照してください。 -.LP +js> +.fi +.if n \{\ +.RE +.\} +.SS "スクリプト引数を指定したスクリプト・ファイルの実行" +.PP +test\&.jsファイルはスクリプト・ファイルです。\fIarg1\fR、\fIarg2\fRおよび\fIarg3\fRの各引数がスクリプトに渡されます。スクリプトはarguments配列を使用してこれらの引数にアクセスできます。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +jrunscript test\&.js arg1 arg2 arg3 +.fi +.if n \{\ +.RE +.\} +.SH "関連項目" +.PP +JavaScriptが使用される場合、ユーザー定義スクリプトを評価する前に、\fIjrunscript\fRコマンドはいくつかの組込み関数や組込みオブジェクトを初期化します。これらのJavaScriptの組込みについては、http://code\&.google\&.com/p/jsdoc\-toolkit/にある +JsDoc\-Toolkitを参照してください。 +.br +'pl 8.5i +'bp diff --git a/jdk/src/solaris/doc/sun/man/man1/ja/jsadebugd.1 b/jdk/src/solaris/doc/sun/man/man1/ja/jsadebugd.1 index 077543a2367..0425f1af70a 100644 --- a/jdk/src/solaris/doc/sun/man/man1/ja/jsadebugd.1 +++ b/jdk/src/solaris/doc/sun/man/man1/ja/jsadebugd.1 @@ -1,142 +1,171 @@ -." Copyright (c) 2004, 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. -." -.TH jsadebugd 1 "07 May 2011" - -.LP -.SH "名前" -jsadebugd \- サービスアビリティーエージェントデバッグデーモン -.LP -.RS 3 -.TP 2 -o -形式 -.TP 2 -o -パラメータ -.TP 2 -o -説明 -.TP 2 -o -関連項目 -.RE - -.LP -.SH "形式" -.LP +'\" t +.\" Copyright (c) 2004, 2013, Oracle and/or its affiliates. All rights reserved. +.\" Title: jsadebugd +.\" Language: English +.\" Date: 2013年11月21日 +.\" SectDesc: トラブルシューティング・ツール +.\" Software: JDK 8 +.\" Arch: 汎用 +.\" +.\" 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. +.\" +.pl 99999 +.TH "jsadebugd" "1" "2013年11月21日" "JDK 8" "トラブルシューティング・ツール" +.\" ----------------------------------------------------------------- +.\" * Define some portability stuff +.\" ----------------------------------------------------------------- +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.\" http://bugs.debian.org/507673 +.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" ----------------------------------------------------------------- +.\" * set default formatting +.\" ----------------------------------------------------------------- +.\" disable hyphenation +.nh +.\" disable justification (adjust text to left margin only) +.ad l +.\" ----------------------------------------------------------------- +.\" * MAIN CONTENT STARTS HERE * +.\" ----------------------------------------------------------------- +.SH "NAME" +jsadebugd \- Javaプロセスまたはコア・ファイルに接続し、デバッグ・サーバーとして機能します。このコマンドは試験的なもので、サポートされていません。 +.SH "概要" +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -\fP\f3jsadebugd\fP pid [ server\-id ] -.fl -\f3jsadebugd\fP executable core [ server\-id ] -.fl +\fIjsadebugd\fR \fIpid\fR [ \fIserver\-id\fR ] .fi - -.LP -.SH "パラメータ" -.LP -.RS 3 -.TP 3 -pid -デバッグサーバーが接続するプロセスのプロセス ID です。プロセスは Java プロセスである必要があります。マシン上で実行している Java プロセスの一覧を取得するには、jps(1) を使用します。単一のプロセスに接続できるデバッグサーバーのインスタンスは、1 つに制限されます。 +.if n \{\ .RE - -.LP -.RS 3 -.TP 3 -executable +.\} +.sp +.if n \{\ +.RS 4 +.\} +.nf +\fIjsadebugd\fR \fIexecutable\fR \fIcore\fR [ \fIserver\-id\fR ] +.fi +.if n \{\ .RE - -.LP -.RS 3 -.TP 3 -コアダンプの作成元になる Java 実行可能ファイルです。 +.\} +.PP +\fIpid\fR +.RS 4 +デバッグ・サーバーが接続するプロセスのプロセスIDです。プロセスはJavaプロセスである必要があります。マシン上で実行しているJavaプロセスの一覧を取得するには、jps(1)コマンドを使用します。単一のプロセスに接続できるデバッグ・サーバーのインスタンスは、1つに制限されます。 .RE - -.LP -.RS 3 -.TP 3 -core -デバッグサーバーを接続するコアファイルです。 +.PP +\fI実行可能ファイル\fR +.RS 4 +コア・ダンプの作成元のJava実行可能ファイル。 .RE - -.LP -.RS 3 -.TP 3 -server\-id -複数のデバッグサーバーが同一のマシン上で実行している場合に必要になる、オプション固有の ID です。この ID は、リモートクライアントが、接続先のデバッグサーバーを特定するために使用する必要があります。この ID は、単一のマシン内で一意でなければなりません。 +.PP +\fIコア\fR +.RS 4 +デバッグ・サーバーを接続するコア・ファイルです。 +.RE +.PP +\fIserver\-id\fR +.RS 4 +複数のデバッグ・サーバーが同一のマシン上で実行されている場合に必要になる、オプションの一意のIDです。このIDは、リモート・クライアントが、接続先のデバッグ・サーバーを特定するために使用する必要があります。このIDは、単一のマシン内で一意にする必要があります。 .RE - -.LP .SH "説明" -.LP -.LP -\f3jsadebugd\fP は、Java プロセスまたはコアファイルに接続し、デバッグサーバーとして機能します。jstack(1)、jmap(1)、および jinfo(1) などのリモートクライアントは、Java Remote Method Invocation (RMI) を使用しているサーバーに接続できます。 \f2jsadebugd\fP を起動する前に、次のようにして -.na -\f2rmiregistry\fP @ -.fi -http://java.sun.com/javase/6/docs/technotes/tools/index.html#rmi を起動する必要があります。 -.LP +.PP +\fIjsadebugd\fRコマンドは、Javaプロセスまたはコア・ファイルに接続し、デバッグ・サーバーとして機能します。\fIjstack\fR、\fIjmap\fRおよび\fIjinfo\fRなどのリモート・クライアントは、Java Remote Method Invocation (RMI)を使用しているサーバーに接続できます。\fIjsadebugd\fRコマンドを起動する前に、\fIrmiregistry\fRコマンドでRMIレジストリを次のように起動します。\fI$JAVA_HOME\fRはJDKのインストール・ディレクトリです。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -\fP\f4rmiregistry \-J\-Xbootclasspath/p:$JAVA_HOME/lib/sajdi.jar\fP\f3 -.fl -\fP +rmiregistry \-J\-Xbootclasspath/p:$JAVA_HOME/lib/sajdi\&.jar .fi - -.LP -.LP -ここで、 \f2$JAVA_HOME\fP は JDK インストールディレクトリです。rmiregistry が起動していない場合、jsadebugd は標準 (1099) ポートの rmiregistry を内部で起動します。デバッグサーバーは、SIGINT を送信する (Ctrl+C を押す) ことにより停止できます。 -.LP -.LP -\f3注\fP \- このユーティリティーはサポート対象外であり、将来の JDK のバージョンでは利用できなくなる可能性があります。dbgeng.dll が存在していない Windows システムでは、「Debugging Tools For Windows」をインストールしないとこれらのツールが正常に動作しません。また、 \f2PATH\fP 環境変数には、ターゲットプロセスによって使用される \f2jvm.dll\fP の場所、またはクラッシュダンプファイルが生成された場所が含まれるようにしてください。 -.LP -.LP -次に例を示します。 \f2set PATH=<jdk>\\jre\\bin\\client;%PATH%\fP -.LP -.SH "関連項目" -.LP -.RS 3 -.TP 2 -o -jinfo(1) -.TP 2 -o -jmap(1) -.TP 2 -o -jps(1) -.TP 2 -o -jstack(1) -.TP 2 -o -.na -\f2rmiregistry\fP @ -.fi -http://java.sun.com/javase/6/docs/technotes/tools/index.html#rmi +.if n \{\ .RE - -.LP - +.\} +.PP +RMIレジストリが起動していない場合、\fIjsadebugd\fRコマンドはRMIレジストリを標準(1099)ポートで内部で起動します。デバッグ・サーバーは、\fISIGINT\fRを送信することにより停止できます。SIGINTを送信するには、\fB[Ctrl] + [C]\fRを押します。 +.PP +\fB注意:\fR +このユーティリティはサポート対象外であり、将来のJDKのリリースでは利用できなくなる可能性があります。\fIdbgeng\&.dll\fRが存在していないWindowsシステムでは、Debugging Tools For Windowsをインストールしないとこれらのツールが正常に動作しません。\fIPATH\fR環境変数には、ターゲット・プロセスによって使用されるjvm\&.dllの場所、またはクラッシュ・ダンプ・ファイルが生成された場所が含まれるようにしてください。例: +\fIs\fR\fIet PATH=%JDK_HOME%\ejre\ebin\eclient;%PATH%\fR +.SH "関連項目" +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +jinfo(1) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +jmap(1) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +jps(1) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +jstack(1) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +rmiregistry(1) +.RE +.br +'pl 8.5i +'bp diff --git a/jdk/src/solaris/doc/sun/man/man1/ja/jstack.1 b/jdk/src/solaris/doc/sun/man/man1/ja/jstack.1 index 043a6fb72a3..0afbad29b1d 100644 --- a/jdk/src/solaris/doc/sun/man/man1/ja/jstack.1 +++ b/jdk/src/solaris/doc/sun/man/man1/ja/jstack.1 @@ -1,172 +1,210 @@ -." Copyright (c) 2004, 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. -." -.TH jstack 1 "07 May 2011" - -.LP -.SH "名前" -jstack \- スタックトレース -.br - -.LP -.RS 3 -.TP 2 -o -形式 -.TP 2 -o -パラメータ -.br -.TP 2 -o -説明 -.TP 2 -o -オプション -.TP 2 -o -関連項目 -.TP 2 -o -既知のバグ -.br -.RE - -.LP -.SH "形式" -.LP +'\" t +.\" Copyright (c) 2004, 2013, Oracle and/or its affiliates. All rights reserved. +.\" Title: jstack +.\" Language: English +.\" Date: 2013年11月21日 +.\" SectDesc: トラブルシューティング・ツール +.\" Software: JDK 8 +.\" Arch: 汎用 +.\" +.\" 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. +.\" +.pl 99999 +.TH "jstack" "1" "2013年11月21日" "JDK 8" "トラブルシューティング・ツール" +.\" ----------------------------------------------------------------- +.\" * Define some portability stuff +.\" ----------------------------------------------------------------- +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.\" http://bugs.debian.org/507673 +.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" ----------------------------------------------------------------- +.\" * set default formatting +.\" ----------------------------------------------------------------- +.\" disable hyphenation +.nh +.\" disable justification (adjust text to left margin only) +.ad l +.\" ----------------------------------------------------------------- +.\" * MAIN CONTENT STARTS HERE * +.\" ----------------------------------------------------------------- +.SH "NAME" +jstack \- Javaプロセス、コア・ファイルまたはリモート・デバッグ・サーバーに対するJavaスレッドのスタック・トレースを出力します。このコマンドは試験的なもので、サポートされていません。 +.SH "概要" +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -\fP\f3jstack\fP [ option ] pid -.fl -\f3jstack\fP [ option ] executable core -.fl -\f3jstack\fP [ option ] [server\-id@]remote\-hostname\-or\-IP -.fl +\fIjstack\fR [ \fIoptions\fR ] \fIpid\fR .fi - -.LP -.SH "パラメータ" -.LP -.LP -各オプションは互いに排他的です。オプションを使用する場合、コマンド名の直後に記述します。オプションを参照してください。 -.LP -.RS 3 -.TP 3 -pid -印刷するスタックトレースのプロセス ID です。プロセスは Java プロセスである必要があります。マシン上で実行している Java プロセスの一覧を取得するには、jps(1) を使用します。 +.if n \{\ .RE - -.LP -.RS 3 -.TP 3 -executable -コアダンプの作成元の Java 実行可能ファイルです。 -.br -.TP 3 -core -印刷するスタックトレースのコアファイルです。 -.br -.TP 3 -remote\-hostname\-or\-IP -リモートデバッグサーバー (jsadebugd(1) を参照) のホスト名または IP アドレスです。 -.br -.TP 3 -server\-id -複数のデバッグサーバーが同一のリモートホストで実行している場合の、オプション固有の ID です。 +.\} +.sp +.if n \{\ +.RS 4 +.\} +.nf +\fIjstack\fR [ \fIoptions\fR ] \fIexecutable\fR \fIcore\fR +.fi +.if n \{\ +.RE +.\} +.sp +.if n \{\ +.RS 4 +.\} +.nf +\fIjstack\fR [ \fIoptions\fR ] [ \fIserver\-id\fR@ ] \fIremote\-hostname\-or\-IP\fR +.fi +.if n \{\ +.RE +.\} +.PP +\fIoptions\fR +.RS 4 +コマンドライン・オプション。オプションを参照してください。 +.RE +.PP +\fIpid\fR +.RS 4 +出力するスタック・トレースのプロセスIDです。プロセスはJavaプロセスである必要があります。マシン上で実行しているJavaプロセスの一覧を取得するには、jps(1)コマンドを使用します。 +.RE +.PP +\fI実行可能ファイル\fR +.RS 4 +コア・ダンプの作成元のJava実行可能ファイル。 +.RE +.PP +\fIコア\fR +.RS 4 +出力するスタック・トレースのコア・ファイルです。 +.RE +.PP +\fIremote\-hostname\-or\-IP\fR +.RS 4 +リモート・デバッグ・サーバーの\fIホスト名\fRまたは\fIIP\fRアドレス。jsadebugd(1)を参照してください。 +.RE +.PP +\fIserver\-id\fR +.RS 4 +複数のデバッグ・サーバーが同一のリモート・ホストで実行している場合の、オプション固有のID。 .RE - -.LP .SH "説明" -.LP -.LP -\f3jstack\fP は、指定された Java プロセスやコアファイルまたはリモートデバッグサーバーに対する Java スレッドの Java スタックトレースを印刷します。Java フレームごとに、フルクラス名、メソッド名、「bci」(バイトコードインデックス)、および行番号 (利用可能な場合) が印刷されます。\-m オプションを使用すると、jstack は、すべてのスレッドの Java フレームとネイティブフレームの両方を、「pc」(プログラムカウンタ) とともに印刷します。ネイティブフレームごとに、「pc」にもっとも近いネイティブシンボル (利用可能な場合) が印刷されます。C++ 分解名は分解解除されません。C++ 名を分解解除するには、このコマンドの出力を \f3c++filt\fP にパイプします。指定されたプロセスが 64 ビット VM 上で実行されている場合、\f2\-J\-d64\fP オプションを指定しなければならない場合があります。次に例を示します。 -.br - -.LP +.PP +\fIjstack\fRコマンドは、指定されたJavaプロセス、コア・ファイルまたはリモート・デバッグ・サーバーに対するJavaスレッドのJavaスタック・トレースを出力します。Javaフレームごとに、フルクラス名、メソッド名、バイトコード・インデックス(bci)、および行番号(利用可能な場合)が出力されます。\fI\-m\fRオプションを使用すると、\fIjstack\fRコマンドは、すべてのスレッドのJavaフレームとネイティブ・フレームの両方を、プログラム・カウンタ(PC)とともに出力します。ネイティブ・フレームごとに、PCに最も近いネイティブ・シンボル(利用可能な場合)が出力されます。C++分解名は分解解除されません。C++名を分解解除するには、このコマンドの出力を\fIc++filt\fRにパイプします。指定されたプロセスが64ビットJava仮想マシン上で実行されている場合は、\fI\-J\-d64\fRオプションを指定する必要があります(例: +\fIjstack \-J\-d64 \-m pid\fR)。 +.PP +\fB注意\fR +このユーティリティはサポート対象外であり、将来のJDKのリリースでは利用できなくなる可能性があります。dbgeng\&.dllファイルが存在していないWindowsシステムでは、Debugging Tools For Windowsをインストールしないとこれらのツールが正常に動作しません。また、\fIPATH\fR環境変数には、ターゲット・プロセスによって使用されるjvm\&.dllの場所、またはクラッシュ・ダンプ・ファイルが生成された場所が含まれるようにしてください。次に例を示します。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -jstack \-J\-d64 \-m pid -.fl -\fP +set PATH=<jdk>\ejre\ebin\eclient;%PATH% .fi - -.LP -.LP -\f3注\fP \- このユーティリティーはサポート対象外であり、将来の JDK のバージョンでは利用できなくなる可能性があります。dbgeng.dll が存在していない Windows システムでは、「Debugging Tools For Windows」をインストールしないとこれらのツールが正常に動作しません。また、 \f2PATH\fP 環境変数には、ターゲットプロセスによって使用される \f2jvm.dll\fP の場所、またはクラッシュダンプファイルが生成された場所が含まれるようにしてください。 -.LP -.LP -次に例を示します。 \f2set PATH=<jdk>\\jre\\bin\\client;%PATH%\fP -.LP +.if n \{\ +.RE +.\} .SH "オプション" -.LP -.RS 3 -.TP 3 -\-F -「jstack [\-l] pid」が応答しない場合にスタックダンプを強制します。 -.TP 3 -\-l -長形式のリスト。所有 java.util.concurrent の -.na -\f2所有できるシンクロナイザ\fP @ -.fi -http://java.sun.com/javase/6/docs/api/java/util/concurrent/locks/AbstractOwnableSynchronizer.htmlの一覧など、ロックについての追加情報を印刷します。 -.TP 3 -\-m -混合モード (Java およびネイティブ C/C++ フレームの両方) のスタックトレースを印刷します。 -.TP 3 -\-h -ヘルプメッセージを印刷します。 -.br -.br -.TP 3 -\-help -ヘルプメッセージを出力します。 -.br +.PP +\-F +.RS 4 +\fIjstack\fR +[\fI\-l\fR] +\fIpid\fRが応答しない場合にスタック・ダンプを強制します。 .RE - -.LP +.PP +\-l +.RS 4 +長形式のリスト。所有\fIjava\&.util\&.concurrent\fRの所有できるシンクロナイザの一覧など、ロックについての追加情報を印刷します。http://docs\&.oracle\&.com/javase/8/docs/api/java/util/concurrent/locks/AbstractOwnableSynchronizer\&.htmlにある +\fIAbstractOwnableSynchronizer\fRクラス記述を参照してください +.RE +.PP +\-m +.RS 4 +JavaおよびネイティブC/C++フレームの両方を持つ混合モードのスタック・トレースを出力します。 +.RE +.PP +\-h +.RS 4 +ヘルプ・メッセージが出力されます。 +.RE +.PP +\-help +.RS 4 +ヘルプ・メッセージが出力されます。 +.RE +.SH "既知の不具合" +.PP +混合モードのスタック・トレースでは、\fI\-m\fRオプションはリモート・デバッグ・サーバーでは機能しません。 .SH "関連項目" -.LP -.RS 3 -.TP 2 -o -pstack(1) -.TP 2 -o -c++filt(1) -.TP 2 -o -jps(1) -.TP 2 -o -jsadebugd(1) +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +pstack(1) .RE - -.LP -.SH "既知のバグ" -.LP -.LP -混合モードのスタックトレース (\-m オプション使用) は、リモートデバッグサーバーでは機能しません。 -.LP - +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +C++filt(1) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +jps(1) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +jsadebugd(1) +.RE +.br +'pl 8.5i +'bp diff --git a/jdk/src/solaris/doc/sun/man/man1/ja/jstat.1 b/jdk/src/solaris/doc/sun/man/man1/ja/jstat.1 index 07e724add93..046a2f37b7f 100644 --- a/jdk/src/solaris/doc/sun/man/man1/ja/jstat.1 +++ b/jdk/src/solaris/doc/sun/man/man1/ja/jstat.1 @@ -1,5446 +1,619 @@ -." Copyright (c) 2004, 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. -." -.TH jstat 1 "07 May 2011" - -.LP -.SH "名前" -jstat \- Java 仮想マシン統計データ監視ツール -.LP -.RS 3 -.TP 2 -o -形式 -.TP 2 -o -パラメータ -.TP 2 -o -説明 -.TP 2 -o -仮想マシン識別子 -.TP 2 -o -オプション -.RS 3 -.TP 2 -* -一般的なオプション -.TP 2 -* -出力オプション -.RE -.TP 2 -o -例 -.TP 2 -o -関連項目 -.RE - -.LP -.SH "形式" -.LP +'\" t +.\" Copyright (c) 2004, 2013, Oracle and/or its affiliates. All rights reserved. +.\" Title: jstat +.\" Language: English +.\" Date: 2011年5月10日 +.\" SectDesc: モニタリング・ツール +.\" Software: JDK 8 +.\" Arch: 汎用 +.\" +.\" 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. +.\" +.pl 99999 +.TH "jstat" "1" "2011年5月10日" "JDK 8" "モニタリング・ツール" +.\" ----------------------------------------------------------------- +.\" * Define some portability stuff +.\" ----------------------------------------------------------------- +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.\" http://bugs.debian.org/507673 +.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" ----------------------------------------------------------------- +.\" * set default formatting +.\" ----------------------------------------------------------------- +.\" disable hyphenation +.nh +.\" disable justification (adjust text to left margin only) +.ad l +.\" ----------------------------------------------------------------- +.\" * MAIN CONTENT STARTS HERE * +.\" ----------------------------------------------------------------- +.SH "NAME" +jstat \- Java仮想マシン(JVM)の統計を監視します。このコマンドは試験的なもので、サポートされていません。 +.SH "概要" +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -\fP\f3jstat\fP [ \f2generalOption\fP | \f2outputOptions\fP \f2vmid\fP [\f2interval\fP[s|ms] [\f2count\fP]] ] -.fl +\fIjstat\fR [ \fIgeneralOption\fR | \fIoutputOptions vmid\fR [ \fIinterval\fR[s|ms] [ \fIcount \fR] ] .fi - -.LP -.SH "パラメータ" -.LP -.RS 3 -.TP 3 -generalOption -単独で使用する一般的なコマンド行オプションです (\-help、\-options、または \-version)。 -.TP 3 -outputOptions -単一の \f2statOption\fP と、\-t、\-h、および \-J オプションのいずれかを組み合わせた、1 つまたは複数の出力オプションです。 -.TP 3 -vmid -ターゲットの Java 仮想マシン (JVM) を示す文字列である仮想マシン識別子です。一般的な構文は次のようになります。 -.nf -\f3 -.fl -[\fP\f4protocol\fP\f3:][//]\fP\f4lvmid\fP[@\f2hostname\fP[:\f2port\fP]/\f2servername\fP] -.fl -.fi -vmid 文字列の構文の大部分は、URI の構文に対応しています。\f2vmid\fP は、ローカル JVM を表す単純な整数から、通信プロトコル、ポート番号、および他の実装固有の値を示す複雑な構造まで、さまざまに異なります。詳細は、「仮想マシン識別子」を参照してください。 -.TP 3 -interval[s|ms] -秒 (s) またはミリ秒 (ms) のうち指定した単位でのサンプリング間隔です。デフォルトの単位はミリ秒です。正の整数でなければなりません。これが指定された場合、\f3jstat\fP は interval ごとに出力を生成します。 -.TP 3 -count -表示するサンプル数です。デフォルト値は無限です。つまり、\f3jstat\fP は、ターゲット JVM が終了するまで、または \f3jstat\fP コマンドが終了するまで、統計データを表示します。正の整数でなければなりません。 +.if n \{\ .RE - -.LP -.SH " 説明" -.LP -.LP -\f3jstat\fP ツールは、設置されている HotSpot Java 仮想マシン (JVM) のパフォーマンス統計データを表示します。ターゲット JVM は、仮想マシン識別子、つまり下記の \f2vmid\fP オプションによって識別されます。 -.LP -.LP -\f3注\fP: このユーティリティーはサポート対象外であり、将来の JDK のバージョンでは利用できなくなる可能性があります。現在、Windows 98 および Windows Me プラットフォームでは使用できません。 -.br - -.LP -.SS -仮想マシン識別子 -.LP -.LP -\f2vmid\fP 文字列の構文の大部分は、URI の構文に対応しています。 -.LP -.nf -\f3 -.fl -[\fP\f4protocol\fP\f3:][//]\fP\f4lvmid\fP[@\f2hostname\fP][:\f2port\fP][/\f2servername\fP] -.fl -.fi - -.LP -.RS 3 -.TP 3 -protocol -通信プロトコルです。\f2protocol\fP が省略され、\f2hostname\fP が指定されていない場合、デフォルトのプロトコルが、プラットフォーム固有の最適化されたローカルプロトコルになります。\f2protocol\fP が省略され、\f2hostname\fP が指定されている場合は、デフォルトプロトコルは \f3rmi\fP になります。 -.TP 3 -lvmid -ターゲット JVM のローカル仮想マシン識別子です。\f2lvmid\fP は、システム上の JVM を一意に識別するプラットフォーム固有の値です。\f2lvmid\fP は、仮想マシン識別子の唯一の必須要素です。\f2lvmid\fP は、絶対というわけではありませんが、一般的にはターゲット JVM プロセスに対するオペレーティングシステムのプロセス識別子です。jps(1) コマンドを使用して、\f2lvmid\fP を指定できます。また、Unix プラットフォームでは\f3ps\fP コマンドを使用して、Windows では Windows タスクマネージャーを使用して、\f2lvmid\fP を指定できます。 -.TP 3 -hostname -ターゲットホストを示すホスト名または IP アドレスです。\f2hostname\fP が省略されている場合は、ターゲットホストはローカルホストになります。 -.TP 3 -port -リモートサーバーと通信するためのデフォルトポートです。\f2hostname\fP が省略されているか、\f2protocol\fP で最適化されたローカルプロトコルが指定されている場合、\f2port\fP は無視されます。そうでなければ、\f2port\fP パラメータの扱いは、実装によって異なります。デフォルトの \f3rmi\fP プロトコルの場合、\f2port\fP は、リモートホスト上の rmiregistry のポート番号を示します。\f2port\fP が省略され、\f2protocol\fP で \f3rmi\fP が指定されている場合、デフォルトの rmiregistry ポート (1099) が使用されます。 -.TP 3 -servername -このパラメータの扱いは、実装によって異なります。最適化されたローカルプロトコルの場合、このフィールドは無視されます。\f3rmi\fP プロトコルの場合は、このパラメータは、リモートホスト上の RMI リソースオブジェクトの名前を示します。 +.\} +.PP +\fIgeneralOption\fR +.RS 4 +単独で使用する一般的なコマンドライン・オプションです(\fI\-help\fRまたは\fI\-options\fR)。一般的なオプションを参照してください。 +.RE +.PP +\fIoutputOptions\fR +.RS 4 +単一の\fIstatOption\fRと\fI\-t\fR、\fI\-h\fRおよび\fI\-J\fRのいずれかのオプションで構成される1つ以上の出力オプション。出力オプションを参照してください。 +.RE +.PP +\fIvmid\fR +.RS 4 +ターゲットJVMを示す文字列である仮想マシン識別子です。一般的な構文は次のとおりです。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +[protocol:][//]lvmid[@hostname[:port]/servername] +.fi +.if n \{\ +.RE +.\} +\fIvmid\fR文字列の構文は、URIの構文に対応しています。\fIvmid\fR文字列は、ローカルJVMを表す単純な整数から、通信プロトコル、ポート番号、および他の実装固有の値を示す複雑な構造まで、様々に異なります。仮想マシン識別子を参照してください。 +.RE +.PP +\fIinterval\fR [s|ms] +.RS 4 +秒(s)またはミリ秒(ms)のうち指定した単位でのサンプリング間隔です。デフォルトの単位はミリ秒です。正の整数にする必要があります。指定した場合、\fIjstat\fRコマンドは各間隔で出力を生成します。 +.RE +.PP +\fIcount\fR +.RS 4 +表示するサンプル数です。デフォルト値は無限で、ターゲットJVMが終了するまで、または\fIjstat\fRコマンドが終了するまで、\fIjstat\fRコマンドは統計データを表示します。この値は、正の整数である必要があります。 +.RE +.SH "説明" +.PP +\fIjstat\fRコマンドは、設置されているJava HotSpot VMのパフォーマンス統計データを表示します。ターゲットJVMは、仮想マシン識別子または\fIvmid\fRオプションによって識別されます。 +.SH "仮想マシン識別子" +.PP +\fIvmid\fR文字列の構文は、URIの構文に対応しています。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +[protocol:][//]lvmid[@hostname[:port]/servername] +.fi +.if n \{\ +.RE +.\} +.PP +\fIprotocol\fR +.RS 4 +通信プロトコルです。\fIprotocol\fR値が省略され、ホスト名が指定されていない場合、デフォルトのプロトコルが、プラットフォーム固有の最適化されたローカル・プロトコルになります。\fIprotocol\fR値が省略され、ホスト名が指定されている場合は、デフォルト・プロトコルは\fIrmi\fRになります。 +.RE +.PP +\fIlvmid\fR +.RS 4 +ターゲットJVMのローカル仮想マシン識別子です。\fIlvmid\fRは、システム上のJVMを一意に識別するプラットフォーム固有の値です。\fIlvmid\fRは、仮想マシン識別子の唯一の必須要素です。\fIlvmid\fRは、一般的にはターゲットJVMプロセスに対するオペレーティング・システムのプロセス識別子ですが、必ずしもそうであるとは限りません。\fIjps\fRコマンドを使用して、\fIlvmid\fRを特定できます。また、UNIXプラットフォームでは\fIps\fRコマンドを使用して、WindowsではWindowsタスク・マネージャを使用して、\fIlvmid\fRを特定できます。 +.RE +.PP +\fIhostname\fR +.RS 4 +ターゲット・ホストを示すホスト名またはIPアドレスです。\fIhostname\fR値が省略されている場合は、ターゲット・ホストはローカル・ホストになります。 +.RE +.PP +\fIport\fR +.RS 4 +リモート・サーバーと通信するためのデフォルト・ポートです。\fIhostname\fR値が省略されているか、最適化されたローカル・プロトコルが\fIprotocol\fR値に指定されている場合、\fIport\fR値は無視されます。それ以外の場合、\fIport\fRパラメータの扱いは、実装によって異なります。デフォルトの\fIrmi\fRプロトコルの場合、ポート値は、リモート・ホスト上のrmiregistryのポート番号を示します。\fIport\fR値が省略され、\fIprotocol\fR値で\fIrmi\fRが指定されている場合、デフォルトのrmiregistryポート(1099)が使用されます。 +.RE +.PP +\fIservername\fR +.RS 4 +\fIservername\fRパラメータの扱いは、実装によって異なります。最適化されたローカル・プロトコルの場合、このフィールドは無視されます。\fIrmi\fRプロトコルの場合、これは、リモート・ホスト上のRMIリソース・オブジェクトの名前を表します。 .RE - -.LP .SH "オプション" -.LP -.LP -\f3jstat\fP コマンドは、一般的なオプションと出力オプションの 2 つのタイプのオプションをサポートしています。一般的なオプションを使用した場合、\f3jstat\fP は簡単な使用率およびバージョン情報を表示します。出力オプションでは、統計データ出力の内容と形式を指定します。 -.br - -.LP -.LP -\f3注\fP: すべてのオプションとその機能は、将来のリリースで変更または廃止される可能性があります。 -.LP -.SS -一般的なオプション -.LP -.LP +.PP +\fIjstat\fRコマンドは、一般的なオプションと出力オプションの2つのタイプのオプションをサポートしています。一般的なオプションを使用した場合、\fIjstat\fRコマンドは簡単な使用率およびバージョン情報を表示します。出力オプションによって、統計データ出力の内容と形式が決まります。 +.PP +すべてのオプションとその機能は、将来のリリースで変更または廃止される可能性があります。 +.SS "一般的なオプション" +.PP いずれかの一般的なオプションを指定した場合、他のオプションまたはパラメータは一切指定できません。 -.LP -.RS 3 -.TP 3 -\-help -ヘルプメッセージを表示します。 -.TP 3 -\-version -バージョン情報を表示します。 -.TP 3 -\-options -統計データオプションを一覧表示します。下記の「出力オプション」の節を参照してください。 +.PP +\-help +.RS 4 +ヘルプ・メッセージを表示します。 .RE - -.LP -.SS -出力オプション -.LP -.LP -一般的なオプションを指定しない場合に、出力オプションを指定できます。出力オプションは、\f3jstat\fP の出力の内容および形式を指定し、単一の \f2statOption\fP と、他のいずれかの出力オプション (\-h、\-t、および \-J) とで構成されます。\f2statOption\fP は最初に記述する必要があります。 -.LP -.LP -出力は、各列が空白で区切られたテーブルの形式で構成されます。タイトルを含むヘッダー行によって、各列の意味がわかります。ヘッダーの表示頻度を設定するには、\f3\-h\fP オプションを使用します。列のヘッダー名は一般に、オプション間で一貫性が保たれています。一般に、2 つのオプションで同じ名前の列が使用されていれば、2 つの列のデータソースは同じになります。 -.LP -.LP -\f3\-t\fP オプションを使用すると、 \f2Timestamp というラベルの付いたタイムスタンプの列が、\fP 出力の最初の列として表示されます。 \f2Timestamp\fP 列には、ターゲット JVM の起動からの経過時間が、秒単位で表示されます。タイムスタンプの精度は、さまざまな要因によって異なり、大量の負荷のかかったシステムでのスレッドスケジュールの遅延により変動します。 -.LP -.LP -\f2interval\fP および \f2count\fP パラメータを使用して、\f3jstat\fP がその出力を表示する頻度と回数をそれぞれ指定します。 -.LP -.LP -\f3注\fP: 将来のリリースでこの形式は変更される可能性があるため、\f3jstat\fP の出力を解析するスクリプトは作成しないことをお勧めします。\f3jstat\fP 出力を解析するスクリプトを作成する場合は、このツールの将来のリリースで、そのスクリプトを変更しなければならないことに留意してください。 -.LP -.RS 3 -.TP 3 -\-statOption -\f3jstat\fP が表示する統計データ情報を指定します。次の表に、利用可能なオプションの一覧を示します。ある特定のプラットフォームインストールのオプションを一覧表示するには、一般的なオプションの \f3\-options\fP を使用します。 -.br -.br -.LP -.TS -.if \n+(b.=1 .nr d. \n(.c-\n(c.-1 -.de 35 -.ps \n(.s -.vs \n(.vu -.in \n(.iu -.if \n(.u .fi -.if \n(.j .ad -.if \n(.j=0 .na -.. -.nf -.nr #~ 0 -.if n .nr #~ 0.6n -.ds #d .d -.if \(ts\n(.z\(ts\(ts .ds #d nl -.fc -.nr 33 \n(.s -.rm 80 81 -.nr 34 \n(.lu -.eo -.am 81 -.br -.di a+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -クラスローダーの動作に関する統計データ -.br -.di -.nr a| \n(dn -.nr a- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di b+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -HotSpot Just\-in\-Time コンパイラの動作に関する統計データ -.br -.di -.nr b| \n(dn -.nr b- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di c+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -ガベージコレクトされたヒープの動作に関する統計データ -.br -.di -.nr c| \n(dn -.nr c- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di d+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -世代ごとの容量と対応する領域に関する統計データ -.br -.di -.nr d| \n(dn -.nr d- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di e+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -ガベージコレクション統計データの概要 (\f3\-gcutil\fP と同じ) と、直前および現在 (適用可能な場合) のガベージコレクションイベントの原因 -.br -.di -.nr e| \n(dn -.nr e- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di f+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -New 世代の動作に関する統計データ -.br -.di -.nr f| \n(dn -.nr f- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di g+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -New 世代のサイズと対応する領域に関する統計データ -.br -.di -.nr g| \n(dn -.nr g- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di h+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -Old 世代および Permanent 世代の動作に関する統計データ -.br -.di -.nr h| \n(dn -.nr h- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di i+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -Old 世代のサイズに関する統計データ -.br -.di -.nr i| \n(dn -.nr i- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di j+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -Permanent 世代のサイズに関する統計データ -.br -.di -.nr j| \n(dn -.nr j- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di k+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -ガベージコレクション統計データの概要 -.br -.di -.nr k| \n(dn -.nr k- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di l+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -HotSpot コンパイル方法の統計データ -.br -.di -.nr l| \n(dn -.nr l- \n(dl -.. -.ec \ -.35 -.nf -.ll \n(34u -.nr 80 0 -.nr 38 \w\f3オプション\fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wclass -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wcompiler -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wgc -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wgccapacity -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wgccause -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wgcnew -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wgcnewcapacity -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wgcold -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wgcoldcapacity -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wgcpermcapacity -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wgcutil -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wprintcompilation -.if \n(80<\n(38 .nr 80 \n(38 -.80 -.rm 80 -.nr 81 0 -.nr 38 \w\f3表示内容\fP -.if \n(81<\n(38 .nr 81 \n(38 -.81 -.rm 81 -.nr 38 \n(a- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(b- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(c- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(d- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(e- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(f- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(g- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(h- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(i- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(j- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(k- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(l- -.if \n(81<\n(38 .nr 81 \n(38 -.35 -.nf -.ll \n(34u -.nr 38 1n -.nr 79 0 -.nr 40 \n(79+(0*\n(38) -.nr 80 +\n(40 -.nr 41 \n(80+(3*\n(38) -.nr 81 +\n(41 -.nr TW \n(81 -.if t .if \n(TW>\n(.li .tm Table at line 248 file Input is too wide - \n(TW units -.fc   -.nr #T 0-1 -.nr #a 0-1 -.eo -.de T# -.ds #d .d -.if \(ts\n(.z\(ts\(ts .ds #d nl -.mk ## -.nr ## -1v -.ls 1 -.ls -.. -.ec -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f3オプション\fP\h'|\n(41u'\f3表示内容\fP -.ne \n(a|u+\n(.Vu -.if (\n(a|+\n(#^-1v)>\n(#- .nr #- +(\n(a|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'class\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.a+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(b|u+\n(.Vu -.if (\n(b|+\n(#^-1v)>\n(#- .nr #- +(\n(b|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'compiler\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.b+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(c|u+\n(.Vu -.if (\n(c|+\n(#^-1v)>\n(#- .nr #- +(\n(c|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'gc\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.c+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(d|u+\n(.Vu -.if (\n(d|+\n(#^-1v)>\n(#- .nr #- +(\n(d|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'gccapacity\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.d+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(e|u+\n(.Vu -.if (\n(e|+\n(#^-1v)>\n(#- .nr #- +(\n(e|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'gccause\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.e+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(f|u+\n(.Vu -.if (\n(f|+\n(#^-1v)>\n(#- .nr #- +(\n(f|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'gcnew\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.f+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(g|u+\n(.Vu -.if (\n(g|+\n(#^-1v)>\n(#- .nr #- +(\n(g|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'gcnewcapacity\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.g+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(h|u+\n(.Vu -.if (\n(h|+\n(#^-1v)>\n(#- .nr #- +(\n(h|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'gcold\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.h+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(i|u+\n(.Vu -.if (\n(i|+\n(#^-1v)>\n(#- .nr #- +(\n(i|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'gcoldcapacity\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.i+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(j|u+\n(.Vu -.if (\n(j|+\n(#^-1v)>\n(#- .nr #- +(\n(j|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'gcpermcapacity\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.j+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(k|u+\n(.Vu -.if (\n(k|+\n(#^-1v)>\n(#- .nr #- +(\n(k|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'gcutil\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.k+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(l|u+\n(.Vu -.if (\n(l|+\n(#^-1v)>\n(#- .nr #- +(\n(l|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'printcompilation\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.l+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.fc -.nr T. 1 -.T# 1 -.35 -.rm a+ -.rm b+ -.rm c+ -.rm d+ -.rm e+ -.rm f+ -.rm g+ -.rm h+ -.rm i+ -.rm j+ -.rm k+ -.rm l+ -.TE -.if \n-(b.=0 .nr c. \n(.c-\n(d.-52 -.TP 3 -\-h n -\f2n\fP サンプル (出力行) ごとに列ヘッダーを表示。 ただし、\f2n\fP は正の整数値。デフォルト値は 0。 このとき、データの最初の行の上に列ヘッダーが表示される -.TP 3 -\-t n -タイムスタンプ列を出力の最初の列として表示。タイムスタンプは、ターゲット JVM の起動時からの経過時間 -.TP 3 -\-JjavaOption -\f2javaOption\fP を \f3java\fP アプリケーション起動ツールへ渡す。たとえば、\f3\-J\-Xms48m\fP と指定すると、スタートアップメモリーは 48M バイトに設定されます。オプションの完全なリストについては、「java(1)」のドキュメントを参照してください。 +.PP +\-options +.RS 4 +Staticオプションのリストを表示します。出力オプションを参照してください。 +.RE +.SS "出力オプション" +.PP +一般的なオプションを指定しない場合に、出力オプションを指定できます。出力オプションは、\fIjstat\fRコマンドの出力の内容と形式を決定し、単一の\fIstatOption\fRといずれかの出力オプション(\fI\-h\fR、\fI\-t\fRおよび\fI\-J\fR)で構成されます。\fIstatOption\fRは最初に記述する必要があります。 +.PP +出力は、各列が空白で区切られた表の形式になります。タイトルを含むヘッダー行によって、各列の意味がわかります。ヘッダーの表示頻度を設定するには、\fI\-h\fRオプションを使用します。列のヘッダー名は、様々なオプション間で一貫性が保たれています。一般に、2つのオプションで同じ名前の列が使用されていれば、2つの列のデータ・ソースは同じです。 +.PP +\fI\-t\fRオプションを使用すると、Timestampというラベルの付いたタイムスタンプの列が、出力の最初の列として表示されます。Timestamp列には、ターゲットJVMの起動からの経過時間が、秒単位で表示されます。タイムスタンプの精度は、様々な要因によって異なり、大量の負荷のかかったシステムでのスレッド・スケジュールの遅延により変動します。 +.PP +intervalおよびcountパラメータを使用して、\fIjstat\fRコマンドがその出力を表示する頻度と回数をそれぞれ指定します。 +.PP +\fB注意:\fR +将来のリリースでこの形式は変更される可能性があるため、\fIjstat\fRコマンドの出力を解析するスクリプトは作成しなでください。\fIjstat\fRコマンドの出力を解析するスクリプトを作成する場合は、このツールの将来のリリースで、そのスクリプトを変更する必要があることに留意してください。 +.PP +\-\fIstatOption\fR +.RS 4 +\fIjstat\fRコマンドが表示する統計データ情報を指定します。次に、利用可能なオプションの一覧を示します。特定のプラットフォーム・インストールのオプションを一覧表示するには、一般的なオプションの\fI\-options\fRを使用します。Statオプションおよび出力を参照してください。 +.sp +\fIclass\fR: クラス・ローダーの動作に関する統計データを表示します。 +.sp +\fIcompiler\fR: Java HotSpot VM Just\-in\-Timeコンパイラの動作に関する統計データを表示します。 +.sp +\fIgc\fR: ガベージ・コレクトされたヒープの動作に関する統計データを表示します。 +.sp +\fIgccapacity\fR: 世代ごとの容量と対応する領域に関する統計データを表示します。 +.sp +\fIgccause\fR: ガベージ・コレクション統計データのサマリー(\fI\-gcutil\fRと同じ)と、直前および現在(適用可能な場合)のガベージ・コレクション・イベントの原因を表示します。 +.sp +\fIgcnew\fR: New世代の動作に関する統計データを表示します。 +.sp +\fIgcnewcapacity\fR: New世代のサイズと対応する領域に関する統計データを表示します。 +.sp +\fIgcold\fR: Old世代の動作とメタスペースに関する統計データを表示します。 +.sp +\fIgcoldcapacity\fR: Old世代のサイズに関する統計データを表示します。 +.sp +\fIgcmetacapacity\fR: メタスペースのサイズに関する統計データを表示します。 +.sp +\fIgcutil\fR: ガベージ・コレクションのサマリーに関する統計データを表示します。 +.sp +\fIprintcompilation\fR: Java HotSpot VMコンパイル・メソッドの統計データを表示します。 +.RE +.PP +\-h \fIn\fR +.RS 4 +\fIn\fRサンプル(出力行)ごとに列ヘッダーを表示します。ここで、\fIn\fRは正の整数値です。デフォルト値は0です。この場合、データの最初の行の上に列ヘッダーが表示されます。 +.RE +.PP +\-t +.RS 4 +タイムスタンプ列を出力の最初の列として表示します。タイムスタンプは、ターゲットJVMの起動時からの経過時間です。 +.RE +.PP +\-J\fIjavaOption\fR +.RS 4 +\fIjavaOption\fRをJavaアプリケーション起動ツールに渡します。たとえば、\fI\-J\-Xms48m\fRと指定すると、スタートアップ・メモリーは48MBに設定されます。オプションの完全なリストについては、java(1)を参照してください。 +.RE +.SS "Statオプションおよび出力" +.PP +次の情報は、\fIjstat\fRコマンドが各\fIstatOption\fRについて出力する列をまとめたものです。 +.PP +\-class \fIoption\fR +.RS 4 +クラス・ローダーの統計データ。 +.sp +\fILoaded\fR: ロードされたクラスの数。 +.sp +\fIBytes\fR: ロードされたKBの数。 +.sp +\fIUnloaded\fR: アンロードされたクラスの数。 +.sp +\fIBytes\fR: アンロードされたKBの数。 +.sp +\fITime\fR: クラスのロードやアンロード処理に要した時間。 +.RE +.PP +\-compiler \fIoption\fR +.RS 4 +Java HotSpot VM Just\-in\-Timeコンパイラの統計データ。 +.sp +\fICompiled\fR: 実行されたコンパイル・タスクの数。 +.sp +\fIFailed\fR: 失敗したコンパイル・タスクの数。 +.sp +\fIInvalid\fR: 無効にされたコンパイル・タスクの数。 +.sp +\fITime\fR: コンパイル・タスクの実行に要した時間。 +.sp +\fIFailedType\fR: 最後に失敗したコンパイルのコンパイル・タイプ。 +.sp +\fIFailedMethod\fR: 最後に失敗したコンパイルのクラス名とメソッド。 +.RE +.PP +\-gc \fIoption\fR +.RS 4 +ガベージ・コレクトされたヒープの統計データ。 +.sp +\fIS0C\fR: Survivor領域0の現在の容量(KB)。 +.sp +\fIS1C\fR: Survivor領域1の現在の容量(KB)。 +.sp +\fIS0U\fR: Survivor領域0の使用率(KB)。 +.sp +\fIS1U\fR: Survivor領域1の使用率(KB)。 +.sp +\fIEC\fR: Eden領域の現在の容量(KB)。 +.sp +\fIEU\fR: Eden領域の使用率(KB)。 +.sp +\fIOC\fR: Old領域の現在の容量(KB)。 +.sp +\fIOU\fR: Old領域の使用率(KB)。 +.sp +\fIMC\fR: メタスペースの容量(KB)。 +.sp +\fIMU\fR: メタスペースの使用率(KB)。 +.sp +\fIYGC\fR: 若い世代のガベージ・コレクション・イベントの数。 +.sp +\fIYGCT\fR: 若い世代のガベージ・コレクション時間。 +.sp +\fIFGC\fR: フルGCイベント数。 +.sp +\fIFGCT\fR: フルガベージ・コレクション時間。 +.sp +\fIGCT\fR: ガベージ・コレクション総時間。 +.RE +.PP +\-gccapacity \fIoption\fR +.RS 4 +メモリー・プール世代および領域容量。 +.sp +\fINGCMN\fR: New世代の最小容量(KB)。 +.sp +\fINGCMX\fR: New世代の最大容量(KB)。 +.sp +\fINGC\fR: New世代の現在の容量(KB)。 +.sp +\fIS0C\fR: Survivor領域0の現在の容量(KB)。 +.sp +\fIS1C\fR: Survivor領域1の現在の容量(KB)。 +.sp +\fIEC\fR: Eden領域の現在の容量(KB)。 +.sp +\fIOGCMN\fR: Old世代の最小容量(KB)。 +.sp +\fIOGCMX\fR: Old世代の最大容量(KB)。 +.sp +\fIOGC\fR: Old世代の現在の容量(KB)。 +.sp +\fIOC\fR: Old領域の現在の容量(KB)。 +.sp +\fIMCMN\fR: メタスペースの最小容量(KB)。 +.sp +\fIMCMX\fR: メタスペースの最大容量(KB)。 +.sp +\fIMC\fR: メタスペースの容量(KB)。 +.sp +\fIYGC\fR: 若い世代のGCイベント数。 +.sp +\fIFGC\fR: フルGCイベント数。 +.RE +.PP +\-gccause \fIoption\fR +.RS 4 +このオプションは、\fI\-gcutil\fRオプションと同じガベージ・コレクション統計データのサマリーを表示しますが、最後のガベージ・コレクション・イベントと(適用可能な場合は)現在のガベージ・コレクション・イベントの原因が含まれます。\fI\-gcutil\fRで一覧表示される列のほか、このオプションでは次の列が追加されます。 +.sp +ガベージ・コレクション・イベントを含むガベージ・コレクション統計データ。 +.sp +\fILGCC\fR: 最後のガベージ・コレクションの原因。 +.sp +\fIGCC\fR: 現在のガベージ・コレクションの原因。 +.RE +.PP +\-gcnew \fIoption\fR +.RS 4 +New世代の統計データ。 +.sp +\fIS0C\fR: Survivor領域0の現在の容量(KB)。 +.sp +\fIS1C\fR: Survivor領域1の現在の容量(KB)。 +.sp +\fIS0U\fR: Survivor領域0の使用率(KB)。 +.sp +\fIS1U\fR: Survivor領域1の使用率(KB)。 +.sp +\fITT\fR: 殿堂入りしきい値。 +.sp +\fIMTT\fR: 最大殿堂入りしきい値。 +.sp +\fIDSS\fR: 適切なSurvivorサイズ(KB)。 +.sp +\fIEC\fR: Eden領域の現在の容量(KB)。 +.sp +\fIEU\fR: Eden領域の使用率(KB)。 +.sp +\fIYGC\fR: 若い世代のGCイベント数。 +.sp +\fIYGCT\fR: 若い世代のガベージ・コレクション時間。 +.RE +.PP +\-gcnewcapacity \fIoption\fR +.RS 4 +New世代領域サイズの統計データ。 +.sp +NGCMN: New世代の最小容量(KB)。 +.sp +\fINGCMX\fR: New世代の最大容量(KB)。 +.sp +\fINGC\fR: New世代の現在の容量(KB)。 +.sp +\fIS0CMX\fR: Survivor領域0の最大容量(KB)。 +.sp +\fIS0C\fR: Survivor領域0の現在の容量(KB)。 +.sp +\fIS1CMX\fR: Survivor領域1の最大容量(KB)。 +.sp +\fIS1C\fR: Survivor領域1の現在の容量(KB)。 +.sp +\fIECMX\fR: Eden領域の最大容量(KB)。 +.sp +\fIEC\fR: Eden領域の現在の容量(KB)。 +.sp +\fIYGC\fR: 若い世代のGCイベント数。 +.sp +\fIFGC\fR: フルGCイベント数。 +.RE +.PP +\-gcold \fIoption\fR +.RS 4 +OldおよびPermanent世代の統計データ。 +.sp +\fIMC\fR: メタスペースの容量(KB)。 +.sp +\fIMU\fR: メタスペースの使用率(KB)。 +.sp +\fIOC\fR: Old領域の現在の容量(KB)。 +.sp +\fIOU\fR: Old領域の使用率(KB)。 +.sp +\fIYGC\fR: 若い世代のGCイベント数。 +.sp +\fIFGC\fR: フルGCイベント数。 +.sp +\fIFGCT\fR: フルガベージ・コレクション時間。 +.sp +\fIGCT\fR: ガベージ・コレクション総時間。 +.RE +.PP +\-gcoldcapacity \fIoption\fR +.RS 4 +Old世代の統計データ。 +.sp +\fIOGCMN\fR: Old世代の最小容量(KB)。 +.sp +\fIOGCMX\fR: Old世代の最大容量(KB)。 +.sp +\fIOGC\fR: Old世代の現在の容量(KB)。 +.sp +\fIOC\fR: Old領域の現在の容量(KB)。 +.sp +\fIYGC\fR: 若い世代のGCイベント数。 +.sp +\fIFGC\fR: フルGCイベント数。 +.sp +\fIFGCT\fR: フルガベージ・コレクション時間。 +.sp +\fIGCT\fR: ガベージ・コレクション総時間。 +.RE +.PP +\-gcmetacapacity \fIoption\fR +.RS 4 +Permanent世代の統計データ。 +.sp +\fIMCMN\fR: メタスペースの最小容量(KB)。 +.sp +\fIMCMX\fR: メタスペースの最大容量(KB)。 +.sp +\fIMC\fR: メタスペースの容量(KB)。 +.sp +\fIYGC\fR: 若い世代のGCイベント数。 +.sp +\fIFGC\fR: フルGCイベント数。 +.sp +\fIFGCT\fR: フルガベージ・コレクション時間。 +.sp +\fIGCT\fR: ガベージ・コレクション総時間。 +.RE +.PP +\-gcutil \fIoption\fR +.RS 4 +ガベージ・コレクション統計データのサマリー +.sp +\fIS0\fR: Survivor領域0の使用率(現在の容量に対するパーセンテージ)。 +.sp +\fIS1\fR: Survivor領域1の使用率(現在の容量に対するパーセンテージ)。 +.sp +\fIE\fR: Eden領域の使用率(現在の容量に対するパーセンテージ)。 +.sp +\fIO\fR: Old領域の使用率(現在の容量に対するパーセンテージ)。 +.sp +\fIM\fR: メタスペースの使用率(領域の現在の容量に対するパーセンテージ)。 +.sp +\fIYGC\fR: 若い世代のGCイベント数。 +.sp +\fIYGCT\fR: 若い世代のガベージ・コレクション時間。 +.sp +\fIFGC\fR: フルGCイベント数。 +.sp +\fIFGCT\fR: フルガベージ・コレクション時間。 +.sp +\fIGCT\fR: ガベージ・コレクション総時間。 +.RE +.PP +\-printcompilation \fIoption\fR +.RS 4 +Java HotSpot VMコンパイル・メソッドの統計データ。 +.sp +\fICompiled\fR: 最近コンパイルされたメソッドで実行されたコンパイル・タスクの数。 +.sp +\fISize\fR: 最近コンパイルされたメソッドのバイト・コードのバイト数。 +.sp +\fIType\fR: 最近コンパイルされたメソッドのコンパイル・タイプ。 +.sp +\fIMethod\fR: 最近コンパイルされたメソッドを特定するクラス名とメソッド名。クラス名では、名前空間の区切り文字として、ドット(\&.)のかわりにスラッシュ(/)が使用されます。メソッド名は、指定されたクラス内のメソッドです。これらの2つのフィールドの形式は、HotSpot +\fI\-XX:+PrintComplation\fRオプションと対応しています。 .RE - -.LP -.SS -statOption と出力 -.LP -.LP -以降の表では、\f3jstat\fP が \f2statOption\fP ごとに出力する列について概要を示します。 -.br - -.LP -.SS -\-class オプション -.LP -.LP -.TS -.if \n+(b.=1 .nr d. \n(.c-\n(c.-1 -.de 35 -.ps \n(.s -.vs \n(.vu -.in \n(.iu -.if \n(.u .fi -.if \n(.j .ad -.if \n(.j=0 .na -.. -.nf -.nr #~ 0 -.if n .nr #~ 0.6n -.ds #d .d -.if \(ts\n(.z\(ts\(ts .ds #d nl -.fc -.nr 33 \n(.s -.rm 80 81 -.nr 34 \n(.lu -.eo -.am 81 -.br -.di a+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -ロードされたクラスの数 -.br -.di -.nr a| \n(dn -.nr a- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di b+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -ロードされた K バイト数 -.br -.di -.nr b| \n(dn -.nr b- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di c+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -アンロードされたクラスの数 -.br -.di -.nr c| \n(dn -.nr c- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di d+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -アンロードされた K バイト数 -.br -.di -.nr d| \n(dn -.nr d- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di e+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -クラスのロードやアンロード処理に要した時間 -.br -.di -.nr e| \n(dn -.nr e- \n(dl -.. -.ec \ -.35 -.nf -.ll \n(34u -.nr 80 0 -.nr 38 \wクラスローダーの統計データ -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w\f3列\fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wLoaded -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wBytes -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wUnloaded -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wBytes -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wTime -.if \n(80<\n(38 .nr 80 \n(38 -.80 -.rm 80 -.nr 81 0 -.nr 38 \w\f3説明\fP -.if \n(81<\n(38 .nr 81 \n(38 -.81 -.rm 81 -.nr 38 \n(a- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(b- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(c- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(d- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(e- -.if \n(81<\n(38 .nr 81 \n(38 -.35 -.nf -.ll \n(34u -.nr 38 1n -.nr 79 0 -.nr 40 \n(79+(0*\n(38) -.nr 80 +\n(40 -.nr 41 \n(80+(3*\n(38) -.nr 81 +\n(41 -.nr TW \n(81 -.if t .if \n(TW>\n(.li .tm Table at line 298 file Input is too wide - \n(TW units -.fc   -.nr #T 0-1 -.nr #a 0-1 -.eo -.de T# -.ds #d .d -.if \(ts\n(.z\(ts\(ts .ds #d nl -.mk ## -.nr ## -1v -.ls 1 -.ls -.. -.ec -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'クラスローダーの統計データ\h'|\n(41u' -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f3列\fP\h'|\n(41u'\f3説明\fP -.ne \n(a|u+\n(.Vu -.if (\n(a|+\n(#^-1v)>\n(#- .nr #- +(\n(a|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'Loaded\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.a+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(b|u+\n(.Vu -.if (\n(b|+\n(#^-1v)>\n(#- .nr #- +(\n(b|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'Bytes\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.b+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(c|u+\n(.Vu -.if (\n(c|+\n(#^-1v)>\n(#- .nr #- +(\n(c|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'Unloaded\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.c+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(d|u+\n(.Vu -.if (\n(d|+\n(#^-1v)>\n(#- .nr #- +(\n(d|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'Bytes\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.d+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(e|u+\n(.Vu -.if (\n(e|+\n(#^-1v)>\n(#- .nr #- +(\n(e|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'Time\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.e+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.fc -.nr T. 1 -.T# 1 -.35 -.rm a+ -.rm b+ -.rm c+ -.rm d+ -.rm e+ -.TE -.if \n-(b.=0 .nr c. \n(.c-\n(d.-25 - -.LP -.SS -\-compiler オプション -.LP -.LP -.TS -.if \n+(b.=1 .nr d. \n(.c-\n(c.-1 -.de 35 -.ps \n(.s -.vs \n(.vu -.in \n(.iu -.if \n(.u .fi -.if \n(.j .ad -.if \n(.j=0 .na -.. -.nf -.nr #~ 0 -.if n .nr #~ 0.6n -.ds #d .d -.if \(ts\n(.z\(ts\(ts .ds #d nl -.fc -.nr 33 \n(.s -.rm 80 81 -.nr 34 \n(.lu -.eo -.am 81 -.br -.di a+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -実行されたコンパイルタスクの数 -.br -.di -.nr a| \n(dn -.nr a- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di b+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -失敗したコンパイルタスクの数 -.br -.di -.nr b| \n(dn -.nr b- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di c+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -無効にされたコンパイルタスクの数 -.br -.di -.nr c| \n(dn -.nr c- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di d+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -コンパイルタスクの実行に要した時間 -.br -.di -.nr d| \n(dn -.nr d- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di e+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -最後に失敗したコンパイルのコンパイルタイプ -.br -.di -.nr e| \n(dn -.nr e- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di f+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -最後に失敗したコンパイルのクラス名とメソッド -.br -.di -.nr f| \n(dn -.nr f- \n(dl -.. -.ec \ -.35 -.nf -.ll \n(34u -.nr 80 0 -.nr 38 \wHotSpot Just\-In\-Time コンパイラの統計データ -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w\f3列\fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wCompiled -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wFailed -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wInvalid -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wTime -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wFailedType -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wFailedMethod -.if \n(80<\n(38 .nr 80 \n(38 -.80 -.rm 80 -.nr 81 0 -.nr 38 \w\f3説明\fP -.if \n(81<\n(38 .nr 81 \n(38 -.81 -.rm 81 -.nr 38 \n(a- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(b- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(c- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(d- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(e- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(f- -.if \n(81<\n(38 .nr 81 \n(38 -.35 -.nf -.ll \n(34u -.nr 38 1n -.nr 79 0 -.nr 40 \n(79+(0*\n(38) -.nr 80 +\n(40 -.nr 41 \n(80+(3*\n(38) -.nr 81 +\n(41 -.nr TW \n(81 -.if t .if \n(TW>\n(.li .tm Table at line 334 file Input is too wide - \n(TW units -.fc   -.nr #T 0-1 -.nr #a 0-1 -.eo -.de T# -.ds #d .d -.if \(ts\n(.z\(ts\(ts .ds #d nl -.mk ## -.nr ## -1v -.ls 1 -.ls -.. -.ec -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'HotSpot Just\-In\-Time コンパイラの統計データ\h'|\n(41u' -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f3列\fP\h'|\n(41u'\f3説明\fP -.ne \n(a|u+\n(.Vu -.if (\n(a|+\n(#^-1v)>\n(#- .nr #- +(\n(a|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'Compiled\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.a+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(b|u+\n(.Vu -.if (\n(b|+\n(#^-1v)>\n(#- .nr #- +(\n(b|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'Failed\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.b+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(c|u+\n(.Vu -.if (\n(c|+\n(#^-1v)>\n(#- .nr #- +(\n(c|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'Invalid\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.c+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(d|u+\n(.Vu -.if (\n(d|+\n(#^-1v)>\n(#- .nr #- +(\n(d|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'Time\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.d+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(e|u+\n(.Vu -.if (\n(e|+\n(#^-1v)>\n(#- .nr #- +(\n(e|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'FailedType\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.e+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(f|u+\n(.Vu -.if (\n(f|+\n(#^-1v)>\n(#- .nr #- +(\n(f|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'FailedMethod\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.f+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.fc -.nr T. 1 -.T# 1 -.35 -.rm a+ -.rm b+ -.rm c+ -.rm d+ -.rm e+ -.rm f+ -.TE -.if \n-(b.=0 .nr c. \n(.c-\n(d.-29 - -.LP -.SS -\-gc オプション -.LP -.LP -.TS -.if \n+(b.=1 .nr d. \n(.c-\n(c.-1 -.de 35 -.ps \n(.s -.vs \n(.vu -.in \n(.iu -.if \n(.u .fi -.if \n(.j .ad -.if \n(.j=0 .na -.. -.nf -.nr #~ 0 -.if n .nr #~ 0.6n -.ds #d .d -.if \(ts\n(.z\(ts\(ts .ds #d nl -.fc -.nr 33 \n(.s -.rm 80 81 -.nr 34 \n(.lu -.eo -.am 81 -.br -.di a+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -Survivor 領域 0 の現在の容量 (KB) -.br -.di -.nr a| \n(dn -.nr a- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di b+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -Survivor 領域 1 の現在の容量 (KB) -.br -.di -.nr b| \n(dn -.nr b- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di c+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -Survivor 領域 0 の使用率 (KB) -.br -.di -.nr c| \n(dn -.nr c- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di d+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -Survivor 領域 1 の使用率 (KB) -.br -.di -.nr d| \n(dn -.nr d- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di e+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -Eden 領域の現在の容量 (KB) -.br -.di -.nr e| \n(dn -.nr e- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di f+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -Eden 領域の使用率 (KB) -.br -.di -.nr f| \n(dn -.nr f- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di g+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -Old 領域の現在の容量 (KB) -.br -.di -.nr g| \n(dn -.nr g- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di h+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -Old 領域の使用率 (KB) -.br -.di -.nr h| \n(dn -.nr h- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di i+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -Permanent 領域の現在の容量 (KB) -.br -.di -.nr i| \n(dn -.nr i- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di j+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -Permanent 領域の使用率 (KB) -.br -.di -.nr j| \n(dn -.nr j- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di k+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -若い世代の GC イベント数 -.br -.di -.nr k| \n(dn -.nr k- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di l+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -若い世代のガベージコレクション時間 -.br -.di -.nr l| \n(dn -.nr l- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di m+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -フルガベージコレクション時間 -.br -.di -.nr m| \n(dn -.nr m- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di n+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -ガベージコレクション総時間 -.br -.di -.nr n| \n(dn -.nr n- \n(dl -.. -.ec \ -.35 -.nf -.ll \n(34u -.nr 80 0 -.nr 38 \wガベージコレクトされたヒープの統計データ -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w\f3列\fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wS0C -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wS1C -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wS0U -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wS1U -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wEC -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wEU -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wOC -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wOU -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wPC -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wPU -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wYGC -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wYGCT -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wFGC -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wFGCT -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wGCT -.if \n(80<\n(38 .nr 80 \n(38 -.80 -.rm 80 -.nr 81 0 -.nr 38 \w\f3説明\fP -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \wフル GC イベント数 -.if \n(81<\n(38 .nr 81 \n(38 -.81 -.rm 81 -.nr 38 \n(a- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(b- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(c- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(d- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(e- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(f- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(g- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(h- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(i- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(j- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(k- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(l- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(m- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(n- -.if \n(81<\n(38 .nr 81 \n(38 -.35 -.nf -.ll \n(34u -.nr 38 1n -.nr 79 0 -.nr 40 \n(79+(0*\n(38) -.nr 80 +\n(40 -.nr 41 \n(80+(3*\n(38) -.nr 81 +\n(41 -.nr TW \n(81 -.if t .if \n(TW>\n(.li .tm Table at line 404 file Input is too wide - \n(TW units -.fc   -.nr #T 0-1 -.nr #a 0-1 -.eo -.de T# -.ds #d .d -.if \(ts\n(.z\(ts\(ts .ds #d nl -.mk ## -.nr ## -1v -.ls 1 -.ls -.. -.ec -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'ガベージコレクトされたヒープの統計データ\h'|\n(41u' -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f3列\fP\h'|\n(41u'\f3説明\fP -.ne \n(a|u+\n(.Vu -.if (\n(a|+\n(#^-1v)>\n(#- .nr #- +(\n(a|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'S0C\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.a+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(b|u+\n(.Vu -.if (\n(b|+\n(#^-1v)>\n(#- .nr #- +(\n(b|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'S1C\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.b+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(c|u+\n(.Vu -.if (\n(c|+\n(#^-1v)>\n(#- .nr #- +(\n(c|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'S0U\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.c+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(d|u+\n(.Vu -.if (\n(d|+\n(#^-1v)>\n(#- .nr #- +(\n(d|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'S1U\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.d+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(e|u+\n(.Vu -.if (\n(e|+\n(#^-1v)>\n(#- .nr #- +(\n(e|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'EC\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.e+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(f|u+\n(.Vu -.if (\n(f|+\n(#^-1v)>\n(#- .nr #- +(\n(f|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'EU\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.f+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(g|u+\n(.Vu -.if (\n(g|+\n(#^-1v)>\n(#- .nr #- +(\n(g|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'OC\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.g+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(h|u+\n(.Vu -.if (\n(h|+\n(#^-1v)>\n(#- .nr #- +(\n(h|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'OU\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.h+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(i|u+\n(.Vu -.if (\n(i|+\n(#^-1v)>\n(#- .nr #- +(\n(i|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'PC\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.i+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(j|u+\n(.Vu -.if (\n(j|+\n(#^-1v)>\n(#- .nr #- +(\n(j|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'PU\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.j+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(k|u+\n(.Vu -.if (\n(k|+\n(#^-1v)>\n(#- .nr #- +(\n(k|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'YGC\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.k+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(l|u+\n(.Vu -.if (\n(l|+\n(#^-1v)>\n(#- .nr #- +(\n(l|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'YGCT\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.l+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'FGC\h'|\n(41u'フル GC イベント数 -.ne \n(m|u+\n(.Vu -.if (\n(m|+\n(#^-1v)>\n(#- .nr #- +(\n(m|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'FGCT\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.m+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(n|u+\n(.Vu -.if (\n(n|+\n(#^-1v)>\n(#- .nr #- +(\n(n|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'GCT\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.n+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.fc -.nr T. 1 -.T# 1 -.35 -.rm a+ -.rm b+ -.rm c+ -.rm d+ -.rm e+ -.rm f+ -.rm g+ -.rm h+ -.rm i+ -.rm j+ -.rm k+ -.rm l+ -.rm m+ -.rm n+ -.TE -.if \n-(b.=0 .nr c. \n(.c-\n(d.-63 - -.LP -.SS -\-gccapacity オプション -.LP -.LP -.TS -.if \n+(b.=1 .nr d. \n(.c-\n(c.-1 -.de 35 -.ps \n(.s -.vs \n(.vu -.in \n(.iu -.if \n(.u .fi -.if \n(.j .ad -.if \n(.j=0 .na -.. -.nf -.nr #~ 0 -.if n .nr #~ 0.6n -.ds #d .d -.if \(ts\n(.z\(ts\(ts .ds #d nl -.fc -.nr 33 \n(.s -.rm 80 81 -.nr 34 \n(.lu -.eo -.am 81 -.br -.di a+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -New 世代の最小容量 (KB) -.br -.di -.nr a| \n(dn -.nr a- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di b+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -New 世代の最大容量 (KB) -.br -.di -.nr b| \n(dn -.nr b- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di c+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -New 世代の現在の容量 (KB) -.br -.di -.nr c| \n(dn -.nr c- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di d+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -Survivor 領域 0 の現在の容量 (KB) -.br -.di -.nr d| \n(dn -.nr d- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di e+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -Survivor 領域 1 の現在の容量 (KB) -.br -.di -.nr e| \n(dn -.nr e- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di f+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -Eden 領域の現在の容量 (KB) -.br -.di -.nr f| \n(dn -.nr f- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di g+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -Old 世代の最小容量 (KB) -.br -.di -.nr g| \n(dn -.nr g- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di h+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -Old 世代の最大容量 (KB) -.br -.di -.nr h| \n(dn -.nr h- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di i+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -Old 世代の現在の容量 (KB) -.br -.di -.nr i| \n(dn -.nr i- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di j+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -Old 領域の現在の容量 (KB) -.br -.di -.nr j| \n(dn -.nr j- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di k+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -Permanent 世代の最小容量 (KB) -.br -.di -.nr k| \n(dn -.nr k- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di l+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -Permanent 世代の最大容量 (KB) -.br -.di -.nr l| \n(dn -.nr l- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di m+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -Permanent 世代の現在の容量 (KB) -.br -.di -.nr m| \n(dn -.nr m- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di n+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -Permanent 領域の現在の容量 (KB) -.br -.di -.nr n| \n(dn -.nr n- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di o+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -若い世代の GC イベント数 -.br -.di -.nr o| \n(dn -.nr o- \n(dl -.. -.ec \ -.35 -.nf -.ll \n(34u -.nr 80 0 -.nr 38 \wメモリープール世代および領域容量 -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w\f3列\fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wNGCMN -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wNGCMX -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wNGC -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wS0C -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wS1C -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wEC -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wOGCMN -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wOGCMX -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wOGC -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wOC -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wPGCMN -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wPGCMX -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wPGC -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wPC -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wYGC -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wFGC -.if \n(80<\n(38 .nr 80 \n(38 -.80 -.rm 80 -.nr 81 0 -.nr 38 \w\f3説明\fP -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \wフル GC イベント数 -.if \n(81<\n(38 .nr 81 \n(38 -.81 -.rm 81 -.nr 38 \n(a- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(b- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(c- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(d- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(e- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(f- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(g- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(h- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(i- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(j- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(k- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(l- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(m- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(n- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(o- -.if \n(81<\n(38 .nr 81 \n(38 -.35 -.nf -.ll \n(34u -.nr 38 1n -.nr 79 0 -.nr 40 \n(79+(0*\n(38) -.nr 80 +\n(40 -.nr 41 \n(80+(3*\n(38) -.nr 81 +\n(41 -.nr TW \n(81 -.if t .if \n(TW>\n(.li .tm Table at line 478 file Input is too wide - \n(TW units -.fc   -.nr #T 0-1 -.nr #a 0-1 -.eo -.de T# -.ds #d .d -.if \(ts\n(.z\(ts\(ts .ds #d nl -.mk ## -.nr ## -1v -.ls 1 -.ls -.. -.ec -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'メモリープール世代および領域容量\h'|\n(41u' -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f3列\fP\h'|\n(41u'\f3説明\fP -.ne \n(a|u+\n(.Vu -.if (\n(a|+\n(#^-1v)>\n(#- .nr #- +(\n(a|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'NGCMN\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.a+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(b|u+\n(.Vu -.if (\n(b|+\n(#^-1v)>\n(#- .nr #- +(\n(b|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'NGCMX\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.b+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(c|u+\n(.Vu -.if (\n(c|+\n(#^-1v)>\n(#- .nr #- +(\n(c|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'NGC\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.c+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(d|u+\n(.Vu -.if (\n(d|+\n(#^-1v)>\n(#- .nr #- +(\n(d|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'S0C\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.d+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(e|u+\n(.Vu -.if (\n(e|+\n(#^-1v)>\n(#- .nr #- +(\n(e|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'S1C\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.e+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(f|u+\n(.Vu -.if (\n(f|+\n(#^-1v)>\n(#- .nr #- +(\n(f|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'EC\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.f+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(g|u+\n(.Vu -.if (\n(g|+\n(#^-1v)>\n(#- .nr #- +(\n(g|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'OGCMN\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.g+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(h|u+\n(.Vu -.if (\n(h|+\n(#^-1v)>\n(#- .nr #- +(\n(h|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'OGCMX\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.h+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(i|u+\n(.Vu -.if (\n(i|+\n(#^-1v)>\n(#- .nr #- +(\n(i|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'OGC\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.i+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(j|u+\n(.Vu -.if (\n(j|+\n(#^-1v)>\n(#- .nr #- +(\n(j|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'OC\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.j+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(k|u+\n(.Vu -.if (\n(k|+\n(#^-1v)>\n(#- .nr #- +(\n(k|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'PGCMN\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.k+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(l|u+\n(.Vu -.if (\n(l|+\n(#^-1v)>\n(#- .nr #- +(\n(l|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'PGCMX\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.l+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(m|u+\n(.Vu -.if (\n(m|+\n(#^-1v)>\n(#- .nr #- +(\n(m|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'PGC\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.m+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(n|u+\n(.Vu -.if (\n(n|+\n(#^-1v)>\n(#- .nr #- +(\n(n|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'PC\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.n+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(o|u+\n(.Vu -.if (\n(o|+\n(#^-1v)>\n(#- .nr #- +(\n(o|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'YGC\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.o+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'FGC\h'|\n(41u'フル GC イベント数 -.fc -.nr T. 1 -.T# 1 -.35 -.rm a+ -.rm b+ -.rm c+ -.rm d+ -.rm e+ -.rm f+ -.rm g+ -.rm h+ -.rm i+ -.rm j+ -.rm k+ -.rm l+ -.rm m+ -.rm n+ -.rm o+ -.TE -.if \n-(b.=0 .nr c. \n(.c-\n(d.-67 - -.LP -.SS -\-gccause オプション -.LP -.LP -このオプションは、\f3\-gcutil\fP オプションと同じガベージコレクション統計データの概要を表示しますが、最後のガベージコレクションイベントと (適用可能な場合は) 現在のガベージコレクションイベントの原因が含まれます。\f3\-gcutil\fP で一覧表示される列の他に、このオプションでは次の列が追加されます。 -.LP -.LP -.TS -.if \n+(b.=1 .nr d. \n(.c-\n(c.-1 -.de 35 -.ps \n(.s -.vs \n(.vu -.in \n(.iu -.if \n(.u .fi -.if \n(.j .ad -.if \n(.j=0 .na -.. -.nf -.nr #~ 0 -.if n .nr #~ 0.6n -.ds #d .d -.if \(ts\n(.z\(ts\(ts .ds #d nl -.fc -.nr 33 \n(.s -.rm 80 81 -.nr 34 \n(.lu -.eo -.am 81 -.br -.di a+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -最後のガベージコレクションの原因 -.br -.di -.nr a| \n(dn -.nr a- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di b+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -現在のガベージコレクションの原因 -.br -.di -.nr b| \n(dn -.nr b- \n(dl -.. -.ec \ -.35 -.nf -.ll \n(34u -.nr 80 0 -.nr 38 \wGC イベントを含むガベージコレクション統計データ -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w\f3列\fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wLGCC -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wGCC -.if \n(80<\n(38 .nr 80 \n(38 -.80 -.rm 80 -.nr 81 0 -.nr 38 \w\f3説明\fP -.if \n(81<\n(38 .nr 81 \n(38 -.81 -.rm 81 -.nr 38 \n(a- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(b- -.if \n(81<\n(38 .nr 81 \n(38 -.35 -.nf -.ll \n(34u -.nr 38 1n -.nr 79 0 -.nr 40 \n(79+(0*\n(38) -.nr 80 +\n(40 -.nr 41 \n(80+(3*\n(38) -.nr 81 +\n(41 -.nr TW \n(81 -.if t .if \n(TW>\n(.li .tm Table at line 501 file Input is too wide - \n(TW units -.fc   -.nr #T 0-1 -.nr #a 0-1 -.eo -.de T# -.ds #d .d -.if \(ts\n(.z\(ts\(ts .ds #d nl -.mk ## -.nr ## -1v -.ls 1 -.ls -.. -.ec -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'GC イベントを含むガベージコレクション統計データ\h'|\n(41u' -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f3列\fP\h'|\n(41u'\f3説明\fP -.ne \n(a|u+\n(.Vu -.if (\n(a|+\n(#^-1v)>\n(#- .nr #- +(\n(a|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'LGCC\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.a+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(b|u+\n(.Vu -.if (\n(b|+\n(#^-1v)>\n(#- .nr #- +(\n(b|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'GCC\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.b+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.fc -.nr T. 1 -.T# 1 -.35 -.rm a+ -.rm b+ -.TE -.if \n-(b.=0 .nr c. \n(.c-\n(d.-13 - -.LP -.SS -\-gcnew オプション -.LP -.LP -.TS -.if \n+(b.=1 .nr d. \n(.c-\n(c.-1 -.de 35 -.ps \n(.s -.vs \n(.vu -.in \n(.iu -.if \n(.u .fi -.if \n(.j .ad -.if \n(.j=0 .na -.. -.nf -.nr #~ 0 -.if n .nr #~ 0.6n -.ds #d .d -.if \(ts\n(.z\(ts\(ts .ds #d nl -.fc -.nr 33 \n(.s -.rm 80 81 -.nr 34 \n(.lu -.eo -.am 81 -.br -.di a+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -Survivor 領域 0 の現在の容量 (KB) -.br -.di -.nr a| \n(dn -.nr a- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di b+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -Survivor 領域 1 の現在の容量 (KB) -.br -.di -.nr b| \n(dn -.nr b- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di c+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -Survivor 領域 0 の使用率 (KB) -.br -.di -.nr c| \n(dn -.nr c- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di d+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -Survivor 領域 1 の使用率 (KB) -.br -.di -.nr d| \n(dn -.nr d- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di e+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -最大殿堂入りしきい値 -.br -.di -.nr e| \n(dn -.nr e- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di f+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -適切な Survivor サイズ (KB) -.br -.di -.nr f| \n(dn -.nr f- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di g+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -Eden 領域の現在の容量 (KB) -.br -.di -.nr g| \n(dn -.nr g- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di h+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -Eden 領域の使用率 (KB) -.br -.di -.nr h| \n(dn -.nr h- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di i+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -若い世代の GC イベント数 -.br -.di -.nr i| \n(dn -.nr i- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di j+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -若い世代のガベージコレクション時間 -.br -.di -.nr j| \n(dn -.nr j- \n(dl -.. -.ec \ -.35 -.nf -.ll \n(34u -.nr 80 0 -.nr 38 \wNew 世代の統計データ -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w\f3列\fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wS0C -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wS1C -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wS0U -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wS1U -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wTT -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wMTT -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wDSS -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wEC -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wEU -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wYGC -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wYGCT -.if \n(80<\n(38 .nr 80 \n(38 -.80 -.rm 80 -.nr 81 0 -.nr 38 \w\f3説明\fP -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \w殿堂入りしきい値 -.if \n(81<\n(38 .nr 81 \n(38 -.81 -.rm 81 -.nr 38 \n(a- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(b- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(c- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(d- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(e- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(f- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(g- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(h- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(i- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(j- -.if \n(81<\n(38 .nr 81 \n(38 -.35 -.nf -.ll \n(34u -.nr 38 1n -.nr 79 0 -.nr 40 \n(79+(0*\n(38) -.nr 80 +\n(40 -.nr 41 \n(80+(3*\n(38) -.nr 81 +\n(41 -.nr TW \n(81 -.if t .if \n(TW>\n(.li .tm Table at line 555 file Input is too wide - \n(TW units -.fc   -.nr #T 0-1 -.nr #a 0-1 -.eo -.de T# -.ds #d .d -.if \(ts\n(.z\(ts\(ts .ds #d nl -.mk ## -.nr ## -1v -.ls 1 -.ls -.. -.ec -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'New 世代の統計データ\h'|\n(41u' -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f3列\fP\h'|\n(41u'\f3説明\fP -.ne \n(a|u+\n(.Vu -.if (\n(a|+\n(#^-1v)>\n(#- .nr #- +(\n(a|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'S0C\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.a+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(b|u+\n(.Vu -.if (\n(b|+\n(#^-1v)>\n(#- .nr #- +(\n(b|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'S1C\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.b+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(c|u+\n(.Vu -.if (\n(c|+\n(#^-1v)>\n(#- .nr #- +(\n(c|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'S0U\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.c+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(d|u+\n(.Vu -.if (\n(d|+\n(#^-1v)>\n(#- .nr #- +(\n(d|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'S1U\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.d+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'TT\h'|\n(41u'殿堂入りしきい値 -.ne \n(e|u+\n(.Vu -.if (\n(e|+\n(#^-1v)>\n(#- .nr #- +(\n(e|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'MTT\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.e+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(f|u+\n(.Vu -.if (\n(f|+\n(#^-1v)>\n(#- .nr #- +(\n(f|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'DSS\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.f+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(g|u+\n(.Vu -.if (\n(g|+\n(#^-1v)>\n(#- .nr #- +(\n(g|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'EC\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.g+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(h|u+\n(.Vu -.if (\n(h|+\n(#^-1v)>\n(#- .nr #- +(\n(h|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'EU\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.h+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(i|u+\n(.Vu -.if (\n(i|+\n(#^-1v)>\n(#- .nr #- +(\n(i|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'YGC\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.i+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(j|u+\n(.Vu -.if (\n(j|+\n(#^-1v)>\n(#- .nr #- +(\n(j|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'YGCT\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.j+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.fc -.nr T. 1 -.T# 1 -.35 -.rm a+ -.rm b+ -.rm c+ -.rm d+ -.rm e+ -.rm f+ -.rm g+ -.rm h+ -.rm i+ -.rm j+ -.TE -.if \n-(b.=0 .nr c. \n(.c-\n(d.-47 - -.LP -.SS -\-gcnewcapacity オプション -.LP -.LP -.TS -.if \n+(b.=1 .nr d. \n(.c-\n(c.-1 -.de 35 -.ps \n(.s -.vs \n(.vu -.in \n(.iu -.if \n(.u .fi -.if \n(.j .ad -.if \n(.j=0 .na -.. -.nf -.nr #~ 0 -.if n .nr #~ 0.6n -.ds #d .d -.if \(ts\n(.z\(ts\(ts .ds #d nl -.fc -.nr 33 \n(.s -.rm 80 81 -.nr 34 \n(.lu -.eo -.am 81 -.br -.di a+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -New 世代の最小容量 (KB) -.br -.di -.nr a| \n(dn -.nr a- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di b+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -New 世代の最大容量 (KB) -.br -.di -.nr b| \n(dn -.nr b- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di c+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -New 世代の現在の容量 (KB) -.br -.di -.nr c| \n(dn -.nr c- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di d+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -Survivor 領域 0 の最大容量 (KB) -.br -.di -.nr d| \n(dn -.nr d- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di e+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -Survivor 領域 0 の現在の容量 (KB) -.br -.di -.nr e| \n(dn -.nr e- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di f+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -Survivor 領域 1 の最大容量 (KB) -.br -.di -.nr f| \n(dn -.nr f- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di g+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -Survivor 領域 1 の現在の容量 (KB) -.br -.di -.nr g| \n(dn -.nr g- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di h+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -Eden 領域の最大容量 (KB) -.br -.di -.nr h| \n(dn -.nr h- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di i+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -Eden 領域の現在の容量 (KB) -.br -.di -.nr i| \n(dn -.nr i- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di j+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -若い世代の GC イベント数 -.br -.di -.nr j| \n(dn -.nr j- \n(dl -.. -.ec \ -.35 -.nf -.ll \n(34u -.nr 80 0 -.nr 38 \wNew 世代領域サイズの統計データ -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w\f3列\fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wNGCMN -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wNGCMX -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wNGC -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wS0CMX -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wS0C -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wS1CMX -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wS1C -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wECMX -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wEC -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wYGC -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wFGC -.if \n(80<\n(38 .nr 80 \n(38 -.80 -.rm 80 -.nr 81 0 -.nr 38 \w\f3説明\fP -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \wフル GC イベント数 -.if \n(81<\n(38 .nr 81 \n(38 -.81 -.rm 81 -.nr 38 \n(a- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(b- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(c- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(d- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(e- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(f- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(g- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(h- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(i- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(j- -.if \n(81<\n(38 .nr 81 \n(38 -.35 -.nf -.ll \n(34u -.nr 38 1n -.nr 79 0 -.nr 40 \n(79+(0*\n(38) -.nr 80 +\n(40 -.nr 41 \n(80+(3*\n(38) -.nr 81 +\n(41 -.nr TW \n(81 -.if t .if \n(TW>\n(.li .tm Table at line 609 file Input is too wide - \n(TW units -.fc   -.nr #T 0-1 -.nr #a 0-1 -.eo -.de T# -.ds #d .d -.if \(ts\n(.z\(ts\(ts .ds #d nl -.mk ## -.nr ## -1v -.ls 1 -.ls -.. -.ec -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'New 世代領域サイズの統計データ\h'|\n(41u' -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f3列\fP\h'|\n(41u'\f3説明\fP -.ne \n(a|u+\n(.Vu -.if (\n(a|+\n(#^-1v)>\n(#- .nr #- +(\n(a|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'NGCMN\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.a+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(b|u+\n(.Vu -.if (\n(b|+\n(#^-1v)>\n(#- .nr #- +(\n(b|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'NGCMX\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.b+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(c|u+\n(.Vu -.if (\n(c|+\n(#^-1v)>\n(#- .nr #- +(\n(c|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'NGC\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.c+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(d|u+\n(.Vu -.if (\n(d|+\n(#^-1v)>\n(#- .nr #- +(\n(d|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'S0CMX\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.d+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(e|u+\n(.Vu -.if (\n(e|+\n(#^-1v)>\n(#- .nr #- +(\n(e|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'S0C\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.e+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(f|u+\n(.Vu -.if (\n(f|+\n(#^-1v)>\n(#- .nr #- +(\n(f|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'S1CMX\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.f+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(g|u+\n(.Vu -.if (\n(g|+\n(#^-1v)>\n(#- .nr #- +(\n(g|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'S1C\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.g+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(h|u+\n(.Vu -.if (\n(h|+\n(#^-1v)>\n(#- .nr #- +(\n(h|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'ECMX\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.h+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(i|u+\n(.Vu -.if (\n(i|+\n(#^-1v)>\n(#- .nr #- +(\n(i|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'EC\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.i+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(j|u+\n(.Vu -.if (\n(j|+\n(#^-1v)>\n(#- .nr #- +(\n(j|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'YGC\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.j+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'FGC\h'|\n(41u'フル GC イベント数 -.fc -.nr T. 1 -.T# 1 -.35 -.rm a+ -.rm b+ -.rm c+ -.rm d+ -.rm e+ -.rm f+ -.rm g+ -.rm h+ -.rm i+ -.rm j+ -.TE -.if \n-(b.=0 .nr c. \n(.c-\n(d.-47 - -.LP -.SS -\-gcold オプション -.LP -.LP -.TS -.if \n+(b.=1 .nr d. \n(.c-\n(c.-1 -.de 35 -.ps \n(.s -.vs \n(.vu -.in \n(.iu -.if \n(.u .fi -.if \n(.j .ad -.if \n(.j=0 .na -.. -.nf -.nr #~ 0 -.if n .nr #~ 0.6n -.ds #d .d -.if \(ts\n(.z\(ts\(ts .ds #d nl -.fc -.nr 33 \n(.s -.rm 80 81 -.nr 34 \n(.lu -.eo -.am 81 -.br -.di a+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -Permanent 領域の現在の容量 (KB) -.br -.di -.nr a| \n(dn -.nr a- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di b+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -Permanent 領域の使用率 (KB) -.br -.di -.nr b| \n(dn -.nr b- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di c+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -Old 領域の現在の容量 (KB) -.br -.di -.nr c| \n(dn -.nr c- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di d+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -Old 領域の使用率 (KB) -.br -.di -.nr d| \n(dn -.nr d- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di e+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -若い世代の GC イベント数 -.br -.di -.nr e| \n(dn -.nr e- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di f+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -フルガベージコレクション時間 -.br -.di -.nr f| \n(dn -.nr f- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di g+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -ガベージコレクション総時間 -.br -.di -.nr g| \n(dn -.nr g- \n(dl -.. -.ec \ -.35 -.nf -.ll \n(34u -.nr 80 0 -.nr 38 \wOld および Permanent 世代の統計データ -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w\f3列\fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wPC -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wPU -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wOC -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wOU -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wYGC -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wFGC -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wFGCT -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wGCT -.if \n(80<\n(38 .nr 80 \n(38 -.80 -.rm 80 -.nr 81 0 -.nr 38 \w\f3説明\fP -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \wフル GC イベント数 -.if \n(81<\n(38 .nr 81 \n(38 -.81 -.rm 81 -.nr 38 \n(a- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(b- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(c- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(d- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(e- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(f- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(g- -.if \n(81<\n(38 .nr 81 \n(38 -.35 -.nf -.ll \n(34u -.nr 38 1n -.nr 79 0 -.nr 40 \n(79+(0*\n(38) -.nr 80 +\n(40 -.nr 41 \n(80+(3*\n(38) -.nr 81 +\n(41 -.nr TW \n(81 -.if t .if \n(TW>\n(.li .tm Table at line 651 file Input is too wide - \n(TW units -.fc   -.nr #T 0-1 -.nr #a 0-1 -.eo -.de T# -.ds #d .d -.if \(ts\n(.z\(ts\(ts .ds #d nl -.mk ## -.nr ## -1v -.ls 1 -.ls -.. -.ec -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'Old および Permanent 世代の統計データ\h'|\n(41u' -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f3列\fP\h'|\n(41u'\f3説明\fP -.ne \n(a|u+\n(.Vu -.if (\n(a|+\n(#^-1v)>\n(#- .nr #- +(\n(a|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'PC\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.a+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(b|u+\n(.Vu -.if (\n(b|+\n(#^-1v)>\n(#- .nr #- +(\n(b|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'PU\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.b+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(c|u+\n(.Vu -.if (\n(c|+\n(#^-1v)>\n(#- .nr #- +(\n(c|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'OC\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.c+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(d|u+\n(.Vu -.if (\n(d|+\n(#^-1v)>\n(#- .nr #- +(\n(d|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'OU\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.d+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(e|u+\n(.Vu -.if (\n(e|+\n(#^-1v)>\n(#- .nr #- +(\n(e|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'YGC\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.e+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'FGC\h'|\n(41u'フル GC イベント数 -.ne \n(f|u+\n(.Vu -.if (\n(f|+\n(#^-1v)>\n(#- .nr #- +(\n(f|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'FGCT\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.f+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(g|u+\n(.Vu -.if (\n(g|+\n(#^-1v)>\n(#- .nr #- +(\n(g|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'GCT\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.g+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.fc -.nr T. 1 -.T# 1 -.35 -.rm a+ -.rm b+ -.rm c+ -.rm d+ -.rm e+ -.rm f+ -.rm g+ -.TE -.if \n-(b.=0 .nr c. \n(.c-\n(d.-35 - -.LP -.SS -\-gcoldcapacity オプション -.LP -.LP -.TS -.if \n+(b.=1 .nr d. \n(.c-\n(c.-1 -.de 35 -.ps \n(.s -.vs \n(.vu -.in \n(.iu -.if \n(.u .fi -.if \n(.j .ad -.if \n(.j=0 .na -.. -.nf -.nr #~ 0 -.if n .nr #~ 0.6n -.ds #d .d -.if \(ts\n(.z\(ts\(ts .ds #d nl -.fc -.nr 33 \n(.s -.rm 80 81 -.nr 34 \n(.lu -.eo -.am 81 -.br -.di a+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -Old 世代の最小容量 (KB) -.br -.di -.nr a| \n(dn -.nr a- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di b+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -Old 世代の最大容量 (KB) -.br -.di -.nr b| \n(dn -.nr b- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di c+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -Old 世代の現在の容量 (KB) -.br -.di -.nr c| \n(dn -.nr c- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di d+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -Old 領域の現在の容量 (KB) -.br -.di -.nr d| \n(dn -.nr d- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di e+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -若い世代の GC イベント数 -.br -.di -.nr e| \n(dn -.nr e- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di f+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -フルガベージコレクション時間 -.br -.di -.nr f| \n(dn -.nr f- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di g+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -ガベージコレクション総時間 -.br -.di -.nr g| \n(dn -.nr g- \n(dl -.. -.ec \ -.35 -.nf -.ll \n(34u -.nr 80 0 -.nr 38 \wOld 世代の統計データ -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w\f3列\fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wOGCMN -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wOGCMX -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wOGC -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wOC -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wYGC -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wFGC -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wFGCT -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wGCT -.if \n(80<\n(38 .nr 80 \n(38 -.80 -.rm 80 -.nr 81 0 -.nr 38 \w\f3説明\fP -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \wフル GC イベント数 -.if \n(81<\n(38 .nr 81 \n(38 -.81 -.rm 81 -.nr 38 \n(a- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(b- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(c- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(d- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(e- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(f- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(g- -.if \n(81<\n(38 .nr 81 \n(38 -.35 -.nf -.ll \n(34u -.nr 38 1n -.nr 79 0 -.nr 40 \n(79+(0*\n(38) -.nr 80 +\n(40 -.nr 41 \n(80+(3*\n(38) -.nr 81 +\n(41 -.nr TW \n(81 -.if t .if \n(TW>\n(.li .tm Table at line 693 file Input is too wide - \n(TW units -.fc   -.nr #T 0-1 -.nr #a 0-1 -.eo -.de T# -.ds #d .d -.if \(ts\n(.z\(ts\(ts .ds #d nl -.mk ## -.nr ## -1v -.ls 1 -.ls -.. -.ec -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'Old 世代の統計データ\h'|\n(41u' -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f3列\fP\h'|\n(41u'\f3説明\fP -.ne \n(a|u+\n(.Vu -.if (\n(a|+\n(#^-1v)>\n(#- .nr #- +(\n(a|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'OGCMN\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.a+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(b|u+\n(.Vu -.if (\n(b|+\n(#^-1v)>\n(#- .nr #- +(\n(b|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'OGCMX\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.b+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(c|u+\n(.Vu -.if (\n(c|+\n(#^-1v)>\n(#- .nr #- +(\n(c|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'OGC\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.c+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(d|u+\n(.Vu -.if (\n(d|+\n(#^-1v)>\n(#- .nr #- +(\n(d|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'OC\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.d+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(e|u+\n(.Vu -.if (\n(e|+\n(#^-1v)>\n(#- .nr #- +(\n(e|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'YGC\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.e+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'FGC\h'|\n(41u'フル GC イベント数 -.ne \n(f|u+\n(.Vu -.if (\n(f|+\n(#^-1v)>\n(#- .nr #- +(\n(f|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'FGCT\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.f+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(g|u+\n(.Vu -.if (\n(g|+\n(#^-1v)>\n(#- .nr #- +(\n(g|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'GCT\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.g+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.fc -.nr T. 1 -.T# 1 -.35 -.rm a+ -.rm b+ -.rm c+ -.rm d+ -.rm e+ -.rm f+ -.rm g+ -.TE -.if \n-(b.=0 .nr c. \n(.c-\n(d.-35 - -.LP -.SS -\-gcpermcapacity オプション -.LP -.LP -.TS -.if \n+(b.=1 .nr d. \n(.c-\n(c.-1 -.de 35 -.ps \n(.s -.vs \n(.vu -.in \n(.iu -.if \n(.u .fi -.if \n(.j .ad -.if \n(.j=0 .na -.. -.nf -.nr #~ 0 -.if n .nr #~ 0.6n -.ds #d .d -.if \(ts\n(.z\(ts\(ts .ds #d nl -.fc -.nr 33 \n(.s -.rm 80 81 -.nr 34 \n(.lu -.eo -.am 81 -.br -.di a+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -Permanent 世代の最小容量 (KB) -.br -.di -.nr a| \n(dn -.nr a- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di b+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -Permanent 世代の最大容量 (KB) -.br -.di -.nr b| \n(dn -.nr b- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di c+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -Permanent 世代の現在の容量 (KB) -.br -.di -.nr c| \n(dn -.nr c- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di d+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -Permanent 領域の現在の容量 (KB) -.br -.di -.nr d| \n(dn -.nr d- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di e+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -若い世代の GC イベント数 -.br -.di -.nr e| \n(dn -.nr e- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di f+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -フルガベージコレクション時間 -.br -.di -.nr f| \n(dn -.nr f- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di g+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -ガベージコレクション総時間 -.br -.di -.nr g| \n(dn -.nr g- \n(dl -.. -.ec \ -.35 -.nf -.ll \n(34u -.nr 80 0 -.nr 38 \wPermanent 世代の統計データ -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w\f3列\fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wPGCMN -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wPGCMX -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wPGC -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wPC -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wYGC -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wFGC -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wFGCT -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wGCT -.if \n(80<\n(38 .nr 80 \n(38 -.80 -.rm 80 -.nr 81 0 -.nr 38 \w\f3説明\fP -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \wフル GC イベント数 -.if \n(81<\n(38 .nr 81 \n(38 -.81 -.rm 81 -.nr 38 \n(a- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(b- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(c- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(d- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(e- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(f- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(g- -.if \n(81<\n(38 .nr 81 \n(38 -.35 -.nf -.ll \n(34u -.nr 38 1n -.nr 79 0 -.nr 40 \n(79+(0*\n(38) -.nr 80 +\n(40 -.nr 41 \n(80+(3*\n(38) -.nr 81 +\n(41 -.nr TW \n(81 -.if t .if \n(TW>\n(.li .tm Table at line 735 file Input is too wide - \n(TW units -.fc   -.nr #T 0-1 -.nr #a 0-1 -.eo -.de T# -.ds #d .d -.if \(ts\n(.z\(ts\(ts .ds #d nl -.mk ## -.nr ## -1v -.ls 1 -.ls -.. -.ec -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'Permanent 世代の統計データ\h'|\n(41u' -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f3列\fP\h'|\n(41u'\f3説明\fP -.ne \n(a|u+\n(.Vu -.if (\n(a|+\n(#^-1v)>\n(#- .nr #- +(\n(a|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'PGCMN\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.a+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(b|u+\n(.Vu -.if (\n(b|+\n(#^-1v)>\n(#- .nr #- +(\n(b|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'PGCMX\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.b+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(c|u+\n(.Vu -.if (\n(c|+\n(#^-1v)>\n(#- .nr #- +(\n(c|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'PGC\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.c+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(d|u+\n(.Vu -.if (\n(d|+\n(#^-1v)>\n(#- .nr #- +(\n(d|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'PC\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.d+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(e|u+\n(.Vu -.if (\n(e|+\n(#^-1v)>\n(#- .nr #- +(\n(e|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'YGC\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.e+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'FGC\h'|\n(41u'フル GC イベント数 -.ne \n(f|u+\n(.Vu -.if (\n(f|+\n(#^-1v)>\n(#- .nr #- +(\n(f|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'FGCT\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.f+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(g|u+\n(.Vu -.if (\n(g|+\n(#^-1v)>\n(#- .nr #- +(\n(g|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'GCT\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.g+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.fc -.nr T. 1 -.T# 1 -.35 -.rm a+ -.rm b+ -.rm c+ -.rm d+ -.rm e+ -.rm f+ -.rm g+ -.TE -.if \n-(b.=0 .nr c. \n(.c-\n(d.-35 - -.LP -.SS -\-gcutil オプション -.LP -.LP -.TS -.if \n+(b.=1 .nr d. \n(.c-\n(c.-1 -.de 35 -.ps \n(.s -.vs \n(.vu -.in \n(.iu -.if \n(.u .fi -.if \n(.j .ad -.if \n(.j=0 .na -.. -.nf -.nr #~ 0 -.if n .nr #~ 0.6n -.ds #d .d -.if \(ts\n(.z\(ts\(ts .ds #d nl -.fc -.nr 33 \n(.s -.rm 80 81 -.nr 34 \n(.lu -.eo -.am 81 -.br -.di a+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -Survivor 領域 0 の使用率 (現在の容量に対するパーセンテージ) -.br -.di -.nr a| \n(dn -.nr a- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di b+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -Survivor 領域 1 の使用率 (現在の容量に対するパーセンテージ) -.br -.di -.nr b| \n(dn -.nr b- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di c+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -Eden 領域の使用率 (現在の容量に対するパーセンテージ) -.br -.di -.nr c| \n(dn -.nr c- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di d+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -Old 領域の使用率 (現在の容量に対するパーセンテージ) -.br -.di -.nr d| \n(dn -.nr d- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di e+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -Permanent 領域の使用率 (現在の容量に対するパーセンテージ) -.br -.di -.nr e| \n(dn -.nr e- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di f+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -若い世代の GC イベント数 -.br -.di -.nr f| \n(dn -.nr f- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di g+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -若い世代のガベージコレクション時間 -.br -.di -.nr g| \n(dn -.nr g- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di h+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -フルガベージコレクション時間 -.br -.di -.nr h| \n(dn -.nr h- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di i+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -ガベージコレクション総時間 -.br -.di -.nr i| \n(dn -.nr i- \n(dl -.. -.ec \ -.35 -.nf -.ll \n(34u -.nr 80 0 -.nr 38 \wガベージコレクション統計データの概要 -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w\f3列\fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wS0 -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wS1 -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wE -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wO -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wYGC -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wYGCT -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wFGC -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wFGCT -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wGCT -.if \n(80<\n(38 .nr 80 \n(38 -.80 -.rm 80 -.nr 81 0 -.nr 38 \w\f3説明\fP -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \wフル GC イベント数 -.if \n(81<\n(38 .nr 81 \n(38 -.81 -.rm 81 -.nr 38 \n(a- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(b- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(c- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(d- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(e- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(f- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(g- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(h- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(i- -.if \n(81<\n(38 .nr 81 \n(38 -.35 -.nf -.ll \n(34u -.nr 38 1n -.nr 79 0 -.nr 40 \n(79+(0*\n(38) -.nr 80 +\n(40 -.nr 41 \n(80+(3*\n(38) -.nr 81 +\n(41 -.nr TW \n(81 -.if t .if \n(TW>\n(.li .tm Table at line 785 file Input is too wide - \n(TW units -.fc   -.nr #T 0-1 -.nr #a 0-1 -.eo -.de T# -.ds #d .d -.if \(ts\n(.z\(ts\(ts .ds #d nl -.mk ## -.nr ## -1v -.ls 1 -.ls -.. -.ec -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'ガベージコレクション統計データの概要\h'|\n(41u' -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f3列\fP\h'|\n(41u'\f3説明\fP -.ne \n(a|u+\n(.Vu -.if (\n(a|+\n(#^-1v)>\n(#- .nr #- +(\n(a|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'S0\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.a+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(b|u+\n(.Vu -.if (\n(b|+\n(#^-1v)>\n(#- .nr #- +(\n(b|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'S1\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.b+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(c|u+\n(.Vu -.if (\n(c|+\n(#^-1v)>\n(#- .nr #- +(\n(c|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'E\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.c+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(d|u+\n(.Vu -.if (\n(d|+\n(#^-1v)>\n(#- .nr #- +(\n(d|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'O\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.d+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(e|u+\n(.Vu -.if (\n(e|+\n(#^-1v)>\n(#- .nr #- +(\n(e|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'P\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.e+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(f|u+\n(.Vu -.if (\n(f|+\n(#^-1v)>\n(#- .nr #- +(\n(f|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'YGC\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.f+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(g|u+\n(.Vu -.if (\n(g|+\n(#^-1v)>\n(#- .nr #- +(\n(g|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'YGCT\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.g+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'FGC\h'|\n(41u'フル GC イベント数 -.ne \n(h|u+\n(.Vu -.if (\n(h|+\n(#^-1v)>\n(#- .nr #- +(\n(h|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'FGCT\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.h+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(i|u+\n(.Vu -.if (\n(i|+\n(#^-1v)>\n(#- .nr #- +(\n(i|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'GCT\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.i+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.fc -.nr T. 1 -.T# 1 -.35 -.rm a+ -.rm b+ -.rm c+ -.rm d+ -.rm e+ -.rm f+ -.rm g+ -.rm h+ -.rm i+ -.TE -.if \n-(b.=0 .nr c. \n(.c-\n(d.-43 - -.LP -.SS -\-printcompilation オプション -.LP -.LP -.TS -.if \n+(b.=1 .nr d. \n(.c-\n(c.-1 -.de 35 -.ps \n(.s -.vs \n(.vu -.in \n(.iu -.if \n(.u .fi -.if \n(.j .ad -.if \n(.j=0 .na -.. -.nf -.nr #~ 0 -.if n .nr #~ 0.6n -.ds #d .d -.if \(ts\n(.z\(ts\(ts .ds #d nl -.fc -.nr 33 \n(.s -.rm 80 81 -.nr 34 \n(.lu -.eo -.am 81 -.br -.di a+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -実行されたコンパイルタスクの数 -.br -.di -.nr a| \n(dn -.nr a- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di b+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -メソッドのバイトコードのバイト数 -.br -.di -.nr b| \n(dn -.nr b- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di c+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -コンパイル方法を特定するクラス名とメソッド名。クラス名では、名前空間の区切り文字として、「.」の代わりに「/」が使用される。メソッド名は、指定されたクラス内のメソッドである。これらの 2 つのフィールドの形式は、HotSpot \- \f3XX:+PrintComplation\fP オプションと対応している -.br -.di -.nr c| \n(dn -.nr c- \n(dl -.. -.ec \ -.35 -.nf -.ll \n(34u -.nr 80 0 -.nr 38 \wHotSpot コンパイル方法の統計データ -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w\f3列\fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wCompiled -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wサイズ -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w型 -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wメソッド -.if \n(80<\n(38 .nr 80 \n(38 -.80 -.rm 80 -.nr 81 0 -.nr 38 \w\f3説明\fP -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \wコンパイルタイプ -.if \n(81<\n(38 .nr 81 \n(38 -.81 -.rm 81 -.nr 38 \n(a- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(b- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(c- -.if \n(81<\n(38 .nr 81 \n(38 -.35 -.nf -.ll \n(34u -.nr 38 1n -.nr 79 0 -.nr 40 \n(79+(0*\n(38) -.nr 80 +\n(40 -.nr 41 \n(80+(3*\n(38) -.nr 81 +\n(41 -.nr TW \n(81 -.if t .if \n(TW>\n(.li .tm Table at line 811 file Input is too wide - \n(TW units -.fc   -.nr #T 0-1 -.nr #a 0-1 -.eo -.de T# -.ds #d .d -.if \(ts\n(.z\(ts\(ts .ds #d nl -.mk ## -.nr ## -1v -.ls 1 -.ls -.. -.ec -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'HotSpot コンパイル方法の統計データ\h'|\n(41u' -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f3列\fP\h'|\n(41u'\f3説明\fP -.ne \n(a|u+\n(.Vu -.if (\n(a|+\n(#^-1v)>\n(#- .nr #- +(\n(a|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'Compiled\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.a+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(b|u+\n(.Vu -.if (\n(b|+\n(#^-1v)>\n(#- .nr #- +(\n(b|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'サイズ\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.b+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'型\h'|\n(41u'コンパイルタイプ -.ne \n(c|u+\n(.Vu -.if (\n(c|+\n(#^-1v)>\n(#- .nr #- +(\n(c|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'メソッド\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.c+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.fc -.nr T. 1 -.T# 1 -.35 -.rm a+ -.rm b+ -.rm c+ -.TE -.if \n-(b.=0 .nr c. \n(.c-\n(d.-19 - -.LP .SH "例" -.LP -.LP -この項では、21891 の \f2lvmid\fP を持つローカル JVM を監視する例を示します。 -.LP -.SS -gcutil オプションの使用 -.LP -.LP -この例は、\f2lvmid\fP 21891 に接続して、250 ミリ秒間隔で 7 つのサンプルを取得し、\f3\-gcutil\fP オプションでの指定に従って出力を表示します。 -.LP +.PP +この項では、21891の\fIlvmid\fRを持つローカルJVMをモニタリングする例を示します。 +.SS "gcutilオプション" +.PP +この例では、lvmid 21891に接続して、250ミリ秒間隔で7つのサンプルを取得し、\-\fIgcutil\fRオプションでの指定に従って出力を表示します。 +.PP +この例の出力は、若い世代のコレクションが3番目と4番目のサンプル間で行われたことを示しています。コレクションには0\&.001秒かかっており、オブジェクトがEden領域(E)からOld領域(O)に昇格したため、Old領域の使用率は9\&.49%から9\&.51%に増加しています。Survivor領域は、コレクション前は12\&.44%が使用されていましたが、コレクション後の使用は7\&.74%のみです。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -\fP\f3jstat \-gcutil 21891 250 7\fP -.br - -.fl - S0 S1 E O P YGC YGCT FGC FGCT GCT -.br - -.fl - 12.44 0.00 27.20 9.49 96.70 78 0.176 5 0.495 0.672 -.br - -.fl - 12.44 0.00 62.16 9.49 96.70 78 0.176 5 0.495 0.672 -.br - -.fl - 12.44 0.00 83.97 9.49 96.70 78 0.176 5 0.495 0.672 -.br - -.fl - 0.00 7.74 0.00 9.51 96.70 79 0.177 5 0.495 0.673 -.br - -.fl - 0.00 7.74 23.37 9.51 96.70 79 0.177 5 0.495 0.673 -.br - -.fl - 0.00 7.74 43.82 9.51 96.70 79 0.177 5 0.495 0.673 -.br - -.fl - 0.00 7.74 58.11 9.51 96.71 79 0.177 5 0.495 0.673 -.br - -.fl +jstat \-gcutil 21891 250 7 + S0 S1 E O M YGC YGCT FGC FGCT GCT +0\&.00 99\&.74 13\&.49 7\&.86 95\&.82 3 0\&.124 0 0\&.000 0\&.124 +0\&.00 99\&.74 13\&.49 7\&.86 95\&.82 3 0\&.124 0 0\&.000 0\&.124 +0\&.00 99\&.74 13\&.49 7\&.86 95\&.82 3 0\&.124 0 0\&.000 0\&.124 +0\&.00 99\&.74 13\&.49 7\&.86 95\&.82 3 0\&.124 0 0\&.000 0\&.124 +0\&.00 99\&.74 13\&.80 7\&.86 95\&.82 3 0\&.124 0 0\&.000 0\&.124 +0\&.00 99\&.74 13\&.80 7\&.86 95\&.82 3 0\&.124 0 0\&.000 0\&.124 +0\&.00 99\&.74 13\&.80 7\&.86 95\&.82 3 0\&.124 0 0\&.000 0\&.124 .fi - -.LP -.LP -この例の出力は、若い世代のコレクションが 3 番目と 4 番目のサンプル間で行われたことを示しています。コレクションには 0.001 秒かかっており、オブジェクトが Eden 領域 (E) から Old 領域 (O) に昇格したため、Old 領域の使用率は 9.49% から 9.51% に増加しています。Survivor 領域は、コレクション前は 12.44% が使用されていましたが、コレクション後は 7.74% しか使用されていません。 -.LP -.SS -列ヘッダー文字列の繰り返し -.LP -.LP -この例は、\f2lvmid\fP 21891 に接続して、250 ミリ秒間隔でサンプルを取得し、\f3\-gcutil\fP オプションでの指定に従って出力を表示します。さらに、\f3\-h3\fP オプションを使用して、データが 3 行表示されるごとに列ヘッダーを出力します。 -.LP -.nf -\f3 -.fl -\fP\f3jstat \-gcnew \-h3 21891 250\fP -.br - -.fl - S0C S1C S0U S1U TT MTT DSS EC EU YGC YGCT -.br - -.fl - 64.0 64.0 0.0 31.7 31 31 32.0 512.0 178.6 249 0.203 -.br - -.fl - 64.0 64.0 0.0 31.7 31 31 32.0 512.0 355.5 249 0.203 -.br - -.fl - 64.0 64.0 35.4 0.0 2 31 32.0 512.0 21.9 250 0.204 -.br - -.fl - S0C S1C S0U S1U TT MTT DSS EC EU YGC YGCT -.br - -.fl - 64.0 64.0 35.4 0.0 2 31 32.0 512.0 245.9 250 0.204 -.br - -.fl - 64.0 64.0 35.4 0.0 2 31 32.0 512.0 421.1 250 0.204 -.br - -.fl - 64.0 64.0 0.0 19.0 31 31 32.0 512.0 84.4 251 0.204 -.br - -.fl - S0C S1C S0U S1U TT MTT DSS EC EU YGC YGCT -.br - -.fl - 64.0 64.0 0.0 19.0 31 31 32.0 512.0 306.7 251 0.204 -.br - -.fl -.fi - -.LP -.LP -この例では、ヘッダー文字列の繰り返しが見られるほかにも、2 番目と 3 番目のサンプル間で Young GC が行われたことがわかります。この継続時間は 0.001 秒でした。このコレクションでは、Survivor 領域 0 の使用率 (S0U) が適切な Survivor サイズ (DSS) を超過することになるライブデータが検出されました。この結果、オブジェクトは、Old 世代 (この出力には非表示) へ昇格され、殿堂入りしきい値 (TT) が、31 から 2 へ降格されました。 -.LP -.LP -別のコレクションが、5 番目と 6 番目のサンプル間で行われています。このコレクションでは、Survivor がほとんど見られず、殿堂入りしきい値を 31 に戻しました。 -.LP -.SS -サンプルごとのタイムスタンプの挿入 -.LP -.LP -この例は、\f2lvmid\fP 21891 へ接続し、250 ミリ秒間隔で 3 つのサンプルを取得しています。\f3\-t\fP オプションを使用して、最初の列にサンプルごとのタイムスタンプを表示しています。 -.LP -.nf -\f3 -.fl -\fP\f3jstat \-gcoldcapacity \-t 21891 250 3\fP -.br - -.fl -Timestamp OGCMN OGCMX OGC OC YGC FGC FGCT GCT -.br - -.fl - 150.1 1408.0 60544.0 11696.0 11696.0 194 80 2.874 3.799 -.br - -.fl - 150.4 1408.0 60544.0 13820.0 13820.0 194 81 2.938 3.863 -.br - -.fl - 150.7 1408.0 60544.0 13820.0 13820.0 194 81 2.938 3.863 -.br - -.fl -.fi - -.LP -.LP -\f2Timestamp\fP 列には、ターゲット JVM の起動時からの経過時間が、秒単位でレポートされています。さらに、\f3\-gcoldcapacity\fP 出力では、割り当て要求または昇格要求あるいはその両方を満たすためにヒープが拡張するごとに、Old 世代の容量 (OGC) と Old 領域の容量 (OC) とが増加していることがわかります。Old 世代の容量 (OGC) は、81 番目のフル GC (FGC) 後に、11696 KB から 13820 KB へ増加しています。Old 世代 (および領域) の最大容量は、60544 KB (OGCMX) なので、まだ拡張できる余裕が残されています。 -.LP -.SS -リモート JVM のインストゥルメンテーションの監視 -.LP -.LP -この例は、\f3\-gcutil\fP オプションを使用して、\f2remote.domain\fP というシステム上の \f2lvmid\fP 40496 に接続し、サンプルを秒単位で無期限に取得しています。 -.LP -.nf -\f3 -.fl -\fP\f3jstat \-gcutil 40496@remote.domain 1000\fP -.br - -.fl -... \f2output omitted\fP -.br - -.fl -.fi - -.LP -.LP -\f2lvmid\fP は、リモートホストの名前と結合されて、\f240496@remote.domain\fP の \f2vmid\fP を構成しています。結果として、この \f2vmid\fP は、\f3rmi\fP プロトコルを使用して、リモートホスト上のデフォルトの \f3jstatd\fP サーバーと通信します。\f3jstatd\fP サーバーは、\f3rmiregistry\fP を使用して、デフォルトの \f3rmiregistry\fP ポート (ポート 1099) にバインドされた \f2remote.domain\fP に配置されれます。 -.LP -.SH "関連項目" -.LP -.RS 3 -.TP 2 -o -「java(1) \- Java アプリケーション起動ツール」 -.TP 2 -o -「jps(1) \- Java 仮想マシンプロセスステータスツール」 -.TP 2 -o -「jstatd(1) \- 仮想マシン jstat デーモン」 -.TP 2 -o -「rmiregistry(1) \- Java リモートオブジェクトレジストリ」 +.if n \{\ .RE - -.LP - +.\} +.SS "列ヘッダー文字列の繰返し" +.PP +この例では、lvmid 21891に接続して、250ミリ秒間隔でサンプルを取得し、\fI\-gcutil\fRオプションでの指定に従って出力を表示します。さらに、\fI\-h3\fRオプションを使用して、データが3行表示されるごとに列ヘッダーを出力します。 +.PP +この例では、ヘッダー文字列の繰返しが表示されているほか、2番目と3番目のサンプル間でYoung GCが行われたことがわかります。この継続時間は0\&.001秒でした。このコレクションでは、Survivor領域0の使用率(S0U)が適切なSurvivorサイズ(DSS)を超過することになるアクティブ・データが検出されました。この結果、オブジェクトは、Old世代(この出力には非表示)へ昇格され、殿堂入りしきい値(TT)が、31から2へ降格されました。 +.PP +別のコレクションが、5番目と6番目のサンプル間で行われています。このコレクションでは、Survivorがほとんど見られず、殿堂入りしきい値を31に戻しました。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +jstat \-gcnew \-h3 21891 250 + S0C S1C S0U S1U TT MTT DSS EC EU YGC YGCT + 64\&.0 64\&.0 0\&.0 31\&.7 31 31 32\&.0 512\&.0 178\&.6 249 0\&.203 + 64\&.0 64\&.0 0\&.0 31\&.7 31 31 32\&.0 512\&.0 355\&.5 249 0\&.203 + 64\&.0 64\&.0 35\&.4 0\&.0 2 31 32\&.0 512\&.0 21\&.9 250 0\&.204 + S0C S1C S0U S1U TT MTT DSS EC EU YGC YGCT + 64\&.0 64\&.0 35\&.4 0\&.0 2 31 32\&.0 512\&.0 245\&.9 250 0\&.204 + 64\&.0 64\&.0 35\&.4 0\&.0 2 31 32\&.0 512\&.0 421\&.1 250 0\&.204 + 64\&.0 64\&.0 0\&.0 19\&.0 31 31 32\&.0 512\&.0 84\&.4 251 0\&.204 + S0C S1C S0U S1U TT MTT DSS EC EU YGC YGCT + 64\&.0 64\&.0 0\&.0 19\&.0 31 31 32\&.0 512\&.0 306\&.7 251 0\&.204 +.fi +.if n \{\ +.RE +.\} +.SS "サンプルごとのタイムスタンプの挿入" +.PP +この例では、lvmid21891へ接続し、250ミリ秒間隔で3つのサンプルを取得しています。\fI\-t\fRオプションを使用して、最初の列にサンプルごとのタイムスタンプを表示しています。 +.PP +Timestamp列には、ターゲットJVMの起動時からの経過時間が、秒単位でレポートされています。さらに、\fI\-gcoldcapacity\fR出力では、割当リクエストまたは昇格リクエストあるいはその両方を満たすためにヒープが拡張するたびに、Old世代の容量(OGC)とOld領域の容量(OC)とが増加していることがわかります。81番目のフル・ガベージ・コレクション(FGC)の後、Old世代の容量(OGC)は11,696 KBから13820 KBに増加しました。この世代(および領域)の最大容量は、60,544 KB (OGCMX)なので、まだ拡張できる余裕が残されています。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +Timestamp OGCMN OGCMX OGC OC YGC FGC FGCT GCT + 150\&.1 1408\&.0 60544\&.0 11696\&.0 11696\&.0 194 80 2\&.874 3\&.799 + 150\&.4 1408\&.0 60544\&.0 13820\&.0 13820\&.0 194 81 2\&.938 3\&.863 + 150\&.7 1408\&.0 60544\&.0 13820\&.0 13820\&.0 194 81 2\&.938 3\&.863 +.fi +.if n \{\ +.RE +.\} +.SS "リモートJVMのインストゥルメンテーションの監視" +.PP +この例は、\fI\-gcutil\fRオプションを使用して、remote\&.domainというシステム上のlvmid 40496に接続し、サンプルを秒単位で無期限に取得しています。 +.PP +lvmidは、リモート・ホストの名前と結合されて、\fI40496@remote\&.domain\fRの\fIvmid\fRを構成しています。結果として、このvmidは、\fIrmi\fRプロトコルを使用して、リモート・ホスト上のデフォルトの\fIjstatd\fRサーバーと通信します。\fIjstatd\fRサーバーは、rmiregistryを使用して、デフォルトのrmiregistryポート(ポート1099)にバインドされた\fIremote\&.domain\fRに配置されます。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +jstat \-gcutil 40496@remote\&.domain 1000 +\fI\&.\&.\&. output omitted\fR +.fi +.if n \{\ +.RE +.\} +.SH "関連項目" +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +java(1) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +jps(1) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +jstatd(1) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +rmiregistry(1) +.RE +.br +'pl 8.5i +'bp diff --git a/jdk/src/solaris/doc/sun/man/man1/ja/jstatd.1 b/jdk/src/solaris/doc/sun/man/man1/ja/jstatd.1 index 9eeffc439d9..cfd8e4e4b82 100644 --- a/jdk/src/solaris/doc/sun/man/man1/ja/jstatd.1 +++ b/jdk/src/solaris/doc/sun/man/man1/ja/jstatd.1 @@ -1,286 +1,268 @@ -." Copyright (c) 2004, 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. -." -.TH jstatd 1 "07 May 2011" - -.LP -.SH "名前" -jstatd \- 仮想マシン jstat デーモン -.LP -.RS 3 -.TP 2 -o -形式 -.TP 2 -o -パラメータ -.TP 2 -o -説明 -.TP 2 -o -オプション -.TP 2 -o -セキュリティー -.TP 2 -o -リモートインタフェース -.TP 2 -o -例 -.TP 2 -o -関連項目 -.RE - -.LP -.SH "形式" -.LP +'\" t +.\" Copyright (c) 2004, 2013, Oracle and/or its affiliates. All rights reserved. +.\" Title: jstatd +.\" Language: English +.\" Date: 2013年11月21日 +.\" SectDesc: モニタリング・ツール +.\" Software: JDK 8 +.\" Arch: 汎用 +.\" +.\" 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. +.\" +.pl 99999 +.TH "jstatd" "1" "2013年11月21日" "JDK 8" "モニタリング・ツール" +.\" ----------------------------------------------------------------- +.\" * Define some portability stuff +.\" ----------------------------------------------------------------- +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.\" http://bugs.debian.org/507673 +.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" ----------------------------------------------------------------- +.\" * set default formatting +.\" ----------------------------------------------------------------- +.\" disable hyphenation +.nh +.\" disable justification (adjust text to left margin only) +.ad l +.\" ----------------------------------------------------------------- +.\" * MAIN CONTENT STARTS HERE * +.\" ----------------------------------------------------------------- +.SH "NAME" +jstatd \- Java仮想マシン(JVM)をモニターし、リモート・モニタリング・ツールがJVMに接続できるようにします。このコマンドは試験的なもので、サポートされていません。 +.SH "概要" +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -jstatd [ \fP\f4options\fP\f3 ]\fP -.br -\f3 -.fl -\fP +\fIjstatd\fR [ \fIoptions\fR ] .fi - -.LP -.SH "パラメータ" -.LP -.RS 3 -.TP 3 -options -コマンド行オプション。オプションは任意の順序で指定できます。重複または矛盾するオプションがある場合、最後に指定したオプションが優先されます。 +.if n \{\ .RE - -.LP -.SH " 説明" -.LP -.LP -\f3jstatd\fP ツールは、計測された HotSpot Java 仮想マシン (JVM) の作成と終了を監視し、ローカルシステム上で実行している Java 仮想マシンに、リモート監視ツールが接続できるようにするためのインタフェースを提供する RMI サーバーアプリケーションです。 -.LP -.LP -\f3jstatd\fP サーバーでは、ローカルホストに RMI レジストリが存在することが必要になります。\f3jstatd\fP サーバーは、デフォルトポートまたは \f2\-p port\fP オプションで指定されたポート上の RMI レジストリに接続しようとします。RMI レジストリが見つからない場合、\f2\-p port\fP オプションで指定されたポート、または \f2\-p port\fP が省略されている場合は、デフォルト RMI レジストリにバインドされた \f3jstatd\fP アプリケーション内に、1 つの RMI レジストリが作成されます。内部 RMI レジストリの作成は、\f2\-nr\fP オプションを指定することによって禁止することができます。 -.LP -.LP -\f3注:\fP このユーティリティーはサポート対象外であり、将来の JDK のバージョンでは利用できなくなる可能性があります。現在、Windows 98 および Windows Me プラットフォームでは使用できません。 -.LP +.\} +.PP +\fIoptions\fR +.RS 4 +コマンドライン・オプション。オプションを参照してください。 +.RE +.SH "説明" +.PP +\fIjstatd\fRコマンドは、計測されたJava HotSpot VMの作成と終了をモニターし、ローカル・システム上で実行されているJVMに、リモート・モニタリング・ツールが接続できるようにするためのインタフェースを提供するRMIサーバー・アプリケーションです。 +.PP +\fIjstatd\fRサーバーでは、ローカル・ホストにRMIレジストリが必要になります。\fIjstatd\fRサーバーはデフォルト・ポートで、または\fI\-p\fR +\fIport\fRオプションで指定したポートで、RMIレジストリに接続しようとします。RMIレジストリが見つからない場合、\fI\-p\fR +\fIport\fRオプションで指定されたポート、または\fI\-p\fR +\fIport\fRオプションが省略されている場合は、デフォルトRMIレジストリにバインドされた\fIjstatd\fRアプリケーション内に、1つのRMIレジストリが作成されます。内部RMIレジストリの作成は、\fI\-nr\fRオプションを指定することによって中止できます。 .SH "オプション" -.LP -.LP -\f3jstatd\fP コマンドは次のオプションをサポートしています。 -.LP -.RS 3 -.TP 3 -\-nr -既存の RMI レジストリが見つからない場合、\f2jstatd\fP プロセス内に内部 RMI レジストリを作成しないようにします。 -.TP 3 -\-p\ port -RMI レジストリがあると予想されるポート番号です。 見つからない場合は、\f2\-nr\fP が指定されていなければ作成されます。 -.TP 3 -\-n\ rminame -RMI レジストリにおいて、リモート RMI オブジェクトがバインドされる名前です。デフォルト名は \f2JStatRemoteHost\fP です。複数の \f3jstatd\fP サーバーが同じホスト上で起動している場合、各サーバーのエクスポートした RMI オブジェクトの名前は、このオプションを指定することによって、一意の名前にすることができます。ただし、このオプションを使用する場合、監視クライアントの \f2hostid\fP および \f2vmid\fP 文字列に、その一意のサーバー名を含める必要があります。 -.TP 3 -\-Joption -\f3javac\fP が呼び出す \f3java\fP 起動ツールに、\f2option\fP を渡します。たとえば、\f3\-J\-Xms48m\fP と指定すると、スタートアップメモリーは 48M バイトに設定されます。\f3\-J\fP を使って、Java で記述されたアプリケーションを実行する背後の VM にオプション渡すことは、よく行われています。 +.PP +\-nr +.RS 4 +既存のRMIレジストリが見つからない場合、\fIjstatd\fRプロセス内に内部RMIレジストリを作成しないようにします。 .RE - -.LP -.SH "セキュリティー" -.LP -.LP -\f3jstatd\fP サーバーは、有効なネイティブアクセス権を持つ JVM だけを監視できます。したがって、\f3jstatd\fP プロセスは、ターゲット JVM と同じユーザー資格で実行している必要があります。一部のユーザー資格は、UNIX(TM) ベースのシステムにおける \f2root\fP ユーザーのように、システム上の任意の JVM によってエクスポートされたインストゥルメンテーションへのアクセス権を持っています。このような資格で実行している \f3jstatd\fP プロセスは、システム上のすべての JVM を監視できますが、セキュリティー上の別の問題が起こります。 -.LP -.LP -\f3jstatd\fP サーバーは、リモートクライアントの認証を一切与えません。そのため、\f3jstatd\fP サーバープロセスを実行すると、\f3jstatd\fP プロセスがアクセス権を持つすべての JVM によるインストゥルメンテーションのエクスポートを、ネットワーク上のすべてのユーザーに公開することになります。この無防備な状態は、環境的に望ましくない場合があります。 特に実稼働環境または安全でないネットワークでは、\f3jstatd\fP プロセスを起動する前に、ローカルセキュリティーポリシーを検討する必要があります。 -.LP -.LP -\f3jstatd\fP サーバーは、他のセキュリティーマネージャーがインストールされていない場合には、RMISecurityPolicy のインスタンスをインストールします。 そのため、セキュリティーポリシーファイルを指定する必要があります。ポリシーファイルは、デフォルトポリシー実装の -.na -\f2ポリシーファイルの構文\fP @ -.fi -http://java.sun.com/javase/6/docs/technotes/guides/security/PolicyFiles.htmlに準拠する必要があります。 -.LP -.LP -次のポリシーファイルの場合、\f3jstatd\fP サーバーは一切のセキュリティー例外を使用せずに実行できます。このポリシーは、すべてのコードベースへのあらゆるアクセス権を認めるポリシーよりも自由度は低いですが、\f3jstatd\fP サーバーを実行するために最低限必要なアクセス権しか認めないポリシーよりも自由度は高くなっています。 -.LP +.PP +\-p \fIport\fR +.RS 4 +RMIレジストリがあると予想されるポート番号です。見つからない場合は、\fI\-nr\fRオプションが指定されていなければ作成されます。 +.RE +.PP +\-n \fIrminame\fR +.RS 4 +RMIレジストリにおいて、リモートRMIオブジェクトがバインドされる名前です。デフォルト名は\fIJStatRemoteHost\fRです。複数の\fIjstatd\fRサーバーが同じホスト上で起動している場合、各サーバーのエクスポートしたRMIオブジェクトの名前は、このオプションを指定することによって、一意の名前にすることができます。ただし、このオプションを使用する場合、モニタリング・クライアントの\fIhostid\fRおよび\fIvmid\fR文字列に、その一意のサーバー名を含める必要があります。 +.RE +.PP +\-J\fIoption\fR +.RS 4 +JVMに\fIoption\fRを渡します。optionには、Javaアプリケーション起動ツールのリファレンス・ページに記載されている\fIオプション\fRを1つ指定します。たとえば、\fI\-J\-Xms48m\fRと指定すると、スタートアップ・メモリーは48MBに設定されます。java(1)を参照してください。 +.RE +.SH "セキュリティ" +.PP +\fIjstatd\fRサーバーは、適切なネイティブ・アクセス権を持つJVMのみを監視できます。したがって、\fIjstatd\fRプロセスは、ターゲットJVMと同じユーザー資格で実行されている必要があります。UNIXベースのシステムにおけるrootユーザーなどの一部のユーザー資格は、システム上の任意のJVMによってエクスポートされたインストゥルメンテーションへのアクセス権を持っています。このような資格で実行されている\fIjstatd\fRプロセスは、システム上のすべてのJVMを監視できますが、セキュリティ上の別の問題が起こります。 +.PP +\fIjstatd\fRサーバーには、リモート・クライアントの認証機能がありません。そのため、\fIjstatd\fRサーバー・プロセスを実行すると、\fIjstatd\fRプロセスがアクセス権を持つすべてのJVMによるインストゥルメンテーションのエクスポートを、ネットワーク上のすべてのユーザーに公開することになります。この無防備な状態は、環境によっては望ましくない場合があるので、特に実稼働環境または安全でないネットワークでは、\fIjstatd\fRプロセスを起動する前に、ローカル・セキュリティ・ポリシーを検討する必要があります。 +.PP +\fIjstatd\fRサーバーは、他のセキュリティ・マネージャがインストールされていない場合には、\fIRMISecurityPolicy\fRのインスタンスをインストールします。そのため、セキュリティ・ポリシー・ファイルを指定する必要があります。ポリシー・ファイルは、http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/security/PolicyFiles\&.htmlにある +「デフォルトのPolicyの実装とポリシー・ファイルの構文」に準拠している必要があります +.PP +次のポリシー・ファイルでは、セキュリティ例外を発生せずに\fIjstatd\fRサーバーを実行できます。このポリシーは、すべてのコード・ベースへのあらゆるアクセス権を認めるポリシーよりも自由度が低いですが、\fIjstatd\fRサーバーを実行するために最低限必要なアクセス権のみを認めるポリシーよりも自由度が高くなっています。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -grant codebase "file:${java.home}/../lib/tools.jar" {\fP -.br -\f3 -.fl - permission java.security.AllPermission;\fP -.br -\f3 -.fl -};\fP -.br -\f3 -.fl -\fP +grant codebase "file:${java\&.home}/\&.\&./lib/tools\&.jar" { + permission java\&.security\&.AllPermission; +}; .fi - -.LP -.LP -このポリシーを使用するには、このテキストを \f2jstatd.all.policy\fP というファイルにコピーし、次のように \f3jstatd\fP サーバーを実行します。 -.LP +.if n \{\ +.RE +.\} +.PP +このポリシー設定を使用するには、このテキストを\fIjstatd\&.all\&.policy\fRというファイルにコピーし、次のように\fIjstatd\fRサーバーを実行します。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -jstatd \-J\-Djava.security.policy=jstatd.all.policy\fP -.br -\f3 -.fl -\fP +jstatd \-J\-Djava\&.security\&.policy=jstatd\&.all\&.policy .fi - -.LP -.LP -より厳しいセキュリティーを実施するサイトの場合、カスタムポリシーファイルを使用して、特定の信頼できるホストまたはネットワークにアクセスを制限することができます。 ただし、このような方法は、IP アドレスの盗聴攻撃を受けやすくなります。セキュリティーの問題について、カスタマイズしたポリシーファイルでも対処できない場合は、\f3jstatd\fP サーバーを実行せずに、\f3jstat\fP と \f3jps\fP ツールをローカルで使用することがもっとも安全な方法になります。 -.LP -.SH "リモートインタフェース" -.LP -.LP -\f3jstatd\fP プロセスがエクスポートするインタフェースは、独自に開発したものであり変更される予定です。ユーザーおよび開発者は、このインタフェースへの書き込みを行わないでください。 -.LP +.if n \{\ +.RE +.\} +.PP +より厳しいセキュリティを実施するサイトの場合、カスタム・ポリシー・ファイルを使用して、特定の信頼できるホストまたはネットワークにアクセスを制限することができます。ただし、このような方法は、IPアドレスの盗聴攻撃を受けやすくなります。セキュリティの問題について、カスタマイズしたポリシー・ファイルでも対処できない場合は、\fIjstatd\fRサーバーを実行せずに、\fIjstat\fRと\fIjps\fRツールをローカルで使用することが最も安全な方法になります。 +.SH "リモート・インタフェース" +.PP +\fIjstatd\fRプロセスがエクスポートするインタフェースは、独自に開発したものであり変更される予定です。ユーザーおよび開発者は、このインタフェースへの書込みを行わないでください。 .SH "例" -.LP -.LP -次に \f3jstatd\fP を起動する例を紹介します。\f3jstatd\fP スクリプトによって、サーバーはバックグラウンドで自動的に起動します。 -.LP -.SS -内部 RMI レジストリの使用 -.LP -.LP -この例は、内部 RMI レジストリを使用した \f3jstatd\fP の起動を表しています。この例では、デフォルトの RMI レジストリポート (ポート 1099) には、他のサーバーはバインドされていないと想定しています。 -.LP +.PP +次に、\fIjstatd\fRコマンドの例を示します。\fIjstatd\fRスクリプトによって、サーバーはバックグラウンドで自動的に起動します。 +.SS "内部RMIレジストリ" +.PP +この例は、内部RMIレジストリを使用したホストによる\fIjstatd\fRセッションの起動を表しています。この例では、デフォルトのRMIレジストリ・ポート(ポート1099)には、他のサーバーはバインドされていないと想定しています。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -jstatd \-J\-Djava.security.policy=all.policy -.fl -\fP +jstatd \-J\-Djava\&.security\&.policy=all\&.policy .fi - -.LP -.SS -外部 RMI レジストリの使用 -.LP -.LP -この例は、外部 RMI レジストリを使用した \f3jstatd\fP の起動を表しています。 -.LP -.nf -\f3 -.fl -rmiregistry& -.fl -jstatd \-J\-Djava.security.policy=all.policy -.fl -\fP -.fi - -.LP -.LP -この例は、ポート 2020 の外部 RMI レジストリを使用した \f3jstatd\fP の起動を表しています。 -.LP -.nf -\f3 -.fl -rmiregistry 2020& -.fl -jstatd \-J\-Djava.security.policy=all.policy \-p 2020 -.fl -\fP -.fi - -.LP -.LP -この例は、AlternateJstatdServerName の名前にバインドされた、ポート 2020 の外部 RMI レジストリを使用した \f3jstatd\fP の起動を表しています。 -.LP -.nf -\f3 -.fl -rmiregistry 2020& -.fl -jstatd \-J\-Djava.security.policy=all.policy \-p 2020 \-n AlternateJstatdServerName -.fl -\fP -.fi - -.LP -.SS -インプロセス RMI レジストリの作成の禁止 -.LP -.LP -この例は、RMI レジストリが見つからない場合に RMI レジストリを作成しない \f3jstatd\fP の起動を表しています。この例では、RMI レジストリがすでに実行していると想定しています。実行していない場合は、該当するエラーメッセージが表示されます。 -.LP -.nf -\f3 -.fl -jstatd \-J\-Djava.security.policy=all.policy \-nr -.fl -\fP -.fi - -.LP -.SS -RMI ログ機能の有効化 -.LP -.LP -この例は、RMI ログ機能を有効にした \f3jstatd\fP の起動を表しています。この方法は、トラブルシューティングまたはサーバー活動の監視に役立ちます。 -.LP -.nf -\f3 -.fl -jstatd \-J\-Djava.security.policy=all.policy \-J\-Djava.rmi.server.logCalls=true -.fl -\fP -.fi - -.LP -.SH "関連項目" -.LP -.RS 3 -.TP 2 -o -「java(1) \- Java アプリケーション起動ツール」 -.TP 2 -o -「jps(1) \- Java 仮想マシンプロセスステータスツール」 -.TP 2 -o -「jstat(1) \- Java 仮想マシン統計データ監視ツール」 -.TP 2 -o -「 -.na -\f2rmiregistry\fP @ -.fi -http://java.sun.com/javase/6/docs/technotes/tools/index.html#rmi \- Java リモートオブジェクトレジストリ」 +.if n \{\ .RE - -.LP - +.\} +.SS "外部RMIレジストリ" +.PP +この例は、外部RMIレジストリを使用した\fIjstatd\fRセッションの起動を表しています。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +rmiregistry& +jstatd \-J\-Djava\&.security\&.policy=all\&.policy +.fi +.if n \{\ +.RE +.\} +.PP +この例では、ポート2020の外部RMIレジストリを使用して\fIjstatd\fRセッションを起動します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +jrmiregistry 2020& +jstatd \-J\-Djava\&.security\&.policy=all\&.policy \-p 2020 +.fi +.if n \{\ +.RE +.\} +.PP +この例では、ポート2020の外部RMIレジストリを使用して、\fIAlternateJstatdServerName\fRにバインドされている\fIjstatd\fRセッションを起動します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +rmiregistry 2020& +jstatd \-J\-Djava\&.security\&.policy=all\&.policy \-p 2020 + \-n AlternateJstatdServerName +.fi +.if n \{\ +.RE +.\} +.SS "インプロセスRMIレジストリの作成の停止" +.PP +この例では、外部RMIレジストリがない場合に作成しない\fIjstatd\fRセッションを起動します。この例では、RMIレジストリがすでに実行されていると想定しています。RMIレジストリが実行されていない場合、エラー・メッセージが表示されます。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +jstatd \-J\-Djava\&.security\&.policy=all\&.policy \-nr +.fi +.if n \{\ +.RE +.\} +.SS "RMIロギングの有効化" +.PP +この例では、RMIロギング機能を有効化して\fIjstatd\fRセッションを起動します。この方法は、トラブルシューティングまたはサーバー活動のモニタリングに役立ちます。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +jstatd \-J\-Djava\&.security\&.policy=all\&.policy + \-J\-Djava\&.rmi\&.server\&.logCalls=true +.fi +.if n \{\ +.RE +.\} +.SH "関連項目" +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +java(1) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +jps(1) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +jstat(1) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +rmiregistry(1) +.RE +.br +'pl 8.5i +'bp diff --git a/jdk/src/solaris/doc/sun/man/man1/ja/jvisualvm.1 b/jdk/src/solaris/doc/sun/man/man1/ja/jvisualvm.1 index 25a29ca9610..d4d0d519bf6 100644 --- a/jdk/src/solaris/doc/sun/man/man1/ja/jvisualvm.1 +++ b/jdk/src/solaris/doc/sun/man/man1/ja/jvisualvm.1 @@ -1,126 +1,123 @@ -." Copyright (c) 2008, 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. -." -.TH jvisualvm 1 "07 May 2011" - -.LP -.SH "名前" -\f2jvisualvm\fP \- Java 仮想マシンの監視、トラブルシューティング、およびプロファイリングツール -.LP -.RS 3 -.TP 2 -o -形式 -.TP 2 -o -パラメータ -.TP 2 -o -説明 -.TP 2 -o -オプション -.TP 2 -o -使用方法 -.TP 2 -o -関連項目 -.RE - -.LP -.SH "形式" -.LP +'\" t +.\" Copyright (c) 2008, 2013, Oracle and/or its affiliates. All rights reserved. +.\" Title: jvisualvm +.\" Language: English +.\" Date: 2013年11月21日 +.\" SectDesc: Javaトラブルシューティング、プロファイリング、モニタリングおよび管理ツール +.\" Software: JDK 8 +.\" Arch: 汎用 +.\" +.\" 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. +.\" +.pl 99999 +.TH "jvisualvm" "1" "2013年11月21日" "JDK 8" "Javaトラブルシューティング、プロファイリング、モニタリン" +.\" ----------------------------------------------------------------- +.\" * Define some portability stuff +.\" ----------------------------------------------------------------- +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.\" http://bugs.debian.org/507673 +.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" ----------------------------------------------------------------- +.\" * set default formatting +.\" ----------------------------------------------------------------- +.\" disable hyphenation +.nh +.\" disable justification (adjust text to left margin only) +.ad l +.\" ----------------------------------------------------------------- +.\" * MAIN CONTENT STARTS HERE * +.\" ----------------------------------------------------------------- +.SH "NAME" +jvisualvm \- Javaアプリケーションを視覚的に監視、トラブルシュートおよびプロファイルします。 +.SH "概要" +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl - \fP\f3jvisualvm\fP [ \f2options\fP ] -.fl +\fIjvisualvm\fR [ \fIoptions\fR ] .fi - -.LP -.SH "パラメータ" -.LP -.LP -オプションを使用する場合、コマンド名の直後に記述してください。オプションの指定順序に決まりはありません。特定のオプションに適用されるパラメータについては、このあとの「オプション」を参照してください。 -.LP -.SH " 説明" -.LP -.LP -Java VisualVM は、指定された Java 仮想マシン (JVM(*)) で Java テクノロジベースのアプリケーション (Java アプリケーション) が実行されているときに、その Java アプリケーションに関する詳細な情報を提供する直感的なグラフィカルユーザーインタフェースです。Java VisualVM という名前は、Java VisualVM が JVM ソフトウェアに関する情報を「視覚的に」提供するという事実に由来しています。 -.LP -.LP -Java VisualVM は、いくつかの監視、トラブルシューティング、およびプロファイリングユーティリティーを 1 つのツールに統合します。たとえば、スタンドアロンツール \f2jmap\fP、 \f2jinfo\fP、 \f2jstat\fP 、および \f2jstack\fP で提供されている機能のほとんどが、Java VisualVM に組み込まれています。JConsole ツールによって提供される一部の機能など、ほかの機能はオプションのプラグインとして追加できます。 -.LP +.if n \{\ +.RE +.\} +.PP +\fIoptions\fR +.RS 4 +コマンドライン・オプション。オプションを参照してください。 +.RE +.SH "説明" +.PP +Java VisualVMは、指定されたJava仮想マシン(JVM)でJavaテクノロジ・ベースのアプリケーション(Javaアプリケーション)が実行されているときに、そのJavaアプリケーションに関する詳細な情報を提供する直感的なグラフィカル・ユーザー・インタフェースです。Java VisualVMという名前は、Java VisualVMがJVMソフトウェアに関する情報を視覚的に提供するという事実に由来しています。 +.PP +Java VisualVMは、いくつかのモニタリング、トラブルシューティングおよびプロファイリング・ユーティリティを1つのツールに統合します。たとえば、スタンドアロン・ツール\fIjmap\fR、\fIjinfo\fR、\fIjstat\fRおよび\fIjstack\fRで提供されている機能のほとんどが、Java VisualVMに組み込まれています。\fIjconsole\fRコマンドによって提供される一部の機能など、他の機能はオプションのプラグインとして追加できます。 +.PP +Java VisualVMは、Javaアプリケーションの開発者がアプリケーションのトラブルシューティングを行ったり、アプリケーションのパフォーマンスを監視および改善したりするのに役立ちます。Java VisualVMを使用すると、開発者はヒープ・ダンプの生成および解析、メモリー・リークの特定、ガベージ・コレクションの実行および監視、およびメモリーとCPUの簡易プロファイリングの実行が可能になります。プラグインでJava VisualVMの機能を拡張できます。たとえば、\fIjconsole\fRコマンドのほとんどの機能は、「MBean」タブおよびJConsole Plug\-in Wrapperプラグインを介して使用できます。標準のJava VisualVMプラグインのカタログから選択するには、Java VisualVMメニューの\fB「ツール」\fR、\fB「プラグイン」\fRを選択します。 +.PP +Java VisualVMを起動するには、次のコマンドを実行します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +% jvisualvm <options> +.fi +.if n \{\ +.RE +.\} .SH "オプション" -.LP -.LP -次のオプションは、Java VisualVM を起動したときに実行可能になります。 -.LP -.RS 3 -.TP 3 -\-J<jvm_option>\ -この \f2<jvm_option>\fP を JVM ソフトウェアに渡します。 +.PP +次のオプションは、Java VisualVMを起動したときに実行可能になります。 +.PP +\-J\fIjvm_option\fR +.RS 4 +この\fIjvm_option\fRをJVMソフトウェアに渡します。 .RE - -.LP -.SH "使用方法" -.LP -.LP -Java VisualVM は、Java アプリケーションの開発者がアプリケーションのトラブルシューティングを行なったり、アプリケーションのパフォーマンスを監視および改善したりするのに役立ちます。Java VisualVM を使用すると、開発者はヒープダンプの生成および解析、メモリーリークの特定、ガベージコレクションの実行および監視、およびメモリーと CPU の簡易プロファイリングの実行が可能になります。Java VisualVM の機能を拡張するプラグインもいくつかあります。たとえば、JConsole ツールのほとんどの機能は、MBeans タブおよび JConsole Plug\-in Wrapper プラグインを介して使用できます。標準の Java VisualVM プラグインのカタログから選択するには、Java VisualVM メニューの「ツール」>「プラグイン」を選択します。 -.LP -.LP -Java VisualVM を起動するには、次のコマンドを実行します。 -.LP -.nf -\f3 -.fl -% jvisualvm \fP\f4<options>\fP\f3 -.fl -\fP -.fi - -.LP .SH "関連項目" -.LP -.LP -Java VisualVM の詳細は、次のページを参照してください。 -.LP -.RS 3 -.TP 2 -o -.na -\f2Java VisualVM 開発者のサイト\fP @ -.fi -http://visualvm.java.net -.TP 2 -o -.na -\f2Java SE プラットフォームでの Java VisualVM のドキュメント\fP @ -.fi -http://java.sun.com/javase/6/docs/technotes/guides/visualvm/index.html +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +Java VisualVM開発者のサイト +http://visualvm\&.java\&.net/ .RE - -.LP -.LP -\f2(* 「Java 仮想マシン」と「JVM」という用語は、Java プラットフォームの仮想マシンを意味しています。)\fP -.LP - +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +Java SEドキュメントのJava VisualVM +(http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/visualvm/index\&.html) +.RE +.br +'pl 8.5i +'bp diff --git a/jdk/src/solaris/doc/sun/man/man1/ja/keytool.1 b/jdk/src/solaris/doc/sun/man/man1/ja/keytool.1 index aac06f6ba57..c19d4cf4e45 100644 --- a/jdk/src/solaris/doc/sun/man/man1/ja/keytool.1 +++ b/jdk/src/solaris/doc/sun/man/man1/ja/keytool.1 @@ -1,1845 +1,1579 @@ -." 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 -." 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. -." -.TH keytool 1 "07 May 2011" - -.LP -.SH "名前" -keytool \- 鍵と証明書の管理ツール -.LP -.LP -暗号化鍵、X.509 証明書チェーン、および信頼できる証明書を含むキーストア (データベース) を管理します。 -.LP -.SH "形式" -.LP +'\" t +.\" Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved. +.\" Title: keytool +.\" Language: English +.\" Date: 2013年8月6日 +.\" SectDesc: セキュリティ・ツール +.\" Software: JDK 8 +.\" Arch: 汎用 +.\" +.\" 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. +.\" +.pl 99999 +.TH "keytool" "1" "2013年8月6日" "JDK 8" "セキュリティ・ツール" +.\" ----------------------------------------------------------------- +.\" * Define some portability stuff +.\" ----------------------------------------------------------------- +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.\" http://bugs.debian.org/507673 +.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" ----------------------------------------------------------------- +.\" * set default formatting +.\" ----------------------------------------------------------------- +.\" disable hyphenation +.nh +.\" disable justification (adjust text to left margin only) +.ad l +.\" ----------------------------------------------------------------- +.\" * MAIN CONTENT STARTS HERE * +.\" ----------------------------------------------------------------- +.SH "NAME" +keytool \- 暗号化鍵、X\&.509証明書チェーンおよび信頼できる証明書を含むキーストア(データベース)を管理します。 +.SH "概要" +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -\fP\f3keytool\fP [ commands ] -.fl -.fi - -.LP -.LP -Java SE 6 で keytool のコマンドインタフェースが変更されました。詳細については「変更点」の節を参照してください。以前に定義されたコマンドも引き続きサポートされています。 -.LP -.SH "説明" -.LP -\f3keytool\fP は、鍵と証明書を管理するためのユーティリティーです。keytool を使うと、自分の公開鍵と非公開鍵のペア、および関連する証明書を管理し、デジタル署名を使った自己認証 (ほかのユーザーまたはサービスに対して自分自身を認証すること) や、データの整合性と証明書に関するサービスを利用することができます。keytool では、通信相手の公開鍵を (証明書の形で) キャッシュすることもできます。 -.LP -「証明書」とは、あるエンティティー (人物、会社など) からのデジタル署名付きの文書のことです。証明書には、ほかのあるエンティティーの公開鍵 (およびその他の情報) が特別な値を持っていることが書かれています(「証明書」を参照)。データにデジタル署名が付いている場合は、デジタル署名を検証することで、データの整合性およびデータが本物であることをチェックできます。データの「整合性」とは、データが変更されたり、改変されたりしていないことを意味します。 また、データが「本物である」とは、そのデータが、データを作成して署名したと称する人物から実際に渡されたデータであることを意味します。 -.LP -.LP -また、\f3keytool\fP を使えば、DES などの対称暗号化/復号化で使用される秘密鍵を管理することもできます。 -.LP -.LP -\f3keytool\fP は、鍵と証明書を\f2「キーストア」\fPに格納します。 -.LP -.SH "コマンドとオプションに関する注" -.LP -.LP -以下では、コマンドとそのオプションについて説明します。注: -.LP -.RS 3 -.TP 2 -o -どのコマンド名およびオプション名にも先頭にマイナス記号 (\-) が付く -.TP 2 -o -各コマンドのオプションは任意の順序で指定できる -.TP 2 -o -イタリック体になっていないすべての項目、または中括弧か角括弧で囲まれているすべての項目は、そのとおりに指定する必要がある -.TP 2 -o -オプションを囲む中括弧は、一般に、そのオプションをコマンド行で指定しなかった場合に、デフォルト値が使われることを意味する。中括弧は、 \f2\-v\fP、 \f2\-rfc\fP、および \f2\-J\fP オプションを囲むのにも使われるが、これらのオプションはコマンド行で指定された場合にのみ意味を持つ (つまり、これらのオプションには、オプション自体を指定しないこと以外に「デフォルト値」は存在しない) -.TP 2 -o -オプションを囲む角括弧は、そのオプションをコマンド行で指定しなかった場合に、値の入力を求められることを意味する。( \f2\-keypass\fP オプションの場合、オプションをコマンド行で指定しなかった場合は、\f3keytool\fP がまずキーストアのパスワードから非公開/秘密鍵の復元を試みる。 ユーザーは、この試みが失敗した場合に非公開/秘密鍵のパスワードの入力を求められる -.TP 2 -o -イタリック体の項目の実際の値 (オプションの値) は、ユーザーが指定する必要があるたとえば、 \f2\-printcert\fP コマンドの形式は次のとおりである -.nf -\f3 -.fl - keytool \-printcert {\-file \fP\f4cert_file\fP\f3} {\-v} -.fl -\fP -.fi -.LP -\f2\-printcert\fP コマンドを指定するときは、\f2cert_file\fP の代わりに実際のファイル名を指定する。次に例を示す -.nf -\f3 -.fl - keytool \-printcert \-file VScert.cer -.fl -\fP -.fi -.TP 2 -o -オプションの値に空白 (スペース) が含まれている場合は、値を引用符で囲む必要がある -.TP 2 -o -\f2\-help\fP コマンドはデフォルトのコマンドである。たとえば、次のようにコマンド行を指定したとする -.nf -\f3 -.fl - keytool -.fl -\fP -.fi -.LP -これは、次のように指定することと同じです。 -.nf -\f3 -.fl - keytool \-help -.fl -\fP +\fIkeytool\fR [\fIcommands\fR] .fi +.if n \{\ .RE - -.LP -.SS -オプションのデフォルト値 -.LP -.LP -オプションのデフォルト値は、次のとおりです。 -.LP -.nf -\f3 -.fl -\-alias "mykey" -.fl - -.fl -\-keyalg -.fl - "DSA" (\fP\f3\-genkeypair\fP\f3 を使用している場合) -.fl - "DES" (\fP\f3\-genseckey\fP\f3 を使用している場合) -.fl - -.fl -\-keysize -.fl - 2048 (\fP\f3\-genkeypair\fP\f3 を使用していて \-keyalg が "RSA" の場合) -.fl - 1024 (\fP\f3\-genkeypair\fP\f3 を使用していて \-keyalg が "DSA" の場合) -.fl - 256 (\fP\f3\-genkeypair\fP\f3 を使用していて \-keyalg が "EC" の場合) -.fl - 56 (\fP\f3\-genseckey\fP\f3 を使用していて \-keyalg が "DES" の場合) -.fl - 168 (\fP\f3\-genseckey\fP\f3 を使用していて \-keyalg が "DESede" の場合) -.fl - -.fl - -.fl -\-validity 90 -.fl - -.fl -\-keystore ユーザーのホームディレクトリの \fP\f4.keystore\fP\f3 というファイル -.fl - -.fl -\-storetype セキュリティープロパティーファイルの「keystore.type」プロパティーの値で、 -.fl - java.security.KeyStore の静的な getDefaultType メソッドから返される \fP\f4 \fP\f3 -.fl - \fP\f4 \fP\f3 -.fl - -.fl -\-file 読み込みの場合は標準入力、書き込みの場合は標準出力 -.fl - -.fl -\-protected false -.fl -\fP -.fi - -.LP -.LP -公開/非公開鍵ペアの生成において、署名アルゴリズム (\f2\-sigalg\fP オプション) は、基になる非公開鍵のアルゴリズムから派生します。 -.LP -.RS 3 -.TP 2 -o -基になる非公開鍵が DSA タイプである場合、\f2\-sigalg\fP オプションのデフォルト値は SHA1withDSA になり、 -.TP 2 -o -基になる非公開鍵が RSA タイプである場合は、\f2\-sigalg\fP オプションのデフォルト値は SHA256withRSA になり、 -.TP 2 -o -基になる非公開鍵が EC タイプである場合は、\f2\-sigalg\fP オプションのデフォルト値は SHA256withECDSA になります。 -.RE - -.LP -.LP -選択可能な \f2\-keyalg\fP および \f2\-sigalg\fP の完全な一覧については、 -.na -\f2「Java Cryptography Architecture API Specification & Reference」\fP @ -.fi -http://java.sun.com/javase/6/docs/technotes/guides/security/crypto/CryptoSpec.html#AppAを参照してください。 -.LP -.SS -一般オプション -.LP -.LP -\f2\-v\fP オプションは、 \f2\-help\fP コマンドを除くすべてのコマンドで使用できます。このオプションを指定した場合、コマンドは「冗長」モードで実行され、詳細な証明書情報が出力されます。 -.LP -.LP -また、 \f2\-J\fP\f2javaoption\fP オプションも、任意のコマンドで使用できます。このオプションを指定した場合、指定された \f2javaoption\fP 文字列が Java インタプリタに直接渡されます。このオプションには、空白を含めることはできません。このオプションは、実行環境またはメモリー使用を調整する場合に便利です。指定できるインタプリタオプションを一覧表示するには、コマンド行で \f2java \-h\fP または \f2java \-X\fP と入力してください。 -.LP -.LP -次のオプションは、キーストアに対する操作を行うすべてのコマンドで指定できます。 -.LP -.RS 3 -.TP 3 -\-storetype storetype -.LP -この修飾子は、インスタンスを生成するキーストアのタイプを指定します。 -.TP 3 -\-keystore keystore -.LP -キーストアの場所を指定します。 -.LP -特定の \f3keytool\fP コマンドを実行する際に、JKS ストアタイプが使用され、かつキーストアファイルがまだ存在していなかった場合、新しいキーストアファイルが作成されます。たとえば、 \f2keytool \-genkeypair\fP の実行時に \f2\-keystore\fP オプションが指定されなかった場合、 \f2.keystore\fP という名前のデフォルトキーストアファイルがユーザーのホームディレクトリ内にまだ存在していなければ、そこに作成されます。同様に、 \f2\-keystore \fP\f2ks_file\fP というオプションが指定されてもその \f2ks_file\fP が存在しなかった場合、そのファイルが作成されます。 -.LP -\f2\-keystore\fP オプションからの入力ストリームは、 \f2KeyStore.load\fP メソッドに渡されます。URL として \f2NONE\fP が指定されている場合は、null のストリームが \f2KeyStore.load\fP メソッドに渡されます。 \f2NONE\fP は、 \f2KeyStore\fP がファイルベースではなく、たとえば、ハードウェアトークンデバイスに置かれている場合に指定します。 -.TP 3 -\-storepass[:env|:file] argument -.LP -キーストアの整合性を保護するために使うパスワードを指定します。 -.LP -修飾子 \f2env\fP または \f2file\fP を指定しない場合、パスワードの値は \f2argument\fP になります。この値は、6 文字以上にする必要があります。それ以外の場合、パスワードは次のように取得されます。 -.RS 3 -.TP 2 -o -\f2env\fP: \f2argument\fP という名前の環境変数からパスワードを取得する -.TP 2 -o -\f2file\fP: \f2argument\fP という名前のファイルからパスワードを取得する -.RE -.LP -\f3注\fP: \f2\-keypass\fP、 \f2\-srckeypass\fP、 \f2\-destkeypass\fP \f2\-srcstorepass\fP、 \f2\-deststorepass\fP などのパスワードを必要とするその他のオプションはすべて、 \f2env\fP と \f2file\fP 修飾子を受け付けます。パスワードオプションと修飾子は、必ずコロン (\f2:\fP) で区切ってください。 -.LP -パスワードは、キーストアの内容にアクセスするすべてのコマンドで使われます。この種のコマンドを実行するときに、コマンド行で \f2\-storepass\fP オプションを指定しなかった場合は、パスワードの入力を求められます。 -.LP -キーストアから情報を取り出す場合は、パスワードを省略できます。 パスワードを省略すると、取り出す情報の整合性をチェックできないので、警告が表示されます。 -.TP 3 -\-providerName provider_name -.LP -セキュリティープロパティーファイル内に含まれる暗号化サービスプロバイダ名を特定するために使用されます。 -.TP 3 -\-providerClass provider_class_name -.LP -暗号化サービスプロバイダがセキュリティープロパティーファイルに指定されていないときは、そのマスタークラスファイルの名前を指定するときに使われます。 -.TP 3 -\-providerArg provider_arg -.LP -\f2\-providerClass\fP と組み合わせて使用します。\f2provider_class_name\fP のコンストラクタに対する省略可能な文字列入力引数を表します。 -.TP 3 -\-protected -.LP -\f2true\fP または \f2false\fP のいずれか。専用 PIN リーダーなどの保護された認証パスを介してパスワードを指定する必要がある場合には、この値に \f2true\fP を指定してください。 -.LP -注: \f2\-importkeystore\fP コマンドには 2 つのキーストアが関係しているため、2 つのオプション、つまり \f2\-srcprotected\fP と \f2\-destprotected\fP がソースキーストアとターゲットキーストアにそれぞれ指定されます。 -.TP 3 -\-ext {name{:critical}{=value}} -.LP -X.509 証明書エクステンションを示します。このオプションを \-genkeypair および \-gencert で使用して、生成される証明書または \f2\-certreq\fP にエクステンションを埋め込み、証明書要求で要求されるエクステンションを示すことができます。このオプションは、複数回使用できます。name には、サポートされているエクステンション名 (下記を参照) または任意の OID 番号を指定できます。value を指定した場合は、エクステンションのパラメータを示します。省略した場合は、エクステンションのデフォルト値 (定義されている場合) を示すか、またはエクステンションにパラメータは必要ありません。 \f2:critical\fP 修飾子を指定した場合は、エクステンションの isCritical 属性が true であることを示します。それ以外の場合は false であることを示します。:critical の代わりに : \f2:c\fP を使用できます。 . -.RE - -.LP -.LP -現在、keytool は次の名前のエクステンションをサポートしています (大文字と小文字は区別されない)。 -.LP -.LP -.TS -.if \n+(b.=1 .nr d. \n(.c-\n(c.-1 -.de 35 -.ps \n(.s -.vs \n(.vu -.in \n(.iu -.if \n(.u .fi -.if \n(.j .ad -.if \n(.j=0 .na -.. -.nf -.nr #~ 0 -.if n .nr #~ 0.6n -.ds #d .d -.if \(ts\n(.z\(ts\(ts .ds #d nl -.fc -.nr 33 \n(.s -.rm 80 81 -.nr 34 \n(.lu -.eo -.am 80 -.br -.di a+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(80 .ll \n(80u -.in 0 -BC または BasicConstraints -.br -.di -.nr a| \n(dn -.nr a- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di b+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -完全な形は「ca:{true|false}[,pathlen:<len>]」で、<len> は「ca:true,pathlen:<len>」の省略表記です。 省略すると、「ca:true」の意味になります -.br -.di -.nr b| \n(dn -.nr b- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di c+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -usage(,usage)*。usage には、digitalSignature、 nonRepudiation (contentCommitment)、keyEncipherment、dataEncipherment、keyAgreement、keyCertSign、cRLSign、encipherOnly、decipherOnly のいずれかを指定できます。Usage は、あいまいさがなければ、最初の数文字 (たとえば、digitalSignature を dig に) またはキャメルケーススタイル (たとえば、 digitalSignature を dS に、cRLSign を cRLS に) に 短縮できます。Usage の大文字と小文字は区別されません。 -.br -.di -.nr c| \n(dn -.nr c- \n(dl -.. -.ec \ -.eo -.am 80 -.br -.di d+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(80 .ll \n(80u -.in 0 -EKU または ExtendedkeyUsage -.br -.di -.nr d| \n(dn -.nr d- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di e+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -usage(,usage)*。usage には、anyExtendedKeyUsage、 serverAuth、clientAuth、codeSigning、emailProtection、 timeStamping、OCSPSigning、または任意の OID 文字列のいずれかを指定できます。 名前付きの usage は、あいまいさがなければ、 最初の数文字またはキャメルケーススタイルに 短縮できます。Usage の大文字と小文字は区別されません。 -.br -.di -.nr e| \n(dn -.nr e- \n(dl -.. -.ec \ -.eo -.am 80 -.br -.di f+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(80 .ll \n(80u -.in 0 -SAN または SubjectAlternativeName -.br -.di -.nr f| \n(dn -.nr f- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di g+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -type:value(,type:value)*。type には、EMAIL、URI、DNS、IP、または OID を指定できます。value は、type の文字列形式の値です。 -.br -.di -.nr g| \n(dn -.nr g- \n(dl -.. -.ec \ -.eo -.am 80 -.br -.di h+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(80 .ll \n(80u -.in 0 -IAN または IssuerAlternativeName -.br -.di -.nr h| \n(dn -.nr h- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di i+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -SubjectAlternativeName と同じです -.br -.di -.nr i| \n(dn -.nr i- \n(dl -.. -.ec \ -.eo -.am 80 -.br -.di j+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(80 .ll \n(80u -.in 0 -SIA または SubjectInfoAccess -.br -.di -.nr j| \n(dn -.nr j- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di k+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -method:location\-type:location\-value (,method:location\-type:location\-value)*。 method には、「timeStamping」、「caRepository」、または任意の OID を指定できます。location\-type および location\-value には、SubjectAlternativeName エクステンションでサポートされる任意の type:value を指定できます。 -.br -.di -.nr k| \n(dn -.nr k- \n(dl -.. -.ec \ -.eo -.am 80 -.br -.di l+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(80 .ll \n(80u -.in 0 -AIA または AuthorityInfoAccess -.br -.di -.nr l| \n(dn -.nr l- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di m+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -SubjectInfoAccess と同じです。method には、「ocsp」、「caIssuers」、または任意の OID を指定できます。 -.br -.di -.nr m| \n(dn -.nr m- \n(dl -.. -.ec \ -.35 -.nf -.ll \n(34u -.nr 80 0 -.nr 38 \w\f3名前\fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \wKU または KeyUsage -.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 38 \n(d- -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \n(f- -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \n(h- -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \n(j- -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \n(l- -.if \n(80<\n(38 .nr 80 \n(38 -.nr 81 0 -.nr 38 \w\f3値\fP -.if \n(81<\n(38 .nr 81 \n(38 -.81 -.rm 81 -.nr 38 \n(b- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(c- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(e- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(g- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(i- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(k- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(m- -.if \n(81<\n(38 .nr 81 \n(38 -.35 -.nf -.ll \n(34u -.nr 38 1n -.nr 79 0 -.nr 40 \n(79+(0*\n(38) -.nr 80 +\n(40 -.nr 41 \n(80+(3*\n(38) -.nr 81 +\n(41 -.nr TW \n(81 -.if t .if \n(TW>\n(.li .tm Table at line 325 file Input is too wide - \n(TW units -.fc   -.nr #T 0-1 -.nr #a 0-1 -.eo -.de T# -.ds #d .d -.if \(ts\n(.z\(ts\(ts .ds #d nl -.mk ## -.nr ## -1v -.ls 1 -.ls -.. -.ec -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f3名前\fP\h'|\n(41u'\f3値\fP -.ne \n(a|u+\n(.Vu -.ne \n(b|u+\n(.Vu -.if (\n(a|+\n(#^-1v)>\n(#- .nr #- +(\n(a|+\n(#^-\n(#--1v) -.if (\n(b|+\n(#^-1v)>\n(#- .nr #- +(\n(b|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(40u -.in +\n(37u -.a+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.b+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(c|u+\n(.Vu -.if (\n(c|+\n(#^-1v)>\n(#- .nr #- +(\n(c|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'KU または KeyUsage\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.c+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(d|u+\n(.Vu -.ne \n(e|u+\n(.Vu -.if (\n(d|+\n(#^-1v)>\n(#- .nr #- +(\n(d|+\n(#^-\n(#--1v) -.if (\n(e|+\n(#^-1v)>\n(#- .nr #- +(\n(e|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(40u -.in +\n(37u -.d+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.e+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(f|u+\n(.Vu -.ne \n(g|u+\n(.Vu -.if (\n(f|+\n(#^-1v)>\n(#- .nr #- +(\n(f|+\n(#^-\n(#--1v) -.if (\n(g|+\n(#^-1v)>\n(#- .nr #- +(\n(g|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(40u -.in +\n(37u -.f+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.g+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(h|u+\n(.Vu -.ne \n(i|u+\n(.Vu -.if (\n(h|+\n(#^-1v)>\n(#- .nr #- +(\n(h|+\n(#^-\n(#--1v) -.if (\n(i|+\n(#^-1v)>\n(#- .nr #- +(\n(i|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(40u -.in +\n(37u -.h+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.i+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(j|u+\n(.Vu -.ne \n(k|u+\n(.Vu -.if (\n(j|+\n(#^-1v)>\n(#- .nr #- +(\n(j|+\n(#^-\n(#--1v) -.if (\n(k|+\n(#^-1v)>\n(#- .nr #- +(\n(k|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(40u -.in +\n(37u -.j+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.k+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(l|u+\n(.Vu -.ne \n(m|u+\n(.Vu -.if (\n(l|+\n(#^-1v)>\n(#- .nr #- +(\n(l|+\n(#^-\n(#--1v) -.if (\n(m|+\n(#^-1v)>\n(#- .nr #- +(\n(m|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(40u -.in +\n(37u -.l+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.m+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.fc -.nr T. 1 -.T# 1 -.35 -.rm a+ -.rm b+ -.rm c+ -.rm d+ -.rm e+ -.rm f+ -.rm g+ -.rm h+ -.rm i+ -.rm j+ -.rm k+ -.rm l+ -.rm m+ -.TE -.if \n-(b.=0 .nr c. \n(.c-\n(d.-44 - -.LP -.LP -OID 名の場合、OCTET STRING タイプと長さのバイトを除外したエクステンションについては、値は extnValue の HEX ダンプの DER エンコーディングです。HEX 文字列では、標準の HEX 数 (0\-9、a\-f、A\-F) 以外の文字は無視されます。したがって、 \f2「01:02:03:04」\fP と \f2「01020304」の両方とも\fP 同一の値として受け付けられます。値がない場合、エクステンションの値フィールドは空になります。 -.LP -.LP -\f2\-gencert\fP でのみ使用する「honored」という特別な名前は、証明書要求に含まれるエクステンションを優先する方法を示します。この名前の値は、 \f2「all」\fP (要求されるすべてのエクステンションが優先される)、 \f2「name{:[critical|non\-critical]}」\fP (名前付きのエクステンションが優先されるが、別の isCritical 属性を使用する)、および \f2「\-name」\fP (「all」とともに使用し、例外を示す) のコンマ区切りリストです。デフォルトでは、要求されるエクステンションは優先されません。 -.LP -.LP -\-ext 優先のオプションに加え、別の名前の、または OID \-ext のオプションを指定した場合は、このエクステンションが、すでに優先されているエクステンションに追加されます。ただし、この名前 (または OID) を優先される値でも使用した場合は、その値と重要性が要求に含まれるものをオーバーライドします。 -.LP -.LP -subjectKeyIdentifier エクステンションは常に作成されます。自己署名でない証明書の場合は、authorityKeyIdentifier が常に作成されます。 -.LP -.LP -\f3注:\fP ユーザーは、エクステンション (および証明書のほかのフィールド) の組み合わせによっては、インターネットの標準に準拠しない場合があることに注意してください。詳細については、「証明書の準拠に関する注意事項」を参照してください。 -.LP -.SH "コマンド" -.LP -.SS +.\} +.PP +\fIcommands\fR +.RS 4 +コマンドを参照してください。これらのコマンドは、次のようにタスク別に分類されます。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} キーストアへのデータの作成または追加 -.LP -.RS 3 -.TP 3 -\-gencert {\-rfc} {\-infile infile} {\-outfile outfile} {\-alias alias} {\-sigalg sigalg} {\-dname dname} {\-startdate startdate {\-ext ext}* {\-validity valDays} [\-keypass keypass] {\-keystore keystore} [\-storepass storepass] {\-storetype storetype} {\-providername provider_name} {\-providerClass provider_class_name {\-providerArg provider_arg}} {\-v} {\-protected} {\-Jjavaoption} -.LP -証明書要求ファイル ( \f2keytool \-certreq\fP コマンドで作成できる) に応答して証明書を生成します。このコマンドは、\f2infile\fP から (省略した場合は、標準入力から) 要求を読み込み、別名の非公開鍵を使ってその要求に署名して、X.509 証明書を \f2outfile\fP に (省略した場合は、標準出力に) 出力します。 \f2\-rfc\fP を指定した場合、出力形式は BASE64 符号化の PEM になります。それ以外の場合は、バイナリ DER が作成されます。 -.LP -\f2sigalg\fP には、証明書に署名を付けるときに使うアルゴリズムを指定します。\f2startdate\fP は、証明書が有効になる開始時刻/日付です。\f2valDays\fP には、証明書の有効日数を指定します。 -.LP -\f2dname\fP を指定すると、生成される証明書の主体として使用されます。それ以外の場合は、証明書要求からの名前が使用されます。 -.LP -\f2ext\fP は、証明書に埋め込まれる X.509 エクステンションを示します。\-ext の文法については、「一般オプション」を参照してください。 -.LP -\f2\-gencert\fP コマンドを使用すると、証明書チェーンを作成できます。次の例では、 \f2e1\fP という証明書を作成します。この証明書の証明書チェーンには、3 つの証明書が含まれています。 -.LP -次のコマンドは、ca、ca1、ca2、および e1 の 4 つの鍵ペアを作成します。 -.nf -\f3 -.fl -keytool \-alias ca \-dname CN=CA \-genkeypair -.fl -keytool \-alias ca1 \-dname CN=CA \-genkeypair -.fl -keytool \-alias ca2 \-dname CN=CA \-genkeypair -.fl -keytool \-alias e1 \-dname CN=E1 \-genkeypair -.fl -\fP -.fi -.LP -次の 2 つのコマンドは、署名付き証明書のチェーンを作成します。 \f2ca\fP は ca1 に署名し、 \f2ca1 signs ca2\fP に署名します。すべて自己発行です。 -.nf -\f3 -.fl -keytool \-alias ca1 \-certreq | keytool \-alias ca \-gencert \-ext san=dns:ca1 | keytool \-alias ca1 \-importcert -.fl -keytool \-alias ca2 \-certreq | $KT \-alias ca1 \-gencert \-ext san=dns:ca2 | $KT \-alias ca2 \-importcert -.fl -\fP -.fi -.LP -次のコマンドは、証明書 e1 を作成してファイル e1.cert に格納します。この証明書は ca2 によって署名されます。その結果、e1 の証明書チェーンには ca、ca1、および ca2 が含まれることになります。 -.nf -\f3 -.fl -keytool \-alias e1 \-certreq | keytool \-alias ca2 \-gencert > e1.cert -.fl -\fP -.fi -.TP 3 -\-genkeypair {\-alias alias} {\-keyalg keyalg} {\-keysize keysize} {\-sigalg sigalg} [\-dname dname] [\-keypass keypass] {\-startdate value} {\-ext ext}* {\-validity valDays} {\-storetype storetype} {\-keystore keystore} [\-storepass storepass] {\-providerClass provider_class_name {\-providerArg provider_arg}} {\-v} {\-protected} {\-Jjavaoption} -.LP -鍵のペア (公開鍵および関連する非公開鍵) を生成します。公開鍵は X.509 v3 自己署名証明書でラップされます。証明書は、単一の要素を持つ証明書チェーンとして格納されます。この証明書チェーンと非公開鍵は、\f2alias\fP で特定される新しいキーストアエントリに格納されます。 -.LP -\f2keyalg\fP は鍵のペアの生成に使用するアルゴリズムを、\f2keysize\fP は生成する各鍵のサイズを、それぞれ指定します。\f2sigalg\fP には、自己署名証明書に署名を付けるときに使うアルゴリズムを指定します。このアルゴリズムは、\f2keyalg\fP と互換性のあるものでなければなりません。 -.LP -\f2dname\fP には、\f2alias\fP に関連付け、自己署名証明書の issuer フィールドと subject フィールドとして使う X.500 識別名を指定します。 コマンド行で識別名を指定しなかった場合は、識別名の入力を求められます。 -.LP -\f2keypass\fP には、生成される鍵のペアのうち、非公開鍵を保護するのに使うパスワードを指定します。パスワードを指定しなかった場合は、パスワードの入力を求められます。このとき、Return キーを押すと、キーストアのパスワードと同じパスワードが鍵のパスワードに設定されます。\f2keypass\fP は、6 文字以上にする必要があります。 -.LP -\f2startdate\fP には、証明書の発行時刻を指定します。これは、X.509 証明書の「Validity」フィールドの「Not Before」値とも呼ばれます。 -.LP -オプションの値は、次の 2 つの形式のいずれかで設定できます。 -.RS 3 -.TP 3 -1. -([+\-]\f2nnn\fP[ymdHMS])+ -.TP 3 -2. -[yyyy/mm/dd] [HH:MM:SS] +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\-gencert .RE -.LP -最初の形式では、発行時刻は、指定される値だけ現在の時刻から移ります。指定される値は、一連の下位の値を連結したものになります。下位の各値で、プラス記号 (「+」) は時間が進むことを、マイナス記号 (「\-」) は時間が戻ることを意味しています。移る時間は \f2nnn\fP で、単位は年、月、日、時間、分、または秒です (それぞれ、1 文字の「y」、「m」、「d」、「H」、「M」、または「S」で示されている)。下位の各値で \f2java.util.GregorianCalendar.add(int field, int amount)\fP メソッドを使うことで、発行時刻の追加の値が左から右へ計算されます。たとえば、 \f2「\-startdate \-1y+1m\-1d」\fPと指定すると、開始時刻は次のようになります。 -.nf -\f3 -.fl - Calendar c = new GregorianCalendar(); -.fl - c.add(Calendar.YEAR, \-1); -.fl - c.add(Calendar.MONTH, 1); -.fl - c.add(Calendar.DATE, \-1); -.fl - return c.getTime() -.fl -\fP -.fi -.LP -2 番目の形式では、ユーザーは、年/月/日と時間:分:秒の 2 つの部分で厳密な開始時刻を設定します (地元の時間帯を使用)。ユーザーは、1 つの部分だけを指定できます。これは、もう 1 つの部分は現在の日付 (または時刻) と同じになるということです。ユーザーは、形式の定義に示されているように、桁数を厳密に指定する必要があります (短い場合は 0 で埋める)。日付と時刻の両方が指定された状態で、2 つの部分の間に空白文字が 1 つ (1 つだけ) あります。時間は常に 24 時間形式で指定してください。 -.LP -オプションを指定しないと、開始日付は現在の時刻になります。オプションは、最大で 1 回指定できます。 -.LP -\f2valDays\fP には、証明書の有効日数を指定します ( \f2\-startdate\fP で指定された日付、または \f2\-startdate\fP が指定されていない場合は現在の日付から始まる)。 -.LP -このコマンドは、以前のリリースでは \f2\-genkey\fP という名前でした。この古い名前は、このリリースでも引き続きサポートされており、今後のリリースでもサポートされる予定です。ただし、今後はわかりやすいように、新しい名前 \f2\-genkeypair\fP を使用することをお勧めします。 -.TP 3 -\-genseckey {\-alias alias} {\-keyalg keyalg} {\-keysize keysize} [\-keypass keypass] {\-storetype storetype} {\-keystore keystore} [\-storepass storepass] {\-providerClass provider_class_name {\-providerArg provider_arg}} {\-v} {\-protected} {\-Jjavaoption} -.LP -秘密鍵を生成し、それを新しい \f2KeyStore.SecretKeyEntry\fP (\f2alias\fP で特定される) 内に格納します。 -.LP -\f2keyalg\fP は秘密鍵の生成に使用するアルゴリズムを、\f2keysize\fP は生成する鍵のサイズを、それぞれ指定します。\f2keypass\fP は秘密鍵の保護に使用するパスワードです。パスワードを指定しなかった場合は、パスワードの入力を求められます。このとき、Return キーを押すと、キーストアのパスワードと同じパスワードが鍵のパスワードに設定されます。\f2keypass\fP は、6 文字以上にする必要があります。 -.TP 3 -\-importcert {\-alias alias} {\-file cert_file} [\-keypass keypass] {\-noprompt} {\-trustcacerts} {\-storetype storetype} {\-keystore keystore} [\-storepass storepass] {\-providerName provider_name} {\-providerClass provider_class_name {\-providerArg provider_arg}} {\-v} {\-protected} {\-Jjavaoption} -.LP -ファイル \f2cert_file\fP から証明書または証明書チェーン (証明書チェーンの場合は、PKCS#7 形式の応答または一連の X.509 証明書で提供されるもの) を読み込み、\f2alias\fP によって特定されるキーストアエントリに格納します。ファイルが指定されていない場合は、標準入力から証明書または証明書チェーンを読み込みます。 -.LP -\f3keytool\fP では、X.509 v1、v2、v3 の証明書、および、PKCS#7 形式の証明書から構成されている PKCS#7 形式の証明書チェーンをインポートできます。インポートするデータは、バイナリ符号化方式、または出力可能符号化方式 (Base64 符号化とも呼ばれる) のどちらかで提供する必要があります。 出力可能符号化方式は、インターネット RFC 1421 証明書符号化規格で定義されています。この符号化方式の場合、証明書は「\-\-\-\-\-BEGIN」で始まる文字列で開始され、「\-\-\-\-\-END」で始まる文字列で終了しなければなりません。 -.LP -証明書のインポートには、次の 2 つの目的があります。 -.RS 3 -.TP 3 -1. -信頼できる証明書のリストに証明書を追加する -.TP 3 -2. -CA に証明書署名要求 (\-certreq コマンドを参照) を送信した結果として、CA から受け取った証明応答をインポートする +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\-genkeypair .RE -.LP -どちらの種類のインポートを行うかは、 \f2\-alias\fP オプションの値によって指定します。 -.RS 3 -.TP 3 -1. -\f3別名がキーエントリをポイントしない場合\fP、\f3keytool\fP はユーザーが信頼できる証明書エントリを追加しようとしているものと見なします。この場合、別名がキーストア内にすでに存在していてはいけません。別名がすでに存在している場合、その別名の信頼できる証明書がすでに存在することになるので、\f3keytool\fP はエラーを出力し、証明書のインポートを行いません。 -.TP 3 -2. -.LP -\f3別名がキーエントリをポイントしない場合\fP、\f3keytool\fP はユーザーが信頼できる証明書エントリを追加しようとしているものと見なします。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\-genseckey .RE -\f3新しい信頼できる証明書のインポート\fP -.LP -\f3keytool\fP は、キーストアに証明書を追加する前に、キーストア内にすでに存在する信頼できる証明書を使って、インポートする証明書から (ルート CA の) 自己署名証明書に至るまでの信頼のチェーンの構築を試みます。 -.LP -\f2\-trustcacerts\fP オプションを指定した場合、追加の証明書は信頼できるすなわち cacerts という名前のファイルに含まれる証明書のチェーンと見なされます。 -.LP -\f3keytool\fP が、インポートする証明書から自己署名証明書 (キーストアまたは cacerts ファイルに含まれている自己署名証明書) に至るまでの信頼のパスの構築に失敗した場合は、インポートする証明書の情報を表示し、ユーザーに確認を求めます。 この場合は、表示された証明書のフィンガープリントと、ほかのなんらかの (信頼できる) 情報源 (証明書の所有者本人など) から入手したフィンガープリントとを比較します。「信頼できる証明書」として証明書をインポートするときは、証明書が有効であることを慎重に確認する必要があります。詳細は、「信頼できる証明書のインポートに関する注意事項」を参照してください。インポート操作は、証明書を確認する時点で中止できます。ただし、 \f2\-noprompt\fP オプションが指定されている場合、ユーザーとの対話は行われません。 -\f3証明応答のインポート\fP -.LP -「証明応答」をインポートするときは、キーストア内の信頼できる証明書、および (\-trustcacerts オプションが指定されている場合は) cacerts キーストアファイルで構成された証明書を使って証明応答が検査されます。 -.LP -証明応答が信頼できるかどうかを決定する方法は次のとおりです。 -.RS 3 -.TP 2 -o -\f3証明応答が単一の X.509 証明書である場合\fP、\f3keytool\fP は、証明応答から (ルート CA の) 自己署名証明書に至るまでの信頼チェーンの確立を試みます。証明応答と、証明応答の認証に使われる証明書の階層構造は、\f2alias\fP の新しい証明書チェーンを形成します。信頼チェーンが確立されない場合、証明応答はインポートされません。この場合、\f3keytool\fP は証明書を出力せず、ユーザーに検証を求めるプロンプトを表示します。ユーザーが証明応答の信頼性を判断するのは、不可能ではなくても非常に困難だからです。 -.TP 2 -o -\f3証明応答が PKCS#7 形式の証明書チェーンまたは一連の X.509 証明書である場合\fP、チェーンは、ユーザーの証明書が最初に、0 以上の CA 証明書がその次にくるように並べられます。チェーンが自己署名のルート CA 証明書で終わり、 \f2\-trustcacerts\fP オプションが指定されている場合、\f3keytool\fP は、その証明書と、キーストア内または「cacerts」キーストアファイル内の信頼できるすべての証明書を照合しようとします。チェーンが自己署名のルート CA 証明書で終わっておらず、 \f2\-trustcacerts\fP オプションが指定されている場合、\f3keytool\fP は、キーストア内または「cacerts」キーストアファイル内の信頼できる証明書から自己署名のルート CA 証明書を見つけてそれをチェーンの末尾に追加しようとします。その証明書が見つからず、 \f2\-noprompt\fP オプションが指定されていない場合は、チェーン内の最後の証明書の情報が出力され、ユーザーは確認を求められます。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\-importcert .RE -.LP -証明書応答内の公開鍵が \f2alias\fP の下にすでに格納されているユーザーの公開鍵に一致した場合、古い証明書チェーンが応答内の新しい証明書チェーンで置き換えられます。以前の証明書チェーンを新しい証明書チェーンで置き換えることができるのは、有効な \f2keypass\fP、つまり該当するエントリの非公開鍵を保護するためのパスワードを指定した場合だけです。パスワードを指定しておらず、非公開鍵のパスワードがキーストアのパスワードと異なる場合は、非公開鍵のパスワードの入力を求められます。 -.LP -このコマンドは、以前のリリースでは \f2\-import\fP という名前でした。この古い名前は、このリリースでも引き続きサポートされており、今後のリリースでもサポートされる予定です。ただし、今後はわかりやすいように、新しい名前 \f2\-importcert\fP を使用することをお勧めします。 -.TP 3 -\-importkeystore \-srckeystore srckeystore \-destkeystore destkeystore {\-srcstoretype srcstoretype} {\-deststoretype deststoretype} [\-srcstorepass srcstorepass] [\-deststorepass deststorepass] {\-srcprotected} {\-destprotected} {\-srcalias srcalias {\-destalias destalias} [\-srckeypass srckeypass] [\-destkeypass destkeypass] } {\-noprompt} {\-srcProviderName src_provider_name} {\-destProviderName dest_provider_name} {\-providerClass provider_class_name {\-providerArg provider_arg}} {\-v} {\-protected} {\-Jjavaoption} -.LP -ソースキーストアからターゲットキーストアへ、単一のエントリまたはすべてのエントリをインポートします。 -.LP -\f2srcalias\fP オプションが指定された場合、このコマンドは、その別名で特定される単一のエントリをターゲットキーストアにインポートします。\f2destalias\fP 経由でターゲット別名が指定されなかった場合、\f2srcalias\fP がターゲット別名として使用されます。ソースのエントリがパスワードで保護されていた場合、\f2srckeypass\fP を使ってそのエントリが回復されます。\f2srckeypass\fP が指定されなかった場合、\f3keytool\fP は \f2srcstorepass\fP を使ってそのエントリを回復しようとします。\f2srcstorepass\fP が指定されなかったか正しくなかった場合、ユーザーはパスワードの入力を求められます。ターゲットエントリは \f2destkeypass\fP によって保護されます。\f2destkeypass\fP が指定されなかった場合、ターゲットエントリはソースエントリのパスワードによって保護されます。 -.LP -\f2srcalias\fP オプションが指定されなかった場合、ソースキーストア内のすべてのエントリがターゲットキーストア内にインポートされます。各ターゲットエントリは対応するソースエントリの別名の下に格納されます。ソースのエントリがパスワードで保護されていた場合、\f2srcstorepass\fP を使ってそのエントリが回復されます。\f2srcstorepass\fP が指定されなかったか正しくなかった場合、ユーザーはパスワードの入力を求められます。ソースキーストア内のあるエントリタイプがターゲットキーストアでサポートされていない場合や、あるエントリをターゲットキーストアに格納する際にエラーが発生した場合、ユーザーはそのエントリをスキップして処理を続行するか、あるいは処理を中断するかの選択を求められます。ターゲットエントリはソースエントリのパスワードによって保護されます。 -.LP -ターゲット別名がターゲットキーストア内にすでに存在していた場合、ユーザーは、そのエントリを上書きするか、あるいは異なる別名の下で新しいエントリを作成するかの選択を求められます。 -.LP -\f2\-noprompt\fP を指定した場合、ユーザーは新しいターゲット別名の入力を求められません。既存のエントリはそのターゲット別名で自動的に上書きされます。最後に、インポートできないエントリは自動的にスキップされ、警告が出力されます。 -.TP 3 -\-printcertreq {\-file file} -.LP -PKCS #10 形式の証明書要求の内容を出力します。この要求は、keytool \-certreq コマンドで生成できます。このコマンドは、file から要求を読み込みます。file が省略されている場合は、標準入力から読み込みます。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\-importpassword .RE - -.LP -.SS +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +別のキーストアの内容のインポート +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\-importkeystore +.RE +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +証明書リクエストの生成 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\-certreq +.RE +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} データのエクスポート -.LP -.RS 3 -.TP 3 -\-certreq {\-alias alias} {\-dname dname} {\-sigalg sigalg} {\-file certreq_file} [\-keypass keypass] {\-storetype storetype} {\-keystore keystore} [\-storepass storepass] {\-providerName provider_name} {\-providerClass provider_class_name {\-providerArg provider_arg}} {\-v} {\-protected} {\-Jjavaoption} -.LP -PKCS#10 形式を使って証明書署名要求 (CSR) を生成します。 -.LP -CSR は、証明書発行局 (CA) に送信することを目的としたものです。CA は、証明書要求者を (通常はオフラインで) 認証し、証明書または証明書チェーンを送り返します。 この証明書または証明書チェーンは、キーストア内の既存の証明書チェーン (最初は 1 つの自己署名証明書から構成される) に置き換えて使います。 -.LP -\f2alias\fP に関連付けられた非公開鍵は、PKCS#10 証明書要求を作成するのに使われます。非公開鍵はキーストア内ではパスワードによって保護されているので、非公開鍵にアクセスするには、適切なパスワードを提供する必要があります。コマンド行で \f2keypass\fP を指定しておらず、非公開鍵のパスワードがキーストアのパスワードと異なる場合は、非公開鍵のパスワードの入力を求められます。dname が指定されている場合は、それが CSR で主体として使用されます。それ以外の場合は、別名に関連付けられた X.500 識別名が使用されます。 -.LP -\f2sigalg\fP には、CSR に署名を付けるときに使うアルゴリズムを指定します。 -.LP -CSR は、ファイル \f2certreq_file\fP に格納されます。ファイルが指定されていない場合は、標準出力に CSR が出力されます。 -.LP -CA からの応答をインポートするには、\f2importcert\fP コマンドを使います。 -.TP 3 -\-exportcert {\-alias alias} {\-file cert_file} {\-storetype storetype} {\-keystore keystore} [\-storepass storepass] {\-providerName provider_name} {\-providerClass provider_class_name {\-providerArg provider_arg}} {\-rfc} {\-v} {\-protected} {\-Jjavaoption} -.LP -\f2alias\fP に関連付けられた証明書を (キーストアから) 読み込み、ファイル \f2cert_file\fP に格納します。 -.LP -ファイルが指定されていない場合は、標準出力に証明書が出力されます。 -.LP -デフォルトでは、バイナリ符号化方式の証明書が出力されます。 ただし、\-rfc オプションを指定した場合は、出力可能符号化方式の証明書が出力されます。 出力可能符号化方式は、インターネット RFC 1421 証明書符号化規格で定義されています。 -.LP -\f2alias\fP が、信頼できる証明書を参照している場合は、該当する証明書が出力されます。それ以外の場合、\f2alias\fP は、関連付けられた証明書チェーンを持つ鍵エントリを参照します。この場合は、チェーン内の最初の証明書が返されます。この証明書は、\f2alias\fP によって表されるエンティティーの公開鍵を認証する証明書です。 -.LP -このコマンドは、以前のリリースでは \f2\-export\fP という名前でした。この古い名前は、このリリースでも引き続きサポートされており、今後のリリースでもサポートされる予定です。ただし、今後はわかりやすいように、新しい名前 \f2\-exportcert\fP を使用することをお勧めします。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\-exportcert .RE - -.LP -.SS +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} データの表示 -.LP -.RS 3 -.TP 3 -\-list {\-alias alias} {\-storetype storetype} {\-keystore keystore} [\-storepass storepass] {\-providerName provider_name} {\-providerClass provider_class_name {\-providerArg provider_arg}} {\-v | \-rfc} {\-protected} {\-Jjavaoption} -.LP -\f2alias\fP で特定されるキーストアエントリの内容を (標準出力に) 出力します。別名が指定されていない場合は、キーストア全体の内容が表示されます。 -.LP -このコマンドは、デフォルトでは証明書の SHA1 フィンガープリントを表示します。 \f2\-v\fP オプションが指定されている場合は、所有者、発行者、シリアル番号、拡張機能などの付加的な情報とともに、人間が読むことのできる形式で証明書が表示されます。 \f2\-rfc\fP オプションが指定されている場合は、出力可能符号化方式で証明書の内容が表示されます。 出力可能符号化方式は、インターネット RFC 1421 証明書符号化規格で定義されています。 -.LP -\f2\-v\fP オプションと \f2\-rfc\fP オプションを同時に指定することはできません。 -.TP 3 -\-printcert {\-file cert_file | \-sslserver host[:port]} {\-jarfile JAR_file {\-rfc} {\-v} {\-Jjavaoption} -.LP -ファイル \f2cert_file\fP、\f2host:port\fP にある SSL サーバー、または署名付き JAR ファイル \f2JAR_file\fP ( \f2\-jarfile\fP オプションを指定) から証明書を読み込み、人間が読むことのできる形式で証明書の内容を表示します。ポートが指定されていない場合は、標準の HTTPS ポート 443 が想定されます。 \f2\-sslserver\fP および \f2\-file\fP オプションを同時に指定することはできません。同時に指定すると、エラーが報告されます。オプションが指定されていない場合は、標準入力から証明書を読み込みます。 -.LP -\f2\-rfc\fP が指定されている場合、keytool は、インターネット RFC 1421 標準で定義されているように、PEM モードで証明書を出力します。 -.LP -ファイルまたは標準入力から証明書を読み込む場合、その証明書は、インターネット RFC 1421 標準で定義されているように、バイナリ符号化方式または出力可能符号化方式で表示できます。 -.LP -SSL サーバーがファイアウォールの背後にある場合は、 \f2\-J\-Dhttps.proxyHost=proxyhost\fP と \f2\-J\-Dhttps.proxyPort=proxyport\fP をコマンド行で指定して、プロキシトンネリングを使用できます。詳細は、 -.na -\f2「JSSE リファレンスガイド」\fP @ -.fi -http://java.sun.com/javase/6/docs/technotes/guides/security/jsse/JSSERefGuide.htmlを参照してください。 -.LP -\f3注\fP: このオプションはキーストアとは関係なく使用できます。 -.TP 3 -\-printcrl \-file crl_ {\-v} -.LP -ファイル \f2crl_file\fP から証明書の取り消しリスト (CRL) を読み込みます。 -.LP -証明書の取り消しリスト (CRL) は、デジタル証明書を発行した証明書発行局 (CA) によって取り消されたデジタル証明書のリストです。CA は、\f2crl_file\fP を生成します。 -.LP -\f3注\fP: このオプションはキーストアとは関係なく使用できます。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\-list .RE - -.LP -.SS +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\-printcert +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\-printcertreq +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\-printcrl +.RE +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} キーストアの管理 -.LP -.RS 3 -.TP 3 -\-storepasswd [\-new new_storepass] {\-storetype storetype} {\-keystore keystore} [\-storepass storepass] {\-providerName provider_name} {\-providerClass provider_class_name {\-providerArg provider_arg}} {\-v} {\-Jjavaoption} -.LP -キーストアの内容の整合性を保護するために使うパスワードを変更します。\f2new_storepass\fP には、新しいパスワードを指定します。new_storepass は、6 文字以上でなければなりません。 -.TP 3 -\-keypasswd {\-alias alias} [\-keypass old_keypass] [\-new new_keypass] {\-storetype storetype} {\-keystore keystore} [\-storepass storepass] {\-providerName provider_name} {\-providerClass provider_class_name {\-providerArg provider_arg}} {\-v} {\-Jjavaoption} -.LP -\f2alias\fP によって特定される非公開/秘密鍵を保護するためのパスワードを、\f2old_keypass\fP から \f2new_keypass\fP に変更します。new_keypass は、6 文字以上でなければなりません。 -.LP -コマンド行で \f2\-keypass\fP オプションを指定しておらず、鍵のパスワードがキーストアのパスワードと異なる場合は、鍵のパスワードの入力を求められます。 -.LP -コマンド行で \f2\-new\fP オプションを指定しなかった場合は、新しいパスワードの入力を求められます。 -.TP 3 -\-delete [\-alias alias] {\-storetype storetype} {\-keystore keystore} [\-storepass storepass] {\-providerName provider_name} {\-providerClass provider_class_name {\-providerArg provider_arg}} {\-v} {\-protected} {\-Jjavaoption} -.LP -\f2alias\fP によって特定されるエントリをキーストアから削除します。コマンド行で別名を指定しなかった場合は、別名の入力を求められます。 -.TP 3 -\-changealias {\-alias alias} [\-destalias destalias] [\-keypass keypass] {\-storetype storetype} {\-keystore keystore} [\-storepass storepass] {\-providerName provider_name} {\-providerClass provider_class_name {\-providerArg provider_arg}} {\-v} {\-protected} {\-Jjavaoption} -.LP -指定された \f2alias\fP から新しい別名 \f2destalias\fP へ、既存のキーストアエントリを移動します。ターゲット別名が指定されなかった場合、このコマンドはその入力を求めます。元のエントリがエントリパスワードで保護されていた場合、「\-keypass」オプション経由でそのパスワードを指定できます。鍵パスワードが指定されなかった場合、\f2storepass\fP (指定された場合) がまず試みられます。その試みが失敗すると、ユーザーはパスワードの入力を求められます。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\-storepasswd .RE - -.LP -.SS +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\-keypasswd +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\-delete +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\-changealias +.RE +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} ヘルプの表示 -.LP -.RS 3 -.TP 3 -\-help -.LP -基本的なコマンドとそのオプションの一覧を表示します。 -.LP -特定のコマンドの詳細については、次のように入力してください。 \f2command_name\fP はコマンドの名前です。 -.nf -\f3 -.fl - keytool \-\fP\f4command_name\fP\f3 \-help -.fl -\fP -.fi +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\-help .RE - -.LP -.SH "例" -.LP -.LP -ここでは、自分の鍵のペアおよび信頼できるエンティティーからの証明書を管理するためのキーストアを作成する場合を例として示します。 -.LP -.SS -鍵のペアの生成 -.LP -.LP -まず、キーストアを作成して鍵のペアを生成する必要があります。次に示すのは、実行するコマンドの例です。 -.LP -.nf -\f3 -.fl - keytool \-genkeypair \-dname "cn=Mark Jones, ou=Java, o=Oracle, c=US" -.fl - \-alias business \-keypass \fP\f4<非公開鍵の新しいパスワード>\fP\f3 \-keystore /working/mykeystore -.fl - \-storepass \fP\f4<キーストアの新しいパスワード>\fP\f3 \-validity 180 -.fl -\fP -.fi - -.LP -.LP -注: このコマンドは 1 行に入力しなければなりません。例で複数行に入力しているのは読みやすくするためです。 -.LP -.LP -この例では、working ディレクトリに mykeystore という名前のキーストアを作成し (キーストアはまだ存在していないと仮定する)、作成したキーストアに、\f2<キーストアの新しいパスワード>\fP で指定したパスワード を割り当てます。生成する公開鍵と非公開鍵のペアに対応するエンティティーの「識別名」は、通称が「Mark Jones」、組織単位が「Java」、組織が「Oracle」、2 文字の国番号が「US」です。公開鍵と非公開鍵のサイズはどちらも 1024 ビットで、鍵の作成にはデフォルトの DSA 鍵生成アルゴリズムを使用します。 -.LP -.LP -このコマンドは、公開鍵と識別名情報を含む自己署名証明書 (デフォルトの SHA1withDSA 署名アルゴリズムを使用) を作成します。証明書の有効期間は 180 日です。 証明書は、別名「business」で特定されるキーストアエントリ内の非公開鍵に関連付けられます。非公開鍵には、\f2<非公開鍵の新しいパスワード>\fP で指定したパスワードが割り当てられます。 -.LP -.LP -オプションのデフォルト値を使う場合は、上に示したコマンドを大幅に短くすることができます。実際には、オプションを 1 つも指定せずにコマンドを実行することも可能です。 デフォルト値を持つオプションでは、オプションを指定しなければデフォルト値が使われ、必要な値については入力を求められます。たとえば、単に次のように入力することもできます。 -.LP -.nf -\f3 -.fl - keytool \-genkeypair -.fl -\fP -.fi - -.LP -.LP -この場合は、mykey という別名でキーストアエントリが作成され、新しく生成された鍵のペア、および 90 日間有効な証明書がこのエントリに格納されます。このエントリは、ホームディレクトリ内の .keystore という名前のキーストアに置かれます。このキーストアがまだ存在していない場合は、作成されます。識別名情報、キーストアのパスワード、および非公開鍵のパスワードについては、入力を求められます。 -.LP -.LP -以下では、オプションを指定しないで \f2\-genkeypair\fP コマンドを実行したものとして例を示します。情報の入力を求められた場合は、最初に示した \f2\-genkeypair\fP コマンドの値を入力したものとします (たとえば、識別名には cn=Mark Jones, ou=Java, o=Oracle, c=US と指定)。 -.LP -.SS -証明書発行局に対する署名付き証明書の要求 -.LP -.LP -現時点で手元にあるのは、1 通の自己署名証明書だけです。証明書に証明書発行局 (CA) の署名が付いていれば、ほかのユーザーから証明書が信頼できる可能性も高くなります。CA の署名を取得するには、まず、証明書署名要求 (CSR) を生成します。 たとえば、次のようにします。 -.LP -.nf -\f3 -.fl - keytool \-certreq \-file MarkJ.csr -.fl -\fP -.fi - -.LP -.LP -CSR (デフォルト別名「mykey」によって特定されるエンティティーの CSR) が作成され、MarkJ.csr という名前のファイルに置かれます。このファイルは、VeriSign などの CA に提出します。 CA は要求者を (通常はオフラインで) 認証し、要求者の公開鍵を認証した署名付きの証明書を送り返します。場合によっては、CA が証明書のチェーンを返すこともあります。証明書のチェーンでは、各証明書がチェーン内のその前の署名者の公開鍵を認証します。 -.LP -.SS -CA からの証明書のインポート -.LP -.LP -作成した自己署名証明書は、証明書チェーンで置き換える必要があります。証明書チェーンでは、各証明書が、「ルート」CA を起点とするチェーン内の次の証明書の署名者の公開鍵を認証します。 -.LP -.LP -CA からの証明応答をインポートするには、キーストアか、 \f2cacerts\fP キーストアファイル (importcert コマンドで説明) 内に 1 つ以上の「信頼できる証明書」がある必要があります。 -.LP -.RS 3 -.TP 2 -o -証明応答が証明書チェーンの場合は、チェーンのトップの証明書 (その CA の公開鍵を認証する「ルート」CA の証明書) だけを必要とする -.TP 2 -o -証明応答が単一の証明書の場合は、証明書に署名した CA の発行用の証明書が必要で、その証明書が自己署名されない場合は、さらにその証明書の署名者用の証明書を必要とする。 このようにして自己署名される「ルート」CA の証明書までそれぞれ証明書を必要とする .RE - -.LP -.LP -cacerts キーストアファイルは、いくつかの VeriSign ルート CA 証明書を含んだ状態で出荷されているので、VeriSign の証明書を、信頼できる証明書としてキーストア内にインポートする必要はないかもしれません。ただし、ほかの CA に対して署名付き証明書を要求していて、この CA の公開鍵を認証する証明書が、cacerts にまだ追加されていない場合は、該当する CA からの証明書を、「信頼できる証明書」としてインポートする必要があります。 -.LP -.LP -通常、CA からの証明書は、自己署名証明書、またはほかの CA によって署名された証明書です (後者の場合は、該当するほかの CA の公開鍵を認証する証明書も必要)。たとえば、ABC という企業が CA だとします。このとき、この CA の公開鍵を認証する自己署名証明書と考えられる ABCCA.cer という名前のファイルを、ABC から入手したとします。 -.LP -.LP -「信頼できる証明書」として証明書をインポートするときは、証明書が有効であることを慎重に確認する必要があります。まず、証明書の内容を表示し (\f3keytool\fP \f2\-printcert\fP コマンドを使用するか、または \-noprompt オプションを指定しないで \f3keytool\fP \f2\-importcert\fP コマンドを使用し、 表示された証明書のフィンガープリントが、期待されるフィンガープリントと一致するかどうかを確認します。証明書を送信した人物に連絡し、この人物が提示した (または安全な公開鍵のリポジトリによって提示される) フィンガープリントと、上のコマンドで表示されたフィンガープリントとを比較します。フィンガープリントが一致すれば、送信途中でほかの何者か (攻撃者など) による証明書のすり替えが行われていないことを確認できます。送信途中でこの種の攻撃が行われていた場合、チェックを行わずに証明書をインポートすると、攻撃者によって署名されたすべてのものを信頼することになります。 -.LP -.LP -ABCCA.cer を有効な証明書として信頼する場合は、証明書をキーストアに追加できます。 たとえば、次のようにします。 -.LP -.nf -\f3 -.fl - keytool \-importcert \-alias abc \-file ABCCA.cer -.fl -\fP -.fi - -.LP -.LP -ABCCA.cer ファイルのデータを含む「信頼できる証明書」のエントリがキーストア内に作成され、該当するエントリに abc という別名が割り当てられます。 -.LP -.SS -CA からの証明応答のインポート -.LP -.LP -証明書署名要求の提出先の CA の公開鍵を認証する証明書をインポートしたあとは (または同種の証明書がすでに cacerts ファイル内に存在している場合は)、証明応答をインポートし、自己署名証明書を証明書チェーンで置き換えることができます。この証明書チェーンは、CA の応答がチェーンの場合、証明書署名要求に対する応答として CA から送り返された証明書チェーンです。 また、CA の応答が単一の証明書の場合は、この証明応答と、インポート先のキーストア内または cacerts キーストアファイル内にすでに存在する信頼できる証明書とを使って構築した証明書チェーンです。 -.LP -.LP -たとえば、証明書署名要求を VeriSign に送信したとします。送り返された証明書の名前が VSMarkJ.cer だとすると、次のようにして応答をインポートできます。 -.LP -.nf -\f3 -.fl - keytool \-importcert \-trustcacerts \-file VSMarkJ.cer -.fl -\fP -.fi - -.LP -.SS -公開鍵を認証する証明書のエクスポート -.LP -.LP -たとえば、jarsigner(1) ツールを使って Java ARchive (JAR) ファイルに署名を付けたとします。この JAR ファイルはクライアントによって使われますが、クライアント側では署名を認証したいと考えています。 -.LP -.LP -クライアントが署名を認証する方法の 1 つに、まず自分の公開鍵の証明書を「信頼できる」エントリとしてクライアントのキーストアにインポートする方法があります。そのためには、証明書をエクスポートして、クライアントに提供します。たとえば、次のようにして、証明書を \f2MJ.cer\fP という名前のファイルにコピーします。このエントリには「mykey」という別名が使われているとします。 -.LP -.nf -\f3 -.fl - keytool \-exportcert \-alias mykey \-file MJ.cer -.fl -\fP -.fi - -.LP -.LP -証明書と署名付き JAR ファイルを入手したクライアントは、\f3jarsigner\fP ツールを使って署名を認証できます。 -.LP -.SS -キーストアのインポート -.LP -.LP -コマンド「importkeystore」を使えば、あるキーストアの全体を別のキーストア内にインポートできます。これは、鍵や証明書といったソースキーストア内のすべてのエントリが、単一のコマンドを使ってターゲットキーストア内にインポートされることを意味します。このコマンドを使えば、異なるタイプのキーストア内に含まれるエントリをインポートすることができます。インポート時には、ターゲットキーストア内の新しいエントリはすべて、元と同じ別名および (秘密鍵や非公開鍵の場合は) 保護用パスワードを持ちます。ソースキーストア内の非公開鍵や秘密鍵の回復時に問題が発生した場合、\f3keytool\fP はユーザーにパスワードの入力を求めます。このコマンドは、別名の重複を検出すると、ユーザーに新しい別名の入力を求めます。ユーザーは、新しい別名を指定することも、単純に既存の別名の上書きを \f3keytool\fP に許可することもできます。 -.LP -.LP -たとえば、通常の JKS タイプのキーストア key.jks 内のエントリを PKCS #11 タイプのハードウェアベースのキーストア内にインポートするには、次のコマンドを使用できます。 -.LP -.nf -\f3 -.fl - keytool \-importkeystore -.fl - \-srckeystore key.jks \-destkeystore NONE -.fl - \-srcstoretype JKS \-deststoretype PKCS11 -.fl - \-srcstorepass \fP\f4<ソースキーストアのパスワード>\fP\f3 \-deststorepass \fP\f4<ターゲットキーストアのパスワード>\fP\f3 -.fl -\fP -.fi - -.LP -.LP -また、importkeystore コマンドを使えば、あるソースキーストア内の単一のエントリをターゲットキーストアにインポートすることもできます。この場合、上記の例で示したオプションに加え、インポート対象となる別名を指定する必要があります。srcalias オプションを指定する場合には、ターゲット別名もコマンド行から指定できるほか、秘密/非公開鍵の保護用パスワードやターゲット保護用パスワードも指定できます。その方法を示すコマンドを次に示します。 -.LP -.nf -\f3 -.fl - keytool \-importkeystore -.fl - \-srckeystore key.jks \-destkeystore NONE -.fl - \-srcstoretype JKS \-deststoretype PKCS11 -.fl - \-srcstorepass \fP\f4<ソースキーストアのパスワード>\fP\f3 \-deststorepass \fP\f4<ターゲットキーストアのパスワード>\fP\f3 -.fl - \-srcalias myprivatekey \-destalias myoldprivatekey -.fl - \-srckeypass \fP\f4<ソースエントリのパスワード>\fP\f3 \-destkeypass \fP\f4<ターゲットエントリのパスワード>\fP\f3 -.fl - \-noprompt -.fl -\fP -.fi - -.LP -.SS -一般的な SSL サーバー用の証明書の生成 -.LP -.LP -次に、3 つのエンティティー、つまりルート CA (root)、中間 CA (ca)、および SSL サーバー (server) 用の鍵ペアと証明書を生成する keytool コマンドを示します。すべての証明書を同じキーストアに格納するようにしてください。これらの例では、鍵のアルゴリズムとして RSA を指定することをお勧めします。 -.LP -.nf -\f3 -.fl -keytool \-genkeypair \-keystore root.jks \-alias root \-ext bc:c -.fl -keytool \-genkeypair \-keystore ca.jks \-alias ca \-ext bc:c -.fl -keytool \-genkeypair \-keystore server.jks \-alias server -.fl - -.fl -keytool \-keystore root.jks \-alias root \-exportcert \-rfc > root.pem -.fl - -.fl -keytool \-storepass \fP\f4<storepass>\fP\f3 \-keystore ca.jks \-certreq \-alias ca | keytool \-storepass \fP\f4<storepass>\fP\f3 \-keystore root.jks \-gencert \-alias root \-ext BC=0 \-rfc > ca.pem -.fl -keytool \-keystore ca.jks \-importcert \-alias ca \-file ca.pem -.fl - -.fl -keytool \-storepass \fP\f4<storepass>\fP\f3 \-keystore server.jks \-certreq \-alias server | keytool \-storepass \fP\f4<storepass>\fP\f3 \-keystore ca.jks \-gencert \-alias ca \-ext ku:c=dig,kE \-rfc > server.pem -.fl -cat root.pem ca.pem server.pem | keytool \-keystore server.jks \-importcert \-alias server -.fl -\fP -.fi - -.LP -.SH "用語と警告" -.LP -.SS -KeyStore -.LP -.LP -キーストアは、暗号化の鍵と証明書を格納するための機能です。 -.LP -.RS 3 -.TP 2 -o -\f3キーストアのエントリ\fP -.LP -キーストアには異なるタイプのエントリを含めることができます。\f3keytool\fP でもっとも適用範囲の広いエントリタイプは、次の 2 つです。 -.RS 3 -.TP 3 -1. -\f3鍵のエントリ\fP \- 各エントリは、非常に重要な暗号化の鍵の情報を保持します。この情報は、許可していないアクセスを防ぐために、保護された形で格納されます。 一般に、この種のエントリとして格納される鍵は、秘密鍵か、対応する公開鍵の証明書チェーンを伴う非公開鍵です。\f3keytool\fP がこの両方のタイプのエントリを処理できるのに対し、\f3jarsigner\fP ツールは後者のタイプのエントリ、つまり非公開鍵とそれに関連付けられた証明書チェーンのみを処理します。 -.TP 3 -2. -\f3信頼できる証明書のエントリ\fP \- 各エントリは、第三者からの公開鍵証明書を 1 つ含んでいます。この証明書は、「信頼できる証明書」と呼ばれます。 それは、証明書内の公開鍵が、証明書の「Subject」(所有者) によって特定されるアイデンティティーに由来するものであることを、キーストアの所有者が信頼するからです。証明書の発行者は、証明書に署名を付けることによって、その内容を保証します。 .RE -.TP 2 -o -\f3キーストアの別名\fP -.LP -キーストアのすべてのエントリ (鍵および信頼できる証明書) は、一意の「別名」を介してアクセスされます。 -.LP -別名を指定するのは、\-genseckey コマンドを使って秘密鍵を生成したり、\-genkeypair コマンドを使って鍵ペア (公開鍵と非公開鍵) を生成したり、\-importcert コマンドを使って証明書または証明書チェーンを信頼できる証明書のリストに追加したりするなど、特定のエンティティーをキーストアに追加する場合です。これ以後、\f3keytool\fP コマンドでエンティティーを参照する場合は、このときに指定した別名を使用する必要があります。 -.LP -たとえば、\f2duke\fP という別名を使って新しい公開鍵と非公開鍵のペアを生成し、公開鍵を自己署名証明書 (「証明書チェーン」を参照) でラップするとします。 この場合は、次のコマンドを実行します。 -.nf -\f3 -.fl - keytool \-genkeypair \-alias duke \-keypass dukekeypasswd -.fl -\fP -.fi -.LP -ここでは、初期パスワードとして dukekeypasswd を指定しています。 以後、別名 duke 連付けられた非公開鍵にアクセスするコマンドを実行するときは、このパスワードが必要になります。 duke の非公開鍵のパスワードをあとから変更するには、次のコマンドを実行します。 -.nf -\f3 -.fl - keytool \-keypasswd \-alias duke \-keypass dukekeypasswd \-new newpass -.fl -\fP -.fi -.LP -パスワードが、dukekeypasswd から newpass に変更されます。 -.LP -注: テストを目的とする場合、または安全であることがわかっているシステムで実行する場合以外は、コマンド行やスクリプトでパスワードを指定しないでください。必要なパスワードのオプションをコマンド行で指定しなかった場合は、パスワードの入力を求められます。 -.TP 2 -o -\f3キーストアの実装\fP -.LP -\f2KeyStore\fP クラス ( \f2java.security\fP パッケージで提供される) には、キーストア内の情報に対するアクセスと変更を行うための明確に定義されたインタフェースが用意されています。キーストアの固定実装としては、それぞれが特定の「タイプ」のキーストアを対象とする複数の異なる実装が存在可能です。 -.LP -現在、\f3keytool\fP と \f3jarsigner\fP の 2 つのコマンド行ツールと、\f3Policy Tool\fP という名前の 1 つの GUI ベースのツールが、キーストアの実装を使用しています。 \f2KeyStore\fP は public として使用可能なので、JDK ユーザーは KeyStore を使ったほかのセキュリティーアプリケーションも作成できます。 -.LP -キーストアには、Oracle が提供する組み込みのデフォルトの実装があります。これは、JKS という名前の独自のキーストアタイプ (形式) を利用するもので、キーストアをファイルとして実装しています。この実装では、個々の非公開鍵は個別のパスワードによって保護され、キーストア全体の整合性も (非公開鍵とは別の) パスワードによって保護されます。 -.LP -キーストアの実装は、プロバイダベースです。具体的には、 \f2KeyStore\fP が提供するアプリケーションインタフェースは、Service Provider Interface (SPI) という形で実装されています。つまり、対応する \f2KeystoreSpi\fP 抽象クラス (これも \f2java.security\fP パッケージに含まれている) があり、このクラスが、「プロバイダ」が実装する必要のある Service Provider Interface のメソッドを定義しています。ここで、「プロバイダ」とは、Java Security API によってアクセス可能なサービスのサブセットに対し、その固定実装を提供するパッケージまたはパッケージの集合のことです。したがって、キーストアの実装を提供するには、 -.na -\f2「Java(TM) 暗号化アーキテクチャー用プロバイダの実装方法」\fP @ -.fi -http://java.sun.com/javase/6/docs/technotes/guides/security/crypto/HowToImplAProvider.htmlで説明しているように、クライアントが「プロバイダ」を実装し、KeystoreSpi サブクラスの実装を提供する必要があります。 -.LP -アプリケーションでは、KeyStore クラスが提供する getInstance ファクトリメソッドを使うことで、さまざまなプロバイダから異なる「タイプ」のキーストアの実装を選択できます。 キーストアのタイプは、キーストア情報の格納形式とデータ形式を定義するとともに、キーストア内の非公開/秘密鍵とキーストア自体の整合性を保護するために使われるアルゴリズムを定義します。異なるタイプのキーストアの実装には、互換性はありません。 -.LP -\f3keytool\fP は、任意のファイルベースのキーストア実装で動作します。keytool は、コマンド行から渡されたキーストアの場所をファイル名として扱い、これを FileInputStream に変換して、FileInputStream からキーストアの情報をロードします。一方、\f3jarsigner\fP ツールと \f3policytool\fP ツールは、URL で指定可能な任意の場所からキーストアを読み込むことができます。 -.LP -\f3keytool\fP と \f3jarsigner\fP の場合、\f2\-storetype\fP オプションを使ってコマンド行でキーストアのタイプを指定できます。\f3Policy Tool\fPの場合は、「キーストア」メニューによってキーストアのタイプを指定できます。 -.LP -キーストアのタイプを明示的に指定しない場合、keytool、jarsigner、および policytool の各ツールは、セキュリティープロパティーファイル内で指定された \f2keystore.type\fP プロパティーの値に基づいてキーストアの実装を選択します。セキュリティープロパティーファイルは、\f2java.security\fP という名前でセキュリティープロパティーディレクトリ \f2java.home\fP/lib/security に置かれています。\f2java.home\fP は、実行環境のディレクトリ (SDK の \f2jre\fP ディレクトリまたは Java 2 Runtime Environment の最上位ディレクトリ) です。 -.LP -各ツールは、 \f2keystore.type\fP の値を取得し、この値で指定されたタイプのキーストアを実装しているプロバイダが見つかるまで、現在インストールされているすべてのプロバイダを調べます。目的のプロバイダが見つかると、そのプロバイダからのキーストアの実装を使います。 -.LP -\f2KeyStore\fP クラスでは \f2getDefaultType\fP という名前の static メソッドが定義されており、アプリケーションとアプレットはこのメソッドを使うことで \f2keystore.type\fP プロパティーの値を取得できます。次のコードは、デフォルトのキーストアタイプ ( \f2keystore.type\fP プロパティーで指定されたタイプ) のインスタンスを生成します。 -.nf -\f3 -.fl - KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType()); -.fl -\fP -.fi -.LP -デフォルトのキーストアタイプは JKS (Oracle が提供する独自のタイプのキーストアの実装) です。これは、セキュリティープロパティーファイル内の次の行によって指定されています。 -.nf -\f3 -.fl - keystore.type=jks -.fl -\fP -.fi -.LP -各ツールでデフォルト以外のキーストアの実装を使用するには、上の行を変更して別のキーストアのタイプを指定します。 -.LP -たとえば、pkcs12 と呼ばれるタイプのキーストアの実装を提供しているプロバイダパッケージを使用するには、上の行を次のように変更します。 -.nf -\f3 -.fl - keystore.type=pkcs12 -.fl -\fP -.fi -.LP -注: キーストアのタイプの指定では、大文字と小文字は区別されません。たとえば、JKS と jks は同じものとして扱われます。 +.SH "説明" +.PP +\fIkeytool\fRコマンドは、鍵と証明書を管理するためのユーティリティです。これにより、ユーザーは自分の公開鍵と秘密鍵のペアおよび関連する証明書を管理し、デジタル署名を使用した自己認証(他のユーザーまたはサービスに対して自分自身を認証すること)や、データの整合性と証明書に関するサービスを利用することができます。\fIkeytool\fRコマンドでは、通信しているピアの公開鍵をキャッシュすることもできます(証明書のフォームで)。 +.PP +証明書とは、あるエンティティ(人物、会社など)からのデジタル署名付きの文書のことです。証明書には、他のあるエンティティの公開鍵(およびその他の情報)が特別な値を持っていることが書かれています。(証明書を参照してください。)データにデジタル署名が付いている場合は、デジタル署名を検証することで、データの整合性およびデータが本物であることをチェックできます。データの整合性とは、データが変更されたり、改変されたりしていないことを意味します。また、データが本物であるとは、そのデータが、データを作成して署名したと称する人物から渡されたデータであることを意味します。 +.PP +また、\fIkeytool\fRコマンドを使用すれば、対称暗号化/復号化(DES)で使用される秘密鍵およびパスフレーズを管理することもできます。 +.PP +\fIkeytool\fRコマンドは、鍵と証明書をキーストアに格納します。キーストアの別名を参照してください。 +.SH "コマンドとオプションに関する注意" +.PP +様々なコマンドとその説明については、コマンドを参照してください。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +どのコマンド名およびオプション名にも先頭にマイナス記号(\-)が付きます。 .RE - -.LP -.SS -証明書 -.LP -\f3証明書\fP (\f3公開鍵証明書\fPとも呼ぶ) とは、あるエンティティー (「発行者」) からのデジタル署名付きの文書のことです。 証明書には、ほかのあるエンティティー (「署名者」) の公開鍵 (およびその他の情報) が特別な値を持っていることが書かれています。 -.RS 3 -.TP 2 -o -\f3証明書の用語\fP -.RS 3 -.TP 3 -公開鍵 -.LP -公開鍵は、特定のエンティティーに関連付けられた数です。公開鍵は、該当するエンティティーとの間に信頼できる関係を持つ必要があるすべての人に対して公開することを意図したものです。公開鍵は、署名を検証するのに使われます。 -.TP 3 -デジタル署名 -.LP -データが「デジタル署名」されると、そのデータは、エンティティーの「アイデンティティー」と、そのエンティティーがデータの内容について知っていることを証明する署名とともに格納されます。エンティティーの非公開鍵を使ってデータに署名を付けると、データの偽造は不可能になります。 -.TP 3 -アイデンティティー -.LP -エンティティーを特定するための既知の方法です。システムによっては、公開鍵をアイデンティティーにするものがあります。公開鍵のほかにも、Unix UID や電子メールアドレス、X.509 識別名など、さまざまなものをアイデンティティーとすることができます。 -.TP 3 -署名 -.LP -署名は、なんらかのデータを基にエンティティー (署名者。 証明書に関しては発行者とも呼ばれる) の非公開鍵を使って計算されます。 -.TP 3 -非公開鍵 -.LP -非公開鍵は特定のエンティティーだけが知っている数のことで、この数のことを、そのエンティティーの非公開鍵といいます。非公開鍵は、ほかに知られないように秘密にしておくことが前提になっています。非公開鍵と公開鍵は、すべての公開鍵暗号化システムで対になって存在しています。DSA などの典型的な公開鍵暗号化システムの場合、1 つの非公開鍵は正確に 1 つの公開鍵に対応します。非公開鍵は、署名を計算するのに使われます。 -.TP 3 -エンティティー -.LP -エンテンティーは、人、組織、プログラム、コンピュータ、企業、銀行など、一定の度合いで信頼の対象となるさまざまなものを指します。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +各コマンドのオプションは任意の順序で指定できます。 .RE -.LP -公開鍵暗号化では、その性質上、ユーザーの公開鍵にアクセスする必要があります。大規模なネットワーク環境では、互いに通信しているエンティティー間で以前の関係が引き続き確立されていると仮定したり、使われているすべての公開鍵を収めた信頼できるリポジトリが存在すると仮定したりすることは不可能です。このような公開鍵の配布に関する問題を解決するために証明書が考案されました。現在では、「証明書発行局 (CA)」が信頼できる第三者として機能します。CA は、ほかのエンティティーの証明書に署名する (発行する) 行為を、信頼して任されているエンティティー (企業など) です。CA は法律上の契約に拘束されるので、有効かつ信頼できる証明書だけを作成するものとして扱われます。 -.na -\f2VeriSign\fP @ -.fi -http://www.verisign.com/、 -.na -\f2Thawte\fP @ -.fi -http://www.thawte.com/、 -.na -\f2Entrust\fP @ -.fi -http://www.entrust.com/ をはじめ、多くの CA が存在します。Microsoft の認証サーバー、Entrust の CA 製品などを所属組織内で利用すれば、独自の証明書発行局を運営することも可能です。 -.LP -\f3keytool\fP を使うと、証明書の表示、インポート、およびエクスポートを行うことができます。また、自己署名証明書を生成することもできます。 -.LP -現在、\f3keytool\fP は X.509 証明書を対象にしています。 -.TP 2 -o -\f3X.509 証明書\fP -.LP -X.509 規格では、証明書に含める情報が定義されており、この情報を証明書に書き込む方法 (データ形式) についても記述されています。証明書のすべてのデータは、ASN.1/DER と呼ばれる 2 つの関連規格を使って符号化されます。\f2Abstract Syntax Notation 1\fP はデータについて記述しています。\f2Definite Encoding Rules\fP は、データの保存および転送の方法について記述しています。 -.LP -すべての X.509 証明書は、署名のほかに次のデータを含んでいます。 -.RS 3 -.TP 3 -バージョン -.LP -証明書に適用される X.509 規格のバージョンを特定します。証明書に指定できる情報は、バージョンによって異なります。これまでに、3 つのバージョンが定義されています。\f3keytool\fP では、v1、v2、および v3 の証明書のインポートとエクスポートが可能です。keytool が生成するのは、v3 の証明書です。 -.LP -「X.509 Version 1」は、1988 年から利用されて広く普及しており、もっとも一般的です。 -.LP -「X.509 Version 2」では、Subject や発行者の名前をあとで再利用できるようにするために、Subject と発行者の一意識別子の概念が導入されました。ほとんどの証明書プロファイル文書では、名前を再使用しないことと、証明書で一意な識別子を使わないことが、強く推奨されています。Version 2 の証明書は、広くは使われていません。 -.LP -「X.509 Version 3」はもっとも新しい (1996 年) 規格で、エクステンションの概念をサポートしています。エクステンションは誰でも定義することができ、証明書に含めることができます。現在使われている一般的なエクステンションとしては、KeyUsage (「署名専用」など、鍵の使用を特定の目的に制限する)、AlternativeNames (DNS 名、電子メールアドレス、IP アドレスなど、ほかのアイデンティティーを公開鍵に関連付けることができる) などがあります。エクステンションには、critical というマークを付けて、そのエクステンションのチェックと使用を義務づけることができます。たとえば、critical とマークされ、KeyCertSign が設定された KeyUsage エクステンションが証明書に含まれている場合、この証明書を SSL 通信中に提示すると、証明書が拒否されます。これは、証明書のエクステンションによって、関連する非公開鍵が証明書の署名専用として指定されており、SSL では使用できないためです。 -.TP 3 -シリアル番号 -.LP -証明書を作成したエンティティーは、そのエンティティーが発行するほかの証明書と区別するために、証明書にシリアル番号を割り当てます。この情報は、さまざまな方法で使われます。たとえば、証明書が取り消されると、シリアル番号が証明書の取り消しリスト (CRL) に格納されます。 -.TP 3 -署名アルゴリズム識別子 -.LP -証明書に署名を付けるときに CA が使ったアルゴリズムを特定します。 -.TP 3 -発行者名 -.LP -証明書に署名を付けたエンティティーの X.500 識別名です。エンティティーは、通常は CA です。この証明書を使うことは、証明書に署名を付けたエンティティーを信頼することを意味します。「ルート」つまり「トップレベル」の CA の証明書など、場合によっては発行者が自身の証明書に署名を付けることがある点に注意してください。 -.TP 3 -有効期間 -.LP -各証明書は、限られた期間だけ有効になります。この期間は開始の日時と終了の日時によって指定され、数秒の短い期間から 100 年という長期にわたることもあります。選択される有効期間は、証明書への署名に使われる非公開鍵の強度や証明書に支払う金額など、さまざまな要因で異なります。有効期間は、使用する非公開鍵が損なわれない場合に、エンティティーが公開鍵を信頼できると期待される期間です。 -.TP 3 -Subject 名 -.LP -証明書で公開鍵が識別されているエンティティーの名前です。この名前は X.500 標準を使うので、インターネット全体で一意なものと想定されます。これは、エンティティーの X.500 識別名 (DN) です。次に例を示します。 -.nf -\f3 -.fl - CN=Java Duke, OU=Java Software Division, O=Oracle Corporation, C=US -.fl -\fP -.fi -.LP -これらはそれぞれ主体の通称、組織単位、組織、国を表します。 -.TP 3 -Subject の公開鍵情報 -.LP -名前を付けられたエンティティーの公開鍵とアルゴリズム識別子です。アルゴリズム識別子では、公開鍵に対して使われている公開鍵暗号化システムおよび関連する鍵パラメータが指定されています。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +イタリック体になっていないすべての項目、または中カッコか角カッコで囲まれているすべての項目は、そのとおりに指定する必要があります。 .RE -.TP 2 -o -\f3証明書チェーン\fP -.LP -\f3keytool\fP では、非公開鍵および関連する証明書「チェーン」を含むキーストアの「鍵」エントリを作成し、管理することができます。このようなエントリでは、非公開鍵に対応する公開鍵は、チェーンの最初の証明書に含まれています。 -.LP -鍵を初めて作成すると (\-genkeypair コマンドを参照)、「自己署名証明書」という 1 つの要素だけを含むチェーンが開始されます。自己署名証明書は、発行者 (署名者) が主体 (証明書で認証されている公開鍵の持ち主) と同じである証明書のことです。 \f2\-genkeypair\fP コマンドを呼び出して新しい公開鍵と非公開鍵のペアを作成すると、公開鍵は常に自己署名証明書でラップされます。 -.LP -このあと、証明書署名要求 (CSR) が生成されて (\-certreq コマンドを参照)、CSR が証明書発行局 (CA) に送信されると、CA からの応答がインポートされ (\-importcert コマンドを参照)、元の自己署名証明書は証明書チェーンによって置き換えられます。チェーンの最後にあるのは、Subject の公開鍵を認証した CA が発行した証明書 (応答) です。チェーン内のその前の証明書は、「CA」の公開鍵を認証する証明書です。 -.LP -CA の公開鍵を認証する証明書は、多くの場合、自己署名証明書 (つまり CA が自身の公開鍵を認証した証明書) であり、これはチェーンの最初の証明書になります。場合によっては、CA が証明書のチェーンを返すこともあります。この場合、チェーン内の最後の証明書 (CA によって署名され、鍵エントリの公開鍵を認証する証明書) に変わりはありませんが、チェーン内のその前の証明書は、CSR の送信先の CA とは「別の」CA によって署名され、CSR の送信先の CA の公開鍵を認証する証明書になります。さらに、チェーン内のその前の証明書は、次の CA の鍵を認証する証明書になります。 以下同様に、自己署名された「ルート」証明書に達するまでチェーンが続きます。したがって、チェーン内の (最初の証明書以後の) 各証明書では、チェーン内の次の証明書の署名者の公開鍵が認証されていることになります。 -.LP -多くの CA は、チェーンをサポートせずに発行済みの証明書だけを返します。特に、中間の CA が存在しないフラットな階層構造の場合は、その傾向が顕著です。このような場合は、キーストアにすでに格納されている信頼できる証明書情報から、証明書チェーンを確立する必要があります。 -.LP -別の応答形式 (PKCS#7 で定義されている形式) でも、発行済み証明書に加え、証明書チェーンのサポートが含まれています。\f3keytool\fP では、どちらの応答形式も扱うことができます。 -.LP -トップレベル (ルート) CA の証明書は、自己署名証明書です。ただし、ルートの公開鍵に対する信頼は、ルートの証明書自体から導き出されるものではなく (たとえば、VeriSign ルート CA のような有名な識別名を使った自己署名証明書を作成すること自体は誰でも可能)、新聞などのほかの情報源に由来するものです。ルート CA の公開鍵は広く知られています。ルート CA の公開鍵を証明書に格納する理由は、証明書という形式にすることで多くのツールから利用できるようになるからにすぎません。 つまり、証明書は、ルート CA の公開鍵を運ぶ「媒体」として利用されるだけです。ルート CA の証明書をキーストアに追加するときは、その前に証明書の内容を表示し ( \f2\-printcert\fP オプションを使用)、表示されたフィンガープリントと、新聞やルート CA の Web ページなどから入手した既知のフィンガープリントとを比較する必要があります。 -.TP 2 -o -\f3cacerts 証明書ファイル\fP -.LP -\f3cacerts\fP という名前の証明書ファイルは、セキュリティープロパティーディレクトリ \f2java.home\fP/lib/security に置かれています。\f2java.home\fP は、実行環境のディレクトリ (SDK の \f2jre\fP ディレクトリまたは Java 2 Runtime Environment の最上位ディレクトリ) です。 -.LP -cacerts ファイルは、CA の証明書を含む、システム全体のキーストアです。システム管理者は、キーストアタイプに jks を指定することで、\f3keytool\fP を使ってこのファイルの構成と管理を行うことができます。cacerts キーストアファイルは、ルート CA 証明書のデフォルトセットを含んだ状態で出荷されています。それらの証明書を一覧表示するには、次のコマンドを使用します。 -.nf -\f3 -.fl -keytool \-list \-keystore \fP\f4java.home\fP\f3/lib/security/cacerts -.fl -\fP -.fi -.LP -cacerts キーストアファイルの初期パスワードは、changeit です。システム管理者は、SDK のインストール後、このファイルのパスワードとデフォルトアクセス権を変更する必要があります。 -.LP -\f3重要: \fP\f4cacerts\fP\f3 ファイルを確認してください\fP: \f2cacerts\fP ファイル内の CA は、署名および他のエンティティーへの証明書発行のためのエンティティーとして信頼されるため、 \f2cacerts\fP ファイルの管理は慎重に行う必要があります。 \f2cacerts\fP ファイルには、信頼する CA の証明書だけが含まれていなければなりません。ユーザーは、自身の責任において、 \f2cacerts\fP ファイルにバンドルされている信頼できるルート CA 証明書を検証し、信頼性に関する独自の決定を行います。信頼できない CA 証明書を \f2cacerts\fP ファイルから削除するには、 \f2keytool\fP コマンドの削除オプションを使用します。 \f2cacerts\fP ファイルは JRE のインストールディレクトリにあります。このファイルを編集するアクセス権がない場合は、システム管理者に連絡してください。 -.TP 2 -o -\f3インターネット RFC 1421 証明書符号化規格\fP -.LP -多くの場合、証明書は、バイナリ符号化ではなく、インターネット RFC 1421 規格で定義されている出力可能符号化方式を使って格納されます。「Base 64 符号化」とも呼ばれるこの証明書形式では、電子メールやその他の機構を通じて、ほかのアプリケーションに証明書を容易にエクスポートできます。 -.LP -\f2\-importcert\fP と \f2\-printcert\fP コマンドでは、この形式の証明書とバイナリ符号化の証明書を読み込むことができます。 -.LP -\f2\-exportcert\fP コマンドでは、デフォルトでバイナリ符号化の証明書が出力されます。 ただし、 \f2\-rfc\fP オプションを指定した場合は、出力可能符号化方式の証明書が出力されます。 -.LP -\f2\-list\fP コマンドでは、デフォルトで証明書の SHA1 フィンガープリントが出力されます。 \f2\-v\fP オプションを指定すると、人間が読むことのできる形式で証明書が出力されます。一方、 \f2\-rfc\fP オプションを指定すると、出力可能符号化方式で証明書が出力されます。 -.LP -出力可能符号化方式で符号化された証明書は、次の行で始まります。 -.nf -\f3 -.fl -\-\-\-\-\-BEGIN CERTIFICATE\-\-\-\-\- -.fl -\fP -.fi -.LP -最後は、次の行で終わります。 -.nf -\f3 -.fl -\-\-\-\-\-END CERTIFICATE\-\-\-\-\- -.fl -\fP -.fi +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +オプションを囲む中カッコは、そのオプションをコマンドラインで指定しなかった場合に、デフォルト値が使用されることを意味します。オプションのデフォルト値を参照してください。中カッコは、\fI\-v\fR、\fI\-rfc\fRおよび\fI\-J\fRオプションを囲むためにも使用されますが、これらのオプションはコマンドラインで指定された場合にのみ意味を持ちます。指定されていない場合以外、デフォルト値はありません。 .RE - -.LP -.SS -X.500 識別名 -.LP -.LP -X.500 識別名は、エンティティーを特定するために使われます。たとえば、X.509 証明書の \f2subject\fP フィールドと \f2issuer\fP (署名者) フィールドで指定される名前は、X.500 識別名です。\f3keytool\fP は、次のサブパートをサポートしています。 -.LP -.RS 3 -.TP 2 -o -\f2commonName\fP \- 人の通称。 「Susan Jones」など -.TP 2 -o -\f2organizationUnit\fP \- 小さな組織 (部、課など) の名称。 「仕入部」など -.TP 2 -o -\f2organizationName\fP \- 大きな組織の名称。 「ABCSystems, Inc.」など -.TP 2 -o -\f2localityName\fP \- 地域 (都市) 名。 「Palo Alto」など -.TP 2 -o -\f2stateName\fP \- 州名または地方名。 「California」など -.TP 2 -o -\f2country\fP \- 2 文字の国番号。 「CH」など +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +オプションを囲む角カッコは、そのオプションをコマンドラインで指定しなかった場合に、値の入力を求められることを意味します。\fI\-keypass\fRオプションの場合、オプションをコマンドラインで指定しなかった場合は、\fIkeytool\fRコマンドがまずキーストアのパスワードを使用して非公開/秘密鍵の復元を試みます。この試みが失敗した場合、\fIkeytool\fRコマンドにより、非公開/秘密鍵のパスワードの入力を求められます。 .RE - -.LP -.LP -\-genkeypair コマンドの \f2\-dname\fP オプションの値として識別名文字列を指定する場合は、 次の形式で指定する必要があります。 -.LP -.nf -\f3 -.fl -CN=\fP\f4cName\fP\f3, OU=\fP\f4orgUnit\fP\f3, O=\fP\f4org\fP\f3, L=\fP\f4city\fP\f3, S=\fP\f4state\fP\f3, C=\fP\f4countryCode\fP\f3 -.fl -\fP -.fi - -.LP -.LP -イタリック体の項目は、実際に指定する値を表します。 短縮形のキーワードの意味は、次のとおりです。 -.LP -.nf -\f3 -.fl - CN=commonName -.fl - OU=organizationUnit -.fl - O=organizationName -.fl - L=localityName -.fl - S=stateName -.fl - C=country -.fl -\fP -.fi - -.LP -.LP -次に示すのは、識別名文字列の例です。 -.LP -.nf -\f3 -.fl -CN=Mark Smith, OU=Java, O=Oracle, L=Cupertino, S=California, C=US -.fl -\fP -.fi - -.LP -.LP -次は、この文字列を使ったコマンドの例です。 -.LP -.nf -\f3 -.fl -keytool \-genkeypair \-dname "CN=Mark Smith, OU=Java, O=Oracle, L=Cupertino, -.fl -S=California, C=US" \-alias mark -.fl -\fP -.fi - -.LP -.LP -キーワードの短縮形では、大文字と小文字は区別されません。たとえば、CN、cn、および Cn は、どれも同じものとして扱われます。 -.LP -.LP -一方、キーワードの指定順序には意味があり、各サブコンポーネントは上に示した順序で指定する必要があります。ただし、サブコンポーネントをすべて指定する必要はありません。たとえば、次のように一部のサブコンポーネントだけを指定できます。 -.LP -.nf -\f3 -.fl -CN=Steve Meier, OU=Java, O=Oracle, C=US -.fl -\fP -.fi - -.LP -.LP -識別名文字列の値にコンマが含まれる場合に、コマンド行で文字列を指定するときには、次のようにコンマを文字 \\ でエスケープする必要があります。 -.LP -.nf -\f3 -.fl - cn=Peter Schuster, ou=Java\\, Product Development, o=Oracle, c=US -.fl -\fP -.fi - -.LP -.LP -識別名文字列をコマンド行で指定する必要はありません。識別名を必要とするコマンドを実行するときに、コマンド行で識別名を指定しなかった場合は、各サブコンポーネントの入力を求められます。この場合は、コンマを文字 \\ でエスケープする必要はありません。 -.LP -.SS -信頼できる証明書のインポートに関する注意事項 -.LP -.LP -重要: 信頼できる証明書として証明書をインポートする前に、証明書の内容を慎重に調べてください。 -.LP -.LP -まず、証明書の内容を表示し (\-printcert コマンドを使用するか、または \-noprompt オプションを指定しないで \-importcert コマンドを使用)、 コマンドを使用し、 表示された証明書のフィンガープリントが、期待されるフィンガープリントと一致するかどうかを確認します。たとえば、あるユーザーから証明書が送られてきて、この証明書を /tmp/cert という名前でファイルに格納しているとします。 この場合は、信頼できる証明書のリストにこの証明書を追加する前に、 \f2\-printcert\fP コマンドを実行してフィンガープリントを表示できます。たとえば、次のようにします。 -.LP -.nf -\f3 -.fl - keytool \-printcert \-file /tmp/cert -.fl - Owner: CN=ll, OU=ll, O=ll, L=ll, S=ll, C=ll -.fl - Issuer: CN=ll, OU=ll, O=ll, L=ll, S=ll, C=ll -.fl - Serial Number: 59092b34 -.fl - Valid from: Thu Sep 25 18:01:13 PDT 1997 until: Wed Dec 24 17:01:13 PST 1997 -.fl - Certificate Fingerprints: -.fl - MD5: 11:81:AD:92:C8:E5:0E:A2:01:2E:D4:7A:D7:5F:07:6F -.fl - SHA1: 20:B6:17:FA:EF:E5:55:8A:D0:71:1F:E8:D6:9D:C0:37:13:0E:5E:FE -.fl - SHA256: 90:7B:70:0A:EA:DC:16:79:92:99:41:FF:8A:FE:EB:90: -.fl - 17:75:E0:90:B2:24:4D:3A:2A:16:A6:E4:11:0F:67:A4 -.fl -\fP -.fi - -.LP -.LP -次に、証明書を送信した人物に連絡し、この人物が提示したフィンガープリントと、上のコマンドで表示されたフィンガープリントとを比較します。フィンガープリントが一致すれば、送信途中でほかの何者か (攻撃者など) による証明書のすり替えが行われていないことを確認できます。送信途中でこの種の攻撃が行われていた場合、チェックを行わずに証明書をインポートすると、攻撃者によって署名されたすべてのもの (攻撃的意図を持つクラスファイルを含んだ JAR ファイルなど) を信頼することになります。 -.LP -.LP -注: 証明書をインポートする前に必ず \f2\-printcert\fP コマンドを実行しなければならないわけではありません。キーストア内の信頼できる証明書のリストに証明書を追加する前に \f2\-importcert\fP コマンドを実行すると、証明書の情報が表示され、確認を求めるメッセージが表示されます。インポート操作は、この時点で中止できます。ただし、確認メッセージが表示されるのは、\-importcert コマンドを \-noprompt オプションを指定せずに実行した場合だけです。 コマンドを使用し、 \f2\-noprompt\fP オプションが指定されている場合、ユーザーとの対話は行われません。 -.LP -.SS -パスワードに関する注意事項 -.LP -.LP -キーストアに対する操作を行うほとんどのコマンドでは、ストアのパスワードが必要です。また、一部のコマンドでは、非公開/秘密鍵のパスワードが必要になることがあります。 -.LP -.LP -パスワードはコマンド行で指定できます (ストアのパスワードには \f2\-storepass\fP オプション、非公開鍵のパスワードには \f2\-keypass\fP オプションを使用)。ただし、テストを目的とする場合、または安全であることがわかっているシステムで実行する場合以外は、コマンド行やスクリプトでパスワードを指定しないでください。 -.LP -.LP -必要なパスワードのオプションをコマンド行で指定しなかった場合は、パスワードの入力を求められます。 -.LP -.SS -証明書の準拠に関する注意事項 -.LP -.LP -インターネット標準の -.na -\f2RFC 5280\fP @ -.fi -http://tools.ietf.org/rfc/rfc5280.txt では、X.509 証明書が準拠するプロファイルを定義しています。このプロファイルには、証明書のフィールドやエクステンションで有効な値や値の組み合わせが含まれています。\f3keytool\fP では、これらのすべての規則が適用されているわけではないので、標準に準拠しない証明書が生成される可能性があり、そのような証明書は JRE やほかのアプリケーションで拒否されることがあります。ユーザーは、 \f2\-dname\fP や \f2\-ext\fP などで適正なオプションを指定するようにしてください。 -.LP -.SH "関連項目" -.LP -.RS 3 -.TP 2 -o -jar(1) ツールのドキュメント -.TP 2 -o -jarsigner(1) ツールのドキュメント -.TP 2 -o -.na -\f4keytool\fP\f2 の使用例については、\fP @ -.fi -http://download.oracle.com/javase/tutorial/security/index.html -.na -\f2「Java Tutorial」\fP\f4の\fP @ -.fi -http://download.oracle.com/javase/tutorial/「Security」\f3を参照\fP +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +イタリック体の項目の実際の値(オプションの値)は、指定する必要があります。たとえば、\fI\-printcert\fRコマンドの形式は次のとおりです。 +.sp +\fIkeytool \-printcert {\-file cert_file} {\-v}\fR +.sp +\fI\-printcert\fRコマンドを指定する場合は、\fIcert_file\fRを実際のファイル名で置き換えます。例: +\fIkeytool \-printcert \-file VScert\&.cer\fR .RE - -.LP -.SH "変更点" -.LP -.LP -Java SE 6 で keytool のコマンドインタフェースが変更されました。 -.LP -.LP -\f3keytool\fP は、ユーザーがパスワードを入力する際にその入力内容を表示しなくなりました。ユーザーはパスワード入力時にその入力内容を確認できなくなったため、初期キーストアパスワードを設定したり鍵パスワードを変更したりするなど、パスワードの設定や変更を行うたびにパスワードの再入力を求められます。 -.LP -.LP -変更されたコマンドの中には、名前が変更されただけのものもあれば、廃止されてこのドキュメントに記載されなくなったものもあります。以前のすべてのコマンド (名前が変更されたものと廃止されたものの両方) は、このリリースでも引き続きサポートされており、今後のリリースでもサポートされる予定です。keytool のコマンドインタフェースに加えられたすべての変更点の概要を、次に示します。 -.LP -.LP -名前が変更されたコマンド: -.LP -.RS 3 -.TP 2 -o -\f2\-export\fP の名前が \f2\-exportcert に変更\fP -.TP 2 -o -\f2\-genkey\fP の名前が \f2\-genkeypair に変更\fP -.TP 2 -o -\f2\-import\fP の名前が \f2\-importcert に変更\fP +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +オプションの値に空白(スペース)が含まれている場合は、値を引用符で囲む必要があります。 .RE - -.LP -.LP -廃止されてドキュメントに記載されなくなったコマンド: -.LP -.RS 3 -.TP 2 -o -.na -\f2\-keyclone\fP @ -.fi -http://java.sun.com/j2se/1.5.0/docs/tooldocs/windows/keytool.html#keycloneCmd -.TP 2 -o -.na -\f2\-identitydb\fP @ -.fi -http://java.sun.com/j2se/1.5.0/docs/tooldocs/windows/keytool.html#identitydbCmd -.TP 2 -o -.na -\f2\-selfcert\fP @ -.fi -http://java.sun.com/j2se/1.5.0/docs/tooldocs/windows/keytool.html#selfcertCmd +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fI\-help\fRオプションがデフォルトです。\fIkeytool\fRコマンドは、\fIkeytool \-help\fRと同じです。 .RE - -.LP +.SH "オプションのデフォルト値" +.PP +次の例で、様々なオプション値のデフォルト値を示します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-alias "mykey" +\-keyalg + "DSA" (when using \-genkeypair) + "DES" (when using \-genseckey) + +\-keysize + 2048 (when using \-genkeypair and \-keyalg is "RSA") + 1024 (when using \-genkeypair and \-keyalg is "DSA") + 256 (when using \-genkeypair and \-keyalg is "EC") + 56 (when using \-genseckey and \-keyalg is "DES") + 168 (when using \-genseckey and \-keyalg is "DESede") + +\-validity 90 + +\-keystore <the file named \&.keystore in the user\*(Aqs home directory> + +\-storetype <the value of the "keystore\&.type" property in the + security properties file, which is returned by the static + getDefaultType method in java\&.security\&.KeyStore> + +\-file + stdin (if reading) + stdout (if writing) + +\-protected false +.fi +.if n \{\ +.RE +.\} +.PP +公開/秘密鍵ペアの生成において、署名アルゴリズム(\fI\-sigalg\fRオプション)は、基になる秘密鍵のアルゴリズムから派生します。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +基になる秘密鍵がDSAタイプである場合は、\fI\-sigalg\fRオプションのデフォルト値はSHA1withDSAになります。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +基になる秘密鍵がRSAタイプである場合は、\fI\-sigalg\fRオプションのデフォルト値はSHA256withRSAになります。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +基になる秘密鍵がECタイプである場合は、\fI\-sigalg\fRオプションのデフォルト値はSHA256withECDSAになります。 +.RE +.PP +\fI\-keyalg\fRおよび\fI\-sigalg\fR引数の完全なリストについては、 +http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/security/crypto/CryptoSpec\&.html#AppAの「Java Cryptography Architecture (JCA) Reference Guide」を参照してください。 +.SH "一般オプション" +.PP +\fI\-v\fRオプションは、\fI\-help\fRコマンドを除くすべてのコマンドで使用できます。\fI\-v\fRオプションを指定した場合、コマンドは冗長モードで実行され、詳細な情報が出力されます。 +.PP +任意のコマンドで指定できる\fI\-Jjavaoption\fR引数もあります。\fI\-Jjavaoption\fRを指定した場合、指定された\fIjavaoption\fR文字列がJavaインタプリタに直接渡されます。このオプションには、空白を含めることはできません。このオプションは、実行環境またはメモリー使用を調整する場合に便利です。指定できるインタプリタ・オプションを一覧表示するには、コマンドラインで\fIjava \-h\fRまたは\fIjava \-X\fRと入力してください。 +.PP +次のオプションは、キーストアに対する操作を行うすべてのコマンドで指定できます。 +.PP +\-storetype \fIstoretype\fR +.RS 4 +この修飾子は、インスタンスを生成するキーストアのタイプを指定します。 +.RE +.PP +\-keystore \fIkeystore\fR +.RS 4 +キーストアの場所を指定します。 +.sp +特定の\fIkeytool\fRコマンドを実行する際に、JKS +\fIstoretype\fRが使用され、かつキーストア・ファイルがまだ存在していなかった場合、新しいキーストア・ファイルが作成されます。たとえば、\fIkeytool \-genkeypair\fRの呼出し時に\fI\-keystore\fRオプションが指定されなかった場合、\fI\&.keystore\fRという名前のデフォルト・キーストア・ファイルがユーザーのホーム・ディレクトリ内にまだ存在していなければ、そこに作成されます。同様に、\fI\-keystore ks_file\fRというオプションが指定されてもそのks_fileが存在しなかった場合、そのファイルが作成されます。JKS +\fIstoretype\fRの詳細は、\fIの\fRKeyStoreの実装キーストアの別名に関する項を参照してください。 +.sp +\fI\-keystore\fRオプションからの入力ストリームは、\fIKeyStore\&.load\fRメソッドに渡されます。URLとして\fINONE\fRが指定されている場合は、nullのストリームが\fIKeyStore\&.load\fRメソッドに渡されます。\fINONE\fRは、KeyStoreがファイルベースではない場合に指定してください。たとえば、ハードウェア・トークン・デバイス上に存在している場合などです。 +.RE +.PP +\-storepass[:\fIenv\fR| :\fIfile\fR] argument +.RS 4 +キーストアの整合性を保護するために使用するパスワードを指定します。 +.sp +修飾子\fIenv\fRまたは\fIfile\fRを指定しない場合、パスワードの値は\fIargument\fRになります。この値は、6文字以上にする必要があります。それ以外の場合、パスワードは次のようにして取得されます。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fIenv\fR: +\fIargument\fRという名前の環境変数からパスワードを取得します。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fIfile\fR: argumentという名前のファイルからパスワードを取得します。 +.RE +.sp +\fB注意:\fR +\fI\-keypass\fR、\fI\-srckeypass\fR、\-\fIdestkeypass\fR、\fI\-srcstorepass\fR、\fI\-deststorepass\fRなどのパスワードを必要とするその他のオプションはすべて、\fIenv\fRおよび\fIfile\fR修飾子を受け付けます。パスワード・オプションと修飾子は、必ずコロン(:)で区切ってください。 +.sp +パスワードは、キーストアの内容にアクセスするすべてのコマンドで使用されます。この種のコマンドを実行するときに、コマンドラインで\fI\-storepass\fRオプションを指定しなかった場合は、パスワードの入力を求められます。 +.sp +キーストアから情報を取得する場合、パスワードは省略可能です。パスワードが指定されていない場合は、取得した情報の整合性を検証できず、警告が表示されます。 +.RE +.PP +\-providerName \fIprovider_name\fR +.RS 4 +セキュリティ・プロパティ・ファイル内に含まれる暗号化サービス・プロバイダ名を特定するために使用されます。 +.RE +.PP +\-providerClass \fIprovider_class_name\fR +.RS 4 +暗号化サービス・プロバイダがセキュリティ・プロパティ・ファイルに指定されていないときは、そのマスター・クラス・ファイルの名前を指定するときに使用されます。 +.RE +.PP +\-providerArg \fIprovider_arg\fR +.RS 4 +\fI\-providerClass\fRオプションとともに使用され、\fIprovider_class_name\fRのコンストラクタのオプションの文字列入力引数を表します。 +.RE +.PP +\-protected +.RS 4 +\fItrue\fRまたは\fIfalse\fRのいずれか。パスワードを専用PINリーダーなどの保護された認証パス経由で指定する必要がある場合は、この値を\fItrue\fRに指定する必要があります。\fI\-importkeystore\fRコマンドには2つのキーストアが関連しているため、ソース・キーストアと宛先キーストアにそれぞれ次の2つのオプション、\fI\-srcprotected\fRと\-\fIdestprotected\fRが用意されています。 +.RE +.PP +\-ext \fI{name{:critical} {=value}}\fR +.RS 4 +X\&.509証明書エクステンションを示します。このオプションを\fI\-genkeypair\fRおよび\fI\-gencert\fRで使用して、生成される証明書または\fI\-certreq\fRにエクステンションを埋め込み、証明書リクエストでリクエストされるエクステンションを示すことができます。このオプションは複数回指定できます。\fIname\fR引数には、サポートされているエクステンション名(名前付きエクステンションを参照)または任意のOID番号を指定できます。指定されている場合、\fIvalue\fR引数はエクステンションの引数を指します。\fIvalue\fRを省略した場合、エクステンションのデフォルト値またはエクステンションが引数を必要としないことを示します。\fI:critical\fR修飾子が指定された場合、エクステンションの\fIisCritical\fR属性は\fItrue\fRで、指定されない場合は\fIfalse\fRです。\fI:critical\fRのかわりに\fI:c\fRを使用できます。 +.RE +.SH "名前付きエクステンション" +.PP +\fIkeytool\fRコマンドは、次の名前のエクステンションをサポートしています。名前の大/小文字は区別されません。 +.PP +BCまたはBasicContraints +.RS 4 +\fB値\fR: 完全な形式は次のとおりです: +\fIca:{true|false}[,pathlen:<len>]\fRまたは\fI<len>\fR(これは、\fIca:true,pathlen:<len>\fRの短縮形です)。<\fIlen\fR>を省略すると、\fIca:true\fRの意味になります。 +.RE +.PP +KUまたはKeyUsage +.RS 4 +\fB値\fR: +\fIusage\fR(\fIusage\fR)*、\fIusage\fRには\fIdigitalSignature\fR、\fInonRepudiation\fR +(contentCommitment)、\fIkeyEncipherment\fR、\fIdataEncipherment\fR、\fIkeyAgreement\fR、\fIkeyCertSign\fR、\fIcRLSign\fR、\fIencipherOnly\fR、\fIdecipherOnly\fRのいずれかを指定できます。\fIusage\fR引数は、不明確にならないかぎり、最初の数文字(\fIdigitalSignature\fRの場合は\fIdig\fR)またはキャメルケース・スタイル(\fIdigitalSignature\fRの場合は\fIdS\fR、\fIcRLSign\fRの場合は\fIcRLS\fR)で省略表記できます。\fIusage\fR値は、大文字と小文字が区別されます。 +.RE +.PP +EKUまたはExtendedKeyUsage +.RS 4 +\fB値\fR: +\fIusage\fR(\fIusage\fR)*、\fIusage\fRには\fIanyExtendedKeyUsage\fR、\fIserverAuth\fR、\fIclientAuth\fR、\fIcodeSigning\fR、\fIemailProtection\fR、\fItimeStamping\fR、\fIOCSPSigning\fRまたは任意の\fIOID文字列\fRのいずれかを指定できます。\fIusage\fR引数は、不明確にならないかぎり、最初の数文字またはキャメルケース・スタイルで省略表記できます。\fIusage\fR値は、大文字と小文字が区別されます。 +.RE +.PP +SANまたはSubjectAlternativeName +.RS 4 +\fB値\fR: +\fItype\fR:\fIvalue\fR +(t\fIype:value\fR)*、\fItype\fRには\fIEMAIL\fR、\fIURI\fR、\fIDNS\fR、\fIIP\fRまたは\fIOID\fRを指定できます。\fIvalue\fR引数は、\fItype\fRの文字列形式の値です。 +.RE +.PP +IANまたはIssuerAlternativeName +.RS 4 +\fB値\fR: +\fISubjectAlternativeName\fRと同じです。 +.RE +.PP +SIAまたはSubjectInfoAccess +.RS 4 +\fB値\fR: +\fImethod\fR:\fIlocation\-type\fR:\fIlocation\-value\fR +(\fImethod:location\-type\fR:\fIlocation\-value\fR)*、\fImethod\fRには\fItimeStamping\fR、\fIcaRepository\fRまたは任意のOIDを指定できます。\fIlocation\-type\fRおよび\fIlocation\-value\fR引数には、\fISubjectAlternativeName\fRエクステンションでサポートされる任意の\fItype\fR:\fIvalue\fRを指定できます。 +.RE +.PP +AIAまたはAuthorityInfoAccess +.RS 4 +\fB値\fR: +\fISubjectInfoAccess\fRと同じです。\fImethod\fR引数には、\fIocsp\fR、\fIcaIssuers\fRまたは任意のOIDを指定できます。 +.RE +.PP +\fIname\fRがOIDの場合、OCTET STRINGタイプと長さのバイトを除外したエクステンションについては、値は\fIextnValue\fRの16進ダンプのDERエンコーディングです。HEX文字列では、標準の16進数(0\-9、a\-f、A\-F)以外の文字は無視されます。したがって、01:02:03:04と01020304の両方とも同一の値として受け付けられます。値がない場合、エクステンションの値フィールドは空になります。 +.PP +\fI\-gencert\fRでのみ使用する\fIhonored\fRという特別な名前は、証明書リクエストに含まれるエクステンションを優先する方法を示します。この名前の値は、\fIall\fR(リクエストされるすべてのエクステンションが優先される)、\fIname{:[critical|non\-critical]}\fR(名前付きのエクステンションが優先されるが、別の\fIisCritical\fR属性を使用する)、および\fI\-name\fR(\fIall\fRとともに使用し、例外を示す)のカンマ区切りリストです。デフォルトでは、リクエストされるエクステンションは優先されません。 +.PP +\fI\-ext honored\fRオプションに加え、別の名前の、またはOID +\fI\-ext\fRのオプションを指定した場合は、このエクステンションが、すでに優先されているエクステンションに追加されます。ただし、この名前(またはOID)を優先される値でも使用した場合は、その値と重要性がリクエストに含まれるものをオーバーライドします。 +.PP +\fIsubjectKeyIdentifier\fRエクステンションは常に作成されます。自己署名でない証明書の場合は、\fIauthorityKeyIdentifier\fRが作成されます。 +.PP +\fB注意:\fR +ユーザーは、エクステンション(および証明書の他のフィールド)の組合せによっては、インターネットの標準に準拠しない場合があることに注意してください。証明書の準拠に関する警告を参照してください。 +.SH "コマンド" +.PP +\-gencert +.RS 4 +\fI{\-rfc} {\-infile infile} {\-outfile outfile} {\-alias alias} {\-sigalg sigalg} {\-dname dname} {\-startdate startdate {\-ext ext}* {\-validity valDays} [\-keypass keypass] {\-keystore keystore} [\-storepass storepass] {\-storetype storetype} {\-providername provider_name} {\-providerClass provider_class_name {\-providerArg provider_arg}} {\-v} {\-protected} {\-Jjavaoption}\fR +.sp +証明書リクエスト・ファイル(\fIkeytool\fR +\fI\-certreq\fRコマンドで作成可能)に対するレスポンスとして証明書を生成します。このコマンドは、\fIinfile\fRから(省略した場合は、標準入力から)リクエストを読み込み、別名の秘密鍵を使用してそのリクエストに署名して、X\&.509証明書を\fIoutfile\fRに(省略した場合は、標準出力に)出力します。\fI\-rfc\fRを指定した場合、出力形式はBASE64符号化のPEMになります。それ以外の場合は、バイナリDERが作成されます。 +.sp +\fIsigalg\fR値には、証明書に署名を付けるときに使用するアルゴリズムを指定します。\fIstartdate\fR引数は、証明書の有効開始日時です。\fIvalDays\fR引数は、証明書の有効日数を示します。 +.sp +\fIdname\fRを指定すると、生成される証明書の主体として使用されます。それ以外の場合は、証明書リクエストからの名前が使用されます。 +.sp +\fIext\fR値は、証明書に埋め込まれるX\&.509エクステンションを示します。\fI\-ext\fRの構文については、一般オプションを参照してください。 +.sp +\fI\-gencert\fRオプションを使用すると、証明書チェーンを作成できます。次の例では、\fIe1\fRという証明書を作成します。この証明書の証明書チェーンには、3つの証明書が含まれています。 +.sp +次のコマンドは、\fIca\fR、\fIca1\fR、\fIca2\fRおよび\fIe1\fRの4つの鍵ペアを作成します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +keytool \-alias ca \-dname CN=CA \-genkeypair +keytool \-alias ca1 \-dname CN=CA \-genkeypair +keytool \-alias ca2 \-dname CN=CA \-genkeypair +keytool \-alias e1 \-dname CN=E1 \-genkeypair +.fi +.if n \{\ +.RE +.\} +次の2つのコマンドは、署名付き証明書のチェーンを作成します。\fIca\fRは\fIca1\fRに署名し、\fIca1\fRは\fIca2\fRに署名します。すべて自己発行です。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +keytool \-alias ca1 \-certreq | + keytool \-alias ca \-gencert \-ext san=dns:ca1 | + keytool \-alias ca1 \-importcert + +keytool \-alias ca2 \-certreq | + $KT \-alias ca1 \-gencert \-ext san=dns:ca2 | + $KT \-alias ca2 \-importcert +.fi +.if n \{\ +.RE +.\} +次のコマンドは、証明書\fIe1\fRを作成してファイル\fIe1\&.cert\fRに格納します。この証明書は\fIca2\fRによって署名されます。その結果、\fIe1\fRの証明書チェーンには\fIca\fR、\fIca1\fRおよび\fIca2\fRが含まれることになります。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +keytool \-alias e1 \-certreq | keytool \-alias ca2 \-gencert > e1\&.cert +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\-genkeypair +.RS 4 +\fI{\-alias alias} {\-keyalg keyalg} {\-keysize keysize} {\-sigalg sigalg} [\-dname dname] [\-keypass keypass] {\-startdate value} {\-ext ext}* {\-validity valDays} {\-storetype storetype} {\-keystore keystore} [\-storepass storepass] {\-providerClass provider_class_name {\-providerArg provider_arg}} {\-v} {\-protected} {\-Jjavaoption}\fR +.sp +鍵のペア(公開鍵および関連する秘密鍵)を生成します。公開鍵はX\&.509 v3自己署名証明書でラップされます。証明書は、単一の要素を持つ証明書チェーンとして格納されます。この証明書チェーンと秘密鍵は、aliasで特定される新しいキーストア・エントリに格納されます。 +.sp +\fIkeyalg\fR値は鍵ペアの生成に使用するアルゴリズムを、\fIkeysize\fR値は生成する各鍵のサイズを、それぞれ指定します。\fIsigalg\fR値は、自己署名証明書に署名を付けるために使用するアルゴリズムを指定します。このアルゴリズムは\fIkeyalg\fR値と互換性がある必要があります。 +.sp +\fIdname\fR値には、\fIalias\fR値に関連付け、自己署名証明書のissuerフィールドとsubjectフィールドとして使用するX\&.500識別名を指定します。コマンドラインで識別名を指定しなかった場合は、識別名の入力を求められます。 +.sp +\fIkeypass\fR値には、生成される鍵のペアのうち、秘密鍵を保護するのに使用するパスワードを指定します。パスワードを指定しなかった場合は、パスワードの入力を求められます。このとき、\fI[Return]キー\fRを押すと、キーストアのパスワードと同じパスワードが鍵のパスワードに設定されます。\fIkeypass\fR値は、6文字以上にする必要があります。 +.sp +\fIstartdate\fR値には、証明書の発行時刻を指定します。これは、X\&.509証明書の「Validity」フィールドの「Not Before」値とも呼ばれます。 +.sp +オプションの値は、次の2つの形式のいずれかで設定できます。 +.sp +\fI([+\-]nnn[ymdHMS])+\fR +.sp +\fI[yyyy/mm/dd] [HH:MM:SS]\fR +.sp +最初の形式では、発行時刻は、指定される値の分、現在の時刻から移ります。指定される値は、一連の下位の値を連結したものになります。下位の各値で、プラス記号(「+」)は時間が進むことを、マイナス記号(「\-」)は時間が戻ることを意味しています。移る時間は\fInnn\fRで、単位は年、月、日、時間、分または秒です(それぞれ、1文字の\fIy\fR、\fIm\fR、\fId\fR、\fIH\fR、\fIM\fRまたは\fIS\fR」で示されています)。下位の各値で\fIjava\&.util\&.GregorianCalendar\&.add(int field, int amount)\fRメソッドを使用することで、発行時刻の追加の値が左から右へ計算されます。たとえば、指定すると、発行時刻は次のようになります。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +Calendar c = new GregorianCalendar(); +c\&.add(Calendar\&.YEAR, \-1); +c\&.add(Calendar\&.MONTH, 1); +c\&.add(Calendar\&.DATE, \-1); +return c\&.getTime() +.fi +.if n \{\ +.RE +.\} +2番目の形式では、ユーザーは、年/月/日と時間:分:秒の2つの部分で厳密な開始時刻を設定します(地元の時間帯を使用)。ユーザーは、1つの部分のみを指定できます。これは、もう1つの部分は現在の日付(または時刻)と同じになるということです。ユーザーは、形式の定義に示されているように、桁数を厳密に指定する必要があります(短い場合は0で埋めます)。日付と時刻の両方が指定された状態で、2つの部分の間に空白文字が1つ(1つのみ)あります。時間は常に24時間形式で指定してください。 +.sp +オプションを指定しないと、開始日付は現在の時刻になります。オプションは、最大で1回指定できます。 +.sp +\fIvalDays\fRの値には、証明書の有効日数を指定します(\fI\-startdate\fRで指定された日付、または\fI\-startdate\fRが指定されていない場合は現在の日付から始まります)。 +.sp +このコマンドは、以前のリリースでは\fI\-genkey\fRという名前でした。このリリースでは、引き続き古い名前がサポートされています。今後は、新しい名前\fI\-genkeypair\fRが優先されます。 +.RE +.PP +\-genseckey +.RS 4 +\fI\-genseckey {\-alias alias} {\-keyalg keyalg} {\-keysize keysize} [\-keypass keypass] {\-storetype storetype} {\-keystore keystore} [\-storepass storepass] {\-providerClass provider_class_name {\-providerArg provider_arg}} {\-v} {\-protected} {\-Jjavaoption}\fR +.sp +秘密鍵を生成し、それを新しい\fIKeyStore\&.SecretKeyEntry\fR(\fIalias\fRで特定される)内に格納します。 +.sp +\fIkeyalg\fR値は鍵ペアの生成に使用するアルゴリズムを、\fIkeysize\fR値は生成する各鍵のサイズを、それぞれ指定します。\fIkeypass\fR値は、秘密鍵を保護するパスワードです。パスワードを指定しなかった場合は、パスワードの入力を求められます。このとき、[Return]キーを押すと、\fIkeystore\fRのパスワードと同じパスワードが鍵のパスワードに設定されます。\fIkeypass\fR値は、6文字以上にする必要があります。 +.RE +.PP +\-importcert +.RS 4 +\fI\-importcert {\-alias alias} {\-file cert_file} [\-keypass keypass] {\-noprompt} {\-trustcacerts} {\-storetype storetype} {\-keystore keystore} [\-storepass storepass] {\-providerName provider_name} {\-providerClass provider_class_name {\-providerArg provider_arg}} {\-v} {\-protected} {\-Jjavaoption}\fR +.sp +ファイル\fIcert_file\fRから証明書または証明書チェーン(証明書チェーンの場合は、PKCS#7形式の応答または一連のX\&.509証明書で提供されるもの)を読み込み、\fIalias\fRによって特定される\fIkeystore\fRエントリに格納します。ファイルが指定されていない場合は、\fIstdin\fRから証明書または証明書チェーンを読み込みます。 +.sp +\fIkeytool\fRコマンドでは、X\&.509 v1、v2、v3の証明書、およびPKCS#7形式の証明書から構成されているPKCS#7形式の証明書チェーンをインポートできます。インポートするデータは、バイナリ符号化方式、または出力可能符号化方式(Base64符号化とも呼ばれる)のどちらかで提供する必要があります。出力可能符号化方式は、インターネットRFC 1421証明書符号化規格で定義されています。この符号化方式の場合、証明書は\fI\-\fR\fI\-\-\-\-BEGIN\fRで始まる文字列で開始され、\fI\-\-\-\-\-END\fRで始まる文字列で終了する必要があります。 +.sp +証明書は、信頼できる証明書のリストに追加するため、および認証局(CA)に証明書署名リクエストを送信した結果としてCAから受信した証明書応答をインポートするため(コマンドの\fI\-certreq\fRオプションを参照)という2つの理由でインポートします。 +.sp +どちらのタイプのインポートを行うかは、\fI\-alias\fRオプションの値によって指定します。別名がキー・エントリをポイントしない場合、\fIkeytool\fRコマンドはユーザーが信頼できる証明書エントリを追加しようとしているものとみなします。この場合、別名がキーストア内に存在していないことが必要です。別名がすでに存在している場合、その別名の信頼できる証明書がすでに存在することになるので、\fIkeytool\fRコマンドはエラーを出力し、証明書のインポートを行いません。別名がキー・エントリをポイントする場合、\fIkeytool\fRコマンドはユーザーが証明書応答をインポートしようとしているものとみなします。 +.RE +.PP +\-importpassword +.RS 4 +\fI{\-alias alias} [\-keypass keypass] {\-storetype storetype} {\-keystore keystore} [\-storepass storepass] {\-providerClass provider_class_name {\-providerArg provider_arg}} {\-v} {\-protected} {\-Jjavaoption}\fR +.sp +パスフレーズをインポートし、\fIalias\fRで識別される新規\fIKeyStore\&.SecretKeyEntry\fRに格納します。パスフレーズは、標準入力ストリームを介して提供できます。または、ユーザーにそのプロンプトが表示されます。\fIkeypass\fRは、インポートされるパスフレーズの保護に使用されるパスワードです。パスワードを指定しなかった場合は、パスワードの入力を求められます。このとき、[Return]キーを押すと、\fIkeystore\fRのパスワードと同じパスワードが鍵のパスワードに設定されます。\fIkeypass\fRは、6文字以上にする必要があります。 +.RE +.PP +\-importkeystore +.RS 4 +\fI{\-srcstoretype srcstoretype} {\-deststoretype deststoretype} [\-srcstorepass srcstorepass] [\-deststorepass deststorepass] {\-srcprotected} {\-destprotected} {\-srcalias srcalias {\-destalias destalias} [\-srckeypass srckeypass] } [\-destkeypass destkeypass] {\-noprompt} {\-srcProviderName src_provider_name} {\-destProviderName dest_provider_name} {\-providerClass provider_class_name {\-providerArg provider_arg}} {\-v} {\-protected} {\-Jjavaoption}\fR +.sp +ソース・キーストアからターゲット・キーストアへ、単一のエントリまたはすべてのエントリをインポートします。 +.sp +\fI\-srcalias\fRオプションが指定された場合、このコマンドは、その別名で特定される単一のエントリをターゲット・キーストアにインポートします。\fIdestalias\fR経由でターゲット別名が指定されなかった場合、\fIsrcalias\fRがターゲット別名として使用されます。ソースのエントリがパスワードで保護されていた場合、\fIsrckeypass\fRを使用してそのエントリが回復されます。\fIsrckeypass\fRが指定されなかった場合、\fIkeytool\fRコマンドは\fIsrcstorepass\fRを使用してそのエントリを回復しようとします。\fIsrcstorepass\fRが指定されなかったか正しくなかった場合、ユーザーはパスワードの入力を求められます。ターゲットのエントリは\fIdestkeypass\fRによって保護されます。\fIdestkeypass\fRが指定されなかった場合、ターゲット・エントリはソース・エントリのパスワードによって保護されます。たとえば、ほとんどのサード・パーティ・ツールでは、PKCS #12キーストアで\fIstorepass\fRと\fIkeypass\fRが同じである必要があります。これらのツールのPKCS #12キーストアを作成する場合は、常に\fI\-destkeypass\fRと\fI\-deststorepass\fRが同じになるように指定します。 +.sp +\fI\-srcalias\fRオプションが指定されなかった場合、ソース・キーストア内のすべてのエントリがターゲット・キーストア内にインポートされます。各ターゲット・エントリは対応するソース・エントリの別名の下に格納されます。ソースのエントリがパスワードで保護されていた場合、\fIsrcstorepass\fRを使用してそのエントリが回復されます。\fIsrcstorepass\fRが指定されなかったか正しくなかった場合、ユーザーはパスワードの入力を求められます。ソース・キーストア内のあるエントリ・タイプがターゲット・キーストアでサポートされていない場合や、あるエントリをターゲット・キーストアに格納する際にエラーが発生した場合、ユーザーはそのエントリをスキップして処理を続行するか、あるいは処理を中断するかの選択を求められます。ターゲット・エントリはソース・エントリのパスワードによって保護されます。 +.sp +ターゲット別名がターゲット・キーストア内にすでに存在していた場合、ユーザーは、そのエントリを上書きするか、あるいは異なる別名の下で新しいエントリを作成するかの選択を求められます。 +.sp + +\fI\-noprompt\fRオプションを指定した場合、ユーザーは新しいターゲット別名の入力を求められません。既存のエントリがそのターゲット別名で上書きされます。インポートできないエントリはスキップされ、警告が出力されます。 +.RE +.PP +\-printcertreq +.RS 4 +\fI{\-file file}\fR +.sp +PKCS#10形式の証明書リクエストの内容を出力します。このリクエストは、\fIkeytool\fR +\fI\-certreq\fRコマンドで生成できます。このコマンドは、ファイルからリクエストを読み取ります。ファイルが存在しない場合、リクエストは標準入力から読み取られます。 +.RE +.PP +\-certreq +.RS 4 +\fI{\-alias alias} {\-dname dname} {\-sigalg sigalg} {\-file certreq_file} [\-keypass keypass] {\-storetype storetype} {\-keystore keystore} [\-storepass storepass] {\-providerName provider_name} {\-providerClass provider_class_name {\-providerArg provider_arg}} {\-v} {\-protected} {\-Jjavaoption}\fR +.sp +PKCS#10形式を使用して証明書署名リクエスト(CSR)を生成します。 +.sp +CSRは、証明書発行局(CA)に送信することを目的としたものです。CAは、証明書要求者を(通常はオフラインで)認証し、証明書または証明書チェーンを送り返します。この証明書または証明書チェーンは、キーストア内の既存の証明書チェーン(最初は1つの自己署名証明書から構成される)に置き換えて使用します。 +.sp +aliasに関連付けられた秘密鍵は、PKCS#10証明書リクエストを作成するのに使用されます。秘密鍵にアクセスするには、正しいパスワードを指定する必要があります。コマンドラインで\fIkeypass\fRを指定しておらず、秘密鍵のパスワードがキーストアのパスワードと異なる場合は、秘密鍵のパスワードの入力を求められます。\fIdname\fRが指定されている場合は、それがCSRで主体として使用されます。それ以外の場合は、別名に関連付けられたX\&.500識別名が使用されます。 +.sp +\fIsigalg\fR値には、CSRに署名を付けるときに使用するアルゴリズムを指定します。 +.sp +CSRは、ファイルcertreq_fileに格納されます。ファイルが指定されていない場合は、\fIstdout\fRにCSRが出力されます。 +.sp +CAからのレスポンスをインポートするには、\fIimportcert\fRコマンドを使用します。 +.RE +.PP +\-exportcert +.RS 4 +\fI{\-alias alias} {\-file cert_file} {\-storetype storetype} {\-keystore keystore} [\-storepass storepass] {\-providerName provider_name} {\-providerClass provider_class_name {\-providerArg provider_arg}} {\-rfc} {\-v} {\-protected} {\-Jjavaoption}\fR +.sp +\fIalias\fRに関連付けられた証明書をキーストアから読み込み、ファイルcert_fileに格納します。ファイルが指定されていない場合は、\fIstdout\fRに証明書が出力されます。 +.sp +デフォルトでは、証明書はバイナリ符号化で出力されます。\fI\-rfc\fRオプションが指定されている場合、出力可能符号化方式の出力はインターネットRFC 1421証明書符号化規格で定義されます。 +.sp +\fIalias\fRが、信頼できる証明書を参照している場合は、該当する証明書が出力されます。それ以外の場合、\fIalias\fRは、関連付けられた証明書チェーンを持つ鍵エントリを参照します。この場合は、チェーン内の最初の証明書が返されます。この証明書は、\fIalias\fRによって表されるエンティティの公開鍵を認証する証明書です。 +.sp +このコマンドは、以前のリリースでは\fI\-export\fRという名前でした。このリリースでは、引き続き古い名前がサポートされています。今後は、新しい名前\fI\-exportcert\fRが優先されます。 +.RE +.PP +\-list +.RS 4 +\fI{\-alias alias} {\-storetype storetype} {\-keystore keystore} [\-storepass storepass] {\-providerName provider_name} {\-providerClass provider_class_name {\-providerArg provider_arg}} {\-v | \-rfc} {\-protected} {\-Jjavaoption}\fR +.sp +\fIalias\fRで特定されるキーストア・エントリの内容を\fIstdout\fRに出力します。\fIalias\fRが指定されていない場合は、キーストア全体の内容が表示されます。 +.sp +このコマンドは、デフォルトでは証明書のSHA1フィンガープリントを表示します。 +\fI\-v\fRオプションが指定されている場合は、所有者、発行者、シリアル番号、拡張機能などの付加的な情報とともに、人間が読むことのできる形式で証明書が表示されます。\fI\-rfc\fRオプションが指定されている場合は、出力可能符号化方式で証明書の内容が出力されます。出力可能符号化方式は、インターネットRFC 1421証明書符号化規格で定義されています。 +.sp +\fI\-v\fRオプションと\fI\-rfc\fRオプションを同時に指定することはできません。 +.RE +.PP +\-printcert +.RS 4 +\fI{\-file cert_file | \-sslserver host[:port]} {\-jarfile JAR_file {\-rfc} {\-v} {\-Jjavaoption}\fR +.sp +ファイルcert_file、host:portにあるSSLサーバー、または署名付きJARファイル\fIJAR_file\fR(\fI\-jarfile\fRオプションを指定)から証明書を読み込み、人間が読むことのできる形式で証明書の内容を表示します。ポートが指定されていない場合は、標準のHTTPSポート443が想定されます。\fI\-sslserver\fRおよび\-fileオプションを同時に指定することはできません。これに反する場合、エラーが報告されます。オプションが指定されていない場合は、\fIstdin\fRから証明書を読み込みます。 +.sp +\fI\-rfc\fRが指定されている場合、\fIkeytool\fRコマンドは、インターネットRFC 1421証明書符号化標準で定義されているように、PEMモードで証明書を出力します。インターネットRFC 1421証明書符号化規格を参照してください。 +.sp +ファイルまたは\fIstdin\fRから証明書を読み込む場合、その証明書は、インターネットRFC 1421証明書符号化標準で定義されているように、バイナリ符号化方式または出力可能符号化方式で表示できます。 +.sp +SSLサーバーがファイアウォールの背後にある場合は、\fI\-J\-Dhttps\&.proxyHost=proxyhost\fRおよび\fI\-J\-Dhttps\&.proxyPort=proxyport\fRオプションをコマンドラインで指定して、プロキシ・トンネリングを使用できます。http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/security/jsse/JSSERefGuide\&.htmlの +「Java Secure Socket Extension (JSSE) Reference Guide」を参照してください +.sp +\fB注意:\fR +このオプションはキーストアとは関係なく使用できます。 +.RE +.PP +\-printcrl +.RS 4 +\fI\-file crl_ {\-v}\fR +.sp +ファイル\fIcrl_\fRから証明書失効リスト(CRL)を読み込みます。CRLは、発行したCAによって失効されたデジタル証明書のリストです。CAは、\fIcrl_\fRを生成します。 +.sp +\fB注意:\fR +このオプションはキーストアとは関係なく使用できます。 +.RE +.PP +\-storepasswd +.RS 4 +\fI[\-new new_storepass] {\-storetype storetype} {\-keystore keystore} [\-storepass storepass] {\-providerName provider_name} {\-providerClass provider_class_name {\-providerArg provider_arg}} {\-v} {\-Jjavaoption}\fR +.sp +キーストアの内容の整合性を保護するために使用するパスワードを変更します。\fInew_storepass\fRには、新しいパスワードを指定します。new_storepassは、6文字以上である必要があります。 +.RE +.PP +\-keypasswd +.RS 4 +\fI{\-alias alias} [\-keypass old_keypass] [\-new new_keypass] {\-storetype storetype} {\-keystore keystore} [\-storepass storepass] {\-providerName provider_name} {\-providerClass provider_class_name {\-providerArg provider_arg}} {\-v} {\-Jjavaoption}\fR +.sp +\fIalias\fRによって特定される非公開/秘密鍵を保護するためのパスワードを、\fIold_keypass\fRから\fInew_keypass\fRに変更します。new_keypassは、6文字以上である必要があります。 +.sp +コマンドラインで\fI\-keypass\fRオプションを指定しておらず、鍵のパスワードがキーストアのパスワードと異なる場合は、鍵のパスワードの入力を求められます。 +.sp +コマンドラインで\fI\-new\fRオプションを指定しなかった場合は、新しいパスワードの入力を求められます。 +.RE +.PP +\-delete +.RS 4 +\fI[\-alias alias] {\-storetype storetype} {\-keystore keystore} [\-storepass storepass] {\-providerName provider_name} {\-providerClass provider_class_name {\-providerArg provider_arg}} {\-v} {\-protected} {\-Jjavaoption}\fR +.sp +\fIalias\fRによって特定されるエントリをキーストアから削除します。コマンドラインで別名を指定しなかった場合は、別名の入力を求められます。 +.RE +.PP +\-changealias +.RS 4 +\fI{\-alias alias} [\-destalias destalias] [\-keypass keypass] {\-storetype storetype} {\-keystore keystore} [\-storepass storepass] {\-providerName provider_name} {\-providerClass provider_class_name {\-providerArg provider_arg}} {\-v} {\-protected} {\-Jjavaoption}\fR +.sp +指定された\fIalias\fRから新しい別名\fIdestalias\fRへ、既存のキーストア・エントリを移動します。ターゲット別名を指定しなかった場合、ターゲット別名の入力を求められます。元のエントリがエントリ・パスワードで保護されていた場合、\fI\-keypass\fRオプションでそのパスワードを指定できます。鍵パスワードが指定されなかった場合、\fIstorepass\fR(指定された場合)がまず試みられます。その試みが失敗すると、ユーザーはパスワードの入力を求められます。 +.RE +.PP +\-help +.RS 4 +基本的なコマンドとそのオプションの一覧を表示します。 +.sp +特定のコマンドの詳細を参照するには、次のように入力してください: +\fIkeytool \-command_name \-help\fR。\fIcommand_name\fRはコマンドの名前です。 +.RE +.SH "例" +.PP +この例では、公開/秘密鍵のペアおよび信頼できるエンティティからの証明書を管理するためのキーストアを作成する手順を示します。 +.SS "鍵のペアの生成" +.PP +まず、キーストアを作成して鍵のペアを生成します。単一行に入力する、次のようなコマンドを使用できます。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +keytool \-genkeypair \-dname "cn=Mark Jones, ou=Java, o=Oracle, c=US" + \-alias business \-keypass <new password for private key> + \-keystore /working/mykeystore + \-storepass <new password for keystore> \-validity 180 +.fi +.if n \{\ +.RE +.\} +.PP +コマンドは、workingディレクトリに\fImykeystore\fRという名前のキーストアを作成し(キーストアはまだ存在していないと仮定)、作成したキーストアに、\fI<new password for keystore>\fRで指定したパスワードを割り当てます。生成する公開鍵と秘密鍵のペアに対応するエンティティの「識別名」は、通称がMark Jones、組織単位がJava、組織がOracle、2文字の国番号がUSです。公開鍵と秘密鍵のサイズはどちらも1024ビットで、鍵の作成にはデフォルトのDSA鍵生成アルゴリズムを使用します。 +.PP +このコマンドは、デフォルトのSHA1withDSA署名アルゴリズムを使用して、公開鍵と識別名情報を含む自己署名証明書を作成します。証明書の有効期間は180日です。証明書は、別名\fIbusiness\fRで特定されるキーストア・エントリ内の秘密鍵に関連付けられます。秘密鍵には、\fI<new password for private key>\fRで指定したパスワードが割り当てられます。 +.PP +オプションのデフォルト値を使用する場合、コマンドは大幅に短くなります。この場合、オプションは不要です。デフォルト値を持つオプションでは、オプションを指定しなければデフォルト値が使用されます。必須値の入力を求められます。使用可能な値は次のとおりです。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +keytool \-genkeypair +.fi +.if n \{\ +.RE +.\} +.PP +この場合は、\fImykey\fRという別名でキーストア・エントリが作成され、新しく生成された鍵のペア、および90日間有効な証明書がこのエントリに格納されます。このエントリは、ホーム・ディレクトリ内の\fI\&.keystore\fRという名前のキーストアに置かれます。キーストアは、まだ存在していない場合に作成されます。識別名情報、キーストアのパスワードおよび秘密鍵のパスワードの入力を求められます。 +.PP +以降では、オプションを指定しないで\fI\-genkeypair\fRコマンドを実行したものとして例を示します。情報の入力を求められた場合は、最初に示した\fI\-genkeypair\fRコマンドの値を入力したものとします。たとえば識別名には\fIcn=Mark Jones\fR、\fIou=Java\fR、\fIo=Oracle\fR、\fIc=US\fRと指定します。 +.SS "CAからの署名付き証明書のリクエスト" +.PP +自己署名証明書を作成する鍵のペアの生成。証明書に証明書発行局(CA)の署名が付いていれば、他のユーザーから証明書が信頼される可能性も高くなります。CAの署名を取得するには、まず、証明書署名リクエスト(CSR)を生成します。たとえば、次のようにします。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +keytool \-certreq \-file MarkJ\&.csr +.fi +.if n \{\ +.RE +.\} +.PP +CSR(デフォルト別名\fImykey\fRによって特定されるエンティティのCSR)が作成され、MarkJ\&.csrという名前のファイルに置かれます。このファイルをCA (VeriSignなど)に提出します。CAは要求者を(通常はオフラインで)認証し、要求者の公開鍵を認証した署名付きの証明書を送り返します。場合によっては、CAが証明書のチェーンを返すこともあります。証明書のチェーンでは、各証明書がチェーン内のその前の署名者の公開鍵を認証します。 +.SS "CAからの証明書のインポート" +.PP +作成した自己署名証明書は、証明書チェーンで置き換える必要があります。証明書チェーンでは、各証明書が、「ルート」CAを起点とするチェーン内の次の証明書の署名者の公開鍵を認証します。 +.PP +CAからの証明書応答をインポートするには、キーストアか、\fIcacerts\fRキーストア・ファイル内に1つ以上の信頼できる証明書がある必要があります。\fIの\fR\-importcertコマンドを参照してください。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +証明応答が証明書チェーンの場合は、チェーンの最上位証明書が必要です。CAの公開鍵を認証するルートCA証明書。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +証明書応答が単一の証明書の場合は、発行CA(署名した)の証明書が必要です。その証明書が自己署名でない場合は、その署名者の証明書が必要であり、このようにして自己署名ルート証明書が必要になります。 +.RE +.PP +\fIcacerts\fRキーストア・ファイルは、いくつかのVeriSignルートCA証明書を含んだ状態で出荷されているので、VeriSignの証明書を、信頼できる証明書としてキーストア内にインポートする必要がない場合があります。ただし、他のCAに対して署名付き証明書をリクエストしていて、このCAの公開鍵を認証する証明書が、\fIcacerts\fRにまだ追加されていない場合は、該当するCAからの証明書を、「信頼できる証明書」としてインポートする必要があります。 +.PP +通常、CAからの証明書は、自己署名証明書、または他のCAによって署名された証明書です(後者の場合は、該当する他のCAの公開鍵を認証する証明書が必要)。ABC, Inc\&.,がCAで、ABCから自己署名証明書であるA\fIBCCA\&.cer\fRという名前のファイルを取得したとします(この証明書はCAの公開鍵を認証します)。信頼できる証明書として証明書をインポートするときは、証明書が有効であることを確認する必要があります。まず、\fIkeytool \-printcert\fRコマンドまたは\fI\-noprompt\fRオプションなしの\fIkeytool \-importcert\fRコマンドでそれを表示し、表示された証明書のフィンガープリントが期待されるものと一致するかどうかを確認します。証明書を送信した人物に連絡し、この人物が提示した(または安全な公開鍵のリポジトリによって提示される)フィンガープリントと、上のコマンドで表示されたフィンガープリントとを比較します。フィンガープリントが一致すれば、送信途中で他の何者か(攻撃者など)による証明書のすり替えが行われていないことを確認できます。送信途中でこの種の攻撃が行われていた場合、チェックを行わずに証明書をインポートすると、攻撃者によって署名されたすべてのものを信頼することになります。 +.PP +証明書が有効であると信頼する場合は、次のコマンドでキーストアに追加できます。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +keytool \-importcert \-alias abc \-file ABCCA\&.cer +.fi +.if n \{\ +.RE +.\} +.PP +ABCCA\&.cerファイルのデータを含む信頼できる証明書のエントリがキーストア内に作成され、該当するエントリに\fIabc\fRという別名が割り当てられます。 +.SS "CAからの証明書応答のインポート" +.PP +証明書署名リクエストの提出先のCAの公開鍵を認証する証明書をインポートした後は(または同種の証明書がすでにcacertsファイル内に存在している場合は)、証明応答をインポートし、自己署名証明書を証明書チェーンで置き換えることができます。このチェーンは、CAの応答がチェーンの場合に、リクエストに対するレスポンスとしてCAから送り返された証明書チェーンです。また、CAの応答が単一の証明書の場合は、この証明応答と、インポート先のキーストア内または\fIcacerts\fRキーストアファイル内にすでに存在する信頼できる証明書とを使用して構築した証明書チェーンです。 +.PP +たとえば、証明書署名リクエストをVeriSignに送信する場合、送り返された証明書の名前がVSMarkJ\&.cerだとすると、次のようにして応答をインポートできます。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +keytool \-importcert \-trustcacerts \-file VSMarkJ\&.cer +.fi +.if n \{\ +.RE +.\} +.SS "公開鍵を認証する証明書のエクスポート" +.PP +\fIjarsigner\fRコマンドを使用してJava Archive (JAR)ファイルに署名する場合、このファイルを使用するクライアントは署名を認証する必要があります。クライアントが署名を認証する方法の1つに、まず自分の公開鍵の証明書を信頼できるエントリとしてクライアントのキーストアにインポートする方法があります。 +.PP +そのためには、証明書をエクスポートして、クライアントに提供します。例として、次のコマンドを使用して、MJ\&.cerという名前のファイルに証明書をコピーできます。このコマンドでは、エントリに別名\fImykey\fRがあると仮定しています。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +keytool \-exportcert \-alias mykey \-file MJ\&.cer +.fi +.if n \{\ +.RE +.\} +.PP +証明書と署名付きJARファイルを入手したクライアントは、\fIjarsigner\fRコマンドを使用して署名を認証できます。 +.SS "キーストアのインポート" +.PP +コマンド\fIimportkeystore\fRを使用すれば、あるキーストアの全体を別のキーストア内にインポートできます。これは、鍵や証明書といったソースキーストア内のすべてのエントリが、単一のコマンドを使用してターゲットキーストア内にインポートされることを意味します。このコマンドを使用すれば、異なるタイプのキーストア内に含まれるエントリをインポートすることができます。インポート時には、ターゲット・キーストア内の新しいエントリはすべて、元と同じ別名および(秘密鍵や秘密鍵の場合は)保護用パスワードを持ちます。ソースキーストア内の非公開/秘密鍵をリカバリできない場合、\fIkeytool\fRコマンドはユーザーにパスワードの入力を求めます。このコマンドは、別名の重複を検出すると、ユーザーに新しい別名の入力を求めます。ユーザーは、新しい別名を指定することも、単純に既存の別名の上書きを\fIkeytool\fRコマンドに許可することもできます。 +.PP +たとえば、通常のJKSタイプのキーストアkey\&.jks内のエントリをPKCS#11タイプのハードウェア・ベースのキーストア内にインポートするには、次のコマンドを使用します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +keytool \-importkeystore + \-srckeystore key\&.jks \-destkeystore NONE + \-srcstoretype JKS \-deststoretype PKCS11 + \-srcstorepass <src keystore password> + \-deststorepass <destination keystore pwd> +.fi +.if n \{\ +.RE +.\} +.PP +また、\fIimportkeystore\fRコマンドを使用すれば、あるソース・キーストア内の単一のエントリをターゲット・キーストアにインポートすることもできます。この場合は、前例のオプションに加えて、インポートする別名を指定する必要があります。\fI\-srcalias\fRオプションを指定する場合には、ターゲット別名もコマンドラインから指定できるほか、秘密/秘密鍵の保護用パスワードやターゲット保護用パスワードも指定できます。その方法を示すコマンドを次に示します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +keytool \-importkeystore + \-srckeystore key\&.jks \-destkeystore NONE + \-srcstoretype JKS \-deststoretype PKCS11 + \-srcstorepass <src keystore password> + \-deststorepass <destination keystore pwd> + \-srcalias myprivatekey \-destalias myoldprivatekey + \-srckeypass <source entry password> + \-destkeypass <destination entry password> + \-noprompt +.fi +.if n \{\ +.RE +.\} +.SS "SSLサーバーの証明書の生成" +.PP +次に、3つのエンティティ、つまりルートCA(\fIroot\fR)、中間CA(\fIca\fR)およびSSLサーバー(\fIserver\fR)用の鍵ペアと証明書を生成する\fIkeytool\fRコマンドを示します。すべての証明書を同じキーストアに格納するようにしてください。これらの例では、RSAが推奨される鍵のアルゴリズムです。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +keytool \-genkeypair \-keystore root\&.jks \-alias root \-ext bc:c +keytool \-genkeypair \-keystore ca\&.jks \-alias ca \-ext bc:c +keytool \-genkeypair \-keystore server\&.jks \-alias server + +keytool \-keystore root\&.jks \-alias root \-exportcert \-rfc > root\&.pem + +keytool \-storepass <storepass> \-keystore ca\&.jks \-certreq \-alias ca | + keytool \-storepass <storepass> \-keystore root\&.jks + \-gencert \-alias root \-ext BC=0 \-rfc > ca\&.pem +keytool \-keystore ca\&.jks \-importcert \-alias ca \-file ca\&.pem + +keytool \-storepass <storepass> \-keystore server\&.jks \-certreq \-alias server | + keytool \-storepass <storepass> \-keystore ca\&.jks \-gencert \-alias ca + \-ext ku:c=dig,kE \-rfc > server\&.pem +cat root\&.pem ca\&.pem server\&.pem | + keytool \-keystore server\&.jks \-importcert \-alias server +.fi +.if n \{\ +.RE +.\} +.SH "用語" +.PP +キーストア +.RS 4 +キーストアは、暗号化の鍵と証明書を格納するための機能です。 +.RE +.PP +キーストアのエントリ +.RS 4 +キーストアには異なるタイプのエントリを含めることができます。\fIkeytool\fRコマンドで最も適用範囲の広いエントリ・タイプは、次の2つです。 +.sp +\fB鍵のエントリ\fR +\- 各エントリは、非常に重要な暗号化の鍵の情報を保持します。この情報は、許可していないアクセスを防ぐために、保護された形で格納されます。一般に、この種のエントリとして格納される鍵は、秘密鍵か、対応する公開鍵の証明書チェーンを伴う秘密鍵です。証明書チェーンを参照してください。\fIkeytool\fRコマンドがこの両方のタイプのエントリを処理できるのに対し、\fIjarsigner\fRツールは後者のタイプのエントリ、つまり秘密鍵とそれに関連付けられた証明書チェーンのみを処理します。 +.sp +\fB信頼できる証明書のエントリ\fR: 各エントリは、第三者からの公開鍵証明書を1つ含んでいます。このエントリは、信頼できる証明書と呼ばれます。それは、証明書内の公開鍵が、証明書のSubject(所有者)によって特定されるアイデンティティに由来するものであることを、キーストアの所有者が信頼するからです。証明書の発行者は、証明書に署名を付けることによって、その内容を保証します。 +.RE +.PP +キーストアの別名 +.RS 4 +キーストアのすべてのエントリ(鍵および信頼できる証明書エントリ)は、一意の別名を介してアクセスされます。 +.sp +別名を指定するのは、\fI\-genseckey\fRコマンドを使用して秘密鍵を生成したり、\fI\-genkeypair\fRコマンドを使用して鍵ペア(公開鍵と秘密鍵)を生成したり、\fI\-importcert\fRコマンドを使用して証明書または証明書チェーンを信頼できる証明書のリストに追加するなど、特定のエンティティをキーストアに追加する場合です。これ以後、\fIkeytool\fRコマンドでエンティティを参照する場合は、このときに指定した別名を使用する必要があります。 +.sp +たとえば、\fIduke\fRという別名を使用して新しい公開鍵と秘密鍵のペアを生成し、公開鍵を自己署名証明書でラップするとします。この場合は、次のコマンドを実行します。証明書チェーンを参照してください。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +keytool \-genkeypair \-alias duke \-keypass dukekeypasswd +.fi +.if n \{\ +.RE +.\} +この例では、初期パスワードとして\fIdukekeypasswd\fRを指定しています。以後、別名\fIduke\fRに関連付けられた秘密鍵にアクセスするコマンドを実行するときは、このパスワードが必要になります。Dukeの秘密鍵のパスワードをあとから変更するには、次のコマンドを実行します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +keytool \-keypasswd \-alias duke \-keypass dukekeypasswd \-new newpass +.fi +.if n \{\ +.RE +.\} +パスワードが、\fIdukekeypasswd\fRから\fInewpass\fRに変更されます。テストを目的とする場合、または安全であることがわかっているシステムで実行する場合以外は、コマンドラインやスクリプトでパスワードを指定しないでください。必要なパスワードのオプションをコマンドラインで指定しなかった場合は、パスワードの入力を求められます。 +.RE +.PP +キーストアの実装 +.RS 4 +\fIjava\&.security\fRパッケージで提供されている\fIKeyStore\fRクラスは、キーストア内の情報へのアクセスおよび情報の変更を行うための、明確に定義されたインタフェースを提供します。キーストアの固定実装としては、それぞれが特定のタイプのキーストアを対象とする複数の異なる実装が存在可能です。 +.sp +現在、\fIkeytool\fRと\fIjarsigner\fRの2つのコマンドライン・ツールと、Policy Toolという名前のGUIベースのツールが、キーストアの実装を使用しています。\fIKeyStore\fRクラスは\fIpublic\fRであるため、ユーザーはKeyStoreを使用した他のセキュリティ・アプリケーションも作成できます。 +.sp +キーストアには、Oracleが提供する組込みのデフォルトの実装があります。これは、JKSという名前の独自のキーストア・タイプ(形式)を利用するもので、キーストアをファイルとして実装しています。この実装では、個々の秘密鍵は個別のパスワードによって保護され、キーストア全体の整合性も(秘密鍵とは別の)パスワードによって保護されます。 +.sp +キーストアの実装は、プロバイダベースです。具体的には、\fIKeyStore\fRによって提供されるアプリケーション・インタフェースがサービス・プロバイダ・インタフェース(SPI)に基づいて実装されます。つまり、対応する\fIKeystoreSpi\fR抽象クラス(これも\fIjava\&.security\fRパッケージに含まれています)があり、このクラスが、プロバイダが実装する必要のあるService Provider Interfaceのメソッドを定義しています。ここで、\fIプロバイダ\fRとは、Java Security APIによってアクセス可能なサービスのサブセットに対し、その固定実装を提供するパッケージまたはパッケージの集合のことです。キーストアの実装を提供するには、http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/security/crypto/HowToImplAProvider\&.htmlにある +Java暗号化アーキテクチャのプロバイダの実装方法で説明しているように、クライアントはプロバイダを実装し、\fIKeystoreSpi\fRサブクラスの実装を提供する必要があります。 +.sp +アプリケーションでは、\fIKeyStore\fRクラスが提供する\fIgetInstance\fRファクトリ・メソッドを使用することで、様々なプロバイダから異なるタイプのキーストアの実装を選択できます。キーストアのタイプは、キーストア情報の格納形式とデータ形式を定義するとともに、キーストア内の非公開/秘密鍵とキーストアの整合性を保護するために使用されるアルゴリズムを定義します。異なるタイプのキーストアの実装には、互換性はありません。 +.sp +\fIkeytool\fRコマンドは、任意のファイルベースのキーストア実装で動作します。コマンド・ラインで渡されたキーストアの場所をファイル名として扱って、\fIFileInputStream\fRに変換し、ここからキーストア情報をロードします。\fIjarsigner\fRおよび\fIpolicytool\fRコマンドは、URLで指定できる任意の場所からキーストアを読み取ることができます。 +.sp +\fIkeytool\fRと\fIjarsigner\fRの場合、\fI\-storetype\fRオプションを使用してコマンドラインでキーストアのタイプを指定できます。Policy Toolの場合は、「キーストア」メニューによってキーストアのタイプを指定できます。 +.sp +ユーザーがキーストアのタイプを明示的に指定しなかった場合、セキュリティ・プロパティ・ファイルで指定された\fIkeystore\&.type\fRプロパティの値に基づいて、ツールによってキーストアの実装が選択されます。このセキュリティ・プロパティ・ファイルは\fIjava\&.security\fRと呼ばれ、Windowsではセキュリティ・プロパティ・ディレクトリ\fIjava\&.home\elib\esecurity\fR、Oracle Solarisでは\fIjava\&.home/lib/security\fRにあります。\fIjava\&.home\fRは、実行時環境のディレクトリです。\fIjre\fRディレクトリは、SDKまたはJava Runtime Environment (JRE)の最上位のディレクトリにあります。 +.sp +各ツールは、\fIkeystore\&.type\fRの値を取得し、この値で指定されたタイプのキーストアを実装しているプロバイダが見つかるまで、現在インストールされているすべてのプロバイダを調べます。そのプロバイダからのキーストアの実装を使用します。\fIKeyStore\fRクラスに定義されているstaticメソッド\fIgetDefaultType\fRを使用すると、アプリケーションやアプレットから\fIkeystore\&.type\fRプロパティの値を取得できます。次のコードは、デフォルトのキーストア・タイプ(\fIkeystore\&.type\fRプロパティで指定されたタイプ)のインスタンスを生成します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +KeyStore keyStore = KeyStore\&.getInstance(KeyStore\&.getDefaultType()); +.fi +.if n \{\ +.RE +.\} +デフォルトのキーストア・タイプは\fIjks\fRで、これはOracleが提供する独自のタイプのキーストアの実装です。これは、セキュリティ・プロパティ・ファイル内の次の行によって指定されています。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +keystore\&.type=jks +.fi +.if n \{\ +.RE +.\} +各ツールでデフォルト以外のキーストアの実装を使用するには、上の行を変更して別のキーストアのタイプを指定します。たとえば、\fIpkcs12\fRと呼ばれるキーストアのタイプのキーストアの実装を提供するプロバイダ・パッケージがある場合、行を次のように変更します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +keystore\&.type=pkcs12 +.fi +.if n \{\ +.RE +.\} +\fB注意:\fR +キーストアのタイプの指定では、大文字と小文字は区別されません。たとえば、JKSとjksは同じものとして扱われます。 +.RE +.PP +証明書 +.RS 4 +証明書(公開鍵証明書)とは、あるエンティティ(発行者)からのデジタル署名付きの文書のことです。証明書には、他のあるエンティティ(署名者)の公開鍵(およびその他の情報)が特別な値を持っていることが書かれています。次の用語は、証明書に関連しています。 +.sp +\fB公開鍵\fR: 公開鍵は、特定のエンティティに関連付けられた数です。公開鍵は、該当するエンティティとの間に信頼できる関係を持つ必要があるすべての人に対して公開することを意図したものです。公開鍵は、署名を検証するのに使用されます。 +.sp +\fBデジタル署名\fR: データがデジタル署名されると、そのデータは、エンティティのアイデンティティと、そのエンティティがデータの内容について知っていることを証明書する署名とともに格納されます。エンティティの秘密鍵を使用してデータに署名を付けると、データの偽造は不可能になります。 +.sp +\fBアイデンティティ\fR: エンティティをアドレス指定する既知の方法。システムによっては、公開鍵をアイデンティティにするものがあります。公開鍵の他にも、Oracle Solaris UIDや電子メール・アドレス、X\&.509識別名など、様々なものをアイデンティティとすることができます。 +.sp +\fB署名\fR: 署名は、なんらかのデータを基にエンティティの秘密鍵を使用して計算されます。署名者、証明書の場合は発行者とも呼ばれます。 +.sp +\fB秘密鍵\fR: 秘密鍵は特定のエンティティのみが知っている数のことで、この数のことを、そのエンティティの秘密鍵といいます。秘密鍵は、他に知られないように秘密にしておくことが前提になっています。秘密鍵と公開鍵は、すべての公開鍵暗号化システムで対になって存在しています。DSAなどの典型的な公開鍵暗号化システムの場合、1つの秘密鍵は正確に1つの公開鍵に対応します。秘密鍵は、署名を計算するのに使用されます。 +.sp +\fBエンティティ\fR: エンティティは、人、組織、プログラム、コンピュータ、企業、銀行など、一定の度合いで信頼の対象となる様々なものを指します。 +.sp +公開鍵暗号化では、ユーザーの公開鍵にアクセスする必要があります。大規模なネットワーク環境では、互いに通信しているエンティティ間で以前の関係が引続き確立されていると仮定したり、使用されているすべての公開鍵を収めた信頼できるリポジトリが存在すると仮定したりすることは不可能です。このような公開鍵の配布に関する問題を解決するために証明書が考案されました。現在では、証明書発行局(CA)が信頼できる第三者として機能します。CAは、他のエンティティの証明書に署名する(発行する)行為を、信頼して任されているエンティティ(企業など)です。CAは法律上の契約に拘束されるので、有効かつ信頼できる証明書のみを作成するものとして扱われます。VeriSign、Thawte、Entrustをはじめ、多くの公的な証明書発行局が存在します。 +.sp +Microsoftの認証サーバー、EntrustのCA製品などを所属組織内で利用すれば、独自の証明書発行局を運営することも可能です。\fIkeytool\fRコマンドを使用すると、証明書の表示、インポートおよびエクスポートを行うことができます。また、自己署名証明書を生成することもできます。 +.sp +現在、\fIkeytool\fRコマンドはX\&.509証明書を対象にしています。 +.RE +.PP +X\&.509証明書 +.RS 4 +X\&.509規格では、証明書に含める情報が定義されており、この情報を証明書に書き込む方法(データ形式)についても記述されています。証明書のすべてのデータは、ASN\&.1/DERと呼ばれる2つの関連規格を使用して符号化されます。Abstract Syntax Notation 1はデータについて記述しています。Definite Encoding Rulesは、データの保存および転送の方法について記述しています。 +.sp +すべてのX\&.509証明書は、署名の他に次のデータを含んでいます。 +.sp +\fBバージョン\fR: 証明書に適用されるX\&.509規格のバージョンを特定します。証明書に指定できる情報は、バージョンによって異なります。今のところ、3つのバージョンが定義されています。\fIkeytool\fRコマンドでは、v1、v2、v3の証明書をインポートおよびエクスポートできます。v3の証明書を生成します。 +.sp +X\&.509 Version 1は、1988年から利用されて広く普及しており、最も一般的です。 +.sp +X\&.509 Version 2では、Subjectや発行者の名前をあとで再利用できるようにするために、Subjectと発行者の一意識別子の概念が導入されました。ほとんどの証明書プロファイル文書では、名前を再使用しないことと、証明書で一意の識別子を使用しないことが、強く推奨されています。Version 2の証明書は、広くは使用されていません。 +.sp +X\&.509 Version 3は最も新しい(1996年)規格で、エクステンションの概念をサポートしています。エクステンションは誰でも定義することができ、証明書に含めることができます。一般的なエクステンションとしては、KeyUsage(\fI署名専用\fRなど、鍵の使用を特定の目的に制限する)、AlternativeNames(DNS名、電子メール・アドレス、IPアドレスなど、他のアイデンティティを公開鍵に関連付けることができる)などがあります。エクステンションには、criticalというマークを付けて、そのエクステンションのチェックと使用を義務づけることができます。たとえば、criticalとマークされ、\fIkeyCertSign\fRが設定されたKeyUsageエクステンションが証明書に含まれている場合、この証明書をSSL通信中に提示すると、証明書が拒否されます。これは、証明書のエクステンションによって、関連する秘密鍵が証明書の署名専用として指定されており、SSLでは使用できないためです。 +.sp +\fBシリアル番号\fR: 証明書を作成したエンティティは、そのエンティティが発行する他の証明書と区別するために、証明書にシリアル番号を割り当てます。この情報は、様々な方法で使用されます。たとえば、証明書が取り消されると、シリアル番号が証明書失効リスト(CRL)に格納されます。 +.sp +\fB証明書アルゴリズム識別子\fR: 証明書に署名を付けるときにCAが使用したアルゴリズムを特定します。 +.sp +\fB発行者名\fR: 証明書に署名を付けたエンティティのX\&.500識別名です。X\&.500識別名を参照してください。通常はCAです。この証明書を使用することは、証明書に署名を付けたエンティティを信頼することを意味します。ルートつまりトップレベルのCAの証明書など、場合によっては発行者が自身の証明書に署名を付けることがあります。 +.sp +\fB有効期間\fR: 各証明書は限られた期間のみ有効です。この期間は開始の日時と終了の日時によって指定され、数秒の短い期間から100年という長期にわたることもあります。選択される有効期間は、証明書への署名に使用される秘密鍵の強度や証明書に支払う金額など、様々な要因で異なります。有効期間は、関連する秘密鍵が損われない場合に、エンティティが公開鍵を信頼できると期待される期間です。 +.sp +\fB主体名\fR: 証明書で公開鍵を認証するエンティティの名前。この名前はX\&.500標準を使用するので、インターネット全体で一意なものと想定されます。これは、エンティティのX\&.500識別名(DN)です。X\&.500識別名を参照してください。次に例を示します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +CN=Java Duke, OU=Java Software Division, O=Oracle Corporation, C=US +.fi +.if n \{\ +.RE +.\} +これらはそれぞれ主体の通称(CN)、組織単位(OU)、組織(O)、国(C)を表します。 +.sp +\fB主体の公開鍵情報\fR: 名前を付けられたエンティティの公開鍵とアルゴリズム識別子です。アルゴリズム識別子では、公開鍵に対して使用されている公開鍵暗号化システムおよび関連する鍵パラメータが指定されています。 +.RE +.PP +証明書チェーン +.RS 4 +\fIkeytool\fRコマンドでは、秘密鍵および関連する証明書チェーンを含むキーストアの鍵エントリを作成し、管理することができます。このようなエントリでは、秘密鍵に対応する公開鍵は、チェーンの最初の証明書に含まれています。 +.sp +鍵を初めて作成すると、自己署名証明書という1つの要素のみを含むチェーンが開始されます。\fIの\fR\-genkeypairコマンドを参照してください。自己署名証明書は発行者(署名者)が主体と同じです。主体は、その公開鍵が証明書によって認証されるエンティティです。\fI\-genkeypair\fRコマンドを呼び出して新しい公開鍵と秘密鍵のペアを作成すると、公開鍵は常に自己署名証明書でラップされます。 +.sp +この後、証明書署名リクエスト(CSR)が\fI\-certreq\fRコマンドで生成されて、CSRが証明書発行局(CA)に送信されると、CAからのレスポンスが\fI\-importcert\fRでインポートされ、元の自己署名証明書は証明書チェーンによって置き換えられます。コマンドの\fI\-certreq\fRおよび\fI\-importcert\fRオプションを参照してください。チェーンの最後にあるのは、Subjectの公開鍵を認証したCAが発行した証明書(応答)です。チェーン内のその前の証明書は、CAの公開鍵を認証する証明書です。 +.sp +CAの公開鍵を認証する証明書は、多くの場合、自己署名証明書(つまりCAが自身の公開鍵を認証した証明書)であり、これはチェーンの最初の証明書になります。場合によっては、CAが証明書のチェーンを返すこともあります。この場合、チェーン内の最後の証明書(CAによって署名され、鍵エントリの公開鍵を認証する証明書)に変わりはありませんが、チェーン内のその前の証明書は、CSRの送信先のCAとは別のCAによって署名され、CSRの送信先のCAの公開鍵を認証する証明書になります。チェーン内のその前の証明書は、次のCAの鍵を認証する証明書になります。以下同様に、自己署名された「ルート」証明書に達するまでチェーンが続きます。したがって、チェーン内の(最初の証明書以後の)各証明書では、チェーン内の次の証明書の署名者の公開鍵が認証されていることになります。 +.sp +多くのCAは、チェーンをサポートせずに発行済の証明書のみを返します。特に、中間のCAが存在しないフラットな階層構造の場合は、その傾向が顕著です。このような場合は、キーストアにすでに格納されている信頼できる証明書情報から、証明書チェーンを確立する必要があります。 +.sp +別の応答形式(PKCS#7で定義されている形式)では、発行済証明書に加え、証明書チェーンのサポートが含まれています。\fIkeytool\fRコマンドでは、どちらの応答形式も扱うことができます。 +.sp +トップレベル(ルート)CAの証明書は、自己署名証明書です。ただし、ルートの公開鍵への信頼は、ルート証明書自体からではなく、新聞など他のソースから取得されます。これは、VeriSignルートCAなどの識別名を使用して、誰でも自己署名型証明書を生成できるためです。ルートCAの公開鍵は広く知られています。ルートCAの公開鍵を証明書に格納する理由は、証明書という形式にすることで多くのツールから利用できるようになるからにすぎません。つまり、証明書は、ルートCAの公開鍵を運ぶ「媒体」として利用されるのみです。ルートCAの証明書をキーストアに追加するときは、\fI\-printcert\fRオプションを使用して、その前に証明書の内容を表示し、表示されたフィンガープリントと、新聞やルートCAのWebページなどから入手した既知のフィンガープリントとを比較する必要があります。 +.RE +.PP +cacerts証明書ファイル +.RS 4 +\fIcacerts\fRという名前の証明書ファイルは、Windowsではセキュリティ・プロパティ・ディレクトリ\fIjava\&.home\elib\esecurity\fR、Oracle Solarisでは\fIjava\&.home/lib/security\fRに置かれています。\fIjava\&.home\fRは、実行環境のディレクトリ(SDKの\fIjre\fRディレクトリまたはJREの最上位ディレクトリ)です。 +.sp +\fIcacerts\fRファイルは、CAの証明書を含む、システム全体のキーストアです。システム管理者は、キーストア・タイプに\fIjks\fRを指定することで、\fIkeytool\fRコマンドを使用してこのファイルの構成と管理を行うことができます。\fIcacerts\fRキーストア・ファイルは、ルートCA証明書のデフォルト・セットを含んだ状態で出荷されています。デフォルトの証明書を一覧表示するには、次のコマンドを使用します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +keytool \-list \-keystore java\&.home/lib/security/cacerts +.fi +.if n \{\ +.RE +.\} +\fIcacerts\fRキーストア・ファイルの初期パスワードは、\fIchangeit\fRです。システム管理者は、SDKのインストール後、このファイルのパスワードとデフォルト・アクセス権を変更する必要があります。 +.sp +\fB注意:\fR +\fIcacerts\fRファイルを確認することが重要です。\fIcacerts\fRファイル内のCAは、署名および他のエンティティへの証明書発行のためのエンティティとして信頼されるため、\fIcacerts\fRファイルの管理は慎重に行う必要があります。\fIcacerts\fRファイルには、信頼するCAの証明書のみが含まれている必要があります。ユーザーは、自身の責任において、\fIcacerts\fRファイルにバンドルされている信頼できるルートCA証明書を検証し、信頼性に関する独自の決定を行います。 +.sp +信頼できないCA証明書を\fIcacerts\fRファイルから削除するには、\fIkeytool\fRコマンドの\fIdelete\fRオプションを使用します。\fIcacerts\fRファイルはJREのインストール・ディレクトリにあります。このファイルを編集するアクセス権がない場合は、システム管理者に連絡してください +.RE +.PP +インターネットRFC 1421証明書符号化規格 +.RS 4 +多くの場合、証明書は、バイナリ符号化ではなく、インターネットRFC 1421規格で定義されている出力可能符号化方式を使用して格納されます。Base 64符号化とも呼ばれるこの証明書形式では、電子メールやその他の機構を通じて、他のアプリケーションに証明書を容易にエクスポートできます。 +.sp +\fI\-importcert\fRと\fI\-printcert\fRコマンドでは、この形式の証明書とバイナリ符号化の証明書を読み込むことができます。\fI\-exportcert\fRコマンドでは、デフォルトでバイナリ符号化の証明書が出力されます。ただし、\fI\-rfc\fRオプションを指定した場合は、出力可能符号化方式の証明書が出力されます。 +.sp +\fI\-list\fRコマンドでは、デフォルトで証明書のSHA1フィンガープリントが出力されます。\fI\-v\fRオプションが指定されている場合、証明書は人が理解できる形式で出力されます。\fI\-rfc\fRオプションが指定されている場合、証明書は出力可能符号化方式で出力されます。 +.sp +出力可能符号化方式で符号化された証明書は、次のテキストで始まり、次のテキストで終了します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-\-\-\-\-BEGIN CERTIFICATE\-\-\-\-\- + +encoded certificate goes here\&. + +\-\-\-\-\-END CERTIFICATE\-\-\-\-\- +.fi +.if n \{\ +.RE +.\} +.RE +.PP +X\&.500識別名 +.RS 4 +X\&.500識別名は、エンティティを特定するために使用されます。たとえば、X\&.509証明書の\fIsubject\fRフィールドと\fIissuer\fR(署名者)フィールドで指定される名前は、X\&.500識別名です。\fIkeytool\fRコマンドは、次のサブパートをサポートしています。 +.sp +\fBcommonName\fR: Susan Jonesなど、人の通称。 +.sp +\fBorganizationUnit\fR: 小さな組織(部、課など)の名称。Purchasingなどです。 +.sp +\fBlocalityName\fR: 地域(都市)名。Palo Altoなど。 +.sp +\fBstateName\fR: 州名または地方名。Californiaなど。 +.sp +\fBcountry\fR: 2文字の国コード。CHなど。 +.sp +識別名文字列を\fI\-dname\fRオプションの値として指定する場合(たとえば\fI\-genkeypair\fRコマンドに)、文字列は次の形式にする必要があります。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +CN=cName, OU=orgUnit, O=org, L=city, S=state, C=countryCode +.fi +.if n \{\ +.RE +.\} +イタリック体の項目は、実際に指定する値を表します。短縮形のキーワードの意味は、次のとおりです。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +CN=commonName +OU=organizationUnit +O=organizationName +L=localityName +S=stateName +C=country +.fi +.if n \{\ +.RE +.\} +次に示すのは、識別名文字列の例です。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +CN=Mark Smith, OU=Java, O=Oracle, L=Cupertino, S=California, C=US +.fi +.if n \{\ +.RE +.\} +この文字列を使用したコマンドの例です。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +keytool \-genkeypair \-dname "CN=Mark Smith, OU=Java, O=Oracle, L=Cupertino, +S=California, C=US" \-alias mark +.fi +.if n \{\ +.RE +.\} +キーワードの短縮形では、大文字と小文字は区別されません。たとえば、CN、cnおよびCnは、どれも同じものとして扱われます。 +.sp +一方、キーワードの指定順序には意味があり、各サブコンポーネントは上に示した順序で指定する必要があります。ただし、サブコンポーネントをすべて指定する必要はありません。たとえば、次のように一部のサブコンポーネントのみを指定できます。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +CN=Steve Meier, OU=Java, O=Oracle, C=US +.fi +.if n \{\ +.RE +.\} +識別名文字列の値にカンマが含まれる場合に、コマンドラインで文字列を指定するときには、次のようにカンマをバックスラッシュ文字(\e)でエスケープする必要があります。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +cn=Peter Schuster, ou=Java\e, Product Development, o=Oracle, c=US +.fi +.if n \{\ +.RE +.\} +識別名文字列をコマンドラインで指定する必要はありません。識別名を必要とするコマンドを実行するときに、コマンドラインで識別名を指定しなかった場合は、各サブコンポーネントの入力を求められます。この場合は、カンマをバックスラッシュ(\e)でエスケープする必要はありません。 +.RE +.SH "警告" +.SS "信頼できる証明書のインポート警告" +.PP +\fB重要\fR: 信頼できる証明書として証明書をインポートする前に、証明書の内容を慎重に調べてください。 +Windowsの例:.PP +まず、\fI\-noprompt\fRオプションを指定せずに\fI\-printcert\fRコマンドまたは\fI\-importcert\fRコマンドを使用して、証明書を表示します。表示された証明書のフィンガープリントが、期待されるフィンガープリントと一致することを確認します。たとえば、証明書が送られてきて、この証明書を\fI\etmp\ecert\fRという名前でファイルに格納しているとします。この場合は、信頼できる証明書のリストにこの証明書を追加する前に、\fI\-printcert\fRコマンドを実行してフィンガープリントを表示できます。たとえば、次のようにします。 +.sp +.if n \{\ +.RS 4 +.\} +.nf + keytool \-printcert \-file \etmp\ecert + Owner: CN=ll, OU=ll, O=ll, L=ll, S=ll, C=ll + Issuer: CN=ll, OU=ll, O=ll, L=ll, S=ll, C=ll + Serial Number: 59092b34 + Valid from: Thu Sep 25 18:01:13 PDT 1997 until: Wed Dec 24 17:01:13 PST 1997 + Certificate Fingerprints: + MD5: 11:81:AD:92:C8:E5:0E:A2:01:2E:D4:7A:D7:5F:07:6F + SHA1: 20:B6:17:FA:EF:E5:55:8A:D0:71:1F:E8:D6:9D:C0:37:13:0E:5E:FE + SHA256: 90:7B:70:0A:EA:DC:16:79:92:99:41:FF:8A:FE:EB:90: + 17:75:E0:90:B2:24:4D:3A:2A:16:A6:E4:11:0F:67:A4 +.fi +.if n \{\ +.RE +.\} +Oracle Solarisの例:.PP +まず、\fI\-noprompt\fRオプションを指定せずに\fI\-printcert\fRコマンドまたは\fI\-importcert\fRコマンドを使用して、証明書を表示します。表示された証明書のフィンガープリントが、期待されるフィンガープリントと一致することを確認します。たとえば、あるユーザーから証明書が送られてきて、この証明書を\fI/tmp/cert\fRという名前でファイルに格納しているとします。この場合は、信頼できる証明書のリストにこの証明書を追加する前に、\fI\-printcert\fRコマンドを実行してフィンガープリントを表示できます。たとえば、次のようにします。 +.sp +.if n \{\ +.RS 4 +.\} +.nf + keytool \-printcert \-file /tmp/cert + Owner: CN=ll, OU=ll, O=ll, L=ll, S=ll, C=ll + Issuer: CN=ll, OU=ll, O=ll, L=ll, S=ll, C=ll + Serial Number: 59092b34 + Valid from: Thu Sep 25 18:01:13 PDT 1997 until: Wed Dec 24 17:01:13 PST 1997 + Certificate Fingerprints: + MD5: 11:81:AD:92:C8:E5:0E:A2:01:2E:D4:7A:D7:5F:07:6F + SHA1: 20:B6:17:FA:EF:E5:55:8A:D0:71:1F:E8:D6:9D:C0:37:13:0E:5E:FE + SHA256: 90:7B:70:0A:EA:DC:16:79:92:99:41:FF:8A:FE:EB:90: + 17:75:E0:90:B2:24:4D:3A:2A:16:A6:E4:11:0F:67:A4 +.fi +.if n \{\ +.RE +.\} +.PP +次に、証明書を送信した人物に連絡し、この人物が提示したフィンガープリントと、上のコマンドで表示されたフィンガープリントとを比較します。フィンガープリントが一致すれば、送信途中で他の何者か(攻撃者など)による証明書のすり替えが行われていないことを確認できます。送信途中でこの種の攻撃が行われていた場合、チェックを行わずに証明書をインポートすると、攻撃者によって署名されたすべてのもの(攻撃的意図を持つクラス・ファイルを含んだJARファイルなど)を信頼することになります。 +.PP +\fB注意:\fR +証明書をインポートする前に\fI\-printcert\fRコマンドを実行する必要はありません。キーストア内の信頼できる証明書のリストに証明書を追加する前に、\fI\-importcert\fRコマンドによって証明書の情報が表示され、確認を求めるメッセージが表示されるためです。ユーザーはインポート操作を停止できます。ただし、これを実行できるのは、\fI\-noprompt\fRオプションを指定せずに\fI\-importcert\fRコマンドを呼び出す場合のみです。\fI\-noprompt\fRオプションが指定されている場合、ユーザーとの対話は行われません。 +.SS "パスワード警告" +.PP +キーストアに対する操作を行うほとんどのコマンドでは、ストアのパスワードが必要です。また、一部のコマンドでは、非公開/秘密鍵のパスワードが必要になることがあります。パスワードはコマンドラインで指定できます(\fI\-storepass\fRオプションと\fI\-keypass\fRオプションを使用)。ただし、テストを目的とする場合、または安全であることがわかっているシステムで実行する場合以外は、コマンドラインやスクリプトでパスワードを指定しないでください。必要なパスワードのオプションをコマンドラインで指定しなかった場合は、パスワードの入力を求められます。 +.SS "証明書の準拠に関する警告" +.PP +インターネット標準RFC 5280では、X\&.509証明書の準拠に関するプロファイルが定義されており、証明書のフィールドおよびエクステンションに有効な値および値の組合せが記載されています。標準については、 +http://tools\&.ietf\&.org/rfc/rfc5280\&.txtを参照してください +.PP +\fIkeytool\fRコマンドでは、これらのルールすべてが適用されるわけではないため、標準に準拠しない証明書を生成できます。標準に準拠しない証明書は、JREや他のアプリケーションで拒否されることがあります。ユーザーは、\fI\-dname\fRや\fI\-ext\fRなどで適正なオプションを指定するようにしてください。 +.SH "注意" +.SS "新しい信頼できる証明書のインポート" +.PP +\fIkeytool\fRコマンドは、キーストアに証明書を追加する前に、キーストア内にすでに存在する信頼できる証明書を使用して、インポートする証明書から(ルートCAの)自己署名証明書に至るまでの信頼のチェーンの構築を試みます。 +.PP +\fI\-trustcacerts\fRオプションを指定した場合、追加の証明書は信頼できるすなわち\fIcacerts\fRという名前のファイルに含まれる証明書のチェーンとみなされます。 +.PP +\fIkeytool\fRコマンドが、インポートする証明書から自己署名証明書(キーストアまたは\fIcacerts\fRファイルに含まれている自己署名証明書)に至るまでの信頼のパスの構築に失敗した場合は、インポートする証明書の情報を表示し、ユーザーに確認を求めます。この場合は、表示された証明書のフィンガープリントと、他のなんらかの(信頼できる)情報源(証明書の所有者など)から入手したフィンガープリントとを比較します。信頼できる証明書として証明書をインポートするときは、証明書が有効であることを慎重に確認する必要があります。信頼できる証明書のインポート警告を参照してください。インポート操作は、証明書を確認する時点で中止できます。\fI\-noprompt\fRオプションが指定されている場合、ユーザーとの対話は行われません。 +.SS "証明書応答のインポート" +.PP +証明書応答をインポートするときは、キーストア内の信頼できる証明書、および(\fI\-trustcacert\fR\fIs\fRオプションが指定されている場合は)\fIcacerts\fRキーストア・ファイルで構成された証明書を使用して証明書応答が検査されます。cacerts証明書ファイルを参照してください。 +.PP +証明書応答が信頼できるかどうかを決定する方法は次のとおりです。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +証明書応答が単一のX\&.509証明書である場合、\fIkeytool\fRコマンドは、証明書応答から(ルートCAの)自己署名証明書に至るまでの信頼チェーンの確立を試みます。証明書応答と、証明書応答の認証に使用される証明書の階層構造は、aliasの新しい証明書チェーンを形成します。信頼チェーンが確立されない場合、証明書応答はインポートされません。この場合、\fIkeytool\fRコマンドは証明書を出力せず、ユーザーに検証を求めるプロンプトを表示します。ユーザーが証明書応答の信頼性を判断するのは非常に難しいためです。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +証明書応答がPKCS#7形式の証明書チェーンまたは一連のX\&.509証明書である場合、チェーンは、ユーザーの証明書が最初に、0以上のCA証明書がその次にくるように並べられます。チェーンが自己署名のルートCA証明書で終わり、\fI \-trustcacerts\fRオプションが指定されている場合、\fIkeytool\fRコマンドは、その証明書と、キーストア内または\fIcacerts\fRキーストア・ファイル内の信頼できるすべての証明書を照合しようとします。チェーンが自己署名のルートCA証明書で終わっておらず、\fI\-trustcacerts\fRオプションが指定されている場合、\fIkeytool\fRコマンドは、キーストア内または\fIcacerts\fRキーストア・ファイル内の信頼できる証明書から自己署名のルートCA証明書を見つけてそれをチェーンの末尾に追加しようとします。その証明書が見つからず、\fI\-noprompt\fRオプションが指定されていない場合は、チェーン内の最後の証明書の情報が出力され、ユーザーは確認を求められます。 +.RE +.PP +証明書応答内の公開鍵が\fIalias\fRですでに格納されているユーザーの公開鍵に一致した場合、古い証明書チェーンが応答内の新しい証明書チェーンで置き換えられます。以前の証明書チェーンを有効な\fIkeypass\fRで置き換えることができるのは、エントリの秘密鍵を保護するためのパスワードを指定した場合のみです。パスワードを指定しておらず、秘密鍵のパスワードがキーストアのパスワードと異なる場合は、秘密鍵のパスワードの入力を求められます。 +.PP +このコマンドは、以前のリリースでは\fI\-import\fRという名前でした。このリリースでは、引き続き古い名前がサポートされています。今後は、新しい名前\fI\-importcert\fRが優先されます。 +.SH "関連項目" +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +jar(1) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +jarsigner(1) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +http://docs\&.oracle\&.com/javase/tutorial/security/index\&.htmlにある +「コース: Java SEのセキュリティ機能」 +.RE +.br +'pl 8.5i +'bp diff --git a/jdk/src/solaris/doc/sun/man/man1/ja/native2ascii.1 b/jdk/src/solaris/doc/sun/man/man1/ja/native2ascii.1 index 89b6f6c3be4..f8bdb8ebd49 100644 --- a/jdk/src/solaris/doc/sun/man/man1/ja/native2ascii.1 +++ b/jdk/src/solaris/doc/sun/man/man1/ja/native2ascii.1 @@ -1,72 +1,98 @@ -." Copyright (c) 1997, 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. -." -.TH native2ascii 1 "07 May 2011" - -.LP -.SH "名前" -native2ascii \- ネイティブ \- ASCII コンバータ -.LP -.LP -サポートされる文字エンコーディングの文字のファイルを ASCII または Unicode エスケープあるいはその両方のファイルに変換します。その逆の変換も行います。 -.LP -.SH "形式" -.LP +'\" t +.\" Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. +.\" Title: native2ascii +.\" Language: English +.\" Date: 2013年11月21日 +.\" SectDesc: 国際化ツール +.\" Software: JDK 8 +.\" Arch: 汎用 +.\" +.\" 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. +.\" +.pl 99999 +.TH "native2ascii" "1" "2013年11月21日" "JDK 8" "国際化ツール" +.\" ----------------------------------------------------------------- +.\" * Define some portability stuff +.\" ----------------------------------------------------------------- +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.\" http://bugs.debian.org/507673 +.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" ----------------------------------------------------------------- +.\" * set default formatting +.\" ----------------------------------------------------------------- +.\" disable hyphenation +.nh +.\" disable justification (adjust text to left margin only) +.ad l +.\" ----------------------------------------------------------------- +.\" * MAIN CONTENT STARTS HERE * +.\" ----------------------------------------------------------------- +.SH "NAME" +native2ascii \- サポートされている任意の文字エンコーディングの文字を含むファイルを、ASCIIおよびUnicodeでエスケープされたファイルに変換して(またはその逆)、ローカライズ可能なアプリケーションを作成します。 +.SH "概要" +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -\fP\f4native2ascii\fP\f2 [options] [inputfile [outputfile]]\fP -.fl +\fInative2ascii\fR [ \fIinputfile\fR ] [ \fIoutputfile\fR ] .fi - -.LP -.SH "説明" -.LP -.LP -\f2native2ascii\fP Java 実行環境でサポートされる文字エンコーディングにエンコードされたファイルを、ASCII でエンコードされたファイルに変換します。ASCII 文字セットの一部でないすべての文字で Unicode エスケープ (「\\uxxxx」の表記) を使用します。このプロセスは、ISO\-8859\-1 文字セットに含まれない文字が含まれているプロパティーファイルで必要です。このツールは、その逆の変換を実行することもできます。 -.LP -.LP -\f2outputfile\fP を省略した場合、標準出力に出力されます。さらに、 \f2inputfile\fP を省略した場合、標準入力から入力されます。 -.LP -.SH "オプション" -.LP -.RS 3 -.TP 3 -\-reverse -逆の処理を行います。つまり、ISO\-8859\-1 で Unicode エスケープを使ってエンコードされたファイルを、Java 実行環境でサポートされる文字エンコーディングのファイルに変換します。 -.br -.br -.TP 3 -\-encoding encoding_name -変換処理で使用する文字エンコーディングの名前を指定します。このオプションが存在しない場合は、デフォルトの文字エンコーディング ( \f2java.nio.charset.Charset.defaultCharset\fP メソッドで定義される) が使用されます。 \f2encoding_name\fP 文字列は、 -.na -\f4「サポートされている文字列エンコーディング」\fP @ -.fi -http://java.sun.com/javase/6/docs/technotes/guides/intl/encoding.doc.htmlドキュメントに示されている、Java 実行環境でサポートされる文字エンコーディングの名前にする必要があります。 -.br -.br -.TP 3 -\-Joption -Java 仮想マシンに \f2option\fP を渡します。\f2option\fP には、java(1)のリファレンスページに記載されているオプションを 1 つ指定します。たとえば、\f3\-J\-Xms48m\fP と指定すると、スタートアップメモリーは 48M バイトに設定されます。 +.if n \{\ .RE - -.LP - +.\} +.PP +\fIinputfile\fR +.RS 4 +ASCIIに変換するエンコードされたファイル。 +.RE +.PP +\fIoutputfile\fR +.RS 4 +変換されたASCIIファイル。 +.RE +.SH "説明" +.PP +\fInative2ascii\fRコマンドは、ASCIIキャラクタ・セットに含まれないすべての文字にUnicodeエスケープ(\fI\eu\fR\fIxxxx\fR)表記法を使用して、Java Runtime Environment (JRE)でサポートされているエンコードされたファイルを、ASCIIでエンコードされたファイルに変換します。このプロセスは、ISO\-8859\-1文字セットに含まれない文字が含まれているプロパティ・ファイルで必要です。このツールは、その逆の変換を実行することもできます。 +.PP +\fIoutputfile\fR値を省略した場合、標準出力に出力されます。さらに、\fIinputfile\fR値を省略した場合、標準入力から入力されます。 +.SH "オプション" +.PP +\-reverse +.RS 4 +逆の処理を行います。つまり、ISO\-8859\-1でUnicodeエスケープを使用してエンコードされたファイルを、JREでサポートされる文字エンコーディングのファイルに変換します。 +.RE +.PP +\-encoding \fIencoding_name\fR +.RS 4 +変換処理で使用する文字エンコーディングの名前を指定します。このオプションが存在しない場合は、デフォルトの文字エンコーディング(\fIjava\&.nio\&.charset\&.Charset\&.defaultCharset\fRメソッドで定義された)が使用されます。\fIencoding_name\fR文字列は、JREでサポートされている文字エンコーディングの名前にする必要があります。http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/intl/encoding\&.doc\&.htmlにある +「サポートされているエンコーディング」を参照してください +.RE +.PP +\-J\fIoption\fR +.RS 4 +Java仮想マシン(JVM)に\fIoption\fRを渡します。optionには、Javaアプリケーション起動ツールのリファレンス・ページに記載されているオプションを1つ指定します。たとえば、\fI\-J\-Xms48m\fRと指定すると、スタートアップ・メモリーは48MBに設定されます。java(1)を参照してください。 +.RE +.br +'pl 8.5i +'bp diff --git a/jdk/src/solaris/doc/sun/man/man1/ja/orbd.1 b/jdk/src/solaris/doc/sun/man/man1/ja/orbd.1 index b78927f5655..849257b14e2 100644 --- a/jdk/src/solaris/doc/sun/man/man1/ja/orbd.1 +++ b/jdk/src/solaris/doc/sun/man/man1/ja/orbd.1 @@ -1,368 +1,277 @@ -." 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 -." 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. -." -.TH orbd 1 "07 May 2011" - -.LP -.SH "名前" -orbd \- The Object Request Broker Daemon -.LP -.LP -\f3orbd\fP は、クライアントから CORBA 環境のサーバーにある持続オブジェクトを透過的に検索して呼び出すために使用します。 -.LP -.LP -\f3関連項目:\fP -.na -\f2ネームサービス\fP @ -.fi -http://java.sun.com/javase/6/docs/technotes/guides/idl/jidlNaming.html -.LP -.SH "形式" -.LP +'\" t +.\" Copyright (c) 2001, 2013, Oracle and/or its affiliates. All rights reserved. +.\" Title: orbd +.\" Language: English +.\" Date: 2013年11月21日 +.\" SectDesc: Java IDLおよびRMI-IIOPツール +.\" Software: JDK 8 +.\" Arch: 汎用 +.\" +.\" 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. +.\" +.pl 99999 +.TH "orbd" "1" "2013年11月21日" "JDK 8" "Java IDLおよびRMI-IIOPツール" +.\" ----------------------------------------------------------------- +.\" * Define some portability stuff +.\" ----------------------------------------------------------------- +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.\" http://bugs.debian.org/507673 +.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" ----------------------------------------------------------------- +.\" * set default formatting +.\" ----------------------------------------------------------------- +.\" disable hyphenation +.nh +.\" disable justification (adjust text to left margin only) +.ad l +.\" ----------------------------------------------------------------- +.\" * MAIN CONTENT STARTS HERE * +.\" ----------------------------------------------------------------- +.SH "NAME" +orbd \- CORBA環境のサーバーにある永続オブジェクトをクライアントから検索して呼び出せるようにします。 +.SH "概要" +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -orbd <\fP\f3options\fP\f3> -.fl -\fP +\fIorbd\fR [ \fIoptions\fR ] .fi - -.LP +.if n \{\ +.RE +.\} +.PP +\fIoptions\fR +.RS 4 +コマンドライン・オプション。オプションを参照してください。 +.RE .SH "説明" -.LP -.LP -\f3orbd\fP ツールに含まれるサーバーマネージャーを使うと、クライアントは CORBA 環境でサーバー上にある持続オブジェクトを透過的に検索して呼び出すことができます。持続サーバーは、ネームサービスに持続オブジェクト参照を発行する際、サーバーのポート番号の代わりに OBRD のポート番号をオブジェクト参照に含めます。持続オブジェクト参照のオブジェクト参照に ORBD ポート番号を含めることには、次のような利点があります。 -.LP -.RS 3 -.TP 2 -o -ネームサービスにあるオブジェクト参照が、サーバーのライフタイムと無関係になる。オブジェクト参照は、始めてインストールされたときはネームサービスのサーバーによりネームサービスに発行されますが、その後は、サーバーの開始またはシャットダウンの回数にかかわらず、ORBD がいつでも呼び出したクライアントに正しいオブジェクト参照を返します。 -.TP 2 -o -クライアントは一度だけネーミングサービスのオブジェクト参照をルックアップする必要があるが、その後はサーバーのライフタイムによる変更とは無関係にこの参照を利用することができる +.PP +\fIorbd\fRコマンドを使用すると、CORBA環境のサーバーにある永続オブジェクトをクライアントから透過的に検索して呼び出すことができます。orbdツールに含まれるサーバー・マネージャを使用すると、クライアントはCORBA環境でサーバー上にある永続オブジェクトを透過的に検索して呼び出すことができます。永続サーバーは、ネーミング・サービスに永続オブジェクト参照を発行する際、サーバーのポート番号のかわりにORBDのポート番号をオブジェクト参照に含めます。永続オブジェクト参照のオブジェクト参照にORBDポート番号を含めることには、次のような利点があります。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +ネーミング・サービスにあるオブジェクト参照が、サーバーのライフ・サイクルと無関係になります。たとえば、オブジェクト参照は、初めてインストールされたときはネーミング・サービスのサーバーによってネーミング・サービスに発行されますが、その後は、サーバーの開始またはシャットダウンの回数にかかわらず、呼び出したクライアントにORBDが正しいオブジェクト参照を返します。 .RE - -.LP -.LP -ORBD のサーバーマネージャーにアクセスするには、servertool(1) を使用してサーバーを起動する必要があります。servertool は、アプリケーションプログラマが、持続サーバーの登録、登録解除、起動、およびシャットダウンを行うためのコマンド行インタフェースです。サーバーマネージャーの詳細については、このドキュメントの「サーバーマネージャー」を参照してください。 -.LP -.LP -\f2orbd\fP を起動すると、ネームサービスも起動されます。ネームサービスについては、 -.na -\f2「ネームサービス」\fP @ -.fi -http://java.sun.com/javase/6/docs/technotes/guides/idl/jidlNaming.htmlを参照してください。 -.LP +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +クライアントは一度のみネーミング・サービスのオブジェクト参照をルックアップする必要がありますが、その後はサーバーのライフ・サイクルによる変更とは無関係にこの参照を利用することができます。 +.RE +.PP +ORBDのサーバー・マネージャにアクセスするには、\fIservertool\fRを使用してサーバーを起動する必要があります。servertoolは、アプリケーション・プログラマが、永続サーバーの登録、登録解除、起動および停止を行うためのコマンドライン・インタフェースです。サーバー・マネージャの詳細は、サーバー・マネージャを参照してください。 +.PP +\fIorbd\fRを起動すると、ネーミング・サービスも起動されます。ネーミング・サービスの詳細。ネーミング・サービスの起動と停止を参照してください。 .SH "オプション" -.LP -.SS -必須オプション -.LP -.RS 3 -.TP 3 -\-ORBInitialPort nameserverport -ネームサーバーを起動するポートの番号を指定します。\f2orbd\fP は、起動されると、このポート上で着信要求を待機します。Solaris ソフトウェアを使用する場合、1024 より小さいポート上でプロセスを開始するには、root ユーザーになる必要があります。このため、1024 以上のポート番号を使用することをお勧めします。(必須) +.PP +\-ORBInitialPort \fInameserverport\fR +.RS 4 +必須。ネーム・サーバーを起動するポートの番号を指定します。\fIorbd\fRは、起動されると、このポート上で着信リクエストをリスニングします。Oracle Solarisソフトウェアでは、1024より小さいポートでプロセスを開始する場合、rootユーザーになる必要があります。このため、1024以上のポート番号を使用することをお薦めします。 .RE - -.LP -.LP - -.LP -.SS -その他のオプション -.LP -.RS 3 -.TP 3 -\-port port -ORBD を起動するポートを指定します。ORBD は、このポートで、持続オブジェクトに対する要求を受け取ります。このポートのデフォルト値は 1049 です。このポート番号が、持続 Interoperable Object References (IOR). のポートフィールドに追加されます。(省略可) +.SS "必須でないオプション" +.PP +\-port \fIport\fR +.RS 4 +ORBDを起動するポートを指定します。このポートで、永続オブジェクトに対するリクエストをORBDが受け取ります。このポートのデフォルト値は1049です。このポート番号は、永続Interoperable Object References (IOR)のポート・フィールドに追加されます。 .RE - -.LP -.RS 3 -.TP 3 -\-defaultdb directory -ORBD 持続格納ディレクトリ \f2orb.db\fP が作成されるベースディレクトリを指定します。このオプションが指定されていない場合、デフォルト値は「./orb.db」となります。(省略可) +.PP +\-defaultdb \fIdirectory\fR +.RS 4 +ORBD永続格納ディレクトリ\fIorb\&.db\fRが作成されるベース・ディレクトリを指定します。このオプションが指定されていない場合、デフォルト値は\fI\&./orb\&.db\fRになります。 .RE - -.LP -.RS 3 -.TP 3 -\-serverPollingTime milliseconds -\f2servertool\fP を使用して登録された持続サーバーが正常に動作していることを ORBD が確認する回数を指定します。デフォルト値は 1,000 ミリ秒です。\f2milliseconds\fP に指定する値は、有効な正の整数でなければなりません。(省略可) +.PP +\-serverPollingTime \fImilliseconds\fR +.RS 4 +\fIservertool\fRを使用して登録された永続サーバーのヘルス状態をORBDがチェックする間隔を指定します。デフォルト値は1000ミリ秒です。\fImilliseconds\fRに指定する値は、有効な正の整数にする必要があります。 .RE - -.LP -.RS 3 -.TP 3 -\-serverStartupDelay milliseconds -\f2servertool\fP を使用して登録された持続サーバーを再起動してから、位置転送の例外を送信するまでの ORBD の待機時間を指定します。デフォルト値は 1,000 ミリ秒です。\f2milliseconds\fP に指定する値は、有効な正の整数でなければなりません。(省略可) +.PP +\-serverStartupDelay milliseconds +.RS 4 +\fIservertool\fRを使用して登録された永続サーバーを再起動してから、位置転送の例外を送信するまでのORBDの待機時間を指定します。デフォルト値は1000ミリ秒です。\fImilliseconds\fRに指定する値は、有効な正の整数にする必要があります。 .RE - -.LP -.RS 3 -.TP 3 -\-Joption -Java 仮想マシンに \f2option\fP を渡します。\f2option\fP には、java(1)のリファレンスページに記載されているオプションを 1 つ指定します。たとえば、\f3\-J\-Xms48m\fP と指定すると、スタートアップメモリーは 48M バイトに設定されます。\f3\-J\fP を使って背後の実行環境にオプションを渡すことはよく行われています。 -.TP 3 - +.PP +\-J\fIoption\fR +.RS 4 +Java仮想マシンに\fIoption\fRを渡します。\fIoption\fRには、Javaアプリケーション起動ツールのリファレンス・ページに記載されているオプションを1つ指定します。たとえば、\fI\-J\-Xms48m\fRと指定すると、スタートアップ・メモリーは48MBに設定されます。java(1)を参照してください。 .RE - -.LP -.SH "ネームサービスの起動と停止" -.LP -.LP -ネームサービスは、 -.na -\f2CORBA オブジェクト\fP @ -.fi -http://java.sun.com/javase/6/docs/technotes/guides/idl/jidlGlossary.html#CORBA%20objectにネーミングを可能にする CORBA サービスです。ネーミングは名前をオブジェクト参照にバインドすることにより可能になります。 -.na -\f2「ネームバインディング」\fP @ -.fi -http://java.sun.com/javase/6/docs/technotes/guides/idl/jidlGlossary.html#name%20bindingはネームサービスに格納され、クライアントは名前を与えて目的のオブジェクト参照を取得できます。 -.LP -.LP -ORBD は、クライアントまたはサーバーを実行する前に起動します。ORBD には、持続ネームサービスおよび一時ネームサービスが組み込まれています。これらはどちらも COS ネームサービスの実装です。 -.LP -.LP -\f3「持続」ネームサービス\fPは、ネーミングコンテキストに対して持続性を提供します。つまり、この情報は、サービスの停止や起動後にも維持され、サービスに障害が発生した場合でも回復できます。ORBD を再起動すると、持続ネームサービスはネーミングコンテキストのグラフを復元し、すべてのクライアントとサーバーの名前のバインディングが保持されます。 -.LP -.LP -\ -.LP -.LP -下位互換性のため、旧バージョンの JDK に同梱されていた\f2一時ネームサービス\fPが、今回のリリースの J2SE にも同梱されています。一時ネームサービスでは、ネームサービスの実行中にのみネーミングコンテキストが保持されます。サービスが中断されると、ネーミングコンテキストは失われます。 -.LP -.LP -\f2\-ORBInitialPort\fP 引数は、\f2orbd\fP の必須のコマンド行引数で、ネームサービスが実行されるポートの番号を設定するために使われます。以下の説明では、JavaIDL Object Request Broker Daemon 用にポート 1050 を使用できることを前提としています。Solaris ソフトウェアを使用する場合、1024 より小さいポート上でプロセスを開始するには、root ユーザーになる必要があります。このため、1024 以上のポート番号を使用することをお勧めします。必要であれば別のポートに変更してください。 -.LP -.LP -UNIX コマンドシェルで \f2orbd\fP を起動するには、次のように入力します。 -.LP +.SS "ネーミング・サービスの起動と停止" +.PP +ネーミング・サービスは、CORBAオブジェクトにネーミングを可能にするCORBAサービスです。ネーミングは名前をオブジェクト参照にバインドすることにより可能になります。ネーム・バインディングをネーミング・サービスに格納すれば、クライアントが名前を指定して目的のオブジェクト参照を取得できるようになります。 +.PP +クライアントまたはサーバーを実行する前に、ORBDを起動します。ORBDには、永続ネーミング・サービスおよび一時ネーミング・サービスが組み込まれています。これらはどちらもCOSネーミング・サービスの実装です。 +.PP +永続ネーミング・サービスは、ネーミング・コンテキストに対して永続性を提供します。つまり、この情報は、サービスの停止や起動後にも維持され、サービスに障害が発生した場合でも回復できます。ORBDを再起動すると、永続ネーミング・サービスはネーミング・コンテキストのグラフを復元し、すべてのクライアントとサーバーの名前のバインディングがそのまま(永続的に)保持されるようにします。 +.PP +下位互換性のため、旧リリースのJDKに同梱されていた一時ネーミング・サービス\fItnameserv\fRが、今回のリリースのJava SEにも同梱されています。一時ネーム・サービスでは、ネーム・サービスの実行中にのみネーミング・コンテキストが保持されます。サービスが中断されると、ネーミング・コンテキスト・グラフは失われます。 +.PP +\fI\-ORBInitialPort\fR引数は、\fIorbd\fRの必須のコマンドライン引数で、ネーミング・サービスが実行されるポートの番号を設定するために使用されます。次の手順では、Java IDL Object Request Broker Daemon用にポート1050を使用できることを前提としています。Oracle Solarisソフトウェアを使用する場合、1024より小さいポートでプロセスを開始するには、rootユーザーになる必要があります。このため、1024以上のポート番号を使用することをお薦めします。必要であれば別のポートに変更してください。 +.PP +UNIXコマンド・シェルで\fIorbd\fRを起動するには、次のように入力します。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl - orbd \-ORBInitialPort 1050& -.fl -\fP +orbd \-ORBInitialPort 1050& .fi - -.LP -.LP -Windows の MS\-DOS システムプロンプトでは、次のように入力します。 -.LP +.if n \{\ +.RE +.\} +.PP +WindowsのMS\-DOSシステム・プロンプトでは、次のように入力します。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl - start orbd \-ORBInitialPort 1050 -.fl -\fP +start orbd \-ORBInitialPort 1050 .fi - -.LP -.LP -これで ORBD が実行され、サーバーとクライアントのアプリケーションを実行できるようになります。クライアントとサーバーのアプリケーションは、実行時に、ネームサービスが実行されているポートの番号 (必要な場合はさらにマシン名) を認識している必要があります。これを実現する 1 つの方法は、次のコードをアプリケーションに追加することです。 -.LP +.if n \{\ +.RE +.\} +.PP +これでORBDが実行され、サーバーとクライアントのアプリケーションを実行できるようになります。クライアントとサーバーのアプリケーションは、実行時に、ネーミング・サービスが実行されているポートの番号(必要な場合はさらにマシン名)を認識している必要があります。これを実現する1つの方法は、次のコードをアプリケーションに追加することです。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl - Properties props = new Properties(); -.fl - props.put("org.omg.CORBA.ORBInitialPort", "1050"); -.fl - props.put("org.omg.CORBA.ORBInitialHost", "MyHost"); -.fl - ORB orb = ORB.init(args, props); -.fl -\fP +Properties props = new Properties(); +props\&.put("org\&.omg\&.CORBA\&.ORBInitialPort", "1050"); +props\&.put("org\&.omg\&.CORBA\&.ORBInitialHost", "MyHost"); +ORB orb = ORB\&.init(args, props); .fi - -.LP -.LP -この例では、ネームサービスは、ホスト MyHost のポート 1050 上で実行されます。別の方法として、コマンド行からサーバーまたはクライアントのアプリケーションを実行するときに、ポート番号またはマシン名あるいはその両方を指定する方法もあります。たとえば、次のコマンド行オプションを使用して、「HelloApplication」を起動できます。 -.LP +.if n \{\ +.RE +.\} +.PP +この例では、ネーミング・サービスは、ホスト\fIMyHost\fRのポート1050上で実行されます。別の方法として、コマンドラインからサーバーまたはクライアントのアプリケーションを実行するときに、ポート番号またはマシン名あるいはその両方を指定する方法もあります。たとえば、次のコマンドライン・オプションを使用して、\fIHelloApplication\fRを起動できます。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl - java HelloApplication \-ORBInitialPort 1050 \-ORBInitialHost MyHost -.fl -\fP +java HelloApplication \-ORBInitialPort 1050 \-ORBInitialHost MyHost .fi - -.LP -.LP -ネームサービスを停止するには、適切なオペレーティングシステムコマンドを使用します。たとえば、Solaris 上で \f2pkill orbd\fP \f2を実行したり、\fP \f2orbd\fP が動作中の DOS ウィンドウで Ctrl+C キーを押したりします。一時ネームサービスの場合は、サービスが終了されると、ネームサービスに登録された名前が消去される場合があります。Java IDL ネームサービスは、明示的に停止されるまで実行されます。 -.LP -.LP -ORDB に含まれるネームサービスの詳細については、 -.na -\f2「ネームサービス」\fP @ -.fi -http://java.sun.com/javase/6/docs/technotes/guides/idl/jidlNaming.htmlを参照してください。 -.LP -.SH "サーバーマネージャー" -.LP -.LP -ORBD のサーバーマネージャーにアクセスして持続サーバーを実行するには、servertool(1) を使用してサーバーを起動する必要があります。servertool は、アプリケーションプログラマが、持続サーバーの登録、登録解除、起動、およびシャットダウンを行うためのコマンド行インタフェースです。\f2servertool\fP を使用してサーバーを起動する場合は、\f2orbd\fP が実行されている場所と同じポートとホストで起動する必要があります。サーバーを異なるポートで実行すると、ローカルコンテキスト用にデータベースに保存されている情報が無効になり、サービスが正しく動作しません。 -.LP -.SS -サーバーマネージャー: 例 -.LP -.LP -デモ用の -.na -\f2サンプルチュートリアル\fP @ -.fi -http://java.sun.com/javase/6/docs/technotes/guides/idl/jidlExample.htmlを使用し、チュートリアルの手順に従って、\f2idlj\fP コンパイラと \f2javac\fP コンパイラを実行します。サーバーマネージャーを実行するには、次の手順に従ってアプリケーションを実行します。 -.LP -.LP -\f2orbd\fP を起動します。 -.LP -.LP -UNIX コマンドシェルで \f2orbd\fP を起動するには、次のように入力します。 -.LP -.LP -\ -.LP +.if n \{\ +.RE +.\} +.PP +ネーミング・サービスを停止するには、適切なオペレーティング・システム・コマンドを使用します。たとえば、Oracle Solaris上で\fIpkill\fR +\fIorbd\fRを実行したり、\fIorbd\fRが動作中のDOSウィンドウで\fB[Ctrl]+[C]\fRキーを押します。一時ネーミング・サービスの場合は、サービスが終了されると、ネーミング・サービスに登録された名前が消去される場合があります。Java IDLネーム・サービスは、明示的に停止されるまで実行されます。 +.PP +ORBDに付属するネーミング・サービスの詳細は、 +http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/idl/jidlNaming\&.htmlの「Naming Service」を参照してください +.SH "サーバー・マネージャ" +.PP +ORBDのサーバー・マネージャにアクセスして、永続サーバーを実行するには、\fIservertool\fRを使用してサーバーを起動する必要があります。servertoolは、アプリケーション・プログラマが、永続サーバーの登録、登録解除、起動および停止を行うためのコマンドライン・インタフェースです。\fIservertool\fRを使用してサーバーを起動する場合は、\fIorbd\fRが実行されている場所と同じポートとホストで起動する必要があります。サーバーを異なるポートで実行すると、ローカル・コンテキスト用にデータベースに保存されている情報が無効になり、サービスが正しく動作しません。 +.PP +http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/idl/jidlExample\&.htmlの +「Java IDL: The "Hello World" Example」を参照してください +.PP +この例では、チュートリアルの手順に従って\fIidlj\fRコンパイラと\fIjavac\fRコンパイラを実行します。ORBDのサーバー・マネージャを実行するには、次の手順に従ってアプリケーションを実行します。 +.PP +\fIorbd\fRを起動します。 +.PP +UNIXコマンド・シェルで次のように入力します: +\fIorbd \-ORBInitialPort 1050\fR。 +.PP +MS\-DOSシステム・プロンプト(Windows)で次のように入力します: +\fIs\fR\fItart orbd \-ORBInitialPort 105\fR\fI0\fR +.PP +ポート1050はネーム・サーバーを実行するポートです。\fI\-ORBInitialPort\fRオプションは必須コマンドライン引数です。Oracle Solarisソフトウェアを使用する場合、1024より小さいポートでプロセスを開始するには、rootユーザーになる必要があります。このため、1024以上のポート番号を使用することをお薦めします。 +.PP +\fIservertool\fRを起動します: +\fIservertool \-ORBInitialPort 1050\fR。 +.PP +前回の手順とネーム・サーバー(\fIorbd\fR)のポートが同じであることを確認します。たとえば\fI\-ORBInitialPort 1050\&.\fRのようになります。\fIservertool\fRは、ネーム・サーバーと同じポート上で起動する必要があります。 +.PP +\fIservertool\fRコマンドライン・インタフェースで、\fIservertool\fRプロンプトから\fIHello\fRサーバーを起動します。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl - orbd \-ORBInitialPort 1050 -.fl -\fP -.fi - -.LP -.LP -Windows の MS\-DOS システムプロンプトでは、次のように入力します。 -.LP -.nf -\f3 -.fl - start orbd \-ORBInitialPort 1050 -.fl -\fP -.fi - -.LP -.LP -\f21050\fP はネームサーバーを実行するポートです。\f2\-ORBInitialPort\fP は必要なコマンド行の引数です。Solaris ソフトウェアを使用する場合、1024 より小さいポート上でプロセスを開始するには、root ユーザーになる必要があります。このため、1024 以上のポート番号を使用することをお勧めします。 -.LP -.LP -\f2servertool\fP を起動します。 -.LP -.LP -Hello サーバーを起動するには、次のように入力します。 -.LP -.nf -\f3 -.fl - servertool \-ORBInitialPort 1050 -.fl -\fP -.fi - -.LP -.LP -前回の手順と同様にネームサーバー (\f2orbd\fP) のポートを指定します。たとえば \f2\-ORBInitialPort 1050\fP のようになります。\f2servertool\fP は、ネームサーバーと同じポート上で起動する必要があります。 -.LP -.LP -\f2servertool\fP コマンド行インタフェースが表示されます。 -.LP -.LP - -.LP -.LP -\f2servertool\fP プロンプトから Hello サーバーを起動します。 -.LP -.nf -\f3 -.fl - servertool > register \-server HelloServer \-classpath .\-applicationName -.fl +servertool > register \-server HelloServer \-classpath \&. \-applicationName HelloServerApName -.fl -\fP .fi - -.LP -.LP -\f2servertool\fP によってサーバーが登録されて、「HelloServerApName」という名前がサーバーに割り当てられ、サーバー ID が表示されます。 -.LP -.LP - -.LP -.LP -別の端末ウィンドウまたはプロンプトからクライアントアプリケーションを実行します。 -.LP -.LP -\ -.LP -.nf -\f3 -.fl - java HelloClient \-ORBInitialPort 1050 \-ORBInitialHost localhost -.fl -\fP -.fi - -.LP -.LP -この例の \f2\-ORBInitialHost localhost\fP は省略することができます。ネームサーバーが Hello クライアントとして同一ホスト上で動作しているからです。ネームサーバーが別のホストで動作している場合は、IDL ネームサーバーが動作しているホストを \f2\-ORBInitialHost\fP \f2nameserverhost\fP で指定します。 -.LP -.LP -前回の手順と同様にネームサーバー (\f2orbd\fP) のポートを指定します。たとえば \f2\-ORBInitialPort 1050\fP のようになります。 -.LP -.LP -\ -.LP -.LP -\ -.LP -.LP -サーバーマネージャーの操作が終了したら、ネームサーバー (\f2orbd\fP) と \f2servertool\fP を停止するか終了してください。 -.LP -.LP -DOS プロンプトで \f2orbd\fP をシャットダウンするには、サーバーを実行しているウィンドウを選択して \f2Ctrl+C\fP と入力します。UNIX シェルで \f2orbd\fP をシャットダウンするには、プロセスを検出して終了 (kill) します。サーバーを明示的に停止するまでは、呼び出し待機状態が続きます。 -.LP -.LP -\f2servertool\fP をシャットダウンするには、 \f2quit\fP と入力してキーボードの \f2Enter\fP キーを押します。 -.LP -.SH "関連項目" -.LP -.RS 3 -.TP 2 -o -.na -\f2ネームサービス\fP @ -.fi -http://java.sun.com/javase/6/docs/technotes/guides/idl/jidlNaming.html -.br -.TP 2 -o -servertool(1) +.if n \{\ +.RE +.\} +.PP +\fIservertool\fRによってサーバーが登録されて、\fIHelloServerApName\fRという名前がサーバーに割り当てられ、登録されているすべてのサーバー一覧とともにサーバーIDが表示されます。他の端末ウィンドウまたはプロンプトからクライアント・アプリケーションを実行します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +java HelloClient \-ORBInitialPort 1050 \-ORBInitialHost localhost +.fi +.if n \{\ +.RE +.\} +.PP +この例の\fI\-ORBInitialHost localhost\fRは省略することができます。ネーム・サーバーが\fIHello\fRクライアントとして同一ホスト上で動作しているからです。ネーム・サーバーが別のホストで実行されている場合は、\-\fIORBInitialHost nameserverhost\fRオプションを使用してIDLネーム・サーバーが実行されているホストを指定します。前の手順で行われたとおりにネーム・サーバー(\fIorbd\fR)ポートを指定します(例: +\fI\-ORBInitialPort 1050\fR)。ORBDのサーバー・マネージャの操作が終了したら、ネーム・サーバー(\fIorbd\fR)と\fIservertool\fRを停止するか終了してください。MS\-DOSプロンプトで\fIorbd\fRをシャットダウンするには、サーバーを実行しているウィンドウを選択して\fB[Ctrl]+[C]\fRキーを押します。 +.PP +Oracle Solarisから\fIorbd\fRをシャットダウンするには、プロセスを検索して、\fIkill\fRコマンドで終了します。サーバーを明示的に停止するまでは、呼出し待機状態が続きます。\fIservertool\fRをシャットダウンするには、\fBquit\fRと入力してキーボードの\fB[Enter]\fRキーを押します。 +.SH "関連項目" +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +servertool(1) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/idl/jidlNaming\&.htmlの +「Naming Service」 .RE - -.LP .br - -.LP - +'pl 8.5i +'bp diff --git a/jdk/src/solaris/doc/sun/man/man1/ja/pack200.1 b/jdk/src/solaris/doc/sun/man/man1/ja/pack200.1 index b1bb4f0fe03..e4150ab54dd 100644 --- a/jdk/src/solaris/doc/sun/man/man1/ja/pack200.1 +++ b/jdk/src/solaris/doc/sun/man/man1/ja/pack200.1 @@ -1,362 +1,325 @@ -." Copyright (c) 2004, 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. -." -.TH pack200 1 "07 May 2011" - -.LP -.SH "名前" -pack200 \- JAR パックツール -.LP -.RS 3 -.TP 2 -o -形式 -.TP 2 -o -説明 -.TP 2 -o -オプション -.TP 2 -o -終了ステータス -.TP 2 -o -関連項目 -.TP 2 -o -注意事項 +'\" t +.\" Copyright (c) 2004, 2013, Oracle and/or its affiliates. All rights reserved. +.\" Title: pack200 +.\" Language: English +.\" Date: 2013年11月21日 +.\" SectDesc: Javaデプロイメント・ツール +.\" Software: JDK 8 +.\" Arch: 汎用 +.\" +.\" 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. +.\" +.pl 99999 +.TH "pack200" "1" "2013年11月21日" "JDK 8" "Javaデプロイメント・ツール" +.\" ----------------------------------------------------------------- +.\" * Define some portability stuff +.\" ----------------------------------------------------------------- +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.\" http://bugs.debian.org/507673 +.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" ----------------------------------------------------------------- +.\" * set default formatting +.\" ----------------------------------------------------------------- +.\" disable hyphenation +.nh +.\" disable justification (adjust text to left margin only) +.ad l +.\" ----------------------------------------------------------------- +.\" * MAIN CONTENT STARTS HERE * +.\" ----------------------------------------------------------------- +.SH "NAME" +pack200 \- WebデプロイメントのためにJARファイルをpack200圧縮ファイルにパッケージします。 +.SH "概要" +.sp +.if n \{\ +.RS 4 +.\} +.nf +\fIpack200\fR [\fIoptions\fR] \fIoutput\-file\fR \fIJAR\-file\fR +.fi +.if n \{\ .RE - -.LP -.SH "形式" -.LP -.LP -\f4pack200\fP\f2 [ \fP\f2options\fP ] \f2output\-file\fP \f2JAR\-file\fP -.LP -.LP -オプションの指定順序に決まりはありません。コマンド行または properties ファイルに指定された最後のオプションが、それ以前に指定されたすべてのオプションより優先されます。 -.LP -.RS 3 -.TP 3 -options -コマンド行オプション。 -.TP 3 -output\-file -出力ファイルの名前。 -.TP 3 -JAR\-file -入力ファイルの名前。 +.\} +.PP +オプションは任意の順序で指定できます。コマンドラインまたはpropertiesファイルに指定された最後のオプションが、それ以前に指定されたすべてのオプションより優先されます。 +.PP +\fIoptions\fR +.RS 4 +コマンドライン・オプション。オプションを参照してください。 .RE - -.LP -.SH " 説明" -.LP -.LP -\f2pack200\fP ツールは、Java gzip 圧縮プログラムを使用して JAR ファイルを \f2pack200\fP 圧縮ファイルに変換する \f2Java アプリケーション\fP です。 \f2pack200\fP ファイルは高圧縮のファイルで、帯域幅の節約やダウンロード時間の短縮や直接配備することができます。 -.LP -.LP -\f2pack200\fP ツールには、圧縮エンジンの設定や微調整を行うオプションが用意されています。 -.LP -.SS -一般的な使用方法: -.LP -.LP -\f2% pack200 myarchive.pack.gz myarchive.jar\fP -.LP -.LP -この例では、 \f2デフォルトの pack200 設定を使用して\fP myarchive.pack.gz \f2が生成されます\fP 。 -.LP +.PP +\fIoutput\-file\fR +.RS 4 +出力ファイルの名前。 +.RE +.PP +\fIJAR\-file\fR +.RS 4 +入力ファイルの名前。 +.RE +.SH "説明" +.PP +\fIpack200\fRコマンドは、Java gzipコンプレッサを使用してJARファイルをpack200圧縮ファイルに変換するJavaアプリケーションです。pack200ファイルは高圧縮のファイルで、直接デプロイでき、帯域幅の節約やダウンロード時間の短縮が可能です。 +.PP +\fIpack200\fRコマンドには、圧縮エンジンの設定や微調整を行うオプションがあります。一般的な使用方法を次の例に示します。\fImyarchive\&.pack\&.gz\fRがデフォルトの\fIpack200\fRコマンド設定で作成されます。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +pack200 myarchive\&.pack\&.gz myarchive\&.jar +.fi +.if n \{\ +.RE +.\} .SH "オプション" -.LP -.LP -\f4\-r \-\-repack\fP -.LP -.LP -ファイル \f2myarchive.jar\fP をパックしたあとアンパックすることで、JAR ファイルを生成します。生成されたファイルは \f2jarsigner(1)\fP ツールの入力ファイルとして使用できます。 -.LP -.LP -\f2% pack200 \-\-repack myarchive\-packer.jar myarchive.jar\fP -.LP -.LP -\f2% pack200 \-\-repack myarchive.jar\fP -.LP -.LP -\f4\-g \-\-no\-gzip\fP -.LP -.LP -\f2pack200\fP ファイルを生成します。このオプションを指定するときは、適切な圧縮ツールを使用する必要があります。また、ターゲットシステムでは、対応する圧縮解除ツールを使用する必要があります。 -.LP -.LP -\f2% pack200 \-\-no\-gzip myarchive.pack myarchive.jar\fP -.LP -.LP -\f4\-G \-\-strip\-debug\fP -.LP -.LP -出力からデバッグ用の属性を削除します。そうした属性としては、 \f2SourceFile\fP、 \f2LineNumberTable\fP、 \f2LocalVariableTable\fP 、 \f2LocalVariableTypeTable\fP などが挙げられます。これらの属性を削除すれば、ダウンロードとインストールのサイズは小さくなりますが、デバッガの機能は制限されます。 -.LP -.LP -\f4\-\-keep\-file\-order\fP -.LP -.LP -入力ファイル内のファイルの順序を維持します。これがデフォルトの動作です。 -.LP -.LP -\f4\-O \-\-no\-keep\-file\-order\fP -.LP -.LP -パックツールは、すべての要素を並べ替えて転送します。また、JAR ディレクトリ名を削除します。このため、ダウンロードのサイズは小さくなりますが、インデックスをはじめとする JAR ファイルの最適化機能は正常に動作しなくなることがあります。 -.LP -.LP -\f4\-Svalue \-\-segment\-limit=\fP\f2value\fP -.LP -.LP -この値は、各アーカイブセグメントの予想ターゲットサイズ N (バイト単位) です。単一の入力ファイルの必要サイズが -.br -N バイトを超えると、そのファイルには独立したアーカイブセグメントが割り当てられます。特殊なケースとして、値が \f2\-1\fP の場合は、すべての入力ファイルを含む大きな単一のセグメントが生成され、値が \f20\fP の場合は、クラスごとにセグメントが 1 つずつ生成されます。アーカイブセグメントが大きくなると、断片化が少なくなり圧縮率が高くなりますが、その処理には多くのメモリーが必要です。 -.LP -.LP -各セグメントのサイズは、セグメントに変換されるそれぞれの入力ファイルのサイズのほか、その名前とほかの送信されるプロパティーのサイズを計算して推測されます。 -.LP -.LP -デフォルトは \-1 です。つまり、パックツールは常に単一のセグメント出力ファイルを作成します。極端に大きな出力ファイルが生成される場合には、入力ファイルをセグメント化 (分割) してより小さな JAR にすることを強くお勧めします。 -.LP -.LP -この制限が課されていない 10M バイトの JAR パックファイルは通常、元の 10% 程度のサイズにパックされます。しかし、パックツールでより大きな Java ヒープ (セグメントの制限の約 10 倍) を必要とする場合もあります。 -.LP -.LP -\f4\-Evalue \-\-effort=\fP\f2value\fP -.LP -.LP -単一の 10 進数値を指定した場合、パックツールは、指定された圧縮率でアーカイブを圧縮します。レベル \f21\fP の場合は、比較的短い圧縮時間でやや大きめのファイルが生成されますが、レベル \f29\fP の場合は、非常に長い時間がかかるものの、より圧縮率の高いファイルが生成されます。特殊な値 \f20\fP を指定した場合は、元の JAR ファイルを圧縮なしで直接コピーします。JSR 200 標準では、すべての解凍プログラムが、この特別な場合をアーカイブ全体のパススルーと解釈するように規定しています。 -.LP -.LP -デフォルトは \f25\fPです。この場合、標準的な時間で適切な圧縮が行われます。 -.LP -.LP -\f4\-Hvalue \-\-deflate\-hint=\fP\f2value\fP -.LP -.LP -デフォルト値を上書きし、入力情報を保存します。転送されるアーカイブのサイズは大きくなります。返される値は次のどれかになります。 -.LP -.RS 3 -.TP 3 -true -.TP 3 -false -どちらの場合でも、パックツールはデフレーションヒントを出力アーカイブに設定します。アーカイブ要素の個々のデフレーションヒントは転送しません。 +.PP +\-r, \-\-repack +.RS 4 +JARファイルをパックした後アンパックして、JARファイルを生成します。生成されたファイルは\fIjarsigner\fR(1)ツールの入力ファイルとして使用できます。次の例では、myarchive\&.jarファイルをパックした後、アンパックします。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +pack200 \-\-repack myarchive\-packer\&.jar myarchive\&.jar +pack200 \-\-repack myarchive\&.jar +.fi +.if n \{\ .RE - -.LP -.RS 3 -.TP 3 -keep -入力 JAR.内で見つかったデフレーションヒントを維持します。(これがデフォルトです。) +.\} +次の例では、入力ファイル内のファイルの順序を保持します。 .RE - -.LP -.LP -\f4\-mvalue \-\-modification\-time=\fP\f2value\fP -.LP -.LP -返される値は次のどれかになります。 -.LP -.RS 3 -.TP 3 -latest -パックツールは、元のアーカイブの全エントリの最終更新時刻か、そのセグメントのすべてのエントリの最終更新時刻を特定しようとします。この単一の値はセグメントの一部として転送され、各セグメントの全エントリに適用されます。この場合、すべてのインストールファイルに単一の日付が設定されるという問題はありますが、アーカイブの転送サイズを少し小さくすることができます。 -.TP 3 -keep -入力 JAR. 内で見つかった変更時刻を維持します。(これがデフォルトです。) +.PP +\-g, \-\-no\-gzip +.RS 4 +\fIpack200\fRファイルを生成します。このオプションを指定するときは、適切な圧縮ツールを使用する必要があります。また、ターゲット・システムでは、対応する圧縮解除ツールを使用する必要があります。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +pack200 \-\-no\-gzip myarchive\&.pack myarchive\&.jar +.fi +.if n \{\ .RE - -.LP -.LP -\f4\-Pfile \-\-pass\-file=\fP\f2file\fP -.LP -.LP -ファイルを圧縮せず、バイト単位で転送するように指定します。このオプションを繰り返し使用して、複数のファイルを指定できます。システムファイルセパレータが JAR ファイルセパレータ「\f2/\fP」に置き換えられる点を除き、パス名の変換は行われません。 結果として得られるファイル名は、文字列として正確に JAR ファイルでの出現と一致している必要があります。file にディレクトリ名を指定した場合、そのディレクトリ内のすべてのファイルが転送されます。 -.LP -.LP -\f4\-Uaction \-\-unknown\-attribute=\fP\f2action\fP -.LP -.LP -デフォルトの動作を無効にします。たとえば、不明な属性を含むクラスファイルを指定したアクションで転送します。アクションとして指定可能な値: -.LP -.RS 3 -.TP 3 -error -\f2pack200\fP の操作に失敗し、適切な解説が表示されます。 -.TP 3 -strip -属性はドロップされます。注: VM 必須属性を削除するとクラスローダーの障害が発生することがあります。 -.TP 3 -pass -この属性が検出された場合、クラス全体が 1 つのリソースとして転送されます。 +.\} .RE - -.LP -.LP -\f4\-Cattribute\-name=\fP\f2layout\fP \f3\-\-class\-attribute=\fP\f2attribute\-name=action\fP -.br -\f4\-Fattribute\-name=\fP\f2layout\fP \f3\-\-field\-attribute=\fP\f2attribute\-name=action\fP -.br -\f4\-Mattribute\-name=\fP\f2layout\fP \f3\-\-method\-attribute=\fP\f2attribute\-name=action\fP -.br -\f4\-Dattribute\-name=\fP\f2layout\fP \f3\-\-code\-attribute=\fP\f2attribute\-name=action\fP -.LP -.LP -これら 4 つのオプションでは、クラスエンティティーに Class 属性、Field 属性、Method 属性、Code 属性などの属性のレイアウトを指定できます。attribute\-name には、これからレイアウトまたはアクションを定義する属性の名前を指定します。アクションとして指定可能な値: -.LP -.RS 3 -.TP 3 -some\-layout\-string -レイアウト言語は、JSR 200 仕様に定義されています。 -.LP -例: \f2\-\-class\-attribute=SourceFile=RUH\fP -.TP 3 -error -この属性が検出された場合、pack200 の操作に失敗し、適切な解説が表示されます。 -.TP 3 -strip -この属性が検出された場合、属性は出力から削除されます。注: VM 必須属性を削除するとクラスローダーの障害が発生することがあります。 +.PP +\-G, \-\-strip\-debug +.RS 4 +出力からデバッグ属性を削除します。これには、\fISourceFile\fR、\fILineNumberTable\fR、\fILocalVariableTable\fR、\fILocalVariableTypeTable\fRが含まれます。これらの属性を削除すれば、ダウンロードとインストールのサイズは小さくなりますが、デバッガの機能は制限されます。 .RE - -.LP -.LP -例: \f2\-\-class\-attribute=CompilationID=pass\fP というこの属性を含むクラスファイルを転送します。パックツールは、その他のアクションを行いません。 -.LP -.LP -\f4\-f\fP\f2 \fP\f2pack.properties\fP \f3\-\-config\-file=\fP\f2pack.properties\fP -.LP -.LP -コマンド行に、パックツールを初期化するための Java プロパティーが含まれている設定ファイルを指定できます。 -.LP -.LP -\f2% pack200 \-f pack.properties myarchive.pack.gz myarchive.jar\fP -.br -\f2% more pack.properties\fP -.br -\f2# Generic properties for the packer.\fP -.br -\f2modification.time=latest\fP -.br -\f2deflate.hint=false\fP -.br -\f2keep.file.order=false\fP -.br -\f2# This option will cause the files bearing new attributes to\fP -.br -\f2# be reported as an error rather than passed uncompressed.\fP -.br -\f2unknown.attribute=error\fP -.br -\f2# Change the segment limit to be unlimited.\fP -.br -\f2segment.limit=\-1\fP -.LP -.LP -\f4\-v \-\-verbose\fP -.LP -.LP -最小限のメッセージを出力します。このオプションを複数指定すると、より長いメッセージが出力されます。 -.LP -.LP -\f4\-q \-\-quiet\fP -.LP -.LP -メッセージを表示せずに動作します。 -.LP -.LP -\f4\-lfilename \-\-log\-file=\fP\f2filename\fP -.LP -.LP -出力メッセージのログファイルを指定します。 -.LP -.LP -\f4\-? \-h \-\-help\fP -.LP -.LP +.PP +\-\-keep\-file\-order +.RS 4 +入力ファイル内のファイルの順序を保持します。これは、デフォルトの動作です。 +.RE +.PP +\-O, \-\-no\-keep\-file\-order +.RS 4 +パック・ツールは、すべての要素を並べ替えて送信します。パック・ツールは、JARディレクトリ名を削除してダウンロード・サイズを削減することもできます。ただし、インデックスなど、特定のJARファイルの最適化機能が正常に動作しなくなることがあります。 +.RE +.PP +\-S\fIvalue\fR, \-\-segment\-limit=\fIvalue\fR +.RS 4 +この値は、各アーカイブ・セグメントの予想ターゲット・サイズ\fIN\fR +(バイト単位)です。単一の入力ファイルの必要サイズが\fIN\fRバイトを超えると、独立したセグメントが割り当てられます。特殊なケースとして、値が\fI\-1\fRの場合は、すべての入力ファイルを含む大きな単一のセグメントが生成され、値が0の場合は、クラスごとにセグメントが1つずつ生成されます。アーカイブ・セグメントが大きくなると、断片化が少なくなり圧縮率が高くなりますが、その処理には多くのメモリーが必要です。 +.sp +各セグメントのサイズは、セグメントに変換されるそれぞれの入力ファイルのサイズのほか、その名前と他の送信されるプロパティのサイズを計算して推測されます。 +.sp +デフォルトは\-1です。つまり、パック・ツールは単一のセグメント出力ファイルを作成します。極端に大きな出力ファイルが生成される場合には、入力ファイルをセグメント化(分割)してより小さなJARにすることを強くお薦めします。 +.sp +この制限が課されていない10 MBのJARパック・ファイルは通常、約10%小さくパックされます。しかし、パック・ツールでより大きなJavaヒープ(セグメントの制限の約10倍)を必要とする場合もあります。 +.RE +.PP +\-E\fIvalue\fR, \-\-effort=\fIvalue\fR +.RS 4 +単一の10進数値を指定した場合、パック・ツールは、指定された圧縮率でアーカイブを圧縮します。レベル1の場合は、比較的短い圧縮時間で多少大きめのファイルが生成されますが、レベル9の場合は、非常に長い時間がかかるものの、より圧縮率の高いファイルが生成されます。特殊な値0を指定した場合は、\fIpack200\fRコマンドは元のJARファイルを圧縮なしで直接コピーします。JSR 200標準では、すべての解凍プログラムが、この特別な場合をアーカイブ全体のパススルーと解釈するように規定しています。 +.sp +デフォルトは5です。この場合、標準的な時間で適切な圧縮が行われます。 +.RE +.PP +\-H\fIvalue\fR, \-\-deflate\-hint=\fIvalue\fR +.RS 4 +入力情報を保存するというデフォルト値をオーバーライドします。転送されるアーカイブのサイズは大きくなる場合があります。指定可能な値は、\fItrue\fR、\fIfalse\fRまたは\fIkeep\fRです。 +.sp +\fIvalue\fRが\fItrue\fRまたはfalseの場合、\fIpacker200\fRコマンドは指定に従ってデフレーション・ヒントを出力アーカイブに設定します。アーカイブ要素の個々のデフレーション・ヒントは転送されません。 +.sp +\fIkeep\fR値は、入力JARで確認されたデフレーション・ヒントを保持します。これがデフォルトです。 +.RE +.PP +\-m\fIvalue\fR, \-\-modification\-time=\fIvalue\fR +.RS 4 +指定可能な値は\fIlatest\fRと\fIkeep\fRです。 +.sp +値が最新の場合、パック・ツールは、元のアーカイブの使用可能なすべてのエントリのうちの最終更新時刻か、そのセグメントの使用可能なすべてのエントリの最終更新時刻を特定しようとします。この単一の値はセグメントの一部として転送され、各セグメントの全エントリに適用されます。この場合、すべてのインストール・ファイルに単一の日付が設定されるという問題はありますが、アーカイブの転送サイズを少し小さくすることができます。 +.sp +値が\fIkeep\fRの場合、入力JARで確認された変更時間が保持されます。これがデフォルトです。 +.RE +.PP +\-P\fIfile\fR, \-\-pass\-file=\fIfile\fR +.RS 4 +ファイルを圧縮せず、バイト単位で転送するように指定します。このオプションを繰返し使用して、複数のファイルを指定できます。システム・ファイル・セパレータがJARファイル・セパレータのスラッシュ(/)に置き換えられる点を除き、パス名の変換は行われません。結果として得られるファイル名は、文字列として正確にJARファイルでの出現と一致している必要があります。\fIfile\fRにディレクトリ名を指定した場合、そのディレクトリ内のすべてのファイルが転送されます。 +.RE +.PP +\-U\fIaction\fR, \-\-unknown\-attribute=\fIaction\fR +.RS 4 +デフォルトの動作をオーバーライドします。つまり、不明な属性を含むクラス・ファイルが、指定した\fIaction\fRによって渡されます。アクションとして指定可能な値は、\fIerror\fR、\fIstrip\fRまたは\fIpass\fRです。 +.sp +値が\fIerror\fRの場合、\fIpack200\fRコマンド操作全体が失敗して適切な説明が表示されます。 +.sp +値が\fIstrip\fRの場合、属性は削除されます。Java仮想マシン(JVM)必須属性を削除すると、クラス・ローダーの障害が発生することがあります。 +.sp +値が\fIpass\fRの場合、クラス全体が1つのリソースとして転送されます。 +.RE +.PP +\-C\fIattribute\-name\fR=\fIlayout\fR, \-\-class\-attribute=\fIattribute\-name\fR=\fIaction\fR +.RS 4 +次のオプションを参照してください。 +.RE +.PP +\-F\fIattribute\-name\fR=\fIlayout\fR, \-\-field\-attribute=\fIattribute\-name\fR=\fIaction\fR +.RS 4 +次のオプションを参照してください。 +.RE +.PP +\-M\fIattribute\-name\fR=\fIlayout\fR, \-\-method\-attribute=\fIattribute\-name\fR=\fIaction\fR +.RS 4 +次のオプションを参照してください。 +.RE +.PP +\-D\fIattribute\-name\fR=\fIlayout\fR, \-\-code\-attribute=\fIattribute\-name\fR=\fIaction\fR +.RS 4 +前述の4つのオプションでは、クラス・エンティティに\fIclass\-attribute\fR、\fIfield\-attribute\fR、\fImethod\-attribute\fRおよび\fIcode\-attribute\fRなどの属性のレイアウトを指定できます。\fIattribute\-name\fRには、これからレイアウトまたはアクションを定義する属性の名前を指定します。\fIaction\fRとして指定可能な値は、\fIsome\-layout\-string\fR、\fIerror\fR、\fIstrip\fR、\fIpass\fRです。 +.sp +\fIsome\-layout\-string\fR: レイアウト言語はJSR 200仕様で定義されています。例: +\fI\-\-class\-attribute=SourceFile=RUH\fR。 +.sp +値が\fIerror\fRの場合、\fIpack200\fR操作が失敗して説明が表示されます。 +.sp +値が\fIstrip\fRの場合、属性が出力から削除されます。VM必須属性を削除するとクラス・ローダーの障害が発生することがあります。たとえば、\fI\-\-class\-attribute=CompilationID=pass\fRというこの属性を含むクラス・ファイルを転送します。パック・ツールは、その他のアクションを行いません。 +.sp +値が\fIpass\fRの場合、クラス全体が1つのリソースとして転送されます。 +.RE +.PP +\-f \fIpack\&.properties\fR, \-\-config\-file=\fIpack\&.properties\fR +.RS 4 +コマンドラインに、パック・ツールを初期化するためのJavaプロパティが含まれている構成ファイルを指定できます。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +pack200 \-f pack\&.properties myarchive\&.pack\&.gz myarchive\&.jar +more pack\&.properties +# Generic properties for the packer\&. +modification\&.time=latest +deflate\&.hint=false +keep\&.file\&.order=false +# This option will cause the files bearing new attributes to +# be reported as an error rather than passed uncompressed\&. +unknown\&.attribute=error +# Change the segment limit to be unlimited\&. +segment\&.limit=\-1 +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\-v, \-\-verbose +.RS 4 +最小限のメッセージを出力します。このオプションを複数指定すると、より長いメッセージが作成されます。 +.RE +.PP +\-q, \-\-quiet +.RS 4 +メッセージを表示せずに動作するように指定します。 +.RE +.PP +\-l\fIfilename\fR, \-\-log\-file=\fIfilename\fR +.RS 4 +出力メッセージのログ・ファイルを指定します。 +.RE +.PP +\-?, \-h, \-\-help +.RS 4 このコマンドに関するヘルプ情報を出力します。 -.LP -.LP -\f4\-V \-\-version\fP -.LP -.LP -このコマンドに関するバージョン情報を出力します。 -.LP -.LP -\f4\-J\fP\f2option\fP -.LP -.LP -\f2option\fP を、 \f2pack200\fP から呼び出された Java 起動ツールに渡します。たとえば、 \f2\-J\-Xms48m\fP と指定すると、スタートアップメモリーが 48M バイトに設定されます。このオプションは \f2\-X\fP で始まっていませんが、 \f2pack200\fP の標準オプションではありません。 \f2\-J\fP を使って、Java で記述されたアプリケーションを実行する背後の VM にオプション渡すことは、よく行われています。 -.LP -.SH "終了ステータス" -.LP -.LP -次の終了値が返されます。 -.LP -.LP -\f2\ 0\fP 正常終了した場合 -.LP -.LP -\f2>0\fP エラーが発生した場合 -.LP -.SH "関連項目" -.LP -.RS 3 -.TP 2 -o -unpack200(1) -.TP 2 -o -.na -\f2Java SE のドキュメント\fP @ -.fi -http://java.sun.com/javase/6/docs/index.html -.TP 2 -o -.na -\f2「Java 配備ガイド \- Pack200」\fP @ -.fi -http://java.sun.com/javase/6/docs/technotes/guides/deployment/deployment\-guide/pack200.html -.TP 2 -o -jar(1) \- Java Archive ツール」 -.TP 2 -o -jarsigner(1) \- JAR 署名および検証ツール」 -.TP 2 -o -\f2attributes(5) の\fP マニュアルページ .RE - -.LP -.SH "注意事項" -.LP -.LP -このコマンドと \f2pack(1)\fP を混同しないでください。これらは別製品です。 -.LP -.LP -SDK に付属する Java SE API 仕様との相違が見つかった場合には、仕様を優先してください。 -.LP - +.PP +\-V, \-\-version +.RS 4 +このコマンドに関するバージョン情報を出力します。 +.RE +.PP +\-J\fIoption\fR +.RS 4 +指定されたオプションをJava仮想マシンに渡します。詳細は、java(1)コマンドのリファレンス・ページを参照してください。たとえば、\fI\-J\-Xms48m\fRと指定すると、スタートアップ・メモリーは48MBに設定されます。 +.RE +.SH "終了ステータス" +.PP +次の終了値が返されます: 正常終了の場合は0、エラーが発生した場合は0より大きい値。 +.SH "注意" +.PP +このコマンドと\fIpack\fR(1)を混同しないでください。\fIpack\fRおよび\fIpack200\fRコマンドは、別々の製品です。 +.PP +JDKに付属するJava SE API仕様との相違が見つかった場合には、仕様を優先してください。 +.SH "関連項目" +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +unpack200(1) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +jar(1) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +jarsigner(1) +.RE +.br +'pl 8.5i +'bp diff --git a/jdk/src/solaris/doc/sun/man/man1/ja/policytool.1 b/jdk/src/solaris/doc/sun/man/man1/ja/policytool.1 index b3de7eca294..c724f7893be 100644 --- a/jdk/src/solaris/doc/sun/man/man1/ja/policytool.1 +++ b/jdk/src/solaris/doc/sun/man/man1/ja/policytool.1 @@ -1,105 +1,173 @@ -." 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 -." 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. -." -.TH policytool 1 "07 May 2011" - -.LP -.SH "名前" -policytool \- PolicyTool 管理 GUI ユーティリティー -.LP -\f3policytool\fP は、ユーティリティー GUI 経由で取得したユーザー入力に基づいて、プレーンテキストのポリシーファイルを読み書きします。 -.RS 3 -.TP 2 -o -形式 -.TP 2 -o -説明 -.TP 2 -o -オプション -.TP 2 -o -関連項目 +'\" t +.\" Copyright (c) 2001, 2013, Oracle and/or its affiliates. All rights reserved. +.\" Title: policytool +.\" Language: English +.\" Date: 2013年11月21日 +.\" SectDesc: セキュリティ・ツール +.\" Software: JDK 8 +.\" Arch: 汎用 +.\" +.\" 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. +.\" +.pl 99999 +.TH "policytool" "1" "2013年11月21日" "JDK 8" "セキュリティ・ツール" +.\" ----------------------------------------------------------------- +.\" * Define some portability stuff +.\" ----------------------------------------------------------------- +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.\" http://bugs.debian.org/507673 +.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" ----------------------------------------------------------------- +.\" * set default formatting +.\" ----------------------------------------------------------------- +.\" disable hyphenation +.nh +.\" disable justification (adjust text to left margin only) +.ad l +.\" ----------------------------------------------------------------- +.\" * MAIN CONTENT STARTS HERE * +.\" ----------------------------------------------------------------- +.SH "NAME" +policytool \- ユーティリティGUI経由で取得したユーザー入力に基づいて、プレーン・テキストのポリシー・ファイルを読み書きします。 +.SH "概要" +.sp +.if n \{\ +.RS 4 +.\} +.nf +\fIpolicytool\fR [ \fI\-file\fR ] [ \fIfilename\fR ] +.fi +.if n \{\ .RE - -.LP -.SH "形式" -.LP -.RS 3 -.TP 3 -\ -.TP 3 -policytool 管理者ユーティリティーを実行します -\f4policytool\fP -.TP 3 -policytool を実行し、指定されたポリシーファイルを読み込みます -\f4policytool\fP\f2[\-file\ \fP\f2filename\fP\f2]\fP -.TP 3 -\ -.TP 3 -以下にそれぞれの意味を示します。 -.RS 3 -.TP 3 -file -ローカルポリシーファイルを読み込むように \f2policytool\fP に指示します -.TP 3 -filename -ファイル名 +.\} +.PP +\-file +.RS 4 +ポリシー・ファイルを読み込むように\fIpolicytool\fRに指示します。 .RE -.SH "説明" -.LP -\f3policytool\fP は、ユーザーがローカルポリシーファイルの内容を管理することを可能にする GUI です。詳細については、 -.na -\f2「ポリシーファイル作成および管理ツール」\fP @ -.fi -http://java.sun.com/javase/6/docs/technotes/guides/security/PolicyGuide.htmlを参照してください。 -.SH "オプション" -.RS 3 -.TP 3 -file -\f2filename\fP を読み込みます。 -.SH "関連項目" -.na -\f2「Default Policy Implementation and Syntax」\fP @ -.fi -http://java.sun.com/javase/6/docs/technotes/guides/security/PolicyFiles.html -.br -.na -\f2「Policy Tool Users' Guide」\fP @ -.fi -http://java.sun.com/javase/6/docs/technotes/guides/security/PolicyGuide.html -.br -.na -\f2「Security Permissions」\fP @ -.fi -http://java.sun.com/javase/6/docs/technotes/guides/security/permissions.html -.br -.na -\f2「Security Overview」\fP @ -.fi -http://java.sun.com/javase/6/docs/technotes/guides/security/overview/jsoverview.html -.br +.PP +\fIfilename\fR +.RS 4 +ロードするファイルの名前。 .RE +.PP +\fB例\fR: +.PP +ポリシー・ツール管理ユーティリティを実行します: +.sp +.if n \{\ +.RS 4 +.\} +.nf +policytool +.fi +.if n \{\ .RE - -.LP - +.\} +.PP +\fIpolicytool\fRコマンドを実行し、指定されたファイルをロードします: +.sp +.if n \{\ +.RS 4 +.\} +.nf +policytool\-file mypolicyfile +.fi +.if n \{\ +.RE +.\} +.SH "説明" +.PP +\fIpolicytool\fRコマンドは、管理者のGUIを呼び出します。これにより、システム管理者はローカル・ポリシー・ファイルの内容を管理できるようになります。ポリシー・ファイルは\fI\&.policy\fR拡張子を持つプレーンテキスト・ファイルで、ドメイン別にリモート・リクエスタを権限オブジェクトにマップします。詳細は、http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/security/PolicyFiles\&.htmlにある +「Default Policy Implementation and Policy File Syntax」を参照してください +.SH "オプション" +.PP +\-file +.RS 4 +ポリシー・ファイルを読み込むように\fIpolicytool\fRに指示します。 +.RE +.SH "関連項目" +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +「Default Policy Implementation and Policy File Syntax」 +(http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/security/PolicyFiles\&.html) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +「Policy File Creation and Management」 +(http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/security/PolicyGuide\&.html) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +「Permissions in Java SE Development Kit (JDK)」 +(http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/security/permissions\&.html) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +「Java Security Overview」 +(http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/security/overview/jsoverview\&.html) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +「Java Cryptography Architecture (JCA) Reference Guide」 +(http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/security/crypto/CryptoSpec\&.html) +.RE +.br +'pl 8.5i +'bp diff --git a/jdk/src/solaris/doc/sun/man/man1/ja/rmic.1 b/jdk/src/solaris/doc/sun/man/man1/ja/rmic.1 index 621cde4c028..bca3b844f7b 100644 --- a/jdk/src/solaris/doc/sun/man/man1/ja/rmic.1 +++ b/jdk/src/solaris/doc/sun/man/man1/ja/rmic.1 @@ -1,231 +1,360 @@ -." Copyright (c) 1997, 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. -." -.TH rmic 1 "07 May 2011" - -.LP -.SH "名前" -rmic \- Java RMI コンパイラ -.LP -.LP -\f3rmic\fP によって、JRMP または IIOP プロトコルを使用するリモートオブジェクトのスタブ、スケルトン、および Tie クラスが生成されます。また、OMG IDL も生成されます。 -.LP -.SH "形式" -.LP +'\" t +.\" Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. +.\" Title: rmic +.\" Language: English +.\" Date: 2013年11月21日 +.\" SectDesc: Remote Method Invocation (RMI)ツール +.\" Software: JDK 8 +.\" Arch: 汎用 +.\" +.\" 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. +.\" +.pl 99999 +.TH "rmic" "1" "2013年11月21日" "JDK 8" "Remote Method Invocation (RMI)" +.\" ----------------------------------------------------------------- +.\" * Define some portability stuff +.\" ----------------------------------------------------------------- +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.\" http://bugs.debian.org/507673 +.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" ----------------------------------------------------------------- +.\" * set default formatting +.\" ----------------------------------------------------------------- +.\" disable hyphenation +.nh +.\" disable justification (adjust text to left margin only) +.ad l +.\" ----------------------------------------------------------------- +.\" * MAIN CONTENT STARTS HERE * +.\" ----------------------------------------------------------------- +.SH "NAME" +rmic \- Java Remote Method Protocol (JRMP)またはInternet Inter\-Orb protocol (IIOP)を使用するリモート・オブジェクトのスタブ、スケルトンおよびTieクラスを生成します。Object Management Group (OMG)インタフェース定義言語(IDL)も生成します +.SH "概要" +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -rmic [ \fP\f3options\fP\f3 ] \fP\f4package\-qualified\-class\-name(s)\fP\f3 -.fl -\fP +\fIrmic\fR [ \fIoptions\fR ] \fIpackage\-qualified\-class\-names\fR .fi - -.LP +.if n \{\ +.RE +.\} +.PP +\fIoptions\fR +.RS 4 +コマンドライン・\fIオプション\fR。オプションを参照してください。 +.RE +.PP +\fIpackage\-qualified\-class\-names\fR +.RS 4 +パッケージを含むクラス名。例: +\fIjava\&.awt\&.Color\fR。 +.RE .SH "説明" -.LP -.LP -\f3rmic\fP コンパイラによって、リモートオブジェクトの、スタブ、スケルトンクラスファイル (JRMP プロトコル)、およびスタブと Tie クラスファイルの組み合わせ (IIOP プロトコル) が生成されます。リモートオブジェクトの実装クラスであるこれらのクラスファイルは、Java プログラミング言語のクラスをコンパイルしたときに生成されます。リモート実装クラスは、\f2java.rmi.Remote\fP インタフェースを実装するクラスです。\f3rmic\fP コマンドでのクラス名は、そのクラスが \f3javac\fP コマンドでコンパイルが成功していて、かつ完全なパッケージ名が指定されている必要があります。たとえば、クラスファイル名 \f2HelloImpl\fP で \f3rmic\fP を実行するには、次のようにします。 -.LP +.PP +\fB非推奨に関する注意:\fR +Java Remote Method Protocol (JRMP)スタブおよびスケルトンの静的な生成のサポートは非推奨になりました。動的に生成されるJRMPスタブをかわりに使用して、JRMPベースのアプリケーションにこのツールを使用する必要性をなくすことをお薦めします。詳細は、\fIjava\&.rmi\&.server\&.UnicastRemoteObject\fR仕様(http://docs\&.oracle\&.com/javase/8/docs/api/java/rmi/server/UnicastRemoteObject\&.html)を参照してください。 +.PP +\fIrmic\fRコンパイラは、Java Remote Method Protocol (JRMP)とスタブおよびTieクラス・ファイル(IIOPプロトコル)を使用して、リモート・オブジェクトのスタブおよびスケルトン・クラス・ファイルを生成します。リモート・オブジェクトの実装クラスであるこれらのクラス・ファイルは、Javaプログラミング言語のクラスをコンパイルしたときに生成されます。リモート実装クラスは、\fIjava\&.rmi\&.Remote\fRインタフェースを実装するクラスです。\fIrmic\fRコマンドでのクラス名は、そのクラスが\fIjavac\fRコマンドでコンパイルが成功していて、かつ完全修飾パッケージ名である必要があります。たとえば、次に示すクラス・ファイル名\fIHelloImpl\fRで\fIrmic\fRコマンドを実行すると、helloサブディレクトリ(クラスのパッケージの名前の付いた)に\fIHelloImpl_Stub\&.class \fRファイルが作成されます。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -rmic hello.HelloImpl -.fl -\fP +rmic hello\&.HelloImpl .fi - -.LP -.LP -\f2HelloImpl_Stub.class\fP ファイルが、クラスのパッケージ名が付いた \f2hello\fP サブディレクトリに作成されます。 -.LP -.LP -リモートオブジェクトの「スケルトン」は JRMP プロトコルサーバー側のエンティティーで、実際のリモートオブジェクト実装を呼び出すメソッドを含みます。 -.LP -.LP -リモートオブジェクトの「Tie」は、スケルトンと同様にサーバー側のエンティティーですが、IIOP プロトコルを使ってクライアントと通信します。 -.LP -.LP -「スタブ」とは、リモートオブジェクトのクライアント側での代理です。スタブは、リモートオブジェクトのメソッド呼び出しを、実物のリモートオブジェクトが常駐するサーバーと通信する役割を持ちます。したがって、クライアントのリモートオブジェクトへの参照は、実際はローカルスタブへの参照となります。 -.LP -.LP -デフォルトで \f3rmic\fP では、1.2 JRMP スタブプロトコルバージョンだけを使用するスタブクラスを生成します。これは、\f2\-v1.2\fP オプションを指定した場合と同じ動作です。(5.0 以前では \f2\-vcompat\fP オプションがデフォルトであったことに注意。IIOP プロトコル用のスタブおよび Tie クラスを生成するには \f2\-iiop\fP オプションを使用します。 -.LP -.LP -スタブはリモートインタフェースだけを実装し、リモートオブジェクトが実装する局所インタフェースは実装していません。JRMP スタブはリモートオブジェクト自体が実装するリモートインタフェースと同じものを実装しているので、クライアントは、キャストや型チェックに Java プログラミング言語に組み込まれた演算子を使用することができます。IIOP の場合は、\f2PortableRemoteObject.narrow\fP メソッドを使わなければなりません。 -.LP +.if n \{\ +.RE +.\} +.PP +リモート・オブジェクトのスケルトンはJRMPプロトコル・サーバー側のエンティティで、リモート・オブジェクト実装を呼び出すメソッドを含みます。 +.PP +リモート・オブジェクトのTieは、スケルトンと同様にサーバー側のエンティティですが、IIOPプロトコルを使用してクライアントと通信します。 +.PP +スタブとは、リモート・オブジェクトのクライアント側での代理です。スタブは、リモート・オブジェクトのメソッド呼出しを、実物のリモート・オブジェクトが常駐するサーバーと通信する役割を持ちます。したがって、クライアントのリモート・オブジェクトへの参照は、実際はローカル・スタブへの参照となります。 +.PP +デフォルトで\fIrmic\fRコマンドは、1\&.2 JRMPスタブ・プロトコル・バージョンのみを使用するスタブ・クラスを生成します。これは、\fI\-v1\&.2\fRオプションを指定した場合と同じ動作です。リリース5\&.0以前では\fI\-vcompat\fRオプションがデフォルトでした。IIOPプロトコル用のスタブおよびTieクラスを生成するには\fI\-iiop\fRオプションを使用します。オプションを参照してください。 +.PP +スタブはリモート・インタフェースのみを実装し、リモート・オブジェクトが実装するローカル・インタフェースは実装していません。JRMPスタブはリモート・オブジェクトが実装するリモート・インタフェースと同じものを実装しているので、クライアントは、キャストや型チェックにJavaプログラミング言語に組み込まれた演算子を使用することができます。IIOPの場合は、\fIPortableRemoteObject\&.narrow\fRメソッドを使用する必要があります。 .SH "オプション" -.LP -.RS 3 -.TP 3 -\-bootclasspath path -ブートストラップクラスファイルの位置をオーバーライドします。 -.TP 3 -\-classpath path -\f3rmic\fP がクラスを探すためのパスを指定します。このオプションは、デフォルトや CLASSPATH 環境変数設定を上書きします。ディレクトリはコロンで分割します。したがって、\f2path\fP の一般形式は次のようになります。 -.nf -\f3 -.fl -.:<your_path> -.fl -\fP -.fi -例を示します。 -.nf -\f3 -.fl -.:/usr/local/java/classes -.fl -\fP -.fi -.TP 3 -\-d directory -生成されたクラス階層の出力先ディレクトリのルートを指定します。このオプションを使えば、スタブ、スケルトン、および Tie ファイルを格納するディレクトリを指定できます。たとえば、次のようにして使います。 -.nf -\f3 -.fl -% rmic \-d /java/classes foo.MyClass -.fl -\fP -.fi -MyClass から取得した \f2スタブとスケルトンクラスを\fP \f2/java/classes/foo\fP ディレクトリに置きます。\f2\-d\fP オプションが指定されていない場合は、\f2「\-d\ .」\fPが指定されていると見なされます。ターゲットクラスのパッケージ階層が現在のディレクトリに作成され、スタブ、Tie、およびスケルトンファイルがそのディレクトリに格納されます。(以前のバージョンの \f3rmic\fP では、\f2\-d\fP が指定されていない場合は、パッケージ階層は作成されず、出力ファイルはすべて現在のディレクトリに直接格納されていた。) -.br -\ -.TP 3 -\-extdirs path -インストール型拡張機能の位置をオーバーライドします。 -.TP 3 -\-g -局所変数を含むすべてのデバッグ情報を生成します。デフォルトでは、行番号情報だけが生成されます。 -.TP 3 -\-idl -\f2rmic\fP によって、指定したクラスおよび参照されたクラスの OMG IDL が生成されます。IDL では、プログラミング言語に依存せずに、宣言するだけでオブジェクトの API を指定することができます。IDL は、メソッドおよびデータの仕様として使用します。CORBA バインディングを提供する任意の言語で、メソッドおよびデータの作成および呼び出しを行うことができます。これらの言語には、Java および C++ が含まれています。詳細は、 -.na -\f2Java Language to IDL Mapping\fP @ -.fi -http://www.omg.org/technology/documents/formal/java_language_mapping_to_omg_idl.htm (OMG) を参照してください。 -.LP -\f2\-idl\fP オプションを使うときは、ほかのオプションも指定できます。 -.RS 3 -.TP 3 -\-always または \-alwaysgenerate -既存のスタブ、Tie、および IDL が入力クラスより新しいときでも、強制的に生成し直します。 -.TP 3 -\-factory -生成された IDL で factory キーワードを使います。 -.TP 3 -\-idlModule\ fromJavaPackage[.class]\ toIDLModule -IDLEntity パッケージのマップを指定します。例を示します。 \f2\-idlModule foo.bar my::real::idlmod\fP -.TP 3 -\-idlFile\ fromJavaPackage[.class]\ toIDLFile -IDLEntity ファイルのマップを指定します。例を示します。 \f2\-idlFile test.pkg.X TEST16.idl\fP\ +.PP +\-bootclasspath \fIpath\fR +.RS 4 +ブートストラップ・クラス・ファイルの位置をオーバーライドします。 .RE -.TP 3 -\-iiop -\f2rmic\fP によって、JRMP のスタブとスケルトンクラスの代わりに、IIOP のスタブと Tie クラスが生成されます。スタブクラスは、リモートオブジェクトのローカルプロキシで、クライアントからサーバーに呼び出しを送信するときに使われます。各リモートインタフェースにはスタブクラスが必要です。スタブクラスによってリモートインタフェースが実装されます。クライアントでリモートオブジェクトを参照するときは、実際にはスタブを参照することになります。タイクラスは、サーバー側で着呼を処理し、その呼び出しを適切な実装クラスにディスパッチするときに使われます。各実装クラスには、タイクラスが必要です。 -.LP -\f2\-iiop\fP を使って \f2rmic\fP を呼び出すと、次の命名規約に準拠したスタブと Tie が生成されます。 +.PP +\-classpath path +.RS 4 +\fIrmic\fRコマンドがクラスを探すためのパスを指定します。このオプションは、デフォルトや\fICLASSPATH\fR環境変数設定をオーバーライドします。ディレクトリはコロンで分割します。パスの一般的な形式は\fI\&.;<your_path>\fRです。例: +\fI\&.;/usr/local/java/classes\fR +.RE +.PP +\-d \fIdirectory\fR +.RS 4 +生成されたクラス階層の出力先ディレクトリのルートを指定します。このオプションを使用すると、スタブ、スケルトン、およびTieファイルを格納するディレクトリを指定できます。たとえば、次のコマンドはMyClassから導出されたスタブおよびスケルトン・クラスをディレクトリ/java/classes/exampleclassに格納します。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -_<implementationName>_stub.class -.fl -\fP -.br -\f3 -.fl -_<interfaceName>_tie.class -.fl -\fP +rmic \-d /java/classes exampleclass\&.MyClass .fi -.LP -\f2\-iiop\fP オプションを使うときは、ほかのオプションも指定できます。 -.RS 3 -.TP 3 -\-always または \-alwaysgenerate -既存のスタブ、Tie、および IDL が入力クラスより新しいときでも、強制的に生成し直します。 -.TP 3 -\-nolocalstubs -同じプロセスのクライアントとサーバーに対して最適化されたスタブを作成しません。 -.TP 3 -\-noValueMethods -これは \f2\-idl\fP オプションとともに使われなければなりません。発行された IDL に、\f2valuetype\fP メソッドおよび初期化子を追加しません。このメソッドおよび初期化子は、\f2valuetype\fP の場合はオプションです。 \f2\-idl\fP オプションを使うときは、 \f2\-noValueMethods\fP オプションを指定しない限り生成されます。 -.TP 3 -\-poa -継承が \f2org.omg.CORBA_2_3.portable.ObjectImpl\fP から \f2org.omg.PortableServer.Servant\fP に変わります。 -.LP -.na -\f2Portable Object Adapter\fP @ +.if n \{\ +.RE +.\} +\fI\-d\fRオプションが指定されていない場合、デフォルトの動作は\fI\-d\fRが指定されていた場合と同じです。ターゲット・クラスのパッケージ階層が現在のディレクトリに作成され、stub/tie/skeletonファイルが格納されます。以前のリリースの\fIrmic\fRコマンドでは、\fI\-d\fRが指定されていない場合は、パッケージ階層は作成されず、出力ファイルはすべて現在のディレクトリに直接格納されていました。 +.RE +.PP +\-extdirs \fIpath\fR +.RS 4 +インストール済拡張機能の位置をオーバーライドします。 +.RE +.PP +\-g +.RS 4 +ローカル変数を含むすべてのデバッグ情報を生成します。デフォルトでは、行番号情報のみ生成されます。 +.RE +.PP +\-idl +.RS 4 +\fIrmic\fRコマンドによって、指定したクラスおよび参照されたクラスのOMG IDLが生成されます。IDLでは、プログラミング言語に依存せずに、宣言するだけでオブジェクトのAPIを指定することができます。IDLは、メソッドおよびデータの仕様として使用します。CORBAバインディングを提供する任意の言語で、メソッドおよびデータの作成および呼出しを行うことができます。これらの言語には、JavaおよびC++が含まれています。http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/idl/mapping/jidlMapping\&.htmlの +「Java IDL: IDL to Java Language Mapping」を参照してください +.sp +\fI\-idl\fRオプションを使用するときには、他のオプションも指定できます。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +既存のスタブ/Tie/IDLが入力クラスよりも新しい場合でも、\fI\-always\fRまたは\fI\-alwaysgenerate\fRオプションは再生成を強制します。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fI\-factory\fRオプションは、生成されたIDLで\fIfactory\fRキーワードを使用します。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +The +\fI\-idlModule\fR +from J\fIavaPackage[\&.class]\fR +\fItoIDLModule\fR +specifies +\fIIDLEntity\fR +package mapping, for example: +\fI\-idlModule\fR +\fImy\&.module my::real::idlmod\fR\&. +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fI\-idlFile\fR +\fIfromJavaPackage[\&.class] toIDLFile\fR +specifies +\fIIDLEntity\fR +file mapping, for example: +\fI\-idlFile test\&.pkg\&.X TEST16\&.idl\fR\&. +.RE +.RE +.PP +\-iiop +.RS 4 +\fIrmic\fRコマンドによって、JRMPのスタブとスケルトン・クラスのかわりに、IIOPのスタブとTieクラスが生成されます。スタブ・クラスは、リモート・オブジェクトのローカル・プロキシで、クライアントからサーバーに呼出しを送信するときに使用されます。各リモート・インタフェースにはスタブ・クラスが必要です。スタブ・クラスによってリモート・インタフェースが実装されます。クライアントでリモート・オブジェクトを参照するときは、スタブを参照することになります。タイ・クラスは、サーバー側で着呼を処理し、その呼出しを適切な実装クラスにディスパッチするときに使用されます。各実装クラスには、タイ・クラスが必要です。 +.sp +\fI\-iiop\fRを使用して\fIrmic\fRコマンドを呼び出すと、次の命名規則に準拠したスタブとTieが生成されます。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +_<implementationName>_stub\&.class +_<interfaceName>_tie\&.class .fi -http://java.sun.com/javase/6/docs/technotes/guides/idl/POA.html (POA) の \f2PortableServer\fP モジュールは、ネイティブの \f2Servant\fP 型を定義します。Java プログラミング言語では、\f2Servant\fP 型は Java の \f2org.omg.PortableServer.Servant\fP クラスにマップされます。このクラスは、すべての POA サーバント実装の基底クラスとして機能し、アプリケーションプログラマが呼び出すことのできるいくつかのメソッドのほかに、POA そのものによって呼び出され、サーバントの動作を制御するためにユーザーがオーバーライドできるメソッドも提供します。OMG IDL to Java Language Mapping Specification、CORBA V 2.3.1 ptc/00\-01\-08.pdf に準拠しています。 +.if n \{\ .RE -.TP 3 -\-J -\f2\-J\fP の後ろに続くオプションを \f2java\fP インタプリタに引き渡します。 \f2java\fP オプションと組み合わせて使います (\-J と java オプションの間にスペースは入れない)。 -.TP 3 -\-keep または \-keepgenerated -スタブ、スケルトン、または Tie クラスのための \f2.java\fP ソースファイルを \f2.class\fP ファイルと同じディレクトリに残します。 -.TP 3 -\-nowarn -警告をオフにします。このオプションを指定すると、コンパイラは警告を表示しません。 -.TP 3 -\-nowrite -コンパイルしたクラスをファイルシステムに書き込みません。 -.TP 3 -\-vcompat -1.1 と 1.2 の両方の JRMP スタブプロトコルバージョンと互換性のあるスタブおよびスケルトンクラスを作成します。(5.0 以前のリリースではこのオプションはデフォルト。)生成されたスタブクラスは、JDK 1.1 仮想マシンにロードされると 1.1 スタブプロトコルバージョンを使用し、JDK 1.2 以降の仮想マシンにロードされると 1.2 スタブプロトコルバージョンを使用します。生成されたスケルトンクラスでは、1.1 と 1.2 の両方のスタブプロトコルバージョンをサポートします。生成されたクラスは両方の操作モードをサポートするために、サイズが大きくなります。 -.TP 3 -\-verbose -コンパイラやリンカーが、コンパイルされているクラスやロードされているクラスファイルについてのメッセージを表示するようにします。 -.TP 3 -\-v1.1 -1.1 JRMP スタブプロトコルバージョンのみのスタブおよびスケルトンクラスを生成します。このオプションが使用できるのは、JDK 1.1 から \f3rmic\fP ツールで生成され、アップグレードできない (さらにダイナミッククラスローディングを使用していない) 、既存の静的配備されたスタブクラスに対し、直列化互換性のあるスタブクラスを生成場合だけです。 -.TP 3 -\-v1.2 -(デフォルト) 1.2 JRMP スタブプロトコルバージョンのみのスタブクラスを生成します。スケルトンクラスは 1.2 スタブプロトコルバージョンで使用できないため、このオプションではスケルトンクラスは生成されません。生成されたスタブクラスは、JDK 1.1 仮想マシンにロードされても動作しません。 +.\} +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fI\-iiop\fRオプションを使用するときには、他のオプションも指定できます。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +既存のスタブ/Tie/IDLが入力クラスよりも新しい場合でも、\fI\-always\fRまたは\fI\-alwaysgenerate\fRオプションは再生成を強制します。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fI\-nolocalstubs\fRオプションでは、同じプロセスのクライアントとサーバーに最適化されたスタブは作成されません。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fI\-noValueMethods\fRオプションは\fI\-idl\fRオプションとともに使用する必要があります。\fI\-noValueMethods\fRオプションは、送信されるIDLに\fIvaluetype\fRメソッドおよび初期化子を追加できないようにします。このメソッドおよび初期化子は、valuetypeの場合はオプションです。\fI\-idl\fRオプションとともに\fI\-noValueMethods\fRオプションを指定しないかぎり生成されます。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fI\-poa\fRオプションは継承を\fIorg\&.omg\&.CORBA_2_3\&.portable\&.ObjectImpl\fRから\fIorg\&.omg\&.PortableServer\&.Servant\fRに変更します。ポータブル・オブジェクト・アダプタ(POA)の\fIPortableServer\fRモジュールは、ネイティブの\fIServant\fR型を定義します。Javaプログラミング言語では、\fIServant\fR型はJavaの\fIorg\&.omg\&.PortableServer\&.Servant\fRクラスにマップされます。これは、すべてのPOAサーバント実装のベース・クラスとして機能し、アプリケーション・プログラマが呼び出すことのできるいくつかのメソッド、およびPOAによって呼び出され、サーバントの動作を制御するためにユーザーがオーバーライドできるメソッドを提供します。OMG IDL to Java Language Mapping Specification、CORBA V 2\&.3\&.1 ptc/00\-01\-08\&.pdfに準拠しています。 +.RE +.RE +.PP +\-J +.RS 4 +Javaコマンドとともに使用して、\fI\-J\fRオプションは\fI\-J\fRの後ろに続く引数をJavaインタプリタに渡します(\fI\-J\fRと引数の間にスペースは入れません)。 +.RE +.PP +\-keep or \-keepgenerated +.RS 4 +スタブ、スケルトン、またはTieクラスのために生成された\fI\&.java\fRソース・ファイルを保持し、\fI\&.class\fRファイルと同じディレクトリに書き込みます。 +.RE +.PP +\-nowarn +.RS 4 +警告をオフにします。\fI\-nowarn\fRオプションが使用される場合。コンパイラは警告を表示しません。 +.RE +.PP +\-nowrite +.RS 4 +コンパイルしたクラスをファイル・システムに書き込みません。 +.RE +.PP +\-vcompat (非推奨) +.RS 4 +1\&.1と1\&.2の両方のJRMPスタブ・プロトコル・バージョンと互換性のあるスタブおよびスケルトン・クラスを作成します。5\&.0以前のリリースではこのオプションがデフォルトでした。生成されたスタブ・クラスは、JDK 1\&.1仮想マシンにロードされると1\&.1スタブ・プロトコル・バージョンを使用し、JDK 1\&.2以降の仮想マシンにロードされると1\&.2スタブ・プロトコル・バージョンを使用します。生成されたスケルトン・クラスでは、1\&.1と1\&.2の両方のスタブ・プロトコル・バージョンをサポートします。生成されたクラスは両方の操作モードをサポートするために、サイズが大きくなります。注意:このオプションは非推奨になりました。説明を参照してください。 +.RE +.PP +\-verbose +.RS 4 +コンパイラやリンカーが、コンパイルされているクラスやロードされているクラス・ファイルについてのメッセージを表示するようにします。 +.RE +.PP +\-v1\&.1 (非推奨) +.RS 4 +1\&.1 JRMPスタブ・プロトコル・バージョンのみのスタブおよびスケルトン・クラスを生成します。\fI\-v1\&.1\fRオプションを使用できるのは、JDK 1\&.1から\fIrmic\fRコマンドで生成され、アップグレードできない(さらにダイナミック・クラス・ローディングを使用していない)、既存の静的デプロイされたスタブ・クラスに対し、直列化互換性のあるスタブ・クラスを生成する場合のみです。注意:このオプションは非推奨になりました。説明を参照してください。 +.RE +.PP +\-v1\&.2 (非推奨) +.RS 4 +(デフォルト)1\&.2 JRMPスタブ・プロトコル・バージョンのみのスタブ・クラスを生成します。スケルトン・クラスは1\&.2スタブ・プロトコル・バージョンで使用できないため、スケルトン・クラスは生成されません。生成されたスタブ・クラスは、JDK 1\&.1仮想マシンにロードされても動作しません。注意:このオプションは非推奨になりました。説明を参照してください。 .RE - -.LP .SH "環境変数" -.LP -.RS 3 -.TP 3 -CLASSPATH -ユーザー定義クラスへのパスをシステムに指定します。ディレクトリはコロンで分割します。次に例を示します。 -.nf -\f3 -.fl -.:/usr/local/java/classes -.fl -\fP -.fi +.PP +CLASSPATH +.RS 4 +ユーザー定義クラスへのパスをシステムに指定します。ディレクトリはコロンで区切られます。例: +\fI\&.:/usr/local/java/classes\fR .RE - -.LP .SH "関連項目" -.LP -.LP -java(1)、javac(1)、 -.na -\f2CLASSPATH\fP @ -.fi -http://java.sun.com/javase/6/docs/technotes/tools/index.html#classpath -.LP - +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +javac(1) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +java(1) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +Setting the Class Path +.RE +.br +'pl 8.5i +'bp diff --git a/jdk/src/solaris/doc/sun/man/man1/ja/rmid.1 b/jdk/src/solaris/doc/sun/man/man1/ja/rmid.1 index e229fbf1cdc..1ee27efb1a9 100644 --- a/jdk/src/solaris/doc/sun/man/man1/ja/rmid.1 +++ b/jdk/src/solaris/doc/sun/man/man1/ja/rmid.1 @@ -1,328 +1,365 @@ -." 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 -." 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. -." -.TH rmid 1 "07 May 2011" - -.LP -.SH "名前" -rmid \- Java RMI 起動システムデーモン -.LP -.LP -\f3rmid\fP で起動システムデーモンを開始すると、オブジェクトを仮想マシン (VM) に登録して起動できるようになります。 -.LP -.SH "形式" -.LP +'\" t +.\" Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved. +.\" Title: rmid +.\" Language: English +.\" Date: 2013年11月21日 +.\" SectDesc: Remote Method Invocation (RMI)ツール +.\" Software: JDK 8 +.\" Arch: 汎用 +.\" +.\" 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. +.\" +.pl 99999 +.TH "rmid" "1" "2013年11月21日" "JDK 8" "Remote Method Invocation (RMI)" +.\" ----------------------------------------------------------------- +.\" * Define some portability stuff +.\" ----------------------------------------------------------------- +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.\" http://bugs.debian.org/507673 +.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" ----------------------------------------------------------------- +.\" * set default formatting +.\" ----------------------------------------------------------------- +.\" disable hyphenation +.nh +.\" disable justification (adjust text to left margin only) +.ad l +.\" ----------------------------------------------------------------- +.\" * MAIN CONTENT STARTS HERE * +.\" ----------------------------------------------------------------- +.SH "NAME" +rmid \- 起動システム・デーモンを開始すると、オブジェクトをJava仮想マシン(VM)に登録してアクティブ化できるようになります。 +.SH "概要" +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -rmid [options] -.fl -\fP +\fIrmid\fR [\fIoptions\fR] .fi - -.LP +.if n \{\ +.RE +.\} +.PP +\fIoptions\fR +.RS 4 +コマンドライン・オプション。オプションを参照してください。 +.RE .SH "説明" -.LP -.LP -\f3rmid\fP ツールは、起動システムデーモンを開始します。起動システムデーモンを開始してからでないと、起動可能オブジェクトを起動システムに登録したり、VM 内で起動したりすることができません。起動可能なリモートオブジェクトを使ったプログラムの作成方法の詳細は、 -.na -\f2「Java RMI 仕様」\fP @ -.fi -http://java.sun.com/javase/6/docs/platform/rmi/spec/rmiTOC.htmlおよび -.na -\f2「起動のチュートリアル」\fP @ -.fi -http://java.sun.com/javase/6/docs/technotes/guides/rmi/activation/overview.htmlを参照してください。 -.LP -.LP -デーモンを起動するには、次のように、セキュリティーポリシーファイルを指定して \f2rmid\fP コマンドを実行します。 -.LP +.PP +\fIrmid\fRコマンドは、起動システム・デーモンを開始します。起動システム・デーモンを開始してからでないと、アクティブ化可能オブジェクトをアクティブ化システムに登録したり、JVM内でアクティブ化したりすることができません。アクティブ化可能なオブジェクトを使用するプログラムの作成方法の詳細は、\fIアクティブ化の使用\fRに関するチュートリアル(http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/rmi/activation/overview\&.html)を参照してください +.PP +\fIrmid\fRコマンドを実行し、次のようにセキュリティ・ポリシー・ファイルを指定して、デーモンを起動します。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl - rmid \-J\-Djava.security.policy=rmid.policy -.fl -\fP +rmid \-J\-Djava\&.security\&.policy=rmid\&.policy .fi - -.LP -.LP -\f3注:\fP \f2rmid\fP の Sun の 実装を実行する場合、デフォルトでは、セキュリティーポリシーファイルを指定する必要があります。それは、 \f2rmid\fP が起動グループ用に VM を起動するために各 \f2ActivationGroupDesc\fP 内の情報を使用できるかどうかを検証できるようにするためです。特に、ActivationGroupDesc のコンストラクタに渡される \f2CommandEnvironment\fP や任意の \f2Properties\fP によって指定される \f2コマンドおよび\fPオプションは、 \f2rmid\fP のセキュリティーポリシーファイルの中で明示的に許可することが必要になりました。\f2sun.rmi.activation.execPolicy\fP プロパティーの値は、 \f2起動グループ用に VM を\fP 起動するために \f2ActivationGroupDesc\fP 内の情報を使用できるかどうかを判断するときに rmid が使用するポリシーを決定します。 -.LP -.LP -\f2rmid\fP をデフォルト設定で実行すると、次のような処理が行われます。 -.LP -.RS 3 -.TP 2 -o -アクティベータを起動し、デフォルトポート 1098 で内部レジストリを起動する -.TP 2 -o -この内部レジストリの中で、 \f2ActivationSystem\fP を \f2java.rmi.activation.ActivationSystem という名前に\fP バインドする +.if n \{\ .RE - -.LP -.LP -レジストリにほかのポートを指定するには、rmid の起動時に \f2\-port\fP オプションを \f2指定しなければなりません\fP。次に例を示します。 -.LP +.\} +.PP +\fIrmid\fRコマンドのOracleの実装を実行する場合、デフォルトでは、セキュリティ・ポリシー・ファイルを指定する必要があります。それは、\fIrmid\fRコマンドが起動グループ用にJVMを起動するために各\fIActivationGroupDesc\fR内の情報を使用できるかどうかを検証できるようにするためです特に、\fIActivationGroupDesc\fRコンストラクタに渡される\fICommandEnvironment\fRや任意のプロパティによって指定されるコマンドおよびオプションは、\fIrmid\fRコマンドのセキュリティ・ポリシー・ファイルの中で明示的に許可することが必要になりました。\fIsun\&.rmi\&.activation\&.execPolicy\fRプロパティの値は、起動グループ用にJVMを起動するために\fIActivationGroupDesc\fR内の情報を使用できるかどうかを判断するときに\fIrmid\fRコマンドが使用するポリシーを決定します。詳細は、\-J\-Dsun\&.rmi\&.activation\&.execPolicy=policyオプションの説明を参照してください。 +.PP +\fIrmid\fRコマンドを実行すると、デフォルト・ポート1098でアクティベータと内部レジストリが起動され、\fIActivationSystem\fRがこの内部レジストリ内の名前\fIjava\&.rmi\&.activation\&.ActivationSystem\fRにバインドされます。 +.PP +レジストリに他のポートを指定するには、\fIrmid\fRコマンドの実行時に\fI\-port\fRオプションを指定する必要があります。たとえば、次のコマンドは、レジストリのデフォルト・ポート1099で、起動システム・デーモンとレジストリを起動します。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl - rmid \-J\-Djava.security.policy=rmid.policy \-port 1099 -.fl -\fP +rmid \-J\-Djava\&.security\&.policy=rmid\&.policy \-port 1099 .fi - -.LP -.LP -このコマンドは、起動システムデーモンを開始し、レジストリのデフォルトポート 1099 でレジストリを開始します。 -.LP -.SS -rmid を inetd/xinetd から開始する -.LP -.LP -\f2rmid\fP をコマンド行から開始するには、 \f2inetd\fP (Solaris の場合)、または \f2xinetd\fP (Linux の場合) を構成して \f2rmid\fP を必要に応じて開始する方法もあります。 -.LP -.LP -\f2rmid\fP を開始すると、System.inheritedChannel メソッドを呼び出して、継承されたチャンネル ( \f2inetd\fP/\f2xinetd\fP から継承) を取得しようとします。 継承されたチャンネルが \f2null\fP であるか、 \f2java.nio.channels.ServerSocketChannel\fP のインスタンスでなかった場合、 \f2rmid\fP rmid はそのチャンネルは \f2inetd\fP/\f2xinetd\fP によって起動されたものではないと判断し、前述のように起動します。 -.LP -.LP -継承されたチャンネルが \f2ServerSocketChannel\fP インスタンスである場合は、 \f2rmid\fP はエクスポートするリモートオブジェクト、つまり java.rmi.activation.ActivationSystem がバインドされているレジストリと java.rmi.activation.Activator リモートオブジェクトに対する要求を受信するサーバーソケットとして、ServerSocketChannel から取得した java.net.ServerSocket を使用します。 このモードでは、 \f2rmid\fP の動作は、次のことを除いて、 コマンド行から起動した場合と同じです。 -.LP -.RS 3 -.TP 2 -o -\f2System.err\fP に対する出力は、ファイルにリダイレクトされる。このファイルは \f2java.io.tmpdir\fP システムプロパティーで指定されるディレクトリ (通常は \f2/var/tmp\fP または \f2/tmp\fP) にある。ファイル名の接頭辞は \f2"rmid\-err"\fP で、接尾辞は \f2"tmp"\fP である -.TP 2 -o -\f2\-port\fP オプションは拒否される。このオプションを指定すると、 \f2rmid\fP はエラーメッセージを出して終了する -.TP 2 -o -\f2\-log\fP オプションは必須。このオプションを指定しないと、 \f2rmid\fP はエラーメッセージを出して終了する +.if n \{\ .RE - -.LP -.LP -必要に応じてサービスを開始するように設定する詳細については、 \f2inetd\fP (Solaris の場合)、または \f2xinetd\fP (Linux) のマニュアルページを参照してください。 -.LP +.\} +.SH "必要に応じてRMIDを開始" +.PP +\fIrmid\fRをコマンドラインから開始するには、\fIinetd\fR +(Oracle Solarisの場合)、または\fIxinetd\fR +(Linuxの場合)を構成して\fIrmid\fRを必要に応じて開始する方法もあります。 +.PP +RMIDを開始すると、\fISystem\&.inheritedChannel\fRメソッドを呼び出して、継承されたチャンネル(\fIinetd\fR/\fIxinetd\fRから継承)を取得しようとします。継承されたチャンネルがnullであるか、\fIjava\&.nio\&.channels\&.ServerSocketChannel\fRのインスタンスでなかった場合、RMIDはそのチャンネルは\fIinetd\fR/\fIxinetd\fRによって起動されたものではないと判断し、前述のように起動します。 +.PP +継承されたチャンネルが\fIServerSocketChannel\fRインスタンスである場合は、RMIDはエクスポートするリモート・オブジェクト、つまり\fIjava\&.rmi\&.activation\&.ActivationSystem\fRがバインドされているレジストリと\fIjava\&.rmi\&.activation\&.Activator\fRリモート・オブジェクトに対するリクエストを受信するサーバー・ソケットとして、\fIServerSocketChannel\fRから取得した\fIjava\&.net\&.ServerSocket\fRを使用します。このモードでは、RMIDの動作は、次のことを除いて、コマンドラインから起動した場合と同じです。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fISystem\&.err\fRに対する出力は、ファイルにリダイレクトされる。このファイルは\fIjava\&.io\&.tmpdir\fRシステム・プロパティで指定されるディレクトリ(通常は\fI/var/tmp\fRまたは\fI/tmp\fR)にある。ファイル名の接頭辞は\fIrmid\-err\fRで、接尾辞は\fItmp\fRである。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fI\-port\fRオプションは使用できません。このオプションが指定されている場合、RMIDはエラー・メッセージが表示されて終了します。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fI\-log\fRオプションは必須。このオプションが指定されていない場合、RMIDはエラー・メッセージが表示されて終了します。 +.RE +.PP +必要に応じてサービスを開始するように構成する方法の詳細は、\fIinetd\fR +(Oracle Solarisの場合)、または\fIxinetd\fR +(Linux)のマニュアル・ページを参照してください。 .SH "オプション" -.LP -.RS 3 -.TP 3 -\-C<someCommandLineOption> -\f2rmid\fP の子プロセス (起動グループ) が作成されたときに、それぞれの子プロセスにコマンド行引数として渡されるオプションを指定します。たとえば、次のように指定すると、起動システムデーモンによって生成される各仮想マシンにプロパティーを渡すことができます。 +.PP +\-C\fIオプション\fR +.RS 4 +\fIrmid\fRコマンドの子プロセス(起動グループ)が作成されたときに、それぞれの子プロセスにコマンドライン引数として渡されるオプションを指定します。たとえば、次のように指定すると、起動システム・デーモンによって生成される各仮想マシンにプロパティを渡すことができます。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl - rmid \-C\-Dsome.property=value -.fl -\fP +rmid \-C\-Dsome\&.property=value .fi -コマンド行引数を子プロセスに渡す機能は、デバッグを行う場合に便利です。たとえば、次のようなコマンドを実行できます。 +.if n \{\ +.RE +.\} +コマンドライン引数を子プロセスに渡す機能は、デバッグを行う場合に便利です。たとえば、次のコマンドでは、すべての子JVMでserver\-callロギングが可能です。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl - rmid \-C\-Djava.rmi.server.logCalls=true -.fl -\fP +rmid \-C\-Djava\&.rmi\&.server\&.logCalls=true .fi -このコマンドにより、すべての子 VM でサーバー呼び出しのログが作成されるようになります。 -.LP -.TP 3 -\-J<someCommandLineOption> -rmid を実行している \f2java\fP インタプリタに渡すオプションを指定します。 たとえば、 \f2rmid\fP が \f2rmid.policy\fP という名前のポリシーファイルを使用するように指定するには、rmid のコマンド行で \f2\-J\fP オプションを使って、 \f2java.security.policy\fP プロパティーを定義します。 次に例を示します。 +.if n \{\ +.RE +.\} +.RE +.PP +\-J\fIoption\fR +.RS 4 +RMIDを実行しているJavaインタプリタに渡すオプションを指定します。たとえば、\fIrmid\fRコマンドが\fIrmid\&.policy\fRという名前のポリシー・ファイルを使用するように指定するには、\fIrmid\fRのコマンドラインで\fI\-J\fRオプションを使用して、\fIjava\&.security\&.policy\fRプロパティを定義します。次に例を示します。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl - rmid \-J\-Djava.security.policy=rmid.policy -.fl -\fP +rmid \-J\-Djava\&.security\&.policy\-rmid\&.policy .fi -.TP 3 -\-J\-Dsun.rmi.activation.execPolicy=<policy> -起動グループが実行されることになる VM の起動に使用するコマンドおよびコマンド行オプションをチェックするために、 \f2rmid\fP が採用するポリシーを指定します。このオプションは、Java RMI 起動デーモンの Sun の実装だけに存在することに注意してください。コマンド行にこのプロパティーを指定しない場合、結果は \f2\-J\-Dsun.rmi.activation.execPolicy=default\fP を指定した場合と同じになります。\f2<policy>\fP に指定可能な値は、\f2default\fP、\f2<policyClassName>\fP、または \f2none\fP です。 -.RS 3 -.TP 2 -o -\f3default (または、このプロパティーが「指定されていない」場合)\fP -.LP -デフォルトの \f2execPolicy\fP の場合、 \f2rmid\fP が実行できるのは、 \f2rmid\fP が使用するセキュリティーポリシーファイルの中で、実行する権限が \f2rmid\fP に与えられているコマンドおよびコマンド行オプションだけです。「デフォルト」の実行ポリシーで使用できるのは、デフォルトの起動グループ実装だけです。 -.LP -\f2rmid は、\fP 起動グループ用の VM を起動するときに、そのグループについて登録された起動グループ記述子である \f2ActivationGroupDesc\fP 内の情報を使用します。グループ記述子は、 \f2ActivationGroupDesc.CommandEnvironment\fP を指定します (省略可能)。これには、起動グループを開始する「コマンド」と、そのコマンド行に追加できるコマンド行「オプション」が含まれています。デフォルトでは、 \f2rmid は\fP java.home にある \f2java\fP コマンドを使用します。 グループ記述子には、オプションとしてコマンド行に追加される「プロパティー」オーバーライドも含まれています。このプロパティーは、次のように定義します。 +.if n \{\ +.RE +.\} +.RE +.PP +\-J\-Dsun\&.rmi\&.activation\&.execPolicy=\fIpolicy\fR +.RS 4 +起動グループが実行されることになるJVMの起動に使用するコマンドおよびコマンドライン・オプションをチェックするために、RMIDが採用するポリシーを指定します。このオプションは、Java RMI起動デーモンのOracleの実装のみに存在することに注意してください。コマンドラインにこのプロパティを指定しない場合、結果は\fI\-J\-Dsun\&.rmi\&.activation\&.execPolicy=default\fRを指定した場合と同じになります。\fIpolicy\fRに指定可能な値は、\fIdefault\fR、\fIpolicyClassName\fRまたは\fInone\fRです。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +デフォルト +.sp +\fIdefault\fRまたは未指定値の\fIexecPolicy\fRの場合、\fIrmid\fRコマンドが実行できるのは、\fIrmid\fRコマンドが使用するセキュリティ・ポリシー・ファイルの中で、実行する権限が\fIrmid\fRに与えられているコマンドおよびコマンドライン・オプションのみです。デフォルトの実行ポリシーで使用できるのは、デフォルトの起動グループ実装のみです。 +.sp +\fIrmid\fRコマンドは、起動グループ用のJVMを起動するときに、そのグループについて登録された起動グループ記述子である\fIActivationGroupDesc\fR内の情報を使用します。グループ記述子は、\fIActivationGroupDesc\&.CommandEnvironment\fRを指定します(省略可能)。これには、起動グループを開始するコマンドと、そのコマンドラインに追加できるコマンドライン・オプションが含まれています。デフォルトでは、\fIrmid\fRコマンドは\fIjava\&.home\fRにある\fIjava\fRコマンドを使用します。グループ記述子には、コマンドラインにオプションとして追加されるプロパティ・オーバーライドも含まれます(\fI\-D<property>=<value>\fRとして定義されます)。\fIcom\&.sun\&.rmi\&.rmid\&.ExecPermission\fR権限は\fIrmid\fRコマンドに、起動グループを開始するためにグループ記述子の\fICommandEnvironment\fRで指定されたコマンドを実行する権限を付与します。\fIcom\&.sun\&.rmi\&.rmid\&.ExecOptionPermission\fR権限は起動グループの開始時に、グループ記述子でプロパティ・オーバーライドとして、または\fICommandEnvironment\fRでオプションとして指定されたコマンドライン・オプションを、\fIrmid\fRコマンドが使用することを許可します。\fIrmid\fRコマンドに様々なコマンドおよびオプションを実行する権限を付与する場合、権限\fIExecPermission\fRおよび\fIExecOptionPermission\fRをすべてのコード・ソースに付与する必要があります。 +.sp +\fBExecPermission\fR +.sp +\fIExecPermission\fRクラスは、起動グループを開始するために\fIrmid\fRコマンドが特定のコマンドを実行する権限を表します。 +.sp +\fB構文\fR: +\fIExecPermission\fRの名前は、\fIrmid\fRコマンドに実行を許可するコマンドのパス名です。スラッシュ(/)およびアスタリスク(*)で終わるパス名は、そのディレクトリに含まれるすべてのファイルを示します。スラッシュはファイル区切り文字\fIFile\&.separatorChar\fRです。スラッシュ(/)およびマイナス符号(\-)で終わるパス名は、そのディレクトリに含まれるすべてのファイルとサブディレクトリ(再帰的に)を示します。パス名に特別なトークン\fI<<ALL FILES>>\fRを指定した場合は、任意のファイルを示します。 +.sp +パス名にアスタリスク(*)を指定した場合は、現在のディレクトリ内のすべてのファイルを示します。パス名にマイナス符号(\-)を指定した場合は、現在のディレクトリ内のすべてのファイルおよび(再帰的に)現在のディレクトリに含まれるすべてのファイルとサブディレクトリを示します。 +.sp +\fBExecOptionPermission\fR +.sp +\fIExecOptionPermission\fRクラスは、起動グループを開始するときに\fIrmid\fRコマンドで特定のコマンドライン・オプションを使用できる権限を表します。\fIExecOptionPermission\fRの名前は、コマンドライン・オプションの値です。 +.sp +\fB構文\fR: オプションでは、ワイルドカードが限定的にサポートされます。アスタリスクは、ワイルドカード・マッチを表します。アスタリスク(*)は、オプション名そのものとして使用できます。つまり、任意のオプションを表すことができます。また、オプション名の末尾に使用することもできます。ただし、ドット(\&.)か等号(=)の直後にアスタリスク(*)を指定する必要があります。 +.sp +例: +\fI*\fRや\fI\-Dmydir\&.*\fRや\fI\-Da\&.b\&.c=*\fRは有効ですが、\fI*mydir\fRや\fI\-Da*b\fRや\fIab*\fRは無効です。 +.sp +\fBrmidのポリシー・ファイル\fR +.sp +\fIrmid\fRコマンドに様々なコマンドおよびオプションを実行する権限を許可する場合は、権限\fIExecPermission\fRおよび\fIExecOptionPermission\fRをすべてのコード・ソースに付与する必要があります(汎用的に)。これらの権限をチェックするのは\fIrmid\fRコマンドのみなので、これらの権限を汎用的に付与しても安全です。 +.sp +\fIrmid\fRコマンドに各種の実行権限を付与するポリシー・ファイルの例を、次に示します。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl - \-D\fP\f4<property>\fP\f3=\fP\f4<value>\fP\f3 -.fl -\fP -.fi -.LP -アクセス権 \f2com.sun.rmi.rmid.ExecPermission\fP を使用すると、 \f2rmid\fP に対して、グループ記述子の \f2CommandEnvironment\fP で指定されたコマンドを実行して起動グループを開始する権限を許可することができます。アクセス権 \f2com.sun.rmi.rmid.ExecOptionPermission\fP を使用すると、グループ記述子でプロパティーオーバーライドとして指定されたコマンド行オプション、または \f2CommandEnvironment\fP でオプションとして指定されたコマンド行オプションを、起動グループを開始するときに rmid が使用できるようになります。 -.LP -\f2rmid に\fP さまざまなコマンドおよびオプションを実行する権限を許可する場合は、アクセス権 \f2ExecPermission\fP および \f2ExecOptionPermission\fP を汎用的に許可する必要があります。つまり、すべてのコードソースに対して許可します。 -.RS 3 -.TP 3 -ExecPermission -\f2ExecPermission\fP クラスは、起動グループを開始するために \f2rmid が\fP 特定の「コマンド」を実行する権限を表します。 -.LP -\f3構文\fP -.br -\f2ExecPermission\fP の「名前」は、 \f2rmid\fP に実行を許可するコマンドのパス名です。「/*」 (「/」はファイル区切り文字 File.separatorChar) で終わるパス名は、そのディレクトリに含まれるすべてのファイルを示します。 「/\-」で終わるパス名は、そのディレクトリに含まれるすべてのファイルとサブディレクトリ (再帰的に) を示します。パス名に特別なトークン「<<ALL FILES>>」を指定した場合は、\f3任意の\fPファイルを示します。 -.LP -\f3注:\fP 「*」を 1 つ指定しただけのパス名は、現在のディレクトリ内のすべてのファイルを表します。また、「\-」を 1 つ指定しただけのパス名は、現在のディレクトリ内のすべてのファイルと、現在のディレクトリに含まれるすべてのファイルとサブディレクトリ (再帰的に) を表します。 -.TP 3 -ExecOptionPermission -\f2ExecOptionPermission\fP クラスは、起動グループを開始するときに \f2rmid は、起動グループを開始するコマンドをまったく検証しません。\fP 特定のコマンド行「オプション」を使用できる権限を表します。 \f2ExecOptionPermission\fP の「名前」は、コマンド行オプションの値です。 -.LP -\f3構文\fP -.br -オプションでは、ワイルドカードが限定的にサポートされます。アスタリスクは、ワイルドカードマッチを表します。 アスタリスクは、オプション名そのものとして使用できます。 つまり、任意のオプションを表すことができます。 また、オプション名の末尾に使用することもできます。 ただし、「.」か「=」の直後にアスタリスクを指定する必要があります。 -.LP -例を示します。「*」、「\-Dfoo.*」、「\-Da.b.c=*」は有効ですが、「*foo」、「\-Da*b」、「ab*」は無効です。 -.TP 3 -rmid のポリシーファイル -\f2rmid に\fP さまざまなコマンドおよびオプションを実行する権限を許可する場合は、アクセス権 \f2ExecPermission\fP および \f2ExecOptionPermission\fP を汎用的に許可する必要があります。つまり、すべてのコードソースに対して許可します。これらのアクセス権をチェックするのは \f2rmid\fP だけなので、これらのアクセス権を汎用的に許可しても安全です。 -.LP -rmid に各種の実行権限を許可するポリシーファイルの例を、次に示します。 -.nf -\f3 -.fl grant { -.fl - permission com.sun.rmi.rmid.ExecPermission -.fl - "/files/apps/java/jdk1.7.0/solaris/bin/java"; -.fl - -.fl - permission com.sun.rmi.rmid.ExecPermission -.fl - "/files/apps/rmidcmds/*"; -.fl - -.fl - permission com.sun.rmi.rmid.ExecOptionPermission -.fl - "\-Djava.security.policy=/files/policies/group.policy"; -.fl - -.fl - permission com.sun.rmi.rmid.ExecOptionPermission -.fl - "\-Djava.security.debug=*"; -.fl - -.fl - permission com.sun.rmi.rmid.ExecOptionPermission -.fl - "\-Dsun.rmi.*"; -.fl -}; -.fl -\fP -.fi -最初に付与されているアクセス権は、 \f2rmid\fP に対し、パス名により明示的に指定される \f2java\fP コマンドの 1.7.0 バージョンの実行を許可します。デフォルトでは、java.home にあるバージョンの \f2java\fP コマンドを使用します。 \f2rmid\fP が使用するのと同じバージョン) が使用されるため、そのコマンドは、ポリシーファイルで指定する必要はありません。2 番目のアクセス権は、 \f2rmid\fP に対して、ディレクトリ \f2/files/apps/rmidcmds\fP 内の任意のコマンドの実行権限を許可します。 -.LP -3 番目に付与されているアクセス権 \f2ExecOptionPermission\fP は、 \f2rmid\fP に対して、セキュリティーポリシーファイルを \f2/files/policies/group.policy\fP として定義している起動グループの開始を許可します。次のアクセス権は、起動グループが \f2java.security.debug\fP プロパティーを使用することを許可しています。最後のアクセス権は、起動グループが \f2sun.rmi\fP というプロパティー名の階層内の任意のプロパティーを使用することを許可しています。 -.LP -ポリシーファイルを指定して \f2rmid\fP を起動するには、rmid のコマンド行で \f2java.security.policy\fP プロパティーを指定する必要があります。 次に例を示します。 -.LP -\f2rmid \-J\-Djava.security.policy=rmid.policy\fP -.RE -.TP 2 -o -\f4<policyClassName>\fP -.LP -デフォルトの動作では十分な柔軟性が得られない場合、管理者は、 \f2rmid\fP の起動時に、 \f2checkExecCommand\fP メソッドが所属するクラスの名前を指定して、rmid が実行するコマンドをチェックすることができます。 -.LP -\f2policyClassName\fP には、引数なしのコンストラクタを持ち、次のような \f2checkExecCommand\fP メソッドを実装している public クラスを指定します。 -.nf -\f3 -.fl - public void checkExecCommand(ActivationGroupDesc desc, -.fl - String[] command) -.fl - throws SecurityException; -.fl -\fP -.fi -起動グループを開始する前に、 \f2rmid\fP は、ポリシーの \f2checkExecCommand\fP メソッドを呼び出します。このとき、起動グループの記述子と、起動グループを開始するための完全なコマンドを含む配列をそのメソッドに渡します。 \f2checkExecCommand\fP が \f2SecurityException\fP をスローすると、 \f2rmid\fP はその起動グループを開始せず、オブジェクトの起動を試行している呼び出し側には \f2ActivationException\fP がスローされます。 -.TP 2 -o -\f3none\fP -.LP -\f2sun.rmi.activation.execPolicy\fP プロパティーの値が「none」の場合、 \f2rmid\fP は、起動グループを開始するコマンドをまったく検証しません。 -.RE -.LP -.TP 3 -\-log dir -起動システムデーモンがデータベースおよび関連情報を書き込むのに使うディレクトリの名前を指定します。デフォルトでは、rmid コマンドを実行したディレクトリに、 \f2log\fP というログディレクトリが作成されます。 -.LP -.TP 3 -\-port port -\f2rmid\fP のレジストリが使うポートを指定します。起動システムデーモンは、このレジストリの中で、 \f2java.rmi.activation.ActivationSystem\fP という名前でActivationSystem をバインドします。したがって、ローカルマシン上の \f2ActivationSystem\fP は、次のように \f2Naming.lookup\fP メソッドを呼び出すことによって取得できます。 -.nf -\f3 -.fl - import java.rmi.*; -.fl - import java.rmi.activation.*; -.fl - -.fl - ActivationSystem system; system = (ActivationSystem) -.fl - Naming.lookup("//:\fP\f4port\fP/java.rmi.activation.ActivationSystem"); -.fl -.fi -.TP 3 -\-stop -\-port オプションによって指定されたポートの、現在の \f2rmid\fP 呼び出しを停止します。 ポートが指定されていない場合は、ポート 1098 で実行されている \f2rmid\fP を停止します。 -.RE - -.LP -.SH "環境変数" -.LP -.RS 3 -.TP 3 -CLASSPATH -ユーザー定義クラスへのパスをシステムに指定します。ディレクトリはコロンで分割します。例を示します。 -.nf -\f3 -.fl - .:/usr/local/java/classes -.fl -\fP -.fi -.RE - -.LP -.SH "関連項目" -.LP -.LP -rmic(1)、 -.na -\f2CLASSPATH\fP @ -.fi -http://java.sun.com/javase/6/docs/technotes/tools/index.html#classpath、java(1) -.LP + permission com\&.sun\&.rmi\&.rmid\&.ExecPermission + "/files/apps/java/jdk1\&.7\&.0/solaris/bin/java"; + permission com\&.sun\&.rmi\&.rmid\&.ExecPermission + "/files/apps/rmidcmds/*"; + + permission com\&.sun\&.rmi\&.rmid\&.ExecOptionPermission + "\-Djava\&.security\&.policy=/files/policies/group\&.policy"; + + permission com\&.sun\&.rmi\&.rmid\&.ExecOptionPermission + "\-Djava\&.security\&.debug=*"; + + permission com\&.sun\&.rmi\&.rmid\&.ExecOptionPermission + "\-Dsun\&.rmi\&.*"; +}; +.fi +.if n \{\ +.RE +.\} +最初に付与されている権限は、\fIrmid\fRコマンドに対し、パス名により明示的に指定される\fIjava\fRコマンドの1\&.7\&.0リリースの実行を許可します。デフォルトでは、\fIjava\&.home\fRにあるバージョンの\fIjava\fRコマンドを使用します。\fIrmid\fRコマンドが使用するのと同じバージョンが使用されるため、そのコマンドは、ポリシー・ファイルで指定する必要はありません。2番目の権限は、\fIrmid\fRコマンドに対して、ディレクトリ\fI/files/apps/rmidcmds\fR内の任意のコマンドの実行権限を許可します。 +.sp +3番目に付与されている権限\fIExecOptionPermission\fRは、\fIrmid\fRコマンドに対して、セキュリティ・ポリシー・ファイルを\fI/files/policies/group\&.policy\fRとして定義している起動グループの開始を許可します。次の権限は、起動グループが\fIjava\&.security\&.debug property\fRを使用することを許可しています。最後の権限は、起動グループが\fIsun\&.rmi property\fR名の階層内の任意のプロパティを使用することを許可しています。 +.sp +ポリシー・ファイルを指定して\fIrmid\fRコマンドを起動するには、\fIrmid\fRのコマンドラインで\fIjava\&.security\&.policy\fRプロパティを指定する必要があります。次に例を示します。 +.sp +\fIrmid \-J\-Djava\&.security\&.policy=rmid\&.policy\fR\&. +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +<policyClassName> +.sp +デフォルトの動作では十分な柔軟性が得られない場合、管理者は、\fIrmid\fRの起動時に、\fIcheckExecCommand\fRメソッドが所属するクラスの名前を指定して、\fIrmid\fRコマンドが実行するコマンドをチェックすることができます。 +.sp +\fIpolicyClassName\fRには、引数なしのコンストラクタを持ち、次のような\fIcheckExecCommand\fRメソッドを実装しているpublicクラスを指定します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf + public void checkExecCommand(ActivationGroupDesc desc, String[] command) + throws SecurityException; +.fi +.if n \{\ +.RE +.\} +起動グループを開始する前に、\fIrmid\fRコマンドは、ポリシーの\fIcheckExecCommand\fRメソッドを呼び出します。このとき、起動グループの記述子と、起動グループを開始するための完全なコマンドを含む配列をそのメソッドに渡します。\fIcheckExecCommand\fRが\fISecurityException\fRをスローすると、\fIrmid\fRコマンドはその起動グループを開始せず、オブジェクトの起動を試行している呼出し側には\fIActivationException\fRがスローされます。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +none +.sp +\fIsun\&.rmi\&.activation\&.execPolicy\fRプロパティの値が\fInone\fRの場合、\fIrmid\fRコマンドは、起動グループを開始するコマンドをまったく検証しません。 +.RE +.RE +.PP +\-log \fIdir\fR +.RS 4 +起動システム・デーモンがデータベースおよび関連情報を書き込むのに使用するディレクトリの名前を指定します。デフォルトでは、\fIrmid\fRコマンドを実行したディレクトリに、logというログ・ディレクトリが作成されます。 +.RE +.PP +\-port \fIport\fR +.RS 4 +レジストリが使用するポートを指定します。起動システム・デーモンは、このレジストリの中で、\fIjava\&.rmi\&.activation\&.ActivationSystem\fRという名前で\fIActivationSystem\fRをバインドします。ローカル・マシン上の\fIActivationSystem\fRは、次のように\fINaming\&.lookup\fRメソッドを呼び出すことによって取得できます。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +import java\&.rmi\&.*; + import java\&.rmi\&.activation\&.*; + + ActivationSystem system; system = (ActivationSystem) + Naming\&.lookup("//:port/java\&.rmi\&.activation\&.ActivationSystem"); +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\-stop +.RS 4 +\fI\-port\fRオプションによって指定されたポートの、現在の\fIrmid\fRコマンドの呼出しを停止します。ポートが指定されていない場合は、このオプションはポート1098で実行されている\fIrmid\fRの呼出しを停止します。 +.RE +.SH "環境変数" +.PP +CLASSPATH +.RS 4 +ユーザー定義クラスへのパスをシステムに指定します。ディレクトリはコロンで区切られます。例: +\fI\&.:/usr/local/java/classes\fR +.RE +.SH "関連項目" +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +java(1) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +Setting the Class Path +.RE +.br +'pl 8.5i +'bp diff --git a/jdk/src/solaris/doc/sun/man/man1/ja/rmiregistry.1 b/jdk/src/solaris/doc/sun/man/man1/ja/rmiregistry.1 index 264c3c1cfa6..2786a5b1a3c 100644 --- a/jdk/src/solaris/doc/sun/man/man1/ja/rmiregistry.1 +++ b/jdk/src/solaris/doc/sun/man/man1/ja/rmiregistry.1 @@ -1,83 +1,132 @@ -." Copyright (c) 1997, 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. -." -.TH rmiregistry 1 "07 May 2011" - -.LP -.SH "名前" -rmiregistry \- Java リモートオブジェクトレジストリ -.LP -.RS 3 -\f3rmiregistry\fP コマンドは、現在のホストの指定したポート上にリモートオブジェクトレジストリを開始します。 -.RE - -.LP -.SH "形式" -.LP +'\" t +.\" Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. +.\" Title: rmiregistry +.\" Language: English +.\" Date: 2013年11月21日 +.\" SectDesc: Remote Method Invocation (RMI)ツール +.\" Software: JDK 8 +.\" Arch: 汎用 +.\" +.\" 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. +.\" +.pl 99999 +.TH "rmiregistry" "1" "2013年11月21日" "JDK 8" "Remote Method Invocation (RMI)" +.\" ----------------------------------------------------------------- +.\" * Define some portability stuff +.\" ----------------------------------------------------------------- +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.\" http://bugs.debian.org/507673 +.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" ----------------------------------------------------------------- +.\" * set default formatting +.\" ----------------------------------------------------------------- +.\" disable hyphenation +.nh +.\" disable justification (adjust text to left margin only) +.ad l +.\" ----------------------------------------------------------------- +.\" * MAIN CONTENT STARTS HERE * +.\" ----------------------------------------------------------------- +.SH "NAME" +rmiregistry \- 現在のホストの指定したポート上にリモート・オブジェクト・レジストリを開始します。 +.SH "概要" +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -rmiregistry [\fP\f4port\fP\f3] -.fl -\fP +\fIrmiregistry\fR [ \fIport\fR ] .fi - -.LP -.SH "説明" -.LP -.LP -\f3rmiregistry\fP コマンドは、現在のホストの指定 \f2port\fP 上にリモートオブジェクトレジストリを作成し、開始します。\f2port\fP の指定を省略した場合、レジストリはポート 1099 で開始します。\f3rmiregistry\fP コマンドに、出力機能はありません。通常、これはバックグラウンドで実行されます。例を示します。 -.LP -.LP -\f2rmiregistry&\fP -.LP -.LP -リモートオブジェクトレジストリは、ブートストラップのネームサービスです。同一ホストの RMI サーバーが、リモートオブジェクトを名前にバインドするために使用されます。次に、ローカルおよびリモートホストのクライアントはリモートオブジェクトを検索し、リモートメソッドの呼び出しを行います。 -.LP -.LP -レジストリは、一般的に、最初のリモートオブジェクトの位置を指定します。 そこで、アプリケーションはメソッドを呼び出す必要があります。代わって、そのオブジェクトはアプリケーション指定のサポートを提供し、他のオブジェクトを探します。 -.LP -.LP -\f2java.rmi.registry.LocateRegistry\fP クラスのメソッドは、ローカルホスト、またはローカルホストとポートで動作するレジストリを取得するために使用されます。 -.LP -.LP -\f2java.rmi.Naming\fP クラスの URL ベースのメソッドは、レジストリで動作し、任意のホストおよびローカルホスト上のリモートオブジェクトの検索に使用されます。リモートオブジェクトに単純な (文字列) 名前をバインドしたり、新しい名前をリバインド (古いバインドにオーバーライド) します。またリモートオブジェクトをアンバインドしたり、レジストリにバインドされた URL を出力します。 -.LP -.SH "オプション" -.LP -.RS 3 -.TP 3 -\-J -\f2\-J\fP の後ろに続くオプションを \f2java\fP インタプリタに引き渡します。 \f2java\fP オプションと組み合わせて使います (\-J と java オプションの間にスペースは入れない)。 +.if n \{\ +.RE +.\} +.PP +\fIport\fR +.RS 4 +リモート・オブジェクト・レジストリを開始する現在のホスト上の\fIport\fRの数。 +.RE +.SH "説明" +.PP +\fIrmiregistry\fRコマンドは、現在のホストの指定したポート上にリモート・オブジェクト・レジストリを作成し、開始します。portの指定を省略した場合、レジストリはポート1099で開始します。\fIrmiregistry\fRコマンドに、出力機能はありません。通常、これはバックグラウンドで実行されます。次に例を示します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +rmiregistry & +.fi +.if n \{\ +.RE +.\} +.PP +リモート・オブジェクト・レジストリは、ブートストラップのネーム・サービスです。同一ホストのRMIサーバーが、リモート・オブジェクトを名前にバインドするために使用されます。次に、ローカルおよびリモート・ホストのクライアントはリモート・オブジェクトを検索し、リモート・メソッドの呼出しを行います。 +.PP +レジストリは、一般的に、最初のリモート・オブジェクトの位置を指定します。そこで、アプリケーションはメソッドを呼び出す必要があります。その後、そのオブジェクトはアプリケーション指定のサポートを提供し、他のオブジェクトを探します。 +.PP +\fIjava\&.rmi\&.registry\&.LocateRegistry\fRクラスのメソッドは、ローカル・ホスト、またはローカル・ホストとポートで動作するレジストリを取得するために使用されます。 +.PP +\fIjava\&.rmi\&.Naming\fRクラスのURLベース・メソッドはレジストリに対して操作を実行し、任意のホストおよびローカル・ホストでのリモート・オブジェクトの検索に使用できます。単純名(文字列)をリモート・オブジェクトにバインドし、新しい名前をリモート・オブジェクトに再バインドし(古いバインドをオーバーライド)、リモート・オブジェクトをアンバインドし、レジストリにバインドされているURLをリスト表示します。 +.SH "オプション" +.PP +\-J +.RS 4 +Javaオプションとともに使用して、\fI\-J\fRの後ろに続くオプションをJavaインタプリタに引き渡します(\fI\-J\fRとオプションの間にスペースは入れません)。 .RE - -.LP .SH "関連項目" -.LP -java(1)、 -.na -\f2java.rmi.registry.LocateRegistry\fP @ -.fi -http://java.sun.com/javase/6/docs/api/java/rmi/registry/LocateRegistry.html、および -.na -\f2java.rmi.Naming\fP @ -.fi -http://java.sun.com/javase/6/docs/api/java/rmi/Naming.html +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +java(1) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fI「java\&.rmi\&.registry\&.LocateRegistry」\fR(http://docs\&.oracle\&.com/javase/8/docs/api/java/rmi/registry/LocateRegistry\&.html) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fI「java\&.rmi\&.Naming class description」\fR(http://docs\&.oracle\&.com/javase/8/docs/api/java/rmi/Naming\&.html) +.RE +.br +'pl 8.5i +'bp diff --git a/jdk/src/solaris/doc/sun/man/man1/ja/schemagen.1 b/jdk/src/solaris/doc/sun/man/man1/ja/schemagen.1 index cb86632a14a..60deab8308d 100644 --- a/jdk/src/solaris/doc/sun/man/man1/ja/schemagen.1 +++ b/jdk/src/solaris/doc/sun/man/man1/ja/schemagen.1 @@ -1,127 +1,158 @@ -." Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. -." DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -." -." This code is free software; you can redistribute it and/or modify it -." under the terms of the GNU General Public License version 2 only, as -." published by the Free Software Foundation. -." -." 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. -." -.TH schemagen 1 "07 May 2011" - -.LP -.SH "名前" -schemagen \- XML バインドのための Java(TM) アーキテクチャースキーマジェネレータ -.LP -.LP -\f3仕様バージョン:\fP 2.1 -.br -\f3実装バージョン:\fP 2.1.3 -.LP -.SH "schemagen の起動" -.LP -.LP -スキーマジェネレータを起動するには、ユーザーのプラットフォームの bin ディレクトリ内にある \f2適切な schemagen シェルスクリプト\fP を使用 \f2します\fP 。 -.LP -.LP -現在のスキーマジェネレータは、Java ソースファイルとクラスファイルのいずれも処理できます。 -.LP -.LP -また、スキーマジェネレータを実行するための Ant タスクも用意されています。 -.na -\f2schemagen を Ant とともに使用する\fP @ -.fi -https://jaxb.dev.java.net/nonav/2.1.3/docs/schemagenTask.htmlための手順を参照してください。 -.LP +'\" t +.\" Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved. +.\" Title: schemagen +.\" Language: English +.\" Date: 2013年11月21日 +.\" SectDesc: Java Webサービス・ツール +.\" Software: JDK 8 +.\" Arch: 汎用 +.\" +.\" 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. +.\" +.pl 99999 +.TH "schemagen" "1" "2013年11月21日" "JDK 8" "Java Webサービス・ツール" +.\" ----------------------------------------------------------------- +.\" * Define some portability stuff +.\" ----------------------------------------------------------------- +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.\" http://bugs.debian.org/507673 +.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" ----------------------------------------------------------------- +.\" * set default formatting +.\" ----------------------------------------------------------------- +.\" disable hyphenation +.nh +.\" disable justification (adjust text to left margin only) +.ad l +.\" ----------------------------------------------------------------- +.\" * MAIN CONTENT STARTS HERE * +.\" ----------------------------------------------------------------- +.SH "NAME" +schemagen \- Javaクラス内で参照されているネームスペースごとにスキーマを生成します。 +.SH "概要" +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -% schemagen.sh Foo.java Bar.java ... -.fl -Note: Writing schema1.xsd -.fl -\fP +\fIschemagen\fR [ \fIoptions\fR ] \fIjava\-files\fR .fi - -.LP -.LP -ユーザーの Java ソース/クラスがほかのクラスを参照している場合、システムの 環境変数経由でそれらのクラスにアクセスできるようになっているか、あるいは \f2\-classpath\fP/\f2\-cp\fP を使ってそれらのクラスをツールに指定する必要があります。そうしないと、スキーマの生成時にエラーが発生します。 -.LP -.SS -コマンド行オプション -.LP -.nf -\f3 -.fl -使用方法: schemagen [\-options ...] <java files> -.fl - -.fl -オプション: -.fl - \-d <path> : プロセッサおよび javac によって生成されるクラスファイルの格納場所を指定します。 -.fl - \-cp <path> : ユーザー指定ファイルの検索場所を指定します。 -.fl - \-classpath <path> : ユーザー指定ファイルの検索場所を指定します。 -.fl - \-encoding <encoding> : apt/javac 呼び出しに使用されるエンコーディングを指定します。 -.fl - -.fl - \-episode <file> : 個別コンパイル用のエピソードファイルを生成します。 -.fl - \-version : バージョン情報を表示します。 -.fl - \-help : この使用方法に関するメッセージを表示します。 -.fl -\fP -.fi - -.LP -.SH "生成されるリソースファイル" -.LP -.LP -現在のスキーマジェネレータは単純に、Java クラス内で参照されている名前空間ごとに 1 つのスキーマファイルを作成します。生成されるスキーマファイルの名前を制御する方法は、現時点では存在しません。そうした目的には、 -.na -\f2スキーマジェネレータの ant タスク\fP @ -.fi -https://jaxb.dev.java.net/nonav/2.1.3/docs/schemagenTask.htmlを使用してください。 -.LP -.SH "名前" -関連項目 -.LP -.RS 3 -.TP 2 -o -スキーマジェネレータの実行 (schemagen): [ -.na -\f2コマンド行の命令\fP @ -.fi -https://jaxb.dev.java.net/nonav/2.1.3/docs/schemagen.html、 -.na -\f2SchemaGen を Ant とともに使用する\fP @ -.fi -https://jaxb.dev.java.net/nonav/2.1.3/docs/schemagenTask.html] -.TP 2 -o -.na -\f2XML バインドのための JavaTM アーキテクチャー (JAXB)\fP @ -.fi -http://java.sun.com/javase/6/docs/technotes/guides/xml/jaxb/index.html +.if n \{\ .RE +.\} +.PP +\fIoptions\fR +.RS 4 +コマンドライン・オプション。オプションを参照してください。 +.RE +.PP +\fIjava\-files\fR +.RS 4 +処理するJavaクラス・ファイル。 +.RE +.SH "説明" +.PP +スキーマ・ジェネレータは、Javaクラス内で参照されているネームスペースごとに1つのスキーマ・ファイルを作成します。現在、生成されるスキーマ・ファイルの名前は制御できません。スキーマ・ファイル名を制御する場合は、http://jaxb\&.java\&.net/nonav/2\&.2\&.3u1/docs/schemagenTask\&.htmlにある +「Using SchemaGen with Ant」を参照してください +.PP +プラットフォームのbinディレクトリにある適切な\fIschemagen\fRシェル・スクリプトを使用して、スキーマ・ジェネレータを起動します。現在のスキーマ・ジェネレータは、Javaソース・ファイルとクラス・ファイルのいずれも処理できます。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +schemagen\&.sh Foo\&.java Bar\&.java \&.\&.\&. +Note: Writing schema1\&.xsd +.fi +.if n \{\ +.RE +.\} +.PP +javaファイルが他のクラスを参照している場合、それらのクラスにシステム\fICLASSPATH\fR環境変数でアクセスできる必要があります。または、クラス・パス・オプションを指定して\fIschemagen\fRコマンド・ラインで指定する必要があります。オプションを参照してください。参照されるファイルにアクセスできない、または参照されるファイルが指定されていない場合、スキーマの生成時にエラーが表示されます。 +.SH "オプション" +.PP +\-d \fIpath\fR +.RS 4 +\fIschemagen\fRコマンドがプロセッサ生成および\fIjavac\fR生成クラス・ファイルを配置する場所。 +.RE +.PP +\-cp \fIpath\fR +.RS 4 +\fIschemagen\fRコマンドがユーザー指定ファイルを配置する場所。 +.RE +.PP +\-classpath \fIpath\fR +.RS 4 +\fIschemagen\fRコマンドがユーザー指定ファイルを配置する場所。 +.RE +.PP +\-encoding \fIencoding\fR +.RS 4 +\fIapt\fRまたは\fIjavac\fRコマンドの呼出しに使用するエンコーディングを指定します。 +.RE +.PP +\-episode \fIfile\fR +.RS 4 +コンパイルごとにエピソード・ファイルを生成します。 +.RE +.PP +\-version +.RS 4 +リリース情報を表示します。 +.RE +.PP +\-help +.RS 4 +ヘルプ・メッセージを表示します。 +.RE +.SH "関連項目" +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +Using SchemaGen with Ant -.LP - +(http://jaxb\&.java\&.net/nonav/2\&.2\&.3u1/docs/schemagenTask\&.html) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +Java Architecture for XML Binding (JAXB) + +(http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/xml/jaxb/index\&.html) +.RE +.br +'pl 8.5i +'bp diff --git a/jdk/src/solaris/doc/sun/man/man1/ja/serialver.1 b/jdk/src/solaris/doc/sun/man/man1/ja/serialver.1 index e06b12e9de1..e527c1694f4 100644 --- a/jdk/src/solaris/doc/sun/man/man1/ja/serialver.1 +++ b/jdk/src/solaris/doc/sun/man/man1/ja/serialver.1 @@ -1,97 +1,144 @@ -." Copyright (c) 1997, 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. -." -.TH serialver 1 "07 May 2011" - -.LP -.SH "名前" -serialver \- シリアルバージョンコマンド -.LP -.LP -\f3serialver\fP コマンドは \f2serialVersionUID\fP を返します。 -.LP -.SH "形式" -.LP +'\" t +.\" Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. +.\" Title: serialver +.\" Language: English +.\" Date: 2013年11月21日 +.\" SectDesc: Remote Method Invocation (RMI)ツール +.\" Software: JDK 8 +.\" Arch: 汎用 +.\" +.\" 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. +.\" +.pl 99999 +.TH "serialver" "1" "2013年11月21日" "JDK 8" "Remote Method Invocation (RMI)" +.\" ----------------------------------------------------------------- +.\" * Define some portability stuff +.\" ----------------------------------------------------------------- +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.\" http://bugs.debian.org/507673 +.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" ----------------------------------------------------------------- +.\" * set default formatting +.\" ----------------------------------------------------------------- +.\" disable hyphenation +.nh +.\" disable justification (adjust text to left margin only) +.ad l +.\" ----------------------------------------------------------------- +.\" * MAIN CONTENT STARTS HERE * +.\" ----------------------------------------------------------------- +.SH "NAME" +serialver \- 指定したクラスのシリアル・バージョンUIDを戻します。 +.SH "概要" +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -\fP\f3serialver\fP [ options ] [ classnames ] -.fl +\fIserialver\fR [ \fIoptions\fR ] [ \fIclassnames\fR ] .fi - -.LP -.RS 3 -.TP 3 -options -このドキュメントで説明されているコマンド行オプションです。 -.TP 3 -classnames -1 つ以上のクラス名です。 +.if n \{\ +.RE +.\} +.PP +\fIoptions\fR +.RS 4 +コマンドライン・オプション。オプションを参照してください。 +.RE +.PP +\fIclassnames\fR +.RS 4 +\fIserialVersionUID\fRを戻すクラスです。 .RE - -.LP .SH "説明" -.LP -.LP -\f3serialver\fP は、1 つ以上のクラスの \f2serialVersionUID\fP を、展開しているクラスへコピーするのに適した形式で返します。引数を指定しないで呼び出すと、使用方法が表示されます。 -.LP +.PP +\fIserialver\fRコマンドは、1つ以上のクラスの\fIserialVersionUID\fRを、展開しているクラスへコピーするのに適した形式で返します。引数なしで呼び出された場合、\fIserialver\fRコマンドは使用率行を出力します。 .SH "オプション" -.LP -.RS 3 -.TP 3 -\-classpath <: で区切られたディレクトリと zip や jar ファイル> -アプリケーションのクラスおよびリソースの検索パスを設定します。 +.PP +\-classpath \fIpath\-files\fR +.RS 4 +アプリケーションのクラスおよびリソースの検索パスを設定します。クラスとリソースをコロン(:)で区切ります。 .RE - -.LP -.RS 3 -.TP 3 -\-show -簡単なユーザーインタフェースを表示します。完全指定のクラス名を入力して、Enter キーか「Show」ボタンを押し、シリアルバージョン UID を表示します。 -.TP 3 -\-Joption -Java 仮想マシンに \f2option\fP を渡します。\f2option\fP には、java(1)のリファレンスページに記載されているオプションを 1 つ指定します。たとえば、\f3\-J\-Xms48m\fP と指定すると、スタートアップメモリーは 48M バイトに設定されます。 +.PP +\-show +.RS 4 +簡単なユーザー・インタフェースを表示します。完全指定のクラス名を入力して、Enterキーか「表示」ボタンを押し、\fIserialVersionUID\fRを表示します。 .RE - -.LP -.SH "注" -.LP -.LP -\f3serialver\fP コマンドは、指定されたクラスをその仮想マシン内に読み込んで初期化しますが、デフォルトではセキュリティーマネージャーの設定は行いません。信頼できないクラスとともに \f3serialver\fP を実行する場合には、次のオプションを使ってセキュリティーマネージャーを設定できます。 -.LP -.LP -\f2\-J\-Djava.security.manager\fP -.LP -.LP -また、必要であれば、次のオプションを使ってセキュリティーポリシーを指定できます。 -.LP -.LP -\f2\-J\-Djava.security.policy=<policy file>\fP -.LP -.SH "関連項目" -.LP -.LP -.na -\f2java.io.ObjectStreamClass\fP @ +.PP +\-J\fIoption\fR +.RS 4 +Java仮想マシンに\fIoption\fRを渡します。optionには、Javaアプリケーション起動ツールのリファレンス・ページに記載されているオプションを1つ指定します。たとえば、\fI\-J\-Xms48m\fRと指定すると、スタートアップ・メモリーは48MBに設定されます。java(1)を参照してください。 +.RE +.SH "注意" +.PP +\fIserialver\fRコマンドは、指定されたクラスをその仮想マシン内に読み込んで初期化しますが、デフォルトではセキュリティ・マネージャの設定は行いません。信頼できないクラスとともに\fIserialver\fRコマンドを実行する場合には、次のオプションを使用してセキュリティ・マネージャを設定できます。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-J\-Djava\&.security\&.manager .fi -http://java.sun.com/javase/6/docs/api/java/io/ObjectStreamClass.html -.LP - +.if n \{\ +.RE +.\} +.PP +必要であれば、次のオプションを使用してセキュリティ・ポリシーを指定できます。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +\-J\-Djava\&.security\&.policy=<policy file> +.fi +.if n \{\ +.RE +.\} +.SH "関連項目" +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +policytool(1) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +http://docs\&.oracle\&.com/javase/8/docs/api/java/io/ObjectStreamClass\&.htmlにある +\fIjava\&.io\&.ObjectStream\fRクラス記述 +.RE +.br +'pl 8.5i +'bp diff --git a/jdk/src/solaris/doc/sun/man/man1/ja/servertool.1 b/jdk/src/solaris/doc/sun/man/man1/ja/servertool.1 index 2e8fc6d97e3..71ab6b65ed1 100644 --- a/jdk/src/solaris/doc/sun/man/man1/ja/servertool.1 +++ b/jdk/src/solaris/doc/sun/man/man1/ja/servertool.1 @@ -1,113 +1,199 @@ -." 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 -." 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. -." -.TH servertool 1 "07 May 2011" - -.LP -.SH "名前" -servertool \- Java(TM) IDL サーバーツール -.LP -\f3servertool\fP はアプリケーションプログラマが、持続サーバーの登録、登録解除、起動、および停止を行うためのコマンド行インタフェースを提供します。 -.SH "形式" -.LP +'\" t +.\" Copyright (c) 2001, 2013, Oracle and/or its affiliates. All rights reserved. +.\" Title: servertool +.\" Language: English +.\" Date: 2013年11月21日 +.\" SectDesc: Java IDLおよびRMI-IIOPツール +.\" Software: JDK 8 +.\" Arch: 汎用 +.\" +.\" 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. +.\" +.pl 99999 +.TH "servertool" "1" "2013年11月21日" "JDK 8" "Java IDLおよびRMI-IIOPツール" +.\" ----------------------------------------------------------------- +.\" * Define some portability stuff +.\" ----------------------------------------------------------------- +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.\" http://bugs.debian.org/507673 +.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" ----------------------------------------------------------------- +.\" * set default formatting +.\" ----------------------------------------------------------------- +.\" disable hyphenation +.nh +.\" disable justification (adjust text to left margin only) +.ad l +.\" ----------------------------------------------------------------- +.\" * MAIN CONTENT STARTS HERE * +.\" ----------------------------------------------------------------- +.SH "NAME" +servertool \- 開発者が永続サーバーを登録、登録解除、起動、停止するための使いやすいユーザー・インタフェースを提供します。 +.SH "概要" +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -servertool \-ORBInitialPort \fP\f4nameserverport\fP\f3 \fP\f3options\fP\f3 [ \fP\f3commands\fP\f3 ] -.fl -\fP +\fIservertool\fR \-ORBInitialPort \fInameserverport\fR [ \fIoptions\fR ] [ \fIcommands \fR] .fi - -.LP -.LP -コマンドを入力しないで \f2servertool\fP を起動すると、コマンド行ツールとして \f2servertool >\fP プロンプトが表示されます。\f2servertool >\fP プロンプトにコマンドを入力します。 -.LP -.LP -コマンドを入力して \f2servertool\fP を起動すると、Java IDL サーバーツールが起動し、コマンドを実行して終了します。 -.LP -.LP -\f2\-ORBInitialPort\fP \f2nameserverport\fP オプションは\f3必須\fPです。 \f2nameserverport\fP の値には、\f2orbd\fP が実行され、着信要求を待機しているポートを指定する必要があります。Solaris ソフトウェアを使用する場合、1024 より小さいポート上でプロセスを開始するには、root ユーザーになる必要があります。このため、\f2nameserverport\fPとして 1024 以上のポート番号を使用することをお勧めします。 -.LP +.if n \{\ +.RE +.\} +.PP +\fIoptions\fR +.RS 4 +コマンドライン・オプション。オプションを参照してください。 +.RE +.PP +commands +.RS 4 +コマンドライン・コマンド。コマンドを参照してください。 +.RE +.PP +\fIservertool\fR\fIservertool >\fR\fIservertool >\fR .SH "説明" -.LP -.LP -\f2servertool\fP はアプリケーションプログラマが、持続サーバーの登録、登録解除、起動、および停止を行うためのコマンド行インタフェースを提供します。そのほかに、サーバーに関するさまざまな統計情報を取得するためのコマンドも提供します。 -.LP +.PP +\fIservertool\fRコマンドは、開発者が永続サーバーを登録、登録解除、起動、停止するためのコマンドライン・インタフェースを提供します。コマンドライン・コマンドを使用すると、サーバーに関する様々な統計情報を取得できます。コマンドを参照してください。 .SH "オプション" -.LP -.RS 3 -.TP 3 -\-ORBInitialHost nameserverhost -ネームサーバーが、実行され、着信要求を待機しているホストマシンを指定します。このオプションを指定しない場合、\f2nameserverhost\fP はデフォルトで \f2localhost\fP に設定されます。\f2orbd\fP と \f2servertool\fP が異なるマシン上で実行されている場合は、\f2orbd\fP が実行されているホストの名前と IP アドレスを指定する必要があります。 -.TP 3 -\-Joption -Java 仮想マシンに \f2option\fP を渡します。\f2option\fP には、java(1)のリファレンスページに記載されているオプションを 1 つ指定します。たとえば、\f3\-J\-Xms48m\fP と指定すると、スタートアップメモリーは 48M バイトに設定されます。\f3\-J\fP を使って背後の実行環境にオプションを渡すことはよく行われています。 +.PP +\-ORBInitialHost \fInameserverhost\fR +.RS 4 +このオプションは必須です。ネーム・サーバーが実行され、着信リクエストをリスニングするホスト・マシンを指定します。\fInameserverhost\fR値は、\fIorb\fRが実行され、リクエストをリスニングしているポートを指定する必要があります。このオプションを指定しない場合、値はデフォルトで\fIlocalhost\fRに設定されます。\fIorbd\fRと\fIservertool\fRが異なるマシン上で実行されている場合は、\fIorbd\fRが実行されているホストの名前またはIPアドレスを指定する必要があります。 +.sp +\fB注意:\fR +Oracle Solarisでは、1024より小さいポート上でプロセスを開始するには、rootユーザーになる必要があります。\fInameserverport\fR値には、1024以上のポート番号を使用することをお薦めします。 +.RE +.PP +\-J\fIoption\fR +.RS 4 +Java仮想マシンに\fIoption\fRを渡します。\fIoption\fRには、Javaアプリケーション起動ツールのリファレンス・ページに記載されているオプションを1つ指定します。たとえば、\fI\-J\-Xms48m\fRと指定すると、スタートアップ・メモリーは48MBに設定されます。java(1)を参照してください。 .RE - -.LP .SH "コマンド" -.LP -.RS 3 -.TP 3 -register \-server\ <server\ class\ name> \ \-classpath\ <classpath\ to\ server> [\ \-applicationName\ <application\ name> \-args\ <args\ to\ server> \-vmargs\ <flags\ to\ be\ passed\ to\ Java\ VM> \ ] -Object Request Broker Daemon (ORBD) に新規持続サーバーを登録します。サーバーが未登録の場合、登録して起動します。このコマンドによって、\f2\-server\fP オプションで識別されるサーバーのメインクラス内でインストールメソッドが呼び出されます。このインストールメソッドは、\f2public static void install(org.omg.CORBA.ORB)\fP になっている必要があります。インストールメソッドは、オプションであり、データベーススキーマの作成などの独自のサーバーインストール動作を開発者が指定できます。 -.TP 3 -unregister \-serverid\ <server\ id\ >\ | \-applicationName\ <application\ name> -サーバー ID またはアプリケーション名を使用して、ORBD のサーバーの登録を解除します。このコマンドによって、\f2\-server\fP オプションで識別されるサーバーのメインクラス内でアンインストールメソッドが呼び出されます。このアンインストールメソッドは、\f2public static void uninstall(org.omg.CORBA.ORB)\fP になっている必要があります。アンインストールメソッドは、オプションであり、インストールメソッドの動作の取り消しなどの独自のサーバーアンインストール動作を開発者が指定できます。 -.TP 3 -getserverid \-applicationName\ <application\ name> -アプリケーションに関連付けられているサーバー ID を返します。 -.TP 3 -list -ORBD に登録されているすべての持続サーバーに関する情報を一覧表示します。 -.TP 3 -listappnames -現在 ORBD に登録されているすべてのサーバーのアプリケーション名を一覧表示します。 -.TP 3 -listactive -ORDB によって起動され、現在実行されているすべての持続サーバーに関する情報を一覧表示します。 -.TP 3 -locate \-serverid\ <server\ id\ >\ | \-applicationName\ <application\ name> [\-endpointType\ <endpointType>\ ] -登録されたサーバーで作成したすべての ORB の特定の型について端点 (ポート) を検出します。サーバーが実行されていない場合、起動されます。端点の型が指定されていない場合、サーバーの ORB ごとに関連付けられている plain 型 または non\-protected 型の端点が返されます。 -.TP 3 -locateperorb \-serverid\ <server\ id\ >\ | \-applicationName\ <application\ name> [\-orbid\ <ORB\ name>\ ] -登録されたサーバーの特定の ORB で登録された端点 (ポート) を検出します。サーバーが実行されていない場合、起動されます。\f2orbid\fP が指定されていない場合は、デフォルト値の「""」が\f2orbid\fPに割り当てられます。ORB が空文字列の \f2orbid\fP で作成されている場合、登録したポートがすべて返されます。 -.TP 3 -orblist \-serverid\ <server\ id\ >\ | \-applicationName\ <application\ name> -サーバー上に定義された ORB の ORBId を一覧表示します。ORBId はサーバーで作成された ORB の文字列名です。サーバーが実行されていない場合、起動されます。 -.TP 3 -shutdown \-serverid\ <server\ id\ >\ | \-applicationName\ <application\ name> -ORBD に登録されたアクティブなサーバーを停止します。このコマンドの実行中に、\f2\-serverid\fP パラメータまたは \f2\-applicationName\fP パラメータで指定されたクラス内に定義された \f2shutdown()\fP メソッドも呼び出されてサーバープロセスを正しく停止します。 -.TP 3 -startup \-serverid\ <server\ id\ >\ | \-applicationName\ <application\ name> -ORBD に登録されたサーバーを起動します。サーバーが実行されていない場合は、このコマンドでサーバーを起動します。サーバーがすでに実行されている場合は、ユーザーにエラーメッセージが返されます。 -.TP 3 -help -サーバーがサーバーツールで使用できるすべてのコマンドを表示します。 -.TP 3 -quit -サーバーツールを終了します。 +.PP +\fIservertool\fRコマンドは、コマンドライン・コマンドを使用して、または使用せずに起動できます。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fIservertool\fRの起動時にコマンドを指定しなかった場合、コマンドライン・ツールにコマンド入力を求める\fIservertool\fRプロンプトが表示されます: +\fIservertool >\fR。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fIservertool\fRの起動時にコマンドを指定した場合、Java IDL Server Toolが起動してコマンドを実行し、終了します。 +.RE +.PP +register \-server \fIserver\-class\-name\fR \-classpath \fIclasspath\-to\-server\fR [ \-applicationName \fIapplication\-name\fR \-args \fIargs\-to\-server\fR \-vmargs \fIflags\-for\-JVM\fR ] +.RS 4 +Object Request Broker Daemon (ORBD)に新規永続サーバーを登録します。サーバーが未登録の場合、登録してアクティブ化します。このコマンドによって、\fI\-server\fRオプションで識別されるサーバーの\fIメイン\fR・クラス内でインストール・メソッドが呼び出されます。このインストール・メソッドは、\fIpublic static void install(org\&.omg\&.CORBA\&.ORB)\fRになっている必要があります。インストール・メソッドはオプションであり、開発者はデータベース・スキーマの作成など独自のサーバー・インストール動作を指定できます。 +.RE +.PP +unregister \-serverid \fIserver\-id\fR | \-applicationName \fIapplication\-name\fR +.RS 4 +サーバーIDまたはアプリケーション名で、サーバーをORBDから登録解除します。このコマンドによって、\fI\-server\fRオプションで識別されるサーバーの\fIメイン\fR・クラス内でアンインストール・メソッドが呼び出されます。 +\fIuninstall\fRメソッドは、\fIpublic static void uninstall(org\&.omg\&.CORBA\&.ORB)\fRになっている必要があります。\fIuninstall\fRメソッドはオプションであり、開発者は\fIinstall\fRメソッドの動作の取消など、独自のサーバー・アンインストール動作を指定できます。 +.RE +.PP +getserverid \-applicationName \fIapplication\-name\fR +.RS 4 +\fIapplication\-name\fR値に対応するサーバーIDを返します。 +.RE +.PP +list +.RS 4 +ORBDに登録されているすべての永続サーバーに関する情報を一覧表示します。 +.RE +.PP +listappnames +.RS 4 +現在ORBDに登録されているすべてのサーバーのアプリケーション名を一覧表示します。 +.RE +.PP +listactive +.RS 4 +ORBDによって起動され、現在実行されているすべての永続サーバーに関する情報を一覧表示します。 +.RE +.PP +locate \-serverid \fIserver\-id\fR | \-applicationName \fIapplication\-name\fR [ \-endpointType \fIendpointType\fR ] +.RS 4 +登録されたサーバーで作成したすべてのORBの特定のタイプについてエンドポイント(ポート)を検出します。サーバーが実行されていない場合、アクティブ化されます。\fIendpointType\fR値が指定されていない場合、サーバーのORBごとに関連付けられているplainタイプまたはnon\-protectedタイプのエンドポイントが返されます。 +.RE +.PP +locateperorb \-serverid \fIserver\-id\fR | \-applicationName \fIapplication\-name\fR [ \-orbid \fIORB\-name\fR ] +.RS 4 +登録されたサーバーの特定のObject Request Broker (ORB)で登録されたエンドポイント(ポート)を検出します。サーバーが実行されていない場合、アクティブ化されます。\fIorbid\fRが指定されていない場合、デフォルト値の\fI""\fRが\fIorbid\fRに割り当てられます。ORBが空文字列の\fIorbid\fRで作成されている場合、登録したポートがすべて返されます。 +.RE +.PP +orblist \-serverid \fIserver\-id\fR | \-applicationName \fIapplication\-name\fR +.RS 4 +サーバー上に定義されたORBの\fIORBId\fRを一覧表示します。\fIORBId\fRはサーバーで作成されたORBの文字列名です。サーバーが実行されていない場合、アクティブ化されます。 +.RE +.PP +shutdown \-serverid \fIserver\-id\fR | \-applicationName application\-name +.RS 4 +ORBDに登録されたアクティブなサーバーを停止します。このコマンドの実行中に、\fI\-serverid\fRパラメータまたは\fI\-applicationName\fRパラメータで指定されたクラス内に定義された\fIshutdown\fRメソッドも呼び出されてサーバー・プロセスを停止します。 +.RE +.PP +startup \-serverid \fIserver\-id\fR | \-applicationName application\-name +.RS 4 +ORBDに登録されたサーバーを起動またはアクティブ化します。サーバーが実行されていない場合、このコマンドがサーバーを起動します。サーバーがすでに実行されている場合は、エラー・メッセージが表示されます。 +.RE +.PP +help +.RS 4 +\fIservertool\fRコマンドを介してサーバーが利用できるすべてのコマンドをリストします。 +.RE +.PP +quit +.RS 4 +\fIservertool\fRコマンドを終了します。 .RE - -.LP .SH "関連項目" -.LP -orbd(1) +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +orbd(1) +.RE +.br +'pl 8.5i +'bp diff --git a/jdk/src/solaris/doc/sun/man/man1/ja/tnameserv.1 b/jdk/src/solaris/doc/sun/man/man1/ja/tnameserv.1 index 229c3af8300..7a924315f3b 100644 --- a/jdk/src/solaris/doc/sun/man/man1/ja/tnameserv.1 +++ b/jdk/src/solaris/doc/sun/man/man1/ja/tnameserv.1 @@ -1,495 +1,425 @@ -." Copyright (c) 1999, 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. -." -.TH tnameserv 1 "07 May 2011" - -.LP -.SH "名前" -Java IDL: 一時ネームサービス \- \f2tnameserv\fP -.LP -.LP -このドキュメントでは、Java IDL 一時ネームサービス \f2tnameserv\fP の使用方法について説明します。Java IDL には、Object Request Broker Daemon (ORBD) も含まれています。ORBD は、ブートストラップサービス、一時ネームサービス、\f3持続\fPネームサービス、およびサーバーマネージャーを含むデーモンプロセスです。Java IDL のすべてのチュートリアルでは ORBD を使用していますが、一時ネームサービスを使用する例では、\f2orbd\fP の代わりに \f2tnameserv\fP を使用できます。\f2orbd\fP ツールの詳細については、orbd の orbd(1)または -.na -\f2ORBD に含まれる Java IDL ネームサービス\fP @ +'\" t +.\" Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved. +.\" Title: tnameserv +.\" Language: English +.\" Date: 2013年11月21日 +.\" SectDesc: Java IDLおよびRMI-IIOPツール +.\" Software: JDK 8 +.\" Arch: 汎用 +.\" +.\" 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. +.\" +.pl 99999 +.TH "tnameserv" "1" "2013年11月21日" "JDK 8" "Java IDLおよびRMI-IIOPツール" +.\" ----------------------------------------------------------------- +.\" * Define some portability stuff +.\" ----------------------------------------------------------------- +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.\" http://bugs.debian.org/507673 +.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" ----------------------------------------------------------------- +.\" * set default formatting +.\" ----------------------------------------------------------------- +.\" disable hyphenation +.nh +.\" disable justification (adjust text to left margin only) +.ad l +.\" ----------------------------------------------------------------- +.\" * MAIN CONTENT STARTS HERE * +.\" ----------------------------------------------------------------- +.SH "NAME" +tnameserv \- インタフェース定義言語(IDL)。 +.SH "概要" +.sp +.if n \{\ +.RS 4 +.\} +.nf +\fItnameserve\fR \fI\-ORBInitialPort\fR [ \fInameserverport\fR ] .fi -http://java.sun.com/javase/6/docs/technotes/guides/idl/jidlNaming.htmlに関するトピックを参照してください。 -.LP -.LP -ここでは、以下の項目について説明します。 -.LP -.RS 3 -.TP 2 -o -Java\ IDL 一時ネームサービス -.TP 2 -o -Java\ IDL 一時ネームサービスの起動 -.TP 2 -o -Java\ IDL 一時ネームサービスの停止 -.TP 2 -o -サンプルクライアント: 名前空間へのオブジェクトの追加 -.TP 2 -o -サンプルクライアント: 名前空間のブラウズ +.if n \{\ .RE - -.LP -.SH "Java IDL 一時ネームサービス" -.LP -.LP -CORBA の COS (Common Object Services) ネームサービスは、ファイルシステムがファイルに対してディレクトリ構造を提供しているのと同じように、オブジェクト参照に対してツリー構造のディレクトリを提供します。Java IDL の一時ネームサービスである \f2tnameserv\fP は、COS ネームサービスの仕様を単純な形で実装したものです。 -.LP -.LP -オブジェクト参照は名前空間に名前で格納され、オブジェクト参照と名前のペアは、それぞれ「ネームバインディング」と呼ばれます。ネームバインディングは「ネーミングコンテキスト」に組み込むことができます。ネーミングコンテキストはそれ自体がネームバインディングであり、ファイルシステムのサブディレクトリと同じ編成機能を持ちます。すべてのバインディングは「初期ネーミングコンテキスト」に格納されます。名前空間において、初期ネーミングコンテキストは唯一の持続的バインディングです。それ以外のネーミングコンテキストは、Java IDL のネーミングサービスプロセスが停止し、再起動されると失われます。 -.LP -.LP -アプレットまたはアプリケーションから COS ネームサービスを使用するためには、その ORB はネームサービスが動作しているホストのポートを知っているか、そのネームサービスの文字列化された初期ネーミングコンテキストにアクセスできなければなりません。ネームサービスは、Java IDL のネームサービスでもその他の COS 準拠のネームサービスでもかまいません。 -.LP -.SH "Java IDL 一時ネームサービスの起動" -.LP -.LP -Java IDL ネームサービスは、ネームサービスを使用するアプリケーションまたはアプレットより前に起動しておく必要があります。Java\ IDL 製品をインストールすると、Java\ IDL ネームサービスを起動するスクリプト (Solaris: \f2tnameserv\fP) または実行可能ファイル (Windows NT: \f2tnameserv.exe\fP) が作成されます。バックグラウンドで動作するように、ネームサービスを起動してください。 -.LP -.LP -特に指定しない場合、Java IDL ネームサービスは、ORB の \f2resolve_initial_references()\fP メソッドと \f2list_initial_references()\fP メソッドの実装に使用するブートストラッププロトコルに対してポート 900 で待機します。 -.LP -.nf -\f3 -.fl - tnameserv \-ORBInitialPort \fP\f4nameserverport\fP\f3& -.fl -\fP -.fi - -.LP -.LP -ネームサーバーポートを指定しない場合、デフォルトでポート 900 が使用されます。Solaris ソフトウェアの実行時は、1024 より小さいポートでプロセスを開始する場合、root ユーザーになる必要があります。このため、1024 または 1024 よりも大きいポート番号を使用することをお勧めします。1050 のように別のポートを指定し、ネームサービスをバックグラウンドで実行するには、UNIX コマンドシェルで次のように入力します。 -.LP -.nf -\f3 -.fl - tnameserv \-ORBInitialPort 1050& -.fl -\fP -.fi - -.LP -.LP -Windows の MS\-DOS システムプロンプトでは、次のように入力します。 -.LP -.nf -\f3 -.fl - start tnameserv \-ORBInitialPort 1050 -.fl -\fP -.fi - -.LP -.LP -ネームサーバーのクライアントには、新しいポート番号を知らせる必要があります。このため、ORB オブジェクトの作成時に \f2org.omg.CORBA.ORBInitialPort\fP プロパティーに新しいポート番号を設定します。 -.LP -.SS -異なるマシン上でのクライアントとサーバーの実行 -.LP -.LP -Java IDL と RMI\-IIOP のほとんどのチュートリアルでは、ネームサービス、サーバー、およびクライアントはすべて開発用のマシン上で実行されます。実際に配備する場合には、クライアントとサーバーを、ネームサービスとは異なるホスト上で実行することが多くなります。 -.LP -.LP -クライアントとサーバーがネームサービスを見つけるには、クライアントとサーバーが、ネームサービスが実行されているポートの番号とホストを認識している必要があります。そのためには、クライアントとサーバーのファイル内の \f2org.omg.CORBA.ORBInitialPort\fP プロパティーと \f2org.omg.CORBA.ORBInitialHost\fP プロパティーをネームサービスが実行されているポートの番号とマシンの名前に設定します。この例は、 -.na -\f2「RMI\-IIOP を使った Hello World の例」に示されています。\fP @ -.fi -http://java.sun.com/javase/6/docs/technotes/guides/rmi\-iiop/rmiiiopexample.htmlコマンド行オプション \f2\-ORBInitialPort\fP \f2nameserverport#\fP と \f2\-ORBInitialHost\fP \f2nameserverhostname\fP を使用して、クライアントとサーバーに対してネームサービスを探す場所を指定することもできます。 -.na -\f2「Java IDL: 2 台のマシン上で実行する Hello World プログラム」\fP @ -.fi -http://java.sun.com/javase/6/docs/technotes/guides/idl/tutorial/jidl2machines.html には、コマンド行オプションを使用して指定する方法が示されています。 -.LP -.LP -たとえば、一時ネームサービス \f2tnameserv\fP が、ホスト \f2nameserverhost\fP のポート 1050 上で実行されているとします。さらに、クライアントがホスト \f2clienthost\fP 上で実行され、サーバーはホスト \f2serverhost\fP 上で実行されているとします。 -.LP -.RS 3 -.TP 2 -o -次のように、ホスト \f2nameserverhost\fP 上で \f2tnameserv\fP を起動します。 -.nf -\f3 -.fl - tnameserv \-ORBInitialPort 1050 -.fl - -.fl -\fP -.fi -.TP 2 -o -\f2serverhost\fP 上でサーバーを起動します。 -.nf -\f3 -.fl - java Server \-ORBInitialPort 1050 \-ORBInitialHost nameserverhost -.fl -\fP -.fi -.TP 2 -o -\f2clienthost\fP 上でクライアントを起動します。 -.nf -\f3 -.fl - java Client \-ORBInitialPort 1050 \-ORBInitialHost nameserverhost -.fl -\fP -.fi +.\} +.PP +\-ORBInitialPort \fInameserverport\fR +.RS 4 +ネーミング・サービスがORBの\fIresolve_initial_references\fRメソッドと\fIlist_initial_references\fRメソッドの実装に使用するブートストラップ・プロトコルをリスニングする初期ポートです。 .RE - -.LP -.SS -\-J オプション -.LP -このコマンド行オプションは、\f2tnameserve\fP とともに使用できます。 -.RS 3 -.TP 3 -\-Joption -Java 仮想マシンに \f2option\fP を渡します。\f2option\fP には、java(1)のリファレンスページに記載されているオプションを 1 つ指定します。たとえば、\f3\-J\-Xms48m\fP と指定すると、スタートアップメモリーは 48M バイトに設定されます。\f3\-J\fP を使って背後の実行環境にオプションを渡すことはよく行われています。 +.SH "説明" +.PP +Java IDLには、Object Request Broker Daemon (ORBD)が含まれます。ORBDは、ブートストラップ・サービス、一時ネーミング・サービス、永続ネーミング・サービスおよびサーバー・マネージャを含むデーモン・プロセスです。Java IDLのすべてのチュートリアルではORBDを使用していますが、一時ネーミング・サービスを使用する例では、\fIorbd\fRのかわりに\fItnameserv\fRを使用できます。 +.PP +http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/idl/jidlNaming\&.htmlにある +orbd(1)または「Naming Service」を参照してください。 +.PP +CORBAのCOS (Common Object Services)ネーミング・サービスは、ファイル・システムがファイルに対してディレクトリ構造を提供しているのと同じように、オブジェクト参照に対してツリー構造のディレクトリを提供します。Java IDLの一時ネーム・サービスである\fItnameserv\fRは、COSネーム・サービスの仕様を単純な形で実装したものです。 +.PP +オブジェクト参照はネームスペースに名前で格納され、オブジェクト参照と名前のペアは、それぞれネーム・バインディングと呼ばれます。ネーム・バインディングはネーミング・コンテキストに組み込むことができます。ネーミング・コンテキストはネーム・バインディングであり、ファイル・システムのサブディレクトリと同じ編成機能を持ちます。すべてのバインディングは初期ネーミング・コンテキストの下に格納されます。初期ネーミング・コンテキストは、ネームスペースの唯一の永続バインディングです。Java IDLネーミング・サービス・プロセスを停止して再起動すると、残りのネームスペースは失われます。 +.PP +アプレットまたはアプリケーションからCOSネーミング・サービスを使用するためには、そのORBがネーミング・サービスが動作しているホストのポートを知っているか、そのネーミング・サービスの初期ネーミング・コンテキスト文字列にアクセスできる必要があります。ネーム・サービスは、Java IDLのネーム・サービスでもその他のCOS準拠のネーム・サービスでもかまいません。 +.SS "ネーミング・サービスの起動" +.PP +Java IDLネーム・サービスは、ネーム・サービスを使用するアプリケーションまたはアプレットより前に起動しておく必要があります。Java IDL製品をインストールすると、Java IDLネーミング・サービスを起動するスクリプト(Oracle Solaris: +\fItnameserv\fR)または実行可能ファイル(Windows: +\fItnameserv\&.exe\fR)が作成されます。バックグラウンドで動作するように、ネーム・サービスを起動してください。 +.PP +特に指定しない場合、Java IDLネーミング・サービスは、ORBの\fIresolve_initial_references\fRメソッドと\fIlist_initial_references methods\fRメソッドの実装に使用するブートストラップ・プロトコルに対してポート900でリスニングします。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +tnameserv \-ORBInitialPort nameserverport& +.fi +.if n \{\ .RE - -.LP -.SH "Java IDL 一時ネームサービスの停止" -.LP -.LP -Java IDL ネームサービスを停止するには、Unix の場合は、\f2kill\fP などのオペレーティングシステムのコマンドを使い、Windows の場合は、\f2Ctrl\-C\fP を使います。ネームサービスを明示的に停止するまでは、呼び出し待機状態が続きます。なお、サービスを終了させると、Java IDL ネームサービスに登録されている名前は失われます。 -.LP -.SH "サンプルクライアント: 名前空間へのオブジェクトの追加" -.LP -.LP -次に示すサンプルプログラムは、名前を名前空間に追加する方法を示すものです。このサンプルプログラムは、このままの状態で完全に動作する一時ネームサービスクライアントで、次のような単純なツリーを作成するものです。 -.LP +.\} +.PP +ネーム・サーバー・ポートを指定しない場合、デフォルトでポート900が使用されます。Oracle Solarisソフトウェアの実行時、1024より小さいポートでプロセスを開始する場合は、rootユーザーになる必要があります。このため、1024以上のポート番号を使用することをお薦めします。1050のように別のポートを指定し、ネーム・サービスをバックグラウンドで実行するには、UNIXコマンド・シェルで次のように入力します。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -\fP\f3 -.fl - \fP\f4初期\fP\f3 -.fl - \fP\f4ネーミングコンテキスト\fP\f3 -.fl - / \\ -.fl - / \\ -.fl - plans \fP\f4Personal\fP\f3 -.fl - / \\ -.fl - / \\ -.fl - calendar schedule\fP -.fl +tnameserv \-ORBInitialPort 1050& .fi - -.LP -.LP -この例で、\f3plans\fP はオブジェクト参照、\f3Personal\fP は \f3calendar\fP と \f3schedule\fP の 2 つのオブジェクト参照を含むネーミングコンテキストです。 -.LP +.if n \{\ +.RE +.\} +.PP +WindowsのMS\-DOSシステム・プロンプトでは、次のように入力します。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -import java.util.Properties; -.fl -import org.omg.CORBA.*; -.fl -import org.omg.CosNaming.*; -.fl - -.fl -public class NameClient -.fl -{ -.fl - public static void main(String args[]) -.fl - { -.fl - try { -.fl -\fP +start tnameserv \-ORBInitialPort 1050 .fi - -.LP -前述の「Java IDL 一時ネームサービスの起動」で、ネームサーバーはポート 1050 を使用して起動しました。次のコードで、このポート番号をクライアントシステムに知らせます。 +.if n \{\ +.RE +.\} +.PP +ネーム・サーバーのクライアントには、新しいポート番号を知らせる必要があります。これを行うには、ORBオブジェクトの作成時に\fIorg\&.omg\&.CORBA\&.ORBInitialPort\fRプロパティに新しいポート番号を設定します。 +.SS "異なるホスト上でのサーバーとクライアントの実行" +.PP +Java IDLとRMI\-IIOPのほとんどのチュートリアルでは、ネーミング・サービス、サーバーおよびクライアントはすべて開発用のマシン上で実行されます。実際にデプロイメントする場合には、クライアントとサーバーを、ネーミング・サービスとは異なるホスト・マシン上で実行することが多くなります。 +.PP +クライアントとサーバーがネーム・サービスを見つけるには、クライアントとサーバーが、ネーム・サービスが実行されているポートの番号とホストを認識している必要があります。そのためには、クライアントとサーバーのファイル内の\fIorg\&.omg\&.CORBA\&.ORBInitialPort\fRプロパティと\fIorg\&.omg\&.CORBA\&.ORBInitialHost\fRプロパティをネーム・サービスが実行されているポートの番号とマシンの名前に設定します。この例は、「Getting Started Using RMI\-IIOP」 +(http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/rmi\-iiop/rmiiiopexample\&.html)に示されています +.PP +コマンドライン・オプション\fI\-ORBInitialPort nameserverport#\fRと\fI\-ORBInitialHost nameserverhostname\fRを使用して、クライアントとサーバーに対してネーミング・サービスを探す場所を指定することもできます。コマンドライン・オプションを使用してこれを行う方法の1つの例は、http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/idl/tutorial/jidl2machines\&.htmlの「Java IDL: The Hello World Example on Two Machines」 +を参照してください +.PP +たとえば、一時ネーム・サービス\fItnameserv\fRが、ホスト\fInameserverhost\fRのポート1050上で実行されているとします。さらに、クライアントがホスト\fIclienthost\fR上で実行され、サーバーはホスト\fIserverhost\fR上で実行されているとします。 +.PP +ホスト\fInameserverhost\fR上で\fItnameserv\fRを起動します。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl - Properties props = new Properties(); -.fl - props.put("org.omg.CORBA.ORBInitialPort", "1050"); -.fl - ORB orb = ORB.init(args, props); -.fl - -.fl -\fP +tnameserv \-ORBInitialPort 1050 .fi - -.LP -次のコードでは、初期ネーミングコンテキストを取得し、それを \f3ctx\fP に代入します。2 行目では、\f3ctx\fP をダミーのオブジェクト参照 \f3objref\fP にコピーします。この objref には、あとでさまざまな名前を割り当てて名前空間に追加します。 +.if n \{\ +.RE +.\} +.PP +\fIserverhost\fR上でサーバーを起動します。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl - NamingContext ctx = -.fl -NamingContextHelper.narrow(orb.resolve_initial_references("NameService")); -.fl - NamingContext objref = ctx; -.fl - -.fl -\fP +java Server \-ORBInitialPort 1050 \-ORBInitialHost nameserverhost .fi +.if n \{\ +.RE +.\} +.PP -.LP -次のコードでは、text 型の名前 plans を作成し、それをダミーのオブジェクト参照にバインドします。その後、rebind を使用して初期ネーミングコンテキストの下に \f2plans を追加しています\fP。 \f2rebind\fP メソッドを使用すれば、bind を使用した場合に発生する例外を発生させずに、 \f2このプログラムを何度も繰り返し実行できます\fP。 +\fIclienthost\fR上でクライアントを起動します。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl - NameComponent nc1 = new NameComponent("plans", "text"); -.fl - NameComponent[] name1 = {nc1}; -.fl - ctx.rebind(name1, objref); -.fl - System.out.println("plans rebind sucessful!"); -.fl - -.fl -\fP +java Client \-ORBInitialPort 1050 \-ORBInitialHost nameserverhost .fi - -.LP -次のコードでは、directory 型の Personal というネーミングコンテキストを作成します。その結果得られるオブジェクト参照 \f3ctx2\fP をこの名前にバインドし、初期ネーミングコンテキストに追加します。 +.if n \{\ +.RE +.\} +.SS "ネーミング・サービスの停止" +.PP +Java IDLネーミング・サービスを停止するには、Unixの場合は、\fIkill\fRなどのオペレーティング・システムのコマンドを使用し、Windowsの場合は、\fI[Ctrl]+[C]\fRキーを使用します。ネーミング・サービスを明示的に停止するまでは、呼出し待機状態が続きます。サービスを終了させると、Java IDLネーム・サービスに登録されている名前は失われます。 +.SH "オプション" +.PP +\-J\fIoption\fR +.RS 4 +Java仮想マシンに\fIoption\fRを渡します。\fIoption\fRには、Javaアプリケーション起動ツールのリファレンス・ページに記載されているオプションを1つ指定します。たとえば、\fI\-J\-Xms48m\fRと指定すると、スタートアップ・メモリーは48MBに設定されます。java(1)を参照してください。 +.RE +.SH "例" +.SS "ネームスペースへのオブジェクトの追加" +.PP +次の例では、ネームスペースに名前を追加する方法を示します。このサンプル・プログラムは、このままの状態で完全に動作する一時ネーム・サービス・クライアントで、次のような単純なツリーを作成するものです。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl - NameComponent nc2 = new NameComponent("Personal", "directory"); -.fl - NameComponent[] name2 = {nc2}; -.fl - NamingContext ctx2 = ctx.bind_new_context(name2); -.fl - System.out.println("new naming context added.."); -.fl - -.fl -\fP +Initial Naming Context + plans + Personal + calendar + schedule .fi - -.LP -残りのコードでは、ダミーのオブジェクト参照を schedule と calendar という名前でネーミングコンテキスト "Personal" (\f3ctx2\fP) にバインドします。 +.if n \{\ +.RE +.\} +.PP +この例で、\fIplans\fRはオブジェクト参照、\fIPersonal\fRは\fIcalendar\fRと\fIschedule\fRの2つのオブジェクト参照を含むネーミング・コンテキストです。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl - NameComponent nc3 = new NameComponent("schedule", "text"); -.fl - NameComponent[] name3 = {nc3}; -.fl - ctx2.rebind(name3, objref); -.fl - System.out.println("schedule rebind sucessful!"); -.fl - -.fl - NameComponent nc4 = new NameComponent("calender", "text"); -.fl - NameComponent[] name4 = {nc4}; -.fl - ctx2.rebind(name4, objref); -.fl - System.out.println("calender rebind sucessful!"); -.fl - -.fl - -.fl - } catch (Exception e) { -.fl - e.printStackTrace(System.err); -.fl - } -.fl - } -.fl -} -.fl -\fP -.fi - -.LP -.SH "サンプルクライアント: 名前空間のブラウズ" -.LP -.LP -次のサンプルプログラムでは、名前空間をブラウズする方法を示します。 -.LP -.nf -\f3 -.fl -import java.util.Properties; -.fl -import org.omg.CORBA.*; -.fl -import org.omg.CosNaming.*; -.fl - -.fl -public class NameClientList -.fl -{ -.fl - public static void main(String args[]) -.fl - { -.fl - try { -.fl -\fP -.fi - -.LP -前述の「Java IDL 一時ネームサービスの起動」で、ネームサーバーはポート 1050 を使用して起動しました。次のコードで、このポート番号をクライアントシステムに知らせます。 -.nf -\f3 -.fl - -.fl - Properties props = new Properties(); -.fl - props.put("org.omg.CORBA.ORBInitialPort", "1050"); -.fl - ORB orb = ORB.init(args, props); -.fl - -.fl - -.fl -\fP -.fi - -.LP -次のコードでは、初期ネーミングコンテキストを取得しています。 -.nf -\f3 -.fl - NamingContext nc = -.fl -NamingContextHelper.narrow(orb.resolve_initial_references("NameService")); -.fl - -.fl -\fP -.fi - -.LP -\f2list\fP メソッドは、ネーミングコンテキストに追加されているバインディングをリストします。この場合、最大 1000 個までのバインディングが初期ネーミングコンテキストから BindingListHolder に返されます。残りのバインディングは、BindingIteratorHolder に返されます。 -.nf -\f3 -.fl - BindingListHolder bl = new BindingListHolder(); -.fl - BindingIteratorHolder blIt= new BindingIteratorHolder(); -.fl - nc.list(1000, bl, blIt); -.fl - -.fl -\fP -.fi - -.LP -次のコードでは、返された BindingListHolder からバインディングの配列を取得します。バインディングがない場合は、プログラムは終了します。 -.nf -\f3 -.fl - Binding bindings[] = bl.value; -.fl - if (bindings.length == 0) return; -.fl - -.fl -\fP -.fi - -.LP -残りのコードでは、バインディングに対してループ処理を行い、名前を出力します。 -.nf -\f3 -.fl - for (int i=0; i < bindings.length; i++) { -.fl - -.fl - // get the object reference for each binding -.fl - org.omg.CORBA.Object obj = nc.resolve(bindings[i].binding_name); -.fl - String objStr = orb.object_to_string(obj); -.fl - int lastIx = bindings[i].binding_name.length\-1; -.fl - -.fl - // check to see if this is a naming context -.fl - if (bindings[i].binding_type == BindingType.ncontext) { -.fl - System.out.println( "Context: " + -.fl -bindings[i].binding_name[lastIx].id); -.fl - } else { -.fl - System.out.println("Object: " + -.fl -bindings[i].binding_name[lastIx].id); -.fl - } -.fl - } -.fl - -.fl - } catch (Exception e) { -.fl - e.printStackTrace(System.err); -.fl - } -.fl - } -.fl -} -.fl -\fP -.fi - -.LP +import java\&.util\&.Properties; +import org\&.omg\&.CORBA\&.*; +import org\&.omg\&.CosNaming\&.*; +public class NameClient { + + public static void main(String args[]) { + + try { +.fi +.if n \{\ +.RE +.\} +.PP +ネーミング・サービスの起動で、\fInameserver\fRはポート1050で起動されました。次のコードで、このポート番号をクライアント・システムに知らせます。 +.sp +.if n \{\ +.RS 4 +.\} +.nf + Properties props = new Properties(); + props\&.put("org\&.omg\&.CORBA\&.ORBInitialPort", "1050"); + ORB orb = ORB\&.init(args, props); +.fi +.if n \{\ +.RE +.\} +.PP +次のコードでは、初期ネーミング・コンテキストを取得し、それを\fIctx\fRに代入します。2行目では、\fIctx\fRをダミーのオブジェクト参照\fIobjref\fRにコピーします。このobjrefには、あとで様々な名前を割り当ててネームスペースに追加します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf + NamingContext ctx = + NamingContextHelper\&.narrow( + orb\&.resolve_initial_references("NameService")); + NamingContext objref = ctx; +.fi +.if n \{\ +.RE +.\} +.PP +次のコードでは、\fItext\fRタイプの名前\fIplans\fRを作成し、それをダミーのオブジェクト参照にバインドします。その後、\fIrebind\fRメソッドを使用して初期ネーミング・コンテキストの下に\fIplans\fRを追加しています。\fIrebind\fRメソッドを使用すれば、\fIbind\fRメソッドを使用した場合に発生する例外を発生させずに、このプログラムを何度も繰返し実行できます。 +.sp +.if n \{\ +.RS 4 +.\} +.nf + NameComponent nc1 = new NameComponent("plans", "text"); + NameComponent[] name1 = {nc1}; + ctx\&.rebind(name1, objref); + System\&.out\&.println("plans rebind successful!"); +.fi +.if n \{\ +.RE +.\} +.PP +次のコードでは、\fIdirectory\fRタイプの\fIPersonal\fRというネーミング・コンテキストを作成します。その結果得られるオブジェクト参照\fIctx2\fRを\fIname\fRにバインドし、初期ネーミング・コンテキストに追加します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf + NameComponent nc2 = new NameComponent("Personal", "directory"); + NameComponent[] name2 = {nc2}; + NamingContext ctx2 = ctx\&.bind_new_context(name2); + System\&.out\&.println("new naming context added\&.\&."); +.fi +.if n \{\ +.RE +.\} +.PP +残りのコードでは、ダミーのオブジェクト参照を\fIschedule\fRと\fIcalendar\fRという名前でネーミング・コンテキスト\fIPersonal\fR(\fIctx2\fR)にバインドします。 +.sp +.if n \{\ +.RS 4 +.\} +.nf + NameComponent nc3 = new NameComponent("schedule", "text"); + NameComponent[] name3 = {nc3}; + ctx2\&.rebind(name3, objref); + System\&.out\&.println("schedule rebind successful!"); + + NameComponent nc4 = new NameComponent("calender", "text"); + NameComponent[] name4 = {nc4}; + ctx2\&.rebind(name4, objref); + System\&.out\&.println("calender rebind successful!"); + } catch (Exception e) { + e\&.printStackTrace(System\&.err); + } + } +} +.fi +.if n \{\ +.RE +.\} +.SS "ネームスペースの参照" +.PP +次のサンプル・プログラムでは、ネームスペースをブラウズする方法を示します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +import java\&.util\&.Properties; +import org\&.omg\&.CORBA\&.*; +import org\&.omg\&.CosNaming\&.*; + +public class NameClientList { + + public static void main(String args[]) { + + try { +.fi +.if n \{\ +.RE +.\} +.PP +ネーミング・サービスの起動で、\fInameserver\fRはポート1050で起動されました。次のコードで、このポート番号をクライアント・システムに知らせます。 +.sp +.if n \{\ +.RS 4 +.\} +.nf + Properties props = new Properties(); + props\&.put("org\&.omg\&.CORBA\&.ORBInitialPort", "1050"); + ORB orb = ORB\&.init(args, props); +.fi +.if n \{\ +.RE +.\} +.PP +次のコードでは、初期ネーミング・コンテキストを取得しています。 +.sp +.if n \{\ +.RS 4 +.\} +.nf + NamingContext nc = + NamingContextHelper\&.narrow( + orb\&.resolve_initial_references("NameService")); +.fi +.if n \{\ +.RE +.\} +.PP +\fIlist\fRメソッドは、ネーミング・コンテキストのバインディングをリストします。この場合、最大1000個までのバインディングが初期ネーミング・コンテキストから\fIBindingListHolder\fRに返されます。残りのバインディングは、\fIBindingIteratorHolder\fRに返されます。 +.sp +.if n \{\ +.RS 4 +.\} +.nf + BindingListHolder bl = new BindingListHolder(); + BindingIteratorHolder blIt= new BindingIteratorHolder(); + nc\&.list(1000, bl, blIt); +.fi +.if n \{\ +.RE +.\} +.PP +次のコードでは、返された\fIBindingListHolder\fRからバインディングの配列を取得します。バインディングがない場合は、プログラムが終了します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf + Binding bindings[] = bl\&.value; + if (bindings\&.length == 0) return; +.fi +.if n \{\ +.RE +.\} +.PP +残りのコードでは、バインディングに対してループ処理を行い、名前を出力します。 +.sp +.if n \{\ +.RS 4 +.\} +.nf + for (int i=0; i < bindings\&.length; i++) { + + // get the object reference for each binding + org\&.omg\&.CORBA\&.Object obj = nc\&.resolve(bindings[i]\&.binding_name); + String objStr = orb\&.object_to_string(obj); + int lastIx = bindings[i]\&.binding_name\&.length\-1; + + // check to see if this is a naming context + if (bindings[i]\&.binding_type == BindingType\&.ncontext) { + System\&.out\&.println("Context: " + + bindings[i]\&.binding_name[lastIx]\&.id); + } else { + System\&.out\&.println("Object: " + + bindings[i]\&.binding_name[lastIx]\&.id); + } + } + } catch (Exception e) { + e\&.printStackTrace(System\&.err) + } + } +} +.fi +.if n \{\ +.RE +.\} +.SH "関連項目" +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +orbd(1) +.RE +.br +'pl 8.5i +'bp diff --git a/jdk/src/solaris/doc/sun/man/man1/ja/unpack200.1 b/jdk/src/solaris/doc/sun/man/man1/ja/unpack200.1 index 96a85d8105e..0b940d494d2 100644 --- a/jdk/src/solaris/doc/sun/man/man1/ja/unpack200.1 +++ b/jdk/src/solaris/doc/sun/man/man1/ja/unpack200.1 @@ -1,178 +1,201 @@ -." Copyright (c) 2004, 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. -." -.TH unpack200 1 "07 May 2011" - -.LP -.SH "名前" -unpack200 \- JAR アンパックツール -.LP -.RS 3 -.TP 2 -o -形式 -.TP 2 -o -説明 -.TP 2 -o -オプション -.TP 2 -o -終了ステータス -.TP 2 -o -関連項目 -.TP 2 -o -注意事項 +'\" t +.\" Copyright (c) 2004, 2013, Oracle and/or its affiliates. All rights reserved. +.\" Title: unpack200 +.\" Language: English +.\" Date: 2013年11月21日 +.\" SectDesc: Javaデプロイメント・ツール +.\" Software: JDK 8 +.\" Arch: 汎用 +.\" +.\" 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. +.\" +.pl 99999 +.TH "unpack200" "1" "2013年11月21日" "JDK 8" "Javaデプロイメント・ツール" +.\" ----------------------------------------------------------------- +.\" * Define some portability stuff +.\" ----------------------------------------------------------------- +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.\" http://bugs.debian.org/507673 +.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" ----------------------------------------------------------------- +.\" * set default formatting +.\" ----------------------------------------------------------------- +.\" disable hyphenation +.nh +.\" disable justification (adjust text to left margin only) +.ad l +.\" ----------------------------------------------------------------- +.\" * MAIN CONTENT STARTS HERE * +.\" ----------------------------------------------------------------- +.SH "NAME" +unpack200 \- pack200(1)で作成されたパック・ファイルを、WebデプロイメントのためにJARファイルに変換します。 +.SH "概要" +.sp +.if n \{\ +.RS 4 +.\} +.nf +\fIunpack200\fR [ \fIoptions\fR ] input\-file \fIJAR\-file\fR +.fi +.if n \{\ .RE - -.LP -.SH "形式" -.LP -.LP -\f4unpack200\fP\f2 [ \fP\f2options\fP ] \f2input\-file\fP \f2JAR\-file\fP -.LP -.LP -オプションの指定順序に決まりはありません。コマンド行に指定された最後のオプションが、それ以前に指定されたすべてのオプションより優先されます。 -.LP -.RS 3 -.TP 3 -input\-file -入力ファイルの名前。入力ファイルは通常、pack200 gzip ファイルか pack200 ファイルです。このほかに、0 を設定すれば pack200(1) から作成された JAR ファイルも入力ファイルとして使用できます。この場合、入力ファイルの内容が Pack200 マーカーとともに出力 JAR ファイルにコピーされます。 -.TP 3 -JAR\-file -出力 JAR ファイル名。 +.\} +.PP +\fIoptions\fR +.RS 4 +コマンドライン・オプション。オプションを参照してください。 .RE - -.LP -.SH " 説明" -.LP -.LP -\f2unpack200\fP は、pack200(1) で作成されたパックファイルを JAR ファイルに変換する \f2ネイティブ実装\fPです。一般的な使用方法: -.LP -.LP -\f2% unpack200 myarchive.pack.gz myarchive.jar\fP -.LP -.LP -この例では、 \f2デフォルトの unpack200 設定で、myarchive.pack.gz\fP から \f2myarchive.jar\fP が \f2作成されます\fP 。 -.LP +.PP +\fIinput\-file\fR +.RS 4 +入力ファイルの名前。pack200 gzipファイルかpack200ファイルを指定できます。入力ファイルには、\fIpack200\fR(1)で作成されたJARファイルを指定することもできます(手間は\fI0\fRです)。この場合、入力ファイルの内容はPack2000マーカーで出力JARファイルにコピーされます。 +.RE +.PP +\fIJAR\-file\fR +.RS 4 +出力JARファイル名。 +.RE +.SH "説明" +.PP +\fIunpack200\fRコマンドは、\fIpack200\fR\fI(1)\fRで作成されたパック・ファイルをJARファイルに変換するネイティブ実装です。一般的な使用方法は次のとおりです。次の例では、デフォルトの\fIunpack200\fRコマンド設定で、\fImyarchive\&.jar\fRファイルが\fImyarchive\&.pack\&.gz\fRから作成されます。 +.sp +.if n \{\ +.RS 4 +.\} +.nf +unpack200 myarchive\&.pack\&.gz myarchive\&.jar +.fi +.if n \{\ +.RE +.\} .SH "オプション" -.LP -.LP -\f4\-Hvalue \-\-deflate\-hint=\fP\f2value\fP -.LP -.LP -JAR ファイル内のすべてのエントリに \f2true\fP 、 \f2false\fP、 \f2keep\fP としてデフレーションを設定します。デフォルトモードは \f2keep\fP です。 \f2true\fP または \f2false 場合、\fPデフォルトの動作をオーバーライドして、出力 JAR ファイル内のすべてのエントリのデフレーションモードを設定します。 -.LP -.LP -\f4\-r \-\-remove\-pack\-file\fP -.LP -.LP -入力パックファイルを削除します。 -.LP -.LP -\f4\-v \-\-verbose\fP -.LP -.LP -最小限のメッセージを出力します。このオプションを複数指定すると、より長いメッセージが出力されます。 -.LP -.LP -\f4\-q \-\-quiet\fP -.LP -.LP -メッセージを表示せずに動作します。 -.LP -.LP -\f4\-lfilename \-\-log\-file=\fP\f2filename\fP -.LP -.LP -出力メッセージのログファイルを指定します。 -.LP -.LP -\f4\-? \-h \-\-help\fP -.LP -.LP -このコマンドに関するヘルプ情報を出力します。 -.LP -.LP -\f4\-V \-\-version\fP -.LP -.LP -このコマンドに関するバージョン情報を出力します。 -.LP -.LP -\f4\-J\fP\f2option\fP -.LP -.LP -unpack200 によって呼び出される Java 起動ツールに \f2オプション\fP を \f2渡します\fP。 -.LP -.SH "終了ステータス" -.LP -.LP -次の終了値が返されます。 -.LP -.LP -\f2\ 0\fP " 成功" -.LP -.LP -\f2>0\fP " エラー" -.LP -.SH "関連項目" -.LP -.RS 3 -.TP 2 -o -pack200(1) -.TP 2 -o -.na -\f2Java SE のドキュメント\fP @ -.fi -http://java.sun.com/javase/6/docs/index.html -.TP 2 -o -.na -\f2「Java 配備ガイド \- Pack200」\fP @ -.fi -http://java.sun.com/javase/6/docs/technotes/guides/deployment/deployment\-guide/pack200.html -.TP 2 -o -jar(1) \- Java Archive ツール」 -.TP 2 -o -jarsigner(1) \- JAR 署名および検証ツール」 -.TP 2 -o -\f2attributes(5)\fP のマニュアルページ +.PP +\-Hvalue \-\-deflate\-hint=\fIvalue\fR +.RS 4 +JARファイル内のすべてのエントリに\fItrue\fR、\fIfalse\fRまたは\fIkeep\fRのデフレーションを設定します。デフォルト・モードは\fIkeep\fRです。値が\fItrue\fRまたは\fIfalse\fR場合、\fI\-\-deflate=hint\fRオプションはデフォルトの動作をオーバーライドして、出力JARファイル内のすべてのエントリのデフレーション・モードが設定されます。 .RE - -.LP -.SH "注意事項" -.LP -.LP -このコマンドと \f2unpack(1) を\fP混同しないでください。これらは別製品です。 -.LP -.LP -SDK に付属する Java SE API 仕様との相違が見つかった場合には、仕様を優先してください。 -.LP - +.PP +\-r \-\-remove\-pack\-file +.RS 4 +入力パック・ファイルを削除します。 +.RE +.PP +\-v \-\-verbose +.RS 4 +最小限のメッセージが表示されます。このオプションの複数の仕様には、より詳細なメッセージが表示されます。 +.RE +.PP +\-q \-\-quiet +.RS 4 +メッセージを表示せずに動作するように指定します。 +.RE +.PP +\-lfilename \-\-log\-file=\fIfilename\fR +.RS 4 +出力メッセージが記録されるログ・ファイルを指定します。 +.RE +.PP +\-? \-h \-\-help +.RS 4 +\fIunpack200\fRコマンドに関するヘルプ情報を出力します。 +.RE +.PP +\-V \-\-version +.RS 4 +\fIunpack200\fRコマンドに関するバージョン情報を出力します。 +.RE +.PP +\-J\fIoption\fR +.RS 4 +Java仮想マシンにoptionを渡します。\fIoption\fRには、Javaアプリケーション起動ツールのリファレンス・ページに記載されているオプションを1つ指定します。たとえば、\fI\-J\-Xms48m\fRと指定すると、スタートアップ・メモリーは48MBに設定されます。java(1)を参照してください。 +.RE +.SH "注意" +.PP +このコマンドと\fIunpack\fRコマンドを混同しないでください。これらは別製品です。 +.PP +JDKに付属するJava SE API仕様との相違が見つかった場合には、仕様を優先してください。 +.SH "終了ステータス" +.PP +次の終了値が返されます: 正常終了の場合は0、エラーが発生した場合は0より大きい値。 +.SH "関連項目" +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +pack200(1) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +jar(1) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +jarsigner(1) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +「Pack200 and Compression」 +(http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/deployment/deployment\-guide/pack200\&.html) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +「Java SE Technical Documentation」 +(http://docs\&.oracle\&.com/javase/) +.RE +.br +'pl 8.5i +'bp diff --git a/jdk/src/solaris/doc/sun/man/man1/ja/wsgen.1 b/jdk/src/solaris/doc/sun/man/man1/ja/wsgen.1 index c85556ee16f..0f50de81de0 100644 --- a/jdk/src/solaris/doc/sun/man/man1/ja/wsgen.1 +++ b/jdk/src/solaris/doc/sun/man/man1/ja/wsgen.1 @@ -1,656 +1,228 @@ -." Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. -." DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -." -." This code is free software; you can redistribute it and/or modify it -." under the terms of the GNU General Public License version 2 only, as -." published by the Free Software Foundation. -." -." 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. -." -.TH wsgen 1 "07 May 2011" -.SH "名前" -wsgen \- XML Web Services (JAX\-WS) 2.0 のための Java(TM) API -.LP -\f3仕様バージョン:\fP 2.1 -.br -\f3実装バージョン:\fP 2.1.1 -.LP -\f2wsgen\fP ツールは、JAX\-WS Web サービスで使用される JAX\-WS ポータブルアーティファクトを生成します。このツールは、Web サービスのエンドポイント実装クラス (SEI) を読み取り、Web サービスの配備と呼び出しに必要なすべてのアーティファクトを生成します。 +'\" t +.\" Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved. +.\" Title: wsgen +.\" Language: English +.\" Date: 2013年11月21日 +.\" SectDesc: Java Webサービス・ツール +.\" Software: JDK 8 +.\" Arch: 汎用 +.\" +.\" 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. +.\" +.pl 99999 +.TH "wsgen" "1" "2013年11月21日" "JDK 8" "Java Webサービス・ツール" +.\" ----------------------------------------------------------------- +.\" * Define some portability stuff +.\" ----------------------------------------------------------------- +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.\" http://bugs.debian.org/507673 +.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" ----------------------------------------------------------------- +.\" * set default formatting +.\" ----------------------------------------------------------------- +.\" disable hyphenation +.nh +.\" disable justification (adjust text to left margin only) +.ad l +.\" ----------------------------------------------------------------- +.\" * MAIN CONTENT STARTS HERE * +.\" ----------------------------------------------------------------- +.SH "NAME" +wsgen \- Webサービスのエンドポイント実装(SEI)クラスを読取り、Webサービスのデプロイメントと呼出しに必要なすべてのアーティファクトを生成します。 .SH "概要" -.LP -\f2wsgen\fP ツールは、JAX\-WS Web サービスで使用される JAX\-WS ポータブルアーティファクトを生成します。このツールは、Web サービスのエンドポイントクラスを読み取り、Web サービスの配備と呼び出しに必要なすべてのアーティファクトを生成します。JAXWS 2.1.1 RI には wsgen Ant タスクも用意されています。詳細は、 -.na -\f2Wsgen Ant タスク\fP @ +.sp +.if n \{\ +.RS 4 +.\} +.nf +\fIwsgen\fR [ \fIoptions\fR ] \fISEI\fR .fi -https://jax\-ws.dev.java.net/nonav/2.1.1/docs/wsgenant.htmlを参照してください。 -.LP -.SH "wsgen の起動" -.RS 3 -.TP 2 -o -\f3Solaris/Linux\fP -.RS 3 -.TP 2 -* -\f2export JAXWS_HOME=/pathto/jaxws\-ri\fP -.TP 2 -* -\f2$JAXWS_HOME/bin/wsgen.sh \-help\fP +.if n \{\ .RE -.TP 2 -o -\f3Windows\fP -.RS 3 -.TP 2 -* -\f2set JAXWS_HOME=c:\\pathto\\jaxws\-ri\fP -.TP 2 -* -\f2%JAXWS_HOME%\\bin\\wsgen.bat \-help\fP +.\} +.PP +\fIoptions\fR +.RS 4 +コマンドライン・オプション。オプションを参照してください。 .RE +.PP +\fISEI\fR +.RS 4 +読み取るWebサービスのエンドポイント実装クラス(SEI)です。 .RE - -.LP -.SH "構文" +.SH "説明" +.PP +\fIwsgen\fRコマンドは、JAX\-WS Webサービスで使用されるJAX\-WSポータブル・アーティファクトを生成します。このツールは、Webサービスのエンドポイント・クラスを読取り、Webサービスのデプロイメントと呼出しに必要なすべてのアーティファクトを生成します。JAXWS 2\&.1\&.1 RIでは\fIwsgen\fR +Antタスクも提供されます。 +http://jax\-ws\&.java\&.net/nonav/2\&.1\&.1/docs/wsgenant\&.htmlのJAX\-WS (wsgen)ページのToolsタブを参照してください。 +.PP +\fIwsgen\fRコマンドを起動するには、次を行います。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -wsgen [options] <SEI>\fP -.br -\f3 -.fl -\fP +export JAXWS_HOME=/pathto/jaxws\-ri +$JAXWS_HOME/bin/wsgen\&.sh \-help .fi -.LP -次の表に、 \f2wsgen\fP のオプションを示します。 -.br -.LP -.TS -.if \n+(b.=1 .nr d. \n(.c-\n(c.-1 -.de 35 -.ps \n(.s -.vs \n(.vu -.in \n(.iu -.if \n(.u .fi -.if \n(.j .ad -.if \n(.j=0 .na -.. -.nf -.nr #~ 0 -.if n .nr #~ 0.6n -.ds #d .d -.if \(ts\n(.z\(ts\(ts .ds #d nl -.fc -.nr 33 \n(.s -.rm 80 81 -.nr 34 \n(.lu -.eo -.am 81 -.br -.di a+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -入力クラスファイルの検索場所を指定します -.br -.di -.nr a| \n(dn -.nr a- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di b+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -\-classpath <path> \f2と同じです\fP -.br -.di -.nr b| \n(dn -.nr b- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di c+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -生成される出力ファイルを格納する場所を指定します -.br -.di -.nr c| \n(dn -.nr c- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di d+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -ベンダー拡張 (仕様で規定されていない機能) を許可します。拡張を使用すると、アプリケーションの移植性が失われたり、ほかの実装との相互運用が行えなくなる可性があります -.br -.di -.nr d| \n(dn -.nr d- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di e+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -ヘルプを表示します -.br -.di -.nr e| \n(dn -.nr e- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di f+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -生成されたファイルを保持します -.br -.di -.nr f| \n(dn -.nr f- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di g+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -常に \-wsdl オプションと組み合わせて使用します。WSDL などの生成されたリソースファイルの格納場所を指定します -.br -.di -.nr g| \n(dn -.nr g- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di h+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -生成されるソースファイルを格納する場所を指定する -.br -.di -.nr h| \n(dn -.nr h- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di i+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -コンパイラが実行している処理に関するメッセージを出力します -.br -.di -.nr i| \n(dn -.nr i- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di j+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -バージョン情報を出力します。このオプションを使用した場合、バージョン情報が出力されるだけです。通常の処理は実行されません。 -.br -.di -.nr j| \n(dn -.nr j- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di k+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -デフォルトでは \f2wsgen\fP は WSDL ファイルを生成しません。このフラグは省略可能ですが、指定した場合は \f2wsgen\fP が WSDL ファイルを生成するようになります。このフラグは通常、エンドポイントの配備前に開発者が WSDL を参照できるようにするためだけに使用されます。 \f2protocol\fP は省略可能であり、wsdl:binding で使用すべきプロトコルを指定するために \f2使用されます\fP。有効なプロトコルは次のとおりです。 \f2soap1.1\fP と \f2Xsoap1.2\fP。デフォルトは \f2soap1.1\fP です。 \f2Xsoap1.2\fP は標準ではないため、 \f2\-extension\fP オプションと組み合わせないと使用できません。 -.br -.di -.nr k| \n(dn -.nr k- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di l+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -常に \f2\-wsdl\fP オプションと組み合わせて使用します。WSDL 内で生成されるべき \f2wsdl:service\fP の名前を指定するために使用します。例: \f2\-servicename "{http://mynamespace/}MyService"\fP -.br -.di -.nr l| \n(dn -.nr l- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di m+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -常に \f2\-wsdl\fP オプションと組み合わせて使用します。WSDL 内で生成されるべき \f2wsdl:port\fP の名前を指定するために使用します。例: \f2\-portname "{http://mynamespace/}MyPort"\fP -.br -.br -.di -.nr m| \n(dn -.nr m- \n(dl -.. -.ec \ -.35 -.nf -.ll \n(34u -.nr 80 0 -.nr 38 \w\f3オプション\fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w\f4\-classpath <path>\fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w\f4\-cp <path>\fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w\f4\-d <directory>\fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w\f4\-extension\fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w\f4\-help\fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w\f4\-keep\fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w\f4\-r <directory>\fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w\f4\-s <directory>\fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w\f4\-verbose\fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w\f4\-version\fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w\f4\-wsdl[:protocol]\fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w\f4\-servicename <name>\fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w\f4\-portname <name>\fP -.if \n(80<\n(38 .nr 80 \n(38 -.80 -.rm 80 -.nr 81 0 -.nr 38 \w\f3説明\fP -.if \n(81<\n(38 .nr 81 \n(38 -.81 -.rm 81 -.nr 38 \n(a- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(b- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(c- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(d- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(e- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(f- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(g- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(h- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(i- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(j- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(k- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(l- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(m- -.if \n(81<\n(38 .nr 81 \n(38 -.35 -.nf -.ll \n(34u -.nr 38 1n -.nr 79 0 -.nr 40 \n(79+(0*\n(38) -.nr 80 +\n(40 -.nr 41 \n(80+(3*\n(38) -.nr 81 +\n(41 -.nr TW \n(81 -.if t .if \n(TW>\n(.li .tm Table at line 137 file Input is too wide - \n(TW units -.fc   -.nr #T 0-1 -.nr #a 0-1 -.eo -.de T# -.ds #d .d -.if \(ts\n(.z\(ts\(ts .ds #d nl -.mk ## -.nr ## -1v -.ls 1 -.ls -.. -.ec -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f3オプション\fP\h'|\n(41u'\f3説明\fP -.ne \n(a|u+\n(.Vu -.if (\n(a|+\n(#^-1v)>\n(#- .nr #- +(\n(a|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f4\-classpath <path>\fP\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.a+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(b|u+\n(.Vu -.if (\n(b|+\n(#^-1v)>\n(#- .nr #- +(\n(b|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f4\-cp <path>\fP\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.b+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(c|u+\n(.Vu -.if (\n(c|+\n(#^-1v)>\n(#- .nr #- +(\n(c|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f4\-d <directory>\fP\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.c+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(d|u+\n(.Vu -.if (\n(d|+\n(#^-1v)>\n(#- .nr #- +(\n(d|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f4\-extension\fP\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.d+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(e|u+\n(.Vu -.if (\n(e|+\n(#^-1v)>\n(#- .nr #- +(\n(e|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f4\-help\fP\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.e+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(f|u+\n(.Vu -.if (\n(f|+\n(#^-1v)>\n(#- .nr #- +(\n(f|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f4\-keep\fP\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.f+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(g|u+\n(.Vu -.if (\n(g|+\n(#^-1v)>\n(#- .nr #- +(\n(g|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f4\-r <directory>\fP\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.g+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(h|u+\n(.Vu -.if (\n(h|+\n(#^-1v)>\n(#- .nr #- +(\n(h|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f4\-s <directory>\fP\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.h+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(i|u+\n(.Vu -.if (\n(i|+\n(#^-1v)>\n(#- .nr #- +(\n(i|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f4\-verbose\fP\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.i+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(j|u+\n(.Vu -.if (\n(j|+\n(#^-1v)>\n(#- .nr #- +(\n(j|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f4\-version\fP\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.j+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(k|u+\n(.Vu -.if (\n(k|+\n(#^-1v)>\n(#- .nr #- +(\n(k|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f4\-wsdl[:protocol]\fP\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.k+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(l|u+\n(.Vu -.if (\n(l|+\n(#^-1v)>\n(#- .nr #- +(\n(l|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f4\-servicename <name>\fP\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.l+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(m|u+\n(.Vu -.if (\n(m|+\n(#^-1v)>\n(#- .nr #- +(\n(m|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f4\-portname <name>\fP\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.m+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.fc -.nr T. 1 -.T# 1 -.35 -.rm a+ -.rm b+ -.rm c+ -.rm d+ -.rm e+ -.rm f+ -.rm g+ -.rm h+ -.rm i+ -.rm j+ -.rm k+ -.rm l+ -.rm m+ -.TE -.if \n-(b.=0 .nr c. \n(.c-\n(d.-57 - -.LP +.if n \{\ +.RE +.\} +.SH "オプション" +.PP +\-classpath \fIpath\fR +.RS 4 +入力クラス・ファイルの場所。 +.RE +.PP +\-cp \fIpath\fR +.RS 4 +入力クラス・ファイルの場所。 +.RE +.PP +\-d \fIdirectory\fR +.RS 4 +生成された出力ファイルを格納する場所。 +.RE +.PP +\-extension +.RS 4 +ベンダー拡張を使用可能にします。拡張を使用すると、アプリケーションの移植性が失われたり、他の実装と連携できなくなる可能性があります。 +.RE +.PP +\-help +.RS 4 +\fIwsgen\fRコマンドに関するヘルプ・メッセージを表示します。 +.RE +.PP +\-keep +.RS 4 +生成されたファイルを保存します。 +.RE +.PP +\-r \fIdirectory\fR +.RS 4 +このオプションを\fI\-wsdl\fRオプションとともに使用して、WSDLなど生成されたリソース・ファイルを配置する場所を指定します。 +.RE +.PP +\-s \fIdirectory\fR +.RS 4 +生成されたソース・ファイルを格納する場所。 +.RE +.PP +\-verbose +.RS 4 +コンパイラ・メッセージを表示します。 +.RE +.PP +\-version +.RS 4 +リリース情報を出力します。 +.RE +.PP +\-wsdl [ :protocol ] +.RS 4 +エンドポイントをデプロイする前に確認するWSDLファイルを生成するオプション・コマンド。WSDLファイルには、サービスを呼び出す方法、パラメータに必要な値、返されるデータ構造についてのコンピュータで読取り可能な記述が含まれます。 +.sp +デフォルトでは\fIwsgen\fRコマンドはWSDLファイルを生成しません。\fIprotocol\fR値は省略可能であり、WSDLバインディング(\fIwsdl:binding\fR)で使用するプロトコルを指定するために使用されます。有効なプロトコルは、\fIsoap1\&.1\fRと\fIXsoap1\&.2\fRです。デフォルトは\fIsoap1\&.1\fRです。\fIXsoap1\&.2\fRプロトコルは標準ではないため、\fI\-extension\fRオプションとともにのみ使用可能です。 +.RE +.PP +\-servicename \fIname\fR +.RS 4 +\fI\-wsdl\fRオプションとともにのみ使用して、WSDLで生成される特定のWSDLサービス(\fIwsdl:service\fR)名を指定します。例: +\fI\-servicename "{http://mynamespace/}MyService"\fR。 +.RE +.PP +\-portname \fIname\fR +.RS 4 +\fI\-wsdl\fRオプションとともにのみ使用して、WSDLで生成される特定のWSDLポート(\fIwsdl:port\fR)名を指定します。例: +\fI\-portname "{http://mynamespace/}MyPort"\fR。 +.RE .SH "例" +.PP +次の例では、Stockディレクトリ内に\fI@WebService\fR注釈を持つ\fIStockService\fRのラッパー・クラスを生成します。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -\fP\f3wsgen \-d stock \-cp myclasspath stock.StockService\fP -.fl +wsgen \-d stock \-cp myclasspath stock\&.StockService .fi -.LP -\f3stock\fP ディレクトリ内に @WebService 注釈が付けられた、StockService に必要なラッパークラスが生成されます。 +.if n \{\ +.RE +.\} +.PP +次の例では、SOAP 1\&.1 WSDLおよび\fI@WebService\fR注釈を持つ\fIstock\&.StockService\fRクラスのスキーマを生成します。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -\fP\f3wsgen \-wsdl \-d stock \-cp myclasspath stock.StockService\fP -.fl +wsgen \-wsdl \-d stock \-cp myclasspath stock\&.StockService .fi -.LP -SOAP 1.1 WSDL と、@WebService 注釈が付けられた Java クラス stock.StockService のスキーマが生成されます。 +.if n \{\ +.RE +.\} +.PP +次の例では、SOAP 1\&.2 WSDLを生成します。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -\fP\f3wsgen \-wsdl:Xsoap1.2 \-d stock \-cp myclasspath stock.StockService\fP -.fl +wsgen \-wsdl:Xsoap1\&.2 \-d stock \-cp myclasspath stock\&.StockService .fi -.LP -SOAP 1.2 WSDL が生成されます。 -.LP -サービスを配備するときに JAXWS ランタイムによって自動的に WSDL が生成されるため、開発時に WSDL を生成する必要はありません。 +.if n \{\ +.RE +.\} +.PP +\fB注意:\fR +サービスのデプロイ時にJAXWS実行時環境でWSDLが生成されるため、開発時にWSDLを生成する必要はありません。 +.SH "関連項目" +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +wsimport(1) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +http://jax\-ws\&.java\&.net/nonav/2\&.1\&.1/docs/wsgenant\&.htmlの +JAX\-WS (wsgen)ページのToolsタブを参照してください。 +.RE +.br +'pl 8.5i +'bp diff --git a/jdk/src/solaris/doc/sun/man/man1/ja/wsimport.1 b/jdk/src/solaris/doc/sun/man/man1/ja/wsimport.1 index a09204e86ba..feff3f3acca 100644 --- a/jdk/src/solaris/doc/sun/man/man1/ja/wsimport.1 +++ b/jdk/src/solaris/doc/sun/man/man1/ja/wsimport.1 @@ -1,1066 +1,332 @@ -." Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. -." DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -." -." This code is free software; you can redistribute it and/or modify it -." under the terms of the GNU General Public License version 2 only, as -." published by the Free Software Foundation. -." -." 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. -." -.TH wsimport 1 "07 May 2011" -.SH "名前" -wsimport \- XML Web Services (JAX\-WS) 2.0 のための Java(TM) API -.LP -\f3仕様バージョン:\fP 2.1 -.br -\f3実装バージョン:\fP 2.1.1 -.br +'\" t +.\" Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved. +.\" Title: wsimport +.\" Language: English +.\" Date: 2013年11月21日 +.\" SectDesc: Java Webサービス・ツール +.\" Software: JDK 8 +.\" Arch: 汎用 +.\" +.\" 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. +.\" +.pl 99999 +.TH "wsimport" "1" "2013年11月21日" "JDK 8" "Java Webサービス・ツール" +.\" ----------------------------------------------------------------- +.\" * Define some portability stuff +.\" ----------------------------------------------------------------- +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.\" http://bugs.debian.org/507673 +.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" ----------------------------------------------------------------- +.\" * set default formatting +.\" ----------------------------------------------------------------- +.\" disable hyphenation +.nh +.\" disable justification (adjust text to left margin only) +.ad l +.\" ----------------------------------------------------------------- +.\" * MAIN CONTENT STARTS HERE * +.\" ----------------------------------------------------------------- +.SH "NAME" +wsimport \- Webアプリケーション・アーカイブ(WAR)ファイルにパッケージできるJAX\-WSポータブル・アーティファクトを生成して、Antタスクを指定します。 .SH "概要" -.LP -\f2wsimport\fP ツールは、次のような JAX\-WS ポータブルアーティファクトを生成します。 -.RS 3 -.TP 2 -o -サービスエンドポイントインタフェース (SEI) -.TP 2 -o -サービス -.TP 2 -o -wsdl:fault からマップされる例外クラス (存在する場合) -.TP 2 -o -応答 wsdl:message から派生する非同期応答 Bean (存在する場合) -.TP 2 -o -JAX\-B が生成する値タイプ (スキーマの型からマップされた Java クラス) -.RE -.LP -これらのアーティファクトは、WSDL ドキュメント、スキーマドキュメント、およびエンドポイント実装とともに WAR ファイル内にパッケージ化して配備することができます。また、wsimport Ant タスクも用意されています。 -.na -\f2wsimport Ant タスク\fP @ -.fi -https://jax\-ws.dev.java.net/nonav/2.1.1/docs/wsimportant.htmlを参照してください。 -.br - -.LP -.SH "wsimport の起動" -.RS 3 -.TP 2 -o -\f3Solaris/Linux\fP -.RS 3 -.TP 2 -* -\f2/bin/wsimport.sh \-help\fP -.RE -.TP 2 -o -\f3Windows\fP -.RS 3 -.TP 2 -* -\f2\\bin\\wsimport.bat \-help\fP -.RE -.RE - -.LP -.SH "構文" +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -wsimport [options] <wsdl> -.fl -\fP +\fIwsimport\fR [ \fIoptions\fR ] \fIwsdl\fR .fi -.LP -次の表に、 \f2wsimport\fP のオプションを示します。 -.LP -.TS -.if \n+(b.=1 .nr d. \n(.c-\n(c.-1 -.de 35 -.ps \n(.s -.vs \n(.vu -.in \n(.iu -.if \n(.u .fi -.if \n(.j .ad -.if \n(.j=0 .na -.. +.if n \{\ +.RE +.\} +.PP +\fIoptions\fR +.RS 4 +コマンドライン・オプション。オプションを参照してください。 +.RE +.PP +\fIwsdl\fR +.RS 4 +Webサービスを呼び出す方法、パラメータに必要な値、返されるデータ構造についてのコンピュータで読取り可能な記述が含まれまるファイルです。 +.RE +.SH "説明" +.PP +\fIwsimport\fRコマンドは、次のJAX\-WSポータブル・アーティファクトを生成します。これらのアーティファクトは、デプロイするWSDLおよびスキーマ・ドキュメントおよびエンドポイント実装とともに、WARファイルにパッケージできます。\fIwsimport\fRコマンドでは\fIwsimport\fR +Antタスクも提供されます。 +http://jax\-ws\&.java\&.net/nonav/2\&.1\&.1/docs/wsimportant\&.htmlのWsimport Ant TaskページのToolsタブを参照してください。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +サービス・エンドポイント・インタフェース(SEI) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +サービス +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +例外クラスは\fIwsdl:fault\fRからマップされます(存在する場合) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +非同期レスポンスBeanはレスポンス\fIwsdl:message\fRから派生します(存在する場合) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +JAXBが生成する値タイプ(スキーマのタイプからマップされたJavaクラス) +.RE +.PP +\fIwsgen\fRコマンドを起動するには、次を行います。 +.PP +\fBOracle Solaris/Linux\fR: +.sp +.if n \{\ +.RS 4 +.\} .nf -.nr #~ 0 -.if n .nr #~ 0.6n -.ds #d .d -.if \(ts\n(.z\(ts\(ts .ds #d nl -.fc -.nr 33 \n(.s -.rm 80 81 -.nr 34 \n(.lu -.eo -.am 81 -.br -.di a+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -生成される出力ファイルを格納する場所を指定します -.br -.di -.nr a| \n(dn -.nr a- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di b+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -外部の JAX\-WS または JAXB バインディングファイルを指定します ( \f2<file>\fP ごとに \f2\-b\fP が必要となる) -.br -.di -.nr b| \n(dn -.nr b- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di c+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -このオプションを JAXB スキーマコンパイラに渡します -.br -.di -.nr c| \n(dn -.nr c- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di d+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -外部エンティティー参照を解決するためのカタログファイルを指定します。TR9401、XCatalog、OASIS XML Catalog の各形式がサポートされています。 -.na -\f2カタログ\fP @ +/bin/wsimport\&.sh \-help .fi -https://jax\-ws.dev.java.net/nonav/2.1.1/docs/catalog\-support.htmlのドキュメントをお読みになり、\f3カタログ\fPのサンプルを参照してください。 -.br -.di -.nr d| \n(dn -.nr d- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di e+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -ベンダー拡張 (仕様で規定されていない機能) を許可します。拡張を使用すると、アプリケーションの移植性が失われたり、ほかの実装との相互運用が行えなくなる可能性があります -.br -.di -.nr e| \n(dn -.nr e- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di f+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -ヘルプを表示します -.br -.di -.nr f| \n(dn -.nr f- \n(dl -.. -.ec \ -.eo -.am 80 -.br -.di g+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(80 .ll \n(80u -.in 0 -\f3\-httpproxy:<host>:<port> \fP -.br -.di -.nr g| \n(dn -.nr g- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di h+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -HTTP プロキシサーバーを指定します (デフォルトのポートは 8080) -.br -.di -.nr h| \n(dn -.nr h- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di i+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 +.if n \{\ +.RE +.\} +.PP +\fBWindows\fRの場合: +.sp +.if n \{\ +.RS 4 +.\} +.nf +\ebin\ewsimport\&.bat \-help +.fi +.if n \{\ +.RE +.\} +.SH "オプション" +.PP +\-d \fIdirectory\fR +.RS 4 +生成される出力ファイルを格納する場所を指定します。 +.RE +.PP +\-b \fIpath\fR +.RS 4 +外部JAX\-WSまたはJAXBバインディング・ファイルを指定します。\fI\-b\fRオプションで複数のJAX\-WSおよびJAXBバインディング・ファイルを指定できます。これらのファイルを使用して、パッケージ名、Bean名などをカスタマイズできます。JAX\-WSおよびJAXBバインディング・ファイルの詳細は、 +http://jax\-ws\&.java\&.net/nonav/2\&.1\&.1/docs/wsimportant\&.htmlのWSDL CustomizationのUsers Guideタブを参照してください +.RE +.PP +\-B \fIjaxbOption\fR +.RS 4 +JAXBスキーマ・コンパイラに\fIjaxbOption\fRオプションを渡します。 +.RE +.PP +\-catalog +.RS 4 +外部エンティティ参照を解決するカタログ・ファイルを指定します。\fI\-catalog\fRオプションは、TR9401、XCatalog、OASIS XML Catalogの各形式をサポートしています。http://jax\-ws\&.java\&.net/nonav/2\&.1\&.1/docs/catalog\-support\&.htmlの +Catalog SupportページのUsers Guideタブを参照してください。 +.RE +.PP +\-extension +.RS 4 +ベンダー拡張を使用可能にします。拡張を使用すると、アプリケーションの移植性が失われたり、他の実装と連携できなくなる可能性があります。 +.RE +.PP +\-help +.RS 4 +\fIwsimport\fRコマンドに関するヘルプ・メッセージを表示します。 +.RE +.PP +\-httpproxy: \fIhost\fR:\fIport\fR +.RS 4 +HTTPプロキシ・サーバーを指定します。デフォルトは8080です。 +.RE +.PP +\-keep +.RS 4 生成されたファイルを保持します -.br -.di -.nr i| \n(dn -.nr i- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di j+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -このコマンド行オプション経由でターゲットパッケージを指定した場合、その指定内容は、パッケージ名に対するすべての WSDL/スキーマバインディングカスタマイズや、 仕様で規定されているデフォルトのパッケージ名アルゴリズムよりも優先されます -.br -.di -.nr j| \n(dn -.nr j- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di k+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -生成されるソースファイルを格納する場所を指定する -.br -.di -.nr k| \n(dn -.nr k- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di l+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -コンパイラが実行している処理に関するメッセージを出力します -.br -.di -.nr l| \n(dn -.nr l- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di m+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -バージョン情報を出力します -.br -.di -.nr m| \n(dn -.nr m- \n(dl -.. -.ec \ -.eo -.am 80 -.br -.di n+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(80 .ll \n(80u -.in 0 -\f3\-wsdllocation <location>\fP -.br -.di -.nr n| \n(dn -.nr n- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di o+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -\f2@WebServiceClient.wsdlLocation\fP 値 -.br -.di -.nr o| \n(dn -.nr o- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di p+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -指定された JAX\-WS 仕様バージョンに従ってコードを生成します。バージョン 2.0 では、JAX\-WS 2.0 仕様に準拠したコードを生成します。 -.br -.di -.nr p| \n(dn -.nr p- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di q+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -wsimport 出力を抑制します -.br -.di -.nr q| \n(dn -.nr q- \n(dl -.. -.ec \ -.35 -.nf -.ll \n(34u -.nr 80 0 -.nr 38 \w\f3オプション\fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w\f3\-d <directory> \fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w\f3\-b <path> \fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w\f3\-B <jaxbOption>\fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w\f3\-catalog\fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w\f3\-extension \fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w\f3\-help \fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w\f3\-keep \fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w\f3\-p \fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w\f3\-s <directory> \fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w\f3\-verbose \fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w\f3\-version \fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w\f3\-target \fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w\f3\-quiet \fP -.if \n(80<\n(38 .nr 80 \n(38 -.80 -.rm 80 -.nr 38 \n(g- -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \n(n- -.if \n(80<\n(38 .nr 80 \n(38 -.nr 81 0 -.nr 38 \w\f3説明\fP -.if \n(81<\n(38 .nr 81 \n(38 -.81 -.rm 81 -.nr 38 \n(a- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(b- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(c- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(d- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(e- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(f- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(h- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(i- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(j- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(k- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(l- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(m- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(o- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(p- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(q- -.if \n(81<\n(38 .nr 81 \n(38 -.35 -.nf -.ll \n(34u -.nr 38 1n -.nr 79 0 -.nr 40 \n(79+(0*\n(38) -.nr 80 +\n(40 -.nr 41 \n(80+(3*\n(38) -.nr 81 +\n(41 -.nr TW \n(81 -.if t .if \n(TW>\n(.li .tm Table at line 163 file Input is too wide - \n(TW units -.fc   -.nr #T 0-1 -.nr #a 0-1 -.eo -.de T# -.ds #d .d -.if \(ts\n(.z\(ts\(ts .ds #d nl -.mk ## -.nr ## -1v -.ls 1 -.ls -.. -.ec -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f3オプション\fP\h'|\n(41u'\f3説明\fP -.ne \n(a|u+\n(.Vu -.if (\n(a|+\n(#^-1v)>\n(#- .nr #- +(\n(a|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f3\-d <directory> \fP\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.a+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(b|u+\n(.Vu -.if (\n(b|+\n(#^-1v)>\n(#- .nr #- +(\n(b|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f3\-b <path> \fP\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.b+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(c|u+\n(.Vu -.if (\n(c|+\n(#^-1v)>\n(#- .nr #- +(\n(c|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f3\-B <jaxbOption>\fP\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.c+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(d|u+\n(.Vu -.if (\n(d|+\n(#^-1v)>\n(#- .nr #- +(\n(d|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f3\-catalog\fP\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.d+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(e|u+\n(.Vu -.if (\n(e|+\n(#^-1v)>\n(#- .nr #- +(\n(e|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f3\-extension \fP\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.e+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(f|u+\n(.Vu -.if (\n(f|+\n(#^-1v)>\n(#- .nr #- +(\n(f|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f3\-help \fP\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.f+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(g|u+\n(.Vu -.ne \n(h|u+\n(.Vu -.if (\n(g|+\n(#^-1v)>\n(#- .nr #- +(\n(g|+\n(#^-\n(#--1v) -.if (\n(h|+\n(#^-1v)>\n(#- .nr #- +(\n(h|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(40u -.in +\n(37u -.g+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.h+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(i|u+\n(.Vu -.if (\n(i|+\n(#^-1v)>\n(#- .nr #- +(\n(i|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f3\-keep \fP\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.i+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(j|u+\n(.Vu -.if (\n(j|+\n(#^-1v)>\n(#- .nr #- +(\n(j|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f3\-p \fP\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.j+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(k|u+\n(.Vu -.if (\n(k|+\n(#^-1v)>\n(#- .nr #- +(\n(k|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f3\-s <directory> \fP\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.k+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(l|u+\n(.Vu -.if (\n(l|+\n(#^-1v)>\n(#- .nr #- +(\n(l|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f3\-verbose \fP\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.l+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(m|u+\n(.Vu -.if (\n(m|+\n(#^-1v)>\n(#- .nr #- +(\n(m|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f3\-version \fP\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.m+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(n|u+\n(.Vu -.ne \n(o|u+\n(.Vu -.if (\n(n|+\n(#^-1v)>\n(#- .nr #- +(\n(n|+\n(#^-\n(#--1v) -.if (\n(o|+\n(#^-1v)>\n(#- .nr #- +(\n(o|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(40u -.in +\n(37u -.n+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.o+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(p|u+\n(.Vu -.if (\n(p|+\n(#^-1v)>\n(#- .nr #- +(\n(p|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f3\-target \fP\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.p+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(q|u+\n(.Vu -.if (\n(q|+\n(#^-1v)>\n(#- .nr #- +(\n(q|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f3\-quiet \fP\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.q+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.fc -.nr T. 1 -.T# 1 -.35 -.rm a+ -.rm b+ -.rm c+ -.rm d+ -.rm e+ -.rm f+ -.rm g+ -.rm h+ -.rm i+ -.rm j+ -.rm k+ -.rm l+ -.rm m+ -.rm n+ -.rm o+ -.rm p+ -.rm q+ -.TE -.if \n-(b.=0 .nr c. \n(.c-\n(d.-72 -.LP -\-b オプションを使って、複数の JAX\-WS および JAXB バインディングファイル \f2を指定できます。\fP これらのファイルを使って、パッケージ名や Bean 名など、さまざまなカスタマイズが可能です。JAX\-WS および JAXB バインディングファイルの詳細は、 -.na -\f2カスタマイズマニュアル\fP @ -.fi -https://jax\-ws.dev.java.net/nonav/2.1.1/docs/customizations.htmlを参照してください。 -.LP -次の表に、 \f2wsimport\fP の非標準オプションを示します。 -.LP -.TS -.if \n+(b.=1 .nr d. \n(.c-\n(c.-1 -.de 35 -.ps \n(.s -.vs \n(.vu -.in \n(.iu -.if \n(.u .fi -.if \n(.j .ad -.if \n(.j=0 .na -.. -.nf -.nr #~ 0 -.if n .nr #~ 0.6n -.ds #d .d -.if \(ts\n(.z\(ts\(ts .ds #d nl -.fc -.nr 33 \n(.s -.rm 80 81 -.nr 34 \n(.lu -.eo -.am 81 -.br -.di a+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -要求または応答メッセージにバインドされないヘッダーを Java メソッドのパラメータにマップします -.br -.di -.nr a| \n(dn -.nr a- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di b+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -認証情報を含むファイルを指定する WSDL URI です。この URI の形式は次のとおりです http://\f2<ユーザー名>\fP:\f2<パスワード>\fP@\f2<ホスト名>\fP/\f2<Web サービス名>\fP?wsdl -.br -.di -.nr b| \n(dn -.nr b- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di c+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 +.RE +.PP +\-p \fIname\fR +.RS 4 +ターゲット・パッケージ\fIname\fRを指定して、WSDLおよびスキーマ・バインディングのカスタマイズ、および仕様部で定義されたデフォルトのアルゴリズムをオーバーライドします。 +.RE +.PP +\-s \fIdirectory\fR +.RS 4 +生成されるソース・ファイルを格納する場所を指定します +.RE +.PP +\-verbose +.RS 4 +コンパイラ・メッセージを表示します。 +.RE +.PP +\-version +.RS 4 +リリース情報を出力します。 +.RE +.PP +\-wsdllocation \fIlocation\fR +.RS 4 +\fI@WebServiceClient\&.wsdlLocation\fRの値を指定します。 +.RE +.PP +\-target +.RS 4 +指定されたJAX\-WS仕様バージョンに従って、コードを生成します。バージョン2\&.0では、JAX\-WS 2\&.0仕様に準拠したコードを生成します。 +.RE +.PP +\-quiet +.RS 4 +\fIwsimport\fRコマンド出力を抑制します。 +.RE +.PP +\fI\-b\fRオプションを使用して、複数の\fIJAX\-WS\fRおよび\fIJAXB\fRバインディング・ファイルを指定できます。これらのファイルを使用して、パッケージ名やBean名など、様々なものをカスタマイズできます。\fIJAX\-WS\fRおよび\fIJAXB\fRバインディング・ファイルの詳細は、 +https://jax\-ws\&.dev\&.java\&.net/nonav/2\&.1\&.1/docs/customizations\&.htmlのJAXBタブを参照してください +.SH "非標準オプション" +.PP +\-XadditionalHeaders +.RS 4 +リクエストまたはレスポンス・メッセージにバインドされないヘッダーをJavaメソッドのパラメータにマップします +.RE +.PP +\-Xauthfile \fIfile\fR +.RS 4 +認証情報を含むファイルを指定するWSDL URIです。このURIの形式は次のとおりです。 +.sp +http://\fIuser\-name\fR:\fIpassword\fR@\fIhost\-name\fR/\fIweb\-service\-name\fR>?wsdl +.RE +.PP +\-Xdebug +.RS 4 デバッグ情報を出力します -.br -.di -.nr c| \n(dn -.nr c- \n(dl -.. -.ec \ -.eo -.am 80 -.br -.di d+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(80 .ll \n(80u -.in 0 -\f3\-Xno\-addressing\-databinding\fP -.br -.di -.nr d| \n(dn -.nr d- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di e+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -W3C \f2EndpointReferenceType\fP と Java のバインディングを有効にします -.br -.di -.nr e| \n(dn -.nr e- \n(dl -.. -.ec \ -.eo -.am 81 -.br -.di f+ -.35 -.ft \n(.f -.ll \n(34u*1u/3u -.if \n(.l<\n(81 .ll \n(81u -.in 0 -生成された Java ファイルをコンパイルしません -.br -.di -.nr f| \n(dn -.nr f- \n(dl -.. -.ec \ -.35 -.nf -.ll \n(34u -.nr 80 0 -.nr 38 \w\f3オプション\fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w\f3\-XadditionalHeaders\fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w\f3\-Xauthfile <file>\fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w\f3\-Xdebug\fP -.if \n(80<\n(38 .nr 80 \n(38 -.nr 38 \w\f3\-Xnocompile\fP -.if \n(80<\n(38 .nr 80 \n(38 -.80 -.rm 80 -.nr 38 \n(d- -.if \n(80<\n(38 .nr 80 \n(38 -.nr 81 0 -.nr 38 \w\f3説明\fP -.if \n(81<\n(38 .nr 81 \n(38 -.81 -.rm 81 -.nr 38 \n(a- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(b- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(c- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(e- -.if \n(81<\n(38 .nr 81 \n(38 -.nr 38 \n(f- -.if \n(81<\n(38 .nr 81 \n(38 -.35 -.nf -.ll \n(34u -.nr 38 1n -.nr 79 0 -.nr 40 \n(79+(0*\n(38) -.nr 80 +\n(40 -.nr 41 \n(80+(3*\n(38) -.nr 81 +\n(41 -.nr TW \n(81 -.if t .if \n(TW>\n(.li .tm Table at line 199 file Input is too wide - \n(TW units -.fc   -.nr #T 0-1 -.nr #a 0-1 -.eo -.de T# -.ds #d .d -.if \(ts\n(.z\(ts\(ts .ds #d nl -.mk ## -.nr ## -1v -.ls 1 -.ls -.. -.ec -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f3オプション\fP\h'|\n(41u'\f3説明\fP -.ne \n(a|u+\n(.Vu -.if (\n(a|+\n(#^-1v)>\n(#- .nr #- +(\n(a|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f3\-XadditionalHeaders\fP\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.a+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(b|u+\n(.Vu -.if (\n(b|+\n(#^-1v)>\n(#- .nr #- +(\n(b|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f3\-Xauthfile <file>\fP\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.b+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(c|u+\n(.Vu -.if (\n(c|+\n(#^-1v)>\n(#- .nr #- +(\n(c|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f3\-Xdebug\fP\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.c+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(d|u+\n(.Vu -.ne \n(e|u+\n(.Vu -.if (\n(d|+\n(#^-1v)>\n(#- .nr #- +(\n(d|+\n(#^-\n(#--1v) -.if (\n(e|+\n(#^-1v)>\n(#- .nr #- +(\n(e|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(40u -.in +\n(37u -.d+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.e+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.ne \n(f|u+\n(.Vu -.if (\n(f|+\n(#^-1v)>\n(#- .nr #- +(\n(f|+\n(#^-\n(#--1v) -.ta \n(80u \n(81u -.nr 31 \n(.f -.nr 35 1m -\&\h'|\n(40u'\f3\-Xnocompile\fP\h'|\n(41u' -.mk ## -.nr 31 \n(## -.sp |\n(##u-1v -.nr 37 \n(41u -.in +\n(37u -.f+ -.in -\n(37u -.mk 32 -.if \n(32>\n(31 .nr 31 \n(32 -.sp |\n(31u -.fc -.nr T. 1 -.T# 1 -.35 -.rm a+ -.rm b+ -.rm c+ -.rm d+ -.rm e+ -.rm f+ -.TE -.if \n-(b.=0 .nr c. \n(.c-\n(d.-26 - -.LP +.RE +.PP +\-Xno\-addressing\-databinding +.RS 4 +W3C EndpointReferenceTypeとJavaのバインディングを有効にします。 +.RE +.PP +\-Xnocompile +.RS 4 +生成されたJavaファイルをコンパイルしません +.RE .SH "例" +.PP +次の例では、Javaアーティファクトを生成し、\fIhttp://stockquote\&.example\&.com/quote?wsdl\fRをインポートしてアーティファクトをコンパイルします。 +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -\fP\f3wsimport \-p stockquote http://stockquote.example.com/quote?wsdl\fP -.fl +wsimport \-p stockquote http://stockquote\&.example\&.com/quote?wsdl .fi -.LP -Java アーティファクトを生成し、 \f2http://stockquote.example.com/quote?wsdl\fP をインポートしてその Java アーティファクトをコンパイルします +.if n \{\ +.RE +.\} +.SH "関連項目" +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +wsgen(1) +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +http://jax\-ws\&.java\&.net/nonav/2\&.1\&.1/docs/wsimportant\&.htmlの +Wsimport Ant TaskページのToolsタブ +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +http://jax\-ws\&.java\&.net/nonav/2\&.1\&.1/docs/catalog\-support\&.htmlの +Catalog SupportページのUsers Guideタブ +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +http://jax\-ws\&.java\&.net/nonav/2\&.1\&.1/docs/wsimportant\&.htmlの +WSDL CustomizationページのUsers Guideタブ +.RE .br - +'pl 8.5i +'bp diff --git a/jdk/src/solaris/doc/sun/man/man1/ja/xjc.1 b/jdk/src/solaris/doc/sun/man/man1/ja/xjc.1 index 0b3baf84f0a..17a0efdd9ed 100644 --- a/jdk/src/solaris/doc/sun/man/man1/ja/xjc.1 +++ b/jdk/src/solaris/doc/sun/man/man1/ja/xjc.1 @@ -1,298 +1,342 @@ -." Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. -." DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -." -." This code is free software; you can redistribute it and/or modify it -." under the terms of the GNU General Public License version 2 only, as -." published by the Free Software Foundation. -." -." 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. -." -.TH xjc 1 "07 May 2011" - -.LP -.ad c -.SH "名前" -xjc \- XML バインドのための Java(TM) アーキテクチャー -.br -バインディングコンパイラ -.LP -\f3仕様バージョン:\fP 2.1 -.br -\f3リファレンス実装 (RI) バージョン:\fP 2.1.3 .ad l - -.LP -.SH "xjc の起動" -.LP -.LP -バインディングコンパイラを起動するには、使用するプラットフォームに応じた bin ディレクトリ内の \f2xjc\fP シェルスクリプト \f2を\fP 使用します。また、バインディングコンパイラを実行するための Ant タスクも用意されています。 -.na -\f2xjc を Ant とともに使用する\fP @ -.fi -https://jaxb.dev.java.net/nonav/2.1.3/docs/xjcTask.htmlための手順を参照してください。 -.LP -.LP -\f2% xjc \-help\fP -.LP -.SS -出力 -.LP +'\" t +.\" Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved. +.\" Title: xjc +.\" Language: English +.\" Date: 2013年11月21日 +.\" SectDesc: Java Webサービス・ツール +.\" Software: JDK 8 +.\" Arch: 汎用 +.\" +.\" 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. +.\" +.pl 99999 +.TH "xjc" "1" "2013年11月21日" "JDK 8" "Java Webサービス・ツール" +.\" ----------------------------------------------------------------- +.\" * Define some portability stuff +.\" ----------------------------------------------------------------- +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.\" http://bugs.debian.org/507673 +.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" ----------------------------------------------------------------- +.\" * set default formatting +.\" ----------------------------------------------------------------- +.\" disable hyphenation +.nh +.\" disable justification (adjust text to left margin only) +.ad l +.\" ----------------------------------------------------------------- +.\" * MAIN CONTENT STARTS HERE * +.\" ----------------------------------------------------------------- +.SH "NAME" +xjc \- XMLスキーマ・ファイルを完全注釈付きのJavaクラスにコンパイルします。 +.SH "概要" +.sp +.if n \{\ +.RS 4 +.\} .nf -\f3 -.fl -Usage: xjc [\-options ...] <schema file/URL/dir/jar> ... [\-b <bindinfo>] ... -.fl -If dir is specified, all schema files in it will be compiled. -.fl -If jar is specified, /META\-INF/sun\-jaxb.episode binding file will be compiled. -.fl -Options: -.fl - \-nv : do not perform strict validation of the input schema(s) -.fl - \-extension : allow vendor extensions \- do not strictly follow the Compatibility Rules and App E.2 from the JAXB Spec -.fl - \-b <file/dir> : specify external bindings files (each <file> must have its own \-b); if a directory is given, **/*.xjb is searched -.fl - \-d <dir> : generated files will go into this directory -.fl - \-p <pkg> : specifies the target package -.fl - \-httpproxy <proxy> : set HTTP/HTTPS proxy; format is [user[:password]@]proxyHost:proxyPort -.fl - \-httpproxyfile <f> : works like \-httpproxy but takes the argument in a file to protect password -.fl - \-classpath <arg> : specify where to find user class files -.fl - \-catalog <file> : specify catalog files to resolve external entity references; support TR9401, XCatalog, and OASIS XML Catalog format -.fl - \-readOnly : generated files will be in read\-only mode -.fl - \-npa : suppress generation of package level annotations (**/package\-info.java) -.fl - \-no\-header : suppress generation of a file header with timestamp -.fl - \-target 2.0 : behave like XJC 2.0 and generate code that doesnt use any 2.1 features -.fl - \-xmlschema : treat input as W3C XML Schema (default) -.fl - \-relaxng : treat input as RELAX NG (experimental,unsupported) -.fl - \-relaxng\-compact : treat input as RELAX NG compact syntax (experimental,unsupported) -.fl - \-dtd : treat input as XML DTD (experimental,unsupported) -.fl - \-wsdl : treat input as WSDL and compile schemas inside it (experimental,unsupported) -.fl - \-verbose : be extra verbose -.fl - \-quiet : suppress compiler output -.fl - \-help : display this help message -.fl - \-version : display version information -.fl - -.fl - -.fl -Extensions: -.fl - \-Xlocator : enable source location support for generated code -.fl - \-Xsync\-methods : generate accessor methods with the 'synchronized' keyword -.fl - \-mark\-generated : mark the generated code as @javax.annotation.Generated -.fl - \-episode <FILE> : generate the episode file for separate compilation -.fl -\fP +\fIxjc\fR [ \fIoptions\fR ] \fIschema\fR \fIfile/URL/dir/jar\fR \&.\&.\&. [\fI\-b\fR \fIbindinfo\fR ] \&.\&.\&. .fi - -.LP +.if n \{\ +.RE +.\} +.PP +\fIoptions\fR +.RS 4 +コマンドライン・オプション。オプションを参照してください。 +.RE +.PP +schema \fIfile/URL/dir/jar \&.\&.\&.\fR +.RS 4 +XMLスキーマ・ファイルの場所。\fIdir\fRが指定されている場合は、すべてのスキーマ・ファイルがコンパイルされます。\fIjar\fRが指定されている場合は、\fI/META\-INF/sun\-jaxb\&.episode\fRバインディング・ファイルがコンパイルされます。 +.RE +.PP +\-b \fIbindinfo\fR +.RS 4 +バインディング・ファイルの場所。 +.RE +.SH "説明" +.PP +プラットフォームのbinディレクトリにある適切な\fIxjc\fRシェル・スクリプトを使用して、バインディング・コンパイラを起動します。バインディング・コンパイラを実行するAntタスクもあります。http://jaxb\&.java\&.net/nonav/2\&.1\&.3/docs/xjcTask\&.htmlの +Using the XJC with Antを参照してください .SH "オプション" -.LP -.RS 3 -.TP 3 -\-nv -デフォルトでは、XJC バインディングコンパイラは、ソーススキーマを処理する前に厳密な検証を実行します。このオプションを使用すると、厳密なスキーマ検証を無効にします。これは、バインディングコンパイラが検証を一切実行しないということではありません。より厳密でない検証を実行するということです。 -.TP 3 -\-extension -デフォルトでは、XJC バインディングコンパイラは、JAXB 仕様の「Compatibility」の章で説明されている規則を厳密に強制します。付録 E.2 には、JAXB v1.0 で完全にはサポートされていない一連の W3C XML スキーマ機能が定義されています。場合によっては、このスイッチで有効になる「\-extension」モードでそれらの機能が使用できるかもしれません。また、デフォルトの厳密なモードでは、仕様に定義されているバインディングカスタマイズのみが使用できます。「\-extension」スイッチを指定すれば、JAXB Vendor Extension を使用できます。 -.TP 3 -\-b <file> -処理する外部バインディングファイルを 1 つまたは複数指定します。(バインディングファイルごとに \f2「\-b」\fP スイッチを指定する必要があります。) 外部バインディングファイルの構文は非常に柔軟です。複数のスキーマのカスタマイズが含まれる 1 つのバインディングファイルを使用したり、それらのカスタマイズを複数のバインディングファイルに分割したりできます。次に例を示します。 \f2xjc schema1.xsd schema2.xsd schema3.xsd \-b bindings123.xjb\fP -.br -\f2xjc schema1.xsd schema2.xsd schema3.xsd \-b bindings1.xjb \-b bindings2.xjb \-b bindings3.xjb\fP また、コマンド行にスキーマファイルとバインディングファイルを指定する順番は任意です。 -.TP 3 -\-d <dir> -デフォルトでは、XJC バインディングコンパイラは、Java コンテンツクラスを現在のディレクトリに生成します。このオプションを使用すると、代替出力ディレクトリを指定できます。出力ディレクトリはあらかじめ存在している必要があります。XJC バインディングコンパイラは、このディレクトリを自動的に作成しません。 -.TP 3 -\-p <pkg> -このコマンド行オプション経由でターゲットパッケージを指定した場合、その指定内容は、パッケージ名に対するすべてのバインディングカスタマイズや、仕様で規定されているデフォルトのパッケージ名アルゴリズムよりも優先されます。 -.TP 3 -\-httpproxy <proxy> -HTTP/HTTPS プロキシを指定します。形式は [user[:password]@]proxyHost[:proxyPort] です。従来の \f2\-host\fP および \f2\-port\fP は、下位互換性のためにリファレンス実装でもサポートされていますが、推奨されなくなりました。このオプションで指定されたパスワードは、 \f2top\fP コマンドを使用するユーザーなど、ほかのユーザーが表示できる引数であることに注意してください。セキュリティーを高めるには、次の \f2\-httpproxyfile\fP を使用してください。 -.TP 3 -\-httpproxyfile <file> -HTTP/HTTPS プロキシをファイル経由で指定します。形式は上記と同じですが、このファイル内に指定されたパスワードをほかのユーザーが表示することはできません。 -.TP 3 -\-classpath <arg> -<jxb:javaType> および <xjc:superClass> \f2カスタマイズが使用する\fP クライアントアプリケーションの \f2クラスファイルの検索場所を\fP 指定します。 -.TP 3 -\-catalog <file> -外部エンティティー参照を解決するカタログファイルを指定します。TR9401、XCatalog、および OASIS XML Catalog 形式がサポートされます。詳細は、『XML Entity and URI Resolvers』ドキュメントを参照するか、 \f2カタログリゾルバの\fP サンプルアプリケーションを調べてください。 -.TP 3 -\-readOnly -デフォルトでは、XJC バインディングコンパイラは、生成する Java ソースファイルを書き込みから保護しません。このオプションを使用すると、XJC バインディングコンパイラは生成される Java ソースを強制的に読み取り専用にします。 -.TP 3 -\-npa -パッケージレベルの注釈を **/package\-info.java に生成することを抑制します。このスイッチを使用して生成するコードでは、これらの注釈がほかの生成済みクラスに内部化されます。 -.TP 3 -\-no\-header -多少のメモとタイムスタンプを含むファイルヘッダーコメントの生成を抑制します。このオプションを使用すると、生成されたコードがわかりにくくなります。 -.TP 3 -\-target 2.0 -なんらかの JAXB 2.1 機能に依存するコードを生成しないようにします。これにより、生成されたコードを JAXB 2.0 ランタイム (JavaSE 6 など) で実行できます。 -.TP 3 -\-xmlschema -入力スキーマを W3C XML スキーマ (デフォルト) と見なします。このスイッチを指定しなくても、入力スキーマは W3C XML スキーマと見なされます。 -.TP 3 -\-relaxng -入力スキーマを RELAX NG として扱います (試験的、未サポート)。RELAX NG スキーマのサポートは JAXB Vendor Extension として提供されています。 -.TP 3 -\-relaxng\-compact -入力スキーマを RELAX NG 圧縮構文として処理します (試験的、未サポート)。RELAX NG スキーマのサポートは JAXB Vendor Extension として提供されています。 -.TP 3 -\-dtd -入力スキーマを XML DTD として扱います (試験的、未サポート)。RELAX NG スキーマのサポートは JAXB Vendor Extension として提供されています。 -.TP 3 -\-wsdl -入力を WSDL として扱い、その内部のスキーマをコンパイルします (試験的、未サポート)。 -.TP 3 -\-quiet -進捗情報や警告など、コンパイラの出力を抑制します。 -.TP 3 -\-verbose -情報メッセージを出力したり特定のエラー発生時にスタックトレースを表示したりするなど、極めて冗長になります。 -.TP 3 -\-help -コンパイラスイッチの概要を表示します。 -.TP 3 -\-version -コンパイラのバージョン情報を表示します。 -.TP 3 -<schema file/URL/dir> -コンパイル対象となる 1 つまたは複数のスキーマファイルを指定します。ユーザーがディレクトリを指定した場合、xjc はそのディレクトリを走査し、そこで見つかったすべてのスキーマファイルをコンパイルします。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +非標準オプションも参照してください .RE - -.LP -.SS -非標準のコマンド行オプション -.LP -.RS 3 -.TP 3 -\-Xlocator -生成されたコードでは、非整列化のあとに Java Bean インスタンスに含まれるソース XML に関する SAX Locator 情報が公開されます。 -.TP 3 -\-Xsync\-methods -生成されたすべてのメソッドシグニチャーに \f2同期された\fP キーワードが含められます。 -.TP 3 -\-mark\-generated -生成されたコードに注釈 \f2@javax.annotation.Generated\fP を付けます。 -.TP 3 -\-episode <file> -コンパイルごとに指定されたエピソードファイルを生成します。 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +非推奨で削除されたオプションも参照してください .RE - -.LP -.SS -非推奨コマンド行オプションおよび削除されたコマンド行オプション -.LP -.RS 3 -.TP 3 -\-host & \-port -これらのオプションは非推奨となり、\f3\-httpproxy\fP オプションで置き換えられました。これらのオプションは、下位互換性を確保する目的で引き続きサポートされますが、ドキュメントには記載されず、将来のリリースで削除される可能性もあります。 -.TP 3 -\-use\-runtime -JAXB 2.0 仕様で移植性のあるランタイムが規定されたため、JAXB RI が **/impl/runtime パッケージを生成する必要がなくなりました。このため、このスイッチは不要となり、削除されました。 -.TP 3 -\-source -\-source 互換性スイッチは、JAXB 2.0 の最初の Early Access 版で導入されました。このスイッチは、JAXB 2.0 の今後のリリースから削除されることになりました。1.0.x コードを生成する必要がある場合は、1.0.x コードベースのインストールを使用してください。 +.PP +\-nv +.RS 4 +デフォルトでは、XJCバインディング・コンパイラは、ソース・スキーマを処理する前に厳密な検証を実行します。このオプションを使用すると、厳密なスキーマ検証か無効になります。これは、バインディング・コンパイラが検証を一切実行しないということではありません。より厳密でない検証を実行するということです。 .RE - -.LP -.SS -コンパイラの制限 -.LP -.LP -通常は、関連するすべてのスキーマを、同じバインディングコンパイラスイッチを指定して 1 つの単位としてコンパイルするのがもっとも安全です。 -.LP -.LP -xjc を実行するときは、次に示す制限に注意してください。これらの制限のほとんどは、xjc を何度か呼び出して複数のスキーマをコンパイルする場合にのみ適用されます。 -.LP -.RS 3 -.TP 2 -o -複数のスキーマを同時にコンパイルする場合は、ターゲットの Java パッケージ名に次の優先順位の規則が適用されることに注意してください。 -.RS 3 -.TP 3 -1. -「\f2\-p\fP」コマンド行オプションがもっとも優先されます。 -.TP 3 -2. -<\f2jaxb:package\fP> のカスタマイズ -.TP 3 -3. -\f2targetNamespace\fP が宣言されている場合は、 \f2仕様に定義されている targetNamespace\fP \-> Java パッケージ名のアルゴリズムを適用します。 -.TP 3 -4. -\f2targetNamespace\fP が宣言されていない場合は、「generated」という名前のハードコードされたパッケージを使用します。 +.PP +\-extension +.RS 4 +デフォルトでは、XJCバインディング・コンパイラは、JAXB仕様のCompatibilityの章で説明されているルールを厳密に強制します。付録E\&.2には、JAXB v1\&.0で完全にはサポートされていない一連のW3C XMLスキーマ機能が定義されています。場合によっては、このスイッチで有効になる\fI\-extension\fRモードでそれらの機能が使用できる場合があります。また、デフォルトの厳密なモードでは、仕様に定義されているバインディング・カスタマイズのみが使用できます。\fI\-extension\fRスイッチを指定すれば、JAXB Vendor Extensionを使用できます。 .RE -.TP 2 -o -名前空間ごとに複数の <\f2jaxb:schemaBindings\fP> を持つことは不正です。このため、1 つのターゲット名前空間内の 2 つのスキーマを異なる Java パッケージにコンパイルすることはできません。 -.TP 2 -o -1 つの Java パッケージにコンパイルされるすべてのスキーマは、XJC バインディングコンパイラに同時に送信する必要があります。個別にコンパイルすることはできず、予期したとおりに動作しません。 -.TP 2 -o -複数のスキーマファイルにまたがる要素置換グループは、同時にコンパイルする必要があります。 +.PP +\-b \fIfile\fR +.RS 4 +処理する外部バインディング・ファイルを1つまたは複数指定します。バインディング・ファイルごとに\fI\-b\fRスイッチを指定する必要があります。外部バインディング・ファイルの構文は柔軟です。複数のスキーマのカスタマイズが含まれる1つのバインディング・ファイルを使用したり、それらのカスタマイズを複数のバインディング・ファイルに分割したりできます。次に例を示します。\fIxjc schema1\&.xsd schema2\&.xsd schema3\&.xsd \-b bindings123\&.xjb\fR +\fIxjc schema1\&.xsd schema2\&.xsd schema3\&.xsd \-b bindings1\&.xjb \-b bindings2\&.xjb \-b bindings3\&.xjb\fRまた、コマンドラインにスキーマ・ファイルとバインディング・ファイルを指定する順番は任意です。 .RE - -.LP +.PP +\-d \fIdir\fR +.RS 4 +デフォルトでは、XJCバインディング・コンパイラは、Javaコンテンツ・クラスを現在のディレクトリに生成します。このオプションを使用すると、代替出力ディレクトリを指定できます。出力ディレクトリはすでに存在している必要があります。XJCバインディング・コンパイラでは作成されません。 +.RE +.PP +\-p \fIpkg\fR +.RS 4 +このコマンドライン・オプションでターゲット・パッケージを指定した場合、その指定内容は、パッケージ名に対するすべてのバインディング・カスタマイズや、仕様で規定されているデフォルトのパッケージ名アルゴリズムよりも優先されます。 +.RE +.PP +\-httpproxy \fIproxy\fR +.RS 4 +\fI[user[:password]@]proxyHost[:proxyPort]\fR形式でHTTPまたはHTTPSプロキシを指定します。古い\fI\-host\fRおよび\fI\-port\fRオプションは、下位互換性のために引き続きRIでサポートされますが、非推奨となりました。このオプションで指定されたパスワードは、topコマンドを使用する他のユーザーが表示できる引数です。セキュリティを高めるには、\fI\-httpproxyfile\fRを使用してください。 +.RE +.PP +\-httpproxyfile file +.RS 4 +ファイルを使用して、HTTPまたはHTTPSプロキシを指定します。形式は\fI\-httpproxy\fRオプションと同じですが、このファイル内に指定されたパスワードを他のユーザーが表示することはできません。 +.RE +.PP +\-classpath arg +.RS 4 +\fIjxb:javaType\fRおよびxjc:\fIsuperClass\fRカスタマイズが使用するクライアント・アプリケーションのクラス・ファイルの検索場所を指定します。 +.RE +.PP +\-catalog file +.RS 4 +外部エンティティ参照を解決するカタログ・ファイルを指定します。TR9401、XCatalogおよびOASIS XML Catalogの各形式がサポートされます。http://xerces\&.apache\&.org/xml\-commons/components/resolver/resolver\-article\&.htmlの +XML Entity and URI Resolversを参照してください +.RE +.PP +\-readOnly +.RS 4 +デフォルトでは、XJCバインディング・コンパイラは、生成するJavaソース・ファイルを書込みから保護しません。このオプションを使用すると、XJCバインディング・コンパイラは生成されるJavaソースを強制的に読取り専用にします。 +.RE +.PP +\-npa +.RS 4 +\fI**/package\-info\&.java\fRへのパッケージ・レベルの注釈の生成を抑制します。このスイッチを使用して生成するコードでは、これらの注釈が他の生成済クラスに内部化されます。 +.RE +.PP +\-no\-header +.RS 4 +多少のメモとタイムスタンプを含むファイル・ヘッダー・コメントの生成を抑制します。これを使用すると、生成されたコードと\fIdiff\fRコマンドとの互換性がより強くなります。 +.RE +.PP +\-target 2\&.0 +.RS 4 +JAXB 2\&.1機能に依存するコードを生成しないようにします。これにより、生成されたコードをJAXB 2\&.0ランタイム環境(Java SE 6など)で実行できるようになります。 +.RE +.PP +\-xmlschema +.RS 4 +入力スキーマをW3C XMLスキーマとして扱います(デフォルト)。このスイッチを指定しない場合、入力スキーマはW3C XMLスキーマと同じように扱われます。 +.RE +.PP +\-relaxing +.RS 4 +入力スキーマをRELAX NGとして扱います(試験的および未サポート)。RELAX NGスキーマのサポートはJAXB Vendor Extensionとして提供されています。 +.RE +.PP +\-relaxing\-compact +.RS 4 +入力スキーマをRELAX NG圧縮構文として処理します(試験的および未サポート)。RELAX NGスキーマのサポートはJAXB Vendor Extensionとして提供されています。 +.RE +.PP +\-dtd +.RS 4 +入力スキーマをXML DTDとして扱います(試験的および未サポート)。RELAX NGスキーマのサポートはJAXB Vendor Extensionとして提供されています。 +.RE +.PP +\-wsdl +.RS 4 +入力をWSDLとして扱い、その内部のスキーマをコンパイルします(試験的および未サポート)。 +.RE +.PP +\-quiet +.RS 4 +進捗情報や警告など、コンパイラの出力を抑制します。 +.RE +.PP +\-verbose +.RS 4 +情報メッセージを出力したり特定のエラー発生時にスタック・トレースを表示したりするなど、きわめて冗長になります。 +.RE +.PP +\-help +.RS 4 +コンパイラ・スイッチのサマリーを表示します。 +.RE +.PP +\-version +.RS 4 +コンパイラのバージョン情報を表示します。 +.RE +.PP +\fIschema file/URL/dir\fR +.RS 4 +コンパイル対象となる1つまたは複数のスキーマ・ファイルを指定します。ディレクトリを指定する場合、\fIxjc\fRコマンドはすべてのスキーマ・ファイルをスキャンしてコンパイルします。 +.RE +.SS "非標準オプション" +.PP +\-XLocator +.RS 4 +生成されたコードでは、非整列化の後にJava Beanインスタンスに含まれるソースXMLに関するSAX Locator情報が公開されます。 +.RE +.PP +\-Xsync\-methods +.RS 4 +生成されたすべてのメソッド・シグニチャに\fIsynchronized\fRキーワードが含められます。 +.RE +.PP +\-mark\-generated +.RS 4 +生成されたコードに注釈\fI@javax\&.annotation\&.Generated\fRを付けます。 +.RE +.PP +\-episode file +.RS 4 +コンパイルごとに指定されたエピソード・ファイルを生成します。 +.RE +.SS "非推奨で削除されたオプション" +.PP +\-host & \-port +.RS 4 +これらのオプションは\fI\-httpproxy\fRオプションで置き換えられました。これらのオプションは、下位互換性を確保するためにサポートされますが、ドキュメントには記載されず、将来のリリースで削除される可能性もあります。 +.RE +.PP +\-use\-runtime +.RS 4 +JAXB 2\&.0仕様では、移植性のあるランタイム環境が定義されたため、JAXB RIが\fI**/impl/runtime \fRパッケージを生成する必要がなくなりました。このため、このスイッチは不要となり、削除されました。 +.RE +.PP +\-source +.RS 4 +\fI\-source\fR互換性スイッチは、JAXB 2\&.0の最初のEarly Access版で導入されました。このスイッチはJAXB 2\&.0の今後のリリースから削除されます。1\&.0\&.xコードを生成する必要がある場合は、1\&.0\&.xコード・ベースのインストールを使用してください。 +.RE +.SH "コンパイラの制限" +.PP +通常は、関連するすべてのスキーマを、同じバインディング・コンパイラ・スイッチを指定して1つの単位としてコンパイルするのが最も安全です。\fIxjc\fRコマンドの実行時には、次の制限リストに留意してください。これらの問題のほとんどは、\fIxjc\fRコマンドを何度か呼び出して複数のスキーマをコンパイルする場合にのみ当てはまります。 +.PP +複数のスキーマを同時にコンパイルする場合は、ターゲットのJavaパッケージ名に次の優先順位のルールが適用されることに注意してください。 +.sp +.RS 4 +.ie n \{\ +\h'-04' 1.\h'+01'\c +.\} +.el \{\ +.sp -1 +.IP " 1." 4.2 +.\} +\fI\-p\fRオプションが最も優先されます。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04' 2.\h'+01'\c +.\} +.el \{\ +.sp -1 +.IP " 2." 4.2 +.\} +\fIjaxb:package\fRのカスタマイズ。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04' 3.\h'+01'\c +.\} +.el \{\ +.sp -1 +.IP " 3." 4.2 +.\} +\fItargetNamespace\fRが宣言されている場合は、\fIt\fR\fIargetNamespace\fRを仕様で定義されているJavaパッケージ名のアルゴリズムに適用します。 +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04' 4.\h'+01'\c +.\} +.el \{\ +.sp -1 +.IP " 4." 4.2 +.\} +\fItargetNamespace\fRが宣言されていない場合は、\fIgenerated\fRという名前のハードコードされたパッケージを使用します。 +.RE +.PP +1つのネームスペースが複数の\fIjaxb:schemaBindings\fRを持つことはできないため、異なるJavaパッケージにコンパイラされる同一ターゲット・ネームスペースが2つのスキーマを持つことはできません。 +.PP +同じJavaパッケージにコンパイラされるスキーマはすべて、同時にXJCバインディング・コンパイラに送信される必要があります。別々にコンパイルすると、予想どおりに機能しません。 +.PP +複数のスキーマ・ファイルにまたがる要素置換グループは、同時にコンパイルする必要があります。 .SH "関連項目" -.LP -.RS 3 -.TP 2 -o -コマンド行でのコンバータの実行 (XJC): [ -.na -\f2コマンド行の命令\fP @ -.fi -https://jaxb.dev.java.net/nonav/2.1.3/docs/xjc.html、 -.na -\f2xjc を Ant とともに使用する\fP @ -.fi -https://jaxb.dev.java.net/nonav/2.1.3/docs/xjcTask.html] -.TP 2 -o -.na -\f2XML バインドのための Java アーキテクチャー (JAXB)\fP @ -.fi -http://java.sun.com/javase/6/docs/technotes/guides/xml/jaxb/index.html +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +http://jaxb\&.java\&.net/nonav/2\&.2\&.3u1/docs/xjc\&.htmlの +Binding Compiler (xjc) .RE - -.LP - +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +http://www\&.oracle\&.com/technetwork/articles/javase/index\-140168\&.htmlの +Java Architecture for XML Binding (JAXB) +.RE +.br +'pl 8.5i +'bp From 92c1290d36852f2e1a59603470ec6ee2d7d1f14f Mon Sep 17 00:00:00 2001 From: Erik Joelsson <erikj@openjdk.org> Date: Fri, 10 Jan 2014 10:25:54 +0100 Subject: [PATCH 111/116] 8031300: No jdeps.1 and jjs.1 man pages in jdk8 b122 build and jvisualvm.1 and jcmd.1 missing on macosx 8030946: No jmc.1 for man page of JMC Reviewed-by: ihse, tbell --- jdk/make/Images.gmk | 13 ++++++++----- jdk/src/bsd/doc/man/ja/jcmd.1 | 24 ++++++++++++++++++++++++ jdk/src/bsd/doc/man/ja/jdeps.1 | 24 ++++++++++++++++++++++++ jdk/src/bsd/doc/man/ja/jjs.1 | 24 ++++++++++++++++++++++++ jdk/src/bsd/doc/man/ja/kinit.1 | 25 ------------------------- jdk/src/bsd/doc/man/ja/klist.1 | 24 ------------------------ jdk/src/bsd/doc/man/ja/ktab.1 | 24 ------------------------ 7 files changed, 80 insertions(+), 78 deletions(-) create mode 100644 jdk/src/bsd/doc/man/ja/jcmd.1 create mode 100644 jdk/src/bsd/doc/man/ja/jdeps.1 create mode 100644 jdk/src/bsd/doc/man/ja/jjs.1 delete mode 100644 jdk/src/bsd/doc/man/ja/kinit.1 delete mode 100644 jdk/src/bsd/doc/man/ja/klist.1 delete mode 100644 jdk/src/bsd/doc/man/ja/ktab.1 diff --git a/jdk/make/Images.gmk b/jdk/make/Images.gmk index e7264b39622..43dc67017d6 100644 --- a/jdk/make/Images.gmk +++ b/jdk/make/Images.gmk @@ -305,6 +305,7 @@ $(JDK_IMAGE_DIR)/jre/lib/ext/meta-index: $(JDKJRE_LIB_TARGETS) ifneq ($(OPENJDK_TARGET_OS), windows) JRE_MAN_PAGES := \ java.1 \ + jjs.1 \ keytool.1 \ orbd.1 \ pack200.1 \ @@ -335,6 +336,7 @@ ifneq ($(OPENJDK_TARGET_OS), windows) jconsole.1 \ jcmd.1 \ jdb.1 \ + jdeps.1 \ jhat.1 \ jinfo.1 \ jmap.1 \ @@ -353,7 +355,10 @@ ifneq ($(OPENJDK_TARGET_OS), windows) xjc.1 ifndef OPENJDK - JDK_MAN_PAGES += jvisualvm.1 + JDK_MAN_PAGES += \ + jvisualvm.1 \ + jmc.1 \ + # endif # This variable is potentially overridden in the closed makefile. @@ -366,15 +371,13 @@ ifneq ($(OPENJDK_TARGET_OS), windows) ifeq ($(OPENJDK_TARGET_OS), solaris) MAN_SRC_DIR := $(MAN_SRC_BASEDIR)/solaris/doc MAN1_SUBDIR := sun/man/man1 + JDK_MAN_PAGES := $(filter-out jmc.1, $(JDK_MAN_PAGES)) endif ifeq ($(OPENJDK_TARGET_OS), macosx) MAN_SRC_DIR := $(MAN_SRC_BASEDIR)/bsd/doc MAN1_SUBDIR := man - JDK_MAN_PAGES := $(filter-out jcmd.1, $(JDK_MAN_PAGES)) - JDK_MAN_PAGES := $(filter-out jvisualvm.1, $(JDK_MAN_PAGES)) endif - $(JRE_IMAGE_DIR)/man/man1/%: $(MAN_SRC_DIR)/$(MAN1_SUBDIR)/% $(ECHO) $(LOG_INFO) Copying $(patsubst $(OUTPUT_ROOT)/%,%,$@) $(install-file) @@ -453,7 +456,7 @@ ifneq ($(OPENJDK_TARGET_OS), windows) JDK_MAN_PAGE_LIST := $(addprefix $(JDK_IMAGE_DIR)/man/man1/, $(JDK_MAN_PAGES)) \ $(addprefix $(JDK_IMAGE_DIR)/man/ja_JP.UTF-8/man1/, $(JDK_MAN_PAGES)) \ - $(JDK_IMAGE_DIR)/man/ja + $(JDK_IMAGE_DIR)/man/ja endif ifeq ($(OPENJDK_TARGET_OS), solaris) diff --git a/jdk/src/bsd/doc/man/ja/jcmd.1 b/jdk/src/bsd/doc/man/ja/jcmd.1 new file mode 100644 index 00000000000..a281da552eb --- /dev/null +++ b/jdk/src/bsd/doc/man/ja/jcmd.1 @@ -0,0 +1,24 @@ +." Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. +." DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +." +." This code is free software; you can redistribute it and/or modify it +." under the terms of the GNU General Public License version 2 only, as +." published by the Free Software Foundation. +." +." This code is distributed in the hope that it will be useful, but WITHOUT +." ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +." FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +." version 2 for more details (a copy is included in the LICENSE file that +." accompanied this code). +." +." You should have received a copy of the GNU General Public License version +." 2 along with this work; if not, write to the Free Software Foundation, +." Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +." +." Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +." or visit www.oracle.com if you need additional information or have any +." questions. +." +.TH jcmd 1 "07 May 2011" + +.LP diff --git a/jdk/src/bsd/doc/man/ja/jdeps.1 b/jdk/src/bsd/doc/man/ja/jdeps.1 new file mode 100644 index 00000000000..58949352aa3 --- /dev/null +++ b/jdk/src/bsd/doc/man/ja/jdeps.1 @@ -0,0 +1,24 @@ +." Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. +." DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +." +." This code is free software; you can redistribute it and/or modify it +." under the terms of the GNU General Public License version 2 only, as +." published by the Free Software Foundation. +." +." This code is distributed in the hope that it will be useful, but WITHOUT +." ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +." FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +." version 2 for more details (a copy is included in the LICENSE file that +." accompanied this code). +." +." You should have received a copy of the GNU General Public License version +." 2 along with this work; if not, write to the Free Software Foundation, +." Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +." +." Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +." or visit www.oracle.com if you need additional information or have any +." questions. +." +.TH jdeps 1 "07 May 2011" + +.LP diff --git a/jdk/src/bsd/doc/man/ja/jjs.1 b/jdk/src/bsd/doc/man/ja/jjs.1 new file mode 100644 index 00000000000..c57b30ab161 --- /dev/null +++ b/jdk/src/bsd/doc/man/ja/jjs.1 @@ -0,0 +1,24 @@ +." Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. +." DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +." +." This code is free software; you can redistribute it and/or modify it +." under the terms of the GNU General Public License version 2 only, as +." published by the Free Software Foundation. +." +." This code is distributed in the hope that it will be useful, but WITHOUT +." ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +." FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +." version 2 for more details (a copy is included in the LICENSE file that +." accompanied this code). +." +." You should have received a copy of the GNU General Public License version +." 2 along with this work; if not, write to the Free Software Foundation, +." Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +." +." Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +." or visit www.oracle.com if you need additional information or have any +." questions. +." +.TH jjs 1 "07 May 2011" + +.LP diff --git a/jdk/src/bsd/doc/man/ja/kinit.1 b/jdk/src/bsd/doc/man/ja/kinit.1 deleted file mode 100644 index e78964daf58..00000000000 --- a/jdk/src/bsd/doc/man/ja/kinit.1 +++ /dev/null @@ -1,25 +0,0 @@ -'\" t -.\" -.\" Copyright 2002-2004 Sun Microsystems, Inc. All Rights Reserved. -.\" DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -.\" -.\" This code is free software; you can redistribute it and/or modify it -.\" under the terms of the GNU General Public License version 2 only, as -.\" published by the Free Software Foundation. -.\" -.\" This code is distributed in the hope that it will be useful, but WITHOUT -.\" ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -.\" FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -.\" version 2 for more details (a copy is included in the LICENSE file that -.\" accompanied this code). -.\" -.\" You should have received a copy of the GNU General Public License version -.\" 2 along with this work; if not, write to the Free Software Foundation, -.\" Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -.\" -.\" Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -.\" or visit www.oracle.com if you need additional information or have any -.\" questions. -.\" -.\" -.\" diff --git a/jdk/src/bsd/doc/man/ja/klist.1 b/jdk/src/bsd/doc/man/ja/klist.1 deleted file mode 100644 index 5ab393b3cc9..00000000000 --- a/jdk/src/bsd/doc/man/ja/klist.1 +++ /dev/null @@ -1,24 +0,0 @@ -'\" t -.\" -.\" Copyright 2002-2004 Sun Microsystems, Inc. All Rights Reserved. -.\" DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -.\" -.\" This code is free software; you can redistribute it and/or modify it -.\" under the terms of the GNU General Public License version 2 only, as -.\" published by the Free Software Foundation. -.\" -.\" This code is distributed in the hope that it will be useful, but WITHOUT -.\" ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -.\" FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -.\" version 2 for more details (a copy is included in the LICENSE file that -.\" accompanied this code). -.\" -.\" You should have received a copy of the GNU General Public License version -.\" 2 along with this work; if not, write to the Free Software Foundation, -.\" Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -.\" -.\" Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -.\" or visit www.oracle.com if you need additional information or have any -.\" questions. -.\" -.\" diff --git a/jdk/src/bsd/doc/man/ja/ktab.1 b/jdk/src/bsd/doc/man/ja/ktab.1 deleted file mode 100644 index 5ab393b3cc9..00000000000 --- a/jdk/src/bsd/doc/man/ja/ktab.1 +++ /dev/null @@ -1,24 +0,0 @@ -'\" t -.\" -.\" Copyright 2002-2004 Sun Microsystems, Inc. All Rights Reserved. -.\" DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -.\" -.\" This code is free software; you can redistribute it and/or modify it -.\" under the terms of the GNU General Public License version 2 only, as -.\" published by the Free Software Foundation. -.\" -.\" This code is distributed in the hope that it will be useful, but WITHOUT -.\" ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -.\" FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -.\" version 2 for more details (a copy is included in the LICENSE file that -.\" accompanied this code). -.\" -.\" You should have received a copy of the GNU General Public License version -.\" 2 along with this work; if not, write to the Free Software Foundation, -.\" Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -.\" -.\" Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -.\" or visit www.oracle.com if you need additional information or have any -.\" questions. -.\" -.\" From 278ed96ea70d0523555df17bd625202eca3effd8 Mon Sep 17 00:00:00 2001 From: Erik Joelsson <erikj@openjdk.org> Date: Mon, 31 Mar 2014 11:09:04 +0200 Subject: [PATCH 112/116] 8032217: failure in man page processing Reviewed-by: dholmes, tbell --- jdk/make/Images.gmk | 48 ++++++++++++++++++++++----------------------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/jdk/make/Images.gmk b/jdk/make/Images.gmk index 43dc67017d6..5a3aa249114 100644 --- a/jdk/make/Images.gmk +++ b/jdk/make/Images.gmk @@ -301,9 +301,13 @@ $(JDK_IMAGE_DIR)/jre/lib/ext/meta-index: $(JDKJRE_LIB_TARGETS) ################################################################################ # /man dir +# +# All variables in this section are assigned with simple =, without :, to enable +# more selective overriding from the custom version of this file. +# # Avoid evaluating this whole section on windows for speed and stability ifneq ($(OPENJDK_TARGET_OS), windows) - JRE_MAN_PAGES := \ + JRE_MAN_PAGES = \ java.1 \ jjs.1 \ keytool.1 \ @@ -354,28 +358,20 @@ ifneq ($(OPENJDK_TARGET_OS), windows) wsimport.1 \ xjc.1 - ifndef OPENJDK - JDK_MAN_PAGES += \ - jvisualvm.1 \ - jmc.1 \ - # - endif - # This variable is potentially overridden in the closed makefile. MAN_SRC_BASEDIR ?= $(JDK_TOPDIR)/src ifeq ($(OPENJDK_TARGET_OS), linux) - MAN_SRC_DIR := $(MAN_SRC_BASEDIR)/linux/doc - MAN1_SUBDIR := man + MAN_SRC_DIR = $(MAN_SRC_BASEDIR)/linux/doc + MAN1_SUBDIR = man endif ifeq ($(OPENJDK_TARGET_OS), solaris) - MAN_SRC_DIR := $(MAN_SRC_BASEDIR)/solaris/doc - MAN1_SUBDIR := sun/man/man1 - JDK_MAN_PAGES := $(filter-out jmc.1, $(JDK_MAN_PAGES)) + MAN_SRC_DIR = $(MAN_SRC_BASEDIR)/solaris/doc + MAN1_SUBDIR = sun/man/man1 endif ifeq ($(OPENJDK_TARGET_OS), macosx) - MAN_SRC_DIR := $(MAN_SRC_BASEDIR)/bsd/doc - MAN1_SUBDIR := man + MAN_SRC_DIR = $(MAN_SRC_BASEDIR)/bsd/doc + MAN1_SUBDIR = man endif $(JRE_IMAGE_DIR)/man/man1/%: $(MAN_SRC_DIR)/$(MAN1_SUBDIR)/% @@ -450,33 +446,33 @@ ifneq ($(OPENJDK_TARGET_OS), windows) endif ifeq ($(OPENJDK_TARGET_OS), linux) - JRE_MAN_PAGE_LIST := $(addprefix $(JRE_IMAGE_DIR)/man/man1/, $(JRE_MAN_PAGES)) \ + JRE_MAN_PAGE_LIST = $(addprefix $(JRE_IMAGE_DIR)/man/man1/, $(JRE_MAN_PAGES)) \ $(addprefix $(JRE_IMAGE_DIR)/man/ja_JP.UTF-8/man1/, $(JRE_MAN_PAGES)) \ $(JRE_IMAGE_DIR)/man/ja - JDK_MAN_PAGE_LIST := $(addprefix $(JDK_IMAGE_DIR)/man/man1/, $(JDK_MAN_PAGES)) \ + JDK_MAN_PAGE_LIST = $(addprefix $(JDK_IMAGE_DIR)/man/man1/, $(JDK_MAN_PAGES)) \ $(addprefix $(JDK_IMAGE_DIR)/man/ja_JP.UTF-8/man1/, $(JDK_MAN_PAGES)) \ $(JDK_IMAGE_DIR)/man/ja endif ifeq ($(OPENJDK_TARGET_OS), solaris) - JRE_MAN_PAGE_LIST := $(addprefix $(JRE_IMAGE_DIR)/man/man1/, $(JRE_MAN_PAGES)) \ + JRE_MAN_PAGE_LIST = $(addprefix $(JRE_IMAGE_DIR)/man/man1/, $(JRE_MAN_PAGES)) \ $(addprefix $(JRE_IMAGE_DIR)/man/ja/man1/, $(JRE_MAN_PAGES)) \ $(addprefix $(JRE_IMAGE_DIR)/man/ja_JP.UTF-8/man1/, $(JRE_MAN_PAGES)) \ $(addprefix $(JRE_IMAGE_DIR)/man/ja_JP.PCK/man1/, $(JRE_MAN_PAGES)) - JDK_MAN_PAGE_LIST := $(addprefix $(JDK_IMAGE_DIR)/man/man1/, $(JDK_MAN_PAGES)) \ + JDK_MAN_PAGE_LIST = $(addprefix $(JDK_IMAGE_DIR)/man/man1/, $(JDK_MAN_PAGES)) \ $(addprefix $(JDK_IMAGE_DIR)/man/ja/man1/, $(JDK_MAN_PAGES)) \ $(addprefix $(JDK_IMAGE_DIR)/man/ja_JP.UTF-8/man1/, $(JDK_MAN_PAGES)) \ $(addprefix $(JDK_IMAGE_DIR)/man/ja_JP.PCK/man1/, $(JDK_MAN_PAGES)) endif ifeq ($(OPENJDK_TARGET_OS), macosx) - JRE_MAN_PAGE_LIST := $(addprefix $(JRE_IMAGE_DIR)/man/man1/, $(JRE_MAN_PAGES)) \ + JRE_MAN_PAGE_LIST = $(addprefix $(JRE_IMAGE_DIR)/man/man1/, $(JRE_MAN_PAGES)) \ $(addprefix $(JRE_IMAGE_DIR)/man/ja_JP.UTF-8/man1/, $(JRE_MAN_PAGES)) \ $(JRE_IMAGE_DIR)/man/ja - JDK_MAN_PAGE_LIST := $(addprefix $(JDK_IMAGE_DIR)/man/man1/, $(JDK_MAN_PAGES)) \ + JDK_MAN_PAGE_LIST = $(addprefix $(JDK_IMAGE_DIR)/man/man1/, $(JDK_MAN_PAGES)) \ $(addprefix $(JDK_IMAGE_DIR)/man/ja_JP.UTF-8/man1/, $(JDK_MAN_PAGES)) \ $(JDK_IMAGE_DIR)/man/ja endif @@ -730,6 +726,13 @@ ifneq ($(POST_STRIP_CMD), ) endif +################################################################################ + +# Include the custom makefile right here, after all variables have been defined +# so that they may be overridden, but before the main targets are declared, so +# that overriding has an effect. +$(eval $(call IncludeCustomExtension, jdk, Images.gmk)) + ################################################################################ # Main targets @@ -779,6 +782,3 @@ endif # Profile ################################################################################ .PHONY: default images jre-image jdk-image - -# Hook to include the corresponding custom file, if present. -$(eval $(call IncludeCustomExtension, jdk, Images.gmk)) From e7aed7416578cbf15420d375c2a620d592eabd07 Mon Sep 17 00:00:00 2001 From: Staffan Larsen <sla@openjdk.org> Date: Mon, 31 Mar 2014 11:28:03 +0200 Subject: [PATCH 113/116] 8037345: com/sun/jdi/* tests can fail, with race condition on log files Reviewed-by: sspitsyn, dcubed --- jdk/test/com/sun/jdi/ShellScaffold.sh | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/jdk/test/com/sun/jdi/ShellScaffold.sh b/jdk/test/com/sun/jdi/ShellScaffold.sh index eb3b65bf30b..16c41eae056 100644 --- a/jdk/test/com/sun/jdi/ShellScaffold.sh +++ b/jdk/test/com/sun/jdi/ShellScaffold.sh @@ -908,7 +908,7 @@ startDebuggee() debuggeepid= waitForJdbMsg Listening 4 - beOption="-agentlib:jdwp=transport=$transport,address=$address,server=n,suspend=y" + beOption="-agentlib:jdwp=transport=$transport,address=$address,server=n,suspend=y" # beOption="-Xdebug -Xrunjdwp:transport=$transport,address=$address,server=n,suspend=y" thecmd="$jdk/bin/$java $mode -classpath $tmpFileDir $baseArgs $args \ @@ -976,14 +976,20 @@ waitForFinish() if [ $? != 0 ] ; then break fi + if [ ! -z "$isWin98" ] ; then $psCmd | $grep -i 'JDB\.EXE' >$devnull 2>&1 if [ $? != 0 ] ; then break fi fi - # Something went wrong - jdbFailIfPresent "Input stream closed" + + # (Don't use jdbFailIfPresent here since it is not safe + # to call from different processes) + $grep -s 'Input stream closed' $jdbOutFile > $devnull 2>&1 + if [ $? = 0 ] ; then + dofail "jdb input stream closed prematurely" + fi # If a failure has occured, quit if [ -r "$failFile" ] ; then @@ -994,7 +1000,12 @@ waitForFinish() done # jdb exited because its input stream closed prematurely - jdbFailIfPresent "Input stream closed" + # (Don't use jdbFailIfPresent here since it is not safe + # to call from different processes) + $grep -s 'Input stream closed' $jdbOutFile > $devnull 2>&1 + if [ $? = 0 ] ; then + dofail "jdb input stream closed prematurely" + fi # It is necessary here to avoid the situation when JDB exited but # mydojdbCmds() didn't finish because it waits for JDB message @@ -1085,6 +1096,7 @@ grepForString() fi unset theFile esac + return $stat } From 804d26e749127b0ee97105dafe18631345500e34 Mon Sep 17 00:00:00 2001 From: Chris Hegarty <chegar@openjdk.org> Date: Mon, 31 Mar 2014 11:33:40 +0100 Subject: [PATCH 114/116] 8025209: Intermittent test failure java/net/Socket/asyncClose/AsyncClose.java Co-authored-by: Eric Wang <yiming.wang@oracle.com> Reviewed-by: chegar --- .../net/Socket/asyncClose/AsyncClose.java | 33 +++++---- .../net/Socket/asyncClose/AsyncCloseTest.java | 19 ++++- .../asyncClose/DatagramSocket_receive.java | 68 +++++++++-------- .../asyncClose/ServerSocket_accept.java | 48 +++++++----- .../Socket_getInputStream_read.java | 74 +++++++++---------- .../Socket_getOutputStream_write.java | 62 +++++++++------- 6 files changed, 171 insertions(+), 133 deletions(-) diff --git a/jdk/test/java/net/Socket/asyncClose/AsyncClose.java b/jdk/test/java/net/Socket/asyncClose/AsyncClose.java index db9dddf791d..4de5d4851d6 100644 --- a/jdk/test/java/net/Socket/asyncClose/AsyncClose.java +++ b/jdk/test/java/net/Socket/asyncClose/AsyncClose.java @@ -21,15 +21,17 @@ * questions. */ +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.CompletableFuture; +import static java.util.concurrent.CompletableFuture.*; + /* * @test * @bug 4344135 * @summary Check that {Socket,ServerSocket,DatagramSocket}.close will * cause any thread blocked on the socket to throw a SocketException. - * @run main/timeout=60 AsyncClose */ -import java.net.*; -import java.io.*; public class AsyncClose { @@ -37,34 +39,35 @@ public class AsyncClose { AsyncCloseTest tests[] = { new Socket_getInputStream_read(), - new Socket_getInputStream_read(5000), + new Socket_getInputStream_read(20000), new Socket_getOutputStream_write(), new DatagramSocket_receive(), - new DatagramSocket_receive(5000), + new DatagramSocket_receive(20000), new ServerSocket_accept(), - new ServerSocket_accept(5000), + new ServerSocket_accept(20000), }; int failures = 0; - for (int i=0; i<tests.length; i++) { - AsyncCloseTest tst = tests[i]; + List<CompletableFuture<AsyncCloseTest>> cfs = new ArrayList<>(); + for (AsyncCloseTest test : tests) + cfs.add( supplyAsync(() -> test.go())); + + for (CompletableFuture<AsyncCloseTest> cf : cfs) { + AsyncCloseTest test = cf.get(); System.out.println("******************************"); - System.out.println("Test: " + tst.description()); - - if (tst.go()) { + System.out.println("Test: " + test.description()); + if (test.hasPassed()) { System.out.println("Passed."); } else { - System.out.println("Failed: " + tst.failureReason()); + System.out.println("Failed: " + test.failureReason()); failures++; } System.out.println(""); - } - if (failures > 0) { + if (failures > 0) throw new Exception(failures + " sub-tests failed - see log."); - } } } diff --git a/jdk/test/java/net/Socket/asyncClose/AsyncCloseTest.java b/jdk/test/java/net/Socket/asyncClose/AsyncCloseTest.java index ef6fc43dd99..e7fd6fc5979 100644 --- a/jdk/test/java/net/Socket/asyncClose/AsyncCloseTest.java +++ b/jdk/test/java/net/Socket/asyncClose/AsyncCloseTest.java @@ -29,11 +29,22 @@ public abstract class AsyncCloseTest { public abstract String description(); - public abstract boolean go() throws Exception; + public abstract AsyncCloseTest go(); + public synchronized boolean hasPassed() { + return passed; + } - protected synchronized void failed(String reason) { - this.reason = reason; + protected synchronized AsyncCloseTest passed() { + if (reason == null) + passed = true; + return this; + } + + protected synchronized AsyncCloseTest failed(String r) { + passed = false; + reason = r; + return this; } public synchronized String failureReason() { @@ -48,7 +59,7 @@ public abstract class AsyncCloseTest { return closed; } + private boolean passed; private String reason; private boolean closed; - } diff --git a/jdk/test/java/net/Socket/asyncClose/DatagramSocket_receive.java b/jdk/test/java/net/Socket/asyncClose/DatagramSocket_receive.java index b35ebdff8ed..48a842e30d2 100644 --- a/jdk/test/java/net/Socket/asyncClose/DatagramSocket_receive.java +++ b/jdk/test/java/net/Socket/asyncClose/DatagramSocket_receive.java @@ -26,20 +26,25 @@ * throws a SocketException if the socket is asynchronously closed. */ import java.net.*; +import java.util.concurrent.CountDownLatch; public class DatagramSocket_receive extends AsyncCloseTest implements Runnable { - DatagramSocket s; - int timeout = 0; + private final DatagramSocket s; + private final int timeout; + private final CountDownLatch latch; - public DatagramSocket_receive() { + public DatagramSocket_receive() throws SocketException { + this(0); } - public DatagramSocket_receive(int timeout) { + public DatagramSocket_receive(int timeout) throws SocketException { this.timeout = timeout; + latch = new CountDownLatch(1); + s = new DatagramSocket(); } public String description() { - String s = "DatagramSocket.receive"; + String s = "DatagramSocket.receive(DatagramPacket)"; if (timeout > 0) { s += " (timeout specified)"; } @@ -47,46 +52,45 @@ public class DatagramSocket_receive extends AsyncCloseTest implements Runnable { } public void run() { - DatagramPacket p; try { - byte b[] = new byte[1024]; - p = new DatagramPacket(b, b.length); - + DatagramPacket p = new DatagramPacket(b, b.length); if (timeout > 0) { s.setSoTimeout(timeout); } - } catch (Exception e) { - failed(e.getMessage()); - return; - } - - try { + latch.countDown(); s.receive(p); + failed("DatagramSocket.receive(DatagramPacket) returned unexpectly!!"); } catch (SocketException se) { - closed(); + if (latch.getCount() != 1) { + closed(); + } } catch (Exception e) { failed(e.getMessage()); + } finally { + if (latch.getCount() == 1) { + latch.countDown(); + } } } - public boolean go() throws Exception { - s = new DatagramSocket(); + public AsyncCloseTest go() { + try { + Thread thr = new Thread(this); + thr.start(); + latch.await(); + Thread.sleep(5000); //sleep, so receive(DatagramPacket) can block + s.close(); + thr.join(); - Thread thr = new Thread(this); - thr.start(); - - Thread.currentThread().sleep(1000); - - s.close(); - - Thread.currentThread().sleep(1000); - - if (isClosed()) { - return true; - } else { - failed("DatagramSocket.receive wasn't preempted"); - return false; + if (isClosed()) { + return passed(); + } else { + return failed("DatagramSocket.receive(DatagramPacket) wasn't preempted"); + } + } catch (Exception x) { + failed(x.getMessage()); + throw new RuntimeException(x); } } } diff --git a/jdk/test/java/net/Socket/asyncClose/ServerSocket_accept.java b/jdk/test/java/net/Socket/asyncClose/ServerSocket_accept.java index 07fbcc95ae5..0461ba58f8a 100644 --- a/jdk/test/java/net/Socket/asyncClose/ServerSocket_accept.java +++ b/jdk/test/java/net/Socket/asyncClose/ServerSocket_accept.java @@ -25,17 +25,23 @@ * Tests that a thread blocked in ServerSocket.accept * throws a SocketException if the socket is asynchronously closed. */ +import java.io.IOException; import java.net.*; +import java.util.concurrent.CountDownLatch; public class ServerSocket_accept extends AsyncCloseTest implements Runnable { - ServerSocket ss; - int timeout = 0; + private final ServerSocket ss; + private final int timeout; + private final CountDownLatch latch; - public ServerSocket_accept() { + public ServerSocket_accept() throws IOException { + this(0); } - public ServerSocket_accept(int timeout) { + public ServerSocket_accept(int timeout) throws IOException { this.timeout = timeout; + latch = new CountDownLatch(1); + ss = new ServerSocket(0); } public String description() { @@ -48,7 +54,9 @@ public class ServerSocket_accept extends AsyncCloseTest implements Runnable { public void run() { try { + latch.countDown(); Socket s = ss.accept(); + failed("ServerSocket.accept() returned unexpectly!!"); } catch (SocketException se) { closed(); } catch (Exception e) { @@ -56,23 +64,23 @@ public class ServerSocket_accept extends AsyncCloseTest implements Runnable { } } - public boolean go() throws Exception { - ss = new ServerSocket(0); + public AsyncCloseTest go(){ + try { + Thread thr = new Thread(this); + thr.start(); + latch.await(); + Thread.sleep(5000); //sleep, so ServerSocket.accept() can block + ss.close(); + thr.join(); - Thread thr = new Thread(this); - thr.start(); - - Thread.currentThread().sleep(1000); - - ss.close(); - - Thread.currentThread().sleep(1000); - - if (isClosed()) { - return true; - } else { - failed("ServerSocket.accept() wasn't preempted"); - return false; + if (isClosed()) { + return passed(); + } else { + return failed("ServerSocket.accept() wasn't preempted"); + } + } catch (Exception x) { + failed(x.getMessage()); + throw new RuntimeException(x); } } } diff --git a/jdk/test/java/net/Socket/asyncClose/Socket_getInputStream_read.java b/jdk/test/java/net/Socket/asyncClose/Socket_getInputStream_read.java index a4d76020cd2..25f85898583 100644 --- a/jdk/test/java/net/Socket/asyncClose/Socket_getInputStream_read.java +++ b/jdk/test/java/net/Socket/asyncClose/Socket_getInputStream_read.java @@ -27,16 +27,21 @@ */ import java.net.*; import java.io.*; +import java.util.concurrent.CountDownLatch; public class Socket_getInputStream_read extends AsyncCloseTest implements Runnable { - Socket s; - int timeout = 0; + private final Socket s; + private final int timeout; + private final CountDownLatch latch; public Socket_getInputStream_read() { + this(0); } public Socket_getInputStream_read(int timeout) { this.timeout = timeout; + latch = new CountDownLatch(1); + s = new Socket(); } public String description() { @@ -48,53 +53,48 @@ public class Socket_getInputStream_read extends AsyncCloseTest implements Runnab } public void run() { - InputStream in; - try { - in = s.getInputStream(); + InputStream in = s.getInputStream(); if (timeout > 0) { s.setSoTimeout(timeout); } - } catch (Exception e) { - failed(e.getMessage()); - return; - } - - try { + latch.countDown(); int n = in.read(); - failed("getInptuStream().read() returned unexpectly!!"); + failed("Socket.getInputStream().read() returned unexpectly!!"); } catch (SocketException se) { - closed(); + if (latch.getCount() != 1) { + closed(); + } } catch (Exception e) { failed(e.getMessage()); + } finally { + if (latch.getCount() == 1) { + latch.countDown(); + } } } - public boolean go() throws Exception { + public AsyncCloseTest go() { + try { + ServerSocket ss = new ServerSocket(0); + InetAddress lh = InetAddress.getLocalHost(); + s.connect( new InetSocketAddress(lh, ss.getLocalPort()) ); + Socket s2 = ss.accept(); + Thread thr = new Thread(this); + thr.start(); + latch.await(); + Thread.sleep(5000); //sleep, so Socket.getInputStream().read() can block + s.close(); + thr.join(); - ServerSocket ss = new ServerSocket(0); - - InetAddress lh = InetAddress.getLocalHost(); - s = new Socket(); - s.connect( new InetSocketAddress(lh, ss.getLocalPort()) ); - - Socket s2 = ss.accept(); - - Thread thr = new Thread(this); - thr.start(); - - Thread.currentThread().sleep(1000); - - s.close(); - - Thread.currentThread().sleep(1000); - - if (isClosed()) { - return true; - } else { - failed("getInputStream().read() wasn't preempted"); - return false; + if (isClosed()) { + return passed(); + } else { + return failed("Socket.getInputStream().read() wasn't preempted"); + } + } catch (Exception x) { + failed(x.getMessage()); + throw new RuntimeException(x); } - } } diff --git a/jdk/test/java/net/Socket/asyncClose/Socket_getOutputStream_write.java b/jdk/test/java/net/Socket/asyncClose/Socket_getOutputStream_write.java index 841861d919c..78cbf45014a 100644 --- a/jdk/test/java/net/Socket/asyncClose/Socket_getOutputStream_write.java +++ b/jdk/test/java/net/Socket/asyncClose/Socket_getOutputStream_write.java @@ -27,9 +27,16 @@ */ import java.net.*; import java.io.*; +import java.util.concurrent.CountDownLatch; public class Socket_getOutputStream_write extends AsyncCloseTest implements Runnable { - Socket s; + private final Socket s; + private final CountDownLatch latch; + + public Socket_getOutputStream_write() { + latch = new CountDownLatch(1); + s = new Socket(); + } public String description() { return "Socket.getOutputStream().write()"; @@ -38,40 +45,45 @@ public class Socket_getOutputStream_write extends AsyncCloseTest implements Runn public void run() { try { OutputStream out = s.getOutputStream(); + byte b[] = new byte[8192]; + latch.countDown(); for (;;) { - byte b[] = new byte[8192]; out.write(b); } } catch (SocketException se) { - closed(); + if (latch.getCount() != 1) { + closed(); + } } catch (Exception e) { failed(e.getMessage()); + } finally { + if (latch.getCount() == 1) { + latch.countDown(); + } } } - public boolean go() throws Exception { - ServerSocket ss = new ServerSocket(0); + public AsyncCloseTest go() { + try { + ServerSocket ss = new ServerSocket(0); + InetAddress lh = InetAddress.getLocalHost(); + s.connect( new InetSocketAddress(lh, ss.getLocalPort()) ); + Socket s2 = ss.accept(); + Thread thr = new Thread(this); + thr.start(); + latch.await(); + Thread.sleep(1000); + s.close(); + thr.join(); - InetAddress lh = InetAddress.getLocalHost(); - s = new Socket(); - s.connect( new InetSocketAddress(lh, ss.getLocalPort()) ); - - Socket s2 = ss.accept(); - - Thread thr = new Thread(this); - thr.start(); - - Thread.currentThread().sleep(2000); - - s.close(); - - Thread.currentThread().sleep(2000); - - if (isClosed()) { - return true; - } else { - failed("getOutputStream().write() wasn't preempted"); - return false; + if (isClosed()) { + return passed(); + } else { + return failed("Socket.getOutputStream().write() wasn't preempted"); + } + } catch (Exception x) { + failed(x.getMessage()); + throw new RuntimeException(x); } } } From 3528c996164b119e478103641beea3b662df85de Mon Sep 17 00:00:00 2001 From: Aleksei Efimov <aefimov@openjdk.org> Date: Mon, 31 Mar 2014 19:04:39 +0400 Subject: [PATCH 115/116] 8035437: Xerces Update: xml/serialize/DOMSerializerImpl Reviewed-by: lancea --- .../8035437/AbstractMethodErrorTest.java | 51 ++++++++++++++ .../xml/jaxp/common/8035437/Document.java | 28 ++++++++ .../xml/jaxp/common/8035437/DocumentImpl.java | 67 +++++++++++++++++++ .../javax/xml/jaxp/common/8035437/Node.java | 38 +++++++++++ jdk/test/javax/xml/jaxp/common/8035437/run.sh | 44 ++++++++++++ 5 files changed, 228 insertions(+) create mode 100644 jdk/test/javax/xml/jaxp/common/8035437/AbstractMethodErrorTest.java create mode 100644 jdk/test/javax/xml/jaxp/common/8035437/Document.java create mode 100644 jdk/test/javax/xml/jaxp/common/8035437/DocumentImpl.java create mode 100644 jdk/test/javax/xml/jaxp/common/8035437/Node.java create mode 100644 jdk/test/javax/xml/jaxp/common/8035437/run.sh diff --git a/jdk/test/javax/xml/jaxp/common/8035437/AbstractMethodErrorTest.java b/jdk/test/javax/xml/jaxp/common/8035437/AbstractMethodErrorTest.java new file mode 100644 index 00000000000..142c468c164 --- /dev/null +++ b/jdk/test/javax/xml/jaxp/common/8035437/AbstractMethodErrorTest.java @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import org.w3c.dom.DOMImplementation; +import org.w3c.dom.Document; +import org.w3c.dom.ls.DOMImplementationLS; +import org.w3c.dom.ls.LSSerializer; + +class AbstractMethodErrorTest { + + public static void main(String[] args) throws Exception { + DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); + DocumentBuilder builder = factory.newDocumentBuilder(); + Document document = builder.newDocument(); + + DOMImplementation impl = document.getImplementation(); + DOMImplementationLS implLS = (DOMImplementationLS) impl.getFeature("LS", "3.0"); + LSSerializer dsi = implLS.createLSSerializer(); + + /* We should have here incorrect document without getXmlVersion() method: + * Such Document is generated by replacing the JDK bootclasses with it's + * own Node,Document and DocumentImpl classes (see run.sh). According to + * XERCESJ-1007 the AbstractMethodError should be thrown in such case. + */ + String result = dsi.writeToString(document); + System.out.println("Result:" + result); + } + +} diff --git a/jdk/test/javax/xml/jaxp/common/8035437/Document.java b/jdk/test/javax/xml/jaxp/common/8035437/Document.java new file mode 100644 index 00000000000..3f81896fa20 --- /dev/null +++ b/jdk/test/javax/xml/jaxp/common/8035437/Document.java @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +package org.w3c.dom; + +public interface Document { + + public org.w3c.dom.DocumentType getDoctype(); +} diff --git a/jdk/test/javax/xml/jaxp/common/8035437/DocumentImpl.java b/jdk/test/javax/xml/jaxp/common/8035437/DocumentImpl.java new file mode 100644 index 00000000000..b0ce6310d98 --- /dev/null +++ b/jdk/test/javax/xml/jaxp/common/8035437/DocumentImpl.java @@ -0,0 +1,67 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +package com.sun.org.apache.xerces.internal.dom; + +import org.w3c.dom.Document; +import org.w3c.dom.Node; +import org.w3c.dom.DOMImplementation; + +public class DocumentImpl implements Document, Node { + + public short getNodeType() { + return 9; //DOCUMENT_NODE = 9 + } + + public org.w3c.dom.Document getOwnerDocument() { + return null; + } + + public Node getFirstChild() { + return null; + } + + public String getPrefix() { + return "TestPrefix"; + } + + public String getLocalName() { + return "LocalName"; + } + + public boolean hasAttributes() { + return false; + } + + public Node renameNode(Node n, String namespaceURI, String name) { + return n; + } + + public org.w3c.dom.DocumentType getDoctype() { + return null; + } + + public DOMImplementation getImplementation() { + return DOMImplementationImpl.getDOMImplementation(); + } + +} diff --git a/jdk/test/javax/xml/jaxp/common/8035437/Node.java b/jdk/test/javax/xml/jaxp/common/8035437/Node.java new file mode 100644 index 00000000000..cb7a9881ade --- /dev/null +++ b/jdk/test/javax/xml/jaxp/common/8035437/Node.java @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +package org.w3c.dom; + +public interface Node { + + public short getNodeType(); + + public org.w3c.dom.Document getOwnerDocument(); + + public Node getFirstChild(); + + public String getPrefix(); + + public String getLocalName(); + + public boolean hasAttributes(); +} diff --git a/jdk/test/javax/xml/jaxp/common/8035437/run.sh b/jdk/test/javax/xml/jaxp/common/8035437/run.sh new file mode 100644 index 00000000000..413edebcd27 --- /dev/null +++ b/jdk/test/javax/xml/jaxp/common/8035437/run.sh @@ -0,0 +1,44 @@ +#!/bin/sh + +## +# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +## + +# @test +# @bug 8035437 +# @summary Tests that java.lang.AbstractMethodError is not thrown when +# serializing improper version of DocumentImpl class. + +mkdir -p exec compile + +$COMPILEJAVA/bin/javac ${TESTJAVACOPTS} ${TESTTOOLVMOPTS} \ + -d compile $TESTSRC/Document.java $TESTSRC/Node.java || exit 1 + +$COMPILEJAVA/bin/javac ${TESTJAVACOPTS} ${TESTTOOLVMOPTS} \ + -Xbootclasspath/p:compile -d exec $TESTSRC/DocumentImpl.java || exit 1 + +$COMPILEJAVA/bin/javac ${TESTJAVACOPTS} ${TESTTOOLVMOPTS} \ + $TESTSRC/AbstractMethodErrorTest.java -d exec || exit 1 + +$TESTJAVA/bin/java ${TESTVMOPTS} -Xbootclasspath/p:exec -cp exec AbstractMethodErrorTest || exit 1 + +exit 0 From 01cbfbd0c31b51de6a34d319f9b4b5f05243a73e Mon Sep 17 00:00:00 2001 From: Miroslav Kos <mkos@openjdk.org> Date: Mon, 31 Mar 2014 15:08:17 +0200 Subject: [PATCH 116/116] 8038307: JAX-WS conformance tests fail when running JCK-devtools-8 suite against RI in EBCDIC emulation mode Reviewed-by: chegar --- .../javax/xml/ws/ebcdic/WsImportTest.java | 145 ++++++++++++++++++ .../javax/xml/ws/ebcdic/test-service.wsdl | 67 ++++++++ 2 files changed, 212 insertions(+) create mode 100644 jdk/test/javax/xml/ws/ebcdic/WsImportTest.java create mode 100644 jdk/test/javax/xml/ws/ebcdic/test-service.wsdl diff --git a/jdk/test/javax/xml/ws/ebcdic/WsImportTest.java b/jdk/test/javax/xml/ws/ebcdic/WsImportTest.java new file mode 100644 index 00000000000..7977cf98730 --- /dev/null +++ b/jdk/test/javax/xml/ws/ebcdic/WsImportTest.java @@ -0,0 +1,145 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 8038307 + * @summary JAX-WS conformance tests fail when running JCK-devtools-8 suite against RI in EBCDIC emulation mode + * @run main/othervm WsImportTest + */ + +import java.io.InputStreamReader; +import java.io.IOException; +import java.io.BufferedReader; +import java.io.File; +import java.nio.file.Files; +import java.nio.file.FileVisitResult; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.nio.file.SimpleFileVisitor; +import java.nio.file.attribute.BasicFileAttributes; +import static java.nio.file.FileVisitResult.*; + +public class WsImportTest { + + public static void main(String[] args) throws IOException { + + String wsimport = getWsImport(); + String wsdl = getWSDLFilePath("test-service.wsdl"); + + try { + log("Importing wsdl: " + wsdl); + String[] wsargs = { + wsimport, + "-p", + "generated", + "-J-Dfile.encoding=Cp037", + wsdl + }; + + ProcessBuilder pb = new ProcessBuilder(wsargs); + pb.redirectErrorStream(true); + Process p = pb.start(); + logOutput(p); + int result = p.waitFor(); + p.destroy(); + + if (result != 0) { + fail("WsImport failed. TEST FAILED."); + } else { + log("Test PASSED."); + } + + } catch (Exception e) { + e.printStackTrace(); + fail(e.getMessage()); + } finally { + deleteGeneratedFiles(); + } + } + + private static void fail(String message) { + throw new RuntimeException(message); + } + + private static void log(String msg) { + System.out.println(msg); + } + + private static void logOutput(Process p) throws IOException { + BufferedReader r = new BufferedReader(new InputStreamReader(p.getInputStream())); + String s = r.readLine(); + while (s != null) { + log(s.trim()); + s = r.readLine(); + } + } + + private static void deleteGeneratedFiles() { + Path p = Paths.get("generated"); + if (Files.exists(p)) { + try { + Files.walkFileTree(p, new SimpleFileVisitor<Path>() { + @Override + public FileVisitResult visitFile(Path file, + BasicFileAttributes attrs) throws IOException { + + Files.delete(file); + return CONTINUE; + } + @Override + public FileVisitResult postVisitDirectory(Path dir, + IOException exc) throws IOException { + + if (exc == null) { + Files.delete(dir); + return CONTINUE; + } else { + throw exc; + } + } + }); + } catch (IOException ioe) { + ioe.printStackTrace(); + } + } + } + + private static String getWSDLFilePath(String filename) { + String testSrc = System.getProperty("test.src"); + if (testSrc == null) testSrc = "."; + return Paths.get(testSrc).resolve(filename).toString(); + } + + private static String getWsImport() { + String javaHome = System.getProperty("java.home"); + if (javaHome.endsWith("jre")) { + javaHome = new File(javaHome).getParent(); + } + String wsimport = javaHome + File.separator + "bin" + File.separator + "wsimport"; + if (System.getProperty("os.name").startsWith("Windows")) { + wsimport = wsimport.concat(".exe"); + } + return wsimport; + } +} diff --git a/jdk/test/javax/xml/ws/ebcdic/test-service.wsdl b/jdk/test/javax/xml/ws/ebcdic/test-service.wsdl new file mode 100644 index 00000000000..10b2bdbd235 --- /dev/null +++ b/jdk/test/javax/xml/ws/ebcdic/test-service.wsdl @@ -0,0 +1,67 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + + This code is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License version 2 only, as + published by the Free Software Foundation. + + This code is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + version 2 for more details (a copy is included in the LICENSE file that + accompanied this code). + + You should have received a copy of the GNU General Public License version + 2 along with this work; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + + Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + or visit www.oracle.com if you need additional information or have any + questions. +--> +<definitions name="W2JDLAnnotations" + targetNamespace="http://w2jdlannotations.org/wsdl" + xmlns:tns="http://w2jdlannotations.org/wsdl" + xmlns="http://schemas.xmlsoap.org/wsdl/" + xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:types="http://w2jdlannotations.org/types" + xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"> + + <types> + <xsd:schema targetNamespace="http://w2jdlannotations.org/types" attributeFormDefault="qualified" + elementFormDefault="qualified"> + <xsd:element name="OneWayStringElement"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="argument" type="xsd:string"/> + </xsd:sequence> + </xsd:complexType> + </xsd:element> + </xsd:schema> + </types> + + <message name="oneway"> + <part name="varString" element="types:OneWayStringElement"/> + </message> + <portType name="W2JDLAnnotationsEndpoint"> + <operation name="onewayOperation"> + <input message="tns:oneway"/> + </operation> + </portType> + <binding name="W2JDLAnnotationsEndpointBinding" type="tns:W2JDLAnnotationsEndpoint"> + <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/> + <operation name="onewayOperation"> + <soap:operation soapAction=""/> + <input> + <soap:body use="literal"/> + </input> + </operation> + </binding> + <service name="W2JDLAnnotations"> + <port name="W2JDLAnnotationsEndpointPort" binding="tns:W2JDLAnnotationsEndpointBinding"> + <soap:address location="http://foo:9999/bar"/> + </port> + </service> +</definitions>