7122219: Passed StringTableSize value not verified
Check that the values specified for -XX:StringTableSize are within a certain range. Reviewed-by: dholmes, coleenp
This commit is contained in:
parent
a988fc0968
commit
a28380d97e
@ -262,19 +262,14 @@ public:
|
||||
// The string table
|
||||
static StringTable* the_table() { return _the_table; }
|
||||
|
||||
// Size of one bucket in the string table. Used when checking for rollover.
|
||||
static uint bucket_size() { return sizeof(HashtableBucket<mtSymbol>); }
|
||||
|
||||
static void create_table() {
|
||||
assert(_the_table == NULL, "One string table allowed.");
|
||||
_the_table = new StringTable();
|
||||
}
|
||||
|
||||
static void create_table(HashtableBucket<mtSymbol>* t, int length,
|
||||
int number_of_entries) {
|
||||
assert(_the_table == NULL, "One string table allowed.");
|
||||
assert((size_t)length == StringTableSize * sizeof(HashtableBucket<mtSymbol>),
|
||||
"bad shared string size.");
|
||||
_the_table = new StringTable(t, number_of_entries);
|
||||
}
|
||||
|
||||
// GC support
|
||||
// Delete pointers to otherwise-unreachable objects.
|
||||
static void unlink(BoolObjectClosure* cl);
|
||||
|
@ -24,6 +24,7 @@
|
||||
|
||||
#include "precompiled.hpp"
|
||||
#include "classfile/javaAssertions.hpp"
|
||||
#include "classfile/symbolTable.hpp"
|
||||
#include "compiler/compilerOracle.hpp"
|
||||
#include "memory/allocation.inline.hpp"
|
||||
#include "memory/cardTableRS.hpp"
|
||||
@ -1844,6 +1845,11 @@ bool Arguments::check_vm_args_consistency() {
|
||||
status = status && verify_percentage(MinHeapFreeRatio, "MinHeapFreeRatio");
|
||||
status = status && verify_percentage(MaxHeapFreeRatio, "MaxHeapFreeRatio");
|
||||
|
||||
// Divide by bucket size to prevent a large size from causing rollover when
|
||||
// calculating amount of memory needed to be allocated for the String table.
|
||||
status = status && verify_interval(StringTableSize, defaultStringTableSize,
|
||||
(max_uintx / StringTable::bucket_size()), "StringTable size");
|
||||
|
||||
if (MinHeapFreeRatio > MaxHeapFreeRatio) {
|
||||
jio_fprintf(defaultStream::error_stream(),
|
||||
"MinHeapFreeRatio (" UINTX_FORMAT ") must be less than or "
|
||||
|
@ -3593,7 +3593,7 @@ class CommandLineFlags {
|
||||
diagnostic(bool, PrintDTraceDOF, false, \
|
||||
"Print the DTrace DOF passed to the system for JSDT probes") \
|
||||
\
|
||||
product(uintx, StringTableSize, 1009, \
|
||||
product(uintx, StringTableSize, defaultStringTableSize, \
|
||||
"Number of buckets in the interned String table") \
|
||||
\
|
||||
develop(bool, TraceDefaultMethods, false, \
|
||||
|
@ -576,7 +576,9 @@ void* os::malloc(size_t size, MEMFLAGS memflags, address caller) {
|
||||
// if NULL is returned the calling functions assume out of memory.
|
||||
size = 1;
|
||||
}
|
||||
|
||||
if (size > size + space_before + space_after) { // Check for rollover.
|
||||
return NULL;
|
||||
}
|
||||
NOT_PRODUCT(if (MallocVerifyInterval > 0) check_heap());
|
||||
u_char* ptr = (u_char*)::malloc(size + space_before + space_after);
|
||||
|
||||
|
@ -327,6 +327,12 @@ typedef jlong s8;
|
||||
const int max_method_code_size = 64*K - 1; // JVM spec, 2nd ed. section 4.8.1 (p.134)
|
||||
|
||||
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
// Minimum StringTableSize value
|
||||
|
||||
const int defaultStringTableSize=1009;
|
||||
|
||||
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
// HotSwap - for JVMTI aka Class File Replacement and PopFrame
|
||||
//
|
||||
|
Loading…
Reference in New Issue
Block a user