invoke virtual 总是动态绑定吗?

2024-01-25

今天我的一位朋友告诉我,如果一条指令是invoke virtual,那么它总是动态绑定,而invokespecial总是静态绑定?这是真的吗?

如果是,那么为什么当带有final关键字的方法也调用virtual时呢?

请澄清我的这个疑问


从本质上讲,是的,你是对的。有趣的部分是 Hotspot 的引入。 Hotspot 本质上是另一个编译器,它知道当前加载了哪些类,更可怕的是,它知道何时加载新类,并且可以使用更新的知识动态重新编译。 Hotspot 可能会选择使用 javac 无法获得的知识来执行删除动态调度的优化。添加Hotspot后,javac中的代码得到了简化。 Sun 剥离了很多逻辑,主要是优化部分。

因此,为了回答您的问题,javac 并没有过多关注方法的最终关键字。它遵循它的大哥 Hotspot。

Oracle 在此处记录了 Hotspot 执行的一些优化:https://wikis.oracle.com/display/HotSpotInternals/PerformanceTechniques https://wikis.oracle.com/display/HotSpotInternals/PerformanceTechniques。请查看方法部分。

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

invoke virtual 总是动态绑定吗? 的相关文章

  • 如何在 JPanel 上绘制后重新绘制它?

    我有一个继承自 JPanel 的组件 我在上面绘制了一个网格 现在我有一个 JComboBox 我希望用户能够在此处选择网格大小 然后按按钮进行网格更改 重新绘制网格 问题是它绘制了初始网格 但是一旦用户从 JComboBox 选择网格大小
  • 将 CSV 文件读入 Java 作为数据库表

    我发现了很多关于使用 Java 读取 CSV 的帖子 并且他们所指向的 API 在读取 CSV 文件时都采用了面向行的方法 就像 当你得到一行时 获取每一列的值 我希望有一个更高级别的 API 比如在 Perl 中 DBI 允许您在 CSV
  • Antlr 处理异常

    我使用 Antlr 3 和 AST 树开发了一个复杂的语法 ANTLR 生成词法分析器和解析器 问题是 例如 当用户输入无效的语法时 该语法需要 用户没有输入此内容 然后在我的 Eclipse IDE 中出现以下异常 line 1 24 m
  • 如何在 Groovy 中的 JSON Converter 方法中保留字母大小写?

    我正在尝试将 groovy 对象解析为 JSON 属性名称不遵循正确的驼峰式大小写形式 class Client String Name Date Birthdate 当我使用这个时 Client client new Client Nam
  • java.sql.SQLException: ORA-01005: 给定的密码为空;登录被拒绝

    我在尝试连接到数据库时遇到以下异常 java sql SQLException ORA 01005 null password given logon denied at oracle jdbc driver T4CTTIoer proce
  • 使用 Gson 序列化时如何公开类名

    我的场景非常复杂 但总结如下 我试图了解编译器的源代码 并了解每个 AST 节点代表什么 我正在生成不同程序的 AST 的 JSON 序列化 然后检查可视化的 JSON 输出 它工作得很好 除了一个问题是在 Gson 中生成的 JSON 数
  • 按对象值分组,统计后按最大对象属性设置组键

    我设法使用 Java 8 Streams API 编写了一个解决方案 该解决方案首先按对象 Route 的值对列表进行分组 然后计算每组中的对象数量 它返回一个映射 Route gt Long 这是代码 Map
  • Selenium - 保存网站,包括所有图像、css、dom

    我想使用 firefox 或 chrome 访问带有 selenium 的页面 当页面加载时 我想从页面下载所有图像 css dom 我想存储每张图像 就像我在其中找到它们一样 chrome gt Tools gt Development
  • 如何在 Java 中安装附加包?

    我对 Java 很陌生 我想使用名为的包中的一些功能daj 教程代码有以下几行 import daj import java util import java lang Math import Msg 但第一行和第四行会产生红色下划线 导致
  • 无法启动组件 [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/LabWebServletHibernate]]

    当使用 eclipse neon 1 在 tomcat 8 上运行应用程序时 我收到此错误 它使用 spring 4 3 3 hibernate 5 2 4 和 maven 嚴重 A child container failed durin
  • 比较和删除列表和数组java中不存在的元素

    我有一个String数组和一List
  • 如何减少 JSF 中的 javax.faces.ViewState

    减少 JSF 中视图状态隐藏字段大小的最佳方法是什么 我注意到我的视图状态约为 40k 这会在每次请求和响应时下降到客户端并返回到服务器 特别是到达服务器时 这对用户来说会显着减慢 我的环境 JSF 1 2 MyFaces Tomcat T
  • EclipseLink 2.7.0 和 JPA API 2.2.0 - 签名不匹配

    当运行由maven构建的具有以下依赖项的项目时
  • HashSet 与 LinkedHashSet

    它们之间有什么区别 我知道 LinkedHashSet 是 HashSet 的有序版本 维护一个跨所有元素的双向链接列表 使用此类代替 HashSet 当您关心迭代顺序时 当你迭代 HashSet 时 顺序是不可预测的 而 LinkedHa
  • 有时 Properties.load() 会跳过行

    在以下情况下 Properties load 会跳过 InputStream 的第二行 这是 Java 的错误还是正常行为 public class PropTest public static void main String args
  • Spring Boot如何加入自定义查询

    我需要创建一个端点 该端点按州返回人口普查数据以及城市列表 我目前使用两个端点来获取此数据 目前回应 自定义查询一 censusByState id 1 code 11 name Rond nia statePopulation 18152
  • 如何将多部分文件从另一个服务发送到一个服务

    我有两个端点 api 它们是 uploadand 重定向 upload是我直接上传文件的地方 重定向是我接收文件并将其传递给上传并获取 JSON 响应的地方 upload 所以下面是我的代码 package com example impo
  • RecyclerView 适配器的 Kotlin 泛型

    我正在尝试编写一个通用的 recyclerview 适配器 我找到了几个例子 然而 仍然无法弄清楚如何实现通用适配器 我写的代码是 open abstract class BaseAdapter
  • 对 Java 协议缓冲区对象进行一些小更改

    我想在 Java 协议缓冲区对象树的深处进行一个小更改 我可以使用 getBuilder 方法来创建一个新对象 该新对象是旧对象的克隆并进行一些更改 当深入完成此操作时 代码会变得丑陋 Quux Builder quuxBuilder fo
  • 在Java的System.out中以表格格式输出

    我正在从数据库获取结果 并希望将数据作为 Java 标准输出中的表输出 我尝试过使用 t 但我想要的第一列的长度变化很大 有没有办法将其显示在类似输出的漂亮表格中 Use System out format http java sun co

