src/share/vm/gc_interface/collectedHeap.cpp
Print this page
@@ -54,10 +54,13 @@
int CollectedHeap::_fire_out_of_memory_count = 0;
#endif
size_t CollectedHeap::_filler_array_max_size = 0;
+const char* CollectedHeap::OverflowMessage
+ = "The size of the object heap + perm gen exceeds the maximum representable size";
+
template <>
void EventLogBase<GCMessage>::print(outputStream* st, GCMessage& m) {
st->print_cr("GC heap %s", m.is_before ? "before" : "after");
st->print_raw(m);
}
@@ -178,10 +181,30 @@
#else
assert(_defer_initial_card_mark == false, "Who would set it?");
#endif
}
+size_t CollectedHeap::add_and_check_overflow(size_t total, size_t size) {
+ assert(size >= 0, "must be");
+ size_t result = total + size;
+ if (result < size) {
+ // We must have overflowed
+ vm_exit_during_initialization(CollectedHeap::OverflowMessage);
+ }
+ return result;
+}
+
+size_t CollectedHeap::round_up_and_check_overflow(size_t total, size_t size) {
+ assert(size >= 0, "must be");
+ size_t result = round_to(total, size);
+ if (result < size) {
+ // We must have overflowed
+ vm_exit_during_initialization(CollectedHeap::OverflowMessage);
+ }
+ return result;
+}
+
#ifndef PRODUCT
void CollectedHeap::check_for_bad_heap_word_value(HeapWord* addr, size_t size) {
if (CheckMemoryInitialization && ZapUnusedHeapArea) {
for (size_t slot = 0; slot < size; slot += 1) {
assert((*(intptr_t*) (addr + slot)) != ((intptr_t) badHeapWordVal),