15 * 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 USA
19 * or visit www.oracle.com if you need additional information or have any
20 * questions.
21 *
22 */
23
24 #ifndef SHARE_GC_SHENANDOAH_SHENANDOAHHEAP_HPP
25 #define SHARE_GC_SHENANDOAH_SHENANDOAHHEAP_HPP
26
27 #include "gc/shared/markBitMap.hpp"
28 #include "gc/shared/softRefPolicy.hpp"
29 #include "gc/shared/collectedHeap.hpp"
30 #include "gc/shenandoah/shenandoahAsserts.hpp"
31 #include "gc/shenandoah/shenandoahAllocRequest.hpp"
32 #include "gc/shenandoah/shenandoahLock.hpp"
33 #include "gc/shenandoah/shenandoahEvacOOMHandler.hpp"
34 #include "gc/shenandoah/shenandoahSharedVariables.hpp"
35 #include "services/memoryManager.hpp"
36
37 class ConcurrentGCTimer;
38 class ReferenceProcessor;
39 class ShenandoahAllocTracker;
40 class ShenandoahCollectorPolicy;
41 class ShenandoahControlThread;
42 class ShenandoahGCSession;
43 class ShenandoahGCStateResetter;
44 class ShenandoahHeuristics;
45 class ShenandoahMarkingContext;
46 class ShenandoahMode;
47 class ShenandoahPhaseTimings;
48 class ShenandoahHeap;
49 class ShenandoahHeapRegion;
50 class ShenandoahHeapRegionClosure;
51 class ShenandoahCollectionSet;
52 class ShenandoahFreeSet;
53 class ShenandoahConcurrentMark;
54 class ShenandoahMarkCompact;
564 // Shenandoah supports per-object (per-region) pinning
565 bool supports_object_pinning() const { return true; }
566
567 oop pin_object(JavaThread* thread, oop obj);
568 void unpin_object(JavaThread* thread, oop obj);
569
570 // ---------- Allocation support
571 //
572 private:
573 HeapWord* allocate_memory_under_lock(ShenandoahAllocRequest& request, bool& in_new_region);
574 inline HeapWord* allocate_from_gclab(Thread* thread, size_t size);
575 HeapWord* allocate_from_gclab_slow(Thread* thread, size_t size);
576 HeapWord* allocate_new_gclab(size_t min_size, size_t word_size, size_t* actual_size);
577 void retire_and_reset_gclabs();
578
579 public:
580 HeapWord* allocate_memory(ShenandoahAllocRequest& request);
581 HeapWord* mem_allocate(size_t size, bool* what);
582 MetaWord* satisfy_failed_metadata_allocation(ClassLoaderData* loader_data,
583 size_t size,
584 Metaspace::MetadataType mdtype);
585
586 void notify_mutator_alloc_words(size_t words, bool waste);
587
588 // Shenandoah supports TLAB allocation
589 bool supports_tlab_allocation() const { return true; }
590
591 HeapWord* allocate_new_tlab(size_t min_size, size_t requested_size, size_t* actual_size);
592 size_t tlab_capacity(Thread *thr) const;
593 size_t unsafe_max_tlab_alloc(Thread *thread) const;
594 size_t max_tlab_size() const;
595 size_t tlab_used(Thread* ignored) const;
596
597 void resize_tlabs();
598
599 void ensure_parsability(bool retire_tlabs);
600 void make_parsable(bool retire_tlabs);
601
602 // ---------- Marking support
603 //
604 private:
|
15 * 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 USA
19 * or visit www.oracle.com if you need additional information or have any
20 * questions.
21 *
22 */
23
24 #ifndef SHARE_GC_SHENANDOAH_SHENANDOAHHEAP_HPP
25 #define SHARE_GC_SHENANDOAH_SHENANDOAHHEAP_HPP
26
27 #include "gc/shared/markBitMap.hpp"
28 #include "gc/shared/softRefPolicy.hpp"
29 #include "gc/shared/collectedHeap.hpp"
30 #include "gc/shenandoah/shenandoahAsserts.hpp"
31 #include "gc/shenandoah/shenandoahAllocRequest.hpp"
32 #include "gc/shenandoah/shenandoahLock.hpp"
33 #include "gc/shenandoah/shenandoahEvacOOMHandler.hpp"
34 #include "gc/shenandoah/shenandoahSharedVariables.hpp"
35 #include "memory/metaspace/metaspaceEnums.hpp"
36 #include "services/memoryManager.hpp"
37
38 class ConcurrentGCTimer;
39 class ReferenceProcessor;
40 class ShenandoahAllocTracker;
41 class ShenandoahCollectorPolicy;
42 class ShenandoahControlThread;
43 class ShenandoahGCSession;
44 class ShenandoahGCStateResetter;
45 class ShenandoahHeuristics;
46 class ShenandoahMarkingContext;
47 class ShenandoahMode;
48 class ShenandoahPhaseTimings;
49 class ShenandoahHeap;
50 class ShenandoahHeapRegion;
51 class ShenandoahHeapRegionClosure;
52 class ShenandoahCollectionSet;
53 class ShenandoahFreeSet;
54 class ShenandoahConcurrentMark;
55 class ShenandoahMarkCompact;
565 // Shenandoah supports per-object (per-region) pinning
566 bool supports_object_pinning() const { return true; }
567
568 oop pin_object(JavaThread* thread, oop obj);
569 void unpin_object(JavaThread* thread, oop obj);
570
571 // ---------- Allocation support
572 //
573 private:
574 HeapWord* allocate_memory_under_lock(ShenandoahAllocRequest& request, bool& in_new_region);
575 inline HeapWord* allocate_from_gclab(Thread* thread, size_t size);
576 HeapWord* allocate_from_gclab_slow(Thread* thread, size_t size);
577 HeapWord* allocate_new_gclab(size_t min_size, size_t word_size, size_t* actual_size);
578 void retire_and_reset_gclabs();
579
580 public:
581 HeapWord* allocate_memory(ShenandoahAllocRequest& request);
582 HeapWord* mem_allocate(size_t size, bool* what);
583 MetaWord* satisfy_failed_metadata_allocation(ClassLoaderData* loader_data,
584 size_t size,
585 metaspace::MetadataType mdtype);
586
587 void notify_mutator_alloc_words(size_t words, bool waste);
588
589 // Shenandoah supports TLAB allocation
590 bool supports_tlab_allocation() const { return true; }
591
592 HeapWord* allocate_new_tlab(size_t min_size, size_t requested_size, size_t* actual_size);
593 size_t tlab_capacity(Thread *thr) const;
594 size_t unsafe_max_tlab_alloc(Thread *thread) const;
595 size_t max_tlab_size() const;
596 size_t tlab_used(Thread* ignored) const;
597
598 void resize_tlabs();
599
600 void ensure_parsability(bool retire_tlabs);
601 void make_parsable(bool retire_tlabs);
602
603 // ---------- Marking support
604 //
605 private:
|