9月7日-8日,相约 2023 腾讯全球数字生态大会!聚焦产业未来发展新趋势! 了解详情
写点什么

Java 6 Hotspot 的性能

  • 2008-05-12
  • 本文字数:1165 字

    阅读完需:约 4 分钟

Sun 公司的 Kohsuke Kawaguchi 考察了 Hotspot JIT 在 JDK6 u10 b14 debug 版中产生的汇编代码,并将其记录在博客中。该博文着重阐述了Java 优化的程度。

Kawaguchi 将重点放在两个主要的地方。首先是循环展开(loop unrolling),它是这样一种技术:复制循环的每次迭代所调用的指令以构成一个序列。通过减少循环中计算机需要执行的指令,节省了执行时间。JIT 将其与预处理和事后分析相结合,同时 Kawaguchi 对此的补充也说明了这样的事实:编译器已从循环的快速执行部分当中移除了一个冗余的数组索引检查。此外,结果汇编代码证明了特定于处理器的优化程度如何。例如,Kawaguchi 谈到了下面的代码:

private static byte[] foo() {
byte[] buf = new byte[256];
for( int i=0; i<buf.length; i++ )
buf[i] = 0;
return buf;
}

所产生的汇编结果使用了特定于 AMD64 芯片的 R8-R15 通用寄存器汇编代码。

其次是围绕着锁(locks)而进行的优化。在 Java 中非竞态锁的获取在不断地改进,而竞态锁的获取却一直存在问题。这个领域的工作还在持续进行中,但是 Kawaguchi 的工作却说明了几个已经得到改进的地方。

这篇文章展示了该 Hotspot 编译器很多其他的特性,包括强大的内联——James Gosling 注意到一篇相关的博文中说“甚至连存储分配和初始化都需要内联”。这一层级的侵略性(aggression)是可能存在的,部分原因在于 JVM 会在必要时做一些潜在不安全的优化。Charles Nutter 在今年初参加 Lang.NET 大会时曾对此提出了一个很好的解释。他也强调了这项工作与 JRuby 的关系,以及与任何面向 JVM 的语言的关系。

“过去 JVM 有多种不同的能力去动态优化和再优化代码……或许最重要的是必要时的动态“逆优化(deoptimize)”。在处理性能问题时,逆优化(Deoptimization)令人非常兴奋,因为这意味着你可以进行更多的侵略性优化——对整个应用不确定的未来的潜在的不安全的优化——知道你可以在安全的路径上回退。一旦你几次遇到相同的路径,你就可以内联整个调用路径。除非明显需要,你可以忽略同步保护。你还可以在发现问题之后改变使用的优化集……本质上,在运行过程中你可以安全的“出错”并且从错误中学习。这就是为什么在特定的基准上 Java 超越了 C 和 C++ 以及最终在几乎所有基准上它都能将超越 C 和 C++ 的主要原因。同时这也是我们的 JRuby 与微软的 IronPython 和 DLR 相比,只需要做很少的事情就可以获得可接受的性能的一个关键原因。”

从理论上讲,像 Java 这样的解释型语言的性能很有可能最终将超越编译型语言,因为它可以在运行时基于现有硬件进行优化,同时 Java 中不断提高的对特定于处理器的优化确实令人非常兴奋。对于面向 Java 平台的开发者来说,一个额外的好处在于随着新版本 Java 编译器的发布,代码的性能会不断改进,而无需对应用的源码做任何更改。

查看英文原文: Java 6 Hotspot Performance

活动推荐:

2023年9月3-5日,「QCon全球软件开发大会·北京站」 将在北京•富力万丽酒店举办。此次大会以「启航·AIGC软件工程变革」为主题,策划了大前端融合提效、大模型应用落地、面向 AI 的存储、AIGC 浪潮下的研发效能提升、LLMOps、异构算力、微服务架构治理、业务安全技术、构建未来软件的编程语言、FinOps 等近30个精彩专题。咨询购票可联系票务经理 18514549229(微信同手机号)。

2008-05-12 11:19380
用户头像

发布了 88 篇内容, 共 254.9 次阅读, 收获喜欢 6 次。

关注

评论

发布
暂无评论
发现更多内容

Go- 字符串

HelloBug

索引 字符串 Go 语言 拼接 长度

回调模式

wzh

面试 设计模式 回调函数

Java web程序的运行时环境

wzh

Java tomcat 面试 Web JVM

JVM内存划分

wzh

面试 JVM 方法区

MySQL 系列教程之(十一)Explain 与慢查询优化

若尘

MySQL 数据库 8月日更

四种常见的 POST 提交数据方式

一个大红包

8月日更

Android开发:新建后缀为txt的文件并且使用的步骤

三掌柜

8月日更 8月

观察者模式

wzh

面试 设计模式 观察者模式

装饰器模式

wzh

面试 设计模式 装饰器

Vue进阶(五十五):vue-cli 脚手架 build.js 配置文件详解

No Silver Bullet

Vue 8月日更

Android EditText输入框实现下拉且保存最近5个历史记录

Andy阿辉

android Android 小菜鸟 编程思想 8月日更

Android.mk

Changing Lin

8月日更

Golang协程之了解管道的缓存能力

Regan Yue

协程 Go 语言 8月日更

java操作sql server数据库

Python研究者

8月日更

ShardingSphere源码解析 初步准备

Java 源码 ShardingSphere

vue入门:vuex概括与使用

小鲍侃java

8月日更

Vue进阶(五十四):vue-cli 脚手架 dev-server.js 配置文件详解

No Silver Bullet

Vue 8月日更

模块五作业

seawolflin

架构训练营

kubernetes/k8s CNI 分析 - 容器网络接口分析

良凯尔

Kubernetes 源码分析 Kubernetes Plugin #Kubernetes# cni

手撸二叉树之合并二叉树

HelloWorld杰少

8月日更 数据结构算法

@ConditionOnClass的使用

Rubble

8月日更

Nginx-基本概念和使用

Rubble

8月日更

策略模式

wzh

面试 设计模式 策略模式

类加载机制

wzh

Java 面试 JVM 类加载器 JVM类加载

使用Redisson优雅关闭订单

码农参上

redission 8月日更

Java技术开发专题系列之【Guava Collections】实战使用相关Guava不一般的集合框架

洛神灬殇

Java Guava 8月日更 Guava Collections

【布道API】权限错误码选择:401、403 或 404

devpoint

HTTP Authorization REST API 8月日更

JAVA 规范

gin

JVM GC机制

wzh

面试 JVM 垃圾回收 GC GC Root

IDEA2020.1构建Spring5.2.x源码

4ye

Java spring 源码 后端 8月日更

为了完成小姐姐安排的打分系统,又熬了一个小时的夜补充视图与模板

梦想橡皮擦

8月日更

  • 扫码添加小助手
    领取最新资料包
Java 6 Hotspot的性能_Java_Charles Humble_InfoQ精选文章