微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

java – 我可以手动复制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可以在迭代之前实际执行边界检查并在每次迭代期间跳过它),它可以优化掉许多检查.

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