[ https://issues.apache.org/jira/browse/HTTPCORE-713?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Oleg Kalnichevski resolved HTTPCORE-713. ---------------------------------------- Fix Version/s: 5.1.4 5.2-beta2 Resolution: Fixed > 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 > Fix For: 5.1.4, 5.2-beta2 > > Attachments: 166573589-2c814d53-9639-4b14-82d0-9238f285be0b.png > > Time Spent: 0.5h > 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