Java 7 Calendar.getInstance、TimeZone.getTimeZone已同步且速度较慢,有什么解决方法吗?
在将我的运行时升级到Java7之后,我看到了难以置信的缓慢。。。我的程序把所有时间都花在Java 7 Calendar.getInstance、TimeZone.getTimeZone已同步且速度较慢,有什么解决方法吗?,java,performance,synchronized,simpledateformat,Java,Performance,Synchronized,Simpledateformat,在将我的运行时升级到Java7之后,我看到了难以置信的缓慢。。。我的程序把所有时间都花在SimpleDateFormat构造函数中。正如在这里的一篇文章中所描述的:时区代码现在正在检查静态同步方法getDefaultInAppContext()中是否存在应用程序上下文 我的问题是,文件读取器代码正在为它读取的每一行创建一个新的SimpleDataFormat对象 有人为此找到了解决办法吗?SimpleDataFormat一直都很慢,现在我了解到在Java7中它甚至更慢 像@MK一样,我们也缓存它
SimpleDateFormat
构造函数中。正如在这里的一篇文章中所描述的:时区
代码现在正在检查静态同步
方法getDefaultInAppContext()
中是否存在应用程序上下文
我的问题是,文件读取器代码正在为它读取的每一行创建一个新的SimpleDataFormat对象
有人为此找到了解决办法吗?
SimpleDataFormat
一直都很慢,现在我了解到在Java7
中它甚至更慢
像@MK一样,我们也缓存它们。但请注意,它不是线程安全的。我们最终创建了ThreadLocals
强烈推荐,尽管我从未使用过它,也不知道它有日期格式Joda Time是计算日期时间的最佳日期时间API。请记住,如果您的需求需要不同的时区,则应使用JodaTime API 我们通过对Spring批处理本身进行更改来解决这个问题。目前,更改是在本地副本中进行的,但我已经输入了一个Jira问题,希望将我们的修复返回到Spring批处理本身
更改本身就是将SimpleDataFormat的使用从成员变量更改为注入变量(看起来更像Spring)。这让我们可以控制它的生命周期。我很高兴地报告,这是在Java9中发布的版本中修复的。现在只剩下一个
#clone()
“必须”这个词在这里太重了。我当然同意Joda Time是一个更好的API,但这并不是说标准库不支持不同的时区;我不是说std.library没有功能,但这里我的意思是,在JOda Time API中,为了方便和节省时间,有很多内置的扩展函数。对不起,我的工作“必须”。)问题是我使用的是Spring批处理,其中包含日期格式调用,因此我自己无法更改为JodaTime。您可以使用AspectJ
部署生产方面以使用JodaTime
而不是SimpleDateFormat
或仅使用缓存的SimpleDateFormat
对象