hotspot/src/share/vm/memory/genCollectedHeap.hpp

Print this page
rev 611 : Merge

*** 1,10 **** #ifdef USE_PRAGMA_IDENT_HDR #pragma ident "@(#)genCollectedHeap.hpp 1.106 07/07/22 22:36:34 JVM" #endif /* ! * Copyright 2000-2007 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. --- 1,10 ---- #ifdef USE_PRAGMA_IDENT_HDR #pragma ident "@(#)genCollectedHeap.hpp 1.106 07/07/22 22:36:34 JVM" #endif /* ! * Copyright 2000-2008 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation.
*** 36,45 **** --- 36,46 ---- friend class TenuredGeneration; friend class ConcurrentMarkSweepGeneration; 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; friend class VM_HeapDumper; friend class HeapInspection;
*** 252,268 **** --- 253,287 ---- virtual bool supports_tlab_allocation() const; virtual size_t tlab_capacity(Thread* thr) const; virtual size_t unsafe_max_tlab_alloc(Thread* thr) const; virtual HeapWord* allocate_new_tlab(size_t size); + // Can a compiler initialize a new object without store barriers? + // This permission only extends from the creation of a new object + // via a TLAB up to the first subsequent safepoint. + virtual bool can_elide_tlab_store_barriers() const { + return true; + } + + // 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 // older generation (via promotion say.) Any blocks of space that can // be provided are returned as a list of ScratchBlocks, sorted by // decreasing size. ScratchBlock* gather_scratch(Generation* requestor, size_t max_alloc_words); + // Allow each generation to reset any scratch space that it has + // contributed as it needs. + void release_scratch(); size_t large_typearray_limit(); // Ensure parsability: override virtual void ensure_parsability(bool retire_tlabs);
*** 453,464 **** // 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. oop handle_failed_promotion(Generation* gen, oop obj, ! size_t obj_size, ! oop* ref); private: // Accessor for memory state verification support NOT_PRODUCT( static size_t skip_header_HeapWords() { return _skip_header_HeapWords; } --- 472,482 ---- // 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. oop handle_failed_promotion(Generation* gen, oop obj, ! size_t obj_size); private: // Accessor for memory state verification support NOT_PRODUCT( static size_t skip_header_HeapWords() { return _skip_header_HeapWords; }
*** 483,492 **** --- 501,513 ---- // In support of ExplicitGCInvokesConcurrent functionality bool should_do_concurrent_full_gc(GCCause::Cause cause); void collect_mostly_concurrent(GCCause::Cause cause); + // Save the tops of the spaces in all generations + void record_gen_tops_before_GC() PRODUCT_RETURN; + protected: virtual void gc_prologue(bool full); virtual void gc_epilogue(bool full); public: