我可以让堆太大吗?

2024-01-05

我明白,一个更大的堆意味着更长的 GC 暂停时间 https://stackoverflow.com/questions/1651225/how-to-choose-the-jvm-heap-size。我对此表示同意——我的代码正在分析一些数据,我关心的只是最大限度地减少垃圾收集所花费的时间,单次暂停的长度对我来说并不重要。

堆太大会损害性能吗?我的理解是,“年轻”对象很快就会被GC,但“旧”对象可能需要更长的时间,所以我担心大堆会将一些短寿命的对象推入较长寿命的空间。我分配了大量的字符串,这些字符串很快就会被丢弃(在单次运行过程中大约 60 GB),因此我不想增加花在这些字符串上的 GC 时间。

我正在一台具有 8 GB RAM 的机器上进行测试,因此我一直在运行我的代码-Xms4g -Xmx4g,并且截至我上次分析运行时,我花费了大约 20% 的运行时间来进行垃圾收集。我发现将堆增加到 5 GB 有助于减少它。生产服务器将具有 32 GB RAM,以及更高的内存要求。

我可以安全地运行它吗-Xms31g -Xmx31g,或者这最终会损害性能?


堆太大会损害性能吗?

当您超过 31 GB 时,您可能会丢失 CompressedOops,这可能意味着您必须跳到 48 GB 才能获得更多可用内存。如果可以的话,我尽量将内存控制在 31 GB 以下。

我的理解是,“年轻”对象很快就会被GC,但“旧”对象可能需要更长的时间,所以我担心大堆会将一些短寿命的对象推入较长寿命的空间。

因此,我倾向于拥有大量的年轻一代,例如高达 24 GB。

我可以使用 -Xms31g -Xmx31g 安全地运行它吗?或者这最终可能会损害性能?

在 32 GB 机器上这会非常糟糕。当您将 JVM 使用的堆外、操作系统、磁盘缓存包括在内时,您可能会发现超过 24-28 GB 的堆会损害性能。我会从 24 GB 开始,看看效果如何,您可能会发现,如果 5 GB 现在运行正常,您可以减少它,但影响不大。

您可能会发现将数据移出堆将有助于缩短 GC 时间。我运行过具有 1 GB 堆和 800 GB 堆外空间的系统,但这取决于您的应用程序要求。

我花了大约 20% 的运行时间来进行垃圾收集

我建议你降低分配率。使用内存分析器,您可以将分配率降低到 300 MB/s 以下,但低于 30 MB/s 更好。对于极端的系统,您可能需要少于 1 GB/小时,因为这样您就可以运行一整天而无需进行少量收集。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我可以让堆太大吗? 的相关文章

