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) {