--- a/hotspot/make/bsd/makefiles/vm.make Thu Sep 18 18:40:37 2014 +0000
+++ b/hotspot/make/bsd/makefiles/vm.make Fri Sep 19 11:51:06 2014 +0200
@@ -234,10 +234,10 @@
vm_version.o: $(filter-out vm_version.o,$(JVM_OBJ_FILES))
-mapfile : $(MAPFILE) vm.def
+mapfile : $(MAPFILE) vm.def mapfile_ext
rm -f $@
awk '{ if ($$0 ~ "INSERT VTABLE SYMBOLS HERE") \
- { system ("cat vm.def"); } \
+ { system ("cat mapfile_ext"); system ("cat vm.def"); } \
else \
{ print $$0 } \
}' > $@ < $(MAPFILE)
@@ -249,6 +249,13 @@
vm.def: $(Res_Files) $(Obj_Files)
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
ifeq ($(LINK_INTO),AOUT)
--- a/hotspot/make/linux/makefiles/vm.make Thu Sep 18 18:40:37 2014 +0000
+++ b/hotspot/make/linux/makefiles/vm.make Fri Sep 19 11:51:06 2014 +0200
@@ -227,10 +227,10 @@
vm_version.o: $(filter-out vm_version.o,$(JVM_OBJ_FILES))
-mapfile : $(MAPFILE) vm.def
+mapfile : $(MAPFILE) vm.def mapfile_ext
rm -f $@
awk '{ if ($$0 ~ "INSERT VTABLE SYMBOLS HERE") \
- { system ("cat vm.def"); } \
+ { system ("cat mapfile_ext"); system ("cat vm.def"); } \
else \
{ print $$0 } \
}' > $@ < $(MAPFILE)
@@ -242,6 +242,13 @@
vm.def: $(Res_Files) $(Obj_Files)
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)
STATIC_CXX = false
else
--- a/hotspot/make/solaris/makefiles/buildtree.make Thu Sep 18 18:40:37 2014 +0000
+++ b/hotspot/make/solaris/makefiles/buildtree.make Fri Sep 19 11:51:06 2014 +0200
@@ -258,6 +258,8 @@
echo && echo "ZIP_DEBUGINFO_FILES = $(ZIP_DEBUGINFO_FILES)"; \
[ -n "$(ZIPEXE)" ] && \
echo && echo "ZIPEXE = $(ZIPEXE)"; \
+ [ -n "$(HS_ALT_MAKE)" ] && \
+ echo && echo "HS_ALT_MAKE = $(HS_ALT_MAKE)"; \
[ -n "$(HOTSPOT_EXTRA_SYSDEFS)" ] && \
echo && \
echo "HOTSPOT_EXTRA_SYSDEFS\$$(HOTSPOT_EXTRA_SYSDEFS) = $(HOTSPOT_EXTRA_SYSDEFS)" && \
--- a/hotspot/make/solaris/makefiles/vm.make Thu Sep 18 18:40:37 2014 +0000
+++ b/hotspot/make/solaris/makefiles/vm.make Fri Sep 19 11:51:06 2014 +0200
@@ -249,11 +249,12 @@
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 $@
cat $(MAPFILE) $(MAPFILE_DTRACE_OPT) \
| $(NAWK) '{ \
if ($$0 ~ "INSERT VTABLE SYMBOLS HERE") { \
+ system ("cat mapfile_ext"); \
system ("cat vm.def"); \
} else { \
print $$0; \
@@ -267,6 +268,13 @@
vm.def: $(Obj_Files)
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)
LIBJVM.o =
LIBJVM_MAPFILE =
--- a/hotspot/src/os/solaris/vm/os_solaris.cpp Thu Sep 18 18:40:37 2014 +0000
+++ b/hotspot/src/os/solaris/vm/os_solaris.cpp Fri Sep 19 11:51:06 2014 +0200
@@ -3129,8 +3129,7 @@
return true;
}
-char* os::reserve_memory_special(size_t size, size_t alignment, char* addr,
- bool exec) {
+char* os::reserve_memory_special(size_t size, size_t alignment, char* addr, bool exec) {
fatal("os::reserve_memory_special should not be called on Solaris.");
return NULL;
}
--- a/hotspot/src/share/vm/gc_implementation/g1/heapRegion.cpp Thu Sep 18 18:40:37 2014 +0000
+++ b/hotspot/src/share/vm/gc_implementation/g1/heapRegion.cpp Fri Sep 19 11:51:06 2014 +0200
@@ -213,7 +213,7 @@
void HeapRegion::hr_clear(bool par, bool clear_space, bool locked) {
assert(_humongous_start_region == NULL,
"we should have already filtered out humongous regions");
- assert(_end == _orig_end,
+ assert(_end == orig_end(),
"we should have already filtered out humongous regions");
_in_collection_set = false;
@@ -266,7 +266,7 @@
void HeapRegion::set_startsHumongous(HeapWord* new_top, HeapWord* new_end) {
assert(!isHumongous(), "sanity / pre-condition");
- assert(end() == _orig_end,
+ assert(end() == orig_end(),
"Should be normal before the humongous object allocation");
assert(top() == bottom(), "should be empty");
assert(bottom() <= new_top && new_top <= new_end, "pre-condition");
@@ -280,7 +280,7 @@
void HeapRegion::set_continuesHumongous(HeapRegion* first_hr) {
assert(!isHumongous(), "sanity / pre-condition");
- assert(end() == _orig_end,
+ assert(end() == orig_end(),
"Should be normal before the humongous object allocation");
assert(top() == bottom(), "should be empty");
assert(first_hr->startsHumongous(), "pre-condition");
@@ -294,14 +294,14 @@
if (startsHumongous()) {
assert(top() <= end(), "pre-condition");
- set_end(_orig_end);
+ set_end(orig_end());
if (top() > end()) {
// at least one "continues humongous" region after it
set_top(end());
}
} else {
// continues humongous
- assert(end() == _orig_end, "sanity");
+ assert(end() == orig_end(), "sanity");
}
assert(capacity() == HeapRegion::GrainBytes, "pre-condition");
@@ -326,7 +326,7 @@
_hrm_index(hrm_index),
_humongous_start_region(NULL),
_in_collection_set(false),
- _next_in_special_set(NULL), _orig_end(NULL),
+ _next_in_special_set(NULL),
_claimed(InitialClaimValue), _evacuation_failed(false),
_prev_marked_bytes(0), _next_marked_bytes(0), _gc_efficiency(0.0),
_next_young_region(NULL),
@@ -349,10 +349,14 @@
G1OffsetTableContigSpace::initialize(mr, clear_space, mangle_space);
- _orig_end = mr.end();
hr_clear(false /*par*/, false /*clear_space*/);
set_top(bottom());
record_top_and_timestamp();
+
+ assert(mr.end() == orig_end(),
+ err_msg("Given region end address " PTR_FORMAT " should match exactly "
+ "bottom plus one region size, i.e. " PTR_FORMAT,
+ p2i(mr.end()), p2i(orig_end())));
}
CompactibleSpace* HeapRegion::next_compaction_space() const {
--- a/hotspot/src/share/vm/gc_implementation/g1/heapRegion.hpp Thu Sep 18 18:40:37 2014 +0000
+++ b/hotspot/src/share/vm/gc_implementation/g1/heapRegion.hpp Fri Sep 19 11:51:06 2014 +0200
@@ -226,9 +226,6 @@
// For a humongous region, region in which it starts.
HeapRegion* _humongous_start_region;
- // For the start region of a humongous sequence, it's original end().
- HeapWord* _orig_end;
-
// True iff the region is in current collection_set.
bool _in_collection_set;
@@ -452,7 +449,7 @@
// their _end set up to be the end of the last continues region of the
// corresponding humongous object.
bool is_in_reserved_raw(const void* p) const {
- return _bottom <= p && p < _orig_end;
+ return _bottom <= p && p < orig_end();
}
// Makes the current region be a "starts humongous" region, i.e.,
@@ -556,7 +553,8 @@
void set_next_dirty_cards_region(HeapRegion* hr) { _next_dirty_cards_region = hr; }
bool is_on_dirty_cards_region_list() const { return get_next_dirty_cards_region() != NULL; }
- HeapWord* orig_end() const { return _orig_end; }
+ // For the start region of a humongous sequence, it's original end().
+ HeapWord* orig_end() const { return _bottom + GrainWords; }
// Reset HR stuff to default values.
void hr_clear(bool par, bool clear_space, bool locked = false);
--- a/hotspot/src/share/vm/runtime/arguments.cpp Thu Sep 18 18:40:37 2014 +0000
+++ b/hotspot/src/share/vm/runtime/arguments.cpp Fri Sep 19 11:51:06 2014 +0200
@@ -88,6 +88,8 @@
bool Arguments::_has_profile = false;
size_t Arguments::_conservative_max_heap_alignment = 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;
bool Arguments::_java_compiler = false;
bool Arguments::_xdebug_mode = false;
@@ -1630,9 +1632,11 @@
// unless the user actually sets these flags.
if (FLAG_IS_DEFAULT(MinHeapFreeRatio)) {
FLAG_SET_DEFAULT(MinHeapFreeRatio, 0);
+ _min_heap_free_ratio = MinHeapFreeRatio;
}
if (FLAG_IS_DEFAULT(MaxHeapFreeRatio)) {
FLAG_SET_DEFAULT(MaxHeapFreeRatio, 100);
+ _max_heap_free_ratio = MaxHeapFreeRatio;
}
}
@@ -2025,6 +2029,8 @@
MaxHeapFreeRatio);
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;
}
@@ -2039,6 +2045,8 @@
MinHeapFreeRatio);
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;
}
--- a/hotspot/src/share/vm/runtime/arguments.hpp Thu Sep 18 18:40:37 2014 +0000
+++ b/hotspot/src/share/vm/runtime/arguments.hpp Fri Sep 19 11:51:06 2014 +0200
@@ -285,7 +285,11 @@
// Value of the conservative maximum heap alignment needed
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
static AgentLibraryList _libraryList;
@@ -516,6 +520,10 @@
static uintx min_heap_size() { return _min_heap_size; }
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
static AgentLibrary* libraries() { return _libraryList.first(); }
static bool init_libraries_at_startup() { return !_libraryList.is_empty(); }