JIT 编译的代码驻留在哪里?

2024-03-13

所以我有这个方法,用Java编写:

public void myMethod(int y){
    int x = 5 + y;
    doSomething(x);
}

并假设我的应用程序多次调用此函数..

当在Java虚拟机上运行该方法的编译代码时,JVM将首先解释该方法。然后一段时间后,如果我理解正确的话,它会决定将其编译为机器语言。

在此刻,

会被内存中的机器码覆盖吗?如果覆盖的话,大小差异的问题怎么解决?如果将其写入内存中的其他位置,加载到内存中的字节码是否会被释放?而且,如果字节码和 jit 编译的代码都在内存中,当应用程序再次调用该方法时,JVM 如何决定执行 jit 编译的代码而不是字节码?


HotSpot JVM 有一个Method http://hg.openjdk.java.net/jdk8u/jdk8u/hotspot/file/9989538b7507/src/share/vm/oops/method.hpp#l40Metaspace 中的结构(或早期版本中的 PermGen)。 它包含永远不会被覆盖的方法字节码指向已编译代码的指针 http://hg.openjdk.java.net/jdk8u/jdk8u/hotspot/file/9989538b7507/src/share/vm/oops/method.hpp#l135,最初为 NULL,直到该方法被编译。

一个方法可以有多个入口点:

  • _i2i_entry- 指向字节码解释器的指针。
  • _code->entry_point()- JIT 编译代码的入口点。编译后的方法驻留在CodeCache- 用于VM动态生成代码的本机内存的特殊区域。
  • i2c and c2i适配器从解释器调用编译后的代码,反之亦然。需要这些适配器,因为解释方法和编译方法具有不同的调用约定(如何传递参数的方式,如何构造框架等)

编译的方法可能有不常见的陷阱,在极少数情况下会回退到解释器。此外,Java方法可以动态重新编译多次,因此JVM不能丢弃原始字节码。无论如何释放它是没有意义的,因为字节码通常比编译后的代码小得多。

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

