aoqi@0: /* aoqi@0: * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved. aoqi@0: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. aoqi@0: * aoqi@0: * This code is free software; you can redistribute it and/or modify it aoqi@0: * under the terms of the GNU General Public License version 2 only, as aoqi@0: * published by the Free Software Foundation. aoqi@0: * aoqi@0: * This code is distributed in the hope that it will be useful, but WITHOUT aoqi@0: * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or aoqi@0: * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License aoqi@0: * version 2 for more details (a copy is included in the LICENSE file that aoqi@0: * accompanied this code). aoqi@0: * aoqi@0: * You should have received a copy of the GNU General Public License version aoqi@0: * 2 along with this work; if not, write to the Free Software Foundation, aoqi@0: * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. aoqi@0: * aoqi@0: * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA aoqi@0: * or visit www.oracle.com if you need additional information or have any aoqi@0: * questions. aoqi@0: * aoqi@0: */ aoqi@0: aoqi@0: #ifndef SHARE_VM_GC_IMPLEMENTATION_SHARED_GCHEAPSUMMARY_HPP aoqi@0: #define SHARE_VM_GC_IMPLEMENTATION_SHARED_GCHEAPSUMMARY_HPP aoqi@0: aoqi@0: #include "memory/allocation.hpp" aoqi@0: #include "memory/metaspaceChunkFreeListSummary.hpp" aoqi@0: aoqi@0: class VirtualSpaceSummary : public StackObj { aoqi@0: HeapWord* _start; aoqi@0: HeapWord* _committed_end; aoqi@0: HeapWord* _reserved_end; aoqi@0: public: aoqi@0: VirtualSpaceSummary() : aoqi@0: _start(NULL), _committed_end(NULL), _reserved_end(NULL) { } aoqi@0: VirtualSpaceSummary(HeapWord* start, HeapWord* committed_end, HeapWord* reserved_end) : aoqi@0: _start(start), _committed_end(committed_end), _reserved_end(reserved_end) { } aoqi@0: aoqi@0: HeapWord* start() const { return _start; } aoqi@0: HeapWord* committed_end() const { return _committed_end; } aoqi@0: HeapWord* reserved_end() const { return _reserved_end; } aoqi@0: size_t committed_size() const { return (uintptr_t)_committed_end - (uintptr_t)_start; } aoqi@0: size_t reserved_size() const { return (uintptr_t)_reserved_end - (uintptr_t)_start; } aoqi@0: }; aoqi@0: aoqi@0: class SpaceSummary : public StackObj { aoqi@0: HeapWord* _start; aoqi@0: HeapWord* _end; aoqi@0: size_t _used; aoqi@0: public: aoqi@0: SpaceSummary() : aoqi@0: _start(NULL), _end(NULL), _used(0) { } aoqi@0: SpaceSummary(HeapWord* start, HeapWord* end, size_t used) : aoqi@0: _start(start), _end(end), _used(used) { } aoqi@0: aoqi@0: HeapWord* start() const { return _start; } aoqi@0: HeapWord* end() const { return _end; } aoqi@0: size_t used() const { return _used; } aoqi@0: size_t size() const { return (uintptr_t)_end - (uintptr_t)_start; } aoqi@0: }; aoqi@0: aoqi@0: class MetaspaceSizes : public StackObj { aoqi@0: size_t _committed; aoqi@0: size_t _used; aoqi@0: size_t _reserved; aoqi@0: aoqi@0: public: aoqi@0: MetaspaceSizes() : _committed(0), _used(0), _reserved(0) {} aoqi@0: MetaspaceSizes(size_t committed, size_t used, size_t reserved) : aoqi@0: _committed(committed), _used(used), _reserved(reserved) {} aoqi@0: aoqi@0: size_t committed() const { return _committed; } aoqi@0: size_t used() const { return _used; } aoqi@0: size_t reserved() const { return _reserved; } aoqi@0: }; aoqi@0: aoqi@0: class GCHeapSummary; aoqi@0: class PSHeapSummary; aoqi@0: aoqi@0: class GCHeapSummaryVisitor { aoqi@0: public: aoqi@0: virtual void visit(const GCHeapSummary* heap_summary) const = 0; aoqi@0: virtual void visit(const PSHeapSummary* heap_summary) const {} aoqi@0: }; aoqi@0: aoqi@0: class GCHeapSummary : public StackObj { aoqi@0: VirtualSpaceSummary _heap; aoqi@0: size_t _used; aoqi@0: aoqi@0: public: aoqi@0: GCHeapSummary() : aoqi@0: _heap(), _used(0) { } aoqi@0: GCHeapSummary(VirtualSpaceSummary& heap_space, size_t used) : aoqi@0: _heap(heap_space), _used(used) { } aoqi@0: aoqi@0: const VirtualSpaceSummary& heap() const { return _heap; } aoqi@0: size_t used() const { return _used; } aoqi@0: aoqi@0: virtual void accept(GCHeapSummaryVisitor* visitor) const { aoqi@0: visitor->visit(this); aoqi@0: } aoqi@0: }; aoqi@0: aoqi@0: class PSHeapSummary : public GCHeapSummary { aoqi@0: VirtualSpaceSummary _old; aoqi@0: SpaceSummary _old_space; aoqi@0: VirtualSpaceSummary _young; aoqi@0: SpaceSummary _eden; aoqi@0: SpaceSummary _from; aoqi@0: SpaceSummary _to; aoqi@0: public: aoqi@0: PSHeapSummary(VirtualSpaceSummary& heap_space, size_t heap_used, VirtualSpaceSummary old, SpaceSummary old_space, VirtualSpaceSummary young, SpaceSummary eden, SpaceSummary from, SpaceSummary to) : aoqi@0: GCHeapSummary(heap_space, heap_used), _old(old), _old_space(old_space), _young(young), _eden(eden), _from(from), _to(to) { } aoqi@0: const VirtualSpaceSummary& old() const { return _old; } aoqi@0: const SpaceSummary& old_space() const { return _old_space; } aoqi@0: const VirtualSpaceSummary& young() const { return _young; } aoqi@0: const SpaceSummary& eden() const { return _eden; } aoqi@0: const SpaceSummary& from() const { return _from; } aoqi@0: const SpaceSummary& to() const { return _to; } aoqi@0: aoqi@0: virtual void accept(GCHeapSummaryVisitor* visitor) const { aoqi@0: visitor->visit(this); aoqi@0: } aoqi@0: }; aoqi@0: aoqi@0: class MetaspaceSummary : public StackObj { aoqi@0: size_t _capacity_until_GC; aoqi@0: MetaspaceSizes _meta_space; aoqi@0: MetaspaceSizes _data_space; aoqi@0: MetaspaceSizes _class_space; aoqi@0: MetaspaceChunkFreeListSummary _metaspace_chunk_free_list_summary; aoqi@0: MetaspaceChunkFreeListSummary _class_chunk_free_list_summary; aoqi@0: aoqi@0: public: aoqi@0: MetaspaceSummary() : aoqi@0: _capacity_until_GC(0), aoqi@0: _meta_space(), aoqi@0: _data_space(), aoqi@0: _class_space(), aoqi@0: _metaspace_chunk_free_list_summary(), aoqi@0: _class_chunk_free_list_summary() aoqi@0: {} aoqi@0: MetaspaceSummary(size_t capacity_until_GC, aoqi@0: const MetaspaceSizes& meta_space, aoqi@0: const MetaspaceSizes& data_space, aoqi@0: const MetaspaceSizes& class_space, aoqi@0: const MetaspaceChunkFreeListSummary& metaspace_chunk_free_list_summary, aoqi@0: const MetaspaceChunkFreeListSummary& class_chunk_free_list_summary) : aoqi@0: _capacity_until_GC(capacity_until_GC), aoqi@0: _meta_space(meta_space), aoqi@0: _data_space(data_space), aoqi@0: _class_space(class_space), aoqi@0: _metaspace_chunk_free_list_summary(metaspace_chunk_free_list_summary), aoqi@0: _class_chunk_free_list_summary(class_chunk_free_list_summary) aoqi@0: {} aoqi@0: aoqi@0: size_t capacity_until_GC() const { return _capacity_until_GC; } aoqi@0: const MetaspaceSizes& meta_space() const { return _meta_space; } aoqi@0: const MetaspaceSizes& data_space() const { return _data_space; } aoqi@0: const MetaspaceSizes& class_space() const { return _class_space; } aoqi@0: aoqi@0: const MetaspaceChunkFreeListSummary& metaspace_chunk_free_list_summary() const { aoqi@0: return _metaspace_chunk_free_list_summary; aoqi@0: } aoqi@0: aoqi@0: const MetaspaceChunkFreeListSummary& class_chunk_free_list_summary() const { aoqi@0: return _class_chunk_free_list_summary; aoqi@0: } aoqi@0: aoqi@0: }; aoqi@0: aoqi@0: #endif // SHARE_VM_GC_IMPLEMENTATION_SHARED_GCHEAPSUMMARY_HPP