Index: vm/vmcore/include/classloader.h
===================================================================
--- vm/vmcore/include/classloader.h (revision 518867)
+++ vm/vmcore/include/classloader.h (working copy)
@@ -155,8 +155,8 @@
public:
ClassLoader() : m_loader(NULL), m_parent(NULL), m_name(NULL), m_package_table(NULL),
m_loadedClasses(NULL), m_loadingClasses(NULL), m_reportedClasses(NULL),
- m_javaTypes(NULL), m_nativeLibraries(NULL), m_markBit(0),
- m_unloading(false), m_fullSize(0), m_verifyData(NULL)
+ m_javaTypes(NULL), m_nativeLibraries(NULL), m_markBit(false),
+ m_fullSize(0), m_verifyData(NULL)
{
apr_pool_create(&pool, 0);
}
@@ -230,8 +230,6 @@
static void UnloadClassLoader( ManagedObject* loader );
static void gc_enumerate();
static void ClearMarkBits();
- static void StartUnloading();
- static void PrintUnloadingStats();
static unsigned GetClassLoaderNumber() { return m_nextEntry; }
static ClassLoader** GetClassLoaderTable() { return m_table; }
static void DeleteClassLoaderTable(){
@@ -280,8 +278,7 @@
NativeLibraryList m_nativeLibraries;
Lock_Manager m_lock;
Lock_Manager m_types_cache_lock;
- unsigned m_markBit:1;
- unsigned m_unloading;
+ bool m_markBit;
unsigned m_fullSize;
void* m_verifyData;
apr_pool_t* pool;
Index: vm/vmcore/include/Class.h
===================================================================
--- vm/vmcore/include/Class.h (revision 518867)
+++ vm/vmcore/include/Class.h (working copy)
@@ -1021,9 +1021,6 @@
// SourceDebugExtension class attribute support
String* m_sourceDebugExtension;
- // struct Class accessibility for unloading
- unsigned m_markBit:1;
-
// verifier private data pointer
void* m_verify_data;
@@ -1750,20 +1747,6 @@
return m_sourceDebugExtension->bytes;
}
- // Class unloading support
-
- /** Checks whether the given class is reachable through its loader
- * or any live object.
- * @return true if the given class is reachable,
- * otherwise false.*/
- bool is_reachable() { return m_markBit == 1; }
-
- /** Clears a reachability mark.*/
- void reset_reachable() { m_markBit = 0; }
-
- /** Marks the given class as reachable.*/
- void mark_reachable() { m_markBit = 1; }
-
/** Stores a verifier specific pointer into the given class.
* @param[in] data - a verifier specific data pointer*/
void set_verification_data(void* data) {
Index: vm/vmcore/include/unloading.h
===================================================================
--- vm/vmcore/include/unloading.h (revision 518867)
+++ vm/vmcore/include/unloading.h (working copy)
@@ -23,7 +23,6 @@
#define __UNLOADING_H__
void class_unloading_clear_mark_bits();
-void class_unloading_start();
#endif
Index: vm/vmcore/src/gc/stop_the_world_root_set_enum.cpp
===================================================================
--- vm/vmcore/src/gc/stop_the_world_root_set_enum.cpp (revision 518867)
+++ vm/vmcore/src/gc/stop_the_world_root_set_enum.cpp (working copy)
@@ -163,8 +163,6 @@
assert(p_the_safepoint_control_thread == p_TLS_vmthread);
p_the_safepoint_control_thread = 0;
- class_unloading_start();
-
jvmti_send_gc_finish_event();
jvmti_clean_reclaimed_object_tags();
Index: vm/vmcore/src/class_support/Class.cpp
===================================================================
--- vm/vmcore/src/class_support/Class.cpp (revision 518867)
+++ vm/vmcore/src/class_support/Class.cpp (working copy)
@@ -141,7 +141,6 @@
m_sourceDebugExtension = NULL;
m_lock = new Lock_Manager();
- m_markBit = 0;
m_verify_data = 0;
}
@@ -922,17 +921,6 @@
}
-static void mark_classloader(ClassLoader* cl)
-{
- if(cl->GetLoader() && cl->NotMarked()) {
- TRACE2("classloader.unloading.markloader", " Marking loader "
- << cl << " (" << (void*)cl->GetLoader() << " : "
- << cl->GetLoader()->vt()->clss->get_name()->bytes << ")");
- cl->Mark();
- }
-}
-
-
// end pointers between struct Class and java.lang.Class
////////////////////////////////////////////////////////////////////
Index: vm/vmcore/src/class_support/classloader.cpp
===================================================================
--- vm/vmcore/src/class_support/classloader.cpp (revision 518867)
+++ vm/vmcore/src/class_support/classloader.cpp (working copy)
@@ -491,97 +491,16 @@
ClassTable::iterator cti;
unsigned i;
for(i = 0; i < m_nextEntry; i++) {
- if(m_table[i]->m_unloading) {
- TRACE2("classloader.unloading.debug", " Skipping \"unloaded\" classloader "
- << m_table[i] << " (" << m_table[i]->m_loader << " : "
- << ((VTable*)(*(unsigned**)(m_table[i]->m_loader)))->clss->get_name()->bytes << ")");
- continue;
- }
- TRACE2("classloader.unloading.debug", " Clearing mark bits in classloader "
+ TRACE2("classloader.unloading.debug", " Clearing mark bits in classloaders "
<< m_table[i] << " (" << m_table[i]->m_loader << " : "
- << ((VTable*)(*(unsigned**)(m_table[i]->m_loader)))->clss->get_name()->bytes << ") and its classes");
+ << m_table[i]->m_loader->vt_unsafe()->clss->get_name()->bytes << ") and its classes");
// clear mark bits in loader and classes
m_table[i]->m_markBit = 0;
- for(cti = m_table[i]->m_loadedClasses->begin();
- cti != m_table[i]->m_loadedClasses->end(); cti++)
- {
- if(cti->second->get_class_loader() == m_table[i]) {
- cti->second->reset_reachable();
- }
- }
}
TRACE2("classloader.unloading.clear", "Finished clearing mark bits");
- TRACE2("classloader.unloading.marking", "Starting mark loaders");
}
-void ClassLoader::StartUnloading()
-{
- TRACE2("classloader.unloading.marking", "Finished marking loaders");
- TRACE2("classloader.unloading.do", "Start checking loaders ready to be unloaded");
- LMAutoUnlock aulock( &(ClassLoader::m_tableLock) );
- unsigned i;
- for(i = 0; i < m_nextEntry; i++) {
- if(m_table[i]->m_unloading) {
- TRACE2("classloader.unloading.debug", " Skipping \"unloaded\" classloader "
- << m_table[i] << " (" << m_table[i]->m_loader << " : "
- << ((VTable*)(*(unsigned**)(m_table[i]->m_loader)))->clss->get_name()->bytes << ")");
- continue;
- }
- TRACE2("classloader.unloading.debug", " Scanning loader "
- << m_table[i] << " (" << m_table[i]->m_loader << " : "
- << ((VTable*)(*(unsigned**)(m_table[i]->m_loader)))->clss->get_name()->bytes << ")");
- if(!m_table[i]->m_markBit) {
- TRACE2("classloader.unloading.stats", " (!) Ready to unload classloader "
- << m_table[i] << " (" << m_table[i]->m_loader << " : "
- << ((VTable*)(*(unsigned**)(m_table[i]->m_loader)))->clss->get_name()->bytes << ")");
- TRACE2("classloader.unloading.stats", " (!) This will free "
- << m_table[i]->GetFullSize() << " bytes in C heap");
- m_table[i]->m_unloading = true;
- m_unloadedBytes += m_table[i]->GetFullSize();
- }
- }
- TRACE2("classloader.unloading.do", "Finished checking loaders");
-}
-
-
-void ClassLoader::PrintUnloadingStats()
-{
- unsigned i;
- TRACE2("classloader.unloading.stats", "----------------------------------------------");
- TRACE2("classloader.unloading.stats", "Class unloading statistics:");
- hythread_suspend_disable();
- for(i = 0; i < m_nextEntry; i++) {
- if(m_table[i]->m_unloading) {
- TRACE2("classloader.unloading.stats", " Class loader "
- << m_table[i] << " (" << m_table[i]->m_loader << " : "
- << ((VTable*)(*(unsigned**)(m_table[i]->m_loader)))->clss->get_name()->bytes
- << ") contains " << m_table[i]->GetFullSize() << " bytes in C heap");
- }
- }
- hythread_suspend_enable();
- TRACE2("classloader.unloading.stats", "A total of "
- << m_unloadedBytes << " bytes would be freed in C heap for this scenario");
- TRACE2("classloader.unloading.stats", "----------------------------------------------");
-}
-
-
-void vm_classloader_iterate_objects(void *iterator) {
-
- // skip the object iteration if it is not needed
- // (logging is not enabled and
- // class unloading is not yet implemented).
- if (!is_info_enabled("class_unload")) return;
-
- Managed_Object_Handle obj;
- int nobjects = 0;
- while((obj = gc_get_next_live_object(iterator))) {
- nobjects++;
- }
- INFO2("class_unload", "classloader_iterate_objects " << nobjects << " iterated");
-}
-
-
ClassLoader* ClassLoader::AddClassLoader( ManagedObject* loader )
{
SuspendDisabledChecker sdc;
@@ -1115,10 +1034,6 @@
ClassLoader::ClearMarkBits();
}
-void class_unloading_start() {
- ClassLoader::StartUnloading();
-}
-
inline void
BootstrapClassLoader::SetClasspathFromString(char* bcp,
apr_pool_t* tmp_pool)
Index: vm/vmcore/src/init/vm_shutdown.cpp
===================================================================
--- vm/vmcore/src/init/vm_shutdown.cpp (revision 518867)
+++ vm/vmcore/src/init/vm_shutdown.cpp (working copy)
@@ -172,7 +172,6 @@
// Print out gathered data.
#ifdef VM_STATS
- ClassLoader::PrintUnloadingStats();
VM_Statistics::get_vm_stats().print();
#endif