StringDecoder causes direct allocation of ByteBuffer #29889
Closed
+2
−6
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Since my switch to Spring Boot 3, I have a lot of direct allocations in my metrics.
Indeed, my app use
StringDecoder
via, for example,@RequestBody String body
In
org.springframework.core.codec.StringDecoder
, when dataBuffer is backed by an NIO direct buffer,decode
method usedataBuffer.toByteBuffer()
which will calljava.nio.ByteBuffer.allocateDirect(int)
.In
java.nio.ByteBuffer
javadoc we can read :Goal of this code in
StringDecoder
was to decode with a charset, so maybe it's better to usedataBuffer.toString(charset)
which doesn't do direct allocation.I see the same problem in
org.springframework.http.codec.FormHttpMessageReader
.