src/share/vm/gc_interface/collectedHeap.hpp

Print this page
rev 4773 : 8005849: JEP 167: Event-Based JVM Tracing
Reviewed-by: acorn, coleenp, sla
Contributed-by: Karen Kinnear <karen.kinnear@oracle.com>, Bengt Rutisson <bengt.rutisson@oracle.com>, Calvin Cheung <calvin.cheung@oracle.com>, Erik Gahlin <erik.gahlin@oracle.com>, Erik Helin <erik.helin@oracle.com>, Jesper Wilhelmsson <jesper.wilhelmsson@oracle.com>, Keith McGuigan <keith.mcguigan@oracle.com>, Mattias Tobiasson <mattias.tobiasson@oracle.com>, Markus Gronlund <markus.gronlund@oracle.com>, Mikael Auno <mikael.auno@oracle.com>, Nils Eliasson <nils.eliasson@oracle.com>, Nils Loodin <nils.loodin@oracle.com>, Rickard Backman <rickard.backman@oracle.com>, Staffan Larsen <staffan.larsen@oracle.com>, Stefan Karlsson <stefan.karlsson@oracle.com>, Yekaterina Kantserova <yekaterina.kantserova@oracle.com>

*** 1,7 **** /* ! * Copyright (c) 2001, 2012, 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. --- 1,7 ---- /* ! * Copyright (c) 2001, 2013, 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.
*** 24,33 **** --- 24,34 ---- #ifndef SHARE_VM_GC_INTERFACE_COLLECTEDHEAP_HPP #define SHARE_VM_GC_INTERFACE_COLLECTEDHEAP_HPP #include "gc_interface/gcCause.hpp" + #include "gc_implementation/shared/gcWhen.hpp" #include "memory/allocation.hpp" #include "memory/barrierSet.hpp" #include "runtime/handles.hpp" #include "runtime/perfData.hpp" #include "runtime/safepoint.hpp"
*** 36,50 **** // A "CollectedHeap" is an implementation of a java heap for HotSpot. This // is an abstract class: there may be many different kinds of heaps. This // class defines the functions that a heap must implement, and contains // infrastructure common to all heaps. - class BarrierSet; - class ThreadClosure; class AdaptiveSizePolicy; ! class Thread; class CollectorPolicy; class GCMessage : public FormatBuffer<1024> { public: bool is_before; --- 37,56 ---- // A "CollectedHeap" is an implementation of a java heap for HotSpot. This // is an abstract class: there may be many different kinds of heaps. This // class defines the functions that a heap must implement, and contains // infrastructure common to all heaps. class AdaptiveSizePolicy; ! class BarrierSet; class CollectorPolicy; + class GCHeapSummary; + class GCTimer; + class GCTracer; + class MetaspaceSummary; + class Thread; + class ThreadClosure; + class VirtualSpaceSummary; class GCMessage : public FormatBuffer<1024> { public: bool is_before;
*** 126,145 **** // Reinitialize tlabs before resuming mutators. virtual void resize_all_tlabs(); // Allocate from the current thread's TLAB, with broken-out slow path. ! inline static HeapWord* allocate_from_tlab(Thread* thread, size_t size); ! static HeapWord* allocate_from_tlab_slow(Thread* thread, size_t size); // Allocate an uninitialized block of the given size, or returns NULL if // this is impossible. ! inline static HeapWord* common_mem_allocate_noinit(size_t size, TRAPS); // Like allocate_init, but the block returned by a successful allocation // is guaranteed initialized to zeros. ! inline static HeapWord* common_mem_allocate_init(size_t size, TRAPS); // Helper functions for (VM) allocation. inline static void post_allocation_setup_common(KlassHandle klass, HeapWord* obj); inline static void post_allocation_setup_no_klass_install(KlassHandle klass, HeapWord* objPtr); --- 132,151 ---- // Reinitialize tlabs before resuming mutators. virtual void resize_all_tlabs(); // Allocate from the current thread's TLAB, with broken-out slow path. ! inline static HeapWord* allocate_from_tlab(KlassHandle klass, Thread* thread, size_t size); ! static HeapWord* allocate_from_tlab_slow(KlassHandle klass, Thread* thread, size_t size); // Allocate an uninitialized block of the given size, or returns NULL if // this is impossible. ! inline static HeapWord* common_mem_allocate_noinit(KlassHandle klass, size_t size, TRAPS); // Like allocate_init, but the block returned by a successful allocation // is guaranteed initialized to zeros. ! inline static HeapWord* common_mem_allocate_init(KlassHandle klass, size_t size, TRAPS); // Helper functions for (VM) allocation. inline static void post_allocation_setup_common(KlassHandle klass, HeapWord* obj); inline static void post_allocation_setup_no_klass_install(KlassHandle klass, HeapWord* objPtr);
*** 164,173 **** --- 170,181 ---- static inline void fill_with_array(HeapWord* start, size_t words, bool zap = true); // Fill with a single object (either an int array or a java.lang.Object). static inline void fill_with_object_impl(HeapWord* start, size_t words, bool zap = true); + virtual void trace_heap(GCWhen::Type when, GCTracer* tracer); + // Verification functions virtual void check_for_bad_heap_word_value(HeapWord* addr, size_t size) PRODUCT_RETURN; virtual void check_for_non_bad_heap_word_value(HeapWord* addr, size_t size) PRODUCT_RETURN;
*** 200,211 **** virtual void post_initialize() = 0; MemRegion reserved_region() const { return _reserved; } address base() const { return (address)reserved_region().start(); } - // Future cleanup here. The following functions should specify bytes or - // heapwords as part of their signature. virtual size_t capacity() const = 0; virtual size_t used() const = 0; // Return "true" if the part of the heap that allocates Java // objects has reached the maximal committed limit that it can --- 208,217 ----
*** 548,568 **** // Perform any cleanup actions necessary before allowing a verification. virtual void prepare_for_verify() = 0; // Generate any dumps preceding or following a full gc ! void pre_full_gc_dump(); ! void post_full_gc_dump(); // Print heap information on the given outputStream. virtual void print_on(outputStream* st) const = 0; // The default behavior is to call print_on() on tty. virtual void print() const { print_on(tty); } // Print more detailed heap information on the given ! // outputStream. The default behaviour is to call print_on(). It is // up to each subclass to override it and add any additional output // it needs. virtual void print_extended_on(outputStream* st) const { print_on(st); } --- 554,579 ---- // Perform any cleanup actions necessary before allowing a verification. virtual void prepare_for_verify() = 0; // Generate any dumps preceding or following a full gc ! void pre_full_gc_dump(GCTimer* timer); ! void post_full_gc_dump(GCTimer* timer); ! ! VirtualSpaceSummary create_heap_space_summary(); ! GCHeapSummary create_heap_summary(); ! ! MetaspaceSummary create_metaspace_summary(); // Print heap information on the given outputStream. virtual void print_on(outputStream* st) const = 0; // The default behavior is to call print_on() on tty. virtual void print() const { print_on(tty); } // Print more detailed heap information on the given ! // outputStream. The default behavior is to call print_on(). It is // up to each subclass to override it and add any additional output // it needs. virtual void print_extended_on(outputStream* st) const { print_on(st); }
*** 587,613 **** // Print any relevant tracing info that flags imply. // Default implementation does nothing. virtual void print_tracing_info() const = 0; ! // If PrintHeapAtGC is set call the appropriate routi ! void print_heap_before_gc() { ! if (PrintHeapAtGC) { ! Universe::print_heap_before_gc(); ! } ! if (_gc_heap_log != NULL) { ! _gc_heap_log->log_heap_before(); ! } ! } ! void print_heap_after_gc() { ! if (PrintHeapAtGC) { ! Universe::print_heap_after_gc(); ! } ! if (_gc_heap_log != NULL) { ! _gc_heap_log->log_heap_after(); ! } ! } // Heap verification virtual void verify(bool silent, VerifyOption option) = 0; // Non product verification and debugging. --- 598,612 ---- // Print any relevant tracing info that flags imply. // Default implementation does nothing. virtual void print_tracing_info() const = 0; ! void print_heap_before_gc(); ! void print_heap_after_gc(); ! ! void trace_heap_before_gc(GCTracer* gc_tracer); ! void trace_heap_after_gc(GCTracer* gc_tracer); // Heap verification virtual void verify(bool silent, VerifyOption option) = 0; // Non product verification and debugging.
*** 617,627 **** // this->_promotion_failure_alot_count as the counter. inline bool promotion_should_fail(volatile size_t* count); inline bool promotion_should_fail(); // Reset the PromotionFailureALot counters. Should be called at the end of a ! // GC in which promotion failure ocurred. inline void reset_promotion_should_fail(volatile size_t* count); inline void reset_promotion_should_fail(); #endif // #ifndef PRODUCT #ifdef ASSERT --- 616,626 ---- // this->_promotion_failure_alot_count as the counter. inline bool promotion_should_fail(volatile size_t* count); inline bool promotion_should_fail(); // Reset the PromotionFailureALot counters. Should be called at the end of a ! // GC in which promotion failure occurred. inline void reset_promotion_should_fail(volatile size_t* count); inline void reset_promotion_should_fail(); #endif // #ifndef PRODUCT #ifdef ASSERT