Mercurial > hg > truffle
comparison src/share/vm/gc_implementation/g1/heapRegion.cpp @ 6725:da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
Summary: Remove PermGen, allocate meta-data in metaspace linked to class loaders, rewrite GC walking, rewrite and rename metadata to be C++ classes
Reviewed-by: jmasa, stefank, never, coleenp, kvn, brutisso, mgerdin, dholmes, jrose, twisti, roland
Contributed-by: jmasa <jon.masamitsu@oracle.com>, stefank <stefan.karlsson@oracle.com>, mgerdin <mikael.gerdin@oracle.com>, never <tom.rodriguez@oracle.com>
author | coleenp |
---|---|
date | Sat, 01 Sep 2012 13:25:18 -0400 |
parents | 7383557659bd |
children | 8fbf05030e24 |
comparison
equal
deleted
inserted
replaced
6724:36d1d483d5d6 | 6725:da91efe96a93 |
---|---|
38 size_t HeapRegion::GrainBytes = 0; | 38 size_t HeapRegion::GrainBytes = 0; |
39 size_t HeapRegion::GrainWords = 0; | 39 size_t HeapRegion::GrainWords = 0; |
40 size_t HeapRegion::CardsPerRegion = 0; | 40 size_t HeapRegion::CardsPerRegion = 0; |
41 | 41 |
42 HeapRegionDCTOC::HeapRegionDCTOC(G1CollectedHeap* g1, | 42 HeapRegionDCTOC::HeapRegionDCTOC(G1CollectedHeap* g1, |
43 HeapRegion* hr, OopClosure* cl, | 43 HeapRegion* hr, ExtendedOopClosure* cl, |
44 CardTableModRefBS::PrecisionStyle precision, | 44 CardTableModRefBS::PrecisionStyle precision, |
45 FilterKind fk) : | 45 FilterKind fk) : |
46 ContiguousSpaceDCTOC(hr, cl, precision, NULL), | 46 ContiguousSpaceDCTOC(hr, cl, precision, NULL), |
47 _hr(hr), _fk(fk), _g1(g1) { } | 47 _hr(hr), _fk(fk), _g1(g1) { } |
48 | 48 |
81 virtual void do_oop(narrowOop* p) { do_oop_work(p); } | 81 virtual void do_oop(narrowOop* p) { do_oop_work(p); } |
82 virtual void do_oop( oop* p) { do_oop_work(p); } | 82 virtual void do_oop( oop* p) { do_oop_work(p); } |
83 | 83 |
84 void print_object(outputStream* out, oop obj) { | 84 void print_object(outputStream* out, oop obj) { |
85 #ifdef PRODUCT | 85 #ifdef PRODUCT |
86 klassOop k = obj->klass(); | 86 Klass* k = obj->klass(); |
87 const char* class_name = instanceKlass::cast(k)->external_name(); | 87 const char* class_name = InstanceKlass::cast(k)->external_name(); |
88 out->print_cr("class name %s", class_name); | 88 out->print_cr("class name %s", class_name); |
89 #else // PRODUCT | 89 #else // PRODUCT |
90 obj->print_on(out); | 90 obj->print_on(out); |
91 #endif // PRODUCT | 91 #endif // PRODUCT |
92 } | 92 } |
211 } | 211 } |
212 | 212 |
213 void HeapRegionDCTOC::walk_mem_region_with_cl(MemRegion mr, | 213 void HeapRegionDCTOC::walk_mem_region_with_cl(MemRegion mr, |
214 HeapWord* bottom, | 214 HeapWord* bottom, |
215 HeapWord* top, | 215 HeapWord* top, |
216 OopClosure* cl) { | 216 ExtendedOopClosure* cl) { |
217 G1CollectedHeap* g1h = _g1; | 217 G1CollectedHeap* g1h = _g1; |
218 int oop_size; | 218 int oop_size; |
219 OopClosure* cl2 = NULL; | 219 ExtendedOopClosure* cl2 = NULL; |
220 | 220 |
221 FilterIntoCSClosure intoCSFilt(this, g1h, cl); | 221 FilterIntoCSClosure intoCSFilt(this, g1h, cl); |
222 FilterOutOfRegionClosure outOfRegionFilt(_hr, cl); | 222 FilterOutOfRegionClosure outOfRegionFilt(_hr, cl); |
223 | 223 |
224 switch (_fk) { | 224 switch (_fk) { |
533 | 533 |
534 void HeapRegion::save_marks() { | 534 void HeapRegion::save_marks() { |
535 set_saved_mark(); | 535 set_saved_mark(); |
536 } | 536 } |
537 | 537 |
538 void HeapRegion::oops_in_mr_iterate(MemRegion mr, OopClosure* cl) { | 538 void HeapRegion::oops_in_mr_iterate(MemRegion mr, ExtendedOopClosure* cl) { |
539 HeapWord* p = mr.start(); | 539 HeapWord* p = mr.start(); |
540 HeapWord* e = mr.end(); | 540 HeapWord* e = mr.end(); |
541 oop obj; | 541 oop obj; |
542 while (p < e) { | 542 while (p < e) { |
543 obj = oop(p); | 543 obj = oop(p); |
551 ContiguousSpace::oop_since_save_marks_iterate##nv_suffix(cl); \ | 551 ContiguousSpace::oop_since_save_marks_iterate##nv_suffix(cl); \ |
552 } | 552 } |
553 SPECIALIZED_SINCE_SAVE_MARKS_CLOSURES(HeapRegion_OOP_SINCE_SAVE_MARKS_DEFN) | 553 SPECIALIZED_SINCE_SAVE_MARKS_CLOSURES(HeapRegion_OOP_SINCE_SAVE_MARKS_DEFN) |
554 | 554 |
555 | 555 |
556 void HeapRegion::oop_before_save_marks_iterate(OopClosure* cl) { | 556 void HeapRegion::oop_before_save_marks_iterate(ExtendedOopClosure* cl) { |
557 oops_in_mr_iterate(MemRegion(bottom(), saved_mark_word()), cl); | 557 oops_in_mr_iterate(MemRegion(bottom(), saved_mark_word()), cl); |
558 } | 558 } |
559 | 559 |
560 void HeapRegion::note_self_forwarding_removal_start(bool during_initial_mark, | 560 void HeapRegion::note_self_forwarding_removal_start(bool during_initial_mark, |
561 bool during_conc_mark) { | 561 bool during_conc_mark) { |
799 return; | 799 return; |
800 } | 800 } |
801 | 801 |
802 if (!g1->is_obj_dead_cond(obj, this, vo)) { | 802 if (!g1->is_obj_dead_cond(obj, this, vo)) { |
803 if (obj->is_oop()) { | 803 if (obj->is_oop()) { |
804 klassOop klass = obj->klass(); | 804 Klass* klass = obj->klass(); |
805 if (!klass->is_perm()) { | 805 if (!klass->is_metadata()) { |
806 gclog_or_tty->print_cr("klass "PTR_FORMAT" of object "PTR_FORMAT" " | 806 gclog_or_tty->print_cr("klass "PTR_FORMAT" of object "PTR_FORMAT" " |
807 "not in perm", klass, obj); | 807 "not metadata", klass, obj); |
808 *failures = true; | 808 *failures = true; |
809 return; | 809 return; |
810 } else if (!klass->is_klass()) { | 810 } else if (!klass->is_klass()) { |
811 gclog_or_tty->print_cr("klass "PTR_FORMAT" of object "PTR_FORMAT" " | 811 gclog_or_tty->print_cr("klass "PTR_FORMAT" of object "PTR_FORMAT" " |
812 "not a klass", klass, obj); | 812 "not a klass", klass, obj); |
813 *failures = true; | 813 *failures = true; |
814 return; | 814 return; |
815 } else { | 815 } else { |
816 vl_cl.set_containing_obj(obj); | 816 vl_cl.set_containing_obj(obj); |
817 obj->oop_iterate(&vl_cl); | 817 obj->oop_iterate_no_header(&vl_cl); |
818 if (vl_cl.failures()) { | 818 if (vl_cl.failures()) { |
819 *failures = true; | 819 *failures = true; |
820 } | 820 } |
821 if (G1MaxVerifyFailures >= 0 && | 821 if (G1MaxVerifyFailures >= 0 && |
822 vl_cl.n_failures() >= G1MaxVerifyFailures) { | 822 vl_cl.n_failures() >= G1MaxVerifyFailures) { |