【发布时间】:2014-02-11 22:01:21
【问题描述】:
我正在研究如何真正了解 JVM 中的内存分配是如何工作的。 我正在编写一个内存不足的应用程序:堆空间异常。
我知道我可以传入 VM 参数(例如 Xms 和 Xmx)来增加 JVM 为正在运行的进程分配的堆空间。这是问题的一种可能解决方案,或者我可以检查我的代码是否存在内存泄漏并在那里解决问题。
我的问题是:
1) JVM 实际上是如何为自己分配内存的?这与操作系统如何将可用内存传递给 JVM 有什么关系?或者更一般地说,任何进程的内存分配实际上是如何工作的?
2) 虚拟内存是如何发挥作用的?假设您有一个具有 32GB 物理内存的系统,并且您将所有 32GB 分配给您的 Java 进程。假设您的进程实际上消耗了所有 32GB 内存,我们如何强制该进程使用虚拟内存而不是遇到 OOM 异常?
谢谢。
【问题讨论】:
-
如果你还没有使用分析器,比如 VisualVM,那就去做吧。它将让您深入了解应用程序内部发生的情况,例如哪些对象没有被垃圾收集以及何时分配内存。
标签: java memory memory-management jvm out-of-memory