GregorianCalendar上的内存泄漏

我们遇到这个错误,并且JSP页面变为空白(白色):

2013年1月9日7:30:39 org.apache.catalina.loader.WebappClassLoader clearThreadLocalMap SEVERE:Web应用程序[/ MyWebApp]使用[net.sourceforge.jtds.jdbc.DateTime $ 1]类型的键创建了一个ThreadLocal(值[net.sourceforge.jtds.jdbc.DateTime$1@48a47])和值类型[java.util.GregorianCalendar](值[java.util.GregorianCalendar [time = 1357531128420,areFieldsSet = true,areAllFieldsSet = false,lenient =真,区= sun.util.calendar.ZoneInfo [ID = “澳大利亚/悉尼”,偏移= 36000000,dstSavings = 3600000,useDaylight =真,过渡= 142,lastRule = java.util.SimpleTimeZone中[ID =澳大利亚/悉尼,偏移量= 36000000,dstSavings = 3600000,useDaylight =真,startYear = 0,STARTMODE = 3,startMonth = 9,朝九特派= 1,startDayOfWeek = 1,开始时间= 7200000,startTimeMode = 1,endMode = 3,endMonth = 3,endday指定= 1,一个endDayOfWeek = 1,结束时间= 7200000,endTimeMode = 1]],Firstdayofweek可= 1,minimalDaysInFirstWeek = 1,ERA = 1,YEAR = 2013,MONTH = 0,WEEK_OF_YEAR = 2,WEEK_OF_MONTH = 2,DAY_OF_MONTH = 7,DAY_OF_YEAR = 7,DAY_OF_WEEK = 2,DAY_OF_WEEK_IN_MONTH = 1,AM_PM = 1,HOUR = 2,H OUR_OF_DAY = 14,MINUTE = 58,SECOND = 48,MILLISECOND = 420,ZONE_OFFSET = 36000000,DST_OFFSET = 3600000]]),但在Web应用程序停止时未能删除它。 这很可能造成内存泄漏。

建议的解决方案是

  • 每次需要使用Calendar时使用新的实例

  • 检查ResultSet.close某个钩子是否足以调用ThreadLocal.remove()

  • 但是,在我们的情况下,我们需要重现错误,因此可以测试修复程序,而不必无限期地等待错误再次发生。


    给定的消息不是你问题的原因。

    Tomcat只是通知可能有内存泄漏(这不一定是真的)。 每次关机期间都会发生此错误(尝试它)。


    除了@Uwe Plonus给出的答案外,我可以说这是在应用程序停止时发生的。 所以,除非你停止并重启你的应用程序多次而不重启你的tomcat,否则这并不是那么有趣。 如果在关闭应用程序时tomcat正在关闭,这种情况就会发生,这种内存泄漏是无关紧要的:tomcat本身会在短时间内死亡。

    链接地址: http://www.djcxy.com/p/3101.html

    上一篇: Memory leak on GregorianCalendar

    下一篇: How to check if a Calendar instance was originally a wrong date