• Dmitry Vyukov's avatar
    reflect: cache call frames · 67f8a813
    Dmitry Vyukov authored
    Call frame allocations can account for significant portion
    of all allocations in a program, if call is executed
    in an inner loop (e.g. to process every line in a log).
    On the other hand, the allocation is easy to remove
    using sync.Pool since the allocation is strictly scoped.
    
    benchmark           old ns/op     new ns/op     delta
    BenchmarkCall       634           338           -46.69%
    BenchmarkCall-4     496           167           -66.33%
    
    benchmark           old allocs     new allocs     delta
    BenchmarkCall       1              0              -100.00%
    BenchmarkCall-4     1              0              -100.00%
    
    Update #7818
    
    Change-Id: Icf60cce0a9be82e6171f0c0bd80dee2393db54a7
    Reviewed-on: https://go-review.googlesource.com/1954Reviewed-by: 's avatarKeith Randall <khr@golang.org>
    67f8a813
type.go 52.3 KB