StringHTTPMessageConverter加载导致java堆跳转的所有charset

时间:2013-03-24 02:33:31

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

我们正在使用一个使用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 explicity而不是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>

<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框架的帮助都会受到高度赞赏。

谢谢和问候

RaviG

1 个答案:

答案 0 :(得分:0)

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