2014-04-10 33 views
0

我想知道JVM在完成應用程序時做了什麼。它運行了System.exit()以及System.exit()SystemExiter()之間有什麼不同?JVM在完成應用程序後會做什麼?

+2

JVM關閉。它不需要調用System.exit(),因爲JVM不是Java程序。另外,SystemExiter似乎與任何東西都沒有關係(這是一個Spring類?)。 – Kayaman

回答

2

JVM關閉的實現方式會有所不同。請記住,JVM不是用Java編寫的,並且不會調用System.exit()來自行結束。

SystemExiter是一個Spring接口,它將摘要調用摘要到System.exit()。應用程序可以使用該接口,而不是直接調用System.exit(),從而允許在測試期間修改行爲。如果一個類在測試期間調用System.exit(),它將結束測試周期,因爲JVM會關閉。例如:

public class SomeClass { 

    private SystemExiter exiter; // inject this or accept in constructor 

    public void someMethod() { 
    // ... 

    exiter.exit(1); 
    } 
} 

在生產系統中,你可以使用JvmSystemExiter實現真正關上了VM。在測試中,您可能會嘲笑SystemExiter界面並檢查exit()被調用。

+0

你偷了我的評論! ;) – Kayaman

+0

在我的應用程序Spring批處理中,我從單個作業運行多個作業。這需要SystemExister方法。如果它不包括只有一個工作運行。請解釋SystemExister如何工作。非常感謝你。 – T8Z

相關問題