加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 我可以手动复制JVM完成的一些优化吗?

发布时间:2020-12-15 08:33:48 所属栏目:Java 来源:网络整理
导读:我正在学校做一个数独求解器,我们正在进行一场小小的表演比赛.现在,我的算法在第一次运行时(大约2.5ms)非常快,但是当我解决相同的谜题10 000次(每次运行大约0.5ms)时更快.当然,这些时间取决于正在解决的难题.我知道JVM在多次调用方法时会做一些优化,这是我怀
我正在学校做一个数独求解器,我们正在进行一场小小的表演比赛.现在,我的算法在第一次运行时(大约2.5ms)非常快,但是当我解决相同的谜题10 000次(每次运行大约0.5ms)时更快.当然,这些时间取决于正在解决的难题.我知道JVM在多次调用方法时会做一些优化,这是我怀疑正在发生的事情.

我不认为我可以进一步优化算法本身(虽然我会继续寻找),所以我想知道我是否可以复制JVM完成的一些优化.

注意:编译为本机代码不是一种选择

谢谢!

编辑:所有这些VM选项都很好,但在算法竞赛中并不真正“合法”,因为每个人都可以使用这些选项并获得性能提升.我正在寻找代码优化.

解决方法

tl; dr:不,JVM完成的大多数优化都不能用 Java字节代码表示.

就其本质而言,Java字节代码在很高的层次上定义了您的代码.

这是设计上的原因之一,也是JVM可以完成所有优化的原因之一:字节代码描述了相对较高级别的操作,并将实际执行细节留给了JVM.

由于这一事实,大多数优化不能用字节代码本身表示.

例如,JVM规范指定超出数组边界的每个数组访问都必须抛出ArrayIndexOutOfBoundsException(参见VM Spec 2.5.14).

但是,如果智能JVM知道它们已经发生(例如,当迭代数组时,那么JVM可以在迭代之前实际执行边界检查并在每次迭代期间跳过它),它可以优化掉许多检查.

这种优化根本无法用字节代码表示,因为边界检查是隐式的,在表示数组访问的字节代码中无法避免.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读