gpt4 book ai didi

java - 如何找出 JVM 对我的代码应用了哪些优化?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:53:08 26 4
gpt4 key购买 nike

JVM(尤其是 HotSpot VM)以其可以在运行时应用的大量优化而闻名。

有没有办法查看某段代码,看看 JVM 实际对它做了什么?

最佳答案

一个问题是“JVM 实际对它做了什么”在调用之间发生变化,因为 JVM 可以自由地重新生成代码。

举个例子,几天前我调查了 Hotspot 使用 final 方法与虚拟方法相比有何作用。从微基准来看,我的结论是:

  • 客户端 JVM:如果方法有效 final(没有任何加载的类覆盖它),JVM 使用非虚拟调用。之后,如果您加载一个覆盖此方法的类,JVM 将更改 JIT 代码以使调用成为虚拟的。所以声明为 final 没有重要意义。

  • 服务器 JVM:这里的 final 似乎也没有相关性。似乎发生的情况是 JVM 为您第一次 使用的任何类生成一个非虚拟调用,与加载的任何类无关。之后,如果您从另一个类的对象进行调用,JVM 将使用与此类似的内容修补所有调用(我猜它还会分析调用,因此如果它没有得到,它可以更改快速路径和慢速路径第一次就对了):

    if (object instanceof ClassOfNonVirtualCall) {        do non-virtual call to ClassOfNonVirtualCall.method    } else {        do virtual call to object.method    }

如果您真的对查看生成的代码感兴趣,您可以使用来自 OpenJDK 的 DEBUG JVM:

http://dlc.sun.com.edgesuite.net/jdk7/binaries/index.html

http://wikis.sun.com/display/HotSpotInternals/PrintAssembly

关于java - 如何找出 JVM 对我的代码应用了哪些优化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3669071/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com