JIT 编译的代码驻留在哪里? 的相关文章

  • 连接外部 Accumulo 实例和 java

    我正在尝试使用 Accumulo 连接到虚拟机 问题是 我无法将其连接到 Java 中 我可以看到 Apache 抛出的网页 但我无法让它与代码一起工作 我认为这是缺乏知识的问题而不是真正的问题 但我找不到这方面的文档 所有示例都使用 lo
  • java程序有多少种结束方式?

    我知道使用 System exit 0 可以结束一个java程序 例如 如果我有一个JFrame窗口 它会关闭并结束程序 但我想知道还有多少其他方法 可以关闭它并结束程序 包括发生错误时 程序会被关闭 JFrame也会被关闭吗 添加到其他答
  • 使用 proguard 混淆文件名

    我正在使用 proguard 和 Android Studio 混淆我的 apk 当我反编译我的apk时 我可以看到很多文件 例如aaa java aab java ETC 但我项目中的所有文件都有原始名称 有没有办法混淆我的项目的文件名
  • Java 中的 <-- 是什么? [复制]

    这个问题在这里已经有答案了 我遇到了下面的片段 它输出到4 3 2 1 我从来没有遇到过 lt 在爪哇 Is lt 使 var1 的值变为 var2 的运算符 public class Test public static void mai
  • 有人用过 ServiceLoader 和 Guice 一起使用吗?

    我一直想通过我们的应用程序 构建系统进行更大规模的尝试 但更高的优先级不断将其推到次要地位 这似乎是加载 Guice 模块的好方法 并且避免了关于 硬编码配置 的常见抱怨 单个配置属性很少会自行更改 但您几乎总是会有一组配置文件 通常用于不
  • 如何使用 Java Apache POI 隐藏 Excel 工作表中以下未使用的行?

    我正在使用数据库中的数据填充模板 Excel 工作表 for Map
  • getCurrentSession 在网络中休眠

    我正在使用 hibernate 和 jsp servlet 编写一个基于 Web 的应用程序 我读过有关sessionFactory getCurrentSession and sessionFactory openSession方法 我知
  • 将类转换为 JSONObject

    我有好几堂这样的课 我想将类转换为 JSONObject 格式 import java io Serializable import com google gson annotations SerializedName public cla
  • Java AES 256 加密

    我有下面的 java 代码来加密使用 64 个字符密钥的字符串 我的问题是这会是 AES 256 加密吗 String keyString C0BAE23DF8B51807B3E17D21925FADF273A70181E1D81B8EDE
  • JAXB - 忽略元素

    有什么方法可以忽略 Jaxb 解析中的元素吗 我有一个很大的 XML 文件 如果我可以忽略其中一个大而复杂的元素 那么它的解析速度可能会快很多 如果它根本无法验证元素内容并解析文档的其余部分 即使该元素不正确 那就更好了 例如 这应该只生成
  • 在光标所在行强制关闭!

    嘿 我正在尝试创建一个应用程序来查找存储在 SQlite 数据库中的 GPS 数据 但我面临一个问题 我构建了一个 DbAdapter 类来创建数据库 现在我尝试使用以下函数从另一个类获取所有数据上的光标 public Cursor fet
  • Android 认为我没有关闭数据库!为什么?

    我有一个 SQLiteDatabase 数据成员 我在 onCreate 中初始化它 并在 onPause onStop 和 onDestroy 中调用 close 它在 onResume 中重新初始化 它似乎运行得很好 但当我查看调试器时
  • 在java程序中使用c++ Dll

    我正在尝试使用System LoadLibrary 使用我用 C 编写的一个简单的 dll UseDllInJava java import com sun jna Library import com sun jna Native imp
  • IntelliJ Idea:将简单的 Java servlet(无 JSP)部署到 Tomcat 7

    我尝试按照教程进行操作here http wiki jetbrains net intellij Creating a simple Web application and deploying it to Tomcat部署 servlet
  • 如何使用 Jersey 将嵌套列表封送为 JSON?我得到一个空数组或一个包含数组的单元素字典数组

    我正在开发一个使用 Jersey 将对象转换为 JSON 的项目 我希望能够写出嵌套列表 如下所示 data one two three a b c 我想要转换的对象首先将数据表示为 gt gt 我认为 Jersey 会做正确的事情 以上输
  • 我们如何使用 thymeleaf 绑定对象列表的列表

    我有一个表单 用户可以在其中添加任意数量的内容表对象这也可以包含他想要的列对象 就像在 SQL 中构建表一样 我尝试了下面的代码 但没有任何效果 并且当我尝试绑定两个列表时 表单不再出现 控制器 ModelAttribute page pu
  • 使用 Apache 允许 Glassfish 和 PHP 在同一服务器中协同工作

    是否可以建立从 Java 到 php 文件的桥梁 我有一个用 Java 编写的应用程序 我需要执行http piwik org http piwik org 这是用 PHP 编写的 在服务器中 我正在运行 PHP 但无法从浏览器访问 php
  • Java 中清除嵌套 Map 的好方法

    public class MyCache AbstractMap
  • Selenium 单击在 Internet Explorer 11 上不起作用

    我尝试在 Internet Explorer 上单击 selenium 但它不起作用 我努力了element click moveToElement element click build perform javascript没事了 事实上
  • Spring 作为 JNDI 提供者?

    我想使用 Spring 作为 JNDI 提供程序 这意味着我想在 Spring 上下文中配置一个 bean 可以通过 JNDI 访问该 bean 这看起来像这样

