611 SharedMiscCodeSize,
612 true, true);
613
614 // Pass 2 - write data.
615 mapinfo->open_for_write();
616 mapinfo->set_header_crc(mapinfo->compute_header_crc());
617 mapinfo->write_header();
618 mapinfo->write_space(MetaspaceShared::ro, _loader_data->ro_metaspace(), true);
619 mapinfo->write_space(MetaspaceShared::rw, _loader_data->rw_metaspace(), false);
620 mapinfo->write_region(MetaspaceShared::md, _md_vs.low(),
621 pointer_delta(md_top, _md_vs.low(), sizeof(char)),
622 SharedMiscDataSize,
623 false, false);
624 mapinfo->write_region(MetaspaceShared::mc, _mc_vs.low(),
625 pointer_delta(mc_top, _mc_vs.low(), sizeof(char)),
626 SharedMiscCodeSize,
627 true, true);
628 mapinfo->close();
629
630 memmove(vtbl_list, saved_vtbl, vtbl_list_size * sizeof(void*));
631
632 if (PrintSharedSpaces) {
633 DumpAllocClosure dac;
634 dac.iterate_metaspace(_loader_data->ro_metaspace(), DumpAllocClosure::RO);
635 dac.iterate_metaspace(_loader_data->rw_metaspace(), DumpAllocClosure::RW);
636
637 dac.dump_stats(int(ro_bytes), int(rw_bytes), int(md_bytes), int(mc_bytes));
638 }
639 #undef fmt_space
640 }
641
642
643 void MetaspaceShared::link_one_shared_class(Klass* obj, TRAPS) {
644 Klass* k = obj;
645 if (k->oop_is_instance()) {
646 InstanceKlass* ik = (InstanceKlass*) k;
647 // Link the class to cause the bytecodes to be rewritten and the
648 // cpcache to be created. Class verification is done according
649 // to -Xverify setting.
650 _link_classes_made_progress |= try_link_class(ik, THREAD);
|
611 SharedMiscCodeSize,
612 true, true);
613
614 // Pass 2 - write data.
615 mapinfo->open_for_write();
616 mapinfo->set_header_crc(mapinfo->compute_header_crc());
617 mapinfo->write_header();
618 mapinfo->write_space(MetaspaceShared::ro, _loader_data->ro_metaspace(), true);
619 mapinfo->write_space(MetaspaceShared::rw, _loader_data->rw_metaspace(), false);
620 mapinfo->write_region(MetaspaceShared::md, _md_vs.low(),
621 pointer_delta(md_top, _md_vs.low(), sizeof(char)),
622 SharedMiscDataSize,
623 false, false);
624 mapinfo->write_region(MetaspaceShared::mc, _mc_vs.low(),
625 pointer_delta(mc_top, _mc_vs.low(), sizeof(char)),
626 SharedMiscCodeSize,
627 true, true);
628 mapinfo->close();
629
630 memmove(vtbl_list, saved_vtbl, vtbl_list_size * sizeof(void*));
631 os::free(saved_vtbl);
632
633 if (PrintSharedSpaces) {
634 DumpAllocClosure dac;
635 dac.iterate_metaspace(_loader_data->ro_metaspace(), DumpAllocClosure::RO);
636 dac.iterate_metaspace(_loader_data->rw_metaspace(), DumpAllocClosure::RW);
637
638 dac.dump_stats(int(ro_bytes), int(rw_bytes), int(md_bytes), int(mc_bytes));
639 }
640 #undef fmt_space
641 }
642
643
644 void MetaspaceShared::link_one_shared_class(Klass* obj, TRAPS) {
645 Klass* k = obj;
646 if (k->oop_is_instance()) {
647 InstanceKlass* ik = (InstanceKlass*) k;
648 // Link the class to cause the bytecodes to be rewritten and the
649 // cpcache to be created. Class verification is done according
650 // to -Xverify setting.
651 _link_classes_made_progress |= try_link_class(ik, THREAD);
|