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

ASF subversion and git services commented on HTTPCORE-713:
----------------------------------------------------------

Commit c6dfb03a1c74cda8a1905f006efc640b680db886 in httpcomponents-core's branch 
refs/heads/5.1.x from David Schlosnagle
[ https://gitbox.apache.org/repos/asf?p=httpcomponents-core.git;h=c6dfb03a1 ]

HTTPCORE-713: Optimize InetAddressUtils#isIPv6*Address

Check input colon count before performing IPv6 regex validation


> Optimize InetAddressUtils#isIPv6*Address checks
> -----------------------------------------------
>
>                 Key: HTTPCORE-713
>                 URL: https://issues.apache.org/jira/browse/HTTPCORE-713
>             Project: HttpComponents HttpCore
>          Issue Type: Improvement
>          Components: HttpCore
>            Reporter: David Schlosnagle
>            Priority: Major
>         Attachments: 166573589-2c814d53-9639-4b14-82d0-9238f285be0b.png
>
>          Time Spent: 20m
>  Remaining Estimate: 0h
>
> See https://github.com/apache/httpcomponents-core/pull/347
> Check input colon count before performing IPv6 regex validation.
> {{org.apache.hc.core5.net.InetAddressUtils.isIPv6Address}} is used when 
> constructing the {{host}} header for requests, and currently allocates a 
> regex matcher when checking if the provided address is an IPv6 address. This 
> is generates excess garbage and CPU cycles, especially in environments with 
> mostly IPv4 addresses. By checking the colon count first, we see a 50x 
> improvement checking {{InetAddressUtils.isIPv6Address}} for an IPv4 address.
> The specific call backtrace seen looks like:
> {code:java}
> void java.util.regex.Matcher.<init>(Pattern, CharSequence)
>    Matcher java.util.regex.Pattern.matcher(CharSequence)
>    boolean 
> org.apache.hc.core5.net.InetAddressUtils.isIPv6HexCompressedAddress(String)
>       boolean org.apache.hc.core5.net.InetAddressUtils.isIPv6Address(String)
>       void org.apache.hc.core5.net.Host.format(StringBuilder, NamedEndpoint)
>       void org.apache.hc.core5.net.URIAuthority.format(StringBuilder, 
> URIAuthority)
>          String org.apache.hc.core5.net.URIAuthority.format(URIAuthority)
>          String org.apache.hc.core5.net.URIAuthority.toString()
>          String java.util.Objects.toString(Object, String)
>          void org.apache.hc.core5.http.message.BasicHeader.<init>(String, 
> Object, boolean)
>          void org.apache.hc.core5.http.message.BasicHeader.<init>(String, 
> Object)
>          void 
> org.apache.hc.core5.http.message.BasicHttpRequest.addHeader(String, Object)
>          void 
> org.apache.hc.core5.http.protocol.RequestTargetHost.process(HttpRequest, 
> EntityDetails, HttpContext)
>          void 
> org.apache.hc.core5.http.protocol.DefaultHttpProcessor.process(HttpRequest, 
> EntityDetails, HttpContext)
>          ClassicHttpResponse 
> org.apache.hc.client5.http.impl.classic.ProtocolExec.execute(ClassicHttpRequest,
>  ExecChain$Scope, ExecChain)
>          ClassicHttpResponse 
> org.apache.hc.client5.http.impl.classic.ExecChainElement.execute(ClassicHttpRequest,
>  ExecChain$Scope)
>          ClassicHttpResponse 
> org.apache.hc.client5.http.impl.classic.ExecChainElement$1.proceed(ClassicHttpRequest,
>  ExecChain$Scope)
>          ClassicHttpResponse 
> org.apache.hc.client5.http.impl.classic.RedirectExec.execute(ClassicHttpRequest,
>  ExecChain$Scope, ExecChain)
>          ClassicHttpResponse 
> org.apache.hc.client5.http.impl.classic.ExecChainElement.execute(ClassicHttpRequest,
>  ExecChain$Scope)
>          CloseableHttpResponse 
> org.apache.hc.client5.http.impl.classic.InternalHttpClient.doExecute(HttpHost,
>  ClassicHttpRequest, HttpContext)
>          CloseableHttpResponse 
> org.apache.hc.client5.http.impl.classic.CloseableHttpClient.execute(ClassicHttpRequest,
>  HttpContext)
>          CloseableHttpResponse 
> org.apache.hc.client5.http.impl.classic.CloseableHttpClient.execute(ClassicHttpRequest)
> {code}
> From JFR profile: 
> !166573589-2c814d53-9639-4b14-82d0-9238f285be0b.png! 



--
This message was sent by Atlassian Jira
(v8.20.7#820007)

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@hc.apache.org
For additional commands, e-mail: dev-h...@hc.apache.org

Reply via email to