我在使用Java动态填充数组这一简单任务时遇到了一个有些莫名其妙的问题。以下是从哪里的问题起源的快照:为什么此代码填充数组会造成内存泄漏?
entries = new Object[ (n = _entries.length + 1) ] ;
for(i = 0 ; i < n ; i++) {
entry = (i == (n - 1)) ? addition : _entries[i] ;
entries[i] = entry ;
//...
}
凡_entries
是源Array
(类的字段); entries
被初始化为一个Array
的Object
小号
Object[] entries = null ;
addition
和要被添加的Object
(作为参数传递给该代码是在该方法中传递)。
代码通过编译器,但调用时会导致内存泄漏。我能事业缩小到所在行的代码试图填补新Array
entries[i] = entry ;
不过,我想不出任何理由为什么这会导致内存泄漏。我猜测问题的根源必须是我的一个非常愚蠢的错误,或者Java的一个非常神秘的问题。 :-)
如果您需要更多背景,请告诉我。
编辑:
Tomcat的日志告诉我:
Web应用程序似乎已经开始了一个名为线程...但未能阻止它。 这很可能会造成内存泄漏。
除此之外,显然加载类的页面并未完成加载或加载非常缓慢。
编辑:毕竟
这个问题可能在其他地方(在更期望的位置)。显然,当我试图锁定有问题的代码时,Tomcat并没有一直加载类文件,这会误导我一点。我现在怀疑由于在调用堆栈中存在有缺陷的Iterator实现而造成的每个循环都会导致一个infinte错误。 无论如何,感谢您的输入!总是非常感谢!
我会用一个Collection
(可能是一个Vector
)而不是Array
作为一个变通;仍然,我想知道这里的问题是什么。
TIA,
FK82
Off topic:$条目是什么意思?在java中,我从来没有在这个上下文中看到$ notation。有人能为此启发我吗? – 2011-02-16 13:22:25
@shadow:那也让我感到困惑。我想这是一种代码模板机制。 – 2011-02-16 13:23:16
是什么让你觉得有内存泄漏?这在Java中很难做到。 – Gabe 2011-02-16 13:23:27