【问题标题】:Limit Java Console heap footprint?限制 Java 控制台堆占用空间?
【发布时间】:2008-12-03 15:16:40
【问题描述】:

我有一个 Java 小程序(一个实际的 ),它经常向 System.out 生成日志消息。如果在用户的浏览器中启用了 Java 控制台,它当然会保留对所有这些字符串的引用,并防止它们被垃圾收集。问题是控制台保留的日志消息的数量:applet 堆增长得非常快。运行四天后,它会抛出 OutOfMemory 异常。据我所知,从 jmap 和 jhat 可以看出,日志字符串代表了它的大部分足迹。

是否有 API 可以更严格地限制 Java 控制台保留的消息数量或总大小?如果出现错误,我只需要最近的几条消息。控制台确实会在某个时候开始淘汰最旧的消息,但只是在它变得非常庞大之后。

我知道“不启动控制台”或“只清除控制台”是可能的解决方案,但您是否尝试过询问非技术用户是否启用了 Java 控制台?或者尝试引导他们查看和清除它?我真的希望他们让控制台保持启用状态,以便在出现错误时看到消息。

【问题讨论】:

    标签: java memory


    【解决方案1】:

    使用java.util.logging 代替System.out.println。以后更改日志级别并减少日志消息的数量要容易得多。

    还要检查MemoryHandler,它使用缓冲区并自动丢弃旧的日志消息。

    【讨论】:

      猜你喜欢
      • 2021-11-22
      • 1970-01-01
      • 2013-08-24
      • 2014-04-14
      • 1970-01-01
      • 1970-01-01
      • 2023-04-04
      • 2014-12-05
      • 2020-04-12
      相关资源
      最近更新 更多