[jboss-jira] [JBoss JIRA] (LOGMGR-157) Provide faster alternative to SimpleDataFormat

Koen Janssens (JIRA) issues at jboss.org
Wed May 17 04:36:02 EDT 2017


     [ https://issues.jboss.org/browse/LOGMGR-157?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Koen Janssens updated LOGMGR-157:
---------------------------------
    Attachment: DateFormatPerformance.java


> Provide faster alternative to SimpleDataFormat
> ----------------------------------------------
>
>                 Key: LOGMGR-157
>                 URL: https://issues.jboss.org/browse/LOGMGR-157
>             Project: JBoss Log Manager
>          Issue Type: Enhancement
>          Components: core
>    Affects Versions: 2.0.6.Final
>            Reporter: Koen Janssens
>         Attachments: DateFormatPerformance.java
>
>
> Whenever a data or timestamp is included in the logging pattern, SimpleDataFormat is used for formatting. Even with one instance per thread, it is still a heavy beast. 
> Other logging libraries (like the 15 year old log4j) have 'fast tracks' for known formats such as ISO 8601. These implementations are faster and generate less memory garbage. 
> During profiling, i discovered that simpledateformat is doing a lot of stuff while printing a date: 
> 	at java.lang.Thread.run(Thread.java:748)
> 	at org.jboss.logmanager.handlers.AsyncHandler$AsyncTask.run(AsyncHandler.java:196)
> 	at org.jboss.logmanager.ExtHandler.publish(ExtHandler.java:76)
> 	at org.jboss.logmanager.handlers.WriterHandler.doPublish(WriterHandler.java:46)
> 	at org.jboss.logmanager.ExtFormatter.format(ExtFormatter.java:32)
> 	at org.jboss.logmanager.formatters.MultistepFormatter.format(MultistepFormatter.java:83)
> 	at org.jboss.logmanager.formatters.Formatters$JustifyingFormatStep.render(Formatters.java:224)
> 	at org.jboss.logmanager.formatters.Formatters$5.renderRaw(Formatters.java:389)
> 	at java.text.DateFormat.format(DateFormat.java:345)
> 	at java.text.SimpleDateFormat.format(SimpleDateFormat.java:936)
> 	at java.text.SimpleDateFormat.format(SimpleDateFormat.java:966)
> 	at java.text.SimpleDateFormat.subFormat(SimpleDateFormat.java:1125)
> 	at java.util.Calendar.getDisplayName(Calendar.java:2110)
> 	at java.text.DateFormatSymbols.getInstance(DateFormatSymbols.java:340)
> 	at java.text.DateFormatSymbols.getProviderInstance(DateFormatSymbols.java:364)
> 	at sun.util.locale.provider.DateFormatSymbolsProviderImpl.getInstance(DateFormatSymbolsProviderImpl.java:85)
> 	at java.text.DateFormatSymbols.<init>(DateFormatSymbols.java:145)
> 	at java.text.DateFormatSymbols.initializeData(DateFormatSymbols.java:710)
> 	at sun.util.resources.LocaleData.getDateFormatData(LocaleData.java:127)
> 	at sun.util.resources.LocaleData.getBundle(LocaleData.java:163)
> 	at java.security.AccessController.doPrivileged(Native Method)
> 	at sun.util.resources.LocaleData$1.run(LocaleData.java:163)
> 	at sun.util.resources.LocaleData$1.run(LocaleData.java:167)
> 	at java.util.ResourceBundle.getBundle(ResourceBundle.java:890)
> 	at java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:1348)
> 	at java.util.ResourceBundle.checkList(ResourceBundle.java:1400)
> 	at java.util.Collections$UnmodifiableCollection.isEmpty(Collections.java:1031)
> 	at java.util.AbstractCollection.isEmpty(AbstractCollection.java:86)
> I have attached a small comparision between simpledateformat performance and log4j ISO formatting performance. It roughly a factor 10 'faster'



--
This message was sent by Atlassian JIRA
(v7.2.3#72005)


More information about the jboss-jira mailing list