2013-03-07 46 views
8

我有一個很難寫的標題到這個問題,但這裏是我的情況,什麼我問:應用程序運行後是否需要java .class文件?

  • 我有上運行的「螞蟻測試」 Java項目運行測試
  • 測試需要大約10分鐘才能運行
  • 我可以在運行這些測試的過程中切換到不同的Git分支而沒有任何後果嗎?
  • 我想要測試完成對原始代碼,並允許我簡單地在不同的分支上工作,而發生這種情況。

我猜我的問題的根源是:應用程序加載並運行後需要.class文件嗎?這些類是否存儲在內存中,我不再需要文件系統上的文件了?還是它仍然訪問/讀取文件系統上的東西?

感謝任何洞察或更好地理解Java運行的應用程序需要什麼。

回答

6

類按需加載。在類被引用之前,類加載器不會嘗試加載類。因此,在運行過程中從類路徑中刪除類文件幾乎肯定會導致失敗。

+0

明白了,所以如果我知道所有的類都加載了,它可能會沒問題,但是沒有一個很好的方法來知道這一點,所以不安全。謝謝 – 2013-03-07 21:54:59

3

如果您在編譯運行測試時從Git獲取的.java文件不會遇到.class文件的問題 - 無論IDE如何加載類。

+1

*「除非您在測試運行時在同一位置編譯.java文件」*但這個想法是合理的) – MadProgrammer 2013-03-07 21:02:46

+0

好點<;)> – ddmps 2013-03-07 21:14:18

+0

這實際上是有幫助的。我的「ant test」命令編譯到與我的IDE不同的位置,所以我可以實際簽出.java文件的不同分支,而不必擔心正在運行的測試。 .class文件的文件夾顯然是.gitignore'd,所以這可能沒有問題。謝謝! – 2013-03-07 21:58:53

0

標準(我的意思是sun/oracle)JVM一旦加載了一個類,它將一直保留在內存中,直到jvm關閉,但它可能沒有被加載,因爲類是按需加載的。

0

如果所有的文件都被加載到內存中,那麼它不會被需要......但是那麼如何確保所有的類都被加載到內存中......所以你需要類路徑中的類文件

0

嗯,我認爲你必須向後退一步,重新考慮解決方案。

您寫道,您執行集成測試。作爲測試的一部分,您正在切換測試過的來源。如果你這樣做,你會產生無用的測試數據,因爲你不能確定,真正執行了什麼。

如果您想測試兩種不同的vrsion /分支軟件,只需啓用兩個測試運行並比較結果即可。

如果您已經使用過,則只能確定加載了* .class文件。在加載類文件之後,它保留在JVM的內存中。也許它會被卸載,如果一段時間未使用,創業板空間越來越小(但我不這麼認爲)。

+0

感謝您的回答。我沒有試圖一次測試兩個分支。我只是想測試一個分支,並在另一個分支上做一些工作。我想用原始分支的代碼完成測試。 – 2013-03-07 21:53:03

+0

試試哈德森或jekins。使集成測試不在工作區中。 – 2013-03-07 23:03:08

+0

我們使用Bamboo,但我通常會在推送之前嘗試運行測試,以便我知道我不會爲其他開發人員打破構建。 – 2013-03-07 23:05:20

相關問題