src/hotspot/share/gc/epsilon/epsilonHeap.hpp
branchepsilon-gc-branch
changeset 56492 e1871d34a188
parent 56422 b09629f4b243
child 56508 f67f588ebf15
equal deleted inserted replaced
56491:ad0621bda88a 56492:e1871d34a188
    45   size_t _max_tlab_size;
    45   size_t _max_tlab_size;
    46   size_t _last_counter_update;
    46   size_t _last_counter_update;
    47   size_t _last_heap_print;
    47   size_t _last_heap_print;
    48   size_t _step_counter_update;
    48   size_t _step_counter_update;
    49   size_t _step_heap_print;
    49   size_t _step_heap_print;
       
    50 
    50 public:
    51 public:
       
    52   static EpsilonHeap* heap();
       
    53 
    51   EpsilonHeap(EpsilonCollectorPolicy* p) :
    54   EpsilonHeap(EpsilonCollectorPolicy* p) :
    52           _policy(p),
    55           _policy(p),
    53           _memory_manager("Epsilon Heap", "") {};
    56           _memory_manager("Epsilon Heap", "") {};
    54 
    57 
    55   virtual Name kind() const {
    58   virtual Name kind() const {
    58 
    61 
    59   virtual const char* name() const {
    62   virtual const char* name() const {
    60     return "Epsilon";
    63     return "Epsilon";
    61   }
    64   }
    62 
    65 
    63   virtual jint initialize();
       
    64 
       
    65   virtual void post_initialize();
       
    66 
       
    67   virtual void initialize_serviceability();
       
    68   virtual GrowableArray<GCMemoryManager*> memory_managers();
       
    69   virtual GrowableArray<MemoryPool*> memory_pools();
       
    70 
       
    71   static EpsilonHeap* heap();
       
    72 
       
    73   virtual size_t capacity()     const { return _virtual_space.committed_size(); }
       
    74   virtual size_t used()         const { return _space->used(); }
       
    75   virtual size_t max_capacity() const { return _virtual_space.reserved_size(); }
       
    76 
       
    77   virtual bool is_maximal_no_gc() const {
       
    78     // No GC is going to happen, unless we are at capacity.
       
    79     // At which point we will fail anyway.
       
    80     return used() == capacity();
       
    81   }
       
    82 
       
    83   virtual bool is_in(const void* p) const { return _space->is_in(p); }
       
    84 
       
    85   virtual bool is_scavengable(oop obj) {
       
    86     // No GC is going to happen, therefore no objects ever move.
       
    87     return false;
       
    88   }
       
    89 
       
    90   HeapWord* allocate_work(size_t size);
       
    91   virtual HeapWord* mem_allocate(size_t size, bool* gc_overhead_limit_was_exceeded);
       
    92   virtual HeapWord* allocate_new_tlab(size_t size);
       
    93 
       
    94   // TLAB allocations
       
    95   virtual bool supports_tlab_allocation()           const { return UseTLAB; }
       
    96   virtual size_t tlab_capacity(Thread* thr)         const { return capacity(); }
       
    97   virtual size_t tlab_used(Thread* thr)             const { return used(); }
       
    98   virtual size_t max_tlab_size()                    const { return _max_tlab_size; }
       
    99   virtual size_t unsafe_max_tlab_alloc(Thread* thr) const;
       
   100 
       
   101   virtual void collect(GCCause::Cause cause);
       
   102   virtual void do_full_collection(bool clear_all_soft_refs);
       
   103 
       
   104   virtual AdaptiveSizePolicy* size_policy() {
       
   105     // No such thing for Epsilon
       
   106     return NULL;
       
   107   }
       
   108 
       
   109   virtual CollectorPolicy* collector_policy() const {
    66   virtual CollectorPolicy* collector_policy() const {
   110     return _policy;
    67     return _policy;
   111   }
    68   }
   112 
    69 
   113   virtual SoftRefPolicy* soft_ref_policy() {
    70   virtual SoftRefPolicy* soft_ref_policy() {
   114     return &_soft_ref_policy;
    71     return &_soft_ref_policy;
   115   }
    72   }
   116 
    73 
       
    74   virtual jint initialize();
       
    75   virtual void post_initialize();
       
    76   virtual void initialize_serviceability();
       
    77 
       
    78   virtual GrowableArray<GCMemoryManager*> memory_managers();
       
    79   virtual GrowableArray<MemoryPool*> memory_pools();
       
    80 
       
    81   virtual size_t max_capacity() const { return _virtual_space.reserved_size();  }
       
    82   virtual size_t capacity()     const { return _virtual_space.committed_size(); }
       
    83   virtual size_t used()         const { return _space->used(); }
       
    84 
       
    85   virtual bool is_in(const void* p) const {
       
    86     return _space->is_in(p);
       
    87   }
       
    88 
       
    89   virtual bool is_scavengable(oop obj) {
       
    90     // No GC is going to happen, therefore no objects ever move.
       
    91     return false;
       
    92   }
       
    93 
       
    94   virtual bool is_maximal_no_gc() const {
       
    95     // No GC is going to happen. Return "we are at max", when we are about to fail.
       
    96     return used() == capacity();
       
    97   }
       
    98 
       
    99   // Allocation
       
   100   HeapWord* allocate_work(size_t size);
       
   101   virtual HeapWord* mem_allocate(size_t size, bool* gc_overhead_limit_was_exceeded);
       
   102   virtual HeapWord* allocate_new_tlab(size_t size);
       
   103 
       
   104   // TLAB allocation
       
   105   virtual bool supports_tlab_allocation()           const { return UseTLAB;        }
       
   106   virtual size_t tlab_capacity(Thread* thr)         const { return capacity();     }
       
   107   virtual size_t tlab_used(Thread* thr)             const { return used();         }
       
   108   virtual size_t max_tlab_size()                    const { return _max_tlab_size; }
       
   109   virtual size_t unsafe_max_tlab_alloc(Thread* thr) const;
       
   110 
       
   111   virtual void collect(GCCause::Cause cause);
       
   112   virtual void do_full_collection(bool clear_all_soft_refs);
       
   113 
       
   114   // Heap walking support
       
   115   virtual void safe_object_iterate(ObjectClosure* cl);
   117   virtual void object_iterate(ObjectClosure* cl) {
   116   virtual void object_iterate(ObjectClosure* cl) {
   118     safe_object_iterate(cl);
   117     safe_object_iterate(cl);
   119   }
   118   }
   120 
   119 
   121   virtual void safe_object_iterate(ObjectClosure* cl);
   120   // No support for block parsing.
       
   121   virtual HeapWord* block_start(const void* addr) const { return NULL;  }
       
   122   virtual size_t block_size(const HeapWord* addr) const { return 0;     }
       
   123   virtual bool block_is_obj(const HeapWord* addr) const { return false; }
   122 
   124 
   123   virtual HeapWord* block_start(const void* addr) const {
   125   // No GC threads
   124     // No support for block parsing.
   126   virtual void print_gc_threads_on(outputStream* st) const {}
   125     return NULL;
   127   virtual void gc_threads_do(ThreadClosure* tc) const {}
   126   }
       
   127 
   128 
   128   virtual size_t block_size(const HeapWord* addr) const {
   129   // No heap verification
   129     // No support for block parsing.
   130   virtual void prepare_for_verify() {}
   130     return 0;
   131   virtual void verify(VerifyOption option) {}
   131   }
       
   132 
       
   133   virtual bool block_is_obj(const HeapWord* addr) const {
       
   134     // No support for block parsing.
       
   135     return false;
       
   136   }
       
   137 
   132 
   138   virtual jlong millis_since_last_gc() {
   133   virtual jlong millis_since_last_gc() {
   139     // Report time since the VM start
   134     // Report time since the VM start
   140     return os::elapsed_counter() / NANOSECS_PER_MILLISEC;
   135     return os::elapsed_counter() / NANOSECS_PER_MILLISEC;
   141   }
   136   }
   142 
   137 
   143   virtual void print_gc_threads_on(outputStream* st) const {
       
   144     // No GC threads.
       
   145   }
       
   146 
       
   147   virtual void gc_threads_do(ThreadClosure* tc) const {
       
   148     // No GC threads.
       
   149   }
       
   150 
       
   151   virtual void print_on(outputStream* st) const;
   138   virtual void print_on(outputStream* st) const;
   152   virtual void print_tracing_info() const;
   139   virtual void print_tracing_info() const;
   153 
       
   154   virtual void prepare_for_verify() {
       
   155     // No heap verification.
       
   156   }
       
   157 
       
   158   virtual void verify(VerifyOption option) {
       
   159     // No heap verification.
       
   160   }
       
   161 
   140 
   162 };
   141 };
   163 
   142 
   164 #endif // SHARE_VM_GC_EPSILON_COLLECTEDHEAP_HPP
   143 #endif // SHARE_VM_GC_EPSILON_COLLECTEDHEAP_HPP