< prev index next >
src/hotspot/share/classfile/javaClasses.cpp
Print this page
*** 34,45 ****
#include "code/pcDesc.hpp"
#include "interpreter/interpreter.hpp"
#include "interpreter/linkResolver.hpp"
#include "logging/log.hpp"
#include "logging/logStream.hpp"
#include "memory/oopFactory.hpp"
- #include "memory/metaspaceShared.inline.hpp"
#include "memory/resourceArea.hpp"
#include "memory/universe.hpp"
#include "oops/fieldStreams.hpp"
#include "oops/instanceKlass.hpp"
#include "oops/instanceMirrorKlass.hpp"
--- 34,46 ----
#include "code/pcDesc.hpp"
#include "interpreter/interpreter.hpp"
#include "interpreter/linkResolver.hpp"
#include "logging/log.hpp"
#include "logging/logStream.hpp"
+ #include "memory/heapShared.inline.hpp"
+ #include "memory/metaspaceShared.hpp"
#include "memory/oopFactory.hpp"
#include "memory/resourceArea.hpp"
#include "memory/universe.hpp"
#include "oops/fieldStreams.hpp"
#include "oops/instanceKlass.hpp"
#include "oops/instanceMirrorKlass.hpp"
*** 748,758 ****
break;
case T_OBJECT:
{
assert(fd->signature() == vmSymbols::string_signature(),
"just checking");
! if (DumpSharedSpaces && MetaspaceShared::is_archive_object(mirror())) {
// Archive the String field and update the pointer.
oop s = mirror()->obj_field(fd->offset());
oop archived_s = StringTable::create_archived_string(s, CHECK);
mirror()->obj_field_put(fd->offset(), archived_s);
} else {
--- 749,759 ----
break;
case T_OBJECT:
{
assert(fd->signature() == vmSymbols::string_signature(),
"just checking");
! if (DumpSharedSpaces && HeapShared::is_archived_object(mirror())) {
// Archive the String field and update the pointer.
oop s = mirror()->obj_field(fd->offset());
oop archived_s = StringTable::create_archived_string(s, CHECK);
mirror()->obj_field_put(fd->offset(), archived_s);
} else {
*** 786,796 ****
}
}
}
if (k->is_shared() && k->has_raw_archived_mirror()) {
! if (MetaspaceShared::open_archive_heap_region_mapped()) {
bool present = restore_archived_mirror(k, Handle(), Handle(), Handle(), CHECK);
assert(present, "Missing archived mirror for %s", k->external_name());
return;
} else {
k->set_java_mirror_handle(NULL);
--- 787,797 ----
}
}
}
if (k->is_shared() && k->has_raw_archived_mirror()) {
! if (HeapShared::open_archive_heap_region_mapped()) {
bool present = restore_archived_mirror(k, Handle(), Handle(), Handle(), CHECK);
assert(present, "Missing archived mirror for %s", k->external_name());
return;
} else {
k->set_java_mirror_handle(NULL);
*** 1009,1026 ****
}
}
};
void java_lang_Class::archive_basic_type_mirrors(TRAPS) {
! assert(MetaspaceShared::is_heap_object_archiving_allowed(),
! "MetaspaceShared::is_heap_object_archiving_allowed() must be true");
for (int t = 0; t <= T_VOID; t++) {
oop m = Universe::_mirrors[t];
if (m != NULL) {
// Update the field at _array_klass_offset to point to the relocated array klass.
! oop archived_m = MetaspaceShared::archive_heap_object(m, THREAD);
assert(archived_m != NULL, "sanity");
Klass *ak = (Klass*)(archived_m->metadata_field(_array_klass_offset));
assert(ak != NULL || t == T_VOID, "should not be NULL");
if (ak != NULL) {
Klass *reloc_ak = MetaspaceShared::get_relocated_klass(ak);
--- 1010,1027 ----
}
}
};
void java_lang_Class::archive_basic_type_mirrors(TRAPS) {
! assert(HeapShared::is_heap_object_archiving_allowed(),
! "HeapShared::is_heap_object_archiving_allowed() must be true");
for (int t = 0; t <= T_VOID; t++) {
oop m = Universe::_mirrors[t];
if (m != NULL) {
// Update the field at _array_klass_offset to point to the relocated array klass.
! oop archived_m = HeapShared::archive_heap_object(m, THREAD);
assert(archived_m != NULL, "sanity");
Klass *ak = (Klass*)(archived_m->metadata_field(_array_klass_offset));
assert(ak != NULL || t == T_VOID, "should not be NULL");
if (ak != NULL) {
Klass *reloc_ak = MetaspaceShared::get_relocated_klass(ak);
*** 1069,1080 ****
// The _has_archived_raw_mirror flag is cleared at runtime when the
// archived mirror is restored. If archived java heap data cannot
// be used at runtime, new mirror object is created for the shared
// class. The _has_archived_raw_mirror is cleared also during the process.
oop java_lang_Class::archive_mirror(Klass* k, TRAPS) {
! assert(MetaspaceShared::is_heap_object_archiving_allowed(),
! "MetaspaceShared::is_heap_object_archiving_allowed() must be true");
// Mirror is already archived
if (k->has_raw_archived_mirror()) {
assert(k->archived_java_mirror_raw() != NULL, "no archived mirror");
return k->archived_java_mirror_raw();
--- 1070,1081 ----
// The _has_archived_raw_mirror flag is cleared at runtime when the
// archived mirror is restored. If archived java heap data cannot
// be used at runtime, new mirror object is created for the shared
// class. The _has_archived_raw_mirror is cleared also during the process.
oop java_lang_Class::archive_mirror(Klass* k, TRAPS) {
! assert(HeapShared::is_heap_object_archiving_allowed(),
! "HeapShared::is_heap_object_archiving_allowed() must be true");
// Mirror is already archived
if (k->has_raw_archived_mirror()) {
assert(k->archived_java_mirror_raw() != NULL, "no archived mirror");
return k->archived_java_mirror_raw();
*** 1099,1109 ****
return NULL;
}
}
// Now start archiving the mirror object
! oop archived_mirror = MetaspaceShared::archive_heap_object(mirror, THREAD);
if (archived_mirror == NULL) {
return NULL;
}
archived_mirror = process_archived_mirror(k, mirror, archived_mirror, THREAD);
--- 1100,1110 ----
return NULL;
}
}
// Now start archiving the mirror object
! oop archived_mirror = HeapShared::archive_heap_object(mirror, THREAD);
if (archived_mirror == NULL) {
return NULL;
}
archived_mirror = process_archived_mirror(k, mirror, archived_mirror, THREAD);
*** 1137,1147 ****
if (k->is_array_klass()) {
oop archived_comp_mirror;
if (k->is_typeArray_klass()) {
// The primitive type mirrors are already archived. Get the archived mirror.
oop comp_mirror = java_lang_Class::component_mirror(mirror);
! archived_comp_mirror = MetaspaceShared::find_archived_heap_object(comp_mirror);
assert(archived_comp_mirror != NULL, "Must be");
} else {
assert(k->is_objArray_klass(), "Must be");
Klass* element_klass = ObjArrayKlass::cast(k)->element_klass();
assert(element_klass != NULL, "Must have an element klass");
--- 1138,1148 ----
if (k->is_array_klass()) {
oop archived_comp_mirror;
if (k->is_typeArray_klass()) {
// The primitive type mirrors are already archived. Get the archived mirror.
oop comp_mirror = java_lang_Class::component_mirror(mirror);
! archived_comp_mirror = HeapShared::find_archived_heap_object(comp_mirror);
assert(archived_comp_mirror != NULL, "Must be");
} else {
assert(k->is_objArray_klass(), "Must be");
Klass* element_klass = ObjArrayKlass::cast(k)->element_klass();
assert(element_klass != NULL, "Must have an element klass");
*** 1200,1219 ****
assert(fixup_mirror_list() != NULL, "fixup_mirror_list not initialized");
fixup_mirror_list()->push(k);
return true;
}
! oop m = MetaspaceShared::materialize_archived_object(k->archived_java_mirror_raw_narrow());
if (m == NULL) {
return false;
}
log_debug(cds, mirror)("Archived mirror is: " PTR_FORMAT, p2i(m));
// mirror is archived, restore
! assert(MetaspaceShared::is_archive_object(m), "must be archived mirror object");
Handle mirror(THREAD, m);
if (!k->is_array_klass()) {
// - local static final fields with initial values were initialized at dump time
--- 1201,1220 ----
assert(fixup_mirror_list() != NULL, "fixup_mirror_list not initialized");
fixup_mirror_list()->push(k);
return true;
}
! oop m = HeapShared::materialize_archived_object(k->archived_java_mirror_raw_narrow());
if (m == NULL) {
return false;
}
log_debug(cds, mirror)("Archived mirror is: " PTR_FORMAT, p2i(m));
// mirror is archived, restore
! assert(HeapShared::is_archived_object(m), "must be archived mirror object");
Handle mirror(THREAD, m);
if (!k->is_array_klass()) {
// - local static final fields with initial values were initialized at dump time
< prev index next >