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可以在迭代之前实际执行边界检查并在每次迭代期间跳过它),它可以优化掉许多检查. 这种优化根本无法用字节代码表示,因为边界检查是隐式的,在表示数组访问的字节代码中无法避免. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
热点阅读