Bor*_*zic 6 java memory heap spring applicationcontext
我们在具有内存限制的半嵌入式设备上部署应用程序.我们正在分析应用程序的堆转储并攻击最大的消费者.
我们将Spring 2.5和Spring DM 1.1一起使用,我们注意到我们的一些包含更复杂的Spring上下文的bundle会占用相当多的内存,因为Spring似乎保留了包含从XML解析的所有BeanDefinition的整个对象图. .我认为,一旦应用程序初始化并注入所有内容,大部分内容都是不必要的.
是否有Spring的配置选项允许控制此行为?在某种低内存模式下运行?扔掉所有不必要的东西?交易计算时间的大小?
我让团队成员对此有了更深入的了解,并得到了一些有趣的结果.Spring的默认配置非常不感兴趣,因为它的内存使用特别保守.有两个基本方面可以调整以获得显着收益:
OsgiBundleXmlApplicationContext,如果从该类扩展并覆盖该customizeBeanFactory方法,则可以覆盖该属性.我们这样做了:
@Override
protected void customizeBeanFactory(DefaultListableBeanFactory beanFactory) {
super.customizeBeanFactory(beanFactory);
String cacheBeanMetadataSysProp = System.getProperty(CACHE_BEAN_METADATA, "true");
if (cacheBeanMetadataSysProp != null
&& cacheBeanMetadataSysProp.equalsIgnoreCase("false")) {
beanFactory.setCacheBeanMetadata(false);
} else if (cacheBeanMetadataSysProp != null
&& cacheBeanMetadataSysProp.equalsIgnoreCase("true")) {
beanFactory.setCacheBeanMetadata(true);
}
}
Run Code Online (Sandbox Code Playgroud)
设置"setCacheBeanMetadata"属性false导致BeanDefinitions(你的基于XML的配置基本方案镜)来初始化后丢弃.
| 归档时间: |
|
| 查看次数: |
4046 次 |
| 最近记录: |