Alexander Falb created JOHNZON-293: -------------------------------------- Summary: Potential Memleak in DateConverter Key: JOHNZON-293 URL: https://issues.apache.org/jira/browse/JOHNZON-293 Project: Johnzon Issue Type: Bug Components: Mapper Reporter: Alexander Falb
[DateConverter|https://github.com/apache/johnzon/blob/master/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/converter/DateConverter.java] creates a new SimpleDateFormat for every instance for every thread the instance is used on and never cleans them up. This may cause a high memory usage, if lots of those converters are created instead of reused. Two approaches to get rid of them are on my mind: # Create a new SimpleDateFormat within the toString and fromString methods as method variable instead of a class field. # Use java.time.DateTimeFormatter as class field, because it is immutable and thread-safe, and do some object conversion from java.util.Date to/from java.time.ZonedDateTime. I did some JMH performance tests for both (full project can be found here [https://github.com/elexx/dateconverter-benchmark]): {noformat} Benchmark Mode Cnt Score Error Units JavaTimeDateFormatterBenchmark.formatNewFormat avgt 5 828,623 ± 8,836 ns/op JavaTimeDateFormatterBenchmark.formatReuseFormat avgt 5 496,916 ± 5,150 ns/op JavaTimeDateFormatterBenchmark.parseNewFormat avgt 5 1430,276 ± 11,084 ns/op JavaTimeDateFormatterBenchmark.parseReuseFormat avgt 5 990,648 ± 280,983 ns/op SimpleDateFormatterBenchmark.formatNewFormat avgt 5 1308,144 ± 13,993 ns/op SimpleDateFormatterBenchmark.formatReuseFormat avgt 5 392,236 ± 3,219 ns/op SimpleDateFormatterBenchmark.parseNewFormat avgt 5 1848,772 ± 19,412 ns/op SimpleDateFormatterBenchmark.parseReuseFormat avgt 5 1121,955 ± 12,417 ns/op {noformat} In this quick test it looks like creating a new SimpleDateFormatter in each method is quite slow (1308ns/op + 1848ns/op). Reusing the SimpleDateFormatter is faster (392ns/op + 1121ns/op), but no option because it is not thread-safe. Reusing the Java8-DateTimeFormatter is equivalent (496ns/op + 990ns/op) to Reusing SimpleDateFormatter (parsing is faster, formatting is slower, avg is about the same) And just for completeness: Creating a Java8-DateTimeFormatter, which is nonsense, because it is immutable and thread-safe. -- This message was sent by Atlassian Jira (v8.3.4#803005)