< prev index next >
src/hotspot/share/runtime/safepoint.cpp
Print this page
@@ -21,11 +21,11 @@
* questions.
*
*/
#include "precompiled.hpp"
-#include "classfile/classLoaderData.hpp"
+#include "classfile/classLoaderData.inline.hpp"
#include "classfile/stringTable.hpp"
#include "classfile/symbolTable.hpp"
#include "classfile/systemDictionary.hpp"
#include "code/codeCache.hpp"
#include "code/icBuffer.hpp"
@@ -718,10 +718,11 @@
ClassLoaderDataGraph::resize_if_needed();
if (event.should_commit()) {
post_safepoint_cleanup_task_event(&event, name);
}
}
+
_subtasks.all_tasks_completed(_num_workers);
}
};
// Various cleaning tasks that should be done periodically at safepoints.
@@ -747,12 +748,22 @@
ParallelSPCleanupTask cleanup(1, &deflate_counters);
StrongRootsScope srs(1);
cleanup.work(0);
}
+ // Needs to be done single threaded by the VMThread. This walks
+ // the thread stacks looking for references to metadata before
+ // deciding to remove it from the metaspaces.
+ if (ClassLoaderDataGraph::should_clean_metaspaces()) {
+ const char* name = "cleanup live ClassLoaderData metaspaces";
+ TraceTime timer(name, TRACETIME_LOG(Info, safepoint, cleanup));
+ ClassLoaderDataGraph::walk_metadata_and_clean_metaspaces();
+ }
+
// Finish monitor deflation.
ObjectSynchronizer::finish_deflate_idle_monitors(&deflate_counters);
+
}
bool SafepointSynchronize::safepoint_safe(JavaThread *thread, JavaThreadState state) {
switch(state) {
< prev index next >