src/share/vm/gc_implementation/parallelScavenge/psMarkSweep.hpp

Sat, 01 Sep 2012 13:25:18 -0400

author
coleenp
date
Sat, 01 Sep 2012 13:25:18 -0400
changeset 4037
da91efe96a93
parent 3540
ab4422d0ed59
child 5011
a08c80e9e1e5
permissions
-rw-r--r--

6964458: Reimplement class meta-data storage to use native memory
Summary: Remove PermGen, allocate meta-data in metaspace linked to class loaders, rewrite GC walking, rewrite and rename metadata to be C++ classes
Reviewed-by: jmasa, stefank, never, coleenp, kvn, brutisso, mgerdin, dholmes, jrose, twisti, roland
Contributed-by: jmasa <jon.masamitsu@oracle.com>, stefank <stefan.karlsson@oracle.com>, mgerdin <mikael.gerdin@oracle.com>, never <tom.rodriguez@oracle.com>

duke@435 1 /*
jcoomes@3540 2 * Copyright (c) 2001, 2012, Oracle and/or its affiliates. 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 *
trims@1907 19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
trims@1907 20 * or visit www.oracle.com if you need additional information or have any
trims@1907 21 * questions.
duke@435 22 *
duke@435 23 */
duke@435 24
stefank@2314 25 #ifndef SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_PSMARKSWEEP_HPP
stefank@2314 26 #define SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_PSMARKSWEEP_HPP
stefank@2314 27
stefank@2314 28 #include "gc_implementation/shared/collectorCounters.hpp"
stefank@2314 29 #include "gc_implementation/shared/markSweep.inline.hpp"
stefank@2314 30 #include "utilities/stack.hpp"
stefank@2314 31
duke@435 32 class PSAdaptiveSizePolicy;
duke@435 33 class PSYoungGen;
duke@435 34 class PSOldGen;
duke@435 35
duke@435 36 class PSMarkSweep : public MarkSweep {
duke@435 37 private:
duke@435 38 static elapsedTimer _accumulated_time;
duke@435 39 static jlong _time_of_last_gc; // ms
duke@435 40 static CollectorCounters* _counters;
duke@435 41
duke@435 42 // Closure accessors
duke@435 43 static OopClosure* mark_and_push_closure() { return &MarkSweep::mark_and_push_closure; }
coleenp@4037 44 static KlassClosure* follow_klass_closure() { return &MarkSweep::follow_klass_closure; }
duke@435 45 static VoidClosure* follow_stack_closure() { return (VoidClosure*)&MarkSweep::follow_stack_closure; }
duke@435 46 static OopClosure* adjust_pointer_closure() { return (OopClosure*)&MarkSweep::adjust_pointer_closure; }
duke@435 47 static OopClosure* adjust_root_pointer_closure() { return (OopClosure*)&MarkSweep::adjust_root_pointer_closure; }
coleenp@4037 48 static KlassClosure* adjust_klass_closure() { return &MarkSweep::adjust_klass_closure; }
duke@435 49 static BoolObjectClosure* is_alive_closure() { return (BoolObjectClosure*)&MarkSweep::is_alive; }
duke@435 50
duke@435 51 debug_only(public:) // Used for PSParallelCompact debugging
duke@435 52 // Mark live objects
duke@435 53 static void mark_sweep_phase1(bool clear_all_softrefs);
duke@435 54 // Calculate new addresses
duke@435 55 static void mark_sweep_phase2();
duke@435 56 debug_only(private:) // End used for PSParallelCompact debugging
duke@435 57 // Update pointers
duke@435 58 static void mark_sweep_phase3();
duke@435 59 // Move objects to new positions
duke@435 60 static void mark_sweep_phase4();
duke@435 61
duke@435 62 debug_only(public:) // Used for PSParallelCompact debugging
duke@435 63 // Temporary data structures for traversal and storing/restoring marks
duke@435 64 static void allocate_stacks();
duke@435 65 static void deallocate_stacks();
duke@435 66 static void set_ref_processor(ReferenceProcessor* rp) { // delete this method
duke@435 67 _ref_processor = rp;
duke@435 68 }
duke@435 69 debug_only(private:) // End used for PSParallelCompact debugging
duke@435 70
duke@435 71 // If objects are left in eden after a collection, try to move the boundary
duke@435 72 // and absorb them into the old gen. Returns true if eden was emptied.
duke@435 73 static bool absorb_live_data_from_eden(PSAdaptiveSizePolicy* size_policy,
duke@435 74 PSYoungGen* young_gen,
duke@435 75 PSOldGen* old_gen);
duke@435 76
duke@435 77 // Reset time since last full gc
duke@435 78 static void reset_millis_since_last_gc();
duke@435 79
duke@435 80 public:
duke@435 81 static void invoke(bool clear_all_softrefs);
jcoomes@3540 82 static bool invoke_no_policy(bool clear_all_softrefs);
duke@435 83
duke@435 84 static void initialize();
duke@435 85
duke@435 86 // Public accessors
duke@435 87 static elapsedTimer* accumulated_time() { return &_accumulated_time; }
duke@435 88 static CollectorCounters* counters() { return _counters; }
duke@435 89
duke@435 90 // Time since last full gc (in milliseconds)
duke@435 91 static jlong millis_since_last_gc();
duke@435 92 };
stefank@2314 93
stefank@2314 94 #endif // SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_PSMARKSWEEP_HPP

mercurial