1861 // TODO: just return if !unloading_occurred.
1862 if (unloading_occurred) {
1863 {
1864 GCTraceTime(Debug, gc, phases) t("SymbolTable", gc_timer);
1865 // Check if there's work to do in the SymbolTable
1866 SymbolTable::do_check_concurrent_work();
1867 }
1868
1869 {
1870 GCTraceTime(Debug, gc, phases) t("Dictionary", gc_timer);
1871 constraints()->purge_loader_constraints();
1872 resolution_errors()->purge_resolution_errors();
1873 }
1874 }
1875
1876 {
1877 GCTraceTime(Debug, gc, phases) t("ProtectionDomainCacheTable", gc_timer);
1878 // Oops referenced by the protection domain cache table may get unreachable independently
1879 // of the class loader (eg. cached protection domain oops). So we need to
1880 // explicitly unlink them here.
1881 _pd_cache_table->unlink();
1882 }
1883
1884 if (do_cleaning) {
1885 GCTraceTime(Debug, gc, phases) t("ResolvedMethodTable", gc_timer);
1886 ResolvedMethodTable::trigger_cleanup();
1887 }
1888
1889 return unloading_occurred;
1890 }
1891
1892 void SystemDictionary::oops_do(OopClosure* f) {
1893 f->do_oop(&_java_system_loader);
1894 f->do_oop(&_java_platform_loader);
1895 f->do_oop(&_system_loader_lock_obj);
1896 CDS_ONLY(SystemDictionaryShared::oops_do(f);)
1897
1898 // Visit extra methods
1899 invoke_method_table()->oops_do(f);
1900 }
1901
|
1861 // TODO: just return if !unloading_occurred.
1862 if (unloading_occurred) {
1863 {
1864 GCTraceTime(Debug, gc, phases) t("SymbolTable", gc_timer);
1865 // Check if there's work to do in the SymbolTable
1866 SymbolTable::do_check_concurrent_work();
1867 }
1868
1869 {
1870 GCTraceTime(Debug, gc, phases) t("Dictionary", gc_timer);
1871 constraints()->purge_loader_constraints();
1872 resolution_errors()->purge_resolution_errors();
1873 }
1874 }
1875
1876 {
1877 GCTraceTime(Debug, gc, phases) t("ProtectionDomainCacheTable", gc_timer);
1878 // Oops referenced by the protection domain cache table may get unreachable independently
1879 // of the class loader (eg. cached protection domain oops). So we need to
1880 // explicitly unlink them here.
1881 _pd_cache_table->trigger_cleanup();
1882 }
1883
1884 if (do_cleaning) {
1885 GCTraceTime(Debug, gc, phases) t("ResolvedMethodTable", gc_timer);
1886 ResolvedMethodTable::trigger_cleanup();
1887 }
1888
1889 return unloading_occurred;
1890 }
1891
1892 void SystemDictionary::oops_do(OopClosure* f) {
1893 f->do_oop(&_java_system_loader);
1894 f->do_oop(&_java_platform_loader);
1895 f->do_oop(&_system_loader_lock_obj);
1896 CDS_ONLY(SystemDictionaryShared::oops_do(f);)
1897
1898 // Visit extra methods
1899 invoke_method_table()->oops_do(f);
1900 }
1901
|