有趣的优化问题

本贴最后更新于 2404 天前,其中的信息可能已经东海扬尘

先上环境

$ java -version java version "1.8.0_171" Java(TM) SE Runtime Environment (build 1.8.0_171-b11) Java HotSpot(TM) 64-Bit Server VM (build 25.171-b11, mixed mode)

测试代码

public class DemoTest { interface Op { int operate(int d); } static class M1 implements Op { @Override public int operate(int d) { return d + 1; } } static class M2 implements Op { @Override public int operate(int d) { return d + 1; } } public static void callMillion(Op op) { int d = 0; for (int i = 0; i < 1000000; i++) { op.operate(d); } } public static void main(String[] args) { CyclicBarrier cyclicBarrier = new CyclicBarrier(3); ExecutorService executorService = Executors.newFixedThreadPool(3); // 执行 100W 次 M1 executorService.submit(() -> { try { cyclicBarrier.await(); } catch (InterruptedException | BrokenBarrierException e) { e.printStackTrace(); } long start = System.nanoTime(); callMillion(new M1()); long cost = System.nanoTime() - start; System.out.println("start:" + (start / 1000000) + ", test1: " + cost); }); // 执行 100W 次 M2 executorService.submit(() -> { try { cyclicBarrier.await(); } catch (InterruptedException | BrokenBarrierException e) { e.printStackTrace(); } long start = System.nanoTime(); callMillion(new M2()); long cost = System.nanoTime() - start; System.out.println("start:" + (start / 1000000) + ", test2: " + cost); }); // 执行 100W 次真实逻辑 executorService.submit(() -> { try { cyclicBarrier.await(); } catch (InterruptedException | BrokenBarrierException e) { e.printStackTrace(); } long start = System.nanoTime(); int d = 0; for (int i = 0; i < 1000000; i++) { d += 1; } long cost = System.nanoTime() - start; System.out.println("start:" + (start / 1000000) + ", test3: " + cost); }); executorService.shutdown(); } }

可以先心里想一下答案是什么,然后再验证一下,如果出乎了你的意料,欢迎讨论

打赏 10 积分后可见
10 积分 • 1 打赏
  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3194 引用 • 8214 回帖
  • 优化

    不成熟的优化是万恶之源。

    过度优化实则是劣化。

    32 引用 • 173 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • 88250 1

    没看内容 😂

    PS 跑基准测试一定要用 JMH,不然测不准。

    1 回复
  • scmod

    看了内容,感觉结果 3 个应该差不多...然而不知道楼主是什么意思....

    1 回复
  • tiangao

    别光看只想不动手啊

    1 回复
  • scmod

    多线程的东西,结果跟 cpu 心情也有关啊...我说每次结果都不一样你信吗...

  • DrJoseph

    建议 D 大可以单独开一贴推荐一些好用的 plugin

  • Not-Found

    emmm,想表达什么啊?

请输入回帖内容 ...