# HG changeset patch # User jcoomes # Date 1300757880 25200 # Node ID 1642a45f024f5f5d80acd5a1bbf4b08f8b613795 # Parent 7bafcf0e5bfbf05c5df4e50171301688f96f0427 6962930: make the string table size configurable Reviewed-by: never, phh, stefank, kamg, dholmes, coleenp diff -r 7bafcf0e5bfb -r 1642a45f024f hotspot/agent/src/share/classes/sun/jvm/hotspot/memory/StringTable.java --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/memory/StringTable.java Mon Mar 21 14:06:50 2011 -0700 +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/memory/StringTable.java Mon Mar 21 18:38:00 2011 -0700 @@ -44,12 +44,10 @@ private static synchronized void initialize(TypeDataBase db) { Type type = db.lookupType("StringTable"); theTableField = type.getAddressField("_the_table"); - stringTableSize = db.lookupIntConstant("StringTable::string_table_size").intValue(); } // Fields private static AddressField theTableField; - private static int stringTableSize; // Accessors public static StringTable getTheTable() { @@ -57,10 +55,6 @@ return (StringTable) VMObjectFactory.newObject(StringTable.class, tmp); } - public static int getStringTableSize() { - return stringTableSize; - } - public StringTable(Address addr) { super(addr); } diff -r 7bafcf0e5bfb -r 1642a45f024f hotspot/src/share/vm/classfile/symbolTable.hpp --- a/hotspot/src/share/vm/classfile/symbolTable.hpp Mon Mar 21 14:06:50 2011 -0700 +++ b/hotspot/src/share/vm/classfile/symbolTable.hpp Mon Mar 21 18:38:00 2011 -0700 @@ -216,18 +216,14 @@ oop basic_add(int index, Handle string_or_null, jchar* name, int len, unsigned int hashValue, TRAPS); - // Table size - enum { - string_table_size = 1009 - }; - oop lookup(int index, jchar* chars, int length, unsigned int hashValue); - StringTable() : Hashtable(string_table_size, sizeof (HashtableEntry)) {} + StringTable() : Hashtable((int)StringTableSize, + sizeof (HashtableEntry)) {} StringTable(HashtableBucket* t, int number_of_entries) - : Hashtable(string_table_size, sizeof (HashtableEntry), t, - number_of_entries) {} + : Hashtable((int)StringTableSize, sizeof (HashtableEntry), t, + number_of_entries) {} public: // The string table @@ -241,7 +237,7 @@ static void create_table(HashtableBucket* t, int length, int number_of_entries) { assert(_the_table == NULL, "One string table allowed."); - assert(length == string_table_size * sizeof(HashtableBucket), + assert((size_t)length == StringTableSize * sizeof(HashtableBucket), "bad shared string size."); _the_table = new StringTable(t, number_of_entries); } diff -r 7bafcf0e5bfb -r 1642a45f024f hotspot/src/share/vm/runtime/arguments.cpp --- a/hotspot/src/share/vm/runtime/arguments.cpp Mon Mar 21 14:06:50 2011 -0700 +++ b/hotspot/src/share/vm/runtime/arguments.cpp Mon Mar 21 18:38:00 2011 -0700 @@ -2819,22 +2819,38 @@ } void Arguments::set_shared_spaces_flags() { + const bool must_share = DumpSharedSpaces || RequireSharedSpaces; + const bool might_share = must_share || UseSharedSpaces; + + // The string table is part of the shared archive so the size must match. + if (!FLAG_IS_DEFAULT(StringTableSize)) { + // Disable sharing. + if (must_share) { + warning("disabling shared archive %s because of non-default " + "StringTableSize", DumpSharedSpaces ? "creation" : "use"); + } + if (might_share) { + FLAG_SET_DEFAULT(DumpSharedSpaces, false); + FLAG_SET_DEFAULT(RequireSharedSpaces, false); + FLAG_SET_DEFAULT(UseSharedSpaces, false); + } + return; + } + // Check whether class data sharing settings conflict with GC, compressed oops // or page size, and fix them up. Explicit sharing options override other // settings. const bool cannot_share = UseConcMarkSweepGC || CMSIncrementalMode || UseG1GC || UseParNewGC || UseParallelGC || UseParallelOldGC || UseCompressedOops || UseLargePages && FLAG_IS_CMDLINE(UseLargePages); - const bool must_share = DumpSharedSpaces || RequireSharedSpaces; - const bool might_share = must_share || UseSharedSpaces; if (cannot_share) { if (must_share) { - warning("selecting serial gc and disabling large pages %s" - "because of %s", "" LP64_ONLY("and compressed oops "), - DumpSharedSpaces ? "-Xshare:dump" : "-Xshare:on"); - force_serial_gc(); - FLAG_SET_CMDLINE(bool, UseLargePages, false); - LP64_ONLY(FLAG_SET_CMDLINE(bool, UseCompressedOops, false)); + warning("selecting serial gc and disabling large pages %s" + "because of %s", "" LP64_ONLY("and compressed oops "), + DumpSharedSpaces ? "-Xshare:dump" : "-Xshare:on"); + force_serial_gc(); + FLAG_SET_CMDLINE(bool, UseLargePages, false); + LP64_ONLY(FLAG_SET_CMDLINE(bool, UseCompressedOops, false)); } else { if (UseSharedSpaces && Verbose) { warning("turning off use of shared archive because of " diff -r 7bafcf0e5bfb -r 1642a45f024f hotspot/src/share/vm/runtime/globals.hpp --- a/hotspot/src/share/vm/runtime/globals.hpp Mon Mar 21 14:06:50 2011 -0700 +++ b/hotspot/src/share/vm/runtime/globals.hpp Mon Mar 21 18:38:00 2011 -0700 @@ -3756,6 +3756,9 @@ diagnostic(bool, PrintDTraceDOF, false, \ "Print the DTrace DOF passed to the system for JSDT probes") \ \ + product(uintx, StringTableSize, 1009, \ + "Number of buckets in the interned String table") \ + \ product(bool, UseVMInterruptibleIO, false, \ "(Unstable, Solaris-specific) Thread interrupt before or with " \ "EINTR for I/O operations results in OS_INTRPT. The default value"\ diff -r 7bafcf0e5bfb -r 1642a45f024f hotspot/src/share/vm/runtime/vmStructs.cpp --- a/hotspot/src/share/vm/runtime/vmStructs.cpp Mon Mar 21 14:06:50 2011 -0700 +++ b/hotspot/src/share/vm/runtime/vmStructs.cpp Mon Mar 21 18:38:00 2011 -0700 @@ -1553,12 +1553,6 @@ \ declare_constant(SymbolTable::symbol_table_size) \ \ - /***************/ \ - /* StringTable */ \ - /***************/ \ - \ - declare_constant(StringTable::string_table_size) \ - \ /********************/ \ /* SystemDictionary */ \ /********************/ \