随机推荐

  • select2 - 设置输入和下拉菜单的不同宽度

    我正在使用 Select2 3 3 2 我的选择中有非常非常长的选项 例子
  • 保存记录时未插入特定列

    我正在与CakePHP 1 3 13 在这里我编写了一段代码将表单插入数据库 在这里 交易数据库表如下所示 当我将记录插入数据库时 不会插入 coupon code 列 在这里 当我打印 this gt data 时 它将给出所有数据 例如
  • 如何在 XSL 和 for-each 语法中存储值?

    我的请求 XML 是
  • bash 合并文件中的行

    我想转换这个文本 qa ops01 mysite com dev mapper sys home 58G 26G 30G 47 home dev mapper sys tmp 3 9G 2 3G 1 5G 61 tmp qa ops02 m
  • 替代关系已弃用警告

    密码查询 MATCH x WHERE x uuid 41f64ab1 6009 4e95 b22b c833525f6edb MATCH p o CONTAINS HAVING gt x WHERE labels o IN Box Pack
  • 使用 Brunch 控制脚本串联的顺序

    使用 Brunch 时控制脚本 样式表连接顺序的最佳实践是什么 我的问题的一个简单版本涉及使用 Twitter Bootstrap 的应用程序 这需要 jQuery Bootstrap 要求首先加载 jQuery 最初我的供应商 目录中有以
  • 查看单个文件时,Xcode 快速帮助显示“无快速帮助”

    当我打开 Xcode 项目时 快速帮助功能工作得很好 但是当打开文件时 例如abc swift 不在打开的项目中 则不会出现文档 这是一个例子 安装该版本Command Line Tools为你的 Xcode Xcode menu gt O
  • 尝试序列化实体框架对象时出现 XML 序列化错误

    我有通过实体框架获取的实体 我使用的是 Code First 所以它们是 POCO 当我尝试使用 XmlSerializer 对它们进行 XML 序列化时 出现以下错误 方式 System Data Entity DynamicProxie
  • MySql select IN 子句字符串逗号分隔

    我需要按以下方式执行选择查询 select from my table where id NOT IN comma delimited string 实现这一目标的正确方法是什么 考虑到我控制发送字符串的客户端代码 是否有更好的方法 该字符
  • 根据R中的另一列删除重复日期

    我有一个时间序列 其中包含几个小时的多个条目 date wd ws temp sol octa pg mh daterep 1 2007 01 01 00 00 00 100 1 5 9 0 0 8 D 100 FALSE 2 2007 0
  • Magento:何时将变量传递给块,何时不传递?

    我最近发现使用分配方法在 toHtml 方法中将变量设置到块的强大功能 我的问题是 什么时候适合这样做 什么时候不适合 我正在创建一个新模块 在我看来 将所有变量分配给块并在视图文件中引用这些变量而不是设置类似的东西是非常好的 div di
  • 使用 Anaconda 安装 Pygame

    我正在尝试在 Mac 上安装 pygame 并遇到大量错误 我不能百分百确定这告诉了我什么 但它告诉了我很多 是不是说Pygame只兼容Python 3 5 因为 StackOverflow 上还有另一张票 在 Mac 上使用 anacon
  • 使用 gtag.js 获取客户端 ID

    谷歌发布gtag js https developers google com analytics devguides collection gtagjs 几个月前 作为 Google Analytics 跟踪的新方式 据我了解 最终取代了
  • Perl方法调用可以被拦截吗?

    你能在 Perl 中拦截一个方法调用 对参数做一些事情 然后执行它吗 是的 您可以拦截 Perl 子例程调用 我有一整章关于这类事情掌握 Perl http www masteringperl org 查看钩子 LexWrap http s
  • 如何将map转换为Spark的RDD

    我有一个数据集 它是一些嵌套映射的形式 它的 Scala 类型是 Map String LabelType Map Int Double 首先Stringkey 是每个样本的唯一标识符 value 是一个包含标签 为 1 或 1 的元组 以
  • Haxl 和 Stitch 中的并发数据访问

    这是我之前的后续question https stackoverflow com questions 27591599 are futures in scala really functional 据我了解Haxl http www cs
  • 如何将 Pillow EPS 调整为 JPG 质量

    我正在尝试使用 Pillow 将 EPS 图像转换为 JPEG 但结果质量较低 我正在尝试使用resize方法 但它被完全忽略了 我将 JPEG 图像的大小设置为 3600 4700 但结果图像有 360 470 尺寸 我的代码是 eps
  • Rails 对现有的 ActiveRecord 结果数组进行分页

    我通常在应用程序中使用 will paginate 进行分页 但我的搜索功能遇到了问题 我正在使用 Thinking Sphinx 进行全文搜索 它返回分页的结果 我遇到的问题是 在收到 Thinking Sphinx 的结果后 我需要将它
  • 使用带有子进程、Pipe、Popen 的 python 从 hdfs 读取/写入文件会出现错误

    我正在尝试在 python 脚本内读取 打开 和写入 hdfs 中的文件 但有错误 有人可以告诉我这里出了什么问题吗 代码 完整 sample py usr bin python from subprocess import Popen P
  • 我可以让堆太大吗?

    我明白 一个更大的堆意味着更长的 GC 暂停时间 https stackoverflow com questions 1651225 how to choose the jvm heap size 我对此表示同意 我的代码正在分析一些数据