G1算法中的记忆集有什么用?

2023-11-29

我刚刚读了一些关于G1算法的博客。

记忆集的用法对我来说很困惑。

我的想法是这样的:

既然我们可以使用 DFS 遍历 GC-Roots 中的每个引用,为什么我们需要记住集呢?

因为所有的博客都说我们使用remembered-set的原因是我们不需要检查每个区域是否有GC-Roots引用的对象


你需要明白什么Card Table是第一,国际海事组织。你如何扫描only young generation区域并清理它,如果有来自的引用old generation回到young?您需要准确“跟踪”这些连接存在的位置 - 因此在扫描时young generation你可以在不破坏堆的情况下清理它。

想想看:你不能将对象标记为删除A现在是年轻一代,如果有参考的话B到它,从old generation。但请记住,现在 - 你是年轻的集合中的一员only。所以要追踪这些“联系”Card Table已实施。该卡表中的每一位都表示老年代的某个部分是“脏的”,这意味着也扫描老一代的那部分在扫描年轻时。

你为什么需要那个?扫描 young 的全部目的是扫描堆的一小部分,而不是全部。这card table实现了这一点。

G1有区域。如果您正在扫描怎么办regionA你会看到它有指向其他一些的指针regionB?只需将此信息放入Card Table是不足够的。你的牌桌只会知道regionA,下次扫描时regionB- 你怎么知道你应该扫描regionA还?如果你不这样做,显然堆完整性就被破坏了。

像这样 :remembered sets。这些集合由异步线程填充:它扫描card table根据该信息,它还会扫描这些“脏”区域的指针指向的位置。它会跟踪这一点regionA -> regionB联系。每个地区都有自己的remembered set.

所以当你到达需要发生GC的点时,当扫描时regionB你也看看它的remembered set并发现您还需要扫描regionA.


在实践中,这就是为什么G1成为一代人:这些remembered sets原来是huge。如果将堆划分为young and old,没有必要保留年轻代之间的连接,无论如何你都一次扫描它们,从而消除了这些集合大小上的烧毁。G1想要保留那个200ms(默认)承诺 - 为此,您需要扫描年轻一代一次全部(因为区域之间没有联系remembered sets否则堆完整性就会消失),但同时如果你使年轻代变小 - 的大小remembered sets会很大。

因此,恕我直言,触摸这些设置是一个工程奇迹。

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

