Path: blob/aarch64-shenandoah-jdk8u272-b10/hotspot/src/share/vm/gc_implementation/shared/gcHeapSummary.hpp
38920 views
/*1* Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.2* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.3*4* This code is free software; you can redistribute it and/or modify it5* under the terms of the GNU General Public License version 2 only, as6* published by the Free Software Foundation.7*8* This code is distributed in the hope that it will be useful, but WITHOUT9* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or10* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License11* version 2 for more details (a copy is included in the LICENSE file that12* accompanied this code).13*14* You should have received a copy of the GNU General Public License version15* 2 along with this work; if not, write to the Free Software Foundation,16* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.17*18* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA19* or visit www.oracle.com if you need additional information or have any20* questions.21*22*/2324#ifndef SHARE_VM_GC_IMPLEMENTATION_SHARED_GCHEAPSUMMARY_HPP25#define SHARE_VM_GC_IMPLEMENTATION_SHARED_GCHEAPSUMMARY_HPP2627#include "memory/allocation.hpp"28#include "memory/metaspaceChunkFreeListSummary.hpp"2930class VirtualSpaceSummary : public StackObj {31HeapWord* _start;32HeapWord* _committed_end;33HeapWord* _reserved_end;34public:35VirtualSpaceSummary() :36_start(NULL), _committed_end(NULL), _reserved_end(NULL) { }37VirtualSpaceSummary(HeapWord* start, HeapWord* committed_end, HeapWord* reserved_end) :38_start(start), _committed_end(committed_end), _reserved_end(reserved_end) { }3940HeapWord* start() const { return _start; }41HeapWord* committed_end() const { return _committed_end; }42HeapWord* reserved_end() const { return _reserved_end; }43size_t committed_size() const { return (uintptr_t)_committed_end - (uintptr_t)_start; }44size_t reserved_size() const { return (uintptr_t)_reserved_end - (uintptr_t)_start; }45};4647class SpaceSummary : public StackObj {48HeapWord* _start;49HeapWord* _end;50size_t _used;51public:52SpaceSummary() :53_start(NULL), _end(NULL), _used(0) { }54SpaceSummary(HeapWord* start, HeapWord* end, size_t used) :55_start(start), _end(end), _used(used) { }5657HeapWord* start() const { return _start; }58HeapWord* end() const { return _end; }59size_t used() const { return _used; }60size_t size() const { return (uintptr_t)_end - (uintptr_t)_start; }61};6263class MetaspaceSizes : public StackObj {64size_t _committed;65size_t _used;66size_t _reserved;6768public:69MetaspaceSizes() : _committed(0), _used(0), _reserved(0) {}70MetaspaceSizes(size_t committed, size_t used, size_t reserved) :71_committed(committed), _used(used), _reserved(reserved) {}7273size_t committed() const { return _committed; }74size_t used() const { return _used; }75size_t reserved() const { return _reserved; }76};7778class GCHeapSummary;79class PSHeapSummary;80class G1HeapSummary;8182class GCHeapSummaryVisitor {83public:84virtual void visit(const GCHeapSummary* heap_summary) const = 0;85virtual void visit(const PSHeapSummary* heap_summary) const {}86virtual void visit(const G1HeapSummary* heap_summary) const {}87};8889class GCHeapSummary : public StackObj {90VirtualSpaceSummary _heap;91size_t _used;9293public:94GCHeapSummary() :95_heap(), _used(0) { }96GCHeapSummary(VirtualSpaceSummary& heap_space, size_t used) :97_heap(heap_space), _used(used) { }9899const VirtualSpaceSummary& heap() const { return _heap; }100size_t used() const { return _used; }101102virtual void accept(GCHeapSummaryVisitor* visitor) const {103visitor->visit(this);104}105};106107class PSHeapSummary : public GCHeapSummary {108VirtualSpaceSummary _old;109SpaceSummary _old_space;110VirtualSpaceSummary _young;111SpaceSummary _eden;112SpaceSummary _from;113SpaceSummary _to;114public:115PSHeapSummary(VirtualSpaceSummary& heap_space, size_t heap_used, VirtualSpaceSummary old, SpaceSummary old_space, VirtualSpaceSummary young, SpaceSummary eden, SpaceSummary from, SpaceSummary to) :116GCHeapSummary(heap_space, heap_used), _old(old), _old_space(old_space), _young(young), _eden(eden), _from(from), _to(to) { }117const VirtualSpaceSummary& old() const { return _old; }118const SpaceSummary& old_space() const { return _old_space; }119const VirtualSpaceSummary& young() const { return _young; }120const SpaceSummary& eden() const { return _eden; }121const SpaceSummary& from() const { return _from; }122const SpaceSummary& to() const { return _to; }123124virtual void accept(GCHeapSummaryVisitor* visitor) const {125visitor->visit(this);126}127};128129class G1HeapSummary : public GCHeapSummary {130size_t _edenUsed;131size_t _edenCapacity;132size_t _survivorUsed;133uint _numberOfRegions;134public:135G1HeapSummary(VirtualSpaceSummary& heap_space, size_t heap_used, size_t edenUsed, size_t edenCapacity, size_t survivorUsed, uint numberOfRegions) :136GCHeapSummary(heap_space, heap_used), _edenUsed(edenUsed), _edenCapacity(edenCapacity), _survivorUsed(survivorUsed), _numberOfRegions(numberOfRegions) { }137const size_t edenUsed() const { return _edenUsed; }138const size_t edenCapacity() const { return _edenCapacity; }139const size_t survivorUsed() const { return _survivorUsed; }140const uint numberOfRegions() const { return _numberOfRegions; }141142virtual void accept(GCHeapSummaryVisitor* visitor) const {143visitor->visit(this);144}145};146147class MetaspaceSummary : public StackObj {148size_t _capacity_until_GC;149MetaspaceSizes _meta_space;150MetaspaceSizes _data_space;151MetaspaceSizes _class_space;152MetaspaceChunkFreeListSummary _metaspace_chunk_free_list_summary;153MetaspaceChunkFreeListSummary _class_chunk_free_list_summary;154155public:156MetaspaceSummary() :157_capacity_until_GC(0),158_meta_space(),159_data_space(),160_class_space(),161_metaspace_chunk_free_list_summary(),162_class_chunk_free_list_summary()163{}164MetaspaceSummary(size_t capacity_until_GC,165const MetaspaceSizes& meta_space,166const MetaspaceSizes& data_space,167const MetaspaceSizes& class_space,168const MetaspaceChunkFreeListSummary& metaspace_chunk_free_list_summary,169const MetaspaceChunkFreeListSummary& class_chunk_free_list_summary) :170_capacity_until_GC(capacity_until_GC),171_meta_space(meta_space),172_data_space(data_space),173_class_space(class_space),174_metaspace_chunk_free_list_summary(metaspace_chunk_free_list_summary),175_class_chunk_free_list_summary(class_chunk_free_list_summary)176{}177178size_t capacity_until_GC() const { return _capacity_until_GC; }179const MetaspaceSizes& meta_space() const { return _meta_space; }180const MetaspaceSizes& data_space() const { return _data_space; }181const MetaspaceSizes& class_space() const { return _class_space; }182183const MetaspaceChunkFreeListSummary& metaspace_chunk_free_list_summary() const {184return _metaspace_chunk_free_list_summary;185}186187const MetaspaceChunkFreeListSummary& class_chunk_free_list_summary() const {188return _class_chunk_free_list_summary;189}190191};192193#endif // SHARE_VM_GC_IMPLEMENTATION_SHARED_GCHEAPSUMMARY_HPP194195196