随机推荐

  • 无法读取 null 的属性“样式”

    由于某种奇怪的原因 我收到了一个奇怪的错误 我有一个元素 用 PHP 定义 最终看起来像这样 span style display inline some html inputs and stuff span 我通过 Chrome 的 In
  • 使用 Protractor 访问 JS 范围元素/变量

    我有一个量角器测试 输入登录数据并单击登录按钮 我希望检查 Angular 变量的值 被单击元素的 ng click 是 doLogin 它在控制器文件中定义为 scope doLogin function console log logi
  • 在 MarkLogic 中处理禁运内容场景

    我有一个 MarkLogic 7 数据库 其中插入了多个文档 每个文档都有自己的created on and released on 举例来说 如果将文档插入到数据库中1400小时及其released on值为1700小时然后我需要将此文档
  • 无法单击打开文件附件对话框的按钮

    我在用着硒2 我正在尝试单击打开文件附件对话框的按钮 但是当我点击它时什么也没有发生
  • $q 承诺 - 对象不是函数

    我想运行承诺样本https docs angularjs org api ng service q https docs angularjs org api ng service 24q 这是我的代码 angular module test
  • 在所需文件夹中安装 python 包

    我已经下载了一个 python 包安装在我的 ubuntu 机器上 该包已经有一个 setup py 文件可供使用 但我想将默认的 python 安装地址更改为其他地址 专门用于该包 并且不是很好 所以我尝试的是 首先在终端中 我导出新文件
  • RabbitMQ 更改生产系统上的队列参数

    我在面向服务的架构中使用 RabbitMQ 作为消息队列 其中许多单独的 Web 服务发布绑定到 RabbitMQ 队列的消息 这些队列依次被不同的消费者订阅 这些消费者执行后台工作 RabbitMQ 的一个非常普通的用例 现在我想更改一些
  • 如何使用多个VAO和VBO在OpenGL中绘制多个对象?

    我正在尝试使用多个 VAO 和 VBO 在 OpenGL 中渲染多个对象 要使用相同的顶点渲染多个对象 我已经做到了 但我想做的是为每个对象使用不同的顶点 例如绘制一个正方形和一个圆形 对于正方形 我只需要 6 个顶点 但对于圆形 我需要
  • TeamCity 中的 MSBuild 步骤考虑 ASP.NET WEB API 项目的 app.config 而不是 web.config,导致警告 MSB3247

    我有带有 Web conig 文件的 ASP NET WEB API 项目 当它在 VS2015 中构建时 不会报告任何错误和警告 但是 当我使用 MSBuild 构建步骤在 TeamCity 上构建此项目时 我收到警告 MSB3247 R
  • 更改 SQLite3 中的值

    我将首先展示代码 create table products name text primary key price INTEGER insert into table products name price values coke 8 i
  • pom.xml(Maven 多模块项目)中的 在本地工作,但不在公司服务器上工作

    我在用着
  • 由于与 UserInterfaceState.xcuserstate 冲突而无法合并

    我创建了一个分支并做了很多更改 我提交了更改 然后存档了更改 然后我切换到master分支并尝试进行合并 它说我有未提交的更改 所以我在 master 分支上做了一次提交 看看它在说什么 它说有一个名为 UserInterfaceState
  • 扩展 Scala Enumeration.Val 时如何获得正确的值类型

    虽然 S O 上有很多关于 Scala 枚举困难的问题 但我还没有找到解决我的问题的问题 具体来说 我正在尝试将 Planet 示例从Oracle Java 枚举文档 http docs oracle com javase tutorial
  • Primefaces 菜单栏菜单项宽度

    我在使用菜单项时遇到问题 想要附上照片 但不允许所以如果没有它 问题就很愚蠢 我似乎无法更改下拉菜单的宽度 我已经在我的头脑中包含了一个样式 并在其中包含了一个宽度属性 每个菜单项 但它们没有区别 当菜单项突出显示时 选择栏的宽度是正确的
  • 尝试从 MySQL DB 添加视图时出现“命令执行期间遇到致命错误”

    我正在尝试将 MySQL 数据库中的一些表和视图添加到 VS2005 中的项目中 经过大量研究后 我最终使用了 ADO NET 连接器 它工作得很好 除了尝试使用数据源配置向导添加视图时 我收到 命令执行期间遇到致命错误 错误消息 并且当我
  • tableView.tableHeaderView 已设置但未绘制

    每当我设置 tableHeaderView 时 我都不会在模拟器中看到它 如果我将其添加为子视图 它最终会绘制在节标题下方 知道我在这里缺少什么吗 我有一个 XIB 文件 不过 我没有在 IB 中看到任何影响 headerView 的属性
  • 从 JSF 中的托管 bean 获取资源文件的路径

    我遇到这种情况 我试图在从托管 bean 中放置新的头像图像之前删除用户的旧头像图像 String fileName resources img useravatars getSessionBean getSearchAccount get
  • Dagger v2:将 2 个不同的范围注入到一个对象中

    我将 moduleA 设置为应用程序范围的单例提供程序 将 ModuleB 设置为用户相关的对象提供程序 我的用户显示片段将使用系统范围总线向其他人发送消息并使用用户相关对象进行显示 问题是无法将不同的作用域类注入一个对象 使用 compo
  • 动态设置DIV的高度

    在 Web 应用程序中 我有一个页面 其中包含一个 DIV 该 DIV 具有自动宽度 具体取决于浏览器窗口的宽度 我需要对象的自动高度 DIV 从距顶部屏幕约 300 像素的位置开始 其高度应使其延伸到浏览器屏幕的底部 我有容器 DIV 的
  • invoke virtual 总是动态绑定吗?

    今天我的一位朋友告诉我 如果一条指令是invoke virtual 那么它总是动态绑定 而invokespecial总是静态绑定 这是真的吗 如果是 那么为什么当带有final关键字的方法也调用virtual时呢 请澄清我的这个疑问 从本质