G1算法中的记忆集有什么用? 的相关文章

  • 如何更改 JComboBox 下拉列表的宽度?

    我有一个可编辑的JComboBox其中包含单个字母值的列表 因此 组合框非常小 每个字母都有特殊的含义 对于很少使用的字母 有时用户并不清楚 因此我创建了一个自定义ListCellRenderer显示下拉列表中每个字母的含义 不幸的是 这个
  • 为什么在使用 repaint() 而不是使用 getParent().repaint() 时会出现此 Swing 错误?

    这个问题是基于我不久前在一个简单的 Swing 骰子程序中遇到的问题 我发布的原始问题是here https stackoverflow com questions 22306637 mystery concurrency componen
  • 逐行读取 JTextPane

    有没有办法读取a的内容JTextPane逐行 很像 BufferedReader 吗 Element root textPane getDocument getDefaultRootElement 获得根元素后 您可以检查存在多少个子元素
  • Spring boot 404错误自定义错误响应ReST

    我正在使用 Spring boot 来托管 REST API 即使浏览器正在访问 URL 以及自定义数据结构 我也希望始终发送 JSON 响应 而不是使用标准错误响应 我可以使用 ControllerAdvice 和 ExceptionHa
  • 如何加载椭圆曲线 PEM 编码的私钥? [复制]

    这个问题在这里已经有答案了 我使用 OpenSSL 生成了椭圆曲线私钥 公钥对 私钥和公钥均采用 PEM 编码 我已经弄清楚如何加载公钥 感谢this https stackoverflow com a 40439081但是 我无法弄清楚如
  • 使用用户名进行 Java LDAP 身份验证

    好吧 这让我发疯 我正在尝试使用 Java 创建 LDAP 身份验证 如果我在 SECURITY PRINCIPAL 中使用我的名字和姓氏 一切都很好 这是我的代码 try Hashtable
  • IntelliJ Idea,如何从控制台删除java文件目录?

    当您运行文件时 它会打开控制台窗口 并且一直在顶部显示该文件所在的目录 这非常令人恼火 因为现在 为了将其他行与目录混合分开 我必须在启动任何 System out println 命令之前使用 n C Program FILEs 我想摆脱
  • Java中的运算符重载和覆盖

    运算符重载和运算符重写有什么区别 它们在继承和控制台程序中是否相同 Java 不支持运算符重载和重写 检查以下引用自的描述 http java sun com docs white langenv Simple doc2 html http
  • 酷还是傻? Catch(异常[NamingException, CreateException] e)

    我正在编写一些代码 我注意到异常处理中的一种模式让我思考 try do stuff throws JMS Create and NamingException catch NamingException e log1 e rollback
  • Java Timer 类:如果其中一个任务抛出异常,则计时器任务停止执行

    new Timer scheduleAtFixedRate new TimerTask Override public void run System out println run throw new SomeRandomExceptio
  • 未从线程接收位置数据

    我尝试使用计时器经常发送包含用户位置的短信 最初 我遇到了空指针异常 这是由于我犯了一个简单的错误 一旦解决了这个问题 一切似乎都运行良好 但是 它永远不会获取我的位置 因此 不断发送的文本显示 无法接收位置 我想问的是为什么它无法获取我的
  • APACHE POI 从 Java 中的 Excel 获取精确的字体颜色

    在 Excel 工作表中 如何使用 Java 中的 Apache POI 获取准确的字体颜色值 我试图通过使用来获取字体颜色 org apache poi ss usermodel Font f book getFontAt style g
  • 使用泛型进行选择排序

    我对整数进行了选择排序并且它正在工作 当我尝试修改程序以使用泛型时 编译器会抱怨 我不知道如何修复它 如果有人能提出一些建议和建设性意见 我将不胜感激 这是代码 public class SelelctionSort public stat
  • 使用 Lint 和 SonarQube 分析 Android 项目

    我真的 溢出 了试图让这些东西一起工作 我按照这里的指示进行操作 http docs sonarqube org display PLUG Android Lint Plugin http docs sonarqube org displa
  • C3P0:生产中未返回的连接超时?

    参数unreturnedConnectionTimeout给定时间段后未返回的连接超时 我正在尝试决定是否应该在我的制作中使用它persistence xml 使用它的一大优点是连接池将能够从泄漏的连接中恢复 一个很大的缺点是泄漏的连接将很
  • org.apache.catalina.core.JreMemoryLeakPreventionListener 中急切调用 URLConnection 的 setDefaultUseCaches(false) 是什么原因

    这个问题可能有点难以找到答案 这是一个系列中的问题考虑使用 Policy getPolicy 的原因是什么 因为它将保留对上下文的静态引用并可能导致内存泄漏 https stackoverflow com questions 7057421
  • JavaFX 8 默认消息图标

    随着 JavaFX 的最近几次更新 我们收到了警报 我想获取消息的默认图标 错误 警告 在Swing中 我可以通过一些方式获取L F消息图标UIManager的属性 如何在 JavaFX 中获取消息的默认图标 它们是包含在属性中 还是由 C
  • JSF“总”变量类似于 JSTL 中的 c:set

    我不喜欢 JSF 但我需要用它来解决这个问题 我正在 纯 JSF 中工作 所以这就是我基本上需要的 但我不知道如何用 JSF 来实现它
  • 需要同步仅增量计数器吗?

    我使用整数作为计数器 该整数只会增加 并且肯定有多个线程会同时增加它 当没有其他线程尝试访问其值时 在程序执行结束时读取该计数器的值 我假设我不必为这种仅增量计数器使用锁或任何类型的同步 这是正确的吗 如果这有什么区别的话 我用 Java
  • JavaFX 中的 MVC 模式与场景生成器

    我是 JavaFX 新手 根据我当前的设置 正在努力创建合适的 MVC 架构 我使用 Scene Builder 单击了一个 UI 并指定了一个 Controller 类 Startup public class Portal extend

