我想真正了解内存分配在JVM中是如何工作的。我正在编写一个内存不足的应用程序:堆空间异常。
我知道我可以传入VM参数,如Xms和Xmx,以增加JVM为正在运行的进程分配的堆空间。这是一个可能的解决方案,或者我可以检查我的代码内存泄漏并修复那里的问题。
我的问题是:
1)JVM实际上如何为自己分配内存?这与OS如何将可用内存传递给JVM有什么关系?或者更一般地说,为任何进程分配内存实际上是如何工作的?
2)虚拟内存是如何发挥作用的?假设您有一个拥有32GB物理内存的系统,并且您将所有32GB分配给您的Java进程。假设您的进程实际上消耗了所有32GB内存,我们如何强制进程使用虚拟内存而不是运行到OOM异常?
JVM实际上如何为自己分配内存?
对于堆,它分配一个最大大小的大的连续内存区域。最初这是虚拟内存,但是,随着时间的推移,在操作系统的控制下,它变成了被使用的部分的真实内存
这与OS如何将可用内存传递给JVM有何关系?
虚拟内存是如何发挥作用的?
最初分配的是虚拟内存,然后在使用时将其转化为实际内存。这对于任何进程都是正常的。
假设您有一个具有32GB物理内存的系统,并将所有32GB分配给Java进程。
通过小心地使用堆外内存,可以使用比物理内存更多的内存。然而,托管内存必须在物理内存中,因此如果需要32 GB的堆,请购买64 GB的主内存。
问题内容: 我正在研究真正了解JVM中内存分配的工作方式。我正在编写一个内存不足的应用程序:堆空间异常。 我知道我可以传入VM参数(例如Xms和Xmx)来增加JVM为正在运行的进程分配的堆空间。这是解决此问题的一种可能的解决方案,或者我可以检查代码是否存在内存泄漏并在那里解决问题。 我的问题是: 1)JVM如何实际为其分配内存?这与OS如何将可用内存传递给JVM有什么关系?或更一般而言,任何进程的
我是刚到爪哇的。我只是试图了解如何处理堆内存溢出及其原因。有人能在下面的代码中帮助我为什么它会抛出这个错误吗。我怎么能避免。 错误: 线程“main”Java.lang.OutOfMemoryError中出现异常:Java.util.arrays.copyof(arrays.Java:2361)在Java.lang.AbstractStringBuilder.ExpandCapacity(Abst
我有一个非常消耗内存的程序,想使用-Xmx2048m为java jvm分配更多的最大内存。但在启动时,我得到一个“无法为对象堆保留足够的空间”错误。 当尝试多个值并发现我的最大值是时,它就开始了。但我喜欢分配2GB。在使用-Xmx1560m启动java进程后,我有6GB的物理内存,Taskmanager显示3400MB可用。 有人知道我为什么不能分配2GB吗?
问题内容: 是局部变量,将其存储在堆或堆栈中的何处? 问题答案: 在堆上。每当您用来创建对象时,它都会在堆上分配。
问题内容: 尝试在Eclipse中启动和运行flex / java项目时,我一直使用Eclipse,Tomcat和JRE收到“内存不足异常”和“ Java堆空间”。 在研究尝试调整内存设置时,我发现了三个地方来调整这些设置: Eclipse.ini 窗口>首选项下的JRE设置 Catalina.sh或Catalina.bat 在这些不同位置设置-xms和-xmx有什么区别,这是什么意思? 有什么方
问题内容: 今天,我运行了用于文件系统索引编制的脚本,以刷新RAID文件索引,并在4小时后崩溃并出现以下错误: 服务器配备16GB RAM和24GB SSD交换。我非常怀疑我的脚本是否超过了36gb的内存。至少不应该 脚本使用文件元数据(修改日期,权限等,无大数据)创建存储为对象数组的文件索引 过去,我曾经用此脚本经历过奇怪的节点问题,这使我不得不这样做。在处理诸如String之类的大文件时,由于