Java 7 Calendar.getInstance、TimeZone.getTimeZone已同步且速度较慢,有什么解决方法吗?

Java 7 Calendar.getInstance、TimeZone.getTimeZone已同步且速度较慢,有什么解决方法吗?,java,performance,synchronized,simpledateformat,Java,Performance,Synchronized,Simpledateformat,在将我的运行时升级到Java7之后,我看到了难以置信的缓慢。。。我的程序把所有时间都花在SimpleDateFormat构造函数中。正如在这里的一篇文章中所描述的:时区代码现在正在检查静态同步方法getDefaultInAppContext()中是否存在应用程序上下文 我的问题是,文件读取器代码正在为它读取的每一行创建一个新的SimpleDataFormat对象 有人为此找到了解决办法吗?SimpleDataFormat一直都很慢,现在我了解到在Java7中它甚至更慢 像@MK一样,我们也缓存它

在将我的运行时升级到Java7之后,我看到了难以置信的缓慢。。。我的程序把所有时间都花在
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
对象