mirror of
https://github.com/openjdk/jdk.git
synced 2025-09-18 10:04:42 +02:00
8038412: Move object_iterate_careful down from Space to ContigousSpace and CFLSpace
Only declare the functions where they are actually needed. Reviewed-by: tschatzl, stefank
This commit is contained in:
parent
e72dd1b433
commit
c62c16f94a
4 changed files with 10 additions and 61 deletions
|
@ -905,39 +905,6 @@ void CompactibleFreeListSpace::object_iterate_mem(MemRegion mr,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Callers of this iterator beware: The closure application should
|
|
||||||
// be robust in the face of uninitialized objects and should (always)
|
|
||||||
// return a correct size so that the next addr + size below gives us a
|
|
||||||
// valid block boundary. [See for instance,
|
|
||||||
// ScanMarkedObjectsAgainCarefullyClosure::do_object_careful()
|
|
||||||
// in ConcurrentMarkSweepGeneration.cpp.]
|
|
||||||
HeapWord*
|
|
||||||
CompactibleFreeListSpace::object_iterate_careful(ObjectClosureCareful* cl) {
|
|
||||||
assert_lock_strong(freelistLock());
|
|
||||||
HeapWord *addr, *last;
|
|
||||||
size_t size;
|
|
||||||
for (addr = bottom(), last = end();
|
|
||||||
addr < last; addr += size) {
|
|
||||||
FreeChunk* fc = (FreeChunk*)addr;
|
|
||||||
if (fc->is_free()) {
|
|
||||||
// Since we hold the free list lock, which protects direct
|
|
||||||
// allocation in this generation by mutators, a free object
|
|
||||||
// will remain free throughout this iteration code.
|
|
||||||
size = fc->size();
|
|
||||||
} else {
|
|
||||||
// Note that the object need not necessarily be initialized,
|
|
||||||
// because (for instance) the free list lock does NOT protect
|
|
||||||
// object initialization. The closure application below must
|
|
||||||
// therefore be correct in the face of uninitialized objects.
|
|
||||||
size = cl->do_object_careful(oop(addr));
|
|
||||||
if (size == 0) {
|
|
||||||
// An unparsable object found. Signal early termination.
|
|
||||||
return addr;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Callers of this iterator beware: The closure application should
|
// Callers of this iterator beware: The closure application should
|
||||||
// be robust in the face of uninitialized objects and should (always)
|
// be robust in the face of uninitialized objects and should (always)
|
||||||
|
|
|
@ -377,11 +377,8 @@ class CompactibleFreeListSpace: public CompactibleSpace {
|
||||||
// terminate the iteration and return the address of the start of the
|
// terminate the iteration and return the address of the start of the
|
||||||
// subregion that isn't done. Return of "NULL" indicates that the
|
// subregion that isn't done. Return of "NULL" indicates that the
|
||||||
// iteration completed.
|
// iteration completed.
|
||||||
virtual HeapWord*
|
HeapWord* object_iterate_careful_m(MemRegion mr,
|
||||||
object_iterate_careful_m(MemRegion mr,
|
ObjectClosureCareful* cl);
|
||||||
ObjectClosureCareful* cl);
|
|
||||||
virtual HeapWord*
|
|
||||||
object_iterate_careful(ObjectClosureCareful* cl);
|
|
||||||
|
|
||||||
// Override: provides a DCTO_CL specific to this kind of space.
|
// Override: provides a DCTO_CL specific to this kind of space.
|
||||||
DirtyCardToOopClosure* new_dcto_cl(ExtendedOopClosure* cl,
|
DirtyCardToOopClosure* new_dcto_cl(ExtendedOopClosure* cl,
|
||||||
|
|
|
@ -547,17 +547,6 @@ void Space::oop_iterate(ExtendedOopClosure* blk) {
|
||||||
object_iterate(&blk2);
|
object_iterate(&blk2);
|
||||||
}
|
}
|
||||||
|
|
||||||
HeapWord* Space::object_iterate_careful(ObjectClosureCareful* cl) {
|
|
||||||
guarantee(false, "NYI");
|
|
||||||
return bottom();
|
|
||||||
}
|
|
||||||
|
|
||||||
HeapWord* Space::object_iterate_careful_m(MemRegion mr,
|
|
||||||
ObjectClosureCareful* cl) {
|
|
||||||
guarantee(false, "NYI");
|
|
||||||
return bottom();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool Space::obj_is_alive(const HeapWord* p) const {
|
bool Space::obj_is_alive(const HeapWord* p) const {
|
||||||
assert (block_is_obj(p), "The address should point to an object");
|
assert (block_is_obj(p), "The address should point to an object");
|
||||||
return true;
|
return true;
|
||||||
|
|
|
@ -204,17 +204,6 @@ class Space: public CHeapObj<mtGC> {
|
||||||
// objects whose internal references point to objects in the space.
|
// objects whose internal references point to objects in the space.
|
||||||
virtual void safe_object_iterate(ObjectClosure* blk) = 0;
|
virtual void safe_object_iterate(ObjectClosure* blk) = 0;
|
||||||
|
|
||||||
// Iterate over as many initialized objects in the space as possible,
|
|
||||||
// calling "cl.do_object_careful" on each. Return NULL if all objects
|
|
||||||
// in the space (at the start of the iteration) were iterated over.
|
|
||||||
// Return an address indicating the extent of the iteration in the
|
|
||||||
// event that the iteration had to return because of finding an
|
|
||||||
// uninitialized object in the space, or if the closure "cl"
|
|
||||||
// signaled early termination.
|
|
||||||
virtual HeapWord* object_iterate_careful(ObjectClosureCareful* cl);
|
|
||||||
virtual HeapWord* object_iterate_careful_m(MemRegion mr,
|
|
||||||
ObjectClosureCareful* cl);
|
|
||||||
|
|
||||||
// Create and return a new dirty card to oop closure. Can be
|
// Create and return a new dirty card to oop closure. Can be
|
||||||
// overridden to return the appropriate type of closure
|
// overridden to return the appropriate type of closure
|
||||||
// depending on the type of space in which the closure will
|
// depending on the type of space in which the closure will
|
||||||
|
@ -833,7 +822,14 @@ class ContiguousSpace: public CompactibleSpace {
|
||||||
// For contiguous spaces this method will iterate safely over objects
|
// For contiguous spaces this method will iterate safely over objects
|
||||||
// in the space (i.e., between bottom and top) when at a safepoint.
|
// in the space (i.e., between bottom and top) when at a safepoint.
|
||||||
void safe_object_iterate(ObjectClosure* blk);
|
void safe_object_iterate(ObjectClosure* blk);
|
||||||
// iterates on objects up to the safe limit
|
|
||||||
|
// Iterate over as many initialized objects in the space as possible,
|
||||||
|
// calling "cl.do_object_careful" on each. Return NULL if all objects
|
||||||
|
// in the space (at the start of the iteration) were iterated over.
|
||||||
|
// Return an address indicating the extent of the iteration in the
|
||||||
|
// event that the iteration had to return because of finding an
|
||||||
|
// uninitialized object in the space, or if the closure "cl"
|
||||||
|
// signaled early termination.
|
||||||
HeapWord* object_iterate_careful(ObjectClosureCareful* cl);
|
HeapWord* object_iterate_careful(ObjectClosureCareful* cl);
|
||||||
HeapWord* concurrent_iteration_safe_limit() {
|
HeapWord* concurrent_iteration_safe_limit() {
|
||||||
assert(_concurrent_iteration_safe_limit <= top(),
|
assert(_concurrent_iteration_safe_limit <= top(),
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue