消除内存泄漏问题

时间:2016-11-24 07:48:48

标签: java spring reflection memory-leaks


我正在进行维护项目,并且因内存泄漏而引发问题
基本上,代码是从数据库加载应用程序上下文中的数据值。如果更改了DB中的值,则此功能还用于更新应用程序上下文中的值,而无需重新启动服务器。

使用@Value注释注释的变量会在项目中的每个位置更新,例如:

players

生产报告内存泄漏的方法是updateObjects():

@Value("${cost}")
private String cost;

是否因为使用了反射和&能反射用弹簧解决问题吗?

CustomBeanPostProcessor.java

public class DbPropertySourcesPlaceholderConfigurer extends PropertyPlaceholderConfigurer {

   private CustomBeanPostProcessor customBeanPostProcessor;
   private static Properties dbProps = new Properties();

 private void updateObjects() {
  for (String key : customBeanPostProcessor.getObjectMap().keySet()) {
     if (null != dbProps.get(key)) {
        List<Object> objectList = customBeanPostProcessor.getObjectMap().get(key);
        if (objectList != null && objectList.size() > 0) {
           for (Object object : objectList) {
              if (null != object) {
                 for (Field field : object.getClass().getDeclaredFields()) {
                    Value value = field.getAnnotation(Value.class);
                    if (null != value && null != value.value()
                          && value.value().replace("${", "").replace("}", "").length() > 0
                          && value.value().replace("${", "").replace("}", "").equalsIgnoreCase(key)
                          && field.getType() == String.class) {
                       field.setAccessible(true);
                       try {
                          field.set(object, dbProps.get(key));
                       }
                       catch (IllegalAccessException ee) {
                          logger.error("Unable to update Object",ee);
                       }
                    }
                 }
              }
           }
        }
     }
  }
 }

如果需要更多信息,请与我们联系 谢谢。

0 个答案:

没有答案