java - 频繁的垃圾收集java web应用程序

标签 java garbage-collection

我有一个网络应用程序,它根据用户请求将 java bean 序列化为 xml 或 json。

当我对其施加一点负载时,我遇到了一个令人费解的问题,它很快就用完了所有分配的内存,并达到了最大容量。然后我观察到完整的 GC 每 20-40 秒就非常努力地工作。

看起来不像是内存泄漏问题...但我不太确定如何解决这个问题?

序列化为 xml/json 的 bean 具有对其他 bean 的引用以及对其他 bean 的引用。我使用 json-lib 和 jaxb 来序列化 bean。

yourkit 内存分析器告诉我 char[] 是最消耗内存的 Activity 对象...

感谢任何见解。

最佳答案

有两种可能性:您有内存泄漏,或者您的 web 应用程序只是生成大量垃圾。

  • 判断您是否有内存泄漏的蛮力方法是长时间运行它,看看它是否因 OOME 而失败。或者打开 GC 日志记录,看看垃圾回收后剩余的平均空间是否随着时间的推移持续上升。

  • 无论是否存在内存泄漏,您都可以通过增加最大堆大小来提高性能(减少 GC 时间百分比)。你的 webapp 看到很多完整的 GC 的事实向我表明它需要更多的堆。 (如果您有内存泄漏,这只是一个创可贴解决方案。)

  • 如果事实证明您没有遭受内存泄漏,那么您应该看看为什么您的应用程序会产生如此多的垃圾。这可能取决于您执行 XML 和 JSON 序列化的方式。

关于java - 频繁的垃圾收集java web应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3561412/

相关文章:

java - 调整垃圾回收以实现低延迟

c - 在 C 中使用简单引用计数器的示例代码或项目

java - GC 日志 - VM 操作事件 - 如何跟踪它们

java基础静态方法

java - 作业: Why is catch being bypassed?

java - 模拟返回带有捕获泛型的迭代器的方法

java - 有机会猜测随机数

java - G1 GC 巨大对象分配

java - Java 中分配 null 和垃圾回收

javascript - 从子窗口调用操作,关闭子窗口并重新加载父页面