为什么 Java 比其他解释语言具有更好的性能? [关闭]

2024-01-02

为什么 Java 与 Python 等其他解释语言相比具有更好的性能?我知道这可能与它预先编译有关,但是并发性又如何呢?

JVM 如何能够在并发程序上表现得更好,而解释性语言必须处理诸如全局解释器锁定等问题,这确实会减慢速度?


这是一个非常有趣的问题,但我不确定是否有一个简单的方法来回答它。如今,JVM 使用一系列高度积极的优化来尝试提高性能。以下是一些:

  • 动态编译:大多数优秀的 JVM 都可以将字节码直接动态编译为机器代码,然后以本机速度执行。
  • 多态内联缓存:许多 JVM 使用内联缓存 http://en.wikipedia.org/wiki/Inline_caching通过记住过去调用过哪些函数来尝试提高方法分派的性能。
  • 静态类型:由于 Java 是静态类型的,因此字节码指令很少需要对对象的类型进行昂贵的内省来确定如何对其执行操作。可以静态计算字段偏移量,也可以预先计算虚拟函数表中的方法索引。将此与 JavaScript 等语言进行对比,后者没有静态类型并且更难解释。
  • 垃圾收集:JVM 垃圾收集器经过优化,可以有效地分配和释放对象。它结合使用标记和清除以及停止和复制技术,使大多数分配速度非常快,并且可以轻松快速地回收大量内存。
  • 已知的瓶颈:一些 JVM 实现会自动将额外的代码插入到每段已编译/解释的代码中,以定期检查 VM 并确定它们是否可以继续运行,而不是使用巨大的 VM 锁。这样,如果 JVM 仅需要在少数线程中执行垃圾收集,它可以在其他线程运行时执行此操作。如果需要执行停止世界操作,则只会在线程到达特定点时发生,这意味着简单的操作不必持续检查虚拟机状态。

还有很多很多我可能不知道的优化,但我希望这可以帮助您找到答案!

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

