了解 JVM 内存分配和 Java 内存不足:堆空间
我正在研究如何真正理解内存分配在JVM中的工作原理。我正在编写一个应用程序,其中我遇到了内存不足:堆空间异常。
我知道我可以传入VM参数,例如Xms和Xmx,以增加JVM为正在运行的进程分配的堆空间。这是问题的一种可能的解决方案,或者我可以检查代码中的内存泄漏并修复那里的问题。
我的问题是:
1) JVM 实际上如何为自己分配内存?这与操作系统如何将可用内存传送到 JVM 有何关系?或者更一般地说,任何进程的内存分配实际上是如何工作的?
2) 虚拟内存如何发挥作用?假设您有一个具有 32GB 物理内存的系统,并且您将所有 32GB 分配给 Java 进程。假设您的进程实际上消耗了所有32GB的内存,我们如何强制进程使用虚拟内存而不是遇到OOM异常?
谢谢。