gpt4 book ai didi

java - Servlet 中的 SimpleDateFormat

转载 作者:行者123 更新时间:2023-12-03 21:14:55 25 4
gpt4 key购买 nike

我在我的 Servlet 中使用了很多 SimpleDateFormat 对象。不幸的是,SimpleDateFormat 不是线程安全的。因此,我考虑用 ThreadLocal 包装它以促进 SimpleDateFormat 对象的重用。我写了一个 util-class 来启用它:

public class DateUtil {
private final static ThreadLocal<SimpleDateFormat> dateFormat = new ThreadLocal<SimpleDateFormat>() {
return new SimpleDateFormat();
}

public static SimpleDateFormat get () {
return dateFormat.get();
}
}

实际上,这似乎会导致内存泄漏。关闭我的 web 应用程序时,Tomcat 会记录以下错误消息:

SEVERE: The web application [] created a ThreadLocal with key of type [null] (value [com.example.util.DateUtil$2@50242f7d]) and a value of type [java.text.SimpleDateFormat] (value [java.text.SimpleDateFormat@d91b489b]) but failed to remove it when the web application was stopped. This is very likely to create a memory leak.

我了解内存泄漏的原因,但是在 Servlet 中处理 SimpleDateFormat 对象(或任何其他非线程安全对象)的最佳方法是什么?

最佳答案

除了使用替代实现(commons-langjoda),只需在每次使用时创建一个新的 SimpleDateFormat 实例。

我知道这会让你觉得很脏,需要洗澡,但这很简单,不需要你做任何努力。缺点是你会比以前交出更多的内存,但在大多数普通的 Web 应用程序中,你不太可能注意到 JDBC 的噪音。

查看我对 ThreadLocal Resource Leak and WeakReference 的回答

关于java - Servlet 中的 SimpleDateFormat,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4651993/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com