JIT可以做这个字段访问优化吗?

2024-01-04

免责声明:请不要就过早优化提出建议。我只是好奇。

想象一下,我想确保字段引用的某些对象可以尽快被垃圾收集。我正在使用像这样的自制单链表

class BigData {
    byte[] someBigArray;
    BigData next;
}

private BigData bigData;

并像这样迭代

while (bigData != null) {
    process(bigData);
    bigData = bigData.next;
}

JIT 是否可以随意更改它,如下所示?

BigData tmp = bigData;
while (tmp != null) {
    process(tmp);
    tmp = tmp.next;
}
bigData = null;

假设没有其他对任何实例的引用BigData。认为process是一个不访问该字段的简单内联方法bigData。两个片段是等效的(假设中间没有抛出异常),唯一的区别是第二个片段将字段访问从循环移到了外部。

重复免责声明:请不要就过早优化提出建议。我只是好奇。


回复评论“即使 JIT 所做的就是你‘想要’的改变,为什么这会让 GC 更快/更快地收集它们呢?”:如果JIT做了改变,那么所有的大对象只能在循环之后被收集。如果没有,则每次循环前进时,都会有一个对象符合 GC 的条件。

附录:

实际上,只要 JIT 可以自由地执行上述转换,它就可以执行以下转换:

BigData tmp = bigData;
bigData = null;
while (tmp != null) {
    process(tmp);
    tmp = tmp.next;
}

我在这里看不到任何缺点,它使所有对象在原始代码中都可以收集。


嗯,优化器can优化

while (bigData != null) {
    process(bigData);
    bigData = bigData.next;
}

into

BigData tmp = bigData;
while (tmp != null) {
    process(tmp);
    tmp = tmp.next;
}
bigData = null;

if the bigData字段不是volatileprocess方法没有禁止这种优化的副作用。

但在实践中,代码转换(如果有的话)看起来会完全不同。通常,优化器会展开循环,创建一个执行一定次数迭代的代码块,并在向后跳转之前执行字段存储操作。因此,存在垃圾收集器可以跳入的某些“保存点”。但是如果process方法包含访问的代码bigData字段或可能分配内存等,字段存储将在每次调用之前执行。

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

