这是Spring 框架的Listener 类:org.springframework.web.util.IntrospectorCleanupListener
此监听器主要是为了防止由java.beans.Introspector导致的内存泄漏问题。.
JDK中的java.beans.Introspector类是用于检查Java 类是否符合JavaBean规范。
注:javaBean是一种java语言写成的可重用组件(类),遵循以下规范:
1、类必须使用public修饰。
2、必须保证有公共无参数构造器。
3、包含了属性的操作方法(getter/setter)。
如果有的程序或框架用到该类,那么就会启用系统级别的缓存,此缓存会存放一些曾加载并分析过的JavaBean引用。当Web 服务器关闭后,由于此缓存还存放着这些对JavaBean的引用,导致GC没办法回收Web 容器中的JavaBean对象。久而久之内存占用就会越来越大,造成内存泄露。
而Spring 的IntrospectorCleanupListener就是为了解决该问题而存在的。IntrospectorCleanupListener类会在Web 服务器停止后检查并清理缓存里面的引用。
Spring自身不会出现这种问题,因为Spring在加载并分析完一个类之后会马上刷新 JavaBeans Introspector缓存,这就保证Spring中不会出现这种内存泄漏的问题。但有些程序和框架在使用了JavaBeans Introspector之后,没有进行清理工作(如 Quartz,Struts),最后导致内存泄漏。
网友评论