1
1
/*
2
- * Copyright (c) 2018, 2020 , Red Hat, Inc. All rights reserved.
2
+ * Copyright (c) 2018, 2025 , Red Hat, Inc. All rights reserved.
3
3
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4
4
*
5
5
* This code is free software; you can redistribute it and/or modify it
@@ -60,10 +60,7 @@ void ShenandoahAsserts::print_obj(ShenandoahMessageBuffer& msg, oop obj) {
60
60
61
61
ResourceMark rm;
62
62
stringStream ss;
63
- r->print_on (&ss);
64
-
65
- stringStream mw_ss;
66
- obj->mark ().print_on (&mw_ss);
63
+ StreamIndentor si (&ss);
67
64
68
65
ShenandoahMarkingContext* const ctx = heap->marking_context ();
69
66
@@ -77,21 +74,34 @@ void ShenandoahAsserts::print_obj(ShenandoahMessageBuffer& msg, oop obj) {
77
74
klass_text = obj_klass->external_name ();
78
75
}
79
76
80
- msg.append (" " PTR_FORMAT " - nk %u klass " PTR_FORMAT " %s\n " , p2i (obj), nk, p2i (obj_klass), klass_text);
81
- msg.append (" %3s allocated after mark start\n " , ctx->allocated_after_mark_start (obj) ? " " : " not" );
82
- msg.append (" %3s after update watermark\n " , cast_from_oop<HeapWord*>(obj) >= r->get_update_watermark () ? " " : " not" );
83
- msg.append (" %3s marked strong\n " , ctx->is_marked_strong (obj) ? " " : " not" );
84
- msg.append (" %3s marked weak\n " , ctx->is_marked_weak (obj) ? " " : " not" );
85
- msg.append (" %3s in collection set\n " , heap->in_collection_set (obj) ? " " : " not" );
86
- if (heap->mode ()->is_generational () && !obj->is_forwarded ()) {
87
- msg.append (" age: %d\n " , obj->age ());
88
- }
89
- msg.append (" mark:%s\n " , mw_ss.freeze ());
90
- msg.append (" region: %s" , ss.freeze ());
91
- if (obj_klass == vmClasses::Class_klass ()) {
92
- msg.append (" mirrored klass: " PTR_FORMAT " \n " , p2i (obj->metadata_field (java_lang_Class::klass_offset ())));
93
- msg.append (" mirrored array klass: " PTR_FORMAT " \n " , p2i (obj->metadata_field (java_lang_Class::array_klass_offset ())));
77
+ ss.print_cr (PTR_FORMAT " - nk %u klass " PTR_FORMAT " %s\n " , p2i (obj), nk, p2i (obj_klass), klass_text);
78
+ {
79
+ StreamIndentor si (&ss);
80
+ ss.print_cr (" %3s allocated after mark start" , ctx->allocated_after_mark_start (obj) ? " " : " not" );
81
+ ss.print_cr (" %3s after update watermark" , cast_from_oop<HeapWord*>(obj) >= r->get_update_watermark () ? " " : " not" );
82
+ ss.print_cr (" %3s marked strong" , ctx->is_marked_strong (obj) ? " " : " not" );
83
+ ss.print_cr (" %3s marked weak" , ctx->is_marked_weak (obj) ? " " : " not" );
84
+ ss.print_cr (" %3s in collection set" , heap->in_collection_set (obj) ? " " : " not" );
85
+ if (heap->mode ()->is_generational () && !obj->is_forwarded ()) {
86
+ ss.print_cr (" age: %d" , obj->age ());
87
+ }
88
+ ss.print_raw (" mark: " );
89
+ obj->mark ().print_on (&ss);
90
+ ss.cr ();
91
+ ss.print_raw (" region: " );
92
+ r->print_on (&ss);
93
+ ss.cr ();
94
+ if (obj_klass == vmClasses::Class_klass ()) {
95
+ ss.print_cr (" mirrored klass: " PTR_FORMAT, p2i (obj->metadata_field (java_lang_Class::klass_offset ())));
96
+ ss.print_cr (" mirrored array klass: " PTR_FORMAT, p2i (obj->metadata_field (java_lang_Class::array_klass_offset ())));
97
+ }
94
98
}
99
+
100
+ static constexpr int num_bytes = 64 ;
101
+ const_address loc = cast_from_oop<const_address>(obj);
102
+ os::print_hex_dump (&ss, loc, loc + num_bytes, 8 , true , 32 , loc);
103
+
104
+ msg.append (" %s" , ss.base ());
95
105
}
96
106
97
107
void ShenandoahAsserts::print_non_obj (ShenandoahMessageBuffer& msg, void * loc) {
0 commit comments