502
503 public:
504 void set_unload_classes(bool uc);
505 bool unload_classes() const;
506
507 // Delete entries for dead interned string and clean up unreferenced symbols
508 // in symbol table, possibly in parallel.
509 void unload_classes_and_cleanup_tables(bool full_gc);
510
511 // ---------- Generic interface hooks
512 // Minor things that super-interface expects us to implement to play nice with
513 // the rest of runtime. Some of the things here are not required to be implemented,
514 // and can be stubbed out.
515 //
516 public:
517 AdaptiveSizePolicy* size_policy() shenandoah_not_implemented_return(NULL);
518 bool is_maximal_no_gc() const shenandoah_not_implemented_return(false);
519
520 bool is_in(const void* p) const;
521
522 size_t obj_size(oop obj) const;
523 virtual ptrdiff_t cell_header_size() const;
524
525 void collect(GCCause::Cause cause);
526 void do_full_collection(bool clear_all_soft_refs);
527
528 // Used for parsing heap during error printing
529 HeapWord* block_start(const void* addr) const;
530 bool block_is_obj(const HeapWord* addr) const;
531
532 // Used for native heap walkers: heap dumpers, mostly
533 void object_iterate(ObjectClosure* cl);
534 void safe_object_iterate(ObjectClosure* cl);
535
536 // Used by RMI
537 jlong millis_since_last_gc();
538
539 // ---------- Safepoint interface hooks
540 //
541 public:
542 void safepoint_synchronize_begin();
543 void safepoint_synchronize_end();
544
558
559 oop pin_object(JavaThread* thread, oop obj);
560 void unpin_object(JavaThread* thread, oop obj);
561
562 // ---------- Allocation support
563 //
564 private:
565 HeapWord* allocate_memory_under_lock(ShenandoahAllocRequest& request, bool& in_new_region);
566 inline HeapWord* allocate_from_gclab(Thread* thread, size_t size);
567 HeapWord* allocate_from_gclab_slow(Thread* thread, size_t size);
568 HeapWord* allocate_new_gclab(size_t min_size, size_t word_size, size_t* actual_size);
569 void retire_and_reset_gclabs();
570
571 public:
572 HeapWord* allocate_memory(ShenandoahAllocRequest& request);
573 HeapWord* mem_allocate(size_t size, bool* what);
574 MetaWord* satisfy_failed_metadata_allocation(ClassLoaderData* loader_data,
575 size_t size,
576 Metaspace::MetadataType mdtype);
577
578 oop obj_allocate(Klass* klass, int size, TRAPS);
579 oop array_allocate(Klass* klass, int size, int length, bool do_zero, TRAPS);
580 oop class_allocate(Klass* klass, int size, TRAPS);
581
582 void notify_mutator_alloc_words(size_t words, bool waste);
583
584 // Shenandoah supports TLAB allocation
585 bool supports_tlab_allocation() const { return true; }
586
587 HeapWord* allocate_new_tlab(size_t min_size, size_t requested_size, size_t* actual_size);
588 size_t tlab_capacity(Thread *thr) const;
589 size_t unsafe_max_tlab_alloc(Thread *thread) const;
590 size_t max_tlab_size() const;
591 size_t tlab_used(Thread* ignored) const;
592
593 HeapWord* tlab_post_allocation_setup(HeapWord* obj);
594 void fill_with_dummy_object(HeapWord* start, HeapWord* end, bool zap);
595 size_t min_dummy_object_size() 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:
605 ShenandoahMarkingContext* _marking_context;
606 MemRegion _bitmap_region;
607 MemRegion _aux_bitmap_region;
608 MarkBitMap _verification_bit_map;
609 MarkBitMap _aux_bit_map;
610
611 size_t _bitmap_size;
612 size_t _bitmap_regions_per_slice;
613 size_t _bitmap_bytes_per_slice;
614
615 bool _bitmap_region_special;
|
502
503 public:
504 void set_unload_classes(bool uc);
505 bool unload_classes() const;
506
507 // Delete entries for dead interned string and clean up unreferenced symbols
508 // in symbol table, possibly in parallel.
509 void unload_classes_and_cleanup_tables(bool full_gc);
510
511 // ---------- Generic interface hooks
512 // Minor things that super-interface expects us to implement to play nice with
513 // the rest of runtime. Some of the things here are not required to be implemented,
514 // and can be stubbed out.
515 //
516 public:
517 AdaptiveSizePolicy* size_policy() shenandoah_not_implemented_return(NULL);
518 bool is_maximal_no_gc() const shenandoah_not_implemented_return(false);
519
520 bool is_in(const void* p) const;
521
522 void collect(GCCause::Cause cause);
523 void do_full_collection(bool clear_all_soft_refs);
524
525 // Used for parsing heap during error printing
526 HeapWord* block_start(const void* addr) const;
527 bool block_is_obj(const HeapWord* addr) const;
528
529 // Used for native heap walkers: heap dumpers, mostly
530 void object_iterate(ObjectClosure* cl);
531 void safe_object_iterate(ObjectClosure* cl);
532
533 // Used by RMI
534 jlong millis_since_last_gc();
535
536 // ---------- Safepoint interface hooks
537 //
538 public:
539 void safepoint_synchronize_begin();
540 void safepoint_synchronize_end();
541
555
556 oop pin_object(JavaThread* thread, oop obj);
557 void unpin_object(JavaThread* thread, oop obj);
558
559 // ---------- Allocation support
560 //
561 private:
562 HeapWord* allocate_memory_under_lock(ShenandoahAllocRequest& request, bool& in_new_region);
563 inline HeapWord* allocate_from_gclab(Thread* thread, size_t size);
564 HeapWord* allocate_from_gclab_slow(Thread* thread, size_t size);
565 HeapWord* allocate_new_gclab(size_t min_size, size_t word_size, size_t* actual_size);
566 void retire_and_reset_gclabs();
567
568 public:
569 HeapWord* allocate_memory(ShenandoahAllocRequest& request);
570 HeapWord* mem_allocate(size_t size, bool* what);
571 MetaWord* satisfy_failed_metadata_allocation(ClassLoaderData* loader_data,
572 size_t size,
573 Metaspace::MetadataType mdtype);
574
575 void notify_mutator_alloc_words(size_t words, bool waste);
576
577 // Shenandoah supports TLAB allocation
578 bool supports_tlab_allocation() const { return true; }
579
580 HeapWord* allocate_new_tlab(size_t min_size, size_t requested_size, size_t* actual_size);
581 size_t tlab_capacity(Thread *thr) const;
582 size_t unsafe_max_tlab_alloc(Thread *thread) const;
583 size_t max_tlab_size() const;
584 size_t tlab_used(Thread* ignored) const;
585
586 void resize_tlabs();
587
588 void ensure_parsability(bool retire_tlabs);
589 void make_parsable(bool retire_tlabs);
590
591 // ---------- Marking support
592 //
593 private:
594 ShenandoahMarkingContext* _marking_context;
595 MemRegion _bitmap_region;
596 MemRegion _aux_bitmap_region;
597 MarkBitMap _verification_bit_map;
598 MarkBitMap _aux_bit_map;
599
600 size_t _bitmap_size;
601 size_t _bitmap_regions_per_slice;
602 size_t _bitmap_bytes_per_slice;
603
604 bool _bitmap_region_special;
|