为什么Thread.sleep(0)可以阻止rocketmq中的gc?

2024-01-03

最近我阅读了RocketMQ的源代码,但我无法理解这段代码。为什么这段代码可以阻止gc呢?

https://github.com/apache/rocketmq/blob/master/store/src/main/java/org/apache/rocketmq/store/MappedFile.java https://github.com/apache/rocketmq/blob/master/store/src/main/java/org/apache/rocketmq/store/MappedFile.java

for (int i = 0, j = 0; i < this.fileSize; i += MappedFile.OS_PAGE_SIZE, j++) {
        byteBuffer.put(i, (byte) 0);
        // force flush when flush disk type is sync
        if (type == FlushDiskType.SYNC_FLUSH) {
            if ((i / OS_PAGE_SIZE) - (flush / OS_PAGE_SIZE) >= pages) {
                flush = i;
                mappedByteBuffer.force();
            }
        }

        // prevent gc
        if (j % 1000 == 0) {
            log.info("j={}, costTime={}", j, System.currentTimeMillis() - time);
            time = System.currentTimeMillis();
            try {
                Thread.sleep(0);
            } catch (InterruptedException e) {
                log.error("Interrupted", e);
            }
        }
 }

它不是。

线程的睡眠文档仅说明:

使当前正在执行的线程休眠(暂时停止执行)指定的毫秒数,具体取决于系统计时器和调度程序的精度和准确性。该线程不会失去任何监视器的所有权。

这意味着什么can have对垃圾收集器行为的副作用。

通过致电Thread.sleep(0),您(可能(它是 0,因此实现甚至可以忽略它))切换上下文,并且可以选择并行 GC 线程来进行清理other参考。 较小的副作用是你潜在地更频繁地运行 GC——什么可以防止长期运行的垃圾收集(每 1000 次迭代就会增加 GC 运行的机会)。

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

