关于HotSpot的动态反优化

2023-11-26

我在读《深入Scala》这本书的时候,提到HotSpot编译器有几个重要的特性,其中之一就是“动态去优化”:

它是确定优化是否有效的能力not,事实上,提高性能并撤消该优化,允许应用其他优化

看来HotSpot会尝试各种“优化”,并选择其中最好的一种。

但我不太明白。这里的“优化”都是HotSpot提供的吗?我的意思是程序员经常尝试用一些技巧来优化代码,HotSpot 会处理它们吗?

HotSpot 是否会尝试一些常见的“优化”?


Oracle 提供了一个(相当简洁)JVM 应用的性能技术的总结。它解释说:

去优化是将优化的堆栈帧更改为 一个未经优化的。对于编译方法来说,它也是 丢弃具有无效乐观优化的代码的过程, 并用优化程度较低、更健壮的代码替换它。一个方法可以在 原理被去优化数十次。

总结一下,去优化的原因如下:

  1. 编译器可能会删除未采用的分支,并在曾经采用的情况下进行取消优化。
  2. 同样,对于历史上从未失败过的低级安全检查。
  3. 如果调用站点或转换遇到意外类型,编译器将取消优化。
  4. 如果加载的类使早期的类层次结构分析无效,则任何线程中的任何受影响的方法激活都将被强制 到安全点并取消优化。
  5. 这种间接的去优化是由依赖系统调节的。如果编译器做出未经检查的假设,它必须注册一个 可检查的依赖关系。 (例如,该类 Foo 没有子类,或者 方法 Foo.bar 没有覆盖。)

就我个人而言,我发现这个博客条目关于微基准测试的文章非常可读,其中还涵盖了 HotSpot VM 上的优化和反优化主题。另外,我可以推荐通读本演示文稿.

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

