gpt4 book ai didi

尽管 -Xmx10G,Java GC 仍占用约 2.5GB

转载 作者:行者123 更新时间:2023-12-02 03:55:53 26 4
gpt4 key购买 nike

我有一个关于大堆大小的 Java 垃圾收集的问题。

当我使用 64 位 JDK (java8u72) 在 64 位 Windows 上执行 Java 程序时:

java -Xmx10G -Xms6G -verbose:gc <Class>

然后:

  • java.exe 内存利用率保持在 2.5 GB 左右(Windows 任务管理器)。
  • 我每 10-30 秒就会收到一次 GC,其值大致相同:[GC(分配失败)2766094K->239630K(6647808K),0.0270937 秒]

首先,这是什么意思?这个2766094K是堆利用率之前(2.7G),然后239630(2.3G)是之后,然后6647808K(6G)是堆大小,对吧?

当我请求最大堆大小为 10 GB 时,为什么 GC 会占用 2.5G 左右的空间?如何解决这个问题?

我的笔记本电脑有 8 GB 物理 RAM,但我假设更大的堆大小由虚拟内存处理并且对 VM 是透明的!?

发送

最佳答案

  1. 6647808K (6G) 是年轻代中的堆大小。它不是实际的堆大小。
  2. 由于堆大小分为年轻代和年老代,因此年轻代和年老代之间的比例通常为 1:8。因此,剩余 4 GB 分配给旧代。JVM 未能在 young gen 中分配内存,因此它启动了 Minor GC,因此 young gen 中的对象大小为 2766094K,minor GC 后内存大小变为 239630K。

检查何时执行 Full GC。如下所示 -

[Full GC(元数据 GC 阈值)[PSYoungGen:11605K->0K(150016K)] [ParOldGen:27075K->32787K(87040K)] 38681K->32787K(237056K),[元空间:19481K->19481K(1067) 008K )], 0.0989447 秒] [时间: user=0.33 sys=0.00, real=0.10 秒]

关于尽管 -Xmx10G,Java GC 仍占用约 2.5GB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35450724/

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