easyjson icon indicating copy to clipboard operation
easyjson copied to clipboard

Avoid extra allocation using buffer pools

Open fziglio opened this issue 3 years ago • 2 comments

Inserting directly a slice into a sync.Pool object caused the allocation for an extra object every Put call. Avoid it using unsafe.Pointer to the underlying array.

fziglio avatar Apr 27 '22 08:04 fziglio

Before

cpu: Intel(R) Core(TM) i7-10510U CPU @ 1.80GHz
BenchmarkEJ_Unmarshal_M-8                   	   46212	     24631 ns/op	 528.76 MB/s	    9512 B/op	     126 allocs/op
BenchmarkEJ_Unmarshal_S-8                   	 2706932	       422.3 ns/op	 194.19 MB/s	     128 B/op	       3 allocs/op
BenchmarkEJ_Marshal_M-8                     	  123048	      9018 ns/op	 992.12 MB/s	   10317 B/op	      10 allocs/op
BenchmarkEJ_Marshal_L-8                     	    2662	    432869 ns/op	1033.59 MB/s	  458810 B/op	      29 allocs/op
BenchmarkEJ_Marshal_L_ToWriter-8            	    2616	    419877 ns/op	1065.57 MB/s	  429469 B/op	      26 allocs/op
BenchmarkEJ_Marshal_M_Parallel-8            	  377967	      3146 ns/op	4139.86 MB/s	   10286 B/op	       9 allocs/op
BenchmarkEJ_Marshal_M_ToWriter-8            	  118784	     11216 ns/op	 797.72 MB/s	    8332 B/op	       9 allocs/op
BenchmarkEJ_Marshal_M_ToWriter_Parallel-8   	  314870	      5425 ns/op	1649.16 MB/s	    8365 B/op	       9 allocs/op
BenchmarkEJ_Marshal_L_Parallel-8            	    4176	    294338 ns/op	1520.05 MB/s	  463311 B/op	      29 allocs/op
BenchmarkEJ_Marshal_L_ToWriter_Parallel-8   	    3612	    299408 ns/op	1494.32 MB/s	  430247 B/op	      26 allocs/op
BenchmarkEJ_Marshal_S-8                     	 7064870	       157.7 ns/op	 513.67 MB/s	     128 B/op	       1 allocs/op
BenchmarkEJ_Marshal_S_Parallel-8            	18573440	        86.81 ns/op	 933.10 MB/s	     128 B/op	       1 allocs/op
PASS

After

cpu: Intel(R) Core(TM) i7-10510U CPU @ 1.80GHz
BenchmarkEJ_Unmarshal_M-8                   	   42735	     24310 ns/op	 535.75 MB/s	    9512 B/op	     126 allocs/op
BenchmarkEJ_Unmarshal_S-8                   	 2920184	       420.3 ns/op	 195.09 MB/s	     128 B/op	       3 allocs/op
BenchmarkEJ_Marshal_M-8                     	  136938	      8853 ns/op	1010.66 MB/s	   10195 B/op	       5 allocs/op
BenchmarkEJ_Marshal_L-8                     	    2827	    422204 ns/op	1059.70 MB/s	  455466 B/op	       9 allocs/op
BenchmarkEJ_Marshal_L_ToWriter-8            	    2788	    410771 ns/op	1089.20 MB/s	  429380 B/op	      25 allocs/op
BenchmarkEJ_Marshal_M_Parallel-8            	  358410	      3348 ns/op	3889.56 MB/s	   10172 B/op	       4 allocs/op
BenchmarkEJ_Marshal_M_ToWriter-8            	  103680	     10921 ns/op	 819.27 MB/s	    8308 B/op	       8 allocs/op
BenchmarkEJ_Marshal_M_ToWriter_Parallel-8   	  290469	      5522 ns/op	1620.16 MB/s	    8340 B/op	       8 allocs/op
BenchmarkEJ_Marshal_L_Parallel-8            	    4010	    288841 ns/op	1548.98 MB/s	  463335 B/op	      10 allocs/op
BenchmarkEJ_Marshal_L_ToWriter_Parallel-8   	    3938	    308947 ns/op	1448.18 MB/s	  429638 B/op	      25 allocs/op
BenchmarkEJ_Marshal_S-8                     	 7016001	       160.2 ns/op	 505.67 MB/s	     128 B/op	       1 allocs/op
BenchmarkEJ_Marshal_S_Parallel-8            	11824609	        93.46 ns/op	 866.65 MB/s	     128 B/op	       1 allocs/op
PASS

fziglio avatar Aug 09 '22 08:08 fziglio

ping

fziglio avatar Nov 14 '22 13:11 fziglio