JIT可以做这个字段访问优化吗? 的相关文章

  • 如何为最终用户方便地启动Java GUI程序

    用户想要从以下位置启动 Java GUI 应用程序Windows 以及一些额外的 JVM 参数 例如 javaw Djava util logging config file logging properties jar MyGUI jar
  • 在画布上绘图

    我正在编写一个 Android 应用程序 它可以在视图的 onDraw 事件上直接绘制到画布上 我正在绘制一些涉及单独绘制每个像素的东西 为此我使用类似的东西 for int x 0 x lt xMax x for int y 0 y lt
  • 在 HTTPResponse Android 中跟踪重定向

    我需要遵循 HTTPost 给我的重定向 当我发出 HTTP post 并尝试读取响应时 我得到重定向页面 html 我怎样才能解决这个问题 代码 public void parseDoc final HttpParams params n
  • JAXb、Hibernate 和 beans

    目前我正在开发一个使用 Spring Web 服务 hibernate 和 JAXb 的项目 1 我已经使用IDE hibernate代码生成 生成了hibernate bean 2 另外 我已经使用maven编译器生成了jaxb bean
  • 加速代码 - 3D 数组

    我正在尝试提高我编写的一些代码的速度 我想知道从 3d 整数数组访问数据的效率如何 我有一个数组 int cube new int 10 10 10 我用价值观填充其中 然后我访问这些值数千次 我想知道 由于理论上所有 3d 数组都存储在内
  • Spark 1.3.1 上的 Apache Phoenix(4.3.1 和 4.4.0-HBase-0.98)ClassNotFoundException

    我正在尝试通过 Spark 连接到 Phoenix 并且在通过 JDBC 驱动程序打开连接时不断收到以下异常 为简洁起见 下面是完整的堆栈跟踪 Caused by java lang ClassNotFoundException org a
  • 优化视图状态

    是否有人对优化 ASP NET 应用程序的视图状态有任何想法或参考可以向我指出 我不想把它全部关闭 优化它的主要目标是提高性能 所以我不想运行一个昂贵的函数来递归地禁用某些控件的视图状态 因为该函数会减慢速度页面的加载时间会达不到目的 有任
  • JavaMail 只获取新邮件

    我想知道是否有一种方法可以在javamail中只获取新消息 例如 在初始加载时 获取收件箱中的所有消息并存储它们 然后 每当应用程序再次加载时 仅获取新消息 而不是再次重新加载它们 javamail 可以做到这一点吗 它是如何工作的 一些背
  • 路径中 File.separator 和斜杠之间的区别

    使用有什么区别File separator和一个正常的 在 Java 路径字符串中 与双反斜杠相反 平台独立性似乎不是原因 因为两个版本都可以在 Windows 和 Unix 下运行 public class SlashTest Test
  • 如何在PreferenceActivity中添加工具栏

    我已经使用首选项创建了应用程序设置 但我注意到 我的 PreferenceActivity 中没有工具栏 如何将工具栏添加到我的 PreferenceActivity 中 My code 我的 pref xml
  • 十进制到八进制的转换[重复]

    这个问题在这里已经有答案了 可能的重复 十进制转换错误 https stackoverflow com questions 13142977 decimal conversion error 我正在为一个类编写一个程序 并且在计算如何将八进
  • Java按日期升序对列表对象进行排序[重复]

    这个问题在这里已经有答案了 我想按一个参数对对象列表进行排序 其日期格式为 YYYY MM DD HH mm 按升序排列 我找不到正确的解决方案 在 python 中使用 lambda 很容易对其进行排序 但在 Java 中我遇到了问题 f
  • 如何将 pfx 文件转换为 jks,然后通过使用 wsdl 生成的类来使用它来签署传出的肥皂请求

    我正在寻找一个代码示例 该示例演示如何使用 PFX 证书通过 SSL 访问安全 Web 服务 我有证书及其密码 我首先使用下面提到的命令创建一个 KeyStore 实例 keytool importkeystore destkeystore
  • Java Integer CompareTo() - 为什么使用比较与减法?

    我发现java lang Integer实施compareTo方法如下 public int compareTo Integer anotherInteger int thisVal this value int anotherVal an
  • 如何在控制器、服务和存储库模式中使用 DTO

    我正在遵循控制器 服务和存储库模式 我只是想知道 DTO 在哪里出现 控制器应该只接收 DTO 吗 我的理解是您不希望外界了解底层域模型 从领域模型到 DTO 的转换应该发生在控制器层还是服务层 在今天使用 Spring MVC 和交互式
  • Java列表的线程安全

    我有一个列表 它将在线程安全上下文或非线程安全上下文中使用 究竟会是哪一个 无法提前确定 在这种特殊情况下 每当列表进入非线程安全上下文时 我都会使用它来包装它 Collections synchronizedList 但如果不进入非线程安
  • simpleframework,将空元素反序列化为空字符串而不是 null

    我使用简单框架 http simple sourceforge net http simple sourceforge net 在一个项目中满足我的序列化 反序列化需求 但在处理空 空字符串值时它不能按预期工作 好吧 至少不是我所期望的 如
  • 如何修复 JNLP 应用程序中的“缺少代码库、权限和应用程序名称清单属性”?

    随着最近的 Java 更新 许多人都遇到了缺少 Java Web Start 应用程序的问题Codebase Permissions and Application name体现属性 尽管有资源可以帮助您完成此任务 但我找不到任何资源综合的
  • 按日期对 RecyclerView 进行排序

    我正在尝试按日期对 RecyclerView 进行排序 但我尝试了太多的事情 我不知道现在该尝试什么 问题就出在这条线上适配器 notifyDataSetChanged 因为如果我不放 不会显示错误 但也不会更新 recyclerview
  • Spring Boot @ConfigurationProperties 不从环境中检索属性

    我正在使用 Spring Boot 1 2 1 并尝试创建一个 ConfigurationProperties带有验证的bean 如下所示 package com sampleapp import java net URL import j

