我在其中一個Java應用程序啓動命令行中看到以下參數(IBM JVM) -Xcodecache。IBM JVM參數的含義-Xcodecache
雖然直觀上我明白這個參數控制了代碼模塊緩存的大小,但我無法在任何文檔中找到這個參數的描述。
此外,該參數如何與使用不同設置完成的servlet緩存相關?感謝您的幫助。
我在其中一個Java應用程序啓動命令行中看到以下參數(IBM JVM) -Xcodecache。IBM JVM參數的含義-Xcodecache
雖然直觀上我明白這個參數控制了代碼模塊緩存的大小,但我無法在任何文檔中找到這個參數的描述。
此外,該參數如何與使用不同設置完成的servlet緩存相關?感謝您的幫助。
從IBM docs讀這看起來多少,你可以這些JIT過的代碼有:
的編譯代碼放置到JVM進程空間 稱爲代碼緩存的一部分;該方法在代碼 緩存中的位置被記錄下來,以便將來的調用將調用編譯的 代碼。
Take a look at this documentation.
它看起來像IBM codecache是它存儲從類生成本地JIT編譯的代碼。 JVM將其存儲在與其他資源分開的內存塊中。
對於許多應用程序來說,一旦大部分方法已經被JIT編譯,這個「codecache」內存將相當穩定。然而,在JVM生命週期早期,儘管方法仍然是JIT編譯的,或者當代碼生成新類或使用反射時,此內存將被消耗。當JVM確定它在當前分配的編解碼緩存中沒有足夠的空間時,它將分配一個新塊來增加大小。 -Xcodecache
參數設置分配的這些新塊的大小。
這是從鏈接的文檔相關的通道:
JIT編譯器使用內存智能。當代碼緩存初始化爲 時,它消耗的內存相對較少。由於編譯爲本地代碼的更多方法是 ,因此代碼緩存會動態增長爲滿足程序需求的 。先前被丟棄或重新編譯的方法佔用的空間被回收並重新使用。當代碼緩存的大小 達到預定義的上限時,它停止增長。 JIT編譯器將停止所有將來編譯方法的嘗試,以避免耗盡系統內存並影響應用程序或操作系統的穩定性。
該文檔說默認值是特定於架構的,這很有意義,因爲如果您運行的是64位或32位系統,您可能需要分配不同大小的塊。當你想要調整這個值的時候,你正在運行一個定期將新類加載到JVM中的應用程序。在這種情況下,您可能需要增加價值,以便減少新的分配次數。不過,你不應該把它設得太高,因爲你不想分配比你使用的更多的內存。文檔建議
調整最佳大小的合理起點是 (totalNumberByteOfCompiledMethods * 1.1)。
看起來第二個鏈接是關於Sun JVM的。 – seanmk