8332785: Replace naked uses of UseSharedSpaces with CDSConfig::is_using_archive
Reviewed-by: dholmes, stuefe, sspitsyn
This commit is contained in:
parent
d7d1afb0a8
commit
438121be6b
@ -3484,7 +3484,7 @@ void TemplateTable::invokevirtual(int byte_no) {
|
|||||||
__ testbitdi(CCR0, R0, Rflags, ResolvedMethodEntry::is_vfinal_shift);
|
__ testbitdi(CCR0, R0, Rflags, ResolvedMethodEntry::is_vfinal_shift);
|
||||||
__ bfalse(CCR0, LnotFinal);
|
__ bfalse(CCR0, LnotFinal);
|
||||||
|
|
||||||
if (RewriteBytecodes && !UseSharedSpaces && !CDSConfig::is_dumping_static_archive()) {
|
if (RewriteBytecodes && !CDSConfig::is_using_archive() && !CDSConfig::is_dumping_static_archive()) {
|
||||||
patch_bytecode(Bytecodes::_fast_invokevfinal, Rnew_bc, R12_scratch2);
|
patch_bytecode(Bytecodes::_fast_invokevfinal, Rnew_bc, R12_scratch2);
|
||||||
}
|
}
|
||||||
invokevfinal_helper(Rcache, R11_scratch1, R12_scratch2, Rflags /* tmp */, Rrecv /* tmp */);
|
invokevfinal_helper(Rcache, R11_scratch1, R12_scratch2, Rflags /* tmp */, Rrecv /* tmp */);
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2003, 2023, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2003, 2024, Oracle and/or its affiliates. All rights reserved.
|
||||||
* Copyright (c) 2018, 2020 SAP SE. All rights reserved.
|
* Copyright (c) 2018, 2020 SAP SE. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
@ -24,6 +24,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "precompiled.hpp"
|
#include "precompiled.hpp"
|
||||||
|
#include "cds/cdsConfig.hpp"
|
||||||
#include "cds/metaspaceShared.hpp"
|
#include "cds/metaspaceShared.hpp"
|
||||||
#include "os_posix.hpp"
|
#include "os_posix.hpp"
|
||||||
#include "runtime/javaThread.hpp"
|
#include "runtime/javaThread.hpp"
|
||||||
@ -112,7 +113,7 @@ void VMError::install_secondary_signal_handler() {
|
|||||||
// and the offending address points into CDS archive.
|
// and the offending address points into CDS archive.
|
||||||
void VMError::check_failing_cds_access(outputStream* st, const void* siginfo) {
|
void VMError::check_failing_cds_access(outputStream* st, const void* siginfo) {
|
||||||
#if INCLUDE_CDS
|
#if INCLUDE_CDS
|
||||||
if (siginfo && UseSharedSpaces) {
|
if (siginfo && CDSConfig::is_using_archive()) {
|
||||||
const siginfo_t* const si = (siginfo_t*)siginfo;
|
const siginfo_t* const si = (siginfo_t*)siginfo;
|
||||||
if (si->si_signo == SIGBUS || si->si_signo == SIGSEGV) {
|
if (si->si_signo == SIGBUS || si->si_signo == SIGSEGV) {
|
||||||
const void* const fault_addr = si->si_addr;
|
const void* const fault_addr = si->si_addr;
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2003, 2023, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2003, 2024, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -23,6 +23,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "precompiled.hpp"
|
#include "precompiled.hpp"
|
||||||
|
#include "cds/cdsConfig.hpp"
|
||||||
#include "cds/metaspaceShared.hpp"
|
#include "cds/metaspaceShared.hpp"
|
||||||
#include "runtime/arguments.hpp"
|
#include "runtime/arguments.hpp"
|
||||||
#include "runtime/javaThread.hpp"
|
#include "runtime/javaThread.hpp"
|
||||||
@ -44,7 +45,7 @@ void VMError::install_secondary_signal_handler() {
|
|||||||
// and the offending address points into CDS archive.
|
// and the offending address points into CDS archive.
|
||||||
void VMError::check_failing_cds_access(outputStream* st, const void* siginfo) {
|
void VMError::check_failing_cds_access(outputStream* st, const void* siginfo) {
|
||||||
#if INCLUDE_CDS
|
#if INCLUDE_CDS
|
||||||
if (siginfo && UseSharedSpaces) {
|
if (siginfo && CDSConfig::is_using_archive()) {
|
||||||
const EXCEPTION_RECORD* const er = (const EXCEPTION_RECORD*)siginfo;
|
const EXCEPTION_RECORD* const er = (const EXCEPTION_RECORD*)siginfo;
|
||||||
if (er->ExceptionCode == EXCEPTION_IN_PAGE_ERROR &&
|
if (er->ExceptionCode == EXCEPTION_IN_PAGE_ERROR &&
|
||||||
er->NumberParameters >= 2) {
|
er->NumberParameters >= 2) {
|
||||||
|
@ -67,7 +67,7 @@ void CDSConfig::initialize() {
|
|||||||
// This must be after set_ergonomics_flags() called so flag UseCompressedOops is set properly.
|
// This must be after set_ergonomics_flags() called so flag UseCompressedOops is set properly.
|
||||||
//
|
//
|
||||||
// UseSharedSpaces may be disabled if -XX:SharedArchiveFile is invalid.
|
// UseSharedSpaces may be disabled if -XX:SharedArchiveFile is invalid.
|
||||||
if (is_dumping_static_archive() || UseSharedSpaces) {
|
if (is_dumping_static_archive() || is_using_archive()) {
|
||||||
init_shared_archive_paths();
|
init_shared_archive_paths();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -305,7 +305,7 @@ void CDSConfig::check_unsupported_dumping_module_options() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool CDSConfig::has_unsupported_runtime_module_options() {
|
bool CDSConfig::has_unsupported_runtime_module_options() {
|
||||||
assert(UseSharedSpaces, "this function is only used with -Xshare:{on,auto}");
|
assert(is_using_archive(), "this function is only used with -Xshare:{on,auto}");
|
||||||
if (ArchiveClassesAtExit != nullptr) {
|
if (ArchiveClassesAtExit != nullptr) {
|
||||||
// dynamic dumping, just return false for now.
|
// dynamic dumping, just return false for now.
|
||||||
// check_unsupported_dumping_properties() will be called later to check the same set of
|
// check_unsupported_dumping_properties() will be called later to check the same set of
|
||||||
@ -370,10 +370,10 @@ bool CDSConfig::check_vm_args_consistency(bool patch_mod_javabase, bool mode_fla
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (UseSharedSpaces && patch_mod_javabase) {
|
if (is_using_archive() && patch_mod_javabase) {
|
||||||
Arguments::no_shared_spaces("CDS is disabled when " JAVA_BASE_NAME " module is patched.");
|
Arguments::no_shared_spaces("CDS is disabled when " JAVA_BASE_NAME " module is patched.");
|
||||||
}
|
}
|
||||||
if (UseSharedSpaces && has_unsupported_runtime_module_options()) {
|
if (is_using_archive() && has_unsupported_runtime_module_options()) {
|
||||||
UseSharedSpaces = false;
|
UseSharedSpaces = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -389,7 +389,7 @@ bool CDSConfig::check_vm_args_consistency(bool patch_mod_javabase, bool mode_fla
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool CDSConfig::is_using_archive() {
|
bool CDSConfig::is_using_archive() {
|
||||||
return UseSharedSpaces; // TODO: UseSharedSpaces will be eventually replaced by CDSConfig::is_using_archive()
|
return UseSharedSpaces;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CDSConfig::is_logging_lambda_form_invokers() {
|
bool CDSConfig::is_logging_lambda_form_invokers() {
|
||||||
@ -417,7 +417,7 @@ bool CDSConfig::is_using_full_module_graph() {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (UseSharedSpaces && ArchiveHeapLoader::can_use()) {
|
if (is_using_archive() && ArchiveHeapLoader::can_use()) {
|
||||||
// Classes used by the archived full module graph are loaded in JVMTI early phase.
|
// Classes used by the archived full module graph are loaded in JVMTI early phase.
|
||||||
assert(!(JvmtiExport::should_post_class_file_load_hook() && JvmtiExport::has_early_class_hook_env()),
|
assert(!(JvmtiExport::should_post_class_file_load_hook() && JvmtiExport::has_early_class_hook_env()),
|
||||||
"CDS should be disabled if early class hooks are enabled");
|
"CDS should be disabled if early class hooks are enabled");
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2019, 2023, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2019, 2024, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -470,7 +470,7 @@ int DynamicArchive::num_array_klasses() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void DynamicArchive::check_for_dynamic_dump() {
|
void DynamicArchive::check_for_dynamic_dump() {
|
||||||
if (CDSConfig::is_dumping_dynamic_archive() && !UseSharedSpaces) {
|
if (CDSConfig::is_dumping_dynamic_archive() && !CDSConfig::is_using_archive()) {
|
||||||
// This could happen if SharedArchiveFile has failed to load:
|
// This could happen if SharedArchiveFile has failed to load:
|
||||||
// - -Xshare:off was specified
|
// - -Xshare:off was specified
|
||||||
// - SharedArchiveFile points to an non-existent file.
|
// - SharedArchiveFile points to an non-existent file.
|
||||||
@ -522,7 +522,7 @@ void DynamicArchive::dump_at_exit(JavaThread* current, const char* archive_name)
|
|||||||
|
|
||||||
// This is called by "jcmd VM.cds dynamic_dump"
|
// This is called by "jcmd VM.cds dynamic_dump"
|
||||||
void DynamicArchive::dump_for_jcmd(const char* archive_name, TRAPS) {
|
void DynamicArchive::dump_for_jcmd(const char* archive_name, TRAPS) {
|
||||||
assert(UseSharedSpaces && RecordDynamicDumpInfo, "already checked in arguments.cpp");
|
assert(CDSConfig::is_using_archive() && RecordDynamicDumpInfo, "already checked in arguments.cpp");
|
||||||
assert(ArchiveClassesAtExit == nullptr, "already checked in arguments.cpp");
|
assert(ArchiveClassesAtExit == nullptr, "already checked in arguments.cpp");
|
||||||
assert(CDSConfig::is_dumping_dynamic_archive(), "already checked by check_for_dynamic_dump() during VM startup");
|
assert(CDSConfig::is_dumping_dynamic_archive(), "already checked by check_for_dynamic_dump() during VM startup");
|
||||||
MetaspaceShared::link_shared_classes(true/*from jcmd*/, CHECK);
|
MetaspaceShared::link_shared_classes(true/*from jcmd*/, CHECK);
|
||||||
|
@ -371,7 +371,7 @@ void SharedClassPathEntry::copy_from(SharedClassPathEntry* ent, ClassLoaderData*
|
|||||||
}
|
}
|
||||||
|
|
||||||
const char* SharedClassPathEntry::name() const {
|
const char* SharedClassPathEntry::name() const {
|
||||||
if (UseSharedSpaces && is_modules_image()) {
|
if (CDSConfig::is_using_archive() && is_modules_image()) {
|
||||||
// In order to validate the runtime modules image file size against the archived
|
// In order to validate the runtime modules image file size against the archived
|
||||||
// size information, we need to obtain the runtime modules image path. The recorded
|
// size information, we need to obtain the runtime modules image path. The recorded
|
||||||
// dump time modules image path in the archive may be different from the runtime path
|
// dump time modules image path in the archive may be different from the runtime path
|
||||||
@ -383,7 +383,7 @@ const char* SharedClassPathEntry::name() const {
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool SharedClassPathEntry::validate(bool is_class_path) const {
|
bool SharedClassPathEntry::validate(bool is_class_path) const {
|
||||||
assert(UseSharedSpaces, "runtime only");
|
assert(CDSConfig::is_using_archive(), "runtime only");
|
||||||
|
|
||||||
struct stat st;
|
struct stat st;
|
||||||
const char* name = this->name();
|
const char* name = this->name();
|
||||||
@ -935,7 +935,7 @@ bool FileMapInfo::check_module_paths() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool FileMapInfo::validate_shared_path_table() {
|
bool FileMapInfo::validate_shared_path_table() {
|
||||||
assert(UseSharedSpaces, "runtime only");
|
assert(CDSConfig::is_using_archive(), "runtime only");
|
||||||
|
|
||||||
_validating_shared_path_table = true;
|
_validating_shared_path_table = true;
|
||||||
|
|
||||||
@ -981,7 +981,7 @@ bool FileMapInfo::validate_shared_path_table() {
|
|||||||
log_info(class, path)("ok");
|
log_info(class, path)("ok");
|
||||||
} else {
|
} else {
|
||||||
if (_dynamic_archive_info != nullptr && _dynamic_archive_info->_is_static) {
|
if (_dynamic_archive_info != nullptr && _dynamic_archive_info->_is_static) {
|
||||||
assert(!UseSharedSpaces, "UseSharedSpaces should be disabled");
|
assert(!CDSConfig::is_using_archive(), "UseSharedSpaces should be disabled");
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -990,7 +990,7 @@ bool FileMapInfo::validate_shared_path_table() {
|
|||||||
log_info(class, path)("ok");
|
log_info(class, path)("ok");
|
||||||
} else {
|
} else {
|
||||||
if (_dynamic_archive_info != nullptr && _dynamic_archive_info->_is_static) {
|
if (_dynamic_archive_info != nullptr && _dynamic_archive_info->_is_static) {
|
||||||
assert(!UseSharedSpaces, "UseSharedSpaces should be disabled");
|
assert(!CDSConfig::is_using_archive(), "UseSharedSpaces should be disabled");
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -1038,7 +1038,7 @@ void FileMapInfo::validate_non_existent_class_paths() {
|
|||||||
// loading of archived platform/app classes (currently there's no way to disable just the
|
// loading of archived platform/app classes (currently there's no way to disable just the
|
||||||
// app classes).
|
// app classes).
|
||||||
|
|
||||||
assert(UseSharedSpaces, "runtime only");
|
assert(CDSConfig::is_using_archive(), "runtime only");
|
||||||
for (int i = header()->app_module_paths_start_index() + header()->num_module_paths();
|
for (int i = header()->app_module_paths_start_index() + header()->num_module_paths();
|
||||||
i < get_number_of_shared_paths();
|
i < get_number_of_shared_paths();
|
||||||
i++) {
|
i++) {
|
||||||
@ -2087,7 +2087,7 @@ bool FileMapInfo::can_use_heap_region() {
|
|||||||
// The actual address of this region during dump time.
|
// The actual address of this region during dump time.
|
||||||
address FileMapInfo::heap_region_dumptime_address() {
|
address FileMapInfo::heap_region_dumptime_address() {
|
||||||
FileMapRegion* r = region_at(MetaspaceShared::hp);
|
FileMapRegion* r = region_at(MetaspaceShared::hp);
|
||||||
assert(UseSharedSpaces, "runtime only");
|
assert(CDSConfig::is_using_archive(), "runtime only");
|
||||||
assert(is_aligned(r->mapping_offset(), sizeof(HeapWord)), "must be");
|
assert(is_aligned(r->mapping_offset(), sizeof(HeapWord)), "must be");
|
||||||
if (UseCompressedOops) {
|
if (UseCompressedOops) {
|
||||||
return /*dumptime*/ narrow_oop_base() + r->mapping_offset();
|
return /*dumptime*/ narrow_oop_base() + r->mapping_offset();
|
||||||
@ -2099,7 +2099,7 @@ address FileMapInfo::heap_region_dumptime_address() {
|
|||||||
// The address where this region can be mapped into the runtime heap without
|
// The address where this region can be mapped into the runtime heap without
|
||||||
// patching any of the pointers that are embedded in this region.
|
// patching any of the pointers that are embedded in this region.
|
||||||
address FileMapInfo::heap_region_requested_address() {
|
address FileMapInfo::heap_region_requested_address() {
|
||||||
assert(UseSharedSpaces, "runtime only");
|
assert(CDSConfig::is_using_archive(), "runtime only");
|
||||||
FileMapRegion* r = region_at(MetaspaceShared::hp);
|
FileMapRegion* r = region_at(MetaspaceShared::hp);
|
||||||
assert(is_aligned(r->mapping_offset(), sizeof(HeapWord)), "must be");
|
assert(is_aligned(r->mapping_offset(), sizeof(HeapWord)), "must be");
|
||||||
assert(ArchiveHeapLoader::can_map(), "cannot be used by ArchiveHeapLoader::can_load() mode");
|
assert(ArchiveHeapLoader::can_map(), "cannot be used by ArchiveHeapLoader::can_load() mode");
|
||||||
@ -2227,7 +2227,7 @@ bool FileMapInfo::map_heap_region_impl() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
narrowOop FileMapInfo::encoded_heap_region_dumptime_address() {
|
narrowOop FileMapInfo::encoded_heap_region_dumptime_address() {
|
||||||
assert(UseSharedSpaces, "runtime only");
|
assert(CDSConfig::is_using_archive(), "runtime only");
|
||||||
assert(UseCompressedOops, "sanity");
|
assert(UseCompressedOops, "sanity");
|
||||||
FileMapRegion* r = region_at(MetaspaceShared::hp);
|
FileMapRegion* r = region_at(MetaspaceShared::hp);
|
||||||
return CompressedOops::narrow_oop_cast(r->mapping_offset() >> narrow_oop_shift());
|
return CompressedOops::narrow_oop_cast(r->mapping_offset() >> narrow_oop_shift());
|
||||||
@ -2316,7 +2316,7 @@ GrowableArray<const char*>* FileMapInfo::_non_existent_class_paths = nullptr;
|
|||||||
// [2] validate_shared_path_table - this is done later, because the table is in the RW
|
// [2] validate_shared_path_table - this is done later, because the table is in the RW
|
||||||
// region of the archive, which is not mapped yet.
|
// region of the archive, which is not mapped yet.
|
||||||
bool FileMapInfo::initialize() {
|
bool FileMapInfo::initialize() {
|
||||||
assert(UseSharedSpaces, "UseSharedSpaces expected.");
|
assert(CDSConfig::is_using_archive(), "UseSharedSpaces expected.");
|
||||||
assert(Arguments::has_jimage(), "The shared archive file cannot be used with an exploded module build.");
|
assert(Arguments::has_jimage(), "The shared archive file cannot be used with an exploded module build.");
|
||||||
|
|
||||||
if (JvmtiExport::should_post_class_file_load_hook() && JvmtiExport::has_early_class_hook_env()) {
|
if (JvmtiExport::should_post_class_file_load_hook() && JvmtiExport::has_early_class_hook_env()) {
|
||||||
|
@ -231,7 +231,7 @@ objArrayOop HeapShared::roots() {
|
|||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
assert(UseSharedSpaces, "must be");
|
assert(CDSConfig::is_using_archive(), "must be");
|
||||||
}
|
}
|
||||||
|
|
||||||
objArrayOop roots = (objArrayOop)_roots.resolve();
|
objArrayOop roots = (objArrayOop)_roots.resolve();
|
||||||
@ -242,7 +242,7 @@ objArrayOop HeapShared::roots() {
|
|||||||
// Returns an objArray that contains all the roots of the archived objects
|
// Returns an objArray that contains all the roots of the archived objects
|
||||||
oop HeapShared::get_root(int index, bool clear) {
|
oop HeapShared::get_root(int index, bool clear) {
|
||||||
assert(index >= 0, "sanity");
|
assert(index >= 0, "sanity");
|
||||||
assert(!CDSConfig::is_dumping_heap() && UseSharedSpaces, "runtime only");
|
assert(!CDSConfig::is_dumping_heap() && CDSConfig::is_using_archive(), "runtime only");
|
||||||
assert(!_roots.is_empty(), "must have loaded shared heap");
|
assert(!_roots.is_empty(), "must have loaded shared heap");
|
||||||
oop result = roots()->obj_at(index);
|
oop result = roots()->obj_at(index);
|
||||||
if (clear) {
|
if (clear) {
|
||||||
@ -253,7 +253,7 @@ oop HeapShared::get_root(int index, bool clear) {
|
|||||||
|
|
||||||
void HeapShared::clear_root(int index) {
|
void HeapShared::clear_root(int index) {
|
||||||
assert(index >= 0, "sanity");
|
assert(index >= 0, "sanity");
|
||||||
assert(UseSharedSpaces, "must be");
|
assert(CDSConfig::is_using_archive(), "must be");
|
||||||
if (ArchiveHeapLoader::is_in_use()) {
|
if (ArchiveHeapLoader::is_in_use()) {
|
||||||
if (log_is_enabled(Debug, cds, heap)) {
|
if (log_is_enabled(Debug, cds, heap)) {
|
||||||
oop old = roots()->obj_at(index);
|
oop old = roots()->obj_at(index);
|
||||||
@ -906,7 +906,7 @@ static void verify_the_heap(Klass* k, const char* which) {
|
|||||||
// ClassFileLoadHook is enabled, it's possible for this class to be dynamically replaced. In
|
// ClassFileLoadHook is enabled, it's possible for this class to be dynamically replaced. In
|
||||||
// this case, we will not load the ArchivedKlassSubGraphInfoRecord and will clear its roots.
|
// this case, we will not load the ArchivedKlassSubGraphInfoRecord and will clear its roots.
|
||||||
void HeapShared::resolve_classes(JavaThread* current) {
|
void HeapShared::resolve_classes(JavaThread* current) {
|
||||||
assert(UseSharedSpaces, "runtime only!");
|
assert(CDSConfig::is_using_archive(), "runtime only!");
|
||||||
if (!ArchiveHeapLoader::is_in_use()) {
|
if (!ArchiveHeapLoader::is_in_use()) {
|
||||||
return; // nothing to do
|
return; // nothing to do
|
||||||
}
|
}
|
||||||
|
@ -287,7 +287,7 @@ void MetaspaceShared::initialize_for_static_dump() {
|
|||||||
|
|
||||||
// Called by universe_post_init()
|
// Called by universe_post_init()
|
||||||
void MetaspaceShared::post_initialize(TRAPS) {
|
void MetaspaceShared::post_initialize(TRAPS) {
|
||||||
if (UseSharedSpaces) {
|
if (CDSConfig::is_using_archive()) {
|
||||||
int size = FileMapInfo::get_number_of_shared_paths();
|
int size = FileMapInfo::get_number_of_shared_paths();
|
||||||
if (size > 0) {
|
if (size > 0) {
|
||||||
CDSProtectionDomain::allocate_shared_data_arrays(size, CHECK);
|
CDSProtectionDomain::allocate_shared_data_arrays(size, CHECK);
|
||||||
@ -924,7 +924,7 @@ void MetaspaceShared::unrecoverable_writing_error(const char* message) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void MetaspaceShared::initialize_runtime_shared_and_meta_spaces() {
|
void MetaspaceShared::initialize_runtime_shared_and_meta_spaces() {
|
||||||
assert(UseSharedSpaces, "Must be called when UseSharedSpaces is enabled");
|
assert(CDSConfig::is_using_archive(), "Must be called when UseSharedSpaces is enabled");
|
||||||
MapArchiveResult result = MAP_ARCHIVE_OTHER_FAILURE;
|
MapArchiveResult result = MAP_ARCHIVE_OTHER_FAILURE;
|
||||||
|
|
||||||
FileMapInfo* static_mapinfo = open_static_archive();
|
FileMapInfo* static_mapinfo = open_static_archive();
|
||||||
@ -1414,7 +1414,7 @@ static int archive_regions[] = { MetaspaceShared::rw, MetaspaceShared::ro };
|
|||||||
static int archive_regions_count = 2;
|
static int archive_regions_count = 2;
|
||||||
|
|
||||||
MapArchiveResult MetaspaceShared::map_archive(FileMapInfo* mapinfo, char* mapped_base_address, ReservedSpace rs) {
|
MapArchiveResult MetaspaceShared::map_archive(FileMapInfo* mapinfo, char* mapped_base_address, ReservedSpace rs) {
|
||||||
assert(UseSharedSpaces, "must be runtime");
|
assert(CDSConfig::is_using_archive(), "must be runtime");
|
||||||
if (mapinfo == nullptr) {
|
if (mapinfo == nullptr) {
|
||||||
return MAP_ARCHIVE_SUCCESS; // The dynamic archive has not been specified. No error has happened -- trivially succeeded.
|
return MAP_ARCHIVE_SUCCESS; // The dynamic archive has not been specified. No error has happened -- trivially succeeded.
|
||||||
}
|
}
|
||||||
@ -1444,7 +1444,7 @@ MapArchiveResult MetaspaceShared::map_archive(FileMapInfo* mapinfo, char* mapped
|
|||||||
}
|
}
|
||||||
|
|
||||||
void MetaspaceShared::unmap_archive(FileMapInfo* mapinfo) {
|
void MetaspaceShared::unmap_archive(FileMapInfo* mapinfo) {
|
||||||
assert(UseSharedSpaces, "must be runtime");
|
assert(CDSConfig::is_using_archive(), "must be runtime");
|
||||||
if (mapinfo != nullptr) {
|
if (mapinfo != nullptr) {
|
||||||
mapinfo->unmap_regions(archive_regions, archive_regions_count);
|
mapinfo->unmap_regions(archive_regions, archive_regions_count);
|
||||||
mapinfo->unmap_region(MetaspaceShared::bm);
|
mapinfo->unmap_region(MetaspaceShared::bm);
|
||||||
@ -1542,7 +1542,7 @@ void MetaspaceShared::initialize_shared_spaces() {
|
|||||||
bool MetaspaceShared::remap_shared_readonly_as_readwrite() {
|
bool MetaspaceShared::remap_shared_readonly_as_readwrite() {
|
||||||
assert(SafepointSynchronize::is_at_safepoint(), "must be at safepoint");
|
assert(SafepointSynchronize::is_at_safepoint(), "must be at safepoint");
|
||||||
|
|
||||||
if (UseSharedSpaces) {
|
if (CDSConfig::is_using_archive()) {
|
||||||
// remap the shared readonly space to shared readwrite, private
|
// remap the shared readonly space to shared readwrite, private
|
||||||
FileMapInfo* mapinfo = FileMapInfo::current_info();
|
FileMapInfo* mapinfo = FileMapInfo::current_info();
|
||||||
if (!mapinfo->remap_shared_readonly_as_readwrite()) {
|
if (!mapinfo->remap_shared_readonly_as_readwrite()) {
|
||||||
@ -1560,7 +1560,7 @@ bool MetaspaceShared::remap_shared_readonly_as_readwrite() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void MetaspaceShared::print_on(outputStream* st) {
|
void MetaspaceShared::print_on(outputStream* st) {
|
||||||
if (UseSharedSpaces) {
|
if (CDSConfig::is_using_archive()) {
|
||||||
st->print("CDS archive(s) mapped at: ");
|
st->print("CDS archive(s) mapped at: ");
|
||||||
address base = (address)MetaspaceObj::shared_metaspace_base();
|
address base = (address)MetaspaceObj::shared_metaspace_base();
|
||||||
address static_top = (address)_shared_metaspace_static_top;
|
address static_top = (address)_shared_metaspace_static_top;
|
||||||
|
@ -1483,7 +1483,7 @@ void ClassLoader::classLoader_init2(JavaThread* current) {
|
|||||||
// entries will be added to the exploded build array.
|
// entries will be added to the exploded build array.
|
||||||
if (!has_jrt_entry()) {
|
if (!has_jrt_entry()) {
|
||||||
assert(!CDSConfig::is_dumping_archive(), "not supported with exploded module builds");
|
assert(!CDSConfig::is_dumping_archive(), "not supported with exploded module builds");
|
||||||
assert(!UseSharedSpaces, "UsedSharedSpaces not supported with exploded module builds");
|
assert(!CDSConfig::is_using_archive(), "UsedSharedSpaces not supported with exploded module builds");
|
||||||
// Set up the boot loader's _exploded_entries list. Note that this gets
|
// Set up the boot loader's _exploded_entries list. Note that this gets
|
||||||
// done before loading any classes, by the same thread that will
|
// done before loading any classes, by the same thread that will
|
||||||
// subsequently do the first class load. So, no lock is needed for this.
|
// subsequently do the first class load. So, no lock is needed for this.
|
||||||
|
@ -102,7 +102,7 @@ void ArchivedClassLoaderData::init_archived_entries(ClassLoaderData* loader_data
|
|||||||
}
|
}
|
||||||
|
|
||||||
void ArchivedClassLoaderData::restore(ClassLoaderData* loader_data, bool do_entries, bool do_oops) {
|
void ArchivedClassLoaderData::restore(ClassLoaderData* loader_data, bool do_entries, bool do_oops) {
|
||||||
assert(UseSharedSpaces, "must be");
|
assert(CDSConfig::is_using_archive(), "must be");
|
||||||
assert_valid(loader_data);
|
assert_valid(loader_data);
|
||||||
if (_modules != nullptr) { // Could be null if we have archived no modules for platform/system loaders
|
if (_modules != nullptr) { // Could be null if we have archived no modules for platform/system loaders
|
||||||
ModuleEntryTable* modules = loader_data->modules();
|
ModuleEntryTable* modules = loader_data->modules();
|
||||||
@ -120,7 +120,7 @@ void ArchivedClassLoaderData::restore(ClassLoaderData* loader_data, bool do_entr
|
|||||||
}
|
}
|
||||||
|
|
||||||
void ArchivedClassLoaderData::clear_archived_oops() {
|
void ArchivedClassLoaderData::clear_archived_oops() {
|
||||||
assert(UseSharedSpaces, "must be");
|
assert(CDSConfig::is_using_archive(), "must be");
|
||||||
if (_modules != nullptr) {
|
if (_modules != nullptr) {
|
||||||
for (int i = 0; i < _modules->length(); i++) {
|
for (int i = 0; i < _modules->length(); i++) {
|
||||||
_modules->at(i)->clear_archived_oops();
|
_modules->at(i)->clear_archived_oops();
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2015, 2023, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2015, 2024, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -60,7 +60,7 @@ bool ClassLoaderExt::_has_platform_classes = false;
|
|||||||
bool ClassLoaderExt::_has_non_jar_in_classpath = false;
|
bool ClassLoaderExt::_has_non_jar_in_classpath = false;
|
||||||
|
|
||||||
void ClassLoaderExt::append_boot_classpath(ClassPathEntry* new_entry) {
|
void ClassLoaderExt::append_boot_classpath(ClassPathEntry* new_entry) {
|
||||||
if (UseSharedSpaces) {
|
if (CDSConfig::is_using_archive()) {
|
||||||
warning("Sharing is only supported for boot loader classes because bootstrap classpath has been appended");
|
warning("Sharing is only supported for boot loader classes because bootstrap classpath has been appended");
|
||||||
FileMapInfo::current_info()->set_has_platform_or_app_classes(false);
|
FileMapInfo::current_info()->set_has_platform_or_app_classes(false);
|
||||||
if (DynamicArchive::is_mapped()) {
|
if (DynamicArchive::is_mapped()) {
|
||||||
|
@ -5328,7 +5328,7 @@ void java_lang_InternalError::serialize_offsets(SerializeClosure* f) {
|
|||||||
|
|
||||||
// Compute field offsets of all the classes in this file
|
// Compute field offsets of all the classes in this file
|
||||||
void JavaClasses::compute_offsets() {
|
void JavaClasses::compute_offsets() {
|
||||||
if (UseSharedSpaces) {
|
if (CDSConfig::is_using_archive()) {
|
||||||
JVMTI_ONLY(assert(JvmtiExport::is_early_phase() && !(JvmtiExport::should_post_class_file_load_hook() &&
|
JVMTI_ONLY(assert(JvmtiExport::is_early_phase() && !(JvmtiExport::should_post_class_file_load_hook() &&
|
||||||
JvmtiExport::has_early_class_hook_env()),
|
JvmtiExport::has_early_class_hook_env()),
|
||||||
"JavaClasses::compute_offsets() must be called in early JVMTI phase."));
|
"JavaClasses::compute_offsets() must be called in early JVMTI phase."));
|
||||||
|
@ -61,7 +61,7 @@ void ModuleEntry::set_location(Symbol* location) {
|
|||||||
|
|
||||||
if (location != nullptr) {
|
if (location != nullptr) {
|
||||||
location->increment_refcount();
|
location->increment_refcount();
|
||||||
CDS_ONLY(if (UseSharedSpaces) {
|
CDS_ONLY(if (CDSConfig::is_using_archive()) {
|
||||||
_shared_path_index = FileMapInfo::get_module_shared_path_index(location);
|
_shared_path_index = FileMapInfo::get_module_shared_path_index(location);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -513,14 +513,14 @@ void ModuleEntry::verify_archived_module_entries() {
|
|||||||
#endif // PRODUCT
|
#endif // PRODUCT
|
||||||
|
|
||||||
void ModuleEntry::load_from_archive(ClassLoaderData* loader_data) {
|
void ModuleEntry::load_from_archive(ClassLoaderData* loader_data) {
|
||||||
assert(UseSharedSpaces, "runtime only");
|
assert(CDSConfig::is_using_archive(), "runtime only");
|
||||||
set_loader_data(loader_data);
|
set_loader_data(loader_data);
|
||||||
_reads = restore_growable_array((Array<ModuleEntry*>*)_reads);
|
_reads = restore_growable_array((Array<ModuleEntry*>*)_reads);
|
||||||
JFR_ONLY(INIT_ID(this);)
|
JFR_ONLY(INIT_ID(this);)
|
||||||
}
|
}
|
||||||
|
|
||||||
void ModuleEntry::restore_archived_oops(ClassLoaderData* loader_data) {
|
void ModuleEntry::restore_archived_oops(ClassLoaderData* loader_data) {
|
||||||
assert(UseSharedSpaces, "runtime only");
|
assert(CDSConfig::is_using_archive(), "runtime only");
|
||||||
Handle module_handle(Thread::current(), HeapShared::get_root(_archived_module_index, /*clear=*/true));
|
Handle module_handle(Thread::current(), HeapShared::get_root(_archived_module_index, /*clear=*/true));
|
||||||
assert(module_handle.not_null(), "huh");
|
assert(module_handle.not_null(), "huh");
|
||||||
set_module(loader_data->add_handle(module_handle));
|
set_module(loader_data->add_handle(module_handle));
|
||||||
@ -541,7 +541,7 @@ void ModuleEntry::restore_archived_oops(ClassLoaderData* loader_data) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void ModuleEntry::clear_archived_oops() {
|
void ModuleEntry::clear_archived_oops() {
|
||||||
assert(UseSharedSpaces, "runtime only");
|
assert(CDSConfig::is_using_archive(), "runtime only");
|
||||||
HeapShared::clear_root(_archived_module_index);
|
HeapShared::clear_root(_archived_module_index);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -586,7 +586,7 @@ void ModuleEntryTable::init_archived_entries(Array<ModuleEntry*>* archived_modul
|
|||||||
|
|
||||||
void ModuleEntryTable::load_archived_entries(ClassLoaderData* loader_data,
|
void ModuleEntryTable::load_archived_entries(ClassLoaderData* loader_data,
|
||||||
Array<ModuleEntry*>* archived_modules) {
|
Array<ModuleEntry*>* archived_modules) {
|
||||||
assert(UseSharedSpaces, "runtime only");
|
assert(CDSConfig::is_using_archive(), "runtime only");
|
||||||
|
|
||||||
for (int i = 0; i < archived_modules->length(); i++) {
|
for (int i = 0; i < archived_modules->length(); i++) {
|
||||||
ModuleEntry* archived_entry = archived_modules->at(i);
|
ModuleEntry* archived_entry = archived_modules->at(i);
|
||||||
@ -596,7 +596,7 @@ void ModuleEntryTable::load_archived_entries(ClassLoaderData* loader_data,
|
|||||||
}
|
}
|
||||||
|
|
||||||
void ModuleEntryTable::restore_archived_oops(ClassLoaderData* loader_data, Array<ModuleEntry*>* archived_modules) {
|
void ModuleEntryTable::restore_archived_oops(ClassLoaderData* loader_data, Array<ModuleEntry*>* archived_modules) {
|
||||||
assert(UseSharedSpaces, "runtime only");
|
assert(CDSConfig::is_using_archive(), "runtime only");
|
||||||
for (int i = 0; i < archived_modules->length(); i++) {
|
for (int i = 0; i < archived_modules->length(); i++) {
|
||||||
ModuleEntry* archived_entry = archived_modules->at(i);
|
ModuleEntry* archived_entry = archived_modules->at(i);
|
||||||
archived_entry->restore_archived_oops(loader_data);
|
archived_entry->restore_archived_oops(loader_data);
|
||||||
|
@ -25,6 +25,7 @@
|
|||||||
#include "precompiled.hpp"
|
#include "precompiled.hpp"
|
||||||
#include "cds/archiveBuilder.hpp"
|
#include "cds/archiveBuilder.hpp"
|
||||||
#include "cds/archiveUtils.hpp"
|
#include "cds/archiveUtils.hpp"
|
||||||
|
#include "cds/cdsConfig.hpp"
|
||||||
#include "classfile/classLoaderData.hpp"
|
#include "classfile/classLoaderData.hpp"
|
||||||
#include "classfile/moduleEntry.hpp"
|
#include "classfile/moduleEntry.hpp"
|
||||||
#include "classfile/packageEntry.hpp"
|
#include "classfile/packageEntry.hpp"
|
||||||
@ -316,7 +317,7 @@ void PackageEntryTable::init_archived_entries(Array<PackageEntry*>* archived_pac
|
|||||||
}
|
}
|
||||||
|
|
||||||
void PackageEntryTable::load_archived_entries(Array<PackageEntry*>* archived_packages) {
|
void PackageEntryTable::load_archived_entries(Array<PackageEntry*>* archived_packages) {
|
||||||
assert(UseSharedSpaces, "runtime only");
|
assert(CDSConfig::is_using_archive(), "runtime only");
|
||||||
|
|
||||||
for (int i = 0; i < archived_packages->length(); i++) {
|
for (int i = 0; i < archived_packages->length(); i++) {
|
||||||
PackageEntry* archived_entry = archived_packages->at(i);
|
PackageEntry* archived_entry = archived_packages->at(i);
|
||||||
|
@ -139,7 +139,7 @@ void SystemDictionary::compute_java_loaders(TRAPS) {
|
|||||||
_java_system_loader = OopHandle(Universe::vm_global(), system_loader);
|
_java_system_loader = OopHandle(Universe::vm_global(), system_loader);
|
||||||
} else {
|
} else {
|
||||||
// It must have been restored from the archived module graph
|
// It must have been restored from the archived module graph
|
||||||
assert(UseSharedSpaces, "must be");
|
assert(CDSConfig::is_using_archive(), "must be");
|
||||||
assert(CDSConfig::is_using_full_module_graph(), "must be");
|
assert(CDSConfig::is_using_full_module_graph(), "must be");
|
||||||
DEBUG_ONLY(
|
DEBUG_ONLY(
|
||||||
oop system_loader = get_system_class_loader_impl(CHECK);
|
oop system_loader = get_system_class_loader_impl(CHECK);
|
||||||
@ -152,7 +152,7 @@ void SystemDictionary::compute_java_loaders(TRAPS) {
|
|||||||
_java_platform_loader = OopHandle(Universe::vm_global(), platform_loader);
|
_java_platform_loader = OopHandle(Universe::vm_global(), platform_loader);
|
||||||
} else {
|
} else {
|
||||||
// It must have been restored from the archived module graph
|
// It must have been restored from the archived module graph
|
||||||
assert(UseSharedSpaces, "must be");
|
assert(CDSConfig::is_using_archive(), "must be");
|
||||||
assert(CDSConfig::is_using_full_module_graph(), "must be");
|
assert(CDSConfig::is_using_full_module_graph(), "must be");
|
||||||
DEBUG_ONLY(
|
DEBUG_ONLY(
|
||||||
oop platform_loader = get_platform_class_loader_impl(CHECK);
|
oop platform_loader = get_platform_class_loader_impl(CHECK);
|
||||||
@ -1262,7 +1262,7 @@ InstanceKlass* SystemDictionary::load_instance_class_impl(Symbol* class_name, Ha
|
|||||||
InstanceKlass* k = nullptr;
|
InstanceKlass* k = nullptr;
|
||||||
|
|
||||||
#if INCLUDE_CDS
|
#if INCLUDE_CDS
|
||||||
if (UseSharedSpaces)
|
if (CDSConfig::is_using_archive())
|
||||||
{
|
{
|
||||||
PerfTraceTime vmtimer(ClassLoader::perf_shared_classload_time());
|
PerfTraceTime vmtimer(ClassLoader::perf_shared_classload_time());
|
||||||
InstanceKlass* ik = SystemDictionaryShared::find_builtin_class(class_name);
|
InstanceKlass* ik = SystemDictionaryShared::find_builtin_class(class_name);
|
||||||
@ -1617,7 +1617,7 @@ void SystemDictionary::initialize(TRAPS) {
|
|||||||
// Resolve basic classes
|
// Resolve basic classes
|
||||||
vmClasses::resolve_all(CHECK);
|
vmClasses::resolve_all(CHECK);
|
||||||
// Resolve classes used by archived heap objects
|
// Resolve classes used by archived heap objects
|
||||||
if (UseSharedSpaces) {
|
if (CDSConfig::is_using_archive()) {
|
||||||
HeapShared::resolve_classes(THREAD);
|
HeapShared::resolve_classes(THREAD);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -85,7 +85,7 @@ DEBUG_ONLY(bool SystemDictionaryShared::_class_loading_may_happen = true;)
|
|||||||
|
|
||||||
InstanceKlass* SystemDictionaryShared::load_shared_class_for_builtin_loader(
|
InstanceKlass* SystemDictionaryShared::load_shared_class_for_builtin_loader(
|
||||||
Symbol* class_name, Handle class_loader, TRAPS) {
|
Symbol* class_name, Handle class_loader, TRAPS) {
|
||||||
assert(UseSharedSpaces, "must be");
|
assert(CDSConfig::is_using_archive(), "must be");
|
||||||
InstanceKlass* ik = find_builtin_class(class_name);
|
InstanceKlass* ik = find_builtin_class(class_name);
|
||||||
|
|
||||||
if (ik != nullptr && !ik->shared_loading_failed()) {
|
if (ik != nullptr && !ik->shared_loading_failed()) {
|
||||||
@ -107,7 +107,7 @@ InstanceKlass* SystemDictionaryShared::lookup_from_stream(Symbol* class_name,
|
|||||||
Handle protection_domain,
|
Handle protection_domain,
|
||||||
const ClassFileStream* cfs,
|
const ClassFileStream* cfs,
|
||||||
TRAPS) {
|
TRAPS) {
|
||||||
if (!UseSharedSpaces) {
|
if (!CDSConfig::is_using_archive()) {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
if (class_name == nullptr) { // don't do this for hidden classes
|
if (class_name == nullptr) { // don't do this for hidden classes
|
||||||
@ -389,7 +389,7 @@ bool SystemDictionaryShared::has_platform_or_app_classes() {
|
|||||||
InstanceKlass* SystemDictionaryShared::find_or_load_shared_class(
|
InstanceKlass* SystemDictionaryShared::find_or_load_shared_class(
|
||||||
Symbol* name, Handle class_loader, TRAPS) {
|
Symbol* name, Handle class_loader, TRAPS) {
|
||||||
InstanceKlass* k = nullptr;
|
InstanceKlass* k = nullptr;
|
||||||
if (UseSharedSpaces) {
|
if (CDSConfig::is_using_archive()) {
|
||||||
if (!has_platform_or_app_classes()) {
|
if (!has_platform_or_app_classes()) {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
@ -841,7 +841,7 @@ InstanceKlass* SystemDictionaryShared::retrieve_lambda_proxy_class(const RunTime
|
|||||||
}
|
}
|
||||||
|
|
||||||
InstanceKlass* SystemDictionaryShared::get_shared_nest_host(InstanceKlass* lambda_ik) {
|
InstanceKlass* SystemDictionaryShared::get_shared_nest_host(InstanceKlass* lambda_ik) {
|
||||||
assert(!CDSConfig::is_dumping_static_archive() && UseSharedSpaces, "called at run time with CDS enabled only");
|
assert(!CDSConfig::is_dumping_static_archive() && CDSConfig::is_using_archive(), "called at run time with CDS enabled only");
|
||||||
RunTimeClassInfo* record = RunTimeClassInfo::get_for(lambda_ik);
|
RunTimeClassInfo* record = RunTimeClassInfo::get_for(lambda_ik);
|
||||||
return record->nest_host();
|
return record->nest_host();
|
||||||
}
|
}
|
||||||
@ -892,7 +892,7 @@ InstanceKlass* SystemDictionaryShared::prepare_shared_lambda_proxy_class(Instanc
|
|||||||
|
|
||||||
void SystemDictionaryShared::check_verification_constraints(InstanceKlass* klass,
|
void SystemDictionaryShared::check_verification_constraints(InstanceKlass* klass,
|
||||||
TRAPS) {
|
TRAPS) {
|
||||||
assert(!CDSConfig::is_dumping_static_archive() && UseSharedSpaces, "called at run time with CDS enabled only");
|
assert(!CDSConfig::is_dumping_static_archive() && CDSConfig::is_using_archive(), "called at run time with CDS enabled only");
|
||||||
RunTimeClassInfo* record = RunTimeClassInfo::get_for(klass);
|
RunTimeClassInfo* record = RunTimeClassInfo::get_for(klass);
|
||||||
|
|
||||||
int length = record->_num_verifier_constraints;
|
int length = record->_num_verifier_constraints;
|
||||||
@ -1002,7 +1002,7 @@ void SystemDictionaryShared::record_linking_constraint(Symbol* name, InstanceKla
|
|||||||
// returns true IFF there's no need to re-initialize the i/v-tables for klass for
|
// returns true IFF there's no need to re-initialize the i/v-tables for klass for
|
||||||
// the purpose of checking class loader constraints.
|
// the purpose of checking class loader constraints.
|
||||||
bool SystemDictionaryShared::check_linking_constraints(Thread* current, InstanceKlass* klass) {
|
bool SystemDictionaryShared::check_linking_constraints(Thread* current, InstanceKlass* klass) {
|
||||||
assert(!CDSConfig::is_dumping_static_archive() && UseSharedSpaces, "called at run time with CDS enabled only");
|
assert(!CDSConfig::is_dumping_static_archive() && CDSConfig::is_using_archive(), "called at run time with CDS enabled only");
|
||||||
LogTarget(Info, class, loader, constraints) log;
|
LogTarget(Info, class, loader, constraints) log;
|
||||||
if (klass->is_shared_boot_class()) {
|
if (klass->is_shared_boot_class()) {
|
||||||
// No class loader constraint check performed for boot classes.
|
// No class loader constraint check performed for boot classes.
|
||||||
@ -1290,7 +1290,7 @@ void SystemDictionaryShared::serialize_vm_classes(SerializeClosure* soc) {
|
|||||||
|
|
||||||
const RunTimeClassInfo*
|
const RunTimeClassInfo*
|
||||||
SystemDictionaryShared::find_record(RunTimeSharedDictionary* static_dict, RunTimeSharedDictionary* dynamic_dict, Symbol* name) {
|
SystemDictionaryShared::find_record(RunTimeSharedDictionary* static_dict, RunTimeSharedDictionary* dynamic_dict, Symbol* name) {
|
||||||
if (!UseSharedSpaces || !name->is_shared()) {
|
if (!CDSConfig::is_using_archive() || !name->is_shared()) {
|
||||||
// The names of all shared classes must also be a shared Symbol.
|
// The names of all shared classes must also be a shared Symbol.
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
@ -1427,7 +1427,7 @@ void SystemDictionaryShared::ArchiveInfo::print_table_statistics(const char* pre
|
|||||||
}
|
}
|
||||||
|
|
||||||
void SystemDictionaryShared::print_shared_archive(outputStream* st, bool is_static) {
|
void SystemDictionaryShared::print_shared_archive(outputStream* st, bool is_static) {
|
||||||
if (UseSharedSpaces) {
|
if (CDSConfig::is_using_archive()) {
|
||||||
if (is_static) {
|
if (is_static) {
|
||||||
_static_archive.print_on("", st);
|
_static_archive.print_on("", st);
|
||||||
} else {
|
} else {
|
||||||
@ -1444,7 +1444,7 @@ void SystemDictionaryShared::print_on(outputStream* st) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void SystemDictionaryShared::print_table_statistics(outputStream* st) {
|
void SystemDictionaryShared::print_table_statistics(outputStream* st) {
|
||||||
if (UseSharedSpaces) {
|
if (CDSConfig::is_using_archive()) {
|
||||||
_static_archive.print_table_statistics("Static ", st);
|
_static_archive.print_table_statistics("Static ", st);
|
||||||
if (DynamicArchive::is_mapped()) {
|
if (DynamicArchive::is_mapped()) {
|
||||||
_dynamic_archive.print_table_statistics("Dynamic ", st);
|
_dynamic_archive.print_table_statistics("Dynamic ", st);
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2021, 2023, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2021, 2024, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -24,6 +24,7 @@
|
|||||||
|
|
||||||
#include "precompiled.hpp"
|
#include "precompiled.hpp"
|
||||||
#include "cds/archiveHeapLoader.hpp"
|
#include "cds/archiveHeapLoader.hpp"
|
||||||
|
#include "cds/cdsConfig.hpp"
|
||||||
#include "classfile/classLoader.hpp"
|
#include "classfile/classLoader.hpp"
|
||||||
#include "classfile/classLoaderData.hpp"
|
#include "classfile/classLoaderData.hpp"
|
||||||
#include "classfile/dictionary.hpp"
|
#include "classfile/dictionary.hpp"
|
||||||
@ -86,7 +87,7 @@ bool vmClasses::resolve(vmClassID id, TRAPS) {
|
|||||||
InstanceKlass** klassp = &_klasses[as_int(id)];
|
InstanceKlass** klassp = &_klasses[as_int(id)];
|
||||||
|
|
||||||
#if INCLUDE_CDS
|
#if INCLUDE_CDS
|
||||||
if (UseSharedSpaces && !JvmtiExport::should_post_class_prepare()) {
|
if (CDSConfig::is_using_archive() && !JvmtiExport::should_post_class_prepare()) {
|
||||||
InstanceKlass* k = *klassp;
|
InstanceKlass* k = *klassp;
|
||||||
assert(k->is_shared_boot_class(), "must be");
|
assert(k->is_shared_boot_class(), "must be");
|
||||||
|
|
||||||
@ -128,7 +129,7 @@ void vmClasses::resolve_all(TRAPS) {
|
|||||||
resolve_through(VM_CLASS_ID(Object_klass), scan, CHECK);
|
resolve_through(VM_CLASS_ID(Object_klass), scan, CHECK);
|
||||||
CollectedHeap::set_filler_object_klass(vmClasses::Object_klass());
|
CollectedHeap::set_filler_object_klass(vmClasses::Object_klass());
|
||||||
#if INCLUDE_CDS
|
#if INCLUDE_CDS
|
||||||
if (UseSharedSpaces) {
|
if (CDSConfig::is_using_archive()) {
|
||||||
// It's unsafe to access the archived heap regions before they
|
// It's unsafe to access the archived heap regions before they
|
||||||
// are fixed up, so we must do the fixup as early as possible
|
// are fixed up, so we must do the fixup as early as possible
|
||||||
// before the archived java objects are accessed by functions
|
// before the archived java objects are accessed by functions
|
||||||
@ -167,7 +168,7 @@ void vmClasses::resolve_all(TRAPS) {
|
|||||||
Universe::initialize_basic_type_mirrors(CHECK);
|
Universe::initialize_basic_type_mirrors(CHECK);
|
||||||
Universe::fixup_mirrors(CHECK);
|
Universe::fixup_mirrors(CHECK);
|
||||||
|
|
||||||
if (UseSharedSpaces) {
|
if (CDSConfig::is_using_archive()) {
|
||||||
// These should already have been initialized during CDS dump.
|
// These should already have been initialized during CDS dump.
|
||||||
assert(vmClasses::Reference_klass()->reference_type() == REF_NONE, "sanity");
|
assert(vmClasses::Reference_klass()->reference_type() == REF_NONE, "sanity");
|
||||||
assert(vmClasses::SoftReference_klass()->reference_type() == REF_SOFT, "sanity");
|
assert(vmClasses::SoftReference_klass()->reference_type() == REF_SOFT, "sanity");
|
||||||
@ -208,7 +209,7 @@ void vmClasses::resolve_all(TRAPS) {
|
|||||||
//_box_klasses[T_ARRAY] = vmClasses::object_klass();
|
//_box_klasses[T_ARRAY] = vmClasses::object_klass();
|
||||||
|
|
||||||
#ifdef ASSERT
|
#ifdef ASSERT
|
||||||
if (UseSharedSpaces) {
|
if (CDSConfig::is_using_archive()) {
|
||||||
JVMTI_ONLY(assert(JvmtiExport::is_early_phase(),
|
JVMTI_ONLY(assert(JvmtiExport::is_early_phase(),
|
||||||
"All well known classes must be resolved in JVMTI early phase"));
|
"All well known classes must be resolved in JVMTI early phase"));
|
||||||
for (auto id : EnumRange<vmClassID>{}) {
|
for (auto id : EnumRange<vmClassID>{}) {
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 1997, 2023, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1997, 2024, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -23,6 +23,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "precompiled.hpp"
|
#include "precompiled.hpp"
|
||||||
|
#include "cds/cdsConfig.hpp"
|
||||||
#include "cds/serializeClosure.hpp"
|
#include "cds/serializeClosure.hpp"
|
||||||
#include "classfile/symbolTable.hpp"
|
#include "classfile/symbolTable.hpp"
|
||||||
#include "classfile/vmSymbols.hpp"
|
#include "classfile/vmSymbols.hpp"
|
||||||
@ -81,7 +82,7 @@ void vmSymbols::initialize() {
|
|||||||
assert(SID_LIMIT*5 > (1<<log2_SID_LIMIT), "make the bitfield smaller, please");
|
assert(SID_LIMIT*5 > (1<<log2_SID_LIMIT), "make the bitfield smaller, please");
|
||||||
assert(vmIntrinsics::FLAG_LIMIT <= (1 << vmIntrinsics::log2_FLAG_LIMIT), "must fit in this bitfield");
|
assert(vmIntrinsics::FLAG_LIMIT <= (1 << vmIntrinsics::log2_FLAG_LIMIT), "must fit in this bitfield");
|
||||||
|
|
||||||
if (!UseSharedSpaces) {
|
if (!CDSConfig::is_using_archive()) {
|
||||||
const char* string = &vm_symbol_bodies[0];
|
const char* string = &vm_symbol_bodies[0];
|
||||||
for (auto index : EnumRange<vmSymbolID>{}) {
|
for (auto index : EnumRange<vmSymbolID>{}) {
|
||||||
Symbol* sym = SymbolTable::new_permanent_symbol(string);
|
Symbol* sym = SymbolTable::new_permanent_symbol(string);
|
||||||
|
@ -2443,7 +2443,7 @@ run:
|
|||||||
CHECK_NULL(STACK_OBJECT(-(entry->number_of_parameters())));
|
CHECK_NULL(STACK_OBJECT(-(entry->number_of_parameters())));
|
||||||
if (entry->is_vfinal()) {
|
if (entry->is_vfinal()) {
|
||||||
callee = entry->method();
|
callee = entry->method();
|
||||||
if (REWRITE_BYTECODES && !UseSharedSpaces && !CDSConfig::is_dumping_archive()) {
|
if (REWRITE_BYTECODES && !CDSConfig::is_using_archive() && !CDSConfig::is_dumping_archive()) {
|
||||||
// Rewrite to _fast_invokevfinal.
|
// Rewrite to _fast_invokevfinal.
|
||||||
REWRITE_AT_PC(Bytecodes::_fast_invokevfinal);
|
REWRITE_AT_PC(Bytecodes::_fast_invokevfinal);
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2011, 2024, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2011, 2024, Oracle and/or its affiliates. All rights reserved.
|
||||||
* Copyright (c) 2017, 2021 SAP SE. All rights reserved.
|
* Copyright (c) 2017, 2021 SAP SE. All rights reserved.
|
||||||
* Copyright (c) 2023, Red Hat, Inc. All rights reserved.
|
* Copyright (c) 2023, 2024, Red Hat, Inc. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -691,7 +691,7 @@ void Metaspace::global_initialize() {
|
|||||||
metaspace::ChunkHeaderPool::initialize();
|
metaspace::ChunkHeaderPool::initialize();
|
||||||
|
|
||||||
if (CDSConfig::is_dumping_static_archive()) {
|
if (CDSConfig::is_dumping_static_archive()) {
|
||||||
assert(!UseSharedSpaces, "sanity");
|
assert(!CDSConfig::is_using_archive(), "sanity");
|
||||||
MetaspaceShared::initialize_for_static_dump();
|
MetaspaceShared::initialize_for_static_dump();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -707,7 +707,7 @@ void Metaspace::global_initialize() {
|
|||||||
|
|
||||||
#if INCLUDE_CDS
|
#if INCLUDE_CDS
|
||||||
// case (a)
|
// case (a)
|
||||||
if (UseSharedSpaces) {
|
if (CDSConfig::is_using_archive()) {
|
||||||
if (!FLAG_IS_DEFAULT(CompressedClassSpaceBaseAddress)) {
|
if (!FLAG_IS_DEFAULT(CompressedClassSpaceBaseAddress)) {
|
||||||
log_warning(metaspace)("CDS active - ignoring CompressedClassSpaceBaseAddress.");
|
log_warning(metaspace)("CDS active - ignoring CompressedClassSpaceBaseAddress.");
|
||||||
}
|
}
|
||||||
@ -720,7 +720,7 @@ void Metaspace::global_initialize() {
|
|||||||
#ifdef _LP64
|
#ifdef _LP64
|
||||||
|
|
||||||
if (using_class_space() && !class_space_is_initialized()) {
|
if (using_class_space() && !class_space_is_initialized()) {
|
||||||
assert(!UseSharedSpaces, "CDS archive is not mapped at this point");
|
assert(!CDSConfig::is_using_archive(), "CDS archive is not mapped at this point");
|
||||||
|
|
||||||
// case (b) (No CDS)
|
// case (b) (No CDS)
|
||||||
ReservedSpace rs;
|
ReservedSpace rs;
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2018, 2023, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2018, 2024, Oracle and/or its affiliates. All rights reserved.
|
||||||
* Copyright (c) 2018, 2020 SAP SE. All rights reserved.
|
* Copyright (c) 2018, 2020 SAP SE. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
@ -116,7 +116,7 @@ static void print_settings(outputStream* out, size_t scale) {
|
|||||||
out->print("Current GC threshold: ");
|
out->print("Current GC threshold: ");
|
||||||
print_human_readable_size(out, MetaspaceGC::capacity_until_GC(), scale);
|
print_human_readable_size(out, MetaspaceGC::capacity_until_GC(), scale);
|
||||||
out->cr();
|
out->cr();
|
||||||
out->print_cr("CDS: %s", (UseSharedSpaces ? "on" : (CDSConfig::is_dumping_static_archive() ? "dump" : "off")));
|
out->print_cr("CDS: %s", (CDSConfig::is_using_archive() ? "on" : (CDSConfig::is_dumping_static_archive() ? "dump" : "off")));
|
||||||
Settings::print_on(out);
|
Settings::print_on(out);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -361,7 +361,7 @@ void Universe::check_alignment(uintx size, uintx alignment, const char* name) {
|
|||||||
static void initialize_basic_type_klass(Klass* k, TRAPS) {
|
static void initialize_basic_type_klass(Klass* k, TRAPS) {
|
||||||
Klass* ok = vmClasses::Object_klass();
|
Klass* ok = vmClasses::Object_klass();
|
||||||
#if INCLUDE_CDS
|
#if INCLUDE_CDS
|
||||||
if (UseSharedSpaces) {
|
if (CDSConfig::is_using_archive()) {
|
||||||
ClassLoaderData* loader_data = ClassLoaderData::the_null_class_loader_data();
|
ClassLoaderData* loader_data = ClassLoaderData::the_null_class_loader_data();
|
||||||
assert(k->super() == ok, "u3");
|
assert(k->super() == ok, "u3");
|
||||||
if (k->is_instance_klass()) {
|
if (k->is_instance_klass()) {
|
||||||
@ -394,7 +394,7 @@ void Universe::genesis(TRAPS) {
|
|||||||
// determine base vtable size; without that we cannot create the array klasses
|
// determine base vtable size; without that we cannot create the array klasses
|
||||||
compute_base_vtable_size();
|
compute_base_vtable_size();
|
||||||
|
|
||||||
if (!UseSharedSpaces) {
|
if (!CDSConfig::is_using_archive()) {
|
||||||
// Initialization of the fillerArrayKlass must come before regular
|
// Initialization of the fillerArrayKlass must come before regular
|
||||||
// int-TypeArrayKlass so that the int-Array mirror points to the
|
// int-TypeArrayKlass so that the int-Array mirror points to the
|
||||||
// int-TypeArrayKlass.
|
// int-TypeArrayKlass.
|
||||||
@ -425,7 +425,7 @@ void Universe::genesis(TRAPS) {
|
|||||||
|
|
||||||
|
|
||||||
#if INCLUDE_CDS
|
#if INCLUDE_CDS
|
||||||
if (UseSharedSpaces) {
|
if (CDSConfig::is_using_archive()) {
|
||||||
// Verify shared interfaces array.
|
// Verify shared interfaces array.
|
||||||
assert(_the_array_interfaces_array->at(0) ==
|
assert(_the_array_interfaces_array->at(0) ==
|
||||||
vmClasses::Cloneable_klass(), "u3");
|
vmClasses::Cloneable_klass(), "u3");
|
||||||
@ -527,7 +527,7 @@ void Universe::genesis(TRAPS) {
|
|||||||
|
|
||||||
void Universe::initialize_basic_type_mirrors(TRAPS) {
|
void Universe::initialize_basic_type_mirrors(TRAPS) {
|
||||||
#if INCLUDE_CDS_JAVA_HEAP
|
#if INCLUDE_CDS_JAVA_HEAP
|
||||||
if (UseSharedSpaces &&
|
if (CDSConfig::is_using_archive() &&
|
||||||
ArchiveHeapLoader::is_in_use() &&
|
ArchiveHeapLoader::is_in_use() &&
|
||||||
_basic_type_mirrors[T_INT].resolve() != nullptr) {
|
_basic_type_mirrors[T_INT].resolve() != nullptr) {
|
||||||
assert(ArchiveHeapLoader::can_use(), "Sanity");
|
assert(ArchiveHeapLoader::can_use(), "Sanity");
|
||||||
@ -565,7 +565,7 @@ void Universe::fixup_mirrors(TRAPS) {
|
|||||||
assert(vmClasses::Class_klass_loaded(), "java.lang.Class should be loaded");
|
assert(vmClasses::Class_klass_loaded(), "java.lang.Class should be loaded");
|
||||||
HandleMark hm(THREAD);
|
HandleMark hm(THREAD);
|
||||||
|
|
||||||
if (!UseSharedSpaces) {
|
if (!CDSConfig::is_using_archive()) {
|
||||||
// Cache the start of the static fields
|
// Cache the start of the static fields
|
||||||
InstanceMirrorKlass::init_offset_of_static_fields();
|
InstanceMirrorKlass::init_offset_of_static_fields();
|
||||||
}
|
}
|
||||||
@ -877,7 +877,7 @@ jint universe_init() {
|
|||||||
|
|
||||||
#if INCLUDE_CDS
|
#if INCLUDE_CDS
|
||||||
DynamicArchive::check_for_dynamic_dump();
|
DynamicArchive::check_for_dynamic_dump();
|
||||||
if (UseSharedSpaces) {
|
if (CDSConfig::is_using_archive()) {
|
||||||
// Read the data structures supporting the shared spaces (shared
|
// Read the data structures supporting the shared spaces (shared
|
||||||
// system dictionary, symbol table, etc.)
|
// system dictionary, symbol table, etc.)
|
||||||
MetaspaceShared::initialize_shared_spaces();
|
MetaspaceShared::initialize_shared_spaces();
|
||||||
@ -1062,7 +1062,7 @@ bool universe_post_init() {
|
|||||||
assert(!is_init_completed(), "Error: initialization not yet completed!");
|
assert(!is_init_completed(), "Error: initialization not yet completed!");
|
||||||
Universe::_fully_initialized = true;
|
Universe::_fully_initialized = true;
|
||||||
EXCEPTION_MARK;
|
EXCEPTION_MARK;
|
||||||
if (!UseSharedSpaces) {
|
if (!CDSConfig::is_using_archive()) {
|
||||||
reinitialize_vtables();
|
reinitialize_vtables();
|
||||||
reinitialize_itables();
|
reinitialize_itables();
|
||||||
}
|
}
|
||||||
|
@ -43,7 +43,7 @@
|
|||||||
#include "runtime/handles.inline.hpp"
|
#include "runtime/handles.inline.hpp"
|
||||||
|
|
||||||
ArrayKlass::ArrayKlass() {
|
ArrayKlass::ArrayKlass() {
|
||||||
assert(CDSConfig::is_dumping_static_archive() || UseSharedSpaces, "only for CDS");
|
assert(CDSConfig::is_dumping_static_archive() || CDSConfig::is_using_archive(), "only for CDS");
|
||||||
}
|
}
|
||||||
|
|
||||||
int ArrayKlass::static_size(int header_size) {
|
int ArrayKlass::static_size(int header_size) {
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 1997, 2023, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1997, 2024, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -105,7 +105,7 @@ static bool tag_array_is_zero_initialized(Array<u1>* tags) {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
ConstantPool::ConstantPool() {
|
ConstantPool::ConstantPool() {
|
||||||
assert(CDSConfig::is_dumping_static_archive() || UseSharedSpaces, "only for CDS");
|
assert(CDSConfig::is_dumping_static_archive() || CDSConfig::is_using_archive(), "only for CDS");
|
||||||
}
|
}
|
||||||
|
|
||||||
ConstantPool::ConstantPool(Array<u1>* tags) :
|
ConstantPool::ConstantPool(Array<u1>* tags) :
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2023, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2023, 2024, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -27,5 +27,5 @@
|
|||||||
#include "oops/instanceClassLoaderKlass.hpp"
|
#include "oops/instanceClassLoaderKlass.hpp"
|
||||||
|
|
||||||
InstanceClassLoaderKlass::InstanceClassLoaderKlass() {
|
InstanceClassLoaderKlass::InstanceClassLoaderKlass() {
|
||||||
assert(CDSConfig::is_dumping_static_archive() || UseSharedSpaces, "only for CDS");
|
assert(CDSConfig::is_dumping_static_archive() || CDSConfig::is_using_archive(), "only for CDS");
|
||||||
}
|
}
|
||||||
|
@ -502,7 +502,7 @@ static Monitor* create_init_monitor(const char* name) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
InstanceKlass::InstanceKlass() {
|
InstanceKlass::InstanceKlass() {
|
||||||
assert(CDSConfig::is_dumping_static_archive() || UseSharedSpaces, "only for CDS");
|
assert(CDSConfig::is_dumping_static_archive() || CDSConfig::is_using_archive(), "only for CDS");
|
||||||
}
|
}
|
||||||
|
|
||||||
InstanceKlass::InstanceKlass(const ClassFileParser& parser, KlassKind kind, ReferenceType reference_type) :
|
InstanceKlass::InstanceKlass(const ClassFileParser& parser, KlassKind kind, ReferenceType reference_type) :
|
||||||
@ -4036,7 +4036,7 @@ void InstanceKlass::verify_on(outputStream* st) {
|
|||||||
Array<int>* method_ordering = this->method_ordering();
|
Array<int>* method_ordering = this->method_ordering();
|
||||||
int length = method_ordering->length();
|
int length = method_ordering->length();
|
||||||
if (JvmtiExport::can_maintain_original_method_order() ||
|
if (JvmtiExport::can_maintain_original_method_order() ||
|
||||||
((UseSharedSpaces || CDSConfig::is_dumping_archive()) && length != 0)) {
|
((CDSConfig::is_using_archive() || CDSConfig::is_dumping_archive()) && length != 0)) {
|
||||||
guarantee(length == methods()->length(), "invalid method ordering length");
|
guarantee(length == methods()->length(), "invalid method ordering length");
|
||||||
jlong sum = 0;
|
jlong sum = 0;
|
||||||
for (int j = 0; j < length; j++) {
|
for (int j = 0; j < length; j++) {
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2011, 2023, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2011, 2024, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -41,7 +41,7 @@
|
|||||||
int InstanceMirrorKlass::_offset_of_static_fields = 0;
|
int InstanceMirrorKlass::_offset_of_static_fields = 0;
|
||||||
|
|
||||||
InstanceMirrorKlass::InstanceMirrorKlass() {
|
InstanceMirrorKlass::InstanceMirrorKlass() {
|
||||||
assert(CDSConfig::is_dumping_static_archive() || UseSharedSpaces, "only for CDS");
|
assert(CDSConfig::is_dumping_static_archive() || CDSConfig::is_using_archive(), "only for CDS");
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t InstanceMirrorKlass::instance_size(Klass* k) {
|
size_t InstanceMirrorKlass::instance_size(Klass* k) {
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 1997, 2023, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1997, 2024, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -32,7 +32,7 @@
|
|||||||
#include "oops/oop.inline.hpp"
|
#include "oops/oop.inline.hpp"
|
||||||
|
|
||||||
InstanceRefKlass::InstanceRefKlass() {
|
InstanceRefKlass::InstanceRefKlass() {
|
||||||
assert(CDSConfig::is_dumping_static_archive() || UseSharedSpaces, "only for CDS");
|
assert(CDSConfig::is_dumping_static_archive() || CDSConfig::is_using_archive(), "only for CDS");
|
||||||
}
|
}
|
||||||
|
|
||||||
static ReferenceType reference_subclass_name_to_type(const Symbol* name) {
|
static ReferenceType reference_subclass_name_to_type(const Symbol* name) {
|
||||||
@ -99,7 +99,7 @@ void InstanceRefKlass::update_nonstatic_oop_maps(Klass* k) {
|
|||||||
const unsigned int new_count = 2; // queue and next
|
const unsigned int new_count = 2; // queue and next
|
||||||
|
|
||||||
// Verify existing map is as expected, and update if needed.
|
// Verify existing map is as expected, and update if needed.
|
||||||
if (UseSharedSpaces) {
|
if (CDSConfig::is_using_archive()) {
|
||||||
assert(map->offset() == new_offset, "just checking");
|
assert(map->offset() == new_offset, "just checking");
|
||||||
assert(map->count() == new_count, "just checking");
|
assert(map->count() == new_count, "just checking");
|
||||||
} else {
|
} else {
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2019, 2023, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2019, 2024, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -53,7 +53,7 @@ void InstanceStackChunkKlass::serialize_offsets(SerializeClosure* f) {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
InstanceStackChunkKlass::InstanceStackChunkKlass() {
|
InstanceStackChunkKlass::InstanceStackChunkKlass() {
|
||||||
assert(CDSConfig::is_dumping_static_archive() || UseSharedSpaces, "only for CDS");
|
assert(CDSConfig::is_dumping_static_archive() || CDSConfig::is_using_archive(), "only for CDS");
|
||||||
}
|
}
|
||||||
|
|
||||||
InstanceStackChunkKlass::InstanceStackChunkKlass(const ClassFileParser& parser)
|
InstanceStackChunkKlass::InstanceStackChunkKlass(const ClassFileParser& parser)
|
||||||
|
@ -252,7 +252,7 @@ void* Klass::operator new(size_t size, ClassLoaderData* loader_data, size_t word
|
|||||||
}
|
}
|
||||||
|
|
||||||
Klass::Klass() : _kind(UnknownKlassKind) {
|
Klass::Klass() : _kind(UnknownKlassKind) {
|
||||||
assert(CDSConfig::is_dumping_static_archive() || UseSharedSpaces, "only for cds");
|
assert(CDSConfig::is_dumping_static_archive() || CDSConfig::is_using_archive(), "only for cds");
|
||||||
}
|
}
|
||||||
|
|
||||||
// "Normal" instantiation is preceded by a MetaspaceObj allocation
|
// "Normal" instantiation is preceded by a MetaspaceObj allocation
|
||||||
|
@ -23,6 +23,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "precompiled.hpp"
|
#include "precompiled.hpp"
|
||||||
|
#include "cds/cdsConfig.hpp"
|
||||||
#include "cds/metaspaceShared.hpp"
|
#include "cds/metaspaceShared.hpp"
|
||||||
#include "classfile/classFileStream.hpp"
|
#include "classfile/classFileStream.hpp"
|
||||||
#include "classfile/classLoaderDataGraph.hpp"
|
#include "classfile/classLoaderDataGraph.hpp"
|
||||||
@ -245,7 +246,7 @@ void VM_RedefineClasses::doit() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#if INCLUDE_CDS
|
#if INCLUDE_CDS
|
||||||
if (UseSharedSpaces) {
|
if (CDSConfig::is_using_archive()) {
|
||||||
// Sharing is enabled so we remap the shared readonly space to
|
// Sharing is enabled so we remap the shared readonly space to
|
||||||
// shared readwrite, private just in case we need to redefine
|
// shared readwrite, private just in case we need to redefine
|
||||||
// a shared class. We do the remap during the doit() phase of
|
// a shared class. We do the remap during the doit() phase of
|
||||||
|
@ -2059,7 +2059,7 @@ WB_ENTRY(jobject, WB_GetDefaultArchivePath(JNIEnv* env, jobject wb))
|
|||||||
WB_END
|
WB_END
|
||||||
|
|
||||||
WB_ENTRY(jboolean, WB_IsSharingEnabled(JNIEnv* env, jobject wb))
|
WB_ENTRY(jboolean, WB_IsSharingEnabled(JNIEnv* env, jobject wb))
|
||||||
return UseSharedSpaces;
|
return CDSConfig::is_using_archive();
|
||||||
WB_END
|
WB_END
|
||||||
|
|
||||||
WB_ENTRY(jint, WB_GetCDSGenericHeaderMinVersion(JNIEnv* env, jobject wb))
|
WB_ENTRY(jint, WB_GetCDSGenericHeaderMinVersion(JNIEnv* env, jobject wb))
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 1998, 2023, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1998, 2024, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -23,6 +23,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "precompiled.hpp"
|
#include "precompiled.hpp"
|
||||||
|
#include "cds/cdsConfig.hpp"
|
||||||
#include "compiler/compilerDefinitions.hpp"
|
#include "compiler/compilerDefinitions.hpp"
|
||||||
#include "jvm_io.h"
|
#include "jvm_io.h"
|
||||||
#include "runtime/arguments.hpp"
|
#include "runtime/arguments.hpp"
|
||||||
@ -136,9 +137,9 @@ const char* Abstract_VM_Version::vm_vendor() {
|
|||||||
const char* Abstract_VM_Version::vm_info_string() {
|
const char* Abstract_VM_Version::vm_info_string() {
|
||||||
switch (Arguments::mode()) {
|
switch (Arguments::mode()) {
|
||||||
case Arguments::_int:
|
case Arguments::_int:
|
||||||
return UseSharedSpaces ? "interpreted mode, sharing" : "interpreted mode";
|
return CDSConfig::is_using_archive() ? "interpreted mode, sharing" : "interpreted mode";
|
||||||
case Arguments::_mixed:
|
case Arguments::_mixed:
|
||||||
if (UseSharedSpaces) {
|
if (CDSConfig::is_using_archive()) {
|
||||||
if (CompilationModeFlag::quick_only()) {
|
if (CompilationModeFlag::quick_only()) {
|
||||||
return "mixed mode, emulated-client, sharing";
|
return "mixed mode, emulated-client, sharing";
|
||||||
} else {
|
} else {
|
||||||
@ -153,9 +154,9 @@ const char* Abstract_VM_Version::vm_info_string() {
|
|||||||
}
|
}
|
||||||
case Arguments::_comp:
|
case Arguments::_comp:
|
||||||
if (CompilationModeFlag::quick_only()) {
|
if (CompilationModeFlag::quick_only()) {
|
||||||
return UseSharedSpaces ? "compiled mode, emulated-client, sharing" : "compiled mode, emulated-client";
|
return CDSConfig::is_using_archive() ? "compiled mode, emulated-client, sharing" : "compiled mode, emulated-client";
|
||||||
}
|
}
|
||||||
return UseSharedSpaces ? "compiled mode, sharing" : "compiled mode";
|
return CDSConfig::is_using_archive() ? "compiled mode, sharing" : "compiled mode";
|
||||||
}
|
}
|
||||||
ShouldNotReachHere();
|
ShouldNotReachHere();
|
||||||
return "";
|
return "";
|
||||||
|
@ -3618,7 +3618,7 @@ jint Arguments::parse(const JavaVMInitArgs* initial_cmd_args) {
|
|||||||
"DumpLoadedClassList is not supported in this VM\n");
|
"DumpLoadedClassList is not supported in this VM\n");
|
||||||
return JNI_ERR;
|
return JNI_ERR;
|
||||||
}
|
}
|
||||||
if ((UseSharedSpaces && xshare_auto_cmd_line) ||
|
if ((CDSConfig::is_using_archive() && xshare_auto_cmd_line) ||
|
||||||
log_is_enabled(Info, cds)) {
|
log_is_enabled(Info, cds)) {
|
||||||
warning("Shared spaces are not supported in this VM");
|
warning("Shared spaces are not supported in this VM");
|
||||||
UseSharedSpaces = false;
|
UseSharedSpaces = false;
|
||||||
|
@ -23,6 +23,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "precompiled.hpp"
|
#include "precompiled.hpp"
|
||||||
|
#include "cds/cdsConfig.hpp"
|
||||||
#include "cds/cds_globals.hpp"
|
#include "cds/cds_globals.hpp"
|
||||||
#include "classfile/classLoaderDataGraph.hpp"
|
#include "classfile/classLoaderDataGraph.hpp"
|
||||||
#include "classfile/classLoaderHierarchyDCmd.hpp"
|
#include "classfile/classLoaderHierarchyDCmd.hpp"
|
||||||
@ -1023,7 +1024,7 @@ void DumpSharedArchiveDCmd::execute(DCmdSource source, TRAPS) {
|
|||||||
} else if (strcmp(scmd, "dynamic_dump") == 0) {
|
} else if (strcmp(scmd, "dynamic_dump") == 0) {
|
||||||
is_static = JNI_FALSE;
|
is_static = JNI_FALSE;
|
||||||
output()->print("Dynamic dump: ");
|
output()->print("Dynamic dump: ");
|
||||||
if (!UseSharedSpaces) {
|
if (!CDSConfig::is_using_archive()) {
|
||||||
output()->print_cr("Dynamic dump is unsupported when base CDS archive is not loaded");
|
output()->print_cr("Dynamic dump is unsupported when base CDS archive is not loaded");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user