@@ -492,7 +492,7 @@ void AOTMapLogger::log_as_hex(address base, address top, address requested_base,
492492}
493493
494494#if INCLUDE_CDS_JAVA_HEAP
495- // FakeOop (and subclasses FakeMirror, FakeString, FakeObjArray , FakeTypeArray) are used to traverse
495+ // FakeOop (and subclasses FakeMirror, FakeString, FakeRefArray, FakeFlatArray , FakeTypeArray) are used to traverse
496496// and print the (image of) heap objects stored in the AOT cache. These objects are different than regular oops:
497497// - They do not reside inside the range of the heap.
498498// - For +UseCompressedOops: pointers may use a different narrowOop encoding: see FakeOop::read_oop_at(narrowOop*)
@@ -554,7 +554,8 @@ class AOTMapLogger::FakeOop {
554554 }
555555
556556 FakeMirror& as_mirror ();
557- FakeObjArray& as_obj_array ();
557+ FakeRefArray& as_ref_array ();
558+ FakeFlatArray& as_flat_array ();
558559 FakeString& as_string ();
559560 FakeTypeArray& as_type_array ();
560561
@@ -656,23 +657,38 @@ class AOTMapLogger::FakeMirror : public AOTMapLogger::FakeOop {
656657 }
657658}; // AOTMapLogger::FakeMirror
658659
659- class AOTMapLogger ::FakeObjArray : public AOTMapLogger::FakeOop {
660- objArrayOop raw_objArrayOop () {
661- return (objArrayOop )raw_oop ();
660+ class AOTMapLogger ::FakeRefArray : public AOTMapLogger::FakeOop {
661+ refArrayOop raw_refArrayOop () {
662+ return (refArrayOop )raw_oop ();
662663 }
663664
664665public:
665666 int length () {
666- return raw_objArrayOop ()->length ();
667+ return raw_refArrayOop ()->length ();
667668 }
668669 FakeOop obj_at (int i) {
669670 if (UseCompressedOops) {
670- return read_oop_at (raw_objArrayOop ()->obj_at_addr <narrowOop>(i));
671+ return read_oop_at (raw_refArrayOop ()->obj_at_addr <narrowOop>(i));
671672 } else {
672- return read_oop_at (raw_objArrayOop ()->obj_at_addr <oop>(i));
673+ return read_oop_at (raw_refArrayOop ()->obj_at_addr <oop>(i));
673674 }
674675 }
675- }; // AOTMapLogger::FakeObjArray
676+ }; // AOTMapLogger::FakeRefArray
677+
678+ class AOTMapLogger ::FakeFlatArray : public AOTMapLogger::FakeOop {
679+ flatArrayOop raw_flatArrayOop () {
680+ return (flatArrayOop)raw_oop ();
681+ }
682+
683+ public:
684+ int length () {
685+ return raw_flatArrayOop ()->length ();
686+ }
687+ void print_elements_on (outputStream* st) {
688+ FlatArrayKlass::cast (real_klass ())->oop_print_elements_on (raw_flatArrayOop (), st);
689+ }
690+
691+ }; // AOTMapLogger::FakeRefArray
676692
677693class AOTMapLogger ::FakeString : public AOTMapLogger::FakeOop {
678694public:
@@ -708,9 +724,14 @@ AOTMapLogger::FakeMirror& AOTMapLogger::FakeOop::as_mirror() {
708724 return (FakeMirror&)*this ;
709725}
710726
711- AOTMapLogger::FakeObjArray& AOTMapLogger::FakeOop::as_obj_array () {
712- precond (real_klass ()->is_objArray_klass ());
713- return (FakeObjArray&)*this ;
727+ AOTMapLogger::FakeRefArray& AOTMapLogger::FakeOop::as_ref_array () {
728+ precond (real_klass ()->is_refArray_klass ());
729+ return (FakeRefArray&)*this ;
730+ }
731+
732+ AOTMapLogger::FakeFlatArray& AOTMapLogger::FakeOop::as_flat_array () {
733+ precond (real_klass ()->is_flatArray_klass ());
734+ return (FakeFlatArray&)*this ;
714735}
715736
716737AOTMapLogger::FakeTypeArray& AOTMapLogger::FakeOop::as_type_array () {
@@ -940,8 +961,10 @@ void AOTMapLogger::print_oop_details(FakeOop fake_oop, outputStream* st) {
940961
941962 if (real_klass->is_typeArray_klass ()) {
942963 fake_oop.as_type_array ().print_elements_on (st);
943- } else if (real_klass->is_objArray_klass ()) {
944- FakeObjArray fake_obj_array = fake_oop.as_obj_array ();
964+ } else if (real_klass->is_flatArray_klass ()) {
965+ fake_oop.as_flat_array ().print_elements_on (st);
966+ } else if (real_klass->is_refArray_klass ()) {
967+ FakeRefArray fake_obj_array = fake_oop.as_ref_array ();
945968 bool is_logging_root_segment = _num_obj_arrays_logged < _num_root_segments;
946969
947970 for (int i = 0 ; i < fake_obj_array.length (); i++) {
0 commit comments