diff -r caf5eb7dd4a7 -r 882756847a04 hotspot/src/share/vm/memory/genCollectedHeap.hpp --- a/hotspot/src/share/vm/memory/genCollectedHeap.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/hotspot/src/share/vm/memory/genCollectedHeap.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -43,7 +43,6 @@ friend class CMSCollector; friend class GenMarkSweep; friend class VM_GenCollectForAllocation; - friend class VM_GenCollectForPermanentAllocation; friend class VM_GenCollectFull; friend class VM_GenCollectFullConcurrent; friend class VM_GC_HeapInspection; @@ -86,10 +85,6 @@ // In block contents verification, the number of header words to skip NOT_PRODUCT(static size_t _skip_header_HeapWords;) - // GC is not allowed during the dump of the shared classes. Keep track - // of this in order to provide an reasonable error message when terminating. - bool _preloading_shared_classes; - protected: // Directs each generation up to and including "collectedGen" to recompute // its desired size. @@ -116,6 +111,7 @@ // Callback from VM_GenCollectFull operation. // Perform a full collection of the first max_level+1 generations. + virtual void do_full_collection(bool clear_all_soft_refs); void do_full_collection(bool clear_all_soft_refs, int max_level); // Does the "cause" of GC indicate that @@ -129,7 +125,7 @@ // Returns JNI_OK on success virtual jint initialize(); - char* allocate(size_t alignment, PermanentGenerationSpec* perm_gen_spec, + char* allocate(size_t alignment, size_t* _total_reserved, int* _n_covered_regions, ReservedSpace* heap_rs); @@ -145,6 +141,7 @@ // The generational collector policy. GenCollectorPolicy* gen_policy() const { return _gen_policy; } + virtual CollectorPolicy* collector_policy() const { return (CollectorPolicy*) gen_policy(); } // Adaptive size policy virtual AdaptiveSizePolicy* size_policy() { @@ -154,9 +151,8 @@ size_t capacity() const; size_t used() const; - // Save the "used_region" for generations level and lower, - // and, if perm is true, for perm gen. - void save_used_regions(int level, bool perm); + // Save the "used_region" for generations level and lower. + void save_used_regions(int level); size_t max_capacity() const; @@ -185,12 +181,6 @@ // supports. Caller does not hold the Heap_lock on entry. void collect(GCCause::Cause cause); - // This interface assumes that it's being called by the - // vm thread. It collects the heap assuming that the - // heap lock is already held and that we are executing in - // the context of the vm thread. - void collect_as_vm_thread(GCCause::Cause cause); - // The same as above but assume that the caller holds the Heap_lock. void collect_locked(GCCause::Cause cause); @@ -228,8 +218,8 @@ } // Iteration functions. - void oop_iterate(OopClosure* cl); - void oop_iterate(MemRegion mr, OopClosure* cl); + void oop_iterate(ExtendedOopClosure* cl); + void oop_iterate(MemRegion mr, ExtendedOopClosure* cl); void object_iterate(ObjectClosure* cl); void safe_object_iterate(ObjectClosure* cl); void object_iterate_since_last_GC(ObjectClosure* cl); @@ -294,14 +284,6 @@ return is_in_young(new_obj); } - // Can a compiler elide a store barrier when it writes - // a permanent oop into the heap? Applies when the compiler - // is storing x to the heap, where x->is_perm() is true. - virtual bool can_elide_permanent_oop_store_barriers() const { - // CMS needs to see all, even intra-generational, ref updates. - return !UseConcMarkSweepGC; - } - // The "requestor" generation is performing some garbage collection // action for which it would be useful to have scratch space. The // requestor promises to allocate no more than "max_alloc_words" in any @@ -338,7 +320,6 @@ for (int i = 0; i < _n_gens; i++) { _gens[i]->update_time_of_last_gc(now); } - perm_gen()->update_time_of_last_gc(now); } // Update the gc statistics for each generation. @@ -347,7 +328,6 @@ for (int i = 0; i < _n_gens; i++) { _gens[i]->update_gc_stats(current_level, full); } - perm_gen()->update_gc_stats(current_level, full); } // Override. @@ -367,7 +347,6 @@ // PrintGC, PrintGCDetails support void print_heap_change(size_t prev_used) const; - void print_perm_heap_change(size_t perm_prev_used) const; // The functions below are helper functions that a subclass of // "CollectedHeap" can use in the implementation of its virtual @@ -378,13 +357,13 @@ virtual void do_generation(Generation* gen) = 0; }; - // Apply "cl.do_generation" to all generations in the heap (not including - // the permanent generation). If "old_to_young" determines the order. + // Apply "cl.do_generation" to all generations in the heap + // If "old_to_young" determines the order. void generation_iterate(GenClosure* cl, bool old_to_young); void space_iterate(SpaceClosure* cl); - // Return "true" if all generations (but perm) have reached the + // Return "true" if all generations have reached the // maximal committed limit that they can reach, without a garbage // collection. virtual bool is_maximal_no_gc() const; @@ -429,10 +408,8 @@ // not scanned as roots; in this case, the caller must be arranging to // scan the younger generations itself. (For example, a generation might // explicitly mark reachable objects in younger generations, to avoid - // excess storage retention.) If "collecting_perm_gen" is false, then - // roots that may only contain references to permGen objects are not - // scanned; instead, the older_gens closure is applied to all outgoing - // references in the perm gen. The "so" argument determines which of the roots + // excess storage retention.) + // The "so" argument determines which of the roots // the closure is applied to: // "SO_None" does none; // "SO_AllClasses" applies the closure to all entries in the SystemDictionary; @@ -443,11 +420,12 @@ // The remaining arguments are in an order // consistent with SharedHeap::process_strong_roots: bool activate_scope, - bool collecting_perm_gen, + bool is_scavenging, SharedHeap::ScanningOption so, OopsInGenClosure* not_older_gens, bool do_code_roots, - OopsInGenClosure* older_gens); + OopsInGenClosure* older_gens, + KlassClosure* klass_closure); // Apply "blk" to all the weak roots of the system. These include // JNI weak roots, the code cache, system dictionary, symbol table, @@ -463,9 +441,9 @@ // Apply "cur->do_oop" or "older->do_oop" to all the oops in objects // allocated since the last call to save_marks in generations at or above - // "level" (including the permanent generation.) The "cur" closure is + // "level". The "cur" closure is // applied to references in the generation at "level", and the "older" - // closure to older (and permanent) generations. + // closure to older generations. #define GCH_SINCE_SAVE_MARKS_ITERATE_DECL(OopClosureType, nv_suffix) \ void oop_since_save_marks_iterate(int level, \ OopClosureType* cur, \ @@ -476,7 +454,7 @@ #undef GCH_SINCE_SAVE_MARKS_ITERATE_DECL // Returns "true" iff no allocations have occurred in any generation at - // "level" or above (including the permanent generation) since the last + // "level" or above since the last // call to "save_marks". bool no_allocs_since_save_marks(int level); @@ -506,7 +484,7 @@ _incremental_collection_failed = false; } - // Promotion of obj into gen failed. Try to promote obj to higher non-perm + // Promotion of obj into gen failed. Try to promote obj to higher // gens in ascending order; return the new location of obj if successful. // Otherwise, try expand-and-allocate for obj in each generation starting at // gen; return the new location of obj if successful. Otherwise, return NULL. @@ -547,9 +525,6 @@ protected: virtual void gc_prologue(bool full); virtual void gc_epilogue(bool full); - -public: - virtual void preload_and_dump(TRAPS) KERNEL_RETURN; }; #endif // SHARE_VM_MEMORY_GENCOLLECTEDHEAP_HPP