annotate src/share/vm/memory/genRemSet.cpp @ 3602:da91efe96a93

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>
author coleenp
date Sat, 01 Sep 2012 13:25:18 -0400
parents f95d63e2154a
children ab68fc0101ce
rev   line source
duke@0 1 /*
coleenp@3602 2 * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved.
duke@0 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
duke@0 4 *
duke@0 5 * This code is free software; you can redistribute it and/or modify it
duke@0 6 * under the terms of the GNU General Public License version 2 only, as
duke@0 7 * published by the Free Software Foundation.
duke@0 8 *
duke@0 9 * This code is distributed in the hope that it will be useful, but WITHOUT
duke@0 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
duke@0 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
duke@0 12 * version 2 for more details (a copy is included in the LICENSE file that
duke@0 13 * accompanied this code).
duke@0 14 *
duke@0 15 * You should have received a copy of the GNU General Public License version
duke@0 16 * 2 along with this work; if not, write to the Free Software Foundation,
duke@0 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
duke@0 18 *
trims@1472 19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
trims@1472 20 * or visit www.oracle.com if you need additional information or have any
trims@1472 21 * questions.
duke@0 22 *
duke@0 23 */
duke@0 24
stefank@1879 25 #include "precompiled.hpp"
coleenp@3602 26 #include "classfile/classLoaderData.hpp"
stefank@1879 27 #include "memory/cardTableRS.hpp"
stefank@1879 28 #include "memory/genRemSet.hpp"
stefank@1879 29
duke@0 30 // This kind of "BarrierSet" allows a "CollectedHeap" to detect and
duke@0 31 // enumerate ref fields that have been modified (since the last
duke@0 32 // enumeration.)
duke@0 33
duke@0 34 uintx GenRemSet::max_alignment_constraint(Name nm) {
duke@0 35 switch (nm) {
duke@0 36 case GenRemSet::CardTable:
duke@0 37 return CardTableRS::ct_max_alignment_constraint();
duke@0 38 default:
duke@0 39 guarantee(false, "Unrecognized GenRemSet type.");
duke@0 40 return (0); // Make Windows compiler happy
duke@0 41 }
duke@0 42 }
coleenp@3602 43
coleenp@3602 44 class HasAccumulatedModifiedOopsClosure : public KlassClosure {
coleenp@3602 45 bool _found;
coleenp@3602 46 public:
coleenp@3602 47 HasAccumulatedModifiedOopsClosure() : _found(false) {}
coleenp@3602 48 void do_klass(Klass* klass) {
coleenp@3602 49 if (_found) {
coleenp@3602 50 return;
coleenp@3602 51 }
coleenp@3602 52
coleenp@3602 53 if (klass->has_accumulated_modified_oops()) {
coleenp@3602 54 _found = true;
coleenp@3602 55 }
coleenp@3602 56 }
coleenp@3602 57 bool found() {
coleenp@3602 58 return _found;
coleenp@3602 59 }
coleenp@3602 60 };
coleenp@3602 61
coleenp@3602 62 bool KlassRemSet::mod_union_is_clear() {
coleenp@3602 63 HasAccumulatedModifiedOopsClosure closure;
coleenp@3602 64 ClassLoaderDataGraph::classes_do(&closure);
coleenp@3602 65
coleenp@3602 66 return !closure.found();
coleenp@3602 67 }
coleenp@3602 68
coleenp@3602 69
coleenp@3602 70 class ClearKlassModUnionClosure : public KlassClosure {
coleenp@3602 71 public:
coleenp@3602 72 void do_klass(Klass* klass) {
coleenp@3602 73 if (klass->has_accumulated_modified_oops()) {
coleenp@3602 74 klass->clear_accumulated_modified_oops();
coleenp@3602 75 }
coleenp@3602 76 }
coleenp@3602 77 };
coleenp@3602 78
coleenp@3602 79 void KlassRemSet::clear_mod_union() {
coleenp@3602 80 ClearKlassModUnionClosure closure;
coleenp@3602 81 ClassLoaderDataGraph::classes_do(&closure);
coleenp@3602 82 }