2011-08-03 42 views
1

由於java應用程序消耗了太多內存並且沒有剩餘內存,只是我的完整Linux盒與OOM(OOM Killer Process殺死了錯誤的進程)崩潰。Java XmX =我是否必須將它設置爲防止Linux OOM

我的問題是,如果我使用JVM參數-XmX,是否限制Java不再使用-XmX選項指定的內存?或者換言之,如果我沒有指定-XmX而不是java可能會分配越來越多的內存,那麼結果是我的Linux機器人正在用OOM自己創造自己?

非常感謝! Jens

回答

2

有一個默認的最大堆大小(以前是64M,我認爲現在是128M)。-Xmx參數改變了最大大小。 Oracle的JVM永遠不會分配比該參數中指定的更大的堆。

這並不是說-Xmx給出了JVM使用的RAM總量;它實際上會使用更多。一些用於JVM實現本身的可執行代碼;還有用於「permgen」區域的內存,以及可能用於其他用途的內存映射緩衝區。但無論如何,Oracle的JVM不會無限制地增加內存使用量;總是有一個上限。

現在,爲什麼你的Linux機器沒有更多的交換空間?它很便宜,它可以防止這種事情發生。

3

Java 6的默認最大值是主內存的1/4。這可能意味着應用程序的總虛擬內存可能超過主內存和交換空間。

考慮到內存的成本(8 GB成本低於40英鎊),您應該購買更多的內存。但是,另一種方法是使用更少的內存或增加交換空間,因此不太可能用完。

相關問題