为什么 Java 比其他解释语言具有更好的性能? [关闭] 的相关文章

  • 获取文件的锁

    我想在对特定文件开始 threo read 时获取文件上的锁定 以便其他应用程序无法读取已锁定的文件并希望在线程终止时释放锁定文件 您可以获得一个FileLock https docs oracle com javase 8 docs ap
  • 带有 Android 支持库 v7 的 Maven Android 插件

    我使用 maven android plugin 构建我的 android 应用程序 它依赖于 android 支持库 v4 和 v7 由于我没有找到如何从developer android com下载整个sdk 因此我无法使用maven
  • Reactive Spring 不支持 HttpServletRequest 作为 REST 端点中的参数?

    我创建了一个 RestController 如下所示 RestController public class GreetingController RequestMapping value greetings method RequestM
  • 从 MS Access 中提取 OLE 对象(Word 文档)

    我有一个 Microsoft Access 数据库 其中包含一个包含 Microsoft Word 文档的 OLE 对象字段 我试图找到代码来检索保存在 OLE 对象中的文件 以便用户可以从我的 JavaFx 应用程序中的按钮下载它 但没有
  • 如何在java Spring Boot中实现通用服务类?

    我有许多具有重复代码的服务 我想知道如何实现通用服务 以便我的所有服务都可以扩展它 服务接口示例 重复代码 Service public interface IUserService List
  • 为自定义驱动程序创建 GraphicsDevice

    我正在开发一个在嵌入式系统中使用 Java 的项目 我有用于屏幕和触摸输入的驱动程序 以及用于文本输入的虚拟键盘 我的屏幕驱动程序有一个Graphics2D您可以绘制的对象和repaint Rectangle 更新方法 类似地 触摸驱动器能
  • Java中的断点和逐步调试?

    抱歉我的问题名称很奇怪 我不知道如何寻找这个 因为我不知道这些东西是如何称呼的 Visual Studio 中至少有一个功能 您可以单击代码左侧并设置一个大红点的起点 然后运行程序 您可以通过按 f8 或 f5 实际上是不同的 f 来跟踪步
  • 在 MongoDB 和 Apache Solr 之间同步数据的简单方法

    我最近开始使用 MongoDB 和 Apache Solr 我使用 MongoDB 作为数据存储 并且希望 Apache Solr 为我的数据创建索引 以实现应用程序中的搜索功能 经过一些研究 我发现 基本上有两种方法可以在 MongoDB
  • Java:从集合中获取第一项

    如果我有一个集合 例如Collection
  • LEFT JOIN 比 INNER JOIN 快得多

    我有一张桌子 MainTable 有超过 600 000 条记录 它通过第二个表连接到自身 JoinTable 在父 子类型关系中 SELECT Child ID Parent ID FROM MainTable AS Child JOIN
  • org/codehaus/plexus/archiver/jar/JarArchiver(不支持的major.minor版本49.0)-Maven构建错误

    下午大家 我在尝试构建项目时收到上述错误 我很确定这与使用 Java 1 6 编译的 Maven 最新更新有关 而我们尝试构建的项目是 1 4 项目 在此之前的插件工作没有问题 因此我将以下内容添加到 POM xml 文件中以尝试强制使用现
  • 添加到列表时有没有办法避免循环?

    我想知道这样的代码 List
  • 当 minifyEnabled 为 true 时 Android 应用程序崩溃

    我正在使用多模块应用程序 并且该应用程序崩溃时minifyEnabled true in the installed模块的build gradle 以下是从游戏控制台检索到的反混淆堆栈跟踪 FATAL EXCEPTION Controlle
  • 如何删除日期对象的亚秒部分

    当 SQL 数据类型为时间戳时 java util Date 存储为 2010 09 03 15 33 22 246 如何在存储记录之前将亚秒设置为零 例如 在本例中为 246 最简单的方法是这样的 long time date getTi
  • 如何通过 Android 按钮单击运行单独的应用程序

    我尝试在 Android 应用程序中添加两个按钮 以从单独的两个应用程序订单系统和库存系统中选择一个应用程序 如图所示 我已将这两个应用程序实现为两个单独的 Android 项目 当我尝试运行此应用程序时 它会出现直到正确选择窗口 但是当按
  • 在 Clojure 中解压缩 zlib 流

    我有一个二进制文件 其内容由zlib compress在Python上 有没有一种简单的方法可以在Clojure中打开和解压缩它 import zlib import json with open data json zlib wb as
  • 无法在 Java/Apache HttpClient 中处理带有垂直/管道栏的 url

    例如 如果我想处理这个网址 post new HttpPost http testurl com lists lprocess action LoadList 401814 1 Java Apache 不允许我这么做 因为它说竖线 是非法的
  • 避免 Java 中的重复导入:继承导入?

    有没有办法 继承 导入 Example 常见枚举 public enum Constant ONE TWO THREE 使用此枚举的基类 public class Base protected void register Constant
  • 禁用 Android 菜单组

    我尝试使用以下代码禁用菜单组 但它不起作用 菜单项仍然启用 你能告诉我出了什么问题吗 资源 菜单 menu xml menu menu
  • 将对象从手机共享到 Android Wear

    我创建了一个应用程序 在此应用程序中 您拥有包含 2 个字符串 姓名和年龄 和一个位图 头像 的对象 所有内容都保存到 sqlite 数据库中 现在我希望可以在我的智能手表上访问这些对象 所以我想实现的是你可以去启动 启动应用程序并向左和向

