< prev index next >

src/hotspot/share/cds/archiveHeapWriter.cpp

Print this page

570   oopmap->set_bit(idx);
571 }
572 
573 void ArchiveHeapWriter::update_header_for_requested_obj(oop requested_obj, oop src_obj,  Klass* src_klass) {
574   assert(UseCompressedClassPointers, "Archived heap only supported for compressed klasses");
575   narrowKlass nk = ArchiveBuilder::current()->get_requested_narrow_klass(src_klass);
576   address buffered_addr = requested_addr_to_buffered_addr(cast_from_oop<address>(requested_obj));
577 
578   oop fake_oop = cast_to_oop(buffered_addr);
579   if (UseCompactObjectHeaders) {
580     fake_oop->set_mark(markWord::prototype().set_narrow_klass(nk));
581   } else {
582     fake_oop->set_narrow_klass(nk);
583   }
584 
585   if (src_obj == nullptr) {
586     return;
587   }
588   // We need to retain the identity_hash, because it may have been used by some hashtables
589   // in the shared heap.
590   if (!src_obj->fast_no_hash_check()) {
591     intptr_t src_hash = src_obj->identity_hash();
592     if (UseCompactObjectHeaders) {
593       fake_oop->set_mark(markWord::prototype().set_narrow_klass(nk).copy_set_hash(src_hash));


594     } else {
595       fake_oop->set_mark(markWord::prototype().copy_set_hash(src_hash));
596     }
597     assert(fake_oop->mark().is_unlocked(), "sanity");
598 
599     DEBUG_ONLY(intptr_t archived_hash = fake_oop->identity_hash());
600     assert(src_hash == archived_hash, "Different hash codes: original " INTPTR_FORMAT ", archived " INTPTR_FORMAT, src_hash, archived_hash);
601   }
602   // Strip age bits.
603   fake_oop->set_mark(fake_oop->mark().set_age(0));
604 }
605 
606 class ArchiveHeapWriter::EmbeddedOopRelocator: public BasicOopIterateClosure {
607   oop _src_obj;
608   address _buffered_obj;
609   CHeapBitMap* _oopmap;
610 
611 public:
612   EmbeddedOopRelocator(oop src_obj, address buffered_obj, CHeapBitMap* oopmap) :
613     _src_obj(src_obj), _buffered_obj(buffered_obj), _oopmap(oopmap) {}

570   oopmap->set_bit(idx);
571 }
572 
573 void ArchiveHeapWriter::update_header_for_requested_obj(oop requested_obj, oop src_obj,  Klass* src_klass) {
574   assert(UseCompressedClassPointers, "Archived heap only supported for compressed klasses");
575   narrowKlass nk = ArchiveBuilder::current()->get_requested_narrow_klass(src_klass);
576   address buffered_addr = requested_addr_to_buffered_addr(cast_from_oop<address>(requested_obj));
577 
578   oop fake_oop = cast_to_oop(buffered_addr);
579   if (UseCompactObjectHeaders) {
580     fake_oop->set_mark(markWord::prototype().set_narrow_klass(nk));
581   } else {
582     fake_oop->set_narrow_klass(nk);
583   }
584 
585   if (src_obj == nullptr) {
586     return;
587   }
588   // We need to retain the identity_hash, because it may have been used by some hashtables
589   // in the shared heap.
590   if (!src_obj->fast_no_hash_check() && (!(EnableValhalla && src_obj->mark().is_inline_type()))) {
591     intptr_t src_hash = src_obj->identity_hash();
592     if (UseCompactObjectHeaders) {
593       fake_oop->set_mark(markWord::prototype().set_narrow_klass(nk).copy_set_hash(src_hash));
594     } else if (EnableValhalla) {
595       fake_oop->set_mark(src_klass->prototype_header().copy_set_hash(src_hash));
596     } else {
597       fake_oop->set_mark(markWord::prototype().copy_set_hash(src_hash));
598     }
599     assert(fake_oop->mark().is_unlocked(), "sanity");
600 
601     DEBUG_ONLY(intptr_t archived_hash = fake_oop->identity_hash());
602     assert(src_hash == archived_hash, "Different hash codes: original " INTPTR_FORMAT ", archived " INTPTR_FORMAT, src_hash, archived_hash);
603   }
604   // Strip age bits.
605   fake_oop->set_mark(fake_oop->mark().set_age(0));
606 }
607 
608 class ArchiveHeapWriter::EmbeddedOopRelocator: public BasicOopIterateClosure {
609   oop _src_obj;
610   address _buffered_obj;
611   CHeapBitMap* _oopmap;
612 
613 public:
614   EmbeddedOopRelocator(oop src_obj, address buffered_obj, CHeapBitMap* oopmap) :
615     _src_obj(src_obj), _buffered_obj(buffered_obj), _oopmap(oopmap) {}
< prev index next >