--- old/src/share/vm/gc_implementation/g1/heapRegionManager.cpp 2014-08-28 11:44:20.799720515 +0200 +++ new/src/share/vm/gc_implementation/g1/heapRegionManager.cpp 2014-08-28 11:44:20.733718575 +0200 @@ -351,10 +351,6 @@ while ((removed < num_regions_to_remove) && (num_last_found = find_empty_from_idx_reverse(cur, &idx_last_found)) > 0) { - // Only allow uncommit from the end of the heap. - if ((idx_last_found + num_last_found) != _allocated_heapregions_length) { - return 0; - } uint to_remove = MIN2(num_regions_to_remove - removed, num_last_found); uncommit_regions(idx_last_found + num_last_found - to_remove, to_remove); --- old/test/gc/g1/TestHumongousShrinkHeap.java 2014-08-28 11:44:21.162731185 +0200 +++ new/test/gc/g1/TestHumongousShrinkHeap.java 2014-08-28 11:44:21.096729245 +0200 @@ -23,7 +23,7 @@ /** * @test TestHumongousShrinkHeap - * @bug 8036025 + * @bug 8036025 8056043 * @summary Verify that heap shrinks after GC in the presence of fragmentation due to humongous objects * @library /testlibrary * @run main/othervm -XX:MinHeapFreeRatio=10 -XX:MaxHeapFreeRatio=50 -XX:+UseG1GC -XX:G1HeapRegionSize=1M -verbose:gc TestHumongousShrinkHeap