我正在使用Play构建Java Web应用程序!框架。我将其托管在playapps.net上。我一直对提供的内存消耗图感到困惑。这是一个示例:
该图来自一个持续但名义上活跃的时期。我没有采取任何措施来触发内存下降,所以我认为发生这种情况是因为垃圾收集器因为它几乎达到了其允许的内存消耗而运行。
我的问题:
System.gc()
,从中性(“这只是运行GC的请求,因此JVM可能会忽略您”)到完全反对(“所依赖的代码System.gc()
从根本上破坏了”) 。还是我不在这里,我应该在自己的代码中寻找导致这种行为和间歇性性能损失的缺陷?更新
我已经在PlayApps.net上打开了一个讨论,指出了这个问题,并在这里提到了一些要点。特别是@Affe关于完整GC设置的评论非常保守,而@G_H关于初始和最大堆大小的设置的评论。
这是讨论的链接,尽管很遗憾,您需要一个playapps帐户才能查看它。
收到反馈后,我将在此处报告反馈。非常感谢大家的回答,我已经从他们那里学到很多东西!
分辨率
Playapps的支持仍然很棒,对我没有太多建议,他们唯一的想法是,如果我广泛使用缓存,这可能会使对象的生存期比需要的更长,但事实并非如此。我仍然学会了一吨(呜呼!),我接受了他建议System.gc()
每半天打一次电话的建议,给了@Ryan Amos绿色的支票,目前为止工作正常。
Java除非必须这样做,否则Java不会运行垃圾清理程序,因为垃圾清理程序会大大降低速度,因此不应经常运行。我认为您可以安排更频繁的清洁,例如每3个小时一次。如果应用程序从不消耗全部内存,那么就没有理由运行垃圾清理程序,这就是Java仅在内存很高时才运行垃圾清理程序的原因。
因此,基本上,不必担心别人怎么说:做最有效的事情。如果发现以66%的内存运行垃圾清理器可以提高性能,请执行此操作。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句