RFR: 8316681: Rewrite URLEncoder.encode to use small reusable buffers

温绍锦 duke at openjdk.org
Sun Sep 24 20:47:19 UTC 2023


On Thu, 21 Sep 2023 14:36:03 GMT, Claes Redestad <redestad at openjdk.org> wrote:

> Micros show a small throughput win and a large allocation reduction for variants that need to change the URL either partially or completely, and no regression when the URL remains unchanged:
> 
> ```
> Name                             (unchanged) Cnt        Base    Error         Test    Error   Unit   Diff%
> URLEncodeDecode.testEncodeLatin1           0  15       3.471 ±  0.103        2.796 ±  0.078  ms/op   19.5% (p = 0.000*)
>   :gc.alloc.rate                                     828.462 ± 25.054      673.090 ± 19.214 MB/sec  -18.8% (p = 0.000*)
>   :gc.alloc.rate.norm                            3013680.062 ±  0.721  1972347.384 ±  0.540   B/op  -34.6% (p = 0.000*)
>   :gc.count                                           20.000                17.000          counts
>   :gc.time                                            16.000                15.000              ms
> URLEncodeDecode.testEncodeLatin1          75  15       1.269 ±  0.028        1.132 ±  0.029  ms/op   10.8% (p = 0.000*)
>   :gc.alloc.rate                                     606.924 ± 12.993      443.802 ± 11.184 MB/sec  -26.9% (p = 0.000*)
>   :gc.alloc.rate.norm                             807656.807 ±  0.191   526711.840 ±  0.197   B/op  -34.8% (p = 0.000*)
>   :gc.count                                           16.000                11.000          counts
>   :gc.time                                            16.000                10.000              ms
> URLEncodeDecode.testEncodeLatin1         100  15       0.542 ±  0.000        0.542 ±  0.000  ms/op   -0.0% (p = 0.932 )
>   :gc.alloc.rate                                       0.007 ±  0.000        0.007 ±  0.000 MB/sec    0.0% (p = 0.358 )
>   :gc.alloc.rate.norm                                  3.730 ±  0.004        3.731 ±  0.001   B/op    0.0% (p = 0.356 )
>   :gc.count                                            0.000                 0.000          counts
> URLEncodeDecode.testEncodeUTF8             0  15       3.469 ±  0.137        2.678 ±  0.023  ms/op   22.8% (p = 0.000*)
>   :gc.alloc.rate                                     843.593 ± 32.562      711.747 ±  6.147 MB/sec  -15.6% (p = 0.000*)
>   :gc.alloc.rate.norm                            3065136.041 ±  0.948  1999098.562 ±  0.161   B/op  -34.8% (p = 0.000*)
>   :gc.count                                           22.000                18.000          counts
>   :gc.time                                            20.000                15.000              ms
> URLEncodeDecode.testEncodeUTF8            75  15       1.337 ±  0.031        1.192 ±  0.107  ms/op   10.8% (p = 0.000*)
>   :gc.alloc.rate                                     586.133 ± 13.420      429.661 ± 36.595 MB/sec  -26.7% (p = 0.000*)
>   :gc.alloc.rate.norm                             821529.273 ±  0.216   533888.255 ±  0.744   B/op  -35.0% (p = 0.000*)
>   :gc.count                                           15.000                11.000          counts
>   :gc.time                                            10.000                10.000              ms
> URLEncodeDecode.testEncodeUTF8           100  15       0.542 ±  0.000        0.541 ±  0.000  ms/op    0.1% (p = 0.000*)
>   :gc.alloc.rate                                       0.007 ±  0.000        0.007 ±  0.000 MB/sec    0.0% (p = 0.771 )
>   :gc.alloc.rate.norm                                  3.731 ±  0.001        3.727 ±  0.002   B/op   -0.1% (p = 0.000*)
>   :gc.count                                            0.000                 0.000          counts
>   * = significant
> ```

Can you share how to generate this kind of diff report? What I am doing now is to run the baseline and the current version separately, and then use the processing program I wrote to generate the diff report. Can you share your experience?

-------------

PR Comment: https://git.openjdk.org/jdk/pull/15865#issuecomment-1732665371


More information about the net-dev mailing list