2008-12-03 18 views
0

我有一個Java小程序(實際的<APPLET>),它會生成頻繁的日誌消息到System.out。如果在用戶的瀏覽器中啓用Java控制檯,它當然會保留對所有這些字符串的引用並防止垃圾收集。問題在於控制檯保留的日誌消息的數量:小程序堆增長得非常快。運行四天後,它會拋出OutOfMemory異常。就我從jmap和jhat中可以看出的來說,日誌字符串代表了它的大部分空間。限制Java控制檯堆佔用空間?

是否有API更嚴格地限制Java控制檯保留的消息數量或總大小?如果發生錯誤,我只需要最近的幾條消息。控制檯確實會在某個時候開始退出最舊的消息,但只有在它變得非常龐大之後纔開始退休。

我意識到「不要啓動控制檯」或「只是清除控制檯」是可能的解決方案,但是您是否曾嘗試詢問非技術用戶是否啓用了Java控制檯?或嘗試通過查看和清除它們來走動它們?我真的希望他們離開控制檯啓用,所以我可以看到消息,如果有錯誤。

回答

1

而不是System.out.println使用java.util.logging。稍後更改日誌級別並減少日誌消息的數量會更容易。

還檢查MemoryHandler,它使用緩衝區並自動丟棄舊的日誌消息。