刚发现一个异常:
Exception in thread "sfb_QuartzSchedulerThread" java.lang.OutOfMemoryError: Java heap space
at java.util.TreeMap.key(TreeMap.java:1206)
at java.util.TreeMap.firstKey(TreeMap.java:267)
at java.util.TreeSet.first(TreeSet.java:377)
at org.quartz.simpl.RAMJobStore.acquireNextTrigger(RAMJobStore.java:1209)
at org.quartz.core.QuartzSchedulerThread.run(QuartzSchedulerThread.java:266)
看这个信息,就是quartz引起了内存溢出问题。
网上资料都说IntrospectorCleanupListener能解决这种问题,但我的web.xml中是配置了这个监听器的。
网上的资料:
spring
中的提供了一个名为org.springframework.web.util.IntrospectorCleanupListener的监听器。它主
要负责处理由 JavaBeans Introspector的使用而引起的缓冲泄露。spring中对它的描述如下:
它是一个在web应用关闭的时候,清除JavaBeans
Introspector的监听器.在web.xml中注册这个listener.可以保证在web 应用关闭的时候释放与掉这个web
应用相关的class loader 和由它管理的类
如果你使用了JavaBeans Introspector来分析应用中的类,Introspector
缓冲中会保留这些类的引用.结果在你的应用关闭的时候,这些类以及web 应用相关的class loader没有被垃圾回收.
不幸的是,清除Introspector的唯一方式是刷新整个缓冲.这是因为我们没法判断哪些是属于你的应用的引用.所以删除被缓冲的
introspection会导致把这台电脑上的所有应用的introspection都删掉.
需要注意的是,spring
托管的bean不需要使用这个监听器.因为spring它自己的introspection所使用的缓冲在分析完一个类之后会被马上从javaBeans
Introspector缓冲中清除掉.
应用程序中的类从来不直接使用JavaBeans
Introspector.所以他们一般不会导致内部查看资源泄露.但是一些类库和框架往往会产生这个问题.例如:Struts 和Quartz.
单个的内部查看泄漏会导致整个的web应用的类加载器不能进行垃圾回收.在web应用关闭之后,你会看到此应用的所有静态类资源(例如单例).
这个错误当然不是由这个类自身引起的.
对于这个解释,有点不明白了,为什么是在web应用关闭的时候才清除。web应用都关闭了,内存还不会释放吗?奇怪。
还是看看官方解释吧。
Listener that flushes the JDK's JavaBeans
Introspector
cache on web app shutdown. Register this
listener in your web.xml
to guarantee proper release of
the web application class loader and its loaded classes.
If the JavaBeans Introspector has been used to analyze
application classes, the system-level Introspector cache will hold a
hard reference to those classes. Consequently, those classes and the
web application class loader will not be garbage-collected on web app
shutdown!
This listener performs proper cleanup, to allow for
garbage collection to take effect.
全文完整版查看
分享到:
相关推荐
但是,当Spring与其他框架(如Struts、Quartz)一起使用时,其他框架可能没有妥善处理`Introspector`的缓存清理,此时配置`IntrospectorCleanupListener`就显得尤为重要。 配置`IntrospectorCleanupListener`时,...
- **IntrospectorCleanupListener**:确保由 Spring 管理的 JavaBeans 能够正常初始化和销毁。 - **XFireServlet**:配置名为 `XFireServlet` 的 Servlet,用于处理 `/services/*` 的请求。 4. **Web 服务接口和...
**2.1 使用IntrospectorCleanupListener** 在开发过程中,如果Spring框架中的`Introspector`类未能正确清理缓存,则可能会导致内存泄露问题。为了解决这个问题,可以在`web.xml`中添加一个监听器: ```xml <!-- ...
本文介绍了Listener以下几个方面的内容: · Listener的定义与作用 · Listener的分类与使用 ServletContext监听 Session监听 Request监听 ... Spring使用IntrospectorCleanupListener清理
- **IntrospectorCleanupListener**:这是一个Spring提供的监听器,用于防止`java.beans.Introspector`类引发的内存泄漏问题。将其配置在`ContextLoaderListener`之前可以确保先清理再初始化Spring容器。 - **...
在`web.xml`中,我们需要配置Spring的`ContextLoaderListener`和`IntrospectorCleanupListener`监听器,以及Xfire的Servlet,以启动和管理Spring容器以及Xfire服务。 在`web.xml`的Spring配置部分,我们设置了`...
- **IntrospectorCleanupListener**:防止Introspector引起的内存泄漏。 - **CharacterEncodingFilter**:设置请求编码为GBK,确保中文等多语言支持。 - **Hibernate OpenSessionInViewFilter**:开启事务,确保...
<listener-class>org.springframework.web.util.IntrospectorCleanupListener ``` 这段代码主要包含了以下几个关键配置: - **Spring ApplicationContext配置**:定义了Spring配置文件的位置,通常这些文件会...
`<context-param>`中的`webAppRootKey`定义了Web应用程序的根目录键,而`<listener>`标签注册了两个监听器:`ContextLoaderListener`和`IntrospectorCleanupListener`。 `ContextLoaderListener`是Spring提供的一种...
- **`struts.objectFactory`**:指定Struts2使用的对象工厂为Spring。这意味着Struts2中的Action对象等将由Spring容器创建和管理。 #### 3.1.2 国际化编码 ```xml ``` - **`struts.i18n.encoding`**:设置国际化...
为了避免因所有bean一开始就实例化导致的内存溢出问题,可以通过在`web.xml`中配置`IntrospectorCleanupListener`监听器并设置`lazy-init="true"`来延迟bean的初始化。 **2. DI(依赖注入)** DI是IoC的具体实现,...
为了处理文件上传,我们需要在Spring MVC的配置文件(如`spring-mvc.xml`)中添加MultipartResolver,例如使用`CommonsMultipartResolver`: ```xml <!-- 设定最大上传文件大小,单位为MB --> ...