2013-04-21 35 views
0

我寫在一個簡單的Java服務器應用程序,和我使用的Apache 基準現在做一些基準。Java堆大小的增長由51%,一些限制

剛開始後,服務器使用的駐留內存大約爲40M。我進行了1000個請求(100個併發請求)。在每個系列之後,我再次檢查內存使用情況。結果對我來說似乎很奇怪。

在基準的第一次運行,要求的99%的處理在≈20毫秒和大約300毫秒他們的休息1%(!)。同時內存使用量增加。經過5-7次運行後,這種增長停止在120M,並且請求開始運行得更快 - 每個請求大約10毫秒。而且,當我增加請求數時,時間和內存值保持不變。

爲什麼會發生這種情況?如果有內存泄漏,那麼我的服務器將需要越來越多的資源。我只能提出這是因爲一些自適應的JVM內存分配機制,它提前增加了堆大小。

回答

2

堆在Xms開始時,並根據需要將在指定的限制Xmx增長。

JVM花費一段時間來「警告」 - 各種優化在運行時發生是正常的。

如果記憶上升到一個點然後停止攀爬,那麼你很好。

如果內存無限期地攀升,並計劃最終將引發OutOfMemoryError那麼你有問題。

從您的描述看起來好像前者是真的,所以沒有內存泄漏。