2015-07-02 20 views
-3

我在java中有一個應用程序,它連接到一個數據庫並寫一些報告。我想每天在特定的時間寫這些報告。首先,我打算使用Windows服務器中的任務調度程序,但顯然它在執行我的jar時遇到了問題。所以我儘管我可以在java中使用Thread,並執行我的代碼中的部分代碼,這些代碼在我每天特定的時間所說的報告中都有說明。這意味着我必須讓我的應用程序始終運行,它感覺不對,但這是我目前唯一的選擇。如何清除java中使用的線程的內存?

這裏的問題是這樣的:

當我運行我的程序,它等待,直到它的時間打電話,這將創造我的報告類,問題是,在第一次被Java所消耗的內存是11舉例來說,在執行報告部分時,內存達到將近10 000 KB(這是合理的,我認爲,因爲我正在連接到數據庫並寫入文件等),那麼當需要再次編寫這些報告時,它將達到120 000 KB,並且下一次130 000 KB時,它不會更高,但是我想知道是否有一種方法可以在執行報告的一部分時返回到11 000 KB。 我讀過關於調用垃圾收集的方法,但它不起作用,也沒有設置爲空我的對象。 你們有什麼想法,爲什麼會發生這種情況?

謝謝!

+0

如果你可以打包它從cron每日運行,並忘記它 – Drew

+0

也許你應該投入更多的時間來檢查爲什麼Windows任務調度程序不會運行你的jar。也許你試圖用'javaw'而不是'java'來運行它,或者不正確地設置你的路徑。 Java通常不會將未使用的內存返回給操作系統,它會在需要時將其保留。 – RealSkeptic

回答

0

我強烈建議使用石英。這是一個庫,它允許您安排一個將在特定時間執行的作業,而不需要等待(在一個線程中)在單獨的線程中。沒有理由去發明一些被髮明的東西。 :) http://quartz-scheduler.org/