相关疑难解决方法(0)

为什么调用System.gc()是不好的做法?

回答了关于如何用Java强制释放对象的问题(这个人正在清除一个1.5GB的HashMap)后System.gc(),我被告知System.gc()手动调用是不好的做法,但这些评论并不完全令人信服.此外,似乎没有人敢投票,也没有人回答我的回答.

我被告知这是不好的做法,但后来我也被告知垃圾收集器运行不再系统地停止世界,并且它也可以有效地被JVM用作提示,所以我有点像茫然

我知道JVM在需要回收内存时通常比你知道的要好.我也明白,担心几千字节的数据是愚蠢的.我也明白,甚至数兆字节的数据也不是几年前的数据.但仍然,1.5千兆字节?而且你知道内存中有1.5 GB的数据; 它不像是在黑暗中拍摄.是System.gc()系统性的坏,还是有一点它变得好吗?

所以问题实际上是双重的:

  • 打电话为什么或不是不好的做法System.gc()?它是否仅仅是某些实现中JVM的提示,还是一个完整的收集周期?真的有垃圾收集器实现可以在不停止世界的情况下完成工作吗?请详细说明人们在评论中对我的回答所做的各种断言.
  • 门槛在哪里?打电话是不是一个好主意System.gc(),或者有时候可以接受?如果是这样,那些时候是什么时候?

java garbage-collection

317
推荐指数
7
解决办法
12万
查看次数

Tomcat Guice/JDBC内存泄漏

由于Tomcat中的孤立线程,我遇到了内存泄漏.特别是,似乎Guice和JDBC驱动程序没有关闭线程.

Aug 8, 2012 4:09:19 PM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
SEVERE: A web application appears to have started a thread named [com.google.inject.internal.util.$Finalizer] but has failed to stop it. This is very likely to create a memory leak.
Aug 8, 2012 4:09:19 PM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
SEVERE: A web application appears to have started a thread named [Abandoned connection cleanup thread] but has failed to stop it. This is very likely to create a memory leak.
Run Code Online (Sandbox Code Playgroud)

我知道这与其他问题(例如这个问题)类似,但在我的情况下,"不要担心它"的答案是不够的,因为它给我带来了问题.我有CI服务器定期更新此应用程序,并且在6-10次重新加载后,CI服务器将挂起,因为Tomcat内存不足.

我需要能够清除这些孤立的线程,以便我可以更可靠地运行我的CI服务器.任何帮助,将不胜感激!

java tomcat

49
推荐指数
5
解决办法
5万
查看次数

Guice 3.0 + Tomcat 7.0 = ClassLoader内存泄漏

我知道这个问题已经存在至少3年(问题92),但我仍然不满意它的当前状态.我也知道如果你在重新部署后重新启动(如Guice + Tomcat潜在的内存泄漏中所建议的那样),这不会影响Tomcat .

我的问题是我OutOfMemoryError: PermGen在重新部署后遇到了错误.请注意,我没有明确使用google-collections,我只使用Guice 3.0(通过maven).在分析堆转储之后,我仍然看到线程com.google.inject.internal.Finalizer仍处于活动状态,保持对Tomcat的WebappClassLoader的引用,从而阻碍了垃圾收集.

如果我实际上需要重新部署而不重新启动并使用Guice,该怎么办?我有什么选择?

java tomcat memory-leaks guice

11
推荐指数
1
解决办法
2167
查看次数

标签 统计

java ×3

tomcat ×2

garbage-collection ×1

guice ×1

memory-leaks ×1