关于HotSpot的动态反优化 的相关文章

  • 无法在 Android 10 中创建目录

    我无法在 android 10 中创建目录 它可以在 android Oreo 之前的设备上运行 我尝试了两种创建文件夹的方法 Using File mkdir File f new File Environment getExternal
  • 未找到 MessageSource 的 ResourceBundle [消息]:找不到基本名称消息的包

    在 applicationContext xml 中 我定义了 MessageSource 如下所示
  • Grails 2.3.0 自动重新加载不起作用

    我最近将我们的项目升级到 grails 2 3 0 一切工作正常 除了每当我更改代码时自动重新加载都无法工作的问题 这包括所有项目工件 控制器 域 服务 gsps css 和 javascript 文件 我的旧版本 grails 可以正常工
  • 无法使用maven编译java项目

    我正在尝试在 java 16 0 1 上使用 maven 构建 IntelliJ 项目 但它无法编译我的项目 尽管 IntelliJ 能够成功完成 在此之前 我使用maven编译了一个java 15项目 但我决定将所有内容更新到16 0 1
  • 如何从秘密字符串中制作 HMAC_SHA256 密钥以在 jose4j 中与 JWT 一起使用?

    我想生成 JWT 并使用 HMAC SHA256 对其进行签名 对于该任务我必须使用jose4j https bitbucket org b c jose4j wiki Home 我尝试根据秘密生成密钥 SecretKeySpec key
  • 使用 RecyclerView 适配器在运行时更改布局屏幕

    我有两个布局文件 如下所示 如果列表中存在数据 则我显示此布局 当列表为空时 我会显示此布局 现在我想在运行时更改布局 当用户从列表中删除最后一项时 我想将布局更改为第二张图片中显示的 空购物车布局 In getItemCount Recy
  • Java套接字:在连接被拒绝异常时重试的最佳方法?

    现在我正在这样做 while true try SocketAddress sockaddr new InetSocketAddress ivDestIP ivDestPort downloadSock new Socket downloa
  • 在 HTTP 标头中发送 UTF-8 值会导致 Mojibake

    我想使用 servlet 发送阿拉伯语数据HTTPServletResponse给客户 我正在尝试这个 response setCharacterEncoding UTF 8 response setHeader Info arabicWo
  • 具有共享依赖项的多模块项目的 Gradle 配置

    使用 gradle 制作第一个项目 所以我研究了 spring gradle hibernate 项目如何组织 gradle 文件 并开始制作自己的项目 但是 找不到错误 为什么我的配置不起作用 子项目无法解决依赖关系 所以项目树 Root
  • Java 服务器-客户端 readLine() 方法

    我有一个客户端类和一个服务器类 如果客户端向服务器发送消息 服务器会将响应发送回客户端 然后客户端将打印它收到的所有消息 例如 如果客户端向服务器发送 A 则服务器将向客户端发送响应 1111 所以我在客户端类中使用 readLine 从服
  • 隐式超级构造函数 Person() 未定义。必须显式调用另一个构造函数?

    我正在开发一个项目 但收到错误 隐式超级构造函数 Person 未定义 必须显式调用另一个构造函数 我不太明白它 这是我的人物课程 public class Person public Person String name double D
  • 获取给定类文件的目录路径

    我遇到的代码尝试从类本身的 class 文件所在的同一目录中读取一些配置文件 File configFiles new File this getClass getResource getPath listFiles new Filenam
  • 计算日期之间的天数差异

    在我的代码中 日期之间的差异是错误的 因为它应该是 38 天而不是 8 天 我该如何修复 package random04diferencadata import java text ParseException import java t
  • Spring Security OAuth2简单配置

    我有一个简单的项目 需要以下简单的配置 我有一个 密码 grant type 这意味着我可以提交用户名 密码 用户在登录表单中输入 并在成功时获得 access token 有了该 access token 我就可以请求 API 并获取用户
  • Android Studio 将音乐文件读取为文本文件,如何恢复它?

    gameAlert mp3是我的声音文件 运行应用程序时 它询问我该文件不与任何文件类型关联 请定义关联 我选择TextFile错误地 现在我的音乐文件被读取为文本文件 我如何将其转换回music file protected void o
  • 如何在Java中正确删除数组[重复]

    这个问题在这里已经有答案了 我刚接触 Java 4 天 从我搜索过的教程来看 讲师们花费了大量精力来解释如何分配二维数组 例如 如下所示 Foo fooArray new Foo 2 3 但我还没有找到任何解释如何删除它们的信息 从内存的情
  • JSON 到 hashmap (杰克逊)

    我想将 JSON 转换为 HashMapJackson http jackson codehaus org 这是我的 JSON String json Opleidingen name Bijz trajecten zorg en welz
  • Java的-XX:+UseMembar参数是什么

    我在各种地方 论坛等 看到这个参数 并且常见的答案是它有助于高并发服务器 尽管如此 我还是找不到 sun 的官方文档来解释它的作用 另外 它是Java 6中添加的还是Java 5中存在的 顺便说一句 许多热点虚拟机参数的好地方是这一页 ht
  • Android - 9 补丁

    我正在尝试使用 9 块图片创建一个新的微调器背景 我尝试了很多方法来获得完美的图像 但都失败了 s Here is my 9 patch 当我用Draw 9 patch模拟时 内容看起来不错 但是带有箭头的部分没有显示 或者当它显示时 这部
  • 在android中跟踪FTP上传数据?

    我有一个运行 Android 的 FTP 系统 但我希望能够在上传时跟踪字节 这样我就可以在上传过程中更新进度条 安卓可以实现这个功能吗 现在 我正在使用org apache common net ftp我正在使用的代码如下 另外 我在 A

