aboutsummaryrefslogtreecommitdiffstats
path: root/erts/emulator/beam/erl_gc.c
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 /erts/emulator/beam/erl_gc.c
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.
Diffstat (limited to 'erts/emulator/beam/erl_gc.c')
-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);