RFR: 8378698: Optimize Base64.Encoder#encodeToString [v2]

Patrick Strawderman duke at openjdk.org
Fri Feb 27 00:38:09 UTC 2026


On Thu, 26 Feb 2026 22:32:23 GMT, Chen Liang <liach at openjdk.org> wrote:

> Apparently the new benchmark takes 33 mins to be fully run. I recommend reducing the iterations as done in https://bugs.openjdk.org/browse/JDK-8287810.

Whoops, I just used the defaults. I've changed it to be more in line with the other benchmarks.

I've rerun it with the new settings and allocation information included, and this is what I get locally on an M1 Macbook.


make test TEST="micro:Base64EncodeToString" MICRO='RESULTS_FORMAT=JSON;OPTIONS=-prof gc'


baseline:

Benchmark                                                   (inputSize)   Mode  Cnt      Score      Error   Units
Base64EncodeToString.testEncodeToString                              10  thrpt   10  37077.450 ± 6720.486  ops/ms
Base64EncodeToString.testEncodeToString:gc.alloc.rate                10  thrpt   10   3109.573 ±  566.545  MB/sec
Base64EncodeToString.testEncodeToString:gc.alloc.rate.norm           10  thrpt   10     88.000 ±    0.001    B/op
Base64EncodeToString.testEncodeToString:gc.count                     10  thrpt   10    169.000             counts
Base64EncodeToString.testEncodeToString:gc.time                      10  thrpt   10    102.000                 ms
Base64EncodeToString.testEncodeToString                             100  thrpt   10  44531.727 ± 2228.099  ops/ms
Base64EncodeToString.testEncodeToString:gc.alloc.rate               100  thrpt   10  13928.036 ±  698.474  MB/sec
Base64EncodeToString.testEncodeToString:gc.alloc.rate.norm          100  thrpt   10    328.000 ±    0.001    B/op
Base64EncodeToString.testEncodeToString:gc.count                    100  thrpt   10    233.000             counts
Base64EncodeToString.testEncodeToString:gc.time                     100  thrpt   10    151.000                 ms
Base64EncodeToString.testEncodeToString                            1000  thrpt   10   8071.402 ±  334.834  ops/ms
Base64EncodeToString.testEncodeToString:gc.alloc.rate              1000  thrpt   10  20996.105 ±  871.475  MB/sec
Base64EncodeToString.testEncodeToString:gc.alloc.rate.norm         1000  thrpt   10   2728.000 ±    0.001    B/op
Base64EncodeToString.testEncodeToString:gc.count                   1000  thrpt   10    298.000             counts
Base64EncodeToString.testEncodeToString:gc.time                    1000  thrpt   10    191.000                 ms
Base64EncodeToString.testEncodeToString                           10000  thrpt   10    605.186 ±   19.722  ops/ms
Base64EncodeToString.testEncodeToString:gc.alloc.rate             10000  thrpt   10  15424.548 ±  502.632  MB/sec
Base64EncodeToString.testEncodeToString:gc.alloc.rate.norm        10000  thrpt   10  26728.006 ±    0.001    B/op
Base64EncodeToString.testEncodeToString:gc.count                  10000  thrpt   10    275.000             counts
Base64EncodeToString.testEncodeToString:gc.time                   10000  thrpt   10    176.000                 ms


With patch:


Benchmark                                                   (inputSize)   Mode  Cnt      Score      Error   Units
Base64EncodeToString.testEncodeToString                              10  thrpt   10  74105.364 ± 2901.628  ops/ms
Base64EncodeToString.testEncodeToString:gc.alloc.rate                10  thrpt   10   3957.248 ±  154.970  MB/sec
Base64EncodeToString.testEncodeToString:gc.alloc.rate.norm           10  thrpt   10     56.000 ±    0.001    B/op
Base64EncodeToString.testEncodeToString:gc.count                     10  thrpt   10    201.000             counts
Base64EncodeToString.testEncodeToString:gc.time                      10  thrpt   10    139.000                 ms
Base64EncodeToString.testEncodeToString                             100  thrpt   10  56614.125 ± 3686.741  ops/ms
Base64EncodeToString.testEncodeToString:gc.alloc.rate               100  thrpt   10   9497.667 ±  618.182  MB/sec
Base64EncodeToString.testEncodeToString:gc.alloc.rate.norm          100  thrpt   10    176.000 ±    0.001    B/op
Base64EncodeToString.testEncodeToString:gc.count                    100  thrpt   10    173.000             counts
Base64EncodeToString.testEncodeToString:gc.time                     100  thrpt   10    122.000                 ms
Base64EncodeToString.testEncodeToString                            1000  thrpt   10  10738.733 ± 1765.562  ops/ms
Base64EncodeToString.testEncodeToString:gc.alloc.rate              1000  thrpt   10  14090.662 ± 2316.935  MB/sec
Base64EncodeToString.testEncodeToString:gc.alloc.rate.norm         1000  thrpt   10   1376.000 ±    0.001    B/op
Base64EncodeToString.testEncodeToString:gc.count                   1000  thrpt   10    200.000             counts
Base64EncodeToString.testEncodeToString:gc.time                    1000  thrpt   10    150.000                 ms
Base64EncodeToString.testEncodeToString                           10000  thrpt   10    940.693 ±   91.054  ops/ms
Base64EncodeToString.testEncodeToString:gc.alloc.rate             10000  thrpt   10  11998.463 ± 1161.641  MB/sec
Base64EncodeToString.testEncodeToString:gc.alloc.rate.norm        10000  thrpt   10  13376.004 ±    0.001    B/op
Base64EncodeToString.testEncodeToString:gc.count                  10000  thrpt   10    158.000             counts
Base64EncodeToString.testEncodeToString:gc.time                   10000  thrpt   10    136.000                 ms

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

PR Comment: https://git.openjdk.org/jdk/pull/29920#issuecomment-3970052161


More information about the core-libs-dev mailing list