If your available memory is less than five times the working-set size, GC is less efficient than some sort of malloc/free perhaps with reference counting
Where did you get this 5x number? As for reference counting, that's rather time-expensive, and does horrible things to the cache in multi-threaded scenarios.
The reference counting would only be used in certain cases where the dynamic extent of the object is unknown. Most objects can be cleaned up with an implicit management scheme like the RAII pattern in C++.
If your available memory is less than five times the working-set size, GC is less efficient than some sort of malloc/free perhaps with reference counting