java – 没有JIT优化
发布时间:2020-12-15 04:12:12 所属栏目:Java 来源:网络整理
导读:看看 this question: 代码: class test{ public static void main(String abc[]) { for( int k=1; k=3; k++) { for( int N=1; N=1_000_000_000; N=N*10) { long t1 = System.nanoTime(); int j=1; for(int i=0; i=N; i++) j=j*i; long t2 = System.nanoTim
看看
this question:
代码: class test { public static void main(String abc[]) { for( int k=1; k<=3; k++) { for( int N=1; N<=1_000_000_000; N=N*10) { long t1 = System.nanoTime(); int j=1; for(int i=0; i<=N; i++) j=j*i; long t2 = System.nanoTime() - t1; System.out.println("Time taken for "+ N + " : "+ t2); } } } } 上面代码的输出: Time taken for 1 : 2160 Time taken for 10 : 1142 Time taken for 100 : 2651 Time taken for 1000 : 19453 Time taken for 10000 : 407754 Time taken for 100000 : 4648124 Time taken for 1000000 : 12859417 Time taken for 10000000 : 13706643 Time taken for 100000000 : 136928177 Time taken for 1000000000 : 1368847843 Time taken for 1 : 264 Time taken for 10 : 233 Time taken for 100 : 332 Time taken for 1000 : 1562 Time taken for 10000 : 17341 Time taken for 100000 : 136869 Time taken for 1000000 : 1366934 Time taken for 10000000 : 13689017 Time taken for 100000000 : 136887869 Time taken for 1000000000 : 1368178175 Time taken for 1 : 231 Time taken for 10 : 242 Time taken for 100 : 328 Time taken for 1000 : 1551 Time taken for 10000 : 13854 Time taken for 100000 : 136850 Time taken for 1000000 : 1366919 Time taken for 10000000 : 13692465 Time taken for 100000000 : 136833634 Time taken for 1000000000 : 1368862705 在循环中,即使i的值从0开始,表示产品为零,也没有JIT优化.为什么不 ? 解决方法
>在上一个问题中,JIT优化了方法开始的完整代码,而没有任何分析在方法返回时变量中出现的数字.这是因为你选择使你的方法无效,给JIT一个简单的线索,任何计算出的值都将被丢弃. >将当前示例与上一个问题中的示例进行对比,没有调用void方法,因此自然不会进行优化.为什么没有其他优化可以帮助这个完全不同的案例是一个无法回答的问题.在specefic JVM实现和特定的JVM调用中没有这样的优化,您已经使用它来测试代码.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |