comparison src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.cpp @ 2177:3582bf76420e

6990754: Use native memory and reference counting to implement SymbolTable Summary: move symbols from permgen into C heap and reference count them Reviewed-by: never, acorn, jmasa, stefank
author coleenp
date Thu, 27 Jan 2011 16:11:27 -0800
parents 9afee0b9fc1d
children 92da084fefc9
comparison
equal deleted inserted replaced
2176:27e4ea99855d 2177:3582bf76420e
2373 q->enqueue(new MarkFromRootsTask(MarkFromRootsTask::object_synchronizer)); 2373 q->enqueue(new MarkFromRootsTask(MarkFromRootsTask::object_synchronizer));
2374 q->enqueue(new MarkFromRootsTask(MarkFromRootsTask::flat_profiler)); 2374 q->enqueue(new MarkFromRootsTask(MarkFromRootsTask::flat_profiler));
2375 q->enqueue(new MarkFromRootsTask(MarkFromRootsTask::management)); 2375 q->enqueue(new MarkFromRootsTask(MarkFromRootsTask::management));
2376 q->enqueue(new MarkFromRootsTask(MarkFromRootsTask::system_dictionary)); 2376 q->enqueue(new MarkFromRootsTask(MarkFromRootsTask::system_dictionary));
2377 q->enqueue(new MarkFromRootsTask(MarkFromRootsTask::jvmti)); 2377 q->enqueue(new MarkFromRootsTask(MarkFromRootsTask::jvmti));
2378 q->enqueue(new MarkFromRootsTask(MarkFromRootsTask::vm_symbols));
2379 q->enqueue(new MarkFromRootsTask(MarkFromRootsTask::code_cache)); 2378 q->enqueue(new MarkFromRootsTask(MarkFromRootsTask::code_cache));
2380 2379
2381 if (parallel_gc_threads > 1) { 2380 if (parallel_gc_threads > 1) {
2382 for (uint j = 0; j < parallel_gc_threads; j++) { 2381 for (uint j = 0; j < parallel_gc_threads; j++) {
2383 q->enqueue(new StealMarkingTask(&terminator)); 2382 q->enqueue(new StealMarkingTask(&terminator));
2423 follow_weak_klass_links(); 2422 follow_weak_klass_links();
2424 2423
2425 // Revisit memoized MDO's and clear any unmarked weak refs 2424 // Revisit memoized MDO's and clear any unmarked weak refs
2426 follow_mdo_weak_refs(); 2425 follow_mdo_weak_refs();
2427 2426
2428 // Visit symbol and interned string tables and delete unmarked oops 2427 // Visit interned string tables and delete unmarked oops
2429 SymbolTable::unlink(is_alive_closure());
2430 StringTable::unlink(is_alive_closure()); 2428 StringTable::unlink(is_alive_closure());
2429 // Clean up unreferenced symbols in symbol table.
2430 SymbolTable::unlink();
2431 2431
2432 assert(cm->marking_stacks_empty(), "marking stacks should be empty"); 2432 assert(cm->marking_stacks_empty(), "marking stacks should be empty");
2433 } 2433 }
2434 2434
2435 // This should be moved to the shared markSweep code! 2435 // This should be moved to the shared markSweep code!
2454 FlatProfiler::oops_do(adjust_root_pointer_closure()); 2454 FlatProfiler::oops_do(adjust_root_pointer_closure());
2455 Management::oops_do(adjust_root_pointer_closure()); 2455 Management::oops_do(adjust_root_pointer_closure());
2456 JvmtiExport::oops_do(adjust_root_pointer_closure()); 2456 JvmtiExport::oops_do(adjust_root_pointer_closure());
2457 // SO_AllClasses 2457 // SO_AllClasses
2458 SystemDictionary::oops_do(adjust_root_pointer_closure()); 2458 SystemDictionary::oops_do(adjust_root_pointer_closure());
2459 vmSymbols::oops_do(adjust_root_pointer_closure());
2460 2459
2461 // Now adjust pointers in remaining weak roots. (All of which should 2460 // Now adjust pointers in remaining weak roots. (All of which should
2462 // have been cleared if they pointed to non-surviving objects.) 2461 // have been cleared if they pointed to non-surviving objects.)
2463 // Global (weak) JNI handles 2462 // Global (weak) JNI handles
2464 JNIHandles::weak_oops_do(&always_true, adjust_root_pointer_closure()); 2463 JNIHandles::weak_oops_do(&always_true, adjust_root_pointer_closure());
2465 2464
2466 CodeCache::oops_do(adjust_pointer_closure()); 2465 CodeCache::oops_do(adjust_pointer_closure());
2467 SymbolTable::oops_do(adjust_root_pointer_closure());
2468 StringTable::oops_do(adjust_root_pointer_closure()); 2466 StringTable::oops_do(adjust_root_pointer_closure());
2469 ref_processor()->weak_oops_do(adjust_root_pointer_closure()); 2467 ref_processor()->weak_oops_do(adjust_root_pointer_closure());
2470 // Roots were visited so references into the young gen in roots 2468 // Roots were visited so references into the young gen in roots
2471 // may have been scanned. Process them also. 2469 // may have been scanned. Process them also.
2472 // Should the reference processor have a span that excludes 2470 // Should the reference processor have a span that excludes