diff options
author | Björn-Egil Dahlberg <[email protected]> | 2014-01-09 18:46:36 +0100 |
---|---|---|
committer | Björn-Egil Dahlberg <[email protected]> | 2014-01-09 18:46:36 +0100 |
commit | 79355961135bb107a01b0a7e4668818f58327d99 (patch) | |
tree | 7c94f1b16d241f0a41f2d111b8bb732c3d1cffcc | |
parent | 006df089ffd6c024a4f5099d27ebcda5a684f0ef (diff) | |
download | otp-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.c | 2 |
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); |