[
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 8:28 AM:
------------------------------------------------------------------
{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):
{code}
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
{code}
> 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)