2012-04-24 43 views
0

這將是我的第一個問題,所以請如果我沒有完成問題或留下一些事情讓我知道。爲靜態類實例變量取消分配

背景: 那麼我有一個基於Java的網絡服務,它正在服務一個iPhone應用程序。它與數據庫有連接,爲了提高我使用Memcached實現緩存的性能。我使用的連接器是spymemcached。

我的問題: 我有一個靜態類,它具有與memcached服務器的同步連接。 我參考的是:http://sacharya.com/using-memcached-with-java/

但是,當我重新啓動memcached服務器或部署在Tomcat另一個罐子我得到這個錯誤: Web應用程序似乎已經開始了一個線程名[一些名],但未能阻止它。這很可能造成內存泄漏。

那麼,如何才能在tomcat上重新啓動或重新部署我的應用程序之前取消分配靜態類?

- 謝謝。

+0

我很確定最好的答案是不將同步連接存儲在靜態變量或類中。 – 2012-04-24 18:11:09

回答

-1

該頁面爲MyCache類實現Singleton模式。 單身不能被摧毀。

也許你可以定義一個ServletContextListener(或應用服務器中的類似的Listener)來手動停止線程。

+0

錯了。如果Web應用程序的類加載器加載單身人士,它可能會被銷燬。當Web應用程序類加載器停止並且本身適用於GC時,GC足夠智能以處理這種特殊情況。 – 2012-04-24 19:07:43

+0

我相信JVM可以銷燬它。我的回答與問題有關:「那麼,在我能夠在tomcat上重新啓動或重新部署我的應用程序之前,如何取消分配靜態類?」。不能在編程層銷燬,這是Singleton實現的主要問題。 – 2012-04-24 20:15:14

+0

那麼如果我想用代碼來做呢?我怎麼做? 我知道這是一個愚蠢的問題。只是好奇。 – 2012-04-24 20:45:32