2016-04-28 61 views
1

我想在程序啓動後儘快修改/設置JVM標誌。我不能在命令行上這樣做,因爲我與甚至不知道存在的人一起工作。所以它必須在程序中自動完成。在運行時修改JVM標誌

我通過這三個標誌特別感興趣:-Xms4G -Xmx8G -noverify

this discussion(或that one)發現,有可能使用Interface HotSpotDiagnosticMXBean修改某些標誌。並且this code顯示瞭如何修改標誌。不幸的是,標誌Xms或只是ms無法識別,然後拋出異常。

我也發現capsule可能會做這項工作,但它似乎很重要的使用。

有沒有簡單的方法來做到這一點?

+2

我會說你不能。但是你可以使用'ProcessBuilder'從你的代碼中以所需的參數啓動第二個jvm。 – joshiste

+0

我不知道它是如何工作的。開始一個其他的JVM好,但我的程序已經開始在第一個。我怎樣才能讓它打開第二個? – FiReTiTi

回答

3

您需要編寫兩個程序:一個只是一個啓動程序,以提供運行其他程序的正確參數。這就是Eclipse的工作方式,以及Jitsi和現在結束的InstallShield Multiplatform啓動程序。這可能是你可以寫一個簡單的(例如,一行或接近它)shell,.bat或VBS腳本來完成這項工作。

+1

謝謝你的回答!所以我必須創建一個第一個非常簡單的可執行jar文件,稱爲讓我們說Launcher,它將啓動第二個可執行jar文件,但具有所有必需的參數。所以在我的情況'java -noverify -Xms4G -Xmx8G -jar MyMainJar.jar'。我對麼?如果是的話,你會知道命令開始一個命令嗎? – FiReTiTi

+0

順便說一句,我說罐發射器,因爲軟件必須是多平板。 – FiReTiTi

+1

是的,你可以用Java編寫啓動程序。 (這是InstallShield Multiplatform啓動程序的方式)您可以使用['Runtime.exec()'](https://docs.oracle.com/javase/8/docs/api/java/lang/Runtime.html#exec -java.lang.String:A-)或更多控制['ProcessBuilder'](https://docs.oracle.com/javase/8/docs/api/java/lang/ProcessBuilder.html) – dsh