00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 
00023 
00024 inline smi memOopDesc::identity_hash() {
00025   
00026   
00027   return hash_markOop(addr()->_mark);
00028 }
00029 
00030 inline void memOopDesc::scavenge_header() { 
00031   
00032   
00033 }
00034 
00035 inline void memOopDesc::scavenge_body(int begin, int end) { 
00036   oop* p = (oop*) addr();
00037   oop* q = p + end;
00038   p     += begin;
00039   while (p < q) scavenge_oop(p++);
00040 }
00041 
00042 inline void memOopDesc::scavenge_tenured_body(int begin, int end) {
00043   oop* p = (oop*) addr();
00044   oop* q = p + end;
00045   p     += begin;
00046   while (p < q) scavenge_tenured_oop(p++);
00047 }
00048 
00049 inline void memOopDesc::follow_header() { 
00050   MarkSweep::reverse_and_push(klass_addr());
00051 }
00052 
00053 inline void memOopDesc::follow_body(int begin, int end) { 
00054   oop* p = (oop*) addr();
00055   oop* q = p + end;
00056   p     += begin;
00057   while (p < q) MarkSweep::reverse_and_push(p++);
00058 }
00059 
00060 inline void memOopDesc::layout_iterate_header(ObjectLayoutClosure* blk) {
00061   blk->do_mark(&addr()->_mark);
00062   blk->do_oop("klass", (oop*) &addr()->_klass_field);
00063 }
00064 
00065 inline void memOopDesc::oop_iterate_header(OopClosure* blk) {
00066   blk->do_oop((oop*) &addr()->_klass_field);
00067 }
00068 
00069 inline void memOopDesc::oop_iterate_body(OopClosure* blk,  int begin, int end) {
00070   oop* p = (oop*) addr();
00071   oop* q = p + end;
00072   p     += begin;
00073   while (p < q) blk->do_oop(p++); 
00074 }
00075 
00076 inline void memOopDesc::initialize_header(bool has_untagged_contents, klassOop klass) {
00077   set_klass_field(klass);
00078   if (has_untagged_contents)
00079     init_untagged_contents_mark();
00080   else
00081     init_mark();
00082 }
00083 
00084 inline void memOopDesc::initialize_body(int begin, int end) {
00085   oop value = nilObj;
00086   oop* p = (oop*) addr();
00087   oop* q = p + end;
00088   p     += begin;
00089   while (p < q) Universe::store(p++, value, false);
00090 }
00091 
00092 inline void memOopDesc::raw_at_put(int which, oop contents, bool cs) {
00093   Universe::store(oops(which), contents, cs); }
00094 
00095 inline int memOopDesc::size() const {
00096   return blueprint()->oop_size(memOop(this));
00097 }
00098 
00099 inline int memOopDesc::scavenge_contents() {
00100  return blueprint()->oop_scavenge_contents(this);
00101 }
00102 
00103 inline int memOopDesc::scavenge_tenured_contents() {
00104   return blueprint()->oop_scavenge_tenured_contents(this);
00105 }
00106 
00107 
00108 inline void memOopDesc::gc_store_size() {
00109   int s = size();
00110   if (s < markOopDesc::max_age) {
00111     
00112     set_mark(mark()->set_age(s));
00113     assert(mark()->age() == s, "Check size");
00114   } else {
00115     
00116     
00117     set_mark(mark()->set_age(0));
00118     assert(mark()->age() == 0, "Check size");
00119 
00120     Universe::remembered_set->set_size(this, s);
00121     assert(Universe::remembered_set->get_size(this) == s, "Check size");
00122   }
00123 }
00124 
00125 
00126 inline int memOopDesc::gc_retrieve_size() {
00127   if (mark()->age() == 0)
00128     return Universe::remembered_set->get_size(this);
00129   return mark()->age();
00130 }