[ 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)