随机推荐

  • 无法更新 XCode:空间不足[重复]

    这个问题在这里已经有答案了 我正在尝试将 XCode 从 11 2 1 更新到 12 4 我从应用程序商店安装了 XCode 因此我尝试从那里更新它 我有 27 GB 的可用空间 但每次尝试更新时 都会提示我没有足够的空间 我不认为还有什么
  • Neoclipse 的替代品 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在玩neo4j来用JAVA存储一些数据 我希望有一个好方法来可视化我的 neo4j 数据库并查看属性等 主要是为了获得反馈并了解我在数
  • macOS 应用程序:处理绑定到全局键盘快捷键的组合键

    在某些应用程序中 应用程序直接处理键盘快捷键是有意义的 否则这些快捷键将绑定到系统范围的组合 例如 Space 通常是 Spotlight 或 Tab 通常是应用程序切换器 这适用于各种 Mac 应用程序 例如 VMWare Fusion
  • 将子元素范围包装在 div 中

    我试图将一系列子元素包装在 div 中 以便分组操作它们 尝试将每个组定位在不同的位置 场景是我有一个随机生成的列表li标签 无论出现多少个 我都需要单独操作每组十个标签 为了解决这个问题 我使用了一个书面列表 ul li ul li nt
  • ZSH RPROMPT 奇怪的间距?

    这是我的 ZSH 提示主题 function git prompt info ref git symbolic ref HEAD 2 gt dev null return echo parse git dirty ZSH THEME GIT
  • C语言这段代码是什么意思? if(按钮 & 1)==1 [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我对此很困
  • java.security.AccessControlException:访问被拒绝(java.io.FilePermission

    final File parentDir new File S PDSPopulatingProgram parentDir mkdir final String hash popupateData final String fileNam
  • 定制 Android 电话应用程序

    我认为这是正确的论坛 而不是 android stackechange 因为它与软件相关 我是一名 Java 开发新手 需要创建具有以下功能的自定义 Android 电话应用程序 设备启动时自动启动 以信息亭模式启动 无通知 或访问其他应用
  • 如何隐式转换模板化构造函数参数?

    我正在重载模板类的构造函数A对于标量和容器类型参数 具有不同的输入类型 template
  • 与任何 Excel 操作进行上下文同步时发生内部错误

    我有多个 Excel 工作簿导致 Excel API 抛出异常An internal error has occurred在我们在应用程序中进行的第一次上下文同步中 Excel代码看起来像这样 let range ctx workbook
  • 搜索具有特定文件内容的文件

    我正在尝试编辑许多具有特定文件内容的文件 我需要搜索那些有一些内容的文件 有没有任何软件可以非常准确地进行此类搜索 我尝试使用 Windows 7 进行搜索 但看起来丢失了许多文件 Thanks Windows 本机搜索可能非常有限 我建议
  • 由外部包导出的 React 和 Webpack 渲染组件

    我正在尝试使用外部脚本中公开的 React 组件 捆绑A 在我的主 React 应用程序中 捆绑包B 外部 React header 组件 捆绑A 是通过加载
  • 如何防止groupby超类索引?

    假设您有以下半多索引对象 https pandas pydata org pandas docs stable user guide advanced html creating a multiindex hierarchical inde
  • Visual Studio 调用堆栈窗口不显示文件名

    我正在 Visual Studio 中调试程序 我想知道为什么我的程序会传递到特定单元 源代码文件 中的函数旁边 我以为调用堆栈会显示这一点 但事实似乎并非如此 此外 可显示条目列表甚至没有提及文件名 显示模块名称 显示参数类型 显示参数名
  • html5画布描边样式?

    我正在尝试将图像映射到使用描边样式和画布模拟布料的 3d 网格 我包含该图像 但它当前充当背景图像 实际上并不像波纹那样与 布料 一起流动 即随着网格的流动 图像是静态的 这是jsfiddle http jsfiddle net S7nBq
  • 在 DIV 中换行时缩进文本的最佳方法是什么?

    所以我有一个包含一些动态文本的 DIV 假设我知道文本和字体大小 但不知道 DIV 的大小 我希望 DIV 中文本的显示足够智能 以便在文本换行时显示缩进 假设我的原始文本看起来像这样 Lorem ipsum dolor sit amet
  • JavaScript 回调函数中的变量总是获取循环中的最后一个值? [复制]

    这个问题在这里已经有答案了 我正在尝试执行以下操作 我有一组图像并选择 下拉 HTML 元素 每个元素 30 个 我尝试在从 1 到 30 的循环中使用 AddEventListener 以便当我更改选择的值时 图像 src 会更新 并且图
  • 如何从日期时间中删除时间

    数据库中DATE字段的格式如下 2012 11 12 00 00 00 我想从日期中删除时间并返回日期 如下所示 11 12 2012 首先 如果您的日期采用 varchar 格式 请更改它 将日期存储为日期 https sqlblog o
  • 如何使用户从唯一一台机器(通过获取CPU Serial)登录到ASP.NET-MVC Web应用程序

    设想 我已经使用个人用户帐户部署了 Web ASP NET MVC 5 应用程序 Identity 2 x 每个用户都有一个电子邮件和密码来通过浏览器登录网络应用程序 这意味着用户可以通过任何具有互联网浏览器的设备登录 我想启用用户登录 条
  • 为什么 Java 比其他解释语言具有更好的性能? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi