【问题标题】:Smart JVM and JIT Micro-Optimizations智能 JVM 和 JIT 微优化
【发布时间】:2009-07-17 17:19:01
【问题描述】:

随着时间的推移,Sun 的 JVM 和 JIT 变得非常聪明。过去作为必要的微优化的常识已不再需要,因为它会为您处理好。

例如,过去的情况是您应该将所有可能的类标记为最终类,因此 JVM 内联尽可能多的代码。但是现在,JIT 根据在运行时加载的类知道您的类是否是最终类,如果您加载一个类以使原始类不可最终化,它会取消内联方法并将其取消标记为最后。

JVM 或 JIT 还为您做了哪些其他智能微优化?

编辑:我把它做成了一个社区维基;我想随着时间的推移收集这些。

【问题讨论】:

    标签: java jvm jit micro-optimization


    【解决方案1】:

    令人印象深刻。所有这些都是您can't 在 C++ 中所做的事情(当然与 Java 所做的相同)。请记住,Java 的早期版本因没有这些东西而开始享有“缓慢”的声誉,随着时间的推移,我们会显着不断改进。这仍然是一个很大的研究领域。

    【讨论】:

    • 好吧,java 可能很聪明,但它仍然使用大量资源
    • @mnml 这比流行的观点要少。要创建一个对象,我认为他们将其归结为 2 或 3 条指令。是的,像 C++ 这样的东西通常更快,但“资源”不仅仅是 CPU 和内存;这也是工时。硬件便宜,人贵。从长远来看,java 通常会在性能上胜出,因为它的 JIT 非常出色,并且会比大多数 C++ 应用程序所梦想的更优化应用程序。
    • @Alex 希望我能给你代表指出人是资源。多么可怕,相信这一点。您作为员工的时间通常会花费公司更多的钱,而不是在 HDD 中购买额外的 TB 或在旧网络服务器中购买更好的 CPU。
    【解决方案2】:

    Oracle 在 Performance techniques used in the Hotspot JVM 上有一个 wiki。

    【讨论】:

      【解决方案3】:

      Java 在内联方面更聪明

      • 内联代码仅在运行时可用 甚至动态生成。
      • 内联虚拟方法(一次最多两个)
      • 对内联方法及其内联方法执行转义分析。 (更难做到 在 C++ 中)

      【讨论】:

        猜你喜欢
        • 2013-04-21
        • 1970-01-01
        • 2017-06-09
        • 2019-04-15
        • 2018-06-25
        • 2011-03-06
        • 1970-01-01
        • 1970-01-01
        • 2011-12-12
        相关资源
        最近更新 更多