2015-02-18 30 views
1

我想知道當你有一個jar,在你的運行程序中動態加載,jar中的所有內容(類,資源)都被存儲在VM內存的某個地方嗎?因此每次需要訪問類或文本資源文件(例如,通過getClass()。getResourceAsStream)時,它都可以從內存中快速取出,而不是再次訪問文件系統中的jar文件?即您可以在此之後刪除該jar。java中的默認類加載器是否將所有內容都保存在內存中或保留在文件系統中?

對不起,如果我提出一個錯誤的問題,請將我的問題更改爲解釋類加載器過程,因爲我可能會誤解它,尤其是對jar中包含的資源。謝謝。

+0

它可能是特定於實現的,所以有些JVM可能會這樣做,有些不會 – 2015-02-18 00:04:11

回答

4

不,通常資源不會從磁盤加載,直到您訪問它們。

將類加載到內存中並在第一次使用後保留在內存中。資源不會緩存在JVM或JRE級別 - 每當您撥打getResourceAsStream時,您都會從磁盤獲得新的流。

+0

延遲加載... – 2015-02-18 00:06:18

+0

但理論上,沒有規則可以阻止JVM一次預先加載幾個類文件,是嗎? (我正在討論緩存文件內容,而不是自己加載和解決類) – isnot2bad 2015-02-18 00:15:52

+0

至於你的「資源不會從磁盤加載,直到你訪問它們」,你是否建議資源可以緩存在內存中,一旦你訪問它們? – user1589188 2015-02-18 00:25:04

相關問題