java静态编译 动态编译_Java代码的静态编译和动态编译中的问题比较

2023-11-07

两种技术都需要谨慎选择编译的方法以实现最高的性能。对动态编译器而言,编译器自身作出决策,而对于静态编译器,由开发人员作出选择。让 JIT 编译器选择编译的方法是不是优点很难说,取决于编译器在给定情形中推断能力的好坏。在大多数情况下,我们认为这是一种优点。

因为它们可以最好地优化运行中的程序,所以 JIT 编译器在提供稳定状态性能方面更胜一筹,而这一点在大量的生产 Java 系统中最为重要。静态编译可以产生最佳的交互式性能,因为没有运行时编译行为来影响用户预期的响应时间。通过调整动态编译器可以在某种程度上解决启动和确定性性能问题,但是静态编译在需要时可提供最快的启动速度和最高级别的确定性。表 2 在四种不同的执行环境中对这两种编译技术进行了比较:

表 2. 使用这些技术的最佳环境

5b41c10bb16f9b95e46f58fa26f6b1e4.png

图 3 展示了启动性能和稳定状态性能的总体趋势:

图 3. AOT 和 JIT 的性能对比

e412695b2d0a48901912ae261112ac01.gif

使用 JIT 编译器的初始阶段性能很低,因为要首先解释方法。随着编译方法的增多及 JIT 执行编译所需时间的缩短,性能曲线逐渐升高最后达到性能峰值。另一方面,AOT 编译代码启动时的性能比解释的性能高很多,但是无法达到 JIT 编译器所能达到的最高性能。将静态代码绑定到 JVM 实例中会产生一些开销,因此开始时的性能比稳定状态的性能值低,但是能够比使用 JIT 编译器更快地达到稳定状态的性能水平。

没有一种本地代码编译技术能够适合所有的 Java 执行环境。某种技术所擅长的通常正是其他技术的弱项。出于这个原因,需要同时使用这两种编译技术以满足 Java 应用程序开发人员的要求。事实上,可以结合使用静态和动态编译以便提供最大可能的性能提升 —— 但是必须具备平台无关性,它是 Java 语言的主要卖点,因此不成问题。

结束语

本文探讨了 Java 语言本地代码编译的问题,主要介绍了 JIT 编译器形式的动态编译和静态 AOT 编译,比较了二者的优缺点。

虽然动态编译器在过去的十年里实现了极大的成熟,使大量的各种 Java 应用程序可以赶上或超过静态编译语言(如 C++ 或 Fortran)所能够达到的性能。但是动态编译在某些类型的应用程序和执行环境中仍然不太合适。虽然 AOT 编译号称动态编译缺点的万能解决方案,但是由于 Java 语言本身的动态特性,它也面临着提供本地编译全部潜能的挑战。

这两种技术都不能解决 Java 执行环境中本地代码编译的所有需求,但是反过来又可以在最有效的地方作为工具使用。这两种技术可以相互补充。能够恰当地使用这两种编译模型的运行时系统可以使很大范围内的应用程序开发环境中的开发人员和用户受益。

55/5<12345

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

java静态编译 动态编译_Java代码的静态编译和动态编译中的问题比较 的相关文章

  • MyBatis 深入浅出

    一 MyBatis 基础 1 什么是MyBatis mybatis是一个持久层框架 用java编写的 它封装了jdbc操作的很多细节 使开发者只需要关注sql语句本身 而无需关注注册驱动 创建连接等繁杂过程 它使用了ORM思想实现了结果集的
  • Practical Methodology(2)

    CONTENTS Selecting Hyperparameters Most deep learning algorithms come with many hyperparameters that control many aspect
  • 支付宝App支付源码

    支付宝APP支付 无论在文档上 还是在demo上 比微信支付高好几个level吧 使用起来非常方便 基本上不会有什么太大的坑 只要严格按照demo 和文档进行操作的话 基本上可以一把过的 在这里要提示下 加签和验签使用的公钥问题 加签是在开
  • 图和Neo4j

    文章来源 拉勾教育Java高薪训练营第3期 程道老师 1 图论 1 1 图论的起源 柯尼斯堡 Konigsberg 七桥问题 图论起源于一个非常经典的问题 柯尼斯堡 Konigsberg 七桥问题 1738 年 瑞典数 学家欧拉 Leorn
  • Tomcat 架构原理解析到设计借鉴

    关注 码哥字节 让你学会更多拆解 Tomcat 发展这么多年 已经比较成熟稳定 在如今 追新求快 的时代 Tomcat 作为 Java Web 开发必备的工具似乎变成了 熟悉的陌生人 难道说如今就没有必要深入学习它了么 学习它我们又有什么收
  • Python print()函数使用详解,Python打印输出

    作者主页 士别三日wyx 作者简介 CSDN top100 阿里云博客专家 华为云享专家 网络安全领域优质创作者 推荐专栏 对网络安全感兴趣的小伙伴可以关注专栏 网络安全入门到精通 print 可以 打印输出 常用来将内容 打印 到控制台
  • 带环链表的环入口、环长度、链表总长

    1 判断链表是否带环 要先判断一个链表是否有环 最常用的方法是双指针法 想象一下 如果两个人在环形赛道上跑步 那么不管他们之前的起点位置如何 跑得快的必将与跑得慢的相遇 在该题中 直接使用快慢指针 慢指针步长为1 快指针步长为2 如果出发后
  • 在vscode中运行Hbuilder创建的项目

    想必习惯使用vscode的人突然使用HBuilder很不习惯吧 但是HBuilder创建的项目本身没有调试功能 当你有一个app项目但又不想使用HBuilder编写 需要浏览器调试的时候 你这时就需要一个插件了 uni run 插件 基于H
  • 异常(Exception)与错误(Error)

    Error和Exception 异常处理 Error和Exception 1 异常 Exception 指程序运行中出现的不期而至的各种状况 如文件找不到 网络连接失败 非法参数等 影响了正常的程序执行流程 但不至于程序崩溃 检查性异常 最
  • SpringBoot跨域设置(CORS)

    目录 一 什么是跨域 二 跨域资源共享 CORS 1 简单请求 2 非简单请求 三 SpringBoot设置CORS 1 配置过滤器CorsFilter 2 实现接口WebMvcConfigurer 3 使用注解 CrossOrigin 一
  • Qt开发的一点心得

    最近一两年的时间内 工作内容中经常需要使用Qt开发软件界面 Qt是一个具有面向对象特性的跨平台开发环境 并且集成了Qt creator的IDE 多大250 SDK 以及包括一些对于OpenGL 和2D 3D的支持 大量的开源软件包括Qt c
  • Object 详解

    Object 详解 Object 详解 1 Object 介绍 1 1 作用 1 2 Object 的组成 1 3 如何访问对象 1 4 判断 2 Object 创建 2 1 Object构造函数模式 2 2 对象字面量模式 2 3 工厂函
  • 基于Python的手机选购决策数据的分析与可视化大屏购物商城-Python爬虫安装数据分析与可视化计算机毕业设计

    更多项目资源 最下方联系我们 目录 一 项目技术介绍 二 项目配套文档 部分内容 资料获取 一 项目技术介绍 该项目含有源码 文档 PPT 配套开发软件 软件安装教程 项目发布教程 包运行成功以及课程答疑与微信售后交流群 送查重系统不限次数
  • Java - 类加载器

    文章目录 1 类加载的过程 2 类加载器的分类 2 1 引导类加载器 Bootstrap 2 2 扩展类加载器 ExtClassLoader 2 3 系统类加载器 AppClassLoader 2 4 三者之间的关系 2 5 自定义类加载器
  • 根据背景颜色,设置文字颜色是黑色还是白色

    pickTextColorBasedOnBgColorAdvanced bgColor lightColor fff darkColor 4c4c4c var color bgColor charAt 0 bgColor substring
  • 可用性测试(用户体验)测试

    本文内容来自 软件测试的艺术 可用性测试也叫用户体验测试 属于系统测试的一种 通过发动最终用户在真实环境下对应用程序进行测试 一些即使在大规模的自动化测试中没发现的问题都有可能被挖掘出来 可用性测试基本要素 1 是否每一个用户交互设计都考虑
  • 图解HTTP-核心知识总结1

    第一章 了解 Web 及网络基础 1 使用HTTP协议访问web 2 TCP IP的分层管理 3 TCP IP通信传输流 4 与HTTP关系密切的协议 IP TCP DNS 5 URI和URL区别 第一章 了解 Web 及网络基础 1 使用
  • 高斯混合模型--GMM

    原文 http blog sina com cn s blog 54d460e40101ec00 html 高斯混合模型 GMM Gaussian Mixture Model 统计学习的模型有两种 一种是概率模型 一种是非概率模型 所谓概率
  • 华为od寻找关键钥匙

    题目描述 小强正在参加 密室逃生 游戏 当前关卡要求找到符合给定 密码K 升序的不重复小写字母组成 的箱子 并给出箱子编号 箱子编号为1 N 每个箱子中都有一个字符串s 字符串由大写字母 小写字母 数字 标点符号 空格组成 需要在这些字符串