随机推荐

  • 在 Python 中对 3d 数组进行插值。如何避免for循环?

    我有一个数组 我想在第一个轴上进行插值 目前我正在这样做 就像这个例子 import numpy as np from scipy interpolate import interp1d array np random randint 0
  • java for循环问题

    我正在编写一个 Java 程序来计算辛普森积分规则 这是我的代码 请注意 count 4 9 10 11 的输出值中的第二列数字 它们不是我需要的数字 它们不遵循模式 我需要这些数字准确无误 这是怎么回事 我该如何解决 public sta
  • 使用 XML 可绘制的垂直线

    我试图弄清楚如何定义一条垂直线 1dp 厚 用作可绘制对象 要制作水平的 非常简单
  • 根据自定义单元格增加主tableview行高

    我有一个应用程序 其中有一个表格视图在该表格视图的每一行上 我动态创建一个自定义表格视图单元格 下面是代码 NSArray nib NSBundle mainBundle loadNibNamed flowviewTableViewCell
  • Android:地址(来自地理编码)有固定格式吗?

    我需要确定地理位置的地址 因此我使用了 GeoCoder 和 Address 我尝试打印一个 Address 对象并得到以下结果 出于隐私原因 我使用了一些假数据 但我在设备上收到的数据是真实的 Address addressLines 0
  • 使用 XPath 单击超文本链接

    如果这是一个愚蠢的问题 我很抱歉 我是 Selenium 的新手 我正在测试一个网页 其中的表格中有一些超文本链接 HTML 看起来像这样 table thead tr td b History b td td b Attributes b
  • 错误:您必须在 transaction() 回调中返回 Promise。在 transaction.begin.then 处

    这是我的代码片段 await firestore runTransaction t gt t get docRef then docRef gt logger info entering transaction if docRef exis
  • Docker 与新的名称服务器

    我如何添加新的名称服务器 etc resolv conf 泊坞窗文件 在我的 dockerfile 上我使用 FROM ubuntu 14 04 RUN echo nameserver 10 111 122 1 gt gt etc reso
  • Git - 如何在克隆后自动忽略文件?

    我想知道是否有办法将文件包含在存储库中 但在用户克隆存储库后它会被自动忽略 这对于配置文件来说非常有用 一旦克隆了存储库 您只需编辑它 并且不必记住将其放入 gitignore 中 一种方法是运行git update index assum
  • 递归文件搜索 (PHP)

    我正在尝试使用递归搜索返回指定目录中的文件 我成功地实现了这一点 但是我想添加几行代码 以允许我指定我想要返回的某些扩展名 例如 仅返回目录中的 jpg 文件 这是我的代码 请让我知道我可以在上面的代码中添加什么来实现这一点 谢谢
  • v-model 仅在生产中抛出 ReferenceError

    我在 Vue 中有以下视图
  • 同一页面中具有相同广告尺寸的多个 GPT 广告不起作用

    我的页面上有两个 GPT 广告 如果两个广告的尺寸不同 则广告将显示在页面中 下面的代码工作正常 googletag defineSlot 123 test 728 90 div gpt ad 123456789 0 addService
  • 在Postman中,如何使用集合运行器发布二进制文件

    我正在使用 Postman Collection Runner 自动执行一系列 API 调用 在其中一个 API 调用中 我需要提交一个二进制文件作为 POST 的正文 设置 Collection Runner 时 我看到如何选择文件 但我
  • 解决 Cocoa 中的 EXC_BAD_ACCESS 问题?

    嘿 我在可可中有以下方法 void startUploadWithContainerName NSString containerName Make an object of NSFileManager and Fetch an array
  • Rails:Webpacker 4.2 在 /app/public/packs/manifest.json 中找不到应用程序

    我有点难住了 我的本地 Rails 应用程序与 webpacker 4 2 和 React 配合得很好 但是部署到生产环境时给了我美妙的效果can t find application in app public packs manifes
  • 即使没有添加记录,INSERT IGNORE 也会增加自动增量计数器?

    In MySQL I used INSERT IGNORE语句将行插入到表中 因为一列是UNIQUE 某些行未插入 因为它们已经存在 执行该语句后 我注意到自动增量列在行之间缺少一些数字 后来我意识到这是由于被忽略且未添加的行而发生的 是否
  • 为什么 Intent.ACTION_SENDTO 包含应用程序作为选项

    我的导航抽屉包含一个通过电子邮件联系开发人员的选项 为此 我根据文档包含了代码 但是 当单击 联系开发人员 时 显示的选项包括我的应用程序 该应用程序不支持电子邮件 我在网上搜索过这个问题 但没有找到任何相关内容 如何将用户的选项仅限于电子
  • Magento 删除默认商店视图的商店代码

    我有 Magento 多语言商店 我需要将商店代码添加到 url 在这条路径中System gt Configuration gt Web gt Url Option gt Add Store Code to Urls我已经转了ON 然后我
  • Flutter 异步表单验证

    我和这个问题的发帖者有同样的问题 flutter 异步验证表单 然而 我在实现这一点和理解验证是如何工作时遇到了困难 首先 这段代码返回什么 这会返回布尔值吗 Future checkUser async var user await Fi
  • G1算法中的记忆集有什么用?

    我刚刚读了一些关于G1算法的博客 记忆集的用法对我来说很困惑 我的想法是这样的 既然我们可以使用 DFS 遍历 GC Roots 中的每个引用 为什么我们需要记住集呢 因为所有的博客都说我们使用remembered set的原因是我们不需要