将我的运行时升级到Java 7之后,我看到了令人难以置信的缓慢......我的程序将所有时间花在SimpleDateFormat
构造函数上。正如此处的精彩帖子中所述:http://coffeedriven.org/?p=83 TimeZone
代码现在正在检查static synchronized
方法getDefaultInAppContext()
中是否存在应用程序上下文。
问题在于,Spring Batch文件阅读器代码为其读取的每一行创建了一个new SimpleDateFormat
对象!
任何人都可以解决这个问题吗?
答案 0 :(得分:1)
SimpleDateFormat
一直很慢,现在我知道它在Java 7
中速度更慢。
与@MK一样,我们也会缓存它们。但请注意,它不是 threadsafe 。我们最终创建了ThreadLocals
。
JodaTime
,虽然我从未使用它,但我不知道它有日期格式
答案 1 :(得分:1)
我们通过改变Spring Batch本身来解决这个问题。目前,更改是在本地副本中,但我已经输入了Jira问题,并希望将我们的修复程序返回给Spring Batch本身。
更改本身是将SimpleDateFormat的使用从成员变量更改为注入的变量(无论如何看起来更像Spring)。这让我们可以控制它的生命周期。
答案 2 :(得分:0)
我很高兴地报告这已在Java 9中发布的JDK-8074002中得到修复。现在已降至#clone()
。
答案 3 :(得分:-1)
Joda Time是日期时间计算的最佳日期时间API。请记住,如果您的需求需要不同的时区,则应使用JodaTime API。