When I was reading https://github.com/spring-projects/spring-framework/pull/24870, I noticed that String instantiation in StringUtils.deleteAny() isn't necessary when nothing is deleted. So this PR changes to avoid it.
This is a straightforward change, but I just ran the same benchmark used in https://github.com/spring-projects/spring-framework/pull/24870. The result is as follows:
Benchmark Mode Cnt Score Error Units
SpringStringUtilsDeleteAnyBenchmark.original avgt 68.215 ns/op
SpringStringUtilsDeleteAnyBenchmark.original:·gc.alloc.rate avgt 1384.675 MB/sec
SpringStringUtilsDeleteAnyBenchmark.original:·gc.alloc.rate.norm avgt 104.000 B/op
SpringStringUtilsDeleteAnyBenchmark.original:·gc.churn.PS_Eden_Space avgt 1359.258 MB/sec
SpringStringUtilsDeleteAnyBenchmark.original:·gc.churn.PS_Eden_Space.norm avgt 102.091 B/op
SpringStringUtilsDeleteAnyBenchmark.original:·gc.churn.PS_Survivor_Space avgt 0.048 MB/sec
SpringStringUtilsDeleteAnyBenchmark.original:·gc.churn.PS_Survivor_Space.norm avgt 0.004 B/op
SpringStringUtilsDeleteAnyBenchmark.original:·gc.count avgt 21.000 counts
SpringStringUtilsDeleteAnyBenchmark.original:·gc.time avgt 12.000 ms
SpringStringUtilsDeleteAnyBenchmark.patched avgt 20.938 ns/op
SpringStringUtilsDeleteAnyBenchmark.patched:·gc.alloc.rate avgt 4510.715 MB/sec
SpringStringUtilsDeleteAnyBenchmark.patched:·gc.alloc.rate.norm avgt 104.000 B/op
SpringStringUtilsDeleteAnyBenchmark.patched:·gc.churn.PS_Eden_Space avgt 4477.181 MB/sec
SpringStringUtilsDeleteAnyBenchmark.patched:·gc.churn.PS_Eden_Space.norm avgt 103.227 B/op
SpringStringUtilsDeleteAnyBenchmark.patched:·gc.churn.PS_Survivor_Space avgt 0.074 MB/sec
SpringStringUtilsDeleteAnyBenchmark.patched:·gc.churn.PS_Survivor_Space.norm avgt 0.002 B/op
SpringStringUtilsDeleteAnyBenchmark.patched:·gc.count avgt 69.000 counts
SpringStringUtilsDeleteAnyBenchmark.patched:·gc.time avgt 38.000 ms
SpringStringUtilsDeleteAnyBenchmark.patchedSkipNewStringWhenNothingDeleted avgt 13.284 ns/op
SpringStringUtilsDeleteAnyBenchmark.patchedSkipNewStringWhenNothingDeleted:·gc.alloc.rate avgt 2734.452 MB/sec
SpringStringUtilsDeleteAnyBenchmark.patchedSkipNewStringWhenNothingDeleted:·gc.alloc.rate.norm avgt 40.000 B/op
SpringStringUtilsDeleteAnyBenchmark.patchedSkipNewStringWhenNothingDeleted:·gc.churn.PS_Eden_Space avgt 2788.360 MB/sec
SpringStringUtilsDeleteAnyBenchmark.patchedSkipNewStringWhenNothingDeleted:·gc.churn.PS_Eden_Space.norm avgt 40.789 B/op
SpringStringUtilsDeleteAnyBenchmark.patchedSkipNewStringWhenNothingDeleted:·gc.churn.PS_Survivor_Space avgt 0.036 MB/sec
SpringStringUtilsDeleteAnyBenchmark.patchedSkipNewStringWhenNothingDeleted:·gc.churn.PS_Survivor_Space.norm avgt 0.001 B/op
SpringStringUtilsDeleteAnyBenchmark.patchedSkipNewStringWhenNothingDeleted:·gc.count avgt 43.000 counts
SpringStringUtilsDeleteAnyBenchmark.patchedSkipNewStringWhenNothingDeleted:·gc.time avgt 22.000 ms
Comment From: sbrannen
This has been merged into master.
Thanks