769 void end_archive_alloc_range(GrowableArray<MemRegion>* ranges, 770 size_t end_alignment_in_bytes = 0); 771 772 // Facility for allocating a fixed range within the heap and marking 773 // the containing regions as 'archive'. For use at JVM init time, when the 774 // caller may mmap archived heap data at the specified range(s). 775 // Verify that the MemRegions specified in the argument array are within the 776 // reserved heap. 777 bool check_archive_addresses(MemRegion* range, size_t count); 778 779 // Commit the appropriate G1 regions containing the specified MemRegions 780 // and mark them as 'archive' regions. The regions in the array must be 781 // non-overlapping and in order of ascending address. 782 bool alloc_archive_regions(MemRegion* range, size_t count); 783 784 // Insert any required filler objects in the G1 regions around the specified 785 // ranges to make the regions parseable. This must be called after 786 // alloc_archive_regions, and after class loading has occurred. 787 void fill_archive_regions(MemRegion* range, size_t count); 788 789 protected: 790 791 // Shrink the garbage-first heap by at most the given size (in bytes!). 792 // (Rounds down to a HeapRegion boundary.) 793 virtual void shrink(size_t expand_bytes); 794 void shrink_helper(size_t expand_bytes); 795 796 #if TASKQUEUE_STATS 797 static void print_taskqueue_stats_hdr(outputStream* const st = gclog_or_tty); 798 void print_taskqueue_stats(outputStream* const st = gclog_or_tty) const; 799 void reset_taskqueue_stats(); 800 #endif // TASKQUEUE_STATS 801 802 // Schedule the VM operation that will do an evacuation pause to 803 // satisfy an allocation request of word_size. *succeeded will 804 // return whether the VM operation was successful (it did do an 805 // evacuation pause) or not (another thread beat us to it or the GC 806 // locker was active). Given that we should not be holding the 807 // Heap_lock when we enter this method, we will pass the 808 // gc_count_before (i.e., total_collections()) as a parameter since | 769 void end_archive_alloc_range(GrowableArray<MemRegion>* ranges, 770 size_t end_alignment_in_bytes = 0); 771 772 // Facility for allocating a fixed range within the heap and marking 773 // the containing regions as 'archive'. For use at JVM init time, when the 774 // caller may mmap archived heap data at the specified range(s). 775 // Verify that the MemRegions specified in the argument array are within the 776 // reserved heap. 777 bool check_archive_addresses(MemRegion* range, size_t count); 778 779 // Commit the appropriate G1 regions containing the specified MemRegions 780 // and mark them as 'archive' regions. The regions in the array must be 781 // non-overlapping and in order of ascending address. 782 bool alloc_archive_regions(MemRegion* range, size_t count); 783 784 // Insert any required filler objects in the G1 regions around the specified 785 // ranges to make the regions parseable. This must be called after 786 // alloc_archive_regions, and after class loading has occurred. 787 void fill_archive_regions(MemRegion* range, size_t count); 788 789 // For each of the specified MemRegions, free the containing G1 regions 790 // which had been allocated by alloc_archive_regions. This should be called 791 // rather than fill_archive_regions at JVM init time if the archive file 792 // mapping failed. 793 void free_archive_regions(MemRegion* range, size_t count); 794 795 protected: 796 797 // Shrink the garbage-first heap by at most the given size (in bytes!). 798 // (Rounds down to a HeapRegion boundary.) 799 virtual void shrink(size_t expand_bytes); 800 void shrink_helper(size_t expand_bytes); 801 802 #if TASKQUEUE_STATS 803 static void print_taskqueue_stats_hdr(outputStream* const st = gclog_or_tty); 804 void print_taskqueue_stats(outputStream* const st = gclog_or_tty) const; 805 void reset_taskqueue_stats(); 806 #endif // TASKQUEUE_STATS 807 808 // Schedule the VM operation that will do an evacuation pause to 809 // satisfy an allocation request of word_size. *succeeded will 810 // return whether the VM operation was successful (it did do an 811 // evacuation pause) or not (another thread beat us to it or the GC 812 // locker was active). Given that we should not be holding the 813 // Heap_lock when we enter this method, we will pass the 814 // gc_count_before (i.e., total_collections()) as a parameter since |