8340826: Should not send unload notification for scratch classes
Reviewed-by: sspitsyn, coleenp
This commit is contained in:
parent
25e892911d
commit
12de4fbce7
@ -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.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -227,6 +227,10 @@ void DependencyContext::remove_and_mark_for_deoptimization_all_dependents(Deopti
|
||||
}
|
||||
|
||||
#ifndef PRODUCT
|
||||
bool DependencyContext::is_empty() {
|
||||
return dependencies() == nullptr;
|
||||
}
|
||||
|
||||
void DependencyContext::print_dependent_nmethods(bool verbose) {
|
||||
int idx = 0;
|
||||
for (nmethodBucket* b = dependencies_not_unloading(); b != nullptr; b = b->next_not_unloading()) {
|
||||
|
@ -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.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -124,6 +124,7 @@ class DependencyContext : public StackObj {
|
||||
|
||||
#ifndef PRODUCT
|
||||
void print_dependent_nmethods(bool verbose);
|
||||
bool is_empty();
|
||||
#endif //PRODUCT
|
||||
bool is_dependent_nmethod(nmethod* nm);
|
||||
};
|
||||
|
@ -484,6 +484,9 @@ static void do_primitives() {
|
||||
static void do_unloading_klass(Klass* klass) {
|
||||
assert(klass != nullptr, "invariant");
|
||||
assert(_subsystem_callback != nullptr, "invariant");
|
||||
if (klass->is_instance_klass() && InstanceKlass::cast(klass)->is_scratch_class()) {
|
||||
return;
|
||||
}
|
||||
if (JfrKlassUnloading::on_unload(klass)) {
|
||||
_subsystem_callback->do_artifact(klass);
|
||||
}
|
||||
|
@ -2721,6 +2721,13 @@ static void clear_all_breakpoints(Method* m) {
|
||||
#endif
|
||||
|
||||
void InstanceKlass::unload_class(InstanceKlass* ik) {
|
||||
|
||||
if (ik->is_scratch_class()) {
|
||||
assert(ik->dependencies().is_empty(), "dependencies should be empty for scratch classes");
|
||||
return;
|
||||
}
|
||||
assert(ik->is_loaded(), "class should be loaded " PTR_FORMAT, p2i(ik));
|
||||
|
||||
// Release dependencies.
|
||||
ik->dependencies().remove_all_dependents();
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user