Bug #9137
closedRUBY_FREE_MIN is not enforced correctly
Description
At the moment setting RUBY_FREE_MIN does not work as expected:
All it does is cause heap_set_increment to be triggered more aggressively. heap_set_increment totally ignores it. The end result is
sam@ubuntu:~/Source/ruby$ RUBY_FREE_MIN=$(( 4081000 )) ruby -e "GC.start; p GC.count; (800408).times{ '' }; p GC.count"
5
12
So the GC ran 7 times even though we should have heap space to fit the free min.
With this patch: https://github.com/SamSaffron/ruby/commit/b84e11c85b9fcde65dfc9347427e720307ef5a62 we can correct the behavior
sam@ubuntu:~/Source/ruby$ RUBY_FREE_MIN=$(( 4081000 )) ruby -e "GC.start; p GC.count; (800408).times{ '' }; p GC.count"
5
5
Updated by sam.saffron (Sam Saffron) about 11 years ago
sorry, had to squash my patch and remove a printf ... it is now at: https://github.com/SamSaffron/ruby/commit/b60d32ad1da648a305b54859c300927603026db9
Updated by ko1 (Koichi Sasada) about 11 years ago
- Status changed from Open to Closed
- % Done changed from 0 to 100
This issue was solved with changeset r43795.
Sam, thank you for reporting this issue.
Your contribution to Ruby is greatly appreciated.
May Ruby be with you.
- gc.c (heap_set_increment): accept minumum additional page number.
- gc.c (gc_after_sweep): allocate pages to allocate at least
RUBY_HEAP_MIN_SLOTS.
[Bug #9137]