【问题标题】:When does Java calls Garbage CollectorJava什么时候调用垃圾收集器
【发布时间】:2015-03-22 21:26:59
【问题描述】:

我阅读了很多关于 Java Heap 的文章。我看到如果我们得到 java.lang.OutOfMemoryError 我们应该增加 -Xmx 来解决这个问题。

例如

java -Xmx2048m -Xms256m

这会将 Java 使用的堆内存增加到 2048MB。现在来到我头上的问题。

关于上述设置的问题:

Java 是否在调用垃圾收集器之前等待其 HEAP 空间达到 256MB?这就是我们希望 -XMx 和 -Xms 具有相同值以便 Java 在达到最大内存分配之前不会调用堆管理的生产原因吗?

如果有人能提供一些关于 -Xmx 和 -Xms 的额外细节,我将不胜感激,除了 Xmx 代表最大 Java 堆,Xms 代表最小 Java 堆。

【问题讨论】:

    标签: java memory heap-memory


    【解决方案1】:

    第一个问题的答案是:视情况而定。您可以设置不同的 GC 策略,甚至可以说服 JVM 在堆满之前不运行 GC,但这通常不是一个好主意。这绝对不是通常发生的情况,而是堆是divided into several smaller areas,用途各异,GC 是由它们的填充触发的。

    回答第二个问题:不,这是一个完全不同的问题。

    使用-Xms256m,JVM 将在启动时向操作系统请求 256 兆字节的内存。

    如果用完,它会要求更多,直到达到-Xmx指定的数量。要求操作系统为您的进程分配更多内存需要时间,因此最好避免在服务器上使用,因为您可以几乎准确地预测您的应用程序可以使用多少内存。

    请注意,上述过程只是与 GC 间接相关,它只会清除 OS 已经分配给 JVM 的堆。

    编辑:要检查到底发生了什么,您可以使用-verbose:gc 命令行选项启动您的JVM。

    【讨论】:

    • 我正在使用 jconsole 监控我的 JVM。我有 -Xmx8192m 和 -Xms8192m。我看到的是,每次我对我的计算进行迭代时,它都会增加 1+ GB 并下降 1- GB。这个过程一直持续到达到 8GB。当它达到 8GB 时,一切都变为 2GB。似乎上升和下降 1 GB 是 GC 运行的地方。但问题是发生了什么,它从 8 GB 直接下降到 2 GB?
    • 您可以使用-verbose:gc 命令行选项监控 GC 活动。
    • 虽然我怀疑发生的事情是较小的收集是年轻代收集(快速但不是很彻底),当它从 8 下降到 2 时,这就是完整的 GC,它要慢很多但它清除了一切。
    【解决方案2】:

    当世代填满时会发生垃圾收集。

    堆上有两个主要代:youngold。年轻代也称为代,或eden空间。老年代又细分为survivor spacetenured generation

    新分配的对象从年轻代开始,如果它们在垃圾回收中幸存下来,就会被移到老年代。垃圾回收在年轻代中运行得更频繁。

    这些是你的Heap Tuning Parameters

    • -Xms(初始/最小堆大小,所有代)

    • -Xmx(最大堆大小,所有代)

    • -Xmn(新一代大小,下面-XX:NewSize的替代品)

    • -XX:MinHeapFreeRatio=最小值(所需的最小可用空间与活体的比例,以百分比表示)

    • -XX:MaxHeapFreeRatio=最大(可用空间与活体的最大期望比例,以百分比表示)

    • -XX:NewRatio=ratio(老年代与新生代之比:默认为2,即2:1,即堆是老年代的2/3)

    • -XX:NewSize=大小(初始/最小新一代大小)

    • -XX:MaxNewSize=size(最大新一代大小)

    • -XX:+AggressiveHeap(初始堆的大小是根据物理内存的大小计算的,并尝试最大限度地利用堆的物理内存)

    【讨论】:

      【解决方案3】:

      -Xms : 最小堆大小。拥有 -Xms = 1.8GB(32 位)可能很糟糕,因为您不会让内存用于其他任何事情。

      -Xmx :最大堆大小(例如:-Xmx1024)

      更多信息请看这里:Get started with java JVM memory (heap, stack, -xss -xms -xmx -xmn...)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-02-07
        • 1970-01-01
        • 2015-04-10
        • 1970-01-01
        相关资源
        最近更新 更多