aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBjörn-Egil Dahlberg <[email protected]>2014-01-09 18:46:36 +0100
committerBjörn-Egil Dahlberg <[email protected]>2014-01-09 18:46:36 +0100
commit79355961135bb107a01b0a7e4668818f58327d99 (patch)
tree7c94f1b16d241f0a41f2d111b8bb732c3d1cffcc
parent006df089ffd6c024a4f5099d27ebcda5a684f0ef (diff)
downloadotp-79355961135bb107a01b0a7e4668818f58327d99.tar.gz
otp-79355961135bb107a01b0a7e4668818f58327d99.tar.bz2
otp-79355961135bb107a01b0a7e4668818f58327d99.zip
erts: Increase gc tenure rate
The garbage collector tries to maintain the previous heap block size during a minor gc, i.e. 'need' is not utilized in determining the size of the new heap, instead it relies on tenure and garbage to be sufficiently large. In instances during intense growing with exlusively live data on the heap coupled with delayed tenure, fullsweeps would be triggered directly after a minor gc to make room for 'need' since the new heap would be full. To remedy this, the tenure of terms on the minor heap will always happen (if it is below the high watermark) instead of every other minor gc.
-rw-r--r--erts/emulator/beam/erl_gc.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/erts/emulator/beam/erl_gc.c b/erts/emulator/beam/erl_gc.c
index c5585d39e8..fd86c658d6 100644
--- a/erts/emulator/beam/erl_gc.c
+++ b/erts/emulator/beam/erl_gc.c
@@ -1157,7 +1157,7 @@ do_minor(Process *p, Uint new_sz, Eterm* objv, int nobj)
old_htop = sweep_one_area(OLD_HTOP(p), old_htop, heap, heap_size);
}
OLD_HTOP(p) = old_htop;
- HIGH_WATER(p) = (HEAP_START(p) != HIGH_WATER(p)) ? n_heap : n_htop;
+ HIGH_WATER(p) = n_htop;
if (MSO(p).first) {
sweep_off_heap(p, 0);