随机推荐

  • 服务机器人研究报告:产业链分析及投资前景预测

    服务机器人研究报告 产业链分析及投资前景预测 2017 08 31 08 37中国投资咨询网 服务机器人在国内发展的阻力远远小于工业机器人 一方面 服务机器人是国内公司与国外公司差距较小的领域 国内企业的服务机器人往往能针对特定市场进行开发
  • 用stm32f103点灯的一些模式

    关于stm32点灯 因为使用的芯片就母版可能不是一样的 这里我使用的是stm32f103c8t6来进行讲解 首先要点亮一个灯 就需要知道灯是一个外设 就涉及到gpio的一些知识点 第一步就是要对板子原理图上的硬件连接进行一定的了解 下面这是
  • 堆排序HeapSort

    堆排序的最好最坏平均时间复杂度都为nlogn adjustment执行次数为logn for循环次数为3 2n 空间复杂度为O 1 没有使用额外空间 include
  • 文盘Rust -- tonic-Rust grpc初体验

    gRPC 是开发中常用的开源高性能远程过程调用 RPC 框架 tonic 是基于 HTTP 2 的 gRPC 实现 专注于高性能 互操作性和灵活性 该库的创建是为了对 async await 提供一流的支持 并充当用 Rust 编写的生产系
  • 如何保护移动应用程序安全–移动应用程序安全检查表

    Security has always been a major concern for businesses And this concern is even greater when it comes to mobile apps 安全
  • 全程 AIGC 游戏创作,2小时开发微信小游戏!(完整ChatGPT调教流程)

    给 AI 打工 2小时开发一款3D小游戏可行么 源码下载地址见文末 最近 科技发展是日新月异 如果说 Stable Diffusion 和 Mid Journey 只是卷死了美术 我们还在庆幸研发不能被替代 那么 3 月份出来的 GPT4
  • react-router-dom的基本使用

    React Router Dom 1 React Router react router是一个核心库 我们在做PC端时要用react router dom 而在移动端我们要用React Router Native 2 React Route
  • 无极超分辨率

    文章目录 前言 一 Meta SR 1 1 Meta SR A Magnification Arbitrary Network for Super Resolution 1 2 Location Projection 1 3 Weight
  • Android Update Engine 分析(二十一)Android A/B 更新过程

    0 背景 早期 Android A B 系统升级在 Android 7 1 版本推出时 参考文档十分有限 也就是 Android 官方大概有两三个页面介绍文档 我的第一篇 A B 系统分析文章 Android A B System OTA分
  • php使用ecc算法进行签名,ECDSA签名算法(ECC椭圆曲线算法3)

    现在有一个场景 Alice想要用私钥签名一个数据 Bob想要使用Alice的公钥验证这个签名 只有Alice能够进行计算签名然后得到签名 每个人都能验证签名值 首先Alice和Bob拥有相同的椭圆曲线参数 算法被签名称之为ECDSA 是DS
  • 关于OpenGL纹理尺寸的坑 - 图像行偏移,出现异色条纹

    学习OpenGL时想简单创建一个纹理 但马上就出现错误 错误效果如下 原图如下 由于之前没有碰过这种问题 费了好大一番功夫才找到问题所在 原始图片尺寸为210 220 OpenGL版本与教程一致 为3 3 把像素值打印出来观察之后发现 传入
  • Spring 特性

    目录 核心特性 数据存储 Web 技术 Web Servlet 技术栈 Spring 1 4的唯一支持 Web Reactive 技术栈 Spring 5引入 技术整合 Integration 测试 Testing Spring 模块化设计
  • DeformableDetr论文简介+mmdet源码解读

    文章目录 前言 一 论文解读 1 1 研究问题 1 2 可形变注意力模块 1 3 拓展到多层特征图 二 mmdet源码讲解 2 1 图像特征提取 2 2 生成mask和位置编码 2 3 送入Transformer 2 3 1 Transfo
  • 机器学习之朴树贝叶斯②——调库实现

    文章目录 多项式朴素贝叶斯 MultinomialNB 高斯朴素贝叶斯 GaussianNB 多项式朴素贝叶斯 MultinomialNB sklearn naive bayes MultinomialNB alpha 1 0 fit pr
  • 为什么HashMap线程不安全?

    我们都知道 HashMap 是线程不安全的 那 HashMap 为什么线程不安全 JDK1 8 还有这些问题吗 如何解决这些问题呢 本文将对该问题进行解密 多线程下扩容死循环 JDK1 7中的 HashMap 使用头插法插入元素 在多线程的
  • 如何在深度学习中处理图像数据?

    深度学习在图像处理领域取得了重大的突破 可以用于图像分类 目标检测 图像生成等各种任务 处理图像数据的关键是将图像转换为适合深度学习模型处理的形式 下面是处理图像数据的一般步骤 1 数据准备 收集和整理用于训练的图像数据集 数据集应包含图像
  • MySQL基础篇——第10章 DDL(数据定义):创建和管理表

    MySQL基础篇 第10章 DDL 数据定义 创建和管理表 1 基础知识 1 1 一条数据存储的过程 存储数据是处理数据的第一步 只有正确地把数据存储起来 我们才能进行有效的处理和分析 MySQ的数据存储过程 创建数据库 确认字段 创建数据
  • 基于Matlab实现图像目标边界描述

    图像目标边界描述是图像处理中的一个重要问题 边界描述可以用于目标检测和识别 图像分割等应用 Matlab提供了强大的图像处理工具箱 可以方便地实现图像目标边界描述 本文介绍一种基于边缘检测的图像目标边界描述方法 并提供一个简单的案例源码 文
  • 自定义Webpack配置

    自定义Webpack配置 1 初始化并创建要被打包的文件 2 命令行配置 3 配置文件配置 1 初始化并创建要被打包的文件 首先创建文件夹webpack demo 随便起一个 用来演示打包过程 在该文件夹下终端运行命令 对项目进行初始化操作
  • java静态编译 动态编译_Java代码的静态编译和动态编译中的问题比较

    两种技术都需要谨慎选择编译的方法以实现最高的性能 对动态编译器而言 编译器自身作出决策 而对于静态编译器 由开发人员作出选择 让 JIT 编译器选择编译的方法是不是优点很难说 取决于编译器在给定情形中推断能力的好坏 在大多数情况下 我们认为