0N/A/*
1879N/A * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
0N/A * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
0N/A *
0N/A * This code is free software; you can redistribute it and/or modify it
0N/A * under the terms of the GNU General Public License version 2 only, as
0N/A * published by the Free Software Foundation.
0N/A *
0N/A * This code is distributed in the hope that it will be useful, but WITHOUT
0N/A * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
0N/A * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
0N/A * version 2 for more details (a copy is included in the LICENSE file that
0N/A * accompanied this code).
0N/A *
0N/A * You should have received a copy of the GNU General Public License version
0N/A * 2 along with this work; if not, write to the Free Software Foundation,
0N/A * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
0N/A *
1472N/A * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
1472N/A * or visit www.oracle.com if you need additional information or have any
1472N/A * questions.
0N/A *
0N/A */
0N/A
1879N/A#ifndef SHARE_VM_GC_IMPLEMENTATION_CONCURRENTMARKSWEEP_CMSPERMGEN_HPP
1879N/A#define SHARE_VM_GC_IMPLEMENTATION_CONCURRENTMARKSWEEP_CMSPERMGEN_HPP
1879N/A
1879N/A#include "gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.hpp"
1879N/A#include "memory/permGen.hpp"
1879N/A
0N/Aclass CardTableRS; // fwd decl
0N/Aclass ConcurrentMarkSweepGeneration;
0N/A
0N/A// A PermGen implemented with a CMS space, collected by a CMS collector.
0N/Aclass CMSPermGen: public PermGen {
0N/A friend class VMStructs;
0N/A
0N/A protected:
0N/A // The "generation" view.
0N/A ConcurrentMarkSweepGeneration* _gen;
0N/A
1759N/A // Override default implementation from PermGen
1759N/A virtual HeapWord* request_expand_and_allocate(Generation* gen, size_t size,
1759N/A GCCause::Cause prev_cause);
1759N/A
0N/A public:
0N/A CMSPermGen(ReservedSpace rs, size_t initial_byte_size,
3695N/A CardTableRS* ct, FreeBlockDictionary<FreeChunk>::DictionaryChoice);
0N/A
0N/A HeapWord* mem_allocate(size_t size);
0N/A
0N/A void compute_new_size();
0N/A
0N/A Generation* as_gen() const { return _gen; }
0N/A};
0N/A
0N/A// This is the "generation" view of a CMSPermGen.
0N/Aclass CMSPermGenGen: public ConcurrentMarkSweepGeneration {
0N/A // Abstractly, this is a subtype that gets access to protected fields.
0N/A friend class CMSPermGen;
0N/Apublic:
0N/A CMSPermGenGen(ReservedSpace rs, size_t initial_byte_size,
0N/A int level, CardTableRS* ct):
0N/A // See comments in the constructor for CompactibleFreeListSpace
0N/A // regarding not using adaptive free lists for a perm gen.
0N/A ConcurrentMarkSweepGeneration(rs, initial_byte_size, // MinPermHeapExapnsion
0N/A level, ct, false /* use adaptive freelists */,
3695N/A (FreeBlockDictionary<FreeChunk>::DictionaryChoice)CMSDictionaryChoice)
0N/A {}
0N/A
0N/A void initialize_performance_counters();
0N/A
0N/A const char* name() const {
0N/A return "concurrent-mark-sweep perm gen";
0N/A }
0N/A
0N/A const char* short_name() const {
0N/A return "CMS Perm";
0N/A }
0N/A
0N/A bool must_be_youngest() const { return false; }
0N/A bool must_be_oldest() const { return false; }
0N/A};
1879N/A
1879N/A#endif // SHARE_VM_GC_IMPLEMENTATION_CONCURRENTMARKSWEEP_CMSPERMGEN_HPP