[ 
https://issues.apache.org/jira/browse/IGNITE-27088?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18111472#comment-18111472
 ] 

Nikolay Izhikov edited comment on IGNITE-27088 at 9/4/26 9:42 AM:
------------------------------------------------------------------

JMH test results from my local machine. Less is better.
{noformat}
Benchmark                                                     (content)  (len)  
(zeroCopy)  Mode  Cnt     Score    Error   Units
JmhBinaryStringWriteBenchmark.writeString                         ascii      8  
      true  avgt    5     3.351 ±  0.398   ns/op
JmhBinaryStringWriteBenchmark.writeString                         ascii      8  
     false  avgt    5     5.853 ±  0.036   ns/op

JmhBinaryStringWriteBenchmark.writeString                         ascii     64  
      true  avgt    5     5.332 ±  0.037   ns/op
JmhBinaryStringWriteBenchmark.writeString                         ascii     64  
     false  avgt    5    16.338 ±  0.125   ns/op

JmhBinaryStringWriteBenchmark.writeString                         ascii    512  
      true  avgt    5    14.394 ±  0.124   ns/op
JmhBinaryStringWriteBenchmark.writeString                         ascii    512  
     false  avgt    5   105.519 ±  0.930   ns/op

JmhBinaryStringWriteBenchmark.writeString                         ascii   4096  
      true  avgt    5   101.396 ±  0.417   ns/op
JmhBinaryStringWriteBenchmark.writeString                         ascii   4096  
     false  avgt    5   768.706 ±  6.367   ns/op

JmhBinaryStringWriteBenchmark.writeString                        latin1      8  
      true  avgt    5     5.109 ±  1.585   ns/op
JmhBinaryStringWriteBenchmark.writeString                        latin1      8  
     false  avgt    5     6.968 ±  0.034   ns/op

JmhBinaryStringWriteBenchmark.writeString                        latin1     64  
      true  avgt    5    22.666 ±  0.217   ns/op
JmhBinaryStringWriteBenchmark.writeString                        latin1     64  
     false  avgt    5    23.769 ±  0.325   ns/op

JmhBinaryStringWriteBenchmark.writeString                        latin1    512  
      true  avgt    5   146.144 ±  0.636   ns/op
JmhBinaryStringWriteBenchmark.writeString                        latin1    512  
     false  avgt    5   173.865 ±  1.870   ns/op

JmhBinaryStringWriteBenchmark.writeString                        latin1   4096  
      true  avgt    5  1119.946 ±  4.887   ns/op
JmhBinaryStringWriteBenchmark.writeString                        latin1   4096  
     false  avgt    5  1351.368 ± 11.461   ns/op

JmhBinaryStringWriteBenchmark.writeString                      cyrillic      8  
      true  avgt    5     7.605 ±  0.060   ns/op
JmhBinaryStringWriteBenchmark.writeString                      cyrillic      8  
     false  avgt    5     7.631 ±  0.458   ns/op

JmhBinaryStringWriteBenchmark.writeString                      cyrillic     64  
      true  avgt    5    26.330 ±  0.044   ns/op
JmhBinaryStringWriteBenchmark.writeString                      cyrillic     64  
     false  avgt    5    26.287 ±  0.047   ns/op

JmhBinaryStringWriteBenchmark.writeString                      cyrillic    512  
      true  avgt    5   180.104 ±  0.331   ns/op
JmhBinaryStringWriteBenchmark.writeString                      cyrillic    512  
     false  avgt    5   179.614 ±  0.304   ns/op

JmhBinaryStringWriteBenchmark.writeString                      cyrillic   4096  
      true  avgt    5  1426.047 ±  6.374   ns/op
JmhBinaryStringWriteBenchmark.writeString                      cyrillic   4096  
     false  avgt    5  1417.477 ±  6.662   ns/op

JmhBinaryStringWriteBenchmark.writeString                         mixed      8  
      true  avgt    5    10.335 ±  0.019   ns/op
JmhBinaryStringWriteBenchmark.writeString                         mixed      8  
     false  avgt    5    10.734 ±  1.046   ns/op

JmhBinaryStringWriteBenchmark.writeString                         mixed     64  
      true  avgt    5    62.831 ±  2.138   ns/op
JmhBinaryStringWriteBenchmark.writeString                         mixed     64  
     false  avgt    5    64.942 ± 12.633   ns/op

JmhBinaryStringWriteBenchmark.writeString                         mixed    512  
      true  avgt    5   460.263 ±  1.085   ns/op
JmhBinaryStringWriteBenchmark.writeString                         mixed    512  
     false  avgt    5   483.108 ±  2.195   ns/op

JmhBinaryStringWriteBenchmark.writeString                         mixed   4096  
      true  avgt    5  3826.769 ± 19.541   ns/op
JmhBinaryStringWriteBenchmark.writeString                         mixed   4096  
     false  avgt    5  3839.145 ± 65.522   ns/op
{noformat}


was (Author: nizhikov):
{noformat}
Benchmark                                                     (content)  (len)  
(zeroCopy)  Mode  Cnt     Score    Error   Units
JmhBinaryStringWriteBenchmark.writeString                         ascii      8  
      true  avgt    5     3.351 ±  0.398   ns/op
JmhBinaryStringWriteBenchmark.writeString                         ascii      8  
     false  avgt    5     5.853 ±  0.036   ns/op

