Thanks for your repro.
I can't reproduce your findings. The memory usage for your sample stabalises at 2.197g RSS on my machine according to top(1). This matches the output of GODEBUG=gctrace=1 which shows heap size growing to 2048mb.
If I modify your example to pause after the last iteration I can see the scavenger release 100% of the heap.
2014/12/31 17:13:46 Decoding Json with text length 67108864
2014/12/31 17:13:47 Decoding Json with text length 134217728
gc137(1): 125+0+77+0 us, 1024 -> 2048 MB, 546 (5940-5394) objects, 4 goroutines, 219/1/0 sweeps, 0(0) handoff, 0(0) steal, 0/0/0 yields
gc138(1): 362+0+108+0 us, 2048 -> 2048 MB, 546 (5940-5394) objects, 4 goroutines, 219/0/0 sweeps, 0(0) handoff, 0(0) steal, 0/0/0 yields
gc139(1): 135+0+63+0 us, 224 -> 608 MB, 110 (5942-5832) objects, 4 goroutines, 219/41/0 sweeps, 0(0) handoff, 0(0) steal, 0/0/0 yields
gc140(1): 338+0+104+0 us, 608 -> 608 MB, 110 (5942-5832) objects, 4 goroutines, 219/0/0 sweeps, 0(0) handoff, 0(0) steal, 0/0/0 yields
2014/12/31 17:13:49 Decoding Json with text length 268435456
gc141(1): 124+0+73+0 us, 512 -> 1152 MB, 136 (5979-5843) objects, 4 goroutines, 219/25/0 sweeps, 0(0) handoff, 0(0) steal, 0/0/0 yields
gc142(1): 342+0+107+0 us, 1152 -> 1152 MB, 136 (5979-5843) objects, 4 goroutines, 219/0/0 sweeps, 0(0) handoff, 0(0) steal, 0/0/0 yields
gc143(1): 122+0+59+0 us, 448 -> 1216 MB, 110 (5981-5871) objects, 4 goroutines, 219/37/0 sweeps, 0(0) handoff, 0(0) steal, 0/0/0 yields
gc144(1): 340+0+108+0 us, 1216 -> 1216 MB, 110 (5981-5871) objects, 4 goroutines, 219/0/0 sweeps, 0(0) handoff, 0(0) steal, 0/0/0 yields
scvg0: inuse: 1280, idle: 834, sys: 2114, released: 0, consumed: 2114 (MB)
GC forced
gc145(1): 12+7+504+3 us, 1024 -> 1280 MB, 112 (5992-5880) objects, 5 goroutines, 219/25/0 sweeps, 0(0) handoff, 0(0) steal, 0/0/0 yields
gc146(1): 688+1+398+2 us, 1280 -> 1280 MB, 112 (5992-5880) objects, 5 goroutines, 219/0/0 sweeps, 0(0) handoff, 0(0) steal, 0/0/0 yields
scvg1: inuse: 0, idle: 2114, sys: 2114, released: 0, consumed: 2114 (MB)
GC forced
gc147(1): 11+7+434+1 us, 0 -> 0 MB, 101 (5992-5891) objects, 5 goroutines, 219/25/0 sweeps, 0(0) handoff, 0(0) steal, 0/0/0 yields
gc148(1): 623+2+387+1 us, 0 -> 0 MB, 101 (5992-5891) objects, 5 goroutines, 219/0/0 sweeps, 0(0) handoff, 0(0) steal, 0/0/0 yields
I am not 100% sure, but the 'leak' you see may be coming from heap profiling itself; the profile data has to go somewhere.