随机推荐

  • 允许 numpy 类型溢出

    我试图在 Python 中获得 C 类型语言的 正常 溢出 下溢行为 令我惊讶的是 一个RuntimeWarning当我试图获得这种行为时会引发 例子 np uint8 255 np uint8 1 gt gt gt RuntimeWarn
  • ASP.NET 的垃圾邮件过滤器?

    我正在寻找一个可以集成到我的 ASP NET 应用程序中的垃圾邮件过滤器 我不需要任何委托服务 例如 Akismet 因为我正在为高流量网站执行此操作 有什么建议吗 编辑 我的意思是垃圾邮件过滤器 它是一个基于论坛的网站 编辑 感谢您的回答
  • Chrome 更新后 Android 9 WebView(还有 admob 广告)无法加载

    我们有一个严重依赖网络视图的应用程序 上周之后我们注意到 如果 Android 9 用户花费大约 10 到 30 时间加载 Web 视图 那么 Web 视图只会显示空白页面 并且加载进度会达到 10 Admob 原生广告也停止展示 唯一改变
  • 是否可以通过数据 URL 在 Android 上共享图像?

    是否可以使用这样的代码共享图像 Intent share new Intent Intent ACTION SEND share setData Uri parse data image png base64 iVBORw0KGgoAAAA
  • 如何在 JSF 页面中执行 Java Swing 代码

    大家好 我是 JSF 的新手 我已经创建了一个 java 文件 当用户按下 XHTML 页面上的按钮时我需要运行该文件 我该怎么做 对于像我这样的初学者来说 还有什么好的 JSF 教程吗 谢谢 JAVA代码是一段简单的代码 允许用户选择一个
  • 如何在 Laravel 5.4 中设置 cookie?

    我在 laravel 5 4 中有这个功能 但我无法从 cookie 中获取任何内容 Cookie queue currentLang heb 999999999 echo request gt cookie currentLang 但我得
  • 如何将rpm包安装到非默认路径? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我有一个 rpm 包 我需要从中提取一些文件 该软件包不可重定位 我尝试过 rpm root prefix 但不起作用 我应该采取什么方法进行提取 预
  • 搜索结果和后退按钮/HTML 表单

    我正在寻找应用程序中基于表单的搜索结果反复出现的问题的解决方案 基本上 当用户使用 HTML 表单进行搜索并且我在下一页上显示数据库的结果时 效果非常好 但是 当用户单击结果集中的单个记录 然后单击浏览器上的 返回 时 浏览器会询问 Fir
  • 如何使用 Jekyll 向 MarkDown 添加多个类?

    我想在 Jekyll 驱动的网站中生成 HTML 表 该表的格式应为table and table stripped像这样的类 table class table table stripped 我该怎么做 类似问题 如何在 Jekyll 中
  • 如何在 React 中使用 FileReader?

    我试图让用户 选择文本文件 并将其显示在用户界面中 稍后 我将使用 txt 文件中的数据进行绘图 但是 我无法显示txt文件的内容 有几个可用的模块 但我不知道如何使其在 React 中工作 以下是我找到的例子 https stackove
  • 如何计算 jQuery 中函数花费的时间?

    我有 jQuery 函数 例如 A B 和 C 每个函数都会对不同的站点进行一些 Ajax 调用 我想计算运行每个函数需要多少时间 我猜以毫秒为单位 我只想在长循环和不同的现代浏览器 Safari Chrome IE10 Mozilla 中
  • 将html包含在另一个html文件中[重复]

    这个问题在这里已经有答案了 我有一个 html head 模板和一个导航模板 我想将它们包含在我网站的所有其他 html 文件中 我找到了这个帖子 在 HTML 文件中包含另一个 HTML 文件 https stackoverflow co
  • 有什么方法可以使用 matplotlib.pyplot 创建直方图而不绘制直方图?

    我正在使用 matplotlib pyplot 创建直方图 我实际上对这些直方图的图不感兴趣 但对频率和箱感兴趣 我知道我可以编写自己的代码来执行此操作 但更喜欢使用这个包 我知道我可以做到以下几点 import numpy as np i
  • 错误“与服务器的连接失败。”在 Cordova 和 jQuery 中

    我使用 Cordova 和 JQuery mobile 创建了一个 Android 应用程序 当我使用 google chrome 测试运行代码时它效果很好 但是当我尝试使用 android studio 在 android 模拟器上运行它
  • boost.spirit qi 中序列和列表运算符的属性?

    我想解析类似的东西 xxxx xxxx 被 eol 分成vector
  • 树数据结构中的节点总数?

    我有一个树数据结构 每个节点都有 L 层深度aboutN 个节点 我想计算出树中节点的总数 为此 我认为 我需要知道有子节点的节点的百分比 N 中叶节点与非叶节点之比的正确术语是什么 三者中节点总数的计算公式是什么 Update有人提到分支
  • Gallery 类型已被弃用

    imageView setLayoutParams new Gallery LayoutParams WindowManager LayoutParams MATCH PARENT WindowManager LayoutParams MA
  • 拦截器中的角度http请求时间

    我正在制作一个拦截器来记录我的 http 请求 到目前为止 一切都很好 一切都按预期进行 我现在想要的是获取执行请求所需的时间 我以为我可以做这样的事情 const start Date now return next handle req
  • 如何将 JAXB 类实例编组为其超类

    是否可以封送 JAXB 带注释的类实例作为它的超类 这也是一个 JAXB 带注释的类 XmlAccessorType XmlAccessType FIELD XmlType name BenamningTYPE propOrder bena
  • JIT可以做这个字段访问优化吗?

    免责声明 请不要就过早优化提出建议 我只是好奇 想象一下 我想确保字段引用的某些对象可以尽快被垃圾收集 我正在使用像这样的自制单链表 class BigData byte someBigArray BigData next private