我在使用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