On Thu, 14 Jan 2021 12:48:18 GMT, Сергей Цыпанов 
<github.com+10835776+stsypa...@openjdk.org> wrote:

>> Instead of allocating a copy of underlying array via 
>> `CharArrayWriter.toCharArray()` and passing it to constructor of String
>> String str = new String(charArrayWriter.toCharArray());
>> we could call `toString()` method
>> String str = charArrayWriter.toString();
>> decoding existing char[] without making a copy. This slightly speeds up the 
>> method reducing at the same time memory consumption for decoding URLs with 
>> non-latin symbols:
>> @State(Scope.Thread)
>> @BenchmarkMode(Mode.AverageTime)
>> @OutputTimeUnit(TimeUnit.NANOSECONDS)
>> @Fork(jvmArgsAppend = {"-Xms2g", "-Xmx2g"})
>> public class UrlEncoderBenchmark {
>>   private static final Charset charset = Charset.defaultCharset();
>>   private static final String utf8Url = 
>> "https://ru.wikipedia.org/wiki/Организация_Объединённых_Наций";; // UN
>> 
>>   @Benchmark
>>   public String encodeUtf8() {
>>     return URLEncoder.encode(utf8Url, charset);
>>   }
>> }
>> The benchmark on my maching give the following output:
>> before
>> Benchmark                                                        Mode  Cnt   
>>   Score    Error   Units
>> UrlEncoderBenchmark.encodeUtf8                                   avgt  100  
>> 1166.378 ±  8.411   ns/op
>> UrlEncoderBenchmark.encodeUtf8:·gc.alloc.rate                    avgt  100   
>> 932.944 ±  6.393  MB/sec
>> UrlEncoderBenchmark.encodeUtf8:·gc.alloc.rate.norm               avgt  100  
>> 1712.193 ±  0.005    B/op
>> UrlEncoderBenchmark.encodeUtf8:·gc.churn.G1_Eden_Space           avgt  100   
>> 929.221 ± 24.268  MB/sec
>> UrlEncoderBenchmark.encodeUtf8:·gc.churn.G1_Eden_Space.norm      avgt  100  
>> 1705.444 ± 43.235    B/op
>> UrlEncoderBenchmark.encodeUtf8:·gc.churn.G1_Survivor_Space       avgt  100   
>>   0.006 ±  0.001  MB/sec
>> UrlEncoderBenchmark.encodeUtf8:·gc.churn.G1_Survivor_Space.norm  avgt  100   
>>   0.011 ±  0.002    B/op
>> UrlEncoderBenchmark.encodeUtf8:·gc.count                         avgt  100   
>> 652.000           counts
>> UrlEncoderBenchmark.encodeUtf8:·gc.time                          avgt  100   
>> 334.000               ms
>> 
>> after
>> Benchmark                                                        Mode  Cnt   
>>   Score    Error   Units
>> UrlEncoderBenchmark.encodeUtf8                                   avgt  100  
>> 1058.851 ±  6.006   ns/op
>> UrlEncoderBenchmark.encodeUtf8:·gc.alloc.rate                    avgt  100   
>> 931.489 ±  5.182  MB/sec
>> UrlEncoderBenchmark.encodeUtf8:·gc.alloc.rate.norm               avgt  100  
>> 1552.176 ±  0.005    B/op
>> UrlEncoderBenchmark.encodeUtf8:·gc.churn.G1_Eden_Space           avgt  100   
>> 933.491 ± 24.164  MB/sec
>> UrlEncoderBenchmark.encodeUtf8:·gc.churn.G1_Eden_Space.norm      avgt  100  
>> 1555.488 ± 39.204    B/op
>> UrlEncoderBenchmark.encodeUtf8:·gc.churn.G1_Survivor_Space       avgt  100   
>>   0.006 ±  0.001  MB/sec
>> UrlEncoderBenchmark.encodeUtf8:·gc.churn.G1_Survivor_Space.norm  avgt  100   
>>   0.010 ±  0.002    B/op
>> UrlEncoderBenchmark.encodeUtf8:·gc.count                         avgt  100   
>> 655.000           counts
>> UrlEncoderBenchmark.encodeUtf8:·gc.time                          avgt  100   
>> 333.000               ms
>
> Сергей Цыпанов has updated the pull request with a new target base due to a 
> merge or a rebase. The incremental webrev excludes the unrelated changes 
> brought in by the merge/rebase. The pull request contains five additional 
> commits since the last revision:
> 
>  - Merge branch 'master' into enc
>  - 8259699: Reduce char[] copying in URLEncoder.encode(String, Charset) - 
> small JavaDoc fix
>  - Merge branch 'master' into enc
>  - Merge branch 'master' into enc
>  - Improve URLEncoder.encode(String, Charset)

Marked as reviewed by chegar (Reviewer).

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

PR: https://git.openjdk.java.net/jdk/pull/1598

Reply via email to