In HeapGrowthManager.computeHeapChangeRatio(), the current implementation determines the heap size change ratio by a lookup in the 2-dimensional function table (indexed by liveRatio and gcLoad). Given a current liveRatio X and gcLoad Y, the code finds the table rows and columns with nearest values above and below X and Y, then does interpolation from these table lookup values to determine the heap size change ratio.

However, there is a bug in the interpolation. If X (or Y, respectively) is exactly equal to a row (or column, respectively) label value, then the interpolation still happens, between values in rows (cols) either side of row X (col Y). This leads to discontinuities in the heap sizing function - see attached graphs.

The submitted patch suppresses interpolation (interpolation correction value becomes 0) in the case where X or Y falls on a label value exactly, so avoiding the discontinuity.

affects all.

Show:

DaveG

January 20, 2012, 6:10 PM

Hi Jeremy. It looks like the attached patch is corrupted or in an unexpected format. Could you try again?

thanks,

--dave

Erik Brangs

January 20, 2012, 6:31 PM

The command line

works for me (with warnings).

DaveG

January 20, 2012, 8:04 PM

patch applied in 10423:ea1671436257

DaveG

February 9, 2013, 10:50 PM

bulk close of all resolved issues in preparation for 3.1.3 release.