# HG changeset patch # User rkennke # Date 1508918717 -7200 # Node ID ee36a8e365610fcc54407d5182a06b9977f97e0e # Parent 2f6ab27efb60cc26dd7ed7d782e702af28889fa2 8183542: Factor out serial GC specific code from GenCollectedHeap into its own subclass Reviewed-by: kbarrett, jgeorge diff -r 2f6ab27efb60 -r ee36a8e36561 src/hotspot/share/gc/cms/cmsHeap.hpp --- a/src/hotspot/share/gc/cms/cmsHeap.hpp Thu Nov 09 11:13:50 2017 -0800 +++ b/src/hotspot/share/gc/cms/cmsHeap.hpp Wed Oct 25 10:05:17 2017 +0200 @@ -39,14 +39,16 @@ class WorkGang; class CMSHeap : public GenCollectedHeap { + +protected: + virtual void check_gen_kinds(); + public: CMSHeap(GenCollectorPolicy *policy); // Returns JNI_OK on success virtual jint initialize(); - virtual void check_gen_kinds(); - // Convenience function to be used in situations where the heap type can be // asserted to be this type. static CMSHeap* heap(); @@ -70,10 +72,6 @@ // supports. Caller does not hold the Heap_lock on entry. void collect(GCCause::Cause cause); - bool is_in_closed_subset(const void* p) const { - return is_in_reserved(p); - } - bool card_mark_must_follow_store() const { return true; } diff -r 2f6ab27efb60 -r ee36a8e36561 src/hotspot/share/gc/serial/serialHeap.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/hotspot/share/gc/serial/serialHeap.cpp Wed Oct 25 10:05:17 2017 +0200 @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +#include "precompiled.hpp" +#include "gc/serial/serialHeap.hpp" + +SerialHeap::SerialHeap(GenCollectorPolicy* policy) : GenCollectedHeap(policy) {} + +void SerialHeap::check_gen_kinds() { + assert(young_gen()->kind() == Generation::DefNew, + "Wrong youngest generation type"); + assert(old_gen()->kind() == Generation::MarkSweepCompact, + "Wrong generation kind"); +} diff -r 2f6ab27efb60 -r ee36a8e36561 src/hotspot/share/gc/serial/serialHeap.hpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/hotspot/share/gc/serial/serialHeap.hpp Wed Oct 25 10:05:17 2017 +0200 @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +#ifndef SHARE_VM_GC_SERIAL_SERIALHEAP_HPP +#define SHARE_VM_GC_SERIAL_SERIALHEAP_HPP + +#include "gc/shared/genCollectedHeap.hpp" + +class GenCollectorPolicy; + +class SerialHeap : public GenCollectedHeap { +protected: + virtual void check_gen_kinds(); + +public: + SerialHeap(GenCollectorPolicy* policy); + + virtual Name kind() const { + return CollectedHeap::SerialHeap; + } + + virtual const char* name() const { + return "Serial"; + } + + // override + virtual bool is_in_closed_subset(const void* p) const { + return is_in(p); + } + + virtual bool card_mark_must_follow_store() const { + return false; + } + +}; + +#endif // SHARE_VM_GC_CMS_CMSHEAP_HPP diff -r 2f6ab27efb60 -r ee36a8e36561 src/hotspot/share/gc/shared/collectedHeap.hpp --- a/src/hotspot/share/gc/shared/collectedHeap.hpp Thu Nov 09 11:13:50 2017 -0800 +++ b/src/hotspot/share/gc/shared/collectedHeap.hpp Wed Oct 25 10:05:17 2017 +0200 @@ -81,9 +81,10 @@ // // CollectedHeap // GenCollectedHeap +// SerialHeap +// CMSHeap // G1CollectedHeap // ParallelScavengeHeap -// CMSHeap // class CollectedHeap : public CHeapObj { friend class VMStructs; @@ -193,7 +194,7 @@ public: enum Name { - GenCollectedHeap, + SerialHeap, ParallelScavengeHeap, G1CollectedHeap, CMSHeap diff -r 2f6ab27efb60 -r ee36a8e36561 src/hotspot/share/gc/shared/genCollectedHeap.cpp --- a/src/hotspot/share/gc/shared/genCollectedHeap.cpp Thu Nov 09 11:13:50 2017 -0800 +++ b/src/hotspot/share/gc/shared/genCollectedHeap.cpp Wed Oct 25 10:05:17 2017 +0200 @@ -153,13 +153,6 @@ _gen_policy->initialize_gc_policy_counters(); } -void GenCollectedHeap::check_gen_kinds() { - assert(young_gen()->kind() == Generation::DefNew, - "Wrong youngest generation type"); - assert(old_gen()->kind() == Generation::MarkSweepCompact, - "Wrong generation kind"); -} - void GenCollectedHeap::ref_processing_init() { _young_gen->ref_processor_init(); _old_gen->ref_processor_init(); @@ -984,7 +977,7 @@ GenCollectedHeap* GenCollectedHeap::heap() { CollectedHeap* heap = Universe::heap(); assert(heap != NULL, "Uninitialized access to GenCollectedHeap::heap()"); - assert(heap->kind() == CollectedHeap::GenCollectedHeap || + assert(heap->kind() == CollectedHeap::SerialHeap || heap->kind() == CollectedHeap::CMSHeap, "Not a GenCollectedHeap"); return (GenCollectedHeap*) heap; } diff -r 2f6ab27efb60 -r ee36a8e36561 src/hotspot/share/gc/shared/genCollectedHeap.hpp --- a/src/hotspot/share/gc/shared/genCollectedHeap.hpp Thu Nov 09 11:13:50 2017 -0800 +++ b/src/hotspot/share/gc/shared/genCollectedHeap.hpp Wed Oct 25 10:05:17 2017 +0200 @@ -83,6 +83,12 @@ bool run_verification, bool clear_soft_refs, bool restore_marks_for_biased_locking); + // Reserve aligned space for the heap as needed by the contained generations. + char* allocate(size_t alignment, ReservedSpace* heap_rs); + + // Initialize ("weak") refs processing support + void ref_processing_init(); + protected: // The set of potentially parallel tasks in root scanning. @@ -134,31 +140,18 @@ // we absolutely __must__ clear soft refs? bool must_clear_all_soft_refs(); + GenCollectedHeap(GenCollectorPolicy *policy); + + virtual void check_gen_kinds() = 0; + public: - GenCollectedHeap(GenCollectorPolicy *policy); // Returns JNI_OK on success virtual jint initialize(); - // Reserve aligned space for the heap as needed by the contained generations. - char* allocate(size_t alignment, ReservedSpace* heap_rs); - // Does operations required after initialization has been done. void post_initialize(); - virtual void check_gen_kinds(); - - // Initialize ("weak") refs processing support - virtual void ref_processing_init(); - - virtual Name kind() const { - return CollectedHeap::GenCollectedHeap; - } - - virtual const char* name() const { - return "Serial"; - } - Generation* young_gen() const { return _young_gen; } Generation* old_gen() const { return _old_gen; } @@ -215,11 +208,6 @@ // assertion checking or verification only. bool is_in(const void* p) const; - // override - virtual bool is_in_closed_subset(const void* p) const { - return is_in(p); - } - // Returns true if the reference is to an object in the reserved space // for the young generation. // Assumes the the young gen address range is less than that of the old gen. @@ -286,10 +274,6 @@ return true; } - virtual bool card_mark_must_follow_store() const { - return false; - } - // We don't need barriers for stores to objects in the // young gen and, a fortiori, for initializing stores to // objects therein. This applies to DefNew+Tenured and ParNew+CMS diff -r 2f6ab27efb60 -r ee36a8e36561 src/hotspot/share/memory/universe.cpp --- a/src/hotspot/share/memory/universe.cpp Thu Nov 09 11:13:50 2017 -0800 +++ b/src/hotspot/share/memory/universe.cpp Wed Oct 25 10:05:17 2017 +0200 @@ -32,10 +32,10 @@ #include "classfile/vmSymbols.hpp" #include "code/codeCache.hpp" #include "code/dependencies.hpp" +#include "gc/serial/serialHeap.hpp" #include "gc/shared/cardTableModRefBS.hpp" #include "gc/shared/collectedHeap.inline.hpp" #include "gc/shared/gcLocker.inline.hpp" -#include "gc/shared/genCollectedHeap.hpp" #include "gc/shared/generation.hpp" #include "gc/shared/gcTraceTime.inline.hpp" #include "gc/shared/space.hpp" @@ -762,7 +762,7 @@ return Universe::create_heap_with_policy(); #endif } else if (UseSerialGC) { - return Universe::create_heap_with_policy(); + return Universe::create_heap_with_policy(); } ShouldNotReachHere(); diff -r 2f6ab27efb60 -r ee36a8e36561 src/hotspot/share/runtime/vmStructs.cpp --- a/src/hotspot/share/runtime/vmStructs.cpp Thu Nov 09 11:13:50 2017 -0800 +++ b/src/hotspot/share/runtime/vmStructs.cpp Wed Oct 25 10:05:17 2017 +0200 @@ -47,6 +47,7 @@ #include "gc/parallel/immutableSpace.hpp" #include "gc/parallel/mutableSpace.hpp" #include "gc/serial/defNewGeneration.hpp" +#include "gc/serial/serialHeap.hpp" #include "gc/serial/tenuredGeneration.hpp" #include "gc/cms/cmsHeap.hpp" #include "gc/shared/cardTableRS.hpp" @@ -1465,6 +1466,7 @@ declare_toplevel_type(CollectedHeap) \ declare_type(GenCollectedHeap, CollectedHeap) \ declare_type(CMSHeap, GenCollectedHeap) \ + declare_type(SerialHeap, GenCollectedHeap) \ declare_toplevel_type(Generation) \ declare_type(DefNewGeneration, Generation) \ declare_type(CardGeneration, Generation) \ @@ -2258,7 +2260,8 @@ \ declare_constant(G1SATBCardTableModRefBS::g1_young_gen) \ \ - declare_constant(CollectedHeap::GenCollectedHeap) \ + declare_constant(CollectedHeap::SerialHeap) \ + declare_constant(CollectedHeap::CMSHeap) \ declare_constant(CollectedHeap::ParallelScavengeHeap) \ declare_constant(CollectedHeap::G1CollectedHeap) \ \ diff -r 2f6ab27efb60 -r ee36a8e36561 src/hotspot/share/services/memoryService.cpp --- a/src/hotspot/share/services/memoryService.cpp Thu Nov 09 11:13:50 2017 -0800 +++ b/src/hotspot/share/services/memoryService.cpp Wed Oct 25 10:05:17 2017 +0200 @@ -86,7 +86,7 @@ void MemoryService::set_universe_heap(CollectedHeap* heap) { CollectedHeap::Name kind = heap->kind(); switch (kind) { - case CollectedHeap::GenCollectedHeap : + case CollectedHeap::SerialHeap : case CollectedHeap::CMSHeap : { add_gen_collected_heap_info(GenCollectedHeap::heap()); break; diff -r 2f6ab27efb60 -r ee36a8e36561 src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/gc/serial/SerialHeap.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/gc/serial/SerialHeap.java Wed Oct 25 10:05:17 2017 +0200 @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2017, Red Hat, Inc. and/or its affiliates. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +package sun.jvm.hotspot.gc.serial; + +import sun.jvm.hotspot.debugger.Address; +import sun.jvm.hotspot.gc.shared.GenCollectedHeap; +import sun.jvm.hotspot.gc.shared.CollectedHeapName; + +public class SerialHeap extends GenCollectedHeap { + + public SerialHeap(Address addr) { + super(addr); + } + + public CollectedHeapName kind() { + return CollectedHeapName.SERIAL_HEAP; + } +} diff -r 2f6ab27efb60 -r ee36a8e36561 src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/gc/shared/CollectedHeapName.java --- a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/gc/shared/CollectedHeapName.java Thu Nov 09 11:13:50 2017 -0800 +++ b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/gc/shared/CollectedHeapName.java Wed Oct 25 10:05:17 2017 +0200 @@ -33,6 +33,7 @@ public static final CollectedHeapName GEN_COLLECTED_HEAP = new CollectedHeapName("GenCollectedHeap"); public static final CollectedHeapName CMS_HEAP = new CollectedHeapName("CMSHeap"); + public static final CollectedHeapName SERIAL_HEAP = new CollectedHeapName("SerialHeap"); public static final CollectedHeapName G1_COLLECTED_HEAP = new CollectedHeapName("G1CollectedHeap"); public static final CollectedHeapName PARALLEL_SCAVENGE_HEAP = new CollectedHeapName("ParallelScavengeHeap"); diff -r 2f6ab27efb60 -r ee36a8e36561 src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/memory/Universe.java --- a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/memory/Universe.java Thu Nov 09 11:13:50 2017 -0800 +++ b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/memory/Universe.java Wed Oct 25 10:05:17 2017 +0200 @@ -28,6 +28,7 @@ import java.util.*; import sun.jvm.hotspot.debugger.*; import sun.jvm.hotspot.gc.cms.CMSHeap; +import sun.jvm.hotspot.gc.serial.SerialHeap; import sun.jvm.hotspot.gc.shared.*; import sun.jvm.hotspot.gc.g1.G1CollectedHeap; import sun.jvm.hotspot.gc.parallel.*; @@ -77,8 +78,8 @@ collectedHeapField = type.getAddressField("_collectedHeap"); heapConstructor = new VirtualConstructor(db); - heapConstructor.addMapping("GenCollectedHeap", GenCollectedHeap.class); heapConstructor.addMapping("CMSHeap", CMSHeap.class); + heapConstructor.addMapping("SerialHeap", SerialHeap.class); heapConstructor.addMapping("ParallelScavengeHeap", ParallelScavengeHeap.class); heapConstructor.addMapping("G1CollectedHeap", G1CollectedHeap.class);