2009-07-28 52 views
1

我知道Tomcat在運行時有幾種內存類型。Tomcat使用什麼內存類型以及如何控制

我唯一使用過的--java堆。它可以通過JAVA_OPTS ENV屬性來控制的東西,如「-Xmx128m -Xms64m」

我發現還有-XX:MaxPermSize參數,-XX:MaxNewSize等

我之所以這麼問是我試圖在200Mb RAM內存上啓動Tomcat5.5(它是VPS服務器)。我已經用'-Xmx128M -Xms64M'設置了java堆大小,但似乎從啓動開始它消耗的比這更多(如果可以啓動的話,有時候啓動會失敗),而沒有部署應用程序

值得注意的是,如果我啓動maven的tomcat插件,它工作得很好。只有單獨的tomcat失敗並返回內存。

在此先感謝您的想法。

回答

2

正如你所說,堆內存只是JVM的內存池之一,還有其他內存池。

閱讀此得到的他們是什麼想法,如何控制它們,以及如何對其進行監測:

http://java.sun.com/j2se/1.5.0/docs/guide/management/jconsole.html

堆和非堆內存

JVM管理兩種內存: 堆和非堆內存,都在啓動時創建了 。

堆內存是運行時數據區域 ,JVM從中爲所有類實例和數組分配內存 。 堆大小可以是固定的或可變的。垃圾收集器是一個 自動內存管理系統 ,回收對象的堆內存。

非堆存儲器包括所有線程和存儲器 用於內部處理 或優化爲JVM需要之間共享方法區域 。它存儲 等級結構,例如運行時間爲 的常量池,字段和方法數據, 以及方法代碼和 構造函數。方法區域是 在邏輯上是堆的一部分,但是,根據實現, JVM可能不會垃圾收集或壓縮它。 像堆一樣,方法區域可能是固定或可變大小的 。方法區域的內存 不需要連接到 。

除了方法區,JVM 實現可能需要用於 內部處理或優化 這也屬於非堆內存存儲器。 例如,JIT編譯器需要 內存來存儲本地機器 代碼從JVM代碼翻譯爲 高性能。

0

閱讀here瞭解關於設置java堆大小的一些技巧。即使沒有部署任何應用程序,Tomcat也會給你OutOfMemoryExceptions,這很奇怪。也許你的配置出了問題(你在使用什麼操作系統,你如何啓動Tomcat?)。

相關問題