< prev index next >
src/hotspot/share/classfile/packageEntry.cpp
Print this page
*** 34,43 ****
--- 34,44 ----
#include "runtime/handles.inline.hpp"
#include "utilities/events.hpp"
#include "utilities/growableArray.hpp"
#include "utilities/hashtable.inline.hpp"
#include "utilities/ostream.hpp"
+ #include "utilities/quickSort.hpp"
#include "utilities/resourceHash.hpp"
// Returns true if this package specifies m as a qualified export, including through an unnamed export
bool PackageEntry::is_qexported_to(ModuleEntry* m) const {
assert(Module_lock->owned_by_self(), "should have the Module_lock");
*** 240,251 ****
void PackageEntry::load_from_archive() {
_qualified_exports = ModuleEntry::read_archived_entry_array((Array<ModuleEntry*>*)_qualified_exports);
JFR_ONLY(INIT_ID(this);)
}
! static int compare_package_by_name(PackageEntry** a, PackageEntry** b) {
! return a[0]->name()->fast_compare(b[0]->name());
}
Array<PackageEntry*>* PackageEntryTable::allocate_archived_entries() {
// First count the packages in named modules
int n, i;
--- 241,252 ----
void PackageEntry::load_from_archive() {
_qualified_exports = ModuleEntry::read_archived_entry_array((Array<ModuleEntry*>*)_qualified_exports);
JFR_ONLY(INIT_ID(this);)
}
! static int compare_package_by_name(PackageEntry* a, PackageEntry* b) {
! return a->name()->fast_compare(b->name());
}
Array<PackageEntry*>* PackageEntryTable::allocate_archived_entries() {
// First count the packages in named modules
int n, i;
*** 265,281 ****
// created on-demand at runtime as classes in such packages are loaded.
archived_packages->at_put(n++, p);
}
}
}
! if (n > 0) {
! qsort(archived_packages->adr_at(0), n, sizeof(PackageEntry*), (_sort_Fn)compare_package_by_name);
for (i = 0; i < n; i++) {
archived_packages->at_put(i, archived_packages->at(i)->allocate_archived_entry());
ArchivePtrMarker::mark_pointer((address*)archived_packages->adr_at(i));
}
- }
return archived_packages;
}
void PackageEntryTable::init_archived_entries(Array<PackageEntry*>* archived_packages) {
for (int i = 0; i < archived_packages->length(); i++) {
--- 266,282 ----
// created on-demand at runtime as classes in such packages are loaded.
archived_packages->at_put(n++, p);
}
}
}
! if (n > 1) {
! QuickSort::sort(archived_packages->data(), n, (_sort_Fn)compare_package_by_name, true);
! }
for (i = 0; i < n; i++) {
archived_packages->at_put(i, archived_packages->at(i)->allocate_archived_entry());
ArchivePtrMarker::mark_pointer((address*)archived_packages->adr_at(i));
}
return archived_packages;
}
void PackageEntryTable::init_archived_entries(Array<PackageEntry*>* archived_packages) {
for (int i = 0; i < archived_packages->length(); i++) {
*** 285,306 ****
}
void PackageEntryTable::load_archived_entries(Array<PackageEntry*>* archived_packages) {
assert(UseSharedSpaces, "runtime only");
- MutexLocker m1(Module_lock);
for (int i = 0; i < archived_packages->length(); i++) {
PackageEntry* archived_entry = archived_packages->at(i);
archived_entry->load_from_archive();
unsigned int hash = compute_hash(archived_entry->name());
archived_entry->set_hash(hash);
add_entry(hash_to_index(hash), archived_entry);
}
}
! #endif
PackageEntry* PackageEntryTable::new_entry(unsigned int hash, Symbol* name, ModuleEntry* module) {
assert(Module_lock->owned_by_self(), "should have the Module_lock");
PackageEntry* entry = (PackageEntry*)Hashtable<Symbol*, mtModule>::allocate_new_entry(hash, name);
--- 286,306 ----
}
void PackageEntryTable::load_archived_entries(Array<PackageEntry*>* archived_packages) {
assert(UseSharedSpaces, "runtime only");
for (int i = 0; i < archived_packages->length(); i++) {
PackageEntry* archived_entry = archived_packages->at(i);
archived_entry->load_from_archive();
unsigned int hash = compute_hash(archived_entry->name());
archived_entry->set_hash(hash);
add_entry(hash_to_index(hash), archived_entry);
}
}
! #endif // INCLUDE_CDS_JAVA_HEAP
PackageEntry* PackageEntryTable::new_entry(unsigned int hash, Symbol* name, ModuleEntry* module) {
assert(Module_lock->owned_by_self(), "should have the Module_lock");
PackageEntry* entry = (PackageEntry*)Hashtable<Symbol*, mtModule>::allocate_new_entry(hash, name);
*** 383,393 ****
ResourceMark rm;
vm_exit_during_initialization("A non-" JAVA_BASE_NAME " package was loaded prior to module system initialization", entry->name()->as_C_string());
}
}
}
-
}
// iteration of qualified exports
void PackageEntry::package_exports_do(ModuleClosure* f) {
assert_locked_or_safepoint(Module_lock);
--- 383,392 ----
< prev index next >