diff --git a/src/hotspot/share/gc/serial/defNewGeneration.cpp b/src/hotspot/share/gc/serial/defNewGeneration.cpp index 964c7661d31..93d600d1836 100644 --- a/src/hotspot/share/gc/serial/defNewGeneration.cpp +++ b/src/hotspot/share/gc/serial/defNewGeneration.cpp @@ -723,6 +723,12 @@ void DefNewGeneration::adjust_desired_tenuring_threshold() { age_table()->print_age_table(_tenuring_threshold); } +bool DefNewGeneration::block_is_obj(const HeapWord* addr) const { + return eden()->is_in(addr) + || from()->is_in(addr) + || to() ->is_in(addr); +} + void DefNewGeneration::collect(bool full, bool clear_all_soft_refs, size_t size, diff --git a/src/hotspot/share/gc/serial/defNewGeneration.hpp b/src/hotspot/share/gc/serial/defNewGeneration.hpp index d6ed965847e..f5371b98a9e 100644 --- a/src/hotspot/share/gc/serial/defNewGeneration.hpp +++ b/src/hotspot/share/gc/serial/defNewGeneration.hpp @@ -257,6 +257,10 @@ class DefNewGeneration: public Generation { // at some additional cost. bool collection_attempt_is_safe(); + // Requires "addr" to be the start of a block, and returns "TRUE" iff + // the block is an object. + bool block_is_obj(const HeapWord* addr) const; + virtual void collect(bool full, bool clear_all_soft_refs, size_t size, diff --git a/src/hotspot/share/gc/serial/generation.cpp b/src/hotspot/share/gc/serial/generation.cpp index 33910a2b380..ed0d193515e 100644 --- a/src/hotspot/share/gc/serial/generation.cpp +++ b/src/hotspot/share/gc/serial/generation.cpp @@ -164,22 +164,3 @@ HeapWord* Generation::block_start(const void* p) const { ((Generation*)this)->space_iterate(&blk); return blk._start; } - -class GenerationBlockIsObjClosure : public SpaceClosure { - public: - const HeapWord* _p; - bool is_obj; - virtual void do_space(Space* s) { - if (!is_obj && s->is_in_reserved(_p)) { - is_obj |= s->block_is_obj(_p); - } - } - GenerationBlockIsObjClosure(const HeapWord* p) { _p = p; is_obj = false; } -}; - -bool Generation::block_is_obj(const HeapWord* p) const { - GenerationBlockIsObjClosure blk(p); - // Cast away const - ((Generation*)this)->space_iterate(&blk); - return blk.is_obj; -} diff --git a/src/hotspot/share/gc/serial/generation.hpp b/src/hotspot/share/gc/serial/generation.hpp index fbe1bff6c9b..f6a7ffd5abe 100644 --- a/src/hotspot/share/gc/serial/generation.hpp +++ b/src/hotspot/share/gc/serial/generation.hpp @@ -234,10 +234,6 @@ class Generation: public CHeapObj { // non-object. virtual HeapWord* block_start(const void* addr) const; - // Requires "addr" to be the start of a block, and returns "TRUE" iff - // the block is an object. - virtual bool block_is_obj(const HeapWord* addr) const; - virtual void print() const; virtual void print_on(outputStream* st) const; diff --git a/src/hotspot/share/gc/serial/tenuredGeneration.hpp b/src/hotspot/share/gc/serial/tenuredGeneration.hpp index 55f07a717a3..cb4aaf557ee 100644 --- a/src/hotspot/share/gc/serial/tenuredGeneration.hpp +++ b/src/hotspot/share/gc/serial/tenuredGeneration.hpp @@ -129,6 +129,8 @@ class TenuredGeneration: public Generation { bool no_allocs_since_save_marks(); + // Requires "addr" to be the start of a block, and returns "TRUE" iff + // the block is an object. inline bool block_is_obj(const HeapWord* addr) const; virtual void collect(bool full, diff --git a/src/hotspot/share/gc/serial/tenuredGeneration.inline.hpp b/src/hotspot/share/gc/serial/tenuredGeneration.inline.hpp index 4f8b51c99ff..1d978c56f6f 100644 --- a/src/hotspot/share/gc/serial/tenuredGeneration.inline.hpp +++ b/src/hotspot/share/gc/serial/tenuredGeneration.inline.hpp @@ -62,7 +62,7 @@ HeapWord* TenuredGeneration::par_allocate(size_t word_size, } bool TenuredGeneration::block_is_obj(const HeapWord* addr) const { - return addr < _the_space ->top(); + return addr < _the_space->top(); } template