src/share/vm/memory/genCollectedHeap.cpp
Index
Unified diffs
Context diffs
Sdiffs
Patch
New
Old
Previous File
Next File
*** old/src/share/vm/memory/genCollectedHeap.cpp Mon Aug 12 15:28:38 2013
--- new/src/share/vm/memory/genCollectedHeap.cpp Mon Aug 12 15:28:38 2013
*** 1068,1084 ****
--- 1068,1084 ----
return _gch;
}
void GenCollectedHeap::prepare_for_compaction() {
! Generation* scanning_gen = _gens[_n_gens-1];
! guarantee(_n_gens = 2, "Wrong number of generations");
+ Generation* old_gen = _gens[1];
// Start by compacting into same gen.
! CompactPoint cp(scanning_gen, NULL, NULL);
while (scanning_gen != NULL) {
! scanning_gen->prepare_for_compaction(&cp);
! scanning_gen = prev_gen(scanning_gen);
}
! CompactPoint cp(old_gen, NULL, NULL);
+ old_gen->prepare_for_compaction(&cp);
! Generation* young_gen = prev_gen(old_gen);
! young_gen->prepare_for_compaction(&cp);
}
GCStats* GenCollectedHeap::gc_stats(int level) const {
return _gens[level]->gc_stats();
}
*** 1243,1273 ****
--- 1243,1260 ----
CollectedHeap::ensure_parsability(retire_tlabs);
GenEnsureParsabilityClosure ep_cl;
generation_iterate(&ep_cl, false);
}
! oop GenCollectedHeap::handle_failed_promotion(Generation* old_gen,
oop obj,
size_t obj_size) {
assert(obj_size == (size_t)obj->size(), "bad obj_size passed in");
HeapWord* result = NULL;
// First give each higher generation a chance to allocate the promoted object.
! Generation* allocator = next_gen(gen);
if (allocator != NULL) {
do {
result = allocator->allocate(obj_size, false);
} while (result == NULL && (allocator = next_gen(allocator)) != NULL);
}
if (result == NULL) {
// Then give gen and higher generations a chance to expand and allocate the
// object.
do {
result = gen->expand_and_allocate(obj_size, false);
} while (result == NULL && (gen = next_gen(gen)) != NULL);
}
+ guarantee(old_gen->level() == 1, "We only get here with an old generation");
! result = old_gen->expand_and_allocate(obj_size, false);
if (result != NULL) {
Copy::aligned_disjoint_words((HeapWord*)obj, result, obj_size);
}
return oop(result);
src/share/vm/memory/genCollectedHeap.cpp
Index
Unified diffs
Context diffs
Sdiffs
Patch
New
Old
Previous File
Next File