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