< prev index next > src/hotspot/share/cds/archiveBuilder.cpp
Print this page
* questions.
*
*/
#include "cds/aotArtifactFinder.hpp"
+ #include "cds/aotCacheAccess.hpp"
#include "cds/aotClassLinker.hpp"
#include "cds/aotCompressedPointers.hpp"
#include "cds/aotLogging.hpp"
#include "cds/aotMapLogger.hpp"
#include "cds/aotMetaspace.hpp"
#include "cds/archiveUtils.hpp"
#include "cds/cdsConfig.hpp"
#include "cds/cppVtables.hpp"
#include "cds/dumpAllocStats.hpp"
#include "cds/dynamicArchive.hpp"
+ #include "cds/finalImageRecipes.hpp"
#include "cds/heapShared.hpp"
#include "cds/regeneratedClasses.hpp"
#include "classfile/classLoader.hpp"
#include "classfile/classLoaderDataShared.hpp"
#include "classfile/javaClasses.hpp"
#include "oops/oopHandle.inline.hpp"
#include "oops/trainingData.hpp"
#include "runtime/arguments.hpp"
#include "runtime/globals_extension.hpp"
#include "runtime/javaThread.hpp"
+ #include "runtime/safepointVerifiers.hpp"
#include "runtime/sharedRuntime.hpp"
#include "utilities/align.hpp"
#include "utilities/bitMap.inline.hpp"
#include "utilities/formatBuffer.hpp"
_ro_region("ro"),
_ac_region("ac"),
_ptrmap(mtClassShared),
_rw_ptrmap(mtClassShared),
_ro_ptrmap(mtClassShared),
+ _ac_ptrmap(mtClassShared),
_rw_src_objs(),
_ro_src_objs(),
_src_obj_table(INITIAL_TABLE_SIZE, MAX_TABLE_SIZE),
_buffered_to_src_table(INITIAL_TABLE_SIZE, MAX_TABLE_SIZE),
_total_heap_region_size(0)
const char* hidden = "";
const char* old = "";
const char* generated = "";
const char* aotlinked_msg = "";
const char* inited_msg = "";
+ const char* early_init_msg = "";
Klass* k = get_buffered_addr(klasses()->at(i));
bool inited = false;
k->remove_java_mirror();
#ifdef _LP64
if (UseCompactObjectHeaders) {
if (InstanceKlass::cast(k)->static_field_size() == 0) {
inited_msg = " inited (no static fields)";
} else {
inited_msg = " inited";
}
}
AOTMetaspace::rewrite_bytecodes_and_calculate_fingerprints(Thread::current(), ik);
ik->remove_unshareable_info();
}
if (aot_log_is_enabled(Debug, aot, class)) {
ResourceMark rm;
! aot_log_debug(aot, class)("klasses[%5d] = " PTR_FORMAT " %-5s %s%s%s%s%s%s%s%s", i,
p2i(to_requested(k)), type, k->external_name(),
! kind, hidden, old, unlinked, generated, aotlinked_msg, inited_msg);
}
}
#define STATS_FORMAT "= %5d, aot-linked = %5d, inited = %5d"
#define STATS_PARAMS(x) num_ ## x, num_ ## x ## _a, num_ ## x ## _i
if (InstanceKlass::cast(k)->static_field_size() == 0) {
inited_msg = " inited (no static fields)";
} else {
inited_msg = " inited";
}
+ if (AOTCacheAccess::is_early_aot_inited_class(ik)) {
+ early_init_msg = " early";
+ }
}
AOTMetaspace::rewrite_bytecodes_and_calculate_fingerprints(Thread::current(), ik);
ik->remove_unshareable_info();
}
if (aot_log_is_enabled(Debug, aot, class)) {
ResourceMark rm;
! aot_log_debug(aot, class)("klasses[%5d] = " PTR_FORMAT " %-5s %s%s%s%s%s%s%s%s%s", i,
p2i(to_requested(k)), type, k->external_name(),
! kind, hidden, old, unlinked, generated, aotlinked_msg, early_init_msg, inited_msg);
}
}
#define STATS_FORMAT "= %5d, aot-linked = %5d, inited = %5d"
#define STATS_PARAMS(x) num_ ## x, num_ ## x ## _a, num_ ## x ## _i
write_region(mapinfo, AOTMetaspace::rw, &_rw_region, /*read_only=*/false,/*allow_exec=*/false);
write_region(mapinfo, AOTMetaspace::ro, &_ro_region, /*read_only=*/true, /*allow_exec=*/false);
write_region(mapinfo, AOTMetaspace::ac, &_ac_region, /*read_only=*/false,/*allow_exec=*/false);
// Split pointer map into read-write and read-only bitmaps
! ArchivePtrMarker::initialize_rw_ro_maps(&_rw_ptrmap, &_ro_ptrmap);
size_t bitmap_size_in_bytes;
char* bitmap = mapinfo->write_bitmap_region(ArchivePtrMarker::rw_ptrmap(),
ArchivePtrMarker::ro_ptrmap(),
mapped_heap_info,
streamed_heap_info,
bitmap_size_in_bytes);
if (mapped_heap_info != nullptr && mapped_heap_info->is_used()) {
write_region(mapinfo, AOTMetaspace::rw, &_rw_region, /*read_only=*/false,/*allow_exec=*/false);
write_region(mapinfo, AOTMetaspace::ro, &_ro_region, /*read_only=*/true, /*allow_exec=*/false);
write_region(mapinfo, AOTMetaspace::ac, &_ac_region, /*read_only=*/false,/*allow_exec=*/false);
// Split pointer map into read-write and read-only bitmaps
! ArchivePtrMarker::initialize_rw_ro_ac_maps(&_rw_ptrmap, &_ro_ptrmap, &_ac_ptrmap);
size_t bitmap_size_in_bytes;
char* bitmap = mapinfo->write_bitmap_region(ArchivePtrMarker::rw_ptrmap(),
ArchivePtrMarker::ro_ptrmap(),
+ ArchivePtrMarker::ac_ptrmap(),
mapped_heap_info,
streamed_heap_info,
bitmap_size_in_bytes);
if (mapped_heap_info != nullptr && mapped_heap_info->is_used()) {
// After this point, we should not write any data into mapinfo->header() since this
// would corrupt its checksum we have calculated before.
mapinfo->write_header();
mapinfo->close();
if (log_is_enabled(Info, aot)) {
- log_info(aot)("Full module graph = %s", CDSConfig::is_dumping_full_module_graph() ? "enabled" : "disabled");
print_stats();
}
if (log_is_enabled(Info, aot, map)) {
AOTMapLogger::dumptime_log(this, mapinfo, mapped_heap_info, streamed_heap_info, bitmap, bitmap_size_in_bytes);
// After this point, we should not write any data into mapinfo->header() since this
// would corrupt its checksum we have calculated before.
mapinfo->write_header();
mapinfo->close();
+ aot_log_info(aot)("Full module graph = %s", CDSConfig::is_dumping_full_module_graph() ? "enabled" : "disabled");
if (log_is_enabled(Info, aot)) {
print_stats();
}
if (log_is_enabled(Info, aot, map)) {
AOTMapLogger::dumptime_log(this, mapinfo, mapped_heap_info, streamed_heap_info, bitmap, bitmap_size_in_bytes);
< prev index next >