-1

可能重复:
如何设置 JVM 的最大内存使用量?

我正在运行一个 java 程序,但是当内存使用率达到 26.1% 时,它不再增加,程序变得非常慢。

可能是什么问题呢?java有内存使用限制吗?或者Linux上每个应用程序的内存限制?

java 版本“1.7.0_11”Java(TM) SE 运行时环境(构建 1.7.0_11-b21)Java HotSpot(TM) 64 位服务器 VM(构建 23.6-b04,混合模式)


Tasks: 126 total,   1 running, 125 sleeping,   0 stopped,   0 zombie
Cpu(s): 97.5%us,  0.4%sy,  0.0%ni,  2.1%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:  33018800k total,  9522548k used, 23496252k free,    12100k buffers
Swap: 32764528k total,        0k used, 32764528k free,   391812k cached
  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
 3463 wonn24    20   0 8769m 8.2g 9.8m S 391.3 26.1 257:09.24 java
 3725 hong8e    20   0 14876 1148  872 R  0.3  0.0   0:01.81 top
    1 root      20   0  4088  972  720 S  0.0  0.0   0:00.71 init
    2 root      15  -5     0    0    0 S  0.0  0.0   0:00.00 kthreadd
    3 root      RT  -5     0    0    0 S  0.0  0.0   0:00.17 migration/0
    4 root      15  -5     0    0    0 S  0.0  0.0   0:00.00 ksoftirqd/0
    5 root      RT  -5     0    0    0 S  0.0  0.0   0:00.00 watchdog/0
    6 root      RT  -5     0    0    0 S  0.0  0.0   0:00.15 migration/1
    7 root      15  -5     0    0    0 S  0.0  0.0   0:00.00 ksoftirqd/1
4

2 回答 2

3

默认情况下,Java 的服务器版本的最大堆大小为主内存的 1/4。由于库和线程堆栈的少量开销,这很容易占据主内存的 26% 或 27%。

当您的 JVM 开始填满时,执行 GC 所需的时间会更短,并且可用内存越少意味着它也更频繁地发生(非常糟糕)理想情况下,您的实际使用量可能低至最大大小的 40%。在您的情况下,您的实际使用量可能至少为 7 GB。

我建议您尝试将最大堆大小增加到至少 16 GB,如果可以节省内存,可能会增加到 24 GB。即-Xmx16g-Xmx24g

于 2013-01-18T09:22:24.283 回答
1

默认情况下,Java 的堆大小限制为 64Mb(如果内存服务器......)您可以使用命令行参数增加它,但在此之前,请确保您需要额外的内存并且没有泄漏。

于 2013-01-18T09:18:15.263 回答