为什么Thread.sleep(0)可以阻止rocketmq中的gc? 的相关文章

  • 在 JTable 中移动行

    我使用 MVC 模式 并且有一个如下所示的 JTable List
  • 热重载在docker中运行的java程序

    我开发了一个java程序 应该在docker中运行 然而 我在调试docker中运行的java程序时遇到了很多痛苦 我在网上搜索 一些教程提出了像 spring dev tools 这样的工具 因为我的java程序是基于spring boo
  • 如何将 Java 赋值表达式转换为 Kotlin

    java中的一些东西就像 int a 1 b 2 c 1 if a b c System out print true 现在它应该转换为 kotlin 就像 var a Int 1 var b Int 2 var c Int 1 if a
  • AES 加密 Java/plsql

    我需要在Java和plsql DBMS CRYPTO for Oracle 10g 上实现相同的加密 解密应用程序 两种实现都工作正常 但这里的问题是我对相同纯文本的加密得到了不同的输出 下面是用于加密 解密过程的代码 Java 和 PLS
  • 如何测试 JUnit 测试的 Comparator?

    我需要测试 Compare 方法 但我对如何测试感到困惑 我可以看看该怎么做吗 public class MemberComparator implements Comparator
  • Android Studio 在编译时未检测到支持库

    由于 Android Studio 将成为 Android 开发的默认 IDE 因此我决定将现有项目迁移到 Android studio 中 项目结构似乎不同 我的项目中的文件夹层次结构如下 Complete Project gt idea
  • java中删除字符串中的特殊字符?

    如何删除字符串中除 之外的特殊字符 现在我用 replaceAll w s 它删除了所有特殊字符 但我想保留 谁能告诉我我该怎么办 Use replaceAll w s 我所做的是将下划线和连字符添加到正则表达式中 我添加了一个 连字符之前
  • Java 页面爬行和解析之 Crawler4j 与 Jsoup

    我想获取页面的内容并提取其中的特定部分 据我所知 此类任务至少有两种解决方案 爬虫4j https github com yasserg crawler4j and Jsoup http jsoup org 它们都能够检索页面的内容并提取其
  • 如何在jsp代码中导入java库?

    我有以下jsp代码 我想添加 java io 等库 我怎样才能做到这一点
  • 无法理解 Java 地图条目集

    我正在看一个 java 刽子手游戏 https github com leleah EvilHangman blob master EvilHangman java https github com leleah EvilHangman b
  • 如何将文件透明地传输到浏览器?

    受控环境 IE8 IIS 7 ColdFusion 当从 IE 发出指向媒体文件 例如 mp3 mpeg 等 的 GET 请求时 浏览器将启动关联的应用程序 Window Media Player 我猜测 IIS 提供文件的方式允许应用程序
  • Spring Data 与 Spring Data JPA 与 JdbcTemplate

    我有信心Spring Data and Spring Data JPA指的是相同的 但后来我在 youtube 上观看了一个关于他正在使用JdbcTemplate在那篇教程中 所以我在那里感到困惑 我想澄清一下两者之间有什么区别Spring
  • 制作java包

    我的 Java 类组织变得有点混乱 所以我要回顾一下我在 Java 学习中跳过的东西 类路径 我无法安静地将心爱的类编译到我为它们创建的包中 这是我的文件夹层次结构 com david Greet java greeter SayHello
  • 应用程序关闭时的倒计时问题

    我制作了一个 CountDownTimer 代码 我希望 CountDownTimer 在完成时重新启动 即使应用程序已关闭 但它仅在应用程序正在运行或重新启动应用程序时重新启动 因此 如果我在倒计时为 00 10 分钟 秒 时关闭应用程序
  • 当单元格内的 JComboBox 中有 ItemEvent 时,如何获取 CellRow

    我有一个 JTable 其中有一列包含 JComboBox 我有一个附加到 JComboBox 的 ItemListener 它会根据任何更改进行操作 但是 ItemListener 没有获取更改的 ComboBox 所在行的方法 当组合框
  • 运行 Jar 文件时出现问题

    我已将 java 项目编译成 Jar 文件 但运行它时遇到问题 当我跑步时 java jar myJar jar 我收到以下错误 Could not find the main class myClass 类文件不在 jar 的根目录中 因
  • android Accessibility-service 突然停止触发事件

    我有一个 AccessibilityService 工作正常 但由于开发过程中的某些原因它停止工作 我似乎找不到这个原因 请看一下我的代码并告诉我为什么它不起作用 public class MyServicee extends Access
  • 将2-3-4树转换为红黑树

    我正在尝试将 2 3 4 树转换为 java 中的红黑树 但我无法弄清楚它 我将这两个基本类编写如下 以使问题简单明了 但不知道从这里到哪里去 public class TwoThreeFour
  • 如何修复“sessionFactory”或“hibernateTemplate”是必需的问题

    我正在使用 Spring Boot JPA WEB 和 MYSQL 创建我的 Web 应用程序 它总是说 sessionFactory or hibernateTemplate是必需的 我该如何修复它 我已经尝试过的东西 删除了本地 Mav
  • java迭代器内部是如何工作的? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有一个员工列表 List

