50 os::print_hex_dump(&ss, start, end, 4); 51 msg.append("\n"); 52 msg.append("Raw heap memory:\n%s", ss.as_string()); 53 } 54 } 55 56 void ShenandoahAsserts::print_obj(ShenandoahMessageBuffer& msg, oop obj) { 57 ShenandoahHeap* heap = ShenandoahHeap::heap(); 58 ShenandoahHeapRegion *r = heap->heap_region_containing(obj); 59 60 ResourceMark rm; 61 stringStream ss; 62 r->print_on(&ss); 63 64 stringStream mw_ss; 65 obj->mark().print_on(&mw_ss); 66 67 ShenandoahMarkingContext* const ctx = heap->marking_context(); 68 69 msg.append(" " PTR_FORMAT " - klass " PTR_FORMAT " %s\n", p2i(obj), p2i(obj->klass()), obj->klass()->external_name()); 70 msg.append(" %3s allocated after mark start\n", ctx->allocated_after_mark_start(obj) ? "" : "not"); 71 msg.append(" %3s marked \n", ctx->is_marked(obj) ? "" : "not"); 72 msg.append(" %3s in collection set\n", heap->in_collection_set(obj) ? "" : "not"); 73 if (heap->traversal_gc() != NULL) { 74 msg.append(" %3s in traversal set\n", heap->traversal_gc()->traversal_set()->is_in(cast_from_oop<HeapWord*>(obj)) ? "" : "not"); 75 } 76 msg.append(" mark:%s\n", mw_ss.as_string()); 77 msg.append(" region: %s", ss.as_string()); 78 } 79 80 void ShenandoahAsserts::print_non_obj(ShenandoahMessageBuffer& msg, void* loc) { 81 ShenandoahHeap* heap = ShenandoahHeap::heap(); 82 if (heap->is_in(loc)) { 83 msg.append(" inside Java heap\n"); 84 ShenandoahHeapRegion *r = heap->heap_region_containing(loc); 85 stringStream ss; 86 r->print_on(&ss); 87 88 msg.append(" %3s in collection set\n", heap->in_collection_set(loc) ? "" : "not"); 89 msg.append(" region: %s", ss.as_string()); 90 } else { 91 msg.append(" outside of Java heap\n"); 92 stringStream ss; 93 os::print_location(&ss, (intptr_t) loc, false); 94 msg.append(" %s", ss.as_string()); | 50 os::print_hex_dump(&ss, start, end, 4); 51 msg.append("\n"); 52 msg.append("Raw heap memory:\n%s", ss.as_string()); 53 } 54 } 55 56 void ShenandoahAsserts::print_obj(ShenandoahMessageBuffer& msg, oop obj) { 57 ShenandoahHeap* heap = ShenandoahHeap::heap(); 58 ShenandoahHeapRegion *r = heap->heap_region_containing(obj); 59 60 ResourceMark rm; 61 stringStream ss; 62 r->print_on(&ss); 63 64 stringStream mw_ss; 65 obj->mark().print_on(&mw_ss); 66 67 ShenandoahMarkingContext* const ctx = heap->marking_context(); 68 69 msg.append(" " PTR_FORMAT " - klass " PTR_FORMAT " %s\n", p2i(obj), p2i(obj->klass()), obj->klass()->external_name()); 70 msg.append(" %3s allocated after mark start\n", ctx->allocated_after_mark_start((HeapWord *) obj) ? "" : "not"); 71 msg.append(" %3s marked \n", ctx->is_marked(obj) ? "" : "not"); 72 msg.append(" %3s in collection set\n", heap->in_collection_set(obj) ? "" : "not"); 73 if (heap->traversal_gc() != NULL) { 74 msg.append(" %3s in traversal set\n", heap->traversal_gc()->traversal_set()->is_in((HeapWord*) obj) ? "" : "not"); 75 } 76 msg.append(" mark:%s\n", mw_ss.as_string()); 77 msg.append(" region: %s", ss.as_string()); 78 } 79 80 void ShenandoahAsserts::print_non_obj(ShenandoahMessageBuffer& msg, void* loc) { 81 ShenandoahHeap* heap = ShenandoahHeap::heap(); 82 if (heap->is_in(loc)) { 83 msg.append(" inside Java heap\n"); 84 ShenandoahHeapRegion *r = heap->heap_region_containing(loc); 85 stringStream ss; 86 r->print_on(&ss); 87 88 msg.append(" %3s in collection set\n", heap->in_collection_set(loc) ? "" : "not"); 89 msg.append(" region: %s", ss.as_string()); 90 } else { 91 msg.append(" outside of Java heap\n"); 92 stringStream ss; 93 os::print_location(&ss, (intptr_t) loc, false); 94 msg.append(" %s", ss.as_string()); |