You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@hc.apache.org by "ASF subversion and git services (JIRA)" <ji...@apache.org> on 2017/08/01 17:29:00 UTC
[jira] [Commented] (HTTPCLIENT-1858) Alleviate GC pressure due to
wire logging
[ https://issues.apache.org/jira/browse/HTTPCLIENT-1858?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16109360#comment-16109360 ]
ASF subversion and git services commented on HTTPCLIENT-1858:
-------------------------------------------------------------
Commit f2146cab622b63ff69a005040635c14fed509e54 in httpcomponents-client's branch refs/heads/master from [~garydgregory]
[ https://git-wip-us.apache.org/repos/asf?p=httpcomponents-client.git;h=f2146ca ]
[HTTPCLIENT-1858] Clone some code from Log4j 2 to cache a StringBuilder
in a ThreadLocal. Update to use the StringBuilder's capacity instead of
its length to measure upper bound.
> Alleviate GC pressure due to wire logging
> -----------------------------------------
>
> Key: HTTPCLIENT-1858
> URL: https://issues.apache.org/jira/browse/HTTPCLIENT-1858
> Project: HttpComponents HttpClient
> Issue Type: Bug
> Components: HttpClient (classic)
> Affects Versions: 4.5.2
> Reporter: Arya Ketan
> Priority: Minor
> Labels: performance
> Fix For: 5.0 Alpha3
>
> Attachments: Screen Shot 2017-06-21 at 1.11.46 pm.png
>
>
> While running performance tests, I am seeing very high GC pressure due to the following code
> in Wire.java
> {code:java}
> private void wire(final String header, final InputStream instream)
> throws IOException {
> final StringBuilder buffer = new StringBuilder();
> int ch;
> while ((ch = instream.read()) != -1) {
> if (ch == 13) {
> buffer.append("[\\r]");
> } else if (ch == 10) {
> buffer.append("[\\n]\"");
> buffer.insert(0, "\"");
> buffer.insert(0, header);
> log.debug(id + " " + buffer.toString());
> buffer.setLength(0);
> } else if ((ch < 32) || (ch > 127)) {
> buffer.append("[0x");
> buffer.append(Integer.toHexString(ch));
> buffer.append("]");
> } else {
> buffer.append((char) ch);
> }
> }
> if (buffer.length() > 0) {
> buffer.append('\"');
> buffer.insert(0, '\"');
> buffer.insert(0, header);
> log.debug(id + " " + buffer.toString());
> }
> }
> {code}
> This is because, we are trying to expand Stringbuffer continously , thus leading to lot of char[] garbage.
> 2 suggestions for improvements
> a) we look into whether logging level is enabled and only then construct the message
> b) efficiently construct log message.
--
This message was sent by Atlassian JIRA
(v6.4.14#64029)
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@hc.apache.org
For additional commands, e-mail: dev-help@hc.apache.org