hotspot/src/share/vm/oops/oop.pcgc.inline.hpp
Print this page
rev 611 : Merge
@@ -1,10 +1,10 @@
#ifdef USE_PRAGMA_IDENT_HDR
#pragma ident "@(#)oop.pcgc.inline.hpp 1.16 07/05/29 09:44:24 JVM"
#endif
/*
- * Copyright 2005-2007 Sun Microsystems, Inc. All Rights Reserved.
+ * Copyright 2005-2008 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
@@ -68,12 +68,12 @@
// Needs to be boundary aware for the 64 bit case
// update_header();
// The klass has moved. Is the location of the klass
// within the limits?
- if ((((HeapWord*)&_klass) >= begin_limit) &&
- (((HeapWord*)&_klass) < end_limit)) {
+ if ((((HeapWord*)&_metadata._klass) >= begin_limit) &&
+ (((HeapWord*)&_metadata._klass) < end_limit)) {
set_klass(updated_klass);
}
Klass* klass = updated_klass->klass_part();
if (!klass->oop_is_typeArray()) {
@@ -90,11 +90,15 @@
}
// Used by parallel old GC.
inline void oopDesc::follow_header(ParCompactionManager* cm) {
- PSParallelCompact::mark_and_push(cm, (oop*)&_klass);
+ if (UseCompressedOops) {
+ PSParallelCompact::mark_and_push(cm, compressed_klass_addr());
+ } else {
+ PSParallelCompact::mark_and_push(cm, klass_addr());
+ }
}
inline oop oopDesc::forward_to_atomic(oop p) {
assert(ParNewGeneration::is_legal_forward_ptr(p),
"illegal forwarding pointer value.");
@@ -115,11 +119,20 @@
}
return forwardee();
}
inline void oopDesc::update_header() {
- PSParallelCompact::adjust_pointer((oop*)&_klass);
+ if (UseCompressedOops) {
+ PSParallelCompact::adjust_pointer(compressed_klass_addr());
+ } else {
+ PSParallelCompact::adjust_pointer(klass_addr());
+ }
}
inline void oopDesc::update_header(HeapWord* beg_addr, HeapWord* end_addr) {
- PSParallelCompact::adjust_pointer((oop*)&_klass, beg_addr, end_addr);
+ if (UseCompressedOops) {
+ PSParallelCompact::adjust_pointer(compressed_klass_addr(),
+ beg_addr, end_addr);
+ } else {
+ PSParallelCompact::adjust_pointer(klass_addr(), beg_addr, end_addr);
+ }
}