2013-01-15 67 views
0

的Java:1.6 OS:Win XP的命令行Java執行和殺害

我一直有一個計劃任務我做了序幕我創建了一個Java程序的問題。問題在於程序使用了大量的數據,導致程序在中途被佔領。

我繼續前進並將程序分成不同的部分,因此它們不必一次全部運行,但是我不確定如何爲計劃任務構建.cmd文件。我需要它運行每一塊,並在每一塊後,殺死Java /運行垃圾收集,然後運行下一個任務。

原始片:

java -jar CommandLine.jar -f p d pr d dr d e d qp d ea d pa d pb d as d ndp d g d sc d 2> ErrorLog\cmdErrorLog.txt 

每一塊用p d,或PR d表示。

所以會這樣的事實際上停止Java? (測試硬盤的原因IM上跑時,你得到實現實時數據集上運行):

java -jar CommandLine.jar -f pr d 2> ErrorLog\cmdErrorLog.txt 
java -jar CommandLine.jar -f dr d 2> ErrorLog\cmdErrorLog.txt 
java -jar CommandLine.jar -f e d 2> ErrorLog\cmdErrorLog.txt 
java -jar CommandLine.jar -f qp d 2> ErrorLog\cmdErrorLog.txt 
java -jar CommandLine.jar -f ea d 2> ErrorLog\cmdErrorLog.txt 
java -jar CommandLine.jar -f pa d 2> ErrorLog\cmdErrorLog.txt 
java -jar CommandLine.jar -f pb d 2> ErrorLog\cmdErrorLog.txt 
java -jar CommandLine.jar -f as d 2> ErrorLog\cmdErrorLog.txt 
java -jar CommandLine.jar -f ndp d 2> ErrorLog\cmdErrorLog.txt 
java -jar CommandLine.jar -f g d 2> ErrorLog\cmdErrorLog.txt 
java -jar CommandLine.jar -f sc d 2> ErrorLog\cmdErrorLog.txt 

還是有更好的方式來殺死每一塊之間java嗎?我真的只需要清除內存並重新啓動java。

另外請注意,我已經給了Java儘可能多的內存,因爲我可以在它運行的盒子上。

任何幫助將是洞察力或幫助將是偉大的。

謝謝!

回答

1

每次執行Java代表一個新的自包含JVM。因此,執行多次顯然將在下一個實例開始之前完全放棄所有內存。

如果您可以輕鬆修改CommandLine程序,那麼更有效的方法是使用Main方法在同一個進程中分割工作。它可以基本上完​​成您對多個JVM執行的操作,但不必每次都停止/啓動新的JVM。這意味着程序需要正確書寫,以放棄每次迭代中的所有資源,以便garabage收集器可以完成其工作。

+0

感謝您的回答,我的擔心是,它的設置正確,並且垃圾收集在每件之間運行,但機器甚至只處理其中一個部分的問題。 – littlevahn

+0

如果jvm進程真正結束,那麼JVM垃圾回收已經運行(或者實際上已經變得不相關),並且操作系統提供給JVM的內存已經完全回收。 – kaliatech