在有多少种方法中我们可以解决 Java 中的堆 Space 问题?

In How many ways we can Resolve Heap Space issue in java?

我知道我们可以通过最大化这些 JVM 变量 -Xms、-Xmx 来增加堆大小。

但我有以下疑问:

  1. 处理堆空间的其他方法是什么?
  2. Heap Memory是否依赖于系统二级内存?

尝试在 java 中设置堆大小时,您需要注意几点堆: http://javarevisited.blogspot.co.uk/2011/05/java-heap-space-memory-size-jvm.html

*显然 Oracle java 站点应该是您的第一个访问点。

1) 我认为您不能在运行时动态调整堆 space。所以把它设置为开始是必须的。

2) 取决于您是否 运行 32/64 位 OS,以及您的 PC 上有多少 RAM

3) 参见上面的link和Oracle自己的文档,太大了无法描述:)

4) 实际上取决于您正在编程的内容以及您在 PC 上拥有的资源。良好的编程实践应该可以阻止任何重大问题,但是如果你发现太多的完整 GC,你可能想看看你是否在堆的 Perm 部分的某个地方没有 "memory leak"

关于你的第一个问题:使用java.nio.ByteBuffer.allocateDirect()你可以在堆外分配内存,即在运行时扩展内存占用。

来自 Javadocs:

The contents of direct buffers may reside outside of the normal garbage-collected heap, and so their impact upon the memory footprint of an application might not be obvious. It is therefore recommended that direct buffers be allocated primarily for large, long-lived buffers that are subject to the underlying system's native I/O operations. In general it is best to allocate direct buffers only when they yield a measureable gain in program performance.

what are the other ways to handle Heap Space?

大约有 500 个用于控制堆的选项,此处提供了最常用的选项 Hotspot VM Options

Is Heap Memory depends on the system secondary memory?

当谈到堆大小时,只有主内存需要担心。 64 位 JVM 的默认堆大小是主内存的 1/4。