java堆大小增长部分达到某个限制

时间:2013-04-21 23:10:02

标签: java memory garbage-collection benchmarking

我正在用Java编写一个简单的服务器应用程序,现在我正在使用 Apache基准进行一些基准测试。

启动后,服务器使用的驻留内存大约为40M。我制作了1000个请求系列(100个并发请求)。在每个系列之后,我再次检查内存使用情况。结果对我来说似乎很奇怪。

在首次运行基准测试期间,99%的请求以约20毫秒处理,其余1%处理约300毫秒(!)。同时内存使用量增加。在5-7次运行之后,这种增长在120M停止并且请求开始运行得更快 - 每个请求大约10毫秒。此外,当我增加请求数时,时间和内存值保持不变。

为什么会发生这种情况?如果有内存泄漏,那么我的服务器将需要越来越多的资源。我只能建议这是因为一些自适应JVM内存分配机制会提前增加堆大小。

1 个答案:

答案 0 :(得分:2)

堆从Xms开始,并根据需要增长到指定的限制Xmx

JVM需要一段时间才能“警告”是正常的 - 各种优化都会在运行时发生。

如果记忆力上升到一定程度然后停止攀爬,你就可以了。

如果内存无限爬升,程序最终会抛出OutOfMemoryError,那么你就会遇到问题。

从你的描述看起来好像前者是真的,所以没有内存泄漏。