494 // failed allocation request (including collection, expansion, etc.) 495 HeapWord* satisfy_failed_allocation(size_t word_size, 496 AllocationContext_t context, 497 bool* succeeded); 498 private: 499 // Helper method for satisfy_failed_allocation() 500 HeapWord* satisfy_failed_allocation_helper(size_t word_size, 501 AllocationContext_t context, 502 bool do_gc, 503 bool clear_all_soft_refs, 504 bool expect_null_mutator_alloc_region, 505 bool* gc_succeeded); 506 507 protected: 508 // Attempting to expand the heap sufficiently 509 // to support an allocation of the given "word_size". If 510 // successful, perform the allocation and return the address of the 511 // allocated block, or else "NULL". 512 HeapWord* expand_and_allocate(size_t word_size, AllocationContext_t context); 513 514 // Process any reference objects discovered during 515 // an incremental evacuation pause. 516 void process_discovered_references(G1ParScanThreadStateSet* per_thread_states); 517 518 // Enqueue any remaining discovered references 519 // after processing. 520 void enqueue_discovered_references(G1ParScanThreadStateSet* per_thread_states); 521 522 public: 523 WorkGang* workers() const { return _workers; } 524 525 G1Allocator* allocator() { 526 return _allocator; 527 } 528 529 G1HeapVerifier* verifier() { 530 return _verifier; 531 } 532 533 G1MonitoringSupport* g1mm() { 534 assert(_g1mm != NULL, "should have been initialized"); 535 return _g1mm; 536 } 537 538 // Expand the garbage-first heap by at least the given size (in bytes!). 539 // Returns true if the heap was expanded by the requested amount; 540 // false otherwise. 541 // (Rounds up to a HeapRegion boundary.) | 494 // failed allocation request (including collection, expansion, etc.) 495 HeapWord* satisfy_failed_allocation(size_t word_size, 496 AllocationContext_t context, 497 bool* succeeded); 498 private: 499 // Helper method for satisfy_failed_allocation() 500 HeapWord* satisfy_failed_allocation_helper(size_t word_size, 501 AllocationContext_t context, 502 bool do_gc, 503 bool clear_all_soft_refs, 504 bool expect_null_mutator_alloc_region, 505 bool* gc_succeeded); 506 507 protected: 508 // Attempting to expand the heap sufficiently 509 // to support an allocation of the given "word_size". If 510 // successful, perform the allocation and return the address of the 511 // allocated block, or else "NULL". 512 HeapWord* expand_and_allocate(size_t word_size, AllocationContext_t context); 513 514 // Preserve any referents discovered by concurrent marking that have not yet been 515 // copied by the STW pause. 516 void preserve_cm_referents(G1ParScanThreadStateSet* per_thread_states); 517 // Process any reference objects discovered during 518 // an incremental evacuation pause. 519 void process_discovered_references(G1ParScanThreadStateSet* per_thread_states); 520 521 // Enqueue any remaining discovered references 522 // after processing. 523 void enqueue_discovered_references(G1ParScanThreadStateSet* per_thread_states); 524 525 // Merges the information gathered on a per-thread basis for all worker threads 526 // during GC into global variables. 527 void merge_per_thread_state_info(G1ParScanThreadStateSet* per_thread_states); 528 public: 529 WorkGang* workers() const { return _workers; } 530 531 G1Allocator* allocator() { 532 return _allocator; 533 } 534 535 G1HeapVerifier* verifier() { 536 return _verifier; 537 } 538 539 G1MonitoringSupport* g1mm() { 540 assert(_g1mm != NULL, "should have been initialized"); 541 return _g1mm; 542 } 543 544 // Expand the garbage-first heap by at least the given size (in bytes!). 545 // Returns true if the heap was expanded by the requested amount; 546 // false otherwise. 547 // (Rounds up to a HeapRegion boundary.) |