随机推荐

  • C# 如何导出位于祖父文件夹中的文件的相对文件路径?

    我正在使用 Visual Studio 2005 NET 版本 gt 2 0 创建 Windows 应用程序 根据我的观察 文件的相对路径可以参考 DEBUG 文件夹中创建的 EXE 文件给出 示例 如果我将路径指定为 images ima
  • perl:打印对象属性

    我正在使用 Net Amazon EC2 库 但找不到打印对象属性的简单方法 这有效 my snaps ec2 gt describe snapshots foreach my snap snaps print snap gt snapsh
  • 检查 SMS 消息是否采用标准 GSM 字母表

    我正在使用 API 发送短信 并且需要计算消息中短信的数量 如果消息仅使用GSM 字母字符 http en wikipedia org wiki GSM 03 38 它的长度最多可达 160 个字符 但如果一条消息包含此字母表之外的任何字符
  • Visual C++ 6.0 与 unsigned long long 和 sprintf

    我想在 Visual C 6 0 普通 C 中 sprintf 一个无符号 long long 值 char buf 1000 bad coding unsigned int64 l 12345678 char t1 6 test1 cha
  • bigquery 表上可以创建的最大分区数

    将数据从未分区表移动到分区表时出现以下错误 查询执行期间超出资源 作业完成时表 mydataset mytable 20101213 将有 2501 个分区 超出限制 2500 gt bigquery是否限制可以在表上创建的最大分区数 或者
  • 在 Windows Phone 8 中获取 UI 调度程序

    我一直在开发一个使用 Windows 运行时组件 WRC 的 Windows Phone 应用程序 由非 UI 线程访问的函数需要使用访问 Windows Phone 应用程序的回调 void WControlPointCallback O
  • Woocommerce:获取当前产品类别

    如何获取用户当前正在浏览的产品类别 我正在尝试使用get the terms post gt ID product cat 但这给了我页面上列出的每个产品的类别 我想得到当前类别用户正在浏览当前产品列表页面 这是一个内衬 wp query
  • 在 Azure 应用程序网关卸载时如何需要 SSL?

    我正在将 ASP Net 网站迁移到 Azure 托管 我正在使用具有 SSL 卸载功能的应用程序网关 因此我的个人负载平衡 Web 服务器没有安装 SSL 证书 由于 SSL 是在应用程序网关上处理的 我如何向客户端请求 SSL 并将其从
  • Docker 数据库容器正在运行。另一个带有 pid 的进程正在使用 unix 套接字文件

    我正在尝试根据此消息中提供的说明运行带有初始化数据库的 docker mysql 容器https stackoverflow com a 29150538 6086816 https stackoverflow com a 29150538
  • 追加到 Bash 中的同一行

    文件 letter csv 包含 b a c 文件numbers csv包含 32 34 25 13 我想将numbers csv 附加到letters csv 如下所示 b a c 32 34 25 13 我已经尝试过这个 sed e a
  • 暂停角度动画

    Angular 2 中可以暂停动画吗 我想在鼠标悬停在元素上时暂停动画 并在鼠标移出时从停止的位置恢复动画 我创建了一个简单的脚本来演示 https stackblitz com edit scrolling text https stac
  • PIWIK GeoIP (PECL) 给出未知位置

    我已经在我的系统上成功安装了 piwik 但 geoIP 定位不起作用 我已遵循 piwik 的指南FAQ http piwik org faq how to faq 164 通过 PECL 扩展配置 Geo IP 地理定位 但总是显示 根
  • 一个变量的多个比较运算符?

    我需要对一个变量进行多次检查 我在这里看到了一个 等于 的例子 w3学校 http www w3schools com php php operators asp 但它们是两个不同的变量 现在我有 if color blue do some
  • strcmp() 的不明确行为

    请注意 我已经检查了与该标题相关的问题 但从我的角度来看 它们与该问题无关 最初我认为program1和program2会给我相同的结果 Program 1 char a abcd char b efgh printf d strcmp a
  • 从后面的代码调用jquery

    您好 我有一个 jquery 函数 单击按钮时执行该函数 我还需要根据项目是否附加注释从后面的代码执行此函数 这是jquery Comments Slide commentsnr live click function up to pare
  • 有效地在列表中查找唯一的向量元素

    我有一个数值向量列表 我需要创建一个仅包含每个向量的一个副本的列表 没有相同函数的列表方法 因此我编写了一个函数来应用来检查每个向量 F1 lt function x to remove lt c for i in 1 length x f
  • 句柄到窗口句柄

    我尝试过使用 获取桌面枚举的所有进程 ID 方法 但这不起作用 有没有办法将句柄转换为窗口句柄 或者 有没有办法获取进程 ID 并找出该进程生成的所有子窗口 我不想使用FindWindow由于多个流程问题 你可以打电话枚举Windows h
  • Grep 匹配之前和之后的字符?

    使用这个 grep A1 B1 test pattern file 将在文件中匹配的模式之前和之后生成一行 有没有办法不显示行而是显示指定数量的字符 我的文件中的行非常大 因此我对打印整行不感兴趣 而只是观察上下文中的匹配 关于如何执行此操
  • 如何获取运行 Node.js 的服务器名称?

    我想添加一行 该行将指向不同的数据库 具体取决于我运行 node js 的服务器 localhost 与 test com 等 如何获取node js中的服务器名称 即服务器端相当于location host的是什么 var os requ
  • 为什么Thread.sleep(0)可以阻止rocketmq中的gc?

    最近我阅读了RocketMQ的源代码 但我无法理解这段代码 为什么这段代码可以阻止gc呢 https github com apache rocketmq blob master store src main java org apache