提交 b45345a1 编写于 作者: A amurillo

Merge

...@@ -497,6 +497,10 @@ e4a6e7f1b90b85270aee1c54edaca3ef737082f1 hs25.20-b21 ...@@ -497,6 +497,10 @@ e4a6e7f1b90b85270aee1c54edaca3ef737082f1 hs25.20-b21
f7429096a202cab5c36a0f20dea33c554026010f jdk8u20-b22 f7429096a202cab5c36a0f20dea33c554026010f jdk8u20-b22
7c56530b11496459e66cb9ea933035002311672c hs25.20-b22 7c56530b11496459e66cb9ea933035002311672c hs25.20-b22
f09d1f6a401e25a54dad44bb7bea482e47558af5 jdk8u20-b23 f09d1f6a401e25a54dad44bb7bea482e47558af5 jdk8u20-b23
42ddd0bbcb6630fe463ec9bc1893c838d5edff1b jdk8u20-b24
00cf2b6f51b9560b01030e8f4c28c466f0b21fe3 hs25.20-b23
19408d5fd31c25ce60c43dd33e92b96e8df4a4ea jdk8u20-b25
eaa4074a7e3975cd33ec55e6b584586e2ac681bd jdk8u20-b26
4828415ebbf11e205dcc08e97ad5ae7dd03522f9 jdk8u40-b00 4828415ebbf11e205dcc08e97ad5ae7dd03522f9 jdk8u40-b00
d952af8cf67dd1e7ab5fec9a299c6c6dafd1863e hs25.40-b01 d952af8cf67dd1e7ab5fec9a299c6c6dafd1863e hs25.40-b01
f0afba33c928ddaa2d5f003b90d683c143f78ea3 hs25.40-b02 f0afba33c928ddaa2d5f003b90d683c143f78ea3 hs25.40-b02
......
...@@ -243,10 +243,10 @@ JVM_OBJ_FILES = $(Obj_Files) ...@@ -243,10 +243,10 @@ JVM_OBJ_FILES = $(Obj_Files)
vm_version.o: $(filter-out vm_version.o,$(JVM_OBJ_FILES)) vm_version.o: $(filter-out vm_version.o,$(JVM_OBJ_FILES))
mapfile : $(MAPFILE) vm.def mapfile : $(MAPFILE) vm.def mapfile_ext
rm -f $@ rm -f $@
awk '{ if ($$0 ~ "INSERT VTABLE SYMBOLS HERE") \ awk '{ if ($$0 ~ "INSERT VTABLE SYMBOLS HERE") \
{ system ("cat vm.def"); } \ { system ("cat mapfile_ext"); system ("cat vm.def"); } \
else \ else \
{ print $$0 } \ { print $$0 } \
}' > $@ < $(MAPFILE) }' > $@ < $(MAPFILE)
...@@ -258,6 +258,13 @@ mapfile_reorder : mapfile $(REORDERFILE) ...@@ -258,6 +258,13 @@ mapfile_reorder : mapfile $(REORDERFILE)
vm.def: $(Res_Files) $(Obj_Files) vm.def: $(Res_Files) $(Obj_Files)
sh $(GAMMADIR)/make/bsd/makefiles/build_vm_def.sh *.o > $@ sh $(GAMMADIR)/make/bsd/makefiles/build_vm_def.sh *.o > $@
mapfile_ext:
rm -f $@
touch $@
if [ -f $(HS_ALT_MAKE)/bsd/makefiles/mapfile-ext ]; then \
cat $(HS_ALT_MAKE)/bsd/makefiles/mapfile-ext > $@; \
fi
STATIC_CXX = false STATIC_CXX = false
ifeq ($(LINK_INTO),AOUT) ifeq ($(LINK_INTO),AOUT)
......
...@@ -233,10 +233,10 @@ JVM_OBJ_FILES = $(Obj_Files) ...@@ -233,10 +233,10 @@ JVM_OBJ_FILES = $(Obj_Files)
vm_version.o: $(filter-out vm_version.o,$(JVM_OBJ_FILES)) vm_version.o: $(filter-out vm_version.o,$(JVM_OBJ_FILES))
mapfile : $(MAPFILE) vm.def mapfile : $(MAPFILE) vm.def mapfile_ext
rm -f $@ rm -f $@
awk '{ if ($$0 ~ "INSERT VTABLE SYMBOLS HERE") \ awk '{ if ($$0 ~ "INSERT VTABLE SYMBOLS HERE") \
{ system ("cat vm.def"); } \ { system ("cat mapfile_ext"); system ("cat vm.def"); } \
else \ else \
{ print $$0 } \ { print $$0 } \
}' > $@ < $(MAPFILE) }' > $@ < $(MAPFILE)
...@@ -248,6 +248,13 @@ mapfile_reorder : mapfile $(REORDERFILE) ...@@ -248,6 +248,13 @@ mapfile_reorder : mapfile $(REORDERFILE)
vm.def: $(Res_Files) $(Obj_Files) vm.def: $(Res_Files) $(Obj_Files)
sh $(GAMMADIR)/make/linux/makefiles/build_vm_def.sh *.o > $@ sh $(GAMMADIR)/make/linux/makefiles/build_vm_def.sh *.o > $@
mapfile_ext:
rm -f $@
touch $@
if [ -f $(HS_ALT_MAKE)/linux/makefiles/mapfile-ext ]; then \
cat $(HS_ALT_MAKE)/linux/makefiles/mapfile-ext > $@; \
fi
ifeq ($(JVM_VARIANT_ZEROSHARK), true) ifeq ($(JVM_VARIANT_ZEROSHARK), true)
STATIC_CXX = false STATIC_CXX = false
else else
......
...@@ -159,6 +159,7 @@ BUILDTREE_MAKE = $(GAMMADIR)/make/$(OSNAME)/makefiles/buildtree.make ...@@ -159,6 +159,7 @@ BUILDTREE_MAKE = $(GAMMADIR)/make/$(OSNAME)/makefiles/buildtree.make
BUILDTREE_VARS = GAMMADIR=$(GAMMADIR) OS_FAMILY=$(OSNAME) ARCH=$(SRCARCH) BUILDARCH=$(BUILDARCH) LIBARCH=$(LIBARCH) BUILDTREE_VARS = GAMMADIR=$(GAMMADIR) OS_FAMILY=$(OSNAME) ARCH=$(SRCARCH) BUILDARCH=$(BUILDARCH) LIBARCH=$(LIBARCH)
BUILDTREE_VARS += HOTSPOT_RELEASE_VERSION=$(HOTSPOT_RELEASE_VERSION) HOTSPOT_BUILD_VERSION=$(HOTSPOT_BUILD_VERSION) JRE_RELEASE_VERSION=$(JRE_RELEASE_VERSION) BUILDTREE_VARS += HOTSPOT_RELEASE_VERSION=$(HOTSPOT_RELEASE_VERSION) HOTSPOT_BUILD_VERSION=$(HOTSPOT_BUILD_VERSION) JRE_RELEASE_VERSION=$(JRE_RELEASE_VERSION)
BUILDTREE_VARS += ENABLE_FULL_DEBUG_SYMBOLS=$(ENABLE_FULL_DEBUG_SYMBOLS) OBJCOPY=$(OBJCOPY) STRIP_POLICY=$(STRIP_POLICY) ZIP_DEBUGINFO_FILES=$(ZIP_DEBUGINFO_FILES) ZIPEXE=$(ZIPEXE) BUILDTREE_VARS += ENABLE_FULL_DEBUG_SYMBOLS=$(ENABLE_FULL_DEBUG_SYMBOLS) OBJCOPY=$(OBJCOPY) STRIP_POLICY=$(STRIP_POLICY) ZIP_DEBUGINFO_FILES=$(ZIP_DEBUGINFO_FILES) ZIPEXE=$(ZIPEXE)
BUILDTREE_VARS += HS_ALT_MAKE=$(HS_ALT_MAKE)
BUILDTREE = $(MAKE) -f $(BUILDTREE_MAKE) $(BUILDTREE_VARS) BUILDTREE = $(MAKE) -f $(BUILDTREE_MAKE) $(BUILDTREE_VARS)
......
...@@ -258,6 +258,8 @@ flags.make: $(BUILDTREE_MAKE) ../shared_dirs.lst ...@@ -258,6 +258,8 @@ flags.make: $(BUILDTREE_MAKE) ../shared_dirs.lst
echo && echo "ZIP_DEBUGINFO_FILES = $(ZIP_DEBUGINFO_FILES)"; \ echo && echo "ZIP_DEBUGINFO_FILES = $(ZIP_DEBUGINFO_FILES)"; \
[ -n "$(ZIPEXE)" ] && \ [ -n "$(ZIPEXE)" ] && \
echo && echo "ZIPEXE = $(ZIPEXE)"; \ echo && echo "ZIPEXE = $(ZIPEXE)"; \
[ -n "$(HS_ALT_MAKE)" ] && \
echo && echo "HS_ALT_MAKE = $(HS_ALT_MAKE)"; \
[ -n "$(HOTSPOT_EXTRA_SYSDEFS)" ] && \ [ -n "$(HOTSPOT_EXTRA_SYSDEFS)" ] && \
echo && \ echo && \
echo "HOTSPOT_EXTRA_SYSDEFS\$$(HOTSPOT_EXTRA_SYSDEFS) = $(HOTSPOT_EXTRA_SYSDEFS)" && \ echo "HOTSPOT_EXTRA_SYSDEFS\$$(HOTSPOT_EXTRA_SYSDEFS) = $(HOTSPOT_EXTRA_SYSDEFS)" && \
......
...@@ -247,11 +247,12 @@ JVM_OBJ_FILES = $(Obj_Files) $(DTRACE_OBJS) ...@@ -247,11 +247,12 @@ JVM_OBJ_FILES = $(Obj_Files) $(DTRACE_OBJS)
vm_version.o: $(filter-out vm_version.o,$(JVM_OBJ_FILES)) vm_version.o: $(filter-out vm_version.o,$(JVM_OBJ_FILES))
mapfile : $(MAPFILE) $(MAPFILE_DTRACE_OPT) vm.def mapfile : $(MAPFILE) $(MAPFILE_DTRACE_OPT) vm.def mapfile_ext
rm -f $@ rm -f $@
cat $(MAPFILE) $(MAPFILE_DTRACE_OPT) \ cat $(MAPFILE) $(MAPFILE_DTRACE_OPT) \
| $(NAWK) '{ \ | $(NAWK) '{ \
if ($$0 ~ "INSERT VTABLE SYMBOLS HERE") { \ if ($$0 ~ "INSERT VTABLE SYMBOLS HERE") { \
system ("cat mapfile_ext"); \
system ("cat vm.def"); \ system ("cat vm.def"); \
} else { \ } else { \
print $$0; \ print $$0; \
...@@ -265,6 +266,13 @@ mapfile_extended : mapfile $(MAPFILE_DTRACE_OPT) ...@@ -265,6 +266,13 @@ mapfile_extended : mapfile $(MAPFILE_DTRACE_OPT)
vm.def: $(Obj_Files) vm.def: $(Obj_Files)
sh $(GAMMADIR)/make/solaris/makefiles/build_vm_def.sh *.o > $@ sh $(GAMMADIR)/make/solaris/makefiles/build_vm_def.sh *.o > $@
mapfile_ext:
rm -f $@
touch $@
if [ -f $(HS_ALT_MAKE)/solaris/makefiles/mapfile-ext ]; then \
cat $(HS_ALT_MAKE)/solaris/makefiles/mapfile-ext > $@; \
fi
ifeq ($(LINK_INTO),AOUT) ifeq ($(LINK_INTO),AOUT)
LIBJVM.o = LIBJVM.o =
LIBJVM_MAPFILE = LIBJVM_MAPFILE =
......
...@@ -872,21 +872,19 @@ void LIRGenerator::do_Convert(Convert* x) { ...@@ -872,21 +872,19 @@ void LIRGenerator::do_Convert(Convert* x) {
void LIRGenerator::do_NewInstance(NewInstance* x) { void LIRGenerator::do_NewInstance(NewInstance* x) {
print_if_not_loaded(x);
// This instruction can be deoptimized in the slow path : use // This instruction can be deoptimized in the slow path : use
// O0 as result register. // O0 as result register.
const LIR_Opr reg = result_register_for(x->type()); const LIR_Opr reg = result_register_for(x->type());
#ifndef PRODUCT
if (PrintNotLoaded && !x->klass()->is_loaded()) {
tty->print_cr(" ###class not loaded at new bci %d", x->printable_bci());
}
#endif
CodeEmitInfo* info = state_for(x, x->state()); CodeEmitInfo* info = state_for(x, x->state());
LIR_Opr tmp1 = FrameMap::G1_oop_opr; LIR_Opr tmp1 = FrameMap::G1_oop_opr;
LIR_Opr tmp2 = FrameMap::G3_oop_opr; LIR_Opr tmp2 = FrameMap::G3_oop_opr;
LIR_Opr tmp3 = FrameMap::G4_oop_opr; LIR_Opr tmp3 = FrameMap::G4_oop_opr;
LIR_Opr tmp4 = FrameMap::O1_oop_opr; LIR_Opr tmp4 = FrameMap::O1_oop_opr;
LIR_Opr klass_reg = FrameMap::G5_metadata_opr; LIR_Opr klass_reg = FrameMap::G5_metadata_opr;
new_instance(reg, x->klass(), tmp1, tmp2, tmp3, tmp4, klass_reg, info); new_instance(reg, x->klass(), x->is_unresolved(), tmp1, tmp2, tmp3, tmp4, klass_reg, info);
LIR_Opr result = rlock_result(x); LIR_Opr result = rlock_result(x);
__ move(reg, result); __ move(reg, result);
} }
......
...@@ -1085,14 +1085,11 @@ void LIRGenerator::do_Convert(Convert* x) { ...@@ -1085,14 +1085,11 @@ void LIRGenerator::do_Convert(Convert* x) {
void LIRGenerator::do_NewInstance(NewInstance* x) { void LIRGenerator::do_NewInstance(NewInstance* x) {
#ifndef PRODUCT print_if_not_loaded(x);
if (PrintNotLoaded && !x->klass()->is_loaded()) {
tty->print_cr(" ###class not loaded at new bci %d", x->printable_bci());
}
#endif
CodeEmitInfo* info = state_for(x, x->state()); CodeEmitInfo* info = state_for(x, x->state());
LIR_Opr reg = result_register_for(x->type()); LIR_Opr reg = result_register_for(x->type());
new_instance(reg, x->klass(), new_instance(reg, x->klass(), x->is_unresolved(),
FrameMap::rcx_oop_opr, FrameMap::rcx_oop_opr,
FrameMap::rdi_oop_opr, FrameMap::rdi_oop_opr,
FrameMap::rsi_oop_opr, FrameMap::rsi_oop_opr,
......
...@@ -2061,7 +2061,7 @@ void GraphBuilder::new_instance(int klass_index) { ...@@ -2061,7 +2061,7 @@ void GraphBuilder::new_instance(int klass_index) {
bool will_link; bool will_link;
ciKlass* klass = stream()->get_klass(will_link); ciKlass* klass = stream()->get_klass(will_link);
assert(klass->is_instance_klass(), "must be an instance klass"); assert(klass->is_instance_klass(), "must be an instance klass");
NewInstance* new_instance = new NewInstance(klass->as_instance_klass(), state_before); NewInstance* new_instance = new NewInstance(klass->as_instance_klass(), state_before, stream()->is_unresolved_klass());
_memory->new_instance(new_instance); _memory->new_instance(new_instance);
apush(append_split(new_instance)); apush(append_split(new_instance));
} }
......
...@@ -1291,16 +1291,18 @@ LEAF(Invoke, StateSplit) ...@@ -1291,16 +1291,18 @@ LEAF(Invoke, StateSplit)
LEAF(NewInstance, StateSplit) LEAF(NewInstance, StateSplit)
private: private:
ciInstanceKlass* _klass; ciInstanceKlass* _klass;
bool _is_unresolved;
public: public:
// creation // creation
NewInstance(ciInstanceKlass* klass, ValueStack* state_before) NewInstance(ciInstanceKlass* klass, ValueStack* state_before, bool is_unresolved)
: StateSplit(instanceType, state_before) : StateSplit(instanceType, state_before)
, _klass(klass) , _klass(klass), _is_unresolved(is_unresolved)
{} {}
// accessors // accessors
ciInstanceKlass* klass() const { return _klass; } ciInstanceKlass* klass() const { return _klass; }
bool is_unresolved() const { return _is_unresolved; }
virtual bool needs_exception_state() const { return false; } virtual bool needs_exception_state() const { return false; }
......
...@@ -466,8 +466,11 @@ CodeEmitInfo* LIRGenerator::state_for(Instruction* x) { ...@@ -466,8 +466,11 @@ CodeEmitInfo* LIRGenerator::state_for(Instruction* x) {
} }
void LIRGenerator::klass2reg_with_patching(LIR_Opr r, ciMetadata* obj, CodeEmitInfo* info) { void LIRGenerator::klass2reg_with_patching(LIR_Opr r, ciMetadata* obj, CodeEmitInfo* info, bool need_resolve) {
if (!obj->is_loaded() || PatchALot) { /* C2 relies on constant pool entries being resolved (ciTypeFlow), so if TieredCompilation
* is active and the class hasn't yet been resolved we need to emit a patch that resolves
* the class. */
if ((TieredCompilation && need_resolve) || !obj->is_loaded() || PatchALot) {
assert(info != NULL, "info must be set if class is not loaded"); assert(info != NULL, "info must be set if class is not loaded");
__ klass2reg_patch(NULL, r, info); __ klass2reg_patch(NULL, r, info);
} else { } else {
...@@ -660,9 +663,18 @@ void LIRGenerator::monitor_exit(LIR_Opr object, LIR_Opr lock, LIR_Opr new_hdr, L ...@@ -660,9 +663,18 @@ void LIRGenerator::monitor_exit(LIR_Opr object, LIR_Opr lock, LIR_Opr new_hdr, L
__ unlock_object(hdr, object, lock, scratch, slow_path); __ unlock_object(hdr, object, lock, scratch, slow_path);
} }
#ifndef PRODUCT
void LIRGenerator::print_if_not_loaded(const NewInstance* new_instance) {
if (PrintNotLoaded && !new_instance->klass()->is_loaded()) {
tty->print_cr(" ###class not loaded at new bci %d", new_instance->printable_bci());
} else if (PrintNotLoaded && (TieredCompilation && new_instance->is_unresolved())) {
tty->print_cr(" ###class not resolved at new bci %d", new_instance->printable_bci());
}
}
#endif
void LIRGenerator::new_instance(LIR_Opr dst, ciInstanceKlass* klass, LIR_Opr scratch1, LIR_Opr scratch2, LIR_Opr scratch3, LIR_Opr scratch4, LIR_Opr klass_reg, CodeEmitInfo* info) { void LIRGenerator::new_instance(LIR_Opr dst, ciInstanceKlass* klass, bool is_unresolved, LIR_Opr scratch1, LIR_Opr scratch2, LIR_Opr scratch3, LIR_Opr scratch4, LIR_Opr klass_reg, CodeEmitInfo* info) {
klass2reg_with_patching(klass_reg, klass, info); klass2reg_with_patching(klass_reg, klass, info, is_unresolved);
// If klass is not loaded we do not know if the klass has finalizers: // If klass is not loaded we do not know if the klass has finalizers:
if (UseFastNewInstance && klass->is_loaded() if (UseFastNewInstance && klass->is_loaded()
&& !Klass::layout_helper_needs_slow_path(klass->layout_helper())) { && !Klass::layout_helper_needs_slow_path(klass->layout_helper())) {
......
...@@ -169,6 +169,8 @@ class LIRGenerator: public InstructionVisitor, public BlockClosure { ...@@ -169,6 +169,8 @@ class LIRGenerator: public InstructionVisitor, public BlockClosure {
return this; return this;
} }
void print_if_not_loaded(const NewInstance* new_instance) PRODUCT_RETURN;
#ifdef ASSERT #ifdef ASSERT
LIR_List* lir(const char * file, int line) const { LIR_List* lir(const char * file, int line) const {
_lir->set_file_and_line(file, line); _lir->set_file_and_line(file, line);
...@@ -307,7 +309,7 @@ class LIRGenerator: public InstructionVisitor, public BlockClosure { ...@@ -307,7 +309,7 @@ class LIRGenerator: public InstructionVisitor, public BlockClosure {
void store_stack_parameter (LIR_Opr opr, ByteSize offset_from_sp_in_bytes); void store_stack_parameter (LIR_Opr opr, ByteSize offset_from_sp_in_bytes);
void klass2reg_with_patching(LIR_Opr r, ciMetadata* obj, CodeEmitInfo* info); void klass2reg_with_patching(LIR_Opr r, ciMetadata* obj, CodeEmitInfo* info, bool need_resolve = false);
// this loads the length and compares against the index // this loads the length and compares against the index
void array_range_check (LIR_Opr array, LIR_Opr index, CodeEmitInfo* null_check_info, CodeEmitInfo* range_check_info); void array_range_check (LIR_Opr array, LIR_Opr index, CodeEmitInfo* null_check_info, CodeEmitInfo* range_check_info);
...@@ -325,7 +327,7 @@ class LIRGenerator: public InstructionVisitor, public BlockClosure { ...@@ -325,7 +327,7 @@ class LIRGenerator: public InstructionVisitor, public BlockClosure {
void monitor_enter (LIR_Opr object, LIR_Opr lock, LIR_Opr hdr, LIR_Opr scratch, int monitor_no, CodeEmitInfo* info_for_exception, CodeEmitInfo* info); void monitor_enter (LIR_Opr object, LIR_Opr lock, LIR_Opr hdr, LIR_Opr scratch, int monitor_no, CodeEmitInfo* info_for_exception, CodeEmitInfo* info);
void monitor_exit (LIR_Opr object, LIR_Opr lock, LIR_Opr hdr, LIR_Opr scratch, int monitor_no); void monitor_exit (LIR_Opr object, LIR_Opr lock, LIR_Opr hdr, LIR_Opr scratch, int monitor_no);
void new_instance (LIR_Opr dst, ciInstanceKlass* klass, LIR_Opr scratch1, LIR_Opr scratch2, LIR_Opr scratch3, LIR_Opr scratch4, LIR_Opr klass_reg, CodeEmitInfo* info); void new_instance (LIR_Opr dst, ciInstanceKlass* klass, bool is_unresolved, LIR_Opr scratch1, LIR_Opr scratch2, LIR_Opr scratch3, LIR_Opr scratch4, LIR_Opr klass_reg, CodeEmitInfo* info);
// machine dependent // machine dependent
void cmp_mem_int(LIR_Condition condition, LIR_Opr base, int disp, int c, CodeEmitInfo* info); void cmp_mem_int(LIR_Condition condition, LIR_Opr base, int disp, int c, CodeEmitInfo* info);
......
...@@ -100,6 +100,8 @@ const char* Arguments::_gc_log_filename = NULL; ...@@ -100,6 +100,8 @@ const char* Arguments::_gc_log_filename = NULL;
bool Arguments::_has_profile = false; bool Arguments::_has_profile = false;
size_t Arguments::_conservative_max_heap_alignment = 0; size_t Arguments::_conservative_max_heap_alignment = 0;
uintx Arguments::_min_heap_size = 0; uintx Arguments::_min_heap_size = 0;
uintx Arguments::_min_heap_free_ratio = 0;
uintx Arguments::_max_heap_free_ratio = 0;
Arguments::Mode Arguments::_mode = _mixed; Arguments::Mode Arguments::_mode = _mixed;
bool Arguments::_java_compiler = false; bool Arguments::_java_compiler = false;
bool Arguments::_xdebug_mode = false; bool Arguments::_xdebug_mode = false;
...@@ -1599,9 +1601,11 @@ void Arguments::set_parallel_gc_flags() { ...@@ -1599,9 +1601,11 @@ void Arguments::set_parallel_gc_flags() {
// unless the user actually sets these flags. // unless the user actually sets these flags.
if (FLAG_IS_DEFAULT(MinHeapFreeRatio)) { if (FLAG_IS_DEFAULT(MinHeapFreeRatio)) {
FLAG_SET_DEFAULT(MinHeapFreeRatio, 0); FLAG_SET_DEFAULT(MinHeapFreeRatio, 0);
_min_heap_free_ratio = MinHeapFreeRatio;
} }
if (FLAG_IS_DEFAULT(MaxHeapFreeRatio)) { if (FLAG_IS_DEFAULT(MaxHeapFreeRatio)) {
FLAG_SET_DEFAULT(MaxHeapFreeRatio, 100); FLAG_SET_DEFAULT(MaxHeapFreeRatio, 100);
_max_heap_free_ratio = MaxHeapFreeRatio;
} }
} }
...@@ -1976,6 +1980,8 @@ bool Arguments::verify_MinHeapFreeRatio(FormatBuffer<80>& err_msg, uintx min_hea ...@@ -1976,6 +1980,8 @@ bool Arguments::verify_MinHeapFreeRatio(FormatBuffer<80>& err_msg, uintx min_hea
MaxHeapFreeRatio); MaxHeapFreeRatio);
return false; return false;
} }
// This does not set the flag itself, but stores the value in a safe place for later usage.
_min_heap_free_ratio = min_heap_free_ratio;
return true; return true;
} }
...@@ -1990,6 +1996,8 @@ bool Arguments::verify_MaxHeapFreeRatio(FormatBuffer<80>& err_msg, uintx max_hea ...@@ -1990,6 +1996,8 @@ bool Arguments::verify_MaxHeapFreeRatio(FormatBuffer<80>& err_msg, uintx max_hea
MinHeapFreeRatio); MinHeapFreeRatio);
return false; return false;
} }
// This does not set the flag itself, but stores the value in a safe place for later usage.
_max_heap_free_ratio = max_heap_free_ratio;
return true; return true;
} }
......
...@@ -284,7 +284,11 @@ class Arguments : AllStatic { ...@@ -284,7 +284,11 @@ class Arguments : AllStatic {
// Value of the conservative maximum heap alignment needed // Value of the conservative maximum heap alignment needed
static size_t _conservative_max_heap_alignment; static size_t _conservative_max_heap_alignment;
static uintx _min_heap_size; static uintx _min_heap_size;
// Used to store original flag values
static uintx _min_heap_free_ratio;
static uintx _max_heap_free_ratio;
// -Xrun arguments // -Xrun arguments
static AgentLibraryList _libraryList; static AgentLibraryList _libraryList;
...@@ -514,6 +518,10 @@ class Arguments : AllStatic { ...@@ -514,6 +518,10 @@ class Arguments : AllStatic {
static uintx min_heap_size() { return _min_heap_size; } static uintx min_heap_size() { return _min_heap_size; }
static void set_min_heap_size(uintx v) { _min_heap_size = v; } static void set_min_heap_size(uintx v) { _min_heap_size = v; }
// Returns the original values of -XX:MinHeapFreeRatio and -XX:MaxHeapFreeRatio
static uintx min_heap_free_ratio() { return _min_heap_free_ratio; }
static uintx max_heap_free_ratio() { return _max_heap_free_ratio; }
// -Xrun // -Xrun
static AgentLibrary* libraries() { return _libraryList.first(); } static AgentLibrary* libraries() { return _libraryList.first(); }
static bool init_libraries_at_startup() { return !_libraryList.is_empty(); } static bool init_libraries_at_startup() { return !_libraryList.is_empty(); }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册