随机推荐

  • QComboBox下拉列表-设置选中项样式

    是否可以设置QComboBox下拉列表的所选项目样式 Qt样式表 解决办法是 创建一个ListView对象 设置其样式表 使用它作为 ComboBox 的视图 具体方法如下 int main int argc char argv QAppl
  • MSBuild:将单个警告视为错误

    有没有办法强制 MSBuild 将某个警告视为错误 运行 ccproj 文件的发布目标以创建 cspkg 以部署到 Azure 时 会引发以下错误 Project Name 警告 WAT150 项目 Project Name 是 依赖于以下
  • 侵入 MFMessageComposeViewController

    我知道在真实的应用程序中不允许这样做 以保护用户的隐私和安全 但出于纯粹的学术目的 我尝试在不显示 MessageComposer UI 的情况下发送消息 如下所示 MFMessageComposeViewController picker
  • 使用带参数的 DISTINCT 时 select 语句性能下降

    赏金注意事项 开始 参数嗅探 这是赏金前问题中报告的唯一 想法 不是这里的问题 您可以在问题末尾的 更新 部分中阅读 这个问题实际上与sql server在使用distinct时如何为参数化查询创建执行计划有关 我上传了一个非常简单的数据库
  • 如何使用react-router在浏览器中停止/#/?

    有什么方法可以预防 使用react router时在浏览器地址栏中显示 这就是 ReactJS 的情况 即单击链接转到新路线显示localhost 3000 or localhost 3000 about 取决于路线 多年来 随着 Reac
  • 在Mac上编辑PATH变量[关闭]

    Closed 这个问题是无关 目前不接受答案 如何在 mac Lion 上编辑 PATH 变量 我找不到任何可以添加路径的文件 有人可以指导我吗 文件名是什么 profile 或 bash profile 我在哪里可以找到它 我努力了 ec
  • 一个 StoredProcedure 中的多个更新语句

    我想知道存储过程中是否可以有多个 Update 语句 像这样的东西 Update Table1 set field1 new value where id table1 id Update Table2 set field2 new val
  • CloudKit复合查询(使用OR查询)

    我想使用 OR 和两个字段来查询 CloudKit 但我找不到如何做到这一点的方法 我所做的是 NSPredicate predicate1 NSPredicate predicateWithFormat creatorUserRecord
  • 如何使用php生成两个日期之间的随机日期?

    我正在编写一个应用程序 我需要在两个固定时间戳之间分配随机日期 我如何使用 php 实现此目的我首先搜索过但只找到了 Java 而不是 php 的答案 例如 string randomdate 1262055681 1262055681 P
  • Plotly Dash:如何重置 dash-html.button 的“n_clicks”属性?

    我在绘图 破折号中有一个基本数据表 我的目标是在按下上传按钮后上传 或为了示例而打印 问题是 我不知道如何获得n clicks按钮的属性回到零 因此 发生的情况是 在我第一次单击该按钮后 只要发生更改 添加行或更改 添加数字 它就会连续打印
  • 使用 Android Studio 和 Gradle 进行单元测试?

    如何轻松地将单元测试添加到 Android Studio IntelliJ 中的 Android 项目 更准确地说 我想添加一个包含测试代码 JUnit 4 的文件夹 并使用常规安装的 JDK 而不是在 Android 模拟器中 从那里执行
  • 在 Emberjs 中销毁之前对视图进行动画处理

    目前没有办法延迟 Ember 中的视图破坏 当您想要在销毁视图之前对其进行动画处理时 这会出现问题 所以 我目前有一个非常丑陋的解决方法 willDestroyElement gt clone clone addClass animate
  • Azure DevOps Pipeline - 仅当不存在时才部署 Maven

    我对 Azure DevOps 和 Maven 都是新手 我们已经建立了一个 Azure 构建管道 以便它将为快照构建和发布部署工件 我希望发布工件的部署是幂等的 也就是说 如果工件已经部署 那么它不应该是错误 问题是我得到了409 资源冲
  • 使用 Java EE 6 将 EJB 注入域对象

    如何使用 Java EE 6 将 EJB 注入域对象 JPA 实体 在 Java EE 6 中 CDI 将托管组件的概念扩展到任何事物 并且可以将 EJB 注入到 CDI 托管 bean 中 使用 Inject注解 但是 虽然已经考虑了 J
  • std::aligned_storage 的 static_cast 和 reinterpret_cast

    有人可以解释一下关于投射的代码吗http en cppreference com w cpp types aligned storage please 可以用下面的代码 return static cast
  • Firestore 不保存文本区域中的换行符

    我正在使用带有 Vue v model 的文本区域并将其保存在 firestore 集合中 但换行符在数据库中消失了 如何解决 div class form group div
  • 从 m 大小的列索引向量创建一个由 0 和 1 组成的 m × n 矩阵

    我有一个m整数维向量 范围从 1 到n 这些整数是列索引m n matrix 我想创建一个m n由 0 和 1 组成的矩阵 其中m 第 行 指定的列中有一个 1m我的向量中的第一个值 Example my vector 3 dimensio
  • 为什么 CoUninitialize 会导致退出时出错?

    我正在开发一个 C 应用程序来从 Excel 文件中读取一些数据 我已经成功了 但我对其中一部分感到困惑 这是代码 简化为仅读取第一个单元格 Mostly copied from http www codeproject com KB wt
  • 在windows C中加载dll进行跨平台设计

    我写了一个为linux平台设计的c代码 现在 我想让它跨平台 以便也可以在 Windows 中使用 在我的代码中 我 dlopen 一个 so 文件并利用其中的函数 下面是我的代码的样子 但我刚刚发现 在windows中 加载和使用动态库的
  • 关于HotSpot的动态反优化

    我在读 深入Scala 这本书的时候 提到HotSpot编译器有几个重要的特性 其中之一就是 动态去优化 它是确定优化是否有效的能力not 事实上 提高性能并撤消该优化 允许应用其他优化 看来HotSpot会尝试各种 优化 并选择其中最好的