--- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psTasks.cpp Fri Apr 11 09:56:35 2008 -0400
+++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psTasks.cpp Sun Apr 13 17:43:42 2008 -0400
@@ -34,15 +34,17 @@
private:
PSPromotionManager* _promotion_manager;
- public:
- PSScavengeRootsClosure(PSPromotionManager* pm) : _promotion_manager(pm) { }
-
- virtual void do_oop(oop* p) {
- if (PSScavenge::should_scavenge(*p)) {
+ protected:
+ template <class T> void do_oop_work(T *p) {
+ if (PSScavenge::should_scavenge(p)) {
// We never card mark roots, maybe call a func without test?
PSScavenge::copy_and_push_safe_barrier(_promotion_manager, p);
}
}
+ public:
+ PSScavengeRootsClosure(PSPromotionManager* pm) : _promotion_manager(pm) { }
+ void do_oop(oop* p) { PSScavengeRootsClosure::do_oop_work(p); }
+ void do_oop(narrowOop* p) { PSScavengeRootsClosure::do_oop_work(p); }
};
void ScavengeRootsTask::do_it(GCTaskManager* manager, uint which) {
@@ -135,7 +137,7 @@
int random_seed = 17;
if (pm->depth_first()) {
while(true) {
- oop* p;
+ StarTask p;
if (PSPromotionManager::steal_depth(which, &random_seed, p)) {
#if PS_PM_STATS
pm->increment_steals(p);
@@ -164,8 +166,7 @@
}
}
}
- guarantee(pm->stacks_empty(),
- "stacks should be empty at this point");
+ guarantee(pm->stacks_empty(), "stacks should be empty at this point");
}
//