diff src/share/vm/oops/oop.pcgc.inline.hpp @ 113:ba764ed4b6f2

6420645: Create a vm that uses compressed oops for up to 32gb heapsizes Summary: Compressed oops in instances, arrays, and headers. Code contributors are coleenp, phh, never, swamyv Reviewed-by: jmasa, kamg, acorn, tbell, kvn, rasbold
author coleenp
date Sun, 13 Apr 2008 17:43:42 -0400
parents a61af66fc99e
children d1605aabd0a1
line wrap: on
line diff
--- a/src/share/vm/oops/oop.pcgc.inline.hpp	Fri Apr 11 09:56:35 2008 -0400
+++ b/src/share/vm/oops/oop.pcgc.inline.hpp	Sun Apr 13 17:43:42 2008 -0400
@@ -67,8 +67,8 @@
   // 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);
   }
 
@@ -89,7 +89,11 @@
 // 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) {
@@ -114,9 +118,18 @@
 }
 
 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);
+  }
 }