Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Config的Java内存泄漏_Java_Memory Leaks - Fatal编程技术网

使用Config的Java内存泄漏

使用Config的Java内存泄漏,java,memory-leaks,Java,Memory Leaks,我们使用下面的代码从XML中读取配置值。我认为这会导致内存泄漏 // simulated code class ConfigReader { void matchPlanIDs() { ConfigurationItem[] items = ConfigurationHelper.getConfiguration("PLAN_IDS"); // do something with here in for loop by rea

我们使用下面的代码从XML中读取配置值。我认为这会导致内存泄漏

   // simulated code
   class ConfigReader {

      void matchPlanIDs() {
           ConfigurationItem[] items = ConfigurationHelper.getConfiguration("PLAN_IDS");
           // do something with here in for loop by reading from 
           // items[i].getTagVlue()...;  

           return;
      }
   }
项[]是否在方法执行结束时引用了ConfigurationHelper.getConfiguration(“PLAN_ID”),并且不能在一个周期内进行垃圾收集?这是有力的证明吗


感谢您提供的所有指针。

方法执行结束后,items实例可以立即被垃圾回收,因为没有任何内容包含对它的引用。这没有任何内存泄漏的可能性。但是,在方法执行过程中,阵列可能会消耗大量内存,如果GC配置不正确,则可能会导致完全GC。

void matchPlanIDs() {
     ConfigurationItem[] items = ...
   return;
  }
不能导致内存泄漏。当然,
将被垃圾收集

顺便说一句,结尾的
返回也没有意义


如果您认为
ConfigurationHelper.getConfiguration(…)
导致内存泄漏,请尝试通过一个简单的示例来验证这一点。如果您确实注意到异常行为,那么最好向
ConfigurationHelper
的作者提交错误报告。但是,我怀疑这种情况不太可能发生,我怀疑您的内存消耗问题在其他地方。

有一些。

您确定这是内存泄漏吗?或者你只是消耗了太多的内存?你在这里做什么//在for循环中通过读取来处理这里?检查你的班级是否以任何方式持有对物品的引用?@HefferWolf:我对此表示怀疑。谢谢你的澄清。如果items[]被声明为类级(静态)变量并初始化为保存config中的元素,这将优化代码,因为不是每次线程执行都读取值,而是第一次读取值。对吗?如果您将整行设置为static class属性,那么只有在加载类时才会运行配置(通常只加载一次,但不要指望它)。