使用Config的Java内存泄漏
我们使用下面的代码从XML中读取配置值。我认为这会导致内存泄漏使用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
// 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属性,那么只有在加载类时才会运行配置(通常只加载一次,但不要指望它)。