src/share/vm/gc_implementation/concurrentMarkSweep/cmsPermGen.hpp

Thu, 20 Nov 2008 16:56:09 -0800

author
ysr
date
Thu, 20 Nov 2008 16:56:09 -0800
changeset 888
c96030fff130
parent 574
c0492d52d55b
child 1907
c18cbe5936b8
permissions
-rw-r--r--

6684579: SoftReference processing can be made more efficient
Summary: For current soft-ref clearing policies, we can decide at marking time if a soft-reference will definitely not be cleared, postponing the decision of whether it will definitely be cleared to the final reference processing phase. This can be especially beneficial in the case of concurrent collectors where the marking is usually concurrent but reference processing is usually not.
Reviewed-by: jmasa

duke@435 1 /*
duke@435 2 * Copyright (c) 2007 Sun Microsystems, Inc. All Rights Reserved.
duke@435 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
duke@435 4 *
duke@435 5 * This code is free software; you can redistribute it and/or modify it
duke@435 6 * under the terms of the GNU General Public License version 2 only, as
duke@435 7 * published by the Free Software Foundation.
duke@435 8 *
duke@435 9 * This code is distributed in the hope that it will be useful, but WITHOUT
duke@435 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
duke@435 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
duke@435 12 * version 2 for more details (a copy is included in the LICENSE file that
duke@435 13 * accompanied this code).
duke@435 14 *
duke@435 15 * You should have received a copy of the GNU General Public License version
duke@435 16 * 2 along with this work; if not, write to the Free Software Foundation,
duke@435 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
duke@435 18 *
duke@435 19 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
duke@435 20 * CA 95054 USA or visit www.sun.com if you need additional information or
duke@435 21 * have any questions.
duke@435 22 *
duke@435 23 */
duke@435 24
duke@435 25 class CardTableRS; // fwd decl
duke@435 26 class ConcurrentMarkSweepGeneration;
duke@435 27
duke@435 28 // A PermGen implemented with a CMS space, collected by a CMS collector.
duke@435 29 class CMSPermGen: public PermGen {
duke@435 30 friend class VMStructs;
duke@435 31
duke@435 32 protected:
duke@435 33 // The "generation" view.
duke@435 34 ConcurrentMarkSweepGeneration* _gen;
duke@435 35
duke@435 36 public:
duke@435 37 CMSPermGen(ReservedSpace rs, size_t initial_byte_size,
duke@435 38 CardTableRS* ct, FreeBlockDictionary::DictionaryChoice);
duke@435 39
duke@435 40 HeapWord* mem_allocate(size_t size);
duke@435 41
duke@435 42 void compute_new_size();
duke@435 43
duke@435 44 Generation* as_gen() const { return _gen; }
duke@435 45 };
duke@435 46
duke@435 47 // This is the "generation" view of a CMSPermGen.
duke@435 48 class CMSPermGenGen: public ConcurrentMarkSweepGeneration {
duke@435 49 // Abstractly, this is a subtype that gets access to protected fields.
duke@435 50 friend class CMSPermGen;
duke@435 51 public:
duke@435 52 CMSPermGenGen(ReservedSpace rs, size_t initial_byte_size,
duke@435 53 int level, CardTableRS* ct):
duke@435 54 // See comments in the constructor for CompactibleFreeListSpace
duke@435 55 // regarding not using adaptive free lists for a perm gen.
duke@435 56 ConcurrentMarkSweepGeneration(rs, initial_byte_size, // MinPermHeapExapnsion
duke@435 57 level, ct, false /* use adaptive freelists */,
duke@435 58 (FreeBlockDictionary::DictionaryChoice)CMSDictionaryChoice)
duke@435 59 {}
duke@435 60
duke@435 61 void initialize_performance_counters();
duke@435 62
duke@435 63 const char* name() const {
duke@435 64 return "concurrent-mark-sweep perm gen";
duke@435 65 }
duke@435 66
duke@435 67 const char* short_name() const {
duke@435 68 return "CMS Perm";
duke@435 69 }
duke@435 70
duke@435 71 bool must_be_youngest() const { return false; }
duke@435 72 bool must_be_oldest() const { return false; }
duke@435 73 };

mercurial