8344363: FullGCForwarding::initialize_flags is called after ObjLayout::initialize
Reviewed-by: stefank, shade, ayang
This commit is contained in:
parent
c6b14c62f6
commit
cb1c73663e
@ -244,10 +244,7 @@ void G1Arguments::initialize() {
|
|||||||
if (max_parallel_refinement_threads > UINT_MAX / divisor) {
|
if (max_parallel_refinement_threads > UINT_MAX / divisor) {
|
||||||
vm_exit_during_initialization("Too large parallelism for remembered sets.");
|
vm_exit_during_initialization("Too large parallelism for remembered sets.");
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
void G1Arguments::initialize_heap_flags_and_sizes() {
|
|
||||||
GCArguments::initialize_heap_flags_and_sizes();
|
|
||||||
FullGCForwarding::initialize_flags(heap_reserved_size_bytes());
|
FullGCForwarding::initialize_flags(heap_reserved_size_bytes());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -39,7 +39,6 @@ class G1Arguments : public GCArguments {
|
|||||||
static void parse_verification_type(const char* type);
|
static void parse_verification_type(const char* type);
|
||||||
|
|
||||||
virtual void initialize_alignments();
|
virtual void initialize_alignments();
|
||||||
virtual void initialize_heap_flags_and_sizes();
|
|
||||||
|
|
||||||
virtual void initialize();
|
virtual void initialize();
|
||||||
virtual size_t conservative_max_heap_alignment();
|
virtual size_t conservative_max_heap_alignment();
|
||||||
|
@ -83,6 +83,8 @@ void ParallelArguments::initialize() {
|
|||||||
if (FLAG_IS_DEFAULT(ParallelRefProcEnabled) && ParallelGCThreads > 1) {
|
if (FLAG_IS_DEFAULT(ParallelRefProcEnabled) && ParallelGCThreads > 1) {
|
||||||
FLAG_SET_DEFAULT(ParallelRefProcEnabled, true);
|
FLAG_SET_DEFAULT(ParallelRefProcEnabled, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
FullGCForwarding::initialize_flags(heap_reserved_size_bytes());
|
||||||
}
|
}
|
||||||
|
|
||||||
// The alignment used for boundary between young gen and old gen
|
// The alignment used for boundary between young gen and old gen
|
||||||
@ -128,7 +130,6 @@ void ParallelArguments::initialize_heap_flags_and_sizes() {
|
|||||||
// Redo everything from the start
|
// Redo everything from the start
|
||||||
initialize_heap_flags_and_sizes_one_pass();
|
initialize_heap_flags_and_sizes_one_pass();
|
||||||
}
|
}
|
||||||
FullGCForwarding::initialize_flags(heap_reserved_size_bytes());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t ParallelArguments::heap_reserved_size_bytes() {
|
size_t ParallelArguments::heap_reserved_size_bytes() {
|
||||||
|
@ -24,12 +24,12 @@
|
|||||||
|
|
||||||
#include "precompiled.hpp"
|
#include "precompiled.hpp"
|
||||||
#include "gc/shared/fullGCForwarding.hpp"
|
#include "gc/shared/fullGCForwarding.hpp"
|
||||||
#include "gc/shared/genArguments.hpp"
|
#include "gc/shared/gcArguments.hpp"
|
||||||
#include "gc/serial/serialArguments.hpp"
|
#include "gc/serial/serialArguments.hpp"
|
||||||
#include "gc/serial/serialHeap.hpp"
|
#include "gc/serial/serialHeap.hpp"
|
||||||
|
|
||||||
void SerialArguments::initialize_heap_flags_and_sizes() {
|
void SerialArguments::initialize() {
|
||||||
GenArguments::initialize_heap_flags_and_sizes();
|
GCArguments::initialize();
|
||||||
FullGCForwarding::initialize_flags(MaxHeapSize);
|
FullGCForwarding::initialize_flags(MaxHeapSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -31,8 +31,8 @@ class CollectedHeap;
|
|||||||
|
|
||||||
class SerialArguments : public GenArguments {
|
class SerialArguments : public GenArguments {
|
||||||
private:
|
private:
|
||||||
|
virtual void initialize();
|
||||||
virtual CollectedHeap* create_heap();
|
virtual CollectedHeap* create_heap();
|
||||||
virtual void initialize_heap_flags_and_sizes();
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // SHARE_GC_SERIAL_SERIALARGUMENTS_HPP
|
#endif // SHARE_GC_SERIAL_SERIALARGUMENTS_HPP
|
||||||
|
@ -176,6 +176,8 @@ void ShenandoahArguments::initialize() {
|
|||||||
if (FLAG_IS_DEFAULT(TLABAllocationWeight)) {
|
if (FLAG_IS_DEFAULT(TLABAllocationWeight)) {
|
||||||
FLAG_SET_DEFAULT(TLABAllocationWeight, 90);
|
FLAG_SET_DEFAULT(TLABAllocationWeight, 90);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
FullGCForwarding::initialize_flags(MaxHeapSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t ShenandoahArguments::conservative_max_heap_alignment() {
|
size_t ShenandoahArguments::conservative_max_heap_alignment() {
|
||||||
@ -199,11 +201,6 @@ void ShenandoahArguments::initialize_alignments() {
|
|||||||
HeapAlignment = align;
|
HeapAlignment = align;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ShenandoahArguments::initialize_heap_flags_and_sizes() {
|
|
||||||
GCArguments::initialize_heap_flags_and_sizes();
|
|
||||||
FullGCForwarding::initialize_flags(MaxHeapSize);
|
|
||||||
}
|
|
||||||
|
|
||||||
CollectedHeap* ShenandoahArguments::create_heap() {
|
CollectedHeap* ShenandoahArguments::create_heap() {
|
||||||
return new ShenandoahHeap(new ShenandoahCollectorPolicy());
|
return new ShenandoahHeap(new ShenandoahCollectorPolicy());
|
||||||
}
|
}
|
||||||
|
@ -35,7 +35,6 @@ private:
|
|||||||
|
|
||||||
virtual void initialize();
|
virtual void initialize();
|
||||||
virtual size_t conservative_max_heap_alignment();
|
virtual size_t conservative_max_heap_alignment();
|
||||||
virtual void initialize_heap_flags_and_sizes();
|
|
||||||
virtual CollectedHeap* create_heap();
|
virtual CollectedHeap* create_heap();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -62,6 +62,7 @@
|
|||||||
#include "oops/instanceMirrorKlass.hpp"
|
#include "oops/instanceMirrorKlass.hpp"
|
||||||
#include "oops/klass.inline.hpp"
|
#include "oops/klass.inline.hpp"
|
||||||
#include "oops/objArrayOop.inline.hpp"
|
#include "oops/objArrayOop.inline.hpp"
|
||||||
|
#include "oops/objLayout.hpp"
|
||||||
#include "oops/oop.inline.hpp"
|
#include "oops/oop.inline.hpp"
|
||||||
#include "oops/oopHandle.inline.hpp"
|
#include "oops/oopHandle.inline.hpp"
|
||||||
#include "oops/typeArrayKlass.hpp"
|
#include "oops/typeArrayKlass.hpp"
|
||||||
@ -868,6 +869,8 @@ jint universe_init() {
|
|||||||
// Initialize CPUTimeCounters object, which must be done before creation of the heap.
|
// Initialize CPUTimeCounters object, which must be done before creation of the heap.
|
||||||
CPUTimeCounters::initialize();
|
CPUTimeCounters::initialize();
|
||||||
|
|
||||||
|
ObjLayout::initialize();
|
||||||
|
|
||||||
#ifdef _LP64
|
#ifdef _LP64
|
||||||
MetaspaceShared::adjust_heap_sizes_for_dumping();
|
MetaspaceShared::adjust_heap_sizes_for_dumping();
|
||||||
#endif // _LP64
|
#endif // _LP64
|
||||||
|
@ -3654,33 +3654,35 @@ jint Arguments::parse(const JavaVMInitArgs* initial_cmd_args) {
|
|||||||
Arguments::print_on(&st);
|
Arguments::print_on(&st);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return JNI_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Arguments::set_compact_headers_flags() {
|
||||||
#ifdef _LP64
|
#ifdef _LP64
|
||||||
if (UseCompactObjectHeaders && FLAG_IS_CMDLINE(UseCompressedClassPointers) && !UseCompressedClassPointers) {
|
if (UseCompactObjectHeaders && FLAG_IS_CMDLINE(UseCompressedClassPointers) && !UseCompressedClassPointers) {
|
||||||
warning("Compact object headers require compressed class pointers. Disabling compact object headers.");
|
warning("Compact object headers require compressed class pointers. Disabling compact object headers.");
|
||||||
FLAG_SET_DEFAULT(UseCompactObjectHeaders, false);
|
FLAG_SET_DEFAULT(UseCompactObjectHeaders, false);
|
||||||
}
|
}
|
||||||
if (UseCompactObjectHeaders && LockingMode != LM_LIGHTWEIGHT) {
|
|
||||||
FLAG_SET_DEFAULT(LockingMode, LM_LIGHTWEIGHT);
|
|
||||||
}
|
|
||||||
if (UseCompactObjectHeaders && !UseObjectMonitorTable) {
|
if (UseCompactObjectHeaders && !UseObjectMonitorTable) {
|
||||||
// If UseCompactObjectHeaders is on the command line, turn on UseObjectMonitorTable.
|
// If UseCompactObjectHeaders is on the command line, turn on UseObjectMonitorTable.
|
||||||
if (FLAG_IS_CMDLINE(UseCompactObjectHeaders)) {
|
if (FLAG_IS_CMDLINE(UseCompactObjectHeaders)) {
|
||||||
FLAG_SET_DEFAULT(UseObjectMonitorTable, true);
|
FLAG_SET_DEFAULT(UseObjectMonitorTable, true);
|
||||||
|
|
||||||
// If UseObjectMonitorTable is on the command line, turn off UseCompactObjectHeaders.
|
// If UseObjectMonitorTable is on the command line, turn off UseCompactObjectHeaders.
|
||||||
} else if (FLAG_IS_CMDLINE(UseObjectMonitorTable)) {
|
} else if (FLAG_IS_CMDLINE(UseObjectMonitorTable)) {
|
||||||
FLAG_SET_DEFAULT(UseCompactObjectHeaders, false);
|
FLAG_SET_DEFAULT(UseCompactObjectHeaders, false);
|
||||||
// If neither on the command line, the defaults are incompatible, but turn on UseObjectMonitorTable.
|
// If neither on the command line, the defaults are incompatible, but turn on UseObjectMonitorTable.
|
||||||
} else {
|
} else {
|
||||||
FLAG_SET_DEFAULT(UseObjectMonitorTable, true);
|
FLAG_SET_DEFAULT(UseObjectMonitorTable, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (UseCompactObjectHeaders && LockingMode != LM_LIGHTWEIGHT) {
|
||||||
|
FLAG_SET_DEFAULT(LockingMode, LM_LIGHTWEIGHT);
|
||||||
|
}
|
||||||
if (UseCompactObjectHeaders && !UseCompressedClassPointers) {
|
if (UseCompactObjectHeaders && !UseCompressedClassPointers) {
|
||||||
FLAG_SET_DEFAULT(UseCompressedClassPointers, true);
|
FLAG_SET_DEFAULT(UseCompressedClassPointers, true);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
return JNI_OK;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
jint Arguments::apply_ergo() {
|
jint Arguments::apply_ergo() {
|
||||||
@ -3693,6 +3695,8 @@ jint Arguments::apply_ergo() {
|
|||||||
|
|
||||||
GCConfig::arguments()->initialize();
|
GCConfig::arguments()->initialize();
|
||||||
|
|
||||||
|
set_compact_headers_flags();
|
||||||
|
|
||||||
if (UseCompressedClassPointers) {
|
if (UseCompressedClassPointers) {
|
||||||
CompressedKlassPointers::pre_initialize();
|
CompressedKlassPointers::pre_initialize();
|
||||||
}
|
}
|
||||||
|
@ -264,6 +264,7 @@ class Arguments : AllStatic {
|
|||||||
static void set_conservative_max_heap_alignment();
|
static void set_conservative_max_heap_alignment();
|
||||||
static void set_use_compressed_oops();
|
static void set_use_compressed_oops();
|
||||||
static jint set_ergonomics_flags();
|
static jint set_ergonomics_flags();
|
||||||
|
static void set_compact_headers_flags();
|
||||||
// Limits the given heap size by the maximum amount of virtual
|
// Limits the given heap size by the maximum amount of virtual
|
||||||
// memory this process is currently allowed to use. It also takes
|
// memory this process is currently allowed to use. It also takes
|
||||||
// the virtual-to-physical ratio of the current GC into account.
|
// the virtual-to-physical ratio of the current GC into account.
|
||||||
|
@ -497,9 +497,6 @@ jint Threads::create_vm(JavaVMInitArgs* args, bool* canTryAgain) {
|
|||||||
// Timing (must come after argument parsing)
|
// Timing (must come after argument parsing)
|
||||||
TraceTime timer("Create VM", TRACETIME_LOG(Info, startuptime));
|
TraceTime timer("Create VM", TRACETIME_LOG(Info, startuptime));
|
||||||
|
|
||||||
// Initialize object layout after parsing the args
|
|
||||||
ObjLayout::initialize();
|
|
||||||
|
|
||||||
// Initialize the os module after parsing the args
|
// Initialize the os module after parsing the args
|
||||||
jint os_init_2_result = os::init_2();
|
jint os_init_2_result = os::init_2();
|
||||||
if (os_init_2_result != JNI_OK) return os_init_2_result;
|
if (os_init_2_result != JNI_OK) return os_init_2_result;
|
||||||
|
Loading…
Reference in New Issue
Block a user