Actions
Bug #5946
closedRemove too early and unnecessary calls to heaps_increment
    Bug #5946:
    Remove too early and unnecessary calls to heaps_increment
  
Description
Too early call in lazy_sweep slows down sweep phase, cause while loop breaks on if (has_free_object) { ... return TRUE;} .
Heap expand in gc_clear_mark_on_sweep_slots unnecessary expands number of heaps, which slows down iterations in rb_objspace_call_finalizer, and gc_marks (cause we often need to binary search heap for pointer).
Testing suit: https://gist.github.com/1702301
Before:
$ sh siege.sh
Transaction rate:	      114.71 trans/sec
Transaction rate:	      117.84 trans/sec
Transaction rate:	      121.62 trans/sec
$ sh siege.sh
Transaction rate:	      118.72 trans/sec
Transaction rate:	      120.32 trans/sec
Transaction rate:	      121.12 trans/sec
After:
$ sh siege.sh
Transaction rate:	      121.62 trans/sec
Transaction rate:	      122.12 trans/sec
Transaction rate:	      123.12 trans/sec
$ sh siege.sh
Transaction rate:	      123.25 trans/sec
Transaction rate:	      121.94 trans/sec
Transaction rate:	      123.52 trans/sec
  
Actions