gpt4 book ai didi

java - 初始Java堆大小是什么意思?

转载 作者:搜寻专家 更新时间:2023-11-01 03:31:34 26 4
gpt4 key购买 nike

所以我得到了一个使用Java堆的程序

-Xms5g -Xmx12g 

我已将初始 Java 堆大小设置为 5gb,最大堆大小设置为 12gb

但是当我查看任务管理器或资源监视器时,我的程序只使用了 400mb。

所以这是我的问题:

  1. 初始 Java 堆大小是什么意思?
  2. 如果我将初始 Java 堆大小设置为 5gb,为什么我只看到程序使用的 RAM 为 400mb,它不应该是 5gb 吗?因为初始堆意味着最小大小,对吧?

最佳答案

-Xmx 最大堆大小是堆可以增长到的最大大小。

-Xms 初始堆大小是堆范围的大小。在不触发完整 GC 的情况下,它不会使用超过此数量的空间。

然而,这个堆被划分为多个区域,例如假设您有一个 5 GiB 的初始堆

  • Eden 大小为 200 MB
  • 两个 100 MB 的幸存者空间
  • 4.6 GB 的永久空间。

当您开始使用内存时,触摸的页面(4 KiB 区域)在 Linux 上按需分配(除非您使用选项来预触摸它们)

您的 Eden 空间将很快被使用,因此前 200 MB 的使用速度非常快(如果甚至在 main 被调用之前就使用了很多)。幸存者空间将在几次小收集后得到使用,但最初它们可能不会被全部触及,例如假设它们从来没有填充超过 50 MB(在 100 MB 可用空间中),此时触及的总内存为 200 MB + 2 * 50 MB。

一些大对象直接进入永久空间,但对于大多数应用程序,永久空间主要由较小的、长生命周期的对象占用。比方说,经过多次小收集后,大约 100 MB 的对象已提升到永久空间。

此时即使范围是 5 GB,也只有 200 + 2 * 50 + 100 MB 的内存被触及或分配。

简而言之,Linux 延迟分配页面,因此您必须写入它们才能使用内存。

关于java - 初始Java堆大小是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51399604/

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