0

我们有一个使用 Spring 3.1.0.Final 并部署在 WAS 6.1 上的 portlet 应用程序。

过去我们有多个使用 Spring MVC 的 portlet。这是 Spring 3 的第一个 portlet。我在代码的大部分地方都使用注释和自动装配。

当此应用程序部署在服务器中时,基本堆使用量增加了 25+ MB。

我使用 Jprofiler 进行了分析,发现 StringHTTPMessageConverter 正在将所有字符集加载到占用大约 14 MB 内存的内存中(com.ibm.nio.charset.Charset 占用内存)

因为它是一个 portlet 应用程序,所以我在我的配置中明确定义了 org.springframework.web.portlet.mvc.annotation.Ann otationMethodHandlerAdapter bean,而不是 org.springframework.web.servlet.mvc.annotation.Ann otationMethodHandlerAdapter

这是我迄今为止尝试做的

1) 更改 StringHttpMessageConvertor 设置

在我的配置中定义了以下 bean

<bean class = "org.springframework.web.servlet.mvc.annotation.An notationMethodHandlerAdapter">
<property name = "messageConverters">
<list>
<bean class = "org.springframework.http.converter.StringHttpMess ageConverter">
<property name = "supportedMediaTypes">
<list>
   text/plain;charset=UTF-8
</list>
</property>
</bean>
 </list>
</property>

没有运气。

2)我已经在我的配置文件中定义了。正如一些帖子中所建议的,我还通过注释掉标签来尝试上述配置。但没有运气。

3) 正如一些论坛所建议的那样,我尝试编写 BeanPostProcessor 但找不到 StringHttpMessageConverter 类。

我是否需要在我的配置中明确定义 org.springframework.web.servlet.mvc.annotation.Ann otationMethodHandlerAdapter?

我的问题是

1)有什么办法可以避免所有字符集加载到内存中?

2) 基堆中的 25 MB 跳跃也是合理的吗?Spring 3.1.0 通常的内存足迹是什么?

我已经没有想法了 任何有关微调 Spring 框架的帮助将不胜感激。

谢谢并恭祝安康

拉维格

4

1 回答 1

0

更新:问题已解决,从配置中删除标签。我们正在使用 Portlet MVC 注释处理程序适配器,因此 Servlet MVC 注释处理程序适配器是不必要的,根本不需要。StringHttpMessageConvertor 是由 Servlet MVC Annotation Handler 标签引入的。其构造函数中的 StringHttpMessageConvertor 具有将字符集拉入内存中的代码。

于 2013-05-06T06:15:04.353 回答