2009-06-24 72 views
1

我有一個順序調用java程序的bash腳本。這有點棘手,但主要是我有一個循環,並執行約1500次具有不同參數的相同Java程序。Java程序的順序執行== jvm的順序激活?

我的問題是,當使用java 1.5(sun VM)時,每次我調用java程序時,都會創建一個新的jvm實例? (我不知道這是正確的詞彙...)

我應該通過引入間接級別來避免這種情況,即構建所有參數的列表,然後執行一個接受這些參數並執行的java程序以前我的切入點是什麼?

或者,我可以處理通過配置JVM的居民或類似的東西的問題,並動態地調用我的程序....

希望這是明確的....

THX ...

+0

是的,如果JVM啓動不會使您的程序的實際執行時間變得更加渺茫,那麼我會非常驚訝。 – 2009-06-24 14:10:19

+0

我也是..在我來之前,我正在對抗真正糟糕的表演......這是一個很好的起點 – LB40 2009-06-24 14:12:16

回答

4

您可以將參數保存到文件中並使用Java程序在不重新啓動的情況下對其進行處理。你也可以管的參數爲通過控制檯正在運行的Java應用程序,類似於例如ls | grep java

編輯:而對於第一個問題。我懷疑java運行時會故意留在內存中。無論如何,大多數JRE文件可能會保留在磁盤緩存中。在Windows上有一個Java快速啓動服務,它可以保持JRE文件的運行,從而減少Java程序的啓動時間。不知道* nix是否有類似的東西。

1

很明顯,事先擁有所有的參數並在此之後運行程序將是最好的解決方案。如果你不能這樣做,我有一個非常骯髒的解決方案。讓程序註冊一個端口並聽取輸入。然後只需將參數傳遞給該端口,並讓程序將它們作爲新實例處理。

1

JVM的啓動速度非常慢,而且當然不打算在這樣的循環中完成。不幸的是,如果您將命令行參數傳遞給java程序,唯一的方法是以某種方式修改java程序本身,以便具有其他交互形式(從控制檯或端口或讀取文件) 。如果Java程序無法更改,Java快速入門是唯一(最接近於)解決方案。

真正的解決方案是更改Java程序。最明顯的變化是讓你的循環寫入一個文件,然後啓動一次只讀一行文件的java程序。如果循環不關心下一組參數的java程序的結果,那麼這個方法就行得通。

如果確實如此,那麼真正有必要了解這種關係以便就適當的解決方案提供建議。 Savvas建議的套接字解​​決方案確實是一種通用的解決方案,但可能有更好的選擇,具體取決於您需要完成的任務。