Path: blob/master/src/hotspot/share/gc/epsilon/epsilonHeap.hpp
41149 views
/*1* Copyright (c) 2017, 2018, Red Hat, Inc. 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_GC_EPSILON_EPSILONHEAP_HPP25#define SHARE_GC_EPSILON_EPSILONHEAP_HPP2627#include "gc/shared/collectedHeap.hpp"28#include "gc/shared/softRefPolicy.hpp"29#include "gc/shared/space.hpp"30#include "gc/epsilon/epsilonMonitoringSupport.hpp"31#include "gc/epsilon/epsilonBarrierSet.hpp"32#include "services/memoryManager.hpp"3334class EpsilonHeap : public CollectedHeap {35friend class VMStructs;36private:37SoftRefPolicy _soft_ref_policy;38EpsilonMonitoringSupport* _monitoring_support;39MemoryPool* _pool;40GCMemoryManager _memory_manager;41ContiguousSpace* _space;42VirtualSpace _virtual_space;43size_t _max_tlab_size;44size_t _step_counter_update;45size_t _step_heap_print;46int64_t _decay_time_ns;47volatile size_t _last_counter_update;48volatile size_t _last_heap_print;4950public:51static EpsilonHeap* heap();5253EpsilonHeap() :54_memory_manager("Epsilon Heap", ""),55_space(NULL) {};5657virtual Name kind() const {58return CollectedHeap::Epsilon;59}6061virtual const char* name() const {62return "Epsilon";63}6465virtual SoftRefPolicy* soft_ref_policy() {66return &_soft_ref_policy;67}6869virtual jint initialize();70virtual void post_initialize();71virtual void initialize_serviceability();7273virtual GrowableArray<GCMemoryManager*> memory_managers();74virtual GrowableArray<MemoryPool*> memory_pools();7576virtual size_t max_capacity() const { return _virtual_space.reserved_size(); }77virtual size_t capacity() const { return _virtual_space.committed_size(); }78virtual size_t used() const { return _space->used(); }7980virtual bool is_in(const void* p) const {81return _space->is_in(p);82}8384virtual bool is_maximal_no_gc() const {85// No GC is going to happen. Return "we are at max", when we are about to fail.86return used() == capacity();87}8889// Allocation90HeapWord* allocate_work(size_t size);91virtual HeapWord* mem_allocate(size_t size, bool* gc_overhead_limit_was_exceeded);92virtual HeapWord* allocate_new_tlab(size_t min_size,93size_t requested_size,94size_t* actual_size);9596// TLAB allocation97virtual size_t tlab_capacity(Thread* thr) const { return capacity(); }98virtual size_t tlab_used(Thread* thr) const { return used(); }99virtual size_t max_tlab_size() const { return _max_tlab_size; }100virtual size_t unsafe_max_tlab_alloc(Thread* thr) const;101102virtual void collect(GCCause::Cause cause);103virtual void do_full_collection(bool clear_all_soft_refs);104105// Heap walking support106virtual void object_iterate(ObjectClosure* cl);107108// Object pinning support: every object is implicitly pinned109virtual bool supports_object_pinning() const { return true; }110virtual oop pin_object(JavaThread* thread, oop obj) { return obj; }111virtual void unpin_object(JavaThread* thread, oop obj) { }112113// No support for block parsing.114HeapWord* block_start(const void* addr) const { return NULL; }115bool block_is_obj(const HeapWord* addr) const { return false; }116117// No GC threads118virtual void gc_threads_do(ThreadClosure* tc) const {}119120// No nmethod handling121virtual void register_nmethod(nmethod* nm) {}122virtual void unregister_nmethod(nmethod* nm) {}123virtual void flush_nmethod(nmethod* nm) {}124virtual void verify_nmethod(nmethod* nm) {}125126// No heap verification127virtual void prepare_for_verify() {}128virtual void verify(VerifyOption option) {}129130MemRegion reserved_region() const { return _reserved; }131bool is_in_reserved(const void* addr) const { return _reserved.contains(addr); }132133virtual void print_on(outputStream* st) const;134virtual void print_tracing_info() const;135virtual bool print_location(outputStream* st, void* addr) const;136137private:138void print_heap_info(size_t used) const;139void print_metaspace_info() const;140141};142143#endif // SHARE_GC_EPSILON_EPSILONHEAP_HPP144145146