【问题标题】:StringHTTPMessageConverter loading all charsets causing java heap jumpStringHTTPMessageConverter 加载所有导致java堆跳转的字符集
【发布时间】:2013-03-24 02:33:30
【问题描述】:

我们有一个使用 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 框架的帮助将不胜感激。

感谢和问候

拉维格

【问题讨论】:

    标签: performance spring-mvc character-encoding heap-memory large-object-heap


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-10-24
      • 1970-01-01
      • 1970-01-01
      • 2015-04-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多