gpt4 book ai didi

java - -Xmx 属性和可用系统内存相关性

转载 作者:行者123 更新时间:2023-12-04 05:36:08 26 4
gpt4 key购买 nike

我有一个疑问。让我们假设我有两个参数传递给 JVM:
-Xms256mb -Xmx1024mb
在程序开始时分配了 256MB。接下来,创建一些对象,JVM 进程尝试分配更多内存。假设 JVM 需要分配 800MB。 Xmx 属性允许,但系统上当前可用的内存(假设 Linux/Windows)为 600MB。是否有可能抛出 OutOfMemoryError ?或者也许交换机制会起作用?

我的第二个问题与GC算法的质量有关。假设我有 jdk1.5u7 和 jdk1.5u22。是否有可能在后一个 JVM 中内存泄漏消失并且 OutOfMemoryError 不会发生? GC的质量能不能在最新版本更好?

最佳答案

GC 的质量(除非有错误的 GC)不会影响内存泄漏,因为内存泄漏是应用程序的产物——GC 无法收集不是实际垃圾的内容。

如果 JVM 需要更多内存,它将从系统中获取它。如果系统可以交换,它将交换(像任何其他进程一样)。如果系统无法交换,您的 JVM 将因系统错误而失败,而不是 OOM 异常,因为系统无法满足请求,而这一点实际上是致命的。

通常,您永远不希望将 Activity 的 JVM 部分换出。 GC 事件会让你崩溃,因为系统会在虚拟内存系统中循环页面。将空闲的后台 JVM 作为一个整体换出是一回事,但是如果您的机器为 1G RAM,而您的主进程需要 1.5GB,那么您就有了一个大问题。

JVM 喜欢喘息的空间。我已经看到 JVM 在没有足够内存时处于 GC 死亡螺旋中,即使它们没有内存泄漏。他们只是没有足够的工作集。添加另一块堆将该 JVM 从糟糕的锯齿 GC 图转变为愉快的锯齿 GC 图。

给 JVM 所需的内存,你和它都会更快乐。

关于java - -Xmx 属性和可用系统内存相关性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11906219/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com