[英]Java: `static` Methods
當我調用靜態方法時:
Something.action();
由於未創建實例,靜態方法的Class將在內存中保存多長時間?
如果我調用相同的方法將為每次調用重新加載Class,因為沒有實例存在?
並且只是在調用時加載了單獨的靜態方法,或者將一個類的所有方法和靜態方法加載到內存中,即使可能只使用一個靜態方法?
除非您配置了permgenspace的垃圾收集,否則該類將保留在內存中,直到vm退出。 完整的類加載了所有靜態方法。
該類保留在內存中,直到加載該類的類加載器保留在內存中。 因此,如果從系統類加載器加載類,則據我所知,類永遠不會被卸載。
如果要卸載類,則需要:
在某些配置中,在您撥打電話之前,甚至會加載班級。 我們使用了BES(Borland Enterprise Server),我們的Solaris生產服務器出現了問題,其中所有引用的類都在我們的應用程序啟動時遞歸加載。 這意味着,當我們的應用程序的主類被加載時,應用程序服務器加載了該類的導入部分中引用的所有類...遞歸。
作為旁注,除非您在非常大的內存約束環境中運行,或者如果要加載大量不必要的類,否則您不應過多關注內存中加載的類的內存使用情況。
在加載調用者類時,應該加載Something類。 正如krosenvold所說,它一直停留在VM的出口處。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.