JmhBinaryStringWriteBenchmark.writeString                         ascii     64  
      true  avgt    5     5.332 ±  0.037   ns/op
JmhBinaryStringWriteBenchmark.writeString                         ascii     64  
     false  avgt    5    16.338 ±  0.125   ns/op

JmhBinaryStringWriteBenchmark.writeString                         ascii    512  
      true  avgt    5    14.394 ±  0.124   ns/op
JmhBinaryStringWriteBenchmark.writeString                         ascii    512  
     false  avgt    5   105.519 ±  0.930   ns/op

JmhBinaryStringWriteBenchmark.writeString                         ascii   4096  
      true  avgt    5   101.396 ±  0.417   ns/op
JmhBinaryStringWriteBenchmark.writeString                         ascii   4096  
     false  avgt    5   768.706 ±  6.367   ns/op

JmhBinaryStringWriteBenchmark.writeString                        latin1      8  
      true  avgt    5     5.109 ±  1.585   ns/op
JmhBinaryStringWriteBenchmark.writeString                        latin1      8  
     false  avgt    5     6.968 ±  0.034   ns/op

JmhBinaryStringWriteBenchmark.writeString                        latin1     64  
      true  avgt    5    22.666 ±  0.217   ns/op
JmhBinaryStringWriteBenchmark.writeString                        latin1     64  
     false  avgt    5    23.769 ±  0.325   ns/op

JmhBinaryStringWriteBenchmark.writeString                        latin1    512  
      true  avgt    5   146.144 ±  0.636   ns/op
JmhBinaryStringWriteBenchmark.writeString                        latin1    512  
     false  avgt    5   173.865 ±  1.870   ns/op

JmhBinaryStringWriteBenchmark.writeString                        latin1   4096  
      true  avgt    5  1119.946 ±  4.887   ns/op
JmhBinaryStringWriteBenchmark.writeString                        latin1   4096  
     false  avgt    5  1351.368 ± 11.461   ns/op

JmhBinaryStringWriteBenchmark.writeString                      cyrillic      8  
      true  avgt    5     7.605 ±  0.060   ns/op
JmhBinaryStringWriteBenchmark.writeString                      cyrillic      8  
     false  avgt    5     7.631 ±  0.458   ns/op

JmhBinaryStringWriteBenchmark.writeString                      cyrillic     64  
      true  avgt    5    26.330 ±  0.044   ns/op
JmhBinaryStringWriteBenchmark.writeString                      cyrillic     64  
     false  avgt    5    26.287 ±  0.047   ns/op

JmhBinaryStringWriteBenchmark.writeString                      cyrillic    512  
      true  avgt    5   180.104 ±  0.331   ns/op
JmhBinaryStringWriteBenchmark.writeString                      cyrillic    512  
     false  avgt    5   179.614 ±  0.304   ns/op

JmhBinaryStringWriteBenchmark.writeString                      cyrillic   4096  
      true  avgt    5  1426.047 ±  6.374   ns/op
JmhBinaryStringWriteBenchmark.writeString                      cyrillic   4096  
     false  avgt    5  1417.477 ±  6.662   ns/op

JmhBinaryStringWriteBenchmark.writeString                         mixed      8  
      true  avgt    5    10.335 ±  0.019   ns/op
JmhBinaryStringWriteBenchmark.writeString                         mixed      8  
     false  avgt    5    10.734 ±  1.046   ns/op

JmhBinaryStringWriteBenchmark.writeString                         mixed     64  
      true  avgt    5    62.831 ±  2.138   ns/op
JmhBinaryStringWriteBenchmark.writeString                         mixed     64  
     false  avgt    5    64.942 ± 12.633   ns/op

JmhBinaryStringWriteBenchmark.writeString                         mixed    512  
      true  avgt    5   460.263 ±  1.085   ns/op
JmhBinaryStringWriteBenchmark.writeString                         mixed    512  
     false  avgt    5   483.108 ±  2.195   ns/op

JmhBinaryStringWriteBenchmark.writeString                         mixed   4096  
      true  avgt    5  3826.769 ± 19.541   ns/op
JmhBinaryStringWriteBenchmark.writeString                         mixed   4096  
     false  avgt    5  3839.145 ± 65.522   ns/op
{noformat}

> BinaryWriter should use internal String#value 
> ----------------------------------------------
>
>                 Key: IGNITE-27088
>                 URL: https://issues.apache.org/jira/browse/IGNITE-27088
>             Project: Ignite
>          Issue Type: Improvement
>            Reporter: Maksim Timonin
>            Assignee: Nikolay Izhikov
>            Priority: Major
>              Labels: ise
>         Attachments: WritingBigMapReproducer.java
>
>          Time Spent: 10m
>  Remaining Estimate: 0h
>
> While writing Strings in BinaryWriter we call BinaryWriterExImpl#writeString, 
> that calls String#getBytes. 
> Last call creates a copy of internal String#value byte array. Java does it 
> intentionally, to avoid scenario when this array will be changed. 
> But writing a lot of strings leads to useless heap usage for creating such 
> copies. Actually we can get this array using Unsafe/Reflection to optimize 
> String writings.
> This change should be done carefully, because String.getBytes also provides 
> encoding, and this behavior must be taken into account.
> Example of writeString/writeByteArray in attach



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to