繼一個OutOfMemoryError予處理通過IBM Support Assistant的64位存儲器分析器所得heapdumpsStringBuffer的炭[]似乎是出界在堆轉儲
若干泄漏候選人列出((J9 VM上的Websphere 7.0.23運行)所有系統類加載器都相關),但其中的一個似乎表明在StringBuffer中用值爲256初始化的char []實際上包含7700萬個空字符。
從支持助理所得堆轉儲分析顯示一個char [77418987] @ 0xc32 * * * \ u0000的\ u0000的\ u0000的.......
這通過引用的StringBuffer - >的PatternLayout - > TimeAndSizeRollingAppender
保留的堆檢出,每個char有2個字節,數組本身爲18個,總共爲150+ Mbs。
Log4j版本是1.2.16,我們使用了同步TimeAndSizeRollingAppender(儘管我想刪除這個依賴關係)。
這可能是來自Support Assistant的誤報,或者是否有某種方式可以使char [256]成爲堆上的char [77000000+]?
」實際上包含7700萬個空對象「 - 不,它包含7700萬U + 0000個字符。沒有「空對象」這樣的東西。在使用術語時應該精確。這聽起來像是在創建'StringBuffer'的任何錯誤 - 你能鏈接到相關的代碼嗎? –
已修改。這裏的屏幕截圖http://s1026.photobucket.com/user/Spinflight/media/charstackoverflow_zpsa176f1f5.png.html – Chaffers
StringBuffer似乎是由log4j PatternLayout.java創建的。 – Chaffers