commons-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Tom Howard (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (TEXT-99) Performance Degradation for Escaping JSON
Date Wed, 16 Aug 2017 22:57:01 GMT

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

Tom Howard commented on TEXT-99:
--------------------------------

FYI StringEscapeUtils.ESCAPE_JSON.translate(CharSequence, writer) appears to be slower because
it calls `java.io.write(int c)`, which results in a large number of memory allocations before,
which causes excessive GC load. Better to call `java.io.write(char cbuf[], int off, int len)`
instead.

> Performance Degradation for Escaping JSON
> -----------------------------------------
>
>                 Key: TEXT-99
>                 URL: https://issues.apache.org/jira/browse/TEXT-99
>             Project: Commons Text
>          Issue Type: Bug
>    Affects Versions: 1.1
>         Environment: OS X 10.11.6
> java version "1.8.0_60"
> Java(TM) SE Runtime Environment (build 1.8.0_60-b27)
> Java HotSpot(TM) 64-Bit Server VM (build 25.60-b23, mixed mode)
> JProfiler 9.1 (Build 9128)
>            Reporter: Tom Howard
>            Priority: Minor
>              Labels: escape, json, performance
>
> There seams to be a small performance degradation on StringEscapeUtils.escapeJson(String)
in commons-text v1.1 compared to commons-lang3 v3.5
> I have a performance test that involves (amongst other things) escaping 200,052 strings.
Using commons-text v1.1 this consistently takes 100ms to 110ms. Using commons-lang3 v3.5 this
consistently takes 92ms to 95ms.
> Also, after escaping I'm writing it to using java.io.Writer.write(String). I would have
assumed that StringEscapeUtils.ESCAPE_JSON.translate(CharSequence, writer) would yield better
performance, however in the same test, using this method constantly takes approx 210ms and
the parent method (which serialises the entire payload to JSON) takes approx 1750ms compared
to approx 1400ms using StringEscapeUtils.escapeJson(String) from commons-lang3 v3.5
> I've marked the issue as minor, as it doesn't really impact me, but I thought I should
share my findings.
> The serialiser can be found at https://github.com/mountain-pass/ryvr/blob/master/src/main/java/au/com/mountainpass/ryvr/io/RyvrSerialiser.java
and the performance test can be executed using `./gradlew testRyvrTests_Integration_Performance_Java_H2Local`
> Also, I should mention that StringEscapeUtils.escapeJson is an order of magnitude faster
than the equivalents from:
> - org.json:json:20170516
> - org.unbescape:unbescape:1.1.5.RELEASE
> - com.googlecode.json-simple:1.1.1
> - net.minidev:son-smart:2.3
> They literally take over 1000ms to do what StringEscapeUtils.escapeJson() does in about
100ms. If there are any other libs you would like me to test against for comparison purposes,
please let me know.



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

Mime
View raw message