GregorianCalendar上的内存泄漏

时间:2013-01-09 12:28:48

标签: java jsp tomcat

我们遇到此错误,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])和一个值   type [java.util.GregorianCalendar](value   [java.util.GregorianCalendar中的[时间= 1357531128420,areFieldsSet = TRUE,areAllFieldsSet =假,宽松= TRUE,区= sun.util.calendar.ZoneInfo [ID = “澳大利亚/悉尼”,偏移量= 3600,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,HOUR_OF_DAY = 14,MINUTE = 58,SECOND = 48 ,微差= 420,ZONE_OFFSET = 36000000,DST_OFFSET = 3600000]])   但是在Web应用程序停止时无法将其删除。这是   很可能会造成内存泄漏。

建议的解决方案是:

  • 每次需要Calendar

  • 时使用新实例
  • 检查ResultSet.close中的某个挂钩是否足以拨打ThreadLocal.remove()

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

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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