< prev index next >
src/hotspot/share/gc/parallel/psPromotionManager.cpp
Print this page
*** 21,30 ****
--- 21,31 ----
* questions.
*
*/
#include "precompiled.hpp"
+ #include "classfile/javaClasses.inline.hpp"
#include "gc/parallel/gcTaskManager.hpp"
#include "gc/parallel/mutableSpace.hpp"
#include "gc/parallel/parallelScavengeHeap.hpp"
#include "gc/parallel/psOldGen.hpp"
#include "gc/parallel/psPromotionManager.inline.hpp"
*** 33,48 ****
--- 34,51 ----
#include "gc/shared/preservedMarks.inline.hpp"
#include "gc/shared/taskqueue.inline.hpp"
#include "logging/log.hpp"
#include "logging/logStream.hpp"
#include "memory/allocation.inline.hpp"
+ #include "memory/iterator.inline.hpp"
#include "memory/memRegion.hpp"
#include "memory/padded.inline.hpp"
#include "memory/resourceArea.hpp"
#include "oops/access.inline.hpp"
#include "oops/arrayOop.inline.hpp"
#include "oops/compressedOops.inline.hpp"
+ #include "oops/instanceClassLoaderKlass.inline.hpp"
#include "oops/instanceKlass.inline.hpp"
#include "oops/instanceMirrorKlass.inline.hpp"
#include "oops/objArrayKlass.inline.hpp"
#include "oops/objArrayOop.inline.hpp"
#include "oops/oop.inline.hpp"
*** 392,433 ****
} else {
process_array_chunk_work<oop>(obj, start, end);
}
}
! class PushContentsClosure : public ExtendedOopClosure {
PSPromotionManager* _pm;
public:
PushContentsClosure(PSPromotionManager* pm) : _pm(pm) {}
! template <typename T> void do_oop_nv(T* p) {
if (PSScavenge::should_scavenge(p)) {
_pm->claim_or_forward_depth(p);
}
}
! virtual void do_oop(oop* p) { do_oop_nv(p); }
! virtual void do_oop(narrowOop* p) { do_oop_nv(p); }
// Don't use the oop verification code in the oop_oop_iterate framework.
debug_only(virtual bool should_verify_oops() { return false; })
};
void InstanceKlass::oop_ps_push_contents(oop obj, PSPromotionManager* pm) {
PushContentsClosure cl(pm);
! oop_oop_iterate_oop_maps_reverse<true>(obj, &cl);
}
void InstanceMirrorKlass::oop_ps_push_contents(oop obj, PSPromotionManager* pm) {
// Note that we don't have to follow the mirror -> klass pointer, since all
// klasses that are dirty will be scavenged when we iterate over the
// ClassLoaderData objects.
InstanceKlass::oop_ps_push_contents(obj, pm);
PushContentsClosure cl(pm);
! oop_oop_iterate_statics<true>(obj, &cl);
}
void InstanceClassLoaderKlass::oop_ps_push_contents(oop obj, PSPromotionManager* pm) {
InstanceKlass::oop_ps_push_contents(obj, pm);
--- 395,444 ----
} else {
process_array_chunk_work<oop>(obj, start, end);
}
}
! class PushContentsClosure : public BasicOopIterateClosure {
PSPromotionManager* _pm;
public:
PushContentsClosure(PSPromotionManager* pm) : _pm(pm) {}
! template <typename T> void do_oop_work(T* p) {
if (PSScavenge::should_scavenge(p)) {
_pm->claim_or_forward_depth(p);
}
}
! virtual void do_oop(oop* p) { do_oop_work(p); }
! virtual void do_oop(narrowOop* p) { do_oop_work(p); }
// Don't use the oop verification code in the oop_oop_iterate framework.
debug_only(virtual bool should_verify_oops() { return false; })
};
void InstanceKlass::oop_ps_push_contents(oop obj, PSPromotionManager* pm) {
PushContentsClosure cl(pm);
! if (UseCompressedOops) {
! oop_oop_iterate_oop_maps_reverse<narrowOop>(obj, &cl);
! } else {
! oop_oop_iterate_oop_maps_reverse<oop>(obj, &cl);
! }
}
void InstanceMirrorKlass::oop_ps_push_contents(oop obj, PSPromotionManager* pm) {
// Note that we don't have to follow the mirror -> klass pointer, since all
// klasses that are dirty will be scavenged when we iterate over the
// ClassLoaderData objects.
InstanceKlass::oop_ps_push_contents(obj, pm);
PushContentsClosure cl(pm);
! if (UseCompressedOops) {
! oop_oop_iterate_statics<narrowOop>(obj, &cl);
! } else {
! oop_oop_iterate_statics<oop>(obj, &cl);
! }
}
void InstanceClassLoaderKlass::oop_ps_push_contents(oop obj, PSPromotionManager* pm) {
InstanceKlass::oop_ps_push_contents(obj, pm);
*** 467,477 ****
}
void ObjArrayKlass::oop_ps_push_contents(oop obj, PSPromotionManager* pm) {
assert(obj->is_objArray(), "obj must be obj array");
PushContentsClosure cl(pm);
! oop_oop_iterate_elements<true>(objArrayOop(obj), &cl);
}
void TypeArrayKlass::oop_ps_push_contents(oop obj, PSPromotionManager* pm) {
assert(obj->is_typeArray(),"must be a type array");
ShouldNotReachHere();
--- 478,492 ----
}
void ObjArrayKlass::oop_ps_push_contents(oop obj, PSPromotionManager* pm) {
assert(obj->is_objArray(), "obj must be obj array");
PushContentsClosure cl(pm);
! if (UseCompressedOops) {
! oop_oop_iterate_elements<narrowOop>(objArrayOop(obj), &cl);
! } else {
! oop_oop_iterate_elements<oop>(objArrayOop(obj), &cl);
! }
}
void TypeArrayKlass::oop_ps_push_contents(oop obj, PSPromotionManager* pm) {
assert(obj->is_typeArray(),"must be a type array");
ShouldNotReachHere();
< prev index next >