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

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

author
ysr
date
Thu, 20 Nov 2008 16:56:09 -0800
changeset 888
c96030fff130
parent 623
c0ecab83e6f3
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 #define VM_STRUCTS_CMS(nonstatic_field, \
coleenp@622 26 volatile_nonstatic_field, \
duke@435 27 static_field) \
duke@435 28 nonstatic_field(CompactibleFreeListSpace, _collector, CMSCollector*) \
duke@435 29 nonstatic_field(CompactibleFreeListSpace, _bt, BlockOffsetArrayNonContigSpace) \
duke@435 30 \
duke@435 31 nonstatic_field(CMSPermGen, _gen, ConcurrentMarkSweepGeneration*) \
duke@435 32 nonstatic_field(CMSBitMap, _bmStartWord, HeapWord*) \
duke@435 33 nonstatic_field(CMSBitMap, _bmWordSize, size_t) \
duke@435 34 nonstatic_field(CMSBitMap, _shifter, const int) \
duke@435 35 nonstatic_field(CMSBitMap, _bm, BitMap) \
duke@435 36 nonstatic_field(CMSBitMap, _virtual_space, VirtualSpace) \
duke@435 37 nonstatic_field(CMSCollector, _markBitMap, CMSBitMap) \
duke@435 38 nonstatic_field(ConcurrentMarkSweepGeneration, _cmsSpace, CompactibleFreeListSpace*) \
duke@435 39 static_field(ConcurrentMarkSweepThread, _collector, CMSCollector*) \
coleenp@622 40 volatile_nonstatic_field(FreeChunk, _size, size_t) \
duke@435 41 nonstatic_field(FreeChunk, _next, FreeChunk*) \
duke@435 42 nonstatic_field(FreeChunk, _prev, FreeChunk*) \
dcubed@587 43 nonstatic_field(LinearAllocBlock, _word_size, size_t) \
dcubed@587 44 nonstatic_field(FreeList, _size, size_t) \
dcubed@587 45 nonstatic_field(FreeList, _count, ssize_t) \
dcubed@587 46 nonstatic_field(BinaryTreeDictionary, _totalSize, size_t) \
dcubed@587 47 nonstatic_field(CompactibleFreeListSpace, _dictionary, FreeBlockDictionary*) \
dcubed@587 48 nonstatic_field(CompactibleFreeListSpace, _indexedFreeList[0], FreeList) \
dcubed@587 49 nonstatic_field(CompactibleFreeListSpace, _smallLinearAllocBlock, LinearAllocBlock)
dcubed@587 50
duke@435 51
duke@435 52 #define VM_TYPES_CMS(declare_type, \
duke@435 53 declare_toplevel_type) \
duke@435 54 \
duke@435 55 declare_type(ConcurrentMarkSweepGeneration,CardGeneration) \
duke@435 56 declare_type(CompactibleFreeListSpace, CompactibleSpace) \
duke@435 57 declare_type(CMSPermGenGen, ConcurrentMarkSweepGeneration) \
duke@435 58 declare_type(CMSPermGen, PermGen) \
duke@435 59 declare_type(ConcurrentMarkSweepThread, NamedThread) \
duke@435 60 declare_type(SurrogateLockerThread, JavaThread) \
duke@435 61 declare_toplevel_type(CMSCollector) \
duke@435 62 declare_toplevel_type(CMSBitMap) \
duke@435 63 declare_toplevel_type(FreeChunk) \
duke@435 64 declare_toplevel_type(ConcurrentMarkSweepThread*) \
duke@435 65 declare_toplevel_type(ConcurrentMarkSweepGeneration*) \
duke@435 66 declare_toplevel_type(SurrogateLockerThread*) \
duke@435 67 declare_toplevel_type(CompactibleFreeListSpace*) \
duke@435 68 declare_toplevel_type(CMSCollector*) \
dcubed@587 69 declare_toplevel_type(FreeChunk*) \
dcubed@587 70 declare_toplevel_type(BinaryTreeDictionary*) \
dcubed@587 71 declare_toplevel_type(FreeBlockDictionary*) \
dcubed@587 72 declare_toplevel_type(FreeList*) \
dcubed@587 73 declare_toplevel_type(FreeList) \
dcubed@587 74 declare_toplevel_type(LinearAllocBlock) \
dcubed@587 75 declare_toplevel_type(FreeBlockDictionary) \
dcubed@587 76 declare_type(BinaryTreeDictionary, FreeBlockDictionary)
duke@435 77
duke@435 78 #define VM_INT_CONSTANTS_CMS(declare_constant) \
duke@435 79 declare_constant(Generation::ConcurrentMarkSweep) \
duke@435 80 declare_constant(PermGen::ConcurrentMarkSweep)

mercurial