了解JVM内存分配和Java内存不足:堆空间
我正在研究如何真正理解JVM中的内存分配工作。 我正在编写一个内存不足的应用程序:堆空间异常 我知道我可以传入VM参数,比如Xms和Xmx,以增加JVM为正在运行的进程分配的堆空间。这是问题的一种可能解决方案,或者我可以检查我的代码是否存在内存泄漏,并在那里修复问题 我的问题是: 1) JVM实际上是如何为自己分配内存的?这与操作系统如何向JVM传递可用内存有关?或者更一般地说,任何进程的内存分配实际上是如何工作的 2) 虚拟内存是如何发挥作用的?假设您有一个具有32GB物理内存的系统,并将所有32GB分配给Java进程。假设您的进程实际上消耗了所有32GB的内存,我们如何强制该进程使用虚拟内存,而不是运行OOM异常 谢谢了解JVM内存分配和Java内存不足:堆空间,java,memory,memory-management,jvm,out-of-memory,Java,Memory,Memory Management,Jvm,Out Of Memory,我正在研究如何真正理解JVM中的内存分配工作。 我正在编写一个内存不足的应用程序:堆空间异常 我知道我可以传入VM参数,比如Xms和Xmx,以增加JVM为正在运行的进程分配的堆空间。这是问题的一种可能解决方案,或者我可以检查我的代码是否存在内存泄漏,并在那里修复问题 我的问题是: 1) JVM实际上是如何为自己分配内存的?这与操作系统如何向JVM传递可用内存有关?或者更一般地说,任何进程的内存分配实际上是如何工作的 2) 虚拟内存是如何发挥作用的?假设您有一个具有32GB物理内存的系统,并将所有
资料来源:
通过小心地使用堆外内存,可以使用比物理内存更多的内存。但是,托管内存必须位于物理内存中,因此如果您需要32 GB的堆,请购买64 GB的主内存。本博客介绍Java内存利用率,您可能会发现这一点很有用:
如果您还没有使用过像VisualVM这样的分析器,请使用它。它可以让您深入了解应用程序内部发生的情况,例如哪些对象没有被垃圾收集,以及何时分配内存。问题:您能告诉我,为什么JVM_outOfMemory是一个错误而不是例外。@TusharPandey来自Javadoc 8 for error