6
我使用Eclipse並編譯並運行了一些項目。然後我決定修改一些課程。 似乎運行的項目沒有趕上變化,但如果我運行項目的另一個實例,那麼它確實看到變化。問題是,Eclipse如何排除這個問題? 因爲我看到.class文件存儲爲單個實例,稍後更改只覆蓋以前的文件。它可能是JVM在內存中加載類,即使它們發生更改也不會觸摸它們。但我想聽完整的故事。如果我在應用程序仍在運行時修改項目中的類,會發生什麼情況?
我使用Eclipse並編譯並運行了一些項目。然後我決定修改一些課程。 似乎運行的項目沒有趕上變化,但如果我運行項目的另一個實例,那麼它確實看到變化。問題是,Eclipse如何排除這個問題? 因爲我看到.class文件存儲爲單個實例,稍後更改只覆蓋以前的文件。它可能是JVM在內存中加載類,即使它們發生更改也不會觸摸它們。但我想聽完整的故事。如果我在應用程序仍在運行時修改項目中的類,會發生什麼情況?
當一個程序運行時,它會將.class
文件讀入內存並從此開始使用該副本。
如果更改,它不會重新讀取文件並重新加載/鏈接,那會更復雜。有類加載器可以自動完成此操作,但這不是默認行爲。 (這也非常不可靠,因爲您可能會以不兼容的方式更改課程,例如修改字段或方法簽名)
一般而言,軟件是以最簡單的方式實現的。如果它很簡單,它更可能工作並被理解。在嘗試瞭解計算機的工作方式時,這應該是您的指導原則。
@mangusta我完全同意他......! ....不管他說什麼..英文請 –
好吧,@Павел以前的.class文件已經被加載到內存中,並且相應地它們從內存中運行並且不知道硬盤驅動器上類的更改 – mangusta
@mangusta也許應該是一個答案,而不是一個評論:P – Rhys