随机推荐

  • 单击按钮时为 gridview 中的所有复选框获取 gridview 项目中的复选框状态

    我有下面的代码 现在我需要跟踪每个 gridview 项目中的复选框状态 并通过单击按钮获取该信息以更新信息 我的按钮事件在网格视图的图像适配器的调用活动中 public View getView int position View con
  • 在 Rails 中添加索引具有多通关系

    考虑到以下关系 class Style lt ActiveRecord Base has many stylefeatures dependent gt destroy has many features through gt stylef
  • 在列表理解中一次添加两个项目[重复]

    这个问题在这里已经有答案了 我想一次将两个项目添加到列表理解中 一项是不变的 如何仅使用列表理解中的一个 for 循环而不使用其他函数来实现这一目标 不使用任何导入的答案将受到青睐 看看以下内容 gt gt gt mystring ABCE
  • 在学说中坚持具有两个外国身份的对象

    我在我的 symfony 包中的 Resources config doctrine 文件夹中使用 yml syntax 创建了一个实体 Sulu Bundle TranslateBundle Entity Translation type
  • 如何使用 Bower 安装最新的不稳定 AngularJS 组件?

    我使用 Yeoman 搭建了一个 AngularJS 应用程序 哟有角度 minsafe 当我运行 bower list 命令时 我得到以下信息 angular 1 0 8 latest is 1 2 0 rc 2 angular mock
  • 为什么我必须为同一依赖项指定“运行时”和“编译”?

    我依赖于编译和运行应用程序所需的一些工件 根据 Gradle 文档 运行时配置extends编译配置 因此肯定使用添加依赖项runtime暗示着一种隐含的compile依赖性 至少这是我的假设 但它不起作用 当仅依赖于使用的工件时runti
  • 如何在bash中退出if语句而不退出程序?

    重写这个问题以避免更多的反对票 因为对我来说删除它已经太晚了 我正在编写一个脚本 要求用户确认之前sourcing一些其他脚本 为了简化代码 假设有两个脚本sourced 但我希望用户可以source没有或仅是其中一个脚本 不是两者都存在
  • 使用 IE9 支持的 jQuery 旋转 div

    我有一些 div 基本上只是图像 当它们旋转 360 度时我会淡入它们 在所有主流浏览器中一切都可以完美运行 但 IE 除外 有效的 CSS3 代码 box width 400px height 400px display inline b
  • Jquery .Submit() 没有触发提交事件

    我有一个很小的问题 我想在下拉列表更改时使用 jQuery 提交我的代码 mydropDown change function myForm submit 但它没有提交 我还在 Firebug 控制台中触发了以下代码 myForm subm
  • 从子视图中的 UIButton 调用 UIViewController 中的方法

    仍在学习 Objective C 并获得正确的结构 我有一个带有 UIViewController 的 iOS 应用程序 它有一个名为 doSomething 的已定义方法 在我的视图控制器中 我有一个视图 并在该视图中以编程方式创建了许多
  • 为什么在使用空引用访问静态时不会出现 NullPointerException? [复制]

    这个问题在这里已经有答案了 在下面的代码中我们得到的值i在空引用上 尽管NPE不在这里 public class Test static int i 10 Test getTest return null public static voi
  • 安装新版本 XCode 15.0 后无法运行应用程序 XCode

    我已经安装了新版本的 Xcode 15 0 此后我无法运行我的 flutter 应用程序 它向我显示以下错误 Error Xcode DT TOOLCHAIN DIR cannot be used to evaluate LIBRARY S
  • 如何矢量化在较大矩阵的子集上运行函数的代码?

    假设我有以下 9 x 5 矩阵 myArray 54 7 8 1 81 7 55 0 22 5 29 6 92 9 79 4 62 2 17 0 74 4 77 5 64 4 58 7 22 7 18 8 48 6 37 8 20 7 43
  • C 中的释放字符串

    如果我写 char a malloc sizeof char 4 a abc char b abc 我是否需要释放该内存 还是由我的系统完成 在您的情况下 您将无法释放动态分配的内存 因为您正在丢失对它的引用 试试这个 include
  • 通过 Android 共享时 Google+ 应用程序显示错误的图片

    我已以编程方式将 Google 共享添加到我的应用程序中 我有一组照片 我将其包含在我的帖子中并使用以下代码共享 private void shareToGooglePlus Launch the Google share dialog w
  • Python-UDP客户端

    我目前正在阅读Pythonbook https www nostarch com blackhatpython并遇到了以下示例 import socket target host 127 0 0 1 target port 80 creat
  • LD_PRELOAD __libc_start_main 的 Makefile

    我想做的事情很简单 当我启动猫鼬服务器时 我想创建一个额外的线程来完成一些额外的工作 为了做到这一点 我想我需要LD PRELOAD the libc start main服务器的 This is spec hooks cpp typede
  • 与邮递员的 CORS

    这个问题已经被问过几次了 但我还是不明白 当我读到有关的答案时 没有 Access Control Allow Origin 标头 问题 它说应该在请求的服务器上设置一个设置以允许跨域 add header Access Control A
  • 适用于 Windows 的 Composer 安装 -

    所以我尝试在我的 Windows 操作系统上安装 Composer 并设置 Laravel 但是当我运行安装时 我不断收到相同的错误 首先 我选择了 php exe 因为它从目录中询问C wamp bin php php5 4 16 我单击
  • JIT 编译的代码驻留在哪里?

    所以我有这个方法 用Java编写 public void myMethod int y int x 5 y doSomething x 并假设我的应用程序多次调用此函数 当在Java虚拟机上运行该方法的编译代码时 JVM将首先解释该方法 然