United StatesChange Country, Oracle Worldwide Web Sites Communities I am a... I want to...
Bug ID: JDK-7007446 G1: expand the heap with a single step, not one region at a time
JDK-7007446 : G1: expand the heap with a single step, not one region at a time

Details
Type:
Enhancement
Submit Date:
2010-12-16
Status:
Closed
Updated Date:
2011-03-08
Project Name:
JDK
Resolved Date:
2011-03-08
Component:
hotspot
OS:
generic
Sub-Component:
gc
CPU:
generic
Priority:
P4
Resolution:
Fixed
Affected Versions:
hs20
Fixed Versions:
hs21 (b02)

Related Reports
Backport:
Relates:

Sub Tasks

Description
Currently, when we expand the heap in G1 we expand it one region at a time, even if we are going to expand it by a multiple of regions. We might want to optimize that and expand it in a more coarse-grain manner (at least by a multiple of the page size at a time?). I don't think this is a big performance bottleneck. But maybe expanding one region at a time, when large pages are used, might reduce G1's ability to use large pages.

                                    

Comments
SUGGESTED FIX

Call VirtualSpace::expand_by once for the entire expansion ammount - rather than for each heap region. If the expansion succeeds then create the heap regions, add them to the free list and update the G1 memory regions.
                                     
2011-02-02
EVALUATION

This RFE was addressed fixed as part of the changes for 6923430:

Changeset: c33825b68624
Author:    johnc
Date:      2011-02-02 10:41 -0800
URL:       http://hg.openjdk.java.net/jdk7/hotspot-gc/hotspot/rev/c33825b68624

6923430: G1: assert(res != 0,"This should have worked.")
7007446: G1: expand the heap with a single step, not one region at a time
Summary: Changed G1CollectedHeap::expand() to expand the committed space by calling VirtualSpace::expand_by() once rather than for every region in the expansion amount. This allows the success or failure of the expansion to be determined before creating any heap regions. Introduced a develop flag G1ExitOnExpansionFailure (false by default) that, when true, will exit the VM if the expansion of the committed space fails. Finally G1CollectedHeap::expand() returns a status back to it's caller so that the caller knows whether to attempt the allocation.
Reviewed-by: brutisso, tonyp

! src/share/vm/gc_implementation/g1/concurrentG1Refine.cpp
! src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp
! src/share/vm/gc_implementation/g1/g1CollectedHeap.hpp
! src/share/vm/gc_implementation/g1/g1CollectorPolicy.cpp
! src/share/vm/gc_implementation/g1/g1RemSet.cpp
! src/share/vm/gc_implementation/g1/g1_globals.hpp
                                     
2011-02-02



Hardware and Software, Engineered to Work Together